LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Piston Position Control - PID vs other control methods?

Hello

 

I am trying to build a system that uses an air piston to vertically position a large load. The setup is very basic at this point, as I am trying to establish basic funcionality before refining.

 

The piston is oriented upside down and a heavy weight is suspended from the piston arm. An electronic pressure regulator is connected to the retract side of the piston, so when the pressure is increased, the piston will retract and the load is lifted. A string potentiometer is conected to the piston arm and gives position feedback.

 

0-10V controls the pressure regulator (corresponding to 0-100 psig) and the string-pot feeds back 0-10V


The first crack I took at the control was a simple PID loop, I wasn't expecting this to work perfectly due to the non-linearities of the system, but I gave it a shot. I've attached the response below. I was only able to really operate Proportional-mode only. It was stable, the steady-state error was large (~0.3V at least). Whenever I tried to adjust the Integral gain to account for this, the system would start to oscillate, even if the gain was very small (e.g. 0.0000001). The Derivative gain seemed to have little effect.

 

I know a PID control scheme is most likely not going to be the right solution to this problem, but still, the fact that even the smallest Integral term created instability made me think I was perhaps doing something wrong.

 

I've read some papers on other methods of controlling piston position, such as Sliding Mode Control. But haven't had much luck finding examples on how it is actually implemented within LabVIEW

 


Any help or guidance would be greatly appreciated.

 

Response.jpg

PID VI.jpg

 

 

 

 

 

 

 

0 Kudos
Message 1 of 5
(3,542 Views)

What was the units of the integral action - was it time ? If so a "gain" of 0.00001 is in fact very very high - if you just want less integral action then you need a longer integral time (e.g. of 10secs)

Consultant Control Engineer
www-isc-ltd.com
0 Kudos
Message 2 of 5
(3,530 Views)

Classic problem.  The I value is not the integral gain, it is the integral time - the time required for the integral response to duplicate the proportional response at a constant error.  Internally the PID block divides the proportional gain by the integral time to get the integral gain.  As a result, a very small integral time gives a very large integral gain.  Try using a much larger value and you should see better performance.  Note that the units for integral time are minutes, not seconds.  A tuning approach such as Ziegler-Nichols will get you reasonable initial gains which you can then fine-tune.

 

For a system like this, PID is a reasonable control method.  Start with proportional-integral and add derivative control only if the response is not too noisy and the response is not fast enough.

Message 3 of 5
(3,529 Views)

Hello colinleer

Are you aware that in PID.vi you are setting integral time, which means: the lower value, the faster integration? So if you set Ti=0.0000001, you actually set extremely high integral gain! Start with higher value.

I don't know much about pistons, could you tell why you consider this system to be nonlinear? Looking just at the plots it seems to be working very well.

 

Best regards and enjoy NI forums! 🙂

0 Kudos
Message 4 of 5
(3,526 Views)

Wow, it's great when the solution is right in front of your face...the system is working much better now!

 

Thanks for everyone's help

0 Kudos
Message 5 of 5
(3,504 Views)