Dies ist eine Selbstbau- Open-Source- Preiswertst- Einfach- Drahtlos- Buzzwordfreie Modelleisenbahnsteuerung für Großbahnen.

Schon eine Weile bin ich in dem DCC-EX Projekt beteiligt, dass eine Open-Source DCC Zentrale für wenig Geld designt. Während dies einen gute Alternative für meine N-Spur Anlage darstellt, war ich im Zweifel, ob das die richtige Lösung ist, meine 1:32 (Spur I) Loks zu steuern. Im Kontrast zur Spur N sind die Loks oft nicht so viele und natürlich größer. Der Kontakt zur Schiene ist immer ein Thema, besonders im Freien, und ich war mir nicht sicher ob die DCC Signalübertragung über die Schiene das Richtige ist. Außerdem haben sowohl Boosters als auch Decoder für die hohen Ströme der großen Spur oft einen "LGB-Zuschlag". (Wenn man sich eine LGB Lok leisten kann dann denken die Hersteller des elekronischen Zubehörs, dass man sich da auch was leisten kann.)

Seit kleine genuge billige µCPUs mit integriertem WiFi erhältlich sind die in eine Spur I Lok passen hat sich das geändert. Für die Kommunikation wurde WiFi gewählt und nur der Fahrstrom kommt aus dem Gleis. Das macht die Art der Stromversorgung sehr unkritisch, alles von 12 bis 24V Gleich- oder Wechselspannung geht. Mit de System könnte man alternativ auch mit Akku fahren. Jetzt kann das Projekt in zu bewältigende Teile aufgeteilt werden:

Wahl des µCPU

Weil klein und billig war der erste Kandidat der untersucht wurde der ESP8266. Aber bald wurden die Nachteile des ESP8266 offenbar. Es ist sehr umständlich für den ESP8266 WiFi-Programme zu schreiben weil das WiFi API unausgereift und unfertig wirkt. Das ganze Arduiono ESP8266 Paket wirkt wir Kraut und Rüben und fühlt sich an wie Version 1.0 oder eher noch 0.9.

Ein Prototyp der auf dem Steckbrett zusammengestelt wurde har aufgedeckt, dass die unterbrechungsfreie Stromversorgung des µCPU zu allen Zeiten ein Schüssel zum Erfolg ist wenn man TCP basierte Protokolle verwenden will die schon vorhanden waren. Sonst hätte es ein kompettes Neudesign der Kommunikation gebraucht. Für solche Stromversogung stand die Wahl zwischen PowerCap und Akku.

Als ich dann mit einem "ESP32 DevKit LiPo" mit integriertem Lader von OLIMEX (Google findet das) fündig wurde, der sogar noch weniger als ein ESP8266 und seprate Ladeschaltung kostet, war es einfach die Entscheidung zu fällen die ESP8266 Linie aufzugeben. Der ESP32 kann mehr und ist einfacher zu programmieren, wenn auch einen Tick größer.

Portierung von DCC-EX zum neuen µCPU

Das DCC-EX Projekt nützt den Arduino als Hauptplatform. Wenn WiFi erwünscht ist, dann übernimmt ein ESP8266 mit AT-Firmware diese Kommunikation. Da der ESP8266 oder ESP32 kraftvoll genug sind sollte es möglich sein alle Aufgaben nur mit einem solchen CPU zu erfüllen. Die Softwarepakete für diese Architekturen zu der Arduino IDE machen es einfacher Programme zu portiern ohne alles von Grund auf für das API von Expressif umschreiben zu müssen. Die Portierung für ESP8266 und ESP32 wurde angefangen. Der ESP8266 hat allerdings zu viele Hard- und Softwarebeschränkungen, also wurde nur der ESP32 weiter verfolgt. (Wer anderer Meinung ist darf gern seine Beiträge zum DCC-EX Projekt einbringen.) Zur Zeit (Ende 2021) gibt es einen ESP32 Prototyp einer DCC-EX Zentrale das einen DCC Decocder mit Beschränkungen ansprechen kann, z.B. gibt es noch kein Programmiergleis. Aber da in diesem Projekt ja kein Decoder in der Lok ist, wir dieser Teil sowieso nicht gebraucht, ja man könnte sogar noch mehr nicht benötigte Programmteile entfernen.

Änderung von DCC-EX Source um die Lok direkt zu steuern

