Konstante Drehung
Was dieses Beispiel zeigt
Der Motor dreht sich gleichmäßig in eine Richtung und hält nicht an. Das ist die einfachste Aufgabe, die man einem Schrittmotor stellen kann, und der richtige erste Test nach dem Verdrahten der Platine: Wenn dies funktioniert, sind Ihre Verkabelung, die Strombegrenzung und die Pin- Zuweisungen alle korrekt.
Der mitgelieferte Sketch verwendet BasicStepper stepper;, was im Bibliotheks-Header
als AccelStepper::FULL4WIRE an den Pins 2, 3, 4 und 5 definiert ist. Dies treibt die
Motorspulen direkt an und passt nicht zu dieser Platine. Erstellen Sie stattdessen eine Instanz mit
BasicStepper::DRIVER und verwenden Sie stattdessen Ihre STEP- und DIR-Pins, wie unten gezeigt.
Der Beispielcode
#include <Basic-Stepper-Driver-SOLDERED.h>
#define dirPin 4
#define stepPin 5
BasicStepper stepper(BasicStepper::DRIVER, stepPin, dirPin);
void setup()
{
stepper.setMaxSpeed(1000);
stepper.setSpeed(200);
}
void loop()
{
stepper.runSpeed();
}
Erwartetes Ergebnis:
Der Motor dreht sich kontinuierlich in eine Richtung mit 200 Schritten pro Sekunde. Bei einem 200-Schritt-Motor im Vollschrittbetrieb entspricht dies etwa einer Umdrehung pro Sekunde.
Es gibt keine serielle Ausgabe. Das Einzige, worauf zu achten ist, ist die Welle.
runSpeed() sieht keine Beschleunigung vor: Der Motor wird ab dem ersten Schritt auf 200 Schritte pro
Sekunde eingestellt. Ein belasteter Motor kann blockieren oder surren, anstatt
anzulaufen. Sollte dies der Fall sein, setzen Sie setSpeed() auf einen kleinen Wert, überprüfen Sie, ob er sich dreht,
und erhöhen Sie die Geschwindigkeit dann schrittweise, oder verwenden Sie
Eine festgelegte Anzahl von Schritten bewegen,
was eine sanfte Beschleunigung ermöglicht.
Verwendete Funktionen
BasicStepper(uint8_t interface, uint8_t pin1, uint8_t pin2)returns NoneErstellt einen Stepper auf der angegebenen Schnittstelle. Übergeben Sie für diese Platine „BasicStepper::DRIVER“, gefolgt vom STEP-Pin und dem DIR-Pin in dieser Reihenfolge. Geerbt von „AccelStepper“, das für Direct-Drive-Schnittstellen zudem zwei weitere Pins und ein Aktivierungsflag akzeptiert.
ReturnsKonstruktor; kein Rückgabewert.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
uint8_t | interface | Typ der Motorschnittstelle. BasicStepper::DRIVER (1) für einen Schritt-/Richtungs-Treiber. Standardwert ist FULL4WIRE (4). |
uint8_t | pin1 | Bei DRIVER der STEP-Pin. Standardwert ist 2. |
uint8_t | pin2 | Bei DRIVER der DIR-Pin. Standardwert ist 3. |
setMaxSpeed(float speed)returns voidLegt die Höchstgeschwindigkeit fest. Dies gilt auch für `setSpeed()`: Eine konstante Geschwindigkeit, die höher ist als dieser Wert, wird auf diesen Wert begrenzt. Daher muss zunächst `setMaxSpeed` aufgerufen werden, und dieser Wert muss der größere der beiden sein.
ReturnsNichts.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
float | speed | Maximale Geschwindigkeit in Schritten pro Sekunde. |
setSpeed(float speed)returns voidLegt die konstante Geschwindigkeit fest, die von `runSpeed()` verwendet wird. Positive Werte entsprechen im Sinne von AccelStepper einer Drehung im Uhrzeigersinn – was in der Praxis bedeutet, dass sich der Stepper in die Richtung dreht, in die ihn die Verdrahtung der Spule antreibt; negative Werte kehren die Drehrichtung um. Geschwindigkeiten über 1000 Schritte pro Sekunde gelten laut Dokumentation als unzuverlässig.
ReturnsNichts.
Parameter
| Typ | Name | Beschreibung |
|---|---|---|
float | speed | Konstante Geschwindigkeit in Schritten pro Sekunde. Begrenzt durch setMaxSpeed(). |
runSpeed()returns booleanDer Motor wird höchstens einmal mit der konstanten Drehzahl aus dem letzten `setSpeed()`-Aufruf getaktet. Es erfolgt keinerlei Beschleunigung. Rufen Sie diese Funktion so oft wie möglich auf, mindestens jedoch einmal pro Schrittintervall, da der Motor sonst langsamer läuft als gewünscht.
ReturnsWahr, wenn der Motor bei diesem Aufruf angesteuert wurde.
Parameter
Diese Funktion benötigt keine Parameter.
Zusammenführung
Zwei Aufrufe in setup(), einer in loop(). Die einzige Regel ist, dass loop() immer wieder
zu runSpeed() zurückkehren muss: Die Funktion führt pro Aufruf höchstens einen Schritt aus, sodass ein delay() oder ein
langsamer Sensor-Lesevorgang an beliebiger Stelle in der Schleife sich direkt in einem langsameren Motor bemerkbar macht.
setAcceleration() ist hier vor allem wegen dessen erwähnenswert, was es nicht tut. Im
Bibliotheks-Header wird ausdrücklich darauf hingewiesen, dass runSpeed() eine konstante Geschwindigkeit beibehält und
keine Beschleunigungen implementiert; daher ändert das Festlegen einer Beschleunigung daneben
nichts. Beschleunigung gilt nur für run(), runToPosition() und
runToNewPosition(), was auf der Seite „Positionsbewegung“ verwendet wird.
Um die Richtung umzukehren, rufen Sie setSpeed() mit einem negativen Wert auf. Zum Anhalten
beenden Sie den Aufruf von runSpeed(); der Treiber hält den Motor weiterhin auf seinem aktuellen Schritt,
es sei denn, Sie setzen EN auf High oder versetzen den Treiber in den Ruhezustand.