Guten Tag zusammen, ich arbeite gerade an einem Versuchsaufbau für eine Heizungssteuerung und habe Probleme mit Störeinkopplungen auf den USB- und I2C-Leitungen. Verwendete Komponenten: - Arduino Uno R4 Minima - 230V Heizpatrone mit 400 W - Meanwell RS-15-12 12V-Netzteil - Vier PT100 mit jeweils einem MAX31865 Breakout-Board (SPI-Schnittstelle) - SHT31 Feuchtigkeitssensor (I2C-Schnittstelle) - OLED-Display (I2C-Schnittstelle) - Encoder/Drehgeber mit integriertem Taster - Zwei mechanische Relais, einmal als Sicherheitsabschaltung in Verbindung mit einem Thermoschalter und einmal als Regelkontakt Der Arduino misst die Temperaturen mithilfe der PT100-Sensoren. Einer der Temperaturwerte wird verwendet, um mit einem PID-Regler die Temperatur an der Heizpatrone auf einem konstanten Wert zu halten. Auf dem Display ist eine kleine Menüsteuerung realisiert, um die Heizung ein- und auszuschalten und die Solltemperatur vorgeben zu können. Die aktuellen Messwerte für Temperatur und Feuchtigkeit werden ebenfalls auf dem Display angezeigt. Zusätzlich werden diese Werte über die USB-Schnittstelle an den PC übertragen, um diese loggen zu können. Hinweis: Bei den bisherigen Arduinos, die ich verwendet habe, geht die USB-Leitung auf einen USB-Seriell Wandler und anschließend auf den eigentlichen Mikrocontroller. Bei dem Arduino Uno R4 Minima geht die USB-Leitung hingegen direkt auf den Mikrocontroller, es ist kein USB-Seriell Wandler dazwischengeschaltet. Der Arduino erscheint am PC als virtueller COM-Port. Weiter Hinweis: In den Relaissockeln sind bereits Freilaufdioden integriert, deshalb habe ich diese nicht in den Schaltplan eingezeichnet. Die Software funktioniert soweit problemlos. Die Menüsteuerung funktioniert so wie sie soll und die PID-Regelung arbeitet erstaunlich genau. Über den Encoder lässt sich das ganze System einwandfrei bedienen. Ein Foto vom Aufbau habe ich angehängt. Ich verwende eine einfache Sperrholzplatte mit 3D-gedruckten Hutschienen und Kabelkanälen. Der obere Kabelkanal enthält ausschließlich 230V-Leitungen, während der untere Kabelkanal nur Steuerleitungen (5V/12V) enthält. Nicht besonders schön, aber für diesen Versuchsaufbau erstmal ausreichend. Leider habe ich mit dem aktuellen Aufbau folgende Probleme: 1. Sobald ich die Heizung einschalte, bricht nach einiger Zeit die Übertragung der Messwerte an den PC ab. Über das Terminal kommen die ganze Zeit Daten zum PC, aber irgendwann stoppt die Übertragung einfach und es kommen keine neuen Daten mehr an. Der Arduino ist nach wie vor am PC als COM-Port sichtbar. Wenn ich das USB-Kabel ziehe, wieder einstecke und anschließend die Verbindung im Terminal neu aufbaue, kommen auch wieder Daten an. Manchmal passiert dies 30 Sekunden nach dem Start der Messung, manchmal dauert es mehrere Minuten. 2. Es kommt ab und zu vor, dass die Anzeige auf dem Display einfriert und nicht mehr aktualisiert wird. Ich kann das Menü aber nach wie vor "blind" mit dem Encoder bedienen. Wenn ich z.B. blind zu dem Menüpunkt zum Ausschalten der Heizung navigiere, kann ich die Heizung auch ausschalten. Wenn ich den Arduino resette, bleibt die Anzeige nach wie vor eingefroren. Ich muss das Display (bzw. den Arduino und das Display) komplett stromlos machen und anschließend wieder einschalten, damit das Display wieder funktioniert. Es scheint so, als ob das Display gar nicht mehr auf I2C-Kommandos reagiert. 3. Selten (ca. alle 5-10 Minuten) erhalte ich mal einen falschen Temperaturwert von einem der PT100 - wenn die Temperatur normalerweise bei 90 Grad liegt, bekomme ich bspw. auf einmal einen Wert von 714 Grad angezeigt. Sowohl beim Ausfall des Display als auch der USB-Verbindung regelt der Arduino die Temperatur problemlos weiter. Ich gehe also davon aus, dass die Software nach wie vor läuft, aber die Kommunikation nach außen nicht mehr funktioniert. Ich habe mal mein Oszilloskop an die Signalleitungen geklemmt und konnte beim Einschalten des Relais massive Störimpulse messen. Im Anhang beispielhaft drei Screenshots, bei denen ich die USB-Leitungen gemessen habe. Man sieht, dass hier kurzzeitig die komplette Datenübertragung gestört wird. Ähnliche Störungen sind auch auf den I2C-Leitungen vorhanden. Die Störungen treten beim EINschalten des Relais auf, beim Ausschalten triggert mein Oszilloskop nicht. Folgendes habe ich versucht, um das Problem in den Griff zu bekommen: - Leitung vom Relais zur Heizpatrone (ca. 1,5 m) mit Alufolie umwickelt und diese mit PE oder GND verbunden - keine Veränderung - Ich habe versucht, das Relais mit Alufolie/Metallplatten, die ich mit PE verbunden habe, abzuschirmen - keine Änderung - Austausch des Relais durch ein SSR - die oben beschriebenen Probleme treten nach wie vor auf, ich habe hier aber leider keine Messungen mit dem Oszilloskop gemacht; kann ich bei Bedarf nachholen - Schaltung zur Nulldurchgangserkennung (Zero-Crossing) gebaut, um das SSR nur im Nulldurchgang einzuschalten - keine Änderung, beim mechanischen Relais ist das Schalten im Nulldurchgang durch das verzögerte Anziehen in meinen Augen nicht sinnvoll möglich - Anfangs habe ich einen Relaissockel von Phoenix Contact (2903362) verwendet, welcher laut Datenblatt 6 A schafft. Diesen habe ich durch ein Wago 788-311 ersetzt, welcher laut Datenblatt 8 A schafft (ist auch auf dem Bild im Anhang zu sehen, das Phoenix Relais links daneben ist das zur Sicherheitsabschaltung) - keine Änderung - Beide Kontakte des Wago-Relais parallelgeschaltet - keine Änderung - Snubber über die Relaiskontakte abgebracht (Versuch 1: 100 Ohm/100 nF, Versuch 2: 50 Ohm (2x100 Ohm parallel)/220 nF) - keine Veränderung - Heizpatrone testweise abgeklemmt, nur noch die Leitung zur Heizpatrone ist am Relais angeschlossen (keine Last) - massive Verbesserung, aber selten kommt es doch noch zu Ausfällen Nachdem ich die Ursache der Störungen nicht eindämmen konnte, habe ich mich am Filtern versucht: - 22 pF Kondensatoren nach GND in die I2C-Leitungen geschaltet + 5V direkt am Display mit 100 uF gepuffert - spürbare Verbesserung, aber nach wie vor häufige Ausfälle - Leitungen zwischen OLED und Arduino deutlich verkürzt - erneut leichte Verbesserung, aber nach wie vor Ausfälle - Klappferrite um I2C-Leitungen und USB-Kabel angebracht (an beiden Enden) - keine Veränderung - Pi-Filter in die USB-Leitung eingeschliffen (ich weiß, keine gute Idee) - Arduino wird am PC nicht erkannt, Deskriptor kann nicht abgerufen werden Mit meinem Transistor-Tester aus China messe ich an der Heizpatrone nur Widerstand und keine Induktivität. Auch, wenn ich eine Spule in Serie schalte, messe ich nur die Induktivität der Spule und keine zusätzliche Induktivität durch die Heizpatrone. So langsam bin ich mit meinem Latein am Ende und ich weiß nicht, was ich sonst noch tun kann. Würde eine geschirmte Leitung zur Heizpatrone evtl. etwas bringen? Ich könnte mir vorstellen, dass die Alufolie nicht besonders gut dämpft. Die Störungen an der Quelle einzudämmen erscheint mir zielführender, als es mit Filtern zu versuchen. Ich habe den Eindruck, dass es am Prellen der Relaiskontakte liegt. Gleichzeitig frage ich mich aber, warum das SSR hier für keine Besserung gesorgt hat. Vielleicht hat ja jemand eine Idee oder Hinweis, wie ich hier weiterkomme. Ich würde mich sehr freuen, wenn mir jemand weiterhelfen könnte :-) Danke und ein schönes Wochenende. EDIT: Ich sehe gerade, dass ich im Schaltplan die Heizpatrone und die Nulldurchgangserkennung direkt an den L (vor dem LSS) angeschlossen habe - sorry, das ist falsch, sowohl die Heizpatrone als auch die Nulldurchgangs-Erkennung sind über den Leitungsschutzschalter abgesichert.
:
Bearbeitet durch User
Ich würde erst einmal die Verdrahtung ändern. Kurze Verbindungen, zentraler Punkt für GND.
:
Bearbeitet durch User
Ich empfehle darüber hinaus 1,5k Ohm Pull-Up Widerstände am I2C Bus und Snubber entweder an den Kontakten der Relais oder (besser) parallel zur Last.
Beitrag #7739959 wurde vom Autor gelöscht.
M. B. schrieb: > 1. Sobald ich die Heizung einschalte, bricht nach einiger Zeit die > Übertragung der Messwerte an den PC ab. Was heißt das konkret? Nach welcher Zeit? Fällt das mit einem Schalten des Relais zusammen? > ganze Zeit Daten zum PC, aber irgendwann stoppt die Übertragung einfach > und es kommen keine neuen Daten mehr an. Der Arduino ist nach wie vor am > PC als COM-Port sichtbar. Klingt nach Softwarefehler in deinem Arduino. > Wenn ich das USB-Kabel ziehe, wieder einstecke und anschließend die > Verbindung im Terminal neu aufbaue, kommen auch wieder Daten an. Da macht mindestens der USB-Teil einen Reset, ggf. sogar der ganze Arduino. > Manchmal passiert dies 30 Sekunden nach dem Start der Messung, manchmal > dauert es mehrere Minuten. Wie oft schaltet das Relais für die Heizung? > 2. Es kommt ab und zu vor, dass die Anzeige auf dem Display einfriert > und nicht mehr aktualisiert wird. Ich kann das Menü aber nach wie vor > "blind" mit dem Encoder bedienen. Wenn ich z.B. blind zu dem Menüpunkt > zum Ausschalten der Heizung navigiere, kann ich die Heizung auch > ausschalten. Also klemmt der USB Teil und der Rest läuft weiter. > Wenn ich den Arduino resette, bleibt die Anzeige nach wie vor > eingefroren. Ich muss das Display (bzw. den Arduino und das Display) > komplett stromlos machen und anschließend wieder einschalten, damit das > Display wieder funktioniert. Dann hast du ein Initialisierungsproblem in deiner Software, > 3. Selten (ca. alle 5-10 Minuten) erhalte ich mal einen falschen > Temperaturwert von einem der PT100 - wenn die Temperatur normalerweise > bei 90 Grad liegt, bekomme ich bspw. auf einmal einen Wert von 714 Grad > angezeigt. Das kann ein Störpuls am Analogteil oder SPI sein. > Ich habe mal mein Oszilloskop an die Signalleitungen geklemmt und konnte > beim Einschalten des Relais massive Störimpulse messen. Im Anhang > beispielhaft drei Screenshots, bei denen ich die USB-Leitungen gemessen > habe. Man sieht, dass hier kurzzeitig die komplette Datenübertragung > gestört wird. Ähnliche Störungen sind auch auf den I2C-Leitungen > vorhanden. Wie hast du das GENAU gemessen? https://www.mikrocontroller.net/articles/Oszilloskop#Tastk%C3%B6pfe_richtig_benutzen > Die Störungen treten beim EINschalten des Relais auf, beim Ausschalten > triggert mein Oszilloskop nicht. Der Kontakt prellt. > Folgendes habe ich versucht, um das Problem in den Griff zu bekommen: > - Leitung vom Relais zur Heizpatrone (ca. 1,5 m) mit Alufolie umwickelt > und diese mit PE oder GND verbunden - keine Veränderung Ist nicht sinnvoll. Wenn man schirmen will, muss die Schirmung auch auf ein Potential gelegt werden, meist PE oder GND. > - Ich habe versucht, das Relais mit Alufolie/Metallplatten, die ich mit > PE verbunden habe, abzuschirmen - keine Änderung ;-) Die Störungen breiten sich hier eher über die Kabel aus. > - Austausch des Relais durch ein SSR - die oben beschriebenen Probleme > treten nach wie vor auf, Merkwürdig. SSR prellen nicht. Allerdings schalten die je nach Typ im Nulldurchgang der Spannung oder bei beliebiger Phasenlage. > - Anfangs habe ich einen Relaissockel von Phoenix Contact (2903362) > verwendet, welcher laut Datenblatt 6 A schafft. Diesen habe ich durch > ein Wago 788-311 ersetzt, welcher laut Datenblatt 8 A schafft (ist auch > auf dem Bild im Anhang zu sehen, das Phoenix Relais links daneben ist > das zur Sicherheitsabschaltung) - keine Änderung Nutzlos. > - Snubber über die Relaiskontakte abgebracht (Versuch 1: 100 Ohm/100 nF, > Versuch 2: 50 Ohm (2x100 Ohm parallel)/220 nF) - keine Veränderung Hmm, merkwürdig. > - Heizpatrone testweise abgeklemmt, nur noch die Leitung zur Heizpatrone > ist am Relais angeschlossen (keine Last) - massive Verbesserung, aber > selten kommt es doch noch zu Ausfällen Ein Indiz, daß da noch was faul ist. > - 22 pF Kondensatoren nach GND in die I2C-Leitungen geschaltet + 5V > direkt am Display mit 100 uF gepuffert - spürbare Verbesserung, aber > nach wie vor häufige Ausfälle Schon mal gut, kann man bis 100pF hochgehen. > - Pi-Filter in die USB-Leitung eingeschliffen (ich weiß, keine gute > Idee) - Arduino wird am PC nicht erkannt, Deskriptor kann nicht > abgerufen werden Das ist Unsinn. > sonst noch tun kann. Würde eine geschirmte Leitung zur Heizpatrone evtl. > etwas bringen? Eher nicht. > besonders gut dämpft. Die Störungen an der Quelle einzudämmen erscheint > mir zielführender, als es mit Filtern zu versuchen. Das ist der Idealfall in Lehrbuch, den man aber oft nicht erreicht. Ich glaube eher, daß deine Störsenke, der Arduino mit seinem Drumherum zu empfindlich ist. Man muss herausfinden, warum das so ist und Gegenmaßnahmen treffen. > Ich habe den Eindruck, dass es am Prellen der Relaiskontakte liegt. Vermutlich. > Gleichzeitig frage ich mich aber, warum das SSR hier für keine Besserung > gesorgt hat. Gute Frage. Du hast schon sehr viel gemacht. Dein Aufbau sieht erstmal gut aus. Aber hier noch ein paar Anmerkungen. Die Ausgangsmasse vom Netzteil sollte geerdet sein, sprich mit PE verbunden. Deine Sensoren soltlen nur über das Kabel zum Arduino geerdet sein, nicht zusätzlich irgendwo mit einem Kabel (sternförmige Erdung) Du solltest eine Status-LED auf dem Arduino reglemäßig blinken lassen, wenn deine Sendefunktion zum USB aktiv ist. Damit sieht man, ob die noch läuft oder nicht. Dein Kabel mit SPI zu den ADCs ist schon recht lang, das kann schief gehen. Hier sollte man mindestens eine Serienterminierung für SCK vorsehen, siehe Wellenwiderstand. Prüfe, ob du den richtigen SPI-Mode eingestellt hast. Manchmal läuft das auch sehr grenzwertig und instabil mit dem falschen Modus. Zum Testen sollte man die Störung STÄRKER machen. Sprich, schalte das Relais oft, sagen wir mit 0,5 Hz. Schalte wenn möglich einen stärkere Last. Dadurch provoziert man den Fehler leichter und häufiger und kann einfacher und schneller Gegenmaßnahmen prüfen. Beobachte, wann die Funktionsstörung auftritt. Dein Display braucht keine 100uF, das ist zuviel und nur bedingt HF wirksam. Nimm dort einen 100nF Keramikkondensator. Den Snubber über dem Relaiskontakt sollte man behalten, dort ist er optimal.
In der Software sollte man prüfen, ob das Display noch auf den I2C Zugriff reagiert. Wenn nein, muss man einen Softwarereset des Displays machen. Im Extremfall, wenn das allein nicht reicht, muss man dessen Stromversorgung vom Arduino schaltbar machen und einen Hardwarereset machen. Das ist zumindest ein Workaround fpr den Fall, daß man die Störung nicht bedämpfen kann.
Erstmal vielen Dank für die bisherige Beteiligung. Der Elektronikaufbau steht gerade im Nachbarort, ich schaue, dass ich ihn bis morgen hier herhole, um die Vorschläge testen zu können. Jörg R. schrieb: > Ich würde erst einmal die Verdrahtung ändern. Kurze Verbindungen, > zentraler Punkt für GND. Ich werde schauen, wo ich hier noch optimieren kann. Aktuell sitzt auf dem Arduino eine Aufsteckplatine und alle Sensoren, das Display, das Relais etc. sind dort mittels Steckverbinder angeschlossen und bekommen dort auch ihre Masse und Versorgung. Einzige Ausnahme ist aktuell die Schaltung für die Nulldurchgangserkennung ganz rechts im Bild. Ich kann bei Bedarf ein besseres Bild nachliefern, sobald der Aufbau hier ist. Monk schrieb: > Ich empfehle darüber hinaus 1,5k Ohm Pull-Up Widerstände am I2C Bus und > Snubber entweder an den Kontakten der Relais oder (besser) parallel zur > Last. Im Schaltplan sind 4,7k als Pullup beim I2C eingezeichnet, aber der Feuchtigkeitssensor und das Display sind "Breakout-Boards", auf denen ebenfalls nochmal Pullups sitzen. Ich müsste mal die resultierenden Pullup-Widerstände mit dem Multimeter nachmessen. Snubber habe ich aktuell parallel zu den Relaiskontakten, parallel zur Last habe ich tatsächlich noch nicht getestet. Werde ich ausprobieren. Falk B. schrieb: > Was heißt das konkret? Nach welcher Zeit? Fällt das mit einem Schalten > des Relais zusammen? Der Ausfall fällt definitiv mit dem Schalten des Relais zusammen. Manchmal kommt es 10 Sekunden nach dem Einschalten der Heizung zu einem Ausfall, manchmal erst nach einigen Minuten, ein Muster erkenne ich nicht. Lasse ich die Heizung ausgeschaltet, funktionieren sowohl Kommunikation als auch Display dauerhaft problemlos. Falk B. schrieb: > Klingt nach Softwarefehler in deinem Arduino. > >> Wenn ich das USB-Kabel ziehe, wieder einstecke und anschließend die >> Verbindung im Terminal neu aufbaue, kommen auch wieder Daten an. > > Da macht mindestens der USB-Teil einen Reset, ggf. sogar der ganze > Arduino. Der Arduino macht definitiv keinen Reset, die Heizung bleibt eingeschaltet und der PID-Regler regelt weiterhin. Dass der USB-Teil einen Reset macht, ist aber gut möglich. Falk B. schrieb: > Wie oft schaltet das Relais für die Heizung? Die Periodendauer beträgt eine Sekunde, der PID-Regler gibt eine Einschaltdauer von 0-1000 ms vor. Werte unter 50 ms ignoriere ich in der Software (Relais wird nicht eingeschaltet), weil es in meinen Augen keinen Sinn macht, ein mechanisches Relais nur so kurz einzuschalten. Falk B. schrieb: > Wie hast du das GENAU gemessen? > > https://www.mikrocontroller.net/articles/Oszilloskop#Tastk%C3%B6pfe_richtig_benutzen Guter Punkt. Ich habe die Masse mit der Krokodilklemme vom Tastkopf abgegriffen, was natürlich nicht optimal ist. Ich werde die Messung mit einer Massefeder wiederholen und auch den Tipp mit der GND-Messung anwenden. Falk B. schrieb: >> Folgendes habe ich versucht, um das Problem in den Griff zu bekommen: >> - Leitung vom Relais zur Heizpatrone (ca. 1,5 m) mit Alufolie umwickelt >> und diese mit PE oder GND verbunden - keine Veränderung > > Ist nicht sinnvoll. Wenn man schirmen will, muss die Schirmung auch auf > ein Potential gelegt werden, meist PE oder GND. Ich habe die Alufolie mittels Krokokabel auf PE und GND gelegt (das meinte ich in dem von dir zitierten Teil), beides hat für keine merkliche Besserung gesorgt. Falk B. schrieb: >> - Snubber über die Relaiskontakte abgebracht (Versuch 1: 100 Ohm/100 nF, >> Versuch 2: 50 Ohm (2x100 Ohm parallel)/220 nF) - keine Veränderung > > Hmm, merkwürdig. Falk B. schrieb: >> Gleichzeitig frage ich mich aber, warum das SSR hier für keine Besserung >> gesorgt hat. > > Gute Frage. Ich sehe schon, ich sollte das SSR nochmal einbauen und Messungen mit dem Oszilloskop machen. Es ist leider eines dieser "China 40 A SSRs" (siehe Bild im Anhang), aber das sollte jetzt erstmal keine Rolle spielen. Klicken tut es jedenfalls nicht :D Falk B. schrieb: > Die Ausgangsmasse vom Netzteil sollte geerdet sein, sprich mit PE > verbunden. Ich habe mal das Blockdiagramm des Netzteils aus dem Datenblatt angehängt. Hier ist ein Kondensator von GND nach PE eingezeichnet, eine gewisse Filterung sollte also schon vorhanden sein. Ich klemme GND aber testweise mal direkt auf PE. Falk B. schrieb: > Deine Sensoren soltlen nur über das Kabel zum Arduino geerdet sein, > nicht zusätzlich irgendwo mit einem Kabel (sternförmige Erdung) Ich werde prüfen, ob das wirklich überall der Fall ist und ggf. Anpassungen vornehmen. Falk B. schrieb: > Du solltest eine Status-LED auf dem Arduino reglemäßig blinken lassen, > wenn deine Sendefunktion zum USB aktiv ist. Damit sieht man, ob die noch > läuft oder nicht. Das ist eine gute Idee, werde ich so umsetzen. Falk B. schrieb: > Dein Kabel mit SPI zu den ADCs ist schon recht lang, das kann schief > gehen. Hier sollte man mindestens eine Serienterminierung für SCK > vorsehen, siehe Wellenwiderstand. > Prüfe, ob du den richtigen SPI-Mode eingestellt hast. Manchmal läuft das > auch sehr grenzwertig und instabil mit dem falschen Modus. Serienterminierung werden ich so umsetzen, ggf. kann ich auch das Kabel kürzer machen. Für die MAX31865 verwende ich eine fertige Bibliothek von Adafruit, ich werde prüfen, welcher SPI-Modus hier verwendet wird und ob es zum Datenblatt des MAX31865 passt. Falk B. schrieb: > Zum Testen sollte man die Störung STÄRKER machen. Sprich, schalte das > Relais oft, sagen wir mit 0,5 Hz. Schalte wenn möglich einen stärkere > Last. Dadurch provoziert man den Fehler leichter und häufiger und kann > einfacher und schneller Gegenmaßnahmen prüfen. > Beobachte, wann die Funktionsstörung auftritt. Das klingt sinnvoll, werde ich so machen. Evtl. finde ich noch eine zusätzliche Last, die ich zur Heizpatrone parallelschalten kann. Falk B. schrieb: > Dein Display braucht keine 100uF, das ist zuviel und nur bedingt HF > wirksam. Nimm dort einen 100nF Keramikkondensator. Falk B. schrieb: > Schon mal gut, kann man bis 100pF hochgehen. Werde ich beides entsprechend abändern. Falk B. schrieb: > In der Software sollte man prüfen, ob das Display noch auf den I2C > Zugriff reagiert. Wenn nein, muss man einen Softwarereset des Displays > machen. Im Extremfall, wenn das allein nicht reicht, muss man dessen > Stromversorgung vom Arduino schaltbar machen und einen Hardwarereset > machen. Das ist zumindest ein Workaround fpr den Fall, daß man die > Störung nicht bedämpfen kann. Auch hier verwende ich eine fertige Bibliothek von Adafruit. Ich werde prüfen, ob das ACK/die Antworten vom Display überprüft werden und ob ich ggf. eine Funktion zum Resetten einbauen kann. Einen Hardwarereset sehe ich als letzte Möglichkeit an, vielleicht schaffe ich es ja auch ohne. Wenn es nicht klappt, muss es aber wohl sein. Schon mal vielen Dank für die vielen Hinweise. Ich kümmere mich darum, dass ich den Aufbau in die Finger bekomme und werde zeitnah Rückmeldung geben, sobald es neue Erkenntnisse gibt.
Besorg dir USBDeviceView von Uwe Sieber. Dann kontrolliere ob nach einem USB Absturz noch die die Deskriptoren geliefert werden. Sollten die kommen funktioniert USB und die Bulkpuffer sind festgefahren. Das kann auch an einer schlechten VCP Implementierung liegen. Gibt es sowas wie flush?
Zu viel Text. Viel zu viel lange Kabel die als Antenne sich gegenseitig beinflussen können. Die Relais sind nicht sichtbar. Getrennte Kabelführung zu dem Poti und "Hochstrom" Schaltern sehe ich nicht ....
Chris K. schrieb: > Viel zu viel lange Kabel die als Antenne sich gegenseitig beinflussen Blödsinn. Aber Hauptsache geschwätzt. > können. Die Relais sind nicht sichtbar. > Getrennte Kabelführung zu dem Poti und "Hochstrom" Schaltern sehe ich > nicht .... Weil du blind bist.
Offenbar fängst Du Dir Störungen vom Laststromkreis (logisch), aber auch von der Relaisansteuerung (!) ein. Letzteres wird ersichtlich durch den Versuch mit abgeklemmter Last. Ich würde mir die Relaisansteuerung nochmal genauer anschauen (Funktioniert die angeblich im Sockel eingebaute Diode wirklich?), und die 12V-Versorgung für die Logikschaltkreise vorm Arduino über ein LC-Filter führen. Danach dann auf ordentliche Masseführung achten, und alle Leitungen (auch die +5V-Versorgung) weit weg von den mutmaßlich "verseuchten" 12V und Netzleitungen. D.h. Dein gemischter Niederspannungkabelkanal mit Logikleitungen zum Dreh-Encoder und Relaisansteuerung schön parallel geführt ist vermutlich nicht die beste Idee. PS: die USB-Messungen zeigen zwar, dass die Kommunikation genau dann abzureißen scheint (Stoerungen_USB_2.png), aber die gemessene Störung ist im Gleichtakt auf beiden Busleitungen. Sehr wahrscheinlich ist das ohnehin nur ein Artefakt Deiner Messstrippen - aber selbst wenn es wirklich so auf dem Busleitungen liegt, würde es den USB-Bus nicht durcheinanderbringen. Genau deswegen benutzt man dort ein symmetrisches Signal.
:
Bearbeitet durch User
Monk schrieb: > Ich empfehle darüber hinaus 1,5k Ohm Pull-Up Widerstände am I2C > Bus und > Snubber entweder an den Kontakten der Relais oder (besser) parallel zur > Last. Das ist m.E. die vordringlichste Massnahme. Der häufigste Fehler bei I2C-Problemen sind die Pullups, weil viele den I2C-Bus nicht verstehen. Bei 3V3 kann man mit den Pullups (Geamtwert) sogar bis auf 1 k heruntergehen, siehe Bild
:
Bearbeitet durch User
L.S. schrieb: > Das ist m.E. die vordringlichste Massnahme. Der häufigste Fehler bei > I2C-Problemen sind die Pullups, weil viele den I2C-Bus nicht verstehen. So wie du EMV nicht verstehst. Für eine HF-Störung ist der Unterschied zwischen 5k und 1k Pull Up Widerstand sehr gering. Die deutlich größere Wirkung erzielt man dabei mit einem Kondensator, denn der ist um GRÖßENORDNUGNEN niederohmiger im entscheidenden Frequenzbereich. Der liegt nicht bei ein paar kHz sondern einigen MHz.
1 | XC = 1/(2*Pi*f*C) = 1/(2*Pi*10MHz*100pF) = 160 Ohm |
Dort kommt man mit niederohmigen Pull Ups nicht mal ansatzweise hin, schon gar nicht bei höheren Frequenzen.
M. B. schrieb: > Folgendes habe ich versucht, um das Problem in den Griff zu bekommen: > - Leitung vom Relais zur Heizpatrone (ca. 1,5 m) mit Alufolie umwickelt Versuche doch einmal einen anderen Stromkreis für die Heizpatrone zu nehmen, als für dein Netzteil. Dann dickere Kabel an die Heizpatrone. Dicke Kondensatoren am Ausgang vom Netzteil.
Beitrag #7740482 wurde vom Autor gelöscht.
M. B. schrieb: > Weiter Hinweis: In den Relaissockeln sind bereits Freilaufdioden > integriert, deshalb habe ich diese nicht in den Schaltplan > eingezeichnet. Das ist kein Grund, die Freilaufdioden im Schaltplan zu verschweigen. Gerade, wenn es um Störungssuche geht, sind die essenziell. Dazu wären auch Angaben zu der Höhe der geschalteten Ströme hilfreich. Der Schaltplan soll zeigen, wie die Schaltung aufgebaut ist und nicht, welche Modules es gibt. Das ist der Unterschied zwischen Schaltplan und Blockschaltbild.
:
Bearbeitet durch User
Rainer W. schrieb: > Das ist kein Grund, die Freilaufdioden im Schaltplan zu verschweigen. > Gerade, wenn es um Störungssuche geht, sind die essenziell. Dazu wären > auch Angaben zu der Höhe der geschalteten Ströme hilfreich. Versuchs mal mit Lesen und dem ohmschen Gesetz. > Der Schaltplan soll zeigen, wie die Schaltung aufgebaut ist Das tut er!
So, ich habe die Holzplatte mit der Elektronik heute morgen zu mir geholt und es gibt neue Erkenntnisse. Als erstes habe ich mit dem Oszilloskop und einem Tastkopf mit Massefeder (ohne Krokoklemme) gegen GND gemessen und die Heizung eingeschaltet. Hierbei konnte ich keine Störungen auf dem Oszilloskop erkennen - Einkopplungen in die Tastkopfleitung sollten also nicht vorhanden sein. Anschließend habe ich nochmal die Störungen beim Einschalten des Relais auf den USB- und I2C-Leitungen gemessen, ebenfalls mit der Massefeder. Screenshots vom Oszi habe ich angehängt, die gelbe Linie ist jeweils das USB/I2C-Signal und die violette Linie die 230V, die vom Relais geschalten werden. Ich denke, damit ist auf jeden Fall klar, dass die Störungen beim Einschalten des Relais das Problem sind. Auch auf die 5V Versorgung koppeln die Störungen ein. Anschließend habe ich nochmal das SSR eingebaut und die Messungen wiederholt. Hierbei konnte ich überhaupt keine Störungen auf dem Oszilloskop erkennen, was mich überrascht hat, weil ich mit dem SSR, wie oben beschrieben, ebenfalls Probleme hatte. Auf der anderen Seite macht es aber natürlich Sinn, dass ich mit dem SSR keine Störungen habe, weil dieses nicht prellt und zusätzlich im Nulldurchgang eingeschaltet wird. Das war schließlich auch der Grund, weshalb ich überhaupt auf die Idee gekommen bin, das SSR einzubauen. Die Screenshots habe ich ebenfalls wieder angehängt. Nun habe ich mit dem SSR nochmal einen Dauerlauf gestartet - Arduino an den PC gehängt, Terminal geöffnet, 70 Grad als Zieltemperatur eingestellt und die Heizung aktiviert. Der Arduino hat die Temperatur geregelt und das SSR wurde jede Sekunde ein- und ausgeschaltet. Nach kurzer Zeit (ca. vier Minuten) ist wieder das Display ausgestiegen (Anzeige eingefroren), aber die USB-Kommunikation hat die ganze Zeit (gute zwei Stunden) problemlos funktioniert und ich hatte keinen Ausfall. Komische Temperaturwerte hatte ich ebenfalls nicht. Ich habe im Kopf, dass ich bei meinem ersten Versuch mit dem SSR auch Probleme mit dem USB hatte, aber es kann gut sein, dass ich den Test beim ersten Versuch direkt abgebrochen habe, als das Display eingefroren ist, und ich das jetzt durcheinanderbringe. Deshalb: Immer alles dokumentieren und nicht "mal eben schnell" etwas ausprobieren - hier habe ich wahrscheinlich etwas schludrig gearbeitet, mein Fehler. Durch den Test von oben habe ich das Gefühl, dass das Problem mit dem Display eher softwarebedingt ist, ich werde aber trotzdem mal die 100 pF Kondensatoren an SDA und SCL hängen und den 100 uF Kondensator durch 100 nF ersetzen. Auch die Pullups werde ich nochmal überprüfen und ggf. verkleinern, mir ist aufgefallen, dass die Anstiegsflanken auf dem Oszi nicht so klasse aussehen. Falls das nicht hilft, schaue ich mir die Software nochmal genauer an. Ich will mich noch nicht zu früh freuen und ich werde noch einige Tests machen, aber aktuell sieht es so aus, dass es mit dem SSR entgegen meinem ersten Test doch (fast) zuverlässig funktioniert. Ich werde auf jeden Fall ein Update geben, wenn es Neuigkeiten gibt :-) Danke an alle, die Gedanken gemacht haben und Hinweise gegeben haben. Ich wünsche noch einen schönen Sonntag Abend.
und hast Du jetzt auch mal die Pullups auf 1k geändert und gemessen?
Hast du eigentlich einmal den Strom gemessen oder zumindest zusammen gerechnet. Bei dem ganzen Zeug, was du da dran hast, sind die 1,3A nicht gerade überschwänglich viel Strom.
M. B. schrieb: > Anschließend habe ich nochmal die Störungen beim Einschalten des Relais > auf den USB- und I2C-Leitungen gemessen, ebenfalls mit der Massefeder. Und wo hast du die Massefeder kontaktiert? Denn wenn du wissen willst, wa das jeweilige Bauteil "sieht", musst du direkt am IC den Signalpin kontaktieren und direkt an selben IC den nächstgelegenen Massepunkt. Dann siehst du auf dem Oszi, was das IC auch sieht. > mal die 100 pF Kondensatoren an SDA und SCL hängen Das ist wildes Gebastel. Besser als das Beschönigen von Symptomen ist die Behebung der Ursache. > Auch auf die 5V Versorgung koppeln die Störungen ein. Miss mal "Masse gegen Masse" also die Masseklemme des Oszis an einen Massepunkt (z.B. am µC) und die Messpitze an einen anderen Massepunkt (z.B. am I²C-Device). Im Idealfall solltest du dann (wegen Masse = Masse) immer einen geraden Strich bei 0V auf dem Oszi sehen. Was siehst du tatsächlich? Wenn da genau dasselbe wilde Gezappel zu sehen ist, dann hast du einfach nur eine schlechte Masseführung. > will mich noch nicht zu früh freuen und werde noch einige Tests machen Das solltest du tun, denn deine Schaltung ist ja nicht nur auf die Störungen sensibel, die sie selber produziert, sondern natürlich auch auf die, die von aussen kommen. Ich mache da immer so einen einfachen Burst-Test mit einem "Kerbl Handyshock" Nachbau, wie im Beitrag "Re: Tiefentladungsschutz mit Attiny und P-Kanal Fet" beschrieben. Wenn das gut geht, dann ist meine Schaltung ordentlich aufgebaut. Die rustikalere Variante eines solchen Tests ist im selben Thread weiter unten im Beitrag "Re: Tiefentladungsschutz mit Attiny und P-Kanal Fet" beschrieben. Aber eines ist sicher: dein störempfindlicher Aufbau wird keinen dieser Tests fehlerfrei bestehen.
:
Bearbeitet durch Moderator
Stephan S. schrieb: > und hast Du jetzt auch mal die Pullups auf 1k geändert und gemessen? Das wollte ich gerade tun und dabei ist mir folgendes aufgefallen: - Am Arduino habe ich - wie im Schaltplan eingezeichnet - 4,7 kOhm Pullups vorgesehen - Der Feuchtesensor verfügt über zwei 10 kOhm Pullups nach VCC, die bereits auf dem Breakout-Board installiert sind - Auf der Platine des OLED-Displays ist ein 3,3 V Spannungsregler vorgesehen, welcher aus den 5V die Versorgung für das Display generiert. Offensichtlich verträgt dieses nur 3,3 V. Zusätzlich gibt es zwei 10 kOhm Pullups, die aber gegen 3,3 V und nicht gegen 5 V geschaltet sind. -> Das ist natürlich Murks, so arbeiten die Pullups gegeneinander. Nachdem ich nochmal mit dem Oszi nachgemessen habe, habe ich festgestellt, dass ich nur 4 V Signalpegel auf dem I2C-Bus habe. Bevor ich jetzt die Pullups verändere, baue ich erstmal einen Pegelwandler zwischen Display und Arduino ein, damit die Pegel sauber sind. Anschließend gehe ich mal mit den Pullups weiter runter. Frank O. schrieb: > Hast du eigentlich einmal den Strom gemessen oder zumindest zusammen > gerechnet. Bei dem ganzen Zeug, was du da dran hast, sind die 1,3A nicht > gerade überschwänglich viel Strom. Ich habe gerade nachgemessen, der Stromverbrauch auf der 12V Seite beträgt 90 mA bei eingeschaltetem Relais. Die 1,3 A sollten also auf jeden Fall ausreichen. Lothar M. schrieb: > Und wo hast du die Massefeder kontaktiert? Beim I2C habe ich die SDA/GND bzw. SCL/GND Pins direkt am Display verwendet, beim USB bin ich auf die ESD-Schutzdioden hinter der Buchse gegangen. Auch hier die Tastspitze auf das USB-Signal und die Massefeder an das direkt gegenüberliegende GND-Pad von dem Dioden-IC. Lothar M. schrieb: > Miss mal "Masse gegen Masse" also die Masseklemme des Oszis an einen > Massepunkt (z.B. am µC) und die Messpitze an einen anderen Massepunkt > (z.B. am I²C-Device). Einen so großen Abstand kann ich mit dem Tastkopf und der Massefeder nicht überbrücken, hiermit kann ich nur benachbarte Pins messen. Oder ist es ok, wenn ich an der Tastspitze einen kurzen Draht anbringe, um zum Display zu gelangen?
M. B. schrieb: > Oder ist es ok, wenn ich an der Tastspitze einen kurzen Draht anbringe, > um zum Display zu gelangen? Du kennst diese üblichen Masseclips, die mit jedem Tastkopf ausgeliefert werden? Damit kann man gut 20cm überbrücken.
Lothar M. schrieb: >> Oder ist es ok, wenn ich an der Tastspitze einen kurzen Draht anbringe, >> um zum Display zu gelangen? > Du kennst diese üblichen Masseclips, die mit jedem Tastkopf ausgeliefert > werden? Damit kann man gut 20cm überbrücken. Genau DAS wollte er VERMEIDEN!
M. B. schrieb: > Ich habe gerade nachgemessen, der Stromverbrauch auf der 12V Seite > beträgt 90 mA bei eingeschaltetem Relais. Du hast noch ein Display dran, das, wenn ich mich recht erinnere, bis zu 300mA ziehen kann. Dein Arduino zieht mit Sicherheit auch schon mal kurzzeitig mehr. Beim Anziehen braucht dein Relais sicher auch deutlich mehr Strom, als im Betrieb. Und wer weiß, ob das überhaupt 1300mA bringt. Ich tippe immer noch auf das Netzteil.
Frank O. schrieb: > Du hast noch ein Display dran, das, wenn ich mich recht erinnere, bis zu > 300mA ziehen kann. So ein Käse. Außerdem zieht das keine 300mA bei 12V. > Dein Arduino zieht mit Sicherheit auch schon mal > kurzzeitig mehr. Nö, warum auch? >Beim Anziehen braucht dein Relais sicher auch deutlich > mehr Strom, als im Betrieb. Schon wieder falsch! Relais haben keinen Einschaltstrompuls! > Und wer weiß, ob das überhaupt 1300mA bringt. > Ich tippe immer noch auf das Netzteil. Was für ein sinnloses Gelaber!
Falk B. schrieb: > Genau DAS wollte er VERMEIDEN! Genau DAS ist mir schon klar, aber man kann ja auch einfach mal als *1. Schritt* und Bezugsmessung die lange Masseklemme und die Prüfspitze an exakt den selben Massepunkt in der Schaltung halten und sehen, was dann einkoppelt (das sind die Funkstörungen, die in diese "Tastkopfschleife" einstrahlen). Und dann kann man im *2. Schritt* die Masseklemme an der selben Stelle lassen und mit der Spitze andere Massepunkte messen. Wenn dann immer noch dasselbe wie bei der 1. Messung zu sehen ist, dann ist die Masse tadellos. Wenn mehr Störungen zu sehen sind, dann kommen die mit hoher Wahrscheinlichkeit von Strömen, die sich auf der weit verstreuten Masse tummeln. M. B. schrieb: > Es kommt ab und zu vor, dass die Anzeige auf dem Display einfriert Nicht zu selten kommen solche Fehler als Folgefehler: weil vorher auf irgendeinem anderen Portpin eine Störung aufgetreten ist, tut die Software als Reaktion auf diese Störung irgendwas Anderes und hat a) keine Zeit mehr für den Rest oder b) beginnt eine Aktion, die natürlich nicht weitergeht. Die allermeisten "abgestürzten" Programme laufen mit Vollgas in einer endlosen Scheife mit irgendeiner Abfrage und warten darauf, dass eine externe oder interne Hardware etwas tut, was nie kommen wird. Frank O. schrieb: > Ich tippe immer noch auf das Netzteil. Ich tippe immer noch auf die nicht ungeplante Masseführung, Und die insgesamt vogelwilde Verkabelung. Vermutlich in Zusammenhang mit einer nicht ausreichend gegen Störungen resistenten Software. Denn alle 3 beschriebenen Fehler deuten darauf hin, dass die Software "im Prinzip" weiterläuft, aber nicht in der Lage war, die aufgetretenen Störungen zu behandeln.
:
Bearbeitet durch Moderator
Schwarz, rot, rosa, weiß gehen zu den beiden Relais, wenn man das auf dem Foto so interpretieren mag und verschwinden im Kabelkanal. (Foto ist immer schlecht zu deuten, is ja klar) Wo kommen die wieder raus und wo sind die angeschlossen? Der kleine gelochte Kasten scheint das Netzteil zu sein. Mit schwarz und gelb (statt rot und schwarz). Das geht genau wohin? Nimm dir doch bitte mal n A3 Blatt, Lineal, Bleistift und Radiergummi und zeichne das in geraden Strichen genau so auf, wie der tatsächliche Verlauf deiner Verdrahtung aussieht. Dann sieht man unter Umständen sofort, wo die Ströme nicht nur hin - sondern auch zurückfließen. Nütz ja kein Mustergültiger Aufbau mit adernendhülsen usw. Wenn die umspannten Leiterflächen da n halben Quadratmeter am Ende umspannen und die Masseleitungen samba tanzen. Bei Schaltreglern werden diese Stromschleifen/Flächen hier im Forum immer gern eingezeichnet. Wundere mich, diesen Hinweis hier noch nicht gelesen zu haben. Würde ich hier auch mal einzeichnen. Das einzige, was klickt und Last abwirft, sind die Relais. Deren Rückleitung muss direkt zum Netzteil verlegt werden. Da darf kein anderer Strom drüber fließen. Bei so einer Zeichnung kann man dann den Kabelkanal auch so breit zeichnen, dass alle Kabel nebeneinander laufen und man man kann den Deckel quasi weglassen. Ist ne scheissarbeit, das zu zeichnen, hilft aber ungemein. Vielleicht in Zukunft (für andere, wenn nicht für sich selbst) sinnvolle Kabelfarben verwenden und nicht die vier Farben, die man gerade zur Hand hat. Das Netzteil reicht ja wohl dicke aus. Verstehe die Diskussion darum garnicht. Liegt definitiv an der Leitungsführung.
https://docs.arduino.cc/resources/schematics/ABX00080-schematics.pdf Was steckt denn da noch oben auf dem Arduino für’n „shield“ drauf? Gibt’s da auch nen Link dazu?
M. B. schrieb: > Nachdem ich nochmal mit dem Oszi nachgemessen habe, habe ich > festgestellt, dass ich nur 4 V Signalpegel auf dem I2C-Bus habe. Dem Arduino UNIO reichen sogar 3,3 Volt aus. Es könnte aber sein, dass dein Display es gar nicht gerne hat, wenn seine I/O Pins auf außerhalb der Spezifikation (mehr als 3,8 Volt) hoch gezogen werden. Ändere die Schaltung so, dass alle Pull-Ups auf 3,3V ziehen. Der Feuchtesensor kann laut Datenblatt mit 3,3V betrieben werden. Ich weiß aber nicht, was die auf deinem Modul noch drum herum gebaut haben.
:
Bearbeitet durch User
Falk B. schrieb: > So ein Käse. Außerdem zieht das keine 300mA bei 12V. Stand bei den OLED im Datenblatt. Allerdings habe ich das auch nie messen können. Falk B. schrieb: > Schon wieder falsch! Relais haben keinen Einschaltstrompuls! Asche auf mein Haupt. War völliger Quatsch. Dann halte ich mal die Finger still und bin gespannt was dabei rauskommt. Lothar M. schrieb: > Frank O. schrieb: >> Ich tippe immer noch auf das Netzteil. > Ich tippe immer noch auf die nicht ungeplante Masseführung, Und die > insgesamt vogelwilde Verkabelung. Das sicher auch. Ich bin gespannt.
Falk B. schrieb: > In der Software sollte man prüfen, ob das Display noch auf den I2C > Zugriff reagiert. Wenn nein, muss man einen Softwarereset des Displays > machen. Im Extremfall, wenn das allein nicht reicht, muss man dessen > Stromversorgung vom Arduino schaltbar machen und einen Hardwarereset > machen. Das ist zumindest ein Workaround fpr den Fall, daß man die > Störung nicht bedämpfen kann. Hallo Falk! Das sind die Beiträge, die ich von dir gewohnt bin und auch schätze. Falk B. schrieb: > Was für ein sinnloses Gelaber! In letzter Zeit öfter so was. Klar, da hast du recht gehabt. Vor allem mit dem Relais. Aber was sollen solche Beleidigungen? Du hast auch keine Lösung und wir machen uns doch alle Gedanken, woran es liegen könnte. Dass ich dir in der Elektronik nicht das Wasser reichen kann und auch gar nicht möchte, sollte dir hinlänglich bekannt sein. Aber dennoch habe ich 37 Jahre Erfahrung in der Fehlersuche und da ist es sehr häufig die Stromversorgung. Bitte lass diese Art doch sein! Es steht dir nicht, denn damit machst du, zumindest bei mir, deinen guten Ruf kaputt.
Danke für die Beteiligung und die vielen Hinweise! Ich wollte nur kurz Bescheid geben, dass ich mitlese und den Thread hier nicht vergessen habe, aber gestern und heute leider keine Zeit hatte, an dem Projekt weiterzumachen. Ich denke, dass ich am Freitag oder am Wochenende etwas Zeit finden sollte und dann werde ich auf die Hinweise eingehen und Bilder/Informationen nachliefern. Bis dahin bitte etwas Geduld, Danke :-)
M. B. schrieb: > Bis dahin bitte etwas Geduld, Danke :-) Gibt keinen Zwang abzuliefern und schon gar nicht zeitlich. Aber schön wäre es trotzdem, wenn du dann was gefunden hast und uns das mitteilst.
Viel Lyrik hier. Bei der Sauerkrautverdrahtung würde ich mir ein paar Pfeile wünschen, wo genau man den Fehler gemessen hat. Ansonsten werfe ich mal die Worte Relais-Kontaktprellen und Snubber ein, wenn die 400W geschaltet werden. https://www.mikrocontroller.net/articles/Snubber
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.