灰色与青 发表于 2025-7-1 18:49

STM32F103 ADC 采样不稳定问题

本帖最后由 灰色与青 于 2025-7-3 19:13 编辑

在一个使用STM32F103 的项目中,ADC 采样值波动很大,即使输入电压稳定,采样结果也会有 ±5 个 LSB 的跳动。

排查过程:

检查电源和地,发现 ADC 参考电压 VREF + 有轻微波动
查看 ADC 配置,发现采样时间设置过短 (55.5 周期)
检查 PCB 布局,发现模拟地和数字地没有分开

解决方案:

在 VREF + 和 GND 之间添加 10μF 和 0.1μF 去耦电容
增加 ADC 采样时间到 239.5 周期
改进 PCB 布局,将模拟地和数字地分开,最后单点连接

同时软件也增加滤波
// 原来的ADC初始化代码
ADC_InitStructure.ADC_SampleTime = ADC_SampleTime_55Cycles5;

// 修改后的ADC初始化代码
ADC_InitStructure.ADC_SampleTime = ADC_SampleTime_239Cycles5;

// 增加软件滤波
#define ADC_FILTER_N8
uint16_t ADC_Filter(uint8_t channel)
{
    uint32_t sum = 0;
    uint8_t i;

    for(i = 0; i < ADC_FILTER_N; i++)
    {
      sum += ADC_GetConversionValue(ADC1);
      delay_ms(1);
    }

    return (uint16_t)(sum / ADC_FILTER_N);
}

albertaabbot 发表于 2025-7-3 17:18

模拟电源不稳定或存在噪声            

jackcat 发表于 2025-7-3 19:23

输入信号走线较长或靠近数字信号线,引入高频噪声

lihuami 发表于 2025-7-3 20:12

如果信号源内阻较大,ADC采样电容充电不足,也会导致读数跳变。可以根据信号源阻抗调整采样时间。

wangdezhi 发表于 2025-7-3 21:25

VDDA或VREF+存在轻微波动,影响ADC的基准电压。

nomomy 发表于 2025-7-4 10:17

若使用外部参考源,增加 LC 滤波

mattlincoln 发表于 2025-7-4 11:20

STM32F103 的 ADC 模块对供电质量非常敏感。

iyoum 发表于 2025-7-4 12:14

输入阻抗不匹配            

ulystronglll 发表于 2025-7-4 13:17

地线噪声耦合到模拟信号中,影响采样值。

macpherson 发表于 2025-7-4 14:16

优化PCB布局,将模拟部分与数字部分分离,避免高频信号线靠近ADC信号线

febgxu 发表于 2025-7-4 15:11

可以在软件中增加滤波算法,例如使用滑动平均滤波或中值滤波来平滑采样值。

plsbackup 发表于 2025-7-4 16:00

对比信号源输出与 ADC 输入引脚,排查 PCB 走线是否引入噪声。

zerorobert 发表于 2025-7-4 18:33

ADC信号走线应远离高频数字信号

geraldbetty 发表于 2025-7-4 21:08

定期对ADC进行校准,以补偿长期漂移和温度变化带来的误差

macpherson 发表于 2025-7-5 20:15

VDD的波动会直接影响ADC基准,导致采样误差。

lihuami 发表于 2025-7-5 21:03

在PCB上将AGND和DGND通过0Ω电阻或磁珠在电源入口处单点连接。

ingramward 发表于 2025-7-5 22:00

在电源和地之间增加去耦电容,以减少电源噪声。
页: [1]
查看完整版本: STM32F103 ADC 采样不稳定问题