Part Number:TMS320F280041
Hi,all
我想实现EPWM7相对于EPWM4的同步移相,但根据F28004X的数据手册,EPWM4SYNCIN不能接收EPWM7SYNCOUT的同步脉冲。
现在我的想法是将EPWM7SYNCOUT输出到GPIO39上,或者将EPWM7发出的同步脉冲配置为EXTSYNCOUT再输出到GPIO39。GPIO39作为EXTSYNCIN1外部同步脉冲输入到
EPWM4SYNCIN,实现同步移相操作。
现在我遇到的问题如下:
1.如何实现EPWM7SYNCOUT到GPIO39的输出配置?是否需要使用OUTPUT X-BAR功能?
2.如何实现GPIO39到EXTSYNCIN1的输入配置?是否需要使用INTPUT X-BAR功能?
Yale Li:
是需要用到output xbar和input xbar的,看一下我之前的回复:
https://e2echina.ti.com/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/496430/tms320f280049-f280049-epwm3-epwm4-epwm1-epwm2
,
?? ?:
你好,
你之前的回复和我的想法是一样的,但我现在编的程序无法实现想要的效果。我理解是没有做到EPWM7SYNCOUT到EXTSYNCOUT,EXTSYNCOUT到GPIO5,和GPIO5到EXTSYNCIN1的传输,但是我在数据手册中没有找到可以进行这种转换的寄存器设置。可以的话请帮我检查一下我的程序缺少了哪些设置。
//GPIO5,EXTSYNCOUT InputXbarRegs.INPUT3SELECT = 5; GpioCtrlRegs.GPADIR.bit.GPIO26 = 0; //配置为输入 GpioCtrlRegs.GPAPUD.bit.GPIO26 = 0; //配置为上拉 GpioCtrlRegs.GPAQSEL2.bit.GPIO26 = 3; //GPIO配置为非同步模式
//EPWM7作为输出源,EPWM7SYNCOUT
EPwm7Regs.TBCTL.bit.SYNCOSEL = 1; //Sync Output Select,01: CTR = zero: Time-base counter equal to zero (TBCTR = 0x00) SyncSocRegs.SYNCSELECT.bit.SYNCOUT = 2;//10: EPWM7SYNCOUT selected OutputXbarRegs.OUTPUT1MUX0TO15CFG.bit.MUX0 = 1; //01 : Select .1 input for Mux0 OutputXbarRegs.OUTPUT1MUXENABLE.bit.MUX0 = 1; //1: Respective output of Mux0 is enabled to drive the OUTPUT1 of GpioCtrlRegs.GPAGMUX2.bit.GPIO5 = 1; GpioCtrlRegs.GPAMUX2.bit.GPIO5 = 1;EPwm7Regs.TBCTL.bit.PHSEN = 0; // 0: do not load the TBCTR from the TBPHS,禁用移相 EPwm7Regs.TBPHS.bit.TBPHS = 0;//phase shift angle
//EPWM4配置EPWM4SYNCIN为EXTSYNCIN1
EPwm4Regs.TBCTL.bit.SYNCOSEL = 0; SyncSocRegs.SYNCSELECT.bit.EPWM4SYNCIN = 5;//101: EXTSYNCIN1 selected EPwm4Regs.TBCTL.bit.PHSEN = 1; // 0: do not load the TBCTR from the TBPHS EPwm4Regs.TBPHS.bit.TBPHS = 0;
寄存器配置中我没有找到可以设置EPWM7输出同步脉冲到EXTSYNCOUT的配置位
,
?? ?:
另外,请问您提到的“将EPWM3的输出直接作为EXTSYNCIN1或EXTSYNCIN2的输入信号”的想法如何实现,我认为我的功能也可以这么做,将EPWM7的输出作为EXTSYNCIN1的输入信号。
,
Yale Li:
好的,我看一下
,
?? ?:
昨天写的比较粗糙,GPIO口写错了。我重新发一下给您。
//GPIO5引脚作为同步脉冲寄存。 InputXbarRegs.INPUT3SELECT = 5; GpioCtrlRegs.GPADIR.bit.GPIO5 = 1; //配置为输出 GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 0; //GPIO口输出 GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0; //配置为上拉 GpioCtrlRegs.GPAQSEL1.bit.GPIO5 = 3; //GPIO配置为非同步模式
EPwm7Regs.TBCTL.bit.SYNCOSEL = 1; //Sync Output Select,01: CTR = zero: Time-base counter equal to zero (TBCTR = 0x00) SyncSocRegs.SYNCSELECT.bit.SYNCOUT = 2;//10: EPWM7SYNCOUT selected OutputXbarRegs.OUTPUT1MUX0TO15CFG.bit.MUX0 = 1; //01 : Select .1 input for Mux0 OutputXbarRegs.OUTPUT1MUXENABLE.bit.MUX0 = 1; //1: Respective output of Mux0 is enabled to drive the OUTPUT1 of GpioCtrlRegs.GPAGMUX1.bit.GPIO5 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 1;
EPwm7Regs.TBCTL.bit.PHSEN = 0; // 0: do not load the TBCTR from the TBPHS,禁用移相 EPwm7Regs.TBPHS.bit.TBPHS = 0;//phase shift angle
EPwm4Regs.TBCTL.bit.SYNCOSEL = 1; SyncSocRegs.SYNCSELECT.bit.EPWM4SYNCIN = 5;//101: EXTSYNCIN1 selected EPwm4Regs.TBCTL.bit.PHSEN = 1; // 0: do not load the TBCTR from the TBPHS EPwm4Regs.TBPHS.bit.TBPHS = 100; EPwm4Regs.TBCTR = 0x0000; // initial value of counter EPwm4Regs.TBPRD = 454;//1000; // time-base counter
,
Yale Li:
sprui33f_TMS320F28004x Real-Time Microcontrollers Technical Reference Manual (Rev. F)
?? ? 说:OutputXbarRegs.OUTPUT1MUX0TO15CFG.bit.MUX0 = 1; //01 : Select .1 input for Mux0 OutputXbarRegs.OUTPUT1MUXENABLE.bit.MUX0 = 1; //1: Respective output of Mux0 is enabled to drive the OUTPUT1 of
首先你的output xbar选错了,只有MUX14的第3个信号是EXTSYNCOUT。8个OUTPUT可以任选一个,但是必须使用MUX14选择第3个信号;
(第995页)
?? ? 说:GpioCtrlRegs.GPADIR.bit.GPIO5 = 1; //配置为输出 GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 0; //GPIO口输出 GpioCtrlRegs.GPAPUD.bit.GPIO5 = 0; //配置为上拉 GpioCtrlRegs.GPAQSEL1.bit.GPIO5 = 3; //GPIO配置为非同步模式
?? ? 说:GpioCtrlRegs.GPAGMUX1.bit.GPIO5 = 1; GpioCtrlRegs.GPAMUX1.bit.GPIO5 = 1;
再来说GPIO,你选择的是OTPUT1,那就应该选择GPIO2:
(第892页)
再通过MUX和GMUX寄存器选择GPIO的功能为5。
?? ? 说:SyncSocRegs.SYNCSELECT.bit.EPWM4SYNCIN = 5;//101: EXTSYNCIN1 selected
?? ? 说:InputXbarRegs.INPUT3SELECT = 5;
鉴于你为EPWM4选择的同步输入信号是EXTSYNCIN1,输入INPUTXBAR应该选择INPUTXBAR5:
(第989页)
这是我发现的有关同步信号输出输入的一些问题。
?? ? 说:EPwm4Regs.TBCTL.bit.SYNCOSEL = 1;
另外,EPWM4后边如果还有同步信号链上的模块需要同步的,建议直接将EPWM4的同步输入信号直通到后面,即
EPwm4Regs.TBCTL.bit.SYNCOSEL = 0;
,
?? ?:
Hi,Yale
问题已经解决,谢谢你的帮助!
,
Yale Li:
不客气