Zutrittskontrolle mit RPI4 / MCP23017 / Relaisboard

  • Hallo,


    Ich habe einen Pi4 zur Zutrittskontrolle Programmiert, ich Verwende ein Akkugepuffertes 12V Netzteil mit einem 1A Ausgang, angeschlossen an einen StromPi.


    Über SDA/SCL habe ich dann einen MCP23017 angeschlossen und an diesen dann 2 Stk 8-fach Relaiskarten mit denen ich jeweils Türöffner/Leser LED/Leser Summer schalten möchte.


    Ich hab die Schaltung nun schon seit einigen Wochen getestet, auch wenn ich ALLE Relais gleichzeitig schalte brauch ich an der 12V/1A leitung 0,93A, geht also gerade so, An den Relaisklemmen jedoch in meinen Testläufen nichts angeschlossen!!!

    Später im Feldversuch mit den Leser LED + SUMMER angeschlossen geht auch noch alles, aber sobald ich einen Türöffner (24V AC) über ein relais schalte bricht aus irgendeinem Grund die Verbindung zum MCP23017 ab und ich kann kein einziges relais mehr ein schalten, wenn ich mein steuerungsprogramm (in c++) neu starte, somit wiringpi neu initialisiere, dann geht wieder alles bis ich wieder ein Türöffner Relais schalten lasse, ich habe bereits versucht anstatt der Türöffner andere relais zu schalten welche dann die tatsächlichen Türöffner ansteuern, diese Relais wurden dann mit 12V DC geschalten, selbe ergebnis!!!



    Aus unerklärlichen Gründen reagiert der Raspberry oder MCP23017 anders wenn am Relaiskontakt Last geschaltet wird als wenn keine Last geschaltet wird, wie kann das sein? die Kontakte selbst sollten doch vollständig Potentialfrei sein oder nicht?



    Der MCP23017 wird über 3V3 vom Raspberry versorgt, die Relais selbst über 5V USB Ausgang des StromPi, einen genauen Schaltplan habe ich leider nicht.

    Im Feldversuch hatte ich einen kleinen Programmierfehler und hab die Register des MCP falsch geschrieben was dann ALLE Relais zum Schalten brachte und somit auch die 3 bereits angeschlossenen Türöffner, der RPI brauchte hier deutlich mehr Strom als die 12V/1A und hat dann die Sicherung geschossen, nach dem austausch der Sicherung gehen nun manche GPIO PINS nicht mehr die zuvor INPUT Signale der Kartenleser verarbeitet haben, ich kann nur sagen das ich keinen Input mehr bekomme aber weiss noch nicht warum.


    Die 4er Relaiskarte habe ich nur eingebaut um die 5V Versorgung der 2 8fach Relaiskarten bis zum Programmstart zu unterbrechen da sie wärend des Bootvorgangs immer zufällige Zustände annahmen oder gar nicht erst gebootet werden konnte bevor man die 5V versorgung kurz trennte.


    Bin für jede Hilfe Dankbar!

  • Ich tippe auf die Stromversorgung. Passiert das auch wenn der Raspi mit einem eigenen, sauberen Netzteil versorgt wird?


    Es koennte aber auch etwas ueber die Kabelbaeume eingekoppelt werden. Erste Massnahme: 24V-Leitungen so weit wie moeglich von den Leitungen vom PI weghalten.


    Wenn das nicht richt, wird es schwierig: Drosseln, Entstoerkondensatoren...... viele Experimente mit unsicherem Ausgang...

  • Ein eigenes 5V Netzteil müsste ich probieren, in dem Momentanen Kasten ist die 12V Akkugepufferte Netzteilplatine die den Raspi über den StromPi Anschluss versorgt, selbes Netzteil versorgt über einen eigenen 1A Ausgang die ganzen Kartenleser (GND ist bei beiden Ausgängen verbunden, auch der GND der 5V USB Leitung von StromPi zu den Relais ist mit den GND Anschluss bei den GPIO Pins gebrückt)

    GND ist dann auch an Allen Relais Wurzeln angeschlossen, 2 der Relais wie gesagt gehen dann direkt zu den Kartenlesern und schalten mit GND die dortigen LEDS und Summer, und das 3te Relais schaltet den GND eines 12V DC Relais das in einem eigenen Verteilerkasten sitzt, jedoch mit der Stromversorgung des selben Netzteils wie der PI da gerade Versorgt wird, also Fremdspannung kommt momentan eher geringfügig hinein.


    An einer der Datenleitungen der Kartenleser hab ich jedoch das Problem das hin und wieder ein paar bits von den GPIO Pins gelesen werden, dies scheint ein Leitungs Störeinfluss zu sein, ist auch die Längste leitung mit ca. 40m.


    Wenn ich auch die 24V Leitung nun komplett abschalte und nur noch die 12V DC Relais mit den Raspi Relais schalte, passiert trozdem das selbe dass WiringPi oder auch direkt über i2c_smbus (habs umprogrammiert) die verbindung zum MCP23017 verliere und neu initialisieren muss, mit i2c_smbus geht das auch in runtime, hab mir damit also eine art workaround um das problem geschaffen...


    Wenn ich diese 12V DC Relais aus ihren Sockel ziehe und die RaspiRelais somit wieder Leerlauf schalten, dann geht wieder alles ohne probleme, ich verstehe also immer noch nicht wie ein Belasteter Relaiskontakt mehr Strom braucht als im Leerlauf :O


    Das Netzteil selbst das ich gerade verwende ist ein TELENOT NT400, gedacht für Alarmanlagen und Zutrittskontrollen, hat einen SVST-E und NOK-E Anschluss welche über 180kOhm vorwiederstand 12V Ausgeben, ich hab danach 30kOhm dann GPIO Pin dann 10kOhm und dann GND, einen Spannungsteiler gebastelt um die 12V auf ca. 1,8V zu bekommen, ist über 1,3V wird also noch als HIGH betrachtet, damit kann vom Netzteil die Akkustörung oder Spannungsversorgungsausfall (230V AC) ausgewertet werden, diese hatte ich dann auf 2 GPIO Pins angeschlossen, hier war ich mir nicht sicher ob ich nun den Netzteil 12V GND mit den GPIO GND verbinden soll oder nicht, ich hatte es dann verbunden.

    Wenn ich nun einen Testlauf durchgenommen habe wurden die beiden Störmeldungen kurz ausgelöst, spricht dafür dass irgendwo die Spannung zusammengefallen ist, die Frage ist nur ob beim Netzteil selbst oder beim Raspi intern ... werde das heute Abend weiter verfolgen...

  • Hallo

    Mit der I2C Adresse eines MCP23017 hatte ich vor einiger Zeit auch mal Probleme.

    Bei mir werkelt zwar ein D1 Mini aber die beiden 4.7K Widerstände an SDA und SCL sind wichtig.

    Auch der Reset Pin 18 muß beschaltet werden. Die Bilder zeigen das.


  • Noch aus der Hüfte geschossen...

    • Blockkondensator am MCP23017 angeschlossen?
    • GND-Leitungen soweit möglich sternförmig vom Netzteil zu den (Relais-) Lasten ziehen. Beim Durchschleifen der Spannungsversorgung von einer Last zur nächsten können bei Laständerungen Spannungsabfälle entstehen oder auch der GND wegdriften. Das könnte erklären, wieso eine über ein Relais geschaltete Last zu Controller-/Raspi-seitigem Fehlverhalten (aufgrund von Unterspannung) führt.
  • Blockkondensator NICHT angeschlossen, MCP steuert direkt die IN der Relais an, hätte da jemand einen geeigneten produktvorschlag?

    GND-Leitungen Sternförmig, werde ich umändern.

    Reset Pin ist mit +5V beschaltet.

    Was machen die 4k7 auf SCL SDA? rein zum verständniss?



    Nach meinem Sicherung geschossen vorfall hab ich die GPIO Pins durchgetestet, und habe definitiv 2 Stk abgeschossen an dennen jedoch nur die Wiegand Datenleitungen der Kartenleser angeschlossen waren..., es waren 2 Kartenleser mit 4 GPIO Pins jeweils D0, D1, von jedem Kartenleser hat es einen GPIO geschossen, habe ich umgeklemmt auf andere pins und läuft wieder, ich habe auch das beschreiben der register des mcp23017 via c++ in den griff bekommen, das problem ist zwar sicher noch vorhanden aber es läuft nun dennoch seit einigen Tagen stabil ohne ausfälle.

  • Was machen die 4k7 auf SCL SDA? rein zum verständniss?

    Die definieren die Hi-Flanke des Busses, da die I2c-Spec allein ein aktives Lo-Ziehen der Busteilnehmer definiert. Damit ist auch klar, das es in der Verantwortung des Schaltungsdesigners liegt, wie er die Werte der Pullups fuer sein konkretes Schaltungslayout bemisst. Die Werte hängen prinzipiell von der Buslast/kapazität ab, um die Spec hinsichtlich der Risetime (Flankensteilheit) zu erfüllen.

    Nachdem der Raspi mit (ich meine um die) 2,2k bereits relativ niedrige Pullups von Haus aus mit sich bringt, braucht es an dieser Stelle vermutlich keiner weiteren Pullups. Werden zu viele parallel beschaltet, dann ist der Widerstand in der Summe zu niedrig, damit die Busteilnehmer noch gültige Low-Signale erzeugen können. Häufig besitzen die billigen I2C-Chinamodule ihre eigenen Pullups, was dann dazu führt, das alles bis zum 3. oder 4. Modul funktioniert, beim 5. oder 6. Modul dann aber ungewöhnliche Busfehler auftreten, "obwohl man doch gar nix an der SW geändert hat".


    Kleine Nebenbemerkung: Die Resetleitung kann man auch (wie auch die Adressleitung) über 10k Pullups schalten. Das begrenzt den Strom - wird aber an der Problemursache nix ändern. Allerdings sind die Leitungen des MCP23017 nicht 5V tolerant, wenn die Versorgungsspannung nur 3,3V beträgt. Das sollte in jedem Fall geändert werden. Im Zweifelsfall könnte man noch über einen Umstieg zu einem MCP23018 nachdenken (der besitzt 5V tolerante IO Leitungen, womit sich auch das Pegelproblem bei den Relaisplatinen läsen würde)...