Part Number: TMS320F28027
项目中使用了ePWM1和 ePWM2的PWMA 来控制两相PFC, 脉冲频率200KHz, 相位相差180度。有启用高分辨率模式。两相PFC在闭环控制时有两个问题。
1.有极窄的脉冲产生。窄脉冲位于两个正常脉冲的中间。为何有此信号?

2.比较器有输出跳闸信号时,脉冲的下降沿为何不陡跷?下降沿的旁边有时还有尖脉冲,这又是为什么呢?

初始化代码如下:
PWM_setCounterMode(pwm, PWM_CounterMode_UpDown); // Count up
PWM_setPeriod(pwm, EPWM_PFC_TIMER_TBPRD); // Set timer period
PWM_disableCounterLoad(pwm); // Disable phase loading
PWM_setCount(pwm, 0x0000); // Clear counter
PWM_setPhase(pwm, EPWM_PFC_TIMER_TBPRD>>1);//A相超前 B相滞后 //pwm == myPwm1 ? 0 : EPWM_PFC_TIMER_TBPRD
PWM_setPhaseDir(pwm,pwm == myPwm1 ? PWM_PhaseDir_CountUp : PWM_PhaseDir_CountDown);
PWM_setSyncMode(pwm, PWM_SyncMode_EPWMxSYNC);
PWM_enableHrPhaseSync(pwm); //得放在PWM_setSyncMode的后面
PWM_enableCounterLoad(pwm);
PWM_setHighSpeedClkDiv(pwm, PWM_HspClkDiv_by_1);
PWM_setClkDiv(pwm, PWM_ClkDiv_by_1);
PWM_setRunMode(myPwm1, PWM_RunMode_FreeRun);
PWM_setShadowMode_CmpA(pwm, PWM_ShadowMode_Shadow);
PWM_setShadowMode_CmpB(pwm, PWM_ShadowMode_Shadow);
PWM_setLoadMode_CmpA(pwm, PWM_LoadMode_Zero);
PWM_setLoadMode_CmpB(pwm, PWM_LoadMode_Zero);
PWM_setCmpA(pwm, EPWM_PFC_TIMER_TBPRD); // Set compare A value
PWM_setCmpB(pwm, EPWM_PFC_TIMER_TBPRD); // Set Compare B value
PWM_setCmpAHr(pwm, 0);
PWM_setActionQual_Zero_PwmA(pwm, PWM_ActionQual_Clear);
PWM_setActionQual_Zero_PwmB(pwm, PWM_ActionQual_Clear);
PWM_setActionQual_CntUp_CmpA_PwmA(pwm, PWM_ActionQual_Set);
PWM_setActionQual_CntUp_CmpB_PwmB(pwm, PWM_ActionQual_Set);
PWM_setActionQual_CntDown_CmpA_PwmA(pwm, PWM_ActionQual_Clear);
PWM_setActionQual_CntDown_CmpB_PwmB(pwm, PWM_ActionQual_Clear);
PWM_setHrEdgeMode(pwm, PWM_HrEdgeMode_Falling);
PWM_setHrControlMode(pwm, PWM_HrControlMode_Duty);
PWM_setHrShadowMode(pwm, PWM_HrShadowMode_CTR_EQ_0);//
PWM_DigitalCompare_InputSel_e ein = pwm == myPwm1 ? \
PWM_DigitalCompare_InputSel_COMP1OUT : PWM_DigitalCompare_InputSel_COMP2OUT;
PWM_setDigitalCompareInput(pwm, PWM_DigitalCompare_A_High, ein);
PWM_setDigitalCompareInput(pwm, PWM_DigitalCompare_A_Low, ein);
PWM_setTripZoneDCEventSelect_DCAEVT1(pwm, PWM_TripZoneDCEventSel_DCxHH_DCxLX);
PWM_setDigitalCompareAEvent1(pwm, false, true, false, false);
PWM_enableTripZoneSrc(pwm, PWM_TripZoneSrc_CycleByCycle_CmpA);
//DCBEVT1 用于强制跳闸 PWM_TripZoneSrc_OneShot_CmpB
PWM_setDigitalCompareInput(pwm, PWM_DigitalCompare_B_High, ein);
PWM_setDigitalCompareInput(pwm, PWM_DigitalCompare_B_Low, ein);
PWM_setTripZoneDCEventSelect_DCBEVT1(pwm, PWM_TripZoneDCEventSel_DCxHH_DCxLX);
PWM_setDigitalCompareAEvent2(pwm, false, true);
PWM_enableTripZoneSrc(pwm, PWM_TripZoneSrc_CycleByCycle_CmpB);
PWM_setTripZoneState_TZA(pwm, PWM_TripZoneState_EPWM_Low);
PWM_setTripZoneState_TZB(pwm, PWM_TripZoneState_EPWM_Low);
//设置触发信号(ADC转换)
PWM_setSocAPulseSrc(pwm, PWM_SocPulseSrc_CounterEqualPeriod);//PWM_SocPulseSrc_CounterEqualCmpAIncr
PWM_setSocAPeriod(pwm, PWM_SocPeriod_FirstEvent); //
PWM_enableSocAPulse(pwm); // Enable SOC on A group PWM_SocPulseSrc_CounterEqualZero