C2000 ePWM死区生成与故障保护:电机驱动安全与鲁棒性设计

发布时间:2026/7/18 10:56:16
C2000 ePWM死区生成与故障保护:电机驱动安全与鲁棒性设计 1. 项目概述与核心价值在搞电机驱动、逆变器或者任何带半桥/全桥拓扑的功率电路时PWM信号的质量和系统的鲁棒性直接决定了产品的生死。我见过太多因为桥臂直通烧MOS管的也调试过不少因为保护响应太慢而炸机的案子。说到底硬件设计是骨架而软件对PWM的精细控制特别是**死区Dead-Band和故障保护Trip-Zone**的配置才是赋予系统灵魂和生命保障的关键。德州仪器TIC2000系列DSP里的增强型PWMePWM模块把这两块功能做得非常透彻和灵活几乎成了工业界的事实标准。简单来说死区生成解决的是“如何安全地开关”的问题。在上下管互补导通的桥臂中由于器件本身的开关延迟以及驱动电路的响应时间如果理想状态下一个管子的关断信号和另一个管子的开通信号完全同步极有可能出现短暂的“共通”现象也就是上下管同时导通形成低阻通路瞬间的大电流足以摧毁功率器件。死区就是在互补信号之间插入一个可控的延迟确保“先关断后开通”从根本上杜绝直通风险。而故障保护解决的是“出事之后怎么办”的问题。系统运行时过流、过压、过热、甚至时钟异常都可能发生。ePWM的Trip-Zone子模块就是专门处理这些“急事”的硬件看门狗。它通过多路独立的外部故障信号TZ1-TZ6和内部数字比较事件能以极低的延迟纳秒级强制改变PWM输出状态——比如立即拉低、拉高或者进入高阻态——从而在软件甚至CPU都来不及反应之前就把功率回路切断保住主电路。这篇文章我就结合手册里的框图、寄存器描述和多年踩坑的经验把ePWM的死区生成和故障保护机制掰开揉碎了讲清楚。你会看到不仅仅是寄存器怎么配更重要的是为什么要这么配以及在实际项目中哪些细节一旦忽略就会埋下隐患。无论你是正在评估C2000的新手还是想优化现有驱动代码的老手这些内容都应该能给你带来直接的帮助。2. ePWM死区生成器DB深度解析与配置实战死区功能听起来简单就是加个延迟但ePWM的Dead-Band子模块提供了远超基本需求的灵活度。它不是一个简单的延时模块而是一个带有信号选择、极性控制、独立边沿延迟的可编程信号通路处理器。2.1 死区模块的架构与信号流看手册里的框图对应Figure 20-26死区模块的输入是来自动作限定器AQ的EPWMxA_In和EPWMxB_In两路原始PWM信号。注意在进入死区模块之前这两路信号已经是根据CMPA和CMPB比较结果生成的、带有基本占空比信息的波形了。模块的核心是两个独立的10位延迟计数器一个负责上升沿延迟Rising Edge Delay, RED一个负责下降沿延迟Falling Edge Delay, FED。每个计数器都由时基时钟TBCLK驱动。关键点在于这两个延迟块的输入信号源是可以独立选择的这是实现多种工作模式的基础。信号流的控制逻辑主要由三个寄存器位域决定DBCTL[IN_MODE]选择输入源。它决定了EPWMxA_In和EPWMxB_In这两路信号谁去喂给RED计数器谁去喂给FED计数器。这允许你用两路不同的原始信号来生成最终带死区的互补对虽然经典用法是同一路信号分给两个延迟块。DBCTL[OUT_MODE]选择输出模式。决定最终的EPWMxA_Out和EPWMxB_Out是直接来自输入旁路延迟还是来自经过RED或FED延迟后的信号或者是它们的组合。这是生成不同极性互补波形的关键。DBCTL[POLSEL]极性选择。决定在输出前是否对经过RED或FED延迟后的信号进行取反。这让你能轻松生成主动高Active-High或主动低Active-Low的驱动信号以适应不同栅极驱动芯片的需求。2.2 经典死区工作模式详解与波形生成手册中的Table 20-14列出了7种经典模式。我们不要死记硬背寄存器值而是理解其背后的逻辑。假设一个最常见场景我们使用一个ePWM模块驱动一个半桥希望生成一对带死区的互补PWM上管信号主动高有效下管信号主动低有效即高电平导通上管低电平导通下管这是很多驱动IC的默认逻辑。我们的目标是从一路EPWMxA_In假设是中心对称的PWM波出发得到EPWMxA_Out和EPWMxB_Out它们之间既有死区又符合上述极性要求。推导过程确定原始信号EPWMxA_In是主信号。我们让DBCTL[IN_MODE]配置为EPWMxA_In同时作为RED和FED的源。EPWMxB_In在此模式下未使用。分析边沿关系对于上管假设输出到EPWMxA_Out我们希望它在EPWMxA_In的上升沿稍晚一点开通避免下管未完全关断在EPWMxA_In的下降沿立即关断。这对应着对原始信号的上升沿添加延迟RED而下降沿不延迟或立即动作。分析互补管对于下管EPWMxB_Out它与上管互补但极性相反主动低有效。这意味着下管的“开通”时刻对应其输出信号的下降沿“关断”时刻对应其上升沿。为了形成死区下管的开通即其下降沿应该比上管的关断即EPWMxA_In的下降沿也是EPWMxA_Out的下降沿晚一点。同时下管的关断其上升沿应该比上管的开通EPWMxA_Out的上升沿早一点。映射到延迟模块要实现第3点一个巧妙的方法是让EPWMxB_Out的波形等于对EPWMxA_In的下降沿添加延迟FED然后整体取反。为什么取反操作将主动高信号变为主动低信号。对下降沿添加延迟FED原始信号下降沿到来时EPWMxB_Out取反前并不会立即上升因为下降沿被延迟了这就实现了下管“开通”的延迟。当延迟结束时EPWMxB_Out取反前变为高电平取反后变为低电平下管导通。对上升沿原始信号上升沿到来时EPWMxB_Out取反前会立即下降因为上升沿不延迟或立即动作取反后变为高电平下管关断。这正好满足“下管关断早于上管开通”的死区要求。结论这种模式对应手册中的Mode 2: Active High Complementary (AHC)。我们来看看寄存器配置DBCTL[POLSEL]10(二进制)。S31表示对RED延迟后的信号取反S20表示对FED延迟后的信号不取反。但注意在AHC模式下最终输出选择的是经过FED延迟但未取反的信号作为EPWMxA_Out这里需要仔细对照框图和真值表。 实际上对于AHC模式手册的波形图Figure 20-28更直观EPWMxA_Out是原始信号经过上升沿延迟RED后的结果EPWMxB_Out是原始信号经过下降沿延迟FED后再取反的结果。因此POLSEL的配置需要让EPWMxB_Out通路的信号被取反。DBCTL[OUT_MODE]11。S11使能上升沿延迟给到EPWMxA_OutS01使能下降沿延迟给到EPWMxB_Out。生成的波形关系如下假设原始信号EPWMxA_In是一个方波EPWMxA_In: |¯¯¯¯¯| |_______________| |¯¯¯¯¯| ↑ ↓ ↑ (延迟后) EPWMxA_Out (RED): | ¯¯¯¯¯| |_______________| | ¯¯¯¯¯| (上升沿滞后) EPWMxB_Out (FED取反):|_______| |¯¯¯¯¯¯¯¯¯¯¯| |_______| (下降沿滞后且整体反相) 死区时间↑ ↑区时间可以看到在EPWMxA_Out上升沿上管开通前EPWMxB_Out已经是高电平下管关断状态并且保持了一段时间死区。在EPWMxA_Out下降沿上管关断后EPWMxB_Out并不会立即变低下管开通而是延迟一段时间死区后才变低。这就完美实现了互补驱动与死区插入。2.3 死区时间计算与精度提升技巧死区时间由DBRED和DBFED这两个10位寄存器值决定。计算公式很简单延迟时间 寄存器值 × TBCLK周期例如TBCLK配置为系统时钟SYSCLKOUT的4分频即TBCLK SYSCLKOUT / 4。若SYSCLKOUT 100 MHz则TBCLK 25 MHz周期T_tbclk 40 ns。若要设置死区时间为1 us则寄存器值应设置为1 us / 40 ns 25。将其写入DBRED和/或DBFED即可。这里有一个非常重要的技巧半周期时钟Half-Cycle Clocking。通过设置DBCTL[HALFCYCLE]位可以让死区延迟计数器以2 * TBCLK的频率运行。这样时间分辨率就提高了一倍。计算公式变为延迟时间 寄存器值 × (TBCLK周期 / 2)。为什么这个很重要在高速开关应用中比如几百kHz的开关频率死区时间通常很小几十到几百纳秒。高的时间分辨率意味着你能更精确地设置死区在避免直通和减少死区带来的波形失真尤其是对低占空比的影响之间找到最佳平衡点。例如在上面的例子中启用半周期时钟后时间分辨率从40 ns提升到了20 ns。要设置1 us的死区寄存器值需要设为1 us / 20 ns 50。虽然寄存器值变大了但你能以20 ns的步进来微调死区这对于优化效率至关重要。实操注意事项匹配驱动芯片极性务必根据你使用的栅极驱动芯片如IR2110, UCC27722等的数据手册确定其输入是主动高还是主动低有效然后对应选择AHC、ALC、AH或AL模式。配反了会导致MOS管常开或常闭。死区时间估算死区时间必须大于功率器件MOSFET/IGBT的关断延迟时间与驱动电路传播延迟之和。通常可以从器件数据手册的t_d(off)参数和驱动IC的t_PD参数估算并留有一定裕量例如20%-30%。在实际调试中可以用双通道示波器测量上下管栅极信号确保没有任何重叠。寄存器写入时机DBCTL、DBRED、DBFED寄存器都不是影子寄存器。这意味着对它们的修改会立即生效。为了避免在PWM周期中间产生毛刺或异常脉冲最好在PWM计数器为0TBCTR 0时或者全局关闭PWM输出通过TZ子模块强制高阻后再进行配置更改。3. 故障保护Trip-Zone子模块机制与工程应用如果说死区是“防患于未然”那么故障保护就是“雷霆救兵”。ePWM的Trip-Zone子模块提供了硬件级别的快速保护响应速度远快于软件中断。3.1 故障信号源与分类ePWM模块可以接收多达6路故障信号TZ1-TZ6它们来源不同用途也不同TZ1, TZ2, TZ3来自GPIO复用引脚。这是最常用的外部故障输入通常连接到电流采样比较器的输出、温度传感器信号或外部保护电路的报警输出。它们是异步的意味着即使系统时钟出现问题这些信号也能触发保护。TZ4来自正交编码器eQEP模块的错误信号EQEP1ERR或EQEP2ERR的组合。用于电机控制中编码器信号异常保护。TZ5连接到系统时钟振荡器OSC或锁相环PLL失效逻辑。用于检测时钟源故障这是系统级的关键保护。TZ6来自CPU的调试模式暂停指示。当CPU进入调试暂停状态时可以触发PWM进入安全状态防止电机失控。这些信号统一称为TZn都是低电平有效Active-Low。当它们被拉低时表示故障事件发生。3.2 两种保护模式Cycle-By-Cycle (CBC) 与 One-Shot (OSHT)这是Trip-Zone子模块最核心的概念决定了故障响应的行为模式。1. 逐周期CBC模式应用场景电流限流。例如在电机启动或过载时电流会上升。通过硬件比较器实时监测电流一旦超过设定阈值CBC阈值TZn信号变低。响应机制ePWM输出立即按照TZCTL[TZA/TZB]的配置动作如强制拉低。但是这个动作不是永久的。在每个PWM周期开始时严格来说是时间基计数器TBCTR归零时硬件会自动检查TZn信号是否已经恢复为高电平故障消失。如果恢复了则PWM输出自动恢复正常调制状态如果故障依然存在则输出继续保持保护状态。行为类比像一个自动复位的断路器。故障出现就跳闸关闭PWM每个周期都尝试合闸恢复如果故障还在就继续跳闸。这实现了动态的、周期性的电流钳位。相关寄存器TZSEL[CBCn]位用于使能对应TZn信号为CBC事件源。TZFLG[CBC]标志位在CBC事件发生时置位需要软件手动清除写TZCLR[CBC]1。2. 单次OSHT模式应用场景严重故障保护。如短路、剧烈过流、严重过温等需要立即停机并锁存的故障。响应机制ePWM输出立即按照TZCTL[TZA/TZB]的配置动作如强制拉高阻态。这个动作会一直保持直到软件明确干预清除故障标志。即使外部TZn信号已经恢复为高电平PWM输出也不会自动恢复。行为类比像一个需要手动复位的熔断器。一旦熔断必须人工更换软件清除标志才能恢复供电。相关寄存器TZSEL[OSHTn]位用于使能对应TZn信号为OSHT事件源。TZFLG[OST]标志位在OSHT事件发生时置位必须软件手动清除写TZCLR[OST]1后PWM输出才可能恢复还需软件重新使能PWM输出。关键区别与选择自动恢复 vs. 手动恢复CBC自动OSHT手动。用途CBC用于可恢复的、周期性的限制OSHT用于不可恢复的、致命的故障。标志位清除两者都需要软件清除标志位但CBC模式下输出状态的恢复是硬件自动的而OSHT模式下输出状态的恢复依赖于软件清除标志位后重新配置。3.3 数字比较DC事件触发保护除了直接的TZn引脚输入Trip-Zone子模块还可以响应来自内部数字比较Digital Compare, DC子模块的事件DCAEVT1/2和DCBEVT1/2。这是更高级的保护方式。DC子模块的核心功能是将片内模拟比较器CMPSS模块的输出DCAH/DCAL,DCBH/DCBL与TZ1-TZ3引脚逻辑进行组合生成更复杂的故障判断逻辑。例如你可以配置只有当“电流高于阈值A”模拟比较器1输出高并且“外部急停按钮按下”TZ1引脚为低时才触发一个OSHT事件。通过TZDCSEL寄存器你可以将DCAEVT1或DCBEVT1事件映射为OSHT触发源将DCAEVT2或DCBEVT2事件映射为CBC触发源。这为实现分层、多条件的故障保护提供了极大的灵活性。3.4 保护动作配置与输出强制当故障事件无论是TZn还是DC事件被触发时ePWM模块可以对两路输出EPWMxA和EPWMxB采取独立的强制动作。这是通过TZCTL寄存器配置的TZCTL[TZA][TZB]设置对应输出引脚动作00强制为高阻态High-Z01强制为高电平10强制为低电平11无动作忽略此次故障**高阻态High-Z**是一个非常有用且安全的状态。它将PWM输出引脚与内部驱电路断开引脚呈现高阻抗。如果外部栅极驱动芯片有下拉电阻那么功率管栅极电压会被拉到关断电平从而实现安全关断。这避免了在故障时因输出固定电平可能导致的意外导通。工程配置示例 假设我们用一个ePWM模块ePWM1驱动三相逆变器的一个桥臂A相。我们连接TZ1: 连接到硬件过流比较器输出低电平表示过流。TZ2: 连接到硬件过热传感器输出低电平表示过热。我们希望过流TZ1是严重故障触发OSHT保护将上下管驱动均强制为高阻态并锁存。过热TZ2是轻度故障触发CBC保护仅将下管低边强制拉低防止直通上管正常调制过热消失后自动恢复。配置代码思路// 1. 选择故障源和模式 EALLOW; // 解除寄存器保护 EPwm1Regs.TZSEL.bit.OSHT1 1; // TZ1 作为 ePWM1 的 OSHT 源 EPwm1Regs.TZSEL.bit.CBC2 1; // TZ2 作为 ePWM1 的 CBC 源 // 2. 配置故障动作 EPwm1Regs.TZCTL.bit.TZA 0; // TZA (EPWM1A) 故障时强制高阻 EPwm1Regs.TZCTL.bit.TZB 0; // TZB (EPWM1B) 故障时强制高阻 // 注意TZCTL对OSHT和CBC事件是共用的。更精细的控制需要结合DC事件和TZCTL的DCAEVT/DCBEVT位。 // 对于此例OSHT和CBC都会触发上述动作。为了区分通常将CBC和OSHT配置到不同的ePWM模块 // 或者使用DC事件来区分。这里为简化假设TZ2(CBC)我们希望不同动作则需要用DC事件或另一个ePWM模块。 // 更合理的做法将TZ2也配置为OSHT但动作设为拉低下管。或者使用两个ePWM模块分别响应。 // 3. 使能故障中断如果需要软件记录 EPwm1Regs.TZEINT.bit.OST 1; // 使能 OSHT 中断 EPwm1Regs.TZEINT.bit.CBC 1; // 使能 CBC 中断 EDIS; // 恢复寄存器保护 // 4. 在中断服务程序(ISR)中处理 __interrupt void epwm1_tz_isr(void) { if (EPwm1Regs.TZFLG.bit.OST 1) { // 严重过流系统停机 System_Halt(); EPwm1Regs.TZCLR.bit.OST 1; // 清除OST标志虽然可能已停机 EPwm1Regs.TZCLR.bit.INT 1; // 清除全局中断标志 } if (EPwm1Regs.TZFLG.bit.CBC 1) { // 过热限流记录或报警 Log_OverTemp_Event(); EPwm1Regs.TZCLR.bit.CBC 1; // 清除CBC标志 EPwm1Regs.TZCLR.bit.INT 1; // 清除全局中断标志 // 注意输出状态硬件会在下个周期自动恢复无需软件干预 } PieCtrlRegs.PIEACK.all PIEACK_GROUP2; // 确认PIE组中断 }重要陷阱与心得异步陷阱TZ1-TZ3是异步信号最小低脉冲宽度需要大于3 * TBCLK周期才能被可靠捕获。如果你的故障信号是快速毛刺可能需要先在GPIO MUX中配置数字滤波器Input X-Bar或者用外部RC电路进行滤波防止误触发。标志位清除顺序在中断服务程序中必须先清除具体的故障标志TZCLR[OST]或TZCLR[CBC]再清除全局中断标志TZCLR[INT]。如果顺序反了可能会立即再次进入中断。OSHT恢复OSHT事件触发后即使清除了TZFLG[OST]标志PWM输出也不会自动恢复到之前的调制状态。输出将保持TZCTL配置的强制状态高、低或高阻。要恢复正常PWM输出通常需要清除TZFLG[OST]。确认外部故障条件已解除TZn引脚已恢复高电平。有时还需要重新初始化或使能AQ子模块的输出例如重新配置AQCTLA/AQCTLB因为强制动作可能覆盖了AQ的输出控制。最稳妥的方式是在故障恢复流程中重新初始化整个ePWM模块的相关配置。软件强制测试TZFRC寄存器允许你通过软件模拟故障事件这对调试保护电路极其有用。你可以在代码中手动置位TZFRC[CBC]或TZFRC[OST]来测试保护动作是否按预期执行而无需制造真实的硬件故障。4. 高级特性PWM斩波器PC与事件触发ET除了核心的死区和保护ePWM还有两个在特定场景下非常有用的子模块PWM斩波器PWM-Chopper和事件触发器Event-Trigger。4.1 PWM斩波器PC的应用驱动脉冲变压器PWM斩波器主要用于驱动脉冲变压器型栅极驱动电路。这种驱动方式在高压、隔离要求高的场合很常见。它的原理是用一个高频载波Chopping Carrier去调制原始的PWM波这样可以通过一个小型变压器传递能量和信号。PC子模块的关键功能首脉冲宽度可编程One-Shot Pulse第一个脉冲的宽度可以通过PCCTL[OSHTWTH]位编程16级可选。这个宽脉冲提供更高的能量确保功率管能快速、可靠地开通克服变压器和米勒电容的影响。后续维持脉冲占空比可编程Duty Cycle Control第一个脉冲之后的高频载波脉冲其占空比可以通过PCCTL[CHPDUTY]位编程7种选择12.5%到87.5%。这用于维持功率管的导通状态同时避免脉冲变压器磁芯饱和。通过调节占空比可以优化变压器的伏秒积。载波频率可编程Chopping Frequency通过PCCTL[CHPFREQ]位设置载波频率由系统时钟VCLK3分频得到。配置要点计算首脉冲宽度T_first_pulse T_vclk3 * 8 * OSHTWTH。例如VCLK3100MHz(T10ns)OSHTWTH4则首脉冲宽度为10ns * 8 * 4 320ns。选择维持脉冲占空比根据脉冲变压器的磁芯特性选择。通常从50%开始测试用示波器观察变压器原边/副边波形避免出现平顶饱和现象。占空比太小可能导致维持能量不足太大则容易饱和。使能与旁路通过PCCTL[CHPEN]位使能或旁路整个斩波器。在不需要变压器驱动的应用中务必将其旁路以减少不必要的信号延迟和失真。4.2 事件触发器ET与ADC同步采样事件触发器子模块是连接PWM时序与ADC采样的桥梁对于实现精准的电机相电流采样、母线电压采样等至关重要。核心功能ET模块监控来自时基TB、计数比较CC和数字比较DC子模块的事件如CTRPRD,CTRCMPA,CTR0等并可以对这些事件进行分频Prescale后产生中断EPWMxINT或ADC启动转换SOC脉冲EPWMxSOCA/B。在电机FOC控制中的典型应用 在空间矢量调制SVPWM中我们通常希望在PWM周期的特定时刻例如中心对齐模式下的波谷或波峰对相电流进行采样此时电流纹波较小采样值更准确。配置流程选择事件源在中心对齐模式下通常选择CTR0计数器从下往上过零点或CTRPRD计数器从上往下过零点作为触发事件。通过ETSEL[SOCASEL]寄存器位选择。设置事件分频通过ETPS[SOCAPRD]设置产生SOC脉冲所需的事件次数。通常设为1每个事件都触发。如果你希望每两个PWM周期采样一次可以设为2。使能SOC输出置位ETSEL[SOCAEN]。连接ADC在ADC模块中配置相应的SOC触发源为对应的EPWMxSOCA信号。示例在中心对齐PWM波谷处触发ADC采样// 假设 ePWM1 配置为中心对齐增减计数模式PRD 已设置 EALLOW; // 选择 SOCA 的事件源为 CTR0 (波谷) EPwm1Regs.ETSEL.bit.SOCASEL 1; // 001b CTRZero // 设置 SOCA 为每个事件触发一次 EPwm1Regs.ETPS.bit.SOCAPRD 1; // 01b 每1个事件产生一个脉冲 // 使能 SOCA 发生器 EPwm1Regs.ETSEL.bit.SOCAEN 1; EDIS;这样每当PWM计数器从1递减到0时就会产生一个EPWM1SOCA脉冲触发ADC启动一次转换。在ADC中断中读取的采样值就对应着PWM波谷时刻的电流。高级技巧利用ETPS[SOCACNT]可以监控已经发生的事件计数用于诊断。ETFRC[SOCA]可以软件强制触发一次SOC用于初始校准或特殊控制序列。5. 系统集成、调试技巧与常见问题排查将死区、故障保护、事件触发等功能集成到一个完整的电机控制或电源应用中需要考虑模块间的协作和系统的实时性。5.1 初始化与配置顺序建议一个稳健的ePWM初始化流程通常遵循以下顺序全局禁用与安全状态在配置开始前先通过Trip-Zone子模块强制PWM输出为安全状态如高阻或低电平。可以配置TZCTL并手动置位TZFRC[OST]来实现。配置时基TB模块设置时钟预分频、计数模式增减/递增、周期值TBPRD。这是PWM的“心脏”。配置计数比较CC模块设置CMPA和CMPB的初始值并配置其影子寄存器加载方式在CTR0或CTRPRD时加载。配置动作限定器AQ模块定义当CTR与CMPA、CMPB、0、PRD比较匹配时EPWMxA和EPWMxB输出如何动作置高、置低、翻转。这是生成原始PWM波形的关键。配置死区DB模块根据驱动电路需求设置死区模式、延迟时间、极性。配置故障保护TZ模块配置故障源、模式CBC/OSHT和强制动作。务必在最后使能PWM输出前完成此配置。配置事件触发ET模块如果需要设置中断和SOC触发条件。解除强制并启动清除之前设置的软件强制故障标志TZCLR然后通过清除TZCTL的强制设置或重新使能AQ输出让PWM开始正常调制。5.2 调试技巧与工具使用示波器是关键死区测量使用示波器的两个通道分别测量上下管的栅极驱动信号。使用上升沿/下降沿延时测量功能精确验证死区时间是否与设定值相符并确保完全没有重叠。故障保护测试手动拉低TZn测试引脚或通过TZFRC软件强制观察PWM输出是否立即变为预设的安全状态高、低、高阻。测量从故障信号发出到PWM输出改变的实际响应时间。ADC同步验证将ADC转换结果通过DAC输出或用软件映射到GPIO用示波器观察其与PWM波形的相对位置确保采样点确实在期望的时刻如波谷/波峰。利用CCS的寄存器观察窗口和图形化工具Code Composer Studio可以实时显示所有ePWM寄存器的值。对于影子寄存器如CMPA要区分活动寄存器Active Register和影子寄存器Shadow Register的值。图形化工具如SysConfig可以直观地配置各子模块并生成初始化代码是快速上手的好帮手。从简单到复杂先配置一个ePWM模块生成不带死区的简单PWM验证AQ和TB模块。然后逐步添加死区、故障保护、事件触发等功能。每步都进行测试。5.3 常见问题排查速查表现象可能原因排查步骤无PWM输出1. 时基模块未启动TBCTL未使能。2. 输出被Trip-Zone强制检查TZFLG和TZCTL。3. GPIO复用未配置为PWM功能。1. 检查TBCTL[CTRMODE]是否非停止模式。2. 检查TZFLG寄存器清除故障标志。检查TZCTL配置。3. 检查GPIOxMUX和GPIOxGMUX寄存器。死区时间不正确或无效1.DBRED/DBFED寄存器值计算错误或未写入。2.DBCTL[OUT_MODE]配置错误延迟模块未使能。3.TBCLK时钟分频设置错误导致时间基准不对。1. 重新计算并写入寄存器注意半周期时钟使能位HALFCYCLE。2. 核对OUT_MODE确保S1和S0位已使能所需延迟。3. 检查TBCTL[HSPCLKDIV]和TBCTL[CLKDIV]分频设置。故障保护不动作1. TZn输入引脚未正确配置或故障信号电平不对需低有效。2.TZSEL寄存器未使能对应故障源。3.TZCTL配置为“无动作”(11b)。4. 故障脉冲宽度太短小于3*TBCLK。1. 用示波器测量TZn引脚电平检查GPIO配置。2. 确认TZSEL[OSHTn]或TZSEL[CBCn]已置位。3. 检查TZCTL[TZA/TZB]值是否为00,01,10之一。4. 延长故障信号低电平时间或配置GPIO输入滤波器。CBC保护无法自动恢复1. 故障信号持续为低未消失。2. 误解了CBC机制输出状态在CTR0时自动恢复但TZFLG[CBC]标志需软件清除。1. 检查故障源是否已排除。2. 在中断服务程序中确认已清除TZFLG[CBC]标志。ADC采样时刻不对1.ETSEL[SOCASEL]选择的事件源不对。2.ETPS[SOCAPRD]分频设置错误。3. ADC模块的触发源未正确选择为该ePWM的SOC信号。1. 确认PWM计数模式增减/递增与所选事件源CTR0/PRD/CMPA匹配。2. 检查ETPS[SOCAPRD]和ETPS[SOCACNT]的值。3. 检查ADC的SOC配置确认触发源选择寄存器。PWM输出有毛刺1. 在PWM周期中间更新了非影子寄存器如DBCTL,TZCTL。2. 软件同时更新多个ePWM模块的寄存器导致时序错乱。3. 电源或地线噪声干扰。1. 确保在TBCTR0时通过ET中断或查询更新非影子寄存器。2. 使用影子寄存器如CMPA进行关键参数更新并利用TBCTL[PHSEN]和TBPHS进行模块间同步。3. 检查PCB布局确保功率地和信号地分离驱动回路面积最小。最后再分享一个我调试双电机驱动时的深刻体会一定要充分利用ePWM模块的同步链EPWMxSYNCI/EPWMxSYNCO。对于多轴控制将所有ePWM模块的时基通过同步信号串联起来可以确保所有PWM的计数周期严格对齐这对于减少并联运行时的拍频噪声和实现精确定时至关重要。同步点的选择通常为主模块的CTR0时刻和相位偏移TBPHS的设定是实现复杂多轴协同控制的基础。