\\"简简单单DSP\\"系列学习活动 - 第六期AD学习及使用 联系客服

发布时间 : 星期六 文章\\"简简单单DSP\\"系列学习活动 - 第六期AD学习及使用更新完毕开始阅读8e56a1781711cc7931b71644

“简简单单DSP”系列学习活动—第六期AD学习及使用

“简简单单DSP”系列学习活动——第六期AD学习及使用

2812的AD是一个12位的,实际只有一个AD转换器,但是有16个输入通道,通过内部模拟开关选择。这16个通道可以分为两个8通道的,也可以级联为一个16通道的。 ADC功能包括: 1、ADC时钟 外部高速时钟HSPCLK经过变换后作为AD的时钟。

HSPCLK先要被控制寄存器3ADCTRL3寄存器中的ADCCLKPS[3:0]位除,随后经过2分频(当ADCTRL1寄存器中的位CPS=1)或不分频(当ADCTRL1寄存器中的位CPS=0)就得到ADC的时钟基准,但是最大为25M。 ADCCLKPS=0时,ADCCLK=HSPCLK/(ADCTRL1[7]+1) ADCCLKPS!=0时,ADCCLK=HSPCLK/[2x(ADCCLKPS)x(ADCTRL1[7]+1)]例如:外部晶振时钟30M,PLL倍频后为150M,HSPCLK=25M,ADCCLKPS=5,ADCTRL1[7]=1,则 ADCCLK=25/2X5x(1+1)=1.25M 2、采样频率 ADC转换包括采样、保持、量化、编码四个阶段,他把连续的模拟量量化为开关数字量,就相当于在模拟量和AD引脚中间有一个开关,开关闭合,模拟量就输入到AD采样引脚,开关断开,ADC引脚上的模拟量就没有了,采样频率就是采样和保持的时间,就是这个开关闭合的时间。采样时间长短不影响其他操作,这个采样时间控制SOC脉冲宽度。由ADC时钟和ADC控制寄存器1ADCTRL1中的ACQ_PS[11:8]位决定。 Fsoc=ADCCLK/(ACQ_PS[11:8]+1)。 3、ADC采样模式 ADC采样有顺序采样和同时采样两种模式。

顺序采样就是按照自动排序器的设置一个通道一个通道采样,而同时采样是按照顺序排序器的设置一对一对的采样,但是这一对的编号要一样,即ADCINA0 与ADCINB0,ADCINA1和ADCINB1……同时采样。 2812的ADC是12位16通道的,可以分两个8通道的也可以级联为一个16通道的,这样的话就有4种工作模式,即: a、双通道顺序采样 b、双通道同步采样 c、级联模式顺序采样 d、级联模式同步采样 就每种工作模式进行介绍,不对C代码进行详解,在讲这些之前,先说一下涉及到的比较重要而且难理解的寄存器 第一个:最大转换通道寄存器ADCMAXCONV ADCMAXCONV中能用的位是最后七位,在双通道采样模式下,自动排序寄存器SEQ1(A通道)用到的是MAXCONV1_2-0,就是低三位,采样的通道数=MAXCONV1_2-0+1;自动排序寄存器SEQ2(B通道)用到的是MAXCONV2_2-0,就是高三位,采样的通道数=MAXCONV2_2-0+1;在级联模式下,自动排序器SEQ用到的是MAXCONV1_3-0,采样的通道数=MAXCONV1_3-0+1。 第二个:自动排序器SEQ1 SEQ2 SEQ 自动排序器就是管理在什么时间A、B通道的哪一个通道进行采样,就是把这16个通道排列顺序。在双通道模式下,SEQ1管理的是A通道的那8个输入,SEQ2管理的是B通道的那8个输入,在级联模式下SEQ(即SEQ1)管理16个通道。 第三个:四个输入通道选择排序寄存器ADCCHSELSEQx(X=1、2、3、4),都是16位

的寄存器,每个寄存器中的4位确定一个采样通道(因为4位最大值正好是16,这样每个4位就可以确定16个通道的任一个),这样一个寄存器确定4个通道,4个寄存器正好是确定16个通道。每个寄存器可以确定4个通道,这4个通道可以是一样的,甚至4个寄存器确定的都是一样的,这样就实现了过采样技术。 a、双通道顺序采样 双通道顺序采样,用到的自动排序器是SEQ1,SEQ2,其中SEQ1将用到ADCADCCHSELSEQ1和ADCADCCHSELSEQ2,ADCCHSELSEQx中的每4位的最高位设置为0;SEQ2将用到ADCADCCHSELSEQ3和ADCADCCHSELSEQ4,ADCCHSELSEQx中的每4位的最高位设置为1;用到ADCMAXCONV中最后七位的低三位和高三位。低三位MAXCONV1_2-0决定SEQ1中的采样次数;高三位MAXCONV2_2-0决定SEQ2中的采样次数.转换顺序是从ADCADCCHSELSEQ1的最低4位开始一直到ADCADCCHSELSEQ4的最高4位这个顺序来的。 C代码分析:这个是16个顺序采样的,每个通道都采样一次 /*双通道发生器模式 */

AdcRegs.ADCTRL1.bit.SEQ_CASC=0; /*设置顺序采样模式*/

AdcRegs.ADCTRL3.bit.SMODE_SEL=0;

/*每个序列发生器最大采样通道数为 8,总共可采样 16 通道 , SEQ1 将用到 ADCADCCHSELSEQ1、ADCADCCHSELSEQ2,SEQ2 将用到 ADCADCCHSELSEQ3、ADCADCCHSELSEQ4 */

AdcRegs.MAX_CONV.all=0x0077; /*采样 ADCINA0*/

AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0; /*采样 ADCINA1*/

AdcRegs.ADCCHSELSEQ1.bit.CONV01=0x1; /*采样 ADCINA2*/

AdcRegs.ADCCHSELSEQ1.bit.CONV02=0x2; /*采样 ADCINA3*/

AdcRegs.ADCCHSELSEQ1.bit.CONV03=0x3; /*采样 ADCINA4*/

AdcRegs.ADCCHSELSEQ2.bit.CONV04=0x4; /*采样 ADCINA5*/

AdcRegs.ADCCHSELSEQ2.bit.CONV05=0x5; /*采样 ADCINA6*/

AdcRegs.ADCCHSELSEQ2.bit.CONV06=0x6; /*采样 ADCINA7*/

AdcRegs.ADCCHSELSEQ2.bit.CONV07=0x7; /*ADCCHSELSEQx中的每4位的最高位为0*/ /*采样 ADCINB0*/

AdcRegs.ADCCHSELSEQ3.bit.CONV08=0x8; /*采样 ADCINB1*/

AdcRegs.ADCCHSELSEQ3.bit.CONV09=0x9; /*采样 ADCINB2*/

AdcRegs.ADCCHSELSEQ3.bit.CONV10=0xA; /*采样 ADCINB3*/

AdcRegs.ADCCHSELSEQ3.bit.CONV11=0xB;

/*采样 ADCINB4*/

AdcRegs.ADCCHSELSEQ4.bit.CONV12=0xC; /*采样 ADCINB5*/

AdcRegs.ADCCHSELSEQ4.bit.CONV13=0xD; /*采样 ADCINB6*/

AdcRegs.ADCCHSELSEQ4.bit.CONV14=0xE; /*采样 ADCINB7*/

AdcRegs.ADCCHSELSEQ4.bit.CONV15=0xF; /*ADCCHSELSEQx中的每4位的最高位为1*/ 转换完成后,结果存放在结果缓冲寄存器ADCRESULTn(x=1~16)中,结果排序如下

如果 SEQ1 和 SEQ2 两者都已经完成了转换,那么,结果如图 8 所示: ADCINA0--->ADCRESULT0 ADCINA1--->ADCRESULT1 ADCINA2--->ADCRESULT2 ADCINA3--->ADCRESULT3 ADCINA4--->ADCRESULT4 ADCINA5--->ADCRESULT5 ADCINA6--->ADCRESULT6 ADCINA7--->ADCRESULT7 ADCINB0--->ADCRESULT0 ADCINB1--->ADCRESULT8 ADCINB2--->ADCRESULT9 ADCINB3--->ADCRESULT10 ADCINB4--->ADCRESULT11 ADCINB5--->ADCRESULT13 ADCINB6--->ADCRESULT14 ADCINB7--->ADCRESULT15 b、双通道同步采样 双通道同步采样,就是一次有一对通道采样,像上面说的这一对是对应的。用到的自动排序器是SEQ1,SEQ2。其中SEQ1将用到ADCADCCHSELSEQ1,ADCADCCHSELSEQ1中的每4位的最高位设置为0;SEQ2将用到ADCADCCHSELSEQ3,ADCADCCHSELSEQ3中的每4位的最高位设置为1;用到ADCMAXCONV中最后七位的低2位和高2位。低2位MAXCONV1_1-0决定SEQ1中的采样次数,每一次是一对,列如MAXCONV1_1-0=3,那么就是4对;高2位MAXCONV2_1-0决定SEQ2中的采样次数.转换顺序是从ADCADCCHSELSEQ1的最低4位开始一直到ADCADCCHSELSEQ3的最高4位这个顺序来的.

