(57)【要約】  【課題】フロントA/Fセンサが故障しても、空燃比フィードバック制御性を悪化させることなく、良好な空燃比フィードバックの応答性を得ることができるようにする。  【解決手段】触媒８の上流に配設したフロントA/Fセンサ１０で検出した空燃比に基づいてメインフィードバック制御を行うと共に、触媒８の下流に配設したリヤＯ2センサ１１で検出した空燃比に基づき目標空燃比を補正するサブフィードバック制御を行う。サブフィードバック補正値αＯ2はガード値により制御量が制限されており、サブフィードバック平均値αＯ2ａｖが、ガード値の一方に貼り付き傾向にあるときは、ガード中心値Ｓｇｄｏを移動させて(S67,S38)、貼り付き傾向を解消する。このときガード中心値Ｓｇｄｏの移動量が大きい場合は、フロントA/Fセンサ１０の故障と判定する。【選択図】図７
2005291101.tif 000002
【特許請求の範囲】
【請求項１】
触媒の上流に配設して、該触媒に流入する排気ガスから空燃比を検出するフロント空燃比検出手段と、
上記触媒の下流に配設して、該触媒から排出される排気ガスから空燃比を検出するリヤ空燃比検出手段と、
上記フロント空燃比検出手段で検出した触媒上流の空燃比に基づいて排気ガス中の空燃比を目標空燃比に収束させる空燃比フィードバック補正値を設定するメインフィードバック制御手段と、
上記リヤ空燃比検出手段で検出した触媒下流の空燃比に基づいて上記目標空燃比を補正するサブフィードバック補正値と、
上記サブフィードバック補正値を制限するガード値を設定するサブフィードバック制御手段と
を備えるエンジンの空燃比制御装置において、
上記サブフィードバック制御手段は、該ガード値の移動量を、少なくとも上記リヤ空燃比検出手段で検出した空燃比のリッチ時間とリーン時間との時間比と、上記サブフィードバック補正値に応じて設定された設定値とに基づいて設定する
ことを特徴とするエンジンの空燃比制御装置。
【請求項２】
上記サブフィードバック制御手段は、上記サブフィードバック補正値に応じて設定された上記設定値が上記ガード値に近接し、或いは貼り付いた場合、上記ガード値を該貼り付き傾向を示す方向へ設定量だけ移動させることを特徴とする請求項１記載のエンジンの空燃比制御装置。
【請求項３】
上記ガード値の移動は１運転毎に実行されることを特徴とする請求項１或いは２記載のエンジンの空燃比制御装置。
【請求項４】
上記ガード値の移動は運転中における設定時間毎に実行されることを特徴とする請求項１或いは２記載のエンジンの空燃比制御装置。
【請求項５】
少なくとも上記ガード値の移動量が空燃比リッチ側と空燃比リーン側との何れか一方に過度に移動されているときは上記フロント空燃比検出手段の故障と判定する故障判定手段
を備えることを特徴とする請求項１〜４の何れかに記載のエンジンの空燃比制御装置
【請求項６】
上記故障判定手段は、更に上記ガード値が過度に移動した状態が設定時間以上継続しているとき、上記フロント空燃比検出手段の故障と判定する
ことを特徴とする請求項５記載のエンジンの空燃比制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、触媒の上流と下流に空燃比検出手段を配設し、両空燃比検出手段で検出した空燃比に基づいて空燃比フィードバック制御を行うと共に、フロント空燃比検出手段の故障診断を行うエンジンの空燃比制御装置に関する。
【背景技術】
【０００２】
近年、自動車のエンジン制御システムでは、排気系の中途に介装した三元触媒の排気ガス浄化率を高めるために、触媒の上流側と下流側とに空燃比センサを各々配設した、いわゆる２センサ空燃比制御システムが知られている。この２センサ空燃比制御システムとして、触媒上流側に、排気ガス中の空燃比を、この空燃比に比例した値で検出する空燃比センサ（以下「フロントA/Fセンサ」と称する）を配設し、又、触媒下流側に、排気ガス中の空燃比をリッチ／リーンで検出する酸素センサ（以下「リヤＯ2センサ」と称する）を配設するものがある。
【０００３】
このような２センサ空燃比制御システムでは、触媒に流入する排気ガスの空燃比をフロントA/Fセンサで検出し、検出した空燃比を上流側目標空燃比（例えば、理論空燃比(λ=1.0)）に収束させるように空燃比フィードバック制御（メインフィードバック制御）を行うと共に、触媒を通過した排気ガスの空燃比リッチ或いは空燃比リーンをリヤＯ2センサで検出して、下流側の空燃比が下流側目標空燃比に収束するように上流側目標空燃比を補正するフィードバック制御（サブフィードバック制御）を行うようにしている。
【０００４】
この場合、上流側目標空燃比が理論空燃比付近からずれた状態が継続されると、サブフィードバック制御により上流側目標空燃比が過剰に補正されてしまい空燃比制御性が却って阻害される。そのため、例えば、特許文献１（特開２００１−３０４０１８号公報）に開示されているように、サブフィードバック補正値を制限するガード値を設定し、サブフィードバック補正値がガード値に達したときは、サブフィードバック補正値をガード値で制限することで、上流側目標空燃比の過補正を防止する技術が知られている。
【０００５】
ところで、フロントA/Fセンサの劣化或いは故障により、フロントA/Fセンサで検出した空燃比と実際の空燃比とにずれが生じた場合、例えば、フロントA/Fセンサでは空燃比を、λ＝1.0と検出したが、実際の空燃比はλ＝1.1である場合、リヤＯ2センサで検出する空燃比はリーンとなる。従って、サブフィードバック制御では、上流側目標空燃比をリッチ補正して、下流側目標空燃比が理論空燃比となるように制御するが、サブフィードバック補正値がガード値に達した場合、サブフィードバック補正値は一定値となり、それ以上のサブフィードバック制御が困難となる。
【０００６】
そのため、サブフィードバック補正量の貼り付きが、一時的な空燃比の変動によるものか、或いはフロントA/Fセンサの故障に起因するものかを判別する技術が必要となる。フロントA/Fセンサの故障を診断するものとして、サブフィードバック補正値のガード値に対する貼り付き時間を計時し、所定時間以上連続して貼り付いているとき、フロントA/Fセンサの故障と診断する技術が知られている。
【特許文献１】特開２００１−３０４０１８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかし、サブフィードバック補正値のガード値はエンジン負荷によって変動し、又、サブフィードバック補正値も負荷変動の影響を受けて大きく変動し易いため、エンジン負荷変動中は、フロントA/Fセンサが故障しているにも拘わらず、サブフィードバック補正値がガード値内に収まる場合があり、フロントA/Fセンサの故障を正確に検出することができない不都合がある。
【０００８】
一方、フロントA/Fセンサが正常であっても、例えば新品の触媒では、リヤＯ2センサの出力波形が、フロントA/Fセンサの故障時の波形と近似する運転条件が存在する。このような運転状態で、フロントA/Fセンサの故障診断を実行すると、誤診断が生じ易く、診断精度に問題が出てくる。
【０００９】
従って、従来の故障診断では、誤診断を防止するため、エンジンの負荷変動が少なく、且つ新品の触媒であってもフロントA/Fセンサの故障を誤診断しない運転領域、すなわち限定された運転領域でのみ故障診断を行っていた。そのため、故障診断の機会が少なく、フロントA/Fセンサの故障を瞬時に検出することができない不都合がある。
【００１０】
又、フロントA/Fセンサに故障が発生した場合、適正な空燃比制御を続行することが困難となり、空燃比制御性が悪化してしまう。
【００１１】
この対策として、フロントA/Fセンサに故障が生じた場合は、フロントA/Fセンサの出力値に基づくメインフィードバック制御を中止し、リヤＯ2センサの出力値に基づくサブフィードバック制御にて空燃比フィードバック制御を実行する技術が知られている。
【００１２】
しかし、メインフィードバック制御を中止して、サブフィードバック制御のみで空燃比制御を行った場合、触媒上流の空燃比が空燃比フィードバック制御に全く反映されなくなるため、空燃比フィードバックの応答性が悪くなる問題がある。
【００１３】
本発明は、上記事情に鑑み、フロントA/Fセンサの故障診断の機会を必要以上に制限することなく、高精度にフロンA/Fセンサの故障を検出することができ、しかも、フロントA/Fセンサが故障した場合であっても、空燃比フィードバック制御性を悪化させることなく、良好なフィードバック応答性を得ることのできるエンジンの空燃比制御装置を提供することを目的とする。
【課題を解決するための手段】
【００１４】
上記目的を達成するため本発明は、触媒の上流に配設して、該触媒に流入する排気ガスから空燃比を検出するフロント空燃比検出手段と、上記触媒の下流に配設して、該触媒から排出される排気ガスから空燃比を検出するリヤ空燃比検出手段と、上記フロント空燃比検出手段で検出した触媒上流の空燃比に基づいて排気ガス中の空燃比を目標空燃比に収束させる空燃比フィードバック補正値を設定するメインフィードバック制御手段と、上記リヤ空燃比検出手段で検出した触媒下流の空燃比に基づいて上記目標空燃比を補正するサブフィードバック補正値を設定するサブフィードバック制御手段と、上記サブフィードバック補正値を制限するガード値を有するガード手段とを備えるエンジンの空燃比制御装置において、上記ガード手段は、該ガード値の移動量を、少なくとも上記リヤ空燃比検出手段で検出した空燃比のリッチ時間とリーン時間との時間比と、上記サブフィードバック補正値に応じて設定された設定値とに基づいて設定することを特徴とする。
【発明の効果】
【００１５】
本発明によれば、フロント空燃比検出手段が故障した場合であっても、空燃比フィードバック制御性を悪化させることなく、良好な空燃比フィードバックの応答性を得ることができる。
【発明を実施するための最良の形態】
【００１６】
以下、図面に基づいて本発明の一形態を説明する。図１に空燃比制御システムの概略構成図を示す。
【００１７】
同図の符号１はエンジンで、エンジン１の吸気ポート１ａに吸気マニホルド２を介して吸気通路３が連通され、この吸気通路３の最上流側にエアクリーナ（図示せず）が設けられている。又、吸気通路３の中途にスロットル弁４が介装され、このスロットル弁４の下流側に、吸気マニホルド２の集合部を接続するエアチャンバ５が形成されている。更に、吸気マニホルド２に、噴射方向を吸気ポート１ａ側に指向するインジェクタ６が固設されている。一方、エンジン１の排気ポート１ｂに排気通路７が連通され、この排気通路７の中途に触媒８が介装されている。尚、排気通路７の最下流にはマフラ（図示せず）が接続されている。
【００１８】
又、吸気通路３の上流側に吸入空気量センサ９が臨まされている。一方、排気通路７に配設されている触媒８の上流側に、排ガス中の空燃比に比例した電圧を出力する、フロント空燃比検出手段としてのフロント空燃比（A/F）センサ１０が配設され、又、触媒８の下流側に、触媒８から排出される排気ガス中の空燃比のリッチ/リーンを検出して電圧値を反転させる、リヤ空燃比検出手段としてのリヤＯ2センサ１１が配設されている。尚、符号１２は点火プラグである。
【００１９】
符号２０はマイクロコンピュータ等からなる電子制御装置（ＥＣＵ）で、吸入空気量センサ９、フロントA/Fセンサ１０、リヤＯ2センサ１１、冷却水温からエンジン温度を間接的に検出する水温センサ１３、アクセルペダル（図示せず）の踏込み角度を検出するアクセル開度センサ１４等の各センサ・スイッチ類から出力される情報に基づき空燃比制御、点火時期制御等の各種制御を行なうと共に、所定運転領域においてフロントA/Fセンサ１０の故障診断を行う。
【００２０】
空燃比制御として、本形態は、フロントA/Fセンサ１０で検出した空燃比ＦA/Fに基づいてメインフィードバック制御を実行し、又、リヤＯ2センサ１１で検出した空燃比に基づいてサブフィードバック制御を行う、いわゆる２センサ空燃比制御システムを採用している。
【００２１】
本形態によるメインフィードバック制御手段では、フロントA/Fセンサ１０で触媒８に流入する排気ガスの空燃比（上流側空燃比）ＦA/Fを検出し、この上流側空燃比ＦA/Fが目標空燃比λTgに収束するような空燃比フィードバック補正値αA/Fを設定し、この空燃比フィードバック補正値αA/Fに基づいて燃料噴射量をフィードバック制御する。
【００２２】
一方、サブフィードバック制御手段では、リヤＯ2センサ１１の出力値ＶＯ2が、リヤＯ2センサ１１の目標値ＶＯTg（理論空燃比付近の値）に収束させるサブフィードバック補正値αＯ2を設定し、このサブフィードバック補正値αＯ2に基づいて、目標空燃比λTgを補正制御する。
【００２３】
ＥＣＵ２０で実行される空燃比制御は、具体的には図２〜図７に示すフローチャートに従って処理される。
【００２４】
イグニッションスイッチ（図示せず）がＯＮされると、先ず、図２に示す空燃比フィードバック制御ルーチンが実行される。このルーチンでは、先ず、ステップＳ１で、空燃比フィードバック条件が成立しているか否かを調べる。空燃比フィードバック条件としては、例えば、水温センサ１３で検出した冷却水温、及びアクセル開度センサ１４で検出したアクセル開度の変化量に基づいて判断する。そして、冷却水温が所定値以上で、且つアクセル開度の変化量が所定値以下のとき(すなわち過渡運転状態にないとき)、空燃比フィードバック条件成立と判定する。
【００２５】
そして、空燃比フィードバック条件不成立のときは、成立するまで待機し、成立したとき、ステップＳ２へ進む。ステップＳ２では目標空燃比λTgを設定する。この目標空燃比λTgは、図３に示す目標空燃比設定ルーチンにて設定される。尚、目標空燃比設定ルーチンについては後述する。
【００２６】
その後、ステップＳ３へ進み、空燃比フィードバック補正値αA/Fを設定する。この空燃比フィードバック補正値αA/Fは、図４に示す空燃比フィードバック補正値設定ルーチンに従って設定される。尚、空燃比フィードバック補正値設定ルーチンについては後述する。
【００２７】
そして、ステップＳ４へ進み、ステップＳ３で設定した空燃比フィードバック補正値αA/Fを出力して、ルーチンを抜ける。
【００２８】
空燃比フィードバック補正値αA/Fは、図示しない燃料噴射制御にて読込まれ、エンジン回転数、及び吸入空気量等に基づいて設定される基本燃料噴射量を、空燃比フィードバック補正値αA/Fで補正して、インジェクタ６へ出力する燃料噴射量（パルス幅）を設定する。
【００２９】
次に、上述した空燃比フィードバック制御ルーチンのステップＳ２で実行される目標空燃比λTgの設定について説明する。この目標空燃比λTgは、図３に示す目標空燃比設定ルーチンにて設定される。
【００３０】
このルーチンでは、先ず、ステップＳ１１で、リヤＯ2センサ１１の出力値ＶＯ2[V]を読込む。続く、ステップＳ１２で、この出力値ＶＯ2に基づき下流側空燃比ＲＯ2がリーン側にあるかリッチ側にあるかを調べ、前回の空燃比との比較において比例積分制御等によりサブフィードバック補正値αＯ2を設定する。
【００３１】
次いで、ステップＳ１３へ進み、ガード中心値Ｓｇｄｏを読込む。このガード中心値Ｓｇｄｏは、後述する図７に示すガード中心値設定ルーチンにて設定される。尚、ガード中心値Ｓｇｄｏの初期値は０である。
【００３２】
そして、サブフィードバック補正値αＯ2と、ガード中心値Ｓｇｄｏに予め設定したリッチ幅Ｒｇｄｏを加算して設定したリッチ側ガード値（Ｓｇｄｏ＋Ｒｇｄｏ）とを比較し、αＯ2＞Ｓｇｄｏ＋Ｒｇｄｏのリッチ側ガード値を超えているときは、ステップＳ１５へ分岐し、サブフィードバック補正値αＯ2をリッチ側ガード値で制限して（αＯ2←Ｓｇｄｏ＋Ｒｇｄｏ）、ステップＳ１８へ進む。
【００３３】
又、ステップＳ１４で、αＯ2≦Ｓｇｄｏ＋Ｒｇｄｏのリッチ側ガード値以下のときは、ステップＳ１６へ進み、サブフィードバック補正値αＯ2と、ガード中心値Ｓｇｄｏから、予め設定したリーン幅Ｌｇｄｏを減算して設定したリーン側ガード値（Ｓｇｄｏ−Ｌｇｄｏ）とを比較する。
【００３４】
そして、αＯ2＜Ｓｇｄｏ−Ｌｇｄｏのリーン側ガード値を下回っているときは、ステップＳ１７へ分岐し、サブフィードバック補正値αＯ2をリーン側ガード値で制限して（αＯ2←Ｓｇｄｏ−Ｌｇｄｏ）、ステップＳ１８へ進む。
【００３５】
又、αＯ2≧Ｓｇｄｏ−Ｌｇｄｏのリーン側ガード値以上のときは、サブフィードバック補正値αＯ2が、ガードウインドウ（Ｓｇｄｏ−Ｌｇｄｏ≦αＯ2≦Ｓｇｄｏ＋Ｒｇｄｏ）に収まっているため、そのままステップＳ１８へ進む。
【００３６】
尚、図１４に示すように、運転中のリッチ幅Ｒｇｄｏ、及びリーン幅Ｌｇｄｏは、エンジン負荷によって変動する可変値である。
【００３７】
ステップＳ１８では、サブフィードバック補正値αＯ2に基づき目標空燃比λTgを補正して、今回の目標空燃比λTgを設定し、ルーチンを抜ける。
【００３８】
次に、上述した空燃比フィードバック制御ルーチンのステップＳ３で実行される空燃比フィードバック補正値αA/Fの設定について説明する。この空燃比フィードバック補正値αA/Fは、図４に示す空燃比フィードバック補正値設定ルーチンにて設定される。
【００３９】
このルーチンでは、先ず、ステップＳ２１で、目標空燃比λTgを読込み、続くステップＳ２２で、フロントA/Fセンサ１０の出力値ＶA/F[V]を読込む。
【００４０】
その後、ステップＳ２３で、フロントA/Fセンサ１０の出力値ＶA/Fに対応する空燃比を算出し、この空燃比が目標空燃比に収束するように空燃比フィードバック補正値αA/Fを、比例積分制御等により設定して、ルーチンを抜ける。
【００４１】
一方、空燃比制御が実行されると、そのバックグラウンドにおいて、図５に示すリヤＯ2センサのリッチ／リーン累積時間比判定ルーチン、及び、図６に示すサブフィードバック平均値判定ルーチンが実行される。
【００４２】
図５に示すリヤＯ2センサのリッチ／リーン累積時間比判定ルーチンでは、先ず、ステップＳ３１で、実行条件が成立しているか否かを調べる。実行条件は、サブフィードバック制御が実行されているか否かで判定し、サブフィードバック制御が実行されているときは、実行条件成立と判定してステップＳ３２へ進む。一方、サブフィードバック制御が実行されてないとき、すなわち、例えば図１２の左側に示すようにリヤＯ2センサ１１の出力値ＶＯ2が大きく変動しているときは、実行条件不成立と判定し、ルーチンを抜ける。
【００４３】
尚、実行条件が不成立であっても、後述する算出累積時間カウンタのカウント値ｃｓｂｆａｃは、図１２の符号Ａ，Ｂで示すようにクリアされず、実行条件が成立するまで待機される。従って、後述するA/Fリッチ累積時間カウンタのカウント値ｃｓｂＲ、A/Fリーン累積時間カウンタのカウント値ｃｓｂＬもクリアされずに待機状態となる。
【００４４】
又、ステップＳ３２へ進むと、リヤＯ2センサ１１の出力値ＶＯ2[V]の目標値ＶＯTg[V]（理論空燃比付近の値）を読込む。次いで、ステップＳ３３へ進み、リヤＯ2センサ１１の出力値ＶＯ2[V]を読込む。
【００４５】
次いで、ステップＳ３４へ進み、リヤＯ2センサ１１の出力値ＶＯ2と、目標値ＶＯTgとを比較する。そして、ＶＯ2≧ＶＯTgの空燃比リッチのときは、ステップＳ３５へ進み、ＶＯ2＜ＶＯTgの空燃比リーンのときは、ステップＳ３６へ分岐する。ステップＳ３５へ進むと、空燃比リッチ累積時間カウンタのカウント値ｃｓｂＲをカウントアップして（ｃｓｂＲ←ｃｓｂＲ＋１）、ステップＳ３７へ進む。又、ステップＳ３６へ進むと、空燃比リーン累積時間カウンタのカウント値ｃｓｂＬをカウントアップして（ｃｓｂＬ←ｃｓｂＬ＋１）、ステップＳ３７へ進む。
【００４６】
ステップＳ３７では、算出累積時間カウンタのカウント値ｃｓｂｆａｃをカウントアップし（ｃｓｂｆａｃ←ｃｓｂｆａｃ＋１）、ステップＳ３８へ進み、算出累積時間カウンタのカウント値ｃｓｂｆａｃと設定時間Ｔｏ（例えば、５sec，１０sec等、予め設定されている固定値）とを比較し、ｃｓｂｆａｃ＜Ｔｏの設定時間Ｔｏに達していないときは、そのままルーチンを抜ける。
【００４７】
一方、ｃｓｂｆａｃ≧Ｔｏの設定時間Ｔｏに達したときは、ステップＳ３９へ進み、A/Fリッチ累積時間カウンタのカウント値ｃｓｂＲとA/Fリーン累積時間カウンタのカウント値ｃｓｂＬとの比であるリッチ／リーン累積時間比ｓｂｆａを算出する（ｓｂｆａ←ｃｓｂＲ／ｃｓｂＬ）。
【００４８】
次いで、ステップＳ４０で累積時間比判定経験フラグｘＳＢＦをセットする（ｘＳＢＦ←１）。この累積時間比判定経験フラグｘＳＢＦの初期値は０であり、後述するガード中心値設定ルーチンにおいて読込まれる。
【００４９】
その後、ステップＳ４１へ進み、ステップＳ４１〜Ｓ４４で、リッチ／リーン累積時間比ｓｂｆａに基づき、空燃比がリッチシフトしているか、リーンシフトしているかを調べる。
【００５０】
ステップＳ４１では、リッチ／リーン累積時間比ｓｂｆａとリッチシフト判定値ｔＪＤＧＲとを比較し、ｓｂｆａ＞ｔＪＤＧＲのときは、空燃比がリッチシフトしていると判定し、ステップＳ４２へ進み、累積時間比リッチシフト経験フラグｘＳＢＦＲをセットし（ｘＳＢＦＲ←１）、ステップＳ４５へ進む。
【００５１】
又、ｓｂｆａ≦ｔＪＤＧＲのときは、ステップＳ４３へ分岐し、リッチ／リーン累積時間比ｓｂｆａとリーンシフト判定値ｔＪＤＧＬとを比較する。そして、ｓｂｆａ≧ｔＪＤＧＬのとき、すなわち、リッチ／リーン累積時間比ｓｂｆａが、リッチシフト判定値ｔＪＤＧＲとリーンシフト判定値ｔＪＤＧＬとの間にあるとき（ｔＪＤＧＲ≧ｓｂｆａ≧ｔＪＤＧＬ）は、サブフィードバック補正値αＯ2が理論空燃比付近で制御されていると判断し、ステップＳ４５へジャンプする。一方、ｓｂｆａ＜ｔＪＤＧＬのときは、空燃比がリーンシフトしていると判定し、ステップＳ４４へ進み、累積時間比リーンシフト経験フラグｘＳＢＦＬをセットし（ｘＳＢＦＬ←１）、ステップＳ４５へ進む。
【００５２】
ステップＳ４５では、A/Fリッチ累積時間カウンタのカウント値ｃｓｂＲ、A/Fリーン累積時間カウンタのカウント値ｃｓｂＬ、及び算出累積時間カウンタのカウント値ｃｓｂｆａｃをクリアして（ｃｓｂＲ←０，ｃｓｂＬ←０，ｃｓｂｆａｃ←０）、ルーチンを抜ける。
【００５３】
ここで、図１２、図１３に示すタイムチャートに従い、上述したリヤＯ2センサのリッチ／リーン累積時間比判定ルーチンで設定されるA/Fリッチ累積時間カウンタのカウント値ｃｓｂＲ、A/Fリーン累積時間カウンタのカウント値ｃｓｂＬ、及びリッチ／リーン累積時間比ｓｂｆａの設定を例示する。
【００５４】
同図に示すように、A/Fリッチ累積時間カウンタのカウント値ｃｓｂＲは、リヤＯ2センサ１１の出力値ＶＯ2が空燃比リッチを検出している間（ＶＯ2≧ＶＯTg）は、インクリメントされ、空燃比リーンを検出している間（ＶＯ＜ＶＯTg）は停止している（ステップＳ３５）。逆に、A/Fリーン累積時間カウンタのカウント値ｃｓｂＬは、リヤＯ2センサ１１の出力値ＶＯ2が空燃比リッチを検出している間（ＶＯ2≧ＶＯTg）は停止され、空燃比リーンを検出している間（ＶＯ2＜ＶＯTg）はインクリメントされる（ステップＳ３６）。又、実行条件が不成立時は成立するまで待機状態となる（ステップＳ３１）。
【００５５】
そして、算出累積時間カウンタのカウント値ｃｓｂｆａｃが設定時間Ｔｏに達したとき、A/Fリッチ累積時間カウンタのカウント値ｃｓｂＲとA/Fリーン累積時間カウンタのカウント値ｃｓｂＬとの比であるリッチ／リーン累積時間比ｓｂｆａ（ｓｂｆａ←ｃｓｂＲ／ｃｓｂＬ）を算出し（ステップＳ３９）、このリッチ／リーン累積時間比ｓｂｆａが、リッチシフト判定値ｔＪＤＧＲとリーンシフト判定値ｔＪＤＧＬとの間に収まっているか否かを判定する（ステップＳ４１〜Ｓ４４）。同時に、各カウント値ｃｓｂＲ，ｃｓｂＬ，ｃｓｂｆａｃをクリアする（ステップＳ４５）。
【００５６】
又、図６に示すサブフィードバック平均値判定ルーチンでは、先ず、ステップＳ５１で、実行条件が成立しているか否かを調べる。実行条件は、始動後、サブフィードバック制御が設定時間以上実行されているか否かで判断し、サブフィードバック制御が設定時間以上継続されているときは、実行条件成立と判定して、ステップＳ５２へ進む。又、サブフィードバック制御の実行時間が設定時間に達していないときは、実行条件不成立と判定し、そのままルーチンを抜ける。尚、このとき後述するサブフィードバック平均値αＯ2ａｖが算出されているときは、その値が保持されている。
【００５７】
ステップＳ５２へ進むと、サブフィードバック補正値αＯ2を読込み、ステップＳ５３で、サブフィードバック補正値αＯ2の平均値（以下「サブフィードバック平均値」と称する）αＯ2ａｖを、
αＯ2ａｖ←αＯ2ａｖ＋（αＯ2−αＯ2ａｖ）×ｋＦＢＡＶ
から算出する。尚、ｋＦＢＡＶは重み係数である。
【００５８】
尚、初回ルーチン実行時のサブフィードバック平均値αＯ2ａｖは、サブフィードバック補正値αＯ2を代入して初期設定する（αＯ2ａｖ←αＯ2）。サブフィードバック平均値αＯ2ａｖを０からではなく、サブフィードバック補正値αＯ2から開始するのは、後述するサブF/Bリーン異常判定ルーチン（図１０参照）、及びサブF/Bリッチ異常判定ルーチン（図１１参照）のステップＳ８２、ステップＳ９２において、サブフィードバック平均値αＯ2ａｖは「常に判定値以上（以下）」を前提としているからである。
【００５９】
次いで、ステップＳ５４へ進み、サブフィードバック補正値αＯ2に応じて設定された設定値であるサブフィードバック平均値αＯ2ａｖと、リーンシフト判定値（Ｓｇｄｏ−ｔＳＢＡＶＬ）とを比較する。そして、αＯ2ａｖ＞Ｓｇｄｏ−ｔＳＢＡＶＬのときは、ステップＳ５５へ進み、サブフィードバック平均値リーンシフト判定フラグｘＳＢＡＶＬをクリアして（ｘＳＢＡＶＬ←０）、ステップＳ５８へ進む。
【００６０】
一方、αＯ2ａｖ≦Ｓｇｄｏ−ｔＳＢＡＶＬのときは、ステップＳ５６へ分岐し、サブフィードバック平均値αＯ2ａｖと、サブフィードバック平均値リッチシフト判定値（Ｓｇｄｏ＋ｔＳＢＡＶＲ）とを比較する。そして、αＯ2ａｖ＜Ｓｇｄｏ＋ｔＳＢＡＶＲのときは、ステップＳ５７へ進み、サブフィードバック平均値リッチシフト判定フラグｘＳＢＡＶＲをクリアして（ｘＳＢＡＶＲ←０）ステップＳ５８へ進む。
【００６１】
尚、両シフト判定フラグｘＳＢＡＶＬ、ｘＳＢＡＶＲは、サブフィードバック平均値αＯ2ａｖに偏りが生じているか否か、すなわち、リーンシフト、或いはリッチシフトしているか否かを示すもので、初期値は１である。従って、サブフィードバック平均値αＯ2ａｖが、リーンシフト判定値（Ｓｇｄｏ−ｔＳＢＡＶＬ）とリッチシフト判定値（Ｓｇｄｏ＋ｔＳＢＡＶＲ）との間に、一度でも収まった経験をすると、両シフト判定フラグｘＳＢＡＶＬ、ｘＳＢＡＶＲはクリアされる。換言すれば、サブフィードバック平均値αＯ2ａｖが、リーンシフト判定値（Ｓｇｄｏ−ｔＳＢＡＶＬ）とリッチシフト判定値（Ｓｇｄｏ＋ｔＳＢＡＶＲ）との間に、一度も収まらない場合は、イグニッションスイッチをＯＦＦするまで、各シフト判定フラグｘＳＢＡＶＬ、ｘＳＢＡＶＲのいずれかは０にセットされないと言うことになる。
【００６２】
図１５（ａ）には、サブフィードバック平均値αＯ2ａｖがリーンシフトしている状態を示し、同図（ｂ）には、リッチシフトしている状態を示す。何れの場合も、破線で示すように、サブフィードバック平均値αＯ2ａｖが、一方へシフトしている状態から一度でもリーンシフト判定値（Ｓｇｄｏ−ｔＳＢＡＶＬ）、或いはリッチシフト判定値（Ｓｇｄｏ＋ｔＳＢＡＶＲ）を横切ったとき、リーンシフト判定フラグｘＳＢＡＶＬ、或いはリッチシフト判定フラグｘＳＢＡＶＲが０にセットされる。
【００６３】
次いで、ステップＳ５８へ進むと、サブフィードバック平均値αＯ2ａｖとガード中心値Ｓｇｄｏとを比較する。
【００６４】
そして、αＯ2ａｖ＞Ｓｇｄｏのときは、ステップＳ５９へ進み、サブフィードバックリッチ補正実施経験フラグｘＳＢＲをセットして（ｘＳＢＲ←１）、ルーチンを終了する。一方、αＯ2ａｖ≦ＳｇｄｏのときはステップＳ６０へ分岐し、サブフィードバックリーン補正実施経験フラグｘＳＢＬをセットして（ｘＳＢＬ←１）、ルーチンを終了する。
【００６５】
両実施経験フラグｘＳＢＲ，ｘＳＢＬは、ガード中心値Ｓｇｄｏをリッチ側或いはリーン側へ移動させたときに、ガード中心値Ｓｇｄｏの移動方向に対してサブフィードバック平均値αＯ2ａｖの制御が行われているか否かの経験の有無を調べるものである。図１６（ａ）には、ガード中心値Ｓｇｄｏをリッチ側へ移動させた状態が示されており、同図（ｂ）には、ガード中心値Ｓｇｄｏをリーン側へ移動させた状態が示されている。両実施経験フラグｘＳＢＲ，ｘＳＢＬの初期値は０であり、サブフィードバック平均値αＯ2ａｖが一度でも、ガード中心値Ｓｇｄｏを横切ってオフセット方向へ制御した場合に、１にセットされる。
【００６６】
次に、図７に示すガード中心値設定ルーチンについて説明する。このルーチンでは、上述したリッチ／リーン累積時間比ｓｂｆａ、サブフィードバック平均値αＯ2ａｖの状態に基づいて設定された各フラグｘＳＢＦＲ，ｘＳＢＦＬ，ｘＳＢＡＶＬ，ｘＳＢＡＶＲ，ｘＳＢＲ，ｘＳＢＬから、次回の運転時において設定するガード中心値Ｓｇｄｏの移動量を決定するものである。
【００６７】
すなわち、先ず、ステップＳ６１では、イグニッションスイッチがＯＦＦか否かを調べ、ＯＮのときは、ＯＦＦするまで待機する。そして、イグニッションスイッチがＯＦＦされたとき、ステップＳ６２へ進む。尚、本形態で作用するエンジンは、セルフシャット機能を有しており、イグニッションスイッチをＯＦＦした後も、ＥＣＵ２０に対しては設定時間だけ通電が継続されている。
【００６８】
ステップＳ６２では、累積時間比判定経験フラグｘＳＢＦの値を参照し、ｘＳＢＦ＝１の累積時間比判定経験済みの場合はステップＳ６３へ進み、又、ｘＳＢＦ＝０の累積時間比未判定のときはルーチンを抜ける。
【００６９】
そして、ステップＳ６３へ進むと、ガード中心値移動条件を設定する。図８に示すように、ガード中心値移動条件は、各フラグｘＳＢＦＲ，ｘＳＢＦＬ，ｘＳＢＡＶＬ，ｘＳＢＡＶＲ，ｘＳＢＲ，ｘＳＢＬの値、及び後述するサブフィードバックガード操作回数カウンタのカウント値ｃｏｂｄｇｄに基づき、条件１〜５に区分されている。以下、各条件について説明する。
【００７０】
条件１：ｘＳＢＦＬ＝１（今回の運転時に累積時間比ｓｂｆａがリーンシフトを経験済み）、且つ、ｘＳＢＡＶＬ＝１（今回の運転中、サブフィードバック平均値αＯ2ａｖが常時リーンシフト判定値(Sgdo-tSBAVL)以下）、且つ、ｘＳＢＲ＝０（今回の運転時にサブフィードバック平均値αＯ2ａｖがリッチ補正を未経験）であること（図１５(a)参照）。
【００７１】
条件２：ｘＳＢＦＲ＝１（今回の運転時に累積時間比ｓｂｆａがリッチシフトを経験済み）、且つ、ｘＳＢＡＶＲ＝１（今回の運転中、サブフィードバック平均値αＯ2ａｖが常時リッチシフト判定値(Sgdo+tSBAVR)以上）、且つ、ｘＳＢＬ＝０（今回の運転時にサブフィードバック平均値αＯ2ａｖがリーン補正を未経験）であること（図１５(b)参照）。
【００７２】
条件３：ｃｏｂｄｇｄが０よりも大きく（ｃｏｂｄｇｄ＞０）、且つ、ｘＳＢＦＬ＝１或いはｘＳＢＲ＝０であること。
【００７３】
条件４：ｃｏｂｄｇｄが０未満で（ｃｏｂｄｇｄ＜０）、ｘＳＢＦＲ＝１或いはｘＳＢＬ＝０であること。
【００７４】
条件５：ｘＳＢＦＲ＝１、且つ、ｘＳＢＦＬ＝１であること。
【００７５】
となる。
【００７６】
そして、ステップＳ６４〜６６で、今回の運転がどの条件に対応しているかを判定する。条件１、或いは条件３のときは、図１５（ａ）に示すように、ガード中心値Ｓｇｄｏがリッチ側へ過度に移動されていると判断し、ステップＳ６４からステップＳ６７へ進み、サブフィードバックガード操作回数カウンタのカウント値ｃｏｂｄｇｄをデクリメントして（ｃｏｂｄｇｄ←ｃｏｂｄｇｄ−１）、ステップＳ７０へ進む。
【００７７】
又、条件２、或いは４のときは、図１５（ｂ）に示すように、ガード中心値Ｓｇｄｏがリーン側へ過度に移動されていると判断し、ステップＳ６５からステップＳ６８へ進み、サブフィードバック（サブF/B）ガード操作回数カウンタのカウント値ｃｏｂｄｇｄをインクリメントして（ｃｏｂｄｇｄ←ｃｏｂｄｇｄ＋１）、ステップＳ７０へ進む。
【００７８】
又、条件５のときは、今回の運転時にリッチシフトとリーンシフトとを経験しているため、ステップＳ６６からステップＳ６９へ進み、ガード中心値Ｓｇｄｏと、サブF/Bガード操作回数カウンタのカウント値ｃｏｂｄｇｄとを共に０に戻して（Ｓｇｄｏ←０，ｃｏｂｄｇｄ←０）として、ルーチンを終了する。
【００７９】
又、何れの条件にも適合しない場合は、そのままルーチンを終了し、サブF/Bガード操作回数カウンタのカウント値ｃｏｂｄｇｄ、ガード中心値Ｓｇｄｏを維持する。  一方、ステップＳ６７或いはＳ６８から、ステップＳ７０へ進むと、カウント値ｃｏｂｄｇｄに基づき、テーブル検索、或いは演算によりガード中心値Ｓｇｄｏの移動量を設定して、ルーチンを終了する。
【００８０】
ガード中心値Ｓｇｄｏの移動量は、カウント値ｃｏｂｄｇｄの増減にほぼ比例して設定される。従って、ステップＳ６７でカウント値ｃｏｂｄｇｄがデクリメントされた場合、次回の運転時に実行される目標空燃比設定ルーチン（図３参照）において読込まれるガード中心値Ｓｇｄｏは減少方向に移動され、リッチ側への過度の移動が修正される。又、ステップＳ６８でカウント値ｃｏｂｄｇｄがインクリメントされた場合は、ガード中心値Ｓｇｄｏは増加方向に移動されるため、リーン側への過度の移動が修正される。
【００８１】
以上の結果、例えば、フロントA/Fセンサ１０の故障により、実際には空燃比がλ＝1.1であるにも拘わらず、λ＝1.0と誤検出した場合、リヤＯ2センサ１１で検出する空燃比はリーンとなるため、図１４に示すように、サブフィードバック補正値αＯ2はリッチ側へ偏った制御となる。その結果、サブフィードバック平均値αＯ2ａｖはガード中心値Ｓｇｄｏからリッチ側へシフトされた値となる。このような場合、すなわちサブフィードバック平均値αＯ2ａｖが、図８の条件２或いは条件４(図１５(b)参照）にある場合は、次回の運転時においては、ガード中心値Ｓｇｄｏがリッチ側へ移動されるため、サブフィードバック平均値αＯ2ａｖはガード中心値Ｓｇｄｏ側へシフトされて、良好なサブフィードバック制御性を得ることが出来る。
【００８２】
逆に、フロントA/Fセンサ１０が、実際には空燃比がλ＝0.9であるにも拘わらず、λ＝1.0と誤検出した場合、リヤＯ2センサ１１で検出する空燃比はリッチとなるため、サブフィードバック補正値αＯ2はリーン側へ偏った制御となる。その結果、サブフィードバック平均値αＯ2ａｖはガード中心値Ｓｇｄｏからリーン側へシフトされる。このような場合、すなわち、サブフィードバック平均値αＯ2ａｖが、図８の条件１或いは条件３(図１５(a)参照）にある場合は、次回の運転時においては、ガード中心値Ｓｇｄｏがリーン側へ移動されるため、良好なサブフィードバック制御性を得ることが出来る。
【００８３】
従って、フロントA/Fセンサ１０の故障により上流側空燃比ＦA/Fが正確に検出されない場合であっても、リヤＯ2センサ１１で検出した下流側空燃比ＲＯ2に基づいて、良好な空燃比フィードバック制御を行うことができる。すなわち、フロントA/Fセンサ１０の故障による空燃比誤検出を、リヤＯ2センサ１１の検出値に基づいて設定されるサブフィードバック補正値αＯ2にて修正することができる。
【００８４】
尚、本形態では、ガード中心値設定ルーチンを、イグニッションスイッチをＯＦＦ後、すなわち、１運転で１回行うようにしているが、運転中において設定時間毎に行うようにしても良い。
【００８５】
次に、図９に示すフローチャートに従い、フロントA/Fセンサ１０の故障診断について説明する。このルーチンは、イグニッションスイッチをＯＮした後、空燃比制御のバックグラウンドにおいて、所定周期毎に実行される。
【００８６】
先ず、ステップＳ７１で、エンジン１が始動しているか否かを、エンジン回転数、或いはスタータスイッチのＯＮからＯＦＦへの切換え等に基づいて調べる。そして、エンジン１が始動していないときは、ルーチンを抜け、始動するまで待機する。
【００８７】
一方、エンジン１が始動すると、ステップＳ７２へ進み、サブフィードバック条件が成立しているか否かを調べる。サブフィードバック条件は、サブフィードバック補正値αＯ2が出力されているか否かで判断し、サブフィードバック補正値αＯ2が出力されているときは、サブフィードバック条件成立と判断して、ステップＳ７３へ進む。一方、サブフィードバック補正値αＯ2が出力されていないときは、そのままルーチンを抜ける。
【００８８】
ステップＳ７３へ進むと、累積時間比判定経験フラグｘＳＢＦの値を参照し、ｘＳＢＦ＝１、すなわち、累積時間比判定経験済みの場合はステップＳ７４へ進み、ｘＳＢＦ＝０、すなわち、未だ累積時間比判定が成されていないときは、そのままルーチンを抜ける。
【００８９】
ステップＳ７４へ進むと、サブF/Bリーン異常判定を行い、続く、ステップＳ７５でサブF/Bリッチ異常判定を行った後、ルーチンを抜ける。
【００９０】
ステップＳ７４のサブF/Bリーン異常判定は、図１０に示すサブF/Bリーン異常判定ルーチンで実行される。
【００９１】
このルーチンは、サブフィードバック補正値αＯ2がリーン側へ異常補正されているか否か、すなわち、ガード中心値Ｓｇｄｏをリーン側へ移動させたにも拘わらず依然としてサブフィードバック補正値αＯ2がリーンシフトしているか否かを調べる。
【００９２】
先ず、ステップＳ８１で、サブF/Bガード操作回数カウンタのカウント値ｃｏｂｄｇｄとリーンオフセット判定値ｋＪＤＧＣＬとを比較する。サブF/Bガード操作回数カウンタのカウント値ｃｏｂｄｇｄはガード中心値Ｓｇｄｏの移動量を示している。ガード中心値Ｓｇｄｏは、上述した図７に示すガード中心値設定ルーチンにおいて設定され、ガード中心値Ｓｇｄｏがリッチ側へ過度に移動されているときはデクリメントされ（ｃｏｂｄｇｄ←ｃｏｂｄｇｄ−１）、リーン側へ過度に移動されているときはインクリメントされる（ｃｏｂｄｇｄ←ｃｏｂｄｇｄ＋１）。
【００９３】
そして、ｃｏｂｄｇｄ≦ｋＪＤＧＣＬのガード中心値Ｓｇｄｏがリーンオフセット判定値ｋＪＤＧＣＬ以下にオフセットされているとき、すなわちガード中心値Ｓｇｄｏがリーン側へ過度に移動されているときは、ステップＳ８２へ進む。又、ｃｏｂｄｇｄ＞ｋＪＤＧＣＬのときは、正常と判断し、ステップＳ８６へ分岐する。
【００９４】
又、ステップＳ８２へ進むと、サブフィードバック平均値αＯ2ａｖとサブF/Bリーンオフセット判定値ｋＪＤＧＳＢＡＢＬとを比較する。このサブF/Bリーンオフセット判定値ｋＪＤＧＳＢＡＢＬは、サブフィードバック平均値αＯ2ａｖがリーン側ガード値（Ｓｇｄｏ−Ｌｇｄｏ）に貼り付き傾向（貼り付いた場合も含む）があるかどうか判定するもので、リーン側ガード値（Ｓｇｄｏ−Ｌｇｄｏ）よりもややリッチ側に設定されている。
【００９５】
そして、αＯ2ａｖ≧ｋＪＤＧＳＢＡＢＬのときは、ガード中心値Ｓｇｄｏをリーン側へオフセットさせたことで、サブフィードバック平均値αＯ2ａｖのリーン側への貼り付き傾向が解消されたため、ステップＳ８６へ分岐する。
【００９６】
又、αＯ2ａｖ＜ｋＪＤＧＳＢＡＢＬのときは、ガード中心値Ｓｇｄｏをリーン側へオフセットさせても、依然としてサブフィードバック平均値αＯ2ａｖのリーン側への貼り付き傾向が解消されない、すなわち、リーン側への補正不足と判断し、ステップＳ８３へ進み、サブF/Bリッチ補正実施経験フラグｘＳＢＲがクリアされているか否かを調べる。
【００９７】
ｘＳＢＲ＝０、すなわち、サブフィードバック平均値αＯ2ａｖが、一度も、ガード中心値Ｓｇｄｏを横切ってリッチ方向へ制御されていない場合は、ステップＳ８４へ進み、又、ｘＳＢＲ＝１、すなわち、サブフィードバック平均値αＯ2ａｖがガード中心値Ｓｇｄｏを横切った経験があるときは、ステップＳ８６へ分岐する。
【００９８】
ステップＳ８１，ステップＳ８２、或いはステップＳ８３からステップＳ８６へ分岐すると、サブF/Bリーン異常判定フラグｘＳＢＦＳＹＳＬをクリアすると共に、後述する異常判定タイマのカウント値ｔｉｍをクリアして（ｘＳＢＦＳＹＳＬ←０，ｔｉｍ←０）、ルーチンを抜け、図９のステップＳ７６へ進む。
【００９９】
又、ステップＳ８４へ進むと、異常判定時間計測タイマのカウント値ｔｉｍと設定時間ｋＳＢＦＳＹＳＮＧ（１０min，２０min等）とを比較し、異常判定時間Ｔｉｍが設定時間ｋＳＢＦＳＹＳＮＧに達していないときは（ｔｉｍ＜ｋＳＢＦＳＹＳＮＧ）、ステップＳ８１へ戻り、再度、異常判定を行う。
【０１００】
そして、異常判定時間Ｔｉｍが設定時間ｋＳＢＦＳＹＳＮＧに達したときは（ｔｉｍ≧ｋＳＢＦＳＹＳＮＧ）、ステップＳ８５へ進み、サブF/Bリーン異常判定フラグｘＳＢＦＳＹＳＬをセットして（ｘＳＢＦＳＹＳＬ←１）、ルーチンを抜け、図９のステップＳ７５へ進む。
【０１０１】
サブF/Bリーン異常判定フラグｘＳＢＦＳＹＳＬがセットされた場合は、サブフィードバック補正値αＯ2が空燃比リッチ側に貼り付き傾向にあるので、フロントA/Fセンサ１０はリーン側で故障していることになる。
【０１０２】
図９に示すステップＳ７５のサブF/Bリッチ異常判定は、図１１に示すサブF/Bリッチ異常判定ルーチンで実行される。
【０１０３】
このルーチンは、サブフィードバック補正値αＯ2がリッチ側へ異常補正されているか否か、すなわち、ガード中心値Ｓｇｄｏをリッチ側へ移動させたにも拘わらず依然としてサブフィードバック補正値αＯ2がリッチシフトしているか否かを調べる。
【０１０４】
先ず、ステップＳ９１で、サブF/Bガード操作回数カウンタのカウント値ｃｏｂｄｇｄとリッチオフセット判定値ｋＪＤＧＣＲとを比較する。
【０１０５】
そして、ｃｏｂｄｇｄ≧ｋＪＤＧＣＲのガード中心値Ｓｇｄｏがリッチオフセット判定値ｋＪＤＧＣＲ以上にオフセットされているとき、すなわち、ガード中心値Ｓｇｄｏがリッチ側へ過度に補正されているときは、ステップＳ９２へ進む。又、ｃｏｂｄｇｄ＜ｋＪＤＧＣＲのときは、正常と判断し、ステップＳ９６へ分岐する。
【０１０６】
又、ステップＳ９２へ進むと、サブフィードバック平均値αＯ2ａｖとサブF/Bリッチオフセット判定値ｋＪＤＧＳＢＡＢＲとを比較する。このサブF/Bリッチオフセット判定値ｋＪＤＧＳＢＡＢＲは、サブフィードバック平均値αＯ2ａｖがリッチ側ガード値（Ｓｇｄｏ＋Ｒｇｄｏ）に貼り付き傾向（貼り付いた場合も含む）があるかどうか判定するもので、リッチ側ガード値（Ｓｇｄｏ＋Ｒｇｄｏ）よりもややリーン側に設定されている。
【０１０７】
そして、αＯ2ａｖ≦ｋＪＤＧＳＢＡＢＲのときは、ガード中心値Ｓｇｄｏをリッチ側へオフセットさせたことで、サブフィードバック平均値αＯ2ａｖのリッチ側への貼り付きが解消されたため、ステップＳ９６へ分岐する。
【０１０８】
又、αＯ2ａｖ＞ｋＪＤＧＳＢＡＢＲのときは、ガード中心値Ｓｇｄｏをリッチ側へオフセットさせても、依然としてサブフィードバック平均値αＯ2ａｖのリッチ側への貼り付き傾向が解消されない、すなわち、リッチ側への補正不足と判断し、ステップＳ９３へ進み、サブF/Bリーン補正実施経験フラグｘＳＢＬがクリアされているか否かを調べる。
【０１０９】
ｘＳＢＬ＝０、すなわち、サブフィードバック平均値αＯ2ａｖが、一度も、ガード中心値Ｓｇｄｏを横切ってリーン方向へ制御されていない場合は、ステップＳ９４へ進み、又、ｘＳＢＬ＝１、すなわち、サブフィードバック平均値αＯ2ａｖがガード中心値Ｓｇｄｏを横切った経験があるときは、ステップＳ９６へ分岐する。
【０１１０】
ステップＳ９１，ステップＳ９２、或いはステップＳ９３からステップＳ９６へ分岐すると、サブF/Bリッチ異常判定フラグｘＳＢＦＳＹＳＲをクリアすると共に、後述する異常判定タイマのカウント値ｔｉｍをクリアして（ｘＳＢＦＳＹＳＲ←０，ｔｉｍ←０）、ルーチンを抜ける。
【０１１１】
又、ステップＳ９４へ進むと、異常判定時間計測タイマのカウント値ｔｉｍと設定時間ｋＳＢＦＳＹＳＮＧ（１０min，２０min等）とを比較し、異常判定時間Ｔｉｍが設定時間ｋＳＢＦＳＹＳＮＧに達していないときは（ｔｉｍ＜ｋＳＢＦＳＹＳＮＧ）、ステップＳ９１へ戻り、再度、異常判定を行う。
【０１１２】
そして、異常判定時間Ｔｉｍが設定時間ｋＳＢＦＳＹＳＮＧに達したときは（ｔｉｍ≧ｋＳＢＦＳＹＳＮＧ）、ステップＳ９５へ進み、サブF/Bリッチ異常判定フラグｘＳＢＦＳＹＳＲをセットして（ｘＳＢＦＳＹＳＲ←１）、ルーチンを抜ける。
【０１１３】
サブF/Bリッチ異常判定フラグｘＳＢＦＳＹＳＲがセットされた場合は、サブフィードバック補正値αＯ2が空燃比リーン側に貼り付き傾向にあるので、フロントA/Fセンサ１０はリッチ側で故障していることになる。
【０１１４】
尚、フロントA/Fセンサ１０が故障と診断された場合であっても、次回のエンジン始動時には、ガード中心値Ｓｇｄｏが更にオフセットされるため、フロントA/Fセンサ１０の故障による排気ガスの悪化は最小限となる。
【０１１５】
ところで、新品の触媒８では、リヤＯ2センサ１１で検出する下流側空燃比ＲＯ2が、フロントA/Fセンサ１０が故障している場合と同様、リーン（或いはリッチ）側へシフトする現象が現れる場合がある。下流側空燃比ＲＯ2がリーン（或いはリッチ）側へシフトした場合、ガード中心値Ｓｇｄｏがリッチ（或いはリーン）側へオフセットするが、このとき、サブフィードバック平均値αＯ2ａｖのリッチ（或いはリーン）側への貼り付きが解消された場合、すなわち、上述したステップＳ８２でαＯ2ａｖ≧ｋＪＤＧＳＢＡＢＬと判定され、且つ、ステップＳ９２でαＯ2ａｖ≦ｋＪＤＧＳＢＡＢＲと判定された場合は、フロントA/Fセンサ１０の故障ではなく、新品の触媒８が原因で空燃比が一方へリーンシフトしていると判別できる。その結果、このような場合、フロントA/Fセンサ１０は正常と判定され、誤診断を防止することができる。
【０１１６】
このように、本形態は、フロントA/Fセンサ１０の故障を、サブフィードバック平均値αＯ2ａｖと、リヤＯ2センサ１１のリッチ／リーン累積時間比ｓｂｆａとに基づいて判定するようにしたので、過渡運転時等、エンジン負荷変動の影響を受けることなく、フロントA/Fセンサ１０の故障診断を行うことが出来る。
【０１１７】
又、サブフィードバック補正値αＯ2を制限するガード値を、サブフィードバック平均値αＯ2ａｖと、リヤＯ2センサ１１のリッチ／リーン累積時間比ｓｂｆａ等の変化に応じて移動させることで、目標空燃比λTgがサブフィードバック平均値αＯ2ａｖにて適正に補正されるため、フロントA/Fセンサ１０に故障が発生した場合であっても、排気エミッションの悪化を有効に防止することができる。
【図面の簡単な説明】
【０１１８】
【図１】空燃比制御システムの概略構成図
【図２】空燃比フィードバック制御ルーチンを示すフローチャート
【図３】目標空燃比設定ルーチンを示すフローチャート
【図４】空燃比フィードバック補正値設定ルーチンを示すフローチャート
【図５】リヤＯ2センサのリッチ／リーン累積時間比判定ルーチンを示すフローチャート
【図６】サブフィードバック平均値判定ルーチンを示すフローチャート
【図７】ガード中心値設定ルーチンを示すフローチャート
【図８】ガード中心値移動条件を示す図表
【図９】フロントA/Fセンサの故障診断ルーチンを示すフローチャート
【図１０】サブF/Bリーン異常判定ルーチンを示すフローチャート
【図１１】サブF/Bリッチ異常判定ルーチンを示すフローチャート
【図１２】リヤＯ2センサの出力値とA/Fリッチ累積時間カウンタのカウント値とA/Fリーン累積時間カウンタのカウント値との変化を示すタイムチャート
【図１３】他の態様によるリヤＯ2センサの出力値とA/Fリッチ累積時間カウンタのカウント値とA/Fリーン累積時間カウンタのカウント値との変化を示すタイムチャート
【図１４】運転中のサブフィードバック補正値、サブフィードバック平均値、及びガード値の変化を示すタイムチャート
【図１５】（ａ）はサブフィードバック平均値がリーンシフトしている状態の説明図、（ｂ）はサブフィードバック平均値がリッチシフトしている状態の説明図
【図１６】（ａ）はガード中心値をリッチ側へ移動させた状態の説明図、（ｂ）はガード中心値をリーン側へ移動させた状態の説明図
【符号の説明】
【０１１９】
１…エンジン，７…排気通路、８…触媒、１０…空燃比センサ、１１…酸素センサ、２０…電子制御装置、αＯ2ａｖ…サブフィードバック平均値、αA/F…空燃比フィードバック補正値、αＯ2…サブフィードバック補正値、λTg…目標空燃比、ＦA/F…上流側空燃比、Ｌｇｄｏ…（ガード値の）リーン幅、ＲＯ2…下流側空燃比、Ｒｇｄｏ…（ガード値の）リッチ幅、Ｓｇｄｏ…ガード中心値、Ｔｉｍ…異常判定時間、Ｔｏ…設定時間、ＶA/F…（空燃比センサの）出力値、ＶＯ2…（酸素センサの）出力値、ＶＯTg…目標値、ｋＪＤＧＣＬ…リーンオフセット判定値、ｋＪＤＧＣＲ…リッチオフセット判定値、ｓｂｆａ…リッチ／リーン累積時間比、ｔＪＤＧＬ…リーンシフト判定値、ｔＪＤＧＲ…リッチシフト判定値、ｘＳＢＡＶＬ…リーンシフト判定フラグ、ｘＳＢＡＶＲ…リッチシフト判定フラグ、ｘＳＢＦ…累積時間比判定経験フラグ、ｘＳＢＦＬ…累積時間比リーンシフト経験フラグ、ｘＳＢＦＲ…累積時間比リッチシフト経験フラグ、ｘＳＢＦＳＹＳＬ…リーン異常判定フラグ、ｘＳＢＦＳＹＳＲ…リッチ異常判定フラグ
代理人    弁理士    伊  藤    進
【図１】
2005291101.tif 000003
【図２】
2005291101.tif 000004
【図３】
2005291101.tif 000005
【図４】
2005291101.tif 000006
【図５】
2005291101.tif 000007
【図６】
2005291101.tif 000008
【図７】
2005291101.tif 000009
【図８】
2005291101.tif 000010
【図９】
2005291101.tif 000011
【図１０】
2005291101.tif 000012
【図１１】
2005291101.tif 000013
【図１２】
2005291101.tif 000014
【図１３】
2005291101.tif 000015
【図１４】
2005291101.tif 000016
【図１５】
2005291101.tif 000017
【図１６】
2005291101.tif 000018