Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

1 - HIGH- / LOW-Signale steuern Motor

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.

 

 

 

 

 

 

 

 

 

 

Abbildung 1

Standardservo der Fa. Parallax mit

1) Anschlussbuchse für Spannungsversorgung

(rot: +5V, schwarz: GND, weiß: Datenleitung)

2) Verbindungskabel

3) Steuerhorn

4) Stirnschraube zur Befestigung des Steuerhorns

5) Gehäuse

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).

2 - Die Bibliotheksfunktionen von Servo.h

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.

Abbildung 2 - Einbinden der Bibliothek Servo.h in das Programm

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.

3 - Das Steuerhorn in die Mittelstellung drehen

Steuerhorn eines Servos in die Mittelstellung drehen
Material

1x  Arduino UNO

1x  Steckbrett

1x  Steckernetzteil

1x  Standardservo

3x  Steckdraht

1x  Drahtbrücke

Aufgaben
  • Baue die Schaltung nach Vorgabe auf dem Steckbrett auf.
  • Übertrage das Programm servo_1.ino in den Editor und speichere es ab.
  • Starte das Programm.
  • Überprüfe, ob sich das Steuerhorn in die Mittelstellung dreht.

Schaltungsaufbau auf einem Steckbrett

Das Programm servo_1.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).

Abbildung 3 - Impulslänge bei Drehung des Steuerhorns in die Mittelstellung ca. 1559µs

Die Impulse wiederholen sich ca alle 20ms (Lineallegende Abb. 4). Wird die Impulsdauer vergrößert, dann dreht der Servo in Richtung 180° Vollausschlag, wird die Impulsdauer verkleinert, dann dreht er in Richtung 0°.

Abbildung 4 - Impulslänge bei einer beliebigen Drehung des Steuerhorns ca. 20ms
Druckversion Druckversion | Sitemap
© Reinhard Rahner - Gettorf