分享一個F28335 SPWM源碼
源程序如下:
- #include "DSP2833x_Device.h"
- #include "DSP2833x_Examples.h"
- interrupt void EPwm1_isr();
- void InitEPwm1Example();
- void InitSpwm();
- #define N 400 //N:載波比
- Uint16 spwmcnt=0; //對SPWM相位的計數
- unsigned int f_s=50; //f_s:調制信號頻率,
- unsigned Period=0; //計數器周期值計算方法
- long int ftime=150000000; //CPU頻率為150M=100 *100000
- const float M_ratio=0.8; //SPWM調制比,可修改
- Uint16 CMPA_data[N];
- void main(void)
- {
- Period=ftime/(f_s*N*2); //對應EPwm1 頻率為20Khz
- InitSpwm();
- InitSysCtrl();
- DINT;
- InitEPwm1Gpio(); //初始化EPwm的輸出口
- IER=0X0000;
- IFR=0X0000;
-
- InitPieVectTable();
- EALLOW;
- PieVectTable.EPWM1_INT=&EPwm1_isr;
- EDIS;
- EALLOW;
- SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=0;
- EDIS;
- InitEPwm1Example(); //初始化EPwm的配置
- EALLOW;
- SysCtrlRegs.PCLKCR0.bit.TBCLKSYNC=1;
- EDIS;
- PieCtrlRegs.PIEIER3.bit.INTx1=1; //使能EPwm1中斷
- IER|=M_INT3;
- EINT;
- ERTM;
- for(;;)
- {
- }
- }
- interrupt void EPwm1_isr()
- {
- if(spwmcnt==N)
- {
- spwmcnt=0;
- }
- EPwm1Regs.CMPA.half.CMPA=CMPA_data[spwmcnt++];
- EPwm1Regs.ETCLR.bit.INT=1;
- PieCtrlRegs.PIEACK.all=PIEACK_GROUP3;
- }
- void InitEPwm1Example()
- {
- EPwm1Regs.TBCTL.bit.CTRMODE=2; //設置為向上向下計數模式
- EPwm1Regs.TBPRD=Period; //周期
- EPwm1Regs.TBCTL.bit.HSPCLKDIV=0; //高速分頻
- EPwm1Regs.TBCTL.bit.CLKDIV=0; //時基分頻
- EPwm1Regs.AQCTLA.bit.ZRO=AQ_SET; //
- EPwm1Regs.AQCTLA.bit.CAU=AQ_CLEAR;
- EPwm1Regs.AQCTLA.bit.CAD=AQ_SET;
- EPwm1Regs.ETSEL.bit.INTSEL=ET_CTR_ZERO;
- EPwm1Regs.ETSEL.bit.INTEN=1;
- EPwm1Regs.ETPS.bit.INTPRD=1;
- }
- void InitSpwm()
- {
- int i=0;
- float sin_table[N]={
- 0.000000,0.015747,0.031489,0.047224,0.062948,0.078655,0.094343,0.110008,0.125646,0.141252,
- 0.156823,0.172356,0.187845,0.203288,0.218681,0.234020,0.249300,0.264519,0.279672,
- 0.294755,0.309766,0.324699,0.339553,0.354322,0.369003,0.383593,0.398087,0.412483,
- 0.426776,0.440964,0.455042,0.469008,0.482857,0.496587,0.510193,0.523673,0.537023,
- 0.550240,0.563320,0.576261,0.589059,0.601710,0.614213,0.626563,0.638758,0.650794,
- 0.662669,0.674380,0.685923,0.697297,0.708497,0.719522,0.730368,0.741034,0.751515,
- 0.761810,0.771917,0.781831,0.791552,0.801077,0.810403,0.819528,0.828450,0.837166,
- 0.845675,0.853974,0.862062,0.869935,0.877593,0.885033,0.892254,0.899254,0.906030,
- 0.912582,0.918908,0.925005,0.930874,0.936511,0.941917,0.947088,0.952025,0.956726,
- 0.961189,0.965414,0.969400,0.973146,0.976650,0.979912,0.982930,0.985706,0.988236,
- 0.990522,0.992562,0.994356,0.995903,0.997204,0.998257,0.999062,0.999620,0.999930,
- 0.999992,0.999806,0.999372,0.998691,0.997761,0.996584,0.995161,0.993490,0.991573,
- 0.989410,0.987002,0.984349,0.981452,0.978311,0.974928,0.971303,0.967437,0.963332,
- 0.958987,0.954405,0.949586,0.944532,0.939243,0.933721,0.927968,0.921985,0.915773,
- 0.909334,0.902670,0.895782,0.888671,0.881341,0.873791,0.866026,0.858045,0.849851,
- 0.841447,0.832834,0.824015,0.814991,0.805765,0.796340,0.786716,0.776898,0.766887,
- 0.756686,0.746298,0.735724,0.724968,0.714032,0.702919,0.691632,0.680173,0.668545,
- 0.656752,0.644796,0.632680,0.620407,0.607980,0.595403,0.582678,0.569808,0.556797,
- 0.543648,0.530365,0.516949,0.503406,0.489737,0.475947,0.462040,0.448017,0.433884,
- 0.419643,0.405298,0.390852,0.376310,0.361674,0.346948,0.332136,0.317242,0.302270,
- 0.287222,0.272104,0.256917,0.241667,0.226358,0.210991,0.195573,0.180106,0.164595,
- 0.149042,0.133453,0.117831,0.102179,0.086502,0.070804,0.055088,0.039358,0.023619,
- 0.007874,-0.007874,-0.023619,-0.039358,-0.055088,-0.070804,-0.086502,-0.102179,-0.117830,
- -0.133453,-0.149042,-0.164595,-0.180106,-0.195573,-0.210991,-0.226357,-0.241667,-0.256917,
- -0.272103,-0.287222,-0.302270,-0.317242,-0.332136,-0.346948,-0.361673,-0.376309,-0.390852,
- -0.405297,-0.419643,-0.433884,-0.448017,-0.462040,-0.475947,-0.489737,-0.503405,-0.516949,
- -0.530364,-0.543648,-0.556797,-0.569808,-0.582677,-0.595403,-0.607980,-0.620407,-0.632680,
- -0.644796,-0.656752,-0.668545,-0.680173,-0.691631,-0.702919,-0.714032,-0.724968,-0.735724,
- -0.746298,-0.756686,-0.766887,-0.776898,-0.786716,-0.796339,-0.805765,-0.814991,-0.824015,
- -0.832834,-0.841447,-0.849851,-0.858045,-0.866025,-0.873791,-0.881341,-0.888671,-0.895782,
- -0.902670,-0.909334,-0.915773,-0.921985,-0.927968,-0.933721,-0.939243,-0.944532,-0.949586,
- -0.954405,-0.958987,-0.963332,-0.967437,-0.971303,-0.974928,-0.978311,-0.981451,-0.984349,
- -0.987002,-0.989410,-0.991573,-0.993490,-0.995161,-0.996584,-0.997761,-0.998691,-0.999372,
- -0.999806,-0.999992,-0.999930,-0.999620,-0.999062,-0.998257,-0.997204,-0.995903,-0.994356,
- -0.992562,-0.990522,-0.988236,-0.985706,-0.982931,-0.979912,-0.976650,-0.973146,-0.969400,
- -0.965415,-0.961189,-0.956726,-0.952025,-0.947088,-0.941916,-0.936511,-0.930874,-0.925005,
- -0.918908,-0.912582,-0.906030,-0.899254,-0.892254,-0.885034,-0.877593,-0.869935,-0.862062,
- -0.853974,-0.845675,-0.837166,-0.828450,-0.819528,-0.810403,-0.801077,-0.791553,-0.781832,
- -0.771917,-0.761811,-0.751515,-0.741034,-0.730368,-0.719522,-0.708497,-0.697297,-0.685924,
- -0.674380,-0.662669,-0.650794,-0.638758,-0.626563,-0.614213,-0.601710,-0.589059,-0.576261,
- -0.563320,-0.550240,-0.537023,-0.523673,-0.510193,-0.496587,-0.482857,-0.469008,-0.455043,
- -0.440964,-0.426777,-0.412483,-0.398087,-0.383593,-0.369003,-0.354322,-0.339553,-0.324700,
- -0.309766,-0.294755,-0.279672,-0.264519,-0.249300,-0.234020,-0.218681,-0.203289,-0.187845,
- -0.172356,-0.156823,-0.141252,-0.125646,-0.110009,-0.094344,-0.078656,-0.062948,-0.047224,
- -0.031490,-0.015747,0
- }; // 50hz正弦波離散化
- for(i=0;i<N;i++)
- {
- CMPA_data[i]=(0.5+0.5*M_ratio*sin_table[i])*Period; //規則采樣計算公式 CMPA_data[i]=(0.5+0.5*M_ratio*sin_table[i])*Period
- }
- }
復制代碼
|