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


前言

在上一章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多通道,并要求所有通道都转换一次后,自动启动下一轮转换
  • 38
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 要使用STM32F103ADC检测-5V电压,可以按照以下步骤进行: 1. 配置ADC通道:选择要使用的ADC通道,并设置其采样时间和分辨率等参数。 2. 配置GPIO口:将要检测的电压输入引脚连接到相应的GPIO口上,并设置其为模拟输入模式。 3. 启动ADC转换:通过软件触发或外部触发方式启动ADC转换,等待转换完成。 4. 读取ADC值:读取ADC转换结果寄存器中的数值,通过计算转换为对应的电压值。 需要注意的是,STM32F103ADC的输入电压范围为-3.6V,如果要检测-5V电压,需要使用外部电压分压电路将输入电压降低到3.6V以下。同时,还需要根据具体应用场景选择合适的采样时间和分辨率等参数,以保证检测精度和速度的平衡。 ### 回答2: STM32F103 ADCSTM32F系列芯片中的一种模拟数字转换器,可以实现将模拟电压信号转换为数字信号。而检测0-5V电压就需要使用该芯片的ADC进行采样处理,如下所述: 1. 硬件连接 将测量的电压信号连接到STM32F103芯片的ADC引脚上,确保连接正确,同时需要注意电压信号的极性。 2. 编程设置 使用STM32F103芯片的开发工具进行编程设定,包括但不限于以下几个方面: (1)选取合适的ADC通道,使其与电压信号输入引脚相对应; (2)设置ADC的采样速率、分辨率等参数; (3)通过GPIO口控制ADC的使能和转换开始; (4)读取ADC采样结果并计算得到电压值。 需要注意的是,在编程中要考虑到具体的采样精度和误差范围,需要经过实验和调试确定。同时,还需要对电压信号本身的产生和传输方式进行合理设计,以降低噪声干扰和误差。最后,根据不同的应用场景和需求,可以选择不同的输出方式(如LED指示灯、LCD显示等),以方便使用和管理。 ### 回答3: STM32F103ADC是一款高性能的单片机芯片,它内置了多个12位ADC模块,可以用于检测0-5V电压。想要实现这一功能,需要按照以下步骤进行。 1. 确定ADC的输入通道 STM32F103ADC内置了多个ADC通道,每个通道都有不同的输入引脚。在检测0-5V电压时,需要选择与其连接的引脚作为ADC输入通道。例如,如果电压信号通过PA0引脚输入,那么应该选择ADC1的通道0作为输入通道。 2. 配置ADC模块 在使用ADC之前,需要对其进行配置。具体步骤包括设置采样时钟、转换模式、校准因子等。可以通过CubeMX等工具来生成ADC初始化代码,或者手动写代码进行初始化。 3. 启动ADC转换 配置完成后,可以通过启动ADC转换来获取电压值。具体步骤包括设置转换触发源、启动转换、等待转换完成等。在转换完成后,会将电压值存储在ADC数据寄存器中。 4. 计算电压值 由于ADC输出的是一个0-4095的数字量,需要根据一定的公式将其转换为实际的电压值。具体计算方法是:电压值=(ADC输出值×参考电压)/4095。其中,参考电压一般是3.3V或5V。 总之,通过以上步骤,可以实现在STM32F103ADC芯片上检测0-5V电压的功能。需要注意的是,在实际使用过程中,还需要考虑如何对电压进行保护、滤波等操作,以确保电路的稳定和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

TJ_conly

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

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

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

打赏作者

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

抵扣说明:

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

余额充值