最近在调试杰理AC692X系列蓝牙音频芯片时,遇到一个典型问题:每次播放系统提示音(如开机提示音、模式切换音效)前,都会伴随一个明显的"PO"声杂音。这个现象在多个项目样机中复现,且在不同功放型号(如AB类/D类)上都存在,说明问题具有普遍性。
从音频信号链角度看,这种瞬态杂音通常发生在以下场景:
在杰理方案中,提示音播放采用独立于音乐播放的音频通道。当系统需要播放提示音时,会动态切换DAC工作模式并开启功放模块。这个过程中如果时序控制不当,就会产生可闻的瞬态噪声。
实测发现杂音出现时,主电源3.3V上存在约50ms的跌落(幅度约200mV)。进一步用示波器捕获到以下关键信号:
| 信号点 | 异常现象 | 正常预期 |
|---|---|---|
| VBAT供电 | 播放瞬间跌落0.2V | 应保持稳定(波动<50mV) |
| 功放EN引脚 | 提前音频信号50ms使能 | 应同步或滞后10ms内 |
| DAC输出端 | 使能瞬间出现1.2V直流偏移 | 应保持零偏置 |
解决方案:
当采用D类功放时,PCB布局不当会导致地弹噪声耦合到音频通路。关键检查点:
实测改进方案:
c复制// 原布局
DGND---[DAC]---AGND
|
[功放]
// 优化后
DGND---[DAC]
|
[0Ω电阻]
|
AGND---[功放]
杰理SDK中默认的音频通道切换流程存在缺陷:
c复制// 原流程(问题代码)
void play_tone(void) {
dac_power_on(); // 立即开启DAC
amp_enable(); // 立即使能功放
audio_decode_start(); // 开始解码
//...播放音频数据
}
优化后的时序应改为:
c复制void play_tone_optimized(void) {
dac_precharge(); // 先预充电DAC(约10ms)
audio_decode_start(); // 提前开始解码(静音帧)
delay_ms(5); // 确保DAC稳定
amp_enable(); // 最后开启功放
//...播放有效音频数据
}
通过逻辑分析仪抓取I2C通信,发现DAC初始化时缺少关键配置:
c复制// 必须配置的寄存器(AC6926为例)
write_reg(0x12, 0x01); // 开启软静音
write_reg(0x18, 0x33); // 设置零交叉检测
write_reg(0x19, 0xC0); // 开启POP噪声抑制
优化前后参数对比如下:
| 测试项 | 优化前 | 优化后 | 测试设备 |
|---|---|---|---|
| 瞬态噪声幅度 | 1.2Vpp | <50mVpp | 示波器DS1104 |
| 可闻噪声 | 明显"PO"声 | 完全不可闻 | 人工耳B&K 4128 |
| 启动延迟 | 20ms | 35ms | 逻辑分析仪 |
| 功耗波动 | ±50mA | ±10mA | 电源分析仪 |
硬件设计Checklist:
软件优化建议:
c复制// 推荐的安全播放流程
void safe_play_tone(void) {
dac_soft_mute(ON);
dac_power_on();
delay_ms(10);
send_silence_frame(); // 发送若干静音帧
amp_enable();
delay_ms(5);
dac_soft_mute(OFF);
// 开始正常播放
}
进阶调试技巧:
这个案例的解决过程表明,音频瞬态噪声往往是硬件设计与软件时序共同作用的结果。通过系统级的信号链分析,结合精准的时序控制,完全可以消除这类"PO"声干扰。在实际项目中,建议在样机阶段就进行详细的电源完整性和信号完整性测试,可以提前发现并解决此类问题。