|
楼主 |
发表于 2014-4-12 10:36:16
|
显示全部楼层
- void Controlmy(Euler *Etransfer,PID *PIDtransfer)
- {
- float fi,theta,psai;
- static volatile float mox,moy,moz;
- static volatile float th1,th2,th3,th4;
- u16 MOTO1PWM,MOTO2PWM,MOTO3PWM,MOTO4PWM;
- int state;
- Quaternion q2;
- Angularvelocity w2;
- Euler euler2;
-
- CAP_Read();
- CAP_CAL();
-
- q2.qw=q.qw;
- q2.qx=q.qx;
- q2.qy=q.qy;
- q2.qz=q.qz;
- w2.wx=w.wx;
- w2.wy=w.wy;
- w2.wz=w.wz;
- euler2.fi=eulertemp.fi;
- euler2.theta=eulertemp.theta;
- euler2.psai=eulertemp.psai;
- //if(euler2.psai>180) euler2.psai -= 360;
-
-
- fi=Etransfer->fi;
- theta=Etransfer->theta;
- psai=Etransfer->psai;
- qd=EulerToQ(fi,theta,psai);
- Conjugate(&q2);
- qe=qmultiply(&qd,&q2);
- // error=QToEuler(&qe);
- qunitised(&qe);
- //euler2=QToEuler(&q2);
- error2.fi= fi-euler2.fi;//-fi;
- error2.psai= psai-euler2.psai;//-psai;
- error2.theta= theta-euler2.theta;//-theta;
- if(error2.psai > 180) error2.psai -= 360;
- else if(error2.psai < -180) error2.psai += 360;
- //mox=(float)(PIDtransfer->Px)*(float)(qe.qx)+(float)(PIDtransfer->Dx)*(w2.wx);
- //moy=(float)(PIDtransfer->Py)*(float)(qe.qy)+(float)(PIDtransfer->Dy)*(w2.wy);
- //moz=(float)(PIDtransfer->Pz)*(float)(qe.qz)+(float)(PIDtransfer->Dz)*(w2.wz);
- mox=(float)(PIDtransfer->Px)*(float)(error2.fi)+(float)(PIDtransfer->Dx)*(w2.wx);
- moy=(float)(PIDtransfer->Py)*(float)(error2.theta)+(float)(PIDtransfer->Dy)*(w2.wy);
- moz=(float)(PIDtransfer->Pz)*(float)(error2.psai)+(float)(PIDtransfer->Dz)*(w2.wz);
- if(moz>300) moz = 300;
- else if(moz<-300) moz = -300;
-
- th1=mox-moy-moz;
- th2=mox+moy+moz;
- th3=-mox+moy-moz;
- th4=-mox-moy+moz;
-
- MOTO1PWM=thro+th1;//CAP_Data.Accelerator+th1;
- MOTO2PWM=thro+th2;//CAP_Data.Accelerator+th2;//MOTO2BASE+th2;
- MOTO3PWM=thro+th3;//CAP_Data.Accelerator+th3;//MOTO3BASE+th3;
- MOTO4PWM=thro+th4;//CAP_Data.Accelerator+th4;//MOTO4BASE+th4;
- PWM1=MOTOCAL(MOTO1PWM);
- PWM2=MOTOCAL(MOTO2PWM);
- PWM3=MOTOCAL(MOTO3PWM);
- PWM4=MOTOCAL(MOTO4PWM);
-
- if(thro<1320)
- {
- MOTO_PWM_GDP(1313,1313,1313,1313);
- return;
- }
- else
- {
- MOTO_PWM_GDP(PWM1,PWM2,PWM3,PWM4);
- }
-
- }
复制代码 |
|