Forum: Mikrocontroller und Digitale Elektronik servosteuerung


von crishy (Gast)


Lesenswert?

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.

von Sssssss (Gast)


Lesenswert?

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 ;)

von Sssssss (Gast)


Lesenswert?

war jetzt schnell ausm kopf...
timer= ist natürlich sowas:
OCR1AH = (servo_val)>>8;
OCR1AL = (servo_val)&0xFF;

von Thomas K. (thkais)


Lesenswert?

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.

von crishy (Gast)


Lesenswert?

danke für eure hilfe.

von Hannes L. (hannes)


Lesenswert?


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
Noch kein Account? Hier anmelden.