资源描述:
《采用svpwm空间矢量控制算法,运行正常,加减速,正反》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、使用TMS320C2812控制异步电机的程序,采用SVPWM空间矢量控制算法,运行正常,加减速,正反转等.首先,初始化设备,/*初始化系统*/InitSysCtrl();/*关中断*/DINT;IER=0x0000;IFR=0x0000;/*初始化PIE控制寄存器*/InitPieCtrl();/*初始化PIE矢量表*/InitPieVectTable();/*初始化SCIb寄存器*/InitSci();/*设置CPU定时器*/InitCpuTimers();ConfigCpuTimer(&CpuTimer2,150,20000);StartCpuTimer2();/*初始
2、化IO口*/InitGpio();/*初始化EV*/eva.Init(&eva);evb.Init(&evb);下步,(个人习惯写个显示程序)voidShowDisp(void)//显示{staticunsignedinti=0;switch(i){case0:i++;ScibRegs.SCITXBUF=(ku&0xf)+(3<<5);break;case1:if(RunFlag)ScibRegs.SCITXBUF=23+(2<<5);elseScibRegs.SCITXBUF=24+(2<<5);i++;break;case2:if(RunFlag)ScibRegs.SC
3、ITXBUF=f_now/10+(1<<5);elseScibRegs.SCITXBUF=f_given_disp/10+(1<<5);i++;break;case3:if(RunFlag)ScibRegs.SCITXBUF=f_now%10;elseScibRegs.SCITXBUF=f_given_disp%10;i=0;break;default:i=0;break;}下面再写,各功能模块:1、矢量计算和PWM生成以下给出步骤1中的控制参数及其调节范围EnableFlag:0、1;启停控制位SpeedRef:(0~0.99);速度给定值VdTesting:(0~0.9
4、);D轴电流给定VqTesting:(0~0.9);Q轴电流给定voidrampgen_calc(RAMPGEN*v){//Computetheangleratev->Angle+=_IQmpy(v->StepAngleMax,v->Freq);//Saturatetheangleratewithin(-1,1)if(v->Angle>_IQ(1.0))v->Angle-=_IQ(1.0);elseif(v->Angle<_IQ(-1.0))v->Angle+=_IQ(1.0);//Computetherampoutputv->Out=_IQmpy(v->Angle,v->
5、Gain)+v->Offset;//Saturatetherampoutputwithin(-1,1)if(v->Out>_IQ(1.0))v->Out-=_IQ(1.0);elseif(v->Out<_IQ(-1.0))v->Out+=_IQ(1.0);}voidRotateVecotr_calc(RotateVecotr_Handlev){_iqUa,Ub;//Usinglook-upIQsinetableUb=_IQsinPU(v->Angle);Ua=_IQcosPU(v->Angle);v->Ualpha=_IQmpy(v->k,Ua);v->Ubeta=_IQm
6、py(v->k,Ub);}voidscope(void){longtl,tm,t0;tl=svpwm.tl;tm=svpwm.tm;t0=((long)1<<19)-tl-tm;switch(svpwm.vect){case2:ua=t0+tm;ub=t0;break;case3:ua=0;ub=tl;break;case1:ua=t0;ub=((long)1<<19);break;case5:ua=tl;ub=tl+tm;break;case4:ua=((long)1<<19);ub=tm+t0;break;case6:ua=tl+tm;ub=0;break;defaul
7、t:break;}uab=ua-ub;}2、这就是传说中的精华所在:电流、直流母线电压、速度测试voidsvgendq_calc(SVGENDQ*v){_iqVa,Vb,Vc,t1,t2;unsignedlongSector=0;//SectoristreatedasQ0-independentlywithglobalQ//InverseclarketransformationVa=v->Ubeta;Vb=_IQmpy(_IQ(-0.5),v->Ubeta)+_IQmpy(_IQ(0.8660254),v->Ual