Success! I have started and run the engine on my own electronic ignition. The problem was in the end quite simple, it turns out that the missing tooth wheel on the crank was aligned differently to what I expected. I thought that the missing tooth occurred 240 degrees after TDC, but in fact it appears to be aligned almost exactly at TDC. This meant that my spark was happening around Bottom Dead Centre, which is no use at all!
Having thought I’d almost nailed my ignition timing problems, I tried testing at higher engine speeds (up to 6000 RPM) only to find that the ignition timing began to become erratic again.
From my couple of brief tests, I’ve identified a few problems which are preventing the engine from starting up and running for more than a few seconds.
- The ignition timing at very low speeds < 500 RPM is very erratic, and not at all on time.
- Under heavy acceleration the ignition timing is erratic, for example when pull starting the engine
- There are some occasional misfires
- The ignition timing is generally not massively stable – sometimes varying as much as 10 degrees(!) Continue reading
I took some pictures today of the set up I’m using to develop my ECU, the engine is a single cylinder 2.5 Hp Briggs and Stratton engine. It’s mounted on a trolley with the circuitry required to drive each of the components of the engine there’s more pictures available here: http://www.flickr.com/photos/gadgit/sets/72157633929512218/
Today was the first test of the engine with the control unit and it worked! Albeit only for a short time and a bit roughly (only had about 10 minutes to test). Initially I just needed to check that the ECU was triggering the ignition and fuel injection, and find a roughly suitable ignition angle.
I have now managed to successfully map my engine simulator for the fuel injection timings across all loads and engine speeds. I have set up a two dimensional array, of speed and throttle position, and inside each element is the time in microseconds (us) that the fuel injector should be open for. I’ve also added closed loop lambda feedback.
I spent yesterday setting up the engine and equipment that I will need for the project. The engine is mounted on a frame with a car alternator as the load. The frame is then stood on a trolley which can be moved around. Some driving circuitry for the fuel injector and ignition coil has already been built and is also mounted to the trolley. There is also a conditioning circuit for the Variable Reluctance Sensor (VRS) to process the toothed wheel sensor output into a nice clean square wave ready to input to a microcontroller. The engine can be run using the stock carburettor, or with a fuel injector, and can use the stock magneto ignition or electronically controlled coil ignition.
I’ve set up a PC on the trolley to use to reprogram my ECU, and an Oscilloscope to measure signals. I forgot to take pictures, but will add them later when I do.
Update: pictures available here http://www.flickr.com/photos/gadgit/sets/72157633929512218/
VRS sensors (sometimes called crank sensors) are basically a coil of wire around a ferrite core. They are located close to a toothed wheel which is usually mounted on the crankshaft or the teeth are part of the flywheel itself. Here’s an example of one:
I have now implemented more accurate ignition timing control which is based on degrees before top dead centre rather than a fixed time period.
I’ve also implemented a simple fuel map with the ability to store new values, display the map and save the map over serial from the Arduino.
For my Stellaris Launchpad engine simulator, I wished to add a calculation of the Air to Fuel Ratio (AFR) or lambda/equivalence ratio for the current engine conditions. I did this crudely by using the throttle position, engine speed (this->s) and current fuel pulse width (this->F) as factors in calculating the AFR:
this->AFR = (0.32666 * this->s * this->throttle)/(this->F);