C代码分析:这个是8对同步采样的,每个通道都采样一次 /*双通道发生器模式 */

AdcRegs.ADCTRL1.bit.SEQ_CASC=0; /*设置顺序采样模式*/

AdcRegs.ADCTRL3.bit.SMODE_SEL=1;

/*每个序列发生器最大采样通道数为 4,总共可采样 8对通道 , SEQ1 将用到 ADCADCCHSELSEQ1、,SEQ2 将用到 ADCADCCHSELSEQ3、 */ AdcRegs.MAX_CONV.all=0x0033; /*采样 ADCINA0,ADCINB0*/

AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0; /*采样 ADCINA1,ADCINB1*/

AdcRegs.ADCCHSELSEQ1.bit.CONV01=0x1; /*采样 ADCINA2,ADCINB2*/

AdcRegs.ADCCHSELSEQ1.bit.CONV02=0x2; /*采样 ADCINA3,ADCINB3*/

AdcRegs.ADCCHSELSEQ1.bit.CONV03=0x3; /*采样 ADCINA4,ADCINB4*/

AdcRegs.ADCCHSELSEQ3.bit.CONV08=0x4; /*采样 ADCINA5,ADCINB5*/

AdcRegs.ADCCHSELSEQ3.bit.CONV09=0x5; /*采样 ADCINA6,ADCINB6*/

AdcRegs.ADCCHSELSEQ3.bit.CONV10=0x6; /*采样 ADCINA7,ADCINB7*/

AdcRegs.ADCCHSELSEQ3.bit.CONV11=0x7;

如果 SEQ1 和 SEQ2 两者都已经完成了转换,那么,结果如图 8 所示: ADCINA0--->ADCRESULT0 ADCINB0--->ADCRESULT1 ADCINA1--->ADCRESULT2 ADCINB1--->ADCRESULT3 ADCINA2--->ADCRESULT4 ADCINB2--->ADCRESULT5 ADCINA3--->ADCRESULT6 ADCINB3--->ADCRESULT7 ADCINA4--->ADCRESULT8 ADCINB4--->ADCRESULT9 ADCINA5--->ADCRESULT10 ADCINB5--->ADCRESULT11 ADCINA6--->ADCRESULT12 ADCINB6--->ADCRESULT13 ADCINA7--->ADCRESULT14 ADCINB7--->ADCRESULT15 c、级联模式顺序采样 级联模式顺序采样,就是两个8通道的合并为一个16通道的,只用到一个排序器SEQ。顺序采样,就是一次采一个通道,最多采样16通道。SEQ 将用到 ADCADCCHSELSEQ1、ADCADCCHSELSEQ2、ADCADCCHSELSEQ3、ADCADCCHSELSEQ4 ,用到ADCMAXCONV中最后七位的低4位。转换顺序是从ADCADCCHSELSEQ1的最低4位开始一直到ADCADCCHSELSEQ3的最高4位这个顺序来的. C代码分析:这个是顺序采样16通道 /*级联模式 */

AdcRegs.ADCTRL1.bit.SEQ_CASC=1; /*设置顺序采样模式*/

AdcRegs.ADCTRL3.bit.SMODE_SEL=0;

/*序列发生器最大采样通道数为 16, SEQ 将用到 ADCADCCHSELSEQ1、ADCADCCHSELSEQ2,ADCADCCHSELSEQ3、ADCADCCHSELSEQ4 ,用到ADCMAXCONV的低4位*/