The Central Hub for DSM Community and Information

For 1990-1999 Mitsubishi Eclipse, Eagle Talon, Plymouth Laser, and Galant VR-4 Owners. This is where the DSM platform history is documented and archived. Log in to help us in our mission, and to remove most ads from the browsing experience.

How ECU determines air mass flowrate

This site may earn a commission from merchant affiliate links, including eBay, Amazon, and others.

kenamond

DSM Wiseman
3,225
67
Feb 15, 2006
Los Alamos, New Mexico
Could someone kindly point me to a thread/link describing how the 2g ECU obtains intake charge density?

I'm suspicious of my ECU/MAS/??? at this high altitude (8000ft). I've had some timing issues that nobody was able to explain, and I recently wondered if the ECU at this altitude could be more sensitive to bad/dirty sensors or something. But in order to ponder this more, I need to know how it determines mass air flow or charge density. I know that you have absolute pressure, temperature, density, and specific internal energy as possible inputs to an air table (or equation of state in geek/nerd terms) and that you need to know two of them to get one or both of the other two, but that's all book stuff that doesn't help much under the hood. I know that it can get volume flow rate and temperature from the MAS. The volume rate needs to be combined with rpm and density to get air charge density. So you need density, volume flow rate, rpm, temperature, and one additional piece of information: either absolute pressure or specific internal energy. Or maybe I'm missing something.

I could dive into the details of my problem, but I'd rather get to the point at hand unless someone is interested/bored (and I'd just dig up the 5-page thread on my problem for you to read :sneaky:).

Anyway, I hope that atleast explains what I'm looking for. Any guidance would be appreciated.
 
The ecu basically use the MAF reading, Intake Air Temp, and Barometric Pressure.
But it uses other correction factors such as: Fuel Trims, O2 sensor, Cold Startup, etc.
These corrections are more important at lower rpms. And would affect fuel a lot more than timing.

injFactor = 16*totMasComp * injComp/128 * [workFtrim + o2FuelAdj + 2*$80]/512 * iatCompFact/128 * baroFact/128 * openLoopEnr/128 * coldTempEnr/128 * (2*enrWarmup + $80)/128

