1. 低功耗音频系统设计背景
在便携式音频设备领域,功耗控制始终是核心设计挑战。以TWS耳机为例,单次充电需要维持5-8小时的连续播放,这对电源管理系统提出了严苛要求。传统方案中,DACVDD(数模转换器供电电压)通常随主控芯片进入低功耗模式而关闭,但这会导致两个典型问题:
- 唤醒时音频播放存在明显延迟(约200-300ms)
- 重新建立模拟电路工作点会产生可闻的爆音(Pop Noise)
杰理AC6926A芯片采用的动态电压保持技术,通过在睡眠模式下维持DACVDD的特定工作状态,实现了以下突破性改进:
- 唤醒延迟缩短至50ms以内
- 完全消除模式切换时的音频 artifacts
- 静态电流增加仅15μA(常规方案需500μA以上)
2. 关键技术实现原理
2.1 动态电压调节架构
传统方案采用全关断(Full Power Down)模式时,DACVDD完全掉电,导致:
- 输出级MOSFET失去偏置
- 内部基准电压需要重新建立
- 反馈网络电容完全放电
杰理的实现方案包含三级电压调节:
- 正常工作模式:DACVDD=1.8V(典型值)
- 低功耗保持模式:DACVDD=1.2V(通过LDO动态调节)
- 深度休眠模式:仅保持0.9V core电压
关键设计要点:1.2V保持电压需高于DAC输出级的阈值电压(Vth),但低于正常工作电压30%以上,才能实现功耗与性能的平衡。
2.2 模拟电路保持技术
在低功耗模式下维持音频质量的核心在于:
- 偏置电流保持:将常规5mA工作电流降至200μA
- 关键节点电容不掉电:通过PMOS开关隔离放电路径
- 基准电压缓降:采用RC延时电路(τ≈10ms)
具体实现电路包含:
spice复制* DAC输出级保持电路示例
M1 VDD! DAC_OUT NET1 NET1 PMOS W=2u L=0.5u
R1 NET1 DAC_OUT 100K
C1 DAC_OUT GND 10pF
3. 软件配置实战
3.1 寄存器配置流程
以杰理AC6926A SDK为例,关键寄存器操作序列:
- 进入预休眠准备:
c复制REG_PMU_LDO_CTRL = 0x5A; // 启用LDO动态调节
REG_AUDIO_PWR_SAVE = 0x03; // 保持模拟电路供电
- 低功耗模式切换:
c复制void enter_low_power() {
hal_gpio_pull(GPIO_DAC_PWR, HAL_GPIO_PULL_UP);
delay_us(20);
REG_DAC_BIAS_CTRL |= (1 << 4); // 启用保持模式
hal_pmu_set_voltage(PMU_LDO_DAC, 1200); // 设置1.2V
}
- 快速唤醒恢复:
c复制void wakeup_sequence() {
hal_pmu_set_voltage(PMU_LDO_DAC, 1800);
while (!(REG_PMU_STATUS & 0x01)); // 等待电压稳定
REG_DAC_CTRL |= 0x80; // 快速恢复偏置
}
3.2 实测功耗数据对比
| 工作模式 | 传统方案电流 | 本方案电流 | 唤醒时间 |
|---|---|---|---|
| 正常播放 | 8.2mA | 8.5mA | - |
| 低功耗保持 | 0.52mA | 0.035mA | 48ms |
| 深度休眠 | 0.01mA | 0.01mA | 210ms |
4. 工程实践中的典型问题
4.1 电源噪声抑制
在电压保持模式下,LDO工作于轻负载状态,需特别注意:
- 增加10μF MLCC电容靠近DACVDD引脚
- PCB布局时DAC电源走线宽度≥0.3mm
- 避免与数字电源共用过孔
实测案例:某TWS耳机项目因电源噪声导致底噪增加12dB,通过以下改进解决:
- 将LDO反馈电阻从1%精度更换为0.1%
- 在DACVDD引脚添加π型滤波(10Ω+1μF)
4.2 时序控制要点
关键时序约束:
- 电压切换完成到音频数据传输至少延迟500μs
- 模式切换期间需静音DAC输出(建议持续时间≥20ms)
- I2S时钟应在DACVDD稳定后使能
错误配置示例:
c复制// 错误:未等待电压稳定即启用音频
hal_pmu_set_voltage(PMU_LDO_DAC, 1800);
audio_codec_resume(); // 立即恢复会导致失真
5. 进阶优化技巧
5.1 动态电压校准
在批量生产中,可通过以下方式补偿工艺偏差:
- 在工厂测试时写入校准参数:
c复制#define DAC_VOLTAGE_CALIB 0x1234 // 存储在Flash特定位置
hal_pmu_set_voltage(PMU_LDO_DAC, 1800 + DAC_VOLTAGE_CALIB);
- 温度补偿算法:
c复制int16_t temp_compensation(int16_t voltage, int8_t temp) {
return voltage + (temp - 25) * 2; // 每度补偿2mV
}
5.2 与蓝牙协议栈的协同
在BLE连接状态下,需协调以下事件:
- 在Connection Interval开始前50ms恢复全电压
- 利用BLE事件回调触发音频唤醒:
c复制void ble_event_cb(uint8_t event) {
if(event == BLE_PRE_CONN_INTERVAL) {
audio_pre_wakeup();
}
}
实测表明,这种协同机制可使音频播放与BLE通信的无缝切换,避免因时序冲突导致的音频卡顿。