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.

ePwm相移

Other Parts Discussed in Thread: C2000WARE

C2000的epwm相移的时候,只有在pwm设置为向上向下计数模式么?能不能在设置向上计数模式的情况下使用?

  • 可以使用向上模式的,我们也提供的相关的例程,以2837X为例,您可以参考

    \C2000Ware_3_01_00_00\driverlib\f2837xd\examples\cpu1\epwm

    的 epwm_ex3_synchronization
  • 你们有没有epwm关于同步或者相移的资料?
  • 基本都包含在了用户指南中,如第1861页: Chapter 15 Enhanced Pulse Width Modulator (ePWM)

    www.ti.com.cn/.../spruhm8i.pdf
  • void PwmInit(void)
    {
    InitEPwm1Gpio();
    InitEPwm2Gpio();

    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0;
    EPwm1Regs.TBPRD = 4000-1; //频率15Khz
    EPwm1Regs.CMPA.half.CMPA = 2000-1; // set duty 50%

    EPwm1Regs.TBPHS.all = 0;
    EPwm1Regs.TBCTL.all=0;
    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; //向上计数
    EPwm1Regs.TBCTL.bit.PHSEN = TB_ENABLE;
    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.TBCTL.bit.FREE_SOFT = 0x11;

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

    EPwm1Regs.TBSTS.all=0;
    EPwm1Regs.TBPHS.half.TBPHS=0;//移相0度
    EPwm1Regs.TBCTR=0;

    EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // PWM toggle high/low
    EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;


    EPwm2Regs.TBPRD = 4000-1; //频率15Khz
    EPwm2Regs.TBPRDHR=1<<8;
    EPwm2Regs.CMPA.half.CMPA = 2000-1; // set duty 50% initially

    EPwm2Regs.TBPHS.all = 0;
    EPwm2Regs.TBCTL.all=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.TBCTL.bit.FREE_SOFT = 0x11;

    EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
    EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;

    EPwm2Regs.TBSTS.all=0;
    EPwm2Regs.TBPHS.half.TBPHS=500;//相移45度
    EPwm2Regs.TBPHS.half.TBPHSHR=0;
    EPwm2Regs.TBCTR=0;

    EPwm2Regs.AQCTLA.bit.ZRO = AQ_SET; // PWM toggle high/low
    EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR;
    EPwm2Regs.AQCTLB.bit.ZRO = AQ_SET;
    EPwm2Regs.AQCTLB.bit.CBU = AQ_CLEAR;

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

    为什么这个程序的结果是pwm1A的相位比pwm2A的相位滞后45度,按照资料上说,应该是pwm2A比pwm1A滞后45度才对,看图片

    上图第二张是datasheet的资料,从资料上看,pwm1A在周期处,也就是计算器为0的时候,产生一个同步信号,当产生同步信号后,pwm2在这个时间点上,相移45度pwm2A开始产生高电平,我的理解是这样,不知道是否理解对,如果理解对的话,为什么实际产生的波形却不是pwm2A滞后pqm1A 45度的相位角呢?那个pwm1A的同步信号在哪里产生的呢?

  • 很抱歉,之前漏掉了这个帖子。

    请问您使用的是哪款芯片?我们来测试一下您的程序,谢谢
  • 已经在私信中回复,请查看