4 directional EMG control of the XY table. Made during my bachelor end assignment.

Dependencies:   C12832_lcd HIDScope mbed-dsp mbed

Files at this revision

API Documentation at this revision

Comitter:
jessekaiser
Date:
Tue Jun 09 13:16:50 2015 +0000
Parent:
51:75a8c7191555
Child:
53:f783b3192dbb
Commit message:
Endconcept 4. Averaging of the EMG signal

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/main.cpp	Tue Jun 09 13:06:45 2015 +0000
+++ b/main.cpp	Tue Jun 09 13:16:50 2015 +0000
@@ -88,12 +88,66 @@
 
 //global variabels
 float filtered_biceps, filtered_triceps, filtered_pect, filtered_deltoid;
+float average_bi, average_tri, average_pect, average_delt;
 float speed_old1, speed_old2, speed_old3, speed_old4;
 float acc1, acc2, acc3, acc4;
 float force1, force2, force3, force4;
 float speed1, speed2, speed3, speed4;
 float damping1, damping2, damping3, damping4;
 
+
+void average_biceps(float filtered_biceps,float *average)
+{
+    static float total=0;
+    static float number=0;
+    total = total + filtered_biceps;
+    number = number + 1;
+    if ( number == 50) {
+        *average = total/50;
+        total = 0;
+        number = 0;
+    }
+}
+
+void average_triceps(float filtered_triceps,float *average)
+{
+    static float total=0;
+    static float number=0;
+    total = total + filtered_triceps;
+    number = number + 1;
+    if ( number == 50) {
+        *average = total/50;
+        total = 0;
+        number = 0;
+    }
+}
+
+void average_pectoralis(float filtered_pect,float *average)
+{
+    static float total=0;
+    static float number=0;
+    total = total + filtered_pect;
+    number = number + 1;
+    if ( number == 50) {
+        *average = total/50;
+        total = 0;
+        number = 0;
+    }
+}
+
+void average_deltoid(float filtered_deltoid ,float *average)
+{
+    static float total=0;
+    static float number=0;
+    total = total + filtered_deltoid;
+    number = number + 1;
+    if ( number == 50) {
+        *average = total/50;
+        total = 0;
+        number = 0;
+    }
+}
+
 void looper_emg()
 {
     float emg_value1_f32, emg_value2_f32, emg_value3_f32, emg_value4_f32;
@@ -106,22 +160,22 @@
     arm_biquad_cascade_df1_f32(&highnotch_biceps, &emg_value1_f32, &filtered_biceps, 1 );   //High pass and notch filter
     filtered_biceps = fabs(filtered_biceps);                                                //Rectifier
     arm_biquad_cascade_df1_f32(&lowpass_biceps, &filtered_biceps, &filtered_biceps, 1 );    //low pass filter
-
+    average_biceps(filtered_biceps,&average_bi);
     //process emg triceps
     arm_biquad_cascade_df1_f32(&highnotch_triceps, &emg_value2_f32, &filtered_triceps, 1 );
     filtered_triceps = fabs(filtered_triceps);
     arm_biquad_cascade_df1_f32(&lowpass_triceps, &filtered_triceps, &filtered_triceps, 1 );
-
+     average_triceps(filtered_triceps,&average_tri);
     //process emg pectoralis major
     arm_biquad_cascade_df1_f32(&highnotch_pect, &emg_value3_f32, &filtered_pect, 1 );
     filtered_pect = fabs(filtered_pect);
     arm_biquad_cascade_df1_f32(&lowpass_pect, &filtered_pect, &filtered_pect, 1 );
-
+     average_pectoralis(filtered_pect,&average_pect);
     //process emg deltoid
     arm_biquad_cascade_df1_f32(&highnotch_deltoid, &emg_value4_f32, &filtered_deltoid, 1 );
     filtered_deltoid = fabs(filtered_deltoid);
     arm_biquad_cascade_df1_f32(&lowpass_deltoid, &filtered_deltoid, &filtered_deltoid, 1 );
-
+     average_deltoid(filtered_deltoid,&average_delt);
     /*send value to PC. */
     scope.set(0,filtered_biceps); //Filtered EMG signal
     scope.set(1,filtered_triceps);
@@ -132,7 +186,7 @@
 void looper_motory()
 {
     //Forward
-    force1 = K_Gain*(filtered_biceps/MAX_bi);
+    force1 = K_Gain*(average_bi/MAX_bi);
     force1 = force1 - damping1;
     acc1 = force1/Mass;
     speed1 = speed_old1 + (acc1 * dt);
@@ -141,7 +195,7 @@
     speed_old1 = speed1;
 
     //Achteruit triceps
-    force2 = K_Gain*(filtered_triceps/MAX_tri);
+    force2 = K_Gain*(average_tri/MAX_tri);
     force2 = force2 - damping2;
     acc2 = force2/Mass;
     speed2 = speed_old2 + (acc2 * dt);
@@ -185,7 +239,7 @@
 void looper_motorx()
 {
     //To the left
-    force3 = K_Gain*(filtered_pect/MAX_pect);
+    force3 = K_Gain*(average_pect/MAX_pect);
     force3 = force3 - damping3;
     acc3 = force3/Mass;
     speed3 = speed_old3 + (acc3 * dt);
@@ -194,7 +248,7 @@
     speed_old3 = speed3;
 
     //To the right
-    force4 = K_Gain*(filtered_deltoid/MAX_delt);
+    force4 = K_Gain*(average_delt/MAX_delt);
     force4 = force4 - damping4;
     acc4 = force4/Mass;
     speed4 = speed_old4 + (acc4 * dt);