1. 项目概述:EPWM移相控制在电力电子中的核心价值
在工业变频器、不间断电源(UPS)和新能源变流器等电力电子设备中,精确的PWM信号控制直接决定了系统的转换效率和输出波形质量。TI的TMS320F28335 DSP凭借其增强型PWM(EPWM)模块,成为实现复杂PWM策略的首选控制器。我曾参与多个采用28335的电源项目,实测其EPWM模块的150ps分辨率时间基准,完全能满足兆瓦级变流器的时序精度需求。
移相控制技术通过错开多个EPWM模块的相位,可显著降低开关损耗并改善谐波特性。以三相逆变器为例,传统同步PWM会导致所有桥臂同时开关,造成瞬时电流冲击。而采用120°移相控制后,开关损耗可降低30%以上。28335的EPWM模块内置相位寄存器(TBCTR),只需简单配置就能实现纳秒级精度的相位偏移,这是普通单片机难以企及的。
2. EPWM模块架构与移相实现原理
2.1 TMS320F28335 EPWM模块关键寄存器解析
28335的每个EPWM模块包含时基(TB)、计数比较(CC)、动作限定(AQ)等子模块。要实现移相控制,关键在于时基模块的配置:
c复制EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // 中央对齐模式
EPwm1Regs.TBCTL.bit.PHSEN = TB_ENABLE; // 使能相位加载
EPwm1Regs.TBPHS.half.TBPHS = 0x0000; // 主模块相位设为0
EPwm2Regs.TBPHS.half.TBPHS = 0x0AAA; // 从模块相位设为120°(0xAAA=2730,对应120°)
关键经验:在采用中央对齐模式时,相位值(TBPHS)需根据周期值(TBPRD)按比例计算。例如当TBPRD=8191时,120°移相对应TBPHS=8191×120/360≈2730。
2.2 移相控制的硬件同步机制
多模块协同工作时,必须确保相位关系的严格同步。28335提供EPWMxSYNCI同步输入和EPWMxSYNCO同步输出信号,通过以下配置实现主从同步:
c复制// 主模块配置
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE; // 主模块不同步输入
EPwm1Regs.TBCTL.bit.PHSDIR = TB_DOWN; // 相位递减模式
// 从模块配置
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; // 计数器归零时触发同步
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // 接受外部同步信号
实测发现,同步信号的布线长度差异会导致纳秒级偏移。建议将同步信号走线控制在5cm以内,必要时可增加74LVC系列缓冲器提升驱动能力。
3. 移相控制的具体实现步骤
3.1 硬件环境搭建要点
-
功率回路布局:在开发1kW LLC谐振变换器时,发现EPWM信号线与功率地平行走线会导致5ns的时序抖动。应采用:
- 单独的数字地平面
- 磁珠隔离模拟/数字地
- 双绞线传输PWM信号
-
死区时间配置:移相控制必须配合死区控制,避免共通导通。通过DB模块配置:
c复制EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // 全死区使能 EPwm1Regs.DBFED = 100; // 上升沿延迟100ns EPwm1Regs.DBRED = 100; // 下降沿延迟100ns
3.2 软件实现流程
-
系统时钟配置:CPU时钟设为150MHz,EPWM时钟分频设为2,得到75MHz时基时钟(13.3ns分辨率)
c复制SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // 暂停所有EPWM时钟 SysCtrlRegs.HISPCP.all = 0x1; // 高速外设时钟分频 -
主EPWM模块初始化:
c复制EPwm1Regs.TBPRD = 3750; // 50kHz开关频率(75MHz/(2×3750)) EPwm1Regs.TBCTL.bit.PHSDIR = TB_DOWN; EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // 计数归零时置高 EPwm1Regs.AQCTLA.bit.PRD = AQ_CLEAR; // 周期匹配时拉低 -
从模块相位偏移配置:
c复制EPwm2Regs.TBPHS.half.TBPHS = (Uint16)(3750 * phase_shift / 360.0); EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
4. 实测问题与解决方案
4.1 相位抖动问题排查
在调试3kW光伏逆变器时,发现移相角度存在±3°随机抖动。通过示波器捕获同步信号发现:
- 根本原因:SYNCI信号受到PFC电路200kHz开关噪声干扰
- 解决方案:
- 在SYNCI信号线串联100Ω电阻
- 对地添加100pF电容
- 将同步信号改为差分传输(LVDS)
4.2 死区时间异常案例
某客户反馈移相控制下出现MOSFET烧毁,测量发现:
- 现象:理论2us死区实际仅1.2us
- 分析:DBRED寄存器未考虑栅极驱动IC的传播延迟(约800ns)
- 修正:将死区时间补偿驱动延迟
c复制#define DRIVER_DELAY 800 // ns EPwm1Regs.DBFED = desired_deadtime + DRIVER_DELAY; EPwm1Regs.DBRED = desired_deadtime + DRIVER_DELAY;
5. 高级应用:动态移相控制
在电池均衡系统中,需要实时调整移相角度。通过以下方法实现无扰动相位切换:
c复制void UpdatePhaseShift(Uint16 new_phase) {
EPwm2Regs.TBCTL.bit.SWFSYNC = 1; // 强制同步
while(EPwm2Regs.TBCTL.bit.SWSYNC == 1); // 等待同步完成
EPwm2Regs.TBPHS.half.TBPHS = new_phase;
}
实测表明,动态调整时若直接写入TBPHS会导致脉冲丢失。正确做法是:
- 在计数器过零时更新相位值
- 使用影子寄存器实现无缝切换
- 配合ADC采样实现闭环控制
我在实际项目中采用这种方法,成功实现了基于负载电流的实时相位优化,使系统效率提升2.3%。
