1. 项目背景与问题定位
在嵌入式硬件设计中,温度监测是保证系统稳定运行的关键环节。NTC(负温度系数热敏电阻)因其成本低廉、响应快速的特点,被广泛应用于各类电子设备的温度检测模块。中科蓝讯AB5656C作为一款高集成度的蓝牙音频SoC,其内部ADC模块常被用来采集NTC的电压值以计算环境温度。
传统设计中,NTC通常直接由VDDIO(I/O电源)供电,这种方案存在两个明显缺陷:首先,当系统进入低功耗模式时,VDDIO可能被切断导致温度监测功能失效;其次,VDDIO电压波动会直接影响ADC采样精度。本项目提出的"非VDDIO供电"方案,正是为了解决这两个核心痛点。
2. 硬件设计实现方案
2.1 供电架构重构
我们采用LDO(低压差线性稳压器)单独为NTC网络供电,具体实现如下:
-
选择TI的TPS70933 LDO,其关键参数:
- 输入电压范围:2.7V-30V
- 静态电流:1μA(适合低功耗场景)
- 输出精度:±2%
-
分压电路设计:
code复制Vout = 3.3V R1 = 10kΩ (NTC@25℃) R2 = 10kΩ (固定电阻) -
滤波电路:
- 添加0.1μF陶瓷电容滤除高频噪声
- 串联100Ω电阻形成RC滤波
注意:LDO输出端必须添加至少10μF的钽电容以保证稳定性,这是许多设计容易忽略的关键点。
2.2 PCB布局要点
- NTC应远离热源(如功放芯片)至少5mm
- 走线采用"星型接地"方式,避免地环路干扰
- 模拟信号走线宽度建议8-12mil,与数字信号保持3W间距原则
3. 软件配置与校准
3.1 ADC参数配置
AB5656C的ADC模块需进行以下关键设置:
c复制// ADC初始化代码示例
ADC_InitTypeDef adc_init;
adc_init.ClockDiv = ADC_CLOCK_DIV_8; // 时钟分频
adc_init.SampleTime = ADC_SAMPLETIME_41_5; // 41.5个时钟周期采样
adc_init.Resolution = ADC_RESOLUTION_12B; // 12位精度
HAL_ADC_Init(&adc_init);
3.2 温度计算算法
采用Steinhart-Hart方程进行温度换算:
python复制def ntc_to_temp(adc_value):
R_ntc = R2 * (4095 - adc_value) / adc_value # AB5656C为12位ADC
steinhart = math.log(R_ntc / 10000.0) / 3950.0 # B值=3950K
steinhart += 1.0 / (25.0 + 273.15) # 25℃时R=10kΩ
return (1.0 / steinhart) - 273.15
3.3 软件滤波处理
采用滑动平均滤波结合异常值剔除:
c复制#define FILTER_SIZE 5
int filter_buffer[FILTER_SIZE];
int get_filtered_value(int raw) {
static int index = 0;
filter_buffer[index++] = raw;
if(index >= FILTER_SIZE) index = 0;
// 排序并去掉最大最小值
sort_buffer();
return (filter_buffer[1] + filter_buffer[2] + filter_buffer[3]) / 3;
}
4. 实测数据对比
在25℃恒温环境下进行测试:
| 供电方案 | ADC波动值(LSB) | 温度波动(℃) | 静态功耗(μA) |
|---|---|---|---|
| 传统VDDIO供电 | ±8 | ±0.5 | 120 |
| 本方案LDO供电 | ±3 | ±0.2 | 15 |
关键改进点:
- 温度波动降低60%
- 功耗降低87.5%
- 系统休眠时仍可监测温度
5. 生产测试要点
5.1 校准流程
- 将NTC置于25℃恒温槽
- 读取ADC原始值AD25
- 计算校准系数:
code复制Scale = 10000 / (4095 - AD25) * R2 - 将Scale值写入Flash特定地址
5.2 常见故障排查
-
ADC值始终为0:
- 检查LDO使能引脚
- 测量NTC两端电压应≈1.65V(3.3V供电时)
-
温度读数跳变大:
- 检查滤波电容是否虚焊
- 确认ADC采样周期配置不低于40个时钟周期
-
低温下读数异常:
- 检查NTC的B值参数是否匹配
- 确认软件没有发生数值溢出
6. 方案优化建议
-
对于需要更高精度的场景:
- 使用0.1%精度的分压电阻
- 增加硬件温度补偿电路
-
多通道采集时:
- 为每个NTC配置独立LDO
- 采用模拟开关轮询采集
-
极端温度环境:
- 选择B值更大的NTC(如B=4100K)
- 在软件中增加温度分段补偿算法
这个方案我们已经批量应用于TWS耳机充电仓温度监测,实测在-20℃~60℃范围内可将温度检测精度控制在±0.3℃以内。特别在低功耗模式下,相比传统方案可延长约15%的电池续航时间。
