I'm reading through the Siemens docs again after thinking about comments by busterhax and 328ijunkie and I want to revisit how we have MAF defined in the ECU.
It says,
Quote:
The raw values are converted by a table ID_MAF_TAB__V_MAF_1__V_MAF_2 into values with the unit [kg/h] and sum up in one of the two buffers, MAF_ACC and MAF_ACC1. The number of values is counted in MAF_ACC_SUM and MAF_ACC1_SUM.
I guess, a buffer is used so the ECU can read a moving average of MAF values to normalize/filter the signal.
The MAF volt (0 to 5v) translation table (ID_MAF_TAB__V_MAF_1__V_MAF_2) can have values from 0 to 65535 with a resolution of 0.015625 and units of kg/hr. This means the MAF can be as high as 1024 kg/hr at 5v.
Then it sums up all the values and divides by the number of values to get an average.
Quote:
MAF_KGH_MES = 1/16 * MAF_ACC / MAF_ACC_SUM
or MAF_KGH_MES = 1/16 * MAF_ACC1 / MAF_ACC1_SUM
What I don't understand is why is it dividing by 16 in addition to that? So it is basically taking in MAF volts, converting to kg/hr, summing up in a buffer, then dividing by number of values in the buffer to get a smoothed average, and then dividing again by 16 and still calling it kg/hr except this time the limits are as high as 16384 kg/hr.
Then later it does
Quote:
MAF_MES = NC_FAC_MAF_CYL * MAF_KGH / N
where NC_FAC_MAF_CYL = 8000H = 1 dec.
Let's say stock MAF at 5V reads about 740 kg/hr at 7000RPM. That translates to 740 divided by 16 and again divided by 7000 which equals 0.006607 mg/tdc. This can't be right.
The other option is take the raw value at 5V which is 47360 decimal then divide that by 16 and again by 7000 which equals 0.4228 mg/tdc. This also seems wrong.
Another option is to take the raw value at 5V and divide by RPM which results in 6.76 mg/tdc. This also seems wrong.
Let's compare that to a datalog shared by Enabled a few weeks ago using Testo.
Code:
'11.10.2014 18:36:42 <jobstart>'STATUS_MOTORDREHZAHL','
11.10.2014 18:36:42 'STAT_MOTORDREHZAHL_WERT','1.979000E+003','real'
11.10.2014 18:36:42 'STATUS_MOTORDREHZAHL_EINH','rpm','text'
11.10.2014 18:36:42 'STATUS_MOTORDREHZAHL_WERT','1.979000E+003','real'
11.10.2014 18:36:42 <jobend>
11.10.2014 18:36:47 <jobstart>'STATUS_LMM','
11.10.2014 18:36:47 'STATUS_LMM_EINH','kg/h','text'
11.10.2014 18:36:47 'STATUS_LMM_WERT','3.875000E+001','real'
11.10.2014 18:36:47 <jobend>
'11.10.2014 18:36:47 <jobstart>'STATUS_LAST','
11.10.2014 18:36:47 'STAT_LAST_WERT','1.058610E+002','real'
11.10.2014 18:36:47 'STATUS_LAST_EINH','mg/Stroke','text'
11.10.2014 18:36:47 'STATUS_LAST_WERT','1.058610E+002','real'
11.10.2014 18:36:47 <jobend>
11.10.2014 18:36:44 <jobstart>'STATUS_LMM_VOLT','
11.10.2014 18:36:45 'STATUS_LMM_VOLT_EINH','V','text'
11.10.2014 18:36:45 'STATUS_LMM_VOLT_WERT','1.462500E+000','real'
11.10.2014 18:36:45 <jobend>
We can see that the ECU logged 1979 RPM, 38.75 MAF kg/h, 1.4625 MAF volt, and 105.861 mg/stroke all within a few seconds. So this should help us narrow down a relationship.
Can we get another set of eyes on this to help figure out how the ECU is converting from MAF kg/h to Load mg/stroke?
Either way, I'm going to change all the table formulae from kg/hr to mg/stroke except for the MAF translation table as that is verified correct via datalogs. This results in the axis ranging from 25 mg/stroke to 700 mg/stroke and can be programmed to be as high as 1389 mg/stroke.