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.

[参考译文] CCS/LAUNCHXL-F280049C:ePWM 相移

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/906918/ccs-launchxl-f280049c-epwm-phase-shift

器件型号:LAUNCHXL-F280049C

工具/软件:Code Composer Studio

您好!  

我在 EPWM 库中遇到了相移方面的问题... 我n´t 了 PWM、它´s 正常工作、但当我尝试设置相移时、它工作、我需要设置一个新的反向基座、以便它工作...  

//这里是我的 PWM 初始化、设置周期等

//
//将 PWM 1配置为主器件、将第2相配置为从器件、并让其传递来自 PWM1的 SYNC IN 脉冲
//
ePWM_DisablePhaseShiftLoad (VIENNA1_DRV_ePWM_base);
ePWM_setSyncOutPulseMode (VIENNA1_DRV_ePWM_base、ePWM_SYNC_OUT_PULSE_ON_COUNTER_ZERO);

ePWM_enablePhaseShiftLoad (vienna2_DRV_ePWM_base);
ePWM_setSyncOutPulseMode (vienna2_DRV_ePWM_base、ePWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);

ePWM_setPhaseShift (vienna2_DRV_ePWM_base、0);
ePWM_setCountModeAfterSync (vienna2_DRV_ePWM_base、ePWM_COUNT_MODE_UP_After_SYNC);
ePWM_setTimeBaseCounter (vienna2_DRV_ePWM_base、2000); //尽管 PhaseShift 被设置为0,但由于基址计数器的原因,我有一个相移。

ePWM_setSyncOutPulseMode (VIENNA3_DRV_ePWM_base、ePWM_SYNC_OUT_PULSE_ON_EPWMxSYNCIN);
ePWM_setCountModeAfterSync (VIENNA3_DRV_ePWM_base、ePWM_COUNT_MODE_UP_After _SYNC);
ePWM_enablePhaseShiftLoad (VIENNA3_DRV_ePWM_base);
ePWM_setPhaseShift (VIENNA3_DRV_ePWM_base、2000); //我´s PhaseShift,但它根本不起作用... 

请帮帮我。

非常感谢。

BR、

Luis

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

    您好!

    您能否确认上述代码中使用的 PWM 实例? PWM1是主器件、PWM 2和3是从器件吗? 您还可以共享其他 PWM 配置、如周期、占空比、动作限定符吗?

    谢谢

    Vasudha

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

    Vasudha、您好!

    感谢您的支持。

    是的、PWM1是主器件、PWM2和 PWM3是从器件。

    PWM 的配置如下所示:

       ePWM_setClockPrescaler (PWMbase、Vienna_ePWM_EPWMCLK_DIV、Vienna_ePWM_HSCLK_DIV);
       ePWM_setEmulationMode (PWMbase、ePWM_emulation_free_run);
       //
       //为递增操作配置 ePWM
       //
       ePWM_setTimeBaseCounter (PWMbase、0);
       ePWM_setTimeBasePeriod (PWMbase、Vienna_ePWM_TBPRD);
       ePWM_setPeriodLoadMode (PWMbase、ePWM_PERIOD_LOAD);
       ePWM_setTimeBaseCounterMode (PWMbase、ePWM_COUNTER_MODE_UP);
       ePWM_setPhaseShift (PWMbase、0);

       //
       //使用影子模式更新 TBPRD 上的 CMPA
       //
       ePWM_setCounterCompareValue (PWMbase、ePWM_COUNTER_COMPARE_A、0);
       ePWM_setCounterCompareShadowImage LoadMode (PWMbase、ePWM_COUNTER_COMPARE_A、ePWM_COMP_LOAD_ON_CNTR_PERIOD);

      //将操作限定符子模块配置为:

      //    当 TBCTR=0时输出 A 低电平

       ePWM_setActionQualifierShadowImage LoadMode (PWMbase、ePWM_ACT_QUALTER_A、ePWM_AQ_LOAD_ON_CNTR_ZERO);
       ePWM_setActionQualifierAction (PWMbase、ePWM_AQ_output_A、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_zero);

       //    当 TBCTR=CMPA 时输出 A 高电平
       ePWM_setActionQualifierAction (PWMbase、ePWM_AQ_output_A、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_up_CMPA);

       //    当 TBCTR=0时、输出 B 为高电平
       ePWM_setActionQualifierAction (PWMbase、ePWM_AQ_output_A、ePWM_AQ_output_high、ePWM_AQ_output_on_timebase_zero);

       //    当 TBCTR=CMPA 时输出 B 为低电平
       ePWM_setActionQualifierAction (PWMbase、ePWM_AQ_output_A、ePWM_AQ_output_low、ePWM_AQ_output_on_timebase_up_CMPA);

       //
       //为高电平有效的互补 PWM 配置死区发生器
       //
       ePWM_setDeadBandDelayMode (PWMbase、ePWM_DB_RED、true);
       ePWM_setDeadBandDelayMode (PWMbase、ePWM_DB_FED、true);

       ePWM_setRisingEdgeDeadBandDelayInput (PWMbase、ePWM_DB_INPUT_EPWMA);
       ePWM_setFallingEdgeDeadBandDelayInput (PWMbase、ePWM_DB_INPUT_EPWMA);

       ePWM_setDeadBandDelayPolarity (PWMbase、ePWM_DB_FED、ePWM_DB_POLICLE_ACTIVE_LOW);
       ePWM_setDeadBandDelayPolarity (PWMbase、ePWM_DB_RED、ePWM_DB_POLICLE_ACTIVE_HIGH);

       ePWM_setFallingEdgeDelayCount (PWMbase、Vienna_ePWM_Deadband _FED);
       ePWM_setRisingEdgeDelayCount (PWMbase、Vienna_ePWM_Deadband _red);

    再次感谢!

    Luis

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

    尊敬的 Vasudha:

    我´ve 了n´t、但我不知道如何解决这个问题... 这张图片很好地描述了我的问题:

    当我使用 PWM1和 PWM2时、移位操作正常。 使用其他 PWM 并将其同步到 PWM1时遇到的问题是、我需要选择输入同步事件。

    如何使用 epwm.h 库执行此操作? 如何调用函数来选择 SYNCIN 事件? 我找不到可执行此操作的函数... 请帮帮我。

    此致、

    Luis

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

    我´ve 解决方法:

       SYSCTL_setSyncInputConfig (SYSCTL_SYNC_IN_EPWM4、SYSCTL_SYNC_IN_SRC_EXTSYNCIN1);
       SYSCTL_setSyncInputConfig (SYSCTL_SYNC_IN_EPWM7、SYSCTL_SYNC_IN_SRC_EXTSYNCIN1);

    添加此行以同步输入时钟;)  

    谢谢!

x 出现错误。请重试或与管理员联系。