0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

STM32F1 ADC主要特性和结构框图解析

白纪龙 来源:白老大大 作者:白老大大 2022-07-13 11:45 次阅读

STM32F1 ADC简介

ADC(analog to digital converter)即模数转换器,它可以将模拟信号转换为数字信号。按照其转换原理主要分为逐次逼近型、双积分型、电压频率转换型三种。STM32F1 的 ADC 就是逐次逼近型的模拟数字转换器

STM32F103 系列一般都有 3 个 ADC,这些 ADC 可以独立使用,也可以使用双重/三重模式(提高采样率)。STM32F1 的 ADC 是 12 位逐次逼近型的模拟数字转换器。它具有多达 18 个复用通道,可测量来自 16 个外部源、2 个内部信号源。 这些通道的 A/D 转换可以单次、连续、扫描或间断模式执行。ADC 的结果可以左对齐或右对齐方式存储在 16 位数据寄存器中。ADC 具有模拟看门狗特性,允许应用程序检测输入电压是否超出用户定义的阀值上限或者下限。

STM32F1 ADC 主要特性:

● 12 位分辨率

● 转换结束、注入转换结束和发生模拟看门狗事件时产生中断

● 单次和连续转换模式

● 从通道 0 到通道 n 的自动扫描模式

● 自校准

● 带内嵌数据一致性的数据对齐

● 采样间隔可以按通道分别编程

● 规则转换和注入转换均有外部触发选项

● 间断模式

● 双重模式(带 2 个或以上 ADC 的器件)

● ADC 转换时间:

─ STM32F103xx 增强型产品时钟为 56MHz 时为 1μs(时钟为 72MHz 为 1.17μs)

─ STM32F101xx 基本型产品:时钟为 28MHz 时为 1μs(时钟为 36MHz 为 1.55μs)

─ STM32F102xxUSB 型产品:时钟为 48MHz 时为 1.2μs

─ STM32F105xx和STM32F107xx产品:时钟为56MHz时为1μs(时钟为72MHz为 1.17μs)

● ADC 供电要求: 2.4V 到 3.6V

● ADC 输入范围: VREF- ≤ VIN ≤ VREF+

● 规则通道转换期间有 DMA 请求产生。

STM32F1 ADC 结构框图

STM32F1 ADC 拥有这么多功能,是由 ADC 内部结构所决定。要更好地理解STM32F1 的 ADC,就需要了解它内部的结构。如图 28.1.1 所示:

我们把 ADC 结构框图分成 7 个子模块,按照顺序依次进行简单介绍。

(1)标号 1:电压输入引脚

ADC 输入电压范围为: VREF- ≤ VIN ≤ VREF+。由 VREF-、 VREF+ 、VDDA 、 VSSA 这四个外部引脚决定。通常我们把 VSSA 和 VREF-接地,把 VREF+和 VDDA 接 3.3V,因此 ADC 的输入电压范围为:0~3.3V。我们使用的开发板 ADC输入电压范围为 0~3.3V。

如果我们想让 ADC 测试负电压或者更高的正电压,可以在外部加一个电压调理电路,把需要转换的电压抬升或者降压到 0~3.3V,这样 ADC 就可以测量了。但一定记住,不要直接将高于 3.3V 的电压接到 ADC 管脚上,那样将可能烧坏芯片

(2)标号 2:输入通道

STM32 的 ADC 的输入通道多达 18 个,其中外部的 16 个通道就是框图中的 ADCx_IN0、ADCx_IN1.。.ADCx_IN5(x=1/2/3,表示 ADC 数),通过这 16 个外部通道可以采集模拟信号。这 16 个通道对应着不同的 IO 口, 具体是哪一个IO 口可以从数据手册查询到,也可以从图 28.1.2 查看,同样我们在开发板芯片原理图内也给大家标注了。其中 ADC1 还有 2 个内部通道:ADC1 的通道 16 连接到了芯片内部的温度传感器,通道 17 连接到了内部参考电压 VREFINT。ADC2 和ADC3 的通道 16、 17 全部连接到了内部的 VSS。

(3)标号 3:通道转换顺序

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

规则通道组:从名字来理解,规则通道就是一种规规矩矩的通道,类似于正常执行的程序。通常我们使用的都是这个通道。

