TMS320F28335笔记ADC模块.docx

上传人:b****8 文档编号:28673127 上传时间:2023-07-19 格式:DOCX 页数:20 大小:1.63MB
下载 相关 举报
TMS320F28335笔记ADC模块.docx_第1页
第1页 / 共20页
TMS320F28335笔记ADC模块.docx_第2页
第2页 / 共20页
TMS320F28335笔记ADC模块.docx_第3页
第3页 / 共20页
TMS320F28335笔记ADC模块.docx_第4页
第4页 / 共20页
TMS320F28335笔记ADC模块.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

TMS320F28335笔记ADC模块.docx

《TMS320F28335笔记ADC模块.docx》由会员分享,可在线阅读,更多相关《TMS320F28335笔记ADC模块.docx(20页珍藏版)》请在冰豆网上搜索。

TMS320F28335笔记ADC模块.docx

TMS320F28335笔记ADC模块

ADC转换

输入模拟电压的数值源自:

DigitalValue=0,wheninput≤0V

DigitalValue=

when0V

DigitalValue=4095,wheninput≥3V

要获得指定的ADC精度,正确的电路板布局非常关键。

为尽可能达到最佳效果,引入ADCIN引脚的走线不应太靠近数字信号通道。

这是为了最大程度地减少数字线路上因ADC输入耦合而产生的开关噪声。

而且,适当的隔离技术必须被用来将数字电源从ADC模块电源引脚(VDD1A18,VDD2A18,VDDA2,VDDAIO)上隔离。

Figure1使用内部基准源的ADC连接

Figure2使用外部基准源的引脚连接

时钟信号:

ACQ_PS[3:

0]:

主要是用于设置采样保持窗口。

ACQ_PS[3:

0]+1个采样窗口。

ADCTRL1:

RESET:

0:

无影响。

1:

写1复位。

之后由ADC逻辑自动设置为0.

SUSMODE[1:

0]:

仿真-挂起模式。

CPS:

0:

ADCCLK=Fclk/1。

1:

ADCCLK=Fclk/2。

CONT_RUN:

如果该位置1,ADC工作在连续运行模式。

收到EOS信号之后,排序器的工作由SEQ_OVRD位的状态决定。

如果该位已清除,则排序器从其复位状态起重新启动,如果设置了SEQ_OVRD,则排序器从其当前位置重新启动而不复位。

0:

启动停止模式。

排序器在收到EOS信号后停止。

在下一个SOC信号到来时,排序器从上一次停止的状态处重新开始直到排序器复位时停止。

SEQ_OVRD:

1:

使能,覆盖由MAX_CONVn设置的最大通道数,在整个模块通道内循环转换。

0:

排序器在规定的最大通道数内进行排序循环。

SEQ_CASC:

0:

双排序器模式。

1:

级联运行模式。

ADCTRL2:

ePWM_SOCB_SEQ

0:

无影响。

1:

允许级联排序器由ePWM_SOCB信号控制启动。

RST_SEQ1

1:

排序器立即复位到状态CONV00。

SOC_SEQ1

1:

从当前停止位置启动SEQ1.

INA_ENA_SEQ1

1:

使能INT_SEQ1的中断请求。

INA_MOD_SEQ1

0:

在每一个SEQ1序列的结束设置INT_SEQ1.1:

在每隔一个SEQ1序列的结束设置INT_SEQ1

ePWM_SOCA_SEQ1

0:

SEQ1不能由ePWMxSOCA触发信号启动。

1:

可以

EXT_SOC_SEQ1

1:

可以通过GPIOA口的信号启动ADC。

该引脚被配置位GPIOXINT2SEL寄存器的XINT2

ADCTRL3:

ADCBGRFDN[1:

0]

00:

带隙和参考电路掉电。

11:

带隙和参考电路上电。

ADCPWDN

0:

模拟内核的除带隙和参考电路之外所有模拟电路掉电。

1:

上电。

SMODE_SEL

0:

顺序采样模式。

1:

同步采样模式。

最大转换通道寄存器ADCMAXCONV:

ADC参考选择寄存器(ADCREFSEL)

ADC输入通道选择序列控制寄存器:

实例:

 

主要工作模式:

1、级联模式

A、顺序采样

最大转换通道寄存器ADCMAXCONV,这个寄存器决定有多少采样通道。

在这种模式下寄存器的低四位有效,采样通道数=(ADCMAXCONV0~4)+1。

ADC输入通道选择排序控制寄存器ADCCHSELSEQn。

总共有4个寄存器,

ADCCHSELSEQ1,ADCCHSELSEQ2,ADCCHSELSEQ3,ADCCHSELSEQ4,每个寄存器都是16位的,顺序的4位决定一个输入通道,转换顺序是从ADCCHSELSEQ1最低4位到ADCCHSELSEQ4的最高4位,最多16个。

这个模式下,配合着ADCMAXCONV使用,ADCMAXCONV决定对多少个通道采样,ADCCHSELSEQn决定采样顺序,其中ADCCHSELSEQn中的每4位的最高位决定哪个采样保持器,剩下的3位决定哪个通道。

