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:
Die zuletzt gedrückte Taste wählt den Servo aus, auf den das Potenziometer (Poti) wirkt.
Vor jeder Justage muss das Poti in die Mitte gedreht werden.
Diese Bewegung wird von der Firmware „verschluckt“
und erlaubt das Verstellen stets in beide Richtungen:
Steht der Servo an einem seiner Enden, wird damit die Endlage verstellt.
Bewegt sich der Servo gerade, wird damit seine Geschwindigkeit verstellt.
Das Auswählen eines anderen Servos (mit einer anderen Taste) beendet Einstellvorgänge
für den aktiven Servo.
So kann man Wege akkumulieren,
sollte der Stellbereich des Potenziometers nicht ausreichen.
Alle Einstellungen (auch der zuletzt ausgewählte Servo) werden im EEPROM gespeichert
Wurde (nur nach der Firmware-Neubefüllung!!) noch keine Taste gedrückt,
bewirkt die Einstellung am Potenziometer das Verändern des OSCCAL-Registers.
Damit wird die PWM-Wiederholrate eingestellt.
Dieser Vorgang darf nur mit einem Frequenzmesser oder Oszilloskop
zur Erstinbetriebnahme durchgeführt werden!
Es ist auf exakt 50 Hz abzugleichen, an irgendeinem PWM-Ausgang.
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.
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.
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:
GND (braun),
5V (rot),
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.