Hallo, vor rund 14 Jahren habe ich u.a. mit Hilfe dieses Forums eine AVR µC Steuerung für die Warmwasseranlage incl. Sonnenkollektoren bei meinen Eltern realisiert. Es werden Temperaturen von 4 PT1000 Fühlern ausgelesen und abhängig von Prioritäten, die mit einem Schiebeschalter gewählt werden können, 3 Umwälzpumpen gesteuert. Das Ganze läuft seither recht zuverlässig aber ganz selten (1x pro Jahr) kann es vorkommen, dass die Anlage in einen undefinierten Zustand verfällt und bis zu einem manuellen Reset nicht mehr funktioniert. Das ist deshalb unangenehm, weil bei starker Sonneneinstrahlung die Wärme nicht mehr abtransportiert wird und die Flüssigkeit im Sonnenkolletor-Kreislauf teilweise verdampft und nur durch Entlüften der Anlage wieder der Normalzustand hergestellt werden kann. Eine Beschädigung der Anlage bei längerem Ausfall ist nicht auszuschliessen. Vor einigen Wochen kam dieser Zustand mehrmals hintereinander vor. Evtl hat ein Relais nicht mehr korrekt geschaltet. Da der Störfall normalerweise sehr selten eintritt und ich nicht vor Ort bin fällt es mir schwer festzustellen wo es genau hapert. Nach Installation der Schaltung vor 14 Jahren kam es bereits manchmal zu Hängern. Diese konnte ich nachträglich durch die interne Watchdog Schaltung des AVR abfangen. Die Anzahl der Resets werden im EEPROM gespeichert und können am LCD angezeigt werden. Es gibt lange Perioden in denen gar keine Resets vorkommen und dann können plötzlich mehrere Resets an wenigen Tagen eintreten. Zusätzlich kommt die Anlage sehr selten in den genannten Zustand in dem die interne Watchdog Schaltung nicht mehr funktioniert. Die erste Zeile des LCD wird schwarz, alle Pumpen stehen still und der µC reagiert nur noch auf manuellen Reset. Hier wäre eine externe Watchdog Schaltung natürlich besser gewesen, aber das wurde mir erst später klar. Meine Vermutung ist, dass die Schaltvorgänge der Relais diese Zustände hervorrufen. Wenn ich mit dem Schiebeschalter wild die Pumpen manuell an und aus schalte (Der Schiebeschalter legt den Transistor der das Relais ansteuert entweder an den µC-Ausgang, an GND oder an 5V) kommt es öfters zu Resets. Mit einem Uralt-Röhren-Oszi habe ich die 5V Versorgung angeschaut und gewisse Spannungsspitzen beim Umschalten entdeckt. Ich bin mir aber nicht ganz sicher ob es sich nicht auch um parasitäre Messfehler handeln kann. An einem 5V Steckernetzteil das Testweise am selben Netz angeschlossen wurde habe ich DC-seitig ähnliche Ausschläge gesehen. Was zusätzlich für die Relais als Störquelle spricht ist, dass Ausfälle meist an sonnigen Tagen vorkamen and denen vermutlich mehr Schaltvorgänge vorkommen. Zum Aufbau: Die Anlage besteht aus drei Platinen die mit Flachbandkabeln miteinander verbunden sind. 1. Netzspannungsplatine mit Spannungsversorgung und Pumpenrelais Ein 9V Trafo mit Gleichrichter und 4700µF Elko erzeugt ca 12-13V. Aus diesen wird mit 7809 die OP Spannung erzeugt und davon mit 7805 die restliche Logik versorgt. Die Spulen der Relais werden direkt mit den 12V versorgt um die Festspannungsregler nicht unnötig zu belasten. 2. Logikplatine mit AT90S8535 und Temperaturmessung Die 9V und 5V werden auf der Logikplatine mit Elko nochmals gepuffert. Vermutlich 47µF. Die Beschaltung des AVR ist nach Datenblatt mit externem Oszillator. Die Folienkondensatoren sind nahe an den Pins. Der PT1000 wird über eine H-Brücke und OP-Komparator ausgelesen. Der Temperaturbereich von -20°C bis 100°C wird recht linear auf 0-5V abgebildet. Dieses Analogsignal wird direkt am ADC des µC angelegt. Die BAT schützt den ADC vor Überspannung. 3. I/O Frontplatine mit 16x2 LCD, status LEDs und Schiebeschalter für Prioritätswahl und Wahl zwischen manueller und automatischer Pumpensteuerung Nun Endlich zu den Fragen: - Was kann eurer Meinung nach solche Aussetzer verursachen? - Sieht jemand Schwachpunkte, die die Schaltung störungsanfällig machen? - Würde es evtl helfen den µC noch mit schnellen KerKos zu puffern um Spitzen besser abzufangen? Als externe Sicherheitsschaltung werde ich mit einem Komparator einen Schmitt Trigger realisieren der über ein extra Relais die Kollektorpumpe bei Übertemperatur (>4.5V Analogsignal) aktiviert und bei 3V wieder deaktiviert, unabhängig davon was der µC macht. Ein Ausfall der Spannungsversorgung wird damit leider nicht abgedeckt weil ich den Schmitt Trigger mit den 5V versorgen werde und das Auslesen der Temperatur nur mit dem bestehenden Fühler möglich ist. Ein Überhitzen bei Ausfall des µC wird dadurch jedoch vermieden. Evtl könnte diese Schaltung auch gleich einen hard-reset des µC ausführen.
Treten die Störungen vom uC auch auf, wenn an den Relais keine Last hängt?
Beitrag #5028048 wurde vom Autor gelöscht.
https://de.wikipedia.org/wiki/Snubber Vielleicht könnte so etwas Abhilfe schaffen... Wie lang sind die Leitungen der Flachbandkabel etc?
CC schrieb: > Treten die Störungen vom uC auch auf, wenn an den Relais keine > Last hängt? Gute Frage. Werde ich kommendes Wochenende mal testen.
Axel Schindler schrieb: > Werde ich kommendes Wochenende mal testen Dann bring am Besten auch ein paar Fotos mit, vielleicht kann jemand damit etwas anfangen...
Ansonsten hier mein Vorschlag für einen externen Winz-Watchdog: Ein CD4060 mit Uhrenquarz, der in der Hauptschleife (nicht per ISR!) vom Mega am Resetpin zurückgesetzt wird. Einer der höherwertigen Ausgänge zieht dann über einen Open Collector Transistor die Reset Leitung des Mega auf low. Reset des LCD (sofern vorhanden) würde ich mit dem Reset des Mega verbinden. Noch ein Tipp: in main() immer alle globalen Variablen initialisieren, wenn du das nicht sowieso schon machst.
:
Bearbeitet durch User
> Pumpen stehen still und der µC reagiert nur noch auf manuellen Reset. > Hier wäre eine externe Watchdog Schaltung natürlich besser gewesen, aber > das wurde mir erst später klar. Wenn du damit recht haettest dann waere der AVR ein laecherlicher Witz der sofort in den Muelleimer gehoert. Ich erwarte von einem Watchdog das er einen Controller immer resetten kann. Ich wuerde vermuten das der Fehler in der Software liegt. Vermutlich gibt es einen Fehlerzustand der nicht erkannt wird und bei dem der Watchdog immer noch zurueckgesetzt wird. Olaf
olaf schrieb: > Ich erwarte von einem Watchdog das > er einen Controller immer resetten kann. Es gibt Leute, die meinen, dass er immer in einem Timer-IRQ zurückgesetzt werden muss, damit das auch sicher passiert ... Gruß Jobst
Die ATmega sind robuster, als die alten AT90Sxxxx. Es könnte daher was bringen, ihn durch den ATmega8535 zu ersetzen. Oder ATmega16, dann mußt Du aber das Programm neu compilieren.
Axel Schindler schrieb: > Das ist deshalb unangenehm, weil bei starker Sonneneinstrahlung die > Wärme nicht mehr abtransportiert wird und die Flüssigkeit im > Sonnenkolletor-Kreislauf teilweise verdampft und nur durch Entlüften > der Anlage wieder der Normalzustand hergestellt werden kann. Das wird wohl kein Dampf sein. Der müsste bei Abkühlung von selbst wieder in den flüssigen Aggregatzustand übergehen. Wahrscheinlich ist Luft in deinem Transportmedium gelöst.
Hat zwar nichts mit der Problemlösung zu tun: ich würde eventuell eine "Fall Back"Hardware Schaltung implementieren. Als z.B. bei kritischer Temperatur (Überwachung durch Komparator) eine der Umwälzpumpen aktivieren. Zum Problem: es scheinen ja die Schaltvorgänge (Relais) zu sein, die das Problem auslösen. Also würde ich als erstes dort ansetzen: 1.) Snubber an jedes Relais 2.) Alle IOs die an lange Leitungen hängen mit Seriewiderstand und evt Dioden schützen
Hallo! Ich würde auch mal gern meinen Senf dazugeben: Tippen würde ich mal auf ein Software-Problem. Ich halte es für möglich, dass es Zustände gibt, mit der die Software nicht umgehen kann. Diese Zustände treten anscheinend selten auf, oder eben in letzter Zeit auch öfter. Wenn die Häufigkeit des Fehlers mit der Häufigkeit des Schaltens steigt, sind es vielleicht die elektromagnetischen Wellen, die durch das Einschalten, bzw. Ausschalten entstehen. Möglicherweise ist der Kontakt in den Relais in die Jahre gekommen und durch den schlechten Kontakt wurden die EM-Wellen heftiger. Die EM-Wellen könnten dann an den Eingängen Spannungen hervorrufen, die das Programm nicht richtig auswertet. Z.B. könnte in eine While-Schleife eingestiegen werden, wo der Ausstieg falsch implementiert ist oder so. Kritisch sind oft Werte im Endbereich, z.B. 255 oder == Vergleiche (Z.B. steigt die while-Schleife aus, wenn der Wert einer Variable, die hochgezählt wird, genau 250 ist. Wenn die nun aus irgendeinem Grund doppelt hochgezählt wurde und schon 251 ist, steigt die nicht aus. Besser wäre da dann >250 statt ==250) Oder es wird eine Feldvariable falsch indiziert, z.B. var[10], obwohl der Index nur bis 9 gehen dürfte -> z.B. in for Schleifen. Stell mal dein Programm online, das wäre wesentlich. Unabhängig davon würde ich: a) die Relais möglichst weit weg vom Rest der Schaltung geben, am besten in ein extra Gehäuse b) Energie- und Signalleitungen möglichst weit weg voneinander führen c) Geschirmte Leitungen für die Signale (bzw. alles was Eingang ist) verwenden (gerne auch Ethernet, die sind wirklich gut gegen HF geschützt) d) mit den Schaltern nicht die Transistoren schalten, sondern die Relais direkt e) Nicht die internen Pullups verwenden, sondern externe, niederohmigere, z.B. 10k All diese Punkte machen dein System robuster gegen solche sporadischen Störungen.
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.