TMS320F280049C: 关于tz模块软件触发异常

Part Number: TMS320F280049C
Other Parts Discussed in Thread: SYSCONFIG, C2000WARE

使用软件触发epwm的TZ,以用于保护,现在程序可以强制pwm输出低电平,但恢复pwm输出异常,以下是sysconfig配置和部分程序:

image.png

image.png

#include "driverlib.h"
#include "device.h"
#include "board.h"


__interrupt void epwm1TZISR(void);

uint8_t Mode = 1U;
uint8_t PWMEN_Flag = 0U;
uint32_t cnt = 0U;

void EPwm_Enable(void)//PWM使能
{

    EALLOW;

    EPWM_clearOneShotTripZoneFlag(myEPWM1_BASE, EPWM_TZ_OST_FLAG_OST1);
//    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
    EDIS;

}

void EPwm_Disable(void)
{
    EALLOW;
    EPWM_forceTripZoneEvent(myEPWM1_BASE, EPWM_TZ_FORCE_EVENT_OST);
//    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
    EDIS;
}

void test_fun(void)
{
    if (Mode == 0)
    {
        if (PWMEN_Flag == 1)
        {
            PWMEN_Flag = 0;
            EPwm_Disable();
        }
    }
    if (Mode == 1)
    {
        if (PWMEN_Flag == 0)
        {
            PWMEN_Flag = 1;
            EPwm_Enable();
        }
    }
}

int main(void)
{
    Device_init();//初始化时钟和外设
    Device_initGPIO();

    Interrupt_initModule();//初始化PIE,清空PIE注册表,禁止CPU中断
    Interrupt_initVectorTable();

    SysCtl_disablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);

    Board_init();

    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);

    EINT;
    ERTM;

    while(1)
    {
        test_fun();
        NOP;
    }
}

__interrupt void epwm1TZISR(void)
{
    cnt++;
    Interrupt_clearACKGroup(INT_myEPWM1_TZ_INTERRUPT_ACK_GROUP);
}

程序参照另外两篇e2e帖子写的,AI回复为 EPWM_clearOneShotTripZoneFlag(myEPWM1_BASE, EPWM_TZ_OST_FLAG_OST1);未正常工作

  • 您好

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

  • 您好

    为明确起见,问题是否在于EPWMA输出能正确进入低电压状态,但无法从中恢复?因此EPWMA无法恢复正常功能?

    AI的回答是正确的——在TZ ISR中,用户应清除Trip Zone标志并确认PIE中的中断。我仅在上述epwm1TXISR函数中看到ACK。若要在故障发生后恢复正常的EPWM功能(+trip ISR),需要执行以下操作:

    EPWM_clearTripZoneFlag(EPWM1_BASE, (EPWM_TZ_INTERRUPT | EPWM_TZ_FLAG_OST));

    我恳请您务必确保客户参考我们现有的软件示例。这些示例可作为检查软件的参考——例如,我们在此处提供了专用的触发区示例:{C2000Ware}\driverlib\f28004x\examples\epwm\。您始终可以导入并比较/参考epwm_ex1_trip_zone和epwm_ex12_monoshot_mode示例(示例C文件及SysConfig生成的board.c中的C代码)。