理论教育 STM32单片机ADC工作模式实践

STM32单片机ADC工作模式实践

时间:2023-11-09 理论教育 版权反馈
【摘要】:为了适应不同场合的转换,ADC有多种工作模式。图4.25ADC中的数据对齐注入组通道转换的数据值已经减去了在ADC_JOFRx寄存器中定义的偏移量,因此结果可以是一个负值。

STM32单片机ADC工作模式实践

为了适应不同场合的转换,ADC有多种工作模式。

1.单次转换模式

单次转换模式下,ADC只执行一次转换。该模式既可通过设置ADC_CR2寄存器的ADON位(只适用于规则通道)启动,也可通过外部触发启动(适用于规则通道或注入通道),这时CONT位为0。

如果一个规则通道被转换:

①转换数据被储存在16位ADC_DR寄存器中。

②EOC(转换结束)标志被设置。

③如果设置了EOCIE,则产生中断。

如果一个注入通道被转换:

①转换数据被储存在16位的ADC_DRJ1寄存器中。

②JEOC(注入转换结束)标志被设置。

③如果设置了JEOCIE位,则产生中断。然后ADC停止。

2.连续转换模式

在连续转换模式中,当前面ADC转换一结束马上就启动另一次转换。此模式可通过外部触发启动或通过设置ADC_CR2寄存器上的ADON位启动,此时CONT位是1。

如果一个规则通道被转换:

①转换数据被储存在16位的ADC_DR寄存器中。

②EOC(转换结束)标志被设置。

③如果设置了EOCIE,则产生中断。

如果一个注入通道被转换:

①转换数据被储存在16位的ADC_DRJ1寄存器中。

②JEOC(注入转换结束)标志被设置。

③如果设置了JEOCIE位,则产生中断。

3.扫描模式

扫描模式用来扫描一组模拟通道,可通过设置ADC_CR1寄存器的SCAN位来选择。一旦这个位被设置,ADC扫描所有被ADC_SQRX寄存器(对规则通道)或DC_JSQR(对注入通道)选中的所有通道。在每个组的每个通道上执行单次转换。在每个转换结束时,同一组的下一个通道被自动转换。如果设置了CONT位,转换不会在选择组的最后一个通道上停止,而是再次从选择组的第一个通道继续转换。

如果设置了DMA位,在每次EOC后,DMA控制器把规则组通道的转换数据传输到SRAM中。而注入通道转换的数据总是存储在ADC_JDRx寄存器中。

4.间断模式

(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。

注意事项:(www.daowen.com)

①当以间断模式转换一个规则组时,转换序列结束后不自动从头开始。

②当所有子组被转换完成,下一次触发启动第一个子组的转换。在上面的例子中,第四次触发重新转换第一子组的通道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被转换。

注意事项:

①当完成所有注入通道转换,下个触发启动第一个注入通道的转换。在上述例子中,第四个触发重新转换第一个注入通道1。

②不能同时使用自动注入和间断模式。

③必须避免同时为规则和注入组设置间断模式。间断模式只能作用于一组转换。

5.ADC时钟配置

ADC的时钟不能超过14M,否则将导致结果准确度下降。时钟配置可由下述函数来实现。

void RCC_ADCCLKConfig(uint32_t RCC_PCLK6);//系统时钟72MHz

输入参数范围:

STM32的ADC最大的转换速率为1MHz,也就是转换时间为1μs(在ADCCLK=14M,采样周期为1.5个ADC时钟下得到)。

6.ADC的可编程的通道采样时间

ADC使用若干个ADC_CLK周期对输入电压采样,采样周期数目可以通过DC_SMPR1和ADC_SMPR2寄存器中的SMP[2:0]位更改。每个通道可以分别用不同的时间采样。

总转换时间如下式计算:

TCONV=采样时间+12.5个周期

例如:当ADCCLK=14MHz,采样时间为1.5周期

TCONV=1.5+12.5=14周期=1μs

常见的周期有:1.5周期、7.5周期、13.5周期、28.5周期、41.5周期、55.5周期、71.5周期、239.5周期。

7.数据对齐

ADC_CR2寄存器中的ALIGN位选择转换后数据储存的对齐方式。数据可以左对齐或右对齐,如图4.25所示。

图4.25 ADC中的数据对齐

注入组通道转换的数据值已经减去了在ADC_JOFRx寄存器中定义的偏移量,因此结果可以是一个负值。SEXT位是扩展的符号值。对于规则组通道,不须减去偏移值,因此只有12个位有效。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