The ECU Flash memory is divided into to sections; Code, and Map Data.
The code is the software that runs the ECU. The Map Data is hard coded data that is used to determine the ECU operating parameters and adjust them for varying conditions such as gear position, temperature, etc.
The data here is represented graphically.
At this point I have not decoded the software to the point that I can give a detailed analysis of each map. That will come later. But there is still some interesting information that can be gained from them.
It should be noted that usually the way these maps are used is that a value, like a temperature is represented as a single byte value between 0-255. This value along with a pointer to a map are put through a software algorithm and a corrected value is returned. In other words you input a temperature and a map and it returns how much to correct fuel injection for temperature.
Many of these maps are only 16 or 24 bytes but still return a value for an input from 0-255. The software averages the map values to fill in the blanks.
So keep in mind when you look at the raw map data it will looked very ‘stepped’ but the actual values used by the ECU will be somewhere between the ‘steps’
The ECU modifies its behavior depending on which gear the bike is in. There are over a dozen sections of the software where a calculation is performed using map data from one of six different maps depending on which gear the bike is in.
Here are two of those maps.
At this point I haven't gone through the software enough to tell you exactly what these maps are for. The x and y axis could be fuel, rpm, or ?? Eventually I will know exactly what they are for.
The only thing they really show is that the gears are treated differently. They are really just a tease of things to come.
I was reading a thread on anothe site where someone was talking about modifying the water temp signal to the ECU to richen the mixture when they activated their nitrous system.
The nitrous shot adds more oxygen to the combustion and requires more fuel to keep the A/F ratio correct. The ECU runs the bike rich when its cold, like a choking a carb bike, and uses the water temp to determine how much fuel to add.
The water temp signal is a simple resistor to ground that changes resistance with temperature. Their idea was to use a relay to disconnect the temp sensor and substitute a resistor of a known value when they hit the NOS switch. What value resistor should they use?
I went through the software and found the following two maps
The first map confused me at first. I expected to see an increase in fuel when the bike was cold that would rapidly fall off as the bike warmed up. It turned out when I looked at the software closer that the first map corrects for the non-linearity of the temp sensor and makes it linear. The second map is the acutal fuel vs temp map.
After tracing out the internal temp sensor schematic of the ECU and using the map data I came up with a method of selecting the amount of enrichment you want.
1) On the bottom map select how much enrichment you want on the Y axis 0-70 (at this point I still don't know how much actual injector duration that translates to)
2) Go across the bottom map and find the intersection, then down to find the corresponding X axis value
3) Take that value and find it on the y axis of the top map. Go across to the intersection and down to read that x axis value (1-29)
4) Find that value in this table which shows the voltage required and the resistor needed to get it in K ohms
did you find an ignition 'correction' table associated w/this sensor also/yet ? I was of the understanding that it's common for OEMs to retard timing when cold as a means to reduce engine stress/shock and light off the cat earlier ...
retarded timing (for an extend period) 'on the edge' might be a bad idea for this guy.
I created a rudimentary ECU definition of the '02 ZX-12 for the Enginuity Map viewer/editor from Enginuity.org Here is a 3D image from the software.
You can view the map data and in the case of the 3D maps create a rotatable topo map image.
As I go thru the code I will update the definition so that the X and Y axis will show RPM, Throttle Postion, etc and the data will be in actual fuel amounts delivered. Right now it is just the raw data.
[EDIT]
I've seperated and moved the files to the You can find the Viewer Software, Map file, and latest Map definition in the Map Files Download Thread. I seperated them because the map definition file is the only one I will be changing as we go along. No need to re-download the others files.
Boy, you can really see the resonances in the stock system in the fuel map especially. A lovely rising sine curve with larger throttle openings, totally textbook for having an intake, cam timing and exhaust that all are tuned with the same resonance.
The ZX-12R is better behaved with coolant temp adjustments than some bikes out there. Hondas in particular are notorious for going pig rich if you get the coolant sensor much over 205 F. The bike becomes a real bear to ride, and non-responsive to the throttle. I wouldn't be very happy with fooling the ECU with coolant temp changes, looking at the course stair-steps on that map. Not a very accurate and repeatable way to change your mixture... This is why aftermarket companies abandoned that strategy in the motorcycle market a long time ago (the Power Commander II was the main unit using that strategy, and it was replaced some time ago in all markets, AFAIK, with the PC III, which alters injector pulse width).
That Enginuity software is a great piece of freeware. I never noticed the sine curve in the map until you pointed it out. Mainly because I never knew such a thing existed. I think I may have to go online and get a copy of your book. ;)
I glad to know there is someone around here who knows more about the theory and practical application side of this than I do.
Yeah, I think we can learn a lot from each other. :D
I do sell copies of my book outright, signed if people want. :) I usually ask $20 plus shipping; it's a shade more than Amazon.com, but not a huge amount, and I make a bunch more selling them myself (not that I get a whole lot either way!).
If the cams, intake and exhaust are all tuned to make best power at a certain engine speed, you will tend to see the torque curve changing in a sine curve at different engine speeds with the throttle wide open. You're seeing the resonances of the individual parts working together, and like any resonant system, you have a peak and a valley that are harmonics of the tuned frequency. I'm slightly surprised that Kawasaki set the bike up this way; presumably they did it to be able to advertise very high peak bhp numbers, and possibly to push the potential top speed a little for promotional purposes as well. Typically, manufacturers will have the different tuned bit set to different resonant frequencies so that the valley on one part is canceled by peaks on one or more other components; this gives a very smooth torque curve if done right, which means predictable and even throttle response, which makes the bike easier to ride AND more confidence-inspiring, too. They have added flappers in the airbox and valves inside the exhaust system on many newer bikes to allow power to be increased across the board by changing the resonances of the various components, as well as keeping gas velocity high at lower engine speeds and smaller throttle openings. Much like variable length intakes and variable valve timing in cars, it re-tunes the systems for best power over a much larger operating range.
I just downloaded the enginuity software and the maps. Thanks Ridge for making them so easy to look at. It is really cool being able to see exactly what is happening inside the "magic box" on my 12.
Ridge, the AP injector 1 map is confusing to me. I would expect fuel to increase with pressure. You have the x-axis labeled as Inlet Air Pressure (% of max). What exactly does this relate to? MAP sensor voltage? It would make more since to me if the axis said %from max.
I've figured out how to convert the ignition advance map data to actual degrees BTDC
Referring to the Diagram above:
The timing wheel is shown with cylinders 1 and 4 at TDC. You can see that the sensor is mounted 10 degrees off the TDC line. This means that when tab 8 is directly in front of the sensor the crank is at 10 BTDC. Which is the idle timing advance specified in the manual.
In looking at the software I find that actually tab 7 would trigger the Coil timing calculation. It would pull the value from the coil maps shown above and then subtract it from 67.5 degrees. The idle figure, and lowest value shown, in the map is 64. As explained above this is a fraction of 90 degrees, 256 being 1/1 and 64/256 = 1/4 = 22.5 degrees.
Now when tab 7 is in front of the sensor 67.5 degrees in the future is half way between tabs 1 and 8. Of course 67.5 - 22.5 = 45 degrees. 45 degrees after tab 7 is in front of the sensor would be tab 8 in front of the sensor or as stated above 10 BTDC.
So the formula ends up being 12.5 - ((mapvalue / 256) * 90) = degrees BTDC
I'll update the Enginuity definition with that formula and post a new map in degrees BTDC
Ridge, the AP injector 1 map is confusing to me. I would expect fuel to increase with pressure. You have the x-axis labeled as Inlet Air Pressure (% of max). What exactly does this relate to? MAP sensor voltage? It would make more since to me if the axis said %from max.
It confused me too. I looked at it again and the reason the numbers on the x axis start large and end small is because they represent the difference between the ambient pressure, as measured by the Static Air Pressure sensor, and the Inlet Air pressure. I've recalibrated the X axis in cm Hg (centimeters of Mercury)
The values are only valid when the ambient is at standard pressure (75.42cmHg). The variance with change in ambient is only a couple percent however.