2.3 R3s use a single map sensor with timing identification to find a home signal so it knows when #1 is at TDC on the compression stroke. It then knows the next pulse is #2 and the next after that is #3, this is why R3s will always rotate the engine at least 3 times firing on the 4th rotation after a power cycle before firing. It looks for crank position trigger for TDC then for the pulse from #1 within a time window after TDC to identify #1 cylinder. It's quite sloppy about home signal timing too, otherwise a built motor like mine wouldn't work with stock ECU with very not-stock MAP signal pulse size and timing.

It does not use MAP for timing (or fuel in F tables much) because it's a large bore ITB setup, 52mm at the throttle plate. Large bore ITBs have too little MAP variance at low openings and reach atmo pressure quickly, but well before full throttle. As a result the resolution is terrible, thus Alpha-N. You can call it hybrid if you it makes you feel better, but with F-L Switch table set to 0, the L tables have less than 1% influence on the fueling, aka straight up Alpha N. A few members and I went through a lot of work trying to improve the hybrid functionality by blending L and F crossover values, it's terribly finnicky and not at all worth the effort, a clean Alpha-N tune just plain works better.

You need 3 sensors to run a 2.3 R3 engine:
Map sensor
TPS sensor
Crank sensor

The others can be disconnected and the bike will still run, IAT/CLT/BARO/VSS/2nd Throttle TPS. Not only will it still run, it'll still run with no constraints on RPM etc. It's a dumb system that is the very epitome of garbage in garbage out; if you give it bad values in the table, you'll get bad values from it, if you give it good values, you get good results. For those who have their bikes tuned, it's great in a way, it does exactly what you tell it, but that's also a constraint as it's limited to the temp/baro correction values the factory hardcoded into it (and those values are not correct with 2.3 R3s routinely growing progressively more lean as air temperatures rise beyond 90f).

All this is why I'm going to a standalone, I'm sick of an awesome engine being hamstrung by an ECU that would be the very left end of the bell curve if one existed for ECUs. It is a solid ECU for its era, but that era was 25 years ago and motorcycle tech was 15 years behind automotive tech so it's really more like the TPI computers from the 80s than anything else.

About 5 minutes in he explains why MAP control is a bad option for ITB engines. The bigger your cam the worse the effect as starting vacuum levels are lower, thus MAP resolution is lower.

Sneaky edit:
This is why someday, I'll own my own dyno, so I can demonstrate this stuff.
I plan to revisit this when my brain is working a little more logically. What I'm picking up is that you recommend disabling the O2 sensor with a custom tune on the 2.3s, which I did. How about the 2.5s using, for example, Mr. Penner's tune? Maybe it's already disabled as part of the tune- I don't recall. Enlighten us....
 
1: No.
2: Sort of, depends on if you leave the o2 sensor enabled. Keihen ECUs don't constantly use closed loop, only in specific sections where the narrowband target table is set to a tight range (can't recall exactly what, like 14.3-14.7 or something like that). It then applies these correction factors to the whole table. The ability to adapt is primitive and essentially non-functional on anything besides a stock bike.
3: There is no O2 bias table in TuneECU, its very basic software, essentially a GUI for a hexeditor with encryption defeat and IO management, that's it. While the functionality to adjust base sensor voltage ranges and values no doubt exists in the ECU itself, it's not been located in the hex file so no interface to adjust it is provided.

- Further:
The Keihen O2 system control is absolute trash compared to more modern systems, ignore it. You will always a have the best results by disabling the O2 sensor in TuneECU and getting a proper tune. The stock ECU targets Lambda of 1.0, pretty much everywhere, it's a lean burn design for emissions. If you tune it and leave the O2 enabled it will continuously adjust and over time work its way back towards Lambda of 1.0 as long as the adjustment required is within the adjustment range of the ECU. There is no scenario where the O2 enabled is better with a custom tune, even for emissions control, as the O2 being disabled does not trigger a ready warning, it fully disables the circuit and check for it. That includes a wideband using a narrowband simulated 0-1v output. The simulated output will only help the ECU counteract your custom tune.
Thanks for the input. I think you've solved my question in a different kind of way than I am used to, and I just want to confirm:
1. In Tune ECU, on a Keihin Triumph, the method for eliminating closed-loop cells is NOT to simply change their value in the AFR table (like TTS), but to disable the O2 sensors using a check box. Or, said a different way, disabling the O2 sensors effectively puts the entire AFR map in open loop, is that correct?
2. Once I've disabled the O2 sensors, the values I enter in the AFR table cells should actually change the command to the ECU for injector timing (duration) for that cell.
3. If that's the case, then I need to be able to rely on my F and L table values as accurate, but I'm not planning on making any big changes or looking for performance gains here. I'm actually working on a 2014 Bonneville - my slow bike. I just REALLY don't like that lean hiccup I keep getting in the middle of a turn or leaving a stop, and I happened to find this most informative post on the R3 forum.
The other thing that I keep reminding myself is that we've gotten so used to having this super precise control over AFR that people will argue over whether 13.5/1 is better than 13.8/1, and yet, I rode bikes for years with 3 or 4 jets (or even ONE - remember Lake "Injectors"?) controlling the fuel in all kinds of weather, and we ran them somewhere between "Bog" and "Stutter". And somehow, we seemed to do okay! 😁
 
