Servomotor Ansteuerung

By | 20. Februar 2016

Ein Servomotor besteht neben der Mechanik aus einer Steuerelektronik und einem Gleichspannungs-Elektromotor. Beide Einheiten sind dabei auf engstem Raum untergebracht.Servo1 Die integrierte Elektronik steuert die Bewegung in dem sie u.a. den aktuellen Drehwinkel des Motors bestimmt. Dadurch kann das Eingangssignal des Servos mit der aktuellen Position des Elektromotors verglichen werden, um so die Position des Motors zu regeln.

Die Ansteuerung erfolgt über ein PWM Signal des Arduinos. Wobei die die Breite des Pulssignals dem Eingangssignal des Servos entspricht. Es handelt sich meist um eine Frequenz von 50 Hertz. Bei einer Periodendauer von 20 ms.

Die Pulsweite des Eingangssignals liegt dann im Bereich von 1ms welche den linken Anschlag des Servos darstellt und 2 ms für den rechten Anschlag des Servos. Somit liegt die Mittelposition bei ca. 1,5 ms. Während der restlichen Zeit der PWM Periode bleibt das Signal auf LOW.

Dieser Zusammenhang ist in der nachfolgenden Abbildung zur Verdeutlichung dargestellt.

 

Der Anschluss eines Servos ist relativ einfach. Die gängigsten Modellbau Servos haben 3 Anschlussleitungen. Wobei diese in der Regel wie folgt belegt sind:

GND (Schwarz)
PWM (Weiß, Gelb, Orange)
Vcc (+5V Rot)

Für Servos, die über eine größere Entfernungen angesteuert werden müssen, gibt es fertig konfektionierte Kabelverlängerungen. Diese werden mit entsprechenden Steckverbindungen geliefert und sind damit sehr leicht anschließbar. Dabei ist zu beachten, dass die Farbcodierung der Verlängerungen häufig nicht mit der der zu steuernden Servos übereinstimmt und es so zu Verwechslungen kommen kann.

Ansteuerung

Die einfachste Form der Ansteuerung erfolgt mittels der Servo-Library die Bestandteil der Arduino IDE. Die nimmt dem Entwickler die Berechnung des PWM Signals ab und erlaubt das Anfahren vorgegebener Winkel. Das nachfolgende Beispiel zeigt wie das Programmtechnisch umgesetzt werden kann.

 

Ohne Servo-Bibliothek muss sich der Programmierer um die “richtigen” Zeiten im Signal selber kümmern. Ein Beispiel:

Dazu ist es aber nötig, die spezifischen Daten des anzusteuernden Servus zu ermitteln, da nicht alle Servo-Motoren mit den gleichen Impulslängen arbeiten. Wie weiter oben im Beitrag schon erwähnt, liegen die Pulslängen irgendwio zwischen 500ms und 2500ms. Mit Hilfe eines einfachen Test-Programms lassen sich die idealen Pulslängen sehr leicht durch “Probieren” ermitteln.

Für den DS3218 Hochleistung-Servo der bis zu 2,0 kg Leistungsmoment erbringt bei einer Spannung zwischen 4,8V und 6,8V wurde über obiges Programm die darin enthaltenen Ansteuerten für die relevanten Winkel 0 Grad, 90 Grad und 180 Grad ermittelt.

Ausgehend von diesen Werten können dann alle weiteren Winkel abgeleitet werden und über eine entsprechende Funktion angesteuert werden.

 

Anwendungsbeispiel: Sonar-Sensor mit Arduino Micro-View

Der Microview ist ein Arduino-kompatibles Microcontrolersystem mit einem integrierten blauen OLED Display mit einer Auflösung von 64 × 48 Bildpunkten, das sich über die normale Arduino-IDE programmieren lässt.

694-1

Herzstück ist der ATmega328P-Mikrocontroller, der auch auf dem Arduino UNO R3 seinen Dienst verrichtet. Er bietet 32 KByte Flash-Speicher, 2 KByte SRAM und 1 KByte EEPROM zusammen mit 16 MHz Taktfrequenz. Am kleinen DIP-Gehäuse sind zwölf digitale Ein-/Ausgänge (davon drei als PWM-Ausgang) und sechs analoge Eingänge zugänglich. Statt der üblichen 3,3 oder 5 Volt lässt sich die kleine Mikrocontroller-Plattform auch über Batterien mit bis zu 16 Volt betreiben.

Die noch nutzbare Anschlussbelegung (einige der sonst üblichen Ports sind durch die Display-Ansteuerung bereits verwendet) geht aus folgendem Bild hervor:

Bildschirmfoto 2015-04-05 um 17.04.40

Damit kann man sehr kompakte Anwendungen entwickeln. Als Beispiel soll im folgenden gezeigt werden, wie damit ein Ultraschall-Sensor und ein Servomotor angesteuert werden können.

Aufbau

Die Idee besteht darin, den Sensor auf ein einen Servo-Motor zu bauen und so ein kleines Sonar-System zu konstruieren.

Sonar

Im ersten Ansatz wurde der aus dem Demo-Programm bekannte große Font zur Anzeige der gemessenen Distanz verwendet. Der dazu entwickelte Quellcode ist im folgenden dargestellt: