Roy Vegard Ovesen wrote:
On Wednesday 28 September 2005 21:03, Hans-Georg Wunder wrote:
The original problem is, when there is an input change from 0 to
u_max/kp, the output value is zero. This is wrong. It has to be u_max.
The fix from Erik was also my first approach. But it does not solve the
problem. Under some circumstances the controller stays in saturation for
ever.
If you tune the PID controller to be a P only controller (Ti=inf, Td=0) then
this can happen because of steady state error that can not be reduced by a P
only controller. Maybe I did not stress this enough in my last post on this
subject:
The velocity form of the PID controller should _not_ be used as a P only
controller!
I do not talk about a P only controller and about the steady state error
of a P only controller. The error happens, when the input value is a
step function, which drives the controller directly into the windup
logic. Then the output value is zero. All other cases are working fine.
I found a site with a good explanation of the PID equation:
http://bestune.50megs.com/typeABC.htm
There is no windup logic in these equations.
The equation that most of the controllers in FlightGear autopilots use is the
type B. The equations here are of the independent type. We use the dependent
type, but that does not matter.
Our PID equation is actually able to act as type A, through type B to type C.
This is done with the gamma and beta values. Gamma is the weighing of the
reference for the derivative error: ed_n = gamma * r_n - y_n. beta is the
weighing for the proportional error: ep_n = beta * r_n - y_n. So for a type A
controller we would set gamma = 1 and beta = 1. For the type B, gamma = 0 and
beta = 1, and finally for type C, gamma = 0 and beta = 0. Notice that we have
complete power over how much we want to weigh the reference value for the
derivative and proportional error term.
I think, my solution solves the problem, but it would be great, if
Jeff is also able to test it.
The guys at BESTune claims that the type C controller is the best. I suggest
that you try setting beta = 0 to make you controllers type C. I'm sorry but
I'm very sceptical to your idea of altering ep_n and ed_n on saturation.
Also on BESTune's site they have a demo of their BESTune application. It's
Windows only, but I'm very exited about this app. I'm going to try and test
it this weekend. I suggest that you check it out too. I really think that it
can prove to be very helpfull in tuning our controllers.
First of all I will do some tests to clarify my problem and my solution.
Thank you for your detailed answer
Hans-Georg
_______________________________________________
Flightgear-devel mailing list
[email protected]
http://mail.flightgear.org/mailman/listinfo/flightgear-devel
2f585eeea02e2c79d7b1d8c4963bae2d