mikrocontroller.net

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


Autor: TecDroiD (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: TecDroiD (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Heiko (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: MirkoB (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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... ;)

Autor: Hellsing (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: TecDroiD (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: DirkS (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: TecDroiD (Gast)
Datum:

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

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, die exemplarstreuung ist vernachlässigbar.

Autor: Jobst M. (jobstens-de)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: TecDroiD (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Hoch auf die Standardisierung.. :(

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.