简简单单DSP系列学习活动第六期AD学习及使用精Word格式文档下载.docx

上传人:b****6 文档编号:18942000 上传时间:2023-01-02 格式:DOCX 页数:10 大小:20.25KB
下载 相关 举报
简简单单DSP系列学习活动第六期AD学习及使用精Word格式文档下载.docx_第1页
第1页 / 共10页
简简单单DSP系列学习活动第六期AD学习及使用精Word格式文档下载.docx_第2页
第2页 / 共10页
简简单单DSP系列学习活动第六期AD学习及使用精Word格式文档下载.docx_第3页
第3页 / 共10页
简简单单DSP系列学习活动第六期AD学习及使用精Word格式文档下载.docx_第4页
第4页 / 共10页
简简单单DSP系列学习活动第六期AD学习及使用精Word格式文档下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

简简单单DSP系列学习活动第六期AD学习及使用精Word格式文档下载.docx

《简简单单DSP系列学习活动第六期AD学习及使用精Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《简简单单DSP系列学习活动第六期AD学习及使用精Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。

简简单单DSP系列学习活动第六期AD学习及使用精Word格式文档下载.docx

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。

第二个:

自动排序器SEQ1SEQ2SEQ

自动排序器就是管理在什么时间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个寄存器确定的都是一样的,这样就实现了过采样技术。

双通道顺序采样,用到的自动排序器是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--->

ADCINB1--->

ADCRESULT8

ADCINB2--->

ADCRESULT9

ADCINB3--->

ADCRESULT10

ADCINB4--->

ADCRESULT11

ADCINB5--->

ADCRESULT13

ADCINB6--->

ADCRESULT14

ADCINB7--->

ADCRESULT15

双通道同步采样,就是一次有一对通道采样,像上面说的这一对是对应的。

用到的自动排序器是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.ADCTRL3.bit.SMODE_SEL=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.ADCCHSELSEQ3.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中最后七位的低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已经完成了转换,那么,结果如图所示:

级联模式同步采样,就是一次有一对通道采样,像上面说的这一对是对应的。

用到的自动排序器是SEQ将用到SEQADCADCCHSELSEQ1、ADCADCCHSELSEQ2.

ADCADCCHSELSEQ1、ADCADCCHSELSEQ2中的每4位的最高位设置为0;

用到ADCMAXCONV中最后七位的低3位。

转换顺序是从ADCADCCHSELSEQ1的最低4位开始一直到ADCADCCHSELSEQ2的最高4位这个顺序来的.

这个是8对同步采样的,每次采样俩个通道,每个通道都采样一次

/*设置同步采样模式*/

/*序列发生器最大采样通道数为8,总共可采样8对通道,SEQ将用到ADCADCCHSELSEQ1、ADCADCCHSELSEQ2*/

AdcRegs.MAX_CONV.all=0x0007;

AdcRegs.ADCCHSELSEQ2.bit.CONV6=0x6;

AdcRegs.ADCCHSELSEQ2.bit.CONV7=0x7;

如果SEQ1都已经完成了转换,那么结果如图所示:

通过上述的4种情况我们不难发现,双序列发生器同步采样和级联模式同步采样的结果是一样的,双

序列发生器顺序采样和级联模式顺序采样的结果也是一样的,就是寄存器配置有些差别,不可张冠李戴,否则采样不能正确进行。

大家可以仔细比对,体会这4种情况的不同之处。

在实际应用中,大家可以根据情况来进行选择,最简单的就是级联成16路,然后进行顺序采样。

4、序列发生器的连续自动序列化模式和启动/停止模式

我们知道,一个序列的转换数是由MAXCONVn进行控制的,在启动一个转换序列进行转换时,AD模块将MAXCONVn的值装载进自动序列状态寄存器ADCASEQSR的序列计数器状态位SEQCNTR。

当序列发生器从状态CONV00开始并顺序进行(CONV01,CONV02。

)时,SEQCNTR位从装入值开始递减,直到为0,结束一个序列的转换,完成转换数为(MAXCONVn+1)。

当AD的控制寄存器1的CONTRUN位设为0的时候,AD的序列发生器运行在启动/停止模式,也就是说这种模式下,序列发生器在完成1个序列的转换之后将停止工作,在下一次转换启动开始之前,必须复位序列发生器,将转换器置为CONV00。

复位的方法如下:

复位序列发生器:

/*立即复位序列发生器为CONV00*/

AdcRegs.ADCTRL2.bit.RST_SEQ1=1;

/*立即复位序列发生器为CONV08*/

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_usDELAY220L

voidInitAdc(void)

{

externvoidDSP28x_usDelay(Uint32Count);

AdcRegs.ADCTRL1.bit.RESET=1;

//复位

asm(“RPT#10||NOP”);

//至少等待12周期以使复位有效

AdcRegs.ADCTRL3.bit.ADCBGRFDN=0x3;

//Powerupbandgap/referencecircuitry

DELAY_US(ADC_usDELAY);

//DelaybeforepoweringuprestofADC

AdcRegs.ADCTRL3.bit.ADCPWDN=1;

//PoweruprestofADC

DELAY_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();

//初始化cpu

DINT;

//关中断

InitPieCtrl();

//初始化pie寄存器

IER=0x0000;

/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1