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);
}
模拟电源不稳定或存在噪声 输入信号走线较长或靠近数字信号线,引入高频噪声 如果信号源内阻较大,ADC采样电容充电不足,也会导致读数跳变。可以根据信号源阻抗调整采样时间。 VDDA或VREF+存在轻微波动,影响ADC的基准电压。 若使用外部参考源,增加 LC 滤波 STM32F103 的 ADC 模块对供电质量非常敏感。 输入阻抗不匹配 地线噪声耦合到模拟信号中,影响采样值。 优化PCB布局,将模拟部分与数字部分分离,避免高频信号线靠近ADC信号线 可以在软件中增加滤波算法,例如使用滑动平均滤波或中值滤波来平滑采样值。 对比信号源输出与 ADC 输入引脚,排查 PCB 走线是否引入噪声。 ADC信号走线应远离高频数字信号 定期对ADC进行校准,以补偿长期漂移和温度变化带来的误差 VDD的波动会直接影响ADC基准,导致采样误差。 在PCB上将AGND和DGND通过0Ω电阻或磁珠在电源入口处单点连接。 在电源和地之间增加去耦电容,以减少电源噪声。
页:
[1]