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/TMS320F28377D:在同一 ePWM 通道的两个信号(即 EPWM1A 和 EPWM1B)之间生成相移

Guru**** 2609955 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/677277/ccs-tms320f28377d-generating-phase-shift-between-two-signals-of-same-epwm-channel-i-e-epwm1a-and-epwm1b

器件型号:TMS320F28377D

工具/软件:Code Composer Studio

大家好、

我可以在不同 ePWM 通道的两个信号之间生成所需的相移。 例如、我可以在 ePWM 1和 ePWM 2通道之间生成相移。 此代码工作正常。

现在、我想介绍来自同一 ePWM 通道的信号之间的相移。 例如。 我需要在 EPWM1A 和 ePWM 1B 之间进行相移。  

Con 任何人请帮我解决这个问题吗?

此致、

Haque

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

    您好、Haque、

    没有内置的方法在同一模块的 ePWM 通道之间进行相移、因为存在单独的 ePWM 模块。

    您需要使用不同的比较值和操作限定符事件来在同一模块中实现它。 实现这一目标的最简单方法是使用向上/向下计数模式。 这是因为、您基本上会有更多的比较事件、因为您可以在计数器递增计数时为 CMPA/B 创建不同的操作、而在计数器递减计数时为 CMPA/B 创建不同的操作。

    此致、

    Kris

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

    感谢您的评论。 是的、我知道很难在同一个 ePWM 模块内实现。 因此、我使用了单独的六个 ePWM 模块、并且可以在六个信号之间引入固定的相移。

    现在、我需要改变模块之间的相移(不固定)、我认为我需要更新相移寄存器(EPwm1Regs.TBPHS.bit.TBPHS)。

    请问我该怎么做? 请以下面两个 PWM 模块为例。

    此致、
    Haque

    void configure_pwm1()

    EPwm1Regs.TBPRD = 1250; //设置计时器周期
    EPwm1Regs.TBPHS.bit.TBPHS = 0x0000; //相位为0
    EPwm1Regs.TBCTR = 0x0000; //清除计数器

    //设置 TBCLK
    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_DIV2;
    EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;
    EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;//同步下流模块

    EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADODE;//每0加载一次寄存器
    EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
    EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
    EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

    //设置串联转换器的占空比
    Duty_P1 =(float) PWM_PERIOD / 2;
    EPwm1Regs.CMPA.bit.CMPA =(int) Duty_P1;
    EPwm1Regs.CMPB.bit.CMPB =(int) Duty_P1;

    //设置操作
    EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; //将 PWM1A 设置为零
    EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR;


    void configure_pwm2()

    EPwm2Regs.TBPRD = 1250; //设置计时器周期
    EPwm2Regs.TBPHS.bit.TBPHS = 156.2; //相位为22.5度(TBPHS 156)
    EPwm2Regs.TBCTR = 0x0000; //清除计数器

    //设置 TBCLK
    EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;//向上计数
    EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE; ////从机模块-启用相位加载
    EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; //时钟与 SYSCLKOUT 的比率
    EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV2;
    EPwm2Regs.TBCTL.bit.PHSDIR = TB_DOWN;//同步时倒计数(=120度)
    EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW;
    EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;//同步直通

    EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADODE;//每0加载一次寄存器
    EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
    EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
    EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;


    Duty_P2 =(float) PWM_PERIOD / 2;
    EPwm2Regs.CMPA.bit.CMPA =(int) Duty_P2;
    EPwm2Regs.CMPB.bit.CMPB =(int) Duty_P2;

    //设置操作
    EPwm2Regs.AQCTLA.bit.CAU = AQ_SET; //将 PWM1A 设置为零
    EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR;

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

    您好、Haque、

    很抱歉耽误你的回答。

    "现在、我需要改变模块之间的相移(非固定)、我认为我需要更新相移寄存器(EPwm1Regs.TBPHS.bit.TBPHS)。"

    是的、你是对的。 您需要在 ISR 中更新 TBPHS。  

    我有两项建议:

    由于您使用的是向上/向下计数模式、因此需要小心设置 PHSDIR 寄存器。  

    此外、请注意转换期间的比较器值、有时在缺少比较事件的情况下、它需要与 TBPHS 一起更新。 您可以参考下面的线程以及利用变量 TBPHS 的相移全桥应用报告。 controlSUIT 中还有一个 HVPSFB 项目供您参考。

    e2e.ti.com/.../675947

    谢谢。

    此致、

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

    感谢你的答复。 我正在进行这方面的工作。

    但是、您能否查看上述代码并添加几行代码、我应该在哪里准确地进行更改以使其正确完成?

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

    我无法帮助您添加代码。 您的原始代码似乎正常。 不过、我想您可能可以查看《f2837x 技术参考手册》中的"14.4.3.2时基时钟同步"、并按照步骤在初始化代码中设置同步、并在 ISR 中添加更多代码以更新 TBPHS。 另请注意图14-7。 配置同步链传播路径时的时基计数器同步方案。
    最重要的是、我仍然认为我之前在 controlSUIT 中提到的 HVPSFB 项目应该能帮助您快速入门。
    希望这对您有所帮助。

    此致、