See below... On 9/28/05, Roy Vegard Ovesen <[EMAIL PROTECTED]> 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:
But in some cases, such as when Kp*e is greater than u_max-u_n, the output is not changed. It isn't that the proportional output is not enough to get rid of the error, it is that the proportional output is being ignored because it would put the output past the user set limit. The correct behaviour should be to move the output to the user limit. > > The velocity form of the PID controller should _not_ be used as a P only > controller! > > I found a site with a good explanation of the PID equation: > > http://bestune.50megs.com/typeABC.htm > Good site! > > 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. I can see your problem with it. In fact, I think it may be technically wrong because it assumes that the proportional component is the only thing contributing to the saturation of the controller. But something must be done to correctly handle saturation. One possibility would be to internally track the actual PID output when it goes past saturation (but limit the output value). This does not provide any anti-windup protection though, so some kind of anti-windup would need to be added. One method I have found referenced at several sites uses the amount of saturation as a feedback to the integral term: v_n : PID calculated output u_n : Control output (u_n = v_n except in saturation, when it equals u_max or u_min) s_n : saturation (s_n = u_n - v_n) Then the integral contribution would be I = Ki*e_n + Ks*s_n (Ks defines how tightly windup is controlled). > > Roy Vegard Ovesen > -Jeff _______________________________________________ Flightgear-devel mailing list [email protected] http://mail.flightgear.org/mailman/listinfo/flightgear-devel 2f585eeea02e2c79d7b1d8c4963bae2d
