zhanan 发表于 2022-12-25 09:21

ADC芯片温度计算出来的温度有时错的离谱

以下是库函数里关于温度计算的要点,芯片手册里也是这样描述的:
读取ADC参考电压1.5V时的温度传感器的测量温度
void ADC_GetTsVref1V5(float *fAdcTsDegree)
{
    uint16_t u16AdcResult;
    uint8_t temp1;
    uint16_t temp2;
    temp1 = *((uint8_t*) (ADDR_T0));
    temp2 = *((uint16_t*) (ADDR_TRIM_1P5));

    u16AdcResult = ADC_GetConversionValue();
    *fAdcTsDegree = temp1 * 0.5f + COEFF_TS * 1.5f * (u16AdcResult - temp2);
}
(转换结果u16AdcResult - 标定值temp2)是正数,即转换结果比标定值大,计算结果是对的。转换结果比标定值小,这里就会出现负数,计算结果就出错。
手册上举的例子偏偏是标定值小的,我实测结果,转换结果会比标定值小。

问题清楚了,如何解决大家说说吧。

xch 发表于 2022-12-25 10:26

*fAdcTsDegree =(float) temp1 * 0.5f + COEFF_TS * 1.5f * ((float)u16AdcResult - (float)temp2);

zhanan 发表于 2022-12-26 11:22

对的,都转换成浮点数进行计算。
减的结果转换成带符号整数也行,(s32)(u16AdcResult - temp2)。

这个温度值精度不高,一般用到整数即可,所以温度计算公式也可以这样:
温度= temp1/2+(s32)(u16AdcResult - temp2)*1386/10000; // 温度℃@1.5V
温度是有符号整数,不用浮点计算,所以编译代码也小一些。

Undshing 发表于 2022-12-26 11:40

都转化成浮点比较方便
页: [1]
查看完整版本: ADC芯片温度计算出来的温度有时错的离谱