Remco Dasselaar / Mbed 2 deprecated TotalControlEmg2

Dependencies:   HIDScope MODSERIAL QEI TextLCD mbed

Fork of TotalControlEmg2 by Remco Dasselaar

Committer:
Bartvaart
Date:
Tue Oct 06 12:02:22 2015 +0000
Revision:
0:557b1ff83a8a
Child:
1:98be4152a539
Weet niet zeker of die van net goed ging dus nog een keer voor we op compile gaan drukken. Spannend!

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Bartvaart 0:557b1ff83a8a 1 #include "mbed.h"
Bartvaart 0:557b1ff83a8a 2 #include "HIDScope.h"
Bartvaart 0:557b1ff83a8a 3 #include "encoder.h"
Bartvaart 0:557b1ff83a8a 4 #include "Filter.h"
Bartvaart 0:557b1ff83a8a 5
Bartvaart 0:557b1ff83a8a 6 AnalogIn emg(A0); //Analog input van emg kabels
Bartvaart 0:557b1ff83a8a 7 Ticker EMGticker;
Bartvaart 0:557b1ff83a8a 8 HIDScope scope(2); //2 scopes
Bartvaart 0:557b1ff83a8a 9
Bartvaart 0:557b1ff83a8a 10 // constante variabelen:
Bartvaart 0:557b1ff83a8a 11
Bartvaart 0:557b1ff83a8a 12 //Sample frequentie
Bartvaart 0:557b1ff83a8a 13 Fs = 500; //Hz
Bartvaart 0:557b1ff83a8a 14 t = 1/ Fs; // voor EMGticker
Bartvaart 0:557b1ff83a8a 15
Bartvaart 0:557b1ff83a8a 16 // Filter1a: 50Hz Notch
Bartvaart 0:557b1ff83a8a 17 double v1_50a = 0, v2_50a = 0;
Bartvaart 0:557b1ff83a8a 18 const double a1_50a = -1.61803398875, a2_50a = 1.00000000000;
Bartvaart 0:557b1ff83a8a 19 const double b0_50a = 1.00000000000, b1_50a = -1.61803398875, b2_50a = 1.00000000000;
Bartvaart 0:557b1ff83a8a 20
Bartvaart 0:557b1ff83a8a 21 // Filter1b: 50Hz Notch
Bartvaart 0:557b1ff83a8a 22 double v1_50b = 0, v2_50b = 0;
Bartvaart 0:557b1ff83a8a 23 const double a1_50b = -1.61803398875, a2_50b = 1.00000000000;
Bartvaart 0:557b1ff83a8a 24 const double b0_50b = 1.00000000000, b1_50b = -1.61803398875, b2_50b = 1.00000000000;
Bartvaart 0:557b1ff83a8a 25
Bartvaart 0:557b1ff83a8a 26 // Filter1: 20Hz HighPass
Bartvaart 0:557b1ff83a8a 27 double v1_HP = 0, v2_HP = 0;
Bartvaart 0:557b1ff83a8a 28 const double a1_HP = -0.76475499450, a2_HP = 0.27692273367;
Bartvaart 0:557b1ff83a8a 29 const double b0_HP = 1.00000000000, b1_HP = -2.00000000000, b2_HP = 1.00000000000;
Bartvaart 0:557b1ff83a8a 30
Bartvaart 0:557b1ff83a8a 31 // Filter1: 5Hz LowPass
Bartvaart 0:557b1ff83a8a 32 double v1_LP = 0, v2_LP = 0;
Bartvaart 0:557b1ff83a8a 33 const double a1_LP = -1.16338171052, a2_LP = 0.42191097989;
Bartvaart 0:557b1ff83a8a 34 const double b0_LP = 1.00000000000, b1_LP = 2.00000000000, b2_LP = 1.00000000000;
Bartvaart 0:557b1ff83a8a 35
Bartvaart 0:557b1ff83a8a 36
Bartvaart 0:557b1ff83a8a 37 void EMGfilter()
Bartvaart 0:557b1ff83a8a 38 {
Bartvaart 0:557b1ff83a8a 39 //u = input waarde
Bartvaart 0:557b1ff83a8a 40 //y = output waarde
Bartvaart 0:557b1ff83a8a 41
Bartvaart 0:557b1ff83a8a 42 double u = emg.read(); // lees waarde van emg signaal uit
Bartvaart 0:557b1ff83a8a 43
Bartvaart 0:557b1ff83a8a 44 // Op deze manier worden de waardes ingelezen in Filter. Zorg dus voor dezelfde volgorde, zodat de waardes goed uitgelezen worden!:
Bartvaart 0:557b1ff83a8a 45 // Filter(double u, double &v1, double &v2, const double a1, const double a2, const double b0, const double b1, const double b2)
Bartvaart 0:557b1ff83a8a 46
Bartvaart 0:557b1ff83a8a 47 // 50Hz Notch filter
Bartvaart 0:557b1ff83a8a 48 double y50a = double Filter(u, v1_50a, v2_50a, a1_50a, a2_50a, b0_50a, b1_50a, b2_50a);
Bartvaart 0:557b1ff83a8a 49 double y50b = double Filter(y50a, v1_50b, v2_50b, a1_50b, a2_50b, b0_50b, b1_50b, b2_50b);
Bartvaart 0:557b1ff83a8a 50
Bartvaart 0:557b1ff83a8a 51 // High Pass filter. Tot 20Hz wordt weggefliterd
Bartvaart 0:557b1ff83a8a 52 double yHP = double Filter(y50b, v1_HP, v2_HP, a1_HP, a2_HP, b0_HP, b1_HP, b2_HP);
Bartvaart 0:557b1ff83a8a 53
Bartvaart 0:557b1ff83a8a 54 // Absolute waarde wordt genomen.
Bartvaart 0:557b1ff83a8a 55 double y1 = fabs(yHP);
Bartvaart 0:557b1ff83a8a 56
Bartvaart 0:557b1ff83a8a 57 // Low Pass filter. Alles vanaf 5Hz wordt weggefilterd
Bartvaart 0:557b1ff83a8a 58 double yLP = double Filter(y1, v1_LP, v2_LP, a1_LP, a2_LP, b0_LP, b1_LP, b2_LP);
Bartvaart 0:557b1ff83a8a 59
Bartvaart 0:557b1ff83a8a 60 double y = yLP;
Bartvaart 0:557b1ff83a8a 61
Bartvaart 0:557b1ff83a8a 62 // Plotten in HIDscope
Bartvaart 0:557b1ff83a8a 63 scope.set(0,u); //ongefilterde waarde naar scope 1
Bartvaart 0:557b1ff83a8a 64 scope.set(1,y); //gefilterde waarde naar scope 2
Bartvaart 0:557b1ff83a8a 65 scope.send(); //stuur de waardes naar HIDscope
Bartvaart 0:557b1ff83a8a 66 }
Bartvaart 0:557b1ff83a8a 67
Bartvaart 0:557b1ff83a8a 68
Bartvaart 0:557b1ff83a8a 69 int main(){
Bartvaart 0:557b1ff83a8a 70 EMGticker.attach(&EMGfilter, t) //500Hz
Bartvaart 0:557b1ff83a8a 71 while(1){}
Bartvaart 0:557b1ff83a8a 72 }
Bartvaart 0:557b1ff83a8a 73