The hiccup, like a lean stumble when transitioning from closed to low stable throttle point while cornering? This can be improved by adjusting the TPS sensor to register earlier, basically adjusting the 0% point voltage slightly higher. On the rockets, many people have had good results lifting the 0% from 0.62v to 0.68v. I'm not positive what voltage the Bonnie calls for (probably 0.60-0.62), but I'd try this first before adjusting any tables, it's free, reversible, and doesn't require guesstimation like tables without a dyno. Ensure you use the reset ISCV function before taking the voltage reading as in the TuneECU manual, the resting voltage when you've not triggered the reset ISCV function is not the voltage you want.

1: Correct.
2: No, the AFR table is ignored from then on. Use the F tables to adjust fueling, the Keihen system does zero math for you unfortunately.
3: Drag the whole column of 0 and 1 throttle percent above 1400 RPM in the F table and add 5%, see if it improves it. If not, check F/L switch, you likely have L tables enabled up to a point, if that's the case, you'll need to make a choice. Try to tune the L tables, or abandon them and use F only. Both are not great without a dyno, it's hard to get good map values due to OBD2 update rate and simply zeroing out the F/L table will be way off in the F table in the areas it was using the L table as the primary table, so requires a dyno tune.
 
I plan to revisit this when my brain is working a little more logically. What I'm picking up is that you recommend disabling the O2 sensor with a custom tune on the 2.3s, which I did. How about the 2.5s using, for example, Mr. Penner's tune? Maybe it's already disabled as part of the tune- I don't recall. Enlighten us....

EDIT: Quick search says it's a narrowband on the 2.5, NTK AZD4002-BA001, $32 from KTM Europe suppliers, $100 from triumph and US suppliers. Pinout may differ so don't go plugging a KTM sensor in without checking with multimeter first :p

Not sure, but if it's a narrowband sensor I would disable it, nothing wrong with the 2.5 but it didn't particularly stir my emotions, so I don't pay attention to it. Narrow bands are emission control devices designed with a sole purpose, keep the cat lighting off the unburnt fuel and stay emissions compliant by keeping the mixture centered around 1.0 lambda.

In most scenarios it's a simple check these days; if engine is NA it's narrow, if it's forced induction wideband.
 
Last edited:
The hiccup, like a lean stumble when transitioning from closed to low stable throttle point while cornering? This can be improved by adjusting the TPS sensor to register earlier, basically adjusting the 0% point voltage slightly higher. On the rockets, many people have had good results lifting the 0% from 0.62v to 0.68v. I'm not positive what voltage the Bonnie calls for (probably 0.60-0.62), but I'd try this first before adjusting any tables, it's free, reversible, and doesn't require guesstimation like tables without a dyno. Ensure you use the reset ISCV function before taking the voltage reading as in the TuneECU manual, the resting voltage when you've not triggered the reset ISCV function is not the voltage you want.

1: Correct.
2: No, the AFR table is ignored from then on. Use the F tables to adjust fueling, the Keihen system does zero math for you unfortunately.
3: Drag the whole column of 0 and 1 throttle percent above 1400 RPM in the F table and add 5%, see if it improves it. If not, check F/L switch, you likely have L tables enabled up to a point, if that's the case, you'll need to make a choice. Try to tune the L tables, or abandon them and use F only. Both are not great without a dyno, it's hard to get good map values due to OBD2 update rate and simply zeroing out the F/L table will be way off in the F table in the areas it was using the L table as the primary table, so requires a dyno tune.
Wow, VERY helpful. This is definitely different.
Okay, so we know that F and L are Volumetric Efficiency (VE) tables measured by throttle position and Manifold Absolute Pressure (MAP) respectively. Their values are milligrams of air x 20.
The ECU has to have some point of reference to tell it injector timing (fuel) for a given volume of air, so I would think that the AFR table is probably not ignored, but is used as a non-variable standard regardless of inputs from Intake Air Temperature (IAT), Coolant Temperature (CLT) etc. SOME non-variable fuel table is being compared to VE table cells somewhere.
If that's true (?), then I should be able to find my (non-active) closed-loop cells on the AFR table and mathematically calculate the additional air volume needed in the VE tables to richen up those cells to my 13.8/1 goal at cruise and low throttle.
In the meantime, I will try the TPS adjust, but I've done this on my BMWs, and honestly, the TPS is so sensitive, the difference between .62v and .68v is the tap of a finger on the TPS housing. Is the net effect of this to cause the ECU to think the throttle is slightly more open, and add slightly more fuel? If so, the closed loop function should bring things back to stoich in short order. Or does moving the TPS help for some other reason?
 
