你(们)好
我尝试使用F2.8069万的CBC模块。 我编程了PWM4A/B和PWM5A/B,以便在压实器COMP2A事件中关闭它们。 为满足应用需求,PWM4和PWM5的相位为45°。 比较器出现一次是在PWM4为正时,另一次是在PWM5为正时。 此处是配置代码的摘要。
我使用DacDrvCnf.c设置比较器。 Comparator2必须同时关闭两个PWM。
DacDrvCnf (2,电压,0,0);
PWM初始化
//*********************************************************
//为PWM4初始化
//*********************************************************
//根据比较器1输出定义事件(DCAEVT2)
(* ePWM[n]).DCTRIPSEL.bit.DCAHCOMPSEL = DC_COMP2OUT; // DCAH =比较器2输出
(*ePWM[n])。TZDCSEL.bit.DCAEVT2 = TZ_DCAH_HI;
//当比较器输出变高时)
(* ePWM[n]).DCACTL.bit.EVT2SRCSEL = DC_EVT_FLT;//DC_EVT2;
(* ePWM[n]).DCACT.Bit.EVT2FRCSYNCSEL = DC_EVT_Async;//
//启用DCAEVT2作为CBC源
(* ePWM[n]).TZsel.bit.DCAEVT2 = 1;/CBC
//我们希望DCAEVT1和DCBEVT1事件做什么?
(* ePWM[n]).TZCTL.bit.TZA = TZ_FORT_LO; // EPWMxA将变低
(* ePWM[n]).TZCTL.bit.TZB = TZ_FORT_LO; // EPWMxB将变低
(* ePWM[n]).TZEINT.Bit.DCAEVT2 = 1;//启用它
//===========================================================================================================================================
//事件过滤配置
(* ePWM[n]).DCFCTL.bit.SRCSEL = DC_SRC_DCAEVT2;
(* ePWM[n]).DCFCTL.bit.Blanke = DC_BLANK_ENE;
(* ePWM[n]).DCFCTL.bit.PULSESEL = DC_PULSESEL_ZERO;
(*ePWM[n])。DCFOFFSET = 2; //空白窗口偏移= CMPA (n+1)
(*ePWM[n])。DCFWINDW = 10; //空白窗口长度-初始值
//===========================================================================================================================================
//*********************************************************
//初始化PWM5
//*********************************************************
//根据比较器1输出定义事件(DCAEVT2)
(* ePWM[n+1]).DCTRIPSEL.bit.DCAHCOMPSEL = DC_COMP2OUT; // DCAH =比较器2输出
(* ePWM[n+1]).TZDCSEL.bit.DCAEVT2 = TZ_DCAH_HI; // DCAEVT1 = DCAH HIGH (将变为活动状态)
//当比较器输出变高时)
(* ePWM[n+1]).DCACTL.bit.EVT2SRCSEL = DC_EVT_FLT;//DC_EVT2;
(*ePWM[n+1]).DCACTL.bit.EVT2FRCSYNCSEL = DC_EVT_Async;//采用异步路径
//启用DCAEVT2作为CBC
(* ePWM[n+1]).TZSEL.bit.DCAEVT2 = 1;
//我们希望DCAEVT1和DCBEVT1事件做什么?
(* ePWM[n+1]).TZCTL.bit.TZA = TZ_FORT_LO; // EPWMxA将变低
(* ePWM[n+1]).TZCTL.bit.TZB = TZ_FORT_LO; // TZ_FORT_LO; // EPWMxB将变低
(*ePWM[n+1]).TZEINT.Bit.DCAEVT2 =1;//启用它
//===========================================================================================================================================
//事件过滤配置
(* ePWM[n+1]).DCFCTL.bit.SRCSEL = DC_SRC_DCAEVT2;
(* ePWM[n+1]).DCFCTL.bit.Blanke = DC_BLANK_ENABLE;
(* ePWM[n+1]).DCFCTL.bit.PULSESEL = DC_PULSESEL_ZERO;
(*ePWM[n+1])。DCFOFFSET = 2; //空白窗口偏移= CMPA (n+1)
(*ePWM[n+1])。DCFWINDW = 10; //空白窗口长度-初始值
//===========================================================================================================================================
EDIS;
和其他部分
__interrupt void epwm4_tz1_int_isr (void){
CountEvent++;
EALLOW;
EPwm4Regs.TZCLL.ALL = 0xFF;//清除标志
EDIS;
//确认此中断以接收来自组2的更多中断
PieCtrlRegs.PIEACK/bit.ACK4 = 1;
}
PWM5的代码相同。
=>中断正常工作。
=> PWM4和5的CBC标志,DCAEVT2标志和INT标志出现
我清除了它和CBC标志,但对我来说CBC应该自动重新激活PWM,而不需要它或清除标志,权限?
我想做的是关闭COMP2A事件上的PWM4 A/B和PWM5 A/B,但我希望PWM重新启动,以便在半期事件或期间事件(如果COMP事件明显消失)上继续循环,而不显示INTS或清除标志。
如何执行? 我希望我明白了...
感谢你的帮助
OL