您好!
我想对交错图腾柱 PFC 执行峰值电流模式控制。 但逐周期峰值电流控制无法正常工作。 在交错 PFC 中、我对一个相位使用 CMPSS1、对另一个相位使用 CMPSS2。 此外、在每个 CMPSS 中、我对正电网电压使用高比较器、对负电网电压使用低比较器。 然后、每个 CMPSS 都使用组合跳闸连接到 ePWM。 我的 CMPSS 和 EPWM 设置 如下所示。 此外、我 在电网电压过零区域将 EPWMA 和 EPWMB 与100kHz ISR 交换。 对于开环操作、我将常数值加载到 DAC 中。 但代码中未显示任何反应。
您能 检查我的代码是否正确吗?
针对 CMPSS;
void setupPCMCCMPSS (void)
{
CMPSS_enableModule (PCMC_IL1_CMPSS_BASE);
CMPSS_enableModule (PCMC_IL2_CMPSS_BASE);
CMPSS_CONFIGHighComparator (PCMC_IL1_CMPSS_BASE、CMPSS_INSRC_DAC);
CMPSS_CONFIGHighComparator (PCMC_IL2_CMPSS_BASE、CMPSS_INSRC_DAC);
CMPSS_CONFIGLowComparator (PCMC_IL1_CMPSS_BASE、CMPSS_INSRC_DAC | CMPSS_INV_INVERRIDE);
CMPSS_CONFIGLowComparator (PCMC_IL2_CMPSS_BASE、CMPSS_INSRC_DAC | CMPSS_INV_INVERRIDE);
ASysCtl_selectCMPHPMUX (PCMC_IL1_CMPSS_ASYSCTRL_CMPHPMUX、
PCMC_IL1_CMPSS_ASYSCTRL_MUX_VALUE);
ASysCtl_selectCMPHPMUX (PCMC_IL2_CMPSS_ASYSCTRL_CMPHPMUX、
PCMC_IL2_CMPSS_ASYSCTRL_MUX_VALUE);
ASysCtl_selectCMPLPMUX (PCMC_IL1_CMPSS_ASYSCTRL_CMPLPMUX、
PCMC_IL1_CMPSS_ASYSCTRL_MUX_VALUE);
ASysCtl_selectCMPLPMUX (PCMC_IL2_CMPSS_ASYSCTRL_CMPLPMUX、
PCMC_IL2_CMPSS_ASYSCTRL_MUX_VALUE);
CMPSS_CONFIG消 隐(PCMC_IL1_CMPSS_BASE、2);
CMPSS_CONFIG消 隐(PCMC_IL2_CMPSS_BASE、3);
CMPSS_enable消 隐(PCMC_IL1_CMPSS_BASE);
CMPSS_enable消 隐(PCMC_IL2_CMPSS_BASE);
CMPSS_CONFIGDAC (PCMC_IL1_CMPSS_BASE、(CMPSS_DACVAL_PWMSYNC | CMPSS_DACREF_VDDA | CMPSS_DACSRC_SHDW);
CMPSS_CONFIGDAC (PCMC_IL2_CMPSS_BASE、(CMPSS_DACVAL_PWMSYNC | CMPSS_DACREF_VDDA | CMPSS_DACSRC_Shdw));
CMPSS_setDACValueHigh (PCMC_IL1_CMPSS_BASE、2048);
CMPSS_setDACValueHigh (PCMC_IL2_CMPSS_BASE、2048);
CMPSS_setDACValueLow (PCMC_IL1_CMPSS_BASE、2048);
CMPSS_setDACValueLow (PCMC_IL2_CMPSS_BASE、2048);
CMPSS_configOutputsHigh (PCMC_IL1_CMPSS_BASE、CMPSS_TRIP_ASYNC_COMP);
CMPSS_configOutputsHigh (PCMC_IL2_CMPSS_BASE、CMPSS_TRIP_ASYNC_COMP);
CMPSS_configOutputsLow (PCMC_IL1_CMPSS_BASE、CMPSS_TRIP_ASYNC_COMP);
CMPSS_configOutputsLow (PCMC_IL2_CMPSS_BASE、CMPSS_TRIP_ASYNC_COMP);
CMPSS_clearFilterLatchHigh (PCMC_IL1_CMPSS_BASE);
CMPSS_clearFilterLatchHigh (PCMC_IL2_CMPSS_BASE);
CMPSS_clearFilterLatchLow (PCMC_IL1_CMPSS_BASE);
CMPSS_clearFilterLatchLow (PCMC_IL2_CMPSS_BASE);
}
针对 ePWM;
void setup_ILC_PFC_FBPWM (uint32_t base1、uint32_t BASE2、uint32_t base3、
uint16_t PWM_PERIOD_TICK、
uint16_t pwm_db_ticks_ls、uint16_t pwm_db_ticks_hs)
{
ePWM_setPeriodLoadMode (base1、ePWM_Period_shadow_load);
ePWM_setTimeBasePeriod (base1、PWM_PERIOD_TICK - 1);
EPWM_setTimeBaseCounter (base1、0);
EPWM_setPhaseShift (base1、0);
EPWM_setTimeBaseCounterMode (base1、EPWM_COUNTER_MODE_UP);
ePWM_setClockPrescaler (base1、ePWM_CLOCK_DIVIDER_1、ePWM_HSCLOCK_DIVIDER_1);
EPWM_setCounterCompareValue (base1、epwm_counter_compare_A、2);
EPWM_disableCounterCompareShadowLoadMode (base1、EPWM_COUNTER_COMPARE_A);
HWREGH (base1 + ePWM_O_AQCTLA)=0;
EPWM_disablePhaseShiftLoad (base1);
//ePWM_setSyncOutPulseMode (base1、ePWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);
ePWM_setPeriodLoadMode (BASE2、ePWM_Period_shadow_load);
ePWM_setTimeBasePeriod (BASE2、PWM_PERIOD_TICK - 1);
EPWM_setTimeBaseCounter (base2、0);
EPWM_setPhaseShift (base2、0);
EPWM_setTimeBaseCounterMode (BASE2、EPWM_COUNTER_MODE_UP);
ePWM_setClockPrescaler (BASE2、ePWM_CLOCK_DIVIDER_1、ePWM_HSCLOCK_DIVIDER_1);
ePWM_setPeriodLoadMode (base3、ePWM_Period_shadow_load);
ePWM_setTimeBasePeriod (base3、PWM_PERIOD_TICK - 1);
EPWM_setTimeBaseCounter (base3、0);
EPWM_setPhaseShift (base3、0);
EPWM_setTimeBaseCounterMode (base3、EPWM_COUNTER_MODE_UP);
ePWM_setClockPrescaler (base3、ePWM_CLOCK_DIVIDER_1、ePWM_HSCLOCK_DIVIDER_1);
HWREGH (BASE2 + ePWM_O_AQCTLA)=0;
HWREGH (base3 + ePWM_O_AQCTLA)=0;
EPWM_setActionQualifierAction (BASE2、EPWM_AQ_OUTPUT_A、
ePWM_AQ_OUTPUT_LOW、ePWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
EPWM_setActionQualifierAction (base3、EPWM_AQ_OUTPUT_A、
ePWM_AQ_OUTPUT_LOW、ePWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
EPWM_setActionQualifierAction (BASE2、EPWM_AQ_OUTPUT_B、
ePWM_AQ_OUTPUT_HIGH、ePWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
EPWM_setActionQualifierAction (base3、EPWM_AQ_OUTPUT_B、
ePWM_AQ_OUTPUT_HIGH、ePWM_AQ_OUTPUT_ON_TIMEBASE_ZERO);
EPWM_setActionQualifierAction (BASE2、EPWM_AQ_OUTPUT_A、
ePWM_AQ_OUTPUT_HIGH、ePWM_AQ_OUTPUT_ON_T1_COUNT_UP);
EPWM_setActionQualifierAction (base3、EPWM_AQ_OUTPUT_A、
ePWM_AQ_OUTPUT_HIGH、ePWM_AQ_OUTPUT_ON_T2_COUNT_UP);
EPWM_setActionQualifierAction (BASE2、EPWM_AQ_OUTPUT_B、
ePWM_AQ_OUTPUT_LOW、ePWM_AQ_OUTPUT_ON_T1_COUNT_UP);
EPWM_setActionQualifierAction (base3、EPWM_AQ_OUTPUT_B、
ePWM_AQ_OUTPUT_LOW、ePWM_AQ_OUTPUT_ON_T2_COUNT_UP);
EPWM_setActionQualifierT1TriggerSource (BASE2、
EPWM_AQ_TRIGG_EVENT_TRIG_DC_EVTFILT);
EPWM_setActionQualifierT2TriggerSource (base3、
EPWM_AQ_TRIGG_EVENT_TRIG_DC_EVTFILT);
XBAR_enableEPWMMUX (XBAR_TRIP5、0x00);
XBAR_enableEPWMMUX (XBAR_TRIP7、0x00);
XBAR_setEPWMMuxConfig (XBAR_TRIP5、
PCMC_CMPSS1_XBAR_MUX_VAL_1);
XBAR_setEPWMMuxConfig (XBAR_TRIP7、
PCMC_CMPSS2_XBAR_MUX_VAL_1);
XBAR_enableEPWMMUX (XBAR_TRIP5、
PCMC_CMPSS1_XBAR_MUX_1);
XBAR_enableEPWMMUX (XBAR_TRIP7、
PCMC_CMPSS2_XBAR_MUX_1);
ePWM_selectDigitalCompareTripInput (BASE2、ePWM_DC_TRIP_COUNCTION、ePWM_DC_TYPE_DCAh);
ePWM_selectDigitalCompareTripInput (BASE2、ePWM_DC_TRIP_COUNCTION、ePWM_DC_TYPE_DCAL);
ePWM_selectDigitalCompareTripInput (BASE2、ePWM_DC_TRIP_COUNCTION、ePWM_DC_TYPE_DCBH);
ePWM_selectDigitalCompareTripInput (BASE2、ePWM_DC_TRIP_COUNCTION、ePWM_DC_TYPE_DCBL);
ePWM_selectDigitalCompareTripInput (base3、ePWM_DC_TRIP_COLUTION、ePWM_DC_TYPE_DCAh);
ePWM_selectDigitalCompareTripInput (base3、ePWM_DC_TRIP_COUNCTION、ePWM_DC_TYPE_DCAL);
ePWM_selectDigitalCompareTripInput (base3、ePWM_DC_TRIP_CONCOMP、ePWM_DC_TYPE_DCBH);
ePWM_selectDigitalCompareTripInput (base3、ePWM_DC_TRIP_COLUTION、ePWM_DC_TYPE_DCBL);
ePWM_enableDigitalCompareTripCombinationInput (BASE2、ePWM_DC_combination_TRIPIN5 | ePWM_DC_combinational_TRIPIN7、ePWM_DC_TYPE_DCAH);
ePWM_enableDigitalCompareTripCombinationInput (BASE2、ePWM_DC_combination_TRIPIN5 | ePWM_DC_combinational_TRIPIN7、ePWM_DC_TYPE_DCAL);
ePWM_enableDigitalCompareTripCombinationInput (BASE2、ePWM_DC_combination_TRIPIN5 | ePWM_DC_combinational_TRIPIN7、ePWM_DC_TYPE_DCBH);
ePWM_enableDigitalCompareTripCombinationInput (BASE2、ePWM_DC_combination_TRIPIN5 | ePWM_DC_combinational_TRIPIN7、ePWM_DC_TYPE_DCBL);
ePWM_enableDigitalCompareTripCombinationInput (base3、ePWM_DC_combination_TRIPIN5 | ePWM_DC_combination_TRIPIN7、ePWM_DC_TYPE_DCAH);
ePWM_enableDigitalCompareTripCombinationInput (base3、ePWM_DC_combination_TRIPIN5 | ePWM_DC_combination_TRIPIN7、ePWM_DC_TYPE_DCAL);
ePWM_enableDigitalCompareTripCombinationInput (base3、ePWM_DC_combination_TRIPIN5 | ePWM_DC_combination_TRIPIN7、ePWM_DC_TYPE_DCBH);
ePWM_enableDigitalCompareTripCombinationInput (base3、ePWM_DC_combination_TRIPIN5 | ePWM_DC_combination_TRIPIN7、ePWM_DC_TYPE_DCBL);
EPWM_setTripZoneDigitalCompareEventCondition (BASE2、
ePWM_TZ_DC_OUTPUT_A2、
EPWM_TZ_EVENT_DCXH_HIGH);
EPWM_setTripZoneDigitalCompareEventCondition (BASE2、
EPWM_TZ_DC_OUTPUT_B2、
EPWM_TZ_EVENT_DCXH_HIGH);
EPWM_setTripZoneDigitalCompareEventCondition (base3、
ePWM_TZ_DC_OUTPUT_A2、
EPWM_TZ_EVENT_DCXL_HIGH);
EPWM_setTripZoneDigitalCompareEventCondition (base3、
EPWM_TZ_DC_OUTPUT_B2、
EPWM_TZ_EVENT_DCXL_HIGH);
EPWM_setDigitalCompareEventSource (BASE2、EPWM_DC_MODULE_A、EPWM_DC_EVENT_2、
EPWM_DC_EVENT_SOURCE_FILT_SIGNAL);
EPWM_setDigitalCompareEventSource (base3、EPWM_DC_MODULE_A、EPWM_DC_EVENT_2、
EPWM_DC_EVENT_SOURCE_FILT_SIGNAL);
EPWM_setDigitalCompareEventSource (BASE2、EPWM_DC_MODULE_B、EPWM_DC_EVENT_2、
EPWM_DC_EVENT_SOURCE_FILT_SIGNAL);
EPWM_setDigitalCompareEventSource (base3、EPWM_DC_MODULE_B、EPWM_DC_EVENT_2、
EPWM_DC_EVENT_SOURCE_FILT_SIGNAL);
EPWM_setDigitalCompareEventSyncMode (BASE2、EPWM_DC_MODULE_A、
EPWM_DC_EVENT_2、
EPWM_DC_EVENT_INPUT_NOT_SYSCONBED);
EPWM_setDigitalCompareEventSyncMode (base3、EPWM_DC_MODULE_A、
EPWM_DC_EVENT_2、
EPWM_DC_EVENT_INPUT_NOT_SYSCONBED);
EPWM_setDigitalCompareEventSyncMode (BASE2、EPWM_DC_MODULE_B、
EPWM_DC_EVENT_2、
EPWM_DC_EVENT_INPUT_NOT_SYSCONBED);
EPWM_setDigitalCompareEventSyncMode (base3、EPWM_DC_MODULE_B、
EPWM_DC_EVENT_2、
EPWM_DC_EVENT_INPUT_NOT_SYSCONBED);
EPWM_enableTripZoneSignals (BASE2、EPWM_TZ_SIGNAL_DCAEVT2 | EPWM_TZ_SIGNAL_DCBEVT2);
EPWM_enableTripZoneSignals (base3、EPWM_TZ_SIGNAL_DCAEVT2 | EPWM_TZ_SIGNAL_DCBEVT2);
ePWM_enableDigitalCompareBlankingWindow (BASE2);
ePWM_enableDigitalCompareBlankingWindow (base3);
EPWM_setDigitalCompareFilterInput (BASE2、EPWM_DC_WINDOW_SOURCE_DCAEVT2);
EPWM_setDigitalCompareFilterInput (base3、EPWM_DC_WINDOW_SOURCE_DCAEVT2);
EPWM_setDigitalCompareFilterInput (BASE2、EPWM_DC_WINDOW_SOURCE_DCBEVT2);
EPWM_setDigitalCompareFilterInput (base3、EPWM_DC_WINDOW_SOURCE_DCBEVT2);
ePWM_setDigitalCompareBlankingEvent (BASE2、ePWM_DC_WINDOW_START_TBCTR_ZERO);
ePWM_setDigitalCompareBlankingEvent (base3、ePWM_DC_Window_START_TBCTR_ZERO);
EPWM_setDigitalCompareWindowOffset (BASE2、PWM_PERIOD_TICKs - 5);
EPWM_setDigitalCompareWindowOffset (base3、PWM_PERIOD_TICKs - 5);
EPWM_setDigitalCompareWindowLength (BASE2、10);
EPWM_setDigitalCompareWindowLength (base3、10);
EPWM_setTripZoneAction (BASE2、EPWM_TZ_ACTION_EVENT_TZA、
EPWM_TZ_ACTION_LOW);
ePWM_setTripZoneAction (BASE2、ePWM_TZ_ACTION_EVENT_TZB、
EPWM_TZ_ACTION_LOW);
EPWM_setTripZoneAction (base3、EPWM_TZ_ACTION_EVENT_TZA、
EPWM_TZ_ACTION_LOW);
EPWM_setTripZoneAction (base3、EPWM_TZ_ACTION_EVENT_TZB、
EPWM_TZ_ACTION_LOW);
ePWM_selectCycleByCycleTripZoneClearEvent (BASE2、
EPWM_TZ_CBC_PULSE_CLR_CNTR_ZERO _PERIOD);
EPWM_selectCycleByCycleTripZoneClearEvent (base3、
EPWM_TZ_CBC_PULSE_CLR_CNTR_ZERO _PERIOD);
EPWM_enableTripZoneInterrupt (BASE2、EPWM_TZ_INTERRUPT_DCAEVT2 | EPWM_TZ_INTERRUPT_DCBEVT2);
EPWM_enableTripZoneInterrupt (base3、EPWM_TZ_INTERRUPT_DCAEVT2 | EPWM_TZ_INTERRUPT_DCBEVT2);
ePWM_clearTripZoneFlag (BASE2、(ePWM_TZ_INTERRUPT_OST | ePWM_TZ_SIGNAL_DCBEVT1));
ePWM_clearTripZoneFlag (base3、(ePWM_TZ_INTERRUPT_OST | ePWM_TZ_SIGNAL_DCBEVT1));
//死区发生器
EPWM_setDeadBandControlShadowLoadMode (BASE2、EPWM_DB_LOAD_ON_CNTR_ZERO);
EPWM_setDeadBandControlShadowLoadMode (base3、EPWM_DB_LOAD_ON_CNTR_ZERO);
ePWM_setRisingEdgeDelayCountShadowLoadMode (BASE2、
EPWM_RED_LOAD_ON_CNTR_PERIOD);
EPWM_setRisingEdgeDelayCountShadowLoadMode (base3、
EPWM_RED_LOAD_ON_CNTR_PERIOD);
EPWM_setFallingEdgeDelayCountShadowLoadMode (BASE2、
EPWM_FED_LOAD_ON_CNTR_ZERO);
EPWM_setFallingEdgeDelayCountShadowLoadMode (base3、
EPWM_FED_LOAD_ON_CNTR_ZERO);
//
//高电平有效互补 PWM -设置死区
//
EPWM_setDeadBandCounterClock (BASE2、EPWM_DB_COUNTER_CLOCK_FULL_CYCLE);
ePWM_setRisingEdgeDelayCount (BASE2、PWM_db_tics_hs);
EPWM_setFallingEdgeDelayCount (BASE2、PWM_db_ticks_hs);
ePWM_setDeadBandDelayMode (BASE2、ePWM_DB_RED、TRUE);
ePWM_setDeadBandDelayMode (BASE2、ePWM_DB_FED、true);
ePWM_setRisingEdgeDeadBandDelayInput (BASE2、ePWM_DB_INPUT_EPWMA)
ePWM_setFallingEdgeDeadBandDelayInput (BASE2、ePWM_DB_INPUT_EPWMA);
EPWM_setDeadBandDelayPolarity (BASE2、EPWM_DB_FED、
ePWM_DB_POLICY_ACTIVE_LOW);
EPWM_setDeadBandDelayPolarity (BASE2、EPWM_DB_RED、
EPWM_DB_POLARY_ACTIVE_HIGH);
EPWM_setDeadBandCounterClock (base3、EPWM_DB_COUNTER_CLOCK_FULL_CYCLE);
epwm_setRisingEdgeDelayCount (base3、pwm_db_ticks_hs);
EPWM_setFallingEdgeDelayCount (base3、PWM_db_ticks_hs);
ePWM_setDeadBandDelayMode (base3、ePWM_DB_RED、true);
ePWM_setDeadBandDelayMode (base3、ePWM_DB_FED、true);
ePWM_setRisingEdgeDeadBandDelayInput (base3、ePWM_DB_Input_EPWMA);
ePWM_setFallingEdgeDeadBandDelayInput (base3、ePWM_DB_INPUT_EPWMA);
EPWM_setDeadBandDelayPolarity (base3、EPWM_DB_FED、
ePWM_DB_POLICY_ACTIVE_LOW);
EPWM_setDeadBandDelayPolarity (base3、EPWM_DB_RED、
EPWM_DB_POLARY_ACTIVE_HIGH);
EPWM_disablePhaseShiftLoad (base1);
ePWM_setSyncOutPulseMode (base1、ePWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);
EPWM_enablePhaseShiftLoad (BASE2);
ePWM_setSyncOutPulseMode (BASE2、ePWM_SYNC_OUT_PULSE_ON_SOFTWARE);
EPWM_setPhaseShift (BASE2、2);
ePWM_setCountModeAfterSync (BASE2、ePWM_COUNT_MODE_UP_AFTER_SYNC);
EPWM_enablePhaseShiftLoad (base3);
ePWM_setSyncOutPulseMode (base3、ePWM_SYNC_OUT_PULSE_ON_SOFTWARE);
EPWM_setPhaseShift (base3、
(2 +(uint16_t)(((float) PWM_PERIOD_TICKs /(float)(2.0))));
ePWM_setCountModeAfterSync (base3、ePWM_COUNT_MODE_UP_AFTER_SYNC);
EPWM_setActionQualifierContSWForceShadowMode (base1、
EPWM_AQ_SW_SH_LOAD_ON_CNTR_ZERO);
EPWM_setActionQualifierContSWForceShadowMode (BASE2、
EPWM_AQ_SW_SH_LOAD_ON_CNTR_ZERO);
EPWM_setActionQualifierContSWForceShadowMode (base3、
EPWM_AQ_SW_SH_LOAD_ON_CNTR_ZERO);
}