Eisenbahn_Header_5Eisenbahnbrett - Neues LayoutEisenbahnbrettBR24

 

DCC Weichendecoder

Als nächstes habe ich im Netz nach Accessory-Decodern Ausschau gehalten, vorzugsweise ebenfalls mit Arduinos als Hirn. Man wird auch hier recht schnell fündig.

Einen mich interessierenden Weichendecoder habe ich bei Franz-Peter “MicroBahner” gefunden.

Dieser basiert auf einem Arduino (Nano) und kann gemischte Accessories ansteuern, unter anderem maximal 16 Servos, z.B. um Weichen elektromotorisch zu bedienen.

Hinweis
16 Servos können nur in der Version mit einem der Arduino Megas angesteuert werden, nur diese Versionen der Arduinos haben die notwendige Anzahl 16Bit-Timer. Mit einem Ardunino Nano, wie hier von mir verwendet, ist bei 12 Servos das Ende der Fahnenstange erreicht, mehr unterstützt die verwendete Servo-Lib nicht.

Um diesen Decoder an DCC anschließen zu können käme wieder der hier beschriebene Adapter zum Zuge, aber da ich Arduino Nano Shields (suche bei ebay nach “Shield-Expansionboard-Breakoutboard-I-O-Erweiterung-für-Arduino-Nano”) besitze, die bereits alle IOs des Arduino auf Steckern für Servos zugänglich machen, der Adapter aber die Hälfte der Anschlüsse verdeckt, musste eine Variante 2 des Adapters her.

Update
Neue Version V1.5, siehe unten.

Die Schaltung ist bis auf die alternative Verwendung von IO A0 für den ACK-Impuls (ist bei Version 1 der Anschluss A5) identisch zu der oben Angegebenen, nur das Layout wurde etwas gestrafft.

DCC-Adapter für Arduino Nano V1.4               (Click auf das Bild für volle Auflösung)

DCC-Adapter für Arduino Nano V1.4

Alle Bauteile sitzen zwischen den Sockelstreifen für den Arduino, vier SMD Widerstände sind auf die Unterseite gewandert, DCC wird an der Schraubklemme angeschlossen, der USB-Anschluss des Arduino sitzt gegenüber.

Die Stecksockel für den Arduino habe ich mit langen Pins ausgeführt, so dass der Adapter auf das Expansion-Shield aufgesteckt werden kann, der Arduino sitzt auf dem Adapter und bedient beides. Die links und rechts des Arduino sitzenden Stecker für die Servos sind jetzt frei zugänglich.

Die mit Eagle3D gerenderte Ansicht...

DCC-Adapter für Arduino Nano 3d

und im Original:

DCC-Adapter für Arduino Nano

Der für den Weichendecoder zusammengesetzte Platinen-Stapel

kompletter Weichendecoder

Unten das IO-Expander-Shield, darauf gesteckt der DCC-Adapter und auf diesem gesteckt der Arduino Nano.

Das verwendete IO-Shield nochmal alleine:

IO-Expander Shield

Man sieht hier schön die für jeden IO-Pin des Arduino zur Verfügung gestellten Dreifach-Stecker, die wunderbar zu den Anschlüssen der Servos passen.

Die Designunterlagen für den Arduino DCC-Adapter im EAGLE V7.7 Format.


Hinweis
Der hier vorgestellte Decoder benötigt eine getrennte Versorgungsspannung, da der DCC-Adapter keine Möglichkeit vorsieht, die DCC-Spannung zur Versorgung zu verwenden.

Ein Grund für diese Auslassung gegenüber der DigiSpark-Version mit AtTiny85 ist der maximale Eingangsspannungsbereich des auf dem Arduino Nano verbauten Spannungsreglers. Der AMS1117 5.0 auf dem Arduino verträgt maximal 15 V am Eingang, der auf dem DigiSpark verbaute 78M05 verarbeitet hingegen bis 35 V Eingangsspannung.

Ein weiterer, gewichtiger Grund ist der große Kondensator, der nötig wäre, um die aus dem DCC-Signal per Gleichrichter gewonnene Gleichspannung zu sieben. Der hätte auf dem schmalen Board schlicht keinen Platz gefunden.

Achtung!
Die auf dem IO-Board vorhandene Niederspannungsbuchse darf ebenfalls mit maximal 15 V beaufschlagt werden, da die hier eingespeiste Spannung - abzüglich der Vorwärtsspannung einer Schottky-Diode - direkt auf den Vin-Eingang des Arduino geführt wird.


Nachtrag
Die von Franz-Peter zur Verfügung gestellte Lösung hat mir zu viele Rätsel aufgegeben, die Einstellung der Endlagen der Servos habe ich z.B. nicht hinbekommen.

Keine Probleme hatte ich hingegen bei dem 4-Servo-Decoder nach Phillip Gahtow.
Also habe ich Phillips Decoder auf den Arduino Nano portiert und um 8 Servos auf deren 12 erweitert. Wie schon weiter oben erwähnt unterstützt die Servo-Lib maximal 12 Servos pro 16Bit-Timer (von denen der Arduino Nano leider nur genau einen (1) hat).

