Notices
ECU Flash

Advanced fuel control options

Thread Tools
 
Search this Thread
 
Old Oct 22, 2009, 03:37 AM
  #16  
Evolved Member
 
jcsbanks's Avatar
 
Join Date: May 2006
Location: UK
Posts: 2,399
Likes: 0
Received 5 Likes on 4 Posts
Very nice job mrfred!
Old Oct 22, 2009, 07:47 AM
  #17  
Evolved Member
iTrader: (8)
 
03whitegsr's Avatar
 
Join Date: Nov 2006
Location: Utah
Posts: 4,001
Received 14 Likes on 12 Posts
Great work, thank you for all you do on the stock ECU.

Is the AFRMAP value calculated in a seperate routine based on the low and high tables and the octane value (cam position as well on the IX)?



Originally Posted by mrfred
Yeah, I'm a bit surprised too. jcsbanks indicated in his analysis that mafmultiwarmup is used. The code shows that it is used, but in the denominator and only after the engine has reached full operating temperature. Strange. The CAM value can be looked up from a table versus coolant temp, but its not a smooth progression from cold to hot as you might expect, and there is a conditional on whether the value from the table is used (versus using a set value of 128).
That's just amazing as I've been able to log, repetitively, a very distinct warm up AFR curve while running open loop. The car took about 5-7 minutes to fully warm up from 0C-15C range up to operating temperature and the AFR at a given temperature was very repeatable but not the 14.7:1 that was ran at the same conditions after ~70C was reached. This was at low loads, under 400Hz or so on the airflow.

Makes sense at higher loads though as you really don't want significant enrichment/enleanment on a cool motor.

Last edited by 03whitegsr; Oct 22, 2009 at 07:52 AM.
Old Oct 22, 2009, 07:49 AM
  #18  
Evolved Member
iTrader: (2)
 
l2r99gst's Avatar
 
Join Date: Mar 2004
Location: CA
Posts: 3,499
Likes: 0
Received 4 Likes on 4 Posts
I'm very busy this week, but if no one has found these tables for 96530006 by next week, I will get to work on it.

Thanks for the hard work. I'm interested in looking at some of these new tables in reference to the jumpy IPW that I saw with SD.


Eric
Old Oct 22, 2009, 07:52 AM
  #19  
Evolved Member
iTrader: (2)
 
logic's Avatar
 
Join Date: Apr 2003
Location: Berkeley, CA
Posts: 1,022
Likes: 0
Received 5 Likes on 4 Posts
Eric, I've started on the combined list that fosty posted; I'll hopefully have a post in the next few hours.
Old Oct 22, 2009, 09:59 AM
  #20  
EvoM Guru
Thread Starter
iTrader: (50)
 
mrfred's Avatar
 
Join Date: Mar 2006
Location: Tri-Cities, WA // Portland, OR
Posts: 9,675
Received 128 Likes on 96 Posts
Originally Posted by 03whitegsr
Great work, thank you for all you do on the stock ECU.

Is the AFRMAP value calculated in a seperate routine based on the low and high tables and the octane value (cam position as well on the IX)?

That's just amazing as I've been able to log, repetitively, a very distinct warm up AFR curve while running open loop. The car took about 5-7 minutes to fully warm up from 0C-15C range up to operating temperature and the AFR at a given temperature was very repeatable but not the 14.7:1 that was ran at the same conditions after ~70C was reached. This was at low loads, under 400Hz or so on the airflow.

Makes sense at higher loads though as you really don't want significant enrichment/enleanment on a cool motor.
Yes, there is a separate set of routines for AFRMAP. Its been a while since I've looked at it, but I don't recall seeing an AFRMAP compensation based on cam timing for the IX.

It surprised me as well when I realized that there are no tables that directly affect the base FPW vs coolant temp during warmup. There are a few unknowns still in the equation though, especially FFFF6B32. I've logged this, and it does continuously vary. I haven't logged it from a cold start though to see what its doing.
Old Oct 22, 2009, 10:25 AM
  #21  
EvoM Community Team
iTrader: (15)
 
fostytou's Avatar
 
