Roy Vegard Ovesen:
I've prepared a patch as suggested by Hans-Georg Wunder and Jeff McBride. In addition I've removed the ability to completely leave out the integral action by setting Ti to zero. The velocity form of the PID algorithm _needs_ the integral action.
This commit is contained in:
parent
fa2caf88dc
commit
111eff7ae0
1 changed files with 2 additions and 5 deletions
|
@ -306,9 +306,6 @@ void FGPIDController::update( double dt ) {
|
||||||
delta_u_n = Kp * ( (ep_n - ep_n_1)
|
delta_u_n = Kp * ( (ep_n - ep_n_1)
|
||||||
+ ((Ts/Ti) * e_n)
|
+ ((Ts/Ti) * e_n)
|
||||||
+ ((Td/Ts) * (edf_n - 2*edf_n_1 + edf_n_2)) );
|
+ ((Td/Ts) * (edf_n - 2*edf_n_1 + edf_n_2)) );
|
||||||
} else if ( Ti <= 0.0 ) {
|
|
||||||
delta_u_n = Kp * ( (ep_n - ep_n_1)
|
|
||||||
+ ((Td/Ts) * (edf_n - 2*edf_n_1 + edf_n_2)) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( debug ) {
|
if ( debug ) {
|
||||||
|
@ -321,10 +318,10 @@ void FGPIDController::update( double dt ) {
|
||||||
|
|
||||||
// Integrator anti-windup logic:
|
// Integrator anti-windup logic:
|
||||||
if ( delta_u_n > (u_max - u_n_1) ) {
|
if ( delta_u_n > (u_max - u_n_1) ) {
|
||||||
delta_u_n = 0;
|
delta_u_n = u_max - u_n_1;
|
||||||
if ( debug ) cout << " max saturation " << endl;
|
if ( debug ) cout << " max saturation " << endl;
|
||||||
} else if ( delta_u_n < (u_min - u_n_1) ) {
|
} else if ( delta_u_n < (u_min - u_n_1) ) {
|
||||||
delta_u_n = 0;
|
delta_u_n = u_min - u_n_1;
|
||||||
if ( debug ) cout << " min saturation " << endl;
|
if ( debug ) cout << " min saturation " << endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue