目录
一、初识ADC
1.简介
ADC(Analog-to-Digital Converter,模拟/数字转换器)。它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。模拟看门狗特性允许应用程序检测输入电压是否超出用户定义的高/低阀值。ADC的输入时钟不得超过14MHz,它是由PCLK2经分频产生。
2.特性整理
补:
(1)采样间隔可以按通道分别编程。
(2)规则转换和注入转换均有外部触发选项。
(3)规则通道转换期间有DMA请求产生。
(4)转换结束、注入转换结束和发生模拟看门狗事件时产生中断。
(5)从通道0到通道n的自动扫描模式。
(6)单次和连续转换模式。
3.ADC特性参数介绍
(1)分辨率:表示ADC能辦别的最小模拟量,用二进制位数表示,如:8、10、12、16位等。
(2)转换时间 :表示完成一次A/D转换所需要的时间,转换时间越短,采样率就可以越高。
(3)精度(物理量的精准程度):最小刻度基础上叠加各种误差的参数,精度受ADC性能、温度和气压等影响。
(4)量化误差:用数字量近似表示模拟量,采用四舍五入原则,此过程产生的误差为量化误差。
4.常见ADC类型
(1)并联比较型
优点:转换速度快。
缺点:成本高、功耗高、分辨率低。
(2)逐次逼近型
优点:结构简单、功耗低。
缺点:转换速度较慢。
特点:分辨率和采样速度相互矛盾,分辨率越高,采样速度越低。
二、ADC相关寄存器
1.控制寄存器 1(ADC_CR1)
位19:16(DUALMOD[3:0] ):双模式选择。
位8(SCAN):扫描模式。(该位由软件设置和清除)
2.控制寄存器 2(ADC_CR2)
位22(SWSTART):开始转换规则通道。(由软件设置该位以启动转换,转换开始后硬件马上清除此位。该位用于启动一组规则通道的转换)
位20(EXTTRIG):规则通道的外部触发转换模式。(由软件设置和清除,用于开启或禁止可以启动规则通道组转换的外部触发事件。)
位19:17( EXTSEL[2:0] ):选择启动规则通道组转换的外部事件。
位15(JEXTTRIG):注入通道的外部触发转换模式。
位11(ALIGN):数据对齐。
位8(DMA):直接存储器访问模式。
位3(RSTCAL):复位校准。
位2(CAL):A/D校准。
位1(CONT):连续转换。
位0(ADON):开 / 关 A/D转换器。(当该位为 ‘0’时,写入 ‘1’将把ADC从断电模式下唤醒。当该位为 ‘1’时,写入 ‘1’将启动转换。)
3.采样时间寄存器 1(ADC_SMPR1)
4.采样时间寄存器 2(ADC_SMPR2)
5.规则序列寄存器 1(ADC_SQR1)
6.规则序列寄存器 2(ADC_SQR2)
7.规则序列寄存器 3(ADC_SQR3)
8.规则数据寄存器(ADC_DR)
9.注入序列寄存器(ADC_JSQR)
三、ADC结构
1.结构框图
2.输入通道
3.转换序列
A/D转换被组织为两组:规则组(常规转换组)和注入组(注入转换组)。规则组最多可以有16个转换,注入组最多有4个转换。
(1)规则序列寄存器控制关系
(2)注入序列寄存器控制关系
注入序列的转换顺序是从JSQx[4:0]( x=4 - JL[1:0] )开始。
4.触发源
触发转换的方法有两种:
(1) ADON位触发转换(仅限F1系列):当ADC_CR2寄存器的ADON位为1时,再单独给ADON位写1,只能启动规则组转换。
(2) 外部事件触发转换:分为规则组外部触发和注入组外部触发。
①规则组外部触发
②注入组外部触发
5.转换时间
(1)ADC时钟设置
(2)设置转换时间
采样时间 可通过 SMPx[2:0]位设置,x=0~17
例:ADC时钟频率为12MHz时,ADC最短的转换时间是多少?
6.数据寄存器
由 ADCx_CR2寄存器ALIGN位 设置数据对齐方式( 右对齐或者左对齐 )
7.中断
规则和注入组转换结束时能产生中断,当模拟看门狗状态位被设置时也能产生中断。它们都有独立的中断使能位。
三、DMA功能
1.DMA请求(只适用于规则组)
规则组每个通道转换结束后,除了可以产生中断外,还可以产生DMA请求,我们利用DMA及时把转换好的数据传输到指定的内存里,防止数据被覆盖。
2.单次转换模式
ADC只执行一次转换。该模式既可通过设置ADC_CR2寄存器的ADON位(只适用于规则通道)启动,也可通过外部触发启动(适用于规则通道或注入通道),这时CONT位为0。
(1)规则组
转换结果被储存在16位ADC_DR寄存器中,EOC(转换结束)标志位被置1。如果设置了EOCIE位,则产生中断。然后ADC停止。
(2)注入组
转换结果被储存在16位的ADC_DRJx寄存器中,JEOC(转换结束)标志位被置1。如果设置了JEOCIE位,则产生中断。然后ADC停止。
3.连续转换模式(只有规则组才能触发该模式)
当前面ADC转换一结束马上就启动另一次转换。此模式可通过外部触发启动或通过设置ADC_CR2寄存器上的ADON位启动,此时CONT位是1。
(1)规则组
转换数据被储存在16位的ADC_DR寄存器中,EOC(转换结束)标志被置1。如果设置了 ,则产生中断。
(2)注入组
转换数据被储存在16位的ADC_DRJx寄存器中,JEOC(注入转换结束)标志被置1。如果设置了JEOCIE位,则产生中断。
自动注入:将 JAUTO位 置 1。
4.扫描模式
此模式用来扫描一组模拟通道。扫描模式可通过设置ADC_CR1寄存器的SCAN位来选择。
当这个位被置1,ADC会扫描所有被ADC_SQRx寄存器(对规则通道)或ADC_JSQR(对注入通道)选中的所有通道。在每个组的每个通道上执行单次转换。在每个转换结束时,同一组的下一个通道被自动转换。
如果设置了 CONT位,转换不会在选择组的最后一个通道上停止,而是再次从选择组的第一个通道继续转换。
这个位被置 0,ADC只会对ADC_SQRx寄存器(对规则通道)或 ADC_JSQR(对注入通道)选中的第一个通道进行转换。
5.不同组合的使用
比较少用的模式:不连续采样模式(间断模式),只适用在扫描模式下。
四、ADC配置步骤(单通道ADC采集)
1. 配置ADC工作参数、ADC校准 :HAL_ADC_Init()、 HAL_ADCEx_Calibration_Start()
2. ADC MSP初始化:HAL_ADC_Msplnit()( 配置NVIC、CLOCK、GPIO等)
3. 配置ADC相应通道相关参数:HAL_ADC_ConfigChannel()
4. 启动A/D转换:HAL_ADC_Start()
5. 等待规则通道转换完成:HAL_ADC_PollForConversion() (等待规则通道转换完成)
6. 获取规则通道A/D转换结果:HAL_ADC_GetValue()
可以参考这篇文章:
嵌入式——模拟/数字转换器(ADC)补充