Inhaltsverzeichnis:

Stepper Speed Control Menü für Arduino gesteuert - Gunook
Stepper Speed Control Menü für Arduino gesteuert - Gunook

Video: Stepper Speed Control Menü für Arduino gesteuert - Gunook

Video: Stepper Speed Control Menü für Arduino gesteuert - Gunook
Video: Motion of Stepper controlled by arduino via potentiometer 2024, Juli
Anonim
Stepper Speed Control Menu für Arduino
Stepper Speed Control Menu für Arduino
Stepper Speed Control Menu für Arduino
Stepper Speed Control Menu für Arduino
Stepper Speed Control Menu für Arduino
Stepper Speed Control Menu für Arduino

Diese SpeedStepper-Bibliothek ist eine Neufassung der AccelStepper-Bibliothek, um die Geschwindigkeitssteuerung des Schrittmotors zu ermöglichen. Mit der SpeedStepper-Bibliothek können Sie die eingestellte Motordrehzahl ändern und dann mit demselben Algorithmus wie die AccelStepper-Bibliothek auf die neue eingestellte Drehzahl beschleunigen/verzögern. Die SpeedStepper-Bibliothek ermöglicht es Ihnen auch, Plus- und Minus-Limits und eine 'Home'-Position einzustellen. Es gibt einen goHome-Befehl, um in die Ausgangsposition zurückzukehren.

Einschränkungen: Die SpeedStepper-Bibliothek steuert nur Richtungs- und Schrittausgänge und muss daher an einen Motortreiber wie Easy Driver angeschlossen werden, um den Schrittmotor tatsächlich anzutreiben. Die AccelStepper-Bibliothek bietet weitere Fahroptionen, die bei Bedarf in diese Bibliothek kopiert werden können.

Es werden drei Beispielskizzen bereitgestellt, die jeweils ohne Motor oder Motortreiber ausgeführt werden können. speedStepperPlot Sketch gibt Beispiel-Geschwindigkeitsbefehle und den goHome-Befehl aus und erzeugt einen Plot der resultierenden Geschwindigkeit und Position. Die speedStepperSetup-Skizze bietet ein menügesteuertes Setup, um die Home-Position und die Grenzen des Motors einzustellen und dann den Motor laufen zu lassen und die Geschwindigkeit nach oben und unten anzupassen und zum Abschluss goHome zu beenden. Die skizze speedStepperProfile zeigt ein Beispiel für die Einrichtung und Ausführung eines Geschwindigkeitsprofils.

Während die AccelStepper-Bibliothek eine gute Positionssteuerung bietet, war eine Geschwindigkeitssteuerung für den Prototyp der Eisschmelzsonde zum Sammeln biologischer Proben auf Europa erforderlich. Hier ist ein Video einer früheren Version des Prototyps, die Gewicht anstelle eines Motors verwendet. In Revision 1.1 wurden Geschwindigkeitsprofile hinzugefügt, nachdem ein Benutzer ein Mittel zur Steuerung des Geschwindigkeitsprofils einer Pumpe angefordert hatte.

Diese Bibliothek läuft auf Arduino Uno und Mega2560, aber für den Prototyp wurde ein größerer Speicher / schnellerer Prozessor SparkFun Redboard Turbo verwendet.

Dieses anweisbare ist auch online unter Stepper Speed Control Library für Arduino verfügbar

Lieferungen

Zum Ausführen der Beispielskizzen werden nur ein Arduino UNO oder Mega2560 und die Softwarebibliotheken benötigt

Für den Benchtest der Bibliothek wurde ein SparkFun Redboard Turbo mit einem Easy Driver, einem 200 Schritte/U, 12V 350mA Schrittmotor und einer 12 DC Versorgung 2A oder größer, z. B. https://www.sparkfun.com/products/14934. USB-A-zu-MikrokabelUSB-zu-TTL-Seriell-KabelArduino IDE V1.8.9 und ein Computer, auf dem es ausgeführt wird. SpeedStepper-BibliothekpfodParser-Bibliothek für die Klassen nonBlockingInput und pfodBufferedStream MillisDelay-Bibliothek für nicht blockierende Verzögerungen

Schritt 1: Bibliotheksfunktionen

Die SpeedStepper-Bibliothek betreibt den Schrittmotor begrenzt durch die von der Bibliothek festgelegten Grenzen. Die verschiedenen verfügbaren Bibliotheksmethoden finden Sie in der Datei SpeedStepper.h. Hier ist ein Überblick über die Logik dahinter.

Die Position des Steppers wird durch Zählen der Anzahl der Schritte (Impulse) verfolgt. Die Bibliothek begrenzt die Position zwischen den Positionen setPlusLimit(int32_t) und setMinusLimit(int32_t). Die Plusgrenze ist immer >= 0 und die Minusgrenze ist immer <= 0. Beim Start ist die Motorposition 0 (Home) und die Grenzen werden auf sehr große +/- Zahlen (ca. +/-1e9 Schritte) gesetzt. setAcceleration(float) legt fest, wie schnell der Motor die Geschwindigkeit nach oben oder unten ändert. Wenn sich der Motor dem Plus- oder Minus-Grenzwert nähert, wird er mit dieser Geschwindigkeit abgebremst, bis er am Grenzwert stoppt. Beim Start wird die Beschleunigung auf 1,0 Schritte/Sek/Sek eingestellt. Die Beschleunigungseinstellung ist immer eine +ve-Zahl. Das Vorzeichen der Einstellung setSpeed(float) legt die Bewegungsrichtung des Motors fest.

setSpeed(float) stellt die Geschwindigkeit ein, auf die der Motor von seiner aktuellen Geschwindigkeit beschleunigt / verzögert wird. Die über setSpeed(float) einstellbare Geschwindigkeit wird im Absolutwert durch die Einstellungen setMaxSpeed(float), default 1000 Schritte/sec und setMinSpeed(float), default 0.003 Steps/sec begrenzt. Diese Voreinstellungen sind auch die absoluten hartcodierten Geschwindigkeitsbegrenzungen, die die Bibliothek für setMaxSpeed() und setMinSpeed() akzeptiert. Wenn Sie eine Höchstgeschwindigkeit > 1000 Schritte/Sek. einstellen möchten, müssen Sie die erste Zeile in der Datei SpeedStepper.cpp bearbeiten, um maxMaxSpeed(1000) auf die gewünschte Höchstgeschwindigkeit zu ändern. In der Praxis wird die maximale Geschwindigkeit auch durch die Zeit zwischen den Aufrufen der run()-Methode der Bibliothek begrenzt. Für 1000 Schritte/s muss die Methode run() mindestens alle 1ms aufgerufen werden. Siehe den Abschnitt Latenz unten.

Wenn Sie versuchen, eine Drehzahl unter der Mindestdrehzahl einzustellen, stoppt der Motor. Jeder dieser Setter hat einen entsprechenden Getter, siehe die Datei SpeedStepper.h. Für die Geschwindigkeit gibt getSetSpeed() die über setSpeed() eingestellte Geschwindigkeit zurück, während getSpeed() die aktuelle Motorgeschwindigkeit zurückgibt, die beim Beschleunigen/Abbremsen auf die eingestellte Geschwindigkeit variiert. Wenn der Motor nicht in die Richtung läuft, in die Sie sich ein +ve vorstellen, können Sie invertDirectionLogic() aufrufen, um die Bewegungsrichtung des Motors für +ve-Geschwindigkeiten zu tauschen.

getCurrentPosition() gibt die aktuelle Motorposition im Vergleich zu 'home' (0) zurück. Sie können die aktuelle Motorposition setCurrentPosition(int32_t) übersteuern. Die neue Position wird auf die eingestellten Plus-/Minus-Grenzen begrenzt.

Anfänglich wird der Motor auf Position 0 gestoppt. Der Aufruf von setSpeed(50.0) bewirkt eine Beschleunigung in +ve-Richtung auf eine maximale Geschwindigkeit von 50 Schritten/min. Der Aufruf von hardStop() stoppt den Motor sofort dort, wo er ist. Andererseits wird durch Aufrufen der stop()-Methode die Geschwindigkeit auf Null gesetzt und der Motor bis zum Stillstand abgebremst. Der Aufruf von stopAndSetHome() stoppt den Motor sofort und setzt seine Position auf 0. Die Plus/Minus-Grenzwerte werden nicht geändert, sondern beziehen sich jetzt auf diese neue 0 (Home) Position. Der Aufruf von goHome() bringt den Stepper in diese 0 (Ausgangsposition) zurück und stoppt. Der Aufruf von setSpeed() bricht die Heimreise ab.

