Suggested Idle Improvements
Posted: Wed Jul 08, 2020 5:43 pm
Quick summary:
We currently have two idle modes- manual and automatic. Manual is "pick a value and leave it". Automatic employs an adjustable PID strategy.
For most modern-ish street-driven cars, automatic will be needed. The implementation has improved considerably over the last few months. But there are still some quirks that need help.
Mission statement: Idle, even on a small engine with multiple different variable load factors, should be OEM quality or better.
And we're much better now than we were a few months back, but we're not quite there yet.
My biggest problem currently is the I-wind-down that happens every time we enter idle from a higher rpm. This happens, because we're entering idle-PID when the engine state is nowhere near stable. So the rpm is much higher than it ought to be and the PID is trying to fight this initial condition, which it really can't.
My proposal is that we only enter PID, when the dRPM/dt value is fairly small, but negative. .
This will require another parameter, maybe two for min/max dRPM/dt. Until this condition is satisfied, the IAC should be at offset. Offset should be chosen, so rpm is slightly above idle target under all operating conditions. In a perfect world, this would also entail a table for offset/CLT, since we have the same thing for target RPM/CLT.
With this we achieve that we only enter PID control when engine operation has stabilized to some degree. It would *appear* that my stock ECU follows a similar strategy. RPMs drop after letting go of throttle, or pushing clutch. They briefly stabilize at a level above target-rpm. Then RPMs slowly drift towards target.
In addition, it would be nice to only enter PID idle when the engine is separated from the drivetrain (at least for a manual transmission car). For this we usually have a clutch/neutral switch.
So conditions for entering idle PID:
- TPS below threshold value
- Engine separated from drivetrain
- dRPM/dt smaller than threshold value. Actually it should be greater, since RPM is dropping, so we have a negative dRPM/dt ( 0 (or max threshold) > dRPM/dt > min threshold)
We currently have two idle modes- manual and automatic. Manual is "pick a value and leave it". Automatic employs an adjustable PID strategy.
For most modern-ish street-driven cars, automatic will be needed. The implementation has improved considerably over the last few months. But there are still some quirks that need help.
Mission statement: Idle, even on a small engine with multiple different variable load factors, should be OEM quality or better.
And we're much better now than we were a few months back, but we're not quite there yet.
My biggest problem currently is the I-wind-down that happens every time we enter idle from a higher rpm. This happens, because we're entering idle-PID when the engine state is nowhere near stable. So the rpm is much higher than it ought to be and the PID is trying to fight this initial condition, which it really can't.
My proposal is that we only enter PID, when the dRPM/dt value is fairly small, but negative. .
This will require another parameter, maybe two for min/max dRPM/dt. Until this condition is satisfied, the IAC should be at offset. Offset should be chosen, so rpm is slightly above idle target under all operating conditions. In a perfect world, this would also entail a table for offset/CLT, since we have the same thing for target RPM/CLT.
With this we achieve that we only enter PID control when engine operation has stabilized to some degree. It would *appear* that my stock ECU follows a similar strategy. RPMs drop after letting go of throttle, or pushing clutch. They briefly stabilize at a level above target-rpm. Then RPMs slowly drift towards target.
In addition, it would be nice to only enter PID idle when the engine is separated from the drivetrain (at least for a manual transmission car). For this we usually have a clutch/neutral switch.
So conditions for entering idle PID:
- TPS below threshold value
- Engine separated from drivetrain
- dRPM/dt smaller than threshold value. Actually it should be greater, since RPM is dropping, so we have a negative dRPM/dt ( 0 (or max threshold) > dRPM/dt > min threshold)