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.

关于28335调试时的问题

Other Parts Discussed in Thread: CONTROLSUITE

老师你好!我遇到个很奇怪的问题,烦请您帮忙分析一下。我只输出一个PWM。

void EPwm1Setup(); 

main()

{

........

EPwm1Setup();            //PWM输出模块,已经配置正常,能输出了

.........

for(;;)

{}

}

EPwm1Setup();

{

.........

}

问题一:按照以上这样的再RAM里运行,正常。点击运行(F5),执行。点击停止运行,停止。问题来了,在我第二次再点击运行时,还有波形输出,为什么啊?第二次点击时,应该不执行啊,停留在主循环for(;;)里啊,为什么还有波形输出?

问题二:把上面的调用函数位置换一下,不在主循环的外面调用,放到主循环里,就不执行了,没有波形输出了,这是为什么啊?

void EPwm1Setup(); 

main()

{

........

//EPwm1Setup();            //PWM输出模块,已经配置正常,能输出了

.........

for(;;)

{

EPwm1Setup();  

}

}

EPwm1Setup();

{

.........

}

针对我以上的问题,是我哪里配置出问题了,请告诉我可能问题出现的位置,我在检查,感谢

  • 那要看你这个EPwm1Setup函数里面设置的是什么啊!

    你对PWM工作的原理了解吗?PWM设置好后,就会自动计数并产生PWM,不需要你重复去调用什么函数啊。

    建议你研究一下PWM的user guide和controlSUITE中PWM的历程。

    ERIC


  • 你好,老师,我是初学,下面是我这个PWM的函数,有一些#define我就没有列举,想知道问题出在哪里?

    void EPwm1Setup()
    {

    // Setup TBCLK
    EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2; // Clock ratio to SYSCLKOUT
    EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV2;
    EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; // Count updown
    EPwm1Regs.TBPRD = EPWM1_TIMER_TBPRD; // Set timer period,10K时为1875
    EPwm1Regs.TBCTL.bit.PHSEN = 0x1; // Disable phase loading
    EPwm1Regs.TBPHS.half.TBPHS = 0x0000; // Phase is 0
    EPwm1Regs.TBCTL.bit.PRDLD =0x1;
    EPwm1Regs.TBCTR = 0x0000; // Clear counter

    // 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;

    // Set Compare values
    EPwm1Regs.CMPA.half.CMPA = 390; // Set compare A value 938 is 50%
    // EPwm1Regs.CMPB = EPWM1_MIN_CMPB; // Set Compare B value

    // Set actions
    EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM1A on Zero
    EPwm1Regs.AQCTLA.bit.CAD = 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

    // Interrupt where we will change the Compare Values
    EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event
    EPwm1Regs.ETSEL.bit.INTEN = 1; // Enable INT
    EPwm1Regs.ETPS.bit.INTPRD = 0x01; // Generate INT on 3rd event

    EPwm1Regs.ETSEL.bit.SOCAEN=1;
    EPwm1Regs.ETSEL.bit.SOCASEL=0x1;
    EPwm1Regs.ETPS.bit.SOCAPRD=0x1;

    }

  • PWM初始化做一遍就会一直出波形了,你为什么要重复的放在状态机里再去初始化?

  • 我是想控制什么时候输出这个波形。我在做直流电机控制项目,想在外部有信号输入时,在输出PWM.