RS485 IO Board - ModellBahnLichtSteuerung

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche
Testaufbau

Von: Micha68

ACHTUNG! Diese Seite wird nicht weiter gepflegt. Mehr über das Projekt MoBaLiSt gibts hier: http://www.mobalist.de

Einleitung

Hier stelle ich euch meine Planungen und Baufortschritte zur PC-gesteuerten Modellbahnbeleuchtung vor. Die Idee ist, sämtliche Beleuchtungen einzeln steuern zu können. Ich denke, dass damit die Beleuchtung wesentlich realistischer darstellbar ist, als mit ein paar wenigen Schaltern ganze Strassenzüge einzuschalten. Dabei soll es die Möglichkeit geben, vordefinierte Abläufe auf den Modulen laufen zu lassen und per PC die komplexe Lichtsteuerung über die Zeit zu machen.

Die Module bieten bisher folgenden Funktionsumfang:

  • 24 Ausgänge zum Ansteuern von LEDs und Lämpchen
  • PC-gesteuert per RS485-Bus oder stand-alone
  • Bis zu 255 Module an einem Bus → 6120 Ausgänge!
  • Alle Ausgänge dimmbar
  • Versorgung über ein Zentrales 5V-Netzteil, bei Bedarf kann ein 5V-Regler bestückt werden
  • Die Ausgänge können für den Betrieb mit LEDs mit der Bordinternen 5V-Spannung versorgt werden...
  • ...oder in Blöcken zu je 8 Ausgängen mit externer Spannung versorgt werden (für Lämpchen, Relais..)
  • drei Statusleds zeigen 5V, Datenverkehr und Programmiermodus an
  • 3 Jumper dienen zum Einstellen der Betriebsart (Programmiermodus, Stand-alone und Aktion)

Ich habe zwei Layout-Versionen erstellt. Zum einen mit SMD-Bauteilen. Diese wird bei mir zum Einsatz kommen, da diese Module nur 80×50mm klein sind. Die DIP-Version ist für weniger geübte Löter und misst 80×100mm. Diese wird aber im Moment nicht gepflegt und erst bei Bedarf auf einen Endstand gebracht. Die Layouts wurden mit KiCad erstellt. Der Preis der SMD-Version bewegt sich für eine Platine um 15€, baut man 25 Platinen kommt man durch Rabatte auf ca. 315€ – macht ca. 12€ pro Platine.

Folgene Befehle sind schon umgesetzt:

  • Minimale und maximale Helligkeit pro Ausgang einstellen
  • LED An / Aus mit einstellbarer Dimmgeschwindigkeit auf min bzw. max
  • zufälliges Flackern, Geschwindigkeit einstellbar
  • Blinken, Geschwindigkeit einstellbar
  • Wechselblinken von 2 Ausgängen, Geschwindigkeit einstellbar
  • Baustellenblitzer mit 8 Ausgängen, Geschwindigkeit einstellbar
  • Ampelschaltung mit 10 Ausgängen (2× 3-LED Ampel für Verkehr und 2× 2-LED Ampel für Fussgänger), Geschwindigkeit einstellbar
  • Haussteuerung: 4 Leds schalten in einer einstellbaren Zeit zufällig ein, bzw aus, Geschwindigkeit einstellbar
  • Alle 24 Ausgänge Aus / An

Alle Einstellungen lassen sich im EEprom speichern. Somit gibt es die Möglichkeit (über Jumper) das einmal programmierte Modul auch ohne PC laufen zu lassen. Ein weiterer Jumper ermöglicht die einfache Programmierung der Adresse: Jumper setzen, einen Befehl senden und die in diesem Befehl enthaltene Moduladresse wird als eigene Adresse übernommen.

Das System bietet pro RS485-Strang die Möglichkeit, bis zu 255 Module (Adresse 1–255) anzusprechen. Die Adresse 0 dient als Broadcast-Adresse an alle Module. Hiermit können gleichzeitig alle Ausgänge oder Funktionen Ein- bzw. Ausgeschaltet werden.

Die PC-Software ist noch in der Entwicklung. Hier fehlt mir noch die Idee, wie man eine komplette Anlage übersichtlich darstellen kann.

Das Protokoll auf der seriellen RS485-Schnittstelle ist relativ einfach gehalten:

0xAA Sync-Byte
0xAA Sync-Byte
1–255 Moduladresse, oder 0 für alle
1–24 Nummer des Ausgangs auf dem Modul
0–x Befehl
0–255 Wert

Software

AVR

Die AVR-Software besteht zum einen aus einer Soft-PWM-Routine hier aus dem Tutorial. Dieses wurde auf 24 Ausgänge erweitert.

Die RS485-Schnittstelle wird im Interrupt abgewickelt.

Ein Statemachine-ähnliches Gebilde erzeugt die Dimmer und Ablauffolgen. Jumper JP4 dient zum setzen der Adresse. Ist der Jumper gesteckt, zeigt LED D26 "prog" (rot) den Programmierstatus an. Die Adresse, die im nächsten Befehl über den RS485-Bus gesendet wird, wird als eigene Adresse übernommen und ins EEprom abgelegt. Der Jumper kann nach erfolgreicher Programmierung wieder entfernt werden.

PC

Die PC-Software dient zum Konfigurieren und Steuern der Module. Ich schreibe das Programm mit Realstudio für Linux und Windows.

Ansicht "Module"
Einstellen der Parameter der einzelnen Module und Ausgänge.
Dies sind zB die Namen der Module, die Namen der Ausgänge, minimale und maximale Helligkeit, die Zeit zum Dimmen von maximal auf minimal und umgekehrt, die Funktion, zB Blinken etc. Ausserdem können für das gesamte Modul die Konfigurationen eingestellt werden. Startmodus gibt an, wie das Modul gestartet wird:
  • 0=Grundkonfig und warten auf PC-Befehle
  • 1=Start aller Programme wie im EEprom abgelegt.
Ansicht "Gruppen"
Definition der Ausgangs-Gruppen. Dazu werden den einzelnen Gruppen Ausgänge zugeordnet. Die Ausgänge können in mehreren Gruppen enthalten sein. Die letzte Gruppenschaltung "gewinnt".
Ansicht "Zeitsteuerung"
Den Gruppen Ein- und Ausschaltzeiten zuordnen. Die Uhrzeit kann entweder aus RocRail übernommen oder die interne FastClock benutzt werden.
Ansicht "Handsteuerung"
Die Gruppen können als Schalter frei auf dem Bildschirm platziert werden (Übersicht Anlage). Von hier aus können Gruppen dann per Hand aktiviert werden.
Ansicht "DCC"
ist noch in der Entwicklung. Möglich ist im Moment, von Rocrail die MoBa-Zeit zu übernehmen. Ebenso kann der "DCC"-Verkehr mitgehört werden. Dies ermöglicht das Schalten von Guppen "DCC-Abhängig". Es können auch DCC-Ausgänge angelegt werden, die dann über Gruppen aktiviert werden können (nur RocRail).

Hardware

Genaue Beschreibung folgt, sobald die ersten Platinen bestückt sind.

Die Ausgänge 1-8, 9-16 und 17-24 können jeweils mit max. 500mA belastet werden. Mehr schafft ein ULN2803 nicht.
Bleibt man bei normalen Leuchtdioden kommt man bei 20mA pro LED auf 160mA pro Port, also alles im grünen Bereich.
Bei normalen Modellbahnbirnchen mit 16V und 30-50mA kommt man auch gerade noch hin.
Grössere Lasten sind möglich, aber immer in der Summe max. 500mA pro ULN2803.

Bestückungsvarianten:

5V extern oder per 5V-Regler auf der Platine
5V zentral

Ich betreibe meine Modellbahnelektronik mit einem Zentralen 5V-Netzteil. Diese 5V werden an P1 eingespeisst (Polarität beachten!).

Diese Spannung liegt dann parallel an P2 und kann zum nächsten Modul durchgeschliffen werden.


5V lokal

Hat man keine 5V zur Verfügung, kann die Platine auch mit einem Gleichrichter und einem 5V-Regler bestückt werden. (Bauteile G4, U1, C15, C16 und C17). An P8 kann dann ein Netzteil oder Trafo (>9V, max. 20V) angeschlossen werden.

Der Gleichrichter schafft maximal 1,5A. Dies sollte reichen, da die Ausgänge eh nur mit 500mA je Block belastet werden können. Allerdings ist dann die Hitzeentwicklung zu beobachten. Werden die Treiber maximal belastet, macht es Sinn, alle 4 Gleichrichter zu bestücken und die Versorgungspins P4, P5, P6 und P8 aus einem ausreichend starken Netzteil/Trafo zu versorgen. Die Ströme verteilen sich dann auf die einzelnen Gleichrichter und die Erwärmung hält sich in Grenzen. Benutzt man nur normale LEDs mit 20mA kommt man maximal auf 500mA. Das dürfte kein Problem darstellen (teste ich noch...)


interne 5V oder externe Versorgung für LED 1-8
LEDs mit 5V

Jumper JP1 in oberer Position nutzt die Boardeigenen 5V zur Versorgung der Ausgänge.