Join Date: Sep 2006
Location: Aurora, IL
Posts: 3,143
Received 6 Likes on 6 Posts
Originally Posted by Appauldd
Frosty.....I noticed the same thing....



I just left it as the ECU doing its thing. Could it be from the injectors rather than the hard pipes affecting the MAF....maybe both?
I was definitely OK with open filter and 1200cc injectors. The problem popped up after a switch to the hard pipe and no other changes (took a few days to happen though). It learns itself out of it, but pops back up now and then. Usually it will do it if I disconnect power to reset the ECU. When I would change the (incorrect) initial ISCV position tables it would go away for a little while, then the ECU would "learn" something and it would come back.

I'm not sure if it helped completely, but for a temporary fix try lowering your lowest maf compensation cell slightly (or raise the other ones in the LTFT low area).... that is, unless you want to start testing these tables

Originally Posted by Fast_Freddie
Fosty & Applaudd... what is your O2 Feedback (STFT) doing when the car goes rich? Is is pegged at +25 or what?

As you both know I have the same scenario...
I haven't logged STFT in a while. I know I have logs of it, but they would be impossible to find. If the condition comes up again I'll let you know
Old Oct 22, 2009, 10:42 AM
  #22  
Evolved Member
iTrader: (2)
 
logic's Avatar
 
Join Date: Apr 2003
Location: Berkeley, CA
Posts: 1,022
Likes: 0
Received 5 Likes on 4 Posts
Okay, a few initial findings before I post up what I have so far for 96530006:
  • There appears to be only one Sync Load Accel Compensation vs Coolant Temp table.
  • The Sync Load Change Idle Compensation logic doesn't appear to exist at all; or, if it does, the code is totally different.
  • There doesn't appear to be an alternate "Async Accel vs Coolant Temp Adder", only a main table.
Everything else was pretty easy to locate. mrfred, I don't know how you didn't go blind staring at this stuff. Is there any chance that you could confirm the above?
Old Oct 22, 2009, 10:54 AM
  #23  
Evolved Member
iTrader: (2)
 
logic's Avatar
 
Join Date: Apr 2003
Location: Berkeley, CA
Posts: 1,022
Likes: 0
Received 5 Likes on 4 Posts
For 96530006:
PHP Code:
<!-- 1. Cranking primer pulse -->

<
scaling name="TimeInjCranking" units="ms" toexpr="x*0.008" frexpr="x/0.008" format="%.1f" min="0" max="500" inc="1" storagetype="uint16" endian="big"/>
<
table name="Cranking Primer Initial Pulse" category="Fuel" type="2D" level="2" scaling="TimeInjCranking" address="58d0">
  <
table name="Coolant Temperature" type="Y Axis" elements="9" scaling="Temp" address="69d8"/>
</
table>

<!-- 
2. Cranking fuel pulse width -->

<
scaling name="TimeTCOMPCrankingHack" units="Approximate ms" toexpr="x*0.9" frexpr="x/0.9" format="%.1f" min="0" max="500" inc="1" storagetype="uint8" endian="big"/>
<
table name="Initial Cranking IPW vs Coolant Temp" category="Fuel" address="5b3a" type="2D" level="2" scaling="TimeTCOMPCrankingHack">
  <
table name="Engine Temp" address="69f4" type="Y Axis" elements="11" scaling="Temp"/>
</
table>

<
scaling name="Percent (128)" units="Percent (%)" toexpr="x/1.28" frexpr="x*1.28" format="%.0f" min="0" max="100" inc="1" storagetype="uint8" endian="big"/>
<
table name="Cranking IPW Compensation vs Time" category="Fuel" type="2D" level="2" scaling="Percent (128)" address="382a">
  <
table name="Time Since Engaging Starter (sec)" type="Static Y Axis" elements="20">
    <
data>0.000</data>
    <
data>0.022</data>
    <
data>0.044</data>
    <
data>0.066</data>
    <
data>0.088</data>
    <
data>0.110</data>
    <
data>0.132</data>
    <
data>0.154</data>
    <
data>0.176</data>
    <
data>0.198</data>
    <
data>0.220</data>
    <
data>0.242</data>
    <
