Forum: Mikrocontroller und Digitale Elektronik Plausibilitätsüberwachung / Diagnose Temperatursensor


von Niine (Gast)


Lesenswert?

Hallo zusammen,
ich habe ein Problem und tue mich schwer es zu lösen. Daher möchte ich 
die Runde mal zu einem "best doing" befragen:

Für eine Temperaturregelung verwende ich einen TSic306 Temperatursensor, 
welcher leider ein eigenartiges Protokoll besitzt. Ich lese die 
Temperatur mit einem PIC aus, was prinzipiell auch gut funktioniert. Als 
Checksumme gibt es nur ein Parity-Bit, was aber auch bei falschen 
Temperaturen richtig sein könnte...

Jedoch gibt es immerzu Temperaturausschläge, was entweder vom Sensor 
direkt, von Störungen oder von einer unstabilen Protokollauswertung 
kommt.

Nun möchte ich erkennen ob der Sensor defekt ist, ein Kabelbruch 
vorliegt und ob die empfangene Temperatur plausibel ist.

Bisher habe ich:
1. Die Temperatur muss innerhalb +-5K der zuletzt empfangenen Temperatur 
sein, sonst ist sie ungültig.
2. Empfange ich >=10s keine gültige Temperatur (+-5K), dann schalte ich 
in den Fehlermodus.

Problem:
- Bei Systemstart kann es passieren, dass ich zuerst einen fehlerhaften 
Temperaturwert empfange (z.B. 110°C). Dann schlägt automatisch 2. zu und 
ich bleibe im Fehlermodus hängen oder ich habe eine vollkommen falsche 
Temperatur. 110°C als Starttemperatur könnte aber vorkommen, daher nützt 
es nichts zu sagen, dass nur Temperaturen <X°C akzeptabel sind.
- Es kommt selten vor, dass tatsächlich >10s kein gültiger Wert 
empfangen wird, das soll eigentlich auch nicht passieren.

Hat jemand von euch eine Idee wie man die Überwachung stabil umsetzt?

Da es um eine Kesselbeheizung geht, darf es max. 1 Minute dauern um zu 
erkennen, dass die Temperatur falsch ist.

Danke für eure Hilfe und eventuellen Ideen!

Niine

von Gerd E. (robberknight)


Lesenswert?

Niine schrieb:
> - Bei Systemstart kann es passieren, dass ich zuerst einen fehlerhaften
> Temperaturwert empfange (z.B. 110°C). Dann schlägt automatisch 2. zu und
> ich bleibe im Fehlermodus hängen oder ich habe eine vollkommen falsche
> Temperatur. 110°C als Starttemperatur könnte aber vorkommen, daher nützt
> es nichts zu sagen, dass nur Temperaturen <X°C akzeptabel sind.

Du könnest z.B. 100 Werte empfangen und davon den Durchschnitt nehmen. 
Davon darf es dann keine zu starken Abweichungen geben.

von U. M. (oeletronika)


Lesenswert?

Hallo,
> Niine schrieb:
> verwende ich einen TSic306 Temperatursensor,
> welcher leider ein eigenartiges Protokoll besitzt. Ich lese die
> Temperatur mit einem PIC aus, was prinzipiell auch gut funktioniert.
Wie ist der Sensor angeschlassen? Welche Leitungslängen?
Welche Kabelart?

> Als Checksumme gibt es nur ein Parity-Bit, was aber auch bei falschen
> Temperaturen richtig sein könnte...
Wie oft wird der Sensor ausgelesen?

> Jedoch gibt es immerzu Temperaturausschläge, was entweder vom Sensor
> direkt, von Störungen oder von einer unstabilen Protokollauswertung
> kommt.
Oder es kommt von einem total krautigen Anschluss, Software, die nicht 
störsicher geschrieben ist und einer elektrischen Umgebung, die mit max. 
Störbehaftet installiert wurde?

> Nun möchte ich erkennen ob der Sensor defekt ist, ein Kabelbruch
> vorliegt und ob die empfangene Temperatur plausibel ist.
Was sollte den bei Defekt oder Kabelbruch an einem digitalen ensor noch 
passieren?
Warum sollte die Temp. bei einer dig. Überrtragung fehlerhaft sein?

