TI C2000 ePWM模块实战:动作限定器、死区与故障保护配置详解

发布时间:2026/7/22 6:30:40
TI C2000 ePWM模块实战:动作限定器、死区与故障保护配置详解 1. 项目概述与ePWM核心价值在电机驱动、数字电源或者任何需要精密功率控制的嵌入式系统里PWM脉宽调制信号的质量和可靠性直接决定了整个系统的性能上限和生死存亡。我们经常需要的不只是一个简单的、固定占空比的方波而是能够根据复杂逻辑动态调整、具备硬件死区保护、并且能在微秒级甚至纳秒级响应故障的智能PWM信号。TI的C2000系列微控制器尤其是TMS320F2802x这类芯片其内置的增强型PWMePWM模块就是为了应对这些严苛的工业场景而生的。它远不止一个简单的定时器加比较器而是一个高度可配置、模块化、带完整保护机制的信号生成引擎。很多工程师初次接触ePWM时面对动辄几十个寄存器、数百个配置位往往会感到无从下手。手册里虽然列出了每个位的定义但“为什么这么配置”以及“配置错了会怎样”这些实战中的关键问题却需要大量的项目踩坑才能积累经验。今天我就结合自己多年在伺服驱动和逆变器项目中的实际使用心得抛开那些笼统的概念直接深入到最核心、也最容易出问题的三个子模块**动作限定器Action-Qualifier、死区Dead-Band和故障保护Trip-Zone**的寄存器配置层面。我会以TMS320F2802x的寄存器手册为蓝本但重点在于解读每个配置位背后的设计意图、常见的配置模式以及那些手册里不会明说但实际调试中会让你头疼不已的“坑”。无论你是正在调试你的第一个无刷电机驱动板还是在优化一个高精度电源的环路响应理解这些寄存器的每一个细节都能让你从“信号能出来”的初级阶段跃升到“信号精准、可靠、安全”的专业水平。2. 动作限定器Action-Qualifier深度解析与配置实战动作限定器是ePWM模块的“大脑”它决定了在PWM时基计数器的每一个关键时间点比如计数值为0、等于周期值TBPRD、等于比较值CMPA/CMPB时输出引脚EPWMxA和EPWMxB应该执行什么动作置高、拉低、翻转或保持。正是这种精细到每个计数时钟TBCLK边沿的控制能力让我们能够生成对称、不对称、带相位偏移等各类复杂的PWM波形。2.1 核心控制寄存器AQCTLA与AQCTLB输入材料中详细列出了AQCTLA和AQCTLB的位域。我们不要孤立地看这些表格而要把它放到一个完整的PWM周期中去理解。以最常用的**递增-递减计数模式Up-Down Count Mode**为例这是产生中心对称PWM常用于电机控制谐波特性更好的标准模式。AQCTLA寄存器控制EPWMxA输出。它的关键配置位包括ZRO (Bits 1-0): 当计数器TBCTR等于0时的动作。手册特别注明在递增-递减模式下当计数器等于0时方向被定义为递增向上计数。这意味着ZRO动作发生在每个PWM周期的最起始点。通常如果你要生成一个在周期中心对称的PWM你可能不会在ZRO点改变输出而是设置为“00-Do nothing”。但在一些特殊同步或触发场景下这里可以设置动作。PRD (Bits 3-2): 当计数器等于周期值TBPRD时的动作。此时计数方向被定义为递减向下计数。这是另一个周期边界点。CAU/CAD (Bits 5-4 / 7-6): 当计数器等于活动的CMPA寄存器值且分别处于递增Up或递减Down阶段时的动作。这是控制PWM边沿的核心。CBU/CBD (Bits 9-8 / 11-10): 当计数器等于活动的CMPB寄存器值且分别处于递增或递减阶段时的动作。用于控制另一个输出或生成更复杂的波形。AQCTLB寄存器控制EPWMxB输出其位域定义与AQCTLA类似但注意它的CAU/CAD和CBU/CBD动作是针对EPWMxB输出的。这是一个关键点AQCTLA的CAU动作影响EPWMxA而AQCTLB的CAU动作影响EPWMxB。这允许两个输出基于同一个比较事件如等于CMPA做出不同的反应是实现互补PWM对的基础。实操心得理解“活动”比较寄存器手册中反复提到“active CMPA/CMPB register”。在ePWM中CMPA和CMPB通常都有影子寄存器Shadow Register。CPU写入的是影子寄存器而硬件在特定时刻如计数器为0或周期时会将影子寄存器的值加载到活动寄存器中。AQ动作限定器比较的是计数器值与活动寄存器的值。这意味着如果你在PWM周期中间修改了CMPA的影子寄存器值这个新值要到下一个加载点才会生效并影响PWM边沿。这种机制避免了PWM波形在周期中间出现毛刺或断裂对于需要平滑改变占空比的应用至关重要。配置时务必通过TBCTL时基控制寄存器的CTRMODE和PHSEN等位正确设置计数模式和影子寄存器加载方式。2.2 生成互补对称PWM的经典配置假设我们需要用EPWMxA和EPWMxB生成一对带死区的互补PWM信号用于驱动一个半桥的上下管高侧和低侧。在递增-递减模式下一个典型的配置思路是让EPWMxA在计数递增阶段当计数值小于CMPA时为高电平大于CMPA时为低电平在递减阶段则相反。EPWMxB与之互补。配置步骤分解时基模块配置设置TBCTL.CTRMODE 2递增-递减模式设定合适的TBPRD周期值和TBCLK频率。动作限定器配置对于EPWMxA (AQCTLA)CAU 10 (Set)当计数器递增且等于CMPA时置高EPWMxA。这意味着在计数器从0增加到CMPA的过程中EPWMxA是低电平在等于CMPA的这一刻跳变为高电平。CAD 01 (Clear)当计数器递减且等于CMPA时拉低EPWMxA。这意味着在计数器从TBPRD递减到CMPA的过程中EPWMxA是高电平在等于CMPA的这一刻跳变为低电平。ZRO和PRD通常设为00 (Do nothing)因为边沿由CMPA事件控制。对于EPWMxB (AQCTLB)为了实现互补我们希望EPWMxB在EPWMxA为高时是低反之亦然。但直接使用“Toggle翻转”动作可能不是最直观的方法。更清晰的方法是将EPWMxB的动作也基于CMPA但逻辑与EPWMxA相反。CAU 01 (Clear)当计数器递增且等于CMPA时拉低EPWMxB。CAD 10 (Set)当计数器递减且等于CMPA时置高EPWMxB。同样ZRO和PRD设为00。波形逻辑推演假设CMPA值小于TBPRD的一半。计数器从0开始递增在达到CMPA之前EPWMxA为低EPWMxB为高因为上电默认或之前周期的状态这里需要初始化。当计数器等于CMPA时同时发生CAU事件EPWMxA被置高EPWMxB被拉低。之后计数器继续递增到TBPRD然后开始递减。当递减再次经过CMPA时同时发生CAD事件EPWMxA被拉低EPWMxB被置高。这样就形成了一个中心对称的互补PWM波形EPWMxA和EPWMxB的跳变沿在时间上是完全对齐的。关键陷阱输出初始化状态上面的推演引入了一个关键问题第一个PWM周期开始前输出是什么状态ePWM模块刚上电或复位后输出通常是高阻或不确定状态。如果我们不指定在第一个计数周期到达CMPA事件之前输出可能是不确定的这可能导致功率桥瞬间直通必须通过软件强制寄存器或影子寄存器加载前的默认动作来初始化输出。这就是接下来要讲的AQSFRC和AQCSFRC寄存器的用武之地。2.3 软件强制寄存器AQSFRC与AQCSFRC动作限定器通常由硬件事件计数匹配自动触发。但有时我们需要软件主动干预输出状态例如初始化、紧急控制或测试。这就是软件强制寄存器的用途。一次性软件强制寄存器 (AQSFRC)OTSFA/OTSFB位写入1会立即产生一个一次性强制事件。该位在写入完成后会自动清零。你可以把它想象成一个手动触发一次动作的“按钮”。ACTSFA/ACTSFB位定义当上述强制事件发生时输出执行什么动作清低、置高、翻转。RLDCSF位这个位很重要它控制着连续强制寄存器AQCSFRC的加载方式。是立即生效还是在下一个ZRO或PRD事件影子寄存器加载点生效这为你协调软件强制和硬件自动动作提供了灵活性。连续软件强制寄存器 (AQCSFRC)CSFA/CSFB位配置为01或10时会持续强制输出A或B为低或高覆盖任何由AQCTL寄存器定义的动作限定器输出。这相当于一个“软件急停”或“固定输出”开关。只有将其设为00或11动作限定器的控制权才会交还给硬件。实战应用安全初始化序列在系统启动配置ePWM模块时一个安全的做法是先将AQCSFRC.CSFA/CSFB配置为01强制输出低或10强制输出高确保功率管处于安全的关断状态。然后配置时基模块、动作限定器AQCTLA/B、死区等所有参数。在所有影子寄存器加载事件如计数器归零发生后硬件配置才真正生效。最后在确保硬件状态安全的前提下将AQCSFRC.CSFA/CSFB改回00释放控制权给动作限定器PWM开始正常输出。这个流程避免了在配置过程中输出出现不可控的毛刺对于驱动高压、大电流的功率器件至关重要。3. 死区Dead-Band子模块原理与精细调控生成了互补的PWM信号后直接将其驱动到半桥或全桥的上下管是危险的。由于功率器件如MOSFET、IGBT存在开通和关断时间如果一对互补的信号没有间隔可能会在极短时间内出现上下管同时导通的情况即“直通”Shoot-Through产生巨大的短路电流烧毁器件。死区模块就是在互补的PWM信号中插入一个可控的延迟确保在任何时候一个管子完全关断后另一个管子才会开通。3.1 死区控制寄存器DBCTL详解输入材料中的DBCTL寄存器是死区配置的核心它控制着信号的路径和极性。OUT_MODE (Bits 1-0)输出模式控制。这是死区功能的总开关。00旁路模式。EPWMxA和EPWMxB信号直接从动作限定器传到后级不经过死区发生器。这是默认值也是调试初期验证动作限定器输出是否正确时常用的模式。01/10单边延迟模式。01禁用上升沿延迟只对下降沿延迟10禁用下降沿延迟只对上升沿延迟。适用于某些只需要单边延迟的特殊拓扑。11完全使能模式。这是最常用的模式同时对两个输出使能上升沿和下降沿延迟。IN_MODE (Bits 5-4)输入模式控制。它决定延迟模块的输入信号来源。00默认经典模式。EPWMxA来自动作限定器同时作为上升沿和下降沿延迟的输入源。这是生成标准互补死区波形的标准配置。通常我们会将EPWMxA作为“主”信号EPWMxB作为其互补信号死区模块基于EPWMxA生成两路带延迟的信号。01/10交叉输入模式。例如01模式上升沿延迟的输入是EPWMxB下降沿延迟的输入是EPWMxA。这可以用于实现一些非标准的相位关系或保护逻辑。11EPWMxB作为双边延迟的输入源。POLSEL (Bits 3-2)极性选择。这是最容易混淆的部分之一。它不是简单地将输出取反而是在死区延迟之后有选择地对信号进行取反。00主动高AH模式。两个输出都不取反。这意味着经过死区延迟后高电平代表“开通”器件。01主动低互补ALC模式。EPWMxA输出取反。这意味着EPWMxA输出是低电平有效而EPWMxB是高电平有效。10主动高互补AHC模式。EPWMxB输出取反。这意味着EPWMxA是高电平有效EPWMxB是低电平有效。11主动低AL模式。两个输出都取反。即两者都是低电平有效。为什么需要极性控制这取决于你的功率驱动级电路。例如很多栅极驱动芯片是低电平有效输入低时输出驱动高电平开通上管。如果你的硬件设计是低电平有效那么就需要将PWM模块配置为输出低电平有效的信号即选择ALC或AHC或AL模式。务必在硬件设计阶段就明确驱动逻辑并与软件配置保持一致否则可能导致所有管子无法开通或一直开通。3.2 延迟寄存器DBRED与DBFED与计算DBRED上升沿延迟寄存器。定义输入信号上升沿到来后输出信号延迟多少个TBCLK周期才发生上升沿跳变。DBFED下降沿延迟寄存器。定义输入信号下降沿到来后输出信号延迟多少个TBCLK周期才发生下降沿跳变。关键参数HALFCYCLE (Bit 15)0全周期时钟。死区计数器以TBCLK频率运行。1半周期时钟。死区计数器以2倍TBCLK频率运行。这意味着你可以用相同的寄存器值DBRED/DBFED实现更精细的延迟分辨率延迟时间减半或者在相同的分辨率下获得更大的延迟范围。死区时间计算 死区时间T_dead (DBRED 或 DBFED 的值) * T_tbclk * (HALFCYCLE ? 0.5 : 1)其中T_tbclk是时基时钟周期。例如系统时钟SYSCLKOUT为100MHz经过分频后TBCLK为50MHz周期20ns。若HALFCYCLE0DBRED50则上升沿延迟时间为50 * 20ns 1000ns 1us。配置经验与陷阱对称 vs 非对称死区通常为了简化我们会将DBRED和DBFED设置为相同的值产生对称的死区时间。但有些功率器件如IGBT的关断时间可能比开通时间长为了优化效率可以设置不同的上升沿和下降沿延迟即非对称死区。死区时间与PWM频率、占空比的关系死区时间会“吃掉”有效的PWM开通时间。例如对于一个高电平有效的信号上升沿延迟会使开通时刻推后下降沿延迟会使关断时刻提前。在计算最大最小占空比时必须考虑死区时间的影响。极端情况下如果设定的死区时间过长可能导致有效占空比范围被严重压缩甚至无法输出完整的脉冲。调试顺序建议先配置动作限定器在DBCTL.OUT_MODE00旁路模式下验证互补PWM波形是否正确。然后再使能死区OUT_MODE11逐步增加DBRED/DBFED值用示波器观察死区是否按预期插入。同时观察上下管驱动波形确保没有重叠。4. 故障保护Trip-Zone机制系统的安全卫士故障保护是工业系统的生命线。ePWM的Trip-Zone子模块提供了硬件级别的快速响应通道能够在检测到故障信号如过流、过压、过热的极短时间内几个时钟周期绕过CPU干预直接强制PWM输出进入预的安全状态。4.1 故障源选择与映射TZSEL与TZDCSEL故障信号来自外部引脚TZ1-TZ6或内部的数字比较器事件DCAEVT1/2, DCBEVT1/2。首先需要用TZSEL寄存器选择哪些信号能触发保护。TZSEL寄存器分为两部分。OSHTx (One-Shot)一次性故障使能。当使能的故障信号有效时触发一次性故障。一旦触发ePWM输出将锁定在安全状态直到软件明确清除故障标志。这适用于严重的、需要系统完全停机的故障如硬件过流。CBCx (Cycle-By-Cycle)逐周期故障使能。当使能的故障信号有效时触发逐周期故障。输出在当前PWM周期内立即进入安全状态但当下一个PWM周期开始时通常计数器归零如果故障信号已消失输出会自动恢复正常。这适用于可恢复的、需要限流的故障如瞬间的电流尖峰。如何选择OSHT还是CBC这取决于故障的性质和你希望的系统行为。对于绝对不允许在故障存在时再次尝试驱动的场景如短路用OSHT。对于需要动态限流、允许每个周期重新评估的场景如峰值电流保护用CBC。TZDCSEL寄存器如果故障源是数字比较器事件DCAEVT1/2, DCBEVT1/2这个寄存器用来定义什么条件构成一个“事件”。例如你可以配置当数字比较器A的高电平输出DCAH为低且低电平输出DCAL为高时才触发故障。这为你提供了基于模拟比较器输出组合的、高度灵活的故障条件判断。4.2 故障响应动作配置TZCTLTZCTL寄存器定义了当故障发生时EPWMxA和EPWMxB输出应该被强制成什么状态。这是故障保护的最终执行环节。TZA/TZB (Bits 1-0 / 3-2)针对外部TZ引脚或CBC/OSHT通用故障的响应。DCAEVT1/2, DCBEVT1/2针对特定数字比较器事件的响应。注意你可以为不同来源的故障配置不同的动作例如对于过流TZ1引脚你可以配置为强制输出高阻态Hi-Z让驱动器全部关断。对于轻微的过压DCAEVT1你可以配置为仅将上管强制拉低Force Low而下管保持动作限定器控制实现特定的保护逻辑。可选的动作为00强制为高阻态High-Impedance。这是最彻底的保护直接断开驱动通常需要外加上下拉电阻确保功率管处于关断状态。01强制为高电平。10强制为低电平。11不采取任何动作禁用故障响应。慎用配置策略 对于大多数桥式电路安全状态是让所有功率管关断。如果驱动逻辑是高电平有效那么安全状态就是强制输出低电平10。如果是低电平有效则强制输出高电平01。高阻态00也是一个选择但必须确认硬件上高阻态不会导致功率管误开通通常需要栅极下拉电阻。4.3 故障标志管理与中断TZFLG, TZCLR, TZEINT故障发生后你需要知道它发生了并且进行处理。TZFLG (故障标志寄存器)这是一个状态寄存器。当故障事件发生时对应的标志位CBC, OST, DCAEVT1等会被硬件置1。INT位表示是否产生了Trip-Zone中断。TZEINT (故障中断使能寄存器)你可以选择让哪些故障事件触发CPU中断。例如使能OST中断这样当发生一次性故障时CPU能立即进入中断服务程序进行系统级处理如记录故障码、关闭其他外设等。TZCLR (故障清除寄存器)这是一个**写1清除W1C**寄存器。要清除TZFLG中的故障标志尤其是OST标志必须向TZCLR对应的位写1。这是软件恢复故障状态的关键操作。对于CBC故障虽然硬件会在下一个周期自动恢复输出但TZFLG[CBC]标志位仍然需要软件清除。TZFRC (故障强制寄存器)这个寄存器允许你通过软件模拟一个故障事件用于测试你的故障保护逻辑是否正常工作而不需要真的制造一个硬件故障。这在系统自检和调试阶段非常有用。故障处理流程实战经验初始化配置TZSEL选择故障源TZCTL配置安全动作TZEINT使能必要的中断。故障发生硬件强制PWM输出为安全状态并置位TZFLG相应标志。如果中断使能则触发中断。中断服务程序ISR a.立即读取TZFLG判断故障来源是哪个TZ引脚还是数字比较器是CBC还是OST。这个信息对于诊断问题至关重要。 b.执行安全操作如关闭其他相关PWM模块、关闭ADC采样等。 c.清除故障标志根据TZFLG的值向TZCLR的对应位写1。特别注意对于OST故障必须在确认故障条件已完全消除例如过流信号已消失后才能清除标志。否则清除后输出会立即恢复可能再次引发故障。 d.系统恢复对于CBC故障通常中断里只需要记录和清除标志硬件会自动恢复。对于OST故障清除标志后可能需要重新初始化ePWM模块或执行一个完整的启动序列才能重新使能PWM输出。切勿在未处理根本原因的情况下盲目清除OST标志。测试使用TZFRC寄存器模拟故障验证从故障触发到输出动作、标志置位、中断响应、标志清除的整个流程是否符合预期。用示波器测量从故障信号输入到PWM输出被强制的时间评估保护速度。5. 事件触发Event-Trigger子模块让PWM与ADC协同工作虽然输入材料主要聚焦于前三部分但事件触发子模块与PWM波形生成紧密相关尤其是用于触发ADC采样实现电流、电压的同步采样这对于电机控制FOC算法和数字电源环路补偿至关重要。5.1 触发选择与分频ETSEL与ETPSePWM模块可以产生两种类型的事件触发脉冲ADC开始转换SOC触发和ePWM模块自身的中断INT。ETSEL寄存器选择在什么时刻产生事件。SOCASEL/SOCBSEL选择产生EPWMxSOCA或SOCB触发脉冲的条件。常见选择有001- 计数器等于零时TBCTR0x0000。010- 计数器等于周期值时TBCTRTBPRD。100/101- 计数器等于CMPA且正在递增/递减时。110/111- 计数器等于CMPB且正在递增/递减时。INTSEL选择产生ePWMx_INT中断的条件选项与SOC类似。如何选择触发点这取决于你的控制算法和采样需求。在电机FOC控制中我们通常希望在PWM周期的中心点和/或峰值点采样相电流。对于递增-递减模式在TBCTRTBPRD周期值也是波峰时刻触发SOC可以采样到电流的峰值。在TBCTR0谷值时刻触发另一个SOC可以采样到另一个点。更常见的做法是在计数器等于CMPA且正在递增或递减的时刻触发这样可以将采样点精确地放在PWM脉冲的中间位置避开开关噪声获得更准确的电流值。ETPS寄存器事件预分频器。它允许你每N个选定事件才产生一次触发或中断。SOCAPRD/SOCBPRD/INTPRD设置分频值1, 2, 3次事件。SOCACNT/SOCBCNT/INTCNT只读计数器显示当前已发生的事件次数。应用场景假设你的PWM频率是20kHz但ADC转换和算法计算需要更多时间你希望每两个PWM周期才采样一次电流并计算一次新占空比。你可以将SOCAPRD设置为10第二个事件这样SOCA触发脉冲的频率就降到了10kHz与你的控制频率匹配。5.2 与其他模块的联动配置心得事件触发模块的配置是孤立的它必须与动作限定器、ADC模块的配置协同工作。时序对齐确保你选择的SOC触发时刻如等于CMPA时PWM输出处于一个稳定的状态。避免在开关管刚刚开通或关断的瞬间采样那时电流可能含有较大的开关噪声和振铃。ADC配置在ADC模块中你需要将对应的SOC触发源如EPWM1_SOCA分配给某个ADC采样序列ADCSOCxCTL并配置采样的通道和窗口大小。ePWM产生的是脉冲信号ADC需要在这个脉冲的上升沿启动转换。中断协调ePWMx_INT中断通常用于标志一个控制周期的开始或结束你可以在这里执行核心控制算法如Clarke/Park变换、PI调节、逆变换等。而ADC转换完成中断ADCINT1/2则用于读取采样值。你需要规划好这两个中断的优先级和执行流程确保在下一个PWM周期开始前完成所有计算并更新CMPA/CMPB影子寄存器。一个典型的FOC控制循环可能是PWM周期中点触发ADC采样 - ADC转换完成中断中读取电流值 - 执行速度/位置环和电流环计算 - 在下一个PWM周期开始前计数器归零影子寄存器加载点更新CMPA/CMPB值。ePWM的事件触发和中断机制为这种精准的时序控制提供了硬件基础。6. 完整配置流程示例与常见问题排查让我们以一个具体的实例来串联以上所有知识点配置ePWM1模块用于驱动一个三相逆变器的一相上下桥臂要求中心对称PWM带死区保护并具备基于比较器的过流保护CBC模式和硬件过流锁存保护OSHT模式。6.1 配置步骤分解时钟与GPIO初始化配置系统时钟使能ePWM1模块时钟。将GPIO引脚复用为EPWM1A和EPWM1B输出功能。配置TZ1引脚为输入功能并启用内部上拉如果外部是低电平有效故障信号。时基模块TB配置TBCTL.CTRMODE 2// 设置为递增-递减模式TBCTL.PHSEN 0// 禁止相位加载作为主模块TBCTL.PRDLD 0// 周期寄存器使用影子寄存器模式推荐TBCTL.SYNCOSEL 0// 同步输出选择主模块通常禁用或输出同步脉冲TBCTL.HSPCLKDIV / CLKDIV// 设置合适的TBCLK分频得到目标PWM频率。例如SYSCLK100MHz要得到20kHz PWMTBPRD (100MHz / (2 * PWM频率)) - 1 2499。TBPRD 2499// 设置周期值比较模块CC配置CMPCTL.SHDWAMODE 1// CMPA使用影子寄存器模式CMPCTL.SHDWBMODE 1// CMPB使用影子寄存器模式CMPCTL.LOADAMODE 2// 在CTR0时加载CMPA影子寄存器推荐CMPCTL.LOADBMODE 2// 在CTR0时加载CMPB影子寄存器CMPA 初始占空比对应值// 例如50%占空比对应1249CMPB// 本例中未使用可设为0或与CMPA配合实现更复杂波形动作限定器AQ配置AQCTLA.CAU 2 (Set)// CTR递增且等于CMPA时置高EPWM1AAQCTLA.CAD 1 (Clear)// CTR递减且等于CMPA时拉低EPWM1AAQCTLA.ZRO 0 (Do nothing)AQCTLA.PRD 0 (Do nothing)AQCTLB.CAU 1 (Clear)// CTR递增且等于CMPA时拉低EPWM1B互补AQCTLB.CAD 2 (Set)// CTR递减且等于CMPA时置高EPWM1B互补AQCTLB.ZRO 0AQCTLB.PRD 0AQSFRC.ACTSFA 1 (Clear)// 初始化动作为拉低安全AQSFRC.OTSFA 1// 执行一次强制使输出立即进入安全状态对EPWM1B也可进行类似初始化死区模块DB配置DBCTL.OUT_MODE 3 (0b11)// 完全使能上升沿和下降沿延迟DBCTL.IN_MODE 0 (0b00)// 经典模式EPWM1A作为双边延迟源DBCTL.POLSEL 0 (0b00)// 主动高模式假设驱动芯片高电平有效DBCTL.HALFCYCLE 0// 使用全周期时钟计算所需死区时间对应的计数值。假设需要500ns死区TBCLK周期为50ns则DBRED DBFED 500ns / 50ns 10。故障保护TZ配置TZSEL.OSHT1 1// 使能TZ1引脚为一次性故障源硬件过流锁存TZSEL.CBC1 1// 使能TZ1引脚为逐周期故障源软件可恢复过流TZCTL.TZA 2 (0b10)// TZ故障时强制EPWM1A输出低关断TZCTL.TZB 2 (0b10)// TZ故障时强制EPWM1B输出低关断TZEINT.OST 1// 使能一次性故障中断以便CPU处理严重故障TZEINT.CBC 0// 逐周期故障通常不需要中断由硬件自动恢复事件触发ET配置可选用于ADC同步ETSEL.SOCAEN 1// 使能SOCAETSEL.SOCASEL 4 (0b100)// 当CTR等于CMPA且递增时触发SOCA在PWM脉冲中心采样ETPS.SOCAPRD 1 (0b01)// 每个事件都触发启动PWM确保所有配置已完成特别是故障引脚处于无效状态。将AQCSFRC.CSFA和CSFB从强制状态改回00释放控制权给动作限定器。使能时基计数器TBCTL.CTRMODE已设置计数器会自动开始运行。6.2 常见问题与排查技巧问题没有PWM输出。检查1GPIO复用。确认GPIO引脚已正确配置为ePWM输出功能而非普通GPIO。检查2时基计数器。用调试器读取TBCTR寄存器的值看它是否在0和TBPRD之间循环。如果没有检查TBCTL.CTRMODE配置和时钟分频。检查3动作限定器强制。检查AQCSFRC寄存器确保CSFA和CSFB位为00未强制。检查AQSFRC的RLDCSF位如果配置为影子模式确保发生了加载事件如CTR0。检查4故障保护。检查TZFLG寄存器是否有故障标志被置位如果有故障保护机制会强制输出安全状态。检查TZ引脚的电平状态。问题PWM输出频率不对。计算公式PWM频率 SYSCLKOUT / (HSPCLKDIV * CLKDIV * 2 * (TBPRD 1))。逐项核对每个分频系数和TBPRD值。检查计数模式确认是递增-递减模式频率公式中有因子2还是递增模式没有因子2。问题死区时间不生效或不对。检查DBCTL.OUT_MODE必须设置为01,10, 或11才能使能死区。00是旁路模式。检查极性用示波器同时测量EPWMxA和EPWMxB。如果死区看起来是“负的”即信号重叠了很可能是POLSEL配置错误或者驱动电路的逻辑与你假设的相反。计算值验证用示波器测量死区时间与根据DBRED/DBFED和TBCLK计算的理论值对比。注意HALFCYCLE位的影响。问题故障保护不动作。检查TZSEL确认你期望的故障源TZ引脚或数字比较器事件已使能对应位置1。检查TZ引脚状态用万用表或示波器测量故障引脚的电平。ePWM模块通常低电平有效确认故障发生时引脚是否为低。检查TZCTL确认配置的故障动作不是11Do nothing。模拟测试在软件中手动置位TZFRC寄存器的对应位看PWM输出是否被强制为安全状态。这是隔离硬件问题验证软件配置的最快方法。问题ADC触发不对或采样的时刻不对。检查ETSEL.SOCASEL确认触发事件选择正确。如果你想在PWM周期中点采样在递增-递减模式下选择“CTR等于CMPA且递增”通常是正确的。检查CMPA值确保CMPA的值是你期望的采样点位置。在中心对称PWM中50%占空比时CMPATBPRD/2。检查ADC配置确认ADC的SOC触发源选择正确对应ePWM模块的SOCx并且ADC的采样窗口足。调试ePWM是一个需要耐心和逻辑的过程。最好的工具就是示波器和芯片的寄存器查看窗口。始终遵循“先核心后外围”的原则先确保时基和动作限定器能产生基本波形再添加死区最后配置故障保护和事件触发。每步都用示波器验证就能快速定位问题所在。