关于STM32F072CB 的内部温传校正问题

2019-12-10 18:11发布

在往上有看到矫正公式是这么算的Temperature= (1.42 - ADC_Value*3.3/4096)*1000/4.35 + 25;
亲测这个公式在我是用的系统板中不准确,查阅手册后是这么计算的
1式      Temperature=((110 - 30) / (TS_CAL2 - TS_CAL1)*(TS_DATA - TC_CAL1) + 30;
此时,
2式      TS_DATA = (Vadc / 3.3) * 4095; 使用12位ADC精度。但是在系统板上没有参考电压源,使用开关电源直接供电,开关电源理论输出是3.27V,所以,此时计算的TS_DATA是不正确的。我们需要把通道电压校准,使用片内校准数据。
参阅手册可知,
3式     Vchannelx = ((3.3 * VREFINT_CAL * ADC_DATAx)/ (FULL_SCALE * VREFINT_DATA)) 。               
此时我们得到了一个在供电稳定下的精度比较高的电压值,并且我的供电系统是3.27V,所以将2式改写成
4式    TS_DATA = (Vadc / 3.27) * 4095;
此时联立1,3,4式并化简可得
5式    Temperature = ((110 - 30) / (TS_CAL2 - TS_CAL1)) * (((3.3 * VREFINT_CAL) / 3.27) *( ADC_DATAx / VREF_DATA) - TS_CAL1) + 30;
令 K1 = (110 - 30) / (TS_CAL2 - TS_CAL1);
    K2 = (3.3 * VREFINT_CAL) / 3.27) ;
5式可以写成
6式    Temperature = (K1) * (K2*( ADC_DATAx / VREF_DATA) - TS_CAL1) + 30;
其中 K1,K2式常量,可以在初始化时计算好。
其中
FULL_SCALE是当前ADC精度下的最大值,12位精度就是4095.
ADC_DATAx就是采集到的内部温传ADC。
VREF_DATA是采集到的当前内部参考电压的ADC。
VREFINT_CAL是参考电源的校准值,在片内地址0x1ffff7ba处,共12位。
TS_CAL1是低温校准数据,在片内地址0x1ffff7b8,共12位。
TS_CAL2是高温校准数据,在片内地址0x1ffff7c2处,共12位。

以上算法只在STM32F072CB上运行过,室温温差2度,过高低温,温差6度左右。
0条回答

一周热门 更多>