Fehlimpulse am GPIO vermeiden(8m Kabel)

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,
    ich kämpfe gerade mit einem kleinen Projekt, und die beim Raspberry dank der GPIO's prinzipell vorhandene Signalauswertung erweist sich als problematischer als erwartet....

    Ich habe zwei Fensterkontakte (Schliesser), das öffnen und schliessen soll im Raspberry protokolliert werden.
    Problem scheint zu sein, das diese Schalter 8m vom Raspberry entfernt sind und diese Kabel zum teil Parallel zu einem Stromkabel verlaufen. das läßt sich auch nicht ändern (Leerrohr).
    Beim betätigen von zwei verschiedenen Lichtschaltern werden "Signal" am Raspberry protokolliert, obwohl kein fenster geöffnte oder geschlossen wurde.

    Habe die GPIO's schon mit Pullup (und auch als Pulldown) -Widerstände (10k und auch 2.2k) versucht gene Fremdimpulse zu schützen, ebenso mit Kondensatoren zwischen dem Schalter (nah am GPIO) und zwischen Plus und Minus am GPIO. Bringt Besserung, aber noch immer kommen Störimpulse durch.

    Anbei eine Skizze (Pulldown-Variante).
    Was kann man sonst noch tun?

    Überlege schon, über die Schalter ein Relais zu schalten, welches dann nur echte Schalterbetätigungen an GPIO weiterleitet (und keine Störimpulse).

    Oder kann ich eine "Logic" per Software hinterlegen, welche solche Störimpulse erkennt und "ausfiltert"?

    Erkennung erfolgt über Interruptsteuerung, sieht aktuell so aus:
    ...
    GPIO.add_event_detect(Tur_01, GPIO.BOTH, callback=intTuer_01, bouncetime=100)
    ...

    Sollte ich von "GPIO.BOTH" umschwenken auf zwei getrennte Erkennungen der Fensterstellung (HIGH und LOW)? Also weg von der Flankenerkennung auf statische Erkennung des anliegenden Signals? Welche ich dann zur Sicherheit nach 2s nochmals abfragen kann?
    Oder läßt sich das auch mit "GPIO.BOTH" per Software besser erkennen/lösen?

    markus

  • Servus Markus,
    das ist oft eine mühselige Fummelei, Störimpulse rauszufiltern.
    Mit dem Pullup kannst Du imho noch bis ca. 1k runtergehen ... das sind dann ca. 3 mA ... kleiner sollte er allerdings nicht werden.
    Ein geschirmtes Kabel ( (z.B. Netzwerkkabel) oder wenigstens eine verdrillte Leitung wäre evtl. auch einen Versuch wert.
    Ansonsten vielleicht mal drüber nachdenken Levelshifter einzusetzen und das Signal auf 5V anheben und am Pi wieder auf 3V3 runterkonvertieren.

    Mehr fällt mir da jetzt aber im Moment auch nicht ein ...

    //EDIT: Ich würde da übrigens jeweils nur auf FALLING_EDGE/RAISING_EDGE den Trigger setzen ... hatte ich ganz vergessen zu erwähnen ...

    cheers,
    -ds-

  • Ich würde noch zw. GPIO10 und GND einen 10kOhm-Widerstand verbauen und lieber den 2,2kOhm-Widerstand verringern, wenn nötig.
    EDIT: Moment mal, den 2,2kOhm könnte man auch ganz weglassen und direkt mit 3,3V an den Schalter gehen, solange der GPIO als immer ein Input ist.
    Abgesehen vom Kabel natürlich, ein CAT5-6 Netzwerkkabel wäre schon gut.

  • Den 2.2k weglassen?
    Das ist doch der Pullup-Widerstand für den GPIO.
    Wenn ich den weglasse, dann hat der GPIO doch (je nach Schalterstellung) keinen Gegenpotential und spielt "Antenne" (Fehlimpulse ....). Bzw. wenn ich den durch eine Drahtrücke ersetze, bibts ja einen Kurzschluss bei geschlossenem Schalter ....

  • Die Schaltung ist unvollständig, versuchs mal damit: http://www.ne555.at/2014/index.php…-kontaktprellen

    R1 = 1k .. 3k3
    R2 = 10k .. 33k
    C1 = 10n .. 100n
    Die Schmitt-Trigger 7414 kannst Du Dir sparen, der Raspi hat Schmitt-Trigger-Eingänge.

    R1 ist der Pull-Up, R2 und C1 bilden einen Tiefpass. Wenn Du R2 beschaltest, darfst Du den internen Pull-Up des Raspi für diesen GPIO nicht aktivieren.

    Für lange Leitungen hänge ich die Taster an 12V und schalte über einen Optokoppler. Damit ist die Tasterleitung quasi eine Stromschleife und störunempfindlich.


  • Die Schaltung ist unvollständig, versuchs mal damit: http://www.ne555.at/2014/index.php…-kontaktprellen

    R1 = 1k .. 3k3
    R2 = 10k .. 33k
    C1 = 10n .. 100n
    Die Schmitt-Trigger 7414 kannst Du Dir sparen, der Raspi hat Schmitt-Trigger-Eingänge.

    R1 ist der Pull-Up, R2 und C1 bilden einen Tiefpass. Wenn Du R2 beschaltest, darfst Du den internen Pull-Up des Raspi für diesen GPIO nicht aktivieren.

    Für lange Leitungen hänge ich die Taster an 12V und schalte über einen Optokoppler. Damit ist die Tasterleitung quasi eine Stromschleife und störunempfindlich.


    Deine Widerstandswerte sind ja höher, hmmm, ist es nicht besser, die Pullup/Pulldown kleiner zu halten, damit der GPIO-Eingang nicht auf "schwache" Fehlimpulse reagiert?

    Optokoppler hört sich gut an, ähnlich wie meine angedachte (altmodische) Version mit Relais ;)
    Hab keine Erfahrung mit Optokopplern, welches Bauteil und wie würde da eine "einfache" Beschaltung ausschauen?

  • An den Schließern eine höhere Spannung (einer Quelle niedrigen Innenwiderstandes) anlegen und dann direkt vor dem GPIO per Spannungsteiler herunterzuteilen ist sicher schon mal gut. Bei jedweder Filterung vergiß nicht, daß höherfrequente Störungen (über die Qualität der Störung hast Du bislang noch nix geschrieben) Kondensatoren mit niedrigen ESR-Werten (parasitärer Serienwiderstand) bedingen. Notfalls sind also 2 Kondensatoren parallel zu schalten. Wobei der "übliche" 100nF z.B. als X7R-Typ ausgeführt sein könnte. Ansonsten hast Du ja auch schon genug gute Hinweise erhalten...

  • noch leichter

    Stromschleife (10-)20mA zum Kontakt, am und dicht am PI Optokoppler die (10-)20mA über Vorwiderstand an die IR Diode, den Opto Trasi mit 1k pullup an GPIO

    mit 10-20mA Schleifenstrom kommt man ungestört Kilometer weit wussten schon die ollen Telekomiker.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Hab wenig/keine Erfahrung mit Optokopplern, welcher wäre da zu empfehlen? Evtl. auch direkt 2 (oder 4?) in einem Gehäuse?
    Wie müßte so eine Schaltung dann ausschauen ? ;)

  • wieviel brauchst du?
    Es gibt
    single, double & quad Optos als DIL und SMD für beide gibt es Laborkarten zum Aufbau, für ein paar reed Kontakte ist keine besondere Geschwindigkeit nötig, suche dir passende (die du löten kannst und magst) mit Datenblatt und dann schauen wir weiter.
    Reedkontakte brauchen zur Selbstreinigung auch einen Mindeststrom der bei vielen evtl. nicht mehr aus dem PI genommen werden sollte, je nach andere Verbraucher.

    Da muss man rechnen das die übliche 1A PI B alt oder 2,5A PI2/3 nicht überschritten werden.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (21. März 2017 um 10:28)

  • Bei der Suche nach Optokopplern-Schaltungen bin ich wieder auf die Variante mit Reed-Relais gestoßen, die ja auch eine sicherer Impulsübertragung erlauben würden (höhrer Strom).
    http://www.pollin.de/shop/dt/ODEyOT…20_053_5V_.html
    Schutzdiode ist auch schon drin.
    Davon drei Stück, soviel Eingänge könnten es werden die ich nutzen will ....

    Oder spricht konkret was gegen so eine "alte" Lösung? Kontaktprellen kann ich ja am GPIO abfangen (debounce), Schaltgeschwindigkeit reicht ja auch (Fensterkontakte ;) ), 5V habe ich sowieso am USB Netzteil, ....

  • Ich mag diese Konstellation nicht,

    gehe ich für sicheren Strom 10-20mA ohne Optokoppler per GPIO an den PI und irgendein Programm (oder Absturz) setzt die GPIO um auf out oder low wird der GPIO Strom zu groß und kann die Ports beschädigen

    BTW was wolltest du sagen? ein Reed Relais ist kein Reed Kontakt!

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (21. März 2017 um 11:08)

  • Ich meine ein Reedrelais, welche die Spule und Reed-Kontakte in einem Gehäuse haben.
    Die Spule wird von einer extern Spannungsquelle bespeist und baut ein Magnetfeld auf, wenn Fensterkontakt geschlossen wird.
    Die (potentialfreien) Kontakte (Schliesser) des Reed-Relais schliessen doch nur den GPIO zu Masse kurz (GPIO ist zuvor mittels Pullup 5k auf High gesetzt). Da kann doch nie ein Port beschädigt werden (oder?).

  • ich verstehe dich gerade nicht wirklich

    Am Fenster ist es doch oft so,

    Fenster hat nur einen Magneten und keine Kabel die beim öffnen beleidigt werden bis zum Kabelbruch!

    Dieser Magnet schliesst oder öffnet einen Reed Kontakt mit Kabel der fest am Rahmen angebaut ist wo die Kabel nie bewegt werden und so lange leben können.

    Was soll da ein Reed Relais???????

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

  • Der Kontakt am Fenster schliesst den Stromkreis (= Fenster auf) und das Reed-Relais (welches sich neben dem Raspi befindet), bekommt Strom. Der Kontakt vom Reed-Relais gibt "Hight" auf den GPIO (der zuvor per Pulldown auf masse gezogen war).
    Somit hat die lange, störanfällige Leitung keinen direkten Kontakt zum Raspi! GPIO am Raspi hat nur 10cm Kabel bis zum Kontakt des Reed-Relais.
    Das lange Kabel mit Schalter schaltet das gegen störimpulseunempfindliche Reed-Relais!

    Einmal editiert, zuletzt von linux-try (21. März 2017 um 15:45)

  • OK so gehts auch, optimal mit 1k Ohm pullup und nach GND schalten und auf low abfragen.

    Das "Problem" der mangelhaften Selbstreinigung bei "nur" 3,3mA Strom bleibt.

    lasst die PIs & ESPs am Leben !
    Energiesparen:
    Das Gehirn kann in Standby gehen. Abschalten spart aber noch mehr Energie, was immer mehr nutzen. Dieter Nuhr
    (ich kann leider nicht schneller fahren, vor mir fährt ein GTi)

    Einmal editiert, zuletzt von jar (21. März 2017 um 16:13)


  • Mal von der Schaltung abgesehen, kostet ein Optokoppler nur ein Bruchteil von dem, was man für ein Reedrelais bezahlt und das Ergebnis ist das Gleiche.


    Glaub ich, aber Reed-Relais habe ich schon früher gerne verbaut ;)
    Wie würde denn eine "Schaltung" mit Optokoppler für ein Fensterkontakt aussehen, ein passender Link würde ja genügen zum abschätzen des Aufwandes .... ;)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!