Arduino Schrittmotor?
Hallo,
ich wollte mal aus Interesse einen Schrittmotor mit einem Microcontroller von Arduino Programmieren. Doch irgendwie klappt es nicht.
Ich benutze ein Nema 17 Schrittmotor mit a4988 Motor driver. Bis jetzt wollte ich den Schrittmotor nur mal schritt für schritt bewegen lassen, in dem ich ihn manuell mit dem a4988 fahren lasse. Also habe ich diesen wie folgt belegt:
Vmot: 12V
GND: GND
2B: Motor
2A: Motor
1B: Motor
1A: Motor
VDD: 5V von Arduino
GND: GND von Arduino
EN: Nichts
MS1: Nichts
MS2: Nichts
MS3: Nichts
Reset mit Sleep verbunden
Step: nichts
Dir: nichts
Jetzt habe ich mir gedacht, wenn ich das so anschließe, würde der Motor nichts machen und ich kann, wenn ich auf dem Step Pin 5v draufgebe den Motor einen Schritt, also 1,8 grad bewegen lassen. Also immer einen Impuls draufgebe und wenn ich 200 Impulse draufgebe, würde ich den Motor 360 grad drehen.
Was wirklich passiert: Der Motor rastet aus und vibriert und dreht sich manchmal, manchmal nicht und vibriert halt.
Ich verstehe nicht warum das so ist, eigentlich sollte er doch nichts machen, bis ich auf dem Step Pin einen Impuls draufgebe, dann sollte er 1,8 grad sich drehen und stehen bleiben, bis der nächste Impuls kommt.
Oder sehe ich das falsch?
Kann es sein, dass es billige Motor driver sind, die nicht richtig funktionieren? Ich meine, die waren schon sehr billig und es waren 6 dabei. Oder habe ich einen Fehler gemacht oder nicht richtig verstanden, wie ein Schrittmotor driver funktioniert?
Kann mir da jemand helfen?
4 Antworten
Mache es doch mal richtig und schließe alle Eingänge an: Enable auf GND, Reset auf VDD, DIR (Richtung) wahlweise auf GND oder VCC und dann schaust du mal nach MS1-MS3 im Datenblatt. Wenn ich das richtig in Erinnerung habe, ist das die Schrittweite? Das sollte für das erste Experiment auf Vollschritt stehen.
Und schau noch mal, ob du die Spulen richtig angeschlossen hast.
Liefert deine Spannungsversorgung genügend Strom, dass sie nicht kurzzeitig zusammenbricht?
[...] schaust du mal nach MS1-MS3 im Datenblatt. Wenn ich das richtig in Erinnerung habe, ist das die Schrittweite? Das sollte für das erste Experiment auf Vollschritt stehen. [...]
Richtig, MS1-MS3 sind für die Schrittweite. Alle drei auf GND für Vollschritt.
Danke für deine Antwort, ich lege mal die pins die ich nicht verwende auf GND und schaue dann nochmal.
Strom habe ich sie eingestellt, dass er nicht summt. Er dreht sich ja nur frei, also ohne last, sollte ja erstmal reichen.
Vielleicht ist der Motor falsch angeschlossen.
Versuche mal eine Spule vom Motor umzupolen. Sprich die Anschlüsse an 1A und 1B (oder 2A und 2B) miteinander zu tauschen.
--- edit ---
Datenblatt Motor
Datenblatt a4988


Ich habe in meiner Antwort zur Verdeutlichung Auszüge von Datenblättern eingefügt.
Die Kabelfarben deines Motors müssen nicht unbedingt mit dem Datenblatt übereinstimmen. Da musst du mal in das Datenblatt deines Motors schauen.
Die 1. Spule A (rot) muss mit 1A/1B vom Treiber verbunden werden, und 2. Spule B (grün) mit 2A/2B.
Nun kannst du ggf. probieren die Anschlüsse einer Spule zu tauschen, also statt 1A/1B dann 1B/1A.
Ah vielen dank, ich dachte 1A und 2A wäre ein paar, aber dann doch nicht. Ist die polarität innerhalb eines Paars, also 1A und 1B wichtig oder erstmal nicht und nur für die Drehrichtung wichtig?
Ich würde erstmal jeweils den (+) der Spulen auf A legen. Sollte dann der Motor nicht oder unrund laufen, kannst du wie gesagt bei einer Spule die Anschlüsse tauschen.
Die Drehrichtung kannst du dann später über den DIR-Pin steuern.
Du solltest Step und Dir an den Arduino anhängen und beide als Output setzen und entsprechend ansteuern.
Ich kenne dein Breakoutboard nicht aber die Eingänge sollten beide nicht floating sein.
Ich kann nicht C++ programmieren, ich kann FUP und KOP. Ich benutze Openplc zum programmieren.
Das ist doch egal. Auch FUP sollte dir eine Kontrolle über die GPIO Pins geben.
Du kannst auch dir dauerhaft an 3.3V des Arduino hängen oder auf GND du solltest ihn aber nicht offen lassen, sofern das Breakoutboard das du verwendest da keinen Pullup oder Pulldown drauf hat.
Mein Arduino ist gerade eh kaputt, weil ich kann kein Programm mehr auf ihn laden, er zeigt den Fehler programmer nicht gefunden an, habe schon alles probiert. Seit dem ich ausversehen DO und Vin gebrückt habe geht es nicht mehr, vielleicht habe ich ihn kaputt gemacht. Aber es war auch kein originaler Arduino, es war ein nachtgemachter. Das Programm läuft noch, nur kann ich kein Programm mehr hochladen.
Entschuldigung, meinte DI. Hatte das Phänomen, dass der Eingang manchmal von sich selbst aktiviert hat und dann habe ich ausversehen DI mit Vin gebrückt, dann haben die leds mal kurz geleuchtet und dann hat der Eingang wieder funktioniert, aber konnte kein Programm mehr draufladen.
Hatte den Verdacht, dass auf dem DI eine Restspannung ist und ihn immer mal aktiviert hat. Ich meine 3,3v reichen schon aus, um ihn zu aktivieren. Das ist nicht viel. So habe ich ihn wahrscheinlich entladen, aber das Board kaputt gemacht.
Ob DI oder DO ist dafür egal. Ist am Ende eh der selbe Pin.
Hatte das Phänomen, dass der Eingang manchmal von sich selbst aktiviert
Dann musst du entweder in Hardware einen Pullup oder Pulldown Widerstand vorsehen oder du konfigurierst den Pin enrsprechend mit Pullup oder Pulldown.
Hatte den Verdacht, dass auf dem DI eine Restspannung ist und ihn immer mal aktiviert hat.
Restspannung weniger du hast immer Kriechströme und die können den Pin mal aktivieren.
Ich meine 3,3v reichen schon aus, um ihn zu aktivieren. Das ist nicht viel.
EIgentlich sehr viel wenn man sich andere Spannungspegel ansieht. Also wenn du da nicht über 10m weit gehen willst reicht 3.3V aus für einen sicheren Spannungshub.
Heute kam der neue Arduino uno r4 und wollte mein Programm drauf laden, doch er zeigt, die selbe Fehlermeldung an.
Das ist die Fehlermeldung:
Der Sketch verwendet 5544 Bytes (17%) des Programmspeicherplatzes. Das Maximum sind 32256 Bytes.
Globale Variablen verwenden 274 Bytes (13%) des dynamischen Speichers, 1774 Bytes für lokale Variablen verbleiben. Das Maximum sind 2048 Bytes.
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x65
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x65
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x65
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x65
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x65
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x65
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x65
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x65
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x65
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x65
Fehlgeschlagenes Hochladen: Hochladefehler: exit status 1
Es liegt nicht am Board, nicht am PC (hatte es an einem anderen PC getestet und genau der selbe fehler), hatte die Software Arduino IDE neu installiert und immer noch der selbe Fehler, hatte ein neues USB Kabel verwendet, andere Schnittstelle benutzt, Treiber deinstalliert und neu Installiert, aber alles kein Erfolg. Ich weiß wirklich nicht warum ich nichts mehr auf das Board uploaden kann. Auch komisch ist, dass es von einem auf den anderen Upload auf einmal nicht mehr geklappt hat.
Was kann ich noch machen?
Das meinte ich auch.
Du hast ein STK500?
Das STK Programmiert doch normal über ISP nicht über den Arduino Bootloader, außer du verwendest das STK nur als USB auf UART Bridge.
Wenn du einen Arduino hast dann kannst du den einfach per USB direkt an den PC anhängen ohne das STK500 dazwischen.
Ja aber da steht stk500 du hast kein stk500 sondern einen Arduino.
Das ist klar, dass er das nicht findet wenn keins am PC ist.
Ich kenne deine IDE nicht daher kenne ich die Einstellungen für den Arduino nicht aber das STK500 ist jedenfalls etwas anderes als ein Arduino.
Ich benutze Arduino IDE 2.3.6, kann in programmer noch mehr auswählen, aber eigentlich brauche ich das doch nicht, er soll das Programm doch eingeltich nur auf den Arduino uploaden. Aber ich glaube die Kommunikation zwischen PC und Arduino ist nicht vorhanden.
Ich kann auf dem programmer noch mehr auswählen, auch USBasp oder Arduino as ISP. Genau weiß ich nicht, für was der programmer ist. Aber egal was ich einstellen, er uploaded das Programm nicht. Habe ja auch an den Einstellungen nichts geändert und es hat vorher funktioniert.
Hallo,
EN, DIR und STEP sind schon die wichtigen Pins für den Schrittmotor-Treiber.
EN=Enable Damit wird der Motor-Treiber aktiv
DIR=Direction=Drehrichtung Damit kannst du anhand LOW/HIGH-Signal die Drehrichtung festlegen
STEP Das ist dein Schrittimpuls-EIngang
MS1-MS3 solltest du auch setzen, je nach schrittweite..
erst dann sollte auch mit STEP bei jedem impus sich der Motor bewegen.
Habe ich auch gemerkt, habe das jetzt verbessert, aber macht den selben Fehler. Er bewegt sich nicht einen Schritt weiter, wenn ich auf Step einen Impuls draufgebe. Normalerweise sollte dich 1B und 2B also B+ und B- mit einander verbunden werden und nicht 1A mit 1B oder?