Articles

So steuern Sie einen Schrittmotor mit dem A4988-Treiber und Arduino

Dieser Artikel enthält alles, was Sie über die Steuerung eines Schrittmotors mit dem A4988-Schrittmotortreiber und Arduino wissen müssen. Ich habe einen Schaltplan, 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 bedienen und kann die Leistung Ihrer Hardware erheblich verbessern.

Nach jedem Beispiel breche ich auf und erkläre, wie der Code funktioniert, so dass Sie keine Probleme haben sollten, ihn an Ihre Bedürfnisse anzupassen.

Wenn Sie mehr über andere Schrittmotortreiber erfahren möchten, können 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

Supplies

Hardware components

A4988 stepper motor driver × 1 Amazon
AliExpress
NEMA 17 stepper motor × 1 Amazon
Arduino Uno Rev3 × 1 Amazon
Power supply (8-35 V) × 1 Amazon
AliExpress
Breadboard × 1 Amazon
Capacitor (100 µF) × 1 Amazon
Jumper wires ~ 10 Amazon
AliExpress
USB cable type A/B × 1 Amazon

Ich verwende diesen Treiber gerne in Kombination mit einem CNC-Shield oder einer Erweiterungskarte. Eine solche Abschirmung enthält bereits Kondensatoren und bietet eine einfache Möglichkeit, die Mikroschrittauflösung zu wählen. Es erleichtert die Verkabelung erheblich und ist eine großartige Option, wenn Sie eine dauerhaftere Lösung als ein Steckbrett benötigen.

Tools

Small screwdriver Amazon
Multimeter Amazon
Alligator test leads (optional) Amazon

Software

Arduino IDE

Makerguides.com ist ein Teilnehmer am Amazon Services LLC Associates Program, einem Affiliate-Werbeprogramm, das Websites die Möglichkeit bietet, Werbegebühren durch Werbung und Verlinkung mit Produkten auf Amazon.com .

Über die fahrer

Im herzen der A4988 fahrer finden sie eine chip made durch Allegro MicroSystems: die A4988 DMOS Mikroschritt Fahrer mit Übersetzer und Überstromschutz. Dieser integrierte Motortreiber macht die Anbindung an einen Mikrocontroller sehr einfach, da Sie nur zwei Pins benötigen, um sowohl die Geschwindigkeit als auch die Richtung des Schrittmotors zu steuern.

Die fahrer hat eine maximale ausgang kapazität von 35 V und ± 2 A, die ist ideal für fahren kleine bis mittlere schrittmotoren wie eine NEMA 17 bipolar stepper motor.

Wenn Sie größere Schrittmotoren wie NEMA 23 steuern müssen, werfen Sie einen Blick auf den Schrittmotortreiber TB6600. Dieser Treiber kann mit dem gleichen Code wie der A4988 verwendet werden und hat eine Nennstromstärke von 3,5 A.

  • TB6600 Schrittmotor Fahrer mit Arduino Tutorial

Die A4988 fahrer chip hat mehrere sicherheit funktionen gebaut-in wie überstrom, kurzschluss, unter-spannung lockout, und über temperatur schutz. Weitere Spezifikationen finden Sie in der folgenden Tabelle.

A4988 Specifications

Minimum operating voltage 8 V
Maximum operating voltage 35 V
Continuous current per phase 1 A
Maximum current per phase 2 A
Minimum logic voltage 3 V
Maximum logic voltage 5.5 V
Microstep resolution full, 1/2, 1/4, 1/8 and 1/16
Reverse voltage protection? Nein
Abmessungen 15,5 × 20,5 mm (0,6 „× 0,8“)
Kosten Preis überprüfen

Weitere Informationen finden Sie im Datenblatt hier.

Unterschiede zwischen dem A4988 und dem DRV8825

Der DRV8825 ist dem A4988 ziemlich ähnlich, aber es gibt einige wesentliche Unterschiede:

  • Der DRV8825 bietet 1/32-Mikroschritt, während der A4988 nur auf 1/16-Schritt heruntergeht. Ein höherer Mikroschritt führt zu einem gleichmäßigeren und leiseren Betrieb, ist jedoch nicht immer erforderlich.
  • Das Strombegrenzungspotentiometer befindet sich an einer anderen Stelle
  • Die Beziehung zwischen der Referenzspannung und der Strombegrenzung ist unterschiedlich.
  • Der DRV8825 benötigt eine minimale Schrittimpulsdauer von 1,9µs; der A4988 benötigt mindestens 1µs.
  • Der DRV8825 kann mit einer Motorstromversorgung mit höherer Spannung (45 V vs. 35 V) verwendet werden. Dies bedeutet, dass es weniger anfällig für Schäden durch LC-Spannungsspitzen ist.
  • Der DRV8825 kann ohne zusätzliche Kühlung etwas mehr Strom liefern als der A4988.

