Reply To: Dealer CAN adjust A.F.R. – LEAN


it’s no rocket science, so I try to explain a bit, what I did:

I use an Innovate MTX-L unit with a Bosch LSU4.9 broadband O2 sensor. Unfortunately the original narrowband sensor of the 690 has a  much smaller diameter, so I couldn’t change it, as I did at the 390. So I welded an additional bung adapter to the header and now have both sensors installed.
The LSU4.9 O2 sensor is connected to MTX-L, which displays the lambda or AFR value. Aditionally it has 2 programmable analog outputs. I programmed one as analog broadband signal and the other as narrowband simulation signal for the ECU.
The broadband signal is a simple linear transformation of the lambda value into a voltage, where lambda 0.5 = 0.5V and lambda 1.5 = 4.5V, lambda 1 = 2.5V.
The narrowband output is programmed with a narrow edge at lambda = 1, means 0.1V from lambda 0.5 to 0.999, switch to 0.9V between lambda 0.999 to 1.001 and stay at 0.9V above 1.001. This signal is connected to the ECU O2 sensor input via a switch at the handlebar. So I switch while riding between the original narrowband signal and the simulation signal from the MTX-L. When the MTX-L is programmed to lambda 1, the behaviour and fuelling of the engine is identical. There is only a difference in the reaction time of the sensors, because the original is much faster (a few ms reaction time) compared to the MTX-L (80ms sampling and update rate). You can see it in the signals, but can’t feel it while riding.
The real trick for all the efforts is, that I can now program the narrowband simulation signal threshold to any lambda value in closed loop mode. With the 690 I found lambda 0.92 as the optimum for smooth riding at low rpm with best throttle response. At the 390 lambda 0.9 was the optimum. Theoretically you can also adjust the engine to a fuel saving lean mode (lambda 1.1) at low power or a high power rich mode by manipulating the threshold. I have plans for the future to read the broadband signal with an Arduino and to generate maps for the lambda threshold. Then I can choose any closed loop target value for different riding situation.

The next part of my system is the datalogging. I started with a 4-channel datalogger from Innovate. But this was not fast enough (80ms sampling rate) and could not read all signals I want to see. So I built and programmed my own datalogger based on a Teensy3.6 board. It has a 180MHz 32bit Cortex M4 controller with built in microSD card slot. Programmable it is via the Arduino programming interface with a C-like programming language. I also designed and built an interface board to transfer the vehicle signals to the 3V3 world of the Teensy (Ignition signals reaches up 100V, so be carefully !). With that datalogger I now have 10 analog inputs and 7 digital inputs plus a mode switch and status LED. The mode switch and status LED is also mounted to the handlebar and can be activate/monitored while riding. The sampling rate is now 2ms, which is really fast (1 ignition cycle at 9000rpm last 13.3ms). All data are stored to a microSD card in csv format and can be analysed with Excel or a special graphical tool called Analog flavor BSWWave. For the Vitpilen I plan to aquire following signals:
digital signals:
– engine rpm
– ECU fuel injector duty cycle (on time per cycle = amount of fuel)
– Piggyback box fuel injector duty cycle (on time per cycle = amount of fuel)
– ignition timing spark 1
– ignition timing spark 2
– front ABS wheel speed sensor
– rear ABS wheel speed sensor
analog signals:
– KL30 battery voltage
– TPS1 (throttle position sensor) handlebar (driver request)
– TPS2 (throttle position sensor) throttle body (what the driver really gets, ride by wire !)
– O2 broadband signal
– O2 narrowband signal (feedback of ECU input)
– cooling liquid temperature sensor
– map sensor (manifold pressure sensor)
– Quickshifter sensor input
– 2 spare inputs

Aditionally there is also one analog output for O2 manipulation as described above. Especially the aquisition of the digital signals was really demanding, because I had to implement a full crank timing aquistion algorithm as it is used in all ECU’s. But that is a different, long and very interesting story.

The 3rd part in my system is a piggybox. I still use my powertronic piggybox, which I bought originally for the 390. It is fully programmable and similar to Powercommander, Kastl, etc…
I adjusted the maps to the 690 based on my data from the datalogger. I.e., when I opened the airbox (more air), I make a test run with my datalogger and there I can see in the O2 sensor reading, how much leaner the engine is at certain TPS and rpm points. Then I correct the fuelling in the piggybox map, until I get my desired lambda value at each operating point of the engine. At 0.85 you get most power.
With my high resolution datalogger, I am also able to make relative dyno runs on the road based on acceleration comparison based on my wheel speed information. You don’t get any absolute hp or nm values, but it is very useful to make differences visible.
So, that all for today, when I do have some curves from the Vitpilen, I will show them to you…….