data>0.264</data>
    <
data>0.286</data>
    <
data>0.308</data>
    <
data>0.330</data>
    <
data>0.352</data>
    <
data>0.374</data>
    <
data>0.396</data>
    <
data>0.418</data>
  </
table>
</
table>

<!-- 
3. Main synchronous fuel pulsewidth -->

<
table name="Airflow/Hz Raw Scaling" category="Fuel" type="2D" level="2" scaling="uint8" address="3306">
  <
table name="MAF Hz" type="Y Axis" elements="21" scaling="MAFHz" address="67a0"/>
</
table>

<
table name="Airflow/Hz Offset Raw" category="Fuel" type="1D" level="2" scaling="uint16" address="1512"/>

<
table name="MAF Compensation" category="Fuel" type="2D" level="2" scaling="uint8" address="3322">
  <
table name="MAF Hz" type="Y Axis" elements="21" scaling="MAFHz" address="67a0"/>
</
table>

<
scaling name="AirTempBaroFactor" units="Fraction" toexpr="x/48" frexpr="x*48" format="%.2f" min="0" max="2" inc="0.02" storagetype="uint16" endian="big"/>
<
scaling name="AirTempBaroCorrection" units="Fraction" toexpr="x/128" frexpr="x*128" format="%.2f" min="0" max="2" inc="0.02" storagetype="uint8" endian="big"/>

<
table name="Airflow/Hz Baro and Air Temp Compensation" category="Fuel" type="3D" level="2" swapxy="true" scaling="AirTempBaroCorrection" address="3351">
<
table name="Rel Air Volume (20C, 1 bar)" type="X Axis" elements="4" scaling="AirTempBaroFactor" address="6870"/>
  <
table name="MAF Hz" type="Y Axis" elements="9" scaling="MAFHz" address="6808"/>
</
table>

<
table name="Injector Size Scaling" category="Fuel" type="1D" scaling="InjectorScaling" address="1506"/>

<!-- 
3ABase fuel pulse -->

<
scaling name="Percent64(8-bit)" units="%" toexpr="100*x/64" frexpr="64*x/100" format="%.0f" min="0" max="400" inc="1" storagetype="uint8" endian="big"/>

<
table name="BFPW Startup Comp vs Coolant Temp #1" category="Fuel" address="3732" type="2D" level="2" scaling="Percent64(8-bit)">
  <
table name="Coolant Temp" address="69d8" type="Y Axis" elements="9" scaling="Temp"/>
</
table>

<
table name="BFPW Startup Comp vs Coolant Temp #2" category="Fuel" address="3742" type="2D" level="2" scaling="Percent64(8-bit)">
  <
table name="Coolant Temp" address="69d8" type="Y Axis" elements="9" scaling="Temp"/>
</
table>

<
table name="MAF Comp vs Coolant Temp #1" category="Fuel" address="3722" type="2D" level="1" scaling="uint8">
  <
table name="Coolant Temp" address="69d8" type="Y Axis" elements="9" scaling="Temp"/>
</
table>

<
table name="MAF Comp vs Coolant Temp #2" category="Fuel" address="3712" type="2D" level="1" scaling="uint8">
  <
table name="Coolant Temp" address="69d8" type="Y Axis" elements="9" scaling="Temp"/>
</
table>

<
scaling name="AirDensComp" units="Air Density Correction" toexpr="x/129" frexpr="x/129" format="%.3f" min="0" max="2" inc="0.01" storagetype="uint8" endian="big"/>

<
table name="Air Density Compensation for Load And IPW" category="Misc" type="2D" level="2" scaling="AirDensComp" address="36dc">
  <
table name="MAF Air Temp" type="Y Axis" elements="8" scaling="Temp" address="6af0"/>
</
table>

<
scaling name="LT Trim Hz" units="Hz" toexpr="x*6.29" frexpr="x/6.29" format="%.0f" min="0" max="1610" inc="6.29" storagetype="uint8" endian="big"/>
<
table name="Closed Loop - LT Trim Control Ranges" category="Fuel" address="35E5" type="2D" level="1" scaling="LT Trim Hz">
  <
