(57)【要約】【課題】  未燃ガスやNOxの排出量を抑制しながら、触媒劣化判定を誤りなく実行し得る触媒劣化判定装置を提供すること。【解決手段】  触媒劣化判定装置は、機関の空燃比を設定リッチ空燃比と設定リーン空燃比とに交互に変化させる空燃比アクティブ制御を行うとともに、下流側空燃比センサ６８の出力の軌跡長を求め、その軌跡長が閾値より大きいとき上流側触媒５３が劣化したと判定する。触媒劣化判定装置は、空燃比アクティブ制御を実行する直前に燃料噴射量の学習値を取得し、その学習値を用いて上流側触媒に対する酸素収支量（上流側触媒に流入する酸素の量と上流側触媒で消費される酸素の量の差の積算値）を求め、酸素収支量が０と閾値Sthとの間となるように前記空燃比アクティブ制御を行う。閾値Sthは、劣化触媒の最大酸素吸蔵量より大きく、非劣化触媒の最大酸素吸蔵量より小さい値に選択されている。【選択図】  図１
2005194981.tif 000002
【特許請求の範囲】
【請求項１】
内燃機関の排気通路に配設された触媒と、
前記排気通路の前記触媒の上流に配設されて同排気通路内のガスの空燃比に応じた値を出力する上流側空燃比センサと、
前記排気通路の前記触媒の下流に配設されて同触媒から流出するガスの空燃比に応じた値を出力する下流側空燃比センサと、
前記機関に供給される混合気の空燃比を所定の目標空燃比にするためのフィードフォワード燃料噴射量を前記機関の運転状態量に応じて決定するフィードフォワード燃料噴射量決定手段と、
前記機関に供給される混合気の空燃比を前記所定の目標空燃比と一致させるために前記フィードフォワード燃料噴射量を補正するように用いられるフィードバック量を前記上流側空燃比センサの出力に基づいて算出するフィードバック量算出手段と、
前記フィードフォワード燃料噴射量を前記フィードバック量で補正することにより最終燃料噴射時間を決定する最終燃料噴射時間決定手段と、
前記決定された最終燃料噴射時間だけ所定の流量で燃料を噴射する燃料噴射手段と、
所定の学習条件が満たされたとき、前記フィードバック量の平均的な値に相当する学習値を同フィードバック量に基づいて算出する学習値算出手段と、
所定の触媒劣化指標値取得条件が満たされたとき、前記機関に供給される混合気の空燃比を理論空燃比よりもリッチ側の空燃比である設定リッチ空燃比と同理論空燃比よりもリーン側の空燃比である設定リーン空燃比とに交互に変更する空燃比アクティブ制御を行うように前記フィードフォワード燃料噴射量及び前記フィードバック量の少なくとも一方を変更する空燃比アクティブ制御手段と、
前記空燃比アクティブ制御手段により前記空燃比が変更されている期間において、前記最終燃料噴射時間と前記学習値とに基づいて実際に前記機関に供給された燃料量である実燃料量を算出し、同算出された実燃料量に基づいて前記触媒の酸素収支の変化量を算出する酸素収支変化量算出手段と、
前記空燃比アクティブ制御中に前記下流側空燃比センサの出力に基づいて前記触媒の劣化の程度を示す触媒劣化指標値を算出し、同算出された触媒劣化指標値に基づいて同触媒が劣化したか否かを判定する触媒劣化判定手段と、
を備えた触媒劣化判定装置であって、
前記空燃比アクティブ制御手段は、
前記所定の触媒劣化指標値取得条件が満たされたとき、前記学習値算出手段に前記学習値の算出を行わせ、同学習値の算出直後に前記空燃比アクティブ制御を実行するように構成された触媒劣化判定装置。
【請求項２】
請求項１に記載の触媒劣化判定装置において、
前記空燃比アクティブ制御手段は、
前記空燃比アクティブ制御実行中において前記算出された酸素収支の変化量に基づいて前記触媒の酸素収支量を算出し、同酸素収支量が、前記触媒が劣化していると判定すべき触媒である場合に示す同触媒の最大酸素吸蔵量の最大値より大きく且つ同触媒が劣化していないと判定すべき触媒である場合に示す同触媒の最大酸素吸蔵量の最小値より小さい値に設定されている酸素収支閾値に到達したとき及び０となったとき、同機関に供給される混合気の空燃比を前記設定リーン空燃比から前記設定リッチ空燃比に及びその逆へそれぞれ切り換えるように構成された触媒劣化判定装置。
【請求項３】
請求項２に記載の触媒劣化判定装置において、
前記空燃比アクティブ制御手段は、
前記機関に供給される混合気の空燃比を前記設定リーン空燃比に設定している場合、前記下流側空燃比センサの出力が理論空燃比よりもリッチな空燃比を示す値から理論空燃比よりもリーンな空燃比を示す値に変化したとき、前記算出された酸素収支量の値に関わらず同機関に供給される混合気の空燃比を前記設定リッチ空燃比に切り換え、
前記機関に供給される混合気の空燃比を前記設定リッチ空燃比に設定している場合、前記下流側空燃比センサの出力が理論空燃比よりもリーンな空燃比を示す値から理論空燃比よりもリッチな空燃比を示す値に変化したとき、前記算出された酸素収支量の値に関わらず同機関に供給される混合気の空燃比を前記設定リーン空燃比に切り換えるように構成された触媒劣化判定装置。
【請求項４】
請求項１乃至請求項３の何れか一項に記載の触媒劣化判定装置において、
前記触媒劣化判定手段は、
前記空燃比アクティブ制御終了直後であって前記触媒劣化指標値に基づく前記触媒劣化の判定を行う直前に、前記学習値算出手段に前記学習値の算出を再度行わせ、前記空燃比アクティブ制御直前に算出した学習値と同空燃比アクティブ制御直後に算出した学習値との偏差に基づいて中心空燃比の変化に応じた値を算出し、同中心空燃比の変化に応じた値が所定の中心空燃比変化閾値より大きいとき、同触媒劣化指標値に基づく触媒劣化判定を行わないように構成された触媒劣化判定装置。
【請求項５】
請求項２又は請求項３に記載の触媒劣化判定装置において、
前記触媒劣化判定手段は、
前記空燃比アクティブ制御終了直後であって前記触媒劣化指標値に基づく前記触媒劣化の判定を行う直前に前記学習値算出手段に前記学習値の算出を再度行わせ、前記空燃比アクティブ制御直前に算出した学習値と同空燃比アクティブ制御直後に算出した学習値との偏差に基づいて中心空燃比の変化に応じた値を算出し、同中心空燃比の変化に応じた値が所定の中心空燃比変化閾値より大きいとき、同触媒劣化指標値に基づく触媒劣化判定を行わないように構成され、前記所定の中心空燃比変化閾値が前記酸素収支閾値が大きくなるほど大きくなるように設定されている触媒劣化判定装置。
【請求項６】
請求項４又は請求項５に記載の触媒劣化判定装置において、
前記学習値算出手段は、
前記空燃比アクティブ制御の直前に行う前記学習値の算出に対する学習条件よりも前記空燃比アクティブ制御の直後に行う前記学習値の算出に対する学習条件を緩和させた触媒劣化判定装置。
【請求項７】
請求項１に記載の触媒劣化判定装置であって、
前記学習値算出手段は、
前記所定の学習条件とは異なる別の学習条件が満たされたとき前記フィードバック量の平均値に対応する値を算出するとともに、同平均値に対応する値が正の所定値より大きい場合に増大され且つ同平均値に対応する値が負の所定値より小さい場合に減少されるように第１学習値を算出し、前記所定の学習条件が満たされたとき前記フィードバック量の平均値に対応する他の値を第２の学習値として算出し、
前記最終燃料噴射時間決定手段は、
前記フィードフォワード燃料噴射量を少なくとも前記第１学習値により補正するとともに、同補正されたフィードフォワード燃料噴射量を前記フィードバック量で補正することにより最終燃料噴射時間を決定し、
前記酸素収支変化量算出手段は、
前記最終燃料噴射時間と前記第１学習値及び前記第２学習値とに基づいて前記実燃料量を算出し、同算出された実燃料量に基づいて前記触媒の酸素収支の変化量を算出し、
前記空燃比アクティブ制御手段は、
前記所定の触媒劣化指標値取得条件が満たされたとき、前記学習値算出手段に前記第２学習値の算出を行わせ、同第２学習値の算出直後に前記空燃比アクティブ制御を実行するように構成された触媒劣化判定装置。
【請求項８】
請求項４に記載の触媒劣化判定装置であって、
前記学習値算出手段は、
前記所定の学習条件とは異なる別の学習条件が満たされたとき前記フィードバック量の平均値に対応する値を算出するとともに、同平均値に対応する値が正の所定値より大きい場合に増大され且つ同平均値に対応する値が負の所定値より小さい場合に減少されるように第１学習値を算出し、前記所定の学習条件が満たされたとき前記フィードバック量の平均値に対応する他の値を第２の学習値として算出し、
前記最終燃料噴射時間決定手段は、
前記フィードフォワード燃料噴射量を少なくとも前記第１学習値により補正するとともに、同補正されたフィードフォワード燃料噴射量を前記フィードバック量で補正することにより最終燃料噴射時間を決定し、
前記酸素収支変化量算出手段は、
前記最終燃料噴射時間と前記第１学習値及び前記第２学習値とに基づいて前記実燃料量を算出し、同算出された実燃料量に基づいて前記触媒の酸素収支の変化量を算出し、
前記空燃比アクティブ制御手段は、
前記所定の触媒劣化指標値取得条件が満たされたとき、前記学習値算出手段に前記第２学習値の算出を行わせ、同第２学習値の算出直後に前記空燃比アクティブ制御を実行し、
前記触媒劣化判定手段は、
前記空燃比アクティブ制御終了直後であって前記触媒劣化の判定を行う直前に、前記学習値算出手段に前記第２学習値の算出を再度行わせ、同空燃比アクティブ制御直前に算出した第２学習値と同空燃比アクティブ制御直後に算出した第２学習値との偏差に基づいて前記中心空燃比の変化に応じた値を算出するように構成された触媒劣化判定装置。
【請求項９】
請求項１乃至請求項８の何れか一項に記載の触媒劣化判定装置において、
前記触媒劣化判定手段は、前記下流側空燃比センサの出力の波形に応じた値を前記触媒劣化指標値として算出する触媒劣化判定装置。
【請求項１０】
請求項９に記載の触媒劣化判定装置において、
前記触媒劣化判定手段は、前記下流側空燃比センサの出力の軌跡長を前記触媒劣化指標値として算出する触媒劣化判定装置。
【請求項１１】
請求項１に記載の触媒劣化判定装置において、
前記触媒劣化判定手段は、前記算出された触媒の酸素収支の変化量に基づき前記触媒の最大酸素吸蔵量を前記触媒劣化指標値として算出する触媒劣化判定装置。
【請求項１２】
請求項１に記載の触媒劣化判定装置において、
前記空燃比アクティブ制御手段は、
前記空燃比アクティブ制御実行中において前記機関に供給される混合気の空燃比を理論空燃比よりもリッチ側の空燃比である設定リッチ空燃比に設定した時点から前記算出された酸素収支の変化量に基づいての前記触媒の酸素放出量を算出し、同酸素放出量が、前記触媒が劣化していると判定すべき触媒である場合に示す同触媒の最大酸素吸蔵量の最大値より大きく且つ同触媒が劣化していないと判定すべき触媒である場合に示す同触媒の最大酸素吸蔵量の最小値より小さい値に設定されている酸素収支閾値に到達したとき、同機関に供給される混合気の空燃比を前記設定リッチ空燃比から前記設定リーン空燃比に切り換えるように構成された触媒劣化判定装置。
【請求項１３】
請求項１２に記載の触媒劣化判定装置において、
前記空燃比アクティブ制御手段は、
前記機関に供給される混合気の空燃比を前記設定リッチ空燃比に設定している場合、前記下流側空燃比センサの出力が理論空燃比よりもリーンな空燃比を示す値から理論空燃比よりもリッチな空燃比を示す値に変化したとき、前記算出された酸素放出量の値に関わらず同機関に供給される混合気の空燃比を前記設定リーン空燃比に切り換えるように構成された触媒劣化判定装置。
【請求項１４】
請求項１に記載の触媒劣化判定装置において、
前記空燃比アクティブ制御手段は、
前記空燃比アクティブ制御実行中において前記機関に供給される混合気の空燃比を理論空燃比よりもリーン側の空燃比である設定リーン空燃比に設定した時点から前記算出された酸素収支の変化量に基づいての前記触媒の酸素吸収量を算出し、同酸素吸収量が、前記触媒が劣化していると判定すべき触媒である場合に示す同触媒の最大酸素吸蔵量の最大値より大きく且つ同触媒が劣化していないと判定すべき触媒である場合に示す同触媒の最大酸素吸蔵量の最小値より小さい値に設定されている酸素収支閾値に到達したとき、同機関に供給される混合気の空燃比を前記設定リーン空燃比から前記設定リッチ空燃比に切り換えるように構成された触媒劣化判定装置。
【請求項１５】
請求項１４に記載の触媒劣化判定装置において、
前記空燃比アクティブ制御手段は、
前記機関に供給される混合気の空燃比を前記設定リーン空燃比に設定している場合、前記下流側空燃比センサの出力が理論空燃比よりもリッチな空燃比を示す値から理論空燃比よりもリーンな空燃比を示す値に変化したとき、前記算出された酸素吸収量の値に関わらず同機関に供給される混合気の空燃比を前記設定リッチ空燃比に切り換えるように構成された触媒劣化判定装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、内燃機関の排気通路に配設された触媒が劣化しているか否かを判定する触媒劣化判定装置に関する。
【背景技術】
【０００２】
従来から、排気通路に配設された触媒（三元触媒、触媒コンバータ）の下流に空燃比センサ（下流側空燃比センサ）を設けるとともに内燃機関に供給される混合気の空燃比をリッチ側とリーン側に交互に強制的に変化させ、そのときの下流側空燃比センサの出力（出力波形、即ち、軌跡長、変動周波数、所定値とセンサ出力とにより囲まれる部分の面積等）に基づいて同触媒が劣化したか否かを判定する触媒劣化判定装置が知られている。本明細書においては、このような触媒劣化判定を行うための空燃比の強制的変化制御を「空燃比アクティブ制御」と称呼する。
【０００３】
一方、上記空燃比アクティブ制御において、機関に供給される混合気の空燃比がリーン側の空燃比となっているときに触媒に吸蔵されるとともにリッチ側の空燃比となっているときに触媒から放出される酸素の量を積算して触媒の酸素吸蔵量（酸素ストレージ量）OSCを求め、その酸素吸蔵量が、劣化触媒の許容酸素吸蔵量（破過量）以上で且つ非劣化触媒（劣化していない触媒）の許容酸素吸蔵量以下となるように、空燃比の切換えを行うことも知られている（例えば、特許文献１を参照。）。これにより、触媒が劣化しているか否かに応じて下流側空燃比センサの出力に確実に変化が現れるので、触媒劣化の判定を確実に行うことができる。
【特許文献１】特開２００２−１３００１８号公報（第６頁、図３）
【０００４】
ところで、上記空燃比アクティブ制御を行うためには、酸素吸蔵量OSCを算出しなければならない。酸素吸蔵量OSCは、例えば、下記(1)式乃至(3)式に基づいて求められ得る。
taufinal＝tfbse・kactive＋tdfi                  …(1)
delO2＝0.23・(Gn−taufinal・KINJC・stoich）    …(2)
OSC＝ΣdelO2                                  …(3)
【０００５】
(1)式において、
taufinalは、ある気筒の一回の吸気行程に対する実際の燃料噴射時間である。燃料噴射時間はインジェクタの開弁時間である。
tfbseは、ある気筒の一回の吸気行程に対する混合気の空燃比を理論空燃比とするための基本燃料噴射時間である。例えば、tfbseは、ある気筒の一回の吸気行程において吸入された吸入空気量Gnに基づいて求められる。
kactiveは、空燃比アクティブ制御を行うための増量又は減量係数である。以下、この係数を、「空燃比アクティブ制御係数kactive」と称呼する。
tdfiは、触媒の上流に配設された上流側空燃比センサの出力に基づくフィードバック量（時間）である。tdfiは、空燃比フィードバック量又は空燃比フィードバック補正量とも呼ばれる。
【０００６】
(2)式において、
係数「0.23」は、大気中の酸素の重量割合である。
delO2は、ある気筒の一回の吸気行程に対する燃焼行程で生じた排ガス中の酸素の過不足量である。即ち、delO2は、触媒に流入するガスにおける酸素の過不足量である。それ故、delO2は、「酸素収支の変化量」と称呼される。
Gnは、上述したように、ある気筒の一回の吸気行程において吸入された吸入空気量である。Gnは、エアフローメータが計測した吸入空気流量をエンジン回転数により除した値、或いは所定の物理モデルである空気モデルに基づいて求められる。
KINJCは、燃料噴射時間（インジェクタの開弁時間）を燃料の質量に変換する予め定められた係数である。
stoichは、理論空燃比（例えば、14.5或いは14.6）である。
【０００７】
即ち、(2)式は、taufinalだけの時間、燃料を噴射したとき、taufinal・KINJCだけの燃料量（重量）が実際に噴射されているという前提に立脚した式である。換言すると、(2)式の右辺にある（taufinal・KINJC・stoich）を0.23倍した値は、噴射時間taufinalだけ噴射された燃料により消費される酸素重量を示す値と考えられている。
【０００８】
従って、この消費される酸素重量0.23・（taufinal・KINJC・stoich）を吸入空気に含まれる酸素量0.23・Gnから減じることにより、ある気筒の一サイクルにおいて触媒に流入する酸素の過不足量（触媒の酸素収支の変化量delO2）が求められる。酸素収支の変化量delO2は、正の値のとき酸素の過剰量、負の値のとき酸素の不足量を表す。酸素収支量は、触媒に流入する酸素の量と同触媒で消費される酸素の量の差の積算値である。
【０００９】
一方、触媒に流入する過剰な酸素は触媒によりすべて吸収され、触媒に流入するガスにおける酸素の不足分は触媒から放出される酸素により補われると考えることができる。従って、(3)式に基づき酸素収支の変化量delO2を積算すれば、触媒の酸素吸蔵量に応じた値（触媒における酸素収支量）が求められるのである。
【００１０】
しかしながら、各インジェクタの製造上のばらつきなどに起因する噴射性能差などにより、燃料噴射時間がtaufinalであるときに燃料噴射時間taufinalに比例した燃料量（＝taufinal・KINJC）の燃料が実際には噴射されていない場合がある。換言すると、実際の燃料噴射量と燃料噴射時間の関係（この関係はKINJCで表されている。）が変化してしまうことがある。
【００１１】
このような状態では、機関に供給されていると考えられている燃料の量（taufinal・KINJC）が正確でなくなるから、一回の燃焼で消費される酸素量0.23・（taufinal・KINJC・stoich）が正確でなくなる。従って、酸素収支の変化量delO2が不正確となり、これを積算した触媒の酸素吸蔵量OSCも不正確となる。
【００１２】
従って、空燃比アクティブ制御において、空燃比を上記計算された酸素吸蔵量OSCの値が所定値となったか否かに基づいてリーン側空燃比からリッチ側空燃比に切り換え、及び／又は、リッチ側空燃比からリーン側空燃比に切り換えると、それらの空燃比切換えタイミングが不適切となることがある。この結果、エミッションが悪化したり、触媒が劣化したことを精度良く判定できなくなるという問題がある。
【００１３】
一方、酸素吸蔵量OSCは、例えば、下記(4)式乃至(7)式に基づいても求められ得る。
ftaufinal＝ftbse・kactive・FAF                 …(4)
taufinal＝ftaufinal／KINJC                      …(5)
delO2＝0.23・(Gn−ftaufinal・stoich）         
…(6)
OSC＝ΣdelO2                                   …(7)
【００１４】
(4)式乃至(7)式において、
ftaufinalは、ある気筒の一回の吸気行程に対する燃料噴射量である。
ftbseは、ある気筒の一回の吸気行程に対する混合気の空燃比を理論空燃比とするための燃料噴射量である。例えば、ftbseは、ある気筒の一回の吸気行程において吸入された吸入空気量Gnに基づいて求められる。
FAFは、触媒の上流に配設された上流側空燃比センサの出力に基づくフィードバック量（比率）である。
【００１５】
この場合、各インジェクタの製造上のばらつきなどに起因する噴射性能差などにより、実際の燃料噴射量と燃料噴射時間の関係（この関係はKINJCで表されている。）が変化してしまうと、実際にftaufinalの量の燃料が噴射されない場合がある。その結果、やはり、酸素吸蔵量OSCが正確ではなくなるので、エミッションが悪化したり、触媒が劣化したことを精度良く判定できなくなるという問題がある。
【００１６】
他方、上記(1)式乃至(3)式、或いは、上記(4)式乃至(7)式を用いて触媒の最大酸素吸蔵量Cmaxを求め、この最大酸素吸蔵量Cmaxが所定値以下であれば触媒が劣化していると判定する方法も考えられる。しかしながら、上記した実際の燃料噴射量と燃料噴射時間の関係が設計上予定した関係（KINJCで表される関係）から変化してしまっていると、最大酸素吸蔵量Cmaxの算出精度が悪化する。その結果、触媒劣化判定が正確に行えないという問題がある。
【００１７】
更に、酸素吸蔵量OSCを下記(8)式及び(9)式に基づいて算出することも考えられる。abyfsは、触媒上流に配設された上流側空燃比センサにより検出される触媒に流入するガスの空燃比である。
delO2＝0.23・taufinal・KINJC・（abyfs−stoich）    …（８）
OSC＝ΣdelO2                                    …（９）
【００１８】
しかしながら、この方式によっても、燃料噴射時間がtaufinalであるときに燃料噴射時間taufinalに比例した燃料量（＝taufinal・KINJC）の燃料が実際には噴射されていない場合、酸素吸蔵量OSCが不正確となる。従って、上述した問題と同様な問題が発生する。
【発明の開示】
【００１９】
本発明は、上記課題に対処するためになされたものであって、その主たる目的は、エミッションの悪化を回避しながら、触媒劣化判定を精度良く行うことができる触媒劣化判定装置を提供することにある。
【００２０】
上記目的を達成するための本発明の触媒劣化判定装置は、内燃機関の排気通路に配設された触媒と、前記排気通路の前記触媒の上流に配設されて同排気通路内のガスの空燃比に応じた値を出力する上流側空燃比センサと、前記排気通路の前記触媒の下流に配設されて同触媒から流出するガスの空燃比に応じた値を出力する下流側空燃比センサとを備えている。
【００２１】
また、触媒劣化判定装置は、フィードフォワード燃料噴射量を決定するフィードフォワード燃料噴射量決定手段と、フィードバック量を算出するフィードバック量算出手段と、最終燃料噴射時間を決定する最終燃料噴射時間決定手段と、学習値を算出する学習値算出手段と、燃料噴射手段と、を備えている。
【００２２】
更に、触媒劣化判定装置は、機関に供給される混合気の空燃比を設定リッチ空燃比と設定リーン空燃比とに交互に変更する空燃比アクティブ制御手段と、前記触媒の酸素収支の変化量を算出する酸素収支変化量算出手段と、触媒劣化指標値に基づいて同触媒が劣化したか否かを判定する触媒劣化判定手段と、を備えている。
【００２３】
前記フィードフォワード燃料噴射量決定手段は、前記機関に供給される混合気の空燃比を所定の目標空燃比にするためのフィードフォワード燃料噴射量を前記機関の運転状態量に応じて決定する。フィードフォワード燃料噴射量の単位は、時間であっても、重量であってもよい。前記機関の運転状態量とは、一回の吸気行程で気筒に吸入される吸入空気量などであり、排ガスの空燃比などの排ガスに関する情報を含まない量であって、機関の吸気に関する状態を示す量である。
【００２４】
前記フィードバック量算出手段は、フィードバック量を前記上流側空燃比センサの出力に基づいて算出する。フィードバック量の単位は、時間であっても、無次元であってもよい。フィードバック量は、前記機関に供給される混合気の空燃比を前記所定の目標空燃比と一致させるために前記フィードフォワード燃料噴射量を補正するように用いられる量である。
【００２５】
前記最終燃料噴射時間決定手段は、前記フィードフォワード燃料噴射量を前記フィードバック量により補正することにより最終燃料噴射時間を決定する。
前記燃料噴射手段は、前記決定された最終燃料噴射時間だけ所定の流量で燃料を噴射する。
【００２６】
前記学習値算出手段は、所定の学習条件が満たされたとき、前記フィードバック量の平均的な値に相当する学習値を同フィードバック量に基づいて算出する。学習値は前記フィードバック量の平均的な値に相当する値であるから、最終燃料噴射時間だけ燃料を噴射したときに期待されている機関に供給される燃料量と実際の燃料量（実燃料量）とのズレ分を表す。
【００２７】
前記空燃比アクティブ制御手段は、所定の触媒劣化指標値取得条件が満たされたとき前記フィードフォワード燃料噴射量及び前記フィードバック量の少なくとも一方を変更することにより前記最終燃料噴射時間を変更し、前記機関に供給される混合気の空燃比を理論空燃比よりもリッチ側の空燃比である設定リッチ空燃比と同理論空燃比よりもリーン側の空燃比である設定リーン空燃比とに交互に変更する空燃比アクティブ制御を行う。機関に供給される混合気の空燃比が設定リッチ空燃比とされると、触媒に流入するガス中の酸素量が不足する。従って、触媒に吸蔵されていた酸素が放出される。機関に供給される混合気の空燃比が設定リーン空燃比とされると、触媒に流入するガス中の酸素量が過剰となる。従って、触媒に酸素が吸蔵される。
【００２８】
前記酸素収支変化量算出手段は、前記空燃比アクティブ制御手段により前記空燃比が変更されている期間において、前記最終燃料噴射時間と前記学習値とに基づいて実際に前記機関に供給された燃料量である実燃料量（実際の燃料量）を算出し、同算出された実燃料量に基づいて前記触媒の酸素収支の変化量を算出する。酸素収支の変化量とは、ある時間において、触媒に流入する（吸蔵・吸収される）酸素の量と同触媒の内部にて消費（放出）される酸素の量の差を意味する。従って、酸素収支が０であれば、触媒の酸素吸蔵量は変化しない。
【００２９】
触媒劣化判定手段は、前記空燃比アクティブ制御中に前記下流側空燃比センサの出力に基づいて前記触媒の劣化の程度を示す触媒劣化指標値を算出し、同算出された触媒劣化指標値に基づいて同触媒が劣化したか否かを判定する。
【００３０】
更に、前記空燃比アクティブ制御手段は、前記所定の触媒劣化指標値取得条件が満たされたときに前記学習値算出手段に前記学習値の算出を行わせ、同学習値の算出直後に前記空燃比アクティブ制御を実行するように構成されている。
【００３１】
これによれば、学習値が算出された直後に空燃比アクティブ制御が実行される。そして、算出された新たな学習値と最終燃料噴射時間とに基づいて実燃料量が算出され、算出された実燃料量に基づいて前記触媒の酸素収支の変化量が算出される。このとき、上記学習値が最新の値となっているから、算出される実燃料量は空燃比アクティブ制御実行中の真の燃料量に極めて近い値として得られる。従って、酸素収支の変化量が極めて精度良く算出される。この結果、触媒の酸素収支量は精度のよい酸素収支の変化量に基づいて正確に算出され得る。
【００３２】
これにより、空燃比アクティブ制御中における設定リーン空燃比から設定リッチ空燃比への又はその逆への空燃比切換えタイミングを、酸素収支量の大きさに基づいて決定する装置（例えば、酸素収支量の変化幅が劣化している触媒の最大酸素吸蔵量を僅かに超えたときに空燃比を切り換える装置）にあっては、同空燃比切換えタイミングを望ましいタイミングにすることができる。このタイミングにて空燃比を切り換えれば、例えば、劣化触媒の場合には触媒の酸素吸蔵量が０及び最大酸素吸蔵量に到達し、非劣化触媒の場合には触媒の酸素吸蔵量が０と最大酸素吸蔵量の間で変化するように、触媒の酸素吸蔵量を制御できるから、装着されている触媒が劣化触媒である場合と非劣化触媒である場合とで触媒下流空燃比センサの出力を大きく異ならしめることができる。従って、触媒が劣化したことを精度良く判定することができる。また、装着されている触媒が非劣化触媒である場合、酸素吸蔵量が０又は最大酸素吸蔵量に到達しないようにできるので、エミッションの悪化を回避することもできる。
【００３３】
また、酸素収支量に基づいて触媒の最大酸素吸蔵量を求めるとともに、その最大酸素吸蔵量に基づいて触媒が劣化しているか否かを判定する装置においても、最大酸素吸蔵量が精度良く求められることから、触媒が劣化しているか否かを精度良く判定することができる。
【００３４】
この場合、前記空燃比アクティブ制御手段は、
前記空燃比アクティブ制御実行中において前記算出された酸素収支の変化量に基づいて同触媒の酸素収支量を算出し、同酸素収支量が、前記触媒が劣化していると判定すべき触媒である場合に示す前記触媒の最大酸素吸蔵量の最大値より大きく且つ同触媒が劣化していないと判定すべき触媒である場合に示す同触媒の最大酸素吸蔵量の最小値より小さい値に設定されている酸素収支閾値に到達したとき及び０となったとき、同機関に供給される混合気の空燃比を前記設定リーン空燃比から前記設定リッチ空燃比に及びその逆へそれぞれ切り換えるように構成されることが好適である。
【００３５】
これによれば、前記酸素収支の変化量に基づいて触媒の酸素収支量が求められる。前記酸素収支の変化量は空燃比アクティブ制御の直前に取得された学習値に基づいて求められているから正確な値に近い。従って、酸素収支量も正確な値に近い。そして、その酸素収支量が酸素収支閾値に到達したとき、機関に供給される混合気の空燃比が設定リーン空燃比から設定リッチ空燃比に切換えられる。また、その酸素収支量が０に到達したとき、機関に供給される混合気の空燃比が設定リッチ空燃比から設定リーン空燃比に切換えられる。更に、酸素収支閾値は、前記触媒が劣化していると判定すべき触媒である場合に示す同触媒の最大酸素吸蔵量の最大値より大きく且つ同触媒が劣化していないと判定すべき触媒である場合に示す同触媒の最大酸素吸蔵量の最小値より小さい値に設定されている。
【００３６】
従って、触媒が劣化していてその最大酸素吸蔵量が小さくなっている場合には、同触媒の酸素が完全に消費（放出）されて同触媒の下流に理論空燃比よりもリッチな空燃比のガス（ＨＣ，ＣＯなどの未燃成分を過剰に含むガス）が流出する状態、及び、同触媒の酸素吸蔵量が最大酸素吸蔵量となって同触媒の下流に理論空燃比よりもリーンな空燃比のガス（酸素を過剰に含むガス）が流出する状態となるように、機関に供給される混合気の空燃比を制御することができる。この結果、触媒下流の空燃比センサ出力は大きく変動することになる。
【００３７】
これに対し、触媒が劣化しておらずその最大酸素吸蔵量が大きい場合には、同触媒の酸素吸蔵量が０と最大酸素吸蔵量との間で変化するように機関に供給される混合気の空燃比を制御することができる。この場合、触媒の酸素吸蔵量は０にもならず、最大酸素吸蔵量にもならないから、触媒下流の空燃比センサ出力の変動は小さくなり、しかも、触媒は未燃成分及びNOxを十分に浄化することができる。従って、エミッションを極力悪化させることなく、触媒劣化判定を精度よく行うことができる。
【００３８】
このような制御は、触媒の酸素吸蔵量が略０又は略最大酸素吸蔵量付近にあるときに、空燃比アクティブ制御を開始することにより容易に達成することができる。
【００３９】
触媒の酸素吸蔵量が略０付近にあるときは、設定リーン空燃比から空燃比アクティブ制御を開始する。触媒の酸素吸蔵量が略０付近にあるか否かは、下流側空燃比センサの出力が理論空燃比よりリーンな空燃比を示している状態から、理論空燃比よりもリッチな空燃比を示している状態に変化したか否かから判断できる。また、触媒の酸素吸蔵量が略０付近にあるか否かは、下流側空燃比センサの出力が理論空燃比よりもリッチな空燃比を示している状態において、十分な量のリッチな空燃比のガス（劣化触媒の示す最大酸素吸蔵量の最大値以上の量の酸素を消費するに十分な量のリッチな空燃比のガス）が触媒に付与されたか否かからも判断できる。
【００４０】
一方、触媒の酸素吸蔵量が略最大酸素吸蔵量付近にあるときは、設定リッチ空燃比から空燃比アクティブ制御を開始する。触媒の酸素吸蔵量が略最大酸素吸蔵量付近にあるか否かは、下流側空燃比センサの出力が理論空燃比よりリッチな空燃比を示している状態から、理論空燃比よりもリーンな空燃比を示している状態に変化したか否かから判断できる。また、触媒の酸素吸蔵量が略最大酸素吸蔵量付近にあるか否かは、下流側空燃比センサの出力が理論空燃比よりもリーンな空燃比を示している状態において、十分な量のリーンな空燃比のガス（劣化触媒の示す最大酸素吸蔵量の最大値以上の量の酸素を供給するに十分な量のリーンな空燃比のガス）が触媒に付与されたか否かからも判断できる。
【００４１】
このように、上記構成によれば、触媒が劣化触媒である場合、その酸素吸蔵量は０から最大酸素吸蔵量の範囲で変化し、触媒が非劣化触媒である場合、その酸素吸蔵量は０及び最大酸素吸蔵量の何れにも到達することがないように（或いは、何れか一方のみに丁度到達するように）、空燃比アクティブ制御を実行することができる。従って、触媒が劣化触媒であるとき、下流側空燃比センサの出力波形が、触媒が非劣化触媒であるときよりも大きく変化するから、触媒が劣化していることを確実に判定することができる。また、触媒が非劣化触媒である場合、HC、CO或いはNOxの排出量を低減することができる。
【００４２】
更に、前記空燃比アクティブ制御手段は、
前記機関に供給される混合気の空燃比を前記設定リーン空燃比に設定している場合、前記下流側空燃比センサの出力が理論空燃比よりもリッチな空燃比を示す値から理論空燃比よりもリーンな空燃比を示す値に変化したとき、前記算出された酸素収支量の値に関わらず同機関に供給される混合気の空燃比を前記設定リッチ空燃比に切り換え、
前記機関に供給される混合気の空燃比を前記設定リッチ空燃比に設定している場合、前記下流側空燃比センサの出力が理論空燃比よりもリーンな空燃比を示す値から理論空燃比よりもリッチな空燃比を示す値に変化したとき、前記算出された酸素収支量の値に関わらず同機関に供給される混合気の空燃比を前記設定リーン空燃比に切り換えるように構成されることが好適である。
【００４３】
これによれば、触媒の酸素吸蔵量が０又は最大酸素吸蔵量に到達し、同触媒からHC、COやNOxが多量に排出される状態になったとき、直ちに空燃比が切換えられるので、これらの排出量を低減することができる。
【００４４】
ところで、空燃比アクティブ制御の実行中において、例えば、吸気通路の燃料付着量が急激に変化するなどの状況が発生すると、空燃比アクティブ制御の直前に算出した学習値を使用して実際の燃料量（実燃料量）を算出したとしても、その学習値が適値ではなくなるから、同実燃料量と真の燃料量との差が大きくなる。従って、この場合、酸素収支の変化量が不正確となって、空燃比アクティブ制御中に十分な大きさの酸素収支を触媒に与えられない場合が発生するので、下流側空燃比センサ出力に基づいて求められる触媒劣化指標値が触媒劣化の程度を十分に表さなくなる恐れがある。
【００４５】
即ち、空燃比アクティブ制御中において、触媒が劣化触媒である場合でも、その酸素吸蔵量が０には到達しても最大酸素吸蔵量に到達せず、或いは、最大酸素吸蔵量には到達しても０には到達しない場合が発生する。それ故、そのときの触媒劣化指標値は、非劣化触媒が装着されている場合の触媒劣化指標値に近い値となる。従って、劣化触媒を非劣化触媒として誤判定する場合がある。また、触媒劣化指標値として最大酸素吸蔵量を使用する場合であっても、その最大酸素吸蔵量の算出精度が悪化するから、触媒劣化判定を正確に行えない恐れがある。
【００４６】
そこで、前記触媒劣化判定手段は、前記空燃比アクティブ制御終了直後であって前記触媒劣化の判定を行う直前に、前記学習値算出手段に前記学習値の算出を再度行わせ、同空燃比アクティブ制御直前に算出した学習値と同空燃比アクティブ制御直後に算出した学習値との偏差に基づいて（前記空燃比アクティブ制御期間中の）中心空燃比の変化に応じた値を算出し、同中心空燃比の変化に応じた値が所定の中心空燃比閾値より大きいとき、前記触媒劣化指標値に基づく触媒劣化判定を行わないように構成されることが好適である。
【００４７】
これによれば、空燃比アクティブ制御中における中心空燃比の変化が大きいことにより空燃比アクティブ制御直前に取得した学習値が正確でなくなり、従って、算出された酸素収支の変化量が正確でないために、下流側空燃比センサ出力に基づいて求められる触媒劣化指標値（酸素収支の変化量に基づいて得られる最大酸素吸蔵量を含む。）が触媒劣化の程度を十分に表さなくなっている場合、触媒劣化判定を行わない。従って、触媒劣化判定を誤ることなく行うことが可能となる。
【００４８】
また、前記所定の中心空燃比変化閾値は、前記酸素収支閾値が大きくなるほど大きくなるように設定されていることが好適である。
【００４９】
酸素収支閾値が大きい値に設定されているときには、中心空燃比が多少変化したとしても、劣化触媒の酸素吸蔵量を０と最大酸素吸蔵量とに到達させ得る可能性が増大する。従って、触媒が劣化触媒である場合と非劣化触媒である場合とで下流側空燃比センサの出力に差が現れる。それ故、前記所定の中心空燃比変化閾値を、前記酸素収支閾値が大きくなるほど大きくなるように設定しても、劣化触媒を非劣化触媒であると誤判定することはない。また、前記中心空燃比変化閾値をそのように設定することにより、前記触媒劣化指標値を使用した触媒劣化判定の実行機会を増大することができる。
【００５０】
更に、前記学習値算出手段は、
前記空燃比アクティブ制御の直前に行う前記学習値の算出に対する学習条件よりも前記空燃比アクティブ制御の直後に行う前記学習値の算出に対する学習条件を緩和させるように構成されることが好ましい。
【００５１】
空燃比アクティブ制御の直後に学習値が得られなければ、中心空燃比の変化に応じた値を得ることができない。一方、酸素収支の変化量は、空燃比アクティブ制御の直前に得られた学習値に基づいて算出されるから、空燃比アクティブ制御の直後に得られる学習値には、空燃比アクティブ制御の直前に得られる学習値ほど精度が要求されない。従って、上記のように構成すれば、中心空燃比の変化に応じた値を得て、触媒劣化判定を行うべきか否かを判断する機会が増大し、その結果、触媒劣化判定を行い得る機会が増大する。
【００５２】
一方、
前記学習値算出手段は、
前記所定の学習条件とは異なる別の学習条件が満たされたとき前記フィードバック量の平均値に対応する値を算出するとともに、同平均値に対応する値が正の所定値より大きい場合に増大され且つ同平均値に対応する値が負の所定値より小さい場合に減少されるように第１学習値を算出し、前記所定の学習条件が満たされたとき前記フィードバック量の平均値に対応する他の値を第２の学習値として算出し、
前記最終燃料噴射時間決定手段は、
前記フィードフォワード燃料噴射量を少なくとも前記第１学習値により補正するとともに、同補正されたフィードフォワード燃料噴射量を前記フィードバック量で補正することにより最終燃料噴射時間を決定し、
前記酸素収支変化量算出手段は、
前記最終燃料噴射時間と前記第１学習値及び前記第２学習値とに基づいて前記実燃料量を算出し、同算出された実燃料量に基づいて前記触媒の酸素収支の変化量を算出し、
前記空燃比アクティブ制御手段は、
前記所定の触媒劣化指標値取得条件が満たされたとき、前記学習値算出手段に前記第２学習値の算出を行わせ、同第２学習値の算出直後に前記空燃比アクティブ制御を実行するように構成されることが好適である。
【００５３】
なお、前記最終燃料噴射時間決定手段は、前記フィードフォワード燃料噴射量を前記第１学習値のみでなく前記第２学習値によっても補正し、同補正されたフィードフォワード燃料噴射量を前記フィードバック量で補正することにより最終燃料噴射時間を決定してもよい。
【００５４】
このように、学習値を第１学習値と第２学習値とに分け、且つ、それぞれの学習条件を適切に設定すれば、さほど精度を必要としないが高頻度に更新され得る第１学習値により、通常は、機関に供給される混合気の空燃比を制御し、頻繁には更新され難いが実燃料量（従って、酸素収支の変化量）を正確に求めるために高精度を必要とする第２学習値を空燃比アクティブ制御直前に学習させることで、触媒劣化判定の精度を高めることができる。
【００５５】
更に、第１学習値と第２学習値を学習する上記装置において、
前記触媒劣化判定手段は、
前記空燃比アクティブ制御終了直後であって前記触媒劣化の判定を行う直前に、前記学習値算出手段に前記第２学習値の算出を再度行わせ、同空燃比アクティブ制御直前に算出した第２学習値と同空燃比アクティブ制御直後に算出した第２学習値との偏差に基づいて前記中心空燃比の変化に応じた値を算出するように構成されることが好適である。
【００５６】
これによれば、中心空燃比の変化に応じた値を精度良く求めることができる。
【００５７】
前記触媒劣化指標値は、前記下流側空燃比センサの出力の波形に応じた値であってもよい。この場合、前記触媒劣化指標値は、例えば、前記下流側空燃比センサの出力の軌跡長であってもよく、下流側空燃比センサ出力が所定の値を横切る頻度（周波数）や、下流側空燃比センサ出力と所定値とにより囲まれる部分の面積などであってもよい。
【００５８】
また、前記触媒劣化指標値は、前記算出された触媒の酸素収支の変化量に基づいて算出される触媒の最大酸素吸蔵量であってもよい。
【発明を実施するための最良の形態】
【００５９】
以下、本発明による内燃機関の触媒劣化判定装置を含む燃料噴射量制御装置（空燃比制御装置）の実施形態について図面を参照しつつ説明する。この装置は、内燃機関に供給される混合気の空燃比を制御する空燃比制御装置でもある。
【００６０】
図１は、本発明の一実施形態に係る空燃比制御装置を４サイクル火花点火式多気筒内燃機関１０に適用したシステムの概略構成を示している。なお、図１は、特定気筒の断面のみを示しているが、他の気筒も同様な構成を備えている。
【００６１】
この内燃機関１０は、シリンダブロック、シリンダブロックロワーケース及びオイルパン等を含むシリンダブロック部２０と、シリンダブロック部２０の上に固定されるシリンダヘッド部３０と、シリンダブロック部２０にガソリン混合気を供給するための吸気系統４０と、シリンダブロック部２０からの排ガスを外部に放出するための排気系統５０とを含んでいる。
【００６２】
シリンダブロック部２０は、シリンダ２１、ピストン２２、コンロッド２３及びクランク軸２４を含んでいる。ピストン２２はシリンダ２１内を往復動し、ピストン２２の往復動がコンロッド２３を介してクランク軸２４に伝達され、これにより同クランク軸２４が回転するようになっている。シリンダ２１とピストン２２のヘッドは、シリンダヘッド部３０とともに燃焼室２５を形成している。
【００６３】
シリンダヘッド部３０は、燃焼室２５に連通した吸気ポート３１、吸気ポート３１を開閉する吸気弁３２、吸気弁３２を駆動するインテークカムシャフトを含むとともに同インテークカムシャフトの位相角及びリフト量を連続的に変更する可変吸気タイミング装置３３、可変吸気タイミング装置３３のアクチュエータ３３ａ、燃焼室２５に連通した排気ポート３４、排気ポート３４を開閉する排気弁３５、排気弁３５を駆動するエキゾーストカムシャフト３６、点火プラグ３７、点火プラグ３７に与える高電圧を発生するイグニッションコイルを含むイグナイタ３８及び燃料を吸気ポート３１内に噴射するインジェクタ（燃料噴射手段）３９を備えている。
【００６４】
インジェクタ３９は、図示しない燃料配管を介して図示しない燃料ポンプに接続されている。燃料ポンプは、図示しない燃料タンクから燃料を吸引して燃料配管に吐出するようになっている。燃料配管には図示しないプレッシャレギュレータが介装されている。プレッシャレギュレータは、吸気管内の圧力とインジェクタ３９の液体通路間の差圧を一定に維持するようになっている。これにより、インジェクタ３９が駆動されたとき（噴射弁が開弁されたとき）、インジェクタ３９から略一定の流量の燃料が噴射されるようになっている。
【００６５】
吸気系統４０は、吸気ポート３１に連通し同吸気ポート３１とともに吸気通路を形成するインテークマニホールドを含む吸気管４１、吸気管４１の端部に設けられたエアフィルタ４２、吸気管４１内にあって吸気通路の開口断面積を可変とするスロットルバルブ４３及びスワールコントロールバルブ（以下、「ＳＣＶ」と称呼する。）４４を備えている。      
【００６６】
スロットルバルブ４３は、ＤＣモータからなるスロットルバルブアクチュエータ４３ａにより吸気管４１内で回転駆動されるようになっている。ＳＣＶ４４は、ＤＣモータからなるＳＣＶアクチュエータ４４ａにより回転駆動されるようになっている。
【００６７】
排気系統５０は、排気ポート３４に連通したエキゾーストマニホールド５１、エキゾーストマニホールド５１に接続されたエキゾーストパイプ５２、エキゾーストパイプ５２に配設された上流側触媒５３、上流側触媒５３よりも下流のエキゾーストパイプ５２に配設された下流側触媒５４を備えている。排気ポート３４、エキゾーストマニホールド５１及びエキゾーストパイプ５２は、排気通路を構成している。
【００６８】
上流側触媒５３及び下流側触媒５４のそれぞれは、所謂、白金等の貴金属からなる活性成分を担持する三元触媒装置である。各触媒は、触媒に流入するガスがほぼ理論空燃比であるとき、ＨＣ，ＣＯなどの未燃成分を酸化するとともに、窒素酸化物（NOx）を還元する機能を有する。更に、各触媒は、酸素を吸蔵（貯蔵）する酸素吸蔵機能を有し、この酸素吸蔵機能により空燃比が理論空燃比から偏移したとしても未燃成分及び窒素酸化物を浄化することができる。この酸素吸蔵機能は、触媒に担持されているセリア(CeO2)によってもたらされる。
【００６９】
一方、このシステムは、熱線式エアフローメータ６１、吸気温センサ６２、スロットルポジションセンサ６３、カムポジションセンサ６４、クランクポジションセンサ６５、水温センサ６６、上流側空燃比センサ６７、下流側空燃比センサ（酸素濃度センサ）６８、及びアクセル開度センサ６９を備えている。
【００７０】
エアフローメータ６１は、吸気管４１内を流れる吸入空気の質量流量Gaに応じた信号を出力するようになっている。吸気温センサ６２は、吸入空気の温度を検出し、吸気温度THAを表す信号を出力するようになっている。スロットルポジションセンサ６３は、スロットルバルブ４３の開度（スロットルバルブ開度）を検出し、スロットルバルブ開度TAを表す信号を出力するようになっている。
【００７１】
カムポジションセンサ６４は、インテークカムシャフトが９０°回転する毎に（即ち、クランク軸２４が１８０°回転する毎に）一つのパルスを有する信号（Ｇ２信号）を発生するようになっている。クランクポジションセンサ６５は、クランク軸２４が１０°回転する毎に幅狭のパルスを有するとともに同クランク軸２４が３６０°回転する毎に幅広のパルスを有する信号を出力するようになっている。この信号は、エンジン回転速度NEを表す。水温センサ６６は、内燃機関１０の冷却水の温度を検出し、冷却水温THWを表す信号を出力するようになっている。
【００７２】
上流側空燃比センサ６７は、排気通路であって上流側触媒５３よりも上流側に配設されている。上流側空燃比センサ６７は、所謂「限界電流式酸素濃度センサ」であって、上流側触媒５３に流入する排ガス中の空燃比を検出し、図２に示したように、検出した空燃比に応じた信号Vabyfsを出力するようになっている。
【００７３】
下流側空燃比センサ６８は、排気通路であって上流側触媒５３よりも下流側であり下流側触媒５４よりも上流側に配設されている。下流側空燃比センサ６８は、固体電解質型センサ（安定化ジルコニアを用いた周知の濃淡電池型の酸素濃度センサ）であり、ジルコニアの両側に白金からなる検出電極と白金からなる基準電極とを備えている。検出電極は多孔質のセラミックにより覆われている。基準電極は大気に曝され、多孔質セラミックにより覆われた検出電極は上流側触媒５３から流出したガス（上流側触媒５３と下流側触媒５４との間の排気通路内のガス）に曝されている。
【００７４】
下流側空燃比センサ６８は、検出電極と基準電極の間の酸素濃度（酸素分圧）の差に基づいて変化する出力特性を示す。即ち、下流側空燃比センサ６８は、図３に示したように、検出対象のガスの空燃比が理論空燃比よりもリッチ及びリーンのとき最大出力値max及び最小出力値minをそれぞれ出力するようになっている。
【００７５】
アクセル開度センサ６９は、運転者によって操作されるアクセルペダル７０の操作量Accpを表す信号を出力するようになっている。
【００７６】
電気制御装置８０は、互いにバスで接続されたＣＰＵ８１、ＣＰＵ８１が実行するプログラム、テーブル（マップ、関数）及び定数等を予め記憶したＲＯＭ８２、ＣＰＵ８１が必要に応じてデータを一時的に格納するＲＡＭ８３、電源が投入された状態でデータを格納するとともに同格納したデータを電源が遮断されている間も保持するバックアップＲＡＭ８４並びにＡＤコンバータを含むインターフェース８５等からなるマイクロコンピュータである。
【００７７】
インターフェース８５は、前記センサ６１〜６９と接続され、ＣＰＵ８１にセンサ６１〜６９からの信号を供給するとともに、ＣＰＵ８１の指示に応じて可変吸気タイミング装置３３のアクチュエータ３３ａ、イグナイタ３８、インジェクタ３９、スロットルバルブアクチュエータ４３ａ及びＳＣＶアクチュエータ４４ａに駆動信号を送出するようになっている。
【００７８】
＜触媒劣化判定方法の概要＞
次に、上記のように構成された触媒劣化判定装置を含む燃料噴射量制御装置による触媒劣化判定方法について、関連する制御とともに説明する。以下の機能は、電気制御装置８０により達成される。
【００７９】
＜燃料噴射量制御＞
電気制御装置８０は、下記(10)式に基づいて最終燃料噴射時間taufinalを決定する。最終燃料噴射時間taufinalは、吸気行程を迎えた気筒の一回の吸気行程に対する実際の燃料噴射時間である。この時間だけ、前記気筒に対して備えられたインジェクタ３９が開弁される。
taufinal＝(1+efafgx)・tfbse・khosei・kactive＋tdfi                  …(10)
【００８０】
(10)式において、
tfbseは、吸気行程を迎えた気筒の一回の吸気行程において吸入される混合気の空燃比を理論空燃比とするための基本燃料噴射時間である。本例において、tfbseは、前記気筒の一回の吸気行程において吸入された吸入空気量Gnに基づいて求められる。吸入空気量Gnは、エアフローメータ６１により計測された吸入空気流量Gaをエンジン回転数NEにより除した値に基づいて求められる。なお、吸入空気の挙動を物理モデルにより表した空気モデルにより直接的に吸入空気量Gnを求めても良い。
【００８１】
khoseiは、機関の暖機時において機関に供給される混合気の空燃比をリッチ空燃比に設定したり、アイドル運転中にエンジン回転速度の変動を抑制するように空燃比を調整するための係数である。以下、説明を簡単にするため、khoseiの値は１．０に設定されているものとする。
【００８２】
kactiveは、空燃比アクティブ制御を行うための増量又は減量係数である。空燃比アクティブ制御は、後に詳述するように、機関に供給される混合気の空燃比を理論空燃比よりもリッチ側の空燃比である設定リッチ空燃比と同理論空燃比よりもリーン側の空燃比である設定リーン空燃比とに交互に変更する制御である。kactiveは、機関に供給される混合気の空燃比を設定リッチ空燃比とするとき１．０より大きい値に設定され、同空燃比を設定リーン空燃比とするとき１．０より小さい値に設定される。
【００８３】
tdfiは、機関に供給される混合気の空燃比を目標空燃比に一致させるためのフィードバック量（時間）である。フィードバック量tdfiは、後に詳述するように、少なくとも上流側空燃比センサ６７の出力に基づいて求められる。
【００８４】
efafgxは、フィードバック量tdfiの絶対値を小さくするように算出される学習値である。efafgxは第１学習値と呼ばれる。第１学習値efafgxは、例えば、インジェクタ３９の製造上のバラツキに起因する噴射性能の個体差や経時変化に起因する噴射性能の変化及び燃料付着量の変化等による空燃比のズレを補償することにより、狙いの空燃比を達成するための値である。
【００８５】
第１学習値efafgxは、フィードバック量tdfiの絶対値を小さくするように（フィードフォワード量tdfiが０を含む第１の幅（−A1〜A1）に収束するように算出される。換言すると、第１学習値efafgは、フィードバック量tdfiによる燃料噴射時間(tfbse・khosei・kactive）の補正分を小さくするように算出される。即ち、第１学習値efafgは、フィードバック量tdfiの平均値に対応する値（FAFSM(i)）を算出するとともに、同平均値に対応する値（FAFSM(i)）が正の所定値A1より大きい場合にΔgxだけ増大され、且つ、同平均値に対応する値（FAFSM(i)）が負の所定値−A1より小さい場合にΔgxだけ減少されることにより算出される。以上から明らかなように、第１学習値efafgxは、第１の幅（−A1〜A1）である不感帯を有する。第１学習値efafgxの学習方法（取得方法）は後に詳述する。
【００８６】
また、第１学習値efafgは、空燃比フィードバック制御が停止されることにより、フィードバック量tdfiが「０」と等しくなったときであっても、狙いとする空燃比が実質的に達成されるように求められる値と言うこともできる。第１学習値efafgxは、機関１０の運転領域毎（例えば、吸入空気量Gnについての領域毎）に個別に求められ、且つ、機関１０の運転領域に応じて記憶される。第１学習値efafgxは、機関１０の運転領域に対応されながら記憶された値がメモリ（バックアップメモリ）から読み出され、その読み出された値が上記(10)式に従って最終燃料噴射時間taufinalに反映される。
【００８７】
ここで、最終燃料噴射時間taufinalの補正には用いられないが、実際の燃料量（実燃料量）を求めるために使用される第２学習値efafgについて簡単に説明する。第２学習値efafgは、第１学習値efafgxの学習条件（第１学習条件）とは異なる学習条件（第２学習条件）であって、第１学習値efafgxの学習条件よりも厳しい学習条件が成立したときに更新される。換言すると、第１学習値efafgxは、第２学習値efafgを更新するための学習条件よりも緩和された学習条件が成立したときに更新される。
【００８８】
第２学習値efafgの不感帯は、第１学習値efafgxの不感帯よりも小さく、本例においては「０」である。換言すると、第２学習値efafgは、前記第２学習条件が満たされたとき、前記フィードバック量tdfiの平均値に対応する他の値（即ち、フィードバック量tdfiを比率に換算して得られるフィードバック補正係数FAFのピーク値FAFPKの平均値FAFAVEのピーク値FAFAVEPKの平均値SFAFAVEPK/Cfafgth）と等しい。第２学習値efafgは、機関１０の運転領域にかかわらず使用される。第２学習値efafgxの学習方法（取得方法）は後に詳述する。
【００８９】
つまり、電気制御装置８０は、所定の学習条件（第１学習条件）が満たされたとき、前記フィードバック量tdfiによる前記フィードフォワード燃料噴射量の補正分が前記第２の幅を含む第１の幅内(後述するFAFに換算して−A1〜A1)となるように第１学習値efafgxを算出・記憶する。また、電気制御装置８０は、第１学習条件とは異なる別の学習条件（第１学習条件よりも厳しい第２学習条件）が満たされたとき、前記フィードバック量tdfiの平均値に対応する他の値そのものを第２学習値efafgとして算出・記憶する。
【００９０】
ところで、この燃料噴射量制御装置は、燃料噴射時間がtauであるときにtau・KINJCだけの質量の燃料が機関１０に供給されるように設計されている。KINJCは、インジェクタの開弁時間を質量に変換する係数である。そして、そのように設計された燃料噴射量制御装置において、インジェクタ３９の特性や吸気通路の燃料付着量等が変化した場合等であっても、第１学習値efafgxが正確に得られていれば、燃料噴射時間を(1+efafg)・tauとすることにより設計上期待したKINJC・tauに極めて近い質量の燃料が実際に機関１０に供給される。また、第１学習値efafgx及び第２学習値efafgが正確に得られていれば、燃料噴射時間がtaufinalであるとき、KINJC・taufinal／(1+efafgx+efafg)なる値は、実際に機関に供給された真の燃料量と極めて近い値となる。なお、(10)式に代えて、下記(10a)式のように、第１学習値efafgx及び第２学習値efafgの両方によりフィードフォワード燃料噴射量を補正して、最終燃料噴射時間taufinalを求めてもよい。
taufinal＝(1+efafgx+efafg)・tfbse・khosei・kactive＋tdfi              …(10a)
【００９１】
＜空燃比フィードバック制御（メインフィードバック制御）＞
次に、フィードバック量tdfiを求める空燃比フィードバック制御の概要について説明する。フィードバック量tdfiは、上流側空燃比センサ６７の出力Vabyfsと後述するサブフィードバック量Vafsfbとの和（Vabyfs+Vafsfb）により示される見かけの空燃比abyfs（以下、「上流側制御用空燃比abyfs」と称呼する。）が目標空燃比（目標値）abyfrと一致するように求められる。フィードバック量tdfiは、後述する空燃比フィードバック制御実行条件が成立したときに算出される。
【００９２】
より具体的に述べると、電気制御装置８０は、下記(11)式に示したように、現時点からＮストローク（Ｎ回の吸気行程）前に吸気行程を迎えた気筒の吸入空気量Gn(k−N)を上流側制御用空燃比abyfsで除することにより、現時点からＮストローク前の筒内燃料供給量Fc(k−N)を求める。値Ｎは、内燃機関の排気量及び燃焼室２５から上流側空燃比センサ６７までの距離等により異なる値である。
Fc(k−N)＝Gn(k−N)／abyfs        …(11)
【００９３】
次いで、電気制御装置８０は、下記(12)式に示したように、現時点からＮストローク前の吸入空気量Gn(k−N)を現時点からＮストローク前の時点における目標空燃比abyfr(k−N)で除することにより、現時点からＮストローク前の目標筒内燃料供給量Fcr(k−N)を求める。
Fcr(k−N)＝Gn(k−N)／abyfr (k−N)        …(12)
【００９４】
そして、電気制御装置８０は、目標筒内燃料供給量Fcr(k−N)から筒内燃料供給量Fc(k−N)を減じた値を筒内燃料供給量偏差DFcとして設定する。つまり、筒内燃料供給量偏差DFcは、Ｎストローク前の時点で筒内に供給された燃料の過不足分（Dfc＝Fcr(k−N)−Fc(k−N)）を表す量となる。その後、電気制御装置８０は、下記(13)式に基いてフィードバック量tdfiを求める。
tdfi＝(Gp・DFc＋Gi・SDFc)・KFB／KINJC        …(13)
【００９５】
上記(13)式において、Gpは予め設定された比例ゲイン、Giは予め設定された積分ゲインである。なお、(13)式の係数KFBはエンジン回転速度NE及び吸入空気量Gn等により可変とすることが好適であるが、ここでは「１」としている。また、値SDFcは筒内燃料供給量偏差DFcの積分値（積算値）である。以上のように、フィードバック量tdfiが比例積分制御により求められる。
【００９６】
＜サブフィードバック制御＞
次に、下流側空燃比センサ６８の出力Voxsに基く空燃比フィードバック制御について説明する。かかる制御はサブフィードバック制御とも呼ばれる。このサブフィードバック制御により、上述したサブフィードバック量Vafsfbが算出される。サブフィードバック制御は、上流側触媒５３から流出するガスの空燃比が理論空燃比となるようにするための制御である。
【００９７】
より具体的に述べると、電気制御装置８０は、目標値（閾値）Voxsrefから現時点の下流側空燃比センサ６８の出力Voxsを減じることにより出力偏差量DVoxs（＝Voxsref−Voxs）を求め、下記(14)式に基いてサブフィードバック量Vafsfbを求める。目標値Voxsrefは、上流側触媒５３から流出するガスの空燃比が理論空燃比であるときに、下流側空燃比センサ６８が出力するであろう値に選択されている。
Vafsfb＝Kp・DVoxs＋Ki・SDVoxs            …(14)
【００９８】
上記(14)式において、Kpは予め設定された比例ゲイン、Kiは予め設定された積分ゲインである。また、SDVoxsは、出力偏差量DVoxsの積分値（積算値）である。このようにして、サブフィードバック量Vafsfbが求められ、この値は前述したように上流側空燃比センサ６７の実際の出力に加えられ、その和（Vabyfs + Vafsfb）が図２に示したマップに基いて前記上流側制御用空燃比abyfsに変換される。換言すると、上流側制御用空燃比abyfsは、上流側空燃比センサ６７が実際に検出している空燃比に対して、下流側空燃比センサ６８の出力Voxsに基づいて求められるサブフィードバック量Vafsfbに相当する分だけ異なる空燃比として求められる。
【００９９】
この結果、筒内燃料供給量Fc(k−N)が上流側空燃比センサ６７の出力Vabyfsのみならず、下流側空燃比センサ６８の出力Voxsに応じて変化するので、フィードバック量tdfiが同下流側空燃比センサ６８の出力Voxsに応じて変更せしめられる。これにより、上流側触媒５３の下流側の空燃比が理論空燃比に一致するように、機関の空燃比が制御せしめられる。
【０１００】
＜第１学習制御（第１学習値の算出）＞
次に、第１学習値efafgxを求める学習制御の概要について説明する。第１学習値efafgxは、空燃比フィードバック制御実行条件が成立したときなどの学習条件（第１学習条件）が成立したときに求められる。
【０１０１】
先ず、学習値の基礎データとなる空燃比フィードバック係数FAFが下記(15)式に基づいて算出される。この計算は、フィードバック量tdfiが更新される毎に実行される。(15)式により、加減算項であるフィードバック量tdfiが、噴射時間tfbse・khosei・kactiveに対する補正率として変換される。ただし、係数kactiveは後述する空燃比アクティブ制御以外の通常時において「１」である。
FAF=tdfi／(tfbse・khosei・kactive)            …(15)
【０１０２】
次いで、空燃比フィードバック係数FAFが得られる毎に、下記(16)式に基づいて空燃比フィードバック係数FAFのなまし値FAFSMを計算する。(16)式において、(i)が付された変数は今回の演算により得られたなまし値FAFSMを示し、(i-1)が付された変数は所定時間前の演算（前回の演算）により得られたなまし値FAFSMを示している。係数γは、０から１までの所定値である。
FAFSM(i)＝γ・FAF ＋（１−γ）・FAFSM(i-1)         
… (16)
【０１０３】
なまし値FAFSMは、機関１０の運転領域毎に計算され、各運転領域に対応して記憶されていく。本例において、運転領域は吸入空気量Gnの大きさにより区分されている。例えば、第１領域はGnが第１閾値以下の領域、第２領域はGnが第１閾値から第１閾値より大きい第２閾値までの領域、第３領域はGnが第２閾値から第２閾値より大きい第３閾値までの領域、第４領域はGnが第３閾値以上の領域である。
【０１０４】
そして、電気制御装置８０は、任意の運転領域においてなまし値FAFSMが所定回数nshoだけ更新されたとき、その時点のFAFSM(i)を用いて第１学習値efafgxを更新する。具体的に述べると、電気制御装置８０は、なまし値FAFSM(i)が閾値A1（＞０）より大きいとき、その運転領域に対応する第１学習値efafgxの値を固定値Δgxだけ増大する。また、電気制御装置８０は、なまし値FAFSM(i)が閾値−A1より小さいとき、その運転領域に対応する第１学習値efafgxの値を固定値Δgxだけ減少する。
【０１０５】
このようにして、各運転領域毎の第１学習値efafgxが更新される。以上から明らかなように、第１学習値efafgxは、なまし値FAFSM(i)が−A1以上であってA1以下のとき更新されない。即ち、第１学習値efafgxは不感帯を有する学習値である。これに対し、第２学習値efafgは不感帯を備えていない。
【０１０６】
＜第２学習制御（第２学習値の算出）＞
次に、第２学習値efafgを求める第２学習制御の概要について説明する。第２学習値efafgは、フィードバック量tdfiが安定しているとき（第２学習条件が満たされたとき）、フィードバック量tdfiに基づいて以下のようにして求められる。フィードバック量tdfiが安定しているときとは、空燃比フィードバック係数FAFが後述する安定条件を満足しているときのことである。第２学習条件は第１学習条件よりも厳しい。従って、第２学習条件が成立する頻度は第１学習条件が成立する頻度よりも小さい。
【０１０７】
なお、電気制御装置８０は、第２学習制御中においてサブフィードバック制御を停止する。また、車両が、燃料タンク等の燃料系から発生するエバポエミッションを図示しないキャニスタに吸着し、そのキャニスタに吸着したエバポエミッションを所定の運転条件成立時に各気筒に吸入させて燃焼させる燃料蒸発ガス排出抑止装置を備えている場合、電気制御装置８０は、第２学習制御中において、そのようなエバポエミッションの各気筒への導入も停止する。
【０１０８】
先ず、電気制御装置８０は、空燃比フィードバック係数FAFがピーク値（極大値又は極小値）となったとき、その時点の空燃比フィードバック係数FAFをFAFピーク値FAFPKとして取り込む。換言すると、空燃比フィードバック係数FAFが反転した時点（空燃比フィードバック係数FAFの傾きの符号が変化した時点）の空燃比フィードバック係数FAFをFAFピーク値FAFPKとして取り込む。
【０１０９】
なお、FAFピーク値FAFPKを取り込んでから所定時間（カウンタがCsthに到達するのに必要な時間）が経過しても、次の空燃比フィードバック係数FAFのピーク値が得られない場合、電気制御装置８０は、同所定時間経過時の空燃比フィードバック係数FAFをFAFピーク値FAFPKとして取り込む。
【０１１０】
そして、電気制御装置８０は、下記(17)式に示したように、今回のFAFピーク値FAFPKと前回のFAFピーク値FAFPKoldの平均値を空燃比フィードバック係数平均値FAFAVEとして採用する。
FAFAVE＝(FAFPK + FAFPKold)／2             …(17)
【０１１１】
次に、電気制御装置８０は、空燃比フィードバック係数平均値FAFAVEのピーク値FAFAVEPKを取り込む。空燃比フィードバック係数平均値のピーク値FAFAVEPKを取り込んでから所定時間（カウンタがCnohanに到達するのに必要な時間）が経過しても次の空燃比フィードバック係数平均値のピーク値FAFAVEPKが得られない場合（即ち、空燃比フィードバック係数平均値FAFAVEが反転せず、その傾きの符号が変化しない場合）、電気制御装置８０は、同所定時間が経過した時点の空燃比フィードバック係数平均値FAFAVEを空燃比フィードバック係数平均値のピーク値FAFAVEPKとして取り込む。
【０１１２】
次に、電気制御装置８０は、空燃比フィードバック係数FAF（実際には、FAFAVEPK）が以下に述べる安定条件を満足する毎に、そのピーク値FAFAVEPKを下記(18)式に従って積算し、FAFAVEピーク値積算値SFAFAVEPKを求める。
SFAFAVEPK＝SFAFAVEPK + FAFAVEPK        …(18)
【０１１３】
その後、電気制御装置８０は、空燃比フィードバック係数平均値のピーク値FAFAVEPKを所定個数Cfafgth個だけ積算したとき、下記(19)式に従って、空燃比フィードバック係数平均値のピーク値FAFAVEPKの平均値を第２学習値efafgとして取得する。
efafg＝SFAFAVEPK／Cfafgth            …(19)
【０１１４】
（空燃比フィードバック係数FAFの安定条件）
上述した、空燃比フィードバック係数FAF（空燃比フィードバック係数平均値のピーク値FAFAVEPK）の安定条件が満たされるとは、以下の二つの条件（条件１、条件２）が共に成立した状態が、所定回数Cfafstthだけ連続することである。
【０１１５】
（条件１）今回得られた空燃比フィードバック係数平均値のピーク値FAFAVEPKと前回得られた空燃比フィードバック係数平均値のピーク値FAFAVEPKoldとの差（ピーク変化量）DLPK（＝FAFAVEPK−FAFAVEPKold）の絶対値が第１安定化判定値DLPKth以下である。つまり、空燃比フィードバック係数平均値のピーク値FAFAVEPKが急激に変化していない。なお、第１安定化判定値DLPKthは、後述するように空燃比アクティブ制御の直前に行う学習に対しては小さく、空燃比アクティブ制御の直後に行う学習に対しては大きく設定される。これにより、空燃比アクティブ制御の直後に行う学習の学習条件（学習値を取り込むことができる条件）は、空燃比アクティブ制御直前に行う学習の学習条件よりも緩和され、第２学習値efafgを取得することができる可能性が増大することになる。ただし、第１安定化判定値DLPKthは、空燃比アクティブ制御の直前に行う学習及び空燃比アクティブ制御の直後に行う学習の何れに対しても同一の固定値であってよい。
【０１１６】
（条件２）過去nth個のピーク変化量DLPKの符号が同一でない。つまり、空燃比フィードバック係数平均値のピーク値FAFAVEPKが緩やかに増大し続けていない。なお、この安定化条件を決定する値（第２安定化判定値）nthは、後述するように空燃比アクティブ制御の直前に行う学習に対しては大きく、空燃比アクティブ制御の直後に行う学習に対しては小さく設定される。これにより、空燃比アクティブ制御の直後に行う学習の学習条件（学習値を取り込むことができる条件）は、空燃比アクティブ制御直前に行う学習の学習条件よりも緩和され、第２学習値efafgを取得することができる可能性が増大することになる。
【０１１７】
＜触媒劣化指標値の取得と空燃比アクティブ制御＞
次に、触媒劣化指標値の取得とそのための空燃比アクティブ制御の概要について説明する。触媒劣化指標値は、空燃比アクティブ制御実行中の所定期間における下流側空燃比センサ６８の出力Voxsの波形に応じた値である。本例では、触媒劣化指標値は、下流側空燃比センサ６８の出力Voxsの軌跡長Lengthである。
【０１１８】
なお、触媒劣化指標値は、例えば、下流側空燃比センサ６８の出力Voxsが所定値（下流側空燃比センサ６８の出力Voxsの最大値と最小値の中央の値、例えばVoxsrefなど）を横切る頻度（周波数）や、下流側空燃比センサ６８の出力Voxsと同所定値とにより囲まれる部分の面積などであってもよい。
【０１１９】
空燃比アクティブ制御は、触媒劣化指標値を取得するとともに、触媒が劣化しているか否かを判定すべき条件（触媒劣化指標値取得条件、即ち、触媒劣化判定実行条件）が満足されたとき、実行される。
【０１２０】
触媒劣化判定実行条件は、例えば、以下の総ての条件が成立したときに成立する。
今回の車両運転開始から（イグニッション・キーがオフ状態からオン状態へと変更されてから）一度も触媒劣化判定が実行されていない。
上流側空燃比センサ６７が正常であり、且つ、活性化している。
下流側空燃比センサ６８が正常であり、且つ、活性化している。
冷却水温THWが所定水温より高い（上流側触媒５３が活性化している。）
【０１２１】
前述したように、空燃比アクティブ制御（触媒劣化指標値を取得するための空燃比制御）は、機関に供給される混合気の空燃比を理論空燃比よりもリッチ側の空燃比である設定リッチ空燃比と同理論空燃比よりもリーン側の空燃比である設定リーン空燃比とに交互に変更する制御である。但し、本実施形態の電気制御装置８０は、空燃比アクティブ制御の直前に前記第２学習制御を行う。換言すると、最新の第２学習値efafg（第２学習値efafgmae）が得られた直後にのみ空燃比アクティブ制御を行い、触媒劣化指標値を取得する。
【０１２２】
また、本電気制御装置８０は、触媒劣化指標値を取得した直後にも第２学習値efafgを取得し、空燃比アクティブ制御直前の学習値（直前第２学習値efafgmae）と同空燃比アクティブ制御直後の学習値（直後第２学習値efafgato）との偏差を求め、その学習値の偏差に基づいて空燃比アクティブ制御中の（触媒劣化指標値取得中の）機関の中心空燃比（機関に供給される混合気の空燃比の平均空燃比）の変化に応じた値Hyokaを算出する。
【０１２３】
そして、電気制御装置８０は、中心空燃比の変化に応じた値Hyokaが所定の閾値（中心空燃比変化閾値）Hyokathより大きいとき、前記触媒劣化指標値に基づく触媒劣化判定を行わず、得られた触媒劣化指標値をキャンセルする。これに対し、Hyokaが中心空燃比変化閾値Hyokathより小さい（以下）のとき、前記触媒劣化指標値に基づく触媒劣化判定を行う。以下、より具体的に説明する。
【０１２４】
先ず、電気制御装置８０は上述した触媒劣化判定条件が成立すると、上述した第２学習制御を行い、空燃比アクティブ制御直前の第２学習値efafgを空燃比アクティブ制御直前第２学習値efafgmaeとして取得する。そして、空燃比アクティブ制御直前第２学習値efafgmaeが得られると、直ちに、空燃比アクティブ制御を開始する。
【０１２５】
空燃比アクティブ制御において、電気制御装置８０は、サブフィードバック制御（及びエバポエミッションの導入）を第２学習制御中と同様に停止し、機関に供給される混合気の空燃比が前記設定リッチ空燃比となるように、目標空燃比abyfrを同設定リッチ空燃比に設定する。同時に、電気制御装置８０は、空燃比アクティブ制御係数kactiveを「１」より大きい所定の値（理論空燃比stoich／目標空燃比abyfr）に設定する。
【０１２６】
次いで、電気制御装置８０は、下流側空燃比センサ出力Voxsが理論空燃比よりもリーンである空燃比を示した状態（Voxs＜Voxsref）から理論空燃比よりリッチである空燃比を示した状態（Voxs≧Voxsref）へと変化したか否かをモニタする。そして、電気制御装置８０は、そのような変化を検出すると、上流側触媒５３に吸蔵されていた酸素が総て消費されたとみなして、上流側触媒５３の酸素収支量Syushiを「０」に設定する。かかる状態が、図４に示した時点t0である。同時に、電気制御装置８０は、目標空燃比abyfrを前記設定リーン空燃比に設定するとともに、空燃比アクティブ制御係数kactiveを「１」より小さい所定の値（理論空燃比stoich／目標空燃比abyfr）に設定する。
【０１２７】
一方、空燃比アクティブ制御の開始時点（目標空燃比abyfrを最初に設定リッチ空燃比に設定した時点）において、下流側空燃比センサ出力Voxsが理論空燃比よりもリッチである空燃比を示した状態（Voxs≧Voxsref）にあると、下流側空燃比センサ出力Voxsが理論空燃比よりもリーンである空燃比を示した状態（Voxs＜Voxsref）から理論空燃比よりリッチである空燃比を示した状態（Voxs≧Voxsref）へと変化せず、上記時点t0（即ち、設定リーン空燃比に変更する時点）が得られない。
【０１２８】
そこで、電気制御装置８０は、空燃比アクティブ制御の開始時点（目標空燃比abyfrを最初に設定リッチ空燃比に設定した時点）から、上流側触媒５３に流入するガスにより上流側触媒５３において放出（消費）されるであろう酸素量である酸素放出量Semitを算出する。酸素放出量Semitの算出方法は、後述する上流側触媒５３における酸素収支量Syushiと同様である。従って、ここでは、酸素放出量Semitの算出方法の説明を省略する。
【０１２９】
そして、電気制御装置８０は、空燃比アクティブ制御開始時において目標空燃比abyfrを設定リッチ空燃比に設定したとき、下流側空燃比センサ出力Voxsが理論空燃比よりもリッチな空燃比を示していた場合、酸素放出量Semitが所定の閾値Sth以上となった時点t0で上流側触媒５３に吸蔵されていた酸素が十分な量だけ消費（放出）された（上流側触媒５３に吸蔵されていた酸素が総て消費された）とみなし、目標空燃比abyfrを前記設定リーン空燃比に設定するとともに、空燃比アクティブ制御係数kactiveを「１」より小さい所定の値（理論空燃比stoich／目標空燃比abyfr）に設定する。同時に、電気制御装置８０は、上流側触媒５３の酸素収支量Syushiを「０」に設定する。
【０１３０】
なお、閾値Sthは、酸素収支閾値、閾値酸素放出量、閾値酸素吸収量又は閾値酸素収支量とも呼ばれる値である。この閾値Sthは、上流側触媒５３が劣化していると判定すべき触媒である場合に上流側触媒５３が示す最大酸素吸蔵量の最大値より大きく、且つ、上流側触媒５３が劣化していないと判定すべき触媒である場合に上流側触媒５３が示す最大酸素吸蔵量の最小値より小さい値に設定されている。
【０１３１】
このようにして、目標空燃比が設定リーン空燃比に設定されると、上流側触媒５３には酸素が吸蔵されて行く。以降、電気制御装置８０は、上流側触媒５３における酸素収支量Syushiを下記(20)式及び(21)式に従って算出するとともに、下流側空燃比センサ出力Voxsの軌跡長Lengthの算出を開始する。
delO2＝0.23・(Gn−taufinal・(1/(1+efafg+efafgx))・KINJC・stoich)    …(20)
Syushi＝ΣdelO2                                                   …(21)
【０１３２】
酸素収支の変化量delO2は、上流側触媒５３に吸収される酸素の変化量（上流側触媒５３に流入するガスに含まれる過剰の酸素の量）を正の値により示し、上流側触媒５３から放出される酸素の変化量（上流側触媒５３に流入するガスにおいて不足する酸素の量、即ち、上流側触媒５３において消費される酸素の量）を負の値により示した値である。
【０１３３】
(20)式及び(21)式において用いられる各変数は、上述したとおりである。stoichは理論空燃比（例えば、１４．５）である。なお、現時点のように機関に供給される混合気の空燃比が設定リーン空燃比の場合、上流側触媒５３に酸素が吸蔵されて行くから、酸素収支量Syushiは酸素吸収量と呼ぶこともできる。
【０１３４】
(20)式によれば、燃料量taufinal・(1/(1+efafg+efafgx))・KINJCに応じた酸素量0.23・(taufinal・(1/(1+efafg+efafgx))・KINJC・stoich)の酸素が機関に供給された燃料により消費されるとして、酸素収支の変化量delO2が算出される。これは、実際の燃料噴射時間が上記(10)式に示された最終燃料噴射時間taufinalであるとき、実際に機関に供給された燃料量はtaufinal・KINJCではなく、(taufinal・(1/(1+efafg+efafgx))・KINJC)に極めて近い量となっているからである。
【０１３５】
また、本実施形態においては、空燃比アクティブ制御の実行直前に第２学習値efafg（＝efafgmae）が算出されているから、第２学習値efafg（実際には、第２学習値と第１学習値の和(efafg+efafgx)）は、現時点の学習値として正しい値に極めて近い。従って、真の燃料量に極めて近い燃料量に基づいて実燃料量taufinal・(1/(1+efafg+efafgx))・KINJCが求められ、その実燃料量に応じて上流側触媒５３における酸素の消費量0.23・taufinal・(1/(1+efafg+efafgx))・KINJC・stoichが求められる。この結果、酸素収支の変化量delO2の値が極めて精度良く算出されるので、酸素収支量Syushi（上流側触媒５３の酸素吸蔵量OSC）及び酸素放出量Semitも極めて精度良く算出される。
【０１３６】
次に、電気制御装置８０は、酸素収支量Syushi（この場合、酸素吸収量）が所定の酸素収支閾値Sth以上となったか否かをモニタする。この酸素収支閾値Sthは、上述した閾値Sthと同じ値である。即ち、酸素収支閾値Sthは、上流側触媒５３が劣化していると判定すべき触媒である場合にその触媒が示す最大酸素吸蔵量の最大値より大きく、且つ、上流側触媒５３が劣化していないと判定すべき触媒である場合にその触媒が示す最大酸素吸蔵量の最小値より小さい値に設定されている。
【０１３７】
同時に、電気制御装置８０は、下流側空燃比センサ出力Voxsが理論空燃比よりもリッチである空燃比を示す値（状態）から理論空燃比よりもリーンである空燃比を示す値（状態）に変化したか否かをモニタする。
【０１３８】
そして、電気制御装置８０は、酸素収支量Syushiが所定の酸素収支閾値Sth以上となった時点、或いは、下流側空燃比センサ出力Voxsが理論空燃比よりもリッチである空燃比を示す状態から理論空燃比よりもリーンである空燃比を示す状態に変化した時点の何れか早い時点t1にて、目標空燃比abyfrを前記設定リーン空燃比から前記設定リッチ空燃比に設定し直すとともに、空燃比アクティブ制御係数kactiveを「１」より大きい前記所定の値（理論空燃比stoich／目標空燃比abyfr）に設定する。
【０１３９】
なお、図４に示した時点t1は、上流側触媒５３が劣化している場合であって、酸素収支量Syushiが所定の酸素収支閾値Sth以上となる前に、下流側空燃比センサ出力Voxsが理論空燃比よりもリッチである空燃比を示す状態から理論空燃比よりもリーンである空燃比を示す状態に変化した時点を示している。
【０１４０】
このように、上記時点t1にて設定リーン空燃比から設定リッチ空燃比に切り換えるのは以下の理由による。上流側触媒５３が劣化していると判定すべき触媒（劣化触媒）である場合、時点t1にて下流側空燃比センサ出力Voxsが理論空燃比よりもリッチである空燃比を示す状態から理論空燃比よりもリーンである空燃比を示す状態に変化するので、下流側空燃比センサ出力Voxsの軌跡長Lengthは相対的に長くなる。
【０１４１】
これに対し、上流側触媒５３が劣化していると判定すべき触媒でない（非劣化触媒である）場合、上流側触媒５３からは理論空燃比のガスが流出し続けるので、下流側空燃比センサ出力Voxsが理論空燃比よりもリーンである空燃比を示す状態に変化しない。その結果、下流側空燃比センサ出力Voxsの軌跡長Lengthは相対的に短くなる。即ち、軌跡長Lengthは、上流側触媒５３が劣化触媒である場合よりも短くなる。
【０１４２】
従って、時点t1にて機関に供給される混合気の空燃比を設定リッチ空燃比に切り換えれば、上流側触媒５３が劣化触媒であるか否かに応じ、劣化指標値としての軌跡長Lengthは確実に異なる値となる。
【０１４３】
更に、下流側空燃比センサ出力Voxsが理論空燃比よりもリッチである空燃比を示す状態から理論空燃比よりもリーンである空燃比を示す状態に変化した場合、上流側触媒５３の酸素吸蔵量は最大酸素吸蔵量に到達していて、もはや上流側触媒５３は酸素を吸蔵することはできず、NOxを浄化することができない。従って、そのような時点（時点t1）以降も機関に供給される混合気の空燃比をリーン空燃比に維持していると、NOxが大量に排出される恐れがある。
【０１４４】
この時点t1以降、機関に供給される混合気の空燃比は設定リッチ空燃比になるから、上流側触媒５３の酸素収支量Syushi（酸素吸蔵量）は次第に減少して行く。換言すると、上流側触媒５３の酸素放出量が次第に増大して行く。
【０１４５】
一方、電気制御装置８０は、上流側触媒５３における酸素収支量Syushiを上述した(20)式及び(21)式に従って引き続き算出する。この場合、(20)式により求められる酸素収支の変化量delO2は負の値となる。
【０１４６】
同時に、電気制御装置８０は、酸素収支量Syushiが「０」となったか否かをモニタする。換言すると、電気制御装置８０は、上記時点t1からの酸素の放出量Shosyutu（＝Σ｜delO2｜、ただし、時点t1以降）が、上記酸素収支閾値（この場合、閾値酸素放出量）Sth以上となったか否かを実質的にモニタする。
【０１４７】
また、電気制御装置８０は、下流側空燃比センサ出力Voxsが理論空燃比よりもリーンである空燃比を示す状態から理論空燃比よりもリッチである空燃比を示す状態に変化したか否かをモニタする。
【０１４８】
そして、電気制御装置８０は、酸素収支量Syushiが０となった時点（酸素放出量Shosyutuが所定の酸素収支閾値Sth以上となった時点）、或いは、下流側空燃比センサ出力Voxsが理論空燃比よりもリーンである空燃比を示す状態から理論空燃比よりもリッチである空燃比を示す状態に変化した時点の何れか早い時点t2にて、目標空燃比abyfrを設定リッチ空燃比から設定リーン空燃比に設定し直すとともに、空燃比アクティブ制御係数kactiveを「１」より小さい前記所定の値（理論空燃比stoich／目標空燃比abyfr）に設定する。
【０１４９】
なお、図４に示した時点t2は、上流側触媒５３の劣化がかなり進行している場合であって、酸素収支量Syushiが０となる前に、下流側空燃比センサ出力Voxsが理論空燃比よりもリーンである空燃比を示す状態から理論空燃比よりもリッチである空燃比を示す状態に変化した時点を示している。
【０１５０】
このように、上記時点t2にて設定リッチ空燃比から設定リーン空燃比に切り換えるのは以下の理由による。上流側触媒５３が劣化していると判定すべき触媒（劣化触媒）である場合、上流側触媒５３に酸素収支閾値Sth以上の酸素放出量Shosyutuを生じさせようとするとき、下流側空燃比センサ出力Voxsは理論空燃比よりもリーンである空燃比を示す状態から理論空燃比よりもリッチである空燃比を示す状態に必ず変化し、その結果、下流側空燃比センサ出力Voxsの軌跡長Lengthが相対的に長くなる。
【０１５１】
これに対し、上流側触媒５３が劣化していると判定すべき触媒でない（非劣化触媒である）場合、上流側触媒５３からは理論空燃比のガスが流出し続けるので、下流側空燃比センサ出力Voxsが理論空燃比よりもリッチである空燃比を示す状態に変化しない。その結果、下流側空燃比センサ出力Voxsの軌跡長Lengthが相対的に短くなる。即ち、軌跡長Lengthは、上流側触媒５３が劣化触媒である場合よりも短くなる。従って、時点t2にて機関に供給される混合気の空燃比を設定リーン空燃比に切り換えれば、上流側触媒５３が劣化触媒であるか否かに応じ、劣化指標値としての軌跡長Lengthは確実に異なる値となる。
【０１５２】
更に、下流側空燃比センサ出力Voxsが理論空燃比よりもリーンである空燃比を示す状態から理論空燃比よりもリッチである空燃比を示す状態に変化した場合、上流側触媒５３の酸素吸蔵量は０に到達していて、もはや酸素を放出することはできず、未燃成分を浄化することができない。従って、そのような時点（時点t2）以降も機関に供給される混合気の空燃比をリッチ空燃比に維持していると、未燃成分が大量に排出される恐れがある。
【０１５３】
以降、電気制御装置８０は、時点t1と同じ状態（図４の時点t3を参照。）が得られると、機関に供給される混合気の空燃比を設定リッチ空燃比に制御し、次いで、時点t2と同じ状態（図４の時点t4を参照。）が得られると機関に供給される混合気の空燃比を設定リーン空燃比に制御する。電気制御装置８０は、このような設定リーン空燃比から設定リッチ空燃比へ及びその逆への交互切換えを数回繰り返し、その間の下流側空燃比センサ出力Voxsの軌跡長Lengthを求める。以上が、触媒劣化指標値（軌跡長Length）を取得するための空燃比アクティブ制御である。
【０１５４】
（触媒劣化判定）
次に、触媒劣化判定方法について説明する。電気制御装置８０は、空燃比アクティブ制御（触媒劣化指標値の取得）を終了すると、その直後に上述した第２学習制御を再び実行し、空燃比アクティブ制御直後の第２学習値efafgを第２学習値efafgatoとして取得する。
【０１５５】
そして、空燃比アクティブ制御期間（実質的に触媒劣化指標値を取得していた期間）における機関に供給される混合気の平均的な空燃比（中心空燃比）の変化に応じた値Hyoka（以下、「中心空燃比変動値Hyoka」とも称呼する。）を、空燃比アクティブ制御直前に算出した第２学習値efafgmaeと同空燃比アクティブ制御直後に算出した第２学習値efafgatoとの偏差に基づいて算出する。即ち、電気制御装置８０は、中心空燃比の変化に応じた値Hyokaを下記(22)式及び(23)式に従って算出する。
efafgave＝(efafgato + efafgmae)／2                     
…(22)
Hyoka＝｜efafgato − efafgmae｜・Stauall／(1+efafgave+efafgxave)       …(23)
ここで、efafgaveは、空燃比アクティブ制御直前第２学習値efafgmaeと空燃比アクティブ制御直後第２学習値efafgatoの平均値である。efafgxaveは、空燃比アクティブ制御機関中に使用された第１学習値efafgxの平均値である。Stauallは、空燃比アクティブ制御実行中における最終燃料噴射時間taufinalの合計値である。
【０１５６】
なお、最終燃料噴射時間taufinalを第２学習値efafgmae及び第１学習値efafgxに1を加えた値で除した値(taufinal/(1+efafgmae+efafgx))を空燃比アクティブ制御期間において積算し、その積算値をStauallとしてもよい。その場合、中心空燃比の変化に応じた値Hyokaは、下記(24)式に基づいて求められる。
Hyoka＝｜efafgato − efafgmae｜・Stauall   
…(24)
【０１５７】
中心空燃比の変化に応じた値Hyokaが所定閾値（評価基準値）Hyokath以上の場合、空燃比アクティブ制御中における中心空燃比の変化が大きかったために（空燃比アクティブ制御直前第２学習値efafgmaeと真の第２学習値との偏差が大きくなったために）、酸素収支の変化量delO2（従って、酸素収支量Syushi）が精度良く算出されていない。その場合、触媒劣化指標値（軌跡長Length）に触媒の劣化程度が適正に反映されていない。従って、電気制御装置８０は、かかる場合に触媒劣化指標値（軌跡長Length）に基づく触媒劣化判定を禁止（キャンセル）する。
【０１５８】
他方、中心空燃比の変化に応じた値Hyokaが所定閾値Hyokathより小さい場合、空燃比アクティブ制御中における中心空燃比の変化は小さいから、酸素収支の変化量delO2（従って、酸素収支量Syushi）は精度良く算出されている。従って、軌跡長Lengthに触媒の劣化程度が適正に反映されているから、電気制御装置８０は、軌跡長Lengthに基づく触媒劣化判定を行う。
【０１５９】
より具体的に述べると、電気制御装置８０は、軌跡長Lengthが劣化判定閾値Ldet以上であれば上流側触媒５３は劣化していると判定し、軌跡長Lengthが劣化判定閾値Ldetより小さければ上流側触媒５３は劣化していないと判定する。
【０１６０】
例えば、図５に示したように、上流側触媒５３が劣化している場合であって、アクティブ空燃比制御実行中に中心空燃比がリーン側に変化すると、酸素放出量が不足し始め、実際の酸素吸蔵量が０に到達しなくなる。従って、下流側空燃比センサ出力Voxsがリーンを示す状態からリッチを示す状態へと変化しなくなる。その結果、上流側触媒５３が劣化触媒である場合に取得される軌跡長Lengthが相対的に短くなるから、同場合の軌跡長Lengthと上流側触媒５３が非劣化触媒である場合に取得される軌跡長Lengthとの差が小さくなり、劣化触媒を非劣化触媒として判定してしまう可能性がある。
【０１６１】
同様に、図６に示したように、上流側触媒５３が劣化している場合であって、アクティブ空燃比制御実行中に中心空燃比がリッチ側に変化すると、上流側触媒５３に吸収される酸素量が不足し始め、実際の酸素吸蔵量が最大酸素吸蔵量に到達しなくなる。従って、下流側空燃比センサ出力Voxsがリッチを示す状態からリーンを示す状態へと変化しなくなる。その結果、上流側触媒５３が劣化触媒である場合に取得される軌跡長Lengthが相対的に短くなるから、同場合の軌跡長Lengthと上流側触媒５３が非劣化触媒である場合に取得される軌跡長Lengthとの差が小さくなり、劣化触媒を非劣化触媒として判定してしまう可能性がある。
【０１６２】
従って、電気制御装置８０は、このような中心空燃比の変化が大きい場合、軌跡長Lengthによる触媒劣化判定を禁止するのである。なお、前記所定の中心空燃比変化閾値Hyokathは、前記酸素収支閾値Sthが大きくなるほど大きくなるように設定されていることが好適である。
【０１６３】
酸素収支閾値Sthが大きい値に設定されているときには、上流側触媒５３に付与される酸素収支量の絶対値は大きくなるから、中心空燃比が変化したとしても、劣化触媒の酸素吸蔵量を０と最大酸素吸蔵量とに到達させ得る可能性が増大する。従って、前記所定の中心空燃比変化閾値Hyokathを、前記酸素収支閾値Sthが大きくなるほど大きくなるように設定しても、劣化触媒と非劣化触媒とで下流側空燃比センサの出力Voxsに差が現れる。また、前記中心空燃比変化閾値Hyokathをそのように設定することで、触媒劣化判定を行うことができる機会を増大することができる。
以上が、本発明による燃料噴射量制御装置による触媒劣化判定方法の概要である。
【０１６４】
＜実際の作動＞
次に、上記のように構成された空燃比制御装置の実際の作動について、電気制御装置８０のＣＰＵ８１が実行するルーチン（プログラム）をフローチャートにより示した図７〜図１８を参照しながら説明する。
【０１６５】
ＣＰＵ８１は、図７に示した最終燃料噴射時間の計算及び燃料噴射の指示を行うルーチンを、所定の気筒のクランク角が吸気上死点前の所定クランク角度（例えば、ＢＴＤＣ９０°ＣＡ）となる毎に、繰り返し実行するようになっている。従って、所定の気筒のクランク角度が前記所定クランク角度になると、ＣＰＵ８１はステップ７００から処理を開始してステップ７０５に進み、エアフローメータ６１により計測された吸入空気量Gaとエンジン回転速度NEとに基いて、機関の空燃比を理論空燃比とするための基本燃料噴射時間tfbseをマップから求める。
【０１６６】
次いで、ＣＰＵ８１はステップ７１０に進み、上記(10)式に従って最終燃料噴射時間taufinalを算出する。このとき、現時点の機関１０の運転領域（吸入空気量Gn）に対応した第１学習値efafgxを読み出し、その読み出した第１学習値efafgxを最終燃料噴射時間taufinalの計算に使用する。そして、ＣＰＵ８１はステップステップ７１５に進み、前記所定の気筒に対応するインジェクタ３９に対し、最終燃料噴射時間taufinalだけ開弁して燃料を噴射する指示を行う。
【０１６７】
次いで、ＣＰＵ８１はステップ７２０に進み、上記(20)式に従って酸素収支の変化量delO2を求め、ステップ７２５に進んで、その時点の酸素放出量Semitにステップ７２０にて求めた酸素収支の変化量delO2の絶対値を加えて新たな酸素放出量Semitを求める。なお、酸素放出量Semitは、空燃比アクティブ制御実行開始時に、後述する図１３のステップ１４３０にて「０」に設定される。
【０１６８】
次に、ＣＰＵ８１はステップ７３０に進み、その時点の酸素収支量Syushiにステップ７２０にて求めた酸素収支の変化量delO2を加えて新たな酸素収支量Syushiを求める。なお、酸素収支量Syushiは、後述する図１３のステップ１４５５にて「０」に設定される。その後、ＣＰＵ８１は、ステップ７３５に進んでその時点の最終燃料噴射時間合計値Stauallに上記ステップ７１０にて求めた最終燃料噴射時間taufinalを加えて新たな最終燃料噴射時間合計値Stauallを求め、ステップ７９５に進んで本ルーチンを一旦終了する。なお、最終燃料噴射時間合計値Stauallは、後述する図１３のステップ１４３５にて「０」に設定される。
【０１６９】
以上により、フィードバック量tdfiにより補正された最終燃料噴射時間taufinalに応じた燃料が吸気行程を迎える気筒に対して噴射される。なお、このルーチンは、他の気筒に対しても上記と同様に実行される。
【０１７０】
次に、上記フィードバック量tdfiを算出する際の作動について説明する。ＣＰＵ８１は図８に示したルーチンを所定時間の経過毎に繰り返し実行している。従って、所定のタイミングになると、ＣＰＵ８１はステップ８００から処理を開始し、ステップ８０５に進んでフィードバック制御実行条件が成立しているか否かを判定する。
【０１７１】
空燃比フィードバック制御実行条件は、例えば、機関の冷却水温THWが第１所定温度以上であり、機関の一回転当りの吸入空気量（負荷）が所定値以下であり、且つ、上流側空燃比センサ６７が正常であるとき成立する。
【０１７２】
いま、空燃比フィードバック制御実行条件が成立しているものとして説明を続けると、ＣＰＵ８１はステップ８０５にて「Ｙｅｓ」と判定してステップ８１０に進み、現時点の上流側空燃比センサ６７の出力Vabyfsとサブフィードバック量Vafsfbとの和（Vabyfs＋Vafsfb）及び図２に示したマップに基いて現時点における上流側触媒５３の上流の空燃比abyfsを求める。
【０１７３】
次に、ＣＰＵ８１はステップ８１５に進み、上記(11)式に従って現時点からＮストローク前の筒内燃料供給量Fc(k−N)を求め、ステップ８２０に進んで上記(12)式に従って現時点からＮストローク前の目標筒内燃料供給量Fcr(k−N)を求める。
【０１７４】
そして、ＣＰＵ８１はステップ８２５に進んで筒内燃料供給量偏差DFcを求め、続くステップ８３０にて、上記(13)式に従ってフィードバック量tdfiを求める。次いで、ＣＰＵ８１は、ステップ８３５にてその時点における筒内燃料供給量偏差DFcの積分値SDFcに上記ステップ８２５にて求めた筒内燃料供給量偏差DFcを加えて、新たな筒内燃料供給量偏差の積分値SDFcを求める。
【０１７５】
次に、ＣＰＵ８１はステップ８４０に進んで上記(15)式に従って空燃比フィードバック係数FAFを算出し、ステップ８４５に進んでその時点で保持している空燃比フィードバック係数の偏差DLFAFを前回の空燃比フィードバック係数の偏差DLFAFoldとして格納する。その後、ＣＰＵ８１はステップ８５０に進み、上記ステップ８４０にて求めた空燃比フィードバック係数のFAFから前回の空燃比フィードバック係数FAFoldを減じて新たな空燃比フィードバック係数の偏差DLFAFを求め、次いで、ステップ８５５に進んで、空燃比フィードバック係数FAFを前回の空燃比フィードバック係数FAFoldとして格納する。ＣＰＵ８１は、その後、ステップ８９５にて本ルーチンを一旦終了する。
【０１７６】
以上により、フィードバック量tdfiが比例積分制御により求められ、このフィードバック量tdfiが前述した図７のステップ７１０により最終燃料噴射時間taufinalに反映される。この結果、現時点からＮストローク前の燃料供給量の過不足が補償されるので、機関の空燃比（従って、上流側触媒５３に流入するガスの空燃比）が目標空燃比abyfrと略一致せしめられる。
【０１７７】
一方、ステップ８０５の判定時において、空燃比フィードバック制御実行条件が不成立であると、ＣＰＵ８１は同ステップ８０５にて「Ｎｏ」と判定してステップ８６０に進み、フィードバック量tdfiの値を「０」に設定し、その後、ステップ８４０〜ステップ８５５を実行してから本ルーチンを一旦終了する。これにより、空燃比フィードバック制御が実質的に中止される。
【０１７８】
次に、下流側空燃比センサ６８の出力Voxsに基くサブフィードバック量Vafsfbを算出する際の作動について説明する。
【０１７９】
ＣＰＵ８１は、サブフィードバック量Vafsfbを求めるために、図９に示したルーチンを所定時間の経過毎に実行している。従って、所定のタイミングになると、ＣＰＵ８１はステップ９００から処理を開始し、ステップ９０５に進んでサブフィードバック制御実行条件が成立しているか否かを判定する。サブフィードバック制御実行条件は、例えば、以下の総ての条件が成立したときに成立する。
前述したステップ７０５での空燃比フィードバック制御実行条件が成立している。
機関の冷却水温THWが前記第１所定温度よりも高い第２所定温度以上である。
下流側空燃比センサ６８が正常である。
第２学習制御中でない。
空燃比アクティブ制御中でない。
【０１８０】
いま、サブフィードバック制御実行条件が成立しているものとして説明を続けると、ＣＰＵ８１はステップ９０５にて「Ｙｅｓ」と判定してステップ９１０に進み、目標値Voxsrefから現時点の下流側空燃比センサ６８の出力Voxsを減じることにより、出力偏差量DVoxsを求める。次に、ＣＰＵ８１はステップ９１５に進み、上記(14)式に従ってサブフィードバック量Vafsfbを求める。
【０１８１】
次いで、ＣＰＵ８１はステップ９２０に進み、その時点における出力偏差量の積分値SDVoxsに上記ステップ９１０にて求めた出力偏差量DVoxsを加えて、新たな出力偏差量の積分値SDVoxsを求める。その後、ＣＰＵ８１は、ステップ９９５に進んで本ルーチンを一旦終了する。
【０１８２】
一方、サブフィードバック制御実行条件が成立していないとき、ＣＰＵ８１はステップ９０５にて「Ｎｏ」と判定してステップ９２５に進み、サブフィードバック量Vafsfbに「０」を設定する。これにより、サブフィードバック制御が事実上中止される。その後、ＣＰＵ８１は、ステップ９９５に進んで本ルーチンを一旦終了する。
【０１８３】
次に、第１学習値efafgx、第２学習値efafg及び軌跡長Lengthを求める際の作動（学習制御及び空燃比アクティブ制御）について、図１０〜図１８に示したルーチンを参照しながら説明する。
【０１８４】
ＣＰＵ８１は、図１０に示したルーチンを所定時間の経過毎に実行している。従って、所定のタイミングになると、ＣＰＵ８１はステップ１０００から処理を開始し、ステップ１００２に進んで第１学習制御条件が成立しているか否かを判定する。具体的に述べると、フィードバック制御実行条件が成立し、且つ、機関の冷却水温THWが第１所定温度より高い第３所定温度以上であるか否かが判定される。
【０１８５】
いま、第１学習制御条件が成立しているとして説明を続けると、ＣＰＵ８１はステップ１００５にて「Ｙｅｓ」と判定してステップ１０１５に進み、現在の機関運転状態（吸入空気量Gn）に対応する運転領域に対応して記憶されているFAFなまし値FAFSM(i)を前回のFAFなまし値FAFSM(i-1)として読み出す。
【０１８６】
次いで、ＣＰＵ８１はステップ１０２０に進んで上記(16)式に従って今回のFAFなまし値FAFSM(i)を求め、ステップ１０２５に進んで今回のFAFなまし値FAFSM(i)を現在の機関運転状態に対する運転領域に対応させて記憶する。
【０１８７】
次に、ＣＰＵ８１はステップ１０３０に進み、現在の機関運転状態に対応する運転領域に対する第１学習値efafgxが更新されてから、新たにnsho回だけFAFなまし値FAFSM(i)が算出されたか否かを判定する。このステップ１０３０における判定結果が「Ｎｏ」であるとき、ＣＰＵ８１はステップ１０９５に進んで本ルーチンを一旦終了する。
【０１８８】
これに対し、ステップ１０３０における判定結果が「Ｙｅｓ」であるとき、ＣＰＵ８１はステップ１０３５に進み、なまし値FAFSM(i)が閾値A1（＞０）より大きいか否かを判定する。このとき、なまし値FAFSM(i)が閾値A1より大きければ、ＣＰＵ８１はステップ１０４０に進んでその運転領域に対応する第１学習値efafgxの値を固定値Δgxだけ増大する。その後、ＣＰＵ８１は、ステップ１０４５に進み、上記増大された第１学習値efafgxを現在の機関運転状態に対する運転領域に対応する第１学習値として記憶する。
【０１８９】
一方、ＣＰＵ８１は、なまし値FAFSM(i)が閾値A1以下であると、ステップ１０３５にて「Ｎｏ」と判定してステップ１０５０へと進み、なまし値FAFSM(i)が閾値−A1より小さいか否かを判定する。そして、まし値FAFSM(i)が閾値−A1より小さいとき、ＣＰＵ８１はステップ１０５５に進んで、その運転領域に対応する第１学習値efafgxの値を固定値Δgxだけ減少する。その後、ＣＰＵ８１は、ステップ１０４５に進み、上記減少された第１学習値efafgxを現在の機関運転状態に対応する運転領域に対応する第１学習値として記憶する。
【０１９０】
他方、ＣＰＵ８１は、ステップ１０３５及びステップ１０５０にて「Ｎｏ」と判定するとき、ステップ１０５０からステップ１０９５に直接進んで本ルーチンを一旦終了する。従って、この場合、第１学習値efafgxは更新されない。
【０１９１】
また、第１学習制御条件が成立していないとき、ＣＰＵ８１が本ルーチンを実行すると、ＣＰＵ８１はステップ１００５にて「Ｎｏ」と判定し、直接ステップ１０９５に進んで本ルーチンを一旦終了する。以上のようにして、第１学習値efafgxが更新されて行く。
【０１９２】
また、ＣＰＵ８１は、図１１に示したルーチンを所定時間の経過毎に実行している。従って、所定のタイミングになると、ＣＰＵ８１はステップ１１００から処理を開始し、ステップ１１０２に進んで直前学習要求フラグXabyfgの値が「１」であるか否かを判定する。
【０１９３】
直前学習要求フラグXabyfgの値は、後述するように、触媒劣化判定実行条件（触媒劣化検出条件）が成立したときに「１」に設定され、直前学習が終了して空燃比アクティブ制御直前第２学習値efafgmaeが取得されたとき「０」に設定される。なお、直前学習要求フラグXabyfgの値は、図示しないイグニッション・キーがオンされたときに起動される図示しないイニシャルルーチンにて「０」に設定されている。
【０１９４】
いま、イグニッション・キーがオンされた直後であり、直前学習要求フラグXabyfgの値が「０」であるとして説明を続けると、ＣＰＵ８１はステップ１１０２にて「Ｎｏ」と判定し、ステップ１１０４に進んで直後学習要求フラグXlategの値が「１」であるか否かを判定する。
【０１９５】
直後学習要求フラグXlategの値は、後述するように、触媒劣化判定実行条件が成立して空燃比アクティブ制御の実行が終了したとき（軌跡長Lengthが取得されたとき）に「１」に設定され、直後学習が終了して空燃比アクティブ制御直後第２学習値efafgatoが取得されたとき「０」に設定される。なお、直後学習要求フラグXlategの値は、図示しないイグニッション・キーがオンされたときに起動される図示しないイニシャルルーチンにて「０」に設定されている。
【０１９６】
現時点はイグニッション・キーがオンされた直後であるから、直後学習要求フラグXlategの値は「０」である。従って、ＣＰＵ８１はステップ１１０４にて「Ｎｏ」と判定して図１２に示したステップ１２０２に進み、安定化カウンタCfafstの値を「０」に設定する。次いで、ＣＰＵ８１はステップ１２０４に進み、FAFAVEピーク値積算値SFAFAVEPKの値を「０」に設定し、ステップ１２９５にて本ルーチンを一旦終了する。
【０１９７】
一方、ＣＰＵ８１は図１３に示した触媒劣化検出ルーチンを所定時間の経過毎に実行している。従って、所定のタイミングになると、ＣＰＵ８１はステップ１３００から処理を開始し、ステップ１３０２にて直後学習要求フラグXlategの値が「０」であるか否かを判定する。前述したように、現段階で直後学習要求フラグXlategの値は「０」であるから、ＣＰＵ８１はステップ１３０２にて「Ｙｅｓ」と判定してステップ１３０４に進み、触媒劣化判定実行中フラグXafrefの値が「１」であるか否かを判定する。
【０１９８】
触媒劣化判定実行中フラグXafrefの値は、後述するように、触媒劣化判定実行条件が成立したときに「１」に設定され、触媒劣化判定が完了したとき及び触媒劣化判定実行条件が不成立のとに「０」に設定される。なお、触媒劣化判定実行中フラグXafrefの値は、図示しないイグニッション・キーがオンされたときに起動される図示しないイニシャルルーチンにて「０」に設定されている。
【０１９９】
現時点はイグニッション・キーがオンされた直後であるから、触媒劣化判定実行中フラグXafrefの値は「０」である。このため、ＣＰＵ８１はステップ１３０４にて「Ｎｏ」と判定してステップ１３０６に進み、上述した触媒劣化判定実行条件が成立したか否かを判定する。この段階では、触媒劣化判定実行条件は不成立であるとして説明を続けると、ＣＰＵ８１はステップ１３０６にて「Ｎｏ」と判定してステップ１３０８に進み、触媒劣化判定実行中フラグXafref、直前学習要求フラグXabyfg及び直後学習要求フラグXlategの値を「０」に設定するとともに、ステップ１３１０に進んで軌跡長Lengthの値を「０」に設定し、ステップ１３９５に進んで本ルーチンを一旦終了する。
【０２００】
その後、車両の運転が継続されている間に触媒劣化判定実行条件が成立すると、ＣＰＵ８１は図１３に示したルーチンを実行する際、ステップ１３００、ステップ１３０２、ステップ１３０４に続くステップ１３０６にて「Ｙｅｓ」と判定し、ステップ１３１２に進んで触媒劣化判定実行中フラグXafrefの値を「１」に設定するとともに、ステップ１３１４に進んで直前学習要求フラグXabyfgの値を「１」に設定し、ステップ１３９５に進んで本ルーチンを一旦終了する。なお、ＣＰＵ８１は、触媒劣化判定実行中フラグXafrefの値が「１」となっているとき、サブフィードバック制御（及びエバポエミッションの導入）を第２学習制御中と同様に停止する。
【０２０１】
このとき、ＣＰＵ８１が図１１に示したルーチンを実行すると、ＣＰＵ８１はステップ１１０２にて「Ｙｅｓ」と判定してステップ１１０６に進み、後述する空燃比フィードバック係数平均値FAFAVEのピーク値FAFAVEPKの変化量DLPKに対する第１安定化判定値DLPKthに所定値a1を設定する。次いで、ＣＰＵ８１はステップ１１０８に進み、第２安定化判定値nthに所定値b1を設定する。
【０２０２】
次に、ＣＰＵ８１はステップ１１１０に進み、前回の空燃比フィードバック係数の偏差DLFAFoldが０以上であり（「０」又は正の値であり）、且つ、その時点で保持している空燃比フィードバック係数の偏差DLFAFが０より小さい（負の値である）か否かを判定する。即ち、空燃比フィードバック係数FAFが極大値（ピーク値）をとったか否かを判定する。このとき、空燃比フィードバック係数FAFが極大値をとっていれば、ＣＰＵ８１はステップ１１１０にて「Ｙｅｓ」と判定し、ステップ１１１２にてカウンタ値Csampの値を「０」に設定した後、ステップ１１１４に進む。
【０２０３】
一方、空燃比フィードバック係数FAFが極大値をとっていなければ、ＣＰＵ８１はステップ１１１０にて「Ｎｏ」と判定してステップ１１１６に進み、前回の空燃比フィードバック係数の偏差DLFAFoldが０より小さく、且つ、その時点で保持している空燃比フィードバック係数の偏差DLFAFが０以上であるか否かを判定する。即ち、空燃比フィードバック係数FAFが極小値（ピーク値）をとったか否かを判定する。このとき、空燃比フィードバック係数FAFが極小値をとっていれば、ＣＰＵ８１はステップ１１１６にて「Ｙｅｓ」と判定し、ステップ１１１２にてカウンタ値Csampの値を「０」に設定した後、ステップ１１１４に進む。
【０２０４】
更に、現時点の空燃比フィードバック係数FAFが極大値及び極小値の何れでもなければ、ＣＰＵ８１はステップ１１１０及びステップ１１１６の両ステップにて「Ｎｏ」と判定し、ステップ１１１８にてカウンタ値Csampの値が閾値Csthより大きいか否かを判定する。
【０２０５】
いま、カウンタ値Csampの値が閾値Csth以下であるとして説明を続けると、ＣＰＵ８１はステップ１１１８にて「Ｎｏ」と判定してステップ１１２０に進み、カウンタ値Csampの値を「１」だけ増大する。そして、ＣＰＵ８１は図１２のステップ１２０２及びステップ１２０４を経由してステップ１２９５に進み、本ルーチンを一旦終了する。
【０２０６】
ＣＰＵ８１は、所定時間の経過毎に図１１に示した学習制御ルーチンを実行するから、空燃比フィードバック係数FAFがピーク値（極大値又は極小値）をとらなければ、ステップ１１１８及びステップ１１２０を繰り返し実行することになる。この結果、空燃比フィードバック係数FAFがピーク値（極大値又は極小値）をとってから、閾値Csthに相当する時間が経過すると、カウンタ値Csampは閾値Csthより大きくなる。この場合、ＣＰＵ８１はステップ１１１８にて「Ｙｅｓ」と判定し、ステップ１１１２に進んでカウンタ値Csampの値を「０」に設定し、ステップ１１１４に進む。
【０２０７】
以上から理解されるように、ステップ１１１０，１１１２，１１１６，１１１８及びステップ１１２０は、空燃比フィードバック係数FAFのピーク値取得手段を構成している。
【０２０８】
ＣＰＵ８１は、ステップ１１１４に進むと、以下の操作を行う。
保持しているFAFピーク値FAFPKを前回のFAFピーク値FAFPKoldとして格納する。
現時点の空燃比フィードバック係数FAFを今回のFAFピーク値FAFPKとして格納する。
保持している空燃比フィードバック係数平均値FAFAVEを前回の空燃比フィードバック係数平均値FAFAVEoldとして格納する。
上記(17)式に従って今回の空燃比フィードバック係数平均値FAFAVEを求める。
保持している空燃比フィードバック係数平均値FAFAVEの偏差（変化量）DLFAFAVEを前回の空燃比フィードバック係数平均値FAFAVEの偏差（変化量）DLFAFAVEoldとして格納する。
今回の空燃比フィードバック係数平均値FAFAVEから前回の空燃比フィードバック係数平均値FAFAVEoldを減じることにより、今回の空燃比フィードバック係数平均値FAFAVEの偏差（変化量）DLFAFAVEを求める。
【０２０９】
次に、ＣＰＵ８１はステップ１１２２に進み、前回の空燃比フィードバック係数平均値の偏差DLFAFAVEoldが０以上であり（「０」又は正の値であり）、且つ、その時点で保持している空燃比フィードバック係数平均値の偏差DLFAFAVEが０より小さい（負の値である）か否かを判定する。即ち、空燃比フィードバック係数平均値FAFAVEが極大値（ピーク値）をとったか否かを判定する。このとき、空燃比フィードバック係数平均値FAFAVEが極大値をとっていれば、ＣＰＵ８１はステップ１１２２にて「Ｙｅｓ」と判定し、ステップ１１２４にてカウンタ値Cnohanの値を「０」に設定し、ステップ１１２６に進む。
【０２１０】
一方、空燃比フィードバック係数平均値FAFAVEが極大値をとっていなければ、ＣＰＵ８１はステップ１１２２にて「Ｎｏ」と判定してステップ１１２８に進み、前回の空燃比フィードバック係数平均値の偏差DLFAFAVEoldが０より小さく、且つ、その時点で保持している空燃比フィードバック係数平均値の偏差DLFAFAVEが０以上であるか否かを判定する。即ち、空燃比フィードバック係数平均値FAFAVEが極小値（ピーク値）をとったか否かを判定する。このとき、空燃比フィードバック係数平均値FAFAVEが極小値をとっていれば、ＣＰＵ８１はステップ１１２８にて「Ｙｅｓ」と判定し、ステップ１１２４にてカウンタ値Cnohanの値を「０」に設定し、ステップ１１２６に進む。
【０２１１】
更に、現時点の空燃比フィードバック係数平均値FAFAVEが極大値及び極小値の何れでもなければ、ＣＰＵ８１はステップ１１２２及びステップ１１２８の両ステップにて「Ｎｏ」と判定し、ステップ１１３０にてカウンタ値Cnohanの値を「１」だけ増大し、ステップ１１３２に進んでカウンタ値Cnohanの値が閾値Cnothより以上であるか否かを判定する。
【０２１２】
いま、カウンタ値Cnohanの値が閾値Cnothより小さいとして説明を続けると、ＣＰＵ８１はステップ１１３２にて「Ｎｏ」と判定し、図１２のステップ１２０２及びステップ１２０４を経由してステップ１２９５に進み、本ルーチンを一旦終了する。
【０２１３】
従って、空燃比フィードバック係数平均値FAFAVEがピーク値（極大値又は極小値）をとらなければ、ＣＰＵ８１は、空燃比フィードバック係数FAFのピーク値FAFPKが得られる毎に、ステップ１１３０及びステップ１１３２を繰り返し実行する。この結果、空燃比フィードバック係数平均値FAFAVEがピーク値（極大値又は極小値）をとってから、閾値Cnothに相当する時間が経過すると、カウンタ値Cnohanは閾値Cnothより大きくなる。この場合、ＣＰＵ８１はステップ１１３２にて「Ｙｅｓ」と判定し、ステップ１１２４に進んでカウンタ値Cnohanの値を「０」に設定し、ステップ１１２６に進む。
【０２１４】
ステップ１１２６に進んだＣＰＵ８１は、その時点で保持している空燃比フィードバック係数平均値FAFAVEのピーク値FAFAVEPKを前回の空燃比フィードバック係数平均値FAFAVEのピーク値FAFAVEPKoldとして格納し、続くステップ１１３４にて現時点の空燃比フィードバック係数平均値FAFAVEを今回の空燃比フィードバック係数平均値FAFAVEのピーク値FAFAVEPKとして格納する。
【０２１５】
以上から理解されるように、ステップ１１２２〜ステップ１１３４は、空燃比フィードバック係数平均値FAFAVEのピーク値FAFAVEPK取得手段を構成している。
【０２１６】
次に、ＣＰＵ８１は図１２に示したステップ１２０６に進み、空燃比フィードバック係数平均値FAFAVEのピーク値FAFAVEPKの変化量DLPKを、今回の空燃比フィードバック係数平均値のピーク値FAFAVEPKから前回の空燃比フィードバック係数平均値のピーク値FAFAVEPKoldを減じることにより求め、ステップ１２０８に進んで変化量DLPKの絶対値が前記第１安定化判定値DLPKth以下であるか否かを判定する。なお、この場合、第１安定化判定値DLPKthは値a1である。
【０２１７】
このとき、変化量DLPKの絶対値が第１安定化判定値DLPKthより大きいと、ＣＰＵ８１はステップ１２０８にて「Ｎｏ」と判定し、ステップ１２０２及びステップ１２０４を経由して本ルーチンを一旦終了する。
【０２１８】
一方、変化量DLPKの絶対値が第１安定化判定値DLPKth以下であると、ＣＰＵ８１はステップ１２０８にて「Ｙｅｓ」と判定し、ステップ１２１０に進んで過去nth個の変化量DLPKの符号が同一でないか否かを判定する。つまり、本ルーチンの過去（nth−１）回〜今回までの実行により得られた空燃比フィードバック係数平均値のピーク値FAFAVEPKが緩やかに増大し続けておらず、且つ、穏やかに減少し続けていないことが確認される。
【０２１９】
このとき、nth個の変化量DLPKの符号が同一であると、ＣＰＵ８１はステップ１２１０にて「Ｎｏ」と判定し、ステップ１２０２及びステップ１２０４を経由して本ルーチンを一旦終了する。
【０２２０】
また、nth個の変化量DLPKの符号が同一でなければ、ＣＰＵ８１はステップ１２１０にて「Ｙｅｓ」と判定し、ステップ１２１４に進んで安定化カウンタCfafstの値を「１」だけ増大し、続くステップ１２１６にて安定化カウンタCfafstの値が所定の閾値Cfafstth以上となったか否かを判定する。このとき、安定化カウンタCfafstの値が所定の閾値Cfafstthより小さければ、ＣＰＵ８１はステップ１２１６にて「Ｎｏ」と判定し、直ちにステップ１２９５に進んで本ルーチンを一旦終了する。
【０２２１】
このように、ステップ１２０８及びステップ１２１０は、空燃比フィードバック係数平均値FAFAVEのピーク値FAFAVEPKの変化量DLPKの絶対値が第１安定化判定値DLPKth以下であり、且つ、過去nth個の変化量DLPKの符号が同一でない場合に、空燃比フィードバック係数FAF（空燃比フィードバック係数平均値FAFAVE及びそのピーク値FAFAVEPK）が安定している（即ち、フィードバック量tdfiが安定条件を満足している）と判定する安定化判別手段（第２学習条件成立判定手段）を構成している。
【０２２２】
以降、ＣＰＵ８１は、空燃比フィードバック係数平均値FAFAVEのピーク値FAFAVEPKが新たに得られる毎に、ステップ１２０８及びステップ１２１０を実行する。これにより、フィードバック量が安定条件を満足しているか否かを判定し、安定条件を満たしている場合はステップ１２１４にて定化カウンタCfafstの値を「１」だけ増大する。一方、フィードバック量が安定条件を満足していないとき、ステップ１２０２にて定化カウンタCfafstの値は「０」に設定される。
【０２２３】
従って、フィードバック量が安定条件を閾値Cfafstthに対応する回数以上連続して満たすと、ＣＰＵ８１はステップ１２１６にて「Ｙｅｓ」と判定してステップ１２１８に進み、学習データサンプリングカウンタCfafgが閾値Cfafgth（＞１）より小さいか否かを判定する。この学習データサンプリングカウンタCfafgは、、図示しないイグニッション・キーがオンされたときに起動される図示しないイニシャルルーチンにて「０」に設定されている。
【０２２４】
現時点は、直前学習要求フラグXabyfgの値が「１」となってから、初めて安定化カウンタCfafstが閾値Cfafstthとなった時点であるから、学習データサンプリングカウンタCfafgは閾値Cfafgthより小さい。従って、ＣＰＵ８１は、ステップ１２１８にて「Ｙｅｓ」と判定してステップ１２２０に進み、学習データサンプリングカウンタCfafgの値を「１」だけ増大し、続くステップ１２２２にてその時点のFAFAVEピーク値積算値SFAFAVEPK（現時点において、FAFAVEピーク値積算値SFAFAVEPKはステップ１２０４の実行により「０」になっている。）に空燃比フィードバック係数平均値のピーク値FAFAVEPKを加えて、新たなFAFAVEピーク値積算値SFAFAVEPKを求める。つまり、FAFAVEピーク値積算値SFAFAVEPKに空燃比フィードバック係数平均値のピーク値FAFAVEPKを積算してゆく。
【０２２５】
このような状態が継続すると、ステップ１２２０及びステップ１２２２が繰り返し実行されるので、学習データサンプリングカウンタCfafgは閾値Cfafgthと等しくなる。この場合、ＣＰＵ８１はステップ１２１８にて「Ｎｏ」と判定してステップ１２２４に進み、FAFAVEピーク値積算値SFAFAVEPKを学習データサンプリングカウンタCfafg（＝閾値Cfafgth）で除することにより、空燃比フィードバック係数平均値のピーク値FAFAVEPKの平均値を求め、この平均値を第２学習値efafgとして格納する。
【０２２６】
次いで、ＣＰＵ８１はステップ１２２６に進み、学習データサンプリングカウンタCfafgの値を「０」に設定し、続くステップ１２２８にてFAFAVEピーク値積算値SFAFAVEPKの値を「０」に設定する。次に、ＣＰＵ８１は、ステップ１２３０にて、直前学習要求フラグXabyfgの値が「１」であるか否かを判定する。
【０２２７】
この場合、直前学習要求フラグXabyfgの値は「１」である。従って、ＣＰＵ８１はステップ１２３０にて「Ｙｅｓ」と判定してステップ１２３２に進み、ステップ１２２４にて格納した第２学習値efafgを空燃比アクティブ制御直前第２学習値efafgmaeとして格納するとともに、続くステップ１２３４にて直前学習要求フラグXabyfgの値を「０」に設定する。
【０２２８】
次いで、ＣＰＵ８１はステップ１２３６にて直後学習要求フラグXlategの値が「１」であるか否かを判定する。この場合、直後学習要求フラグXlategの値は「０」であるから、ＣＰＵ８１はステップ１２３６にて「Ｎｏ」と判定し、ステップ１２９５に進んで本ルーチンを一旦終了する。以上により、空燃比アクティブ制御直前の学習制御が終了する。また、直前学習要求フラグXabyfg及び直後学習要求フラグXlategの値が共に「０」となるから、ＣＰＵ８１は、本学習制御ルーチンを所定時間後に実行すると、ステップ１１０２及びステップ１１０４の両ステップにて「Ｎｏ」と判定して、ステップ１２０２、１２０４及びステップ１２９５と進むので、学習制御が事実上停止される。
【０２２９】
ところで、ＣＰＵ８１は、上述した空燃比アクティブ制御直前の第２学習制御中も図１３に示した触媒劣化検出ルーチンを繰り返し実行している。この第２学習制御中は、前述した図１３のステップ１３１２の実行により、触媒劣化判定実行中フラグXafrefの値は「１」となっている。また、前述したステップ１３１４の実行により、直前学習要求フラグXabyfgの値も「１」となっている。これに対し、直後学習要求フラグXlategの値は、前述したステップ１３０８の実行により「０」となっている。
【０２３０】
従って、ＣＰＵ８１はステップ１３００からステップ１３０２に進んだとき、同ステップ１３０２にて「Ｙｅｓ」と判定するとともに、ステップ１３０４にても「Ｙｅｓ」と判定し、ステップ１３１５に進んで直後学習要求フラグXlategの値が「１」から「０」に変化した直後であるか否かを判定する。
【０２３１】
この場合、直後学習要求フラグXlategの値は「０」に維持されたままである。従って、ＣＰＵ８１はステップ１３１５にて「Ｎｏ」と判定してステップ１３１６に進み、直前学習要求フラグXabyfgの値が「０」であるか否かを判定する。この場合、直前学習要求フラグXabyfgの値は「１」であるから、ＣＰＵ８１はステップ１３１６にて「Ｎｏ」と判定し、ステップ１３９５に進んで本ルーチンを一旦終了する。
【０２３２】
その後、上述した空燃比アクティブ制御直前の第２学習制御が終了すると、図１２のステップ１２３４の実行により直前学習要求フラグXabyfgの値が「０」に設定される。この結果、ＣＰＵ８１は、ステップ１３００に続くステップ１３０２及びステップ１３０４の両ステップにて「Ｙｅｓ」と判定するとともに、ステップ１３１５にて「Ｎｏ」と判定した後、ステップ１３１６にて「Ｙｅｓ」と判定してステップ１３１８に進み、空燃比アクティブ制御カウンタCkyoの値が閾値Ckyoth以上であるか否かを判定する。
【０２３３】
この空燃比アクティブ制御カウンタCkyoの値は、前述したイニシャルルーチンにて「０」に設定されるようになっている。従って、現時点において空燃比アクティブ制御カウンタCkyoの値は閾値Ckyothより小さいから、ＣＰＵ８１はステップ１３１８にて「Ｎｏ」と判定してステップ１３２０に進み、図１４示された触媒劣化指標値取得制御（空燃比アクティブ制御）を実行する。なお、以降、触媒劣化指標値取得制御の実行により空燃比アクティブ制御カウンタCkyoの値が増大され、閾値Ckyothと等しくなるまでの間、ＣＰＵ８１はステップ１３００、１３０４、１３１５、１３１６、１３１８及びステップ１３２０と進み、触媒劣化指標値取得制御のサブルーチンを繰り返し実行するようになる。
【０２３４】
ステップ１３２０に進んだＣＰＵ８１は、図１４のステップ１４００から処理を開始し、ステップ１４０５にてサブフィードバック制御及びエバポエミッションの導入を禁止する。次いで、ＣＰＵ８１はステップ１４１０にて空燃比アクティブ制御カウンタCkyoの値が「０」であるか否かを判定する。
【０２３５】
この時点では、空燃比アクティブ制御カウンタCkyoの値は「０」に設定されている。従って、ＣＰＵ８１は、ステップ１４１０にて「Ｙｅｓ」と判定してステップ１４１５に進み、機関に供給される混合気の空燃比を設定リッチ空燃比とするための強制リッチ制御を行う。
【０２３６】
即ち、ＣＰＵ８１は、ステップ１４１５に進んだとき、図１６のステップ１６００に続くステップ１６０５に進み、目標空燃比abyfrに理論空燃比stoichよりリッチな空燃比abyfrichを設定する。次いで、ＣＰＵ８１は、ステップ１６１０にて空燃比アクティブ制御係数kactiveを「１」より大きい所定の値（理論空燃比stoich／目標空燃比abyfr）に設定し、ステップ１６９５を経由して図１４のステップ１４２０に戻る。なお、この間においても、図８に示した空燃比フィードバック制御は行われている。従って、以上の作動により、機関に供給される混合気の空燃比が設定リッチ空燃比へと強制的に制御される。
【０２３７】
図１４のステップ１４２０に戻ったＣＰＵ８１は、同ステップ１４２０にて設定リッチ制御フラグXrichの値を「１」に設定し、続くステップ１４２５にて空燃比アクティブ制御カウンタCkyoの値を「１」に設定する。次いで、ＣＰＵ８１はステップ１４３０にて酸素放出量Semitの値を「０」に設定し、ステップ１４３５にて最終燃料噴射時間合計値Stauallの値を「０」に設定してから、ステップ１４９５にて本ルーチンを一旦終了する。従って、この時点から、酸素放出量Semit及び最終燃料噴射時間合計値Stauallが、「０」から増大して行く。
【０２３８】
この状態で、ＣＰＵ８１が図１３のステップ１３２０に再び進むと、ＣＰＵ８１は図１４のステップ１４００、１４０５及びステップ１４１０へと進む。このとき、先のステップ１４２５にて空燃比アクティブ制御カウンタCkyoの値は「１」に設定されているから、ＣＰＵ８１はステップ１４１０にて「Ｎｏ」と判定し、ステップ１４４０に進んで空燃比アクティブ制御カウンタCkyoの値が「１」であるか否かを判定する。
【０２３９】
この時点では、先のステップ１４２５の処理の実行により、空燃比アクティブ制御カウンタCkyoの値は「１」となっている。従って、ＣＰＵ８１はステップ１４４０にて「Ｙｅｓ」と判定してステップ１４４５に進み、下流側空燃比センサ６８の出力Voxsが閾値Voxsref−aより小さい状態（理論空燃比よりもリーンな空燃比を示した状態）から閾値Voxsref＋a以上の状態（理論空燃比よりもリッチな空燃比を示した状態）へと変化した直後であるか否かを判定する。
【０２４０】
いま、先のステップ１４１５にて強制リッチ制御を開始したとき、上流側触媒５３に酸素が吸蔵されていたとすると、現時点は同強制リッチ制御を開始した直後であるから、上流側触媒５３からリッチな空燃比のガスは流出していない。従って、下流側空燃比センサ６８の出力Voxsは閾値Voxsref−aより小さい状態にあるから、ＣＰＵ８１はステップ１４４５にて「Ｎｏ」と判定してステップ１４５０に進み、酸素放出量Semitが所定の酸素収支閾値Sth以上となったか否かを判定する。この場合、強制リッチ制御を開始した直後であるから、酸素放出量Semitは所定の酸素収支閾値Sth以上となっていない。従って、ＣＰＵ８１は、ステップ１４５０にても「Ｎｏ」と判定してステップ１４９５に進み、本ルーチンを一旦終了する。
【０２４１】
ところで、上流側触媒５３の劣化が進行していて、その最大酸素吸蔵量Cmaxが小さくなっているとすれば、酸素放出量Semitが所定の酸素収支閾値Sth以上となる前に上流側触媒５３からリッチなガス（未燃成分を多量に含むガス）が流出する。従って、下流側空燃比センサ６８の出力Voxsが閾値Voxsref−aより小さい状態から閾値Voxsref＋a以上の状態へと変化する。この時点でＣＰＵ８１がステップ１４４５を実行すると、同ＣＰＵ８１は同ステップ１４４５にて「Ｙｅｓ」と判定し、ステップ１４５５に進んで酸素収支量Syushiに「０」を設定する。従って、この時点から、酸素収支量Syushiが「０」から増大して行く。
【０２４２】
一方、上流側触媒５３の劣化が進行しておらず、その最大酸素吸蔵量Cmaxが大きい場合、上流側触媒５３からリッチなガスが流出する前に、酸素放出量Semitが所定の酸素収支閾値Sth以上となる。この時点でＣＰＵ８１がステップ１４４５を実行すると、同ＣＰＵ８１は同ステップ１４４５にて「Ｎｏ」と判定するとともに、ステップ１４５０にて「Ｙｅｓ」と判定してステップ１４５５に進み、酸素収支量Syushiに「０」を設定する。
【０２４３】
また、先のステップ１４１５にて強制リッチ制御を開始したとき、上流側触媒５３に酸素が吸蔵されていなかったとすると、その時点で下流側空燃比センサ６８の出力Voxsは閾値Voxsref＋a以上の状態（リッチ空燃比を示している状態）にある。従って、ＣＰＵ８１は、ステップ１４４５にて「Ｎｏ」と判定し続け、酸素放出量Semitが所定の酸素収支閾値Sth以上となった時点でステップ１４５０にて「Ｙｅｓ」と判定し、ステップ１４５５に進んで酸素収支量Syushiに「０」を設定する。
【０２４４】
次いで、ＣＰＵ８１はステップ１４６０に進み、機関に供給される混合気の空燃比を設定リーン空燃比とするための強制リーン制御を行う。
【０２４５】
即ち、ＣＰＵ８１は、ステップ１４６０に進んだとき、図１７のステップ１７００に続くステップ１７０５に進み、目標空燃比abyfrに理論空燃比stoichよりリーンな空燃比abyfleanを設定する。次いで、ＣＰＵ８１は、ステップ１７１０にて空燃比アクティブ制御係数kactiveを「１」より小さい所定の値（理論空燃比stoich／目標空燃比abyfr）に設定し、ステップ１７９５を経由して図１４のステップ１４６５に戻る。この間においても、図８に示した空燃比フィードバック制御は行われている。従って、以上の作動により、機関に供給される混合気の空燃比が設定リーン空燃比へと強制的に制御される。
【０２４６】
図１４のステップ１４６５に戻ったＣＰＵ８１は、同ステップ１４６５にて設定リッチ制御フラグXrichの値を「０」に設定し、続くステップ１４７０にて空燃比アクティブ制御カウンタCkyoの値を「２」に設定する。次いで、ＣＰＵ８１はステップ１４７５にて触媒劣化指標値としての下流側空燃比センサ６８の出力Voxsの軌跡長Lengthを「０」に設定するとともに、ステップ１４８０にて下流側空燃比センサ６８の出力Voxsを前回の下流側空燃比センサ６８の出力Voxsoldとして格納する。ステップ１４７５及びステップ１４８０による処理は、軌跡長Lengthの取得を始めるための処理である。そして、ＣＰＵ８１は、ステップ１４９５にて本ルーチンの処理を一旦終了する。
【０２４７】
次に、ＣＰＵ８１が本ルーチンの処理を再び開始すると、空燃比アクティブ制御カウンタCkyoの値が先のステップ１４７０にて「２」に変更されているから、ＣＰＵ８１はステップ１４１０及びステップ１４４０の両ステップにて「Ｎｏ」と判定し、図１５に示したステップ１５０５に進んで設定リッチ制御フラグXrichの値が「０」であるか否かを判定する。
【０２４８】
この場合、設定リッチ制御フラグXrichの値は、先のステップ１４６５にて「０」に変更されている。従って、ＣＰＵ８１は、ステップ１５０５にて「Ｙｅｓ」と判定してステップ１５１０に進み、下流側空燃比センサ６８の出力Voxsが閾値Voxsref＋a以上の状態（理論空燃比よりもリッチな空燃比を示した状態）から閾値Voxsref−aより小さい状態（理論空燃比よりもリーンな空燃比を示した状態）へと変化した直後であるか否かを判定する。
【０２４９】
この場合、強制リーン制御を開始した直後であるから、上流側触媒５３からはリーンな空燃比のガスが流出していない。従って、下流側空燃比センサ６８の出力Voxsは閾値Voxsref−aより小さい値に変化しないから、ＣＰＵ８１はステップ１５１０にて「Ｎｏ」と判定してステップ１５１５に進み、酸素収支量Syushiが所定の酸素収支閾値Sth以上となったか否かを判定する。この場合、強制リーン制御を開始した直後であるから、酸素収支量Syushiは所定の酸素収支閾値Sth以上となっていない。
【０２５０】
従って、ＣＰＵ８１は、ステップ１５１５にても「Ｎｏ」と判定してステップ１５２０に進み、軌跡長Lengthを下記(25)式に従って更新する。即ち、その時点の軌跡長Lengthに、現在（今回）の下流側空燃比センサ６８の出力Voxsと前回の下流側空燃比センサ６８の出力Voxsoldの差の絶対値を加えることにより、軌跡長Lengthを算出する。
Length＝Length＋｜Voxs − Voxsold｜        
… (25)
【０２５１】
次に、ＣＰＵ８１はステップ１５２５に進み、下流側空燃比センサ６８の出力Voxsを前回の下流側空燃比センサ６８の出力Voxsoldとして格納し、その後ステップ１４９５に進んで本ルーチンを一旦終了する。
【０２５２】
いま、上流側触媒５３の劣化が進行していて、その最大酸素吸蔵量Cmaxが小さくなっているとすれば、酸素収支量Syushiが所定の酸素収支閾値Sth以上となる前に上流側触媒５３からリーンなガス（酸素を多量に含むガス）が流出する。従って、下流側空燃比センサ６８の出力Voxsが閾値Voxsref＋a以上である状態から閾値Voxsref−aより小さい状態へと変化する。この時点でＣＰＵ８１がステップ１５１０を実行すると、同ＣＰＵ８１は同ステップ１５１０にて「Ｙｅｓ」と判定し、ステップ１５３０に進んで強制リッチ制御を行う。
【０２５３】
そして、ＣＰＵ８１はステップ１５３５にて設定リッチ制御フラグXrichの値を「１」に設定するとともに、ステップ１５４０にて空燃比アクティブ制御カウンタCkyoの値を「１」だけ増大し、ステップ１５２０及びステップ１５２５の処理を実行して本ルーチンを一旦終了する。
【０２５４】
一方、上流側触媒５３の劣化が進行しておらず、その最大酸素吸蔵量Cmaxが大きい場合、上流側触媒５３からリーンなガスが流出する前に、酸素収支量Syushiが所定の酸素収支閾値Sth以上となる。この時点でＣＰＵ８１がステップ１５１０を実行すると、同ＣＰＵ８１は同ステップ１５１０にて「Ｎｏ」と判定するとともに、ステップ１５１５にて「Ｙｅｓ」と判定し、ステップ１５３０〜ステップ１５４０、ステップ１５２０及びステップ１５２５の処理を実行して本ルーチンを一旦終了する。これにより、空燃比が再び設定リッチ空燃比へと強制的に変更される。
【０２５５】
次に、ＣＰＵ８１が本ルーチンの処理を再び開始すると、この時点で、空燃比アクティブ制御カウンタCkyoの値は先のステップ１５４０にて「１」だけ増大されて「３」に変更されている。また、設定リッチ制御フラグXrichの値は先のステップ１５３５にて「１」に変更されている。従って、ＣＰＵ８１は、図１４に示したステップ１４１０及びステップ１４４０の両ステップにて「Ｎｏ」と判定し、図１５に示したステップ１５０５にても「Ｎｏ」と判定してステップ１５４５に進む。
【０２５６】
そして、ＣＰＵ８１は、ステップ１５４５にてステップ１４４５と同じ判定を行う。即ち、下流側空燃比センサ６８の出力Voxsがリーンを示す値からリッチを示す値に変化した直後であるか否かを判定する
【０２５７】
この場合、強制リッチ制御を再開した直後であるから、上流側触媒５３からはリッチな空燃比のガスが流出していない。従って、下流側空燃比センサ６８の出力Voxsは閾値Voxsref＋a以上の状態には変化しないから、ＣＰＵ８１はステップ１５４５にて「Ｎｏ」と判定してステップ１５５０に進み、酸素収支量Syushiが０より小さい（負の値であるか）否かを判定する。この場合、強制リッチ制御を開始した直後であるから、酸素収支量Syushiは０より小さくなっていない。従って、ＣＰＵ８１は、ステップ１５５０にても「Ｎｏ」と判定してステップ１５２０及びステップ１５２５を経由し、ステップ１４９５に進んで本ルーチンを一旦終了する。
【０２５８】
いま、上流側触媒５３の劣化が進行していて、その最大酸素吸蔵量Cmaxが小さくなっているとすれば、酸素収支量Syushiが０より小さくなる前に上流側触媒５３からリッチなガスが流出する。従って、下流側空燃比センサ６８の出力Voxsが閾値Voxsref−aより小さい状態から閾値Voxsref＋a以上である状態へと変化する。この時点でＣＰＵ８１がステップ１５４５を実行すると、同ＣＰＵ８１は同ステップ１５４５にて「Ｙｅｓ」と判定し、ステップ１５５５に進んで酸素収支量Syushiの値を「０」に設定し直す。これは、上流側触媒５３からリッチな空燃比のガスが流出しているから、上流側触媒５３には全く酸素が吸蔵されていないと考えられるからである。
【０２５９】
次いで、ＣＰＵ８１はステップ１５６０にて再び強制リーン制御を開始するとともに、続くステップ１５６５にて設定リッチ制御フラグXrichの値を「０」に設定する。その後、ＣＰＵ８１はステップ１５７０にて空燃比アクティブ制御カウンタCkyoの値を「１」だけ増大し、ステップ１５２０及びステップ１５２５の処理を実行して本ルーチンを一旦終了する。
【０２６０】
一方、上流側触媒５３の劣化が進行しておらず、その最大酸素吸蔵量Cmaxが大きい場合、上流側触媒５３からリッチなガスが流出する前に、酸素収支量Syushiが０より小さい値となる。この時点でＣＰＵ８１がステップ１５４５を実行すると、同ＣＰＵ８１は同ステップ１５４５にて「Ｎｏ」と判定するとともに、ステップ１５５０にて「Ｙｅｓ」と判定し、ステップ１５６０〜ステップ１５７０、ステップ１５２０及びステップ１５２５の処理を実行して本ルーチンを一旦終了する。これにより、空燃比が再び設定リーン空燃比へと強制的に変更される。
【０２６１】
上述のような強制リーン制御及び強制リッチ制御が繰り返されると、空燃比アクティブ制御カウンタCkyoの値がステップ１５４０又はステップ１５７０の処理により次第に増大する。この間においても、ＣＰＵ８１は図１３に示した触媒劣化検出ルーチンを繰り返し実行している。しかしながら、空燃比アクティブ制御カウンタCkyoの値が閾値Ckyothと等しくなるまでの期間、ＣＰＵ８１はステップ１３１８に進んだとき、「Ｎｏ」と判定して、ステップ１３２０に進んでいる。
【０２６２】
また、所定の時間が経過すると空燃比アクティブ制御カウンタCkyoの値は、閾値Ckyothと等しくなる。この時点で、ＣＰＵ８１が図１３に示したルーチンを実行すると、ＣＰＵ８１は、ステップ１３１８にて「Ｙｅｓ」と判定し、ステップ１３２２に進んで空燃比アクティブ制御カウンタCkyoの値を「０」に設定し直すとともに、ステップ１３２４にて直後学習要求フラグXlategの値を「１」に設定する。
【０２６３】
更に、ＣＰＵ８１は、ステップ１３２６にて目標空燃比abyfrに理論空燃比stoichを設定し、続くステップ１３２８にて空燃比アクティブ制御係数kactiveに「１」を設定した後、本ルーチンを一旦終了する。以上により、空燃比が理論空燃比に制御され始める。
【０２６４】
次に、ＣＰＵ８１が図１３に示した触媒劣化検出ルーチンを開始すると、直後学習要求フラグXlategの値が先のステップ１３２４にて「１」に変更されているから、ＣＰＵ８１はステップ１３０２にて「Ｎｏ」と判定してステップ１３３４に進み、現時点は、直後学習要求フラグXlategの値が「０」から「１」へと変化した時点から所定時間が経過したか否かを判定する。
【０２６５】
現時点は、先のステップ１３２４にて直後学習要求フラグXlategの値が「１」に変更された直後である。従って、ＣＰＵ８１はステップ１３３４にて「Ｎｏ」と判定し、そののままステップ１３９５に進んで本ルーチンを一旦終了する。
【０２６６】
一方、ＣＰＵ８１が図１１に示した第２学習制御ルーチンを実行すると、直前学習要求フラグXabyfgの値は「０」、直後学習要求フラグXlategの値は「１」となっているから、ＣＰＵ８１は、ステップ１１０２にて「Ｎｏ」、ステップ１１０４にて「Ｙｅｓ」と判定してステップ１１３６に進み、空燃比フィードバック係数平均値のピーク値FAFAVEPKの変化に対する第２安定化判定値DLPKthに所定値a2を設定する。この所定値a2は、前述したステップ１１０６にて使用される所定値a1以上の値に選択される。
【０２６７】
次いで、ＣＰＵ８１はステップ１１３８に進み、第２安定化判定値nthに所定値b2を設定する。この所定値b2は、ステップ１１０８にて使用される所定値b1より小さい値に設定される。その後、ＣＰＵ８１は、ステップ１１１０以降のステップの処理を実行し、空燃比アクティブ制御直前第２学習値efafgmaeを取得した場合と同様にして空燃比アクティブ制御直後第２学習値efafgatoを取得する。
【０２６８】
このとき、ステップ１２０８にて第２安定化判定値DLPKthとして所定値a2が使用され、ステップ１２１０にて値nthとして所定値b2が使用される。これらにより、空燃比アクティブ制御の直前の第２学習制御よりも空燃比アクティブ制御の直後の第２学習制御の方が、その学習条件が緩和される。即ち、学習機会（第２学習値を取得できる機会）が増大する。換言すると、空燃比アクティブ制御直後第１学習値efafgatoを取得する可能性は、空燃比アクティブ制御直後第２学習値efafgmaeを取得する可能性より大きくなる。
【０２６９】
また、この場合、ステップ１２２４にて第２学習値efafgが取得され、その後、ＣＰＵ８１がステップ１２３０に進むと、直前学習要求フラグXabyfgの値は「０」となっていることから、同ＣＰＵ８１は同ステップ１２３０にて「Ｎｏ」と判定し、ステップ１２３６に直接進む。更に、直後学習要求フラグXlategの値が「１」になっていることから、ＣＰＵ８１はステップ１２３６にて「Ｙｅｓ」と判定し、ステップ１２３８に進んでステップ１２２４にて格納した第２学習値efafgを空燃比アクティブ制御直後第２学習値efafgatoとして格納するとともに、続くステップ１２４０にて直後学習要求フラグXlategの値を「０」に設定する。
【０２７０】
このとき、ＣＰＵ８１が図１３に示した触媒劣化検出ルーチンの処理を実行すると、直後学習要求フラグXlategの値が「１」から「０」に変更された直後であるから、ＣＰＵ８１はステップ１３００に続くステップ１３０２、ステップ１３０４及びステップ１３１５の各ステップにて「Ｙｅｓ」と判定し、ステップ１３３０に進んで触媒劣化判定を実行する。
【０２７１】
より具体的に述べると、ＣＰＵ８１はステップ１３３０に進んだとき、図１８に示した触媒劣化判定サブルーチンの処理をステップ１８００から開始し、ステップ１８０５にて上記(22)式に従って空燃比アクティブ制御直前第２学習値efafgmaeと空燃比アクティブ制御直後第２学習値efafgatoの平均値を平均第２学習値efafgaveとして求める。次いで、ＣＰＵ８１はステップ１８１０にて上記(23)式に従って中心空燃比変動値Hyokaを求める。
【０２７２】
次に、ＣＰＵ８１は、ステップ１８１５にて中心空燃比変動値Hyokaが所定閾値Hyokathより小さいか否か判定する。このとき、空燃比アクティブ制御期間中の中心の変化が小さければ、中心空燃比変動値Hyokaは所定閾値Hyokathより小さいから、ＣＰＵ８１はステップ１８１５にて「Ｙｅｓ」と判定してステップ１８２０に進み、軌跡長Lengthが劣化判定閾値Ldetより大きいか否かを判定する。
【０２７３】
そして、軌跡長Lengthが劣化判定閾値Ldetより大きければ、ＣＰＵ８１はステップ１８２０にて「Ｙｅｓ」と判定してステップ１８２５に進み、上流側触媒５３が劣化していることを示すために触媒劣化フラグXdeteに「１」を設定するとともに、触媒正常フラグXokに「０」を設定してステップ１８９５に進み、本ルーチンを一旦終了する。
【０２７４】
一方、軌跡長Lengthが劣化判定閾値Ldet以下であれば、ＣＰＵ８１はステップ１８２０にて「Ｎｏ」と判定してステップ１８３５に進み、触媒劣化フラグXdeteに「０」を設定するとともに、触媒が正常であることを（劣化していないことを）示すために触媒正常フラグXokに「１」を設定してステップ１８９５に進み、本ルーチンを一旦終了する。
【０２７５】
その後、ＣＰＵ８１は図１３のステップ１３３２に進み、触媒劣化判定実行中フラグXafrefの値を「０」に設定し、ステップ１３９５に進んで本ルーチンを一旦終了する。
【０２７６】
他方、図１８のステップ１８１５の実行時において、中心空燃比変動値Hyokaが所定閾値Hyokath以上であると、ＣＰＵ８１はステップ１８１５にて「Ｎｏ」と判定してステップ１８９５に直接進んで本ルーチンを一旦終了する。即ち、今回得られた軌跡長Lengthに基づく触媒劣化判定を事実上禁止（キャンセル）する。
【０２７７】
ところで、空燃比アクティブ制御終了後に学習機会（第２学習値efafgを取得する機会）が得られず、所定時間が経過しても空燃比アクティブ制御直後第２学習値efafgatoが得られない場合、直後学習要求フラグXlategの値は、「１」に変更されてから所定時間が経過しても「０」に変更されない。従って、ＣＰＵ８１は、図１３のステップ１３０２にて「Ｎｏ」、ステップ１３３４にて「Ｙｅｓ」と判定してステップ１３３６に進み、触媒劣化判定実行中フラグXafref及び直後学習要求フラグXlategの値を「０」に設定するとともに、ステップ１３３８にて軌跡長Lengthの値を「０」に設定する。
【０２７８】
この結果、ＣＰＵ８１がステップ１３３０に進むことはなく、今回得られた軌跡長Lengthに基づく触媒劣化判定が禁止される（キャンセルされる）。これは、空燃比アクティブ制御直後第２学習値efafgatoが空燃比アクティブ制御終了直後に得られない場合、空燃比アクティブ制御中の中心空燃比の変化の評価が正確にできない（中心空燃比変動値Hyokaが求められない）ので、軌跡長Lengthが触媒劣化の程度を精度良く反映しているか否かの判断ができないからである。
【０２７９】
以上、本発明による触媒劣化判定装置の一実施形態によれば、エミッションを悪化させることを極力回避しながら、触媒の劣化判定を誤判定なく行うことができる。
【０２８０】
なお、本発明は上記各実施形態に限定されることはなく、本発明の範囲内において種々の変形例を採用することができる。例えば、触媒劣化指標値は、下流側空燃比センサ６８の出力Voxsの出力波形（即ち、軌跡長の他、下流側空燃比センサ６８の出力Voxsが所定の値（例えば閾値Voxsref）を横切る頻度（周波数）や、下流側空燃比センサ６８の出力Voxsと所定値（例えば閾値Voxsref）とにより囲まれる部分の面積等）であってもよい。
【０２８１】
また、空燃比アクティブ制御中において、下流側空燃比センサ６８の出力Voxsが理論空燃比よりもリッチである空燃比を示す値（状態）から理論空燃比よりもリーンである空燃比を示す値（状態）に変化した時点から、機関に供給される混合気の空燃比を設定リッチ空燃比に固定するとともに上記酸素収支の変化量delO2（の絶対値）を積分し、下流側空燃比センサ６８の出力Voxsが理論空燃比よりもリーンである空燃比を示す値から理論空燃比よりもリッチである空燃比を示す値に変化する時点での酸素収支の変化量delO2の積分値を同触媒の最大酸素吸蔵量を触媒劣化指標値として求め、この最大酸素吸蔵量が劣化判定用最大酸素吸蔵量より小さいとき、上流側触媒５３が劣化していると判定するように構成してもよい。
【０２８２】
同様に、空燃比アクティブ制御中において、下流側空燃比センサ６８の出力Voxsが理論空燃比よりもリーンである空燃比を示す値（状態）から理論空燃比よりもリッチである空燃比を示す値（状態）に変化した時点から、機関に供給される混合気の空燃比を設定リーン空燃比に固定するとともに上記酸素収支の変化量delO2（の絶対値）を積分し、下流側空燃比センサ６８の出力Voxsが理論空燃比よりもリッチである空燃比を示す値から理論空燃比よりもリーンである空燃比を示す値に変化する時点での酸素収支の変化量delO2の積分値を同触媒の最大酸素吸蔵量を触媒劣化指標値として求め、この最大酸素吸蔵量が劣化判定用最大酸素吸蔵量より小さいとき、上流側触媒５３が劣化していると判定するように構成してもよい。
【０２８３】
また、上流側空燃比センサ６７は、下流側空燃比センサ６８と同様な酸素濃度センサであってもよい。この場合、上流側の酸素濃度センサの出力がリーンであることを示したときに次第に増大し、リッチであることを示したときに次第に減少するとともに、上流側の酸素濃度センサの出力がリーンからリッチへと変化したことを示したときに所定量ＳＫｌだけスキップ的に減少し、リッチからリーンへと変化したことを示したときに所定量ＳＫｒだけスキップ状に増大するフィードバック量を求め、これを基本燃料噴射時間tfbseに乗じることで最終燃料噴射時間taufinalを求めてもよい。
【０２８４】
そして、このようなフィードバック制御において、下流側空燃比センサ６８の出力Voxsが目標値Voxsrefより小さいとき所定量ＳＫｒを次第に増大させるとともに所定量ＳＫｌを次第に減少せしめ、下流側空燃比センサ６８の出力Voxsが目標値Voxsrefより大きいとき所定量ＳＫｒを次第に減少させるとともに所定量ＳＫｌを次第に増大せしめてもよい。
【０２８５】
更に、上記第２学習値efafgも、第１学習値efafgxと同様に、機関の運転領域毎に求めるように構成してもよい。
【図面の簡単な説明】
【０２８６】
【図１】内燃機関に適用した本発明の一実施形態に係る触媒劣化判定装置の概略を示した図である。
【図２】図１に示した上流側空燃比センサの出力と空燃比の関係を示したグラフである。
【図３】図１に示した下流側空燃比センサの出力と空燃比の関係を示したグラフである。
【図４】空燃比アクティブ制御中における触媒の酸素収支量の変化と下流側空燃比センサの出力を示すタイムチャートである。
【図５】空燃比アクティブ制御中における触媒の酸素吸蔵量の変化と下流側空燃比センサの出力を示すタイムチャートである。
【図６】空燃比アクティブ制御中における触媒の酸素吸蔵量の変化と下流側空燃比センサの出力を示すタイムチャートである。
【図７】図１に示したＣＰＵが最終燃料噴射時間を決定するために実行する燃料噴射ルーチンを示したフローチャートである。
【図８】図１に示したＣＰＵがフィードバック量を算出するために実行するルーチンを示したフローチャートである。
【図９】図１に示したＣＰＵがサブフィードバック量を算出するために実行するルーチンを示したフローチャートである。
【図１０】図１に示したＣＰＵが第１学習値を算出するために実行するルーチンを示したフローチャートである。
【図１１】図１に示したＣＰＵが第２学習値を算出するために実行するルーチンを示したフローチャートである。
【図１２】図１に示したＣＰＵが第２学習値を算出するために実行するルーチンを示したフローチャートである。
【図１３】図１に示したＣＰＵが触媒劣化検出（触媒劣化判定）を行うために実行するルーチンを示したフローチャートである。
【図１４】図１に示したＣＰＵが触媒劣化指標値を取得するために実行する空燃比アクティブ制御ルーチンを示したフローチャートである。
【図１５】図１に示したＣＰＵが触媒劣化指標値を取得するために実行する空燃比アクティブ制御ルーチンを示したフローチャートである。
【図１６】図１に示したＣＰＵが空燃比を設定リッチ空燃比にするためのルーチンを示したフローチャートである。
【図１７】図１に示したＣＰＵが空燃比を設定リーン空燃比にするためのルーチンを示したフローチャートである。
【図１８】図１に示したＣＰＵが触媒劣化判定を行うために実行するルーチンを示したフローチャートである。
【符号の説明】
【０２８７】
２５…燃焼室、３２…吸気弁、３５…排気弁、３９…インジェクタ、５３…上流側触媒、６７…空燃比センサ、６８…酸素濃度センサ、８０…電気制御装置、８１…ＣＰＵ。
【図１】
2005194981.tif 000003
【図２】
2005194981.tif 000004
【図３】
2005194981.tif 000005
【図４】
2005194981.tif 000006
【図５】
2005194981.tif 000007
【図６】
2005194981.tif 000008
【図７】
2005194981.tif 000009
【図８】
2005194981.tif 000010
【図９】
2005194981.tif 000011
【図１０】
2005194981.tif 000012
【図１１】
2005194981.tif 000013
【図１２】
2005194981.tif 000014
【図１３】
2005194981.tif 000015
【図１４】
2005194981.tif 000016
【図１５】
2005194981.tif 000017
【図１６】
2005194981.tif 000018
【図１７】
2005194981.tif 000019
【図１８】
2005194981.tif 000020