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.

[参考译文] TMS320F280025C:更改了 HRPWM CMPAHR 但未生效

Guru**** 2434970 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/997072/tms320f280025c-hrpwm-cmpahr-changed-did-not-have-effect

器件型号:TMS320F280025C
主题中讨论的其他器件:C2000WARE

大家好、

我的客户遇到 HRPWM 无法按预期工作的问题。

测试结果如下:

案例1:Boostdutycycle_pu = 0.4、   

          CMPA = 80、CMPAHR = 0、

      测得的实际 PWM 占空比= 35.3%。

 情况  boostdutycycle_pu = 0.404、   

CMPA = 80、CMPAHR = 52224、

 测得的实际 PWM 占空比= 35.3%。

寄存器 CMPAHR 已更改、但波形相同。

案例3:Boostdutycycle_pu = 0.405、   

CMPA = 81、CMPAHR = 0、

实际 PWM 占空比= 34.81%。

由于 CMPA 从80变为81、波形从35.3%更改为34.81%。

下面是配置。

 

	SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_HRPWM);

	SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_TBCLKSYNC);

	SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM1);

	SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM2);



    EPWM_setPeriodLoadMode(base, EPWM_PERIOD_SHADOW_LOAD);
    EPWM_setTimeBasePeriod(base, Period);
    EPWM_setPhaseShift(base, 0);
    EPWM_setTimeBaseCounter(base, 0);
    EPWM_setEmulationMode(base, EMULATION_MODE);
    EPWM_setTimeBaseCounterMode(base, EPWM_COUNTER_MODE_UP);
    EPWM_setClockPrescaler(base, EPWM_CLOCK_DIVIDER_1, EPWM_HSCLOCK_DIVIDER_1);

    //
    // Configure linking between PWM modules
    //
    if(syncmode == EPWM_SYNC_IN_PULSE_SRC_DISABLE) // config as a Master
    {
        //
        // Disable phase shift load
        // sync out on CTR = 0
        //
        EPWM_disablePhaseShiftLoad(base);
        EPWM_enableSyncOutPulseSource(base, EPWM_SYNC_OUT_PULSE_ON_CNTR_ZERO);
    }
    else // Configure module as slave
    {
        //
        // Enable phase shift load
        // Set sync-out to software only (effectively disabled)
        // Set sync-in signal per argument passed in to this function
        // Count up after sync
        //
        EPWM_enablePhaseShiftLoad(base);
        EPWM_enableSyncOutPulseSource(base, EPWM_SYNC_OUT_PULSE_ON_SOFTWARE);
        EPWM_setSyncInPulseSource(base, syncmode);
        EPWM_setCountModeAfterSync(base, EPWM_COUNT_MODE_UP_AFTER_SYNC);
    }

    //
    // ===================================================== //
    // === Configure Counter Compare Submodule Registers === //
    // ===================================================== //
    //
    // Set initial CMPA value
    // Set initial CMPB value
    // Enable CMPA shadow load on CTR = 0
    // Enable CMPB shadow load on CTR = 0
    //
    EPWM_setCounterCompareValue(base, EPWM_COUNTER_COMPARE_A, CMPA);
    EPWM_setCounterCompareValue(base, EPWM_COUNTER_COMPARE_B, CMPB);
    EPWM_setCounterCompareShadowLoadMode(base,
                                         EPWM_COUNTER_COMPARE_A,
                                         EPWM_COMP_LOAD_ON_CNTR_ZERO);
    EPWM_setCounterCompareShadowLoadMode(base,
                                         EPWM_COUNTER_COMPARE_B,
                                         EPWM_COMP_LOAD_ON_CNTR_ZERO);

    //
    // =============================================== //
    // === Configure Dead-Band Submodule Registers === //
    // =============================================== //
    //
    // Active high complementary PWMs - Set up the deadband
    // Enable rising edge delay
    // Enable falling edge delay
    // RED polarity is active high
    // FED polarity is active low (inverted)
    // Enable shadow load on CTR = 0 for RED count
    // Enable shadow load on CTR = 0 for FED count
    //
    EPWM_setRisingEdgeDeadBandDelayInput(base,  EPWM_DB_INPUT_EPWMA);
    EPWM_setFallingEdgeDeadBandDelayInput(base, EPWM_DB_INPUT_EPWMB);
    EPWM_setDeadBandDelayMode(base, EPWM_DB_RED, true);
    EPWM_setDeadBandDelayMode(base, EPWM_DB_FED, true);
    EPWM_setDeadBandDelayPolarity(base, EPWM_DB_RED,
                                  EPWM_DB_POLARITY_ACTIVE_HIGH);
    EPWM_setDeadBandDelayPolarity(base, EPWM_DB_FED,
                                  EPWM_DB_POLARITY_ACTIVE_LOW);
    EPWM_setRisingEdgeDelayCountShadowLoadMode(base,
                                               EPWM_COMP_LOAD_ON_CNTR_PERIOD);
    EPWM_setFallingEdgeDelayCountShadowLoadMode(base,
                                                EPWM_COMP_LOAD_ON_CNTR_PERIOD);
    EPWM_setRisingEdgeDelayCount(base,  red);
    EPWM_setFallingEdgeDelayCount(base, fed);

    //
    // Load AQCSFRC on CTR = 0
    //
    EPWM_setActionQualifierContSWForceShadowMode(base,
                                                 EPWM_COMP_LOAD_ON_CNTR_PERIOD);

