Forum: Mikrocontroller und Digitale Elektronik Servo ansteuerung


von Peter Zimmer (Gast)


Lesenswert?

Hallo,
ich habe von meinen Bruder ein leicht defektes Multiplex Servo bekomme
(ein Zahnrad ist nicht mehr ganz ok). Und das wollte ich nun Ansteuern.
Leider fährt es nur ganz nach rechts bis zum Anschlag.
Was ist an diesem Code falsch?
Ich habe den Timer so Inhaliziert das er alle 0,1ms ein Timerinterupt
liefert.
SIGNAL(SIG_OUTPUT_COMPARE2)    //intruptcpmparematch vom timer 2
{
stimer++;
servo++;
if (servo == 200){      //alle 20ms mache signal
sbi (PORTD, 5);        //ausgang setzen
servo = 199;        //variable zurücksetzen damit schleife gleich beim
nächsten durchlauf betreten wird
servoi++;
if (servoi == 7){      //impulsbreite in 0,1ms schritten
cbi (PORTD, 5);        //wenn impulsbreite erreicht dann kanal
zurücksetzen
servo = 0;        //und aus der schleife raus
}
}
}
Danke schonmal.
Gruß
Peter

von ->Andre<- (Gast)


Lesenswert?

Hallo Peter,

leider bin ich nicht mit dem C-Code vertraut, programmiere nur in ASM.

Nur nochmal zur Info...

Das Servo erwartet als Steuersignal folgendes:

loop:
Ausgang für 20ms auf LOW setzen
Ausgang für 1.5ms auf HIGH setzen
springe nach loop

Der HIGH-Wert von 1.5ms setzt das Servo in die Mittelposition.
Änderst Du zur Laufzeit auf 1.0ms, fährt das Servo nach ganz rechts.
Bei 2.0ms nach ganz links.

Wenn Du Multiplex-Servos hast, dann sollte die Orangene Leitung für das
Steuersignal sein.

Gruß,
Andre.

von wizz (Gast)


Lesenswert?

Ich hab hier einen funktionierenden Servo code für zwei servos, 100
Schritte auflösung, ohne wackeln etc. Servo 1 kann testweise über zwei
taster gesteuert werden. Interesse?

von Peter Zimmer (Gast)


Lesenswert?

Hallo,
ich habe im vorherigen Posting noch vergessen das ich den Mega32
verwende und das nur der Timerinterupt ist. Also nicht der vollständige
Code.

@Andre Das habe ich schon gewusst aber trotzdem danke. Mein Servo hat
nur ein gelbes Kabel. Des wird wohl des steuer signal sein.

@wizz wenn er in C ist dann wäre es gut wenn du ihn posten könntest.

Gruß
Peter

von Peter Zimmer (Gast)


Lesenswert?

Hallo,
Ich habe den fehler jetzt endlich gefunden. servoi muss ja nach jeden
Impuls zurückgesetzt werden. Jetzt geht es wunderbar. Es zittert auch
nicht wie es bei meinem Bruder manchmal war.
Gruß
Peter

von Markus N. (roboscan)


Lesenswert?

@Wizz ist der Code von dir in C?

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.