Surging in closed loop idle (only!)
Surging in closed loop idle (only!)
Okay, I have a problem with surging only in closed loop. If I burn a chip that runs in open loop, it will run all day with a rock solid idle. My P/N switch isn't hooked up (workign on it
), but when I put it from P to D, the rpm dips a very tiny amount, but it catches it just fine.
Now, enter the closed loop chip. BLM's are pretty darn good at 126, INT about the same. You let it sit for a while in park, and it will start surging. Desired idle is 700, and it starts bouncing up and down, usually getting more severe each time, till eventually it hits 300rpm and either stalls or revs to 1200+.
Additionally, when in closed loop, if I put it from P to D, it instantly stalls. So it's like it has no torque or momentum when in closed loop idle. Or it can't deal with any sudden changes in rpm fast enough??
Oh - no surging in drive. It handles itself just fine there...
I don't understand what is causing this. How can taking out 1.6% fuel can make that much difference? There has to be some other idle constant that is being "enabled" during CL that causes these things to happen..... Any ideas?
I do have a log if I can figure out how to post it...
), but when I put it from P to D, the rpm dips a very tiny amount, but it catches it just fine.Now, enter the closed loop chip. BLM's are pretty darn good at 126, INT about the same. You let it sit for a while in park, and it will start surging. Desired idle is 700, and it starts bouncing up and down, usually getting more severe each time, till eventually it hits 300rpm and either stalls or revs to 1200+.
Additionally, when in closed loop, if I put it from P to D, it instantly stalls. So it's like it has no torque or momentum when in closed loop idle. Or it can't deal with any sudden changes in rpm fast enough??
Oh - no surging in drive. It handles itself just fine there...
I don't understand what is causing this. How can taking out 1.6% fuel can make that much difference? There has to be some other idle constant that is being "enabled" during CL that causes these things to happen..... Any ideas?
I do have a log if I can figure out how to post it...
Is there an IAC PID term/multiplier that gets enabled for CL?
When the RPM starts dropping fast (100rpm/sample), it only opens the IAC a couple steps per sampling. Doesn't seem fast enough to catch a stall..
When the RPM starts dropping fast (100rpm/sample), it only opens the IAC a couple steps per sampling. Doesn't seem fast enough to catch a stall..
Supreme Member
iTrader: (1)
Joined: Jan 2002
Posts: 4,432
Likes: 1
From: garage
Engine: 3xx ci tubo
Transmission: 4L60E & 4L80E
It kind of sounds like the O2 sensor cooled off because you said it has the problem after sitting in park for a while. Take a look at the O2 sensor mV and see if it is swinging the voltage properly.
Joined: Jan 2005
Posts: 10,404
Likes: 492
From: Hurst, Texas
Car: 1983 G20 Chevy
Engine: 305 TPI
Transmission: 4L60
Axle/Gears: 14 bolt with 3.07 gears
Look at this paper by RBob. It is TBI specific to the 7747, but the general idea can be used with any of the GM ecms.
http://www.diy-efi.org/gmecm/papers/747fuel.txt
http://www.diy-efi.org/gmecm/papers/747fuel.txt
Moderator
iTrader: (1)
Joined: Mar 2002
Posts: 18,432
Likes: 233
From: Chasing Electrons
Car: check
Engine: check
Transmission: check
It is difficult to answer specific questions without knowing the maskID ($A1, or maybe the one after $A1?).
One item to remember is that during closed loop fueling there are proportional gains. These are not present during open loop operation. The $88 & $A1 code bases idle fueling on airflow. Part of this is the IAC steps. There is a learn that needs to take place for a stable idle.
With the cam change (?) you may have thrown the calibration out. Can try an idle learn and see if it helps. IIRC there is an option byte to disable fueling based on airflow, don't know if it will work or not.
The $88 calibrations as used in f-body's are tightly held to stoich. This is required as they run a 3-way cat. In this case the AFR is really leaner then it should be for a decent idle. And makes it tougher to hold an idle.
There is an interesting idle fueling PID control state table. Probably for the lean idle. May need to re-calibration this.
Don't forget about the idle stabilizer SA. A cam'd engine needs that tamed down.
RBob.
One item to remember is that during closed loop fueling there are proportional gains. These are not present during open loop operation. The $88 & $A1 code bases idle fueling on airflow. Part of this is the IAC steps. There is a learn that needs to take place for a stable idle.
With the cam change (?) you may have thrown the calibration out. Can try an idle learn and see if it helps. IIRC there is an option byte to disable fueling based on airflow, don't know if it will work or not.
The $88 calibrations as used in f-body's are tightly held to stoich. This is required as they run a 3-way cat. In this case the AFR is really leaner then it should be for a decent idle. And makes it tougher to hold an idle.
There is an interesting idle fueling PID control state table. Probably for the lean idle. May need to re-calibration this.
Don't forget about the idle stabilizer SA. A cam'd engine needs that tamed down.
RBob.
Trending Topics
You're a good mind reader! It is $A1.
Everybody always told me to disable the "Calculate BPW at idle as a function of airflow", so that is currently unchecked.
I believe the idle learn is where you let it sit in drive for 5 minutes or something? I always assumed that a good amount of driving fixed any learn procedures necessary... I've been driving the CL binary for a few days now.
I have fixed the idle spark advance/retard tables from those outrageous values originally to a nice linear table, with the spark advance going up to 8 degrees, retard going to 5. (for a 200rpm error) Originally it was something like 9 and 12 respectively.
One question I still have, is what is the purpose of the "Idle Spark Multiplier"? In the 8D, they are all pretty much set to 0.99 or something. In the A1 and DF, the Spark vs MAP tables look like this:
20kpa - 0.625
26kpa - 0.625
32kpa - 0.617
38kpa - 0.602
44kpa - 0.5
49kpa - 0.5
55kpa - 0.5
61kpa - 0.375
It seems like that would work against me for a stable idle. WHY would they do this? And should I set it all to 0.9's?
Everybody always told me to disable the "Calculate BPW at idle as a function of airflow", so that is currently unchecked.
I believe the idle learn is where you let it sit in drive for 5 minutes or something? I always assumed that a good amount of driving fixed any learn procedures necessary... I've been driving the CL binary for a few days now.
I have fixed the idle spark advance/retard tables from those outrageous values originally to a nice linear table, with the spark advance going up to 8 degrees, retard going to 5. (for a 200rpm error) Originally it was something like 9 and 12 respectively.
One question I still have, is what is the purpose of the "Idle Spark Multiplier"? In the 8D, they are all pretty much set to 0.99 or something. In the A1 and DF, the Spark vs MAP tables look like this:
20kpa - 0.625
26kpa - 0.625
32kpa - 0.617
38kpa - 0.602
44kpa - 0.5
49kpa - 0.5
55kpa - 0.5
61kpa - 0.375
It seems like that would work against me for a stable idle. WHY would they do this? And should I set it all to 0.9's?
It is difficult to answer specific questions without knowing the maskID ($A1, or maybe the one after $A1?).
One item to remember is that during closed loop fueling there are proportional gains. These are not present during open loop operation. The $88 & $A1 code bases idle fueling on airflow. Part of this is the IAC steps. There is a learn that needs to take place for a stable idle.
With the cam change (?) you may have thrown the calibration out. Can try an idle learn and see if it helps. IIRC there is an option byte to disable fueling based on airflow, don't know if it will work or not.
The $88 calibrations as used in f-body's are tightly held to stoich. This is required as they run a 3-way cat. In this case the AFR is really leaner then it should be for a decent idle. And makes it tougher to hold an idle.
There is an interesting idle fueling PID control state table. Probably for the lean idle. May need to re-calibration this.
Don't forget about the idle stabilizer SA. A cam'd engine needs that tamed down.
RBob.
One item to remember is that during closed loop fueling there are proportional gains. These are not present during open loop operation. The $88 & $A1 code bases idle fueling on airflow. Part of this is the IAC steps. There is a learn that needs to take place for a stable idle.
With the cam change (?) you may have thrown the calibration out. Can try an idle learn and see if it helps. IIRC there is an option byte to disable fueling based on airflow, don't know if it will work or not.
The $88 calibrations as used in f-body's are tightly held to stoich. This is required as they run a 3-way cat. In this case the AFR is really leaner then it should be for a decent idle. And makes it tougher to hold an idle.
There is an interesting idle fueling PID control state table. Probably for the lean idle. May need to re-calibration this.
Don't forget about the idle stabilizer SA. A cam'd engine needs that tamed down.
RBob.
Moderator
iTrader: (1)
Joined: Mar 2002
Posts: 18,432
Likes: 233
From: Chasing Electrons
Car: check
Engine: check
Transmission: check
You're a good mind reader! It is $A1.
Everybody always told me to disable the "Calculate BPW at idle as a function of airflow", so that is currently unchecked.
I believe the idle learn is where you let it sit in drive for 5 minutes or something? I always assumed that a good amount of driving fixed any learn procedures necessary... I've been driving the CL binary for a few days now.
I have fixed the idle spark advance/retard tables from those outrageous values originally to a nice linear table, with the spark advance going up to 8 degrees, retard going to 5. (for a 200rpm error) Originally it was something like 9 and 12 respectively.
One question I still have, is what is the purpose of the "Idle Spark Multiplier"? In the 8D, they are all pretty much set to 0.99 or something. In the A1 and DF, the Spark vs MAP tables look like this:
20kpa - 0.625
26kpa - 0.625
32kpa - 0.617
38kpa - 0.602
44kpa - 0.5
49kpa - 0.5
55kpa - 0.5
61kpa - 0.375
It seems like that would work against me for a stable idle. WHY would they do this? And should I set it all to 0.9's?
Everybody always told me to disable the "Calculate BPW at idle as a function of airflow", so that is currently unchecked.
I believe the idle learn is where you let it sit in drive for 5 minutes or something? I always assumed that a good amount of driving fixed any learn procedures necessary... I've been driving the CL binary for a few days now.
I have fixed the idle spark advance/retard tables from those outrageous values originally to a nice linear table, with the spark advance going up to 8 degrees, retard going to 5. (for a 200rpm error) Originally it was something like 9 and 12 respectively.
One question I still have, is what is the purpose of the "Idle Spark Multiplier"? In the 8D, they are all pretty much set to 0.99 or something. In the A1 and DF, the Spark vs MAP tables look like this:
20kpa - 0.625
26kpa - 0.625
32kpa - 0.617
38kpa - 0.602
44kpa - 0.5
49kpa - 0.5
55kpa - 0.5
61kpa - 0.375
It seems like that would work against me for a stable idle. WHY would they do this? And should I set it all to 0.9's?
The SA MAP multiplier table posted looks like it is for idle too high. As the idle speed increases the MAP value typically decreases. Those table values will increase the SA retard.
In the $88 code there is a table for each: idle too high, and idle too low.
Doesn't look like the $A1 code has that. It uses the same table for both too high & too low. Along with a coolant comp table. With just the one MAP multiplier table I would be tempted to make the values lower at the MAP value the engine usually idles at. Then increase it in both directions. This way it goes toward a larger SA difference as the MAP either decreases or increases.
RBob.
The $88 calibrations as used in f-body's are tightly held to stoich. This is required as they run a 3-way cat. In this case the AFR is really leaner then it should be for a decent idle. And makes it tougher to hold an idle.
There is an interesting idle fueling PID control state table. Probably for the lean idle. May need to re-calibration this.
There is an interesting idle fueling PID control state table. Probably for the lean idle. May need to re-calibration this.
"F56
COLD ENGINE TEMP. DEPENDENT AIR/FUEL RATIO VS COOLANT TEMP AND (NVACLD OR NMAPLDAL)
TABLE VALUE = AIR FUEL * 10"
table to represent some numbers richer than what's there? Wow, actually at idle it says 15.3:1 at 104 deg C...
"cold engine" sounds like open loop though.
Could you elaborate on where I would find the PID parameters?
Still trying to get the surging sorted out...
Moderator
iTrader: (1)
Joined: Mar 2002
Posts: 18,432
Likes: 233
From: Chasing Electrons
Car: check
Engine: check
Transmission: check
No CAT? I'd run open loop.
Idle PID state table:
##########################
# F128 IDLE GAIN TABLES #
##########################
RBob.
Idle PID state table:
##########################
# F128 IDLE GAIN TABLES #
##########################
RBob.
The PID table doesn't appear to be commented. It has all these strange numbers in almost no pattern. I'll take a look at $8D to see if it's commented there.
So given that I'm stubborn and want closed loop, how would you go about richening idle?
Moderator
iTrader: (1)
Joined: Mar 2002
Posts: 18,432
Likes: 233
From: Chasing Electrons
Car: check
Engine: check
Transmission: check
The Idle Gain table is a state table. It is combined with one or two other tables (code is a little differenet from the $88 stuff). There is a pattern to it, but not by looking at the values. To save you some time $8D doesn't use an idle gain state table.
These three are used to define the idle O2 window:
Note how they are tight to stoich and a little leaner. Hence the need for better idle proportional gain control.
RBob.
These three are used to define the idle O2 window:
Code:
0BD4 64 100 KIDOXTH 0.442 VOLTS RICH/LEAN O2 THRESHOLD WHEN IN IDLE 0BD5 70 112 KIDLZU 0.496 VOLTS ZEREFU VALUE WHEN IDLING 0BD6 58 88 KIDLZL 0.39 VOLTS ZEREFL VALUE WHEN IDLING
RBob.
Okay thanks.
So if I understand this correctly, there are two PID controls at play at idle. One for the IAC movement, and one for fueling?
I know it will still surge if I unplug the IAC, which leads me to believe it is a fuel issue. If indeed there is a PID control of the idle fuel, I would imagine small changes would easily get it to surge, especially if it uses the O2 travel delay, which may or may not be set up correctly for this engine.
If I were to lock the integrator then, mimicking open loop... and it still surges, then I would think the PID fuel control would need to be adjusted then.
I suppose I could also adjust the "D" of the IAC to have it adapt to changes faster as well. Maybe tone down the overspeed "P".
So if I understand this correctly, there are two PID controls at play at idle. One for the IAC movement, and one for fueling?
I know it will still surge if I unplug the IAC, which leads me to believe it is a fuel issue. If indeed there is a PID control of the idle fuel, I would imagine small changes would easily get it to surge, especially if it uses the O2 travel delay, which may or may not be set up correctly for this engine.
If I were to lock the integrator then, mimicking open loop... and it still surges, then I would think the PID fuel control would need to be adjusted then.
I suppose I could also adjust the "D" of the IAC to have it adapt to changes faster as well. Maybe tone down the overspeed "P".
Moderator
iTrader: (1)
Joined: Mar 2002
Posts: 18,432
Likes: 233
From: Chasing Electrons
Car: check
Engine: check
Transmission: check
Other then stating that you removed 1.6% fuel, you never mentioned what change was made to the engine. That will affect which areas need work.
The IAC is too slow to control the idle other then the general RPM. The SA idle stabilizer is the fastest reacting to RPM changes. With the fueling proportional gains in between.
Dependent upon the changes that brought on the surging: it may be a lean spot in the VE table, too much proportional gain, or too low an idle speed. From playing with various ECMs and calibrations it doesn't take much to throw the proportional gains askew.
There are a couple of things you can do: run open loop for a while during which you can study the PID variables of the $A1 code. And decipher the PI state table (in the $88 code it controls the idle proportional gain along with the integrator update delay, fueling).
Try a better documented ECM such as an EBL setup. One is running a 3.1l f-body better then the stock ECM/code.
RBob.
The IAC is too slow to control the idle other then the general RPM. The SA idle stabilizer is the fastest reacting to RPM changes. With the fueling proportional gains in between.
Dependent upon the changes that brought on the surging: it may be a lean spot in the VE table, too much proportional gain, or too low an idle speed. From playing with various ECMs and calibrations it doesn't take much to throw the proportional gains askew.
There are a couple of things you can do: run open loop for a while during which you can study the PID variables of the $A1 code. And decipher the PI state table (in the $88 code it controls the idle proportional gain along with the integrator update delay, fueling).
Try a better documented ECM such as an EBL setup. One is running a 3.1l f-body better then the stock ECM/code.
RBob.
Anywho,
What does this all do:
and:
It seems like those are O2 and/or fueling proportional terms
What does this all do:
Code:
0BD7 08 8 KPCNT1 8 COUNTS PROPORTIONAL COUNTS WHEN IN PROPORTIONAL
DURATION #1
0BD8 0C 12 KPCNT2 12 COUNTS PROPORTIONAL COUNTS WHEN IN PROPORTIONAL
DURATION #2
0BD9 08 8 KIDLPD1 0.1 SEC PROPORTIONAL DURATION #1 WHEN IDLING
0BDA 0C 12 KIDLPD2 0.15 SEC PROPORTIONAL DURATION #2 WHEN IDLING
0BDB 80 128 KIDLGF 0.5 FACTOR PROPORTIONAL COUNTS GAIN FACTOR WHEN
IDLING Code:
#####################################
# F9CLTBL PCCNT #
# PROPORTIONAL COUNTS (ERROR) #
# N = E #
* -------------------------------------------------------------------
0C52 12 18 18 COUNTS 0 ERROR
0C53 18 24 24 COUNTS 8
0C54 1A 26 26 COUNTS 16
0C55 1E 30 30 COUNTS 24
0C56 20 32 32 COUNTS 32
0C57 22 34 34 COUNTS 40
0C58 24 36 36 COUNTS 48
0C59 28 40 40 COUNTS 56
0C5A 30 48 48 COUNTS 64
0C5B 38 56 56 COUNTS 72 Progress was made today... I tempered the IAC PID terms, and combined with the large underspeed SA, it seems to have become much better mannered. Instead of immediately surging and stalling when I place it in park, it now takes 2 minutes and it doesn't stall.
I guess what I don't understand is if the low RPM fuel increase is helping or hurting.
Screenshot of my idle VE:
http://img521.imageshack.us/img521/6184/idvejj4.jpg
Code:
TPS % BatV FPV Engine MAP AFR O2 Crosses INT BLM Cell BPW Idle IAC Spark % Volts Volts RPM KPA mV Crosses mSec RPM Steps Degrees 0 13.5 13.2 1200 16.47 14.7 861.9 97 132 124 0 0.96 750 13 15.82 0 13.5 13.3 1100 17.25 14.7 853.06 97 132 124 0 0.98 750 13 15.82 0 13.5 13.3 950 18.04 14.7 844.22 97 132 124 0 0.99 750 13 15.82 0 13.4 13.3 850 19.61 14.7 835.38 97 128 124 0 0.99 750 13 19.34 0 13.5 13.3 775 21.96 14.7 822.12 97 128 124 0 1.02 750 13 24.26 0 13.5 13.3 675 24.31 14.7 822.12 97 128 124 0 1.08 750 13 30.59 0 13.3 13.2 625 26.27 14.7 822.12 97 128 124 0 1.14 750 13 31.29 0 13.4 13.2 600 28.24 14.7 826.54 97 128 124 0 1.21 750 14 30.23 0 13.3 13.2 600 30.59 14.7 813.28 97 128 124 0 1.28 750 15 29.53 0 13.4 13.2 600 32.16 14.7 698.36 97 128 124 0 1.37 750 15 28.83 0 13.5 13.3 650 32.55 14.7 800.02 97 128 124 0 1.36 750 15 28.48 0 13.1 13.2 700 32.16 14.7 760.24 97 128 124 0 1.39 750 15 25.31 0 13.6 13.3 750 31.37 14.7 265.2 98 127 124 0 1.4 750 15 18.98 0 13.2 13.2 800 30.2 14.7 57.46 98 127 124 0 1.39 750 15 17.93 0 13.5 13.3 850 28.63 14.7 13.26 98 127 124 0 1.36 750 15 16.88 0 13.5 13.3 875 27.45 14.7 17.68 98 127 124 0 1.33 750 15 16.88 0 13.4 13.2 900 26.27 14.7 30.94 98 127 124 0 1.28 750 15 16.88 0 13.5 13.2 925 25.1 14.7 48.62 98 128 124 0 1.27 750 15 15.12 0 13.4 13.2 900 24.31 14.7 667.42 99 128 124 0 1.17 750 15 17.58 0 13.5 13.3 900 23.92 14.7 822.12 99 128 124 0 1.13 750 15 17.58 0 13.4 13.2 875 23.53 14.7 853.06 99 128 124 0 1.11 750 15 17.58 0 13.1 13.2 850 23.92 14.7 853.06 99 128 124 0 1.11 750 15 18.63 0 13 12.9 800 24.31 14.7 844.22 99 128 124 0 1.11 750 15 19.69 0 12.8 12.6 750 25.49 14.7 844.22 99 128 124 0 1.14 750 15 23.2 0 12.7 12.5 725 26.67 14.7 835.38 99 128 124 0 1.16 750 15 28.13 0 12.4 12.2 650 28.63 14.7 800.02 99 128 124 0 1.22 750 16 30.23 0 12.4 12.2 575 31.37 14.7 150.28 100 128 124 0 1.34 750 19 29.18 0 12.4 12.2 575 33.33 14.7 22.1 100 128 124 0 1.45 750 21 28.83 0 11.9 12 600 35.29 14.7 4.42 100 128 124 0 1.53 750 23 27.77 0 12.3 12.2 650 35.69 14.7 8.84 100 128 124 0 1.57 750 23 27.42 0 12.6 12.4 725 34.9 14.7 13.26 100 128 124 0 1.59 750 23 24.26 0 13.3 12.9 775 33.33 14.7 8.84 100 129 124 0 1.59 750 23 17.58 0 13.3 13.1 850 31.76 14.7 13.26 100 129 124 0 1.54 750 23 16.17 0 13.3 13.2 925 29.41 14.7 17.68 100 129 124 0 1.48 750 23 14.41 0 13.4 13.2 975 27.45 14.7 35.36 100 130 124 0 1.42 750 22 14.41 0 13.3 13 1000 25.49 14.7 114.92 100 130 124 0 1.34 750 22 15.12 0 13.1 12.9 1025 24.31 14.7 830.96 101 130 124 0 1.19 750 21 15.47 0 12.9 12.7 1000 23.14 14.7 848.64 101 130 124 0 1.16 750 21 15.82 0 12.5 12.4 950 23.14 14.7 857.48 101 130 124 0 1.16 750 21 15.82 0 12.4 12.2 900 23.53 14.7 848.64 101 130 124 0 1.13 750 21 17.58 0 12.4 12.2 825 24.31 14.7 839.8 101 130 124 0 1.14 750 21 19.69 0 12.2 12.1 750 25.88 14.7 707.2 101 130 124 0 1.19 750 21 20.39 0 11.9 12 700 27.45 14.7 61.88 102 130 124 0 1.28 750 21 27.07 0 12.2 12 650 29.41 14.7 4.42 102 130 124 0 1.36 750 21 29.53 0 12.2 12 700 30.59 14.7 13.26 102 130 124 0 1.43 750 21 26.72 0 12.2 12 725 30.98 14.7 13.26 102 130 124 0 1.45 750 21 26.02 0 12.2 12.1 750 30.59 14.7 17.68 102 130 124 0 1.46 750 21 18.63 0 12.4 12.2 800 30.2 14.7 13.26 102 131 124 0 1.48 750 21 18.28 0 12.7 12.5 850 28.63 14.7 17.68 102 131 124 0 1.45 750 21 16.88 0 12.7 12.6 875 27.84 14.7 26.52 102 131 124 0 1.43 750 21 16.52 0 12.9 12.8 900 26.67 14.7 44.2 102 132 124 0 1.4 750 21 16.88 0 13.3 13.1 925 25.88 14.7 150.28 102 132 124 0 1.37 750 21 15.12 0 13.4 13.2 925 25.1 14.7 826.54 103 132 124 0 1.25 750 20 15.12 0 13.5 13.3 925 24.71 14.7 866.32 103 132 124 0 1.24 750 20 15.47 0 13.2 13.2 925 23.92 14.7 870.74 103 132 124 0 1.22 750 20 15.47 0 13.3 13.2 925 23.92 14.7 870.74 103 132 124 0 1.21 750 20 17.58
Screenshot of my idle VE:
http://img521.imageshack.us/img521/6184/idvejj4.jpg
Last edited by ryan.h; Sep 29, 2006 at 03:00 PM.
Well, I discovered something. Something is happening at the 600rpm threshold to increase the BPW. For instance, going from 625 rpm, 27.5map, to 575rpm 29map, the BPW increases from 1.17mS to 1.28mS. This happens repeatably. The longer that it stays below 600rpm, the higher the BPW gets, upwards of 1.6mS. (The typical idle PW is 1.1mS.)
You guys can see my idle VE table, it's pretty flat.
You guys can see my idle VE table, it's pretty flat.
Moderator
iTrader: (1)
Joined: Mar 2002
Posts: 18,432
Likes: 233
From: Chasing Electrons
Car: check
Engine: check
Transmission: check
Double check your idle VE table axis. The picture above shows MAP as rows and RPM as columns. Code layout shows the opposite. MAP should be the columns, and RPM as rows.
As for the high PW's, from the snap shot above the O2 goes very low. Into the single digits. As it does the PW increases. Most likely from the proportional gains.
RBob.
As for the high PW's, from the snap shot above the O2 goes very low. Into the single digits. As it does the PW increases. Most likely from the proportional gains.
RBob.
Double check your idle VE table axis. The picture above shows MAP as rows and RPM as columns. Code layout shows the opposite. MAP should be the columns, and RPM as rows.
As for the high PW's, from the snap shot above the O2 goes very low. Into the single digits. As it does the PW increases. Most likely from the proportional gains.
RBob.
As for the high PW's, from the snap shot above the O2 goes very low. Into the single digits. As it does the PW increases. Most likely from the proportional gains.
RBob.
edit - checked it against the stock bin, and it is correct. Tunerpro just mixes things up to keep you on your toes.

