DSP 之错误联防模块(TZ模块 之 28335)
错误联防模块
每个 ePWM 模块都与 GPIO 多路复用引脚中的 6 个 TZn(TZ1-TZ6)信号脚连接。 这些信号脚用来响应外部错误或外部触发条件,当错误发生时,PWM 模块可以通 过编程来响应这些问题。错误联防模块的位置如下图所示。
错误联防模块的主要作用如下:
①错误联防引脚 TZ1-TZ6 可以灵活的映射到对应的 PWM 模块。
②针对错误信息,ePWMxA 和 ePWMxB 可以被强制或如下几种状态: --高电平。 --低电平。 --高阻抗。 --无动作。
③在短路或者过流条件时,支持一次错误联防触发。
④针对限流操作时,支持周期错误联防触发。
⑤每个错误联防输入引脚都可以配置为一次或者周期错误联防触发。
⑥任何一个错误联防引脚都可以产生中断。
⑦支持软件强制错误联防。
⑧如果不需要此模块,可以选择禁止。
(1)错误联防模块的操作
TZ1-TZ6 的输入引脚为低有效。当这些引脚中的任意一个有效时,表明一个 错误事件发生,每个 PWM 模块都可以单独配置为禁止或者使能此错误联防触发引 脚。ePWM 模块选择哪一个错误引脚是通过 TZSEL 进行设置的,错误信号可以和 系统时钟同步,也可以不同步,同样具有数字滤波功能,跟 GPIO 引脚一样。一 个系统时钟的低脉冲输入即可以有效触发错误控制逻辑。异步触发确保在系统时 钟发生错误的情况下,错误引脚仍能触发错误控制逻辑。其余的配置可以参照 GPIO 的引脚配置。每个 TZn 输入引脚可以单独配置一次触发或者周期触发。
①周期触发:当周期错误联防事件发生时,TZCTL 寄存器中的动作立刻输出 到 ePWMxA 和 ePWMxB 引脚上,另外,周期错误联防事件标志位(TZFLG[CBC])被
置位,同时当 TZEINT 寄存器和 PIE 模块的中断使能时,ePWMx_TZINT 中断就会 产生。
②单次触发:当单次错误联防事件发生时,同样 TZCTL 寄存器中的动作立刻 输出到 ePWMxA 和 ePWMxB 引脚上,另外单次错误联防事件标志位(TZFLG[OST]) 被置位,同时当 TZEINT 寄存器和 PIE 模块的中断使能时,ePWMx_TZINT 中断就 会产生的。 两种模式触发的区别在于周期错误联防事件标志可以自动清零,但是单次错 误联防事件标志需要软件清零。
(2)错误联防模块寄存器
1,错误联防选择寄存器 TZSEL
错误联防选择寄存器 TZSEL 各位功能描述如下:
2,错误联防控制寄存器 TZCTL
错误联防控制寄存器 TZCTL 各位功能描述如下:
3,错误联防中断使能寄存器 TZEINT
错误联防中断使能寄存器 TZEINT 各位功能描述如下:
4,错误联防中断标志寄存器 TZFLG
错误联防中断标志寄存器 TZFLG 各位功能描述如下:
5,错误联防中断清除寄存器 TZCLR
错误联防中断清除寄存器 TZCLR 各位功能描述如下:
6,错误联防中断强制寄存器 TZFRC
错误联防中断强制寄存器 TZFRC 各位功能描述如下:
补充 TMS28035芯片
GPIO 15 GPIO 16 GPIO 17 引脚触发TZ中断配置。
GPIO15复用功能 TZ1
GPIO16复用功能 TZ2
GPIO17复用功能 TZ3
插图:
引脚配置:
查看TMS2035芯片手册 的 GPAMUX2寄存器位的功能
下面展示一些 内联代码片
。
// A code block
var foo = 'bar';
// An highlighted block
//GPIO15 TZ1 FO保护
GpioCtrlRegs.GPAPUD.bit.GPIO15 = 0; // Enable pullup on GPIO15
GpioCtrlRegs.GPAQSEL1.bit.GPIO15 = 3; // asynch input
GpioCtrlRegs.GPAMUX1.bit.GPIO15 = 1; // GPIO15 = TZ1
//GPIO16 TZ2 OC_L保护
GpioCtrlRegs.GPAPUD.bit.GPIO16 = 0; // Enable pullup on GPIO17
GpioCtrlRegs.GPAQSEL2.bit.GPIO16 = 3; // asynch input
GpioCtrlRegs.GPAMUX2.bit.GPIO16 = 3; // GPIO17 = TZ2
//GPIO17 TZ3 OC保护
GpioCtrlRegs.GPAPUD.bit.GPIO17 = 0; // Enable pullup on GPIO17
GpioCtrlRegs.GPAQSEL2.bit.GPIO17 = 3; // asynch input
GpioCtrlRegs.GPAMUX2.bit.GPIO17 = 3; // GPIO17 = TZ3
TZ模块初始化配置,配置TZ2 、 TZ3
查看TMS28035 芯片手册 TZSEL 、TZCTL、 TZEINT寄存器功能。
下面展示一些 内联代码片
。
// A code block
var foo = 'bar';
// An highlighted block
/*******************************************************************
*函数名称:InitTz()
*功能描述:TZ模块设置(OC,FO,仿真器挂起保护)
*输入参数:
*输出参数:
*调用函数:
*详细描述:
*******************************************************************/
void InitTz(void)
{
EALLOW;
EPwm1Regs.TZSEL.all = 0x0600; //TZ1:FO TZ3:OC TZ6:仿真器挂起 /*bit10-TZ3,bit9-TZ2,bit8-TZ1单次触发联防*/
EPwm1Regs.TZCTL.all = 0x0005; //Force high /*强制EPWm1A高状态 ,强制EPWm1B高状态*/
EPwm1Regs.TZEINT.all = 4; /*使能EPWm1单次触发中断*/
EPwm2Regs.TZSEL.all = 0x0600; //TZ1:FO TZ3:OC TZ6:仿真器挂起
EPwm2Regs.TZCTL.all = 0x0005; //Force high
EPwm2Regs.TZEINT.all = 0; //disable INTERRUPT
EPwm3Regs.TZSEL.all = 0x0600; //TZ1:FO TZ3:OC TZ6:仿真器挂起
EPwm3Regs.TZCTL.all = 0x0005; //Force high
EPwm3Regs.TZEINT.all = 0; //disable INTERRUPT
EDIS;
CutHardTrip = 1;
}