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.

[参考译文] TMS320F28P650DK:TMS320F28P650DK9:ePWM 事件触发错误

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1311669/tms320f28p650dk-tms320f28p650dk9-epwm-event-triggering-error

器件型号:TMS320F28P650DK

您好、TI 团队、

     ePWM 周期 TB 计数值配置为12500、而 ePWM 事件触发源配置为 TB 计数为0或 周期值。 然而, 中断的 TBCTR 计数是2,188,7251,11732,58,12468,12467该1117该如何58,124如何处理68,124处理?

以下是 ePWM 配置代码:

EPWM_setClockPrescaler (EPWM1_base、EPWM_CLOCK_DIVIDER _1、EPWM_HSCLOCK 分频器_1);
  EPWM_setTimeBasePeriod (EPWM1_BASE、(PwmPrdCountNum);
  EPWM_disablePhaseShiftLoad (EPWM1_BASE);
  EPWM_setPhaseShift (EPWM1_BASE、0);
  EPWM_setTimeBaseCounterMode (EPWM1_BASE、EPWM_COUNTER_MODE_UP_DOWN);
  EPWM_setTimeBaseCounter (EPWM1_BASE、0u);
  EPWM_setCounterCompareValue (EPWM1_BASE、EPWM_COUNTER_COMPARE_A、0);
  //同步"下流"
  ePWM_enableSyncOutPulseSource (EPWM1_BASE、EPWM_SYNC_OUT_PULSE_ON_CNTR_ZERO);
  EPWM_setCountModeAfterSync (EPWM1_base、EPWM_COUNT_MODE_UP_AFTER_SYNC);
  //启用 SOC-A 并将其设置为在计数器达到计数值时生效
  //零。 它在每个事件发生时生效
  EPWM_disableADCTrigger (EPWM1_base、EPWM_SOC_A);
下面是第二个中断入口的寄存器值
  EPWM_setADCTriggerSource (EPWM1_BASE、EPWM_SOC_A、EPWM_SOC_TBCTR_ZERO);
  ePWM_setInterruptSource (EPWM1_base、ePWM_INT_TBCTR_zero|ePWM_INT_TBCTR_PERIOD);
  EPWM_setADCTriggerEventPrescale (EPWM1_BASE、EPWM_SOC_A、1U);
  EPWM_enableADCTrigger (EPWM1_base、EPWM_SOC_A);
  //启用 PWM 模块的中断生成
  EPWM_enableInterrupt (EPWM1_BASE);
  //这需要为1才能使 INTFRC 正常工作
  EPWM_setInterruptEventCount (EPWM1_base、1U);
  //清除 ePWM 中断标志
  EPWM_clearEventTriggerInterruptFlag (EPWM1_base);

     谢谢、此致

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

    尊敬的 Lin:

    您如何读取 TBCTR 值? 我假设您是通过中断来执行此操作的。 你的系统中是否有任何其他中断? 这将影响 ePWM 中断开始时间的时序。 即使没有其他中断、在事件触发条件发生的时间与由事件触发器触发进入 ISR 之间也存在很大的延迟、因此您将无法通过软件准确地捕获事件触发时的计数器值。

    谢谢!

    卢克

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

    Luke、您好!

       EPWM1不会被其他中断中断中断、软件记录的 TBCTR 值应接近触发值。  目前的现象是、前三个中断之间的时间间隔明显小于周期值、第一次中断为22.3us、第二次中断为35us、第三次中断为50us。 周期值为62.5us、这意味着要更早地进入中断。  在第三次中断之后、该周期恢复正常。

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

    LIN、

    只是我们身边的一个更新,卢克今天出去,星期一是美国的假期。  请期待我们的下一个答复星期二,下一个星期的16日。

    此致!
    马修

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

    尊敬的 Lin:

    我怀疑您的 ISR 超过了 ePWM 周期。 这会导致在每个 ISR 中捕获不同的 TBCTR 值、因为每个 ISR 的开始都会被前一个 ISR 延迟。 您可以通过在 ISR 开始时将 GPIO 设置为高电平并在 ISR 结束时将其设置为低电平来验证 ISR 是否短于周期? 如果将此 GPIO 输出与 ePWM 输出进行比较、生成的脉冲应小于 PWM 周期。

    谢谢!

    卢克