For the actual calculations see below:
0197 0000 ;*
0198 0000 ;* Airflow calculations dependencies, more details in code
0199 0000 ;* --------------------------------------------------------
0200 0000 ;*
0201 0000 ;* masProc: airflow sensor interrupt, increases [airCntNew0:airCntNew1]
0202 0000 ;* | by airQuantum for every airflow sensor pulse received
0203 0000 ;* |
0204 0000 ;* |
0205 0000 ;* |
0206 0000 ;* |--> [airCntNew0:airCntNew1]: Increased by airQuantum for every airflow sensor pulse
0207 0000 ;* | Reset and used as input to [airCnt0:airCnt1:airCnt2]
0208 0000 ;* | on every cas falling edge, i.e. air is counted twice
0209 0000 ;* | per rotation, once for every cylinder cycle... It can
0210 0000 ;* | therefore be seen as the air count per cylinder.
0211 0000 ;* |
0212 0000 ;* |--> [airCnt0:airCnt1:airCnt2]: Filtered version of 256*[airCntNew0:airCntNew1]
0213 0000 ;* | exponential averaging is used.
0214 0000 ;* |
0215 0000 ;* |
0216 0000 ;* |
0217 0000 ;* |--> mafraw16: 16 bit airflow sensor pulse frequency (mafraw16/10.24)Hz
0218 0000 ;* | | mafraw16 = 8205*[airCnt0:airCnt1]/Tcas
0219 0000 ;* | |
0220 0000 ;* | |
0221 0000 ;* | |--> mafraw: 8 bit airflow sensor pulse frequency (6.25*mafraw)Hz
0222 0000 ;* | mafraw: = mafraw16/64
0223 0000 ;* |
0224 0000 ;* |
0225 0000 ;* |
0226 0000 ;* |--> airVol16: Equals [airCnt0:airCnt1] * masScalar/65536
0227 0000 ;* | |
0228 0000 ;* | |
0229 0000 ;* | |
0230 0000 ;* | |--> airVol : Equals airVol16/2
0231 0000 ;* | |--> airVolT : Equals airVol16/2 * iatCompFact/128
0232 0000 ;* | |--> airVolTB : Equals airVol16/2 * iatCompFact/128 * baroFact/128
0233 0000 ;* | |--> airVolB : Equals airVol16/2 * baroFact/128
0234 0000 ;* |
0235 0000 ;* |
0236 0000 ;* |--> injPw: Injector pulse width in "normal" operation,
0237 0000 ;* injPw = [airCnt0:airCnt1] * injFactor/256 + other corrections
0238 0000 ;*
0239 0000 ;*
0240 0000 ;*
0241 0000 ;* Discussion on MAS compensation factors
0242 0000 ;* ---------------------------------------
0243 0000 ;*
0244 0000 ;* Total airflow sensor compensation is made-up of:
0245 0000 ;*
0246 0000 ;* totMasComp(freq,iat,baro) = masComp + t_masComp(freq) + t_masLin(freq,iat,baro)
0247 0000 ;*
0248 0000 ;* where maxComp is a fixed offset ($64 for 1G and $40 for 2G) and t_masComp and t_masLin
0249 0000 ;* are table values interpolated from frequency, intake air temperature and barometric
0250 0000 ;* pressure. t_masComp(freq) is basically compensation for the airflow sensor charcteristic
0251 0000 ;* curve as a function of frequency (to linearize the number of pulse per sec vs. the volume
0252 0000 ;* of air passing through the sensor) while t_masLin(freq,iat,baro) is a smaller factor
0253 0000 ;* probably compensating for temperature drift (electronic) and airflow characteristic
0254 0000 ;* change as a function of air density???
0255 0000 ;*
0256 0000 ;* Assuming the following:
0257 0000 ;*
0258 0000 ;* -injComp = 100% (for 260cc injectors at 36psi)
0259 0000 ;* -workFtrim = 100%
0260 0000 ;* -o2FuelAdj = 100%
0261 0000 ;* -iatCompFact = 100% (at 25.6degC)
0262 0000 ;* -baroFact = 100% (~1 bar)
0263 0000 ;* -openLoopEnr = 100%
0264 0000 ;* -coldTempEnr = 100%
0265 0000 ;* -enrWarmup = 0%
0266 0000 ;*
0267 0000 ;*
0268 0000 ;* Then the injector pulswidth is calculated by the ECU as (excluding deadtime)
0269 0000 ;*
0270 0000 ;* injPw(usec/cylinder) = numPulsePerCasInterrupts *$9c * totMasComp * 16/256
0271 0000 ;* = numPulsePerCasInterrupts * totMasComp * 9.75
0272 0000 ;*
0273 0000 ;* If we also assume a 14.7 air to fuel ratio, Dair=1.18 air density (g/litre) at 25degC,
0274 0000 ;* Dgas=0.775 fuel density (g/cc) then we would need 23900 usec of injection per
0275 0000 ;* litre of air using the same 260cc at 36psi, working that factor into the equation, we
0276 0000 ;* get
0277 0000 ;*
0278 0000 ;* injPw(usec/cylinder) = numPulsePerCasInterrupts * totMasComp * 9.75
0279 0000 ;* = numPulsePerCasInterrupts * totMasComp/2452 * 2452 * 9.75
0280 0000 ;* = numPulsePerCasInterrupts * totMasComp/2452 * 23900usecOfInjection/litreOfAir
0281 0000 ;*
0282 0000 ;* This means that under the above assumptions, totMasComp/2452 has units of
0283 0000 ;* litreOfAirPerAirflowSensorPulse.
0284 0000 ;*
0285 0000 ;* The factor 2452 is similar to the one provided by J. Oberholtzer, I think.
0286 0000 ;* The exact value must be somewhere in that range...
0287 0000 ;*
0288 0000 ;* masScalar is also used for maf compensation ($5e86,24198 for 1G, $7A03,31235 for 2g)
0289 0000 ;* for controls other than fuel injection. It probably correspond to some metric of
0290 0000 ;* the totMasComp curve (average or max under given conditions). From 1G and 2G numbers,
0291 0000 ;* It could correspond to the max of the masComp + t_masComp(freq) curve multiplied
0292 0000 ;* by 0.808*128? It could also correspond to the masComp + t_masComp(freq) curve
0293 0000 ;* sampled at around 69Hz and multiplied by 128.
0294 0000 ;*
0295 0000 ;* masScalar = maxTotMasComp*0.808*128 = totMasComp(69Hz)*128
0296 0000 ;*
0297 0000 ;* We then have in the case of masScalar = maxTotMasComp*0.808*128:
0298 0000 ;*
0299 0000 ;* airVol16 = numPulsePerCasInterrupts * $9c * masScalar / 65536
0300 0000 ;* = numPulsePerCasInterrupts * $9c * maxTotMasComp*0.808*128 / 65536
0301 0000 ;* = numPulsePerCasInterrupts * maxTotMasComp * 0.2462
0302 0000 ;* = numPulsePerCasInterrupts * maxTotMasComp/2452 * 2452*0.2462
0303 0000 ;* = numPulsePerCasInterrupts * maxTotMasComp/2452 * 603.68
0304 0000 ;*
0305 0000 ;* since totMasComp/2452 is litreOfAirPerAirflowSensorPulse, we have
0306 0000 ;*
0307 0000 ;* airVol16 = numPulsePerCasInterrupts * litreOfAirPerAirflowSensorPulse * 603.68
0308 0000 ;*
0309 0000 ;* Using again 1.18g/litre air density we get
0310 0000 ;*
0311 0000 ;* airVol16 = numPulsePerCasInterrupts * litreOfAirPerAirflowSensorPulse *1.18 * 603.68/1.18
0312 0000 ;* = numPulsePerCasInterrupts * gramsOfAirPerAirflowSensorPulse * 512
0313 0000 ;* = gramsOfAirPerCasInterrupts * 512
0314 0000 ;*
0315 0000 ;* In that case, airVol16/512 can be seen has having units of gramsOfAirPerCasInterrupts
0316 0000 ;* (grams of air entering one cylinder). Note that the factor of 512 is not random, the
0317 0000 ;* factor 0.808 is used to get it in that case...
0318 0000 ;*
0319 0000 ;* The load index values used to interpolate the fuel map is then
0320 0000 ;*
0321 0000 ;* airVol16/2 <= 96
0322 0000 ;*
0323 0000 ;* loadIndex = (airVol16/2-32)/16
0324 0000 ;* = (gramsOfAirPerCasInterrupts*512/2 -32)/16
0325 0000 ;* = gramsOfAirPerCasInterrupts*16-2
0326 0000 ;*
0327 0000 ;* airVol16/2 >= 96
0328 0000 ;*
0329 0000 ;* loadIndex = gramsOfAirPerCasInterrupts * 512/2 * 0.668/16
0330 0000 ;* = gramsOfAirPerCasInterrupts*10.69
0331 0000 ;*
0332 0000 ;* Which correspond to (gramsOfAirPerCasInterrupts for each index value)
0333 0000 ;*
0334 0000 ;* 0 1 2 3 4 5 6 7 8 9 10 11
0335 0000 ;* 0.125 0.1875 0.25 0.3125 0.3750 0.4678 0.5614 0.6549 0.7485 0.8421 0.9356 1.0292
0336 0000 ;*
0337 0000 ;* gramsOfAirPerRevolution would be twice those values. Notice that the max value of 1.0292
0338 0000 ;* correspond to about 250HP when BSFC=0.55 which is in the range of the stock 1G 195HP...
0339 0000 ;*
0340 0000 ;* Also notice that the 8 bit airflow airVol = airVol16/2 will saturate to $ff when
0341 0000 ;* airVol16/2 = 255 which correspond to gramsOfAirPerCasInterrupts = 1 gram. airVolT
0342 0000 ;* airVolTB and airVolB will also saturate in the same range...
0343 0000 ;*
0344 0000 ;* We can now compare these results with the stock boost gauge. It has a max range
0345 0000 ;* of 1Kg per sq cm which equals 14.2 psi. The boost gauge duty cycle is given by
0346 0000 ;*
0347 0000 ;* bGaugeODuty = t_bGauge(airVolT/32)/24
0348 0000 ;*
0349 0000 ;* When maximum airVolT = 255 = iatCompFact*airVol16/2, bGaugeODuty = 20/24 = 0.83.
0350 0000 ;* At 25.6 degC, iatCompFact = 1.0 and therefore airVol16=510 which translates to
0351 0000 ;* 1g of air. boost gauge duty of 0.83 correspond to approx. 10.9psi (by eye...).
0352 0000 ;* Assuming a displacement of 0.5litre per cylinder and charge air density of 1.18
0353 0000 ;* (25degC, probably too low for that psi range, unless you have a perfect intercooler..)
0354 0000 ;* we would get 1.18*0.5*(10.9+14.5)/14.5 = 1.03g of air per cylinder (cas
0355 0000 ;* interrupt). This is quite close to the 1.0g we had earlier.
0356 0000 ;*
0357 0000 ;* The 0psi point on the gauge correspond to a duty cycle of about 40.5% which
0358 0000 ;* correspond to bGaugeODuty=9.75/24 which from t_bGauge correspond to
0359 0000 ;* airVolT/32=2.875 which means airVolT = 92. with iatCompFact = 1.0 @25degC,
0360 0000 ;* we get airVol16 = 2*airVolT/iatCompFact = 184 which correspond to 0.36grams of air
0361 0000 ;* Assuming a displacement of 0.5litre per cylinder and charge air density of 1.18@25degC
0362 0000 ;* we would get 1.18*0.5 = 0.59g of air per cylinder (cas interrupt) at 0psi. Compared to
0363 0000 ;* 0.36g we had earlier this is a large error but then there are several factor not taken onto
0364 0000 ;* account in the calculations, I suppose???.
 
Our mass airflow sensor actually consists of three separate sensors:

1. Volumetric flowrate sensor
2. Barometric pressure sensor
3. Air temperature sensor (intake temperature sensor)

The volumetric flowrate sensor measures the velocity of the air moving through the MAS. The ECU can then convert this air velocity to a volumetric flowrate by multiplying the velocity value by the cross-sectional area of the MAS. Using units of feet and seconds for example:

velocity(feet/second) * cross-sectional area(feet^2) = volumetric flowrate (feet^3/second)

Now using the Ideal Gas Law, the ECU can calculate mass airflow. The Ideal Gas Law allows a quantity (mass) of a gas (n) to be calculated if you know the gas's pressure (P), volume (V), and temperature (T): PV=nRT. Over a short period of time, pressure and temperature will be relatively constant. If you divide both sides of the Gas Law equation by time, this gives you:

P*(V/time) = (n/time)*R*T

This can be rewritten as:

P*(volumetric flowrate) = (mass flowrate)*R*T

Solving for mass flowrate gives you:

mass flowrate = (P*(volumetric flowrate))/(R*T)

The equation above gives the ECU a means of calculating mass flowrate from volumetric flowrate, barometric pressure, and temperature.
 
Thanks for the info guys.

I'm going based on zippyshoe's post. I'll have to take a moment to digest Ceddy's post (is that code deciphered from the ECU, a sample from elsewhere, or what?).

Is there a way to tell if the pressure sensor is properly calibrated? Where could I find out more about the sensor itself, how it functions, etc?

I'd be suprised if the ECU was using an ideal gas law, but maybe that's good enough. There are much more accurate tabular or analytic EOS for air available.

Thanks again guys!
 
Thanks for the info guys.

I'm going based on zippyshoe's post. I'll have to take a moment to digest Ceddy's post (is that code deciphered from the ECU, a sample from elsewhere, or what?).

Is there a way to tell if the pressure sensor is properly calibrated? Where could I find out more about the sensor itself, how it functions, etc?

I'd be suprised if the ECU was using an ideal gas law, but maybe that's good enough. There are much more accurate tabular or analytic EOS for air available.

Thanks again guys!

Regarding calibration of the pressure sensor - I don't recall if Pocketlogger allows you to log barometric pressure as DSMLink allows you to do, but if it does, I would imagine that you could log barometric pressure and compare the reading to that of a known-to-be-accurate barometer.

I have probably over-simplified the process of how the ECU measures airflow and how it uses this result to regulate fuel delivery. Once the ECU has measured airflow, it will calculate an injector pulsewidth based on this airflow, engine RPMs, target AFR, and a host of other factors as indicated by Ceddy's post.
 
Below is a document I found useful in understanding how the ECU uses mass airflow, RPMs, etc. to control fuel delivery. Unfortunately, it doesn't discuss the internals of the MAS. Hope this info is useful.:thumb:
 

Attachments

You must be registered for see attachments list
Below is a document I found useful in understanding how the ECU uses mass airflow, RPMs, etc. to control fuel delivery. Unfortunately, it doesn't discuss the internals of the MAS. Hope this info is useful.:thumb:

Dude, that's a great document. I don't want to stomp on any copyright toes, but do you happen to have the Excel spreadsheets (fuel and timing maps) for a 2g?

I was having some timing issues after I did the bulk of my upgrades even at 9psi boost, and - maybe steve? - (been many months) - was suprised at the timing advance in my logs. Looking at the three curves in that document make me wonder if something is messed up in my MAS that's giving low airflow readings. At 8k ft elevation, I'll flow less air at a given boost level, but I'm wondering if it's too low.

If I looked at one of my logs and picked off one point (one timing advance and one rpm value), shouldn't I be able to locate that on the timing map and identify what the airflow reading is that the ECU thought the motor was flowing at that time in the log? That might give me some more information about the possible MAS issue. Maybe the map is double-valued at that rpm, but I'd find out a lot if I had the map.

I haven't logged a pull recently, and I don't recall ever seeing barometric pressure as one of the values I could log in my Pocketlogger. I'll have to break it out (and probably recharge the battery, hotsynch the OS and software back on it) and see if I just overlooked that.

And my K&N setup without cold air intake is giving me hot air intake temps (95* on a 70* day), so I know I'm losing one degree of timing. Anyway, I've been laying off the boost except on cool days (seat of the pants indicates less timing pulled, but a cold-day-log would be a good idea). I'd like to figure this out.

Thanks a bunch guys!
 
Dude, that's a great document. I don't want to stomp on any copyright toes, but do you happen to have the Excel spreadsheets (fuel and timing maps) for a 2g?

I was having some timing issues after I did the bulk of my upgrades even at 9psi boost, and - maybe steve? - (been many months) - was suprised at the timing advance in my logs. Looking at the three curves in that document make me wonder if something is messed up in my MAS that's giving low airflow readings. At 8k ft elevation, I'll flow less air at a given boost level, but I'm wondering if it's too low.

If I looked at one of my logs and picked off one point (one timing advance and one rpm value), shouldn't I be able to locate that on the timing map and identify what the airflow reading is that the ECU thought the motor was flowing at that time in the log? That might give me some more information about the possible MAS issue. Maybe the map is double-valued at that rpm, but I'd find out a lot if I had the map.

I haven't logged a pull recently, and I don't recall ever seeing barometric pressure as one of the values I could log in my Pocketlogger. I'll have to break it out (and probably recharge the battery, hotsynch the OS and software back on it) and see if I just overlooked that.

And my K&N setup without cold air intake is giving me hot air intake temps (95* on a 70* day), so I know I'm losing one degree of timing. Anyway, I've been laying off the boost except on cool days (seat of the pants indicates less timing pulled, but a cold-day-log would be a good idea). I'd like to figure this out.

Thanks a bunch guys!

Below is an Excel spreadsheet with fuel and timing maps for 2g's. I obtained this document from DSMLink's website some time ago. Hopefully its alright for me to share this document - All credit goes to DSMLink and the developers of this document. In order to be able to upload this file, I had to rename it with a "pdf" file extension. Once you download this file, just rename it by deleting the ".pdf" extension from the filename (this file is NOT a pdf and will not open with Adobe Acrobat Reader.)

These timing and fuel maps all key off of grams/rev of airflow, since the ECU is concerned about the amount (mass) of air in the cylinders each time it fires the injectors. Knowing your grams/rev value will tell you which timing and fuel map the ECU is currently using.

I also suffer from high intake air temps with my Injen intake/cone filter setup. I find that my intake temperature remains fairly constant all year long in the low-to-mid 90's - even in the winter months. I guess the heat generated in the engine bay overcomes variations in outside air temps.

Also, regarding the third paragraph of your previous post which discusses airflow reading based on RPM and timing advance - I would imagine that you could get an idea of which timing map the ECU is on (in terms of grams/rev) based on timing advance at a particular RPM, but I thought that Pocketlogger had the ability to log mass airflow directly. The value that Pocketlogger displays for mass airflow (lbs/min) should reflect the airflow that the ECU actually "sees". In fact, if you are using a piggyback fuel controller, then the value displayed by Pocketlogger will show a lower-than-actual airflow value due to the action of the piggyback controller affecting the airflow signal going to the ECU.
 

Attachments

You must be registered for see attachments list
Below is an Excel spreadsheet with fuel and timing maps for 2g's. I obtained this document from DSMLink's website some time ago. Hopefully its alright for me to share this document - All credit goes to DSMLink and the developers of this document. In order to be able to upload this file, I had to rename it with a "pdf" file extension. Once you download this file, just rename it by deleting the ".pdf" extension from the filename (this file is NOT a pdf and will not open with Adobe Acrobat Reader.)

These timing and fuel maps all key off of grams/rev of airflow, since the ECU is concerned about the amount (mass) of air in the cylinders each time it fires the injectors. Knowing your grams/rev value will tell you which timing and fuel map the ECU is currently using.

I also suffer from high intake air temps with my Injen intake/cone filter setup. I find that my intake temperature remains fairly constant all year long in the low-to-mid 90's - even in the winter months. I guess the heat generated in the engine bay overcomes variations in outside air temps.

Also, regarding the third paragraph of your previous post which discusses airflow reading based on RPM and timing advance - I would imagine that you could get an idea of which timing map the ECU is on (in terms of grams/rev) based on timing advance at a particular RPM, but I thought that Pocketlogger had the ability to log mass airflow directly. The value that Pocketlogger displays for mass airflow (lbs/min) should reflect the airflow that the ECU actually "sees". In fact, if you are using a piggyback fuel controller, then the value displayed by Pocketlogger will show a lower-than-actual airflow value due to the action of the piggyback controller affecting the airflow signal going to the ECU.

Thanks again!

I vaguely recall that Pocketlogger just gives you the volume flow rate. I'll have to check that and the barometric pressure.

It's cooling off around here, and I'm noticing better power. My guess is the SMIC is just working better, but I'll check IATs as well to see if they're still up in the 90s. I need to stare at the K&N filter and Dejon pipes to see how much of a pain it would be to put in a cold air intake dam. I figure the UICP is going to get in the way and make things a pain. Or I could relocate my intake to under the frame rail. But I digress.
 
A small update on this.

I just revived my PDA and looked at some basic diagnostics with the car idling in my driveway.

The IATs started at around 68°F with a cold motor (didn't check to a thermometer, but that was a bit warmer than ambient...sunny day and that's under the hood, so it'd be higher). It warmed up to 84°F when the rad fan kicked on at 210°F coolant temp. So sitting in the driveway, the IATs weren't too bad.

Checked, and Pocketlogger doesn't give you barometric pressure. But it does give airflow in lb/min.

One thing I noticed that may or may not be abnormal is that with the car off but the key in the run position, the airflow reading was 0.14lb/min. Is that normal?

Finally, my LTFT was 4%. I'll have to check around to see if that's excessive. I figure if something was awry in the MAS, I'd have a bad LTFT.

O2v were oscillating around .5v, so atleast that part of the ECU is working. The O2 sensor is new, so I'm assuming it's okay.

Kinda sucks that I can't check the MAS calibration. I could check the IAT calibration, but not pressure without DSMlink. Don't have any ideas about calibrating the airflow. Maybe I should try a different MAS, but they're not exactly floating around town.

If any of that info gives anyone any new ideas, that'd be great, but none of it looks abnormal to me.
 
Your best bet as of now is to try a different MAS sensor and examine the results. Unfortunately, without adjusting the airflow tables of the MAS I don't forsee there being any way to "calibrate" the MAS. It's done in DSMLink by adjusting the airflow the ECU sees at certain Hz to match a logged boost value to a corresponding value given through the program. AFAIK, that is the only method :(
 
Ignore any airflow values when the car is off, 4% LTFT are perfectly fine, anything within +/-5% is considerd an acceptable values. The ECU will adjust from -16.9/+16.9% while the STFT will do around another 16% give or take. The ECU does a pretty good job of acomidating just about any conditions you can throw at it.. If you o2's are osolating correctly and your aiflow is ok at idle/curse without disrupting the LTFT's I would say your MAF is perfectly ok unless it's presenting irratice behavior or uncommon values at higer HZ tables when switching from closed/open loop
 
You mentioned in your initial post that the problem you are experiencing is related to timing advance. Does Pocketlogger allow you to log your g/rev airflow value? Since the timing map that the ECU uses depends on this value, then you could see if the g/rev airflow values you log produce the expected timing advance. For example, if for some reason you are seeing this value drop below 2.2g/rev at WOT, then this will put you on a different timing map and you will see more timing advance than if your airflow per rev remains above 2.2g/rev.
 
Below is a document I found useful in understanding how the ECU uses mass airflow, RPMs, etc. to control fuel delivery. Unfortunately, it doesn't discuss the internals of the MAS. Hope this info is useful.:thumb:

Hi,

Awesome document that you posted up. Do you have any other documents that you are able to post up? I would definelty be very interested in those if you could.

Bill
 
Your best bet as of now is to try a different MAS sensor and examine the results. Unfortunately, without adjusting the airflow tables of the MAS I don't forsee there being any way to "calibrate" the MAS. It's done in DSMLink by adjusting the airflow the ECU sees at certain Hz to match a logged boost value to a corresponding value given through the program. AFAIK, that is the only method :(

Sorry, I misspoke. I meant "check calibration" of the MAS. If I could log barometric pressure, then I could check both IAT and pressure against a 2nd temp sensor (put it in the MAS with the air filter off) and a barometer reading with the car off (but in the run position). I can't think of a way to check if the air speed Hz reading is correct, though. But knowing if 2 of the 3 were off would still be helpful.

Ignore any airflow values when the car is off, 4% LTFT are perfectly fine, anything within +/-5% is considerd an acceptable values. The ECU will adjust from -16.9/+16.9% while the STFT will do around another 16% give or take. The ECU does a pretty good job of acomidating just about any conditions you can throw at it.. If you o2's are osolating correctly and your aiflow is ok at idle/curse without disrupting the LTFT's I would say your MAF is perfectly ok unless it's presenting irratice behavior or uncommon values at higer HZ tables when switching from closed/open loop

I've not disconnected the battery in a long time, so I'm assuming that the 4% LTFT means that the sensors are telling the ECU pretty accurate values.

You mentioned in your initial post that the problem you are experiencing is related to timing advance. Does Pocketlogger allow you to log your g/rev airflow value? Since the timing map that the ECU uses depends on this value, then you could see if the g/rev airflow values you log produce the expected timing advance. For example, if for some reason you are seeing this value drop below 2.2g/rev at WOT, then this will put you on a different timing map and you will see more timing advance than if your airflow per rev remains above 2.2g/rev.

Pocketlogger gives lb/min airflow, but I can use that and RPM to calculate g/rev. And comparing the airflow and timing advance on the logger to the table is exactly why I asked for the table. So I just have to do another 3rd gear pull logging airflow, rpm, and timing advance. One question I have about that is that I'm not sure if all three values are logged at the same time or if they are "delivered" to the logger sequentially at whatever sampling rate the logger is at (6-7S/sec currently). One thing I could do is hold the rpm with the brakes for a couple of seconds during the pull so that the values would all correspond to the same RPM.

But even if I am below 2.2g/rev, the table should still be tuned correctly and deliver the correct fuel and advance timing correctly to avoid knock, right? That's the baffling part about all of this. My timing curve for a 9psi pull shows timing being pulled! The only things remaining that might cause this (that I can think of) are 1) bad knock sensor (no brown goo, and 84k miles on the car, and upgraded to 3g lifters thinking maybe tick was registering as knock), 2) bad MAS (LTFTs seem good, though), or 3) hot spots (did a seafoam treatment, didn't help *at all*). Compression is high. I forget exact numbers, but they were low 180s corrected for 8000ft elevation, so I was thinking carbon buildup, but they didn't change after the seafoam treatment.

I think I have some pre-turbo exhaust leaks, because I got smoke coming from somewhere around the mani/turbine/O2 area (couldn't tell where for sure...that was a very freak-Mack-out experience as it is for many on their first seafoam treatment), but I don't see how that could cause this problem.

So I'm running out of ideas.

Thanks for all the input, guys!:thumb:

EDIT: I guess if I'm getting higher-than-normal compression, that could cause the knock. Hmmm. Maybe I just need to get DSMlink and retard the timing. But that means I have to have money.:coy:
 
It's very late, so excuse the sequence of ideas (versus a more coherent post):

-Higher-than-normal compression can also be caused by incorrect cam degreeing. Since this is a new development, that indicates that timing may be off.

-As far as loggers go, I believe that they get all the data in one "pulse" versus sequential readings of each individual value.

-Although the knock sensor may look fine, there is still a possibility that it is going out. I remember that fairly recently either blackspo0ln or CanadianTsi replaced what appeared to be a perfectly fine knock sensor and succeeded in curing his knock problem (or got a bunk sensor and will explode soon!).

-Is your knock consistently occurring under one certain set of instances regardless of load on the engine? In this case, you may be getting mechanical knock. Check for anything that may be causing a vibration either directly on the engine or anything that could resonate a vibration to the engine (e.g. something hitting the downpipe). The only sure way to rule out mechanical knock as far as I'm concerned is to run some C16 on the most conservative tune possible--if there is still knock, then you can be fairly sure it's not real knock.

-To get barometric pressure, go to www.weather.com and see what they say for your zip code. It may sound stupid, but the value I got is almost exactly the same as what I'm reading from DSMLink.
 
Do you have a wideband by chance? I didn't see one listed in your profile, but if you do, you could check your AFR during a pull to verify that you are not leaning-out for some reason (fuel pressure regulator issue, fuel pump issue, injector issue, etc.) This could cause you to see genuine knock. Also, have you been able to verify your base timing (checked with a timing gun as opposed to what the logger spits-out) is correct?

With Pocketlogger, are you able to log your engine coolant temps? If your coolant temps are excessively high, this could also contribute to knock.

I too would be curious to see if you still see timing pulled while running a tank of race gas, as 2gGSX suggested, to determine if you are seeing genuine knock or phantom knock. If the results point to phantom knock, then it may be worth replacing your knock sensor with a new one installed at the proper torque.
 
Well, after looking at your other 5 page thread, I'm going to say that it's looking more and more like a knock sensor problem. I also noticed that your logs show excessive timing, expecially for a 2g, so I'm inclined to agree with 2gGSX on that one.

We really need to find you a way to get ahold of some race gas. Oh, and I'm pretty sure that the highest 2g Airflow map occurs at 2.1g/rev, not 2.2g/rev.
 
Thanks again, guys.

I've not checked timing. I didn't think of that affecting compression. I'll check the timing marks and read up on how to check the base timing (seems to vary all over the place at idle, so I'll have to research how to do this on a 2g).

This is not a new problem. I did almost all of my mods in one shot when the T25 died. I didn't have a logger before then, so I don't know if this was happening on the T25, too. But the first logs I did showed the timing problem. It consistently pulls timing shortly after boost hits all the way to redline, but it seems most focused in the 4500rpm area and 5800+ area with a normal timing curve in between.

Nobody around here sells race gas. I tried NOS octane booster based on some recommendations (I know, some of this stuff doesn't work, but this is supposed to raise octane by 30 points or so depending on how much you add). All I can get around here is 91 octane, but I was hoping raising it to 94 would make some difference. But it didn't. There may be a gas station in Santa Fe that sells race gas, but I don't know (1.5 hours round-trip). Albuquerque would probably have it, but that's 3.5 hours round-trip. I just need to find a place and then think to go there when I'm in town. And I'd have to time it just right to be low on gas when I got there.

I don't have a wideband.

All of the logs were done on my old O2 sensor which seemed to be working okay, but it seemed to hold 0.92v for my 9psi pulls. 15psi pulls showed that I leaned out past 6k rpm. Rewiring the stock FP didn't fix that, but I've since been wondering if I got a good enough ground. I know you can't infer much from narrowband voltage, but it seemed to have the same voltage before and after first boost. I've not done any logs on the new O2 sensor, but I think I can feel the timing pull. Cold days don't seem as bad as warm days, but butt-feel isn't very definitive, and it might just be the overall power increase from a cooler charge that I'm feeling.

Coolant temps are good. They were around 200°F as I recall. The coolant system seems to be working properly (I checked the t-stat in a pan on the stove with a thermometer prior to install - starts opening at 180°F, fully open by ~190°F), the fans kick on at 210°F, and coolant temps seem to hold around 200°F once warmed up, though I've not checked it with the logger while cruising. I usually only put the logger in my car for experiments so the battery doesn't die and dump all memory. The IATs during my pulls were 95°F because I don't have a cold air intake, so that'll pull one degree as I recall.

Barometric pressure won't help me check MAS calibration unless I can log pressure...which I can't with pocketlogger. I'm not sure how else I could use that information even if assuming the weather.com values were correct.

Oh, and last boost leak test was about 1k miles ago, no leaks (my 5-year-old daughter got a kick out of watching the boost gauge for me when I added air). All of the logs I've been mentioning were done just after all boost leaks had been fixed, so that's not causing the problems. And by fixed, I mean that I pressurized to 20psi and watched it bleed off. Dropped 1psi every 3-5 seconds. Every boost leak test since I fixed the original leaks (during the post-T25-death-mass-mod-flury) has been the same (no new leaks since then).

So my to-do list is (in order):

0) Change oil and do a boost leak test (got the oil/filter yesterday...it's 3k miles again)

1) Do another pull to get a new baseline with the new parts (new O2 sensor, new t-stat, 3g lash adjusters, new CAS), convert airflow to g/rev, look at the stock timing maps

2) Check timing marks

3) Learn how to check timing on a 2g and compare to logger

