This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
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功能?
你好,
你之前的回复和我的想法是一样的,但我现在编的程序无法实现想要的效果。我理解是没有做到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的输入信号。
昨天写的比较粗糙,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
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;