Test und Programmierung

Da das Programm eigentlich keinen so großen Umfang hat, habe ich einfach drauf los programmiert (ich weiß, macht man normalerweise nicht ^^). Dazwischen gab es einfach ein paar Tests, speziell für die Auswertung der Analogeingänge an denen die Drehpotis angeschlossen wurden und natürlich die Ansteuerung des Servos selbst.

Zuerst zu den Analogeingängen. Der mega8 besitzt insgesamt 6 Analoge Eingänge die anhand eines Analog-Digital-Konverters ausgewertet werden. Die Funktionsweise ist recht einfach. Es handelt sich um einen 10bit AD-Konverter. Das bedeutet kurz gesagt, dass Analoge Signal wird ausgewertet und in 1024 Stufen (2^10) eingeteilt. Man erhält also nach der Auswertung eine Zahl zwischen 0 und 1023. Das war es eigentlich schon. Dem mega8 muss also bekannt gegeben werden, zwischen welchen Spannungen der Analogeingang arbeitet. In unserem Fall haben wir einfach die Grundspannung von 5V genommen. An dem Analogeingang kann also ein Wert zwischen 0V und 5V anliegen. Und dieser Bereich wird, wie bereits beschrieben, ausgewertet und als Zahl zurückgegeben. 0V entspricht der Zahl 0, 5V der Zahl 1023. Innerhalb von Bascom ist das auch sehr einfach zu realisieren. Der Analogeingang wird konfiguriert und dann muss man einfach nur noch den ausgewerteten Wert abholen. Hat auf Anhieb funktioniert.

Wer näheres zum Analog-Digital-Konverter wissen will, wikipedia weiß einiges dazu.

Weiter geht es also zum Servo. Auch hier weiß wikipedia einiges, aber leider nicht sehr ausführlich. Wie dort beschrieben besitzt ein Servo 3 Anschlussleitungen. Einmal GND und einmal Versorgungsspannung, in unserem Fall 5V (sollte gängig sein). Über die dritte Leitung kommt ein Signal, welches die Lage des Servos angibt. Das Signal ist kein PWM (wäre ja zu einfach), sondern hat einen etwas anderen Aufbau.

Dazu eine Skizze:

Servosignal1-300x60 in Test und Programmierung

Auf dem Bild ist das Signal zu sehen um den Servo in die linke Endlage zu fahren. Das ist auch der Grundaufbau des Signal. Die Länge beträgt insgesamt 20ms. Es wiederholt sich also alle 20ms. Dabei ist in der ersten ms das Signal auf „high“, die restlichen 19ms auf low.

Betrachten wir die andere Endlage:

Servosignal2-300x60 in Test und Programmierung

Wie man hier sieht wird die andere Endlage erreicht, indem 2ms lang das Signal high ist und die restlichen 18ms auf low.

Wie man sich bestimmt denken kann, werden Positionen zwischen linker und rechter Endlage erreicht, indem das Signal zwischen 1ms und 2ms auf high gesetzt wird. 1,5ms wären z.B. die Mittelstellung, wie hier dargestellt:

Servosignal3-300x60 in Test und Programmierung

Um jetzt also von einer Endlage in die andere zu fahren, muss man das Signal langsam von links (1ms high) nach rechts (2ms high) wandern lassen.

Nutzt man in Bascom die Funktion für Servos (diese sind direkt in Bascom implementiert), kann man zwischen links und rechts nur 100 Schritte wählen. Wenn man also vergleicht, das ein Servo etwa 200° zwischen der linken und der rechten Endlage verfährt (dieser Winkel kann zwischen verschiedenen Servos variieren), so ist diese Skalierung sehr grob. Deswegen habe ich diese Funktion nicht genutzt, sondern dieses Signal selbst erzeugt. Heraus kam eine Skalierung von über 2000 Schritten. Dies ist natürlich bedeutend feiner. Ändert man jetzt z.B. in jedem Zyklus den Wert um 1, würde der Servo 40 Sekunden benötigen um von einer Endlage zur anderen zu gelangen. Und das ohne zu ruckeln, da er alle 20ms eine neue Position erhält.

Das ganze wurde natürlich auch Hardwareseitig aufgebaut und getestet.

Servoantrieb Testaufbau1-150x150 in Test und Programmierung Servoantrieb Testaufbau2-150x150 in Test und Programmierung

Mit Hilfe des Messgerätes im Hintergrund wurde genau die Zeit des „high“-Signals gemessen. Es ist also recht genau eingestellt. Zusätzlich sind die 4 Drehpotis zu sehen, die für die Einstellung der Servos genutzt werden. Und natürlich der Servo selbst.

Wie der Servo so läuft hier zwei Videos. Zuerst mit langsamer Geschwindigkeit (es geht noch etwas langsamer, aber dafür ist der Servo nicht so gut. Billigvariante eben):

Und in schnellerer Geschwindigkeit:

Im großen und ganzen war in der kurzen Zeit wirklich viel zu schaffen. Der komplette Programmablauf steht, inklusive Programmiermodus. Jetzt muss mal eine komplette Platine aufgebaut werden um das ganze zu testen. Eventuell kommen da noch Situationen zum Vorschein die noch nicht betrachtet wurden.


Kommentar schreiben

Deine Email-Adresse wird nicht veröffentlicht

Christian A. • am 11. Oktober 2008 um 20:14 Uhr

sehr coole sache mit den servos.

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu. Weitere Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen. Wenn du diese Website ohne Änderung der Cookie-Einstellungen verwendest oder auf "Akzeptieren" klickst, erklärst du dich damit einverstanden. Desweiteren verwendet diese Website den Open Source Webanalysedienst Matomo. Die Datenerfassung kann über das Impressum unter dem Abschnitt Matomo deaktiviert werden.

Schließen