Entwicklung Drehscheibensteuerung

Voraussetzungen, Entstehung

    Um eine Drehscheibe automatisiert einsetzen zu können, sind die üblichen mitgelieferten Drehscheibensteuerungen nicht geeignet: oft kann man ein Gleis nicht gezielt anfahren, und auch das Thema Objekte auf der Drehbühne bzw. Rückmeldung der Lokposition ist nicht berücksichtigt.
    Dieses Projekt entstand in Zusammenarbeit mit Ralph Kappis vom MEC Waiblingen.

    Beginnen wir mit den Voraussetzungen und sehen uns zuerst mal die Bühne an: Problempunkte sind hier der Einbauplatz und die beschränkte Leitungszahl von der Bühne zur Grube.
  • Einbauplatz:

    Hier lassen sich folgende Platinengrößen unterbringen:
    Blau (freier Platz): L = 110, B = 27, H = 7
    Gelb (Motor und Stopper): L = 60, B = 27, H = 14
    Rot (Häuschen): L = 40, B = 45, H = 14

    Bei einer Hapo-Scheibe sind zwei schlanke Platinenplätze unter der Bühne möglich.
  • Schleifkontakte:
    Obige Bühne hat 5 Schleifbahnen, eine Hapo nur 2 bzw 4 Schleifbahnen. Alternativ kann man auch mit Folienkabelwickel arbeiten, dann kann man aber die Bühne nicht mehr endlos durchdrehen. (hat aber die Probleme mit mangelnder Kontaktgabe nicht mehr). Bei Schleifkontakten muß man sich also in der Leitungszahl beschränken, deshalb muß die Übertragung gesichert sein, damit keine falschen Daten empfangen werden.

