登录/注册

STM32 内部ADC滤波

STM32 内部ADC滤波

更多

在STM32内部ADC应用中,滤波是提升采样精度和稳定性的重要手段。以下是常见的滤波方法及实现建议:

一、硬件滤波措施

  1. RC低通滤波
    在ADC输入引脚前添加RC电路(电阻+电容),滤除高频噪声。
    典型值:R=100Ω~1kΩ,C=100nF~1μF(根据信号带宽调整)

  2. 电源去耦

    • 在VREF+和VSSA引脚并联0.1μF陶瓷电容+1~10μF钽电容
    • ADC供电建议使用LDO稳压芯片(如AMS1117)
  3. PCB布局优化

    • 缩短模拟走线长度,远离数字信号线
    • 使用独立模拟地平面,单点接地

二、软件滤波方法

  1. 多次采样取平均(最常用)

    #define SAMPLE_TIMES 16  // 采样次数可调
    uint32_t adc_filter(void) {
    uint32_t sum = 0;
    for(int i=0; i<SAMPLE_TIMES; i++){
        sum += HAL_ADC_GetValue(&hadc1);
        HAL_Delay(1);  // 适当间隔
    }
    return sum / SAMPLE_TIMES;
    }
  2. 滑动平均滤波(适合实时处理)

    
    #define FILTER_WINDOW 8
    uint16_t filter_buf[FILTER_WINDOW];
    uint8_t index = 0;

uint16_t moving_average(uint16_t new_val) { static uint32_t sum = 0; sum = sum - filter_buf[index] + new_val; filter_buf[index] = new_val; index = (index + 1) % FILTER_WINDOW; return sum / FILTER_WINDOW; }


3. **中值滤波**(适合脉冲干扰)
```c
int compare(const void *a, const void *b) {
    return (*(uint16_t*)a - *(uint16_t*)b);
}

uint16_t median_filter(uint16_t *buf, uint8_t size) {
    uint16_t temp[size];
    memcpy(temp, buf, size*sizeof(uint16_t));
    qsort(temp, size, sizeof(uint16_t), compare);
    return temp[size/2];
}

三、ADC配置优化

  1. 采样时间设置
    根据信号源阻抗调整SAMPLETIME(在CubeMX中配置):

    • 高阻抗信号源:选择较长的采样时间(如239.5 cycles)
    • 低阻抗信号源:可缩短采样时间提升速度
  2. 参考电压选择
    优先使用独立VREF基准源,若使用VDDA需确保电源稳定

  3. 时钟配置
    ADC时钟建议不超过器件手册推荐值(通常≤36MHz)

四、进阶处理

  1. 噪声抑制技巧

    • 采样期间关闭其他外设时钟(如PWM、通信接口)
    • 使用DMA传输避免CPU干扰
  2. 校准机制

    HAL_ADCEx_Calibration_Start(&hadc1, ADC_SINGLE_ENDED);  // 上电后执行校准
  3. 温度补偿
    若工作环境温差大,需定期重新校准ADC

五、调试建议

  1. 用示波器观察原始信号波形
  2. 通过DAC输出验证ADC采样结果
  3. 使用STM32CubeMonitor实时监测采样数据

选择滤波方法时需权衡:

建议先用硬件做基础滤波,再通过软件算法进一步处理,通常组合使用效果更佳。

STM32ADC采样及各式滤波算法实现

本文为手把手教学ADC采样及各式滤波算法的教程,本教程的MCU采用STM32F103ZET6。以HAL库的

2024-10-28 10:51:11

STM32ADC项目应用,用什么算法滤波和稳定数据抖动?

STM32的ADC项目应用,大家都用什么算法滤波和稳定数据抖动。 ADC

2024-04-17 08:20:15

STM32G070 ADC如何禁用内部基准?

STM32G070 :使用ADC时,不想使用MCU自带的VREF电压源,但只要使能ADC的ADEN位(CR寄存器),

2024-03-27 06:50:26

STM32ADC学习历程

STM32的ADC学习历程(电源技术期刊影响因子)- STM32的ADC

资料下载 王越建 2021-09-27 12:32:55

STM32ADC驱动程序

STM32的ADC驱动程序(电源技术被踢出核心)-  STM32的ADC

资料下载 刘满贵 2021-09-23 13:43:22

STM32ADC代码例程

STM32的ADC代码例程(普德新星电源技术有限公司怎么样)- STM32的ADC

资料下载 vinww特烦恼 2021-09-23 09:53:19

ADC数字滤波原理

ADC数字滤波原理(理士电源技术有限公司地址)-ADC数字滤波原理   

资料下载 ejlwj 2021-08-31 15:32:41

STM32F30x 的ADC 采样的傅立叶变换

STM32F30x 的ADC 采样的傅立叶变换(理士国际电源技术有限公司)-本文目的是演示如何使用STM32F30x

资料下载 鼠爱米 2021-08-04 17:47:45

STM32F030芯片内部ADC结果挪位的问题分析及解决办法

有人使用STM32F030芯片内部ADC的CH0、CH3、CH5共3个通道,单次扫描转换后通过DMA将结果放在一个数组。

2024-01-05 10:14:05

ADC内部原理是什么?如何获得ADC最佳精度呢?

STM32微控制器中内置的ADC使用SAR(逐次逼近)原则,分多步执行转换。转换步骤数等 于ADC转换器中的位数。每个步骤均由

2023-06-21 17:17:29

SAR ADC内部结构

STM32微控制器中内置的ADC使用SAR(逐次逼近)原则,分多步执行转换。转换步骤数等 于ADC转换器中的位数。每个步骤均由

2022-05-07 15:03:37

如何用ADC测量内部温度传感器温度值

stm32 ADC测量内部温度传感器温度值,使用DMA方式传输,并通过串口观察数据。实验器材:探索者

2021-11-24 06:11:35

STM32 ADC基础内容

STM32的每个ADC有数条复用模拟输入通道,具体通道数因不同系列及型号而异。片内温度传感器、内部参考电压、VBAT还可以与

2021-03-12 13:51:49

ADC内部原理说明

用了这么久ADC,从没细看过ADC的内部原理和如何获得最佳精度,今天看到一篇ST的官方文档讲的不错,这里整理分享给大家。

2020-08-30 10:04:46

STM32内部三个ADC模块分析

ADC:1.STM32内部的ADC模块有三个

2019-07-08 06:31:48
7天热门专题 换一换
相关标签