36-1 trigger wheel distributorless ignition system design

Hey guys i bought an old massey furgeson TO-35 tractor with a z134 continental 4 cylinder engine. I got it for a song but the issue is that the distributor seized and it took the teeth off of the camshaft. What im looking to do is weld/bolt/braze a 36-1 trigger wheel on the crankshaft pulley and make a simple circuit to fire 4 ls1 style ignition coils sequentially/wasted spark with an ls1 crank position sensor reading the teeth of the trigger wheel and delete the distributor all together.

Simple is good since its a cheap rusty tractor, im just looking for RPM based timing advance, starting advance/retard and possibly an integrated temp sensor into the housing to do some very simple addition/subtraction of timing against the total advance.

I can definitely get the trigger wheel installed and the sensor mount made up, however the programming side has me scratching my head. there are 36 total teeth, meaning 10-degrees per tooth. with the 1 missing tooth at TDC probably on the rising edge. Since im looking to do sequential ignition and the motor is a 4 cylinder that means there should be a spark every 180 degrees of rotation, and all cylinders fired after 720 resetting to zero. Im just not even sure where to start.

Just looking for some suggestions.

Sounds like a fun project. I did a quick google search on a "crank position sensor" and It came out like this

My best guess is it's like a magnetic sensor that creates a pulse at each teeth of a gear. Detecting this pulse from an Arduino is pretty straightforward. I think what would make it easier is if there is a separate pulse to signal the "missing tooth". This way, for each rotation, you always have a fixed reference.

For example, at "missing tooth" pulse, set counter = 0. Then at each pulse from the position sensor, you increment it by one. When counter reaches 18 (or 180 degrees at 10 degree per tooth_, you fire up your first cylinder. You continue counting and firing each subsequent cylinder at corresponding counter values, until you detect the "missing tooth" pulse at which you reset counter to zero. Rinse and repeat

That sounds doable, however one of the issues i have is its not exactly on a singular tooth that the ignition timing needs to be fired on for each cylinder, although it will be the same timing value for each cylinder, it may not exactly fall on a tooth where it needs to be fired, im not really sure how to setup an in-between tooth firing for a cylinder or perhaps i would just move and adjust the sensor position to ensure that it does fall on a tooth?

Secondly, although it fires once ever 180* of crankshaft rotation, if i want to do sequential ignition, it will fire cylinder 1 and 180*, cylinder 4 at 360* cylinder 3 at 540* and cylinder 4 at 720* then repeating on cylinder 1 at 180*. With wasted spark it fires on cylinder 1 and 4 at the same time at 180*, and cylinder 3&2 at 360* so that is possible, however i would like to try and do sequential ignition, im just not sure how to set it up in the code.

So it may look something like "pulse count - missing tooth(x2) firing every 18 teeth counted?

Edit: i just realized why you require a cam position sensor, as you dont know which cylinder is at TDC, so i could just run wasted spark and fire at the 18th tooth, and on the rising edge of the "missing tooth", that would possibly work.

image

What im talking about making would be a very crude version of this.

I see what you mean. If there's some activity between each tooth, then the only way around it is use a bunch of timers...

So you could use the missing tooth trigger to signal the start of a cycle. Then count each subsequent tooth to determine how far you are from reference. Then at each tooth signal, you can also independently start a fast timer (that can count in the microsecond range). You would need an MCU that is more advance than the typical Arduino. One with lots of high speed timers.

Also, you should ask a moderator to move this post to the "Programming" or "Project Guidance" section of the forum. It will get more traffic there so you'll get input from more people.

In the meantime, let me see if I can come up with a pseudocode that will handle your requirement...

Then you seem to be firing the cylinder while the exhaust valve is open! At other times, firing while the intake valve is open. Are you also going to replace the crank and cam shafts?

Actually right now im planning on doing wasted spark, so i would be firing on one of the cylinders power stroke (as to be expected) and on the exhaust stroke of the companion cylinder. This is normal for wasted spark style setups and causes no issues running other than wearing out ignition coils at double the speed.

Yeah as of right now im looking into 8bit timers and im probably going to setup the TK0CKL on the pic chip im planning on using to count the pulses, setting the timer to go high at the minimum amount of time (around 100 microseconds) even at 100rpm to "count" a tooth should work. Above 100us should = missing tooth and set the pulse count to 0

atleast thats the theory.