1. 项目概述从“会配置”到“懂原理”的ePWM深度解析在电机控制、数字电源和逆变器这些硬核的嵌入式应用里PWM脉冲宽度调制信号的精度和灵活性直接决定了系统的性能上限。很多工程师朋友在初次接触德州仪器TIC2000系列微控制器中的增强型PWMePWM模块时往往会被其繁多的寄存器、复杂的子模块交互搞得一头雾水。大家可能都照着例程配通过但一旦需要实现一个非标准的、带复杂同步关系的波形或者调试一个诡异的输出毛刺时就感觉无从下手。这背后的根本原因是我们对ePWM三大核心子模块——时间基准TB、计数器比较CC和动作限定器AQ——的内在逻辑和工作机制理解得不够透彻。今天我就结合自己多年在电机驱动和数字电源项目中的踩坑经验抛开数据手册的平铺直叙带你深入ePWM的“心脏”看看时间基准如何像乐队的指挥一样打拍子计数器比较如何精准地标记关键节拍而动作限定器又如何将这些节拍翻译成输出引脚上具体的“高”或“低”动作。我们不仅要搞懂每个寄存器位是干什么的更要理解它们为什么这么设计以及在实战中如何组合运用生成从简单到复杂的各种PWM波形并实现多个ePWM模块之间的精确同步。无论你是正在评估C2000用于新项目还是已经在使用但想更上一层楼相信这篇深度解析都能给你带来新的启发。2. ePWM核心架构与设计哲学在深入细节之前我们有必要先俯瞰ePWM模块的整体架构和设计思想。ePWM不是一个简单的“计数器比较器”而是一个高度模块化、可配置的波形生成引擎。这种设计源于工业应用中对PWM信号的复杂需求不仅仅是调节占空比还要能控制死区时间、实现多通道同步、响应外部故障信号即时关断并能触发ADC采样等。2.1 模块化设计各司其职的流水线ePWM模块可以看作一条精心设计的信号处理流水线每个子模块负责一个特定的阶段时间基准TB子模块这是整个PWM波的“时钟源”和“节拍器”。它产生一个不断循环计数的核心计数器TBCTR并定义了这个计数循环的周期TBPRD和起始相位TBPHS。它决定了PWM波的“时间轴”。计数器比较CC子模块它在时间轴TBCTR上设置关键的“事件标记点”。通过CMPA和CMPB两个比较寄存器当TBCTR计数到与这两个寄存器值相等时就会产生“CTRCMPA”和“CTRCMPB”两个关键事件信号。这两个点直接决定了PWM脉冲边沿的位置。动作限定器AQ子模块这是将“事件”转化为“动作”的翻译官和决策者。它接收来自TB子模块的“CTRPRD”周期点、“CTRZERO”零点事件以及来自CC子模块的“CTRCMPA/B”事件。然后根据用户配置的规则AQCTLA、AQCTLB寄存器决定在哪个事件发生时对输出引脚EPWMxA和EPWMxB执行什么操作置高SET、拉低CLEAR、翻转TOGGLE或保持DO NOTHING。这种流水线式的设计带来了极大的灵活性。你可以独立配置TB的计数模式向上、向下、上下来生成对称或非对称PWM可以独立设置CMPA和CMPB的值来精确定义脉冲的上升沿和下降沿还可以独立定义每个事件对两个输出引脚的不同动作从而生成互补、独立甚至带有复杂相位关系的多路PWM信号。2.2 同步与影子寄存器可靠性的两大基石除了模块化ePWM还有两个至关重要的设计用于应对复杂系统和实时控制的需求同步链Synchronization Chain在多个ePWM模块如ePWM1, ePWM2...协同工作的场景下例如三相全桥逆变器确保它们之间的相位关系精确可控是必须的。ePWM模块通过EPWMxSYNCI同步输入和EPWMxSYNCO同步输出引脚可以将一个模块主模块的特定事件如计数器归零作为同步脉冲传递给下一个模块从模块。从模块的TB子模块在收到同步脉冲时可以将其计数器TBCTR重载为相位寄存器TBPHS的值从而实现从模块波形相对于主模块的固定相位偏移领先或滞后。这就构建了一条精确的同步链是驱动多相电机或交错并联电源的核心。影子寄存器Shadow Register在PWM波形实时运行的过程中如果软件直接修改正在参与比较的CMPA/CMPB活跃寄存器很可能导致在一个PWM周期内比较值发生突变从而产生非预期的窄脉冲或毛刺这在功率电路中是极其危险的。影子寄存器机制就是为了解决这个问题。用户实际写入的是CMPA/CMPB的影子寄存器硬件会在一个安全的时刻如TBCTR计数到0或计数到周期值TBPRD时自动将影子寄存器的值更新到活跃寄存器。这样PWM波形的改变总是以完整的周期为单位进行确保了输出的平滑和无毛刺切换。TBPRD周期寄存器也支持类似的影子寄存器机制。理解了这套以TB为时间轴、CC标记事件、AQ执行动作为核心并以同步和影子寄存器保障其可靠性和协同性的设计哲学我们再深入每个子模块的细节时就会感觉脉络清晰不再是孤立地记忆寄存器功能了。3. 时间基准TB子模块PWM波形的节拍器时间基准子模块是整个ePWM模块的“心脏”它定义了PWM波形的根本时间属性。你可以把它想象成一个数字化的、可编程的“秒表”这个秒表的走法计数模式、一圈有多长周期、以及从哪里开始跑相位和同步都由TB子模块控制。3.1 核心计数器TBCTR与计数模式TB子模块的核心是一个16位的向上/向下计数器TBCTR。它的计数行为由TBCTL寄存器的CTRMODE位域控制主要有四种模式向上计数模式TB_COUNT_UPTBCTR从0开始每个TBCLK时钟周期加1直到等于周期寄存器TBPRD的值然后在下一个时钟周期归零并重新开始。这种模式产生非对称PWM波形。PWM周期Tpwm (TBPRD 1) * Ttbclk。例如TBPRD设为599则计数器序列为0,1,2...599, 0,1,2...一个周期内共有600个时钟滴答。向下计数模式TB_COUNT_DOWNTBCTR从TBPRD的值开始每个TBCLK时钟周期减1直到等于0然后在下一个时钟周期重新加载TBPRD的值。同样产生非对称PWM波形周期计算公式与向上模式相同。向上-向下计数模式TB_COUNT_UPDOWNTBCTR从0开始向上计数到TBPRD然后立即转向向下计数回0如此反复。这种模式产生对称PWM波形波形关于周期中心对称。PWM周期Tpwm (2 * TBPRD) * Ttbclk。这是电机控制中常用的模式因为它能产生中心对齐的PWM有助于降低谐波。停止模式TB_FREEZE计数器保持当前值不变用于调试或紧急停止。实操心得模式选择背后的考量选择哪种计数模式取决于你的应用需求。向上/向下模式简单计算占空比直观高电平时间 CMPA值 * Ttbclk。而上下模式虽然计算稍复杂以CMPA为例高电平时间 2 * (TBPRD - CMPA) * Ttbclk假设在CAU置高、CAD拉低但其产生的对称波形在驱动H桥时能使得上下管开关时刻对称减少电流纹波和电磁干扰EMI是电机矢量控制FOC的首选。在数字电源的移相全桥等拓扑中上下模式也便于实现对称的软开关时序。3.2 周期、相位与同步机制周期设置TBPRD这个寄存器定义了计数器的最大值向上模式或初始值向下模式是决定PWM频率的关键。PWM频率 1 / Tpwm。TBPRD通常也支持影子寄存器确保频率切换平滑。相位控制与同步TBPHS EPWMxSYNCI这是实现多模块协同工作的关键。每个ePWM模块都有一个相位寄存器TBPHS。当该模块被配置为“相位加载使能”TBCTL.PHSEN1时一旦检测到同步输入脉冲EPWMxSYNCI就会在下一个TBCLK时钟边沿将TBPHS的值加载到TBCTR中。应用场景假设ePWM1驱动三相逆变器的U相ePWM2驱动V相ePWM3驱动W相。我们可以将ePWM1设为主模块将其“CTRZERO”事件通过EPWM1SYNCO输出。将ePWM2和ePWM3的EPWMxSYNCI连接到这个输出并设置ePWM2的TBPHS为TBPRD/3ePWM3的TBPHS为2*TBPRD/3。这样当ePWM1计数器归零时ePWM2和ePWM3会分别加载各自的相位值从而生成三相互差120度电角度的PWM波完美用于三相电机驱动。同步源同步脉冲不仅可以来自外部引脚或另一个ePWM模块还可以由软件强制产生写TBCTL.SWFSYNC位或由数字比较DC子模块的事件产生非常灵活。全局时钟同步TBCLKSYNC这是一个非常实用的功能。在系统初始化时所有ePWM模块的TBCLK可能处于随机的相位关系。通过先配置好所有模块的预分频器和模式然后统一将TBCLKSYNC位置1可以确保所有ePWM模块的时基时钟在同一个上升沿同时启动实现了绝对的初始时间对齐。3.3 时基子模块的配置流程与避坑指南一个稳健的TB子模块初始化流程通常如下禁用时基时钟同步TBCLKSYNC 0停止所有时基计数器。配置系统时钟分频TBCTL.HSPCLKDIV和CLKDIV确定TBCLK频率。这里有个坑过高的TBCLK频率即过细的时间分辨率可能导致计数器溢出或达不到所需的低频PWM而过低的频率又会影响PWM精度。需要根据PWM频率和分辨率需求折中计算。设置计数模式TBCTL.CTRMODE。设置周期值TBPRD及其影子加载模式TBCTL.PRDLD。配置同步相关参数是否使能相位加载TBCTL.PHSEN、设置相位值TBPHS、选择同步输出源TBCTL.SYNCOSEL。将计数器TBCTR清零或设为一个初始值。最后使能全局时基时钟同步TBCLKSYNC 1让所有ePWM模块开始同步运行。常见问题排查问题PWM输出频率不对。检查首先确认系统时钟SYSCLK是否正确。然后检查TBCTL的HSPCLKDIV和CLKDIV分频设置。最后核对TBPRD的计算公式向上/向下模式为(TBPRD 1) * Ttbclk上下模式为2 * TBPRD * Ttbclk。问题多个ePWM模块之间不同步相位关系乱。检查1) 确认同步链连接正确主模块的SYNCO输出连接到从模块的SYNCI输入。2) 检查从模块的TBCTL.PHSEN是否使能。3) 确认TBPHS寄存器的值设置正确。4) 检查主从模块的TBCLK分频设置是否一致不一致的时钟分频会导致同步后相位逐渐漂移。4. 计数器比较CC子模块PWM波形的雕刻刀如果说TB子模块定义了画布时间轴的尺寸和起始点那么CC子模块就是在画布上精确标记关键位置脉冲边沿的雕刻刀。它通过两个独立的比较寄存器CMPA和CMPB将TBCTR的计数值与预设值进行比较从而在精确的时刻产生事件信号。4.1 CMPA/CMPB寄存器与比较事件CC子模块的核心功能很简单它持续比较TBCTR的值与CMPA、CMPB寄存器的值。当两者相等时就分别产生“CTR CMPA”和“CTR CMPB”事件。这两个事件是后续动作限定器AQ生成PWM边沿动作的直接触发器。关键点在于事件产生的频率它取决于TBCTR的计数模式在向上或向下计数模式中每个PWM周期内TBCTR的值会线性地扫过从0到TBPRD或反向的整个范围。因此只要CMPA/CMPB的值在[0, TBPRD]区间内每个周期就会产生一次“CTRCMPx”事件。在向上-向下计数模式中TBCTR的值会先上升后下降。因此如果CMPx的值在(0, TBPRD)开区间内每个PWM周期会产生两次比较事件一次在上升沿CAU/CBU一次在下降沿CAD/CBD。如果CMPx等于0或TBPRD则只会在计数到0或TBPRD时产生一次事件这个事件同时是TB事件由AQ子模块的优先级处理。4.2 影子寄存器机制实现平滑无毛刺的PWM更新这是CC子模块乃至整个ePWM模块中对于安全可靠运行至关重要的一个特性。在电机控制或数字电源中我们经常需要实时调整PWM的占空比即修改CMPA/CMPB的值。如果软件直接写入正在参与当前周期比较的活跃寄存器Active Register可能会发生这样的危险情况写入操作发生在TBCTR刚刚经过旧CMP值之后、但旧周期结束之前。这会导致硬件在同一个周期内错误地使用新旧混合的值进行比较产生一个极窄的、非预期的脉冲即“毛刺”。这种毛刺在功率电路中可能引起直通短路、电压尖峰等严重问题。影子寄存器Shadow Register机制就是为了彻底杜绝这种情况。其工作原理如下双缓冲结构CMPA和CMPB实际上各有一套“影子寄存器”和“活跃寄存器”。用户通过软件写入的地址对应的是影子寄存器。受控加载影子寄存器中的值不会立即生效。硬件只会在用户指定的、安全的“加载点”将影子寄存器的值复制到活跃寄存器。这两个加载点通常是CTR PRDTBCTR计数到周期值在上下模式中这是计数器转向点。CTR ZEROTBCTR计数到零在上下模式中这也是计数器转向点。 通过配置CMPCTL.LOADAMODE和LOADBMODE位可以独立为CMPA和CMPB选择加载时机。无毛刺更新由于加载动作发生在计数器到达周期边界或零点的时刻此时一个完整的PWM周期刚刚结束新的周期正要开始。因此新的比较值会在全新的周期中生效确保了PWM波形在两个完整周期之间平滑过渡完全避免了周期内的毛刺。配置示例在电机FOC控制中我们通常在中断服务程序里计算得到新的占空比对应新的CMPA/CMPB值然后写入影子寄存器。通过配置为在CTRZERO时加载可以确保在下一个PWM周期开始时新的电压矢量被准确应用实现精确的磁场定向控制。4.3 计数器比较子模块的配置与波形生成逻辑CC子模块的配置相对直接主要围绕CMPCTL寄存器进行CMPCTL[SHDWAMODE]和CMPCTL[SHDWBMODE]分别控制CMPA和CMPB是否启用影子模式。强烈建议在需要动态更新的应用中使能影子模式设为0。仅在调试或静态配置时可设为立即加载模式1。CMPCTL[LOADAMODE]和CMPCTL[LOADBMODE]选择影子寄存器到活跃寄存器的加载时机。CTRPRD、CTRZERO或两者皆可。在上下计数模式中选择CTRZERO是常见做法。CMPA和CMPB这就是我们写入比较值的地方。注意在上下计数模式下为了生成对称PWM我们通常让CMPA控制一个通道如EPWMxA的占空比。此时CMPA的值决定了高电平的宽度。具体关系需结合AQ的动作配置来理解。注意事项比较值超出范围的处理这是一个容易忽略但重要的细节。如果CMPA或CMPB的值设置得大于TBPRD在不同计数模式下的行为是不同的向上计数模式如果CMPx TBPRD则“CTRCMPx”事件永远不会发生因为计数器最大只到TBPRD。向下计数模式如果CMPx TBPRD则“CTRCMPx”事件会在计数器等于TBPRD即周期点时发生。向上-向下计数模式如果CMPx TBPRD则“CTRCMPx”事件会在计数器等于TBPRD即周期点时发生包括上升沿和下降沿的比较事件。 理解这一点可以帮助我们避免因计算错误或边界条件处理不当而导致的PWM输出异常。在编程时对CMP值进行限幅Clamp操作将其约束在[0, TBPRD]区间内是一个好习惯。5. 动作限定器AQ子模块事件到动作的指挥官时间基准提供了节拍计数器比较标记了关键音符而动作限定器就是那位指挥家它决定在每一个节拍点乐队输出引脚EPWMxA/B应该演奏什么音符高电平、低电平或翻转。AQ子模块是ePWM波形生成的最终执行层它将TB和CC产生的事件转化为对输出引脚的实际控制动作。5.1 事件、动作与优先级机制AQ子模块的输入是四种类型的事件CTR PRD计数器等于周期值TBCTR TBPRD。CTR ZERO计数器等于零TBCTR 0x0000。CTR CMPA计数器等于比较寄存器A的值TBCTR CMPA。CTR CMPB计数器等于比较寄存器B的值TBCTR CMPB。对于每一个事件用户都可以通过AQCTLA控制EPWMxA和AQCTLB控制EPWMxB寄存器独立地配置当该事件发生时对应的输出引脚应该执行什么动作置高AQ_SET强制输出为高电平。拉低AQ_CLEAR强制输出为低电平。翻转AQ_TOGGLE输出电平取反。无操作AQ_DO_NOTHING输出保持不变。注意即使配置为无操作该事件仍然可以用于触发中断或ADC启动。一个核心难点事件优先级。在向上-向下计数模式中由于计数器会两次经过同一个值上升和下降CTRCMPA和CTRCMPB事件每个周期可能发生两次。更复杂的是在计数器转向点ZERO和PRD多个事件可能在同一时刻实际上是一个TBCLK周期内发生。例如在上下模式中当计数器从PRD向下计数时CTRPRD事件和CTRCMPx如果CMPx等于PRD事件可能同时有效。硬件为此定义了严格的优先级规则以确保输出行为的确定性。以向上-向下计数模式为例优先级从高到低大致为软件强制事件最高。在计数上升阶段的CTRCMPB事件CBU。在计数上升阶段的CTRCMPA事件CAU。CTRZERO事件。CTRPRD事件。在计数下降阶段的CTRCMPB事件CBD。在计数下降阶段的CTRCMPA事件CAD最低。理解优先级至关重要。例如如果你在CAU事件设置“置高”在ZERO事件也设置“置高”由于ZERO事件优先级高于CAD但低于CAU在计数器上升阶段CAU的“置高”会生效而在计数器下降阶段如果CAD事件配置为“拉低”那么ZERO事件的“置高”将在CAD之后发生如果CAD事件存在具体效果取决于你的完整配置。设计波形时必须理清每个边沿由哪个事件、以何种优先级触发。5.2 经典PWM波形配置实例解析理论说了很多我们直接看几个最常用的配置实例这是理解AQ如何工作的最佳方式。假设TBPRD4TBCLK时钟周期为单位时间。实例一向上计数非对称PWM主动高电平目标在EPWMxA上生成一个占空比可调的主动高电平PWM。TB配置向上计数模式TB_COUNT_UP。CC配置CMPA存储占空比信息例如CMPA2。AQ配置AQCTLA.ZRO AQ_SET// 计数器为零时EPWMxA置高。AQCTLA.CAU AQ_CLEAR// 计数器等于CMPA上升过程中时EPWMxA拉低。波形分析计数器从0开始上升到4。在0时刻ZERO事件触发输出置高。当计数器上升到等于CMPA(2)时CAU事件触发输出拉低。计数器继续到4后归零重复此过程。高电平时间对应CMPA的值2个TBCLK周期为(TBPRD1)5个TBCLK占空比 CMPA/(TBPRD1) 2/5 40%。这是最基础、最常用的非对称PWM生成方式。实例二向上-向下计数对称PWM互补输出目标在EPWMxA和EPWMxB上生成一对互补的、带死区的对称PWM用于驱动H桥的上半桥和下半桥。TB配置向上-向下计数模式TB_COUNT_UPDOWN。CC配置CMPA控制占空比CMPB CMPA DeadTime。假设CMPA3 DeadTime1则CMPB4。注意这里用CMPA和CMPB的差值模拟死区实际应用中更常用专用的死区DB子模块但此例有助于理解AQ。AQ配置AQCTLA.CAU AQ_SET// 上升过程中等于CMPA时EPWMxA置高。AQCTLA.CBD AQ_CLEAR// 下降过程中等于CMPB时EPWMxA拉低。AQCTLB.CBU AQ_CLEAR// 上升过程中等于CMPB时EPWMxB拉低。AQCTLB.CAD AQ_SET// 下降过程中等于CMPA时EPWMxB置高。波形分析计数器从0上数到4TBPRD再下数回0。EPWMxA在上升阶段计数器到3CMPA时置高在下降阶段计数器到4CMPB时拉低。高电平中心对称。EPWMxB在上升阶段计数器到4CMPB时拉低在下降阶段计数器到3CMPA时置高。其波形正好与EPWMxA相反互补。在计数器从3到4的上升过程中EPWMxA已为高EPWMxB仍为高直到计数到4才拉低这就产生了一个TBCLK宽度的“共同导通”危险区这就是为什么需要死区。实际中我们会让CMPB CMPA DeadTime且让EPWMxB的拉低动作发生在CBD下降过程的CMPB这样就能确保EPWMxA上升沿和EPWMxB下降沿之间插入死区。更规范的做法是使用DB子模块。5.3 软件强制与连续软件强制AQ子模块还提供了AQSFRC和AQCSFRC寄存器用于实现软件强制事件。这在某些调试或特殊控制场景下非常有用软件强制AQSFRC可以立即强制产生一个一次性的动作置高、拉低、翻转到输出引脚优先级最高。例如在故障测试中手动强制输出关断。连续软件强制AQCSFRC可以配置输出引脚被持续强制为高、低或翻转状态直到强制被取消。这在初始化阶段或安全状态下非常有用。实操心得AQ配置的调试技巧化繁为简在调试复杂的多事件AQ配置时先从最简单的配置开始例如只配置ZERO和PRD事件让输出产生一个方波验证TB和基本AQ功能正常。利用仿真器观察在CCS等IDE的实时仿真中可以同时观察TBCTR、CMPA、CMPB的数值变化以及EPWMxA/B的引脚波形。通过单步执行查看在特定事件发生时输出是否按预期动作是排查AQ配置错误的最有效方法。优先级验证如果输出波形不符合预期检查是否有可能发生了事件竞争。仔细对照数据手册中的优先级表格分析在冲突时刻高优先级事件的动作是否覆盖了低优先级事件的动作。影子寄存器更新时机的影响确保你理解CMPA/CMPB影子寄存器的加载时机LOADAMODE/LOADBMODE。如果你在周期中间更新了CMPA的影子寄存器但加载点设在CTRZERO那么新占空比要到下一个周期零点才会生效。如果你的控制算法计算时刻和加载时刻不匹配可能会导致制环路延迟或错误。6. 高级应用与系统集成掌握了TB、CC、AQ三个核心子模块后ePWM模块已经能够应对大多数PWM生成需求。但它的能力远不止于此通过与其他子模块的配合可以构建出极其强大和安全的功率控制系统。6.1 与死区DB子模块的配合在实际的功率桥臂如H桥、三相逆变桥驱动中必须避免上下两个开关管同时导通直通短路。死区时间就是在互补的PWM信号中插入一个两者都为低电平的短暂时间窗口。ePWM模块内置了专用的死区子模块DB它可以接收来自AQ子模块的原始信号并自动为其上升沿、下降沿或双边添加可编程的延迟生成带死区的最终输出信号。这比单纯用CMPA和CMPB差值来模拟死区更加精确和方便且死区时间独立于PWM周期和占空比便于管理。6.2 与错误联防TZ子模块的配合安全是工业系统的生命线。ePWM的错误联防子模块Trip Zone, TZ提供了硬件的快速保护机制。它可以监控多个外部错误信号如过流、过压、过热传感器的输出。一旦任何一个错误信号有效TZ模块可以立即按照预设的模式强制高、强制低、高阻、或者不动作将ePWM输出引脚置于安全状态这个反应是纳秒级的远快于软件中断处理。同时它还可以产生中断通知CPU处理故障。这是实现系统功能安全Functional Safety的关键组件。6.3 与事件触发ET和ADC的配合在电机控制或数字电源的闭环控制中需要在特定的时刻对电流、电压进行采样。ePWM的事件触发子模块ET可以将TB或CC产生的事件如CTRZERO, CTRPRD, CTRCMPB转化为ADC的启动转换SOC信号。例如在对称PWM的中心点即计数器从向上转为向下的时刻CTRPRD和/或过零点CTRZERO进行电流采样可以避开功率管开关的噪声获得更准确的采样值。这种硬件级的自动触发保证了采样时刻的精确性和可重复性对于高性能控制算法至关重要。6.4 多模块同步与相位控制实战回到我们最初提到的三相电机驱动例子。假设我们需要生成三相互差120度的PWM。硬件连接将ePWM1的SYNCO输出连接到ePWM2和ePWM3的SYNCI输入。主模块ePWM1配置设置为上下计数模式SYNCOSEL选择将其“CTRZERO”事件作为同步输出源。它不需要相位加载。从模块ePWM2, ePWM3配置同样设置为上下计数模式且时钟分频与主模块一致。使能相位加载TBCTL.PHSEN 1。设置相位寄存器TBPHS。对于120度相位差如果PWM一个电周期对应计数器从0到TBPRD再回到0那么120度对应TBPRD * 120 / 360 TBPRD / 3。因此ePWM2V相滞后U相120度TBPHS_2 TBPRD / 3。ePWM3W相滞后U相240度或超前120度TBPHS_3 (2 * TBPRD) / 3。注意在上下计数模式下相位加载发生在同步事件到来时加载后计数器的方向由TBCTL.PHSDIR位决定需要根据实际情况设置。启动顺序按照前面提到的流程先配置所有模块最后同时拉高TBCLKSYNC启动。这样ePWM1的计数器归零时会发出同步脉冲ePWM2和ePWM3立即加载各自的TBPHS值从而实现了精确的120度相位差。通过这样的配置三个ePWM模块就能像一支训练有素的乐队在指挥同步信号下各自按照精确的节拍相位演奏共同驱动三相电机平稳运行。这种硬件同步的精度和可靠性是软件模拟无法比拟的。