03-27-2009 12:59 PM
Greetings,
I've inherited this system that's not working quite right. Always fun, eh? I'm trying to get a precision piezo stage under control using an NI-Motion 7244 controller. I believe I know the root of my problems, but I thought I'd throw the question out in case someone had a solution.
The item under control is a vertical stage driven by a piezo motor. The motor is driven by a velocity-mode "black-box" that we can give +/- 10V commands to. The feedback element is a 50nm/count optical encoder using some sort of esoteric inferometric mechanism or another. The black-box feeds off this signal as well to determine the velocity to drive the motor at. Unfortunately, the company that made this for us was bought out and the new owners claim no knowledge of their acquistion's old product lines.
My main and biggest problem is that this black-box has a massive deadzone before it will start moving the stage. Depending on the weight of the load, the downward direction requires between -0.5 and -0.7V to start moving and the upward direction requires between 2.85 and 2.9V. It requires very little voltage past this point to move the stage with all the velocity I desire, maybe .75V beyond those boundaries max.
I've set my DAC output offset (torque offset in MAX) to the nominal midpoint of 0.825V and I've set static friction compensation to 2.5V and -1V for forward and reverse motion (just under their nominal points). This actually works pretty well for the upward direction, but I can't get my downward direction tuned where there's no overshoot or undershoot. One thing I've tried with some success is to "ratchet"-up the control parameters when I'm close to my target in order to pull in and lock onto the final target position. This works pretty well for getting the stage to the target, but I wind up using such a high value for Ki, that even a tiny 1 or 2 count overshoot (and the stage will drift by +/- 2 or 3 counts, that's fine) will eventually run through that giant deadzone and when it finally gets the stage to start moving, it "jerks" by 50-100 counts then rapidly compensates to bring it back to the target. So you'll sit there and hear the stage go "tick" ....... "tick" ...... "tick" ..... every 1-5 seconds until the stage happens to hit dead on the target number (so the integrator isn't winding anymore).
I think part of the problem lies in the fact that the "stiction" offset is only applied at the beginning of a motion and not during the motion even if the direction the trajectory needs to move in changes or if the movement has stopped for a period of time. Does Halting the motion reset the integral sum or do you have to Kill it then Start it again?
Any other ideas to prevent this integrator windup? It takes about 0.5 to 4 seconds for it to wind up enough to cause the jerking motion (depending on the distance from target, obviously). Maybe I should kill and restart the motion every 0.5 second until I'm done with that position? Unfortunately, I can't just leave it killed as the stage sags by several counts per minute if I'm not constantly supplying a little bit of drive to it. Come to think of it, I should probably clean that ceramic drive strip real good in case there's some fingerprint grease or something on it that's causing that slippage.
Anyway, ideas are always welcome, thanks for your time, best regards and all that,
Mike
03-27-2009 02:40 PM
03-27-2009 03:37 PM
I assumed it was because the direct proportional control input was termed in the spec sheet as "velocity mode", but looking at it more closely the encoder input doesn't go back to the black box at all. There's also a diagram on the spec sheet that shows velocity as an output and being fed back to close the loop. That diagram says it represents the motor and driver unit together. It may be some sort of back-EMF type setup where there is some fashion of velocity feedback in the black box, but I'm not sure. I don't know enough about piezo motors to know if that's really possible. I do know when I was trying to tune it, just about any amount of derivative (Kd) made it go crazy instead of dampening the response, even with fairly high values of velocity averaging.
I should be able to get hold of the manufacturer for the motor and motor driver. I just found out the company that got bought out (mentioned in my first message) was the manufacturer of the entire stage setup, but they used a third-party motor/driver and those guys are still in business.
03-31-2009 08:25 AM
OK, I believe the reason they call this a "velocity-mode" controller is that it emulates a DC drive motor where, ignoring torque considerations, a given voltage results, eventually, in a given velocity.
So, my problem now amounts to controlling a device with a large deadband which is fairly sensitive just outside that band. Further, since I'm using a very high-resolution encoder (50nm/ct), it's difficult to come up with a set of parameters that will move the motor reliably over small distances (say 15 or 20 counts) that aren't unstable when moving larger distances (1,000-500,000 counts).
And I'm already pushing the lower margins of my gain settings. A typical setting is something like Kp=2, Kd=0, Ki=1, Kv=100, ILim=10000. I don't care how slow this thing is (within reason), but I need to get it critically damped or overdamped and as I'm bumping around these settings, it's either the setting doesn't move the stage at all (Kp or ILim too low) or, bumping things one number at a time (except ILim), I get overshoot. Another problem is I can't tune the static friction coefficients too close to the edge of movement, because those coefficients actually change by 10% or more depending on what load the motor is driving.
Another aside, when I try to use the step response tuning in MAX, I calculate my maximum speed / sampling interval for my step size. This often puts me down at 5 or 6 counts which is very difficult to get a reliable step response for (2 millionths of an inch). Should I opt for a longer sampling interval and/or a faster target speed to tune this? I wound up dropping the sampling interval to 62.5us because that was the first setting where I was able to reliably control the velocity without the motor buzzing like crazy, and I anticipate only travelling 50K-counts/second max. It's all this deadband's fault ... argh ... I can get a somewhat nice step response for a 100 count move, but it sucks for a 10 or 20 count move since the error isn't enough for Kp*error to bring it out of the deadband. Maybe I need to lean on the integrator more heavily and concentrate on tuning ILim and Kd/Kv to prevent instability.
Just looking for any helpful clues.
Regards,
Mike
04-01-2009 04:44 PM
Hi Mike,
Let me see if I can help get you started. Halting will not reset the integral sum(following errors), you must kill and restart. For the buzzing motor, try decreasing proportional gain, it may help. Also, because your motor is not linear, you are unfortunately not going to be able to get a perfect fit, but you may try setting derivative gain to 0 and start by just adjusting P and then adding in I. I've also including a Knowledgebase article below than can help. Please let me know if you have further questions.
A Simple Method for Servo Motor Tuning
Thanks and have a great day,
Meghan
Applications Engineer
National Instrument