Control up to two motors using filtered EMG signals and a PID controller
Dependencies: FastPWM HIDScope MODSERIAL QEI Matrix biquadFilter controller errorFetch mbed motorConfig refGen MatrixMath inverseKinematics
Fork of Minor_test_serial by
Diff: main.cpp
- Revision:
- 30:65f0c9ecf810
- Parent:
- 29:9aa4d63a9bd1
- Child:
- 31:cc08254ab7b5
diff -r 9aa4d63a9bd1 -r 65f0c9ecf810 main.cpp --- a/main.cpp Mon Oct 16 08:45:03 2017 +0000 +++ b/main.cpp Mon Oct 16 09:42:04 2017 +0000 @@ -4,6 +4,7 @@ #include "QEI.h" #include "FastPWM.h" #include "refGen.h" +#include "controller.h" // Defining relevant constant parameters const float gearRatio = 131; @@ -107,11 +108,7 @@ } // motorController sets a motorValue based on the position error. Sign indicates direction and magnitude indicates speed. Right now this is a simple feedforward -float motorController(float e_pos, float e_int, float e_der){ - float motorValue; - motorValue = k_p*e_pos + k_d*e_der + k_i*e_int; - return motorValue; - } +controller motorController1(k_p, k_d, k_i); // setMotor1 sets the direction and magnitude pins of motor1 depending on the given motorValue. Negative motorValue means clockwise rotation void setMotor1(float motorValue){ @@ -158,7 +155,7 @@ void measureAndControl(){ getError(e_pos, e_int, e_der); - float motorValue = motorController(e_pos, e_int, e_der); + float motorValue = motorController1.control(e_pos, e_int, e_der); float r = ref.getReferencePosition(maxAngle, r_direction); sendDataToPc(r, e_pos, e_int, e_der, motorValue); pc.printf("Motorvalue is %.2f \r\n", motorValue);