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.

28377D EPWM

/********* EPWM1 ***************/
EPwm1Regs.TBPRD = 9999;

EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE;
EPwm1Regs.TBCTL.bit.PRDLD = TB_SHADOW;
EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;

EPwm1Regs.CMPCTL.bit.SHDWAFULL = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.SHDWBFULL = CC_SHADOW;
EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; // Load on Zero
EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;
EPwm1Regs.TBCTR = 0;

EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV1;
EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1;

EPwm1Regs.CMPA.bit.CMPA = 2000;
EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM1A on Zero
EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR;

//EPWM7
EPwm7Regs.TBPRD = PWM7_TS ;
EPwm7Regs.TBPHS.bit.TBPHS = 0x0000; // Phase is 0
EPwm7Regs.TBCTR = 0x0000; // Clear counter

//TBCLK = 100M
EPwm7Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP;
EPwm7Regs.TBCTL.bit.PHSEN = TB_DISABLE;
EPwm7Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // Clock ratio to SYSCLKOUT
EPwm7Regs.TBCTL.bit.CLKDIV = TB_DIV1;

EPwm7Regs.TBCTL.bit.PRDLD = TB_SHADOW ;


EPwm7Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO ; //脉冲中断源 0计数0 1计数周期值 3计数0或周期值 4增计数过程中A周期比较值 5减计数过程中A周期比较值 6增计数过程中B周期比较值 7减计数过程中B周期比较值
EPwm7Regs.ETSEL.bit.INTEN = 1 ;
EPwm7Regs.ETPS.bit.INTPRD = ET_1ST; //每次计数到周期值就产生一个中断(在产生一个中断前需要产生几次中断事件发生)

EPwm7Regs.ETSEL.bit.SOCAEN = 1 ; // Enable SOC on A group
EPwm7Regs.ETSEL.bit.SOCASEL = 4 ; // Select SOC from from CPMA on upcount
EPwm7Regs.ETPS.bit.SOCAPRD = 1 ; // Generate pulse on 1st event(SOC事件周期)
EPwm7Regs.CMPA.bit.CMPA = 1000 ; // Set compare A value

我想在epwm1产生10k的波形,但是实际波形周期达到秒级别的,epwm7产生10k的中断,在中断中计数,然后控制led,led的波形是对的,epwm1的波形怎么回事?

  • 你好,简单来说,PWM7的波形是正确的,但是PWM1的波形不正确?
    按照你的设置应该是产生10KHz的PWM波,但实际的波形相差太大。你是否找对了PWM引脚?因为这个波形不管是频率还是幅值都不太像是PWM的
x 出现错误。请重试或与管理员联系。