文章目录
一、ADC的特性与结构(了解)
按照转换过程的不同,ADC可以分为逐次逼近型、双积分型和电压-频率变换型3种。
双击分型ADC,一般精度高;对周期变化的干扰信号积分为零,因此抗干扰性好;价格便宜,但转换速度慢。逐次逼近型ADC,在转换速度上同双积分型ADC相比要快得多,精度较高(12位及12位以上),价格较高。电压-频率变换型ADC,突出的优点是高精度,其分辨率可达16位以上;价格便宜,但转换速度不高。
STM32所带的12位ADC是一种逐次逼近型模拟数字转换器,它有多达18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器种,STM32的ADC主要特性如下:
● 12位分辨率
● 转换结束、注入转换结束和发生模拟看门狗事件时产生中断
● 单次和连续转换模式
● 从通道0到通道n的自动扫描模式
● 自校准
● 带内嵌数据一致性的数据对齐
● 采样间隔可以按通道分别编程
● 规则转换和注入转换均有外部触发选项
● 间断模式
● 双重模式(带2个或以上ADC的器件)
● ADC转换时间: (与型号有关)
─ STM32F103xx增强型产品:时钟为56MHz时为1μs(时钟为72MHz为1.17μs)
─ STM32F101xx基本型产品:时钟为28MHz时为1μs(时钟为36MHz为1.55μs)
─ STM32F102xxUSB型产品:时钟为48MHz时为1.2μs
─ STM32F105xx和STM32F107xx产品:时钟为56MHz时为1μs(时钟为72MHz为1.17μs)
● ADC供电要求:2.4V到3.6V
● ADC输入范围:VREF- ≤ VIN ≤ VREF+
● 规则通道转换期间有DMA请求产生。
STM32的ADC结构如下:
STM32的ADC主要组成部分包括模拟电源(VDDA、VSSA)、16个外部信号源(ADCx_IN0~ADCx_IN15),在大容量产品种x=1,2,3其他产品中x = 1,2和两个外部触发(EXTI_15、EXTI_11),此外有的型号的芯片还具有模拟参考电源(VREF+,VREF-),这些都具有相应的引脚与电源或外部设备连接。
二、ADC的工作模式(掌握)
2.1 开关、时钟及通道
1. ADC开关控制
通过设置ADC_CR2寄存器的ADON位可给ADC上电。当第一次设置ADON位时,它将ADC从断电状态下唤醒。 ADC上电延迟一段时间后(tSTAB),再次设置ADON位时开始进行转换。 通过清除ADON位可以停止转换,并将ADC置于断电模式。在这个模式中,ADC几乎不耗电(仅几个μA)。
2. ADC时钟
由时钟控制器提供的ADCCLK时钟和PCLK2(APB2时钟)同步。RCC控制器为ADC时钟提供一个专用的可编程预分频器。
3. 通道选择
有16个多路通道。可以把转换组织成两组:规则组和注入组。在任意多个通道上以任意顺序进
行的一系列转换构成成组转换。例如,可以如下顺序完成转换:通道3、通道8、通道2、通道2、通道0、通道2、通道2、通道15。
(1) 规则组由多达16个转换组成。规则通道和它们的转换顺序在ADC_SQRx寄存器中选择。规
则组中转换的总数应写入ADC_SQR1寄存器的L[3:0]位中。
(2) 注入组由多达4个转换组成。注入通道和它们的转换顺序在ADC_JSQR寄存器中选择。注入组里的转换总数目应写入ADC_JSQR寄存器的L[1:0]位中。
如果ADC_SQRx或ADC_JSQR寄存器在转换期间被更改,当前的转换被清除,一个新的启动脉冲将发送到ADC以转换新选择的组。 温度传感器/ VREFINT内部通道
温度传感器和通道ADC1_IN16相连接,内部参照电压VREFINT和ADC1_IN17相连接。可以按注入或规则通道对这两个内部通道进行转换。
2.2 模式控制
1. 单次转换模式和连续转换模式
单次转换模式下,ADC只执行一次转换。该模式下即可通过设置ADC_CR2寄存器的ADON位启动,也可通过外部触发启动,这时CONT位为0。
连续转换模式下,前面ADC转换结束后立即开启另一次转换。此模式可通过外部触发启动或通过设置ADC_CR2寄存器上的ADON位启动,此时CONT位是1。
每次转换完成后,如果是规则通道被转换,转换数据被存储在16位的ADC_DR寄存器中,EOC(转换结束)标志被设置,如果设置了EOCIE,则产生中断。如果是注入通道被转换,转换数据被存储在16位的ADC_DRJ1寄存器中,JEOC(注入转换结束)标志被设置,如果设置了JEOCIE位,则产生中断。
2. 扫描模式
次模式用来扫描一组模拟 通道。扫描模式可通过设置ADC_CR1寄存器的SCAN位来选择,一旦这个位置被置1,ADC扫描被ADC_SQRx寄存器(对规则通道)或ADC_JSQR(对注入通道)选中的所用通道。在每个组的每个通道上执行单次转换,在每个转换结束后,同一组的下一个通道被自动转换。如果设置了CONT位,转换不会再选择组的最后一个通道上停止,而是再次从选择组的第一个通道继续转换。如果设置了DMA位,再每次EOC后,DMA控制器把规则组通道的转换数据传输到SRAM中。而注入通道转换的数据总是存储再ADC_JDRx寄存器中。
3. 间断模式
(1)规则组间断模式。此模式通过设置ADC_CR1寄存器上的DISCEN位被激活。它可以用来执行一个短序列的n次转换(n ≤8),此转换是ADC_SQRx寄存器所选择的转换序列的一部分。数值n由ADC_CR1寄存器的DISCNUM[2:0]位给出。一个外部触发信号可以启动ADC_SQRx寄存器中描述的下一轮n次转换,直到此序列所有转换完成为止。总的序列长度由ADC_SQR1寄存器的L[3:0]定义。
举例:
n=3,被转换的通道 = 0、1、2、3、6、7、9、10
第一次触发:转换的序列为 0、1、2
第二次触发:转换的序列为 3、6、7
第三次触发:转换的序列为 9、10,并产生EOC事件
第四次触发:转换的序列 0、1、2
(2)注入组间断模式。此模式通过设置ADC_CR1寄存器的JDISCEN位激活。在一个外部触发事件后,该模式按通道顺序逐个转换ADC_JSQR寄存器中选择的序列。 一个外部触发信号可以启动ADC_JSQR寄存器选择的下一个通道序列的转换,直到序列中所有的转换完成为止。总的序列长度由ADC_JSQR寄存器的JL[1:0]位定义。
例子:
n=1,被转换的通道 = 1、2、3
第一次触发:通道1被转换
第二次触发:通道2被转换
第三次触发:通道3被转换,并且产生EOC和JEOC事件
第四次触发:通道1被转换
4. 双ADC模式
有2个或2个以上ADC模块的产品中,可以使用双ADC模式。在双ADC模式中,根据ADC1_CR1寄存器中DUALMOD[2:0]位所选的模式,转换的启动可以是ADC1主和ADC2从的交替触发或同步触发。当所有ADC1/ADC2注入通道都被转换时,产生JEOC中断。
2.3 中断和DMA
1. 中断
规则组和注入组转换结束时能产生中断,当模拟看门狗状态为被设置1时也能产生中断。它们都能有独立的中断使能位。
2. DMA请求
因此规则通道转换的值存储在一个仅有的数据寄存器中,所以当转换多个规则通道时需要使用DMA,这可以避免丢失已经存储在ADC_DR寄存器中的数据。只有规则通道的转换结束才产生DMA请求,并将转换的数据从ADC_DR寄存器传输到用户指定的目的地址。