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 QEI biquadFilter mbed
Diff: main.cpp
- Revision:
- 38:17a1622a27f7
- Parent:
- 36:da07b5c2984d
- Child:
- 39:104a038f7b92
--- a/main.cpp Tue Oct 13 21:37:23 2015 +0000 +++ b/main.cpp Wed Oct 14 06:10:48 2015 +0000 @@ -61,17 +61,17 @@ double integrate_error_turn=0; // integration error turn motor double previous_error_turn=0; // previous error turn motor -const double Gain_P_turn=10; //0.0067; +double P_gain_turn=10; //0.0067; // stel setpoint tussen (0 en 360) en position tussen (0 en 360) // max verschil: 360 -> dan pwm_to_motor 1 tot aan een verschil van 15 graden-> bij 15 moet pwm_to_motor ong 0.1 zijn // dus 0.1=15*gain gain=0.0067 // Als 3 graden verschil 0.1 dan 0.1/3=gain=0.33 -double Gain_I_turn=0.1; //0.025; //(1/2000) //0.00000134 +double I_gain_turn=0.1; //0.025; //(1/2000) //0.00000134 // pwm_motor_I=(integrate_error_turn + sample_time*error)*gain; pwm = (4*0.01 + 4)* Gain => 0.1 pwm gewenst (na 1 seconde een verschil van 4 graden) // 0.1 / (4.01) = Gain = 0.025 -double Gain_D_turn=50; //0.01; +double D_gain_turn=50; //0.01; // error_derivative_turn=(error - previous_error_turn)/sample_time // @@ -91,8 +91,22 @@ void keep_in_range(double * in, double min, double max); void setlooptimerflag(void); double get_reference(double input); +//// Deactivate PID Controller strike +void deactivate_PID_Controller_strike(double& P_gain, double& I_gain, double& D_gain) +{ + P_gain=0; + I_gain=0; + D_gain=0; +} +//// Activate PID Controller strike +void activate_PID_Controller_strike(double& P_gain, double& I_gain, double& D_gain) +{ + P_gain=10; // hier waardes P,I,D veranderen (waardes bovenaan doen (tijdelijk) niks meer + I_gain=0.1; + D_gain=10; +} /////////////////////////////// // // @@ -112,6 +126,11 @@ double pwm_motor_turn_D; double reference_turn=0; // Set constant to store reference value of the Turn motor + deactivate_PID_Controller_strike(P_gain_turn,I_gain_turn,D_gain_turn); + pc.printf("P = %d I = %d D = %d \n\r"); + activate_PID_Controller_strike(P_gain_turn,I_gain_turn,D_gain_turn); + pc.printf("P = %d I = %d D = %d \n\r"); + //START OF CODE pc.printf("Start of code \n\r"); @@ -211,11 +230,11 @@ previous_error_turn=error; // current error is saved to memory constant to be used in // the next loop for calculating the derivative error - pwm_to_motor_turn = error*Gain_P_turn; // output P controller to pwm + pwm_to_motor_turn = error*P_gain_turn; // output P controller to pwm - pwm_motor_turn_P = error*Gain_P_turn; // output P controller to pwm - pwm_motor_turn_I = integrate_error_turn*Gain_I_turn; // output I controller to pwm - pwm_motor_turn_D = error_derivative_turn*Gain_D_turn; // output D controller to pwm + pwm_motor_turn_P = error*P_gain_turn; // output P controller to pwm + pwm_motor_turn_I = integrate_error_turn*I_gain_turn; // output I controller to pwm + pwm_motor_turn_D = error_derivative_turn*D_gain_turn; // output D controller to pwm pwm_to_motor_turn = pwm_motor_turn_P + pwm_motor_turn_I + pwm_motor_turn_D;