Robot lijkt goed te reageren op potmeters van Pauline.
Dependencies: Encoder HIDScope MODSERIAL mbed
Fork of PIDZONDERRKI by
Diff: main.cpp
- Revision:
- 3:f755b4d41aa8
- Parent:
- 2:b504e35af662
- Child:
- 4:c119259c1ba5
--- a/main.cpp Fri Oct 13 09:46:44 2017 +0000 +++ b/main.cpp Fri Oct 13 10:03:12 2017 +0000 @@ -1,45 +1,47 @@ -//bibliotheken +//libaries #include "mbed.h" #include "HIDScope.h" #include "encoder.h" #include "MODSERIAL.h" -// globale variabelen -Ticker AInTicker; //We maken een ticker aan genaamd AIn (wordt gebruikt voor HIDScope) +// globale variables +Ticker AInTicker; //We make a ticker named AIn (use for HIDScope) -Ticker Treecko; //We maken een geweldige ticker aan zodat de potmeter en alles telkens opnieuw worden uitgelezen -AnalogIn potMeter2(A1); //Analoge input van potmeter 2 (zal gebruikt worden voor de snelheids bepaling van de motor) -PwmOut M1E(D6); //Biorobotics Motor 1 PWM controle van de snelheid -DigitalOut M1D(D7); //Biorobotics Motor 1 draairichting controle +Ticker Treecko; //We make a awesome ticker for our control system +AnalogIn potMeter2(A1); //Analoge input of potmeter 2 (will be use for te reference position) +PwmOut M1E(D6); //Biorobotics Motor 1 PWM control of the speed +DigitalOut M1D(D7); //Biorobotics Motor 1 diraction control Encoder motor1(D13,D12,true); MODSERIAL pc(USBTX,USBRX); -float PwmPeriod = 1.0/5000.0; //PWM periode instellen (5000 Hz, want 5000 periodes in 1 seconde) +float PwmPeriod = 1.0/5000.0; //set up of PWM periode (5000 Hz, want 5000 periodes in 1 seconde) const float Ts = 0.1; // tickettijd/ sample time float e_prev = 0; float e_int = 0; + + float GetReferencePosition() { float Potmeterwaarde = potMeter2.read(); int maxwaarde = 4096; // = 64x64 float refP = Potmeterwaarde*maxwaarde; - return refP; // bepaalde waarde tussen 0 en 4096 + return refP; // value between 0 and 4096 } float FeedBackControl(float error, float &e_prev, float &e_int) // schaalt de snelheid naar de snelheid zodat onze chip het begrijpt (is nog niet in werking) { - float kp = 2.5; // moet worden geschaald + float kp = 2.5; // has jet to be scaled float Proportional= kp*error; - float kd = 3; // moet nog worden geschaald + float kd = 1; // has jet to be scaled float VelocityError = (error - e_prev)/Ts; float Derivative = kd*VelocityError; e_prev = error; - float ki = 1; // moet nog worden geschaald + float ki = 0.5; // has jet to be scaled e_int = e_int+Ts*error; float Integrator = ki*e_int; @@ -61,7 +63,7 @@ if (fabs(motorValue) > 1) { - M1E = 1; //de snelheid wordt teruggeschaald naar 8.4 rad/s (maximale snelheid, dus waarde 1) + M1E = 1; //de snelheid wordt teruggeschaald naar 8.4 rad/s (maximale snelheid, dus waarde 1) } else { @@ -72,15 +74,15 @@ float Encoder () { float Huidigepositie = motor1.getPosition (); - return Huidigepositie; + return Huidigepositie; // huidige positie = current position } void MeasureAndControl(void) { - // hier wordt ons regelsysteem aangestuurd + // hier the control of the control system float refP = GetReferencePosition(); float Huidigepositie = Encoder(); - float error = (refP - Huidigepositie);// maak een error aan + float error = (refP - Huidigepositie);// make an error float motorValue = FeedBackControl(error, e_prev, e_int); SetMotor1(motorValue); }