2022年8月12日STM32——ADC采集

此内容是为自己方便回忆,如有错误,欢迎指导,内容来源于野火指南者开发板教程。

 

一.ADC采集

STM32f103有3个ADC,精度12位,ADC1和ADC2都有16个外部通道,ADC3根据CPU引脚的不同通道数也不同,一般有8个外部通道。

1.电压输入范围:VREF- <=VIN <= VREF+,由VREF-、VREF+、VDDA、VSSA四个外部引脚决定。VSSA和VREF- 接地,VREF+和VDDA接3V3,得到ADC的输入电压范围0 ~ 3.3V。

2.输入通道:

外部的16个通道在转换的时候又分为规则通道和注入通道,其中规则通道最多有16路,注入通道最多有4路。规则通道:平时一般用到的通道。注入通道:在规则通道转换的时候强行插入要转换的一种通道,类似中断的概念,重点是注入通道只有在规则通道存在时才会出现。

3.转换顺序:

规则序列:向相应寄存器和寄存器位写入即可控制第几次转换。

注入序列:

注意的是:当寄存器位JL=00时,转换顺序是从JSQ4开始,当寄存器位JL=4时,从JSQ1开始,当JL的值小于4时,转换顺序是JSQRx,x=4-JL。

4.触发源:

ADC转换可以由ADC控制寄存器2:ADC_CR2的ADON位控制,写1开始转换,写0停止转换。ADC还支持触发转换,包括内部定时器触发和外部IO触发。由ADC控制寄存器2:ADC_CR2的EXTSEL和JEXTSEL来控制,EXTSEL选择规则通道的触发源,JEXTSEL选择注入通道的触发源,然后用ADC控制寄存器2:ADC_CR2的EXTTRIG和JEXTTRIG来激活。

5.转换时间:

ADC输入时钟有ADC_CLK由PCLK2(一般72M)分配产生,最大14M。

ADC用若干个ADC_CLK周期对输入电压进行采样,采样的周期数可由ADC采样时间寄存器ADC_SMPR1和ADC_SMPR2中的SMP位设置,ADC_SMPR2控制通道0~9,ADC_SMPR1控制通道10~17,最小采样周期是1.5个,周期为1/ADC_CLK.。

ADC转换时间:Tconv = 采样时间 + 12.5个周期。当ADC_CLK设置最大14M,采样时间设置最快的1.5个周期,转换时间最短=1.5个周期 + 12.5个周期 = 14个周期 = 1us。但一般PCLK2 = 72M,ADC_CLK最大为12M,所以最短转换时间为1.17us。

6.数据寄存器

规则数据寄存器ADC_DR:32位寄存器,低16位在单ADC时使用,高16位在ADC1中双模式下保存ADC2转换的规则数据。双模式就是ADC1和ADC2同时使用。单模式下,ADC1/2/3都不用高16位,因为ADC精度是12位,要设置左对齐还是右对齐,由ADC_CR2的11位ALIGN设置。

注入数据寄存器ADC_JDRx:4个32位寄存器,低16位有效,高16位保留,同样要设置左对齐还是右对齐。

 7.中断:

转换结束中断:3种情况,规则通道转换结束中断,注入转换通道转换结束中断,模拟看门狗中断。

模拟看门狗中断:当被ADC转换的模拟电压低于低阈值或者高于高阈值时,就会产生中断,低阈值由ADC_LTR设置,高阈值由ADC_HTR设置。

DMA请求:只有ADC1和ADC3可以产生DMA请求。

 8.电压转换:

ADC是12位,输入电压在0 ~ 3.3V时,12位满量程(2^12)对应3.3V,数值0对应0V。若X是转换后的数值,Y对应是模拟电压,则有 2^12 / 3.3 = X / Y  =>   Y =(3.3 * X) / 2^12。

ADC初始化结构体

ADC_Mode:独立模式和双模式。

ADC_ScanConvMode:单通道AD转换DISABLE,多通道AD转换ENABLE。 

ADC_ContinuousConvMode:自动连续转换ENABLE,单词转换DISABLE,单词转换后需要重新启动转换,一般设置连续转换。

ADC_ExternalTrigConv:外部触发选择

ADC_DataAlign:对齐模式,左对齐或右对齐

ADC_NbrOfChannel:AD转换通道数目

独立模式单通道采集

硬件部分:

编程思路:

1)
初始
ADC
用到的
GPIO

2)
设置
ADC
的工作参数并初始化;

3)
设置
ADC
工作时钟;

4)
设置
ADC
转换通道顺序及采样时间;

5)
配置使能
ADC
转换完成中断,在中断内读取转换完数据;

6)
使能
ADC

7)
使能软件触发
ADC
转换。

管口的定义:

GPIO的设置:

 

ADC的设置:

中断设置:

中断函数接收数据(stm32f10x_it.c):

mian函数中通过串口和printf函数打印在串口调试窗口查看ADC转换后的值。

独立模式多通道采集

 硬件部分:

 

编程思路:

1)
初始化
ADC GPIO

2)
初始化
ADC
工作参数;

3)
配置
DMA
工作参数;

4)
读取
ADC
采集的数据;

管口定义:

ADC1对应DMA1,ADC3对应DMA2通道5可以查看stm32f103数据手册:

 

ADC的GPIO定义:

ADC模式和DMA设置:

其中存储器地址是:

main函数:在串口助手中打印转换后的值。

 

双重ADC同步规则模式采集

 AD转换包括采样阶段和转换阶段,采样阶段才对通道数据进行采集,转换阶段将采集到得数据进行转换为数字量输出,此刻通道数据变化不会改变转换结果。

独立模式的ADC采集需要在一个通道采集并且转换完成后才会进行下一个通道的采集。而双重ADC的机制就是使用两个ADC同时采样一个或者多个通道,提高了采样率。

启动双ADC模式的时候,通过配置ADC_CR1寄存器的DUALMOD位:

实验用同步规则模式,必须开启DMA功能。实验选取ADC1和ADC2各采集一个通道:

编程思路:

1)
初始化
ADC GPIO

2)
初始化
DMA
配置;

3)
初始化
ADC
参数;

4)
读取
ADC
采集的数据,并打印出来校正;

 管口设置:

ADC的GPIO配置:

ADC的模式配置:

 

其中存储器地址:

 ADC工作设置为同步规则模式:两个ADC的通道的采样时间需要一致,ADC1设置为软件触发,ADC2设置为外部触发。

 main函数:将ADC采集的数据转换后通过串口助手打印出来

 

物联沃分享整理
物联沃-IOTWORD物联网 » 2022年8月12日STM32——ADC采集

发表评论