蓝桥杯——ADC 和 DMA

理论知识

STM32 ADC的常用的三种工作模式,搭配一些AD转换芯片的可选择的类型会更加的丰富

1. 轮询模式
2. 中断模式
3. DMA模式

轮询模式
相对应于HAL库中的配置函数主要有:

HAL_StatusTypeDef HAL_ADC_Start(ADC_HandleTypeDef* hadc);//轮询模式,需放在循环中不断开启
 
HAL_StatusTypeDef HAL_ADC_Stop(ADC_HandleTypeDef* hadc);
 
HAL_StatusTypeDef HAL_ADC_PollForConversion(ADC_HandleTypeDef* hadc, uint32_t Timeout);  //等待转换结束,只适用于轮询,注意配置转换时间


中断模式
相对应于HAL库中的配置函数主要有:


HAL_StatusTypeDef HAL_ADC_Start_IT(ADC_HandleTypeDef* hadc);//中断模式
 
HAL_StatusTypeDef HAL_ADC_Stop_IT(ADC_HandleTypeDef* hadc);
 
void HAL_ADC_IRQHandler(ADC_HandleTypeDef* hadc);//中断

DMA模式
相对应于HAL库中的配置函数主要有:


HAL_StatusTypeDef HAL_ADC_Start_DMA(ADC_HandleTypeDef* hadc, uint32_t* pData, uint32_t Length);//DMA模式
 
HAL_StatusTypeDef HAL_ADC_Stop_DMA(ADC_HandleTypeDef* hadc);
 
uint32_t HAL_ADC_GetValue(ADC_HandleTypeDef* hadc); //读取ADC的值
 
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc);//结束后回调
 
void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc);//转换过程中回调

转换数据处理

取得AD的转换结果之后,一般需要进行数据滤波,比较常用的滤波思路有以下的几种,需要结合具体的项目进行优化,针对一些对精度、实时性的项目,可以多种滤波结合使用,达到自己想要的效果

1. 限幅滤波
A、方法:
根据经验判断,确定两次采样允许的最大偏差值(设为A)
每次检测到新值时判断:
如果本次值与上次值之差<=A,则本次值有效
如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值
B、优点:
能有效克服因偶然因素引起的脉冲干扰
C、缺点
无法抑制那种周期性的干扰
平滑度差

2. 中位值滤波法
A、方法:
连续采样N次(N取奇数),把N次采样值按大小排列 ,取中间值为本次有效值
B、优点:
能有效克服因偶然因素引起的波动干扰,对温度、液位的变化缓慢的被测参数有良好的滤波效果
C、缺点:
对流量、速度等快速变化的参数不宜

3. 算术平均滤波法
A、方法:
连续取N个采样值进行算术平均运算
N值较大时:信号平滑度较高,但灵敏度较低
N值较小时:信号平滑度较低,但灵敏度较高
N值的选取:一般流量,N=12;压力:N=4
B、优点:
适用于对一般具有随机干扰的信号进行滤波
这样信号的特点是有一个平均值,信号在某一数值范围附近上下波动
C、缺点:
对于测量速度较慢或要求数据计算速度较快的实时控制不适用
比较浪费RAM

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

5. 消抖滤波法
A、方法:
设置一个滤波计数器
将每次采样值与当前有效值比较:
如果采样值=当前有效值,则计数器清零
如果采样值<>当前有效值,则计数器+1,并判断计数器是否>=上限N(溢出)
如果计数器溢出,则将本次值替换当前有效值,并清计数器
B、优点:
对于变化缓慢的被测参数有较好的滤波效果,
可避免在临界值附近控制器的反复开/关跳动或显示器上数值抖动
C、缺点:
对于快速变化的参数不宜
如果在计数器溢出的那一次采样到的值恰好是干扰值,则会将干扰值当作有效值导
入系统
 

硬件解读

ADC 的意思是模数转换,将模拟量转换为数字量,同理, DAC 是将数字量转换为模拟量。
在蓝桥杯嵌入式 G4 主板上面的 ADC 的原理图部分如下:
        从图中不难看出,蓝桥杯嵌入式 G4 的主板的 ADC 是双通道,分别是 PB15 PB12 ,而
对应的电阻的型号是 R37 R38 ,注意,使用 ADC 时,需要连接跳线帽 J11 J12 。本章实
验我们采用的是 PB12 引脚,双通道的实验在后续讲解。        

Cubemx配置

常用函数

 转换的值为0-4096,对应0-3.3V

HAL_ADC_GetValue(&hadc2)*3.3/4096

ADC的DMA模式

 

 

选择连续传输

这个要选最大的最好,最小的2.5因为抢不过DMA的中断资源导致运行不了

这个不需要外设HSE时钟 

代码编写

注意,这里第二个参数必须是数组???,传的是接收字符串的地址 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值