当前位置:首页 > 工业控制 > 工业控制
[导读]24位ADC最容易被误读成“满量程/1677万=分辨率到手”。实际工业现场,毫伏级信号(热电偶、应变桥、RTD压差)跑在24位Σ-Δ上,有效稳定位往往只有18~21位,剩下低位在跳——这不是芯片坏,是噪声底、参考源漂移、前端放大和PCB布局共同吃掉了解析度。


24位ADC最容易被误读成“满量程/1677万=分辨率到手”。实际工业现场,毫伏级信号(热电偶、应变桥、RTD压差)跑在24位Σ-Δ上,有效稳定位往往只有18~21位,剩下低位在跳——这不是芯片坏,是噪声底、参考源漂移、前端放大和PCB布局共同吃掉了解析度。

一、先定信号链,再谈代码

毫伏信号直接进ADC是浪费动态范围。0~100mV进2.5V参考ADC,只用满量程4%。正确链路:

传感器差分输出 → 仪表放大(INA) → RC抗混叠 → 24位ADC → MCU滤波

仪表放大做共模抑制,增益抬到ADC输入区的50%~80%

差分输入走双绞屏蔽线,屏蔽层单端接地

ADC前端加RC低通,截止频率按输出速率一半取

VREF用外部低噪声基准(如REF5025),别用AVDD分压凑

模拟地/数字地单点相连,去耦电容紧贴引脚

软件救不了“前端先在噪声里泡过”的采样。

二、ADC配置:低速+差分+SYNC时序

以ADS1256类为例,毫伏慢变信号别开高速率,10SPS对应50Hz陷波,工频抑制最稳。

void adc_init(void){

   write_reg(0x00,0x00);          // STATUS清默认

   write_reg(0x01,0x10);          // MUX:AIN0-AIN1差分

   write_reg(0x02,0x20);          // PGA=1

   write_reg(0x03,0x04);          // DRATE=10SPS

   send_cmd(CMD_SYNC);            // 配置后必须SYNC

   delay_us(1);

   send_cmd(CMD_WAKEUP);

}

读数据前必须等DRDY拉低,否则拿到的是上一轮旧转换:

int32_t adc_read(void){

   while(gpio_read(DRDY));        // 等转换完成

   send_cmd(0x01);                // RDATAC

   uint8_t b[3]={spi_rw(0),spi_rw(0),spi_rw(0)};

   send_cmd(0x00);                // 退出连续读(按芯片手册)

   int32_t v = ((int32_t)b[0]<<16)|(b[1]<<8)|b[2];

   if(v & 0x800000) v -= 0x1000000;   // 24位补码符号扩展

   return v;

}

换通道顺序按手册来:DRDY低→改MUX→SYNC→读旧数据,别在转换中途切通道。

三、软件滤波:平均+去抖,不迷信“24位”

低位跳动是正常的。处理原则:

随机噪声→滑动平均/过采样有效

零点漂移→平均救不了,要校准

工频周期干扰→采样窗口取20ms整数倍

#define N 16

static int32_t buf[N];

static uint8_t idx;


int32_t adc_filter(int32_t raw){

   buf[idx]=raw; idx=(idx+1)%N;

   int64_t sum=0;

   for(int i=0;i<N;i++) sum+=buf[i];

   return (int32_t)(sum/N);

}

更稳一点用“去极值平均”:去掉最大最小再平均,抗单次尖峰。输出前做零点校准:

static int32_t zero_offset;

void adc_cal_zero(void){

   zero_offset = adc_filter(adc_read());   // 输入短接时采

}

int32_t adc_value(void){

   return adc_filter(adc_read()) - zero_offset;

}

上电前几十个采样丢掉,参考源和PGA没稳。

四、增益与参考源才是精度天花板

代码再细也补不回这两处:

参考电压温漂:基准漂1ppm/℃在2.5V下就是2.5μV/℃,毫伏信号直接被带偏

PGA增益过高:小信号放大同时把失调放大,零点校准入固件

电源纹波:AVDD纹波经PSRR漏进ADC,LDO单独供模拟侧

RTD/电桥类建议比率测量:激励源和VREF同源,激励波动在比值里抵消。

五、落坑清单

以为24位输出=24位有效→低位狂跳

毫伏信号不放大直接采→只用满量程几个百分点

MUX切换不SYNC→通道串扰

DRDY没等就读→旧数据错位

三字节不符号扩展→负输入变巨数

只做平均不做零点校准→温漂累积

VREF用AVDD分压→基准噪声吃掉小信号

模拟数字地割开不连→ADC参考地飘

10kSPS采温度→工频噪声全进来

上电立刻采→前几百点漂移

六、落地顺序

仪表放大把mV抬到ADC区间50~80%

差分输入+屏蔽线+RC前端滤波

ADC配差分MUX、低速(10~50SPS)、外部VREF

DRDY中断取数,补码符号扩展

滑动平均/去极值,窗口取工频周期整数倍

上电短接输入做零点校准,存NV

定时重校零点或温度补偿修正漂移

串口/Modbus输出前做单位换算

毫伏级稳定采样不是“ADC位数拉满”,是前端把信号抬干净、参考源别漂、采样率别贪快、软件只做平均和校准。24位的价值在过采样换低噪声,不在最后几位真的稳定——工程上先看数据手册“有效分辨率”那张表,再决定滤波深度;参考源和地线没做对,代码平均到256点也还是跳。



本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