STM32F103学习:ADC模块详解与应用

1、定义

ADC(Analog-to-Digital Converter  模数转换器 )。是指将连续变化的模拟信号转换为离散的数字信号的器件。

2、原理

stm32上的ADC外设采用逐次比较的方式。

逐次比较型ADC工作原理可以类比天平称物体。比如我们假定要称一个21g的物体,我们有16g、8g、4g、2g、1g的砝码。一开始我们并不知道物体的重量x,于是用16g的砝码与之比较,发现16g<x,于是16g的砝码便保留下来。再将8g的砝码放上去,发现16g+8g=24g>x,于是便不保留8g的砝码。依此类推,便可以得出待测物体的质量。

逐次逼近法转换过程是:初始化时将逐次逼近寄存器各位清零;转换开始时,先将逐次逼近寄存器最高位置 1,送入 DIA 转换器,经 DIA 转换后生成的模拟星送入比较器,称为 Vo,与送入比较器的待转换的模拟量 V 进行比较,若 Vo<Vi,该位 1 被保留,否则被清除。然后再置逐次逼近寄存器次高位为 1,将寄存器中新的数字量送 DIA 转换器,输出的 Vo 再与 V 比较,若 Vo<Vi,该位 1 被保留,否则被清除。重复此过程,直至逼近寄存器最低位。转换结束后,将逐次逼近寄存器中的数字量送入缓冲寄存器,得到数字量的输出。
 

3、ADC参数 

(1)分辨率:ADC能够分辨量化的最小信号的能力。最大输入电压/(2^ADC位数-1)

(2)采样时间:采样我理解为将输入电压固定下来的时间,在stm32中可以自己设置,最小为1.5个周期。(采样时间是你通过寄存器告诉STM32采样模拟量的时间,设置越长越精确)

(3)总转换时间:

AD转换的步骤分别是:采样、保持、量化、编码。其中采样和保持可以看作一个过程,量化和编码可以看作一个过程。量化和编码实际上就是ADC逐次比较的过程,一般ADC的位数越多,所花费的时间就越长。采样和保持是为了保证在量化和编码的过程中输入电压的变化不会过大。在量化和编码之前,需要添加采样-保持电路,即需要设置一个采样开关,打开开关一段时间来收集电压(可以用一个小容量的电容来存储这个电压),存储完成之后断开开关,再进行之后的AD转换。这样就可以保证在量化和编码器件始终保持电压基本不变。这个采样时间是比较长的。所以AD转换所花费的时间可以分为:采样-保持电路的采样时间 + 量化和编码花费的时间。
 

  • STM32 ADC总转换时间 = 采样时间 + 12.5个ADC周期
  • 4、ADC功能框图

    将ADC的功能框图分为7个部分

    (1) 确定电压输入范围:ADC 输入范围为:VREF-≤ VIN ≤ VREF+。

    如果我们想让输入的电压范围变宽,去到可以测试负电压或者更高的正电压,我们可 以在外部加一个电压调理电路,把需要转换的电压抬升或者降压到 0~3.3V,这样 ADC 就 可以测量。

    (2)输入通道:

    外部的 16 个通道在转换的时候又分为规则通道和注入通道,其中规则通道最多有 16 路,注入通道最多有 4 路。

    (3)转换顺序

    ·设置规则序列,要设置通道的转换顺序以及转换通道的个数。

    ·注入通道是一种在规则通道转换的时候强行插入要转换的一种。如果在规则通道转换过程中,有注入通道插队,那么就 要先转换完注入通道,等注入通道转换完成后,再回到规则通道的转换流程。 (最多支持四通道)

    设值注入序列,要设置顺序以及个数。

    (4)触发源

    ·通道选好了,转换的顺序也设置好了,那接下来就该开始转换了。ADC 转换可以由 ADC 控制寄存器 2: ADC_CR2 的 ADON 这个位来控制,写 1 的时候开始转换,写 0 的时候停止转换。

    ·ADC 还支持触发转换,这个触发包括内部定时器触发和外部IO触发。

    触发源需要选择。触发源有很多,具体选择哪一种触发源,由 ADC 控制寄存器 2:ADC_CR2 的 EXTSEL[2:0]和 JEXTSEL[2:0]位 来控制 。EXTSEL[2:0]用于选择规则通道的触发源,JEXTSEL[2:0]用于选择注入通道的触发源。

    选定好触发源之后,触发源是否要激活,则由 ADC 控制寄存器 2:ADC_CR2 的 EXTTRIG 和 JEXTTRIG 这两位来激活。

    总结该部分主要包括触发源的选择与激活。

    (5)转换时间

    ADC 输入时钟 ADC_CLK 由 PCLK2 经过分频产生,最大是 14M。

    采样时间,需设置。

    ADC 的转换时间跟 ADC 的输入时钟和采样时间有关,公式为:Tconv = 采样时间 + 12.5 个周期。当 ADCLK = 14MHZ (最高),采样时间设置为 1.5 周期(最快),那么总 的转换时间(最短)Tconv = 1.5 周期 + 12.5 周期 = 14 周期 = 1us。

    一般我们设置 PCLK2=72M,经过 ADC 预分频器能分频到最大的时钟只能是 12M,采 样周期设置为 1.5 个周期,算出最短的转换时间为 1.17us,这个才是最常用的。

    (6)数据寄存器

    一切准备就绪后,ADC转换后的数据根据转换组的不同,规则组的数据放在 ADC_DR 寄存器,注入组的数据放在 JDRx。

    ADC 规则组数据寄存器 ADC_DR 只有一个,是一个 32 位的寄存器,低 16 位在单 ADC 时使用,高 16 位是在 ADC1 中双模式下保存 ADC2 转换的规则数据,双模式就是 ADC1 和 ADC2 同时使用。在单模式下,ADC1/2/3 都不使用高 16 位。因为 ADC 的精度是 12 位, 无论 ADC_DR 的高 16 或者低 16 位都放不满,只能左对齐或者右对齐。(需设置数据对齐方式)

    规则通道可以有 16 个这么多,可规则数据寄存器只有一个,如果使用多通道转换,那 转换的数据就全部都挤在了 DR 里面,前一个时间点转换的通道数据,就会被下一个时间 点的另外一个通道转换的数据覆盖掉,所以当通道转换完成后就应该把数据取走,或者开 启 DMA 模式,把数据传输到内存里面,不然就会造成数据的覆盖。最常用的做法就是开启 DMA 传输。

    ADC 注入组最多有 4 个通道,刚好注入数据寄存器也有 4 个,每个通道对应着自己的 寄存器,不会跟规则寄存器那样产生数据覆盖的问题。ADC_JDRx 是 32 位的,低 16 位有 效,高 16 位保留,数据同样分为左对齐和右对齐。

    (7)中断

    数据转换结束后,可以产生中断,中断分为三种:规则通道转换结束中断,注入转换 通道转换结束中断,模拟看门狗中断。其中转换结束中断很好理解,跟我们平时接触的中断一样,有相应的中断标志位和中断使能位,我们还可以根据中断类型写相应配套的中断服务程序。

    规则和注入通道转换结束后,除了产生中断外,还可以产生 DMA 请求,把转换好的 数据直接存储在内存里面。要注意的是只有 ADC1 和 ADC3 可以产生 DMA 请求。

    电压转换:2^12 / 3.3 = X / Y,=> Y = (3.3 * X ) / 2^12。

    物联沃分享整理
    物联沃-IOTWORD物联网 » STM32F103学习:ADC模块详解与应用

    发表评论