Marjolein Scheffers / Mbed 2 deprecated BioRobotics_Main

Dependencies:   MODSERIAL QEI biquadFilter mbed

Fork of BioRobotics_Main by Casper Berkhout

Files at this revision

API Documentation at this revision

Comitter:
CasperBerkhout
Date:
Thu Nov 02 08:57:41 2017 +0000
Parent:
0:4141aef83f4b
Child:
2:c7369b41f7ae
Commit message:
Homing and PI control working. Kinematics not active

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Wed Nov 01 12:55:50 2017 +0000
+++ b/main.cpp	Thu Nov 02 08:57:41 2017 +0000
@@ -22,15 +22,18 @@
 DigitalOut M2_direction(D4);
 AnalogIn potmeter(A0);      //left pot
 AnalogIn potmeter2(A1);     //right pot
-InterruptIn button1(D2);       //hardware interrupt for stopping motors
-DigitalIn LimSW1(D1);
-DigitalIn LimSW2(D0);
-DigitalIn HomStart(D3);
-Ticker motor_update;
+InterruptIn button1(D2);       //hardware interrupt for stopping motors - right button
+DigitalIn LimSW1(D9);
+DigitalIn LimSW2(D8);
+DigitalIn HomStart(D3); // - left button
+
 BiQuad bqlowpass(0,    0.611,    0.611,  1,    0.222);
 //create scope objects - note: script won't run when HID usb port is not connected
 //HIDScope scope(5); //set # of channels
-Ticker scopeTimer;
+
+Ticker motor_update1;
+Ticker motor_update2;
+Ticker error_update;
 
 
 //-----------------variable decleration----------------
@@ -44,51 +47,63 @@
 
 double M1_home; 
 double M1_error_pos = 0;
-float M1_Kp = 0.1;
-float M1_Ki = 0.1;
-float M1_Kd = 0.1;
+float M1_Kp = 2;
+float M1_Ki = 4;
+float M1_Kd = 0;
 double M1_e_int=0;
 double M1_e_prior=0;
 
 double M2_home; 
 double M2_error_pos = 0;
-float M2_Kp = 0.1;
+float M2_Kp = 0.3;
 float M2_Ki = 0.1;
-float M2_Kd = 0.1;
+float M2_Kd = 0;
 double M2_e_int=0;
 double M2_e_prior=0;
 
 float Ts = 0.002; //500hz sample freq
 
- 
+bool M1homflag;
+bool M2homflag;
+bool Homstartflag;
+  
  void homing_system () {
     LimSW1.mode(PullDown);
     LimSW2.mode(PullDown);
     M1_speed.write(0);
     M2_speed.write(0);
     M1_direction.write(0);
-    M2_direction.write(0);
+    M2_direction.write(1);
     
-    while (true){
-   
-        if (HomStart == 0){
-          M1_speed.write(0.1);
-          }  
- 
-        if (LimSW1 ==  1){
-            M1_speed.write(0);
-            M2_speed.write(0.1);
-            M1_home = enc1.getPulses()/32.0/131.25*2.0*3.1416; //in radians
-            }
-        if (LimSW2 == 1) {
-            M2_speed.write(0);
-            M2_home = enc2.getPulses()/32.0/131.25*2.0*3.1416; //in radians
-            }
+       while(1){
+        if (HomStart.read() == 0){
+          M1_speed.write(0.4);
+          wait(0.5);
+          M2_speed.write(0.3);
+          pc.printf("starting M1 \n\r");
+        }
+        if(LimSW1.read() ==  1){
+          
+          M1_speed.write(0);
+          M1_home = enc1.getPulses()/32.0/131.25*2.0*3.1416; //in radians
+        }    
+        if (LimSW2.read() == 1) {
+          M2_speed.write(0);
+          
+          M2_home = enc2.getPulses()/32.0/131.25*2.0*3.1416; //in radians
+        }
             
-            if (LimSW1 == 1 && LimSW2 ==1) {
+        if (LimSW1.read() == 1 && LimSW2.read() ==1) {
+                pc.printf("Homing finished \n\r");
+                M1_speed.write(0);
+                M2_speed.write(0);
+                wait(0.5);
+                M1_home = enc1.getPulses()/32.0/131.25*2.0*3.1416; //in radians
+                M2_home = enc2.getPulses()/32.0/131.25*2.0*3.1416; //in radians
                 break;
-                }
-}
+        }
+       }
+
 }
 
  
@@ -121,6 +136,7 @@
      M1_direction.write(1);
      }
     else{M1_speed.write(0);}
+    pc.printf("Motor1 set speed = %f \n\r",set_speed);
  }
  
  void M2_control(){
@@ -158,13 +174,15 @@
     double M2_actual_pos = Arm2_home + (M2_rel_pos - M2_home)/2; //!!!!!!!Gearing ratio of timing belt = 2!!!!!!!!!!
     
     double q1 = M1_actual_pos;
-    double q2 = 3.1416-M1_acual_pos-M2_actual_pos //see drawing
+    double q2 = 3.1416-M1_actual_pos-M2_actual_pos; //see drawing
     
-    double M1_reference_pos = potmeter.read();
-    double M2_reference_pos = potmeter2.read();
+    //double M1_reference_pos = 1+potmeter.read()*0.5*3.1416; //should cover the right range - radians
+    double M1_reference_pos = 0.5*3.1416; //should cover the right range - radians
+    double M2_reference_pos = 0.5+potmeter2.read()*0.25*3.1416;
         
     M1_error_pos = M1_reference_pos - M1_actual_pos;
-    M2_error_pos = M2_reference_pos - M2_actual_pos;
+    //M2_error_pos = M2_reference_pos - M2_actual_pos;
+    M2_error_pos = 0;
 }
  
 int main() {
@@ -173,19 +191,18 @@
 M1_speed.period(1.0/pwm_freq);
 M2_speed.period(1.0/pwm_freq);
 pc.baud(115200);
+pc.printf("starting homing function now. Push button to start procedure \n\r");
 //commence homing procedure
 homing_system();
+pc.printf("Setting home position complete\n\r");
 //attach all interrupt
+pc.printf("attaching interrupt tickers now \n\r");
 button1.fall(StopMotors);     //stop motor interrupt
-motor_update.attach(&M1_control, &M2_control,0.01);
-//motor_update.attach(&M2_control,0.01);
-
+motor_update1.attach(&M1_control,0.01);
+motor_update2.attach(&M2_control,0.01);
+error_update.attach(&geterror,0.01);
 
-
-
-
-
-pc.printf("initialization complete \n\r");
+pc.printf("initialization complete - position control of motors now active\n\r");
     
     while(1){   
         
--- a/mbed.bld	Wed Nov 01 12:55:50 2017 +0000
+++ b/mbed.bld	Thu Nov 02 08:57:41 2017 +0000
@@ -1,1 +1,1 @@
-https://os.mbed.com/users/mbed_official/code/mbed/builds/aae6fcc7d9bb
\ No newline at end of file
+https://os.mbed.com/users/mbed_official/code/mbed/builds/fb8e0ae1cceb
\ No newline at end of file