
1. 项目概述为什么我们需要关注eHRPWM的“内功”在电力电子和电机驱动的世界里PWM脉冲宽度调制就像是驱动系统的“心跳”。无论是让电机平稳旋转还是让电源高效转换都离不开精准的PWM信号。但很多工程师在初期接触像TI C2000这类微控制器时往往只关注如何配置频率和占空比让电机转起来、让电源有输出却忽略了支撑这些基础功能背后的、至关重要的安全与精度机制。这就好比只学会了开车却不了解刹车系统和防抱死系统ABS的工作原理在平坦道路上或许无碍一旦遇到复杂路况或紧急情况隐患就暴露无遗。今天我想结合自己多年在伺服驱动和数字电源项目上的踩坑经验深入聊聊TI eHRPWM增强型高分辨率脉宽调制器模块里两个常被轻视却又无比关键的子模块死区生成器DB和故障保护TZ。我们项目里用的标题是“深入解析eHRPWM死区生成、斩波及故障保护子模块”但“斩波”部分相对独立我会把它作为原理补充。真正的核心也是调试中最容易出问题的就是死区和故障保护。死区配置不当轻则导致功率管发热异常重则瞬间“炸管”让整个桥臂短路烧毁。而故障保护配置不当或响应不及时则意味着系统失去了最后的硬件安全屏障无法在过流、过压时保护核心功率器件。这篇文章适合所有正在或即将使用C2000系列芯片进行电机控制、逆变器、UPS等开发的硬件和软件工程师。无论你是刚刚接手维护老代码还是正在从头搭建自己的驱动平台理解这些模块的底层逻辑和配置细节都能让你在调试时心里更有底在出了问题时不至于毫无头绪。接下来我会抛开数据手册上冰冷的框图用实际项目中的场景和代码带你搞懂它们到底是怎么工作的以及如何正确地配置它们。2. 死区生成器DB子模块不只是“延迟”那么简单死区英文叫Dead-Time或Dead-Band在桥式电路如全桥、半桥中是一个保命的设计。它的核心目的是确保同一桥臂的上管和下管不会同时导通避免形成直通短路产生巨大的短路电流损坏器件。eHRPWM模块中的死区生成器就是硬件上专门负责此事的“交通警察”。2.1 死区生成器的核心工作逻辑很多人对死区的理解就是“加一段延迟”但eHRPWM的死区生成器提供了精细化的控制。它接收来自动作限定器AQ输出的原始PWM信号EPWMxA_In和EPWMxB_In然后对信号的边沿进行独立的延迟处理最后输出一对带有死区关系的信号EPWMxA和EPWMxB。其内部结构可以理解为两个独立的可编程延迟线一个处理上升沿延迟Rising Edge Delay, RED一个处理下降沿延迟Falling Edge Delay, FED。每个延迟线的延迟时间由对应的寄存器值DBRED和DBFED乘以时间基准时钟TBCLK的周期来决定。公式很简单实际延迟时间 寄存器值 × TBCLK周期例如你的系统时钟SYSCLKOUT为100MHz时间基准预分频器设置为2分频即TBCLK50MHz那么TBCLK周期为20ns。如果你将DBRED设置为10那么上升沿延迟就是 10 × 20ns 200ns。注意DBRED和DBFED是10位寄存器最大值1023。延迟时间不能超过PWM周期的一半否则会导致有效脉宽严重畸变甚至消失。通常死区时间设置在几百纳秒到几微秒之间具体取决于你使用的功率器件如MOSFET、IGBT的开关特性。2.2 输入源与输出模式灵活配置的奥秘死区生成器的灵活性体现在其输入源选择和输出模式控制上这主要通过DBCTL寄存器配置。输入源选择DBCTL[IN_MODE] 这个配置决定了哪个信号作为两个延迟线的输入。默认情况下IN_MODE00EPWMxA_In同时作为上升沿和下降沿延迟的源这是最常用的模式用于从单个输入信号生成一对互补带死区的输出。但eHRPWM也支持更复杂的交叉配置例如用EPWMxA_In控制下降沿延迟用EPWMxB_In控制上升沿延迟。这种模式在某些需要特殊相位关系的复杂调制策略中可能会用到但在绝大多数标准互补PWM应用中我们保持默认即可。输出模式控制DBCTL[OUT_MODE] 这决定了延迟是否被应用到输出路径上。S0和S1这两个控制位分别控制下降沿延迟FED和上升沿延迟RED是否被旁路Bypass。S00旁路下降沿延迟模块EPWMxB输出不经过FED。S10旁路上升沿延迟模块EPWMxA输出不经过RED。 当两者都为1时延迟生效。S2和S3则用于选择最终输出的信号来源是经过延迟的信号还是原始信号。极性控制DBCTL[POLSEL] 这是最容易让人困惑的地方之一。它控制的是经过延迟后的信号在最终输出前是否进行反相。POLSEL有两个位分别控制EPWMxA和EPWMxB输出通道的极性。POLSEL00两个通道输出均不反相。POLSEL01仅EPWMxA输出反相。POLSEL10仅EPWMxB输出反相。POLSEL11两个通道输出均反相。这里有一个至关重要的实操心得极性控制不会改变死区插入的位置它只是在最终输出级对信号整体取反。死区即两个信号都不为有效电平的区域是由RED和FED的延迟动作创造的。POLSEL改变的是“有效电平”的定义。例如对于Active High高有效驱动有效电平是高电平对于Active Low低有效驱动有效电平是低电平。你需要根据你的功率驱动芯片如栅极驱动器IR2110需要的输入信号极性来配置POLSEL而不是根据死区来配置。2.3 经典死区模式配置实战数据手册中列举了多种模式但对于大多数桥式驱动应用我们主要用到其中几种“经典模式”。假设我们已经通过AQ模块生成了一对互补的、占空比为D的原始信号EPWMxA_In主信号和EPWMxB_In互补信号。模式2主动高互补Active High Complementary, AHC应用场景这是最常用的模式。你的栅极驱动器需要一对互补的、高电平有效的PWM信号来驱动上管和下管。当EPWMxA为高时上管导通EPWMxB为高时下管导通但两者之间必须有死区。配置DBCTL[IN_MODE] 00EPWMxA_In作为两个延迟的源。DBCTL[OUT_MODE] 11使能上升沿和下降沿延迟。DBCTL[POLSEL] 10这是什么意思记住POLSEL作用于延迟后的信号。在AHC模式下我们希望EPWMxA输出不反相高有效EPWMxB输出反相。因为原始AQ输出的EPWMxA_In和EPWMxB_In是互补的。我们对EPWMxB_In的延迟信号进行反相就得到了与EPWMxA延迟信号同相的高有效信号但两者边沿错开形成了死区。波形效果EPWMxA的上升沿被延迟RED下降沿不变EPWMxB的下降沿被延迟FED上升沿不变。最终两个信号的高电平脉冲之间永远不会重叠插入了一段两者都为低电平的死区时间。模式4主动高Active High, AH应用场景用于驱动需要同一极性信号的两个开关管或者在某些特定拓扑中。配置DBCTL[IN_MODE] 00DBCTL[OUT_MODE] 11DBCTL[POLSEL] 00两个输出均不反相。波形效果EPWMxA和EPWMxB都变成高有效且均由EPWMxA_In派生而来。EPWMxA的上升沿延迟EPWMxB的下降沿延迟。这样两个信号的高电平脉冲在时间上是错开的同样避免了重叠。模式1完全旁路配置DBCTL[OUT_MODE] 00。此时死区模块被完全绕过EPWMxA和EPWMxB直接输出AQ模块的结果。在不需要死区或者使用软件生成死区的场景下使用。在代码中配置通常如下所示以C2000 DriverLib库为例// 假设使用EPWM1模块 // 配置死区时间为1usTBCLK 100MHz / 2 50MHz (周期20ns) EPWM_setDeadBandDelayMode(EPWM1_BASE, EPWM_DB_RED, EPWM_DB_FED); // 使能RED和FED EPWM_setDeadBandDelayPolarity(EPWM1_BASE, EPWM_DB_POLARITY_ACTIVE_HIGH_CMPLIMENTARY); // 设置为AHC模式 EPWM_setRisingEdgeDeadBandDelayInput(EPWM1_BASE, EPWM_DB_INPUT_EPWMA); // RED源为EPWMA EPWM_setFallingEdgeDeadBandDelayInput(EPWM1_BASE, EPWM_DB_INPUT_EPWMA); // FED源为EPWMA EPWM_setDeadBandDelay(EPWM1_BASE, 50, 50); // 设置RED和FED的计数值50 * 20ns 1000ns 1us避坑指南务必在示波器上验证死区时间不要完全相信计算值。受PCB布局、驱动器传播延迟等因素影响实际测量值可能与计算值有微小差异。确保死区时间大于功率器件的“关断延迟时间”减去“开通延迟时间”并留有一定裕量。3. PWM斩波器PC子模块为脉冲变压器驱动而生PWM斩波器是一个相对小众但非常专用的功能。它的主要目的是用高频载波信号去调制原始的PWM波形。这听起来有点抽象我们直接说它的主要应用场景驱动脉冲变压器隔离的栅极驱动器。在高压、高隔离要求的场合如多电平逆变器、某些大功率IGBT驱动我们常使用脉冲变压器进行能量和信号的隔离传输。PWM斩波器的作用就是生成适合脉冲变压器工作的信号波形。3.1 斩波器的工作原理首脉冲与维持脉冲斩波器的工作可以分为两个阶段首脉冲One-Shot Pulse这是一个宽度可编程的独立脉冲。它的目的是在开关管需要开通时提供一个能量较高、宽度较宽的第一个脉冲以确保能够快速、可靠地给功率器件的栅极电容充电实现“硬开通”减少开通损耗。维持脉冲Sustaining Pulses在首脉冲之后斩波器会生成一系列高频脉冲串。这些脉冲的作用是在开关管整个导通期间持续为栅极提供能量以维持栅极电压抵消栅极电荷的泄漏确保开关管不会误关断。斩波器的载波频率Chopping Frequency由系统时钟SYSCLKOUT分频得到通过PCCTL[CHPFREQ]位配置。维持脉冲的占空比通过PCCTL[CHPDUTY]位配置可以在12.5%到87.5%之间以12.5%的步进选择。首脉冲的宽度则由PCCTL[OSHTWTH]控制其计算公式为首脉冲宽度 8 × OSHTWTH × SYSCLKOUT周期OSHTWTH是一个4位值1-16因此首脉冲宽度可以在8个到128个系统时钟周期内调节。3.2 何时使用及配置要点使用场景判断 如果你的栅极驱动电路使用的是带隔离的、集成自举或独立电源的芯片驱动器如光耦隔离驱动器那么通常不需要启用PWM斩波器。斩波器是专门为脉冲变压器耦合的驱动电路设计的。在这种电路中变压器无法传递直流分量必须用高频交流脉冲来传递开通/关断信息。首脉冲提供开通能量维持脉冲提供保持能量。配置示例与注意// 启用PWM斩波器 EPWM_enableChopper(EPWM1_BASE); // 设置斩波载波频率SYSCLKOUT 100MHz 设置为/16 则载波频率为 100MHz / 16 6.25MHz EPWM_setChopperClockFreq(EPWM1_BASE, EPWM_CHOPPER_CLOCK_FREQ_16); // 设置维持脉冲占空比为 50% EPWM_setChopperDutyCycle(EPWM1_BASE, EPWM_CHOPPER_DUTY_50_PERCENT); // 设置首脉冲宽度为 8 * 4 * 10ns 320ns (假设OSHTWTH4, SYSCLKOUT周期10ns) EPWM_setOneShotPulseWidth(EPWM1_BASE, 4);重要提示斩波器参数首脉冲宽度、维持脉冲占空比、载波频率需要与脉冲变压器的磁芯特性、匝数比以及次级整流电路紧密配合。如果维持脉冲占空比太小可能无法维持栅极电压如果太大可能导致变压器磁芯饱和。这部分设计需要深厚的电力电子知识和实际调试。4. 故障保护TZ子模块系统的硬件“紧急制动”故障保护子模块是eHRPWM的安全核心。它通过外部GPIO引脚TZ1-TZn接收故障信号通常是低电平有效并立即对PWM输出采取强制动作这个响应是硬件级别的不依赖于CPU中断服务程序速度极快通常在几十纳秒内完成这对于防止过流损坏IGBT或MOSFET至关重要。4.1 两种故障模式单次触发与逐周期限流TZ子模块支持两种故障响应模式对应不同的保护需求单次触发One-Shot Trip, OST行为当检测到故障信号TZn引脚变低时立即根据TZCTL寄存器的配置将PWM输出强制为高、低或高阻态并锁存这个状态。恢复只有在软件主动清除故障标志位TZCLR[OST]后PWM输出才能恢复正常。应用场景用于处理严重的、不可恢复的故障例如硬件过流保护、直流母线过压、IGBT去饱和检测等。这些故障通常意味着系统存在严重问题需要停机检查不能自动恢复。逐周期限流Cycle-By-Cycle Trip, CBC行为当检测到故障信号时同样立即强制PWM输出。但是在每个PWM周期开始时时间基准计数器TBCTR0硬件会自动检查故障信号是否依然存在。如果故障消失PWM输出自动恢复正常如果故障依然存在则继续强制输出。恢复自动的周期性的。应用场景用于峰值电流限制。例如在电机启动或突然加载时电流可能会瞬间冲高。CBC模式可以在电流超过阈值时关闭当前周期的PWM下一个周期如果电流回落则继续工作从而实现类似“打嗝”式的限流保护保证系统不脱离控制又能限制最大电流。4.2 关键寄存器配置详解故障保护的配置主要涉及以下几个寄存器理解它们的关系是正确使用的关键TZSELTrip-Zone Select选择哪些TZ引脚TZ1-TZ6连接到本ePWM模块并指定每个引脚是用于OST模式还是CBC模式。例如TZSEL[OSHT1]1表示TZ1引脚上的信号将作为本模块的OST故障源。TZCTLTrip-Zone Control配置当故障发生时EPWMxA和EPWMxB输出引脚要采取什么动作。这是最关键的安全动作设置。00: 强制为高阻态High-Impedance。这通常用于关断驱动芯片的输出让功率器件自然关断。01: 强制为高电平Force High。10: 强制为低电平Force Low。11: 无动作No Change。如何选择这取决于你的功率电路和驱动逻辑。对于典型的低边开关管驱动故障时强制PWM输出为低电平关闭驱动是安全的。对于高边驱动或某些桥式电路可能需要强制为高阻态。务必根据你的驱动电路原理图来确定。TZEINTTrip-Zone Enable Interrupt使能故障中断。即使硬件已经强制了PWM输出我们通常还需要CPU知道故障发生了以便进行故障记录、上报或系统状态管理。这里可以分别使能CBC和OST事件触发CPU中断。TZFLGTrip-Zone Flag故障标志寄存器。当发生CBC或OST事件时对应的标志位会被硬件置1。TZCLRTrip-Zone Clear软件通过向该寄存器的对应位写1来清除TZFLG中的标志位。对于OST事件必须在故障条件解除后手动清除标志位PWM输出才会被释放前提是TZCTL配置为高阻态以外的动作如果是高阻态清除标志后输出恢复AQ控制。TZFRCTrip-Zone Force软件强制触发故障。用于测试故障保护逻辑是否正常工作非常有用。4.3 实战配置与接线示例假设我们有一个三相逆变器使用EPWM1A/B驱动第一相桥臂。我们使用一个比较器电路监测该相下管的电流当电流超过阈值时比较器输出低电平。我们希望将此信号作为逐周期限流CBC故障源同时将另一个来自处理器的紧急停机信号作为单次触发OST故障源。硬件连接电流比较器输出 - 连接到MCU的TZ1引脚。处理器紧急停机GPIO - 连接到MCU的TZ2引脚。软件配置// 1. 配置TZSEL选择故障源及模式 // TZ1用于Cycle-by-Cycle限流 EPWM_enableTripZoneSignals(EPWM1_BASE, EPWM_TZ_SIGNAL_CBC1); // TZ2用于One-Shot故障 EPWM_enableTripZoneSignals(EPWM1_BASE, EPWM_TZ_SIGNAL_OSHT2); // 2. 配置TZCTL定义故障动作 // 当任何故障发生时将EPWM1A和EPWM1B都强制拉低关闭驱动 EPWM_setTripZoneAction(EPWM1_BASE, EPWM_TZ_ACTION_EVENT_TZA, EPWM_TZ_ACTION_FORCE_LOW); EPWM_setTripZoneAction(EPWM1_BASE, EPWM_TZ_ACTION_EVENT_TZB, EPWM_TZ_ACTION_FORCE_LOW); // 注意这里TZA/TZB事件指的是针对该通道的故障动作与TZ1/TZ2引脚是两回事。 // 上述配置意味着无论是CBC还是OST故障EPWM1A/B都执行强制为低的动作。 // 3. 使能故障中断可选但强烈推荐 EPWM_enableTripZoneInterrupt(EPWM1_BASE, EPWM_TZ_INTERRUPT_CBC); // 使能CBC中断 EPWM_enableTripZoneInterrupt(EPWM1_BASE, EPWM_TZ_INTERRUPT_OST); // 使能OST中断 // 4. 在PIE中断服务程序中处理故障 interrupt void epwm1TZISR(void) { // 读取标志位判断是哪种故障 if (EPWM_getTripZoneFlagStatus(EPWM1_BASE, EPWM_TZ_FLAG_CBC)) { // 处理逐周期限流事件可能是过载 g_system.fault.cbc_count; EPWM_clearTripZoneFlag(EPWM1_BASE, EPWM_TZ_FLAG_CBC); // 清除CBC标志 } if (EPWM_getTripZoneFlagStatus(EPWM1_BASE, EPWM_TZ_FLAG_OST)) { // 处理单次触发故障这是严重故障 g_system.fault.state FAULT_LATCHED; g_system.fault.source FAULT_SOURCE_HARD_OC; // OST标志位不能在ISR中简单清除必须先确认故障已排除。 // 通常这里会设置一个全局故障状态主循环或安全任务会处理恢复。 // EPWM_clearTripZoneFlag(EPWM1_BASE, EPWM_TZ_FLAG_OST); // 不要在这里清除 } // ... 其他处理 EPWM_clearTripZoneGlobalFlag(EPWM1_BASE); // 清除全局中断标志响应PIE PieCtrlRegs.PIEACK.all PIEACK_GROUP2; // 应答PIE中断组 }致命陷阱与实操心得OST故障恢复这是最容易出错的地方。发生OST故障后PWM输出被硬件强制锁存。即使外部故障信号TZn引脚早已恢复高电平只要OST标志位TZFLG[OST]未被软件清除PWM输出就永远不会恢复正常。你必须设计一个安全的故障恢复流程例如检测到OST中断 - 系统进入安全停机状态 - 等待一定时间或人工确认 - 执行故障复位流程包括清除TZFLG[OST]标志。CBC故障的自动性CBC故障是自动恢复的但中断标志需要手动清除。如果不清除TZFLG[CBC]即使故障已消失标志位仍为1但不会影响PWM输出。清除它只是为了下次能再次进入中断。异步特性TZ输入是异步的意味着即使系统时钟丢失只要故障引脚有效保护依然会动作。这提供了最高级别的安全性。一定要用示波器验证编写一个测试函数用TZFRC寄存器软件触发故障同时用示波器观察PWM输出引脚。确保动作拉高、拉低、高阻符合预期并且响应时间在百纳秒级别。这是验证你硬件设计和软件配置是否正确的黄金标准。5. 事件触发ET与高分辨率PWMHRPWM子模块点睛5.1 事件触发ET子模块精准的定时中断管家事件触发模块负责管理ePWM内部各种事件如计数器等于0、等于周期值PRD、等于比较寄存器CMPA/CMPB等并产生中断给CPU。它的核心价值在于可预分频的中断产生机制。为什么需要它如果每次PWM周期都产生中断在高速PWM下如20kHzCPU中断负荷会很大。ET模块允许你设置每N个事件才产生一次中断N1,2,3。例如在空间矢量调制SVPWM中我们可能只需要在每个PWM周期的中点或终点更新一次比较寄存器值那么就可以设置为“每2个事件”中断一次将CPU开销减半。关键配置ETSEL[INTSEL]选择中断源CTRPRD, CTR0, CTRCMPA up等。ETPS[INTPRD]设置中断周期每1/2/3个事件一次。ETPS[INTCNT]当前事件计数器只读用于诊断。使用建议在电机FOC控制中常选择“CTR0”或“CTRPRD”作为中断源并设置为每个事件中断一次以便在PWM周期的开始或结束安全地更新下一个周期的电压矢量即更新CMPA/CMPB寄存器避免在PWM周期中间更新导致脉冲不对称。5.2 高分辨率PWMHRPWM子模块突破时钟限制的精度利器当PWM频率较高时常规PWM的分辨率会急剧下降。分辨率比特数计算公式为分辨率bits log2( Fsysclk / Fpwm )。例如系统时钟100MHzPWM频率200kHz常规分辨率只有约9比特log2(500)这意味着占空比最小调节步进约为0.2%。对于精密控制这可能不够。HRPWM通过微边沿定位器MEP技术将一个系统时钟周期Coarse Step再细分成最多255个更小的步进MEP Step每个MEP步进可达150ps左右。这相当于将时间分辨率提升了近一个数量级。核心机制 HRPWM通过扩展寄存器CMPAHR用于占空比控制或TBPHSHR用于相位控制来工作。你配置的占空比会被拆分成两部分整数部分写入常规的16位CMPA寄存器决定边沿位置的“粗调”。小数部分写入8位CMPAHR寄存器决定在最后一个粗调时钟周期内的“细调”位置。配置模式边沿模式HRCNFG[EDGMODE]控制是对上升沿、下降沿还是双边沿进行高分辨率调制。控制模式HRCNFG[CTLMODE]选择是使用CMPAHR占空比控制还是TBPHSHR相位控制。影子模式HRCNFG[HRLOAD]与常规CMPA的影子加载模式同步确保高分辨率部分也在安全的时刻如CTR0更新。使用场景与限制HRPWM仅作用于EPWMxA输出通道。EPWMxB通道仍然是常规PWM。它主要用于需要极高占空比或相位分辨率的场合如高频LLC谐振变换器、功率因数校正PFC、高性能D类音频放大器等。MEP的性能受温度、电压、工艺角影响。TI提供了HRMSTEP校准寄存器软件可以读取最佳MEP步进值用于动态补偿确保精度。在实际产品中启用HRPWM时必须配合使用校准功能。简易配置流程像配置常规PWM一样配置TB、CC、AQ模块。使能HRPWM模块EPWM_enableHighResolutionPWM(EPWM1_BASE);配置HRPWM模式例如高分辨率占空比控制EPWM_setHighResolutionPWMEdgeMode(EPWM1_BASE, EPWM_HRPWM_EDGE_MODE_RISING_EDGE);EPWM_setHighResolutionPWMControlMode(EPWM1_BASE, EPWM_HRPWM_CONTROL_MODE_DUTY);更新占空比时使用DriverLib提供的EPWM_setCounterCompareValueHighResolution函数或自行计算并分别写入CMPA和CMPAHR寄存器。6. 常见问题排查与调试验实录在实际项目中eHRPWM的调试往往会遇到一些棘手的问题。下面是我总结的一些典型故障现象和排查思路希望能帮你快速定位问题。6.1 死区相关问题问题1上下管驱动波形有重叠导致炸管。检查1软件确认DBRED和DBFED寄存器值是否已正确写入且非零。使用CCS的寄存器查看窗口或内存浏览器直接查看EPWM1_DBRED和EPWM1_DBFED地址的值。检查2软件确认DBCTL[OUT_MODE]是否已使能延迟S01 S11。检查DBCTL[IN_MODE]配置是否符合预期通常为00。检查3硬件/软件用示波器测量驱动芯片的输入引脚即MCU的PWM输出引脚确认死区是否存在于MCU输出端。如果存在问题在驱动芯片之后如果不存在问题在MCU配置。检查4硬件测量驱动芯片本身的传播延迟。某些驱动芯片如光耦隔离驱动器本身有较大的延迟可能导致MCU端有死区但经过驱动后死区消失甚至反相。需要确保MCU设置的死区时间 (上管驱动关断延迟 - 下管驱动开通延迟) 安全裕量。问题2死区时间与计算值不符。检查1确认TBCLK频率计算正确。TBCLK SYSCLKOUT / (HSPCLKDIV * CLKDIV)。检查TBCTL寄存器中的HSPCLKDIV和CLKDIV分频系数。检查2示波器测量误差。确保示波器探头接地良好使用示波器的上升沿触发和精细时基测量。测量的是两个互补信号从有效电平跳变到无效电平之间的“重叠关闭”时间。6.2 故障保护相关问题问题1过流故障时PWM输出没有动作功率管烧毁。检查1硬件确认故障信号如比较器输出是否正确连接到MCU的TZ引脚。确认该TZ引脚是否被复用为其他功能如普通GPIO。检查原理图中TZ引脚的上拉电阻是否连接确保常态为高电平。检查2软件确认TZSEL寄存器已正确使能对应的TZ引脚和模式OST/CBC。一个常见的疏忽是只配置了TZCTL忘了配置TZSEL。检查3软件确认TZCTL寄存器配置的强制动作是否符合驱动逻辑。例如对于低边驱动故障时应强制输出低电平关闭驱动如果你错误配置为强制高电平会导致故障时开关管持续导通。检查4软件在初始化ePWM后立刻用TZFRC寄存器软件触发一次故障用示波器验证输出动作。这是最有效的验证方法。问题2OST故障发生后无法恢复PWM输出。检查这是最常见的问题。确认你的故障恢复流程中包含了清除TZFLG[OST]标志位的操作。这个标志位是锁存的不会自动清除。必须在确认故障条件解除后手动写TZCLR[OST]1来清除它。同时检查是否因为中断标志未清除导致CPU一直卡在故障中断中。问题3CBC限流功能不稳定电机运行抖动。检查1确认故障信号电流采样的硬件滤波电路是否合理。过短的滤波时间可能导致噪声误触发过长的滤波时间可能导致保护延迟。需要在示波器上观察故障引脚波形。检查2调整CBC的响应阈值。可能你的电流保护值设置得太接近正常工作电流。检查3检查PWM中断服务程序中更新比较值的时机。如果在CBC动作的周期内错误地更新了比较值可能会导致控制紊乱。确保在CTR0或CTRPRD的稳定点更新。6.3 其他综合问题问题ePWM模块完全没有输出。排查清单时钟确认外设时钟是否使能PCLKCR0/1/2寄存器。GPIO复用确认PWM输出引脚是否已正确配置为ePWM功能GPxMUX和GPxGMUX寄存器。时基模块确认TBCTR寄存器是否在计数。如果为0且不变化检查TBCTL[CTRMODE]是否被设置为停止模式。动作限定器AQ确认AQCTLA/AQCTLB寄存器是否配置了动作如CTRCMPA时清零CTRCMPB时置位。这是产生波形的核心。输出使能虽然ePWM本身没有全局输出使能但检查一下是否被故障保护模块强制为高阻态了检查TZFLG和TZCTL。仿真器影响在某些调试环境下仿真器暂停CPU会导致ePWM时钟停止输出冻结。这是正常现象。全速运行即可。调试eHRPWM最好的工具就是代码、寄存器查看器和示波器的三结合。耐心地对照数据手册的框图理解信号流从时基TB-比较CC-动作AQ-死区DB-输出然后通过软件强制特定状态用示波器观察每一步的信号变化是掌握这个强大外设的不二法门。