John_Heard wrote:Don't you need a way to adjust the sensor position for timing adjustments?
MAJOR DISCLAIMER: I don't have access to software code inside the Holley ECU - the methods and processes I speak to below are what I expect the Holley software designers have utilized. One thing I've learned from doing IT for 35 years is this: There are only so many ways to skin a cat. The approach I've described below is how I've done similar things - not ignition management but I've designed and coded many similar solutions doing time slicing to determine transaction rates over time, etc. I would be extremely surprised if my assumptions here are very far off the mark.
There, now I feel better. I didn't want to come across like I had insider knowledge of internal Holley ECU code.
Addendum: This is the third time I've edited this content - hopefully my description makes better sense this time around. My brain must have been in orbit the last two times I tried this.
Okay, I promised a more technical commentary on this setup, so here goes. Bear with me if my technical layout is not exactly correct. I’ve had to infer and assume quite a lot in arriving where I am.
For the purposes of discussion, let’s use my build as an example. All degrees referenced below are crankshaft degrees.
My build uses a Holley Dominator ECU and a distributor-less ignition setup with individual coil packs. I use Cam Sync and Crank Trigger mechanisms to anchor and bootstrap ignition event timing. All timing events are managed by the Holley ECU, including the ability to set and change ignition timing events during execution, even down to the level of changing timing for individual cylinders on the fly. All of this is controlled by the ECU at run time. All of the Best Practice settings below are for an 8 cylinder build. 4, 6, 10 & 12 cylinder builds have their own separate recommended settings.
After the Cam Sync and Crank Triggers are set in place to tell the ECU when and where to initiate management of ignition events the physical positions of these sensor points will never change. All future timing settings are done via the ECU software config screens.
Because of the physical placement of my trigger wheel magnets and Cam Sync / Crank Trigger sensors, we know the:
• One Cam Sync event occurs at 195°BTDC for Cylinder #1 (Holley Best Practice recommendation)
• Crank Trigger events occur at 60°BTDC for each Cylinder (aka 'IRA', see below) (Holley Best Practice recommendation)
• Cam Sync events occur 1 time for each full cam rotation (two full crank rotations).
• Crank Trigger events occur every 90 degrees of crank rotation.
Among other settings within the ECU, we set the following:
• Engine Firing Order to 18736542 in the ECU configuration screen (yep, I'm using a 4/7 swap)
• (IRA) Ignition Reference Angle at 60° in the ECU configuration screen (this is the fixed Crank Trigger degrees BTDC)
• Ignition Timing at 34° in the ECU configuration screen (this is the degrees BTDC when I want the plug to fire)
There are many other settings within the ECU, but these are the ones which apply to our overview here.
Remember that the ECU is just a computer and is running software which does lots of different things at the same time. My overview below is a very simplified assumption of how (I surmise) the box does what it does. My first assumption is that we need to bootstrap and sync the ECU with the #1 Cylinder crank trigger event.
The following is what (I surmise) happens within the ECU at initial startup and afterwards:
1. The starter motor spins the crank
2. The ECU begins looking for the Cam Sync Trigger event
2. The Cam Sync Trigger event is seen (we're at 195° BTDC for #1)
3. The ECU begins looking for Crank Trigger events (this begins the ignition bootstrap sequence)
3. The 1st Crank Trigger event after Cam Sync is seen (we're now at 150° BTDC for #1)
4 . The ECU saves the current system clock time
5. The 2nd Crank Trigger event after Cam Sync is seen (we're now at 60° BTDC for #1 - aka 'IRA')
6. The ECU subtracts saved clock time from current clock time to get total elapsed milliseconds
7. The ECU divides elapsed milliseconds by 90 (degrees) to determine milliseconds per crank degree
8. We're sitting at IRA (60° BTDC for #1). Ignition Timing is defined as 34° BTDC.
9. The ECU counts down the equivalent number of milliseconds to allow for 26 degrees of crank rotation
10. The crank should now be at 34° BTDC. The ECU fires the coil pack for #1 cylinder
11. The ECU repeats the mSecs-per-crank-degree calculation for each Crank Trigger event, firing cylinder coils in firing order sequence
This repetitive recalculation of milliseconds-per-crank-degree allows the ECU to adjust for changes in engine RPM in real time.
As I stated, I surmise this is how the Holley ECU manages ignition timing events. The derived IRA window (in my case, the 60 degrees between IRA and TDC) is where all ignition events are performed. This magic is what allows you to vary spark timing on a per-cylinder basis, *each time* a cylinder plug fires, based on other things which are monitored or taking place at the same time. Sequential injection events occur at different times within each individual cylinders 4-stroke cycle but they still occur based on the Crank Trigger IRA and the derived TDC for each cylinder.
John Heard: This is what took me so long to understand, because I came into this with the same question you posed. After having seen how folks deploy conventional crank-triggers by lock-phasing their distributors, my question too was “How do you change ignition timing with this new EFI/ECU box ?”. The magic is the fact that there’s a very fast CPU watching events and managing all sorts of stuff. You provide the ECU with routing instructions (firing sequence) and event anchor points (Cam Sync & Crank Trigger IRA) and the onboard CPU & software takes care of the rest. All logging, I/O collection and distribution, all changes to timing or injection events, triggering multiple stages of nitrous or water/methanol injection, controlling electronic transmissions, dual drive-by-wire throttle assemblies and monitoring and reporting on engine state metrics (Inlet Air Temp, Coolant Temp, Throttle Position, Idle Air Control, Engine RPM, Fuel & Oil Pressure, AFR states, etc., etc., etc.) all are done on a continuous basis and used at your discretion to report on and control lots of things during operation.
If you’re a really geeky systems guy like me, this is beauty
And note: The above is for a simple LS2 style build. The Holley ECU can accommodate lots and lots of variants in how you put your stuff together. My approach is intended to emulate a factory LS2 build and if I don’t screw things up, it should be pretty clean. I'm also going to run 16 injectors in 2 banks of 8 injectors each, and someday perhaps, simultaneously drive trim injectors down at the individual cylinder intake runners. Depends on how geeky I want to get.
Hopefully my description is pretty close to how the Holley system does its thing. As a long time software developer, my description above is how I would do this. I welcome any critiques or corrections from folks who know the Holley system better than I do :)

(Edited to add the major disclaimer at the top, correct some assumptions and comments about injection events as related to the IRA 'window', and to rewrite the ignition bootstrap method descriptions).