STM32H750外设之ADC功能概述

本文详细介绍了STM32H7处理器中的ADC模块,包括其高性能、低功耗特性、多通道选项、过采样、模拟输入连接、转换方式和模式,以及校准功能的详细配置步骤。
摘要由CSDN通过智能技术生成

目录

概述

1 认识ADC模块

1.1 ADC介绍

1.2 ADC的特征

1.2.1 高性能特征

1.2.2 过采样器

1.2.3 低功耗特性

1.2.4  独立外部模拟输入通道

1.2.5  五条内部专用通道

1.2.6 多种转换方式

1.2.7 多种转换模式

 2   ADC功能框图

2.1 ADC1和ADC2的功能框图

2.2 ADC 引脚和内部信号

2.2.1 ADC 内部输入/输出信号

2.2.2 ADC 输入/输出引脚

2.3 时钟

2.4 ADC1/2/3 连接

3 ADC的功能介绍

3.1  ADC DEEPPWD 和 ADC ADVREGEN

3.2单端通道和差分输入通道

3.3 校准功能


概述

本文主要介绍STM32H7的重要外设资源ADC的功能,文中首先介绍了ADC模块的特性,在整个STM32的内核中,使用的总线机制,线路连接方式,时钟选择来源等内容,还介绍了ADC功能的基本框架结构以及部分功能。

1 认识ADC模块

1.1 ADC介绍

STM32 H750 有3个ADC外设,其分别为:

1)ADC1 与 ADC2 紧密耦合,可在双重模式下运行( ADC1 为主器件)。

2)ADC3 单独进行实例化

每个 ADC 由 16 位逐次逼近模数转换器组成。每个 ADC 的复用通道多达 20 条。各种不同通道的 A/D 转换可在单次、连续、扫描或不连续采样模式下进行。 ADC 的结果存储在一个左对齐或右对齐的 32 位数据寄存器中。ADC 映射到 AHB 总线,从而可实现快速数据处理。ADC 具有模拟看门狗特性,允许应用检测输入电压是否超过了用户自定义的阈值上限或下限。内置硬件过采样器,可提高模拟性能,同时还能减轻 CPU 进行相关计算的负担。采用了高效的低功耗模式,在低频下可实现极低的功耗。

1.2 ADC的特征

1.2.1 高性能特征

item描述
1多达 2 个 ADC,可在双重模式下运行
2可配置 16 位、 14 位、 12 位、 10 位或 8 位分辨率
3ADC 转换时间与 AHB 总线时钟频率无关
4可通过降低分辨率来缩短转换时间
5可管理单端输入或差分输入(可按通道进行编程)
6AHB 从总线接口,可实现快速数据处理
7自校准(偏移校准和线性度校准)
8可独立设置各通道采样时间
9多达四条注入通道(对常规通道或注入通道的模拟输入分配完全可配置)
10硬件辅助准备注入通道的上下文,从而实现快速上下文切换
11数据对齐以保持内置数据一致性
12数据可由 GP-DMA 管理,基于 FIFO 实现常规通道转换
14数据可连接到 DFSDM 进行后期处理
144 个专用数据寄存器供注入通道使用

1.2.2 过采样器

item描述
132 位数据寄存器
2过采样率可在 2x 到 1024x 之间进行调整
3可编程数据右移和左移

1.2.3 低功耗特性

item描述
1速度自适应低功耗模式,可降低 ADC 在低频下工作时的功耗
2可在实现慢速总线频率应用的同时保持最佳 ADC 性能
3提供自动控制,可避免 ADC 在低 AHB 总线时钟频率应用中溢出(自动延迟模式)

1.2.4  独立外部模拟输入通道

item描述
1专用 GPIO 焊盘有多达 6 条快速通道
2专用 GPIO 焊盘有多达 14 条慢速通道

1.2.5  五条内部专用通道

item描述
1内部参考电压 (VREFINT),连接到 ADC3
2内部温度传感器 (VSENSE),连接到 ADC3
3VBAT 监测通道 (VBAT/4),连接到 ADC3
4内部 DAC 通道 1 和通道 2,连接到 ADC2

1.2.6 多种转换方式

item描述
1通过软件启动常规转换和注入转换
2通过极性可配置的硬件触发器(内部定时器事件或 GPIO 输入事件)启动常规转换 和注入转换

1.2.7 多种转换模式

item描述
1每个 ADC 均可转换单条通道,也可扫描一系列通道
2单次模式会在每次触发时对选定的输入执行一次转换
3连续模式可连续转换选定的输入
4不连续采样模式

 2   ADC功能框图

2.1 ADC1和ADC2的功能框图

2.2 ADC 引脚和内部信号

2.2.1 ADC 内部输入/输出信号

2.2.2 ADC 输入/输出引脚

2.3 时钟

STM32H750的ADC模式是双时钟域架构,双时钟域架构意味着 ADC 时钟独立于 AHB 总线时