Beachten Sie, dass die Pinbelegung des DRV8825 genau dieselbe ist wie beim A4988, sodass er als Drop-In-Ersatz verwendet werden kann!

A4899 (links) vs DRV8825 (rechts)

Microstep einstellungen

Stepper motoren haben in der regel von 1,8 ° oder 200 Schritten pro Umdrehung bezieht sich dies auf volle Schritte. Ein Mikroschritttreiber wie der A4988 ermöglicht höhere Auflösungen, indem er Zwischenschrittpositionen zulässt. Dies wird erreicht, indem die Spulen mit Zwischenstrompegeln bestromt werden.

Wenn Sie beispielsweise einen Motor im Viertelschrittmodus antreiben, erhält der Motor mit 200 Schritten pro Umdrehung 800 Mikroschritte pro Umdrehung, indem Er vier verschiedene Stromstärken verwendet.

A4988 pinout

Die auflösung (schritt größe) selector pins (MS1, MS2, und MS3) erlauben sie zu wählen sie eine der fünf schritt auflösungen nach zur Tabelle unten.

MS1 MS2 MS3 Microstep resolution
Low Low Low Full step
High Low Low 1/2 step
Low High Low 1/4 step
High High Low 1/8 step
High High High 1/16 step

Alle drei eingänge haben interne 100 kΩ pull-down widerstände, so verlassen die drei microstep auswahl pins getrennt ergebnisse in volle-schritt modus.

Ich verwende oft ein CNC-Shield oder eine Erweiterungskarte in Kombination mit diesen Treibern. Die Erweiterungskarte verfügt über 3 DIP-Schalter zum Einstellen von MS1 – MS3 High oder Low und auf dem CNC-Shield können Jumper installiert werden. Wenn Sie den Treiber mit einem Steckbrett verwenden, können Sie einfach Überbrückungskabel verwenden, um die Wahlstifte mit 5 V zu verbinden (dh sie HOCH zu machen).

Verdrahtung-Anschluss A4988 zu Arduino und stepper motor

Verdrahtung diagramm/schematische für A4988 schrittmotor fahrer mit Arduino und stepper motor.

Der Schaltplan / Schaltplan oben zeigt Ihnen, wie Sie den A4899-Treiber mit einem Schrittmotor und dem Arduino verbinden.

Die Verbindungen sind auch in der folgenden Tabelle angegeben:

A4988 Connections

A4988 Connection
VMOT 8-35V
GND Motor ground
SLP RESET
RST SLP
VDD 5V
GND Logic ground
STP Pin 3
DIR Pin 2
1A, 1B, 2A, 2B Stepper motor
  • Die Motorstromversorgung ist an GND und VMOT (oben rechts) angeschlossen.
  • Die beiden Spulen des Schrittmotors sind mit 1A, 1B und 2A, 2B verbunden (siehe unten).
  • Der GND-Pin (unten rechts) ist mit dem Massepin des Mikrocontrollers verbunden und VDD ist mit 5V verbunden.
  • Der STP- (Step-) und der DIR- (Direction-)Pin sind mit dem Digital-Pin 3 bzw. 2 verbunden. Sie können eine andere digitale PIN wählen, wenn Sie möchten, aber dies sind die, die ich für dieses Tutorial und den Beispielcode verwendet habe.
  • Der SLP-Pin ist ein aktiver Low-Eingang. Das heißt, wenn Sie diesen Pin niedrig ziehen, wird der Treiber in den Ruhemodus versetzt, wodurch der Stromverbrauch minimiert wird. RST ist auch ein aktiver Low-Eingang. Wenn Sie niedrig gezogen werden, werden alle Schritteingaben ignoriert, bis Sie sie hoch ziehen. Wenn Sie den Pin nicht verwenden, können Sie ihn mit dem benachbarten SLP / SLEEP-Pin verbinden, um ihn hoch zu bringen und den Treiber zu aktivieren.
  • Der EN (enable) -Pin kann getrennt bleiben, er wird standardmäßig niedrig gezogen. Wenn dieser Pin hoch gesetzt ist, wird der Treiber deaktiviert.

