打印
[CW32F003系列]

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

[复制链接]
660|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhanan|  楼主 | 2022-12-25 09:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以下是库函数里关于温度计算的要点,芯片手册里也是这样描述的:
读取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 | 只看该作者
都转化成浮点比较方便

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

173

帖子

0

粉丝