This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F280049C:交错式图腾柱 PFC 的峰值电流模式控制

Guru**** 2560390 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1343699/tms320f280049c-peak-current-mode-control-for-interleaved-totem-pole-pfc

器件型号:TMS320F280049C

您好!

我想对交错图腾柱 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);