====== Märklin für Milliways ====== {{tag>project märklin hardware software event_contest fablab_neckar-alb}} ===== Worum geht's? ===== [[https://twitter.com/milliways2342|Milliways]] hat für den 34C3 einen [[https://twitter.com/milliways2342/status/933038244333268993|Wettbewerb]] für einen Hackerspace-Eisenbahnwagen ausgeschrieben. ===== Idee ===== Die ursprüngliche Idee war, einen [[https://www.elecrow.com/sino-bit-v1-0.html|sinobit]] auf einen umgebauten Märklin-Güterwagen zu setzen und vom Gleis die Versorgungsspannung und das Kontrollsignal von Märklin Digital abzunehmen. Am besten für einen Umbau eignen sich 4-achsige Flachwagen [[http://www.lokmuseum.de/showartikel.php?Wg1=&Wg2=&SArt=2270&SBez=4514%20%20Niederbordwagen&Seite=&SID=3723589455a6|4514]] aus den 1950er Jahren. Einen geeigneten Schleifer zu finden, um die Spannung vom Mittelleiter abzunehmen ist aber eher schwierig. Am einfachsten ist es, einen [[https://i.ebayimg.com/images/g/waYAAOSwuspY-fGj/s-l300.jpg|Märklin 7076]] Schleifer zu verwenden, aber der passt nur für 2-achsige Wagen der Märklin 4500er Serie, also z.B. dem 2-achsigen Flachwagen [[http://www.lokmuseum.de/showartikel.php?Wg1=&Wg2=&SArt=2266&SBez=4503%20%20Niederbordwagen&Seite=&SID=3723589455a6|4503]]. [[http://www.r0ket.de/|{{http://www.r0ket.de/_media/wiki:r0ket_space_iii.jpg?direct&200 |r0ket}}]] [[https://wiki.sha2017.org/w/Projects:Badge|{{ https://wiki.sha2017.org/images/thumb/7/74/Badge1.jpg/800px-Badge1.jpg?direct&200|SHA2017 badge}}]] Wegen der Kapitalmarktfähigkeit der zur DHL zerschlagenen Deutschen Bundespost mit unterbezahlten prekär bei Subunternehmern Angestellten anstatt Postbeamten als Zusteller wurden die sinobits von Derendingen "wegen Unzustellbarkeit" statt ans FabLab Neckar-Alb ohne Einspruchsmöglichkeit nach Shenzen zurückgeschickt. Deshalb kommen statt sinobits Konferenzbadges ([[http://www.r0ket.de/|Chaos Communication Camp 2015 r0ket]], [[https://wiki.sha2017.org/w/Projects:Badge|SHA2017 badge]]) zum Einsatz. \\ \\ ===== Umbau ===== {{https://c1.staticflickr.com/5/4667/39795161222_638a68150e_b.jpg?direct&200 }} [[https://flic.kr/p/DqS2rp|{{ https://c1.staticflickr.com/5/4599/24566556757_29af2d6450_o.jpg?direct&200|Für Video auf Bild klicken}}]] Von je 3 auf ebay ersteigerten 2-achsigen und 4-achsigen Flachwagen wurde von 2 [[https://github.com/fablab-neckar-alb/Maerklin/blob/master/mechanical/4914.scad|Vierachsern]] und einem [[https://github.com/fablab-neckar-alb/Maerklin/blob/master/mechanical/4903.scad|Zweiachser]] vorsichtig der Plastikaufbau entfernt und die Chassis aus Metall vermessen und [[https://github.com/fablab-neckar-alb/Maerklin|in OpenSCAD eingegeben]]. Über den am 2-achsigen Wagen montierten Schleifer kann ein 5V-Schaltnetzteil mit Vierweggleichrichter versorgt werden. \\ \\ {{https://c1.staticflickr.com/5/4593/39432194711_21b09bce4f_b.jpg?direct&200 }} [[https://flic.kr/p/232RjJG|{{ https://c1.staticflickr.com/5/4681/39402346092_c122140baf_o.jpg?direct&200|Für Video auf Bild klicken}}]] Mit einem Spannungsteiler parallel zum Brückengleichrichter aus 6.8 kΩ-Widerständen gegen die Wechselspannungen und 2 grünen Leuchtdioden in Serie gegen die negative gleichgerichtete Spannung VSS wird die jeweils positive Phase der Wechselspannung auf maximal 4.4 V begrenzt. Wenn der analoge Trafo auf Null gestellt wird, geht die gleichgerichtete Spannung allerdings nicht ganz auf Null zurück. (Der dicke Kondensator dient nur als Anschlusspunkt für die VSS und Ozsilloskop-Masse Krokodilklemmen. Weil ein analoger Märklin-Trafo sekundärseitig galvanisch von der Schutzerde isoliert ist, führt das nicht zu einem Kurzschluss.) \\ \\ {{https://c1.staticflickr.com/5/4587/27655283789_e1a1782a38_c.jpg?direct&200 }} {{ https://c1.staticflickr.com/5/4682/27655281989_35b5df16b1_c.jpg?direct&200}} Um ein saubereres digitales Signal zu bekommen und um die Badges gegen Verpeilung und Verpolung zu schützen, werden die Spannungsteiler noch um je einen 100 kΩ-Widerstand gegen VSS parallel zu den grünen LEDs vervollständigt und deren Ausgangssignal mit [[http://www.ti.com/lit/ds/symlink/sn74ahc14.pdf|74AHC14]]-Schmitt-Triggern gesäubert. \\ \\ \\ {{https://c1.staticflickr.com/5/4595/27655264289_64eacb58d0_c.jpg?direct&200 }} [[https://flic.kr/p/DqTtQV|{{ https://c1.staticflickr.com/5/4595/24566840697_017ab7fa84_b.jpg?direct&200|Für Video auf Bild klicken}}]] Ein Spannungsregler mit Brückengleichrichter und Digitalisierungsschaltungen für beide Wechselstromphasen wird mit doppelseitigem Klebeband auf dem 2-achsigen Wagen mit Schleifer befestigt. Das Chassis ist mit blauem Malerklebeband gegen die Platinen isoliert. \\ \\ \\ {{https://c1.staticflickr.com/5/4735/39432134481_fb8577b396_c.jpg?direct&200 }} {{ https://c1.staticflickr.com/5/4647/24566328897_8ba093152f_c.jpg?direct&200}} Mit OpenSCAD werden ein [[https://github.com/fablab-neckar-alb/Maerklin/blob/master/mechanical/4514bracket.scad|proof-of-concept Aufbau]], eine [[https://github.com/fablab-neckar-alb/Maerklin/blob/master/mechanical/sha2017bracket.scad|Halterung für die SHA2017-Badge]] und eine [[https://github.com/fablab-neckar-alb/Maerklin/blob/master/mechanical/r0ketbraket.scad|Halterung für die r0ket]] entworfen und mit dem Lasercutter aus mitteldichter Faserplatte (MDF) ausgeschnitten. \\ \\ \\ ===== Umbauwagen mit Badges ===== [[https://www.flickr.com/gp/89067995@N00/Z1M5Tr|{{https://c1.staticflickr.com/5/4592/27655682389_84b8d2f9e1_o.jpg |Für Video auf Bild klicken}}]] In diesem Zeitlupenvideo sind die Badge-Wagen und der Spannungsversorgungswagen aneinandergehängt. Die SHA-Badge wird schon über den Versorgungswagen gespeist. Die Spannungsversorgung für die r0ket und die Modulationssignaleinspeisung für beide Badges fehlen noch. In der Zeitlupe erkennt man, dass die LEDs gegenphasig (mit der Differenzfrequenz zwischen der Bildaufnahmerate der Kamera und 50 Hz Netzfrequenz) flackern. ==== Spannungsversorgungswagen ==== {{https://c1.staticflickr.com/5/4644/27655225149_b62bfb390a_c.jpg}} {{https://c1.staticflickr.com/5/4598/27655227969_ff2621d1b2_c.jpg}} ==== SHA2017 Badge Wagen ==== {{https://c1.staticflickr.com/5/4594/27655233379_79b14bc918_c.jpg}} ==== r0ket Wagen ==== {{https://c1.staticflickr.com/5/4593/27655231159_9e305129c6_c.jpg}} ===== Auf der Milliways-Anlage ===== {{https://c1.staticflickr.com/5/4690/38554469795_95a25df8ba_h.jpg}} ===== Gewonnen! ===== Mit so viel Overengineering und relativ wenigen Mitbewerbern haben wir den Hackerspacewagen-Wettbewerb gewonnen. {{https://c1.staticflickr.com/5/4637/39417533242_b515567c5a_c.jpg}} {{https://c1.staticflickr.com/5/4727/27670833809_d14eb2f3be_c.jpg}} ===== Analyse des Digitalsignals ===== Vor dem 34C3 stand nur eine analoge Märklin-Eisenbahn zur Verfügung, und auf dem 34C3 war es viel zu hektisch, um viel mehr hinzubekommen als einen [[http://www.ti.com/lit/ds/symlink/sn74ahc14.pdf|74AHC14]] Schmitt-Trigger (buchstäblich) abzurauchen und (diesmal mit Sockel) wieder zu ersetzen. {{https://c1.staticflickr.com/5/4760/39771185724_50c6022d86_c.jpg?direct&200 |Märklin digital Steuergeräte}} {{https://c1.staticflickr.com/5/4616/25610811797_63d1a39937_c.jpg?direct&200 |Märklin digital Steuergeräte}} [[https://flic.kr/p/23WcRZp|{{ https://c1.staticflickr.com/5/4602/39994811261_ab2aa71291_b.jpg?direct&250|Für Video bitte auf das Bild klicken}}]] Nach dem Kongress haben wir [Paul] * einen Märklin-Digital Controller 60116 * eine mobile station 60657 * ein Netzteil 66361 angeschafft und Pauls S3/6 mit einem mLD3 Lok-Decoder 60982 digitalisiert. \\ Das digitale Signal wird mit einem RIGOL 1052E-Oszilloskop zunächst direkt vom Gleis, {{https://c1.staticflickr.com/5/4648/26572585378_cae0a78a84_b.jpg?direct}} danach an den komplementären Schmitt-Trigger Ausgängen des Spannungsversorgungswagens {{https://c1.staticflickr.com/5/4768/39734047314_f5e458249e_b.jpg?direct}} gemessen, gespeichert, und mit einem USB-Stick als ''.wfm''-Dateien exportiert. Die Daten im binären ''.wfm''-Format von RIGOL werden mit [[https://github.com/mabl/pyRigolWFM|wfmutil]] in CSV konvertiert und [[https://github.com/fablab-neckar-alb/MaerklinAnalysis/tree/master/analysis|in Mathematica importiert]]. Der Fortschritt der Analysen findet sich in [[https://github.com/fablab-neckar-alb/MaerklinAnalysis/blob/master/analysis/TTL.10ms.5V.nb.pdf|entsetzlich]] [[https://github.com/fablab-neckar-alb/MaerklinAnalysis/blob/master/analysis/MM2.78.fwd.nb.pdf|langen]] [[https://github.com/fablab-neckar-alb/MaerklinAnalysis/blob/master/analysis/MM2.78.run.nb.pdf|PDF]]-Ausdrucken von kaum weniger langen [[https://github.com/fablab-neckar-alb/MaerklinAnalysis/blob/master/analysis/TTL.10ms.5V.nb|Wolfram]] [[https://github.com/fablab-neckar-alb/MaerklinAnalysis/blob/master/analysis/MM2.78.fwd.nb|Mathematica]]-[[https://github.com/fablab-neckar-alb/MaerklinAnalysis/blob/master/analysis/MM2.78.run.nb|Notebooks]]. ==== mfx-Datenanalyse ==== Das gemessene digitale Kontrollsignal wiederholt sich alle 50ms und besteht aus 3 durch Pausen getrennten Blöcken. {{https://c1.staticflickr.com/5/4621/38635023070_a7e7c7f5bc_z.jpg?direct|zyklisch wiederholte 50ms-Sequenz}} In Mathematica werden die Datenpakete Run-Length-codiert, um verschiedene Modulationsarten identifizieren und decodieren zu können. {{https://c1.staticflickr.com/5/4665/38635022760_92459f2632_z.jpg?direct|run length kodierte wiederholte Sequenz}} Die zyklisch wiederholte Sequenz beinhaltet === ein zweimal wiederholtes 18-Bit Paket === im [[http://www.drkoenig.de/digital/motorola.htm|MMX-Format]] {{https://c1.staticflickr.com/5/4621/38635022900_5abff03dc8_c.jpg|ungültiges Märklin Motorola //idle// Paket}} Ein vorläufiger Parser in Mathematica decodiert dieses Paket zunächst in Bits als:\\ {1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0} in trits:\\ {open, open, open, open, 0, open, open, open, open} Das ist sowohl im ursprünglichen Motorola-Format als auch im MM2-Format ein illegales Paket, dessen Inhalt ignoriert wird, aber wahrscheinlich Märklin-Motorola-Decoder von unkontrolliertem Losfahren abhält. === ein langes Paket === im [[https://github.com/fablab-neckar-alb/MaerklinAnalysis/blob/master/doc/Schienenformat.pdf|mfx-Format]], das aus 2 mal unmittelbar hintereinander gesendeten [[https://github.com/fablab-neckar-alb/MaerklinAnalysis/blob/master/doc/Schienenformat.pdf|mfx-Format]]-Frames besteht === ein zweimal wiederholtes kürzeres Paket === im [[https://github.com/fablab-neckar-alb/MaerklinAnalysis/blob/master/doc/Schienenformat.pdf|mfx-Format]] {{https://c1.staticflickr.com/5/4663/26574544258_9a7f5e236b_c.jpg|einzelnes mfx-Paket}} Ein vorläufiger Parser in Mathematica decodiert dieses Paket zunächst in Bits als: {SYNC, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, SYNC, SYNC} und in einer 2. Stufe in Befehlssequenzen: * SYNC * **{A7, 5}** 7-bit Adresse 5 * **{DRV7, FWD, 0}** 7-bit Fahrbefehl vorwärts, Geschwindigkeit 0 * **{FUNC16, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}}** 16 Funktionen, Funktion 4 aktiv * korrekte 8-bit CRC * SYNC * SYNC Das lange mfx-Paket wird interpretiert als aus 2 Frames bestehende Bit-Sequenz: {SYNC, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, SYNC, SYNC, SYNC, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, SYNC, SYNC} Der zweite Frame des langen mfx-Paketes ist mit den folgenden 2 kürzeren mfx-Paketen identisch. Der erste Frame des langen mfx-Paketes wird als * SYNC * **{A7, 0}** 7-bit Adresse 0 (broadcast) * **{CENTRALUID, 1195666018, COUNT, 3}** UID der Kontrollstation: 1195666018, Anmeldungszähler: 3 * korrekte 8-bit CRC * SYNC decodiert. ===== Noch zu erledigen ===== Diese Decodierung, vor allem des MM2-Formats, muss noch vervollständigt und dann auf r0ket und SHA-Badge übertragen werden. Die Betriebssysteme von r0ket, SHA2017 badge (und sino:bit und calliope-mini) müssen so weit verstanden werden, dass keine Interrupts ununterbrochene Datenaufnahme in Echtzeit und drahtlose Übertragung stören können. Zunächst sollte ein Datenlogging in Echtzeit mit drahtloser Übertragung des unverarbeiteten Digitalsignals programmiert werden, damit die durch Unterbrechungen der Stromzufuhr vom Gleis bei fahrendem Zug entstehenden Signalstörungen verständlich werden. Von den Signalstörungen hängt ab, wie ein robuster Parser auszusehen hat. Run length encoding ist bei einem gestörten Signal möglicherweise keine gute Lösung. ===== Leute ===== [[Leute:cmaier|tatzelbrumm]] & Paul Rosset (FabLab Neckar-Alb). Danke an Goswin für die [[http://www.ti.com/lit/ds/symlink/sn74ahc14.pdf|Schmitt-Trigger]], von denen mehrere anstatt von Spannungsreglern oder kaum mehr zu ersetzender Konferenzbadges abgeraucht sind. ===== Linke Liste ===== ==== Repositories ==== * [[https://www.flickr.com/photos/89067995@N00/albums/72157668012514079|Fotos und Videos]] * [[https://github.com/fablab-neckar-alb/Maerklin|Mechanische Konstruktionen]] * [[https://github.com/fablab-neckar-alb/MaerklinAnalysis|Märklin-Digital Dokumentation und Analyse]] * [[https://github.com/fablab-neckar-alb/r0ket|r0ket-Programme]] (fork von [[https://github.com/r0ket/r0ket]]) * [[https://github.com/fablab-neckar-alb/Sha2017Badge|SHA2017 badge-Programme]] (fork von [[https://github.com/SHA2017-badge/Firmware]]) * [[https://github.com/fablab-neckar-alb/sha2017badge_apps|SHA2017 Micropython badge apps]] ==== Literatur ==== * [[https://www.digital-bahn.de/info.htm|digital-bahn.de]]: [[https://www.digital-bahn.de/info_tech/mfx.htm|mfx]] * [[http://siggsoftware.ch/wordpress/srcpd-mit-mfx-und-anderen-erweiterungen/|SRCPD mit MFX und anderen Erweiterungen]] * [[https://www.opendcc.de/index.html|OpenDCC]]: [[https://www.opendcc.de/elektronik/opendecoder/opendecoder_sw_dcc.html|open decoder]], [[https://www.opendcc.de/info/avr/avr_tricks.html|AVR tricks]] * [[http://pgahtow.de/wiki/index.php?title=DCC_Dekoder|pgahtow: DCC Dekoder]] * [[http://spazioinwind.libero.it/scorzoni/motorola.htm|Andrea Scorzoni, Manual of the Märklin Motorola format]] * [[https://web.archive.org/web/20150426164106/http://www.alice-dsl.net/mue473/|Rainers Modellbahn Technik Seite]] [[http://rainer.mueller-korntal.de/|(aktuell)]] * [[https://www.arduino.cc/en/Reference/SoftwareSerial|arduino Software Serial library]] * [[https://www.nxp.com/docs/en/user-guide/UM10375.pdf|NXP UM10375 LPC1311/13/42/43 User manual]] * [[https://www.nxp.com/docs/en/data-sheet/LPC1311_13_42_43.pdf|NXP LPC1311/13/42/43 Data Sheet]] * [[https://github.com/Anon0/Arm-LPC1343|ARM LPC1343 (r0ket) example C app]] * [[https://en.wikibooks.org/wiki/Clock_and_Data_Recovery|Wikibook: Clock and Data Recovery]]