Dieser Artikel enthält alles, was Sie über die Steuerung eines Schrittmotors mit dem A4988 Schrittmotortreiber und Arduino wissen müssen. Ich habe ein Schaltbild, ein Tutorial zum Einstellen der Strombegrenzung und viele Beispielcodes beigefügt.
Obwohl Sie diesen Treiber ohne Arduino-Bibliothek verwenden können, empfehle ich Ihnen dringend, sich auch den Beispielcode für die AccelStepper-Bibliothek am Ende dieses Tutorials anzusehen. Diese Bibliothek ist recht einfach zu verwenden und kann die Leistung Ihrer Hardware erheblich verbessern.
Nach jedem Beispiel erkläre ich, wie der Code funktioniert, sodass Sie ihn problemlos an Ihre Bedürfnisse anpassen können.
Benötigte Teile
Hardware-Komponenten
| A4988 stepper motor driver | × 1 | Amazon | |
| NEMA 17 stepper motor | × 1 | Amazon | |
| Arduino Uno Rev3 | × 1 | Amazon | |
| Power supply (8-35 V) | × 1 | Amazon | |
| Breadboard | × 1 | Amazon | |
| Capacitor (100 µF) | × 1 | Amazon | |
| Jumper wires | ~ 10 | Amazon | |
| USB cable type A/B | × 1 | Amazon |
Ich verwende diesen Treiber gerne in Kombination mit einem CNC-shield oder Expansion board. Ein solches Shield enthält bereits Kondensatoren und bietet eine einfache Möglichkeit, die Mikroschrittauflösung auszuwählen. Es erleichtert die Verkabelung erheblich und ist eine großartige Option, wenn Sie eine dauerhaftere Lösung als ein Steckbrett benötigen.
Werkzeuge
Software
Makerguides is a participant in affiliate advertising programs designed to provide a means for sites to earn advertising fees by linking to Amazon, AliExpress, Elecrow, and other sites. As an Affiliate we may earn from qualifying purchases.
Über den Treiber
Im Herzen des A4988-Treibers finden Sie einen Chip von Allegro MicroSystems: den A4988 DMOS Microstepping Driver mit Translator und Überstromschutz. Dieser integrierte Motortreiber macht die Schnittstelle zu einem Mikrocontroller sehr einfach, da Sie nur zwei Pins benötigen, um sowohl die Geschwindigkeit als auch die Drehrichtung des Schrittmotors zu steuern.
Der Treiber hat eine maximale Ausgangskapazität von 35 V und ± 2 A, was ideal für kleine bis mittelgroße Schrittmotoren wie einen NEMA 17 bipolaren Schrittmotor ist.
Wenn Sie größere Schrittmotoren wie NEMA 23 steuern möchten, schauen Sie sich den TB6600 Schrittmotortreiber an. Dieser Treiber kann mit dem gleichen Code wie der A4988 verwendet werden und hat eine Stromstärke von 3,5 A.
Der A4988-Treiberchip verfügt über mehrere integrierte Sicherheitsfunktionen wie Überstrom-, Kurzschluss-, Unterspannungssperre und Übertemperaturschutz. Weitere Spezifikationen finden Sie in der folgenden Tabelle.
A4988 Spezifikationen
| Minimale Betriebsspannung | 8 V |
| Maximale Betriebsspannung | 35 V |
| Dauerstrom pro Phase | 1 A |
| Maximaler Strom pro Phase | 2 A |
| Minimale Logikspannung | 3 V |
| Maximale Logikspannung | 5,5 V |
| Mikroschrittauflösung | voll, 1/2, 1/4, 1/8 und 1/16 |
| Verpolungsschutz? | Nein |
| Abmessungen | 15,5 × 20,5 mm (0,6″ × 0,8″) |
| Kosten | Check price |
Weitere Informationen finden Sie im Datenblatt hier.
Unterschiede zwischen A4988 und DRV8825
Der DRV8825 ist dem A4988 sehr ähnlich, aber es gibt einige wichtige Unterschiede:
- Der DRV8825 bietet 1/32 Mikroschritte, während der A4988 nur bis 1/16-Schritt geht. Höhere Mikroschrittauflösungen führen zu einem ruhigeren und leiseren Betrieb, sind aber nicht immer erforderlich.
- Das Potentiometer zur Strombegrenzung befindet sich an einer anderen Stelle
- Die Beziehung zwischen Referenzspannung und Strombegrenzung ist unterschiedlich.
- Der DRV8825 benötigt eine minimale STEP-Pulsdauer von 1,9 µs; der A4988 benötigt mindestens 1 µs.
- Der DRV8825 kann mit einer höheren Motorspannung betrieben werden (45 V vs. 35 V). Das macht ihn weniger anfällig für Schäden durch LC-Spannungsspitzen.
- Der DRV8825 kann etwas mehr Strom liefern als der A4988, ohne zusätzliche Kühlung.
Beachten Sie, dass das Pinout des DRV8825 genau dem des A4988 entspricht, sodass er als direkter Ersatz verwendet werden kann!

