RPi GPIO-Relay-Interferenz mit Eingang

Ich versuche, ein RPi3 zu verwenden, um eine Lampe mit diesem Relaismodul auszugeben / zu steuern.

Ich möchte auch von einem Taster und einem Schalter lesen können.

Das Problem, das ich habe, ist, dass es so aussieht, als würde das Schalten des Relais Rauschen in den GPIO-Eingang einführen und Fehlalarme erzeugen.

Das RPi und das Relaismodul befinden sich in einem Outdoor-Gehäuse von 190 mm x 145 mm x 140 mm. Sie haben recht zueinander.

Ich habe versucht, ein Halbleiterrelais zu verwenden, und das hat das Problem der Interferenz gelöst, aber ich würde wegen der Größe und des Preises lieber ein herkömmliches Relais verwenden.

Ich habe versucht, das vom GPIO aufgenommene Rauschen mit einem billigen digitalen USB-Oszilloskop von Hantek zu sehen, konnte aber leider nichts sehen. Ich warte immer noch darauf, es mit meinem analogen Oszilloskop zu überprüfen. Außerdem denke ich darüber nach, abgeschirmte Kabel vom Taster und Schalter zum GPIO zu versuchen und auch das Relaismodul in geerdetes Metallgeflecht zu wickeln, um einen Faraday-Käfig zu schaffen.

Bis jetzt habe ich versucht, einen Tiefpassfilter für jeden Eingang zu setzen.

Die erste Schaltung, die ich ausprobiert habe, war: C1 - 10n und 100n

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Dann habe ich einen Tiefpassfilter ausprobiert:
R1 - 100 und 1k
C1 - 1u, 10n, 100n

schematisch

Simulieren Sie diese Schaltung

Ich habe es auch mit ein- und ausgeschaltetem GPIO-Pull-up versucht

Jedenfalls verbessert keiner von ihnen das Ergebnis.

Auf der Softwareseite verwende ich Python, RPi.GPIO event_detect; Ich habe versucht, die Bounce-Zeit zu erhöhen und eine Verzögerung nach der Ereigniserkennung einzufügen, um von Menschen generierte Ereignisse zu "filtern", aber dies funktioniert nur für den Fall der Drucktaste, nicht für den Schalter.

Jeder Rat wäre willkommen.

UPDATE : Dieses Relaismodul fügt viel Rauschen ein, ich habe es mit dem RPI HAT-Slice von Realy versucht und derselbe Code hat gut funktioniert, konnte bei einem schnellen Testlauf alle Fehlalarme erkennen.

das ist der Code:

#!/usr/bin/python


import RPi.GPIO as GPIO
import time

GPIO.setwarnings(False)

GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.OUT)
GPIO.setup(26, GPIO.IN, pull_up_down=GPIO.PUD_UP)


GPIO.setup(20, GPIO.IN, pull_up_down=GPIO.PUD_UP)

GPIO.setup(23, GPIO.IN, pull_up_down=GPIO.PUD_UP)


def read2(channel):
    print "GPIO 2"

def read20(channel):
    print "Button"

def read23(channel):
    print "Switch"


if __name__ == '__main__':

    GPIO.add_event_detect(26, GPIO.BOTH, callback=read2, bouncetime=300)
    GPIO.add_event_detect(20, GPIO.BOTH, callback=read20, bouncetime=300)
    GPIO.add_event_detect(23, GPIO.BOTH, callback=read23, bouncetime=300)

    while True:
        pass

Unabhängig davon suche ich immer noch nach Möglichkeiten, dieses Board zu verwenden.

