STM32 MCU ADC详解(2)--深入探索ADC工作原理

本文详细解析了STM32F103的ADC原理,介绍了逐次逼近型、积分型和并联比较型ADC的工作机制,并讨论了不同工作模式如单次转换、连续转换和扫描模式的应用。同时涉及模拟看门狗中断和DMA请求等高级功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

在上一章ADC详解(1)中,我们初步介绍了ADC(模拟数字转换器)的原理及其关键参数,这个章节中我们将以STM32F103为例深入探索一下ADC的原理。

一、ADC分类

ADC可根据其工作原理和特性分为以下几种类型:逐次逼近型(SAR ADC)、积分型、并联比较型(有的文献也称闪烁型ADC)、双斜坡型ADC、Sigma-Delta ADC和管道型ADC。在本文中我们主要对前三种在市场上运用比较多的ADC进行介绍。

1.1 逐次逼近型ADC

逐次逼近型ADC使用逐次逼近寄存器算法来转换模拟信号。通过比较模拟信号与DAC(数字模拟转换器)的输出逐步逼近正确的值。如下图所示,它主要由控制逻辑电路、时序产生器、移位寄存器、D/A转换器及电压比较器组成。逐次逼近型ADC因其结构简单的,成本低,被广泛采用。

其工作过程如下:转换开始时,首先由一个启动脉冲激活电路。在第一个时钟脉冲到来时,控制电路配置使得时序产生器最高有效位(MSB)设置为1,而其他所有位设置为0。这个二进制表示的数字值被送入数据寄存器,并由数字模拟转换器(D/A转换器)转换为对应的模拟电压值,及VREF的一半。

接下来输入电压(v1)与D/A转换器的输出电压(即VREF/2)进行比较。如果v1大于或等于VREF/2,比较器的输出将被设定为1,反之则设为0。比较结果存储在数据寄存器的Dn-1位。

在第二个时钟脉冲(CP)的作用下,时序产生器的次高位被设置为1,而所有更低的位被设置为0。如果最高位之前已经被设为1,则此时D/A转换器的输出vO将等于3/4VREF。然后,输入电压v1与这个新的参考电压值3/4VREF进行比较,如果v1大于或等于3/4VREF,则数据寄存器的Dn-2位被设置为1,否则设为0。如果最高位之前被设置为0,则此时D/A转换器的输出vO为VREF/4,再进行类似的比较和存储过程。

如此继续进行,每个时钟脉冲驱动一个新位的设置,并进行相应的比较和存储,直到所有位都被逐次比较和设置。最终,通过这一系列的逐步逼近和比较过程,输入模拟电压v1被转换为一个相应的数字输出值。

逐次逼近型ADC工作示意图

1.2 积分型ADC

积分型ADC又称为双斜率ADC,其基本原理是通过两次积分将输入的模拟电压转换成与其平均值成正比的时间间隔,在此时间间隔内采用计数器对时钟脉冲进行计数,从而实现A/D转换。积分型ADC的优点是分辨率高、成本低,但缺点是转换速度慢。
第一阶段(积分阶段),输入的模拟信号通过一个积分器积分一定的时间(通常是固定时间)。积分的结果是一个电压,其幅值与输入信号的大小成正比。
第二阶段(去积分阶段),积分器切换到去积分模式,使用一个已知的参考电压(通常是负电压)去积分,直到积分器的输出电压返回到零。这个去积分过程所需的时间与输入信号的大小成反比。
积分型ADC工作示意图

1.3 并联比较型ADC

并联比较型ADC的核心特点是它使用了一组并行的比较器(如下图所示)。每个比较器都连接到一个不同的参考电压,这些参考电压覆盖了整个模拟输入电压范围,并且均匀分布。当输入模拟信号被送入所有比较器时,每个比较器同时将输入信号与其特定的参考电压进行比较。这些比较器几乎同时输出一组二进制数据,表示输入信号是高于还是低于各自的参考电压。

这组并行输出随后送入一个编码器(通常是优先编码器),它将并行比较器的输出转换为一个二进制数字。并联比较型ADC从转换速度上是最快,但是使用大量比较器意味着更多的硬件组件,从而导致成本增加,同时也会增加功耗。因此除非对转换速度要求极高,否则基本上很少采用这种类型的ADC。
并联型ADC工作示意图

二、ADC框图

ADC框图如下所示,由7个部分组成参考电压/模拟部分电压、输入通道、转换序列、触发源、转换时间、数据寄存器、中断。接下来会对这7个部分做个简单介绍。
ADC框图

2.1 参考电压/模拟部分电压

参考电压/模拟部分电压规定了ADC输入电压的标称范围,通常ADC的输入范围为   V R E F − ≤ V I N ≤ V R E F + \ V_{REF-} \le V_{IN}\le V_{REF+}  VREFVINVREF+。超出这个范围,ADC无法正常识别。

