《Dsp 的adc转换模块》由会员分享,可在线阅读,更多相关《Dsp 的adc转换模块(19页珍藏版)》请在金锄头文库上搜索。
1、Dsp 的adc转换模块 在现实世界中,许多量都是模拟量,例如电压、电流、温度、湿度、压力等信号;而在DAP等微控制器世界中,所有的量却都是数字量,那如何实现将现实世界的模拟量提供给DSP等微控制器呢?模/数转换器ADC模块就是连接现实世界和微控制器的桥梁,它可以将现实世界的模拟量转换成数字量,提供给控制器使用。本章将详细介绍X281x内部自带ADC模块的性能、特点及其工作方式,并从硬件和软件两方面的角度来探讨如何提高内部ADE二的采样精度。 13. 1 X281x内部的ADC模块 X281x内部的ADC模块是一个12位分辨率、具有流水线结构的模/数转换器,其结构框图如图13一I所示。从图13
2、一1可以很清楚地看到,X281x的ADC模块一共具有16个采样通道,分成两组:一组为ADCINA0ADCINA7;另一组为ADCINB0ADCINB70. A组的采样通道使用采样保持器A,也就是图中的S/ H-A;B组的采样通道使用采样保持器B,也就是 图中的S/ H-B。 虽然ADC模块具有多个输人通道,但是它内部只有1个转换器,也就是说同一时刻只能对1路输人信号进行转换。当有多路信号需要转换时,ADC模块通过前端模拟多路复用器Analog MUX的控制,在同一时刻,只允许1路信号输入到ADC的转换器中。 如图13-2所示,假设现在对ADCINA0 , ADCINA2 , ADCINA3、A
3、DCINA5这4路输人信号进行A/D转换,转换的顺序为ADCINA0 , ADCTNA3 , ADCINA2 , ADCINA5,则第1次Analog MUX中ADCINAO通道的开关闭合,ADCINAO信号输人至转换器中,转换的结果存放于结果寄存器ADCRESULTO中;第2次Analog MUX中ADCINA3通道的开关闭合,ADCINA3信号输人至转换器中,转换的结果存放于结果寄存器ADCRESUI.II中;第3次Analog MUX中ADCINA2通道的开关闭合,ADCINA2信号输人至转换器件,转换的结果存放于结果寄存器ADCRESULT2中;第4次Analog MUX中ATOCIN
4、A5通道的开关闭合,ADCINA5信号输人至转换器中,转换的结果存放于结果寄存器ADCRESUlT3中。至此,完成一个序列的转换。可见,同一时刻,ADC模块只能对1个通道的信号进行转换。 上面的例子中是对4个通道进行采样并转换,转换的顺序为ADCINAO , ADCINA3 , ADCINA2,ADCINAS,那ADC模块是如何来实现预定的转换顺序呢?换句话说,如何才能让ADC按照用户指定的顺序对各个通道进行采样并转换呢?如图13-2所示,ADC模块内部具有自动序列发生器,用户可以通过编程为序列发生器指定需要转换的通道顺序。这里,序列发生器中第1个通道为ADCINA0,然后是ADCINA3,A
5、DCINA2和A DCINA 5,一启动转换,ADC便按照序列发生器中通道的顺序对指定的输人信号进行转换。 从图13-1可以看到,X281x的ADC模块具有2个8状态的序列发生器:SEQ1和SEQ2。这2个序列发生器分别对应于2组采样通道:A组通道ADCINA0ADCINA7对应于序列发生器SEQI,而B组通道ADCINB0ADCINB7对应于序列发生器SEQ2。此时,ADC工作于2个独立的8通道模块。当ADC级联成一个16通道的模块时,SEQ1和SEQ2也级联成一个16状态的序列发生器SEQ。对于每个序列发生器,一旦指定的序列转换结束,已选择采样的通道值就会被保存到各个通道的结果寄存器中。对
6、应于16个信号输人通道,X281x的ADC模块总共有16个结果寄存器ADCRESULT0-ADCRESULT15. 13.1.1 ADC模块的特点 X281X内部自带ADC模块的特点如下 共有16个模拟量输人引脚,将这16个输人引脚分成了2组:A组的引脚为ADCINAOADCINA7,B组的引脚为ADGINB0-ADCINB7. 具有12位的ADC内核,内置有2个采样保持器S/H-A和S/ H-B。从前面的学习可以知道,引脚ADCINA0- ADCINA7对应于采样保持器S/H-A,引脚ADCINB0 -ADCINB7对应于采样保持器S/H-B. ADC模块的时钟频率最高可配置为25 MHz,
7、采样频率最高为12. 5 MSPS,也就是说每秒最高能完成12. 5个一百万次的采样。 Arc模块的自动序列发生器可以按2个独立的8状态序列发生器( SEQ1和SEQ2 )来运行,也可以按一个16状态的序列发生器(SEQ)来运行。不管是SEQ1 , SEQ2或者是级联后的SEQ,每个序列发生器都允许系统对同一个通道进行多次采样,也就是说允许用户执行过采样的算法。如图13一3所示,8状态的序列发生器SEQ1中先对通道ADCINA0连续采样3次,然后再对ADCINA1通道连续采样3次,最后对ADCINA2通道连续采样2次。以ADCINA0为例,3次采样结果的平均值肯定要比单次采样结果的精度来得高。
8、 A DC模拟输人的范围为03 V。值得注意的是,ADC采样端口的最高输人电压为3V,实际设计中,通常需要考虑到余量,因此一般输人最大值设计在3V的80%左右,也就是 5 V。如果输人的电压过高,如超过3 V,或者输人的电压为负电压,都会烧毁DSP,因此,通常需要将采样输人的信号先经过调理电路进行调整,使其输人电压范围在A DC正常工作范围之内。例如输人的电压值范围为O-X.X大于3v,则可以通过分压电路,使输人电压的最大值小于3V;或者输人的电压范围为一X -Y,则可以将电压整体抬高X,使其电压范围变为0 - (X十Y),然后再通过其他的方式,使得电压最大值小于3V。如果将调整前的信号称为原
9、始信号,而将调整后的信号称为调整信号,DSP采样得到的是调整信号的值,但是最后可以在DSP程序中通过原始信号和调整信号的关系来还原原始输人信号的值。 为了保险起见,在输人信号(如果经过调理电路,则为调整信号)进DSP的ADC端口时,最好加一个如图13一q所示的钳位电路。图中采用了一个双二极管,如英飞凌公司的BAT68 -04。当输人电压超过3. 3 V时,二极管D1导通,ADC输人引脚上的电平变为3. 3 V ;当输人电压为负电压时,二极管D2导通,ADC输人引脚上的电平变为0,因此这个电路能够将ADC输出引脚上的电平稳定在0 3. 3 V,从而保护了A D;输人端口。这里大家可能会有疑问,不
10、是说A/D端口的输人电压是03 V吗,怎么图13-4中设计的高电压是3. 3 V呢?这是从工程设计的实际情况出发,选择最容易获得并且接近的电压,因为nsP的工作电压就是3. 3 v和工.8v,所以选择3. 3 v . ADC模块对一个序列的通道开始转换必须需要有一个启动信号,或者说是一个触发信号。当启动信号到来时,相应的序列发生器就开始对其内部预先指定的通道进行转换。当ADC工作于独立的8状态序列发生器SEQ1,SEQ2和工作一个级联的16状态序列发生器时,启动ADC转换的方式稍有不同,具体如表所列。软件立即启动,是指通过程序对ADC控制寄存器ADCTRL2的第I3位,即St)C SEQ1位置
11、1,来立即启动ADC转换。EVA或者EVB的多种事件启动方式是指用通用定时器的周期匹配、比较匹配和下溢匹配这3个事件来启动ADC转换,而究竞采用哪个事件来启动ADC转换,取决于事件管理器寄存器UPT-C/3. 0 X 65 520 (13一1)式中,ADResult是结果寄存器中的数字量,Voltlnput是模拟电压输人值,ADCLC)是ADC转换的参考电平,实际使用时,通常将其与AGND连在一起,因此此时ADCL的值为O. 还有一种关系表达式,其结果是一样的,只是表达的方法不一样。由于ADC结果寄存器中的数字量位于高12位,低y位是无效的,那是不是可以将ADResult中的值先右移4位,然后
12、再进行计算。同样的,当输人的电压为v时,ADResult右移4位后,值为OxOFFF,也就是4 095。当输人的电压为。V时,结果寄存器的值依然为0。根据图13一6所示的线性转换关系,则: ( ADResult4) _ (Voltlnput一ADCLO)/3. 0 X 4 095 (13-2) 在实际应用中,通常都是通过读取ADC结果寄存器中的值,然后求得实际输人的模拟电压值。 下面来详细分析ADC模块的时钟ADCLK。图13一7中的CLKIN是指外部输人的时钟,这里也就是外部晶振所产生的时钟。假设外部晶振的频率为SCCLK Hz,通过前面的介绍可以知道,通常选用的是30 MHz的晶振。外部晶
13、振经过PLI_模块产生GPU时钟SY-SCLKUT,如果PL.T.模块的值为m,则有: SYSCLKUT=OSCGLK*m./ 2(。,!=0)SYSCLKUUT = USCCLK(m = 0) (13-3) 然后,CPU时钟信号经过高速时钟预定标器HISPCP之后,生成高速外设时钟H SP-CLK.假设HISPCP寄存器的值为n,则有: I-I SPCL.K-HSPCIK=SYSCLKOUT/2n(n!SYSCLKC)UT(n = 0)= 0) (13一4) 如果外设时钟控制寄存器PCLKCR的第3位,也就是位ADCENCLK置位,则HSPCLK输人到ADC模块:否则,HSPCLK不向ADC模块提供时钟,ADC也就不能正常工作。ADC控制寄存器ADCTRL3的第0-3位,也就是功能位ADCL.KPS,可以对H SPCLK进行分频。此外,ADC控制寄存器ADCTRLI的CPS位还可以提供一个2分频,因此,可以得到ADC模块的时钟ADCL.K为: ADCLK = HSPCLK/(CP5+1)(ADCLKPS=0)ADCI_K =i-iSPCLK2 X ADCLKPS X COPS+1)(ADCLKPS!= 0) (13一5) X2$lx的A DC时钟频率最高为25 MHz,因此在设置ADC的时钟ADCLK时,不能超过25 MHz。在设置完