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.

[参考译文] TMS320F28377S:当 CMPA 大于 TBPRD 时、PWMxA 输出脉冲

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/603181/tms320f28377s-pwmxa-output-pulse-when-cmpa-is-greater-than-tbprd

器件型号:TMS320F28377S

您好!

当 CMPA 大于 TBPRD 时、客户遇到一个有关 PWM 的问题。

1)向上向下计数模式;

2)周期为2222;

3) 3)当 CTR =零且 CTR = PRD 时、通过影子寄存器更新 CMPA。

CMPA 从0增加到每个周期10。 因此、CMPA 将为0、然后是10、20、30等。

当 CMPA 增加时、PWM 占空比也会增加。 在 CMPA 加载2220后、黄色线会有一个切换。 此时、PWM 工作正常。 在下一个 CTR==PRD 中、2220通过影子加载到 CMPA。 在下一个周期中、CMPA 加载2230、黄色线中有另一个切换。 在下一个 CTR=PRD 中、2230被加载到 CMPA。 之后、PWM 应该像以前一样输出高电平、但有一个周期低电平。 我们想知道原因。 如果加载的是2222而不是2230、则不存在这种问题。

在示波器中、绿线中有22us 低电平的延迟。 我们将2230的负载延迟一个周期周期。

非常感谢。

BR、Jordan

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

    TRM 的 ePWM 部分中详细介绍了这种行为。 另外,请参考此主题:
    e2e.ti.com/.../123483

    此致、
    Gautam
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Gautam、
    感谢您提供信息。
    但是、这适用于 Piccolo、而不是 F28377S。
    对于 F28377S、应可通过将 CMPA 设置为零或周期来直接访问0%和100%。
    BR、Jordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    约旦、您好!

    您的操作限定符有哪些设置? 请提供以下事件发生的情况(输出设置为高电平、低电平或无任何内容):

    CTR = 0
    CTR = CMPA
    CTR = CMPB
    CTR = PRD

    如果您也可以复制和粘贴初始化代码、这将非常有用。

    此致、
    Kris

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Kris、
    以下是代码:
    EPwm2Regs.TBPRD = PWMPERIOD;//设置计时器周期45kHz TBCLK
    EPwm2Regs.TBPHS.bit.TBPHS = 0x0000;//相位为0
    EPwm2Regs.TBCTR = 0x0000;//清除计数器
    //设置比较值
    EPwm2Regs.CMPA.bit.CMPA =1;//设置比较值
    EPwm2Regs.CMPB.bit.CMPB =1;//设置比较 B 值
    //设置计数器模式
    EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//向上计数和双降
    EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE;//禁用相位加载
    EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//时钟与 SYSCLKOUT 的比率
    EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;
    //设置隐藏
    EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
    EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
    EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_Zero_PRD;//零和周期上的负载
    EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_Zero_PRD;
    //设置 DB
    EPwm2Regs.DBCTL.bit.IN_MODE=0;
    EPwm2Regs.DBCTL.bit.POLSEL=2;
    EPwm2Regs.DBCTL.bit.OUT_MODE=3;
    //EPwm2Regs.DBFED.bit.DBFED=0;
    //EPwm2Regs.DBRED.bit.DBRED=50;//200=1us
    //设置操作
    EPwm2Regs.AQCTLA.bit.CAU = AQ_SET;//在事件 A 上设置 PWM1A、递增//计数
    EPwm2Regs.AQCTLA.bit.CAD =AQ_CLEAR;//在事件 A 上清除 PWM1A,//递减计数
    EPwm2Regs.AQCTLB.bit.CBU =AQ_SET;//在事件 B 上设置 PWM1B、向上//计数
    EPwm2Regs.AQCTLB.bit.CBD =AQ_CLEAR;//在事件 B 上清除 PWM1B,//递减计数

    EPwm2Regs.AQSFRC.bit.RLDSF =3;

    //ePWM SOC 设置
    EPwm2Regs.ETSEL.bit.SOCAEN = 0;//禁用组上的 SOC
    EPwm2Regs.ETSEL.bit.SOCASEL = 3;//选择0或周期上的 SOC
    EPwm2Regs.ETPS.bit.SOCAPRD = 1;//在发生第一个事件时生成脉冲

    //中断,我们将在其中更改比较值
    EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO;//选择零事件时的 INT
    EPwm2Regs.ETSEL.bit.INTEN = 0;//禁用 INT
    EPwm2Regs.ETPS.bit.INTPRD = et_1st;//在发生第一个事件时生成 INT
    //设置 TZ
    //EPwm2Regs.TZSEL.bit.OSHT1 = 1;单次TZ后,不能清 μ s
    EALLOW;
    EPwm2Regs.TZCTL.bit.TZA = TZ_FORCE_HI;
    EPwm2Regs.TZCTL.bit.TSB = TZ_FORCE_HI;
    EDIS;

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

    约旦、您好!

    如果影子->活动加载在 CTR=0时生效,则最后一个 CMPA 事件将是 CAD,用于清除 PWM。 当 CMPA > PRD 的影子值加载到下一个周期时、将永远不会达到 CAU 以再次将 PWM 设置为高电平。 这就是您看到低脉冲的原因。

    这回答了问题吗?

    此致、

    Kris

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Kris、
    让我来尝试并回复您。
    非常感谢。
    BR、Jordan
x 出现错误。请重试或与管理员联系。