Die SpeedStepper-Bibliothek bietet auch eine Geschwindigkeitsprofilsteuerung über die Methoden setProfile(SpeedProfileStruct* profileArray, size_t arrayLen), startProfile(), stopProfile(), um ein laufendes Profil zu unterbrechen, und isProfileRunning(). Siehe Beispielskizze speedStepperProfile.

Schritt 2: Ausführen des SpeedStepperPlot-Beispiels ohne Motor

Ausführen des SpeedStepperPlot-Beispiels ohne Motor
Ausführen des SpeedStepperPlot-Beispiels ohne Motor

Arduino IDE V1.8.9 installierenLaden Sie die SpeedStepper-Bibliothek herunter und installieren Sie sie Speichern Sie die SpeedStepper.zip und verwenden Sie dann den Arduino IDE-Menüpunkt Sketch → Include Library → Add. ZIP library, um die Bibliothek zu importieren Laden Sie auch die millisDelay-Bibliothek herunter und installieren Sie sie

Öffnen Sie die Beispiele → SpeedStepper → speedStepperPlot Beispielskizze (starten Sie die IDE ggf. neu). Dieser Sketch ist so konfiguriert, dass er mit Serial arbeitet, z. B. UNO und Mega etc. Für die Ausführung auf dem SparkFun Redboard Turbo siehe unten.

Für dieses Beispiel ist keine Treiberplatine oder kein Schrittmotor erforderlich. Diese Beispiele verwenden D6 und D7 als Ausgänge. Sie können die Ausgangspins in einen beliebigen digitalen Ausgang ändern, indem Sie die Einstellungen STEP_PIN und DIR_PIN oben in der Skizze ändern.

Laden Sie die Skizze auf die Platine und öffnen Sie dann Tools → Serial Plotter bei 115200 Baud, um den Plot der Geschwindigkeit (ROT) und der Position (BLAU) anzuzeigen auf der x-Achse. Die Minusgrenze ist -510. Die Position stoppt bei ~-390, weil die Geschwindigkeit auf 0.0 gefordert wurde. Beim Punkt 380 auf der x-Achse wird der goHome-Befehl ausgegeben, der den Stepper in die Nullposition zurückführt.

Diese speedStepperPlot-Skizze verwendet millisDelays, um zeitlich zwischen verschiedenen Geschwindigkeiten und Beschleunigungen zu wechseln. In vielen Fällen ist die Verwendung eines SpeedStepperProfile, wie im nächsten Beispiel, einfacher.

Schritt 3: Ausführen des SpeedStepperProfile-Beispiels ohne Motor

Ausführen des SpeedStepperProfile-Beispiels ohne Motor
Ausführen des SpeedStepperProfile-Beispiels ohne Motor

Öffnen Sie die Beispielskizze Beispiele → SpeedStepper → speedStepperPlot. Diese Skizze erzeugt den obigen Plot mit dem Arduino Serial Plotter und ist ein Beispiel für das Ausführen eines vorgeschriebenen Geschwindigkeitsprofils, wenn Sie beispielsweise eine Pumpe betreiben.

Stepper Speed Profiles bestehen aus einem Array von SpeedProfileStruct, das in der Datei SpeedStepper.h definiert ist.

