acos faalt

Dependencies:   HIDScope MODSERIAL QEI mbed

Committer:
davevogel0
Date:
Wed Oct 21 13:51:43 2015 +0000
Revision:
5:ec6dd614aa7e
Parent:
4:f0fd4a4ec178
Child:
6:05b6b70618db
In the function lengtharm the acos goes to a NaN which causes instability.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
davevogel0 0:76bc19ed12ee 1 #include "mbed.h"
davevogel0 0:76bc19ed12ee 2 #include "HIDScope.h"
davevogel0 0:76bc19ed12ee 3 #include "MODSERIAL.h"
davevogel0 0:76bc19ed12ee 4 #include "QEI.h"
davevogel0 5:ec6dd614aa7e 5 #include "Servo.h"
davevogel0 0:76bc19ed12ee 6
davevogel0 3:337345f748cf 7 //Aray of locations and Length of parts
davevogel0 5:ec6dd614aa7e 8 float X [10] = {-0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5};
davevogel0 5:ec6dd614aa7e 9 float Y [10] = {-0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5};
davevogel0 3:337345f748cf 10 const double L1 = 0.34;
davevogel0 3:337345f748cf 11 const double L2 = 0.26;
davevogel0 4:f0fd4a4ec178 12 const double L_board= 0.42;
davevogel0 3:337345f748cf 13 const double R_Max_error = 0.01;
davevogel0 2:da3b7dd2beb0 14
davevogel0 0:76bc19ed12ee 15 //---------- Change motor control parameters-------
davevogel0 1:4465c9e203ce 16 //Motor 1
davevogel0 1:4465c9e203ce 17 const float M1_Ks = 0.4; //minimum power required to move
davevogel0 1:4465c9e203ce 18 const float M1_Kp = 0.1; //strentgh of proportional control
davevogel0 1:4465c9e203ce 19 const float M1_Kd = 0.1; //strentgh of differential control Include timestep in constant
davevogel0 1:4465c9e203ce 20 const float M1_Ki = 0.1; //strentgh of integrational control Include timestep in constant
davevogel0 1:4465c9e203ce 21 const double M1_friction = 0.55; //minimum power required to make the motor move
davevogel0 1:4465c9e203ce 22 //Motor 2
davevogel0 1:4465c9e203ce 23 const float M2_Ks = 0.4; //minimum power required to move
davevogel0 5:ec6dd614aa7e 24 const float M2_Kp = -2; //strentgh of proportional control
davevogel0 1:4465c9e203ce 25 const float M2_Kd = 0.1; //strentgh of differential control Include timestep in constant
davevogel0 1:4465c9e203ce 26 const float M2_Ki = 0.1; //strentgh of integrational control Include timestep in constant
davevogel0 1:4465c9e203ce 27 const double M2_friction = 0.55; //minimum power required to make the motor move
davevogel0 0:76bc19ed12ee 28 //----------End of control parameters
davevogel0 0:76bc19ed12ee 29
davevogel0 0:76bc19ed12ee 30 //encoder
davevogel0 0:76bc19ed12ee 31 QEI Motor1 (D13, D12, NC, 32);
davevogel0 0:76bc19ed12ee 32 QEI Motor2 (D11, D10, NC, 32);
davevogel0 0:76bc19ed12ee 33
davevogel0 0:76bc19ed12ee 34 //Define pins
davevogel0 5:ec6dd614aa7e 35 DigitalOut M2(D7); //direction 2 //1 is ccw 0=cw
davevogel0 5:ec6dd614aa7e 36 PwmOut E2(D6); //speed 2
davevogel0 5:ec6dd614aa7e 37 DigitalOut M1(D4); //direction 1 //1 is ccw 0=cw
davevogel0 5:ec6dd614aa7e 38 PwmOut E1(D5); //speed 1
davevogel0 5:ec6dd614aa7e 39 AnalogIn pot1(A0); //read value of pot1 for position
davevogel0 5:ec6dd614aa7e 40 AnalogIn pot2(A1); //read value of pot2 for position
davevogel0 0:76bc19ed12ee 41 DigitalOut myled(LED_GREEN);
davevogel0 5:ec6dd614aa7e 42 DigitalOut magnet(D8); //magnet is defined on D8
davevogel0 0:76bc19ed12ee 43 MODSERIAL pc(USBTX, USBRX);
davevogel0 0:76bc19ed12ee 44 DigitalIn button(PTA4);
davevogel0 4:f0fd4a4ec178 45 DigitalIn button_Arm1(D1);
davevogel0 4:f0fd4a4ec178 46 DigitalIn button_Arm2(D2);
davevogel0 5:ec6dd614aa7e 47 DigitalIn button_Servo(D0);
davevogel0 0:76bc19ed12ee 48 HIDScope scope(2);
davevogel0 5:ec6dd614aa7e 49 Servo swagvo(D3);
davevogel0 0:76bc19ed12ee 50
davevogel0 0:76bc19ed12ee 51 //Define Variables
davevogel0 1:4465c9e203ce 52 double M1_dpos, M1_pos;
davevogel0 1:4465c9e203ce 53 double M2_dpos, M2_pos;
davevogel0 1:4465c9e203ce 54 double M_error, M1_error, M2_error;
davevogel0 4:f0fd4a4ec178 55 double R_set, A_R, R_error, R_error_int, R_cal, R_cal1, R_cal2;
davevogel0 4:f0fd4a4ec178 56 double Q_set, Q_end, Q_error, Q_error_int, Q_cal, Q_cal1, Q_cal2;
davevogel0 1:4465c9e203ce 57 double position;
davevogel0 3:337345f748cf 58 const double long gearbox = 0.085877862;
davevogel0 2:da3b7dd2beb0 59 const double long PI = 3.14159265359;
davevogel0 1:4465c9e203ce 60 double M_error1 = 0;
davevogel0 4:f0fd4a4ec178 61 int run = 0;
davevogel0 5:ec6dd614aa7e 62 bool H_wheel=0; // 0 is up and 1 is down
davevogel0 5:ec6dd614aa7e 63 bool Magnet=0;
davevogel0 0:76bc19ed12ee 64
davevogel0 0:76bc19ed12ee 65 //Timers and Tickers
davevogel0 0:76bc19ed12ee 66 Timer t;
davevogel0 0:76bc19ed12ee 67 Ticker t1,t2,t3;
davevogel0 0:76bc19ed12ee 68
davevogel0 0:76bc19ed12ee 69 //booleans run program
davevogel0 5:ec6dd614aa7e 70 volatile bool send_go = false, setpoint_go = false, control_go= false, calibration_go= false;
davevogel0 0:76bc19ed12ee 71
davevogel0 0:76bc19ed12ee 72 //------------------Activate programs-----------
davevogel0 0:76bc19ed12ee 73 //Activate send data pc
davevogel0 3:337345f748cf 74 void Send_True()
davevogel0 0:76bc19ed12ee 75 {
davevogel0 0:76bc19ed12ee 76 send_go = true;
davevogel0 0:76bc19ed12ee 77 }
davevogel0 0:76bc19ed12ee 78 // Activate desired location
davevogel0 1:4465c9e203ce 79 void M_Setpoint_True()
davevogel0 0:76bc19ed12ee 80 {
davevogel0 1:4465c9e203ce 81 setpoint_go = true;
davevogel0 1:4465c9e203ce 82 }
davevogel0 1:4465c9e203ce 83 // Controll if motor should go or not
davevogel0 1:4465c9e203ce 84 void M_Control_True()
davevogel0 1:4465c9e203ce 85 {
davevogel0 1:4465c9e203ce 86 control_go = true;
davevogel0 0:76bc19ed12ee 87 }
davevogel0 0:76bc19ed12ee 88 //------------------End of activate programs--------
davevogel0 0:76bc19ed12ee 89
davevogel0 0:76bc19ed12ee 90
davevogel0 0:76bc19ed12ee 91 //------------------Start of control programs-------
davevogel0 0:76bc19ed12ee 92
davevogel0 0:76bc19ed12ee 93 //Send values over HIDScope & Serial port
davevogel0 0:76bc19ed12ee 94 void Send()
davevogel0 0:76bc19ed12ee 95 {
davevogel0 0:76bc19ed12ee 96 scope.set(0,Motor1.getPulses());
davevogel0 0:76bc19ed12ee 97 scope.set(1,Motor2.getPulses());
davevogel0 0:76bc19ed12ee 98 scope.send();
davevogel0 0:76bc19ed12ee 99 }
davevogel0 0:76bc19ed12ee 100
davevogel0 3:337345f748cf 101 //Desired Position Motors
davevogel0 1:4465c9e203ce 102 void Setpoint()
davevogel0 1:4465c9e203ce 103 {
davevogel0 4:f0fd4a4ec178 104 // check if
davevogel0 5:ec6dd614aa7e 105 double R_set1=R_set;
davevogel0 5:ec6dd614aa7e 106 double Q_set1=Q_set;
davevogel0 4:f0fd4a4ec178 107
davevogel0 3:337345f748cf 108 //set desired x and y point in array --> do this with EMG
davevogel0 2:da3b7dd2beb0 109 int dX = pot1.read() * 10;
davevogel0 2:da3b7dd2beb0 110 int dY = pot2.read() * 10;
davevogel0 2:da3b7dd2beb0 111
davevogel0 2:da3b7dd2beb0 112 //Set the length of the arm
davevogel0 3:337345f748cf 113 R_set = sqrt( X[dX] * X[dX] + Y[dY] * Y[dY]); //desired length of the arm
davevogel0 3:337345f748cf 114 Q_set = acos( Y[dY] / X[dX] ); //desired angle of the arm (theta for Qref) [rad]
davevogel0 4:f0fd4a4ec178 115
davevogel0 4:f0fd4a4ec178 116 if (R_set1!=R_set && Q_set1 != Q_set) { // of ipv en
davevogel0 5:ec6dd614aa7e 117 pc.printf("reset\n");
davevogel0 4:f0fd4a4ec178 118 run=run+1;
davevogel0 4:f0fd4a4ec178 119 R_error_int=0;
davevogel0 4:f0fd4a4ec178 120 Q_error_int=0;
davevogel0 5:ec6dd614aa7e 121 }
davevogel0 4:f0fd4a4ec178 122
davevogel0 1:4465c9e203ce 123 }
davevogel0 2:da3b7dd2beb0 124
davevogel0 3:337345f748cf 125 void Lengtharm()
davevogel0 2:da3b7dd2beb0 126 {
davevogel0 2:da3b7dd2beb0 127 //read out length of arm
davevogel0 3:337345f748cf 128 double A_Rx = L1 * cos(gearbox * Motor1.getPulses() * PI / 180.0) + L2 * cos( (gearbox * Motor1.getPulses() + gearbox * Motor2.getPulses())* PI / 180.0);
davevogel0 3:337345f748cf 129 double A_Ry = L1 * sin(gearbox * Motor1.getPulses() * PI / 180.0) + L2 * sin( (gearbox * Motor1.getPulses() + gearbox * Motor2.getPulses())* PI / 180.0);
davevogel0 3:337345f748cf 130 A_R = sqrt( pow (A_Rx, 2) + pow (A_Ry, 2)); //length Arm
davevogel0 3:337345f748cf 131 R_error= A_R-R_set; //error in arm length
davevogel0 2:da3b7dd2beb0 132 }
davevogel0 2:da3b7dd2beb0 133
davevogel0 3:337345f748cf 134 void Qpos()
davevogel0 0:76bc19ed12ee 135 {
davevogel0 3:337345f748cf 136 //read out pos of Motor 1
davevogel0 3:337345f748cf 137 double A_Rx = L1 * cos(gearbox * Motor1.getPulses() * PI / 180.0) + L2 * cos( (gearbox * Motor1.getPulses() + gearbox * Motor2.getPulses())* PI / 180.0);
davevogel0 3:337345f748cf 138 double A_Ry = L1 * sin(gearbox * Motor1.getPulses() * PI / 180.0) + L2 * sin( (gearbox * Motor1.getPulses() + gearbox * Motor2.getPulses())* PI / 180.0);
davevogel0 5:ec6dd614aa7e 139 pc.printf("A_Rx = %f A_Ry = %f", A_Rx, A_Ry);
davevogel0 3:337345f748cf 140 Q_end= acos( A_Ry / A_Rx ); //actual angle of the arm //Aandacht is dit graden(moet in radians)?!!!!!
davevogel0 5:ec6dd614aa7e 141 pc.printf("Q_set = %f Q_end= %f \n", Q_set, Q_end);
davevogel0 3:337345f748cf 142 Q_error= Q_end-Q_set; //error in angle of Qref
davevogel0 3:337345f748cf 143 }
davevogel0 3:337345f748cf 144
davevogel0 3:337345f748cf 145 double Pw_control (double S_error, double& S_error_int, double Ks, double Kp,double Ki,double Kd, double friction)
davevogel0 3:337345f748cf 146 {
davevogel0 1:4465c9e203ce 147 // Motor Power
davevogel0 3:337345f748cf 148 M_error = S_error; //give the amount of error
davevogel0 3:337345f748cf 149
davevogel0 3:337345f748cf 150 double M_error_int = S_error_int + M_error / 1e4;
davevogel0 3:337345f748cf 151 S_error_int = M_error_int;
davevogel0 1:4465c9e203ce 152 double Ps = Ks;
davevogel0 1:4465c9e203ce 153 double Pp = Kp * M_error; //Proportional control
davevogel0 3:337345f748cf 154 double Pi = Ki * M_error_int; //check dit --> nog niet goed //int controll
davevogel0 3:337345f748cf 155 double Pd = Kd * (M_error - M_error1); //Differtial control
davevogel0 1:4465c9e203ce 156 M_error1 = M_error;
davevogel0 1:4465c9e203ce 157 double Power = Ps + Pp + Pi + Pd;
davevogel0 1:4465c9e203ce 158 pc.printf("Power bf: %f Pi: %f \n", Power, Pi);
davevogel0 1:4465c9e203ce 159
davevogel0 3:337345f748cf 160 // overcome minimum power required to turn and stop the motor from 'piepen' Also limit power to a max.
davevogel0 1:4465c9e203ce 161 if (Power<friction) {
davevogel0 1:4465c9e203ce 162 Power=0;
davevogel0 3:337345f748cf 163 } else if (Power>0.7) {
davevogel0 3:337345f748cf 164 Power=0.7;
davevogel0 1:4465c9e203ce 165 } else {}
davevogel0 1:4465c9e203ce 166
davevogel0 1:4465c9e203ce 167 return Power ;//is it possible to return 2 things for
davevogel0 1:4465c9e203ce 168 }
davevogel0 3:337345f748cf 169
davevogel0 1:4465c9e203ce 170 // direction controll
davevogel0 3:337345f748cf 171 bool dr_control (double A, double B)
davevogel0 1:4465c9e203ce 172 {
davevogel0 1:4465c9e203ce 173 // Direction motor should turn
davevogel0 5:ec6dd614aa7e 174 int Direction = (A > B) ? true:false;
davevogel0 1:4465c9e203ce 175 return Direction;
davevogel0 1:4465c9e203ce 176 }
davevogel0 3:337345f748cf 177
davevogel0 5:ec6dd614aa7e 178 void Servo()
davevogel0 5:ec6dd614aa7e 179 {
davevogel0 5:ec6dd614aa7e 180 swagvo.SetPosition(650); //lower wire
davevogel0 5:ec6dd614aa7e 181 wait(1);
davevogel0 5:ec6dd614aa7e 182 magnet = !magnet; //attach piece
davevogel0 5:ec6dd614aa7e 183 wait(1);
davevogel0 5:ec6dd614aa7e 184 swagvo.SetPosition(2350); //raise wire
davevogel0 5:ec6dd614aa7e 185 }
davevogel0 5:ec6dd614aa7e 186
davevogel0 0:76bc19ed12ee 187 //--------------- End of control programs----------
davevogel0 0:76bc19ed12ee 188 int main()
davevogel0 0:76bc19ed12ee 189 {
davevogel0 0:76bc19ed12ee 190 //turn that led off!It hurts my eyes! Ow, I do boot.
davevogel0 2:da3b7dd2beb0 191 myled = 1;
davevogel0 0:76bc19ed12ee 192
davevogel0 0:76bc19ed12ee 193 //PWM period motors
davevogel0 0:76bc19ed12ee 194 E1.period(0.0001f);
davevogel0 0:76bc19ed12ee 195 E2.period(0.0001f);
davevogel0 5:ec6dd614aa7e 196 swagvo.Enable(1500,20000);
davevogel0 0:76bc19ed12ee 197
davevogel0 0:76bc19ed12ee 198 pc.baud(115200);
davevogel0 0:76bc19ed12ee 199
davevogel0 0:76bc19ed12ee 200 //sub programs - time how fast everything occurs
davevogel0 5:ec6dd614aa7e 201 t1.attach_us(&Send_True, 1e6); //Send data to pc
davevogel0 5:ec6dd614aa7e 202 t2.attach_us(&M_Setpoint_True, 1e6); //Desired position motor(EMG goes here)
davevogel0 5:ec6dd614aa7e 203 t3.attach_us(M_Control_True, 1e6); //Speed control here
davevogel0 0:76bc19ed12ee 204
davevogel0 3:337345f748cf 205 //calibration
davevogel0 5:ec6dd614aa7e 206 // 0 point position
davevogel0 5:ec6dd614aa7e 207 pc.printf("0 cal\n");
davevogel0 5:ec6dd614aa7e 208 bool cal0 = true;
davevogel0 5:ec6dd614aa7e 209 while (cal0 == true) {
davevogel0 5:ec6dd614aa7e 210 if (button == false) {
davevogel0 4:f0fd4a4ec178 211 Qpos();
davevogel0 4:f0fd4a4ec178 212 Lengtharm();
davevogel0 4:f0fd4a4ec178 213 Q_cal=Q_end;
davevogel0 4:f0fd4a4ec178 214 R_cal=A_R;
davevogel0 5:ec6dd614aa7e 215 cal0= false;
davevogel0 5:ec6dd614aa7e 216
davevogel0 5:ec6dd614aa7e 217 //show usefull info on serial
davevogel0 5:ec6dd614aa7e 218 pc.printf("Q_set = %f Q_end= %f Q_error = %f \n", Q_set, Q_end, Q_error);
davevogel0 5:ec6dd614aa7e 219 pc.printf("R_set = %f A_R = %f R_error = %f \n", R_set, A_R, R_error);
davevogel0 4:f0fd4a4ec178 220 }
davevogel0 4:f0fd4a4ec178 221 }
davevogel0 5:ec6dd614aa7e 222
davevogel0 5:ec6dd614aa7e 223
davevogel0 4:f0fd4a4ec178 224 // Board point A
davevogel0 5:ec6dd614aa7e 225 wait (0.5);
davevogel0 5:ec6dd614aa7e 226 pc.printf("A cal\n");
davevogel0 5:ec6dd614aa7e 227 bool calA = true;
davevogel0 5:ec6dd614aa7e 228 while (calA == true) {
davevogel0 5:ec6dd614aa7e 229 if (button == false) {
davevogel0 4:f0fd4a4ec178 230 Qpos();
davevogel0 4:f0fd4a4ec178 231 Lengtharm();
davevogel0 4:f0fd4a4ec178 232 Q_cal1=Q_end;
davevogel0 4:f0fd4a4ec178 233 R_cal1=A_R;
davevogel0 5:ec6dd614aa7e 234 calA = false;
davevogel0 5:ec6dd614aa7e 235
davevogel0 5:ec6dd614aa7e 236 //show usefull info on serial
davevogel0 5:ec6dd614aa7e 237 pc.printf("Q_set = %f Q_end= %f Q_error = %f \n", Q_set, Q_end, Q_error);
davevogel0 5:ec6dd614aa7e 238 pc.printf("R_set = %f A_R = %f R_error = %f \n", R_set, A_R, R_error);
davevogel0 4:f0fd4a4ec178 239 }
davevogel0 4:f0fd4a4ec178 240 }
davevogel0 5:ec6dd614aa7e 241
davevogel0 4:f0fd4a4ec178 242 //Board point B
davevogel0 5:ec6dd614aa7e 243
davevogel0 5:ec6dd614aa7e 244 wait (0.5);
davevogel0 5:ec6dd614aa7e 245 pc.printf("B cal\n");
davevogel0 5:ec6dd614aa7e 246 bool calB = true;
davevogel0 5:ec6dd614aa7e 247 while (calB == true) {
davevogel0 5:ec6dd614aa7e 248 if (button == false) {
davevogel0 4:f0fd4a4ec178 249 Qpos();
davevogel0 4:f0fd4a4ec178 250 Lengtharm();
davevogel0 4:f0fd4a4ec178 251 Q_cal2=Q_end;
davevogel0 4:f0fd4a4ec178 252 R_cal2=A_R;
davevogel0 5:ec6dd614aa7e 253 calB = false;
davevogel0 5:ec6dd614aa7e 254
davevogel0 5:ec6dd614aa7e 255 //show usefull info on serial
davevogel0 5:ec6dd614aa7e 256 pc.printf("Q_set = %f Q_end= %f Q_error = %f \n", Q_set, Q_end, Q_error);
davevogel0 5:ec6dd614aa7e 257 pc.printf("R_set = %f A_R = %f R_error = %f \n", R_set, A_R, R_error);
davevogel0 4:f0fd4a4ec178 258 }
davevogel0 4:f0fd4a4ec178 259 }
davevogel0 5:ec6dd614aa7e 260
davevogel0 5:ec6dd614aa7e 261
davevogel0 3:337345f748cf 262 //-------------Schedule programs-------------------
davevogel0 0:76bc19ed12ee 263 while(1) {
davevogel0 4:f0fd4a4ec178 264 if (calibration_go == true) {
davevogel0 5:ec6dd614aa7e 265 pc.printf("calibration R_set = %f R_cal = %f \n", R_set, R_cal);
davevogel0 4:f0fd4a4ec178 266 //setpoint
davevogel0 5:ec6dd614aa7e 267 R_set = R_cal;
davevogel0 5:ec6dd614aa7e 268 Q_set = Q_cal;
davevogel0 4:f0fd4a4ec178 269 if (button_Arm1 == true && button_Arm2 == true ) {
davevogel0 5:ec6dd614aa7e 270 pc.printf("cal is set\n");
davevogel0 4:f0fd4a4ec178 271 Q_end = Q_cal;
davevogel0 4:f0fd4a4ec178 272 A_R = R_cal;
davevogel0 4:f0fd4a4ec178 273 calibration_go == false;
davevogel0 4:f0fd4a4ec178 274 } else {}
davevogel0 5:ec6dd614aa7e 275 } if(setpoint_go == true && calibration_go == false) {
davevogel0 5:ec6dd614aa7e 276 pc.printf("setpoint\n");
davevogel0 4:f0fd4a4ec178 277 if (run == 2) {
davevogel0 5:ec6dd614aa7e 278 pc.printf("Run = %f\n", run);
davevogel0 4:f0fd4a4ec178 279 calibration_go == true;
davevogel0 4:f0fd4a4ec178 280 run = 0;
davevogel0 4:f0fd4a4ec178 281 } else {
davevogel0 3:337345f748cf 282 Setpoint();
davevogel0 4:f0fd4a4ec178 283 }
davevogel0 1:4465c9e203ce 284 setpoint_go = false;
davevogel0 5:ec6dd614aa7e 285 }
davevogel0 5:ec6dd614aa7e 286 if (control_go == true) {
davevogel0 5:ec6dd614aa7e 287 pc.printf("control\n");
davevogel0 3:337345f748cf 288 Lengtharm();
davevogel0 3:337345f748cf 289 Qpos();
davevogel0 3:337345f748cf 290 if (-1*R_Max_error<R_error<R_Max_error) {
davevogel0 5:ec6dd614aa7e 291 pc.printf("Length control R_error = %f R_set = %f A_R = %f\n", R_error, R_set, A_R);
davevogel0 3:337345f748cf 292 // control Motor2
davevogel0 3:337345f748cf 293 E2 = Pw_control (R_error, R_error_int, M2_Ks, M2_Kp, M2_Ki, M2_Kd, M2_friction);
davevogel0 3:337345f748cf 294 M2 = dr_control (A_R,R_set);
davevogel0 3:337345f748cf 295 M2_error = M_error;
davevogel0 3:337345f748cf 296 //print error
davevogel0 5:ec6dd614aa7e 297 pc.printf("R_error = %f\n", R_error);
davevogel0 5:ec6dd614aa7e 298 } else if (-1*R_Max_error<Q_error<R_Max_error) {
davevogel0 5:ec6dd614aa7e 299 pc.printf("Angle control Q_error = %f Q_set = %f Q_end = %f\n", Q_error, Q_set, Q_end);
davevogel0 3:337345f748cf 300 // control Motor 1
davevogel0 5:ec6dd614aa7e 301 E1 = 0;//Pw_control (Q_error, Q_error_int, M1_Ks, M1_Kp, M1_Ki, M1_Kd, M1_friction);
davevogel0 3:337345f748cf 302 M1 = dr_control (Q_end, Q_set);
davevogel0 3:337345f748cf 303 // control Motor 2 - has to do nothing
davevogel0 3:337345f748cf 304 E2 = 0;
davevogel0 5:ec6dd614aa7e 305 // print error
davevogel0 5:ec6dd614aa7e 306 pc.printf("Q_error = %f\n", Q_error);
davevogel0 5:ec6dd614aa7e 307 } else {
davevogel0 5:ec6dd614aa7e 308 E1 = 0;
davevogel0 5:ec6dd614aa7e 309 E2 = 0;
davevogel0 5:ec6dd614aa7e 310 pc.printf("i dont know what to do R_error = %f R_set = %f A_R = %f\n", R_error, R_set, A_R);
davevogel0 5:ec6dd614aa7e 311 }
davevogel0 1:4465c9e203ce 312 control_go = false;
davevogel0 5:ec6dd614aa7e 313 }
davevogel0 5:ec6dd614aa7e 314 if (send_go == true) {
davevogel0 5:ec6dd614aa7e 315 pc.printf("send\n");
davevogel0 0:76bc19ed12ee 316 Send();
davevogel0 0:76bc19ed12ee 317
davevogel0 0:76bc19ed12ee 318 send_go = false;
davevogel0 5:ec6dd614aa7e 319 }
davevogel0 5:ec6dd614aa7e 320 if (button_Servo == false) {
davevogel0 5:ec6dd614aa7e 321 pc.printf("servo\n");
davevogel0 5:ec6dd614aa7e 322 Servo();
davevogel0 5:ec6dd614aa7e 323 }
davevogel0 0:76bc19ed12ee 324
davevogel0 0:76bc19ed12ee 325 //-----------End of scedule progrmas----------------
davevogel0 5:ec6dd614aa7e 326
davevogel0 0:76bc19ed12ee 327 }
davevogel0 0:76bc19ed12ee 328 }