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.

[参考译文] TMS320F280049C:ePWM 同步

Guru**** 2465890 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/709356/tms320f280049c-epwm-syncing

器件型号:TMS320F280049C

你(们)好

我想知道是否可以 根据另一个 ePWM 的操作(不是基于相位控制寄存器或 ePWMxSYNC 信号)同步一个 ePWM 模块。 例如、当 ePWM1A 变为 LO 时、将 ePWM2A 设置为 HI。 原因是- ePWM1是主器件、其配置周期性变化、A 和 B 都与高电平有效互补、 并由类似于峰值电流模式控制的外部信号终止。 然后 、当  ePWM1终止时、我希望与 ePWM2同步。 我不能只使用 ePWM1周期来在零、CMPB 等上生成 SYNC 信号、因为终止时间不是在内部预定义的。

我可以在 ePWM2内复制配置、但我希望有一种更简单的方法来实现、因为 ePWM1的设置使用大量外设、并且会产生大量重复、我希望避免这种情况。

谢谢

EPWMxSYNC

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

    遗憾的是、从我对您问题的理解来看、我们的硬件中没有内置此代码、但在使用 drivelib 和 bitfield 时、就软件而言、您可以轻松避免使用重复代码。

    在代码中需要复制 EPWM1和 EPWM2配置的位置、可以编写如下所示的函数:

    void initEPWM (uint32_t ePWM_base)
    {
    //
    //设置 TBCLK
    //
    ePWM_setTimeBasePeriod (ePWM_base、EPWM1_TIMER_TBPRD);
    ePWM_setPhaseShift (ePWM_base、0U);
    ePWM_setTimeBaseCounter (ePWM_base、0U);
    ...
    } 

    或者对于位字段、您可以执行以下操作:

    volatile struct ePWM_regs * ePWM[PWM_CH]=
    {&EPwm1Regs、&EPwm1Regs、&EPwm2Regs、&EPwm3Regs、&EPwm4Regs、 EPwm5Regs、
    &EPwm6Regs、&EPwm7Regs、&EPwm8Regs};
    
    void InitEPwm ()
    {
    for (j=1;j <
    

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