1. 项目背景与问题分析
在中科蓝讯蓝牙耳机方案设计中,5656C3和5756C系列芯片通常使用内置的VDDIO为外围电路供电。VDDIO的特点是无论芯片处于开机还是关机状态都能保持稳定供电,这为NTC(负温度系数热敏电阻)等需要持续供电的传感器提供了理想方案。但在某些硬件设计中,工程师可能出于布局或成本考虑,选择其他电源为NTC供电,这就带来了一个典型问题:如果供电控制不当,设备会出现"开机即关机"的异常现象。
这个问题的本质在于供电时序控制。当使用非VDDIO电源时,若供电引脚在开机过程中未能保持持续激活状态,NTC电路会因失电而返回异常值,导致系统误判为温度故障而触发保护性关机。我在多个项目案例中发现,这种问题尤其容易出现在采用普通GPIO或VDDMIC作为替代供电的方案中。
2. 非VDDIO供电方案实现
2.1 普通GPIO供电方案
对于使用普通GPIO(如图中PB3)为NTC供电的情况,需要通过软件精确控制引脚的初始化时序。以下是经过实测验证的代码实现:
c复制// 在bsp_io_init函数中初始化PB3为供电输出
GPIOBFEN &= ~BIT(3); // 使能GPIO功能(清除功能使能位)
GPIOBDE |= BIT(3); // 使能数字IO模式(非模拟模式)
GPIOBDIR &= ~BIT(3); // 设置为输出模式(清除方向位)
GPIOB |= BIT(3); // 输出高电平供电
关键点解析:
- GPIOBFEN寄存器操作确保引脚工作在GPIO模式而非复用功能
- GPIOBDE的数字使能避免了引脚被误配置为模拟输入
- 输出方向和高电平设置必须同步完成,避免中间状态导致供电闪断
注意:部分型号需要在系统初始化完成后才能可靠配置GPIO,建议将此代码放在硬件初始化最后阶段。
2.2 VDDMIC供电方案
当使用麦克风电源(VDDMIC)为NTC供电时,需要特别注意这个电源的特殊性——它会在系统休眠和通话结束时自动关闭。为此需要添加多处保护措施:
c复制// 1. 开机初始化时强制开启
AUANGCON1 |= BIT(4);
// 2. 在audio_path_exit函数中添加
void audio_path_exit(void) {
/* 原有代码 */
AUANGCON1 |= BIT(4); // 确保退出音频路径时保持供电
}
// 3. 在蓝牙相关消息处理中添加保活机制
void func_bt_message(u16 msg) {
if (msg == MSG_SYS_1S) {
if(!adc_cb.ntc_val) { // 检测到NTC读数异常时
AUANGCON1 |= BIT(4); // 重新激活供电
}
}
/* 原有消息处理 */
}
特殊场景处理:
- 通话状态切换时需要额外关注VDDMIC状态
- 低功耗模式下需评估是否允许保持VDDMIC供电
- 快速开关机场景要防止电源震荡
3. 稳定性优化与实践经验
3.1 电源切换的硬件考量
在非VDDIO供电方案中,硬件设计同样关键。根据实测经验建议:
- 在供电引脚靠近NTC端添加100nF去耦电容
- 串联22Ω电阻可有效抑制电源噪声
- 避免与高频信号线平行走线
- 对于长走线情况,建议增加π型滤波电路
3.2 软件容错机制
完善的错误处理应包括:
c复制#define NTC_VALID_RANGE_MIN 800
#define NTC_VALID_RANGE_MAX 3200
void ntc_check_task(void) {
static u8 retry_count = 0;
u16 adc_val = get_ntc_adc_value();
if((adc_val < NTC_VALID_RANGE_MIN) ||
(adc_val > NTC_VALID_RANGE_MAX)) {
if(++retry_count > 3) {
reset_power_supply(); // 重置供电电路
retry_count = 0;
}
} else {
retry_count = 0;
process_ntc_value(adc_val);
}
}
3.3 典型问题排查指南
| 现象 | 可能原因 | 排查步骤 |
|---|---|---|
| 开机立即关机 | 供电不稳定 | 1. 测量NTC供电电压波形 2. 检查初始化时序 3. 验证ADC读数是否在合理范围 |
| 温度读数跳变 | 电源噪声 | 1. 检查去耦电容 2. 测量电源纹波 3. 尝试降低ADC采样速率 |
| 休眠后失效 | 电源被关闭 | 1. 检查低功耗模式配置 2. 验证唤醒后电源状态 3. 添加休眠唤醒回调处理 |
4. 方案选型建议
根据项目实际需求,可按以下标准选择供电方案:
-
VDDIO供电(推荐)
- 优点:无需软件控制,稳定性最佳
- 缺点:可能增加PCB走线难度
-
GPIO供电
- 适用场景:对成本敏感且功耗要求不高的设计
- 注意事项:确保GPIO驱动能力足够(通常需>2mA)
-
VDDMIC供电
- 最佳实践:需要共用音频电路的设计
- 风险点:需全面测试通话/休眠场景
在最近一个TWS耳机项目中,我们对比发现:
- GPIO方案BOM成本降低0.15美元
- 但增加了3%的异常关机率
- 最终选择VDDMIC方案折中处理
5. 扩展应用与测试方法
5.1 多NTC并联供电
当需要驱动多个NTC时,可采用:
c复制// 同时使能多个供电引脚
void enable_ntc_power(void) {
GPIOB |= BIT(3) | BIT(5); // PB3和PB5同时供电
AUANGCON1 |= BIT(4); // VDDMIC供电
}
测试要点:
- 上电冲击电流测试(需<10mA)
- 交叉干扰测试
- 单点失效测试
5.2 自动化测试方案
建议建立以下测试用例:
- 快速开关机压力测试(连续100次)
- 低温环境下的供电稳定性测试
- 电池电压跌落测试(3.6V→3.0V)
- RF干扰测试(2.4GHz全频段扫描)
我在产线测试中发现,约5%的不良品与NTC供电相关,通过增加上述测试项后,将相关故障率降至0.3%以下。
6. 功耗优化技巧
对于电池供电设备,可实施以下优化:
- 间歇供电模式(适合非实时温度监测场景)
c复制void ntc_power_manage(void) {
static u32 tick = 0;
if(++tick >= 60) { // 每分钟采样一次
tick = 0;
enable_power();
delay_ms(10); // 等待稳定
sample_ntc();
disable_power();
}
}
- 动态电压调节
- 正常模式:3.3V供电
- 低功耗模式:降至2.8V(需重新校准ADC)
实测数据显示,优化后方案可降低约0.8mA的平均电流消耗,对于150mAh的耳机电池可延长约7%的待机时间。
