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.
    Man hat also zwei Betriebsfälle: Werbelicht, wenn das Karusell ruht und Lichteffekte während des Betriebes, die zusammen mit der Motorsteuerung abgerufen werden. Das Werbelicht ist zumeist Lauf- oder Blinklicht, das möglichst abwechlungsreich gestaltet werden soll. Diese Software für OpenDecoder V.2 ermöglicht beides: Werbelicht und Motorsteuerung zusammen mit 'special effects'.

    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.
  • 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 0b00000100Grundbeleuchtung
    100 0b00001100Zuschalten Fahrlicht nach 1 Sekunde
    330 0b00010000nur Rot nach 3,3s.
    ttt 0bxxxxxxxxweitere Einträge, max. 50
    0 0brrrrrrrrletzter 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:
    1. Die Art des Motors.
    2. Das gewünschte Geschwindigkeitsprofil: wie soll sich das Karusell über der Zeit bewegen.
    3. Das gewünschte Lichtspiel: welche Aktionen (Ausgänge) sollen zu welchen Zeitpunkten aktiviert werden.
    Diese Parameter und damit das gewünschte Verhalten des Decoders kann einfach durch CV (=Configuration Variablen) eingestellt 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! Im folgenden sind nur die CV's für den MODE 16 beschrieben!
  • 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: 1s
      CV 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:
    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:
    • 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.
    Das Ende eines Profils wird mit Zeit=0 gekennzeichnet.
    Beispiel:
    CV 5520 CV 5530 CV 5540b00000001 Startpunkt, 1 Ausgang an
    CV 55550 CV 5560 CV 5570b00000011 nach 500ms 2. Ausgang dazuschalten
    CV 558100 CV 5590 CV 5600b00001100 nach 1000ms zwei andere Ausgänge einschalten
    CV 56144 CV 5621 CV 5630b00000000 nach 3000ms alles abschalten
    CV 5640 CV 5650 CV 5660b10000011 Listenende, Mode = Wiederholung, Pausendauer 3s.
  • 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:

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:

Weiter zu: