1

Freitag, 22. Mai 2009, 01:09

Servoenhancer...

... oder wie man aus einem 5 Euro Billig-Servo ein Digitalservo macht ;)

Servus,

habe mal wieder etwas gebastelt - herausgekommen ist ein Teil zum Einschleifen in die Impulsleitung zwischen Empfänger und Servo. Ziel ist es, die Stellgeschwindigkeit und Stellgenauigkeit von einfachen Analog-Servos zu erhöhen.
Und das geht so: das Servo bekommt vom Empfänger in der Regel seine Impulse mit einer Frequenz von etwa 50Hz. Bei kleinen Bewegungen des Knüppels bzw, kleinen Auslenkungen des Servoarms durch äußere Belastung bekommt der Motor von der Servoelektronik auch nur kurze Impulse mit 50 Hz, so daß das Servo "knurrt". Die wenigen, kurzem Impulse reichen dann nicht aus, das Servo unter Last ganz in die Sollstellung zu fahren.
Steuert man das Servo aber einfach mit einer deutlich höheren Impulsrate an, zeigt das Servo ein viel "härteres" Stellverhalten, weil der Motor nun auch mehr Impulse pro Sekunde in die Soll-Richtung bekommt. Kleine Ausschläge unter Last werden dann viel genauer ausgeführt.
Das macht nun der "Sevo Enhancer": In den langen Impulspausen (ca. 18ms) wird einfach der zuletzt empfangene Impuls je drei mal wiederholt, so daß sich eine Vervierfachung der Impulsfrequenz ergibt (ca. 200 Hz statt 50 Hz).
Siehe dazu das Bild: GP3 = Eingangsimpulse vom Empfänger, GP2 = Ausgangsimpulse zum Servo. Am Anfang werden noch keine Zusatzimpulse erzeugt, weil der Controller erstmal die Periodendauer des Eingangssignals feststellen muß, damit die Zusatzimpulse dann den richtigen, gleichmäßigen Abstand haben.
»Ottili« hat folgendes Bild angehängt:
  • signals.gif

2

Freitag, 22. Mai 2009, 01:35

RE: Servoenhancer...

Und hier kommt der Quelltext (für PIC12F629)...

Das Programm ist etwas aufwändiger gestaltet, um eine Mikrosekunden-genaue Impulswiedergabe zu gewährleisten. Zur Messung der Eingangsimpulse und zur Erzeugung der Ausgangsimpulse wird Timer1 (16Bit) in Verbindung mit Interrupts verwendet.
Das Laden des Timers geschieht nicht durch einfaches Schreiben der neuen Werte in die Timer-Register, sondern die neuen Werte werden zum aktuellen Timerstand addiert (bzw. davon subtrahiert), so haben die Programmlaufzeiten auf das Ergebnis keinen Einfluss. Das passiert außerdem im gestoppten Zustand des Timers, um Probleme mit Überlauf (TMR1L->TMR1H) währen der Timer-Modifikation zu vermeiden. Die Zeit des Timer-Stillstands wird dann einfach zusätzlich auf den Timerstand addiert.

Grüße,

Thomas
»Ottili« hat folgende Datei angehängt:
  • ServoEnhancer.zip (2,56 kB - 22 mal heruntergeladen - zuletzt: 9. Oktober 2017, 18:49)

3

Sonntag, 31. Mai 2009, 15:08

Neue Version!

Hallo,

hier ist eine überarbeitete Version:

* WICHTIG: Bugfix - inkorrekte Behandlung von fehlerhaften RX-Impulsen behoben - die alte Version bitte deshalb nicht mehr verwenden!

* Brown-Out Detection eingeschaltet

* Neu: "MODE"-Pin eingeführt. Nicht alle Servos kommen mit 200Hz Impulsrate klar und schwingen/summen dann, was auf Dauer nicht gut sein kann. Wenn der MODE-Pin auf Masse gelegt wird, wird die Impulsrate nur noch verdoppelt (-> ca. 100Hz), statt vervierfacht.

Habe es mit ES-05 Servos von Conrad getestet, diese vertragen wohl auch 200 Hz. Bei diesen Servos bringt der Enhancer auch eine deutliche Verbesserung.
Hitec HS-55 summen bei 200 Hz, gehen aber bei 100 Hz.

Also: Ggf. mit den jeweils verwendeten Servos testen!

Grüße,

Thomas
»Ottili« hat folgende Datei angehängt:
  • ServoEnhancer.zip (2,7 kB - 29 mal heruntergeladen - zuletzt: 9. Oktober 2017, 18:50)