KirmesDecoder: eine Software für OpenDecoder (V.2)
- Für Animationen braucht man oft eine speziell zugeschnittene Steuerung. Deshalb sind hier verschiedene Programme
vorhanden.
- SpielmobilDecoder macht eine Ansteuerung eines vierfach Lauflichtes zusammen mit Innenlicht und Motor.
- KirmesDecoder (nachfolgend beschrieben) macht Lichter und Motoransteuerung mit einem kleinen Sequenzer kombiniert.
- Bei OpenDCC AniMat kommt dann ein allgemeiner konfigurierbarer Sequenzer zum Einsatz, welcher auch sound unterstützt.
- english page is missing
Überblick
-
Bei der Ansteuerung von Kirmesmodellen (merry-go-round) ist die Motorsteuerung
und die Lichtsteuerung zu kombinieren.
Ein typischer Anwendungsfall für diese Steuerelektronik ist ein Karussell:
- Im Stand brennt das normale Betriebslicht bzw. es laufen die üblichen Werbelichter.
- Vor der Abfahrt ertönt eine Hupe oder Glocke und das Licht wechselt auf eine intensivere Beleuchtung.
- Nun setzt sich das Karussell in Fahrt und beschleunigt langsam bis zur maximalen Geschwindigkeit.
- Bei maximaler Fahrt werden besondere Lichteffekte gezündet: schnelles buntes Blinken oder Abdunkeln und eine Folge von Blitzen (Strobskop)
- Danach bremst das Karussell ab - doch die Mitfahrer verlangen nach einer Zugabe: also nochmal beschleunigen, kurz blinkern und blitzen.
- Das Karussell läuft aus und die normale Beleuchtung geht wieder an.
Wenn man mit dieser Software lädt, so ist die Ansteuerung u.g. Motortypen möglich, wobei jeweils eine passende Leistungsstufe dazwischen geschaltet werden muß. Diese Leistungsstufe ist vom Motortyp abhängig. Hierzu gibt es zwei verschiedene Einsteckkarten zu OpenDecoder2.
Das Licht für die Kirmes wird über die normalen Funktionsausgänge gesteuert, wobei die Steuerung auf das Abspielen komplexer Scenarien ausgerichtet ist. Die gewünschten Lichteffekte werden als Zustandsmuster (Pattern) zusammen mit Ihrer Zeit in einer großen Tabelle abgelegt. Diese Tabelle wird dann nach dem Startbefehl abgearbeitet.
Diese Software arbeitet als Accessory Decoder, die Programmierung der Effekte erfolgt mittels CV (=Configuration Variable). Die Ansteuerung im Betrieb geht dann ganz einfach mit den üblichen Weichentasten.
Theorie: Ansteuerung der Motoren
- Als Antriebsmotoren finden Allstrom-, AC-, DC- oder Schrittmotoren Verwendung.
- Allstrom:
Das ist der klassiche Märklinmotor, wo Statorfeld und Ankerfeld vom gleichen Strom erzeugt werden. - AC:
Ein typischer Vertreter ist der Faller Synchronmotor (628, 629, 180638, 180629). Wegen seiner Bauart kann er nur in einem engen Frequenzbereich geregelt werden - und ist daher eigentlich ungeeignet für eine variable Ansteuerung. Als Ansteuersignal wird ein Sinussignal variabler Frequenz benötigt. - DC:
Diese Motoren lassen sich einfach durch eine Spannung steuern. Diese ist am einfachsten mit einer PWM zu erzeugen. - Schrittmotoren:
Es handelt sich zumeist um Motoren mit zwei Windungen, die abwechseln angesteuert werden. Steuert man die Windungen nicht voll an, sondern verwendet eine sin/cos-Ansteuerung für die beiden Windungen, so erhält man ein weiches Laufverhalten und feine Auflösung. Also Ansteuersignal wird ein Vektorsignal (Sinus und Quadraturkomponente) benötigt.
- Allstrom:
- Erzeugung der variablen Sinusfrequenz
- Hier wird die Direct Digital Synthese (kurz DDS) eingesetzt. Damit kann mit einem Digitalsystem
eine analoge Kurvenform erzeugt werden, deren Frequenz
einfach verändert werden kann.
Hierzu wird im Speicher eine Sinustabelle abgelegt, bei OpenDecoder ist diese 256 Einträge zu je 8 Bit lang. Zum Erzeugen des Ausgabesignals wird nun mit einer festen Schrittweite (modulo Tabellenlänge) jeweils ein Speicherwert der Sinustabelle ausgegeben. Je größer die Schrittweite, umso höher ist die erzeugte Frequenz.
Um die Ausgabefrequenz variabel zu machen, muß also nur die Schrittweite verändert werden. OpenDecoder interpoliert dabei zwischen zwei aufeinander folgenden Stützstellen und erreicht dadurch ein sanftes Anfahren und Bremsen des Motors. - Ausgabe des Motorsignals
- Die erzeugte variable Frequenz mmuß nun an den Motor abgegeben werden. Hierzu könnten man einen
DAC verwenden oder wie in OpenDecoder eine Pulsweitenmodulation (PWM). Der geschwünschte Spannungswert
wird dabei nicht analog erzeugt und für die Zeitdauer des Samples gehalten, sondern während eines Samlpes wird
durch Ein-Ausschalten ein Puls-Pausen Signal erzeugt, dessen Verhältnis von Einschaltdauer zu Gesamtdauer
dem gewünschten Ausgabewert entspricht.
Durch Tiefpaßfilterung entsteht daraus im Mittel die gewünschte Spannung am Motor. Da die Windungen im Motor und die Trägheit des Ankers bereits einen Tiefpaß bedeuten, kann die Motoransteuerung ohne weitere Bauteile erfolgen. - Erzeugung der Signale in OpenDecoder
Das benötigte 2-phasige PWM-Signal läßt sich einfach mit dem Timer des AVR-Prozessors erzeugen. Dieser wird so programmiert (Phase-Correct-PWM-Mode), daß er bei einer Eingangstaktrate von 1MHz nach 512 Takten umläuft, was eine Wiederholrate der PWM von 1953 Hz bedeutet. Bei jedem 20. Umlauf wird die Zustandsmaschine für die Geschwindigkeitsregelung und für die Lampenansteuerung um einen Schritt weitergeschaltet. Also beträgt die Zeitauflösung annähernd 10ms.
In den Steuertabellen ist die Zeit als 16 Bitwert abgelegt, somit sind Profile mit einer Maximallaufzeit von 655s definierbar.
Lichtsteuerung
-
Mit dem der Zustandmaschine für die Geschwindigkeitssteuerung wird auch die Beleuchtung angesteuert.
Hier wird in einer Tabelle das jeweilige Ausgangsmuster zu einem bestimmten Zeitpunkt eingetragen.
Die Steuertabelle für das Licht ist wie folgt aufgebaut:
Zeitpunkt, 16 Bit [10ms] |
Ausgangsmuster, 8 Bit [bits] |
Kommentar |
0 | 0b00000100 | Grundbeleuchtung |
100 | 0b00001100 | Zuschalten Fahrlicht nach 1 Sekunde |
330 | 0b00010000 | nur Rot nach 3,3s. |
ttt | 0bxxxxxxxx | weitere Einträge, max. 50 |
0 | 0brrrrrrrr | letzter Eintrag, Ende des Profils r = reserved |
Konfiguration mit CV-Variablen
-
Damit die Karussellsteuerung wie gewünscht funktioniert,
muß der Decoder für die jeweilige Bewegungsaufgabe konfiguriert werden.
Folgende Dinge müssen eingestellt werden:
- Die Art des Motors.
- Das gewünschte Geschwindigkeitsprofil: wie soll sich das Karusell über der Zeit bewegen.
- Das gewünschte Lichtspiel: welche Aktionen (Ausgänge) sollen zu welchen Zeitpunkten aktiviert werden.
- CV 545 (33): DECODER MODE
Diese CV legt die Betriebsart des Decoders fest. Je nach nach Betriebsart kann sich die Bedeutung der folgenden CV's komplett ändern!CV 545: DECODER MODE 0 (*) Weichen- und Schaltdecoder mit Rückmeldung (Feedback) 1 Dual Servodecoder 2 Multiposition ServoDecoder 8 DMX-Decoder 16 KirmesDecoder - Motoransteuerung und Lichteffekte - CV 551: Motortyp (39)
CV 551: Motortyp 0 (*) DC-Motor 1 Bipolarer Schrittmotor (noch nicht implementiert) - CV 552: Profilvorgabe (40)
Die CV bestimmt, wie das verwendete Motorprofil (Geschwindigkeit versus Zeit) ausgewählt wird.CV 552: Profilvorgabe Wert Bedeutung *0 Nur das Profil A wird verwendet 1 Nur das Profil B wird verwendet 2 Nach jeden Lauf wird das Profil getauscht. 3 Das Profil wird per Zufallsgenerator ausgewählt. - CV 553: Richtungsvorgabe (41)
Diese CV bestimmt, in welcher Richtung das Profil abgearbeitet wird.CV 552: Richtungsvorgabe Wert Bedeutung *0 Drehrichtung wie im Profil vorgegeben. 1 Drehrichtung wechselt bei jedem Karusselllauf. 2 Drehrichtung wird zufällig gewählt. 3 reserviert. - CV 554: Pausenzeit (42)
Diese CV bestimmt die Pause zwischen zwei Karusellläufen. Einheit: 1sCV 554: Pausenzeit Wert Bedeutung 0..255 Pausenzeit in Sekunden. Voreinstellung: 30s - CV 555: Lichteffekt (53)
CV xxx: Lichteffekt Wert Bedeutung 0 Lichtprofil R gemäß nachfolgenden CVs 1 Effekt 1: 8-fach Lauflicht, ein Lichtpunkt vorwärts laufend 2 Effekt 2: 8-fach Lauflicht, zwei Lichtpunkte vorwärts laufend 3 Effekt 3: 8-fach Lauflicht, drei Lichtpunkte vorwärts laufend 4 Effekt 4: 8-fach Raupenlicht, vorwärts 5 Effekt 5: - CV 556: Wechselzeit für den Ruhe-Lichteffekt (44) (*=30)
CV 556: Wechselzeit für Lichteffekt in Ruhe Wert Bedeutung 0-255 Zeit in Einheiten von 100ms
Eine Eingabe von 0 bedeutet Ruhelichteffekt nicht wechseln - CV xxx: Zeit Streckungsfaktor für Lichteffekte (*=30)
CV xxx: Zeitstreckung Wert Bedeutung Zahl Der Lichteffekt wird um diesen Faktor langsamer ausgegeben; Eine Streckung von 1 entspricht den schnellsten Lichteffekt;
Parameter für Profile: - Lichtprofile (Pattern):
Die Ausgangsangabe erfolgt direkt als Bits, wobei eine 1 einen durchgeschalteten Ausgang kennzeichnet. Ein Lauflicht enthält z.B. die folgenden Pattern:- 1 0 0 0 0 0 0 0
0 1 0 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 1 0 0 0
0 0 0 0 0 1 0 0
0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 1 - Geschwindigkeitsprofile:
Beim DC-Motor ist im Geschwindigkeitsprofil die Spannung als signed char anzugeben - 127 entspricht hierbei volle Geschwindigkeit vorwärts. - CV 552-CV 599: Lichtprofil R (max. 16 Einträge)
- CV 600-CV 752: Lichtprofil A (51 Einträge)
- CV 753-CV 800: Geschwindigkeitsprofil A (16 Einträge)
- CV 801-CV 953: Lichtprofil B (51 Einträge)
- CV 954-CV 1001: Geschwindigkeitsprofil B (16 Einträge)
Hinweise:- Die Beschreibung zum Weichendecoder enthält die Beschreibung der CV's für normale Decoderbefehle und Adresseinstellung.
- OpenDecoder macht CV-Remapping, d.h. die CV 513 ist auch als CV 1 ansprechbar, die CV514 auch als CV2 usw.
- Nicht benutzte CV's (und nicht angegebene CV's) dürfen nicht verändert werden.
Die Profile werden jeweils durch eine Folge von Paaren aus Zeit- und Ausgangsangaben definiert, die Zeit wird als 16 Bit Wert abgelegt, die Zeiteinheit ist 10ms. Die 16 Bit Werte werden in zwei aufeinanderfolgenden CVs abgelegt, wobei die höherwertigen Bits an der höheren Adresse stehen. Je nach Profilart wird die Ausgangsangabe bestimmt. Es gibt zwei verschiedene Profile:
Beispiel:
CV 552 | 0 | CV 553 | 0 | CV 554 | 0b00000001 | Startpunkt, 1 Ausgang an |
CV 555 | 50 | CV 556 | 0 | CV 557 | 0b00000011 | nach 500ms 2. Ausgang dazuschalten |
CV 558 | 100 | CV 559 | 0 | CV 560 | 0b00001100 | nach 1000ms zwei andere Ausgänge einschalten |
CV 561 | 44 | CV 562 | 1 | CV 563 | 0b00000000 | nach 3000ms alles abschalten |
CV 564 | 0 | CV 565 | 0 | CV 566 | 0b10000011 | Listenende, Mode = Wiederholung, Pausendauer 3s. |
Decoderbefehle
-
Nach der Konfiguration des Karuselldecoders kann er wie jeder andere Decoder auch einfach über die
Stellbefehle angesprochen werden.
Taste | Wirkung |
---|---|
1 | Das Karussell bleibt mit sofortiger Wirkung stehen, alle Lichter sind aus. Das ist Nothalt! |
2 | Die Standardbeleuchtung (Lichtprofil R) wird eingeschaltet. Nach dem Ablauf dieses Profils bleibt der letzte Zustand des Profils leuchten. |
3 | Die Lightshow wird abgeschaltet (nachdem das aktuelle Muster fertig durchgelaufen ist) |
4 | Die Lightshow wird eingeschaltet (je nach Muster und CVs erfolgt der Ablauf) |
5 | reserved |
6 | Das Karussell macht einen einzelnen Durchlauf und bleibt dann stehen, dann Lichtprofil R. |
7 | Das Karussell beendet noch den aktuellen Lauf und bleibt dann stehen. Wenn es bereits steht, dann wird es nicht mehr eingeschaltet. Anschließend wird wieder auf Lichtprofil R umgeschaltet. |
8 | Das Karussell läuft permanent. Nach einem Durchlauf wird eine Pause gemäß der Pausezeit (CVxxx) eingelegt. In dieser Pause wird das Licht auf Profil R umgeschaltet, dann erfolgt der nächste Durchlauf. (Dauerbetrieb) |
Abändern der verschiedenen Lauflichtmodi
- Der Decoder enthält eine große Menge an verschiedenen Lauflichtern.
Allerdings sind darüber hinaus noch eine Vielfalt von weiteren Lichtmustern
denkbar. Lauflichter können vielfältigst gestaltet werden:
- Variation der Kettenlänge, es können 3,4,5,6 oder mehr Stränge sein.
- Variation der Lichtpunkte, d.h. wieviele Punkte leuchten zugleich.
- Variation der Laufrichtung
- Variation des Laufmodi - blinkend, durchschaltend, blitzend.
- Dynamisch veränderliche Leuchtpunktzahl - quasi ein pulsierendes Licht.
- Variation in Laufgeschwindigkeit Alle diese Laufmodi sind schwerlich in eine Auswahl zu pressen, auch hängt eine sinnvolle Auswahl auch von den geometrischen Gegebenheiten ab.
Die Software dieses Decoders benutzt daher zum Definieren der Lichteffekte ein vorgelagertes Spreadsheet, in dem die Leuchtmuster einfach "geklickt" werden können. Die entsprechenden Felder werden dann ausgewertet und die Auswertespalte wird einfach in den Quellcode (profile.h) übernommen.
Damit kann der Decoder dann leicht auf die Aufgabenstellung und die Strangzahl der angeschlossenen Lauflichter angepasst werden.
Unterlagen / Links:
-
Download Hexfile and Source Code (falls link tot: per mail)
Anwendungsbeispiel: Kaffeetassenkarussell
Berechnungsblatt zum Erzeugen weiterer Geschwindigkeits- und Lichtprofile: speed_profile.xls bitte per mail anfragen
www.mayerhofer-gmbh.de LED Streifen
http://freizeitparkweb.de
Weiter zu:
- zurück zur allgemeinen Hauptseite
zurück zur Hauptseite OpenDecoder
Download
zur Softwareerläuterung