1)ADC 时钟可以是名为 adc_ker_ck 的特定时钟源,该时钟源独立于 APB 时钟,并与AHB 时钟异步。该时钟可在 RCC 中配置(有关如何生成 ADC 时钟 (adc_ker_ck) 专用时钟的更多信息,请参见 RCC 部分)。要选择此时钟方案,必须将 ADCx_CCR 寄存器的 CKMODE[1:0] 位复位。

2)ADC 时钟可由 ADC 总线接口的 AHB 时钟除以一个可编程的因数( 1、 2 或 4)来提供。在这种模式下,可选择可编程的分频系数(根据位 CKMODE[3:0],选择1、 2 或 4)。要选择此时钟方案, ADCx_CCR 寄存器的 CKMODE[1:0] 位不得为“00”。


 

ADC 时钟与 AHB 时钟的时钟比例限制

通常来讲, ADC 时钟与 AHB 时钟之比没有限制,但一些注入通道已编程的情况除外,此时, ADC 时钟与 AHB 时钟之比必须遵循以下规定:

1)如果所有通道的分辨率均为 16 位、 14 位、 12 位或 10 位,则 FHCLK >= FADC / 4

2)如果一些通道的分辨率为 8 位(且所有通道的分辨率均不低于 8 位),则 FHCLK >= FADC / 3

2.4 ADC1/2/3 连接

ADC1 和 ADC2 紧密耦合并共用某些外部通道,如下图所示。 ADC3 单独进行实例化,但会与 ADC1 和 ADC2 共享一些输入。

1) ADC-1连接图

 2) ADC-2 连接图

 

  3) ADC-3 连接图

3 ADC的功能介绍

3.1  ADC DEEPPWD 和 ADC ADVREGEN

ADC 默认处于深度掉电模式,在该模式下,其电源会在内部切断以降低泄漏电流(ADCx_CR寄存器中的 DEEPPWD 位的复位状态为 1)。要开始 ADC 操作,需要先将 DEEPPWD 位清零,使 ADC 退出深度掉电模式。然后,必须将 ADCx_CR 寄存器中的 ADVREGEN 位置 1,以使能 ADC 内部稳压器。软件必须在 ADC 稳压器的启动时间 (TADCVREG_STUP) 内等待,之后才能开始校准或使能 ADC。该延迟必须通过软件实现。

ADC x 控制寄存器 (ADCx_CR)( x=1 到 3)

位 29 DEEPPWD:深度掉电使能 (Deep-power-down enable)
此位由软件置 1 和清零,用于使 ADC 进入深度掉电模式。
0: ADC 未处于深度掉电模式
1: ADC 处于深度掉电模式(默认复位状态)
注: 仅当 ADC 已禁止时(ADCAL=0、 JADSTART=0、 JADSTP=0、 ADSTART=0、ADSTP=0、 ADDIS=0 且 ADEN=0),才允许通过软件对此位执行写操作。

位 28 ADVREGEN: ADC 稳压器使能 (ADC voltage regulator enable)
此位由软件置 1,用于使能 ADC 稳压器。执行启动校准或使能 ADC 等操作之前,必须先使能 ADC 稳压器,并且软件必须等待稳压器启动时间。
0:禁止 ADC 稳压器
1:使能 ADC 稳压器

ADC 深度掉电模式(DEEPPWD) 和 ADC 稳压器 (ADVREGEN)。仅当 ADC 已禁止(ADCAL=0、 JADSTART=0、 ADSTART=0、 ADSTP=0、 ADDIS=0 且ADEN=0),才能通过软件对该位域进行编程。

3.2单端通道和差分输入通道

可通过写入 ADCx_DIFSELDIFSEL 寄存器中的 [19:0] 位将通道配置为单端输入或差分输入。必须在禁止 ADC (ADEN=0) 时写入此配置。

单端输入模式下,要为通道“i” 转换的模拟电压是外部电压 VINP[i](正输入)与 VREF-(负输入)之差。

在差分输入模式下,要为通道“i” 转换的模拟电压是外部电压 VINP[i](正输入)与 VINN[i](负输入)之差。

差分模式的输出数据是无符号数据。当 VINP[i] 为 VREF-、 VINN[i] 为 VREF+ 时,输出数据为0x0000( 16 位分辨率模式);当 VINP[i] 为 VREF+、 VINN[i] 为 VREF- 时,输出数据为0xFFFF。

ADC x 差分模式选择寄存器 (ADCx_DIFSEL)( x=1 到 3)

位 19:0 DIFSEL[19:0]:

通道 19 到 0 的差分模式 (Differential mode for channels 19 to 0)这些位将由软件置 1 和清零。它们用于选择将通道配置为单端模式或差分模式。

DIFSEL[i] = 0:将 ADC 模拟输入通道 i 配置为单端模式
DIFSEL[i] = 1:将 ADC 模拟输入通道 i 配置为差分模式

