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.

TMS320F28034 Time-Base Period Shadow 及 Time-Base Counter Synchronization 配合问题

使能 EPWM1 EPWM2同步

使能 TB的Shadow  

The TBPRD shadow register is enabled when TBCTL[PRDLD] = 0. Reads from and writes to the
TBPRD memory address go to the shadow register. The shadow register contents are transferred to
the active register (TBPRD (Active) ← TBPRD (shadow)) when the time-base counter equals zero
(TBCTR = 0x0000). By default the TBPRD shadow register is enabled.

EPwm1Regs.TBCTL.bit.FREE_SOFT=TB_FREEZE;
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;

EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;

EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; 

EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE;
EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; 

EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm2Regs.TBPHS.half.TBPHS = 3;
EPwm2Regs.TBCTR = 0;

在程序运行过程,我要动态修改 EPWM1 EPMW2的频率(TBPRD),且这两个频率相等。

这样的配置,有没有可能 EPWM2  TBCTR由于加载 TBPHS,导致TBCTR 一直不能计数到0

所以不能加载 TBPRD的 TBPRD (Active) ← TBPRD (shadow)

  • 请问目前运行的结果怎么样?
  • 当同步发生时,TBPHS被加载到TBCTR中。在某些情况下,这肯定会导致TBCTR永远不会达到零。
    如果使用不同频率的PWM进行周期性同步,则必须始终以较慢的PWM为主,以避免同步问题。
    因为pwm的频率是相同的,所以除了第一个周期之外,不应该出现这种问题。在相位偏移施加一次之后,第二次PWM将正确地引导或滞后另一个周期。当同步脉冲到来时,它只需将相同的值加载到TBCTR的每个周期。
    如果改变两个pwm之间的相位关系,这种关系又会变得更加复杂。简而言之,你应该能够避免你所描述的问题。