这样的话3位决定8个通道,正好两个采样保持器,加起来就是16个。

举例说明:

C代码分析:

这个是顺序采样16通道

/*级联模式*/

AdcRegs.ADCTRL1.bit.SEQ_CASC=1;

/*设置顺序采样模式*/

AdcRegs.ADCTRL3.bit.SMODE_SEL=0;

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

AdcRegs.MAX_CONV.all=0x000F;

/*采样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;

从下面开始每四位的最高位决定了是用的B采样保持器

/*采样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;第十六个转换

转换完成后,结果存放在结果缓冲寄存器ADCRESULTn(x=1~16)中,结果排序如下

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

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级联模式同步采样

级联模式同步采样就两个采样保持器同时采样是成对的(比如说同时采样保持INA0和INB0)。

最大转换通道寄存器ADCMAXCONV的低3位有效,绝定8对通道,用到了ADC输入通道选择排序控制寄存器ADCCHSELSEQ1和2,这两个寄存器的每4位的最高位不起作用,低3位有用,正好是8对。

采样保持的顺序还是从ADCCHSELSEQ1低4位到ADCCHSELSEQ2高4位。

C代码分析:

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

/*级联模式*/

AdcRegs.ADCTRL1.bit.SEQ_CASC=1;

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

AdcRegs.ADCTRL3.bit.SMODE_SEL=1;

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

AdcRegs.MAX_CONV.all=0x0007;

/*采样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.ADCCHSELSEQ2.bit.CONV04=0x4;

/*采样ADCINA5,ADCINB5*/

AdcRegs.ADCCHSELSEQ2.bit.CONV05=0x5;

/*采样ADCINA6,ADCINB6*/

AdcRegs.ADCCHSELSEQ2.bit.CONV6=0x6;

/*采样ADCINA7,ADCINB7*/

AdcRegs.ADCCHSELSEQ2.bit.CONV7=0x7;

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

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

2、双排序模式

双排序模式把两个排序器独立起来使用,有自己的触发方式,可以看做是2个独立的ADC。

A通道用的是排序器1(SEQ1)B通道用的是排序器2(SEQ2),SEQ1的优先级高于SEQ2,如果同时来了启动信号,SEQ1先转换。

排序器中的转换个数还是受ADCMAXCONV控制。

A、双排序顺序采样

顺序采样的个数还是受到ADCMAXCONV控制,有用的还是最低7位。

采样保持器A用到的是ADCMAXCONV的最低3位,采样保持器B用到的是ADCMAXCONV的最低7位的高3位。

采样通道的排序还是受ADC输入通道选择排序控制寄存器ADCCHSELSEQn控制,SEQ1用到的是ADCCHSELSEQ1和2,SEQ2用到的是ADCCHSELSEQ3和4,排序还是从ADCCHSELSEQ1的最低4位到ADCCHSELSEQ4的最高4位,ADCCHSELSEQ1和ADCCHSELSEQ2的每四位的最高位写为0,低三位代表哪个通道,ADCCHSELSEQ3和ADCCHSELSEQ4的每4位的最高位写1,代表了是B通道,低三位代表那个通道。

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;这个地方已经不是0X000F了

/*采样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

双排序同步采样

双排序模式同步采样就是两个采样保持器同时采样是成对的(比如说同时采样保持INA0和INB0)。

双排序模式与级联模式的区别在于双排序模式用到了ADCCHSELSEQ1(SEQ1)和ADCCHSELSEQ3(SEQ2),实际是级联模式只用到了一个采样保持器而双排序用到了2个采样保持器,这样的话每一个采样保持器控制了4对通道,正好最大是8对16个。

决定ADCCHSELSEQ中个数的寄存器ADCMAXCONV的低7位有效,这低七位的高3位最大是3,最低4位的最大值也是3.

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

3、以上介绍都是基本的操作,具体使用起来还是比较恶心的,那个启动停止模式就没有使用明白,如果AdcRegs.ADCTRL1.bit.CONT_RUN=0;就是启动停止模式,这个模式用软件启动没有启动起来,就是AdcRegs.ADCTRL2.bit.SOC_SEQ1=1。

AdcRegs.ADCTRL1.bit.CONT_RUN=1是连续运行模式,就软件启动一次,如果在用到查询模式的时候,如果不复位的话(AdcRegs.ADCTRL2.bit.RST_SEQ1=0),那么就一直在转换,如果复位的话(AdcRegs.ADCTRL2.bit.RST_SEQ1=1;)那么转化两次,按道理来说复位后就回到了触发前的状态,那么你只启动了一次,这一次转化完成之后,一复位就应该停止了,但是还是又转化了一次。

如果用到中断模式的话,启动一次后,在中断里面里面复位了,进两次次中断,如果没有复位的话,那就一直进中断。

在使用的时候,就是用级联模式,使用中断模式,在中断里面复位,什么时候想去要AD的值,那么你就什么时候触发;也可以查询,不复位,让他一直在转化,什么时候想要没什么时候去读。

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

当前位置:首页 > 职业教育 > 职业技术培训

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

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