Raspi GPIO im Interruptbetrieb sehr störanfällig

Begonnen von ThomasFh, 01 Oktober 2021, 12:44:41

Vorheriges Thema - Nächstes Thema

ThomasFh

Hallo,

Meine Raspis spielen Interruptmäßig verrückt:


Raspberry Pi Model B, 512MB RAM Rev. 2 (2 Stück getestet)

Ausgangslage:

Raspi erstmal ohne äußere Beschaltung: lediglich ein Öffner-Taster an GPIO2 (Pin 13) und GND
-Pullup 1k Ohm zwischen Pin13 und +3.3V
-Zusätzl. 3k Ohm + 10nF + 50pF  zwischen Pin13 und GND
-Zusätzlich 1mF Elko GND/+3.3V
-Zusätzlich 1mF Elko GND/+5V
-Origianl Raspi 3 Netzteil mit +5.1V (diverse Netzteile probiert)

Wenn der Öffner geöffnet ist, dann ist der Eingang auf High bei 2.2V
  --> alles ab 1.3V ist doch high?


Problem:

Werden in derr Nähe Verbaucher geschaltet (Wallbox etc) geht die GPIO manchmal auf LOW.
D.h., es gibt einen Interrupt trotz niederohmigen Eingangs von 3KOhm und NF sowie HF Kondensator. Von der niederohmigen Eingangsleitung kann der nicht kommen.

Es reicht hier auch schon, wenn ich mit einer Messleitung (ein Ende ist lose) an Masse tippe (NIC oder USB Buchse), um den Interrupt auszulösen!

Die 5.V und die 3.3V an der GPIO habe ich auch schon mit 1mF Elkos gepuffert und diverse Netzteile probiert.

Bin quasi am Ende mit meinem Latein. Falls jemand einen Hardware-Tipp hat, wäre ich dankbar.

Von Interrrupt auf Polling umstellen möchte ich erstmal nicht.


Danke vorab.
EM1010PC, EM1000WZ, WS300PC, S300TH, Fritz Dect 200, Victron MPII, Cerbo GX, US3000C

herrmannj

hänge mich zum mitlesen an: habe einen ähnlichen (gleichen?, für mich unerklärlichen) Effekt (Raspi 3b, GPIO).

Frank_Huber

#2
Ich taste meine GPIO gegen 0V.
Pull up 10K gegen 3v3. (sonst keine Beschaltung)
debounce auf 30ms eingestellt
keine probleme feststellbar.

EDIT:
Die Kabel zu den Tastern (4x2x0.6 I Y ST Y) sind natürlich geschirmt und einseitig geerdet.

Der Idealfall ist es wohl wenn man noch Optokoppler vor die GPIO setzt. da bin ich seit Jahren daran eine Platine zu entwerfen. aber die Zeit... Und da es stabil läuft hab ich da auch keine Druck.

ThomasFh

Hallo Frank, ich taste natürlich auch gegen Masse
Mein debounce ist 100

Interrupt: both

Wie ist der Interrupt bei Dir?
EM1010PC, EM1000WZ, WS300PC, S300TH, Fritz Dect 200, Victron MPII, Cerbo GX, US3000C

Frank_Huber

Das ist meine Standart Definition.

defmod GPIO_IN_16 RPI_GPIO 16
attr GPIO_IN_16 active_low yes
attr GPIO_IN_16 debounce_in_ms 20
attr GPIO_IN_16 direction input
attr GPIO_IN_16 interrupt both

ThomasFh

#5
Hast Du einen Öffner verbaut oder einen normalen Taster? Wegen active_low: yes

meine sieht so aus (ich hatte zuerst mit dem interenen Pullup getestet, der ist noch aktiv)


define TorOeffnerKontakt RPI_GPIO 27
attr TorOeffnerKontakt direction input
attr TorOeffnerKontakt interrupt both
attr TorOeffnerKontakt pud_resistor up
attr TorOeffnerKontakt debounce_in_ms 100
attr TorOeffnerKontakt devStateIcon on:fts_door_right_open@red off:fts_door_right@green
attr TorOeffnerKontakt active_low no
attr TorOeffnerKontakt room GPIO


EM1010PC, EM1000WZ, WS300PC, S300TH, Fritz Dect 200, Victron MPII, Cerbo GX, US3000C

herrmannj

#6
na, ich befürchte so einfach wird das nicht. Mein Setup wäre 10k pullup extern, kein interner pullup, active low. Der Eingang ist via optocoupler und einem sehr kurzen Kabel (max 10cm) angebunden.

