hallo, kann mir jemand tipps zur programmierung einer servosteuerung geben? ist es besser die pulsenlänge(20ms) und den impuls(1-2ms) über den timer zu progammieren. interupt alle 10 µs. oder nur die pulsenlänge(20ms), interupt alle 20 ms, und den impuls mit einer warteschleife zu programmieren? danke für euere hilfe.
Ich mach es für 9 Servos so:
1 | state; |
2 | servo_val; //16bit |
3 | |
4 | timerinterrupt{ |
5 | if (state=0){ |
6 | servopin=1; |
7 | timer=servo_val; |
8 | state=1; |
9 | }else{ |
10 | servopin=0; |
11 | timer=19ms*clocks_per_ms; //19 is besser als 20 bei einigen servos |
12 | state=0; |
13 | }
|
14 | }
|
in servo_val lade ich dann 1000-2000 (=us pulslänge) Da hast du einen int alle 19ms, dann nach 1-2ms wieder einen dann wieder 19ms .... Das lässt sich leicht auf viele Servos erweitern. Bis zu 9 ist ohne trickserei mit sehr kurzen introutinen möglich ;)
war jetzt schnell ausm kopf... timer= ist natürlich sowas: OCR1AH = (servo_val)>>8; OCR1AL = (servo_val)&0xFF;
Wichtig ist, daß das Steuersignal (1-2ms) möglichst stabil anliegt, d.h. es sollte nicht z.B. von Interrupts unterbrochen werden, sonst fangen die Servos an zu zittern.
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.