PID control without overshoot

M

Thread Starter

Michael

With a turbocharged engine, the turbo uses the exhaust gases to run a turbine which in turn runs a compressor to force for air into the engine. More air means more exhaust gas volume and as a result it makes a feedback loop.

The total boost is controlled by a wastegate that allows exhaust gas to route past the turbine and thus force less air back into the system. This wastegate is a mechanical actuator but it's controlled by the amount of pressure that the turbo makes. It's just a spring and diaphram that operates a small wastegate flapper. This works acceptably to make a small amount of boost but it typically ramps up slowly as the wastegate will begin to open before the target is reached.

To computer control this system you insert a boost solenoid between the turbo and the wastegate actuator. This is a solenoid type valve that holds the wastegate closed by interrupting the pressure. As the duty cycle climbs, so does the amount of boost.

So if my wastegate spring would normally make 8 PSI, I can interrupt this signal using the boost solenoid and maintain 15 PSI. Trick is, the higher the RPM the higher the exhaust volume and the higher the intake requirements in CFM of air. Also, lower temps mean the compressor is more efficient and makes more boost because of the air density.

I'm using a small 8 bit micro to adjust this duty cycle. Based on some sensor readings I determine a target boost level that I want, but achieving that boost level is the difficult part.

I'm wondering if it's possible to use a PID function to reach this target boost without overshooting and if within my program it would be easy to achieve the fastest ramp-up without overshooting the target?

-Michael
 
J
I've used PID control of wastegate valves, but usually the actuator has been replaced with a pneumatic positioner. This allows the analog output of the PID to acurately control the boost pressure.

You could use a PID with a pulse-width modulated output to the solenoid. Using the actual boost pressure as the PV will compensate for turbo performance and air density.

If you're worried that overshoot may be a problem, you may be able to use output limiting based on a control band above the boost pressure setpoint. If the pressure exceeds the setpoint, ramp the output limit to the appropriate direction.
 
K
Not sure I followed all (much) of that, but don't discount using one (or more) pid loops to feed others, if the relationships involved aren't
simple ones. PID is great and flexible, but as a linear process it can be more effectively applied by applying it to subdivisions of the whole
problem. The output of one pid loop can be the setpoint to another, etc.

Just by the complexity of the description, it seems to me that "a" pid function wouldn't be likely to achieve the goal (fast ramp-up without
overshooting).

On rereading, maybe it's not so complicated. You've already determined the target value; presumably you can measure the corresponding current value and command the effecting actuator to move, thus affecting the target pressure. Overshoot is inherent in the P part of pid unless
it's tuned to be sluggish (often useful). To an extent D can be used to counter the tendency to overshoot by applying an effect opposite and
in proportion to the rate of change. Integral isn't probably going to do much for you unless the engine is running at a steady state; if a
person's foot is giving the main setpoint signal it'll presumably close the error-over-time part of the loop.

I suspect the tuning parameters probably might need to change for different operating conditions, so it's not likely you could tune it
once and be done. These adjustments could be emprically based and set out as a recepie, or they could be calculated from other values.

--
Ken Irving
 
Yes, the solution does use a PWM output to cycle the boost solenoid and therefore make boost.

variables I have are:
Amount of boost being made
Amount of boost desired
duty cycle

The amount of gas pedal influences the amount of boost desired but it will also influence how fast the amount of boost being made responds.

Anyone care to take a stab at how to plug all this into a formula?

-Michael
 
J
Sounds just like a boiler drum level controller to me, the objective is the same, to manage upto but not beyond the target value.
????
 
You should be able to make a controller that has minimal or no overshoot and maximize the response, but you have to caracterize your plant (the solenoid, turbo response etc) before you can develop your PID.

Basically you want to develop an error loop, desired - actual, and use the PID to gain up the error signal that is sent to the solenoid. Don't worry about the duty cycle; just calculate this from the gained error signal as a conversion from boost signal to PWM units. You have to know how much boost you can expect to get from changing the soleniod valve. <-maybe a tough thing to get based on the data you have available. That is where a good plant definition would help. Matlab or Octave could be used to help with your design. If you don't know how to design the PID you could use Zeigler Nichols tuning when you get your plant defined. Run some simulations and when you are happy with the results use the PID you came up with.

Sorry about the vague answer, but you have to know what the plant looks like to make a good PID. Turbos can be a tough plant to define.

john m
 
Top