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.

TMS320F28062: AQCSFRC采用影子寄存器模式,波形还是不完整

Part Number: TMS320F28062

EPwm1配置为增减计数模式

EPwm1Regs.AQSFRC.bit.RLDCSF = 0; //conter = zero时load

在增减计数的任意时刻写入EPwm1Regs.AQCSFRC.all = 0x0;或者EPwm1Regs.AQCSFRC.all = 0x1;出现脉宽不完整的情况

  • 你好,脉宽不完整具体是什么情况?能否给个图示指明一下。

  • 比如我想封波的时候写EPwm1Regs.AQCSFRC.all = 0x1;按理来说应该在counter = zero,AQCSFRC从shadow 加载的下个时钟沿生效,之后不会出现高电平,现在却是会多出一个不完整的脉冲

  • 程序中有没有设置死区?互补PWM输出?

  • 没有用死区,也没有互补输出,以下是初始化代码

    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    EPwm1Regs.TBCTR = 0;
    u16Status = SFO_INCOMPLETE;
    while(u16Status == SFO_INCOMPLETE)// Call until complete
    {
    u16Status = SFO();// exceeds maximum of 255.
    if(u16Status == SFO_ERROR)
    {
    ESTOP0; // Stop here and handle error
    }
    }
    EALLOW;
    SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // Stop all the TB clocks
    EPwm1Regs.TBCTR = 0; // clear
    EPwm1Regs.TBPRD = cPwmPrd; // 200K
    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; //
    EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // TBCTRTBPHS
    EPwm1Regs.TBPHS.half.TBPHS = 0; // TBPHS
    EPwm1Regs.TBPHS.half.TBPHSHR = 0;
    EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW; // (TBCTR=0)TBPRB
    EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO; // TBCTR=0---
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • 试一下把这部分代码

    Fullscreen
    1
    2
    EPwm1Regs.AQSFRC.bit.RLDCSF = 0; // ()AQSFRC
    EPwm1Regs.AQCSFRC.all = 0x01; // PWMxA force low
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    放到这部分代码后面呢?

    Fullscreen
    1
    2
    3
    4
    EPwm1Regs.AQCTLA.bit.CBD = AQ_SET; // TBCTR=TBPRD PWMxA
    EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // TBCTR=CMPA TBCTRPWMxA
    EPwm1Regs.AQCTLB.bit.CBD = AQ_SET; // TBCTR=TBPRD PWMxB
    EPwm1Regs.AQCTLB.bit.CAD = AQ_CLEAR; // TBCTR=CMPB TBCTRPWMxB
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

  • Fullscreen
    1
    2
    3
    4
    EPwm1Regs.AQCTLA.bit.CBD = AQ_SET; // TBCTR=TBPRD PWMxA
    EPwm1Regs.AQCTLA.bit.CAD = AQ_CLEAR; // TBCTR=CMPA TBCTRPWMxA
    EPwm1Regs.AQCTLB.bit.CBD = AQ_SET; // TBCTR=TBPRD PWMxB
    EPwm1Regs.AQCTLB.bit.CAD = AQ_CLEAR; // TBCTR=CMPB TBCTRPWMxB
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    上面这段,只在初始化的时候设置了,其他地方没有更改

    EPwm1Regs.AQCSFRC.all = 0x01;只在中断里面经常调用

    波形不完整的现象极少出现,大部分时候还是能起作用的

  • 问题已解决,软件和硬件共同的问题,非常感谢你的回答