Raspberry Pi Schrittmotor ansteuern mit L293D / ULN2003A

Im Gegensatz zu einem normalen Motor kann man mit einem Schrittmotor und dem Raspberry Pi die Schritte individuell steuern und kann damit immer die genaue Position erkennen. Schrittmotoren eignen sich daher perfekt für Anwendungen, bei denen man den Drehwinkel kennen muss wie z.B. in der Robotik.

Zum einfachen Ansteuern eines solchen Motors genügt ein Treiber IC, wobei es den L293D, sowie den ULN2003 gibt. Die Ansteuerung beider Treiber wird in diesem Tutorial gezeigt.

 

Der gängigere der beiden ist der ULN2003, wobei dieser auch oft in Driver Boards mit dem 28BYJ-48 verbaut ist. Es ist eine Spannung von 5V sowie 12V möglich.

Der L293D hingegen lässt die Möglichkeit offen eine externe Stromquelle anzuschließen, womit z.B. eine höhere Stromstärke (die bei manchen Motoren nötig ist) angeschlossen werden kann.

 

Zubehör

Als Raspberry Pi Schrittmotor kann natürlich jeder andere auch genommen, wichtig ist beim Anschließen nur auf die ggf. unterschiedlichen Farben zu achten (siehe Datenblatt).

Die besagten Farben beziehen sich in meinem Fall auf die des 28BYJ-48 (Datenblatt):

Raspberry Pi Schrittmotor Aufbau
Falls du also einen anderen Motor wählst, achte dabei darauf, dass die Farben anders sein können, wichtig sind allerdings nur die Positionen und Schritte.

 

Aufbau L293D

Hast du einen Motor mir ULN2003 Driver Board bzw. den ULN2003 Treiber IC kannst du diesen Schritt überspringen.

Ein Blick ins Datenblatt zeigt, dass eine externe Stromquelle möglich ist. Der Aufbau ist also wie folgt:

Raspberry Pi Schrittmotor Aufbau - L293D
 Wichtig ist noch zu sagen, dass falls du keine externe Stromquelle benutzt, muss +5V vom Raspberry auch unten links an den IC (Pin 8), zusätzlich zu Pin 16 angeschlossen werden.

Falls der Motor mehr Stromstärke benötigt, als das Raspberry liefern kann, kommst du um eine externe Stromquelle nicht herum (am besten eine feste Stromquelle und keine Batterie). Der Vorwiderstand ist dabei auch im Datenblatt genannt. Achte dabei, dass du genug Spannung und Stromstärke einspeist, denn das ist die häufigste Ursache, weshalb der Motor später nicht arbeitet wie er soll. Beim 28BYJ-48 ist das jedoch nicht der Fall.

 

Aufbau ULN2003

Im Gegensatz zum L293D sind hier nur 5V bzw 12V Eingangsspannung erlaubt (Datenblatt). Da das Raspberry aber nur 5V liefert, können wir auch nur Motoren betreiben, die maximal 5V benötigen.

 

Raspberry Pi Schrittmotor Aufbau - ULN2003
 

Testen des Raspberry Pi Schrittmotor

Beim 28BYJ-48 ist die Sequenz die folgende. Falls du einen anderen Motor benutzt, musst du die Sequenz entsprechend dem Datenblatt anpassen.
Wir erstellen also ein Skript

sudo nano schrittmotor.py

und fügen folgendes Skript ein:

Anschließend nur noch mit STRG+O und STRG+X speichern und beenden. Gestartet wird einfach mit

sudo python schrittmotor.py

Mittels setStep(0,0,0,0) kannst du den Motor in den Ruhezustand setzen, da ansonsten die ganze Zeit Strom verbraucht wird (durch die Elektromagneten im Motor).

Achte darauf, dass wenn du die Verzögerung (pro Schritt) hoch stellst sich der Motor sehr langsam bewegen wird (z.B. bei 100ms würde eine volle Umdrehung bereits 51,2 Sekunden dauern, da der Motor insgesamt 512 Schritte hat. Eine zu kleine Verzögerung kann jedoch das Gegenteil bewirken, sodass die Signale zu schnell übertragen werden und dadurch der Motor nur „stottert“. Willst du einen schnelleren Motor, wähle ein Modell mit größerem Schrittwinkel).

 

159 Kommentare

  1. Hallo, da ich mich gerade mit dem Thema beschäftige und mir einen Schrittmotor mit ULN2003 bestellt habe, frage ich mich was mit Pin 18 denn weiter passiert. In deinem Script wir der nur definiert und auf 1 gesetzt, aber verkabelt wird er nicht.

    Antworten
    • Ja, das stimmt, beim L293D Baustein wird er nicht verkabelt, nur beim ULN2003 IC. Es gibt manche Schrittmotoren, die einen zusätzlichen Impuls brauchen, um den Schritt zu machen. Zu diesem Motor gibt es unterschiedliche Datenblätter (z.B. hier).
      Da ich das Tutorial allerdings für alle Schrittmotoren allgemein geschrieben habe, habe ich den enable_pin mit hinzugefügt. Motoren, bei denen im Datenblatt explizit nur 4 Verbindungen angegeben habe, brauchen diesen Implus nicht.

      Antworten
  2. Für ein Projekt müssen wir zwei Schrittmotoren eigenständig betreiben können. Nachdem wir uns dieses Tutorial aufmerksam(!) durchgelesen haben, haben wir uns dazu entschieden, den L293D als Treiber zu verwenden, da wir eine externe Stromquelle benutzen wollen, um die 12V Schrittmotoren anzutreiben. Hier haben wir jedoch zwei Fragen: Welchen Vorwiderstand benötigt der Motor? Wie müsste die Verkabelung aussehen, wenn zwei Schrittmotoren angeschlossen werden statt einem?

    Vielen Dank für die Antwort im Voraus!
    Mit freundlichen Grüßen,
    Henning

    Antworten
    • Hallo Henning,
      die Daten zum Vorwiderstand und Betriebsspannung stehen im Datenblatt (online). Bei deinem Modell sind es 34 Ohm (wie du den Widerstand perfekt erreichst erfährst du hier: Widerstände berechnen und kombinieren)

      Der L293D ist nur für einen Motor geeignet, daher bräuchtest du zwei Module und dementsprechend 8 GPIO Pins. Die Spannung VCC und Masse GND werden an beide parallel angeschlossen (vom Pi und von deiner externen Stromquelle).

      LG Felix

      Antworten
      • Hallo Felix,
        danke für deine schnelle Antwort!
        Allerdings stellt sich uns noch eine Frage.
        Gibt es einen Unterschied bei den GPIO-Pins, die mit Zahlen belegt sind? In der Abbildung sind ja die Pins 4,17,23 und 24 benutzt worden. Es hätten aber auch alle anderen mit Zahlen belegten Pins verwendet werden können, oder? Wenn ich jetzt den Motor 1 der Abbildung nach verkable, welche Pins müsste ich dann für den 2. Motor belegen? Bitte mit Beschreibung (z.B. an Stelle von Pin 4 Pin 18).

        Mit freundlichen Grüßen,
        Henning