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.

[参考译文] TMS320F28379D:快速电流环路与放大器;PWM 立即更新

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/903267/tms320f28379d-fast-current-loop-pwm-immediate-update

器件型号:TMS320F28379D
主题中讨论的其他器件:TMDXIDDK379DC2000WARE

您好:

快速电流环路的引入提到了 PWM 立即更新模式、这是否指 CMPCTL [SHDWAMODE]= 1。

在这种情况下、它是否会导致 PWM 更新混乱、如下图所述

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

    当使用立即模式时、您必须更加小心写入寄存器的时间。 选择一个不使用 CMPS 中值的安全位置、然后更新它们。

    NIMA

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

    感谢您的回复、我仍然无法确定如何立即更新 PWM。  ‘C:\ti\c2000\C2000Ware_MotorControl_SDK_3_00_00\solutions\tmdxiddk379d\f2837x’处的快速电流环路相关代码 如下:

    FCL_initPWM (EPWM1_base、EPWM2_base、EPWM3_base);
    #define EPWM1_BASE 0x00004000U // EPWM1
    #define EPWM2_base 0x00004100U // EPWM2.
    #define EPWM3_base 0x00004200U // EPWM3

    void FCL_initPWM (uint32_t BaseA、uint32_t baseB、uint32_t BASEC)

    ePWM_DisableCounterCompareShadowImage LoadMode (BaseA、ePWM_COUNTER_COMPARE_A);
    ePWM_DisableCounterCompareShadowImage LoadMode (baseB、ePWM_COUNTER_COMPARE_A);
    ePWM_DisableCounterCompareShadowImage LoadMode (BASEC、ePWM_COUNTER_COMPARE_A);
    pwmCompA =(uint32_t *)(BaseA + ePWM_O_CMPA);
    pwmCompB =(uint32_t *)(baseB + ePWM_O_CMPA);
    pwmCompC =(uint32_t *)(BASEC + ePWM_O_CMPA);
    返回;

    typedef 枚举

    ePWM_COUNTER_COMPARE_A = 0、//!<计数器比较 A
    ePWM_COUNTER_COMPARE_B = 2、//!<计数器比较 B
    ePWM_COUNTER_COMPARE_C = 5、//!<计数器比较 C
    ePWM_COUNTER_COMPARE_D = 7 //!<计数器比较 D
    } ePWM_CounterCompareModule;

    静态内联空
    EPWM_DisableCounterCompareShadowImage LoadMode (uint32_t base、
    ePWM_CounterCompareModule 兼容模块)

    uint16_t shadowModeOffset;
    uint32_t 寄存器偏移;

    //
    //检查参数
    //
    assert (ePWM_isBaseValid (base));

    if ((compModule == ePWM_COUNTER_COMPARE_A)||
    (COMPModule = ePWM_COUNTER_COMPARE_C))

    shadowModeOffset = 4U;

    其他

    shadowModeOffset = 6U;

    //
    //获取寄存器偏移。 用于 A/B 或的 ePWM_O_CMPCTL
    // ePWM_O_CMPCTL2用于 C&D
    //
    寄存器偏移= base + ePWM_O_CMPCTL +((uint32_t) compModule & 0x1U);

    //
    //禁用影子加载模式。
    //
    HWREGH (registerOffset)=(HWREGH (registerOffset)|
    (0x1U <<shadowModeOffset);

    其中:base=0x00004000U、compModule=0,因此、registerOffset=0x00004000U+0x8U+0,指向 EPWM_CMPCTL_LOADAMODE、根据代码注释、是否应指向 EPWM_CMPCTL_SHDWAMODE 以激活 PWM 立即更新模式?

    我认为有什么问题?

    我很抱歉再次给你带来麻烦。

    我已经准备好了。谢谢大家。