> Bisher habe ich:
> 1. Die Temperatur muss innerhalb +-5K der zuletzt empfangenen Temperatur
> sein, sonst ist sie ungültig.
> 2. Empfange ich >=10s keine gültige Temperatur (+-5K), dann schalte ich
> in den Fehlermodus.
Warum sollte denn in solch langer Zeit kein Sensorsignal eingelesen 
werden können?
Deine Angaben sind unplausibel bzw. zeigen ein generelles Problem an.

> Problem:
> - Bei Systemstart kann es passieren, dass ich zuerst einen fehlerhaften
> Temperaturwert empfange (z.B. 110°C). Dann schlägt automatisch 2. zu und
> ich bleibe im Fehlermodus hängen oder ich habe eine vollkommen falsche
> Temperatur.
So macht man es auch nicht. Diese Art von Plausibilitätstest kann immer 
leicht in die Hose gehen.
Den Sensor kann man doch zig mal in 10s auslesen. Da sollten doch 
zufällige Fehler durch Störungen leicht zu erkennen sein (wo kommen die 
den her).
Diese könnte mqan auch leicht mit einem Medianfilter eliminieren.

> - Es kommt selten vor, dass tatsächlich >10s kein gültiger Wert
> empfangen wird, das soll eigentlich auch nicht passieren.
Also ist deine Aussage "funktioniert eigentlich ganz gut" wohl eher 
nicht korrekt!

> Hat jemand von euch eine Idee wie man die Überwachung stabil umsetzt?
Analysiere das Problem. Das kann niemand aus der Ferne machen.
Nimm die Messwerte auf und prüfe ob diese zuverlässig stabile werte 
liefern. Prüfe die signalpegel mit einem Oszi und vor allem prüfe, ob 
die Stromversorgung stabil ist.
Hast die die Applikationshinweise zum Sensor gelesen (Stützkond.)?

> Da es um eine Kesselbeheizung geht, darf es max. 1 Minute dauern um zu
> erkennen, dass die Temperatur falsch ist.
Das könnte man sicher auch in 1s erkennen.


Ansonsten ist auch eine redundante Auslegung empfehlenswert, wenn es 
denn zuverlässig sein muß.
Gruß Öletronika

von Dominik J. (d-r-j)


Lesenswert?

Erstmal schauen ob man die Fehlerquelle nicht beseitigen/verringern 
kann.


Bei Systemstart erstmal >10s Werte sammeln, die höchsten und niedrigsten 
Werte löschen(die vermutlich Fehlerhaften) die restlichen Werte mitteln 
und als Startwert benutzen.

von Max D. (max_d)


Lesenswert?

Solange die Fehler halbwegs gleichverteilt auftreten hilft ein 
Medianfilter die Ausreißer rauszuwerfen.
Sachen wie kabelbruch oder Kurzschluss ergeben normalerweise irrsinnig 
hohe oder tiefe Temperaturen.

von W.A. (Gast)


Lesenswert?

Max D. schrieb:
> Solange die Fehler halbwegs gleichverteilt auftreten hilft ein
> Medianfilter die Ausreißer rauszuwerfen.

Das kommt sehr auf die Art der Fehler an. Ausreißer die abseits der 
richtigen Werte liegen, werden den Median nicht stören, solange sie 
nicht zu häufig sind - egal wie sie verteilt sind.

von Jacko (Gast)


Lesenswert?

Das ZACwire-Protokoll ist zwar recht eigen, aber doch recht
sicher zu programmieren und liefert bei mir stabile Werte.

Außerdem gibt es 2 Parity-Bits (Hi- und Lo-Byte), zusätzlich
kann man noch auf 5 führende Null-Bits beim Hi-Byte testen.

Was hast du denn für eine "prinzipiell gut funktionierende"
Auslesung programmiert? Wird der Zeitmess-Timer zwischendurch
von anderen Routinen verändert?

von Max D. (max_d)


Lesenswert?

Gleichverteilung war nicht ganz richtig ausgedrückt. Ich wollte damit 
darauf hindeuten, dass eine plötzliche Fehlerflut den Filter so weit 
"füllen" kann, dass ein falscher Wert als Median ausgegeben wird. Also 
müssen die Fehler zeitlich halbwegs gleichmäßig verteilt sein (was ich 
faulerweise zu gleichverteilt verhunzt hab).

von Niine (Gast)


Lesenswert?

Hi zusammen,

mit dem Median ist prinzipiell ein guter Ansatz, sowas dachte ich mir 
auch schon. Von der Fehlerverteilung würde ich auch sagen, dass es zu 
99,9% passt.

