打印
[其他ST产品]

STM32学习----ADC(数模转换)

[复制链接]
1152|24
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
什么是ADC
ADC:(Analog to Digital Converter )模拟数字转换器,本质上是将模拟量转换为数字量。

模拟量:连续的量,温度,湿度,烟雾,电压,光;
数字量:离散的量
STM32F4这个芯片内部有一个温度传感器,开发板板载了一个型号
DS18B20的温度传感器,这个温度传感器内置了ADC,DS18B20为单总线通信。但是芯片内部也有温度传感器,只能测量芯片内部的工作温度,并且没有自带ADC。

STM32的ADC
当前芯片具有3个ADC外设,分别是ADC1,ADC2,ADC3。

12 位 ADC 是逐次趋近型模数转换器。
1、12位的ADC->是模拟量转换为数字量的数字量的最大值(0-4095)。
2、逐次趋近型->转换的数据慢慢的向真实数据靠近。
它具有多达 19 个复用通道,可测量来自 16 个外部源、两个内部源和 VBAT 通道的信号。
1、16个外部源-》GPIO引脚
2、两个内部源-》温度传感器,芯片参考电压
3、VBAT-》纽扣电池电压,后备电源

采样模式:这些通道的 A/D 转换可在单次、连续、扫描或不连续采样模式下进行。



数据存储:ADC 的结果存储在一个左对齐或右对齐的 16 位数据寄存器中。
十二位的ADC放入16位的数据寄存器中需要左右对齐
ADC 具有模拟看门狗特性,允许应用检测输入电压是否超过了用户自定义的阈值上限或下限。
ADC在STM32内部是将电压值转换为数字量,这里锁输入的电压值的范围一般都是固定的,如果用户没有自定义输入电压阈值的上下限,一般输入的电压范围都是0V-3.3V。加入用户自定义输入电压阈值的下限为1.2V,上限为3.0V,这个时候ADC允许输入的电压范围是1.2V-3.0V。


使用特权

评论回复
沙发
狗啃模拟|  楼主 | 2023-5-31 00:02 | 只看该作者
ADC输入电压
ADC两个非常重要的电压,分别是正模拟参考电压VREF+和负模拟参考电压VREF-;
ADC允许输入的电压范围:VREF- —— VREF+ (0V-3.3V)
VREF+:1.8V——VDDA=VDD=3.3V
VREF-:VSSA=VSS=0V

示例:如果输入的电压采样后为1.1V,则转换的数字量为1365;

使用特权

评论回复
板凳
狗啃模拟|  楼主 | 2023-5-31 00:03 | 只看该作者
ADC特点
● 可配置 12 位、10 位、8 位或 6 位分辨率
正常:ADC输出数字量范围:0-4095(基于分辨率12位)
8位分辨率(0-255):1.1V -》 85
分辨率越高转换的精度越高。
● 在转换结束、注入转换结束以及发生模拟看门狗或溢出事件时产生中断
● 单次和连续转换模式
● 用于自动将通道 0 转换为通道“n”的扫描模式=》多通道
● 数据对齐以保持内置数据一致性
● 可独立设置各通道采样时间
● 外部触发器选项,可为规则转换和注入转换配置极性
● 不连续采样模式
● 双重/三重模式(具有 2 个或更多 ADC 的器件提供)
● 双重/三重 ADC 模式下可配置的 DMA 数据存储
● 双重/三重交替模式下可配置的转换间延迟
● ADC 转换类型(参见数据手册)
● ADC 电源要求:全速运行时为 2.4 V 到 3.6 V,慢速运行时为 1.8 V
● ADC 输入范围:VREF— VIN VREF+
● 规则通道转换期间可产生 DMA 请求

使用特权

评论回复
地板
狗啃模拟|  楼主 | 2023-5-31 00:03 | 只看该作者
ADC输入引脚
目前STM32F4有3个ADC,每个ADC的外部输入源16个,可能有的引脚被三个ADC或者两个ADC共有。
假设PA0,可以是ADC1的通道1,可以是ADC2的通道5,可以是ADC3的通道10。
对于ADC1来说,有8个模拟输入通道可以被3个ADC共用;

