mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik MSP430 und interner temperatursensor?


Autor: Falk Willberg (dl3daz) Benutzerseite
Datum:

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

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

    ADC12MCTL0 = SREF_2+INCH_0;         
    ADC12MCTL1 = INCH_10+EOS;           

    ADC12IE = 0x2;

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

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

Ändere ich
ADC12MCTL1 = INCH_10+EOS;
in
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

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die interne Temperatur-Diode funktioniert nur mit der internen 
Referenz-Spannung.

Autor: Falk Willberg (dl3daz) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian R. wrote:
> Die interne Temperatur-Diode funktioniert nur mit der internen
> Referenz-Spannung.

Oh, das konnte ich der Doku nicht entnehmen.

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

Falk

Autor: Johnny Maxwell (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, im User Guide steht´s zumindest, dass man dazu nur die interne Ref 
nehmen kann. Wenn man das Ergebnis richtig umrechnet, kommt schon so 
etwas in der Größenordnung der Umgebungstemperatur raus. Aber nur ganz 
grob. Das taugt höchstens zum Schätzen.

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm, Tatsache, in der aktuellen Version des User Guide steht´s anders 
drin. In meinem Buch steht, es geht nur die interne Ref, und ich bin mir 
sicher, das in einem älteren UG auch gelesen zu haben.

Autor: Falk Willberg (dl3daz) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
temp = ADC12MEM0;
IntDegC = (temp - 2692) * 423;
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

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wie in fet140_adc12_10.c aus TIs Beispielen beschrieben:
>temp = ADC12MEM0;
>IntDegC = (temp - 2692) * 423;
>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 !!!

Autor: Stefan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schau zur Grundlage der Berechnung mal in den User Guide:

VTemp = N/4095 * 2500mV = 1815/4095 * 2500mV
Temp = (VTemp - 986mV) / 3,55mV/°C

Ergibt bei N=1815 Temp=34,38°C

Autor: Falk Willberg (dl3daz) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan wrote:
>>Wie in fet140_adc12_10.c aus TIs Beispielen beschrieben:
>
>>temp = ADC12MEM0;
>>IntDegC = (temp - 2692) * 423;
>>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 !!!

Danke. Ich habe noch mal nachgesehen. Ich hatte vermutet, mit
ADC12MCTL4 = SREF_1 + INCH_10+EOS;
die 1,5Vref anzusprechen.
damit wähle ich aber nur generell die interne Referenz, die ich mit
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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.