ADC 简介(STM32F407)

什么是ADC

ADC即模拟数字转换器,全称 Analog-to-digital converter,可以将外部的模拟信号转换为数字信号。

ADC功能框图

①参考电压/输入电压

ADC的输入电压范围是 VREF-- ≤ VIN ≤ VREF+,最终还是由 VREF--、VREF+、VDDA、VSSA 决定。

VDDA 和VREF+ 接 VCC3.3,而 VSSA 和 VREF- 接地,所以 ADC 的输入电压范围是 0~3.3V。

②输入通道

ADC1有16个外部通道和3个内部通道,ADC1的外部通道是通道17、通道18和通道19,分别连接到内部温度传感器、内部Vrefint和Vbat。

ADC2和ADC3只有16个外部通道。

ADC的外部通道如下表所示,

③转换顺序

当任意 ADCx 多个通道以任意顺序进行一系列转换就诞生了成组转换,这里就有两种成组转换类型:规则组和注入组。

规则组就是框图中的规则通道,注入组就是框图中的注入通道。后文中规则通道以规则组来代称,注入通道以注入组来代称。

规则组允许最多16个输入通道进行转换,而注入组允许最多4个输入通道进行转换。这里讲解一下规则组和注入组。

规则组(规则通道)

规则组,顾名思义,就是按照一定的顺序,相当于正常运行的程序,平常用到最多也是规则组。

注入组(注入通道)

注入组,顾名思义,"注入" 就是打破原来的状态,相当于中断。当程序执行的时候,中断是可以打断程序的执行。同这个类似,注入组转换可以打断规则组的转换。假如在规则组转换过程中,注入组启动,那么注入组被转换完成之后,规则组才得以继续转换。 便于理解,下图为规则组和注入组的对比图,

在了解了规则组和注入组后,现在了解一下它们两者的转换顺序。

规则序列

规则组是允许16个通道进行转换的,那么就需要安排通道转换的次序即规则序列。规则序列寄存器有3个,分别为SQR1、SQR2和SQR3。SQR3控制规则序列中的第1个到第6个转换的通道;SQR2控制规则序列中第7个到第12个转换的通道;SQR1控制规则序列中第13个到第16个转换的通道。规则序列寄存器SQRx下图所示,

注入序列

注入序列,跟规则序列差不多,都是有顺序的安排。由于注入组最大允许4个通道输入,所以这里就使用了一个寄存器JSQR。注入序列寄存器JSQR详表下所示,

④触发源

在配置好输入通道以及转换顺序后,就可以进行触发转换了。ADC的触发转换有两种方法:分别是通过软件或外部事件(也就是硬件)触发转换。

软件触发转换的方法是通过写 ADC_CR2 寄存器的 ADON 这个位来控制,写1就开始转换,写0就停止转换,这个控制ADC转换的方式非常简单。

另一种就是通过外部事件触发转换的方法,有定时器和输入引脚触发等等。这里区分规则组和注入组。方法是:通过 ADC_CR2 寄存器的 EXTSET[2:0] 选择规则组的触发源,JEXTSET[2:0] 选择注入组的触发源。通过 ADC_CR2 的 EXTTRIG 和 JEXTTRIG 这两位去激活触发源。ADC3 的触发源与 ADC1、2 的不同,这里需要注意,在框图里已经标记出来了。

⑤转换时间

STM32F407的ADC总转换时间的计算公式如下:

= 采样时间 + 12个周期

采样时间可通过 ADC_SMPR1 和 ADC_SMPR2 寄存器中的 SMP[2:0] 位编程,ADC_SMPR2 控制的是通道 0~9,ADC_SMPR1 控制的是通道 10~18。所有通道都可以通过编程来控制使用不同的采样时间,可选采样时间值如下:

公式中的 12个周期 是由 ADC 输入时钟 ADC_CLK 决定的。ADC_CLK 是由 APB2 经过分频产生,分频系数由 RCC_CFGR 寄存器中的 PPRE2[2:0] 进行设置,有 2/4/6/8/16 分频选项。 采样时间最小是3个时钟周期,这个采样时间下,我们可以得到最快的采样速度。

例如,我们采用最高的采样速率,使用采样时间为3个ADC时钟周期,那么得到:

= 3个ADC时钟周期 + 12个周期 = 15个ADC时钟周期

一般 APB2 的时钟是 84MHz,经过 ADC 分频器的4分频后,ADC 时钟频率就为21MHz。通过换算可得到:

= 15个ADC时钟周期 = (121000000)∗15 s = 0.71us

⑥数据寄存器

ADC转换完成后的数据输出寄存器。根据转换组的不同,规则组的完成转换的数据输出到ADC_DR寄存器,注入组的完成转换的数据输出到ADC_JDRx寄存器。假如是使用双重模式, 规则组的数据也是存放在ADC_DR寄存器。

⑦中断

规则和注入组转换结束时能产生中断,当模拟看门狗状态位被设置时也能产生中断。它们在ADC_SR中都有独立的中断使能位。

模拟看门狗中断

模拟看门狗中断发生条件:首先通过ADC_LTR和ADC_HTR寄存器设置低阈值和高阈值,然后开启了模拟看门狗中断后,当被ADC转换的模拟电压低于低阈值或者高于高阈值时,就会产生中断。例如我们设置高阈值是3.0V,那么模拟电压超过3.0V的时候,就会产生模拟看门狗中断,低阈值的情况类似。

DMA请求

规则组和注入组的转换结束后,除了产生中断外,还可以产生DMA请求,把转换好的数据存储在内存里面,防止读取不及时数据被覆盖。

总结

本文主要介绍了 ADC 的基本概念和其功能结构。有关 ADC 的具体应用将在其他文章中详细叙述。

相关推荐
CV金科1 小时前
蓝桥杯-STM32G431RBT6(解决LCD与LED引脚冲突的问题)
c语言·stm32·单片机·嵌入式硬件·蓝桥杯
每天的积累1 小时前
STM32与ESP8266的使用
stm32·单片机·嵌入式硬件
小手智联老徐3 小时前
MATLAB 从 R2024B 开始支持树莓派 5
嵌入式硬件·matlab·树莓派
千千道13 小时前
STM32的寄存器深度解析
stm32·单片机·物联网
Whappy00116 小时前
51单片机-DS18B20(温度传感器)&AT24C02(存储芯片) & IIC通信-实验2-温度实时监测(可设置阈值)
单片机·嵌入式硬件·51单片机
Whappy00116 小时前
51单片机-AT24C02(IIC总线介绍及其时序编写步骤)-第一节(下一节实战)
单片机·嵌入式硬件·51单片机
JT灬新一16 小时前
ARM驱动学习之5 LEDS驱动
arm开发·单片机·学习
Chambor_mak18 小时前
stm32单片机个人学习笔记3(GPIO输出)
stm32·单片机·学习
机器未来20 小时前
基于FPGA的SD卡的数据读写实现(SD NAND FLASH)
arm开发·嵌入式硬件·fpga开发