Zum Inhalt springen
Arduino Stepper Schrittmotor

Motorsteuerung eines Schrittmotors (Stepper Motor)

    Stepper-Motor-Steuerung

    Um einen Schrittmotor zu steuern, benötigt man eine H-Bridge. Hier der LD293D. Auch, wenn die Schaltung recht komplex aussieht, ist das Prinzip relativ einfach. Die Ausgänge des Arduino-Boards werden durch die vier Schaltstufen der H-Bridge verstärkt und an den Stepper-Motor geschickt.

    Die Arduino-Software kommt mit der Stepper-Library. Das Beispiel MotorKnob (File>Examples>Stepper>MotorKnob) zeigt, wie sie benutzt wird.

    #include <Stepper.h>
    
    /* STEPS muss auf die Anzahl der Stepps des verwendeten Motors angepasst werden */
    #define STEPS 100
    
    // eine Instanz aus der Klasse Stepper wird erzeugt
    // sie bekommt die Anzahl der Steps und die Pins, an die der Schrittmotor
    // angeschlossen ist übermittelt
    Stepper stepper(STEPS, 8, 9, 10, 11);
    
    int previous = 0;
    
    void setup(){
      stepper.setSpeed(30);  // setzt die Geschwindigkeit des Motors in Umdrehungen pro Minute
    }
    
    void loop(){
      int val = analogRead(0);
      // dreht den Motor ja nach Sensorwert (Potentiometer)
      stepper.step(val - previous);
      previous = val;
    }
    H-Bridge mit externer Stromversorgung
    Bipolarer Stepper mit H-Bridge und externer Stromversorgung

    Ein unipolarer Steppermotor wird übrigens ganz ähnlich angeschlossen und es kann auch derselbe Code verwendet werden:


    Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


    Unipolarer Stepper auf dem Breadboard
    Ein unipolarer Steppermotor auf dem Breadboard. Die gelben Anschlüsse sind die gemeinsamen Verbindungen des jeweils roten und schwarzen Magnetanschlusses.

    Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book »Arduino Projekte Volume 1« an!

    • Die beliebtesten Arduino-Projekte von StartHardware
    • Inklusive Schaltplan, Beschreibung und Code
    • Arduino-Schnellstart-Kapitel
    • Kompakter Programmierkurs


    41 Gedanken zu „Motorsteuerung eines Schrittmotors (Stepper Motor)“

    1. Hallo
      Hier ist der Quellcode angezeigt, mit dem man die steps vorher schon bestimmen kann. Hab ich auch verstanden, danke dafür.

      Allerdings will ich ein Touchpanel einbauen, mit dem der Nutzer Geschwindigkeit und steps selber eingeben kann. Wie mache ich das? Ich würde mich sehr über Ideen freuen.

      Liebe Grüße,
      Mimoza

    2. Wie funktioniert die Ansteuerung wenn man einen externen Controller verwendet, also man nur einen Taktausgang benötigt, rechts/links und Start/Stopp?

    3. Lag vermutlich daran, dass bei der Google Bildersuche nach “293d” das erste Bild 12V auf 8 und 16 hat. O_O

    4. Kommentar hier drüber bitte ignorieren. Hatte das irgendwie so in Erinnerung, dass der IP Symetrisch ist und die Versorgung über Enable läuft.

    5. Hallo Stefan (falls du das noch liest),

      müßte bei Bild 2 und 3 nicht Pin 16 des ICs an der externen Spannung, statt an 5V hängen?

    6. Guten Tag, das hier ist eine tolle Seite…

      Ich habe ein Problem ich benötige eine Schrittmotorsteuerung mit Endschalter und Geschwindigkeitsregelung über Poti. Habe schon einiges versucht, nur bin ich leider nicht zu dem Ergebnis gekommen das ich erreichen möchte.
      Wenn mir einer einen Schaltplan inkl. Materialliste und den passenden Code zusenden könnte wäre das echt super. Ich würde Ihn auch für seine mühe entlohnen.
      Mit freundlichen Grüßen
      Marc

    7. Das ist nicht sooo unteresaant und ehher dumm und unnötig aber es gibt immer menschen die daran spaß haben ne?!

    8. Hallo Stefan,
      kann ich mit oben genannter Steuerung einen Schrittmotor stufenlos steuern?
      Ich kenne mich mit Arduinos und Schrittmotoren bis dato gar nicht aus.
      Deine Seite ist sehr interessant und übersichtlich aufgebaut. Vielen Dank dafür!

    9. Ich habe einen recht kräftigen Steppermotor für 3V mit 3A. Das wären also 9Watt Leistungsaufnahme. Rein vom Gefühl her war mir das ein bisschen viel für diese H-Bridge. Ein Blick in das Datenblat zeigt: dieser Schaltkreis ist nur für eine Motorspannung zwischen 4,5 und 36 Volt verwendbar.

      Damit ist auch teilweise die obige Frage beantwortet, ob ein Schrittmotor mit einer Nennspannung von 2,2 Volt mit dieser Schaltung betrieben werden kann. Im Prinzip also nicht, aber vielleicht besteht die Möglichkeit (wenn der Motor 6 Anschlussdrähte hat) dessen Spulen seriell und den Motor dann als bipolaren Motor zu verwenden. Somit würden benötigte Spannung wenigstens auf 4,4 Volt klettern. Für einen Dauerbetrieb ist das allerdings nicht geeignet.

    10. Hallo,

      die oben abgebildete Schaltung mit L293 ohne und mit externer Spannungsversorgung funktioniert in meinem Nachbau grundsätzlich mit dem Beispielsketch MotorKnob, in dem ich die Schrittzahl angepasst habe. Allerdings drehen die angeschlossenen (unterschiedlichen) Stepper alle nur 5 Umdrehungen und bleiben dann mit zuckendem Motor stehen. Schrittzahl und Geschwindigkeit habe ich testweise verändert. Für den Poti habe ich einen 2k und einen 10 k ausprobiert. Das Ergebnis ist immer dasselbe.

    11. was ich noch ergänzen sollte ist das uns dafür ein Motor-Shield ,ein Motor (3-12V), eine Batterie (7.2V) und ein Ping-Sensor zur Verfügung stehen.
      Vielen Dank im voraus:)

    12. hallo ,
      ich und mein Freund erhielten von unserem Lehrer den Auftrag ein kleines Auto zu bauen und es mit Hilfe von Arduino so zu programieren das es möglichst nah an eine Wand fährt ohne diese zu berühren.
      Da ich und mein Freund von all dem Programmiern keine Ahnung haben hoffen wir nun durch eure Hilfe Tipps zu erhalten wie wir das durch das programmiern schaffen können

    13. Hinweis:
      Ich habe inzwischen auch die Schaltung für unipolare Schrittmotoren ausprobiert (allerdings mit dem L293D IC) und der Motor zuckt immer noch lediglich vor und zurück und ich weiß nicht, woran das liegen könnte.

      Gruß
      Wade

    14. Achso,

      was ich noch erwähnen wollte. Mein Schrittmotor hat eine Nennspannung von 2,2V (Stangstrom 0,7A, Widerstand 3,5 Ohm).
      Das L293D hat an den Anschlüssen für die Spule allerdings 3,8V (im Ruhezustand).
      1. Wie kann ich die Spannung senken?
      2. Habe ich dadurch evt. den Schrittmotor schon beschädigt?

      Gruß
      Wade

    15. Hallo Stefan,

      ich habe ein ähnliches Problem, wie Kirito es beschrieben hat. Ich bin mir aber ziemlich sicher, dass ich einen Schrittmotor habe (Sanyo 103-547-52500). Laut Herstellerangaben, kann der Schrittmotor uni- und bipolar betrieben werden.
      Ich habe es jetzt mal mit der bipolaren Steuerung versucht und dabei deinen Schaltplan mit externer Spannungsquelle verwendet.
      Starte ich MotorKnob vibriert mein Schrittmotor allerdings nur, bzw bewegt sich nur vor und zurück.
      Woran könnte das liegen?
      Und eine weitere Frage, die aber vermutlich nichts mit meinem Problem zu tun hat:
      Müsste die externe Spannungsquelle nicht auf beiden Seiten des L293D angeschlossen werden?

    16. Hallo,

      ich hätte da mal ein oder zwei probleme ich benutze einen Monipolaren Schrittmotor.
      In dem oben stehenden program sind in Stepper stepper(STEPS, 8, 9, 10, 11); 4 pins angegeben, der monipolare schrittmotor bedient sich aber nur 2 pins (bei mir 10 und 11)wie genau wirken sich die anderen beiden pins aus? außerdem möchte ich den schrittmotor nicht über einen potenziometer, sondern über einen festen ablauf steuern. ich habe also “val – previous” durch eine schrittzahl ersetzt. das sollte doch auch funktionieren oder?. wenn ich as programm uploade (ich habe auch schon versucht die beiden anderen Pins heraus zu löschen.) fängt der schrittmotor an zu vibrieren, statt sich zu drehen.
      ich hoffe ihr könnt mir helfen. Danke!

    17. Kleiner Hinweis für Interessierte:
      “Um einen Schrittmotor zu steuern…” exakt hier ist auch die grösste Limitierung! Diese Stepper lib erlaubt genau EINEN Stepper zu steuern, aber nicht 2 oder mehr gleichzeitig, da die step() Funktion eine Block-Funktion ist. Man kann also immer nur einen Motor noch dem anderen steuern, nicht 2 oder mehr gleichzeitg…

    18. Hallo,

      Ich versuche folgendes projekt zu verwirklichen. Und zwar möchte ich ein Solarpanel nach der Sonne über einen schrittmotor ausrichten. Das ganze soll über fotowiderstände funktionieren. Da ich noch nicht arg mit der Materie vertraut bin ist meine frage wie ich den Stepper der über ein Motor shield ansteuer über die fotowiderstände. Könnte mir da jemand bei helfen?

    19. Hi Dirk,

      also das Motorshield (Gute Wahl im Übrigen) ist die H-Bridge. Du brauchst also keine weitere für den Motor. Der Ground vom externen Netzteil ist auch schon über das Shield mit Arduino verbunden. Ist also alles ganz einfach – musst du nichts weiter beachten und beschrieben ist alles hier: http://arduino.cc/en/Main/ArduinoMotorShieldR3

      Liebe Grüße

      Stefan”

    20. Hallo Stefan,

      tolle Seite!
      Ich bin absoluter newbe was Arduino und Programieren angeht.
      Deshalb die Frage:
      Ich habe einen Arduino Uno, ein Motorshield Rev3, einen Schrittmotor und einen Poti.
      Jetzt würde ich gerne die Geschwindigkeit des Motors mit dem Poti Vorwärts und Rückwärts laufen lassen.
      Eine externe 12V Stromquelle habe ich bis jetzt am Motorshield angeschlossen. Brauche ich trotz shield noch eine hbridge? Und kann die Stromquelle weiterhin am shield bleiben, oder muss ich da etwas besonderes mit dem Ground beachten?
      Bin da leider etwas unsicher, und möchte den Arduino ja auch nicht beschädigen.

      Danke schon mal im Vorraus…
      Dirk

    21. Hy alle,

      ich brauch dringend hilfe bekomm den befehl nicht hin.

      Ausgangssituation: 1 stepper, 1 usb
      Programmablauf:

      USB = 5 Volt —> Step +100 —> Stepper stopp & warten auf USB = 0 Volt

      wenn USB = 0 Volt —> Step -100 —> Stepper stopp & warten auf USB 5 Volt

      und weiter loopen!

      das mit dem stepper vor und zurück per usb high oder low funktioniert soweit nur bleibt mein stepper nicht stehen und wartet auf das high oder low signal vom usb?!?!?!

      ich bin bisschen überfordert hab erst vor ner woche mit C angefangen…

      vielen dank für die hilfe

      Greez Daniel

    22. Ist es eigentlich möglich, diese Schrittmotorsteuerung mit einer Powerpointpräsentation anzuregen. Z.B. Über Visual Basic?

    23. Sprich wenn ich das Netzteil wie von dir gezeichnet anschließe, ich benutze eine SN75441ONE H-Bridge, bekommt der Motor mehr Leistung?

    24. @Florian: Du hast schon recht. Das ist natürlich total vom Motor abgängig. Ich habe im unteren Teil des Artikels noch ein Bild von einem Schaltplan mit Netzteil. Das sollte mehr Strom liefern. (Bei dem Regler allerdings nur 500mA)

    25. Erreicht der Schrittmotor dann seine volle Leistung? Das Arduino kann schließlich nur 40 mA pro Pin liefern, die meisten Schrittmotoren benötigen jedoch deutlich mehr, in meinem Fall 1,2 A.
      Meine Alternative wäre gewesen über ein MOSFET die V+ Leitung der externen Stormversorgung freizuschalten und GND von Arduino und Netzteil zu verbinden.

      Gruß
      Florian

    26. Hallo Stefan,
      ich nehme mal diese Seite hier um auch von mir ein Lob an dich zu bringen, wirklich sehr gelungene Page, sehr Informativ, es macht auch mir riesigen Spaß hier alles nach zu lesen und zu bauen.
      Bitte weiter so!

      LG
      Axel

    Die Kommentarfunktion ist deaktiviert.