This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS320F28379D:如何使两个 ePWM 通道不同步? 如何解决?

Guru**** 2563530 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1257156/tms320f28379d-how-do-two-epwm-channels-get-out-of-sync-and-how-to-resolve

器件型号:TMS320F28379D

我使用 EPWM1和 EPWM4。

EPWM1以160kHz 的频率运行

EPWM4的运行频率为10kHz

我从这两者触发 ADC 转换。  对于 EPWM1、我每触发8个事件计数一次、因此对于每个 EPWM4触发的转换、我应该看到2个 EPWM1触发的转换

我有针对两个通道转换结束中断的 ISR。  出于调试目的、我在 ISR 中切换 GPIO、以便可以在逻辑分析仪上看到 ADC ISR 执行的时序。

我在启动期间同时启动两个 ePWM:

  1. SYSCTL_disablePeripheral (SYSCTL_Periph_CLK_TBCLKSYNC);
  2. 配置 EPWM4
  3. 配置 EPWM1
  4. SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_TBCLKSYNC);

由于 EPWM1的频率是 EPWM4的倍数、ePWM 通道应保持同步、因为它们都基于同一个 PWM CLK。  我应该看到用于 EPWM1/ADC 转换的 GPIO 在与 EPWM4/ADC 的 GPIO 一致的偏移处进行切换。


我观察到的是 GPIO PWM 通道看起来不同步。  这也不是慢漂移。   


例如、我在某个时刻捕获该值:

然后我在几秒钟后捕获它:

您可以看到 EPWM4 ISR 位于第一次捕获中每个其他脉冲之间。  在第二次捕获时、EPWM4 ISR 与 EPWM1 ISR 对齐。

这是否正常?  我剥掉了项目的基本例子,我看到了这种行为。  CPU 正常空闲、ISR 只清除标志并返回。  所以这不应是高 CPU 使用率和/或资源冲突的结果。   


对于28379D、我看到有一个功能是使用 EPWM1 OUT 来同步到 EPWM4的输入。  此问题足以解决这个问题吗?或者我是否看到另一个需要检查的问题?

如果可以使用同步功能...EPWM4用作电机控制的相位。  是否存在使用 EPWM1作为同步源而使 EPWM4增加一些小波动的问题?

谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    再考虑一下这一点、在本例中、SYNC 选项可能不起作用、因为 EPWM1具有比 EPWM4更高的频率。  在 EPWM4接近其 TBPRD 计数之前、来自 EPWM1的 SyncOut 将不断复位 EPWM4。  我的理解是否正确?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mark:

    如果您可以在 ePWM1和 ePWM4之间切换配置、则您会希望主(主)同步模块的频率比辅助(从)模块的频率低。

    请进一步思考这一点,同步选项在我的案例中可能不起作用,因为 EPWM1的频率高于 EPWM4。  在 EPWM4接近其 TBPRD 计数之前、来自 EPWM1的 SyncOut 将不断复位 EPWM4。  我的理解是否正确?

    是的、您回答正确!

    下面这个主题可以帮助解释: https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/796620/tms320f28335-epwm-sync-with-different-frequency

    您可以执行的另一项工作是、如果您要使用 ePWM4来同步 ePWM1、则可以将 SyncOut 路由为 EXTSYNCOUT 信号、如图所示。

    然后使用 outputtxbar 将此 EXTSYNCOUT 信号路由到 GPIO。 然后、您可以配置 INPUTXBAR5、以获取 ePWM1的 EXTSYNCIN。

    不过、如果可以、交换 ePWM 配置似乎更容易。

    为回应 ISR 似乎不同步的原因,您是否在设置 TBCLKSYNC 或调用 SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_TBCLKSYNC)之前调用 device_init ();函数?

    如果是、有一个 函数也启用了 GTBCLKSYNC、如果这被调用、则在配置 ePWM 之前、您的时钟已经开始运行。 在 再次启动 TBCLK 时、调用 GTBCLKSYNC 然后禁用 TBCLKSYNC 的结果将导致 TBCTR 不同步。  进行双重检查以确保在配置 ePWM 模块之前未启用 GTBCLKSYNC。

    此致!

    马瑞安

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Ryan、

    仅供参考...我正在使用随附的 DeviceInit ()。  我没有看到任何与 GTBCLKSYNC 相关的设置。   

    遗憾的是、定制硬件不允许灵活地更改 ePWM 通道。

    奇怪的是,即使两个 EPWM 通道以一些随机同步开始,例如10 PWM 时钟, 10 PWM 时钟偏移没有保持.

    谢谢!

    e2e.ti.com/.../5488.device.c

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Mark:

    时钟偏移量可能无法保持、因为 TBCTR 会彼此不同、具体取决于您启动 TBCLKSYNC 并停止它的时间、然后在主代码中再次启动它、如下所示。

    device_init ()//开始 TBCLKSYNC

    SYSCTL_disablePeripheral (SYSCTL_Periph_CLK_TBCLKSYNC);//停止 TBCLKSYNC  

    配置 EPWM4

    配置 EPWM1

    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_TBCLKSYNC);//再次启动 TBCLK

    相反,如果在 ePWM 配置之前调用了 Device_Init (),我会在 Device_enableAllPeripheral(void) 函数中注释掉 SYSCTL_enablePeripheral(SYSCTL_Periph_CLK_TBCLKSYNC);。 只有在完成配置后、才能启动 ePWM CLKS。

    此致!

    马瑞安