STM32L interner Temperatur Sensor ist Spannungsabhängig

OP Persönliche Seite #5853811
Hallo,
ich habe einen STM32L07x uC der mit einer externen, variablen 
Spannungsversorgung zw. 3.0V-3.4V.

Ich muss die Spannungsversorgung und die uC Temperatur monitoren. Der uC 
hat am VREF+ Eingang leider keine Referenz angeschlossen, weil ich mich 
auf die Aussage aus dem Datenblatt verlassen habe:

Internal voltage reference (VREFINT)
The internal voltage reference (VREFINT) provides a stable (bandgap) 
voltage output for the
ADC and Comparators. VREFINT is internally connected to the ADC_IN17 
input channel. It
enables accurate monitoring of the VDD value (when no external voltage, 
VREF+, is available
for ADC). The precise voltage of VREFINT is individually measured for 
each part by ST during
production test and stored in the system memory area. It is accessible 
in read-only mode.

Mit der internen Referenz-Spannung habe ich jeoch bei der 
Temperaturmessung eine starke Abhängigkeit von der Versorgungsspannung. 
Plausible und eher korrekte Temperaturen messe ich bei genau 3.3V.

Hier ist ein Macro von ST für die Temperaturberechung (TS_ADC_DATA ist 
ADC Wert vom Tempsensor):
1
#define TEMP30_CAL_ADDR   ((uint16_t*) ((uint32_t) 0x1FF8007A)) /* Internal temperature sensor, parameter TS_CAL1: TS ADC raw data acquired at a temperature of 30 DegC (+-5 DegC), VDDA = 3.3 V (+-10 mV). */
2
#define TEMP130_CAL_ADDR  ((uint16_t*) ((uint32_t) 0x1FF8007E)) /* Internal temperature sensor, parameter TS_CAL2: TS ADC raw data acquired at a temperature of  130 DegC (+-5 DegC), VDDA = 3.3 V (+-10 mV). */
3
#define VDDA_TEMP_CAL                  ((uint32_t) 3000)        /* Vdda value with which temperature sensor has been calibrated in production (+-10 mV). */
4
#define VDDA_APPLI                     ((uint32_t) 3300)    /* Value of analog voltage supply Vdda (unit: mV) */
5

6
                                                                /* This calibration parameter is intended to calculate the actual VDDA from Vrefint ADC measurement. */
7
#define COMPUTATION_TEMPERATURE_TEMP30_TEMP130(TS_ADC_DATA)                    \
8
  (((( ((int32_t)((TS_ADC_DATA * VDDA_APPLI) / VDDA_TEMP_CAL)                  \
9
        - (int32_t) *TEMP30_CAL_ADDR)                                          \
10
     ) * (int32_t)(130 - 30)                                                   \
11
    ) / (int32_t)(*TEMP130_CAL_ADDR - *TEMP30_CAL_ADDR)                        \
12
   ) + 30                                                                      \
13
  )

Dachte mir, setze ich für die definierte VDDA_APPLI die gemessene 
Spannung ein. Wie es aussieht, ist diese aber ziemlich ungenau.


Habt Ihr eine Idee bzw. schon mit dem Problem zu tun gehabt?
Gast
A. F. schrieb:
> Dachte mir, setze ich für die definierte VDDA_APPLI die gemessene
> Spannung ein.

Welche denn jetzt? Die gemessene Spannung der Referenz? Die musst du 
auch erst mit den Referenz-Kalibrations-Werten abgleichen.
OP Persönliche Seite
Die gemessene Spannung ist ziemlich genau.
Miltimeter 3457mV vs ST32L0 intern 3452mV. Die Spannungsmessung bleibt 
bei gemessenen 3000mV bis 3500mV ziemlich genau. Der Temperatur Sensor 
aber nicht. Mir ist schon klar, dass der nicht so gut aufgelöst ist, hat 
bescheidene Quantisierung. Aber, dass es so einen Unterschied ausmacht, 
ob man 3300 als VDD-APPLI oder die echte gemessene Spannung übergibt...
Gast
A. F. schrieb:
> Die gemessene Spannung ist ziemlich genau.

Welche überhaupt? Die gemessene Referenzspannung? Die mittels Referenz 
kalibrierte Versorgungsspannung?

A. F. schrieb:
> Aber, dass es so einen Unterschied ausmacht,
> ob man 3300 als VDD-APPLI oder die echte gemessene Spannung übergibt...

Je nachdem ob der Sensor ratiometrisch ist oder irgendwie eine absolute 
temperaturabhängige Spannung produziert, ist das nicht verwunderlich.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.