Feasibility: Engine Ignition controller

This is a feasibility inquiry regarding a project I have in mind:

The scope is that I have a motorcycle engine to which I want to add a programmable Ignition controller in place of the current mechanical system (which has failed me and cost me a holed piston and an engine rebuild).

I currently am running a coil module (GM HEI) triggered by the points via a transistor circuit (see diagram http://home.comcast.net/~loudgpz/GPZweb/Ignition/GPZheiModForPoints.html for specifics)

As this is currently dependent on the motorcycle's mechanical advance mechanism, it has issues. As I mentioned earlier, the mechanical advancer was worn beyond service limits and over-advanced the ignition timing causing an engine failure. Is it possible to insert an Arduino in place of the current transistor coil control and have it control ignition advance while using the points as an RPM input? (provided the mechanical advance is rendered inert of course) An additional function (which I think would be easy to code, would be a rev limiter function)

I'm pretty sure that the Arduino Lenardo unit has sufficient processing power do calculate the needed advance based on a last known RPM basis. As this motorcycle has a upper rev limit of 8000 or less, I calculated that the rotational time for 1* at 8000 to be .0208 milliseconds. However, if this project is feasible, I'd like to add this to a second motorcycle which has a rev limit of 10500 rpm (.0151milliseconds per * at 11000rpm). I know I will have to address power supply issues to condition 12-15v DC to the appropriate "clean" source voltage, but I don't think that will be too hard.

so in a nutshell can an Arduino Lenardo do the following 1) use automotive points as a tachometer / RPM input (with mechanical advancer rendered inert) 2) use either my current HEI system or something similar to trigger the HEI module (keeping direct coil control power levels away from the Arduino) 3) be able to control the spark event by 1* increments by using a last-known RPM calculation (time for last revolution +- delay for table-lookup timing with a fastest * increment delay of .0151milliseconds) 4) use a Pressure sensor to determine "load" axis for table lookup (vacuum to atmospheric only) 5) handle the vibrations and environment of being motorcycle mounted (box or potting acceptable, provided programming interface still accessible)

Your timing will be no more accurate than the underlying mechanical sensor, which is likely to be in pretty poor condition if it's as worn as you say. If you're going to go to the trouble of doing this, I'd suggest you look into the possibility of fitting a trigger wheel somehow.

Cars and bikes tend to be electrically quite hostile environments and at a minimum you will need some external filtering and protection on all the inputs; you will also need to be very wary of spikes on the ignition circuit. Even with commercial products designed for the job, I've had problems with electronics resetting due to noise.

What you'd end up with is essentially equivalent to a one cylinder megajolt. Have you considered just making one of those, and taking advantage of the existing hardware and software designs?

