ich habe schon sehr lange zur Überwachung meiner Heizungsanlage einen Arduino (Nano) mit vor allem Thermistoren (10kohm) laufen. Angeschlossen sind diese über Klemmdosen und EIB-Kabel (hatte ich noch in Massen da) an den Arduino. Das läuft alles sehr gut und zuverlässig. Ich habe neu eine Brauchwasserwärmepumpe installiert und diese ebenfalls mit Temperaturfühlern ausgestattet und über EIB-Kabel auf den gleichen Arduino gelegt. Es gibt zwischen dem Arduino und Wärmepumpe keine elektrische Verbindung.
Sobald die Wärmepumpe läuft bekomme ich jetzt massives Rauschen in allen Analogsignalen des Arduinos. Anscheinend stört der Frequenzumrichter. Im Stand-By ist alles wie vorher ohne Wärmepumpe. Die Zuleitungen liegen außerhalb der Wärmepumpe in mind. 5cm Abstand von Strom(zu)leitungen. Im Gerät habe ich so gut es ging versucht, die Kabel auf Abstand zu legen.
Ich habe laienhaft schon verschiedenes ausprobiert, ohne angeschlossene Schirmung, Schirmung auf Masse, Schirmung auf PE. Alles ohne Erfolg.
Gibt es noch anderes, was ich tun könnte, um das Signal zu verbessern? Auch andere Kabel wären eine Option für mich.
Sobald die Wärmepumpe läuft bekomme ich jetzt massives Rauschen in allen
Analogsignalen des Arduinos.
Deine Temperatursensoren arbeiten doch mit quasi Gleichstrom. Das Rauschen hat höhere Frequenzen. Das kannst Du mit einem Kondensator deutlich vermindern. Ich würde es zunächst mit 100 nF probieren.
mfg Klaus
Es gibt immer 2 Möglichkeiten: Entweder das Übel an der Quelle zu beseitigen oder mühsam den Störer auszufiltern (falls es keine Masseschleife ist).
Wahrscheinlich ist Klaus's Vorschlag mit C am Analogeingang der schnellste Versuch? Man könnte aber mal einen Oszi an den Eingang anschließen und das Signal beobachten, ob es sich durch den C verändert.
ich habe schon sehr lange zur Überwachung meiner Heizungsanlage einen
Arduino (Nano) mit vor allem Thermistoren (10kohm) laufen. Angeschlossen
sind diese über Klemmdosen und EIB-Kabel (hatte ich noch in Massen da)
an den Arduino.
Wie sieht deine Schaltung aus, insbesondere die Eingangsbeschaltung des ADC?
danke für die vielen Antworten. Ich versuche, sie alle mal hier zu beantworten:
Die Kondensatoren 100 nF zwischen A-Eingängen und GND und auch Vcc habe ich versucht, kein Erfolg bzw. sichtbare Änderung (Oszi und Datenaufzeichnung)
Habe auch mit dem Oszi das Rauschen der Spannungsversorgung im Stand-By und im Betrieb der Wärmepumpe angesehen, ebenfalls kein Unterschied.
die Schaltung mit den Thermistoren ist klassisch mit Spannungsteiler 10kohm Thermistor und 10 kohm Widerstand. Thermistor an Vcc, Widerstand an GND
das mit dem Kabel-Twist habe ich nicht beachtet, ein Thermistor hängt auf rot/gelb, der andere auf weiß/schwarz. Habe 2x VCC zugeführt. Das klemme ich nochmal um.
Die Brauchwasserwärmepumpe ist eine Tesy mit 260l (AquaThermica Pro) von Panasonic gibt es eine baugleiche (P-DHW260CAE5)
Habe auch das Netzteil (12V) getauscht und auf verschiedene Phasen gelegt. Auch kein Erfolg bzw. Änderung.
Ob die Anlage wirklich einen Frequenzumrichter hat, stelle ich gerade noch infrage. Es gibt in den Parametern nur den Einstellungspunkt "Frequenzumrichter nutzen oder nicht".
Bild schicke ich noch, wenn ich die Anlage zum Kabeltausch nochmal aufmache.
Vielleicht ergibt sich aus den Ausführungen noch ein Hinweis.
wenn die Wärmepumpe nur ein/aus kennt, hat Sie keinen Frequenzumrichter, wenn sie Ihre Drehzahl regeln kann hat sie einen Frequenzumrichter.
Interessant wäre es jetzt zu sehen wo die Störung reinkommt über die Versorgungsleitungen oder über die Sensorleitungen.
Du könntest dem Arduino einen Kapazitätsmultiplizierer vorschaltet damit kannst du das ganze hochfrequente Zeug aus der Versorgungsspannung rausfiltern. Die Sensoren sind allerdings mit 10kOhm auch recht hochohmig, vielleicht kannst du deine Temperaturmessschaltung niederohmiger auslegen. Thermistor und Widerstand mit 1 kOhm und parallel zum unteren Widerstand 1µF.
Aber generell wäre es besser die Störung beim Verursacher zu eliminieren, z.B. eine geschlitzte Schirmleitung um die Kabel die von der Steuerung zum Motor des Kompressors geht legen und auf PE klemmen.
Mach mal Alufolie um das Kunstoffarduino Gehäuse und klemm das mal auf PE ob das hilft.
Wie ist das denn angeschlossen? Die Temperatursensoren (Widerstandsthermometer oder Thermoelemente) nutzt man ja nicht umsonst in 4-Leitertechnik, um sich dieser Probleme zu entledigen. Messtechnisch filtern muss man dann immer noch. Mit einem Arduino sollte eine Stromeinspeisung mit Auswertung der Spannung drin sein. Ansonsten generell niederohmiger machen, gfs dem Eingang was parallel schalten.
Wenn Ihr mich fragt, würde ich jetzt mal das lange Kabel einfach weglassen und prüfen, ob der Fehler weg ist, wenn ich den Fühler DIREKT am Analogeingang betreibe.
Es könnte ja auch sein, dass der Fehler schon am Arduino oder dessen Netzteil zu suchen ist? Später würde ich mal den Oszi ans Kabel halten. Jedes Kabel ist auch eine "schöne" Antenne.
Relativ zum Takt des µC ist eine Heizung unendlich langsam.
Wenn man eine ordentliche Hardware nicht realisiert bekommt, muss eben die Software herhalten: Ganz viele Messungen machen, die Min- und Maxima wegwerfen und den Durchschnitt als Meßwert nehmen.
Relativ zum Takt des µC ist eine Heizung unendlich langsam.
Wenn man eine ordentliche Hardware nicht realisiert bekommt, muss eben
die Software herhalten: Ganz viele Messungen machen, die Min- und Maxima
wegwerfen und den Durchschnitt als Meßwert nehmen.
Vielen Dank wieder für die Antworten, werde sie mal alle durchsehen. Habe aktuell mal die Kabel geändert und hatte auch schon den Tip mit der Software umgesetzt, gleitender 5s-Mittelwert hilft schon ungemein. Wenn morgen die Pumpe wieder läuft, sehe ich mal, ob es was gebracht hat.
Mit dem LT1043 kann man Störsignale sehr gut isolieren und unschädlich machen. Wir hatten da mal (2013) eine Erdbohr-Anwendung wo zahlreiche Thermo-Elemente (TC) über ein 1km langes Kabel zusammen mit 5kW VFD Ansteuerung im laufenden Betrieb funktionieren mussten. Die Thermo-Elemente waren in die Motorwicklungen eingebettet, um den Motor thermisch überwachen zu können. Bis zu 6 Eingänge waren zu messen. Herkömmliche kommerzielle TC-Messwandler funktionierten bei laufenden Motor überhaupt nicht. Da erinnerte ich mich an diesen 1953 Beitrag:
Inspiriert durch diesen Beitrags entwickelte ich damals dann eine erfolgreiche TC Messschaltung auf LT1043 Basis. Damit war es möglich VFD-Störspannungen bis zu über 10Vpp zu eliminieren.
Der LT1043 fliegende Kondensator wird laufend von der TC EMF nachgeladen und überträgt sie periodisch auf einen Speicher-Kondensator auf der anderen Seite, den dann ein MAX11200 umwandelte. Das Ganze wurde durch einen STM32 gesteuert. Ein 16-Bit DAC synthethisch restaurierte die isolierten TC Messwerte. Die Genauigkeit der TCs litt darunter nicht. Wir setzten diese Methode viele Jahre ein. Ein Datataker und MUX steuerte und übertrug die Kanalzuordnungen und Messwerte.
Wenn Ihr mich fragt, würde ich jetzt mal das lange Kabel einfach
weglassen und prüfen, ob der Fehler weg ist, wenn ich den Fühler DIREKT
am Analogeingang betreibe.
Es könnte ja auch sein, dass der Fehler schon am Arduino oder dessen
Netzteil zu suchen ist? Später würde ich mal den Oszi ans Kabel halten.
Jedes Kabel ist auch eine "schöne" Antenne.
Hier noch eine kurze Antwort. Das Messystem läuft schon seit ca. 6 Jahren. Das längste Kabel ist ein 10m EIB an dem 3 NTC hängen. Das läuft auch quer mit allen 230v-Leitungen in einem Kabelkanal. Funktioniert klaglos mit minimalem Rauschen. Erst als die WP dazukam, hat das Rauschen angefangen.
Wenn Ihr mich fragt, würde ich jetzt mal das lange Kabel einfach
weglassen und prüfen, ob der Fehler weg ist, wenn ich den Fühler DIREKT
am Analogeingang betreibe.
Es könnte ja auch sein, dass der Fehler schon am Arduino oder dessen
Netzteil zu suchen ist? Später würde ich mal den Oszi ans Kabel halten.
Jedes Kabel ist auch eine "schöne" Antenne.
Hier noch eine kurze Antwort. Das Messystem läuft schon seit ca. 6
Jahren. Das längste Kabel ist ein 10m EIB an dem 3 NTC hängen.
Funktionieren klaglos mit minimalem Rauschen. Erst als die WP dazukam,
hat das Rauschen angefangen.
Hallo Hugo,
Dein Problem interessiert mich und ich würde Dir gerne einige Fragen stellen und Vorschläge machen:
Was Du als Rauschen bezeichnet, sind das Sample Rate Ausreisser? Gibt es ein SW Filter und welche Art und Einstellung? Wie sieht der Rauschplot aus?
Könntest Du mal versuchen vor dem ADC Eingang einen 10k in Serie schalten und am ADC Eingang einen 1uF Kerko nach Masse schalten? Die NTC Bestromung muss natürlich vor dem Filter erfolgen. Es würde mich sehr interessieren, ob man da etwas bemerkt.
(Wenn diese Massnahme nicht ausreicht ein weiteres RC Glied einfügen)
Es würde auch nützlich sein die ADC Taktfrequenz versuchsweise zu ändern, ob Alias Produkte eine Möglichkeit sind.
Schon mal ein Oszilloskop Untersuchung bei laufender WP gemacht?
Darauf achten, daß alle Arduino Sonden-Messkabel nur beim Arduino zusammenführen und keine zusätzliche Erdverbindung zu den NTC Fühlern irgendwo existiert. Am Besten prüfen anstatt zu vermuten.
Zeige mir nach Möglichkeit auch den Systemverdrahtungsplan Deines Arduino Messaufbaus mit genauen Messleitungen Angaben.
Wie weit ist der Arduino vom VFD Steuergerät entfernt?
Sind die VFD zu Motorverbindungen geschirmt?
Gibt es an der WP irgendwelche Filterblöcke?
Es wäre auch noch interessant alle NTC Enden an den Arduino Eingängen abzuklemmen (Masserückführungen aber nicht abklemmen) und ein Poti zusammen an allen Eingängen anschliessen, um die NTCs zu emulieren. Das Poti am Besten mit einer Batterie speisen. Dann bei gestoppten und laufender WP messen und vergleichen. Wenn das"Rauschen" immer noch auftritt, dann ist die Gesamtverdrahtung suspekt, einschließlich der Arduino Stromversorgung.
Die Sensoren sind allerdings mit 10kOhm auch recht hochohmig, vielleicht
kannst du deine Temperaturmessschaltung niederohmiger auslegen.
Breitbandige Störungen auf einem Nutzsignal lassen sich einfach reduzieren, indem man die Bandbreite des Empfängers verringert. Insbesondere bei einem quasi-DC Signal von einem Thermistoren ist das mit wenig Aufwand verbunden.
Differentielle Übertragung wäre ein Weg, um nicht leitungsgebundene Störeinwirkung auf die Sensorleitungen zu verringern.
Die Kondensatoren 100 nF zwischen A-Eingängen und GND und auch Vcc habe
ich versucht, kein Erfolg bzw. sichtbare Änderung (Oszi und
Datenaufzeichnung)
Der Spannungsteiler mit 10 kOhm Thermistor und 10 kOhm Widerstand ergint
5 kOhm an denen der 100 nF Kondensator parallel liegt.
f = 1 /(6,28 x 100 nF x 5 kOhm)
f = 318 Hz
Die Dämpfung sollte bei 318 Hz dann 6 dB betragen. Wenn Dein Rauschen
weit unter dieser Frequenz liegt dann sieht man keine Änderung.
mfg Klaus
Die Kondensatoren 100 nF zwischen A-Eingängen und GND und auch Vcc habe
ich versucht, kein Erfolg bzw. sichtbare Änderung (Oszi und
Datenaufzeichnung)
kannst Du das teilen?
die Schaltung mit den Thermistoren ist klassisch mit Spannungsteiler
10kohm Thermistor und 10 kohm Widerstand. Thermistor an Vcc, Widerstand
an GND
bitte Schema inclusive Kennzeichnung der Kabelstrecken (und welche verdrillt sind). Egal ob Ascii oder per Kuli. Denn auch das nachfolgende könnte fehlinterpretierbar sein
das mit dem Kabel-Twist habe ich nicht beachtet, ein Thermistor hängt
auf rot/gelb, der andere auf weiß/schwarz. Habe 2x VCC zugeführt. Das
klemme ich nochmal um.
Um zu prüfen ob die Störungen über die 230V eingekoppelt werden, könnte man mal versuchen die Wärmepumpe über ein Verlängerungskabel von einer "entfernten" Steckdose zu versorgen, die möglichst auch auf einer anderen Phase liegt als das Arduino Netzteil.
Dein Problem interessiert mich und ich würde Dir gerne einige Fragen
stellen und Vorschläge machen:
Danke für die Nachfragen.
Zunächst mal, warum ich das Ganze mache? Die Brauchwasserwärmepumpe (BWWP) hat keinerlei Kommunikationsmöglichkeiten nach außen (Modbus, ...). D.h. ich kann keine Daten direkt aus der Anlage holen bzw. sie von außen steuern. Aktuell sehe ich einzig die Leistungs- und Energiedaten über einen vorgeschalteten Shelly (...pro1pm) und die Wassertemperatur in mittlerer Speicherhöhe über den externen Fühlerzugang. Dieser ist auch ein NTC, aber über die Buderus-Gasheizung angeschlossen. Um die Anlage besser überwachen und ggf. später steuen zu können, will ich eine eigene Instrumentierung anbringen.
Angefangen habe ich mit den Temperatursensoren, die an (fast) gleicher Position sitzen, wie die Sensoren der BWWP.
Das System wie folgt, ein paar Bilder im Anhang:
Die beiden NTCs sitzen trocken in einem Rohr, zusammen mit den Anlagenfühler, auf zwei Höhen im Wassertank. Die beiden Litzen der NTCs gehen noch im Gehäuse der BWWP in einer Klemmbox auf ein EIB-Kabel (1. NTC rot/weis, 2. NTC schwarz/gelb). Schirmung ist dort nicht aufgelegt.
Das EIB geht nach außen in eine Klemmbox (--> Bild) und von dort im EIB weiter zum Arduino. Schirmung hier nicht zusammengeführt. Das zweite EIB (links) ist für die Steuerung des SG-Ready-Anschlusses und der Anforderung für Zusatzheizer und geht zu einem Relay bzw. Digitaleingang am Arduino. Der Digitaleingang hatte auch Fehlschaltungen wenn die WP lief, dass habe ich mit den 100nF Cs im Klemmkasten gelöst.
Der Arduino selber sitzt auf einem erweiterten Break-Out-Board (--> Bild) mit zusätzlichem ESP zur Kommunikation per MQTT zur Hausautomatisierung. Dieses System läuft seit 6 Jahren so, stabil und rauscharm (ohne WP). Verschiedene Arduinos habe ich auch schon ausprobiert. Machen einen Unterschied, aber nicht in dem Niveau, dass ich bei dem Rauschen suche. Die Buck-Converter zeigen sich von der BWWP unbeeindruckt. Rauschen ist im Oszi immer gleich.
Die Wärmepumpe hat einen Netzfilter --> Bild
Eine Handskizze der Verdrahtung ist als Bild auch angefügt. Das ist der originale Aufbau. Filterkondensatoren sind nicht eingezeichnet.
Die Messdatenverarbeitung für jeden Analogeingang ist wie folgt:
Alle 250 ms 3x Abfrage des ADC, 1. Wert wird verworfen, Mittelwert der beiden anderen
Gleitende Mittelwertbildung über 5s (=20 Werte)
Weitergabe an übergeordentes System (ESP) nach folgender Logik
1
Max. Sendeperiode 10s
2
Wenn Betrag der Wertänderung zum vorher gesendeten Wert >= 3,5 dann direktes senden
3
aber frühestens nach 0,5s
Ich habe noch Plots aus Grafana angehängt. Einmal Gesamtbereich und Zoom. Das ist ohne irgendwelche Umbauten wie Cs. Und die Daten sind durch die Messdatenverarbeitung gelaufen wie oben beschrieben, also nicht das Originalsignal. Blau ist die Leistungskurve der BWWP, gelb und grün die Temperatursensoren. Nach Start der BWWP sieht man in den Temperaturwerte, wie die Datenrate nach der oben beschriebenen Logik zunimmt. In der Zoom-Ansicht der Leistung fällt auf, dass das Rauschen bereits mit dem ersten Leistungsanstieg (wahrscheinlich der Lüfter) beginnt.
Die einzelnen Maßnahmen oben werde ich mal durchgehen. Ich muss nur immer warten, bis die Anlage läuft und das ist nur 1x am Tag. Zwangsstart geht leider nur mit Umprogrammierung.
Das zu sehende Kabel ist ungeeignet. Das hat nur 4 zusammen leicht verdrehte Adern, keine Verdrillung einzelner Paare und keinen wirklich wirksamen Schirm.
Eine Handskizze der Verdrahtung ist als Bild auch angefügt. Das ist der
originale Aufbau. Filterkondensatoren sind nicht eingezeichnet.
Warum nicht?
Gibt es direkt beim Arduino Kondensatoren zwischen A0 bzw. A1 und Masse?
Ist während des Betriebs der Wärmepumpe die 5V-Betriebsspannung des Arduino sauber genug, um damit die Messbrücke zu speisen?
Hast du die Störungen einmal mit dem Oszi aufgelöst (deutlich höhere Zeitauflösung)?
Was für ein Glück, dass bei so einem Temperaturfühler in der Heizungsanlage in Bezug auf das Zeitverhalten keine schnellen Änderungen zu erwarten sind und es fast egal ist, über einen wie langen Zeitraum man mittelt.
Zur Erfassung vom Zeitverhalten ist es jedoch keine gute Idee, einfach blind per Software über Abtastwerte zu mitteln. Bei niedriger Abtastfrequenz kann man dann leicht viel Zeitauflösung verschenken, nämlich wenn die Störungen dabei unterabgetastet werden.
Bevor man nach der Abtastung mit der Mittelung ansetzt, sollte man sich daher über das Störspektrum im klaren sein.
Solange das gestörte Signal nicht durch ein passend dimensioniertes Antialiasing-Filter gelaufen ist, kann der Tipp sonst böse nach hinten los gehen.
Zur Erfassung vom Zeitverhalten ist es jedoch keine gute Idee, einfach
blind per Software über Abtastwerte zu mitteln.
... genau, ich Taste das Signal mit einer Periode von 250ms ab. Wer weiß, was ich mir dadurch einhandle. Das mit der Software gefällt mir auch gar nicht, zumindest wie du geschrieben hast nicht als erste Lösung. Deshalb suche ich auch noch nach der Ursache, komme der Sache aber gerade näher.
Was ist das für eine Zeitachse in den Bildschirmfotos?
Stunde:Minute?
Ohh, ja, das ist nicht erkennbar. Stunde, 0:00 ist Mitternacht. Aber bitte nicht die Störfrequenz daraus ableiten, das Signal ist ja schon mutwillig verarbeitet.
Anbetracht Deiner Verdrahtung fällt mir Folgendes auf:
Die Sauberkeit des Messsignals wird auch von der Arduino Versorgung bestimmt. Es ist durchaus möglich, daß durch kapazitive Verkopplung der Arduino Stromversorgung und PE Störungen eingekoppelt werden.
Deshalb hätte ich gerne, daß Du mit dem Oszi die Vcc überprüfst und darauf zu achten, daß auch bei kurzgeschlossenem Tastkopf (Masse aber an Arduino GND) durch PE Verschleifungen keine zusätzlichen WP Störungen verkoppelt werden.
Achte darauf, daß sich das Oszibild zwischen Lauf- und Nichtlauf der WP nicht wesentlich verändert. Sonst ist Deine Messanordnung mit Störungen von der WP verkoppelt. Sollte bis jetzt alles in Ordnung sein, miss den Störungsgehalt der Arduino VCC Versorgung.
Sollten da Störungen sichtbar sein, vergleich den Störungspegel mit denen an den Analogleitungen. Sollten sie gleich gross sein, wird der AVR dadurch verseucht.
Berücksichtige auch, dass diese billigen NANO Klonen keine Datenblatt gerechte Entkopplung von VDD mit VDDA aufweisen und deshalb die Spannungsreferenz des ADCs verseucht werden könnte. Sollte als VCC dreckig sein, dann muss man die Schaltung anders angehen.
Solange VDDA verseucht ist, wird auch Filtern der Messeingänge wenig oder nichts bringen. In diesen Fall muss erst die VCC gesäubert werden. Das könnte möglicherweise mit einigen Elkos und Cs zwischen Arduino Vcc und Gnd erreicht werden.
Dann, wie schon vorgeschlagen, ändere die Sensorbestromung, so, daß die NTCs auf Masse liegen und die Bestromung über die 10K erfolgt. Dann isoliere jeden ADC Eingang mit 10K in Serie und 1uF nach Masse. Achten, daß die Masseanschlüsse und Nano Stromversorgung nur an einen einzigen Punkt erfolgen.
Verbesserung der VDDA Beschaltung:
Hier schlage ich vor den VDDA-Pin vom AVR vorsichtig hochzuheben. Dann verbinde VCC mit VDDA über einen 100 Ohm Widerstand und lege VDDA über 0.1uF KERKO plus 10uF an Masse nahe dem Vdda-Pin. Das kann in der Luft geschehen. Dann verbinde die 10K NTC Versorgungs-Rs mit VDDA. (das ist notwendig, weil Dein ADC in dieser Anwendung ratiometrisch konfiguriert wird und der Spannungsabfall zwischen VCC und VDDA Messfehler verursachen würde. Diese Massnahmen dürften den Störpegel signifikant reduzieren. Ggf. auch das Vref-C vergrößern.
Im ratiometrischen Betrieb ist Vref gleich der VDDA Spannung und ist von der spektralen Sauberkeit abhängig.
Wenn Du es versuchen willst, lass uns wissen. Vergiss nicht, mit dem Oszi Vor und Nachher zu dokumentieren.
... genau, ich Taste das Signal mit einer Periode von 250ms ab. Wer
weiß, was ich mir dadurch einhandle.
Das ist kein Geheimnis. Solange du kein Antialiasing-Filter verwendest, transformierst du dadurch deine Störungen, egal wie hochfrequent sie sind, in den Frequenzbereich unterhalb von 2 Hz, nennt sich Aliasing. Ob Grafana direkt die 250ms-Samples darstellt oder wie es sie für die Darstellung dezimiert, weiß ich nicht.
Falls Du den Nano nicht modifizieren möchtest, gibt es noch eine Möglichkeit:
Stell VREF im Programm so ein, daß es Externe VREF verwendet
verbinde Vcc mit VREF über 100 Ohm
verbinde einen 10uF Elko und 0.1uF Kerko mit Vref und Masse
schliesse die NTC 10K Vorwiderstände an diesen Knoten an
Das funktioniert, weil nach dieser Änderung der ADC immer noch ratiometrisch misst. Durch die Entkopplung von Vcc misst es immer noch so genau wie vorher, weil das Verhältnis zwischen Vref und den ADC Eingängen gilt. Aber alle Störungen werden jetzt massiv ferngehalten, vorausgesetzt die ADC Eingänge erhielten den 10K Vorwiderstand und 1uF nach Masse.