Nutzung mehrerer Relaiskarten mittels I2C-Bus möglich?

  • Hallo zusammen,


    für meine Spur N (1:160) Modellbahn (digital z.T. mit Sound-Fahrzeugen; aktuell gesteuert mit einer Lenz LZV 200) möchte ich ein Gleisbildstellpult bauen, welches über meinen Raspberry Pi 5 gesteuert wird.

    Meine Idee im gesamten sieht wie folgt aus:

    • Die Bedienung der Weichen soll mittels einer Fahrstraßenschaltung mittels Start-Ziel-Tastendruck (bei Zugfahrten) bzw. mit Kipptastern (bei Rangierfahrten) erfolgen.
      => Je ein Taster für das Start- sowie Zielsignal und je ein Kipptaster pro Weiche.
    • Die Signale sollen dann automatisch den entsprechenden Signalbegriff anzeigen. Bei Bedarf soll die Fahrstraße auch wieder aufgelöst werden. Zudem sollen Rangierfahrten auch entspr. signalisiert werden können.
      => Je ein Schalter pro Signal sowie ein Schalter je Stellbereich (insgesamt 3) zum Auflösen der Fahrstraßen.
    • Der Zustand der Weichen und Signale soll zudem (vereinfacht) auf dem Gleisbildstellpult mittels LEDs angezeigt werden.

    Des Weiteren möchte ich auch Lichter und Töne (z.B. Bahnsteigansagen) sowie evtl. in Zukunft auch Bahnsteiganzeiger über den Touchdisplay (DEBO LCD 10 HDMI https://www.reichelt.com/bd/de/shop/pro…_10_hdmi-214994) steuern. Auch soll hier eine Anzeige der Schaltzustände und später auch eine Bedienung der Anlage wie oben beschrieben möglich sein.

    Bei meiner bisherigen Recherche bin ich auf diese Relaiskarten gestoßen:
    DEBO RELAIS 16CH https://www.reichelt.com/bd/de/shop/pro…nel_12_v-282567
    Diese würde ich als Ausgabebaugruppe nutzen wollen, da ich aufgrund unterschiedlicher Weichenantriebe (unterschiedliche Betriebsspannungen und Arbeitsweisen) so eine gleiche Ansteuerung realisieren kann, ohne dass sich die verschiedenen Spannungen „mischen“.


    Insgesamt stellen sich mir aber bis jetzt noch folgende Fragen:

    1. Sind die Relaiskarten (als Ausgabebaugruppen) in der Lage mittels I2C-Bus verbunden und betrieben zu werden? Welche Alternativen gäbe es ggf.?
    2. Wie können die Eingabebaugruppen aussehen? Es müssen ja sehr viele Signale bzw. Bedienhandlungen eingelesen werden.


    Hier einmal eine Auflistung verwendeten Hardware:


    Für eure Antworten, Ideen aber auch gerne Kritik danke ich euch im Voraus.


    Viele Grüße


    Mika

  • Nutzung mehrerer Relaiskarten mittels I2C-Bus möglich?? Schau mal ob du hier fündig wirst!

  • Das von dir verlinkte 16fach Relaisboard ist kein I2C .

    Dieses hier wäre I2C :https://www.reichelt.de/arduino-relais-modul-4-channel-5-v-srd-05vdc-sl-c-grv-relais-4ch-p255328.html?

    oder 8 Kanal :https://www.ebay.de/itm/394750182143bzw 16 Kanal :https://www.ebay.de/itm/394033088559  
    hier wären auch mehrere über verschiedene I2C Adressen möglich.

    Ansonsten müsstetst du über I2C Port-Expander dir mehr GPIO Pins erstellen z.B. mit https://www.reichelt.de/index.html?ACT…der%20raspberry

    Edited 2 times, last by Bertthias (September 24, 2024 at 6:23 PM).

  • Danke dir, Bertthias , für deine Info, dass die Karte kein I2C kann und für deine alternativ Vorschläge. Vor allem, dass du mir direkt zwei unterschiedliche Lösungsansätz aufzeigst, finde ich super!

    Wenn ich den Expander richtig verstehe, dann kann ich mittels I2C (Adressierung über die gesteckten Jumperkabel) dann die von mir Relaiskarten mehrfach verwenden und über die Busverbindung die entsprechenden GPIOs ansteueren und so dann jeweils z.B. je 16 Kanäle/Relais ansteuern.
    Diese Variante wäresuper, da ich dann ja auch auf die selbe Weise die Eingangs-GPIOs vervielfältigen kann.
    Sollte ich hier etwas falsch verstanden oder einen Denkfehler haben, bitte sehr gerne drauf aufmerksam machen.

    Zumal ja eine Verwendung der GPIO-Expander zusammen mit den 16-kanaligen Relaiskarten viel günstiger ist, wie die Variante von Ebay (für deren Vorstellung ich dir trotzdem vielmals danke Bertthias ). Auch denke ich (mit meinem aktuellen Wissen), dass eine pyhsikalische Adressierung mittels Kodierung durch Kabel für die Fehlersuche einfacher ist; oder wird eine Fehlermeldung erzeugt, wenn eine Adresse doppelt vergeben ist?


    Viele Grüße


    Mika

  • Bei der Unteradressierung von I2C-Karten würde ich bei der Modellbahn ein Problem sehen. Denn die Steuerung soll doch einigermaßen schnell funktionieren, besonders, wenn du eine reihe von Relais schalten willst.

    Weiche-1, Weiche-2, Signal -A, Signal-B, und das so, dass der Zug dieweder entgleist noch dann doch beim roten Signal durchfährt.

    Denn der Fahrstrom wird ja auch vom PI gesteuert, oder?

    (Also nicht, dass das Signal über einen Ausgang die Fahrspannung abtrennt, sondern dass das über ein Signal über die Lenz erfolgt)


    Und dann hast du nicht nur einen Zug sondern drei oder vier, die gleichzeitig fahren. Gleichzeitig verschiedene Signals und Fahrstraßen bekommen sollen, so das der aus dem Bahnhoffahrende von dem,der das Gleis nach ihm belegt, nicht angefahren wird.

    Dass die Gleiskreuzung störungsfrei erfolgt und dass der Bahnübergang, der vom Rechner gesteuert werden soll, auch die Schranken geschlossen hat, wenn der Zug über ihn fährt.


    Hier befürchte ich, dass ein I2C-expander das zu langsam macht.

    Also, das ist meine Befürchtung, die du, oder jemand, der das schon so macht, beantworten sollte.

    Nicht, dass du alles darauf aus umbaust und es dann doch nicht so funktioniert, wie du es dir vorgestellt hast.

    Das wäre schade.

    Computer ..... grrrrrr

  • Beim I2C Expander werden am Expander verschiedene Busadressen meist per Lötbrücke eingestellt.

    Danke für die Erläuterung. An welchen Lötbrücken würde ich das an dem von dir verlinkten Expander machen? In den Datenblättern auf der Reicheltseite habe ich leider nichts dazu gefunden.
    Das einzige, was ich gefunden habe ist der folgende Punkt:
    "Three Hardware Address Pins to Allow Up to Eight Devices On the Bus" sowie in der Reicheltproduktbeschreibung, dass mit dem Expander 128 GPIOs zur Verfügung stehen.
    Das wären für meine Verwendung eigentlich zu wenig, glaube ich jedenfalls. Ich rechne aktuell wie folgt:

    • Knapp 100 Fahrstraßen mit Start-Ziel-Tastern (wobei ja der Zieltaster der ersten Fahrstraße gleichzeitig der Starttaster der folgenden Fahrstraße ist)
      => ca. 100 GPIOs als Eingänge
    • ca. 60 Weichen, wobei 9 nur zum Rangieren benötigt werden (keine Fahrstraße)
      => ca. 50 GPIOs als Weichenausgänge (zu Relaiskarten
    • ca. 40 Mehrabschnittssignale, welche jeweils bis zu 11 verschiedene Signalbegriffe anzeigen müssen
      Meine Überlegung ist pro Signal bis zu vier Relais zu nutzen. Dabei sollen diese nach dem folgenden Schema arbeiten/eingesetzt werden:
      1. Halt
      2. Ersatzsignal
      3. Rangiersignal/Kennlicht
      4. Fahrt
        Hier soll dann fahrstraßenabhängig (mittels Matrixschaltung?) das richtige Signalbild gebildet werden.

    => mind. 160 GPIOs als Signalausgänge


    Aufgrund dieser Überlegung benötige ich mindestens 310 GPIO-Pinne alleine für die Fahrstraßensteuerung und Signalisierung.

    Wenn jemand Ideen har, was man zusammenfassen oder vereinfachen kann, lasst es mich sehr gerne wissen.


    Denn der Fahrstrom wird ja auch vom PI gesteuert, oder?

    Aktuell wird noch per Hand gesteuert. An der Anlage werden mind. Anschlüsse für die Handregler angebaut sein, dass man quasi mit dem Zug mitläuft.
    Bis jetzt habe ich noch keine Lösung gefunden wieman den Pi in die Steuerung (DCC) direkt integriert; aktuell habe ich nur Informationen bzgl. DCC-EX auf Arduino-Basis gefunden.
    Hat dazu vielleicht auch schon jemand Erfahrungswerte und/oder Kenntnisse, ob und wie eine Zusammenarbeit zwischen Arduino (Fahrzeugsteuerung) und Raspberry Pi (Stellwerkstechnik) möglich ist?

    Dass die Gleiskreuzung störungsfrei erfolgt und dass der Bahnübergang, der vom Rechner gesteuert werden soll, auch die Schranken geschlossen hat, wenn der Zug über ihn fährt.


    Hier befürchte ich, dass ein I2C-expander das zu langsam macht.

    Ich verstehe deinen Gedanken und überlege (schon seit lägerem) wie man die Fahrzeuge sichern kann. Denn auch wenn man mit Mehreren fährt (und einer den Fahrdienstleiter macht) besteht die Signalverfehlungen und daraus resultierenden Unfällen und co. Einen Not-Aus- für die gesamte Anlage werde ich aber definitiv noch einbauen.

    Mit der langsamen Signalverarbeitung habe ich aktuell keine Bauchschmerzen; wenn die Fahrstraße noch nit eingelaufen ist, steht das Signalhalt auf Halt und die vorherigen Signale signalisieren dies ebenfalls.


    Wie kann ich aber nun die ganzen Signale (auf der gesamten Anlage komme ich bestimmt an die 500) über den Pi auswerten bzw.steuern?


    Für eure weiteren Ideen, Einschätzungen aber auch gerne Kritik bin ich euch bereits jetzt sehr dankbar.


    Viele Grüße


    Mika

  • Eigentlich brauchst Du für eine Fahrtraße (logisches Element) keine I2C Ports, die Eingabe Start / Ziel würde ich z.B. über eine alte USB Tastatur machen, diese ist auch in Zeilen und Spalten aufgeteilt und wenn du diese "entkernst" kannst du an die Kontakte der Platine auch normale Taster anschließen. Damit sollten sich genügend Kombinationsmöglichkeiten für Fahrstraße o. sonstige Eingaben ergeben. Die realen Elemente (Weichen, Signale, GFM, BÜ usw.) könnte man u.a. übersichtlichkalthalber, an einen je dafür eigenständigen I2C Bus betreiben. Den RPi könnte man mit zusätzlichen I2C Bussen erweitern bzw. kann man auch einen I2C Multiplexer verwenden. Es gibt die I2C Portexpander auch mit mehr als 16 Ports, leider wird es dann wg. der Bauform der IC's etwas speziell und leider auch teurer. Als Treiber würde ich nur im Notfall auf Relais setzen, ich würde versuchen, die Elemente mit einem Transistorarray wie z.B. ULN280x o.ä. anzusteuern.


    PS: Bitte keine Doppelposts zum gleichen Thema erstellen, dies wird in den wenigsten Foren gern gesehen und stellt auch einen Verstoß der Forenregeln dar.

    Edited 2 times, last by Fliegenhals: Hinweis zu Doppelpost (September 25, 2024 at 3:01 PM).

  • Eigentlich brauchst Du für eine Fahrtraße (logisches Element) keine I2C Ports, die Eingabe Start / Ziel würde ich z.B. über eine alte USB Tastatur machen, diese ist auch in Zeilen und Spalten aufgeteilt und wenn du diese "entkernst" kannst du an die Kontakte der Platine auch normale Taster anschließen.

    Danke für die Idee mit der Tastatur. Verstehe ich aber jetzt richtig, dass dann die Leitungen der Bedienelemente des Stellpult mit den Tastenkontakten der Tastatur verbunden werden? Die Tasten der Tastatur sind doch quasi wie ein Schalter der durchs das Drücken den Stromkreis auf der Platine schließt. Wie schließe ich dann die Bedienelemente des Stellpults auf der Tastaturplatine an?
    Wie kann ich dann die Eingaben auswerten; es müsste ja eine Datei existieren, in die dann „reingeschrieben“ wird?


    Den RPi könnte man mit zusätzlichen I2C Bussen erweitern bzw. kann man auch einen I2C Multiplexer verwenden.

    Auch vielen Dank für die Idee mit dem I2C Multiplexer. Hättest du da direkt ein Modell, welches du mir empfehlen kannst?
    Ich habe auch schon mal nach einigen Multiplexern gesucht und dabei unteranderem diesen hier gefunden: https://www.berrybase.de/seeed-grove-8-…zRoCaq0QAvD_BwE

    Könntest du mir einmal bitte die genaue Funktionsweise dieser Multiplexer erklären, da ich leider keine Datenblätter oder Beschreibungen dazu gefunden habe. Auch verstehe ich gerade noch nicht ganz, wie die Multiplexer zwischen Raspberry Pi und den GPIO Expender gebaut werden können.
    Abgesehen davon, habe ich bis jetzt leider keine I2C-Multiplexer gefunden, welche die selber Steckerbuchse wie der GPIO Expender haben.


    PS: Bitte keine Doppelposts zum gleichen Thema erstellen, dies wird in den wenigsten Foren gern gesehen und stellt auch einen Verstoß der Forenregeln dar.

    Entschuldige bitte den Doppelpost. Ich habe erst nach dem Erstellen gemerkt, dass die Frage in der falschen Gruppe stand. Ein Verschieben war da leider nicht mehr möglich. Ich habe die andere Frage nun als erledigt gekennzeichnet.


    Als Treiber würde ich nur im Notfall auf Relais setzen, ich würde versuchen, die Elemente mit einem Transistorarray wie z.B. ULN280x o.ä. anzusteuern

    Warum ehr Abstand von den Relais nehmen? Wie werden die Transistorarrays verwendet/betrieben und verbaut?

    Die realen Elemente (Weichen, Signale, GFM, BÜ usw.)

    Eine Frage noch bzgl. der GFM:

    Wie können diese realisiert werden?
    Eine bekannte Idee sind ja Stromfühler. Zwar habe ich reichlich Einspeisungen, bin aber trotzdem ehr weniger der Freund von nachträglich Gleise nachträglich beidseitig auftrennen, da ich v.a. an den Modulkanten im Gleisbogen ein paar Probleme mit der Spurführung habe.
    Ich habe mich schon einmal mit Lichtschranken dies bezüglich auseinander gesetzt, habe aber bis jetzt nur IR-Lichtschranken gefunden die sehr/zu groß sind. Lichtschranken vorallem deswegen, um die Fahrzeuge zuzählen, da ich z.T. Fahrzeuge mit Kunstoffachse bzw. -radsätzen habe, welche von einem Stromfühler nicht erfasst werden würden.


    Für Eure Ideen, Ratschläge aber auch gerne Kritik danke ich euch bereits im Voraus!


    Viele Grüße


    Mika

  • Wie schließe ich dann die Bedienelemente des Stellpults auf der Tastaturplatine an?
    Wie kann ich dann die Eingaben auswerten; es müsste ja eine Datei existieren, in die dann „reingeschrieben“ wird?

    Gegenfrage: Wie wolltest du denn deine Pulttasten an die I2C Portexpander anschließen bzw. dann später diese mit dem RPi auswerten und dann im Anschluss Elemente wie Weichen, Signale usw. ansteuern? Ohne etwas Praxiserfahrung mit dem Lötkolben und Programmierkenntnisse wird das eine echte Herausforderung werden. Selbst bei Fertiglösungen, wird man immer etwas basteln müssen.

    Einen für dich geeigneten Multiplexer musst du dir leider selber aussuchen, genaue Beschreibungen zur Funktionsweise findet man im Netz. Im Prinzip wird der I2C Master nacheinander mit verschiedenen Bussen verbunden und kommunizert dann mit den Slaves in diesem Bus, was einen erhöhten Programmieraufwand zur folge hat. Den RPi mit zusätzlichen I2C Bussen zu erweitern, wird sicher einfacher sein.

    Warum ehr Abstand von den Relais nehmen? Wie werden die Transistorarrays verwendet/betrieben und verbaut?

    Du wirst vermutlich sehr viele Relais brauchen, neben dem Platzbedarf, Strombedarf, den Kosten der Relaisplatinen und den Geräuschen vieler klappernter Relais, ist auch der Verschleiß der Kontakte, ein Nachteil ggü. einer elektronischen Ansteuerung. Zur Verwendung von Transistorarrays wie dem ULN 280x sind im Netz ebenfalls genug Infos zu finden.

    Eine Frage noch bzgl. der GFM:

    Wie können diese realisiert werden?

    Es gibt sehr kleine Reflexlichtschranken od. man verwendet kleine Magnete und Hall-Sensor IC's, welche man im Gleis platzieren könnte.

  • Guten Morgen,

    Wenn du mehrer Relaiskarten ansteuern willst, diese über einen Portexpander ansteuern, und ggf sogar über die gleichen Protexpander entsprechende Rückmelder in dein Steuerungssystem einspeisen willst, dann würde ich zu einem MCP23017 greifen.
    Diese sind schnelle bezüglich des Datenverkehrs auf dem I²C wie andere Mitbewerbermodell aus den Häuser NXP oder Texas Instruments.
    Zudem haben diese einen INT Rückmelder. Was für dich bedeutet die Portexpander welche als Eingänge dienen müssen nicht ständig via des Datenbusses I2C abgefrat werden, sondern der Portexpander meldet sich über einen separaten GPIO bei PI, das sich hier etwas verändert hat.

    Wenn du wissen willst wie schnel dieser MCP23017 Portexpander sein können, mal von den resultierenden Schaltlatenzen der Relais selber abgesehen dann kommt man auf mit SCl Bus-Takt auf etwas 350 Schaltvorgänge im Multi-Bus Betrieb ( mehrere dieser MCP23017 parellel , nur mit getrennten Busadressen ) pro Sekunde.

    Das Bedeutet du kannst via des I2C Busses 8 dieser !6 Port- Portexpander MCP23017 prallel anschliesen und betreiben. Wenn das nicht ausreichen sollte dann die SPI Version MCP23S17 verwenden, diese können mit der Erweiterung um ein CS Pin ( Gehört zum SPI BUS ) um jeweils weitere 8 dieser Expander erweitert werden. Auch hier kann man mehrere dieser MCP23S17 via Adress-Codierung an einem SPI BUs mit einem einzigen CS Signal 8 dieser Expander parallel schalten. Nur durch die Erweiterung um einen zusätzlichen CS Pin, bei gleichen Datenleitungen MOSI , MISO und SCLK kannst du das solange erweitern bis dir die freien GPIOs für die CS Funktion am PI ausgeht.
    Technisch gesehen sind 16 CS, mal 8 MCP23S17 mal 16 I/O Ports an einem RasPI = 2048 solcher I/O Kanäle möglich.
    SPI hat zudem den Vorteil das diese um einiges schneller ist, wie der I2C Bus. Allerdings wenn du auch Rückmeldekanäle installieren willst, musst du dir eine Möglichkeit erschaffen oder offen lassen diese INT-Rückmelder ( Eingangs-Portexpander ) mit dem RasPi zuverbinden .

    Dieses kann man über einen GPIO IRQ Event machen, der dann diesen betreffenden Portexpander ausliest, und feststellen kann an welchem der Eingänge ein Siganalwechsel stattgefunden hat.
    Damit müsstest du nur die entsprechende Anzahl Portexpander anschließen, diese nach dem Bus-Init entsprechend konfigurieren, ob Eingang oder Ausgang und dann läuft die Sache.

    Noch ein Hinweis zu dem Beitrag von Fliegenhals bezüglich der Hallsensoren. Hier musst du aufpassen, besonders bei den digitalen Ausführungen, für welche Magnetfeldstärke diese ausgelegt sind, sonst kann es passieren das dieser nicht immer oder korrekt meldet.
    Alternativ dann analoge Hallsensoren, welche dann aber eine Nachbeschaltung benötigen. Hier kann man mit einem einstellbaren Schwellwertschalter ( Operationsverstärker ) dann die Schaltschwelle mittels eins Potis sehr genau einstellen. Ohne zu wissen, welche Induktivität deine N-Spur verursacht um einen solchen Gleismelder aufzubauen, kann das auch sehr schnell teuer werden, wenn man versucht mit digital arbeitenden Hall-Sensoren so etwas aufzubauen, weil man muss sehr viel herumprobieren. Oder man kann in anderen Foren für Modellbau dort ein paar Werte abgreifen.


    Es grüßt
    Roland.

  • Hallo zusammen,


    danke für eure weiteren Vorschläge und Antworten.

    Ich war einige Tage verreist und ohne Rechnerzugang, daher erst jetzt meine Reaktion.


    Heute habe ich noch mal nach I2C Multiplexeren und GPIO Expandern gesucht und dabei die folgenden Artikel gefunden, welche den Vorteil haben vom selben Hersteller zu sein und über EASY C Kabel einfach mit einander verbunden werden können.

    Weiterhin habe ich mich mit diesen Bauteilen bzw. den entsprechenden Datenblättern (versucht) auseinander zusetzten. Die Adressierung bereitet mir noch etwas Kopfzerbrechen, da vor allem im Datenblatt für den GPIO Expander hier zu keine Erklärung vorhanden ist; im Datenblatt vom Multiplexer ist zwar eine Tabelle enthalten, wie die Adressierung erreicht wird (High bzw. Low-Signale) aber nicht wie ich diese genau erzeuge (5V, 3V, …). Kann mir diesbezüglich jemand mit einer Erklärung helfen?

    Auch habe ich einmal die Struktur des I2C-Bussystems auf Grundlage meines bisherigen Wissens skizziert (siehe auch das Bild).

    Dabei habe ich es bewusst einfach gehalten:

    • Die GPIO-Expander sind an jeden der (bis zu) acht I2C Multiplexer jeweils einzeln angeschlossen, dass heißt von jedem Multiplexer gehen acht Leitungen zu den GPIO Expandern.
    • Die GPIO Expander sind für die Ansteuerung der 16 kanaligen Relaiskarten (https://www.reichelt.com/bd/de/shop/pro…2567#closemodal) verantwortlich.

    Wie kann ich jetzt aber genau die einzelnen Relais einzeln ansteuern?
    So wie ich die beiden Komponenten verstehe kann ich (theoretisch) 1.024 Ausgänge nutzen, wenn ich an die 8 I2C Multiplexer jeweils 8 GPIO Expander mit je einer 16 kanaligen Relaiskarte als Ausgabebaugruppen anschließe?
    Wenn keine Relaiskarte verbaut wird, kann der GPIO Pin doch dann als Eingang genutzt werden.


    3mm SMD Reflexlichtschranke gibt's bei Reichelt https://www.reichelt.com/bd/de/shop/pro…pact_smd-146683

    Fliegenhals Danke dir für den Link zu der SMD Lichtschranke. Ich denke mal, dass die Leitungen (0,14 mm²) an den Eckpunkten angelötet werden müssen?


    Roland53 Vielen Dank für deine super ausführliche und hilfreiche Erklärungen. Der MCP 23017 war auch jetzt der Expander, der mir angezeigt wurde.

    Das Bedeutet du kannst via des I2C Busses 8 dieser !6 Port- Portexpander MCP23017 prallel anschliesen und betreiben

    Heißt das quasi, dass ich 8 MCP 23017 mit verschiedenen Busadressen hinter einander an jeden der 8 Ausgangsports der Multiplexer anschließen und dann dort jeweils eine 16 kanalige Relaiskarte anbinden kann?


    Für eure Antworten, Erklärungen, Tipps, und co aber auch gerne Kritik danke ich euch schon vielmals im Voraus.


    Viele Grüße


    Mika

  • Fliegenhals Danke dir für den Link zu der SMD Lichtschranke. Ich denke mal, dass die Leitungen (0,14 mm²) an den Eckpunkten angelötet werden müssen?

    Ja, es gibt auch sehr kleine Reflexlichtschranken mit Drahtanschlüssen z.B. https://www.reichelt.com/de/de/shop/pro…in_4-pol-114341 aber auch hier muss man die Adern anlöten.

    ... im Datenblatt vom Multiplexer ist zwar eine Tabelle enthalten, wie die Adressierung erreicht wird (High bzw. Low-Signale) aber nicht wie ich diese genau erzeuge (5V, 3V, …). Kann mir diesbezüglich jemand mit einer Erklärung helfen?

    L = GND

    H = Vcc (3,3V)

    A0, A1, A2 auf GND = niedrigste Adresse 0x20

    A0, A1, A2 auf Vcc = höchste Adresse 0x27

  • Guten Abend,

    Der Vorteil dieser Module sind zwar, dass man diese schön mit teuren kabeln aneinanderreihen kann, aber dann hören sämtliche Vorteile dieser Module bei einem Projekt dieses Umfangs auf.

    Das Ganze ist nicht so einfach wie es ausschaut und das beginnt mit der Stromversorgung und endet mit den Schaltpegeln die an diese Relaiskarten herausgehen sollen.

    Diese MCP23017 benötigen je nach dem und hier beginnen dann deine Probleme erst richt ! :
    - Welche Schaltspannung, und welchen dazugehörigen Strom benötigt jeder Relaus Kanal für sich einzeln ?
    Hinweis dazu: Jeder dieser MCP23017 kann nur 700 mW oder 0,7 W umsetzen. Daraus ergibt sich je nach Betriebs- und Ausgangsspannung am Portexpander GPIO unterschiedliche Stromwerte [ Bei Vcc 3,3 V = Summe 212 mA oder 140mA bei 5,0 V Betreibsspannung ]. Diese Teilen sich dann auf diese 16 Output Ports auf. Jedoch darf der einzelne GPIO am Portexpander auch Impulsweise nicht mehr wie mit 25 mA belastet werden.

    Daraus ergibt sich je nach Betriebspannung mit welchen du diese MCP23017 in der Parallelschaltung betreiben willst ein etsprechnd hoher Strombedarf. Hast du dir schon Gedanken gemacht wie du bei 8 diese MCP23017 und einer Vcc 3,3 V diese ca 1,7 A oder 1,3 A bei 5 V nur für 8 dieser MCP23017 in einer Kette bereitstellen willst ? Wenn du dann das Ganze auch noch mittels dieses Bus-Multiplexers um den Faktor 8 Erweitern willst, kommt man dann auf fast 15 A ( 13,6 A ) bei 3,3 Volt oder ca. 10 A ( 9,6 A ) bei 5,0 Volt !?
    Da ist der Eigenstrombedarf des Multiplexers noch nicht einberechnet.
    Aber wenn dann auch noch alle Ausgänge an einem einzelnen dieser MCP23017 gleichzeitig ein Relais ansteuern sollen und angezogen halten soll, dann darf dein Relais am Steuereingang nicht mehr wie 13 mA @ 3,3 V oder 8 mA @ 5,0 V ziehen ! Sonst fliegt dir die ganze Schose um die Ohren.

    Zudem ist zu beachten, die Vcc des Portepanders entspricht dem Signal auf dem I2C Bus, was bei einem 5,0 V Betrieb dieser noch einen Pegelwandler ( Levelshifter ) von 3,3 V / 5,0 V voraussetzt, sonst überlebt das Ganze dein Raspi nicht.

    Kann man alles machen - keine Thema, aber es kommen dann auch noch Leitungslängenbeschränkungen hinzu, so das diese jeweils Kette aus 8 dieser Protexpander Module ( Link zu Reichelt ) nicht unbegrenzt lang werden dürfen. Eine weitere Bremse ist dieser Multiplexer welcher die BUS-Geschwindigkeit erhabsetzt um überhaupt noch funktionieren zu können.

    Für dich wäre erst einmal wie schon geschrieben wichtig, welchen Anzugsstrom ein solches Relais benötigt, wenn diese Relaiskarte über keine OptoKopplereingänge verfügt, und welcher resultierende Haltstrom diese Relais benötigen, denn das muss du dann via eines weiteren Stromkreises gesondert bereitstellen. Es gibt unter diesen blauen Relais die auf den meist bei Amazon angebotenen Karten Modelle / Versionen die einen Anzugsstrom ( das einleiten des Umschaltvorgangs ) von bis zu 140 mA benötigen. Wenn dann auf der Relaiskarte kein Schaltverstärker verbaut ist, oder auch kein Optokoppler dann würdest du den MCP23017 sofort schrotten, denn der einzelne GPIO kann nur max. mit 25 mA bbelastet werden, wobei immer dieser 700 mW Gesamtleistung Pro MCP23017 als oberstes Limit zu beachten ist !!!

    Wenn halbwegs begabt bist einen Lötkolben zu schwingen, dann baue dir diese Expanderkarte selber. Das geht mit Locjrasterplatinen und den Schaltkreisen in DIP Ausführung besser und du kannst unabhängig der Relaiskarten oder Relais selber gleich noch einen MOSFET wie den BSS138 oder 2N7000 nachschalten. Damit kannst du den Strombedarf für diese Expander ( in der Summe 8 x 8 ) gering halten und die Relais trotzdem mit 5,0 V ansteuern. Allerdingsbenötigst du dann noch eine Freilaufdiode zum Schutz des MOSFETs sowie zwei zusätzlicher Widerstände ( Gate-Vorwiderstand und einen Gate-Source- Pulldown ).
    Hier der Vorteil der genannten MOSFETs diese lassen sich mit jeweils 1,2-1,5 mA via des Gates auch mit 3,3 Volt ansteuern auch wenn das daran angeschlossene Relais mit 5 Volt betreiben wird.

    Wobei ich mir hier mehr Gedanken machen würde wie bekomme ich für 8 x 8x 16 = 1024 diesen Relais Anzugstrom her, der theoretisch auftreten könnte. Im dümmsten Fall aller Fälle sind das 1024 * 0,14 A = 143,5 A bei 5 Volt ! Sowie im einfachsten Fall, wenn alle Relais nur einen Haltestrom von 15 mA aufweisen immerhin noch 22 A !!!

    Die Programmierung ist eher das geringste Problem. Viel mehr sehe ich das Problem woher du für all diese ggf 5,0 V Relais den Strom herbekommen willst, und wie du alle diese vielen Proexpander plus den Multiplexer mit Strom versorgen willst ?

    Alternativ du bist soweit in der Materie drin das du mit Fritzing oder KiCAD dir selber eine solche Ansteuerplatine mit dieser hohen Anzahl Proexpander designen könntest !? Fritzing ist für Linux auch das RasBianOS kostenfrei, ebenso KiCAD.

    In diesem Sinne, bevor du planst irgendwleche Module zu kaufen, überlege dir ganz genau wie du diesen ganzen Batz mit Strom versorgen willst und ob du das überhaupt auf die Reihe bekommst !?

    Es grüßt
    Roland

  • Neben elektromechanischen Komponenten (Weichen, Bahnübergänge), die per Relais gesteuert werden, sind ja auch Signale mit (hoffentlich halbwegs modernen hellen) LEDs dabei, die direkt angesteuert möglicherweise deutlich weniger Strom aus dem Portexpander benötigen (2mA oder weniger bei gedrosselten ultrahellen LEDs) als ein Relais im angezogenen Zustand (15mA und mehr). Da kann ein stromfressendes Relais wegfallen.

  • Da es die Modellbahnanlage ja schon gibt, liegt m.E. die größte Herausforderung darin, die neue Steuerung mit der bestehenden Anlage zu verbinden.

    Zum Thema Stromversorgung und Module: Fast alle Infos stehen in den Datenblättern bzw. Beschreibungen. Dort kann man auch lesen, das die Relaismodule mit 12V laufen, via Optokoppler PC817c und Teiber ULN2803 mit einem Strom von 15-20mA angesteuert werden und einen Haltestrom von ca. 0,04A (nur das Relais) haben, also keine Panik. Sich aber vor dem Zusammenbau ein paar Gedanken über die SV bzw. auch die Ansteuerung zu machen, ist nie verkehrt.

    Edited 2 times, last by Fliegenhals (October 3, 2024 at 11:07 AM).

  • Ich hab nicht den ganzen Thread gelesen, deshalb bitte Nachsicht, falls ich irgendwo daneben liege.

    Bei der großen Anzahl Aus- und Eingänge könnte man doch relativ überschaubar mit Schieberegistern/Latch arbeiten. Da gibt es welche, die relativ große Ströme (10 mA und mehr) schalten können. Damit kann man einige Elemente direkt anschließen. Wo das nicht reicht, nimmt man halt noch einen Transistor oder schaltet gleich hinter jedes Schieberegister einen ULN2803 oder einen Optokoppler. Auf Relais würde ich verzichten, so weit es nur geht. (nur mal überschlägig: wenn 1/4 der 200 Relais aktiv ist, hast du schon eher 50 x 60 mA = 3A nur für die Relais!)
    Die Schieberegister kann man in Reihe hintereinander schalten und beliebig verteilen. Außer der Spannungsversorgung braucht man da nur drei Leitungen.

    Für die Eingänge bieten sich zwar Porterweiterungen an, weil die einen Interrupt liefern können, wenn ein Signal reinkommt, aber letztlich musst du dann doch die acht Eingänge eines Ports checken, wo denn nun genau der Eingang aktiviert wurde. Bei >100 Eingängen brauchst du mindestens 13 Interrupts. Und dann musst du den ganzen Kram noch über I2C auslesen. Das macht alles kompliziert. Man könnte auch hier Schieberegister einsetzen und müsste die dann eben regelmäßig pollen. Ein Problem sehe ich da aber nicht, denn die Schieberegister arbeiten mit Taktraten bis zum MHz-Bereich - die Abfrage von 100 Eingängen ist also ne Sache von ein paar µs.

    Für jedes 8-Bit-Schieberegister hältst du dir ein Byte mit den Daten. Änderst du was, dann schiebst du sämtliche Datenbytes an alle Register.
    Für die Eingänge entsprechend ein Byte für jedes Schieberegister. Alle Einlesen und durch XOR-Vergleich mit dem letzten Zustand kriegst du raus, wo sich was verändert hat.
    Du kannst so auch leicht an jeder Stelle ein Schieberegister hinzufügen. Objektorientiert lässt sich das recht einfach programmieren und das ist wahrscheinlich am Ende nicht komplizierter als eine Struktur mit mehreren I2C-Geräten mit unterschiedlichen Adressen und Interrupts.

    Wenn du dir ne Lochrasterplatine nimmst, auf die das Schieberegister und ggf. ein Treiber-IC passt (ggf. auch noch größere Transistoren oder Relais), evtl. auch Optokoppler und Widerstände, dann kannst du diese Module sehr einfach überall platzieren.
    Das Ganze ist auch wesentlich billiger als I2C-Relaiskarten, so dass du ohne Budgetbelastung reichlich Reserven einbauen kannst. Eine Platine mit 8 Ein- oder Ausgängen kannst du für ungefähr 2 € Materialpreis basteln.

    Um das Ganze halbwegs stimmig zu kriegen, müsstest du aber auch erst mal eine Übersicht machen, wo welche Teile mit welchen Spannungen und Strömen geschaltet werden müssen bzw. wo welche Art von Sensoren welche Art von Signal (Spannung) liefern. Ich hab nichts dazu gelesen, mit welcher Spannung das alles betrieben wird oder ob es mehrere Spannungen gibt. Und dann noch die Frage, ob es überhaupt alles mit Gleichstrom läuft. Ich kenn mich da nicht so aus, aber ich meine, die Modellbahn meiner Kinderzeit hatte Wechselspanung für die Locks. Ich nehme an, da gibts heute anderes.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Guten Morgen, und schönen Feiertag,

    Grundsätzlich muss man das Thema Stromversorgung dort beginnen, wo die ganze Sache heiß wird.
    Egal wie viele dieser Relais gleichzeitig schalten werden, es gibt immer noch den Fall des könnte. Da die SW bestimmt wie viele dieser Relais gleichzeitig zum Anziehen gebracht werden können, musst du eine einfache Grundüberlegung anstellen.
    Diese gleichzeitig schaltenden Relais benötigen immer einen Anzugstrom, und das muss du erst einmal ermitteln. Je nach Relaistyp können das für bis zun einige ms ( im schlimmsten Fall wenn diese schon ausllutscht sind 120 ms ) 150 mA+ pro Relais sein. Das muss deine Stromversorgung abkönnen, und das muss durch entsprechende ELKO Kapazitäten abgedeckt sein. Dann kommen noch die Relais hinzu, welche sich alle schon im angezogenen Zustand befinden, egal mit welcher Spannung diese Relais betrieben ( nicht nur angesteuert ) werden.

    Bei dem Schieberegister bin ich mir nicht sicher ob das die Lösung der ersten Wahl ist, denn man muss um die Ausgänge als Binäre Ausgänge setzen zu können, das ganze Durchtackern. Also wenn ich die Funktion richtig verstanden habe entsprechend viele Fortschaltimpulse an diese Register /-array senden, damit die Ausgänge dann wieder den Zustand haben, wie es gewünsht ist.
    Bei dieser Anzahl von möglichen Ausgängen eher schwierig, zumindest stelle ich mir das so vor, wenn man eines der unteren Bits löschen will, aber eines der oberen Bit hinzufügen will. Klar geht das Durchtackern des Taktsignale schnell, auch wenn man den Reset Input benutzt, aber dennoch man muss auch hierführ eine gewisse Zeit einberechnen. Und wie die Relais sich dann verhalten, wenn man für einige µs fast ms der Strom weg ist, sowie sich das auf den Fahrbetreib auswirkt - ich habe keine wirkliche Vorstellung dass das alles Störungs- und Unterbrechungsfrei funktionieren wird.

    Was die Ausage Eingänge angeht, warum so viele Imput IRQ belegen ?
    Hier kann man das ganze verkürzen wenn, man die INT Ausgabe der INPUT MCP23017 zb auf einem SPI MCP23S17 umlegt. Und von hier nur 2 Leitungen zu RasPi führt. Der Puffer im MCP23017 bleibt für 20 ms bestehen. Man hat also in der Summe seitens des RasPI 20 ms Zeit dieses Register auszlesen. Schaltet man nun noch einen MCP23S17 dazwischen, laufen die INTs bei MCP23S17 ein dieser gibt für 16 dieser MCP23017 Register = 16 * 8 = 128Eingänge dieses Signal an den RasPi weiter, dieser liest mit einer viel höheren Geschwindigkeit dem Port des MCP23S17 aus, und fragt anschließend anhand einer DICT ( in Python ) den entsprechendne MCP23017 ab, welcher eine Veränderung am einem seiner Eingänge bemerkt hat. Wenn man das richtig gescheit aufbaut, den MCP23S17 mit einem SCLK Takt von 1,2 MHz betreibt dauert deiser gesamte Vorgang keine 630 µs und man hat in der Auswerte SW die Information auch mit dem Umweg über den MCP23S17 an welchem der I2C MCP23017 Eingänge sich etwas getan hat.
    Dazu muss man nicht zwangsläufig ständig auf dem I2C Bus herumackern, oder diesen mit solchen sinnfreien Loop Abfragen blockieren.
    In der Summe mit den MCP23S17 weil diese viel viel schneller abgefragt werden können, kann man mit einem solchen Portexpander immer 128 Eingangskanäle über nur 2 INT IRQ GPIO Ports des RasPi abfragen. Wobei mir jetzt aber auch noch der Multiplexer in den Sinn kommt, der die I2C Kommunikation zusätzlich ausbremst.
    Viellicht wäre der Gedanke nutzbringender wenn man auf diese Vielzahl der I/O über die SPI MCP23S17 laufen lässt, das kostet einem dann nur pro 8 Block ( Via Adresswahl ) einen CS Port ( SPI Bus ) und bringt die Input Expander über einen I2C MCP23017 zusammen.
    Letztere, diese Variate habe ich schon einmal auf einem ESP umgesetzt, und das funktioniert absolut zuverlässig und schneller. Hierzu sollte man erwähnen, das die SPI Portexpander wegen des höheren BusTaktes 3 bis 4 mal schneller eine Ausführung eines OUTPUT Befehls umsetzen, wie die I2C Versionen.
    Wenn man sich den Code beider Versionen anschaut, lässt sich das mit einer Bibliothek zusammenfasssen, so das nur die Schreib- udn Lesebefehle dann über eigene Funktionsblöcke je nach Bus-System ausgeführt werden. DIe interne Regsiterssetzung bzw das Auslesen dieser erfolgt bei beiden Versionen mit den gleichen Befehlen.

    Ws ich allerdings nicht mit Bestimmheit sagen wie man bei einem RasPi die Busgeschwindigkeit für den SPI Bus einstellen kann, und was der PI hier in der Lage ist auch umzusetzen.


    Es grüßt
    Roland

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!