Da der von mir entworfene DCC-Adapter auch die passenden Teile für die Erzeugung eines ACK-Impulses enthält, habe ich diesen, von Phillip schon vorbereiteten Teil des Decoders gleich mit aktiviert und getestet.
Ergebnis: Klappt prima :-)

Die Original-Implementierung von Phillip sieht vor, den ACK-Impuls über Aktivierung und Deaktivierung der Servos zu erzeugen. Das hat leider nicht funktioniert.

Die Sourcen (Arduino Syntax) der aufgeblasenen Version des Gahtow’schen Decoders für 12 Servos mit Arduino Nano gibt es als Download: DCCNanoServo8Bit_v21

Oh, bevor ich es vergesse - der aufmerksame Leser ahnt es bereits... Der Code dieses alternativen Decoders läuft auf der oben beschriebenen Hardware :-)

Die Zuordnung der Arduino Ausgänge zu den Servos ist im Code beschrieben.


Ein Bekannter hat mich auf die Arbeiten von Nico Teering aufmerksam gemacht.

Nico hat mit ArCoMoRa ein alternatives, DCC kompatibles System zur Steuerung von Accessoires, Weichen und Signalen sowie ein LocoNet Rückmeldesystem aufgebaut und bietet preiswerte Bausätze mit erfreulich großem Funktionsumfang an.

Er ist zur Einstellung der Parameter seiner Dekoder einen anderen Weg gegangen, und verwendet den USB-Anschluss an seinen Baugruppen zur Parametrierung.

Die zugehörige Software kommt mit einem Installer für Windows.

Erfreulicher Weise sind die Dekoder von Nico einem Arduino sehr ähnlich aufgebaut, die Firmware lässt sich problemlos auf einem Arduino installieren und funktioniert damit genauso gut wie auf der Original-Hardware.

Da mein oben beschriebener Weichendekoder ebenfalls mit einem Arduino arbeitet, habe ich kurzerhand testweise “Mardec”, den Multifunktionalen Arduino DCC Decoder auf den Nano gespielt und erwartungsgemäß läuft der Weichendecoder damit hervorragend.


Update
Leider sind mir bei der Umsetzung des Weichendecoders in Software ein paar Fehler unterlaufen, die Zuordnung der Funktionen zu den Pins des Arduino betreffend.

Damit alle Funktionen des Weichendekoders genutzt werden können, müssen bestimmte Signale auf anderen Pins ausgegeben werden. Betroffen sind ACK-Impuls, der Taster um beim Reset oder PowerOn in den CV-Prog-Modus zu gelangen sowie der Anschluss für Servo 12 an Pin A0.

Damit das alles wie in der Software vorgesehen klappt, muss die Hardware geändert werden.

Die Möglichkeit, den ACK-Impuls über eine Auswahl von Pins einstellen zu können, entfällt, der Impuls wird fest über A5 erzeugt. Pin A7 erhält einen externen PullUp Widerstand.

DCC_Monitor V1.5               (Click auf das Bild für volle Auflösung)

Der PullUp muss leider direkt an den Pads des Arduino bzw. dessen Sockel angelötet werden (siehe rote Markierung im Bild unten), es ist schlicht kein Platz vorhanden, um den Widerstand ohne Krampf und ohne zusätzliche Drähte frei irgendwo auf dem Board platzieren zu können.

Das Layout der geänderten Schaltung:

DCC_Monitor V1.5

Um den Decoder in den CV-Prog-Modus zu versetzen muss ein Taster an A7 angeschlossen werden, der beim PowerOn oder beim Reset A7 auf Masse zieht.

Die zugehörige Software wurde ebenfalls überarbeitet, im Wesentlichen musste die Pinzuordnung und deren Initialisierungen geändert werden, sie hat jetzt den Stand V2.2. Im Beschreibungsteil am Anfang der INO-Datei hat sich ebenfalls einiges geändert, bitte beachten.

Update
Die beschriebenen Änderungen am Code sind nur teilweise eingeflossen :(
Hier die korrekte Version der Decoder-Firmware: DCCNanoServo8Bit_v23

Achtung!
Der in der Schaltung angegebene Optokoppler CNY17 muss unbedingt vom Typ CNY17-4 sein. Die “-4” gibt an, dass der Koppler ein CTR (Current Transfer Ratio) von mindestens 160 % (160..320 % lt. Datenblatt) hat, was bei einem Eingangsstrom von 37 mA einen Ausgangsstrom von mindestens 60 mA ergibt. Das entspricht genau dem von der NMRA für einen ACK-Impuls geforderten Wert. Die 37 mA Eingangsstrom ergeben sich aus dem Widerstand von 100 Ω in Reihe mit der IR-LED im Koppler. Die LED hat lt. Datenblatt eine Durchlassspannung von ungefähr 1,3 V, ergibt mit der Versorgungsspannung von 5 V einen Spannungsabfall von 3,7 V über den Widerstand.

Ein CNY17-1 mit einem CTR von 40..80 % funktioniert nachweislich nicht.


Hinweis
Die Funktionalität der Schaltung als DCC-Monitor mit der Sniffer-Software von RudyB ist unverändert gegeben.

 


Beim Aufruf dieser Funktion werden Daten an Google in USA übermittelt. Neben Ihrer IP-Adresse wird auch die URL der besuchten Seite übertragen.
Besucherzaehler

Besucher seit
25.11.2000