深入解析ePWM数字比较子模块:事件触发、滤波与多模块同步应用
1. 深入解析ePWM数字比较子模块事件触发、滤波与多模块同步应用在电力电子和电机控制领域精确的时序控制是系统稳定与高效运行的生命线。德州仪器TIC2000系列微控制器中的增强型脉宽调制器ePWM模块正是为此而生的精密“时钟心脏”。它远不止是一个简单的PWM发生器而是一个集成了时间基准、比较、动作限定、死区、事件触发、跳变保护以及我们今天要重点剖析的数字比较Digital Compare, DC子模块的复杂系统。很多工程师在初次接触ePWM时往往只关注如何生成占空比却忽略了DC子模块这颗“瑞士军刀”般的强大功能。它能让你的PWM系统“睁开眼”直接感知外部世界的模拟或数字信号比如过流、过压、故障反馈并瞬间做出反应——触发ADC采样、产生中断、强制PWM输出进入安全状态甚至指挥其他PWM模块协同工作。理解并熟练运用DC子模块是从“会调PWM”到“精通系统级实时控制”的关键一步。本文将从一线工程师的视角拆解DC子模块的事件触发、滤波消隐以及多模块同步三大核心机制并结合Buck变换器、H桥、三相逆变器等典型场景手把手带你掌握其配置精髓与避坑要点。2. 数字比较子模块的核心架构与设计思路2.1 子模块定位ePWM系统的“哨兵”与“信使”在ePWM的大家族里每个子模块各司其职。时间基准TB子模块是节拍器比较CC子模块是乐谱动作限定AQ子模块是演奏家而死区DB和斩波PC子模块则是效果器。那么数字比较DC子模块扮演什么角色我认为它更像是一个哨兵和信使。它的核心职责是监控外部输入信号并与内部设定的条件进行比较一旦匹配立即生成事件信号。这些事件信号DCAEVT1/2, DCBEVT1/2就是它发出的“警报”或“指令”能够被分发给其他三个关键子模块事件触发ET子模块接收事件用于触发ADC启动转换SOC这是实现电流环、电压环等闭环控制中同步采样的关键。跳变区TZ子模块接收事件用于产生快速保护直接强制PWM输出进入高阻、拉高或拉低的安全状态响应速度极快纳秒级。时间基准TB子模块接收事件用于产生同步信号SYNC协调多个ePWM模块的计数相位实现多相交错、移相等复杂拓扑。这种设计将信号感知与动作执行解耦带来了极大的灵活性。你可以自由配置哪个外部信号触发哪个事件这个事件是去触发ADC还是产生中断或是强制跳变这种配置能力正是DC子模块强大之处。2.2 信号通路总览从输入到行动的完整链条要理解DC子模块必须厘清其信号流。根据技术手册的框图我们可以梳理出以下核心路径输入侧信号源主要来源于三个跳变输入引脚TZ1, TZ2, TZ3。这些引脚通常连接比较器输出或数字故障信号。信号选择通过DCTRIPSEL寄存器你可以灵活地将 TZ1/TZ2/TZ3 分配给Digital Compare A High (DCAH)、Digital Compare A Low (DCAL)、Digital Compare B High (DCBH)、Digital Compare B Low (DCBL)这四类比较信号。注意高H和低L是逻辑电平概念你可以配置为高电平有效或低电平有效。核心处理事件生成与滤波事件生成DCAH/L 和 DCBH/L 信号经过TZDCSEL寄存器的“限定”逻辑生成最终的事件信号DCAEVT1, DCAEVT2, DCBEVT1, DCBEVT2。这里有两个A事件和两个B事件为多路控制提供了冗余或分级触发的可能。滤波消隐窗口生成的事件信号可以选择直接使用也可以送入一个可配置的消隐窗口Blanking Window滤波器。这个滤波器的作用是屏蔽掉PWM开关周期内特定时间段通常是开关管动作瞬间产生的噪声毛刺防止误触发。滤波后的信号称为DCEVTFILT。输出分发动作执行每个事件DCAEVT1/2, DCBEVT1/2或滤波后事件DCEVTFILT都可以独立配置产生四种类型的动作信号.force强制信号送往TZ子模块直接控制PWMxA/PWMxB引脚的输出状态高、低、高阻。.inter中断信号送往TZ子模块触发EPWMxTZINT中断让CPU介入处理。.soc启动转换信号送往ET子模块触发ADC的SOCA或SOCB启动一次模数转换。.sync同步信号送往TB子模块产生一个同步脉冲可以同步本模块或其他模块的计数器。关键理解.force和.inter是“应急处理”.force是硬件自动执行的“硬保护”.inter是通知CPU的“软保护”。而.soc和.sync是“协同工作”用于实现精确定时采样和多模块相位管理。2.3 寄存器地图掌控一切的钥匙配置DC子模块本质上是操作一组专用寄存器。下表是这些寄存器的功能速览建议在编程时放在手边参考寄存器名称地址偏移关键功能描述TZDCSEL0x24跳变区数字比较选择寄存器。决定TZ1/2/3信号如何被“限定”以生成DCAEVT和DCBEVT事件。这是事件生成的“规则制定器”。DCTRIPSEL0x60数字比较跳变选择寄存器。将TZ1/2/3引脚信号映射到DCAH/L和DCBH/L这四条比较信号线上。DCACTL0x60数字比较A控制寄存器。控制DCAEVT1和DCAEVT2的事件源选择直接事件还是滤波后事件、同步模式以及SOC/SYNC使能。DCBCTL0x64数字比较B控制寄存器。功能同DCACTL但针对DCBEVT1和DCBEVT2。DCFCTL0x64数字比较滤波控制寄存器。控制消隐窗口的使能、信号源选择、对齐脉冲CTR0或CTRPRD以及是否对滤波信号取反。DCFOFFSET0x68滤波偏移寄存器。定义消隐窗口起始点的延迟时间以TBCLK周期为单位。DCFWINDOW0x6C滤波窗口寄存器。定义消隐窗口的持续时间以TBCLK周期为单位。DCCAPCTL0x68数字比较捕获控制寄存器。控制当事件发生时是否捕获TBCTR时间基准计数器的值到DCCAP寄存器用于事后分析事件发生的精确时刻。DCCAP0x70数字比较捕获寄存器。当使能捕获时存储事件发生瞬间的TBCTR值。配置心得初始化时建议遵循“先选择后控制再滤波”的顺序。即先用DCTRIPSEL和TZDCSEL确定信号来源和事件生成规则然后用DCACTL/DCBCTL配置事件的具体行为最后根据需要配置DCFCTL、DCFOFFSET和DCFWINDOW来设置滤波。3. 事件触发机制深度解析与配置实战事件触发是DC子模块最常用的功能尤其是用于触发ADC采样。下面我们以使用DCAEVT1事件触发ADC的SOCA为例拆解其完整路径和配置步骤。3.1 触发路径拆解信号如何一步步抵达ADC假设我们的应用是峰值电流控制需要在外置比较器检测到电流达到设定值时立即触发ADC采样电感电流。我们将比较器输出连接到TZ1引脚。信号映射 (DCTRIPSEL) 首先我们需要告诉DC子模块TZ1引脚上的信号属于哪条比较线。例如我们将其配置为DCTRIPSEL.DCAHCOMPSEL 1(选择TZ1作为DCAH的信号源)。这意味着当TZ1为高电平时DCAH信号有效。事件生成 (TZDCSEL) 接着定义DCAH信号如何生成事件。通过TZDCSEL寄存器我们可以配置DCAH信号是用于生成DCAEVT1还是DCAEVT2或者两者都生成。例如设置TZDCSEL.DCAEVT1SRCSEL 1(选择DCAH作为DCAEVT1的源)。现在TZ1引脚的高电平就会产生DCAEVT1事件。事件行为配置 (DCACTL) 生成了DCAEVT1事件我们决定用它来触发ADC。需要配置DCACTL.EVT1SOCE 1使能DCAEVT1的.soc信号输出。ADC触发选择 (ETSEL) DCAEVT1.soc信号已经产生但它只是送到了事件触发ET子模块的门口。我们还需要在ET子模块中“开门”选择这个信号作为ADC SOCA的触发源。配置ETSEL.SOCASEL 4(选择DCAEVT1作为SOCA的触发源)。ADC SOC脉冲生成 (ETPS, ETFLG等) 最后ET子模块内部有一个脉冲发生器。当它收到DCAEVT1.soc信号后会根据ETPS[SOCACNT]和ETPS[SOCAPRD]的配置通常设为单次触发产生一个精确的、一个TBCLK周期宽度的脉冲SOCA这个脉冲直接连接到ADC模块启动一次转换。配置代码片段示例// 假设 ePWM1 模块TZ1 连接过流比较器输出 // 1. 映射 TZ1 到 DCAH EPwm1Regs.DCTRIPSEL.bit.DCAHCOMPSEL 1; // TZ1 - DCAH // 2. 配置 DCAH 高电平产生 DCAEVT1 事件 EPwm1Regs.TZDCSEL.bit.DCAEVT1SRCSEL 1; // DCAH - DCAEVT1 // 3. 使能 DCAEVT1 事件产生 SOC 信号 EPwm1Regs.DCACTL.bit.EVT1SOCE 1; // Enable SOC generation from DCAEVT1 // 4. 在事件触发子模块中选择 DCAEVT1 作为 SOCA 的触发源 EPwm1Regs.ETSEL.bit.SOCASEL 4; // SOCA triggered by DCAEVT1 // 5. 配置 SOCA 为单次触发模式 EPwm1Regs.ETPS.bit.SOCACNT 0; // 计数器归零 EPwm1Regs.ETPS.bit.SOCAPRD 1; // 事件发生时产生一个脉冲 // 6. 可选使能 ADC SOCA 触发 // 此部分代码通常在ADC模块配置中例如 // AdcaRegs.ADCSOC0CTL.bit.TRIGSEL 1; // 选择 ePWM1 SOCA 作为触发源3.2 强制与中断触发硬件保护与软件响应除了触发ADC事件更重要的用途是保护。强制触发 (.force)这是最快的保护路径。当DCACTL.EVT1FRCSYNCSEL配置为异步模式且TZCTL[DCAEVT1]配置了相应动作如强制高、低、高阻时DCAEVT1.force信号会异步地不经过系统时钟同步直接作用于AQ子模块的输出控制逻辑立即改变PWMxA引脚的状态。这个过程通常在几十纳秒内完成用于应对短路等需要极速响应的故障。重要警告.force动作的优先级高于AQ子模块产生的常规PWM动作。其优先级顺序为TZA/TZB (最高) DCAEVT1/DCBEVT1 DCAEVT2/DCBEVT2 (最低)。配置时需要仔细规划避免冲突。中断触发 (.inter)当TZEINT[DCAEVT1]使能后DCAEVT1.inter信号会置位TZFLG[DCAEVT1]标志并产生EPWMxTZINT中断。CPU可以在中断服务程序中记录故障、执行复杂的安全策略如关闭驱动、上报错误。响应速度在微秒级适合需要软件介入处理的故障如过温、轻微过载。操作要点在中断服务程序中必须手动清除中断标志否则会持续产生中断。清除方法是向TZCLR[DCAEVT1]位写1。3.3 同步触发协调多模块的节拍器DCAEVT1.sync 和 DCBEVT1.sync 信号可以与外部同步输入EPWMxSYNCI及软件强制同步SWFSYNC信号进行“或”操作共同产生一个同步脉冲给TB子模块。这允许一个外部事件如某个比较器动作来重新同步整个ePWM系统的相位。这在需要多个模块动态调整相位的应用中非常有用例如在功率因数校正PFC中根据电网过零点同步。配置同步的要点使能同步输出DCACTL.EVT1SYNCE 1。在TB子模块中配置同步输入源和相位加载逻辑。虽然同步信号产生了但TB计数器是否加载相位寄存器TBPHS的值还取决于TBCTL.PHSEN位。4. 消隐窗口滤波屏蔽开关噪声的“时间盾牌”在开关电源中MOSFET或IGBT开关瞬间会产生巨大的电压和电流尖峰这些噪声可能被比较器误判为故障信号导致误触发。消隐窗口Blanking Window就是为解决此问题而设计的。4.1 滤波原理在特定时间段“捂住耳朵”消隐窗口的逻辑很简单在PWM周期内你认为可能产生噪声的一小段时间里让DC子模块“忽略”所有输入事件。这段时间窗口由两个参数定义偏移量 (Offset)由DCFOFFSET寄存器设置。它定义了从窗口对齐的基准点如计数器归零CTR0开始延迟多少个TBCLK周期后消隐窗口才开启。窗口宽度 (Window)由DCFWINDOW寄存器设置。它定义了消隐窗口持续多少个TBCLK周期。窗口对齐基准由DCFCTL[PULSESEL]选择可以是CTR0或CTRPRD。这通常对应PWM波形的谷底或峰值点也是开关管动作的时刻。4.2 配置步骤与计算示例假设一个Buck变换器采用上管PWM、下管同步整流的控制方式。上管在CTR0时开通在CTRCMPA时关断。开通瞬间的电流尖峰最容易引起误触发。我们希望在这个开通瞬间后的一小段时间内屏蔽故障信号。系统参数PWM频率 100kHz (周期T10us)TBCLK 100MHz (周期10ns)。采用增减计数模式TBPRD 500 (对应半周期5us)。设计目标在上管开通后CTR0点的1us内屏蔽故障信号。计算对齐脉冲选择DCFCTL.PULSESEL 0(选择 CTR0 对齐)。偏移量 Offset我们希望窗口从CTR0后立即开始所以设DCFOFFSET 0。窗口宽度 Window需要屏蔽1us。1us / 10ns 100 个 TBCLK周期。因此DCFWINDOW 100。配置代码// 使能消隐窗口并选择 DCAEVT1 作为滤波源 EPwm1Regs.DCFCTL.bit.BLANKE 1; // Enable blanking window EPwm1Regs.DCFCTL.bit.PULSESEL 0; // Window aligned to CTR0 EPwm1Regs.DCFCTL.bit.SRCSEL 0; // Filter source is DCAEVT1 (假设) // 设置偏移和窗口宽度 EPwm1Regs.DCFOFFSET 0; // 从CTR0点开始 EPwm1Regs.DCFWINDOW 100; // 屏蔽持续100个TBCLK (1us) // 注意还需要在DCACTL中将DCAEVT1的事件源选择为滤波后的信号 EPwm1Regs.DCACTL.bit.EVT1SRCSEL 1; // DCAEVT1 source filtered signal (DCEVTFILT)4.3 高级特性计数器捕获DCCAPCTL和DCCAP寄存器提供了一个强大的调试功能事件捕获。当使能捕获 (DCCAPCTL.CAPE1) 后一旦有事件即使是发生在消隐窗口内的事件发生当前的TBCTR值就会被锁存到DCCAP寄存器中。这个功能有什么用故障诊断当系统意外触发保护时你可以读取DCCAP的值精确知道故障发生在PWM周期的哪个时刻。结合CMPA/CMPB的值可以判断是否是因为占空比过大、过小或是在开关瞬间发生的。时序分析验证消隐窗口设置是否合理。如果捕获到的事件时间戳总是在消隐窗口之外说明窗口设置有效如果总是在窗口内则可能是噪声过大或窗口设置太窄。系统校准在需要精确时间戳的应用中用测量外部事件的相对时间。避坑指南消隐窗口的Offset Window总和不能超过PWM半周期增减计数模式或全周期增计数模式的TBCLK数。否则窗口会跨越边界行为可能不符合预期。务必在初始化时进行数值校验。5. 多模块同步应用从独立运行到交响乐团单个ePWM模块可以独立工作但真正的威力在于多个模块的协同。DC子模块的同步信号.sync是实现这种协同的关键纽带之一。5.1 同步基础主从模式与相位控制ePWM模块间的同步主要通过TB子模块的EPWMxSYNCI同步输入和EPWMxSYNCO同步输出引脚完成。一个模块可以配置为主模块在特定时刻如CTR0或CTRCMPB产生同步脉冲输出其他模块配置为从模块在收到同步输入脉冲时可以选择将自己的计数器TBCTR加载为相位寄存器TBPHS的值。典型的主从配置代码以ePWM1为主ePWM2为从// ePWM1 主模块配置 EPwm1Regs.TBCTL.bit.SYNCOSEL TB_CTR_ZERO; // 在CTR0时产生同步输出 EPwm1Regs.TBCTL.bit.PHSEN TB_DISABLE; // 主模块忽略同步输入 // ePWM2 从模块配置 EPwm2Regs.TBCTL.bit.SYNCOSEL TB_SYNC_IN; // 同步输出 同步输入 (流经模式) EPwm2Regs.TBCTL.bit.PHSEN TB_ENABLE; // 使能相位加载 EPwm2Regs.TBPHS.half.TBPHS desired_phase_value; // 设置想要的相位差这样每当ePWM1的计数器归零时它会发出一个同步脉冲。ePWM2收到这个脉冲后立即将TBCTR设置为TBPHS的值从而实现两个模块间固定的相位差。5.2 结合DC事件的高级同步场景单纯的周期同步很常见但有时我们需要基于事件的动态同步。这时DC子模块的.sync信号就派上用场了。应用场景举例交错并联Buck变换器两个Buck模块交错180度运行以减小输入电流纹波。通常使用主从模式固定相位差即可。但如果某个模块因故障保护而暂停恢复后需要快速重新同步到正确的相位这时可以利用DC事件。正常同步ePWM1为主在CTR0时发出同步信号给ePWM2ePWM2相位偏移180度。故障与恢复ePWM2因过流由TZ信号触发DC事件而关闭。故障清除后需要让ePWM2的计数器从正确的180度相位点开始。事件同步实现配置ePWM2的DC事件例如DCBEVT1产生.sync信号 (DCBCTL.EVT1SYNCE1)并将此sync信号作为TB的同步源之一。在故障恢复的软件例程中可以软件强制一次DC事件 (TZFRC.DCBEVT11)。这个强制产生的事件会发出一个同步脉冲ePWM2的TB模块在收到后立即将TBCTR加载为TBPHS值为180度相位对应的值从而实现快速、精确的相位重锁。配置要点确保TBCTL.SYNCOSEL配置为能接收内部同步信号如来自DC事件的模式。软件强制事件后需要清除强制标志。5.3 复杂系统同步拓扑在如三相逆变器、多相交错PFC等复杂系统中同步链可能很长。例如一个主模块同步两个从模块其中一个从模块再去同步另一个子模块。这时需要精心规划SYNCOSEL的设置主模块SYNCOSEL TB_CTR_ZERO或TB_CTR_CMPB。中间从模块SYNCOSEL TB_SYNC_IN流经模式将接收到的同步信号原样传递给下一级。末端从模块SYNCOSEL TB_SYNC_DISABLE或TB_CTR_ZERO如果不需要再同步下游。经验之谈在多模块系统中务必注意同步信号的传播延迟。虽然ePWM硬件同步几乎是即时的但如果你使用软件强制同步SWFSYNC或基于事件的同步从事件发生到计数器实际加载会有几个TBCLK周期的延迟。在计算精确相位时需要将这个延迟考虑进去尤其是在高频开关场合。一个简单的验证方法是使用GPIO翻转来测量同步事件和PWM边沿的实际时间差。6. 实战配置案例与常见问题排查6.1 案例一基于峰值电流模式的同步Buck转换器目标利用DC子模块实现峰值电流控制。电流采样信号经比较器与参考值比较输出接TZ1。当电流达到峰值时触发ADC采样用于环路计算并同时关闭上管逐周期限流。配置步骤硬件连接电流比较器输出 - MCU的 TZ1 引脚。ADC采样通道连接到电流传感器信号。ePWM配置TB子模块设置计数模式和周期。CC子模块CMPA用于设置占空比CMPB可以设为一个很小的值或使用CMPA的阴影寄存器作为最小关断时间。AQ子模块配置PWMxA在CTR0时置高上管开在CTRCMPA时清零上管关。PWMxB配置为互补输出带死区。DC子模块核心配置// 1. 信号映射与事件生成 EPwm1Regs.DCTRIPSEL.bit.DCAHCOMPSEL 1; // TZ1 - DCAH EPwm1Regs.TZDCSEL.bit.DCAEVT1SRCSEL 1; // DCAH - DCAEVT1 // 2. 使能消隐窗口防止开通噪声 EPwm1Regs.DCFCTL.bit.BLANKE 1; EPwm1Regs.DCFCTL.bit.PULSESEL 0; // 对齐到CTR0上管开通点 EPwm1Regs.DCFOFFSET 10; // 延迟100ns后开始 EPwm1Regs.DCFWINDOW 50; // 屏蔽500ns EPwm1Regs.DCACTL.bit.EVT1SRCSEL 1; // DCAEVT1使用滤波后信号 // 3. 配置DCAEVT1同时触发ADC和强制关断 EPwm1Regs.DCACTL.bit.EVT1SOCE 1; // 使能SOC信号 EPwm1Regs.ETSEL.bit.SOCASEL 4; // SOCA由DCAEVT1触发 EPwm1Regs.ETPS.bit.SOCAPRD 1; // 单次触发 // 配置强制动作逐周期保护 EPwm1Regs.DCACTL.bit.EVT1FRCSYNCSEL 0; // 异步强制响应最快 EPwm1Regs.TZSEL.bit.DCAEVT1 1; // 将DCAEVT1配置为逐周期CBC跳变源 EPwm1Regs.TZCTL.bit.DCAEVT1 TZ_FORCE_HI; // 动作强制PWMxA高或根据电路设计为低/高阻 // 注意这里强制动作需要根据你的驱动逻辑高有效/低有效来设置。对于上管通常故障时需要关断强制低。 // 假设PWMxA高电平为上管开通则故障时应强制低TZ_FORCE_LO。 EPwm1Regs.TZCTL.bit.DCAEVT1 TZ_FORCE_LO; // 修正故障时强制PWMxA输出低电平关断上管。ADC配置将ADC的SOC0触发源设置为ePWM1的SOCA。工作流程每个周期CTR从0开始上升上管开通。电流上升。当电流达到比较器阈值TZ1变高。若此时不在消隐窗口内则产生DCAEVT1事件。该事件一方面触发ADC启动采样用于电压环计算下一个周期的占空比另一方面通过CBC路径立即强制PWMxA输出为低关断上管实现逐周期峰值电流保护。6.2 案例二三相逆变器的故障保护与同步目标三相逆变器中任何一相的下桥臂直通都是致命故障。使用三个比较器分别监测三相下桥臂电流输出接TZ1, TZ2, TZ3。任一相过流立即关闭全部6个PWM输出异步强制并产生中断记录故障相。配置思路将TZ1, TZ2, TZ3通过DCTRIPSEL分别映射到DCAH, DCBH, DCAH第二个事件等。在TZDCSEL中将这些信号进行“或”逻辑组合最终生成一个全局故障事件例如DCAEVT1。配置DCAEVT1的.force动作为异步强制并作用于所有ePWM模块的TZ子模块通过TZ引脚联动或软件统一配置。同时使能DCAEVT1的中断在中断中读取TZFLG或DCCAP寄存器判断具体是哪一相出的问题。关键配置// 以ePWM1为例假设TZ1监控U相下管电流 EPwm1Regs.DCTRIPSEL.bit.DCAHCOMPSEL 1; // TZ1 - DCAH EPwm1Regs.TZDCSEL.bit.DCAEVT1SRCSEL 1; // DCAH - DCAEVT1 // 配置为异步强制最高优先级 EPwm1Regs.DCACTL.bit.EVT1FRCSYNCSEL 0; // 异步强制 EPwm1Regs.TZSEL.bit.DCAEVT1 2; // 2 One-shot Trip (OST) 一次性跳变锁存直到软件清除 EPwm1Regs.TZCTL.bit.TZA TZ_FORCE_HI; // 假设高电平为关闭状态 EPwm1Regs.TZCTL.bit.TZB TZ_FORCE_HI; // 使能中断 EPwm1Regs.TZEINT.bit.DCAEVT1 1;6.3 常见问题排查速查表现象可能原因排查步骤DC事件无法触发ADC1. 事件源选择错误 (DCTRIPSEL,TZDCSEL)。2. SOC信号未使能 (DCACTL.EVT1SOCE)。3. ET子模块未选择该事件 (ETSEL.SOCASEL)。4. ADC未配置对应SOC通道的触发源。1. 检查TZ引脚电平变化是否能触发中断先验证事件生成。2. 使用仿真器查看DCACTL、ETSEL寄存器值。3. 检查ADC的ADCSOCxCTL.TRIGSEL寄存器。消隐窗口无效仍有误触发1. 窗口偏移或宽度计算错误未覆盖噪声时段。2.DCFCTL.SRCSEL未选择要滤波的事件。3.DCACTL.EVT1SRCSEL未设置为使用滤波后信号 (1)。4. 噪声脉冲宽度大于消隐窗口。1. 用示波器同时观察PWM开关节点和TZ输入信号确认噪声时间。2. 核对DCFOFFSET和DCFWINDOW寄存器值。3. 尝试增大窗口宽度。强制保护动作太慢1. 错误配置为同步强制 (EVT1FRCSYNCSEL1)。2. TZ子模块动作配置 (TZCTL) 错误。3. 外部比较器或信号路径延迟大。1. 确保DCACTL.EVT1FRCSYNCSEL0(异步)。2. 检查TZSEL寄存器确认DCAEVT1被使能为CBC或OST源。3. 测量从故障发生到PWM引脚实际变化的延迟。多模块同步相位不准1. 从模块的TBPHS值计算错误。2. 同步信号路径上有模块未配置为流经模式。3. 软件强制同步后未考虑延迟。4. 主从模块的时钟 (TBCLK) 不同源。1. 确认所有模块的TBCTL.CLKDIV和TBCTL.HSPCLKDIV分频一致。2. 检查同步链上每个模块的SYNCOSEL配置。3. 使用GPIO在同步事件和PWM边沿打点测量实际相位差。中断标志无法清除中断服务程序中没有正确清除标志位。在TZ中断服务程序中必须执行EPwm1Regs.TZCLR.bit.DCAEVT1 1;和EPwm1Regs.ETCLR.bit.INT 1;如果也使了ET中断。调试建议充分利用C2000的寄存器实时查看和CPU暂停外设继续运行的功能。在调试DC事件时可以设置事件触发中断在中断内设置断点然后观察TZFLG、DCCAP等寄存器的值这是定位问题最直接的方法。另外将未使用的PWM引脚配置为GPIO并输出特定电平用示波器捕捉是可视化同步事件和时序关系的宝贵手段。