什么是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 的具体应用将在其他文章中详细叙述。