Mikroschritteinstellungen
Schrittmotoren haben typischerweise eine Schrittgröße von 1,8° oder 200 Schritte pro Umdrehung, dies bezieht sich auf Vollschritte. Ein Mikroschritt-Treiber wie der A4988 ermöglicht höhere Auflösungen durch Zwischenpositionen. Dies wird erreicht, indem die Spulen mit Zwischenstromstärken angesteuert werden.
Beispielsweise liefert der Betrieb eines Motors im Viertelschrittmodus bei einem 200-Schritte-pro-Umdrehung-Motor 800 Mikroschritte pro Umdrehung, indem vier verschiedene Stromstufen verwendet werden.

Die Auflösungsauswahl-Pins (MS1, MS2 und MS3) ermöglichen die Auswahl einer der fünf Schrittauflösungen gemäß der folgenden Tabelle.
| MS1 | MS2 | MS3 | Mikroschrittauflösung |
|---|---|---|---|
| Low | Low | Low | Vollschritt |
| High | Low | Low | 1/2 Schritt |
| Low | High | Low | 1/4 Schritt |
| High | High | Low | 1/8 Schritt |
| High | High | High | 1/16 Schritt |
Alle drei Eingänge haben interne 100 kΩ Pull-Down-Widerstände, sodass das Nichtanschließen der drei Mikroschrittauswahl-Pins zum Vollschrittmodus führt.
Ich verwende oft ein CNC-shield oder eine Erweiterungsplatine in Kombination mit diesen Treibern. Die Erweiterungsplatine hat 3 DIP-Schalter, um MS1 – MS3 auf High oder Low zu setzen, und auf dem CNC-Shield können Jumper installiert werden. Wenn Sie den Treiber mit einem Steckbrett verwenden, können Sie einfach Jumperkabel verwenden, um die Auswahlpins mit 5 V zu verbinden (also auf HIGH setzen).
Verkabelung – Anschluss des A4988 an Arduino und Schrittmotor

