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.

[参考译文] TMS320F28065:ePWM 断电配置

Guru**** 2501855 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/964953/tms320f28065-epwm-updown-config

器件型号:TMS320F28065

您好!

我想从 ePWM 1A 和1B 生成2个脉冲。 1A 设置为零并在 CAU 清零、1B 设置为 PRD 并在 CAD 清零。 IM 无法获取所需信息。 如果可能、请告诉我。

当前使用的配置:

EPwm1Regs.TBPRD = 3000;// 15kHz
EPwm1Regs.TBPHS.Half.TBPHS = 0x0000;  
EPwm1Regs.TBCTR = 0x0000;

EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;  

EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;  
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;  
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;

EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;  
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

EPwm1Regs.CMPA.half.CMPA = 2000;//可以变化

EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;  
EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;  

EPwm1Regs.AQCTLB.bit.PRD = AQ_SET;  
EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR;

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

    尊敬的 Ravi:

    这应该很有可能。 您可以描述您当前获得的波形、或者描述"我无法获得所需"的含义吗?

    您对以下行的配置看起来很好:  

    EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR;

    相反、这应该是:

    EPwm1Regs.AQCTLB.bit.CAD = AQ_CLEAR;

    此致、

    Marlyn

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

    女士:

    我已经尝试过  

    Pwm1Regs.AQCTLB.bit.CAD = AQ_CLEAR;

    问题在于:

    需要获得相同的位置占空比的1A 和1B。  

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

    尊敬的 Ravi:

    要获得相同的正占空比、您可以使用 CMPA 和 CMPB 值。

    为所需的占空比配置 CMPA。 在您的示例中、您需要10%的正占空比、而 TBPRD 值为3000、因此您需要600的 CMPA 值。

    将 CMPB 值设置为 TBPRD-CMPA (3000-600=2400)

    然后、您可以使用以下配置设置所需的操作:  

    EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;
    EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;
    
    EPwm1Regs.AQCTLB.bit.PRD = AQ_SET;
    EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR; 

    此致、

    Marlyn

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

    女士:

    我已尝试使用以下设置:

    CMPA 值为600。 (在调试中使用变量来更改 CMPA 和 CMPB)

    将 CMPB 值设置为 TBPRD-CMPA (3000-600=2400)(尝试使用 TBPRD-CMPA)

    在1A 和1B 上仍然出现不均匀的位置占空比。  

    想知道我是否缺少任何其他设置。

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

    Ravi、

    您是否有方法来测量您观察到的 PWM1A 和 PWM1B 的实际正占空比值是多少?

    您是否动态更改 CMPA 和 CMPB 的值? 如果是这样、让我们现在尝试隔离此问题、只需关注两个输出的10% pos 占空比匹配。

    这是我在 c 文件中使用的代码、我可以在两个 A/B 输出上看到10%的 pos 占空比。 请尝试在您的平台上运行此版本。:

    void main (void)
    {
    //
    //步骤1. 初始化系统控制:
    // PLL、安全装置、启用外设时钟
    //
    InitSysCtrl();
    
    //
    //为 ePWM1插入 GPIO 引脚
    //
    InitEPwm1Gpio();
    
    //
    //初始化 ePWM
    //
    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=0;
    EDIS;
    
    InitEPwm1Examples();
    
    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=1;
    EDIS;
    
    for (;;)
    {
    _asm (" NOP");
    }
    }
    
    空
    InitEPwm1Examples()
    {
    //
    //设置 TBCLK
    //
    EPwm1Regs.TBPRD = 3000; //设置计时器周期
    EPwm1Regs.TBPHS.Half.TBPHS = 0x0000; //相位为0
    EPwm1Regs.TBCTR = 0x0000; //清除计数器
    
    //
    //设置比较值
    //
    EPwm1Regs.CMPA.half.CMPA = 600; //设置比较 A 值
    EPwm1Regs.CMPB= 2400; //设置比较 B 值
    
    //
    //设置计数器模式
    //
    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//向上计数
    EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; //禁用相位加载
    EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; //时钟与 SYSCLKOUT 的比率
    EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
    
    //
    //设置隐藏
    //
    EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
    EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
    EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;//零负载
    EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
    
    //
    //设置操作
    //
    EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET;//在事件 A、零上设置 PWM1A
    EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;//在事件 A 上清除 PWM1A、递增计数
    
    EPwm1Regs.AQCTLB.bit.PRD = AQ_SET;//在事件 A、周期上设置 PWM1B
    EPwm1Regs.AQCTLB.bit.CBD = AQ_CLEAR;//在事件 B 上清除 PWM1B,倒计数
    } 

    此致、

    Marlyn