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 9:182b33cabd45, committed 2017-11-01
- Comitter:
- JornJan
- Date:
- Wed Nov 01 10:18:46 2017 +0000
- Parent:
- 8:668afaa63c96
- Commit message:
- 1 november;
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Wed Nov 01 00:00:23 2017 +0000
+++ b/main.cpp Wed Nov 01 10:18:46 2017 +0000
@@ -14,13 +14,16 @@
QEI q2_enc(D11, D10, NC, 32); // encoder motor 2 instellen
const double pi = 3.1415926535897; // waarde voor pi aanmaken
+double checkm1;
+double checkm2;
+
// globale gegevens
Ticker tick_sample; // ticker voor aanroepen aansturing
Ticker tick_wasd; //ticker voor toetsenbord aansturing
char key;
double ts=0.001;
-double q1_puls;
-double q2_puls;
+int q1_puls;
+int q2_puls;
int n = 0;
double flex = 0;
@@ -58,39 +61,12 @@
double error_I_2=0;
double error_I2_2=0;
-double Kp1 = 0.0002; // proportional coefficient motor 1
-double Ki1 = 0.0003; // integrating coefficient motor 1
-
-double Kp2 = 0.00015; // proportional coefficient motor 2
-double Ki2 = 0.0035; // integrating coefficient motor 2
+double Kp1 = 0.2; // proportional coefficient motor 1
+double Ki1 = 0.02; // integrating coefficient motor 1
-void toetsen()
-{
- if(pc.readable()==true)
- { key = pc.getc();
- if (key=='a')
- {
- vx = -20; //reference wordt 500 pulses
- }
- else if(key=='d')
- {
- vx = 60; //reference wordt 0 pulses
- }
- if (key=='w')
- {
- vy= 75; //reference wordt 500 pulses
- }
- else if(key=='s')
- {
- vy= -85; //reference wordt 0 pulses
- }
- }
- else
- {
- vx = 0;
- vy = 0;
- }
-}
+double Kp2 = 0.0015; // proportional coefficient motor 2
+double Ki2 = 0.035; // integrating coefficient motor 2
+
void wasd()
{
@@ -103,23 +79,23 @@
if (key=='a')
{
- vx = 45; //referentie snelheid m/s
+ vx = 0.02; //referentie snelheid m/s
vy = 0;
}
else if(key=='d')
{
- vx = -27;
+ vx = -0.02;
vy = 0;
}
else if(key=='w')
{
vx = 0;
- vy = 75;
+ vy = 0.02;
}
else if(key=='s')
{
vx = 0;
- vy = -75;
+ vy = -0.02;
}
else
{
@@ -148,7 +124,7 @@
q1 = ((-(L3 + L2*cos(q1_pos - q2_pos))/(L1*L2*cos(2*q1_pos - q2_pos) + L1*L3*cos(q1_pos)))*vx + ((L2*sin(q1_pos - q2_pos))/(L1*L2*cos(2*q1_pos - q2_pos) + L1*L3*cos(q1_pos)))*vy) * ts + q1_pos;
q2 = (((L3 - L1*sin(q1_pos) + L2*cos(q1_pos - q2_pos))/(L1*L2*cos(2*q1_pos - q2_pos) + L1*L3*cos(q1_pos))*vx) + ((L1*cos(q1_pos) - L2*sin(q1_pos - q2_pos))/(L1*L2*cos(2*q1_pos - q2_pos) + L1*L3*cos(q1_pos)))*vy) * ts + q2_pos;
- ref1 = q1*rad2pulses;
+ ref1 = q1*rad2pulses; // converteert de radialen weer terug naar pulses voor verwerking in PID
ref2 = q2*rad2pulses;
}
@@ -156,26 +132,54 @@
{
//PID 1
error1_1 = ref1 - q1_puls;
-error_I_1 = error_I2_1 + ts*((error1_1 - error2_1)/2);
+error_I_1 = error_I2_1 + ts*((error1_1 + error2_1)/2);
-PI1 = Kp1*error1_1 + Ki1*(error_I_1);
+PI1 = Kp1*error1_1 + Ki1*error_I_1;
-error2_1 = error1_1;
+error2_1 = error1_1; // opslaan variabelen voor integraal onderdeel
error_I2_1 = error_I_1;
//PID 2
error1_2 = ref2 - q2_puls;
-error_I_2 = error_I2_2 + ts*((error1_2 - error2_2)/2);
+error_I_2 = error_I2_2 + ts*((error1_2 + error2_2)/2);
PI2 = Kp2*error1_2 + Ki2*(error_I_2);
-error2_2 = error1_2;
+error2_2 = error1_2; // opslaan variabelen voor integraal onderdeel
error_I2_2 = error_I_2;
//Motor control
- if (PI1<0 && PI2<0)
+ if (PI1==0 || PI2==0)
{
- motor1DirectionPin = 0;
+ if (PI1<=0)
+ {
+ motor1DirectionPin = 0;
+ motor1MagnitudePin = fabs(PI1);
+ motor2MagnitudePin = 0;
+ }
+ else if (PI1>0)
+ {
+ motor1DirectionPin = 1;
+ motor1MagnitudePin = fabs(PI1);
+ motor2MagnitudePin = 0;
+ }
+ else if (PI2<=0)
+ {
+ motor2DirectionPin = 0;
+ motor2MagnitudePin = fabs(PI2);
+ motor1MagnitudePin = 0;
+ }
+ else if (PI2>0)
+ {
+ motor2DirectionPin = 1;
+ motor2MagnitudePin = fabs(PI2);
+ motor1MagnitudePin = 0;
+ }
+ }
+
+ else if (PI1<0 && PI2<0)
+ {
+ motor1DirectionPin = 1;
motor1MagnitudePin = fabs(PI1);
motor2DirectionPin = 0;
motor2MagnitudePin = fabs(PI2);
@@ -198,11 +202,14 @@
else if (PI1>0 && PI2>0)
{
- motor1DirectionPin = 1;
+ motor1DirectionPin = 0;
motor1MagnitudePin = fabs(PI1);
motor2DirectionPin = 1;
motor2MagnitudePin = fabs(PI2);
}
+
+ checkm1 = motor1MagnitudePin;
+ checkm2 = motor2MagnitudePin;
}
void aansturing()
@@ -218,8 +225,9 @@
// PD controller gebruikt PD control en stuurt motor aan
controller();
+
if(n==500){
- printf("PI1 = %f PI2 = %f\n\r", vx, vy);
+ printf("checkm1 = %f checkm2 = %f\n\r", ref1, ref2);
n=0;
}
else{