struct SpeedProfileStruct {

Schwimmgeschwindigkeit; // die Zielgeschwindigkeit am Ende dieses Schrittes unsigned long deltaTms; // die Zeit, um von der aktuellen Geschwindigkeit (zu Beginn dieses Schritts) auf die Zielgeschwindigkeit zu beschleunigen};

Definieren Sie ein Array von SpeedProfileStruct, das die Zielgeschwindigkeit für jeden Schritt und die Zeit, deltaTms, in ms enthält, um diese Zielgeschwindigkeit von der vorherigen Zielgeschwindigkeit zu erreichen. Wenn deltaTms null oder sehr klein ist, springt die Geschwindigkeit einfach sofort auf die neue Zielgeschwindigkeit. Andernfalls wird die erforderliche Beschleunigung berechnet. setAcceleration() wird aufgerufen, gefolgt von einem Aufruf von setSpeed() für die neue Zielgeschwindigkeit. In allen Fällen wird das Profil durch die bestehenden Plus- und Minus-Positionsgrenzen und Max/Min-Geschwindigkeitseinstellungen begrenzt. Wenn Sie eine Geschwindigkeit halten möchten, wiederholen Sie einfach die vorherige Geschwindigkeit mit der gewünschten Zeit. Da die neue Zielgeschwindigkeit der aktuellen Geschwindigkeit entspricht, ist die berechnete Beschleunigung Null und es erfolgt keine Geschwindigkeitsänderung.

Dieses SpeedProfileStruct-Array hat das obige Diagramm erzeugt

const SpeedProfileStruct profile = { { 0, 0}, // sofort stoppen, wenn nicht bereits gestoppt { 0, 1000}, // Null 1 Sek. halten { -50, 0}, // zu -50 springen { -200, 2000}, // Rampe auf -200 { -200, 6000}, // Halte bei -200 für 6 Sekunden { -50, 2000}, // Rampe auf -50 { 0, 0}, // // Sofort stoppen { 0, 1500}, // Null für 1,5 Sek. halten { 50, 0}, // auf 50 springen { 200, 2000}, // auf 200 hochfahren { 200, 6000}, // 200 für 6 Sek. halten { 50, 2000}, // Rampe auf 50 { 0, 0}, // // sofort stoppen { 0, 1000} // Null halten // zum Plotten der Ausgabe }; const size_t PROFILE_LEN = sizeof(Profil) / sizeof(SpeedProfileStruct); // Berechne die Größe des Profilarrays

Das Profil wird durch Aufruf von setProfile(SpeedProfileStruct* profileArray, size_t arrayLen) z. B. stepper.setProfile(Profil, PROFILE_LEN);

Nachdem das Profil eingestellt wurde, rufen Sie startProfile() auf, um es mit der aktuellen Motordrehzahl zu starten (normalerweise starten Sie bei gestoppt). Am Ende des Profils läuft der Motor einfach mit der letzten Solldrehzahl weiter. Die Methode isProfileRunning() kann aufgerufen werden, um zu sehen, ob das Profil noch läuft. Wenn Sie das Profil vorzeitig stoppen möchten, können Sie stopProfile() aufrufen, wodurch das Profil verlassen und der Motor angehalten wird.

Schritt 4: Ausführen des SpeedStepperSetup-Beispiels ohne Motor

Die Beispielskizze dient als Grundlage für Ihre eigene Schrittmotoranwendung. Es bietet eine menügesteuerte Schnittstelle, die es Ihnen ermöglicht, den Motor in seine Ausgangsposition zu bewegen, falls nicht bereits vorhanden, und dann optional die Plus- und Minusgrenzen zurückzusetzen und dann den Motor innerhalb dieses Bereichs laufen zu lassen. Das 'Run'-Menü ermöglicht es Ihnen, die Geschwindigkeit zu erhöhen und zu verringern, bei der aktuellen Geschwindigkeit einzufrieren, anzuhalten und auch nach Hause zurückzukehren.

Diese Skizze veranschaulicht eine Reihe von Softwarefunktionen, die loop() reaktionsfähig halten, sodass Sie Ihre eigenen Sensoreingänge hinzufügen können, um den Stepper zu steuern. Es gilt, Verzögerungen zu vermeiden, die die Geschwindigkeitsregelung stören würden. (Siehe Verzögerungen sind böse)

Installieren Sie die Bibliotheken, die zum Ausführen von SpeedStepperPlot oben verwendet werden, und installieren Sie dann auch die pfodParser-Bibliothek. Die pfodParser-Bibliothek stellt die Klassen NonBlockingInput und pfodBufferedStream bereit, die verwendet werden, um die Benutzereingabe und die Menüausgabe zu verarbeiten, wobei die Ausführung von loop() blockiert wird.

Öffnen Sie das Beispiel Beispiele → SpeedStepper → speedSpeedSetup Beispiel. Dieser Sketch ist so konfiguriert, dass er mit Serial arbeitet, z. B. UNO und Mega etc. Für die Ausführung auf dem SparkFun Redboard Turbo siehe unten.

Für dieses Beispiel ist keine Treiberplatine oder kein Schrittmotor erforderlich. Diese Beispiele verwenden D6 und D7 als Ausgänge. Sie können die Ausgangspins in einen beliebigen digitalen Ausgang ändern, indem Sie die Einstellungen STEP_PIN und DIR_PIN oben in der Skizze ändern. Laden Sie die Skizze auf das Board hoch und öffnen Sie dann Tools → Serial Monitor bei 115200, um das SETUP-Menü anzuzeigen.

SETUP pos:0 sp:0.00 +Lim:500000 -Lim:-500 LATENCY: stepper:492uS loop:0uS p -- set Home l -- set limit h -- goHome r -- run >

Wenn die Skizze ausgeführt wird, wird die aktuelle Position des Steppers als „Ausgangsposition“(0) verwendet. Wenn Sie den Stepper wieder in seine wahre „Ausgangsposition“positionieren müssen, geben Sie den Befehl p ein, um das Menü SET HOME anzuzeigen

SET HOME pos:0 sp:0.00 +Lim:1073741808 -Lim:-1073741808 LATENCY: stepper:752uS loop:3852uS x -- setHome hier und beenden + -- Forward - -- Reverse s -- swap Forward/Reverse -- hardStop >

Wie Sie sehen, wurden die in der Skizze codierten Grenzen entfernt, sodass Sie den Stepper überall neu positionieren können. Sie müssen aufpassen, dass Sie es nicht über die körperlichen Grenzen hinausfahren, oder Sie könnten etwas kaputt machen.

Verwenden Sie + cmd, um den Schrittmotor vorwärts zu bewegen, wenn Sie feststellen, dass er sich in die falsche Richtung bewegt, geben Sie einen Nicht-Befehl oder nur eine leere Zeile ein, um ihn zu stoppen, und verwenden Sie dann den Befehl s, um die Richtung von Vorwärts zu wechseln. Sie sollten die Skizze aktualisieren, um einen Aufruf von invertDirectionLogic() in das Setup aufzunehmen, um dies für die nächste Ausführung zu beheben.

Verwenden Sie die + / - cmds, um den Stepper in die richtige Nullposition zu bringen. Der Motor startet langsam und erhöht dann die Geschwindigkeit, während er fortschreitet. Verwenden Sie einfach eine leere Leitung, um ihn zu stoppen. Die maximale Geschwindigkeit für dieses und das Limits-Menü wird durch MAX_SETUP_SPEED oben in setupMenus.cpp eingestellt.

Nachdem der Motor in seiner „Ausgangsposition“positioniert wurde, verwenden Sie x cmd, um die aktuelle Position auf 0 zurückzusetzen und zum SETUP-Menü zurückzukehren.

Wenn Sie die Grenzwerte einstellen müssen, normalerweise nur bei der Ersteinrichtung, verwenden Sie den l cmd, um das Menü SET LIMITS aufzurufen

SET LIMITS pos:0 sp:0.00 +Lim:1073741808 -Lim:-1073741808 LATENCY: stepper:944uS loop:5796uS l -- setLimit here + -- Forward - -- Reverse h -- goHome x -- exit -- hardStop >

Verwenden Sie + cmd, um weiter zum Plus-Limit zu gelangen, und verwenden Sie dann den l cmd, um es als Plus-Limit festzulegen. Mit dem h-Befehl kann dann auf 0 zurückgekehrt und mit – cmd die Position des Motors an der Minusgrenze angefahren werden. Verwenden Sie erneut l cmd, um die Minusgrenze festzulegen. Notieren Sie die Positionen der Plus- und Minusgrenzen und aktualisieren Sie die setPlusLimit- und setMinusLimit-Anweisungen der setup()-Methode mit diesen Werten.

Wenn die Grenzen eingestellt sind, verwenden Sie x cmd, um zum SETUP-Menü zurückzukehren und dann können Sie mit r cmd das RUN-Menü öffnen

RUN MENU pos:0 sp:3.31 +Lim:500000 -Lim:-500 LATENCY: stepper:944uS loop:5796uS + -- Speed up - -- Speed down h -- goHome. -- HardStop -- Freeze Speed >+ pos:4 sp:9.49 +Lim:500000 -Lim:-500 LATENCY: stepper:792uS loop:5664uS pos:42 sp:29.15 +Lim:500000 -Lim:-500 LATENCY: stepper:792uS loop:5664uS pos:120 sp:49.09 +Lim:500000 -Lim:-500 LATENCY: stepper:792uS loop:5664uS pos:238 sp:69.06 +Lim:500000 -Lim:-500 LATENCY: stepper:792uS loop: 5664uS

Das + cmd beginnt in Vorwärtsrichtung zu beschleunigen und druckt alle 2 Sekunden die Position und Geschwindigkeit aus. Wenn der Motor die gewünschte Geschwindigkeit erreicht hat, können Sie die Beschleunigung mit jeder anderen Taste (oder einem leeren Eingang) stoppen. Sie können die Geschwindigkeit mit der Taste – cmd down to stop reduzieren. Wenn der - cmd gestoppt wird, beschleunigt er rückwärts.

Dieses RUN-Menü ermöglicht die manuelle Steuerung Ihres Projekts. Für die automatische Steuerung müssen Sie einige andere Sensoren hinzufügen.

Schritt 5: Latenz

Die Schrittmotorsteuerung hängt von der Software ab, die jeden Schritt befiehlt. Um die eingestellte Geschwindigkeit beizubehalten, muss Ihre Skizze die stepper.run()-Methode oft genug aufrufen, um den nächsten Schritt zum richtigen Zeitpunkt für die aktuelle Geschwindigkeit auszulösen. Für die Steuerung über Sensoren müssen Sie neue Messwerte zeitnah verarbeiten können. Der Positions-/Geschwindigkeitsausdruck enthält zwei LATENCY-Messungen, damit Sie überprüfen können, ob Ihre Skizze schnell genug ist.

Stepper-Latenz (pfodBufferedStream)

Die Stepper-Latenz misst die maximale Verzögerung zwischen aufeinanderfolgenden Aufrufen der stepper.run()-Methode. Um den Schrittmotor mit 1000 Schritten pro Sekunde zu betreiben, muss die Schrittlatenz weniger als 1000uS (1mS) betragen. Die erste Version dieses Sketches hatte eine Latenz von vielen Millisekunden. Um dies zu umgehen, wurden zusätzliche Aufrufe der Methode runStepper() (die stepper.run() aufruft) über den Code hinzugefügt. Dies löste das Problem nicht vollständig, da die Menü- und Ausgabedruckanweisungen die Skizze blockierten, sobald der kleine Serial Tx-Puffer voll war. Um diese Blockierung zu vermeiden, wurde pfodBufferedStream aus der pfodParser-Bibliothek verwendet, um einen 360-Byte-Ausgabedruckpuffer hinzuzufügen, in den die Druckanweisungen schnell schreiben konnten. Dann gibt pfodBufferedStream die Bytes mit der hier angegebenen Baudrate von 115200 frei. pfodBufferedStream hat die Möglichkeit, entweder zu blockieren, wenn der Puffer voll ist, oder einfach die Überlaufzeichen zu löschen. Hier wird eingestellt, dass alle zusätzlichen Zeichen gelöscht werden, wenn der Puffer voll ist, damit die Skizze nicht blockiert wird, während sie darauf wartet, dass Serial Zeichen sendet.

Schleifenlatenz (NonBlockingInput)

Die Schleifenlatenz misst die maximale Verzögerung zwischen aufeinanderfolgenden Aufrufen der Methode loop(). Damit legen Sie fest, wie schnell Sie neue Sensormessungen verarbeiten und die Solldrehzahl des Motors anpassen können. Wie schnell dann sein muss, hängt davon ab, was Sie zu kontrollieren versuchen.

Die Verzögerungen aufgrund der print-Anweisungen wurden durch die Verwendung von pfodBufferedStream oben entfernt, aber um die Eingabe des Benutzers zu verarbeiten, müssen Sie nur das erste Zeichen der Eingabe nehmen und den Rest der Zeile ignorieren. Die NonBlockingInput-Klasse in der pfodParer-Bibliothek wird verwendet, um mit readInput() ein Zeichen ungleich Null zurückzugeben, wenn eine Eingabe erfolgt, und die folgenden Zeichen mit clearInput() zu löschen und zu verwerfen, bis 10 ms lang keine Zeichen empfangen werden, ohne die Schleife zu blockieren ()

Natürlich wird die Loop-Latenz durch den zusätzlichen Code erhöht, den Sie hinzufügen, um die Sensoren auszulesen und die neue Sollgeschwindigkeit zu berechnen. Viele Sensorbibliotheken verwenden nur eine Verzögerung (..) zwischen dem Starten einer Messung und dem Abrufen des Ergebnisses. Sie müssen diese Bibliotheken neu schreiben, um stattdessen millisDelay zu verwenden, um die Messung nach einer geeigneten nicht blockierenden Verzögerung aufzunehmen.

Schritt 6: Ausführen von SpeedStepperSetup mit einem Schrittmotor und SparkFun Redboard Turbo

Ausführen von SpeedStepperSetup mit einem Schrittmotor und SparkFun Redboard Turbo
Ausführen von SpeedStepperSetup mit einem Schrittmotor und SparkFun Redboard Turbo
Ausführen von SpeedStepperSetup mit einem Schrittmotor und SparkFun Redboard Turbo
Ausführen von SpeedStepperSetup mit einem Schrittmotor und SparkFun Redboard Turbo

Um die SpeedStepperSetup-Skizze wirklich auszuführen, benötigen Sie einen Schrittmotor, einen Treiber und ein Netzteil und in diesem Beispiel SparkFun Redboard Turbo.

Der obige Schaltplan (pdf-Version) zeigt die Anschlüsse. Ändern Sie in der SpeedStepperSetup-Skizze die SERIAL-Definition in #define SERIAL Serial1

Schrittmotor, Netzteil, Treiber und Schutz

Es gibt viele Arten und Größen von Schrittmotoren. Hier wird ein 12V 350mA Schrittmotor mit zwei Spulen zum Testen verwendet. Um diesen Stepper mit Strom zu versorgen, benötigen Sie eine Stromversorgung von 12V oder mehr und mehr als 350mA.

Diese Bibliothek bietet nur eine Richtungs- und Schrittausgabe, sodass Sie einen Treiber für die Schnittstelle mit dem Schrittmotor benötigen. Der Easy Driver und Big Easy Driver steuern den Strom zu den Spulen des Motors, so dass Sie sicher eine Stromversorgung mit einer höheren Spannung verwenden können, beispielsweise mit einer 6-V-Versorgung für einen 3,3-V-Motor. Der Easy Driver kann zwischen 150mA/Spule und 700mA/Spule liefern. Bei höheren Strömen kann der Big Easy Driver bis zu 2A pro Spule liefern. Lesen Sie die FAQs unten auf der Easy Drive-Seite.

In diesen Beispielen werden D6 und D7 als Step- und Direction-Ausgänge verwendet. Sie können die Ausgangspins in einen beliebigen digitalen Ausgang ändern, indem Sie die Einstellungen STEP_PIN und DIR_PIN oben in der Skizze ändern.

Programmierung des Sparkfun Redboard Turbo

Die Programmierung des Redboard Turbo ist problematisch. Wenn die Programmierung fehlschlägt, drücken Sie zuerst einmal die Reset-Taste und wählen Sie den COM-Port im Arduino-Tools-Menü erneut aus und versuchen Sie es erneut. Wenn dies nicht funktioniert, drücken Sie die Reset-Taste zweimal und versuchen Sie es erneut.

Den Easy Driver verkabeln

Zwei Spulenschrittmotoren haben 4 Drähte. Verwenden Sie ein Multimeter, um die Paare zu finden, die mit jeder Spule verbunden sind, und verdrahten Sie dann eine Spule mit den Easy Driver A-Klemmen und die andere Spule mit B-Klemme. Es spielt keine Rolle, in welcher Richtung Sie sie verdrahten, da Sie mit dem s cmd im Setup-Menü die Bewegungsrichtung wechseln können.

Die Motorstromversorgung ist mit M+ verdrahtet und GNDStellen Sie den Logikpegel der Platine mit dem 3/5V-Link ein. Schließen Sie die Verbindung für 3,3-V-Mikroprozessorausgänge wie das SparkFun Redboard Turbo kurz (wenn Sie es offen lassen, ist es für 5V-Digitalsignale geeignet, z. B. UNO, Mega) Verbinden Sie die GND-, STEP-, DIR-Pins mit dem Mikroprozessor GND und dem Schritt und dir Ausgangspins. Es sind keine weiteren Anschlüsse erforderlich, um den Motor anzutreiben.

Serielles USB-auf-TTL-Kabel

Wenn Sie die SpeedStepperSetup-Skizze vom Uno/Mega zum Redboard Turbo verschieben, können Sie #define SERIAL Serial durch #define SERIAL SerialUSB ersetzen, um der seriellen Redboard Turbo-USB-Verbindung gerecht zu werden. Das ist 10x langsamer als bei der UNO. Dies liegt daran, wie die Redboard-CPU die USB-Verbindung handhabt. Um dies zu überwinden, schließen Sie ein serielles USB-zu-TTL-Kabel an D0/D1 an und setzen Sie #define SERIAL Serial1, um die serielle Hardwareverbindung zur Steuerung des Schrittmotors zu verwenden. Die Verwendung von Serial1 ergibt LATENZ: stepper:345uS loop:2016uS was dreimal schneller ist als die UNO für die Stepper- und Schleifenlatenz

Terminalprogramm

Der Arduino Serial Monitor ist etwas schwieriger zu verwenden, um den Schrittmotor zu steuern, da Sie das Zeichen in der cmd-Zeile eingeben und dann die Eingabetaste drücken müssen, um es zu senden. Ein schnelleres und reaktionsschnelleres Mittel ist das Öffnen eines Terminalfensters, TeraTerm für PC (oder CoolTerm Mac), das an den COM-Port des USB-zu-TTL-Kabels angeschlossen ist. Dann wird es in diesem Fenster durch Drücken einer cmd-Taste sofort gesendet. Wenn Sie die Eingabetaste drücken, senden Sie einfach eine leere Zeile.

Einstellen des Motordrehzahlbereichs

Wie oben verdrahtet, ist der Easy Drive für 1/8-Schritte konfiguriert, so dass 1000 Schritte/Sek. den Motor mit 1000 / 8 / 200 Schritten/Umdrehung = 0,625 Umdrehungen pro Sekunde oder maximal 37,5 U/min drehen. Durch Umstellen der Eingänge auf MS1/MS2 können Sie zwischen 1/8, ¼, ½ und Vollschritten umschalten. Für vollständige Schritte verbinden Sie sowohl MS1 als auch MS2 mit GND. Dies ermöglicht Drehzahlen von bis zu 300 U/min. Durch Auswahl der entsprechenden MS1/MS2-Einstellungen können Sie das installierte Übersetzungsverhältnis zwischen Motor und angetriebenem Teil anpassen.

Hardware-Schutz

Während Sie mit der SpeedStepper-Bibliothek Positionsgrenzen für die Motorbewegung festlegen können, erfolgt das Anheften der Position durch Zählen der von der Software ausgegebenen Schritte. Wenn der Motor blockiert, d. h. das Drehmoment nicht ausreicht, um den Motor im nächsten Schritt anzutreiben, ist die Softwareposition nicht mit der Motorposition synchron. Wenn Sie dann den 'goHome'-Befehl verwenden, überschwingt der Motor die Home-Position. Um Schäden an der Hardware zu vermeiden, sollten Sie Endschalter an den harten Grenzen anbringen, um die Motorstromversorgung zu trennen

Einstellen der Motorstrombegrenzung

Stellen Sie es zuerst auf die niedrigste Einstellung des Potentiometers. d.h. die Spannung an TP1 ist minimal. Das Potentiometer ist empfindlich, also zwingen Sie das Potentiometer nicht über die mechanischen Anschläge hinaus. Stellen Sie den Motor auf eine langsame, gleichmäßige Geschwindigkeit ein und drehen Sie dann langsam das Potentiometer, bis der Motor zwischen den Schritten nicht überspringt oder ruckelt.

Abschluss

Dieses Projekt zeigt, wie Sie die SpeedStepper-Bibliothek in einer praktischen Anwendung einsetzen. Während die AccelStepper-Bibliothek eine gute Positionssteuerung bietet, wurde die Geschwindigkeitssteuerung für den Prototypen der Eisschmelzsonde zum Sammeln biologischer Proben auf Europa benötigt.

Empfohlen: