大家好,我们遇到了2个ePWM模块之间的软件同步问题。 我们已使用以下代码初始化ePWM2和ePWM3:
// PWM2B,1KHz EPwm2Regs.TBCTL.bit.PRDLD = TB_shadow; EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_DOWN; EPwm2Regs.SYCTL.bit.PHTB= TB_enable;CTwm2Regs.PCCTL.bit.EPCCL_SE_DIV = DEV2.TB_DEV = EPmSION_SE_DEV = EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1; EPwm2Regs.TBPRD = 5万; //设置计时器周期,TBCLK / 5万 = 1ms --> 1kHz EPwm2Regs.TBPHS.bit.TBPHS = 0x0000; //相位为0 EPwm2Regs.TBCTR = 0x0000; //清除计数 器EPwm2Regs.CMPB.bit.CMPB = 2.5万; // Duty 50 % EPwm2Regs.AQCTLB.bit.PRD = AQ_SET; EPwm2Regs.AQCTLB.bit.CBB = AQ_CLEAR; EPwm2Regs.TBCTL2.bit.PRDLDSYNC = 2; EPwm2Regs.CMPCTL.bit.LOADBPWNC = 2; // SYMPWNC 2kHz EPwm3Regs.TBCTL.bit.PRDLD = TB_shadow; EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_DOWN; EPwm3Regs.TBCTL.bit.PHSEN = TB_enable;EPwm3Regs.CTCL.bit.PCNCOTB= EPw_DIV2.TB_DIV= EPwm3Regs.TBCTL.bit.CLKDIV = TB_DIV1; EPwm3Regs.TBPRD = 2.5万; //设置计时器周期,TBCLK / 5万 = 1ms --> 1kHz EPwm3Regs.TBPHS.bit.TBPHS = 0x0000; //相位为0 EPwm3Regs.TBCTR = 0x0000; //清除计数 器EPwm3Regs.CMPA.bit.CMPA = 1.25万; // Duty 50 % EPwm3Regs.AQCTLA.bit.PRD = AQ_SET; EPwm3Regs.AQCTLA.bit.CAD = ASYAQ_CLEAR; EPwm3Regs.TBCTL2.bit.PRDLDSYNC = 2; EPwm3Regs.CMPCTL.bit.LOADNC = 2;
在代码中的某个时刻,我们需要使用软件同步模式更新频率和占空比。 我们发布频率和软件同步的更改,如下所示:
EPwm2Regs.TBPRD = 2.5万; //设置计时器周期ePWM2B EPwm2Regs.CMPB.bit.CMPB = 1.25万;// Duty 50 % EPwm3Regs.TBPRD = 1.2万; //设置计时器周期ePWM3A EPwm3Regs.CMPA.bit.CMPA = 6000; // Duty 50 % EPwm2Regs.TBCTL.bit.SWFSYNC = 1;//相位软件同步
我们预期PWM信号从每个ePWM单元中的周期值开始,但仅ePWM2重新启动。ePWM3继续以相同频率进行。
有人能帮我们吗? 出什么问题了?