Kleine Projekte: Servotester


Menübild

Letzte Bearbeitung: 08.04.2018

SymbolDownloads und Links
Schaltplan
Stückliste mit Empfehlungen zur Bauteilbestellung
Software für ATtiny13 mit Quelltext in Assembler vom 23.05.2008servo-v100.zip
Platinenlayout (Sprint-Layout 4.0 und GIF) vom 24.05.2008servo-layout1.zip
Platinenlayout (Eagle und PDF) vom 03.04.2018servo-layout2.zip
SymbolInhaltsverzeichnis
BeschreibungAllgemeine Informationen über den Akku-Alarm
SchaltungBeschreibung der 2 Schaltungsvarianten des Akku-Alarms
HardwareBilder und Hinweise zum Aufbau des Akku-Alarms
SoftwareBeschreibung der Software des Akku-Alarms
InbetriebnahmeInbetriebnahme des Akku-Alarms
SymbolBeschreibung

Das Servo ist ein Standard-Bauteil bei beweglichen Modellen und wird darüber hinaus auch für andere Zwecke eingesetzt. Gelegentlich kann es notwendig sein, die korrekte Funktion eines Servos zu überprüfen. Für diesen Zweck wurde diese kleine Schaltung entwickelt, mit der sich praktisch alle Servo-Typen schnell und unkompliziert testen lassen. Auch andere Komponenten, die an eine Fernsteueranlage angeschlossen werden können, lassen sich damit überprüfen, z.B. Lichtsteuerungen oder Motorregler. Mit einem Potentiometer kann eine Impulsbreite von ca. 0,9ms bis 2,1ms erzeugt werden, was einem Steuerbereich von ca. -120% bis +120% entspricht.

SymbolSchaltung

Schaltung

Die Schaltung besteht genau genommen aus 2 Komponenten: dem eigentlichen Servotester (IC2, R1, C3 und C4) und einer stabilisierten Stromversorgung für +5V (IC1, C1 und C2). Die Stromversorgung ist nicht unbedingt nötig, wenn bereits eine passende Spannung zur Verfügung steht, z.B. von einem Empfänger-Akku mit 4,8V oder 6V. Bei kleinen Modellen ist es allerdings üblich, den Antrieb und die gesamte Elektronik aus einem einzelnen Akku zu versorgen. In diesem Fall steht vermutlich kein Empfängerakku mit passender Spannung zur Verfügung und so wurde der 5V-Spannungsregler ergänzt, damit ein Antriebs-Akku direkt angeschlossen werden kann.

Über K1 wird die Schaltung mit Strom versorgt. Die Spannung sollte im Bereich von +5,5V bis +15V liegen, gut geeignet sind LiPo-Akkus mit 2 oder 3 Zellen (7,4V oder 11,1V) oder NiMH/NiCd-Packs mit 5 bis 10 Zellen. IC1 ist ein so genannter Low Drop Regler, bei dem schon eine Eingangsspannung von 5,5V genügt, um stabile 5V zu erzeugen. Dieser wurde bewusst gewählt, damit die Schaltung in einem weiten Eingangsspannungsbereich zuverlässig funktioniert. Auch wurde hier bewusst ein 1,5A-Typ verwendet, da nicht nur der Servotester, sondern auch das an K2 angeschlossene Servo mit Strom versorgt werden muss. Eine Kühlung ist jedoch nicht erforderlich, da die Schaltung erfahrungsgemäß nicht über einen längeren Zeitraum betrieben wird.

Der Servotester ist sehr einfach aufgebaut und besteht hauptsächlich aus dem ATtiny13 (IC2) und dem Poti R1. Am Schleifer von R1 wird je nach Stellung eine Spannung zwischen 0V und +5V abgegriffen und an den Controllereingang PB3 gelegt. Der Controller wandelt diese Spannung mittels eines A/D-Wandlers in einen Wert zwischen 0 und 255 um und aus diesem Wert wird wiederum am Anschluss PB4 ein Impulssignal für das Servo generiert, welches auf einem Oszilloskop folgendermaßen aussieht:

PWM-Impuls

Mit dem Potentiometer R1 kann die Impulsbreite im Bereich von 0,9ms bis 2,1ms verändert werden. Das Impulssignal wird unabhängig davon alle 20ms wiederholt. Entsprechend der eingestellten Impulsbreite nimmt das Servo folgende Stellungen ein:

Poti-StellungServo-ImpulsServo-Stellung
Linker Anschlag0,9ms-120%
Mittelstellung1,5ms0%
Rechter Anschlag2,1ms+120%

Über den ISP-Anschluss K3 kann der Controller programmiert werden. Wenn man IC2 in eine Fassung setzt, dann kann man die Schaltung übrigens gut als Programmiergerät für andere Schaltungen verwenden, die mit einem ATtiny13 arbeiten, z.B. die Helikopter-Beleuchtung.

