There are some other sites that promote EFI on the Aircooled VW and I have ask questions about an install. But they never returned an answer or they just don't care. You explained very well. Thank You. PS You need to become a Technical Writer if you don't have a profession.
I would way much more want to see one of your EFI's on something I build than some slick shiny thing. I want to see a clear box with the circuit boards showing.
Thank you for taking the time to fully explain all aspects of this project. The improved performance, efficiency, and reliability that the optical 4 coil ignition and EFI adds to the bug would most definitely make it a more pleasant and dependable vehicle. I like all your videos and that you go in depth so others can emulate and build what you build; but I especially like your VW videos.
You know...I've been sitting on this Speeduino for my 4-cyl CJ-7, but this is exactly what I've been thinking of. Time to make a Git pull request. I'm in N.Phoenix if you want to come help!
It was probably 20 years ago the first time I took my first two kids to the Phoenix Bug-O-Rama. Brings back memories. This is some very cool work you've done here. You have obviously done a lot of research to get to this point. One question which is far from a criticism. Is there a reason you didn't use a crank trigger and a pulley with a gap? The thing I like about your design is that it would be far simpler to retrofit a Type 3 motor, where it's not so simple to just put on some different pulley.
So glad to hear you like it! The Bug-O-Rama has been a long tradition in my family as well! Most of the crank trigger systems I encountered used a tooth wheel, and I was concerned about interference from the ignition causing over/under counting of the teeth with subsequent loss of positional accuracy within the rotation. The distributor trigger seemed less prone to potentially dangerous timing errors, so I opted for it in this design.
@@DielectricVideos Very nice work and congratulations. I’m not sure if you are familiar with Type 3 motors, but the previously available consumer products provide the crank trigger method. So, for an “out of the box” solution, they really aren’t a good option for a T3 motor. For those of us willing and able to customize things to make it work might as well save lots of money and do something like this!
With distributor optical blinds designed as a full half circle sector and two optical sensors placed on 90 degree angle (as yours) you actually can produce four position signal 00,01,10,11. The change of signals will happen on every 90 degree by distributor shaft rotation or 180 degree by crank shaft rotation . Instead of optical sensors, better use Hall sensors specially designed for automobile applications which include the magnet . You can find such a sensors as a replacement of contacts in some models of VW golf , Passat second generation. Using individual coils but driving them 2 by 2 in parallel doesn’t make much sense since you double the primary current pulled from the alternator and it isn’t free :) , double the number of sparks and shorten the spark plugs life by a half , probably the temperature of the coils as well ! The advantages of your variant of waste spark system in comparison with waste spark 2 coils( for 4 cylinders engine ) systems will be the lower electrical noise and the uniform and proper polarity of high voltage secondary pulses. In 2 coils waste spark system the polarity is proper ( (-) on central electrode )for the one of the spark plugs in the pair and in reverse on the other spark plug . When the high voltage polarity is reversed the break down voltage of the spark gap increase on about 25-30% . Also with 2 coils waste spark system you must use only double platinum/ iridium-platinum electrodes plugs because otherwise the ground electrode of the reversed high voltage pulse spark plug erodes extremely fast . The advantage of classic 2 coils waste spark system will consume twice lower current than in your variant. So better drive the individual coils and the injectors sequentially , not by pairs .
excellent video, if you allow me the advice, for the injectors you can use the ic fds2407, each package works for 2 ijectors, and for the coils you can use the IGBT V3040D, they are used for automotive use
Great project, with grate documentation. looking at the schematics I see you are using the unregulated battery voltage driving the injector, but a regulated 12v to drive the ignition coils. How come? I would imagine that the injector dwell time would be influenced by the voltage level and thereby not consistent.
The main reason I drive the injectors directly from 12V is that they draw too much current for the boost converter on average. Each injector can draw as much as 2 amps, which can be on for up to 100% duty cycle. Although the peak current in the ignition coils is higher (around 8A each), it has low enough dwell time that the average current is much lower. Ideally I would love to boost-regulate the injector voltage as well, as this would make for faster and more consistent cranking starts.
sigh. looks like its now suffering the "bloat" syndrome... ha ha, mines still smaller! may not have all the features, but yeah... what do you expect using a pic12f683? 8 pins! and so far, still only using two. crank signal and injector... a work in progress, now i know my interrupts are working, that the engine runs, getting an idea of how to code in assembly, the next step is to add the MAP sensor... then comes the fun part of trying to tune it... deal with teh data i get with teh MAP and ADC... determine which stroke its on... break the max injection pulse into two parts once injection time exceeds the timefraame available at high RPM with high VE. (including boost eventually...) i can see the sense in arduino, but after going through the firmware for speeduino, i couldnt figure out how to implement my method of obtaining the crank signal. C doesnt make sense to me, and when i see "void", i simply ignore anything coming after it, lol. "bloat". i dont want canbus or obdii or knock sensors... my whole intention was to get it as bare bones basic as possible. with the PIC, it was simplicity itself. other than the coding and dealing with microchip and their apparent intention to make everything as difficult as possible... back to back (antiparallel?) optocouplers driving an eccles jordan flip flop, and simply measure the length of pulse. VRsensors produce a positive AND a negative signal... and the 12f683 has a gated timer. simple! everything about the pic12f683 makes it seem that it was almost intended for this...
It's currently set up as an open-loop system, but with suitable software changes, one of the analog inputs could be used as an oxygen sensor connection and closed-loop AFR control could be performed.
@@DielectricVideos This is a awesome project brother. Appriciate your effort. I'm hoping to make a DIY EFI system for a motorcycle. So how can I use a oxygen sensor readings to compensate with AFR values? Do I have to use PID for it?
@@garage9732 Typically narrowband oxygen sensors operate in a bang-bang control loop where the sensor is allowed to drift from rich to lean. This is because the voltage output of the sensor is very sensitive to oxygen concentration, and switches from high to low in a very small concentration range. The program would need to determine when the engine should go closed-loop (typically during cruising or idle when AFR might be set close to 14.7), and when to run open-loop (hard acceleration or coasting). If you use a wideband oxygen sensor, then you can keep it closed-loop over a wider range of AFR values, and a PID control loop might be required for stability. A PI may be sufficient as well, as it doesn't need to be a particularly fast control algorithm. Some checks for reasonableness should also be in place (for example, keep fuel trims bounded to some finite values, like +/-10%).
Most likely yes, although you may have to adjust the initial timing settings to compensate for any phase shift caused by the angular placement of the sensors.
The AFR values can be manually trimmed in each RPM/MAP range within the AFR table, so once they are set the mixture stays mostly consistent. At least, it's been consistent enough to pass emissions testing. An AFR sensor could be installed for more sensitive applications, using one of the auxiliary analog inputs.
Good day John . I did down load th Gerber file , but I dont have success in downloading the schematics as well as the pcb file . I must say I it is a nice project. I want to use it on a 1982 Opel kadett 1300 voayge.
Hi, great video, very interesting. I have a Type 4 engine so have 2 carbs, inlet manifolds. I the on the board there is a aux mosfet can this be configured to run an injector? and can one of the other analogue inputs run a map sensors? The idea being having 2 independent fuel injectors/ throttle bodies, one for each side?.
When the fuel delivery values are calculated, there's an additional term that adds extra fuel proportionally to the rate of change of the MAP signal, so if the throttle is quickly opened, and the MAP goes up rapidly, more fuel is added for a brief period. The rate-of-change proportion can be adjusted. I have, however, found that this isn't really needed when there is a long intake manifold between the injectors and the valves, as some fuel tends to condense in the manifold during cruising, and when the throttle is quickly pulled in, there's already some extra fuel available. I usually keep the rate-of-change term at or close to zero.
I have options in the program to apply positive or negative advance in response to engine speed and manifold vacuum, but currently these are just fixed multiplier values. You could probably write a function to calculate ignition advance according to your own custom curve equation, and call the function when calculating delay time for the ignition output.
I have a 3D printer that can print PLA and ABS; however, I had the rotor printed at Xometry in polycarbonate. I then spray painted it myself for IR opacity.
Good day I'm Wimpie Im going to ask a stupit question. How do i download the schematic and pcb file from github to use in Express pcb. Is there a way to convert a Gerber file back to a pcb file to be able to to print it on a printer? Thank you Regards.
It looks like ExpressPCB can import Eagle footprints, but not entire schematics. If you are a student, you should be able to download Autodesk Eagle for free. I also believe KiCAD can import Eagle files, if you are looking for a free alternative.
Yes! I just uploaded the CAD files (SLDPRT, STEP, and STL) for the distributor cap cover. The original 009 cap is still used, but this covers the top of it for aesthetics. The rotor design files can be found in the directory one level above the one linked below. github.com/JohnPattersonConsulting/DuneBuggyEFI/tree/main/4-Coil_ECM/Distributor%20Cover%20Cap
@@DielectricVideos Hi ;) I did find information about your Electronic CAD I use EasyEDA and Kicad but I can't open your file like Optical_Spark_V2.0.sch I need your help 😀
The throttle body is from the lower half of an old 2-barrel Zenith carburetor, and I made the injector mounts from some galvanized pipe and a set of weld-in injector bungs.
It's using a symmetric 2-sensor optical pickup on the distributor, so it actually does have to be wasted spark. If it had 4 sensors or a cam/crank position sensor as you said, then it would be possible to fire on ignition strokes only. Wasted spark works really well, though, as the engine is always timed to fire before top dead center, so the wasted spark always fires safely into exhaust and never into fresh mixture.
@@DielectricVideos Know what else works well? A distributor. Snarkiness aside, I do wonder why you used 2 Arduinos. Was one not quite capable enough? Was switching to a mega 2560 (or similar) just more effort. I plan on digging through your code. Recently had the idea of trying a purely look-up-table based approach, also with just cam/crank sensor + MAP. MAP through a potetiometer for quick adjustments and choke, adjusting table for long term adjustments. Also considering purely look-up-table spark timing by simply counting clock pulses... and torque converter lock up, and a basic binary counter approach for paddle shifters. Nothing would ever reference real time, just program it assuming the 16 MHz clock, will be 16 MHz. I'd start with just fuel; would be my 1st scratch-built programming. Leave the GUI re-turn up to other people who know how to prepackage some sort of word processor style thing, as a tuner studio replacement... if it works out well others.
@@DielectricVideos To further express my understanding, yours works like older 4 cylinder Honda CBs with 2 points 90 degrees apart. Except yours has 2 trigger tabs to make up for cam RPM vs crank.
@@Marc_Wolfe Sounds like a really cool project! I'd love to see a DIY tuner studio GUI, rather than my (quite limited) 10x10 AFR table in the Arduino code. My previous board used a single Nano to control 1 HEI coil (plus fuel control), and used the original cap and rotor to distribute. It worked OK, and the HEI was a big improvement over the old high-impedance coil system. However, timing jitter could get as high as 3-5 degrees at 4000+ RPM, so I decided to split up the load to 2 MCUs. Looking back now, I think there is a lot of room for code optimization to speed things up and go back to a single board. That being said, ATMega328p boards are fairly easy to get, so I decided to leave it as is for now. An ATMega2560 wouldn't have helped much, as they are also 16MHz AVR chips. Bottleneck is more on CPU cycles rather than memory or GPIO pins. I'm thinking at some point of designing an ESP32-based unit with a small LAN network and web interface to show on a dashboard tablet (similar to Tesla Model 3 display). A single ESP32 should be plenty fast to do everything, and since it's dual-core, I could reserve an entire core for the HTTP server and the TCP/IP stack.
@@Marc_Wolfe Yes, correct. The 2 optical pickups are set 90 degrees apart, so one optical sensor controls cylinders 1 and 3, and the other controls cylinders 4 and 2 (for a 1-4-3-2 firing order). The trigger tabs are 180 degrees apart, and are indexed to the distributor shaft. Thus, each optical pickup gets triggered twice per distributor revolution, or once per crankshaft revolution. Timing is set by adjusting the rotation of the distributor, as well as by offsets in the program code. Also, timing adjustments based on RPM and MAP sensor value can also be set in the program if desired (to emulate centrifugal advance and vacuum advance)
Link to the GitHub: github.com/JohnPattersonConsulting/DuneBuggyEFI/tree/main/4-Coil_ECM
Excellent work, thanks for sharing all of this. Thinking about maybe using as a basis for a Corvair engine upgrade. The dune buggy looks great!
There are some other sites that promote EFI on the Aircooled VW and I have ask questions about an install. But they never returned an answer or they just don't care. You explained very well. Thank You. PS You need to become a Technical Writer if you don't have a profession.
I would way much more want to see one of your EFI's on something I build than some slick shiny thing. I want to see a clear box with the circuit boards showing.
Thank you for taking the time to fully explain all aspects of this project. The improved performance, efficiency, and reliability that the optical 4 coil ignition and EFI adds to the bug would most definitely make it a more pleasant and dependable vehicle. I like all your videos and that you go in depth so others can emulate and build what you build; but I especially like your VW videos.
wow I wish i knew about this before bugorama '22, i would have loved to see it in person!
You did a ton of research! Thank you for spreading the wealth!
You know...I've been sitting on this Speeduino for my 4-cyl CJ-7, but this is exactly what I've been thinking of. Time to make a Git pull request. I'm in N.Phoenix if you want to come help!
It was probably 20 years ago the first time I took my first two kids to the Phoenix Bug-O-Rama. Brings back memories. This is some very cool work you've done here. You have obviously done a lot of research to get to this point. One question which is far from a criticism. Is there a reason you didn't use a crank trigger and a pulley with a gap? The thing I like about your design is that it would be far simpler to retrofit a Type 3 motor, where it's not so simple to just put on some different pulley.
So glad to hear you like it! The Bug-O-Rama has been a long tradition in my family as well!
Most of the crank trigger systems I encountered used a tooth wheel, and I was concerned about interference from the ignition causing over/under counting of the teeth with subsequent loss of positional accuracy within the rotation. The distributor trigger seemed less prone to potentially dangerous timing errors, so I opted for it in this design.
@@DielectricVideos Very nice work and congratulations. I’m not sure if you are familiar with Type 3 motors, but the previously available consumer products provide the crank trigger method. So, for an “out of the box” solution, they really aren’t a good option for a T3 motor.
For those of us willing and able to customize things to make it work might as well save lots of money and do something like this!
Great work and detail as always John thanks for sharing your car has came a long ways
On a side note the rev limiter function would act more effectively if you included a hysteresis for the rpm range 😁
Great idea!
With distributor optical blinds designed as a full half circle sector and two optical sensors placed on 90 degree angle (as yours) you actually can produce four position signal 00,01,10,11. The change of signals will happen on every 90 degree by distributor shaft rotation or 180 degree by crank shaft rotation . Instead of optical sensors, better use Hall sensors specially designed for automobile applications which include the magnet . You can find such a sensors as a replacement of contacts in some models of VW golf , Passat second generation.
Using individual coils but driving them 2 by 2 in parallel doesn’t make much sense since you double the primary current pulled from the alternator and it isn’t free :) , double the number of sparks and shorten the spark plugs life by a half , probably the temperature of the coils as well ! The advantages of your variant of waste spark system in comparison with waste spark 2 coils( for 4 cylinders engine ) systems will be the lower electrical noise and the uniform and proper polarity of high voltage secondary pulses. In 2 coils waste spark system the polarity is proper ( (-) on central electrode )for the one of the spark plugs in the pair and in reverse on the other spark plug . When the high voltage polarity is reversed the break down voltage of the spark gap increase on about 25-30% . Also with 2 coils waste spark system you must use only double platinum/ iridium-platinum electrodes plugs because otherwise the ground electrode of the reversed high voltage pulse spark plug erodes extremely fast . The advantage of classic 2 coils waste spark system will consume twice lower current than in your variant. So better drive the individual coils and the injectors sequentially , not by pairs .
Fantastic ideas to try, and good point about the spark plugs! Thank you!
@@DielectricVideos you are welcome, you have done fantastic job !
excellent video, if you allow me the advice, for the injectors you can use the ic fds2407, each package works for 2 ijectors, and for the coils you can use the IGBT V3040D, they are used for automotive use
For wasted spark systems, you would usually use double ended coils.
This is the greatest video I have ever seen my dear friend, I congratulate you very much on this great success
Superb work 👍👍👍👍👍
Great project, with grate documentation. looking at the schematics I see you are using the unregulated battery voltage driving the injector, but a regulated 12v to drive the ignition coils. How come?
I would imagine that the injector dwell time would be influenced by the voltage level and thereby not consistent.
The main reason I drive the injectors directly from 12V is that they draw too much current for the boost converter on average. Each injector can draw as much as 2 amps, which can be on for up to 100% duty cycle. Although the peak current in the ignition coils is higher (around 8A each), it has low enough dwell time that the average current is much lower.
Ideally I would love to boost-regulate the injector voltage as well, as this would make for faster and more consistent cranking starts.
Good job men very very good work
sigh. looks like its now suffering the "bloat" syndrome...
ha ha, mines still smaller! may not have all the features, but yeah... what do you expect using a pic12f683? 8 pins! and so far, still only using two. crank signal and injector...
a work in progress, now i know my interrupts are working, that the engine runs, getting an idea of how to code in assembly, the next step is to add the MAP sensor...
then comes the fun part of trying to tune it... deal with teh data i get with teh MAP and ADC... determine which stroke its on... break the max injection pulse into two parts once injection time exceeds the timefraame available at high RPM with high VE. (including boost eventually...)
i can see the sense in arduino, but after going through the firmware for speeduino, i couldnt figure out how to implement my method of obtaining the crank signal. C doesnt make sense to me, and when i see "void", i simply ignore anything coming after it, lol.
"bloat". i dont want canbus or obdii or knock sensors... my whole intention was to get it as bare bones basic as possible.
with the PIC, it was simplicity itself. other than the coding and dealing with microchip and their apparent intention to make everything as difficult as possible...
back to back (antiparallel?) optocouplers driving an eccles jordan flip flop, and simply measure the length of pulse. VRsensors produce a positive AND a negative signal... and the 12f683 has a gated timer. simple!
everything about the pic12f683 makes it seem that it was almost intended for this...
Did you use a oxygen sesnor or is this a open loop system?
It's currently set up as an open-loop system, but with suitable software changes, one of the analog inputs could be used as an oxygen sensor connection and closed-loop AFR control could be performed.
@@DielectricVideos This is a awesome project brother. Appriciate your effort. I'm hoping to make a DIY EFI system for a motorcycle. So how can I use a oxygen sensor readings to compensate with AFR values? Do I have to use PID for it?
@@garage9732 Typically narrowband oxygen sensors operate in a bang-bang control loop where the sensor is allowed to drift from rich to lean. This is because the voltage output of the sensor is very sensitive to oxygen concentration, and switches from high to low in a very small concentration range. The program would need to determine when the engine should go closed-loop (typically during cruising or idle when AFR might be set close to 14.7), and when to run open-loop (hard acceleration or coasting).
If you use a wideband oxygen sensor, then you can keep it closed-loop over a wider range of AFR values, and a PID control loop might be required for stability. A PI may be sufficient as well, as it doesn't need to be a particularly fast control algorithm. Some checks for reasonableness should also be in place (for example, keep fuel trims bounded to some finite values, like +/-10%).
amazing!!! I want it, would you be interested in building the pcb's for me
can I use 2 proximity sensors to get distributor signal ????? My engine is A12A & vehicle is datsun HB310
Most likely yes, although you may have to adjust the initial timing settings to compensate for any phase shift caused by the angular placement of the sensors.
I will try , thankyou @@DielectricVideos
Why no o2 sensor?
How do you set for a rich/lean condition?
BTW Coming along nicely!
The AFR values can be manually trimmed in each RPM/MAP range within the AFR table, so once they are set the mixture stays mostly consistent. At least, it's been consistent enough to pass emissions testing. An AFR sensor could be installed for more sensitive applications, using one of the auxiliary analog inputs.
@@DielectricVideos Cool.
Mr John, What's the direct injector's working voltage? still 12V or using boost circuit ?
Good day John . I did down load th Gerber file , but I dont have success in downloading the schematics as well as the pcb file . I must say I it is a nice project. I want to use it on a 1982 Opel kadett 1300 voayge.
So the .brd (board) and .sch (schematic) files don't open? What version of Eagle are you using?
I'm using version 7.3.0 the notebook I'm using is a 32bit and not a 64bit . Regards.
@@wimpiehattingh7162 These files were saved in version 9.2.2, so you may need a version at least as new as this in order to open them
Thank you I will download a newer version. Keep well.
Hi, great video, very interesting. I have a Type 4 engine so have 2 carbs, inlet manifolds. I the on the board there is a aux mosfet can this be configured to run an injector? and can one of the other analogue inputs run a map sensors? The idea being having 2 independent fuel injectors/ throttle bodies, one for each side?.
I don't know if you covered it elsewhere, but how did you handle acceleration enrichment with such few inputs?
When the fuel delivery values are calculated, there's an additional term that adds extra fuel proportionally to the rate of change of the MAP signal, so if the throttle is quickly opened, and the MAP goes up rapidly, more fuel is added for a brief period. The rate-of-change proportion can be adjusted.
I have, however, found that this isn't really needed when there is a long intake manifold between the injectors and the valves, as some fuel tends to condense in the manifold during cruising, and when the throttle is quickly pulled in, there's already some extra fuel available. I usually keep the rate-of-change term at or close to zero.
Good stuff! Tell me does this system have the ability to program a custom ignition advance curve?
I have options in the program to apply positive or negative advance in response to engine speed and manifold vacuum, but currently these are just fixed multiplier values. You could probably write a function to calculate ignition advance according to your own custom curve equation, and call the function when calculating delay time for the ignition output.
excelente video, when will you make a video explaining the code?
Do you have a 3-D printer or are you sending those out to be made and if so who are you using?
I have a 3D printer that can print PLA and ABS; however, I had the rotor printed at Xometry in polycarbonate. I then spray painted it myself for IR opacity.
@@DielectricVideos thanks, you've done a great job.
Good day I'm Wimpie
Im going to ask a stupit question.
How do i download the schematic and pcb file from github to use in Express pcb. Is there a way to convert a Gerber file back to a pcb file to be able to to print it on a printer?
Thank you
Regards.
It looks like ExpressPCB can import Eagle footprints, but not entire schematics. If you are a student, you should be able to download Autodesk Eagle for free. I also believe KiCAD can import Eagle files, if you are looking for a free alternative.
@@DielectricVideos thank you will install eagle .Regards have a great day
good job 👍
can you share on your github the stl for distributor caps ?
thanks
Yes! I just uploaded the CAD files (SLDPRT, STEP, and STL) for the distributor cap cover. The original 009 cap is still used, but this covers the top of it for aesthetics.
The rotor design files can be found in the directory one level above the one linked below.
github.com/JohnPattersonConsulting/DuneBuggyEFI/tree/main/4-Coil_ECM/Distributor%20Cover%20Cap
@@DielectricVideos perfect
Thanks
@@DielectricVideos Hi ;)
I did find information about your Electronic CAD
I use EasyEDA and Kicad but I can't open your file like Optical_Spark_V2.0.sch
I need your help 😀
@@stdcbaleine I believe KiCAD can import Eagle schematic files. Maybe see if there's an import option?
@@DielectricVideos EasyEDA can import eagle Files ;)
I never use youtube for message but can you give me a contact to message you in private ?
Did you 3D print the Throttle Bodies?
The throttle body is from the lower half of an old 2-barrel Zenith carburetor, and I made the injector mounts from some galvanized pipe and a set of weld-in injector bungs.
Coil on plug with cam sensor... and it's fucking wasted spark..... k.
It's using a symmetric 2-sensor optical pickup on the distributor, so it actually does have to be wasted spark. If it had 4 sensors or a cam/crank position sensor as you said, then it would be possible to fire on ignition strokes only. Wasted spark works really well, though, as the engine is always timed to fire before top dead center, so the wasted spark always fires safely into exhaust and never into fresh mixture.
@@DielectricVideos Know what else works well? A distributor. Snarkiness aside, I do wonder why you used 2 Arduinos. Was one not quite capable enough? Was switching to a mega 2560 (or similar) just more effort. I plan on digging through your code. Recently had the idea of trying a purely look-up-table based approach, also with just cam/crank sensor + MAP. MAP through a potetiometer for quick adjustments and choke, adjusting table for long term adjustments. Also considering purely look-up-table spark timing by simply counting clock pulses... and torque converter lock up, and a basic binary counter approach for paddle shifters. Nothing would ever reference real time, just program it assuming the 16 MHz clock, will be 16 MHz. I'd start with just fuel; would be my 1st scratch-built programming. Leave the GUI re-turn up to other people who know how to prepackage some sort of word processor style thing, as a tuner studio replacement... if it works out well others.
@@DielectricVideos To further express my understanding, yours works like older 4 cylinder Honda CBs with 2 points 90 degrees apart. Except yours has 2 trigger tabs to make up for cam RPM vs crank.
@@Marc_Wolfe Sounds like a really cool project! I'd love to see a DIY tuner studio GUI, rather than my (quite limited) 10x10 AFR table in the Arduino code.
My previous board used a single Nano to control 1 HEI coil (plus fuel control), and used the original cap and rotor to distribute. It worked OK, and the HEI was a big improvement over the old high-impedance coil system. However, timing jitter could get as high as 3-5 degrees at 4000+ RPM, so I decided to split up the load to 2 MCUs.
Looking back now, I think there is a lot of room for code optimization to speed things up and go back to a single board. That being said, ATMega328p boards are fairly easy to get, so I decided to leave it as is for now.
An ATMega2560 wouldn't have helped much, as they are also 16MHz AVR chips. Bottleneck is more on CPU cycles rather than memory or GPIO pins. I'm thinking at some point of designing an ESP32-based unit with a small LAN network and web interface to show on a dashboard tablet (similar to Tesla Model 3 display). A single ESP32 should be plenty fast to do everything, and since it's dual-core, I could reserve an entire core for the HTTP server and the TCP/IP stack.
@@Marc_Wolfe Yes, correct. The 2 optical pickups are set 90 degrees apart, so one optical sensor controls cylinders 1 and 3, and the other controls cylinders 4 and 2 (for a 1-4-3-2 firing order). The trigger tabs are 180 degrees apart, and are indexed to the distributor shaft. Thus, each optical pickup gets triggered twice per distributor revolution, or once per crankshaft revolution.
Timing is set by adjusting the rotation of the distributor, as well as by offsets in the program code. Also, timing adjustments based on RPM and MAP sensor value can also be set in the program if desired (to emulate centrifugal advance and vacuum advance)