Zur Zeit der Drucklegung war kein Platz mehr für das frühere Kapitel 5.6 zur Schrittmotorsteuerung. Dies lag auch daran, dass ein Interface, wie das dort verwendete SIOS mit Leistungsausgängen nicht mehr allgemein verfügbar war und ist. Die hier gezeigte aktualisierte Version benutzt den Arduino mit Leistungstreiber und reiht sich so fugenlos hinter das jetzige Kapitel 5.6 ein.
Schrittmotoren werden eingesetzt, wenn es darum geht, genaue Positionen anzufahren, ohne dass eine Abfrage der Positionsmeldung erfolgt. Ein üblicher Schrittmotor führt z. B. 200 Einzelschritte in einer Umdrehung aus, so dass sich eine Winkelauflösung von 1,8 Grad ergibt. Wenn eine Anfangsposition z. B. durch einen mechanischen Anschlag oder durch einen Endschalter bekannt ist, kann durch eine vorgegebene Anzahl von Einzelschritten eine genaue Position erreicht werden. Schrittmotoren steuern z. B. die Spurposition eines Schreib-Lesekopfes in einer mechanischen Festplatte oder auch die Position eines Druckkopfes in einem 3D-Drucker.
Der prinzipielle Aufbau eines Schrittmotors wird in der Abbildung gezeigt. Ein drehbarer Magnet-Anker ist zwischen mehreren Magnetspulen gelagert. Durch Einschalten einer Spule wird der Anker in einer bestimmten Winkelposition festgehalten. Schaltet man dann auf die nächste Spule um, dann bewegt sich der Anker einen Schritt weiter. Wenn zusätzlich auch die Stromrichtung umgeschaltet werden kann, spricht man von bipolaren Schrittmotoren. Sie kommen mit vier Anschlüssen für zwei Spulen aus. Unipolare Schrittmotoren verwenden z. B. vier Spulen und besitzen mindestens fünf Anschlüssen. Man kann unipolare Schrittmotoren auch bipolar ansteuern. Deshalb wird hier nur ein Beispiel für die bipolare Ansteuerung gegeben.
Das Prinzip der bipolaren Ansteuerung kann mit einem Arduino mit Byte-Steuerung gut nachvollzogen werden. Die zwei Spulen werden dabei so angesteuert, dass eine Bewegung entsteht. Die vier digitalen Ausgänge 0 bis 3 gestatten es durch entsprechendes Umschalten den rotierenden Magneten durch die zwei festen Spulen durch ihr Magnetfeld zu bewegen. Die bipolare Ansteuerung eines Schrittmotors setzt einen Leistungsverstärker mit Brückenausgängen voraus.
Die folgende Tabelle zeigt die erforderliche Ansteuerung der Ausgänge für einen Halbschrittbetrieb. Ein Schrittmotor erreicht damit die doppelte Anzahl von Schritten in einer Umdrehung, weil immer abwechselnd eine Spule allein und zwei Spulen gemeinsam eingeschaltet werden.
Tabelle: Ansteuerschema für einen bipolaren Schrittmotor
Kleinere Motoren benötigen meist nicht mehr als 200 mA pro Spule bei einer Anschluss-Spannung von 12 V. Zur Ansteuerung kann z. B. ein Arduino mit einem Treiberbaustein eingesetzt werden. Ein L293D besitzt Brückenausgänge mit einer höheren Belastbarkeit, er wird beworben mit:
- Breiter Versorgungsspannungsbereich: 4,5 V bis 36 V
- Separate Eingangs-Logik-Versorgung
- Interner ESD-Schutz
- Thermische Abschaltung
- High-Noise-Immunity-Eingänge
- Ausgangsstrom 600 mA pro Kanal
- Spitzenausgangsstrom 1,2 A pro Kanal
Der integrierte Schaltkreis des Bausteins verfügt über vier einzelne Treiber und hat 16 Anschlüsse. Mit den vier Bit D0 bis D3 der Digitalausgänge soll die Steuerung erfolgen, entsprechen der angegebenen Tabelle. Am Arduino Uno entsprechen die Anschlüsse den Pins 10 bis 13. Die Verbindung zwischen Arduino, Treiberbaustein und Schrittmotor kann einer Aufbauskizze oder/und einer Tabelle entnommen werden. Auch der Innenaufbau des L293D mit seinen Anschlüssen ist skizziert:
Zur Ansteuerung soll zunächst ein Makro ohne spezielle Interface-Funktionen dienen. Mit OPENCOM und SENDBYTE ist die parallele Ansteuerung der Digitalaushänge am Arduino mit CLAB-Sketch (Compact Red Needle) wie folgt möglich:
Sub out(b)
SENDBYTE 81: SENDBYTE Int(b)
PAUSE 5
End Sub
Sub Test()
Debug.Print OPENCOM("com3:9600,8,n,1")
For n = 1 To 50
out 8
out 9
out 1
out 5
out 4
out 6
out 2
out 10
Next n
out 0
End Sub
Unter Verwendung der speziellen Funktionen und einem Array erhält man eine aktuelle Variante des Listings der dritten Auflage.
REM 0=bl, 1=rt, 2=ws, 3=ge
Sub MAIN()
Dim b(8)
Links = 0
Schritte = 400
FINDHARD 0
b(0) = 8: b(1) = 9: b(2) = 1: b(3) = 5
b(4) = 4: b(5) = 6: b(6) = 2: b(7) = 10: ix = 0
For n = 1 To Schritte
If Links = 1 Then DOUT b(ix) Else DOUT b(7 - ix)
ix = ix + 1: If ix = 8 Then ix = 0
PAUSE 1
Next n
DOUT 0
End Sub
Um den Motor in einer Endlosschleife hin- und herlaufen zu lassen, erweitert sich das Makro entsprechend.
Sub MAIN()
Dim b(8)
RechtsRum = True
Schritte = 400
FINDHARD 0
While True
b(0) = 8: b(1) = 9: b(2) = 1: b(3) = 5
b(4) = 4: b(5) = 6: b(6) = 2: b(7) = 10: ix = 0
For n = 1 To Schritte
If RechtsRum Then DOUT b(ix) Else DOUT b(7 - ix)
ix = ix + 1: If ix = 8 Then ix = 0
PAUSE 1
Next n
RechtsRum = Not RechtsRum
Wend
DOUT 0
End Sub