LabVIEW

cancel
Showing results for 
Search instead for 
Did you mean: 

Hydraulic Control System Help

So I want to be clear, I'm not looking for anyone just to do my senior design project for me. I'm looking for anyone that can just point me in the right direction and help me get some momentum going because right now we're kinda dead in the water. Well, we're trying to make a closed loop electro-hydraulic control system for an underwater sea piping fatigue tester. I've attached an image that should give you a rough idea of the assembly. We basically have to use two double acting hydraulic cylinders to move a rocker arm (one on the left and right side of the rocker arm) plus or minus 30 degrees. These hydraulic cylinders will be controlled with a 4-way proportional directional control valve that will be using a digital card amplifier. I don't know the particular digital card we will be using yet. We will be using an LVDT to measure the position of the spool in the valve as well as flow meters to measure the flow rate and a string potentiometer and inclinometer to measure the vertical displacement of the rocker arm. We will also be using a variable displacement pump. All the parts are going to be bought by our sponsor so I don't need to worry about selecting the valve or anything. Just making the control system in LabVIEW.

 

So here's my plan. I was thinking we could use the Set Profile with Gain Scheduling on the rising and falling PV.Vi The set profile would be a sinusoidal wave with an amplitude of 30 degrees. One thing I'm trying to figure out is how to make a sinusoidal wave profile since it appears you can only make ramps (Q1. anyone know if its possible to do this or do I have to approximate it with a few ramps?) . So anyway, with this sinusoidal wave I was thinking we could map the values of the sinusoidal wave to current values sent to the proportional valve. So when the rocker arm was at the horizon, it would send the highest current possible (e.g. 40 mA) in order to achieve the highest flow rate and while at plus 30 degrees it would send 0 amps which would make the valve spool be in the centered position. Thus it would slow down once it got near the maximum bending angle. Then once the rocker arm got to a certain vertical displacement (20.5" which is close to the maximum length of 21") the maximum current would change to -40 mA. The signs on the maximum current would change so that the flow could start pushing the cylinder down instead of up. Then as the bending angle got back to the horizon, it would count it as a half cycle being passed (we have to keep track of the number of cycles, its a 1 million cycle test). Also once it got to the horizon it would change the max current variable back to +40 mA so that after the rocker arm went to -30 degrees and back to 0 degrees it could then have the flow pushed up with the 40 mA maximum current again.  In C++ code this would look something like,

 

Max Stroke_30 =21  // Max Stroke Length in feet

Min Stroke_30 = -21 // Min Stroke Length in feet

Max Current= 40 // Max Current (mA) to valve that delivers maximum flow rate up

Min Current= -40 // Min Current (mA) to valve that delivers maximum flow rate down

 