There may be ECU functionality differences between 2.3 rockets and your bonnie, they are, I think, two whole EURO emissions standards apart in age but it seems for the most part, no major changes were actually required until EURO 5 standards. I get what you're looking for, a way to manipulate it to correct fueling to a more appropriate fuel amount without manually adjusting the fueling table. I expect you'll find no such ability exists within the ECU unfortunately, and if you do it's a difference between the Rocket and Bonnie. Depending on your ability with circuit design though... an Arduino can do it :p

I'm extremely confident there is no fueling lookup table hidden and that it's doing the injector pulse width math on the fly for a number of reasons, omitting for brevity. This is the point where it goes into speculation because I don't have access to the raw firmware but from behavior I've seen I expect the ECU derives injector pulse timing like this:

(Airmass (F/L Table Value) * 0.071429 (if targeting 14.7 AFR, but this value can be anything) * environmental correction factor * acceleration enrichment factor * injector flow/second (hardcoded constant)) - (injector dead time * voltage correction value) = target pulse width. Basically exactly how non-VE tuning standalones do it.

As I recall, the AFR table is fully ignored when the o2 box is unchecked. 14.7 as the default target fueling constant makes sense based on working values used in the F tables when custom tuning bikes with relatively mild modification. With o2 active, the AFR table acts only as a enable or disable closed loop switching table, any value that's outside the narrow range it accepts to trigger closed loop is treated as a binary; if it's outside, it ignores it and goes into open loop. This is the entry point for manipulation via a controller, ESP32 or Arduino. By accepting the analogue input from the O2 sensor, you can manipulate it to output a different signal to the ECU, essentially tricking it into self-tuning to the value you set in the external board, disclaimer: It's a felony as you're tampering with emissions control devices (I have to say it, and no I won't program it since the EPA has been attacking people lately), but an ESP32 would be better than an Arduino as it's much much faster.

Also, just a pedantic point, it's definitely not a VE table, it's raw air mass, but VE could be derived from it with some math.
 
Last edited:
There may be ECU functionality differences between 2.3 rockets and your bonnie, they are, I think, two whole EURO emissions standards apart in age but it seems for the most part, no major changes were actually required until EURO 5 standards. I get what you're looking for, a way to manipulate it to correct fueling to a more appropriate fuel amount without manually adjusting the fueling table. I expect you'll find no such ability exists within the ECU unfortunately, and if you do it's a difference between the Rocket and Bonnie. Depending on your ability with circuit design though... an Arduino can do it :p

I'm extremely confident there is no fueling lookup table hidden and that it's doing the injector pulse width math on the fly for a number of reasons, omitting for brevity. This is the point where it goes into speculation because I don't have access to the raw firmware but from behavior I've seen I expect the ECU derives injector pulse timing like this:

(Airmass (F/L Table Value) * 0.071429 (if targeting 14.7 AFR, but this value can be anything) * environmental correction factor * acceleration enrichment factor * injector flow/second (hardcoded constant)) - (injector dead time * voltage correction value) = target pulse width. Basically exactly how non-VE tuning standalones do it.

As I recall, the AFR table is fully ignored when the o2 box is unchecked. 14.7 as the default target fueling constant makes sense based on working values used in the F tables when custom tuning bikes with relatively mild modification. With o2 active, the AFR table acts only as a enable or disable closed loop switching table, any value that's outside the narrow range it accepts to trigger closed loop is treated as a binary; if it's outside, it ignores it and goes into open loop. This is the entry point for manipulation via a controller, ESP32 or Arduino. By accepting the analogue input from the O2 sensor, you can manipulate it to output a different signal to the ECU, essentially tricking it into self-tuning to the value you set in the external board, disclaimer: It's a felony as you're tampering with emissions control devices (I have to say it, and no I won't program it since the EPA has been attacking people lately), but an ESP32 would be better than an Arduino as it's much much faster.

Also, just a pedantic point, it's definitely not a VE table, it's raw air mass, but VE could be derived from it with some math.
Excellent, THANK YOU for taking so much time to detail this all out! -Jon
 
Back
Top