Versuchen Sie, dieses Relais direkt vom Raspberry Pi aus zu steuern? Jedenfalls verstehe ich kaum, was und warum Sie versuchen zu tun, und was das Problem ist
Obwohl es keine strikte Entprellung ist, da die Ursache kein Kontaktprellen ist, könnten Sie versuchen, den Eingang nach jeder Änderung des Relais eine halbe Sekunde lang einfach zu ignorieren. Es wäre jedoch sinnvoll, elektrische Effekte zu unterdrücken, da sie die Logikschaltung kumulativ beschädigen könnten, selbst wenn sie sie nicht sofort zerstören.
Es ist eine gute Idee, den Eingang zu ignorieren, während der Ausgang umgeschaltet wird. Ich werde es versuchen.
Ich weiß nicht, wie ich das mit Events umsetzen kann, ich muss darüber nachdenken.
@AndreyPro - Ja, ich versuche, das Relais direkt vom Rpi aus zu steuern, was gut funktioniert. Nur dass dadurch die allgemeine Funktionalität meiner Anwendung beeinträchtigt wird.
Zuerst muss ich verstehen, was "allgemeine Funktionalität Ihrer Anwendung" ist. Ich kann deinen Curcuit nicht nachvollziehen.
Im Allgemeinen lese ich Taster und Schalter und schalte dementsprechend die Lampe mit der auf dem Beitrag angegebenen Relaisplatine ein. Es gibt einen Link, der die betreffende Platine zeigt. Das Diagramm zeigt nur die "Schaltung", die für die Eingabe und nicht für die Ausgabe verwendet wird. Ausgang (Relais) ist ein einfaches Kabel, das von einem GPIO zum IN-Pin der Platine/des Moduls führt. Plus VCC und GND. Lassen Sie mich wissen, wenn Sie weitere Fragen haben. Danke.
Erwägen Sie die Verwendung eines Relais mit Isolationsfunktion, um zu vermeiden, dass Geräusche von der Relaisspule auftreten. Es gibt billigere Relaismodule, die Relais mit Ausgangstrennung enthalten.
@PrasanDutt Könnten Sie mir bitte zeigen, was Sie mit Relais mit Ausgangsisolierung meinen?
@PrasanDutt - Im Grunde das Realy, das ich verwende. Hast du meinen Beitrag eigentlich gelesen? Gibt es einen Link zu demselben Modul? Ich bin allerdings etwas billiger ... FYI, der Optokoppler verhindert nicht, dass Rauschen in den GPIOs-Ausgang gelangt.

Antworten (4)

Sie sollten in der Lage sein, Ihren Schalter in Software zu entprellen. Es ist immer eine gute Praxis, den Eingang mit einem Widerstand von etwa 10 kOhm in die entgegengesetzte Richtung Ihrer Schalteraktion zu "ziehen".

In Bezug auf die Relaisschalttransienten scheint es, dass es Überspannungsdioden über den Relaisspulen gibt. Ich würde also versuchen, einen 100-uF-Kondensator oder mehr direkt über die Stromversorgungsanschlüsse der Relaisplatine zu legen. Dies hilft, die 5-Volt-Versorgung der Platine zu "halten", wenn das Relais erregt ist.

Wollen Sie eine Kappe zwischen vcc (3.3) und GND der Relaisplatine setzen? Offensichtlich kommen beide vom RPi ... auch das Relais ist aktiv niedrig, ich weiß nicht, ob das Auswirkungen hat.
Auf dem Debounce-Schalter per Software meinen Sie vermutlich so etwas wie das Speichern des vorherigen Werts des Schalters, sehen Sie, wenn er sich ändert, warten Sie ein paar ms und ergreifen Sie dann Maßnahmen. richtig?
Ja, ich würde eine Kappe an der Relaisplatine empfehlen, wie Sie sie beschreiben. Es bietet eine lokale Energiespeicherung, sodass das Einschalten des Relais nicht den Spitzenstrom durch den Bus ziehen muss.
Sie haben das Software-Entprellkonzept richtig. Eine Wartezeit von 50–75 ms ist normalerweise gut. Wenn Sie es zu hoch machen, wird der Benutzer das Gefühl haben, dass es nicht reagiert, und wenn Sie zu niedrig sind, können Sie mehrere Auslöser bekommen.
Ich vermute, dass dieses Relais "mehr als üblich" EMI einfügt, da ich es mit RPi wirklich HATs mit anderen Relais versucht habe und dieses Problem nicht erzeuge. Ich werde später einen Test durchführen, wenn ich von der Arbeit am Pi HAT zurückkomme, um zu sehen, ob es tatsächlich weniger ist laut (EMcally sprechen)
Ich frage mich auch, was Sie mit Ihrem Kommentar zum "Ziehen" gemeint haben, und zwar in Bezug auf das 1. Diagramm (dort habe ich die internen IC-Pullups verwendet) oder das 2. Diagramm (erhöhen Sie die Größe des Pullups) oder in Bezug auf meinen Kommentar, mit dem ich es versucht habe Klimmzüge ein- und ausschalten, wobei ich IC-Klimmzüge für das 2. Diagramm meinte. Danke
Wenn Sie interne Klimmzüge haben, sollte das ausreichen.
RPi Relat HAT das gleiche Problem

