MSP430 und interner temperatursensor?

OP Persönliche Seite #813107
Lesenswert?

Hallo,
ich versuche, die Temperatur mit der eingebauten Temperaturdiode zu 
"messen":
1
static void adcInit() {
2
    ADC12CTL0 &=~ENC;
3
    P6SEL |= 0xef;
4

5
    ADC12CTL0 = MSC + ADC12ON + REFON + REF2_5V + SHT0_15;
6
    ADC12CTL1 = SHP+CONSEQ_3;
7

8
    ADC12MCTL0 = SREF_2+INCH_0;         
9
    ADC12MCTL1 = INCH_10+EOS;           
10

11
    ADC12IE = 0x2;
12

13
    ADC12CTL0 |= ENC;                         // Enable conversions
14
    ADC12CTL0 |= ADC12SC;                     // Start conversion
15
}

Der ADC gibt für Kanal1 etwa 1394 aus. Bei Erwärmung steigt der Wert, 
bei Abkühlen sinkt er.

Ändere ich
1
ADC12MCTL1 = INCH_10+EOS;
in
1
ADC12MCTL1 = SREF_2 + INCH_10+EOS;

Ändert sich nichts am ausgelesenen Wert.

Kanal0 mißt wunderbar!

Bitte nehme jemand das Brett von meinem Kopf ;-)

Falk
Gast #814139
Lesenswert?

> Außerdem: Warum zeigt das Ding auch bei Verwendung der 2,5V-Referenz
> eine Temperatur, die <-100°C ist?

Wir rechnest du denn die Temperatur um? Im Datasheet steht, dass man den 
Offset der Temperaturkurve selbst kalibrieren muss...
Gast #814239
Lesenswert?

>Naja, im User Guide steht´s zumindest, dass man dazu nur die interne Ref
>nehmen kann.
Wo steht das denn ?
Die interne Referenzspannung wird beim Kanal 0x1010 (Temp.Diode) 
automatisch aktiviert, da diese sozusagen als "Betriebsspannung" für die 
interne Temp.Diode benötigt wird. Die daraus resultierende 
Temp.-Spannung wird dann allerdings genauso wie ein externes Signal über 
den Eingangsmultiplexer eingespeist und kann natürlich mit jeder 
beliebigen (auch externen) Referenzspannung gesampled werden. Die 
Ref-Spannung muss natürlich entsprechend der Temp.-Spannung gewählt 
werden!

>Das taugt höchstens zum Schätzen.
Kommt darauf an, welche Genauigkeit man erreichen will!
Wenn man den µC beim Messen immer in einem definierten Betriebszustand 
hält und in diesem Zustand auch (zumindest den Offset) kalibriert, 
erreicht man schon eine Genauigkeit von +-1,5°C
OP Persönliche Seite #814284
Lesenswert?

Johnny Maxwell wrote:
>> Außerdem: Warum zeigt das Ding auch bei Verwendung der 2,5V-Referenz
>> eine Temperatur, die <-100°C ist?
>
> Wir rechnest du denn die Temperatur um?

Wie in fet140_adc12_10.c aus TIs Beispielen beschrieben:
1
temp = ADC12MEM0;
2
IntDegC = (temp - 2692) * 423;
3
IntDegC = IntDegC / 4096;

Mit meinem Wert von 1815 komme ich so auf -90°C.

> Im Datasheet steht, dass man den
> Offset der Temperaturkurve selbst kalibrieren muss...

Klar, aber um >130°? Irgendwo ist da der Wurm drin.

Falk
Gast #814293
Lesenswert?

>Wie in fet140_adc12_10.c aus TIs Beispielen beschrieben:
1
>temp = ADC12MEM0;
2
>IntDegC = (temp - 2692) * 423;
3
>IntDegC = IntDegC / 4096;
>Mit meinem Wert von 1815 komme ich so auf -90°C.

Ich denke, Du benutzt Vref=2,5V ?!
Die obige Formel bezieht sich auf VRef=1,5V !!!
OP Persönliche Seite #814301
Lesenswert?

Stefan wrote:
>>Wie in fet140_adc12_10.c aus TIs Beispielen beschrieben:
>
1
>>temp = ADC12MEM0;
2
>>IntDegC = (temp - 2692) * 423;
3
>>IntDegC = IntDegC / 4096;
4
>
>>Mit meinem Wert von 1815 komme ich so auf -90°C.
>
> Ich denke, Du benutzt Vref=2,5V ?!
> Die obige Formel bezieht sich auf VRef=1,5V !!!

Danke. Ich habe noch mal nachgesehen. Ich hatte vermutet, mit
1
ADC12MCTL4 = SREF_1 + INCH_10+EOS;
die 1,5Vref anzusprechen.
damit wähle ich aber nur generell die interne Referenz, die ich mit
1
ADC12CTL0 = MSC + ADC12ON + REFON + REF2_5V + SHT0_15;
 auf 2,5V gesetzt hatte.

Jetzt messe ich 30°C, was IMO im Bereich des normalen Fehlers ist.

Danke fürs Brett-vorm-Kopf-abreißen ;-)

Falk

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren