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.

[参考译文] TMS320F280049:注册以将 DCBEVT1.SYNC 配置为 ePWM 模块的输入同步!!

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/958708/tms320f280049-register-for-configuring-dcbevt1-sync-as-the-input-sync-for-the-epwm-module

器件型号:TMS320F280049

您好!

我想选择 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