2.2 输入通道

输入通道将外部电压输送到ADC转换器中,输入通道越多,代表ADC能够接收和转换的独立模拟信号的数量。下表是具体的ADC通道表(以STM32F103为例)。ADC1和ADC2都有16个外部通道和2个内部通道,ADC3有13个外部通道和5个外部通道。
输入通道表

2.3 转换顺序

A/D转换被组织为两组:规则组(常规转换组)和注入组(注入转换组)。规则组最多可以有16个转换,注入组最多有4个转换。
如下图是ADC在规则组和注入组中的转换顺序。注入组转换可以打断规则组的转换。假如在规则组转换过程中,注入组启动,那么注入组被转换完成后,规则组才得以继续转换。
转换顺序图

  • 规则序列
    规则组最多允许16个输入通道进行转换,那么就需要设置通道转换的顺序。规则序列寄存器有3个,分别为SQR1、SQR2、SQR3。规则序列寄存器控制关系汇总如下表。
    规则序列寄存器控制关系汇总
  • 注入序列
    注入组最大允许4个 通道输入,它的注入序列由 JSQR寄存器配置。注入序列寄存器控制关系汇总如下表。
    注入序列寄存器控制关系汇总

2.4 触发源

  • ADON位触发转换
    当ADC_CR2寄存器的ADON位为1时,再独立给ADON位写1,这时会启动转换。

  • 外部触发转换
    通过外部事件触发转换,例如定时器捕获、EXTI线和软件触发,可以分为规则组外部触发和注入组外部触发。

2.5 转换时间

ADC的输入时钟是由PCLK2经过分频产生,可选择2/4/8/16分频。需要注意的是,ADC的输入时钟频率最大值是14MHz(不同类型的ADC的输入最大时钟频率是不同的),如果超过这个值将会导致ADC的转换结果准确度下降

  • ADC转换时间
    T c o n v = 采样时间 + 12.5 个周期 T_{conv} = 采样时间 + 12.5个周期 Tconv=采样时间+12.5个周期

2.6 数据寄存器

  • ADC规则数据寄存器(ADC_DR)
    规则组完成转换后的数据输出到ADC_DR寄存器。由ADC_CR2寄存器的ALIGN位设置数据对齐方式。
    在多通道ADC中,当使用规则组配置多个输入通道时,每个通道的转换数据会被顺序地存储在ADC_DR寄存器中,并且后续通道的数据会覆盖前一个通道的数据。因此为了防止数据丢失,通常采用直接存储访问(DMA)模式及时将每个通道的转换数据传输到指定内存地址。

  • ADC注入数据寄存器(ADC_JDRx,x=1~4)
    注入组完成转换后的数据输出到ADC_JDRx寄存器。ADC注入数据寄存器有4个,注入组最多有四个通道,刚好每个通道都有自己对应的数据寄存器。

2.7 中断

  • 模拟看门狗中断
    在ADC的模拟看门狗功能中,中断触发条件由两个寄存器,即ADC_LTR(低阈值寄存器)和ADC_HTR(高阈值寄存器),设定的阈值决定。当启用模拟看门狗中断功能后,若ADC测量的模拟输入电压跌破低阈值或超越高阈值,将引发一个中断。例如,假设高阈值设定为3.0V,那么任何超过3.0V的输入电压都会触发模拟看门狗中断。低阈值的工作原理同理。

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

三、工作模式

3.1 转换模式

  • 单次转换模式
    将ADC_CR2寄存器的CONT位置0,则选择了单次转换模式,该模式下,ADC只执行一次转换。

  • 连续转换模式
    将ADC_CR2寄存器的CONT位置0,则选择了连续转换模式,该模式下,ADC完成上一个通道的转换后会马上自动地启动下一个通道的转换。

3.2 扫描模式

ADC的扫描模式,通过设置ADC_CR1寄存器的SCAN位来激活,允许ADC自动扫描并转换由ADC_SQRx寄存器和ADC_JSQR指定的一组选定通道。在扫描模式下,ADC对规则组或注入组的每个通道进行一次转换,完成后暂停。

若同时启用了连续转换模式,转换过程会在完成一轮扫描后自动重启。此外,开启DMA功能可使得规则组转换的数据在每个转换周期结束后自动传输到SRAM,而注入组的转换结果始终储存于ADC_JDRx寄存器中。

3.3 转换模式和扫描模式的组合及作用

单次转换模式(不扫描)使用ADC单通道,并要求进行一次转换
单次转换模式(扫描)使用ADC多通道,并要求所有通道都转换一次就停止
连续转换模式(不扫描)使用ADC单通道,并要求对该通道连续转换
连续转换模式(扫描)使用ADC多通道,并要求所有通道都转换一次后,自动启动下一轮转换
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TJ_conly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值