Die 0,1% werden aber irgendwann wohl aufschlagen. Aber dann könnte ich 
ja wenn innerhalb 10sek kein gültiger Wert kommt nochmal die Routine 
resetten.

Jacko schrieb:
> Was hast du denn für eine "prinzipiell gut funktionierende"
> Auslesung programmiert? Wird der Zeitmess-Timer zwischendurch
> von anderen Routinen verändert?

Ich habe einen Interrupt auf fallende Flanke, messe die Zeit zwischen 
den Flanken (Start-Bit) und halbiere die Zeit und setze den Timer auf 
diese Zeit. Dann starte ich den Timer zum Zeitpunkt der nächsten 
fallenden Flanke. Beim Timer Interrupt schaue ich ob es 0 oder 1 ist und 
speichere die Bits.
Die Auswertung passiert dann beim zyklischen 20ms Timer und das 
zurücksetzen.

Ich hab mich da echt schwer getan das Protokoll für den Controller 
ressourcenoptimiert umzusetzen. Der hat ja noch jede Menge anderes zutun 
als einen Temperatursensor auszulesen...

Aber was schönes:
Hab gestern Abend den TI LMT01LPG gefunden. Gleicher Temperaturbereich, 
2-Wire, höhere Genauigkeit, viel günstiger und: wesentlich einfacheres 
Protokoll. Ich denke damit wird der TSic das zeitliche Segnen bei mir 
:-)

Mit dem Ti-Sensor wird dann auch die Diagnose viel einfacher. 
X-Millisekunden keine Flanke erkannt -> Sensor nicht angesteckt oder 
kaputt.

Danke für eure Hilfe. Das hat mich viel weiter gebracht :-)

Gruß, Niine

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Niine schrieb:
> Problem:
> - Bei Systemstart kann es passieren, dass ich zuerst einen fehlerhaften
> Temperaturwert empfange (z.B. 110°C). Dann schlägt automatisch 2. zu und
> ich bleibe im Fehlermodus hängen oder ich habe eine vollkommen falsche
> Temperatur. 110°C als Starttemperatur könnte aber vorkommen, daher nützt
> es nichts zu sagen, dass nur Temperaturen <X°C akzeptabel sind.

 Das kann (laut DaBla) eigentlich nicht vorkommen, da es möglich ist,
 TSic306 per uC ein- bzw. auszuschalten und gleich die erste Messung zu
 verwenden.
 Viel wahrscheinlicher ist, dass du die Startbitlänge (Tstrobe)
 falsch, bzw. nicht richtig gerechnet hast.

Niine schrieb:
> Aber was schönes:
> Hab gestern Abend den TI LMT01LPG gefunden. Gleicher Temperaturbereich,
> 2-Wire, höhere Genauigkeit, viel günstiger und: wesentlich einfacheres
> Protokoll.

 Ich kann mir kaum ein einfacheres Protokoll als ZACwire vorstellen.

Niine schrieb:
> Ich habe einen Interrupt auf fallende Flanke, messe die Zeit zwischen
> den Flanken (Start-Bit) und halbiere die Zeit und setze den Timer auf
> diese Zeit. Dann starte ich den Timer zum Zeitpunkt der nächsten
> fallenden Flanke. Beim Timer Interrupt schaue ich ob es 0 oder 1 ist und
> speichere die Bits.

 Wie, " messe die Zeit zwischen den Flanken und halbiere die Zeit "
 Welche Zeit wird halbiert, warum und wo willst du das gelesen haben ?
 Anstatt die Angaben aus DaBla zu befolgen:
1
 Do
2
     Warte auf fallende Flanke, Timer starten.
3
     Warte auf steigende Flanke, Timer merken, das ist Tstrobe !!!
4
 
5
     Do
6
       Warte auf fallende Flanke, danach Tstrobe Zeit abwarten !!!
7
       TSIC306 Ausgangszustand direkt als bitwert übernehmen.
8
     Loop 8 Mal
9
     Warte auf fallende Flanke, danach Tstrobe Zeit abwarten.
10
     TSIC306 Ausgangszustand direkt als Paritätsbit übernehmen.
11
12
 Loop 2 Mal

 Kein Wunder, dass du falsche Temperaturwerte gekriegt hast.

: Bearbeitet durch User
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.