Servo I/O Board
++++ Diese Seite ist auch in Englisch vorhanden ++++
Ein Kollege bat mich, schnell eine Platine zu bauen. Damit sollten acht Servos zwischen min. und max. Stellung angesteuert werden.
Einsatz in einer Modellbahnanlage Spur0 für die Ansteuerung der Weichen.
Das Board kann auch von Personen ohne Arduino Programmierkenntnisse verwendet werden.
Mit einem Atmega328 und etwas Software kein Problem. Die Software wurde mit der Arduino IDE entwickelt
Für den Echtbetrieb ist eine eigene Platine gemacht worden, da mir die Arduinos generell im Echtbetrieb nicht gefallen. Die Arduinos sind
hervorragend für die Entwicklung, aber im Echtbetrieb meiner Meinung nach weniger geeignet.
Servos sind heute sehr billig in vielen Größen zu haben, und sind eine gute Alternative zu Hubmagneten, wenn Mechanik bewegt werden soll.
Schaltung
Als CPU wird ein Atmega328 in Standard Beschaltung verwendet. 16Mhz Quarz, ISP Stecker zur Programmierung, I/O Pins mit Schutzwiderständen.
Die Platine kann natürlich auch anders verwendet werden. Eingänge A0-A5 können auch als Analog Eingänge verwendet werden.
Bei Verwendung der ADC Funktion sollte der 1K Wid an Pin 20 durch eine 100µH Drossel ersetzt werden (wird hier nicht gebraucht).
Die Pull-Ups nur bestücken wenn gebraucht. Per Software können auch interne Pull Up Widerstände definiert werden. Die sind aber nur bei
Laufzeit des Programms wirksam und schützen nicht die Eingänge im Stromlosen Zustand. Daher sind hier die 10K Widerstände als Pull-UP vorgesehen.
Für andere Anwendungen können die Pins nach Wunsch konfiguriert werden.
Die Stromversorgung ist hier zweigeteilt. Ein 78L05 versorgt die CPU.
Dazu ist noch ein extra Zweig mit 7805 ist für die Servos vorgesehen. Stromspitzen haben hier keine Auswirkung auf die CPU.
Als Verpolungsschutz ist eine 1N4007 vorgesehen. Falls anstatt des 7805 ein Traco TSR2 2405 Regler mit 2A Ausgangstrom verwendet wird, sollte die
1N4007 durch eine 1N5408 ersetzt werden.
Servos werden mit einem PCM Signal angesteuert, die Pulsweite entspricht der gewünschten Position auf die das Servo hinfahren soll. Das Servo versucht
immer, solange das PWM Signal anliegt, diese Position zu halten, was dann in einem hohen Stromverbrauch resultiert. Im Modellbau werden Servos von Rudern
so angesteuert. In dieser Konfiguration wird von zwei
stabilen Endlagen ausgegangen, daher ist hier die Länge des Schaltbefehls mit 700mS eingestellt. Wenn das PWM Signal nicht anliegt, kann das Servo durch
mechanische Kräfte am Arm verstellt werden. Selbsthaltung der Positionen ist hier nicht notwendig.
Ansicht Platine und Bestückung
Denkbar ist auch die Servos mit einem externen 5V Netzteil zu versorgen, falls höhere Ströme gebraucht werden. Hier den Regler 7805 nicht bestücken und die 5V
vom Netzteil über den Kontakt (Regler 7805 OUT) an die Platine bringen. Die Bauteile vor dem Regler entfallen dann. Die CPU sollte aber in jedem Falle über den eigenen 78L05
versorgt werden.
Zuführung einer externe Spannungsquelle für große Servos (optional)
Sonderfall nur wenn Hochstrom Servos im Einsatz.
Platinenvorlage als Pdf
Servoboard PDF PlatinenvorlageZusammenbau
- Platine bestücken
- Atmega328 flashen, entweder per ISP Sockel oder extern.
- Servo 0 Grad Lage Linkhebel montieren. Im Normalfall bei offenen Schalter fährt Servo in die 0 Grad Position.
- Servo MAX Grad testen. Der Defaultwert ist 180 Grad (die Servos erreichen nie im allgemeinen die Werte)
- optional Servo MIN und MAX Wert und die Richtung per Lernmodus einstellen, damit der Wert mit der Mechanik harmoniert.
Beschreibung der Software
Im Normalbetrieb blinkt die CPU LED. Es werden alle Schalter angefragt und die Servos danach gestellt.
Weiters ist die Watchdog Funktion des Atmegas aktiviert mit 4 Sekunden. Bei einer Versorgungspannung unter 2,7V bleibt die CPU stehen. (Fuse BODLevel)
Zum Einstellen der Richtung und Auslenkung ist jedes Servo individuell Einstellbar. Diese Werte werden im EEprom der CPU dauerhaft gespeichert.
Wenn bei Power ON der MISO Pin auf GND liegt, wird in den optionalen Lernmodus verzweigt. Die Brücke ist nur beim Einschalten relevant und kann dann sofort entfernt werden.
Der MISO Pin ist mit keinem Schalter verbunden, kann daher nicht unabsichtlich per Schalter eingeschaltet werden.
Der Lernmodus wird dargestellt, in dem die CPU LED nicht blinkt. Der Lernmodus ist auch nicht für den Dauerbetrieb vorgesehen - Kein Watchdog.
Im Normalbetrieb sind alle Servos mit 0-180 Grad eingestellt. In der Praxis werden die 180 Grad von der Servomechanik nicht erreicht. Abhängig von der Servotype.
Damit die Auslenkung individuell an den Einsatz angepasst wird ist der Lernmodus vorgesehen.
Die Auslenkung kann im sogenannten Lernmodus für jedes Servo 1-8 in 5 Grad Schritten eingestellt werden.
Auch kann definiert werden ob MIN - MAX (Servo) zu OPEN - CLOSE (Schalter) oder umgekehrt zugeordnet ist.
Diese Werte werden im EEprom des Atmega328 abgelegt.
Der Lernmodus wird durch eine Brücke von GND auf MISO (pin1) des ISP Steckers, während Power ON gestartet.
Im Lernmodus gibt es keine Watchdogüberwachung und die LED blinkt hier nicht.
Der Lernmodus ist für die Anpassung der Auslenkung und die Richtung an die Mechanik gedacht, Die Werte werden dauerhaft in das EEProm gespeichert.
Ein Servo zum Test der Mechanik und zur Einstellung wird an den Servoausgang 1 angeschlossen.
Die 8 Tasten habe nun eine andere Bedeutung.
Taste 1 Servoadresse bit 0 - wertigkeit 1
Taste 2 Servoadresse bit 1 - wertigkeit 2
Taste 3 Servoadresse bit 2 - wertigkeit 4
Damit können 0 - 7 also die Servos 1 - 8 angesprochen werden. Das Servo ist im Lernmodus IMMER an Servoport 1 !!
Adresse 0 = alle Schalter offen. Adresse 7 = alle 3 Schalter zu. Die 3 Wertigkeiten werden addiert und bilden dann die Servoadresse.
(Das Programm zählt intern von 0-7. Am Print werden die Servos von 1-8 nummeriert.)
Taste 4 Kopiert die Einstellung von Servo #0 zu #1 - #7, damit müssen nicht alle Servos einzeln angelernt werden.
Taste 5 Damit führt das Servo eine Bewegung MIN-MAX durch, solange dieser Schalter geschl. ist, zur Beurteilung der Bewegung an der Mechanik.
Taste 6 Definiert OPEN/CLOSE. Servo MIN oder MAX für OPEN und CLOSE anlernen.
Taste 7 vermindere den Wert in 5 Grad Schritten 0 istMIN.
Taste 8 erhöhe den Wert in 5 Grad Schritten 180 ist MAX.
Anleitung Lernen:
Bei Anwahl der Lernmodus, fährt das Servo auf Mittelstellung.
Adresse Servo 0 einstellen.
Taste 6 offen - Mit Taste 7 und 8 auf gewünschte Postion fahren, welche der Schalterstellung OFFEN entspricht.
Taste 7 zu - Mit Taste 7 und 8 auf gewünschte Postion fahren, welche der Schalterstellung ZU entspricht.
Mit Taste 5 die Servo Bewegung testen, evtl, mit 6, 7 und 8 korrigieren.
Wenn OK - dann entweder mit Taste 4 "copy der Einstellungen" - fertig
oder jedes Servo einzeln einstellen - fertig.
Bei Neustart werden nun diese abgespeicherten Werte aus dem EEprom verwendet.
Ohne Lernmodus werden alle Servos mit Richtung OPEN - CLOSE und Auslenkung 0 - 180 Grad als Standard Wert geschaltet.
Nach Ausschalten und Wiedereinschalten ohne Brücke MISO-GND, blinkt die CPU Led und die Werte aus dem EEProm werden nun angewendet.
Software download
Die Software wurde mittels Arduino IDE entwickelt und getestet. Export als Hexfile mit bootloader.
Die Fuses entsprechend zum Flashen einstellen. Info: Der Atmage328 ist in einem Arduino UNO sofort lauffähig, wenn er so geflasht wurde.
In der Arciv Datei ist das Hexfile, die Programm Source und eine "Fusesatmega328.txt", welche die richtige Einstellung der Fuses beschreibt.
Software Version 1.03 zum download
ISP Programmierung des Servoboards mit 6 poligem ISP Kabel
Bezugsquellen
Programmierte Atmega328 können beim Autor bezogen werden, falls jemand keine Ausrüstung zum Flashen von Atmega CPUs hat.
Geringe Mengen an Platinen können ebenfalls bei mir bestellt werden.