STM32G071开发笔记:内部温度传感器的使用与计算方式(附代码实例)

RT:这个帖子是用于记录如何使用STM32G071G8单片机的内部温度传感器并计算出MCU内部温度的过程。

首先打开cubeMX,新建工程,选择STM32G071G8:然后配置好时钟选项和ADC内部温度通道的使能(关于内部ADC的配置请看这一篇:STM32CubeMX+ADC_DMA多通道配置连续采样 (STM32G071)(无需中断+LL库配置)-CSDN博客)和生成ADC相关的代码,接下来我们就开始讲解如何使用G0的内部温度传感器。

STM32片内往往都集成了一个内部温度传感器,其中很多系列【但不是所有,具体参见技术手册】并给出了出厂时基于特定温度及参考电压下的校准值以供使用。

温度传感器的输出电压可以被连接到特定ADC通道,从而获取电压转换值。下面截图来自STM32G071G8参考手册(RM0444)

手册里面还有相关温度的计算公式(截图来自STM32G071G8参考手册RM0444):

初看可能会一下子不知道这个公式怎么使用,不过在手册的下面就有关于公式的解释:

        他这个解释是什么意思:我这里解释一下温度传感器的输出与其测得温度成正线性关系。但每个芯片的传感器的线性关系并非一样,所以,出厂时都给了两个校准值并放在特定位置,

这其中(TS_CAL1)代表的意思是在TS_CAL1_TEMP 的温度下测试得到的电压值,

TS_CAL2 和 TS_CAL1是一样的。但是我们怎么知道他们的值呢?这时候就要查看STM32G071x8系列的功能概述手册了。

概括一下就是 TS_CAL1 的值是在标准30度环境下测试得到的ADC通道值(注意MCU测试条件VDD是在3.0V下),那么TS_CAL1的值是多少呢?怎么获取呢?来上代码。

只需要使用把地址转换成指针进行读取即可获取MCU内部的校准值。相关温度值就直接定义一个宏就好。

#define TS_CAL1 *((__IO uint16_t *)0x1FFF75A8)
#define TS_CAL2 *((__IO uint16_t *)0x1FFF75CA)

#define TS_TEMP_CAL1 30
#define TS_TEMP_CAL2 130

接下来根据手册给到的公式转换成代码就可以开始计算使用了

不过有一部分人会在这里栽跟头,直接用它公式计算出来的温度要不就是30度不动要不就是-3度的情况。这是为什么呢?

#define CalculateInternalTemperature(TS_DATA) (TS_TEMP_CAL2 - TS_TEMP_CAL1)/(TS_CAL2 - TS_CAL1) * (TS_DATA - TS_CAL1)  + TS_TEMP_CAL1

这其中一个原因是因为这个公式里面没有加入浮点强制类型转换导致精度丢失从而出现返回的温度是30读一动不动。

还有一个问题就是大家都忽略了手册里面提到的这个出厂校准时所用参考电压是在VDD=VREF = 3.0V下完成的,也就是说要当MCU的电源工作在3.0V是时候这个温度才能准确,但是大部分的MCU供电都是用的3.3V所以导致实际应用时的温度出现偏差,这种情况如果解决?

其实很简单TS_DATA(读取到的ADC温度通道值)* (3.3 / 3.0)也就是(1.1)这样计算出来的结果就是正确的。(以下为正确的代码)

#define CalculateInternalTemperature(TS_DATA) ((float) ((float)(TS_TEMP_CAL2 - TS_TEMP_CAL1)/(TS_CAL2 - TS_CAL1)) * (TS_DATA * 1.1 - TS_CAL1)  ) + TS_TEMP_CAL1

到此介绍基本完成,编译打开debug,看结果:返回的温度30.2度,因为板子上有其他设备会发热加上广东的气温比较高,所以结果应该有个正负2的误差,不过作为不用钱的温度参考我觉得可以了。

使用风枪180度烘烤5秒的结果。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值