Ich stand vor genau dem gleichen Problem und kurz bevor ich wahnsinnig wurde, fand ich die Ursache und die Lösung.

Ihr Problem ist, dass die Flankenerkennung sehr, sehr, sehr, sehr empfindlich auf Spannungsspitzen reagiert. Wahrscheinlich werden Sie auch dann falsche Erkennungen sehen, wenn Sie andere Geräte in Ihrem Haus ein- oder ausschalten.

Um dieses Problem zu lösen, fügen Sie einfach eine Ruhepause von 10 ms in Ihre Callback-Definitionen ein und lesen Sie den Pin-Status erneut. wenn immer noch gleich als Aktion ausführen, sonst war es nur ein Spike. Kondensatoren können helfen, müssen aber speziell ausgelegt werden, damit das Timing perfekt ist, außerdem haben sie ein unterschiedliches Lade- und Entladeverhalten, also ist das ziemlich schwierig!

Bitte werfen Sie einen Blick auf: https://www.raspberrypi.org/forums/viewtopic.php?t=134394 für einige wirklich richtige Informationen! Hoffe es wird dir gelingen!

Danke, ich wollte die Verwendung von "delayed check" vermeiden. Ich habe die falsche Erkennung beim Ein- und Ausschalten von Geräten in meinem Haus erlebt. Besonders Dinge mit Heizungen und Motoren ... der Ofen war wunderschön ... Danke.

Ich bin mir nicht sicher, ob es zutrifft, aber es gibt mehrere mögliche Probleme mit diesen Relais.

  1. Sie haben eine 5-V-Spule und erfordern daher eine Pegelverschiebung von RPis 3,3-V-GPIO.
  2. Der Spulenwiderstand beträgt nur 70 Ohm, was dazu führen würde, dass viel Strom von den GPIO-Pins gezogen und möglicherweise zerstört wird. Dies könnte zusammen mit p gelöst werden. 1
  3. Ein Relais benötigt eine Flyback-Diode, um GPIO-Pins vor potenziell zerstörerischer EMF zu schützen.

Sofern das Relaismodul sie nicht vorsieht (konnte das Moduldatenblatt nicht finden), müssen Sie dies selbst tun. Da das Modul nun für Arduino ausgelegt ist, das AFAIK 5 V GPIO hat, besteht eine hohe Wahrscheinlichkeit, dass mindestens p. 1 ist vor Ort. Das heißt, das Modul erwartet 5 V als Steuerspannung und der Versuch, es mit 3,3 V RPi GPIO zu steuern, führt zu einem instabilen Betrieb.

Ich glaube, dass das Board mit einer Dämpfungs-/Flyback-Diode geliefert wird, ich habe den Wiederverkäufer gebeten, einige Unterlagen bereitzustellen. Ich verwende die 5V vom Pi.
Der RPi GPIO hat 3,3 V, oder meinst du, du machst Level-Shift? Es ist schwer, etwas ohne Datenblatt oder zumindest einen Schaltplan der Platine zu beweisen.
Oh, ich verstehe, was du meinst, ich dachte, du meinst Macht. Da RPi auch einen 5-V-Stromanschluss hat. Denken Sie, wenn ich einen Transistor über GPIO ein- und ausschalte und vom RPis 5V ausgebe, könnte dies das Problem lösen?

Endlich löste eine 100uf-Kappe auf der Relaisplatine zwischen VCC und GND die Probleme mit Fehlalarmen.

Keine Ebenenverschiebung erforderlich.

Dank an alle.

UPDATE : Fehlalarm! habe ohne Last (LAMP) getestet, es funktioniert nicht mit dem Relaismodul oder RPi HAT.

Ich fange an zu glauben, dass ich darauf aus bin, etwas Unmögliches zu tun. Ich denke, ich habe nur noch die Optionen von SSRs und / oder Software-"Entprellen" übrig ...