Tutorial · Einsteiger · 30 Min.
A4988-Verdrahtung und Vref: Stromgrenze einstellen
A4988 mit Arduino und NEMA 17 verdrahten und die Stromgrenze mit dem Multimeter einstellen. Vref-Formel, Sense-Widerstand-Falle und der Preis des Weglassens.
Wozu der Treiber wirklich da ist
Ein A4988 ist kein Schalter. Er ist ein Stromregler, der zufällig schaltet.
Diese Unterscheidung zählt, weil eine Schrittmotorwicklung eine niederohmige Induktivität ist – 2 bis 4 Ohm sind typisch. Schließe eine 2,8-Ω-Wicklung direkt an 24 V an, sagt das Ohmsche Gesetz 8,6 A, was den Motor in Sekunden zerstören würde. Die Aufgabe des Treibers ist, die Versorgung tausendfach pro Sekunde zu zerhacken, sodass sich der mittlere Strom auf einen von dir gewählten Wert einpendelt, und diesen Strom dann zwischen den zwei Spulen in dem Muster umzuschalten, das das Feld rotieren lässt.
Der Treiber braucht also eine Zahl: wie viel Strom pro Phase. Das ist die Stromgrenze, und sie einzustellen ist die einzige Justierung auf der Platine. Alles andere – Mikroschritte, Richtung, Enable – ist ein Pin, den du einmal setzt.
Verdrahtung
| A4988-Pin | Geht an | Hinweis |
|---|---|---|
| VMOT | 8–35-V-Motorversorgung | Nicht die 5 V des Arduino. Niemals. |
| GND (neben VMOT) | Masse der Motorversorgung | Die Hochstrom-Rückleitung |
| VDD | Arduino 5 V | Logikversorgung, wenige Milliampere |
| GND (neben VDD) | Arduino GND | Muss Masse mit der Motorversorgung teilen |
| 1A, 1B | Eine Motorspule | Polung egal – sie dreht nur die Richtung um |
| 2A, 2B | Die andere Motorspule | Falsche Paarung ist der fatale Fehler |
| STEP | Beliebiger Arduino-Ausgang | Ein Puls, ein Mikroschritt |
| DIR | Beliebiger Arduino-Ausgang | High oder Low wählt die Richtung |
| ENABLE | GND oder Arduino-Pin | Active-Low: auf Low legen zum Bestromen |
| RESET, SLEEP | Miteinander verbunden | Beide müssen High sein; sie zu brücken erledigt das |
| MS1, MS2, MS3 | Siehe Tabelle unten | Offen bedeutet Vollschritt |
Zwei Verdrahtungsregeln tragen fast das ganze Risiko:
- Ein 100-µF-Elko über VMOT und GND, nah an der Platine. Nicht optional. Datenblatt und jede Trägerdokumentation sagen es, und der Grund ist, dass der Zerhacker Strom in scharfen Bursts zieht; ohne großzügige Kapazität in der Nähe verwandelt die Induktivität der Zuleitungen diese Bursts in Spannungsspitzen über den 35-V-Nennwert des Chips. Platinen sterben beim Einschalten, nicht im Betrieb, und meist darum.
- Niemals den Motor abziehen, solange der Treiber versorgt ist. Das Unterbrechen einer bestromten Spule erzeugt einen großen induktiven Kick ohne Ziel. Jedes Mal erst spannungslos schalten.
Sind die vier Motordrähte nicht beschriftet, finde die Paare mit dem Multimeter: Innerhalb einer Spule misst du wenige Ohm, zwischen Spulen misst du offene Leitung. Paare sie per Durchgang, dann ein Paar an 1A/1B und das andere an 2A/2B.
Die Stromgrenze einstellen
Auf der Platine sitzt ein Poti, und Drehen daran ändert eine Referenzspannung, die der Chip mit der Spannung über seinen Sense-Widerständen vergleicht. Du misst diese Referenz – Vref – zwischen Potischleifer und Masse.
Die Formel beim A4988 lautet:
Vref = I_phase × R_sense × 8
Hier sitzt die Falle, die Leute Motoren kostet. R_sense ist nicht auf jeder Platine gleich. Trägerplatinen kommen entweder mit 0,1-Ω- oder 0,05-Ω-Sense-Widerständen, und das Formelergebnis unterscheidet sich um Faktor zwei:
| Sense-Widerstand | Aufdruck auf der Platine | Vref für 1,0 A | Vref für 1,2 A | Vref für 1,5 A |
|---|---|---|---|---|
| 0,1 Ω | R100 |
0,80 V | 0,96 V | 1,20 V |
| 0,05 Ω | R050 |
0,40 V | 0,48 V | 0,60 V |
| 0,068 Ω | R068 |
0,54 V | 0,65 V | 0,82 V |
Lies die Markierung auf den zwei schwarzen SMD-Widerständen unten auf der Platine, bevor du irgendetwas rechnest. Stelle 1,2 V auf einer Platine mit 0,05-Ω-Widerständen ein, und du hast gerade 3 A durch einen 1,7-A-Motor verlangt.
Die Vorgehensweise:
- Versorge die Platine – VMOT angeschlossen, Motor abgeklemmt. Der Chip braucht Motorspannung zum Regeln, aber der Motor muss sich nicht drehen.
- Schlage den Phasennennstrom des Motors nach. Ein gängiger NEMA 17 hat 1,5 A oder 1,7 A.
- Nimm 70–85 % davon als Ziel. Der Nennstrom setzt Datenblatt-Kühlung voraus, die du nicht hast, und die letzten 20 % Strom kaufen sehr wenig Drehmoment bei viel Wärme.
- Berechne Vref aus der Formel und dem Sense-Widerstand, den du wirklich hast.
- Lege die schwarze Messspitze auf einen Massepin und die rote Spitze auf die Metallschraube des Potis. Drehe langsam – eine Vierteldrehung ist eine große Änderung –, bis das Messgerät deine Zahl zeigt.
Ein kleiner Keramikschraubendreher lohnt sich. Ein metallener, der das Poti mit etwas anderem brückt, solange die Platine lebt, ist ein gängiger Weg, einen Treiber zu zerstören.
Klar ausgesprochen: Die Stromgrenze ist das T_peak in der Drehmomentgleichung, die alles am Schrittmotor regiert. Stelle sie niedrig ein, hinkt der Motor bei gleicher Last weiter hinterher und verliert früher Schritte. Stelle sie hoch ein, läuft der Motor heiß für Drehmoment, das er vielleicht nicht braucht. Es ist die eine Zahl, bei der du bewusst vorgehen solltest.
Mikroschritt-Pins
MS1, MS2 und MS3 haben interne Pull-downs, alles Offenbleibende liest sich also als Low:
| MS1 | MS2 | MS3 | Auflösung | Schritte pro Umdrehung |
|---|---|---|---|---|
| Low | Low | Low | Vollschritt | 200 |
| High | Low | Low | Halbschritt | 400 |
| Low | High | Low | Viertelschritt | 800 |
| High | High | Low | Achtelschritt | 1600 |
| High | High | High | Sechzehntelschritt | 3200 |
Die meisten Aufbauten brücken alle drei auf High und lassen sie dort. Der Grund ist nicht Genauigkeit – Mikroschritte kaufen unter Last keine Genauigkeit –, sondern dass Sechzehntelschritte das Nachschwingen des Motors bei jedem Schritt stoppen, was die Maschine leise macht und verhindert, dass sich die Welligkeit im Werkstück zeigt. Der Preis: Dein Mikrocontroller muss nun sechzehnmal so viele Pulse pro Millimeter liefern, was auf einem Arduino Uno oberhalb von rund 10 000 Schritten pro Sekunde eine echte Grenze ist.
Ansteuerung
Der minimale nützliche Sketch. Beachte, dass hier keine Bibliothek steckt: Ein Schritt ist ein Puls, und das ist wirklich alles.
const int STEP_PIN = 3;
const int DIR_PIN = 4;
const int EN_PIN = 5; // active LOW
void setup() {
pinMode(STEP_PIN, OUTPUT);
pinMode(DIR_PIN, OUTPUT);
pinMode(EN_PIN, OUTPUT);
digitalWrite(EN_PIN, LOW); // energise the coils
digitalWrite(DIR_PIN, HIGH);
}
void loop() {
// One revolution at 1/16 stepping = 3200 pulses.
for (int i = 0; i < 3200; i++) {
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(2); // datasheet minimum is 1 us
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(300); // this delay IS the speed
}
delay(1000);
}
Dieser Code funktioniert, und er ist zugleich genau das, was du nicht ausliefern solltest – aus zwei Gründen.
Der erste: Die Schrittrate springt sofort von null auf voll. Fordere eine Rate über der Anfahrgrenze des Motors, brummt er nur und geht nirgendwohin – mit den Defaults im Schrittmotor-Simulator verliert das Kommando voller Drehzahl aus dem Stand 280 Vollschritte auf einer 60-mm-Fahrt und lässt die Achse bei 4 mm stehen. Dieselbe Fahrt mit Rampe landet exakt auf Ziel. Das ist der Unterschied, den ein Beschleunigungsprofil macht, und es ist keine Verfeinerung.
Der zweite: delayMicroseconds blockiert. Während die Schleife schrittet, läuft nichts anderes auf dem Mikrocontroller – keine Endschalterprüfung, kein Serielles, keine zweite Achse. Für alles Echte nutze das nicht blockierende Zeitmuster oder übergib an AccelStepper, das Rampe und Zeitplanung für dich übernimmt:
#include <AccelStepper.h>
AccelStepper axis(AccelStepper::DRIVER, STEP_PIN, DIR_PIN);
void setup() {
pinMode(EN_PIN, OUTPUT);
digitalWrite(EN_PIN, LOW);
axis.setMaxSpeed(8000); // steps/s -> 100 mm/s at 80 steps/mm
axis.setAcceleration(16000); // steps/s2 -> 200 mm/s2
axis.moveTo(80 * 50); // 50 mm
}
void loop() {
axis.run(); // returns immediately; call it constantly
}
setMaxSpeed und setAcceleration geben dir ein Trapezprofil und sonst nichts – es gibt keine S-Kurven-Option. Willst du ein ruckbegrenztes Profil, erzeugst du den Sollwert selbst.
A4988 oder eine der Alternativen?
| Treiber | Strom | Mikroschritte | Geräusch | Nimm ihn, wenn |
|---|---|---|---|---|
| A4988 | 1 A nackt, ca. 1,5 A gekühlt | bis 1/16 | Hörbar | Billig, überall, gut dokumentiert |
| DRV8825 | 1,5 A nackt, ca. 2,2 A gekühlt | bis 1/32 | Hörbar | Du mehr Strom oder feinere Schritte brauchst |
| TMC2208 | ca. 1,2 A | bis 1/256 | Fast lautlos | Geräusch zählt; darum sind Drucker umgestiegen |
| TMC2209 | ca. 1,7 A | bis 1/256 | Fast lautlos | Wie oben, plus sensorloses Referenzieren |
| ULN2003 + 28BYJ-48 | ca. 0,3 A | Halbschritt | Brummig | Eine Spielzeug-Demo, keine Maschine |
Der DRV8825 ist pinkompatibel, aber seine Vref-Formel ist anders – Vref = I × 0,5 – und sein Poti dreht andersherum. Einen einzusetzen, ohne die Formel neu zu lesen, ist ein klassischer Weg, einen Motor zu garen.
Die TMC-Treiber sind das Geld wert, sobald eine Maschine dort lebt, wo man sie hören kann. Sie leisten dieselbe Arbeit mit glatterer Stromkurve, weshalb ein Drucker mit ihnen Lüftergeräusche statt Motorgeräusche macht.
Wenn es schiefgeht
| Symptom | Ursache | Lösung |
|---|---|---|
| Motor vibriert, dreht aber nicht | Spulenpaare falsch verdrahtet | Paare per Durchgang finden und neu verdrahten |
| Gar nichts passiert | ENABLE offen oder High, oder RESET/SLEEP Low | ENABLE auf Low legen; RESET mit SLEEP brücken |
| Treiber wird zu heiß zum Anfassen, schaltet dann ab | Stromgrenze zu hoch | Vref neu messen; Kühlkörper und Luftstrom ergänzen |
| Motor ist heiß, Treiber aber in Ordnung | Normal | 60–80 °C am Gehäuse sind zu erwarten |
| Schrittverlust nur bei schnellen Fahrten | Versorgungsspannung zu niedrig für diese Drehzahl | VMOT erhöhen – mehr Strom hilft nicht |
| Schrittverlust bei harten Beschleunigungen | Rampe zu aggressiv oder Strom zu niedrig | Beschleunigung senken oder Vref Richtung Nennwert heben |
| Platine starb beim Einschalten | Fehlender Stützkondensator an VMOT | 100-µF-Elko, nah an den Pins |
| Motor hält Position, läuft aber rau | Vollschrittbetrieb | MS1–MS3 auf High brücken für 1/16 |
| Widerstand liest offen über einem „Paar“ | Diese zwei Drähte stammen aus verschiedenen Spulen | Neu paaren |
Weiter
Mit eingestelltem Treiber bleibt die Frage, wie viele Pulse ein Millimeter Weg wert ist – was ganz davon abhängt, was die Welle dreht. Das sind Schritte pro Millimeter, und es ist die Zahl, gegen die jeder andere Teil der Maschine kalibriert wird.
Den Graphen erkunden
Teil dieser Bauprojekte
Projekte und Lernpfade, die dieses Tutorial enthalten.
Weiterführende Literatur