Page 3 of 3
Re: O2 feedback at idle and general O2 questions
Posted: Fri Jan 31, 2014 7:26 pm
by RomChip200
foliage wrote:
I think you should post up what you have done and a guide, there would be LOTS of people interested in this sort of thing.
viewtopic.php?f=6&t=2344
Here's is one of the latest versions (I roughly did 33 main versions accross 4 years):
There're 2 main features:
_auto K adjustment with monitoring lambda sensors in idle (lambda sensors are not monitored when cruising, I disabled it, because I want to cruise @17 AFR on ethanol)
_knock warning : the dashboard MIL is lighted up when knock starts to occur (all thresholds can be tuned in the asm)
Re: O2 feedback at idle and general O2 questions
Posted: Mon Feb 03, 2014 10:20 am
by foliage
How does the O2 tuning work currently, just adjust the pulsewidth?
Re: O2 feedback at idle and general O2 questions
Posted: Tue Feb 18, 2014 3:22 am
by Torque
RomChip200 wrote:On Z32, O2 sensors are monitored at idle when TPS is closed, neutral switch has not impact.
Personnally I'm in closed loop at idle and in open loop the rest of the time (I modded the bin for that)
I achieve to make my Z32 flex fuel in this way: I monitor richness at idle and modify K on the fly, with of course some hysteresis and algorithm from my mind.
Hi!
I think Lambda is not observed while being idle on Z32.
I took many logs and the O2 graph only fluctuates while giving the engine some revs
My WB-Sensor confirmed this.
Also the Z32 manual states that you have to keep rpm at about 2000 rpm to check the lambda sensor.
Re: O2 feedback at idle and general O2 questions
Posted: Tue Feb 18, 2014 3:36 am
by RomChip200
Torque wrote:
Hi!
I think Lambda is not observed while being idle on Z32.
I took many logs and the O2 graph only fluctuates while giving the engine some revs
My WB-Sensor confirmed this.
Also the Z32 manual states that you have to keep rpm at about 2000 rpm to check the lambda sensor.
You should go deeper.
O2 OEM Sensors are monitored in idle, and these factors are corrected after about 30seconds standing in idle:
afr_left EQU 0x1625
afr_right EQU 0x1626
afr_learn_left EQU 0x1623
afr_learn_right EQU 0x1624
so, afr_learn_maps (0x1700 & 0x1780) are also filled in idle and these factors are affected in idle and are also used to apply correction :
afr_var42 EQU 0x16A5
afr_var24 EQU 0x16A7
To calculate afr_var42 and afr_var24, the ECU "averages" the full afr learn map.
In idle, afr_var42/24 are copied into afr_learn_left/afr_learn_right locations
My 300 achieves a perfect 14.7 on both banks (measured with my 2 widebands). How do you think the ECU achieves such thing ?
Nothing magic.
Note: I just disassembled RB20DETT (roughly the parts I was interested in) and this is the same ..... Many routines are the same but just located in different locations :
(04U12)
Code: Select all
CODE:8DA4 Compute bank injection
CODE:8DA4 tim #1, flags6 ; Bit 0: throttle switch (1=idle)
CODE:8DA4 ; Bit 1: high octane (if 1, becomes 0 when bit0 of flags5 is set to 1)
CODE:8DA4 ; Bit 2: neutral switch(1=neutral)
CODE:8DA4 ; Bit 3: power steering switch (1=on)
CODE:8DA4 ; Bit 4: A/C switch (1=on)
CODE:8DA4 ; Bit 7: gear engaged and high gear
CODE:8DA7 beq loc_8DAE
CODE:8DA9 ldd afr_var42
CODE:8DAC bra loc_8DB1
CODE:8DAE ; ---------------------------------------------------------------------------
CODE:8DAE
CODE:8DAE loc_8DAE: ; CODE XREF: inj_compute_banks+5Ej
CODE:8DAE ldd afr_bank2_coef
CODE:8DB1
CODE:8DB1 loc_8DB1: ; CODE XREF: inj_compute_banks+63j
CODE:8DB1 staa afr_learn_left
CODE:8DB4 addd afr_bank2_max
CODE:8DB7 sbca #100
CODE:8DB9 jsr mul16_D_P1
CODE:8DBC addb inj_tot_latency
CODE:8DBF adca #0
CODE:8DC1 addd acc_coefx100
CODE:8DC4 std inj_bb2
CODE:8DC7 rts
Good luck.
Re: O2 feedback at idle and general O2 questions
Posted: Tue Feb 18, 2014 4:26 am
by Torque
Thanks for that .. but I can only report my findings using the empirical data I collected.
Have you ever considered drawing a flow diagram of the Z32 ASM code?
By now (25 years on) every single bit should have been analysed ..
Re: O2 feedback at idle and general O2 questions
Posted: Tue Feb 18, 2014 8:03 am
by Torque
Here's a log showing that there is no Lambda trimming taking place unless you rev the engine up (RPM=RED)
Its pretty obvious, isn't it?
Re: O2 feedback at idle and general O2 questions
Posted: Tue Feb 18, 2014 10:00 am
by foliage
It might still be trimming but something is keeping it rich, eg if you assist tpmin like I did it essentially breaks the o2 learn
Re: O2 feedback at idle and general O2 questions
Posted: Tue Feb 18, 2014 6:58 pm
by RomChip200
This is what also happens when your injector latency is set too high ...
Read the afr learn maps tables in 0x1700 (left bank) and 0x1780 (right bank), each table is 128 bytes.
I'm pretty sure the correction values in the tables will give you some tricks.
This is why you need to tune the closed loop area. with widebands.
If you put stupid values there, you will be wrong mainly in mid range, just after the closed loop, on full boost (but so rich that is less noticeable) and in idle ...
Too lean values in closed loop, your afr learn maps will be maxed out (max 110 in OEM), mid range will be too rich and idle too ...
Too rich values in closed loop, your afr learn maps will be min (min 90 in OEM), mid range will be leaned out and idle will be too much lean (so you think wrongly you need to compensate with other factors as ttp min or latency).
Re: O2 feedback at idle and general O2 questions
Posted: Tue Feb 18, 2014 8:07 pm
by foliage
Is that the short term and long term afr learn vales you are talking about? If so that might be my issue, I will check them
Re: O2 feedback at idle and general O2 questions
Posted: Tue Feb 18, 2014 8:25 pm
by RomChip200
Here is an example of afr learn maps (don't care about the values, this is wanted values in my case, my values go from 75 to 125):
Code: Select all
Offset 0 1 2 3 4 5 6 7 8 9 A B C D E F
00001700 64 32 6B CC 72 65 71 C7 6C A7 67 34 64 43 64 1E d2kÌreqÇl§g4dCd.
00001710 70 2A 7D 9A 7D 00 7D C3 7D 6C 6F B5 64 98 64 60 p*}š}.}Ã}loµd˜d`
00001720 7D 00 7D 00 7D 00 7D 00 7D 03 7D 00 6B A9 6A E4 }.}.}.}.}.}.k©jä
00001730 7D 67 7D 00 7D 00 7D 00 7D 00 7D 54 78 C1 75 3E }g}.}.}.}.}TxÁu>
00001740 7D 00 7D 00 7D 00 7D 00 7D 00 7D 00 79 A7 70 C6 }.}.}.}.}.}.y§pÆ
00001750 7D 00 7D 00 7D 00 7D 00 7D 00 7D 0F 71 A9 64 1C }.}.}.}.}.}.q©d.
00001760 7D 01 7D 00 7D 00 7D 82 7D 06 7D D1 6A 92 64 00 }.}.}.}‚}.}Ñj’d.
00001770 65 EE 6E E6 73 9D 7B 68 7D FA 68 FC 64 14 64 00 eînæs{h}úhüd.d.
00001780 64 3E 6D 04 78 5F 79 15 6F 0D 68 1B 64 55 64 00 d>m.x_y.o.h.dUd.
00001790 71 29 7D D6 7D 00 7D EC 7D 83 6F 20 64 B0 64 3B q)}Ö}.}ì}ƒo d°d;
000017A0 7D 00 7D 00 7D 00 7D 00 7D 49 7D 0A 6B 73 6A 0B }.}.}.}.}I}.ksj.
000017B0 7D 72 7D 00 7D 00 7D 00 7D 00 7D B6 79 3A 75 2D }r}.}.}.}.}¶y:u-
000017C0 7D 00 7D 00 7D 00 7D 00 7D 00 7D 00 7A 51 70 77 }.}.}.}.}.}.zQpw
000017D0 7D 00 7D 00 7D 00 7D 00 7D 00 7D 13 72 1A 64 1B }.}.}.}.}.}.r.d.
000017E0 7D 00 7D 00 7D 00 7D 72 7D 07 7D DD 6A A5 64 00 }.}.}.}r}.}Ýj¥d.
000017F0 65 E2 6E CA 73 E4 7A 8F 7D D9 69 69 64 27 64 00 eânÊsäz}Ùiid'd.
The factors are at even addresses e.g. 64 is 100, 6B is 107 etc .... 7D is 125
RPM scale is on Y axis and TP scale is on X axis
Code: Select all
afr_tp_scale EQU 0xFBA0
afr_rpm_scale EQU 0xFBA8
org afr_tp_scale
afr_tp_scale_ fcb 4,7,10,15,19,23,27,31 ; OEM values: fcb 6, 6, 8, 36, 56, 56,255,255
org afr_rpm_scale
afr_rpm_scale_ fcb 16,24,36,48,56,64,76,88 ; OEM values: fcb 16, 16, 16, 16, 40, 80,104,104
; 800,1200,1800,2400,2800,3200,3800,4400
Re: O2 feedback at idle and general O2 questions
Posted: Wed Feb 19, 2014 1:48 am
by Torque
foliage wrote:It might still be trimming but something is keeping it rich, eg if you assist tpmin like I did it essentially breaks the o2 learn
Thanks ..
Can you elaborate a bit more please?
TP MIN break the learn?
Interesting ..
Re: O2 feedback at idle and general O2 questions
Posted: Wed Feb 19, 2014 2:32 am
by RomChip200
Torque wrote:foliage wrote:It might still be trimming but something is keeping it rich, eg if you assist tpmin like I did it essentially breaks the o2 learn
Thanks ..
Can you elaborate a bit more please?
TP MIN break the learn?
Interesting ..
This is quite evident in fact ... ttp_min and ttp_max put boundaries on TP itself.
Once TP gets a certain value, there's a range for which it cannot be corrected by afr learn factors .... their OEM range is 90% ... 110% ... 0.9 ... 1.1
Intrinsically, it doesn't break the learn activity, it trims the correction factor to the its range limit
Example:
Your target TP @idle is 6 (wideband AFR measured=14.7), if TTP_min @400-800rpm is 10, 10x0.9 = 9 ...
How do you think to reach 6 in such way ???
Code: Select all
CODE:97B4 ict_11: ; ...
CODE:97B4 ldx ttp_min
CODE:97B7 cpx tp
CODE:97BA bcs ict_12 ; If tp>ttp_min then branch
CODE:97BA
CODE:97BC stx tp ; Else tp=ttp_min
CODE:97BF
CODE:97BF ict_12: ; ...
CODE:97BF ldx ttp_max
CODE:97C2 cpx tp
CODE:97C5 bcc ict_13 ; If tp<ttp_max then branch
CODE:97C5
CODE:97C7 stx tp ; Else tp=ttp_max
CODE:97CA
CODE:97CA ict_13: ; ...
CODE:97CA rts
CODE:97CA
CODE:97CA ; End of function inj_compute_tp
Re: O2 feedback at idle and general O2 questions
Posted: Wed Feb 19, 2014 9:12 am
by Matt
Thanks for posting those self-learn maps. I recently found the scales for these in SR20 code. I'm thinking of adding a 3D map display by copying the RAM values into it for visual display
Re: O2 feedback at idle and general O2 questions
Posted: Thu Feb 20, 2014 5:06 am
by Torque
What is the relationship of these 3D maps to the trimming values?
Re: O2 feedback at idle and general O2 questions
Posted: Tue Mar 04, 2014 6:17 am
by UNISA JECS
Sorry to post this in the Type 2 section but this came up when I was searching and seemed similar to the issue I been having.
I to have noticed specifically with my Type 3 Nistune B13SR20DE that it is very hard to get the car to stay at 14.7AFR continuously at idle vs my Type 4 Nistune B14 ECU.
On my Type 3 Nistune I can usually get it to hold ~14.7 pretty much rock solid for up to about 5 minutes or at idle, then after that 5 minutes or so no matter what will drop and hold consistant 13.8AFR all day long. My LTFT will be at 100% and STFT will very a little bit on the positive side so leads me to believe I am close as it is not tacking on to my LTFT.
My Type 4 Nistune will idle beautiful with my LTFT and STFT rock sold at 100% pretty much and will hold idle for hours on end without moving from 14.7AFR +/- .2~.
This is a video with my Type 4 Nistune ECU which doesn't have the idle issue.
http://youtu.be/EFbESRH0r6Q