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