Jump to content

Web app – injector scaling


Recommended Posts

Hi everyone,

I have thrown together a simple web application that might be useful for people working on injector scaling.

As has been discussed many times on this forum, changing the low slope / breakpoint / deadtime offset affects the amount of fuel delivered at higher pulse widths. This app provides you with the ability to adjust these values with a slider to help figure out the optimal injector scaling (or at least as close to optimal as possible).

The site is currently hosted at https://injectorscaling.fly.dev/

Fill in the information in the attached spreadsheet and upload it to the site to play around. Unfortunately there is a 30 second time out with fly.io (that I can’t change), so you might need to refresh your page every so often.



The top plot shows you a comparison of the original injector settings (black line) and the new settings (red line) – based on the sliders of the left. The dashed horizontal lines show the breakpoint (change between low and high slopes). The vertical dashed lines show the injector minimum pulse width (which isn’t really used in this app).

The second plot shows what (approximate) effects these changes will have on the amount of delivered fuel. I’m not quite happy with this part, so I’m happy to have suggestions/comments. However, you can think of this like so: the PCM asks for a certain amount of fuel and uses the first plot like a look up table (draw a line in from the y-axis until you hit the black line, then draw a line down to the x-axis to see the pulse width required). To make this plot, I then draw a line up from that pulse width until we hit the red line, then draw a line across to the y-axis. This would be the amount of fuel that is delivered (assuming all of the new values are actually correct). The difference in expected vs delivered is converted to a pseudo long-term fuel trim and shown on the graph. Note: this could also be shown for pulse width instead of fuel on the x-axis.

There is another plot below those two that show the injector deadtime vs battery voltage. I allow you to change the battery voltage on the slider, but it doesn’t qualitatively change much in the first two graphs. Rather than change all the values of this, I have applied a simple “offset” that just adds or subtracts a fixed time to the injector deadtime. You can see that it raises or lowers the entire curve and can make a large difference in the first two plots.

This is just a first prototype. I was hoping to have more features before releasing it, but I haven’t made much progress due to time constraints. I have another app for viewing the spark advance table under different engine conditions e.g. sliders to change ECT, ACT, Lambda, catalytic converter temp etc. The excel file has 18 tabs (not all of which are needed for all situations), so it isn’t the friendliest thing to use. I’ll post when this site is up.

  • Like 3
  • Thanks 1
Link to comment
Share on other sites

oh I love a good spreadsheet. Looking forward to the spark one. Question on that, are you also looking at the cold start adders as well? FG auF0210, 1 & 2.


Nice job on the app. Have got new injectors coming so your timing couldn't be better! Legend

Link to comment
Share on other sites

Great work. 

Things that I would love to see. An exaggerated annotated zoom for the low/high slope to make the changes really obvious




Some way to take a histogram like below and annotate it:



Then have your tool auto suggest corrections to the injector slopes. It could be iterative and have filtering (eg avoid transients, bad data rates, high standard deviation etc due to a random extra digit in a speed density table). Then have a big red magic "Fix my injectors" button. People would pay to use that button if it worked well or at least got them in the ball park.

Some example of problems, and things it could potentially fix:

Linear WOT error. Change high slope.

Error around the deadtime/low slope, suggest deadtime/breakpoint/high slope changes to try and attempt to keep the WOT fueling consistent.

Error around the breakpoint only, suggest breakpoint/low/high slope changes to fix the error in this zone only.

Similar to what we were doing manually in this thread. 

Automating this would save tuners thousands of hours, I'm sure people would pay you for this service if its simple to use.

Happy to help provide you anything you need to help get it there. Also if it works well, we would definitely push people to use it.

Link to comment
Share on other sites

Another one. If you could upload a datalog showed the fuel trim errors and you got the following result. It would be immediately obvious that you don't actually have a fuel injector slope problem. But (in this extreme example probably bad data or mechanical failure). But more than like your speed density slope and map is out. This is always a chicken and egg problem.

However if you could somehow determine if the error data is purely a function of injector slopes/breakpoints/offsets you could say. Hey use these settings to fix it. If you had a graph like he one below, you could go "Hey this actually needs a speed density recalculation" to fix your problem. You could then spit out new SD tables instead.


The way to determine if the error is a function of injector slopes is fairly easy, you just look at the standard deviation on the scatter plot of the LTFT. if its wild and all over the place, you know the LTFT error is actually related to a 4th or 5th variable (probably map pressure and cam angle) in which case it could come up with a solution for retuning the map/map offset tables and ALSO the injector slopes. You could then plot the problem cells (with a high SD against) map pressure and cam angle to validate this as well. 

This is something I tried to do here, but once again ran out of time. The main issue is the whole thing was quite technical, if you can bundle it up into a simple program where it says "log x,y,z" follow the the following dyno run. Then input the data, you could effectively get factory level fuel trims and steady state open loop lambda all automatically without having to be an engineer to understand what is going on. You can then try and figure out a function for your LTFT error term, ensure its actually a function of what you are trying to optimise then provide a solution.


here was an example where the LTFT error was actually not an injector slope issue (Which I was chasing my tail trying to correct) and was due to map slope offset.


Kudos to actually building a working app. I look forward to seeing updates!

Link to comment
Share on other sites

I love it how Paul at Injector dynamics describes Fords injector characterising method ...


Ford’s method of characterizing fuel injectors is unique, and elegantly simple.

Yes, when the data is spot on.

For us plebs learning GM with a MAF sensor and then a few tweaks to the VE (SD) table with ball park injector data, we can get things dialled in close enough that everything is fine. Even when switching between fuels, so long as the data is close enough just a minor fudge to the stoich table gets you back in the game. 

To bring Pauls comment back in to light, "as elegant and as simple as Fords method is," if you're switching between fuels, and you're miles off after adjusting stoich, then you have a full engineering problem to deal with. 

Almost makes the $1,000 for a China injector test bench seem good value for money.  

Link to comment
Share on other sites

  • 11 months later...
  • 2 months later...

Sorry, everyone. I've been a bit all over the place. Not sure I even know what a car is anymore 😒

Here is a prototype excel workbook (it has macros/VBA, so you'll need to allow them).

The first tab shows the calculated final spark, plus the BLK and MBT tables (after adjustment). You have some sliders on the right where you can change the ECT, Lambda, and IAT.
There is a colour code picker, so you can choose to colour code the table by the spark source, highest to lowest values etc.
If you want different colours, change the background colour of the Colour Picker cells and cycle the selector.

The second tab shows how you might paste in a log output and see how changing the spark tables affects the calculated spark (the example data was taken from cruise while logging pretty much everything i.e. it's not great).
The cool thing is that you could change your tables and see exactly where the spark "should" change.
Just be aware of the Spark Source (I've included a table for what the numbers mean). Spark sources other than 1/2 could be wildly different.

The other tabs are where you can copy in your tables from PCMTEC.
It's not an elegant solution, but it works.

I haven't extensively tested it or verified there aren't stupid mistakes in there (it would be worth knowing whether MBT - ECT adjustment is correct, or if it should be additive...).

It would be worth generating some high quality logged data and seeing what it looks like. Then refine the model or extend to additional tables/modifiers.


  • Like 1
  • Thanks 2
Link to comment
Share on other sites

20 hours ago, Mick said:

Hi Corey Thanks for allowing us access to your work, is there any chance, if it's not too hard, that you could change the injector worksheet so that larger data can be entered into it?

Hi Mick,
I've updated the site so the sliders can go much higher. I've also added another slider which allows you to change the max injector pulse width time on the plots.

  • Like 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Create New...