Ein Servo mir dem Raspberry Pi steuern


Modellbau-Servos sind billige Getriebemotoren zum basteln. Sie haben drei Anschlüsse:
  1. Masse: meist schwarz der braun gekennzeichnet.
  2. Spannung: meist rot gekennzeichnet.
  3. Signal: meist gelb oder orange gekennzeichnet.
Über die Signalleitung wird das Servo gesteuert. Dies geschieht in Pulsweitenmodulation. Bei gängigen Servos bedeutet ein Pulsweite von:
  1. 1000 ms: linker Vollausschlag
  2. 1500 ms: Neutralstellung
  3. 2000 ms: rechter Vollausschlag
Die Pulse werden alle 20 ms wiederholt. Die einfachste Steuerung geht über die GPIO Pins. Dazu kann man verschiedene Biblotheken nutzen:
  1. bcm2835: keine für Servos angepasste PWM Funktionalität
  2. wiringPi: GPLv3 mit Beispiel zur Servo Ansteuerung
  3. pigpio: Echtzeitfähig mit fertiger Servo Funktion
Mein Favorit ist damit ganz klar pigio. Bei den beiden anderen flackert das Servo, da aufgrund der mangelnden Echtzeitfähigkeit das Timing nicht ganz stimmt. Dies erhöht den Stromverbrauch und lässt die Servos leicht zittern. Hier ist der Link zur Bibliothek mit einer sehr guten Anleitung zur Installation und einer hervorragenden Dokumentation. Unter den Beispielen findet man leider kein Beispiel zur Servoansteuerung. Dies hole ich mit diesem kleinen c-Programm, das ich unter GPLv3 gestellt habe, nach.


Das Programm kann man sich unter servo.c herunterladen.
Um das Programm zu compilieren, habe ich einen makefile geschrieben:

#
# Makefile von servo
#

servo:		servo.o
		gcc servo.o -lpigpio -lrt -o servo

servo.o:	servo.c
		gcc -c servo.c


Der makefile muss im selben Verzeichnis wie der c-file sein und wird mit make gestartet. Vor dem ersten Start des Programms muss noch der im Hintergrund laufende Daemon mit dem Befehl sudo pigpiod gestartet werden. Das Programm selbst wird dann mit ./servo ausgeführt. Hier ist noch ein Bild meiner Experimentalanordnung:



Ich habe statt des Servos auch das bitscope Digitaloszilloskop (siehe Bild oben) an die Signalleitung gehängt und folgende Aufzeichnung erhalten:



Die Ansteuerung eines Servos mit der Bibliothek pigpio ist wegen der Echtzeitfähigkeit deutlich exakter und mit den Bibliotheken bcm2835 und wiringPi nicht zu vergleichen.

Dieses Programm wurde an einem Raspberry Pi 2 Model B V1.1 mit Raspbian Betriebssystem getestet.

(c) 2016, letztes Update 08.03.2016