Nr.16 Schrittmotor

Inhaltsverzeichnis

Schrittmotor 28BYJ-48 mit ULN2003 Treiberplatine am Arduino

Bei diesem Schrittmotor handelt es sich um einen Schrittmotor, der sich speziell für kleine Anwendungen mit dem Arduino-Board eignet. Die Besonderheit liegt darin, dass er ohne eine externe Spannungsversorgung betrieben werden kann. Der Motor entwickelt dabei ein relativ hohes Drehmoment. Dies wird durch ein Getriebe realisiert, welches innerhalb des Metallgehäuses vor dem eigentlichen Schrittmotor verbaut wurde. Dadurch wird es in dieser kompakten Bauweise überhaupt erst möglich, dass sich eine ganze Umdrehung der Antriebswelle auf 2048 Einzelschritte aufteilen lässt. Ein kleiner daraus resultierender Nachteil ist die langsame maximale Drehgeschwindigkeit.

Der Schrittmotor wird an eine Motorsteuerungsplatine angeschlossen. Diese versorgt den Motor mit ausreichend elektrischer Energie, damit die Leistung nicht von den digitalen Pins des Arduino-Boards aufgebracht werden muss. Die Steuerungsplatine gibt es in zwei Versionen, bei denen die seitlich angebrachten Pins entweder nach oben oder nach unten aus der Platine herausragen. Die Anschlussbelegung ist jedoch gleich.

Schrittmotor 28BYJ mit ULN2003 Treiberplatine

Verkabelung am Arduino

IN1 der Motorsteuerplatine wird an Pin6 angeschlossen

IN2 der Motorsteuerplatine wird an Pin5 angeschlossen

IN3 der Motorsteuerplatine wird an Pin4 angeschlossen

IN4 der Motorsteuerplatine wird an Pin3 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

Schrittmotor 28BYJ mit ULN2003 Treiberplatine Pinout
Pinout der ULN2003 Treiberplatine

Bei Motorsteuerplatinen mit nach unten ausgerichteten Pins kann die Steuerplatine auch direkt auf das Mikrocontrollerboard aufgesteckt werden.

Der Programmcode

Dies ist ein Beispielcode, der den Motor abwechselnd um 2048 Schritte (entspricht einer ganzen Umdrehung) vor- und zurückdrehen lässt.

#include <Stepper.h> // Hinzufügen der Programmbibliothek.
int SPU = 2048; // Schritte pro Umdrehung.
Stepper Motor(SPU, 3,5,4,6); // Der Schrittmotor erhält die Bezeichnung "Motor" und es wird angegeben an welchen Pins der Motor angeschlossen ist.

void setup() //Hier beginnt das Setup.
{
Motor.setSpeed(5); // Angabe der Geschwindigkeit in Umdrehungen pro Minute.
}

void loop() {
Motor.step(2048); // Der Motor macht 2048 Schritte, das entspricht einer Umdrehung.
delay(1000); // Durch diese Pause bleibt der Motor nach der Drehung für eine Sekunde stehen.
Motor.step(-2048); // Der Motor macht durch das Minuszeichen 2048 Schritte in die andere Richtung.
delay(1000); // Durch diese Pause bleibt der Motor nach der Drehung für eine Sekunde stehen.
}

Erklärungen zum Programmcode

Drehung ohne große Schrittmengen

Die Verwendung von Befehlen mit einer großen Schrittmenge „x“ (Motor.step(x);) ist in umfangreicheren Sketchen häufig störend, da während der Ausführung keine weiteren Signale vom Mikrocontroller empfangen oder gesendet werden können. Das ist ein ähnliches Problem wie bei langen Delays. Daher bietet es sich beim Schrittmotor gut an, die Drehbewegung in einer Schleife auszuführen.

Hier ein kleines Beispiel:

In diesem Fall soll sich der Motor drehen, bis ein Taster gedrückt wird. Es könnte die Anhaltefunktion in einer Maschine sein. Natürlich soll bei einer solchen Funktion der Motor sofort stoppen und nicht erst seine Drehbewegung beenden. Mit einer großen Schrittmenge könnte man die Drehbewegung nicht an einem beliebigen Punkt stoppen, sondern erst, wenn der Motor seine Drehbewegung beendet hat und der Mikrocontroller bereit für die nächsten Befehle ist.

Erweiterter Programmcode

#include <Stepper.h>
int SPU = 2048;
Stepper Motor(SPU, 3,5,4,6);
int Taster=7; // Taster an Pin7 
int Tasterstatus=0; // Variable für den Status des Tasters
void setup()
{
Motor.setSpeed(4);
pinMode(Taster, INPUT);
}
void loop() 
{
Tasterstatus=digitalRead(Taster); //Zunächst wird der Taster abgefragt.
while(Tasterstatus == HIGH) //Solange der Wert des Tasters HIGH, also gedrückt ist,...
 {
 delay(1);//...springt der Sketch in diese Klammer und verbleibt hier.
 Tasterstatus=digitalRead(Taster); //Innerhalb der Schleife muss der Taster immer wieder abgefragt werden, damit eine Änderung des Status vom Mikrocontroller erkannt und verarbeitet werden kann. Nur dadurch kann die Schleife beim loslassen des Tasters wieder verlassen werden.
 } //Wenn der Taster nicht mehr gedrückt ist, springt der Sketch in den regulären Loop zurück und führt dort weitere Befehle aus.
Motor.step(1); //...Drehe den Motor um einen einzigen Schritt.
} //Jetzt beginnt der Sketch von vorn. Solange der Taster nicht gedrückt ist, wird die "While" Funktion nicht ausgeführt und der Motor dreht sich Schritt für Schritt weiter.

Funduino - Dein Onlineshop für Mikroelektronik

  • Dauerhaft 10% Rabatt für Schüler, Studenten und Lehrkräfte
  • Mehr als 3.500 Artikel sofort verfügbar!
  • Über 8 Jahre Erfahrung mit Arduino, 3D-Druck und co.
SALE