【STM32】ADC(模拟/数字转换)

一、ADC的简介

【STM32】ADC(模拟/数字转换)_第1张图片

1.什么是ADC

1)将【电信号】-->【电压】-->【数字量】

2)ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字量,建立模拟电路到数字电路的桥梁。

3)12位逐次逼近型ADC,1us转换时间(表示从产生电压到转换得出结果所使用的时间)

【STM32】ADC(模拟/数字转换)_第2张图片

2.常见的ADC

【STM32】ADC(模拟/数字转换)_第3张图片

3.并联比较型工作示意图

1)比较器:当两个数值相同时才会生成信号传输给编码器

2)D0,D1,D2(从低位--》高位)---》二进制数(分辨率)---》2^3

【STM32】ADC(模拟/数字转换)_第4张图片

4.逐次逼近型工作示意图

如果是n位的锁存缓冲器(数码控制器),就需要进行n次的判断

【STM32】ADC(模拟/数字转换)_第5张图片

5.ADC特性参数

1.分辨率:刻度划分

表示ADC能分辨的最小模拟量,用二进制位数进行表示,比如;8,10,12

比如此时电压为3.3V,我们使用12位进行表示   2^12=4096   3.3%4096=0.0008V,表示当数字量为1的时候,输出电压为0.0008V。

输入电压范围:0-3.3V,转换结果范围:0-4095(2^12)

【STM32】ADC(模拟/数字转换)_第6张图片

2.转换时间

表示完成一次A/D转换所需要的时间,转换时间越短,采用频率就越高

假设1s的时间中转换时间为200ms,则表示可以转换5次

【STM32】ADC(模拟/数字转换)_第7张图片

【STM32】ADC(模拟/数字转换)_第8张图片

3.精度:物理量的精确程度

【STM32】ADC(模拟/数字转换)_第9张图片

4.量化误差

6.STM32各系列ADC主要特性

【STM32】ADC(模拟/数字转换)_第10张图片

7.ADC基本结构

【STM32】ADC(模拟/数字转换)_第11张图片

二、ADC工作原理

1.ADC框图简介

1.参考电压/模拟部分电压

1) 输入电压的范围在参考电压的两个范围之间

2)Vref+和Vref-分别接着Vdda(3.3V)和Vssa(0V)

【STM32】ADC(模拟/数字转换)_第12张图片

【STM32】ADC(模拟/数字转换)_第13张图片

【STM32】ADC(模拟/数字转换)_第14张图片

2.输入通道

输入的GPIO必须具有模拟输入功能的IO口才可以。

GPIO通道:快速通道VS慢速通道

内部ADC源直接绑定,外部ADC绑定GPIO

18个输入通道,可测量16个外部和2个内部信号源(温度传感器 && 内部的参考电压)

【STM32】ADC(模拟/数字转换)_第15张图片

 ADC1和ADC2两个的通道都使用同一个引脚。---->双ADC

【STM32】ADC(模拟/数字转换)_第16张图片

【STM32】ADC(模拟/数字转换)_第17张图片

3.转换序列(转换顺序)

1)转换被组织分为2组:规则组&&注入组【注入组可以打断规则组的转换】

2)规则组最多可以有16个转换(通道),注入组最多有4个转换(通道)

【STM32】ADC(模拟/数字转换)_第18张图片

【STM32】ADC(模拟/数字转换)_第19张图片

 规则组和注入组执行优先级对比

注入组(类似于中断)的优先级比规则组的优先级高

【STM32】ADC(模拟/数字转换)_第20张图片

规则序列:(regular channel)

1)规则组有16个通道

2)这里的意思理解为,有16个规则通道,即为16个规则的不同编号的盘子,每个盘子可以放18个通道即为GPIO其中的一个口

3)必须按顺序来执行(如果想要执行通道3,则通道1和通道2都要执行)

4)我们有3个ADC,表示可以设置3个最高的优先级【可以同步进行】

5)一个菜单,可以点16个菜,也可以只写一个菜。【同时上16个菜,但是只能一个一个上(因为只有一个寄存器),否则前面会被覆盖--->所以我们使用DMA】

