TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F28335: EPWM时钟问题

Part Number:TMS320F28335

我通过使用EPWM1中断实现EPWM1与EPWM4的内移相程序(即初始EPWM1与EPWM4的移相角为半个周期),期间EPWM2与EPWM3的时钟关闭。当EPWM1与EPWM4的移相比为0,即同相时打开EPWM2与EPWM3的时钟,但我打开EPWM2与EPWM3的时钟时,初始TBCTR不为0,这是为什么呢?

	EPwm1Regs.ETSEL.bit.INTEN=0;		//关PWM1(内移相)中断	EALLOW;EPwm2Regs.TBCTR=0;EPwm3Regs.TBCTR=0;EPwm5Regs.TBCTR=0;EPwm6Regs.TBCTR=0;
//CpuTimer0Regs.TCR.bit.TSS = 0;					//启动PID中断,即启动定时器0
//DELAY_US(1.1);									//为了错开启动PWM2,3时因PWM1产生同步信号而产生的影响while(EPwm1Regs.TBCTR != 0);SysCtrlRegs.PCLKCR1.bit.EPWM2ENCLK=1;			//PWM2,3时钟开启SysCtrlRegs.PCLKCR1.bit.EPWM3ENCLK=1;SysCtrlRegs.PCLKCR1.bit.EPWM5ENCLK=1;			//PWM2,3时钟开启SysCtrlRegs.PCLKCR1.bit.EPWM6ENCLK=1;EPwm2Regs.TZCLR.bit.OST=1;						//清除PWM2,3错误联防标志位EPwm3Regs.TZCLR.bit.OST=1;EPwm5Regs.TZCLR.bit.OST=1;						//清除PWM2,3错误联防标志位EPwm6Regs.TZCLR.bit.OST=1;EDIS;

? ?:

 以上问题找到原因了,可能是关闭EPWM2和EPWM3时钟后,更改不了TBCTR的值。但我现在想在EPWM1上升沿的时候(也即EPWM的TBCTR=0)打开EPWM2的时钟并赋值TBCTR,我现在用的是while,见代码第9行,但是因为指令周期与TBCTR之间存在时间差,并不能在第一时间就判断成功,而是时快时慢,请问有什么办法能更好地判断EPWM1上升沿(也即EPWM的TBCTR=0)时打开EPWM2的时钟吗?

,

Ben Qin:

你好,可以尝试使用中断,在中断中打开EPWM2.

,

? ?:

代码就是在EPWM1的中断程序里面的

,

? ?:

就算使用中断,也不能完全保证当EPWM1的TBCTR=0的时候就判断成功,因为进中断后TBCTR仍然在计数。

,

Ben Qin:

我查看下相关资料后回复您

,

Ben Qin:

对的,这种情况应该是不可避免的吧。

,

? ?:

那使用while之后,给对应PEWM的TBCTR相应补偿一些值应该就可以

,

Ben Qin:

是的

,

? ?:

在使用这种方法时遇到一个问题,有时候会一直卡在while(EPwm1Regs.TBCTR != 0);这里,形成死循环,能规避吗?

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28335: EPWM时钟问题
分享到: 更多 (0)