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.

[参考译文] TMS320F28379D:EPWM、使用 EXTSYNCOUT 生成从编号较高的通道到编号较低的通道的同步

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1359253/tms320f28379d-epwm-using-extsyncout-to-generate-sync-from-higher-numbered-channel-to-lower-numbered-channel

器件型号:TMS320F28379D

您好!


我有一个现有的硬件设计。  编号较低的 ePWM 通道被使用、并且不能被改变。  我想使用编号更高的 ePWM 通道来生成同步事件。

我的第一个想法是

  • 配置 EXTSYNCOUT 以使用 EPWM7SYNCOUT  
  • 配置输出 XBAR 以将 EXTSYNCOUT 路由到未使用的 GPIO
  • 将未使用的 GPIO 连接到第二个未使用的 GPIO
  • 配置输入 XBAR 以将第二个未使用的 GPIO 设置为 XBAR INPUT5
  • 将 XBAR INPUT5用于 EXTSYNCIN1至 EPWM1、2、3、4、5、6

这似乎合理吗?

是否有更好的方法可以做到这一点?

我看到 EXTSYNCOUT 可设置为 EPWM XBAR 多路复用器14的输入。   

根据 TRM 第 15.11.4.1节、似乎可以使用 TBCTL[SWFSYNC]将 EXTSYNCOUT 路由到 EPWM DC 来触发同步、但我尚未弄清楚如何实现该操作。   是否有任何可用的示例工程来实现这一点?

