工具与软件:
当 CTR = 0时、我们将 DSP1的 EPWM1模块配置为输出 SYNC 信号、这还用于同步另一个芯片(DSP2)的 EPWM1模块。
两个 DSP 芯片都使用向上和向下计数模式、TBPRD 寄存器都是2500。 在向上计数模式下、当 CTR = CMP 时、PWM 的输出设置为低电平、而 在向下计数模式下、当 CTR = CMP 时、输出为高电平。
启用 DSP2芯片的 TBPHS 重新加载、并将相移值 设置为10U 而不是零。
结果发现、当 DSP2的占空比非常小时、它突然输出一个异常正常高电平。 如下信号响应。
从上图可以看出、在中间位置的同步信号到达后、DSP2的 ePWM 计数寄存器应加载为10、并且相应的 TBCTR 应接近零。
理论上、此时的输出 PWM 占空比应约为0、但结果是占空比约为1的高电平 PWM
在论坛上有很多由相移导致的驱动器损耗类似问题、但它们都是在相移动态变化时发生的。
但在我的应用中、EPWM1模块的 TBPHS 值 在 DSP2中是固定的、为10U。
为什么会发生这种情况?
分析是否是因为如上图所示、假设 TBCMPA 寄存器此时可能为6、TBCTR 寄存器的数据在同步信号出现后将直接从4更新到10、并且上升沿的比较匹配会丢失。
因此、在下降沿的比较与 PWM 拉点匹配之前、才会拉低高电平、从而导致 PWM 高电平输出接近一个周期
我想知道这是不是原因?
测试已看到同步信号、该信号在每个周期都非常稳定、然后每个周期都会触发 DSP2的 EPWM1模块执行相移操作。
所以下次相移信号到来时、计数寄存器应该非常接近设定的 TBPHS 寄存器值? 这样就不能错过这场比赛。
在一个 PWM 周期之后、TBCTR 与理论值有多大差异? 理论上、如果晶体时钟非常稳定、在同步相移操作之后、每次相移信号出现时、计数寄存器的数据和相移寄存器的数据都是相同的。