Forum: Mikrocontroller und Digitale Elektronik Servo tut nicht so wie er soll


von TecDroiD (Gast)


Angehängte Dateien:

Lesenswert?

Also ich habe eine Servoansteuerung anhand des tutorials von rn-wissen 
gebaut. Das Programm sieht so aus, wie angehängt.

Die Servos am Board drehen sich. Jedoch ist die Mittelstellung ca. 10° 
neben der eigentlichen Mittelstellung und die Servos drehen sich nicht 
bis zum Anschlag, obwohl rein rechnerisch genau 1ms-2ms gesendet werden.

Darüber hinaus ist die Reaktionszeit sehr uneinheitlich. manchmal 
reagiert das Ganze innerhalb einer Sekunde, manchmal brauchts aber auch 
weit mehr..

Ich hab einen Mega8 mit 16MHz-Quarz und daran hängen zwei Robbe FS 100.

Was genau läuft da schief?

von Karl H. (kbuchegg)


Lesenswert?

OCR1A = F_CPU / (100000); // alle 10µs ein IRQ

Auf welche Taktfrequenz ist der Originalcode angepasst?
Hast du diese Taktfrequenz?

Du darfst auch servopos nicht sofort updaten, sondern musst über eine 
Zwischenvariable gehen. Erst dann, wenn in der IRQ der zyklische Reset 
nach 20ms gemacht wird, kannst du gefahrlos servopos aus dieser 
Zwischenvariablen neu besetzen.


Aussderdem: kleb nicht daran, dass dein Servo bei 1.5ms den Servohebel 
auf 90° zum Gehäuse dreht. Wenn du dir dein Servo ansiehst, siehst du in 
der Mitte des Servohebels eine Schraube. Die kann man aufmachen, den 
Hebel abziehen und verdreht wieder aufsetzen -> Bei Servomittelstellung 
steht der Hebel schief.
Zudem gibt es auch noch unterschiedliche Timing-konventionen. 
Konventionelle Fernsteuerungssender erlauben normalerweise die 
Einstellung um welche Art von Servos es sich handelt: UNI oder 
Multiplex-Standard. Die haben unterschiedliche Zeiten für 
unterschiedliche Positionen.

von TecDroiD (Gast)


Lesenswert?

Hallo,

ich hab die mechanische mittelposition ermittelt und der servo liegt 
daneben..

der code ist für was weiß ich entwickelt ;) hab ihn angepasst. da es 
sich aber bei mir um den 16bit-timer handelt, sollte 16000000 / 100000 = 
160 kein Problem sein (eigentlich nicht mal mit dem 8-bit-timer) 
prescaler ist 1..

das mit dem direkt setzen. Also muss ich warten bis der  Servocounter 0 
ist?

von Heiko (Gast)


Lesenswert?

Moin!

Ohne mir den Code angesehen zu haben: Praktisch niemand garantiert dir, 
dass Servos mit 1ms genau am einen, 2ms am anderen Anschlag und mit 
1.5ms genau in der Mitte sitzen.

Wenn du sicher bist, dass du wirklich genau 1.5ms lange Pulse sendest, 
(Oszi?) dann frag Robbe mal - die werden dir genau das erzählen.

MfG, Heiko

von MirkoB (Gast)


Lesenswert?

Der mechanische Mittelpunkt muss nicht der "elektrische" (1,5ms) 
Mittelpunkt sein. Bei den üblichen Modellen drehen die Servos eh nur 
maximal +/- 45°. (mit den "Servohacks" auch mehr). Der mechanische 
Drehweg liegt aber deutlich drüber (meist >270°)...eben weil man damit 
etwas Spiel hat.

Also: Servo einbauen, 1,5ms Impuls...Mittelstellung...Ruderhorn 
montieren und freuen... ;)

von Hellsing (Gast)


Lesenswert?

Versuch lieber die Pulsbreite bei Links- und Rechtsanschlag zu finden 
und dann daraus die Mitte zu interpolieren. Kann mich dunkel erinnern 
das bei meinen Servos das bei 1.5-2.5ms war. Sollte man für jeden Servo 
individuell ausloten und mittels Offsetvariable in den Code einbringen.

MFG Hellsing

von TecDroiD (Gast)


Lesenswert?

uiii... mein programm wird dann wohl doch größer..
naja, was solls.. ich werd mich also erst mal mit dem zufrieden geben 
was ich hab und weiter schauen...

von DirkS (Gast)


Lesenswert?

Hm, blöde Frage. Aber hast du den Servohebel auch genau mittig 
aufgesetzt?

Wenn Du z.B. einen 4-er Servohebel hast, sind die Positionen immer 
leicht verschoben, je nach dem welchen Hebel Du zu Deiner 
Neutralposition drehst.
Probier einfach mal einen anderen der 4 Servoarme aus (also jeweils ca. 
90 Grad drehen), und Du wirst sehen, dass die Position/Winkel immer 
leicht anders ist.

Gruß

Dirk

von Michael M. (Gast)


Lesenswert?

ist bei servos völlig normal, dass mechanische nicht gleich elektrischer 
mitte ist.
auch halten sich die wenigsten servos an die nominelle minimale und 
maximale pulsdauer von 1 bzw. 2ms.

augen zu und durch...

von TecDroiD (Gast)


Lesenswert?

aaahajaasooo.. ich hoffe, dass das prinzipiell zumindest wenigstens in 
einer baureihe gleich ist.. servos einstellen ist nicht gerade spaßig..

von Michael M. (Gast)


Lesenswert?

ja, die exemplarstreuung ist vernachlässigbar.

von Jobst M. (jobstens-de)


Lesenswert?

Es gibt auch unterschiedliche Typen und Systeme von Servos. Jeder 
Modellbauhersteller kocht da sein eigenes Süppchen.
Ich habe hier u.a. Servos, die 1-3ms benötigen.


Gruß

Jobst

von TecDroiD (Gast)


Lesenswert?

Ein Hoch auf die Standardisierung.. :(

von STK500-Besitzer (Gast)


Lesenswert?

>Ein Hoch auf die Standardisierung.. :(

Der Standard ist, dass Servos alle mit einem PWM-Signal betrieben 
werden.
Wobei Robbe ein neues System auf den Markt gebracht hat, bei dem die 
Servos alle parallel an einem Bus betrieben werden.

von Karl H. (kbuchegg)


Lesenswert?

TecDroiD schrieb:
> Ein Hoch auf die Standardisierung.. :(


Das ist in der Modellbau-Praxis viel weniger ein Problem als es jetzt 
klingt. Dort bestimmt sowieso der anzusteuernde Aktuator wieviel Weg du 
benötigst und den stellt man sich zuallererst durch Einhängen des 
Bowdenzugs in die Hebel ein. Und die Mittelstellung ist mit einem 
kleinen Schraubenzieher durch umstecken des Hebels schnell geändert.

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.