Einen Schrittmotor per Arduino ansteuern

Der Schrittmotortreiber L293 DNE in der Praxis

Sollen Schrittmotoren mit dem Arduino angesteuert werden, so muss dazu ein sogenannter Schrittmotortreiber verwendet werden. Eine Variante ist der L293 DNE, wie er beispielsweise von Texas Instruments produziert wird. Seine Funktion ist kein Hexenwerk.

Schrittmotoren dürfen nicht direkt am Arduino betrieben werden, da dieser sonst durch den dafür benötigten, hohen Strom zerstört wird. Vielmehr ist zu diesem Zweck ein Schrittmotortreiber zwischenzuschalten, der den dazu nötigen Strom beispielsweise aus einem externen Netzteil bezieht und zum Schrittmotor weiterleitet. Für diese Aufgabe eignet sich beispielsweise das Modell L293 DNE, wie es von Texas Instruments und anderen Herstellern produziert wird.

Soll mit diesem Baustein, der zwei H-Brücken enthält, eine Schaltung aufgebaut werden, wird dazu üblicherweise zunächst ein sogenanntes Steckbrett genutzt, um die Funktion des ersonnenen Schaltplans zu testen. Sinnvollerweise ist der Schrittmotortreiber dazu zu Sockeln, um seine biegeempfindlichen Beinchen nicht einer unnötigen Belastung auszusetzen. Dazu sind unbedingt hochwertige DIL-Präzisionsfassungen zu verwenden, da die preiswerteren IC-Sockelfassungen mit Federkontakt unter Umständen nicht perfekt in der Lochrasterung Platz finden und somit der elektrische Kontakt zwischen Steckbrett und Motortreiber nicht einwandfrei gegeben ist.

Kontaktprobleme vermeiden mit der richtigen Fassung

Kontaktprobleme vermeiden mit der richtigen Fassung

Eine DIL-Präzisionsfassung (links) sorgt für perfekten Kontakt mit dem Steckbrett, während die IC-Sockelfassung (rechts) durchaus Kontaktprobleme bereiten kann, da diese eigentlich für Lochrasterplatinen gedacht ist.

Der Schaltplan zur Ansteuerung eines Schrittmotors mit vier Anschlüssen unter Einsatz des L293 DNE-Schrittmotortreibers könnte wie folgt aussehen:

Das dazu nötige Programm, auch Sketch genannt, kann beispielsweise wie folgt aussehen:

#include <Stepper.h> // Laden der Schrittmotor-Programmbibliothek.
int S_P_U = 200; // Festlegung der Anzahl der Schritte pro Umdrehung.
Stepper MeinMotor(S_P_U, 5,4,3,2); // 2,3,4,5 auch ok. Der Schrittmotor bekommt die Bezeichnung "MeinMotor". Zudem wird angegeben an welchen Arduino-Pins dieser angeschlossen ist und in welcher Reihenfolge diese angesprochen werden.

void setup() //Start des Setup.

{
MeinMotor.setSpeed(10); // Angabe der Geschwindigkeit in Umdrehungen pro Minute.
}

void loop() {
MeinMotor.step(S_P_U); // Der Motor macht 200 Schritte für eine Umdrehung.
delay(100); // 1/10-Sekunde Pause nach der Drehung.
MeinMotor.step(-S_P_U); // Durch das Minuszeichen erfolgen 200 Schritte in die entgegengesetzte Richtung.
delay(100); // erneut 1/10-Sekunde Pause nach der Drehung.
}

Die Angabe der Arduino-Pins richtet sich selbstverständlich an den Schrittmotortreiber L293 DNE, denn über diesen wird ein Schrittmotor mit dem nötigen, stärkeren Strom versorgt, der bis zu 600 mA betragen darf.

Tückische Fehlerquelle:

An dieser Stelle ist der Hinweis angebracht, als externe Stromquelle nicht unbedingt ein regelbares Labornetzteil zu verwenden, da damit bei unsachgemäßer Bedienung schneller als gedacht der für den L293 zulässige Strom überschritten wird und der Baustein zerstört wird.

Besonders ärgerlich ist, dass sich dieser Fehler nicht unbedingt in der Weise zeigt, dass der Schrittmotor nicht mehr arbeitet, sondern unter Umständen noch eine Teilfunktion zeigt. Diese kann sich darin zeigen, dass die Welle des Schrittmotors sich zwar in einer Richtung dreht, nicht jedoch in die Gegenrichtung. Bei Aufruf eines Umkehrbefehls ist lediglich ein nervöses Zittern der Schrittmotorwelle zu beobachten.

Hier hilft dann nur noch, den defekten L293-Schrittmotortreiber gegen ein intaktes Exemplar zu tauschen und fortan ein einfaches, einstellbares Netzteil zu verwenden. Schon ab rund 6 Volt funktionieren viele Schrittmotoren einwandfrei und sind mit dieser Spannung zumindest für Lernzwecke, insbesondere hinsichtlich der Sketch-Programmierung bestens versorgt.

Anschluss am Arduino:

Eine korrekt vorgenommene Zuordnung der Pins am Arduino ist für die Funktion des Schrittmotors eine wichtige Voraussetzung.

Wie im Sketch ersichtlich, sind im Befehl ›Stepper MeinMotor(S_P_U, 5,4,3,2)‹ die Pins 5,4,3 und 2 bestimmt worden, die Steuersignale für den Schrittmotor auszugeben. Diese Signale werden vom L293-Baustein über die mit xA bezeichneten Eingänge entgegengenommen, verstärkt und an die Spulen des Schrittmotors über die jeweiligen Ausgänge xY weitergereicht.

