- ADC硬件电路
ADC的硬件电路主要由输入电路,触发信号电路,数据寄存器电路,中断电路还有数据总线这及部分构成。
输入信号通道ADC的通道输入到转换器,每个ADC有多达18个通道,可测量16个外部和2个内部信号源,温度传感器和通道ADC1_IN16相连接,内部参照电压VREFINT和ADC1_IN17相连接。可以按注入或规则通道对这两个内部通道进行转换。 温度传感器和VREFINT只能出现在主ADC1中。
其中触发限号电路又可以分为ADC1,ADC2构成的一部分和ADC3构成的一部分构成,主要就分为图中2、3两部分,ADC1和ADC2的触发信号是相同的,但是ADC3的触发信号与ADC1,ADC2不同,所以可以将他们两个分开。
模拟至数字转换器电路和数据寄存器电路可以看成同一个电路,其中又可以分为规则组和注入组,注入组有4个数据寄存器,也就是可以同时转换4个输入信号,而规则组只有1个数据寄存器,也就是在同一时间,规则组只能转换一个数据,所以在所以规则组转换模拟信号时,要么只能转换一个输入通道的信号,要么就是配合DMA实现多通道的数据采样。
还有ADC的中断,据转换结束后,可以产生中断,中断分为三种:规则通道转换结束中断,注入转换通道转换结束中断,模拟看门狗中断。其中转换结束中断很好理解,跟我们平时接触的中断一样,有相应的中断标志位和中断使能位,我们还可以根据中断类型写相应配套的中断服务程序。
最后就是还有一个数据总线,这个数据总线可以数据与DMA相连,实现DMA与ADC的相互配合,达到多通道ADC采样的功能。
- ADC常用的一些功能
- 单次转换与连续转换:
单次转换模式下,ADC只执行一次转换。一次转换结束后数据保存在ADC_DR 寄存器中,转换结束标志EOC置位,如果开启中断会产生中断。
在连续转换模式中,当前面ADC转换一结束马上就启动另一次转换。一次转换结束后数据保存在ADC_DR 寄存器中,转换结束标志EOC置位,如果开启中断会产生中断。
- 扫描模式:
扫描模式就是最后通道转换完成后,ADC不会停在最后一个通道,而是会又从第一个通道开始执行转换。如果设置了DMA位,在每次EOC后,DMA控制器把规则组通道的转换数据传输到SRAM中。
一般在转换多通道ADC时我们会常用连续模式+扫描模式。
- 间断模式
间断模式就是可以在转换过程中中间隔几个数据再转换,例如间断模式配置为2,那就是每隔2个序列再转换,第一次转换1号数据,那第二次就转换4号数据,第三次就转换7号数据。
- 数据对齐
由于ADC的DR寄存器是16位寄存器。但是MCU的ADC只是12位的ADC,所以再处理数据我们需要对数据的对齐方式进行处理,有左对齐和右对齐
左对齐
右对齐
一般我们选择右对齐,右对齐的数据可以直接使用,左对齐的数据还需要经过处理后才能使用。
3、常用寄存器
(1)ADC_SR状态寄存器
状态寄存器一般只需要关注EOC位就可以了,EOC为规则组的结束标志位,JEOC是注入组的结束标志位。每次转换结束EOC为都会置位,需要通过软件清除或者读取DR时自动清除。
(2)ADC_CR1控制寄存器:
CR1寄存器中一般只需要重点关注DISCEN规则组间断模式位,SCAN扫描模式位,EOCIE中断位就可以。
DISCEN位:可以设置规则组的间断模式,并且需要通过软件设置和清除。
SCAN位:设置扫描模式,通过软件设置和清除
EOCIE位:用于禁止和产生EOC中断
(3)ADC_CR2控制寄存器:
在CR2寄存器中,有很多ADC的重要配置位,ADC转换的开始控制位,触发源开启位,触发源选择位,数据对齐选择,DMA请求,校准位,连续转换位,ADC开启位。
(4)转换时间
转换时间寄存器有两个寄存器,并且某个寄存器都是32位,但是某个数据只需要3位,18个通道,就需要54位,需要两个寄存器。其中SMP17就代表通道17.
- ADC规则序列寄存器
ADC序列寄存器是配置ADC通道的序列的,当我们选择好ADC需要的通道后,需要对ADC的通道排序,确定通道的位置,就需要通过ADC序列寄存器进行配置,并且ADC的序列寄存器有三个ADC_SQR1,ADC_SQR2,ADC_SQR3,其中ADC_SQR1寄存器的20-23位为通道序列长度位,用来配置需要转换的ADC通道。其余的位但是相同的,用来配置ADC的通道的序列,例如把ADC1_SQR1的SQ13配置为2,则说明把ADC1的通道14放在序列的第2位。
- ADC_DR数据寄存器
4、单通道ADC采样
5、DMA+多通道ADC采样
ADC配置
DMA配置