Das Ding lief auf meinem Schreibtisch problemlos Tage-Wochen, dann habe ichs in den Keller getragen und zusätzlich mit der Lüftung verbunden (ebenfalls OC, also galvanisch getrennt) und sobald die Lüftung läuft habe ich da reproduzierbar "Müll" (sehr kurze impulse) an GPIO (IRQ). DER Gpio wiederum hat aber überhaupt nix mit der Lüftung zu tun (ist ein 50Hz Netzfrequenz Sensor).

Ich sehe keine Möglichkeit für Masseschleifen, das Netzteil ist galvanisch getrennt, alle in und out hängen an OC, passiert trotzdem. Ich konnte die Störungen nicht mal auf dem oszio sehen. Das müssen elektrische Einstrahlungen oder sowas sein. Deckt sich auch mit Deiner Erfahrung: Hier Batteriebetriebenes Oszi (kein Netzteil!), ich muss nur mit dem Masse kabel an die Masse vom PI gehen, schon ändert sich das Bild ...

Frank_Huber

Zitat von: herrmannj am 01 Oktober 2021, 14:02:13
na, ich befürchte so einfach wird das nicht. Mein Setup wäre 10k pullup extern, kein interner pullup, active low. Der Eingang ist via optocoupler und einem sehr kurzen Kabel (max 10cm) angebunden.

Das Ding lief auf meinem Schreibtisch problemlos Tage-Wochen, dann habe ichs in den Keller getragen und zusätzlich mit der Lüftung verbunden (ebenfalls OC, also galvanisch getrennt) und sobald die Lüftung läuft habe ich da reproduzierbar "Müll" (sehr kurze impulse) an GPIO (IRQ). DER Gpio wiederum hat aber überhaupt nix mit der Lüftung zu tun (ist ein 50Hz Netzfrequenz Sensor).

Ich sehe keine Möglichkeit für Masseschleifen, das Netzteil ist galvanisch getrennt, alle in und out hängen an OC, passiert trotzdem. Ich konnte die Störungen nicht mal auf dem oszio sehen. Das müssen elektrische Einstrahlungen oder sowas sein. Deckt sich auch mit Deiner Erfahrung: Hier Batteriebetriebenes Oszi (kein Netzteil!), ich muss nur mit dem Masse kabel an die Masse vom PI gehen, schon ändert sich das Bild ...
Hast Du es mal mit einem geerdeten Metallgehäuse für den PI versucht?
klingt als ob dir di Störungen über die Luft in die CPU strahlen.

ThomasFh

