1、int i;/double aN;/unsigned int n=0; /float Q;#define PWM1_INT_ENABLE 1#define PWM2_INT_ENABLE 1#define PWM3_INT_ENABLE 1void InitEPwm1Example(void);/void InitEPwm2Example(void);/void InitEPwm3Example(void);interrupt void epwm1_timer_isr(void);/interrupt void epwm2_timer_isr(void);/interrupt void epw
2、m3_timer_isr(void);/void InitCmp();/extern Uint16 NN,MM;/Uint16 NN=24,MM=1;/Uint16 n=0;Uint16 cmp1360,cmp2360,cmp3360;Uint32 EPwm1TimerIntCount;Uint32 EPwm2TimerIntCount;Uint32 EPwm3TimerIntCount;void main(void) InitSysCtrl(); InitEPwm1Gpio(); / InitEPwm2Gpio(); / InitEPwm3Gpio(); DINT; InitPieCtrl(
3、); IER = 0x0000; IFR = 0x0000; InitPieVectTable(); EALLOW; / This is needed to write to EALLOW protected registers PieVectTable.EPWM1_INT = &epwm1_timer_isr; / PieVectTable.EPWM2_INT = &epwm2_timer_isr; / PieVectTable.EPWM3_INT = &epwm3_timer_isr; EDIS; SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; / Stop
4、all the TB clocks InitEPwm1Example(); / InitEPwm2Example(); / InitEPwm3Example(); / InitCmp(); SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; EPwm1TimerIntCount = 0; EPwm2TimerIntCount = 0; EPwm3TimerIntCount = 0; IER |= M_INT3; PieCtrlRegs.PIEIER3.bit.INTx1 = PWM1_INT_ENABLE; / PieCtrlRegs.PIEIER3.bit.INTx
5、2 = PWM2_INT_ENABLE; / PieCtrlRegs.PIEIER3.bit.INTx3 = PWM3_INT_ENABLE; EINT; / Enable Global interrupt INTM ERTM; asm( NOP); void InitEPwm1Example() EPwm1Regs.TBCTL.bit.SYNCOSEL = TB_CTR_ZERO;/zhuyi EPwm1Regs.TBPRD = PRD; /=2*1500TBCLK EPwm1Regs.TBPHS.half.TBPHS = 0x0000; / Phase is 0 EPwm1Regs.TBC
6、TL.bit.PRDLD = TB_SHADOW; EPwm1Regs.TBCTR = 0x0000; EPwm1Regs.TBCTL.bit.CTRMODE = TB_COUNT_UPDOWN; / Count up down EPwm1Regs.TBCTL.bit.PHSEN = TB_DISABLE; / Disable phase loading EPwm1Regs.TBCTL.bit.HSPCLKDIV = TB_DIV2; / Clock ratio to SYSCLKOUT EPwm1Regs.TBCTL.bit.CLKDIV = TB_DIV2; EPwm1Regs.CMPCT
7、L.bit.SHDWAMODE = CC_SHADOW; / Load registers every ZERO_PRD EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; / EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; / EPwm1Regs.CMPA.half.CMPA =1000; EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR; / Clear PWM1A on CAU EPwm1Regs
8、.AQCTLA.bit.CAD = AQ_SET; EPwm1Regs.AQCTLB.bit.CAU = AQ_SET; / SET PWM1B on CAU EPwm1Regs.AQCTLB.bit.CAD = AQ_CLEAR; /set dead band / EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_PRD; /? Select INT on Zero Prd event EPwm1Regs.ETSEL.bit.INTEN = PWM1_INT_ENABLE; / Enable INT EPwm1Regs.ETPS.bit.INTPRD = ET_1ST;
9、/*void InitCmp()/ Uint16 i = 0;if(iN) cmp1i=(Uint16)(EPwm1Regs.TBPRD*0.25*(1+M*sin(2*i)*PI/N)+1+M*sin(2*i+1)*PI/N);/ cmp2i=(Uint16)(EvaRegs.T1PR*0.25*(1+M*sin(2*i)*PI/N+PI*4/3)+1+M*sin(2*i+1)*PI/N+PI*4/3);/cmp3i=(Uint16)(EvaRegs.T1PR*0.25*(1+M*sin(2*i)*PI/N+PI*2/3)+1+M*sin(2*i+1)*PI/N+PI*2/3); i+;elsei=0;*/仯interrupt void epwm1_timer_isr(void) / cmp1i=(Uint16)(EPwm1Regs.TBPRD*sin(2*i)*PI/N)cmp1i=(Uint16)(EPwm1Regs.TBPRD*0.25*(1+M*sin(2*i)*PI/N)+1+M*sin(2*i+1)*PI/N); EPwm1Regs.CMPA.half.CMPA = cmp1i; EPwm1Regs.ETCLR.bit.INT = 1; PieCtrlRegs.PIEACK.all = PIEACK_GROUP3;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1