Society of Robots - Robot Forum

Electronics => Electronics => Topic started by: szhang on December 01, 2008, 07:39:00 PM

Title: pd control of high stiction motor
Post by: szhang on December 01, 2008, 07:39:00 PM
I'm controlling a barebone servo (no internal circuitry) using a 1ms PD loop, my problem is that at a nicely tuened PD gain (little overshoot), there is no response for errors less than 10% of the servo travel range.  The motor is attached to a high ratio gearbox, which is where the stiction comes from.

I could lessen the problem by using an I term, but I terms either reaction too slowly or create dangerous amount of windup.  Any other suggestions?

EDIT:

It turns out my batteries were low, which exacerbated the problem.  I also found I couldn't turn the P gain up too high or it starts to overshoot, and I can't turn up the D gain too much because of the noise from the ADC.  I am curious to how the original control system worked, it overshoots a tiny bit but reacts very quickly (maybe it sent out a trajectory?),
Title: Re: pd control of high stiction motor
Post by: ArcMan on December 01, 2008, 08:38:59 PM
My study and experience says that you need an I term, otherwise you will always have an appreciable error when using a reasonable P term.  Just add anti-windup functionality in your control loop.
Title: Re: pd control of high stiction motor
Post by: szhang on December 02, 2008, 03:30:31 PM
I term is very problematic for position control, which is why many very experienced robotic researchers don't like them.  Anti-windup is an oxymoron, considering the whole point of the integral is to "wind up" error.  For slow mechanisms that need great accuracy, or velocity control of mechanisms, I terms works fine, but if the position control point keeps changing, I term just makes things worse.

I think I'll just put in a feedforward term and see how that works.
Title: Re: pd control of high stiction motor
Post by: ArcMan on December 04, 2008, 09:41:47 PM
Anti-windup refers to the practice of inhibiting the I term from increasing during loop manual mode.  It doesn't apply to normal automatic control, so it's really not an oxymoron.
I beg to differ about the integral term being problematic for position control.  Integration of error is important for any type of closed-loop control.  The I term isn't necessarily "slow".  It's slow if Ki is small, but it's quick if Ki is larger.
I don't see how a feed-forward element will help your positioning accuracy.  Feed-forward control is used to attempt to maintain a state in the presence of disturbances.

Title: Re: pd control of high stiction motor
Post by: szhang on December 04, 2008, 11:53:29 PM
Sure, it is quick if Ki is large, but a large Ki quickly makes your controller unstable.  Anti-windup codes that limit the output of the I controller becomes similar to a feedforward term as it is just adding an offset to the output.  it is much easier to have a feedforward term when you don't really care about tiny inaccuracies.

Feed-forward element can (and did) increase the performance of the system because the only problem I had was with stiction.  The feedforward term overcomes stiction, and after that, there is only kinetic friction, which is always smaller than static friction, which means the controller will easily be able to control it.

NO, feed-forward isn't used to attempt to maintain a state in the presence of disturbances.  Disturbances by definition can't be predicted, and thus can't be modeled in a feed-forward controller.  Feed-BACK controllers are used to maintain a state in the presence of disturbances.
Title: Re: pd control of high stiction motor
Post by: ArcMan on December 05, 2008, 07:40:01 PM
NO, feed-forward isn't used to attempt to maintain a state in the presence of disturbances.  Disturbances by definition can't be predicted, and thus can't be modeled in a feed-forward controller.  Feed-BACK controllers are used to maintain a state in the presence of disturbances.
YES, it is.  And some disturbances can be predicted (which is where feed-forward comes into play).

I think the author of this wikipedia article did a great job of describing it.
http://en.wikipedia.org/wiki/Feed-forward (http://en.wikipedia.org/wiki/Feed-forward)