@xxx.edu Fri Jan 6 12:26:21 1995 Date: Fri, 6 Jan 95 09:18:10 GMT @xxx.edu @xxx.za Subject: Majordomo file: list 'diy_efi' file 'archive_num_37' -- >From owner-diy_efi Thu Oct 27 15:38:02 1994 Received: by coulomb.eng.ohio-state.edu (920330.SGI/920502.SGI) id AA05810; Thu, 27 Oct 94 15:38:02 GMT Received: from NYU.EDU by coulomb.eng.ohio-state.edu via SMTP (920330.SGI/920502.SGI) for /usr/local/mail/majordomo-1.92/wrapper resend -p bulk -M 10000 -l Diy_Efi -f Diy_Efi-Owner -h coulomb.eng.ohio-state.edu -s -r DIY_EFI diy_efi-outgoing id AA05805; Thu, 27 Oct 94 11:37:58 -0400 Received: by cmcl2.NYU.EDU (5.61/1.34) id AA11112; Thu, 27 Oct 94 11:37:56 -0400 Received: from george4.bsnet by bear.com (4.1/SMI-4.0/JMD+AR+DJS) id AA09478; Thu, 27 Oct 94 11:14:27 EDT Received: from block15.bsnet by george4.bsnet (4.1/SMI-4.1) id AA07262; Thu, 27 Oct 94 11:12:35 EDT Date: Thu, 27 Oct 94 11:12:35 EDT @xxx.com (Wm del Solar) @xxx.bsnet> @xxx.com Subject: Re: Answer to: What is a kernel? Sender: owner-diy_efi Precedence: bulk Reply-To: DIY_EFI @xxx.edu) wrote: > .... We were "told" that semaphore operations (P & V) are pretty > expensive respect to cpu cycles. Semaphores are not expensive when a "test and set" instruction is part of the target's instruction set. With a test and set instruction, it is easy to protect the semaphore counter, and the rest of the semaphore's implementation is easy. Without test and set, it is not impossible to implement a semaphore, but it will be more difficult and probably slower than a test and set implementation. > Is that a problem in the real world, No. > or is it insiginificant compred to the number of spare CPU cycles > we've got nowadays (with respect to EFI controllers :)? It is insignificant. You will wait for tens of microseconds on a semaphore operation, and you will wait for tens or hundreds of milliseconds for various engine related events to occur. @xxx.com) -- My opinions are mine only. >From owner-diy_efi Thu Oct 27 15:56:19 1994 Received: by coulomb.eng.ohio-state.edu (920330.SGI/920502.SGI) id AA05867; Thu, 27 Oct 94 15:56:19 GMT Received: from localhost.eng.ohio-state.edu by coulomb.eng.ohio-state.edu via SMTP (920330.SGI/920502.SGI) for /usr/local/mail/majordomo-1.92/wrapper resend -p bulk -M 10000 -l Diy_Efi -f Diy_Efi-Owner -h coulomb.eng.ohio-state.edu -s -r DIY_EFI diy_efi-outgoing id AA05862; Thu, 27 Oct 94 11:56:17 -0400 @xxx.edu> To: DIY_EFI Subject: Re: Answer to: What is a kernel? In-Reply-To: Your message of "Thu, 27 Oct 94 09:24:11 CDT." @xxx.com> Date: Thu, 27 Oct 94 11:56:17 -0400 From: John S Gwynne Sender: owner-diy_efi Precedence: bulk Reply-To: DIY_EFI -------- @xxx.com --jsg +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ @xxx. Lusky) Wrote: | | | John S Gwynne writes: | > hardware. By the use of semaphores, the resource of an ADC can | be | > allocated to the coolant measurement task, air temp measurement | task, O2 | > sensor measurement task, etc. All of which can run at different | rates and be | > unaware of the others. Bottom line: a large problem like EFI | can be broken up | > into several smaller tasks that may only need a few lines of | C-code! | > | > It's an alternative to writing one long "loop" of software that | must keep | > track of timing and on which loops to measure what and when to | do this or | > that. The kernel will do all that for you. Ok... It's a | luxury... :) | | I'm taking Operating Systems right now, just went over semaphores a few | weeks ago. We were "told" that semaphore operations (P & V) are pretty | expensive respect to cpu cycles. Is that a problem in the real world, | or is it insiginificant compred to the number of spare CPU cycles | we've got nowadays (with respect to EFI controllers :)? | | Semaphore operations on modern processors are not expensive, since they are a single instruction. on x86 architecture, a semaphore is: lock btr x,y where x is the semaphore, y is the bit number. The key is that it has to be a single locked instruction (note the lock prefix). That way a context switch cannot happen while you are trying to grab the semaphore. Note that this also safe for multiple processor systems. There is an algorithm to implement semaphores on processors that do not support a locked instruction for test/reset. It involves an array of semaphores that you have to loop through. Now that is expensive. Of course, waiting on a locked semaphore is also expensive, but that doesn't really count. What I don't understand is where the names for 'p' and 'v' came from.... --steve >From owner-diy_efi Thu Oct 27 18:38:11 1994 Received: by coulomb.eng.ohio-state.edu (920330.SGI/920502.SGI) id AA06646; Thu, 27 Oct 94 18:38:11 GMT Received: from NYU.EDU by coulomb.eng.ohio-state.edu via SMTP (920330.SGI/920502.SGI) for /usr/local/mail/majordomo-1.92/wrapper resend -p bulk -M 10000 -l Diy_Efi -f Diy_Efi-Owner -h coulomb.eng.ohio-state.edu -s -r DIY_EFI diy_efi-outgoing id AA06641; Thu, 27 Oct 94 14:38:08 -0400 Received: by cmcl2.NYU.EDU (5.61/1.34) id AA06387; Thu, 27 Oct 94 14:38:02 -0400 Received: from george4.bsnet by bear.com (4.1/SMI-4.0/JMD+AR+DJS) id AA16496; Thu, 27 Oct 94 13:57:43 EDT Received: from block15.bsnet by george4.bsnet (4.1/SMI-4.1) id AA10810; Thu, 27 Oct 94 13:55:52 EDT Date: Thu, 27 Oct 94 13:55:52 EDT @xxx.com (Wm del Solar) @xxx.bsnet> @xxx.com Subject: Semaphores Sender: owner-diy_efi Precedence: bulk Reply-To: DIY_EFI @xxx. Lusky): > What I don't understand is where the names for 'p' and 'v' came from.... I remember reading that "p" and "v" the initial letters of the Dutch words for "increment" and "decrement" which is reasonable because Dutch is Edsger Dijkstra's native language. However, I don't recall which is which. @xxx.com) -- My opinions are mine only. >From owner-diy_efi Thu Oct 27 19:20:49 1994 Received: by coulomb.eng.ohio-state.edu (920330.SGI/920502.SGI) id AA06845; Thu, 27 Oct 94 19:20:49 GMT Received: from localhost.eng.ohio-state.edu by coulomb.eng.ohio-state.edu via SMTP (920330.SGI/920502.SGI) for /usr/local/mail/majordomo-1.92/wrapper resend -p bulk -M 10000 -l Diy_Efi -f Diy_Efi-Owner -h coulomb.eng.ohio-state.edu -s -r DIY_EFI diy_efi-outgoing id AA06839; Thu, 27 Oct 94 15:20:46 -0400 @xxx.edu> To: DIY_EFI Subject: Re: Answer to: What is a kernel? In-Reply-To: Your message of "Thu, 27 Oct 94 07:54:41 CDT." @xxx.edu> Date: Thu, 27 Oct 94 15:20:45 -0400 From: John S Gwynne Sender: owner-diy_efi Precedence: bulk Reply-To: DIY_EFI -------- @xxx.edu> , you write: | I'm taking Operating Systems right now, just went over semaphores a few | weeks ago. We were "told" that semaphore operations (P & V) are pretty | expensive respect to cpu cycles. Is that a problem in the real world, | or is it insiginificant compred to the number of spare CPU cycles | we've got nowadays (with respect to EFI controllers :)? ok, I just wanted to use the ADC and semaphore as an example of what the kernel could do for you. It's one approach I'm considering. Another approach is to have a remote 68hc8111e2 that will fire data back to the EFI86k over a serial line. It would be used for the slower changing parameters like air temp, coolant temp, etc.. My motivation here is the reduction of wires; put the 68hc811 under the hood and the EFI68k in the passenger compartment or trunk (some place not as hostile). Just another thought to kick around. As far as semaphores go, the file fact-c020.ps on the server has all the timing information for RTEMS. for the 68020 at 20MHz (time in micro-sec): (EFI69k is 20/12 longer) semaphore_create 38 semaphore_ident 77 semaphore_delete 49 semaphore_obtain available 33 not available - no_wait 33 not available -- block 85 semaphore release no waiting task 35 task readied - returns to caller 56 task readied - preempts caller 75 I will incorporate a timer in my version of EFI69k to measure execution times of the EFI software. From this we can due a scheduling analysis. John S Gwynne @xxx.edu _______________________________________________________________________________ T h e O h i o - S t a t e U n i v e r s i t y ElectroScience Laboratory, 1320 Kinnear Road, Columbus, Ohio 43212, USA Telephone: (614) 292-7981 * Fax: (614) 292-7292 ------------------------------------------------------------------------------- >From owner-diy_efi Thu Oct 27 19:48:51 1994 Received: by coulomb.eng.ohio-state.edu (920330.SGI/920502.SGI) id AA07052; Thu, 27 Oct 94 19:48:51 GMT Received: from fsa.cpsc.ucalgary.ca by coulomb.eng.ohio-state.edu via SMTP (920330.SGI/920502.SGI) for /usr/local/mail/majordomo-1.92/wrapper resend -p bulk -M 10000 -l Diy_Efi -f Diy_Efi-Owner -h coulomb.eng.ohio-state.edu -s -r DIY_EFI diy_efi-outgoing id AA07047; Thu, 27 Oct 94 15:48:47 -0400 Received: from aa.cpsc.ucalgary.ca (aa.cpsc.ucalgary.ca [136.159.4.5]) @xxx.ca>; Thu, 27 Oct 1994 13:47:46 -0600 @xxx.ca (Robert Fridman) Received: by aa.cpsc.ucalgary.ca (1.2; from fridman@localhost) @xxx.ca>; Thu, 27 Oct 1994 13:47:48 -0600 Date: Thu, 27 Oct 1994 13:47:48 -0600 @xxx.ca> To: DIY_EFI @xxx.edu> Subject: Re: Answer to: What is a kernel? Sender: owner-diy_efi Precedence: bulk Reply-To: DIY_EFI > kernel could do for you. It's one approach I'm considering. Another approach > is to have a remote 68hc8111e2 that will fire data back to the EFI86k over a > serial line. It would be used for the slower changing parameters like air temp, > coolant temp, etc.. My motivation here is the reduction of wires; put the > 68hc811 under the hood and the EFI68k in the passenger compartment or trunk > (some place not as hostile). Just another thought to kick around. For a large unit like a car, finding room for multiple boxes might not be a problem. But on a motorcycle, this might cause difficulties. Is there no way to have a single (preferably small;) enclosure? RF. ------------------------------------------------------------------------- 83 R100 DoD 749 Robert Fridman @xxx.ca 84 320i >From owner-diy_efi Fri Oct 28 00:52:45 1994 Received: by coulomb.eng.ohio-state.edu (920330.SGI/920502.SGI) id AA18874; Fri, 28 Oct 94 00:52:45 GMT Received: from knuth.mtsu.edu by coulomb.eng.ohio-state.edu via SMTP (920330.SGI/920502.SGI) for /usr/local/mail/majordomo-1.92/wrapper resend -p bulk -M 10000 -l Diy_Efi -f Diy_Efi-Owner -h coulomb.eng.ohio-state.edu -s -r DIY_EFI diy_efi-outgoing id AA18869; Thu, 27 Oct 94 20:52:42 -0400 Received: by knuth.mtsu.edu (Smail3.1.28.1 #21) id m0r0fXy-000CyaC; Thu, 27 Oct 94 19:51 CDT @xxx.edu> @xxx. Lusky) Subject: Re: Answer to: What is a kernel? To: DIY_EFI Date: Thu, 27 Oct 1994 19:51:58 -0500 (CDT) @xxx.edu> from "John S Gwynne" at Oct 27, 94 11:56:17 am X-Mailer: ELM [version 2.4 PL24alpha3] Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Length: 699 Sender: owner-diy_efi Precedence: bulk Reply-To: DIY_EFI > Of course, waiting on a locked semaphore is also expensive, but that > doesn't really count. Actually, that was what I was talking about. > What I don't understand is where the names for 'p' and 'v' came from.... Ugh, I used to know exactly... basically the person who invented 'p' and 'v' was not a native enlish speaker, those are the first letters of the words for "wait" and "signal" in the language where he lived. -- @xxx.edu http://frank.mtsu.edu:8001/~lusky/ (615) 455-9915 ------------------------------------- ------------------------------ 68 Camaro Convertible - 350 / TH350 \_/ 80 Toyota Celica - 20R / 5spd >From owner-diy_efi Fri Oct 28 01:24:32 1994 Received: by coulomb.eng.ohio-state.edu (920330.SGI/920502.SGI) id AA18915; Fri, 28 Oct 94 01:24:32 GMT Received: from shiva.trl.OZ.AU by coulomb.eng.ohio-state.edu via SMTP (920330.SGI/920502.SGI) for /usr/local/mail/majordomo-1.92/wrapper resend -p bulk -M 10000 -l Diy_Efi -f Diy_Efi-Owner -h coulomb.eng.ohio-state.edu -s -r DIY_EFI diy_efi-outgoing id AA18910; Thu, 27 Oct 94 21:24:24 -0400 Received: by shiva.trl.OZ.AU id AA14850 @xxx.edu); Fri, 28 Oct 1994 11:24:17 +1000 @xxx.au> @xxx.AU> Subject: Re: EGO clogging. To: DIY_EFI Date: Fri, 28 Oct 1994 11:24:16 +1000 (EST) @xxx.edu> from "Dale Ulan" at Oct 27, 94 07:42:34 am X-Mailer: ELM [version 2.4 PL20] Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Content-Length: 1692 Sender: owner-diy_efi Precedence: bulk Reply-To: DIY_EFI > > > > > i/ We all know the 'characteristic curve' of an O2 sensor, but how much > > effect does the actual exhaust temperature have on it's accuracy, > > and also does a HEGO have some way of regulating it's temperature? > > Most HEGO's I've seen hook up to +12v, and they use the positive temperature > coefficient of the heating element to regulate the temperature. Aaahh!! Neat! > EGO sensors aren't affected by temperature much for its real 'trip point', > but temperature is the largest contributor to voltage variations in the > sensor. GM tends to use the voltage level out of the sensor for more > than just 'RICH/LEAN', so they use various compensations to predict > the O2 sensor temperature. So the 'trip point' is much the same but the overall voltage is lower at lower temperatures.. The curve is 'squashed down' if you will. So, with a thermocouple and an EGO you could (with some processing) find out the A/F ratio. How does a UEGO work? > > ii/ What about electrical effects changing the sensor's voltage? eg > > thermocouple effects between the exhaust and the engine. Should > > the sensor be used in a 'balanced' set-up. > > Normally, between the block and manifold there's little difference. GM > attaches one end of the diff amp (- end) to the engine ground. The > other end goes to the O2 sensor. The - end should go to a good engine > block ground. > The LM1964 is an amplifier designed especially for amplifying O2 sensor > signals. It's in National's special purpose devices book (Linear 3). That's what I thought might happen - obviously any thermocouple effects would be minimal, but it doesn't hurt to ask. Craig. @xxx.au >From owner-diy_efi Fri Oct 28 02:24:07 1994 Received: by coulomb.eng.ohio-state.edu (920330.SGI/920502.SGI) id AA19358; Fri, 28 Oct 94 02:24:07 GMT Received: from tomcat.al.noaa.gov by coulomb.eng.ohio-state.edu via SMTP (920330.SGI/920502.SGI) for /usr/local/mail/majordomo-1.92/wrapper resend -p bulk -M 10000 -l Diy_Efi -f Diy_Efi-Owner -h coulomb.eng.ohio-state.edu -s -r DIY_EFI diy_efi-outgoing id AA19353; Thu, 27 Oct 94 22:23:59 -0400 Received: from aztec.al.noaa.gov by tomcat.al.noaa.gov with SMTP id AA01317 @xxx.edu>); Thu, 27 Oct 1994 20:30:35 -0600 @xxx.gov> Date: 27 Oct 1994 20:25:11 -0700 @xxx.gov> Subject: FW: Re: EGO clogging. To: DIY_EFI Sender: owner-diy_efi Precedence: bulk Reply-To: DIY_EFI > > and also does a HEGO have some way of regulating it's temperature? > > Most HEGO's I've seen hook up to +12v, and they use the positive temperature > coefficient of the heating element to regulate the temperature. I have thought about measuring the current to the O2 sensor heater to get a rough idea of the exhaust temperature. Never had a chance to 'calibrate' it, though. -Steven Ciciora >From owner-diy_efi Fri Oct 28 05:22:09 1994 Received: by coulomb.eng.ohio-state.edu (920330.SGI/920502.SGI) id AA19555; Fri, 28 Oct 94 05:22:09 GMT Received: from eigen.ee.ualberta.ca by coulomb.eng.ohio-state.edu via SMTP (920330.SGI/920502.SGI) for /usr/local/mail/majordomo-1.92/wrapper resend -p bulk -M 10000 -l Diy_Efi -f Diy_Efi-Owner -h coulomb.eng.ohio-state.edu -s -r DIY_EFI diy_efi-outgoing id AA19549; Fri, 28 Oct 94 01:22:06 -0400 @xxx.edu> Received: by eigen.ee.ualberta.ca (1.37.109.4/15.6) id AA16450; Thu, 27 Oct 94 23:21:59 -0600 @xxx.ca> Subject: Re: EGO clogging. To: DIY_EFI Date: Thu, 27 Oct 94 23:21:57 MDT @xxx.AU>; from "Craig Pugsley" at Oct 28, 94 11:24 am Mailer: Elm [revision: 70.85] Sender: owner-diy_efi Precedence: bulk Reply-To: DIY_EFI > Aaahh!! Neat! Note I said 'most'. Some ECM's actually control the temperature, notably cars using UEGO sensors... > So the 'trip point' is much the same but the overall voltage is lower at > lower temperatures.. The curve is 'squashed down' if you will. > So, with a thermocouple and an EGO you could (with some processing) find > out the A/F ratio. Yes and no. You could find it out right around stoich. Generally, an O2 sensor doesn't like sitting at one voltage very much. That's why the O2 sensing algorithms always oscillate the sensor a bit. > How does a UEGO work? It contains an additional 'pump' cell. Since the normal O2 sensor responds to hydrogen and other gasses (except oxygen, of course), the reverse process (applying current to the cell) will move these same ions through the ceramic. By combining an O2 sensor and a 'pump' cell, the O2 sensor will operate with a shifted centre point. By pumping, say, 10 mA of current through the cell in one direction, the trip point will go from, say, 14.7:1 to 10:1. etc. With some creative electronics, the sensor can be made to read out the actual A:F ratio. After a bit of testing, people have found that the O2 sensor does not actually respond to oxygen ions until the cell reaches 800-900 deg. C. Few exhaust systems run that hot, but at the lower temperature of 400-500 deg. C., the cell responds to other gasses, such as hydrogen. The net result is correct, but the cell doesn't actually respond to oxygen. -Dale >From owner-diy_efi Fri Oct 28 16:47:48 1994 Received: by coulomb.eng.ohio-state.edu (920330.SGI/920502.SGI) id AA21563; Fri, 28 Oct 94 16:47:48 GMT Received: from wotan.compaq.com by coulomb.eng.ohio-state.edu via SMTP (920330.SGI/920502.SGI) for /usr/local/mail/majordomo-1.92/wrapper resend -p bulk -M 10000 -l Diy_Efi -f Diy_Efi-Owner -h coulomb.eng.ohio-state.edu -s -r DIY_EFI diy_efi-outgoing id AA21558; Fri, 28 Oct 94 12:47:43 -0400 Received: from twisto.eng.hou.compaq.com by wotan.compaq.com with smtp (Smail3.1.28.1 #12) id m0r0uLw-000vJcC; Fri, 28 Oct 94 11:40 CDT Received: from bangate.compaq.com by twisto.eng.hou.compaq.com with smtp (Smail3.1.28.1 #10) id m0r0uKU-000uITC; Fri, 28 Oct 94 11:39 CDT @xxx.com> Received: by bangate.compaq.com with VINES ; Fri, 28 Oct 94 11:06:53 CDT Date: Fri, 28 Oct 94 10:47:34 CDT @xxx.com Subject: re: Re: EGO clogging. (long) To: diy_efi Cc: Sender: owner-diy_efi Precedence: bulk Reply-To: DIY_EFI I didn't understand a lot of this post. Can someone enlighten me? Maybe someone (me?) should put together a digest with common accronyms, the difference between SD, MAP, MAF, etc. @xxx.ca> Wrote: | | | > Aaahh!! Neat! | | Note I said 'most'. Some ECM's actually control the temperature, | notably cars using UEGO sensors... EGO=oxygen sensor UEGO=????? | | > So the 'trip point' is much the same but the overall voltage is | lower at | > lower temperatures.. The curve is 'squashed down' if you will. | > So, with a thermocouple and an EGO you could (with some | processing) find | > out the A/F ratio. | | Yes and no. You could find it out right around stoich. Generally, an O2 | sensor doesn't like sitting at one voltage very much. That's why the O2 | sensing algorithms always oscillate the sensor a bit. I thought the O2 sensor generated voltage depending on amount of O2 in the exhaust. sort of an exponential curve with stoich somewhere around where it starts to rise. Does it need to be driven externally after warm-up? | | > How does a UEGO work? | | It contains an additional 'pump' cell. Since the normal O2 sensor | responds to hydrogen and other gasses (except oxygen, of course), | the reverse process (applying current to the cell) will move these | same ions through the ceramic. | By combining an O2 sensor and a 'pump' cell, the O2 sensor will operate | with a shifted centre point. By pumping, say, 10 mA of current through | the cell in one direction, the trip point will go from, say, 14.7:1 to | 10:1. etc. With some creative electronics, the sensor can be made to | read out the actual A:F ratio. I thought it already read out the A/F ratio. What exactly are you saying above? Is the "pump" a constant current source? | | After a bit of testing, people have found that the O2 sensor does not | actually respond to oxygen ions until the cell reaches 800-900 deg. C. | Few exhaust systems run that hot, but at the lower temperature of | 400-500 deg. C., the cell responds to other gasses, such as hydrogen. | The net result is correct, but the cell doesn't actually respond to oxygen. Below is a post I got off r.a.t explaining O2 sensors. The poster seems to know what he is talking about, and is the first real explanation that I've seen: >Please excuse a question from a novice... >Just exactly what does the oxygen sensor do (please don't say it's senses >the oxygen level), i.e. what is done with the info it produces. Also, >why should it be replaced every 30,000 miles? What's wearing out? >Thanks! This guy obviously sounds like he wants some insight into the oxygen sensor so......strap yourselves in........it's gonna be a long one..... Well.........from my knowledge the oxygen sensor is a device made of zinc oxide or titanium oxide mostly, that tends to attract oxygen ions and accumulate them on its surface. Now the thing is oxygen ions have a net negative charge and the sensor material has a net positive charge thus the attraction. However the magnitude of oxygen ionic charge concentration is slightly higher than that of the sensor material. Now the sensor is mounted half in and half out of the exhaust manifold. Obviously the nose is exposed to exhaust gases and the boot is open to the atmosphere. The atmospheric oxygen ions (of which air is made up of 21% O2) are accumulated on that end of the ZnO2 wafer. Any oxygen present in the exhaust gas accumulate on the other side of the ZnO2 wafer. When the sensor achieves > 300 degrees celcius, the wafer becomes conductive and the ionic difference in oxygen concentrations between outside air and exhaust oxygen produce an electric field across the wafer, current flows and a potential difference or voltage is measured across the platinum terminals of the sensor. Now if you think about it......if your engine is running lean, then the excess oxygen which is unburnt in the combustion chamber appears as part of the exhaust gas. This oxygen concentration (usually 2% of exhaust gas for lean conditions) is collected at the sensor and the difference in its concentration with respect to atmospheric oxygen concentration produces a small voltage which gets smaller as fuel mix becomes leaner, since for very lean conditions more oxygen appears in the exhaust and the difference between concentrations of exhaust oxygen and air oxygen is smaller thus sensor output falls. Typically values are around 0.1 - 0.3 volts DC for very lean to slightly lean, respectively. Alternatively a slightly rich mix reduces oxygen present in exhaust and concentration difference is larger thus output voltage increases right up until a very rich mix with no oxygen in exhaust and maximum voltage is produced from the sensor. Typically 0.6 to 0.9 volts for slightly rich to very rich mix.........Now, when air/fuel ratio is correct (14.7 parts airmass to 1 part mass of fuel) combustion is fully completed with (theoretically) very little or no air AND fuel left. Exhaust gas is at its cleanest when this ratio is achieved, pollutants are minimised (check your chemistry