ADC学习笔记

ADC学习笔记


1、什么是ADC?

ADC,全称:Analog-to-Digital Converter,指模拟/数字转换器


2、类型

在这里插入图片描述
类型主要有,逐次逼近型、并行比较型、积分型、压频变换型,分级型,流水线型和∑-Δ型ADC
常用的有:逐次逼近型、并行比较型

ADC电路类型优点缺点
并联比较型转换速度最快成本高、功耗高,分辨率低
逐次逼近型结构简单,功耗低转换速度较慢

并行比较型

V R E F V_{REF} VREF——参考电压
在这里插入图片描述
输出口D0~2,也就是有三位输出,即分辨率为3位,可以分辨 2 3 2^3 23个数
中间的是比较器,通过比较 V X V_{X} VX与参考电压 V R E F V_{REF} VREF是否相等,来决定哪个通道,8个通道同时检测


逐次逼近型

在这里插入图片描述
假设D2D1D0:0b100
通过D/A转换器,转换成 V 0 V_0 V0。再与 V X V_X VX比较
V 0 V_0 V0 > V X V_X VX,则0b100太大了,D2应该为0,验证下一位D2D1D0:0b010
V 0 V_0 V0 < V X V_X VX,则0b100太小了,D2应该为1,验证下一位D2D1D0:0b110
再通过D/A转换器,转换成 V 0 V_0 V0。再与 V X V_X VX比较,便可以得出D1位,以此类推。

STM32F1、STM32F4的芯片 都是 逐次逼近型。


2、特性参数

分辨率:表示ADC能辨别的最小模拟量,用二进制位数表示,比如:8、10、12、16位等
精度:最小刻度基础上叠加各种误差的参数,精度受ADC性能、温度和气压等影响
转换时间:表示完成一次A/D转换所需要的时间,转换时间越短,采样率就可以越高
量化误差:用数字量近似表示模拟量,采用四舍五入原则,此过程产生的误差为量化误差

主要特性F1F4
ADC类型逐次逼近型逐次逼近型
分辨率12位6/8/10/12位
ADC时钟频率14MHz(max)36MHz(max)
采样时间采样时间越长,转换结果相对越准确,但是转换速度就越慢采样时间越长,转换结果相对越准确,但是转换速度就越慢
转换时间与ADC时钟频率、分辨率和采样时间等有关与ADC时钟频率、分辨率和采样时间等有关
供电电压VSSA:0V,VDDA: 2.4V~3.6V(全速运行)VSSA:0V,VDDA: 2.4V~3.6V(全速运行)
参考电压VREF-: 0V,VREF+一般为3.3VVREF-:0V, VREF+一般为3.3V
输入电压VRFF- <= VIN <= VRFF+VRFF- <= VIN <= VRFF+

3、框图


STM32F1

在这里插入图片描述
①参考电压/模拟部分电压 ②输入通道 ③转换序列
④触发源 ⑤转换时间 ⑥数据寄存器 ⑦中断


STM32F4

在这里插入图片描述

①参考电压/模拟部分电压 ②输入通道 ③转换序列
④触发源 ⑤转换时间 ⑥数据寄存器 ⑦中断


4、转换序列(规则通道 & 注入通道)

F1为例,规则组最多可以有16个转换,注入组最多有4个转换
如图优先级一目了然

在这里插入图片描述


5、触发源

触发转换的方法有两种:
(1)ADON位触发转换(仅限F1系列)
当ADC_CR2寄存器的ADON位为1时,再单独给ADON位写1,只能启动规则组转换

(2)外部事件触发转换
规则组外部触发和注入组外部触发

在这里插入图片描述
在这里插入图片描述


6、转换时间

时钟设置

在这里插入图片描述
在这里插入图片描述


转换时间设置

STN32F1的ADC转换时间: T C O N V T_CONV TCONV = 采样时间 + 12.5个周期

采样时间可通过SMPx[2:0]位设置,x=0~17
SMP = 000:1.5个ADC时钟周期
SMP = 001:7.5个ADC时钟周期
SMP = 010:13.5个ADC时钟周期
SMP = 011:28.5个ADC时钟周期
SMP = 100:41.5个ADC时钟周期
SMP = 101:55.5个ADC时钟周期
SMP = 110:71.5个ADC时钟周期
SMP = 111:239.5个ADC时钟周期

STN32F4的ADC转换时间(12位分辨率): T C O N V T_CONV TCONV = 采样时间 + 12个周期
12位分辨率——>+ 12个周期
10位分辨率——>+ 10个周期
8位分辨率——>+ 8个周期
6位分辨率——>+ 6个周期
采样时间可通过SMPx[2:0]位设置,x=0~18
SMP = 000:3个ADC时钟周期
SMP = 001:15个ADC时钟周期
SMP = 010:28个ADC时钟周期
SMP = 011:56个ADC时钟周期
SMP = 100:84个ADC时钟周期
SMP = 101:112个ADC时钟周期
SMP = 110:144个ADC时钟周期
SMP = 111:480个ADC时钟周期


7、数据寄存器

在这里插入图片描述
在这里插入图片描述


8、中断

中断事件事件标志使能控制位
规则通道转换结束EOCEOCIE
注入通道转换结束JEOCJEOCIE
设置了模拟看门狗状态位AWDAWDIE
溢出(F1没有)OVROVRIE

DMA请求(只适用于规则组)
规则组每个通道转换结束后,除了可以产生中断外,还可以产生DMA请求,我们利用DMA及时把转换好的数据传输到指定的内存里,防止数据被覆盖。


