Digital-Fahrstromsteuerung über eine serielle Schnittstelle

Schaltbild
SignalPinPCVerwendung
TXD3aus Digitalsignal für Mittelleiter
GND5--- Bezugspotential (Masse)
RTS7aus Einschalten des Leistungsverstärkers
CTS8ein Rückmeldung der Strombegrenzung
RI 9aus Lesesignal vom Programmiergleis

Achtung: Bei dieser Schaltung besteht eine galvanische Verbindung zwischen der Computermasse und dem Aussenleiter der Gleise. Dies ist nach NEM 609 Kapitel 3.5 (und entsprechenden VDE-Vorschriften) nicht zulässig; Zitat: Eine Kopplung der PELV-Steuerstromkreise mit SELV-Modellbahnstromkreisen darf nur galvanisch getrennt erfolgen.

Digital-Protokollerzeugung über die serielle Schnittstelle

Zuerst ein Programm zur Erzeugung des Motorola-Protokolls, das ich unter Turbopascal zur "Erforschung des Decoderverhaltens" geschrieben habe; es ist leider nur spärlich kommentiert. Wegen direkten Zugriffen auf Timer und COM-Port nur unter purem DOS ausführbar, gibt es einen Datenstrom über das COM-Port aus, dessen Nummer in "dco_init(2)" steht, im downloadbaren Beispiel also COM2. Der Datenstrom kommt über TXD mit der für den Mittelleiter richtigen Polarität, der Booster muss also nicht-invertierend sein. Über RTS kann die Endstufe mit positiver Spannung an- und mit negativer abgeschaltet werden. Die Rückmeldung (Überstrom) über CTS ist nur bei meinen "richtigen" Programmen realisiert, fehlt also hier zur besseren Übersichtlichkeit, genau wie Funktionen, die für das Programmiergleis nötig wären.
Unterstützt werden altes und erweitertes Motorola-Format (4 Zusatzfunktionen und absolute Fahrtrichtung) sowie der Adressraum bis 255 entsprechend Uhlenbrock u.a..

Meine Hardware, genau genommen ein Leistungsverstärker zwischen serieller Schnittstelle und Gleis, arbeitet seit 1985 klaglos, allerdings in der Zwischenzeit schon mit der dritten Generation Software. Obwohl ich früher eher in Turbo-Pascal programmierte, begann ich meine Modellbahnsteuerung mit C, da bis TP-Version 3 das Unit-Konzept nicht unterstützt wurde, also das komplette Programm ein Modul sein musste, während C linkbar war. Das war auf einem CP/M-Rechner bevor MS-DOS sich durchsetzte.
Die zweite Generation war dann unter Turbo-C für MS-DOS. Das Programm war zwar komplett fertig, aber neuere Leistungsmerkmale, wie mehr als 80 Adressen, Multiprotokoll usw. wollte ich dann doch nicht mehr nachrüsten.

Die z.Zt. in Entwicklung befindliche dritte Generation ist unter MS Visual C++ erstellt und läuft unter Win95 auf einem 386DX-33. Der Fahrbetrieb geht schon ganz gut (Motorola-Protokoll sowieso, DCC im Test), das Stellen ist noch nicht implementiert (aber da fehlts auch noch an der Hardware zwischen PC und Weichen, deshalb in die Zukunft geschoben).
Das Programm wird für die zeitkritische Codeerzeugung durch einen VXD-Treiber unterstützt, deshalb ist dann spätestens für die Zeit nach Win9x (95, 98 & ME) Nacharbeit angesagt.

Oszillogramme unterschiedlicher Digitalcodes

Die Kurvenformen wurden mit einer älteren Soundkarte in einem Pentium-166-PC und der Shareware GoldWave aufgenommen. Leider bildet die verwendete Soundkarte einen Bandpass, so dass die Flanken nicht mehr so schön steil dargestellt werden wie sie im Original sind, und die DC-Kopplung lässt konstante Spannung zu einer Schräge verkommen.

Märklin-Motorola-Protokoll

MM-Code
Details: MM2-Codierung, Adresse 3, Funktion aus, Fahrstufe 5, vorwärts.

NMRA-DCC-Protokoll

DCC-Code Details: DCC-Codierung für 28-Stufen-Modus, Adresse 3 kurz, Funktionen aus, Fahrstufe 5, vorwärts.



 

E-Mail Mail an Rainer

Stand vom 08.12.2004