在我的应用中需要用到4路EPWM,同步输出, 我按照手册里面的方法和官方历程的方法进行了PWM的初始化,同步部分的程序如下:
EPwm1Regs.TBPHS.half.TBPHS = 0; // Phase is 0
EPwm2Regs.TBPHS.half.TBPHS = 0;
EPwm3Regs.TBPHS.half.TBPHS = 0;
EPwm4Regs.TBPHS.half.TBPHS = 0;
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading
EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE;
EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE;
EPwm4Regs.TBCTL.bit.PHSEN = TB_ENABLE;
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; //计数为0时输出同步信号
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; //同步信号输入
EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; //同步信号输入
EPwm4Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; //同步信号输入
EPwm2Regs.TBCTL.bit.PHSDIR = TB_UP; // 同步后递增
EPwm3Regs.TBCTL.bit.PHSDIR = TB_UP; // 同步后递增
EPwm4Regs.TBCTL.bit.PHSDIR = TB_UP; // 同步后递增
程序好像没啥问题,在实际运行时,EPWM1的计数器 TBCTR会比 其他三路的 TBCTR大2 ,这是怎么回事呢?反映到波形上就是PWM1超前其他路的PWM 不知道各位大神有没有遇到过这样的问题。请帮忙解决一下。
Brian Wang0:
不知道您是否有尝试过软件强制同步?
在我的应用中需要用到4路EPWM,同步输出, 我按照手册里面的方法和官方历程的方法进行了PWM的初始化,同步部分的程序如下:
EPwm1Regs.TBPHS.half.TBPHS = 0; // Phase is 0
EPwm2Regs.TBPHS.half.TBPHS = 0;
EPwm3Regs.TBPHS.half.TBPHS = 0;
EPwm4Regs.TBPHS.half.TBPHS = 0;
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading
EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE;
EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE;
EPwm4Regs.TBCTL.bit.PHSEN = TB_ENABLE;
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; //计数为0时输出同步信号
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; //同步信号输入
EPwm3Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; //同步信号输入
EPwm4Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; //同步信号输入
EPwm2Regs.TBCTL.bit.PHSDIR = TB_UP; // 同步后递增
EPwm3Regs.TBCTL.bit.PHSDIR = TB_UP; // 同步后递增
EPwm4Regs.TBCTL.bit.PHSDIR = TB_UP; // 同步后递增
程序好像没啥问题,在实际运行时,EPWM1的计数器 TBCTR会比 其他三路的 TBCTR大2 ,这是怎么回事呢?反映到波形上就是PWM1超前其他路的PWM 不知道各位大神有没有遇到过这样的问题。请帮忙解决一下。
LEI BO:
回复 Brian Wang0:
我在打开PWM开始发波的时候执行过一次
EPwm1Regs.TBCTL.bit.SWFSYNC=1; EPwm2Regs.TBCTL.bit.SWFSYNC=1; EPwm3Regs.TBCTL.bit.SWFSYNC=1; EPwm4Regs.TBCTL.bit.SWFSYNC=1;
在PWM正常运行的时候没有执行强制同步,问题还是存在 。难道每个周期都需要进行软件强制同步?
在运行过程中点暂停 依然是 EPWM1 的TBCTR为:
其他三路的TBCTR数值一样为: