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.
Revision 0:8336c89b41ab, committed 2017-10-26
- Comitter:
- arthurdelange
- Date:
- Thu Oct 26 13:32:38 2017 +0000
- Commit message:
- PID en Kinematica samengevoegd (op de T vervangen door ts in de kinematica void na is er nog niks veranderd en zijn de scripts alleen maar samengevoegd).
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
| mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r 8336c89b41ab main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Thu Oct 26 13:32:38 2017 +0000
@@ -0,0 +1,116 @@
+#include "mbed.h"
+#include "Serial.h"
+#include "QEI.h"
+#include "math.h"
+
+
+Serial pc(USBTX, USBRX); //Serial PC connectie
+QEI encoder(D13, D12, NC, 32); //encoder instellen
+DigitalOut motor1DirectionPin(D4); //Motorrichting op D4 (connected op het bord)
+PwmOut motor1MagnitudePin(D5); //Motorkracht op D5 (connected op het bord)
+Ticker controller; //toets sample tijd
+double fs = 10000; // sample frequentie
+double ts = 1/fs;
+
+// variablen voor void
+int pulses;
+int ref;
+int er;
+float Kp=0.0005;
+float P;
+float D;
+float Dif;
+float Kd=0.00012;
+float PID;
+int er2=0;
+
+// constantes_k
+float L1 = 0.250;
+float L2 = 0.355;
+float L3 = 0.150;
+
+
+// Reference position_k
+float q1_1 = 0;
+float q2_1 = 0;
+float q1_2;
+float q2_2;
+
+// EMG Input_k
+float vx ;
+float vy ;
+
+
+// Encoder input_k
+float q1_enc; //encoder actuator 1
+float q2_enc; //encoder actuator 2
+
+
+void PD()
+{
+char key;
+ if(pc.readable()==true)
+ { key = pc.getc();
+ if (key=='q')
+ {
+ ref=-500; //reference wordt 500 pulses
+ }
+ else if(key=='w')
+ {
+ ref=0;
+ }
+ else if(key=='e')
+ {
+ ref=500; //reference wordt 0 pulses
+ }
+ }
+//error bepalen
+pulses=encoder.getPulses();
+er=ref-pulses;
+
+//PID
+//Proportional part
+P = Kp*er;
+
+//Differential part
+Dif=(er2-er)/ts;
+D=Kd*Dif;
+
+//PID sum
+PID=P+D;
+er2=er;
+
+ //Motor control
+ if (P<0)
+ {
+ motor1MagnitudePin = fabs(P);
+ motor1DirectionPin = 1;
+ }
+ else if (P>0)
+ {
+ motor1MagnitudePin = fabs(P);
+ motor1DirectionPin = 0;
+ }
+
+}
+
+// Calculating q_set_k
+void Kinematics()
+ {
+ q1_1 = q1_2;
+ q2_1 = q2_2;
+
+ q1_2 = ((-(L3 + L2*cos(q2_1))/(L1*L3*cos(q1_1) + L1*L2*cos(q1_1)*cos(q2_1) + L1*L2*sin(q1_1)*sin(q2_1))) * vx + (-(L2*sin(q2_1))/(L1*L3*cos(q1_1) + L1*L2*cos(q1_1)*cos(q2_1) + L1*L2*sin(q1_1)*sin(q2_1))) * vy) * ts + q1_enc;
+ q2_2 = (((L3 + L2*cos(q2_1) - L1*sin(q1_1))/(L1*L3*cos(q1_1) + L1*L2*cos(q1_1)*cos(q2_1) + L1*L2*sin(q1_1)*sin(q2_1)) * vx) + ((L1*cos(q1_1) + L2*sin(q2_1))/(L1*L3*cos(q1_1) + L1*L2*cos(q1_1)*cos(q2_1) + L1*L2*sin(q1_1)*sin(q2_1))) * vy) * ts + q2_enc;
+ }
+
+int main()
+{
+controller.attach_us(&PD, 10000);
+
+while(true)
+{
+}
+
+
+}
\ No newline at end of file
diff -r 000000000000 -r 8336c89b41ab mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Oct 26 13:32:38 2017 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/fb8e0ae1cceb \ No newline at end of file
