新闻动态   News
你的位置:大功率电感 > 技术

STM32F1 ADC主要特性和结构框图

时间:2022-04-25 06:07:02  来源:  作者: 点击统计:

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

  • 【好文分享】简单倍压-整流电路原理介绍
    (1)负半周时,即A为负、B为正时,D1导通、D2截止,电源经D1向电容器C1充电,在理想情况下,此半周内,D1可看成短路,同时电容器C1充电到Vm,其电流路径及电容器C1的极性如上图(a)所示。 (2)正半周时,即A为正、B为负时,D1截止、D2导通,电源经C1、D1向C2充电,由于C1的Vm再加上双压器二次侧的Vm使c2充电至最高值2Vm,其电流路径及电容器C2的极性如上图(b)所...
  • 在没有负点的情况下为什么SS8550的E级接地还能工作
    请问为什么图中的电路也能正常工作,用万用变量出来R58两端大约0.4V,LED两端2.3V,三极管CE压降0.6V,B级大约13mV。 现在B电压大于E也工作了,LA_C1是单片机IO口输出的信号。 图没有画错,实物就是这样的,按道理三极管截止应该是不工作的。 单片机是LPC824。 可以通过仿真得出结果,仿真后发现:1、ICE在控制电压为高电平时...
  • 原来继电器的设计细节这么多你们都知道吗?
    继电器可以分为机械动作继电器,称为“ Electromechanical Relays”,以及使用半导体晶体管,晶闸管,三端双向可控硅开关元件作为其开关装置的固态继电器或SSR。 机电继电器术语“继电器”通常是指响应于施加控制信号而在两个或多个点之间提供电连接的设备。 电气继电器中最常见且使用最广泛的类型是机电继电器或EMR。 继电器任何...