Wie bei den LEDs lassen sich auch Servomotoren über HIGH und LOW Signale in eine kontrollierte Bewegung versetzen. Der Unterschied zur LED ist aber die viel schnellere Impulsfolge solcher HIGH-LOW-Signale. Würde man zur Kontrolle bei der Ansteuerung eines Motors eine LED zur Hilfe nehmen, dann würde das menschliche Auge die schnellen Änderungen der HIGH und LOW Signale an den Motor nicht auflösen können. Als Ergebnis sehen wir nur eine mehr oder weniger hell leuchtende LED.
Der einfachste Motor, mit dem man das Ansteuern durch einen Mikrokontroller näher untersuchen, lernen und verstehen kann ist der Standardservo. Er benötigt keine zusätzlichen elektronischen Hilfsschaltungen oder mechanische Zusatzbauteile und er ist sehr leicht über den Arduino UNO ansprechbar.
Standardservos finden sich in allen ferngesteuerten, sogenannten RC-Modellbauten, wie Flugzeugen, Hubschraubern, Quadrocoptern, Booten und Fahrzeugen. In Autos sind sie unter anderem für die Lenkung und die Drosselklappe beim Motor verantwortlich, in einem Boot für die Ruderanlage und in einem Flugzeug für die Quer- und Seitenruder.
Ein RC Flugzeug wird per Funk-Fernsteuerung mittels zweier sogenannter Reflexstifte oder Steuerknüppel gesteuert, die wie Joysticks aussehen. Die Steuerungsdaten werden per Funk von der Steuerungseinheit an das Flugzeug übermittelt und dort von den jeweiligen Servos entsprechend umgesetzt.
Genauer gesagt wird jede Position der beiden Steuerknüppel von der Fernsteuerung möglichst schnell in Steuerimpulse bestimmter Länge umgesetzt. Die Länge eines Impulses ist ein Maß für die Position des Joysticks. Im RC-Modell werden die Steuerimpulse in digitale Impulse (HIGH/ LOW) umgesetzt und dann an die Servos übergeben. In jedem von ihnen existiert eine elektronische Schaltung, die diese digitalen Impulse wiederum in eine Drehbewegung umsetzen kann.
Die Länge eines Impulses ist dabei ein Maß für die Position, die das Steuerhorn eines Servos dann einnimmt oder den Winkel um den es sich dreht. Diese Impulse werden 40 bis 50 mal pro Sekunde wiederholt, haben eine Impulslänge von wenigen tausendstel Sekunden und halten den Servo in seiner Position.
In diesem Abschnitt werden wir den Arduino UNO so programmieren, dass er Impulssignale an den Servo sendet und das Steuerhorn in bestimmte Positionen dreht oder den Servo in einer bestimmten Position hält. Die folgenden Programme fragen Drucktaster ab und benutzen die Information, ob ein Taster gedrückt wurde oder nicht, um das Steuerhorn eines Servos in eine bestimmte Position zu drehen oder dort zu halten (Servo Positionskontrolle mit Drucktaster).
Servos empfangen über eine Steuerleitung (weißes oder gelbes Kabel) von einem Mikrocontroller einen Impuls variabler Breite, den der Servo in eine Drehbewegung umsetzt.
Die Mittelstellung (auch Neutralstellung genannt) eines Servos ist dadurch festgelegt, dass das Stirnrad oder Steuerhorn auf der Antriebsachse um den gleichen Winkel vom rechten wie vom linken Anschlagpunkt entfernt ist.
Speziell für die Ansteuerung von Servos gibt es eine Funktionsbibliothek Servo.h, die zu Beginn eines Programms im Hauptmenü über Sketch - Bibliothek importieren ... - Servo eingebunden werden muss.
Die Bibliothek umfasst sechs Funktionen:
servo_1.writeMicroseconds(µs);
bewegt das Steuerhorn mit dem Wert 1000 in die extremale linke Position (entgegen dem Uhrzeigersinn) und mit 2000 in die extremale rechte Position (im Uhrzeigersinn). Die Mittelstellung wird mit dem Wert 1500 eingenommen.
servo_1.write(Grad);
bewegt das Steuerhorn in die Position Grad. Grad kann die Wert zwischen 0 und 180 annehmen.
servo_1.read()
gibt den Winkel des Steuerhorns eines Servos in der Einheit ° (Winkelgrad) zurück. Der Wert liegt zwischen 0 und 180 und bezieht sich auf den zuletzt ausgeführten write-Befehl.
servo_1.detach();
Trennt die Servovariable vom Anschlusspin.
servo_1.attached();
gibt den Wert TRUE zurück, wenn ein Servo an Pin angeschlossen ist.
servo_1.attach(pin, min, max);
pin: Anschlusspin für das Steuersignal an den Servo; min(opt.): Pulsweite in µs für den kleinsten Drehwinkel (Vorgabewert: 544); max (opt.): Pulsweite in µs für den größten Drehwinkel (Vorgabewert: 2400)
Ein mit dem Arduino UNO verbundener Servo wird durch eine Instanz der Klasse Servo repräsentiert. Ich habe die Instanz hier servo_1 genannt.
Steuerhorn eines Servos in die Mittelstellung drehen | |
Material |
|
Aufgaben |
|
Schaltungsaufbau auf einem Steckbrett
Das Programm Servo_UNO_WiFi_R2.ino
servo_1.write(90) liefert an die Steuerleitung des Servos eine pulsweitenmodulierte Impulsfolge, bei der die Impulsdauer ungefähr bei ca. 1500µs liegt (dieser Wert ist vom Hersteller abhängig). Das Zeitdiagramm bestätigt diesen Wert für die aufgenommene Impulsfolge (Lineallegende in Abb. 3).
Die Impulse wiederholen sich ca alle 20ms. Wird die Impulsdauer vergrößert, dann dreht der Servo in Richtung 180° Vollausschlag (s. Abb. 4), wird die Impulsdauer verkleinert, dann dreht er in Richtung 0° (s. Abb. 5).
Die Stillstands Totzone eines High Speed Feedback 360° Umlauf-Servos der Fa. Parallax liegt bei 1500 µs +/- 10%. Dieser Wert wird durch das Oszillogramm bestätigt (s. Abb. 6).