Die allgemeine Definition des Begriffs „Servo“ beschreibt ein Gerät, das zur Steuerung eines gewünschten Vorgangs mittels Rückkopplung verwendet wird. In der Elektronik, insbesondere bei elektromechanischen Aktuatoren, ist ein Servo ein Gerät, das eine mechanische Bewegung erzeugt, die durch einen elektrischen Impuls gesteuert wird.
 
Beispiele für solche Servos gibt es in sehr verschiedenen Bereichen, deshalb möchte ich mich auf solche konzentrieren, die in funkgesteuerten Modellen und für Hobbys im Allgemeinen sehr beliebt und weit verbreitet sind. Es gibt verschiedene Arten von Servos, analoge und digitale, mit Kunststoff- oder Metallzahnrädern, mit oder ohne Kugellager .... Alle haben jedoch eines gemeinsam: Sie können unabhängig von der jeweiligen Anwendung mit demselben elektrischen Signal angesteuert werden.
Dieses Signal besteht aus Impulsen mit variabler Breite, aber fester Periodenlänge (Bild 1), die in der Regel 20 Millisekunden (ms) beträgt. Die Impulsbreite ist das, was die Servodrehung effektiv steuert. Die Mittelposition ist bei den meisten Servos auf 1500 Mikrosekunden (µs), die Extrempositionen auf bis zu 500 µs am unteren und 2500 µs am oberen Ende eingestellt. In der Regel entsprechen diese Extrempositionen einer Drehung von -90 Grad und +90 Grad in Bezug auf die Mittelstellung bei 0. Die Drehung kann je nach Hersteller im oder gegen den Uhrzeigersinn erfolgen.
 

Bild 1. Servo-Steuerimpulse.

Die Amplitude der Impulse (in Volt) entspricht in der Regel der Stromversorgung des Servos und liegt üblicherweise bei 4,8 V oder 6,0 V, obwohl es heutzutage auch Servos mit Amplituden von 3,7 V bis zu 14 V und mehr gibt.

Warum ein Servo-Tester?

Zu einem Servo gehört auch das Datenblatt des Herstellers mit allen Spezifikationen wie maximale Auslenkung, Geschwindigkeit, Totzone und so weiter. Bei vielen preiswerten Servos oder bei gebrauchten Exemplaren ist manchmal jedoch kein Datenblatt verfügbar, oder eines, in dem wichtige Angaben fehlen oder eines, dessen Leistungsangaben in der Realität keinen Bestand haben. In diesen Fällen bringt nur das Testen der tatsächlichen Leistung eines Servos die Wahrheit ans Licht.

Entwurf eines Servotesters

Ein einfacher Servotester ist, so zeigen es zahlreiche Beispiele im Internet, auch sehr einfach zu bauen. Es genügt, den sehr beliebten Timer 555 und ein paar andere Bauteile zusammenzulöten, um einen analogen Servotester zu realisieren. Wenn Sie jedoch das Verhalten des Servos präzise messen und eine visuelle Anzeige des Steuerimpulses wollen, ist ein etwas komplexerer Ansatz erforderlich. Ein solches Testgerät könnte die Impulsbreite präzise einstellen und hätte ein Display, das diesen Wert anzeigt. Günstige Versionen im Internet haben aber den Nachteil, dass die meisten Parameter bereits vorprogrammiert sind und vom Benutzer nicht geändert werden können. Wäre es nicht toll, einen vollständig anpassbaren Servotester zu haben, bei dem der Benutzer die volle Kontrolle über alle Parameter hat, um das gewünschte Signal zu erzeugen, einschließlich manueller und automatischer Testfunktionen?

Und ob! Genau dies bietet dieser Servotester: ein vollständig programmierbares Gerät, das dem Benutzer die Kontrolle über alle Signalparameter ermöglicht, mit manuellen und automatischen Modi, mit einer klaren und intuitiven Benutzeroberfläche.

Hardware

