Hallo,
nachdem ich nun einige Zeit mit 2 Stepper-Libraries experimentiert habe, nämlich "Stepper" der in den Arduino Beispielen vorhanden ist, und "CustomStepper".
Nachteile der Ersten:
- stoppt den Programmablauf in der Zeit, in der der Motor laufen soll. Ok kann man insbesondere bei Motoren mit integriertem Getriebe kurz halten.
- es ist zwar ein Quasi-Gleichzeitbetrieb von 2 oder mehreren Motoren möglich, aber nur immer mit einer, der kleinsten Speed.
- Strom wird bei Stillstand nicht abgeschaltet. Mag für ein Haltemoment manchmal nötig sein.
Nachteile der Zweiten:
- hohe Empfindlichkeit bei Zeitproblemen (kein delay, nicht zu schnelle Ausgabe mit Serial.print). Ich weiß, delay sollte man auch nicht verwenden!!
- beeinflusst offensichtlich auch andere Timer
Das ist sicher kein vollständiges Bild der beiden Libraries.
Nun 2 Fragen:
- gibt es für den Stepper doch eine Möglichkeit des gleichzeitigen Betriebs von 2 oder mehr Motoren mit unterschiedlichen Speeds?
- Gibt es eine andere Library für einen Stepperantrieb, die diese Nachteile nicht hat und bei der man evtl. einen Drehwinkel vorgeben kann?
Gruß
fredyxx
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Meinst du das damit oder die Hardware?
Das habe ich ja versucht und die o.g. Einschränkungen festgestellt.Code:#include <Stepper.h> const int stepsPerRevolution = 2048; // mit 2048 macht der 28BYJ-48 genau eine Umdrehung. // for your motor // initialize the Stepper library on pins 22 through 28: Stepper myStepper(stepsPerRevolution, 22, 26, 24, 28); Stepper Stepper2(stepsPerRevolution, 32, 36, 34, 38);
Gruß fredyxx
Ich meine beides. Das kann für jeden Motor gleich aber ganz unabhängig voneinander sein.
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Mit diesem Code laufen die Motore quasi gleichzeitig, aber beide mit derselben langsamen Geschwindigkeit.
GrußCode:#include <Stepper.h> const int stepsPerRevolution = 2048; // mit 2048 macht der 28BYJ-48 genau eine Umdrehung. // initialize the Stepper library on pins 22 through 28: Stepper myStepper(stepsPerRevolution, 22, 26, 24, 28); // keine saubere Reihenfolge, aber läuft nur so ! Stepper Stepper2(stepsPerRevolution, 32, 36, 34, 38); void setup() { Serial.begin(250000); while (!Serial); myStepper.setSpeed(16); Stepper2.setSpeed(6); } void loop() { myStepper.step(1); // während der läuft, stoppt der Programmablauf an dieser Stelle // mit step(1) läuft der Motor fast kontnuierlich Stepper2.step(1); // während der läuft, stoppt der Programmablauf an dieser Stelle // mit step(1) läuft der Motor fast kontnuierlich unsigned long millialt =micros(); Serial.print("Zeit = "); // die Programmlaufzeit bei diesem Programm ist ca. 80 us Serial.println(micros() - millialt); } // ***************ENDE loop
fredyxx
Bei der Marlin Firmware für 3D-Drucker funktioniert es.
Da dort die Motordrehzahlen für X, Y, Z und den Filamentvorschub spätestens bei Kreisbahnen, aktivem Bead leveling und Filamentdurchmesser abhängigem Vorschub ständig variieren und sich zueinander andern wärend sie kontinuierlich laufen.
Allerdings dürfte es nicht ganz einfach sein da soweit einzusteigen um deren Stepper Steuerung für was eigenes zu extrahieren.
Beim Ramps 1.4 macht das Marlin mit bis zu 5 Steppern.
beim RAPS128 mit bis zu 6 Steppern. ( Korrektur: hier ist eigentlich das RADDS1.5 für den Due gemeint auf dem die RAPS128 als Treiber sitzen)
Geändert von i_make_it (01.06.2016 um 08:24 Uhr)
Hallo,
ich sehe das Problem ja auch nicht bei den Motoren, wenn jeder Motor einen eigenen Treber hat, sondern darin, das mit der Arduino Software zu realisieren.
Gruß
fredyxx
Marlin läuft auf Arduino (ist eine .ino).
Ramps1.4 ist ein Shield für einen Mega.
Oben hatte ich mich vertan.
RAPS128 ist der Motortreiber der beim RADDS Board benutzt wird (das meinte ich eigentlich) was wiederum ein Shield für einen Due ist.
Ich sehe kein Problem, wenn jeder Motor auch eigenen kleinen Controller (z.B. AVR Tiny) hat, der von Arduino erhaltene Parameter passend für den eigenen Treiber verarbeitet.
MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!
Irgendwie verstehe ich das nicht.
Soll die Hardware dann so aussehen?
Arduino MEGA >> ATTINY 13A-PU >> Driver ULN2003 >> Stepper 28BYJ-48
Der ATTINY bekommt vom MEGA z.B Umdrehungen, Geschwindigkeit und Richtung. Rest erledigt der ATTINY ?
Dann habe ich natürlich weiter Fragen.
Wie kommunizieren MEGA und ATTINY ?
Wie bekommt der ATTINY ein Programm?
Gruß
fredyxx
Lesezeichen