Forum: Mikrocontroller und Digitale Elektronik MSP430 Temperaturmessung mit interner Diode


von Stephan (Gast)


Lesenswert?

Hallo,

Ich benutze einen MSP430x1232 und versuche damit möglichst genau eine 
Temperaturmessung durchzuführen. Da das ganze ein Transpondersystem 
werde soll ist der Stromverbrauch so niedrig wie möglich zu halten. 
Daher dachte ich kann die Temperatur einfach über die interne Diode 
erledigt werden. Das ganze funktioniert auch ganz gut und wurd wie folgt 
implementiert:
1
   ADC10CTL0 |= ENC + ADC10SC;         // Sampling and conversion start
2
//    ADC10CTL0 |= ENC + ADC10SC;         // Sampling and conversion start
3
//    _BIS_SR(CPUOFF + GIE);              // LPM0 with interrupts enabled
4
    while ((ADC10CTL1 & ADC10BUSY)) ;   // ADC10BUSY?
5
    //  oC = ((A10/1024)*1500mV)-986mV)*1/3.55mV = x*423/1024 - 278 
6
    temp = ADC10MEM;
7
//    intDegC = ((temp - 673) * 423) / 1024;  ... * 8       
8
    intDegC = ((temp - 673) * 423) / 128;
Das Ergebniss muss dann nur noch einmal mit 8 multipliziert werden und 
es kommt der Temperaturwert in °C raus. Allerdings stelle ich eine sehr 
große Abweichung allgemein und vor allem bei verschiedenen Sensoren 
fest. Um das zu kalibrieren habe ich eine Testreihe in einer 
Thermokammer gefahren. Dort habe ich von -10°C bis 60°C alle 5°C einen 
Wert aufgenommen. Daraus wollte ich mir dann eine Geradengleichung 
erstellen um den Fehler zu minimieren.
Allerdings komme ich jetzt nicht wirklich weiter. Wenn ich mir die 
DIfferenz vom gemessenen Wert zum realen Wert nehme, daraus eine 
quadratische Trendlinie ableite und dann den Wert auf die gemessen Wert 
addiere erhalte ich annähernd den realen Wert. Jetzt ist mein Problem 
daber das die Geradengleichung nur für diese Messreihe gilt. Ich brauche 
aber ja eine Gleichung die auf alle Messlinien angewendet werden kann.
Hoffe hier kann mir jemand dabei helfen. Wenn noch was unklar ist dann 
schreibt das einfach dann versuche ich das noch weiter zu erläutern.

Mfg
Stephan

von Stefan (Gast)


Lesenswert?

>benutze einen MSP430x1232 und versuche damit möglichst genau eine
>Temperaturmessung durchzuführen.
Hab ich auch schon probiert. Wenn man keine allzu hohen Anforderungen 
stellt, ist das auch OK. Aber genauer als +/-1°C wird das nicht werden. 
Allein der Unterschied der Chip-Temperatur zwischen LPM0 und 
Normalbetrieb hat bei mir -glaub ich- fast 1°C Unterschied ergeben!

>Wenn ich mir die DIfferenz vom gemessenen Wert zum realen Wert nehme, daraus 
>eine quadratische Trendlinie ableite und dann den Wert auf die gemessen Wert
>addiere erhalte ich annähernd den realen Wert.
???
Warum nicht einfach Excel (Trendlinie linear) zu Hilfe nehmen?
Oder selber rechnen? -> Stichwort "kleinstes Fehlerquadrat":
http://de.wikipedia.org/wiki/Methode_der_kleinsten_Quadrate

P.S.:
Der Offsetfehler ist meist wesentlich größer als der Steigungsfehler.
Es kann u.U. also ausreichen nur den Offset zu kalibrieren (mit nur 
einer Temperatur und keiner aufwändigen Messreihe)

