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

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 位)。


基于FPGA的计数器设计
紫光集团频遭“被破产”之网媒乱象迷局
激光雷达技术提供商Aeva宣布获得全球顶级车企定点,浅谈加速度传感器原理及其应用
液体流量传感器用于船舶脱硫塔装置进行船舶废气废水处理的方法
交流接触器的型号及含义
STM32F1 ADC主要特性和结构框图解析
数码管的结构与驱动方式
LFPAK系列全新8*8封装提升功率效率
高通公布最新财报 营收同比大涨63%
浅谈智慧农业云平台
推力测试机显示未连接气源可能的原因有哪些?
荣耀新款无线耳机对比AirPods 从外观上看简直就是克隆体
如何加强输电线路防雷技术?有哪些维护措施?
研华许杰弘:发力IoT边缘智能服务 加速物联网战略中国落地
达芬奇视频处理器如何为智能安防系统带来差异化?
示波器测量汽车执行器电子燃油泵信号及分析
苹果为什么一直用1200万像素的镜头?
苹果手机最快将会在2020年全面转用OLED屏幕
寒武纪正式对外公布其首颗AI训练芯片思元290及玄思1000智能加速器
自动驾驶的耳目知多少:激光雷达篇