Hallo, seit gut einer Woche beschäftige ich mich mit Schrittmotoren. Über Rn Wissen habe ich einiges an theoretischem Wissen angelesen. Nun wollte ich mir mit meinem Arduino ein Sekundenzeiger programmieren. Jedoch treten jetzt bei mir einige Probleme auf. Und zwar möchte ich mein Schrittmotor in microstep Betrieb betreiben, da er die Schritte feiner macht als bei einer anderen Ansteuerung, soweit ich das verstanden habe. Den Schrittmotor habe ich nicht direkt auf mein Arduino angeschlossen sondern auf ein Adafruit Motor Shield v.2.3. Daher habe ich auch ein Forenbeitrag hier: Beitrag "2 Schrittmotoren mit Adafruit Motor Shield im alternierenden Start-Stop-Betrieb, geht das?" gefunden, wo jemand auch mit diesem Shield einen Stepper ansteuern wollte. Was mir direkt aufgefallen ist dass die library die er verwendet hat nicht bei meinem Shiled funktioniert obwohl ich genau das selbe habe. Damit ich geanau wie er die Stepper in Betrieb bekomme muss ich das shield über den Ic2 Bus starten. Komisch finde ich da ich genau wie er die Servos an M1 udn M2 angeklemmt habe. Nun ja das am Rande mein eigentliches Problem ist mein Quellcode, denn ich selbstverständlich hier bei fügen werde Da ich einen Schrittmotor habe der 200 Schritte/pro Umdrehung bei einem Schrittwinkel von 1,8 Grad habe ich hier in anderen Foren gelesen dass man die Schritte beliebig ändern kann sprich 200 Schritte auf 1000 Schritte. Dazu muss nur das Drehmoment geändert werden. Bei 1000 Schritte würde sich der Stepper 5 Umdrehungen/sec machen d.h pro minute wären das 300 Umdrehungen. Rechnung: 1000 Schritte / 200 = 5 Umdrehung /sec 5 Umdrehung/sec *60 = 360 Und das habe ich letztenendlich in der Motorgeschwindigkeit myMotor->setSpeed(1000); // 10 rpm eingeschreiben Und für die Schritte habe ich eigentlich 200 / 60 gerechnet da er in meinem Falle im Microstepbetrieb nur 200 Schritte für eine Umdrehung braucht. Und das finde ich komisch eigentlich hätte ich mit 1000 Schritten gerechnet aber das hätte sowieso auch nicht hingehauen da er dann mehrere Umdrehungen gemacht hätte. Wie Ihr lesen könnt verwirrt mich das ziemlich sehr. Ich glaube dass ich eher ein rechnerisches Problem habe. Ich bin auch davon ausgegangen das Microstep kleine Schritte sind und nicht so riesige Schritte macht wie im Vollschritt. Deswegen habe ich das alles versucht in einer Schleife zu verpacken. Leider muss ich dann noch entdecken dass er neben dem eigenlichen Schritt noch einen kleinen Zusatzschritt macht obowhl ich ihm befohlen hab einen Schritt zu machen. Nun ja hoffe Ihr könnt mir dabei helfen. Und sorry falls mein Text ein bisschen lang wurde ich wollte direkt mein Problem auf dem Punkt bringen Mtf
Hallo Adrian, > Da ich einen Schrittmotor habe der 200 Schritte/pro > Umdrehung bei einem Schrittwinkel von 1,8 Grad habe ich hier in anderen > Foren gelesen dass man die Schritte beliebig ändern kann sprich 200 > Schritte auf 1000 Schritte. Dazu muss nur das Drehmoment geändert > werden. Das hast du mit Sicherheit falsch verstanden... > Wie Ihr lesen könnt verwirrt mich das ziemlich sehr. Wie ich lesen kann bist du sehr verwirrt, ja. Das merkt man deinem Text deutlich an. > Nun ja hoffe Ihr könnt mir dabei helfen. Und sorry falls mein Text ein > bisschen lang wurde ich wollte direkt mein Problem auf dem Punkt bringen Das ist dir leider nicht gelungen. Versuch es nochmal, kurz und knapp und in verständlichem Deutsch ;) Mit freundlichen Grüßen Thorsten Ostermann
1. Was ich nicht weiss ist wie ich aus 200 Schritte / Umdrehung z.b 1000 bzw 360 Schritte machen könnte. Und diese könnte ich dann durch 60 teilen dann hätte ich ja meine Sekunde pro Schritt oder geht das irgendwie anders? 2. Inwiefern beeinflusst die Motorgeschwindigkeit die Schritte des Steppers also sprich diese Funktion Motor->setSpeed(1000); // 10 rpm eingeschreiben 3. Was bewirkt die Frequenz beim Schrittmotor? Ich gebe ihm am anfang ungefähr 1kz. Ist dies nun für meinem Sekundenzeiger wenig?
Adrian schrieb: > Den Schrittmotor habe ich nicht direkt auf mein Arduino angeschlossen > sondern auf ein Adafruit Motor Shield v.2.3. ... Nicht jeder kennt deinen Schild. Für diejenigen, die keine Lust zum Suchen haben, wäre ein Link - möglichst mit Schaltplan - eine echte Unterstützung.
Adrian schrieb: > 1. Was ich nicht weiss ist wie ich aus 200 Schritte / Umdrehung z.b 1000 > bzw 360 Schritte machen könnte. Das macht gewöhnlich der Sequencer im Mikroschritttreiber. Dazu genügt ein Blick ins Datenblatt. Mikroschritttreiber erlauben allerdings meist nur eine Untersetzung in ganzen Zweiterpotenzen also /2 /4 /8 /16. Steht auch im Datenblatt von deinem Treiber.
Adrian schrieb: > Und zwar möchte ich mein > Schrittmotor in microstep Betrieb betreiben, da er die Schritte feiner > macht als bei einer anderen Ansteuerung Nö. Microstepping ist eine Mogelpackung, es dient nur zu Verringerung der Laufgeräusche. Sobald Du den Motorstrom abschaltest, ziehen ihn die Magnete auf den nächsten Vollschritt. Willst Du 200 Schritte in 60 unterteilen, machst Du ganz einfach 3,3,4 usw.
>Nicht jeder kennt deinen Schild. Für diejenigen, die keine Lust zum >Suchen haben, wäre ein Link - möglichst mit Schaltplan - eine echte >Unterstützung. sorry hab ich vergessen hier den link dazu http://www.flikto.de/products/motor-stepper-servo-shield-for-arduino-kit >Das macht gewöhnlich der Sequencer im Mikroschritttreiber. Dazu genügt >ein Blick ins Datenblatt. Mikroschritttreiber erlauben allerdings meist >nur eine Untersetzung in ganzen Zweiterpotenzen also /2 /4 /8 /16. Steht >auch im Datenblatt von deinem Treiber. Wie heisst das da im Datenblatt? hab mir es angeschaut aber davon habe ich leider nichts gefunden:( > Und zwar möchte ich mein > Schrittmotor in microstep Betrieb betreiben, da er die Schritte feiner > macht als bei einer anderen Ansteuerung also sprich dies hier etwa? for (i = 0; i <= 3; i++) { motor > step(1, 1, Microstep); for (i = 0; i <= 3; i++) { motor > step(1, 1, Microstep); for (i = 0; i <= 4; i++) { motor > step(1, 1, Microstep); } } }
Adrian schrieb: > ich wollte direkt mein Problem auf dem Punkt bringen Dann mach das doch mal ;-) Der Motor macht 200 Vollschritte/Umdrehung. Damit kann man nicht exakt 60 Positionen/U anfahren, was aber das Auge nicht stört, solange nach einer Minute der Zeiger wieder auf '12' steht. Nimmt man die 'Mogelpackung' der Mikroschritte, nehmen wir mal 16, so braucht der Motor(-treiber) 200*16 = 3200 Schritte, um den Zeiger einmal zu drehen. Die notwendige Frequenz für eine Umdrehung/s ist demnach 3200 Hz. Da der Zeiger aber nur 1/60 Umdrehung/s drehen soll, sind es 3200/60 Hz. Ich spare mir das Umrechnen auf 'krumme' Frequenzwerte, sondern rechne gleich auf die Timertakte eines mit 16 MHz betriebenen µCs um: 16000000/3200*60 = 300000. Das heißt, der µC muß bei 16 MHz alle 300000 Takte einen Impuls an den Motortreiber abgeben, damit er den Zeiger in einer Minute eine Umdrehung machen läßt. Laß die Finger von solchen Funktionen wie 'delay_ms()' und such Dir einen Timer aus, der das erledigt.
Adrian schrieb: > Wie heisst das da im Datenblatt? hab mir es angeschaut aber davon habe > ich leider nichts gefunden:( Da frag mal Adafruit mit ihrem "great tutorial", wie sie sich vernünftiges Micro-Stepping mit dem TB6612 vorstellen. Bei dem Baustein sehe ich nicht mal eine Stromregelung, ganz zu schweigen von einem Hardware Sequenzer für Mikrostepping. Vielleicht stellen die sich irgendeine Softwaresteuerung mit einer Trickserei über PWM vor - sehr windig. Guck dir z.B. mal den A4989 von Allegro an. Da findest du Stromregelung und Mikroschritt Translator. Über MS1 und MS2 kannst du die Schrittuntersetzung konfigurieren. http://www.allegromicro.com/en/Products/Motor-Driver-And-Interface-ICs/Bipolar-Stepper-Motor-Drivers/A4989.aspx
Mike schrieb: > Guck dir z.B. mal den A4989 von Allegro an. Glaubst Du denn, dass man mit ein paar Ampere Phasenstrom einen tonnenschweren Sekundenzeiger gewegen kann? ;-) Ein A4288 dürfte wohl schon reichen; und wer nicht beim Fernost Billiganbieter kaufen, sondern selber löten will, kann den A4982 nehmen. Und wenn es ganz einfach sein soll: L6219 im 24-pol. DIL im Halbschrittbetrieb tickt gut genug. Adrian schrieb: > Nun wollte > ich mir mit meinem Arduino ein Sekundenzeiger programmieren. Du hast einen UNO R3 und kannst mit AVR-Studio umgehen? Dann suche in der Codesammlung nach Beispielen für den ATmega328.
gibt es auch dazu schaltpläne wie ich man sowas zusammenbaut, nicht dass ich in meiner schaltung große fehler machen würde? Also ist mein Adafruit shiled ungeeignet für den microsteppber Betrieb. Na toll-.- und ich such mir einen Wolf raus.
Adrian schrieb: > Also ist mein Adafruit shiled ungeeignet für den microsteppber Betrieb. Die Frage ist doch: brauchst du das überhaupt für einen Sekundenzeiger. Wenn der in 1 Minute einmal rum kommt, dann reicht das völlig aus. Kein Mensch schaut so genau auf die Sekunden, dass es ihm auffällt, das der zeiger nicht 100% exakt über einer Minutenmarkierung steht. Man kann auch alles übertreiben.
Adrian schrieb: > Also ist mein Adafruit shiled ungeeignet für den microsteppber Betrieb. Laut Doku kann das Ding Microstep. Du kannst dir in der Lib nur nicht aussuchen, in wieviele Steps aufgelöst wird. Und was ich der Doku auch nicht entnehmen konnte ist, ob das Microstepping dann benutzt wird um von einem Vollschritt zum nächsten zu steppen oder ob sich dadurch auch die Schrittzahl für eine Umdrehung erhöht. Aber das kann man in einem Versuch in 2 Minuten feststellen. Du gehst mir da sowieso zu naiv an die Sache ran, indem du auf Biegen und Brechen versuchst, das Ding genau an deine Aufgabenstellung zu konfigurieren. Das wird in deinem Fall mit der Uhr sowieso nicht funktionieren. Ein Schrittmotortreiber ist keine Präzisionsuhr. Muss er auch nicht sein. Lass deine Sekundenzeiger nach Ablauf einer Sekunde zur nächsten Ziffer steppen und gut ists. Wieviele Schritte das jeweils sind, kann man ausrechnen. Der ganze Ansatz mit: ich rechne mir aus, wieviele Schritte der Motor machen muss und sag dann dem Treiber, dass er die in exakt 60 Sekunden machen soll, wird nicht klappen. Viel zu ungenau.
:
Bearbeitet durch User
Adrian schrieb: > gibt es auch dazu schaltpläne wie ich man sowas zusammenbaut, Welchen Motor hast Du denn überhaupt? Lies das Datenblatt vom L6219 und versuche, die recht einfache Funktion zu verstehen. > nicht dass ich in meiner schaltung große fehler machen würde? Mache Deine Fehler und lerne daraus. Dann wirst Du selber merken, warum ein A49xx einige Probleme (viel) besser löst.
m.n. schrieb: > Glaubst Du denn, dass man mit ein paar Ampere Phasenstrom einen > tonnenschweren Sekundenzeiger gewegen kann? ;-) Vielleicht soll es ja eine Kirchturmuhr mit zusätlich noch schlecht ausbalanciertem Zeiger sein ;-) Für einen kleinen Motor reicht sicher auch der A3967 mit 700mA. Wenn man mit einer variablen Referenzspannung arbeitet, z.B. per PWM und Tiefpass, läßt sich der Haltestrom noch auf das notwendige Mindestmaß reduzieren. Trotzdem ist ein dauerbestromter Schrittmotor energetisch ziemlich unpraktisch und man fährt besser, wenn man zum Halten des Zeigers mit dem Rastmoment auskommt, so dass man nur für die Bewegung Strom braucht.
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.