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