Sure. However, I would like to go through the
entire chain of events leading up to the final
gms/sec airflow value.
1) The MAF ADC input is read. The ADC Vref value
is 5.1 volts. 5.1 / 255 = 20mV per/count. So a
MAF output of 2.1 volts will be 2.1 / .02 = 105.
The value 105 is the value within the ECM.
2) The ADC value is multiplied by 7 and stored
as a double (2 bytes). This is required as the
MAF scalar tables are a holdover from the digital
or frequency based device.
105 * 7 = 735 = $02DF (I'll use hex from time to
time as it will be easier at some points).
This value will be referred to as: MAFv*7
3) An overflow test is made on this value. It is
a holdover from the digital MAF and is not
required for the analog MAF.
4) The MAFv*7 value will be broken into two
pieces: the MSB and the LSB. The MSB is $02 and
the LSB is $DF (from step 2).
If the MSB is 1 then the MAFv*7 value is divided
by 2 (halved). This is required as the 1st MAF
scalar table has half the resolution as the
others.
5) The MSB of MAFv*7 is used to select the MAF
scalar table. As the MSB is $02 (2) then the
second table is used. If the MSB was $03, the 3rd
table would be used.
6) A 2D lookup is done into the selected MAF
scalar table. The loookup index is the LSB of the
MAFv*7 value. Here it is $DF or 223 decimal.
As it is an interpolated lookup the value retrieved
from the table will be 237.
7) Now the table scalar value comes into play.
The scalar for this table is 48. The math is
to multiply the look'd up value by the table
scalar and divide by 256.
(237 * 48) / 256 = 44.4 gms/sec airflow
The 44 gms/sec value is saved in L00BD. This is
the immediate unfiltered, unlimited airflow term.
The gms/sec value plus the remainder are saved
in L00F1 & L00F2 as a double. This is the same
value as above without the / 256.
This is done so that the filtering and LV8 calc
has higher accuracy.
8) Dependent upon an option bit the full gms/sec
term is filtered (done in ARAP).
9) The gms/sec term is now tested against a
minimum airflow (3 gms/sec). If less then that it
is set to that.
10) The gms/sec term is then tested against a
maximum airflow based on RPM. This is from the
table as descibed in a previous post.
-done calculating the gms/sec term-
It is this final gms/sec term that is used to calculate the load variable LV8.
So now, we get to a MAF scalar table:
Code:
;----------------------------------------------
; MASS AIR FLOW TABLE #2
;----------------------------------------------
LC5BE FCB 48 ; TABLE SCALAR
FCB 8 ; 8 + 1 LINE TABLE
;----------------------------------
; gms/Sec BIN VDC #/HR
;----------------------------------
FCB 119 ; 22.3 512 1.46 172
FCB 133 ; 25.0 544 1.55 193
FCB 147 ; 27.6 576 1.65 213
FCB 163 ; 30.6 608 1.74 236
FCB 180 ; 34.1 640 1.83 264
FCB 198 ; 37.1 672 1.92 287
FCB 217 ; 40.7 704 2.01 314
FCB 237 ; 44.5 736 2.10 343
FCB 254 ; 47.7 768 2.19 368
The column following the FCB is the actual value
that will be found in the bin. Every column after
that one is informational. All of the above math
may be applied to the columns.
Take the line with 'FCB 198'. If you take the
198 and multiply it by the scalar and divide by
256 the result will be gms/sec:
(198 * 48) / 256 = 37.125 gms/sec
The BIN value of 672 is the ADC counts * 7:
672 / 7 = 96, 96 * 20mV = 1.92 volts
The #/Hr column is probably the conversion from
gms/sec of air to lbs/hr of air. Have to find the
conversion for that to prove it.
In closing, I'd like to point out that if the table
scalar term is changed, the entire table changes.
This is due to the math in step 7 above.
RBob.
It would be interesting to change the ALDL table
to output the intermediate values along with
the MAF status byte L0040. It would be easy
to follow the code and discover what is happening
at any point in time.