Forum: Mikrocontroller und Digitale Elektronik Seltene Störungen an AT90S8535 abfangen


von Axel Schindler (Gast)


Angehängte Dateien:

Lesenswert?

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.

von CC (Gast)


Lesenswert?

Treten die Störungen vom uC auch auf, wenn an den Relais keine Last 
hängt?

Beitrag #5028048 wurde vom Autor gelöscht.
von CC (Gast)


Lesenswert?

https://de.wikipedia.org/wiki/Snubber

Vielleicht könnte so etwas Abhilfe schaffen... Wie lang sind die 
Leitungen der Flachbandkabel etc?

von Axel Schindler (Gast)


Lesenswert?

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.

von CC (Gast)


Lesenswert?

Axel Schindler schrieb:
> Werde ich kommendes Wochenende mal testen

Dann bring am Besten auch ein paar Fotos mit, vielleicht kann jemand 
damit etwas anfangen...

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von olaf (Gast)


Lesenswert?

> 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

von Jobst M. (jobstens-de)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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.

von Wolfgang (Gast)


Lesenswert?

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.

von M.Keller (Gast)


Lesenswert?

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

von E-Mensch (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.