注: 仅当 ADC 已禁止时( ADCAL=0、 JADSTART=0、 JADSTP=0、 ADSTART=0 ADSTP=0、ADDIS=0 且 ADEN=0),才允许通过软件对这些位执行写操作。

3.3 校准功能

每个 ADC 均提供有自动校准过程,用于驱动包括 ADC 上电/ 掉电序列在内的所有校准序列。在校准过程中, ADC 会计算校准系数( 11 位偏移值或 160 位线性度值),并会在下一次掉电之前在自身内部应用该值。在校准过程中,应用不得使用 ADC,必须等待至校准完成。

执行任何 ADC 操作之前都必须进行校准。校准可消除各芯片间的系统误差,并可补偿偏移和线性度偏差。

单端输入转换与差分输入转换应用的偏移校准系数有所不同:
1)启动要为单端输入转换应用的校准之前,写入 ADCALDIF=0。
2)启动要为差分输入转换应用的校准之前,写入 ADCALDIF=1。

无论采用单端配置还是差分配置,都只能进行一次线性度校准。
1)发起将同时运行偏移校准和线性度校准的校准之前,写入 ADCALLIN=1。
2)发起只运行偏移校准而不运行线性度校准的校准之前,写入 ADCALLIN=0。

随后,通过软件将 ADCAL 位置 1 发起校准。仅当 ADC 禁止 (ADEN=0) 后,才能发起校准。 ADCAL 位在所有校准序列过程中保持为 1。校准完成后,此位会立即由硬件清零。此时,相关校准系数会存储在模拟 ADC 内部,同时还会存储在 ADCx_CALFACT 寄存器的CALFACT_S[10:0] 或 CALFACT_D[10:0] 位中(具体取决于是单端输入校准还是差分输入校准)。可通过将 ADCx_CALFACT2 寄存器的 ADEN 位置 1 的方式访问 16 位线性度校准系数。

如果禁止 ADC (ADEN=0),则会保留内部模拟校准。但如果长时间禁止 ADC,建议在重新使能 ADC 之前运行新的校准周期。每次 ADC 掉电时,内部模拟校准都会丢失(例如,产品进入待机模式或 VBAT 模式时)。这种情况下,为了避免浪费时间重新校准 ADC,可将校准系数重新写入 ADCx_CALFACT和 ADCx_CALFACT2 寄存器,但前提是软件之前保存了上次校准时得出的校准系数。如果 ADC 已使能但未进行转换( ADEN=1、 ADSTART=0 且 JADSTART=0),可写入校准系数。随后,下次转换启动时,校准系数会自动添加到模拟 ADC 中。这一载入过程是透明的,不会对转换的启动造成延迟。建议在 VREF+ 电压变化超过 10% 时重新进行校准。线性校准需要 131072 个 ADC 时钟周期,偏移校准需要 520 个 ADC 时钟周期。

ADC x 校准系数寄存器 (ADCx_CALFACT)( x=1 到 3)

位 26:16 CALFACT_D[10:0]:差分模式下的校准系数 (Calibration Factors in differential mode)

这些位可由硬件或软件写入。差分输入校准完成后,会立即由硬件更新为校准系数。软件可向这些位写入新的校准系数。如果新校准系数不同于当前存储于模拟 ADC 中的校准系数,启动新的差分校准后,会立即应用新校准系数。

注: 仅当 ADEN=1、 ADSTART=0 且 JADSTART=0 时(ADC 已使能、当前未执行任何校准和转换),才允许通过软件对这些位执行写操作。


位 10:0 CALFACT_S[10:0]:单端模式下的校准系数 (Calibration Factors In Single-Ended mode)

这些位可由硬件或软件写入。单端输入校准完成后,会立即由硬件更新为校准系数。
软件可向这些位写入新的校准系数。如果新校准系数不同于当前存储于模拟 ADC 中的校准系数,启动新的单端校准后,会立即应用新校准系数。

注: 仅当 ADEN=1、 ADSTART=0 且 JADSTART=0 时(ADC 已使能、当前未执行任何校准和转换),才允许通过软件对这些位执行写操作。
 

ADC x 校准系数寄存器 2 (ADCx_CALFACT2)( x=1 到 3)

位 29:0 LINCALFACT[29:0]:线性度校准系数 (Linearity Calibration Factor)

这些位可由硬件或软件写入。这些位存储 160 位线性度校准系数中的 30 位。单端输入校准完成后,会立即由硬件更新为校准系数。软件可向这些位写入新的校准系数。如果新校准系数不同于当前存储于模拟 ADC 中的校准系数,启动新的单端校准后,会立即应用新校准系数。

注: 仅当 ADEN=1、 ADSTART=0 且 JADSTART=0 时(ADC 已使能、当前未执行任何校准和转换),才允许通过软件对这些位执行写操作。
 

  • 15
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值