1.Einführung

Schrittmotor 28BYJ-48 mit ULN2003 Treiberplatine am Arduino

Dieser Schrittmotor ist speziell für kleine Anwendungen mit dem Arduino-Board ausgelegt. Er kann ohne eine externe Spannungsversorgung betrieben werden und bietet dabei ein relativ hohes Drehmoment. Dies wird durch ein Getriebe erreicht, das innerhalb des Metallgehäuses vor dem eigentlichen Schrittmotor verbaut ist. Dadurch ist es möglich, eine ganze Umdrehung der Antriebswelle auf 2048 Einzelschritte aufzuteilen. Ein kleiner Nachteil ist die langsame maximale Drehgeschwindigkeit.

Der Schrittmotor wird an eine Motorsteuerungsplatine angeschlossen, die ihn mit ausreichend elektrischer Energie versorgt, sodass die Leistung nicht von den digitalen Pins des Arduino-Boards bereitgestellt werden muss. Die Steuerungsplatine ist in zwei Versionen erhältlich, bei denen die seitlich angebrachten Pins entweder nach oben oder nach unten aus der Platine herausragen. Die Anschlussbelegung ist jedoch identisch.

Verkabelung am Arduino:

- IN1 der Motorsteuerplatine wird an Pin 6 angeschlossen.

- IN2 der Motorsteuerplatine wird an Pin 5 angeschlossen.

- IN3 der Motorsteuerplatine wird an Pin 4 angeschlossen.

- IN4 der Motorsteuerplatine wird an Pin 3 angeschlossen.

- GND der Motorsteuerplatine wird an einem GND Pin am Arduino-Board angeschlossen.

- VCC der Motorsteuerplatine wird an den 5V Pin am Arduino-Board angeschlossen.

Wenn die Motorsteuerplatine nach unten ausgerichtete Pins hat, kann sie auch direkt auf das Mikrocontrollerboard gesteckt werden.

 

2.Der Schaltplan



 

 

3.Der Programmcode

Hier ist ein Beispielcode, der den Motor abwechselnd um 2048 Schritte (eine ganze Umdrehung) vor- und zurückdreht.


#include  // Programm-Bibliothek einbinden

int SPU = 2048; // Schritte pro Umdrehung
Stepper Motor(SPU, 3, 5, 4, 6); // Definition des Schrittmotors und der Pins

void setup() {
  Motor.setSpeed(5); // Geschwindigkeit in Umdrehungen pro Minute festlegen
}

void loop() {
  Motor.step(2048); // Motor um 2048 Schritte vorwärts drehen (eine Umdrehung)
  delay(1000); // Eine Sekunde Pause
  Motor.step(-2048); // Motor um 2048 Schritte rückwärts drehen
  delay(1000); // Eine Sekunde Pause
}

 

3.1.Erklärungen zum Programmcode

Drehung ohne große Schrittmengen:

Die Verwendung von Befehlen mit einer großen Schrittmenge (z.B. Motor.step(x);) kann in umfangreicheren Sketches störend sein, da während der Ausführung keine weiteren Signale vom Mikrocontroller empfangen oder gesendet werden können. Dies ähnelt dem Problem bei langen Delays. Daher ist es ratsam, die Drehbewegung des Schrittmotors in einer Schleife auszuführen.

Hier ist ein kleines Beispiel:

Angenommen, der Motor soll sich drehen, bis ein Taster gedrückt wird. Dies könnte beispielsweise die Anhaltefunktion in einer Maschine sein. In solchen Fällen ist es wichtig, dass der Motor sofort stoppt, wenn der Taster gedrückt wird, und nicht erst seine Drehbewegung beendet. Wenn eine große Schrittmenge verwendet wird, kann der Motor erst anhalten, wenn er seine aktuelle Drehbewegung abgeschlossen hat und der Mikrocontroller bereit ist, weitere Befehle auszuführen.

 

3.2.Erweiterter Programmcode


#include 

int SPU = 2048;
Stepper Motor(SPU, 3, 5, 4, 6);
int Taster = 7; // Taster an Pin 7
int Tasterstatus = 0; // Variable für den Tasterstatus

void setup() {
  Motor.setSpeed(4);
  pinMode(Taster, INPUT);
}

void loop() {
  Tasterstatus = digitalRead(Taster); // Tasterstatus abfragen
  while (Tasterstatus == HIGH) { // Solange der Taster gedrückt ist
    delay(1); // Verweile kurz
    Tasterstatus = digitalRead(Taster); // Tasterstatus aktualisieren
  }
  // Wenn der Taster losgelassen wurde, fährt der Motor einen Schritt weiter
  Motor.step(1);
}

In diesem Sketch wird der Schrittmotor um einen einzigen Schritt vorwärts gedreht, wenn der Taster nicht gedrückt wird. Der Sketch bleibt in einer Schleife, solange der Taster gedrückt ist, und wartet auf das Loslassen des Tasters, bevor er den Motor weiterdreht.