使用特权

评论回复
5
狗啃模拟|  楼主 | 2023-5-31 00:03 | 只看该作者
ADC时钟
ADC 具有两个时钟方案:
● 用于模拟电路的时钟:ADCCLK,所有 ADC 共用
此时钟来自于经可编程预分频器分频的 APB2 时钟,该预分频器允许 ADC 在 fPCLK2/2、/4、/6 或 /8 下工作。有关 ADCCLK 的最大值,请参见数据手册。

● 用于数字接口的时钟(用于寄存器读/写访问)
此时钟等效于 APB2 时钟。可以通过 RCC APB2 外设时钟使能寄存器 (RCC_APB2ENR) 分别为每个 ADC 使能/禁止数字接口时钟。

对于ADC1来说,有8个模拟输入通道可以被3个ADC共用;
对于ADC2来说,有8个模拟输入通道可以被ADC1和ADC2共用;
对于ADC3来说,有8个模拟输入通道专门用于ADC3;

使用特权

评论回复
6
狗啃模拟|  楼主 | 2023-5-31 00:03 | 只看该作者
ADC输入通道
1、外部输入通道–16个
有 16 条复用通道。可以将转换分为两组:规则转换和注入转换。每个组包含一个转换序列,该序列可按任意顺序在任意通道上完成。例如,可按以下顺序对序列进行转换:ADC_IN3、ADC_IN8、ADC_IN2、ADC_IN2、ADC_IN0、ADC_IN2、ADC_IN2、ADC_IN15。
● 一个规则转换组最多由 16 个转换构成。必须在 ADC_SQRx 寄存器中选择转换序列的规则通道及其顺序。规则转换组中的转换总数必须写入 ADC_SQR1 寄存器中的 L[3:0] 位。
● 一个注入转换组最多由 4 个转换构成。必须在 ADC_JSQR 寄存器中选择转换序列的注入通道及其顺序。注入转换组中的转换总数必须写入 ADC_JSQR 寄存器中的 L[1:0] 位。
如果在转换期间修改 ADC_SQRx 或 ADC_JSQR 寄存器,将复位当前转换并向 ADC 发送一个新的启动脉冲,以转换新选择的组。
2、内部输入通道–3个温度传感器、VREFINT 和 VBAT 内部通道
● 温度传感器内部连接到通道 ADC1_IN16。
● 内部参考电压 VREFINT 连接到 ADC1_IN17。
● VBAT 通道连接到通道 ADC1_IN18。该通道也可转换为注入通道或规则通道。
注意: 温度传感器、VREFINT 和 VBAT 通道只在主 ADC1 外设上可用

使用特权

评论回复
7
狗啃模拟|  楼主 | 2023-5-31 00:04 | 只看该作者
ADC框图分析


ADC的触发转换方式:
1、通用定时器触发ADC转换,这里没有基本定时器,因为基本定时器智能触发DAC转换;
2、外部中断可以产生一个触发脉冲,触发ADC转换;
软件触发。

使用特权

评论回复
8
狗啃模拟|  楼主 | 2023-5-31 00:04 | 只看该作者
ADC时序

使用特权

评论回复
9
狗啃模拟|  楼主 | 2023-5-31 00:04 | 只看该作者
数据对齐

使用特权

评论回复
10
狗啃模拟|  楼主 | 2023-5-31 00:04 | 只看该作者
ADC转换方式
ADC转换模式:1、单次转换 2、连续转换模式

使用特权

评论回复
11
狗啃模拟|  楼主 | 2023-5-31 00:05 | 只看该作者
单次转换模式
在规则通道中:ADC1_CH1
单次:在单次转换模式下,ADC 执行一次转换。给一次触发信号,触发一次ADC转换。
第一次:采集ADC1_CH1的模拟量数据 -> 软件触发 -> 模拟量数据转换为数字量 ->保存到DR;
第二次:采集ADC1_CH1的模拟量数据 -> 软件触发 -> 模拟量数据转换为数字量 ->保存到DR;