#8
ich habe schon die Masse vom Pi an den Schutzleiter gehängt in meiner Not ;-(.
brachte auch nichts.

Das Irre ist ja schon, dass der Interrupt auslöst, wenn ich mit einem losen Messgerätekabel drauf gehe.
Geschirmte Kabel muss ich noch versuchen ..

Auf meinem Rigol Speicheroszi sieht man schon enorm kurze hohe peeks von +2V bis -2V auf dem Interrupteingang trotz meiner Kondensatormimik.

Interessant wäre noch, welche Raspis Ihr einsetzt?
EM1010PC, EM1000WZ, WS300PC, S300TH, Fritz Dect 200, Victron MPII, Cerbo GX, US3000C

herrmannj

#9
Zitat von: Frank_Huber am 01 Oktober 2021, 14:10:20
Hast Du es mal mit einem geerdeten Metallgehäuse für den PI versucht?
klingt als ob dir di Störungen über die Luft in die CPU strahlen.
yepp, sowas in der Art habe ich im Verdacht. Ne, Metallgehäuse und wirklich Masse nochmal alles kontrollieren, evtl dickere Massekabel (wobei, ausreichend dimensioniert sind die..), das alles steht noch aus.

Ich habe das per Software gelöst, alles was unter 5ms ist (erwartet wird 10ms) filtere ich raus, das funktioniert 1a. Nichts desto trotz wollte ich aus Interesse auch nochmal schauen ob ich die Ursache finde...

@Thomas: Raspi 3b

edit
Masse vom Pi an Schutzleiter, da wäre ich vorsichtig. Metallabschirmung geerdet dürfte zielführender sein

edit2:
ZitatAuf meinem Rigol Speicheroszi sieht man schon enorm kurze hohe peeks von +2V bis -2V auf dem Interrupteingang trotz meiner Kondensatormimik.
hmm. -2v auf dem GPIO ist der Lebenserwartung de pi vmtl nicht zuträglich. Muss ich vlielleicht auch hier nochmal genauer messen....

Frank_Huber

wenn es auf den Chip direkt einstrahlt wird vermute ich nur das Metallgehäuse helfen.

Ich habe ein ähnliches Problem mit einem ESP32 / Meanwell Netzteil.
Das Meanwell ballert so stark in die Luft dass der Analog-Eingang flattert.
über den Winter schau ich mir das auch genauer an, wird aber wohl auch eine Abschirmung werden.

ThomasFh

#11
Zitat von: herrmannj am 01 Oktober 2021, 14:59:16

Ich habe das per Software gelöst, alles was unter 5ms ist (erwartet wird 10ms) filtere ich raus, das funktioniert 1a. Nichts desto trotz wollte ich aus Interesse auch nochmal schauen ob ich die Ursache finde...


Hallo Herrmann,

könntest Du Deine Softwarelösung, soweit das mit fhem gemacht wird, hier kurz posten?

Meine Idee wäre die folgende:

Wenn das notify für den Interrupt zuschlägt, ein sleep von einer Sekunde abzuwarten und dann den state des Eingangs nochmal abzufragen.
Allerdings bin ich mir da nicht sicher, ob das überhaupt klappt, wenn der nächste Interrupt innerhalb der sleep Sekunde zuschlägt.
D.h., ich habe zu wenig Ahnung, um abzuschätzen, ob sich da nicht alles verhakelt ..

Danke ..
EM1010PC, EM1000WZ, WS300PC, S300TH, Fritz Dect 200, Victron MPII, Cerbo GX, US3000C

crusader

Zitatna, ich befürchte so einfach wird das nicht. Mein Setup wäre 10k pullup extern, kein interner pullup, active low

Kann ich bestätigen.

Das Problem bei Netzstörungen ist i.A., dass diese über die üblichen Schaltnetzteile auf die DC-Seite gelangen, wo sie zu niederohmig sind, um sie mit Elkos abzufiltern.
Über Pullups geraten sie dann auf hochohmige GPIOs.

Meine Lösung:

Eingangs-Signal (Taster o.ä.) über ein ausreichend dimensioniertes RC-Filter auf den Eingang eines Schmitt-Triggers, der mit 5V versorgt ist.
Ausgang dann niederohmig auf den GPIO.



ThomasFh

@All,

falls jemand eine Idee hat, wie man das softwaremäßig löst bei Interruptsteuerung, einfach hier rein posten.

Bei mir ist es so, dass pro Tag nur ein falscher Impuls kommt. D.h., ich müsste daher nur eine Sekunde nach dem Event prüfen, ob nicht noch ein zweites gleichartiges Event gekommen ist (dann wäre alles OK),
weiß aber nicht, wie ich das abfragen kann.
EM1010PC, EM1000WZ, WS300PC, S300TH, Fritz Dect 200, Victron MPII, Cerbo GX, US3000C

herrmannj

#14
Zitat von: ThomasFh am 01 Oktober 2021, 16:45:56
Hallo Herrmann,

könntest Du Deine Softwarelösung, soweit das mit fhem gemacht wird, hier kurz posten?

Meine Idee wäre die folgende:

Wenn das notify für den Interrupt zuschlägt, ein sleep von einer Sekunde abzuwarten und dann den state des Eingangs nochmal abzufragen.
Allerdings bin ich mir da nicht sicher, ob das überhaupt klappt, wenn der nächste Interrupt innerhalb der sleep Sekunde zuschlägt.
D.h., ich habe zu wenig Ahnung, um abzuschätzen, ob sich da nicht alles verhakelt ..

Danke ..
Gern. Das hilft Dir vmtl nur wenig weil das ausserhalb fhem ist. Es geht um die Messung der Netzfrequenz: https://forum.fhem.de/index.php/topic,121669.0.html
Hier ist die letzte aktualisierung der Software (raspi) dazu (Antwort #265): https://forum.fhem.de/index.php/topic,121669.265.html

Unabhängig von dieser konkreten Lösung (des problems) ist der Zustand ja eigentlich nicht tolerierbar. Gerade wenn Du schreibst dass da +/- 2V auf den GPIO einwirken (bei 3.3V GPIO quasi immens viel). Wir sind ja nicht die ersten die mit GPIO arbeiten, ich glaube hier muss man die Ursache genau verstehen und das an der Wurzel lösen.

Die Erklärung mit den Impulsen die übers Netzteil wandern (fürs Protokoll: ich habe, Stand heute, keine bessere) ist für mich nicht komplett befriedigend. Das würde ja bedeuten das man auf der 5V Rail des Netzteils +/-2V Spikes finden müsste. Hier sind offensichtlich weitere Untersuchungen notwendig