蓝牙音响POP音排查实例分析
最近有客户提供带功放的板子,是真把笔者难坏了。
问题不大,就一个开机"砰"声。
每次上电,喇叭先给你来一下,声音也不大,可客户耳朵尖,一验收就皱眉头:"这个蓝牙音响,怎么开机总有一个pop声,软件不能解决吗?"
笔者以为小问题,结果从硬件折腾到软件,示波器、万用表、烙铁、串口日志,能上的家伙全上了,愣是耗了我好几天。
先找功放厂家,厂家一句话把我噎住了:把 4、5 脚的电容改小,改成 0.47µF 就好。
结果还真没了。
————
1. 先看芯片的"长相"
这颗是禾润的 HT8731,一颗内置升压的 D 类功放,蓝牙音箱、便携音箱里一抓一大把。
手册第 3 页那张典型应用图(TYPICAL APPLICATION),关键的几个脚和外围都画出来了:
翻手册的朋友注意看左下角: 4 脚 IN-、5 脚 IN+,上头各串了一颗 1µF 的输入耦合电容 CIN,串完再接输入电阻 RIN 进到 HT8731 输入级。
2. 关键参数先列清楚
把这次要用到的数字摆在前面,免得后面来回翻:
系统增益 Av = 680k / (20k + RIN),RIN 不外接时(=0)就是 34 倍,约 30.6dB
输入电阻 RIN_internal = 19.4kΩ(手册原话是"19.4k",不是大家常说的 20k,这一字之差算截止频率会偏一点)
输出失调电压 VOS:D 类 ±2mV,AB 类 ±1mV
输入耦合电容 CIN:手册典型应用 1µF
4 脚 IN- / 5 脚 IN+:差分输入(或单端输入,单端时 IN- 串一颗等值电容到地)
这几行后面全要反复用到,先放这。
3. VOS 是什么?先解释下
VOS,手册里叫 Output Offset Voltage,输出失调电压。
功放的输入级,是一对差分管。
理想情况下,你输入 0,这对管子电流完全对称,输出也正好归到中点。
可芯片是光刻出来的,两个管子不可能长得一模一样,掺杂浓度、沟道尺寸都有几纳米级别的误差。
结果就是:
你明明输入的是 0,可对这对差分管来说,感觉上像输入了一个几毫伏的小电压。这个"凭空多出来的几毫伏",就是失调电压。
HT8731 手册标的 VOS:D 类 ±2mV,AB 类 ±1mV。
D 类输出级是开关管,天生毛刺多点,失调就大点;AB 类是线性输出级,失调小点。
你算算,2 毫伏放大 30dB(34 倍)也就 60 多毫伏直流。
这点直流加在喇叭上,会怎样?
喇叭是靠振膜"振动"出声的。
振动才有声波,你耳朵才听得见。而恒定直流,只能让振膜偏转一个固定角度,然后——停住。膜被轻轻压着,不振动,就没声。
打个比方:你一直用手压着鼓皮,鼓不响;你猛地敲一下,鼓才响。失调电压就是那只一直轻轻压着鼓皮的手,压着,但不出声。
所以 VOS 是"静"的。它从开机到关机一直都在,安安静静杵在那,可你压根听不见——因为它压根不振动。
那"砰"那一声,是"动"的。它是开机那一瞬间的一个脉冲,猛地来一下,一闪就没。
失调电压再大点,也就让喇叭膜一直偏着,不会突然给你来一下。能"突然来一下"的,一定是某个"正在变"的量。
————
4. 真凶在 4、5 脚上那颗 CIN
上电那一下,芯片输入级的偏置电压要建立起来。
IN+ 引脚会从 0 慢慢爬到一个固定的共模电压 Vcm。这个过程,其实就是输入耦合电容 CIN 在充电。
充电不是一眨眼就完的,它要按指数规律爬,时间常数 τ = R × C。
HT8731 内部那个 19.4k 电阻跟外接的 CIN 组成 RC 高通,τ = 19.4k × CIN。手册典型 1µF 的话,τ = 19.4ms;改 0.47µF 的话,τ ≈ 9.4ms。
充电这段工夫,IN+ 上不是 0 也不是 Vcm,是一段从 0 往 Vcm 爬的瞬态电压。
这个瞬态被 30dB 放大,喇叭振膜被狠狠推一下又回来——就是那一声"砰"。
————
5. 把两条曲线放一起看,最直观
我把 1µF 和 0.47µF 两条充电曲线做成动态图,对着时间轴走一遍:
左边 1µF 慢爬 = 砰,右边 0.47µF 快爬 = 没声
图里能看到:
1µF 的红曲线,到 20ms 才到 Vcm 的 63%,要拖到 60~80ms 才算基本稳下来——这段时间一直在动
0.47µF 的绿曲线,9.4ms 就到 63%,20ms 就基本贴 Vcm——几乎是一瞬间的事
1µF 那侧的小喇叭带"砰"的波纹,0.47µF 那侧没波纹
充电越慢,那段瞬态在喇叭上待得越久,低频能量越足,"砰"声越明显。
反过来,充电快了,瞬态短到耳朵抓不到。
————
6. 改小电容,时间常数砍一半还多
我们把 τ 算一下:
1µF:τ = 19.4k × 1µF = 19.4ms
0.47µF:τ = 19.4k × 0.47µF ≈ 9.1ms
τ 直接砍掉一半多,那段瞬态在 5τ 之内就过完了。
1µF 的话 5τ ≈ 97ms,0.47µF 只要 46ms。
97ms 是一耳朵就能听到的"砰",46ms 已经短到接近"咔"甚至听不见。
1µF 拖得久 vs 0.47µF 一下过,1µF 那个尾巴长=能量多=砰
————
7.专业的同学肯定会问,会不会对播放有影响
会算这个的工程师才算入行。
输入级这个 CIN 跟内部 19.4k 组成一个高通滤波器,截止频率:
fc = 1 / [2π × (19.4k + RIN) × CIN]
不外接 RIN(RIN = 0):
CIN = 1µF → fc = 1 / (2π × 19.4k × 1µF) ≈ 8.2 Hz
CIN = 0.47µF → fc = 1 / (2π × 19.4k × 0.47µF) ≈ 17.5 Hz
17.5Hz 是什么概念?人耳能听到的下限是 20Hz。一般蓝牙音箱的箱体物理能放出来的低频也就 60~80Hz 起步。所以 17.5Hz 离"砍低频"还远得很,你根本听不出区别。
改小到 0.47µF,低频一点没损失,"砰"声倒是没了。
如果你想更保险一点:算一下你自己产品的最低重放频率 f_low,让 fc ≤ f_low / 3 就行。比如最低 60Hz,fc 留到 20Hz 以内完全够。
1µF → 8Hz,0.47µF → 17Hz,都远低于 20Hz 人耳下限
————
8. 硬件上,还能怎么折腾
改电容是最省事的,但硬件上也不是没别的招。
软启动:让 PVDD 慢慢爬,别一下冲上去
软启动 Soft-Start 是一个:让电源 PVDD 别一下子冲上去,用 50ms 到几百毫秒慢慢爬。
思路是对的,PVDD 慢慢起来,中点电压也跟着慢慢建,pop 就小。代价是整机开机跟着慢,用户等开机音乐那几十毫秒,体感挺明显。
有些功放内置了软启动,外围就省了;没有的,就在偏置脚或参考电压脚并个大电容,让偏置慢慢升。
还有在输入端加 RC 慢启动的,IN+ 串个电阻、再加泄放电阻,把瞬态斜率压下去。
问题是改了输入阻抗,会动到音质,得不偿失。
最省心的其实是换一颗带 anti-pop(防破音)功能的功放,厂商帮你把这毛病治了。
可换芯片,BOM 改动大,成本也上去了。
这几条硬件招你掂量掂量,没一条比改电容省事。
改 CIN 到 0.47µF,4、5 脚各换一颗,几毛钱,纯硬件,不挑时序,不碰音质,低频损失还几乎为零。厂家让你改电容,真不是拍脑袋。
————
9. 软件上,时序才是命根子
但是,很多时候硬件你动不了。板子打样了、电容位置定死了、BOM 锁了,你只剩软件能改。这时候,软件时序就是命根子。
软件的办法的前提是这是一个数字功放,如果是模拟攻放,这部分可以先不看。
软件治 pop,核心就一句话:别让音源和功放的使能撞在一起。
功放从使能到稳定,是要时间的。
电容要充电、偏置要建立、PWM 要起振,这一坨下来,快的几十毫秒,慢的几百毫秒。
你要是在它还没站稳的时候就把音源怼进去,或者反过来,音源还没停就把功放关了,那个跳变被放大,就是"砰"。
所以上电顺序应该是这样,一步一步来:
上电 5 步 + 断电 4 步
① 先把功放按住——Mute 拉上,或者 EN/SHDN 拉低
② 开 codec,上时钟,让 MCLK 先稳住
③ 给功放使能——EN 拉高
④ 等个几十毫秒,让电容充完、偏置建好
⑤ 再放 Mute,开始送音源
断电正好反过来:
① 先停音源
② 把功放 Mute 或 EN 拉低
③ 等 1 毫秒以上,让功放彻底关断,别留尾巴
④ 再关 codec 输出
你去看 MTK、高通的参考代码,这套时序都是标配。
我有个朋友在高通平台上调,一开始给 GPIO 开 100ms 延时,没用;加到 1 秒,结果"砰"声也跟着延时 1 秒才出来——说明那 pop 压根不是时序问题,是别的地方在搞鬼。
后来他在 GPIO 打开前加了个 delayed work 队列,做"拉高-拉低-拉高"的动作,才把它压下去。所以时序这档子事,不是随便加个延时就完事,得对着示波器看波形,一个节点一个节点抠。
第二个软件招,是软静音 + 淡入淡出。
别让信号一下子从 0 跳到正常音量,也别从正常音量一刀砍到 0。在 DSP 或者 MCU 里,上电时把音量从 0 慢慢 ramp 上去,下电时慢慢 ramp 下来,时间取 50 到 200 毫秒。信号是斜坡、不是台阶,就没有那个"啪"的阶跃。
数字软静音效果最好,全在软件里做,一个样本一个样本地降幅度,想多平滑就多平滑。
第三个,看你的 codec 支不支持偏置爬坡。
有些 codec 有个寄存器,能设那个 1/2VDD 直流偏置的上升时间,让它在一段时间里慢慢爬到 1/2VDD,而不是一个陡峭的上升沿。这个"爬坡使能"(ramp enable)一开,pop 能明显改善;有的 codec 干脆内置了 anti-pop 寄存器,打开就行。调的时候记住一条:设 Bias Level 那一下,MCLK 千万别动,时钟一抖,pop 就跟着来。
软件虽然有办法,但是也要根据实际功放来调试,需要把问题先研究清楚再改代码。
————
10.小总结一下
下次再碰到功放开机"砰"一声,别急着怀疑失调电压,也别一条道走到黑。
先低头看看 4、5 脚上那颗输入耦合电容多大——硬件上改电容是最干净的;改不动,就回头抠软件时序——上电先按住、后使能、再放音,断电先停音、后关断、再下电。
一个 pop 声,硬件软件两面都能治。
手册里那行 f-3dB 公式你要是看明白了,自己也能算出来:如果把cin 改到 0.22µF 一样能消。
这个 pop 声,搞了我好几天
完。
