300ZX Mass Air Flow Sensor Upgrade:

Upgrading a MAF is not super complicated. If you read this page and understand it, you should have all the information you need to install almost any AFM/MAF/MAS that works on a 0-5.12+V signal on your car.

Be aware that the "resistor mod is used to remove a voltage offset used by the stock ECU/MAF combination. Stinky has measured this voltage offset to be almost exactly 2.0vdc. That means the voltage signal from the MAF is dropped exactly 2.0volts by the time the ECU sees it. This is the reason for the resistor mod us for MAF's that use a different voltage curve and do not require the voltage drop to stay within the ECU's maximum at higher airflow. I believe "Bernard" put it best in this quote:

The stock maf has a range of 2.2ish at idle to over 6 volts at high flow. the a/d converter in the ecu cannot read anything above 5.12vdc. The resistors, combined with an opamp bring the voltage back into a range the a/d can read. (the ecu uses 0 to 5.12vdc from the maf signal after the resistors anyway) Removing them allows a lower voltage output from the maf without sending the ecu into limp mode. The z32 maf has a range of 1.2ish at idle and 5.12vdc at high flow. After you've removed the resistors the ecu is still happy with the lower voltage it is seeing and tuning can commence.

1. Z32 MAF:

The Z32 MAF is a hot pick because it can meter to ~500HP, has known maps, requires no wiring changes and is reasonably inexpensive.

The hardware changes required to run a different MAF are simple, and as you have probably already socked your ECU, disconnecting these resistors should be cake (the two parallel ones and r201, I removed R201 and just cut the other two):

With this you will also be disabling limp-back mode. You can ensure that limp mode is still going to work by installing a rheostat/potentiometer/other resistors where the two parallel resistors were located to allow the proper resistance for limp-back mode with the new AFM.

2. Modification of the Z31 MAF:

The Z31 and Z32 MAFís are very similar. The primary difference is that the Z32 MAF uses a lower voltage range on the same 0-5.12V scale read by the ECU. You can ďre-scaleĒ your Z31 MAF to meter just as much if not more air than a Z32 MAF by one of the following methods:

3. Any other MAF or air metering device:

As I said before, any other MAF which uses a 0-5+V signal can be adapted for use on a Nissan ECU. The problem, again, is finding the right VQ map, TP scales and K value to use. There are also MAP adaptation systems which effectively convert your system to speed-density by feeding the MAF-based ECU MAP sensor data as a MAF signal; fully tunable for voltage curve and whatnot. While this seems like a great project, these devices are beyond the scope of this page.

Whenever you make a change to the fuel injectors or the AFM on the stock ECU there are a number of changes to the ECU programming that will need to be made as well. If you donít make these changes itís likely the car will run like butt or not at all. Any future tuning of the ECU programming also relies on these changes.

Important things to consider:

K Value

The K value is one of the most important values in the ECU. It is the variable used by the ECU to calculate the theoretical pulse width needed to get an AFR of 14:7 based on the AFM and rpm input. This calculated theoretical pulse-width (TP) is also used as a load reference for accessing the fuel and timing map columns.

When you make hardware changes, the ECU has no way to know that we have installed different injectors and/or a AFM and simply operates as it normally would. This of course throws off the calculation and requires an updated K value to account for the hardware changes and the new relationship between the AFM and injectors. By changing the K value we are also changing the calculated TP. This in turn alters other functions!


The theoretical total pulse-width minimum setting is the shortest amount of time the ECU will allow the injectors to open while the engine is running. Even if the ECU calculates a lower TP, the actual pulse width will never go below these TTP min values (the same applies for the TTP Max, except in the other direction). This is mostly a concern when you change the injector size. For example if you install larger injectors they will require a smaller K and therefore a smaller TP because they are flowing more fuel in the same amount of time. If we donít lower the TTP min the injector will not be allowed to open for a shorter pulse width and you will run very rich (or not at all) at idle.

TP scales

The TP scales represent the load axis of the fuel and ignition maps. For example: At idle the ECU may calculate a TP of 8 and therefore uses the column on the map where the TP scale is set to 8. High boost might use the column labeled 100. If you double your injector size and cut your K in half then your calculated tp would be half of what it was before. This would result is the ECU ends up accessing the maps in the wrong areas! Obviously your timing and fuel would be thrown off, so you need to recalculate the TP scales based on the changes you made to the K value. If you cut the K in half, then cut the TP scales in half.

Injector Void

This is the amount of time the ECU adds to the TP to allow for the opening of the injectorís pintle. Essentially it is a ďlagĒ time calculation. Some injectors (usually larger ones) require more time to fully open than others. This doesnít have a huge effect but it will help you get the set AFRís in the fuel maps to better match the actual AFRís, especially when the TP is lower to begin with (low load and rpm situations).

Finding the new K value:

Theoretically it might be possible to calculate a new K value based on the changes in flow, if we knew the exact flow characteristics of the AFM and injectors we were using. As it is a calculation is probably not the safest way to find a new K. To find a reliable K value you need access to a wideband unit that preferably logs rpm and/or boost. The process is much easier if you have a ROMulator so changes can be made on the fly. This process relies on a lot of trial and error, so the faster you can gather information and make educated changes, the better.

In order to find a K that is somewhat accurate we need a way to know that the values the ECU is calculating are roughly what are actually resulting in the engine. If the actual AFRís and the AFRís on the fuel map match, itís reasonably safe to assume that K is at least close to where it needs to be. Now we need to figure out what parts of the map the ECU is accessing, and when.

These first steps are to simplify things a bit.

This takes two big things out of the fuel equation and makes it much easier to see the changes we make. The next step is to guess a new K that we want to start off with. If you use larger injectors you will want a smaller K. A larger AFM will cause the need for a larger K. If you do both a larger AFM and larger injectors, you might not need to change the K all that much. In any case, a larger K is safer as itís better to error on the side of safety.

Once you have made the appropriate changes you can go ahead and try to start the car while keeping a very close eye on the wideband. Try bringing the revs up slowly and carefully to see exactly what AFR is generated. With any luck you are at a reasonable AFR that isnít too lean or too rich, and the car runs. Note whether the AFR is richer or leaner than the 12.5 we have set in the maps and try a new K. With a little trial and error you should be able to get a K value that gets the actual AFRs pretty close to 12.5. Before you drive around to much you want to use your new K and recalculate your tp scales. If you donít you can throw your timing way off and have big problems. Recalculate the scales by calculating the change you made to the K. For example if you reduce the K by 1/3 from stock you will want to reduce the scale values by 1/3 as well.

Once you have the scales recalculated and in place you can start doing some road testing. Be very careful to take it easy. Slowly drive around while you are logging your AFRs. Keep in mind that your timing could be way off and your AFRs may not be safe. If you hear any signs of detonation stop playing and check the logs. The goal of this whole exercise is to get the actual AFRs that you are logging to get as close to 12.5 at all rpms/boost. For now the lower rpm areas can be somewhat ignored. Try to get the higher rpm/boost levels about right. Once you feel they are as close as they can get you can start messing with the ttp min and injector void.

You might want to set the ttp min very low to begin with. Maybe even 0. At this point play wit the injector void to see if you can get the low rpm/load areas any closer to 12.5. You shouldnít have to change it too much but its something worth trying.

Next if the car idles too lean try raising the ttp min to get the AFRS at a reasonable level.

With continual tweaking you should be able to get the actual AFRs very close to 12.5.

Column/airflow Testing

When it comes time to tune the timing and fuel maps its nice to know where we need to make changes. In other words:

ďWhat cell on the fuel or timing map needs to be changed?Ē

If we want to add timing at 3000 rpm and 10 PSI, we need to know which cell on the timing map is responsible for that rpm/load area. The cell will be located at the intersection of the 3000rpm row and the 10 PSI column. Finding the 3000rpm row is easy because the rpm scales directly match the actual rpm. Finding the load column for 10 PSI is a completely different story.

The load value that the ecu uses for the load columns does not directly match up to any boost or vac measurement any of us are aware of. Itís calculated based on the AFM and rpm inputs using a calculation we donít really know.

So how do we find out what load the ECU has calculated so we can use the correct load column to find the cell itís using?

In some cases we have a tool called map-tracing. Map-tracing shows us the cell being accessed on the timing or fuel maps either by watching how the ECU accesses the memory, or by otherwise retrieving the rpm and calculated load value from the ECU. This is a great tool because we can watch the map-trace at any condition and know what cells are being used and therefore exactly where the values are that need to be changed. Unfortunately, there is no map-tracing available for the Z31 ECU at this moment. It is currently in the works.

ďSo since we donít have map-tracing, how can we find the load column being used so we can find the cell we need to change?Ē

Fortunately it seems that for the most part the load columns more or less follow boost with only minor variation due to rpm. If we can create a chart that tells us at what boost and rpm each column takes effect we could then use that chart to make changes to our maps. How do we go about making such a chart? Column testing.

To do a column test you will need a wideband logger that logs boost and preferably rpm. Because timing is tough to monitor, itís easier for us to monitor AFRís. What we can do is set one column in the fuel map as rich as possible and then log a decent amount of runs through the boost we think the column is at. As the ECU travels through the column the AFRs should go from normal, to very rich (because the ecu is using the rich column), and then back to normal. When looking at the graphs of our logs we should be able to notice a pattern of rich AFRís around the boost/RPM that the rich column was in effect. By doing this over for each column we can effectively create a chart that shows at what rpm and boost each column takes effect. Keep in mind the more data you log the more accurate the chart should be. Once we have the chart we can use it when we go back through out logs to manual match the boost and rpm and find where the fuel map was being accessed.

This method is far from ideal but based on what is currently available itís the best we can hope to do.

Another use for column tests is finding the minimum and maximum boost levels our fuel and timing maps can cover.† For example, the stock maps may only go to 12 PSI for use with the stock MAF. In other words the last column in the fuel or timing map takes effect at 12 PSI. If we go past 12 PSI, the ECU uses the last column of values it has and makes no fuel or timing changes based on airflow, instead it only proceeds down the very last column according to RPM. While you can still tune for a given boost pressure, you are greatly limited in resolution by being confined to one column. If we plan on running something like 15 PSI on a regular basis, it would be greatly to our advantage to raise the load value on the later columns in order to allow us to control the timing and fuel from 12 PSI to 15 PSI. By doing column tests and changing the TP scales appropriately, we can find the new TP for whatever boost level we want to map to (within the MAFís metering ability).

Back to the ROMulator page.