以下、本発明の実施形態を図面に基づいて説明する。
図1は本発明が適用される排気浄化装置の概略構成を示し、エンジン1の排気管2には触媒3が設けられ、その上流にはリニアな特性のフロント空燃比センサ4、下流にはリア空燃比センサ5が設置され、これらセンサ出力に基づいてエンジン1に供給する燃料の空燃比を制御するコントローラ6が備えられる。
エンジン1の吸気管7にはスロットル弁8と、スロットル弁8により調整された吸入空気量を測定するエアフローメータ9が設けられる。
触媒3はいわゆる三元触媒であって、触媒雰囲気が理論空燃比のときにNOx、HC、COを最大効率で浄化する。触媒3は触媒担体にセリア等の酸素ストレージ材で被覆されており、流入する排気の空燃比に応じて酸素を保持したり、放出したりする機能(酸素ストレージ機能)を有している。
上記のフロント空燃比センサ4は排気中の酸素濃度に応じたリニアな出力特性をもち、上記のリア空燃比センサ5はストイキの付近で2値的に切換わる特性をもっている。
また、エンジン1には冷却水の温度を検出する温度センサ10が取付けられ、エンジン1の運転状態と共に触媒3の活性化状態などを判定するため等に用いられる。
コントローラ6はマイクロプロセッサ、ROM、RAM、I/Oインターフェースなどで構成され、エアフローメータ9と、フロント空燃比センサ4の出力に基づいて触媒3の酸素ストレージ量を演算し、このストレージ量が目標値となるように空燃比をフィードバック制御する。
触媒3の酸素ストレージ量の演算は、触媒上流の排気空燃比とそのときの吸入空気量から推定する。まず、触媒上流の排気空燃比から換算して排気中の酸素の過剰または不足する割合である酸素過剰率を求める。酸素過剰率はストイキのときをゼロとして、リーン側で正、リッチ側で負の値となる。
酸素過剰率とそのときの吸入空気量とから触媒3に吸収される酸素量または放出される酸素量が分かり、これを積算していくことで触媒3の酸素ストレージ量を推定できる。予め触媒3の最大酸素ストレージ量を実験等により確認しておき、例えばその半分の保持量を目標値として設定し、酸素ストレージ量がこの目標値と一致するように空燃比を制御するのである。
演算した酸素ストレージ量が目標値よりも少ないときは、目標空燃比をリーン側にして保持量を増やし、逆に目標値よりも多いときはリッチ側にして酸素ストレージ量を減らし、これらにより目標値に一致させる。
ただし、空燃比の目標値としては、エンジンの運転要求からも制御され、基本的にはストイキとなるようにフィードバック制御されるので、目標ストレージ量からのずれ分を修正するにしても、その修正量については運転性を悪化させない範囲に、ストイキに対しての修正幅が制限される。
また、演算誤差により、演算された酸素ストレージ量と実際の酸素ストレージ量との間にずれを生じるが、リア空燃比センサ5の検出する酸素濃度に基づいて、例えばエンジンの燃料カット時などに、燃料カットに移行してから所定のタイミングで演算した酸素ストレージ量のリセットを行い、ずれを修正する。
さらに本発明では、コントローラ6は、酸素ストレージ量を演算するためのフロント空燃比センサ4のストイキ点がリーン側にシフトしているかどうか判断し、もしもセンサ劣化などによりフロント空燃比センサ4のストイキ点がリーンシフトしているときは、これに応じてフロント空燃比センサ4のストイキ点をリーン側に補正し、酸素ストレージ量を正しく目標値に収束させるようになっている。
触媒3の酸素ストレージ量は常に目標値になるように制御されるため、触媒上流側の空燃比に多少の変動があっても、触媒の酸素ストレージ能力により、触媒下流側の空燃比はストイキに維持される。しかし、フロント空燃比センサ4のストイキ点がリーン側にシフトしていると、触媒の酸素ストレージ量が飽和し、リア空燃比センサ出力がストイキからリーン側となる。その後は目標空燃比に対する実空燃比の遅れに起因して、リア空燃比センサ出力が短い周期でリッチとリーンを繰り返す現象が生じる(図2参照)。
このような現象が生じたか否かを判定し、このような現象が生じたこと判定したときに、フロント空燃比センサ4のストイキ点がリーンシフトしていると判断して、フロント空燃比センサ4のストイキ点をリーン側へと補正するのである。
この判定について、図3を参照して説明すると、図3の左半分にリーンシフトが生じている場合のリア空燃比センサ出力と酸素ストレージ量の変化を、同様に図3の右半分にリーンシフトが生じていない場合のリア空燃比センサ出力と酸素ストレージ量の変化を示している。なお、図3の左半分は図2と基本的に同じものであり、ただし横軸の時間的スケールは相違している。
図3に示すように、リア空燃比センサ出力がリーンを継続する場合に酸素ストレージ量最大値HOSCMAXと酸素ストレージ量今回値HOSC(new)とで囲まれた面積(S1で示す)を「第一面積」、リア空燃比センサ出力がリッチを継続する場合に酸素ストレージ量今回値HOSC(new)と酸素ストレージ量最小値HOSCMIN(=0)とで囲まれた面積(S2で示す)を「第二面積」として、これらの面積比率RATESMO2(=第一面積/第二面積)を考えたとき、フロント空燃比センサのストイキ点がリーンシフトしている場合にはこの面積比率RATESMO2が1を超える(図3の左半分参照)のに対して、リーンシフトが生じてない場合には面積比率RATESMO2が1以下となる(図3の右半分参照)ことに着目して、フロント空燃比センサ4のストイキ点がリーンシフトしているか否かを判定する。
この制御内容を以下のフローチャートに従って詳しく説明する。
図4は酸素ストレージ量HCSCを演算(推定)するためのもので、一定時間毎(例えば10ms毎)に実行する。
まずステップ1では冷却水温等の条件により触媒3が活性化しているかどうかをみる。触媒3が活性化していなければ、触媒3の酸素ストレージ能力が働かないので、そのまま今回の処理を終了する。
触媒3が活性化していればステップ2に進み、フロント空燃比センサ4の出力を空燃比AFsに変換する。これは例えばフロント空燃比センサ4の出力と空燃比との関係を表すテーブルを予め作成しておき、このテーブルを検索することにより空燃比を求めるようにすればよい。
ステップ4ではEEPROMなどのメモリからシフト補正量学習値を読み出し、このシフト補正量学習値によりステップ5でフロント空燃比センサ4のストイキ点のリーン側へのシフト補正を行う。これは、次式により実空燃比AFrを算出することである。
AFr=AFs+シフト補正量学習値 …(1)
ここで、(1)式右辺のAFsはフロント空燃比センサ4により検出される見かけ上の空燃比であり、フロント空燃比センサ4のストイキ点がリーンシフトしているときには実際の空燃比はこの見かけ上の空燃比よりリーン側にあるのであるから、その差の分をシフト補正量学習値により埋め合わせようというものである。従って、フロント空燃比センサ4のストイキ点がリーンシフトしているときにはシフト補正量学習値は正の値であり、この正の値のシフト補正量学習によって空燃比が大きくなる側(つまりリーン側)に補正される。シフト補正量学習値の演算については後述する。
ステップ6ではこのようして求めたシフト補正後の空燃比である実空燃比AFrから、排気中の過不足酸素濃度FO2を所定のテーブルを検索することにより求める。
ここで、排気中の過不足酸素濃度FO2は、図5に示すように、ストイキでの値を基準のゼロとしてそのときの空燃比を酸素濃度に換算した値である。従って、例えば空燃比がリーンのときは、ストイキの酸素濃度よりも過剰となるので、FO2はプラスの値となり、また空燃比がリッチのときはストイキの酸素濃度よりも不足するので、マイナスの値となる。
ステップ7ではこの過不足酸素濃度FO2に基づいて酸素ストレージ量HOSCを演算する。この酸素ストレージ量HOSCの演算については図6、図7(図4のステップ7のサブルーチン)のフローにより説明する。
触媒3の酸素ストレージ特性は、触媒3の貴金属に高速で吸収/放出される特性と、触媒3のセリアなどの酸素ストレージ材に低速で吸収/放出される特性に分かれる。したがって酸素ストレージ量をこの特性に合わせて高速成分と低速成分に分けて演算することにより、触媒3の特性に応じた実際のストレージ量を正確に演算できる。
図6は酸素ストレージ量の高速成分を演算するための、図7は同じく低速成分を演算するためのものである。
図6において、ステップ11では演算サイクル時間当たりの酸素過不足量O2INを次式により演算する。
O2IN=a×FO2×Q×t …(2)
ただし、a:定数(単位換算のための値)、
Q:排気流量(吸入空気流量で代用する)、
t:図6の演算サイクル時間、
ステップ12では酸素過不足量O2INの値に基づき高速成分の酸素を吸収する状態にあるのかあるいは高速成分の酸素を放出する状態にあるかをみる。触媒3に流入する排気の空燃比がリーンであって酸素過不足量O2INがゼロより大きい場合には高速成分の酸素を吸収する状態にあると判断してステップ13に進み、次式により高速成分を演算する。
HO2(new)=HO2(old)+O2IN …(3)
ただし、HO2(new):高速成分の今回値、
HO2(old):高速成分の前回値、
一方、酸素過不足量O2INがゼロ以下の値で、高速成分の酸素を放出する状態にあると判断した場合にはステップ12よりステップ14に進み次式により高速成分を演算する。
HO2(new)=HO2(old)+O2IN×A …(4)
ただし、HO2(new):高速成分の今回値、
HO2(old):高速成分の前回値、
A:高速成分の酸素放出率、
このようにして高速成分今回値HO2(new)を演算したら、ステップ15、16でその値が高速成分の最大値HO2MAXを超えていないか、あるいは最小値HO2MIN(=0)以下になっていないかをみる。そして、高速成分今回値HO2(new)が最大値HO2MAX以上になっている場合にはステップ15よりステップ17に進み高速成分として吸収されずに溢れ出るオーバフロー分(過剰量)OVERFLOWを次式により演算し、さらに、高速成分今回値HO2(new)を最大値HO2MAXに制限する。
OVERFLOW= HO2(new)−HO2MAX …(5)
高速成分今回値HO2(new)が最小値HO2MIN以下になっている場合にはステップ16よりステップ18に進み、高速成分として吸収されずに溢れ出るオーバフロー分(不足量)OVERFLOWを次式により演算し、さらに、高速成分今回値HO2(new)を最小値HO2MINに制限する。
OVERFLOW=HO2(new)−HO2MIN …(6)
なお、ここでは最小値HO2MINとして0を与えているから、高速成分の酸素をすべて放出した状態で不足する酸素量が負のオーバフロー分として算出される。
一方、高速成分今回値HO2(new)が最大値HO2MAXと最小値HO2MINの間にあるときには、触媒3に流入した排気の酸素過不足量O2INは全て高速成分の酸素として吸収されるので、このときにはステップ19に進んでオーバフロー分OVERFLOWにゼロを設定する。
ステップ20、22ではリア空燃比センサ出力がストイキよりリーンへと変化したか否か、またはリア空燃比センサ出力がストイキよりリッチへと変化したか否かをみる。リア空燃比センサ出力がストイキよりリーンへと変化したときにはステップ20よりステップ21に進んで高速成分今回値HO2(new)を最大値HO2MAXに、またリア空燃比センサ出力がストイキよりリッチへと変化したときにはステップ20、22よりステップ23に進んで高速成分今回値HO2(new)を最小値HO2MINにセットする。このようにリア空燃比センサ出力がストイキよりリーンへと変化したときに高速成分今回値HO2(new)を最大値HO2MAXにセットし、またリア空燃比センサ出力がストイキよりリッチへと変化したときに高速成分今回値HO2(new)を最小値HO2MINにセットするのは、演算上の酸素ストレージ量である高速成分今回値HO2(new)を実際の酸素ストレージ量に合わせるためである。
さて、高速成分今回値HO2(new)が最大値HO2MAX以上あるいは最小値HO2MIN以下となって高速成分の酸素とならずに溢れ出たオーバフロー分OVERFLOWは、低速成分の酸素として吸収あるいは放出される。図7は酸素ストレージ量の低速成分を演算するためのサブルーチンで、このサブルーチンでは高速成分の酸素とならずに溢れ出たオーバフロー分OVERFLOWに基づき低速成分を演算する。
図7においてステップ41では低速成分を次式により演算する。
LO2(new)= LO2(old)z+OVERFLOW×B …(7)
ただし、LO2(new):低速成分の今回値、
LO2(old):低速成分の前回値、
B:低速成分の酸素吸収放出率、
ここで、低速成分の酸素吸収放出率Bとしては1以下の正の値を設定するが、実際には吸収と放出とで異なる特性を有し、また実際の吸収放出率は触媒温度TCAT、低速成分等の影響を受けるので、吸収率と放出率とをそれぞれ分離して設定するようにしてもよい。その場合、オーバフロー分OVERFLOWが正であるとき酸素が過剰であり、このときの酸素吸収率Bとしては、例えば触媒温度TCATが高いほど、また低速成分LO2が小さいほど大きな値を設定する。また、オーバフロー分OVERFLOWが負であるとき酸素が不足しており、このときの酸素放出率Bとしては、例えば触媒温度TCATが高いほど、また低速成分が大きいほど大きな値を設定する。
ステップ42、43では、高速成分の演算時と同様に、演算された低速成分今回値LO2(new)がその最大値LO2MAXを超えていないか、あるいは最小値LO2MIN(=0)以下になっていないかをみる。最大値LO2MAXを超えている場合にはステップ42よりステップ44に進み低速成分今回値LO2(new)から溢れる酸素過不足量O2OUTを次式により演算し低速成分今回値LO2(new)を最大値LO2MAXに制限する。
O2OUT= LO2(new)−LO2MAX …(8)
酸素過不足量O2OUTはそのまま触媒3の下流に流出する酸素である。
一方、最小値LO2MIN以下になっている場合にはステップ43よりステップ45へと進み低速成分今回値LO2(new)を最小値LO2MINに制限する。
このようにして触媒3の酸素ストレージ量を演算している。
図8は空燃比フィードバック補正係数αを演算するためのもので、各気筒のRef信号(クランク角の基準位置信号)の入力毎に実行する。これは、Ref信号に同期して燃料噴射が行われ、この燃料噴射により排気中の空燃比が変化するので、これに合わせたもである。
ステップ51では空燃比フィードバック制御条件の成立時であるか否かをみる。空燃比フィードバック制御条件の成立時は従来と同じで、例えばフロント空燃比センサ4が活性化していること等が成立したとき、空燃比フィードバック制御条件の成立時となる。また、燃料カット時やエンジン高負荷時は空燃比フィードバック制御条件の非成立時である。空燃比フィードバック制御条件の成立時でないときにはステップ52に進んで空燃比フィードバック補正係数α=1.0として今回の処理を終了する。
空燃比フィードバック制御条件の成立時であるときにはステップ51よりステップ53に進み、図6のフローで得られている高速成分今回値HO2(new)、図4のステップ5で得られている実空燃比AFrを読み込み、ステップ54で高速成分今回値HO2(new)を酸素ストレージ量HOSCに移す。酸素ストレージ量HOSCについて図6、図7では高速成分と低速成分に分けて演算する場合で説明したが、ここでは簡単のため高速成分今回値HO2(new)を酸素ストレージ量HOSCとしている。
ステップ55では酸素ストレージ量HOSCの目標酸素ストレージ量からの偏差HOSCSを次式により演算する。
HOSCS=HOSC−目標酸素ストレージ量 …(9)
ここで、(9)式の目標酸素ストレージ量としては最大酸素ストレージ量の1/2を設定しておく。
ステップ56ではこの偏差HOSCSに基づいて次式により目標酸素ストレージ量FO2tを演算する。
FO2t=Gp×HOSCS …(10)
ただし、Gp:比例ゲイン(適合値)、
ここで、(10)式の比例ゲインGpは目標空燃比への応答を高めたい要求がある場合に対応するため導入している。従って、目標空燃比への応答を高める必要がないときにはGp=1.0とすればよい。
ステップ57ではこの目標酸素ストレージ量FO2tを次式により目標空燃比AFtへと変換する。
AFt=14.7+14.7×FO2t/Q …(11)
ただし、Q:排気流量(吸入空気流量で代用する)、
ここで、(11)式右辺第2項は目標酸素ストレージ量FO2tを空燃比に換算した値で、(11)式は理論空燃比(14.7)よりこの空燃比換算分だけシフトさせた値を目標空燃比として設定するものである。例えば、酸素ストレージ量HOSCが目標値より大きい(偏差HOSCSが正)ときには目標酸素ストレージ量FO2tが正の値となり、(11)式によれば目標空燃比AFtが14.7よりも大きくなる(ストイキよりもリーン側)。すなわち、酸素ストレージ量HOSCが目標値より大きいときには目標値へと戻すため目標空燃比をストイキよりもリーン側へと移行させる。この逆に、酸素ストレージ量HOSCが目標値より小さい(偏差HOSCSが負)ときには目標酸素ストレージ量FO2tが負の値となり、(11)式によれば目標空燃比AFtが14.7よりも小さくなる(ストイキよりもリッチ側)。すなわち、酸素ストレージ量HOSCが目標値より小さいときには目標値へと戻すため目標空燃比をストイキよりもリッチ側へと移行させる。
ここでの空燃比制御はフィードバック制御であるため、ステップ58ではフロント空燃比センサ4により検出される実空燃比AFrの、この目標空燃比AFtからの偏差dAFを次式により演算する。
dAF=AFr−AFt …(12)
ただし、(12)式右辺のフロント空燃比センサ4により検出される実空燃比AFrは、前記(1)式に示したようにシフト補正量学習値によりリーン側に補正されている値である。
ステップ59ではこの空燃比偏差dAFに基づいて次式により空燃比フィードバック補正係数αを演算する。
α=dAF×PGain+ΣdAF×IGain+ΔdAF×DGain
…(13)
ただし、PGain:比例ゲイン(正の値)、
IGain:積分ゲイン(正の値)、
DGain:微分ゲイン(正の値)、
(13)式右辺の第1項、第2項、第3項はそれぞれ比例分、積分分、微分分で、(13)式はこれらの和を空燃比のフィードバック補正量とするものである。
図示しない燃料噴射量演算ルーチンではこのようにして演算した空燃比フィードバック補正係数αを用いて次式によりシーケンシャル噴射時の燃料噴射パルス幅Tiを演算する。
Ti=Tp×TFBYA×α×2+Ts …(14)
ただし、Tp:基本噴射パルス幅、
TFBYA:目標当量比、
Ts:無効噴射パルス幅、
そして、所定の噴射タイミングとなったときこの燃料噴射パルス幅Tiの分だけ各気筒に設けた燃料インジェクタが開かれ、燃料噴射が行われる。
空燃比フィードバック制御条件の成立時(このときTFBYA=1.0)において、例えば実空燃比AFrが目標空燃比AFtより大きい(空燃比偏差dAFが正)ときには空燃比フィードバック補正係数αが1.0を超える値となり、この1.0を超える値のαによりストイキの混合気の得られる燃料量よりも増量されて排気中の空燃比がストイキへと戻される。この逆に、実空燃比AFrが目標空燃比AFtより小さい(空燃比偏差dAFが負)ときには空燃比フィードバック補正係数αが1.0より小さな正の値となり、この1.0より小さな正の値のαによりストイキの混合気の得られる燃料量よりも減量されて排気中の空燃比がストイキへと戻される。つまり、空燃比フィードバック制御条件の成立時おいてはフロント空燃比センサ4により検出される実空燃比AFrが、目標空燃比AFtと一致するように燃料制御が行われる。この場合に、上記(13)式右辺のフィードバックゲイン(PGain、IGain、DGain)を大きくし過ぎると、実空燃比AFrが目標空燃比AFtを行き過ぎる、いわゆるオーバーシュートを生じるので、フィードバックゲインはあまり大きくすることができず、従って空燃比フィードバック制御を行うとき、目標空燃比AFtに対して実空燃比AFrは応答遅れを持って追従してゆく。
図9、図10はフロント空燃比センサ4のストイキ点をリーン側に補正するのに用いるシフト補正量学習値を演算するためのもので、一定時間毎に実行する。ここでは、シフト補正量が学習値の場合で説明するが、学習値でなくてもよいことはもちろんである。
ステップ61ではエンジン回転速度と基本噴射パルス幅Tpとから定まる運転条件が学習領域にあるか否かをみる。シフト補正量学習値を演算(更新)する領域は図11に示したように予め定められている。高空気量域を学習領域としていないのは、高空気量域では図2や図3左半分に示した現象が生じにくいためである。運転条件が学習領域にない場合にはそのまま今回の処理を終了する。
運転条件が学習領域にあるときにはステップ61よりステップ62以降に進む。このうち、図9のステップ62〜70及び図10のステップ71〜75、80は図3に示した第一面積S1及び第二面積S2を演算する部分、図10のステップ74〜77、79〜85は、第一面積平均値AEVS1及び第二面積平均値AVES2を演算する部分、図10のステップ86は面積比率RATESMO2を演算する部分、図10のステップ87はフロント空燃比センサ4のストイキ点がリーンシフトしているか否かを判定する部分、図10のステップ88はその判定結果に基づき、フロント空燃比センサ4のストイキ点がリーンシフトしている場合にシフト補正量学習値を正の値で大きくなる側に更新する部分である。
ここでは、第一面積の平均値と第二面積の平均値を演算し、これらの比率を面積比率として演算する場合で説明するが、簡単には第一面積と第二面積を演算し、これらの比率を面積比率として演算してもかまわない。
以下具体的に説明する。図9においてまずステップ62ではリア空燃比センサ出力がストイキにあるか否かをみる。
ここで、ヒステリシスを有するリア空燃比センサ出力に基づくリッチ、リーン、ストイキの各判定は次のようなものである。すなわち、図23に示したように、リア空燃比センサ出力がリッチ側よりリーン側に向かうときにはリア空燃比センサ出力がリッチ側スライスレベルRSLICEを横切る前はリッチ側にあると、またこのリッチ側スライスレベルRSLICEを横切って小さくなったタイミングでストイキに戻ったと判断される。この逆に、リア空燃比センサ出力がリーン側よりリッチ側に向かうときにはリア空燃比センサ出力がリーン側スライスレベルLSLICEを横切る前はリーン側にあると、またこのリーン側スライスレベルLSLICEを横切って大きくなったタイミングでストイキに戻ったと判断される。
リア空燃比センサ出力がストイキでないとき(つまりリッチまたはリーンのとき)にはステップ63に進んで酸素ストレージ量HOSCを読み込む。この酸素ストレージ量HOSCとしては、図8のステップ53、54で前述したように高速成分HO2今回値(new)を用いればよい。
ステップ64、65ではリア空燃比センサ出力が今回リーンであるのか否か、またリア空燃比センサ出力が前回リーンであったか否かをみる。リア空燃比センサ出力が今回リーンでありかつ前回もリーンであった、つまりリア空燃比センサ出力がリーンを継続するときにはステップ64、65よりステップ66に進んで次式により、図3に示した第一面積S1を演算するため、酸素ストレージ量の最大値HOSCMAXより酸素ストレージ量HOSCを差し引いた値を積算する。
LSMOSQ(new)=LSMOSQ(old)+(HOSCMAX−HOSC)
…(15)
ただし、LSMOSQ(new):リーン時面積今回値、
LSMOSQ(old):リーン時面積前回値、
ステップ67では次回処理のためリーン時面積今回値LSMOSQ(new)の値をリーン時面積前回値LSMOSQ(old)に移しておく。
次回以降もリア空燃比センサ出力がリーンであればステップ66、67の操作を繰り返し実行する。この結果、(15)式によれば、リア空燃比センサ出力が継続してリーンである間、(15)式右辺第2項を積算することになるので、図3に示した面積S1が求められることになる。リーン時面積前回値LSMOSQ(old)の初期値にはゼロをいれておく。
これに対して、リア空燃比センサ出力が今回リッチであるときにはステップ64よりステップ68に進んでリア空燃比センサ出力が前回リッチであったか否かをみる。リア空燃比センサ出力が今回リッチでありかつ前回もリッチであった、つまりリア空燃比センサ出力がリッチを継続するときにはステップ64、68よりステップ69に進んで次式により、図3に示した第二面積S2を演算するため、酸素ストレージ量HOSCから酸素ストレージ量の最小値HOSCMIN(=0)を差しひいた値を積算する。
RSMOSQ(new)=RSMOSQ(old)+HOSC−HOSCMIN
…(16)
ただし、RSMOSQ(new):リッチ時面積今回値、
RSMOSQ(old):リッチ時面積前回値、
ステップ70では次回処理のためリッチ時面積今回値RSMOSQ(new)の値をリッチ時面積前回値RSMOSQ(old)に移しておく。
次回以降もリア空燃比センサ出力がリッチであればステップ69、70の操作を繰り返し実行する。この結果、(16)式によれば、リア空燃比センサ出力が継続してリッチである間、(16)式右辺第2項を積算することになるので、リッチ時面積は図3に示した第二面積S2が求められることになる。リッチ時面積前回値RSMOSQ(old)の初期値にもゼロを入れておく。
一方、リア空燃比センサ出力が今回ストイキにあるときには図9のステップ62より図10のステップ71、72に進みリア空燃比センサ出力が前回ストイキであったか否か、あるいは前回リーンであったか否かをみる。リア空燃比センサ出力が今回ストイキにありかつ前回リーンであったとき、つまりリア空燃比センサ出力がリーンからストイキへと切換わったときにはステップ71、72よりステップ73に進みそのときのリーン時面積今回値LSMOSQ(new)を面積S1に移し、ステップ74で次式によりリーン時面積を積算する。
LSUM1(new)=LSUM1(old)+S1 …(17)
ただし、LSUM1(new):リーン時面積積算値今回値、
LSUM1(old):リーン時面積積算値前回値、
ここで、(17)式右辺第2項の面積S1はリア空燃比センサ出力がリーンからストイキへと切換わったタイミングでの値であるから、図3に示した第一面積S1そのものである。従って、(17)式は第一面積S1をさらに積算していくものである。これは、第一面積S1をいくつかサンプリングして積算した後でその平均値を求めるためである。
ステップ75ではサンプル回数m1(ゼロに初期設定)を1だけ増やす。サンプル回数m1は(17)式により第一面積S1を積算した回数を表す。ステップ76では次回処理のためリーン時面積積算値今回値LSUM1(new)の値をリーン時面積積算値前回値LSUM1(old)に移しておく。リーン時面積積算値前回値LSUM1(old)の初期値にはゼロを入れておく。
ステップ77では次にリア空燃比センサ出力がリーンを継続するときに備えて、再び図3に示した第一面積S1を求めるため、リーン時面積前回値LSMOSQ(old)=0としておく。
これに対して、リア空燃比センサ出力が今回ストイキにありかつ前回リッチであったとき、つまりリア空燃比センサ出力がリッチからストイキへと切換わったときにはステップ71、72よりステップ78に進みそのときのリッチ時面積今回値RSMOSQ(new)を面積S2に移し、ステップ79で次式によりリッチ時面積を積算する。
RSUM1(new)=RSUM1(old)+S2 …(18)
ただし、RSUM1(new):リッチ時面積積算値今回値、
RSUM1(old):リッチ時面積積算値前回値、
ここで、(18)式右辺第2項の面積S2はリア空燃比センサ出力がリッチからストイキへと切換わったタイミングでの値であるから、図3に示した第二面積S2そのものである。従って、(18)式は第二面積S2をさらに積算していくものである。これは、第二面積S2をいくつかサンプリングして積算した後でその平均値を求めるためである。
ステップ80ではサンプル回数n1(ゼロに初期設定)を1だけ増やす。サンプル回数n1は(18)式により第二面積S2を積算した回数を表す。ステップ81では次回処理のためリッチ時面積積算値今回値RSUM1(new)の値をリッチ時面積積算値前回値RSUM1(old)に移しておく。リッチ時面積積算値前回値RSUM1(old)の初期値にもゼロを入れておく。
ステップ82では次にリア空燃比センサ出力がリッチを継続するときに備えて、再び図3に示した第二面積S2を求めるため、リッチ時面積前回値RSMOSQ(old)=0としておく。
このようにして、リア空燃比センサ出力がリーンよりストイキへと切換わるたびにステップ74において図3に示した第一面積S1が積算され、またリア空燃比センサ出力がリッチよりストイキへと切換わるたびにステップ79において図3に示した第二面積S2が積算されてゆく。
ステップ83ではサンプル回数m1及びn1と一定値(適合値)とを比較する。サンプル回数m及びnが一定値に達していなければそのまま今回の処理を終了する。
サンプル回数m1及びn1がいずれも一定値に達していればステップ84、85に進み次式により第一面積S1の平均値AVES1、第二面積S2の平均値AVES2をそれぞれ演算する。
AVES1=LSUM1(new)/m1 …(19)
AVES2=RSUM1(new)/n1 …(20)
ステップ86では次式によりこれらの面積比率RATESMO2を演算する。
RATESMO2=AVES1/AVES2 …(21)
ステップ87ではこの面積比率RATESMO2と1(一定値)を比較する。面積比率RATESMO2が1を超えるときにはフロント空燃比センサ4のストイキ点がリーンシフトしていると判定し、ステップ88に進んでシフト補正量学習値(ゼロに初期設定)を次式により大きくなる側に更新する。
シフト補正量学習値(new)=シフト補正量学習値(old)+所定値
…(22)
ただし、シフト補正量学習値(new):更新前のシフト補正量学習値、
シフト補正量学習値(old):更新後のシフト補正量学習値、
所定値:更新量を定める正の一定値(適合値)、
このようにして求めたシフト補正量学習値はEEPROMなどのメモリに保存しておく。
一方、面積比率RATESMO2が1以下であればフロント空燃比センサ4のストイキ点がリーンシフトしていないので、このときにはステップ88を飛ばしてステップ89に進む。
ステップ89では次回のシフト補正量学習値の更新に備えるため、リーン時面積積算値前回値LSUM1(old)、リッチ時面積積算値前回値RSUM1(old)、サンプル回数m1、n1にいずれもゼロを入れておく。
ここで、本実施形態の作用を説明する。
フロント空燃比センサ4のストイキ点がリーンシフトしていないときにはシフト補正量学習値=0であり、従ってフロント空燃比センサ4の出力を空燃比へと変換した値AFsが実際の空燃比とよく一致することになる。ところが、経時劣化などにより図3左半分に示したようにリア空燃比センサ5の出力が短い周期でリーンとリッチを繰り返し、しかも振幅の中心がリーン側に偏った現象が生じる。これはフロント空燃比センサ4が、見かけ上ストイキ点でリッチ側の出力をするためであるから、シフト補正量学習値をこの見かけ上の空燃比であるAFsに足すことによってリーン側へと補正してやればよい。
そこで、図3左半分に示す現象が生じているときにはフロント空燃比センサ4のストイキ点がリーンシフトしていると判断され、シフト補正量学習値が正の値で大きくなる側に更新されると、シフト補正量学習値は正の値をもつことになり、このときには、上記図4のステップ5においてこのシフト補正量学習値によりフロント空燃比センサ出力を空燃比へと変換した値AFsが補正され(シフト補正量学習値が、フロント空燃比センサ出力を空燃比へと変換した値AFsに加わる)、実空燃比AFrが大きくなる。この補正により演算値としての実空燃比AFrが実際の空燃比へと近づくのであるが、それでも、図3左半分に示す現象が生じるのであればリーン側への補正が足りない。このときには再びシフト補正量学習値が正の値で大きくなる側に更新され、シフト補正量学習値が前回よりも正の値で大きくなり、この大きくなったシフト補正量学習値によりAFsが補正されると、演算値としての実空燃比AFrがさらに実際の空燃比へと近づく。このようにして、シフト補正量学習値の更新を繰り返すと、やがて演算値としての実空燃比AFrが実際の空燃比へと収束する。このときには、図3の右半分に示したようになり、リア空燃比センサ出力が短い周期でリッチとリーンを繰り返す現象がやむ。このように、シフト補正量学習値は運転条件が学習領域に滞在する限り、所定の時間毎に何度も更新し、これによりシフト補正量学習値が収束するようにする。
このようにして、本実施形態(請求項1、2に記載の発明)によれば、フロント空燃比センサ4の出力に基づいて酸素ストレージ量を推定し、この酸素ストレージ量推定値HOSCが目標値と一致するように空燃比を制御する(図4、図8参照)一方で、リア空燃比センサ出力がリーンを継続するときに酸素ストレージ量最大値HOSCMAXより酸素ストレージ量推定値HOSCを差し引いた値を積算した面積を第一面積S1として、また、リア空燃比センサ出力がリッチを継続するときに酸素ストレージ量推定値HOSCより酸素ストレージ量最小値HOSCMINを差し引いた値を積算した面積を第二面積S2としてそれぞれ演算し(図10のステップ73、78参照)、これら第一面積S1と第二面積S2に基づいてフロント空燃比センサ4のストイキ点がリーンシフトしているか否かを判定し(図10のステップ84、85、86、87参照)、この判定結果よりフロント空燃比センサ4のストイキ点がリーンシフトしているときにフロント空燃比センサ4のストイキ点をリーン側に補正する(図10のステップ87、88、図4のステップ4、5参照)ので、フロント空燃比センサ4のストイキ点のリーンシフトに起因して、リア空燃比センサ5の出力が短い周期でリーンとリッチとを繰り返す現象が生じている場合にもフロント空燃比センサ4のストイキ点がリーンシフトしているとの検出が可能となり、これにより、フロント空燃比センサ4のストイキ点を補正する機会を増やすことができる。
また、第1実施形態(請求項2に記載の発明)によれば、面積比率RATESMO2と比較する相手が1でよいので、面積比率RATESMO2と比較する相手をわざわざ適合する必要がなく簡素な構成となっている。
図13、図14のフローチャートは第2実施形態で、第1実施形態の図9、図10と置き換わるものである。図13、図14において図9、図10と同一部分には同一のステップ番号をつけている。
第1実施形態では、図3左半分の下段に示したように酸素ストレージ量について第一面積S1と第二面積S2をいくつかサンプリングして積算した後でその平均値AVES1、AVES2を求め、その2つの平均値AVES1、AVES2から面積比率RATESMO2を演算し、その面積比率RATESMO2が1を超えるか否かによりフロント空燃比センサ4のストイキ点がリーンシフトしているか否かを判定したが、第2実施形態では、図12(基本的に図3と同じもの)左半分に示したように、リア空燃比センサ出力がストイキよりリッチへと切換わっときの酸素ストレージ量最大値HOSCMAXとそのときの酸素ストレージ量HOSCとの差(L1で示す)を「第一長さ」、リア空燃比センサ出力がストイキよりリーンへと切換わっときの酸素ストレージ量HOSCとその最小値HOSCMIN(=0)との差(L2で示す)を「第二長さ」として、これらの比率RATEO2(=第一長さ/第二長さ)を考えたとき、フロント空燃比センサ4のストイキ点がリーンシフトしている場合にこの比率RATEO2が1を超える(図12の左半分参照)のに対して、リーンシフトが生じてない場合には比率RATEO2が1以下となる(図12の右半分参照)ことに着目し、比率RATEO2が1を超えるか否かによりフロント空燃比センサ4のストイキ点がリーンシフトしているか否かを判定するものである。
すなわち、図13のステップ62、71、63、64、111、116が図12に示した第一長さL1及び第二長さL2を演算する部分、図13のステップ112〜115、117〜120及び図14のステップ121〜123が第一長さ平均値AEVL1及び第二長さ平均値AVEL2を演算する部分、図14のステップ124が比率RATEO2を演算する部分、図14のステップ125がフロント空燃比センサ4のストイキ点がリーンシフトしているか否かを判定する部分、図14のステップ88がその判定結果に基づき、フロント空燃比センサ4のストイキ点がリーンシフトしている場合にシフト補正量学習値を正の値で大きくなる側に更新する部分である。
ただし、ここでも第一長さの平均値と第二長さの平均値を演算し、これらの比率を演算する場合で説明するが、簡単には第一長さと第二長さを演算し、これらの比率を演算してもかまわない。
第1実施形態と異なる部分を主に述べると、図13においてステップ62、71、64では、リア空燃比センサ出力が今回ストイキにあるか、前回ストイキにあったか、今回リーンにあるかをみる。リア空燃比センサ出力が今回ストイキになくかつ前回ストイキであってかつ今回リーンにないときつまりリア空燃比センサ出力がストイキよりリッチへと切換わったときにはステップ62、71、64よりステップ111に進んで酸素ストレージ量最大値HOSCMAXからそのときの酸素ストレージ量今回値HOSCを差し引いた値を長さL1に移し、ステップ112で次式によりリッチ切換時長さを積算する。
RSUM2(new)=RSUM2(old)+L1 …(23)
ただし、RSUM2(new):リッチ切換時長さ積算値今回値、
RSUM2(old):リッチ切換時長さ積算値前回値、
ここで、(23)式右辺第2項の長さL1はリア空燃比センサ出力がストイキよりリッチへと切換わったタイミングでの値であるから、図12に示した第一長さL1そのものである。従って、(23)式は第一長さL1をさらに積算していくものである。これは、第一長さL1をいくつかサンプリングして積算した後でその平均値を求めるためである。
ステップ113ではサンプル回数m2(ゼロに初期設定)を1だけ増やす。サンプル回数m2は(23)式により第一長さL1を積算した回数を表す。ステップ114では次回処理のためリッチ切換時長さ積算値今回値RSUM2(new)の値をリッチ切換時長さ積算値前回値RSUM2(old)に移しておく。リッチ切換時長さ積算値前回値RSUM2(old)の初期値にはゼロを入れておく。
これに対して、リア空燃比センサ出力が今回ストイキになくかつ前回ストイキであってかつ今回リーンにあるときつまりリア空燃比センサ出力がストイキよりリーンへと切換わったときにはステップ62、71、64よりステップ116に進んでそのときの酸素ストレージ量HOSCから酸素ストレージ量の最小値HOSCMIN(=0)を差し引いた値を長さL2に移し、ステップ117で次式によりリーン切換時長さを積算する。
LSUM2(new)=LSUM2(old)+L2 …(24)
ただし、LSUM2(new):リーン切換時長さ積算値今回値、
LSUM2(old):リーン切換時長さ積算値前回値、
ここで、(24)式右辺第2項の長さL2はリア空燃比センサ出力がストイキよりリーンへと切換わったタイミングでの値であるから、図12に示した第二長さL2そのものである。従って、(24)式は第二長さL2をさらに積算していくものである。これは、第二長さL2をいくつかサンプリングして積算した後でその平均値を求めるためである。
ステップ118ではサンプル回数n2(ゼロに初期設定)を1だけ増やす。サンプル回数n2は(24)式により第二長さL2を積算した回数を表す。ステップ119では次回処理のためリーン切換時長さ積算値今回値LSUM2(new)の値をリーン切換時長さ積算値前回値LSUM2(old)に移しておく。リーン切換時長さ積算値前回値LSUM2(old)の初期値にもゼロを入れておく。
このようにして、リア空燃比センサ出力がストイキよりリッチへと切換わるたびに図13のステップ112において図12に示した第一長さL1が積算され、またリア空燃比センサ出力がストイキよりリーンへと切換わるたびに図13のステップ117において図12に示した第二長さL2が積算されてゆく。
図14において、ステップ121ではサンプル回数m2及びn2と一定値(適合値)とを比較する。サンプル回数m2及びn2が一定値に達していなければそのまま今回の処理を終了する。
サンプル回数m2及びn2がいずれも一定値に達していればステップ122、123に進み次式により第一長さL1の平均値AVEL1、第二長さL2の平均値AVEL2を演算する。
AVEL1=LSUM2(new)/m2 …(25)
AVEL2=RSUM2(new)/n2 …(26)
ステップ124では次式によりこれらの比率RATEO2を演算する。
RATEO2=AVEL1/AVEL2 …(27)
ステップ125ではこの比率RATEO2と1を比較する。比率RATEO2が1より大きいときにはフロント空燃比センサ4のストイキ点がリーンシフトしていると判定し、ステップ88に進んでシフト補正量学習値を上記の(22)式により正の値で大きくなる側に更新する。このようにして求めたシフト補正量学習値はEEPROMなどのメモリに保存しておく。
一方、面積比率RATESMO2が1以下であればフロント空燃比センサ4のストイキ点がリーンシフトしていないので、このときにはステップ88を飛ばしてステップ126に進む。
ステップ126では次回のシフト補正量学習値の更新に備えるため、リッチ切換時長さ積算値前回値LSUM2(old)、リーン切換時長さ積算値前回値RSUM2(old)、サンプル回数m2、n2にいずれもゼロを入れておく。
このように、第2実施形態(請求項3、4に記載の発明)によれば、フロント空燃比センサの出力に基づいて酸素ストレージ量を推定し、この酸素ストレージ量推定値がHOSC目標値と一致するように空燃比を制御する一方で、リア空燃比センサ出力がストイキよりリッチへと横切ったときに酸素ストレージ量最大値HOSCMAXより酸素ストレージ量推定値HOSCを差し引いた値を第一長さとして、また、リア空燃比センサ出力がストイキよりリーンへと横切ったときに酸素ストレージ量推定値HOSCより酸素ストレージ量最小値HOSCMINを差し引いた値を第二長さとしてそれぞれ演算し(図13のステップ111、116参照)、これら第一長さと第二長さに基づいてフロント空燃比センサ4のストイキ点がリーンシフトしているか否かを判定し(図14のステップ122、123、124、125参照)、この判定結果よりフロント空燃比センサ4のストイキ点がリーンシフトしているときにフロント空燃比センサ4のストイキ点をリーン側に補正する(図14のステップ125、88、図4のステップ4、5参照)ので、第1実施形態と同様に、フロント空燃比センサ4のストイキ点のリーンシフトに起因して、リア空燃比センサの出力が短い周期でリーンとリッチとを繰り返す現象が生じている場合にもフロント空燃比センサ4のストイキ点がリーンシフトしているとの検出が可能となり、これにより、フロント空燃比センサ4のストイキ点を補正する機会を増やすことができる。
この場合に、フロント空燃比センサ4のストイキ点がリーンシフトしているか否かの判定方法が第1実施形態より簡単になっている。
また、第2実施形態(請求項4に記載の発明)においても、第1実施形態と同様に、比率RATEO2と比較する相手が1でよいので、比率RATEO2と比較する相手をわざわざ適合する必要がなく簡素な構成となっている。
図16、図17のフローチャートは第3実施形態、図19のフローチャートは第4実施形態、図21のフローチャートは第5実施形態で、それぞれ第1実施形態の図9、図10と置き換わるものである。図16、図17、図19、図21において図9、図10と同一部分には同一のステップ番号をつけている。
第1、第2の実施形態では、図3、図12の各左半分に示したように酸素ストレージ量に基づいてフロント空燃比センサ4のストイキ点がリーンシフトしているか否かを判定するものであったが、第3、第4、第5の実施形態では、図15、図18、図20の各左半分に示したようにリア空燃比センサ出力そのものに基づいてフロント空燃比センサ4のストイキ点がリーンシフトしているか否かを判定するものである。すなわち、第3実施形態では、図15左半分に示したようにリア空燃比センサ出力が継続してリーンであるときの面積(S3で示す)を「第三面積」、リア空燃比センサ出力が継続してリッチであるときの面積(S4で示す)を「第四面積」として、これらの面積比率RATERO2(=第三面積/第四面積)を考えたとき、フロント空燃比センサ4のストイキ点がリーンシフトしている場合にはこの面積比率RATERO2が一定値を超える(図15の左半分参照)のに対して、リーンシフトが生じてない場合には面積比率RATERO2が一定値を超えない(図15の右半分参照)ことに着目し、第三面積S3と第四面積S4をいくつかサンプリングして積算した後でその平均値AVES3、AVES4を求め、その2つの平均値AVES3、AVES4から面積比率RATERO2を演算し、その面積比率RATERO2が一定値を超えるか否かによりフロント空燃比センサ4のストイキ点がリーンシフトしているか否かを判定する。
この場合、面積比率RATERO2と比較する相手である一定値は第1、第2の実施形態と相違して1より大きな値である。
第4実施形態では、図18左半分に示したように運転条件が学習領域に続けて滞在する場合において、一定区間当たりにリア空燃比センサ出力が最小値から最大値まで及び最大値より最小値まで振れた振幅回数CNT1を演算し、この振幅回数CNT1が基準値1(適合値)を超えるか否かによりフロント空燃比センサ4のストイキ点がリーンシフトしているか否かを判定する。
第5実施形態では、図20左半分に示したように通常時のスライスレベル(RSLICE、LSLICE)とは別に学習用のスライスレベル(学習用リッチ側スライスレベルGRSLICEと学習用リーン側スライスレベルGLSLICE)を新たに設定し、運転条件が学習領域に続けて滞在する場合において、この学習用スライスレベルのうち学習用リッチ側スライスレベルGRSLICEを横切ることなく学習用リーン側スライスレベルGLSLICEを同じ方向(図ではストイキよりリーンへ)に一定回数以上連続して横切ったか否かによりフロント空燃比センサ4のストイキ点がリーンシフトしているか否かを判定する。ここで、フロント空燃比センサ4のストイキ点がリーンシフトしているときに、学習用リッチ側スライスレベルGRSLICEをリア空燃比センサ出力VRO2が横切ることがない位置に、かつ学習用リーン側スライスレベルGLSLICEをリア空燃比センサ出力VRO2が横切る位置に、2つの学習用スライスレベル(GRSLICEとGLSLICE)を予め設定しておく。
第3実施形態から説明すると、図16のステップ62、131、64、65、68、132〜135及び図17のステップ71、72、135、140が図15に示した第三面積S3及び第四面積S4を演算する部分、図17のステップ136〜139、141〜147が第三面積平均値AEVS3及び第四面積平均値AVES4を演算する部分、図17のステップ148が面積比率RATERO2を演算する部分、図17のステップ149がフロント空燃比センサ4のストイキ点がリーンシフトしているか否かを判定する部分、図17のステップ88がその判定結果に基づき、フロント空燃比センサ4のストイキ点がリーンシフトしている場合にシフト補正量学習値を正の値で大きくなる側に更新する部分である。
ただし、ここでも第三面積の平均値と第四面積の平均値を演算し、これらの面積比率を演算する場合で説明するが、簡単には第三面積と第四面積を演算し、これらの面積比率を演算してもかまわない。
第3実施形態について第1実施形態と異なる部分を主に述べると、図16においてリア空燃比センサ出力がストイキでないときにはステップ62よりステップ131に進んでリア空燃比センサ出力VRO2を読み込む。このリア空燃比センサは第1実施形態と同じに2値的に変化するセンサである。
ステップ64、65ではリア空燃比センサ出力が今回リーンであるのか否か、またリア空燃比センサ出力が前回リーンであったか否かをみる。リア空燃比センサ出力が今回リーンでありかつ前回もリーンであった、つまりリア空燃比センサ出力がリーンを継続するときにはステップ64、65よりステップ132に進んで次式により、図15に示した第三面積S3を演算するため、リーン側スライスレベルLSLICEよりリア空燃比センサ出力を差引いた値を積算する。
LSMRO2(new)=LSMRO2(old)+(LSLICE−VRO2)
…(28)
ただし、LSMRO2(new):リーン時面積今回値、
LSMRO2(old):リーン時面積前回値、
LSLICE:リーン側スライスレベル(通常時)、
ステップ133では次回処理のためリーン時面積今回値LSMRO2(new)の値をリーン時面積前回値LSMRO2(old)に移しておく。
次回以降もリア空燃比センサ出力がリーンであればステップ132、133の操作を繰り返し実行する。この結果、(28)式によれば、リア空燃比センサ出力が継続してリーンである間、(28)式右辺第2項を積算することになるので、図15に示した面積S3が求められることになる。リーン時面積前回値LSMRO2(old)の初期値にはゼロをいれておく。
これに対して、リア空燃比センサ出力が今回リッチであるときにはステップ64よりステップ68に進みリア空燃比センサ出力が前回リッチであったか否かをみる。リア空燃比センサ出力が今回リッチでありかつ前回もリッチであった、つまりリア空燃比センサ出力がリッチを継続するときにはステップ64、68よりステップ134に進んで次式により、図15に示した第四面積S4を演算するため、リア空燃比センサ出力VRO2よりリッチ側スライスレベルRSLICEを差し引いた値を積算する。
RSMRO2(new)=RSMRO2(old)+(VRO2−RSLICE)
…(29)
ただし、RSMRO2(new):リッチ時面積今回値、
RSMRO2(old):リッチ時面積前回値、
ステップ135では次回処理のためリッチ時面積今回値RSMRO2(new)の値をリッチ時面積前回値RSMRO2(old)に移しておく。
次回以降もリア空燃比センサ出力がリッチであればステップ134、135の操作を繰り返し実行する。この結果、(29)式によれば、リア空燃比センサ出力が継続してリッチである間、(29)式右辺第2項を積算することになるので、図15に示した第四面積S4が求められることになる。リッチ時面積前回値RSMRO2(old)の初期値にもゼロを入れておく。
一方、リア空燃比センサ出力が今回ストイキにあるときには図16のステップ62より図17のステップ71、72に進みリア空燃比センサ出力が前回ストイキであったか否か、あるいは前回リーンであったか否かをみる。リア空燃比センサ出力が今回ストイキにありかつ前回リーンであったとき、つまりリア空燃比センサ出力がリーンからストイキへと切換わったときにはステップ71、72よりステップ135に進みそのときのリーン時面積今回値LSMRO2(new)を面積S3に移し、ステップ136で次式によりリーン時面積を積算する。
LSUM3(new)=LSUM3(old)+S3 …(30)
ただし、LSUM3(new):リーン時面積積算値今回値、
LSUM3(old):リーン時面積積算値前回値、
ここで、(30)式右辺第2項の面積S3はリア空燃比センサ出力がリーンからストイキへと切換わったタイミングでの値であるから、図15に示した第三面積S3そのものである。従って、(30)式は第三面積S3をさらに積算していくものである。これは、第三面積S3をいくつかサンプリングして積算した後でその平均値を求めるためである。
ステップ137ではサンプル回数m3(ゼロに初期設定)を1だけ増やす。サンプル回数m3は(30)式により第三面積S3を積算した回数を表す。ステップ138では次回処理のためリーン時面積積算値今回値LSUM3(new)の値をリーン時面積積算値前回値LSUM3(old)に移しておく。リーン時面積積算値前回値LSUM3(old)の初期値にはゼロを入れておく。
ステップ139では次にリア空燃比センサ出力がリーンを継続するときに備えて、再び図15に示した第三面積S3を求めるため、リーン時面積前回値LSMRO2(old)=0としておく。
これに対して、リア空燃比センサ出力が今回ストイキにありかつ前回リッチであったとき、つまりリア空燃比センサ出力がリッチからストイキへと切換わったときにはステップ71、72よりステップ140に進みそのときのリッチ時面積今回値RSMRO2(new)を面積S4に移し、ステップ141で次式によりリッチ時面積を積算する。
RSUM3(new)=RSUM3(old)+S4 …(31)
ただし、RSUM3(new):リッチ時面積積算値今回値、
RSUM3(old):リッチ時面積積算値前回値、
ここで、(31)式右辺第2項の面積S4はリア空燃比センサ出力がリッチからストイキへと切換わったタイミングでの値であるから、図15に示した第四面積S4そのものである。従って、(31)式は第四面積S4をさらに積算していくものである。これは、第四面積S4をいくつかサンプリングして積算した後でその平均値を求めるためである。
ステップ142ではサンプル回数n3(ゼロに初期設定)を1だけ増やす。サンプル回数n3は(31)式により第四面積S4を積算した回数を表す。ステップ143では次回処理のためリッチ時面積積算値今回値RSUM3(new)の値をリッチ時面積積算値前回値RSUM3(old)に移しておく。リッチ時面積積算値前回値RSUM3(old)の初期値にもゼロを入れておく。
ステップ144では次にリア空燃比センサ出力がリッチを継続するときに備えて、再び図15に示した第四面積S4を求めるため、リッチ時面積前回値RSMRO2(old)=0としておく。
このようにして、リア空燃比センサ出力がリーンよりストイキへと切換わるたびにステップ136において図15に示した第三面積S3が積算され、またリア空燃比センサ出力がリッチよりストイキへと切換わるたびにステップ141において図15に示した第四面積S4が積算されてゆく。
ステップ145ではサンプル回数m3及びn3と一定値(適合値)とを比較する。サンプル回数m3及びn3が一定値に達していなければそのまま今回の処理を終了する。
サンプル回数m3及びn3がいずれも一定値に達していればステップ146、147に進み次式により第三面積S3の平均値AVES3、第四面積S4の平均値AVES4を演算する。
AVES3=LSUM3(new)/m3 …(32)
AVES4=RSUM3(new)/n3 …(33)
ステップ148では次式によりこれらの面積比率RATERO2を演算する。
RATERO2=AVES3/AVES4 …(34)
ステップ149ではこの面積比率RATERO2と一定値(適合値)を比較する。ここで、第3実施形態において面積比率RATERO2と比較する相手を1ではなく一定値(1を超える値)としたのは、リア空燃比センサ出力と酸素ストレージ量の波形の違いによるものである(図3左半分の上段と下段の違いを参照)。面積比率RATERO2が一定値より大きいときにはフロント空燃比センサ4のストイキ点がリーンシフトしていると判定し、ステップ88に進んでシフト補正量学習値を上記の(22)式により正の値で大きくなる側に更新する。このようにして求めたシフト補正量学習値はEEPROMなどのメモリに保存しておく。
一方、面積比率RATERO2が一定値以下であればフロント空燃比センサ4のストイキ点がリーンシフトしていないので、このときにはステップ88を飛ばしてステップ150に進む。
ステップ150では次回のシフト補正量学習値の更新に備えるため、リーン時面積積算値前回値LSUM3(old)、リッチ時面積積算値前回値RSUM3(old)、サンプル回数m3、n3にすべてゼロを入れておく。
シフト補正量学習値は運転条件が学習領域に滞在する限り、所定の時間毎に何度も更新する。これにより、やがてシフト補正量学習値が収束し、収束した学習値によりフロント空燃比センサ4の出力を空燃比へと変換した値(AFs)が上記(1)式により大きくなる側に補正されると、フロント空燃比センサ4のストイキ点が実際にはリーンシフトしている状態となっていても、補正後の値である実空燃比AFrは、ストイキ点がリーンシフトしていないフロント空燃比センサ4により検出される空燃比と同じになる。従って、シフト補正量学習値が収束した後では、図15左半分に示した現象、つまりリア空燃比センサ出力が短い周期でリーンとリッチを繰り返しさらにその振幅の中心がリーン側に偏っている現象がやんで、図15の右半分に示したようになる。
このように第3実施形態(請求項5に記載の発明)によれば、フロント空燃比センサ4の出力に基づいて酸素ストレージ量を推定し、この酸素ストレージ量推定値HOSCが目標値と一致するように空燃比を制御する一方で、リア空燃比センサ出力VRO2がリーンを継続するときの面積を第三面積S3として、また、リア空燃比センサ出力VRO2がリッチを継続するときの面積を第四面積S4としてそれぞれ演算し(図17のステップ135、140参照)、これら第三面積と第四面積に基づいてフロント空燃比センサ4のストイキ点がリーンシフトしているか否かを判定し(図17のステップ146、147、148、149参照)、この判定結果よりフロント空燃比センサ4のストイキ点がリーンシフトしているときにフロント空燃比センサ4のストイキ点を補正する(図17のステップ149、88、図4のステップ4、5参照)ので、第1実施形態と同様に、フロント空燃比センサ4のストイキ点のリーンシフトに起因して、リア空燃比センサの出力が短い周期でリーンとリッチとを繰り返す現象が生じている場合にもフロント空燃比センサ4のストイキ点がリーンシフトしているとの検出が可能となり、これにより、フロント空燃比センサ4のストイキ点を補正する機会を増やすことができる。
次に、第4実施形態について述べると、図19においてステップ163〜164は運転条件が継続して学習領域に滞在しているか否かを判定する部分、ステップ165〜168は運転条件が継続して学習領域に滞在している場合に、一定区間当たりに前記リア空燃比センサ出力が最小値より最大値までまたは最大値より最小値まで振れる振幅回数CNT1を演算する部分、ステップ169がこの振幅回数CNT1に基づいてフロント空燃比センサ4のストイキ点がリーンシフトしているか否かを判定する部分、ステップ88がその判定結果に基づき、フロント空燃比センサ4のストイキ点がリーンシフトしている場合にシフト補正量学習値を正の値で大きくなる側に更新する部分である。
詳細には図19において運転条件が学習領域にあるときにステップ61よりステップ161に進んでフラグF1=1とし、運転条件が学習領域にないときにはステップ61よりステップ162に進んでフラグF1=0とする。フラグF1=1は運転条件が学習領域にあることを、またフラグF1=0は運転条件が学習領域にないことを表す。
ステップ163、164ではフラグF1の値とフラグF1(前回)の値をみる。ここで、フラグF1(前回)にはフラグF1の前回の値が入っている。フラグF1=1かつF1(前回)=0のとき、つまりフラグF1が0より1へと切換わったとき(運転条件が学習領域外より学習領域へと入ったとき)にはステップ163、164よりステップ165、166に進んで振幅回数CNT1=0とすると共に、タイマを起動する(t=0)。タイマは学習領域に継続して滞在する時間を計測するためのものである。
ステップ172では次回処理のため、フラグF1の値をフラグF1(前回)に移しておく。
フラグF1=1かつF1(前回)=1のとき、つまりフラグF1が継続して1になると(運転条件が学習領域に継続して滞在するとき)、ステップ163、164よりステップ167に進んで振幅回数CNT1を演算する。ここでの操作は図示しないが、図18左半分に示したようにリア空燃比センサ出力をモニターしてリア空燃比センサ出力が最小値から最大値まで振れたときに振幅回数CNT1を1だけ増やし、またリア空燃比センサ出力が最大値より最小値まで振れたとき振幅回数CNT1を1だけ増やし、これらの操作を繰り返し実行することである。図18左半分には5回の振幅回数を記載している。
ステップ168ではタイマ値tと一定時間を比較する。一定時間は図18の一定区間を定めるための値(適合値)である。タイマ値tが一定時間以下の場合にはステップ169〜171を飛ばしステップ172の操作を実行して今回の処理を終了する。
運転条件が学習領域に継続して滞在していれば次回以降ステップ163、164、167、168の操作を繰り返すことになり、この操作により、フロント空燃比センサ4のストイキ点がリーンシフトしていれば振幅回数CNT1が増えてゆく。やがて、タイマ値tが一定時間を超えると、ステップ168よりステップ169に進んで振幅回数CNT1と基準値1(適合値)を比較する。振幅回数CNT1が基準値1を超えていればフロント空燃比センサ4のストイキ点がリーンシフトしていると判断し、ステップ88に進んでシフト補正量学習値を上記の(22)式により正の値で大きくなる側に更新する。このようにして求めたシフト補正量学習値はEEPROMなどのメモリに保存しておく。これで一回目のシフト補正量学習値の更新が終了する。
一方、振幅回数CNT1が基準値1以下であればフロント空燃比センサ4のストイキ点がリーンシフトしていないので、このときにはステップ88を飛ばしてステップ170に進む。
ステップ170、171では2回目のシフト補正量学習値の更新を準備するため振幅回数CNT1=0とする共にタイマを再起動(t=0)した後、ステップ172の操作を実行する。これによって、運転条件が学習領域に継続して滞在している限り、一定時間が経過するたびにシフト補正量学習値の更新が行われる。
一方、タイマ値tが一定時間を超える前に運転条件が学習領域から外れたときにはステップ61、162、163よりステップ173、174へと進むことになり振幅回数CNT1=0とする共にタイマをリセット(t=0)した後、ステップ172の操作を実行する。
このように第4実施形態(請求項7、8に記載の発明)によれば、フロント空燃比センサ4の出力に基づいて酸素ストレージ量を推定し、この酸素ストレージ量推定値HOSCが目標値と一致するように空燃比を制御する一方で、一定区間当たりにリア空燃比センサ出力が最小値より最大値までまたは最大値より最小値まで振れる振幅回数CNT1を演算し(図19のステップ167、168参照)、この一定区間当たりの振幅回数CNT1に基づいてフロント空燃比センサ4のストイキ点がリーンシフトしているか否かを判定し(図19のステップ168、169参照)、この判定結果よりフロント空燃比センサ4のストイキ点がリーンシフトしているときにフロント空燃比センサ4のストイキ点をリーン側に補正する(図19のステップ169、88、図4のステップ4、5参照)ので、第1実施形態と同様に、フロント空燃比センサ4のストイキ点のリーンシフトに起因して、リア空燃比センサの出力が短い周期でリーンとリッチとを繰り返す現象が生じている場合にもフロント空燃比センサ4のストイキ点がリーンシフトしているとの検出が可能となり、これにより、フロント空燃比センサ4のストイキ点を補正する機会を増やすことができる。
次に、第5実施形態について述べると、第5実施形態の図21は第4実施形態の図19において振幅回数CNT1を連続横切り回数CNT2に置き換えたものである(図21のステップ181〜185参照)。
この場合に、第5実施形態では、図20に示したように通常時のスライスレベル(RSLICEとLSLICE)とは別に学習用のスライスレベル(GRSLICEとGLSLICE)を設けている。そして、図21においてステップ182、168は一定区間当たりに前記フロント空燃比センサが、新たに設けた学習用リッチ側スライスレベルGRSLICEを横切ることなくかつ新たに設けたもう一つの学習用リーン側スライスレベルGLSLICEを連続してストイキよりリーンへと横切る連続横切り回数CNT2を演算する部分、ステップ183がこの連続横切り回数CNT2に基づいてフロント空燃比センサ4のストイキ点がリーンシフトしているか否かを判定する部分、ステップ88がその判定結果に基づき、フロント空燃比センサ4のストイキ点がリーンシフトしている場合にシフト補正量学習値を正の値で大きくなる側に更新する部分である。
ただし、ここではフロント空燃比センサが学習用リーン側スライスレベルGLSLICEを連続してストイキよりリーンへと横切る連続横切り回数CNT2を演算する場合で説明するが、フロント空燃比センサが学習用リーン側スライスレベルGLSLICEを連続してリーンよりストイキへと横切る連続横切り回数を演算する場合でもかまわない。
詳細には、第5実施形態でも、第4実施形態と同じに、運転条件が学習領域に継続して滞在する場合に、ステップ163、164よりステップ182に進んで連続横切り回数CNT2を演算する。この連続横切り回数CNT2の演算については図22のフローにより説明する。
図22(図21のステップ182のサブルーチン)において、ステップ191ではリア空燃比センサ出力VRO2を読み込み、このリア空燃比センサ出力VRO2と学習用リッチ側スライスレベルGRSLICEとをステップ192で比較する。リア空燃比センサ出力VRO2と学習用リッチ側スライスレベルGRSLICE以上である(リア空燃比センサ出力VRO2がリッチにある)ときにはステップ200に進んで連続横切り回数CNT2=0として今回の処理を終了する。
リア空燃比センサ出力VRO2が学習用リッチ側スライスレベルGRSLICE未満であるときにはリア空燃比センサ出力VRO2がストイキまたはリーンにあると判断しステップ193に進んでリア空燃比センサ出力VRO2と学習用リーン側スライスレベルGLSLICEとをステップ192で比較する。リア空燃比センサ出力VRO2が学習用リーン側スライスレベルGLSLICEを超えているときにはリア空燃比センサ出力VRO2がストイキにあると判断しステップ194に進んでフラグF2=1とし、リア空燃比センサ出力VRO2が学習用リーン側スライスレベルGLSLICE以下であるときにはリア空燃比センサ出力VRO2がリーンにあると判断しステップ193よりステップ195に進んでフラグF2=0とする。フラグF2=1はリア空燃比センサ出力VRO2がストイキにあることを、またフラグF2=0はリア空燃比センサ出力VRO2がリーンにあることを表す。
ステップ196、197ではこのフラグF2の値ともう一つのフラグF2(前回)の値をみる。フラグF2(前回)にはフラグF2の前回の値が入っている。フラグF2=0かつF2(前回)=1のときつまりフラグF2が1より0へと切換わったときにはリア空燃比センサ出力VRO2がストイキよりリーンへと横切ったと判断しステップ196、197よりステップ198に進んで連続横切り回数CNT2(ゼロに初期設定)を1だけ増加する。
ステップ199では次回処理のためフラグF2の値をフラグF2(前回)に移しておく。
図21において運転条件が学習領域に継続して滞在するときに、ステップ198で連続横切り回数CNT2の演算を行うことで、フロント空燃比センサ4にストイキ点のリーンシフトがあれば、連続横切り回数CNT2が連続的に増えてゆく。なお、それまで連続横切り回数CNT2が増えていても、何かの原因でリア空燃比センサ出力VRO2が学習用リッチ側スライスレベルGRSLICEを超えたときには図22においてステップ200に進んで連続横切り回数CNT2=0となるので、結局、フロント空燃比センサ4のストイキ点がリーンシフトしている場合に限って、連続横切り回数CNT2が連続的に増えてゆく。
やがて、タイマ値tが一定時間を超えると、図21においてステップ168よりステップ183に進んで連続横切り回数CNT2と基準値2(適合値)を比較する。連続横切り回数CNT2が基準値2を超えていればフロント空燃比センサ4のストイキ点にリーンシフトが生じていると判定し、ステップ88に進んでシフト補正量学習値を上記の(22)式により正の値で大きくなる側に更新する。このようにして求めたシフト補正量学習値はEEPROMなどのメモリに保存しておく。これで一回目の学習値の更新が終了する。
一方、連続横切り回数CNT2が基準値2以下であればフロント空燃比センサ4のストイキ点がリーンシフトしていないので、このときにはステップ88を飛ばしてステップ184に進む。
ステップ184、171では2回目のシフト補正量学習値の更新を準備するため連続横切り回数CNT2=0とする共にタイマを再起動(t=0)した後、ステップ172の操作を実行する。これによって、運転条件が学習領域に継続して滞在している限り、一定時間が経過するたびにシフト補正量学習値の更新が行われる。
一方、タイマ値tが一定時間を超える前に運転条件が学習領域から外れたときにはステップ61、162、163よりステップ185、174へと進むことになり連続横切り回数CNT2=0とする共にタイマをリセット(t=0)した後、ステップ172の操作を実行する。
このように第5実施形態(請求項9、10に記載の発明)によれば、一定区間当たりにリア空燃比センサ出力VRO2が学習用リッチ側スライスレベルGRSLICEを横切ることなくかつ学習用リーン側スライスレベルGLSLICEを連続して同じ方向に横切る回数CNT2を演算し(図22のステップ191〜199参照)、この一定区間当たりの連続横切り回数CNT2に基づいてフロント空燃比センサ4のストイキ点がリーンシフトしているか否かを判定し(図21のステップ168、183参照)、この判定結果よりフロント空燃比センサ4のストイキ点がリーンシフトしているときにフロント空燃比センサのス4トイキ点をリーン側に補正する(図21のステップ183、88、図4のステップ4、5参照)ので、第1実施形態と同様に、フロント空燃比センサ4のストイキ点のリーンシフトに起因して、リア空燃比センサの出力が短い周期でリーンとリッチとを繰り返す現象が生じている場合にもフロント空燃比センサ4のストイキ点がリーンシフトしているとの検出が可能となり、これにより、フロント空燃比センサ4のストイキ点を補正する機会を増やすことができる。
第1から第3までの実施形態では、運転条件が学習領域にあることを条件とするだけで運転条件が学習領域に継続して滞在することまでは必ずしも条件としていないが、第4、第5の実施形態のように、運転条件が学習領域に継続して滞在することを条件とすることもできる。
請求項1に記載の空燃比制御手段の機能は図4、図8のフローにより、第一面積演算手段の機能は図10のステップ73により、第二面積演算手段の機能は図10のステップ78により、判定手段の機能は図10のステップ84、85、86、87により、リーン側補正手段の機能は図10のステップ87、88及び図4のステップ4、5によりそれぞれ果たされている。
請求項3に記載の空燃比制御手段の機能は図4、図8のフローにより、第一長さ演算手段の機能は図13のステップ111により、第二長さ演算手段の機能は図13のステップ116により、判定手段の機能は図14のステップ122、123、124、125により、リーン側補正手段の機能は図14のステップ125、88及び図4のステップ4、5によりそれぞれ果たされている。
請求項5に記載の空燃比制御手段の機能は図4、図8のフローにより、第三面積演算手段の機能は図17のステップ135により、第四面積演算手段の機能は図17のステップ140により、判定手段の機能は図17のステップ146、147、148、149により、リーン側補正手段の機能は図17のステップ149、88及び図4のステップ4、5によりそれぞれ果たされている。
請求項7に記載の空燃比制御手段の機能は図4、図8のフローにより、振幅回数演算手段の機能は図19のステップ167、168により、判定手段の機能は図19のステップ169により、リーン側補正手段の機能は図19のステップ169、88及び図4のステップ4、5によりそれぞれ果たされている。
請求項9に記載の空燃比制御手段の機能は図4、図8のフローにより、連続横切り回数演算手段の機能は図21のステップ182、168及び図22のフローにより、判定手段の機能は図21のステップ183により、リーン側補正手段の機能は図21のステップ183、88及び図4のステップ4、5によりそれぞれ果たされている。