TI E2E™ 设计支持论坛将于 5 月 30 日至 6 月 1 日进行维护。如果您在此期间需要技术支持,请联系 TI 的客户支持中心寻求帮助。

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.

[参考译文] TMS320F2.8027万F:无法生成相移PWM

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/664339/tms320f28027f-cannot-generate-phase-shifted-pwm

部件号:TMS320F2.8027万F

您好,

我很难在PWM通道1和2之间生成相移。 我一直在尝试按照ePWM参考指南"控制零电压开关全桥(ZVSFB)转换器"中的示例进行操作,但我无法获取要编译的代码,因为有错误说明:

1)"EPwm2Regs.TBPHS = 1200-300;"不能为int类型

2)"EPwm1Regs.CMPA = 600;"不能为int类型。  

我尝试将1)更改为 "EPwm2Regs.TBPHS.ALL = 1200-300";和2)更改为"EPwm1Regs.CMPA.ALL = 600",以使编译器停止抱怨,但我没有观察到GPIO0 (ePWM1A)或GPIO2 (ePWM2A)的任何输出。 我已经通过GPIO手柄在代码中单独设置了GPIO (使用PWM模块和禁用的上拉电阻进行多路复用)。

有人能提供帮助吗?

谢谢!

Jeff

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

    你好,Jeff。

    问题分配不正确。  

    TBPHS和CMPA寄存器是两个寄存器的组合:用于普通ePWM和高分辨率ePWM。 因此,TBPHS实际上包含TBPHS.Bit.TBPHS部件和TBPHS.Bit.TBPHSHR部件(最后一个是高分辨率部件)。 CMPA的故事也是如此。 每个寄存器的HR部分也驻留在32位单词"all"的0:15位中。 "通用"部分位于位16-31中。

    所以当你写"CMPA.ALL = 0xFFF"时你得到"ALL = 0x0000 0FFF"-你实际上把这个数字写在16位的下面。 因此,您得到CMPAHR = 0xFFF和CMPA = 0。

    解决方案是以"CMPA.bit.CMPA"和"TBPHS.bit.TBPHS"访问注册器。 您可以尝试一下吗?

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

    谢谢,我在将TBPHS.Halife.TBPHS设置为整数值时实现了相移。 不过,我还有一个问题。

    我相信我已经同步了ePWM1A和ePWM2A。 但是当我设置:

    EPwm2Regs.TBPHS.Halt.TBPHS = 0,我看到信号为8°反相。
    EPwm2Regs.TBPHS.Halt.TBPHS = 1,我看到信号为4°反相。
    EPwm2Regs.TBPHS.Halt.TBPHS = 2,我看到信号为0°反相,因此处于相位。

    我担心这意味着我某种程度上打乱了PWM模块之间的同步,因为当它们之间的相位被编程为0时,它们仍然稍微脱离相位。 是否有人知道我为什么会有这种偏差? 我的代码如下所示:

    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
    EDIS;

    HRPWM1_Config (80); // ePWM1目标,周期= 80,产生750 KHz
    HRPWM2_Config (80); // ePWM2目标,周期= 80

    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1;
    EDIS;

    void HRPWM1_Config (UINT16句点)

    EPwm1Regs.TBPRD =周期1; // PWM频率= 1/周期
    EPwm1Regs.CMPA.Half.CMPA =周期/2; //初始设置占空比50 %
    EPwm1Regs.TBPHS.Half.TBPHS = 0;
    EPwm1Regs.TBCTR = 0;
    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;
    EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;

    EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
    EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
    EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHAME;
    EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADO;

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

    Void HRPWM2_Config (UINT16句点)

    //使用HRPWM的ePWM1寄存器配置

    EPwm2Regs.TBPRD =周期1; // PWM频率= 1/周期
    EPwm2Regs.CMPA.Half.CMPA =周期/2; //初始设置占空比50 %
    EPwm2Regs.TBPHS.Half.TBPHS = 0;
    EPwm2Regs.TBCTR = 0;
    EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
    EPwm2Regs.TBCTL.bit.PHSEN = TB_ENable;
    EPwm2Regs.TBCTL.bit.PRDLD = TB_shadow;
    EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;
    EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;
    EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;
    EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHAME;
    EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADO;
    EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
    EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;


    EPwm2Regs.AQCTLA.bit.ZRO = AQ_SET;
    EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR;
    }
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    嗯...

    我想您可以在SPRUGE9文档(Piccolo ePWM用户手册)的部分2.2 .2.3 "Time-base counter synchronization"中找到一些帮助。 据说,当ePWM时钟速度等于SYSCLKOUT (在您的情况下,因为您将CLKDIV和HSPCLKDIV设置为"DIV1")时,同步需要2个周期。

    因此,如果您将TBPHS设置为0,这只是给您9个周期转换的值:当TBCTR1为“0”时,将给出同步脉冲,但2个周期后,相位“0”将加载到TBCTR2,因此TBCTR1此时将为“2”。 另外,我想你们实际上看到的是4.5 和9度的延迟,因为360/80= 4.5。

    我认为这甚至不是问题,而是ePWM模块的特殊行为=)

    希望这有所帮助。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jeff,
    Disona正确,在第一次PWM同步生成和后续PWM模块同步之间存在轻微延迟。 此延迟仅在第一个同步模块和第二个同步模块之间。 如果您先将PWM1同步到PWM2,然后再同步到PWM3,则PWM2和PWM3的延迟时间将比PWM1晚2个周期。 PWM3不会比PMW2晚2个周期。

    此致,
    科迪
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Jeff,
    由于不活动,我将关闭该主题,如果您有更多问题,请随时开始新的主题。

    此致,
    科迪