
1. 项目概述与核心思路在电力电子和数字电源设计的实战中如何精准、高效地控制功率开关器件是决定整个系统性能、效率和可靠性的基石。德州仪器TI的TMS320F2802x系列微控制器凭借其强大的增强型脉宽调制器ePWM模块为工程师提供了实现复杂控制算法的硬件利器。今天我们不谈空泛的理论直接切入两个在工业界和消费电子中极具代表性的应用场景峰值电流模式控制的Buck变换器和H桥LLC谐振变换器并深入剖析其背后的ePWM配置逻辑。很多技术手册和教程会告诉你寄存器怎么配置但很少解释“为什么这么配”。比如为什么峰值电流模式要用数字比较DC子模块来触发Trip为什么LLC谐振变换器的ePWM配置里死区时间Dead-Band是固定的而控制变量却是频率这些“为什么”恰恰是打通理论与实战的关键。本文将基于TI官方文档提供的代码骨架为你拆解这两个经典案例的ePWM配置细节补充大量手册上不会写的设计考量、参数计算过程和调试心得目标是让你看完后不仅能“抄作业”更能理解其设计精髓并灵活应用到自己的项目中。2. 峰值电流模式控制Buck变换器的ePWM配置详解峰值电流模式控制Peak Current Mode Control, PCM因其内在的逐周期限流、对输入电压扰动响应快以及抑制变压器磁饱和等优点在中小功率DC-DC变换器中广泛应用。其核心思想是每个开关周期当电感电流的采样值达到给定的峰值电流参考值时立即关断主开关管。2.1 系统架构与信号流分析参考输入资料中的图3-68整个控制环路可以分解为以下几个关键部分电流采样与比较通过一个串联在功率回路中的采样电阻或使用霍尔传感器等获取电感电流信号I_sense。这个模拟信号被送入片内模拟比较器Comparator的正输入端。峰值电流参考比较器的负输入端连接一个参考电压。这个参考可以由片内可编程的10位DAC产生也可以由外部电路提供。它代表了当前周期允许的电感电流峰值I_ref。数字事件生成比较器的输出是一个数字信号高/低。当I_sense超过I_ref时比较器输出跳变为高。这个跳变被配置为ePWM模块中数字比较Digital Compare, DC子模块的一个事件源例如DCAEVT2。ePWM动作响应ePWM模块被配置为一旦检测到这个由电流超限产生的Trip事件就立即强制其输出如EPWM1A变为无效状态通常是低电平关断高侧开关管。这就是“逐周期Cycle-By-Cycle”保护机制。这种架构将快速的模拟比较纳秒级响应与灵活的数字配置相结合既保证了保护的实时性又可以通过软件动态调整I_ref来实现限流值调节、均流等功能。2.2 关键ePWM子模块配置解析下面我们结合输入资料中的Example 3-14代码片段逐行解读其配置意图和原理。2.2.1 时基子模块Time-Base, TB初始化EPwm1Regs.TBPRD 300; // 周期 300个TBCLK计数 EPwm1Regs.TBPHS.half.TBPHS 0; // 相位寄存器清零 EPwm1Regs.TBCTL.bit.CTRMODE TB_COUNT_UP; // 非对称模式仅向上计数 EPwm1Regs.TBCTL.bit.PHSEN TB_DISABLE; // 禁止相位加载 EPwm1Regs.TBCTL.bit.HSPCLKDIV TB_DIV1; // 高速时钟预分频 EPwm1Regs.TBCTL.bit.CLKDIV TB_DIV1; // 时基时钟预分频 EPwm1Regs.TBCTL.bit.PRDLD TB_SHADOW; // 周期寄存器使用影子寄存器模式TBPRD 300这是PWM开关频率的设定。假设系统时钟SYSCLKOUT60MHz且HSPCLKDIV和CLKDIV均为1则时基时钟TBCLK 60MHz。PWM周期T_sw (TBPRD 1) / TBCLK 301 / 60MHz ≈ 5.0167μs对应开关频率f_sw ≈ 199.3kHz。这里设置300是为了得到接近200kHz的频率。注意在向上计数模式下实际计数值从0到TBPRD所以总计数次数是TBPRD 1。CTRMODE TB_COUNT_UP选择向上计数模式。对于峰值电流控制占空比是由电流环实时决定的而不是由固定的CMPA/CMPB值决定因此通常使用简单的向上计数模式即可。输出动作主要在计数器为零ZRO和由数字比较事件触发时发生。PRDLD TB_SHADOW这是关键的安全配置。影子寄存器模式意味着你对TBPRD的写操作不会立即改变当前正在运行的PWM周期而是写入一个缓冲寄存器影子寄存器。只有当计数器归零TBCTR0时影子寄存器的值才会被加载到活跃寄存器中生效。这避免了在周期中间修改周期值可能导致的脉冲宽度异常甚至桥臂直通的风险。2.2.2 动作限定子模块Action-Qualifier, AQ基础配置EPwm1Regs.AQCTLA.bit.ZRO AQ_SET; // 在计数器为零时设置EPWM1A输出为高这行配置决定了PWM波的起始点。在每个PWM周期开始时TBCTR0EPWM1A输出被置为高电平开启主开关管。开关管何时关断则交给后面的数字比较事件来强制控制。2.2.3 数字比较与Trip子模块Digital Compare Trip, DC/TZ配置这是实现峰值电流关断的核心部分。// 定义基于比较器1输出的事件 EPwm1Regs.DCTRIPSEL.bit.DCAHCOMPSEL DC_COMP1OUT; // 将数字比较A高DCAH信号源选择为比较器1输出 EPwm1Regs.TZDCSEL.bit.DCAEVT2 TZ_DCAH_HI; // 将Trip事件DCAEVT2定义为DCAH信号变高 EPwm1Regs.DCACTL.bit.EVT2SRCSEL DC_EVT2; // DCAEVT2事件源就是它自己未经过滤波 EPwm1Regs.DCACTL.bit.EVT2FRCSYNCSEL DC_EVT_ASYNC; // 选择异步路径实现最快响应 // 启用DCAEVT2作为逐周期Trip源 EPwm1Regs.TZSEL.bit.DCAEVT2 1; // 配置当DCAEVT2事件发生时EPWM1A的输出动作 EPwm1Regs.TZCTL.bit.TZA TZ_FORCE_LO; // 强制EPWM1A输出低电平信号路由DCTRIPSEL寄存器将片内比较器1的物理输出映射到ePWM内部的数字比较信号DCAH上。事件定义TZDCSEL寄存器定义了什么条件会触发一个具体的Trip事件DCAEVT2。这里配置为当DCAH信号为高时即电流超限DCAEVT2事件生效。异步路径EVT2FRCSYNCSEL DC_EVT_ASYNC至关重要。它意味着DCAEVT2事件不需要与系统时钟SYSCLKOUT同步而是直接以异步方式触发保护动作。这极大地减少了从电流超限到PWM关断的延迟可能只有几十纳秒对于防止过流损坏至关重要。同步路径则会引入至少一个时钟周期的延迟。Trip类型与动作TZSEL寄存器使能DCAEVT2作为Trip源。TZCTL寄存器定义了发生Trip时输出引脚的行为。这里配置为强制拉低TZ_FORCE_LO立即关断开关管。DCAEVT2被配置为“逐周期”Trip意味着这个保护动作只影响当前PWM周期下一个周期开始时会自动复位PWM输出重新由AQ模块控制在ZRO事件置高。如果是“单次One-Shot”Trip则一旦触发ePWM输出将被永久锁存在故障状态直到软件手动清除。实操心得数字比较滤波的取舍代码中EVT2SRCSEL DC_EVT2意味着没有启用数字滤波。比较器输出可能因噪声产生毛刺导致误触发。在实际硬件中如果噪声较大可以考虑启用DC子模块的数字滤波器通过配置DCFCTL和DCFOFFSET/DCFVALUE寄存器对信号进行一定周期的滤波。但这会引入额外的延迟。设计时必须在抗噪声能力和响应速度之间做出权衡。通常建议在原型板上用示波器同时观察比较器输出和PWM信号确认没有误触发后再决定是否添加滤波。2.3 运行时的动态调整初始化完成后在软件控制循环如中断服务程序中我们可以动态调整峰值电流参考值// 调整比较器1负输入端的参考峰值电流 // 假设通过DAC设置或者更新外部参考电压 adjust_peak_current_reference(new_ref_value);通过改变DAC的输出值或外部参考电压可以实时调整限流点实现恒流控制、功率限制或负载共享等功能。3. H桥LLC谐振变换器的ePWM配置详解LLC谐振变换器以其能够在全负载范围内实现原边开关管的零电压开关ZVS和副边整流管的零电流开关ZCS而成为高效率、高功率密度电源的首选拓扑。H桥LLC进一步提升了功率处理能力。其控制特点是固定占空比约50%调节开关频率来改变增益从而稳定输出电压。3.1 控制目标与ePWM输出需求分析参考输入资料图3-70一个全桥H桥需要两对互补的PWM信号EPWM1A/1B和EPWM2A/2B假设使用两个ePWM模块来驱动四个开关管。每对信号之间需要插入死区时间Dead-Time以防止上下管直通。对于LLC我们通常控制的是开关频率即TBPRD寄存器的值。占空比保持50%即CMPA TBPRD / 2。此外为了优化效率需要确保死区时间足够让谐振腔完成ZVS换流但又不至于过长而增加损耗。图3-71展示了理想的PWM波形和相关事件EPWMxA和EPWMxB互补带有死区。在CNT CMPB即1/4周期和CNT 0周期开始时刻可以触发ADC采样以捕获谐振电流或输出电压的关键点信息。在CNT PRD周期结束时刻可以触发中断用于计算并更新下一个周期的开关频率TBPRD。3.2 单通道ePWM配置代码深度解析我们基于Example 3-15的代码进行拆解。这段代码配置了EPWM1A和EPWM1B作为一对互补输出。3.2.1 时基与比较寄存器配置EPwm1Regs.TBCTL.bit.PRDLD TB_IMMEDIATE; // 立即加载模式 EPwm1Regs.TBPRD period; // 设置PWM周期 EPwm1Regs.CMPA.half.CMPA period/2; // CMPA 周期/2 实现50%占空比 EPwm1Regs.CMPB period/4; // CMPB 周期/4 EPwm1Regs.TBPHS.half.TBPHS 0; // 相位设为0作为主模块 EPwm1Regs.TBCTR 0; // 计数器清零 EPwm1Regs.TBCTL.bit.CTRMODE TB_COUNT_UP; // 向上计数模式 EPwm1Regs.TBCTL.bit.PHSEN TB_DISABLE; // 禁止相位加载 EPwm1Regs.TBCTL.bit.SYNCOSEL TB_CTR_ZERO; // 同步输出选择为计数器归零时 EPwm1Regs.TBCTL.bit.HSPCLKDIV TB_DIV1; EPwm1Regs.TBCTL.bit.CLKDIV TB_DIV1;PRDLD TB_IMMEDIATE注意这里与峰值电流模式例子不同使用了立即加载模式。这是因为在频率控制中我们可能需要在每个周期都更新频率TBPRD。如果使用影子寄存器模式更新会在下一个周期生效可能引入一个周期的延迟。对于LLC这种变频控制有时需要更快的频率响应。但需警惕在计数器运行过程中直接写入TBPRD是危险的可能导致当前周期异常。更安全的做法是在计数器为0ZRO或为TBPRDPRD的瞬间通过中断或影子寄存器加载来更新。示例代码的“运行时”部分直接写TBPRD在实际应用中应结合中断在安全点更新。CMPA period/2, CMPB period/4CMPA用于生成50%占空比的主开关点。CMPB设置为period/4常用于在谐振电流的特定相位点触发ADC采样以获取电流过零或峰值信息用于实现更高级的控制如ZVS检测或电流保护。SYNCOSEL TB_CTR_ZERO将此ePWM模块的同步输出信号配置为在计数器归零时产生脉冲。这个脉冲可以输出给另一个ePWM模块如EPWM2的同步输入使两个模块完全同步工作这对于生成精确的180度相移对于全桥或半桥至关重要。3.2.2 动作限定器AQ配置生成互补基础波形EPwm1Regs.CMPCTL.bit.LOADAMODE CC_CTR_PRD; EPwm1Regs.CMPCTL.bit.LOADBMODE CC_CTR_PRD; EPwm1Regs.CMPCTL.bit.SHDWAMODE CC_SHADOW; EPwm1Regs.CMPCTL.bit.SHDWBMODE CC_SHADOW; EPwm1Regs.AQCTLA.bit.ZRO AQ_SET; // TBCTR0时 EPWM1A置高 EPwm1Regs.AQCTLA.bit.CAU AQ_CLEAR; // TBCTRCMPA且向上计数时 EPWM1A清零 EPwm1Regs.AQCTLB.bit.CAU AQ_SET; // TBCTRCMPA且向上计数时 EPWM1B置高 EPwm1Regs.AQCTLB.bit.PRD AQ_CLEAR; // TBCTRTBPRD时 EPWM1B清零影子寄存器配置CMPCTL设置CMPA和CMPB使用影子寄存器并在计数器等于周期值CTRPRD时加载。这保证了在一个PWM周期内比较值稳定不变。波形生成逻辑EPWM1A: 从0开始为高电平当计数器增长到CMPA值时变为低电平。由于CMPA period/2因此高电平时间为半个周期占空比50%。EPWM1B: 在计数器到达CMPA时即EPWM1A下降沿变为高电平在计数器到达TBPRD时周期结束变为低电平。这样EPWM1B的高电平时间也是半个周期但与EPWM1A正好互补。此时EPWM1A和EPWM1B是互补但没有死区的方波直接驱动会导致桥臂直通。3.2.3 死区子模块Dead-Band, DB配置EPwm1Regs.DBCTL.bit.IN_MODE DBA_ALL; // 死区输入源为EPWM1A EPwm1Regs.DBCTL.bit.OUT_MODE DB_FULL_ENABLE; // 完全使能死区生成 EPwm1Regs.DBCTL.bit.POLSEL DB_ACTV_HIC; // 输出模式高有效互补 EPwm1Regs.DBRED 30; // 上升沿延迟Rising Edge Delay EPwm1Regs.DBFED 30; // 下降沿延迟Falling Edge Delay死区模块是防止同桥臂上下管同时导通的关键。它接收原始的EPWMxA信号生成两路带有可调延迟的输出EPWMxA_DB和EPWMxB_DB。IN_MODE DBA_ALL表示死区模块以EPWM1A原始信号作为两路延迟的输入源。OUT_MODE DB_FULL_ENABLE使能死区生成功能输出EPWM1A_DB和EPWM1B_DB。POLSEL DB_ACTV_HIC选择“高有效互补”模式。这是最常用的模式之一。EPWM1A_DB是原始EPWM1A信号经过下降沿延迟FED和上升沿延迟RED后的结果。具体来说原始信号上升沿到来时EPWM1A_DB会延迟RED个TBCLK后才变高原始信号下降沿到来时EPWM1A_DB会立即变低。EPWM1B_DB是原始EPWM1A信号取反后再经过上升沿延迟RED和下降沿延迟FED的结果。即原始信号下降沿对应EPWM1B_DB的上升沿会延迟RED后变高原始信号上升沿对应EPWM1B_DB的下降沿会延迟FED后变低。DBRED DBFED 30设置延迟时间。假设TBCLK 60MHz则每个计数对应1/60MHz ≈ 16.67ns。30个计数对应的死区时间约为30 * 16.67ns 500ns。示例中提到“死区保持恒定为300ns”这里设置500ns可能是基于更保守的设计或不同的时钟配置。死区时间的选择至关重要必须大于功率MOSFET的关断延迟与导通延迟之差并留有一定裕量以确保在下一个管子开通前上一个管子已完全关断。对于LLC还需考虑谐振腔电为开关管结电容放电所需的时间以实现ZVS。3.2.4 故障保护与高分辨率配置// 配置TZ1用于短路保护 EPwm1Regs.TZSEL.bit.OSHT1 1; // 使能TZ1为单次Trip源 EPwm1Regs.TZCTL.bit.TZA TZ_FORCE_LO; EPwm1Regs.TZCTL.bit.TZB TZ_FORCE_LO; // 故障时强制两路输出为低 EPwm1Regs.TZEINT.bit.OST 1; // 使能单次Trip中断 // 高分辨率配置如果模块支持 EPwm1Regs.HRCNFG.all 0x0; EPwm1Regs.HRCNFG.bit.EDGMODE HR_FEP; // 在下降沿应用高分辨率 EPwm1Regs.HRCNFG.bit.CTLMODE HR_CMP; // 高分辨率控制基于CMPAHR EPwm1Regs.HRCNFG.bit.HRLOAD HR_CTR_PRD; // 在CTRPRD时加载高分辨率影子寄存器故障保护Trip-Zone, TZ这里配置了外部引脚TZ1作为单次One-Shot故障源。当TZ1信号有效时例如由硬件过流比较器驱动ePWM输出将被强制拉低并锁存直到软件干预。同时使能中断让CPU能及时处理故障。高分辨率PWMHRPWM部分ePWM模块支持高分辨率模式通过微调PWM边沿的位置精度可达皮秒级可以极大地改善输出电压纹波和频率控制精度。配置中指定了高分辨率应用于下降沿HR_FEP由CMPAHR寄存器控制并在周期结束时加载影子寄存器。这对于需要极高频率分辨率或电压精度的LLC应用非常有价值。3.3 多模块同步与频率控制实现对于H桥LLC需要两个ePWM模块如EPWM1和EPWM2产生相位差180度的两对PWM波。主从同步将EPWM1配置为主模块SYNCOSEL TB_CTR_ZERO其同步输出EPWM1SYNCO连接到EPWM2的同步输入EPWM2SYNCI。在EPWM2中使能相位加载PHSEN TB_ENABLE并设置相位寄存器TBPHS为EPWM1.TBPRD / 2。这样每当EPWM1计数器归零时EPWM2的计数器被加载为TBPRD/2的值从而实现两路PWM波180度相移。频率调节在运行过程中通过控制算法通常是电压环PID输出计算出所需的开关频率并转换为TBPRD值。安全的更新时机是在一个PWM周期结束CTRPRD或开始CTR0的时刻在相应的中断服务程序中更新TBPRD、CMPA和CMPB的影子寄存器。示例中“运行时”部分的直接赋值EPwm1Regs.TBPRD period_new_value;需谨慎使用最好在中断中且确保计数器处于安全点。4. 核心寄存器功能速查与配置陷阱为了便于查阅我将两个案例中涉及的核心寄存器关键位整理如下。理解这些位的功能是灵活配置ePWM的基础。4.1 时基控制寄存器TBCTL关键位位域名称常用设置功能描述CTRMODE计数模式TB_COUNT_UP(00)向上计数模式用于非对称PWM生成。PHSEN相位加载使能TB_DISABLE(0) /TB_ENABLE(1)禁止/使能从TBPHS寄存器加载计数器值。从模块需使能。PRDLD周期加载模式TB_SHADOW(0) /TB_IMMEDIATE(1)安全关键。影子模式在CTR0时加载避免周期中更改立即模式直接生效需谨慎使用。SYNCOSEL同步输出选择TB_CTR_ZERO(01)选择在计数器归零时产生同步输出脉冲用于同步其他ePWM模块。4.2 动作限定器控制寄存器AQCTLA/AQCTLB事件事件触发条件典型动作ZROTBCTR 0x0000AQ_SET: 常用于周期开始时刻开启开关管。PRDTBCTR TBPRDAQ_CLEAR或AQ_TOGGLE: 用于对称PWM或周期结束动作。CAU/CADTBCTR CMPA且向上/向下计数AQ_CLEAR/AQ_SET: 用于生成非对称PWM的边沿。CBU/CBDTBCTR CMPB且向上/向下计数AQ_SET/AQ_CLEAR或用于触发ADC。4.3 数字比较与故障保护关键配置寄存器/位域配置项在峰值电流模式中的作用在LLC保护中的作用DCTRIPSEL.DCAHCOMPSEL选择数字比较信号源选择片内比较器输出作为电流超限信号。可配置为连接外部过流、过压比较器。TZDCSEL.DCAEVT2定义Trip事件条件定义为DCAH变高电流超限。可定义为各种故障信号有效。DCACTL.EVT2FRCSYNCSEL事件强制同步选择必须设为DC_EVT_ASYNC以实现最快保护。根据故障响应速度要求选择同步或异步。TZSEL.DCAEVT2使能Trip源使能逐周期CBCTrip。通常使能单次OSHTTrip进行锁存保护。TZCTL.TZA/TZBTrip时输出动作设为TZ_FORCE_LO立即关断。设为TZ_FORCE_LO或TZ_FORCE_HI取决于有效电平。4.4 常见配置陷阱与调试心得影子寄存器 vs 立即写入这是新手最容易出错的地方。对于周期TBPRD和比较值CMPA/CMPB在大多数闭环控制应用中务必使用影子寄存器模式PRDLD0,SHDWAMODE0。在中断中更新影子寄存器由硬件在CTR0或CTRPRD时自动加载可以绝对避免产生畸变的PWM脉冲。立即写入模式仅用于初始化或对实时性要求极端苛刻且能确保写入时机的场景。死区时间计算错误死区时间T_dead (DBRED 或 DBFED) * T_tbclk。务必根据实际的SYSCLKOUT和HSPCLKDIV/CLKDIV分频设置准确计算T_tbclk。用示波器测量驱动波形验证死区时间是否与设计一致。同步信号丢失在多模块系统中如果从模块的PWM输出相位不对首先检查主模块SYNCOSEL是否配置正确并输出同步脉冲从模块的PHSEN是否使能从模块的TBPHS值是否正确物理连接是否正常可以使用GPIO模拟同步信号进行排查。Trip保护不动作如果过流了但ePWM没有关断请按信号流排查模拟比较器输出是否正常跳变DCTRIPSEL配置是否正确映射到了ePWM内部TZDCSEL定义的事件极性是否正确TZSEL是否使能了对应的Trip源TZCTL配置的输出动作是否符合预期务必使用示波器同时抓取比较器输出和PWM输出进行验证。LLC频率调节不稳定直接暴力更新TBPRD会导致频率阶跃可能引发谐振腔暂态冲击。更平滑的做法是在中断中计算出的新TBPRD值不要一次性写入而是采用“小步快跑”的方式每个周期增减一个很小的值逐步逼近目标频率。同时CMPA和CMPB必须随TBPRD按比例更新CMPA TBPRD/2,CMPB TBPRD/4以保持50%占空比和固定的采样点相位。5. 从理论到实践项目集成与测试建议当你理解了单个ePWM模块的配置后将其集成到完整的数字电源控制系统中还需要考虑更多因素。系统时钟与预分频确保SYSCLKOUT、HSPCLKDIV、CLKDIV的设置能为你提供所需的TBCLK分辨率。例如对于200kHz的开关频率TBPRD最好在500-2000之间以保证频率调节有足够的分辨率。TBCLK周期决定了最小死区时间和高分辨率PWM的精度。中断服务程序ISR设计LLC控制通常需要一个高频的ISR例如开关频率的2倍或4倍。在这个ISR中你需要读取ADC结果输出电压、输出电流、谐振电流等。运行控制算法如电压环PID计算出新的开关频率TBPRD_new。安全地更新TBPRD、CMPA、CMPB的影子寄存器。清除中断标志。ADC触发与ePWM事件联动充分利用ePWM的事件触发ADC采样。例如在LLC中在CTRCMPB谐振电流峰值或谷值点和CTR0周期开始触发ADC可以捕获到最关键的系统状态信息实现更精确的闭环控制。这通过配置ETSEL和ETPS寄存器来完成。调试流程静态测试先不接功率电路让MCU运行配置程序。用示波器或逻辑分析仪观察ePWM输出引脚验证基础波形频率、占空比、死区、互补关系是否正确。开环测试接入功率电路但控制环路开环。给定一个固定的TBPRD用示波器观察主功率波形开关管Vds、谐振电流、输出电压验证电路工作是否正常死区是否足够。闭环调试先调试保护环如峰值电流保护。模拟一个过流条件确认ePWM能否正确、快速地关断。然后再逐步引入电压环、电流环等控制算法。动态测试测试负载阶跃、输入电压阶跃下的系统响应调整控制参数优化动态性能。最后再分享一个我个人的小技巧在项目初期可以编写一个简单的ePWM配置验证函数通过串口命令行或按键动态修改TBPRD、CMPA、DBRED等参数并实时观察波形变化。这能极大地加深你对每个寄存器位功能的理解比单纯读手册要有效得多。电力电子是理论与实践紧密结合的领域多动手、多测量、多思考这些ePWM的配置细节就会从枯燥的寄存器位变成你手中构建高效、可靠电源系统的得力工具。