谢谢!

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

    我尝试第二种方法、使用 EXTSYNCOUT。

    到目前为止我所做的工作:

    所有 ePWM 均配置为10kHz、50%占空比。

    //配置 EPWM4以实现同步输出

    EPWM_setSyncOutPulseMode (EPWM4_BASE、EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);

    SYSCTL_setSyncOutputConfig (SYSCTL_SYNC_OUT_SRC_EPWM4SYNCOUT);

    XBAR_setEPWMMuxConfig (XBAR_TRIP12、XBAR_EPWM_MUX14_EXTSYNCOUT);
    XBAR_enableEPWMMUX (XBAR_TRIP12、XBAR_MUX14);

    //配置 EPWM1 DC 子模块(我也尝试过 EPWM2和 EPWM3)

    EPWM_setCountModeAfterSync (EPWM1_base、EPWM_COUNT_MODE_UP_AFTER_SYNC);

    EPWM_enablePhaseShiftLoad (EPWM1_BASE);

    ePWM_selectDigitalCompareTripInput (EPWM1_base、ePWM_DC_TRIPIN12、ePWM_DC_TYPE_DCAH);    // DCAHTRIPSEL

    EPWM_setDigitalCompareEventSource (EPWM1_BASE、EPWM_DC_MODULE_A、EPWM_DC_EVENT_1、EPWM_DC_EVENT_SOURCE_ORIG_SIGNAL);  // DCACTL。 EVT1SRCSEL = 0

    EPWM_setDigitalCompareEventSyncMode (EPWM1_BASE、EPWM_DC_MODULE_A、EPWM_DC_EVENT_1、EPWM_DC_EVENT_INPUT_NOT_SYSCON);// DCACTL。 EVTSYNCE = 1
    ePWM_enableDigitalCompareSyncEvent (EPWM1_base、EPWM_DC_MODULE_A);

    TRM 的关键部分让我相信它应该起作用:

    此配置不起作用/ EPWM4和 EPWM1之间没有同步。  我预计两个输出之间会有恒定的偏移、但变化很大。

    是否有其他建议、以便通过 EPWM4的 EXTSYNCOUT 实现 SYNC、从而在 EPWM1上触发 SYNC?

    谢谢!

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

    更新:

    添加

      EPWM_setTripZoneDigitalCompareEventCondition (EPWM1_base、EPWM_TZ_DC_OUTPUT_A1、EPWM_TZ_EVENT_DCXH_HIGH);


    在 EPWM1和 EPWM4之间产生更一致的偏移、因此 SYNC 似乎正常工作。  不过、在此配置下、EPWM1上仅会显示每隔一个脉冲:

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

    尊敬的 Mark:
    谢谢你的详细解释

    让我通读该主题并回复给您。

    谢谢

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

    谢谢 Prarthan,

    我想基本的问题是:如何 将 EXTSYNCOUT 连接到 TRIP12 (例如)、然后配置 EPWM 直流子模块以生成软件同步(SWFSYNC)?

    我现在还将 EXTSYNCOUT 输出到 XBAROUT3、以便可以看到与 PWM 波形相关的 SYNC 信号。

    您可以在下面的捕获中 看到、我看到 XBAROUTPUT3 上的 EXTSYNCOUT 按预期运行、但 EPWM1未按预期运行。  

    EPWM1和 EPWM4的 TBPRD 和 CMPA 频率相同。  TBPRD = 100*100 (100us)和 CMPA = 100*50 (50us)

    我已将 EPWM4配置为向上/向下计数、该脉冲应该仅在 TBCTR=ZERO 时生成脉冲

    EPWM_setTimeBaseCounterMode(EPWM4_BASE, EPWM_COUNTER_MODE_UP_DOWN);

    EPWM_setActionQualifierAction(EPWM4_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
    EPWM_setActionQualifierAction(EPWM4_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);

    EPWM_setSyncOutPulseMode(EPWM4_BASE, EPWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);

    EPWM4低电平部分中间的脉冲似乎正确、这也是我预计 TBCTR=ZERO 的位置。   EPWM1似乎每隔一个同步脉冲就丢失。

    如初始发布中所述、EXTSYNCOUT 配置为:

    SysCtl_setSyncOutputConfig(SYSCTL_SYNC_OUT_SRC_EPWM4SYNCOUT);

    XBAR_setEPWMMuxConfig(XBAR_TRIP12, XBAR_EPWM_MUX14_EXTSYNCOUT);
    XBAR_enableEPWMMux(XBAR_TRIP12, XBAR_MUX14);

    然后将 EPWM1配置为:

    EPWM_selectDigitalCompareTripInput(EPWM1_BASE, EPWM_DC_TRIP_TRIPIN12, EPWM_DC_TYPE_DCAH); // DCAHTRIPSEL
    EPWM_setTripZoneDigitalCompareEventCondition( EPWM1_BASE, EPWM_TZ_DC_OUTPUT_A1, EPWM_TZ_EVENT_DCXH_HIGH);
    EPWM_setDigitalCompareEventSource(EPWM1_BASE, EPWM_DC_MODULE_A, EPWM_DC_EVENT_1, EPWM_DC_EVENT_SOURCE_ORIG_SIGNAL); // DCACTL.EVT1SRCSEL = 0
    EPWM_setDigitalCompareEventSyncMode(EPWM1_BASE, EPWM_DC_MODULE_A, EPWM_DC_EVENT_1, EPWM_DC_EVENT_INPUT_NOT_SYNCED); // DCACTL.EVTSYNCE = 1
    EPWM_enableDigitalCompareSyncEvent(EPWM1_BASE, EPWM_DC_MODULE_A);

    EPWM_setTimeBaseCounterMode(EPWM1_BASE, EPWM_COUNTER_MODE_UP_DOWN);
    EPWM_setCountModeAfterSync(EPWM1_BASE, EPWM_COUNT_MODE_UP_AFTER_SYNC);
    EPWM_enablePhaseShiftLoad(EPWM1_BASE);
    EPWM_setPhaseShift(EPWM1_BASE, 2);

    EPWM_setActionQualifierAction(EPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
    EPWM_setActionQualifierAction(EPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);

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

    尊敬的 Mark:

    很抱歉、我之前忘了给您回复

    我现在还将 EXTSYNCOUT 输出到 XBAROUT3、以便可以看到与 PWM 波形相关的 SYNC 信号。

    您可以在下面的捕获中 看到、我看到 XBAROUTPUT3 上的 EXTSYNCOUT 按预期运行、但 EPWM1未按预期运行

    [/报价]

    >>我认为您希望从 epwm4生成到 epwm1的同步。
    在这种情况下什么是 EXTSYNCOUT?
    这和 epwm4 SyncOut 一样吗?

    另外、根据动作限定符、即使 EPWM1变为高电平、与 cmpa 的向下计数器匹配也不会下降。

    您是否可以在 epwm1的计数器0上添加 GPIO toggle/SyncOut? 无法理解为什么在一个周期中只发生一个操作。  (高电平或低电平)

    EPWM_setActionQualifierAction(EPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_HIGH, EPWM_AQ_OUTPUT_ON_TIMEBASE_UP_CMPA);
    EPWM_setActionQualifierAction(EPWM1_BASE, EPWM_AQ_OUTPUT_A, EPWM_AQ_OUTPUT_LOW, EPWM_AQ_OUTPUT_ON_TIMEBASE_DOWN_CMPA);[/报价]

    图片是否高于您的期望?

    EPWM_selectDigitalCompareTripInput(EPWM1_BASE, EPWM_DC_TRIP_TRIPIN12, EPWM_DC_TYPE_DCAH); // DCAHTRIPSEL
    EPWM_setTripZoneDigitalCompareEventCondition( EPWM1_BASE, EPWM_TZ_DC_OUTPUT_A1, EPWM_TZ_EVENT_DCXH_HIGH);
    EPWM_setDigitalCompareEventSource(EPWM1_BASE, EPWM_DC_MODULE_A, EPWM_DC_EVENT_1, EPWM_DC_EVENT_SOURCE_ORIG_SIGNAL); // DCACTL.EVT1SRCSEL = 0
    EPWM_setDigitalCompareEventSyncMode(EPWM1_BASE, EPWM_DC_MODULE_A, EPWM_DC_EVENT_1, EPWM_DC_EVENT_INPUT_NOT_SYNCED); // DCACTL.EVTSYNCE = 1
    EPWM_enableDigitalCompareSyncEvent(EPWM1_BASE, EPWM_DC_MODULE_A);[/报价]

    >>这看起来是正确的:为 DCAHTRIPSEL 选择 TripIn12 -->为事件条件选择 DCAH 高电平-->在 DCAEVT1上启用 SYNC。

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

    您好、 Prarthan、

    >>我认为您希望从 epwm4生成到 epwm1的同步。
    在这种情况下什么是 EXTSYNCOUT?
    这和 epwm4 SyncOut 一样吗?

    这仍然是目标。  我正在将 EPWM4 SYNCOUT 配置为 EXTSYNCOUT 的源。   我正在通过 EPWMXBAR 将 EXTSYNCOUT 用作 TRIPIN12的源。  然后将 TRIPIN12与 EPWM1直流子模块配合使用、以触发同步事件。

    今日进一步观察:

    如果我在不尝试同步的情况下"独立"运行 EPWM1"、则它具有正确的波形。  向上/向下计数、50%占空比。  在 TBCTR=10000时、这是低50us、高100us、低50us。

    我一旦尝试启用同步、EPWM1波形就变为低50us、高150us、低50us。  因此脉冲的高电平时间会延长。  我通过添加以下线路来启用 SYNC:

    EPWM_setCountModeAfterSync(EPWM1_BASE, EPWM_COUNT_MODE_UP_AFTER_SYNC);
    EPWM_enablePhaseShiftLoad(EPWM1_BASE);
    EPWM_setPhaseShift(EPWM1_BASE, 2);

     

    如果我 在 EPWM1上使 SYNC 保持启用状态、但禁用了生成(因此不生成 EXTSYNCOUT 脉冲)、我仍然看到错误波形 50us 低、150us 高、50us 低。

    在本例中、我通过注释掉行来禁用 EXTSYNCOUT。

        XBAR_enableOutputMux(XBAR_OUTPUT3,XBAR_MUX14);

    我在 EPWM1上更改了频率、可以用不同的方式说明该行为。

    以下是我尝试从 EPWM4到 EPWM1启用 SYNC 的波形:

    EPWM1仍配置为50%占空比。  请注意、即使在同步事件之间、EPWM1的高电平时间也会扩展。

    如果我注释掉为 EPWM1启用 SYNC 的行(EPWM_setCountModeAfterSync、EPWM_enablePhaseShiftLoad、EPWM_setPhaseShift)、我得到正确的 50%占空比波形:

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

    标记、

     后退了一步。

    您可以将 epwm4的 SyncOut 路由到 GPIO 和 GPIO 到 INPUTXBAR5、并将其发送到 epwm1的 ePWM 同步输入。

    这是您目前正在做的事情吗?

    如果不是、这是您可以尝试的方法。

    此方法避免了所有直流子模块初始化的麻烦。

    谢谢!

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

    在我的终端设计/现有硬件中、已使用了 XBARINPUT1到 XBARINPUT6。  我需要尝试使直流子模块选项正常工作(除非有其他方法来实现这种同步)

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

    了解 Mark、

    让我再次查看并返回  

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

    您好、普拉森、  您有机会看看这种情况下的直流子模块选项吗?  谢谢!

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

    尊敬的 Mark:

    如果我注释掉为 EPWM1启用 SYNC 的行(EPWM_setCountModeAfterSync、EPWM_enablePhaseShiftLoad、EPWM_setPhaseShift)、我得到正确的 50%占空比波形:

    如果你只是禁用 epwm1上的相移负载,它是否提供正确/预期的输出?

    没有时间来创建测试用例尝试这 还没有,如果你可以给我发送一个简化的测试用例,这是可重现的,我可以帮助解决我的最后问题在这里。

    谢谢!