Startseite

Servo Controllermit I²C

Der Servo Controller ermöglicht das Ansteuern von ganz vielen Modellbau-Servos und Motor-Controllern (ESC) über einen I²C Bus.

Downloads: Schaltplan, Firmware

Sie brauchen einen billigen AVR Mikrocontroller (ATtiny2313 oder ATtiny26), ein paar Kleinteile drumherum und einen ISP Programmieradapter, um die Firmware in den Mikrocontroller zu laden.

Der Servo Controller ist für eine Versorgungsspannung von 3,3 - 5,5 Volt vorgesehen. Die Servos werden mit einer separaten 6V Batterie versorgt. Man kann bis zu 15 Chips zu je 10 Kanälen parallel an einem Bus betreiben (mit Softwareänderung theoretisch sogar noch mehr).

Übertragungsprotokoll

Der Chip wird so per I²C Bus angesprochen:

Das erste Byte enthält die 7bit große I²C Slave Adresse um ein Bit nach links verschoben. Für den ATtiny2313 gilt:

PB4PB3PB2PB1Adresseerstes Byte
000112
001024
001136
010048
0101510
0110612
0111714
1000816
1001918
10101020
10111122
11001224
11011326
11101428
11111530

Für den ATtiny26 gilt:

PB4PB3Adresseerstes Byte
001224
011326
101428
111530

Offene Adress-Eingänge liegen auf High-Pegel (1), so dass die Standard-Adresse bei beiden Varianten die 15 ist. Zusätzlich reagieren beide Varianten stets auf die Broadcast Adresse 0.

Die Daten-Bytes liegen normalerweise im Bereich 62 bis 125. Damit bestimmst du die Positionen welche die Servos anfahren sollen. Der Wert 94 bewegt den Servo in die Mitte. Der besondere Wert 0 schaltet das Signal aus, dann geht der betroffene Servo in Standby Betrieb. Wenn man weniger als 10 Daten-Bytes sendet, behalten die nicht angesprochenen Servos ihre alte Position bei.

Die LED blinkt beim Einschalten einmal kurz auf. Danach blitzt sie jedes mal, wenn der Controller über den I²C Bus angesprochen wird.

Pinbelegung Servo Motoren

Modellbau Servos haben je nach Hersteller eine unterschiedliche Pinbelegung. Üblicherweise sind die Anschlusskabel farbig gekennzeichnet:

Hinweis zur Anwendung mit Lego Mindstorms

Der Servo Controller wird vom Lego NXT Computer mit Strom versorgt. Die Motoren musst du aber mit einer separaten Batterie versorgen. Die Pull-Up Widerstände an SCL und SDA müssen 82k Ohm haben!

Servo Hacking

Unter Servo-Hacking versteht man den Umbau eines gewöhnlichen Servos, so daß er sich endlos drehen kann. Ein so umgebauter Servo Motor eignet sich zum Beispiel für den Antrieb eines fahrbaren Roboters. Man kann diese Motoren vorwärts und rückwärts laufen lassen, mit einstellbarer Geschwindigkeit.

Nach dem Öffnen des Gehäuses kann man die Zahnräder entnehmen:

Ein Zahnrad ist mit einer Nase ausgestattet, die den Drehbereich auf etwa 180° beschränkt. Diese Nase schneidest du mit einem scharfen Messer oder mit einer Feile ab. Das folgende Foto zeigt das Zahnrad mit abgeschnittener Nase:

Das Potentiometer ist (in zusammen gebautem Zustand) mit dem Zahnrad verbunden. Trenne diese mechanische Verbindung, indem du das Potentiometer näher zur Platine biegen. Drehe die Achse des Potentiometers auf mittlere Position!

Falls dazu nicht genug Platz vorhanden ist, kürze die Achse des Potentiometers mit einer feinen Säge oder tausche das Potentiometer durch ein kleines Trimmpoti aus oder ersetze es durch zwei Festwiderstände.

Wenn man nun den Servo mit dem Wert für "mitte" ansteuert, dreht er sich nicht. Bei größeren Werten dreht sich der Motor vorwärts, bei kleineren Werten dreht er sich rückwärts. Je weiter der Wert von der "mitte" entfernt ist, umso schneller dreht sich Motor. Welcher Zahlenwert genau der "mitte" entspricht, musst du experimentiell herausfinden. Das ist bei jedem Servo etwas anders und hängt außerdem von der Einstellung des Potentiometers ab.