Eisenbahn_Header_5

 

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 Ende der Fahnenstange, 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.

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.2               (Click auf das Bild für volle Auflösung)

DCC-Adapter für Arduino Nano V1.2

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.


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: DCCNano12Servo_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.

 


Besucher seit
25.11.2000

>