STM32U5 片内温度传感器的正确测算核心是校准值需匹配实际 ADC 位数与参考电压,直接使用芯片存储的原始校准值(TS_CAL1/TS_CAL2)会导致温度偏差,需先将校准值转换为当前 ADC 配置下的等效值,再代入官方公式计算,才能得到准确结果。
资料获取:【应用笔记】基于STM32U5片内温度传感器正确测算温度
1. 核心概述
1.1 传感器与校准值基础
- 片内温度传感器用于监控晶圆温度(不适合外部环境测温),输出 VSENSE 信号,需通过 ADC 采样转换;
- 校准值存储:ST 在生产时将两个校准点数据存入系统存储器,供用户提升测量准确性:
- TS_CAL1:ADC1 在 30℃(±5℃)、VDDA=VREF+=3.0V(±10mV)下的 14 位采样值,地址 0x0BFA0710~0x0BFA0711;
- TS_CAL2:ADC1 在 130℃(±5℃)、相同参考电压下的 14 位采样值,地址 0x0BFA0742~0x0BFA0743;
- 官方计算公式:
其中 TS_DATA 为当前 ADC 采样值。
1.2 核心问题根源
原始校准值是基于 “ADC1(14 位)+3.0V 参考电压” 获取的,若实际使用其他 ADC(如 ADC4,12 位)或不同参考电压(如 3.3V),直接代入公式会导致测算错误(如室温下算出 0.6℃,实际应为 29℃)。
2. 正确测算四步骤
步骤 1:读取原始校准值
通过存储器地址直接读取 16 位校准值,示例代码(C 语言):
步骤 2:校准值转换(关键步骤)
需根据实际 ADC 配置,完成 “参考电压转换” 和 “ADC 位数转换”,确保校准值与采样条件一致。
(1)参考电压转换
若实际 VDDA/VREF+≠3.0V(如 3.3V),按比例转换校准值:
- TS_CAL1 原始 = 0x102F(4143)→ 转换后 = 4143×3.0/3.3≈3766;
- TS_CAL2 原始 = 0x155D(5469)→ 转换后 = 5469×3.0/3.3≈4972。
(2)ADC 位数转换
若使用非 ADC1(如 ADC4 为 12 位,ADC1 为 14 位),按位数比例转换(高位→低位右移差值位):
- 14 位→12 位:右移 2 位(÷4);
示例(ADC4,12 位):
- TS_CAL1 电压转换后 = 3766 → 位数转换后 = 3766÷4≈941;
- TS_CAL2 电压转换后 = 4972 → 位数转换后 = 4972÷4≈1243。
步骤 3:ADC 配置与 VSENSE 采样
需正确配置 ADC 并唤醒温度传感器,确保采样有效:
- 配置要点:
- 选择对应 ADC 通道(连接 VSENSE,如 ADC1_CH16、ADC4_CHx,参考手册 ADC 互连表);
- 唤醒传感器:置位 ADC_CCR 寄存器的 VSENSESEL 位,等待稳定时间(tsTART,参考数据手册);
- 设置采样时间:按数据手册要求配置(如 TS_temp,确保采样充分);
- 启动 ADC 转换,读取 TS_DATA(ADC_DR 寄存器值)。
步骤 4:代入公式计算温度
将转换后的校准值与 TS_DATA 代入公式,示例:
- ADC1+3.3V 参考电压:TS_DATA=3754 → 温度 =(100÷(4972-3766))×(3754-3766)+30≈29℃;
- ADC4+3.3V 参考电压:TS_DATA=938 → 温度 =(100÷(1243-941))×(938-941)+30≈29℃。
3. 错误与正确案例对比
| 测算条件 | 校准值使用方式 | 测算结果 | 结论 |
|---|---|---|---|
| ADC1+3.3V 参考电压 | 直接使用原始校准值 | 0.6℃ | 错误(未做电压转换) |
| ADC1+3.3V 参考电压 | 电压转换后校准值 | 29℃ | 正确 |
| ADC4+3.3V 参考电压 | 原始校准值(未转换) | 偏差极大 | 错误(未做电压 + 位数转换) |
| ADC4+3.3V 参考电压 | 电压 + 位数转换后 | 29℃ | 正确 |
184