Announcement

Collapse
No announcement yet.

MSS54 Fuel Control Questions

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    MSS54 Fuel Control Questions

    I've been reading through the funktionsrahmen to try to get a better understanding of how the MSS54 calculates the final fuel pulsewidth and I have some questions I haven't seen addressed. Maybe this is common knowledge from the M3F days but the mega thread is long lost and I can't find exact answers to this. Ultimately, I'd like to turn off enrichment for catalyst protection on my S54 swapped E30, but I don't currently have a wideband installed so I want to make sure I'm doing this safely.

    I have 2 main questions:

    1. How exactly are the two main fuel tables, KF_TI_N_RF and KF_TI_N_RF_VL used? I can't find any direct reference to these tables in the funktionsrahmen, but I think that may be because it is actually for an MSS60. What I did find is a reference to two correction factors used in 'steady state' operation, KF_TI_MK_N_WI and KF_TI_MK_N_WI_VL. The resulting variable, ti_mk_f_stat, from either of these tables, depending on the operating mode, is used as a scalar to the final fuel injection quantity any time the engine is in 'running' mode. Are these two tables (KF_TI_MK_N_WI and KF_TI_MK_N_WI_VL) just different names for KF_TI_N_RF and KF_TI_N_RF_VL from the publicly available XDFs? I based on the naming and their use in engine running mode, I think the answer is yes, but I want to get confirmation before proceeding.

    Secondary to that, what is the general understanding of the purpose of KF_TI_N_RF and KF_TI_N_RF_VL?

    KF_TI_N_RF appears to essentially be a fudge factor table used for areas where the MAF control strategy may not properly account for the amount of air trapped in the cylinder, or fuel short-circuiting into the exhaust. The 1st row of the table is quite surprising, showing a 12-30% scalar. The entire 870-1200rpm region is also surprisingly high. Is this really just a catch-all for anything not accounted for in the rest of the calculations?

    KF_TI_N_RF_VL seems to be the primary full-load power enrichment cal, but again I'm looking for confirmation here because the values are a bit surprising. 20% enrichment in the mid range seems reasonable (.83 lambda), but 10% up top (.9 lambda) seems fairly lean, but is likely about LBT for these engines. Does cat protection enrichment pretty much always kick in anytime you hit high engine speeds at full load? For anyone who has logged with a wideband, what lambda or AFR do stock cars with cats run up top?

    2. How is the transition from closed loop lambda = 1 operation to open loop power enrichment handled? The funktionsrahmen indicates that the 'lambda controller' is switched off if load is above a threshold KL_LA_N for a period of time from K_LA_T_TL. It also states that the lambda controller is switched off if the engine speed is greater than threshold K_LA_N_VL AND the operating state is FULL LOAD. The variable B_VL, is referenced, which I interpret to mean boolean vollast, i.e. a boolean flag that indicates full load operation. However, not all of these parameters seem to exist in the MSS54 XDFs.

    KL_LA_N: Exists but is set to 1.5 for all engine speeds. RL of 1.5 isn't possible on this engine so it seems this isn't used.
    K_LA_T_TL: Not in the XDF
    K_LA_N_VL: Exists and is set to 120rpm

    My interpretation based on these calibrated values is that the 1st method is effectively cal'd out, and K_LA_N_VL is calibrated such that open loop power enrichment will be entered at any running engine speed as long as B_VL == 1. So that raises the question, what are the conditions that set B_VL ==1? Accelerator pedal position?

    #2
    Originally posted by R3VM3UP View Post
    I've been reading through the funktionsrahmen to try to get a better understanding of how the MSS54 calculates the final fuel pulsewidth and I have some questions I haven't seen addressed. Maybe this is common knowledge from the M3F days but the mega thread is long lost and I can't find exact answers to this. Ultimately, I'd like to turn off enrichment for catalyst protection on my S54 swapped E30, but I don't currently have a wideband installed so I want to make sure I'm doing this safely.

    I have 2 main questions:

    1. How exactly are the two main fuel tables, KF_TI_N_RF and KF_TI_N_RF_VL used? I can't find any direct reference to these tables in the funktionsrahmen, but I think that may be because it is actually for an MSS60. What I did find is a reference to two correction factors used in 'steady state' operation, KF_TI_MK_N_WI and KF_TI_MK_N_WI_VL. The resulting variable, ti_mk_f_stat, from either of these tables, depending on the operating mode, is used as a scalar to the final fuel injection quantity any time the engine is in 'running' mode. Are these two tables (KF_TI_MK_N_WI and KF_TI_MK_N_WI_VL) just different names for KF_TI_N_RF and KF_TI_N_RF_VL from the publicly available XDFs? I based on the naming and their use in engine running mode, I think the answer is yes, but I want to get confirmation before proceeding.

    Secondary to that, what is the general understanding of the purpose of KF_TI_N_RF and KF_TI_N_RF_VL?

    KF_TI_N_RF appears to essentially be a fudge factor table used for areas where the MAF control strategy may not properly account for the amount of air trapped in the cylinder, or fuel short-circuiting into the exhaust. The 1st row of the table is quite surprising, showing a 12-30% scalar. The entire 870-1200rpm region is also surprisingly high. Is this really just a catch-all for anything not accounted for in the rest of the calculations?

    KF_TI_N_RF_VL seems to be the primary full-load power enrichment cal, but again I'm looking for confirmation here because the values are a bit surprising. 20% enrichment in the mid range seems reasonable (.83 lambda), but 10% up top (.9 lambda) seems fairly lean, but is likely about LBT for these engines. Does cat protection enrichment pretty much always kick in anytime you hit high engine speeds at full load? For anyone who has logged with a wideband, what lambda or AFR do stock cars with cats run up top?

    2. How is the transition from closed loop lambda = 1 operation to open loop power enrichment handled? The funktionsrahmen indicates that the 'lambda controller' is switched off if load is above a threshold KL_LA_N for a period of time from K_LA_T_TL. It also states that the lambda controller is switched off if the engine speed is greater than threshold K_LA_N_VL AND the operating state is FULL LOAD. The variable B_VL, is referenced, which I interpret to mean boolean vollast, i.e. a boolean flag that indicates full load operation. However, not all of these parameters seem to exist in the MSS54 XDFs.

    KL_LA_N: Exists but is set to 1.5 for all engine speeds. RL of 1.5 isn't possible on this engine so it seems this isn't used.
    K_LA_T_TL: Not in the XDF
    K_LA_N_VL: Exists and is set to 120rpm

    My interpretation based on these calibrated values is that the 1st method is effectively cal'd out, and K_LA_N_VL is calibrated such that open loop power enrichment will be entered at any running engine speed as long as B_VL == 1. So that raises the question, what are the conditions that set B_VL ==1? Accelerator pedal position?
    You can’t rely on the funktionsrahmen much for fueling. The funktionsrahmen isn’t actually for MSS54 or MSS60 originally, as far as I can tell it appears to be for a development effort for an electronically controlled valve based engine that never saw the light of day.

    Also CSL and standard M3 deal with fueling differently too

    Sent from my iPhone using Tapatalk
    Last edited by karter16; 08-26-2026, 06:00 PM.
    2005 ///M3 SMG Coupe Silbergrau Metallic/CSL bucket seats/CSL airbox/CSL console/6 point RACP brace/Apex ARC-8s
    Build Thread | Community Patch | MSS54 DS2 Tool

    Comment


      #3
      Originally posted by R3VM3UP View Post
      I've been reading through the funktionsrahmen to try to get a better understanding of how the MSS54 calculates the final fuel pulsewidth and I have some questions I haven't seen addressed. Maybe this is common knowledge from the M3F days but the mega thread is long lost and I can't find exact answers to this. Ultimately, I'd like to turn off enrichment for catalyst protection on my S54 swapped E30, but I don't currently have a wideband installed so I want to make sure I'm doing this safely.

      I have 2 main questions:

      1. How exactly are the two main fuel tables, KF_TI_N_RF and KF_TI_N_RF_VL used? I can't find any direct reference to these tables in the funktionsrahmen, but I think that may be because it is actually for an MSS60. What I did find is a reference to two correction factors used in 'steady state' operation, KF_TI_MK_N_WI and KF_TI_MK_N_WI_VL. The resulting variable, ti_mk_f_stat, from either of these tables, depending on the operating mode, is used as a scalar to the final fuel injection quantity any time the engine is in 'running' mode. Are these two tables (KF_TI_MK_N_WI and KF_TI_MK_N_WI_VL) just different names for KF_TI_N_RF and KF_TI_N_RF_VL from the publicly available XDFs? I based on the naming and their use in engine running mode, I think the answer is yes, but I want to get confirmation before proceeding.

      Secondary to that, what is the general understanding of the purpose of KF_TI_N_RF and KF_TI_N_RF_VL?

      KF_TI_N_RF appears to essentially be a fudge factor table used for areas where the MAF control strategy may not properly account for the amount of air trapped in the cylinder, or fuel short-circuiting into the exhaust. The 1st row of the table is quite surprising, showing a 12-30% scalar. The entire 870-1200rpm region is also surprisingly high. Is this really just a catch-all for anything not accounted for in the rest of the calculations?

      KF_TI_N_RF_VL seems to be the primary full-load power enrichment cal, but again I'm looking for confirmation here because the values are a bit surprising. 20% enrichment in the mid range seems reasonable (.83 lambda), but 10% up top (.9 lambda) seems fairly lean, but is likely about LBT for these engines. Does cat protection enrichment pretty much always kick in anytime you hit high engine speeds at full load? For anyone who has logged with a wideband, what lambda or AFR do stock cars with cats run up top?

      2. How is the transition from closed loop lambda = 1 operation to open loop power enrichment handled? The funktionsrahmen indicates that the 'lambda controller' is switched off if load is above a threshold KL_LA_N for a period of time from K_LA_T_TL. It also states that the lambda controller is switched off if the engine speed is greater than threshold K_LA_N_VL AND the operating state is FULL LOAD. The variable B_VL, is referenced, which I interpret to mean boolean vollast, i.e. a boolean flag that indicates full load operation. However, not all of these parameters seem to exist in the MSS54 XDFs.

      KL_LA_N: Exists but is set to 1.5 for all engine speeds. RL of 1.5 isn't possible on this engine so it seems this isn't used.
      K_LA_T_TL: Not in the XDF
      K_LA_N_VL: Exists and is set to 120rpm

      My interpretation based on these calibrated values is that the 1st method is effectively cal'd out, and K_LA_N_VL is calibrated such that open loop power enrichment will be entered at any running engine speed as long as B_VL == 1. So that raises the question, what are the conditions that set B_VL ==1? Accelerator pedal position?
      To expand on my previous post now I'm at my computer. This engine that the funktionsrahmen appears to have originally be written for seems to have been an electronic valve based engine where the control system was base heavily around a bunch of "EVT" operating states. A lot of the detail of modules like injection have been heavily modified in the funktionsrahmen to align to these EVT operating states which are relevant to the MSS54.

      yes KF_TI_N_RF is equivalent to KF_TI_MK_N_WI (not sure off hand what the MK designation was added for. RF was renamed and adapted to WI (specific indicated work).
      and likewise KF_TI_N_RF_VL is equivalent to KF_TI_MK_N_WI_VL
      ti_mk_f_stat is called ti_f_stat in MSS54 world.

      Your logic seems to be correct regarding KL_LA_N.
      K_LA_T_TL is actually K_LA_T_RF in MSS54, it's set to 3 seconds in 0401 (CSL).

      B_VL is determined from the following:

      Click image for larger version

Name:	Screenshot 2026-08-27 at 5.17.41 PM.png
Views:	25
Size:	33.6 KB
ID:	365137



      bz_wdkvl which is a table lookup to KF_BZ_WDK_VL with n and tmot as inputs:

      Click image for larger version

Name:	Screenshot 2026-08-27 at 3.22.32 PM.png
Views:	26
Size:	10.4 KB
ID:	365136

      Click image for larger version

Name:	Screenshot 2026-08-27 at 5.21.49 PM.png
Views:	32
Size:	24.5 KB
ID:	365138

      The other conditions are just diagnostic status byte checks.

      Note that wdk is throttle valve, not pedal.
      2005 ///M3 SMG Coupe Silbergrau Metallic/CSL bucket seats/CSL airbox/CSL console/6 point RACP brace/Apex ARC-8s
      Build Thread | Community Patch | MSS54 DS2 Tool

      Comment


        #4
        Thanks for clearing all that up karter16, much appreciated! I was not aware that the funktionsrahmen were not for the MSS60.

        Based the units I’m assuming wdk represents relative throttle cross sectional opening, not raw angle. Is that correct?

        Comment


          #5
          Originally posted by R3VM3UP View Post
          Thanks for clearing all that up karter16, much appreciated! I was not aware that the funktionsrahmen were not for the MSS60.

          Based the units I’m assuming wdk represents relative throttle cross sectional opening, not raw angle. Is that correct?
          wdk is relative throttle position (angle). For example let's assume the range is 0 degrees to 90 degrees. 0 degrees throttle angle would then result in wdk = 0, 45 degrees would result in wdk = 50, 90 degrees would be wdk = 100. (simplified example but you get the idea).

          This is as opposed to aq_rel (relative cross sectional opening) which is a relative measure of the actual cross sectional (2 dimensional "window" if you were looking directly at the throttle opening) that the throttle angle results in.
          Last edited by karter16; Today, 08:45 AM.
          2005 ///M3 SMG Coupe Silbergrau Metallic/CSL bucket seats/CSL airbox/CSL console/6 point RACP brace/Apex ARC-8s
          Build Thread | Community Patch | MSS54 DS2 Tool

          Comment


            #6
            Originally posted by karter16 View Post
            wdk is relative throttle position (angle). For example let's assume the range is 0 degrees to 90 degrees. 0 degrees throttle angle would then result in wdk = 0, 45 degrees would result in wdk = 50, 90 degrees would be wdk = 100. (simplified example but you get the idea).

            This is as opposed to aq_rel (relative cross sectional opening) which is a relative measure of the actual cross sectional (2 dimensional "window" if you were looking directly at the throttle opening) that the throttle angle results in.
            Does aq_rel take the ICV into account? Or do aq_rel and wdk map 1:1 to one another?
            2002 Topasblau M3 - Coupe - 6MT - Karbonius CSL Airbox - SSV1 - HJS - Mullet Tune - MK60 Swap - E86 Front Triangulation - ZCP Rack - Nogaros - AutoSolutions - 996 Brembos - Slon - CMP - VinceBar - Koni - Eibach - BlueBus - Journal

            2012 Alpinweiss 128i - Coupe - 6AT - Slicktop - Manual Seats - Daily - Journal

            Comment


              #7
              Originally posted by heinzboehmer View Post

              Does aq_rel take the ICV into account? Or do aq_rel and wdk map 1:1 to one another?
              yep good point - aq_rel includes the ICV as well.

              Code:
              aq_abs = aq_abs_lls + aq_abs_wdk
              aq_rel = ((aq_abs - K_AQ_ABS_MIN) << 15) / (K_AQ_ABS_MAX - K_AQ_ABS_MIN);​
              2005 ///M3 SMG Coupe Silbergrau Metallic/CSL bucket seats/CSL airbox/CSL console/6 point RACP brace/Apex ARC-8s
              Build Thread | Community Patch | MSS54 DS2 Tool

              Comment

              Working...
              X