Also, notice the samples 8-10, the o2 is solidly rich, and the BPW starts increasing because the RPM is below 600.
Last edited by ryan.h; Oct 2, 2006 at 10:04 AM.
ahh, wait a sec...
600 is the bottom of the table. So how does it calculate BPW when the RPM is off the tables?
This maybe?
It sounds like the 600/400 values need to be reduced if that is the correct table. I'll have to check the code to see where it is referenced.
600 is the bottom of the table. So how does it calculate BPW when the RPM is off the tables?
This maybe?
Code:
############################ # F163 TABLE # # MULTIPLIER VS RPM # # TABLE VALUE = MULTIPLIER # ############################ 89DA 08 8 8 USE 9 VALUE TABLE 89DB 01 1 0.004 MULT 0 RPM-SPEED 89DC 0A 10 0.04 MULT 200 89DD 2D 45 0.176 MULT 400 89DE 4F 79 0.31 MULT 600 89DF 8F 143 0.56 MULT 800 89E0 C0 192 0.75 MULT 1000 89E1 D5 213 0.832 MULT 1200 89E2 EA 234 0.914 MULT 1400 89E3 FF 255 0.996 MULT 1600
I'm not sure what I was thinking, I believe that's the crank PW multiplier table. However, the Base VE table has all the RPM values to 0, in a 2d table. The total VE is the 2d +3d tables added together. In cases where the rpm is off the chart (<600 or >4000), it uses the last cell of the table.
I tried adjusting the 400 and 0 rpm values of the 2d table down, but they appear to have no effect on the BPW.
So now I'm really confused. The PID routine does NOT override the BPW. (right?? or maybe the prop. gains are so off the wall that it takes huge jumps anyways) This implies that something else is taking over fueling when the RPM drops below 600. There has to be some stall saver algorithm I have overlooked.
Also, I checked the code for referenes to the idle gain table - and there was only ONE. Located at C6F9, that references 8C93. I'll have to look it again.
I tried adjusting the 400 and 0 rpm values of the 2d table down, but they appear to have no effect on the BPW.
So now I'm really confused. The PID routine does NOT override the BPW. (right?? or maybe the prop. gains are so off the wall that it takes huge jumps anyways) This implies that something else is taking over fueling when the RPM drops below 600. There has to be some stall saver algorithm I have overlooked.
Also, I checked the code for referenes to the idle gain table - and there was only ONE. Located at C6F9, that references 8C93. I'll have to look it again.
Last edited by ryan.h; Oct 3, 2006 at 03:14 PM.
Moderator
iTrader: (1)
Joined: Mar 2002
Posts: 18,432
Likes: 233
From: Chasing Electrons
Car: check
Engine: check
Transmission: check
Ryan, to be honest there is a lot on stuff going on in the $88 and $A1 code. Below 600 RPM it may be dropping into the n-alpha fueling routine. I really can't say one way or another. It may even be an arson mode issue.
As for disabling the prop gains, can zero them out. Then the integrator will rise and fall to take their place. This is because the PID loop is designed to oscillate.
As for C6F9 & 8C93, look at how the value in L0046 is created. Then how the prop gain table value is used after being stored in L0197.
RBob.
As for disabling the prop gains, can zero them out. Then the integrator will rise and fall to take their place. This is because the PID loop is designed to oscillate.
As for C6F9 & 8C93, look at how the value in L0046 is created. Then how the prop gain table value is used after being stored in L0197.
RBob.
Well, if I understand my assembly... and I don't...
it looks like it is using 8C89-
and 8C8D-
in some calculations with L0197. I'm guessing the 8C89 is the correct "P" fueling term. Guess I'll find out tomorrow.
The creation of L0046 makes my brain hurt. So many sets/resets.
just out of curiosity, what is "EECC"? And arson mode? Is that a typo? Is that like valet mode, but when someone sets fire to your car?
Also, I tried something today I never tried before - I set the idle to 600, in open loop. It actually idled pretty good. It had a slow 50 rpm roll though. IAC was not moving, and SA wasn't moving that much either. Probably have to up the lower RPM error advance/retard.
For the heck of it, tomorrow I'll try enabling "calculate BPW as Fn of airflow"...
it looks like it is using 8C89-
Code:
8C89 20 32 KIDLPGLO $20 UNIT LO PROP GAIN (USED IN PID/EECC CROSSTALK)
Code:
8C8D 18 24 KIDINTLO $18 UNIT LO INT GAIN (USED IN PID/EECC CROSSTALK)
The creation of L0046 makes my brain hurt. So many sets/resets.just out of curiosity, what is "EECC"? And arson mode? Is that a typo? Is that like valet mode, but when someone sets fire to your car?

