Zum Hauptinhalt springen

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​

Select Board
ConstantSpeed.ino
#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 None

Erstellt 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

TypNameBeschreibung
uint8_tinterfaceTyp der Motorschnittstelle. BasicStepper::DRIVER (1) für einen Schritt-/Richtungs-Treiber. Standardwert ist FULL4WIRE (4).
uint8_tpin1Bei DRIVER der STEP-Pin. Standardwert ist 2.
uint8_tpin2Bei DRIVER der DIR-Pin. Standardwert ist 3.
setMaxSpeed(float speed)returns void

Legt 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

TypNameBeschreibung
floatspeedMaximale Geschwindigkeit in Schritten pro Sekunde.
setSpeed(float speed)returns void

Legt 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

TypNameBeschreibung
floatspeedKonstante Geschwindigkeit in Schritten pro Sekunde. Begrenzt durch setMaxSpeed().
runSpeed()returns boolean

Der 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.