(57)【要約】【課題】上流側空燃比センサの出力値が正常値と乖離する異常状態（センサ出力値拡大異常又はセンサ出力値縮小異常）が発生した場合、下流側空燃比センサの出力値に基いて算出されるサブフィードバック量の学習値を直ちに適正値近傍の値に修正することにより、エミッションの悪化を回避することができる内燃機関の空燃比制御装置を提供すること。【解決手段】この制御装置は、上流側空燃比センサの出力値が「上流側空燃比センサが正常である場合の出力値（正常値）」と乖離する第１異常状態が発生しているか否かを判定する。制御装置は、第１異常状態が発生したと判定した場合、所定状態における上流側空燃比センサの出力値に基いて「サブフィードバック量の学習値の収束値」である収束予想値Vafsfbgy（＝VafsfbgL）を求め、学習値Vafsfbgをその収束予想値に直ちに設定する（時刻ｔ１）。【選択図】図５
2010071259.tif 000002
【特許請求の範囲】
【請求項１】
内燃機関の排気通路に配設された触媒と、
前記排気通路であって前記触媒よりも上流側の部位に配設されるとともに同配設された部位を流れるガスの空燃比に応じた出力値を出力する上流側空燃比センサと、
前記排気通路であって前記触媒よりも下流側の部位に配設されるとともに同配設された部位を流れるガスの空燃比に応じた出力値を出力する下流側空燃比センサと、
前記下流側空燃比センサの出力値を下流側目標値に一致させるためのサブフィードバック量を算出するサブフィードバック量算出手段と、
前記サブフィードバック量に含まれる定常成分に応じた値に基づいて学習値を更新する学習を行うとともに同サブフィードバック量を同更新した学習値に応じて補正する学習手段と、
前記上流側空燃比センサの出力値と前記補正されたサブフィードバック量と前記更新された学習値とに基づき前記機関に供給される混合気の空燃比を理論空燃比に一致させる空燃比フィードバック制御を実行する空燃比制御手段と、
を備えた内燃機関の空燃比制御装置であって、
前記上流側空燃比センサの実際の出力値である実出力値が同上流側空燃比センサが正常であるときの同上流側空燃比センサの出力値である正常値と相違する第１異常状態が発生したか否かを判定する第１異常判定手段と、
前記上流側空燃比センサに所定のガスが到達している時点である所定ガス到達時における前記上流側空燃比センサの出力値と前記学習値の収束値である収束予想値との関係を予め記憶するとともに、前記第１異常状態が発生したと判定されたとき同所定ガス到達時における前記実出力値と前記関係とに基づいて前記学習値の実際の収束予想値を取得し且つ前記学習値を同取得した実際の収束予想値に設定する学習値設定手段と、
を備えた空燃比制御装置。
【請求項２】
請求項１に記載の内燃機関の空燃比制御装置であって、
前記学習値設定手段は、
前記第１異常状態以外の第２異常状態であって、且つ、前記学習値の収束値が同第２異常状態の発生前後において相違する第２異常状態が発生したか否かを判定するとともに、前記第１異常状態が発生したと判定された場合に前記第２異常状態が既に発生していると判定されているときには前記学習値の前記取得された実際の収束予想値への設定を実行しないように構成された空燃比制御装置。
【請求項３】
請求項１に記載の内燃機関の空燃比制御装置において、
前記学習値設定手段は、
前記関係を、前記所定ガス到達時における前記上流側空燃比センサの出力値と前記所定ガス到達時における前記正常値との差と、前記収束予想値と前記上流側空燃比センサが正常である場合に予想される前記学習値の収束値である正常時収束予想値との差と、の関係を示す学習値差関係として記憶し、前記第１異常状態が発生したと判定されたとき、前記所定ガス到達時における前記実出力値と前記所定ガス到達時における前記正常値との差と、前記学習値差関係と、に基づいて前記学習値の変化量を予想し、同予想した変化量だけ現時点における前記学習値を変化させた値を前記実際の収束予想値として取得するように構成された空燃比制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、内燃機関の排気通路であって「同排気通路に設けられた触媒（排気浄化触媒、三元触媒）」の上流側及び下流側にそれぞれ配設された上流側空燃比センサ及び下流側空燃比センサの出力値に基づき「機関に供給される混合気の空燃比（以下、単に「機関の空燃比」と称呼することもある。）」を制御する内燃機関の空燃比制御装置に関する。
【背景技術】
【０００２】
従来から、内燃機関の排気通路の上流から下流に向け上流側空燃比センサ、触媒及び下流側空燃比センサを備えるとともに、上流側空燃比センサの出力値と下流側空燃比センサの出力値とに基づいて機関の空燃比を制御する空燃比制御装置が広く採用されている。
【０００３】
より具体的に述べると、従来の空燃比制御装置は、前記下流側空燃比センサの出力値を下流側目標値に一致させるためのサブフィードバック量を算出する。更に、従来の空燃比制御装置は、「前記算出されたサブフィードバック量に含まれる定常成分に応じた値」に基づいて学習値を更新する「学習」を行い、且つ、サブフィードバック量を「更新した学習値」に応じて補正する。そして、従来の空燃比制御装置は、前記上流側空燃比センサの出力値と、サブフィードバック量と、学習値と、に基づいて、機関の空燃比を理論空燃比に一致させるためのメインフィードバック量を算出し、その算出したメインフィードバック量に基づき機関の空燃比（例えば、燃料噴射量）をフィードバック制御するようになっている。
【０００４】
本明細書において、メインフィードバック量を新たに算出（更新）し、そのメインフィードバック量を機関の空燃比の制御に使用することを「メインフィードバック制御を実行する。」とも言う。同様に、サブフィードバック量を新たに算出（更新）し、そのサブフィードバック量を機関の空燃比の制御に使用することを「サブフィードバック制御を実行する。」とも言う。
【０００５】
上記学習値は、空燃比制御装置が備えるバックアップＲＡＭ（スタンバイＲＡＭ）に格納される。バックアップＲＡＭには機関が搭載された車両のイグニッション・キー・スイッチの位置に拘らずバッテリから電力が供給される。バックアップＲＡＭはバッテリから電力が供給されている限り「格納した値（データ）」を保持することができる。従って、例えば、下流側空燃比センサが活性化することに伴ってサブフィードバック制御が開始された時点からサブフィードバック量が収束値（定常値）近傍に至る時点までの間、サブフィードバック量の収束値からのズレを学習値によって補償することができる。その結果、サブフィードバック制御の開始直後において、機関の空燃比は適正値近傍の空燃比となるように制御され得る。なお、学習値はＥＥＰＲＯＭ等の不揮発性メモリに記憶されてもよい（特許文献１を参照。）。
【特許文献１】特開２００７−１６２６２６号公報
【０００６】
ところで、限界電流式等の上流側空燃比センサは、例えば、上流側空燃比（上流側空燃比センサに到達している排ガスの空燃比）abyfsに対し「図３の実線ＣＴにより示した出力値（正常値）Vabyfs」を出力する。より具体的に述べると、上流側空燃比センサの出力値Vabyfsは上流側空燃比abyfsが理論空燃比よりも大きくなるほど（リーン側の空燃比になるほど）増大する。更に、上流側空燃比abyfsが理論空燃比であるとき、出力値Vabyfsは所定値Vstoichとなる。制御装置は、この実線ＣＴにより示された「出力値Vabyfsと上流側空燃比abyfsとの関係」をテーブル（ルック・アップ・テーブル）Mapabyfsの形式にて記憶している。制御装置は、例えば、上流側空燃比センサが出力値V1（V1＜Vstoich）を出力しているとき、その出力値V1とテーブルMapabyfsとに基づいて「上流側空燃比abyfsがＡ１である。」と認識する。
【０００７】
しかしながら、上流側空燃比センサの出力値は種々の原因によって正常値から乖離する場合がある。例えば、上流側空燃比センサに排ガス中の水分が付着することに起因して上流側空燃比センサの空燃比検出素子の内部に大きな熱応力が生じ、その結果、その素子にクラックが生じる場合（素子割れが発生する場合）がある。この場合、上流側空燃比センサの出力値は、図３の破線ＣＬに示したように変化する。即ち、上流側空燃比センサの出力値Vabyfs（破線ＣＬ）は正常値（実線ＣＴ）よりも値Vstoichから遠ざかる。このような出力値Vabyfsの異常は、「センサ出力値拡大異常」とも称呼される。
【０００８】
この場合、上流側空燃比センサの出力値Vabyfsは、真の上流側空燃比abyfsが「上流側空燃比Ａ１よりも理論空燃比に近い空燃比（リーン側の空燃比、大きい空燃比）であるＡ２」であるときに値V1となる。このため、制御装置は、現時点の上流側空燃比abyfsは「真の上流側空燃比abyfsである空燃比Ａ２」よりも「よりリッチ側（小さい）空燃比Ａ１」であると認識する。
【０００９】
この結果、メインフィードバック量による空燃比制御が実行されると、機関の空燃比はリーン側に過補正される。一方、よく知られているように、触媒の下流に流出する排ガスの空燃比は「機関の空燃比の平均値」に応じた値となる。従って、上述した「空燃比のリーン側への過補正」は「下流側空燃比センサの出力値に基づくサブフィードバック量」の変化となって現れる。即ち、サブフィードバック量は「機関の空燃比をよりリッチ側に補正する値」へと変化する。このため、サブフィードバック量の学習値も「機関の空燃比をよりリッチ側に補正する値」へと変化する。
【００１０】
また、上流側空燃比センサの出力値Vabyfsが正常値である場合、上流側空燃比センサが出力値V2（V2＞Vstoich）を出力しているとき、制御装置はその出力値V2とテーブルMapabyfsとに基づいて上流側空燃比abyfsはＡ３であると認識する。これに対し、センサ出力値拡大異常が発生した場合、出力値Vabyfsは、真の上流側空燃比abyfsが「上流側空燃比Ａ３よりも理論空燃比に近い空燃比（リッチ側の空燃比、小さい空燃比）であるＡ４」であるときに値V2となる。このため、制御装置は、現時点の上流側空燃比abyfsは「真の上流側空燃比abyfsである空燃比Ａ４」よりも「よりリーン側の（大きい）空燃比Ａ３」であると認識する。
【００１１】
この結果、メインフィードバック量による空燃比制御が実行されると、機関の空燃比はリッチ側に過補正される。従って、この「空燃比のリッチ側への過補正」は「下流側空燃比センサの出力値に基づくサブフィードバック量」の変化となって現れる。即ち、サブフィードバック量は「機関の空燃比をよりリーン側に補正する値」へと変化する。このため、サブフィードバック量の学習値も「機関の空燃比をよりリーン側に補正する値」へと変化する。
【００１２】
加えて、このようなセンサ出力値拡大異常が発生した場合、上流側空燃比センサの実際の出力値VabyfsとテーブルMapabyfsとにより取得される上流側空燃比と、真の上流側空燃比と、の差が、理論空燃比を中心としてリーン側とリッチ側とで対称ではない状況（空燃比検出誤差の非対称性）が発生する。その結果、サブフィードバック量の学習値は出力値Vabyfsが正常値であるときとは異なる値に収束する。この点について、以下により具体的に述べる。
【００１３】
いま、上記空燃比Ａ２が理論空燃比に対して正の値dAFだけ小さい空燃比であり、上記空燃比Ａ４が理論空燃比に対して正の値dAFだけ大きい空燃比であると仮定する。このとき、上記値Ａ１と上記値Ａ２との差の大きさは、通常、上記値Ａ３と上記値Ａ４との差の大きさよりも大きくなる。この結果、メインフィードバック制御によって、機関の空燃比は理論空燃比よりもリーン側に過補正される。従って、サブフィードバック量の学習値は、機関の空燃比を「よりリッチ側に補正するための値」へと収束する。
【００１４】
このように、センサ出力値拡大異常が発生すると、学習値はセンサ出力値拡大異常が発生する直前の値とは異なる値（収束値）に向けて変化する。但し、学習値は、誤った学習が行われないようにするために急速には変更されない。従って、従来の制御装置によれば、センサ出力値拡大異常が発生した直後の時点から学習値が収束するまでに比較的長い時間を要し、その結果、エミッションが悪化するという問題がある。
【００１５】
他方、空燃比検出素子を覆う拡散抵抗層が目詰まりしたり空燃比検出素子自体が経年劣化すること等に起因して、上流側空燃比センサの出力値が図３の一点鎖線ＣＳに示したように変化する場合がある。即ち、上流側空燃比センサの出力値Vabyfs（一点鎖線ＣＳ）は正常値（実線ＣＴ）よりも値Vstoichに近づく。このような出力値Vabyfsの異常は、「センサ出力値縮小異常」とも称呼される。
【００１６】
この結果、上流側空燃比センサの出力値VabyfsとテーブルMapabyfsとにより取得される上流側空燃比は、真の上流側空燃比を表さなくなるから、メインフィードバック量による空燃比制御が実行されると、機関の空燃比はリッチ側又はリーン側に過補正される。この空燃比の過補正は下流側空燃比センサの出力値に基づくサブフィードバック量に現れ、従って、サブフィードバック量の学習値も変化する。
【００１７】
更に、このようなセンサ出力値縮小異常が発生した場合においても、上流側空燃比センサの実際の出力値VabyfsとテーブルMapabyfsとにより取得される上流側空燃比と、真の上流側空燃比と、の差が、理論空燃比を中心としてリーン側とリッチ側とで対称ではない状況が発生する。即ち、この場合にも上述した「空燃比検出誤差の非対称性」が発生する。この結果、メインフィードバック制御によって、一般に、機関の空燃比は理論空燃比よりもリッチ側に過補正される。従って、サブフィードバック量の学習値は、機関の空燃比を「よりリーン側に補正するための値」に向けて変化する。
【００１８】
このように、センサ出力値縮小異常が発生した場合にも、学習値はセンサ出力値縮小異常が発生する直前の値とは異なる値（収束値）に向けて変化する。従って、従来の制御装置によれば、センサ出力値縮小異常が発生した直後の時点から学習値が収束するまでに比較的長い時間を要し、その結果、エミッションが悪化するという問題がある。
【発明の開示】
【００１９】
本発明は上記課題に対処するためになされたものである。即ち、本発明の目的の一つは、上流側空燃比センサの出力値が正常値と乖離した場合において、サブフィードバック量の学習値を速やかに収束値に近づけ、以って、エミッションの悪化を回避することが可能な空燃比制御装置を提供することにある。
【００２０】
具体的に述べると、本発明による内燃機関の空燃比制御装置は、内燃機関の排気通路に配設された触媒（三元触媒）と、上流側空燃比センサと、下流側空燃比センサと、サブフィードバック量算出手段と、学習手段（サブフィードバック量学習手段、サブフィードバック量学習値更新手段）と、空燃比制御手段と、第１異常判定手段と、学習値設定手段と、を備える。
【００２１】
上流側空燃比センサは、前記排気通路であって前記触媒よりも上流側の部位に配設される。上流側空燃比センサは、それが配設された部位を流れるガスの空燃比に応じた出力値を出力するようになっている。
【００２２】
下流側空燃比センサは、前記排気通路であって前記触媒よりも下流側の部位に配設される。下流側空燃比センサは、それが配設された部位を流れるガスの空燃比に応じた出力値を出力するようになっている。
【００２３】
サブフィードバック量算出手段は、前記下流側空燃比センサの出力値を下流側目標値に一致させるためのサブフィードバック量を、例えば、比例積分制御又は比例積分微分制御によって算出するようになっている。下流側目標値は、一般に、理論空燃比に対応した値に設定される。即ち、下流側目標値は、下流側空燃比センサに理論空燃比のガスが到達している場合における下流側空燃比センサの出力値に設定される。サブフィードバック量は、後述するように、機関に供給される混合気の空燃比（機関の空燃比）をフィードバック制御するために使用される。
【００２４】
学習手段は、前記サブフィードバック量に含まれる定常成分（例えば、比例積分制御における積分項又は比例積分微分制御における積分項）に応じた値に基づいて学習値を更新する学習を行うようになっている。学習手段は、サブフィードバック量を「更新した学習値」に応じて補正するようになっている。即ち、学習手段は、学習値を更新する毎に、その学習値の更新分に応じてサブフィードバック量を修正する。これにより、サブフィードバック量と学習値との二重補正を回避する。
【００２５】
空燃比制御手段は、前記上流側空燃比センサの出力値と、前記補正されたサブフィードバック量と、前記更新された学習値と、に基づき、「機関に供給される混合気の空燃比」を理論空燃比に一致させる「空燃比フィードバック制御」を実行するようになっている。
【００２６】
第１異常判定手段は、「第１異常状態」が発生したか否かを判定するようになっている。この第１異常状態の例は、上述したセンサ出力値拡大異常及びセンサ出力値縮小異常等である。即ち、第１異常状態は、「上流側空燃比センサの実際の出力値である実出力値」が「上流側空燃比センサが正常であるときの上流側空燃比センサの出力値、即ち、正常値」と相違する状態である。
【００２７】
学習値設定手段は、上流側空燃比センサに「所定のガスが到達している時点」である「所定ガス到達時」における前記上流側空燃比センサの出力値と、前記学習値の収束値である収束予想値と、の関係、を予め記憶している。所定ガス到達時における上流側空燃比センサの出力値は、上流側空燃比センサに発生している第１異常状態（センサ出力値拡大異常又はセンサ出力値縮小異常）の程度を表す。従って、所定ガス到達時における上流側空燃比センサの出力値と、そのような第１異常状態が発生している場合の学習値の収束値と、の関係は一義的に定まり、予め実験により取得しておくことができる。
【００２８】
学習値設定手段は、更に、前記第１異常状態が発生したと判定されたとき「所定ガス到達時における前記実出力値」と「前記関係」とに基づいて「前記学習値の実際の収束値である収束予想値」を取得し、且つ、前記学習値を同取得した実際の収束予想値に設定（置換）するようになっている。
【００２９】
これによれば、「上流側空燃比センサの実際の出力値である実出力値が、上流側空燃比センサが正常であるときの上流側空燃比センサの出力値（正常値）と相違する第１異常状態が発生したとき、学習値は予想される収束値（収束予想値）に直ちに変更させられる。従って、学習値は、第１異常状態が発生した直後において適正値に近い値となる。これにより、本発明の空燃比制御装置は、第１異常状態発生時点から学習値が収束する時点までの時間を短くすることができる。その結果、「学習値が適正値と乖離していることに起因するエミッションの悪化」を回避することができる。
【００３０】
この場合、前記学習値設定手段は、
第２異常状態が発生していると判定される場合には第１異常状態が発生したと判定された場合であっても「前記学習値の、前記取得された実際の収束予想値（第１異常状態発生時における学習値の収束予想値）への設定」を実行しないように構成されることが好適である。この第２異常状態は、「第１異常状態以外の異常状態」であって、且つ、「学習値の収束値が第２異常状態の発生前後において相違するような異常状態」である。
【００３１】
例えば、複数の気筒のうちの特定の気筒に対して設けられている燃料噴射弁が「指示される燃料量」よりも多量の燃料を噴射するというような異常状態（燃料噴射弁リッチずれ異常）が発生した場合、その特定気筒から排出されるＨＣ，ＣＯ及びＨ２は急激に増大する。その結果、上流側空燃比センサは、分子径の小さいＨ２の影響を受け、実際の空燃比の平均値よりもリッチ側の空燃比に相当する出力値を発生するようになる。この結果、その上流側空燃比センサの出力値に基くメインフィードバック制御により、機関の空燃比の中心は理論空燃比よりもリーン側に偏移する。従って、サブフィードバック量は燃料噴射弁リッチずれ異常が発生する直前に比べ「機関の空燃比をよりリッチ側に移行させる値」へと変化する。よって、サブフィードバック量の学習値も「機関の空燃比をよりリッチ側に移行させる値」へと収束する。
【００３２】
更に、例えば、失火が発生した場合（混合気が燃焼室において燃焼しなかった場合）、サブフィードバック量の学習値は、失火が発生する直前の学習値に比べ「機関の空燃比をよりリーン側へ移行する値」に収束することがある。
【００３３】
これらの「燃料噴射弁のリッチずれ異常（空燃比気筒間インバランス）」及び「失火」等は、上述した第２異常状態の代表例である。そして、このような第２異常状態が発生している場合に前記第１異常状態が発生すると、サブフィードバック量の学習値は、前記学習値設定手段が予想する「第１異常発生時（第１異常状態単独発生時）における収束予想値」とは異なる値に収束する。従って、このような場合、学習値を「第１異常発生時が単独で発生している場合に予想される収束予想値」に設定すると、学習値を実際の収束値から却って遠ざけてしまう虞がある。
【００３４】
これに対し、上記構成によれば、「第２異常状態が発生していると判定される場合には前記学習値の前記取得された実際の収束予想値への設定が実行されない」から、学習値が実際の収束値から却って乖離してしまう可能性を低減することができる。その結果、エミッションが却って悪化することを回避することができる。
【００３５】
一方、前記学習値設定手段は、
前記関係（即ち、前記所定ガス到達時における前記上流側空燃比センサの出力値と前記学習値の収束予想値との関係）を、「前記所定ガス到達時における前記上流側空燃比センサの出力値と、前記所定ガス到達時における前記正常値と、の差」と、「前記収束予想値と、前記上流側空燃比センサが正常である場合に予想される前記学習値の収束値である正常時収束予想値と、の差」と、の「関係」を示す「学習値差関係」として記憶しておくこともできる。
【００３６】
そして、前記学習値設定手段は、
前記第１異常状態が発生したと判定されたとき、前記所定ガス到達時における前記実出力値と前記所定ガス到達時における前記正常値との差と、前記学習値差関係と、に基づいて前記学習値の変化量を予想し、「同予想した変化量だけ現時点における前記学習値を変化させた値」を「前記実際の収束予想値」として取得するように構成されることが好適である。
【００３７】
これによれば、上流側空燃比センサが正常である場合の学習値の収束値と、第１異常状態が単独で発生したときの学習値の収束値、との差に基いて、第１異常状態発生直前の学習値が補正される。従って、上述したような第２異常状態が発生している場合に第１異常状態が発生したときにも、第１異常状態の発生に起因する学習値の変化量のみが学習値に反映されるので、学習値がより適正値（収束値）に近づく。その結果、エミッションをより良好にすることができる。
【発明を実施するための最良の形態】
【００３８】
＜第１実施形態＞
以下、本発明の第１実施形態に係る内燃機関の空燃比制御装置（以下、単に「第１制御装置」と称呼する。）について図面を参照しながら説明する。この第１制御装置は、機関に対して噴射・供給される燃料の量（燃料噴射量）を制御する燃料噴射量制御装置でもある。
【００３９】
（構成）
図１は、この第１制御装置が適用される内燃機関１０の概略構成を示している。機関１０は、４サイクル・火花点火式・多気筒（本例において４気筒）・ガソリン燃料機関である。機関１０は、本体部２０、吸気系統３０及び排気系統４０を備えている。
【００４０】
本体部２０は、シリンダブロック部とシリンダヘッド部とを備えている。本体部２０は、ピストン頂面、シリンダ壁面及びシリンダヘッド部の下面からなる複数（４個）の燃焼室（第１気筒＃１乃至第４気筒＃４）２１を備えている。
【００４１】
シリンダヘッド部には、各燃焼室（各気筒）２１に空気及び燃料からなる混合気を供給するための吸気ポート２２と、各燃焼室２１から排ガス（既燃ガス）を排出するための排気ポート２３と、が形成されている。吸気ポート２２は図示しない吸気弁により開閉され、排気ポート２３は図示しない排気弁により開閉されるようになっている。
【００４２】
シリンダヘッド部には複数（４個）の点火プラグ２４が固定されている。各点火プラグ２４は、その火花発生部が各燃焼室２１の中央部であってシリンダヘッド部の下面近傍位置に露呈するように配設されている。各点火プラグ２４は、点火信号に応答して火花発生部から点火用火花を発生するようになっている。更に、シリンダヘッド部には複数（４個）の燃料噴射弁（インジェクタ）２５が固定されている。燃料噴射弁２５は、各吸気ポート２２に一つずつ設けられている。燃料噴射弁２５は、噴射指示信号に応答し、その噴射指示信号に含まれる指示噴射量の燃料を対応する吸気ポート２２内に噴射するようになっている。
【００４３】
更に、シリンダヘッド部には、吸気弁制御装置２６が設けられている。この吸気弁制御装置２６は、インテークカムシャフト（図示せず）とインテークカム（図示せず）との相対回転角度（位相角度）を油圧により調整・制御する周知の構成を備えている。吸気弁制御装置２６は、指示信号（駆動信号）に基づいて作動し、吸気弁の開弁タイミング（吸気弁開弁タイミング）を変更することができるようになっている。
【００４４】
吸気系統３０は、インテークマニホールド３１、吸気管３２、エアフィルタ３３、スロットル弁３４及びスロットル弁アクチュエータ３４ａを備えている。
【００４５】
インテークマニホールド３１は、各吸気ポート２２に接続された複数の枝部と、それらの枝部が集合したサージタンク部と、を備えている。吸気管３２はサージタンク部に接続されている。インテークマニホールド３１、吸気管３２及び複数の吸気ポート２２は、吸気通路を構成している。エアフィルタ３３は吸気管３２の端部に設けられている。スロットル弁３４はエアフィルタ３３とインテークマニホールド３１との間の位置において吸気管３２に回動可能に取り付けられている。スロットル弁３４は、回動することにより吸気管３２が形成する吸気通路の開口断面積を変更するようになっている。スロットル弁アクチュエータ３４ａは、ＤＣモータからなり、指示信号（駆動信号）に応答してスロットル弁３４を回動させるようになっている。
【００４６】
排気系統４０は、エキゾーストマニホールド４１、エキゾーストパイプ（排気管）４２上流側触媒４３及び下流側触媒４４を備えている。
【００４７】
エキゾーストマニホールド４１は、各排気ポート２３に接続された複数の枝部４１ａと、それらの枝部４１ａが集合した集合部４１ｂと、からなっている。エキゾーストパイプ４２は、エキゾーストマニホールド４１の集合部４１ｂに接続されている。エキゾーストマニホールド４１、エキゾーストパイプ４２及び複数の排気ポート２３は、排ガスが通過する通路を構成している。なお、本明細書において、エキゾーストマニホールド４１の集合部４１ｂ及びエキゾーストパイプ４２を、便宜上、「排気通路」と称呼する。
【００４８】
上流側触媒４３は、セラミックからなる担持体に「触媒物質である貴金属」及び「セリア（CeO2)」を担持していて、酸素吸蔵・放出機能（酸素吸蔵機能）を有する三元触媒である。上流側触媒４３はエキゾーストパイプ４２に配設（介装）されている。上流側触媒４３は所定の活性温度に到達すると、「未燃物（ＨＣ、ＣＯ、Ｈ２等）と窒素酸化物（ＮＯｘ）とを同時に浄化する触媒機能」及び「酸素吸蔵機能」を発揮する。
【００４９】
下流側触媒４４は、上流側触媒４３と同様の三元触媒である。下流側触媒４４は、上流側触媒４３よりも下流においてエキゾーストパイプ４２に配設（介装）されている。
【００５０】
更に、この第１制御装置は、熱線式エアフローメータ５１、スロットルポジションセンサ５２、機関回転速度センサ５３、水温センサ５４、上流側空燃比センサ５５、下流側空燃比センサ５６及びアクセル開度センサ５７を備えている。
【００５１】
熱線式エアフローメータ５１は、吸気管３２内を流れる吸入空気の質量流量を検出し、その質量流量（機関１０の単位時間あたりの吸入空気量）Ｇａを表す信号を出力するようになっている。
スロットルポジションセンサ５２は、スロットル弁３４の開度を検出し、スロットル弁開度ＴＡを表す信号を出力するようになっている。
【００５２】
機関回転速度センサ５３は、インテークカムシャフトが５°回転する毎に幅狭のパルスを有するとともにインテークカムシャフトが３６０°回転する毎に幅広のパルスを有する信号を出力するようになっている。機関回転速度センサ５３から出力される信号は電気制御装置６０により機関回転速度ＮＥを表す信号に変換されるようになっている。更に、電気制御装置６０は、機関回転速度センサ５３及び図示しないクランク角センサからの信号に基いて、機関１０のクランク角度（絶対クランク角）を取得するようになっている。
【００５３】
水温センサ５４は、内燃機関１０の冷却水の温度を検出し、冷却水温ＴＨＷを表す信号を出力するようになっている。
【００５４】
上流側空燃比センサ５５は、エキゾーストマニホールド４１の集合部４１ｂと上流側触媒４３との間の位置においてエキゾーストマニホールド４１及びエキゾーストパイプ４２の何れか（即ち、排気通路）に配設されている。上流側空燃比センサ５５は、例えば、特開平１１−７２４７３号公報、特開２０００−６５７８２号公報及び特開２００４−６９５４７号公報等に開示された「拡散抵抗層を備える限界電流式広域空燃比センサ」である。
【００５５】
上流側空燃比センサ５５は、図２に示したように、上流側空燃比センサ５５の排気側電極及び大気側電極の間に印加される電圧Ｖが一定電圧Ｖｐ以上となると、上流側空燃比abyfsに応じた出力値Vabyfs（限界電流値Ｉｐに応じた値）を出力するようになっている。換言すると、上流側空燃比センサ５５は、図３の実線ＣＴにより示したように、「排気通路であって上流側空燃比センサ５５が配設されている部位を流れる排ガスの空燃比（即ち、上流側空燃比abyfs）」に応じた「出力値Vabyfs」を発生するようになっている。なお、上流側空燃比abyfsは、上流側触媒４３に流入するガスの空燃比であり、機関１０に供給される混合気の空燃比であると言うことができる。
【００５６】
上流側空燃比センサ５５の出力値Vabyfsは、上流側空燃比abyfsの空燃比が大きくなる（リーン側の空燃比になる）ほど増大する。出力値Vabyfsは、上流側空燃比abyfsが理論空燃比であるときに値Vstoichに一致する。
【００５７】
後述する電気制御装置６０は、図３の実線ＣＴにより示したデータを「ルックアップテーブル（マップ）Mapabyfs（Vabyfs）」の形式により記憶していて、そのテーブルMapabyfsに実際の出力値Vabyfsを適用することによって「実際の上流側空燃比abyfs」を取得するようになっている。
【００５８】
再び、図１を参照すると、下流側空燃比センサ５６は、上流側触媒４３と下流側触媒４４との間の位置においてエキゾーストパイプ４２（即ち、排気通路）に配設されている。下流側空燃比センサ５６は、周知の濃淡電池型の酸素濃度センサ（Ｏ２センサ）である。下流側空燃比センサ５６は、「排気通路であって下流側空燃比センサ５６が配設されている部位を流れる排ガスの空燃比（即ち、下流側空燃比afdown）」に応じた出力値Voxsを出力するようになっている。下流側空燃比afdownは、上流側触媒４３から流出するガスの空燃比である。上流側触媒４３から流出するガスの空燃比は、周知のように、機関１０に供給される混合気の空燃比の平均値を精度良く表す。
【００５９】
下流側空燃比センサ５６の出力値Voxsは、図４に示したように、下流側空燃比afdownが理論空燃比よりもリッチのとき最大出力値max（例えば、約０．９Ｖ）となり、下流側空燃比afdownが理論空燃比よりもリーンのとき最小出力値min（例えば、約０．１Ｖ）となる。更に、出力値Voxsは、下流側空燃比afdownが理論空燃比であるとき「最大出力値maxと最小出力値minの略中間の電圧Vst（中間電圧Vst、例えば、約０．５Ｖ）」となる。また、この出力値Voxsは、下流側空燃比afdownが理論空燃比よりもリッチな空燃比からリーンな空燃比へと変化する際に最大出力値maxから最小出力値minへと急変し、下流側空燃比afdownが理論空燃比よりもリーンな空燃比からリッチな空燃比へと変化する際に最小出力値minから最大出力値maxへと急変する。
【００６０】
再び図１を参照すると、アクセル開度センサ５７は、運転者によって操作されるアクセルペダルＡＰの操作量を検出し、アクセルペダルＡＰの操作量Ａｃｃｐを表す信号を出力するようになっている。
【００６１】
電気制御装置６０は、「ＣＰＵ、ＲＯＭ、ＲＡＭ、電源が投入された状態でデータを格納するとともに格納したデータを電源が遮断されている間も保持するバックアップＲＡＭ、並びに、ＡＤコンバータを含むインターフェース等」からなる「周知のマイクロコンピュータ」である。
【００６２】
電気制御装置６０のインターフェースは、前記センサ５１〜５７と接続され、ＣＰＵにセンサ５１〜５７からの信号を供給するようになっている。更に、そのインターフェースは、ＣＰＵの指示に応じて、各気筒の点火プラグ２４、各気筒の燃料噴射弁２５、吸気弁制御装置２６及びスロットル弁アクチュエータ３４ａ等に指示信号（駆動信号）等を送出するようになっている。なお、電気制御装置６０は、取得されたアクセルペダルの操作量Accpが大きくなるほどスロットル弁開度ＴＡが大きくなるように、スロットル弁アクチュエータ３４ａに指示信号を送出するようになっている。
【００６３】
（第１制御装置の作動の概要）
次に、上記第１制御装置の作動の概要について説明する。第１制御装置は、後に詳述するように、下流側空燃比センサ５６の出力値Voxsを「理論空燃比に相当する下流側目標値Voxsref」に一致させるためのサブフィードバック量Vafsfbを、比例積分制御（ＰＩ制御）又は比例積分微分制御（ＰＩＤ制御）に従って算出する。更に、第１制御装置は、「サブフィードバック量Vafsfbに含まれる定常成分（積分項）に応じた値」に基づいてサブフィードバック量の学習値Vafsfbg（以下、「サブＦＢ学習値Vafsfbg」とも称呼する。）を所定のタイミングにて更新する。このとき、サブＦＢ学習値Vafsfbgが変化量ΔＧだけ増大したとすると、第１制御装置は、サブフィードバック量Vafsfbを変化量ΔＧだけ減少させる。
【００６４】
加えて、第１制御装置は、上流側空燃比センサ５５の出力値Vabyfsと、サブフィードバック量Vafsfbと、学習値Vafsfbgと、テーブルMapabyfsとに基いて、制御用空燃比abyfscを算出する。そして、第１制御装置は、その制御用空燃比abyfscを「理論空燃比である上流側空燃比abyfs」に一致させるためのメインフィードバック量を算出し、その算出したメインフィードバック量に基づき機関の空燃比（燃料噴射量）を制御する。
【００６５】
ところで、いま、上述した「センサ出力値拡大異常」が発生したと仮定する。このとき、真の上流側空燃比abyfsが理論空燃比よりもリーン側の空燃比であると、図３の破線ＣＬにより示したように、上流側空燃比センサの出力値Vabyfsは実線ＣＴにより示した「上流側空燃比センサ５５が正常である場合の出力値（正常値）Vabyfs」よりも大きくなる。更に、真の上流側空燃比abyfsが理論空燃比よりもリッチ側の空燃比であると、図３の破線ＣＬにより示したように、上流側空燃比センサの出力値Vabyfsは実線ＣＴにより示した正常値Vabyfsよりも小さくなる。
【００６６】
更に、前述したように、「上流側空燃比センサ５５のセンサ出力値拡大異常」が発生した場合、上流側空燃比センサの実際の出力値VabyfsとテーブルMapabyfsとにより取得される上流側空燃比と、真の上流側空燃比と、の差が、理論空燃比を中心としてリーン側とリッチ側とで対称ではない状況（空燃比検出誤差の非対称性）が発生する。
【００６７】
即ち、いま、図３に示した空燃比Ａ２が理論空燃比に対して正の値dAFだけ小さい空燃比であり、図３に示した空燃比Ａ４が理論空燃比に対して正の値dAFだけ大きい空燃比であると仮定する。上流側空燃比センサ５５に出力値拡大異常が発生していると、真の空燃比がＡ２であるとき、出力値VabyfsはＶ１となる。従って、検出上流側空燃比はＡ１となる。また、上流側空燃比センサ５５に出力値拡大異常が発生していると、真の空燃比がＡ４であるとき、出力値VabyfsはＶ２となる。従って、検出上流側空燃比はＡ３となる。
【００６８】
このとき、図３から明らかなように、検出上流側空燃比Ａ１と真の空燃比Ａ２との差の大きさ（｜Ａ２−Ａ１｜）は、検出上流側空燃比Ａ３と真の空燃比Ａ４との差の大きさ（｜Ａ３−Ａ４｜）よりも大きくなる。この結果、メインフィードバック制御によって、機関の空燃比は理論空燃比よりもリーン側に過補正される。従って、サブフィードバック量Vafsfbは「機関の空燃比をよりリッチ側に補正するための値」へと変化し、その結果、サブＦＢ学習値Vafsfbgも「機関の空燃比をよりリッチ側に補正するための値」へと変化する（収束する。）。
【００６９】
図５は、時刻ｔ１〜ｔ２の期間においてフューエルカット制御が実行されるととともに、そのフューエルカット制御中に「上流側空燃比センサ５５のセンサ出力値拡大異常」が発生した状況における「サブＦＢ学習値Vafsfbgの変化」を示すタイムチャートである。図５に示した状況において、サブＦＢ学習値Vafsfbgの収束値はフューエルカット制御の前後において値Vafsfbg0から値VafsfbgLへと変化する。なお、一般に、フューエルカット制御中においてサブフィードバック制御は停止される。
【００７０】
この場合、従来の制御装置によれば、フューエルカット終了時（時刻ｔ２）からサブフィードバック制御が再開され、サブフィードバック量Vafsfbは機関の空燃比をリッチ側に変更する値へと除々に変化する。その結果、サブＦＢ学習値Vafsfbgは「フューエルカット開始直前の値Vafsfbg0」から「収束値VafsfbgL」へと除々に変化し、時刻ｔ２から時間Ｔが経過した後の時刻ｔ３にて収束値VafsfbgLに到達する。換言すると、サブＦＢ学習値Vafsfbgは、時刻ｔ２から時刻ｔ３までの間、適正値（収束値）とは大きく相違する。また、フィードバック制御は不可避的な制御遅れを伴うので、サブフィードバック量Vafsfbが「かかるサブＦＢ学習値Vafsfbgの適正値からの乖離」を直ちに補償する値とはならない。この結果、機関の空燃比が理論空燃比から乖離し、エミッションが悪化する場合が生じる。
【００７１】
これに対し、第１制御装置は、時刻ｔ１から時刻ｔ２までの期間（フューエルカット制御中）に「上流側空燃比センサ５５のセンサ出力値拡大異常」が発生したか否かを判定する。そして、第１制御装置は、「上流側空燃比センサ５５のセンサ出力値拡大異常」が発生したと判定したとき、時刻ｔ１から時刻ｔ２の間（遅くとも、時刻ｔ２）においてサブＦＢ学習値Vafsfbgの値を「上流側空燃比センサ５５のセンサ出力値拡大異常の発生時に予想される収束値VafsfbgL」に直ちに設定する。この結果、センサ出力値拡大異常が発生した後にエミッションが大きく悪化することを排除することができる。
【００７２】
なお、第１制御装置は、実際には、フューエルカット制御中において「上流側空燃比センサ５５のセンサ出力値拡大異常」及び「上流側空燃比センサ５５のセンサ出力値縮小異常」の両者の何れかが発生したか否かを判定する。換言すると、第１制御装置は、フューエルカット制御中において、「上流側空燃比センサ５５の実際の出力値Vabyfsである実出力値」が「上流側空燃比センサ５５が正常であるときの上流側空燃比センサの出力値Vabyfsである正常値」と相違する「第１異常状態が発生したか否か」を判定する第１異常判定手段を備える。そして、第１制御装置は、第１異常状態が発生したと判定すると、サブＦＢ学習値Vafsfbgを、「第１異常状態発生時に予想されるサブＦＢ学習値Vafsfbgの収束値（収束予想値）VafsfbgL」に直ちに設定する。以上が、第１制御装置の作動の概要である。
【００７３】
（実際の作動）
次に、第１制御装置の実際の作動について説明する。
【００７４】
＜燃料噴射量制御＞
第１制御装置のＣＰＵは、図６に示した「燃料噴射量Ｆｉの計算及び燃料噴射の指示を行うルーチン」を、所定の気筒のクランク角が吸気上死点前の所定クランク角度（例えば、ＢＴＤＣ９０°ＣＡ）となる毎に、その気筒（以下、「燃料噴射気筒」とも称呼する。）に対して繰り返し実行するようになっている。従って、所定のタイミングになると、ＣＰＵはステップ６００から処理を開始し、ステップ６１０にてフューエルカットフラグＸＣＦ（以下、「Ｆ／ＣフラグＸＦＣ」と表記する。）の値が「０」であるか否かを判定する。
【００７５】
Ｆ／ＣフラグＸＦＣの値は、後述するフューエルカット開始条件が成立してからフューエルカット復帰条件が成立するまで「１」に設定され、それ以外の場合に「０」に設定される。即ち、Ｆ／ＣフラグＸＦＣの値は、フューエルカット制御を実行すべきときに「１」に設定される。なお、Ｆ／ＣフラグＸＦＣの値は、「機関１０が搭載された図示しない車両のイグニッション・キー・スイッチ」がオフ位置からオン位置に切り換えられた際に実行されるイニシャルルーチンにより「０」に設定されるようになっている。
【００７６】
いま、図５に示した時刻ｔ１以前であり、Ｆ／ＣフラグＸＦＣの値が「０」であると仮定する。この場合、ＣＰＵは、以下に述べるステップ６２０乃至ステップ６５０の処理を順に行い、ステップ６９５に進んで本ルーチンを一旦終了する。
【００７７】
ステップ６２０：ＣＰＵは、「エアフローメータ５１により計測された吸入空気量Ｇａ、機関回転速度センサ５３の信号に基いて取得された機関回転速度ＮＥ、及び、ルックアップテーブルMapMc」に基いて「燃料噴射気筒に吸入される空気量」である「筒内吸入空気量Ｍｃ（ｋ）」を取得する。筒内吸入空気量Ｍｃ（ｋ）は、各吸気行程に対応されながらＲＡＭ内に記憶される。筒内吸入空気量Ｍｃ（ｋ）は、周知の空気モデル（吸気通路における空気の挙動を模した物理法則に従って構築されたモデル）により算出されてもよい。
【００７８】
ステップ６３０：ＣＰＵは、筒内吸入空気量Ｍｃ（ｋ）を上流側目標空燃比abyfrで除することにより基本燃料噴射量Ｆｂａｓｅを求める。上流側目標空燃比abyfrは理論空燃比stoichに設定されている。
【００７９】
ステップ６４０：ＣＰＵは、基本燃料噴射量Ｆｂａｓｅをメインフィードバック量ＤＦｉにより補正する。より具体的には、ＣＰＵは、基本燃料噴射量Ｆｂａｓｅにメインフィードバック量ＤＦｉを加えることにより、最終燃料噴射量Ｆｉを算出する。メインフィードバック量ＤＦｉについては後述する。
ステップ６５０：ＣＰＵは、最終燃料噴射量Ｆｉの燃料を燃料噴射気筒に対応して設けられている燃料噴射弁２５から噴射する。
【００８０】
＜メインフィードバック量の算出＞
ＣＰＵは図７にフローチャートにより示した「メインフィードバック量算出ルーチン」を所定時間の経過毎に繰り返し実行している。従って、所定のタイミングになると、ＣＰＵはステップ７００から処理を開始し、ステップ７０５に進んで「メインフィードバック制御条件（上流側空燃比フィードバック制御条件）」が成立しているか否かを判定する。
【００８１】
メインフィードバック制御条件は以下の総ての条件が成立したときに成立する。
（Ａ１）上流側空燃比センサ５５が活性化している。
（Ａ２）機関の負荷（負荷率）ＫＬが閾値ＫＬｔｈ以下である。
（Ａ３）フューエルカット制御中でない（Ｆ／ＣフラグＸＦＣの値が「１」でない。）。
【００８２】
なお、負荷率ＫＬは、ここでは下記の（１）式により求められる。この負荷率ＫＬに代え、アクセルペダル操作量Ａｃｃｐが用いられても良い。（１）式において、Ｍｃは筒内吸入空気量であり、ρは空気密度（単位は（ｇ／ｌ））、Ｌは機関１０の排気量（単位は（ｌ））、「４」は機関１０の気筒数である。
ＫＬ＝（Ｍｃ／（ρ・Ｌ／４））・１００％  …（１）
【００８３】
いま、メインフィードバック制御条件が成立しているものとして説明を続ける。この場合、ＣＰＵはステップ７０５にて「Ｙｅｓ」と判定して以下に述べるステップ７１０乃至ステップ７４０の処理を順に行い、ステップ７９５に進んで本ルーチンを一旦終了する。
【００８４】
ステップ７１０：ＣＰＵは、下記（２）式に従ってフィードバック制御用出力値Vabyfcを取得する。（２）式において、Vabyfsは上流側空燃比センサ５５の出力値、Vafsfbは下流側空燃比センサ５６の出力値Voxsに基づいて算出されるサブフィードバック量、Vafsfbgはサブフィードバック量の学習値（サブＦＢ学習値Vafsfbg）である。これらの値は、何れも現時点において得られている値である。サブフィードバック量Vafsfb及びサブＦＢ学習値Vafsfbgの算出方法については、後述する。
Vabyfc＝Vabyfs＋（Vafsfb＋Vafsfbg）    …（２）
【００８５】
ステップ７１５：ＣＰＵは、下記（３）式に示したように、上記フィードバック制御用出力値Vabyfcを図３の実線ＣＴにより示したテーブルMapabyfsに適用することにより、フィードバック制御用空燃比abyfscを得る。
abyfsc＝Mapabyfs（Vabyfc）    …（３）
【００８６】
ステップ７２０：ＣＰＵは、下記（４）式に従って、「現時点よりもＮサイクル前の時点において燃焼室２１に実際に供給された燃料の量」である「筒内燃料供給量Ｆｃ（ｋ−Ｎ）」を求める。即ち、ＣＰＵは、「現時点よりもＮサイクル（即ち、Ｎ・７２０°クランク角）前の時点における筒内吸入空気量Ｍｃ（ｋ−Ｎ）」を「上記フィードバック制御用空燃比abyfsc」により除すことにより、筒内燃料供給量Ｆｃ（ｋ−Ｎ）を求める。
Ｆｃ（ｋ−Ｎ）＝Ｍｃ（ｋ−Ｎ）／abyfsc    …（４）
【００８７】
このように、筒内燃料供給量Ｆｃ（ｋ−Ｎ）を求めるために、現時点からＮストローク前の筒内吸入空気量Ｍｃ（ｋ−Ｎ）をフィードバック制御用空燃比abyfscで除すのは、「燃焼室２１内での混合気の燃焼により生成された排ガス」が上流側空燃比センサ５５に到達するまでに「Ｎストロークに相当する時間」を要しているからである。
【００８８】
ステップ７２５：ＣＰＵは、下記（５）式に従って、「現時点よりもＮサイクル前の時点において燃焼室２１に供給されるべきであった燃料の量」である「目標筒内燃料供給量Ｆｃｒ（ｋ−Ｎ）」を求める。即ち、ＣＰＵは、現時点からＮストローク前の筒内吸入空気量Ｍｃ（ｋ−Ｎ）を上流側目標空燃比abyfr（＝stoich）で除すことにより、目標筒内燃料供給量Ｆｃｒ（ｋ−Ｎ）を求める。
Ｆｃｒ＝Ｍｃ（ｋ−Ｎ）／abyfr    …（５）
【００８９】
ステップ７３０：ＣＰＵは、上記（６）式に従って、筒内燃料供給量偏差ＤＦｃを取得する。即ち、ＣＰＵは、目標筒内燃料供給量Ｆｃｒ（ｋ−Ｎ）から筒内燃料供給量Ｆｃ（ｋ−Ｎ）を減じることにより、筒内燃料供給量偏差ＤＦｃを求める。この筒内燃料供給量偏差ＤＦｃは、Ｎストローク前の時点で筒内に供給された燃料の過不足分を表す量となる。
ＤＦｃ＝Ｆｃｒ（ｋ−Ｎ）−Ｆｃ（ｋ−Ｎ）    …（６）
【００９０】
ステップ７３５：ＣＰＵは、上記（７）式に従って、メインフィードバック量ＤＦｉを求める。この（７）式において、Ｇｐは予め設定された比例ゲイン、Ｇｉは予め設定された積分ゲインである。更に、（７）式の「値ＳＤＦｃ」は「筒内燃料供給量偏差ＤＦｃの積分値」である。つまり、ＣＰＵは、フィードバック制御用空燃比abyfscを上流側目標空燃比abyfrに一致させるための比例積分制御により「メインフィードバック量ＤＦｉ」を算出する。
ＤＦｉ＝Ｇｐ・ＤＦｃ＋Ｇｉ・ＳＤＦｃ    …（７）
【００９１】
ステップ７４０：ＣＰＵは、その時点における筒内燃料供給量偏差ＤＦｃの積分値ＳＤＦｃに上記ステップ７３０にて求められた筒内燃料供給量偏差ＤＦｃを加えることにより、新たな筒内燃料供給量偏差の積分値ＳＤＦｃを取得する。
【００９２】
以上により、メインフィードバック量ＤＦｉが比例積分制御により求められ、このメインフィードバック量ＤＦｉが前述した図６のステップ６４０の処理により最終燃料噴射量Ｆｉに反映される。
【００９３】
ところで、上記（２）式の右辺の「サブフィードバック量Vafsfb及びサブＦＢ学習値Vafsfbg」は、後述するように、「下流側空燃比センサ５６の出力値Voxs」を「理論空燃比に相当する値である下流側目標値Voxsref」に一致させるための「補助的な補正量」と考えることができる。従って、フィードバック制御用空燃比abyfscは上流側空燃比センサ５５の出力値Vabyfsに実質的に基づく値であるから、メインフィードバック量ＤＦｉは「上流側空燃比センサ５５の出力値Vabyfsにより表される機関の空燃比」を「上流側目標空燃比abyfr（理論空燃比）」に一致させるための補正量であると言うことができる。
【００９４】
一方、図７のステップ７０５の判定時において、メインフィードバック制御条件が不成立であると、ＣＰＵはそのステップ７０５にて「Ｎｏ」と判定してステップ７４５に進み、メインフィードバック量ＤＦｉの値を「０」に設定する。次いで、ＣＰＵは、ステップ７５０にて筒内燃料供給量偏差の積分値ＳＤＦｃに「０」を格納する。その後、ＣＰＵは、ステップ７９５に進んで本ルーチンを一旦終了する。このように、メインフィードバック制御条件が不成立であるとき、メインフィードバック量ＤＦｉは「０」に設定される。従って、基本燃料噴射量Ｆｂａｓｅのメインフィードバック量ＤＦｉによる補正は行わない。
【００９５】
＜サブフィードバック量及びサブＦＢ学習値の算出＞
ＣＰＵは、「サブフィードバック量Vafsfb」及び「サブＦＢ学習値Vafsfbg」を算出するために、図８示したルーチンを所定時間の経過毎に実行している。従って、所定のタイミングになると、ＣＰＵはステップ８００から処理を開始し、ステップ８０５に進んで「サブフィードバック制御条件（下流側空燃比フィードバック制御条件）」が成立しているか否かを判定する。
【００９６】
サブフィードバック制御条件は以下の総ての条件が成立したときに成立する。
（Ｂ１）メインフィードバック制御条件が成立している。
（Ｂ２）下流側空燃比センサ５６が活性化している。
（Ｂ３）上流側目標空燃比abyfrが理論空燃比stoichに設定されている。
【００９７】
いま、サブフィードバック制御条件が成立していると仮定して説明を続ける。この場合、ＣＰＵはステップ８０５にて「Ｙｅｓ」と判定し、以下に述べるステップ８１０乃至ステップ８２０の処理を順に行い、サブフィードバック量Vafsfbを算出する。
【００９８】
ステップ８１０：ＣＰＵは、下記（８）式に従って、「下流側目標値Voxsref」と「下流側空燃比センサ５６の出力値Voxs」との差である「出力偏差量DVoxs」を取得する。下流側目標値Voxsrefは理論空燃比に相当する値Vst（０．５Ｖ）に設定されている。即ち、ＣＰＵは、「下流側目標値Voxsref」から「現時点の下流側空燃比センサ５６の出力値Voxs」を減じることにより「出力偏差量DVoxs」を求める。なお、下流側目標値Voxsrefは値Vstよりも「僅かにリッチ側の空燃比に対応した値」に設定されてもよい。但し、この値も「上流側触媒４３の所謂ウインドウ」の範囲内の空燃比に対応した値であるので、実質的に理論空燃比に相当した値である。
DVoxs＝Voxsref−Voxs    …（８）
【００９９】
ステップ８１５：ＣＰＵは、下記（９）式に従って、サブフィードバック量Vafsfbを求める。この（９）式において、Kpは予め設定された比例ゲイン（比例定数）、Kiは予め設定された積分ゲイン（積分定数）である。また、SDVoxsは、出力偏差量DVoxsの積分値である。
Vafsfb＝Kp・DVoxs＋Ki・SDVoxs    …（９）
【０１００】
ステップ８２０：ＣＰＵは、「その時点における出力偏差量の積分値SDVoxs」に「上記ステップ８１０にて求めた出力偏差量DVoxs」を加えることにより、新たな出力偏差量の積分値SDVoxsを求める。
【０１０１】
このように、ＣＰＵは、下流側空燃比センサ５６の出力値Voxsを下流側目標値Voxsrefに一致させるための比例積分制御により「サブフィードバック量Vafsfb」を算出する。このサブフィードバック量Vafsfbは、上述した（２）式に示したように、フィードバック制御用出力値Vabyfcを算出するために使用される。なお、ＣＰＵは上記（９）式の右辺に微分項Kd・DDVoxを加えることにより、ＰＩＤ（比例積分微分制御）によりサブＦＢ学習値Vafsfbgを算出してもよい。この場合、Kdは予め設定された微分ゲイン（定数）である。また、DDVoxsは、出力偏差量DVoxsの微分値（時間微分値）である。
【０１０２】
次いで、ＣＰＵは、以下に述べるステップ８２５乃至ステップ８４０の処理を順に行うことにより「サブＦＢ学習値Vafsfbg」を算出するとともに「サブフィードバック量Vafsfb」を補正し、その後、ステップ８９５に進んで本ルーチンを一旦終了する。
【０１０３】
ステップ８２５：ＣＰＵは、その時点のサブＦＢ学習値Vafsfbgを更新前学習値Vafsfbgbfとして格納する。
【０１０４】
ステップ８３０：ＣＰＵは、下記（１０）式に従ってサブＦＢ学習値Vafsfbgを更新する。この（１０）式の左辺Vafsfbg（ｋ＋１）は更新後のサブＦＢ学習値Vafsfbgを表し、右辺のVafsfbg（ｋ）は更新前のサブＦＢ学習値Vafsfbgを表す。値αは０より大きく且つ１より小さい任意の値である。
Vafsfbg（ｋ＋１）＝α・Vafsfbg  ＋（１−α）・Ki・SDVoxs    …（１０）
【０１０５】
（１０）式から明らかなように、サブＦＢ学習値Vafsfbgは「サブフィードバック量Vafsfbの積分項Ki・SDVoxs」に「ノイズ除去のためのフィルタ処理」を施した値である。換言すると、サブＦＢ学習値Vafsfbgは、サブフィードバック量Vafsfbの定常成分（積分項）に応じた値である。サブＦＢ学習値VafsfbgはバックアップＲＡＭに格納される。
【０１０６】
ステップ８３５：ＣＰＵは、下記（１１）式に従ってサブＦＢ学習値Vafsfbgの変更量（更新量）ΔＧを算出する。
ΔＧ＝Vafsfbg−Vafsfbgbf    …（１１）
【０１０７】
ステップ８４０：ＣＰＵは、下記（１２）式に従ってサブフィードバック量Vafsfbを変更量ΔＧにより補正する。（１２）式において、Vafsfb（ｋ＋１）は補正後のサブフィードバック量Vafsfbであり、Vafsfbg（ｋ）は補正前のサブフィードバック量Vafsfbである。
Vafsfb（ｋ＋１）＝Vafsfb（ｋ）−ΔＧ          …（１２）
【０１０８】
このステップ８３５及びステップ８４０の処理について説明する。上記（２）式に示したように、ＣＰＵは、「サブフィードバック量Vafsfb及びサブＦＢ学習値Vafsfbg」を「上流側空燃比センサ５５の出力値Vabyfs」に加えることにより、フィードバック制御用出力値Vabyfcを得る。サブＦＢ学習値Vafsfbgはサブフィードバック量Vafsfbの積分項Ki・SDVoxs（定常成分）の一部を取り込んだ値である。従って、サブＦＢ学習値Vafsfbgを更新した場合、サブフィードバック量Vafsfbをその更新分に応じて補正しないと、「更新後のサブＦＢ学習値Vafsfbg及び更新後のサブフィードバック量Vafsfb」により二重の補正が行われる。従って、ＣＰＵは、サブＦＢ学習値Vafsfbgを更新した場合、サブフィードバック量Vafsfbを「サブＦＢ学習値Vafsfbgの更新分ΔＧ」に応じて補正する必要がある。
【０１０９】
そこで、ＣＰＵは上記（１１）及び上記（１２）式に示したように、サブＦＢ学習値Vafsfbgを変更量ΔＧだけ増加するように更新したとき、サブフィードバック量Vafsfbを変更量ΔＧだけ減少させる。（１１）式において、Vafsfbgbfは更新直前のサブＦＢ学習値Vafsfbgであり、Vafsfbgは更新直後のサブＦＢ学習値Vafsfbgである。従って、変更量ΔＧは正の値及び負の値の何れともなる。
【０１１０】
以上の処理により、所定時間の経過毎にサブフィードバック量VafsfbとサブＦＢ学習値Vafsfbgとが更新される。
【０１１１】
一方、サブフィードバック制御条件が成立していない場合、ＣＰＵは図８のステップ８０５にて「Ｎｏ」と判定し、以下に述べるステップ８４５及びステップ８５０の処理を順に行い、ステップ８９５に進んで本ルーチンを一旦終了する。
ステップ８４５：ＣＰＵはサブフィードバック量Vafsfbの値を「０」に設定する。
ステップ８５０：ＣＰＵは出力偏差量の積分値SDVoxsの値を「０」に設定する。
【０１１２】
これにより、上記（２）式から明らかなように、フィードバック制御用出力値Vabyfcは、上流側空燃比センサ５５の出力値VabyfsとサブＦＢ学習値Vafsfbgとの和となる。即ち、この場合、「サブフィードバック量Vafsfbの更新」及び「サブフィードバック量Vafsfbの最終燃料噴射量Ｆｉへの反映」は停止される。但し、少なくとも、「サブフィードバック量Vafsfbの積分項」に対応する「サブＦＢ学習値Vafsfbg」は最終燃料噴射量Ｆｉに反映される。
【０１１３】
＜フューエルカット制御＞
ＣＰＵは、フューエルカット制御を実行するために、図９示したフューエルカット制御ルーチンを所定時間の経過毎に実行している。従って、所定のタイミングになると、ＣＰＵはステップ９００から処理を開始し、ステップ９１０に進んでＦ／ＣフラグＸＦＣの値が「１」であるか否かを判定する。
【０１１４】
いま、Ｆ／ＣフラグＸＦＣの値が「０」である（即ち、フューエルカット制御が実行されていない）と仮定する。この場合、ＣＰＵはステップ９１０にて「Ｎｏ」と判定してステップ９２０に進み、フューエルカット開始条件が成立しているか否かを判定する。フューエルカット開始条件は、以下に述べる条件１及び条件２の双方が成立したときにのみ成立する。
（条件１）スロットル弁３４の開度ＴＡが「ゼロ（又は所定開度ＴＡｔｈ以下）」であること。
（条件２）機関回転速度ＮＥが「フューエルカット開始回転速度NEfcth以上」であること。
【０１１５】
このとき、フューエルカット開始条件が成立していなければ、ＣＰＵはステップ９２０にて「Ｎｏ」と判定し、ステップ９９５に直接進んで本ルーチンを一旦終了する。よって、Ｆ／ＣフラグＸＦＣの値は「０」に維持される。
【０１１６】
これに対し、フューエルカット開始条件が成立していると、ＣＰＵはステップ９２０にて「Ｙｅｓ」と判定し、ステップ９３０に進んでＦ／ＣフラグＸＦＣの値を「１」に設定する。これにより、ＣＰＵは図６のステップ６１０にて「Ｎｏ」と判定し、ステップ６９５に直接進むようになる。この結果、ステップ６５０が実行されないので、燃料噴射が停止される（フューエルカット制御が実行される。）。
【０１１７】
再び、図９を参照すると、ＣＰＵはステップ９３０に続くステップ９４０に進み、第１異常状態判定実施フラグＸＩＬ（以下、「判定実施フラグＸＩＬ」と表記する。）の値を「１」に設定する。この判定実施フラグＸＩＬの値が「１」に設定されると、「上流側空燃比センサ５５の出力値Vabyfsが正常値から乖離している第１異常状態」が発生しているか否かの判定が実行される（後述する図１０を参照。）。その後、ＣＰＵはステップ９９５に進み、本ルーチンを一旦終了する。
【０１１８】
このようにＦ／ＣフラグＸＦＣの値が「１」に設定された後、ＣＰＵが図９に示したルーチンの処理を再び開始すると、ＣＰＵはステップ９００に続くステップ９１０にて「Ｙｅｓ」と判定し、ステップ９５０に進む。そして、ＣＰＵはそのステップ９５０にてフューエルカット復帰条件（フューエルカット制御終了条件）が成立したか否かを判定する。
【０１１９】
フューエルカット復帰条件は、以下に述べる条件３及び条件４のうちの少なくとも一つが成立したときに成立する。
（条件３）スロットル弁開度ＴＡが「ゼロ（又は所定開度ＴＡｔｈ）」より大きいこと。
（条件４）機関回転速度ＮＥが「フューエルカット復帰回転速度NEfcre」より小さいこと。なお、フューエルカット復帰回転速度NEfcreは、フューエルカット開始回転速度NEfcthよりも所定回転速度ΔNだけ小さい回転速度である。
【０１２０】
いま、フューエルカット復帰条件が成立していないと仮定する。この場合、ＣＰＵはステップ９５０にて「Ｎｏ」と判定し、ステップ９９５に直接進んで本ルーチンを一旦終了する。従って、Ｆ／ＣフラグＸＦＣの値は「１」に維持される。その結果、フューエルカット制御が継続して実行される。
【０１２１】
これに対し、フューエルカット復帰条件が成立すると、ＣＰＵはステップ９５０に進んだとき、そのステップ９５０にて「Ｙｅｓ」と判定してステップ９６０に進み、Ｆ／ＣフラグＸＦＣの値を「０」に設定する。その後、ＣＰＵはステップ９９５に進んで本ルーチンを一旦終了する。この結果、ＣＰＵは図６のステップ６１０にて「Ｙｅｓ」と判定してステップ６２０乃至ステップ６５０の処理を実行するようになる。従って、燃料噴射が再開される（フューエルカット制御が停止される。）。
【０１２２】
＜第１異常状態の判定とサブＦＢ学習値の設定＞
更に、ＣＰＵは図１０に示した「サブＦＢ学習値設定ルーチン（第１異常状態判定ルーチン）」を所定時間の経過毎に繰り返し実行している。従って、所定のタイミングになると、ＣＰＵはステップ１０００から処理を開始してステップ１０１０に進み、判定実施フラグＸＩＬの値が「１」であるか否かを判定する。このとき、判定実施フラグＸＩＬの値が「１」でなければ、ＣＰＵはステップ１０１０にて「Ｎｏ」と判定し、ステップ１０６０に進んで判定実施フラグＸＩＬの値を「０」に設定する。その後、ＣＰＵは、ステップ１０９５に進んで本ルーチンを一旦終了する。
【０１２３】
これに対し、フューエルカット開始条件が成立することに伴って、前述した図９のステップ９４０の処理が実行されることにより判定実施フラグＸＩＬの値が「１」に設定されると、ＣＰＵは図１０のステップ１０１０にて「Ｙｅｓ」と判定し、次のステップ１０２０及びステップ１０３０の処理を実行する。なお、ＣＰＵは、ステップ１０１０にて「Ｙｅｓ」と判定してから所定時間（フューエルカット制御によるガスが燃焼室２１から上流側空燃比センサ５５に到達するのに要する時間よりも長い時間）後に、以下のステップ１０２０以降に進むように構成されてもよい。換言すると、本例においては、この所定時間は実質的に「０」であると想定されている。また、この点については、後述他の実施形態においても同様に適用される。
【０１２４】
ステップ１０２０：ＣＰＵは上流側空燃比センサ５５の現時点における出力値Vabyfsを取得する。
ステップ１０３０：ＣＰＵは、「ステップ１０２０にて取得した出力値Vabyfs」から「フューエルカット中正常値Vabyfsfc（以下、「ＦＣ中正常値Vabyfsfc」と称呼する。）」を減じた値を、センサ出力変化量ΔＶとして取得する。このＦＣ中正常値Vabyfsfcは、図２に示したように、上流側空燃比センサ５５が正常である場合であってフューエルカット制御が実行されたとき（即ち、上流側空燃比センサ５５に所定の（酸素濃度の）ガスである大気が到達したとき）に上流側空燃比センサ５５が出力する出力値Vabyfsである。
【０１２５】
次に、ＣＰＵはステップ１０４０に進み、センサ出力変化量ΔＶの大きさ（絶対値）が異常判定閾値ε（ε＞０）より大きいか否かを判定する。このとき、センサ出力変化量ΔＶの大きさが異常判定閾値ε以下であると、第１異常状態が発生していないと判定することができる。従って、センサ出力変化量ΔＶの大きさが異常判定閾値ε以下である場合、ＣＰＵはステップ１０４０にて「Ｎｏ」と判定し、ステップ１０６０に進んで判定実施フラグＸＩＬの値を「０」に設定する。その後、ＣＰＵは、ステップ１０９５に進んで本ルーチンを一旦終了する。
【０１２６】
これに対し、第１異常状態のうちの「センサ出力値拡大異常」が発生していると、図２に示したように、「ステップ１０２０にて取得した出力値Vabyfs」はＦＣ中正常値Vabyfsfcよりも相当に大きくなる。即ち、センサ出力変化量ΔＶは異常判定閾値εよりも大きくなる。この場合、ＣＰＵはステップ１０４０にて「Ｙｅｓ」と判定しステップ１０５０に進む。同様に、第１異常状態のうちの「センサ出力値縮小異常」が発生していると、図２に示したように、「ステップ１０２０にて取得した出力値Vabyfs」はＦＣ中正常値Vabyfsfcよりも相当に小さくなる。即ち、センサ出力変化量ΔＶの絶対値は異常判定閾値εよりも大きくなる。この場合にも、ＣＰＵはステップ１０４０にて「Ｙｅｓ」と判定しステップ１０５０に進む。
【０１２７】
ＣＰＵはステップ１０５０にてサブＦＢ学習値Vafsfbgの収束予想値Vafsfbgyを決定するとともに、その収束予想値VafsfbgyをサブＦＢ学習値Vafsfbgとして設定する。この結果、サブＦＢ学習値Vafsfbgは収束予想値Vafsfbgyに一致せしめられる。
【０１２８】
より具体的に述べると、ＣＰＵはセンサ出力変化量ΔＶと収束予想値Vafsfbgyとの関係をルックアップテーブルの形式にてＲＯＭ内に記憶している。収束予想値Vafsfbgyとは、上流側空燃比センサ５５のフューエルカット制御中の出力値VabyfsがＦＣ中正常値Vabyfsfcからセンサ出力変化量ΔＶだけ乖離するような第１異常状態となった場合に、サブＦＢ学習値Vafsfbgが収束するであろう収束値のことである。このテーブルのデータは、予め実験により求められたデータである。
【０１２９】
このテーブルによれば、図１０のブロック１０５０内に示したように、センサ出力変化量ΔＶが「０」であるとき、収束予想値Vafsfbgyは基準値Vafsfbg0となる。更に、このテーブルによれば、収束予想値Vafsfbgyは、センサ出力変化量ΔＶが大きくなるほど大きくなるように決定される。即ち、例えば、センサ出力値拡大異常が生じているためにセンサ出力変化量ΔＶがΔＶＬ（ΔＶＬ＞０）であるとき、収束予想値Vafsfbgyは「基準値Vafsfbg0よりも大きいVafsfbgL」に設定される。更に、例えば、センサ出力値縮小異常が生じているためにセンサ出力変化量ΔＶがΔＶＲ（ΔＶＲ＜０）であるとき、収束予想値Vafsfbgyは「基準値Vafsfbg0よりも小さいVafsfbgyR」に設定される。その後、ＣＰＵはステップ１０６０に進んで判定実施フラグＸＩＬの値を「０」に設定し、ステップ１０９５に進んで本ルーチンを一旦終了する。
【０１３０】
先に説明した図５のタイムチャートは、センサ出力変化量ΔＶがΔＶＬとなるような「センサ出力値拡大異常」が発生した場合のサブＦＢ学習値Vafsfbgの変化を示している。この図５に示したように、第１制御装置によれば、「センサ出力値拡大異常」が発生したと判定されたとき（時刻ｔ１の直後）、サブＦＢ学習値Vafsfbgは収束予想値Vafsfbgyである値VafsfbgLに一致させられる。従って、フューエルカット制御の終了後にサブフィードバック制御が再開される時点（時刻ｔ２）から、サブＦＢ学習値Vafsfbgは適正値（収束値）に近しい値となる。この結果、エミッションが悪化することを回避することができる。
【０１３１】
以上、説明したように、第１制御装置は、
前記下流側空燃比センサの出力値を下流側目標値に一致させるためのサブフィードバック量を算出するサブフィードバック量算出手段（図８のステップ８１０乃至ステップ８２０を参照。）と、
前記サブフィードバック量に含まれる定常成分に応じた値に基づいて学習値を更新する学習を行うとともに同サブフィードバック量を同更新した学習値に応じて補正する学習手段と（図８のステップ８２５乃至ステップ８４０を参照。）、
前記上流側空燃比センサの出力値と前記補正されたサブフィードバック量と前記更新された学習値とに基づき前記機関に供給される混合気の空燃比を理論空燃比に一致させる空燃比フィードバック制御を実行する空燃比制御手段と（図７の各ステップ及び図６のステップ６４０を参照。）、
を備えた内燃機関の空燃比制御装置であって、
前記上流側空燃比センサの実際の出力値である実出力値が同上流側空燃比センサが正常であるときの同上流側空燃比センサの出力値である正常値と相違する第１異常状態が発生したか否かを判定する第１異常判定手段（図１０のステップ１０２０乃至ステップ１０４０を参照。）と、
前記上流側空燃比センサに所定のガス（例えば、フューエルカット制御中の排気、即ち、大気）が到達している時点である所定ガス到達時における前記上流側空燃比センサの出力値と、前記学習値の収束値である収束予想値との関係（図１０のステップ１０５０のブロック内に示された関係）を予め記憶するとともに、前記第１異常状態が発生したと判定されたとき同所定ガス到達時における前記実出力値（図１０のステップ１０２０にて取得される出力値Vabyfs）と前記関係とに基づいて前記学習値の実際の収束予想値を取得し且つ前記学習値を同取得した実際の収束予想値に設定する学習値設定手段と（図１０のステップ１０４０及びステップ１０５０を参照。）、
を備えた空燃比制御装置である。
【０１３２】
従って、上流側空燃比センサ５５が第１異常状態となったとき、サブＦＢ学習値Vafsfbgは予想される収束値（収束予想値Vafsfbgy）に直ちに変更させられる。従って、サブＦＢ学習値Vafsfbgは、第１異常状態が発生した直後において適正値に近い値となる。これにより、第１制御装置は、第１異常状態発生時点からサブＦＢ学習値Vafsfbgが収束する時点までの時間を短くすることができる。その結果、「サブＦＢ学習値Vafsfbgが適正値と乖離していることに起因するエミッションの悪化」を回避することができる。
【０１３３】
＜第２実施形態＞
以下、本発明の第２実施形態に係る内燃機関の空燃比制御装置（以下、単に「第２制御装置」と称呼する。）について説明する。第２制御装置は、第１制御装置が収束予想値Vafsfbgyを決定する際に使用するテーブル（図１０のステップ１０５０のブロック内に示したテーブル）を、図１１に示したテーブルに置換する点においてのみ、第１制御装置と相違している。
【０１３４】
図１１に示したテーブルは、収束予想値Vafsfbgyを、実際の機関回転速度ＮＥが属する領域毎に定めたテーブルである。収束予想値Vafsfbgyは、機関回転速度ＮＥに応じて変化する。より具体的に述べると、収束予想値Vafsfbgyは、機関回転速度ＮＥが１５００ｒｐｍより小さい場合には図１１の線Ｌ１により示したように変化する。収束予想値Vafsfbgyは、機関回転速度ＮＥが１５００ｒｐｍ以上であり且つ３０００ｒｐｍより小さい場合には図１１の線Ｌ２により示したように変化する。更に、収束予想値Vafsfbgyは、機関回転速度ＮＥが３０００ｒｐｍ以上である場合には図１１の線Ｌ３により示したように変化する。
【０１３５】
従って、第２制御装置のＣＰＵは、ステップ１０５０に進んだとき、その時点の機関回転速度ＮＥと、センサ出力変化量ΔＶと、図１１に示したテーブルとに基いて、収束予想値Vafsfbgyを取得し、その収束予想値VafsfbgyをサブＦＢ学習値Vafsfbgに格納する。この結果、第１異常状態発生時における収束予想値Vafsfbgyが機関回転速度ＮＥに応じて相違する場合であっても、第１異常状態発生直後におけるサブＦＢ学習値Vafsfbgを適正値に近い値に設定することができる。
【０１３６】
なお、第２制御装置は、次のように構成されることもできる。即ち、第２制御装置は、第１異常状態が発生したと判定したとき（即ち、ステップ１０５０に進んだとき）、センサ出力変化量ΔＶと図１１に示したテーブルとに基いて「機関回転速度ＮＥの領域毎に収束予想値Vafsfbgyを決定する」とともに、バックアップＲＡＭにそれらの収束予想値Vafsfbgyを格納させておく。そして、その時点以降において、機関回転速度ＮＥが異なる領域へと変化する毎に、その変化した領域に対応する収束予想値VafsfbgyをバックアップＲＡＭから読み出し、その読み出した収束予想値VafsfbgyをサブＦＢ学習値Vafsfbgに設定するように構成されてもよい。
【０１３７】
更に、図１１に示したテーブルは、収束予想値Vafsfbgyを、機関１０の負荷ＫＬが属する領域毎に定めるテーブルに置換することもできる。この場合、第２制御装置は、第１異常状態が発生したと判定したとき（即ち、ステップ１０５０に進んだとき）、センサ出力変化量ΔＶとその置換したテーブルとに基いて「機関１０の負荷ＫＬの領域毎に収束予想値Vafsfbgyを決定する」とともに、バックアップＲＡＭにそれらの収束予想値Vafsfbgyを格納させておく。そして、その時点以降において、機関の負荷ＫＬが異なる領域へと変化する毎に、その変化した領域に対応する収束予想値VafsfbgyをバックアップＲＡＭから読み出し、その読み出した収束予想値VafsfbgyをサブＦＢ学習値Vafsfbgに設定するように構成される。
【０１３８】
加えて、図１１に示したテーブルは、収束予想値Vafsfbgyを、機関回転速度ＮＥと機関１０の負荷ＫＬとにより定まる運転状態が属する領域毎に定めるテーブルに置換することもできる。この場合、第２制御装置は、第１異常状態が発生したと判定したとき（即ち、ステップ１０５０に進んだとき）、センサ出力変化量ΔＶとその置換したテーブルとに基いて「機関１０の負荷ＫＬの領域毎に収束予想値Vafsfbgyを決定する」とともに、バックアップＲＡＭにそれらの収束予想値Vafsfbgyを格納させておく。そして、その時点以降において、機関回転速度ＮＥと機関１０の負荷ＫＬとにより定まる運転状態が変化する毎に、その変化した領域に対応する収束予想値VafsfbgyをバックアップＲＡＭから読み出し、その読み出した収束予想値VafsfbgyをサブＦＢ学習値Vafsfbgに設定するように構成される。
【０１３９】
＜第３実施形態＞
以下、本発明の第３実施形態に係る内燃機関の空燃比制御装置（以下、単に「第３制御装置」と称呼する。）について説明する。
【０１４０】
（第３制御装置の作動の概要）
サブＦＢ学習値Vafsfbgは、上述した「センサ出力値拡大異常及びセンサ出力値縮小異常等」の「第１異常状態」が発生した場合のみでなく、第１異常状態とは異なる他の異常状態（第２異常状態）が発生した場合にも、その第２異常状態が発生する前とは異なる値へと収束する。
【０１４１】
例えば、複数の気筒のうちの特定の気筒に対して設けられている燃料噴射弁２５が「指示される燃料量よりも多量の燃料」を噴射する異常状態（燃料噴射弁リッチずれ異常）が発生した場合、その特定気筒から排出されるＨＣ，ＣＯ及びＨ２は急激に増大する。一方、水素分子は、その分子径が他の未燃物に比べて小さいので、上流側空燃比センサ５５の拡散抵抗層をより迅速に拡散する。その結果、上流側空燃比センサ５５は、分子径の小さいＨ２の影響を受け、実際の空燃比の平均値よりもリッチ側の空燃比に相当する出力値Vabyfsを発生するようになる。
【０１４２】
この結果、その上流側空燃比センサ５５の出力値に基くメインフィードバック制御により機関の空燃比の中心は理論空燃比よりもリーン側に偏移する。従って、サブフィードバック量Vafsfbは「燃料噴射弁リッチずれ異常」が発生する直前に比べ「機関１０の空燃比をよりリッチ側に移行させる値」へと変化する。よって、サブＦＢ学習値Vafsfbgも「機関１０の空燃比をよりリッチ側に移行させる値」へと収束する。
【０１４３】
更に、例えば、失火が発生した場合（混合気が燃焼室において燃焼しなかった場合）、サブＦＢ学習値Vafsfbgは、失火が発生する直前のサブＦＢ学習値Vafsfbgに比べ「機関の空燃比をよりリーン側へ移行する値」に収束することがある。
【０１４４】
これらの「燃料噴射弁のリッチずれ異常（空燃比気筒間インバランス）」及び「失火」等は、上述した第２異常状態の代表例である。そして、このような第２異常状態が発生している場合に第１異常状態が重ねて発生すると、サブＦＢ学習値Vafsfbgは、図１０のステップ１０５０にて決定（予想）される「第１異常発生時（第１異常状態単独発生時）における収束予想値Vafsfbgy」とは異なる値に収束する。従って、第２異常状態が発生している場合に第１異常状態が重ねて発生した場合、サブＦＢ学習値Vafsfbgを「第１異常発生時が単独で発生した場合に予想される収束予想値Vafsfbgy」に設定すると、却ってサブＦＢ学習値Vafsfbgを「実際の収束値」から遠ざけてしまう虞がある。
【０１４５】
図１２は、このような状況におけるサブＦＢ学習値Vafsfbgの一例を示すタイムチャートである。図１２に示した例においては、時刻ｔ１にて第２異常状態としての失火が発生している。そのため、サブＦＢ学習値Vafsfbgは時刻ｔ１以降において値Vafsfbg0から値VafsfbgAに向かって減少し、時刻ｔ２以降において値VafsfbgAに収束する。
【０１４６】
その後、時刻ｔ３にて第１異常状態としてのセンサ出力値拡大異常が発生する。この場合、第１制御装置は、時刻ｔ３にてサブフィードバック量Vafsfbを収束予想値Vafsfbgyに設定する。
【０１４７】
しかしながら、実際には、サブＦＢ学習値Vafsfbgは「値VafsfbgAと値Vafsfbgyとの間の値VafsfbgBに収束する。従って、第１制御装置は、時刻ｔ３においてサブＦＢ学習値Vafsfbgを「実際の収束値」から却って遠ざけてしまう。
【０１４８】
そこで、第３制御装置は、第２異常状態が発生している場合に第１異常状態が重ねて発生した場合、サブＦＢ学習値Vafsfbgの「収束予想値Vafsfbgy」への設定を行わないように構成されている（図３の時刻ｔ３以降における実線を参照。）。従って、サブフィードバック量Vafsfbが実際の収束値から却って乖離してしまう可能性を低減することができる。その結果、エミッションが却って悪化することを回避することができる。
【０１４９】
（実際の作動）
次に、第３制御装置の実際の作動について説明する。
第３制御装置のＣＰＵは、図６乃至図９に示したルーチンを第１制御装置のＣＰＵと同様に実行するようになっている。更に、第３制御装置のＣＰＵは、図１０に代わる図１３に示した「サブＦＢ学習値設定ルーチン（第１異常状態判定ルーチン）」を所定時間の経過毎に繰り返し実行している。図６乃至図９に示したルーチンについては説明済みである。従って、以下、図１３に示されたルーチンに焦点を当てて説明する。なお、図１３に示したステップのうち図１０に示したステップと同じ処理を行うステップには、図１０のそのようなステップに付された符号と同一の符号が付されている。
【０１５０】
所定のタイミングになると、ＣＰＵは図１３のステップ１３００から処理を開始してステップ１０１０に進み、判定実施フラグＸＩＬの値が「１」であるか否かを判定する。前述したように、判定実施フラグＸＩＬの値はフューエルカット開始条件が成立することに伴って、図９のステップ９４０の処理により「１」に設定される。
【０１５１】
いま、判定実施フラグＸＩＬの値が「１」でないと仮定する。この仮定に従えば、ＣＰＵはステップ１０１０にて「Ｎｏ」と判定し、ステップ１０６０に進んで判定実施フラグＸＩＬの値を「０」に設定する。その後、ＣＰＵは、ステップ１３９５に進んで本ルーチンを一旦終了する。
【０１５２】
一方、フューエルカット開始条件が成立することに伴って、図９のステップ９４０の処理が実行されることにより判定実施フラグＸＩＬの値が「１」に設定されると、ＣＰＵは図１３のステップ１０１０にて「Ｙｅｓ」と判定し、次のステップ１０２０及びステップ１０３０の処理を実行する。この結果、実際の出力値VabyfsからＦＣ中正常値Vabyfsfcを減じた値である「センサ出力変化量ΔＶ」が取得される。
【０１５３】
次に、ＣＰＵはステップ１０４０に進み、センサ出力変化量ΔＶの大きさ（絶対値）が異常判定閾値ε（ε＞０）より大きいか否かを判定する。このとき、センサ出力変化量ΔＶの大きさが異常判定閾値ε以下であると、第１異常状態が発生していないと判定することができる。従って、センサ出力変化量ΔＶの大きさが異常判定閾値ε以下である場合、ＣＰＵはステップ１０４０にて「Ｎｏ」と判定し、ステップ１０６０に進んで判定実施フラグＸＩＬの値を「０」に設定する。その後、ＣＰＵは、ステップ１３９５に進んで本ルーチンを一旦終了する。
【０１５４】
これに対し、第１異常状態が発生していると、センサ出力変化量ΔＶの大きさは異常判定閾値εより大きくなる。この場合、ＣＰＵはステップ１０４０にて「Ｙｅｓ」と判定してステップ１３１０に進み、上述した第２異常状態が発生しているか否かを判定する。
【０１５５】
第２異常状態が発生しているか否かは、図示しない「第２異常状態発生判定ルーチン」により判定されている。例えば、ＣＰＵは、サブＦＢ学習値Vafsfbgが第２異常状態判定閾値以上になったとき、第２異常状態が発生したと判定するようになっている。或いは、ＣＰＵは、機関回転速度ＮＥの変化速度に基いて「第２異常状態としての失火」が発生しているか否かを判定することもできる。
【０１５６】
この時点において、第２異常状態が発生していなければ、ＣＰＵはステップ１３１０にて「Ｎｏ」と判定し、前述したステップ１０５０及びステップ１０６０の処理を実行し、その後、ステップ１３９５に進んで本ルーチンを一旦終了する。この結果、第１制御装置と同様、第１異常状態が単独で発生した直後にサブＦＢ学習値Vafsfbgは収束予想値Vafsfbgyに設定される。従って、第３制御装置も、第１異常状態が単独にて発生した直後においてエミッションが悪化することを回避することができる。
【０１５７】
一方、ＣＰＵがステップ１３１０の処理を実行する時点において、第２異常状態が発生している場合、ＣＰＵはそのステップ１３１０にて「Ｙｅｓ」と判定してステップ１０６０に直接進み、その後、ステップ１３９５に進んで本ルーチンを一旦終了する。この結果、第１異常状態が発生したと判定された場合（ステップ１０４０にて「Ｙｅｓ」と判定された場合）であっても、第２異常状態が既に発生しているときには、サブＦＢ学習値Vafsfbgは収束予想値Vafsfbgyに設定されない。
【０１５８】
この結果、第３制御装置は、サブＦＢ学習値Vafsfbgが実際の収束値から却って乖離してしまう可能性を低減することができる。その結果、エミッションが却って悪化することを回避することができる。
【０１５９】
＜第４実施形態＞
以下、本発明の第４実施形態に係る内燃機関の空燃比制御装置（以下、単に「第４制御装置」と称呼する。）について説明する。
【０１６０】
（第４制御装置の作動の概要）
第４制御装置は、第２異常状態が発生している場合に第１異常状態が重ねて発生したとき、その第１異常状態が発生したことに伴ってサブＦＢ学習値Vafsfbgの収束値が変化する量だけ、サブＦＢ学習値Vafsfbgを変更する装置である。
【０１６１】
即ち、第４制御装置は、第１異常状態が発生した場合においてその異常の程度を表す「上記センサ出力変化量ΔＶ」とサブＦＢ学習値Vafsfbgの変化量との関係（以下、「学習値差関係」と称呼する。）を予め記憶しておく。
【０１６２】
より具体的に述べると、学習値差関係は、下記差Δ１と下記差Δ２との関係である。
差Δ１は、所定のガス（例えば、フューエルカット制御中のガスである大気）が上流側空燃比センサ５５に到達した時（所定ガス到達時）における「上流側空燃比センサ５５の出力値Vabyfs」と、「所定ガス到達時における正常値（ＦＣ中正常値Vabyfsfc）」と、の差である。差Δ１はフューエルカット制御中に得られる差であるとき、上記差ΔＶと一致する。
差Δ２は、「上流側空燃比センサ５５が上記差Δ１を生じるような第１異常状態が単独で発生した場合におけるサブＦＢ学習値Vafsfbgの収束予想値Vafsfbgy」と、「上流側空燃比センサ５５が正常である場合に予想されるサブＦＢ学習値Vafsfbgの収束値（正常時収束予想値）Vafsfbg0」と、の差である。
【０１６３】
そして、第４制御装置は、第１異常状態発生時に「上記差Δ１を取得する」とともに、上記学習値差関係と取得した差Δ１とから差Δ２を求め、その時点のサブＦＢ学習値Vafsfbgに「求めた差Δ２」を加えた値を新たなサブＦＢ学習値Vafsfbgとして設定する。第１異常状態発生時点のサブＦＢ学習値Vafsfbgは、それ以前に第２異常状態が発生している場合、その第２異常状態が発生した状態におけるサブＦＢ学習値Vafsfbgの収束値近傍の値になっている可能性が高い。従って、第４制御装置によれば、第２異常状態が発生しているときに第１異常状態が重ねて発生した場合においても、サブＦＢ学習値Vafsfbgを適正値に直ちに近づけることができる。従って、エミッションが悪化することを回避することができる。
【０１６４】
図１４は、このような状況におけるサブＦＢ学習値Vafsfbgの一例を示すタイムチャートである。図１４に示した例においては、時刻ｔ１にて第２異常状態としての失火が発生している。そのため、サブＦＢ学習値Vafsfbgは時刻ｔ１以降において値Vafsfbg0から値VafsfbgAに向かって減少し、時刻ｔ２以降において値VafsfbgAに収束する。
【０１６５】
その後、時刻ｔ３にて第１異常状態としてのセンサ出力値拡大異常が発生する。この場合、上記第３実施形態に係る第３制御装置は、時刻ｔ３にてサブフィードバック量Vafsfb変化させない。そのため、サブＦＢ学習値Vafsfbgは時刻ｔ４にて値VafsfbgBに収束する。
【０１６６】
これに対し、第４制御装置は、時刻ｔ３において「サブＦＢ学習値Vafsfbg」を「差Δ２」だけ変更（この場合、増大）する（図１４の実線を参照。）。その結果、サブＦＢ学習値Vafsfbgが実際の収束値に速やかに近づくので、エミッションが却って悪化することを回避することができる。
【０１６７】
（実際の作動）
次に、第４制御装置の実際の作動について説明する。
第４制御装置のＣＰＵは、図６乃至図９に示したルーチンを第１制御装置のＣＰＵと同様に実行するようになっている。更に、第４制御装置のＣＰＵは、図１０に代わる図１５に示した「サブＦＢ学習値設定ルーチン（第１異常状態判定ルーチン）」を所定時間の経過毎に繰り返し実行している。図６乃至図９に示したルーチンについては説明済みである。従って、以下、図１５に示されたルーチンに焦点を当てて説明する。なお、図１５に示したステップのうち図１０に示したステップと同じ処理を行うステップには、図１０のそのようなステップに付された符号と同一の符号が付されている。
【０１６８】
所定のタイミングになると、ＣＰＵは図１５のステップ１５００から処理を開始してステップ１０１０に進み、判定実施フラグＸＩＬの値が「１」であるか否かを判定する。前述したように、判定実施フラグＸＩＬの値はフューエルカット開始条件が成立することに伴って、図９のステップ９４０の処理により「１」に設定される。
【０１６９】
いま、判定実施フラグＸＩＬの値が「１」でないと仮定する。この仮定に従えば、ＣＰＵはステップ１０１０にて「Ｎｏ」と判定し、ステップ１０６０に進んで判定実施フラグＸＩＬの値を「０」に設定する。その後、ＣＰＵは、ステップ１５９５に進んで本ルーチンを一旦終了する。
【０１７０】
一方、フューエルカット開始条件が成立することに伴って、図９のステップ９４０の処理が実行されることにより判定実施フラグＸＩＬの値が「１」に設定されると、ＣＰＵは図１５のステップ１０１０にて「Ｙｅｓ」と判定し、次のステップ１０２０及びステップ１０３０の処理を実行する。この結果、実際の出力値VabyfsからＦＣ中正常値Vabyfsfcを減じた値である「センサ出力変化量ΔＶ＝Δ１」が取得される。
【０１７１】
次に、ＣＰＵはステップ１０４０に進み、センサ出力変化量ΔＶの大きさ（絶対値）が異常判定閾値ε（ε＞０）より大きいか否かを判定する。このとき、センサ出力変化量ΔＶの大きさが異常判定閾値ε以下であると、第１異常状態が発生していないと判定することができる。従って、センサ出力変化量ΔＶの大きさが異常判定閾値ε以下である場合、
ＣＰＵはステップ１０４０にて「Ｎｏ」と判定し、ステップ１０６０に進んで判定実施フラグＸＩＬの値を「０」に設定する。その後、ＣＰＵは、ステップ１５９５に進んで本ルーチンを一旦終了する。
【０１７２】
これに対し、第１異常状態が発生していると、センサ出力変化量ΔＶの大きさは異常判定閾値εより大きくなる。この場合、ＣＰＵはステップ１０４０にて「Ｙｅｓ」と判定してステップ１５１０に進み、上述した「学習値差関係」に「上記ステップ１０３０にて取得したセンサ出力変化量ΔＶ」を適用することにより「上記差Δ２（即ち、サブＦＢ学習値Vafsfbgの補正量ΔVafsfbg）」を取得する。本例において、差Δ２（補正量ΔVafsfbg）は、センサ出力変化量ΔＶが大きいほど大きくなる。また、差Δ２（補正量ΔVafsfbg）は、センサ出力変化量ΔＶが正の値のとき正の値をとり、センサ出力変化量ΔＶが負の値のとき正の値をとる。なお、この場合においても、上記第２実施形態のように、学習値差関係を、更に、機関回転速度ＮＥ領域別及び／または機関の負荷ＫＬ別に設定しておいてもよい。
【０１７３】
次いで、ＣＰＵはステップ１５２０に進み、その時点のサブＦＢ学習値Vafsfbgに差Δ２（補正量ΔVafsfbg）を加えることによりサブＦＢ学習値Vafsfbgを更新する。即ち、サブＦＢ学習値Vafsfbgに、「その時点の直前のサブＦＢ学習値Vafsfbgと差Δ２との和」を設定する。その後、ＣＰＵはステップ１５９５に進んで本ルーチンを一旦終了する。
【０１７４】
この結果、第１異常状態が発生したと判定されたとき、学習値Vafsfbgは差Δ２だけ補正（増大又は減少）させられる。その差Δ２は、第１異常状態が単独で発生した場合における学習値Vafsfbgの変化量である。従って、第４制御装置によれば、第１異常状態が発生した時点において第２異常状態が発生しているか否かに関わらず、サブＦＢ学習値Vafsfbgは直ちに適正値に近づく。よって、エミッションが悪化することを回避することができる。
【０１７５】
以上、説明したように、本発明の各実施形態に係る空燃比制御装置は、上流側空燃比センサ５５に第１異常状態が発生した場合において、サブＦＢ学習値Vafsfbgを速やかに適正値（収束値）に近づけることができる。従って、それらの空燃比制御装置は、「サブＦＢ学習値Vafsfbgが適正値から乖離することに起因するエミッションの悪化」を回避することができる。
【０１７６】
本発明の範囲内において種々の変形例を採用することができる。例えば、上記各実施形態に係る空燃比制御装置は、第１異常状態が発生した時点から所定時間が経過するまでの間（第１期間）、サブＦＢ学習値Vafsfbgの更新速度を第１期間以外の期間におけるサブＦＢ学習値Vafsfbgの更新速度よりも上昇させてもよい。サブＦＢ学習値Vafsfbgの更新速度は、例えば、図８のステップ８３０における値αを小さい値に変更することにより容易に上昇させることができる。これによれば、第１異常状態発生後からサブＦＢ学習値Vafsfbgが収束するまでの時間を一層短くすることができる。
【０１７７】
また、例えば、空燃比フィードバック制御は、例えば特開２００５−２７３５２４に開示されているように、上流側空燃比センサの出力値をハイパスフィルタ処理した値に基くメインフィードバック量と、下流側空燃比センサの出力値をローパスフィルタ処理した値に基づくサブフィードバック量と、を独立して算出し、それらに基いて空燃比フィードバック制御を実行する態様でもよい。更に、空燃比フィードバック制御は、例えば特開平０６−０１０７３８号公報に開示されているように、下流側空燃比センサ５６の出力値Voxsに基づいてサブフィードバック量を算出し、そのサブフィードバック量により上流側空燃比センサの出力値に基づいて作成されるメインフィードバック量（空燃比補正係数）を変更する態様であってもよい。
【０１７８】
加えて、上記各空燃比制御装置は、第１異常状態の判定を、フューエルカット制御中に実行していた。これに代え、上記空燃比制御装置は、基準用上流側空燃比センサを上記上流側空燃比センサ５５に加えて上流側空燃比センサ５５に隣接する位置に配設しておき、その基準用上流側空燃比センサの出力値と上流側空燃比センサ５５の出力値との差に基いて第１異常状態が発生したか否かを判定するように構成されてもよい。
【図面の簡単な説明】
【０１７９】
【図１】本発明の第１実施形態に係る空燃比制御装置（第１制御装置）を適用した内燃機関の概略図である。
【図２】図１に示した上流側空燃比センサに対する印加電圧と出力値（限界電流値）と空燃比との関係を示したグラフである。
【図３】上流側空燃比と図１に示した上流側空燃比センサの出力値の関係を示したグラフである。
【図４】下流側空燃比と図１に示した下流側空燃比センサの出力値の関係を示したグラフである。
【図５】第１制御装置の作動を説明するためのタイムチャートである。
【図６】図１に示したＣＰＵが実行する燃料噴射制御ルーチンを示したフローチャートである。
【図７】図１に示したＣＰＵがメインフィードバック量を算出するために実行するルーチンを示したフローチャートである。
【図８】図１に示したＣＰＵがサブフィードバック量及びサブＦＢ学習値を算出するために実行するルーチンを示したフローチャートである。
【図９】図１に示したＣＰＵがフューエルカット制御を実行するためのフラグを設定するルーチンである。
【図１０】図１に示したＣＰＵが第１異常状態発生時にサブＦＢ学習値を適値に設定するために実行するルーチンを示したフローチャートである。
【図１１】本発明の第２実施形態に係る空燃比制御装置（第２制御装置）のＣＰＵが、サブＦＢ学習値の収束予想値を決定する際に参照するテーブルである。
【図１２】本発明の第３実施形態に係る空燃比制御装置（第３制御装置）の作動を説明するためのタイムチャートである。
【図１３】第３制御装置のＣＰＵが第１異常状態発生時にサブＦＢ学習値を適値に設定するために実行するルーチンを示したフローチャートである。
【図１４】本発明の第４実施形態に係る空燃比制御装置（第４制御装置）の作動を説明するためのタイムチャートである。
【図１５】第４制御装置のＣＰＵが第１異常状態発生時にサブＦＢ学習値を適値に設定するために実行するルーチンを示したフローチャートである。
【符号の説明】
【０１８０】
１０…内燃機関、２０…本体部、２１…燃焼室、２５…燃料噴射弁、３０…吸気系統、３４…スロットル弁、４０…排気系統、４１…エキゾーストマニホールド、４２…エキゾーストパイプ、４３…上流側触媒、４４…下流側触媒、５５…上流側空燃比センサ、５６…下流側空燃比センサ、６０…電気制御装置。
【図１】
2010071259.tif 000003
【図２】
2010071259.tif 000004
【図３】
2010071259.tif 000005
【図４】
2010071259.tif 000006
【図５】
2010071259.tif 000007
【図６】
2010071259.tif 000008
【図７】
2010071259.tif 000009
【図８】
2010071259.tif 000010
【図９】
2010071259.tif 000011
【図１０】
2010071259.tif 000012
【図１１】
2010071259.tif 000013
【図１２】
2010071259.tif 000014
【図１３】
2010071259.tif 000015
【図１４】
2010071259.tif 000016
【図１５】
2010071259.tif 000017