4) Try race gas

5) Change knock sensor

Ahhh....homework
 
Just a FYI, but the barometric pressure reading does not change significantly while driving, unless you somehow sealed off your entire engine bay.

As far as not having race gas nearby, you could always try the home brew method of toluene/xylene and some kerosene (http://www.gnttype.org/techarea/misc/octanebooster.html). I'm a little hesitant in suggesting this since xylene and toluene are both rated as "2" via the NFPA safety diamond. Here's some other information from NASOIC http://forums.nasioc.com/forums/showthread.php?t=386988

In regards to checking timing on a 2g, there was a thread recently which touched upon this topic, and IIRC the conclusion was that there is no way to ground timing on a 2g to actually check base timing, short of doing it via DSMLink. I was suggesting that you make sure you didn't skip timing somewhere by checking the crank pulley line and timing gear marks.
 
Right on spyderturbo007 - the highest 2g airflow map occurs at 2.1g/rev, not 2.2g/rev. The PDF I uploaded previously in this thread confirms this. I must be getting senile in my old age.:toobad:

It is pretty tough to check base timing on a 2g without DSMLink. You would have to purchase or borrow what is probably a very expensive scan tool (I think its called "MUT-II") from a dealership in order to force the ECU into the proper mode to then be able to verify base timing.
 
Add Value - Be Respectful - No Trolling - No Misinformation - Participate Often!
Support Vendors who Support the DSM Community

Build Thread Updates

Latest Classifieds

Back
Top