Der Hauptgedanke war den Schritt über DCC zu eleminiern und den Motor mehr oder weniger direkt mit Pulsweitenmodulation (PWM) der I/O-Pins des µCPUs anzusteuern. So wurde DC(C)-EX Locodrive von DCC-EX abgeleitet. Im Sourcecode werden die Geschwindigkeits- und Funktionskommandos für eine vordefinierte Lok abgefangen und dann auf das neue DC-Loco Modul umgeleitet das die PWM Hardware des ESP32 kontrolliert. Zur Zeit könnte es alternativ eine DCC decoder steuern aber da dies nicht notwendig ist wird das DCC Signal in Zukunft optional generiert.

Bau der Hardware um den Motor und andere Funktionen zu steuern

Der Schaltplan des ESP8266 Prototyps

Da die Ausgänge des CPU nur 20-40mA bei 3,3V abgeben kann man von solchen nur LEDs diekt ansteuern. Für anderes wie Motoren oder auch Raucherzeuger muss das Signal verstärkt werden. Dafür werden MOSFETs verwendet, die sind billig und haltbar. Die meisten Modelleisenbahnen verwenden Gleichstrommotoren mit Permanentmagnet als Stator. Um solche in beiden Richtungen zu steuern wird eine sogenannte H-Brücke gebraucht die aus 4 MOSFET besteht. Aber hier ist der Kandidat für die Umrüstung eine alte Märklin Wechselstromlok die einen speziellen Wechselstrommotor mit doppelten Statorwicklungen besitzt, eine für jede Richtung. Traditionell wird eine dieser Windungen mit einem 24V Stromstoßrelais ausgewählt und auf diese weise ändert die Lok mit jedem Stromstoß die Richtung. Hier werden anstelle dessen zwei MOSFET verwendet, einer pro Wicklung die abwechselnd ihre Wicklung per PWM steuern. Auch wenn solche Motorn oft Wechselstrommotoren genannt werden sind sie in Wirklichkeit Allstrommotoren die auch mit gepulstem Gleichstrom gut funktioniern. Wegen der Induktans sind Löschdioden von Nöten, sonst wäre die Lebenserwartung der MOSFET sehr gering. Wenn die MOSFET nur resistive Lasten wie z.B. einen Rauchgenerator steuern ist dies nicht notwendig.

Der Schaltplan des ESP8266 Prototyps und der ESP32 Schaltplan ist fast identisch, nur werden die BYV26 und der 5V Kondensator vom LiPo mit seiner Schaltung auf dem ESP32 Entwicklerboard ersetzt.

Dieses Bild zeigt welche Lötbrücken geschlossen werden müssen und welche Lötbrücken zu welchem Pin gehören. Der Akku wird über Pin 35 überwacht und nicht wie von OLIMEX hier und da beschrieben über Pin 34. Da die Lötpunkte auch nicht bei den Pin sind ist alles etwas verwirrend. Der Spannungsteiler für die Überwachung der Stromversorgung har 220kOhms nach Vcc und 470kOhms zu GND; die Akkuspannung hat einen symetrichen Spannungsteiler von 2x 470kOhm. Nach dem Schließen der Lötbrücken am besten mit einem Multimeter kontrollieren.

So wird das Sandwich auf dem Fahrgestell angeordnet, da festgeschraubt wo der Märklin Umschalter saß. Da bekommt man dann auch gleich den chassispol bei der DHG500C. Bei der BR80 hab ich das dann anders gelöst weil die Ausgänge des ESP32 da vorbei mussten.:

Die Experimentierplatine von vorn (die BR80 hat 3 MOSFETs falls sie noch rauchen lernen will):

...und von hinten - die der BR80 noch nicht ganz fertig:

Alles zu und bereit zur Abfahrt:


Demofilmchen:

Arduino IDE programming

Um die Software in den ESP32 zu bringen werden das Arduino IDE mit dem ESP32 Paket verwendet. Das versucht die Programmierung mehr Arduinoähnlich zu machen und das ist teilweise erfolgreich. Es wird gebraucht:

Kommunikation mit DC(C)-EX Locodriver

Da jede Lok für die kontrollierenden Programme wie eine DCC-EX Zentale aussieht, can es genauso einfach wie eine DCC-EX Zentrale angesprochen werden. Entweder mit dem DCC++ oder dem Withrottle Protokoll. Da die Lok mobil ist könnte es allerdings mit dem USB-Kabel problematisch werden. Anstelle von WiFi könne man allerdings auch einen Wireless USB-Extender anwenden. Anwendungsbeispiele: von EngineDriver