STM32 内部温度校准
STM32 内部温度校准
好的,STM32 微控制器内部集成了一个温度传感器,但这个传感器在出厂时仅进行了粗略的校准。要获得更精确的温度读数,通常需要在应用程序中进行软件校准。
以下是进行STM32内部温度传感器校准和使用的中文步骤和要点:
核心概念:
-
工厂预校准值: STM32芯片在出厂时,会对内部温度传感器进行基本校准。厂家会在芯片内部特定的Flash地址处存储两个校准值 (TS_CAL1 和 TS_CAL2)。
- TS_CAL1: 对应于
VDDA= 3.3V时,在温度T1(通常是30°C)下测量得到的温度传感器的ADC原始值。 - TS_CAL2: 对应于
VDDA= 3.3V时,在温度T2(通常是110°C)下测量得到的另一个温度点下的ADC原始值。 (注意:T1 和 T2 的具体值请查阅您使用的STM32型号的Datasheet或Reference Manual) - 这些校准地址因STM32系列(如F0/F1/F4/F7/G0/G4/H7等)不同而不同。你需要查阅芯片对应的Datasheet (通常在 "Embedded Characteristics" 或 "Electrical Characteristics" 章节)找到Address of the temperature sensor calibration value部分。
- TS_CAL1: 对应于
-
温度计算(线性近似): 温度传感器输出的电压与温度之间的关系在T1~T2范围内近似线性,因此可以利用这两个已知点来构建一条直线,通过当前测量到的ADC原始值推算出实际温度。公式如下:
Temperature (°C) = (T1 * (TS_CAL2 - ADC_Value) - T2 * (TS_CAL1 - ADC_Value)) / (TS_CAL2 - TS_CAL1)或者更常见的变形:
Temperature (°C) = T1 + ((ADC_Value - TS_CAL1) * (T2 - T1)) / (TS_CAL2 - TS_CAL1)ADC_Value:你在当前实际温度下读取到的温度传感器ADC原始值。T1,T2:TS_CAL1和TS_CAL2对应的已知温度 (查Datasheet)。TS_CAL1,TS_CAL2:从芯片特定Flash地址读取到的校准值。- 关键点: 这个公式依赖一个假设——VDDA = 3.3V!如果实际VDDA不是精确的3.3V,会导致计算误差。
使用步骤(基于工厂校准):
-
启用 ADC 和温度传感器通道:
- 使用标准外设库(如HAL)或LL库初始化ADC。
- 将ADC通道配置为连接内部温度传感器通道(通常是ADC通道16或18,查芯片Reference Manual)。确保采样时间足够长(推荐 >10 μs)。
-
读取工厂校准值:
- 根据你的STM32型号,查找Datasheet中找到 TS_CAL1 和 TS_CAL2 的地址。
- 在代码中定义指向这些地址的指针,并读取值。
示例代码(伪代码,具体地址需替换):
// 假设F4系列地址(务必替换成你芯片的实际地址!参考Datasheet) #define TEMP130_CAL_ADDR ((uint16_t*)0x1FFF7A2C) // TS_CAL1 (30°C) 地址 #define TEMP110_CAL_ADDR ((uint16_t*)0x1FFF7A2E) // TS_CAL2 (110°C) 地址 uint16_t TS_CAL1 = *TEMP130_CAL_ADDR; uint16_t TS_CAL2 = *TEMP110_CAL_ADDR; uint16_t T1 = 30; // 单位°C,查Datasheet确认 uint16_t T2 = 110; // 单位°C,查Datasheet确认 -
测量温度传感器原始值:
- 启动ADC转换读取温度传感器通道的原始数值 (
ADC_Value)。为了提高精度,建议进行多次采样取平均(例如16次或更多)。
- 启动ADC转换读取温度传感器通道的原始数值 (
-
计算温度:
- 使用上面提供的线性公式(第二个常用变形)计算实际温度:
float adc_value = ...; // 你的平均ADC原始值(12位或根据ADC分辨率转换) float temperature = T1 + ((adc_value - TS_CAL1) * (T2 - T1)) / (TS_CAL2 - TS_CAL1);
重要注意事项和校准技巧:
-
VDDA精度是最大误差来源: 工厂校准值是在VDDA精确等于 3.3V 下得到的。如果你的电路板上VDDA不是精确的3.3V (很常见,LDO都有精度误差,也可能随负载变化),计算出的温度会有显著偏差(每0.1V的VDDA偏差可能造成几摄氏度的温度误差)。- 解决方案 (强烈推荐): 同时测量一个连接到
VDDA的精确基准电压源(或稳定的已知电压,如在板子上找测试点)的ADC值。例如测量连接到VDDA的VREFINT(内部参考电压,通常有一个校准值VREFINT_CAL存储在Flash中):#define VREFINT_CAL_ADDR ((uint16_t*)0x1FFF7A2A) // F4示例,查你芯片的地址 uint16_t VREFINT_CAL = *VREFINT_CAL_ADDR; float vdda_measured = (3.3f * VREFINT_CAL) / adc_value_vrefint; // VREFINT电压在数据手册给出(通常1.2V),这里假设VREFINT在VDDA=3.3V时对应的校准值是VREFINT_CAL然后用
vdda_measured去修正读取到的温度传感器ADC原始值 (adc_value_temp_raw),将其折算到VDDA=3.3V 条件下的等效值:float adc_value_temp_corrected = (adc_value_temp_raw * vdda_measured) / 3.3f;最后,用
adc_value_temp_corrected代替之前的adc_value代入温度计算公式。
- 解决方案 (强烈推荐): 同时测量一个连接到
-
精度限制: 即使使用了VDDA校准,内部温度传感器的精度通常也有限:
- 典型精度:在数据手册 "Electrical Characteristics" -> "Operating conditions" -> "Embedded internal temperature sensor" 小节查看,通常是 ±1°C, ±2°C, 或者 ±4°C (例如@25°C到85°C范围内)。
- 响应速度相对较慢。
- 测量的是芯片内核温度,而不是环境温度。芯片功耗(运行速度和负载)会显著影响内核温度。更适合测量芯片本身温度变化趋势或作为粗略环境温度参考。
-
两点用户校准(提升精度): 如果需要更高精度:
- 方法一: 在已知的两个精确温度点(例如冰水混合物0°C和室温25°C,需要精确温度计测量环境)下,测量对应的ADC原始值 (
ADCVAL_T1_actual,ADCVAL_T2_actual)。 - 方法二: 在单点校准VDDA的基础上,在一个已知温度点(通常选室温附近)测量ADC值。然后计算一个偏移量或斜率修正系数。
- 用这些 实测的 ADC值替代代码中的工厂校准值
TS_CAL1和TS_CAL2(或者仅使用实测值修正斜率/偏移)。这能更好地补偿你特定芯片和特定VDDA条件下的误差。
- 方法一: 在已知的两个精确温度点(例如冰水混合物0°C和室温25°C,需要精确温度计测量环境)下,测量对应的ADC原始值 (
-
使用CubeMx (可选): 使用STM32CubeMX配置ADC通道和内部温度传感器非常方便。它会帮你生成基本的初始化代码。你仍然需要在用户代码中添加读取校准值、VDDA校准和温度计算的逻辑。
总结:
- 获取工厂预存的校准值
TS_CAL1和TS_CAL2(地址查Datasheet)。 - 配置并读取内部温度传感器的ADC值 (
ADC_Value)。 - (关键) 校准实际
VDDA(推荐使用内部VREFINT及其校准值)。 - 用校准后的
VDDA修正温度传感器ADC值 (折算到3.3V)。 - 使用线性公式结合校准值和修正后的ADC值计算温度。
- 理解其精度限制。如需更高精度,执行用户两点或单点校准。
务必查阅的资料:
- 你使用的STM32型号的Datasheet (数据手册): 查找
Embedded Characteristics章节,找到Address of the temperature sensor calibration value,TS_CAL1对应的温度T1,TS_CAL2对应的温度T2。 - 你使用的STM32型号的Reference Manual (参考手册): 查找
ADC章节,关于Internal temperature sensor的说明以及如何配置ADC通道。 - 芯片封装顶部的丝印型号: 用来确认具体型号下载正确的文档。
如何使用外部温度传感器校准DS1862
本应用笔记介绍如何在内部校准DS1862的AUX2MON引脚,以便外部温度传感器驱动查找表(LUT)。本文还介绍了DS1862的辅助监视通道、设
2023-06-10 15:36:41
STM32内部温度传感器简介
实验概述文章目录实验概述一.概述二.实验平台(1)硬件平台ALIENTEK MiniSTM32 开发板(2)软件平台三.实验过程1.STM32 内部
换一换
- 如何分清usb-c和type-c的区别
- 中国芯片现状怎样?芯片发展分析
- vga接口接线图及vga接口定义
- 芯片的工作原理是什么?
- 华为harmonyos是什么意思,看懂鸿蒙OS系统!
- 什么是蓝牙?它的主要作用是什么?
- ssd是什么意思
- 汽车电子包含哪些领域?
- TWS蓝牙耳机是什么意思?你真的了解吗
- 什么是单片机?有什么用?
- 升压电路图汇总解析
- plc的工作原理是什么?
- 再次免费公开一肖一吗
- 充电桩一般是如何收费的?有哪些收费标准?
- ADC是什么?高精度ADC是什么意思?
- dtmb信号覆盖城市查询
- EDA是什么?有什么作用?
- 中科院研发成功2nm光刻机
- 苹果手机哪几个支持无线充电的?
- type-c四根线接法图解
- 华为芯片为什么受制于美国?
- 怎样挑选路由器?
- 元宇宙概念股龙头一览
- 锂电池和铅酸电池哪个好?
- 如何进行编码器的正确接线?接线方法介绍
- 什么是场效应管?它的作用是什么?
- 虚短与虚断的概念介绍及区别
- 晶振的作用是什么?
- 大疆无人机的价格贵吗?大约在什么价位?
- amoled屏幕和oled区别
- 苹果nfc功能怎么复制门禁卡
- 单片机和嵌入式的区别是什么
- 复位电路的原理及作用
- BLDC电机技术分析
- dsp是什么意思?有什么作用?
- 苹果无线充电器怎么使用?
- iphone13promax电池容量是多少毫安
- 芯片的组成材料有什么
- 特斯拉充电桩充电是如何收费的?收费标准是什么?
- 直流电机驱动电路及原理图
- 传感器常见类型有哪些?
- 自举电路图
- 苹果笔记本macbookpro18款与19款区别
- 通讯隔离作用
- 新斯的指纹芯片供哪些客户
- 伺服电机是如何进行工作的?它的原理是什么?
- 无人机价钱多少?为什么说无人机烧钱?
- 以太网VPN技术概述
- 手机nfc功能打开好还是关闭好
- 十大公认音质好的无线蓝牙耳机