1. 项目背景与问题定位
去年在优化一款基于杰理AC6925A芯片的蓝牙音箱项目时,遇到了一个典型低功耗问题:设备在音乐暂停后进入待机状态,实测功耗达到1.8mA,远高于行业同类产品的0.5mA标准值。这个看似微小的差异,直接导致客户投诉"待机三天就没电"。
通过示波器抓取电源波形发现,问题出现在DAC模块的供电控制策略上。当播放器状态从PLAY切换到PAUSE时,主控虽然关闭了音频输出,但DAC的模拟电路部分仍保持上电状态,这就是异常功耗的来源。
2. 硬件层面的功耗优化
2.1 电源域划分验证
使用万用表测量各模块供电电流:
- 主控核心:0.3mA(正常)
- 蓝牙射频:0.2mA(正常)
- DAC模拟部分:1.3mA(异常)
对照芯片手册的电源域说明,发现DAC_AVDD电源未受播放状态控制,属于设计疏漏。硬件上需要修改原理图,将DAC供电改为受GPIO23控制。
重要提示:修改电源走线时需注意模拟地和数字地的单点连接,避免引入噪声。
2.2 关键电路改造
具体实施步骤:
- 断开原DAC_AVDD与3.3V直连的0Ω电阻R12
- 增加N-MOS管作为开关(选用SI2301,导通电阻仅50mΩ)
- GPIO23通过10kΩ上拉电阻控制MOS管栅极
- 在DAC_AVDD引脚添加100nF+10μF去耦电容组合
实测改造后DAC关闭时的漏电流降至0.01mA,仅MOS管本身的漏电流。
3. 软件控制策略优化
3.1 状态机重构
原播放器状态转换存在缺陷:
c复制// 旧逻辑
void handle_pause() {
stop_decoder();
clear_audio_buffer();
// DAC仍保持供电
}
修改为:
c复制// 新逻辑
void handle_pause() {
stop_decoder();
clear_audio_buffer();
if(get_play_duration() > 10s) { // 避免短暂停频繁开关
set_gpio23(0); // 关闭DAC供电
pmu_set_mode(LOW_POWER);
}
}
3.2 唤醒时序优化
当检测到播放指令时:
- 先唤醒PMU到全速模式
- 置位GPIO23开启DAC供电
- 等待20ms电源稳定(实测DAC启动需15ms±3ms)
- 初始化音频解码器
通过逻辑分析仪抓取的时序图显示,从按键到出声的延迟控制在200ms内,满足用户体验要求。
4. 实测数据对比
测试条件:3.7V锂电池,25℃环境温度
| 状态 | 原方案电流 | 优化后电流 | 下降幅度 |
|---|---|---|---|
| 播放音乐 | 28mA | 26mA | 7% |
| 暂停状态 | 1.8mA | 0.42mA | 76.7% |
| 深度待机 | 0.5mA | 0.38mA | 24% |
优化后待机时间从72小时延长至310小时(约13天),客户验收测试时电量消耗曲线明显平缓。
5. 工程经验总结
-
功耗问题必须用数据说话:建议配备至少6位精度的电流表,捕捉uA级变化
-
杰理芯片的DAC模块有个隐藏特性:完全断电后重新上电需要重新初始化寄存器,否则会出现杂音。解决方法是在power_on()函数中添加:
c复制if(dac_powered_off) {
dac_init_registers();
dac_powered_off = false;
}
- 实际项目中还发现,某些批次的蓝牙天线匹配电路会额外消耗0.2mA,建议在BOM中固定使用Murata的LQW15CN系列电感。
这个案例给我的启示是:低功耗设计需要硬件和软件工程师的深度配合,任何微小电流都值得较真。现在我们的新项目在原型阶段就会做详细的电源域分析,避免后期返工。