Noch ein Hinweis: Soll die Schaltung ständig mit höheren Spannungen ab 8V betrieben werden, dann kann für IC1 auch der pin-kompatible Klassiker 7805 verwendet werden. In diesem Fall sollte C2 durch einen 100nF Keramik-C ersetzt werden.

Diese Stückliste enthält alle Bauteile für den Servotester.

SymbolHardware

Für den Servotester gibt es 2 Platinenlayouts: Eins wurde von Dietmar Heyer mit Sprint-Layout entwickelt, ein weiteres von Thomas Zetsche mit Eagle.

Servotester 1 Dieses Bild zeigt die fertige Schaltung, welche auf einer Lochraster-Platine mit den Maßen 32mm x 26mm aufgebaut wurde. Im oberen Teil ist der Spannungsregler mit C1 und C2 zu sehen, unten links befindet sich das Potentiometer und rechts daneben der Controller. Dieser wurde hier auf eine Fassung gesetzt, damit man die Platine als Programmiergerät für den ATtiny13 verwenden kann.

Die Spannung wird hier auf der linken Platinenseite über ein fertig konfektioniertes JST-Kabel zugeführt. So kann ein Flugakku eines Koaxial-Helikopters direkt angesteckt werden, außerdem ist die Steckverbindung verpolsicher und eine Schutzdiode kann entfallen. Die restlichen Anschlüsse befinden sich auf der rechten Platinenseite: oben kann das Servo angesteckt werden und unten das Programmierinterface. Die schwarze Markierung zwischen den Steckverbindern zeigt, auf welcher Seite die Masseleitung stecken muss (beim Servokabel der schwarze Draht).

Akku-Alarm Bild 2 So sieht die Leiterseite der Platine aus. Wie üblich, wurden Masse-Leitungen und stromführende Verbindungen mit 0,5mm Draht hergestellt, für den Rest wurde 0,3mm Kupferlackdraht verwendet. Zur Sicherheit sollte man die Schaltung in ein kleines Gehäuse einbauen oder mit Schrumpfschlauch isolieren, wobei natürlich der Servoanschluss und das Poti zugänglich bleiben müssen.

SymbolSoftware

Die aktuelle Software v1.00 vom 23.05.2008 für den ATtiny13 enthält den kommentierten Quelltext und das fertige Hex-File. Bei der Programmierung sind unbedingt die Fuse-Bits zu beachten. Diese müssen folgendermaßen gesetzt werden:

Fuse-Bits 1 So sieht die Einstellung im AVR-Studio für den ATtiny13 des Servotesters aus.

Fuse-Bits 2 So sieht die Einstellung in PonyProg für den ATtiny13 des Servotesters aus.

Das Programm funktioniert folgendermaßen: Beim Einschalten werden zunächst die I/O-Ports, der A/D-Wandler, der Timer und ein Timer-Interrupt aktiviert. Vom Timer sollen später die Servoimpulse in feinen Schritten im Bereich von 0,9ms bis 2,1ms abgeleitet werden, deshalb wird er mit einem relativ schnellen Takt von 150kHz gespeist (zählt ca. alle 6,67µs). Da es sich hier um einen 8-Bit-Timer handelt, läuft er nach 256 Taktimpulsen (also nach ca. 1,707ms) über und beginnt wieder bei 0 zu zählen. Um den Zählbereich zu erweitern, wird bei jedem Überlauf ein Interrupt ausgelöst und dann ein Controller-Register um 1 erhöht. Somit ergibt sich ein 16-Bit-Zähler, der nicht nur Servoimpulse bis 2,1ms erzeugen kann, sondern auch das 20ms-Intervall, in dem der Servoimpuls regelmäßig wiederholt werden muss.

Nach der Initialisierung läuft das Hauptprogramm in einer Endlosschleife. In dieser wird ständig geprüft, ob der Zählerstand den Wert 3000 erreicht hat, was dem bereits erwähnten 20ms-Intervall entspricht. Trifft dies zu, dann wird der 16-Bit-Zähler wieder auf 0 und der Impulsausgang PB4 auf High-Pegel gesetzt (Impulsbeginn). Anschließend wird durch Auslesen des A/D-Wandler-Wertes die Stellung des Potentiometers ermittelt. Dieser Wert, der im Bereich zwischen 0 und 255 liegt, muss nun in einen Wert umgerechnet werden, der direkt mit dem Zählerstand des Timers verglichen werden kann. Auf diese Weise kann die Hauptprogrammschleife das Impulsende ermitteln und zur richtigen Zeit den Ausgang PB4 wieder auf Low-Pegel setzen.