9、转换模式 & 扫描模式

转换模式

CONT位01
转换模式单次转换模式连续转换模式
转换组/转换模式单次转换模式(只触发一次转换)连续转换模式(自动触发下一次转换)注意:只有规则组才能触发该模式
规则组转换结果被储存在ADC_DREOC(转换结束)标志位被置1如果设置了EOCI E位,则产生中断然后ADC停止转换结果被储存在ADC_DREOC(转换结束)标志位被置1如果设置了EOCI E位,则产生中断
注入组转换结果被储存在ADC_DRJxJEOC(转换结束)标志位被置1如果设置了JEOCI E位,则产生中断然后ADC停止转换结果被储存在ADC_DRJxJEOC(转换结束)标志位被置1如果设置了JEOCI E位,则产生中断自动注入:将UAUTO位置1

扫描模式

SCAN位01
扫描模式关闭扫描模式使用扫描模式
关闭扫描模式使用扫描模式
ADC只转换ADC_SQRx或ADC_JSQR选中的第一个通道进行转换ADC会扫描所有被ADC_SQRx或ADC_JSQR选中的所有通道

组合

模式名称转换要求
单次转换模式(不扫描)只转换一个通道,而且是一次,需等待下一次触发
单次转换模式(扫描)ADC_SQRX 和ADC_JSQR 选中的所有通道都转换一次
连续转换模式(不扫描)只会转换一个通道,转换完后会自动执行下一次转换
连续转换模式(扫描)ADC_SQRX 和ADC_JSQR 选中的所有通道都转换一次,并自动进入下一轮转换

简单来说

模式名称转换要求
单次转换模式(不扫描)使用ADC单通道,并要求进行一次转换
单次转换模式(扫描)使用ADC多通道,并要求所有通道都转换一次就停止
连续转换模式(不扫描)使用ADC单通道,并要求对该通道连续转换
连续转换模式(扫描)使用ADC多通道,并要求所有通道都转换一次后,自动启动下一轮转换

10、HAL库函数

函数主要寄存器主要功能
HAL_ADC_Init()CR1、CR2配置ADC工作参数
HAL_ADCEX_Calibration_Start()CR2ADC校准
HAL_ADC_Msplinit()存放NVIC、CLOCK、GPIO初始化代码
HAL_RCCEx_PeriphCLKConfig()RCC_CFGR设置扩展外设时钟,如:ADC、RTC等
HAL_ADC_ConfigChannel()SQRx、SMPRx配置ADC相应通道的相关参数
HAL_ADC_Start()CR2启动A/D转换
HAL_ADC_PollForConversion()SR等待规则通道转换完成
HAL_ADC_GetValue()DR获取规则通道A/D转换结果

11、关键结构体

// ADC句柄结构体
typedef struct 
{ 
	ADC_TypeDef *Instance; 			/* ADC 寄存器基地址 */ 
	ADC_InitTypeDef Init; 			/* ADC 参数初始化结构体变量 */ 
	DMA_HandleTypeDef *DMA_Handle; 	/* DMA 配置结构体 */
	…… 
} ADC_HandleTypeDef;
// ADC的结构定义和正则组初始化结构体
typedef struct
 { 
	uint32_t DataAlign; 					/* 设置数据的对齐方式 */ 
	uint32_t ScanConvMode; 					/* 扫描模式 */ 
	FunctionalState ContinuousConvMode; 	/* 开启单次转换模式或者连续转换模式 */ 	
	uint32_t NbrOfConversion; 				/* 设置转换通道数目 */ 
	FunctionalState DiscontinuousConvMode; 	/* 是否使用规则通道组间断模式 */ 
	uint32_t NbrOfDiscConversion; 			/* 配置间断模式的规则通道个数 */ 
	uint32_t ExternalTrigConv; 				/* ADC 外部触发源选择 */ 
} ADC_InitTypeDef;
// 普通组ADC通道的结构体定义
typedef struct 
{ 
	uint32_t Channel; 		/* ADC 转换通道*/ 
	uint32_t Rank; 			/* ADC 转换顺序 */ 
	uint32_t SamplingTime; 	/* ADC 采样周期 */ 
}  ADC_ChannelConfTypeDef;

┈┈┈┈▕▔╲┈┈┈┈┈┈┈ ┈┈┈┈▕▔╲┈┈┈┈┈┈┈ ┈┈┈┈▕▔╲┈┈┈┈┈┈┈┈
┈┈┈┈┈▏▕┈┈┈┈┈┈┈ ┈┈┈┈┈▏▕┈┈┈┈┈┈┈ ┈┈┈┈┈▏▕┈┈┈┈┈┈┈ ┈
┈┈┈┈┈▏ ▕▂▂▂▂▂┈┈┈┈┈┈┈▏ ▕▂▂▂▂▂┈┈┈┈┈┈┈▏ ▕▂▂▂▂▂┈┈┈
▂▂▂▂╱┈┈▕▂▂▂▂▏┈ ▂▂▂▂╱┈┈▕▂▂▂▂▏┈ ▂▂▂▂╱┈┈▕▂▂▂▂▏┈┈
▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈
▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈ ▉▉▉┈┈┈┈▕▂▂▂▂▏ ┈
▔▔▔▔╲▂▂▕▂▂▂▂▏┈ ▔▔▔▔╲▂▂▕▂▂▂▂▏┈ ▔▔▔▔╲▂▂▕▂▂▂▂▏┈┈

如果对你有帮助,就点赞收藏把!(。・ω・。)ノ♡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值