为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

TMS320F2812的ADC采样配置

2023-02-28 10页 pdf 111KB 17阅读

用户头像 个人认证

is_121760

8年外贸单证以及相关的工作经验

举报
TMS320F2812的ADC采样配置TMS320F2812的ADC是一个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...
TMS320F2812的ADC采样配置
TMS320F2812的ADC是一个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.25M2、采样频率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代码进行详解,在讲这些之前,先说一下涉及到的比较重要而且难理解的寄存器第一个:最大转换通道寄存器ADCMAXCONVADCMAXCONV中能用的位是最后七位,在双通道采样模式下,自动排序寄存器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。第二个:自动排序器SEQ1SEQ2SEQ自动排序器就是管理在什么时间A、B通道的哪一个通道进行采样,就是把这16个通道排列顺序。在双通道模式下,SEQ1管理的是A通道的那8个输入,SEQ2管理的是B通道的那8个输入,在级联模式下SEQ(即SEQ1)管理16个通道。1第三个:四个输入通道选择排序寄存器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;AdcRegs.MAX_CONV.all=0x0077;AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0;AdcRegs.ADCCHSELSEQ1.bit.CONV01=0x1;AdcRegs.ADCCHSELSEQ1.bit.CONV02=0x2;AdcRegs.ADCCHSELSEQ1.bit.CONV03=0x3;AdcRegs.ADCCHSELSEQ2.bit.CONV04=0x4;AdcRegs.ADCCHSELSEQ2.bit.CONV05=0x5;AdcRegs.ADCCHSELSEQ2.bit.CONV06=0x6;AdcRegs.ADCCHSELSEQ2.bit.CONV07=0x7;AdcRegs.ADCCHSELSEQ3.bit.CONV08=0x8;AdcRegs.ADCCHSELSEQ3.bit.CONV09=0x9;AdcRegs.ADCCHSELSEQ3.bit.CONV10=0xA;AdcRegs.ADCCHSELSEQ3.bit.CONV11=0xB;2AdcRegs.ADCCHSELSEQ4.bit.CONV12=0xC;AdcRegs.ADCCHSELSEQ4.bit.CONV13=0xD;AdcRegs.ADCCHSELSEQ4.bit.CONV14=0xE;AdcRegs.ADCCHSELSEQ4.bit.CONV15=0xF;转换完成后,结果存放在结果缓冲寄存器ADCRESULTn(x=1~16)中,结果排序如下如果SEQ1和SEQ2两者都已经完成了转换,那么,结果如图8所示:ADCINA0--->ADCRESULT0ADCINA1--->ADCRESULT1ADCINA2--->ADCRESULT2ADCINA3--->ADCRESULT3ADCINA4--->ADCRESULT4ADCINA5--->ADCRESULT5ADCINA6--->ADCRESULT6ADCINA7--->ADCRESULT7ADCINB0--->ADCRESULT0ADCINB1--->ADCRESULT8ADCINB2--->ADCRESULT9ADCINB3--->ADCRESULT10ADCINB4--->ADCRESULT11ADCINB5--->ADCRESULT13ADCINB6--->ADCRESULT14ADCINB7--->ADCRESULT15b、双通道同步采样双通道同步采样,就是一次有一对通道采样,像上面说的这一对是对应的。用到的自动排序器是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;AdcRegs.MAX_CONV.all=0x0033;AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0;3AdcRegs.ADCCHSELSEQ1.bit.CONV01=0x1;AdcRegs.ADCCHSELSEQ1.bit.CONV02=0x2;AdcRegs.ADCCHSELSEQ1.bit.CONV03=0x3;AdcRegs.ADCCHSELSEQ3.bit.CONV08=0x4;AdcRegs.ADCCHSELSEQ3.bit.CONV09=0x5;AdcRegs.ADCCHSELSEQ3.bit.CONV10=0x6;AdcRegs.ADCCHSELSEQ3.bit.CONV11=0x7;如果SEQ1和SEQ2两者都已经完成了转换,那么,结果如图8所示:ADCINA0--->ADCRESULT0ADCINB0--->ADCRESULT1ADCINA1--->ADCRESULT2ADCINB1--->ADCRESULT3ADCINA2--->ADCRESULT4ADCINB2--->ADCRESULT5ADCINA3--->ADCRESULT6ADCINB3--->ADCRESULT7ADCINA4--->ADCRESULT8ADCINB4--->ADCRESULT9ADCINA5--->ADCRESULT10ADCINB5--->ADCRESULT11ADCINA6--->ADCRESULT12ADCINB6--->ADCRESULT13ADCINA7--->ADCRESULT14ADCINB7--->ADCRESULT15c、级联模式顺序采样级联模式顺序采样,就是两个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;AdcRegs.MAX_CONV.all=0x000F;4AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0;AdcRegs.ADCCHSELSEQ1.bit.CONV01=0x1;AdcRegs.ADCCHSELSEQ1.bit.CONV02=0x2;AdcRegs.ADCCHSELSEQ1.bit.CONV03=0x3;AdcRegs.ADCCHSELSEQ2.bit.CONV04=0x4;AdcRegs.ADCCHSELSEQ2.bit.CONV05=0x5;AdcRegs.ADCCHSELSEQ2.bit.CONV06=0x6;AdcRegs.ADCCHSELSEQ2.bit.CONV07=0x7;AdcRegs.ADCCHSELSEQ3.bit.CONV08=0x8;AdcRegs.ADCCHSELSEQ3.bit.CONV09=0x9;AdcRegs.ADCCHSELSEQ3.bit.CONV10=0xA;AdcRegs.ADCCHSELSEQ3.bit.CONV11=0xB;AdcRegs.ADCCHSELSEQ4.bit.CONV12=0xC;AdcRegs.ADCCHSELSEQ4.bit.CONV13=0xD;AdcRegs.ADCCHSELSEQ4.bit.CONV14=0xE;AdcRegs.ADCCHSELSEQ4.bit.CONV15=0xF;转换完成后,结果存放在结果缓冲寄存器ADCRESULTn(x=1~16)中,结果排序如下如果SEQ已经完成了转换,那么,结果如图所示:ADCINA0--->ADCRESULT0ADCINA1--->ADCRESULT1ADCINA2--->ADCRESULT2ADCINA3--->ADCRESULT3ADCINA4--->ADCRESULT4ADCINA5--->ADCRESULT5ADCINA6--->ADCRESULT6ADCINA7--->ADCRESULT7ADCINB0--->ADCRESULT0ADCINB1--->ADCRESULT85ADCINB2--->ADCRESULT9ADCINB3--->ADCRESULT10ADCINB4--->ADCRESULT11ADCINB5--->ADCRESULT13ADCINB6--->ADCRESULT14ADCINB7--->ADCRESULT15d、级联模式同步采样级联模式同步采样,就是一次有一对通道采样,像上面说的这一对是对应的。用到的自动排序器是SEQ将用到SEQADCADCCHSELSEQ1、ADCADCCHSELSEQ2.ADCADCCHSELSEQ1、ADCADCCHSELSEQ2中的每4位的最高位设置为0;用到ADCMAXCONV中最后七位的低3位。转换顺序是从ADCADCCHSELSEQ1的最低4位开始一直到ADCADCCHSELSEQ2的最高4位这个顺序来的.C代码分析:这个是8对同步采样的,每次采样俩个通道,每个通道都采样一次AdcRegs.ADCTRL1.bit.SEQ_CASC=1;AdcRegs.ADCTRL3.bit.SMODE_SEL=1;AdcRegs.MAX_CONV.all=0x0007;AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0;AdcRegs.ADCCHSELSEQ1.bit.CONV01=0x1;AdcRegs.ADCCHSELSEQ1.bit.CONV02=0x2;AdcRegs.ADCCHSELSEQ1.bit.CONV03=0x3;AdcRegs.ADCCHSELSEQ2.bit.CONV04=0x4;AdcRegs.ADCCHSELSEQ2.bit.CONV05=0x5;AdcRegs.ADCCHSELSEQ2.bit.CONV6=0x6;AdcRegs.ADCCHSELSEQ2.bit.CONV7=0x7;如果SEQ1都已经完成了转换,那么结果如图所示:ADCINA0--->ADCRESULT0ADCINB0--->ADCRESULT1ADCINA1--->ADCRESULT2ADCINB1--->ADCRESULT3ADCINA2--->ADCRESULT4ADCINB2--->ADCRESULT5ADCINA3--->ADCRESULT6ADCINB3--->ADCRESULT76ADCINA4--->ADCRESULT8ADCINB4--->ADCRESULT9ADCINA5--->ADCRESULT10ADCINB5--->ADCRESULT11ADCINA6--->ADCRESULT12ADCINB6--->ADCRESULT13ADCINA7--->ADCRESULT14ADCINB7--->ADCRESULT15通过上述的4种情况我们不难发现,双序列发生器同步采样和级联模式同步采样的结果是一样的,双序列发生器顺序采样和级联模式顺序采样的结果也是一样的,就是寄存器配置有些差别,不可张冠李戴,否则采样不能正确进行。大家可以仔细比对,这4种情况的不同之处。在实际应用中,大家可以根据情况来进行选择,最简单的就是级联成16路,然后进行顺序采样。4、序列发生器的连续自动序列化模式和启动/停止模式我们知道,一个序列的转换数是由MAXCONVn进行控制的,在启动一个转换序列进行转换时,AD模块将MAXCONVn的值装载进自动序列状态寄存器ADCASEQSR的序列计数器状态位SEQCNTR。当序列发生器从状态CONV00开始并顺序进行(CONV01,CONV02。。。。)时,SEQCNTR位从装入值开始递减,直到为0,结束一个序列的转换,完成转换数为(MAXCONVn+1)。当AD的控制寄存器1的CONTRUN位设为0的时候,AD的序列发生器运行在启动/停止模式,也就是说这种模式下,序列发生器在完成1个序列的转换之后将停止工作,在下一次转换启动开始之前,必须复位序列发生器,将转换器置为CONV00。复位的方法如下:复位序列发生器:AdcRegs.ADCTRL2.bit.RST_SEQ1=1;AdcRegs.ADCTRL2.bit.RST_SEQ2=1;当AD的控制寄存器1的CONTRUN位设为1的时候,AD的序列发生器运行在连续自动序列化模式,当序列转换结束时,转换序列自动重复开始,SOC触发时自动将MAXCONVn装入SEQCNTR,SEQ的状态变为CONV00。在这种情况下,为了避免重写数据,必须确保在下一个转换序列开始前,读取结果寄存器。5、ADC的初始化首先应该复位ADC,再给REF和bandgap电路上电,上电之后要由至少5MS的延时使电源稳定,再给ADC主模块上电。初始化函数在DSP281X_Adc.c库函数中,在主函数中调用即可#defineADC_usDELAY8000L#defineADC_usDELAY220LvoidInitAdc(void){externvoidDSP28x_usDelay(Uint32Count);AdcRegs.ADCTRL1.bit.RESET=1;//复位asm(“RPT#10||NOP”);//至少等待12周期以使复位有效7AdcRegs.ADCTRL3.bit.ADCBGRFDN=0x3;//Powerupbandgap/referencecircuitryDELAY_US(ADC_usDELAY);//DelaybeforepoweringuprestofADCAdcRegs.ADCTRL3.bit.ADCPWDN=1;//PoweruprestofADCDELAY_US(ADC_usDELAY2);//DelayafterpoweringupADC}6、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;//禁止所有的中断IFR=0x0000;InitPieVectTable();//初始化pie中断向量InitAdc();//调用初始化ADC函数PieCtrlRegs.PIEIER1.bit.INTx6=1;//使能AD的PIE级中断IER|=M_INT1;//使能AD的CPU级的中断EINT;//开全局中断ERTM;//使能仿真中断LoopCount=0;AdcRegs.ADCTRL2.bit.SOC_SEQ1=1;while(1){LoopCount++;}}初始化ADC函数voidInitAdc(void){externvoidDSP28x_usDelay(Uint32Count);AdcRegs.ADCTRL1.bit.RESET=1;//ADC复位8asm("RPT#10||NOP");//等待至少12周期AdcRegs.ADCTRL3.bit.ADCBGRFDN=0x3;//Powerupbandgap/referencecircuitryDELAY_US(ADC_usDELAY);//DelaybeforepoweringuprestofADCAdcRegs.ADCTRL3.bit.ADCPWDN=1;//PoweruprestofADCDELAY_US(ADC_usDELAY2);//DelayafterpoweringupADCAdcRegs.ADCTRL1.bit.CPS=1;AdcRegs.ADCTRL3.bit.ADCCLKPS=3;AdcRegs.ADCTRL1.bit.ACQ_PS=5;AdcRegs.ADCTRL1.bit.SEQ_CASC=1;AdcRegs.ADCTRL3.bit.SMODE_SEL=0;AdcRegs.MAX_CONV.all=0x000F;AdcRegs.ADCCHSELSEQ1.bit.CONV00=0x0;AdcRegs.ADCCHSELSEQ1.bit.CONV01=0x1;AdcRegs.ADCCHSELSEQ1.bit.CONV02=0x2;AdcRegs.ADCCHSELSEQ1.bit.CONV03=0x3;AdcRegs.ADCCHSELSEQ2.bit.CONV04=0x4;AdcRegs.ADCCHSELSEQ2.bit.CONV05=0x5;AdcRegs.ADCCHSELSEQ2.bit.CONV06=0x6;AdcRegs.ADCCHSELSEQ2.bit.CONV07=0x7;AdcRegs.ADCCHSELSEQ3.bit.CONV08=0x8;AdcRegs.ADCCHSELSEQ3.bit.CONV09=0x9;AdcRegs.ADCCHSELSEQ3.bit.CONV10=0xA;AdcRegs.ADCCHSELSEQ3.bit.CONV11=0xB;AdcRegs.ADCCHSELSEQ4.bit.CONV12=0xC;9AdcRegs.ADCCHSELSEQ4.bit.CONV13=0xD;AdcRegs.ADCCHSELSEQ4.bit.CONV14=0xE;AdcRegs.ADCCHSELSEQ4.bit.CONV15=0xF;AdcRegs.ADCTRL2.bit.INT_MOD_SEQ=1;AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1=1;AdcRegs.ADCTRL2.bit.EVA_SOC_SEQ1=1;}ADC中断函数处理:ADC的中断函数在DSP281X_DefaultIsr.c库函数中了,在中断函数里面主要是读取ADC结果缓冲寄存器的值,12位在高位了,因此要把结果缓冲寄存器的值右移4位。并且要复位ADC的输入通道排序寄存器到CONV00,等待ADC采样使能,即有SOC脉冲;清外设中断标志位,以及PIEACK清零。Uint16ConversionCount;Uint16Voltage1[1024];Uint16Voltage2[1024];interruptvoidADCINT_ISR(void)//ADC{Voltage1[ConversionCount]=AdcRegs.ADCRESULT0>>4;Voltage2[ConversionCount]=AdcRegs.ADCRESULT1>>4;//If40conversionshavebeenlogged,startoverif(ConversionCount==1023){ConversionCount=0;}elseConversionCount++;AdcRegs.ADCTRL2.bit.RST_SEQ1=1;AdcRegs.ADCST.bit.INT_SEQ1_CLR=1;PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;return;}10
/
本文档为【TMS320F2812的ADC采样配置】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索