深入解析C2000 ePWM的Trip-Zone与Digital Compare硬件保护机制 1. 项目概述与核心价值在电机驱动、数字电源或者任何需要高可靠性功率控制的嵌入式系统里PWM脉宽调制信号的稳定与安全是底线。我们通常花大量时间调PID、优化死区但一个突如其来的过流或短路如果处理不及时几微秒内就足以让昂贵的IGBT或MOSFET“烟花灿烂”。TI的C2000系列DSP里的ePWM模块之所以被称为“增强型”其精髓就在于它内置了一套硬件级的、响应速度在纳秒级的主动保护机制——这就是Trip-Zone故障保护区和Digital Compare数字比较子模块。简单来说你可以把ePWM模块想象成一个高度自律的“信号发生器”。时间基准TB和计数比较CC子模块负责按部就班地产生PWM波形是它的“生产部门”。而Trip-Zone和Digital Compare则是它的“安全保卫部门”和“快速反应部队”。Trip-Zone直接监控来自外部的紧急故障信号比如硬件比较器输出的过流信号一旦警报拉响它有权越过所有正常生产流程直接对PWM输出引脚下达强制命令立即拉高、拉低或进入高阻态。Digital Compare则更像个“智能哨兵”它不仅监控外部信号还能对这些信号进行逻辑判断比如高于或低于某个阈值并基于判断结果去触发一系列连锁反应比如启动一次ADC采样或者给其他ePWM模块发一个同步信号。很多工程师在初期容易忽略这两个模块的深度配置觉得用个简单的GPIO中断也能做保护。但硬件保护的优势是无可替代的它无需CPU干预响应是异步的即使CPU因故“卡住”保护依然生效。这篇文章我就结合手册和实际调板子的经验把Trip-Zone和Digital Compare这两个子模块的“门道”掰开揉碎了讲清楚重点不是罗列寄存器而是解释清楚为什么这么设计以及实际配置时有哪些坑。无论是做伺服驱动器、车载OBC还是光伏逆变器这套机制都是你实现产品高可靠性的基石。2. Trip-Zone子模块系统的紧急制动按钮Trip-Zone直译是“跳闸区”它的设计初衷就是为ePWM输出提供最快速、最直接的故障保护。其核心思想是当特定的故障信号有效时硬件立即介入强制改变PWMxA/PWMxB输出的状态将功率管置于安全状态完全关断或完全开启同时可选地产生中断通知CPU。2.1 故障信号来源与映射每个ePWM模块都连接了6个Trip-Zone输入信号TZ1-TZ6。它们的来源多样构成了一个多层次的保护网络TZ1, TZ2, TZ3 这三个信号来源于GPIO复用模块。这是最常用、最灵活的信号源通常连接到外部的硬件比较器输出、温度传感器报警输出或其他自定义的故障信号。例如你可以用比较器实时监测电机相电流一旦超过设定阈值比较器输出翻转触发TZ信号。TZ4 来源于两个正交编码器eQEP1和eQEP2的错误信号逻辑或。这常用于电机位置传感器故障保护。TZ5 连接到系统时钟振荡器或PLL失效逻辑。这是针对系统时钟源的保护一旦检测到时钟异常可以安全关闭PWM。TZ6 来源于CPU的调试模式暂停指示输出。当芯片进入调试暂停状态时此信号有效可用于安全关闭PWM输出。关键点在于这6个TZn信号是广播到所有ePWM模块的。这意味着一个全局性的故障如整机过温可以通过一个TZ信号同时关断系统中所有的PWM输出实现全局联动保护。2.2 两种保护模式Cycle-by-Cycle与One-Shot这是Trip-Zone模块最核心的两个概念决定了故障响应的“持久性”。2.2.1 Cycle-by-Cycle (CBC) 模式行为 当CBC故障事件发生时ePWM输出立即被强制为预设的安全状态通过TZCTL寄存器配置。同时对应的标志位TZFLG[CBC]被置位并可配置产生中断EPWMx_TZINT。清除条件自动清除。只要故障信号在下一个PWM周期开始时即时间计数器TBCTR 0x0000已经消失强制动作就会自动解除ePWM输出恢复正常调制。如果故障信号持续存在则每个PWM周期开始时会重新评估输出保持强制状态。应用场景逐周期电流限流。这是最常见的应用。例如在电机控制中我们希望相电流峰值不超过某个值。当电流超过阈值时TZ信号有效立即关闭本周期的PWM脉冲强制为低限制电流增长。下个周期开始时如果电流已回落故障信号消失PWM恢复正常工作如果电流仍超限则继续关闭。这样就实现了平滑的、无冲击的电流钳位而不是粗暴的完全关断。2.2.2 One-Shot (OSHT) 模式行为 当OSHT故障事件发生时ePWM输出同样被立即强制为安全状态标志位TZFLG[OST]置位并可产生中断。清除条件手动清除。一旦触发输出将一直保持在强制状态直到软件主动向TZCLR[OST]位写1来清除标志位和故障锁存状态。即使外部故障信号早已消失输出也不会自动恢复。应用场景严重故障保护。例如严重的过流、短路、母线过压等灾难性故障。这种故障需要系统完全停机等待工程师干预或进行完整的故障诊断和复位流程后才能手动恢复。OSHT模式确保了故障发生后系统能可靠地“锁死”在安全状态防止反复尝试重启造成二次损坏。实操心得模式选择是安全策略的核心千万不要混淆这两种模式。我曾在一个项目中误将短路保护设为CBC模式结果短路发生时PWM在每个周期都尝试重启导致短路电流持续存在最终炸管。正确的做法是对于可恢复的、瞬态的异常如瞬时过流使用CBC模式对于不可恢复的、严重的硬件故障如短路、击穿必须使用OSHT模式。一个常见的策略是用硬件比较器同时产生两路信号一路轻微过流进CBC做限流一路严重过流进OSHT做停机。2.3 输出动作配置与优先级当Trip事件发生时可以对EPWMxA和EPWMxB引脚分别配置四种动作之一通过TZCTL寄存器设置TZCTL[TZA]或[TZB]位域EPWMxA/EPWMxB动作说明00高阻态 (High-Z)输出引脚呈高阻态。适用于需要外部上/下拉电阻来确定关断状态的桥臂。01强制为高 (Force to High)输出强制为高电平。常用于关断低边开关管、导通高边开关管取决于驱动逻辑。10强制为低 (Force to Low)输出强制为低电平。最常用用于立即关断正在导通的功率管。11无变化 (No Change)忽略此Trip事件输出保持原有调制状态。可用于屏蔽某些非关键故障源。优先级问题 当一个ePWM模块同时被配置为响应多个Trip源例如TZ1 CBC和TZ2 OSHT时或者当Digital Compare事件也参与Trip时就需要考虑优先级。手册中明确指出了输出动作的优先级以EPWMxA为例TZA(由TZn直接触发) DCAEVT1DCAEVT2。 这意味着如果TZCTL[TZA]配置为强制拉低最高优先级那么即使DCAEVT1事件同时发生并配置了其他动作最终输出也会执行拉低。这个机制保证了最紧急的故障通常映射到TZn拥有最高控制权。2.4 关键寄存器配置流程与示例配置Trip-Zone是一个系统工程需要多个寄存器协同工作。下面以一个典型场景为例说明配置流程场景 使用TZ1来自GPIO的硬件比较器信号作为严重过流保护触发OSHT模式将EPWM1A和1B都强制拉低。同时使用TZ2作为逐周期限流保护触发CBC模式。选择Trip信号源 (TZSEL寄存器)TZSEL[OSHT1] 1 使能TZ1作为ePWM1的One-Shot触发源。TZSEL[CBC2] 1 使能TZ2作为ePWM1的Cycle-by-Cycle触发源。配置Trip动作 (TZCTL寄存器)TZCTL[TZA] 2(0b10) 当任何使能的Trip事件发生时EPWM1A强制拉低。TZCTL[TZB] 2(0b10) EPWM1B同样强制拉低。注意这里为简化TZA动作同时响应OSHT和CBC。实际中可通过TZCTL[DCAEVT1/2]等位为不同事件源配置不同动作。使能中断 (TZEINT寄存器)TZEINT[OST] 1 使能One-Shot中断以便在严重故障时通知CPU。TZEINT[CBC] 1 使能Cycle-by-Cycle中断用于监控限流事件发生频率可选。初始化标志位 (TZCLR寄存器)在初始化时向TZCLR[OST]和TZCLR[CBC]写1清除可能存在的残留标志。软件强制测试 (TZFRC寄存器)在系统自检阶段可以通过置位TZFRC[OSHT]或TZFRC[CBC]来软件模拟一个Trip事件验证保护逻辑和输出动作是否正确。这是一个非常重要的调试和安全验证手段。中断服务程序ISR处理流程// EPWM1_TZ 中断服务例程 __interrupt void epwm1TzIsr(void) { // 1. 判断中断源 if (EPwm1Regs.TZFLG.bit.OST 1) { // One-Shot故障 // 记录严重故障日志执行安全停机序列如关闭其他外设 systemHaltDueToFault(); // 清除标志位在OSHT模式下清除标志位是恢复输出的前提但此处我们选择停机 EPwm1Regs.TZCLR.bit.OST 1; } if (EPwm1Regs.TZFLG.bit.CBC 1) { // Cycle-by-Cycle故障 // 可以在此统计限流发生的次数用于评估负载状态或预警 currentLimitCounter; if (currentLimitCounter THRESHOLD) { // 如果限流过于频繁可能预示潜在问题可升级为OSHT故障 promoteToOshutdown(); } // CBC标志位不会自动清除需要手动清除 EPwm1Regs.TZCLR.bit.CBC 1; } // ... 清除PIE中断标志等操作 EPwm1Regs.TZCLR.bit.INT 1; // 清除总中断标志 PieCtrlRegs.PIEACK.all PIEACK_GROUP2; // 应答PIE中断 }3. Digital Compare子模块智能化的信号比较与事件生成如果说Trip-Zone是条件反射式的紧急制动那么Digital CompareDC就是更高级的“情境感知”系统。它不直接引入外部故障信号而是先将外部信号主要是TZ1, TZ2, TZ3进行“预处理”和“逻辑判断”再生成更复杂的事件去驱动Trip-Zone、事件触发ET甚至时间基准TB模块。3.1 核心功能与信号流DC模块的核心输入是TZ1, TZ2, TZ3这三个信号通过DCTRIPSEL寄存器选择映射为DCAH/DCAL或DCBH/DCBL。它的核心功能是事件生成 根据TZDCSEL寄存器的配置对DCAH/L和DCBH/L信号进行逻辑组合例如DCAH高且DCAL低生成四个关键事件DCAEVT1和DCAEVT2影响EPWMxADCBEVT1和DCBEVT2影响EPWMxB事件分发 这些事件可以分别被配置用于以下目的触发Trip 作为Trip-Zone的源产生DCAEVT1.force等信号直接强制PWM输出动作需通过TZSEL寄存器将DC事件选为OSHT或CBC源。产生中断 直接产生Trip-Zone中断 (DCAEVT1.inter等。触发ADC采样 产生DCAEVT1.soc信号连接到事件触发ET子模块用于在特定时刻如电流峰值点精准启动ADC转换。产生同步脉冲 产生DCAEVT1.sync信号用于同步本模块或其他ePWM模块的时基计数器实现多模块的相位联动。3.2 事件滤波消隐窗口功能详解这是DC模块一个非常实用且容易出错的功能。当输入信号来自模拟比较器时可能在开关瞬间产生毛刺噪声导致误触发。事件滤波Event Filtering或称消隐窗口Blanking Window就是为了滤除这些噪声。工作原理选择滤波源 通过DCFCTL[SRCSEL]选择要对哪一个DC事件DCAEVT1/2, DCBEVT1/2进行滤波。设置参考点 通过DCFCTL[PULSESEL]选择消隐窗口的起始参考点可以是CTRPRD周期匹配点或CTR0计数器下溢点。这通常选择与PWM开关噪声出现的时间点对齐。定义窗口偏移量 (DCFOFFSET) 从参考点开始延迟多少个TBCLK周期后消隐窗口才真正开始。这用于避开参考点附近的确定性噪声。窗口宽度 (DCFWINDOW) 消隐窗口持续多少个TBCLK周期。在此期间所有来自被滤波源的事件都会被忽略。配置示例滤除PWM开关噪声假设一个Buck变换器高边MOSFET在CTR0时开通在CTRCMPA时关断。开通瞬间会有强烈的电压电流噪声可能使电流采样比较器误动作。DCFCTL[PULSESEL] 0 选择CTR0作为参考点。DCFOFFSET 10 延迟10个TBCLK周期例如若TBCLK100MHz即100ns等待最剧烈的开关瞬态过去。DCFWINDOW 50 设置一个50个TBCLK周期500ns的消隐窗口。在这500ns内比较器的任何跳变都不会产生DC事件。这样只有在开关动作完成、信号稳定后比较器的状态才会被DC模块识别并用于产生事件极大地提高了抗噪能力。避坑指南消隐窗口的时序计算消隐窗口的OFFSET和WINDOW值是以TBCLK为单位的。你必须根据你的PWM频率和系统时钟准确计算。一个常见的错误是窗口设得太大覆盖了正常的信号判断区域导致该触发时不触发。务必在示波器上观察实际噪声的持续时间并留出足够的余量。另外如果OFFSET WINDOW的值超过了一个PWM周期窗口会延续到下一个周期这个特性需要留意。3.3 与Trip-Zone及事件触发子模块的联动DC模块的强大之处在于其联动能力。3.3.1 与Trip-Zone联动通过TZSEL寄存器可以将DCAEVT1配置为OSHT源将DCAEVT2配置为CBC源。这样来自模拟比较器的信号经过DC模块的滤波和逻辑判断后就能以一种更“智能”的方式触发保护。例如可以配置只有当电流持续超过阈值一定时间通过滤波实现才触发OSHT而瞬时尖峰则被滤除或仅触发CBC。3.3.2 与事件触发ET子模块联动DCAEVT1.soc和DCBEVT1.soc可以直接作为ADC启动转换SOC的触发源。这是实现“基于事件的采样”的关键。例如在电机控制中我们希望在相电流达到峰值时进行ADC采样。可以配置一个比较器当电流采样值等于内部DAC设定的峰值时输出高电平到TZ1。DC模块将TZ1信号生成DCAEVT1事件并输出soc信号给ET模块ET模块随即产生一个精准的ADC SOC脉冲。这种硬件触发的采样其抖动远小于软件触发对于高精度控制环路至关重要。4. 实战配置一个完整的电机相电流保护采样案例让我们整合Trip-Zone和Digital Compare设计一个用于电机驱动的典型保护与采样方案。目标硬件过流保护 (OSHT) 当相电流超过绝对安全阈值如硬件比较器设定立即封锁PWM并锁存故障。软件逐周期限流 (CBC) 当相电流超过软件设定的限流值由DAC设定给比较器但低于硬件阈值时仅关闭当前PWM周期下周期恢复。峰值电流采样 在PWM周期的特定时刻如中点对相电流进行ADC采样。硬件连接电流传感器-ADC输入和模拟比较器正输入端。DAC输出设定限流值-比较器1负输入端用于CBC。固定电压源设定硬件保护值-比较器2负输入端用于OSHT。比较器1输出-GPIO (映射为TZ1)。比较器2输出-GPIO (映射为TZ2)。软件配置步骤GPIO与比较器初始化 配置GPIO复用为TZ1和TZ2功能配置模拟比较器模块。Digital Compare模块配置DCTRIPSEL 将TZ1映射为DCAH信号高电平有效表示过流将TZ2也映射为DCAH或DCAL取决于逻辑。TZDCSEL 配置事件生成逻辑。例如设置DCAEVT1在DCAH1即TZ1有效时触发。DCFCTL 为DCAEVT1对应CBC保护启用消隐窗口参考点设为CTRPRD设置合适的OFFSET和WINDOW以滤除开关噪声。Trip-Zone模块配置TZSELTZSEL[OSHT2] 1 使能TZ2硬件保护为OSHT源。TZSEL[DCAEVT1] 1 使能DCAEVT1软件限流为CBC源。TZCTLTZCTL[TZA] 2 TZ2触发时强制拉低最高优先级。TZCTL[DCAEVT1] 2DCAEVT1触发时也强制拉低。TZEINT 使能OST和DCAEVT1中断。事件触发ET模块配置用于峰值采样假设我们希望在每个PWM周期中点CTRPRD/2时采样电流。ETSEL[SOCASEL] 选择CTRCMPA作为SOCA触发源。在计数器比较CC子模块中设置CMPA PRD/2。ETPS[SOCAPRD] 设置为1每个事件触发一次ADC。这样当计数器达到CMPA值时ET模块会自动产生一个ADC SOC脉冲无需CPU干预。工作流程正常运行时电流低于软件限流值TZ1无效DCAEVT1不产生PWM正常调制。ET模块在每个周期中点触发ADC采样。当负载加重电流超过软件限流值但低于硬件保护值时TZ1有效。DC模块在消隐窗口外检测到DCAH1产生DCAEVT1CBC事件。Trip-Zone模块立即强制PWM输出为低限制电流增长。下个周期TBCTR0时若TZ1已无效保护自动解除。同时CBC中断通知CPU“发生了限流”。当发生短路等严重故障电流瞬间超过硬件保护值时TZ2有效。Trip-Zone模块直接将其识别为OSHT事件立即强制PWM输出为低并锁存。CPU进入OSHT中断执行故障停机程序等待人工复位。5. 常见问题排查与调试技巧在实际调试中Trip-Zone和Digital Compare模块的问题往往比较隐蔽。以下是一些常见坑点和排查方法问题1Trip保护没有动作故障时PWM输出依然正常。检查信号路径 首先用示波器测量故障信号如比较器输出是否确实到达了芯片引脚电平是否符合要求低有效。确认GPIO复用配置正确映射到了正确的TZn。检查寄存器配置TZSEL寄存器是否使能了对应的Trip源TZCTL寄存器配置的动作是否正确确认是0b10强制拉低而不是0b11无变化。检查异步路径 Trip动作是异步的不依赖系统时钟。但如果希望中断被正确响应需要确保相关中断在PIE和CPU级已被使能。检查最小脉冲宽度 手册要求TZn输入的低电平脉冲宽度至少为3 * TBCLK。如果故障信号是瞬时的窄脉冲可能无法被可靠锁存。可以尝试在GPIO模块中启用数字滤波器或确保故障信号有足够的持续时间。问题2CBC保护动作后输出无法自动恢复。确认是CBC模式 检查TZSEL[CBCx]是否置位而非TZSEL[OSHTx]。检查故障信号是否持续 CBC模式在TBCTR0时检查故障信号是否消失。如果故障信号一直存在比如比较器阈值设置不当输出会一直被强制。可以在中断中读取故障输入引脚的状态或比较器输出寄存器来确认。检查TZFLG[CBC]标志位 CBC事件发生后TZFLG[CBC]标志位会保持置位直到手动清除。但这不影响输出的自动恢复。输出恢复只取决于故障信号在TBCTR0时的状态。问题3Digital Compare事件未能触发ADC采样。确认事件源 检查DCTRIPSEL和TZDCSEL寄存器确保输入信号正确映射到了DCAEVT1等事件。检查消隐窗口 如果启用了滤波很可能事件被窗口“吃掉”了。临时关闭消隐功能DCFCTL[BLANKE] 0测试。仔细计算窗口的OFFSET和WINDOW确保目标事件落在窗口之外。检查ET模块配置ETSEL[SOCASEL]是否选择了正确的DC事件如DCAEVT1.socETSEL[SOCAEN]是否使能ETPS[SOCACNT]计数器是否在递增如果它一直为0说明选择的事件从未发生。使用软件强制测试 在调试阶段可以置位TZFRC[DCAEVT1]来软件强制产生一个DC事件观察ADC是否被触发。这是隔离硬件信号问题的好方法。问题4同时配置多个保护源动作不符合预期。理清优先级 回顾第2.3节的优先级规则。TZA/TZB的优先级高于DCAEVT1/DCBEVT1后者又高于DCAEVT2/DCBEVT2。如果TZCTL[TZA]配置为拉低那么即使DCAEVT1配置为拉高最终输出也是拉低。检查冲突配置 确保没有为同一个输出引脚配置矛盾的动作。例如不要同时将TZCTL[TZA]设为高阻态(00)又将TZCTL[DCAEVT1]设为强制拉高(01)这会导致优先级高的生效但逻辑上令人困惑。调试技巧充分利用寄存器标志位TZFLG和ETFLG等标志位是调试的“眼睛”。在中断或主循环中定期读取这些标志位可以知道是哪个事件触发了保护或ADC。例如如果TZFLG[CBC]频繁置位说明系统经常进入逐周期限流状态可能需要调整控制参数或检查负载。