工具/软件:Code Composer Studio
大家好、
我有三个级联 ePWM 模块、它们彼此同步并去相。 我希望第一个 PWM 与软件同步
更具体地说:每次 PLL 产生的角度复位时、我想在 ePWM1中创建一个软件事件、然后它将相应地与另外两个 ePWM 同步。
PLL 本身和复位功能在 C++中编程。
我还编写了一个用于设置 PWM 的类。 Voila:
触发::触发(volatile struct ePWM_regs * APwmRegs、unsigned int PWM_PRD、unsigned int PWM_PHASE、bool PWM_SYNC) { ThePwm=APwmRegs; EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=0; //禁用 ePWM 时钟 EDIS; thePwm->TBPRD=PWM_PRD; //设置计时器周期 ThePwm->TBCTR = 0; //将 TB 计数器清零重置为0 ThePwm->CMPA.half.CMPA = ThePwm->TBPRD; // CMPA 的初始占空比(RS+、ST+、TR+) PWM->CMPB = 0; // CMPB 的初始占空比(Rs-、ST-、TR-) thePwm->TBPHS.half.TBPHS = PWM_PHASE; //相位寄存器值 thePwm->TBCTL.bit.CTRMODE=TB_COUNT_UP; //将三角波形设置为向上计数 thePwm->TBCTL.bit.PHSEN = TB_ENABLE; //启用加载相位寄存器值 thePwm->TBCTL.bit.SYNCOSEL=TB_SYNC_IN; //同步 thePwm->TBCTL.bit.PRDLD=TB_SHADOW; //为句点寄存器启用影子寄存器 pwm->CMPCTL.bit.SHDWAMODE=CC_SHADOD; //为 CMPA 启用阴影 pwm->CMPCTL.bit.SHDWBMODE=CC_SHADOD; //为 CMPB 启用阴影 pwm->CMPCTL.bit.LOADAMODE=CC_CTR_ZERO; // ePWMA 的加载基准-在零 pwm->CMPCTL.bit.LOADBMODE=CC_CTR_ZERO; // ePWMB 的加载基准-在零 //TBCLK = SYSCLKOUT /(HSPCLKDIV * CLKDIV)= 300MHz /(12 * 8)= 3.125MHz ThePwm->TBCTL.bit.HSPCLKDIV = 0x6; //HSPCLKDIV:12分频 PWM->TBCTL.bit.CLKDIV = 0x3; // CLKDIV:除以8 //禁用操作限定符- AQ_NO_ACTION thePwm->AQCTLA.bit.CAU = AQ_NO_ACTION; thePwm->AQCTLB.bit.CBU = AQ_NO_ACTION; pwm->ETSEL.bit.inten = 1; //启用 ePWM 中断 thePwm->ETPS.bit.INTPRD = et_1st; //生成中断所需的事件数(此处:每个事件) thePwm->ETSEL.bit.INTSEL = et_CTR_ZERO; //活动时触发零中断 PWM->ETCLR.bit.INT = 1; //清除 INT 标志(如果有) EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=1; //启用 ePWM 时钟 EDIS; }
空触发::同步(bool zeroCrossing_) { ThePwm->TBCTL.bit.SWFSYNC = zeroCrossing_; //过零是每次角度复位(再次从2pi 到0) 时返回1或0的函数}
您能否说明我未能创建 SWFSYNC 事件的可能原因?