Die vollständige Schaltung ist in Bild 2 dargestellt. Unten links ist der Anschluss (J5 - DC IN) für die Stromversorgung (durch den Regler des RC-Modells oder eine beliebige andere Stromversorgung) zu sehen. Der Tester benötigt weniger als 15 mA, so dass er keine große Belastung für die Stromversorgung darstellt. Die Spannung kann zwischen 4,5 V und 6,0 V liegen, je nach den Anforderungen des Servos.
 

Bild 2. Der Schaltplan.

Bitte beachten Sie: Der Servo erhält die volle Spannung, die von der Stromquelle geliefert wird. Achten Sie darauf, dass Sie den maximal zulässigen Wert des Servos nicht überschreiten! Bei den meisten Herstellern ist der mittlere Anschluss +V, während GND und SIGNAL auf den beiden äußeren Anschlüssen liegen. Der Stromeingang benötigt natürlich nur die beiden Leitungen +V und GND – das Signal wollen wir ja selber erzeugen - , dennoch wird für J5 eine 3-polige Buchse verwendet, damit der bei den meisten Reglern verwendete Standardstecker passt.

Auf der rechten Seite des Schaltplans befindet sich unten der Servoausgang (J4 - OUT), an dem die drei Leitungen (+V, GND und jetzt auch SIGNAL) für den zu testenden Servo beeitgestellt werden.

Rechts oben befindet sich U3, die 4-stellige 7-Segment-Anzeige mit den dafür erforderlichen Bauteilen. Die Anzeige wird vom Mikrocontroller (U2) angesteuert. Schließlich gibt es noch die „Benutzerschnittstelle“, die aus einem einzelnen Potentiometer (T1) und den beiden Schaltern X1 und X2 (1 x an) besteht. Durch Drehen des Potentiometers wird die Impulsdauer verändert, während die Schalter die vier Betriebsmodi wie in der folgenden Tabelle auswählen. Die verschiedenen Modi werden im Abschnitt über die Software erläutert:

Platinenlayout

Diese Hardware kann zwar auf einem Breadboard montiert werden, aber der Aufbau auf einer richtig gelayouteten Platine wie in Bild 3 macht das Gerät robuster und zuverlässiger. Der mit NI Multisim erstellte Entwurf und die Gerberdateien, mit denen Sie die Platine bei Ihrem bevorzugten Lieferanten bestellen können, stehen zum Download bereit. Bitte beachten Sie, dass die Kondensatoren der Oszillatorschaltung des Mikrocontrollers in diesem Platinenentwurf fehlen, aber offenbar funktioniert der Servotester des Autors auch ohne C5 und C6 einwandfrei. Die Kondensatoren können aber doch einfach auf der Kupfer-Seite (Unterseite) der Platine angelötet werden, nachdem man den eventuell vorhandenen Lötstopplack von der Massefläche abgekratzt hat. Sie können aber natürlich auch die Designdateien herunterladen und die beiden Kondensatoren dem Platinenlayout hinzufügen.

Bild 3. Bestückte Platine mit den Anschlüssen für das Poti (J3) und die Schalter (J1 und J2).

Eigenschaften und Spezifikationen

 
  • Betriebsarten: manuell (niedrige und hohe Auflösung) und automatisch (niedrige und hohe Geschwindigkeit)
  • Minimale Impulsbreite: per Software einstellbar
  • Maximale Impulsbreite: per Software einstellbar
  • Mittenposition: manuell einstellbar
  • Minimale Schritt/Impulsauflösung: 1 µs
  • Maximaler Schritt: per Software einstellbar.
  • Signalperiode: fest auf 20 ms
  • Impulsstabilität/Genauigkeit: quarzgesteuert
  • Spannungsversorgung: 4,5...6,0 V
 

Software

Der wohl wichtigste Teil des Servotesters ist die Software, in der die Präzision und die Vielseitigkeit stecken. Das Programm läuft in einem PIC16F1829 mit einem 32-MHz-Quarz als Hauptoszillator, ist in C geschrieben und verwendet den CCS-C-Compiler. Der Quellcode und die HEX-Datei zur Programmierung des Mikrocontrollers stehen zum Download bereit.

Das Programm beginnt mit den Definitionen der Hardware und ihren Anschlüssen sowie den Angaben zu den wichtigsten Referenzwerten: Die Buchstaben a bis g stehen für die sieben Segmente der numerischen Anzeige, während d1 bis d4 den vier Digits entsprechen. PWM ist das Ausgangssignal zur Steuerung des Servos und SW1 und SW2 sind die Schalter. Das Potentiometer ist mit dem Analogeingang AN7 (PIN_C3) verbunden und wird in der main-Funktion eingestellt.
Am Ende stehen vier sehr wichtige Definitionen (alle Werte in Mikrosekunden):
 

  • BRI: Helligkeit der LED-Anzeige. Diese Zahl steuert die Nachleuchtdauer aller Digits, also ihre scheinbare Helligkeit. Sie ist auf den Wert 50 voreingestellt, kann aber von 1...200 geändert werden.
 
  • SPD: Geschwindigkeit der Servobewegung im Automodus. Diese Zahl gibt die Schrittweite beim Erhöhen/Verringern der Impulsbreite an: Je höher die Zahl, desto schneller bewegt sich der Servo. Jede Zahl im Bereich 1...100 ist möglich.
 
  • MIN: minimale Impulsbreite. Dies ist die kürzeste Dauer des Impulses sowohl im manuellen als auch im automatischen Modus. Obwohl jede Zahl eingestellt werden kann, sollte man nicht unter 500 gehen, da das Servo möglicherweise nicht in der Lage ist, solche extremen Werte zu erreichen.
 
  • MAX: maximale Impulsbreite. Dies ist die längste Dauer des Impulses sowohl im manuellen als auch im automatischen Modus. Obwohl auch hier jede Zahl eingestellt werden kann, sollte man nicht höher als 2500 gehen, da das Servo möglicherweise nicht in der Lage ist, ein solches Extrem zu erreichen.

Diese vier Parameter verleihen dem Testgerät eine enorme Vielseitigkeit, wie sie in keinem billigen kommerziellen Gerät zu finden ist. Wenn Sie den Mikrocontroller in eine Fassung einsetzen, können Sie ihn leicht heraushebeln und neu programmieren und haben dann jederzeit einen neuen Tester zur Hand. Wenn Sie mit einem Parametersatz jedoch zufrieden sind, können Sie das gleiche Programm für immer beibehalten.

Jede Ziffer ist vollständig in einer Funktion (num) definiert und kann mit einer switch-Anweisung ausgewählt werden. Jedes Mal, wenn diese Funktion mit einer in n gespeicherten Zahl aufgerufen wird, wird die Zahl auf dem Display angezeigt. Um auszuwählen, welche der vier Digits zu einem bestimmten Zeitpunkt aktiv ist (da die Anzeige sequentiell angesteuert wird), enthält die Funktion digit die Auswahl, ebenfalls innerhalb einer switch-Anweisung. Immer wenn sie aufgerufen wird, wird die in z gespeicherte Zahl angezeigt. Wenn z den Wert „5“ enthält, sind alle Ziffern ausgeschaltet, damit ein sauberen Übergang von einer Ziffer zur nächsten erreicht ohne sichtbare Artefakte zu sehen ist.

Die Funktion display bringt Ziffernauswahl und Ziffernausgabe zusammen. Diese Funktion nimmt eine vierstellige Zahl, zerlegt sie in die einzelnen Ziffern und zeigt sie von rechts nach links (Einheiten zuerst) nacheinander auf dem Display an, indem sie die beiden vorherigen Funktionen aufruft. Hier wird auch die Helligkeit der Anzeige bestimmt, indem man die Verzögerung vor dem Löschen einer Ziffer festlegt.

