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.

F28027 PWM脉宽调制

使用PWM1A   pwm1B产生一对互补波形,程序配置完成后发现PWM1B的配置没起到作用,程序如下:

波形会产生,但是PWM1A   PWM1B 波形完全对称,并不互补,我尝试屏蔽PWM1B波形产生配置,发现PWM1B波形依旧可以产生,

我尝试屏蔽PWM1A波形产生配置,发现PWM1A   PWM1B 均无波形产生,请问是我哪里配置错误了吗??谢谢

EPwm1Regs.TBPRD = 1500; // Set timer period 801 TBCLKs
EPwm1Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
EPwm1Regs.TBCTR = 0x0000; // Clear counter
EPwm1Regs.CMPA.half.CMPA = 250; // Set compare A value
EPwm1Regs.CMPB = 1500; // Set Compare B value
EPwm1Regs.TBCTL.bit.CTRMODE = 2; // 增减计数
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT
EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = 0; // Load on Zero
EPwm1Regs.CMPCTL.bit.LOADBMODE = 0;
EPwm1Regs.AQCTLA.bit.CAU = 1; // Set PWM1A on event A, down count
EPwm1Regs.AQCTLA.bit.CAD = 2; // Clear PWM1A on event A, up count
EPwm1Regs.AQCTLB.bit.CBU = 2; // Set PWM1B on event B, up count
EPwm1Regs.AQCTLB.bit.CBD = 1; // Clear PWM1B on event B, down count

 

  • 是否有设置DBCTL[POLSEL]寄存器?这个就是选择为互补模式,你可以根据技术手册了解一下:
    www.ti.com/.../sprui09.pdf
  • PWM1A pwm1B 波形动作设置,我发现波形发生动作设置为互补波时,加入这个语句 EPwm1Regs.DBCTL.bit.POLSEL = 2; 波形并未改变,如果波形发生动作设置为非互补波时,加入这个语句 EPwm1Regs.DBCTL.bit.POLSEL = 2; 波形会变为互补波,请问这是为什么??

    我看手册,EPwm1Regs.DBCTL.bit.POLSEL = 2; 语句意思为: 主动高互补(AHC)。 EPWMxB被反相

    EPwm1Regs.AQCTLA.bit.CAU = 1; // Set PWM1A on event A, down count
    EPwm1Regs.AQCTLA.bit.CAD = 2; // Clear PWM1A on event A, up count
    EPwm1Regs.AQCTLB.bit.CBU = 1; // Set PWM1B on event B, up count
    EPwm1Regs.AQCTLB.bit.CBD = 2; // Clear PWM1B on event B, down count
    EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band module
    EPwm1Regs.DBCTL.bit.POLSEL = 2; //EPWMxB被反相 //DB_ACTV_HI
    EPwm1Regs.DBFED = 50; // FED = 25 TBCLKs 0.5us
    EPwm1Regs.DBRED = 50; // RED = 25 TBCLKs 0.5us

    这样设置会输出互补波!

    EPwm1Regs.AQCTLA.bit.CAU = 1; // Set PWM1A on event A, down count
    EPwm1Regs.AQCTLA.bit.CAD = 2; // Clear PWM1A on event A, up count
    EPwm1Regs.AQCTLB.bit.CBU = 2; // Set PWM1B on event B, up count
    EPwm1Regs.AQCTLB.bit.CBD = 1; // Clear PWM1B on event B, down count
    EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE; // enable Dead-band module
    EPwm1Regs.DBCTL.bit.POLSEL = 2; //EPWMxB被反相 //DB_ACTV_HI
    EPwm1Regs.DBFED = 50; // FED = 25 TBCLKs 0.5us
    EPwm1Regs.DBRED = 50; // RED = 25 TBCLKs 0.5us

    这样设置波形还是互补波!

    请问这是为什么?
  • 在你另一个新帖子里面回复了
  • 谢谢, 我没有配置 EPwm1Regs.DBCTL.bit.IN_MODE = 1; 所以默认IN_MODE 位为0.
    那么输入就就是对PWM1A上升沿,下降沿产生死区延时,而我EPwm3Regs.DBCTL.bit.POLSEL = 2;这句是对PWM1B翻转,所以波形不会有变化,是我刚开始理解错了,不过还是谢谢你