Im Rest dieses Tutorials habe ich MS1, MS2 und MS3 getrennt gelassen, so dass der Treiber im Vollschrittmodus arbeitet. Dies macht das Erklären des Codes etwas einfacher. Normalerweise würde ich 1/8 oder 1/16 Mikroschritt verwenden und die entsprechenden Pins an 5V anschließen (siehe Tabelle in der Einleitung).

Warnung

Die A4988 träger bord verwendet low-ESR keramik kondensatoren, die macht es anfällig für destruktiv LC spannung spikes, vor allem, wenn mit power führt länger als ein paar zoll.

Zum Schutz des Treibers können Sie einen Elektrolytkondensator zwischen VMOT und GND anschließen. Pololu schlägt einen Kondensator von 47 µF oder mehr vor (ich habe einen 100 µF Kondensator verwendet). Ich mag diese Sortimentskästen von Amazon, auf diese Weise habe ich immer einige Kondensatoren der richtigen Größe zur Hand.

Wie bestimme ich die richtige Schrittmotorverdrahtung?

Wenn Sie das Datenblatt Ihres Schrittmotors nicht finden können, kann es schwierig sein, herauszufinden, wie Sie Ihren Motor richtig verdrahten. Ich benutze den folgenden Trick, um zu bestimmen, wie man bipolare 4-Draht-Schrittmotoren anschließt:

Das einzige, was Sie identifizieren müssen, sind die zwei Drahtpaare, die mit den beiden Spulen des Motors verbunden sind. Die Drähte von einer Spule werden mit 1A und 1B und die anderen mit 2A und 2B verbunden, die Polarität spielt keine Rolle.

Um die beiden Drähte von einer Spule zu finden, gehen Sie wie folgt vor, wenn der Motor nicht angeschlossen ist:

  1. Versuchen Sie, die Welle des Schrittmotors von Hand zu drehen, und beachten Sie, wie schwer es ist, sich zu drehen.
  2. Nehmen Sie nun ein zufälliges Drahtpaar vom Motor und berühren Sie die blanken Enden miteinander.Versuchen Sie als Nächstes, die Welle des Schrittmotors erneut zu drehen.

Wenn Sie viel Widerstand spüren, haben Sie ein Paar Drähte von derselben Spule gefunden. Wenn Sie die Welle frei drehen können, versuchen Sie es mit einem anderen Drahtpaar. Verbinden Sie nun die beiden Spulen mit den im obigen Schaltplan gezeigten Stiften.

(Wenn es noch unklar ist, hinterlassen Sie bitte unten einen Kommentar, weitere Informationen finden Sie auch auf der RepRap.org wiki)

Wie stelle ich die Strombegrenzung ein?

Bevor Sie mit der Programmierung Ihres Arduino beginnen und den Treiber verwenden, müssen Sie eine sehr wichtige Sache tun, die viele Leute vergessen: Stellen Sie die Strombegrenzung ein!

Dieser Schritt ist nicht sehr kompliziert, aber absolut notwendig, um Ihren Schrittmotor und den Treiber zu schützen. Wenn Sie keine geeignete Strombegrenzung einstellen, kann Ihr Motor mehr Strom ziehen, als er oder Ihr Fahrer verarbeiten kann.

Um die Strombegrenzung einzustellen, müssen Sie eine Referenzspannung messen und das Bordpotentiometer entsprechend einstellen. Sie benötigen einen kleinen Schraubendreher, ein Multimeter zur Messung der Referenzspannung und Krokodilklemmen (optional, aber sehr praktisch).

Strom begrenzung verdrahtung diagramm für A4988 fahrer.

Um die Referenzspannung zu messen, muss der Treiber mit Strom versorgt werden. Die A4988 nur bedürfnisse power über VDD (5 V) und sie müssen verbinden RST und SLP zusammen, sonst die fahrer nicht drehen auf. Es ist am besten, den Schrittmotor zu trennen, während Sie dies tun.

Wenn Sie den Treiber bereits verkabelt haben, können Sie alles außer dem Schrittmotor angeschlossen lassen. Sie können Strom über den USB-Anschluss des Arduino anwenden.

A4988 Connection
VDD 5V
RST SLP
SLP RESET
GND Ground
Required connections to set the current limit

Current limit formula

The next step is to calculate the current limit with the following formel:

Strombegrenzung = Vref ÷ (8 × Rcs)

