TI C2000 eHRPWM主从同步与相位控制:多相电源设计的核心硬件方案

📅 2026/7/21 20:46:45
TI C2000 eHRPWM主从同步与相位控制:多相电源设计的核心硬件方案
1. 项目概述与核心价值在电力电子和电机驱动的世界里精确的时序控制是决定系统性能、效率和可靠性的基石。无论是服务器电源里多相交错的降压变换器还是电动汽车驱动中的三相逆变器其核心都离不开对多个功率开关管MOSFET、IGBT的精准“指挥”。这个指挥棒就是脉宽调制PWM信号。然而当系统从单一功率级扩展到多相、多桥臂的复杂拓扑时如何让多个PWM信号源像一支训练有素的交响乐团一样既保持统一的节拍频率同步又能奏出和谐的和声相位关系就成了工程师面临的核心挑战。传统的解决方案往往依赖于复杂的外部逻辑电路或对多个独立定时器的软件“硬同步”不仅增加了硬件成本和PCB面积更在软件上引入了难以调试的时序抖动和同步延迟问题。而德州仪器TI在其C2000系列微控制器中集成的增强型高分辨率脉宽调制器eHRPWM模块正是为解决这一痛点而生。它并非一个简单的PWM发生器而是一个配备了完整“指挥系统”的智能外设。其精髓在于内置的主从同步链SyncIn/SyncOut和可编程相位寄存器TBPHS。这两个功能允许你将多个ePWM模块串联起来形成一个层级清晰、时序精确的PWM网络。主模块决定整个系统的“心跳”从模块可以灵活地选择跟随这个心跳并可以设置一个相位偏移量从而轻松实现多相交错、移相全桥等高级控制策略。我过去在开发一款大功率多相VRM电压调节模块时就深刻体会到了eHRPWM的价值。我们需要实现四相Buck变换器的交错并联每相之间要求严格的90度相位差以最大化抵消输入电容的电流纹波。如果使用普通定时器模拟中断和计算负担极重且任何细微的代码延迟都会导致相位失配引发严重的电磁干扰EMI问题。而采用eHRPWM的主从相位控制我们仅需在初始化时配置好主从关系和相位寄存器值硬件便会自动、精确地维持这种相位关系CPU得以解放出来专注于更高级的算法如电压环、电流环PID调节系统稳定性和开发效率获得了质的提升。本文将深入拆解eHRPWM的主从同步与相位控制机制并结合Buck、半桥/全桥、三相逆变器等经典拓扑展示如何将这些硬件特性转化为实实在在的电源性能优势。2. eHRPWM同步与相位控制机制深度解析要驾驭eHRPWM必须首先理解其时间基准Time-Base TB子模块的核心工作原理。你可以把它想象成一个精密的数字时钟发生器而同步与相位控制就是调整这个时钟的“起点”和“对齐方式”。2.1 时间基准TB子模块PWM的节拍器每个ePWM模块都有一个独立的时间基准计数器TBCNT和一个周期寄存器TBPRD。TBCNT会根据配置的计数模式递增、递减、递增-递减循环计数其计数值与CMPA/CMPB比较寄存器的比较结果最终生成PWM波形。TBPRD决定了PWM的频率而CMPA/CMPB的值决定了占空比。这是PWM的基础但要让多个这样的“节拍器”协同工作就需要同步机制。2.2 同步信号流SyncIn与SyncOuteHRPWM模块间通过两条硬件信号线连接EPWMxSYNCI同步输入和EPWMxSYNCO同步输出。这构成了一个单向的同步链。SyncOut同步输出一个模块在什么时刻向下一级模块发出同步脉冲这由TBCTL[SYNCOSEL]位域控制。常见选项有TB_CTR_ZERO当本模块的TBCNT计数到0时发出同步脉冲。这是最常用的模式用于在周期起点对齐所有模块。TB_CTR_CMPB当TBCNT等于CMPB寄存器值时发出同步脉冲。这允许在周期内的任意点触发同步非常灵活。TB_SYNC_DISABLE禁用同步输出模块独立运行。SyncIn同步输入一个模块在收到同步脉冲时该如何响应这由TBCTL[PHSEN]位控制。TB_DISABLE忽略输入的同步脉冲我行我素。TB_ENABLE在收到同步脉冲时将TBPHS相位寄存器的值加载到TBCNT中。这是实现相位控制的关键。2.3 相位寄存器TBPHS控制时序的“起跑线”相位寄存器TBPHS是理解相位偏移的核心。当从模块的PHSEN使能后一旦其SyncIn引脚收到主模块发来的同步脉冲它会立即将TBPHS的值载入自己的TBCNT计数器。这里有一个至关重要的细节载入TBPHS后计数器从该值开始继续按照原有方向由TBCTL[CTRMODE]和TBCTL[PHSDIR]共同决定计数。因此TBPHS的值直接决定了从模块波形相对于主模块的相位延迟。相位差计算公式相位差度 (TBPHS / TBPRD) × 360°例如主从模块TBPRD均为600若将从模块的TBPHS设置为200则从模块波形将领先主模块(200/600)*360° 120°。这里的“领先”是指从模块的计数器从200开始计数它会比从0开始计数的主模块更早达到周期值或比较值。2.4 主从模式典型配置根据SYNCOSEL和PHSEN的组合可以形成几种典型工作模式独立主模式SYNCOSEL设置为TB_CTR_ZERO或TB_CTR_CMPBPHSEN禁用。模块自主运行并在特定时刻向后续模块发出同步脉冲但自身不受外部同步影响。纯从模式相位同步SYNCOSEL设置为TB_SYNC_IN直通模式即输入什么就输出什么或直接禁用输出PHSEN使能。模块接收同步脉冲并加载TBPHS值从而实现与主模块固定相位差的同步运行。从模式且继续传递同步SYNCOSEL设置为TB_SYNC_INPHSEN使能。模块在同步自身的同时还将接收到的同步脉冲原样传递给下一个模块。这在多级串联同步中非常有用。独立运行模式SYNCOSEL设置为TB_SYNC_DISABLEPHSEN禁用。模块完全独立不与任何其他模块同步。实操心得理解“加载”与“复位”的区别新手常有的一个误解是认为同步脉冲会将从模块的计数器“复位”到TBPHS值。更准确的理解是“加载”或“重载”。计数器并非从0开始而是从TBPHS开始继续计数。这意味着在递增计数模式下如果TBPHS设为200计数器序列可能是... 598, 599,收到同步脉冲跳转到200 201, 202 ... 它不是在零点对齐而是在相位点对齐。这一点在调试波形相位关系时至关重要。3. 核心电源拓扑中的应用实战与配置详解理论需要结合实际电路才能焕发生命力。下面我们以几个经典的电源拓扑为例逐行分析eHRPWM的配置代码和设计思路。3.1 应用一多相独立Buck变换器场景描述系统中有四个独立的Buck变换器分别为不同的负载供电例如处理器核心、内存、I/O等。它们需要工作在不同的开关频率和占空比下且相互之间没有同步要求。配置思路这是最简单的情况。每个ePWM模块配置为独立主模式或干脆全部独立运行。每个模块拥有自己独立的TBPRD决定频率和CMPA决定占空比。SYNCOSEL设为TB_SYNC_DISABLEPHSEN设为TB_DISABLE。关键配置代码分析以EPWM1为例// 初始化代码片段 EPwm1Regs.TBPRD 1200; // 设置周期值假设系统时钟为100MHzTBCLK分频后为50MHz则PWM频率约为 50MHz / (12001) ≈ 41.67kHz EPwm1Regs.TBPHS.bit.TBPHS 0; // 相位寄存器清零独立运行时此值无关紧要 EPwm1Regs.TBCTL.bit.CTRMODE TB_COUNT_UP; // 设置为递增计数模式 EPwm1Regs.TBCTL.bit.PHSEN TB_DISABLE; // 禁用相位加载 EPwm1Regs.TBCTL.bit.PRDLD TB_SHADOW; // 使用影子寄存器在CTR0时加载避免周期中更改占空比导致毛刺 EPwm1Regs.TBCTL.bit.SYNCOSEL TB_SYNC_DISABLE; // 禁用同步输出独立运行 EPwm1Regs.CMPA.half.CMPA 700; // 设置比较器A值占空比 700 / 1200 ≈ 58.3% EPwm1Regs.CMPCTL.bit.LOADAMODE CC_CTR_ZERO; // 在CTR0时加载CMPA影子寄存器 EPwm1Regs.AQCTLA.bit.PRD AQ_CLEAR; // 当CTRTBPRD周期匹配时清除EPWM1A输出置低 EPwm1Regs.AQCTLA.bit.CAU AQ_SET; // 当CTRCMPA比较器A匹配时置高EPWM1A输出 // 这样就生成了一个在计数到CMPA时变高在计数到TBPRD时变低的PWM波。其他三个Buck通道EPWM2, EPWM3, EPWM4的配置类似只需赋予不同的TBPRD和CMPA值即可实现独立频率和占空比。3.2 应用二同步运行的多相Buck变换器场景描述一个多相例如双相Buck变换器为同一负载供电。它们必须工作在同一开关频率下并且通常要求两相波形交错180度即反相以减小输入和输出电流纹波。配置思路设置一个模块如EPWM1为主模块另一个EPWM2为从模块。主模块在计数器为零时发出同步脉冲SYNCOSEL TB_CTR_ZERO。从模块使能相位加载PHSEN TB_ENABLE并将其TBPHS设置为TBPRD/2即可实现180度相位差。从模块的SYNCOSEL可以设置为TB_SYNC_IN直通或TB_SYNC_DISABLE因为这里只有两级不需要继续传递同步。关键配置与计算 假设TBPRD 600采用递增-递减计数模式UP-DOWN以产生对称的PWM波形。主模块 (EPWM1):EPwm1Regs.TBPRD 600; EPwm1Regs.TBCTL.bit.CTRMODE TB_COUNT_UPDOWN; EPwm1Regs.TBCTL.bit.SYNCOSEL TB_CTR_ZERO; // 在CTR0时发出同步 EPwm1Regs.TBCTL.bit.PHSEN TB_DISABLE;从模块 (EPWM2):EPwm2Regs.TBPRD 600; // 必须与主模块相同 EPwm2Regs.TBPHS.bit.TBPHS 300; // 相位差 (300 / 600) * 360° 180° EPwm2Regs.TBCTL.bit.CTRMODE TB_COUNT_UPDOWN; EPwm2Regs.TBCTL.bit.SYNCOSEL TB_SYNC_IN; // 同步输入直通或禁用 EPwm2Regs.TBCTL.bit.PHSEN TB_ENABLE; // 关键使能相位加载波形关系当主模块计数器从0开始递增时从模块计数器从300开始递增。当主模块计数到600后递减时从模块计数到600后也递减。这样两个模块的计数器值始终相差300个计数对应的PWM输出波形也就固定相差半个周期180°。3.3 应用三三相逆变器控制电机驱动场景描述控制一个三相全桥逆变器驱动永磁同步电机PMSM或交流感应电机ACI。三相桥臂的上下管需要互补的PWM信号带死区并且三相之间需要互差120度电角度。配置思路需要三个ePWM模块EPWM1/2/3分别控制U、V、W三相。通常设置EPWM1为主模块EPWM2和EPWM3为从模块。三相的TBPRD必须相同以保证频率一致。通过设置EPWM2和EPWM3的TBPHS值来实现120度相位差。同时每个模块需要启用死区生成子模块DB以防止同一桥臂上下管直通。关键配置与计算 假设采用空间矢量脉宽调制SVPWMTBPRD对应PWM载波周期。采用递增-递减计数模式。相位差计算对于N相系统第M个从模块的相位寄存器值应为TBPHS(M) (TBPRD / N) * (M - 1)。 对于三相N3TBPRD900举例EPWM2 (M2):TBPHS (900/3)*(2-1) 300- 相位差(300/900)*360° 120°EPWM3 (M3):TBPHS (900/3)*(3-1) 600- 相位差(600/900)*360° 240°(等效于滞后120°)主模块 (EPWM1) 配置要点:EPwm1Regs.TBPRD 900; EPwm1Regs.TBCTL.bit.SYNCOSEL TB_CTR_ZERO; // ... 其他TB配置 EPwm1Regs.DBCTL.bit.OUT_MODE DB_FULL_ENABLE; // 使能全死区模式 EPwm1Regs.DBCTL.bit.POLSEL DB_ACTV_HIC; // 高有效互补模式EPWMxA高有效EPWMxB低有效 EPwm1Regs.DBFED 50; // 下降沿延迟死区时间单位TBCLK周期 EPwm1Regs.DBRED 50; // 上升沿延迟死区时间从模块 (EPWM2) 配置要点:EPwm2Regs.TBPRD 900; EPwm2Regs.TBPHS.bit.TBPHS 300; // 120度相位偏移 EPwm2Regs.TBCTL.bit.SYNCOSEL TB_SYNC_IN; // 接收来自EPWM1的同步 EPwm2Regs.TBCTL.bit.PHSEN TB_ENABLE; EPwm2Regs.TBCTL.bit.PHSDIR TB_DOWN; // 重要在UP-DOWN模式下需指定同步后计数方向 // ... 死区配置与EPWM1相同注意事项PHSDIR的配置在递增-递减计数模式下当从模块在同步点加载TBPHS后它需要知道接下来是向上计数还是向下计数。PHSDIR位就是用来指定这个初始方向的。通常如果TBPHS值在0到TBPRD/2之间设置为TB_DOWN先减后增可以产生中心对称的波形这对于SVPWM等算法很重要。具体需结合PWM调制策略决定。3.4 应用四移相全桥PSFB或零电压开关全桥ZVSFB控制场景描述在全桥拓扑中通过控制对角线开关管对之间的相位差而非占空比来调节输出电压同时实现开关管的零电压开关ZVS降低开关损耗。这是通信电源等高效高功率密度场景的常见拓扑。配置思路需要两个ePWM模块EPWM1 EPWM2分别控制全桥的左、右桥臂或领先桥臂、滞后桥臂。两个模块工作于相同频率和固定占空比通常接近50%。输出电压的调节通过动态改变两个模块输出波形之间的相位差来实现。这通过实时修改从模块的TBPHS寄存器值来完成。关键配置与操作初始化将EPWM1设为主模块EPWM2设为从模块。两者TBPRD相同CMPA设置为TBPRD/2以获得50%占空比。使能死区。EPWM2的PHSEN使能。// 初始化阶段 EPwm1Regs.TBPRD 1200; EPwm1Regs.CMPA.half.CMPA 600; // 50% 占空比 EPwm1Regs.TBCTL.bit.SYNCOSEL TB_CTR_ZERO; EPwm2Regs.TBPRD 1200; EPwm2Regs.CMPA.half.CMPA 600; // 50% 占空比 EPwm2Regs.TBCTL.bit.SYNCOSEL TB_SYNC_IN; EPwm2Regs.TBCTL.bit.PHSEN TB_ENABLE; // 初始相位差可设为0或一个较小值 EPwm2Regs.TBPHS.bit.TBPHS 0;实时相位调节在控制循环如PID中断中根据输出电压反馈计算所需的相位差Φ通常范围0-180度然后将其转换为TBPHS值并更新。// 运行阶段在中断服务程序中 Uint16 desired_phase_shift_deg compute_phase_shift(); // 计算所需相位角例如90度 // 将角度转换为TBCLK计数值。注意在UP计数模式下相位差对应TBPHS值。 // 公式TBPHS_value (desired_phase_shift_deg / 360.0) * (TBPRD 1); // 由于是整数运算需注意精度处理。 float phase_ratio (float)desired_phase_shift_deg / 360.0; Uint32 tbpgs_val (Uint32)(phase_ratio * 1201); // TBPRD1200, 周期计数值为1201 // 确保值在有效范围内 if(tbpgs_val 1200) tbpgs_val 1200; EPwm2Regs.TBPHS.bit.TBPHS tbpgs_val; // 动态更新相位寄存器通过动态调整TBPHS就实现了对全桥输出电压的连续调节同时保持了固定的开关频率和占空比有利于磁性元件的优化和ZVS的实现。4. 高级技巧、常见陷阱与调试心得掌握了基本配置后在实际工程中还会遇到一些深水区。下面分享一些从项目实践中总结出来的经验和教训。4.1 影子寄存器与实时更新策略eHRPWM的许多关键寄存器如TBPRD,CMPA/CMPB,TBPHS,DBRED/DBFED都有影子寄存器。这允许你在任意时刻安全地写入新值而该值只有在特定的“加载事件”如CTR0, CTRPRD发生时才会从影子寄存器传递到活动寄存器生效。为什么重要如果在PWM周期中间直接修改活动寄存器可能导致输出产生毛刺或非法的脉冲损坏功率器件。影子寄存器机制是硬件提供的保护。如何配置通过TBCTL[PRDLD]和CMPCTL[LOADxMODE]等位域控制加载时机。对于周期寄存器通常设置为在CTR0时加载PRDLD TB_SHADOW。对于比较寄存器在电机控制中常设置为在CTR0或CTRPRD时加载以确保在一个PWM周期内占空比只改变一次波形对称。实操陷阱在动态改变相位如PSFB应用或占空比时务必确认你写入的是影子寄存器并且理解加载事件的时机。错误配置可能导致更改延迟一个或多个PWM周期才生效引起控制环路不稳定。4.2 同步链的规划与延迟考量当多个模块级联同步时例如EPWM1 - EPWM2 - EPWM3同步脉冲在模块间传递会有微小的硬件延迟通常为数个纳秒级。在绝大多数应用中这个延迟可以忽略不计。但是在以下情况下需要谨慎极高开关频率例如开关频率500kHz时数个纳秒的延迟可能占开关周期的可观比例。对相位精度要求极端严格例如在多相并联且相数非常多如12相时累积延迟可能导致最后一相与第一相的相位误差超出允许范围。解决方案星型连接如果可能让所有从模块都直接接收来自同一个主模块的同步信号而不是级联。这需要主模块有足够的扇出能力或者使用外部缓冲器。软件补偿如果只能级联可以测量或根据数据手册估算同步传递延迟然后在计算从模块的TBPHS值时将这个延迟折算成TBCLK计数进行预补偿。例如如果每级延迟t_dlyTBCLK周期为T_tbclk那么对于第N个从模块可以在计算出的理论TBPHS值上减去(N-1) * (t_dly / T_tbclk)。4.3 计数模式与相位方向PHSDIR的耦合这是最容易出错的地方之一。TBPHS的行为与TBCTL[CTRMODE]计数模式和TBCTL[PHSDIR]紧密相关。递增计数模式UPTBPHS直接定义了同步事件后计数器的起始值。PHSDIR位在此模式下被忽略。相位差计算简单直接。递增-递减计数模式UP-DOWN情况变得复杂。加载TBPHS后计数器是继续向上计数还是立即向下计数这由PHSDIR位决定。PHSDIR TB_UP加载TBPHS后向上计数。PHSDIR TB_DOWN加载TBPHS后向下计数。如何选择这取决于你想要的波形对称性。在电机SVPWM控制中通常希望PWM波形关于周期中心对称。假设TBPRD600TBPHS200。如果同步点发生在主模块CTR0时计数器将从0开始递增为了让从模块也产生中心对称波形我们希望它的计数器从200开始后先向下计数到0再向上计数到600。因此需要设置PHSDIR TB_DOWN。如果设置成TB_UP波形将不对称可能导致谐波问题。调试建议在初始化复杂同步和相位关系后不要急于连接功率电路。先用示波器同时测量主从模块的EPWMxSYNCI/O信号和EPWMxA输出并结合仿真或手动绘制计数器波形彻底验证相位关系是否符合预期。4.4 故障安全与Trip-Zone子模块的集成在电源系统中过流、过压、过热等故障保护必须快速且可靠。eHRPWM集成了强大的Trip-ZoneTZ子模块可以响应外部故障引脚或内部故障事件在几个时钟周期内强制将PWM输出置为安全状态高阻、高电平或低电平。配置要点分配TZ引脚将硬件比较器输出或温度传感器信号连接到MCU的TZ输入引脚。配置TZ动作通过TZSEL寄存器选择哪些故障源能触发本ePWM模块。通过TZCTL寄存器配置触发后EPWMxA和EPWMxB的输出动作如强制为高、低或高阻。选择触发模式单次触发OST故障发生后PWM输出被锁存在安全状态直到软件通过TZCLR寄存器清除标志位。周期触发CBC故障发生后PWM输出在当前周期立即进入安全状态但在下一个PWM周期开始时自动恢复前提是故障信号已消失。这适用于逐周期限流保护。与同步的协同通常故障保护是最高优先级的。即使模块处于从模式并等待同步一旦TZ事件发生输出会立即被强制动作。同步逻辑本身一般不会因TZ事件而中断但输出已经被钳位。经验之谈务必在系统上电初始化阶段就配置好TZ模块并进行功能测试例如短接一个电流采样电阻到地模拟过流。确保在故障条件下所有PWM输出都能按预期进入安全状态这是产品可靠性的生命线。5. 从理论到实践一个完整的三相交错Buck设计案例让我们整合上述知识设计一个为高性能CPU供电的三相交错同步Buck变换器。目标输入12V输出1.2V100A开关频率每相500kHz三相交错120度以最小化输入电流纹波和输出电容需求。系统参数计算开关周期T_sw 1 / 500kHz 2µs。假设系统时钟SYSCLKOUT 200MHzePWM时钟预分频设为/2则TBCLK 100MHz周期T_tbclk 10ns。TBPRD计算对于递增-递减模式PWM周期T_sw 2 * TBPRD * T_tbclk。因此TBPRD T_sw / (2 * T_tbclk) 2µs / (2 * 10ns) 100。相位寄存器值三相N3。EPWM1 (主):TBPHS1 0EPWM2 (从):TBPHS2 TBPRD / 3 100 / 3 ≈ 33.33- 取整33。实际相位差(33/100)*360° 118.8°存在微小误差在工程可接受范围。若需精确可提高TBCLK频率或TBPRD值。EPWM3 (从):TBPHS3 (TBPRD / 3) * 2 66.67- 取整67。相位差(67/100)*360° 241.2°(滞后121.2°与EPWM2相差约122.4°有误差)。ePWM配置代码框架// 系统初始化 InitSysCtrl(); // 初始化系统时钟使能ePWM外设时钟 // 配置主模块 EPWM1 EPwm1Regs.TBPRD 100; // 设置周期 EPwm1Regs.TBPHS.bit.TBPHS 0; // 主模块相位为0 EPwm1Regs.TBCTL.bit.CTRMODE TB_COUNT_UPDOWN; // 上下计数模式 EPwm1Regs.TBCTL.bit.PHSEN TB_DISABLE; // 主模块不加载相位 EPwm1Regs.TBCTL.bit.PRDLD TB_SHADOW; // 影子寄存器模式 EPwm1Regs.TBCTL.bit.SYNCOSEL TB_CTR_ZERO; // 在CTR0时发出同步 EPwm1Regs.TBCTL.bit.HSPCLKDIV TB_DIV2; // 高速时钟预分频 /2 EPwm1Regs.TBCTL.bit.CLKDIV TB_DIV1; // 时钟预分频 /1 EPwm1Regs.CMPA.half.CMPA 50; // 初始占空比50%输出电压约为6V开环示例实际由闭环控制动态调整 EPwm1Regs.CMPCTL.bit.LOADAMODE CC_CTR_ZERO; // 在CTR0时加载CMPA EPwm1Regs.AQCTLA.bit.CAU AQ_SET; // CTRCMPA时置高 EPwm1Regs.AQCTLA.bit.CAD AQ_CLEAR; // CTRCMPA时置低在上下计数模式中CAU和CAD分别对应增计数和减计数的匹配事件 // 配置从模块 EPWM2 EPwm2Regs.TBPRD 100; // 周期必须与主模块一致 EPwm2Regs.TBPHS.bit.TBPHS 33; // 设置120度相位偏移近似值 EPwm2Regs.TBCTL.bit.CTRMODE TB_COUNT_UPDOWN; EPwm2Regs.TBCTL.bit.PHSEN TB_ENABLE; // 使能相位加载 EPwm2Regs.TBCTL.bit.PRDLD TB_SHADOW; EPwm2Regs.TBCTL.bit.SYNCOSEL TB_SYNC_IN; // 同步信号直通输入 EPwm2Regs.TBCTL.bit.PHSDIR TB_DOWN; // 关键加载相位后先向下计数以保持波形对称 // ... CMPA, AQCTLA 等配置与EPWM1类似 // 配置从模块 EPWM3 EPwm3Regs.TBPRD 100; EPwm3Regs.TBPHS.bit.TBPHS 67; EPwm3Regs.TBCTL.bit.CTRMODE TB_COUNT_UPDOWN; EPwm3Regs.TBCTL.bit.PHSEN TB_ENABLE; EPwm3Regs.TBCTL.bit.SYNCOSEL TB_SYNC_IN; EPwm3Regs.TBCTL.bit.PHSDIR TB_DOWN; // 同样设置为 DOWN // ... 其他配置 // 配置死区根据选用的MOSFET驱动芯片和MOSFET开关特性设置 EPwm1Regs.DBCTL.bit.OUT_MODE DB_FULL_ENABLE; EPwm1Regs.DBCTL.bit.POLSEL DB_ACTV_HIC; // 假设上管高有效下管低有效 EPwm1Regs.DBFED 10; // 下降沿延迟100ns (10 * 10ns) EPwm1Regs.DBRED 10; // 上升沿延迟100ns // EPWM2, EPWM3 死区配置相同 // 使能PWM输出 EPwm1Regs.AQCSFRC.bit.CSFA AQ_NO_ACTION; // 确保输出不受软件强制影响 EPwm2Regs.AQCSFRC.bit.CSFA AQ_NO_ACTION; EPwm3Regs.AQCSFRC.bit.CSFA AQ_NO_ACTION;闭环控制集成 上述配置产生了固定相位差的三路PWM。在实际系统中你需要通过ADC采样输出电压和每相电感电流运行数字PID控制器通常在PWM周期中点或谷底点触发ADC采样中断在中断服务程序中计算新的占空比并更新CMPA寄存器的影子寄存器值。由于三相交错三路的电流环可能需要独立调节或采用均流控制。eHRPWM的同步机制确保了无论控制算法如何更新CMPA值三路PWM的相位关系始终由硬件精确维持大大减轻了软件时序管理的负担。通过这个案例可以看到eHRPWM的主从同步和相位控制功能将复杂的多相时序问题从软件中剥离交由硬件可靠地执行。工程师只需关注核心的控制算法和功率级设计从而能够开发出更高性能、更可靠的数字电源系统。