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.

dsp28035 epwm

EPwm1Regs.TBCTL.bit.PRDLD = TB_IMMEDIATE; // Set immediate load
EPwm1Regs.TBPRD = period; // PWM frequency = 1 / perio

这两句是讲epwm文档上的103页的两句。

如果把这两句颠倒  那么先前配置的TBPRD就会清0  ,为什么会这样?配置也要讲先后顺序?

  • 周期寄存器配置肯定与上一句无关系 可能是其他的配置导致清零了
    如下面配置:
    void Epwm1_Init(int16 PRD)
    {
    EPwm1Regs.TBPRD = PRD ; //设置周期
    EPwm1Regs.CMPA.half.CMPA = 0; //设置占空比
    EPwm1Regs.CMPB = 0;


    // Setup TBCLK
    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; //递增模式
    //EPwm1Regs.TBCTL.bit.CTRMODE =TB_COUNT_UPDOWN; //增减模式
    EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; // Disable phase loading
    EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW; // Disable phase loading
    EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_DISABLE; //
    EPwm1Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
    EPwm1Regs.TBCTR = 0x0000; // Clear counter
    EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT
    EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1; // TBCLK = SYSCLKOUT/(HSPCLKDIV*CLKDIV)


    // Setup shadow register load on ZERO
    EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW;
    EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW;
    EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO;
    EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;


    // 递增模式的动作
    EPwm1Regs.AQCTLA.bit.ZRO = AQ_SET; // Set PWM1A on Zero
    EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR; // Clear PWM1A on event A, up count
    EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET; // Set PWM1B on Zero
    EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR; // Clear PWM1B on event B, up count
    }
  • 配置是没有先后顺序的,建议您参考下例程进行配置。
  • 不知道你试过没有,我觉得和顺序也没关系,用的别的处理器没遇到过。
  • 现在使用立即模式,而不是阴影模式。
  • 我在一个项目中要跟踪电网的工频,虽然是50hz,但是实际还是有微小的波动,所以要用立即模式,来不断改周期寄存器TBPRD的值,并且我想在计数器值为0时发生中断,结果进了中断就出不来,仿真时发现,当配置立即模式这句话后TBPRD就为0了。
  • 请问,你跟踪电网频率采用的什么方法?怎么检测实现的?