table name="Conditions" type="Static Y Axis" elements="4">
  <
data>Low -> Mid</data>
  <
data>Mid -> Low</data>
  <
data>Mid -> High</data>
  <
data>High -> Mid</data>
  </
table>
</
table>

<!-- 
3BSync Load Accel -->

<
scaling name="Mult128" units="Factor" toexpr="x/128" frexpr="x/128" format="%.2f" min="0" max="5" inc="0.02" storagetype="uint8" endian="big"/>

<
table name="Sync Load Accel Compensation vs RPM" category="Fuel" type="2D" scaling="Mult128" level="2" address="3864">
  <
table name="RPM" type="Y Axis" elements="15" scaling="RPM" address="6622"/>
</
table>

<
table name="Sync Load Accel Compensation vs Coolant Temp Table #1" category="Fuel" type="2D" level="2" scaling="Mult128" address="3856">
  <
table name="Coolant Temp" type="Y Axis" elements="8" scaling="Temp" address="69be"/>
</
table>

<
scaling name="LoadUncompDelta" units="Uncomp Load Change" toexpr="x*0.1862" frexpr="x/0.1862" format="%.1f" min="0" max="160" inc="1" storagetype="uint8" endian="big"/>
<
table name="Min Uncomp Load Change at Steady Throttle for SyndLoadAccel/Decel Contribution" category="Fuel" address="3888" type="2D" level="1" scaling="LoadUncompDelta">
  <
table name="Uncompensated Load" type="Static Y Axis" elements="13">
    <
data>0</data>
    <
data>24</data>
    <
data>48</data>
    <
data>72</data>
    <
data>95</data>
    <
data>119</data>
    <
data>143</data>
    <
data>167</data>
    <
data>191</data>
    <
data>215</data>
    <
data>238</data>
    <
data>262</data>
    <
data>286</data>
  </
table>
</
table>

<
table name="Min Uncomp Load Change at Changing Throttle for SyncLoadAccel/Decel Contribution" category="Fuel" address="3895" type="2D" level="1" scaling="LoadUncompDelta">
  <
table name="Uncompensated Load" type="Static Y Axis" elements="13">
    <
data>0</data>
    <
data>24</data>
    <
data>48</data>
    <
data>72</data>
    <
data>95</data>
    <
data>119</data>
    <
data>143</data>
    <
data>167</data>
    <
data>191</data>
    <
data>215</data>
    <
data>238</data>
    <
data>262</data>
    <
data>286</data>
  </
table>
</
table>

<
scaling name="x54d16" units="Uncomp Load" toexpr="x*54/16*0.1862" frexpr="x/(54/16*0.1862)" format="%.0f" min="0" max="160" inc="1" storagetype="uint8" endian="big"/>
<
table name="Ceiling Load vs RPM for Sync Load Accel/Decel Contributions" category="Fuel" address="391e" type="2D" level="1" scaling="x54d16">
  <
table name="RPM" address="6576" type="Y Axis" elements="10" scaling="RPM"/>
</
table>

<
scaling name="LoadMaster16" units="Uncomp Load" toexpr="x*0.1862" frexpr="x/0.1862" format="%.0f" min="0" max="160" inc="1" storagetype="uint16" endian="big"/>
<
table name="Sync Load Accel DeltaMasterLoadPos Ceiling Value" category="Fuel" address="163a" type="1D" level="1" scaling="LoadMaster16"/>

<!-- 
3CSync Load Decel Subtractor -->

<
table name="Decel IPW Subtraction Comp vs RPM" category="Fuel" address="393c" type="2D" level="2" scaling="Mult128">
  <
table name="RPM" address="6576" type="Y Axis" elements="10" scaling="RPM"/>
</
table>

<
table name="Decel IPW Subtraction Comp vs Load" category="Fuel" address="394c" type="2D" level="2" scaling="Mult128">
  <
table name="Load" address="66b6" type="Y Axis" elements="14" scaling="Load"/>
</
table>

<
table name="Decel IPW Subtraction Comp vs Coolant Temp" category="Fuel" address="392e" type="2D" level="2" scaling="Mult128">
  <