Das obige Schaltbild zeigt, wie der A4899-Treiber an einen Schrittmotor und den Arduino angeschlossen wird. Die Verbindungen sind auch in der folgenden Tabelle aufgeführt:
A4988 Anschlüsse
| A4988 | Anschluss |
|---|---|
| VMOT | 8-35V |
| GND | Motormasse |
| SLP | RESET |
| RST | SLP |
| VDD | 5V |
| GND | Logikmasse |
| STP | Pin 3 |
| DIR | Pin 2 |
| 1A, 1B, 2A, 2B | Schrittmotor |
- Die Motorstromversorgung wird an GND und VMOT (oben rechts) angeschlossen.
- Die beiden Spulen des Schrittmotors sind an 1A, 1B und 2A, 2B angeschlossen (siehe unten).
- Der GND-Pin (unten rechts) ist mit dem Masse-Pin des Mikrocontrollers verbunden und VDD ist mit 5V verbunden.
- Die STP (Step) und DIR (Direction) Pins sind mit den digitalen Pins 3 bzw. 2 verbunden. Sie können auch andere digitale Pins wählen, aber diese habe ich für dieses Tutorial und den Beispielcode verwendet.
- Der SLP-Pin ist ein aktiver Low-Eingang. Das bedeutet, dass das Ziehen dieses Pins auf Low den Treiber in den Schlafmodus versetzt und den Stromverbrauch minimiert. RST ist ebenfalls ein aktiver Low-Eingang. Wenn er auf Low gezogen wird, werden alle STEP-Eingänge ignoriert, bis er wieder auf High gezogen wird. Wenn Sie den Pin nicht verwenden, können Sie ihn mit dem benachbarten SLP/SLEEP-Pin verbinden, um ihn auf High zu bringen und den Treiber zu aktivieren.
- Der EN (Enable) Pin kann unverbunden bleiben, er ist standardmäßig auf Low gezogen. Wenn dieser Pin auf High gesetzt wird, ist der Treiber deaktiviert.
Im Rest dieses Tutorials habe ich MS1, MS2 und MS3 unverbunden gelassen, sodass der Treiber im Vollschrittmodusarbeitet. Das erleichtert die Erklärung des Codes etwas. Normalerweise würde ich 1/8 oder 1/16 Mikroschritte verwenden und die entsprechenden Pins mit 5V verbinden (siehe Tabelle in der Einführung).
Warnung
Die A4988-Trägerplatine verwendet Keramikkondensatoren mit niedrigem ESR, was sie anfällig für zerstörerische LC-Spannungsspitzen macht, besonders bei Verwendung von Stromkabeln, die länger als ein paar Zentimeter sind.
Um den Treiber zu schützen, können Sie einen Elektrolytkondensator zwischen VMOT und GND anschließen. Pololu empfiehlt einen Kondensator von 47 µF oder mehr (ich habe einen 100 µF Kondensator verwendet).
Wie bestimme ich die richtige Verkabelung des Schrittmotors?
Wenn Sie das Datenblatt Ihres Schrittmotors nicht finden können, ist es schwierig herauszufinden, wie Sie Ihren Motor richtig anschließen. Ich verwende folgenden Trick, um 4-adrige bipolare Schrittmotoren zu identifizieren:
Das Einzige, was Sie identifizieren müssen, sind die zwei Drahtpaare , die mit den beiden Spulen des Motors verbunden sind. Die Drähte einer Spule werden an 1A und 1B angeschlossen, die andere an 2A und 2B, die Polarität spielt keine Rolle.
Um die beiden Drähte einer Spule zu finden, gehen Sie wie folgt vor, während der Motor getrennt ist:
- Versuchen Sie, die Welle des Schrittmotors von Hand zu drehen und achten Sie darauf, wie schwer sie sich dreht.
- Nehmen Sie nun ein beliebiges Drahtpaar vom Motor und berühren Sie die blanken Enden miteinander.
- Versuchen Sie erneut, die Welle des Schrittmotors zu drehen.
Wenn Sie starken Widerstand spüren, haben Sie ein Drahtpaar derselben Spule gefunden. Wenn sich die Welle frei drehen lässt, probieren Sie ein anderes Drahtpaar. Verbinden Sie nun die beiden Spulen mit den Pins, die im obigen Schaltplan gezeigt werden.
Wie stelle ich die Strombegrenzung ein?
Bevor Sie mit dem Programmieren Ihres Arduino beginnen und den Treiber verwenden, gibt es eine sehr wichtige Sache, die viele vergessen: die Strombegrenzung einstellen!
Dieser Schritt ist nicht kompliziert, aber absolut notwendig, um Ihren Schrittmotor und den Treiber zu schützen. Wenn Sie keine angemessene Strombegrenzung einstellen, kann Ihr Motor mehr Strom ziehen, als er oder Ihr Treiber verträgt, was wahrscheinlich einen oder beide beschädigt.
Um die Strombegrenzung einzustellen, müssen Sie eine Referenzspannung messen und das Potentiometer auf der Platine entsprechend anpassen. Sie benötigen einen kleinen Schraubendreher, ein Multimeter zum Messen der Referenzspannung und Krokodilklemmen (optional, aber sehr praktisch).

Um die Referenzspannung zu messen, muss der Treiber mit Strom versorgt werden. Der A4988 benötigt nur Strom über VDD (5V) und Sie müssen RST und SLP verbinden, sonst schaltet sich der Treiber nicht ein. Es ist am besten, den Schrittmotor währenddessen zu trennen.
Wenn Sie den Treiber bereits verkabelt haben, können Sie alles außer dem Schrittmotor angeschlossen lassen. Sie können die Stromversorgung über den USB-Port des Arduino bereitstellen.
| A4988 | Anschluss |
|---|---|
| VDD | 5V |
| RST | SLP |
| SLP | RESET |
| GND | Masse |
Formel zur Strombegrenzung
Der nächste Schritt ist, die Strombegrenzung mit folgender Formel zu berechnen:
Strombegrenzung = Vref ÷ (8 × Rcs)
Rcs ist der Strommesswiderstand. Wenn Sie einen A4988-Treiber von Pololu vor Januar 2017 gekauft haben, beträgt Rcs 0,050 Ω. Treiber, die danach verkauft wurden, haben 0,068 Ω Strommesswiderstände.
Das bedeutet, dass für eine Strombegrenzung von 1 A bei einer Platine mit 0,068 Ω Strommesswiderständen der Vref 540 mV betragen sollte.