注入通道组:从名字来理解,注入即为插入,是一种不安分的通道,类似于中断。当程序正常往下执行时,中断可以打断程序的执行。同样如果在规则通道转换过程中,有注入通道插队,那么就要先转换完注入通道,等注入通道转换完成后,再回到规则通道的转换流程。

每个组包含一个转换序列,该序列可按任意顺序在任意通道上完成。例如,可按以下顺序对序列进行转换: ADC_IN3、ADC_IN8、 ADC_IN2、 ADC_IN2、ADC_IN0、 ADC_IN2、 ADC_IN2、 ADC_IN15。规则通道组序列寄存器有 3 个,分别是 SQR3、 SQR2、 SQR1。 SQR3 控制着规则序列中的第一个到第六个转换,对应的位为:SQ1[4:0]~SQ6[4:0],第一次转换的是位 4:0 SQ1[4:0],如果通道 3 想第一次转换,那么在 SQ1[4:0]写 3即可。SQR2 控制着规则序列中的第 7 到第 12 个转换,对应的位为:SQ7[4:0]~SQ12[4:0],如果通道 1 想第 8 个转换,则 SQ8[4:0]写 1 即可。SQR1 控 制 着 规 则 序 列 中 的 第 13 到 第 16 个 转 换 , 对 应 位 为 : SQ13[4:0]~SQ16[4:0],如果通道 6 想第 10 个转换,则 SQ10[4:0]写 6 即可。具体使用多少个通道,由 SQR1 的位 L[3:0]决定,最多 16 个通道。

注入通道组序列寄存器只有一个,是 JSQR。它最多支持 4 个通道,具体多少个由 JSQR 的 JL[2:0]决定。注意:

当 JL[1:0] = 3(有 4 次注入转换)时, ADC 将按以下顺序转换通道:JSQ1[4:0]、JSQ2[4:0]、 JSQ3[4:0] 和 JSQ4[4:0]。

当 JL = 2 (有 3 次注入转换)时,ADC 将按以下顺序转换通道:JSQ2[4:0]、JSQ3[4:0] 和 JSQ4[4:0]。

当 JL = 1 (有 2 次注入转换)时,ADC 转换通道的顺序为:先是 JSQ3[4:0],而后是 JSQ4[4:0]。

当 JL = 0(有 1 次注入转换)时, ADC 将仅转换 JSQ4[4:0] 通道。

如果在转换期间修改 ADC_SQRx 或 ADC_JSQR 寄存器,将复位当前转换并向ADC 发送一个新的启动脉冲,以转换新选择的通道组。

(4)标号 4:触发源

选择好输入通道,设置好转换顺序,接下来就可以开始转换。要开启 ADC转换,可以直接设置 ADC 控制寄存器 ADC_CR2 的 ADON 位为 1,即使能 ADC。当然 ADC 还支持外部事件触发转换,触发源有很多,具体选择哪一种触发源,由 ADC控制寄存器 2:ADC_CR2 的 EXTSEL[2:0]和 JEXTSEL[2:0]位来控制。EXTSEL[2:0]用于选择规则通道的触发源,JEXTSEL[2:0]用于选择注入通道的触发源。选定好触发源之后,触发源是否要激活,则由 ADC 控制寄存器 ADC_CR2 的 EXTTRIG 和JEXTTRIG 这两位来激活。

如果使能了外部触发事件,我们还可以通过设置 ADC 控制寄存器2:ADC_CR2 的 EXTEN[1:0]和 JEXTEN[1:0]来控制触发极性,可以有 4 种状态,分别是:禁止触发检测、上升沿检测、下降沿检测以及上升沿和下降沿均检测。

(5)标号 5:ADC 时钟

ADC 输入时钟 ADC_CLK 由 APB2 经过分频产生,最大值是 14MHz,分频因子由 RCC 时钟配置寄存器 RCC_CFGR 的位 15:14 ADCPRE[1:0]设置,可以是2/4/6/8 分频,注意这里没有 1 分频。我们知道 APB2 总线时钟为 72M,而 ADC最大工作频率为 14M,所以一般设置分频因子为 6,这样 ADC 的输入时钟为 12M。

ADC 要完成对输入电压的采样需要若干个 ADC_CLK 周期,采样的周期数可通过 ADC 采样时间寄存器 ADC_SMPR1 和 ADC_SMPR2 中的 SMP[2:0]位设置,ADC_SMPR2 控制的是通道 0~9, ADC_SMPR1 控制的是通道 10~17。每个通道可以分别用不同的时间采样。其中采样周期最小是 1.5 个,即如果我们要达到最快的采样,那么应该设置采样周期为 1.5 个周期,这里说的周期就是1/ADC_CLK。

