Announcement

Collapse
No announcement yet.

Wideband project for my MSS50

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

    Wideband project for my MSS50

    Hi everyone,

    I've started a new project to integrate two wideband oxygen sensors into my E36 M3 3.2L (MSS50 ecu).

    The main motivation behind this project is that it's very difficult to achieve optimal AFRs in open-loop operation under all conditions (intake air temperature, atmospheric pressure, fuel quality).

    To achieve this, I'm developing:
    1. An electronic and mechanical interface using wideband controllers with simulated narrowband outputs.
    2. A smartphone application to monitor AFRs and oxygen sensor temperatures in real time (example below).
    3. A custom version of the MSS50 software featuring:
      • A new control strategy for the oxygen sensor heater relay.
      • Closed-loop operation enabled at full load.
      • True PID control (the original partial load control based on narrowband signal uses bang-bang control)
      • A configurable full load lambda target map (λ = f(RPM)).​
    BMW developed this type of strategy starting with the M3 E9x models.
    Attached Files
    Last edited by MpowerE36; 08-06-2026, 11:19 AM.
    https://www.youtube.com/channel/UCwN...zf45mXp6PDOCzA

    #2
    Very cool stuff man, for the few of us that have an MSS50. I purchased a Spartan 3 Lite V2 wideband from 14point7 which has a simulated narrowband output as well as a Bosch LSU ADV sensor for more resolution.
    Im just getting around to tuning for a stock motor with kat delete setup as you know. My AFR was reading 15.1 at full load with stock tune and no kats. Very dangerous !!
    Your idea is a very good one even if im the only other person who thinks so

    Tuning the partial map is harder than the full load. One horrible mistake people are making on this forum is suggesting to turn off adaptions. I did this and noticed how my oil temp went straight to 300 F. IDK how it works on s54 but on s50 its no good

    Comment


      #3


      Very interesting project. The ability to run true closed-loop wideband control at full load and have a configurable lambda target by RPM would be a huge improvement over the stock MSS50 strategy. The real-time AFR monitoring through the app is a nice touch too. Looking forward to seeing how the interface and custom software develop.
      ​

      Comment


        #4
        Here’s a quick update of my project.

        I’ve built a prototype of an electronic and mechanical interface between 2 wideband oxygen sensors (Bosch LSU 4.9) and my MSS50 ECU, as well as an application to monitor AFR on my smartphone.

        I’m able to read the 0-1.1V linear output signals using the ECU 10bit ADC. It allows to measure AFR values between 12 and 16 with a resolution of 0.004 AFR, which is accurate enough to implement closed-loop control under full-load conditions.

        Now comes the most fun part: developing the software
        ​
        https://www.youtube.com/channel/UCwN...zf45mXp6PDOCzA

        Comment


          #5
          Nice work as always.

          For you PID control you might want to deviate from the standard way. controlling it -> by PID.
          When measuring actual lambda value and comparing it by your target you already know the deviation. With this info and your actual injected fuel mass it should be an easy conversion to get to the target.
          Target - actual (0.8 - 0.9) = lambda 0.1 deviation. if the fuel mas or base injection is 8 ms your new set point would be new [ms] = current [ms] * (lambda actual / lambda target)
          You might want to limit the gradients and have hold times to detect the change based on load and speed. I also believe the stock lambda control PID settings are engine speed and load depended. At least in Motronic M3.3.
          I would expect it faster than with PID control.

          I also suspect the company were I did my graduations uses this logic in the free programmable engine management systems.

          It might be a challange to get the adaptions correct. There is additive (idle/low load) and multiplicative (part load) and I am unsure if the part load adaptions are divided in certain engine speed and load areas. You don't want the corrections being done to all regions. You might want to add an adaption for higher loads to prevent this. Maybe use a table to enter them in RAM (equal sized as the current base fuel map) , read them out with diagnostics. Then it would be a small effort to correct the main fuel table to meet close to 0 corrections.

          Last time we spoke, I mentioned the MSS50 uses CAN BUS. You were not sure, but I am sure it has it as an SMG communicates over CAN. It would be a nice add on if live data could be send over this bus.
          I think for now you have plenty to do ;-)

          Comment

          Working...
          X