1、ADC简介
ADC支持多达14位的模拟数字转换与高达12位的有效位数。ADC包括一个达8个独立配置通道的模拟多路转换器,和一个参考电压发生器。转换结果通过DMA写入存储器。还具有若干运行模式。
ADC主要特性如下:
1)、可在有效分辨率7—12字节中选择设置;
2)、8个独立输入通道,可接受单端或差分信号;
3)、参考电压可选为内部,外部单端,外部差分,或AVDD5;
4)、产生中断请求;
5)、转换结束时的DMA触发;
6)、温度传感器输入;
7)、电池测量功能。
2、ADC操作
本节描述ADC的一般设置和操作,同时也描述了可以由CPU访问的ADC控制和状态寄存器的使用。
2.1、ADC输入
P0引脚上的信号可以作为ADC输入来使用。在下面,这些引脚叫做AIN0—AIN7引脚,输入脚AIN0—AIN7与ADC连接。
输入脚可配置成单端或差动输入。如选择差动输入,包含成对输入AIN0-AIN1,AIN2-AIN3,AIN4-AIN5和AIN6-AIN7;注意这些引脚既不能加载负电压,也不能加载大于VDD的电压。在差动模式中,成对脚转换是不同的。
除了输入脚AIN0-AIN7外,片上的温度传感器也可以用来作为ADC温度测量的输入。如要实现这个功能,需设置寄存器TR0.ADCTM和ATEST.ATESTCTRL。
也可以选择AVDD5/3电压作为一个ADC输入。这种输入允许执行,如应用中的电池测量功能。注意,这种参考不能依靠于电池电压,如AVDD5电压不能被用来做参考值。
单端输入AIN0至AIN7可代表通道号0至7,通道号8至11分别代表差动输入AIN0-AIN1,AIN2-AIN3,AIN4-AIN5,AIN6-AIN7;通道12表示GND,通道13表示温度传感器,通道15表示AVDD5/3。这些值在ADCCON2.SCH和ADCCON3.SCH中设置。
2.2、ADC序列转换
无需CPU的参与,ADC能够完成一个序列的转换,并通过DMA把结果写入内存。
寄存器APCFG影响转换序列,来自I/O引脚的8位模拟输入不一定是程序设置的模拟输入。如某一通道是序列的一部分,但在APCFG中相应模拟输入是禁止的,那此通道将被跳过。当使用差动输入时,两个输入脚在APCFG寄存器中必须被设置成模拟输入。
ADCCON2.SCH用来定义ADC输入的转换序列。如ADCCON2.SCH被设为小于8,转换序列包含一个通道(从0到ADCCON2.SCH中设置的通道号),当ADCCON2.SCH值设为8至12时,序列是差动输入,从通道8至程序设置的通道号;当大于12时,序列包含只选择的通道。
2.3、单个ADC转换
除了序列转换外,ADC可以通过编程执行单个转换。通过写入ADCCON3寄存器可以触发一个转换,转换立即启动,除非一个转换序列正在进行中,这种情况下,当序列完成后,马上执行单个转换。
2.4、ADC操作模式
本节描述操作模式和初始转换。
ADC有三个控制寄存器:ADCCON1,ADCCON2,和ADCCON3。这些寄存器被用来配置ADC和报告状态。
ADCCON1.EOC是状态位,当转换结束时设高电平,当读取ADCH时低电平。
ADCCON1.ST位用来启动序列转换的,当这位设高电平、ADCCON1.STSEL是11且当前无转换运行时序列启动开始。当序列转换结束时,这位自动清除为低电平。
ADCCON1.STSEL位用来选择哪个事件将启动一个新的序列转换。此项选择有:外部引脚P2.0上升沿事件,之前序列的结束事件,定时器通道0比较事件,或ADCCON1.ST设1事件。
ADCCON2寄存器控制序列转换是如何执行的。
ADCCON2.SREF用来选择参考电压。参考电压只能在没有转换运行的时候修改。
ADCCON2.SDIV用来选择抽取率(并因此也设置了分辨率和完成一个转换所需的时间,或样本率)。抽取率只能在没有转换运行时修改。
转换序列的最后一个通道由ADCCON2.SCH位选择。
ADCCON3寄存器控制单个转换的通道号,参考电压和抽取率。在ADCCON3寄存器被写入或有序列转换运行结束时,单个转换将立即执行。该寄存器的编码和ADCCON2是完全一样的。
2.5、ADC转换结果
数字转换结果以2的补码形式表示。
对于单端配置,转换结果预期是正的,这是由于输入信号和地之间的差别,这总是正信号(Vconv=Vinp-Vinn,这里Vinn=0V),当输入信号等于VREF时达到最大转换结果,VREF是选择的参考电压。
对于差动配置,两脚的输入信号不同,结果可能是负的;当采样率为512,模拟输入Vconv=VREF时,12MSB的数字转换结果为2047,当模拟输入等于-VREF时,转换结果为-2048。
当ADCCON1.EOC设置为1时,放在ADCH和ADCL中的数字转换结果是有效的。注意:转换结果总是放在ADCH和ADCL联合寄存器的MSB section中。
通过读ADCCON2.SCH位,知道正在转换的是哪个通道,ADCL和ADCH中的结果通常适用于以前的转换。如转换序列已结束,ADCCON2.SCH将有一个大于最后通道数一个以上的值,但如最后写入ADCCON2.SCH中的通道数是12或更大,读回的是相同的值。
2.6、ADC参考电压
模数转换的参考电压可选择于内部产生电压,AVDD5脚电压,应用于AIN7输入脚的外部电压,或应用于AIN6-AIN7输入的差动电压。
转换结果的准确度依靠于参考电压的稳定性和噪声度。Offset from the wanted voltage introduces a gain error in the ADC proportional to the ratio of the wanted voltage and the actual voltage. Noise on the reference must be lower than quantization noise of the ADC to ensure the specified SNR is achieved.
2.7、ADC转换时间
ADC只能运行于32MHZ XOSC和系统时钟不能被用户分频。实际上ADC的4MHZ采样频率由内部固定分配的。执行一个转换的要求时间依靠于被选择的采样率。一般上,转换时间由以下公式所得:Tconv=(decimation rate+16)*0.25us.
2.8、ADC中断
The ADC generates an interrupt when a single conversion triggered by writing to ADCCON3 has completed.No interrupt is generated when a conversion from the sequence is completed.
2.9、ADC DMA触发
每完成一个序列转换,ADC将产生一个DMA触发。单独转换完成不产生DMA触发。
在ADCCON2.SCH中设置头8个通道,每个通道都有一个DMA触发。当通道转换中准备好一个采样时,将激活一个DMA触发。DMA触发命名为ADC_CHsd,s是单端通道,d是差动通道。
另外,当ADC序列转换通道中准备好一个新数据时,一个DMA触发(ADC_CHALL)将激活。
2.10、ADC寄存器
ADCL\ADCH ADC数据低字节
端口 | Bit位 | 名称 | 初始化 | 读/写 | 描述 |
ADCL | 7:2 | ADC[5:0] | 000000 | R | ADC转换结果的Least-significant部分 |
1:0 | -- | 00 | R0 | 没使用,读取总是0 | |
ADCH | 7:0 | ADC[13:6] | 0X00 | R | ADC转换结果的Most-significant部分 |
ADCCON1 ADC控制器1
端口 | Bit位 | 名称 | 初始化 | 读/写 | 描述 |
ADCCON1 | 7 | EOC | 0 | R/H0 | 转换是否结束。当ADCH被读取后清空。当前一条数据读取之前一个新转换完成,EOC仍保持高位。 0:转换未完成 1:转换已完成 |
6 | ST | 0 |
| 转换启动。直到转换完成,读取才是1 0:进展中无转换 1:如ADCCON1.STSEL=11并无序列运行时启动一个序列转换。 | |
5:4 | STSEL[1:0] | 11 | R/W1 | 启动选择。选择该事件,将启动一个新的转换序列。 00:P2.0上外部触发 01:全速,不等待触发器 10:定时器1通道0比较事件 11:ADCCON1.ST=1 | |
3:2 | RCTRL[1:0] | 00 | R/W | 控制16位随机发生器。当写01时,操作完成后自动退回00。 00:正常运行。(13x unrolling) 01:LFSR时钟一次(13x unrolling) 10:保留 11:停止。随机数发生器关闭。 | |
1:0 | -- | 11 | R/W | 保留,总是设置为11 |
ADCCON2 ADC控制器2
端口 | Bit位 | 名称 | 初始化 | 读/写 | 描述 |
ADCCON1 | 7:6 | SREF[1:0] | 00 | R/W | 选择用于序列转换的参考电压 00:内部参考 01:AIN7引脚上的外部参考电压 10:AVDD5引脚 11:AIN6-AIN7差动输入上的外部参考 |
5:4 | SDIV[1:0] | 01 | R/W | 设置序列转换通道抽取率,抽取率也决定完成转换的需求时间和分辨率。 00:64抽取率(7位分辨率) 01:128抽取率(9位分辨率) 10:256抽取率(10位分辨率) 11:512抽取率(12位分辨率) | |
3:0 | SCH[3:0] | 0000 | R/W | 序列通道选择。选择结束序列。序列即可以来自AIN0至AIN7(SCH<=7)也可以来自差动输入AIN0-AIN1至AIN6-AIN7(8<=SCH<=11)。其他设置,仅用于一个转换完成。 当读取时,这些位指示正在转换的是哪个通道数。 0000:AIN0 0001:AIN1 0010:AIN2 0011:AIN3 0100:AIN4 0101:AIN5 0110:AIN6 0111:AIN7 1000:AIN0-AIN1 1001:AIN2-AIN3 1010:AIN4-AIN5 1011:AIN6-AIN7 1100:GND 1101:保留 1110:温度传感器 1111:VDD/3 |
ADCCON3 ADC控制器3
端口 | Bit位 | 名称 | 初始化 | 读/写 | 描述 |
ADCCON3 | 7:6 | EREF[1:0] | 00 | R/W | 选择用于额外转换的参考电压 00:内部参考 01:AIN7引脚上的外部参考电压 10:AVDD5引脚 11:AIN6-AIN7差动输入上的外部参考 |
5:4 | EDIV[1:0] | 01 | R/W | 设置额外转换通道抽取率,抽取率也决定完成转换的需求时间和分辨率。 00:64抽取率(7位分辨率) 01:128抽取率(9位分辨率) 10:256抽取率(10位分辨率) 11:512抽取率(12位分辨率) | |
3:0 | SCH[3:0] | 0000 | R/W | 单独通道选择。选择当写入ADCCON3产生触发的单独转换通道数,当单独转换完成后,此位自动清除。 0000:AIN0 0001:AIN1 0010:AIN2 0011:AIN3 0100:AIN4 0101:AIN5 0110:AIN6 0111:AIN7 1000:AIN0-AIN1 1001:AIN2-AIN3 1010:AIN4-AIN5 1011:AIN6-AIN7 1100:GND 1101:保留 1110:温度传感器 1111:VDD/3 |
TR0 测试寄存器0
端口 | Bit位 | 名称 | 初始化 | 读/写 | 描述 |
TR0 | 7:1 | -- | 0000000 | R0 | 保留,write as 0 |
0 | ACTM | 0 | R/W | 设1连接温度传感器和SOC_ADC。 |
联系客服