Also, I tried something today I never tried before - I set the idle to 600, in open loop. It actually idled pretty good. It had a slow 50 rpm roll though. IAC was not moving, and SA wasn't moving that much either. Probably have to up the lower RPM error advance/retard.
For the heck of it, tomorrow I'll try enabling "calculate BPW as Fn of airflow"...
Last edited by ryan.h; Oct 3, 2006 at 10:10 PM.
Nope, that's not it. Idle still surges and BPW oscillates by 0.3mS at idle. Back to the code...

Okay, now wait a second....
You called this the Proportional Fueling/PID. I thought this was seperate from the O2 PID algorithm. To me, it looks like this is just used to update the integrator? The INT is stable compared to the BPW when it starts to surge.

Okay, now wait a second....
You called this the Proportional Fueling/PID. I thought this was seperate from the O2 PID algorithm. To me, it looks like this is just used to update the integrator? The INT is stable compared to the BPW when it starts to surge.
Last edited by ryan.h; Oct 4, 2006 at 12:19 PM.
Moderator
iTrader: (1)
Joined: Mar 2002
Posts: 18,432
Likes: 233
From: Chasing Electrons
Car: check
Engine: check
Transmission: check
Here is how the idle prop and INT delay state table works in $88. From my brief look at $A1 it is either the same or very close to the same. The RAM locations and EPROM locations are different. So will need to translate those from/to the masks.
The logic starts with creating a state value in L0044. This is done bit wise dependent upon different conditions. These are:
O2 Lean or Rich
Idle Speed High, Low, or OK
Engine Speed is Increasing, Decreasing, or Steady
Idle Speed delta from Desired > cal threshold
Idle Speed rate of Change > cal threshold
Once the proper bits are set or reset in L0044, it is used to index into the state table. Here is the state table layout that reflects the value in L0044:
It may take some study to understand the table layout, so lets give an example. Say the conditions that make up the value in L0044 are as such:
O2 Lean ($40)
Idle Speed Low ($20)
Engine Speed is Decreasing ($08)
Idle Speed delta from Desired > cal threshold ($02)
Idle Speed rate of Change > cal threshold ($01)
The $xx values show which bit is set for that condition. In this case each bit will be set. They could be cleared if the condition was different.
The value in L0044 will be: $6B or 107. So the 108th byte from the state table will be loaded and saved in RAM location L019A. This is for later use. That value is 9. (The 108th byte is retrieved with an index of 107 as the table starts with an index of 0. Which would be the 1st byte).
From the state table can either count out to the 108th byte, or drop down through the conditions as shown for the table. I made that indexed value bold in the table above. Note that the value from this table is an indexed retrieve, not an interpolated lookup.
Now we have the value from the state table in L019A, and it is a 9. This value is then broken into two values and used as indexes into two other tables. One being the proportional gain and the other an additional integrator update delay.
Here are those two tables:
The two low bits of 9 (in L019A) are used for the proportional gain table lookup. They being 01 (9 in binary is 1001), this will retrieve the second entry for a value of 16.
The next two higher bits of 9 are used for the additional integrator delay table lookup. They being 10 will retrieve the added int update delay from the third entry for a value of 12.
And there you have it. Interesting stuff.
RBob.
The logic starts with creating a state value in L0044. This is done bit wise dependent upon different conditions. These are:
O2 Lean or Rich
Idle Speed High, Low, or OK
Engine Speed is Increasing, Decreasing, or Steady
Idle Speed delta from Desired > cal threshold
Idle Speed rate of Change > cal threshold
Once the proper bits are set or reset in L0044, it is used to index into the state table. Here is the state table layout that reflects the value in L0044:
Code:
; ---------------------------------------------- ; Idle Proportional gain and INTegrator delay ; ; 112 entries starting at 0x8C86 ; ; Lookup into this table is from L0044. Which is ; built up as a bit mapped word. ; ; ; The table values are used as an index into ; the idle proprtional gain and INT delay tables: ; ; xxxx xxnn for the PROP gain table ; xxxx nnxx for the INT delay table ; ---------------------------------------------- ; ; L8C86 ; --------------------------------------------------------------------; ; | no change | increasing | decreasing | N/U | ; | ok rt dl bh| ok rt dl bh | ok rt dl bh | N/U | ; ; Rich: x0xx xxxx ; ; Idle OK: x000 xxxx ; ; 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 ; 16 ; ; Idle High: x001 xxxx ; ; 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 ; 32 ; ; Idle Low: x010 xxxx ; ; 1 2 2 2 1 0 2 2 2 4 4 4 0 0 0 0 ; 48 ; ; ; ; N/U: 0x011 xxxx ; ; 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ; 64 ; ; ; Lean: x1xx xxxx ; ; Idle OK: x100 xxxx ; ; 1 1 0 0 1 1 0 0 2 4 0 0 0 0 0 0 ; 80 ; ; Idle High: x101 xxxx ; ; 1 1 1 1 1 1 1 2 1 1 3 3 0 0 0 0 ; 96 ; ; Idle Low: x110 xxxx ; ; 3 4 5 5 3 2 2 3 5 7 8 9 0 0 0 0 ; 112 ; ; | 00xx | 01xx | 10xx | N/U | ; | 00 01 10 11| 00 01 10 11 | 00 01 10 11 | N/U | ; --------------------------------------------------------------------; ; | no change | increasing | decreasing | N/U | ; | ok rt dl bh| ok rt dl bh | ok rt dl bh | N/U | ; --------------------------------------------------------------------; ; L0044 ; ; $40 ; set when lean, clr when rich ; ; $30 ; clr when desired idle is correct ; $20 ; set idle too low ; $10 ; set idle too high ; ; $0C ; clear when engine speed not changing ; $08 ; engine speed is decreasing ; $04 ; engine speed is increasing ; ; $02 ; set when desired idle delta > 200 rpm (dl) | ; $01 ; set when engine speed delta rate > thres (rt) |- (bh) ; ; ----------------------------------------------
O2 Lean ($40)
Idle Speed Low ($20)
Engine Speed is Decreasing ($08)
Idle Speed delta from Desired > cal threshold ($02)
Idle Speed rate of Change > cal threshold ($01)
The $xx values show which bit is set for that condition. In this case each bit will be set. They could be cleared if the condition was different.
The value in L0044 will be: $6B or 107. So the 108th byte from the state table will be loaded and saved in RAM location L019A. This is for later use. That value is 9. (The 108th byte is retrieved with an index of 107 as the table starts with an index of 0. Which would be the 1st byte).
From the state table can either count out to the 108th byte, or drop down through the conditions as shown for the table. I made that indexed value bold in the table above. Note that the value from this table is an indexed retrieve, not an interpolated lookup.
Now we have the value from the state table in L019A, and it is a 9. This value is then broken into two values and used as indexes into two other tables. One being the proportional gain and the other an additional integrator update delay.
Here are those two tables:
Code:
; -------------------------------------- ; ; Proportional Gain for Idle vs L019A ; ; -------------------------------------- ;---------------------------------- ; ; gain ; L019A ;---------------------------------- L8C7C FCB 16 ; xxxx xx00 FCB 16 ; xxxx xx01 FCB 26 ; xxxx xx10 FCB 32 ; xxxx xx11 ; -------------------------------------- ; ; INTegrator update delay for idle vs L019A ; ; added to results of tbl's: L8C05 & L8C5E ; -------------------------------------- ;---------------------------------- ; ; ofst ; L019A ;---------------------------------- L8C80 FCB 24 ; xxxx 00xx FCB 16 ; xxxx 01xx FCB 12 ; xxxx 10xx FCB 4 ; xxxx 11xx
The next two higher bits of 9 are used for the additional integrator delay table lookup. They being 10 will retrieve the added int update delay from the third entry for a value of 12.
And there you have it. Interesting stuff.
RBob.
Last edited by RBob; Oct 5, 2006 at 08:58 AM.
Ahhh... for future reference, the idle proportional fuel gain table in $a1 is:
I don't know why the commenter chose to lay it out that way, vs a table (which it is)
Code:
8C89 20 32 KIDLPGLO $20 UNIT LO PROP GAIN (USED IN PID/EECC CROSSTALK) 8C8A 30 48 KIDLPGNM $30 UNIT NOMINAL PROP GAIN (USED IN PID/EECC CROSSTALK) 8C8B 30 48 KIDLPGHI $30 UNIT HI PROP GAIN (USED IN PID/EECC CROSSTALK) 8C8C 30 48 KIDLPGXH $30 UNIT XTRA HI PROP GAIN (USED IN PID/EECC
Well... I tried changing the values to 6-13, and I'm seeing no difference. It still surges, although it is perhaps lightly less willing to begin surging (I have to start it by turning on the blower fan). The fuel also still ramps up when it is below 600rpm. I still can't determine whether this ramp up is helping or hurting.
I'll have to do an open loop test to see what it does there. As I mentioned previously, it's still not capable of dealing with sudden idle load changes. When I kick on the blower fan it will take a huge voltage and rpm hit. Sometimes it stalls so fast you'd think someone flipped the ignition switch. It's so odd that it doesn't do that in open loop.
oh, btw, I tried checking the "calculate bpw as fn of airflow" and it wouldn't even stay running.
I'll have to do an open loop test to see what it does there. As I mentioned previously, it's still not capable of dealing with sudden idle load changes. When I kick on the blower fan it will take a huge voltage and rpm hit. Sometimes it stalls so fast you'd think someone flipped the ignition switch. It's so odd that it doesn't do that in open loop.
oh, btw, I tried checking the "calculate bpw as fn of airflow" and it wouldn't even stay running.
Supreme Member
iTrader: (2)
Joined: Jul 2003
Posts: 3,205
Likes: 0
From: Dallas, TX area
Car: 91 Formula WS6 (Black, T-Tops)
Engine: 383 MiniRam (529 HP, 519 TQ - DD2K)
Transmission: Built '97 T56, Pro 5.0, CF-DF
Axle/Gears: 4.11 posi Ford 9"
That's starting to sound like the voltage vs. injector pulse width table needs massaging (at least that's what it's called in $8D)
I've got one of these:
Is that similar? It sounds like that's added to the BPW as the battery voltage changes. My idle PW is about 1mS... should I try flattening out the table?
Code:
###################################################### # F33 TABLE FUEL BIAS # # FUEL INJECTOR OFFSET VS. BATTERY VOLTAGE # # TABLE VALUE = MSEC * 32.768 # ###################################################### 89A8 10 16 16 USE 17 VALUE TABLE 89A9 16 22 0.67 MSEC 0.0 VOLTS-BATTERY 89AA 16 22 0.67 MSEC 1.6 89AB 16 22 0.67 MSEC 3.2 89AC 16 22 0.67 MSEC 4.8 89AD B2 178 5.43 MSEC 6.4 89AE 4E 78 2.38 MSEC 8.0 89AF 32 50 1.53 MSEC 9.6 89B0 20 32 0.98 MSEC 11.2 89B1 1A 26 0.8 MSEC 12.8 89B2 13 19 0.58 MSEC 14.4 89B3 0D 13 0.4 MSEC 16.0 89B4 09 9 0.27 MSEC 17.6 89B5 07 7 0.2 MSEC 19.2 89B6 05 5 0.15 MSEC 20.8 89B7 03 3 0.1 MSEC 22.4 89B8 01 1 0.03 MSEC 24.0 89B9 00 0 0 MSEC 25.5
Supreme Member
iTrader: (2)
Joined: Jul 2003
Posts: 3,205
Likes: 0
From: Dallas, TX area
Car: 91 Formula WS6 (Black, T-Tops)
Engine: 383 MiniRam (529 HP, 519 TQ - DD2K)
Transmission: Built '97 T56, Pro 5.0, CF-DF
Axle/Gears: 4.11 posi Ford 9"
From what I've always heard (again, I'm no expert), base pulse widths below 1ms are quite troublesome. Injectors are not reliably opening and closing plus injecting fuel at that short of pulse width. 2ms is about the minimum I've seen recommended. So if anything, you might need to increase the values in that table, especially at the voltages it drops to when the blower kicks on, etc. Any chance you've data logged and can see the voltage drops?
I always thought for low PW's, it doubles up the open time, and fires half as often? My average PW at idle is about 1.2mS.
Here's when I turned the fan on to high:
Voltage dips to 10 and the RPM's take a dive. Again, it doesn't do this in open loop (except for the voltage dip of course). It has more torque it seems, and can react to changes in idle load with ease (even at 600rpm).
btw, I have no ideas why the BLM is at 114 here. Something I changed must have affected it, because it was at 126 before.
Here's when I turned the fan on to high:
Code:
TPS % CTS Battery FuelPump Speed MAP RunTime AFR O2 Crosscts INT BLM Cell BPW DesiredRPM IAC Spark % Deg F Volts Volts RPM KPA Seconds mV Crosses mSec RPM Steps Degrees 0 194.9 12.3 12.3 725 24.31 228 14.7 861.9 37 131 114 0 1.11 700 8 16.17 0 194.9 12.1 11.9 675 25.49 228 14.7 724.88 37 131 114 0 1.16 700 8 22.15 0 194.9 11.8 11.6 600 27.84 228 14.7 853.06 37 131 114 0 1.17 700 9 23.55 0 194.9 11.4 11.4 550 30.2 228 14.7 839.8 37 131 114 0 1.24 700 11 18.98 0 194.9 11.2 11.3 500 32.94 228 14.7 795.6 37 131 114 0 1.36 700 14 17.23 0 194.9 10.4 11.4 400 36.86 228 14.7 521.56 38 130 114 0 1.48 700 18 16.88 0 194.9 11.4 11 400 41.18 228 14.7 44.2 38 130 114 0 1.69 700 23 17.93 0 194.9 11.5 11.2 475 43.14 229 14.7 8.84 38 130 114 0 1.77 700 23 17.93 0 194.9 11.5 11.3 525 43.53 229 14.7 13.26 38 130 114 0 1.79 700 24 20.74 0 194.9 11.9 11.6 650 42.75 229 14.7 4.42 38 130 114 0 1.8 700 24 21.45 0 194.9 11.9 11.7 750 40 229 14.7 4.42 38 131 114 0 1.79 700 23 14.41 0 194.9 12.3 12 875 36.08 229 14.7 4.42 38 131 114 0 1.65 700 21 13.71 0 194.9 12.9 12.7 975 31.76 229 14.7 13.26 38 131 114 0 1.39 700 18 12.66 0 194.9 12.8 12.6 1050 27.84 229 14.7 640.9 38 132 114 0 1.24 700 15 13.71 0 194.9 12.9 12.7 1075 24.31 230 14.7 844.22 41 132 114 0 1.13 700 13 15.12
btw, I have no ideas why the BLM is at 114 here. Something I changed must have affected it, because it was at 126 before.
Moderator
iTrader: (1)
Joined: Mar 2002
Posts: 18,432
Likes: 233
From: Chasing Electrons
Car: check
Engine: check
Transmission: check
I agree, either a bad fan or a wiring issue. Shouldn't see the voltage drop like that.
As for the idle proportional gains, it sounds like reducing them has helped stabilize the idle. Which is the intent.
Looking at the log above (post # 35), the first two lines. The desired idle is 700 RPM, with the first line at 725 RPM and the second line at 675 RPM.
Each of those is 25 RPM from the desired. Which is real close to the desired. Then check thee SA value for those two lines. There is a 6 degree difference. I would consider that too great a difference. Reduce the idle correction timing so that there is 2 degrees when within 25 RPM of the desired idle.
As the RPM continues to fall the SA timing also drops off. From 22 deg at 675 RPM, to 19 deg at 550 RPM, and 17 deg at 500 RPM. This too is contributing to the stall. The MAP is still decent at that low an RPM, should be able to maintain or increase the SA without issue.
Is the MEMCAL set up for an 8cylinder? And the BIN cylinder count set for an 8 cylinder? If not that is going to cause additional issues.
RBob.
As for the idle proportional gains, it sounds like reducing them has helped stabilize the idle. Which is the intent.
Looking at the log above (post # 35), the first two lines. The desired idle is 700 RPM, with the first line at 725 RPM and the second line at 675 RPM.
Each of those is 25 RPM from the desired. Which is real close to the desired. Then check thee SA value for those two lines. There is a 6 degree difference. I would consider that too great a difference. Reduce the idle correction timing so that there is 2 degrees when within 25 RPM of the desired idle.
As the RPM continues to fall the SA timing also drops off. From 22 deg at 675 RPM, to 19 deg at 550 RPM, and 17 deg at 500 RPM. This too is contributing to the stall. The MAP is still decent at that low an RPM, should be able to maintain or increase the SA without issue.
Is the MEMCAL set up for an 8cylinder? And the BIN cylinder count set for an 8 cylinder? If not that is going to cause additional issues.
RBob.
Likely a wiring issue. When measured at the battery terminal, the voltage doesn't drop much at all. In fact, it's almost a rock solid 14.4 volts, so the ECM is measuring a full 1V drop.
I'll change the SA... I didn't know how much was enough. I figured with large errors you'd want more IAC correction vs spark advance... guess i was wrong.
The memcal/bin is set up for 8cyl.
I'll change the SA... I didn't know how much was enough. I figured with large errors you'd want more IAC correction vs spark advance... guess i was wrong.

The memcal/bin is set up for 8cyl.
Supreme Member
iTrader: (2)
Joined: Jul 2003
Posts: 3,205
Likes: 0
From: Dallas, TX area
Car: 91 Formula WS6 (Black, T-Tops)
Engine: 383 MiniRam (529 HP, 519 TQ - DD2K)
Transmission: Built '97 T56, Pro 5.0, CF-DF
Axle/Gears: 4.11 posi Ford 9"
Before I changed anything in the bin, I'd do like RBob and others have said - find out why the voltage is dropping like that. I should not do that. EIther the battery or alternator or fan is bad, or there is a wiring problem. No amount of bin mods will fix that, and you're likely to just introduce mpre prpblems you'll have to un-correct later. Get the battery and alternator checked first - places like AutoZone do that for free. There is no reason to try and work around that voltage drop - fix it first then go to the bin for other stuff. At least that's my opinion on all of it. YMMV of course.
It's a wiring problem. It's possible the battery is bad/old, I can get that checked out too. The alternator is new. The coolant fan would stall the engine too if it weren't for the added IAC steps. I think it's just my setup, because others have the same problems too. It could be that the alternator I have is (supposed to be) computer controlled and I have the control coil tied to +12V to put out power all the time.
In any event, it's entirely possible that the voltage drop is because of the RPM drop. That implicates the battery, which it likely is, IIRC it's about 4 years old and was stored outside in subzero temps for about a year. I'll put it on the list.
Besides that, the rpm does NOT drop when it is in open loop. Or at least not very much.
In any event, it's entirely possible that the voltage drop is because of the RPM drop. That implicates the battery, which it likely is, IIRC it's about 4 years old and was stored outside in subzero temps for about a year. I'll put it on the list.
Besides that, the rpm does NOT drop when it is in open loop. Or at least not very much.
RBob! I think your spark advance trick did it! It was probably a combination of things, mainly changing the fuel proportional term, the IAC integral, proportional and derivative terms, and the spark advance... but idle is pretty dang good now. It occasionally dips or surges 75rpm for some unknown reason, but that's SO much better than what it was.
Thanks again guys, for all your help!!!
(I'll get that battery checked out later too!)
Thanks again guys, for all your help!!!
(I'll get that battery checked out later too!)
Moderator
iTrader: (1)
Joined: Mar 2002
Posts: 18,432
Likes: 233
From: Chasing Electrons
Car: check
Engine: check
Transmission: check
If you haven't made the idle O2 window change that too will help. See post 13 it lists the 3 locationcs to change. Bump each up about 50 mV and check the affect.
RBob.
Thread
Thread Starter
Forum
Replies
Last Post