【STM32】ADC(模拟/数字转换)_第21张图片

注入序列:(injected channel)

1)注入组有4个通道

2)注入组的寄存器写入位是反向写入的

3)一次性最多可以点4个菜,且可以同时上4个菜,不会被覆盖【因为有4个寄存器】

4.触发源

1)触发转换分为:a.ADON位触发转换  b.外部事件触发转换(规则组和注入组)

【STM32】ADC(模拟/数字转换)_第22张图片

【STM32】ADC(模拟/数字转换)_第23张图片

规则组外部触发

【STM32】ADC(模拟/数字转换)_第24张图片

【STM32】ADC(模拟/数字转换)_第25张图片

注入组外部触发

【STM32】ADC(模拟/数字转换)_第26张图片

【STM32】ADC(模拟/数字转换)_第27张图片

5.转换时间

【STM32】ADC(模拟/数字转换)_第28张图片

【STM32】ADC(模拟/数字转换)_第29张图片

如何设置ADC时钟?

1)ADCCLK的最大时钟频率是:14MHZ

【STM32】ADC(模拟/数字转换)_第30张图片

【STM32】ADC(模拟/数字转换)_第31张图片

如何设置ADC转换时间

1)ADC中的最短转换时间为:1us【在ADC时钟频率为:14MHZ,采样时间为1.5个ADC时钟周期,12.5个周期(固定值-->12位寄存器)的情况下】

2)采样时间(可以进行编程的)越大,就可以尽量避免毛刺信号的干扰,精确度越高

【STM32】ADC(模拟/数字转换)_第32张图片

6.数据寄存器

【STM32】ADC(模拟/数字转换)_第33张图片

【STM32】ADC(模拟/数字转换)_第34张图片

数据对齐

【STM32】ADC(模拟/数字转换)_第35张图片

7.中断

【STM32】ADC(模拟/数字转换)_第36张图片

【STM32】ADC(模拟/数字转换)_第37张图片

DMA请求(只适用于规则组)

规则组每一个通道转换结束后,除了可以产生中断外,还可以产生DMA请求,我们利用DMA及时把转换好的数据传输到指定的内存中,防止数据被覆盖

2.单次转换模式VS连续转换模式

单次转换模式:如果我们不需要实时检测,则使用单次

连续转换模式:如果需要实时检测,则使用连续

【STM32】ADC(模拟/数字转换)_第38张图片

3.转换/扫描模式

关闭扫描模式:只能扫描第一个通道

使用扫描模式:表示扫描全部通道

连续是一个通道多次采集,扫描是每个通道依次采集

【STM32】ADC(模拟/数字转换)_第39张图片

不同模式组合的作用

扫描:切换通道(遍历),连续:多次

单词转换,非扫描模式 

【STM32】ADC(模拟/数字转换)_第40张图片

【STM32】ADC(模拟/数字转换)_第41张图片

 单词转换,扫描模式

【STM32】ADC(模拟/数字转换)_第42张图片

【STM32】ADC(模拟/数字转换)_第43张图片

连续转换,非扫描模式 

【STM32】ADC(模拟/数字转换)_第44张图片

【STM32】ADC(模拟/数字转换)_第45张图片

连续转换模式 

【STM32】ADC(模拟/数字转换)_第46张图片

【STM32】ADC(模拟/数字转换)_第47张图片

【STM32】ADC(模拟/数字转换)_第48张图片

4.ADC校准

如果需要使用到精确计算,则需要校准

影响ADC转换的因素:

1)温飘(温度影响)

2)基准电压值

【STM32】ADC(模拟/数字转换)_第49张图片

5.ADC与低功耗

外部引脚输入也会耗电--->采样时间

采样间隔周期

要采样则唤醒,不需要就进入睡眠。

 三、单通道ADC采集实验

1.实验简要

【STM32】ADC(模拟/数字转换)_第50张图片

2.寄存器描述

1.ADC控制寄存器 1(ADC_CR1)

