
Dieses Kapitel handelt von dem unipolaren Schrittmotor. Der Schrittmotor kann, wie der Name schon sagt, in Schritten rotieren. Die Schrittweite liegt meistens zwischen 1,8° und 3,6°. In diesen Versuch nehmen wir den Schrittmotor von Typ 28BYJ-48. Man kann den Schrittmotor mit einer fertigen Platine erwerben. Auf der Platine befindet sich der Motortreiber ULN2003APG. Dadurch kann man den Schrittmotor mit einer externen Spannungsversorgung betreiben und mit deinen Arduino ansteuern.
Was benötigst du?
- 1 x Arduino Uno
- 1 x USB Kabel
- 1 x Steckbrett
- 1 x Schrittmotor mit zusätzlicher Platine (28BYJ-48 und ULN2003APG)
- Jump Wire (Männlich)
Wie sieht der Schaltplan aus?
Auf den Bild hier unten findet ihr die Schaltung ohne die Platine. Bei der Pinbelegung für den Schrittmotor könnt ihr euch nach den Farben orientieren.

Auf den Bild hier unten sieht ihr die Schaltung mit der fertigen Platine.

Der Code
byte stepperPins[] = {2,3,4,5}; // Variablen- Array
// für die
// benötigten Pins
// Festlegen der
// Spannungspegel
byte stepWerte[8][4] = {{HIGH,LOW,LOW,LOW}, // Schritt 1
{HIGH,HIGH,LOW,LOW}, // Schritt 2
{LOW,HIGH,LOW,LOW}, // Schritt 3
{LOW,HIGH,HIGH,LOW}, // Schritt 4
{LOW,LOW,HIGH,LOW}, // Schritt 5
{LOW,LOW,HIGH,HIGH}, // Schritt 6
{LOW,LOW,LOW,HIGH}, // Schritt 7
{HIGH,LOW,LOW,HIGH}}; // Schritt 8
int stepZaehler = 0; // Unser stepZaehler für
// Schritt 1 bis 8
void setup() {
for(int i= 0; i<4; i++) //
pinMode(stepperPins[i], OUTPUT); // die Pins 2 bis 5 vom
// Arduino als Ausgang
} // definieren
void loop() {
if(stepZaehler==7) // Wenn stepZaehler
// gleich 7
{ //
stepZaehler=0; // stepZaehler wieder
// auf 0 setzen
//
} //
for (int i=0; i<4; i++) { // Hier wird...
// nur ...
digitalWrite(stepperPins[i], stepWerte[stepZaehler][i]); // Schritt 1...
// ausgeführt...
} //
stepZaehler++; // stepZaehler um 1 erhöhen
// damit beim nächsten mal
// Schritt 2 ausgeführt wird
delay(5); // 5 millisekunden
// warten (Schrittrate)
}
Code- Review
Wie funktioniert jetzt eigentlich der Schrittmotor?
Den Schrittmotor kann man sich vereinfacht so vorstellen:

Der Rotor (Der Kreis mit dem M in der Mitte) besitzt Permamentmagnete, der auf magnetische Felder von außen reagieren kann. Die magnetischen Felder, mit denen der Rotor beeinflusst werden kann, werden von den Spulen erzeugt, welche du mit deinen Arduino ansteuerst. Diese Spulen magnetisieren das Eisen worum die Spulen gewickelt werden. Das besondere bei Unipolarschrittmotoren ist, dass man mit einer Spannung arbeiten kann, die man nicht verändern muss. Das schafft man indem man zwischen zwei Spulen einen Mittelabgriff hat. Der Mittelabgriff ist an diesen Schrittmotor am roten Kabel, hier Rot (5V) benannt. Nun müssen die Spulen so betrieben werden, sodass die erzeugten magnetischen Felder der Spulen den Rotor in einen bestimmten Winkel lenken. Die Stepanweisungen kann man dazu aus dem Datenblatt vom Schrittmotor entnehmen. Laut Datenblatt benötigen wir 8 Schritte für eine richtige Rotation. Die Schritte kann man im Code hier erkennen.
byte stepWerte[8][4] = {{HIGH,LOW,LOW,LOW}, // Schritt 1
{HIGH,HIGH,LOW,LOW}, // Schritt 2
{LOW,HIGH,LOW,LOW}, // Schritt 3
{LOW,HIGH,HIGH,LOW}, // Schritt 4
{LOW,LOW,HIGH,LOW}, // Schritt 5
{LOW,LOW,HIGH,HIGH}, // Schritt 6
{LOW,LOW,LOW,HIGH}, // Schritt 7
{HIGH,LOW,LOW,HIGH}}; // Schritt 8
Die Aufgabe besteht nun dass diese Schritte von deinem Arduino nach und nach ausgeführt werden. Wie das geht müsste für dich im Code nun verständlich sein.
Jetzt weißt du wie man einen Schrittmotor ansteuert.
Wenn du hier irgendetwas vermisst, bessere Ansätze hast oder dir etwas nicht klar ist, zögere nicht einen Kommentar zu hinterlassen.
Kommentar schreiben
Helmut (Dienstag, 04 Februar 2020 12:38)
Ich hab wenig Erfahrung mit der Arduino-Programmierung. Aus diesem Grund habe ich den Code so wie er ist abgeschrieben. Beim Erproben fiel mir auf, dass der 8. Schritt nicht ausgeführt wird. Nach dem 7. Schritt wurde gleich wieder der erste Schritt ausgeführt. Erst nachdem ich die Zeile: "if(stepZaehler==7)" auf "if(stepZaehler==8)" geändert hatte, wurden alle Schritte ausgeführt.