Motion Control and Motor Drives

cancel
Showing results for 
Search instead for 
Did you mean: 

How to finetune the force control of an AC Motor Linear Actuator?

Hello,

 

I am hoping to find some help here with the following problem, which I am trying to solve for several days now....

 

I am using the UMI-7774 and an AC servo-motor-driven linear actuator to do force control. Basically, I need the actuator to apply a constant force and react quickly to force changes. My system setup is as follows: I am using a PCI-7344 Motion Control Card to provide the analogue command signal (0-10V). This signal is supplied to the actuator controller (through a UMI-7774), which transforms the command signal to an amperage command signal (0-2.17Arms). This is the signal controlling the actuator’s torque. The actuator controller is working in torque mode. I use a Kistler PZT force sensor (ring type) and a Kistler amplifier as my feedback source. The signal from the sensor amplifier is directly connected to the ADC of the UMI. I am using MAX to tune my system and define a PID controller that gives me a good step response.

 

(1) The results so far show that it works in principle, but I believe my system is not yet tuned optimally. However, the best step response results I have obtained and the PID parameters I used are shown in the attached files. As I am relatively new to this area, could you please advise me on how I could further improve the step response of the system? The current rise time and overshoot values are very good (a 3% overshoot would also be acceptable), but the observed undershoot is causing delayed settling. Also, the oscillation observed during undershoot is something I would like to remove.

 

(2) I have tried increasing Kp and Kd values. Increased Kd does not seem to correct the oscillation problem. On the contrary, it destabilises the system. Increasing Kp causes an unwanted overshoot.  I have also tried to reduce the Derivative Sampling Period but that gave even worse results (System Inertia: J = 1.8629*10^-5 Kgm^2). At Td=2 the actuator was retracting on its own to its home position when I set Ki>=8. I got the most stable behaviour using Td=4. Is there any other way I could improve the actuator’s response?

 

(3) I have seen that in some cases people have used a “double PID loop” one for the encoder feedback and one for the force feedback. Do you believe that this would improve system behaviour? If so, how could I implement two PID loops? I mean, MAX only allows me to enter one set of PIDs....or is there a possibility to set up a second PID-loop somewhere?....I have seen that the "Force Control Using Monitoring Force" example essentially works with two Closed-loops, but one of them is implemented in the application software and this would result in a non-deterministic and comparatively slow response of the system, right??

 

Sorry for the long post and thanks a lot in advance for help and advice.

Message 1 of 6
(6,927 Views)

Hello Tommasos,

 

thank you for the comprehensive problem descripiton. When looking at the screenshot of your step response several questions came to my mind:

  1. When you do the step response is your motor moving at all or is it blocked in some way? One interpretation of the oscillations at the beginning could be, that the axis starts spinning for a very short amount of time, hits a solid body and gets bounced back. Then it settles and starts to ramp up the force.
  2. A similar result could be caused by a considerable stick-slip effect of the motor, where the motor requires a certain amount of current to start moving at all. When this threashold is reached, the axis starts moving with a jump, causing oscillations.
Option #2 seems to be more probable to me, but in general both effects mean non-linearities in the system's transfer function, that makes it quite hard to control. If option #2 is the problem, you could try the following steps:
  1. Use the motion board's analog output to output an open loop voltage signal (e. g. you could configure the axis as open loop stepper and use the Load DAC function to output a certain voltage).
  2. Start with low voltage values and increase them step by step until the axis starts moving.
  3. Repeat step 2 for the negative direction.
  4. In MAX go to the Filter Settings on the Control Loop settings tab. Here you can enter the voltage offset values that you have found in step 2 and 3 (Forward and Reverse Voltage) to overcome static friction and to minimize the non-linearities caused by this effect.

Without touching the system it's a bit hard for me to provide advice regarding the PID parameters, but I think you first need to tackle the non-linearities of your system before you can proceed with the finetuning.

To answer your question #3: With NI motion devices you can use dual loop feedback for position control (two encoders), but I can't think of a reasonable way to use an encoder together with analog feedback for force control.

Finally here are some more questions that might be worth some investigations:

  1. What's the signal bandwidth of your force sensor? Is it limited by a lowpass filter?
  2. What PID Update Period are you using?
  3. What version of NI-Motion are you using?

Kind regards,

Jochen Klier

National Instruments

Message Edited by Jochen on 10-05-2009 11:12 AM
Message 2 of 6
(6,907 Views)

Hello Jochen and thank you for your very nice reply.

The past few days I have been trying to implement your advice, but unfortunately I did not have much success. Let me start by saying that explanations to my problem, the 2nd one looked more probable, as I always make sure that there is contact between my actuator and the workpiece I am pushing against. So, I unmapped my DAC by setting up the axis as a stepper axis with no feedback and I used the Load DAC to apply voltage and see when my actuator starts moving. That gave me the upper and lower limits for the Static Friction Compensation filter (please refer to attached image). I then implemented this filter and tried to retune the PID parameters, but the results I got were poor.

 
  1. I can now adjust the parameters so that there is no initial spike and undershoot, but now the force ramps up fast to a specific value and then keeps rising slowly. Vibration is observed at the point of transition from fast to slow ramp-up (ref. Step Responce Actuator-Force Feedback-WITH FILTER_v2).
  2. I could not eliminate the steady state error. When I tried to eliminate the steady state error by increasing Ki, or tried to create an initial overshoot by increasing Kp, I always ended up with an unstable system or a system with a response similar to the one shown in attached figure “Step Responce Actuator-Force Feedback-WITH FILTER_v1”.
 

Do you perhaps have an explanation or comments for this behaviour? As for your other questions:

 
  1. Sensor Bandwidth: N/A, Charge Amplifier Bandwidth: 200 kHz, Low pass filter: No (Amplifier has the capability though)
  2. PID Update Period: 250 microseconds (fastest available)
  3. NI Motion Version 2.3
  4. Labview Version 8.5.1
 

Thank you,

Thomas

 

0 Kudos
Message 3 of 6
(6,878 Views)
Sorr, wrong attachments. This one is missing 🙂
0 Kudos
Message 4 of 6
(6,876 Views)

Hi Thomas,

 

that's strange behavior indeed. From the distance it's hard to explain what's going on, but here are some more ideas:

  1.  Limiting the bandwidth of your sensor signal might be a good idea to reduce the overall oscillations. As the ADCs of your motion control board run with 4 kHz, signal frequencies higher than 2 kHz are useless or even harmful. Limiting the bandwidth to a value lower than 2 kHz might help to get better stability. Maybe you even should reduce the bandwidth significantly (e. g. to 500 or 200 Hz), but you also need to be careful with the filter, as it adds a phase shift to the signal.
  2. When the axis switches from fast ramp-up to slow ramp-up, the PID algorithm has probably reached the integration limit. So increasing the integration limit might help to solve that issue.

Thank you for answering my questions, but the NI-Motion version doesn't seem to be plausible to me. The current version is 8.0f1. Could you please check in MAX (Software), which version you are using? In general it's recommended to use the current version.

 

Thanks,

Jochen

Message 5 of 6
(6,860 Views)

Hello Jochen,

Sorry for the delayed response. I have actually managed to solve the problem. I updated the NI-motion as you advised (it was v7.3 if I remember correctly), implemented a lowpass filter and adjusted the integration limit, but what really made the difference was the integrative gain adjustment. I was following a conservative approach when adjusting this and was keeping values low. However, it was when I increased the Ki value significantly (Ki=300) that the behaviour of the actuator became ideal. Actually all gains were given high values.

 

So just in case any other users stumble accross the same problem with the same actuator (Thompson EC2 with AKM23 motor), the solution that worked (for me at least), was the use of high a Ki value.

 

Thank you Jochen for all your help and advice!

Thomas

Message 6 of 6
(6,687 Views)