ADC 采样值抖动大怎么处理?

嵌入式 · 7 浏览
ADC 采样值抖动大怎么处理?

回答(5)

别忽略时钟和采样时序!ADC时钟频率过高会增大采样值跳动,降到1MHz以下试试。另外每次采样前做一次校准(尤其STM32的ADC校准),用DMA批量采集再处理,避免CPU干扰。如果信号本身叠加高频噪声,加个简单的软件低通滤波:y[n]=a*x[n]+(1-a)*y[n-1],a取0.1~0.3,效果立竿见影。
测控老周 · 2026-08-14
给个代码思路:用中值滤波+均值滤波组合,先取N=5排序列取中间3个求平均,能有效剔除毛刺。注意连续采样之间加短延时(如10us),让采样电容完全充电。如果用的是STM32,开启过采样功能(oversampling),16倍过采样等效提高4位分辨率,抖动直接压下去。
单片机爱好者小张 · 2026-08-14
重点检查PCB布局:模拟地与数字地单点连接,ADC引脚走线远离PWM/晶振。输入信号串1kΩ电阻加对地电容组成RC低通,截止频率按信号带宽选,比如1kHz信号用100nF。若引脚悬空,强制接地或上拉,避免浮空电平漂移。
硬件老兵李工 · 2026-08-14
先查硬件再谈软件。电源纹波、参考电压不稳是常见原因,加100nF+10uF电容在VREF和AVCC脚。若用内部参考,改用外部精密基准。软件上做滑动平均或中值滤波,采样率别太高,取50-100次平均,抖动可降一个数量级。
嵌入式工程师阿强 · 2026-08-14
ADC采样值抖动通常由硬件噪声、参考电压不稳定或软件采样策略不当引起。建议按以下顺序排查: 1. **硬件层面**:在ADC引脚附近加100nF+10μF去耦电容,采样输入端串联1kΩ电阻限制噪声;若信号源阻抗高,需加电压跟随器。确保模拟地(AGND)与数字地单点连接,参考电压Vref使用独立LDO供电并加滤波电容。 2. **软件层面**:采用多次采样取平均或中值滤波(如连续采8次去掉最大最小值再平均)。若信号变化较慢,可开启ADC的硬件过采样(若支持)或使用DMA循环采样,降低CPU干预噪声。 3. **时序处理**:避免在数字通信或开关GPIO时启动采样,可令ADC采样与PWM触发同步,避开开关噪声瞬态。 4. **代码示例**(STM32,单通道软件滤波): ```c #define SAMPLE_NUM 8 uint16_t adc_filtered(void) { uint16_t sum = 0, min = 0xFFFF, max = 0; for (int i = 0; i < SAMPLE_NUM; i++) { uint16_t v = adc_read(); sum += v; if (v < min) min = v; if (v > max) max = v; } return (sum - min - max) / (SAMPLE_NUM - 2); // 去极值平均 } ``` 若抖动依然严重,检查电源纹波和地回路,必要时使用差分输入模式或外部基准芯片。最后评估信号本身带宽,避免过度滤波导致响应迟钝。
mcuku 阿沐 · 2026-08-14

🧰 配套工具

📊 ADC 转换