[STM32-HAL库]ADC采集-DMA中断采集-平均值滤波-STM32CUBEMX开发-HAL库开发系列-主控STM32F103C8T6

目录

一、前言

二、实现步骤

1.STM32CUBEMX配置

2.Keil工程程序设计

三、结语


一、前言

本文通过STM32CUBEMX实现对ADC的数据采集和滤波操作,帮助各位开发者完成与模拟量输入的采集工作。

二、实现步骤

1.STM32CUBEMX配置

以STM32F103C8T6为例,打开STM32CUBEMX,配置好系统时钟为72MHz后,在ADC中使能IN1、IN2(数量不限,但两个以上有额外操作)

随后,由于我们选择了两个输入口,因此我们还需要按照下图进行配置。先将Number of conversion设置为2,随后将Rank 2的channel设置为Channel 1(此处对应IN1)

这样的配置可以实现同时采集两个通道的值。

随后使能连续转换模式,如下图。

按照下图步骤配置DMA。

随后使能中断,配置中断优先级。

再次来到时钟树配置页,关闭错误提示。

修改下图处配置,将ADC采集频率设定为12MHz

配置完工程的其他必要信息后,生成代码并打开。

2.Keil工程程序设计

先定义ADC-DMA数据数组,此处定义数组大小为100,代表采集100次数据。

随后在主函数初始化部分开启DMA采集。

开启后,相关数据将会被采集并存储在ADC数组中,以上述配置为例,数组内的存储顺序是ADC[0]是IN0的值,ADC[1]是IN1的值,ADC[2]是IN0的值......一直循环,如下表所示。

|-----|----------|----------|----------|------------|-----------|-----------|
| 数据 | ADC[0] | ADC[1] | ADC[2] | ADC[...] | ADC[98] | ADC[99] |
| 采集口 | IN0 | IN1 | IN0 | ... | IN0 | IN1 |

对于得到的值,我们还需要进行转换才能得到真正的电压值。以上使用的代码和转换公式如下。

uint32_t ADC[100]={0};
HAL_ADC_Start_DMA(&hadc1,(uint32_t *)ADC,100);

电压值Val=ADC[0]/4096.0 *量程

上述的情况下,相当于我们一共采集的100次的值,每个通道50次,而我们只使用第一次的值,这不符合编程规范,我们应该对其取平均值做滤波处理。滤波函数如下。

cs 复制代码
float GetValue(int start,int step,int size){
	int i,count=0;
	float value=0;
	for(i=start;i<size;i+=step)
	{
		value+=ADC[i]/4096.0*3.3;
		count++;
	}
	return value/count;	
}

这时,我们可以调用函数来获取平均值了。以本文配置为例,start代表起始为0,步长为2,最大为100。

cs 复制代码
float val=GetValue(0,2,100);

随后我们可以对值进行打印或其他操作。

三、结语

通过上述步骤,我们可以实现DMA方式采集ADC的数据,并且通过对数据进行平均值滤波的处理后得到稳定的ADC值,这种方法可以运用于摇杆、光敏等等传感器的数据采集上,稳定性好、可靠性高。

如果对上述相关程序有疑义,欢迎评论区交流。水平有限,仅作技术分享;若有错误,恳请批评指正。

相关推荐
lucy153027510796 分钟前
【青牛科技】GC5931:工业风扇驱动芯片的卓越替代者
人工智能·科技·单片机·嵌入式硬件·算法·机器学习
明达技术14 分钟前
物联优化汽车齿轮锻造
分布式·物联网
北京天拓四方1 小时前
5G工业网关的主要功能有哪些?天拓四方
物联网·其他·5g·边缘计算·iot
vfbox339811 小时前
C-DTL698电表 转 IEC61850 协议项目案例
物联网·iec61850·vfbox·协议转换工业网关·c-dtl698
易云码13 小时前
信息安全建设方案,网络安全等保测评方案,等保技术解决方案,等保总体实施方案(Word原件)
数据库·物联网·安全·web安全·低代码
scan113 小时前
单片机串口接收状态机STM32
stm32·单片机·串口·51·串口接收
Qingniu0113 小时前
【青牛科技】应用方案 | RTC实时时钟芯片D8563和D1302
科技·单片机·嵌入式硬件·实时音视频·安防·工控·储能
Mortal_hhh14 小时前
VScode的C/C++点击转到定义,不是跳转定义而是跳转声明怎么办?(内附详细做法)
ide·vscode·stm32·编辑器
深圳市青牛科技实业有限公司15 小时前
【青牛科技】应用方案|D2587A高压大电流DC-DC
人工智能·科技·单片机·嵌入式硬件·机器人·安防监控
Mr.谢尔比16 小时前
电赛入门之软件stm32keil+cubemx
stm32·单片机·嵌入式硬件·mcu·信息与通信·信号处理