Hallo, ich habe gerade angefangen mich mit den Arduinos/Atmel AVRs zu beschäftigen. Habe auch erste Erfolge zu verbuchen (ansteuern A4988, serielle Schnittstelle, etc.). Jedoch stört mich eine Sache wenn ich den Arduino resette/programmiere, "spinnt" der Arduino für ca. 3 Sek. D.h. der Schrittmotor an pin 13 (A4988->STEP) dreht lustig vor sich hin, also gibt der Arduino dort ein PWM Signal raus. Danach führt er mein Programm wie gewollt aus. Kann man dagegen was machen? Vielen Dank Der Vollständigkeit halber nachfolgend der Code der rein zu Testzwecken dient: #define MOTORLEFT_DIR_FORWARD HIGH #define MOTORRIGHT_DIR_FORWARD LOW void setup() { pinMode(8, OUTPUT); pinMode(9, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); } void loop() { digitalWrite(8, MOTORLEFT_DIR_FORWARD); digitalWrite(12, MOTORRIGHT_DIR_FORWARD); digitalWrite(9, HIGH); digitalWrite(13, HIGH); delay(150); digitalWrite(9, LOW); digitalWrite(13, LOW); delay(150); }
Vollnoob schrieb: > also > gibt der Arduino dort ein PWM Signal raus. Danach führt er mein Programm > wie gewollt aus. Sicher? Könnte aber auch so sein, dass der Programmer den Schrittmotortreiber "mitversorgt", du also die Programmierbits zu sehen bekommst. Dagagen hilft es, einen Enable-Eingang des Treibers mit einem Pin oder einem Pull-Up/Down-Widerstand zu beschalten.
Das liegt am Bootloader. Für solche "empfindliche" Hardware solltest du die SPI Pins sowie UART0 Pins vermeiden. (D11, D12, D13, D0, D1)
Super vielen Dank. Also an die SPI/UART pins lieber irgendwelche passiven Komponenten dranhängen.
Noch eine Anmerkung zum bereits Gesagten: D13 ist der LED-Pin, der Bootloader blinkt beim Start einige Male die LED. Du kannst deinen Aufbau so lassen, wenn du dafür sorgst, dass der Arduino erst über sein Programm den Motortreibern ein enable-Signal gibt. Das ist sowieso empfehlenswert, da der Arduino mit High-Z-Ausgängen startet und somit die Signalleitungen zu den Motortreibern empfindlich auf Einstrahlung sind. Sinnvoll ist hier also, enable der Motortreiber auch vom Arduino steuern zu lassen, ihn aber über einen Widerstand so an eine Spannung zu legen, dass die Motortreiber standardmäßig ausgeschaltet sind (wenn es "enable" ist, dann brauchst du einen Widerstand gegen GND (pulldown), wenn es "~enable" ist, dann brauchst du einen Widerstand gegen Vdd (pullup). 10k sollten reichen.)
Auch würde es nicht schaden die Ausgänge erstmal auf LOW zu setzen. Das am Anfang des Programms, denn dann hat dein Programm immer und ganz sicher einen definierten Ausgangszustand.
:
Bearbeitet durch User
F. F. schrieb: > dann hat dein Programm immer und ganz > sicher einen definierten Ausgangszustand. Das greift erst NACH dem Bootloader.
F. F. schrieb: > erstmal auf LOW zu setzen Bist Du Dir sicher? Üblich ist das inaktive mit Pullup, Ausgänge hochohmig. Und das active-low. Natürlich gibt es massenweise Ausnahmen, jeder macht es nach Gutdünken. Aber Pull-Up Widerstände sind eingebaut, nach Bedarf zuschaltbar. Pull-down Widerstände sind eher unüblich. Früher (TM) konnten die 74xx TTL-Bausteine brauchbar Strom nach Null schalten, das hat für eine LED gereicht (20mA), die war dann aktiv bei Low. Die Stromtreibfähigkeit bei High war eher untergeordnet.
Vielen Dank für eure Antworten. Ich habe nur noch eine Frage zu den Pullup-Widerstand. Da es an meinem A4988 ein ~ENABLE ist (also LOW = Eingeschaltet) lege ich den Pullup an VCC (Logik) und schließe z.B. pin 3 des Arduinos zwischen Widerstand und ENABLE. Und wenn ich dann den pin 3 auf LOW stelle ist ~ENABLE = Enabled, ist das so richtig ?
Vollnoob schrieb: > ist das so richtig ? Da du ein Arduino Programm zeigst, vermute ich ganz stark, dass du den Baustein nicht selber beschaltest. Also vermutlich sowas verwenden möchtest: http://www.exp-tech.de/a4988-stepper-motor-driver-carrier Da ist zu sehen, dass ENABLE schon mit einem 100K Pulldown versehen wurde.
Vollnoob schrieb: > Da es an meinem A4988 ein ~ENABLE ist (also LOW = Eingeschaltet) lege > ich den Pullup an VCC (Logik) und schließe z.B. pin 3 des Arduinos > zwischen Widerstand und ENABLE. Und wenn ich dann den pin 3 auf LOW > stelle ist ~ENABLE = Enabled, ist das so richtig ? Ulrich F. schrieb: > Da ist zu sehen, dass ENABLE schon mit einem 100K Pulldown versehen > wurde. Er braucht aber einen Pullup. Wenn der Pulldown vorhanden ist, dann darf der Pullup nicht zu klein werden.
Vielen Dank(!) für eure Antworten. Habe nun nach dem Motto "probieren geht über studieren" es einfach mal so angeklemmt wie in meinem letzten Post angegeben. Läuft jetzt wie gewünscht und auch das "rumgezicke" nach reset/program hat ein Ende. @Ulrich F.: Ja genau habe ein fertiges (noname)Breakout-Board für 3€/Stk. (sicher aus dem tiefsten Hindukusch?! :) ) genommen.
abc.def schrieb: > F. F. schrieb: >> erstmal auf LOW zu setzen > > Bist Du Dir sicher? Üblich ist das inaktive mit Pullup, Ausgänge > hochohmig. Und das active-low. Dann halt andersrum. Mir ging es um den definierten Zustand. Dass das aber nicht die grundsätzliche Lösung für sein Problem ist (bootloader), war mir klar. Pullup/-down wurde ja schon geschrieben. Das man gerade bei der Hardware schon von vorn herein alles machen muss, um Störungen zu vermeiden, setzte ich mal als bekannt bei allen Tippgebern voraus.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.