Go Down

Topic: SOLVED: Relais-Problem (SaintSmart) mit 3-Wege-Ventil (Read 5759 times) previous topic - next topic

michael--g

Jul 26, 2013, 12:47 pm Last Edit: Aug 10, 2013, 09:51 am by michael--g Reason: 1
Hallo,

kurz und schmerzlos zum Problem mit meiner verzweifelten Bitte um Tipps:

Ausgangssituation
Mein Mega-Arduino steuert eine Heizungsanlage; das geht über I2C und einen Portexpander, auf dem ein PCF8574 werkelt.
Dieser sendet mein Byte (8 Bits) auf eine Relaiskarte, die wiederum Ventile und Pumpen bedarfsgerecht an- und ausschaltet.

Nach einigen Problemen mit der Abschirmung des Datenkabels zum I2C-LCD-Display fünf Meter weiter, habe ich dieses im Abstand zu Stromleitungen verlegt und damit die oft auftretenden Probleme mit einem fehlgesteuerten LCD (Müll im Display) beseitigt.

Die Anlage läuft astrein - leider nur fast.

Im Sommer kommt ein 3-Wege-Ventil zum Einsatz. Bei seiner Arbeit stürzt der Arduino nun mit allem drum und dran ab, das Display spinnt und der Arduino nimmt keine Befehle über ein Keypad entgegen.

Problemeingrenzung
Durch div. Tests konnte ich das 3-W-Ventil als Verursacher festmachen. Dieses wird über einen Relaisausgang zu- und über den anderen ausgeschaltet. (Ein drittes Kabel dahin ist N).
Wenn der Motor des Ventils dieses zu Ende gedreht hat, stoppt der Motor automatisch und just in diesem Augenblick stürzt meine Steuerung in der Regl ab.
Das Komisch daran ist, dass die Relaiskarte (acht Relais, Optokoppler: Link: http://www.sainstore.de/sainsmart-8-kanal-dc-5v-relay-modul-fur-arduino-pic-arm-avr-dsp-msp430-ttl-logic.html) eine eigene Stromversorgung hat, und diese ist über Optokoppler mit den Pins der PCF8574-Karte (I2C-gesteuert) verbunden. Die Problematik taucht nicht auf, wenn das Ventil nicht am Relais hängt.

Unten folgen die Bilder der Relaiskarte und der Plan. Dazu: JD-VCC und die eingezeichnete Erdung gehen zum eigenen 2A-Netzteil (dieses habe ich auch schon gegen andere gecheckt). VCC und IN0 bis IN7 gehen zum Portexpander. Dieser ist unten ebenfalls abgebildet.

Ich meine: das kann doch nicht sein! Ich habe schon daran gedacht, dass die Diode der Relaiskarte zickt - dazu sind aber die Optokoppler doch da, um das auszubügeln.

Diagnose?

Ich bin mit meinen Nerven am Ende - hat bitte jemand einen Tipp, wo ich weitersuchen sollte?

Grüße

pylon

Wie wird das Ventil mit Strom versorgt? Woher bekommt der Arduino den Strom? Hängt die Relaiskarte an einem anderen Netzteil? Meine Vermutung geht Richtung Stromversorgung, vielleicht hast Du da einen zu starken Spannungseinbruch oder dergleichen.

Wenn Du das I2C-Display mehr als 50cm vom Arduino weg hast, würde ich ein Paar P82B715 I2C-Extender einsetzen.

Ist der Absturz des Arduinos immer gleich oder äussert er sich mal so, mal anders?

michael--g

#2
Jul 26, 2013, 04:47 pm Last Edit: Jul 26, 2013, 05:00 pm by michael--g Reason: 1

Wie wird das Ventil mit Strom versorgt? Woher bekommt der Arduino den Strom? Hängt die Relaiskarte an einem anderen Netzteil? Meine Vermutung geht Richtung Stromversorgung, vielleicht hast Du da einen zu starken Spannungseinbruch oder dergleichen.


Ventil wird mit 230V versorgt, das Relais schaltet es in die eine oder andere Richtung.
Der Arduino hat ein eigenes Netzteil mit 7 V.
Das LCD hat ebenfalls ein eigenes Netzteil, das auch die Temperaturfühler versorgt, die Massen sind zusammengeschlossen.

Quote

Wenn Du das I2C-Display mehr als 50cm vom Arduino weg hast, würde ich ein Paar P82B715 I2C-Extender einsetzen.


Ja, das ist der Fall, es sind ca. 4-5 Meter. Allerdings gibt es dabei keine Schwierigkeiten, es auch ohne Extender zu machen, da das Signal stabil ist. Am Ende ist auch ein I2C-Keypad mit entsprechenden Pullups. Ich teste es mal am Wochenende unten im Keller, denn die Fehler kommen nur dann, wenn die Pumpe anläuft.

Quote

Ist der Absturz des Arduinos immer gleich oder äussert er sich mal so, mal anders?


Ich habe bisher keine Regelmäßigkeiten entdeckt: das Display bekommt wirres Zeug geliefert und die Steuerung bricht zusammen. Alles unmittelbar nachdem das Ventil angesteuert wurde. Daher habe ich bewußt den Optokoppler aktiviert, indem ich ein drittes Netzteil eigens für die Spannungsversorgung der Relais angeschlossen habe.

Aber etwas Besonderes passiert in einigen Fällen: Beim Neustart klickt dann das entsprechende 3W-Ventil kurz an und aus, das passiert 3-4 Mal, dann ist das Resultat das Selbe (LCD tot, Arduino auch).

Es ist zum Weinen.

Grüße

jurs


Ich meine: das kann doch nicht sein! Ich habe schon daran gedacht, dass die Diode der Relaiskarte zickt - dazu sind aber die Optokoppler doch da, um das auszubügeln.

Diagnose?


Diagnose hast Du doch schon selbst gemacht: Wenn der Motor des Ventils dieses zu Ende gedreht hat, stoppt der Motor automatisch und just in diesem Augenblick stürzt meine Steuerung in der Regl ab.

Mit dem Motor schaltest eine sogenannte "induktive Last", und wenn diese induktive Last abgeschaltet wird, baut sich aus dem in der Motorwicklung gespeicherten Magnetfeld kurzfristig eine Induktionsspannung auf, die ein mehrfaches der geschalteten Spannung beträgt.

Läuft der Motor auf Gleich- oder auf Wechselstrom? Motordaten?

Und was hast Du als Löschschaltung für die Begrenzung der Überspannung beim Abschalten des Motorstroms vorgesehen?

Wahrscheinlich "gar nix" wenn ich mal raten darf und Deine Fehlerbeschreibung lese.

michael--g



Ich meine: das kann doch nicht sein! Ich habe schon daran gedacht, dass die Diode der Relaiskarte zickt - dazu sind aber die Optokoppler doch da, um das auszubügeln.

Diagnose?


Diagnose hast Du doch schon selbst gemacht: Wenn der Motor des Ventils dieses zu Ende gedreht hat, stoppt der Motor automatisch und just in diesem Augenblick stürzt meine Steuerung in der Regl ab.

Mit dem Motor schaltest eine sogenannte "induktive Last", und wenn diese induktive Last abgeschaltet wird, baut sich aus dem in der Motorwicklung gespeicherten Magnetfeld kurzfristig eine Induktionsspannung auf, die ein mehrfaches der geschalteten Spannung beträgt.

Läuft der Motor auf Gleich- oder auf Wechselstrom? Motordaten?

Und was hast Du als Löschschaltung für die Begrenzung der Überspannung beim Abschalten des Motorstroms vorgesehen?

Wahrscheinlich "gar nix" wenn ich mal raten darf und Deine Fehlerbeschreibung lese.



"Gar nix" trifft es. Der Motor des Ventils schaltet automatisch, wenn er das Ventil gedreht hat. Darum habe ich mir keine weiteres Gedanken gemacht. Aber wenn ich es richtig verstehe, sollte das Relais in Mitleidenschaft gezogen werden. Dafür ist bei der Relaiskarte eine Diode eingebaut, s. Zeichnung. Da die Ansteuerung der Relaiskarte mit einem Optokopller getrennt ist, dürfte das doch keine Auswirkungen auf den Arduino haben, oder?

Hier ein paar Daten zum Ventil:


    Medium: Wasser oder Wasser mit 50% Glykol
    Temperatur: 2 bis 90°C
    Spannung: 230 Volt 60 Hz(+/-10%)
    Verbrauch: 4 Watt (nur wenn das Ventil sich bewegt)
    Druckklasse: 16 bar
    Laufzeit: öffnen /schließen 15 Sekunden
    Gehäuse: Bronze, vernickelt
    Abmessungen: 120 x 85 mm (Ventil mit Steuermotor)
    Differenzdruck: 0,3 MPA
    Anschluss: 3/4" Innengewinde
    Innendurchmesser: 15mm
und ein Bild unten.

Grüße

TERWI

Na ja, mit grade mal 4 Watt ist das Ventil ja nun nicht der Hammer unter den Verbrauchern und sollte bei Abschaltung auch keine nennenswerten Störungen im Netz verursachen. Aber man weiß ja nie ...

Im ersten Ansatz würde ich erst mal die Stromversorgung des Arduino aus einer anderen Phase ziehen. Nicht nur aus einem anderem Stromkreis sondern wie gesagt aus einer anderen Phase !
Ich weiß ja nicht wie das bei euch be-/verschaltet ist und ob du weißt was wo drann hängt.
Falls nicht, einfachster Weg:
Hinter dem FI muss eine 3-phasige Absicherung sitzen. Kick die mal der Reihe nach raus und schau auf welcher Phase deine Heizung (mit Steuerung) liegt.
Die lässt du dann aus und schaust, wo es im Umkreis noch "besaftete" Steckdosen gibt. Ambesten auch hier mal testen, was auf welcher Phase liegt.
Dann nimmst du erst mal ne Verlängerungsstrippe und höängst nur den Arduino mit deinem Netzteil dran.

Und dann mal schauen, ob sich was ändert.
To young to die - never to old for rock'n roll

michael--g


Im ersten Ansatz würde ich erst mal die Stromversorgung des Arduino aus einer anderen Phase ziehen.
...
Und dann mal schauen, ob sich was ändert.


Gesagt - getan. Habe nur den Arduino an eine anderen Phase gehängt. Kein anderes Ergebnis :-(
Dann diesen und abwechselnd die anderen beiden Netzteile (einmal Versorgung der Relaiskarte, einmal der restlichen Infrastruktur: LCD, Fühler). Ebenfalls kein anderes Resultat :-(

Wohlgemerkt: Die Relaisversorgung und der Rest inkl. Arduino haben kein gemeinsames GND. DIeses wurde hier im Forum schon einmal anders empfohlen. (Aber auch dann gleiches Resultat, leider).

Grüße

TERWI

In der Tat kurios !
Die Masse der Relaiskarte sollte hier auch nicht mit auf Masse Elektronik. Sonst wäre die galvanische Trennung zwischen Schwach- und Lastromteil hinfällig.
Der Arduino, Portexpander und alle Meßfühler allerdings schon.

Schon mal die Elektronik an eine (Auto-) Batterie gehängt ? Wär meine letzte Idee.

Wenn das so nicht zu lösen ist, würde ich so was wie nen kleinen Debugger vorschlagen.
Sprich: Du hängst den Arduino bei der Arbeit (die Heizung regeln) mit an den Rechner.
Damit du mal mitbekommst, wo er denn genau und ggf. warum stehen bleibt, dazu müsste man in den Source halt ebend ne Reihe von Serial.print's einbauen.
To young to die - never to old for rock'n roll

pylon

Könnte es sein, dass Deine 5m-Leitung doch einige Impulse des Ventils "übermittelt" bekommt und deshalb der Arduino aus dem Trott kommt? Verabschiedet er sich auch, wenn Du diesen ganzen Strang abhängst? Wenn das Ventil über mechanische Endschalter abstellt, wären solche Störsignale durchaus denkbar, wenn auch eher ungewöhnlich.

michael--g


In der Tat kurios !
Die Masse der Relaiskarte sollte hier auch nicht mit auf Masse Elektronik. Sonst wäre die galvanische Trennung zwischen Schwach- und Lastromteil hinfällig.
Der Arduino, Portexpander und alle Meßfühler allerdings schon.

Genau, so ist es also richtig.

Quote

Schon mal die Elektronik an eine (Auto-) Batterie gehängt ? Wär meine letzte Idee.
Wenn das so nicht zu lösen ist, würde ich so was wie nen kleinen Debugger vorschlagen.

Ich versuche das am Wochenende, dann nehme ich den Laptop mit in den Keller und berichte hier...
Der Debugger ist schon wegen diverser Optimierungen bereits im Quelltext :-) Aber bis auf die Abfrage des Keypads lese ich über I2C nichts aus, naja, dann mal sehen...

Grüße

michael--g


Könnte es sein, dass Deine 5m-Leitung doch einige Impulse des Ventils "übermittelt" bekommt und deshalb der Arduino aus dem Trott kommt? Verabschiedet er sich auch, wenn Du diesen ganzen Strang abhängst? Wenn das Ventil über mechanische Endschalter abstellt, wären solche Störsignale durchaus denkbar, wenn auch eher ungewöhnlich.


Das ist natürlich noch eine Möglichkeit :-/ Ich hänge gleich das LCD ab (Ausstöpseln reicht, oder?) und schaue...
Wenn die galv. Trennung aber funktioniert, würden diese Störsignale am Optokoppler der Relaiskarte hängenbleiben (?)... Ich berichte...

Grüße

pylon

Quote
Wenn die galv. Trennung aber funktioniert, würden diese Störsignale am Optokoppler der Relaiskarte hängenbleiben (?)... Ich berichte...


Ich spreche nicht über direkte Signal, die z.B. über die Masse reinbröseln, sondern über jene, die Deine 5m-Antenne einfängt. Da nützt Dir die galvanische Trennung bei den Relais gar nichts. Der I2C-Bus ist nicht für solche Leitungslängen spezifiziert, wenn Du dann noch keine externen Pull-ups verwendest, wäre dies prädestiniert als Problemverursacher.

michael--g


Quote
Wenn die galv. Trennung aber funktioniert, würden diese Störsignale am Optokoppler der Relaiskarte hängenbleiben (?)... Ich berichte...


Ich spreche nicht über direkte Signal, die z.B. über die Masse reinbröseln, sondern über jene, die Deine 5m-Antenne einfängt. Da nützt Dir die galvanische Trennung bei den Relais gar nichts. Der I2C-Bus ist nicht für solche Leitungslängen spezifiziert, wenn Du dann noch keine externen Pull-ups verwendest, wäre dies prädestiniert als Problemverursacher.


OK, dann hänge ich am besten nicht nur das Display ab, sondern die (lange) "I2C-Antenne". Bericht folgt.

jurs


"Gar nix" trifft es. Der Motor des Ventils schaltet automatisch, wenn er das Ventil gedreht hat. Darum habe ich mir keine weiteres Gedanken gemacht. Aber wenn ich es richtig verstehe, sollte das Relais in Mitleidenschaft gezogen werden. Dafür ist bei der Relaiskarte eine Diode eingebaut, s. Zeichnung.


Ich bin zwar kein Schaltungsprofi, aaaber:
Die Diode in der Relaiskarte ist nur dafür da, dass beim Abschalten des Spulenstroms im Relais (5V ca. 50ma) keine Überspannung entsteht und auf den Controller zurückwirkt. Für die EMV-gerechte Auslegung der vom Relais geschalteten Verbraucher bist ausschließlich DU verantwortlich.

Das Minimum an Entstörung beim Schalten von Wechselstrom in Form "induktiver Lasten" ist ein RC-Löschglied ("Snubber") parallel zu den Schaltkontakten, die für die Abschaltung des Stroms zuständig sind.

Deine Pumpe hat offenbar zwei Endschalter, die bei Erreichen der Endposition den Strom abschalten können. Daher brauchst Du zwei RC-Löschglieder. Ein RC-Löschglied besteht aus einem Widerstand und einem Kondensator in Reihe. Diese werden parallel zu den Schaltkontakten an die Stromzuleitung gehängt, und zwar möglichst dicht am geschalteten Motor.

Bei dem geringen Strom Deines 4-Watt-Stellmotors (zieht der wirklich nur so wenig Leistung?) z.B. ein Kondensator 200pF und ein Widerstand 4,7KOhm, beide jeweils ausreichend spannungsfest. Auf Stromfestigkeit kommt es nicht groß an, da Deine Pumpe ja nur wenige mA schaltet. Also das mit einem RC-Löschglied wäre das, was ich als erstes probieren würde: An Deiner Pumpe zwischen blau-schwarz und zwischen braun-schwarz jeweils eine Reihenschaltung aus 200pF Kondensator und 4,7K Widerstand als RC-Löschglied einbauen.

Die Dimensionierung von C und R habe ich dabei grob nach dieser Tabelle ermittelt:
http://www.mikrocontroller.net/attachment/preview/125882/page_snapshots/001.png
(Keine Gewähr für die Richtigkeit der Snubber-Dimensionierung, wie gesagt: ich bin kein Schaltungsprofi)

michael--g


Quote
Wenn die galv. Trennung aber funktioniert, würden diese Störsignale am Optokoppler der Relaiskarte hängenbleiben (?)... Ich berichte...


Ich spreche nicht über direkte Signal, die z.B. über die Masse reinbröseln, sondern über jene, die Deine 5m-Antenne einfängt. Da nützt Dir die galvanische Trennung bei den Relais gar nichts. Der I2C-Bus ist nicht für solche Leitungslängen spezifiziert, wenn Du dann noch keine externen Pull-ups verwendest, wäre dies prädestiniert als Problemverursacher.


So, habe die "Antenne" abgeklemmt und das Display in den Keller verfrachtet.
Alles funktioniert prima - bis zum Zeitpunkt, wenn ich das 3-Wege-Ventil in Bewegung setze :-(( leider mit den bekannten Symptomen.

Das ist es also zumindest nicht. Aber ich lasse die "Antenne" abgeklemmt und das Display zuerst im Keller. Vielleicht trägt es irgendetwas zur Lösung noch bei.
Jetzt ist das Ventil mit dem RC-Löschglied dran...

Grüße

Go Up