4、Sigma-Delta ADC深入解析:工作原理、数字滤波器特性、抽取率与输出速率、过采样与噪声整形、常见Sigma-Delta ADC芯片介绍。
4.1 从原理说起:Sigma-Delta 到底在干什么?
很多工程师第一次接触 Sigma-Delta ADC 时,会觉得这东西很玄乎。其实说白了,它跟传统 SAR 或流水线 ADC 的思路完全不同。
传统 ADC 是「硬碰硬」——直接对输入电压做量化。而 Sigma-Delta 是「耍了个心眼」:它用很低的精度(比如 1-bit),但用极高的速度去采样,然后通过数字滤波把精度「算」出来。
我个人习惯把 Sigma-Delta 理解成一个「负反馈系统」。它不断比较输入信号和反馈信号,把误差累积起来,再通过后面的数字滤波器把高频噪声滤掉。嗯,这里要注意:这个「累积」的过程,就是积分器在做的事。
核心思想:用速度换精度。过采样率越高,有效位数就越高。
4.2 数字滤波器特性:不只是「滤波」那么简单
Sigma-Delta ADC 后面的数字滤波器,可不是随便一个低通滤波器就能搞定的。我在项目中遇到过不少新手,以为随便配个滤波器参数就行,结果出来的数据噪声大得离谱。
常见的数字滤波器类型有几种:
- Sinc³ 滤波器:最常用,适合大多数工业测量场景。它的响应是三次 Sinc 函数,阻带衰减快。
- Sinc¹ / Sinc² 滤波器:响应更快,但阻带衰减差一些。适合需要快速建立的应用。
- FIR 滤波器:可定制性强,但资源消耗大。高端芯片才会用。
你想想看,为什么大多数 Sigma-Delta ADC 都默认用 Sinc³?因为它在建立时间和噪声抑制之间取得了很好的平衡。我曾经在一个温度测量项目中,把 Sinc³ 换成 Sinc¹,建立时间快了 3 倍,但噪声大了将近 10 倍——得不偿失。
我的经验:如果对建立时间没有严格要求,优先用 Sinc³。如果要做多通道切换,可以考虑 Sinc¹ 或 Sinc²。
4.3 抽取率与输出速率:别搞混了
这两个概念经常被混淆。我刚开始做 Sigma-Delta 时也犯过这个错。
抽取率(Decimation Ratio)是过采样率除以输出速率。比如调制器跑 10 MHz,你输出 1 kHz,那抽取率就是 10000。
输出速率(Output Data Rate, ODR)就是最终你从芯片读数据的频率。
它们的关系很简单:
ODR = 调制器频率 / 抽取率
但有个坑:抽取率不是随便设的。它必须跟数字滤波器的阶数匹配。比如 Sinc³ 滤波器,抽取率必须是整数,而且通常建议是 2 的幂次方。
避坑指南:我曾经在一个项目中,为了追求高输出速率,把抽取率设得很低。结果发现有效位数掉了 4 位。后来查手册才发现,抽取率低于某个阈值时,噪声整形效果会大打折扣。
4.4 过采样与噪声整形:Sigma-Delta 的「魔法」
过采样(Oversampling)和噪声整形(Noise Shaping)是 Sigma-Delta 的两大法宝。
过采样就是把采样率提高到信号带宽的很多倍。每提高 4 倍过采样率,信噪比能提升约 6 dB(相当于 1 位分辨率)。
噪声整形才是真正的魔法。调制器把量化噪声「推」到高频段,然后数字滤波器再把高频噪声滤掉。这样一来,低频段的信噪比就大大提高了。
为什么会这样?因为调制器里的积分器对低频信号增益高,对高频信号增益低。量化误差被「整形」成了高频噪声。
我记得有一次调试一个音频 ADC,发现低频噪声特别大。查了半天,原来是调制器的积分器饱和了。降低输入幅度后,噪声立刻降下来——这就是噪声整形失效的典型案例。
关键公式:每提高 4 倍过采样率,有效位数增加 1 位(理想情况)。实际中受限于调制器阶数和电路噪声,会略低一些。
4.5 常见 Sigma-Delta ADC 芯片介绍
市面上 Sigma-Delta ADC 芯片很多,我挑几个有代表性的说说。
| 芯片型号 | 分辨率 | 最大输出速率 | 典型应用 |
|---|---|---|---|
| ADS1256 | 24-bit | 30 kSPS | 工业测量、称重 |
| AD7793 | 24-bit | 470 SPS | 热电偶、RTD |
| CS5532 | 24-bit | 3.84 kSPS | 高精度数据采集 |
| MCP3561 | 24-bit | 153.6 kSPS | 通用测量 |
ADS1256 是我用得最多的。它性价比高,30 kSPS 的输出速率足够大多数工业场景。但要注意它的输入阻抗不高,前端必须加缓冲。
AD7793 适合低速率高精度场景。内置 PGA 和电流源,做热电偶测量很方便。我有个项目用它在 10 SPS 下做到了 18 位无噪声分辨率。
CS5532 是老牌芯片了,噪声性能很好。但它的数字接口有点奇葩,需要仔细看时序图。
MCP3561 是 Microchip 的新品,输出速率高,适合需要快速采样的场景。但它的功耗比前几款大一些。
选型建议:先确定你需要的输出速率和有效位数,再反推需要的过采样率。不要盲目追求高分辨率,够用就好。
4.6 驱动开发要点
写 Sigma-Delta ADC 的驱动,有几个地方容易踩坑。
初始化顺序:一定要先配置调制器参数,再配置数字滤波器,最后启动转换。顺序错了,芯片可能不工作。
数据读取:大多数 Sigma-Delta ADC 的数据是 24-bit 有符号数。读取时要注意字节顺序(大端还是小端)。
// 示例:读取 ADS1256 数据
uint8_t buf[3];
uint32_t raw;
int32_t value;
// 发送 RDATA 命令
spi_write(0x01);
spi_read(buf, 3);
// 组合成 24-bit 有符号数
raw = ((uint32_t)buf[0] << 16) | ((uint32_t)buf[1] << 8) | buf[2];
if (raw & 0x800000) {
value = (int32_t)(raw | 0xFF000000);
} else {
value = (int32_t)raw;
}
同步问题:多通道切换时,一定要等数字滤波器稳定后再读数据。否则读到的可能是上一个通道的残留数据。
避坑指南:我曾经在切换通道后立即读数据,结果数据跳变严重。后来加了 10 ms 延时,问题解决。不同芯片的建立时间不同,一定要看数据手册。
4.7 小结
Sigma-Delta ADC 的核心就是「过采样 + 噪声整形 + 数字滤波」。理解这三者的关系,你就能用好这类芯片。
我个人建议:新手先从 ADS1256 入手,它资料多、社区活跃。等熟悉了 Sigma-Delta 的特性,再尝试其他芯片。
嗯,最后说一句:别被那些复杂的数学公式吓到。实际项目中,你只需要关心输出速率、有效位数和建立时间这三个参数就够了。