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.

TMS320F28374S: 关于PWM相移同步后的加减计数方向设置

Part Number: TMS320F28374S

想请教一下关于EPWM模块之间的相移同步之后的增减计数问题。

关于这个问题,芯片手册上写的很清楚:对于PWM的增减计数模式,同步后的计数器是增计数还是减计数,由TBCTL->PHSDIR决定,为0表示减计数,反之则为增计数。

现在遇到的问题是,我想使用EPWM7的计数器过零来产生同步信号,来触发EPWM8的相移操作,为此对EPWM8进行如下配置:

EPWM_setTimeBasePeriod(EPWM8_BASE, 500);
EPWM_setTimeBaseCounter(EPWM8_BASE, 0);
EPWM_setTimeBaseCounterMode(EPWM8_BASE, EPWM_COUNTER_MODE_UP_DOWN);

EPWM_enablePhaseShiftLoad(EPWM8_BASE);
EPWM_setPhaseShift(EPWM8_BASE, 300);
EPWM_setCountModeAfterSync(EPWM8_BASE,EPWM_COUNT_MODE_UP_AFTER_SYNC);
EPWM_setSyncOutPulseMode(EPWM8_BASE, EPWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);

如上配置应该比较简单清晰。但测试的时候,读取EPWM8的周期寄存器和计数寄存器的数据,如下:

可以看到,周期寄存器数据是500,正如所配置的

但计数寄存器的数据达到了870,都超过了周期寄存器的数据,这是为何呢?而且这种情况下EPWM8的输出始终是低电平

但是把增减计数的设置去掉,或者修改为减计数 EPWM_setCountModeAfterSync(EPWM8_BASE,EPWM_COUNT_MODE_DOWN_AFTER_SYNC), 计数器数据又正常了,且PWM输出也正常了

想请教下这是什么原因导致的呢?

  • 你好,我查看下相关资料,稍后回复您。

  • 您好,请问这个有进展吗?

  • 我咨询下相关资深工程师后回复您。

  • 您是否在运行操作期间更新了 TBCTR?您是否在运行时使用公式更新 TBPHS?

    一种理论是,当SYNC事件发生时,您的PWM可能会将TBPHS设置为大于TBPRD的值。

  • 感谢回复!

    TBPHS的数值设定好了后就没有再修改,TBCTR的值会被TBPHS重新装载,其他情况下没有动态修改TBCTR的数值。

    我再仔细检查是否会受到其他模块的干扰,EPWM8这个配置是不会出现TBPHS设置为大于TBPRD的值,但其他模块可能会有这方面的问题,需要在核对下。

    想请问下,如果出现了TBPHS设置为大于TBPRD的值,会有什么异常吗?

    另外,增减计数模式下,周期寄存器设置为500,如果我想将TBPHS也设置为500,那么此时的同步后计数方向是设置为增计数还是减计数会有影响吗?

    更进一步,如果我将TBPHS设置为超过周期寄存器的数据,且同步后的计数方向为递增,会出现什么现象呢?

    在芯片手册上给出了当比较寄存器超过周期寄存器的情况,但未给出计数寄存器超过周期寄存器的情况。

  • 是的,如果 TBPHS 设置为大于 TBPRD 的值,则 TBCTR 将永远不会达到 TBPRD。同步事件将导致 TBCTR 设置为您选择的任何值。然后 TBCTR 将开始递增。

    另外,增减计数模式下,周期寄存器设置为500,如果我想将TBPHS也设置为500,那么此时的同步后计数方向是设置为增计数还是减计数会有影响吗?

    这是在 TBCTL[PHSDIR] 内处理的,它将指示 TBCTR 在同步后计数的方向。这实际上不会影响同步后的计数方向设置为向上计数还是向下计数。

    更进一步,如果我将TBPHS设置为超过周期寄存器的数据,且同步后的计数方向为递增,会出现什么现象呢?

    TBCTR 将递增,直到发生同步事件将其设置回 TBPHS 值。

  • 感谢您的回复!