Frank (Diskussion | Beiträge) K (→Weblinks) |
|||
(63 dazwischenliegende Versionen von 19 Benutzern werden nicht angezeigt) | |||
Zeile 3: | Zeile 3: | ||
Schrittmotoren arbeiten völlig anders als Gleichstrommotoren. Das ist schon daran zu erkennen, dass diese keine zwei, sondern meist 4, 6 oder 8 Anschlüsse (bipolare oder unipolare Motoren) besitzen. Demzufolge ist es also nicht damit getan, irgendwo Spannung anzulegen, um den Motor zum Drehen zu bewegen. Aber keine Sorge, sehr kompliziert ist es dennoch nicht. | Schrittmotoren arbeiten völlig anders als Gleichstrommotoren. Das ist schon daran zu erkennen, dass diese keine zwei, sondern meist 4, 6 oder 8 Anschlüsse (bipolare oder unipolare Motoren) besitzen. Demzufolge ist es also nicht damit getan, irgendwo Spannung anzulegen, um den Motor zum Drehen zu bewegen. Aber keine Sorge, sehr kompliziert ist es dennoch nicht. | ||
− | Ein Schrittmotor (oft auch ''Stepper'' genannt) ist ein | + | Ein Schrittmotor (oft auch ''Stepper'' genannt) ist ein Synchronmotor, bei dem der Rotor (drehbares Motorteil mit der Welle) bei geschickter Wahl der angesteuerten Statorspulen (nichtdrehbarer Motorteil) gezielt um einen Winkel gedreht werden kann. Auf diese Weise kann man in mehreren Schritten jeden Drehwinkel, wenn er ein Vielfaches des minimalen Drehwinkels ist, anfahren. |
==Wie unterscheidet man Schrittmotoren== | ==Wie unterscheidet man Schrittmotoren== | ||
− | Man unterscheidet den Schrittmotor nach seiner Bauform in | + | Man unterscheidet den Schrittmotor nach seiner Bauform in Reluktanzmotor und Permanentmagnetmotor, wobei man beide Formen auch zu einem Hybridschrittmotor kombinieren kann. |
Beim Reluktanzschrittmotor besteht der Rotor aus einem gezahnten Weicheisenkern. Dieses Material gewährleistet nach dem Ausschalten des Statorstromes das Verschwinden jedes Rest-Magnetfeldes. Dadurch kann der magnetische Fluss bei eingeschaltetem Strom ungehindert durch den Weicheisenkern fließen. Die Drehbewegung des Rotors kommt zustande, weil so der Abstand zwischen dem nächstliegendem Zahn des Rotors und dem Stator verringert werden kann und der magnetische Widerstand verringert wird. | Beim Reluktanzschrittmotor besteht der Rotor aus einem gezahnten Weicheisenkern. Dieses Material gewährleistet nach dem Ausschalten des Statorstromes das Verschwinden jedes Rest-Magnetfeldes. Dadurch kann der magnetische Fluss bei eingeschaltetem Strom ungehindert durch den Weicheisenkern fließen. Die Drehbewegung des Rotors kommt zustande, weil so der Abstand zwischen dem nächstliegendem Zahn des Rotors und dem Stator verringert werden kann und der magnetische Widerstand verringert wird. | ||
Zeile 15: | Zeile 15: | ||
Typische Anwendungsgebiete sind Drucker, vor allem Matrixdrucker, oder der Antrieb des Schreib-/Lesekopfes in einem Diskettenlaufwerk. Da Schrittmotoren (solange sie nicht überlastet werden) exakt dem außen angelegten Feld folgen, können sie ohne Sensoren zur Positionsrückmeldung (Encoder, Drehgeber oder ähnliches) betrieben werden (Synchronmotorverhalten). Daher können sie im Gegensatz zu Servomotoren gesteuert betrieben werden. Servos müssen auf Position geregelt werden. | Typische Anwendungsgebiete sind Drucker, vor allem Matrixdrucker, oder der Antrieb des Schreib-/Lesekopfes in einem Diskettenlaufwerk. Da Schrittmotoren (solange sie nicht überlastet werden) exakt dem außen angelegten Feld folgen, können sie ohne Sensoren zur Positionsrückmeldung (Encoder, Drehgeber oder ähnliches) betrieben werden (Synchronmotorverhalten). Daher können sie im Gegensatz zu Servomotoren gesteuert betrieben werden. Servos müssen auf Position geregelt werden. | ||
− | Schrittmotoren existieren auch in Form von Linearmotoren. Schrittmotoren können bis ca. 1 kW wirtschaftlich eingesetzt werden. | + | Schrittmotoren existieren auch in Form von Linearmotoren. Schrittmotoren können bis ca. 1 kW wirtschaftlich eingesetzt werden. |
− | + | ||
==Prinzip der Schrittmotoren== | ==Prinzip der Schrittmotoren== | ||
Zeile 28: | Zeile 27: | ||
==Schrittmotoransteuerung== | ==Schrittmotoransteuerung== | ||
− | Um dies zu erreichen, benötigt man entweder eine elektronische Schaltung oder man verbindet die einzelnen Spulenenden jeweils mit einem Port eines Microcontrollers. Vorsicht, natürlich nicht direkt verbinden. Die Leistung eines Ports reicht natürlich niemals aus, um einen Motor zu bewegen. Ein Motortreiber (Verstärker) | + | Um dies zu erreichen, benötigt man entweder eine elektronische Schaltung oder man verbindet die einzelnen Spulenenden jeweils mit einem Port eines Microcontrollers. Vorsicht, natürlich nicht direkt verbinden. Die Leistung eines Ports reicht natürlich niemals aus, um einen Motor zu bewegen. Ein Motortreiber (Verstärker) muss also schon dazwischen geschaltet werden. Zum Beispiel der Schaltkreis L293D, siehe Zeichnung. |
Zeile 37: | Zeile 36: | ||
[[Bild:l6205.gif|center]] | [[Bild:l6205.gif|center]] | ||
− | Nun müsste der Microcontroller also nur noch eine 4 stellige Bitfolge ausgeben, um den Motor an den 4 Anschlüssen ständig in einer bestimmten Kombination mit Spannung zu versorgen.. Bei jeder Portausgabe würde sich somit der Schrittmotor einen Schritt bewegen. Das Ganze könnte natürlich in der Software in einer Schleife gemacht werden. Der Schleifenindex würde somit die Zahl der Schritte angeben. Der große Vorteil bei Schrittmotoren ist, dass man durch diese Methode ganz genau festlegen kann, wie weit sich ein Schrittmotor dreht. Man kann somit auch genau ausrechnen, | + | Nun müsste der Microcontroller also nur noch eine 4-stellige Bitfolge ausgeben, um den Motor an den 4 Anschlüssen ständig in einer bestimmten Kombination mit Spannung zu versorgen.. Bei jeder Portausgabe würde sich somit der Schrittmotor einen Schritt bewegen. Das Ganze könnte natürlich in der Software in einer Schleife gemacht werden. Der Schleifenindex würde somit die Zahl der Schritte angeben. Der große Vorteil bei Schrittmotoren ist, dass man durch diese Methode ganz genau festlegen kann, wie weit sich ein Schrittmotor dreht. Man kann somit auch genau ausrechnen, wie viel Schritte pro Radumdrehung notwendig sind. Nutzt man keine Untersetzung (was ich allerdings noch zusätzlich empfehlen würde) so bräuchte man bei den meisten Motoren wie schon erwähnt 200 Schritte pro Radumdrehung. Berechnet man dann den Umfang des Rades, so kann man genau ausrechnen, wie viele Schritte pro cm Fahrtstrecke notwendig sind. So könnte man schnell eine Routine schreiben, welche als Parameter die Fahrtstrecke entgegennimmt und dann daraus die Schritte errechnet und in einer Schleife an die Ports weitergibt. |
Genauer lässt sich ein Roboter eigentlich kaum steuern. Ein Schrittmotor bewegt sich nur bei einem Schritt, ansonsten sorgt das Haltemoment dafür, dass er sich nicht weiter bewegt. Nachteil ist nur, dass der Motor auch im Stand mit Strom versorgt wird, damit er sich nicht bei unebenen Böden oder an Steigungen bewegt. Bei Robotern, die sich nur in der Wohnung bewegen, kann man oft auch in der Praxis die Spannung abschalten, ohne dass sich der Motor bewegt, insbesondere wenn man vielleicht durch einen Zahnriemen noch eine Untersetzung von 4:1 oder 6:1 eingebaut hat. | Genauer lässt sich ein Roboter eigentlich kaum steuern. Ein Schrittmotor bewegt sich nur bei einem Schritt, ansonsten sorgt das Haltemoment dafür, dass er sich nicht weiter bewegt. Nachteil ist nur, dass der Motor auch im Stand mit Strom versorgt wird, damit er sich nicht bei unebenen Böden oder an Steigungen bewegt. Bei Robotern, die sich nur in der Wohnung bewegen, kann man oft auch in der Praxis die Spannung abschalten, ohne dass sich der Motor bewegt, insbesondere wenn man vielleicht durch einen Zahnriemen noch eine Untersetzung von 4:1 oder 6:1 eingebaut hat. | ||
Zeile 52: | Zeile 51: | ||
==Ansteuerarten== | ==Ansteuerarten== | ||
− | Die einfachste Art, einen Schrittmotor zu betreiben, ist der sogenannte WaveDrive-Betrieb, bei dem | + | Die einfachste Art, einen Schrittmotor zu betreiben, ist der sogenannte WaveDrive-Betrieb, bei dem immer nur eine Spule stromerfüllt ist. Dies ist am Einfachsten zu realisieren, birgt aber ein geringes Drehmoment. Die Positionen, die der Rotor einnehmen kann, liegen bei 0, 90, 180 und 270 Grad. Werden dagegen immer zwei benachbarte Spulen mit Strom versorgt, gelangt man zum sog. Vollschrittbetrieb und erreicht ein größeres Drehmoment. Die Positionen liegen hier genau zwischen den Positionen beim WaveDrive-Betrieb. Werden beide Betriebsarten kombiniert, also immer abwechselnd eine oder beide Spulen versorgt, können insgesamt schon 8 Positionen angefahren werden. Dies nennt man Halbschrittbetrieb. Führt man diese Idee weiter, so gelangt man zu einem idealen Drehfeld: Beide Spulenpaare werden mit einer Sin/Cos-Welle angesteuert, sodass sich ein nahezu idealer Rundlauf ergibt. Die Vorteile des Mehrschrittbetriebs liegen auf der Hand: Der Kraftverlauf wird bei kleineren Schritten gleichmäßiger, die Gefahr des Schrittverlustes sinkt und der Motor wird deutlich leiser. |
==Schrittmotoren in Bezug auf Roboter== | ==Schrittmotoren in Bezug auf Roboter== | ||
Zeile 78: | Zeile 77: | ||
− | ==Schaltung zum Ansteuern eines Schrittmotors mit L298 und | + | ==Schaltung zum Ansteuern eines Schrittmotors mit L298 und L297== |
Die hier abgebildete Schaltung ist quasi der Standard für Schrittmotoren. Auch bei Drehmaschinen wird diese Schaltung oft eingesetzt. | Die hier abgebildete Schaltung ist quasi der Standard für Schrittmotoren. Auch bei Drehmaschinen wird diese Schaltung oft eingesetzt. | ||
− | Die Schaltung | + | [[Bild:l298standard.gif|center| Widerstand RS1, RS2: 1 oder 0,5 Ohm (bei größerer Belastung); Dioden: schnelle Dioden z.B. BYV27-200]] |
+ | |||
+ | Die Schaltung lässt sich recht einfach auf einer Experimentierplatine aufbauen, es gibt jetzt aber auf vielfachen Wunsch auch eine fertig erhältliche Platine für Einsteiger. Die Platinen Dateien findet ihr auf der Seite [http://www.mikrocontroller-elektronik.de/schrittmotortreiber-rn-stepp297/ Mikrocontroller-Elektronik.de] | ||
+ | |||
+ | [[Bild:rnstepp297_platine390.jpg|center| Eine erhältliche Platine erleichtert den Aufbau der Schaltung erheblich]] | ||
+ | |||
+ | Bedenkt man, dass auch bei einem Gleichstrommotor ein Motortreiber notwendig ist, dann ist diese Schaltung auch nicht viel komplexer. Die einzelnen Steuerleitungen können direkt mit den Ports eines Microcontrollers ([[Controllerboard]]) oder mit dem Parallelport eines PCs verbunden werden. Hier die Bedeutung: | ||
{| style="background:transparent; padding:0px; margin:0px;" | {| style="background:transparent; padding:0px; margin:0px;" | ||
|- | |- | ||
| | | | ||
− | {| | + | {| {{Blauetabelle}} |
|- | |- | ||
− | | | + | |{{Hintergrund1}} | Bezeichnung |
− | | | + | |{{Hintergrund1}} width=40| Pin # |
− | | | + | |{{Hintergrund1}} | Erklärung |
|- | |- | ||
− | + | | '''CW/CCW''' | |
− | + | | 17 | |
− | + | | Gibt die Richtung an, in die der Motor bewegt werden soll | |
(CW = ClockWise = im Uhrzeigersinn, CCW = CounterClockWise = gegen den Uhrzeigersinn) | (CW = ClockWise = im Uhrzeigersinn, CCW = CounterClockWise = gegen den Uhrzeigersinn) | ||
|- | |- | ||
− | + | | '''Clock''' | |
− | + | | 18 | |
− | + | | Durch einen kurzen Impuls auf diese Leitung wird der Motor einen Schritt bewegt. In einer Schleife braucht mal also nur diese Leitung kurz ein- und auszuschalten. Der Schritt wird bei steigender Flanke ausgelöst (beim Wechsel des anliegenden Zustandes von "low" zu "high") | |
|- | |- | ||
− | + | | '''Half/Full''' | |
− | + | | 19 | |
− | + | | Gewöhnlich legt man den Anschluss auf Masse. Legt man ihn auf 5 V, dann werden immer halbe Schritte durchgeführt, also doppelt so viele Schritte pro Umdrehung | |
|- | |- | ||
− | + | | '''Enable''' | |
− | + | | 10 | |
− | + | | Wenn man diesen Anschluss auf Masse legt, wird die Motorspannung ausgeschaltet | |
|- | |- | ||
− | + | |'''Vref''' | |
− | + | | 15 | |
− | + | | Hier muss eine Spannung zwischen 0 und 3 Volt angelegt werden. Die Spannung legt den maximalen Motorstrom fest. | |
VRef berechnet sich nach folgender Formel: | VRef berechnet sich nach folgender Formel: | ||
Zeile 121: | Zeile 126: | ||
<math>Vref=0,5A \cdot 1 \Omega = 0,5V</math> | <math>Vref=0,5A \cdot 1 \Omega = 0,5V</math> | ||
− | Man | + | Man muss also an Vref eine Spannung von 0,5 V anlegen. Am Einfachsten geht das, indem man zwischen 5 V und Masse ein 10-k-Poti und den Schleifer an Vref legt. Damit man die 3 Volt nicht überschreitet kann man zwischen 5 V und Poti noch einen 6 kOhm Widerstand legen. |
|- | |- | ||
− | + | |'''RESET''' | |
− | + | | 20 | |
− | + | | Bringt Schrittmotor in Grundstellung (dieser Anschluss muss auf +5 V gelegt werden, damit die Schaltung funktioniert [http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=16449&postdays=0&postorder=asc&start=22 Quelle]) | |
|- | |- | ||
− | + | |'''Control''' | |
− | + | | 11 | |
− | + | | Mit diesem Anschluss kann man die Art des [[Chopper Betrieb]]s ändern. Ist der Control Eingang auf high, dann klingt der Motorstrom langsam ab (Phasen Chopping), zum schnellen Abklingen setzt man ihn auf low (Inhibit Chopping). | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
|- | |- | ||
+ | |'''Sync, Home''' | ||
+ | | 1,3 | ||
+ | | Diese Anschlüsse kann man meist vernachlässigen und unbelegt lassen | ||
|} | |} | ||
Zeile 141: | Zeile 145: | ||
{| style="float:right; background:transparent; padding:0px; margin:0px;" | {| style="float:right; background:transparent; padding:0px; margin:0px;" | ||
|- valign="top" | |- valign="top" | ||
− | | | + | | |
|- | |- | ||
| [[Bild:l298eigenbau.jpeg|thumb|200px|right|Meine erste Schrittmotoransteuerung. Nicht schön - aber es funktionierte :-)]] | | [[Bild:l298eigenbau.jpeg|thumb|200px|right|Meine erste Schrittmotoransteuerung. Nicht schön - aber es funktionierte :-)]] | ||
+ | [[Bild:rnstepp297.jpeg|thumb|200px|right|Die gleiche Schaltung heute als Bausatz oder Fertigmodul RN-Stepp297 für einen Schrittmotor - nur noch 1/4 so groß!]] | ||
+ | |||
|- | |- | ||
|} | |} | ||
Zeile 153: | Zeile 159: | ||
Wie Sie sehen, braucht man also nur 3 Port-Pins, um einen Schrittmotor in beliebige Richtungen und in beliebiger Geschwindigkeit bewegen zu können. Kommt noch ein Motor hinzu, dann könnte man die Enable-Leitung beider verbinden, sodass dann zwei Motoren mit 5 Ports-Pins optimal gesteuert werden können. Ich habe mit einer solchen Schaltung auf einer Experimentierplatine schon einen 15-kg-Roboter problemlos mit einer C-Control gesteuert. | Wie Sie sehen, braucht man also nur 3 Port-Pins, um einen Schrittmotor in beliebige Richtungen und in beliebiger Geschwindigkeit bewegen zu können. Kommt noch ein Motor hinzu, dann könnte man die Enable-Leitung beider verbinden, sodass dann zwei Motoren mit 5 Ports-Pins optimal gesteuert werden können. Ich habe mit einer solchen Schaltung auf einer Experimentierplatine schon einen 15-kg-Roboter problemlos mit einer C-Control gesteuert. | ||
− | + | Einen interessanten Forum Thread zu oberer Schaltung findet man unter [[#Weblinks]] | |
− | Hier | + | Hier noch mal ein größerer Schaltplan mit eingezeichnetem Anschlussstecker und Spannungsteiler. |
− | [[Bild:schaltungstep298.gif|thumb| | + | [[Bild:schaltungstep298.gif|thumb|right|Ansteuerung mit L298]] |
− | Wichtig ist nur, dass man diese Schaltung mit einer möglichst hohen Spannung versorgt und einen Schrittmotor mit möglichst niedriger Spannung auswählt. Man sollte sich nicht davor abschrecken lassen, dass Schrittmotoren mit niedriger Spannung höhere Ströme z.B. 1 bis 2 A benötigen. Die Leistung berechnet sich ja bekanntlich mit der Formel P=U*I. Somit brauchen auch diese Motoren nicht mehr Energie als Motoren mit höherer Spannung und niedrigem Strombedarf. Hat man bei einem Roboter nur 12 V zur Verfügung, so ist es empfehlenswert z.B. einen 3- oder 4-Volt-Motor zu kaufen. Der Widerstand sollte jedenfalls deutlich unter 10 Ohm liegen. In diesem Fall könnte man dann die obige Schaltung auch mit 12 V betreiben. Allerdings bei höheren Drehzahlen würde die Spannung wegen der Induktivität meist immer noch nicht ausreichen, um die volle Leistung des Motors zu nutzen. Daher wäre zu überlegen, ob man nicht zwei 12-V-Batterien in Serie schaltet oder eine Spannungsverdopplerschaltung einsetzt. Ich habe mich für letzteres entschieden. Mit ein paar Kondensatoren und Dioden kann man recht einfach die Spannung von 12 auf ca. 21 V erhöhen. In der Praxis bricht | + | Wichtig ist nur, dass man diese Schaltung mit einer möglichst hohen Spannung versorgt und einen Schrittmotor mit möglichst niedriger Spannung auswählt. Man sollte sich nicht davor abschrecken lassen, dass Schrittmotoren mit niedriger Spannung höhere Ströme z.B. 1 bis 2 A benötigen. Die Leistung berechnet sich ja bekanntlich mit der Formel P=U*I. Somit brauchen auch diese Motoren nicht mehr Energie als Motoren mit höherer Spannung und niedrigem Strombedarf. Hat man bei einem Roboter nur 12 V zur Verfügung, so ist es empfehlenswert z.B. einen 3- oder 4-Volt-Motor zu kaufen. Der Widerstand sollte jedenfalls deutlich unter 10 Ohm liegen. In diesem Fall könnte man dann die obige Schaltung auch mit 12 V betreiben. Allerdings bei höheren Drehzahlen würde die Spannung wegen der Induktivität meist immer noch nicht ausreichen, um die volle Leistung des Motors zu nutzen. Daher wäre zu überlegen, ob man nicht zwei 12-V-Batterien in Serie schaltet oder eine Spannungsverdopplerschaltung einsetzt. Ich habe mich für letzteres entschieden. Mit ein paar Kondensatoren und Dioden kann man recht einfach die Spannung von 12 auf ca. 21 V erhöhen. In der Praxis bricht diese Spannung bei hohen Strömen ein paar Volt ein, aber das tut der Leistung keinen Abbruch. Mit Spannungsverdoppler war der Motor jedenfalls deutlich stärker und hatte mit 15 kg in der Wohnung keinerlei Probleme. Schwieriger wird es mit Robotern, die schwerer als 15 kg sind, denn hier wird der Strombedarf einfach zu groß und die Akku-Kapazität ist zu schnell erschöpft. |
[[Bild:icrnst01schaltplan.gif|thumb|Schrittmotorsteuerung mit RS232 oder I2C]] | [[Bild:icrnst01schaltplan.gif|thumb|Schrittmotorsteuerung mit RS232 oder I2C]] | ||
Zeile 167: | Zeile 173: | ||
Als Alternative eine Ansteuerung für 2 Schrittmotoren per Befehl über I2C oder RS232 | Als Alternative eine Ansteuerung für 2 Schrittmotoren per Befehl über I2C oder RS232 | ||
− | speziell für | + | speziell für Roboterbastler (ebenfalls mit Stromregelung und L298). Das Board RN-Motor beruht auf dieser Schaltung |
− | + | Einen interessanten Forum Thread zu dieser Schaltung findet man unter [[#Weblinks]] | |
− | Neben dem Motortreiber L298 gibt es aber auch | + | Neben dem Motortreiber L298 gibt es aber auch alternative Motortreiber, die sich sehr gut für die Schrittmotorsteuerung eignen. Sehr gut eignen sich zum Beispiel auch L293D oder der neuere L6205. Diese Treiber werden auf unserer Seite [[Getriebemotoren-Ansteuerung]] näher beschrieben. |
+ | |||
+ | |||
+ | |||
+ | |||
+ | Wer eine etwas einfachere Schaltung zum Ansteuern eines kleineren Uni-/bipolaren Schrittmotors im Halb-/Vollschrittmodus möchte, kann auch einen SAA1042 benutzen. Dieser 16-polige IC beinhaltet ein Schieberegister mit CW/CCW-, CLK- und half/full-Eingängen, 2 H-Brücken und Freilaufdioden. Man benötigt auch keine externe OSC-Beschaltung zum Takten des ICs, und es gibt keine Strombegrenzung durch etwaige Vref-Beschaltungen oder Ähnliches. Durch die einzelnen Windungen des Schrittmotors dürfen (lt. Datenblatt) maximal 500mA fließen. | ||
+ | |||
+ | Der SAA1042 arbeitet mit bis zu 20V Versorgungsspannung, sie ist gleichzeitig die Arbeitsspannung für den Schrittmotor. | ||
+ | |||
+ | Schaltpläne und Anschlussbelegung findet man im Datenblatt unter [[#Weblinks]] | ||
==Wie identifiziert man die Leitungen wenn man kein Datenblatt zum Motor hat?== | ==Wie identifiziert man die Leitungen wenn man kein Datenblatt zum Motor hat?== | ||
Zeile 196: | Zeile 211: | ||
===Unipolare Ansteuerung Vollschritt === | ===Unipolare Ansteuerung Vollschritt === | ||
<center> | <center> | ||
− | {| | + | {|cellspacing=1 cellpadding=5 bgcolor=666666 |
− | !colspan='7' bgcolor='# | + | !colspan='7' bgcolor='#ECF0F6'| <br> Unipolare Ansteuerung Vollschritt <br> |
|- | |- | ||
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | |
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Phase Spule 1a |
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Phase Spule 1b |
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Common Spule 1 |
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Phase Spule 2a |
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Phase Spule 2b |
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Common Spule 2 |
|- | |- | ||
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Schritt 1 |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
|- | |- | ||
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Schritt 2 |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
|- | |- | ||
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Schritt 3 |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
|- | |- | ||
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Schritt 4 |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
|- | |- | ||
− | !colspan='7' bgcolor='# | + | !colspan='7' bgcolor='#ECF0F6'| |
− | <span style="background-color:# | + | <span style="background-color:#B0B0D9;">- steht für Minus</span> |
− | <span style="background-color:# | + | <span style="background-color:#FFBDBD;">+ steht für Plus</span> |
− | <span style="background-color:# | + | <span style="background-color:#BDBDBD;">0 steht für Unbelegt</span> |
|- | |- | ||
|} | |} | ||
Zeile 248: | Zeile 263: | ||
=== Bipolare Ansteuerung Vollschritt === | === Bipolare Ansteuerung Vollschritt === | ||
<center> | <center> | ||
− | {| | + | {|cellspacing=1 cellpadding=5 bgcolor=666666 |
− | !colspan='7' bgcolor='# | + | !colspan='7' bgcolor='#ECF0F6'| <br> Bipolare Ansteuerung Vollschritt <br> |
|- | |- | ||
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | |
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Phase Spule 1a |
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Phase Spule 1b |
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Common Spule 1 |
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Phase Spule 2a |
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Phase Spule 2b |
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Common Spule 2 |
|- | |- | ||
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Schritt 1 |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
|- | |- | ||
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Schritt 2 |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
|- | |- | ||
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Schritt 3 |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
|- | |- | ||
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Schritt 4 |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
|- | |- | ||
− | !colspan='7' bgcolor='# | + | !colspan='7' bgcolor='#ECF0F6'| |
− | <span style="background-color:# | + | <span style="background-color:#B0B0D9;">- steht für Minus</span> |
− | <span style="background-color:# | + | <span style="background-color:#FFBDBD;">+ steht für Plus</span> |
− | <span style="background-color:# | + | <span style="background-color:#BDBDBD;">0 steht für Unbelegt</span> |
|- | |- | ||
|} | |} | ||
Zeile 300: | Zeile 315: | ||
=== Bipolare Ansteuerung Halbschritt === | === Bipolare Ansteuerung Halbschritt === | ||
<center> | <center> | ||
− | {| | + | {|cellspacing=1 cellpadding=5 bgcolor=666666 |
− | !colspan='7' bgcolor='# | + | !colspan='7' bgcolor='#ECF0F6'| <br> Bipolare Ansteuerung Halbschritt <br> |
|- | |- | ||
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | |
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Phase Spule 1a |
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Phase Spule 1b |
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Common Spule 1 |
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Phase Spule 2a |
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Phase Spule 2b |
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Common Spule 2 |
|- | |- | ||
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Schritt 1 |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
|- | |- | ||
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Schritt 2 |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
|- | |- | ||
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Schritt 3 |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
|- | |- | ||
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Schritt 4 |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
|- | |- | ||
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Schritt 5 |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
|- | |- | ||
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Schritt 6 |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
|- | |- | ||
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Schritt 7 |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
|- | |- | ||
− | | bgcolor='# | + | | bgcolor='#ECF0F6' | Schritt 8 |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
− | | bgcolor='# | + | | bgcolor='#FFBDBD' align='center' | + |
− | | bgcolor='# | + | | bgcolor='#B0B0D9' align='center' | - |
− | | bgcolor='# | + | | bgcolor='#BDBDBD' align='center' | 0 |
|- | |- | ||
− | !colspan='7' bgcolor='# | + | !colspan='7' bgcolor='#ECF0F6'| |
− | <span style="background-color:# | + | <span style="background-color:#B0B0D9;">- steht für Minus</span> |
− | <span style="background-color:# | + | <span style="background-color:#FFBDBD;">+ steht für Plus</span> |
− | <span style="background-color:# | + | <span style="background-color:#BDBDBD;">0 steht für Unbelegt</span> |
|- | |- | ||
|} | |} | ||
Zeile 386: | Zeile 401: | ||
[[Bild:schrittmotorphasenzeichnung.gif|center]] | [[Bild:schrittmotorphasenzeichnung.gif|center]] | ||
+ | |||
+ | |||
+ | == C-Beispiel == | ||
+ | |||
+ | |||
+ | === Unvollständiges Beispiel (Pseudocode)=== | ||
+ | |||
+ | Bei dem hier vorgestellten Quellcode handelt es sich um einen unvollständigem Auszug aus einem Projekt vom März 2014. | ||
+ | Es soll vor allem Einsteigern der C-Programmierung auf Microcontrollern helfen wie man C-Code strukturieren kann. | ||
+ | Der Code ist zwar unvollständig, sollte jedoch relativ verständlich sein und eine Realisierung ermöglichen. | ||
+ | |||
+ | {{ccomment|----------------------------------------------------------------------- }} | ||
+ | {{ccomment| }} | ||
+ | {{ccomment| Beispiel Sourcefile für einen Schrittmotortreiber }} | ||
+ | {{ccomment| }} | ||
+ | {{ccomment| Beschreibung: }} | ||
+ | {{ccomment| Methoden um einen Schrittmotor mit einem PIC16F877A anzusteuern }} | ||
+ | {{ccomment| Die Steuerung basiert hier aus einer Kombination }} | ||
+ | {{ccomment| von einem L6506 und L298 Chipsatz. }} | ||
+ | {{ccomment| }} | ||
+ | {{ccomment| Pinning L6506: Type: }} | ||
+ | {{ccomment| }} | ||
+ | {{ccomment| - PORTB.0: L6506 Enable Do }} | ||
+ | {{ccomment| - PORTB.1: Input 1 (A) Do }} | ||
+ | {{ccomment| - PORTB.2: Input 2 (/A) Do }} | ||
+ | {{ccomment| - PORTB.3: Input 3 (B) Do }} | ||
+ | {{ccomment| - PORTB.4: Input 4 (/B) Do }} | ||
+ | {{ccomment| - PORTC.2: Motor Current Do (PWM) }} | ||
+ | {{ccomment| }} | ||
+ | {{ccomment| }} | ||
+ | {{ccomment| Pinning L298: }} | ||
+ | {{ccomment| }} | ||
+ | {{ccomment| - PORTB.5: Motor A EN Do }} | ||
+ | {{ccomment| - PORTB.6: Motor B EN Do }} | ||
+ | {{ccomment| }} | ||
+ | {{ccomment| }} | ||
+ | {{ccomment| Pinning Potis/Switches: }} | ||
+ | {{ccomment| }} | ||
+ | {{ccomment| - PORTA.0: Poti MotorA Ai}} | ||
+ | {{ccomment| - PORTA.1: Poti MotorB Ai}} | ||
+ | {{ccomment| }} | ||
+ | {{ccomment|-----------------------------------------------------------------------}} | ||
+ | #ifndef STEPPERMOTOR_H | ||
+ | #define STEPPERMOTOR_H | ||
+ | |||
+ | #ifdef __cplusplus | ||
+ | extern "C" { | ||
+ | #endif | ||
+ | |||
+ | #include <stdlib.h> | ||
+ | #include "variables.h" | ||
+ | #include "timer1.h" | ||
+ | |||
+ | const far uchar stepTable[] = { | ||
+ | 0b00000000, {{ccomment|0, Keine Spule bestromt }} | ||
+ | 0b00000001, {{ccomment|1, Eine Spule bestromt }} | ||
+ | 0b00000101, {{ccomment|2, Zwei Spulen bestromt }} | ||
+ | 0b00000100, {{ccomment|3, Eine Spule bestromt }} | ||
+ | 0b00000110, {{ccomment|4, Zwei Spulen bestromt }} | ||
+ | 0b00000010, {{ccomment|5, Eine Spule bestromt }} | ||
+ | 0b00001010, {{ccomment|6, Zwei Spulen bestromt }} | ||
+ | 0b00001000, {{ccomment|7, Eine Spule bestromt }} | ||
+ | 0b00001001 {{ccomment|8, Zwei Spulen bestromt }} | ||
+ | }; | ||
+ | {{ccomment|Aus der Tabelle kann man erkennen, dass beim Halbschritt-Betrieb immer}} | ||
+ | {{ccomment|abwechselnd eine Spule bzw. zwei Spulen bestromt werden}} | ||
+ | {{ccomment|Dies führt zu einem schwankenden Drehmoment des Motors}} | ||
+ | {{ccomment|Dabei spricht man auch vom Drehmomentrippel}} | ||
+ | {{ccomment|Für den Vollschritt gibt es zwei Möglichkeiten}} | ||
+ | {{ccomment|Die Schrittfolge: 1,3,5,7 (Weniger Moment) oder 2,4,6,8 (Mehr Moment)}} | ||
+ | |||
+ | typedef enum STEPPER { | ||
+ | eNONE, eLEFT, eRIGHT | ||
+ | }; | ||
+ | |||
+ | struct { | ||
+ | uchar current; | ||
+ | uchar holdcurrent; | ||
+ | char stepnumber; | ||
+ | uchar stepdir; | ||
+ | uchar stepmode; | ||
+ | int32 position_ist; | ||
+ | int32 position_soll; | ||
+ | uchar enable; | ||
+ | } steppercfg; | ||
+ | |||
+ | void STEPPER_init(); | ||
+ | void STEPPER_INT(); | ||
+ | |||
+ | void STEPPER_moveAbsolut(int32 position); | ||
+ | void STEPPER_moveRelative(int32 delta); | ||
+ | |||
+ | inline void STEPPER_setCurrent(uchar value); | ||
+ | |||
+ | void STEPPER_nextStep(); | ||
+ | |||
+ | #ifdef __cplusplus | ||
+ | } | ||
+ | #endif | ||
+ | #endif /* STEPPERMOTOR_H */ | ||
+ | |||
+ | --------------------------------------------------------------------------------- | ||
+ | |||
+ | {{ccomment|Interrupt-Routine, welche die Schritte abarbeitet }} | ||
+ | {{ccomment|dadurch hat man auch für andere Dinge noch Zeit }} | ||
+ | {{ccomment|Diese Methode kann z.B. durch einen Timer Interrupt aufgerufen werden }} | ||
+ | {{ccomment|Über die Zeit des Timers kann die Drehgeschwindigkeit des Motors beeinflusst werden }} | ||
+ | void STEPPER_INT() | ||
+ | { | ||
+ | if (steppercfg.position_ist != steppercfg.position_soll) | ||
+ | { | ||
+ | STEPPER_nextStep(); | ||
+ | } | ||
+ | } | ||
+ | --------------------------------------------------------------------------------- | ||
+ | {{ccomment|Beispiel für eine Methode zur Absolutbewegung }} | ||
+ | void STEPPER_moveAbsolut(int32 position) | ||
+ | { | ||
+ | if (position < steppercfg.position_ist) | ||
+ | { | ||
+ | steppercfg.stepdir = eLEFT; | ||
+ | } | ||
+ | else if (position > steppercfg.position_ist) | ||
+ | { | ||
+ | steppercfg.stepdir = eRIGHT; | ||
+ | } | ||
+ | else { | ||
+ | steppercfg.stepdir = eNONE; | ||
+ | } | ||
+ | steppercfg.position_soll = position; | ||
+ | } | ||
+ | --------------------------------------------------------------------------------- | ||
+ | {{ccomment|Beispiel für eine Methode zur Relativbewegung }} | ||
+ | void STEPPER_moveRelative(int32 delta) | ||
+ | { | ||
+ | if (delta > 0) { steppercfg.stepdir = eRIGHT; } | ||
+ | else { steppercfg.stepdir = eLEFT; } | ||
+ | |||
+ | steppercfg.position_soll = steppercfg.position_ist + delta; | ||
+ | } | ||
+ | --------------------------------------------------------------------------------- | ||
+ | {{ccomment|Diese Methode berechnet den nächsten Schritt und holt die }} | ||
+ | {{ccomment|Werte der Ansteuerung aus der Schritttabelle }} | ||
+ | {{ccomment|Es wird auch die IST-Position aktuallisiert. }} | ||
+ | {{ccomment|Dabei wird immer angenommen, dass der Schrittmotor keine Schritte verliert! }} | ||
+ | void STEPPER_nextStep() | ||
+ | { | ||
+ | if (steppercfg.stepdir == eLEFT) // Linkslauf | ||
+ | { | ||
+ | steppercfg.stepnumber--; | ||
+ | steppercfg.position_ist--; | ||
+ | |||
+ | if (steppercfg.stepnumber < 1) | ||
+ | { | ||
+ | steppercfg.stepnumber += 8; | ||
+ | } | ||
+ | } | ||
+ | else if (steppercfg.stepdir == eRIGHT) // Rechtslauf | ||
+ | { | ||
+ | steppercfg.stepnumber++; | ||
+ | steppercfg.position_ist++; | ||
+ | |||
+ | if (steppercfg.stepnumber > 8) | ||
+ | { | ||
+ | steppercfg.stepnumber-=8; | ||
+ | } | ||
+ | } | ||
+ | // Ausgabewert um 1 nach linksverschoben, da an Pin 1 = Enableleitung | ||
+ | PORTB = (stepTable[steppercfg.stepnumber] << 1) | steppercfg.enable; | ||
+ | } | ||
+ | |||
==Motoren mit 5 Anschlüssen?== | ==Motoren mit 5 Anschlüssen?== | ||
Zeile 396: | Zeile 582: | ||
In dem Fall kann man den Motor nicht bipolar ansteuern, sondern muss ihn unipolar ansteuern. Mit L297/L298 bzw. RN-Motor usw. wird ein Schrittmotor immer bipolar angesteuert, also kann dafür kein Motor mit 5 Drähten verwendet werden. | In dem Fall kann man den Motor nicht bipolar ansteuern, sondern muss ihn unipolar ansteuern. Mit L297/L298 bzw. RN-Motor usw. wird ein Schrittmotor immer bipolar angesteuert, also kann dafür kein Motor mit 5 Drähten verwendet werden. | ||
Da heutzutage Schrittmotoren bevorzugt bipolar angesteuert werden um maximales Drehmoment (Kraft) zu erreichen, sollte man daher beim Kauf möglichst Motoren mit 4, 6 oder 8 Drähten kaufen. | Da heutzutage Schrittmotoren bevorzugt bipolar angesteuert werden um maximales Drehmoment (Kraft) zu erreichen, sollte man daher beim Kauf möglichst Motoren mit 4, 6 oder 8 Drähten kaufen. | ||
+ | |||
{|{{Blaueschmaltabelle}} | {|{{Blaueschmaltabelle}} | ||
Zeile 406: | Zeile 593: | ||
==Die wichtigsten Daten bei einem Schrittmotor== | ==Die wichtigsten Daten bei einem Schrittmotor== | ||
− | Zum besseren Verständnis habe ich die Daten in die Klassen '' | + | Zum besseren Verständnis habe ich die Daten in die Klassen ''unverzichtbar'', ''hilfreich'' und ''weniger notwendig'' unterteilt. Diese Unterteilung habe ich vorwiegend im Blick auf Hobby-Anwender und Robotik-Bastler vorgenommen. Es versteht sich von selbst, dass je nach Vorhaben oder bei industrieller Anwendung eines Motors alle Daten wichtig sein könnten. |
===Unverzichtbare Daten=== | ===Unverzichtbare Daten=== | ||
Zeile 412: | Zeile 599: | ||
;Nennstrom: Maximal zulässiger Strom pro Wicklung (Phase). Bei Motoren mit mehreren Wicklungen (also Motoren mit 6 oder 8 Anschlüssen) bezieht sich die Stromangabe auf nur eine Wicklung (unipolare Ansteuerung). Siehe dazu auch das Rechenbeispiel im nächsten Abschnitt. | ;Nennstrom: Maximal zulässiger Strom pro Wicklung (Phase). Bei Motoren mit mehreren Wicklungen (also Motoren mit 6 oder 8 Anschlüssen) bezieht sich die Stromangabe auf nur eine Wicklung (unipolare Ansteuerung). Siehe dazu auch das Rechenbeispiel im nächsten Abschnitt. | ||
[[Bild:stepperdaten.png|framed|So sehen die Daten auf einem Motor aus, Hier wird Nennstrom, Nennspannung und Schrittwinkel angegeben]] | [[Bild:stepperdaten.png|framed|So sehen die Daten auf einem Motor aus, Hier wird Nennstrom, Nennspannung und Schrittwinkel angegeben]] | ||
− | ;Haltemoment: Bis zu diesem Moment ([[Drehmoment]], also dieser Kraft) kann ein Schrittmotor belastet werden, bis sich die Achse um einen oder mehrere Schritte durch die Belastung verdreht. Diese Angabe gilt für einen stehenden Schrittmotor der unter voller Betriebsspannung steht. Die Angabe gibt somit quasi an wieviel Kraft der Motor besitzt, eine sehr wichtige Angabe. | + | ;Haltemoment: Bis zu diesem Moment ([[Drehmoment]], also dieser Kraft) kann ein Schrittmotor belastet werden, bis sich die Achse um einen oder mehrere Schritte durch die Belastung verdreht. Diese Angabe gilt für einen stehenden Schrittmotor, der unter voller Betriebsspannung steht. Die Angabe gibt somit quasi an wieviel Kraft der Motor besitzt, eine sehr wichtige Angabe. |
− | ;Schrittwinkel: Der Schrittwinkel gibt an um wieviel Grad sich die Achse bei einem Vollschritt bewegt. Dadurch wird also gleichzeitig angegeben, wie viele Schritte ein Motor für eine volle Drehung benötigt. Man teilt einfach 360 Grad durch den Schrittwinkel und erhält die Schrittanzahl. Bei guten Industriemotoren beträgt der Schrittwinkel oft 1,8 Grad, das ergibt also 200 Vollschritte pro Umdrehung. Nutzt man das Halbschrittverfahren zur Ansteuerung, also 400 Schritte. Je mehr Schritte ein Motor besitzt desto genauer kann er natürlich bestimmte Positionen anfahren, zugleich läuft er ruhiger und leiser. Nachteil von hohen Schrittzahlen ist allerdings, dass oft nicht so hohe Drehzahlen erreicht werden können wie bei großen Schrittwinkeln. | + | ;Schrittwinkel: Der Schrittwinkel gibt an, um wieviel Grad sich die Achse bei einem Vollschritt bewegt. Dadurch wird also gleichzeitig angegeben, wie viele Schritte ein Motor für eine volle Drehung benötigt. Man teilt einfach 360 Grad durch den Schrittwinkel und erhält die Schrittanzahl. Bei guten Industriemotoren beträgt der Schrittwinkel oft 1,8 Grad, das ergibt also 200 Vollschritte pro Umdrehung. Nutzt man das Halbschrittverfahren zur Ansteuerung, also 400 Schritte. Je mehr Schritte ein Motor besitzt desto genauer kann er natürlich bestimmte Positionen anfahren, zugleich läuft er ruhiger und leiser. Nachteil von hohen Schrittzahlen ist allerdings, dass oft nicht so hohe Drehzahlen erreicht werden können wie bei großen Schrittwinkeln. |
− | ;Nennspannung: Die Betriebsspannung, die notwendig ist, um den Nennstrom zu erreichen. Die Nennspanung gilt in der Regel für den stehenden Schrittmotor. Bei drehenden Motoren reduziert sich der Strom durch die Induktivität des Motors, daher könnte dann die Nennspannung mit steigender Drehzahl höher werden. Genau das machen auch moderne Schrittmotoransteuerungen. Darüber haben wir aber oben im Artikel schon ausgiebig gelesen. Steuert man einen Schrittmotor mit konstanter Spannung, so sollte man | + | ;Nennspannung: Die Betriebsspannung, die notwendig ist, um den Nennstrom zu erreichen. Die Nennspanung gilt in der Regel für den stehenden Schrittmotor. Bei drehenden Motoren reduziert sich der Strom durch die Induktivität des Motors, daher könnte dann die Nennspannung mit steigender Drehzahl höher werden. Genau das machen auch moderne Schrittmotoransteuerungen. Darüber haben wir aber oben im Artikel schon ausgiebig gelesen. Steuert man einen Schrittmotor mit konstanter Spannung, so sollte man die Nennspannung verwenden, damit der Motor nicht überhitzt. |
− | ;Anschlussbelegung: Schrittmotoren haben 4, 6 oder 8 Anschlussdrähte. Daher gehört zu jedem Schrittmotor ein Plan, der Auskunft über interne Verdrahtung der Spulen gibt. Notfalls kann man dieses auch mit Hilfe eines Ohmmeters ermitteln, auch dies wurde oben schon geschildert. | + | ;Anschlussbelegung: Schrittmotoren haben 4, 5, 6 oder 8 Anschlussdrähte. Daher gehört zu jedem Schrittmotor ein Plan, der Auskunft über interne Verdrahtung der Spulen gibt. Notfalls kann man dieses auch mit Hilfe eines Ohmmeters ermitteln, auch dies wurde oben schon geschildert. |
===Hilfreiche Daten=== | ===Hilfreiche Daten=== | ||
Zeile 424: | Zeile 611: | ||
;Start-Stop Frequenz (fs): Die maximale Frequenz (Geschwindigkeit der Schrittfolge), bei der ein nicht belasteter Schrittmotor anläuft ohne Schritte zu verlieren. Leider findet man auch diese Angabe wohl nur bei etwas teureren Markenmotoren. | ;Start-Stop Frequenz (fs): Die maximale Frequenz (Geschwindigkeit der Schrittfolge), bei der ein nicht belasteter Schrittmotor anläuft ohne Schritte zu verlieren. Leider findet man auch diese Angabe wohl nur bei etwas teureren Markenmotoren. | ||
− | ;Betriebsmoment: Ähnlich wie das Haltemoment, jedoch wird hier das Moment für den drehenden Schrittmotor angegeben. Da bei Schrittmotoren das Drehmoment mit steigender Drehzahl abnimmt, reicht hier also kein | + | ;Betriebsmoment: Ähnlich wie das Haltemoment, jedoch wird hier das Moment für den drehenden Schrittmotor angegeben. Da bei Schrittmotoren das Drehmoment mit steigender Drehzahl abnimmt, reicht hier also kein einzelner Wert. Daher wird diese Angabe in Form einer Kennlinie, oft mit verschiedenen Betriebsspannungen, dargestellt. Eine solche Kennline haben wir schon im Artikel weiter oben kennengelernt. Sie ist sehr hilfreich, um den richtigen Motor für ein Vorhaben zu finden. Man sollte insbesondere darauf achten, dass das Drehmoment bei der maximalen geplanten Drehzahl auch wirklich noch für die Aufgabe ausreichend ist. Leider wird das Betriebsmoment (also diese Kennlinie) bei vielen Motoren (insbesondere bei Angeboten, kleineren Motoren usw.) nicht angegeben. Da der Kennlinienverlauf der Schrittmotoren jedoch eine gewisse Grundähnlichkeit aufweist, kann man in der Praxis deshalb oft auch mit der Angabe des Haltemoments auskommen. |
===Weniger oft notwendige Daten=== | ===Weniger oft notwendige Daten=== | ||
Zeile 435: | Zeile 622: | ||
==Praxisbeispiel für Stromberechnung== | ==Praxisbeispiel für Stromberechnung== | ||
− | Soll ein Schrittmotor mit 8 Anschlüssen (4 Wicklungen) | + | Soll ein Schrittmotor mit 8 Anschlüssen (4 Wicklungen) bipolar angesteuert werden, so hat man die Wahl jeweils zwei Spulen parallel oder in Reihe zu schalten. Die Stromangaben auf dem Motor beziehen sich in der Regel auf eine Phase, also eine Wicklung. Angenommen, wir haben einen Motor mit folgender Beschriftung: |
[[Bild:stepperdaten.png|framed|Auf einem Foto könnte das so aussehen]] | [[Bild:stepperdaten.png|framed|Auf einem Foto könnte das so aussehen]] | ||
Zeile 447: | Zeile 634: | ||
− | Möchte man die Spulen in Reihe schalten, so muss der Strom in | + | Möchte man die Spulen in Reihe schalten, so muss der Strom in etwa um den Faktor 1,41 (Wurzel aus 2) verringert werden, damit der Motor nicht zu heiss wird. |
− | In unserem Beispiel müsste also 1A / 1,41 = '''0, | + | In unserem Beispiel müsste also 1A / 1,41 = '''0,71A''' fließen. Bei einer Chopper-Regelung (Stromregelung) müsste man somit 0,71A einstellen. Da sich der ohmische Widerstand durch die Reihenschaltung verdoppelt, benötigt man auch eine höhere Spannung. Anhand des ohmischen Widerstandes, der sich messen oder berechnen lässt, kann man in etwa die notwendige Mindestspannung berechnen. Wenn bei 5,1 V ein Strom von 1 A fließt, so müsste der ohmische Widerstand R=U/I = 5,1 V / 1 = '''5,1 Ohm''' betragen. Der Gesamtwiderstand der Reihenschaltung wäre demnach 10,2 Ohm. Wenn wir den Strom von 0,71 A erreichen wollen, so müsste U=I*R = 0,71*10,2 = '''7,2 V''' vorhanden sein. Das wäre aber nur die Mindestspannung, also die Spannung, die man ohne Stromregelung auch konstant anlegen könnte. Nutzt man jedoch eine Stromregelung, so müssen natürlich Regelreserven vorhanden sein. Zudem müssten die Schaltungsverluste der Chopperregelung berücksichtigt werden. Daher verwendet man eine deutlich höhere Spannung. 12V bis 24 V wären in dem Beispiel durchaus angebracht. Je höher desto besser, denn so kann bei hohen Drehzahlen der Strom schneller dem induktiven Widerstand entgegenwirken und das Drehmoment fällt nicht mehr so stark bei steigenden Drehzahlen ab. Das Drehmoment erhöht sich im übrigen bei der Reihenschaltung ebenfalls in etwa um den Faktor 1,41 (Wurzel aus 2). |
− | Bei der Parallelschaltung von zwei Spulen ist es genau umgekehrt. Hier | + | Bei der Parallelschaltung von zwei Spulen ist es genau umgekehrt. Hier darf der Strom in etwa um den Faktor 1,41 erhöht werden. Also 1A * 1,41 = 1,41 A sollten hier fließen. Da sich der ohmische Widerstand durch die Parallelschaltung halbiert, also in unserem Fall auf 2,55 Ohm, ist natürlich auch eine niedrigere Spannung notwendig. Die Berechnung wäre also U=I*R = 1,41 A * 2,55 = 3,6 V |
− | Auch | + | Auch das ist wieder die Mindestspannung, die auch als Konstantspannung angelegt werden darf. Auch hier muss bei der Chopper-Regelung (Stromregelung) eine höhere Spannung angelegt werden. Mit Werten zwischen ca. 8 und 16V würde man jetzt aber schon sehr gute Ergebnisse erzielen. Auch in diesem Beispiel würde sich das Drehmoment in etwa um den Faktor 1,41 erhöhen. |
Problematisch kann bei der Parallelschaltung mancher Motoren der niedrige ohmsche Widerstand werden. Nicht jede Motorregelung/Motortreiber macht das mit. Aus diesem Grund werden sicherlich Reihenschaltungen in der Praxis bevorzugt eingesetzt. | Problematisch kann bei der Parallelschaltung mancher Motoren der niedrige ohmsche Widerstand werden. Nicht jede Motorregelung/Motortreiber macht das mit. Aus diesem Grund werden sicherlich Reihenschaltungen in der Praxis bevorzugt eingesetzt. | ||
Zeile 463: | Zeile 650: | ||
* [[Getriebemotoren Ansteuerung]] | * [[Getriebemotoren Ansteuerung]] | ||
* [[Getriebemotoren]] | * [[Getriebemotoren]] | ||
+ | * [[Stepmotore und deren Ansteuerung]] | ||
+ | * [[Servomotore und deren Ansteuerung (1)]] | ||
+ | |||
+ | |||
==Weblinks== | ==Weblinks== | ||
Hier noch ein paar Links, wenn ihr euch noch eingehender mit dem Thema befassen wollt: | Hier noch ein paar Links, wenn ihr euch noch eingehender mit dem Thema befassen wollt: | ||
− | * [http://www. | + | |
+ | '''Animationen:''' | ||
+ | * [http://de.nanotec.com/support/tutorials/schrittmotor-und-bldc-motoren-animation/ Interaktive Animation von Schrittmotor- und BLDC-Betriebsmodi] | ||
+ | |||
+ | '''Deutschsprachige Links:''' | ||
+ | * [http://www.mikrocontroller-elektronik.de/schrittmotortreiber-rn-stepp297/ Projekt RN-Stepp297 mit Eagle Dateien und Beispielprogramm] | ||
+ | * [http://github.com/slaxor/rnschrittmotor Eine Ruby lib für das RN-Schrittmotor Controllerboard] | ||
+ | * [http://www.robotikhardware.de/download/rnstepp297.pdf Doku zum Fertigmodul und Bausatz / Platine für L297/L298 Schaltung] | ||
* [http://www.roboternetz.de/robotertutorial.html Robotertutorial (Projekt mit Schrittmotor)] | * [http://www.roboternetz.de/robotertutorial.html Robotertutorial (Projekt mit Schrittmotor)] | ||
− | * [http://www. | + | * [http://www.rn-wissen.de/images/a/a2/Schrittmotorphasentabelle.gif Phasentabelle als Grafik] |
* [http://www.shop.robotikhardware.de/shop/catalog/index.php?cPath=65&osC L297/L298 Bauteilesortiment + Schrittmotoren] | * [http://www.shop.robotikhardware.de/shop/catalog/index.php?cPath=65&osC L297/L298 Bauteilesortiment + Schrittmotoren] | ||
− | * [http://www. | + | * [http://www.robotikhardware.de/download/rnschrittmotor.pdf Bequeme Schrittmotoransteuerung über RS232 , I2C und Takt mit RN-Schrittmotor] |
* [http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=21730 800mA I2C Schrittmotorsteuerung mit Trinamic TMC222] | * [http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=21730 800mA I2C Schrittmotorsteuerung mit Trinamic TMC222] | ||
+ | * [http://www.kocomotion.de/schrittmotor.html Koco Motion] | ||
* [http://www.nanotec.de/ Nanotec] | * [http://www.nanotec.de/ Nanotec] | ||
− | * [http://www | + | * [http://www.mechapro.de/ mechapro] |
− | * [http://www.wolfgang-back.com/schrittmotor_demo.php Wolfgang | + | * [http://www.schrittmotor-blog.de/ Schrittmotor-Blog] |
+ | * [http://www.ostermann-net.de/electronic/schritt/sm_faq.htm Schrittmotor_Faq] | ||
+ | * [http://www.wolfgang-back.com/schrittmotor_demo.php Wolfgang Backs Seite] | ||
* [http://www.roboternetz.de/phpBB2/motordrehmoment.php Automatische Berechnung der Robotergeschwindigkeit und Drehmoment bei unterschiedlichen Motoren] | * [http://www.roboternetz.de/phpBB2/motordrehmoment.php Automatische Berechnung der Robotergeschwindigkeit und Drehmoment bei unterschiedlichen Motoren] | ||
* [http://www.roboternetz.de/phpBB2/dload.php?action=file&file_id=284 Schaltung mit L297/L298 Protobed_StepM_297-298] | * [http://www.roboternetz.de/phpBB2/dload.php?action=file&file_id=284 Schaltung mit L297/L298 Protobed_StepM_297-298] | ||
− | + | * [http://www.roboternetz.de/phpBB2/viewtopic.php?t=13162 Roboternetz-Forum Thread Messung von Daten an einem Schrittmotor] | |
* [http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=733 Roboternetz-Forum Thread L297/L298] | * [http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=733 Roboternetz-Forum Thread L297/L298] | ||
* [http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=2741 Roboternetz-Forum Thread zum RNST01/RN-Motor] | * [http://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=2741 Roboternetz-Forum Thread zum RNST01/RN-Motor] | ||
− | '''Englische Links''' | + | |
+ | '''Englische Links:''' | ||
+ | * [http://ww1.microchip.com/downloads/en/AppNotes/00907a.pdf Stepping Motors Fundamentals (enthält INFOs über Microstepping)] | ||
* [http://www.cs.uiowa.edu/~jones/step/ Control of stepping motors (gutes Tutorial)] | * [http://www.cs.uiowa.edu/~jones/step/ Control of stepping motors (gutes Tutorial)] | ||
* [http://library.solarbotics.net/pdflib/pdf/drive.pdf Drive motor circuit basics] | * [http://library.solarbotics.net/pdflib/pdf/drive.pdf Drive motor circuit basics] | ||
Zeile 487: | Zeile 690: | ||
* [http://www.njr.co.jp/pdf/ee/ee05005.pdf Microstepping ] | * [http://www.njr.co.jp/pdf/ee/ee05005.pdf Microstepping ] | ||
* [http://www.compumotor.com/catalog/cataloga/A29-A30.pdf Microstepping drive technology] | * [http://www.compumotor.com/catalog/cataloga/A29-A30.pdf Microstepping drive technology] | ||
+ | |||
+ | '''Datenblätter:''' | ||
+ | * [http://www.roboternetz.de/phpBB2/dload.php?action=category&cat_id=2 L298 und L297 Datenblatt im RN-Downloadbereich (mittlerweile auf S.2)] | ||
+ | * [http://www.ortodoxism.ro/datasheets2/2/052daje928cw7pc0uqs1ipyryppy.pdf Datenblatt des L298 (englisch)] | ||
+ | * [http://www.ortodoxism.ro/datasheets2/c/0g0gh362kxwx30o7xi4x2i4jzffy.pdf Datenblatt des L297 (englisch)] | ||
+ | * [http://www.ortodoxism.ro/datasheets/motorola/SAA1042V.pdf Datenblatt des SAA1042 (englisch)] | ||
+ | |||
+ | |||
Aktuelle Version vom 16. Oktober 2017, 20:45 Uhr
Inhaltsverzeichnis
- 1 Was ist ein Schrittmotor
- 2 Wie unterscheidet man Schrittmotoren
- 3 Prinzip der Schrittmotoren
- 4 Schrittmotoransteuerung
- 5 Ansteuerarten
- 6 Schrittmotoren in Bezug auf Roboter
- 7 Fehler, die bei der Motorwahl oft gemacht werden
- 8 Schaltung zum Ansteuern eines Schrittmotors mit L298 und L297
- 9 Wie identifiziert man die Leitungen wenn man kein Datenblatt zum Motor hat?
- 10 Phasenbeschreibung der Ansteuerung
- 11 C-Beispiel
- 12 Motoren mit 5 Anschlüssen?
- 13 Die wichtigsten Daten bei einem Schrittmotor
- 14 Praxisbeispiel für Stromberechnung
- 15 Autor
- 16 Siehe auch
- 17 Weblinks
Was ist ein Schrittmotor
Schrittmotoren arbeiten völlig anders als Gleichstrommotoren. Das ist schon daran zu erkennen, dass diese keine zwei, sondern meist 4, 6 oder 8 Anschlüsse (bipolare oder unipolare Motoren) besitzen. Demzufolge ist es also nicht damit getan, irgendwo Spannung anzulegen, um den Motor zum Drehen zu bewegen. Aber keine Sorge, sehr kompliziert ist es dennoch nicht.
Ein Schrittmotor (oft auch Stepper genannt) ist ein Synchronmotor, bei dem der Rotor (drehbares Motorteil mit der Welle) bei geschickter Wahl der angesteuerten Statorspulen (nichtdrehbarer Motorteil) gezielt um einen Winkel gedreht werden kann. Auf diese Weise kann man in mehreren Schritten jeden Drehwinkel, wenn er ein Vielfaches des minimalen Drehwinkels ist, anfahren.
Wie unterscheidet man Schrittmotoren
Man unterscheidet den Schrittmotor nach seiner Bauform in Reluktanzmotor und Permanentmagnetmotor, wobei man beide Formen auch zu einem Hybridschrittmotor kombinieren kann. Beim Reluktanzschrittmotor besteht der Rotor aus einem gezahnten Weicheisenkern. Dieses Material gewährleistet nach dem Ausschalten des Statorstromes das Verschwinden jedes Rest-Magnetfeldes. Dadurch kann der magnetische Fluss bei eingeschaltetem Strom ungehindert durch den Weicheisenkern fließen. Die Drehbewegung des Rotors kommt zustande, weil so der Abstand zwischen dem nächstliegendem Zahn des Rotors und dem Stator verringert werden kann und der magnetische Widerstand verringert wird.
Beim Permanentmagnetschrittmotor besteht der Stator aus Weicheisen und der Rotor aus Dauermagneten, die abwechselnd einen Nord- und einen Südpol aufweisen. Mit dem Stator-Magnetfeld richtet man den dauermagnetischen Rotor so aus, dass eine Drehbewegung entsteht.
Da der Reluktanzschrittmotor keine Permanentmagnete enthält, hat er daher im Gegensatz zum Permanentmagnetschrittmotor auch kein Rastmoment bei ausgeschaltetem Strom. Beim Permanentmagnetschrittmotor ist die Anzahl der Pole (und damit die Auflösung) begrenzt. Der Hybridschrittmotor vereint die Eigenschaften beider Bauformen, in dem auf den Permanentmagneten noch ein gezahnter Weicheisenkranz eingefügt wird. Nahezu alle heute erhältlichen Schrittmotoren sind Hybridmotoren. Als High-Torque Motoren (=hohes Drehmoment) werden häufig Typen bezeichnet, bei denen für den Rotor besonders starke Seltenerdenmagnete verwendet werden. So lässt sich eine besonders hohe Kraftdichte erzielen.
Typische Anwendungsgebiete sind Drucker, vor allem Matrixdrucker, oder der Antrieb des Schreib-/Lesekopfes in einem Diskettenlaufwerk. Da Schrittmotoren (solange sie nicht überlastet werden) exakt dem außen angelegten Feld folgen, können sie ohne Sensoren zur Positionsrückmeldung (Encoder, Drehgeber oder ähnliches) betrieben werden (Synchronmotorverhalten). Daher können sie im Gegensatz zu Servomotoren gesteuert betrieben werden. Servos müssen auf Position geregelt werden.
Schrittmotoren existieren auch in Form von Linearmotoren. Schrittmotoren können bis ca. 1 kW wirtschaftlich eingesetzt werden.
Prinzip der Schrittmotoren
Der bipolare Motor besitzt zwei Spulen, und da jede Spule nun mal zwei Enden hat, also 4 Anschlüsse. Der unipolare Motor ist ebenfalls so aufgebaut, jedoch wird hier noch jede Spule in der Mitte durch eine Anschlussleitung angezapft (siehe Bild)
Um den Motor nun in Bewegung zu bringen, muss an den Spulen eine Spannung angelegt werden. Legt man die Mittelanzapfung auf Masse, so hat man also noch 4 Anschlüsse. Legt man nun an zwei dieser Anschlüsse die Spannung an, bewegt sich der Motor - allerdings nur einen winzigen kaum sichtbaren Schritt. Wie groß ein Schritt ist, hängt vom jeweiligen Motor ab. Bei den meisten Motoren beträgt der Schrittwinkel 1,8 Grad. Das bedeutet, dass 200 Schritte notwendig sind, um die Achse einmal rund zu drehen. Nachdem der Motor nun einen Schritt gemacht hat, muss die Spannung an einer anderen Kombination von Anschlüssen eingeschaltet werden. Es gibt somit 4 Kombinationen, wobei immer zwei Anschlüsse an die Spannung und zwei andere auf 0 V gelegt werden. Dies ist die sogenannte unipolare Ansteuerung. Wechselt man ständig diese verschiedenen Anschlussbelegungen, so würde sich der Motor mit jeder Änderung einen Schritt drehen.
Schrittmotoransteuerung
Um dies zu erreichen, benötigt man entweder eine elektronische Schaltung oder man verbindet die einzelnen Spulenenden jeweils mit einem Port eines Microcontrollers. Vorsicht, natürlich nicht direkt verbinden. Die Leistung eines Ports reicht natürlich niemals aus, um einen Motor zu bewegen. Ein Motortreiber (Verstärker) muss also schon dazwischen geschaltet werden. Zum Beispiel der Schaltkreis L293D, siehe Zeichnung.
oder aber der stärkere L6205:
Nun müsste der Microcontroller also nur noch eine 4-stellige Bitfolge ausgeben, um den Motor an den 4 Anschlüssen ständig in einer bestimmten Kombination mit Spannung zu versorgen.. Bei jeder Portausgabe würde sich somit der Schrittmotor einen Schritt bewegen. Das Ganze könnte natürlich in der Software in einer Schleife gemacht werden. Der Schleifenindex würde somit die Zahl der Schritte angeben. Der große Vorteil bei Schrittmotoren ist, dass man durch diese Methode ganz genau festlegen kann, wie weit sich ein Schrittmotor dreht. Man kann somit auch genau ausrechnen, wie viel Schritte pro Radumdrehung notwendig sind. Nutzt man keine Untersetzung (was ich allerdings noch zusätzlich empfehlen würde) so bräuchte man bei den meisten Motoren wie schon erwähnt 200 Schritte pro Radumdrehung. Berechnet man dann den Umfang des Rades, so kann man genau ausrechnen, wie viele Schritte pro cm Fahrtstrecke notwendig sind. So könnte man schnell eine Routine schreiben, welche als Parameter die Fahrtstrecke entgegennimmt und dann daraus die Schritte errechnet und in einer Schleife an die Ports weitergibt.
Genauer lässt sich ein Roboter eigentlich kaum steuern. Ein Schrittmotor bewegt sich nur bei einem Schritt, ansonsten sorgt das Haltemoment dafür, dass er sich nicht weiter bewegt. Nachteil ist nur, dass der Motor auch im Stand mit Strom versorgt wird, damit er sich nicht bei unebenen Böden oder an Steigungen bewegt. Bei Robotern, die sich nur in der Wohnung bewegen, kann man oft auch in der Praxis die Spannung abschalten, ohne dass sich der Motor bewegt, insbesondere wenn man vielleicht durch einen Zahnriemen noch eine Untersetzung von 4:1 oder 6:1 eingebaut hat.
In der Tat werden viele Roboter schon auf diese Weise gesteuert. Optimal ist diese Methode allerdings nicht, insbesondere bei schweren Robotern reicht die Kraft bei dieser Art Steuerung nicht aus, dies wird leider in vielen Artikeln zu diesem Thema verschwiegen. Wenn ein Motor zu schwach ist, können auch Schritte verloren gehen, wenn die Kraft nicht ausreicht um z.B. einen höheren Teppichrand zu überfahren. Dadurch würde die genaue Positionierung wieder gestört.
Gleich dazu mehr. Erwähnen möchte ich erst noch kurz die bipolaren Motoren mit 4 Anschlüssen (also ohne Mittelanzapfung). Diese sind im Prinzip nicht anders aufgebaut als die unipolaren. Da sie jedoch keine Mittelanzapfung besitzen, wird das unterschiedliche Magnetfeld dadurch erreicht, dass man die Spannung an den Spulenenden immer umpolt. Lange Zeit galt das für Bastler als etwas zu kompliziert, daher wurde die unipolare Ansteuerung oft vorgezogen. Durch neue integrierte Schaltkreise wie den L298 ist das aber auch kein Problem mehr. Erwähnen möchte ich noch die Motoren mit 8 Anschlüssen. Im Prinzip sind das Motoren, in denen die beiden Spulen in der Mitte aufgetrennt und herausgeführt wurden. Diese Motoren erlauben wahlweise eine bipolare oder unipolare Ansteuerung. Man kann die Leistung und Anschlusswerte auch verändern, indem man hier die 4 Spulen (sind ja nun quasi 4 durch die Auftrennung) entweder parallel oder in Serie schaltet.
Hier alle denkbaren Ansteuerungsmöglichkeiten bei den unterschiedlichen Motoren (die Farbangaben können bei den Motoren sehr unterschiedlich sein):
Ansteuerarten
Die einfachste Art, einen Schrittmotor zu betreiben, ist der sogenannte WaveDrive-Betrieb, bei dem immer nur eine Spule stromerfüllt ist. Dies ist am Einfachsten zu realisieren, birgt aber ein geringes Drehmoment. Die Positionen, die der Rotor einnehmen kann, liegen bei 0, 90, 180 und 270 Grad. Werden dagegen immer zwei benachbarte Spulen mit Strom versorgt, gelangt man zum sog. Vollschrittbetrieb und erreicht ein größeres Drehmoment. Die Positionen liegen hier genau zwischen den Positionen beim WaveDrive-Betrieb. Werden beide Betriebsarten kombiniert, also immer abwechselnd eine oder beide Spulen versorgt, können insgesamt schon 8 Positionen angefahren werden. Dies nennt man Halbschrittbetrieb. Führt man diese Idee weiter, so gelangt man zu einem idealen Drehfeld: Beide Spulenpaare werden mit einer Sin/Cos-Welle angesteuert, sodass sich ein nahezu idealer Rundlauf ergibt. Die Vorteile des Mehrschrittbetriebs liegen auf der Hand: Der Kraftverlauf wird bei kleineren Schritten gleichmäßiger, die Gefahr des Schrittverlustes sinkt und der Motor wird deutlich leiser.
Schrittmotoren in Bezug auf Roboter
Schrittmotoren eignen sich vorzüglich für Roboter. Insbesondere für Roboter, die sich nur im Haus bewegen und weniger als 20 kg wiegen, halte ich persönlich Schrittmotoren für die 1. Wahl. Sie zeichnen sich dadurch aus, dass die Steuerung besonders leicht und präzise per Software möglich ist. Oft hört man in Foren, dass Schrittmotoren im Vergleich zu Getriebemotoren recht schwach seien. Dazu ist zu sagen, dass dieser Vergleich etwas hinkt. Ein Schrittmotor könnte ja auch mit einem Getriebe versehen werden. Also wenn man Getriebemotoren schon mit Schrittmotoren vergleicht, dann müssten beide über ein Getriebe verfügen. Natürlich gibt es auch Schrittmotoren mit Getriebe. Allerdings braucht man bei Schrittmotoren oft gar kein Getriebe, denn die Kraft ohne Getriebe ist nämlich in der Regel wesentlich höher als bei den Gleichstrommotoren. Auch niedrige Drehzahlen sind bei Schrittmotoren kein Problem, sogar von Vorteil. Je niedriger die Drehzahl, desto höher ist bei Schrittmotoren das Drehmoment. Dass es trotzdem immer wieder bei Einsteigern Probleme mit der Wahl des richtigen Schrittmotors gibt, liegt vorwiegend am mangelnden Wissen über das Stromverhalten dieser Motoren. Dazu später ein paar Tipps, die zeigen, dass man auch schwere Roboter durchaus mit recht kleinen Motoren bewegen kann. Zuvor aber ein paar Grundlagen für Einsteiger. Anwender, die sich schon etwas mit Schrittmotoren auskennen, können den nächsten Absatz überspringen
Fehler, die bei der Motorwahl oft gemacht werden
Bei der Auswahl eines Schrittmotors sollte man sorgfältig vorgehen. Kleine Motoren, wie sie in Druckern oder Floppys stecken, reichen in der Regel wirklich nur für Roboter der Fliegengewichtsklasse aus. Wenn ein Roboter ein paar kg wiegt, dann braucht man schon etwas mehr Power. Hier sollte man immer auf das Haltemoment achten, dies entspricht fast dem Drehmoment. Mit einem Motor, der 40 Ncm Haltemoment besitzt kann man schon einiges anfangen. Bei einigen Versuchen hab ich durchaus Roboter mit 10 kg ohne Schrittverlust damit bewegt. Allerdings hab ich noch eine Untersetzung 6:1 über Riemen eingebaut. Wenn man sicher gehen will, dann nimmt man immer einen etwas stärkeren Motor. Ein 100 Ncm Motor kommt oft noch mit 6 oder 7 VA (Watt) aus. Es ist ein Irrtum, dass sich die Größe des Motors linear mit der Kraft ändert. Es gibt zahlreiche Motoren, welche die gleiche Größe aufweisen und dennoch ganz unterschiedlich stark sind. Ein Standardmaß ist 56 x 56 mm. In der Regel findet man in dieser Größe schon starke Motoren, die keine Wünsche mehr offen lassen.
Ein Fehler, der bei der Auswahl des Motors oft gemacht wird, ist die Betriebsspannung. Auch ich habe am Anfang gedacht, dass man bei einer vorhandenen Spannung von 12 V am besten einen Motortyp mit 12 V kaufen muss. Dies ist zwar nicht ganz falsch, aber wird nie zu großer Leistung führen. Wichtig für den Motor ist, dass der angegebene Strom fließt. Ein Motor, bei dem beispielsweise 12 V und 0,5 A angegeben sind, wird in der Praxis nur bei wirklich sehr niedrigen Drehzahlen seine Kraft, also sein Drehmoment, erreichen. Je höher die Drehzahl, desto schwächer wird der Motor. Das kann soweit gehen, dass schon das geringste Hindernis den Motor Schritte verlieren lässt oder dass der Motor bei höheren Drehzahlen gar nicht mehr anläuft.
Woran liegt dies? Ganz einfach: Ein Schrittmotor hat auch eine Induktivität. Da der Motor ständig umgepolt wird, wird durch diese Induktivität eine Art Gegenstrom erzeugt. Dies hat zur Folge, dass der eigentliche Strom bei höheren Drehzahlen nicht mehr erreicht wird. Je schneller sich der Motor dreht, desto weniger Strom fließt. Verständlich, dass dadurch die Leistung reduziert wird.
Wie kann man diesem Verhalten entgegenwirken? Ganz einfach mit einer wesentlich höheren Spannung als auf dem Motor angegeben. Doch Vorsicht, so einfach geht es nicht. Wenn der Motor steht oder sich langsam dreht, dann würde der Motor ja sofort durchbrennen. Die Lösung ist eine stromgeregelte Steuerung! Die Regelung wird mit einer hohen Spannung (oft bis zu 30 oder 40 Volt) versorgt. Aber die Regelung sorgt dafür, dass immer nur der eingestellte Nennstrom, in unserem Beispiel 0,5 A, zum Motor gelangt. Auf diese Art und Weise wird der Motor, ohne Schaden zu nehmen, immer mit der optimalen Spannung versorgt.
In der Tat werden heute alle Schrittmotoren, die etwas Leistung bringen müssen, z.B. bei Drehmaschinen, auf diese Art angesteuert. Das Ganze klingt nun recht kompliziert und aufwendig für einen Roboter-Hobbybastler. Ist es aber nicht, denn es gibt heute zwei integrierte Schaltkreise, die einen das Ganze recht einfach machen.
Schaltung zum Ansteuern eines Schrittmotors mit L298 und L297
Die hier abgebildete Schaltung ist quasi der Standard für Schrittmotoren. Auch bei Drehmaschinen wird diese Schaltung oft eingesetzt.
Die Schaltung lässt sich recht einfach auf einer Experimentierplatine aufbauen, es gibt jetzt aber auf vielfachen Wunsch auch eine fertig erhältliche Platine für Einsteiger. Die Platinen Dateien findet ihr auf der Seite Mikrocontroller-Elektronik.de
Bedenkt man, dass auch bei einem Gleichstrommotor ein Motortreiber notwendig ist, dann ist diese Schaltung auch nicht viel komplexer. Die einzelnen Steuerleitungen können direkt mit den Ports eines Microcontrollers (Controllerboard) oder mit dem Parallelport eines PCs verbunden werden. Hier die Bedeutung:
|
|
Wie Sie sehen, braucht man also nur 3 Port-Pins, um einen Schrittmotor in beliebige Richtungen und in beliebiger Geschwindigkeit bewegen zu können. Kommt noch ein Motor hinzu, dann könnte man die Enable-Leitung beider verbinden, sodass dann zwei Motoren mit 5 Ports-Pins optimal gesteuert werden können. Ich habe mit einer solchen Schaltung auf einer Experimentierplatine schon einen 15-kg-Roboter problemlos mit einer C-Control gesteuert.
Einen interessanten Forum Thread zu oberer Schaltung findet man unter #Weblinks
Hier noch mal ein größerer Schaltplan mit eingezeichnetem Anschlussstecker und Spannungsteiler.
Wichtig ist nur, dass man diese Schaltung mit einer möglichst hohen Spannung versorgt und einen Schrittmotor mit möglichst niedriger Spannung auswählt. Man sollte sich nicht davor abschrecken lassen, dass Schrittmotoren mit niedriger Spannung höhere Ströme z.B. 1 bis 2 A benötigen. Die Leistung berechnet sich ja bekanntlich mit der Formel P=U*I. Somit brauchen auch diese Motoren nicht mehr Energie als Motoren mit höherer Spannung und niedrigem Strombedarf. Hat man bei einem Roboter nur 12 V zur Verfügung, so ist es empfehlenswert z.B. einen 3- oder 4-Volt-Motor zu kaufen. Der Widerstand sollte jedenfalls deutlich unter 10 Ohm liegen. In diesem Fall könnte man dann die obige Schaltung auch mit 12 V betreiben. Allerdings bei höheren Drehzahlen würde die Spannung wegen der Induktivität meist immer noch nicht ausreichen, um die volle Leistung des Motors zu nutzen. Daher wäre zu überlegen, ob man nicht zwei 12-V-Batterien in Serie schaltet oder eine Spannungsverdopplerschaltung einsetzt. Ich habe mich für letzteres entschieden. Mit ein paar Kondensatoren und Dioden kann man recht einfach die Spannung von 12 auf ca. 21 V erhöhen. In der Praxis bricht diese Spannung bei hohen Strömen ein paar Volt ein, aber das tut der Leistung keinen Abbruch. Mit Spannungsverdoppler war der Motor jedenfalls deutlich stärker und hatte mit 15 kg in der Wohnung keinerlei Probleme. Schwieriger wird es mit Robotern, die schwerer als 15 kg sind, denn hier wird der Strombedarf einfach zu groß und die Akku-Kapazität ist zu schnell erschöpft.
Fazit: Roboter, die sehr genau gesteuert werden müssen und deutlich weniger als 10 kg wiegen, kann man sehr gut mit Schrittmotoren steuern. Bei Robotern, die schwerer sind, sich sehr schnell bewegen müssen oder deren Steuergenauigkeit nicht so wichtig ist, sind Getriebemotoren oft sinnvoller.
Als Alternative eine Ansteuerung für 2 Schrittmotoren per Befehl über I2C oder RS232 speziell für Roboterbastler (ebenfalls mit Stromregelung und L298). Das Board RN-Motor beruht auf dieser Schaltung
Einen interessanten Forum Thread zu dieser Schaltung findet man unter #Weblinks
Neben dem Motortreiber L298 gibt es aber auch alternative Motortreiber, die sich sehr gut für die Schrittmotorsteuerung eignen. Sehr gut eignen sich zum Beispiel auch L293D oder der neuere L6205. Diese Treiber werden auf unserer Seite Getriebemotoren-Ansteuerung näher beschrieben.
Wer eine etwas einfachere Schaltung zum Ansteuern eines kleineren Uni-/bipolaren Schrittmotors im Halb-/Vollschrittmodus möchte, kann auch einen SAA1042 benutzen. Dieser 16-polige IC beinhaltet ein Schieberegister mit CW/CCW-, CLK- und half/full-Eingängen, 2 H-Brücken und Freilaufdioden. Man benötigt auch keine externe OSC-Beschaltung zum Takten des ICs, und es gibt keine Strombegrenzung durch etwaige Vref-Beschaltungen oder Ähnliches. Durch die einzelnen Windungen des Schrittmotors dürfen (lt. Datenblatt) maximal 500mA fließen.
Der SAA1042 arbeitet mit bis zu 20V Versorgungsspannung, sie ist gleichzeitig die Arbeitsspannung für den Schrittmotor.
Schaltpläne und Anschlussbelegung findet man im Datenblatt unter #Weblinks
Wie identifiziert man die Leitungen wenn man kein Datenblatt zum Motor hat?
Ein Schrittmotor ist aus zwei Spulen aufgebaut:
Mit einem Ohmmeter kann man die Anschlüsse einfach identifizieren: Von Spule 1 - a nach Spule 1 - Common ist der Widerstand halb so groß wie der Widerstand von Spule 1 - a nach Spule 1 - b. Der Widerstand nach den Anschlüssen von Spule 2 sollte unendlich sein.
Dass die Anschlüsse a und b voneinander nicht zu unterscheiden sind, ist unwichtig. Falls Sie sie vertauschen, dreht sich der Motor andersherum. Wichtig ist allenfalls, dass sie bei mehreren Motoren gleichen Typs die Anschlüsse gleich legen, um voraussagen zu können, in welche Richtung der Motor sich drehen wird.
Um den Motor bipolar anzusteuern, werden übrigens die Common-Anschlüsse nicht benötigt.
Phasenbeschreibung der Ansteuerung
Schema zur Beschreibung der Spulen
Zur Beschreibung verwenden wir wieder das folgende Schema der Spulen:
Unipolare Ansteuerung Vollschritt
Unipolare Ansteuerung Vollschritt | ||||||
---|---|---|---|---|---|---|
Phase Spule 1a | Phase Spule 1b | Common Spule 1 | Phase Spule 2a | Phase Spule 2b | Common Spule 2 | |
Schritt 1 | + | 0 | - | 0 | + | - |
Schritt 2 | + | 0 | - | + | 0 | - |
Schritt 3 | 0 | + | - | + | 0 | - |
Schritt 4 | 0 | + | - | 0 | + | - |
- steht für Minus + steht für Plus 0 steht für Unbelegt |
Bipolare Ansteuerung Vollschritt
Bipolare Ansteuerung Vollschritt | ||||||
---|---|---|---|---|---|---|
Phase Spule 1a | Phase Spule 1b | Common Spule 1 | Phase Spule 2a | Phase Spule 2b | Common Spule 2 | |
Schritt 1 | + | - | 0 | + | - | 0 |
Schritt 2 | + | - | 0 | - | + | 0 |
Schritt 3 | - | + | 0 | - | + | 0 |
Schritt 4 | - | + | 0 | + | - | 0 |
- steht für Minus + steht für Plus 0 steht für Unbelegt |
Bipolare Ansteuerung Halbschritt
Bipolare Ansteuerung Halbschritt | ||||||
---|---|---|---|---|---|---|
Phase Spule 1a | Phase Spule 1b | Common Spule 1 | Phase Spule 2a | Phase Spule 2b | Common Spule 2 | |
Schritt 1 | + | - | 0 | + | - | 0 |
Schritt 2 | + | - | 0 | 0 | 0 | 0 |
Schritt 3 | + | - | 0 | - | + | 0 |
Schritt 4 | 0 | 0 | 0 | - | + | 0 |
Schritt 5 | - | + | 0 | - | + | 0 |
Schritt 6 | - | + | 0 | 0 | 0 | 0 |
Schritt 7 | - | + | 0 | + | - | 0 |
Schritt 8 | 0 | 0 | 0 | + | - | 0 |
- steht für Minus + steht für Plus 0 steht für Unbelegt |
Schrittmotorphasen bildlich dargestellt
C-Beispiel
Unvollständiges Beispiel (Pseudocode)
Bei dem hier vorgestellten Quellcode handelt es sich um einen unvollständigem Auszug aus einem Projekt vom März 2014. Es soll vor allem Einsteigern der C-Programmierung auf Microcontrollern helfen wie man C-Code strukturieren kann. Der Code ist zwar unvollständig, sollte jedoch relativ verständlich sein und eine Realisierung ermöglichen.
// ----------------------------------------------------------------------- // // Beispiel Sourcefile für einen Schrittmotortreiber // // Beschreibung: // Methoden um einen Schrittmotor mit einem PIC16F877A anzusteuern // Die Steuerung basiert hier aus einer Kombination // von einem L6506 und L298 Chipsatz. // // Pinning L6506: Type: // // - PORTB.0: L6506 Enable Do // - PORTB.1: Input 1 (A) Do // - PORTB.2: Input 2 (/A) Do // - PORTB.3: Input 3 (B) Do // - PORTB.4: Input 4 (/B) Do // - PORTC.2: Motor Current Do (PWM) // // // Pinning L298: // // - PORTB.5: Motor A EN Do // - PORTB.6: Motor B EN Do // // // Pinning Potis/Switches: // // - PORTA.0: Poti MotorA Ai // - PORTA.1: Poti MotorB Ai // // ----------------------------------------------------------------------- #ifndef STEPPERMOTOR_H #define STEPPERMOTOR_H #ifdef __cplusplus extern "C" { #endif #include <stdlib.h> #include "variables.h" #include "timer1.h" const far uchar stepTable[] = { 0b00000000, // 0, Keine Spule bestromt 0b00000001, // 1, Eine Spule bestromt 0b00000101, // 2, Zwei Spulen bestromt 0b00000100, // 3, Eine Spule bestromt 0b00000110, // 4, Zwei Spulen bestromt 0b00000010, // 5, Eine Spule bestromt 0b00001010, // 6, Zwei Spulen bestromt 0b00001000, // 7, Eine Spule bestromt 0b00001001 // 8, Zwei Spulen bestromt }; // Aus der Tabelle kann man erkennen, dass beim Halbschritt-Betrieb immer // abwechselnd eine Spule bzw. zwei Spulen bestromt werden // Dies führt zu einem schwankenden Drehmoment des Motors // Dabei spricht man auch vom Drehmomentrippel // Für den Vollschritt gibt es zwei Möglichkeiten // Die Schrittfolge: 1,3,5,7 (Weniger Moment) oder 2,4,6,8 (Mehr Moment) typedef enum STEPPER { eNONE, eLEFT, eRIGHT }; struct { uchar current; uchar holdcurrent; char stepnumber; uchar stepdir; uchar stepmode; int32 position_ist; int32 position_soll; uchar enable; } steppercfg; void STEPPER_init(); void STEPPER_INT(); void STEPPER_moveAbsolut(int32 position); void STEPPER_moveRelative(int32 delta); inline void STEPPER_setCurrent(uchar value); void STEPPER_nextStep(); #ifdef __cplusplus } #endif #endif /* STEPPERMOTOR_H */
// Interrupt-Routine, welche die Schritte abarbeitet // dadurch hat man auch für andere Dinge noch Zeit // Diese Methode kann z.B. durch einen Timer Interrupt aufgerufen werden // Über die Zeit des Timers kann die Drehgeschwindigkeit des Motors beeinflusst werden void STEPPER_INT() { if (steppercfg.position_ist != steppercfg.position_soll) { STEPPER_nextStep(); } }
// Beispiel für eine Methode zur Absolutbewegung void STEPPER_moveAbsolut(int32 position) { if (position < steppercfg.position_ist) { steppercfg.stepdir = eLEFT; } else if (position > steppercfg.position_ist) { steppercfg.stepdir = eRIGHT; } else { steppercfg.stepdir = eNONE; } steppercfg.position_soll = position; }
// Beispiel für eine Methode zur Relativbewegung void STEPPER_moveRelative(int32 delta) { if (delta > 0) { steppercfg.stepdir = eRIGHT; } else { steppercfg.stepdir = eLEFT; } steppercfg.position_soll = steppercfg.position_ist + delta; }
// Diese Methode berechnet den nächsten Schritt und holt die // Werte der Ansteuerung aus der Schritttabelle // Es wird auch die IST-Position aktuallisiert. // Dabei wird immer angenommen, dass der Schrittmotor keine Schritte verliert! void STEPPER_nextStep() { if (steppercfg.stepdir == eLEFT) // Linkslauf { steppercfg.stepnumber--; steppercfg.position_ist--; if (steppercfg.stepnumber < 1) { steppercfg.stepnumber += 8; } } else if (steppercfg.stepdir == eRIGHT) // Rechtslauf { steppercfg.stepnumber++; steppercfg.position_ist++; if (steppercfg.stepnumber > 8) { steppercfg.stepnumber-=8; } } // Ausgabewert um 1 nach linksverschoben, da an Pin 1 = Enableleitung PORTB = (stepTable[steppercfg.stepnumber] << 1) | steppercfg.enable; }
Motoren mit 5 Anschlüssen?
Es gibt auch Schrittmotoren mit 5 Drähten. In diesem Fall sind die mittleren Spulenanzapfungen miteinander verbunden und nur als einzige Leitung herausgeführt (also beide Common-Anschlüsse /siehe Skizze).
In dem Fall kann man den Motor nicht bipolar ansteuern, sondern muss ihn unipolar ansteuern. Mit L297/L298 bzw. RN-Motor usw. wird ein Schrittmotor immer bipolar angesteuert, also kann dafür kein Motor mit 5 Drähten verwendet werden.
Da heutzutage Schrittmotoren bevorzugt bipolar angesteuert werden um maximales Drehmoment (Kraft) zu erreichen, sollte man daher beim Kauf möglichst Motoren mit 4, 6 oder 8 Drähten kaufen.
Merke:
Motoren mit 4 Drähten kann man immer nur bipolar ansteuern. Motoren mit 6 oder 8 Drähten kann man sowohl bipolar als auch unipolar ansteuern. Gewöhnlich werden Motoren heute bevorzugt bipolar angesteuert, weil diese Ansteuerung ein größeres Drehmoment erzeugt. Bei der bipolaren Ansteuerung in Verbindung mit Stromregelung (wie bei L297/L298 oder RN-Motor etc.) kann die Nennspannung des Motors weit unter der Betriebsspannung liegen. Bei einer Ansteuerung ohne Stromregelung muss die Nennspannung des Motors in etwa der Betriebsspannung entsprechen (egal ob unipolar oder bipolar Ansteuerung). In diesem Fall ist jedoch das Drehmoment (Kraft) erheblich (deutlich spürbar) geringer. |
Die wichtigsten Daten bei einem Schrittmotor
Zum besseren Verständnis habe ich die Daten in die Klassen unverzichtbar, hilfreich und weniger notwendig unterteilt. Diese Unterteilung habe ich vorwiegend im Blick auf Hobby-Anwender und Robotik-Bastler vorgenommen. Es versteht sich von selbst, dass je nach Vorhaben oder bei industrieller Anwendung eines Motors alle Daten wichtig sein könnten.
Unverzichtbare Daten
- Nennstrom
- Maximal zulässiger Strom pro Wicklung (Phase). Bei Motoren mit mehreren Wicklungen (also Motoren mit 6 oder 8 Anschlüssen) bezieht sich die Stromangabe auf nur eine Wicklung (unipolare Ansteuerung). Siehe dazu auch das Rechenbeispiel im nächsten Abschnitt.
- Haltemoment
- Bis zu diesem Moment (Drehmoment, also dieser Kraft) kann ein Schrittmotor belastet werden, bis sich die Achse um einen oder mehrere Schritte durch die Belastung verdreht. Diese Angabe gilt für einen stehenden Schrittmotor, der unter voller Betriebsspannung steht. Die Angabe gibt somit quasi an wieviel Kraft der Motor besitzt, eine sehr wichtige Angabe.
- Schrittwinkel
- Der Schrittwinkel gibt an, um wieviel Grad sich die Achse bei einem Vollschritt bewegt. Dadurch wird also gleichzeitig angegeben, wie viele Schritte ein Motor für eine volle Drehung benötigt. Man teilt einfach 360 Grad durch den Schrittwinkel und erhält die Schrittanzahl. Bei guten Industriemotoren beträgt der Schrittwinkel oft 1,8 Grad, das ergibt also 200 Vollschritte pro Umdrehung. Nutzt man das Halbschrittverfahren zur Ansteuerung, also 400 Schritte. Je mehr Schritte ein Motor besitzt desto genauer kann er natürlich bestimmte Positionen anfahren, zugleich läuft er ruhiger und leiser. Nachteil von hohen Schrittzahlen ist allerdings, dass oft nicht so hohe Drehzahlen erreicht werden können wie bei großen Schrittwinkeln.
- Nennspannung
- Die Betriebsspannung, die notwendig ist, um den Nennstrom zu erreichen. Die Nennspanung gilt in der Regel für den stehenden Schrittmotor. Bei drehenden Motoren reduziert sich der Strom durch die Induktivität des Motors, daher könnte dann die Nennspannung mit steigender Drehzahl höher werden. Genau das machen auch moderne Schrittmotoransteuerungen. Darüber haben wir aber oben im Artikel schon ausgiebig gelesen. Steuert man einen Schrittmotor mit konstanter Spannung, so sollte man die Nennspannung verwenden, damit der Motor nicht überhitzt.
- Anschlussbelegung
- Schrittmotoren haben 4, 5, 6 oder 8 Anschlussdrähte. Daher gehört zu jedem Schrittmotor ein Plan, der Auskunft über interne Verdrahtung der Spulen gibt. Notfalls kann man dieses auch mit Hilfe eines Ohmmeters ermitteln, auch dies wurde oben schon geschildert.
Hilfreiche Daten
- Start-Stop Frequenz (fs)
- Die maximale Frequenz (Geschwindigkeit der Schrittfolge), bei der ein nicht belasteter Schrittmotor anläuft ohne Schritte zu verlieren. Leider findet man auch diese Angabe wohl nur bei etwas teureren Markenmotoren.
- Betriebsmoment
- Ähnlich wie das Haltemoment, jedoch wird hier das Moment für den drehenden Schrittmotor angegeben. Da bei Schrittmotoren das Drehmoment mit steigender Drehzahl abnimmt, reicht hier also kein einzelner Wert. Daher wird diese Angabe in Form einer Kennlinie, oft mit verschiedenen Betriebsspannungen, dargestellt. Eine solche Kennline haben wir schon im Artikel weiter oben kennengelernt. Sie ist sehr hilfreich, um den richtigen Motor für ein Vorhaben zu finden. Man sollte insbesondere darauf achten, dass das Drehmoment bei der maximalen geplanten Drehzahl auch wirklich noch für die Aufgabe ausreichend ist. Leider wird das Betriebsmoment (also diese Kennlinie) bei vielen Motoren (insbesondere bei Angeboten, kleineren Motoren usw.) nicht angegeben. Da der Kennlinienverlauf der Schrittmotoren jedoch eine gewisse Grundähnlichkeit aufweist, kann man in der Praxis deshalb oft auch mit der Angabe des Haltemoments auskommen.
Weniger oft notwendige Daten
- Widerstand
- Manchmal wird der ohmsche Widerstand der Spule angegeben, allerdings nicht immer. Wenn die Nennspannung und der Nennstrom angebenen sind, so kann man sich den Widerstand nach dem ohmschen Gesetz selbst berechnen (R=U/I). Sind nur die Nennspannung und der Widerstand angegeben, was auch vorkommt, so muss man sich dagegen den Nennstrom selbst ausrechnen (I=U/R). Die Leistungsaufnahme der Wicklung kann man natürlich ebenfalls durch diese Angaben bestimmen (P=I²*R)
- Rastmoment
- Das Rastmoment kennt man bei Permanentmagnet- und Hybrid-Schrittmotoren. Es ist beim Drehen des Motors (ohne Spannung) spürbar. Wenn man die Wicklungen kurzschließt, wird dieses erheblich stärker. Dieser Sachverhalt kann auch für eine Bremse ausgenutzt werden.
- Rotorträgheit
- Das Massenträgheitsmoment des Rotors. Je größer und schwerer ein Motor bzw. eine Achse wird, desto größer wird die Masse des Rotors, der zusammen mit der Nutzlast beschleunigt werden muss. Je niedriger dieser Wert ist, desto schneller und dynamischer verhält sich der Motor bei Beschleunigungen. Da die Masse des Rotors und der Last ein schwingungsfähiges System bilden, sollte das auf die Motorwelle reduzierte Trägheitsmoment der Last in der selben Größenordnung liegen wie die Rotorträgheit.
Praxisbeispiel für Stromberechnung
Soll ein Schrittmotor mit 8 Anschlüssen (4 Wicklungen) bipolar angesteuert werden, so hat man die Wahl jeweils zwei Spulen parallel oder in Reihe zu schalten. Die Stromangaben auf dem Motor beziehen sich in der Regel auf eine Phase, also eine Wicklung. Angenommen, wir haben einen Motor mit folgender Beschriftung:
- Nennspannung: 5,1 V
- Phasenstrom: 1,0 A
- Anschluß: 8 Drähte = wahlweise unipolar oder bipolar
- Schrittwinkel 1,8 Grad / 200 Schritte pro Umdrehung
- Haltekraft: ca. 50 Ncm
- Wellendurchmesser: 6 mm
Möchte man die Spulen in Reihe schalten, so muss der Strom in etwa um den Faktor 1,41 (Wurzel aus 2) verringert werden, damit der Motor nicht zu heiss wird.
In unserem Beispiel müsste also 1A / 1,41 = 0,71A fließen. Bei einer Chopper-Regelung (Stromregelung) müsste man somit 0,71A einstellen. Da sich der ohmische Widerstand durch die Reihenschaltung verdoppelt, benötigt man auch eine höhere Spannung. Anhand des ohmischen Widerstandes, der sich messen oder berechnen lässt, kann man in etwa die notwendige Mindestspannung berechnen. Wenn bei 5,1 V ein Strom von 1 A fließt, so müsste der ohmische Widerstand R=U/I = 5,1 V / 1 = 5,1 Ohm betragen. Der Gesamtwiderstand der Reihenschaltung wäre demnach 10,2 Ohm. Wenn wir den Strom von 0,71 A erreichen wollen, so müsste U=I*R = 0,71*10,2 = 7,2 V vorhanden sein. Das wäre aber nur die Mindestspannung, also die Spannung, die man ohne Stromregelung auch konstant anlegen könnte. Nutzt man jedoch eine Stromregelung, so müssen natürlich Regelreserven vorhanden sein. Zudem müssten die Schaltungsverluste der Chopperregelung berücksichtigt werden. Daher verwendet man eine deutlich höhere Spannung. 12V bis 24 V wären in dem Beispiel durchaus angebracht. Je höher desto besser, denn so kann bei hohen Drehzahlen der Strom schneller dem induktiven Widerstand entgegenwirken und das Drehmoment fällt nicht mehr so stark bei steigenden Drehzahlen ab. Das Drehmoment erhöht sich im übrigen bei der Reihenschaltung ebenfalls in etwa um den Faktor 1,41 (Wurzel aus 2).
Bei der Parallelschaltung von zwei Spulen ist es genau umgekehrt. Hier darf der Strom in etwa um den Faktor 1,41 erhöht werden. Also 1A * 1,41 = 1,41 A sollten hier fließen. Da sich der ohmische Widerstand durch die Parallelschaltung halbiert, also in unserem Fall auf 2,55 Ohm, ist natürlich auch eine niedrigere Spannung notwendig. Die Berechnung wäre also U=I*R = 1,41 A * 2,55 = 3,6 V Auch das ist wieder die Mindestspannung, die auch als Konstantspannung angelegt werden darf. Auch hier muss bei der Chopper-Regelung (Stromregelung) eine höhere Spannung angelegt werden. Mit Werten zwischen ca. 8 und 16V würde man jetzt aber schon sehr gute Ergebnisse erzielen. Auch in diesem Beispiel würde sich das Drehmoment in etwa um den Faktor 1,41 erhöhen.
Problematisch kann bei der Parallelschaltung mancher Motoren der niedrige ohmsche Widerstand werden. Nicht jede Motorregelung/Motortreiber macht das mit. Aus diesem Grund werden sicherlich Reihenschaltungen in der Praxis bevorzugt eingesetzt.
Autor
- Frank
Siehe auch
- Chopper Betrieb
- Getriebemotoren Ansteuerung
- Getriebemotoren
- Stepmotore und deren Ansteuerung
- Servomotore und deren Ansteuerung (1)
Weblinks
Hier noch ein paar Links, wenn ihr euch noch eingehender mit dem Thema befassen wollt:
Animationen:
Deutschsprachige Links:
- Projekt RN-Stepp297 mit Eagle Dateien und Beispielprogramm
- Eine Ruby lib für das RN-Schrittmotor Controllerboard
- Doku zum Fertigmodul und Bausatz / Platine für L297/L298 Schaltung
- Robotertutorial (Projekt mit Schrittmotor)
- Phasentabelle als Grafik
- L297/L298 Bauteilesortiment + Schrittmotoren
- Bequeme Schrittmotoransteuerung über RS232 , I2C und Takt mit RN-Schrittmotor
- 800mA I2C Schrittmotorsteuerung mit Trinamic TMC222
- Koco Motion
- Nanotec
- mechapro
- Schrittmotor-Blog
- Schrittmotor_Faq
- Wolfgang Backs Seite
- Automatische Berechnung der Robotergeschwindigkeit und Drehmoment bei unterschiedlichen Motoren
- Schaltung mit L297/L298 Protobed_StepM_297-298
- Roboternetz-Forum Thread Messung von Daten an einem Schrittmotor
- Roboternetz-Forum Thread L297/L298
- Roboternetz-Forum Thread zum RNST01/RN-Motor
Englische Links:
- Stepping Motors Fundamentals (enthält INFOs über Microstepping)
- Control of stepping motors (gutes Tutorial)
- Drive motor circuit basics
- Half stepping techniques
- Microstepping
- Microstepping drive technology
Datenblätter: