基于controlSTICK-Piccolo F28069的SPWM设计 下载本文

内容发布更新时间 : 2024/5/21 0:29:28星期一 下面是文章的全部内容请认真阅读。

DestAddr);

void update_sina(void); void PieCntlInit(void); void PieVectTableInit(void); void InitEPwmTimer(void);

interrupt void epwm2_timer_isr(void);

//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

// VARIABLE DECLARATIONS - GENERAL

//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

// Used for running BackGround in flash and the ISR in RAM

extern Uint16 RamfuncsLoadStart, RamfuncsLoadEnd, RamfuncsRunStart; #define PWM2_INT_ENABLE 1 Uint32 i=0; Uint32 n=400; float a=0.8; Uint16 temp; float

sina[201]={0,0.0157,0.0314,0.0471,0.0628,0.0785,0.0941,0.1097,0.1253, 0.1409,0.1564,0.1719, 0.1874,0.2028,0.2181,0.2334,0.2487, 0.2639,0.2790,0.2940,0.3090,0.3239,0.3387,0.3535,

0.3681,0.3827,0.3971,0.4115,0.4258,0.4399,0.4540,0.4679,0.4818,0.4955,0.5090,0.5225,

0.5358,0.5490,0.5621,0.5750,0.5878,0.6004,0.6129,0.6252, 0.6374,0.6494,0.6613,0.6730,

0.6845,0.6959,0.7071,0.7181,0.7290,0.7396,0.7501,0.7604,0.7705,0.7804,0.7902,0.7997,

0.8090,0.8181,0.8271,0.8358,0.8443,0.8526,0.8607,0.8686,0.8763,0.8838,0.8910,0.8980,

0.9048,0.9114,0.9178,0.9239,0.9298,0.9354,0.9409,0.9461,0.9511,0.9558,0.9603,0.9646,

0.9686,0.9724,0.9759,0.9792,0.9823,0.9851,0.9877,0.9900,0.9921,0.9940,0.9956,0.9969,

0.9980,0.9989,0.9995,0.9999,1,0.9999,0.9995,0.9989,0.9980,0.9969,0.9956,0.9940,

0.9921,0.9900,0.9877,0.9851,0.9823,0.9792,0.9759,0.9724,0.9686,0.9646,0.9603,0.9558,

0.9511,0.9461,0.9409,0.9354,0.9298,0.9239,0.9178,0.9114,0.9048,0.8980,0.8910,0.8838,

0.8763,0.8686,0.8607,0.8526,0.8443,0.8358,0.8271,0.8181,0.8090,0.7997,0.7902,0.7804,

0.7705,0.7604,0.7501,0.7396,0.7290,0.7181,0.7071,0.6959,0.6845,0.6730,0.6613,0.6494,

0.6374,0.6252,0.6129,0.6004,0.5878,0.5750,0.5621,0.5490,0.5358,0.5225,0.5090,0.4955,

0.4818,0.4679,0.4540,0.4399,0.4258,0.4115,0.3971,0.3827,0.3681,0.3535,0.3387,0.3239,

0.3090,0.2940,0.2790,0.2639,0.2487,0.2334,0.2181,0.2028,0.1874,0.1719,0.1564,0.1409,

0.1253,0.1097,0.0941,0.0785,0.0628,0.0471,0.0314,0.0157,0}; float

sinb[200]={-0.0157,-0.0314,-0.0471,-0.0628,-0.0785,-0.0941,-0.1097,-0.1253,-0.1409,-0.1564,-0.1719,

-0.1874,-0.2028,-0.2181,-0.2334,-0.2487,-0.2639,-0.2790,-0.2940,-0.3090,-0.3239,-0.3387,-0.3535,

-0.3681,-0.3827,-0.3971,-0.4115,-0.4258,-0.4399,-0.4540,-0.4679,-0.4818,-0.4955,-0.5090,-0.5225,

-0.5358,-0.5490,-0.5621,-0.5750,-0.5878,-0.6004,-0.6129,-0.6252,-0.6374,-0.6494,-0.6613,-0.6730,

-0.6845,-0.6959,-0.7071,-0.7181,-0.7290,-0.7396,-0.7501,-0.7604,-0.7705,-0.7804,-0.7902,-0.7997,

-0.8090,-0.8181,-0.8271,-0.8358,-0.8443,-0.8526,-0.8607,-0.8686,-0.8763,-0.8838,-0.8910,-0.8980,

-0.9048,-0.9114,-0.9178,-0.9239,-0.9298,-0.9354,-0.9409,-0.9461,-0.9511,-0.9558,-0.9603,-0.9646,

-0.9686,-0.9724,-0.9759,-0.9792,-0.9823,-0.9851,-0.9877,-0.9900,-0.9921,-0.9940,-0.9956,-0.9969,

-0.9980,-0.9989,-0.9995,-0.9999,-1,0.9999,-0.9995,-0.9989,-0.9980,-0.9969,-0.9956,-0.9940,

-0.9921,-0.9900,-0.9877,-0.9851,-0.9823,-0.9792,-0.9759,-0.9724,-0.9686,-0.9646,-0.9603,-0.9558,

-0.9511,-0.9461,-0.9409,-0.9354,-0.9298,-0.9239,-0.9178,-0.9114,-0.9048,-0.8980,-0.8910,-0.8838,

-0.8763,-0.8686,-0.8607,-0.8526,-0.8443,-0.8358,-0.8271,-0.8181,-0.8090,-0.7997,-0.7902,-0.7804,

-0.7705,-0.7604,-0.7501,-0.7396,-0.7290,-0.7181,-0.7071,-0.6959,-0.6845,-0.6730,-0.6613,-0.6494,

-0.6374,-0.6252,-0.6129,-0.6004,-0.5878,-0.5750,-0.5621,-0.5490,-0.5358,-0.5225,-0.5090,-0.4955,

-0.4818,-0.4679,-0.4540,-0.4399,-0.4258,-0.4115,-0.3971,-0.3827,-0.3681,-0.3535,-0.3387,-0.3239,

-0.3090,-0.2940,-0.2790,-0.2639,-0.2487,-0.2334,-0.2181,-0.2028,-0.1874,-0.1719,-0.1564,-0.1409,

-0.1253,-0.1097,-0.0941,-0.0785,-0.0628,-0.0471,-0.0314,-0.0157,0}; //%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

// MAIN CODE - starts here

//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% void main(void) {

//================================= // INITIALISATION - General

//=================================

DeviceInit(); // Device Life support & GPIO mux settings PieCntlInit(); // PIE中断控制 PieVectTableInit(); EALLOW;

PieVectTable.EPWM2_INT = &epwm2_timer_isr;//中断函数入口 EDIS;

InitEPwmTimer(); // 赋值中断函数地址 IER |= M_INT3; // 使能CPU级第三组中断 PieCtrlRegs.PIEIER3.bit.INTx2 = PWM2_INT_ENABLE; // 使能PIE3.1 EINT; // 使能全局中断 ERTM;

ERTM; // for(;;) {

asm(\); } }

//-------------------------------------------------------------

#define period 4000 (80MHz)

// period 250 (80MHz)

void InitEPwmTimer() {

EALLOW;

SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 0; // 停止TB计数 EDIS;

EPwm2Regs.TBCTL.bit.SYNCOSEL = TB_SYNC_IN;

EPwm2Regs.TBCTR = 0x0000; // 清除TB计数器 EPwm2Regs.TBCTL.bit.HSPCLKDIV = TB_DIV1; // 系统时钟分频 EPwm2Regs.TBCTL.bit.CLKDIV = TB_DIV1; EPwm2Regs.TBCTL.bit.PHSEN = 0; EPwm2Regs.TBPHS.half.TBPHS = 0;

EPwm2Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; EPwm2Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; EPwm2Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; EPwm2Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO;

EPwm2Regs.CMPA.half.CMPA = 0; // EPwm2Regs.AQCTLA.bit.ZRO = AQ_SET; // EPwm2Regs.AQCTLA.bit.CAU = AQ_CLEAR; // EPwm2Regs.TBPRD =period ;

// 160kHz when PLL is set to 0x10

// 80kHz when PLL is set to 0x10

EPwm2Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // 增计数模式 EPwm2Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // 中断使能选择 EPwm2Regs.ETSEL.bit.INTEN = PWM2_INT_ENABLE; // 使能中断 EPwm2Regs.ETPS.bit.INTPRD = ET_1ST; //

EALLOW;

SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC = 1; // TB时钟计数 EDIS; }

void update_sina() {

if((i>=0)&&(i<=n/2)) {

temp=period*((1+a*sina[i])/2); EPwm2Regs.CMPA.half.CMPA = temp; }

if((i>n/2)&&(i<=n)) {

temp=period*((1-a*sina[i-200])/2); EPwm2Regs.CMPA.half.CMPA = temp; } i++; if(i>n) { i=0; } }

/*epwm1中断服务程序*/

//c2000的中断函数都要用“inerrupt”申明 interrupt void epwm2_timer_isr(void) {

update_sina();

EPwm2Regs.ETCLR.bit.INT = 1;

PieCtrlRegs.PIEACK.all = PIEACK_GROUP3; }