📌 以 TMS320F28377S 为例
在使用 DSP28377S 进行多路 ePWM 同步控制时,很多人容易踩坑。这里总结几个关键点,尤其适用于多模块同步、移相控制等场景。
✅ 一、必须先开启 PWM 外设时钟
在系统初始化阶段,一定要确认 ePWM 模块时钟已经开启。

对应函数路径:
InitSysCtrl(); └── InitPeripheralClocks();
在 InitPeripheralClocks() 中:
-
赋值为
1→ 对应 PWM 模块时钟开启 -
赋值为
0→ 对应 PWM 模块时钟关闭
⚠️ 如果忘记开启时钟,后续所有 PWM 配置都会"无效",但程序不会报错,非常容易误判。
✅ 二、ePWM 同步链路结构必须搞清楚
在 TMS320F28377S 中,同步信号并不是所有 PWM 共用一条总线,而是分组的。

📌 同步分组关系:
-
EPWM7 / EPWM8 / EPWM9 → 共用一个同步链
-
EPWM10 / EPWM11 / EPWM12 → 共用一个同步链
⚠️ 特别注意:
虽然 EPWM7 的同步信号可以传递到 EPWM10 ,
但 不能直接传递到 EPWM11!
👉 EPWM11 的同步源仍然来自 EPWM10
👉 EPWM12 的同步源来自 EPWM11
也就是说:
如果你要使用 EPWM11 的相位寄存器(TBPHS),
必须先使能 EPWM10 的同步输出。
否则 EPWM11 根本接收不到同步信号。
✅ 三、EPWM10 & EPWM11 正确同步配置示例
假设我们希望:
-
EPWM10 作为主模块
-
EPWM11 作为从模块(移相)
🔹 EPWM10(主模块)配置
EPwm10Regs.TBCTL.bit.PHSEN = TB_DISABLE; // 禁止相位加载 → 主模块 EPwm10Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; // 计数到0时发出同步信号
说明:
-
PHSEN = DISABLE→ 表示本模块作为同步源 -
SYNCOSEL = ZERO→ 在计数器清零时产生同步脉冲
🔹 EPWM11(从模块)配置
EPwm11Regs.TBCTL.bit.PHSEN = TB_ENABLE; // 允许相位加载 → 从模块 EPwm11Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; // 接收同步信号
说明:
-
PHSEN = ENABLE→ 允许加载 TBPHS,相位生效 -
SYNCOSEL = IN→ 同步信号来自 EPWM10
🔥 四、常见踩坑总结
✔ 没开 PWM 时钟
✔ 主模块没有打开同步输出
✔ 从模块 PHSEN 没使能
✔ 同步链路理解错误(以为所有 PWM 都是同一条同步链)
✔ 相位寄存器写了但没生效(本质是没收到同步信号)
🎯 小结
在 DSP28377S 多 PWM 同步配置中:
先确认时钟 → 再确认同步链路 → 再确认主从关系 → 最后确认 PHSEN
同步链路搞错,是最常见也是最隐蔽的问题。