STM32片内往往都集成了一个内部温度传感器,其中很多系列【但不是所有,具体参见技术手册】并给出了出厂时基于特定温度及参考电压下的校准值以供使用。 温度传感器的输出电压可以被连接到特定ADC通道,从而获取电压转换值。下面截图来自STM32G4系列参考手册。 整体上,温度传感器的输出与其测得温度成正线性关系。但每个芯片的传感器的线性关系并非一样,所以,出厂时都给了两个校准值并放在特定位置。【下图中不同直线示意不同芯片】 , S0 p( Q8 v" v" m3 C, l! h/ x% z 手册里有给出计算温度的一个算式【算式截图来自STM32G4系列参考手册】: 这里,TS_CAL1_TEMP,TS_CAL2_TEMP分别对应30℃和130℃; TS_CAL1, TS_CAL2分别对应30℃和130℃时传感器输出电压的AD转换值并存储在特定的 系统存储区的某个地方,具体查看相应芯片的数据手册,如下图所示: $ r2 h! y+ `/ b$ f2 p$ g( r/ w: v4 Y8 m 其中,TS_DATA则是某待测温度下该传感器输出电压的ADC值。 这里给几点应用提醒: ; E0 L6 S3 w7 s% ^' Z 1、上面的算式是假定我们实际应用中所使用的ADC参考电压跟出厂校准时所用的是一致的。如果我们实际应用时所用参考电压与出厂校准时所用参考电压不一致,则上面算式中的TS_DATA还需要做个补偿调整。比方,出厂校准时所用参考电压vref+等于3.3v,而实际应用时的参考电压则是3v,那么上面算式的TS_Data须是ADC的当前实际转换结果再乘以(3.3/3.0)后的数据。概括点说就是,实际测试转换值要乘以这个 (校准时的参考电压/实际应用时的参考电压)商后的结果才能作为上面算式中的TS_DATA. 2、不同芯片的校准值往往不一样,不同系列校准时测试条件也可能不同。具体应用时要注意这点。比方下面的就是STM32F0系列的。 3、不是所有系列的温度传感器都给了出厂校准值。比方F1系列、F4系列。对于不带校准值的片内温度传感器,不适合做绝对温度的测量,可以考虑做温度变化的测量。对于这种情形,STM32相关系列的参考手册里也给出了计算温度的算式:【下面算式来自F1系列参考手册】 这里,只给出了25℃时的一对参数【温度值及相应输出电压值】作为参考。算式中使用到了传感器待测温度下的输出电压值Vsense以及温度传感器模块输出电压相对温度的变化率【Avg_Slop】。【使用时请注意数据手册给的具体单位】 关于上面应用场景,有人可能会发现别的不带校准的算式又是这样写的:【下图来自F4系列】 ) U5 z4 J+ E: M- b C8 a 这两个写法到底哪个正确呢?难道都是正确的? 基于温度与传感器输出电压的线性关系,我们不难推导出此时的算式应该是下面的写法: 即STM32F4系列参考手册里面描述的是准确的。 |
基于STM32 DS18B20温度传感器经验分享
【STM32C031 评测】基于I2C接口读取温湿度传感器SHTC3
【分享】无线测温系统-硬件篇
STM32C031O SHT20温湿度计
【STM32】STM32G030C8T6 开发板分享
【经验分享】STM32实例-DS18B20温度传感器实验③-DS18B20 初始化函数
【经验分享】STM32实例-DS18B20温度传感器实验②-DS18B20读取温度
【经验分享】STM32 内部温度传感器示例
【年中粉丝节】+SHT20传感器
STM32嵌入式实现智能家居控制系统