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.

[参考译文] TMS320F28035:如何在 ePWM 模块中设置 LOADAMODE/LOADBMODE 模块?

Guru**** 2546020 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/626685/tms320f28035-how-to-set-loadamode-loadbmode-valule-in-epwm-module

器件型号:TMS320F28035

你(们)好  

我询问答案 如何在 ePWM 模块中设置 LOADAMODE/LOADBMODE 模块、CTR 上的负载=零、 CTR 上的负载= PRD 或 CTR =零或 CTR = PRD 上的负载?

设置 LOADAMODE/LOADBMODE 模块时的主要考虑因素是什么? 谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    LOADxMODE 位域允许用户在发生活动寄存器更新时定义 PWM 模式中的特定点。 此功能可确保比较寄存器重载在每个开关周期内是确定的。

    例如、考虑这样的情况:您要从发生 CTR=ZERO 事件时触发的中断调制简单 PWM 模式的占空比。 ISR 需要有限数量的周期来执行、因此如果新计算的占空比大于该数量、则更新会在 ISR 内部立即发生、新占空比在同一 PWM 周期中生效。

    但是、如果您的新占空比小于 ISR 周期计数、则写入新比较值时、PWM 计时器将已经传递该值、而您的 PWM 将在该周期中保留较旧的占空比值。 在 PWM 模式中的特定点强制执行影子到活动更新可避免
    PWM 更新不一致或错误。 当需要复杂的 PWM 模式时、单独定义 A 和 B 比较器更新可提供灵活性。

    此致、

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

    下面是数字电源库中的 PWM_2ch_UpDwnCnt_CNF 函数。 我们可以看到 EPWMA AQ 设置为 AQ_SET/AQ_CLEAR、

    LOADAMODE 设置为 CC_CTR_ZERO、而 EPWMB AQ 设置为 AQ_CLEAR/AQ_SET、LOADBODE 设置为 CC_CTR_PRD,

    LOADxMODE 设置是否与 AQ SET 相关?

    ////////////////////

    void PWM_2ch_UpDwnCnt_CNF (int16 n、int16周期、int16模式、int16相)

    //时基子模块寄存器
    (* ePWM[n]).TBCTL.bit.PRDLD = TB_SHADOW;//设置影子加载
    (* ePWM[n]).TBPRD =周期/2;//由于递增-递减计数而产生的半个周期
    (* ePWM[n]).TBPHS.Half.TBPHS = 0;
    (* ePWM[n]).TBCTR = 0;
    (* ePWM[n]).TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
    (* ePWM[n]).TBCTL.bit.HSPCLKDIV = TB_DIV1;
    (* ePWM[n]).TBCTL.bit.CLKDIV = TB_DIV1;

    if (mode = 1)//配置为主设备

    (* ePWM[n]).TBCTL.bit.PHSEN = TB_DISABLE;
    (* ePWM[n]).TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;//同步"下流"

    if (mode = 0)//配置为从机(注意:用于补偿逻辑延迟的 PHAS+2值)

    (* ePWM[n]).TBCTL.bit.PHSEN = TB_ENABLE;
    (* ePWM[n]).TBCTL.bit.SYNCOSEL = TB_SYNC_IN;

    if ((0 <= PHASE)&&(PHASE <= 2))

    (* ePWM[n]).TBPHS.Half.TBPHS =(两相);
    (* ePWM[n]).TBCTL.bit.PHSDIR = TB_UP;//设置为同步后向上计数

    否则、如果((2 <相位)&&(相位<=周期/2+2))

    (* ePWM[n]).TBPHS.half.TBPHS =(2相);
    (* ePWM[n]).TBCTL.bit.PHSDIR = TB_DOWN;//设置为同步后倒计数

    否则、如果(((Period/2+2 < PHASE)&&(PHASE <= PERIOD))

    (* ePWM[n]).TBPHS.half.TBPHS =(周期-相位+2);
    (* ePWM[n]).TBCTL.bit.PHSDIR = TB_UP;//设置为同步后向上计数



    //计数器比较子模块寄存器
    (* ePWM[n]).cmpa.half.cmpA =(周期/2)/2;//初始设置占空比50%
    (* ePWM[n]).cmPCTL.bit.SHDWAMODE = CC_SHADOW;
    (* ePWM[n]).cmPCTL.bit.LOADAMODE = CC_CTR_ZERO;
    //操作限定符子模块寄存器
    (* ePWM[n]).AQCTLA.bit.CAU = AQ_SET;
    (* ePWM[n]).AQCTLA.bit.CAD = AQ_CLEAR;

    //计数器比较子模块寄存器
    (* ePWM[n]).CMPB =(周期/2)/2;//初始设置占空比50%
    (* ePWM[n]).cmPCTL.bit.SHDWBMODE = CC_SHADOW;
    (* ePWM[n]).cmPCTL.bit.LOADBMODE = CC_CTR_PRD;
    //操作限定符子模块寄存器
    (* ePWM[n]).AQCTLB.bit.CBU = AQ_CLEAR;
    (* ePWM[n]).AQCTLB.bit.CBD = AQ_SET;
    //(* ePWM[n]).AQCTLB.bit.CBD = AQ_CLEAR;//关闭 PWMB……测试*******
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Qui、

    LOADxMODE 独立于 AQ 置位或清零:它仅决定在每个 PWM 周期中发生影子到活动负载的时间。  AQ 设置决定了比较匹配引脚上的动作。

    在您发布的代码中、CMPA 从 CTR=0上的影子加载、而 CMPB 从 CTR=PRD 上的影子加载。  AQ 设置不变:A 输出为高电平有效、B 输出为低电平有效;因此它们形成互补对。 PWM 模式类似于所连接的模式。  LOADxMODE 位唯一要做的就是影响影子到活动更新。

    此致、

    Richard

    e2e.ti.com/.../6765.ePWM.pdf

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