3、模数转换器(ADC)选型与配置:Σ-Δ ADC与SAR ADC对比、分辨率与采样率权衡、参考电压设计、SPI/I2C接口配置

做压传感器测量,ADC选型是绕不开的核心环节。我见过不少工程师,传感器选得挺好,结果ADC没配好,整个系统精度直接拉胯。今天咱们就把ADC这块掰开揉碎了讲清楚。

3.1 Σ-Δ ADC与SAR ADC:两种主流架构的硬碰硬

先说说这两种ADC的本质区别。说白了,SAR ADC就像个急性子,一次比较就能出结果;Σ-Δ ADC则像个慢性子,反复采样、积分、再处理。但慢性子往往更精细。

对比项 Σ-Δ ADC SAR ADC
分辨率 16~24位,甚至更高 8~16位为主
采样率 通常低于1kSPS(高精度模式) 可达数MSPS
噪声性能 极低,内置数字滤波器 中等,依赖外部抗混叠
功耗 较高(尤其高精度模式) 较低
典型应用 称重、压力、温度 数据采集卡、示波器

我个人习惯,做压传感器测量,首选Σ-Δ ADC。为什么?因为压传感器输出信号通常很微弱,mV级别,而且变化缓慢。Σ-ADC内部有过采样和数字滤波,能有效抑制工频干扰和噪声。我在一个工业称重项目里用过24位的ADS1232,效果相当稳。

核心结论:压传感器测量,Σ-Δ ADC是更合适的选择。SAR ADC适合高速、低分辨率的场景。

3.2 分辨率与采样率:鱼和熊掌怎么兼得?

很多新手上来就问:「我要24位ADC,采样率要1kSPS。」嗯,这个要求其实挺矛盾的。为什么?因为Σ-Δ ADC的分辨率和采样率是成反比的。

拿ADS1256举例,它有个数据速率寄存器。你设成2.5SPS时,有效分辨率能到23.7位;但设成30kSPS时,有效分辨率就掉到16位左右了。这就是权衡。

// ADS1256 数据速率配置示例
// 寄存器地址 0x02 - DRATE
// 0xF0 -> 2.5 SPS (最高分辨率)
// 0xE0 -> 5 SPS
// 0xD0 -> 10 SPS
// 0xC0 -> 15 SPS
// 0xB0 -> 25 SPS
// 0xA0 -> 30 SPS
// 0x90 -> 50 SPS
// 0x80 -> 60 SPS
// 0x70 -> 100 SPS
// 0x60 -> 500 SPS
// 0x50 -> 1000 SPS
// 0x40 -> 2000 SPS
// 0x30 -> 3750 SPS
// 0x20 -> 7500 SPS
// 0x10 -> 15000 SPS
// 0x00 -> 30000 SPS

void setADCRate(uint8_t rate) {
    // 写寄存器命令
    SPI_CS_LOW();
    SPI_TransferByte(0x50);  // 写寄存器命令
    SPI_TransferByte(0x02);  // 寄存器地址
    SPI_TransferByte(rate);  // 速率值
    SPI_CS_HIGH();
    delayMicroseconds(10);
}

我的经验:做静态压力测量,10SPS完全够用。你想想看,压力变化能有多快?除非是做动态冲击测试,否则别盲目追求高采样率。我曾经有个项目,客户非要1kSPS,结果噪声大得没法看,最后降到20SPS,问题全解决了。

3.3 参考电压设计:ADC精度的基石

参考电压,说白了就是ADC的「尺子」。这把尺子不准,后面再好的算法也白搭。

我见过最坑的案例:有人直接用板子上的3.3V电源给ADC做参考电压。结果电源纹波有50mV,ADC的16位分辨率直接废了一半。嗯,这里要注意,参考电压的噪声必须比ADC的LSB小一个数量级。

举个例子,24位ADC,参考电压5V,LSB = 5V / 2^24 ≈ 0.3μV。你想想看,参考电压的噪声得控制在0.03μV以内。普通LDO根本做不到,必须用专用的参考电压芯片。

