Gleistreiber

Die beiden Gleistreiber fallen auf der Platine sofort durch die großen Motortreiber-ICs und die dahinterliegenden Leistungswiderstände ins Auge. Vor ihnen befinden sich die beiden Anschlüsse, an denen der Fahrstrom für die Gleise entnommen werden kann.


Gleistreiber und Überlastsicherung

Kurzschlußsicherung

Die Treiber-ICs müssen jeweils einen Dauerstrom von einem Ampere liefern können. Gleichzeitig sind die Gleise an ihren Ausgängen ständig dem Risiko eines Kurzschlusses durch falsch gestellte Weichen und Fremdkörper auf den Schienen ausgesetzt. Deshalb müssen die Ausgänge durch eine Überlastsicherung vor Schäden bewahrt werden. Diese überwacht den gesamten Strom, der in die beiden Motortreiber und wieder aus ihnen herausfließt, und kann so auch Kurzschlüsse gegen die Versorgungsspannung oder eine Nachbarschaltung erkennen.


Überlastsicherung der Gleistreiber
Kompletter Schaltplan als PDF

Der Strom fließt auf seinem Weg vom Netzteil durch zwei niederohmige Lastwiderstände und verursacht über ihnen einen Spannungsabfall. Bei einem Strom von mehr als 2,7 Ampere erreicht diese Spannung 0,6 Volt und der darüber angebrachte Transistor wird leitend. T2 zieht den Eingangspin RA4 des Mikrocontrollers direkt auf Masse, T1 kann T2 übersteuern und so die selbe Wirkung hervorrufen. Der Mikrocontroller erkennt an einem Low-Pegel an diesem Eingang, daß eine Überlastsituation oder ein Kurzschluß vorliegt. Bei dem Pin handelt es sich um einen Eingang mit Schmitt-Trigger, so daß die analogen Spannungspegel kein Problem darstellen.

  • Kurzschluß erkennen
    • Der Kurzschlußdetektor verfügt über einen Zähler, der mit 0 initialisiert wird.
    • Alle 10 Millisekunden (mit jedem Slow-Tick) fragt der PIC den Detektor ab. Meldet dieser eine Überlastung der Treiber, wird auf einen Zähler der Wert 64 addiert, sonst 1 von ihm subtrahiert. Der Wertebereich bleibt dabei auf 0 bis 255 begrenzt.
    • Erst wenn der Zähler 255 erreicht, beginnt die Abschaltsequenz. Dadurch werden kleine Lastspitzen toleriert und die Kurzschlußerkennung funktioniert auch, wenn das verursachende Gleis durch die PWM gelegentlich abgeschaltet wird.
  • Verursacher ermitteln
    • Aus Platzgründen ist nur eine Überlastsicherung in der Schaltung vorhanden, deshalb kann die Firmware das verursachende Gleis nicht eindeutig ermitteln. Im Falle eines Kurzschlusses wird zunächst Gleistreiber 0 abgeschaltet. Hilft dies nicht, werden als nächstes Treiber 1 und schließlich beide Bausteine deaktiviert.
    • Diese Methode kann die Ursache in der Regel schnell einkreisen, so daß die Schaltung mit dem nicht betroffenen Gleis normal weiterarbeiten kann.
  • Reaktivierung
    • Nach dem Abschalten des verantwortlichen Gleistreibers dauert es 2,55 Sekunden, bis die Firmware diesen reaktiviert. Zu dem Zeitpunkt wird der Fehler auch im EEPROM des Mikrocontrollers protokolliert.
    • Ist der Fehler jetzt nicht beseitigt, wiederholt sich die beschriebene Sequenz mit der Inkrementierung des Zählers.

Die beschriebene Sicherung kommt mit einem Minimum an Bauteilen aus und reagiert trotzdem sehr schnell und zuverlässig auf Kurzschlüsse. Das Zeitverhalten kann durch Veränderung der Konstanten in der Firmware angepaßt werden, falls dies nötig sein sollte.

Erzeugung des Fahrstromes