Um die richtige Strombegrenzung auszuwählen, schauen Sie ins Datenblatt Ihres Schrittmotors. Wenn Sie die Stromstärke Ihres Motors nicht finden, empfehle ich, mit einer Strombegrenzung von 1 A zu beginnen. Sie können sie später erhöhen, wenn Ihr Motor/Treiber Schritte verpasst.
Im Vollschrittmodus ist der Strom durch jede Spule auf etwa 70 % der eingestellten Strombegrenzung begrenzt. Das bedeutet, dass Sie die Strombegrenzung um 40 % höher einstellen müssten, also 1,4 A im Vollschrittmodus. Bei Mikroschritten gilt die obige Formel.
Beachten Sie, dass Sie die Strombegrenzung neu kalibrieren müssen, wenn Sie die Motorspannung ändern. Wenn Ihr Motor viel Lärm macht, versuchen Sie, die Strombegrenzung zu senken. Es ist am besten, die Strombegrenzung gerade so hoch einzustellen, dass der Motor keine Schritte verpasst.
Vref messen
Jetzt müssen Sie die Referenzspannung (Vref) zwischen den zwei im Bild unten markierten Punkten (GND und Potentiometer) messen und auf den berechneten Wert einstellen.

Ich empfehle, Krokodilklemmen am Schraubendreher zu befestigen, um die Strombegrenzung einzustellen. So können Sie das Potentiometer einstellen und gleichzeitig die Referenzspannung messen.
Hinweis: Es gibt eine andere Methode, die Strombegrenzung zu messen, indem man direkt den Stromverbrauch des Schrittmotors misst. Persönlich finde ich die oben beschriebene Methode viel einfacher.
Pololu erwähnt auf ihrer Webseite Folgendes:
Hinweis: Der Spulenstrom kann sich stark vom Strom der Stromversorgung unterscheiden, daher sollten Sie den an der Stromversorgung gemessenen Strom nicht zur Einstellung der Strombegrenzung verwenden. Der geeignete Ort für Ihr Amperemeter ist in Reihe mit einer der Spulen Ihres Schrittmotors.
FAQ zur Strombegrenzung
Muss der Schrittmotor angeschlossen sein oder nicht?
Nein, Sie müssen den Schrittmotor beim Einstellen der Strombegrenzung nicht anschließen. Um auf Nummer sicher zu gehen, trennen Sie Ihren Motor, da er manchmal die Vref-Messung stört.
Muss ich den Motor durch Ausführen des Arduino-Motorsketches drehen?
Nein, siehe Frage oben.
Muss ich das Potentiometer im Uhrzeigersinn oder gegen den Uhrzeigersinn drehen, um Vref zu erhöhen?
Das hängt vom Hersteller des Treibers ab. Wenn Sie eine originale Pololu Breakout-Platine des DRV8825 oder A4988 haben, drehen Sie das Potentiometer im Uhrzeigersinn, um Vref zu erhöhen, und gegen den Uhrzeigersinn, um es zu verringern.
Kühlung des Treibers
Der A4988-Treiber-IC hat eine maximale Stromstärke von 2 A pro Spule, kann aber ohne Kühlkörper nur etwa 1 A pro Spule liefern, bevor er überhitzt.
Der Treiber wird normalerweise mit einem kleinen selbstklebenden Kühlkörper geliefert, den ich empfehle, sofort zu montieren. Sie können auch viele kleine heat sinks bei Amazon sehr günstig kaufen.
Grundlegender Arduino-Beispielcode zur Steuerung eines Schrittmotors
Nachdem Sie den Treiber verkabelt und die Strombegrenzung eingestellt haben, ist es Zeit, den Arduino mit dem Computer zu verbinden und Code hochzuladen. Sie können den folgenden Beispielcode mit dem Arduino IDE hochladen. Für dieses spezielle Beispiel müssen Sie keine Bibliotheken installieren.
Dieser Sketch steuert sowohl die Geschwindigkeit, die Anzahl der Umdrehungen als auch die Drehrichtung des Schrittmotors.
// Example sketch to control a stepper motor with A4988 stepper motor driver
// and Arduino without a library.
// https://www.makerguides.com
// Define stepper motor connections and steps per revolution:
#define dirPin 2
#define stepPin 3
#define stepsPerRevolution 200
void setup() {
// Declare pins as output:
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
}
void loop() {
// Set the spinning direction clockwise:
digitalWrite(dirPin, HIGH);
// Spin the stepper motor 1 revolution slowly:
for (int i = 0; i < stepsPerRevolution; i++) {
// These four lines result in 1 step:
digitalWrite(stepPin, HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin, LOW);
delayMicroseconds(2000);
}
delay(1000);
// Set the spinning direction counterclockwise:
digitalWrite(dirPin, LOW);
// Spin the stepper motor 1 revolution quickly:
for (int i = 0; i < stepsPerRevolution; i++) {
// These four lines result in 1 step:
digitalWrite(stepPin, HIGH);
delayMicroseconds(1000);
digitalWrite(stepPin, LOW);
delayMicroseconds(1000);
}
delay(1000);
// Set the spinning direction clockwise:
digitalWrite(dirPin, HIGH);
// Spin the stepper motor 5 revolutions fast:
for (int i = 0; i < 5 * stepsPerRevolution; i++) {
// These four lines result in 1 step:
digitalWrite(stepPin, HIGH);
delayMicroseconds(500);
digitalWrite(stepPin, LOW);
delayMicroseconds(500);
}
delay(1000);
// Set the spinning direction counterclockwise:
digitalWrite(dirPin, LOW);
//Spin the stepper motor 5 revolutions fast:
for (int i = 0; i < 5 * stepsPerRevolution; i++) {
// These four lines result in 1 step:
digitalWrite(stepPin, HIGH);
delayMicroseconds(500);
digitalWrite(stepPin, LOW);
delayMicroseconds(500);
}
delay(1000);
}
Wie der Code funktioniert:
Der Sketch beginnt mit der Definition der Step- und Direction-Pins. Ich habe sie an Arduino Pin 3 und 2 angeschlossen.
Die Anweisung #define wird verwendet, um einem konstanten Wert einen Namen zu geben. Der Compiler ersetzt alle Verweise auf diese Konstante durch den definierten Wert, wenn das Programm kompiliert wird. Also überall, wo Sie dirPinerwähnen, ersetzt der Compiler es beim Kompilieren durch den Wert 2.
Ich habe auch eine stepsPerRevolution Konstante definiert. Da ich den Treiber auf Vollschrittmodus eingestellt habe, habe ich ihn auf 200 Schritte pro Umdrehung gesetzt. Ändern Sie diesen Wert, wenn Ihr Setup anders ist.
// Define stepper motor connections and steps per revolution #define dirPin 2 #define stepPin 3 #define stepsPerRevolution 200
setup
Im setup() Abschnitt des Codes werden alle Motorsteuerungs-Pins mit der Funktion pinMode()als digitale OUTPUTs deklariert.
void setup() {
// Declare pins as output:
pinMode(stepPin, OUTPUT);
pinMode(dirPin, OUTPUT);
}
loop
Im loop() Abschnitt des Codes lassen wir den Motor eine Umdrehung langsam im Uhrzeigersinn (CW) und eine Umdrehung schnell gegen den Uhrzeigersinn (CCW) drehen. Danach lassen wir den Motor 5 Umdrehungen in jede Richtung mit hoher Geschwindigkeit drehen. Wie steuern Sie also Geschwindigkeit, Drehrichtung und Anzahl der Umdrehungen?
// Set the spinning direction clockwise:
digitalWrite(dirPin, HIGH);
// Spin the stepper motor 1 revolution slowly:
for(int i = 0; i < stepsPerRevolution; i++)
{
// These four lines result in 1 step:
digitalWrite(stepPin, HIGH);
delayMicroseconds(2000);
digitalWrite(stepPin, LOW);
delayMicroseconds(2000);
}
Drehrichtung steuern:
Um die Drehrichtung des Schrittmotors zu steuern, setzen wir den DIR (Direction) Pin entweder auf HIGH oder LOW. Dafür verwenden wir die Funktion digitalWrite(). Je nachdem, wie Sie den Schrittmotor angeschlossen haben, bewirkt das Setzen des DIR-Pins auf High, dass sich der Motor im Uhrzeigersinn oder gegen den Uhrzeigersinn dreht.
Anzahl der Schritte oder Umdrehungen steuern:
In diesem Beispielsketch steuern die for-Schleifen die Anzahl der Schritte, die der Schrittmotor ausführt. Der Code innerhalb der for-Schleife führt einen Schritt des Schrittmotors aus. Da der Code in der Schleife 200 Mal ausgeführt wird (stepsPerRevolution), ergibt das eine Umdrehung. In den letzten beiden Schleifen wird der Code innerhalb der for-Schleife 1000 Mal ausgeführt, was 1000 Schritten oder 5 Umdrehungen entspricht.
Beachten Sie, dass Sie den zweiten Term in der for-Schleife auf jede gewünschte Schrittzahl ändern können. for(int i = 0; i < 100; i++) würde 100 Schritte oder eine halbe Umdrehung ergeben.
Geschwindigkeit steuern:
Die Geschwindigkeit des Schrittmotors wird durch die Frequenz der Impulse bestimmt, die wir an den STEP-Pin senden. Je höher die Frequenz, desto schneller läuft der Motor. Sie können die Frequenz der Impulse steuern, indem Sie delayMicroseconds() im Code ändern. Je kürzer die Verzögerung, desto höher die Frequenz und desto schneller läuft der Motor.
AccelStepper Bibliothek Tutorial
Die von Mike McCauley geschriebene AccelStepper-Bibliothek ist eine großartige Bibliothek für Ihr Projekt. Ein Vorteil ist, dass sie Beschleunigung und Verzögerung unterstützt, aber sie hat auch viele andere nützliche Funktionen.
Sie können die neueste Version dieser Bibliothek herunterladen, indem Sie auf die Schaltfläche unten klicken.
Sie können die Bibliothek installieren, indem Sie zu Sketch > Include Library > Add .ZIP Library… im Arduino IDE gehen.
Eine andere Möglichkeit ist, zu Tools > Manage Libraries… zu navigieren oder unter Windows Strg + Shift + I zu drücken. Der Library Manager öffnet sich und aktualisiert die Liste der installierten Bibliotheken.

