原创 STM32L系列ADC应用注意

2020-7-1 11:03 4891 28 3 分类: MCU/ 嵌入式 文集: STM32应用
ADC电压调整器:
1. ADC电压调整器(ADVREGEN):该调整器是通过内部电压参考源加缓冲器实现的,MCU正常运行模式(运行或睡眠模式)时缓冲器总是开启的,低功耗模式(低功耗运行、低功耗睡眠或停止模式)下电压参考源会被关闭。因此低功耗运行模式下ADC操作流程:关闭ADC->关闭调整器->进入低功耗运行模式->退出低功耗运行模式->确认REGLPF=0->开启调整器->开启ADC->等待ADRDY=1->清除ADRDY。
2. ADC电压调整器开启方式:写ADVREGEN=1或写ADCAL=1或ADEN=1
3. ADC电压调整器关闭方式:确保ADC已关闭(ADEN=0),写ADVREGEN=0

ADC参考电压源:
该参考电压源连接在ADC IN17通道,出厂校准时,VDDA被设定在3.3V,因此实际的VDDA值可以通过测试该参考电压源的方式来进行校准:VDDA = 3V * VREFINT_CAL / VREFINT_DATA(其中VREFINT_CAL为出厂时的校准值,VREFINT_DATA为通道17读到的值)
通道电压=VDDA * ADC_DATA / FULL_SCALE(12位分辨率时,FULL_SCALE=2^12 - 1 = 4095)

ADC校准:
通过写ADCAL=1(确保ADEN=0)开启校准,等待ADCAL=0(或者EOCAL=1),校准完成,校准值可通过ADC_DR[6:0]获得。ADC关闭或电压调整器关闭不会导致校准值丢失,只有在MCU进入STANDBY模式(ADC电源被移除)时或ADC执行外围复位时才会被清除。当VDDA发生改变时,建议重新做一次校准。ADC校准值可以通过软件读取和写入。

ADC开关控制:
开启:清除ADRDY标志位,写入ADEN=1开启ADC,ADRDY标志表示ADC已经被开启,可以执行进一步的操作了(电压调整器未被开启的话也会被自动开启)
关闭:确保ADSTART=0(没有正在进行的转换),ADDIS=1关闭ADC,成功关闭后ADEN和ADDIS位都会被硬件自动清0,清除ADRDY标志位
注意:在自动关闭模式(AUTOFF=1)下,ADC开关是硬件自动控制的,此时ADRDY标志不会被置位

ADC时钟:
ADC模块有2路时钟可供选择,一路为异步时钟,另外一路为MCU外围同步时钟PCLK。当ADC时钟频率低于3.5MHz时,必须打开低频模式(ADC_CCR:LFMEN=1)

ADC配置:
1. 软件写入ADCAL(校准ADC)和ADEN(开启ADC)位时必须确保ADEN=0
2. 软件写入ADSTART(启动采样转换)和ADDIS(关闭ADC)位时必须确保ADEN=1,并且ADDIS=0(没有关闭ADC的请求发生)。ADC操作执行过程中,ADSTART位会持续为1,当ADSTART=0时,表示ADC处于空闲状态,此时可以重新进行ADC配置
3. 软件写入ADSTP(停止采样转换)位时必须确保ADCEN=1,且ADSTART=1、ADDIS=0(没有关闭ADC的请求发生)
注意:ADC对于以上操作没有硬件保护,任何违反规则的操作可能使ADC进入未定义状态

ADC转换时间:
ADC转换时间=ADC采样时间+12.5个ADC时钟周期(12位转换精度时)
假设ADC时钟为16M,采样时间为3.5个时钟周期,则转换时间为16个时钟周期,即1us

ADC单次转换(CONT=0):
对于配置有多个通道序列的情况下,每个通道转换完成后,转换数据会被存储到ADC_DR寄存器,EOF(end of conversion)标志会被置位;当所有通道都转换完成后,EOS(end of sequence)标志会被置位;然后ADC停止(当ADC由软件启动时,此时ADSTART=0;否则,ADSTART仍然保持为1,并在下个触发事件发生时立即启动采样转换),等待新的软件启动或触发启动

