Boost / VVT / other 3D control
Posted: Thu Feb 25, 2016 2:32 pm
Another subject near and dear to my performance needs is boost control. In the 70s and 80s, and for some even in the 90s still, boost on turbo-charged cars was pretty much controlled by a mechanical wastegate. A wastegate is a flapper (valve) that sits between the exhaust manifold and the downpipe, essentially offering the exhaust gases a path to bypass the turbine wheel of the turbo. The flapper was (and still is today) actuated by a diaphragm that reacts on boost. In the simplest configuration it is held closed by a spring (closed means all exhaust goes through the turbine) and the diaphragm opens the WG progressively as pressure after the compressor increases, bleeding exhaust from the turbine.
This works OK, but has two major issues:
- The boost curve is essentially set by a mechanical spring. No complexity is possible
- Due to the linear nature of the setup, the WG already starts opening before target boost is reached, essentially delaying the rpm at which the turbo is fully spooled
The obvious solution for both issues is having the ECU control the WG. The most common implementation of this idea is putting a valve in the pressure line feeding the WG actuator. This valve can be proportionally closed/opened with a pwm signal. If the valve is closed all the way, no boost will ever reach the WG actuator, essentially keeping the WG firmly shut and routing all exhaust gas through the turbine. This creates maximum boost, in some circles referred to "allofit"(tm). Obviously not many setups can handle this. If the valve is all the way open, it serves no function and the WG runs off the spring again.
The target of boost control is usually two-fold: Set a boost target curve, which is usually based on rpm and throttle position (3D table) and implement a control strategy to get there.
I know of two main implementations for this (and I apologize to @ for using the terms open- and closed loop below- I know he doesn't like them):
1. Open loop control
Create a table with PWM values, based on throttle position (y-axis) and rpm (x-axis). These values are fed into the boost control solenoid valve
2. Closed loop control
Create a 3D table, again based on rpm and TPS, showing target boost. Then create a PID controller for the solenoid valve, using MAP as feedback
The most successful implementation of this for me so far has been using a classic PID controller with a twist: a table of offset values to "seed" the PID loop. This is again a 3D table, in this case with rpm on the x-axis and target boost on the y-axis that displays the start-value that the PID gets seeded with.
One main feature that is also very, very, very important for boost control is boost cut. Boost cut means cutting spark and/or fuel if the boost exceeds a pre-determined value in case something goes wrong. This hopefully protects the engine from major explosions. Boost cut can again be based on rpm (a simple table is enough)
Boost target curves can also be dependent on gears, if you want to go really fancy with it.
There are many other things that this type of control would apply to with only minor tweaks. One that comes to mind is valve angle control (Mazda calls it VVT for example) this is very similar: You have a target table, based on engine conditions, a feedback value (CAM angle) and something that is usually pwm controlled that changes the CAM angle.
So if the code for the FW is kept somewhat open- not pre-determining the parameters, but having those set by the tuning software (i.E. Tunerstudio), should make for some easy configuration by the tuner without having to re-invent the wheel in FW again and again.
One last thing: Different PWM-able valves and actuators respond well at different frequencies. For example my boost control valve reacts 'softly' using a PWM frequency of 19.5Hz and much more aggressively using 39Hz. So this is obviously an important parameter to be able to choose. Not sure how rusefi is handling PWM, but some outputs may share timebases.
To illuminate the target boost issue, here is my current target curve: please note that the value we're reading should not really be percent[%], but MAP [kpa].
This works OK, but has two major issues:
- The boost curve is essentially set by a mechanical spring. No complexity is possible
- Due to the linear nature of the setup, the WG already starts opening before target boost is reached, essentially delaying the rpm at which the turbo is fully spooled
The obvious solution for both issues is having the ECU control the WG. The most common implementation of this idea is putting a valve in the pressure line feeding the WG actuator. This valve can be proportionally closed/opened with a pwm signal. If the valve is closed all the way, no boost will ever reach the WG actuator, essentially keeping the WG firmly shut and routing all exhaust gas through the turbine. This creates maximum boost, in some circles referred to "allofit"(tm). Obviously not many setups can handle this. If the valve is all the way open, it serves no function and the WG runs off the spring again.
The target of boost control is usually two-fold: Set a boost target curve, which is usually based on rpm and throttle position (3D table) and implement a control strategy to get there.
I know of two main implementations for this (and I apologize to @ for using the terms open- and closed loop below- I know he doesn't like them):
1. Open loop control
Create a table with PWM values, based on throttle position (y-axis) and rpm (x-axis). These values are fed into the boost control solenoid valve
2. Closed loop control
Create a 3D table, again based on rpm and TPS, showing target boost. Then create a PID controller for the solenoid valve, using MAP as feedback
The most successful implementation of this for me so far has been using a classic PID controller with a twist: a table of offset values to "seed" the PID loop. This is again a 3D table, in this case with rpm on the x-axis and target boost on the y-axis that displays the start-value that the PID gets seeded with.
One main feature that is also very, very, very important for boost control is boost cut. Boost cut means cutting spark and/or fuel if the boost exceeds a pre-determined value in case something goes wrong. This hopefully protects the engine from major explosions. Boost cut can again be based on rpm (a simple table is enough)
Boost target curves can also be dependent on gears, if you want to go really fancy with it.
There are many other things that this type of control would apply to with only minor tweaks. One that comes to mind is valve angle control (Mazda calls it VVT for example) this is very similar: You have a target table, based on engine conditions, a feedback value (CAM angle) and something that is usually pwm controlled that changes the CAM angle.
So if the code for the FW is kept somewhat open- not pre-determining the parameters, but having those set by the tuning software (i.E. Tunerstudio), should make for some easy configuration by the tuner without having to re-invent the wheel in FW again and again.
One last thing: Different PWM-able valves and actuators respond well at different frequencies. For example my boost control valve reacts 'softly' using a PWM frequency of 19.5Hz and much more aggressively using 39Hz. So this is obviously an important parameter to be able to choose. Not sure how rusefi is handling PWM, but some outputs may share timebases.
To illuminate the target boost issue, here is my current target curve: please note that the value we're reading should not really be percent[%], but MAP [kpa].