Sie können nach ‘accelstepper’ suchen und die Bibliothek von Mike McCauley auswählen. Wählen Sie die neueste Version und klicken Sie dann auf Installieren.

1. Beispielcode für kontinuierliche Rotation
Der folgende Sketch kann verwendet werden, um einen oder mehrere Schrittmotoren kontinuierlich mit konstanter Geschwindigkeit laufen zu lassen. (Keine Beschleunigung oder Verzögerung wird verwendet).
/* Example sketch to control a stepper motor with A4988 stepper motor driver, AccelStepper library and Arduino: continuous rotation.Homepage*/ // Include the AccelStepper library: #include "AccelStepper.h" // Define stepper motor connections and motor interface type. // Motor interface type must be set to 1 when using a driver #define dirPin 2 #define stepPin 3 #define motorInterfaceType 1 // Create a new instance of the AccelStepper class: AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin); void setup() { // Set the maximum speed in steps per second: stepper.setMaxSpeed(1000); } void loop() { // Set the speed in steps per second: stepper.setSpeed(400); // Step the motor with a constant speed as set by setSpeed(): stepper.runSpeed(); }
Wie der Code funktioniert:
Der erste Schritt ist, die Bibliothek mit #include "AccelStepper.h"einzubinden.
// Include the AccelStepper library: #include "AccelStepper.h"
Der nächste Schritt ist, die A4988-zu-Arduino-Verbindungen und den Motortyp zu definieren. Der Motortyp muss auf 1 gesetzt werden, wenn ein Step- und Direction-Treiber verwendet wird. Die anderen Schnittstellentypen finden Sie hier.
Die Anweisung #define wird verwendet, um einem konstanten Wert einen Namen zu geben. Der Compiler ersetzt alle Verweise auf diese Konstante durch den definierten Wert, wenn das Programm kompiliert wird. Also überall, wo Sie dirPinerwähnen, ersetzt der Compiler es beim Kompilieren durch den Wert 2.
// Define stepper motor connections and motor interface type. // Motor interface type must be set to 1 when using a driver #define dirPin 2 #define stepPin 3 #define motorInterfaceType 1
Als nächstes müssen Sie eine neue Instanz der AccelStepper-Klasse mit dem entsprechenden Motortyp und den Verbindungen erstellen.
In diesem Fall habe ich den Schrittmotor ‘stepper’ genannt, aber Sie können auch andere Namen verwenden, wie ‘z_motor’ oder ‘liftmotor’ usw. AccelStepper liftmotor = AccelStepper(motorInterfaceType, stepPin, dirPin);. Der Name, den Sie dem Schrittmotor geben, wird später verwendet, um Geschwindigkeit, Position und Beschleunigung für diesen Motor einzustellen. Sie können mehrere Instanzen der AccelStepper-Klasse mit verschiedenen Namen und Pins erstellen. So können Sie einfach 2 oder mehr Schrittmotoren gleichzeitig steuern.
// Create a new instance of the AccelStepper class: AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);
Im setup() Abschnitt des Codes definieren wir die maximale Geschwindigkeit in Schritten pro Sekunde. Geschwindigkeiten über 1000 Schritte pro Sekunde können unzuverlässig sein, daher habe ich dies als Maximum gesetzt. Beachten Sie, dass ich den Namen des Schrittmotors (‘stepper’) angebe, für den ich die maximale Geschwindigkeit definieren möchte. Wenn Sie mehrere Schrittmotoren angeschlossen haben, können Sie für jeden Motor eine andere Geschwindigkeit angeben:
void setup() {
// Set the maximum speed in steps per second:
stepper.setMaxSpeed(1000);
stepper2.setMaxSpeed(500);
}
Im loop() setzen wir zuerst die Geschwindigkeit, mit der der Motor laufen soll. Dafür verwenden wir die Funktion setSpeed(). (Sie können dies auch im Setup-Abschnitt des Codes platzieren).
stepper.runSpeed() fragt den Motor ab und wenn ein Schritt fällig ist, führt er einen Schritt aus. Das hängt von der eingestellten Geschwindigkeit und der Zeit seit dem letzten Schritt ab. Wenn Sie die Drehrichtung des Motors ändern möchten, können Sie eine negative Geschwindigkeit einstellen: stepper.setSpeed(-400); dreht den Motor in die andere Richtung.
void loop() {
// Set the speed in steps per second:
stepper.setSpeed(400);
// Step the motor with a constant speed as set by setSpeed():
stepper.runSpeed();
}
2. Beispielcode zur Steuerung der Schrittzahl oder Umdrehungen
Um den Motor eine bestimmte Anzahl von Schritten drehen zu lassen, verwende ich gerne eine while-Schleife in Kombination mit stepper.currentPosition(). Sie können den folgenden Beispielcode verwenden, um den Motor hin und her laufen zu lassen.
/* Example sketch to control a stepper motor with A4988 stepper motor driver, AccelStepper library and Arduino: number of steps or revolutions.Homepage*/ // Include the AccelStepper library: #include "AccelStepper.h" // Define stepper motor connections and motor interface type. // Motor interface type must be set to 1 when using a driver #define dirPin 2 #define stepPin 3 #define motorInterfaceType 1 // Create a new instance of the AccelStepper class: AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin); void setup() { // Set the maximum speed in steps per second: stepper.setMaxSpeed(1000); } void loop() { // Set the current position to 0: stepper.setCurrentPosition(0); // Run the motor forward at 200 steps/second until the motor reaches 400 steps (2 revolutions): while(stepper.currentPosition() != 400) { stepper.setSpeed(200); stepper.runSpeed(); } delay(1000); // Reset the position to 0: stepper.setCurrentPosition(0); // Run the motor backwards at 600 steps/second until the motor reaches -200 steps (1 revolution): while(stepper.currentPosition() != -200) { stepper.setSpeed(-600); stepper.runSpeed(); } delay(1000); // Reset the position to 0: stepper.setCurrentPosition(0); // Run the motor forward at 400 steps/second until the motor reaches 600 steps (3 revolutions): while(stepper.currentPosition() != 600) { stepper.setSpeed(400); stepper.runSpeed(); } delay(3000); }
Code-Erklärung:
Der erste Teil des Codes bis zum loop()-Abschnitt ist genau derselbe wie im vorherigen Beispiel.
In der Schleife verwende ich eine while-Schleife in Kombination mit der currentPosition() Funktion. Zuerst setze ich die aktuelle Position des Schrittmotors mit stepper.setCurrentPosition(0)auf Null.
// Set the current position to 0: stepper.setCurrentPosition(0);
Dann verwenden wir die while-Schleife. Eine while-Schleife läuft kontinuierlich und unendlich, bis der Ausdruck in den Klammern () falsch wird. In diesem Fall prüfe ich, ob die aktuelle Position des Schrittmotors nicht gleich 400 Schritten ist (!= bedeutet: ist nicht gleich). Solange das der Fall ist, läuft der Schrittmotor mit der von setSpeed()eingestellten konstanten Geschwindigkeit.
// Run the motor forward at 200 steps/second until the motor reaches 400 steps (2 revolutions):
while(stepper.currentPosition() != 400)
{
stepper.setSpeed(200);
stepper.runSpeed();
}
Im Rest der Schleife machen wir genau dasselbe, nur mit einer anderen Geschwindigkeit und Zielposition.
3. Beispielcode für Beschleunigung und Verzögerung
Mit dem folgenden Sketch können Sie Beschleunigung und Verzögerung zu den Bewegungen des Schrittmotors hinzufügen, ohne komplizierte Programmierung. Im folgenden Beispiel läuft der Motor mit 200 Schritten pro Sekunde und einer Beschleunigung von 30 Schritten pro Sekunde² hin und her.
/* Example sketch to control a stepper motor with A4988 stepper motor driver, AccelStepper library and Arduino: acceleration and deceleration.Homepage*/ // Include the AccelStepper library: #include "AccelStepper.h" // Define stepper motor connections and motor interface type. // Motor interface type must be set to 1 when using a driver #define dirPin 2 #define stepPin 3 #define motorInterfaceType 1 // Create a new instance of the AccelStepper class: AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin); void setup() { // Set the maximum speed and acceleration: stepper.setMaxSpeed(200); stepper.setAcceleration(30); } void loop() { // Set the target position: stepper.moveTo(600); // Run to target position with set speed and acceleration/deceleration: stepper.runToPosition(); delay(1000); // Move back to zero: stepper.moveTo(0); stepper.runToPosition(); delay(1000); }
Code-Erklärung:
Im setup() müssen wir neben der maximalen Geschwindigkeit auch die Beschleunigung/Verzögerung definieren. Dafür verwenden wir die Funktion setAcceleration().
void setup() {
// Set the maximum speed and acceleration:
stepper.setMaxSpeed(200);
stepper.setAcceleration(30);
}
Im loop-Abschnitt des Codes habe ich eine andere Methode verwendet, um den Motor eine vordefinierte Anzahl von Schritten drehen zu lassen. Die Funktion stepper.moveTo() wird verwendet, um die Zielposition einzustellen. Die Funktion stepper.runToPostion() bewegt den Motor (mit Beschleunigung/Verzögerung) zur Zielposition und blockiert, bis diese erreicht ist. Da diese Funktion blockierend ist, sollten Sie sie nicht verwenden, wenn Sie gleichzeitig andere Dinge steuern müssen.
// Set the target position: stepper.moveTo(600); // Run to target position with set speed and acceleration/deceleration: stepper.runToPosition();
Fazit
In diesem Artikel habe ich gezeigt, wie man einen Schrittmotor mit dem A4988 Schrittmotortreiber und Arduino steuert. Ich hoffe, Sie fanden ihn nützlich und informativ. Ich habe diesen Treiber persönlich oft für viele 3D-Drucker und andere CNC-bezogene Projekte verwendet.
Wenn Sie mehr über andere Schrittmotortreiber erfahren möchten, könnten die folgenden Artikel hilfreich sein:
- How to control a stepper motor with DRV8825 driver and Arduino
- 28BYJ-48 Stepper Motor with ULN2003 Driver and Arduino Tutorial
- How to control a Stepper Motor with Arduino Motor Shield Rev3
- TB6600 Stepper Motor Driver with Arduino Tutorial
Ich habe auch einen Artikel über How To Drive a Stepper Motor using the A4988 driver and ESP32 , wenn Sie stattdessen mit einem ESP32-Mikrocontroller arbeiten möchten.
Wenn Sie Fragen haben oder denken, dass etwas fehlt, hinterlassen Sie bitte unten einen Kommentar.

