Details zur Schaltung des OpenDecoders (Var. 2)
- Schaltplan:
Nachdem die kostengünstige Variante 1 bei komplexeren Decoderaufgaben an Ihre (Speicher-)Grenzen kommt, entstand die Plattform 2, basierend auf einem Atmega8515 mit 8k Flash, 512 Bytes RAM und 512 Bytes EEPROM.
Diese Plattform ist aus Platz- und Kostengründen teilweise in SMD aufgebaut (allerdings noch moderat große Bauformen, noch manuell lötbar).
Schaltplan V2.01
Schaltungsbeschreibung:
Spannungsversorgung:
An X2 wird die Eingangsspannung des externen Netzteils eingespeist (ca. 15V); Polarität und Stromart ist egal: es kann also ein Modellbahntrafo, ein Steckernetzteil oder das DCC-Signal verwendet werden. Das DCC Signal kann auch ohne externe Brücke per Lötbrücken (SJ6 und SJ7) zum DCC-Eingang weitergeleitet werden. Die Eingangsspannung wird gleichgerichtet und über den üblichen 5V Längsregler 7805 zur Versorgung des Prozessors verwendet. Der Leerlaufstrom beträgt etwa 20mA; Es ist sowohl die T0220 Bauform, als auch die kleinere T039 Bauform bestückbar.
Hinweis 1: Ich habe festgestellt, dass manche Weichenantriebe von Roco erst bei 15V schalten; durch die Spannungsabfälle an Gleichrichter und Ausgangstreiber ist in diesem Fall die Versorgungsspannung auf 16V~ oder 18V= zu erhöhen.
Hinweis 2: Wenn nur Servos oder DMX angesteuert werden, dann macht man dem 7805 das Leben deutlich leichter, wenn man 7-9V zur Speisung verwendet. Ich verwende hier Steckernetzteile, die es 'günstig' beim nächsten Wertstoffhof gibt.
DCC-Eingang:
An X1 wird das DCC-Signal angeschlossen. Dieses wird über einen Optokoppler (6N136) von der Spannungsversorgung des Decoders getrennt. Der Optokoppler sorgt für einen störungsfreien Betrieb auch bei ausgedehnten Anlagen. Verwendbar ist sowohl der 6N136 als auch der 6N137 oder 4N25, wobei beim 6N137 noch zusätzlich der Pin 7 (Freigabeeingang) mit dem Pin 8 verbunden werden muß (nicht im Layout, da dieser Pin beim 6N136 frei bleiben muß).
Tipp: wer das DCC Eingangssignal überwachen möchte, kann die Freilaufdiode durch eine LED ersetzen.
Der 4N25 (oder seine Derivate) muß so bestückt werden, dass der Pin 1 des 4N25 auf Pin 2 des Layouts kommt (Pin 1 des Layout ist dann frei). Der 4N25 ist relativ langsam, insbesondere die Freiräumzeit ist relativ lang. Der Pullup (R5) am Ausgang muss auf 1k verkleinert werden, ansonsten kommen nach dem Optokoppler nur verfälschte Signale an.
Empfehlung: 6N136 verwenden.
R15 und C11 sind nicht bestückt.
Schaltausgang:
Hier findet der übliche ULN2803 als DIL Bauform Verwendung, damit er leicht gesockelt werden kann. Dieser Treiber kann 0,5A Dauerstrom je Ausgang liefern und ist intern mit einer Freilaufdiode für induktive Lasten ausgerüstet. Die Ausgänge sind jeweils in Dreier-Gruppen mit einem Versorgungsanschluß zusammengefaßt. Damit wird die Verdrahtung auf der Anlage erleichert und ev. sonst notwendige Verteilerklemmen können entfallen.
Sollte der Ausgangsstrom nicht ausreichen so kann folgender Trick angewandt werden: einfach einen zweiten ULN2803 Huckepack auf den ersten Chip auflöten.
Schalten von induktiven Lasten:
Weichenantriebe sind in der Regel Spulen, diese werden normalerweise mit einem Kontakt in der Weiche endabgeschaltet. Diese Endabschaltung verursacht eine Induktionsspannung, die rückwärts auf den Ausgangstreiber fließt und von der integrierten Freilaufdiode abgeleitet wird. Wenn die Endabschaltung "flattert" und mehrfach schnell hintereinander aus- und einschaltet, dann kann es passieren, dass die Freilaufdiode überlastet wird bevor die Absicherung über die Polyfuse abschaltet.
In so einem Fall kann mit einer schnellen Suppressordiode über der Weichenspule Abhilfe geschaffen werden - besser jedoch sollte der Weichenantrieb getauscht werden.
Zudem verursacht der Abschaltstrom eine erhebliches Störfeld in der Umgebung - Weichenleitungen dürfen daher nicht lang sein, zudem sollten sie nicht parallel zu anderen Leitungen liegen und verdrillt ausgeführt sein.
Prozessor:
Als Prozessor wird ein Atmel ATmega8515 verwendet.
Takterzeugung:
Der Atmel ATmega8515 wird mit einem werksabgeglichenen RC-Oszillator ausgeliefert, welcher bei 8 MHz läuft, der Quarz und die Kondensatoren können daher entfallen. Das zu ladende Hexfile muß für diese Frequenz passen, es ist also beim Übersetzen Taktrate (F_CPU) auf 8000000 einzustellen, alle Timingeinstellungen werden automatisch angepaßt.
Hinweis: die Taktgenauigkeit wird von Atmel mit 3% angegeben, was für diese Anwendung hinreichend genau ist; allerdings kann es bei extrem ungünstiger Kombination der Streuung des Takts, Temperatur, Versorgungsspannung der Durchlaufzeit durch die Optokoppler *und* einem DCC Signal an der Grenze des zulässigen Timing zu einer Fehlfunktion kommen.
Wer es gerne hypergenau mag, kann einen Quarz (und die zusätzlichen 18pF Kondensatoren) bestücken. Allerdings muß dann auch ein hex-file für die gewählte Frequenz geladen werden. Beim Übersetzen ist also entsprechend die Taktrate (F_CPU) auf diesen Wert zu stellen, alle Timingeinstellungen werden automatisch angepaßt. Auch bei der Programmierung der Fusebits muß entsprechend auf "external crystal" umgestellt werden.
Taste und LED:
Als LED ist eine 2mA Typen zu verwenden, diese kann direkt mit dem ATmega angesteuert werden. Der Taster wird zum Starten des Programmierens verwendet.
Servoausgang:
Es sind 2 Steckplätze für Servos vorgesehen, die übliche Pinbelegung GND - +5V - Servo wurde verwendet. Die Servos werden ja nach eingestellter Option im Stillstand nicht mit Pulsen versorgt, aber sie ständig an den 5V. Manche Servos (speziell billige) ziehen ziemlich heftige Stromstöße aus der 5V und liefern auch ziemliche Loaddumps zurück. Um diese sicher abzufangen, sollten die keramischen Abblockkondensatoren (C9 und C10) an den Servoanschlüssen 22u - 47u groß sein. Wenn diese Kondensatoren nicht in keramisch verfügbar sind, so kann man auch einen keramischen Kondensator 100nF und huckepack einen Elko verwenden - der Elkos sollte eine Spannungsfestigkeit von mind. 10V haben. Hochleistungsservos (z.B. für eine Zugbrücke) muß man mit separater Stromversorgung versehen.
Die Servos belegen separate Ausgänge am Prozessor (von Timern), so daß die Ansteuerung kaum CPU-Last verursacht.
Weichenrückmeldung:
Die Schaltausgänge zu den Weichen sind über Widerstand und Zenerdiode auf Eingänge zurückgeführt. Hier kann die Lage des Endabschaltkontaktes abgefragt werden. Damit ist eine Rückmeldung der tatsächlichen Weichenlage möglich bzw. kann erkannt werden, ob die Weiche geschaltet hat.
Wichtig: diese Widerstände sind nur zu bestücken, falls ein Feedback-Decoder gebaut werden soll, bei einer LED Ansteuerung stören sie!
Wenn statt des Endlagenkontaktes ein separater Microschalter oder eine Lichtschranke verwendet werden soll, so sind die Rückmeldereingänge direkt zu kontaktieren. Am besten macht man sich eine zusätzliche kleine Lochrasterplatine mit Stiftsteckern und verdrahtet von dort wie folgt:Direkter Rückmeldeeingang Weiche 1 Port PA0 Anschluß bei Kathode von Diode D8 Weiche 2 Port PA2 Anschluß bei Kathode von Diode D6 Weiche 3 Port PA4 Anschluß bei Kathode von Diode D4 Weiche 4 Port PA6 Anschluß bei Kathode von Diode D2
Diese Rückmelderkontakte schalten jeweils gegen Masse, der entsprechende Pull-Up ist auf OpenDecoder2 bereits integriert.
DMX:
Ein bidirektionaler RS485 Treiber (online umschaltbar) ermöglicht sowohl die Ansteuerung der Platine von DMX aus als auch das Erzeugen eines DMX Datenstroms. Zumsammen mit der aus OpenDCC bekannten Macroprogrammierung läßt sich damit die Hintergrundbeleuchtung der Modellbahn von DCC aus schalten.
Acknowledge-Puls und/oder Notausschaltung:
OpenDecoder V2 hat die Möglichkeit, an die Zentrale irgendwas zurückzumelden. Dies kann entweder ein DCC-konformer Acknowledgepuls, ein Puls auf einer separaten Rückmeldeleitung oder eine Nothalt sein, welcher über eine getrennte Leitung gemeldet wird.- DCC-konformer Acknowledgepuls:
hierbei handelt es sich um kurzfristige Lasterhöhung (> 60mA für 6ms) auf dem DCC Eingang. Dieser Puls kann von der Zentrale am Programmiergleis ausgewertet werden. Hierzu wird über SJ1 und SJ2 (SJ = Solder Jumper = Lötbrücken) und die Dioden (BAV199) das DCC-Signal gleichgerichtet und mit einer schaltbaren Last von 100 Ohm beaufschlagt. X7 entfällt in diesem Fall. - Separater
Rückmeldepuls:
Hier werden einfach alle X7 Ausgänge der Decoder (Pin 1 = Ground) zusammengefaßt und mit einem Pullup (z.B. 4k7 oder in der Zentrale integrierter OC) versorgt. Der Rückmeldepuls muß dann an der Zentrale direkt eingelesen werden. Die Dioden können in diesem Fall entfallen und SJ1/2 bleibt offen. - Nothaltleitung bei nicht schaltenden Weichen:
Gleiche Ringleitung und Schaltung wie oben, jetzt wird jedoch ein Abschalten der Anlage (oder Teilen davon) ausgelöst. Dies kann entweder direkt (Nothalt) oder über ein Rückmeldesystem (wie z.B. S88) erfolgen.
- DCC-konformer Acknowledgepuls:
- Layout:
Die Platine ist in der Version 2.0 als zweiseitige Platine mit den Abmessungen 80*50mm realisiert. Es sind nur wenige SMDs, zumeist Durchsteckbauteile und DIL-ICs verwendet, ein Nachbau ist daher möglich. Auch ist genug Platz für große Schraubklemmen und Befestigungslöcher vorgesehen, so daß der fertige Decoder leicht installiert werden kann.
Bauteilseite
Lötseite
Wie geht die CV-Programmierung?
-
Wenn der Decoder einen gültigen CV-Programmiervorgang erkannt
hat und eine Rückmeldung an die Zentrale erforderlich ist, dann
wird ein sog. Service Mode Acknowledge ausgelöst. Hierzu muß der
Zentrale eine 6ms lange Lasterhöhung um mind. 60mA präsentiert
werden. Dies geschieht mit OK4 und T1.
T1 schaltet den Widerstand als Last auf das gleichgerichtete DCC-Signal, hierzu muß SJ1 und SJ2 geschlossen sein.