ADC 的总转换时间跟 ADC 的输入时钟和采样时间有关,其公式如下:

Tconv = 采样时间 + 12.5 个周期

其中 Tconv 为 ADC 总转换时间,当 ADC_CLK=14Mhz 的时候,并设置 1.5 个周期的采样时间,则 Tcovn=1.5+12.5=14 个周期=1us。通常经过 ADC 预分频器能分频到最大的时钟只能是 12M,采样周期设置为 1.5 个周期,算出最短的转换时间为 1.17us,这个才是最常用的。

(6)标号 6:数据寄存器

ADC 转换后的数据根据转换组的不同,规则组的数据放在 ADC_DR 寄存器内,注入组的数据放在 JDRx 内。

因为 STM32F1 的 ADC 是 12 位转换精度,而数据寄存器是 16 位,所以 ADC在存放数据的时候就有左对齐和右对齐区分。如果是左对齐,AD 转换完成数据存放在 ADC_DR 寄存器的[4:15]位内;如果是右对齐,则存放在 ADC_DR 寄存器的[0:11]位内。具体选择何种存放方式,需通过 ADC_CR2 的 11 位 ALIGN 设置。

在规则组中,含有 16 路通道,对应着存放规则数据的寄存器只有 1 个,如果使用多通道转换,那么转换后的数据就全部挤在 ADC_DR 寄存器内,前一个时间点转换的通道数据,就会被下一个时间点的另外一个通道转换的数据覆盖掉,所以当通道转换完成后就应该把数据取走,或者开启 DMA 模式,把数据传输到内存里面,不然就会造成数据的覆盖。 最常用的做法就是开启 DMA 传输。如果没有使用 DMA 传输,我们一般通过 ADC 状态寄存器 ADC_SR 获取当前 ADC 转换的进度状态,进而进行程序控制。

而在注入组中,最多含有 4 路通道,对应着存放注入数据的寄存器正好有 4个,不会跟规则寄存器那样产生数据覆盖的问题。

(7)标号 7:中断

当发生如下事件且使能相应中断标志位时,ADC 能产生中断。

1.转换结束(规则转换)与注入转换结束

数据转换结束后,如果使能中断转换结束标志位,转换一结束就会产生转换结束中断。

2.模拟看门狗事件

当被 ADC 转换的模拟电压低于低阈值或者高于高阈值时,就会产生中断,前提是我们开启了模拟看门狗中断,其中低阈值和高阈值由 ADC_LTR 和ADC_HTR 设置。

3.DMA 请求

规则和注入通道转换结束后,除了产生中断外,还可以产生 DMA 请求,把转换好的数据直接存储在内存里面。要注意的是只有 ADC1 和 ADC3 可以产生DMA 请求。一般我们在使用 ADC 的时候都会开启 DMA 传输。我们知道 STM32F1 ADC 转换模式有单次转换与连续转换区分。

在单次转换模式下,ADC 执行一次转换。可以通过 ADC_CR2 寄存器的SWSTART 位(只适用于规则通道)启动,也可以通过外部触发启动(适用于规则通道和注入通道),这时 CONT 位为 0。以规则通道为例,一旦所选择的通道转换完成,转换结果将被存在 ADC_DR 寄存器中,EOC(转换结束)标志将被置位,如果设置了 EOCIE,则会产生中断。然后 ADC 将停止,直到下次启动。

在连续转换模式下,ADC 结束一个转换后立即启动一个新的转换。CONT 位为 1 时,可通过外部触发或将 ADC_CR2 寄存器中的 SWSTRT 位置 1 来启动此模式(仅适用于规则通道)。需要注意的是:此模式无法连续转换注入通道。连续模式下唯一的例外情况是,注入通道配置为在规则通道之后自动转换(使用JAUTO 位)。


审核编辑 黄昊宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 单片机
    +关注

    关注

    6036

    文章

    44557

    浏览量

    634830
  • adc
    adc
    +关注

    关注

    98

    文章

    6497

    浏览量

    544505
  • STM32
    +关注

    关注

    2270

    文章

    10897

    浏览量

    355807
  • 模数转换器
    +关注

    关注

    26

    文章

    3203

    浏览量

    126815
  • stm32f1
    +关注

    关注

    1

    文章

    56

    浏览量

    12202
