Schrittmotorshield für den Arduino selber bauen
Schrittmotoren werden häufig für gezielte Bewegungen eingesetzt. Beispiel, wo Schrittmotoren verbaut werden, sind: 3 D Drucker, CNC-Fräsen und vieles mehr.
Zur genauen Funktionsweise von Schrittmotoren möchte ich hier gar nicht weiter eingehen. Das haben schon sehr viele sehr gut beschrieben. Ich verlinke euch dieses Video, dort wird der Schrittmotor sehr gut erklärt.
In meinem Beitrag möchte ich euch zeigen, wie wir uns ein Shield für den Arduino bauen können und sofort mit dem Programmieren starten können.
Wozu selbst löten und nicht kaufen?
Nun man kann so gut wie alles kaufen. Aber ich finde es ist eine gute Gelegenheit, um zum Beispiel Löten zu lernen, bzw. um seine Platine so anzufertigen, wie man sie benötigt.
Ich rate euch ab, alles auf einer Steckplatine zu testen. Gerade durch Bewegungen des Motors lösen sich Kabel und man verzweifelt, weil etwas nicht so funktioniert, wie man es sich erhofft hat. Außerdem hat man das Shield einmal gebaut, kann man es jederzeit zum Testen wieder verwenden oder gleich fest in seinem Projekt verbauen.
Was wird benötigt?
- Schrittmotor Nema 17
- Elko 100 µF
- DRV8825 Schrittmotortreiber
- Pin Header männlich und weiblich
- DC-Buchse
- Schraubklemmen
Ich empfehle euch die Ansteuerung mit diesem oder einem ähnlichen Treiber vorzunehmen. Dann könnt ihr auch Halb- und Mikroschritte verwenden.
Der Verdrahtungsplan
Wie ihr sehen könnt, muss man nur das Shield aufstecken und die Stecker anschließen. Der Aufbau dauert nicht mal eine Minute.
Zum Löten empfehle ich die männlichen Pin Header auf die entsprechende Länge zu kürzen und in die entsprechenden weiblichen Pin Header des Arduinos zu stecken. Dann kann man verlöten. So muss man später nicht mehr nachkorrigieren und das Shield passt perfekt. Das Gleiche dann für den Motortreiber.
Der Programmcode
Zur Erklärung:
Wir legen zu Beginn die Pins fest:
dir steht für direction, also für die Richtung, in die sich der Motor dreht. Die Richtung kann man ändern, indem man den PIN auf HIGH bzw. auf LOW setzt.
step steht für den Schritt.
m0, m1, m2 damit stellen wir die Schrittgröße ein. Ich habe mich für Halbschritte entschieden, daher setze ich nur m0 auf HIGH.
Wie ihr die Schritte einteilen könnt, steht auf dieser Seite.
Mit enable können wir den Motor ein- bzw. abschalten. Ein HIGH bedeutet in diesem Fall, dass der Motor abgeschaltet wird.
sleep setzen wir sleep auf LOW, würden wir den Treiber schlafen legen. Das ist interessant, wenn wir Strom sparen möchten. Für Übungszwecke erst einmal nicht so wichtig.
Der von mir verlinkte Schrittmotor benötigt 200 Schritte für eine volle Umdrehung (ein Schritt 1,8 Grad * 200 Schritte 360 Grad). Im Datenblatt steht die Größe von einem Schritt drin.
Ändern wir die Schrittgröße z. B. auf Halbschritte, müssen wir beachten, dass nun eine volle Umdrehung nicht mehr 200 Schritte sind, sondern 400 Schritte.
digitalWrite(dirPin, HIGH);
digitalWrite(stepPin, HIGH);
delayMicroseconds(150);
digitalWrite(dirPin, HIGH);
digitalWrite(stepPin, LOW);
delayMicroseconds(150);
Mit diesem Sketch bewegen wir den Schrittmotor. Und zwar wäre das jetzt genau ein Schritt. Wir haben die Motorwelle (auf Halbschritt eingestellt) um 0,9 Grad in eine Richtung gedreht. Man könnte jetzt ein delay von ca. einer Sekunde machen und den Sketch kopieren. Diesmal setzen wir den dirPin auf LOW und der Motor würde einen Schritt in die andere Richtung machen. Dann wären wir wieder beim Anfang.
Was können wir jetzt noch ergänzen bzw. verändern? Nun ja, wir haben den Motor jetzt um 0,9 Grad in eine Richtung und danach um 0,9 Grad in die andere Richtung gedreht. Das ist sehr wenig und vielleicht hat man noch nicht mal gesehen, dass die Welle sich gedreht hat. Mithilfe einer Schleife können wir mehrere Schritte hintereinander machen. Wiederholen wir das Ganze 400 Mal, hätten wir eine volle Umdrehung.
Was können wir noch ändern? Wir können die Drehzahl ändern. Das machen wir mit delayMicroseconds(150). In diesem Fall muss die Zahl größer als 150 sein. Das ist bei meinem Motor die höchste mögliche Geschwindigkeit bei den Halbschritten. Möchte ich die Geschwindigkeit um 50 % reduzieren muss ich also delayMicroseconds(300) schreiben.
Im Großen und Ganzen war es das. Nun kann man ein wenig experimentieren und sich was Eigenes aus Schrittmotoren bauen. Und genau das werde ich machen und ich zeige euch im nächsten Beitrag ein praktisches Beispiel mit einem Linearantrieb.
Wichtig: Holt ihr euch den Motortreiber von meiner Liste, dann stellt unbedingt die Strombegrenzung ein. Ansonsten kann der Treiber oder der Motor zu heiß werden. Wie das geht, findet ihr hier.
Video fürs nächste Projekt