【STM32】ADC(模拟/数字转换)_第51张图片

【STM32】ADC(模拟/数字转换)_第52张图片

2.ADC控制寄存器 2(ADC_CR2)

【STM32】ADC(模拟/数字转换)_第53张图片

【STM32】ADC(模拟/数字转换)_第54张图片

3.ADC采样时间寄存器 1(ADC_SMPR1)

通道10-通道17的设置

【STM32】ADC(模拟/数字转换)_第55张图片

4.ADC采样时间寄存器 2(ADC_SMPR2)

通道0-通道9的设置

【STM32】ADC(模拟/数字转换)_第56张图片

5.ADC规则序列寄存器 1(ADC_SQR1)

设置第13-第16个转换

【STM32】ADC(模拟/数字转换)_第57张图片

6.ADC规则序列寄存器 2(ADC_SQR2)

设置通道12-通道7

【STM32】ADC(模拟/数字转换)_第58张图片

7.ADC规则序列寄存器 3(ADC_SQR3)

设置通道6-通道0

【STM32】ADC(模拟/数字转换)_第59张图片

8.ADC规则数据寄存器(ADC_DR)

【STM32】ADC(模拟/数字转换)_第60张图片

9.ADC状态寄存器(ADC_SR)

【STM32】ADC(模拟/数字转换)_第61张图片

3.单通道ADC采集实验配置步骤

【STM32】ADC(模拟/数字转换)_第62张图片

相关HAL库介绍

【STM32】ADC(模拟/数字转换)_第63张图片

关键结构体介绍

ADC句柄

【STM32】ADC(模拟/数字转换)_第64张图片

ADC通道设置

【STM32】ADC(模拟/数字转换)_第65张图片

四、使用CubeMX创建ADC和DMA

将外部0-3.3V的模拟信号接入到单片机底座脚P11(PA1)口

1.CubeMX使用

因为ADC1和ADC2所使用的通道对应的GPIO引脚是一致的,所以使用ADC1或者ADC2都可以。

【STM32】ADC(模拟/数字转换)_第66张图片

0.其他相关设置

1)选择外部晶振

2)启动DMA

【STM32】ADC(模拟/数字转换)_第67张图片

【STM32】ADC(模拟/数字转换)_第68张图片

【STM32】ADC(模拟/数字转换)_第69张图片

1.通道选择

【STM32】ADC(模拟/数字转换)_第70张图片

2.中断选择

此时我们的实验是将从ADC获取到的模拟信号通过转换为电压传输给DAM,然后DMA在通知CPU。

1)ADC不需要中断:因为当ADC采样到的结果直接丢给DMA,而不需要停下来告诉DMA,因为他们两个之间有专门的传输通道

2)DMA需要中断:因为当接收到ADC传输过来的数据后,DMA需要告诉CPU,我接收到ADC的数据了。

【STM32】ADC(模拟/数字转换)_第71张图片

3.ADC中的DMA Setting

【STM32】ADC(模拟/数字转换)_第72张图片

【STM32】ADC(模拟/数字转换)_第73张图片

【STM32】ADC(模拟/数字转换)_第74张图片

4.ADC中的Parameter Settings

【STM32】ADC(模拟/数字转换)_第75张图片

【STM32】ADC(模拟/数字转换)_第76张图片

5.总结

本实验使用了APB2(ADC1的时钟频率为14MhZ)

使用了ADC1的通道1,测试外部0-3.3V的模拟信号

2.代码编写

五、STM32随机数生成器

1.什么是随机数

1.真正的随机数

2.伪随机数

2.随机数的生成

1.用纯软件算法

伪随机数生成算法 - shine-lee - 博客园 (cnblogs.com)

2.采集随机事件为元素生成

3.用Soc内置伪随机数发生模块生成:使用硬件方法【HAL_RNG】

【STM32】ADC(模拟/数字转换)_第77张图片

【STM32】ADC(模拟/数字转换)_第78张图片

你可能感兴趣的:(STM32,stm32,嵌入式硬件,单片机)