第三讲:动态失真的根源
各位同学,咱们今天聊点实在的。静态失真搞明白了,动态失真才是真正让人头疼的东西。我做了这么多年音频设计,坦白讲,大部分翻车案例都出在动态失真上。
3.1 建立时间不足:你以为是稳态,其实是瞬态
先问个问题:DAC输出一个正弦波,你觉得每个采样点都稳定了吗?
其实不是。每个采样点切换时,输出级都需要一段时间才能稳定到目标值。这个时间就叫建立时间(Settling Time)。
我见过不少工程师,只看DC精度,觉得运放失调电压调好了就万事大吉。结果一测THD+N,惨不忍睹。为什么?因为建立时间不够,下一个采样点来了,上一个还没站稳。
具体来说,建立时间不足会带来两个问题:
- 幅度误差:输出还没到目标值就被强行切换,幅度偏小
- 相位误差:不同码字对应的建立曲线不同,导致相位偏移
我建议你在设计时,至少留出3倍的时间常数给建立过程。别卡着理论最小值,那是在给自己挖坑。
3.2 时钟抖动:看不见的杀手
时钟抖动这东西,说大不大,说小不小。你想想看,一个理想的采样时钟应该是等间隔的脉冲。但实际电路里,每个脉冲的边沿位置都会随机偏移。这个偏移就是抖动。
抖动对DAC的影响有多大?我直接给你公式:
SNR_jitter = 20 * log10(1 / (2 * π * f * σ_jitter))
其中f是信号频率,σ_jitter是RMS抖动。你看,频率越高,抖动影响越大。这就是为什么高频信号对时钟要求特别苛刻。
时钟抖动的来源主要有三个:
- 电源噪声:电源纹波会调制时钟边沿
- 热噪声:晶体管的热噪声会随机扰动阈值
- 串扰:数字信号跳变耦合到时钟线上
嗯,这里要注意:很多工程师只关注晶振本身的抖动指标,却忽略了PCB布局。我曾经见过一个设计,晶振旁边走了一条高速数字线,结果抖动直接翻倍。
3.3 开关时序误差:R-2R网络的噩梦
如果你用的是R-2R梯形网络DAC,那开关时序误差就是你的头号敌人。
R-2R网络里,每个位对应一个开关。理想情况下,所有开关应该同时动作。但实际电路中,开关的导通和关断时间不可能完全一致。这就导致了一个短暂的时间窗口里,输出出现错误的中间值。
我建议你关注两个指标:
- Glitch Impulse Area:毛刺的面积,单位pV·s
- Glitch Energy:毛刺的能量,通常用nV·s表示
怎么解决?说白了就两条路:
- 优化开关驱动:让所有开关的驱动信号延迟匹配
- 使用采样保持:在开关切换时保持输出不变,等稳定后再更新
我个人习惯用第二种方法。虽然会增加一点复杂度,但效果立竿见影。
3.4 动态参数的测量:SFDR和THD
好了,理论讲完了,咱们看看怎么测。
动态失真最常用的两个指标是SFDR和THD。我直接给你测量流程:
3.4.1 THD测量
THD测量其实很简单:输入一个纯净的正弦波,看输出里有多少谐波分量。
THD = sqrt(V2^2 + V3^2 + ... + Vn^2) / V1
其中V1是基波幅度,V2、V3等是各次谐波幅度。
测量时要注意:
- 输入信号要足够纯净,至少比DAC的THD好10dB
- 采样率要满足奈奎斯特条件
- FFT点数要足够多,一般用65536点以上
3.4.2 SFDR测量
SFDR(无杂散动态范围)测量的是基波幅度与最大杂散分量之间的比值。
这个指标比THD更严格,因为它不仅看谐波,还看所有非谐波杂散。
测量步骤:
- 输入单频正弦波
- 采集输出数据做FFT
- 找到基波幅度
- 找到除基波外最大的频谱分量
- 计算两者差值(dBc)
3.5 实测案例:一个典型的动态失真分析
最后,我分享一个实际案例。
某次设计一个16位R-2R DAC,目标THD+N为-96dB。初版样机测出来只有-88dB。
排查过程:
| 排查项 | 测试结果 | 结论 |
|---|---|---|
| 静态DNL/INL | ±0.5 LSB | 正常 |
| 时钟抖动 | 5 ps RMS | 偏高 |
| 建立时间 | 1.2 μs | 不足(采样周期1 μs) |
| 开关时序 | MSB毛刺 200 pV·s | 偏大 |
你看,三个动态失真源全中。最后我做了三件事:
- 换用低抖动晶振(降到1 ps RMS)
- 优化输出运放的带宽(建立时间降到0.3 μs)
- 增加采样保持电路(毛刺降到20 pV·s)
最终THD+N做到了-98dB,还超出目标2dB。
所以啊,动态失真这东西,不能只看一个指标。三个根源都要照顾到,才能做出好设计。