使用特权

评论回复
12
狗啃模拟|  楼主 | 2023-5-31 00:05 | 只看该作者
配置单次转换模式:CONT 位为 0 时,可通过以下方式启动此模式:
● 将 ADC_CR2 寄存器中的 SWSTART 位置 1(仅适用于规则通道),开启规则通道;软件触发转换
● 将 JSWSTART 位置 1(适用于注入通道) ,开启注入通道;软件触发转换
● 外部触发(适用于规则通道或注入通道)。定时器触发,外部中断触发。
完成所选通道的转换之后:

使用特权

评论回复
13
狗啃模拟|  楼主 | 2023-5-31 00:05 | 只看该作者
● 如果转换了规则通道:
— 转换数据存储在 16 位 ADC_DR 寄存器中
— EOC(转换结束)标志置 1
— EOCIE 位置 1 时将产生中断
● 如果转换了注入通道:
— 转换数据存储在 16 位 ADC_JDR1 寄存器中
— JEOC(注入转换结束)标志置 1
— JEOCIE 位置 1 时将产生中断
然后,ADC 停止。

使用特权

评论回复
14
狗啃模拟|  楼主 | 2023-5-31 00:05 | 只看该作者
连续转换模式
在规则通道中:ADC1_CH1
在连续转换模式下CONT 位为 1时,ADC 结束一个转换后立即启动一个新的转换。将ADC配置连续模式,只需要在第一次转换时给触发信号,后面不需要再给。只适用于规则通道。
第一次:采集ADC1_CH1的模拟量数据 -> 软件触发 -> 模拟量数据转换为数字量 ->保存到DR;
第二次:采集ADC1_CH1的模拟量数据 -> 模拟量数据转换为数字量 ->保存到DR;

使用特权

评论回复
15
狗啃模拟|  楼主 | 2023-5-31 00:05 | 只看该作者
● 如果转换了规则通道组:
— 上次转换的数据存储在 16 位 ADC_DR 寄存器中
— EOC(转换结束)标志置 1
— EOCIE 位置 1 时将产生中断

使用特权

评论回复
16
狗啃模拟|  楼主 | 2023-5-31 00:05 | 只看该作者
扫描模式
扫描模式是针对于多通道,在规则通道中:ADC1_CH1 ADC1_CH2 ADC1_CH3
为组中的每个通道都执行一次转换。每次转换结束后,会自动转换该组中的下一个通道。如果将 CONT 位置 1,规则通道转换不会在组中最后一个所选通道处停止,而是再次从第一个所选通道继续转换。
1、单次扫描模式
第一次触发:ADC1_CH1 -> ADC1_CH2 -> ADC1_CH3 -> 等待第2次触发 ->ADC停止
第二次触发:ADC1_CH1 -> ADC2_CH4 -> ADC1_CH7 -> 等待第3次触发
2、连续扫描模式
第一次触发:ADC1_CH1 -> ADC1_CH2 -> ADC1_CH3 ->(转换完成) -> ADC1_CH1 -> ADC1_CH2 -> ADC1_CH3 ->连续转换。

使用特权

评论回复
17
狗啃模拟|  楼主 | 2023-5-31 00:05 | 只看该作者
扫描模式的配置:
通过将 ADC_CR1 寄存器中的 SCAN 位置 1 来选择扫描模式。

使用特权

评论回复
18
狗啃模拟|  楼主 | 2023-5-31 00:06 | 只看该作者
不连续采样模式

使用特权

评论回复
19
狗啃模拟|  楼主 | 2023-5-31 00:06 | 只看该作者
ADC寄存器
数据寄存器ADC_DR

使用特权

评论回复
20
狗啃模拟|  楼主 | 2023-5-31 00:06 | 只看该作者
位 15:0 DATA[15:0]:规则数据 (Regular data)
这些位为只读。它们包括来自规则通道的转换结果。数据有左对齐和右对齐两种。
状态寄存器ADC_SR

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

60

主题

770

帖子

1

粉丝