If  0<Input<Max Stroke_30   // Input is string pot reading

                Then

                                Current_to_valve=map(Input,0", Max Stroke_30, Max Current, 0mA)

                                // Above, when input is 0" the current to the valve is the max current

                                // When the input is the maximum stroke, or 21", the current to the valve is 0 mA.

                End If

                If Input = 20.5  // Can’t start trying to go back down until arm gets near max bending angle

                Then

                                Max Current= -40 // Once arm at max angle, flow will slowly start pushing arm down

                End If

                If Input == 0  // Rocker Arm in Center at horizon; Completes one cycle

                Then

                               Bendingangle30=Bendingangle30 + 0.5  // When goes from 0 to max and back to 0,

                                                                                         // 0.5 cycles have passed

                                Max Current = 40    // Set max current back to +40 mA

                                Min current= -40     // Set min current back to -40 mA

                End If

                If  0>Input>Min Stroke_30     // Input is string pot reading

                Then

                                Current_to_valve=map(Input, 0", Min Stroke_30, Min Current, 0mA)

                                // Above, when input is 0" the current to the valve is the min current

                                // When the input is the minimum stroke, or -21", the current to the valve is 0 mA.

                End If

                If Input = -20.5  // Can’t start trying to go back up until arm gets near –max bending angle

                Then

                                Min Current= 40 // Once arm at -max angle, flow will slowly start pushing arm back up

                End If

 End If

 

Q2. First of all do you think this would even work? This idea of mapping current values to the valve based off of the bending angle? I'm a little fuzzy on the whole concept of a digital amplifier. It appears that you can only give a ramp input to the valve and when mapping the current values to the valve they would be 40 mA amplitude sinusoidal signals and not ramps.  Q3. So would I need to have the set profile gain schedule for the bending angles be ramp profiles instead? Q4. And could you give it different sloped ramp inputs? For example, as the rocker arm is going from 0 degrees to 20 degrees, the ramp current input into the valve has a slope of 2x and then as it goes from 20 degrees to 30 degrees the slope is 1x? Q5. Also, how does the digital amplifier even integrate into labview? Is it a separate program that you use or do you still use the DAQ Acquistion VI that you use to assign inputs and outputs to certain channels? Also I've never used the DAQ Acquistion VI for outputs, only for graphing inputs.  Q6. When trying to give it outputs that you receive from the mapped current values, would you just wire the signal to the input of the DAQ Acquistion VI? Q7. And is there anyway I could simulate the plants response as it is given these mapped current values?

 

Okay so if this whole mapped current idea is not good, I've also thought of another idea. Instead of trying to control the entire trajectory of the rocker arm at every single angle, I thought instead we could use just two different set points: one at +30 degrees and one at -30 degrees. So how it'd work is that first the PID.vi would be given a setpoint of 30 degrees. If the rocker arm was far from this, then it would pump the oil really fast (put the spool as far as possible from the center position) since the error (SP-PV) would be really large. The PID controllers output signal would be sent to the amplifier which would then put the valve in a certain position (from being sent a certain current) causing the flow to change speeds and hence the rocker arm change angular positions. We'd probably put some kind of limit on what current could be sent to the valve since large errors might cause too much current to be sent to the valve. Then, as it got closer and closer to the set point, the error would get smaller and smaller until it eventually would reach a certain error threshold, which at that point the set point would switch to negative 30. Then the same thing would happen and the set point would switch back and forth while counting the cycles as it passed the horizon. Q8. Now, could this work and would it be a better idea than the mapping values concept? I'm also confused on how I could test this labview block diagram without actually having the actual prototype and input/outputs plugged in. I know I can use this simulation module to see what my plants response will be when given certain PID gains but that doesn't really seem to test whether my actual labview code works. Q9. Anyone know how I could do this?

 

Well thanks for reading all of this if you did and I'd GREATLY appreciate any help possible. Thanks!

0 Kudos
Message 1 of 3
(3,065 Views)

Nice project 🙂

 

My first point was : Fatigue tester (1e6 cycles)  and potentiometer sensor??  (OK, your sponsor is responsible for the hardware choosen, and we have to assume he know his spec 😉 )

 

Next: I didn't really understand what value should follow the (setpoint) sine shape: the rocker angle? the force applied to the rocker? a certain (end) point on the rocker?

If you do the geometric math, you will find, that the piston exitation will not follow a sine shape...

If you look at the forces applied, you will see the same for the piston pressure.

 

However,

You haven't told us the cycle speed ... or the tolerance for the shape .... 

 

If you wan't to do something untill the parts are mounted:  Make a dynamic model, (with a lot of 'free' parameters, incl. the mass, start with a simple one and add more degrees of freedome later) and practise your LabVIEW .. write a simulator.

Greetings from Germany
Henrik

LV since v3.1

“ground” is a convenient fantasy

'˙˙˙˙uıɐƃɐ lɐıp puɐ °06 ǝuoɥd ɹnoʎ uɹnʇ ǝsɐǝld 'ʎɹɐuıƃɐɯı sı pǝlɐıp ǝʌɐɥ noʎ ɹǝqɯnu ǝɥʇ'


0 Kudos
Message 2 of 3
(3,039 Views)

Thanks for the reply!!

 

Well that is one aspect that is currently in question. They said the hydraulic cylinder they'll buy may have a built in position sensor that will measure the piston rod's displacement since the string potentiometers usually have life durations less than the duration of the test but the same concept will still apply of using a position sensor to measure vertical displacement of the piston rod.

To clarify, the rocker arm angle would be calculated using the distance from the horizon to the point where the piston rod is welded onto the rocker arm and the horizontal placement of the piston rod on the rocker arm is fixed. And the rocker arm is actually attached to a pipe so that as the rocker arm rotates it bends the pipe. The piston rod can only move vertically and therefore causes the rocker arm to change angles. And I was thinking the set points would be for the rocker angle with respect to the horizon. I assumed the rocker angle would follow a sine wave since it'd be oscillating up and down and the velocity would slowly reach zero at the crests of the sine wave (points of +/-30 degrees). I guess I thought it would be like a sideways pendulum? I also thought the set profile that I'd be setting for the output of the position sensor wouldn't matter. It'd just be however I wanted the motion of the rocker arm to follow. What would you suggest I would make the set point profile for the position of the rocker arm?

 

The cycle time is 26.3 seconds/cycle. What do you mean the tolerance for the shape?

 

And are you saying I can't really do anything with the coding until I have the actual prototype made and have actual inputs and outputs? We do have a dynamic model we made in SimHydraulics..it seems limited to what we can do with it when trying to design the control system though...

 

 

0 Kudos
Message 3 of 3
(3,030 Views)