Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: HIDScope QEI biquadFilter mbed
Fork of EMG_Controller_5 by
Diff: main.cpp
- Revision:
- 0:46582bba07d2
- Child:
- 1:83fccd7d8483
diff -r 000000000000 -r 46582bba07d2 main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Mon Oct 17 13:53:44 2016 +0000
@@ -0,0 +1,79 @@
+#include "mbed.h"
+#include "QEI.h"
+
+PwmOut Motor1_pwm(D5);
+QEI Encoder(D12,D13,NC,64);
+Serial pc(USBTX,USBRX);
+Ticker Controller;
+
+float Radius = 10;
+float Frequency = 30;
+float Multiplier = 1;
+float k1 = 1;
+float k2 = 0.1f;
+float k3 = 0.1f;
+float Start_slow = 100;
+float Start_lock = 60;
+float End_slow = 400;
+float End_lock = 440;
+float Frequency_PWM = 10000;
+float Counts = 0;
+float Revolutions = 0;
+const double pi = 3.14159265359;
+
+float Input_force = 0.1;
+float Angle = 0;
+float Curr_speed = 0;
+float Desired_speed;
+float Delta_speed;
+float Int_delta_speed;
+float Deriv_delta_speed = 0;
+float Prev_delta_speed = 0;
+
+void Slide_Controller();
+
+int main()
+{
+ Motor1_pwm.period(1.0/Frequency_PWM);//T=1/f
+
+ Controller.attach(&Slide_Controller,1/Frequency);
+ pc.baud(9600);
+ while (true) {
+ Counts = Encoder.getPulses();
+ Revolutions = Counts /(32*131);
+ Angle = Revolutions*2*pi;
+ char a = pc.getc();
+ Input_force = (float)a/100;
+
+ pc.printf("%f", Input_force);
+ //Motor1_pwm.write(Slide_Controller(Input_force));
+
+ wait(1/Frequency);
+ }
+ return 0;
+}
+
+
+
+
+float Position(float Angle){
+ return Angle*Radius;
+}
+
+void Slide_Controller(){ // Dit ding moet keihard geloopt worden op minstens 30 Hz (Frequency)
+
+ Desired_speed = Input_force*Multiplier;
+
+ if (Position(Angle) < Start_slow && Desired_speed < 0){
+ Desired_speed *= (Position(Angle)-Start_lock)/(Start_slow-Start_lock)*1.5-0.5;
+ }
+ if (Position(Angle) > End_slow && Desired_speed > 0){
+ Desired_speed *= (End_lock-Position(Angle))/(End_lock-End_slow)*1.5-0.5;
+ }
+ Prev_delta_speed = Delta_speed;
+ Delta_speed = Desired_speed-Curr_speed; // P
+ Int_delta_speed += Delta_speed/Frequency; // I
+ Deriv_delta_speed = (Delta_speed-Prev_delta_speed)*Frequency; // D
+ Motor1_pwm.write(k1*Delta_speed + k2*Int_delta_speed + k3*Deriv_delta_speed);
+ //return k1*Delta_speed + k2*Int_delta_speed + k3*Deriv_delta_speed;
+}
\ No newline at end of file
