How is LV8 calculated on MAF cars?
Thread Starter
Joined: Jul 2001
Posts: 1,000
Likes: 1
From: Western PA
Car: 1986 IROC-Z
How is LV8 calculated on MAF cars?
As you all know, the search feature is currently quite lacking, so I guess I have to be a nuisance and ask a question that's probably been answered a hundred times before... 
In a MAF car, how is the LV8 load variable calculated? I know it involves MAF airflow, but I don't know what else. I looked through ALL of the old mailing list archives at GM ECM, and found the following two possibilites.
LV8 = (MAF flow @ RPM) / (Max Airflow & RPM) * 255
LV8 = (MAF flow @ RPM) / RPM * scale factor
The first one seems mostly incorrect, as any attempts to make it work failed. The second one showed more promise, and I reconstructed the equation to solve for the scale factor, based upon my logged data -- the average value came to be somewhere around 4800, but it went anywhere from the mid-3000s to the low-5000s -- if this were a scale factor, I don't think there'd be that much variation. Also, if it matters, the BUA hack indicates a scale factor of 80 in hex, with is 16 in decimal (obviously far too small if using the equation above).
What's the correct formula for calculating LV8?

In a MAF car, how is the LV8 load variable calculated? I know it involves MAF airflow, but I don't know what else. I looked through ALL of the old mailing list archives at GM ECM, and found the following two possibilites.
LV8 = (MAF flow @ RPM) / (Max Airflow & RPM) * 255
LV8 = (MAF flow @ RPM) / RPM * scale factor
The first one seems mostly incorrect, as any attempts to make it work failed. The second one showed more promise, and I reconstructed the equation to solve for the scale factor, based upon my logged data -- the average value came to be somewhere around 4800, but it went anywhere from the mid-3000s to the low-5000s -- if this were a scale factor, I don't think there'd be that much variation. Also, if it matters, the BUA hack indicates a scale factor of 80 in hex, with is 16 in decimal (obviously far too small if using the equation above).
What's the correct formula for calculating LV8?
Moderator
iTrader: (1)
Joined: Mar 2002
Posts: 18,432
Likes: 233
From: Chasing Electrons
Car: check
Engine: check
Transmission: check
Thread Starter
Joined: Jul 2001
Posts: 1,000
Likes: 1
From: Western PA
Car: 1986 IROC-Z
Thanks for the thread and equation, RBob. Looking at the BUA hack, there are two references to an LV8 scale factor.
FCB 80 ; CAL = arg + 64, (16)
and
80d = 80/64 = 16
So, I tried either 192, per the first calculation, and 16, per the second. I'm not able to reproduce the same LV8 values I'm seeing with my data logger. Example:
1/1550 * 14.01 * 16 = 0.144
1/1550 * 14.01 * 192 = 1.735
The value I'm looking for is 43. What do you think I did wrong?
In case you're wondering why I'm curious about this, it's because I'm doing a university project that is a formal paper discussing the breakdown and operation of GM's fuel control system.
FCB 80 ; CAL = arg + 64, (16)
and
80d = 80/64 = 16
So, I tried either 192, per the first calculation, and 16, per the second. I'm not able to reproduce the same LV8 values I'm seeing with my data logger. Example:
1/1550 * 14.01 * 16 = 0.144
1/1550 * 14.01 * 192 = 1.735
The value I'm looking for is 43. What do you think I did wrong?
In case you're wondering why I'm curious about this, it's because I'm doing a university project that is a formal paper discussing the breakdown and operation of GM's fuel control system.
Moderator
iTrader: (1)
Joined: Mar 2002
Posts: 18,432
Likes: 233
From: Chasing Electrons
Car: check
Engine: check
Transmission: check
School paper eh?
I earned a few credits myself with a couple of papers on EFI. Good stuff. Here is the LV8 equation as actually implemented in the BUA code:
LV8 = (((DRP * gms/sec) / 256) * Scalar) / 64
The DRP can be found be reversing the RPM calculation:
DRP = 983040 / RPM
-gives-
983040 / 1550 = 634
Then gms/sec at 14.01 and the scalar of 80 (decimal):
(((634 * 14.01) / 256) * 80) / 64 = 43 (the LV8, or Load Variable, 8 bits).
Here is the Bua code simplified. I removed the crank RPM limiter and the saving of one & two delayed LV8 terms:
RBob.
LV8 = (((DRP * gms/sec) / 256) * Scalar) / 64
The DRP can be found be reversing the RPM calculation:
DRP = 983040 / RPM
-gives-
983040 / 1550 = 634
Then gms/sec at 14.01 and the scalar of 80 (decimal):
(((634 * 14.01) / 256) * 80) / 64 = 43 (the LV8, or Load Variable, 8 bits).
Here is the Bua code simplified. I removed the crank RPM limiter and the saving of one & two delayed LV8 terms:
Code:
;------------------------------- ; ; Calculate the LV8 term ; ;------------------------------- ; ; do 16 * 16 Mult of DRP (inverse RPM) and airflow ; LDX L0095 ; Current Minor LP Ref Period LD77B: LDD L00EA ; Gms/Sec Disp Value, (Mult'plr) JSR LF2F0 ; 16 * 16 Mult routine ; PSHB ; Save Middle 2 Bytes of Product PSHA ; Save Middle 2 Bytes of Product ; ; ; mult result of above calc by scalar term ; TSX ; point to middle 2 bytes of prev calc ; LDAA LC69A ; Ld VAR FOR SCALING LV8 Scale factors ; 80d = 80/64 = 16 JSR LF472 ; FACTOR IN 8x16 MULT LDD 0,X ; get result of 8x16 mult ROLB ; AB *= 2 ROLA ; BCC LD798 ; LDD #$FFFF ; ; LD798: ASLB ; ROUND up A ADCA #0 ; ROUND ; PULX ; stack clean up ; BCC LD7A0 ; bra if no ovf of adca LDAA #255 ; USE MAX VAL ; LD7A0: STAA L0063 ; Save LD VALUE (LV8)
Thread Starter
Joined: Jul 2001
Posts: 1,000
Likes: 1
From: Western PA
Car: 1986 IROC-Z
A tremendous thanks to you, RBob! I figured that there had to be a few more factors to multiply or divide by...
.
Does "DRP" actually stand for anything? I've seen it a few times and it was always just labeled "inverse RPM."
While we're on the subject of formulas, I think I'm going to hijack my own thread. I've been trying to figure out the base pulsewidth calculation for $32 and $6E masks, but I cannot reproduce the same values that I'm seeing through my data logger.
To be honest, my assembly reading ability is quite low, so trying to understand the hacks isn't always easy. I came across a thread in which you explained the BPW calculation to be the following:
PW = (((((DRP * gms/sec) / 512) * AFR) / 256) * InjFlwRate / 128) * 0.01526
Entering the corresponding values from one of my logs yields readings that are typically lower than what I have. Even correcting for the BLM doesn't make things line up. There is probably some additional modifier that I'm not seeing. Can you shed some light on this?
Yep, this is all for an engineering presentation that I'm giving next week. While everyone else is doing mundane topics such as "Women in Science" and "Rollercoaster Physics," I decided to do something a little more challenging (and interesting!). Too bad it's making my head spin!
.Does "DRP" actually stand for anything? I've seen it a few times and it was always just labeled "inverse RPM."
While we're on the subject of formulas, I think I'm going to hijack my own thread. I've been trying to figure out the base pulsewidth calculation for $32 and $6E masks, but I cannot reproduce the same values that I'm seeing through my data logger.
To be honest, my assembly reading ability is quite low, so trying to understand the hacks isn't always easy. I came across a thread in which you explained the BPW calculation to be the following:
PW = (((((DRP * gms/sec) / 512) * AFR) / 256) * InjFlwRate / 128) * 0.01526
Entering the corresponding values from one of my logs yields readings that are typically lower than what I have. Even correcting for the BLM doesn't make things line up. There is probably some additional modifier that I'm not seeing. Can you shed some light on this?
Yep, this is all for an engineering presentation that I'm giving next week. While everyone else is doing mundane topics such as "Women in Science" and "Rollercoaster Physics," I decided to do something a little more challenging (and interesting!). Too bad it's making my head spin!
Moderator
iTrader: (1)
Joined: Mar 2002
Posts: 18,432
Likes: 233
From: Chasing Electrons
Car: check
Engine: check
Transmission: check
Dunno, I think the thread you posted explains and examples the PW calc quite well. Have you run through the calculations and found something amiss?
RBob.
RBob.
Thread Starter
Joined: Jul 2001
Posts: 1,000
Likes: 1
From: Western PA
Car: 1986 IROC-Z
Here's a sample of the data that I'm working with:
RPM - 2050
MAF - 33.18 g/sec
BLM - 144
INT - 130
AFR - 14.71
First, let's get a few things in the right format.
AFR = 6554 / 14.71 = 446
DRP = 983040 / 2050 = 480
I'm running 24 lb/hr injectors, so the flow rate for single-fire mode is 441.
Using the equation...
PW = (((((DRP * gms/sec) / 512) * AFR) / 256) * InjFlwRate / 128) * 0.01526
PW = (((((480 * 33.18) / 512) * 446) / 256) * 441 / 128) * 0.01526
I get a value of 2.85 ms, but the BPW observed in my log is 3.23 ms. I'm assuming that the BLM/INT values correct this, and taking (144 / 128) * 2.85 equals 3.21 ms, which is pretty close to the BPW that I saw. The INT probably corrects this further, but I understand that it carries "less weight" in the correction, and frankly, I don't know what that weight is.
Hmm, it seemed like it worked this time. Was I right in factoring in the BLM correction to this value? If so, shouldn't my data logger read "pulsewidth," not "BASE pulsewidth"? I thought that the base values were calculated before any correction.
RPM - 2050
MAF - 33.18 g/sec
BLM - 144
INT - 130
AFR - 14.71
First, let's get a few things in the right format.
AFR = 6554 / 14.71 = 446
DRP = 983040 / 2050 = 480
I'm running 24 lb/hr injectors, so the flow rate for single-fire mode is 441.
Using the equation...
PW = (((((DRP * gms/sec) / 512) * AFR) / 256) * InjFlwRate / 128) * 0.01526
PW = (((((480 * 33.18) / 512) * 446) / 256) * 441 / 128) * 0.01526
I get a value of 2.85 ms, but the BPW observed in my log is 3.23 ms. I'm assuming that the BLM/INT values correct this, and taking (144 / 128) * 2.85 equals 3.21 ms, which is pretty close to the BPW that I saw. The INT probably corrects this further, but I understand that it carries "less weight" in the correction, and frankly, I don't know what that weight is.
Hmm, it seemed like it worked this time. Was I right in factoring in the BLM correction to this value? If so, shouldn't my data logger read "pulsewidth," not "BASE pulsewidth"? I thought that the base values were calculated before any correction.
Thread
Thread Starter
Forum
Replies
Last Post
NBrehm
Engine/Drivetrain/Suspension Parts for Sale
1
Aug 25, 2015 11:49 PM
Linson
Auto Detailing and Appearance
40
Aug 21, 2015 02:12 PM






