Es geht doch: Schrittmotor 28BYJ-48 mit der Original Arduino Stepper Library

Ich habe günstig zwei Schrittmotoren des Typs 28BYJ-48 inkl. einem Treiberboard auf Basis des ULN2003 erstanden. Hier folgt eine Anleitung, wie man diesen Motor problemlos mit der Arduino Stepper Library betreiben kann. An vielen Stellen im Netz liest man, dass das nicht geht und findet diverse hangestrickte Codes, umgebaute Libs etc. Der ganze Aufwand ist aber gar nicht nötig. Es langt 3 Zahlen im Code zu ändern oder zwei Kabel zu tauschen.
Stepper_28BYJ-48
Anfangs habe ich einfach alles so verkabelt, wie es im Arduino Tutorial für Schrittmotoren beschrieben ist und das Beispiel „Stepper Motor Control – one revolution“ auf einen Arduino Nano gespielt. Statt abwechselnd eine volle Drehung nach links und dann wieder nach rechts auszuführen, drehte der Schrittmotor immer wieder ca 30 Grad nach links. Eine Umkehr der Drehrichtung erfolgte nicht und besonders rund lief der Motor auch nicht.

Ein Blick ins Datenblatt liefert, dass für den Motor ein 8-schrittiges Halbschritt Verfahren vorgesehen ist. Die Arduino Bibliothek realisiert vier Vollschritte. Dieser Unterschied ist der Grund für die vielen Spezialimplementierungen. Der Motor läuft aber auch perfekt mit 4 Vollschritten, wenn man ihn richtig anschließt. Da der Motor mit 500 bzw 1000 Hz angesteuert wird, macht das Schrittverfahren auch keinen großen Unterschied. Aber auch bei sehr langsamen Schrittfolgen geht alles robust mit 4 Vollschritten.

Hier die Schrittfolge gemäß Datenblatt des 28BYJ-48 Schrittmotors in 8 Halbschritten (Drähte nach unten, Schritte nach rechts):
__________Steps_____________
Wire__1__2__3__4__5__6__7__8
1____________________x__x__x
2______________x__x__x______
3________x__x__x____________
4_____x__x_________________x

Wir nutzen nur die geraden Schritte / die Vollschritte:
_______Steps____
Wire__2__4__6__8
__1_________x__x
__2______x__x___
__3___x__x______
__4___x________x

Ein Blick in den Code der Stepper Bibliothek liefert die dort implementierte Schrittfolge:
_______Steps____
Wire__1__2__3__4
__1_________x__x
__2___x__x______
__3______x__x___
__4___x________x

Ein genauer Blick liefert die Erkenntnis: Man muss nur die Drähte 2 und 3 vertauschen, damit es stimmt.
Man kann natürlich die Drähte vertauschen. Das ist aber gar nicht nötig. Wir können den Tausch auch im Konstruktor der stepper Bibliothek vornehmen:
Stepper myStepper(stepsPerRevolution, 8, 10, 9, 11);
Mit dieser Änderung läuft der Motor schon mal rund und in beide Richtungen. Die Verkabelung bleibt dann: D8->IN1, D9->IN2, D10->IN3, D11->IN4.

Ein weiterer Blick in das Datenblatt verrät, dass der Motor bei 64 (Halb!-)Schritten 5,625 Grad dreht. Macht 4096 Halbschritte oder 2048 Vollschritte für eine volle Drehung um 360 Grad. Ergo:
const int stepsPerRevolution = 2048;

Jetzt passt auch der Titel des Codebeispiels „one revolution“. Last but not least stellen wir die Frequenz zur Ansteuerung richtig ein. Das geschieht bei der stepper Bibliothek durch die Angabe der Umdrehungen pro Minute (RPM). Im Datenblatt findet sich ein empfohlener Frequenzbereich von 600-1000Hz bezogen auf Halbschritte.
1000Hz / 4096 Schritte = 0,244Hz
Also 4 Sekunden für eine Umdrehung oder 15 RPM.
myStepper.setSpeed(15);

Nun läuft der 28BYJ-48 Schrittmotor wunderbar rund und in beide Richtungen.
Hier gibt es nochmal den Code mit allen Änderungen: stepper_28bj-48

6 Gedanken zu „Es geht doch: Schrittmotor 28BYJ-48 mit der Original Arduino Stepper Library

  1. davedarko

    Man, man, man…

    Vielen Dank! Ich war gerade auf der Suche nach einem schnellen Einstieg mit dem Stepper und hab mich gewundert was schief geht.

    Grüße aus Berlin,
    Dave

    Antworten
  2. Helmut

    Bei mir funktionierte es nicht mit den gegebenen Werten,
    aber mit:
    stepsPerRevolution = 1024;
    ging es dann doch, und bei
    myStepper.setSpeed(25);
    komme ich auch auf 15 RPM.
    Bin gerade zu faul um die Theorie dahinter zu ergründen
    Der Motor wird bei 5V schon gut handwarm, muss dass so ß
    Gruß
    helmut

    Antworten
    1. Kai

      Hallo Helmut,

      der Motor wird warm, weil falsch beschaltet.
      die Belegung muß wie folgt aussehen: 8,11,10,9

      Kannst Du ganz leicht an Hand der Steuerplatinen-LED testen.
      Wenn Du die Programm ohne Stepper-Biblo benutzt geht auch 8,10,11,9.

      Viel Spaß beim Experimentieren wünscht,
      Kai

      Antworten
  3. ST

    Hallo Helmut,
    ich bin etwas verwirrt. Also hast Du am Ende doch 2048 Steps per Revolution genommen.
    Wenn Du bei den von Dir zuerst verwendeten 1024 Steps auf ca. 15 RPM kommst, wäre das ja grob wieder richtig. 25 halbe Drehungen macht ca. 12,5 RPM; die Abweichung ist ggf ein Meßfehler / Toleranz.

    Gruss Stefan

    Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.