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.
您好!
我想选择 DCBEVT1.SYNC 作为 ePWM 模块的输入同步、以将 TBPHS 值更新为 TBCTR 值。
但我找不到任何寄存 器用于将 DCBEVT1.SYNC 配置为 ePWM 模块的输入同步。
请尽快告诉我解决此问题的方法。
谢谢、
Chandana
DCBECT1.SYNC 被自动连接至驱动 TBPHS 负载触发器的或门。
无需配置寄存器。
NIMA
您好,
在这里、每当我获得过零(通过 CMPSS 配置)时、我希望从 EPWM1/EPWM4生成一个 DCBEVT1.SYNC、该 DCBEVT1.SYNC 事件应将 TBPHS 值触发到 EPWM1/EPWM4的 TBPRD 中。
但是、正如您所说的、DCBEVT1.SYNC 会路由到硬件本身的 TBPHS 触发器中。 考虑到这一点、我编写了代码。
PS:
我已经通过 DCBEVT1信号触发跳闸中断、确认 DCBEVT1事件正在正常生成。
我发现将此 DCBEVT1事件路由到计时器模块时出现问题。
下面是我的代码、请参阅随附的代码。
#include "pFC_valle.h" // initCMPSS -用于配置 CMPSS1 void initCMPSS (void) 的高比较器的函数{ //启用 CMPSS 并将负输入信号配置为来自 // DAC CMPSS 使能模块(CMPSS1_BASE); CMPSS_CONFIGHighComparator (CMPSS1_BASE、CMPSS_INSRC_DAC); //使用 VDDA 作为 DAC 的基准并将 DAC 值设置为的中点 //任意引用。 CMPSS_CONFIGDAC (CMPSS1_BASE、CMPSS_DACREF_VDDA | CMPSS_DACVAL_SYSCLK | CMPSS DACSRC_Shdw); CMPSS_setDACValueHigh (CMPSS1_base、2048);//1.65V //配置输出信号。 CTRIPH 将由馈送 //异步比较器输出。 CMPSS_CONFIGOutputsHigh (CMPSS1_base、CMPSS_TRIP_ASYNC_COMP); } // initEPWM -用于配置 ePWM8和 ePWM X-BAR 以将 CTRIPH 作为 // 直流跳闸输入 void initEPWMDC (void) { //使用 ePWM X-BAR 将 TRIP4配置为 CTRIP1H Xbar_setEPWMMuxConfig (XBAR_TRIP4、XBAR_EPWM_MUX00_CMPSS1_CTRIPH); //检查 Xbar_enableEPWMMUX (XBAR_TRIP4、XBAR_MUX00); ePWM_selectDigitalCompareTripInput (EPWM4_base、ePWM_DC_TRIPIN4、ePWM_DC_TYPE_DCBH); //将 DCB 路径配置为未过滤和异步 ePWM_setDigitalCompareEventSource (EPWM4_base、 ePWM_DC_MODULE_B、 ePWM_DC_EVENT_1、 ePWM_DC_EVENT_SOURC_ORIG_SIGNAL); // DCBH 为高电平时触发事件 ePWM_setTripZoneDigitalCompareEventCondition (EPWM4_base、 ePWM_TZ_DC_OUTPW_B1、 ePWM_TZ_EVENT_DCXH_LOW); ePWM_setDigitalCompareEventSyncMode (EPWM4_base、ePWM_DC_MODULE_B、ePWM_DC_EVENT_1、 ePWM_DC_EVENT_INPUT_NOT 已同步); ePWM_enableDigitalCompareSyncEvent (EPWM4_base、ePWM_DC_MODULE_B); } void initEPWM1() { //设置200kHz ePWM_setTimeBasePeriod (EPWM4_base、250U); ePWM_setPhaseShift (EPWM4_base、0U); ePWM_setTimeBaseCounter (EPWM4_base、0U); ePWM_setTimeBaseCounterMode (EPWM4_base、ePWM_COUNTER_MODE_UP_DOWN); ePWM_DisablePhaseShiftLoad (EPWM4_base); 发生 DCevent 时为//sync ePWM_enablePhaseShiftLoad (EPWM4_base); SYSCTL_setSyncInputConfig (SYSCTL_SYNC_IN_EPWM4、 SYSCTL_SYNC_IN_SRC_EPWM4SYNCOUT); ePWM_setPhaseShift (EPWM4_base、0U); ePWM_setCountModeAfterSync (EPWM4_base、ePWM_COUNT_MODE_UP_After 同步); //将时基时钟预分频器设置为/1 ePWM_setClockPrescaler (EPWM4_base、ePWM_CLOCK 分频器_1、 ePWM_HSCLOCK_DEVIDER_1); //设置隐藏 EPWM_setCounterCompareShadowImage LoadMode (EPWM4_base、 ePWM_COUNTER_COMPARE_A、 ePWM_COMP_LOAD_ON_CNTR_ZERO); //设置比较25%占空比 ePWM_setCounterCompareValue (EPWM4_base、ePWM_COUNTER_COMPARE_A、125U); //设置操作 ePWM_setActionQualifierAction (EPWM4_base、 ePWM_AQ_OUTPUT A、 ePWM_AQ_OUTPUT 低电平、 ePWM_AQ_output_on_timebase_up_CMPA); ePWM_setActionQualifierAction (EPWM4_base、 ePWM_AQ_OUTPUT A、 ePWM_AQ_OUTPUT NO_CHANGE、 ePWM_AQ_output_on_timebase_down_CMPA); ePWM_setActionQualifierAction (EPWM4_base、 ePWM_AQ_OUTPUT A、 ePWM_AQ_OUTPUT 高电平、 ePWM_AQ_output_on_timebase_zero); } //initEPWMGPIO -配置 ePWM GPIO void initEPWMGPIO (void) { //禁用 GPIO 0和 GPIO 2上的上拉电阻并将其配置为 PWM1A 和 // PWM2A 输出。 GPIO_setPadConfig (0、GPIO_PIN_TYPE_STD); GPIO_setPinConfig (GPIO_0_EPWM1A); GPIO_setPadConfig (1、GPIO_PIN_TYPE_STD); GPIO_setPinConfig (GPIO_1_EPWM1B); GPIO_setPadConfig (2、GPIO_PIN_TYPE_STD); GPIO_setPinConfig (GPIO_2_EPWM2A); GPIO_setPadConfig (3、GPIO_PIN_TYPE_STD); GPIO_setPinConfig (GPIO_3_EPWM2B); GPIO_setPadConfig (6、GPIO_PIN_TYPE_STD); GPIO_setPinConfig (GPIO_6_EPWM4A); }
确保您具有以下寄存器集:
DCBCTL[EVT1SYNCE]、除此之外、所有内容都应硬接线。
NIMA
我看到您具有以下内容: ePWM_enableDigitalCompareSyncEvent
这就是所需要的一切。 现在、您已启用 DCBEVT1同步事件、所有内容都应传递到 PHSEN。
您好!
感谢您的回复!!
是的、正如您提到的。 DCBEVT 已通过 上述代码中的 ePWM_enableDigitalCompareSyncEvent() API 启用。 但我仍然无法按照预期获得结果?!!
每当出现 DCBEVT 时、我的要求是将 TBPHS (值=0)值加载到 EPWM1或 EPWM4的 TBRD 中。
如何检查以确保 DCBEVT 不会导致重新加载?
NIMA