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 的特性,再尝试其他芯片。

嗯,最后说一句:别被那些复杂的数学公式吓到。实际项目中,你只需要关心输出速率、有效位数和建立时间这三个参数就够了。