Es ist nicht egal, in welcher Reihenfolge im Stepper-Befehl die Pins aufgeführt werden, da sonst der Schrittmotor in der falschen Reihenfolge mit Signalen versorgt wird. Die Folge wäre, dass sich die Welle des Schrittmotors nicht dreht, sondern im besten Fall zitternd am Platz verweilt.

Entscheidend bei der Angabe der Pin-Reihenfolge im Stepper-Befehl ist, die Reihenfolge der Spulen-Anschlüsse hier abzubilden. Es ist demnach die Reihenfolge 5,4,3,2 ebenso richtig wie 2,3,4,5. Hier entscheidet sich, ob die Welle des Schrittmotors einwandfrei arbeitet. Werden andere Reihenfolgen, wie etwa 3,4,2,5 oder 5,3,4,2 angegeben, so wird der Schrittmotor nicht korrekt angesteuert und dessen Welle verbleibt zitternd am Platz.

Anzumerken ist, dass die Reihenfolge bei anderen Schrittmotoren durchaus geändert werden muss, wenn dies für ihre korrekte Ansteuerung nötig ist. Nähere Auskünfte darüber erteilt das jeweilige Datenblatt des Schrittmotors.

Die Geschwindigkeit, mit der sich die Welle des Schrittmotors dreht, kann über den Befehl ›MeinMotor.setSpeed(10)‹ beeinflusst werden. Je höher der in der Klammer stehende Wert, desto höher die Geschwindigkeit. Allerdings verliert der Motor Schritte, wenn die Geschwindigkeit zu hoch ausfällt.

Berechnung der Schritte:

Schrittmotoren haben je nach Bauart ein unterschiedliches Auflösungsvermögen. Viele Modelle, wie auch das hier verwendete Modell, drehen sich pro Schritt um 1,8 Grad weiter. Dies bedeutet, dass 200 Schritte für eine ganze Umdrehung der Schrittmotorwelle nötig sind. Dieser Wert wurde im Sketch in die Ganzzahlvariable ›S_P_U‹ geladen und für die Drehbewegung nach rechts und links verwendet.

Schrittmotor mit sechs Anschlüssen:

Schrittmotoren mit sechs Anschlüssen können im Zusammenhang mit einer L293 DNE-H-Brücke auf die gleiche Weise wie Schrittmotoren mit vier Anschlüssen betrieben werden. Die zusätzlichen, als COM bezeichneten Anschlüsse müssen lediglich mit einer Blindbuchse oder Isolierband abgedeckt werden, damit diese nicht versehentlich einen Kurzschluss verursachen können.

Unter Beachtung, dass die Anschlüsse A, A\, B und B\ mit den passenden L293-Anschlüssen verbunden werden, kann auch das obige Programm für einen Testlauf verwendet werden.

Schrittmotor mit fünf Anschlüssen:

Schrittmotoren mit fünf Anschlüssen werden identisch wie Schrittmotoren mit sechs Anschlüssen behandelt und angeschlossen. Auch hier wird der COM-Anschluss offengelassen. Allerdings ist zu beachten, dass der Mitsumi-Schrittmotor vom Typ M42SP-4NP eine Schrittweite von 3,75 Grad besitzt. Der Sketch muss demnach abgeändert werden. Die Berechnung der Schritte für eine Umdrehung wird nach der nebenstehenden Formel vorgenommen.

Die Variable S_P_U im Programm ist daher anzupassen: int S_P_U = 96;

Zudem ist der Befehl ›Stepper MeinMotor(S_P_U, 5,4,3,2);‹ abzuändern, damit der Schrittmotor läuft. Der Befehl muss lauten: ›Stepper MeinMotor(S_P_U, 2,4,3,5);‹ Mit diesen Änderungen wird sich der Schrittmotor genauso verhalten, wie die beiden anderen Schrittmotoren, die eine Schrittweite von 1,8 Grad besitzen.

Noch ein Wort zum Sketch und den Anschlüssen am Arduino:

Es stellt sich die Frage, wie man vorgehen muss, um die korrekte Reihenfolge der Pin-Bezeichnung im Befehl ›Stepper MeinMotor(S_P_U, a,b,c,d);‹ anstelle der Buchstaben a,b,c,d einzutragen. Dies ist ganz wesentlich, da falsche Einträge den Schrittmotor nicht korrekt drehen lassen.

Die nachfolgenden Beispiele sind nicht unbedingt in jedem Fall zutreffend, doch wurde die Funktion in einer L293-Umgebung getestet, wo die Modelle sich als zutreffend herausstellten.

Die Ansteuerung beziehungsweise die in das Steuerprogramm einzugebende Logik für verschiedene Schrittmotormodelle stellt sich wie folgt dar:

Projektabschluss:

Egal, welcher Schrittmotor verwendet wird – eine korrekt aufgebaute Schaltung führt dazu, dass unter Nutzung des Beispiel-Sketches die Welle des Schrittmotors eine Umdrehung nach rechts beziehungsweise links ausführt, kurz verweilt, um anschließend eine Drehbewegung in die andere Richtung auszuführen. Mit einem an der Welle angebrachten Papierpfeil lässt sich diese Bewegung sehr schön beobachten.

Damit sind die Grundlagen zur Ansteuerung eines Schrittmotors erarbeitet. Was noch fehlt ist beispielsweise das Abfragen eines Endlagensensors oder der Start beziehungsweise der Stopp des Schrittmotors per Knopfdruck. Auch die Zusammenarbeit mehrerer Schrittmotoren macht Sinn, um beispielsweise einen Plotter oder eine einfache Fräsmaschine zu bauen. Somit sind Schrittmotoren wahre Tausendsassas, mit denen verschiedenste Projekte umgesetzt werden können.