使用TMS320C2812 控制异步电机的程序,采用SVPW M 空间矢量控制算法,运行正常,加减速,正反转等. 首先,初始化设备, /*初始化系统*/ InitSysCtrl(); /*关中断*/ DINT; IER = 0x0000; IFR = 0x0000; /*初始化PIE控制寄存器*/ InitPieCtrl(); /*初始化PIE矢量表*/ InitPieVectTable(); /*初始化SCIb寄存器*/ InitSci(); /*设置CPU定时器*/ InitCpuTimers(); ConfigCpuTimer(&CpuTimer2, 150, 20000); StartCpuTimer2(); /*初始化IO口*/ InitGpio(); /*初始化EV*/ eva.Init(&eva); evb.Init(&evb); 下步,(个人习惯写个显示程序) voidShowDisp(void) //显示 { staticunsignedinti=0; switch(i) { case 0: i++; ScibRegs.SCITXBUF=(ku&0xf)+(3<<5); break; case 1: if(RunFlag) ScibRegs.SCITXBUF =23+(2<<5); else ScibRegs.SCITXBUF =24+(2<<5); i++; break; case 2: if(RunFlag) ScibRegs.SCITXBUF =f_now/10+(1<<5); else ScibRegs.SCITXBUF =f_given_disp/10+(1<<5); i++; break; case 3: if(RunFlag) ScibRegs.SCITXBUF =f_now%10; else ScibRegs.SCITXBUF =f_given_disp%10; i=0; break; default: i=0; break; } 下面再写,各功能模块: 1、 矢量计算和PW M生成 以下给出步骤 1 中的控制参数及其调节范围 EnableFlag:0、1;启停控制位 SpeedRef:(0~ 0.99);速度给定值 VdTesting:(0~ 0.9);D 轴电流给定 VqTesting:(0~ 0.9);Q 轴电流给定 voidrampgen_calc(RAMPGEN *v) { // Compute the angle rate v->Angle += _IQmpy(v->StepAngleMax,v->Freq); // Saturate the angle rate within (-1,1) if (v->Angle>_IQ(1.0)) v->Angle -= _IQ(1.0); elseif (v->Angle<_IQ(-1.0)) v->Angle += _IQ(1.0); // Compute the ramp output v->Out = _IQmpy(v->Angle,v->Gain) + v->Offset; // Saturate the ramp output within (-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_Handle v) { _iqUa,Ub; // Using look-up IQ sine table Ub = _IQsinPU(v->Angle); Ua = _IQcosPU(v->Angle); v->Ualpha = _IQmpy(v->k,Ua); v->Ubeta = _IQmpy(v->k,Ub); } c_int0初始化S/...