Die 5V an den LED-Ports sind über eine PolyFuse abgesichert. Jeder Port ist mit 10µF und 100n abgeblockt. Reicht die Spannung von 5V nicht aus - zB beim Betrieb von Lämpchen - können die Ausgänge Blockweise auch extern versorgt werden.


LEDs extern

Für die Ausgänge 1-8 ist dann der Gleichrichter G1 zu bestücken und der Jumper JP1 in die unteren Position zu setzen. Die Spannung für die LEDs 1-8 wird an P4 angeschlossen.


interne 5V oder externe Versorgung für LED 9-16

Wie oben, jedoch Jumper JP2, Gleichrichter G2 und P5 für die Versorgungsspannung.

interne 5V oder externe Versorgung für LED 17-24

Wie oben, jedoch Jumper JP3, Gleichrichter G3 und P6 für die Versorgungsspannung.

Anschluss von LEDs und die Berechnung der Vorwiderstände

Die Leds werden an die Ausgänge D1-D24 angeschlossen. Auf der Rückseite befindet sich ebenfalls eine Markierung 1-24. Je nach Anwendung könne die LEDs auch von unten angeschlossen werden. ...

Anschluss von Lämpchen

...

RS485-Bus

Der RS485-Bus wird an K1 angeschlossen und kann über K2 zum nächsten Modul durchgeschliffen werden.
Es ist auf die Polarität (A und B) zu achten. Ebenso muss die Masse durchgeführt werden.
Baudrate 500.000

oder http://www.hjelmslund.dk/USB485.asp

  • Am letzten Modul den Bus mit 120Ω (R29) abschliessen!
  • Bis zu 255 Module an einem Bus (bei diesem Transceiver), weitere USB-Wandler und somit weitere 255 Module sind natürlich möglich

Datenblätter


Bilder

SMD-Version
Schaltbild
KiCad
Top-Layer
Bottom-Layer
Platine Top (Scan)
Platine Bottom (Scan)
Platine Foto
Die Pads sind vergoldet (ENIG). Leider ist das auf den Scan´s nicht so gut zu erkennen.
Bestuckt1.jpg
Bestuckt2.jpg
Atmega fehlt noch, weil DigiKey meinte, mir lieber ATXmega128A1 zum Preis der Atmega16A schicken zu müssen... Leider passt das 100-Pin-Monster nicht auf die Platine :)
Scanb top.jpg
Scanb bottom.jpg
Fertig bestückt und funktioniert :)
5er.jpg
5 Boards für die Softwarentwicklung
DIP-Version
Prototyp

Demovideo 1: http://www.youtube.com/watch?v=7bBNUzgwtRw


Downloads

  • Bauteilliste, Bestellnummern, Preise: Download - 10.06.2011
  • SourceCode: Download (AVRStudio-Projekt) - 08.06.2011
  • Befehlsliste: Download - 10.06.2011
  • KiCad Projektdateien Rev 1.1: Download - 16.06.2011
  • Gerber-Files Rev 1.1: Download - 16.06.2011
  • PC-Programm zur Steuerung / Konfiguration

Stand der Dinge

  • Prototyp läuft
  • Layout erstellt
  • 29.05.2011 - 30 Platinen bestellt (schwarzer Lötstop beidseitig, weisse Beschriftung beidseitig, Lötstop beidseitig, SMD-Pads beidseitig, ENIG - Eine Platine 1.85€, Einrichtung 38.43€, Versand 19.91€ - http://www.pcbcart.com)
  • 06.06.2011 - MAX487 in einen MAX3085 geändert - dadurch 255 Module an einem Bus und BiDiB-tauglich (siehe http://www.bidib.org) !
  • 06.06.2011 - Quarz in 16MHz geändert (höhere Baudraten bei DiDiB)
  • 09.06.2011 - Platinen sind angekommen, Perfekte Qualität
  • 17.06.2011 - Erste Platine gelötet. Erste Tests erfolgreich.

weitere News im Forum: http://www.stummiforum.de/viewtopic.php?f=21&t=61640

Bekannte Fehler

  • In der ersten Platinenversion sind durch die Änderung von Quarz und RS485-Transceiver die beiden Bestückungsaufdrucke falsch.
  • Der Bestückungsaufdruck (Rahmen) von C13 fehlt, warum weiss ich noch nicht.
  • falsches Footprint für die ULN2803. Reihenanbstand der Pads zu gering. WorkAround: Pins der ULN leicht ans Gehäuse biegen. In Rev 1.1 behoben. (Trottelfehler!)

Siehe auch