Der Fahrstrom wird von fertigen Motortreiber-ICs bereitgestellt, die eine komplette H-Brücke und die nötige Ansteuerung enthalten. Die Brücke kann einen der Ausgänge mit der positiven Versorgungsspannung und den anderen mit Masse verbinden, so daß der Zug vorwärts oder rückwärts fährt. Sind alle Transistoren der Brücke abgeschaltet, ist der Ausgang hochohmig und die Stromzufuhr zum Gleis faktisch unterbrochen. Als letzte Möglichkeit kann die Brücke beide Ausgänge miteinander verbinden, diese Einstellung bremst einen angeschlossenen Zug. Dessen noch drehender Motor arbeitet dann als Generator, der erzeugte Strom wird über die Brücke in Wärme umgewandelt, und der resultierende Energieverlust bremst den Motor.


Ansteuerung der Gleise
Kompletter Schaltplan als PDF

Der hier eingesetzte Motortreiber L6203 ist kompakt, robust, weit verbreitet und kann einen Dauerstrom bis 4 Ampere liefern. Die Eingänge IN1 und IN2 steuern die H-Brücke, ENABLE erlaubt es, Pulsweitenmodulation sehr einfach mit Frequenzen bis 100 Kilohertz zu realisieren. Diese Pins sind mit dem Mikrocontroller über Widerstände verbunden, die bei Fehlfunktionen ein Latchup verhindern sollen. An den Ausgängen der Motortreiber sind direkt die Stecker für die Gleise und eine Meßschaltung angeschlossen, die im folgenden Abschnitt diskutiert wird. Die Kondensatoren im Umfeld der Treiber entsprechen den Empfehlungen aus dem Datenblatt.

Die Fahrgeschwindigkeit wird genau wie die Intensität beim Abbremsen eines Triebwagens über Pulsweitenmodulation gesteuert. Dazu setzt die Firmware den Bresenham-Algorithmus ein.

  • Fahrtrichtung
    • Die Eingänge (IN1, IN2) werden nach dem gewünschten Modus gesetzt, (0,1) für vorwärts, (1,0) für rückwärts sowie (0,0) zum Bremsen.
    • Wenn der Motortreiber aktiv ist, also gerade keine Messung stattfindet, das Gleis nicht per Software abgeschaltet wurde und auch kein Kurzschluß vorliegt, findet die Pulsweitenmodulation statt, anderenfalls wird ENABLE fest auf 0 gesetzt.
  • Pulsweitenmodulation
    • Für jeden Gleistreiber wird ein Zähler mit einer Breite von 8 Bit verwaltet. Das Tastverhältnis der PWM wird intern als Wert zwischen 0 und 255 gespeichert.
    • Alle 10 Millisekunden (also mit jedem Slow-Tick) wird das Tastverhältnis auf den Zähler addiert. Kommt es dabei zu einem Überlauf, wird ENABLE auf 1 gesetzt, sonst auf 0. Je größer das Tastverhältnis ist, desto häufiger kommt es zu einem Überlauf und desto schneller fährt der angeschlossene Zug.
    • Bei einem Tastverhältnis von 128 generiert der Algorithmus ein Rechtecksignal von 50 Hertz. Soll der Zug schneller fahren, verlängert sich der High-Pegel, bei einem niedrigeren Tastverhältnis wird entsprechend der Low-Pegel länger.

Dieser Algorithmus erlaubt es, die Geschwindigkeit in 255 Abstufungen einzustellen. Dabei zeigt er bessere Fahreigenschaften als die klassische Pulsweitenmodulation mit fester Fensterbreite, insbesondere bei niedrigen Geschwindigkeiten. Die Anwendungsprogramme können durch eine Einschränkung des Interfaces nur auf die oberen 7 Bit des Tastverhältnisses zugreifen, dies ist aber immer noch vollkommen ausreichend.

Messungen an den Gleisen

Der Mikrocontroller kann über zwei Meßschaltungen die Spannungen messen, die momentan an den Gleisen anliegen. Im einfachsten Fall mißt die Schaltung so die Ausgangsspannung eines aktiven Motortreibers. Interessanter ist jedoch, was beim Abschalten des Treibers für einen kurzen Moment passiert. Fährt ein Zug auf dem angeschlossenen Gleis, dreht der Motor im Triebwagen sich durch die Trägheit noch weiter und funktioniert wie ein Generator. Dabei erzeugt er eine Spannung, die proportional zur Drehzahl und damit zu seiner Geschwindigkeit ist. Auf diese Weise kann die Sensorschaltung die Geschwindigkeit eines fahrenden Zuges messen.

