TMS320F280049C: PWM实现CBC(逐周期)保护

Part Number: TMS320F280049C

buck项目,PCMC模式(峰值电流),

需要用到MCU的比较器,自动比较电流达到阈值,则关闭PWM波,等到下一个PWM周期,再自动发新的PWM波

这需要用PWM的CBC(逐周期)保护功能

请问下面的初始化代码有问题吗?

调试时,观测CCS上的PWM寄存器值,不符合预期(见下面的图, 按理应该是CBC字段变1,为什么这里却是DCAEVT1变1 )

 

=========================================================

void SetupProtectionForOnePwm(uint32_t pwmBase, EPWM_DigitalCompareTripInput tripSource)
{
    // Enable trip4 code
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    //Trip 4 is the input to the DCAHCOMPSEL
    EPWM_selectDigitalCompareTripInput(pwmBase, tripSource, EPWM_DC_TYPE_DCAH);
    EPWM_setTripZoneDigitalCompareEventCondition(pwmBase, EPWM_TZ_DC_OUTPUT_A1, EPWM_TZ_EVENT_DCXH_HIGH);
    EPWM_setDigitalCompareEventSource(pwmBase, EPWM_DC_MODULE_A, EPWM_DC_EVENT_1, EPWM_DC_EVENT_SOURCE_FILT_SIGNAL);
    EPWM_setDigitalCompareEventSyncMode(pwmBase, EPWM_DC_MODULE_A, EPWM_DC_EVENT_1,EPWM_DC_EVENT_INPUT_NOT_SYNCED);
    // DCxEVTn管多个周期,一旦DCxEVTn标志被置上后,标志不会被自动清除,需要软件去把标志清除
    //EPWM_enableTripZoneSignals(pwmBase, EPWM_TZ_SIGNAL_DCAEVT1);

    EPWM_enableTripZoneSignals(pwmBase, EPWM_TZ_SIGNAL_CBC6);  // Emulator Stop
    //EPWM_enableTripZoneSignals(pwmBase, EPWM_TZ_SIGNAL_OSHT1); // one-shot trip1

    //
    // TZA events can force EPWMxA
    // TZB events can force EPWMxB
    //
    //////////////////////////////////////////////////////////////////////////////////////////////////////
    EPWM_setTripZoneAction(pwmBase, EPWM_TZ_ACTION_EVENT_TZA, EPWM_TZ_ACTION_LOW);
    EPWM_setTripZoneAction(pwmBase, EPWM_TZ_ACTION_EVENT_TZB, EPWM_TZ_ACTION_LOW);
    //////////////////////////////////////////////////////////////////////////////////////////////////////

    // Clear any spurious trip
    EPWM_clearTripZoneFlag(pwmBase, (EPWM_TZ_FLAG_OST | EPWM_TZ_FLAG_CBC |
                                     EPWM_TZ_FLAG_DCAEVT1|
                                     EPWM_TZ_FLAG_DCBEVT1));

  #if 0
    // 这里不要触发事件,在调用setupBoardProtection之后,会紧接着用软件启动保护或调用DoBoardProtect
    // 刚开始的时候,启动保护,
    // 等板子的状态被更新为正常工作(UpdateBoardStatus_New)之后,会撤销保护(先EnableHbridgePwm,再EnableFlybackPwm)
    for (i = 0; i < inPwmBasesCount; i++) {
        EPWM_forceTripZoneEvent(inPwmBases[i].pwmBase, EPWM_TZ_FORCE_EVENT_OST);
    }
  #endif
}

 

调试时,观测CCS上的PWM寄存器值,不符合预期

按理应该是CBC字段变1

为什么这里却是DCAEVT1变1

image.png