参考电压芯片 初始精度 温漂 噪声(0.1-10Hz) 适合场景
REF5025 ±0.05% 3ppm/°C 3μVpp 16位系统
ADR421 ±0.04% 1ppm/°C 1.75μVpp 20位系统
LTZ1000 ±0.01% 0.05ppm/°C 0.3μVpp 24位系统

避坑指南:我曾经在24位系统里用了REF5025,结果发现噪声还是偏大。后来排查发现,是PCB布局时参考电压走线离数字信号线太近,串扰进来了。记住:参考电压的走线要单独铺地隔离,远离时钟线和SPI线。

3.4 SPI/I2C接口配置:通信的最后一公里

ADC和MCU之间怎么通信?主流就两种:SPI和I2C。我个人更倾向SPI,为什么?速度快、协议简单、抗干扰强。

但I2C也有它的优势:只需要两根线,适合引脚少的MCU。不过I2C的速率上限通常只有400kHz(快速模式),对于高采样率的ADC可能不够用。

下面给个SPI配置的示例,以ADS1256为例:

// SPI初始化配置
void SPI_Init(void) {
    // 设置SPI为主模式
    // CPOL = 1, CPHA = 1 (模式3)
    // 时钟频率: 2.5MHz (ADS1256最高支持10MHz)
    SPCR = (1 << SPE) | (1 << MSTR) | (1 << CPOL) | (1 << CPHA);
    SPSR = (1 << SPI2X);  // 双倍速
}

// 读取ADC数据
uint32_t ReadADC(void) {
    uint32_t data = 0;
    
    // 拉低片选
    SPI_CS_LOW();
    delayMicroseconds(1);
    
    // 发送读取命令 0x01
    SPI_TransferByte(0x01);
    
    // 读取3个字节 (24位数据)
    data |= (uint32_t)SPI_TransferByte(0xFF) << 16;
    data |= (uint32_t)SPI_TransferByte(0xFF) << 8;
    data |= (uint32_t)SPI_TransferByte(0xFF);
    
    // 拉高片选
    SPI_CS_HIGH();
    
    return data;
}

小技巧:SPI通信时,片选信号一定要干净。我遇到过因为片选抖动导致数据错位的问题,后来在片选引脚上加了个10kΩ上拉电阻,问题就解决了。另外,SPI时钟线尽量短,别超过10cm,否则信号反射会让你头疼。

3.5 知识体系总览

下面这张图把ADC选型与配置的核心逻辑串起来了,你一看就明白:

ADC选型与配置知识体系 ADC选型与配置 Σ-Δ vs SAR 架构 Σ-Δ: 高精度、低速率 SAR: 中精度、高速率 压传感器首选Σ-Δ 分辨率与采样率权衡 高分辨率 ↔ 低采样率 静态测量: 10SPS足够 动态测量: 需折中考虑 参考电压设计 噪声必须 < LSB/10 专用芯片 vs 电源直供 PCB布局隔离是关键 SPI / I2C 接口配置 SPI: 高速、抗干扰强 I2C: 引脚少、速率低 片选信号要干净 实际应用注意事项 抗混叠滤波器 PCB布局与接地 电源去耦电容 核心:精度、速率、噪声、通信四要素平衡

这张图把ADC选型的四个核心维度都串起来了。你从中心出发,往四个方向看,每个分支都是一个独立的决策点。实际做项目时,我习惯先定架构(Σ-Δ),再定分辨率(24位),然后选参考电压芯片,最后配通信接口。按这个顺序走,基本不会出大问题。

最后说一句:ADC选型没有绝对的「最好」,只有「最合适」。你想想看,一个静态称重系统,用24位Σ-Δ ADC加REF5025,10SPS采样率,SPI通信,这套配置下来,精度做到0.01%完全没问题。但如果你非要用SAR ADC硬上,那可能得在模拟前端花更多功夫。


公众号:蓝海资料掘金营,微信deep3321