table name="Coolant Temp" address="69be" type="Y Axis" elements="8" scaling="Temp"/>
</
table>

<
table name="Sync Load Decel DeltaMasterLoadNeg Ceiling Value" category="Fuel" address="163c" type="1D" level="1" scaling="LoadMaster16"/>

<!-- 
3DSync Load Change Idledoesn't exist in 96530006! -->

<!-- 4. Async TPS Accel Enrichment -->

<table name="Async Accel Pause Period" category="Fuel" address="1654" type="1D" level="2" scaling="uint16"/>

<table name="Async Accel Min TPS Delta" category="Fuel" address="1656" type="1D" level="2" scaling="ThrottlePercentage"/>

<scaling name="AsyncAccelMaxFPW" units="ms" toexpr="x*32*0.008" frexpr="x/(32*0.008)" format="%.2f" min="0" max="20" inc="0.02" storagetype="uint16" endian="big"/>
<table name="Async Accel Max Pulsewidth" category="Fuel" address="1658" type="1D" level="2" scaling="AsyncAccelMaxFPW"/>

<scaling name="Mult128-16" units="Multiplication Factor" toexpr="x/128" frexpr="x/128" format="%.2f" min="0" max="5" inc="0.02" storagetype="uint16" endian="big"/>
<table name="Async Accel Max Total Contribution During Accel Period" category="Fuel" address="165A" type="1D" level="2" scaling="Mult128-16"/>

<table name="Async Accel Mult to Coolant Temp Adder During 5 Sec After Startup" category="Fuel" address="165c" type="1D" level="2" scaling="Mult128-16"/>

<table name="Async Accel Above TPS Enrichment Cutoff vs RPM" category="Fuel" address="38b2" type="2D" level="2" scaling="ThrottlePercentage8">
  <table name="RPM" address="6622" type="Y Axis" elements="10" scaling="RPM"/>
</table>

<table name="Async Accel Multiplier vs TPS Delta" category="Fuel" address="38a2" type="2D" level="2" scaling="Mult128">
  <table name="TPS Delta" type="Static Y Axis" elements="9">
    <data>0.0%</data>
    <data>1.6%</data>
    <data>3.1%</data>
    <data>4.7%</data>
    <data>6.3%</data>
    <data>7.8%</data>
    <data>9.4%</data>
    <data>11.0%</data>
    <data>12.5%</data>
  </table>
</table>

<table name="Async Accel vs RPM Adder" category="Fuel" address="38d0" type="2D" level="2" scaling="uint8">
  <table name="RPM" address="6622" type="Y Axis" elements="15" scaling="RPM"/>
</table>

<table name="Async Accel vs Coolant Temp Adder (Main)" category="Fuel" address="38c2" type="2D" level="2" scaling="uint8">
  <table name="Coolant Temp" address="69be" type="Y Axis" elements="8" scaling="Temp"/>
</table> 
Edit: Updated with a bunch of missing tables from l2r99gst, plus a few more after I did a side-by-side comparison with mrfred's original two posts.

Last edited by logic; Apr 13, 2010 at 11:51 AM. Reason: Add missing tables.
Old Oct 22, 2009, 11:28 AM
  #24  
EvoM Community Team
iTrader: (15)
 
fostytou's Avatar
 
Join Date: Sep 2006
Location: Aurora, IL
Posts: 3,143
Received 6 Likes on 6 Posts
FYI, somehow I'm missing this scaling: Can someone post it?

Percent64(8-bit)
Old Oct 22, 2009, 01:05 PM
  #25  
Evolved Member
iTrader: (2)
 
logic's Avatar
 
Join Date: Apr 2003
Location: Berkeley, CA
Posts: 1,022
Likes: 0
Received 5 Likes on 4 Posts
You didn't miss it, because I don't think it was ever posted; I think it's a mrfred-ism.

I suspect it looks something like this:
PHP Code:
<scaling name="Percent64(8-bit)" units="%" toexpr="100*x/64" frexpr="64*x/100" format="%.0f" min="0" max="400" inc="1" storagetype="uint8" endian="big"/> 
That's just a guess, though, and there might need to be a "-128" in there.
Old Oct 22, 2009, 01:39 PM
  #26  
EvoM Guru
Thread Starter
iTrader: (50)
 
mrfred's Avatar
 
Join Date: Mar 2006
Location: Tri-Cities, WA // Portland, OR
Posts: 9,675
Received 128 Likes on 96 Posts
Originally Posted by logic
Okay, a few initial findings before I post up what I have so far for 96530006:
  • There appears to be only one Sync Load Accel Compensation vs Coolant Temp table.
  • The Sync Load Change Idle Compensation logic doesn't appear to exist at all; or, if it does, the code is totally different.
  • There doesn't appear to be an alternate "Async Accel vs Coolant Temp Adder", only a main table.
Everything else was pretty easy to locate. mrfred, I don't know how you didn't go blind staring at this stuff. Is there any chance that you could confirm the above?
I definitely need to update my eyeglass prescription now! Anyhow, I did verify that the tables you mentioned are indeed not present. There is a new flag in the 8859 ROM that chooses between the two tables. The 9653 ROM doesn't have that flag. And there is no sync load change idle subroutine, so that explains why there are no tables for that. I didn't verify any of the other tables though. I assume you've got those correct.
Old Oct 22, 2009, 01:45 PM
  #27  
Evolved Member
iTrader: (2)
 
logic's Avatar
 
Join Date: Apr 2003
Location: Berkeley, CA
Posts: 1,022
Likes: 0
Received 5 Likes on 4 Posts
Originally Posted by mrfred
I definitely need to update my eyeglass prescription now! Anyhow, I did verify that the tables you mentioned are indeed not present. There is a new flag in the 8859 ROM that chooses between the two tables. The 9653 ROM doesn't have that flag. And there is no sync load change idle subroutine, so that explains why there are no tables for that. I didn't verify any of the other tables though. I assume you've got those correct.
Good to know I'm not going crazy; I hunted for the sync load change idle stuff for quite a while before finally deciding it probably wasn't there. Thanks for checking those; I'm hoping someone else who cares about 9653 will double-check the rest.

I've deleted the commented-out entries from my original post, since I'd rather someone didn't get confused by them.
Old Oct 22, 2009, 03:01 PM
  #28  
EvoM Guru
Thread Starter
iTrader: (50)
 
mrfred's Avatar
 
Join Date: Mar 2006
Location: Tri-Cities, WA // Portland, OR
Posts: 9,675
Received 128 Likes on 96 Posts
Originally Posted by logic
Good to know I'm not going crazy; I hunted for the sync load change idle stuff for quite a while before finally deciding it probably wasn't there. Thanks for checking those; I'm hoping someone else who cares about 9653 will double-check the rest.

I've deleted the commented-out entries from my original post, since I'd rather someone didn't get confused by them.
I did randomly compare a few of the tables in the 9653 that were clearly in the correct subroutines and noticed that some of the values were different between the 9653 tables and the corresponding 8859 tables, so it could be a challenge to verify the tables by any method except finding common code among subroutines.
Old Oct 22, 2009, 03:07 PM
  #29  
Evolved Member
iTrader: (2)
 
logic's Avatar
 
Join Date: Apr 2003
Location: Berkeley, CA
Posts: 1,022
Likes: 0
Received 5 Likes on 4 Posts
Originally Posted by mrfred
I did randomly compare a few of the tables in the 9653 that were clearly in the correct subroutines and noticed that some of the values were different between the 9653 tables and the corresponding 8859 tables, so it could be a challenge to verify the tables by any method except finding common code among subroutines.
*nod* That's exactly how I ended up tracking the tables down; comparing code between 8859 and 9653. Almost all of the tables appear to have slightly different data, but the code looks identical.

By the way, did I get your scaling for Percent64(8-bit) right above?
Old Oct 22, 2009, 03:18 PM
  #30  
Evolved Member
iTrader: (32)
 
R/TErnie's Avatar
 
Join Date: Aug 2003
Location: WAR EAGLE!
Posts: 5,380
Likes: 0
Received 6 Likes on 6 Posts
subscribed.


Quick Reply: Advanced fuel control options



All times are GMT -7. The time now is 11:03 PM.