Modellbahnsteuerung mit USB und Windows-Script-Editor |
![]() |
![]() |
Letztmalig dran rumgefummelt: 26.06.18 13:52:51 |
![]() |
Auf Böden und in Kellern fristet so manche kleine
Modellbahn ihr Dasein, die einst die Herzen längst erwachsener Kinder
höher schlagen ließ. Heute ist verständlich, dass monoton im Kreis
fahrende Bahnen damals schnell ihren Reiz verloren hatten. Eine kleine, zeitgemäße Modellbahn-Steuerung holt das alte Spielzeug vom Abstellgleis zurück. Hochkomplexe Hightech-Züge benötigt es dafür ebenso wenig wie aufwendige Stellwerke. |
||||||
![]() |
0. ... mein Eisenbahnstart |
||||||
![]() |
|
||||||
![]() |
Quellen: |
0. Hardware-Entwurf |
![]() |
![]() |
![]() |
1. Hardware-Entwurf |
![]() |
![]() |
![]() |
![]() |
Während der Vorweihnachtszeit
schmückt meine Familie unser Heim, das Gestalten einer modellhaften
Winterlandschaft in einer Zimmerecke hat Tradition. Etwas Bewegung bringt
eine schon betagte Modellbahn hinein, doch die unaufhörlichen Runden auf
stets gleicher Trasse sind kaum noch des Hinsehens wert. Könnte nicht der Zug seine Fahrtrichtung und seine Geschwindigkeit variieren? Könnte er nicht hier oder dort eine Fahrpause eingelegen, so wie im richtigen Zugbetrieb? Es gibt zahllose Wege, dies zu realisieren, beispielsweise das Modellbahnsystem EDiTS von Elektor. Doch EDiTS wäre für eine solche Aufgabe viel zu groß geraten. Ich hatte die Idee, den Zug von einem Skript steuern zu lassen, in dem aufeinander folgende Anweisungen stehen. Die Anweisungen können beispielsweise den Zug vorwärts oder rückwärts fahren lassen, sie können ihn von Zeit zu Zeit stoppen, oder die Anweisung lautet, eine Station anzufahren und dort zu warten. |
||||||||||||||||||||||||||||||||||||
![]() |
Die Hardware habe ich für Modellbahnen entworfen, die mit Gleichspannung
fahren. Ich habe sie mit dem System 9336 von Fleischmann getestet. Zentrale
Schaltstelle der Steuerung in Bild 1 ist ein Mikrocontroller PIC18F4550. Dieser
Mikrocontroller aus der bekannten PIC Familie von Microchip kann Daten über USB
mit einem PC austauschen. Auf dem PC kann ich die Skripte schreiben und über USB
in den Mikrocontroller laden. Voraussetzung für USB ist beim PIC18F4550 nur,
dass der Quarz Xl auf 24 MHz schwingt. |
||||||||||||||||||||||||||||||||||||
![]() |
Das pulsförmige Signal, das den Zug steuert, gibt der
Mikrocontroller auf Leitung RB4 aus. Das Signal ist pulsbreitenvariabel, die
Frequenz beträgt ungefähr 100 Hz. Wenn die Impulse schmal sind, fährt der Zug
langsam, mit der impulsbreite steigt auch die Zuggeschwindigkeit. Transistor Tl
setzt die Impulshöhe 5 V des Mikrocontrollers auf 15 V herauf, während die
Schmitt-Trigger IC1A ... IC1C die Flankensteilheit steigern. Das aufbereitete
Signal steuert T3, ein N-Kanal-MOSFET vom Typ FQP12N60. Dieser leistungsstarke
Typ ist hohen Strömen bis etwa 10 A gewachsen. Der Fahrstrom kleiner
Modellbahnen liegt meistens in der Größenordnung von nur 1 A. Für den
Fahrtrichtungswechsel ist Relais Re2 zuständig, das die Fahrspannung umpolt. Wie
die Fahrspannung polrichtig an die Schienen anzuschließen ist, muss ausprobiert
werden. Wenn die Fahrtrichtungen Vorwärts und Rückwärts vertauscht sind, lässt
sich der Fehler durch Wechseln der Leitungsanschlüsse korrigieren. |
||||||||||||||||||||||||||||||||||||
![]() |
|
||||||||||||||||||||||||||||||||||||
![]() |
|
||||||||||||||||||||||||||||||||||||
![]() |
Bild 2 - Die Lichtschranke ist mit dem Steckverbinder K3 auf der MikrocontrollerPlatine verbunden Den Störspitzen, die der Lokmotor auf der Fahrspannung verursacht, wirken
L1 und L2 sowie Cl 2 und Cl 3 entgegen. Dieses Störfilter ist notwendig, damit
der Mikrocontroller und die übrigen Bauelemente ungestört arbeiten können.
Auch Kondensator C3 zwischen IC3.C und MOSFET T3 in geringem Maß zu Lasten der
Signal-Flankensteilheit geht. OpAmp IC4 stellt eine Rückkopplung von der
Fahrspannung zum Mikrocontroller her, so dass der Mikrocontroller erkennen |
2. Software |
![]() |
![]() |
![]() |
![]() |
Das Programm für den Mikrocontroller PIC18F4550 wurde in Assembler geschrieben, die Sprache des PC-Programms war Visual Basic (VB). Das Assembler-Programm besteht aus zwei Modulen: Zugsteuerung und USB-HID für die Skripteingabe. |
![]() |
|
3. USB-HID |
![]() |
![]() |
![]() |
![]() |
Für den USB-HID-Teil wurde der Standard des Mikrocontrollers PIC18F4550 übernommen. Die VID lautet OD59, die PID ist 5275. Nach korrekter Enumeration startet die auf 6 ms eingestellte USB-Schleife. Mit dem PC tauscht der USB-Port die Daten über einen 64 Byte großen Puffer aus. Die Skripte werden aus der VB-Umgebung über den Puffer zum PIC18F4550 transportiert. Das USB-Programm speichert die Skripte im EEPROM des Mikrocontrollers, in umgekehrter Richtung können die gespeicherten Skripte vom USB-Programm gelesen werden. Bis zu drei Skripte lassen sich gleichzeitig verwalten. |
![]() |
Die Anweisungen werden in das Formular des VB-Programms eingegeben. Ein Skript
kann bis 32 Anweisungen enthalten, eine Länge, die in der Praxis ausreicht. Die
maximale Skriptlänge ist an die Kapazität des HID-Puffers (64 Byte) angepasst.
Neben den 32 Anweisungen haben noch diverse Steuer-Bits Platz, denn jede
Anweisung besteht aus nur sieben Bits. Die diversen Bits, Bytes und ihre
Bedeutungen erklärt die nebenstehende Übersicht „Bits und Bytes". Der angesprochene Programmteil übernimmt auch das Timing mit dem USB-Port des PCs. Weil die niedrige Schreibgeschwindigkeit des EEPROMs zu Problemen führen kann (nach Angaben von Microchip: 4 ms), wird in jederUSB-Schleife nurein Byte in das EEPROM geschrieben. Der Schreibvorgang beginnt mit einem Toggle-Byte aus der VB-Umgebung und dem Setzen diverser Flags im USB-Programmteil.Jedes Byte belegt 64 aneinander anschließende Zyklen. Während dieser Zeit signalisiert der PC, dass eine Wartepause aktiv ist und keine Daten eingegeben werden können. |
4. Zugsteuerung |
![]() |
![]() |
![]() |
![]() |
Die reguläre Betriebsart des Mikrocontrollers ist die Zugesteuerung, sie wird durch das Signal auf Leitung A0 aktiviert. Die Bedienoberfläche besteht aus dem zweizeiligen LC-Display und dem Drehencoder mit Drucktaster. Mit dem Drehencoder kann die Liste der Anweisungen durchscrollt werden, ein Druck auf den Taster wählt die Anweisung aus. |
![]() |
Bild 3 - Fahrbewegungen werden in ein PC-Programm eingegeben, welches unter WINDOWS läuft |
![]() |
Das Assembler-Programm der Zugsteuerung ist relativ einfach strukturiert. Aus dem
Skript wird eine Zeile gelesen, anschließend wird die dort stehende Anweisung
ausgeführt. Die meisten Anweisungen beziehen sich auf die Routine, die das
pulsbreitenvariable Signal generiert. Dort bestimmt ein Timer, wie lange eine
Aktion dauert. Das LC Display zeigt das Ausführen der Anweisungen an. In der Betriebsart Zugsteuerung erscheint zuerst das Menü auf dem Display. Von dort ist das Ausführen eines von drei Skripten möglich, oder der Zug wird von Hand gesteuert. Die Einstellungen sind über den Reset-Taster zugänglich. Ein zentraler Teil des Programms ist die Routine DRIVE. Die Routine wird mit 100 Hz durchlaufen, wobei die Zeiten durch Schleifen, nicht durch Interrupts gesteuert werden. Die Frequenz des generierten pulsbreitenvariablen Signals beträgt ebenfalls 100 Hz. Impuls- und Pausenzeiten werden Tabellen entnommen, sie hängen von der eingestellten Mindestimpulsbreite ab. Ferner erzeugt die Routine ein Sekundensignal, das zum Timing diverser anderer Aktionen dient. Der Drehencoder kann von zwei Routinen mit unterschiedlichen Empfindlichkeiten (Fast und Secure) gelesen werden. Der Drucktaster des Drehencoders dient zum Starten oder Abbrechen einer Aktion. |
5. Scripte erstellen |
![]() |
![]() |
![]() |
![]() |
Mit dem Windows-Programm Trein.exe werden die Skripte erstellt, die von der Modellbahnsteuerung ausgeführt werden sollen. Zuerst muss eine USB-Verbindung zu einem PC hergestellt werden, auf dem aktiv das Betriebssystem Windows läuft. Windows muss die Steuerung als HID-Gerät erkennen. Dann wird das Programm Trein.exe gestartet. Die blaue LED D7 leuchtet auf, und im Feld USB HID Interface des Programms erscheint die Meldung Trein Interface. Die Funktion der USB-Verbindung kann mit Test LED getestet werden. Beim Aktivieren von Test LED muss die blaue LED aufleuchten. Mit dem Programm können nicht nur Skripte erstellt, angepasst und in die Modellbahnsteuerung geladen werden, auch das Lesen des Speichers der Modellbahnsteuerung (EEPROM) ist möglich. |
![]() |
Wie schon erwähnt, können drei Skripte verwaltet werden, jedes Skript kann bis
zu 32 Zeilen enthalten. In den Zeilen können folgende Anweisungen stehen:
Vorwärts, Rückwärts, Station anfahren und Warten. Das Programm wird ausschließlich mit der Maus bedient. Zu jeder der genannten Anweisungen gehört eine variable Zeit, die mit einem Schieber im Bereich 1...255 s wählbar ist. Von der Einstellung hängt die Dauer der Aktion ab. Mit Ausnahme von Warten gehört zu jeder Anweisung auch eine variable Geschwindigkeit, sie kann mit einem zweiten Schieber relativ im Bereich 1...7 eingestellt werden. Das Erstellen eines Skripts ist äußerst einfach: Wählen Sie einen Skriptnamen, markieren Sie eine Zeile, wählen Sie die Anweisung und stellen Sie Zeit und Geschwindigkeit ein. Normalerweise müssen Skripte mit einer Leerzeile enden. Wenn in allen 32 Zeilen Anweisungen stehen, kehrt das Programm nach Ausführen der 32. Zeile zur ersten Zeile zurück. Für die 32. Zeile des ersten Skripts gilt eine Besonderheit: Wenn hier alle Zeilen eine Funktion haben, wird dieses Skript mit der ersten Zeile des zweiten Skripts fortgesetzt. Falls auch dort alle 32 Zeilen mit Anweisungen gefüllt sind, springt das Programm zur ersten Zeile des dritten Skripts. Durch diese Verkettung kann ein Skript ausgeführt werden, das bis 96 Zeilen lang ist. Über die Schaltflächen Read Script oder Write Script ist das Lesen oder Schreiben des Speichers im Mikrocontroller möglich. Schreibaufträge werden sofort ausgeführt, das Programm fordert keine zusätzliche Bestätigung an. Während des Lesens oder Schreibens ist das Programm für andere Aktionen gesperrt, dies wird in einem Fenster angezeigt. In grau getönten Feldern erscheinen die Werte, die in den Speicher geschrieben werden. |
6. Aufbau |
![]() |
![]() |
![]() |
![]() |
Für die Modellbahnsteuerung hat das Elektor-Labor die Platine in Bild 4 entworfen, auf der alle Bauteile einschließlich des Power-MOSFETs T3 ihren Platz haben. Der Aufbau ist nicht schwierig, denn alle Bauelemente sind bedrahtet. Für die Wärmeabfuhr an Spannungsregler IC2 ist ein kleinflächiger Kühlkörper nötig. Der MOSFET befindet sich am Platinenrand, damit er zur Kühlung bei Bedarf an die Wand eines Metallgehäuses geschraubt werden kann. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
Zuletzt wird der programmierte Mikrocontroller in seine Fassung gesetzt. Der Elektor-Shop hat Mikrocontroller des Typs PIC18F4550 im Angebot, die für die Modellbahnsteuerung programmiert sind. Das LC-Display wird auf 20 mm langen Abstandsrollen montiert, die Befestigungslöcher sind auf der Platine bereits vorhanden. Die Verbindungen zur Platine können über zwei kurze Bandkabelabschnitte oder einen Steckverbinder mit 2 - 8 extra langen Pins hergestellt werden. Nachdem das LC-Display montiert ist, kann die Platine über USB mit dem PC verbunden werden. Dem Schreiben eines Skripts, das in das EEPROM des Mikrocontrollers geladen wird, steht nichts mehr im Weg. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() |
7. Betrieb |
![]() |
![]() |
![]() |
![]() |
Das Anschließen der Zugsteuerung an die Modellbahn ist nicht schwierig. Verbinden Sie Kl mit einem Netzteil, das bei 15 V Gleichspannung den Fahrstrom liefern kann (abhängig von der Modellbahn), und K2 verbinden Sie mit den Schienen. Der in der Stückliste für die Drosseln L1 und L2 angegebene Typ verträgt Ströme bis etwa 1 A, was für kleine Modellbahnen mehr als ausreicht. |
![]() |
Nach Einschalten der Betriebsspannung befindet sich das System im Modus
„Zugsteuerung". Die rote LED leuchtet auf, die Zugsteuerung kann jetzt mit dem
Drehencoder und dem Drucktaster bedient werden. Auf dem LC-Display erscheint
eine kurze Begrüßung, anschließend stehen fünf Aktionen zur Wahl: Skript l,
Skript 2, Skript 3, Handsteuerung und Skript-Test. Mit dem Drucktaster wird die
angezeigte Aktion ausgewählt. Eine Skript-Aktion startet das zugehörige Skript. Das LC-Display zeigt in der ersten Zeile die aktuelle Anweisung zusammen mit ihrer Folgenummer an. Die zweite Zeile gibt Auskunft über die gegenwärtig ausgeführte Aktion, gegebenenfalls einschließlich der Fahrtrichtung. Außerdem wird die verbleibende Zeit bis zum Ende der Aktion in Sekunden angezeigt. Das Vorwärtsfahren, Rückwärtsfahren und Halten bedarf eigentlich keiner Erklärung, das Anfahren einer Station ist dagegen etwas komplizierter. Diese Aktion besteht aus zwei Teilaktionen: Während der Zug die Lichtschranke ansteuert, zeigt das LC-Display die dafür verfügbare Zeit an. Die tatsächlich benötigte Zeit ist unbekannt, denn sie hängt von der Fahrstrecke und der Zuggeschwindigkeit ab. Ist das Ziel erreicht, beginnt die Wartezeit, die im Skript für den Aufenthalt festgelegt ist. Jede Aktion kann zu beliebiger Zeit durch Betätigen des Drucktasters abgebrochen werden. Eine ergänzende Beschreibung, unter anderem mit weiteren Details zur Bedienung, befindet sich auf der Elektor-Projektseite [1] im Internet. www.elektor.de/120351 |
![]() |
8. Unser Projekt |
![]() |
![]() |
![]() |
![]() |
||||||
![]() |
||||||
![]() |
|
|||||
![]() |
9. Verwandte Themen |
![]() |
![]() |
![]() |
|
Was ist alles mit dem Betriebssystem eines Microcomputers verwandt? Antwort: faktisch der gesamte Bereich der Digitalelektronik und sowieso die gesamte Technik der Software-Technologie der Vergangenheit, Gegenwart sowie zumindest der nächsten Zukunft. | ||||||||||||||||||
![]() |
|
||||||||||||||||||
![]() |
|||||||||||||||||||
![]() |
|
||||||||||||||||||
![]() |
|
||||||||||||||||||
![]() |
|
||||||||||||||||||
![]() |
|
![]() zur Hauptseite |
© Samuel-von-Pufendorf-Gymnasium Flöha | © Frank Rost am 6. Oktober 2012 um 10.34 Uhr |
... dieser Text wurde nach den Regeln irgendeiner Rechtschreibreform verfasst - ich hab' irgendwann einmal beschlossen, an diesem Zirkus nicht mehr teilzunehmen ;-) „Dieses Land braucht eine Steuerreform, dieses Land braucht eine Rentenreform - wir schreiben Schiffahrt mit drei „f“!“ Diddi Hallervorden, dt. Komiker und Kabarettist |