您好,
我正在将Piccolo (TMS320F2.8035万NT CA-31AVKVW G4)与CCS Vers.CPU 7.4 0 (以及用于CPU和CLA的C代码)配合使用。 PWM1,2和3正在运行
具有相同频率(即相同的TBPRD值)并生成三相信号。 PWM1是主设备,PWM2由PWM1同步
(相对于tp PWM1,滞后120°),PWM3与PWM2同步(相对于PWM2,滞后120°)。
当系统正在运行并且我想更改PWM频率(新的TBPRD和TBPHS值)时,我在CPU中使用以下过程,它工作正常:
EALLOW;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC =0; //停止所有TB时钟,需要EALLOW
EPwm1Regs.TBPRD = u2a.wm_tbprd;//设置 新的期间值
EPwm2Regs.TBPRD = u2a.wm_tbprd;
EPwm3Regs.TBPRD = u2a.wm_tbprd;
EPwm2Regs.TBPHS.Half.TBPHS = u2a.PWM_tbphs;//设置 新的相位值
EPwm3Regs.TBPHS.Half.TBPHS = u2a.pwm_tbphs;
EPwm1Regs.TBCTR = 0x0000;//清除计数器
EPwm2Regs.TBCTR = 0x0000;
EPwm3Regs.TBCTR = 0x0000;
SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC =1; //开始,需要EALLOW
EDIS;
另一种方法是将代码放入CLA任务并在其中执行,用__meallow()/__medIS()替换EALLOW/EDIS。
不幸的是,这不起作用(PWM1输出正常,但PWM2输出为0,PMW3输出的相位通常不正确)。
如果我在“SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC =0;”命令后面放置一个无限循环,则激活频率更改(这会导致无限循环) ,然后
检查调试器中的TBCLKSYNC位,然后如果我在CPU中执行代码,我看到0 (应该看到的),如果我执行,我看到1
CLA中的代码。 我的代码中是否存在任何不允许的内容?
非常感谢您提出的有用建议,
Leo