25.3
ADC扫描模式
在ADC单元0中有多达13个模拟输入通道,而在ADC 单元1中有多达16个模拟输入通道,两个ADC单元加起来总共就拥有了29个ADC通道,但是实际上ADC 单元0和ADC单元1分别有3个通道只能连接到相同的引脚,所以实际上能同时使用的通道数量为26个,加上还有内部的温度传感器输出等特殊通道。
这么多的ADC通道我们该如何使用它们呢?在这里我们引入“扫描模式”的概念,在使用ADC外设时,我们必须首先配置其扫描模式,使得ADC按照特定扫描模式的方式进行ADC转换。
ADC外设有三种扫描模式,分别为:单次扫描模式、连续扫描模式和组扫描模式。在FSP配置器中,用户可以为ADC模块设置为三种扫描模式当中的其中一种,如下图所示。

点击查看大图
单次扫描模式:在单次扫描下,每一次触发将扫描一个或多个指定通道。
连续扫描模式:在连续扫描下,首先需要一次触发,然后一个或多个指定的通道会被重复连续进行扫描,直到软件调用函数R_ADC_ScanStop()停止扫描。
分组扫描模式:将所选择的模拟输入通道分为A组和B组,然后按组对所选择的模拟输入通道进行一次A/D转换。A、B组可独立选择扫描启动条件,可独立启动A、B组的A/D转换。
在每种模式中,模拟通道按通道数的升序进行转换,然后扫描温度传感器和电压传感器(如果它们也被勾选了的话)。每一种扫描模式都有着它的优点和缺点,但具体使用什么模式进行ADC转换,就需要通过我们的项目的需求需要什么样的效果来决定。
25.3.1
单次扫描模式
在单次扫描模式转换期间,我们可以通过ADST为来判断ADC是否处在工作状态,在ADC转换的期间ADST为将一直保持为1,当所有选定通道的ADST 转换完成时,将自动设置为0。然后ADC将进入一个等待状态。
当ADCSR.ADST位通过软件触发器、同步触发器输入(ELC)和异步触发器输入被置1的时候,ADC转换开始。对在ADANSA0和ADANSA1寄存器中选择的ANn通道进行A/D转换,从编号最小的n的通道开始。
每当单个信道的A/D转换完成时,A/D转换结果都被存储在关联的A/D数据寄存器(ADDRy)中。
当所有选定通道的A/D转换完成时,将生成一个ADC12i_ADI(i=0,1)中断请求。
25.3.2
连续扫描模式
在连续扫描模式下,对指定信道的模拟输入重复执行A/D转换。这里的ADCSR.ADST位不会自动清除,只要ADCSR.ADST位保持1时就会一直的重复步骤2、步骤3、步骤4,直到ADCSR.ADST位通过软件被置0时ADC单元转换才会停止,之后ADC单元进入等待状态。
当ADCSR.ADST位通过软件触发器、同步触发器输入(ELC)和异步触发器输入被置1的时候,ADC转换开始。对在ADANSA0和ADANSA1寄存器中选择的ANn通道进行A/D转换,从编号最小的n的通道开始。
每当单个信道的A/D转换完成时,A/D转换结果都被存储在关联的A/D数据寄存器(ADDRy)中。
当所有选定通道的A/D转换完成时,将生成一个ADC12i_ADI(i=0,1)中断请求。
对在ADANSA0和ADANSA1寄存器中选择的ANn通道进行A/D转换,从编号最小的n的通道开始。
25.3.3
组扫描模式
在分组扫描模式下,应用程序将通道分配给两个组:组A和组B当中的一个。可以为这些组分配不同的启动触发器,分别选择A、B两组的开始扫描条件,当接收到该组的指定ELC启动触发器时,转换开始。并且组A可以设置为优先于组B,当A组优先于B组时,A组触发器将暂停正在进行的B组扫描。
我们以ELC为例子:使用GPT作为A组的触发源,并使用A组作为B组的触发源。
当ELC0上的GPT触发ELC_ADC(A组)时,A组的ADC开始转换。
当组A扫描完成时,将生成一个ADC12i_ADI(i=0,1)中断。
B组的扫描由ELC_ADC(A组)开始。
当B组扫描完成时,如果ADCSR.GBADIE位为1时将生成一个ADC12i_GBADI(i=0,1)中断。
25.4
ADC转换时间
25.4.1
ADC时钟
当使用ADC时,ADC转换时钟(ADCLK)必须至少为1MHz。并且,在使用ADC时很多RA MCU一般也有PCLK比率限制。
RA6M5和RA4M2的AD转换时钟是由PCLKC经过分频产生,PCLKA和PCLKC(ADCLK)的分频比可以设置为1:1,2:1,4:1,8:1,1:2,1:4。当使用50 MHz时钟的时候12-bit AD转换时间为0.4μs。
RA2L1的AD转换时钟是由PCLKD经过分频产生,PCLKB和PCLKD(ADCLK)的分频比可以设置为1:1,1:2,1:4。在正常转换模式下,当使用64MHz 时钟的时候12-bit AD转换时间为0.7μs;在快速转换模式下,当使用48MHz时钟的时候12-bit AD转换时间为0.67μs。
25.4.2
采样时间
点击查看大图
扫描转换时间(tSCAN)包括:扫描开始时间(tD)、断开检测辅助处理时间(tDIS)*1、自诊断A/D转换处理时间(tDIAG和tDSD)*2、A/D转换处理时间(tCONV)、扫描结束时间(tED)。
A/D转换处理时间(tCONV)由输入采样时间(tSPL)和逐次逼近转换时间(tSAM)组成。
采样时间(tSPL)用于在A/D转换器中对采样和保持电路充电。如果由于模拟输入信号源的高阻抗而没有足够的采样时间,或者如果A/D转换时钟(ADCLK)很慢,可以使用ADSSTRn寄存器来调整采样时间。
由逐次逼近(tSAM)转换的时间如下:
12位精度需要13个ADCLK
状态10位精度需要11个ADCLK
状态8位精度需要9个ADCLK
选择通道数为n的单次描模式下的扫描转换时间(tSCAN)可确定为:

连续扫描模式下第一个周期的扫描转换时间为单次扫描减去tED的tSCAN。连续扫描模式下第二次及后续周期的扫描转换时间固定如下:
25.5
电压值转换
模拟电压经过ADC转换后,是一个12位的数字值,如果通过串口以16进制打印出来的话,可读性比较差,那么有时候我们就需要把数字电压转换成模拟电压,也可以跟实际的模拟电压(用万用表测)对比,看看转换是否准确。
一般在设计硬件原理图的时候会把ADC的输入电压范围设定在:0~3.3V。若设置ADC的分辨率是12位的,那么12位满量程对应的电压就是3.3V,12位满量程对应的数字值是:2^12,数值0对应的就是0V。假设转换后的数值为X,X对应的模拟电压为Y,那么会有这么一个等式成立:

因此在ADC转换完成之后,我们可以调用FSP库函数R_ADC_Read(),从ADC的数据寄存器里读出上述等式中X的值,从而再经过计算得出对应的电压值。
