On Friday 19 August 2005 23:58, Hans-Georg Wunder wrote:
> Hi all,
>
> I try to configure a P-Controller, but I have problems with the
> anti-windup logic:

The velocity form of the PID control algorithm _needs_ to have an integral 
component. If you need to use a P only controller, try the 
<pi-simple-controller>.

Snip! ...

> Now  u_n_1 = 0, so delta_u_n = 150 and greater as u_max,
> and then u_n = 0 + 0 = 0. The controller does not work.
>
>          // Integrator anti-windup logic:
>          if ( delta_u_n > (u_max - u_n_1) ) {
>              delta_u_n = 0;
>              if ( debug ) cout << " max saturation " << endl;
>          } else if ( delta_u_n < (u_min - u_n_1) ) {
>              delta_u_n = 0;
>              if ( debug ) cout << " min saturation " << endl;
>          }
>
>          // Calculates absolute output:
>          u_n = u_n_1 + delta_u_n;
>          if ( debug ) cout << "  output = " << u_n << endl;
>
>
> I think, this is not okay. delta_u_n = 0; has to be replaced by
> something like that
>
>       delta_u_n=u_max - u_n_1;

That's a good idea. I seem to remember trying to fix this by setting 

delta_u_n = u_max;

Which of course was a bad idea :-(

> But that's not enough. The value of ep_n also has to be changed,
> but I do not know how. Any ideas ?????

As I mentioned earlier: since you _have to_ include the integral term for the 
velocity form PID, changing ep_n shouldn't be necessary.

-- 
Roy Vegard Ovesen

_______________________________________________
Flightgear-devel mailing list
[email protected]
http://mail.flightgear.org/mailman/listinfo/flightgear-devel
2f585eeea02e2c79d7b1d8c4963bae2d

Reply via email to