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 First Last

Committer:
tvlogman
Date:
Thu Sep 21 10:02:29 2017 +0000
Revision:
14:664870b5d153
Parent:
13:83e3672b24ee
Child:
15:b76b8cff4d8f
Added killswitch on sw2 and switch-direction function

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vsluiter 0:c8f15874531b 1 #include "mbed.h"
vsluiter 0:c8f15874531b 2 #include "MODSERIAL.h"
tvlogman 8:0067469c3389 3 #include "HIDScope.h"
tvlogman 9:5f0e796c9489 4 #include "QEI.h"
tvlogman 8:0067469c3389 5
tvlogman 12:0462757e1ed2 6 QEI Encoder(D12,D13,NC,64, QEI::X4_ENCODING);
tvlogman 10:e23cbcdde7e3 7 MODSERIAL pc(USBTX, USBRX);
tvlogman 8:0067469c3389 8
tvlogman 14:664870b5d153 9 // Defining outputs
tvlogman 13:83e3672b24ee 10 DigitalOut motor1_direction(D4);
tvlogman 13:83e3672b24ee 11 PwmOut motor1_pwm(D5);
tvlogman 14:664870b5d153 12
tvlogman 14:664870b5d153 13 // Defining inputs
tvlogman 14:664870b5d153 14 InterruptIn sw2(SW2);
tvlogman 14:664870b5d153 15
tvlogman 14:664870b5d153 16
tvlogman 13:83e3672b24ee 17 float pwmPeriod = 1.0/5000.0;
tvlogman 13:83e3672b24ee 18
tvlogman 10:e23cbcdde7e3 19 Ticker encoderTicker;
tvlogman 10:e23cbcdde7e3 20 volatile int counts = 0;
tvlogman 12:0462757e1ed2 21 volatile float revs = 0.00;
tvlogman 7:1bffab95fc5f 22
tvlogman 10:e23cbcdde7e3 23 void readEncoder(){
tvlogman 10:e23cbcdde7e3 24 counts = Encoder.getPulses();
tvlogman 12:0462757e1ed2 25 revs = counts/64.0f;
tvlogman 12:0462757e1ed2 26 pc.printf("%i pulses \r\n", counts);
tvlogman 12:0462757e1ed2 27 pc.printf("%f revolutions \r\n", revs);
tvlogman 10:e23cbcdde7e3 28 }
tvlogman 14:664870b5d153 29
tvlogman 14:664870b5d153 30 void killSwitch(){
tvlogman 14:664870b5d153 31 motor1_pwm.write(0.0);
tvlogman 14:664870b5d153 32 }
tvlogman 14:664870b5d153 33
tvlogman 14:664870b5d153 34 void M1switchDirection(){
tvlogman 14:664870b5d153 35 motor1_direction = !motor1_direction;
tvlogman 14:664870b5d153 36 }
vsluiter 0:c8f15874531b 37
tvlogman 13:83e3672b24ee 38 int frequency_pwm = 10000; //10kHz PWM
tvlogman 13:83e3672b24ee 39
tvlogman 7:1bffab95fc5f 40
vsluiter 0:c8f15874531b 41 int main()
tvlogman 10:e23cbcdde7e3 42 {
tvlogman 14:664870b5d153 43 motor1_direction = false;
tvlogman 13:83e3672b24ee 44 motor1_pwm.period(pwmPeriod);//T=1/f
tvlogman 14:664870b5d153 45 sw2.fall(&killSwitch);
tvlogman 13:83e3672b24ee 46
vsluiter 0:c8f15874531b 47 pc.baud(115200);
tvlogman 12:0462757e1ed2 48 encoderTicker.attach(readEncoder, 1.0);
tvlogman 10:e23cbcdde7e3 49 pc.printf("Encoder ticker attached and baudrate set");
tvlogman 13:83e3672b24ee 50
tvlogman 14:664870b5d153 51 motor1_pwm.write(100.0/100.0);//write Duty Cycle
tvlogman 14:664870b5d153 52
tvlogman 14:664870b5d153 53 sw2.fall(&killSwitch);
vsluiter 0:c8f15874531b 54 }
tvlogman 7:1bffab95fc5f 55