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 运行中的向上计数模式影子加载配置

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

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/993706/tms320f280025c-up-count-mode-shadow-load-configuration-in-hrpwm-operation

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

我看到有关 up_down 计数模式下的影子加载配置的大量讨论、但我的问题是有关配置为 HRPWM 运行时在 up_count 模式下运行的问题。  

如果我使用下面的代码片段进行配置、我看不到我的占空比的高分辨率更新:

EPWM_setCounterCompareShadowImage LoadMode (BUCK_DRV_EPWM1_BASE、
ePWM_COUNTER_COMPARE_A、
ePWM_COMP_LOAD_ON_CNTR_PERIOD);

但是、如果我使用:  

EPWM_setCounterCompareShadowImage LoadMode (BUCK_DRV_EPWM1_BASE、
ePWM_COUNTER_COMPARE_A、
ePWM_COMP_LOAD_ON_CNTR_ZERO);

我确实会看到高分辨率更新到我的占空比值。  这似乎直接与17.15.1.5.4.1高分辨率周期配置中 TPM 的配置方向相矛盾。 它在第4项中指出、当处于向上计数模式时、CMPCTL 应设置为在 CTR=PRD (模式1)上加载。  

我应该分享其余的配置步骤、还是我有误解、误解?

谢谢、  

N

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

    您好!

    我希望 TRM 中的配置"在向上计数模式下:CMPCTL[LOADAMODE]= 1 (CTR 上的负载= PRD)"应按预期工作。
    您正在使用哪些比较寄存器值? 共享完整的配置会有所帮助。
    您是以高分辨率调制占空比还是周期都调制?
    您还可以参阅 C:\ti\c2000\C2000Ware_3_04_00_00\driverlib\f28002x\examples\HRPWM 中的示例

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

    感谢你的答复。 我正在使用 HR 模块调制占空比。  

    如果我将影子加载事件更改为在计数器周期0上发生、我可以在 PWM1A 上获得高分辨率控制、但在我的 B 输出上不能获得高分辨率控制。  

    这里是我对两个 ePWM 输出的设置。  


    //数据表中指定了支持的最大 ePWM 时钟速度
    ePWM_setClockPrescaler (BUCK_DRV_EPWM1_base、
    BUCK_DRV_EPWM_EPWMCLK_DIV、
    BUCK_DRV_EPWM_HSCLK_DIV);

    ePWM_setClockPrescaler (BUCK_DRV_EPWM2_base、
    BUCK_DRV_EPWM_EPWMCLK_DIV、
    BUCK_DRV_EPWM_HSCLK_DIV);

    ePWM_setEmulationMode (BUCK_DRV_EPWM1_base、ePWM_emulation_free_run);
    ePWM_setEmulationMode (BUCK_DRV_EPWM2_base、ePWM_emulation_free_run);

    //为递增操作配置 ePWM
    ePWM_setTimeBaseCounter (BUCK_DRV_EPWM1_base、0);
    ePWM_setTimeBasePeriod (buck_DRV_EPWM1_base、epwmTimeBasePeriod);
    ePWM_setPeriodLoadMode (BUCK_DRV_EPWM1_BASE、ePWM_PERIOD_SHADOD_LOAD);
    ePWM_setTimeBaseCounterMode (BUCK_DRV_EPWM1_base、ePWM_COUNTER_MODE_UP);
    ePWM_DisablePhaseShiftLoad (BUCK_DRV_EPWM1_BASE);
    ePWM_enableSyncOutPulseSource (BUCK_DRV_EPWM1_base、ePWM_SYNC_OUT_PULSE_ON_CNTR_ZERO);

    ePWM_setTimeBaseCounter (BUCK_DRV_EPWM2_base、0);
    ePWM_setTimeBasePeriod (buck_DRV_EPWM2_base、epwmTimeBasePeriod);
    ePWM_setPeriodLoadMode (BUCK_DRV_EPWM2_base、ePWM_PERIOD_SHADOD_LOAD);
    ePWM_setTimeBaseCounterMode (BUCK_DRV_EPWM2_base、ePWM_COUNTER_MODE_UP);
    ePWM_setCountModeAfterSync (BUCK_DRV_EPWM2_base、ePWM_COUNT_MODE_UP_AST_SYNC_SYNC);
    ePWM_enablePhaseShiftLoad (BUCK_DRV_EPWM2_base);
    ePWM_setSyncInPulseSource (BUCK_DRV_EPWM2_base、ePWM_SYNC_IN_PULSE_SRC_SYNCOUT_EPWM1);
    ePWM_setPhaseShift (BUCK_DRV_EPWM2_base、epwmTimeBasePeriod/2);


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

    ePWM_setCounterCompareValue (BUCK_DRV_EPWM2_base、
    ePWM_COUNTER_COMPARE_A、
    0);

    EPWM_setCounterCompareShadowImage LoadMode (BUCK_DRV_EPWM1_BASE、
    ePWM_COUNTER_COMPARE_A、
    ePWM_COMP_LOAD_ON_CNTR_PERIOD);

    EPWM_setCounterCompareShadowImage LoadMode (BUCK_DRV_EPWM2_base、
    ePWM_COUNTER_COMPARE_A、
    ePWM_COMP_LOAD_ON_CNTR_PERIOD);

    //将 HRPWM CMPA 值和影子模式与 ePWM 保持一致
    HRPWM_setCounterCompareValue (BUCK_DRV_EPWM1_BASE、
    HRPWM_COUNTER_COMPARE_A、
    0);

    HRPWM_setCounterCompareValue (BUCK_DRV_EPWM2_base、
    HRPWM_COUNTER_COMPARE_A、
    0);

    HRPWM_setCounterCompareShadowImage LoadEvent (BUCK_DRV_EPWM1_BASE、
    HRPWM_CHANGE_A、
    ePWM_COMP_LOAD_ON_CNTR_ZERO);

    HRPWM_setCounterCompareShadowImage LoadEvent (BUCK_DRV_EPWM2_base、
    HRPWM_CHANGE_A、
    ePWM_COMP_LOAD_ON_CNTR_ZERO);

    //将操作限定符子模块配置为:
    //当 TBCTR=0时输出高电平
    //当 TBCTR=CMPA 时输出低电平
    //使用影子模式更新 AQCTL
    ePWM_setActionQualifierShadowImage LoadMode (BUCK_DRV_EPWM1_base、
    ePWM_ACT_限定 符_A、
    ePWM_COMP_LOAD_ON_CNTR_ZERO);

    ePWM_setActionQualifierShadowImage LoadMode (BUCK_DRV_EPWM2_base、
    ePWM_ACT_限定 符_A、
    ePWM_COMP_LOAD_ON_CNTR_ZERO);

    ePWM_setActionQualifierAction (BUCK_DRV_EPWM1_base、
    ePWM_AQ_OUTPUT A、
    ePWM_AQ_OUTPUT 高电平、
    ePWM_AQ_output_on_timebase_zero);

    ePWM_setActionQualifierAction (BUCK_DRV_EPWM2_base、
    ePWM_AQ_OUTPUT A、
    ePWM_AQ_OUTPUT 高电平、
    ePWM_AQ_output_on_timebase_zero);

    ePWM_setActionQualifierAction (BUCK_DRV_EPWM1_base、
    ePWM_AQ_OUTPUT A、
    ePWM_AQ_OUTPUT 低电平、
    ePWM_AQ_output_on_timebase_up_CMPA);

    ePWM_setActionQualifierAction (BUCK_DRV_EPWM2_base、
    ePWM_AQ_OUTPUT A、
    ePWM_AQ_OUTPUT 低电平、
    ePWM_AQ_output_on_timebase_up_CMPA);

    //将 HRPWM CMPA 行为与 ePWM 保持一致
    HRPWM_setMEPEdgeSelect (BUCK_DRV_EPWM1_base、
    HRPWM_CHANGE_A、
    HRPWM_MEP_CTRL_FALLING_EDGE);

    HRPWM_setMEPEdgeSelect (BUCK_DRV_EPWM2_base、
    HRPWM_CHANGE_A、
    HRPWM_MEP_CTRL_FALLING_EDGE);

    HRPWM_setMEPControlMode (BUCK_DRV_EPWM1_BASE、
    HRPWM_CHANGE_A、
    HRPWM_MEP_Duty_Period_CTRL);

    HRPWM_setMEPControlMode (BUCK_DRV_EPWM2_base、
    HRPWM_CHANGE_A、
    HRPWM_MEP_Duty_Period_CTRL);

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

    ePWM_setDeadBandDelayMode (BUCK_DRV_EPWM2_base、ePWM_DB_RED、true);
    ePWM_setDeadBandDelayMode (BUCK_DRV_EPWM2_base、ePWM_DB_FED、true);


    ePWM_setRisingEdgeDeadBandDelayInput (BUCK_DRV_EPWM1_BASE、
    ePWM_DB_INPUT_EPWMA);
    ePWM_setFallingEdgeDeadBandDelayInput (BUCK_DRV_EPWM1_BASE、
    ePWM_DB_INPUT_EPWMA);

    ePWM_setRisingEdgeDeadBandDelayInput (BUCK_DRV_EPWM2_base、
    ePWM_DB_INPUT_EPWMA);
    ePWM_setFallingEdgeDeadBandDelayInput (BUCK_DRV_EPWM2_base、
    ePWM_DB_INPUT_EPWMA);

    ePWM_setDeadBandDelayPolarity (BUCK_DRV_EPWM1_base、
    ePWM_DB_FED、
    ePWM_DB_POLARY_ACTIVE_LOW);

    ePWM_setDeadBandDelayPolarity (BUCK_DRV_EPWM2_base、
    ePWM_DB_FED、
    ePWM_DB_POLARY_ACTIVE_LOW);

    ePWM_setDeadBandDelayPolarity (BUCK_DRV_EPWM1_base、
    ePWM_DB_RED、
    ePWM_DB_POLICLE_ACTIVE_HIGH);

    ePWM_setDeadBandDelayPolarity (BUCK_DRV_EPWM2_base、
    ePWM_DB_RED、
    ePWM_DB_POLICLE_ACTIVE_HIGH);

    ePWM_setFallingEdgeDelayCount (BUCK_DRV_EPWM1_BASE、
    DeadBandFallingEdgeDelay);

    ePWM_setRisingEdgeDelayCount (buck_DRV_EPWM1_base、
    DeadBandRisingEdgeDelay);

    ePWM_setFallingEdgeDelayCount (BUCK_DRV_EPWM2_base、
    DeadBandFallingEdgeDelay);

    ePWM_setRisingEdgeDelayCount (BUCK_DRV_EPWM2_base、
    DeadBandRisingEdgeDelay);

    // HRCAL 使用 EPWM1时钟
    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_EPWM1);

    SYSCTL_enablePeripheral (SYSCTL_Periph_CLK_EPWM2);

    HRPWM_enableAutoConversion (BUCK_DRV_EPWM1_BASE);
    HRPWM_enableAutoConversion (BUCK_DRV_EPWM2_base);

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

    您好!

    [引用 userid="404575" URL"~/support/microcontrollers/c2000/f/c2000-microcontrollers-forum/993706/tms320f280025c-up-count-mode-shadow-load-configuration-in-hrpwm-operation/3678992 #3678992]I 可以在 PWM1A 上获得高分辨率控制、但在 B 输出上不能获得高分辨率控制。  [/报价]

    对于 PWM1B、您需要启用 MEP 配置、就像上面对 PWM1A 所做的那样。
    虽然您使用死区生成 PWMB 输出/、但这是必需的
    您需要更新 CMPBHR (与 CMPAHR 相同的值)。 无论向上计数或向上向下计数模式如何、都需要执行此操作。
    此外、由于您使用的是死区、因此建议使用上数/下数计数模式。
    C:\ti\c2000Ware_3_04_00_00\driverlib\f28002x\examples\HRPWM

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

    感谢您的回复。  

    现在我知道我还需要为 PWM1B 设置 MEP 控制。  

    //EPWM1通道 B
    HRPWM_setMEPEdgeSelect (BUCK_DRV_EPWM1_base、
    HRPWM_CHANNEL B、
    HRPWM_MEP_CTRL_FALLING_EDGE);

    HRPWM_setMEPControlMode (BUCK_DRV_EPWM1_BASE、
    HRPWM_CHANNEL B、
    HRPWM_MEP_Duty_Period_CTRL);

    但我要承认、我对"您需要更新 CMPBHR (与 CMPAHR 相同的值)"这句话感到困惑。 我目前根本不更新 CMPB、因为它们是互补对。  

    我缺少什么?

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

    我还添加了以下行、但我仍然只看到 CHA 上的 HR 操作:

    HRPWM_setDeadBandMEPdgeSelect (BUCK_DRV_EPWM1_BASE、HRPWM_DB_MEP_CTRL_RED_FED);

    谢谢、  

    N

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

    您好!

    是的、您需要更新 CMPBHR (与 CMPAHR 相同的值)。 这是因为 CMPA 的 HR 组件链接到 PWMA、而 HR 组件 CMPB 链接到 PWMB。 因此、尽管您不使用 CMPB、但 HR 组件仍需要使用与 CMPAHR 相同的值进行更新(CMPBHR)、以便 PWMB 输出也具有 HR 功能。