#if(EPWM_HR_ENABLED == true)
    //
    // Align HRPWM CMPA value and shadow mode with EPWM
    //
    HRPWM_setCounterCompareValue(base,
                                 HRPWM_COUNTER_COMPARE_A,
                                 0);
    //should be chosen to be the same as the regular load option for the CMPA, CMPB register.
    //If the HRPWM module is configured in UP-DOWN counter mode, the shadow mode for the HRPWM
    // registers must be set to load on both ZERO AND PERIOD.
    HRPWM_setCounterCompareShadowLoadEvent(base,
                                           HRPWM_CHANNEL_A,
                                           HRPWM_LOAD_ON_CNTR_PERIOD);

    //
    // Align the HRPWM CMPA behavior with EPWM
    //
    HRPWM_setMEPEdgeSelect(base,
                           HRPWM_CHANNEL_A,
                           HRPWM_MEP_CTRL_FALLING_EDGE);

    HRPWM_setMEPControlMode(base,
                            HRPWM_CHANNEL_A,
                            HRPWM_MEP_DUTY_PERIOD_CTRL);


//
// HRCAL uses the EPWM1 clock
//
    SysCtl_enablePeripheral(SYSCTL_PERIPH_CLK_EPWM1);

    HRPWM_enableAutoConversion(base);

    //
    // Calibrate MEP_ScaleFactor
    //
    do {
            sSfoStatus = SFO();
        } while(sSfoStatus == SFO_INCOMPLETE);

 

 

 

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

    您好!

    是否启用了 HRPWM? 是否设置了 EPWM_HR_ENABLED 参数?

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

    是,ePWM_HR_ENABLED 为真

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

    您好!

    这是 c2000ware 中的一个示例吗? 如果没有、您能否尝试一个示例并分享您的观察结果?

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

    使用示例时会出现编译器错误、如下所示:

    C:\ti\c2000Ware_3_04_00_00\driverlib\f28002x\examples\HRPWM

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

    您好!

    我会得到类似的误差。 我将与团队进行核实、然后再联系您。

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

    您好!

    我似乎已经解决了这个问题、不允许使用以下配置、否则在设置 CMPAHR 时不会产生任何结果、

    // ePWM_setActionQualifierAction (BOOST_PWM2_base、ePWM_AQ_output_A、

    // ePWM_AQ_output_low、

    // ePWM_AQ_output_on_timebase_zero);

     但我不知道原因、TI 参考设计2PH_IL_LLC_F28002x 项目似乎也具有类似的设置:

    对于以下示例、SFO_V8_FPU_lib_build_c28.lib 将编译器问题修复为 新问题。

    C:\ti\c2000Ware_3_04_00_00\driverlib\f28002x\examples\HRPWM

    但我又遇到了另一个问题、我通过以下链接发布了新问题:

    https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1002506/tms320f280025c-hrpwm-seem-not-accuracy-when-cmpahr-is-0

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

    您好!

    [引用 userid="180630" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/997072/tms320f280025c-hrpwm-cmpahr-changed-did-not-have-effect/3703690 #3703690"]

    我似乎已经解决了这个问题、不允许使用以下配置、否则在设置 CMPAHR 时不会产生任何结果、

    // ePWM_setActionQualifierAction (BOOST_PWM2_base、ePWM_AQ_output_A、

    // ePWM_AQ_output_low、

    // ePWM_AQ_output_on_timebase_zero);

     但我不知道原因、TI 参考设计2PH_IL_LLC_F28002x 项目似乎也具有类似的设置:

    [/报价]

    您是否参考了此处的示例代码 C:\ti\c2000\C2000Ware_3_04_00_00\driverlib\f28002x\examples\HRPWM  或其他代码?

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

    C:\ti\c2000\C2000Ware_DigitalPower_SDK_3_01_00_00\solutions\TIDM_1001\f28002x

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

    您好!

    对于此示例 C:\ti\c2000Ware_3_04_00_00\driverlib\f28002x\examples\HRPWM

    您可以尝试使用最新的 CCS 版本(10.x)吗?

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

    大家好、我刚刚尝试了 CCS 的最新版本10.3.1.00003、它没有编译错误。 请更新 CCS。