Der Rcs ist der Strommesswiderstand. Wenn Sie vor Januar 2017 einen A4988-Treiber von Pololu gekauft haben, beträgt der Rcs 0,050 Ω. Treiber, die danach verkauft werden, haben 0,068 Ω Strommesswiderstände.

Dies bedeutet also, dass für eine Strombegrenzung von 1A für eine Platine mit 0,068 Ω Strommesswiderständen der Vref 540 mV betragen sollte.

Positionen des Strommesswiderstands. Bild: www.pololu.com

Werfen Sie einen Blick auf das Datenblatt Ihres Schrittmotors, um die richtige Strombegrenzung auszuwählen. Wenn Sie die aktuelle Nennleistung Ihres Motors nicht finden können, empfehle ich, mit einer Strombegrenzung von 1A zu beginnen. Sie können es später immer erhöhen, wenn Ihrem Motor / Treiber Schritte fehlen.

Bonus Info: Bei Verwendung des Treibers im Vollschrittmodus ist der Strom durch jede Spule auf ungefähr 70% der eingestellten Strombegrenzung begrenzt. Dies bedeutet, dass Sie die Strombegrenzung 40% höher oder 1,4 A im Vollschrittmodus einstellen müssten. Bei Verwendung von Mikroschritt gilt die obige Formel.

Beachten Sie, dass Sie die Strombegrenzung neu kalibrieren müssen, wenn Sie die Versorgungsspannung des Motors ändern. Wenn Ihr Motor viel Lärm macht, versuchen Sie, die Strombegrenzung zu senken. Es ist am besten, die Strombegrenzung gerade hoch genug einzustellen, damit der Motor keine Schritte verpasst.

Vref messen

Jetzt müssen Sie die Referenzspannung (Vref) zwischen den beiden auf dem Bild unten markierten Punkten (GND und Potentiometer) messen und auf den von Ihnen berechneten Wert einstellen.

Vref sonde punkte (GND und potentiometer).

Ich empfehle, Krokodilklemmleitungen zu verwenden, die am Schraubendreher befestigt sind, um die Strombegrenzung einzustellen. Auf diese Weise können Sie das Potentiometer einstellen und gleichzeitig die Referenzspannung messen.

Hinweis: Es gibt eine andere Möglichkeit, die Strombegrenzung zu messen, nämlich die Stromaufnahme des Schrittmotors direkt zu messen. Persönlich finde ich die obige Methode viel einfacher.

Pololu erwähnt Folgendes auf ihrer Website:

Hinweis: Der Spulenstrom kann sich stark vom Stromversorgungsstrom unterscheiden, daher sollten Sie den an der Stromversorgung gemessenen Strom nicht zum Einstellen der Strombegrenzung verwenden. Der geeignete Ort, um Ihren Strommesser zu platzieren, ist in Reihe mit einer Ihrer Schrittmotorspulen.

Pololu

Strom begrenzung FAQ

Muss ICH haben die stepper motor verbunden oder nicht?
Keine, sie müssen nicht verbinden die stepper motor zu die fahrer, wenn einstellung der strom begrenzung. Um auf der sicheren Seite zu sein, trennen Sie Ihren Motor, es stört manchmal die Messung der Vref-Spannung.

Muss ich den Motor drehen, indem ich den Arduino Motor Sketch ausführe?
Nein, siehe Frage oben.

Muss ich das Potentiometer im Uhrzeigersinn oder gegen den Uhrzeigersinn drehen, um Vref anzuheben?
Dies hängt vom Hersteller des Treibers ab. Wenn Sie ein echtes Polulu-Breakout-Board des DRV8825 oder A4988 haben, drehen Sie das Potentiometer im Uhrzeigersinn, um Vref anzuheben, und gegen den Uhrzeigersinn, um es abzusenken.

Kühlung des Treibers

Der A4988-Treiber-IC hat eine maximale Stromstärke von 2 A pro Spule, kann jedoch ohne Kühlkörper nur etwa 1 A pro Spule liefern, bevor er zu überhitzen beginnt.

Der Treiber wird normalerweise mit einem kleinen Kühlkörper mit Kleberückseite geliefert, den Sie sofort installieren sollten. Sie können auch ein paar kleine Kühlkörper von Amazon für wirklich billig kaufen.

Grundlegender Arduino-Beispielcode zur Steuerung eines Schrittmotors

Nachdem Sie den Treiber verkabelt und die Strombegrenzung eingestellt haben, ist es Zeit, den Arduino an den Computer anzuschließen und Code hochzuladen. Sie können den folgenden Beispielcode mit der Arduino IDE auf Ihr Arduino hochladen. Für dieses spezielle Beispiel müssen Sie keine Bibliotheken installieren.

