Hallo Ich habe eine kleine Seilbahn gebaut und möchet diese nun steuern können. Als Controller kommt ein ESP8266 zum Einsatz, da ich das Ganze gerne vomn Handy aus steuern möchte. Der Motor besteht aus einem Servo, welches nur noch als Getriebemotor dient und über das Poti ansteigende Werte an meinen analogen Eingang liefert. Pro Radumdrehung gibt es einen Maximalwert von ca 3.3V. Auf eine Radumdrehung genau zu steuern reicht vollkommen aus. Nur soll die Bahn während er Fahrt wweitere Befehle empfangen können, um z.B. eine Lampe einzuschalten. Ich programmiere mit der ArduinoIDE und bin noch recht unerfahren. Gehe ich recht in der Annahme, dass ich es mit Interrupts lösen sollte? Also immer wenn ein (der) Maxiumalwert erreicht ist, wird eine Runde gezählt und wenn Runde_ist == Runde_soll ist, wird gestoppt? Leider finde ich dazu keine passenden Beispiele und frage daher hier nach. Auch möchte ich, dass die Bahn nicht sofort stehen bleibt, sondern langsam bremst. Wie realisiert man dies? Vielen Dank für eure Mithilfe! Kevin
Kevin schrieb: > dass die Bahn nicht sofort stehen bleibt, sondern > langsam bremst. 1.Dazu sollte man den Motor gut kennen. 2.PWM?
oszi40 schrieb: > 1.Dazu sollte man den Motor gut kennen. Wir wurden einander vorgestellt und mögen uns. Sein Name ist: MR995 oszi40 schrieb: > 2.PWM? Ja, aber wie langsamer werden?
Kevin schrieb: > Auch möchte ich, dass die Bahn nicht sofort stehen bleibt, sondern > langsam bremst. > Wie realisiert man dies? Immer mitzählen wo man ist und rechtzeitig vorm Ziel den Motor zunehmend langsamer laufen lassen. Man kann z.B. mit konstanter (Brems-)Beschleunigung arbeiten, d.h. ausgehend von der Fahrgeschwindigkeit per Integration den Bremsweg ausrechnen und dann entsprechend rechtzeitig anfangen zu bremsen.
Die Bahn soll ja nicht ewig bremsen. Nur eben nicht so plötzlich, denn dann wackelt sie am Seil immer. Eine Radumdrehung sind ca 10cm. Das sollte (gefühlt) als Bremsstrecke reichen. Wie sage ich ihr, dass sie in der letzten Umdrehung von PWM 100% zu PWM 0% verlangsamen soll?
Hi Wenn Dein Servo nicht zu 100% zum Getriebemotor rückgebaut wurde, könntest Du mit der Servo-Ansteuerung die Geschwindigkeit einstellen. Also, wenn Du das im Servo enthaltene Poti entfernt und durch zwei Widerstände fest auf 'Mittelstellung' ersetzt hast und den mechanischen Anschlag auf der Welle weg ist, kannst Du über ein Signal 1ms...2ms den Motor von schnell links über Stop (1,5ms) nach schnell rechts (2ms) fahren lassen. Die Stop-Position muß wegen der Toleranz der Widerstände erprobt werden, kann sein, daß der Aus-Bereich nicht ganz genau in der Mitte liegt. MfG
Kevin schrieb: > Die Bahn soll ja nicht ewig bremsen. Wolfgang schrieb: > ... und rechtzeitig vorm Ziel den Motor zunehmend langsamer laufen lassen. Dann setze für "rechtzeitig" einfach "während der letzten Umdrehung"
Kevin schrieb: > oszi40 schrieb: >> 1.Dazu sollte man den Motor gut kennen. > > Wir wurden einander vorgestellt und mögen uns. > Sein Name ist: MR995 Da frag ihn mal wie er es am liebsten hat Angesteuert zu werden.
Kevin schrieb: > Wie sage ich ihr, dass sie in der letzten Umdrehung von PWM 100% zu PWM > 0% verlangsamen soll? In dem du die Bremsstrecke bestimmst und eine Rampe programmierst. Wie man das programmiert, findest du aber auch im Netz. Google: arduino pwm motor rampe
Kevin schrieb: > Die Bahn soll ja nicht ewig bremsen. > Nur eben nicht so plötzlich, denn dann wackelt sie am Seil immer. > > Eine Radumdrehung sind ca 10cm. Das sollte (gefühlt) als Bremsstrecke > reichen. > Wie sage ich ihr, dass sie in der letzten Umdrehung von PWM 100% zu PWM > 0% verlangsamen soll? Vermutlich hast Du in Deinem Programm ja schon eine Art Soll-Position, da wo die Bahn hinfahren soll, und eine Ist-Position wo die Bahn aktuell ist. Vermutlich setzt sich Deine Ist-Position aus der Anzahl von vollem Umdrehungen des Potis sowie dem Aktuellen Drehwinkel des Potis zusammen. Was Du brauchst, ist eine Einfach Regelung. Genauer reicht ein einfacher P-Regler mit zwei "Tricks"; in Pseudo-Code:
1 | IF soll_position_nicht_erreicht() THEN |
2 | |
3 | positions_abweichung = soll_position - ist_position; |
4 | stellwert = p_faktor * positions_abweichung; |
5 | |
6 | pwm = SIGN(stellwert) * LIMIT(min_geschwindigkeit, ABS(stellwert), max_geschwindigkeit); |
7 | |
8 | ELSE |
9 | |
10 | pwm = 0: |
11 | |
12 | END |
Die beiden "Tricks" sind die Maximal-Geschwindigkeit und die Minimal-Geschwindigkeit.
Hallo und danke für die vielen Beiträge! Ich glaube, ich habe verstanden wie ich die Bahn bremsen kann :-) Ab Dienstag wird programmiert. Habt ihr bis dahin noch ein Tipp für die Positionierung? Sind Interrupts der richtige Ansatz?
Hi Kevin schrieb: > Habt ihr bis dahin noch ein Tipp für die Positionierung? In wie fern Positionierung? Wenn die Bahn nicht umlaufend fahren kann, sondern jeweils oben und unten ein Ende erreicht wird, musst Du doch auch nur wissen, wann Du oben bzw. unten angekommen bist. Das sollte sich berechnen, spätestens mitzählen lassen. In der 2 Minuten danach aufgebrannten Programm-Version wäre dann die maximale Fahrstrecke bekannt und man könnte auch eine Zwischen-Position anfahren (kA wofür ... Insassen per Bungy-Seil oberhalb der Teufelsschlucht raustreten?). Wenn der µC sonst Nichts zu tun hat, dann Der auch pennen und sich 'alle Nase lang' durch einen Sensor aufwecken lassen, die gefahrene Strecke mitzählen, schauen, ob was gemacht werden muß (PWM umstellen) und wieder ins Bett. Das geht sehr gut per Interrupt, beim Arduino bin ich aber der Falsche und bei meinen ATtinys wohl auch nur als Noob unterwegs ;) MfG
Kevin schrieb: > Habt ihr bis dahin noch ein Tipp für die Positionierung? Bei Berg- und Talstation jeweils ein oder zwei Lichtschranken - die erste markiert den Anfang der Bremsstrecke und optional eine zweite kann jeweis die genaue Halteposition markieren.
Hast du auch in Betracht gezogen einen Schrittmotor zu benutzen? http://www.ebay.de/itm/5V-12V-ULN2003-Step-Motor-4-Phasen-Schrittmotor-Treiberplatine-Modul-fur-Arduino-/272494183074?var=&hash=item3f71eb42a2:m:mSMlPkAM-c5ZlD9LfI8mraQ Da gibt es dann auch librarys denen du einfach sagen kannst wie schnell, wohin und wie schnell bremsen.
Chr. M. schrieb: > Da gibt es dann auch librarys denen du einfach sagen kannst > wie schnell, wohin und wie schnell bremsen. Zumindest einen Referenzpunkt auf der Fahrtrecke braucht man trotzdem.
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.