Servo als Türöffner

Ziel ist es, per Tastendruck eine Tür (etwa eines Lokschuppens) langsam zu öffnen oder eine Weiche langsam umzuschalten, wie in Wirklichkeit. Normale Servos sind als Antrieb gut und preiswert, drehen aber viel zu schnell. Zudem ist Tasten- statt Potenziometerbetrieb gewünscht. Die Endanschläge sollen softwaremäßig feinjustiert werden können. Beschleunigungs- und Bremsphasen sind optional, aber wünschenswert.

Ein Muster wurde für zwei Servos mit ATtiny13 aufgebaut. Für einen vieltürigen Lokschuppen wurde mit einem ATmega8 das Maximum, nämlich 15 Servos, herausgeholt, ohne externe Portexpander oder ähnliches verwenden zu müssen.

Gibt's schon, nur IMHO nicht so richtig open-source. Beispielhaft als Youtube-Video.

Ein Anschluss an eine Zentralsteuerung („digitale Modellbahn“) war nicht gewünscht und ist nicht vorgesehen.

Das Justage- und Bedienkonzept ist einheitlich:

Das Poti mit dem Mitteleinstellzwang erspart den teureren, hier richtigeren Inkrementalgeber. Zudem wird damit ein Pin des Controllers gespart, und dadurch bleibt im Endeffekt stets RESET frei zur 5V-ISP-Programmierung.

Mit ATtiny13A

Dieser Mikrocontroller ist sehr günstig zu bekommen, und dessen Datenblatt ist erfreulich dünn. Das bedeutet auch, dass dieser nicht allzu viel kann.

Die Firmware. Der Schaltplan ist darin als Netzliste dokumentiert. Die Firmware läuft mit internem 128-kHz-Oszillator auf 64 kHz geteilt und ist so extrem Strom sparend. Zwei Taster und zwei Servos können angeschlossen werden. Die Pulsweitenerzeugung erfolgt per Hardware und ist jitterfrei.

Das verbleibende Problem aller derartigen Lösungen ist, dass der Servo ruckelt. Auch im o.a. Youtube-Video ist das zu sehen und zu hören. Um den Motor richtig zu regeln, müsste der Servo elektrisch frisiert werden, etwa wie die folgende Abbildung zeigt.

So sollte ein Servomotor für ruhiges Betriebsverhalten bei langsamer Fahrt angesteuert werden. (4 Freilaufdioden fehlen im Bild.)
Ein ATtiny13 kann dann nur noch einen Servo bedienen. Die Motorsteuerung kann geräuschfrei mit hochfrequenter Hardware-PWM erfolgen. Zudem wird wesentlich weniger Energie im Servo verbraten.

Mit ATmega8

Dieser Mikrocontroller lag bei mir noch herum, ein ATmegaX8 (wie auf Arduino Uno verbaut) oder die neuen ATtinyX8 gehen auch. Es genügen die Derivate mit kleinstem Flash-Speicher, also bspw. ATmega48. Der alte AT90S4433 geht erst mal nicht, der braucht einen Quarz, und man verliert zwei Servo-Ausgänge.

Die Firmware. Der Schaltplan ist darin als Netzliste dokumentiert. Die Firmware läuft mit internem 8-MHz-Oszillator und ist maximal Strom sparend ausgelegt. 15 Taster in einer Charliplex-Matrix (an 6 Leitungen) und 15 Servos können angeschlossen werden. Die Pulsweitenerzeugung erfolgt per Software, gestützt von einem 16-bit-Zeitgeber, und ist jitterarm (max. 2 µs), im stationären Betrieb (alle Servos im Stillstand) jitterfrei.

Aufbau-Foto auf einer chinesischen Lochrasterplatte
Der Aufbau erfolgte auf einer Lochrasterplatte mit rückseitiger Verdrahtung mit dünnem Schaltdraht. Die 3-poligen Anschlüsse zu den 15 Servos (obere Reihe) sind gelückt, weil ein Stecker etwas breiter als 2,54 mm ist. Mehr als 2 nebeneinander würde zu sehr drängeln. Die Anschlussfolge ist, von oben nach unten:
  1. GND (braun),
  2. 5V (rot),
  3. PWM-Signal (orange).
Die beschriftete Schraubklemme links dient der Stromversorgung der Schaltung und Servos mit 5 V Gleichspannung. Rechts oben befindet sich der ISP-Stecker (6-polig, gelb). Rechts unten befindet sich der Anschluss für die Tastenmatrix (6-polig, schwarz). Dazwischen ist der Einsteller für die Endanschläge und Geschwindigkeiten. Ein großes Exemplar, um einen Phasenprüfer oder eine Steckachse verwenden zu können. Unterhalb des Controllers ist Platz gelassen worden, um eine einreihige 6-polige Stiftleiste zu bestücken.

Falls es später doch noch zur Digitalumstellung kommt, liegen auf den Tastenanschlüssen RxD und TxD. Dann darf kein ATtinyX8 eingesetzt werden. Bei anderen Signalisierungssystemen als TTL-RS232 muss man's mit Software allein erschlagen.