| Next revision | Previous revision |
| de:examples:motor:stepper [2010/11/22 16:49] – angelegt Wember | de:examples:motor:stepper [2020/07/20 09:00] (current) – external edit 127.0.0.1 |
|---|
| ====== SChrittmotor ====== | ====== Schrittmotor ====== |
| |
| //Necessary knowledge: [HW] [[en:hardware:homelab:motor]], [AVR] [[en:avr:io]], [LIB] [[en:software:homelab:library:module:motor]]// | //Notwendiges Wissen: [HW] [[en:hardware:homelab:motor]], [AVR] [[en:avr:io]], [LIB] [[en:software:homelab:library:module:motor]]// |
| |
| ===== Theorie ===== | ===== Theorie ===== |
| |
| [{{ :examples:motor:stepper:stepper.jpg?220|Stepper-motor}}] | [{{ :examples:motor:stepper:stepper.jpg?220|Schrittmotor}}] |
| |
| Schrittmotoren können generell in unipolare und bipolare Schrittmotoren unterteilt werden. | 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 benuzte Kommutationstyp ist der "open-loop" Modus: der Der Schrittmotortreiber lädt die Spulen nach einem bestimmten Muster, nutzt aber keine Feedback. Schritte können so verpasst werden falls der Motorstab ein Drehmomentüberladung hat. Verpasste Schritte verursachen ungenaue Positionierung. | 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- ("open-loop") Modus: der Der Schrittmotortreiber lädt die Spulen nach einem bestimmten Muster, nutzt aber kein Feedback. Schritte können so verpasst werden falls die Motorwelle eine Drehmomentüberladung erfährt. Verpasste Schritte verursachen ungenaue Positionierung. Bipolare Schrittmotoren haben normalerweise vier Drähte und zwei separate Spulen im Inneren. Sie ähneln den unipolaren Schrittmotoren stark. Unipolare Schrittmotoren können als bipolare Schrittmotoren genutzt werden, aber nicht umgekehrt. |
| Bipolare Schrittmotoren haben normalerweise vier Drähte und zwei separate Spulen im inneren; sie haben viel gemein mit den unipolaren Schrittmotoren. Unipolare Schrittmotoren können als bipolare Schrittmotoren genutzt werden, aber nicht umgekehrt. | |
| | |
| Schrittmotoren werden oft in Applikationen genutzt welche Genauigkeit benötigen. Anders als Gleichstrommotoren haben Schrittmotoren weder Bürsten, noch Kommutatoren - sie haben unabhänigge Spulen, welche durch externe Elektronik (Treiber) angetrieben werden. Um den Rotor zu rotieren werden die Spulen Schritt für Schritt gleichgerichtet werden, ohne Feedback. Das ist der Nachteil des Schrittmotors - bei mechanischer Überladung, wenn der Rotor nicht rotiert, kommen die Schritte durcheinander und die Bewegung wird ungenau. | |
| Zwei Typen von Schrittmotoren werden an den Spulen unterschieden: Unipolare und bipolare Schrittmotoren. Durch Aufbau werden drei zusätzliche Segemente bedacht: | |
| |
| | 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, werden die Spulen Schritt für Schritt umgeschaltet, ohne Feedback. Das ist der Nachteil des Schrittmotors. Bei mechanischer Überladung, wenn der Rotor nicht rotiert, werden so die Schritte durcheinander gebracht und die Bewegung wird ungenau. Zwei Typen von Schrittmotoren werden anhand der Spulen unterschieden: Unipolare und bipolare Schrittmotoren. Durch Aufbau werden drei zusätzliche Segemente bedacht: |
| | |
| * Reluktanzschrittmotor (hohe Genauigkeit, wenig Drehmoment, niedriger Preis) | * Reluktanzschrittmotor (hohe Genauigkeit, wenig Drehmoment, niedriger Preis) |
| * Hybrider Schrittmotor (hohe Genauigkeit, hohes Drehmoment, hoher Preis) | * Hybrider Schrittmotor (hohe Genauigkeit, hohes Drehmoment, hoher Preis) |
| |
| Beim Reluktanzschrittmotor besteht der Rotor aus einem gezahnten Weicheisenkern und Rotor. Die größte Zugkraft entsteht wenn die Zähne beider Seiten sich gegenseitig Abdecken. | 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. |
| Im Permanentmagnetschrittmotorsind, wie der Name schon sagt, Permanentmagneten welche sich je nach Polarität der Wicklung orientieren. Im hybriden Schrittmotor werden beiden Techniken genutzt. | |
| |
| Je nach Modell des Schrittmotors, brauch eine vollständige Rotation (360°) des Rotors hunderte von Schritten von Stromwendungen. Für stabile und weiche Bewegungen, wird eine bestimmte Kontrollelektronik genutzt, welche den Motor je nach Parameter kontrolliert (Trägheit des Rotors, Drehmoment, Resonanz etc.). Zusätzlich zur Kontrollelektronik werden verschiedene Methoden zur Stromwendung genutzt. Eine Wicklung in einer Reihe zu kommutieren heisst "Full Step Drive" und falls der Antrieb sich zwischen zwei Wicklungen ändert heisst das "Half Stepping". "Cosine Micro Stepping" wird auch genutzt um eine sehr genaue und weche Kontrolle zu ermöglichen. | Je nach Modell des Schrittmotors, braucht eine vollständige Rotation (360°) des Rotors hunderte Schritte von Stromwendungen. Für stabile und weiche Bewegungen, wird eine bestimmte Kontrollelektronik genutzt, welche den Motor je nach Parameter kontrolliert (Trägheit des Rotors, Drehmoment, Resonanz etc.). Zusätzlich zur Kontrollelektronik werden verschiedene Methoden zur Stromwendung genutzt. Wird eine Windung in Reihe umgewandelt, wird dieser Vorgang "Ganzschrittantrieb" genannt, verändert sich der Antrieb zwischen zwei Wicklungen, nennt man diesen Halbschritt. Darüber hinaus werden "Kosinus-Mikroschritte" genutzt, um eine sehr genaue und weiche Kontrolle zu ermöglichen. |
| |
| |
| ~~PB~~ | <pagebreak> |
| |
| **Unipolare Schrittmotoren ** | **Unipolare Schrittmotoren ** |
| [{{ :examples:motor:stepper:motor_stepper_unipolar.png?250|Die Wicklungen eines unipolaren Schrittmotors}}] | [{{ :examples:motor:stepper:motor_stepper_unipolar.png?250|Die Wicklungen eines unipolaren Schrittmotors}}] |
| |
| unipolare Schrittmotoren haben 5 oder 6 Anschlüsse. Je nach Aufbau des Motors werden nur | 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, was die Kontrollelektronik recht einfach macht. |
| ¼ der Wicklungen aktiviert. //Vcc// Leitungen werden normalerweise an der positiven Stromquelle angeschlossen. Während der Kommutation sind die Enden von den Wicklungen 1a, 1b, 2a and 2b über Transistoren (Transistorarray des Motorbards ULN2803) nur an der Erde angeschlossen und das macht die Kontrollelektronik recht einfach. | |
| |
| **Bipolare Schrittmotoren** | **Bipolare Schrittmotoren** |
| [{{ :examples:motor:stepper:motor_stepper_bipolar.png?250|Die Wicklungen eines Bipolaren Schrittmotors.}}] | [{{ :examples:motor:stepper:motor_stepper_bipolar.png?250|Die Wicklungen eines Bipolaren Schrittmotors.}}] |
| |
| Bipolare Schrittmotoren unterscheiden sich von Unipolaren, da sie die Polarität ihrer Wicklungen während der Kommutation verändern. Die Hälfte der Wicklungen wird gleichzeitig Aktiviert, daher haben sie eine höhere Effektivität als unipolare Schrittmotoren. Bipolare Schrittmotoren haben 4 Anschlüsse, jeder wird an eine andere H-Brückenschaltung angeschlossen,(Treiber L293 am Motorboard). Während der Kommutation legen die H-Brückenschaltungen entweder negative oder positive Spannung am Ende der Wicklung an. Unipolare Motoren können mit einem biipolaren Treiber gestartet werden: einfach die Leitungen 1a, 1b, 2a und 2b der Wicklungen anschließen (//Vcc// wird nicht angeschlossen). | 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, jeder wird an einen anderen Vierquadrantensteller angeschlossen (Treiber L293 auf der Motorenplatine). Während der Kommutation legen die Vierquadrantensteller entweder negative oder positive Spannung am Ende der Wicklung an. Unipolare Motoren können mit einem bipolaren Treiber gestartet werden indem einfach die Leitungen 1a, 1b, 2a und 2b der Wicklungen angeschlossen werden (//Vcc// wird nicht angeschlossen). |
| |
| Die Kommutation die notwendig ist um Schrittmotoren mit Wicklungen im Full Step Mode und im Half Step Mode zu kontrollieren wird in der Tabelle unhalb angegeben. Da in Treibern für unipolare Schrittmotoren nur das öffnen von Transistoren stattfindet, werden die Schritte mit 0 und 1 markiert. Für einen bipolaren Schrittmotor brauch man mehr Signale und daher wird jeder Schritt mit der Polarität des Treiberoutputs markiert: | Die notwendige Kommutation, um Schrittmotoren mit Wicklungen im Ganzschrittmodus und im Halbschrittmodus zu kontrollieren, wird in der Tabelle unhalb angezeigt. Da in Treibern für unipolare Schrittmotoren nur das Öffnen von Transistoren stattfindet, werden die Schritte mit 0 und 1 markiert. Zur Steuerung eines bipolaren Schrittmotors braucht es Signale und daher wird jeder Schritt mit der Polarität des Treiber-Outputs markiert: |
| | |
| |
| |
| ^ ^ Unipolar ^^^^ Bipolar ^^^^ | ^ ^ Unipolar ^^^^ Bipolar ^^^^ |
| ^ Step ^ 1A ^ 2A ^ 1B ^ 2B ^ 1A ^ 2A ^ 1B ^ 2B ^ | ^ Schritt ^ 1A ^ 2A ^ 1B ^ 2B ^ 1A ^ 2A ^ 1B ^ 2B ^ |
| ^ Full step ^^^^^^^^^ | ^ Ganzschritt ^^^^^^^^^ |
| | 1 ^ 1 | 0 | 0 | 0 ^ + | - | - | - | | | 1 ^ 1 | 0 | 0 | 0 ^ + | - | - | - | |
| | 2 | 0 ^ 1 | 0 | 0 | - ^ + | - | - | | | 2 | 0 ^ 1 | 0 | 0 | - ^ + | - | - | |
| | 3 | 0 | 0 ^ 1 | 0 | - | - ^ + | - | | | 3 | 0 | 0 ^ 1 | 0 | - | - ^ + | - | |
| | 4 | 0 | 0 | 0 ^ 1 | - | - | - ^ + | | | 4 | 0 | 0 | 0 ^ 1 | - | - | - ^ + | |
| ^ Half step ^^^^^^^^^ | ^ Halbschritt ^^^^^^^^^ |
| | 1 ^ 1 | 0 | 0 | 0 ^ + | - | - | - | | | 1 ^ 1 | 0 | 0 | 0 ^ + | - | - | - | |
| | 2 ^ 1 ^ 1 | 0 | 0 ^ + ^ + | - | - | | | 2 ^ 1 ^ 1 | 0 | 0 ^ + ^ + | - | - | |
| ===== Übung ===== | ===== Übung ===== |
| |
| Das Ziel dieser Aufgabe ist es einen bipolaren Schrittmotore zu starten, welcher mit einem unipolaren Schrittmotor getauscht werden kann. Es gibt Treiber, auf dem Motorboard, welche durch 4 Input-Pins vom Microcontroller kontrolliert werden. Jeder Pin gibt die Polarität einer Wicklung wieder. Die Spannung am Ende der Wicklung ist positiv wenn der Pin high ist und negativ wenn der Pin low ist. | 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, welche vom Mikrocontroller über vier Inputpins kontrolliert werden. Jeder Pin gibt die Polarität einer Wicklung wieder. Die Spannung am Ende der Wicklung ist positiv wenn der Pin high ist und negativ wenn der Pin low ist. |
| Für die Enden 1A, 1B, 2A und 2B sind die Pins PB0, PB1, PB2 and PB3 am Microcontroller zuständig. | Zu den Enden 1A, 1B, 2A und 2B gehören die entsprechenden Pins PB0, PB1, PB2 Und PB3 am Mikrocontroller. |
| |
| Es gibt die Funktion //bipolar_init// in der HomeLab Library um bipolare Schrittmotoren zu kontrollieren, die Pins werden als Output gesetzt und die Funktion | In der HomeLab Bibliothek gibt es die Funktion //bipolar_init//, um bipolare Schrittmotoren zu steuern, indem die Pins als Output gesetzt werden. Die Funktion //bipolar_halfstep// führt Rotationen mit bestimmten Halbschritten aus. Die Kommutation wird mit der Tabelle der Halbschritte durchgeführt, aber es werden komplexere Bitoperationen genutzt. |
| //bipolar_halfstep// führt Umdrehungen mit bestimmten Halfsteps aus. Die Kommutation wird mit der Tabelle der Half Steps gemacht, aber es werden komplexere Bitoperationen genutzt. | |
| |
| <code c> | <code c> |
| // | // |
| // Preparing for controlling the bipolar stepper motor. | // Vorbereitung der Steuerung des bipolaren Schrittmotors. |
| // | // |
| void bipolar_init(void) | void bipolar_init(void) |
| { | { |
| DDRB |= 0x0F; | DDRB |= 0x0F; |
| PORTB &= 0xF0; | PORTB &= 0xF0; |
| } | } |
| |
| // | // |
| // Moving the bipolar stepper motor by half steps. | // Bewegung des bipolaren Schrittmotors mit Halbschritten. |
| // | // |
| void bipolar_halfstep(signed char dir, | void bipolar_halfstep(signed char dir, |
| unsigned short num_steps, unsigned char speed) | unsigned short num_steps, unsigned char speed) |
| { | { |
| unsigned short i; | unsigned short i; |
| unsigned char pattern, state1 = 0, state2 = 1; | unsigned char pattern, state1 = 0, state2 = 1; |
| |
| // Insuring the direction +- 1 | // Festlegung der Richtung +- 1 |
| dir = ((dir < 0) ? -1 : +1); | dir = ((dir < 0) ? -1 : +1); |
| |
| // Execution of half-steps. | // Durchführung von Halbschritten. |
| for (i = 0; i < num_steps; i++) | for (i = 0; i < num_steps; i++) |
| { | { |
| state1 += dir; | state1 += dir; |
| state2 += dir; | state2 += dir; |
| |
| // Creating the pattern. | // Erstellung des Musters. |
| pattern = (1 << ((state1 % 8) >> 1)) | | pattern = (1 << ((state1 % 8) >> 1)) | |
| (1 << ((state2 % 8) >> 1)); | (1 << ((state2 % 8) >> 1)); |
| | |
| // Setting the output. | // Output setzen. |
| PORTB = (PORTB & 0xF0) | (pattern & 0x0F); | PORTB = (PORTB & 0xF0) | (pattern & 0x0F); |
| |
| // Taking a break to wait for executing the step. | // Pause um auf die Ausführung des Schrittes zu warten. |
| sw_delay_ms(speed); | sw_delay_ms(speed); |
| } | } |
| |
| // Stopping the motor. | // Anhalten des Motors. |
| PORTB &= 0xF0; | PORTB &= 0xF0; |
| } | } |
| </code> | </code> |
| |
| Die Funktion wird durch ein Beispielprogramm demonstriert, welches den Motor abwechselnd alle 200 Halfsteps in eine Richtung rotieren lässt. Die Geschwindigkeit der Rotation ist durch die länge der Pausen zwischen den Schritten definiert. Wenn die Pause zu kurz ist, kann der Motor sich aufgrund der Trägheit nicht drehen. | Die Funktion wird durch ein Beispielprogramm demonstriert, welches den Motor abwechselnd alle 200 Halbschritte in eine Richtung rotieren lässt. Die Geschwindigkeit der Rotation wird durch die Länge der Pausen zwischen den Schritten bestimmt. Wenn die Pause zu kurz ist, kann der Motor sich aufgrund der Trägheit nicht drehen. |
| |
| <code c> | <code c> |
| // | // |
| // The test program for the bipolar stepper motor of the motor's | // Das Testprogramm für den bipolaren Schrittmotor des Motormoduls |
| //module of the HomeLab. | // des HomeLab. |
| // | // |
| #include <homelab/module/motors.h> | #include <homelab/module/motors.h> |
| |
| // | // |
| // Main program. | // Hauptprogramm. |
| // | // |
| int main(void) | int main(void) |
| { | { |
| // Set up of the motor. | // Einrichtung des Motors. |
| bipolar_init(); | bipolar_init(); |
| | |
| // Endless loop. | // Endlosschleife. |
| while (true) | while (true) |
| { | { |
| // Turning the rotor 200 half steps to one direction at speed of 30 ms/step. | // Bewegung des Rotors 200 Halbschritte in eine Richtung mit einer Geschwindigkeit von 30 ms/Schritt. |
| bipolar_halfstep(+1, 200, 30); | bipolar_halfstep(+1, 200, 30); |
| |
| // Turning 200 half steps to the other direction at speed 30 ms/step. | // Bewegung des Rotors 200 Halbschritte in die andere Richtung mit einer Geschwindigkeit von 30 ms/Schritt. |
| bipolar_halfstep(-1, 200, 30); | bipolar_halfstep(-1, 200, 30); |
| } | } |
| } | } |
| </code> | </code> |