在嵌入式系统中,被测控的对象(如温度、压力、流量、速度、电压等)都是连续变化的物理量。这种连续变化的物理量通常被称为模拟量。当计算机参与测控时,计算机处理的信号是数字量,数字量指的是时间和数字上都离散的量能将模拟量转换为数字量的器件称为模拟/数字转换器(ADC)。 计算机处理的结果也是数字量,不能直接控制执行部件,需要转换为模拟量。能将数字量转换为模拟量的器件称为数字/模拟转换器(DAC)。

STM32 12位ADC是一种逐次逼近型模拟数字转换器。它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。(来自STM32数据手册)
可以从一下几个方面来理解STM32的ADC:技术指标、转换原理、工作过程、工作模式。

技术指标

1.分辨率: 指AD转换器对输入信号最小变化的灵敏度,表示数字输出最低位对应的模拟信号。计算公式:信号量程/((2^n)-1)。STM32微控制器为12位分辨率。
2.转换时间: 从启动转换信号到转换信号结束的有效时间间隔。STM32 ADC的总转换时间为:TCONV= 采样时间 + 12.5个ADC周期。
例如:当ADCCLK=14MHz(一个周期时间为1/(14* 106) s),采样时间为1.5个ADC周期,则TCONV= 1.5 个周期 + 12.5 个周期= 14 个ADC周期 = 1* 10-6s=1μs.
3.输入电压范围:0~ 3.3V,转换结果范围:0~ 4095

转换原理

常见的AD转换原理分为逐次逼近型和双积分型。两者区别为:
逐次逼近型:一般由一个比较器、D/A转换器、缓冲寄存器及控制逻辑电路组成,转换时间基本固定,转换精度一般、转换速度快、功耗低、抗干扰能力较差。
双积分型:结构简单、抗干扰能力强、精度高、外接器件少、使用方便、性价比高,但转换时间长(几十到几百毫秒);适用于信号变化缓慢,采样速率要求低、精度要求高或现场干扰严重的场景。

STM32的ADC是12位逐渐逼近型的ADC,所以重点介绍逐次逼近型的转换原理。以ADC0809为例介绍逐次逼近型ADC转换原理。ADC0809是一款8位的逐次逼近型ADC芯片,结构图如下。

如上图所示,其主要可分为三个部分:输入、比较、输出。
输入部分为8通道输入,具体是哪一个通道输入由通道选择地址信号(即ADDA/ADDB/ADDC)决定,
通道选择地址信号输入到通道选择开关,通道选择开关输入对应的通道信号到比较部分。ALE为地址锁存允许信号,高电平有效,也就是说ALE=1时,允许输入。
输出部分为并行输出端口,OE为输出允许信号,高电平有效,即OE=1时,芯片输出锁存器内的内容。锁存器的作用是将AD转换的结果锁存,当允许输出时再输出,起到存储转换结果的作用。
最重要的部分为比较部分,它由比较器,逐次逼近寄存器和DAC组成。DAC的作用是提供参考电平。比较过程是先将逐次比较寄存器清空,然后最高位置1,寄存器内数据与输入数据比较,若Uo<Ui则保存该位,若大于则舍去,之后再次高位置1,继续进行比较。

以4位AD转换为例,其过程如下:

若输入为3.3V。第一次比较时,最高位置1,此时Uo=8V>3.3V舍去,最高位为0,第二次比较时,次高位置1,此时Uo=4V>3.3V舍去,次高位为0,第三次比较时,次低位置1,此时Uo=2V<3.3V保留该位,第四次比较时,最低位置1,此时Uo=3V<3.3V保留该位,最低位为1,所以最后输出为0011。这是4位的AD转换过程,但8位和12位的AD转换过程均与其相似。

除这三个部分外,ADC0809还有一些其他的控制位,CLOCK是时钟信号输入,有了时钟信号的驱动芯片才能工作;START是AD转换允许信号,该位允许后AD转换才会进行,也可以认为是转换触发信号;EOC是转换结束信号,AD转换结束后,该位置1,表示转换结束。VREF(+)和VREF(-)是参考电压,一般与VCC和GND相连。
STM32是12位的ADC,ADC0809虽然是8位的AD转换芯片,但其转换过程和12位的相似,可以借用其来理解12位的AD转换过程。

工作过程


STM32微控制器ADC结构框图如图所示,它主要分为几个部分:输入部分、触发部分、转换部分、输出部分。

ADC通道选择

STM32的ADC有16个多路复用通道,可以将转换分成两组:规则通道组和注入通道组。一个通道组由一系列转换通道组成。
规则通道组由最多16个转换通道组成,注入通道组由最多4个转换通道组成。(其中ADC1还包含两个内部通道输入共18个通道输入)存放ADC转换出来的数据分为规则通道数据寄存器(1个)和注入通道数据寄存器(4个)。也就是说注入组可可以同时存储4个转换的数据,而规则组只能存储一个转换的数据,所以在用规则组进行多个通道数据转换时可以用DMA将转换后的数据移动到其他地方存储起来,以免数据被覆盖。另外,注入通道的转换可以打断规则通道的转换,在注入通道被转换完成之后,规则通道才得以继续转换,与中断类似。

