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

10 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
  4. SiggiUnger

    Hallo Zusammen ,

    da ich leidenschaftlicher Modellbauer bin und mich mein neues Projekt , die legendäre Bismarck in 1:200 , auf dieses System gebracht hat, über Schrittmotoren und Arduino zu fahren , habe ich mich
    mal ganz vorsichtig rangetastet , konnte aber kein passendes Programm finden , da ich leider nicht über das nötige Fachwissen verfüge.
    Da ich beim herumexperimentieren mit verschiedenen Servo´s festgestellt habe ,
    das mir das „ruckeln“ erhalten bleibt und ich keinen „runden Lauf“ zustande bringe habe
    ich mal ´ne Frage , vielleicht kann mir jemand helfen, wäre super.

    Gibt es ein Programm das es mir ermöglicht

    1. einen 28BYJ-48 Schrittmotor mit ULN2003 Treiberboard über den Arduino Nano so zu steuern ,
    das ich mit 0-Stellung (die Geschütze zeigen nach vorne) starte und dann jehweils 135° links und rechts drehen kann.

    2. einen VITECH 81G2 3V Mini Schrittmotor mit der A4988 Treiberplatine über den Arduino Nano so zu steuern , das er von der 0-Stellung nur nach links max .45° dreht und wieder auf 0.

    Das ganze möchte ich über Graupner Nautic Expert Schaltmodul 2-26K und mein Graupner Sendermodul 4108 steuern.

    Gruss Siggi

    Antworten
  5. ST

    Hallo Siggi,

    mit diesen Getriebe Stepmotoren kannst Du die Bewegungen sehr „glatt“ machen. Du kannst mit einem Arduino auch Servo Signale direkt einlesen. Dazu gibt es ein Beispielprogramm, das mit der Arduino IDE mitkommt. Du könntest dann einen Code programmieren, der die über den Empfänger vorgegebene Position langsam anfährt, damit es realistischer aussieht.
    Die Nullstellung ist allerdings ein Problem. Es gibt bei Steppern keine Nullstellung. Die drehen immer weiter. Du musst dazu irgendeine Art von Anschlag bauen, der z.B. einen Taster auslöst. Dann muss am Anfang eine Kalibrierungsfahrt gemacht werden, bis der Schalter auslöst.
    Den von Dir ausgesuchte Schrittmotor ist kein Getriebemotor. Der hat 18 GRad Schrittweite. Da brauchst Du ein Getriebe, sonst bekommst Du einen sehr grob laufenden Geschützturm – dafür aber den schnellsten Geschützturm der Welt 😉
    Ein A4988 ist für Dein Vorhaben vermutlich Overkill. Die Dinger werden eingesetzt um dicke Nema Motoren in 3D Druckern zu bewegen. Ein ULN2003 sollte allemal langen.

    Gruss Stefan

    P.S. MIt dem Graupnerzeug kenne ich mich nicht aus.

    Antworten
  6. Siggi Unger

    Hallo Stefan ,
    vielen Dank für deinen Tipp ,
    habe mittlerweile ein Programm gefunden , mit dem ich
    step by step anfangen kann.
    Den Stepmotor hab ich bereits auf die gewünschte
    Drehzahl umprogrammieren können , muss nur noch
    herausfinden wie und wo ich meine 135° mit anschließendem stop
    im Sketch deklarieren muss.
    Der Anschlag dürfte das kleinere Übel sein , da ist das richtige übertragen in
    den Sketch für mich schon schwieriger

    Gruss Siggi

    Antworten

Schreibe einen Kommentar

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