230V-Verbraucher an Relaiskarte stört Interrupt am Mega ?

Hallo, ich habe am Mega u.a. eine 4-fach Relaiskarte, ein 4x20 LCD und mehrere Sensoren (1W, I2C, serial) angeschlossen. Einen dieser Sensoren (Reed-Kontakt) frage ich über eine Interruptroutine am PIN 2 (int.0) ab, um keinen Impulsz zu verpassen. Je nach Zustand und Wert der Sensoren werden die Relais geschaltet. Solange an den Relais keine Verbraucher hängen, funktioniert alles prima. Die Relais werden korrekt geschaltet usw.

Jetzt habe ich das ganze in ein Gehäuse eingebaut und nun folgenden Effekt: Sobald ich mit den Relais einen 230V-Verbraucher schalte (Pumpe oder Glühlampe), wird bei den Schaltvorgängen auch der Interrupt ausgelöst. Kann ich hier mit Hard- oder Software den Interrupteingang noch irgendwie "abschirmen"? Größere Umbauten (Relaiskarte weiter vom Mega weg usw.) sind leider nicht mehr möglich.

Hardware: Der Reedkontakt schaltet +5V an den PIN2, dieser ist über einen Widerstand von 2K mit GND verbunden.

Software: //Reedkontakt pinMode(2, INPUT); digitalWrite(2, LOW); attachInterrupt(0, Vliesfilter_Interruptroutine, RISING);

(in der Interruptroutine wird nur eine globale Variable hochgezählt)

Für Ideen wäre ich sehr dankbar.

Viele Grüße, paulinchen

Induktive Verbraucher mit solchen Relais ist kritisch und führt nun mal zu solchen Problem (deine Pumpe). Wirk sich das schalten des Verbrauchers noch auf andere Sachen aus? Wenn nein, lass den Interrupt komplett weg. Oder aber setzte lediglich ein isr flag und filtere die Werte in deiner loop.

Ist das eine richtige Glühlampe oder eine Sparlampe? Letzteres kann viele Störungen durch Einstrahlung verursachen.

edit: Wie schnell musst du denn eigentlich zählen bzw wie lange steht dein Signal an?

Gruß

sschultewolter: Wenn nein, lass den Interrupt komplett weg. Oder aber setzte lediglich ein isr flag und filtere die Werte in deiner loop.

Was meinst Du damit? Ich darf halt keinen Impuls verpassen und da der Arduino auch als Webserver arbeitet, kann die Loop schon mal einige Sekunden dauern. Daher die Erfassung in der Interruptroutine. Geht das auch anders?

Hier http://forum.arduino.cc/index.php?topic=182767.0 geht es am Ende des Themas wohl um das gleiche Problem, allerdings ist mein Englisch nicht gut genug, um genau zu verstehen, wie die Kondensaturen an der Relaiskarte angeschlossen wurden?

Die zuverlässigste Lösung für dieses Problem sind SSRs (Solid State Relay)

Hier ist eigentlich alles erklärt.

http://www.mikrocontroller.net/articles/Relais_mit_Logik_ansteuern

Hallo,

im Artikel vom letzten Post stehts drin: Löschglieder. RC-Glieder, die man parallel zum Schaltkontakt des Relais schaltet. Da der Fehler bei dir nur auftritt, wenn du eine Last angeschlossen hast müßte das Problem damit zu beheben sein. Schau mal nach snubber network. Man kann die Dinger fertig kaufen (R und C in einem gemeinsamen Gehäuse)

Viele Grüße

heliosoph

Hallo, vielen Dank an alle Antworten.

Ich werde morgen mal etwas mit den "Snubber" RC-Glied experimentieren.

Würden denn auch Veränderungen an der Beschaltung des Interrupt-Pin des Arduino Sinn machen (Widerstand nach GND verkleinern, Kondensator nach GND, Änderung der Trigger-Flanke für den Interrupt) ?

Ich weiß nicht was für eine Relaiskarte du verwendest, aber sind dort nicht standartmäßig Löschglieder drauf?

Außerdem wäre noch interessant zu wissen ob dier Interrupt beim Einschalten der Last auslöst oder beim Ausschalten.

Gruß

Die Relaiskarte ist das übliche China-Shield. Die hat nur eine Freilaufdiode am Relais.

Der Interrupt wird bei der Pumpe sowohl beim Ein- als auch beim Ausschalten ausgelöst. Bei einer herkömmlichen Glühbirne nur beim Ausschalten.

paulinchen: Die Relaiskarte ist das übliche China-Shield. Die hat nur eine Freilaufdiode am Relais.

Der Interrupt wird bei der Pumpe sowohl beim Ein- als auch beim Ausschalten ausgelöst. Bei einer herkömmlichen Glühbirne nur beim Ausschalten.

Also Relais mit galvanischer trennung. Und ohne Zusatzbeschaltung auf der Kontakt Seite.

Übliche Probleme: Interruptleitung sehr hochohmig. Lichtbögen an den Relais Kontakten "funken" da rein. Störungsübertragung über die Versorgung. (mal den Arduino über Batterie betreiben)

Ich habe jetzt den Sketch so geändert, dass das Relais 1 min an ist, danach 1 min aus usw. Also so, dass oft ein Schaltimpuls erfolgt. Parallel zur störenden 230 V Luftpumpe habe ich ein RC-Glied angeschlossen. Damit konnte ich die Störimpulse am Interrupt-Eingang deutlich reduzieren. Ich habe im Moment bei etwa 50 Einschaltvorgängen noch 1 ausgelösten Interrupt. Ich habe auch etwas mit den Werten des RC-Glieds probiert, konnte allerdings keine Zusammenhänge erkennen. Einen Oszi habe ich leider nicht. Wie kann ich die optimalen Werte für das RC-Glied bestimmen? Sollte ich den C erhöhen, oder den R erhöhen usw. ? Wie könnte ich den Interrupteingang noch entstören, ich habe einen Widerstand von 2k nach GND und den Schalter nach +5V. Noch einen Kondensator vom Interrupt-Pin nach GND?