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.

[参考译文] TMS320F28377D:在递增/递减计数模式下、ePWM 计时器处于启动状态

Guru**** 2562120 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/638391/tms320f28377d-epwm-timer-direction-at-start-in-up-down-counting-mode

器件型号:TMS320F28377D

你好!

在递增/递减计数模式下、是否有一种简单的方法来开始 ePWM 定时器递减计数? 我知道、计时器运行后、可以通过相位控制来实现它、但我更希望从一开始就具有适当的相位关系。

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

    我认为、实现这一目标的唯一方法是使用您所提到的相位控制。 您可以使用相位控制并在配置结束时使用强制软件同步来加载相位值。

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

    是的、您只能通过相位控制机制来设置方向。 但是、SW 同步强制仅在计数器运行时起作用、如果在初始化时执行此操作、则必须启动计时器、SW 强制同步事件、然后停止计时器。

    对于其他任何人来说、这是我的解决方案:

    /*********
    *设置 PWM 计时器方向-仅在计时器停止时才能正常工作
    * arg1:定时器结构的地址(例如 EPwm1Regs)
    * arg2:时间的调整(TB_UP=0x1或 TB_DOWN=0x0)
    秘书长的报告 /

    void pwm_timer_set_dir (volatile struct ePWM_regs * pwm_module、unsigned int dir)

       //存储计时器上下文
       uint16 tmr_CTR = PWM_MODULE->TBCTR;
       uint16 tmr_ctl = PWM_MODULE->TBCTL.ALL;
       uint32 tmr_pHS = PWM_MODULE->TBPHS.ALL;

       //在中间设置计数器,以防止对零或周期事件进行三角运算
       PWM_MODULE->TBCTR = PWM_MODULE->TBPRD * 0.5;
       PWM_MODULE->TBPHS.bit.TBPHS = PWM_MODULE->TBPRD * 0.5;

       //将方向设置为递增计数模式
       if (dir =TB_UP)
       {
           PWM_MODULE->TBCTL.bit.PHSEN = TB_ENABLE;
           PWM_MODULE->TBCTL.bit.PHSDIR = TB_UP;
           PWM_MODULE->TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
           PWM_MODULE->TBCTL.bit.SWFSYNC = 1;
           PWM_MODULE->TBCTL.bit.CTRMODE = TB_FREEZE;
           PWM_MODULE->TBCTL.bit.PHSEN = TB_DISABLE;
       }
       //在递减计数模式中设置方向
       if (dir =TB_DOWN)
       {
           PWM_MODULE->TBCTL.bit.PHSEN = TB_ENABLE;
           PWM_MODULE->TBCTL.bit.PHSDIR = TB_DOWN;
           PWM_MODULE->TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
           PWM_MODULE->TBCTL.bit.SWFSYNC = 1;
           PWM_MODULE->TBCTL.bit.CTRMODE = TB_FREEZE;
           PWM_MODULE->TBCTL.bit.PHSEN = TB_DISABLE;
       }
       //恢复计时器上下文
       PWM_MODULE->TBCTR = tmr_CTR;
       PWM_MODULE->TBCTL.ALL = tmr_ctl;
       PWM_MODULE->TBPHS.ALL = tmr_PHS;