Close

Low Emissions? - getting there.

A project log for ECUality1

A light, open-source Engine Control Unit (ECU) using Arduino

mike-thielvoldtMike Thielvoldt 04/24/2015 at 22:130 Comments

Last week was all about measuring emissions. Standards for acceptable emissions levels are set by the state of California, so I decided to see if I could meet the same standard, using the CA-certified test centers. This program is called, "SMOG CHECK".

Smog Check results before and after:

To get through a smog test (this applies to the STAR test - a stringent test required of older vehicles), a technician (as in: not me) drives the vehicle onto the chassis dynamometer, hooks up a timing analyzer and a tailpipe gas collector, does a visual inspection, then uses the engine to spin up the dynamometer to the required speeds for a test and maintains that speed while the gas analyzer checks the exhaust composition. All the checks and setup require a stable idle, good starting, and a quick transition from idling to under-load auto-tuning to pass the test. Needless to say, this took some work to achieve.

RPM Idle Stabilization

The biggest code-hurdle was stabilizing the idle. Because I decided to use all the original sensors, I was restricted to using a single-wire Oxygen sensor. This does not have a heater built in, so when the exhaust flow stops putting enough heat into the sensor to keep it operating, the signal becomes meaningless. This means I could not rely on my O2 sensor to control the idle fuel settings. I learned this the hard way at the first test-center: I had very rough idle, and ultimately couldn't finish the test. Further, the number of re-starts drained the battery so Kim and I had an embarrassing push-start out the lot. Nice try, no dice. I needed another signal to base idle-adjustments on, and there is really only one other choice: RPM.

The theory is: when we're idling, the engine is out of gear so adjustments to the fuel mixture affect the idle speed. Speaking approximately, we want to be on the lean side of the amount of fuel that gives maximum RPM to prevent carbon buildup, high CO and wasted fuel. The old carburetor-tuning methodology (thanks Dad) goes like this:

Turn the appropriate screw to lean the mixture until the RPM noticeably drops, then turn it back a set (usually small) amount and there you go. I adopted the same methodology.

Of course, the local-global distribution of change has it's own rules, but I'll cover those in a coming update.

SMOG speculation and What's Next:

The idle work really showed the advantage of having a heated O2 sensor, both for emissions and for simplifying control heuristics. Further, I suspect the O2 sensor is why I nearly failed for having high CO at 15mph on the last test, when I was so good in that category on the previous test. Between the two tests, I also tried to add a pull-down resistor to the O2 sensor output, and that damaged the new O2 sensor, making me take the last test with an older one. O2 sensor aging is documented as creating a rich-shift. I already have the hardware to go to the latest LS4.9 wide-band O2, which I expect will give far more consistent useful information.

I do believe the best context for making the next improvements will be on... A... Road Trip. To hell with controlled environments!

Stay tuned.

Discussions