Anforderungen, Wünsche

    Wenden wir uns den Anforderungen zu, hier gibt es folgendes zu berücksichtigen:
  • Drehen
    Es gibt rastende Bühnen (mit 24 / 48 Raststellungen) und frei drehende Bühnen, z.B. Hapo oder Selbstbaulösungen. Rastende Bühnen gleichen Spiel und Unsicherheiten im Antrieb dadurch aus, dass sie in der Zielposition einen Formschluß zwischen Bühne und Grube herstellen. Die Hapo-Bühne wird 'analog' positioniert.
    1. Nullpunktsbestimmung
      Hier gibt es verschiedene Möglichkeiten:
       - wird per Knopfdruck gesetzt
       - Absolutgeber auf der Bühnenachse
       - Referenzschalter / Lichtschranke; hierbei ist die Anfahrrichtung und Reproduzierbarkeit wichtig.
    2. Zielvorgabe
      Dies kann entweder durch die Rastposition oder direkt durch die Winkelstellung der Bühne erfolgen. Zusammen mit dem Ziel ist dann auch ein Vorgabe sinnvoll, wie bei diesem Zielgleis das Kehrschleifenrelais stehen soll.
    3. Positionsmeldung
      'Sie haben Ihr Ziel erreicht': solange man manuell fährt, sieht man das, aber für einen PC-Betrieb braucht es eine Rückmeldung, dass die Brücke in Position ist. Erst dann darf die Ausfahrt oder Einfahrt erfolgen.
  • Ansteuerungen auf der Bühne
    1. Beleuchtung
      Zumeist wird man das Häuschen mit einem Licht ausstatten.
    2. Signale
      Denkbar sind sowohl Lichtsignale als auch Formsignale (via Mikro-Servo).
  • Rückmeldung Fahrweg auf der Bühne
    Die Position von Lokmotiven muß gemeldet werden. Rocrail kennt z.B. Events beim Betreten eines Block und wenn das Fahrzeug 'drin' ist. Auch TC benötigt zum genauem Halt einen physikalischen Haltmelder. Es gibt also typischerweise 3 Meldesignale: Bühne belegt, Lok ist komplett auf der Bühne (d.h. je nach Richtung Melder beim Häuschen, Melder gegenüber des Häuschens) . Das können elektrische Abschnitte sein, sinnvoll sind auch (Reflex-)lichtschranken für die Endmelder.
    Die Ereignisse dieser Melder müssen mit geeigneter Kodierung über den (leitungszahlbeschränkten) Drehring übertragen werden.
  • Zusatzfunktionen
    1. Sound
      Drehscheiben-Sound via SUSI (Doku: http://www.d-i-e-t-z.de/7_5.htm)
    2. integrierte Kehrschleifen-Funktion
      Zusammen mit der Zielwinkelstellung wird die Stellung des Kehrschleifenrelais gespeichert.

Lösungsansatz

    Von den Anforderungen her hat sich eine Aufteilung der Steuerung in einen Bühnenteil (welcher sich mitdreht) und einen stationären Teil (=Grube) angeboten. Diese beiden Teil sollen über möglichst wenig Leitungen miteinander verbunden sein (Schleifringe).
  • Drehen
    Hier kommt ein revolutionärer Ansatz zum Tragen: Anstelle der spielbehafteten Mechanik mit Getriebe kommt ein Direktantrieb mit Schrittmotor zum Einsatz. Schrittmotoren gibt es mit einer Auflösung von 200 oder 400 Schritten/U etwa in der Größenordnung 10-20€ (40mm x 40mm).
    200 Schritte würde eine Schrittauflösung (bei einer 26cm-Scheibe) von 260mm * Pi /200 = 4mm ergeben. Die Positionsgenauigkeit wäre davon die Hälfte, ist aber mit 2mm immer noch viel zu groß. Man kann aber die Schrittauflösung eines Steppers durch Microstepping elektrisch vergrößern: es gibt Schrittmotorcontroller, welche 32-faches Microstepping realisieren können: damit kommt man rechnerisch auf 0,06mm!

    Hier sieht man die Montage des Motors.
  • Grubenplatine, StepControl
    Mit diesem Ansatz ist die Motorsteuerung Bestandteil der 'Grube' (also stationär), auch die Rückmeldung der Bühnenposition und der Sound wird über diese Baugruppe StepControl gelöst. Die Platine StepControl hat folgende Eigenschaften:
    1. DCC Eingang inkl. railcom (für 'legacy' Ansteuerung)
    2. BiDiB-Inferface: Ansteuerung, Belegtmeldung, FW-Update
    3. zwei serielle Inferfaces (für zusätzliches Handbedienpult bzw. PC)
    4. Stepperansteuerung für bipolaren Schrittmotor bis 1A
    5. integrierte Kehrschleifenautomatik für die Bühne
    6. Zwei Eingänge für Hallsensoren, je 3-polig (Home-Position)
    7. Susi-Schnittstelle (Sound)
    8. Optokopplerinterface zur Bühne für Befehle und Belegtmeldung (serielle Ein-Drahtschnittstelle)
    Schaltungsbeschreibung
    Die Ansteuerung des Schrittmotors erfolgt mit dem StepperDriver DRV8825 von Texas Instruments. Dieser hat einen einstellbaren Chopperstrom für die Spulen (über die Eingänge AVREF bzw. BVREF), intern wird die hier angelegte Spannung mit dem Spannungsabfall an den Sense-Widerständen verglichen. Es gilt: I(chop) = V(ref) / 5 / R(sense). V(ref) wird mit dem D/A-Wandler des Prozessors erzeugt, damit kann man je nach Lastfall den Strom des Motors einstellen bzw. bei Stillstand reduzieren. Allerdings ist diese Einstellung nur im Bereich 1V bis 3V genau, es sollten daher die Sensewiderstände so dimensioniert werden, dass sich bei zulässigem Nennstrom des Motors ein Spannungsabfall von 600mV ergibt.
    Die Referenzspannung der Stepper-Brücke wird mit dem D/A-Wandler des Prozessors erzeugt. Damit ist der Prozessor in der Lage, bei Stillstand der Brücke den Strom durch den Motor signifikant abzusenken und so die Erwärmung zu reduzieren.
  • Bühnenplatine
    Die Bühnenplatine ist mit der Grube über Schleifringe verbunden, die Zahl der Leitungen zwischen Bühne und Grube muß daher möglichst minimal sein.
      Vorüberlegungen: Zwingend muß der Gleisstrom auf die Bühne geführt werden, des weiteren braucht es einen Kanal für Schaltinformationen (Servo, Licht) und einen Rückkanal für die Belegungsmeldungen.
      Man könnte Schaltinformation und Belegungsmeldung in das Gleissignal einmultiplexen, nur fehlt es an geeigneten railcom-Nachrichten für eine Belegungsmeldung, des weiteren ist railcom von der Struktur her relativ schlecht geeignet, ein Polling der Belegung durchzuführen (das zu Grunde liegende System ist broadcast-orientiert).
    Daher habe ich mich für einen separaten Rückkanal (Stromschleife auf RS232-Basis) entschieden. Dieser hängt einseitig am DCC des Bühnengleises und wird in der Grubenplatine über einen Optokoppler empfangen. Für die Gegenrichtung wird in der Grube der Ausgangstransitor eines OC geschaltet - dieser zieht dann die Leitung auf Low. Die Übertragung erfolgt als Stromschleife mit 5mA im Halbduplexbetrieb mit 19200 Baud, 8N1. Durch ein gut abgesichertes Protokoll mit CRC und Sequenzkontrolle werden ev. Kontaktprobleme adressiert.

    Die Platine 'Bühne' hat folgende Eigenschaften:
    1. DCC Eingang (für railcom-Erkennung, optional auch für Schaltaktionen)
    2. 4 * Servoausgang
    3. 4 * Lichtausgänge für Signale und Häuschen
    4. 4 * Belegtmeldung über Stromsensor (mit railcom)
    5. SUSI-Schnittstelle
  • Bedienung
    Die StepControl kann über mehrere verschiedene Wege bedient werden:
    • BiDiB: Bei BiDiB erfolgt die Ansteuerung über ein einzelnes Accessory-Objekt, welches dann für jeden Abgang einen Begriff hat. Die Bühne wird als einfach durch Aktivieren dieses Begriffes in die passende Position gesteuert. Wann und ob die Bühne die Zielposition erreicht hat, wird bei BiDiB ja einfach mit dem Accessory-Status gemeldet.
      Der Zugriff auf die Konfiguration erfolgt einfach menugeführt mit dem BiDiB-Monitor.
    • DCC: Bei DCC wird i.d.R. eine Abbildung auf einzelne Weichenbefehl vorgenommen, die Drehscheibe belegt dabei einen ganzen Block an Weichenadressen.
    • Debug-IF: Hier kann ein übliches FTDI-Kabel mit 115200 8N1 angeschlossen werden und mittels eines Terminalprogrammes sind Einstellungen der StepControl möglich.
    • Handpult: in Planung.

    Erstmaliges Einrichten und Konfiguration der StepControl

      In folgenden sind die Schritte beschrieben, welche der Reihe nach zur Inbetriebnahme der StepControl erforderlich sind

    Festlegung Typ

      Als wichtigste Einstellung muß zuerst der Typ der Scheibe festgelegt werden. Erst nach der Einstellung des Typs sind die weiteren Einstellungen vorzunehmen.
    • LINEAR:
      Die Steuerung geht von einem endlich begrenzten Fahrweg aus und bewegt sich nur innerhalb dieses Fahrwegs. Alle Gleisanschlüsse sind nur in einer Polarität erreichbar, diese kann aber wahlfrei festgelegt werden.
    • ROUND:
      Die Steuerung geht von einem sich zyklisch wiederholendem Fahrweg aus (sie kann also 'durchdrehen') und bewegt sich auch über die 'Endanschläge' hinaus. Alle Gleisanschlüsse sind in zwei Polaritäten erreichbar (Mit Häuschen dem Anschluß zugewandt bzw. abgewandt).
    • DebugIF-Befehl: DT 0|1

    Einstellungen Antrieb:

      Der nächste Schritt ist die Einstellungen des Motors: Anfahren, Bremsen, Drehgeschwindigkeit, Anzahl echter Schritte, Anzahl virtueller Schritte, Getriebespiel, all das muß konfiguriert sein, bevor Gleispositionen angefahren werden können.
      Mit dem Debugbefehl D kann man sich eine Zusammenfassung der Einstellungen anzeigen lassen.
    • Anzahl Schritte:
      Diese Einstellung definiert, wie weit die Steuerung ausgehend von der Home-Position fahren kann. Bei Drehscheiben (Typ ROUND) gibt diese Einstellung den Wert für eine komplette Umdrehung an. Bei linearen Antrieben (Schiebebühne, Segmentscheibe) gibt die Anzahl Schritte den Bereich von linken bis rechten Anschlag an.
      Typischerweise haben Schrittmotoren oft 200 Schritte/U, die auf der StepControl verwendete Steuerelektronik hat eine Mikroschrittauflösung von 32, so dass in diesem Fall 6400 einzutragen wäre.
      DebugIF-Befehl: D???
    • Drehgeschwindigkeit ... Text fehlt noch

    Endanschläge, 'Home'schalter, Referenzpositionen:

      Die nächste Einstellung gilt der Referenzposition. Ohne bekannte Referenzposition kann keine Anfahrt eines Gleises erfolgen. Die Steuerung muß 'wissen, wo die Bühne aktuell steht'. Hierzu wird eine sogenannter HOME-Lauf durchgeführt. Dabei wird die Bühne langsam 'rückwärts' gedreht, bis der Referenzschalter anspricht. Diese Position bezeichnen wir als Home-Position und sie bekommt den Einstellwert 0.
      Befehl DH

    Maximum:

      Diese Einstellung ist besonders für LINEAR Antriebe wichtig. Sie definiert, wie weit die Steuerung ausgehend von der Home-Position fahren kann. Bei Drehscheiben gibt die Maximalposition den Wert für eine komplette Umdrehung an. Typischerweise haben Schrittmotoren oft 200 Schritte/U, die auf der StepControl verwendete Steuerelektronik hat eine Mikroschrittauflösung von 32, so dass in diesem Fall 6400 einzutragen ist.
      Befehl DM

    Abgänge

      Nachdem die Bühne soweit eingestellt ist und zufriedenstellend dreht, wird als letzter Schritt noch die Position der Abgänge eingestellt. Der Eintrag erfolgt entweder durch direkte Angabe der Position oder durch Anfahren der Position und Abspeichern. Die Firmware sortiert automatisch die eingetragenen Abgänge in aufsteigender Reihenfolge.
      Generell gilt: Abgänge werden von oben betrachtet im Uhrzeigersinn steigend angeordnet. D.h. heißt eine positive Drehungen geht im Uhrzeigersinn, eine negative Drehung dreht gegen den Uhrzeigersinn.
      Diese Abgänge sind dann in dieser Reihenfolge als 'Schaltbegriff' in der Hostsoftware aufrufbar. Bei den Abgängen unterscheiden sich LINEAR und ROUND:
    • LINEAR: jeder Abgang hat eine Haltposition.
    • ROUND: jeder Abgang definiert zwei Halt-Positionen: einmal den Abgang 'vorne', d.h. Häuschen steht bei Abgang. Zugleich wird aber ein weiterer Abgang bei der um 180° gedrehten Position eingetragen, d.h. Häuschen steht gegenüber dem Abgang. Die Gesamtzahl der Abgänge ist also gerade und aus ihr ergibt sich automatisch die Wendeposition: Angenommen, es gibt 12 Abgänge, dann ist Abgang 1 und 7 gegenüberliegend.
    • Ein Abgang wird mit dem Befehl DA eingetragen und mit DR gelöscht.
    Die Bühne muß auf DCC-Befehle bzw. BiDiB abgebildet werden.

    Wesentlich für die Schrittmotorsteuerung ist das Verhalten der angeschlossenen Hardware:
    Nutzbereich, MaxInnProgrammierung der Position - Eingabe eines Winkels: 200 Steps mit 32-fachem Microstepping gibt 6400 für eine Vollkreis.


    Die StepControl verfügt über max. 48 Positionen, zu jeder Position sind folgende Daten relevant:
    Position0...max: diese Position ist aktiviert, sie wird beim Drehen angefahren.
    0xFFFF: diese Position ist nicht aktiviert
    Kehrschleife0: die Kehrschleife wird bei dieser Position nicht eingeschaltet.
    1: die Kehrschleife wird eingeschaltet.
    Das allgemeine Verhalten wird über folgende Parameter beschrieben:
    Bühnenbeleuchtung an
    Sound-Optionen: Hupe, Motorgeräusch, ...
    Signaloptionen: Lichtsignal, Servo
    Lichtsignale auf der Bühne
    Bühne schwingt beim Anhalten nach oder bleibt einfach stehen
    Referenzschalterposition (bei Anfahrt im/gegen Uhrzeigersinn), damit ist eine Nachjustage bzw. Kalibrierfahrt zu Beginn möglich.

Einbindung der Drehscheibe in die Steuersoftware

Ansteuerung

    Die definierten Gleisanschlüsse werden in aktive und passive Anschlüsse unterteilt:
  • Aktive Gleisanschlüsse sind mit dem Gleissystem der Anlage verbunden, d.h. Lokomotiven können dort ein- oder ausfahren.
  • Passive Gleisanschlüsse bezeichnen Positionen, zu denen die Bühne zwar gedreht werden kann, an denen aber keine Ein- oder Ausfahrt möglich ist. Die ist auch der Fall, wenn sich da nur ein kurzer Gleisstummel oder Prellbock befindet. Passive Gleisanschlüsse sind für die Steuerung notwendig, weil i.d.R. gegenüber ein aktiver Anschluß liegt, den man 'rückwärts' (also mit Häuschen abgewandt) anfahren will.

  • Beim Drehscheibentyp 'ROUND' ist die Gesamtzahl aller aktiven und passiven Gleisanschlüsse stets gerade, Beim Drehscheibentyp 'LINEAR' kann sie auch ungerade sein.

    In BiDiB wird die Drehscheibe einfach mit dem entsprechendem Begriff angesteuert, es kommt automatisch eine Endemeldung, wenn die Scheibe ihre Zielposition erreicht hat.

    In BiDiB sind folgende Accessory definiert:
    AccessoryBegriffeErläuterung
    0 2 .. 38Ansteuerung der einzelnen Abgänge
    1 3
    0Nothalt
    1Homing
    2??

Belegtmeldung

    Üblicherweise haben Drehscheiben nur einen Meldeabschnitt auf der Bühne, das ist bedingt durch die fehlenden Schleifringe, die eine feinere Unterteilung verhindern. Bei der BiDiB-Drehscheibensteuerung sind bis zu vier Melder möglich, dabei werden keine zusätzlichen Schleifringe benötigt.
    Bedingt durch die wechselnde Orientierung der Scheibe wechselt bei mehreren Meldern die Reihenfolge der Melderauslösung bei Auffahrt. Hier gibt es folgende Lösungsmöglichkeiten:
    • In der Drehscheibenelektronik gibt es einen 'Mapper', d.h. eine variable Abbildung der Bühnenmelder je nach Position der Scheibe. Diese Möglichkeit ist nicht implementiert.
    • Man fasst die beiden äußeren Melder zusammen und sorgt durch entsprechende Verknüpfungen im Steuerprogramm für die richtige Reihefolge:
      In TC gilt: Markierungen in einem Block gelten immer für eine feste Richtung, z.B. für nach rechts fahrende Züge. Dabei ist auch bei einer Drehscheibe rechts immer rechts - egal, wie die Bühne steht. Damit kommt TC erst mal nicht mit Positionswechsel von Meldern klar.
      Wird mit drei Belegtabschnitten auf der Bühne gesteuert, so bedeutet dies, dass die beiden äusseren Abschnitte mit demselben Belegtmelder überwacht werden müssen bzw. dass diese beiden äusseren mittels einem (im Blockeditor platzierten) Bahnwärter durch eine Oder-Verknüpfung zusammengelegt werden.
      Dadurch ist die Positionsabhängigkeit aufgehoben und es gibt nur zwei voneinander getrennte Bereiche auf der Bühne, nämlich einen Bereich, welcher die beiden äusseren Abschnitte umfasst und einen inneren Bereich mit dem mittleren Abschnitt.
      Eine Lok, welche die Bühne befährt, löst also den Belegtmelder für die äusseren Abschnitte zweimal aus - einmal, wenn die erste leitende Achse der Lok die Bühne berührt; und ein zweites Mal, wenn die Lok sich dem gegenüberliegenden Ende der Bühne nähert.

      Diese beiden Ereignisse lassen sich aber dadurch unterscheiden, dass beim ersten Mal der Belegtmelder des mittleren Abschnitts ausgeschaltet, beim zweiten Mal jedoch eingeschaltet ist.
      Das kann man mit Markierungen auswerten: hierzu gibt man den Haltemarkierungen (für beide Richtungen) auf der Bühne folgende Verknüpfung: Einschalten durch den Belegtmelder der äusseren Abschnitte (dies kann auch der obige Bahnwärter sein) mit der Bedingung, dass auch der Melder des mittleren Abschnittes bereits eingeschaltet ist. Ein solche Haltmarkierung wird erst dann eingeschaltet, wenn die Lok aus dem mittleren Abschnitt aus- und in einen äusseren Abschnitt einfährt.

Kehrschleife, Gleispolarität

    Die StepControl kann die Bühne beliebig polen, es kann daher für jeden Abgang eine Polarität frei gewählt werden. Es ist keine separate Kehrschleifenschaltung erforderlich, auch ist man im Anschluß der umliegenden Gleisanlage flexibel, was die Polung angeht (es gibt keine 'Wendelinie'). Das ist gerade in Betriebswerk-Gleisplänen ein nicht zu unterschätzender Vorteil.

    Geschaltet wird immer die Polarität der Bühne (nie ein Anschlußgleis) und es gilt immer der Polaritätsbezug, wenn das Häuschen beim Anschlußgleis ist. Ist dabei die Polarität gleich, muß die Bühne nicht umgepolt werden. Stimmt die Polariät nicht, wird eine Umpolung für diesen Anschluß eingetragen.
    Dabei ist jedoch darauf zu achten, dass bei Durchfahrten das gesamte Gleis gleiche Polarität aufweist. Von außen betrachtet sind also entsprechende Anschlußgleise (Durchfahrtsgleise) gleich gepolt auszuführen. Aus Sicht des Häuschen weisen solche Durchfahrtsgleise allerdings invertierte Polarität auf, da das Häuschen bezogen auf den Anschluß verdreht wird. Das bedeutet: bei Durchfahrtgleisen (zwei genau gegenüberliegende Gleise) müssen immer beide Anschlussgleise mit invertierte Polarität programmiert sein.

Debug-Interface

    Die Stepcontrol kann über ein FTDI-Kabel (USB-RS232-TTL) mit einem PC verbunden werden. Damit besteht ein direkter serieller Zugriff auf das Debug-Interface, mit dem Konfiguration, Status und interne Einstellungen bedient werden können.
    Unter Verwendung von Hterm verbindet man sich mit 115200, 8N1, Zeilenende als <cr>.

    Es gibt folgende Befehle:
  • D:
    Ausgabe einer Statusübersicht der Drehscheibe

Interne Softwareorganisation

    Die Firmware ist in folgende Module aufgeteilt:
  • Stepper_Controller: Dieses Modul verwaltet den Schrittmotor und führt die Bewegung aus. Die wesentlichen Aufrufe:
    • stepper_do_it() Bewegt den Schrittmotor auf die neue Position (ausgehend von Stillstand).
    • stepper_break(void) bremst dem Motor in der aktuellen Bewegung, anschließend ist die Position in der 'Pampa', d.h. nicht an einem Zielpunkt.
    • stepper_estop(void) hält hart und sofort an, Schrittverluste sind dabei nicht ausgeschlossen. Also Nothalt.
    Je nach Bewegungsphase (Beschleunigen, konstante Fahrt, Bremsen, Stillstand) stellt dieses Modul auch den Referenzstrom des Schrittmotors ein.
  • Move_Controller: Dieses Modul kontrolliert die Bewegung aus. Die wesentlichen Aufrufe:
    • move_stepper_to(unsigned int newposition) Bewegt die (Schiebe-)Bühne auf die neue Position (ausgehend von Stillstand).
    • rotate_stepper_to(unsigned int new_pos) Bewegt die Drehbühne auf die neue Position, wobei der zu durchfahrende Winkel optimiert wird.
    Der Move_Controller kümmert sich auch um die entsprechende Benachrichtigung der angeschlossen Bedieninterfaces.