Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Servo loop tuning_application
#1

.zip   Servo loop tuning Snapshot.zip (Size: 89.75 KB / Downloads: 51) There is a strange problem when I tuning the servo loop. With the same parameters, when the response is closely match the commanded curves for the first time , the second time I do that , the response changed significantly, about 20% overshoot! I do that for the third time , it is almost the same to the second one , and I repeat that, it never behave like the first time! The interval is less than 10 seconds.tuning snapshot is attached.
In case the start position change, each time I do a step move , I set a very high integral gain to make sure the motor starts move from zero and return to zero after it finished the step move. And that can be seen from the response curve.
What’s happen with my systems? Why it behave so strange?

F.Y.I. my system hardware configuration is as follows:
Controller: IMAC FLEX
Drive: SX25A20 (sinusoidal servo drive)
Motor: Parker slotless, brushless linear servo motor
#2
The difference is probably due to the bearing mechanism. I assume you are using recirculating ball linear bearings. When they are new, they will be rather tight. Also, the first move after they have been sitting for a while will break things free. What distance(mm)=1000 counts?

I almost always keep integral gain at zero and I134=1 for the step move. The step move, if it is large enough, allows you to get a good starting point for tuning. After you have a good step response, select a tuning profile that most resembles the move your axis will be making in the real application. You can then set I134=0 and start to add integral gain, and adjust the other parameters.
#3
It's an old machine, since we now have a new controller , we need to replace the old one. The resolution of our encoder is 0.1 microns/count, 1000 counts will make 0.1 mm. It drives me crazy because I found the same parameters added to the PID filter will make different behaviour, sometimes overshoot, sometimes sluggish, i totally don't get it, could anybody give me some help? What should I bear in mind when tuning the servo loop?
#4
You will want to make a bigger step move. At least 5 times bigger, probably more, though.
#5
Definitely it will cause motor vibration, I dare not do that , aha. I am not going to destroy my machine.
#6
I had similar problem having a PMAC and sinasoidal drive. Increase your Kp and Ki and decrease your Kd.

(03-06-2012, 08:14 PM)wskpefqp Wrote: Definitely it will cause motor vibration, I dare not do that , aha. I am not going to destroy my machine.

#7
I think this is actually a combination of the machine's dynamics and your integral term in the PID loop. Once your Ki builds up an error term, that offset doesn't go away unless you get an opposing error to swing your error term in the opposite direction. The way you're overshooting, you're building up a big error term in the opposite direction that's going to guarantee an overshoot on a move in the other direction, that will....

Here's a step by step of what I think is happening:
1. Motors are killed, error term = 0. You do a step response and your slow Ki doesn't build up a big error term.
2. Motor over shoots slightly on the negative step. While you're waiting around, Ki builds up and error term = +large number.
3. You start another step response.
4. On the positive step, your +large number error term pushes your response into an overshoot. Ki starts reducing the error term until you have little following error, but error term = -large number.
4. On the negative step, your -large number error term pushes your response into an overshoot. Ki starts increasing the error term until you have little following error, but error term = +large number.
5. Go to Step 3.

I've actually seen this very thing happen on machines I work on. On a physical machine, there can be enough friction that if you overshoot you need a large integral error term to bring the motor back to 0 following error. That error term makes it it much more likely you'll overshoot in the opposite direction, and then you're stuck in a loop of overshooting.

My personal answer is that I don't have to care about that level of error on my machines. I set Ki to 0 and tune my PD and FF terms to get a good low error dynamic response and leave it at that. Considering how small your FE is in counts and in microns, you might take my route.

The other possibility (that I haven't tried) is to set your Ki to zero, and tune your Kp and Kd to be well damped with no overshoot. Then start adding in Ki to pull you up to steady state. That way, when you change directions, your error term will damp things even more, making you undershoot and pull up to steady state again. Then you should be in a virtuous cycle of always undershooting somewhat, instead of overshooting a lot.


Forum Jump:


Users browsing this thread: 1 Guest(s)