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.

[参考译文] CCS/TMS320F2806:交错 PWM 代码

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/939538/ccs-tms320f2806-interperting-pwm-code

器件型号:TMS320F2806

工具/软件:Code Composer Studio

大家好、

我正在尝试了解一些旧代码(2014)、但我在理解前三行时遇到了困难。
我到目前为止的理解是:

  • 从.TBPRD 到.AQCTLA 的一切内容都是关于设置 PWM A 和 B 信号来控制半个 H 桥;  
    • 这与文档中提供的示例类似。
  • PWM A 的启动为高电平、并在 CMPA 遇到低电平时切换  
  • PWM B 的启动为低电平、并在 CMPB 遇到高电平时切换

但是、前三行(AQCSFRC)似乎表明、只要加载了影子寄存器中的某个内容(在本例中、只要计数器等于周期)、输出 A 和 B 就会被强制为低电平。 因此、在一个周期后、PWM A 被强制为低电平、这似乎与以下情况相矛盾:  

  • EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;

我缺少什么?

当前在机器上运行的相关代码。

EPwm1Regs.AQCSFRC.bit.CSFA = 1;//事件计数器等周期使能强制低电平高侧电桥 //事件计数器等周期  使能强制低电平
EPwm1Regs.AQCSFRC.bit.CSFB = 1;//事件计数器的周期相等使能强制低侧电桥
EPwm1Regs.AQSFRC.bit.RLDCSF = 1;//事件计数器加载等效周期29-10-2014 -活动寄存器从影子选项重新加载(开启周期)

EPwm1Regs.TBPRD =周期;//周期= 601 TBCLK 计数
EPwm1Regs.CMPA.half.CMPA = Cmpa;//比较 A = 350 TBCLK 计数
EPwm1Regs.CMPB = CMPB;//比较 B = 200 TBCLK 计数
EPwm1Regs.TBPHS.ALL = 0;//将相位寄存器设置为零

EPwm1Regs.TBCTR = 0;//清除 TB 计数器
EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;//相位加载被禁用
EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;// TBCLK = SYSCLK。 TB_DIV1 = 1;
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;// TB_DIV1 = 1;

EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_PRD;// CTR 上的负载=零
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_PRD;// CTR 上的负载=零

EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;//动作限定器输出 A 控制寄存器.bit。 计数器等于零时的操作。 SET =高电平
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;//@Cmpa、设置为低电平;
EPwm1Regs.AQCTLB.bit.ZRO = AQ_CLEAR;
EPwm1Regs.AQCTLB.bit.CBU = AQ_SET;

此致、

Karel

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

    Karel、

    AQSFRC 位是"软件强制"位。 默认情况下、这与 TBCTR =周期没有直接关系。 RLDCSF 甚至可以在特定实例上及时加载该内容。 如果你的情况 TBCTR =周期。

    AQCSFRC 事件是否在代码中的其他位置清除? 它具有最高优先级、因此 PWM 在被清零前不应输出任何内容。

    此致、
    Cody  

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

    您好、Cody、

    感谢您的回复! 您的评论触发了对兔子洞的搜索、您是对的... 似乎该位确实在初始化脚本末尾附近的某个位置重新设置(和清除)。  

    此致、

    Karel