Forum: Mikrocontroller und Digitale Elektronik STM32L interner Temperatur Sensor ist Spannungsabhängig


von A. F. (artur-f) Benutzerseite


Lesenswert?

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?

von Dr. Sommer (Gast)


Lesenswert?

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.

von A. F. (artur-f) Benutzerseite


Lesenswert?

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...

von Dr. Sommer (Gast)


Lesenswert?

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.

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.