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.

TMS320F280049: 使用CMPSS触发EPWM的TZ保护失败

Part Number: TMS320F280049

您好!我在试图用当前设备配置CMPSS,以触发epwm的TZ保护,但始终无法成功触发。

触发CMPSS比较器的外部引脚为C0:

我只需要配置高触发,也就是当引脚采集电压高于设定值时触发TZ保护。CMPSS相关的宏定义如下:

#define PVA_VDS_CMPSS_BASE                              CMPSS1_BASE  //C0
#define PVA_VDS_CMPSS_ASYSCTRL_CMPHPMUX                 ASYSCTL_CMPHPMUX_SELECT_4
#define PVA_VDS_CMPSS_ASYSCTRL_MUX_VALUE                1

EPWM相关宏定义以及配置程序如下:

#define PVA_PhaseA_PWM_BASE                   EPWM1_BASE//0x00004000U
#define PVA_PhaseA_PWM_DCBEVT1                EPWM_TZ_INTERRUPT_DCBEVT1//0x20U
#define PVA_PhaseA_PWM_INT                    INT_EPWM1//0x00300301U

#define PVA_PhaseA_PWM_GPIO                 0
#define PVA_PhaseA_PWM_GPIO_PIN_CONFIG      GPIO_0_EPWM1A
//#define PVA_PhaseA_PWM_GPIO_PIN_CONFIG    GPIO_0_GPIO0

#define PVA_PhaseB_PWM_BASE                 EPWM2_BASE
#define PVA_PhaseB_PWM_INT                  INT_EPWM2

#define PVC_PhaseA_PWM_GPIO                 12
#define PVC_PhaseA_PWM_GPIO_PIN_CONFIG      GPIO_12_EPWM7A
//#define PVC_PhaseA_PWM_GPIO_PIN_CONFIG    GPIO_12_GPIO12

#define PVC_PhaseB_PWM_BASE                 EPWM8_BASE

    GPIO_setDirectionMode(PVC_PhaseA_PWM_GPIO,GPIO_DIR_MODE_OUT);
    GPIO_setPadConfig(PVC_PhaseA_PWM_GPIO,GPIO_PIN_TYPE_STD); // disable pull up
    GPIO_setPinConfig(PVC_PhaseA_PWM_GPIO_PIN_CONFIG);

CMPSS配置程序与EPWM TZ配置程序如下:

void setupVNCMPSS(void)
{
    //
    // Enable CMPSS and configure the negative input signal to come from
    // the DAC
    //
    CMPSS_enableModule(PVA_VDS_CMPSS_BASE);
    CMPSS_configHighComparator(PVA_VDS_CMPSS_BASE, CMPSS_INSRC_DAC);

    // Select positive input to come from C0
    ASysCtl_selectCMPHPMux(PVA_VDS_CMPSS_ASYSCTRL_CMPHPMUX,
                           PVA_VDS_CMPSS_ASYSCTRL_MUX_VALUE);

    //
    // Use VDDA as the reference for the DAC and set DAC value to ~1.5V
    //
    CMPSS_configDAC(PVA_VDS_CMPSS_BASE, CMPSS_DACREF_VDDA |
                    CMPSS_DACVAL_SYSCLK | CMPSS_DACSRC_SHDW);
    // Initial - corresponds to ~1V
     CMPSS_setDACValueHigh(PVA_VDS_CMPSS_BASE, 1240);
//     CMPSS_setDACValueLow(PVA_VDS_CMPSS_BASE, 1240);
// End digital filter specific code

    //
    // Configure the output signals. Both CTRIPH and CTRIPOUTH will be fed by
    // the asynchronous comparator output.
    //
    CMPSS_configOutputsHigh(PVA_VDS_CMPSS_BASE, CMPSS_TRIP_SYNC_COMP |
                            CMPSS_TRIPOUT_SYNC_COMP);


    XBAR_setEPWMMuxConfig(XBAR_TRIP7, XBAR_EPWM_MUX00_CMPSS1_CTRIPH);
    XBAR_enableEPWMMux(XBAR_TRIP7, XBAR_MUX00);
    EPWM_enableDigitalCompareTripCombinationInput(PVC_PhaseA_PWM_BASE, EPWM_DC_COMBINATIONAL_TRIPIN7, EPWM_DC_TYPE_DCAH);
    EPWM_setTripZoneDigitalCompareEventCondition(PVC_PhaseA_PWM_BASE, EPWM_TZ_DC_OUTPUT_A1, EPWM_TZ_EVENT_DCXH_HIGH);
    EPWM_setDigitalCompareEventSource(PVC_PhaseA_PWM_BASE, EPWM_DC_MODULE_A, EPWM_DC_EVENT_1, EPWM_DC_EVENT_SOURCE_ORIG_SIGNAL);
    EPWM_setDigitalCompareEventSyncMode(PVC_PhaseA_PWM_BASE, EPWM_DC_MODULE_A, EPWM_DC_EVENT_1, EPWM_DC_EVENT_INPUT_NOT_SYNCED);
    EPWM_setTripZoneAction(PVC_PhaseA_PWM_BASE, EPWM_TZ_ACTION_EVENT_TZA, EPWM_TZ_ACTION_LOW);
    EPWM_enableTripZoneSignals(PVC_PhaseA_PWM_BASE, EPWM_TZ_SIGNAL_DCAEVT1 );
    }

现在,当我将1.65V电压接到C0上时(阈值设置为1024,即1V左右),PVC_PhaseA_PWM_BASE并没有触发TZ保护,我是否搞错了某些内容?另外,我想请教如何查看CMPSS模块比较器的实时输出值为高还是低,这可以做到吗?

  • 已经收到了您的案例,调查需要些时间,感谢您的耐心等待。

  • 您好

    下面的行不正确。

    #define PVA_VDS_CMPSS_ASYSCTRL_CMPHPMUX                 ASYSCTL_CMPHPMUX_SELECT_4

    ASYSCTL 多路复用器选择应对应于正在使用的 CMPSS 基址。 在这种情况下、这将是 ASYSCTL_CMPHPMUX_SELECT_1。

    我认为您的其余配置应该没有问题。 澄清一下、您想使用 DCAEVT1、但是您似乎已经为 PVA_PhaseA_PWM_DCBEVT1创建了一个宏、但我在代码中看不到任何 DCBEVT1配置