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.

F28035的打开PWM波时问题

在产生PWM波那一瞬间会有时如下图,感觉有点不可控,有时也是正常的,不知道什么原因,求解?

正常波形如下:

 

 

 

 

 

  • 是每一次都会有吗?还是偶尔出现

  • 第一个波形, 真好是半个波形, 一般这中心对称的模式的下, 由于初始值是0 引起的. 更改大的初值看看

  • Joey Mao:

                    并不是每次都出现,但出现的概率还是挺大的。

  • Airwill:

             你说的初始值是TBCTR(时基计数器)的初始值吗,我改了后又有其他问题出现,如下图:

  • 在初始化PWM前要关掉时钟同步

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

    初始化完成后再打开。

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

    在初始化代码中,还要对下面寄存器清零:

    EPwm1Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
    EPwm1Regs.TBCTR = 0x0000; // Clear counter

    ERIC

  • Eric:

          我修改后试了,确实就是这个问题,谢谢你的回答!

  • Eric,

         你好!

         我按照你上面说的方法还是有点问题,还是会出现PWM波启动时不可控的情况。

    初始化如下:

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

    //Time Base SubModule Register
    EPwm2Regs.TBCTL.bit.PRDLD = TB_SHADOW; // set Immediate load,0x0-有阴影寄存器
    EPwm2Regs.TBPRD= 1000;
    EPwm2Regs.TBPHS.half.TBPHS =0;
    EPwm2Regs.TBCTR = 0;//时基计数器
    EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN;
    EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;//0x0-1分频
    EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1;//0x0-1分频,TBCLK = SYSCLKOUT / (HSPCLKDIV × CLKDIV)
    EPwm2Regs.TBCTL.bit.PHSEN = TB_DISABLE;//与相位相关,没使用
    EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN; //

    // Counter compare submodule registers
    EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;//CC_CTR_PRD;//0x1-当CTR=PRD时,影像寄存器里面的值装载到工作寄存器
    EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;//CC_CTR_PRD;
    EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;//0x0
    EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;

    // Action Qualifier SubModule Registers
    EPwm2Regs.AQCTLA.bit.CAU = AQ_SET;//AQ_CLEAR;
    EPwm2Regs.AQCTLA.bit.CAD = AQ_CLEAR;//AQ_SET;
    EPwm2Regs.AQCTLB.bit.CBU = AQ_CLEAR;
    EPwm2Regs.AQCTLB.bit.CBD = AQ_SET;

    EALLOW;
    EPwm2Regs.TZFRC.bit.OST = 1; // Turn off the PWM
    EDIS;
    EPwm2Regs.CMPB =400;
    EPwm2Regs.CMPA.half.CMPA = 600; //Initialize the CMP register

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

    使用时通过两个按键来切换:

    按A键执行下面代码:

    EALLOW;
    EPwm2Regs.TZFRC.bit.OST = 1;
    EDIS;

    按B键执行下面代码:

    EPwm2Regs.CMPB =400;//(Uint16)((Uint32)uiFswRegu*uiDutyRatio/100);
    EPwm2Regs.CMPA.half.CMPA =600;// (uiFswRegu-EPwm2Regs.CMPB); //Initialize the CMP register
    EPwm2Regs.TBCTR =0;//400

    EALLOW;
    EPwm2Regs.TZCLR.bit.OST = 1;
    EDIS;

    从A键向B键切换时,还是会出现问题所描述的情况,请问是什么原因?

  • EPwm2Regs.TZCLR.bit.OST = 1; 

    上面这个代码之前没有插入其他代码吧。

  • Eric,

          确实没有插入其他代码。

  • Mak

    你可以把工程附上来吗,我找时间可以测一下。

    理论上是没问题的。

    Eric

  • http://www.deyisupport.com/cfs-file.ashx/__key/communityserver-discussions-components-files/56/3750.2014051402_5F00_myDSP2802x.rar

    Eric,

          工程我已上传,我使用的开发环境是CCS3.3,F28027芯片,麻烦帮我试下,谢谢!