This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| de:examples:motor:stepper [2010/11/22 18:49] – angelegt Wember | de:examples:motor:stepper [2020/07/20 12:00] (current) – external edit 127.0.0.1 | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Schrittmotor ====== | ||
| + | // | ||
| + | |||
| + | ===== Theorie ===== | ||
| + | |||
| + | [{{ : | ||
| + | |||
| + | Schrittmotoren können generell in unipolare und bipolare Schrittmotoren eingeteilt werden. | ||
| + | Unipolare Schrittmotoren haben charakteristische Windungen welche die zwei Spulen in vier unterteilen. Schrittmotoren haben keine eingebauten Bürsten oder Elektronik, d.h. jegliche Kommunikation muss extern erfolgen. Der am meisten benutzte Kommutationstyp ist der offene-Regelkreis- (" | ||
| + | |||
| + | Schrittmotoren werden oft in Applikationen genutzt, die Genauigkeit benötigen. Anders als Gleichstrommotoren haben Schrittmotoren weder Bürsten, noch Kommutatoren. Sie haben verschiedene unabhängige Spulen, welche durch externe Elektronik (Treiber) angetrieben werden. Um den Rotor anzutreiben, | ||
| + | | ||
| + | * Reluktanzschrittmotor (hohe Genauigkeit, | ||
| + | * Permanentmagnetschrittmotor (niedrige Genauigkeit, | ||
| + | * Hybrider Schrittmotor (hohe Genauigkeit, | ||
| + | |||
| + | Der Reluktanzschrittmotor verfügt über gezahnte Windungen und einen gezahnten Weicheisenrotor. Die größte Zugkraft entsteht, wenn die Zähne beider Seiten sich gegenseitig abdecken. Der Permanentmagnetschrittmotor bestitz, wie der Name schon sagt, Permanentmagneten welche sich je nach Polarität der Windung orientieren. Der hybride Schrittmotor nutzt beide Techniken. | ||
| + | |||
| + | Je nach Modell des Schrittmotors, | ||
| + | |||
| + | |||
| + | < | ||
| + | |||
| + | **Unipolare Schrittmotoren ** | ||
| + | |||
| + | [{{ : | ||
| + | |||
| + | Unipolare Schrittmotoren haben fünf oder sechs Anschlüsse. Je nach Aufbau des Motors werden nur ¼ der Wicklungen aktiviert. //Vcc// Leitungen werden normalerweise an der positiven Stromquelle angeschlossen. Während der Umwandlung sind die Enden der Wicklungen 1a, 1b, 2a und 2b über Transistoren (Transistorarray der Motorplatine ULN2803) nur an die Masse angeschlossen, | ||
| + | |||
| + | **Bipolare Schrittmotoren** | ||
| + | |||
| + | [{{ : | ||
| + | |||
| + | Bipolare Schrittmotoren unterscheiden sich von unipolaren, da sie die Polarität ihrer Wicklungen während der Umwandlung verändern. Die Hälfte der Wicklungen wird gleichzeitig aktiviert, daher sind sie effizenter als unipolare Schrittmotoren. Bipolare Schrittmotoren haben 4 Anschlüsse, | ||
| + | |||
| + | Die notwendige Kommutation, | ||
| + | |||
| + | |||
| + | ^ ^ | ||
| + | ^ Schritt ^ 1A ^ 2A ^ 1B ^ 2B ^ 1A ^ 2A ^ 1B ^ 2B ^ | ||
| + | ^ | ||
| + | | 1 ^ 1 | 0 | 0 | 0 ^ + | - | - | - | | ||
| + | | 2 | 0 ^ 1 | 0 | 0 | - ^ + | - | - | | ||
| + | | 3 | 0 | 0 ^ 1 | 0 | - | - ^ + | - | | ||
| + | | 4 | 0 | 0 | 0 ^ 1 | - | - | - ^ + | | ||
| + | ^ | ||
| + | | 1 ^ 1 | 0 | 0 | 0 ^ + | - | - | - | | ||
| + | | 2 ^ 1 ^ 1 | 0 | 0 ^ + ^ + | - | - | | ||
| + | | 3 | 0 ^ 1 | 0 | 0 | - ^ + | - | - | | ||
| + | | 4 | 0 ^ 1 ^ 1 | 0 | - ^ + ^ + | - | | ||
| + | | 5 | 0 | 0 ^ 1 | 0 | - | - ^ + | - | | ||
| + | | 6 | 0 | 0 ^ 1 ^ 1 | - | - ^ + ^ + | | ||
| + | | 7 | 0 | 0 | 0 ^ 1 | - | - | - ^ + | | ||
| + | | 8 ^ 1 | 0 | 0 ^ 1 ^ + | - | - ^ + | | ||
| + | |||
| + | ===== Übung ===== | ||
| + | |||
| + | Das Ziel dieser Aufgabe ist es, unter Anwendung der oben beschrieben Methode einen bipolaren Schrittmotor zu starten, welcher mit einem unipolaren Schrittmotor getauscht werden kann. Es gibt Treiber auf der Motorenplatine, | ||
| + | Zu den Enden 1A, 1B, 2A und 2B gehören die entsprechenden Pins PB0, PB1, PB2 Und PB3 am Mikrocontroller. | ||
| + | |||
| + | In der HomeLab Bibliothek gibt es die Funktion // | ||
| + | |||
| + | <code c> | ||
| + | // | ||
| + | // Vorbereitung der Steuerung des bipolaren Schrittmotors. | ||
| + | // | ||
| + | void bipolar_init(void) | ||
| + | { | ||
| + | DDRB |= 0x0F; | ||
| + | PORTB &= 0xF0; | ||
| + | } | ||
| + | |||
| + | // | ||
| + | // Bewegung des bipolaren Schrittmotors mit Halbschritten. | ||
| + | // | ||
| + | void bipolar_halfstep(signed char dir, | ||
| + | unsigned short num_steps, unsigned char speed) | ||
| + | { | ||
| + | unsigned short i; | ||
| + | unsigned char pattern, state1 = 0, state2 = 1; | ||
| + | |||
| + | // Festlegung der Richtung +- 1 | ||
| + | dir = ((dir < 0) ? -1 : +1); | ||
| + | |||
| + | // Durchführung von Halbschritten. | ||
| + | for (i = 0; i < num_steps; i++) | ||
| + | { | ||
| + | state1 += dir; | ||
| + | state2 += dir; | ||
| + | |||
| + | // Erstellung des Musters. | ||
| + | pattern = (1 << ((state1 % 8) >> 1)) | | ||
| + | (1 << ((state2 % 8) >> 1)); | ||
| + | | ||
| + | // Output setzen. | ||
| + | PORTB = (PORTB & 0xF0) | (pattern & 0x0F); | ||
| + | |||
| + | // Pause um auf die Ausführung des Schrittes zu warten. | ||
| + | sw_delay_ms(speed); | ||
| + | } | ||
| + | |||
| + | // Anhalten des Motors. | ||
| + | PORTB &= 0xF0; | ||
| + | } | ||
| + | </ | ||
| + | |||
| + | Die Funktion wird durch ein Beispielprogramm demonstriert, | ||
| + | |||
| + | <code c> | ||
| + | // | ||
| + | // Das Testprogramm für den bipolaren Schrittmotor des Motormoduls | ||
| + | // des HomeLab. | ||
| + | // | ||
| + | #include < | ||
| + | |||
| + | // | ||
| + | // Hauptprogramm. | ||
| + | // | ||
| + | int main(void) | ||
| + | { | ||
| + | // Einrichtung des Motors. | ||
| + | bipolar_init(); | ||
| + | | ||
| + | // Endlosschleife. | ||
| + | while (true) | ||
| + | { | ||
| + | // Bewegung des Rotors 200 Halbschritte in eine Richtung mit einer Geschwindigkeit von 30 ms/Schritt. | ||
| + | bipolar_halfstep(+1, | ||
| + | |||
| + | // Bewegung des Rotors 200 Halbschritte in die andere Richtung mit einer Geschwindigkeit von 30 ms/Schritt. | ||
| + | bipolar_halfstep(-1, | ||
| + | } | ||
| + | } | ||
| + | </ | ||