Projekte » ServoCtrlMini

ServoCtrlMini

Für den Bau von Robotern, speziell Laufrobotern, werden häufig Modellbau-Servos eingesetzt. Sie haben einige Vorteile: Es ist eine große Auswahl an Herstellern und Typen verfügbar, sie haben eine hinreichende Robustheit und sind einfach zu steuern. Die Steuerung erfolgt über ein PWM-Signal, dessen Pulsbreite die einzustellende Position vorgibt Für den Einsatz in einem ferngesteuertem Modell ist diese Methode vollkommen ausreichend, weil die Daten einfach per Funk übertragen werden können und die Regelung durch den Bediener der Fernsteuerung vorgenommen werden kann.

Werden diese Servos für Laufroboter eingesetzt, werden sehr schnell die Nacht dieser Steuerung deutlich. Da hier nur eine unidirektionale Kommunikation verwendet wird, ist es nicht möglich Informationen über den tatsächlichen Zustand des Servos zu erhalten. Desweiteren sind in der originalen Elektronik häufig auch nicht die Bauteile verbaut, mit denen genauere Informationen erfasst werden können.

Aus diesem Grund sind verschiedene Projekte entstanden, einfache Servos mit einer bidirektionalen Schnittstelle auszustatten. Eine Lösung zu dem Problem sind die Dynamixel-Servos von der Firma Tribotix. Diese Servos können mit verschiedenen Schnittstellen wie RS485 oder CAN angesprochen werden und bieten zahlreiche Konfigurationsmöglichkeiten. Jedoch ist der Strombedarf bei einigen der Servos im Ruhezustand recht groß, was sich negativ auf die Laufzeit eines Batteriebetriebenen Robotors auswirkt.

Eine andere Lösung zu dem Problem bietet "OpenServo". Es handelt sich hierbei um ein Open Source Projekt, die Hardware und Software ist frei verfügbar. Die Hardware ist auf niedrige Kosten ausgelegt und hauptsächlich für den Einbau in Standard-Servos gedacht. Zur Kommunikaion wird I2C verwendet, welches in vielen Mikrocontrollern als Peripherie-Modul vorhanden ist und somit eine einfache dirkte Anbindung möglich macht.

Für den von mir geplanten Einsatzort hat diese Plattform zwei entscheidende Nachteile: Die Platinen passen zum Einen nicht in kleinere Servos (da sie nicht dafür konzipiert sind). Zum anderen ist die Ansteuerung der verwendeten MOSFETs eher langsam und ausreichend. Das hat zur Folge, dass durch das Umschalten der MOSFETs Verluste entstehen, die in Wärme umgesetzt werden. Weiter Optimierungspunkte wäre die Messung der Temperatur sowie der Batterie- und BEMF-Spannung.

Aus diesem Grund habe ich eine eigene mit den folgenden Anforderungen entwicklet:

  • Kommunikation über I2C
  • Geringe Größe, passend für handelsübliche Mini-Servos
  • Ansteuerung der MOSFETs mit speziellen Treibern
  • Messung der Batterie- und BEMF-Spannung

Handbestückter Prototyp, zum Größenvergleich eine 2-Cent-Münze
Handbestückter Prototyp, zum Größenvergleich eine 2-Cent-Münze

Die Hardware besteht aus einem Mikrocontroller, einem Verstärker und einer H-Brücke. Der Mikrocontroller misst zyklisch die Position, den Strom, die Temperatur, die BEMF-Spannung sowie die Batteriespannung. Diese Werte dienen als Eingabe für eine Regelschleife. Diese bechnet in jedem Schritt, welche neue Konfiguration an der H-Brücke einzustellen ist. Dadurch ist es nicht nur möglich den Motor mit einer bestimmten Geschwindigkeit drehen zu lassen. Beispielsweise ist es auch möglich in eine Richtung beschränkt zu bremsen. Die Messung der BEMF-Spannung erlaubt es darüber hinaus die tatsächliche Drehgeschwindigkeit genauer zu messen, als es mit der reinen Ableitung der Position möglich wäre.