Diese Skizze steuert sowohl die Geschwindigkeit, die Anzahl der Umdrehungen als auch die Drehrichtung des Schrittmotors.

Sie können den Code kopieren, indem Sie auf die Schaltfläche in der oberen rechten Ecke des Codefelds klicken.

Wie der Code funktioniert:

Die Skizze beginnt mit der Definition der Schritt- und Richtungsstifte. 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. Überall dort, wo Sie dirPin erwähnen, ersetzt der Compiler ihn beim Kompilieren des Programms durch den Wert 2.

Ich habe auch eine stepsPerRevolution Konstante definiert. Da ich den Treiber auf den Vollschrittmodus eingestellt habe, habe ich ihn auf 200 Schritte pro Umdrehung eingestellt. Ä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

Im Abschnitt setup() des Codes werden alle Motorsteuerpins mit der Funktion pinMode() als digitaler AUSGANG deklariert.

void setup() { // Declare pins as output: pinMode(stepPin, OUTPUT); pinMode(dirPin, OUTPUT);}

Im Abschnitt loop() des Codes lassen wir den Motor eine Umdrehung langsam in CW-Richtung und eine Umdrehung schnell in CCW-Richtung drehen. Als nächstes lassen wir den Motor 5 Umdrehungen in jede Richtung mit hoher Geschwindigkeit drehen. Wie steuern Sie also die Geschwindigkeit, die Drehrichtung und die Anzahl der Umdrehungen?

Drehrichtung steuern:

Um die Drehrichtung des Schrittmotors zu steuern, stellen wir den DIR-Pin (Richtung) entweder HOCH oder NIEDRIG ein. Dazu verwenden wir die Funktion digitalWrite(). Je nachdem, wie sie verbunden die stepper motor, einstellung die DIR pin hohe wird lassen sie die motor drehen CW oder CCW.

Anzahl der Schritte oder Umdrehungen steuern:

In dieser Beispielskizze steuern die for-Schleifen die Anzahl der Schritte, die der Schrittmotor ausführen wird. Der Code innerhalb der for-Schleife ergibt 1 Schritt des Schrittmotors. Da der Code in der Schleife 200 Mal ausgeführt wird (stepsPerRevolution), ergibt dies 1 Umdrehung. In den letzten beiden Schleifen wird der Code innerhalb der for-Schleife 1000 Mal ausgeführt, was zu 1000 Schritten oder 5 Umdrehungen führt.

Beachten Sie, dass Sie den zweiten Term in der for-Schleife in eine beliebige Anzahl von Schritten ändern können. for(int i = 0; i < 100; i++) würde 100 Schritte oder eine halbe Umdrehung ergeben.

Regelgeschwindigkeit:

Die Geschwindigkeit des Schrittmotors wird durch die Frequenz der Impulse bestimmt, die wir an den Schrittstift 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, desto schneller läuft der Motor.

AccelStepper library tutorial

Die AccelStepper Library von Mike McCauley ist eine großartige Bibliothek für Ihr Projekt. Einer der Vorteile ist, dass es Beschleunigung und Verzögerung unterstützt, aber es hat auch viele andere nette Funktionen.

Sie können die neueste Version dieser Bibliothek hier herunterladen oder auf die Schaltfläche unten klicken.

Sie können die Bibliothek installieren, indem Sie auf Sketch > Include Library > Add .ZIP-Bibliothek … in der Arduino IDE.

Eine weitere Möglichkeit besteht darin, zu Extras > Bibliotheken verwalten zu navigieren… oder unter Windows Strg + Umschalt + I einzugeben. Der Bibliotheksmanager öffnet und aktualisiert die Liste der installierten Bibliotheken.

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

Kontinuierliche Rotation Beispielcode

Die folgende Skizze kann verwendet werden, um einen oder mehrere Schrittmotoren kontinuierlich mit konstanter Drehzahl zu betreiben. (Es wird keine Beschleunigung oder Verzögerung verwendet).

Wie der Code funktioniert:

Der erste Schritt besteht darin, die Bibliothek mit #include <AccelStepper.h> .

// Include the AccelStepper library:#include <AccelStepper.h>

Der nächste Schritt besteht darin, die A4988-zu-Arduino-Verbindungen und den Motorschnittstellentyp zu definieren. Der Motorschnittstellentyp muss bei Verwendung eines Schritt- und Richtungstreibers auf 1 gesetzt werden. 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. Überall dort, wo Sie dirPin erwähnen, ersetzt der Compiler ihn beim Kompilieren des Programms 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 Motorschnittstellentyp und den entsprechenden 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 die Geschwindigkeit, Position und Beschleunigung für diesen bestimmten Motor einzustellen. Sie können mehrere Instanzen der AccelStepper-Klasse mit unterschiedlichen Namen und Pins erstellen. Auf diese Weise können Sie problemlos 2 oder mehr Schrittmotoren gleichzeitig steuern.

// Create a new instance of the AccelStepper class:AccelStepper stepper = AccelStepper(motorInterfaceType, stepPin, dirPin);

Im Abschnitt setup() des Codes definieren wir die maximale Geschwindigkeit in Schritten / Sekunde. Geschwindigkeiten von mehr als 1000 Schritten pro Sekunde können unzuverlässig sein, daher habe ich dies als Maximum festgelegt. Beachten Sie, dass ich den Namen des Schrittmotors (‚Stepper‘) spezifiziere, 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() Wir stellen zuerst die Geschwindigkeit ein, mit der der Motor laufen soll. Dazu verwenden wir die Funktion setSpeed(). (Sie können dies auch im Setup-Abschnitt des Codes platzieren).

stepper.runSpeed() fragt den Motor ab und führt, wenn ein Schritt fällig ist, 1 Schritt aus. Dies hängt von der eingestellten Geschwindigkeit und der Zeit seit dem letzten Schritt ab. Wenn Sie die Richtung des Motors ändern möchten, können Sie eine negative Drehzahl einstellen: stepper.setSpeed(-400); dreht den Motor in die andere Richtung.

Beispielcode zur Steuerung der Anzahl der Schritte oder Umdrehungen

Um den Motor eine bestimmte Anzahl von Schritten drehen zu lassen, bevorzuge ich die Verwendung einer while-Schleife in Kombination mit stepper.currentPosition(). Sie können den folgenden Beispielcode verwenden, um den Motor hin und her laufen zu lassen.

Erklärung des Codes:

Der erste Teil des Codes bis zum Abschnitt loop() 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);

