Dydaktyka
Dependencies: FastPWM mbed-src
Fork of 2015_04_17_quadro_bez_sterowania by
Diff: main.cpp
- Revision:
- 11:38db3ed41f13
- Parent:
- 10:605b0bfadc2e
- Child:
- 12:e955cc086c42
diff -r 605b0bfadc2e -r 38db3ed41f13 main.cpp --- a/main.cpp Tue Feb 10 15:08:04 2015 +0000 +++ b/main.cpp Fri Apr 17 07:48:05 2015 +0000 @@ -38,7 +38,6 @@ FastPWM M3(D12); FastPWM M4(D13); - Ticker triger1; //przerwanie filtracji Ticker triger2; //kalibracja accelero Ticker triger3; //kalibracja zyro @@ -131,7 +130,6 @@ } - void task1() { //myled = !myled; @@ -180,7 +178,6 @@ roll2 = roll_data2.x1; kalmanrollzyrobut = roll_data2.x2;*/ - if (filtrZmienna < 0) { filtrWynik = filtrSygnal; filtrBufor[filtrZmienna + filtrWymiar] = filtrSygnal; @@ -226,7 +223,6 @@ if (filtr2Zmienna == filtr2Wymiar) { filtr2Zmienna = 0; } - pitch=filtr2Wynik; //U1 = 0.0173*(Kp1*(-pitch2)+Kd1*(0-O[0])); @@ -245,24 +241,12 @@ // *********************** DISCRETE PID CONTROLLER ********************** - // U1=Ixx*(Kp1*(katzad-kat)+Kd1*(omegazad-omega)+Ki1*sumauchyb) - // U2=Iyy*(Kp2*(katzad-kat)+Kd2*(omegazad-omega)+Ki2*sumauchyb) - // U3=Izz*(Kp3*(katzad-kat)+Kd3*(omegazad-omega)+Ki3*sumauchyb) - //omega1^2=(B1/b1*PWM1zad+C1/b1)-U2/2b1l+U3/4d - //omega2^2=(B2/b2*PWM2zad+C2/b2)+U1/2b2l-U3/4d - //omega3^2=(B3/b3*PWM3zad+C3/b3)+U2/2b3l+U3/4d - //omega4^2=(B4/b4*PWM4zad+C4/b4)-U1/2b4l-U3/4d - //wyp1=b/B1*omega1^2-C1/B1 - //wyp2=b/B*omega2^2-C/B - //wyp3=b/B3*omega3^2-C3/B3 - //wyp4=b/B*omega4^2-C/B - + //stale //b=0.000015 //B1=0.000776646 //C1=-0.334958973 //l=0.3 //d=0.000033 - //2b1l=0.0000092780 //4d=0.000132 //B1/b1=50.22498189 @@ -289,6 +273,29 @@ //b4/B4=0.019624463 //C4/B4=-568.7123367 + //stare 2b*l + //0.0000092780 + //0.000009424 + //0.000009139 + //0.000009276 + + //2b1l=0.000000096789585 + //2b2l=0.000000095889323 + //2b3l=0.000000097529031 + //2b4l=0.000000093579744 + + // U1=Ixx*(Kp1*(katzad-kat)+Kd1*(omegazad-omega)+Ki1*sumauchyb) + // U2=Iyy*(Kp2*(katzad-kat)+Kd2*(omegazad-omega)+Ki2*sumauchyb) + // U3=Izz*(Kp3*(katzad-kat)+Kd3*(omegazad-omega)+Ki3*sumauchyb) + //omega1^2=(B1/b1*PWM1zad+C1/b1)-U2/2b1l+U3/4d + //omega2^2=(B2/b2*PWM2zad+C2/b2)+U1/2b2l-U3/4d + //omega3^2=(B3/b3*PWM3zad+C3/b3)+U2/2b3l+U3/4d + //omega4^2=(B4/b4*PWM4zad+C4/b4)-U1/2b4l-U3/4d + //wyp1=b/B1*omega1^2-C1/B1 + //wyp2=b/B*omega2^2-C/B + //wyp3=b/B3*omega3^2-C3/B3 + //wyp4=b/B*omega4^2-C/B + //B*PWMzad+C=T //PWMzad=1/B*T-C/B /* @@ -296,12 +303,12 @@ PWMzad2=1245.207965*T2zad-(-600.7566265); PWMzad3=1295.740776*T3zad-(-514.6040317); PWMzad4=1269.412072*T4zad-(-568.7123367);*/ - - - - - - + /* + wyp1=0.01991041*Om1-(-431.2892625)+PWM1zad; + wyp2=0.019557786*Om2-(-600.7566265)+PWM2zad; + wyp3=0.01973705*Om3-(-514.6040317)+PWM3zad; + wyp4=0.019624463*Om4-(-568.7123367)+PWM4zad; + */ pitchE=pitchE+(0-pitch); if(pitchE>3) pitchE=3; @@ -320,23 +327,23 @@ Kd3=Kp3*Td3/T; //if(Ti3==0){Ki3=0;}else Ki3=Kp3*T/Ti3; - U1 = 0.0173*(Kp1*(0-pitch)+Kd1*(0+kalmanpitchzyro)+Ki1*pitchE); - U2 = 0.0169*(Kp2*(0-roll)+Kd2*(0-o[1])+Ki2*rollE); - U3 = 0.0333*(/*Kp3*((105*M_PI/180)-fYaw)+*/Kd3*(0-o[2]));//+Ki3*rollE); - //U1 = 0.0346*(Kp1*(0-pitch)+Kd1*(0-(-kalmanpitchzyro))+Ki1*pitchE); //U2 = 0.0338*(Kp2*(0-roll)+Kd2*(0-o[1])+Ki2*rollE); //U3 = 0.0666*(/*Kp3*((105*M_PI/180)-fYaw)+*/Kd3*(0-O[2]));//+Ki3*rollE); + + U1 = 0.0173*(Kp1*(0-pitch)+Kd1*(0+kalmanpitchzyro)+Ki1*pitchE); + U2 = 0.0169*(Kp2*(0-roll)+Kd2*(0-kalmanrollzyro)+Ki2*rollE); + U3 = 0.0333*(/*Kp3*((105*M_PI/180)-fYaw)+*/Kd3*(0-o[2]));//+Ki3*rollE); - Om1 = 50.22498189*PWM1zad+(-21611.4954)-U2/0.0000092780 + U3/0.000132 ; //kwadraty - Om2 = 51.130533*PWM2zad+(-30717.00651)+U1/0.000009424 - U3/0.000132 ; - Om3 = 50.66613192*PWM3zad+(-26072.99576)+U2/0.000009139 + U3/0.000132 ; - Om4 = 50.95680893*PWM4zad+(-28979.76588)-U1/0.000009276 - U3/0.000132 ; - - wyp1=0.01991041*Om1-(-431.2892625); - wyp2=0.019557786*Om2-(-600.7566265); - wyp3=0.01973705*Om3-(-514.6040317); - wyp4=0.019624463*Om4-(-568.7123367); + Om1 = Omegazad[0]*Omegazad[0]-U2/0.000000096789585 + U3/0.000132 ; //kwadraty + Om2 = Omegazad[1]*Omegazad[1]+U1/0.000000095889323 - U3/0.000132 ; + Om3 = Omegazad[2]*Omegazad[2]+U2/0.000000097529031 + U3/0.000132 ; + Om4 = Omegazad[3]*Omegazad[3]-U1/0.000000093579744 - U3/0.000132 ; + + wyp1=(sqrt(Om1)-a2[0])/a1[0]; + wyp2=(sqrt(Om2)-a2[1])/a1[1]; + wyp3=(sqrt(Om3)-a2[2])/a1[2]; + wyp4=(sqrt(Om4)-a2[3])/a1[3]; if(wyp1<=10001 || wyp1>40001) valPWM1=10000; if(wyp1>=20000 && wyp1<40000) valPWM1=20000; @@ -369,7 +376,6 @@ M3.pulsewidth_us(valPWM3); M4.pulsewidth_us(valPWM4); - //myled = !myled; } @@ -460,8 +466,6 @@ //sprintf(buff, "%f,%f,%f,%f\n\r", d[4],filtrWynik,ymin,ymax); //pc.printf(buff); - - } @@ -483,7 +487,6 @@ kalmanpitchzyro = pitch_data.x2; kalmanpitchdryf = pitch_data.x3; roll = roll_data.x1; - } */ @@ -527,7 +530,6 @@ sprintf(buff, "%f,%i,%f,%f\n\r", PWM4zad,RPMtachAktualny,PWM4zadWyn,RPMtachWyn); pc.printf(buff); */ - sprintf(buff, "%f,%i\n\r", PWM4zad,RPMtach); pc.printf(buff); //iTach++; @@ -537,7 +539,6 @@ //RPMtachWyn=0; //PWM4zadWyn=0; impulsA=0; - } @@ -557,17 +558,9 @@ sprintf(buff, "Hello: \n\r"); pc.printf(buff); - off.setOffsets(offsetGyro,&offsetMagneto, pc, imu); - - - - triger1.attach(&task1, 0.005); - //triger2.attach(&task2, 0.005); - //triger3.attach(&task3, 0.005); - //tachometer.attach(&task_tachometer, 3.5); + off.setOffsets(offsetGyro,&offsetMagneto, bluetooth, imu); i=1000; - PWM1zad=10000; PWM2zad=10000; PWM3zad=10000; @@ -598,11 +591,11 @@ Ti2=0; Ti3=0; T=0.005;*/ - Kp1=0; - Kp2=0; + Kp1=12; + Kp2=12; Kp3=0; - Kd1=0; - Kd2=0; + Kd1=2; + Kd2=2; Kd3=0; Ki1=0; Ki2=0; @@ -734,13 +727,26 @@ Omegamax[3][6]= 4250; Omegamax[3][7]= 4300; Omegamax[3][8]= 20000; + + a1[0]=a1buf[0][0]; + a2[0]=a2buf[0][0]; + a1[1]=a1buf[1][0]; + a2[1]=a2buf[1][0]; + a1[2]=a1buf[2][0]; + a2[2]=a2buf[2][0]; + a1[3]=a1buf[3][0]; + a2[3]=a2buf[3][0]; + + triger1.attach(&task1, 0.005); + //triger2.attach(&task2, 0.005); + //triger3.attach(&task3, 0.005); + //tachometer.attach(&task_tachometer, 3.5); while(1) { //myled2 = !myled2; - //sprintf(buff, "%f,%f,%f,0,%f,%f,%f,%f,%f,%f,\n\r", -katybut*180/M_PI, roll2*180/M_PI, (O[1]*180/M_PI),valPWM1,valPWM3,Kp2,Kd2,Ki2,rollE); //pc.printf(buff); //sprintf(buff, "%f,%f,%f,%f,%f,%f,%f\n\r", -katybut*180/M_PI, roll2*180/M_PI, (O[1]*180/M_PI), -katy*180/M_PI, roll*180/M_PI, o[1]*180/M_PI,valPWM3); @@ -749,14 +755,10 @@ //pc.printf(buff); //sprintf(buff, "%f,%f,%f,%f,%f,%f,%f,%f,%f\n\r", d[3],d[4],d[5],xmin,xmax,ymin,ymax,zmin,zmax); //pc.printf(buff); - //sprintf(buff, "%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f\n\r", d[3],filtrWynik,d[4],filtr2Wynik,d[5],filtr3Wynik,xmin,xmax,ymin,ymax,zmin,zmax); //pc.printf(buff); - //sprintf(buff, "%f,%f,%f\n\r", d[0],d[1],d[2]); //pc.printf(buff); - - //sprintf(buff, "0,%f,%f,%f,%f,%f,%f,\n\r", -katy*180/M_PI,roll*180/M_PI,-katybut*180/M_PI,roll2*180/M_PI,kalmanrollzyro*180/M_PI,kalmanrollzyrobut*180/M_PI); //pc.printf(buff); //sprintf(buff, "0,%f,%f,%f,%f,%f,%f,%f,%f,%f\n\r", pitch*180/M_PI,pitch2*180/M_PI,o[0]*180/M_PI,valPWM2,valPWM4,Kp1,Kd1,Ki1,pitchE*180/M_PI); @@ -767,17 +769,18 @@ //pc.printf(buff); //sprintf(buff, "%f,%f,%f,%f,%f\n\r", valPWM4,RPMtach,valPWM3,valPWM2,valPWM1); //pc.printf(buff); - //sprintf(buff, "%f,%f,%f,%f,%f,%f\n\r", katx*180/M_PI,pitch*180/M_PI,katxzyro*180/M_PI,o[0]*180/M_PI,kalmanpitchzyro*180/M_PI,kalmanpitchdryf*180/M_PI); //pc.printf(buff); - //sprintf(buff, "%f,%f,%f,%f,%f,%f,%f\n\r", yaw*180/M_PI,yawOff*180/M_PI,d[6],d[7],d[8],o[2]*180/M_PI,katz*180/M_PI); //pc.printf(buff); - //myled2 = !myled2; + //sprintf(buff, "%i,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f\n\r", Omegazad[0],PWM1zad,PWM2zad,PWM3zad,PWM4zad,a1[0],a1[1],a1[2],a1[3],a2[0],a2[1],a2[2],a2[3]); + //pc.printf(buff); - sprintf(buff, "%i,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f\n\r", Omegazad[0],PWM1zad,PWM2zad,PWM3zad,PWM4zad,a1[0],a1[1],a1[2],a1[3],a2[0],a2[1],a2[2],a2[3]); - pc.printf(buff); + + + sprintf(buff, "%f,%f,%f,%f,%f,%f,%f,%f\n\r", roll*180/M_PI,valPWM1,valPWM2,valPWM3,valPWM4,Kp1,Kd1,Ki1); + pc.printf(buff); if(pc.readable()){ @@ -842,7 +845,6 @@ PWM1zad-=10; M1.pulsewidth_us(PWM1zad); break;*/ - } znak=0;