1、通道选择说明
关于TZ1做为一级过流保护输入信号,配置为CBC(可用于逐波限流);TZ2做为二级过流保护输入信号,配置为OSHT(可用于单次封波);
示意图如下:
2、寄存器配置
EPwm1Regs.TZSEL.bit.CBC1 = 0x01; // TZ1 CBC select
EPwm1Regs.TZSEL.bit.OSHT2 = 0x01; //TZ2One-shot select
EPwm1Regs.TZCTL.bit.TZA = 0x02; //Force EPWM1A to a low state
EPwm1Regs.TZCTL.bit.TZB = 0x02; //Force EPWM1B to a low state
3、TZ中断配置
//---------CBC触发事件中断--------//
//EPwm1Regs.TZCLR.bit.INT = 1; //for tz trip int clear;
//EPwm1Regs.TZCLR.bit.CBC = 1; //for tz trip CBC event clear;
//EPwm1Regs.TZEINT.bit.CBC = 1; //Enable CBC interrupt;
由于CBC触发事件产生时,EPWMxA/EPWMxB输出将按照TZCTL[TZA]和TZCTL[TZB]位中规定的动作进行动作;当触发事件不再出现,ePWM模块TBCTR=0x0000时,EPWMxA/EPWMxB输出会恢复PWM输出;故软件中可不使能CBC事件中断,不做处理。
//---------OSHT触发事件中断--------//
EPwm1Regs.TZCLR.bit.INT = 1; //for tz trip int clear;
EPwm1Regs.TZCLR.bit.OST = 1; //for tz trip OSHT event clear;
EPwm1Regs.TZEINT.bit.OST = 1; //Enable OSHT interrupt;
由于OSHT触发事件产生时,EPWMxA/EPWMxB输出将按照TZCTL[TZA]和TZCTL[TZB]位中规定的动作进行动作;需手动清除TZFLG[OST]标志位,EPWMxA/EPWMxB输出才会恢复PWM输出;故必须使能OSHT触发事件中断,在中断函数里面进行TZFLG[OST]标志位清除处理。
TZ中断配置步骤如下:
3.1、使能EPWM1的TZ事件中断
EPwm1Regs.TZEINT.bit.OST = 0x1; // Enable TZ interrupt
3.2、对应的PIE中断使能
IER = M_INT2;// CPU Interrupt Enable PIE Group 2
PieCtrlRegs.PIEIER2.bit.INTx1 = 1; // EPWM1_TZINT
3.3、定义中断地址指向你的服务程序
PieVectTable.EPWM1_TZINT = &INTERRUPT_ISR_TZProtect;
interrupt void INTERRUPT_ISR_TZProtect(void)
{
EPwm1Regs.TZCLR.bit.OST=1; //for tz trip One-shot Flag clear;
EPwm1Regs.TZCLR.bit.INT = 1; //clear INT flag
PieCtrlRegs.PIEACK.all = PIEACK_GROUP2; // Acknowledge interrupt to PIE
}
4、实验信号测试
TZ1、TZ2的输入信号通过两个独立按钮来模拟,
4.1、当TZ1信号为低电平,则触发TZ1的CBC模式对PWM1A进行拉低处理,当TZ1信号恢复为高电平后,则Pwm1驱动会在TB计算为0时放开;
如下图 通道为PWM1A,通道2为TZ1信号;
TZ1信号为低电平后,PWM1驱动被拉低;
TZ1信号恢复为高电平后,PWM1驱动也恢复;
4.2、当TZ2信号为低电平,则触发TZ2的OSHT模式对PWM1A进行拉低处理,当TZ1信号恢复为高电平后,则Pwm1驱动也不会放开,需手动清除TZFLAG标志才行;
如下图 通道为PWM1A,通道2为TZ2信号;