1、3、ADC采样模式 ADC采样有顺序采样和同时采样两种模式。顺序采样就是按照自动排序器的设置一个通道一个通道采样,而同时采样是按照顺序排序器的设置一对一对的采样,但是这一对的编号要一样,即ADCINA0 与ADCINB0,ADCINA1和ADCINB1同时采样。 2812的ADC是12位16通道的,可以分两个8通道的也可以级联为一个16通道的,这样的话就有4种工作模式,即:a、双通道顺序采样b、双通道同步采样c、级联模式顺序采样d、级联模式同步采样 就每种工作模式进行介绍,不对C代码进行详解,在讲这些之前,先说一下涉及到的比较重要而且难理解的寄存器 第一个:最大转换通道寄存器ADCMAXCON
2、V 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个
3、输入,SEQ2管理的是B通道的那8个输入,在级联模式下SEQ(即SEQ1)管理16个通道。 第三个:四个输入通道选择排序寄存器ADCCHSELSEQx(X=1、2、3、4),都是16位的寄存器,每个寄存器中的4位确定一个采样通道(因为4位最大值正好是16,这样每个4位就可以确定16个通道的任一个),这样一个寄存器确定4个通道,4个寄存器正好是确定16个通道。每个寄存器可以确定4个通道,这4个通道可以是一样的,甚至4个寄存器确定的都是一样的,这样就实现了过采样技术。 双通道顺序采样,用到的自动排序器是SEQ1,SEQ2,其中SEQ1将用到ADCADCCHSELSEQ1和ADCADCCHSELSE
4、Q2,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_C
5、ASC=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;/*采样
6、 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;/*AD
7、CCHSELSEQx中的每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.ADCCHS
8、ELSEQ4.bit.CONV13=0xD;/*采样 ADCINB6*/AdcRegs.ADCCHSELSEQ4.bit.CONV14=0xE;/*采样 ADCINB7*/AdcRegs.ADCCHSELSEQ4.bit.CONV15=0xF;/*ADCCHSELSEQx中的每4位的最高位为1*/ 转换完成后,结果存放在结果缓冲寄存器ADCRESULTn(x=116)中,结果排序如下如果 SEQ1 和 SEQ2 两者都已经完成了转换,那么,结果如图 8 所示:ADCINA0-ADCRESULT0ADCINA1-ADCRESULT1ADCINA2-ADCRESULT2ADCINA3-ADCRES
9、ULT3ADCINA4-ADCRESULT4ADCINA5-ADCRESULT5ADCINA6-ADCRESULT6ADCINA7-ADCRESULT7ADCINB0-ADCINB1-ADCRESULT8ADCINB2-ADCRESULT9ADCINB3-ADCRESULT10ADCINB4-ADCRESULT11ADCINB5-ADCRESULT13ADCINB6-ADCRESULT14ADCINB7-ADCRESULT15 双通道同步采样,就是一次有一对通道采样,像上面说的这一对是对应的。用到的自动排序器是SEQ1,SEQ2。其中SEQ1将用到ADCADCCHSELSEQ1,ADCADCC
10、HSELSEQ1中的每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.ADCTRL3.bit.SMODE_SEL
11、=1;/*每个序列发生器最大采样通道数为 4,总共可采样 8对通道 , SEQ1 将用到 ADCADCCHSELSEQ1、,SEQ2 将用到 ADCADCCHSELSEQ3、 */AdcRegs.MAX_CONV.all=0x0033;/*采样 ADCINA0,ADCINB0*/*采样 ADCINA1,ADCINB1*/*采样 ADCINA2,ADCINB2*/*采样 ADCINA3,ADCINB3*/*采样 ADCINA4,ADCINB4*/AdcRegs.ADCCHSELSEQ3.bit.CONV08=0x4;/*采样 ADCINA5,ADCINB5*/AdcRegs.ADCCHSELSE
12、Q3.bit.CONV09=0x5;/*采样 ADCINA6,ADCINB6*/AdcRegs.ADCCHSELSEQ3.bit.CONV10=0x6;/*采样 ADCINA7,ADCINB7*/AdcRegs.ADCCHSELSEQ3.bit.CONV11=0x7;ADCRESULT12 级联模式顺序采样,就是两个8通道的合并为一个16通道的,只用到一个排序器SEQ。顺序采样,就是一次采一个通道,最多采样16通道。SEQ 将用到 ADCADCCHSELSEQ1、ADCADCCHSELSEQ2、ADCADCCHSELSEQ3、ADCADCCHSELSEQ4 ,用到ADCMAXCONV中最后七位
13、的低4位。转换顺序是从ADCADCCHSELSEQ1的最低4位开始一直到ADCADCCHSELSEQ3的最高4位这个顺序来的.这个是顺序采样16通道/*级联模式 */AdcRegs.ADCTRL1.bit.SEQ_CASC=1;/*序列发生器最大采样通道数为 16, SEQ 将用到 ADCADCCHSELSEQ1、ADCADCCHSELSEQ2,ADCADCCHSELSEQ3、ADCADCCHSELSEQ4 ,用到ADCMAXCONV的低4位*/AdcRegs.MAX_CONV.all=0x000F;如果 SEQ已经完成了转换,那么,结果如图 所示: 级联模式同步采样,就是一次有一对通道采样,
14、像上面说的这一对是对应的。用到的自动排序器是SEQ将用到SEQADCADCCHSELSEQ1、ADCADCCHSELSEQ2.ADCADCCHSELSEQ1、ADCADCCHSELSEQ2中的每4位的最高位设置为0;用到ADCMAXCONV中最后七位的低3位。转换顺序是从ADCADCCHSELSEQ1的最低4位开始一直到ADCADCCHSELSEQ2的最高4位这个顺序来的.这个是8对同步采样的,每次采样俩个通道,每个通道都采样一次/*设置同步采样模式*/*序列发生器最大采样通道数为 8,总共可采样 8对通道 , SEQ 将用到 ADCADCCHSELSEQ1、 ADCADCCHSELSEQ2
15、*/AdcRegs.MAX_CONV.all=0x0007;AdcRegs.ADCCHSELSEQ2.bit.CONV6=0x6;AdcRegs.ADCCHSELSEQ2.bit.CONV7=0x7;如果 SEQ1都已经完成了转换,那么结果如图 所示: 通过上述的 4 种情况我们不难发现,双序列发生器同步采样和级联模式同步采样的结果是一样的,双 序列发生器顺序采样和级联模式顺序采样的结果也是一样的,就是寄存器配置有些差别,不可张冠李戴,否则采样不能正确进行。大家可以仔细比对,体会这 4 种情况的不同之处。在实际应用中,大家可以根据情况来进行选择,最简单的就是级联成 16 路,然后进行顺序采样。
16、4、序列发生器的连续自动序列化模式和启动/停止模式 我们知道,一个序列的转换数是由 MAXCONVn 进行控制的,在启动一个转换序列进行转换时,AD 模块将 MAXCONVn 的值装载进自动序列状态寄存器 ADCASEQSR 的序列计数器状态位 SEQCNTR。当序列发生器从状态 CONV00 开始并顺序进行(CONV01,CONV02。)时, SEQCNTR 位从装入值开始递减,直到为 0,结束一个序列的转换,完成转换数为(MAXCONVn+1)。 当 AD 的控制寄存器 1 的 CONT RUN 位设为 0 的时候,AD 的序列发生器运行在启动/停止模式,也就是说这种模式下,序列发生器在完
17、成 1 个序列的转换之后将停止工作,在下一次转换启动开始之前,必须复位序列发生器,将转换器置为 CONV00。复位的方法如下:复位序列发生器 :/*立即复位序列发生器为 CONV00 */AdcRegs.ADCTRL2.bit.RST_SEQ1=1;/*立即复位序列发生器为 CONV08*/AdcRegs.ADCTRL2.bit.RST_SEQ2=1; 当 AD 的控制寄存器 1 的 CONT RUN 位设为 1 的时候,AD 的序列发生器运行在连续自动序列化模式,当序列转换结束时,转换序列自动重复开始,SOC触发时自动将 MAXCONVn装入 SEQCNTR,SEQ的状态变为 CONV00。
18、在这种情况下,为了避免重写数据,必须确保在下一个转换序列开始前,读取结果寄存器。5、ADC的初始化 首先应该复位ADC,再给REF和bandgap电路上电,上电之后要由至少5MS的延时使电源稳定,再给ADC主模块上电。初始化函数在DSP281X_Adc.c库函数中,在主函数中调用即可#define ADC_usDELAY 8000L#define ADC_usDELAY2 20Lvoid InitAdc(void)extern void DSP28x_usDelay(Uint32 Count);AdcRegs.ADCTRL1.bit.RESET=1;/复位asm(“ RPT # 10 | NO
19、P”);/至少等待12周期以使复位有效AdcRegs.ADCTRL3.bit.ADCBGRFDN = 0x3; / Power up bandgap/reference circuitryDELAY_US(ADC_usDELAY); / Delay before powering up rest of ADCAdcRegs.ADCTRL3.bit.ADCPWDN = 1; / Power up rest of ADCDELAY_US(ADC_usDELAY2); / Delay after powering up ADC6、ADC启动在配置完ADC后,要选择它的启动模式。SEQ1 :软件立即启动 、EVA 的多种事件 外部引脚(GPIO/XINT2_ADCSOC)SEQ2 :软件立即启动 、 EVB 的多种事件?SEQ :软件立即启动 、EVA 的多种事件 、EVB 的多 种事件 、外部引脚(GPIO/XINT2_ADCSOC)对于这些触发方式的选择有控制寄存器2ADCTRL2决定.下面以一个完整的C代码为例说明ADC的配置,这个是工作在级联顺序采样,采样16通道,有软件触发,使能中断,工作在中断模式0.main()InitSysCtrl();/初始化cpuDINT;/关中断InitPieCtrl();/初始化pie寄存器IER = 0x0000;/
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1