If you're anywhere near burning holes in pistons and it's an engine you care about (and assuming it's basically sound) then you really ought to be looking at monitoring and controlling the air/fuel ratio in conjunction with the ignition, and monitoring for knock.

Your other option is to remanufacture the existing mechanical dizzy, which would probably be a much quicker and cheaper (and safer) option and would make sense if it's just an old engine that you want to keep running without doing any further damage.

Thanks for the reply, I have some clarification and additional info below your quotes

PeterH: Your timing will be no more accurate than the underlying mechanical sensor, which is likely to be in pretty poor condition if it's as worn as you say. If you're going to go to the trouble of doing this, I'd suggest you look into the possibility of fitting a trigger wheel somehow.

I understand your point here. It was the auto-advancer portion of the points system (bob-weight & springs mechanism) that caused the over-advance issue. I am contemplating imobilizing or removing the advancer and using the points as a TDC input / indicator.

PeterH: Cars and bikes tend to be electrically quite hostile environments and at a minimum you will need some external filtering and protection on all the inputs; you will also need to be very wary of spikes on the ignition circuit. Even with commercial products designed for the job, I've had problems with electronics resetting due to noise.

Indeed, it is a harsh environment. from what I can tell, the Lenardo is all SMD components, so vibration shouldn't be too much of an issue, especially if its isolated a bit from the frame etc. either potting the Arduino or enclosing it in a sealed box should also address the weather elements.

PeterH: What you'd end up with is essentially equivalent to a one cylinder megajolt. Have you considered just making one of those, and taking advantage of the existing hardware and software designs?

That was actually one of my initial searches. I already have done a Megasquirt-II v3.0 install on my project car a number of years ago with great results. Unfortunately the only US-based distributor that I found in my search was autosport.com and they wanted $162 +shipping for a megajolt lite jr. v4. With that cost, that's when I started looking into Arduino. For $25, I can get a Lenardo setup and I'd wager no more than $20 more in radio-shack parts plus time, I probably could have something worked up. Even if its only accurate to within 1*, It would still be far superior than the original mechanical advancer.

PeterH: If you're anywhere near burning holes in pistons and it's an engine you care about (and assuming it's basically sound) then you really ought to be looking at monitoring and controlling the air/fuel ratio in conjunction with the ignition, and monitoring for knock.

Your other option is to remanufacture the existing mechanical dizzy, which would probably be a much quicker and cheaper (and safer) option and would make sense if it's just an old engine that you want to keep running without doing any further damage.

Those are valid points on knock and AFR. I should have been fine on the fuelling (rebuilt the carbs with bigger jets etc), leaving pretty much an ignition issue at that point.

Unfortunately R&Ring the original advancer system, while cheaper than a MJLJ setup, would be around twice the cost of the Arduino setup I am considering and less functional as well.

shadowplane676: Indeed, it is a harsh environment. from what I can tell, the Lenardo is all SMD components, so vibration shouldn't be too much of an issue, especially if its isolated a bit from the frame etc. either potting the Arduino or enclosing it in a sealed box should also address the weather elements.

I was referring to the electrical environment, not the physical environment.

shadowplane676: I already have done a Megasquirt-II v3.0 install on my project car a number of years ago with great results. Unfortunately the only US-based distributor that I found in my search was autosport.com and they wanted $162 +shipping for a megajolt lite jr. v4. With that cost, that's when I started looking into Arduino.

The Megasquirt hardware and software designs are readily available and you could build your own for a fraction of the cost of a built one from a commercial supplier. Whichever route you took, you would have to provide your own driver hardware and filtering circuits etc for your Arduino-based solution in any case, and of course you would have a hell of a lot of software development, testing and debugging to do before you were ready to even start trying to get it working on a real engine. No reason why you couldn't design the hardware and software from scratch using Arduino, but using an existing hardware and software design just seems like the smarter option to me.

MegaJolt (and MegaSquirt) need a trigger wheel on the crank. You might want to be using electronic (Hall effect?) points rather than mechanical and use this as a signal generator. Unless you fit a vacuum sensor (and no reason you couldn't), you'll be limited to 2D advance correction, which is a straight replacement for your mechanical system.

I think it sounds like a great project as long as you know what the transistor module thingy is sending to the coil pack. MJLJ uses Ford EDIS to control the coil pack which is an extra expense you could be saving if you build this using Arduino. I say go for it and report back... (but wait for me to sell my MJLJ first!)

spandit: MegaJolt (and MegaSquirt) need a trigger wheel on the crank.

They're very flexible, and can be driven off points just as well - but I wouldn't recommend it because the resolution would be relatively poor and it would be subject to all the mechanical inaccuracies of the existing system. You would definitely need a trigger wheel if you went for an EDIS based coil driver, and there would be considerable advantages to doing that. But if you're going for mapped ignition in the first place, it really makes sense to get the additional resolution of a trigger wheel. (If it's not worth the effort of doing that, is it really worth the effort of implementing mapped ignition at all?)

I did more searching on the MJLJ route and the DIY kits are NLA. Couldn't find any schematics either. The other issue with the MJLJ on my applications are that both bikes are twin cylinders. One is a 360* parallel twin running a single wasted-spark setup ATM (mechanical advance/trigger) and the other is a 180* motor (a hit-hit-skip-skip motor). Both of these I don't think would work with the MJLJ EDIS setup as EDIS was used for 4, 6 and 8 cylinder applications. Additionally, a regular MS-I is cheaper than the MJLJ available anyways, but the form factor and cost are prohibitive for what I'm looking for.

A cheap voltage converter/regulator can be had for about $9 to clean up and supply sufficient 5v for the Arduino http://www.ebay.com/itm/251155257634?ssPageName=STRK:MEWAX:IT&_trksid=p3984.m1423.l2649 and is also up to exposed element use.

As far as I can figure, I would need a simple input for a TDC indicator (whether points pulled low at TDC, or a trigger wheel input) and a simple logic output to trigger the current transistor controlled HEI module. Add on a MAP sensor and then the table lookup becomes feasible. And all for a lot less than $160 (MS-I/MJLJ) and a heck of a lot smaller/simpler

shadowplane676: (whether points pulled low at TDC, or a trigger wheel input)

Unless you have a trigger wheel, you will be using the timing from the previous cycle to predict the timing of the next cycle. The engine speed isn't actually uniform, and the lower the RPM the more variation you'll get. The hardest case will be when cranking. To make life as easy as possible, I suggest you position the crank position sensor so that you get a signal slightly before the earliest ignition you ever need to use (for one cylinder). This means that you will only need to predict the engine speed for a very short time rather than for a whole crank revolution. Even so, you should be prepared for quite a bit of trial and error to find a timing setup which will let you start the engine. Once it's up and running, the problem gets much easier.

When I was looking into installing MJLJ onto my vehicle, I wondered whether I could use a small gear wheel (like a Myford lathe change gear) inside the distributor housing, to keep everything looking "stock". Wasn't possible with MJLJ as it needs a 36-1 wheel because of EDIS but I reckon with a smaller gear and a Hall-effect sensor inside the dizzy, you could have a simple and reliable setup. You'd still have to disable the mechanical advance weights inside the distributor.

the MJLJ is primarily built around the Ford EDIS module so it isn't very compatible with my motorcycle motors. While the point triggering and last revolution calculation is not the most optimal solution, the question is, would it work.

A Hall/opto or VR trigger might be possible at a later date, but for now, a MAP sensor and points trigger should be sufficient for the time being. even at 11000 rpm, a full revolution is only 5.455ms, There should be more than enough time on the processor for even a 1* accuracy setup on a full neutral rev-up (even at 1000 to 11000rpm in 1 second).

As for startup, even with a bit of inaccuracy, with a 3D table the starting section can be tuned to the best starting timing.

shadowplane676: the question is, would it work.

I'm reasonable confident that it would be possible to get it to run the engine, and the high speed timing requirements don't seem to be a problem. It's the low speed characteristics, especially while cranking, where I would anticipate the worst problems. I suspect it might take a considerable amount of trial and error to compensate for the variations in cranking speed during a crank cycle, and this behaviour will probably not be consistent from cycle to cycle, and will probably also vary with changes in ambiant conditions.

hmm, I wonder if I could code the lower RPMs to be less sensitive to rpm change than higher rpms. that might keep a more stable idle ignition timing.

shadowplane676:
hmm, I wonder if I could code the lower RPMs to be less sensitive to rpm change than higher rpms. that might keep a more stable idle ignition timing.

I don’t think that’s something that you can control. The problem is that if you’re cranking at (say) 3 revolutions per second and your crank signal is coming in at an average of 3Hz, the previous crank signal came in 300 ms ago and you’ve just received the next signal. How long before the crank is at the right position for ignition? The answer is mainly a guess, because the speed is varying all the place, not consistent within a cycle and not consistent from cycle to cycle. By trial and error, hopefully you can come up with a guess that is good enough to get the ignition timing close enough for the thing to eventually fire. The problem with this is that starting a cold engine can be problematic at the best of times, and you would only need to ‘miss’ the correct timing a few times to make it very difficult to fire at all even when the timing is right.

This is a curiosity, more than anything. I’m wondering if you tried this and what your experience was. Success?

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.