TMS28335笔记 之 TZ模块实战:从GPIO映射到PWM安全关断 📅 2026/7/15 3:08:07 1. TZ模块在电机控制中的关键作用第一次接触TMS320F28335的TZ模块时我正负责一个直流电机驱动项目。客户要求当电流超过20A时必须立即切断PWM输出响应时间要小于2微秒。这个看似简单的需求让我深刻认识到TZ模块在实时控制系统中的不可替代性。TZTrip-Zone模块本质上是个硬件应急开关它完全独立于CPU运行。当GPIO15/16/17等引脚检测到故障信号时不需要CPU干预就能直接切断PWM输出。这种硬件级保护机制比软件中断响应快10倍以上。在过流保护的场景下2微秒和20微秒的差别可能就是炸管和正常保护的差别。实际项目中我习惯将TZ1用于过流保护TZ2用于过温保护TZ3留给紧急停机按钮。这种分配方式在多个工业伺服项目中验证过可靠性。比如在一个纺织机械项目里电机堵转时TZ1能在1.8微秒内将PWM输出强制拉高同时触发中断记录故障日志。2. GPIO与TZ引脚的硬件映射实战很多新手会卡在GPIO复用配置这一步。以GPIO15复用为TZ1为例需要操作三个关键寄存器EALLOW; // 启用上拉电阻 GpioCtrlRegs.GPAPUD.bit.GPIO15 0; // 异步输入模式关键同步模式会有时钟延迟 GpioCtrlRegs.GPAQSEL1.bit.GPIO15 3; // 复用为TZ1功能 GpioCtrlRegs.GPAMUX1.bit.GPIO15 1; EDIS;这里有个坑我踩过如果GPAQSEL1配置成同步模式值为0-2故障信号需要等系统时钟同步后才能生效这会增加约100ns的延迟。在高压大电流场合这个延迟可能导致保护不及时。硬件设计上建议在TZ输入引脚加10kΩ上拉电阻。我曾遇到一个案例客户PCB上的干扰导致TZ引脚误触发后来发现是浮空输入惹的祸。加了上拉后故障率降为零。3. 寄存器配置的魔鬼细节TZSEL寄存器就像TZ模块的接线板决定哪个PWM模块响应哪个TZ信号。在双电机控制系统中我通常这样配置EPwm1Regs.TZSEL.all 0x00C0; // PWM1响应TZ6TZ7 EPwm2Regs.TZSEL.all 0x0030; // PWM2响应TZ4TZ5TZCTL寄存器决定了急停时PWM的输出状态。对于半桥驱动我推荐配置为EPwm1Regs.TZCTL.bit.TZA 1; // PWMxA强制高 EPwm1Regs.TZCTL.bit.TZB 2; // PWMxB强制低这样能确保上下管不会直通。有个反例某工程师将两路都设为高阻态结果MOSFET的米勒效应导致桥臂误导通烧了一整批驱动板。4. 单次触发与周期触发的抉择单次触发OST像电路中的保险丝触发后需要手动复位。它的标志位TZFLG[OST]必须用软件清除EPwm1Regs.TZCLR.bit.OST 1; // 清除单次触发标志周期触发CBC则像自动复位断路器适合限流保护等场景。它的独特优势是能自动重试我在开关电源设计中经常用到。但要注意如果故障持续存在会不断触发保护可能导致PWM频繁启停。实测数据显示单次触发响应更快约1.5μs而周期触发会有额外0.3μs的延迟。所以紧急停机用单次触发限流保护用周期触发这个原则在多个项目中都验证有效。5. 中断处理的实战技巧TZ中断服务程序里有个关键操作顺序// 1. 立即清除中断标志 EPwm1Regs.TZCLR.bit.INT 1; // 2. 处理故障如记录日志 HandleFault(); // 3. 如果是OST模式还要清除OST标志 if(EPwm1Regs.TZFLG.bit.OST){ EPwm1Regs.TZCLR.bit.OST 1; }曾有个项目因为颠倒了这个顺序导致中断重复触发。后来用逻辑分析仪抓取发现清除标志位的操作如果放在最后可能在处理过程中再次满足触发条件。对于高可靠性系统我建议在中断中加入二次验证if(ReadCurrentSensor() MAX_CURRENT){ // 软件二次确认 EmergencyShutdown(); } else { EPwm1Regs.TZFRC.bit.OST 1; // 假故障恢复运行 }6. 调试时容易忽略的细节用CCS调试TZ模块时这几个技巧能节省大量时间在Watch窗口添加TZFLG寄存器实时观察触发状态使用GPIO模拟故障信号将某个GPIO短接到TZ输入引脚用软件控制触发在PWM ISR中设置断点会干扰实时性建议改用EPWMx_TZINT中断有个有趣的发现当CPU被调试器暂停时TZ模块仍然在工作这意味着即使你在单步调试硬件保护机制依然有效。这个特性在调试高压电路时特别有用。7. 高级应用动态重配置保护策略在变频器应用中我开发了一套动态保护机制void UpdateProtection(float freq) { EALLOW; if(freq 60.0) { // 高频段采用更灵敏的保护 EPwm1Regs.TZCTL.bit.TZA 2; // 强制低电平 EPwm1Regs.TZEINT.bit.OST 1; // 使能中断 } else { // 低频段允许短时过载 EPwm1Regs.TZCTL.bit.TZA 3; // 高阻态 EPwm1Regs.TZEINT.bit.CBC 1; // 周期触发 } EDIS; }这种根据运行状态动态调整保护策略的方法在起重设备中成功解决了低频启动时误保护的问题。关键是要在EALLOW/EDIS保护块内完成所有相关寄存器的修改。