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: Encoder HIDScope MODSERIAL biquadFilter mbed
Fork of StateMachinemooi by
Revision 31:a636a8f590a6, committed 2017-11-07
- Comitter:
- Gerber
- Date:
- Tue Nov 07 21:28:10 2017 +0000
- Parent:
- 30:b76c27e4730c
- Child:
- 32:30a36362f23d
- Commit message:
- bijna klaar, rest nog ienie beetje aanpassen.
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Tue Nov 07 08:54:37 2017 +0000
+++ b/main.cpp Tue Nov 07 21:28:10 2017 +0000
@@ -9,7 +9,6 @@
//State Machine and calibration
enum States {CalEMG, SelectDevice, EMG, Rest, Demonstration};
States State;
-bool Position_controller_on;
DigitalIn button (D1);
//Buttons en leds voor calibration
@@ -309,9 +308,8 @@
q1 = q1 + w1*Tijd;
q2 = q2 + w2*Tijd;
- int maxwaarde = 4096; // = 64x64
- refP = (((0.5*pi) - q1)/(2*pi))*maxwaarde;
- refP2 = (( q1 + q2)/(2*pi))*maxwaarde; //Get reference positions
+ refP = (((0.5*pi) - q1)/(2*pi));
+ refP2 = (( q1 + q2)/(2*pi)); //Get reference positions
}
void SetpointRobot()
@@ -360,33 +358,33 @@
double FeedBackControl(double error, double &e_prev, double &e_int) // schaalt de snelheid naar de snelheid zodat onze chip het begrijpt (is nog niet in werking)
{
- double kp = 0.0015; // kind of scaled.
- double Proportional= kp*error;
+ double kp = 0.0008*4200; // kind of scaled.
+ double Proportional= kp*;
- double kd = 0.000008; // kind of scaled.
+ double kd = 0.0008*4200; // kind of scaled.
double VelocityError = (error - e_prev)/Ts;
double Derivative = kd*VelocityError;
e_prev = error;
- double ki = 0.0001; // kind of scaled.
+ double ki = 0.001*4200; // kind of scaled.
e_int = e_int+Ts*error;
double Integrator = ki*e_int;
- double motorValue = Proportional + Integrator + Derivative;
+ double motorValue = (Proportional + Integrator + Derivative)/4200;
return motorValue;
}
double FeedBackControl2(double error2, double &e_prev2, double &e_int2) // schaalt de snelheid naar de snelheid zodat onze chip het begrijpt (is nog niet in werking)
{
- double kp2 = 0.002; // kind of scaled.
+ double kp2 = 0.0008*4200; // kind of scaled.
double Proportional2= kp2*error2;
- double kd2 = 0.000008; // kind of scaled.
+ double kd2 = 0.0008*4200; // kind of scaled.
double VelocityError2 = (error2 - e_prev2)/Ts;
double Derivative2 = kd2*VelocityError2;
e_prev2 = error2;
- double ki2 = 0.00005; // kind of scaled.
+ double ki2 = 0.00005*4200; // kind of scaled.
e_int2 = e_int2+Ts*error2;
double Integrator2 = ki2*e_int2;
@@ -430,16 +428,15 @@
{
RKI();
// control of 1st motor
- double Huidigepositie = motor1.getPosition();
+ double Huidigepositie = motor1.getPosition()/4200;
double error = (refP - Huidigepositie);// make an error
double motorValue = FeedBackControl(error, e_prev, e_int);
SetMotor1(motorValue);
// control of 2nd motor
- double Huidigepositie2 = motor2.getPosition();
+ double Huidigepositie2 = motor2.getPosition()/4200;
double error2 = (refP2 - Huidigepositie2);// make an error
double motorValue2 = FeedBackControl2(error2, e_prev2, e_int2);
SetMotor2(motorValue2);
- pc.printf("refP = %f, huidigepos = %f, motorvalue = %f, refP2 = %f, huidigepos2 = %f, motorvalue2 = %f \r\n", refP, Huidigepositie, motorValue, refP2, Huidigepositie2, Huidigepositie2);
}
void Loop_funtion()
@@ -455,7 +452,7 @@
if (button==1) {
State=EMG;
}
- else { // if (button==0) {
+ else { // if (button==0)
State=Demonstration;
}
break;
@@ -463,8 +460,19 @@
Filteren();
changePosition();
MeasureAndControl();
+ if (button==0) {
+ State=Rest;
+ }
+ else {}
break;
case Rest: // When it is not your turn, the robot shouldn't react on muscle contractions.
+ error=0;
+ error2=0;
+ if ( button==1) {
+ State=EMG;
+ }
+ else {}
+ break;
case Demonstration: // Control with potmeters
SetpointRobot();
MeasureAndControl();
@@ -472,46 +480,39 @@
}
}
-int main()//deze moet ooit nog weg --> pas op voor errors
+int main()
{
//voor EMG filteren
- //Left Bicep
+ //Left Biceps
NFLB.add( &N1LB );
HPFLB.add( &HP1LB ).add( &HP2LB );
LPFLB.add( &LP1LB ).add( &LP2LB );
- //Right Bicep
+ //Right Biceps
NFRB.add( &N1RB );
HPFRB.add( &HP1RB ).add( &HP2RB );
LPFRB.add( &LP1RB ).add( &LP2RB );
- //Left Tricep
+ //Left Triceps
NFLT.add( &N1LT );
HPFLT.add( &HP1LT ).add( &HP2LT );
LPFLT.add( &LP1LT ).add( &LP2LT );
- //Right Tricep
+ //Right Triceps
NFRT.add( &N1RT );
HPFRT.add( &HP1RT ).add( &HP2RT );
LPFRT.add( &LP1RT ).add( &LP2RT );
- //voor serial
+ // serial
pc.baud(115200);
- pc.printf("begint met programma \r\n");
//motor
- M1E.period(PwmPeriod); //set PWMposition at 5000hz
- //Ticker
- //Treecko.attach(MeasureAndControl, Ts); //Elke 1 seconde zorgt de ticker voor het runnen en uitlezen van de verschillende
- //functies en analoge signalen. Veranderingen worden elke 1 seconde doorgevoerd.
- // printer.attach(Tickerfunctie,0.4);
-
+ M1E.period(PwmPeriod); //set PWMposition at 5000hz
+
//State Machine
State = CalEMG;
- Position_controller_on = false;
Treecko.attach(&Loop_funtion, Ts);
while(true)
- { }
-
- //is deze wel nodig?
+ {}
+
}
