TMS320F28335笔记ADC模块.docx
- 文档编号:28673127
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:20
- 大小:1.63MB
TMS320F28335笔记ADC模块.docx
《TMS320F28335笔记ADC模块.docx》由会员分享,可在线阅读,更多相关《TMS320F28335笔记ADC模块.docx(20页珍藏版)》请在冰豆网上搜索。
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的值,那么你就什么时候触发;也可以查询,不复位,让他一直在转化,什么时候想要没什么时候去读。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TMS320F28335 笔记 ADC 模块