ADC触发选择

ADC部件需要收到触发信号才开始转换。对ADC1和ADC2来说,触发信号可以来自外部(规则通道组是EXTI_11,注入通道组是EXTI_15),也可以是来自内部定时器(TIM1~ TIM4的有关事件),还可以使用软件触发。使用外部触发信号时,只有上升沿可以启动转换。对于ADC3来说,触发信号来自内部定时器(TIM1~TIM4、TIM5和TIM8的有关事件),也可以时软件触发。

ADC转换时间

ADC时钟来自高速外设APB2时钟(最高72MHz),经ADC预分频器,对PCLK2进行2、4、6和8分频产生,但最大不超过14MHz。

AD转换需要采样模拟信号,并保持一段时间,然后将其量化,用数字编码表示信号值大小。ADC部件接收到触发信号后,在ADCCLK时钟的驱动下对输入通道的信号采样,并进行模/数转换。ADC在开始转换前,需要一段稳定时间。转换启动后,需要经过最少14个时钟周期才能结束。此时,16位数据寄存器保存转换结果。
ADC转换时间公式如下:TCONV= 采样时间 + 12.5个ADC周期

数据对齐

因为STM32的ADC为12位ADC,转换后的结果为12位的数据,而数据寄存器为16位,所以转换后的数据在数据寄存器中右两种对其方式,左对齐和右对齐。以规则组为例

若数据是右对齐则数据寄存器的高4位全部补0.

若数据是左对齐则数据寄存器的第4位全部补0.

模拟看门狗

STM32的ADC还可以配置模拟看门狗,它的作用就是监督ADC的转换结果,若ADC转换结果出些电压超出阈值或者电压低于阈值,它会发出警报。

ADC中断

规则通道和注入通道转换完成均可以触发ADC的转换结束事件,与ADC0809类似,在转换完成后STM32芯片会发出一个转换结束信号,规则组的转换结束信号为EOC,注入组的信号为JEOC,这两个信号都可以发出ADC中断请求,如果配置了模拟看门狗,并且采集到的电压超出阈值,会触发看门狗中断。

注意:ADC1和ADC2中断映射为同一个中断向量,ADC3映射为另一个中断向量。

工作模式

常用的ADC转换模式可总结为以下4种

单次转换,非扫描模式


转换过程如上图,单次转换指的是,在一次转换结束后ADC发出EOC信号,转换结束,若要进入下一次转换需要有新的触发信号,转换不能连续的进行。非扫描指的是在一次转换中只有一个通道的信号被转换。

连续转换,非扫描模式


转化过程如上图,连续转换指的是在一次转换结束后,ADC发出EOC信号但不停止转换,而是进入下一个转换过程中,连续转换只需要一次触发就可以一直进行转换。非扫描指的是在一次转换中只有一个通道的信号被转换。

单次转换,扫描模式


转换过程如上图,扫描模式指的是在一次转换中可以对多个通道的信号进行转换,转换的顺序按通道输入的顺序进行。单次转换是指一次在对多个通道进行转换后ADC发出EOC信号,结束本次转换。若要进行下一次转换需要有新的触发信号。

连续转换,扫描模式


工作过程如上图,连续转换、扫描模式就是一次转换中对多个通道进行完成转换后才发出EOC信号,但不结束转换,而是进入下一次对多个通道信号的转换。

工作模式小结

由上述几种工作模式可以看出,常用的4中工作模式是由单次转换、多次转换、扫描模式和非扫描模式这4个子模式构成的。
单次转换和多次转换的区别就是在完成一次转换后是否停止转换,若停止转换就是单次转换,若不停止转换而进入下一次转换就是多次转换。单次转换每一次的转换都需要一个新的触发信号,多次转换只需要一次触发信号。
扫描模式和非扫描模式的区别是在一次转换中可以对几个通道进行转换,若是只能对一个通道进行转换就是非扫描模式,若是一次可以对多个通道进行转换就是扫描模式。

总结

AD转换是STM32应用中常用的一部分,通过对8位的AD转换芯片工作过程的熟悉后,类比到STM32 的12位ADC,这样一来STM32的ADC将会看起来简单许多。主要的是理解逐次逼近型ADC在转换过程中逐次逼近的转换过程。

STM32 ADC工作框图可总结为上图所示,经通道选择器输入后到达AD转换器进行数据转换,转换后的结果输入到数据寄存器中。转换结束标志EOC可触发ADC中断,若配置模拟看门狗,当采集到的电压超出阈值,会触发看门狗中断。触发转换有多个来源。ADC时钟挂载在APB2总线上,经预分频后最大可以达到14MHz。

物联沃分享整理
物联沃-IOTWORD物联网 » STM32 的ADC解析

发表评论