von Stephan (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe angefangen mit der Messreihe da der Fehler den ich festgestellt 
habe nicht linear ist. Somit fällt auch eine einfache Offsetkorrektur 
weg. Als Anhang habe ich mal den Fehler dargestellt.

Mfg

von Stephan (Gast)


Lesenswert?

@edit
Auf der X-Achse ist die reale Temperatur und auf der Y-Achse der Fehler 
dargestellt.

von Stefan (Gast)


Lesenswert?

Mit Offsetkorrektur wäre Dein Fehler +/- 1°C.
Wie ich schon sagte, sehr viel genauer geht es mit dem internen 
Temp-Sensor nicht. Wenn Du's genauer haben musst, würde ich mal über 
einen externen Sensor nachdenken, allein schon deshalb, weil Du mit dem 
internen eigentlich ja die Chip-Temperatur misst und die variiert je 
nach Belastung Deines MSP430!

von Stephan (Gast)


Lesenswert?

Mmmmh vielleicht versteh ich dich falsch aber kannst du mir eventuell 
mal Offsetkorrektur etwas genauer erklären. +-1°C reicht mir aber auch 
aus aber ich bekomme unterschiede bei verschiedenen MSP von bis zu 10°C!

von Stefan (Gast)


Lesenswert?

Im Datenblatt ist doch die lineare Funktion der Temp-Spannung in 
Abhängigkeit der Temp dargestellt (mit Steigung und Offset)
Diese Werte benutzt Du doch, um umgekehrt aus der gemessenen 
Temp-Spannung die Temp zurückzurechnen. Und genau den Offset-Wert musst 
Du durch eine Messung bei einer bekannten Temp ermitteln... und zwar 
separat für jeden MSP!

von Christian R. (supachris)


Lesenswert?

Nach meinen bisherigen Messungen sind genaue Messungen mit der 
Schätz-Diode kaum möglich. Da muss wirklich jeder MSP abgeglichen 
werden. Außerdem geht die Temp-Diode nur mit der internen 
Referenz-Spannung, und sonderlich genau ist die auch nicht, die hat auch 
einen Temp-Drift.

von Stefan (Gast)


Lesenswert?

Christian schrieb:
>Nach meinen bisherigen Messungen sind genaue Messungen mit der
>Schätz-Diode kaum möglich. Da muss wirklich jeder MSP abgeglichen
>werden.
Das steht oben schon alles!

>Außerdem geht die Temp-Diode nur mit der internen
>Referenz-Spannung, und sonderlich genau ist die auch nicht, die hat auch
>einen Temp-Drift.
Ja, aber wieviel?
100ppm/°C !
Das fällt gegenüber dem Steigungs-/Offsetfehler nicht ins Gewicht!

von Christian R. (supachris)


Lesenswert?

Stefan wrote:
> Christian schrieb:
>>Nach meinen bisherigen Messungen sind genaue Messungen mit der
>>Schätz-Diode kaum möglich. Da muss wirklich jeder MSP abgeglichen
>>werden.
> Das steht oben schon alles!

Ich wollte das nur nochmal unterstreichen.

von Alex (Gast)


Lesenswert?

Hallo,

bei Bausteinen der 2xx Serie z.b. 2132 sind von TI im Infomation Memory 
A bereits Referenzmesswerte (30° und 80°)) vorhanden.

mfg

von Bernd F. (derbernd)


Lesenswert?

Stefan wrote:
> Christian schrieb:
>>Nach meinen bisherigen Messungen sind genaue Messungen mit der
>>Schätz-Diode kaum möglich. Da muss wirklich jeder MSP abgeglichen
>>werden.
> Das steht oben schon alles!
>
>>Außerdem geht die Temp-Diode nur mit der internen
>>Referenz-Spannung, und sonderlich genau ist die auch nicht, die hat auch
>>einen Temp-Drift.
> Ja, aber wieviel?
> 100ppm/°C !
> Das fällt gegenüber dem Steigungs-/Offsetfehler nicht ins Gewicht!

Hmm ... ich denke das bei dir 2 Effekte eintreffen.

1.) Die Grundgenauigkeit der Referenz, die ja doch ganz schön variiert! 
(2,35 - 2,65 V)

2.) Der Temperaturdrift der Referenz. Dieser darf auch nicht 
vernachlässigt werden. Wenn ich mich jetzt nicht verrechnet habe sind 
das über den Temperaturbereich von -10 bis +60°C 17,5 mV und damit ca. 
5°C.

Also hier gilt es beides zu beachten.

Bei der Sache mit der "Initial Accuracy" bin ich selbst aus allen Wolken 
gefallen als ich die Chips schon im Layout verbaut hatte.... Naja next 
time  do it better :-)

Hoffe das hilft dir!

von Stefan (Gast)


Lesenswert?

Bernd F. wrote:

>Hoffe das hilft dir!
Wem? Mir oder Stephan? ;-)

>1.) Die Grundgenauigkeit der Referenz, die ja doch ganz schön variiert!
>(2,35 - 2,65 V)
Wird durch Offsetkorrektur beseitigt (sofern Referenz langzeitstabil 
ist)

>2.) Der Temperaturdrift der Referenz. Dieser darf auch nicht
>vernachlässigt werden. Wenn ich mich jetzt nicht verrechnet habe sind
>das über den Temperaturbereich von -10 bis +60°C 17,5 mV und damit ca.
>5°C.
Jein...
Für die Temp-Messung reicht VRef = 1,5V
Dann wären's nur noch 10,5mV entsprechend 3°C (was meinen selbst 
beobachteten +/-1°C doch sehr nahe kommt).
Aber selbst das könnte man noch verbessern, indem man auch die Steigung 
der Temp-Kennlinie kalibriert.

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.