28335的epwm的时基模块TBCTR在程序里任意时刻人为重新使能后,能重新从0开始计数吗?谢谢,试了好多办法,比如关闭时钟TBCLKSYNC再开启,给TBCTR装初值,给TBPHS相位寄存器赋值0,再来一条TBCTL[SWFSYNC],好像都不行,现在怀疑28335有这个功能吗?能人为在某一时刻把TBCTR重新装0再开始吗?我现在只用了一路EPWM1,谢谢
ChuShan Zhang:
回复 Seven Han:
不是啊,我做这个的目的是想切换控制策略,退出我自己的控制策略,然后想立刻切换到传统的PI控制。
在我退出自己的控制策略后,我立马写了如下语句:
EPwm1Regs.TBCTL.bit.PHSDIR = 1; EPwm1Regs.TBPHS.half.TBPHS = 0x0000; EPwm1Regs.TBCTL.bit.PHSEN=1; EPwm1Regs.TBCTL.bit.SWFSYNC=1; EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;// Enable TBCLK within the ePWM EDIS; EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;// Enable TBCLK within the ePWM EDIS;
但是发现在我退出我的控制策略到正式进入新一轮的PI控制的epwm中断,中间存在较长时间的时间间隔(大概半个开关周期)。我的分析是,在我退出我自己的控制策略的那一刻,TBCTR的值并不为0,等到TBCTR在某个值先增大到TBPRD在减小到0后(我用了增减模式),才能正式进入新一轮EPWM中断进行新的PI控制。我只用了一路EPWM,我的目标是在我退出的那一瞬间希望TBCTR的值为0,但是一直实现不了。谢谢了啊