ePWM同步与相位控制:从原理到多模块电源应用实战 📅 2026/7/22 10:20:01 1. ePWM同步与相位控制从单打独斗到精密协同的艺术在电力电子和电机驱动的世界里PWM脉冲宽度调制是当之无愧的“心脏”。它通过调节开关管的导通与关断时间来控制电压、电流乃至功率的输出。然而当系统从单一模块扩展到多个模块协同工作时一个核心挑战便浮出水面如何让这些“心脏”步调一致地跳动各自为政的PWM信号不仅会导致效率低下更可能引发严重的电磁干扰EMI问题甚至损坏功率器件。这正是ePWM增强型PWM模块的同步与相位控制功能大显身手的地方。它远不止是让几个信号同时开始那么简单而是一套精密的时序编排系统允许工程师像指挥交响乐团一样精确设定每个“乐手”PWM模块的节拍和入场时机。无论是为了均流而交错并联的多个DC-DC变换器还是需要精确120度相位差的三相逆变器ePWM的同步机制都是实现高性能、高可靠性系统的基石。本文将深入拆解ePWM同步与相位控制的硬件逻辑、配置方法并结合Buck变换器、半桥和三相逆变器等典型应用分享从寄存器配置到波形调试的全流程实战经验。2. ePWM同步机制核心时钟、计数器与同步信号流要理解同步必须先吃透ePWM模块的三个核心部件时间基准TB模块、同步输入SyncIn和同步输出SyncOut。它们构成了同步控制的“骨架”。2.1 时间基准TB模块每个PWM的独立节拍器每个ePWM模块都拥有自己独立的时间基准Time-Base, TB其核心是一个16位的向上/向下/上下计数寄存器TBCTR和一个周期寄存器TBPRD。TBCTR的计数频率由系统时钟经过预分频CLKDIV, HSPCLKDIV得到称为TBCLK。PWM的频率由TBPRD的值决定。例如在向上计数模式下当TBCTR从0计数到TBPRD时一个PWM周期完成。这个TB模块就是每个PWM通道的“本地节拍器”它决定了本通道脉冲的“快慢”频率和“节奏”计数模式。注意在初始化任何ePWM模块前务必遵循正确的流程否则可能因寄存器未稳定而产生毛刺中断。标准流程是1. 关闭全局中断2. 关闭ePWM模块中断3. 设置TBCLKSYNC0冻结所有ePWM的时基时钟4. 配置所有ePWM寄存器5. 设置TBCLKSYNC1释放时基时钟所有计数器同时开始运行6. 清除可能存在的虚假中断标志7. 开启ePWM模块中断8. 开启全局中断。这一步是保证多模块同步起点的关键。2.2 同步信号链主从关系的建立单个ePWM模块可以独立工作但多个模块之间需要通过同步信号来建立时序关联。这里有两个关键信号EPWMxSYNCI同步输入该信号可以来自外部引脚或者来自另一个ePWM模块的同步输出EPWMxSYNCO。当SyncIn事件发生时可以触发本模块的计数器TBCTR从相位寄存器TBPHS加载一个值从而实现“对齐”或“偏移”。EPWMxSYNCO同步输出本模块可以生成一个同步脉冲输出给其他模块。这个脉冲的产生时机是可以编程的最常见的是在**计数器等于零CTR0或计数器等于周期值CTRPRD**的时刻。这种“输出”和“输入”的链接就自然形成了主从Master-Slave关系。产生SyncOut的模块是主模块接收其SyncOut作为SyncIn的模块是从模块。一个主模块可以驱动多个从模块而从模块的SyncOut又可以作为下一级模块的SyncIn形成同步链。2.3 相位寄存器TBPHS精密时序偏移的关键同步不仅仅是同时开始更重要的是控制“开始的时刻”。相位寄存器TBPHS就是用于此目的。当从模块的TBCTL[PHSEN]位使能时一旦检测到SyncIn事件从模块的计数器TBCTR不会简单地复位为0而是会立即加载TBPHS寄存器中设定的值。这里的精妙之处在于这个“相位”是相对于主模块的计数器而言的。假设主从模块的TBPRD周期设置为相同的值600。如果将从模块的TBPHS设置为200那么每当主模块计数器归零并发出同步脉冲时从模块的计数器会被设置为200。这意味着从模块的PWM波形在时间轴上“领先”于主模块。这个领先的“相位差”可以通过公式计算相位差度 (TBPHS / TBPRD) * 360°。在这个例子中相位差 (200 / 600) * 360° 120°。这就为实现多相交错并联如三相逆变器各相差120°提供了硬件级的精准支持。3. 同步配置模式详解从独立运行到级联同步ePWM模块的同步行为高度可配置主要通过TBCTL寄存器中的SYNCOSEL和PHSEN位来控制。理解这些模式是灵活应用的基础。3.1 同步输出SyncOut模式选择SYNCOSEL位决定了模块在何时产生同步脉冲输出TB_SYNC_DISABLE (0x3)禁用同步输出。模块独立运行不产生也不响应同步信号。这是多个需要不同频率的模块的典型配置。TB_CTR_ZERO (0x1)当本模块的TBCTR计数到0时产生一个同步脉冲。这是最常用的主模块配置方式因为它保证了所有从模块都在主模块一个周期开始时被同步。TB_CTR_CMPB (0x2)当TBCTR等于CMPB比较寄存器的值时产生同步脉冲。这允许在周期内的任意点产生同步事件用于更复杂的时序控制。TB_SYNC_IN (0x0)同步输出直接“透传”同步输入SyncOut SyncIn。这种模式用于“级联”同步。例如模块1是主模块模块2配置为SYNCOSEL TB_CTR_ZERO模块3配置为SYNCOSEL TB_SYNC_IN并将模块2的SyncOut作为自己的SyncIn。这样模块1同步模块2模块2再同步模块3所有模块最终都与模块1同步。3.2 同步输入SyncIn行为控制PHSEN位决定了模块如何响应SyncIn事件TB_DISABLE (0)忽略SyncIn事件。模块的计数器不受外部同步信号影响。即使该模块接收SyncIn信号例如为了级联透传其自身的PWM相位也不受影响。TB_ENABLE (1)使能相位加载。当SyncIn事件发生时将TBPHS寄存器的值加载到TBCTR计数器。这是实现从模块相位偏移的核心配置。3.3 典型配置模式组合基于上述选项可以组合出几种经典模式独立主模块Independent MasterSYNCOSEL TB_SYNC_DISABLEPHSEN TB_DISABLE应用场景多个需要独立运行在不同频率的Buck变换器。同步主模块Synchronizing MasterSYNCOSEL TB_CTR_ZERO(或TB_CTR_CMPB)PHSEN TB_DISABLE应用场景作为同步链的源头为其他模块提供基准时钟。同步从模块Synchronized SlaveSYNCOSEL TB_SYNC_IN(或TB_SYNC_DISABLE如果不需继续下行同步)PHSEN TB_ENABLE关键动作根据所需的相位差计算并设置TBPHS寄存器。应用场景需要与主模块保持固定相位差的交错并联变换器或逆变器桥臂。级联透传模块Cascade Pass-ThroughSYNCOSEL TB_SYNC_INPHSEN TB_DISABLE(或TB_ENABLE如果自身也需要相位偏移)应用场景在长同步链中中间模块既接受上级同步又将同步信号传递给下级。实操心得在调试同步系统时我习惯先用示波器抓取各模块的SyncOut和SyncIn信号确认同步脉冲是否按预期产生和传递。特别使用TB_CTR_CMPB作为同步源时一定要用示波器验证CMPB的值和同步脉冲的位置是否对应避免因影子寄存器加载时机问题导致同步点漂移。4. 多模块电源转换应用实战解析理论需要实践检验。下面我们通过几个典型的电源拓扑看看如何将ePWM的同步机制应用到实际电路中。4.1 案例一多路独立Buck变换器场景一个系统中有4路Buck变换器分别为不同的负载供电且每路需要的开关频率不同FPWM1 ≠ FPWM2 ≠ FPWM3 ≠ FPWM4。配置方案核心思想各模块完全独立无需同步。配置要点将所有4个ePWM模块EPWM1-EPWM4均配置为独立主模块模式。SYNCOSEL TB_SYNC_DISABLEPHSEN TB_DISABLE为每个模块设置不同的TBPRD值来设定不同的开关频率。例如EPwm1Regs.TBPRD 1200; // 假设TBCLK100MHz 频率 ≈ 100MHz / (12001) ≈ 83.3kHz EPwm2Regs.TBPRD 1400; // 频率 ≈ 71.4kHz EPwm3Regs.TBPRD 800; // 频率 ≈ 125kHz通过设置各自的CMPA寄存器来独立调节每路的占空比。注意事项虽然模块间不同步但每个模块自身的A、B输出如果使用通常是互补或带死区的这依赖于模块内部的动作限定器AQ和死区DB子模块配置与同步无关。4.2 案例二同频/倍频同步Buck变换器场景两个Buck变换器输入并联为了降低输入电流纹波需要它们交错运行Interleaving即相位相差180°。同时第二个Buck的开关频率是第一个的整数倍N倍以优化滤波设计。配置方案核心思想EPWM1作为主模块EPWM2作为从模块并设置相位差。硬件连接将EPWM1的SYNCOUT引脚连接到EPWM2的SYNCIN引脚。EPWM1主模块配置EPwm1Regs.TBPRD 600; // 设定基础周期 EPwm1Regs.TBCTL.bit.CTRMODE TB_COUNT_UPDOWN; // 对称PWM模式 EPwm1Regs.TBCTL.bit.PHSEN TB_DISABLE; // 主模块忽略同步输入 EPwm1Regs.TBCTL.bit.SYNCOSEL TB_CTR_ZERO; // 在计数器为0时发出同步脉冲EPWM2从模块配置// 若要倍频则设置不同的TBPRD。例如若N2则EPWM2频率是EPWM1的两倍 EPwm2Regs.TBPRD 300; // 周期为主模块的一半频率为其两倍 // 若要同频交错则TBPRD与主模块相同 // EPwm2Regs.TBPRD 600; EPwm2Regs.TBCTL.bit.CTRMODE TB_COUNT_UPDOWN; EPwm2Regs.TBCTL.bit.PHSEN TB_ENABLE; // 关键使能相位加载 EPwm2Regs.TBCTL.bit.SYNCOSEL TB_SYNC_IN; // 同步输出透传输入或设为DISABLE // 计算并设置180度相位差对于同频情况 // 相位值 TBPHS (相位差 / 360°) * TBPRD // 180°相位差 TBPHS (180 / 360) * 600 300 EPwm2Regs.TBPHS.half.TBPHS 300;波形结果EPWM1A和EPWM2A的输出将是同频率或倍频、且固定相差180°的PWM波从而实现输入电流的交错显著减小输入电容上的纹波电流应力。4.3 案例三半桥H-Bridge与三相逆变器控制对于更复杂的拓扑如半桥或三相全桥同步控制同样至关重要。半桥控制一个ePWM模块的A、B输出通常用于控制半桥的上、下管两者互补并插入死区。当控制多个半桥时例如双向DC-DC可以让主从模块的对应桥臂交错工作以减少总电流纹波。配置方法与案例二类似但需要仔细配置每个模块内部的AQ和DB寄存器以生成正确的互补带死区信号。三相逆变器控制这是同步和相位控制的经典应用。一个三相逆变器需要3个桥臂各相差120°。我们可以使用1个主模块EPWM1和2个从模块EPWM2, EPWM3。连接EPWM1.SYNCOUT 连接至 EPWM2.SYNCIN 和 EPWM3.SYNCIN。配置三个模块的TBPRD频率必须完全相同。将EPWM1的SYNCOSEL设为TB_CTR_ZERO。EPWM2和EPWM3的PHSEN使能并分别设置TBPHS来产生120°和240°的相位偏移对于UP-DOWN计数模式计算方式需注意因为一个电气周期对应计数器上下行各一次。关键计算在UP-DOWN模式下计数器从0到TBPRD再到0为一个完整三角波周期。要产生120°相位差需要偏移1/3个三角波周期。因此TBPHS应设置为TBPRD * 2 / 3对于240°则是TBPRD * 4 / 3但实际会取模。更稳妥的方法是直接设置TBPHS (所需相位差 / 180°) * TBPRD因为UP-DOWN模式的一个计数周期对应180°。// 假设TBPRD 600 需要U, V, W三相相差120° EPwm1Regs.TBPHS 0; // U相 0° EPwm2Regs.TBPHS 400; // V相 (120/180)*600 400 EPwm3Regs.TBPHS 200; // W相 (240/180)*600 800 但800 600 实际等效于 800-600200? 这里需要仔细核对。 // 注意在UP-DOWN模式中相位关系计算容易出错。一个可靠的方法是先通过仿真或图形化工具验证TBPHS值。避坑指南三相PWM相位设置是新手最容易出错的地方。在UP-DOWN计数模式下一个PWM周期三角波从0到PRD再回到0对应360°电角度。但当我们说三相相差120°时是指正弦调制波或空间矢量的相位差。对于载波三角波来说120°的相位差意味着载波波形在时间轴上偏移1/3个载波周期。因此TBPHS TBPRD * 2 / 3和TBPHS TBPRD * 4 / 3取模后为TBPRD * 1 / 3分别对应120°和240°偏移。强烈建议在硬件调试前先用CCS的图形化工具或MATLAB/Simulink模型验证相位值。5. 寄存器级配置详解与代码实战理解了原理和模式最终都要落实到寄存器配置上。下面以一个主从同步、相位偏移180°的双Buck交错并联为例给出完整的配置代码和注释。5.1 系统初始化与时钟同步首先必须按照前文提到的“正确初始化流程”操作确保所有ePWM模块的时基在开始时刻是同步的。// 步骤1 2: 中断控制假设使用中断 EALLOW; // 解除寄存器保护 PieCtrlRegs.PIECTRL.bit.ENPIE 0; // 禁用PIE模块全局中断相关 PieVectTable.EPWM1_INT epwm1_isr; // 配置中断向量此处仅为示例 EDIS; DINT; // 禁用全局中断 // 步骤3: 冻结所有ePWM时基时钟以便同步初始化 EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC 0; // 关键冻结时钟 EDIS; // 步骤4: 初始化各个ePWM模块的寄存器配置见下文 InitEPwm1Master(); InitEPwm2Slave(); // 步骤5: 释放时基时钟所有计数器同时开始计数 EALLOW; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC 1; // 关键同步启动 EDIS; // 步骤6 7 8: 中断相关配置 EALLOW; PieCtrlRegs.PIEIER3.bit.INTx1 1; // 使能EPWM1中断在PIE组3的通道1 IER | M_INT3; // 使能CPU级中断3 EINT; // 使能全局中断 ERTM; // 使能实时调试中断5.2 主模块EPWM1配置代码void InitEPwm1Master(void) { // 配置时基模块TB EPwm1Regs.TBCTL.bit.CTRMODE TB_COUNT_UPDOWN; // 上下计数模式生成对称PWM EPwm1Regs.TBPRD 600; // 设定PWM周期。PWM频率 SYSCLKOUT / (HSPCLKDIV*CLKDIV*(TBPRD*2)) EPwm1Regs.TBPHS.half.TBPHS 0; // 主模块相位设为0 EPwm1Regs.TBCTL.bit.PHSEN TB_DISABLE; // 主模块不响应同步输入加载相位 EPwm1Regs.TBCTL.bit.PRDLD TB_SHADOW; // 周期寄存器使用影子寄存器在CTR0时加载 EPwm1Regs.TBCTL.bit.SYNCOSEL TB_CTR_ZERO; // 在计数器为0时产生同步输出脉冲 EPwm1Regs.TBCTL.bit.HSPCLKDIV TB_DIV2; // 高速时钟预分频 EPwm1Regs.TBCTL.bit.CLKDIV TB_DIV1; // 时钟预分频 // 配置比较模块CC EPwm1Regs.CMPCTL.bit.SHDWAMODE CC_SHADOW; // CMPA使用影子寄存器 EPwm1Regs.CMPCTL.bit.SHDWBMODE CC_SHADOW; // CMPB使用影子寄存器 EPwm1Regs.CMPCTL.bit.LOADAMODE CC_CTR_ZERO; // 在CTR0时加载影子寄存器到CMPA EPwm1Regs.CMPCTL.bit.LOADBMODE CC_CTR_ZERO; // 在CTR0时加载影子寄存器到CMPB EPwm1Regs.CMPA.half.CMPA 300; // 初始化占空比50% (300/600) EPwm1Regs.CMPB 150; // CMPB可用于其他事件触发如ADC启动 // 配置动作限定器AQ - 生成EPWM1A的对称PWM EPwm1Regs.AQCTLA.bit.ZRO AQ_SET; // 在CTR0时将EPWM1A输出置高 EPwm1Regs.AQCTLA.bit.CAU AQ_CLEAR; // 在CTRCMPA向上计数时将EPWM1A输出置低 EPwm1Regs.AQCTLA.bit.CAD AQ_SET; // 在CTRCMPA向下计数时将EPWM1A输出置高 // 注此配置在UP-DOWN模式下生成一个以周期中心对称的PWM波。 // 配置死区模块DB如果需要 EPwm1Regs.DBCTL.bit.OUT_MODE DB_FULL_ENABLE; // 使能A和B通道的死区 EPwm1Regs.DBCTL.bit.POLSEL DB_ACTV_HIC; // 极性选择根据驱动芯片调整 EPwm1Regs.DBFED 50; // 下降沿延迟死区时间 EPwm1Regs.DBRED 50; // 上升沿延迟死区时间 }5.3 从模块EPWM2配置代码void InitEPwm2Slave(void) { // 配置时基模块TB EPwm2Regs.TBCTL.bit.CTRMODE TB_COUNT_UPDOWN; // 必须与主模块一致 EPwm2Regs.TBPRD 600; // 周期与主模块相同实现同频 // 计算180度相位差TBPHS (180 / 360) * (TBPRD * 2) ? 注意 // 在UP-DOWN模式下计数器从0到PRD再到0为一个完整周期360°。 // 180°偏移意味着从模块的三角波比主模块晚半个周期开始。 // 当主模块CTR0发出同步脉冲时从模块应加载一个值使其波形看起来“延迟”了半个周期。 // 这个值应该是TBPRD。因为主模块从0开始从模块从TBPRD开始在三角波上看就是180°偏移。 EPwm2Regs.TBPHS.half.TBPHS 600; // 关键设置180°相位偏移 EPwm2Regs.TBCTL.bit.PHSEN TB_ENABLE; // 关键使能同步时加载相位寄存器 EPwm2Regs.TBCTL.bit.PRDLD TB_SHADOW; EPwm2Regs.TBCTL.bit.SYNCOSEL TB_SYNC_IN; // 同步输出透传输入保持信号链 EPwm2Regs.TBCTL.bit.HSPCLKDIV TB_DIV2; EPwm2Regs.TBCTL.bit.CLKDIV TB_DIV1; // 配置比较模块CC EPwm2Regs.CMPCTL.bit.SHDWAMODE CC_SHADOW; EPwm2Regs.CMPCTL.bit.SHDWBMODE CC_SHADOW; EPwm2Regs.CMPCTL.bit.LOADAMODE CC_CTR_ZERO; EPwm2Regs.CMPCTL.bit.LOADBMODE CC_CTR_ZERO; EPwm2Regs.CMPA.half.CMPA 300; // 相同占空比 EPwm2Regs.CMPB 150; // 配置动作限定器AQ - 必须与主模块逻辑一致 EPwm2Regs.AQCTLA.bit.ZRO AQ_SET; EPwm2Regs.AQCTLA.bit.CAU AQ_CLEAR; EPwm2Regs.AQCTLA.bit.CAD AQ_SET; // 配置死区模块DB EPwm2Regs.DBCTL.bit.OUT_MODE DB_FULL_ENABLE; EPwm2Regs.DBCTL.bit.POLSEL DB_ACTV_HIC; EPwm2Regs.DBFED 50; EPwm2Regs.DBRED 50; }代码解析与关键点相位计算这是最容易混淆的点。在TB_COUNT_UPDOWN模式下一个完整的三角波周期0 - PRD - 0对应360°。要让从模块滞后主模块180°意味着当主模块的三角波从0开始时从模块的三角波应该从峰值PRD值开始。因此TBPHS应设置为TBPRD本例中为600。如果设置TBPHS300则相位差为90°。影子寄存器CMPCTL中LOADAMODE和LOADBMODE设置为CC_CTR_ZERO意味着新的比较值只在计数器归零时从影子寄存器加载到活动寄存器。这保证了在一个PWM周期内占空比是稳定的避免了周期中间改变比较值可能导致的脉冲宽度异常。同步使能从模块的PHSEN位必须使能TB_ENABLE否则TBPHS寄存器不会在同步事件发生时加载到计数器同步也就失去了相位控制的意义。5.4 运行时动态调整初始化完成后在运行中通常只需要动态更新CMPA来调整占空比。由于配置了影子寄存器更新是安全的。// 在中断或主循环中安全地更新占空比 EPwm1Regs.CMPA.half.CMPA new_duty_master; // 新值写入影子寄存器 EPwm2Regs.CMPA.half.CMPA new_duty_slave; // 新值写入影子寄存器 // 新占空比值将在各自模块的下一个CTR0时刻生效由于同步机制两者仍保持180°相位差。6. 高级应用与问题排查实录掌握了基础配置后可以探索更复杂的应用并学会解决实际调试中遇到的问题。6.1 多级同步链与同步信号传播延迟在控制多个模块如6个以上时可能会采用级联同步Master - Slave1 - Slave2 - ...。需要注意的是同步信号SYNCOUT/SYNCIN在模块间传递会有微小的硬件延迟通常为几个TBCLK周期。对于开关频率很高如500kHz的应用这个延迟可能导致可观的相位误差。解决方案星型连接如果可能尽量让主模块的SYNCOUT同时连接到所有从模块的SYNCIN而不是级联。这需要芯片有足够的同步信号路由能力。软件补偿测量或估算延迟时间通过在从模块的TBPHS值中减去相应的计数值来进行补偿。例如如果延迟相当于2个TBCLK且TBCLK周期为10ns那么对于100kHz的PWM周期10us2个TBCLK的延迟造成的相位误差很小0.02%。但对于1MHz的PWM周期1us2个TBCLK的延迟就占了0.2%可能需要补偿。6.2 同步丢失与故障恢复在强干扰环境中同步信号可能受到干扰。ePWM模块的TBSTS寄存器中的SYNCI位可以锁存外部同步事件。可以定期检查该位或结合中断来监控同步状态。监控策略使能同步输入错误中断如果支持或在后台任务中轮询TBSTS.SYNCI位。如果在一段预期时间内没有检测到同步事件可以触发故障处理程序。恢复策略一种简单的恢复方法是执行一次“软同步”。将主从模块的TBCLKSYNC暂时清零重新初始化从模块的TBCTR和TBPHS然后再置位TBCLKSYNC。但这会导致PWM输出短暂停顿。更平滑的方法可能是让从模块在检测到同步丢失后自动切换到独立运行模式PHSENDISABLE并尝试与主模块频率保持软同步待同步信号恢复后再重新锁相。6.3 常见问题排查表问题现象可能原因排查步骤与解决方法从模块无输出或输出异常1. 同步信号未连接或配置错误。2.PHSEN位未使能。3.TBPHS值设置不合理如大于TBPRD。4. 主模块未产生SYNCOUT。1. 检查硬件连接和GPIO复用配置。2. 确认从模块TBCTL.PHSEN 1。3. 检查TBPHS值在UP/DOWN模式应小于等于TBPRD。4. 检查主模块TBCTL.SYNCOSEL是否配置为TB_CTR_ZERO或TB_CTR_CMPB。相位关系不正确1.TBPHS计算错误。2. 主从模块计数模式不一致一个UP一个UP-DOWN。3. 影子寄存器加载点配置错误。1. 重新计算相位值用示波器测量验证。牢记不同计数模式下的相位计算方式不同。2. 确保主从模块TBCTL.CTRMODE设置相同。3. 检查CMPCTL.LOADxMODE确保比较值在稳定点如CTR0加载。同步后波形出现毛刺或跳动1. 同步发生时计数器正在变化导致加载不稳定。2. 同步信号上有噪声。3. 软件在错误的时间点写入了周期或比较寄存器。1. 确保同步信号干净。可尝试在PCB上加强同步信号线的屏蔽或走线。2. 使用影子寄存器并只在安全点如CTR0更新活动寄存器。3. 在中断服务程序中更新寄存器避免在主循环随机更新。高频率下同步不稳定1. TBCLK频率过高接近芯片极限。2. 同步信号传播延迟影响。3. 软件处理同步事件太慢。1. 适当增加HSPCLKDIV或CLKDIV降低TBCLK频率。2. 考虑采用星型同步或进行延迟补偿。3. 优化代码确保同步中断能得到快速响应。6.4 使用CMPB触发同步与ADC采样SYNCOSEL可以配置为TB_CTR_CMPB这提供了极大的灵活性。例如在一个功率因数校正PFC电路中我们希望在电流采样点通常不在PWM周期边界触发ADC转换并同时同步另一个模块。配置将主模块的SYNCOSEL设为TB_CTR_CMPB并设置CMPB寄存器为ADC采样的时刻。这样每当主模块计数器等于CMPB时就会产生一个同步脉冲。联动这个同步脉冲可以同时触发从模块的相位加载和ADC的启动转换通过配置事件触发子模块ETS。这样就实现了PWM事件、模块同步和ADC采样的硬同步极大提高了控制环路的时间精度和确定性。最后一点个人体会ePWM的同步功能就像给多个数字电源或电机驱动单元赋予了“合唱”的能力。初学时容易被各种寄存器位搞晕。我的建议是先从最简单的同频、同相主从模式调通用示波器亲眼看到两个通道的脉冲沿对齐。然后再尝试加入相位偏移观察波形如何移动。最后再挑战倍频和CMPB触发同步等高级功能。每一步都用示波器验证形成“配置-观测-理解”的正循环。寄存器手册是地图但示波器才是你穿越调试丛林时最可靠的眼睛。