Steht in diesem Moment kein Triebwagen auf den Gleisen, wird die Spannung am Ausgang des abgeschalteten Motortreibers von den Kondensatoren aufrecht gehalten und fällt nur langsam ab. An diesem Unterschied läßt sich also erkennen, ob überhaupt ein Triebwagen auf dem Gleis steht, die Funktion wird als Gleisbesetztmelder bezeichnet.

Die Meßschaltung besteht aus Operationsverstärkern in Subtrahierschaltung. Der Nullpunkt ist durch den Spannungsteiler aus R3 und R4 etwas angehoben, so daß auch negative Spannungen gemessen werden können. Die übrigen Widerstände skalieren die Ergebnisse auf ein Zehntel. Tiefpaßfilter glätten die gemessenen Spannungen und führen sie über Schutzwiderstände zu ADC-Eingängen des Mikrocontrollers. Die virtuelle Masse kann über einen dritten ADC-Eingang gemessen und so von den anderen Werten wieder subtrahiert werden.

Die Firmware untersucht beide Gleise mit variabler Häufigkeit. Besteht keine Verbindung zu einem Steuerrechner, wird gar nicht gemessen. Sonst erfolgt die Messung bei stehenden Zügen einmal pro Sekunde, während der Fahrt dann alle 0,2 Sekunden. Die Ursache hierfür ist, daß die Geräuschkulisse auf ein Minimum reduziert werden soll. Der Gleisbesetztmelder muß für eine Messung die Gleistreiber kurz aktivieren, auch wenn diese eigentlich abgeschaltet sind. Die Impulse sind als Ticken der Motoren hörbar. Um die Nerven der Entwickler zu schonen, erfolgt dies im Ruhezustand so selten wie möglich. Während der Fahrt stört das Ticken hingegen nicht und die Messungen erfolgen entsprechend häufiger.


Meßschaltung an der Rückseite der Gleistreiber

Eine Meßsequenz läuft in mehreren Schritten ab, die jeweils von Fast Ticks ausgelöst werden. Die volle Sequenz mit allen Schritten dauert 7 Millisekunden, der resultierende Wert entspricht durch die Skalierung relativ genau der Geschwindigkeit des Zuges in Zentimetern pro Sekunde.

  • Ablauf der Meßsequenz
    • Zunächst wird der Motortreiber für den gesamten Rest des Programms gesperrt und hochohmig geschaltet. Der zum Treiber gehörende Kanal des ADC wird aktiviert, die Spannung an diesem Eingang ist 3 Millisekunden später stabil.
    • Anschließend startet die Geschwindigkeitsmessung, deren Ergebnis aber erst mit dem folgenden Tick ausgelesen wird.
    • Die Firmware aktiviert den Gleistreiber für eine Millisekunde, um die Belegung des Gleises zu prüfen. Der Impuls erfolgt mit korrekten Polarität: rückwärts, wenn der Treiber auf Rückwärtsfahrt eingestellt war, sonst vorwärts.
    • Am Ende der Zeitspanne wird die Spannung gemessen und der Treiber abgeschaltet. Beim nächsten Tick erfolgt eine weitere Messung, um die Veränderung untersuchen zu können. Beides zusammen dauert zwei Millisekunden.
    • Zuletzt wird der Motortreiber wieder in den Ausgangszustand zurückversetzt und die normale Steuerung freigegeben. Von dem Meßwert wird der Betrag gebildet. War der vorige Meßwert nicht Null, wird der aktuelle Wert durch den Mittelwert von vorigem und aktuellem Meßwertes ersetzt. Ist das Resultat sehr klein oder steht gar kein Zug auf den Schienen, muß das Ergebnis auf 0 korrigiert werden.

Wenn die Firmware nicht mit der Messung eines Gleises beschäftigt ist, bestimmt sie stattdessen das Potential der virtuellen Masse, die den Nullpunkt für die anderen Spannungsmessungen vorgibt. Dazu sind nur wenige Schritte notwendig, die auch in Fast-Ticks ablaufen.

  • Messung der Referenzspannung
    • Anfangs wird der ADC-Kanal der Referenz aktiviert und einen Tick lang gewartet.
    • Daraufhin beginnt die Messung. Deren Ergebnis wird eine Millisekunde später gelesen und gespeichert, so daß der Code für die Gleissensoren darauf zugreifen kann.

