2020-02-05 02:02 AM
Hi
So I''m trying to use the internal temperature sensor to get a rough idea of the temperature.
So first I test it on the NUCLEO-F446 and get good result but when I try to use the same code on my board, I get wrong data.
Good data is adc value aroud 930 (so 24°C) and wrong value is value around 860 (so 0°C)
The nucleo use a STM32F446RET6 and my board a STM32F446RCT6, so basically just the flash size is different.
To be sure to have a similar settings I use a 84Mhz clock generate with HSI and PLL.
I tried lot of different settings (dma, polling, continuous,...) but it gave all the same result
Any idea why the internal temperature is wrong on my board ?
Solved! Go to Solution.
2020-02-05 02:26 AM
Is the supply voltage the same? Are the analog supply pins (Vdda, Vssa, Vref+, Vcap1/2) connected the same way?
2020-02-05 02:26 AM
Is the supply voltage the same? Are the analog supply pins (Vdda, Vssa, Vref+, Vcap1/2) connected the same way?
2020-02-05 02:36 AM
According to the reference manual, the internal temperature sensor is not even suited to get a rough idea of the temperature.
The temperature sensor output voltage changes linearly with temperature. The offset of this
linear function depends on each chip due to process variation (up to 45 °C from one chip to
another).
The internal temperature sensor is more suited for applications that detect temperature
variations instead of absolute temperatures. If accurate temperature reading is required, an
external temperature sensor should be used.
Some STM32 series have a factory calibrated temperature correction value stored in ROM, the STM32F4 lacks this feature. See the answer from @Community member below
2020-02-05 03:00 AM
> Some STM32 series have a factory calibrated temperature correction value stored in ROM, the STM32F4 lacks this feature.
JW
2020-02-05 04:51 AM
Thanks for the infos, btw I'm looking for an accuracy of ±5°C so not very accurate :)
I'm using the macro __LL_ADC_CALC_TEMPERATURE to convert ADC to °C and this macro use the factory calibrated temperature correction value .
And with this I get a correct guess of the ambient temperature on the nucleo but not on my board
I will check the analog supply pins to be sure, everything is correct
2020-02-05 05:24 AM
So I found (or more exactly @berendi) found the culprit : there was a assembly issue on my board and Vdd was not 3V3 but more 3V6.
If I correct Vdd to 3V3, I get the good value :) :)
For infos a 50mV variation in Vdd impact the temperature reading by 4-5°C
So I will try to get an idea of Vdd with vref int to improve my temperature reading.
2020-02-05 02:54 PM
OK so issue is solved? Please select berendi's post as Best, so that the thread is marked as resolved.
JW
2020-02-06 12:04 AM
Yes it's solved ! and I also successfully add the vrefint to my adc scan to automatically apply the good value for vdd.
Thanks again :)