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.
您好!
我有一个现有的硬件设计。 编号较低的 ePWM 通道被使用、并且不能被改变。 我想使用编号更高的 ePWM 通道来生成同步事件。
我的第一个想法是
这似乎合理吗?
是否有更好的方法可以做到这一点?
我看到 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? 无法理解为什么在一个周期中只发生一个操作。 (高电平或低电平)
[/quote][/quote]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);
[/报价]
图片是否高于您的期望?
[/quote]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。
您好、 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%占空比波形:
尊敬的 Mark:
如果我注释掉为 EPWM1启用 SYNC 的行(EPWM_setCountModeAfterSync、EPWM_enablePhaseShiftLoad、EPWM_setPhaseShift)、我得到正确的 50%占空比波形:
如果你只是禁用 epwm1上的相移负载,它是否提供正确/预期的输出?
没有时间来创建测试用例尝试这 还没有,如果你可以给我发送一个简化的测试用例,这是可重现的,我可以帮助解决我的最后问题在这里。
谢谢!