收藏 人收藏

    评论

    相关推荐

    STM32F1 ADC主要特性结构框图

    可以左对齐或右对齐方式存储在 16 位数据寄存器中。ADC 具有模拟看门狗特性,允许应用程序检测输入电压是否超出用户定义的阀值上限或者下限。STM32F1 ADC
    发表于 01-14 17:22

    Stm32F1系统时钟的结构

    Stm32F1系统时钟的结构
    发表于 08-12 08:02

    关于stm32f1中的ADC和DMA理解

    怎样去校准stm32f1中的ADC呢?怎样去理解stm32f1中的ADC和DMA呢?
    发表于 02-21 06:05

    STM32F1 ADC主要特性结构框图

    可以左对齐或右对齐方式存储在 16 位数据寄存器中。ADC 具有模拟看门狗特性,允许应用程序检测输入电压是否超出用户定义的阀值上限或者下限。STM32F1 ADC
    发表于 07-13 11:29

    STM32F1系列的HAL库手册免费下载

    本文档的主要内容详细介绍的是STM32F1系列单片机的HAL库手册免费下载。
    发表于 11-19 14:36 475次下载
    <b class='flag-5'>STM32F1</b>系列的HAL库手册免费下载

    STM32F1的固件库免费下载

    本文档的主要内容详细介绍的是STM32F1的固件库免费下载。
    发表于 12-26 17:22 156次下载
    <b class='flag-5'>STM32F1</b>的固件库免费下载

    STM32F1ADC2如何使用DMA功能 USART过载错误Overrun error

    STM32F1ADC2如何使用DMA功能,USART过载错误Overrun error
    的头像 发表于 03-14 14:42 8087次阅读
    <b class='flag-5'>STM32F1</b>的<b class='flag-5'>ADC</b>2如何使用DMA功能 USART过载错误Overrun error

    STM32F1系列芯片中文参考手册

    STM32F1系列芯片中文参考手册(嵌入式开发培训教程)-STM32F1系列芯片的中文用户手册
    发表于 07-30 09:32 218次下载
    <b class='flag-5'>STM32F1</b>系列芯片中文参考手册

    STM32F1F4的区别

    STM32F1F4的区别
    发表于 12-04 13:51 24次下载
    <b class='flag-5'>STM32F1</b>和<b class='flag-5'>F</b>4的区别

    STM32f1时钟系统整理

    STM32f1时钟系统一、祭出STM32F1的官方时钟框图二、寄存器说明1、时钟控制寄存器RCC_CR第0位:HSION(0,关闭;1,开启
    发表于 12-14 19:05 3次下载
    <b class='flag-5'>STM32f1</b>时钟系统整理

    STM32F1 ADC和DMA的简单理解

    本文主要讲解stm32f1ADC和DMA的使用,在学习中参考了多篇文章,感谢前辈的付出。STM32F10X ADC多通道读取小教程(包含D
    发表于 12-27 19:09 35次下载
    <b class='flag-5'>STM32F1</b> <b class='flag-5'>ADC</b>和DMA的简单理解

    STM32电源框图解析(VDD、VSS、VDDA、VSSA、VREF+、VREF-、VBAT等的区别)

    目录1、名词解析2、框图解析2.1、独立的A/D转换器供电和参考电压2.2、电池备份区域STM32的工作电压(VDD )为2.0~3.6V,通过内置的电压调节器提供所需的1.8V电源,
    发表于 01-05 14:36 21次下载
    <b class='flag-5'>STM32</b>电源<b class='flag-5'>框图解析</b>(VDD、VSS、VDDA、VSSA、VREF+、VREF-、VBAT等的区别)

    AN4904_从STM32F1STM32F4的软件移植

    AN4904_从STM32F1STM32F4的软件移植
    发表于 11-21 17:06 3次下载
    AN4904_从<b class='flag-5'>STM32F1</b>到<b class='flag-5'>STM32F</b>4的软件移植

    合轴551G GPS模块显示定位信息在STM32F1开发板

    基于STM32F1开发板,将GPS定位信息解析显示
    发表于 12-16 14:43 0次下载

    单片机STM32F1资料分享

    单片机STM32F1资料分享
    发表于 05-16 18:04 15次下载