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.

TMS320F28379D: How to set software to trigger DCAEVT event?

Part Number: TMS320F28379D

Dear team:

A customer of mine uses an internal comparator to trigger EPWM protection with a DC event (event trigger is configured as one-shot). He found that two flags need to be set when using software to force a DC event to be triggered:

EPwm1Regs.TZFRC.bit.DCAEVT1 = 1;
EPwm1Regs.TZFRC.bit.DCBEVT1 = 1;

//and

EPwm1Regs.TZFRC.bit.OST = 1;

He tested it many times and found that setting the EVT event and the OST flag alone did not work. He wants to know where is the problem?

{
EALLOW;

//======配置DC Submodule
(*ePWM[i]).DCBHTRIPSEL.bit.TRIPINPUT1 = 1;
(*ePWM[i]).DCAHTRIPSEL.bit.TRIPINPUT1 = 1;

(*ePWM[i]).DCBHTRIPSEL.bit.TRIPINPUT2 = 1;
(*ePWM[i]).DCAHTRIPSEL.bit.TRIPINPUT2 = 1;

(*ePWM[i]).DCBHTRIPSEL.bit.TRIPINPUT3 = 1;
(*ePWM[i]).DCAHTRIPSEL.bit.TRIPINPUT3 = 1;

(*ePWM[i]).DCBHTRIPSEL.bit.TRIPINPUT4 = 1;
(*ePWM[i]).DCAHTRIPSEL.bit.TRIPINPUT4 = 1;

(*ePWM[i]).DCTRIPSEL.bit.DCBHCOMPSEL = 0xF; //对TRIP4、TZ1、TZ2、TZ3信号使能
(*ePWM[i]).DCTRIPSEL.bit.DCAHCOMPSEL = 0xF; //对TRIP4、TZ1、TZ2、TZ3信号使能

(*ePWM[i]).DCTRIPSEL.bit.DCBLCOMPSEL = 0x4; //对TRIP5信号使能
(*ePWM[i]).DCTRIPSEL.bit.DCALCOMPSEL = 0x4; //对TRIP5信号使能

//DC的出发源为TRIP4
(*ePWM[i]).TZDCSEL.bit.DCBEVT1 = TZ_DCBH_HI; //高电平触发DC事件
(*ePWM[i]).TZDCSEL.bit.DCAEVT1 = TZ_DCAH_HI; //高电平触发DC事件
(*ePWM[i]).TZDCSEL.bit.DCAEVT2 = TZ_DCAL_HI; //高电平触发DC事件
(*ePWM[i]).TZDCSEL.bit.DCBEVT2 = TZ_DCBL_HI; //高电平触发DC事件

(*ePWM[i]).TZSEL.bit.DCAEVT1 = 1; //DC配置为One-shot
(*ePWM[i]).TZSEL.bit.DCBEVT1 = 1; //DC配置为One-shot
(*ePWM[i]).TZSEL.bit.DCBEVT2 = 0; //DC配置为CBC
(*ePWM[i]).TZSEL.bit.DCAEVT2 = 0; //DC配置为CBC

(*ePWM[i]).DCBCTL.bit.EVT1SRCSEL = DC_EVT1; //不使用滤波器
(*ePWM[i]).DCBCTL.bit.EVT1FRCSYNCSEL = DC_EVT_ASYNC; //异步触发
(*ePWM[i]).DCACTL.bit.EVT1SRCSEL = DC_EVT1; //不使用滤波器
(*ePWM[i]).DCACTL.bit.EVT1FRCSYNCSEL = DC_EVT_ASYNC; //异步触发

(*ePWM[i]).DCBCTL.bit.EVT2SRCSEL = DC_EVT2; //不使用滤波器
(*ePWM[i]).DCBCTL.bit.EVT2FRCSYNCSEL = DC_EVT_ASYNC; //异步触发
(*ePWM[i]).DCACTL.bit.EVT2SRCSEL = DC_EVT2; //不使用滤波器
(*ePWM[i]).DCACTL.bit.EVT2FRCSYNCSEL = DC_EVT_ASYNC; //异步触发

//======配置TZ触发
(*ePWM[i]).TZCTL.bit.DCAEVT1 = 2; //配置故障输出为低电平
(*ePWM[i]).TZCTL.bit.DCBEVT1 = 2; //配置故障输出为低电平

(*ePWM[i]).TZCTL.bit.DCAEVT2 = 2; //配置上管输出为低电平
(*ePWM[i]).TZCTL.bit.DCBEVT2 = 3; //配置下管输出为不处理

(*ePWM[i]).TZCLR.bit.DCBEVT1 = 1;
(*ePWM[i]).TZCLR.bit.DCAEVT1 = 1;
(*ePWM[i]).TZCLR.bit.DCAEVT2 = 1;
(*ePWM[i]).TZCLR.bit.DCBEVT2 = 1;

EDIS;
}

Best regards