10、ADC
1 ADC基本情况
1.1 ADC简介
Analog-to-Digital Converter(ADC),即模拟/数字转换器。ADC可以将传感器输出的电压信号转换为单片机可以直接处理的数字信号。
1.2 ADC类型
|
ADC电路类型 |
优点 |
缺点 |
|
并联比较型 |
转换速度快 |
成本功耗高,分辨率低 |
|
逐次逼近型 |
结构简单,功耗低 |
转换速度慢 |
1.3 ADC特性参数
分辨率:ADC能识别的最小模拟量,用二进制位数表示
转换时间:表示一次A/D转换所需时间,越短表示采样率越高
精度:在最小刻度基础上叠加误差的参数,受ADC性能、温度和气压影响
量化误差:用数字量近似表示模拟量中采用四舍五入所造成的误差
2 ADC工作原理
2.1 转换序列
ADC的转换序列是指ADC按照预设的顺序,依次对多个模拟输入通道进行采样以及转换的过程。
在F1系列当中,转换被分为规则组(常规转换组)和注入组(注入转换组)。其中规则组最多有16个转换,注入组最多有4个转换。注入组可以打断规则组的转换而优先执行。
2.2 触发
ADC触发是指ADC接收到有效的触发源后开始工作的过程。
触发转换的方式有两种:(1)ADON位触发转换【仅限F1系列】(2)外部事件触发转换
2.3 转换时间(F1)
ADC在F1系列中最大频率为14MHz,而其挂载的APB2总线时钟频率为72MHz,所以要进行分频。在F1系列中应当选择4分频或更高。配置ADC时钟的函数如下:
RCC_ADCCLKConfig(RCC_PCLK2_Divx)
其中x应为4或更高。
而ADC完成一次转换所需要的时间周期TCONV的计算公式为:
TCONV= 采样时间 + 12.5个ADC时钟周期
其中12.5个ADC周期是完成逐次逼近的固定所需时间,采样时间则可以进行设置,最快1.5个周期,最慢239.5个周期,共8个档位。
TCONV/ADC时钟频率可得到一次转换需要的实际秒数。
2.4 转换模式
单次不扫描转换模式:只转换一个通道一次
单次扫描转换模式:转换所有选中的通道一次
连续不扫描转换模式:循环转换一个通道
连续扫描模式:转换所有选中的通道,转换完后自动进入下一轮循环
2.5 ADC寄存器
|
寄存器名称 |
作用 |
位 |
功能 |
|
ADC_CR1 |
设定ADC工作模式 |
8 |
0:关闭扫描模式 1:开启扫描模式 |
|
ADC_CR2 |
ADC启动、触发与对齐设置 |
0 |
0:关闭ADC 1:第一次开启ADC,第二次启动转换 |
|
1 |
0:单次转换模式 1:连续转换模式 |
||
|
2 |
0:校准完成 1:开启校准 |
||
|
3 |
0:校准寄存器已初始化 1:初始化校准寄存器 |
||
|
8 |
0:不使用DMA 1:使用DMA |
||
|
11 |
0:右对齐 1:左对齐 |
||
|
17 ~ 19 |
选择启动规则组转换的外部事件 |
||
|
20 |
0:不用外部事件启动转换 1:使用外部事件启动转换 |
||
|
22 |
0:复位 1:开启转换规则通道 |
||
|
ADC_SMPR1 |
为通道10 ~ 17选择采样时间 |
0 ~ 23 |
每3位配置一个通道 |
|
ADC_SMPR2 |
为通道0 ~ 9选择采样时间 |
0 ~ 29 |
每3位配置一个通道 |
|
ADC_SQR1 |
配置规则序列转换13 ~ 16 |
0 ~ 19 |
每5位配置规则序列第13 ~ 16个转换的编号 |
|
20 ~ 23 |
配置规则通道序列长度1 ~ 16 |
||
|
ADC_SQR2 |
配置规则序列转换7 ~ 12 |
0 ~ 29 |
每5位配置规则序列第7 ~ 12个转换的编号 |
|
ADC_SQR3 |
配置规则序列转换1 ~ 6 |
0 ~ 29 |
每5位配置规则序列第1 ~ 6个转换的编号 |
|
ADC_DR |
储存规则转换数据 |
0 ~ 16 |
储存规则转换的数据 |
3 单通道ADC采集
3.1 配置步骤
1、配置、校准ADC:HAL_ADC_Init()、HAL_ADCEx_Calibration_Start()
2、ADC MSP初始化:HAL_ADC_MSPInit()
3、配置ADC相应通道的参数:HAL_ADC_ConfigChannel()
4、启动A/D转换:HAL_ADC_Start()
5、等待规则通道转换完成:HAL_ADC_PollForConversion()
6、获取结果:HAL_ADC_GetValue()
3.2 相关函数
1、初始化函数HAL_ADC_Init(),函数原型为
HAL_ADC_Init(ADC_HandleTypeDef *hadc)
其关键结构体成员有ADC寄存器基地址Instance,ADC参数初始化结构体变量Init和DMA配置结构体DMA_Handle
对于嵌套的初始化结构体Init,其内部关键成员如下
|
成员 |
功能 |
可选值 |
备注 |
|
DataAlign |
选择数据对齐方式 |
右对齐:ADC_DATAALIGN_RIGHT 左对齐:ADC_DATAALIGN_LEFT |
通常选择右对齐 |
|
ScanConvMode |
扫描模式开关 |
使能:ENABLE 失能:DISABLE |
|
|
ContinuousConvMode |
连续转换模式 |
使能:ENABLE 失能:DISABLE |
|
|
DiscontinuousConvMode |
间断转换模式 |
使能:ENABLE 失能:DISABLE |
将长序列分为多个子组,每次触发只转换一个子组,仅在单次扫描模式有效 |
|
NbrOfConversion |
规则通道总数 |
1 ~ 16 |
仅在扫描模式开启时有效 |
|
NbrOfDiscConversion |
间断转换组大小 |
1 ~ 8 |
仅在间断模式开启时有效 |
|
ExternalTrigConv |
外部触发源选择 |
软件触发:ADC_SOFTWARE_START 定时器1的CC1事件: ADC_EXTERNALTRIGCONV_T1_CC1 定时器2的CC2事件: ADC_EXTERNALTRIGCONV_T2_CC2 |
3.3 DMA模式下的配置步骤
1、初始化DMA:HAL_DMA_Init()
2、将DMA、ADC句柄联系起来:__HAL_LINKDMA()
3、配置、校准ADC:HAL_ADC_Init()、HAL_ADCEx_Calibration_Start()
4、ADC MSP初始化:HAL_ADC_MSPInit()
5、配置ADC相应通道的参数:HAL_ADC_ConfigChannel()
6、使能DMA数据流传输完成中断:HAL_NVIC_SetPriority()、HAL_NVIC_EnableIRQ()
7、编写DMA数据流中断服务函数:DMAx_Channely_IRQHandler()
8、启动DMA:HAL_DMA_Start_IT()
9、触发ADC转换,DMA传输数据:HAL_ADC_Start_DMA()
4 ADC过采样
4.1 ADC过采样率
ADC的过采样是通过对同一个输入信号进行多次快速采样并求均值来提高ADC的有效分辨率和信噪比的过程。过采样率公式计算如下:
fos = 4W · fs
其中,fos 是过采样率,W是希望增加的分辨率位数,fs是初始采样频率
4.2 过采样步骤
1、多次采样:对同一信号在一定时间内进行多次采样,采样的次数由过采样率进行决定
2、累加求和:对所有采样结合进行累加,得到总和
3、移位截断:将累加的结果右移W位
4.3 过采样局限性
1、转换速度降低:增加的分辨率位数越高,所需要的过采样时间越多,降低工作效率
2、噪声前提:若信号中的随机噪声过少,则过采样所带来的精度提升效果会显著降低
3、物理极限:过采样带来的精度提升有限,在上限附近继续增加过采样率带来的精度提升极其有限

浙公网安备 33010602011771号