Als nächstes verwenden wir die while-Schleife. Eine while-Schleife wird kontinuierlich und unendlich wiederholt, bis der Ausdruck in der Klammer () falsch wird. In diesem Fall überprüfe ich, ob die aktuelle Position des Schrittmotors nicht 400 Schritten entspricht (!= bedeutet: ist nicht gleich). Obwohl dies nicht der Fall ist, betreiben wir den Schrittmotor mit einer konstanten Geschwindigkeit, wie von setSpeed() .

Im Rest der Schleife machen wir genau das gleiche, nur mit einer anderen Geschwindigkeit und Zielposition.

Beschleunigung und verzögerung beispiel code

Mit die folgenden skizze, sie können hinzufügen beschleunigung und verzögerung zu die bewegungen der stepper motor, ohne komplizierte codierung. Im folgenden Beispiel läuft der Motor mit einer Geschwindigkeit von 200 Schritten pro Sekunde und einer Beschleunigung von 30 Schritten pro Sekunde pro Sekunde hin und her.

Code-Erklärung:

Im setup()müssen wir neben der Höchstgeschwindigkeit auch die Beschleunigung/Verzögerung definieren. Dazu 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. Mit der Funktion stepper.moveTo() wird die Zielposition eingestellt. Die Funktion stepper.runToPostion() bewegt den Motor (mit Beschleunigung/Verzögerung) in die Zielposition und blockiert, bis er an der Zielposition ist. Da diese Funktion blockiert, sollten Sie dies nicht verwenden, wenn Sie andere Dinge gleichzeitig steuern müssen.

Fazit

In diesem Artikel habe ich Ihnen gezeigt, wie Sie einen Schrittmotor mit dem Schrittmotortreiber A4988 und Arduino steuern. Ich hoffe, Sie fanden es nützlich und informativ. Wenn Sie es getan haben, teilen Sie es bitte mit einem Freund, der auch Elektronik mag und Dinge macht!

Ich habe diesen Treiber persönlich häufig für eine Reihe von 3D-Druckern und anderen CNC-Projekten verwendet, aber ich würde gerne wissen, welche Projekte Sie mit diesem Treiber erstellen möchten (oder bereits erstellt haben). Wenn Sie Fragen, Anregungen oder der Meinung sind, dass in diesem Tutorial etwas fehlt, hinterlassen Sie bitte unten einen Kommentar.