Mit diesen Möglichkeiten kann die Steuersoftware alle Blöcke ermitteln, die momentan von Zügen belegt sind. Genauso wichtig ist die Messung der Geschwindigkeit, die es ermöglicht, das Fahrverhalten der Züge zu regeln. Das PWM-Tastverhältnis kann laufend so angepaßt werden, daß Züge auch in Steigungen und im Gefälle immer gleich schnell fahren. Diese Aufgabe kann ein externes Programm im Steuerrechner übernehmen, die Firmware enthält aber auch eine transparent nutzbare Funktion hierfür.

Regelung der Geschwindigkeit

Ein mit der Leistungselektronik verbundener Rechner kann sich entscheiden, ob er die PWM selber vorgeben will oder die genaue Einstellung der Firmware überläßt. Im zweiten Fall gibt der Rechner nur die Zielgeschwindigkeit vor und die Leistungselektronik versucht, diese möglichst genau zu halten. Als Grundlage dient ein leicht erweiterter PID-Regler, der jedesmal ausgeführt wird, wenn neue Meßdaten von dem jeweiligen Gleis vorliegen.

  • Vorgaben
    • Die Zielgeschwindigkeit ist in der Variablen target, die aktuelle in speed gespeichert.
    • Der Regler wird über die Konstanten KC, KP, KI und KD abgestimmt.
    • Die Hilfsvariablen error, errorsum, diff und lastspeed werden mit 0 initialisiert.
    • Der Regler legt sein Ergebnis in der Variablen pwm ab.
  • Regelung
    • Beim Eintreffen neuer Meßdaten wird der folgende Code ausgeführt.
        error = target - speed;
        errorsum = errorsum + error;
        diff = lastspeed - speed;
        pwm = 2 * ( KC*target + KP*error + KI*errorsum + KD*diff );
        if (pwm < 0) pwm = 0;
        if (pwm > 255) pwm = 255;
        lastspeed = speed;
      
    • Die Variable pwm gibt das neue Tastverhältnis für den Gleistreibers an.

Dieser Algorithmus weicht etwas von dem klassischen PID-Regler ab, der differentielle Fehler wird anders berechnet und es kommt ein Summand hinzu, der nur von dem Sollwert abhängt. Durch diese Modifikationen erreicht der Regler die Zielgeschwindigkeit wesentlich schneller und schwingt dabei kaum. Bei Tests hat sich gezeigt, daß ein Wert von 1 für alle Konstanten gute Ergebnisse liefert und die Formel dadurch extrem einfach in Assembler zu implementieren ist. Um das Verhalten an den Blockübergängen zu verbessern, wird der Regler in einen übergeordneten Algorithmus eingebettet.

  • Sonderregeln für Blockübergang
    • Wenn ein Zug in dem Block steht, arbeitet die Regelung wie oben beschrieben.
    • Verläßt der Zug seinen Block, wird die PWM kurz auf 0 verringert, damit der Zug beim Wechsel nicht aus beiden Blöcken gleichzeitig mit Strom versorgt wird.
    • In allen anderen Fällen wird das Tastverhältnis fest auf 2*KC*target eingestellt, was für den einfahrenden Zug eine gute Grundlage darstellt.

Ganz nahtlos kann der Blockwechsel nie ablaufen, vor allem wenn die angrenzenden Gleise von unterschiedlichen Leistungselektroniken bedient werden. Mit dem genannten Algorithmus ist der Übergang vor allem bei mittleren bis hohen Geschwindigkeiten kaum zu sehen.


Geschwindigkeitsregler in der Ebene

Die Ergebnisse des Reglers auf einer ebenen Strecke sind in obigem Diagramm zu sehen. Eine Lok fährt hier auf dem ovalen Testgleis, der Regler soll die Geschwindigkeit auf 30 Einheiten halten. Der Triebwagen erreicht den Zielwert fast sofort und hält das Tempo sehr konstant. Deutlich sind in der Abbildung auch die Blockwechsel zu erkennen. Hier kann die Leistungselektronik keine brauchbaren Meßwerte ermitteln, daher kommt es zu den Spitzen in den Kurven. Wird das Gleisoval stark geneigt, muß der Regler zusätzlich die verschiedenen Steigungen ausgleichen. Das Resultat ist im folgenden Diagramm zu sehen. Das Tempo variiert durch die erschwerten Bedingungen etwas mehr, und in der PWM-Kurve sind deutlich die Steigungen zu erkennen.


Geschwindigkeitsregler mit starken Höhenunterschieden