STM入门学习32固件库(标准外设库) 第七章 ADC数模转换(2)
文章目录
- STM入门学习32固件库(标准外设库) 第七章 ADC数模转换(2)
- 前言
- 一、硬件电路
- 二、AD单通道
-
- 1 ADC常用函数分析
- 2 第一步开启RCC时钟
- 3 第二步配置GPIO
- 4 第三步选择规则组的注入通道
- 5 第四步是结构体的初始化ADC
- 6 第五步开启ADC电源
- 7 第六步对ADC进行校准
- 8 第七步写一个函数获取ADC结果
- 9 主函数
- 三、AD多通道
-
- 1 程序分析
- 总结
前言
本学习教程参考B站江科大自化协会STM32视频,型号为STM32F103C8T6。
一、硬件电路
传感器输出电压的电路包括光敏电阻、热敏电阻、红外接收管、麦克风等。这个电阻N如果电阻值无法测量,则需要与固定电阻串联分压,以获得反应电阻值的电压。传感器N1 N1电阻值变大,下拉作用变弱,输出端受上拉电阻R电压会升高。固定电阻R1可选择类似于传感器电阻值的电路,以便在中间电压区域获得更好的输出。
右图为电压转换电路。例如,我想测量05V的VIN电压,但是ADC只能接收03.3V如果电压,可以建立这样一个简单的转换电路,用电阻分压,上面的电阻是17k,下面电阻33k,共50k,根据分压公式,中间电压就是VIN/50k*33k,电压范围为0~3.3v你可以进去ADC转换。10V也可以采用此电路,但是高电压采集最好使用一些专用的采集芯片,比如隔离放大器等等,做好高低电压的隔离,保证电路安全。
二、AD单通道
电位器是滑动变阻器,用电位器产生0-3.3V接收连续变化的模拟电压信号PA0,然后用STM32内部的ADC读取屏幕上显示的电压数据。STM32的ADC是12位,所以AD最大值为4095,即212-1。使用ADC之后可以量化高低电平之间的任何电压,最后用变量表示,读取这个变量就可以知道引脚的具体电压,所以ADC可视为变压表。 根据引脚定义表,PA0到PB1这10个引脚是ADC可任意选择10个通道。其他引脚非ADC模拟电压不能连接到通道。
(1)封装AD.c与AD.h文件 (2)对AD初始化模数转换 具体步骤如下:
第一步开启RCC时钟,包括ADC和GPIO的时钟,ADCCLK还应配置分频器;
第二步配置GPIO,把需要用的GPIO模拟输入模式配置;
第三步配置多路开关(黄色部分),将左通道连接到右规则组列表;
第四步配置ADC转换器,库函数配置结构,包括单次转换或连续转换、扫描或非扫描、通道数量、触发源、数据对齐(左对齐)or右对齐)。要模拟看门狗,会有几个函数配置阈值和检测通道。如果您想打开中断,请使用中断输出控制ITConfig函数打开相应的中断输出,然后在NVIC配置优先级,可触发中断;
第五步调用ADC_Cmd函数,开启ADC。
1 ADC常用函数分析
打开rcc.h文件,拖到最后,配置预分频器函数。APB2的72MHz选择2、4、6、8频,输入到ADCCLK。 打开adc.h文件,拖到最后。 (1)常见的ADC结构初始化配置; (2)给ADC上电; (3)开启DMA如果使用输出信号DMA转运数据时,需要调用此函数; (4)中断输出控制,控制中断能否通过NVIC; (5)复位校准、复位校准、开始校准、开始校准; (6)ADC用于软件触发的函数和触发控制的软件开始转换控制。ADC获取软件开始转换状态,判断转换是否正在进行,但不能判断转换是否结束,函数返回值与转换是否结束无关; (7)判断转换是否结束,获取标志位状态,给出参数EOC标志位,判断EOC标志位置是否为1,置1为转换结束; (8)配置间断模式,第一个函数是每隔几个通道间断一次,第二个函数是否启用间断模式; (9)ADC规则组通道配置,此函数比较重要,作用为给序列的每个位置填写指定的通道,即填写点菜菜单的过程,第三个参数Rank是序列的位置,第四个指定通道的采样时间; (10)ADC外部触发转换控制是否允许外部触发转换; (11)ADC获得转换值更为重要,即获得转换值AD该函数用于转换数据寄存器,读取转换结果; (12)ADC获得双模式转换值,这是双模式转换值ADC模式读取转换结果的函数; (13)这些函数都带来了Injected,这意味着注入组,所以这大量函数是正确的ADC配置注入组; (14)配置模拟看门狗,第一个函数是否使用模拟看门狗,第二个是配置高低阈值,第三个是配置看门通道; (15)ADC温度传感器和内部参考电压控制用于打开两个内部通道。如果使用这两个通道,请调用此函数并打开它们,否则您将无法阅读正确的结果; (16)分别为获取标志位状态、清除标志位、中断状态和中断起位。
2 第一步开启RCC时钟
3 第二步配置GPIO
4 第三步选择规则组的注入通道
5 第四步是结构体的初始化ADC
6 第五步开启ADC电源
7 第六步对ADC进行校准
8 第七步写一个函数获取ADC结果
触发器的原理。如果数据跳跃严重,也可以采用滤波法AD比如平均滤波,读取10个或20个值,取平均值作为滤波AD值。还可以切割分辨率,去除数据尾数,减少数据波动
9 主函数
若修改为连续转换非扫描模式
三、AD多通道
连接光敏电阻、热敏电阻、反射红外传感器三个模块AO模拟电压输入端分别连接A1、A2、A3引脚,加上电位器一共四个通道,测出来的4个AD屏幕上分别显示数据。
1 程序分析
多通道需要使用扫描模式,使用列表填写所有四个通道,然后触发转换以实现多通道。但这里涉及到数据覆盖问题,如果你想使用扫描模式来实现多通道,最好与之合作DMA为了实现。可能会有一个问题,就是一个通道转换完成后,为什么要手动转移数据?DMA该方案在运行中存在以下问题:
(1)在扫描模式下,列表启动后,每个单独的通道转换完成后,不会产生任何标志位或触发中断,即不知道通道是否已转换,只有在整个列表转换完成后才会产生一次EOC只有标志位才能触发中断,此时前面的数据已经覆盖丢失; (2)AD转换非常快,转换通道只有几个μs,若不能在几μs转移数据的时间,数据就会丢失。
本节采用单次转换和非扫描模式。只需在每次触发转换前手动更改列表第一位置的通道。 程序修改如下: 所以我们在调用AD_GetValue转换时,只要指定转换通道,返回值就是我们指定通道的结果
总结
AD编写单通道和多通道程序