DSP 多个 PWM 同步总出问题?28377S 同步链路和主从配置一次讲清!

📌 以 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

同步链路搞错,是最常见也是最隐蔽的问题。

相关推荐
大爱编程♡10 小时前
GPIO-I2C
stm32·单片机·嵌入式硬件
振南的单片机世界11 小时前
PVD掉电中断——让单片机“咽气前”写完遗书
arm开发·stm32·单片机·嵌入式硬件
续写烂尾14 小时前
SD NAND存储实测:正点原子STM32精英板SDIO读写验证全流程
stm32·单片机·嵌入式硬件
zlinear数据采集卡16 小时前
USB HS 480M高速传输与SRAM记录仪:DABM-D223数据存储系统全解析
arm开发·嵌入式硬件·fpga开发·开源
wuyk55516 小时前
1.栈:后进先出的线性数据结构
c语言·数据结构·stm32·单片机
Crkylin17 小时前
Cortex-M SysTick系统滴答定时器详解
单片机·嵌入式硬件
Hello_Damon_Nikola17 小时前
AC7911从入门到精通
开发语言·嵌入式硬件·物联网·php
gscsded18 小时前
AUTOSAR CanTp 模块学习笔记
单片机·嵌入式硬件·汽车
Hello_Damon_Nikola18 小时前
扰流筋从原理到应用
人工智能·单片机·嵌入式硬件
某林21218 小时前
从“仿真能跑”到“真机能走”:一套轮腿机械狗强化学习系统的工程化实践
人工智能·stm32·嵌入式硬件·架构·机器人·机械狗