Das genaue Timing der Periode und der Impulsdauer wird durch den TIMER1-Interrupt erreicht. Da es sich um einen 16-Bit-Zähler handelt, läuft er bei 65536 über und erzeugt damit den Interrupt. Durch Vorladen von TIMER1 mit einem Offset-Wert kann eine genaue Zeit gemessen werden. Beim ersten Aufruf dieses INT wird TIMER1 mit dem für die Impulsdauer erforderlichen Wert geladen, beim nächsten Mal ist es der Rest einer gesamten Periode. Dieser Vorgang wird kontinuierlich wiederholt (gesteuert von der Variablen pulse), so dass man eine präzise Impulszeit erreicht, während die konstante Periodenzeit von 20 ms eingehalten wird.

An dieser Stelle wird im Programm auch der Status der Schalter überprüft, um festzustellen, ob der automatische Modus gewählt ist (SW1 = 0). Ist dies der Fall, bestimmt SW2 die Geschwindigkeit des automatischen Sweeps (von MIN zu MAX und wieder zurück zu MIN): SW2 = 1 bedeutet normale Geschwindigkeit (der Impuls ändert sich um 1 µs) und SW2 = 0 steht für hohe Geschwindigkeit (der Impuls ändert sich jeweils um SPD µs). Sie erinnern sich, dass SPD eine beliebige Zahl im Bereich 1...100 sein kann? Wenn SPD auf 1 eingestellt ist, entspricht die hohe Geschwindigkeit der normalen (was nicht sehr sinnvoll ist).

main fasst schließlich alles zusammen. Neben der Initialisierung des Analog-Digital-Wandlers (ADC), von TIMER1 und der Interrupts befindet sich hier die Hauptprogrammschleife, die den Wert des ADC liest (also die Potistellung) und die Impulsdauer entsprechend einstellt.

Wenn wir uns im manuellen Modus befinden (SW1 = 1), dann wird SW2 ausgewertet. Bei einer „1“ ist der Modus niedrige Auflösung aktiv und das Potentiometer kann den gesamten Bereich der Impulsbreite (MIN - MAX) durchlaufen. Dieser Modus heißt nicht ohne Grund so: Der ADC kann nur 1024 verschiedene Pegel erfassen, aber der Pulsbreitenbereich kann 1400 µs oder mehr betragen, so dass es nicht möglich ist, eine Auflösung von 1 µs innerhalb des gesamten Bereichs zu erreichen. Wenn SW2 = 0 ist, dann ist der hochauflösende Modus aktiv. Hier ist der Pulsbreitenbereich auf 1469...1531 µs begrenzt. Mit dem Poti kann leicht eine Pulsbreitenänderung von 1 µs vorgenommen werden, was äußerst nützlich ist, um den Servo exakt in Mittelstellung (1500 µs) zu bringen und die Totzeit zu ermitteln, also die Zeit (in Mikrosekunden), die verstreicht, bis sich auf einen Impuls hin der Servo bewegt.

Professionelles Äußeres

Mit einem schönen Gehäuse, das die Hardware im Inneren schützt, sieht dieses Gerät ziemlich professionell aus. Das einfache 3D-gedruckte Gehäuse in Bild 4 sollte diese Aufgabe erfüllen. Die Designdatei steht zum Download bereit.

Bild 4. 3D-Entwurf des Gehäuses.

Die Platine wird zwischen vier zylindrischen Abstandshaltern und der unteren Gehäuseschale eingeklemmt und die obere Gehäuseschale wird mit vier Kreuzschlitzschräubchen (M2,5 x 20 mm mit Linsenkopf) befestigt. Das zusammengebaute Gerät ist im geöffneten Zustand in Bild 5 zu sehen.
 

Bild 5. Die Platine und die Anschlüsse im Inneren des 3D-gedruckten Gehäuses.

Haben Sie Fragen oder Kommentare?

Haben Sie technische Fragen oder Kommentare zu diesem Artikel? Schicken Sie eine E-Mail an die Redaktion unter luc.lemmens@elektor.com oder kontaktieren Sie Elektor unter editor@elektor.com.