ADC连续转换(CONT=1):
同ADC单词转换,去别在于每一轮转换结束后,ADC立即启动新一轮转换(ADSTART始终为1)。

ADC断续转换(DISCEN=1):
每个软件或硬件触发事件仅启动一个通道的转换,该通道转换完成后置位EOC标志;当所有通道转换完成后,EOS标志会被置位;然后接下来的触发事件,ADC重新从第一个通道开始新一轮的转换操作
注意:禁止将连续转换(CONT)标志和断续转换(DISCEN)标志同时置1

停止ADC转换(ADSTP):
通过写入ADC_CR:ADSTOP=1,软件能够停止正在进行的转换操作,这将复位ADC并使ADC处于空闲状态。
在执行ADSTOP=1写入后,软件可通过读取ADSTOP位确定停止操作是否完成,当该位为0时,表示ADC已停止,此时ADSTART位也会被清0

ADC转换状态标志位:
EOC标志:只要有新的转换数据写入ADC_DR,该标志便会被置位。该位可以通过软件清除或者通过读取ADC_DR寄存器清除
EOSMP标志:采样完成后该标志会被置位。该标志可用于进行转换同步(由于采样结束到转换结束间的时间非常短,建议采用轮询方式或WFE指令,而不是采用中断或WFI指令)
EOS标志:所有通道序列转换完成后,该标志置位
OVR标志:当上次转换的数据没有被读出,而新的转换已经结束时,该标志会被置位(即新的转换完成同时EOC标志等于1时)。ADC发生溢出后,还会继续保持运行。通过软件配置,可以选择在溢出发生时,是覆盖上一次的数据(OVRMOD=1)还是保持上一次的转换数据(OVRMOD=0)。
注意:当使用DMA方式读取数据时,DMAEN位必须被置1。如果DMA请求不能及时处理转换数据,发生溢出后,ADC停止产生DMA请求,新的转换数据将不会再被DMA进行传输。DMA只有在清除了OVR标志后才会再次启动传输。

DMA模式:
单次模式:每次新的转换数据产生后,ADC产生DMA请求;当所有字节传输完成后,ADC停止产生DMA请求(即使新的转换已再次启动)。当DMA传输完成后,ADC数据寄存器的内容会被冻结,任何接下来的转换数据会被丢弃,序列扫描也会被停止和复位。
环形模式:该模式下,DMA数据传输不会停止,数据会被循环存储

ADC低功耗特性:
WAIT模式:当该模式位被置1时,每次转换结束后,只有ADC_DR寄存器被读取或者EOC标志被清除后,才会发起新的转换。这种模式可以使ADC的转换速度进行自动调整以适应系统速度(当转换正在进行时或者ADC正在等待时,硬件触发信号会被忽略)
AUTOFF模式:当该模式位被置位时,当不需要进行转换时,ADC会被自动关闭;当需要进行转换时,ADC会自动唤醒,启动时间也会被自动插入。该模式可以结合WAIT模式以适应低功耗应用。

ADC过采样:
过采样功能可以进行数据平均,降低数据率,改善信噪比(SNR),简单滤波。过采样率N可以配置为2X~256X,除数因子M由8位的右移位(除数=2^M)表示。过采样模式下,转换时间将被延长N倍。EOC标志会在N次转换后(过采样结果产生时)被置位,EOCSEQ在所有通道的过采样结果产生后被置位。
可结合过采样的ADC操作:单次或连续转换模式、软件或硬件触发启动、ADC停止转换、CPU或DMA读取数据、低功耗模式、可编程的分辨率

作者: RLink, 来源:面包板社区

链接: https://mbb.eet-china.com/blog/uid-me-3918760.html

版权声明:本文为博主原创,未经本人允许,禁止转载!

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
28
关闭 站长推荐上一条 /3 下一条