ADC 简介(STM32F407)

什么是ADC

ADC即模拟数字转换器,全称 Analog-to-digital converter,可以将外部的模拟信号转换为数字信号。

ADC功能框图

①参考电压/输入电压

ADC的输入电压范围是 VREF-- ≤ VIN ≤ VREF+,最终还是由 VREF--、VREF+、VDDA、VSSA 决定。

VDDA 和VREF+ 接 VCC3.3,而 VSSA 和 VREF- 接地,所以 ADC 的输入电压范围是 0~3.3V。

②输入通道

ADC1有16个外部通道和3个内部通道,ADC1的外部通道是通道17、通道18和通道19,分别连接到内部温度传感器、内部Vrefint和Vbat。

ADC2和ADC3只有16个外部通道。

ADC的外部通道如下表所示,

③转换顺序

当任意 ADCx 多个通道以任意顺序进行一系列转换就诞生了成组转换,这里就有两种成组转换类型:规则组和注入组。

规则组就是框图中的规则通道,注入组就是框图中的注入通道。后文中规则通道以规则组来代称,注入通道以注入组来代称。

规则组允许最多16个输入通道进行转换,而注入组允许最多4个输入通道进行转换。这里讲解一下规则组和注入组。

规则组(规则通道)

规则组,顾名思义,就是按照一定的顺序,相当于正常运行的程序,平常用到最多也是规则组。

注入组(注入通道)

注入组,顾名思义,"注入" 就是打破原来的状态,相当于中断。当程序执行的时候,中断是可以打断程序的执行。同这个类似,注入组转换可以打断规则组的转换。假如在规则组转换过程中,注入组启动,那么注入组被转换完成之后,规则组才得以继续转换。 便于理解,下图为规则组和注入组的对比图,

在了解了规则组和注入组后,现在了解一下它们两者的转换顺序。

规则序列

规则组是允许16个通道进行转换的,那么就需要安排通道转换的次序即规则序列。规则序列寄存器有3个,分别为SQR1、SQR2和SQR3。SQR3控制规则序列中的第1个到第6个转换的通道;SQR2控制规则序列中第7个到第12个转换的通道;SQR1控制规则序列中第13个到第16个转换的通道。规则序列寄存器SQRx下图所示,

注入序列

注入序列,跟规则序列差不多,都是有顺序的安排。由于注入组最大允许4个通道输入,所以这里就使用了一个寄存器JSQR。注入序列寄存器JSQR详表下所示,

④触发源

在配置好输入通道以及转换顺序后,就可以进行触发转换了。ADC的触发转换有两种方法:分别是通过软件或外部事件(也就是硬件)触发转换。

软件触发转换的方法是通过写 ADC_CR2 寄存器的 ADON 这个位来控制,写1就开始转换,写0就停止转换,这个控制ADC转换的方式非常简单。

另一种就是通过外部事件触发转换的方法,有定时器和输入引脚触发等等。这里区分规则组和注入组。方法是:通过 ADC_CR2 寄存器的 EXTSET[2:0] 选择规则组的触发源,JEXTSET[2:0] 选择注入组的触发源。通过 ADC_CR2 的 EXTTRIG 和 JEXTTRIG 这两位去激活触发源。ADC3 的触发源与 ADC1、2 的不同,这里需要注意,在框图里已经标记出来了。

⑤转换时间

STM32F407的ADC总转换时间的计算公式如下:

= 采样时间 + 12个周期

采样时间可通过 ADC_SMPR1 和 ADC_SMPR2 寄存器中的 SMP[2:0] 位编程,ADC_SMPR2 控制的是通道 0~9,ADC_SMPR1 控制的是通道 10~18。所有通道都可以通过编程来控制使用不同的采样时间,可选采样时间值如下:

公式中的 12个周期 是由 ADC 输入时钟 ADC_CLK 决定的。ADC_CLK 是由 APB2 经过分频产生,分频系数由 RCC_CFGR 寄存器中的 PPRE2[2:0] 进行设置,有 2/4/6/8/16 分频选项。 采样时间最小是3个时钟周期,这个采样时间下,我们可以得到最快的采样速度。

例如,我们采用最高的采样速率,使用采样时间为3个ADC时钟周期,那么得到:

= 3个ADC时钟周期 + 12个周期 = 15个ADC时钟周期

一般 APB2 的时钟是 84MHz,经过 ADC 分频器的4分频后,ADC 时钟频率就为21MHz。通过换算可得到:

= 15个ADC时钟周期 = (121000000)∗15 s = 0.71us

⑥数据寄存器

ADC转换完成后的数据输出寄存器。根据转换组的不同,规则组的完成转换的数据输出到ADC_DR寄存器,注入组的完成转换的数据输出到ADC_JDRx寄存器。假如是使用双重模式, 规则组的数据也是存放在ADC_DR寄存器。

⑦中断

规则和注入组转换结束时能产生中断,当模拟看门狗状态位被设置时也能产生中断。它们在ADC_SR中都有独立的中断使能位。

模拟看门狗中断

模拟看门狗中断发生条件:首先通过ADC_LTR和ADC_HTR寄存器设置低阈值和高阈值,然后开启了模拟看门狗中断后,当被ADC转换的模拟电压低于低阈值或者高于高阈值时,就会产生中断。例如我们设置高阈值是3.0V,那么模拟电压超过3.0V的时候,就会产生模拟看门狗中断,低阈值的情况类似。

DMA请求

规则组和注入组的转换结束后,除了产生中断外,还可以产生DMA请求,把转换好的数据存储在内存里面,防止读取不及时数据被覆盖。

总结

本文主要介绍了 ADC 的基本概念和其功能结构。有关 ADC 的具体应用将在其他文章中详细叙述。

相关推荐
钰珠AIOT2 小时前
在同一块电路板上同时存在 0805 0603 不同的封装有什么利弊?
嵌入式硬件
代码游侠2 小时前
复习——Linux设备驱动开发笔记
linux·arm开发·驱动开发·笔记·嵌入式硬件·架构
代码游侠13 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
xuxg200515 小时前
4G 模组 AT 命令解析框架课程正式发布
stm32·嵌入式·at命令解析框架
CODECOLLECT16 小时前
京元 I62D Windows PDA 技术拆解:Windows 10 IoT 兼容 + 硬解码模块,如何降低工业软件迁移成本?
stm32·单片机·嵌入式硬件
BackCatK Chen17 小时前
STM32+FreeRTOS:嵌入式开发的黄金搭档,未来十年就靠它了!
stm32·单片机·嵌入式硬件·freertos·低功耗·rtdbs·工业控制
全栈游侠19 小时前
STM32F103XX 02-电源与备份寄存器
stm32·单片机·嵌入式硬件
Lsir10110_20 小时前
【Linux】中断 —— 操作系统的运行基石
linux·运维·嵌入式硬件
深圳市九鼎创展科技1 天前
瑞芯微 RK3399 开发板 X3399 评测:高性能 ARM 平台的多面手
linux·arm开发·人工智能·单片机·嵌入式硬件·边缘计算
辰哥单片机设计1 天前
STM32项目分享:车辆防盗报警系统
stm32·单片机·嵌入式硬件