Die Umrechnung der Poti-Stellung in einen Impulswert erfolgt in 2 Schritten: Zunächst wird der A/D-Wandler-Wert mit 181 multipliziert und vom ermittelten 16-Bit-Ergebnis nur das High-Byte verwertet. Dabei ergibt sich ein Wert zwischen 0 und 180. Im zweiten Schritt wird noch ein Festwert von 135 addiert, so dass sich im Endergebnis ein Wertebereich zwischen 135 und 315 ergibt. Bezogen auf den Timer-Takt von ca. 6,67µs entspricht das dem gewünschten Impulsbereich von 0,9ms bis 2,1ms. Das Hauptprogramm vergleicht nun ständig den aktuellen Zählerstand mit dem soeben ermittelten Impulswert und schaltet nach dem Erreichen dieses Wertes den Ausgang PB4 zurück auf Low-Pegel (Impulsende).

SymbolInbetriebnahme

Nach dem Anpassen einiger Fuse-Bits und dem Programmieren der entsprechenden Controller-Software ist der Servotester einsatzbereit. Da der Controller mit einem internen kalibrierten Oszillator getaktet wird, ist die Taktfrequenz zwar relativ genau, erreicht aber niemals die Genauigkeit eines Quarz-Oszillators. Aus diesem Grund können in der Praxis leichte Abweichungen bei der Impulsbreite und beim 20ms-Intervall auftreten. Der Stellbereich reicht aber auf jeden Fall von 0,95ms bis 2,05ms, somit ist die Genauigkeit für den Zweck als Servotester vollkommen ausreichend.

Wer es noch genauer haben möchte, der hat die Möglichkeit, den Oszillator noch etwas zu tunen. Dazu ist ein Zählfrequenzmesser erforderlich, mit dem man die Periodendauer von 20ms bzw. die Impulsfrequenz von 50Hz genau messen kann. Außerdem muss mit dem AVR-Studio ein neues Projekt mit der Datei Servotester.asm angelegt werden. Interessant sind die Zeilen 60-62 im Quelltext:
;       ldi     r16,neuer-wert     ;hier lässt sich der Oszillator
;       out     osccal,r16         ;anpassen, falls das Ausgangs-
;                                  ;signal stark von 20ms abweicht

Diese Zeilen sind als Kommentare geschrieben und werden normalerweise nicht assembliert. Das ist auch nicht notwendig, da der Oszillator beim Controller-Start automatisch mit einem vom Hersteller vordefinierten Kalibrierungswert eingestellt wird. Es besteht aber die Möglichkeit, über das Register osccal einen eigenen Kalibrierungswert zu laden und genau das passiert, wenn man das Semikolon am Anfang der Zeilen 60 und 61 entfernt. Um den neuen Wert zu ermitteln, empfiehlt es sich, den vom Hersteller festgelegten Kalibrierungswert aus dem Controller auszulesen und entsprechend der Abweichung um eins zu erhöhen oder zu erniedrigen. Das reicht meist aus um die Abweichung zu korrigieren.

Am besten erklärt sich die folgende Prozedur an einem Beispiel: Zunächst wird der Kalibrierungswert aus dem Controller ausgelesen. Dafür bietet das Programmer-Modul des AVR-Studio 4 die Option Advanced / Oscillator Calibration Byte / Read (oder in PonyProg Command / Read Osc. Calibration Byte). Wir nehmen einfach mal an, hier wird jetzt der Wert 5D angezeigt. Weiterhin nehmen wir an, der Oszillator läuft etwas zu langsam (Intervall>20ms bzw. Frequenz<50Hz). Für das Register osccal gilt: ein höherer Wert führt zu einer höheren Taktfrequenz. In dieser Situation sollte man also den Wert 5D auf 5E erhöhen:
        ldi     r16,0x5e           ;hier lässt sich der Oszillator
        out     osccal,r16         ;anpassen, falls das Ausgangs-
;                                  ;signal stark von 20ms abweicht

Nach der Assemblierung kann die erzeugte Hex-Datei in den Controller programmiert werden und nun sollte sich die Taktfrequenz (hoffentlich) wie gewünscht verändert haben.

Zum Schluss noch ein wichtiger Hinweis: Ganz am Anfang des Textes wurde es bereits erwähnt - der Servotester lässt sich auch zum Test für andere Komponenten einer Modell-Fernsteuerung verwenden. So lässt sich z.B. diese Helikopter-Beleuchtung testen. Grundsätzlich lassen sich auch Motorregler damit überprüfen, allerdings muss man vor dem Anschluss kontrollieren, ob der Regler eine Stromversorgung für Empfänger und Servos (BEC-Schaltung) enthält. In diesem Fall darf der Regler nicht direkt an den Servotester angeschlossen werden, da sonst die BEC-Spannung des Reglers gegen IC1 vom Servotester arbeitet. Das kann zur Beschädigung oder Zerstörung beider Komponenten führen! In so einem Fall gibt es zwei Möglichkeiten: Entweder man verwendet ein Adapterkabel, welches nur die Anschlüsse 1 und 3 verbindet oder man plant auf dem Servotester eine Steckbrücke bzw. einen Schalter ein, so dass der Anschluss 2 von K2 von der Schaltung abgetrennt werden kann.