基于STM32的ADC采样及各式滤波实现(HAL库,含VOFA+教程)_数据采集滤波算法stm32

本文详细介绍了在STM32嵌入式开发中,如何配置ADC、时钟树以及各种滤波算法如一阶互补、中位值、算术平均、滑动平均、限幅平均和卡尔曼滤波的应用。通过比较不同滤波器的效果,强调了根据实际工程需求选择合适滤波器的重要性。
摘要由CSDN通过智能技术生成

4、ADC1配置:利用ADC1的通道IN1进行AD采样,保持独立模式;

5、时钟树配置:

6、工程配置:

四、滤波算法与效果

受限于MCU自身的ADC外设缺陷,其精度和稳定性通常较差,很多场景下需要采取滤波补偿。
滤波的作用就是减少噪声与干扰对数据测量的影响。

4.1 未添加滤波算法

重写printf函数:

#include "stdio.h"
//重定义
int fputc(int c,FILE *stream)
{
	uint8_t ch[1]={c};
	HAL_UART_Transmit(&huart1,ch,1,0xFFFF);
	return c;
}

main函数:

while(1){	
    HAL_ADC_Start(&hadc1);						//开启ADC1,放置在while循环中
	ADC_value=HAL_ADC_GetValue(&hadc1);			//获取ADC1的数值
	HAL_Delay(10);								//延迟函数,防止采样失效
	printf("ADC_value:%d\n", ADC_value);
}

VOFA+读取到的数据:

上图借助VOFA+上位机可以清楚看出未使用滤波的ADC采样波动还是比较明显的,但是作者主观干啥F1系列的ADC确实好像比F4系列的ADC稳定些。(之所以不是4096可能是因为电源未达到3.3v

4.2 一阶互补滤波

方法:取a=0~1,本次滤波结果=(1-a)本次采样值+a上次滤波结果
优点:对周期性干扰具有良好的抑制作用适用于波动频率较高的场合
缺点:相位滞后,灵敏度低滞后程度取决于a值大小不能消除滤波频率高于采样频率的1/2的干扰信号

//一阶互补滤波
int firstOrderFilter(int newValue, int oldValue, float a)
{
	return a * newValue + (1-a) * oldValue;
}

ADC_value=HAL_ADC_GetValue(&hadc1);			//获取ADC1的数值
//主函数
while(1){
    HAL_ADC_Start(&hadc1);						//开启ADC1,放置在while循环中
    Filtering_Value = firstOrderFilter(HAL_ADC_GetValue(&hadc1),ADC_value,0.3);    //滤波算法
	HAL_Delay(10);								//延迟函数,防止
STM32ADC采样可以使用HAL库提供的函数进行操作。在启动ADC采样前,通常需要进行校准以提高采样准确性。可以使用函数HAL_ADCEx_Calibration_Start来进行自校准,该函数需要在ADC启动前使用。\[1\] STM32ADC具有1到3个ADC,可以独立使用或者使用双重模式以提高采样率。ADC是12位逐次逼近型的模拟数字转换器,具有18个通道,可以测量16个外部和2个内部信号源。ADC的转换可以以单次、连续、扫描或间断模式执行,并且结果可以以左对齐或右对齐方式存储在16位数据寄存器中。\[2\] HAL库对于STM32ADC采样转换提供了轮询、中断和DMA三种方式。可以根据需要选择合适的方式进行操作。此外,每个ADC每次处理时只能处理一个通道,所以在多通道采样时还涉及扫描模式。通过组合这些模式,可以满足不同的应用需求。\[3\] #### 引用[.reference_title] - *1* *3* [使用HAL库开发STM32ADC基础使用](https://blog.csdn.net/Naisu_kun/article/details/121532288)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [基于STM32ADC采样各式滤波实现HAL库VOFA+教程)](https://blog.csdn.net/black_sneak/article/details/129629485)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值