(57)【要約】【課題】空燃比フィードバック性能およびトルク変動を重視した空燃比振動の周期および振動幅の設定を変更することなく、酸素吸蔵量の振動幅を、触媒劣化への適応または触媒劣化診断のために自由に変更することのできる内燃機関の空燃比制御装置を得る。【解決手段】上流側空燃比センサ１３の出力値Ｖ１と所定の制御定数とに応じて機関本体１に供給する空燃比を調整し、空燃比を周期的にリッチ方向およびリーン方向に振動させる第１の空燃比フィードバック制御手段２０１と、触媒の酸素吸蔵量に基づいて、周期的に振動する空燃比を平均化した平均空燃比がリッチ方向およびリーン方向に振動するように、制御定数を操作する平均空燃比振動手段２０３とを備えている。【選択図】図２
2008157132.tif 000002
【特許請求の範囲】
【請求項１】
内燃機関の排気系に設置されて前記内燃機関からの排気ガスを浄化する触媒と、
前記触媒の上流側に設けられて上流側排気ガス中の空燃比を検出する上流側空燃比センサと、
前記内燃機関の運転条件を検出する各種センサと、
前記上流側空燃比センサの出力値および所定の制御定数に応じて前記内燃機関に供給する空燃比を調整して、前記空燃比を周期的にリッチ方向およびリーン方向に振動させる第１の空燃比フィードバック制御手段と
を備えた内燃機関の空燃比制御装置であって、
平均空燃比振動手段をさらに備え、
前記平均空燃比振動手段は、前記触媒の酸素吸蔵量に基づいて、周期的に振動する前記空燃比を平均化した平均空燃比がリッチ方向およびリーン方向に振動するように、前記制御定数を操作することを特徴とする内燃機関の空燃比制御装置。
【請求項２】
前記平均空燃比振動手段は、前記平均空燃比に対する目標平均空燃比に応じて前記制御定数を設定し、前記目標平均空燃比をリッチ方向およびリーン方向に周期的に振動させることを特徴とする請求項１に記載の内燃機関の空燃比制御装置。
【請求項３】
前記平均空燃比振動手段は、前記触媒の酸素吸蔵量の振動幅が、前記触媒の最大酸素吸蔵量の範囲内であって、かつ前記内燃機関の運転条件に応じて設定された所定振動幅となるように、前記平均空燃比の振動幅または振動周期を、前記内燃機関の運転条件に応じて設定することを特徴とする請求項１または請求項２に記載の内燃機関の空燃比制御装置。
【請求項４】
前記平均空燃比振動手段は、前記触媒の酸素吸蔵量の振動幅が、前記触媒が劣化する前の最大酸素吸蔵量の範囲内であって、かつ劣化診断が必要な劣化触媒の最大酸素吸蔵量の範囲外となるように、前記平均空燃比の振動幅または振動周期を、前記内燃機関の運転条件に応じて設定することを特徴とする請求項１または請求項２に記載の内燃機関の空燃比制御装置。
【請求項５】
前記平均空燃比振動手段は、前記平均空燃比の振動開始時の最初の振動周期を、最終的に設定される振動周期の半分に設定することを特徴とする請求項１から請求項４までのいずれか１項に記載の内燃機関の空燃比制御装置。
【請求項６】
前記平均空燃比振動手段は、前記平均空燃比の振動開始時の最初の振動幅を、最終的に設定される振動幅の半分に設定することを特徴とする請求項１から請求項５までのいずれか１項に記載の内燃機関の空燃比制御装置。
【請求項７】
前記平均空燃比振動手段は、前記触媒の酸素吸蔵量を推定し、推定酸素吸蔵量が前記触媒の最大酸素吸蔵量の範囲内であって、かつ前記内燃機関の運転条件に応じて設定された所定範囲を振動するように、前記推定酸素吸蔵量に基づいて前記平均空燃比をリッチ方向とリーン方向とに反転することを特徴とする請求項１から請求項６までのいずれか１項に記載の内燃機関の空燃比制御装置。
【請求項８】
前記平均空燃比振動手段は、前記平均空燃比振動手段により設定される前記平均空燃比に基づいて、前記推定酸素吸蔵量を求めることを特徴とする請求項７に記載の内燃機関の空燃比制御装置。
【請求項９】
前記平均空燃比振動手段は、前記第１の空燃比フィードバック制御手段による前記空燃比の調整量に基づいて、前記推定酸素吸蔵量を求めることを特徴とする請求項７に記載の内燃機関の空燃比制御装置。
【請求項１０】
前記内燃機関の運転条件に基づいて前記触媒の最大酸素吸蔵量を演算する最大酸素吸蔵量演算手段を備え、
前記平均空燃比振動手段により設定される前記平均空燃比の振動周期または振動幅は、前記最大酸素吸蔵量演算手段により演算された前記最大酸素吸蔵量に応じて設定されることを特徴とする請求項１から請求項９までのいずれか１項に記載の内燃機関の空燃比制御装置。
【請求項１１】
前記内燃機関の運転条件に基づいて前記触媒の最大酸素吸蔵量を演算する最大酸素吸蔵量演算手段を備え、
前記平均空燃比振動手段により設定される前記平均空燃比の振動幅または前記触媒の酸素吸蔵量の振動幅は、前記最大酸素吸蔵量演算手段により演算された前記最大酸素吸蔵量に応じて設定され、
前記平均空燃比振動手段は、前記推定酸素吸蔵量に基づいて前記平均空燃比をリッチ方向とリーン方向とに反転することを特徴とする請求項７から請求項９までのいずれか１項に記載の内燃機関の空燃比制御装置。
【請求項１２】
前記平均空燃比振動手段は、前記内燃機関の過渡運転中または過渡運転後の所定期間において、前記平均空燃比の振動処理の実行を中止することを特徴とする請求項１から請求項１１までのいずれか１項に記載の内燃機関の空燃比制御装置。
【請求項１３】
前記触媒の下流側に設けられ、下流側排気ガス中の空燃比を検出する下流側空燃比センサと、
前記平均空燃比振動手段により振動する前記平均空燃比の中心空燃比を、前記下流側空燃比センサの出力値に基づいて補正する第２の空燃比フィードバック制御手段と
を備えたことを特徴とする請求項１から請求項１１までのいずれか１項に記載の内燃機関の空燃比制御装置。
【請求項１４】
前記第２の空燃比フィードバック制御手段の制御ゲインを変更する制御ゲイン変更手段を備え、
前記制御ゲイン変更手段は、前記平均空燃比振動手段による前記平均空燃比の振動処理の実行中においては、前記制御ゲインを変更することを特徴とする請求項１３に記載の内燃機関の空燃比制御装置。
【請求項１５】
前記平均空燃比振動手段は、
前記平均空燃比を所定周期でリッチ方向とリーン方向とに振動させ、
前記平均空燃比がリッチ方向に設定されているときに、前記下流側空燃比センサの出力値がリッチ方向に反転した場合には、前記平均空燃比のリッチ方向への設定周期を終了して、前記平均空燃比をリーン方向に強制的に反転させ、
前記平均空燃比がリーン方向に設定されているときに、前記下流側空燃比センサの出力値がリーン方向に反転した場合には、前記平均空燃比のリーン方向への設定周期を終了して、前記平均空燃比をリッチ方向に強制的に反転させることを特徴とする請求項１３または請求項１４に記載の内燃機関の空燃比制御装置。
【請求項１６】
前記平均空燃比振動手段は、
前記推定酸素吸蔵量に基づいて前記平均空燃比をリッチ方向とリーン方向とに振動させ、
前記平均空燃比がリッチ方向に設定されているときに、前記下流側空燃比センサの出力値がリッチ方向に反転した場合には、前記推定酸素吸蔵量を前記触媒の酸素吸蔵量の振動範囲の下限値にリセットするとともに、前記平均空燃比をリーン方向に強制的に反転させ、
前記平均空燃比がリーン方向に設定されているときに、前記下流側空燃比センサの出力値がリーン方向に反転した場合には、前記推定酸素吸蔵量を前記触媒の酸素吸蔵量の振動範囲の上限値にリセットするとともに、前記平均空燃比をリッチ方向に強制的に反転させることを特徴とする請求項１３から請求項１５までのいずれか１項に記載の内燃機関の空燃比制御装置。
【請求項１７】
前記触媒の劣化の有無を診断する触媒劣化診断手段を備え、
前記触媒劣化診断手段は、前記最大酸素吸蔵量演算手段により演算された前記最大酸素吸蔵量に基づいて、前記触媒の劣化を診断することを特徴とする請求項１から請求項１６までのいずれか１項に記載の内燃機関の空燃比制御装置。
【請求項１８】
前記触媒の劣化の有無を診断する触媒劣化診断手段を備え、
前記触媒劣化診断手段は、前記平均空燃比振動手段による前記平均空燃比の振動処理の実行中に、少なくとも前記下流側空燃比センサの出力値により前記触媒の劣化を診断することを特徴とする請求項１３から請求項１６までのいずれか１項に記載の内燃機関の空燃比制御装置。
【請求項１９】
前記平均空燃比振動手段は、前記触媒劣化診断手段による前記触媒の劣化診断時と劣化診断時以外とで、前記触媒の酸素吸蔵量の振動幅が変化するように、前記平均空燃比の振動幅または振動周期を変更することを特徴とする請求項１７または請求項１８に記載の内燃機関の空燃比制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、車両などに搭載される内燃機関の空燃比制御装置に関し、特に内燃機関に供給される空燃比を周期的にリッチ方向およびリーン方向に振動させる空燃比フィードバック制御手段を備えた内燃機関の空燃比制御装置に関するものである。
【背景技術】
【０００２】
一般的に、内燃機関の排気通路には、排気ガス中の有害成分ＨＣ、ＣＯ、ＮＯｘを同時に浄化する３元触媒（以下、単に「触媒」という）が設置されている。この種の触媒においては、理論空燃比付近で有害成分ＨＣ、ＣＯ、ＮＯｘのいずれについても浄化率が高くなる。したがって、内燃機関の空燃比制御装置においては、通常、触媒の上流側にＯ２センサを設け、空燃比が理論空燃比付近となるように燃料噴射量を調整して、空燃比をフィードバック制御している。
【０００３】
また、触媒には、フィルタ処理のように作用する酸素吸蔵能力が付加されており、上流側空燃比（上流側Ｏ２センサの出力値に対応）の理論空燃比からの一時的な変動を吸収するようになっている。すなわち、触媒は、上流側空燃比（以下、「上流側Ａ／Ｆ」という）が理論空燃比よりもリーン側の場合には、排気ガス中の酸素を取り込んで蓄積し、逆にリッチ側の場合には、触媒中に蓄積されている酸素を放出する。これにより、上流側Ａ／Ｆの変動は、触媒内でフィルタ処理されて触媒下流側の空燃比となる。
【０００４】
また、触媒の酸素吸蔵量の最大値は、触媒の製造時に添付される酸素吸蔵能力を有する物質の量によって決定し、酸素吸蔵量が触媒の最大酸素吸蔵量または最小酸素吸蔵量（＝０）に到達すると、もはや上流側Ａ／Ｆの変動を吸収することができなくなるので、触媒内の空燃比が理論空燃比から外れて、触媒の浄化能力は低下する。このとき、触媒の下流側での空燃比が理論空燃比から大きく外れるので、触媒の酸素吸蔵量が最大値または最小値（＝０）に到達したことを検出することができる。
【０００５】
また、触媒は、高温の排気ガスにさらされるので、車両用の内燃機関において通常考えられる使用条件では、触媒の浄化機能が急激に低下しないように設計されている。しかし、使用中に何らかの原因（たとえば、失火した場合）で、触媒の酸素吸蔵能力が著しく低下する場合があり、また、通常の使用条件下でも、たとえば走行距離が数万キロにも達してくると、経年劣化により徐々に酸素吸蔵能力は低下していく。
【０００６】
一方、近年では、触媒の酸素吸蔵量を最大酸素吸蔵量の範囲内で所定量振動させると、触媒の浄化能力が向上することに着目して、触媒劣化または触媒温度による触媒の最大酸素吸蔵量の変化に対して適応的に酸素吸蔵量の振動幅を変更し、劣化にかかわらず触媒の浄化能力を最大限に引き出す内燃機関の空燃比制御装置が提案されている（たとえば、特許文献１参照）。
【０００７】
また、酸素吸蔵量の振動幅が触媒の最大酸素吸蔵量から振り切れた（逸脱した）場合に、触媒の下流側Ａ／Ｆの変動が大きくなる原理に着目し、酸素吸蔵量の振動幅を変化させて、下流側Ａ／Ｆの変動が増加したときの酸素吸蔵量の変動量から触媒の劣化を診断する内燃機関の空燃比制御装置も提案されている（たとえば、特許文献２参照）。
【０００８】
上記特許文献１に記載の従来装置においては、酸素吸蔵量の振動幅を変化させるために、図３４、図３５のタイミングチャートに示すように、上流側Ａ／Ｆのリッチ方向、リーン方向への空燃比振動の周期および振動幅を変化させている。
【０００９】
すなわち、図３４のタイミングチャートに示すように正常触媒の場合には、最大酸素吸蔵量ＯＳＣｍａｘが大きいので、最大酸素吸蔵量ＯＳＣｍａｘの範囲内で推定酸素吸蔵量（以下、単に「酸素吸蔵量」ともいう）ＯＳＣの振動幅ΔＯＳＣも大きく設定することができ、上流側Ａ／Ｆの変動の振動幅または周期を大きくして、酸素吸蔵量の振動幅ΔＯＳＣを大きく設定している。
【００１０】
一方、図３５のタイミングチャートに示すように劣化触媒の場合には、最大酸素吸蔵量ＯＳＣｍａｘが小さいので、最大酸素吸蔵量ＯＳＣｍａｘの範囲内で酸素吸蔵量の振動幅ΔＯＳＣも小さく設定され、上流側Ａ／Ｆの変動の振動幅または周期を小さくして、酸素吸蔵量の振動幅ΔＯＳＣを小さく設定している。
【００１１】
以上のように、特許文献１に記載された従来の内燃機関の空燃比制御装置においては、最大酸素吸蔵量ＯＳＣｍａｘの変化に応じて、空燃比振動の振動幅または周期（図３４、図３５参照）を大きく変化させる必要があった。
【００１２】
【特許文献１】特開平７−２５９６００号公報
【特許文献２】特開平６−２６３３０号公報
【発明の開示】
【発明が解決しようとする課題】
【００１３】
従来の内燃機関の空燃比制御装置では、たとえば特許文献１に参照されるように、最大酸素吸蔵量の変化に応じて空燃比振動の振動幅または周期を大きく変化させる必要があることから、空燃比フィードバック性能およびトルク変動に大きな影響を与えるので、空燃比の制御性を悪化させるという課題があった。
【００１４】
また、空燃比振動の振動幅または周期が大きくなった場合に外乱が生じると、定常状態に収束させる性能が悪化して、加速または減速時の排気ガス性能が悪化するという課題があった。
【００１５】
また、空燃比の変化によってトルク変動を生じることから、振動幅または周期が大きく変化するとドライバビリティが悪化して商品性が低下するので、酸素吸蔵量の振動処理用の設定条件と、フィードバック性能重視の設定条件およびトルク変動重視の設定条件とを分離して設定することが困難であるという課題があった。
【００１６】
また、世界中で様々に設定されている排気ガス規制に対応するために、各国各地域の規制に応じて触媒を変更して最大酸素吸蔵量も様々に変化させる必要があることから、空燃比振動の振動幅または周期を触媒ごとに設定する必要があるので、適合コストが大きくなるという課題があった。さらに、触媒劣化診断の排気ガス規制も様々であり、各国各地域の規制に合わせて空燃比振動の振動幅または周期を適合する必要があるという課題があった。
【００１７】
また、近年では、地球環境への意識の向上から排気ガス規制が強化され、より軽微な触媒劣化（最大酸素吸蔵量の減少）を検出するために、空燃比振動の周期または振動幅を大きく設定することが要求されているので、空燃比フィードバック性能の悪化およびトルク変動の増加などの各種性能悪化を招く傾向にあるという課題があった。
【００１８】
さらに、最近では年々、酸素吸蔵能力を有する物質の耐熱性が向上し、触媒への添加量が増加可能になっていることから、最大酸素吸蔵量が増加しており、空燃比振動の周期または振動幅をできるだけ大きく設定することが要求されているので、空燃比フィードバック性能の悪化およびトルク変動の増加などの各種性能悪化を招く傾向にあるという課題があった。
【００１９】
この発明は、上記のような課題を解決するためになされたものであり、空燃比フィードバック性能およびトルク変動を重視した空燃比振動の周期または振動幅の設定を変更することなく、酸素吸蔵量の振動幅を、触媒劣化に適応するために自由に変更することのできる内燃機関の空燃比制御装置を得ることを目的とする。
【課題を解決するための手段】
【００２０】
この発明による内燃機関の空燃比制御装置は、内燃機関の排気系に設置されて内燃機関からの排気ガスを浄化する触媒と、触媒の上流側に設けられて上流側排気ガス中の空燃比を検出する上流側空燃比センサと、内燃機関の運転条件を検出する各種センサと、上流側空燃比センサの出力値および所定の制御定数に応じて内燃機関に供給する空燃比を調整して、空燃比を周期的にリッチ方向およびリーン方向に振動させる第１の空燃比フィードバック制御手段とを備えた内燃機関の空燃比制御装置であって、平均空燃比振動手段をさらに備え、平均空燃比振動手段は、触媒の酸素吸蔵量に基づいて、周期的に振動する空燃比を平均化した平均空燃比がリッチ方向およびリーン方向に振動するように、制御定数を操作するものである。
【発明の効果】
【００２１】
この発明によれば、上流側Ａ／Ｆのリッチ方向およびリーン方向への空燃比振動の周期または振動幅を大きく変化させることなく、振動中の空燃比の平均空燃比をリッチ方向およびリーン方向に周期的に振動させて、酸素吸蔵量の振動幅を変更させることにより、空燃比フィードバック性能およびトルク変動を重視した空燃比振動の周期または振動幅の設定を変更することなく、酸素吸蔵量の振動幅を、触媒劣化に適応するために自由に変更することができる。
【発明を実施するための最良の形態】
【００２２】
実施の形態１．
図１はこの発明の実施の形態１に係る内燃機関の空燃比制御装置を概略的に示す構成図である。
図１において、内燃機関（エンジン）を構成する機関本体１の吸気通路２には、エアフローセンサ３が設けられている。エアフローセンサ３は、機関本体１への吸入空気量を直接計測するためのホットワイヤを内蔵しており、吸入空気量に比例した出力信号（アナログ電圧）を生成する。エアフローセンサ３の出力信号は、マイクロコンピュータからなる制御回路１０内のマルチプレクサ内蔵型のＡ／Ｄ変換器１０１に供給されている。
【００２３】
機関本体１には、複数気筒の点火制御に関連したディストリビュータ４が設けられており、ディストリビュータ４には、クランク角センサ５、６が配設されている。一方のクランク角センサ５は、たとえばクランク角に換算して７２０゜ごとに基準位置検出用パルス信号を生成し、他方のクランク角センサ６は、クランク角に換算して３０゜ごとに基準位置検出用パルス信号を生成する。クランク角センサ５、６の各パルス信号は、制御回路１０内の入出力インターフェイス１０２に供給され、クランク角センサ６の出力信号は、ＣＰＵ１０３の割込み端子に供給される。
【００２４】
機関本体１の吸気通路２には、気筒ごとに燃料供給系から加圧燃料を吸気ポートへ供給するための燃料噴射弁７が設けられている。また、機関本体１のシリンダブロックのウォータジャケット８には、冷却水の温度を検出するための水温センサ９が設けられている。水温センサ９は、冷却水温ＴＨＷに応じた電気信号（アナログ電圧）を生成する。水温センサ９の出力信号は、制御回路１０内のＡ／Ｄ変換器１０１に供給されている。
【００２５】
機関本体１の排気マニホールド１１よりも下流側の排気系には、排気ガス中の３つの有害成分ＨＣ、ＣＯ、ＮＯｘを同時に浄化するための３元触媒を収容した触媒コンバータ（以下、単に「触媒」という）１２が設けられている。触媒１２の上流側に位置する排気マニホールド１１には、上流側Ｏ２センサ（上流側空燃比センサ）１３が設けられ、触媒１２の下流側の排気管１４には、下流側Ｏ２センサ（下流側空燃比センサ）１５が設けられている。
【００２６】
各Ｏ２センサ１３、１５は、排気ガス中の空燃比に応じた電気信号（電圧信号）を出力値Ｖ１、Ｖ２として生成する。空燃比に応じて異なる各Ｏ２センサ１３、１５の出力値Ｖ１、Ｖ２は、制御回路１０内のＡ／Ｄ変換器１０１に入力されている。
【００２７】
制御回路１０は、Ａ／Ｄ変換器１０１、入出力インターフェイス１０２およびＣＰＵ１０３に加えて、ＲＯＭ１０４、ＲＡＭ１０５、バックアップＲＡＭ１０６、クロック発生回路１０７および駆動装置１０８、１０９、１１０などを備えている。制御回路１０には、機関本体１の運転条件を示す各種センサ（エアフローセンサ３、クランク角センサ５、６、温度センサ９など）からの検出情報が入力されている。各種センサには、吸気通路２内のスロットル弁の下流側に設けられた圧力センサ（図示せず）なども含まれる。
【００２８】
制御回路１０において、燃料供給量Ｑｆｕｅｌ（後述する）が演算されると、駆動装置１０８、１０９、１１０により燃料噴射弁７が駆動され、燃料供給量Ｑｆｕｅｌに応じた量の燃料が機関本体１の燃焼室に送り込まれる。なお、ＣＰＵ１０３への割込み発生は、Ａ／Ｄ変換器１０１のＡ／Ｄ変換終了時、入出力インターフェイス１０２を介したクランク角センサ６からのパルス信号受信時、クロック発生回路１０７からの割込信号受信時、などに行われる。
【００２９】
エアフローセンサ３からの吸入空気量Ｑａおよび水温センサ９からの冷却水温ＴＨＷは、Ａ／Ｄ変換器１０１により所定時間ごとに実行されるＡ／Ｄ変換ルーチンにしたがって取込まれ、ＲＡＭ１０５の所定領域に格納される。つまり、ＲＡＭ１０５内の吸入空気量Ｑａおよび冷却水温ＴＨＷは、所定時間ごとに更新されている。また、エンジン回転速度Ｎｅは、クランク角センサ６の３０゜ＣＡごとの割込みによって演算されてＲＡＭ１０５の所定領域に格納される。
【００３０】
図２は図１内の制御回路１０の基本構成を示す機能ブロック図であり、図２内の各手段は主としてＣＰＵ１０３により構成されている。
前述のように、制御回路１０には、上流側Ｏ２センサ１３の出力値Ｖ１（触媒１２の上流側排気ガス中の空燃比）と、下流側Ｏ２センサ１５の出力値Ｖ２（触媒１２の下流側排気ガス中の空燃比）と、他の各種センサからの検出情報が入力されている。
【００３１】
図２において、制御回路１０は、第１の空燃比フィードバック制御手段２０１と、第２の空燃比フィードバック制御手段２０２と、平均空燃比振動手段２０３と、最大酸素吸蔵量演算手段２０４と、触媒劣化振動手段２０５とを備えており、第１の空燃比フィードバック制御手段２０１には、上流側Ｏ２センサ１３の出力値Ｖ１が入力されている。
【００３２】
第２の空燃比フィードバック制御手段２０２、平均空燃比振動手段２０３とおよび触媒劣化振動手段２０５には、下流側Ｏ２センサ１５の出力値Ｖ２が入力され、最大酸素吸蔵量演算手段２０４には、他の各種センサからの検出情報が入力されている。
【００３３】
第１の空燃比フィードバック制御手段２０１は、上流側Ｏ２センサ１３の出力値Ｖ１および所定の制御定数に応じて、燃料噴射弁７の励磁駆動手段（図示せず）を制御することにより、機関本体１に供給する空燃比を調整して、空燃比を周期的にリッチ方向およびリーン方向に振動させる。
【００３４】
平均空燃比振動手段２０３は、触媒１２の酸素吸蔵量（後述する推定酸素吸蔵量ＯＳＣ）に基づいて、周期的に振動する空燃比を平均化した平均空燃比がリッチ方向およびリーン方向に振動するように、第１の空燃比フィードバック制御手段２０１内で用いられる制御定数を操作する。
【００３５】
平均空燃比振動手段２０３は、具体的には、平均空燃比に対する目標平均空燃比ＡＦＡＶＥｏｂｊに応じて制御定数を設定し、目標平均空燃比ＡＦＡＶＥｏｂｊをリッチ方向およびリーン方向に周期的に振動させる。
【００３６】
また、たとえば、平均空燃比振動手段２０３は、触媒１２の酸素吸蔵量の振動幅ΔＯＳＣが、触媒１２の最大酸素吸蔵量ＯＳＣｍａｘの範囲内であって、かつ機関本体１の運転条件に応じて設定された所定振動幅となるように、平均空燃比の振動幅または振動周期を、機関本体１の運転条件に応じて設定する。
【００３７】
または、平均空燃比振動手段２０３は、触媒１２の酸素吸蔵量の振動幅ΔＯＳＣが、触媒１２が劣化する前の最大酸素吸蔵量ＯＳＣｍａｘの範囲内であって、かつ劣化診断が必要な劣化触媒の最大酸素吸蔵量の範囲外となるように、平均空燃比の振動幅または振動周期を、機関本体１の運転条件に応じて設定する。
【００３８】
平均空燃比振動手段２０３は、平均空燃比の振動開始時の最初の振動周期を、最終的に設定される振動周期の半分に設定し、平均空燃比の振動開始時の最初の振動幅を、最終的に設定される振動幅の半分に設定する。
また、平均空燃比振動手段２０３は、機関本体１の過渡運転中または過渡運転後の所定期間において、平均空燃比の振動処理の実行を中止する。
【００３９】
平均空燃比振動手段２０３は、平均空燃比を所定周期でリッチ方向とリーン方向とに振動させ、平均空燃比がリッチ方向に設定されているときに、下流側Ｏ２センサ１５の出力値Ｖ２がリッチ方向に反転した場合には、平均空燃比のリッチ方向への設定周期を終了して、平均空燃比をリーン方向に強制的に反転させる。また、平均空燃比振動手段２０３は、平均空燃比がリーン方向に設定されているときに、下流側Ｏ２センサ１５の出力値Ｖ２がリーン方向に反転した場合には、平均空燃比のリーン方向への設定周期を終了して、平均空燃比をリッチ方向に強制的に反転させる。
【００４０】
また、平均空燃比振動手段２０３は、推定酸素吸蔵量ＯＳＣに基づいて平均空燃比をリッチ方向とリーン方向とに振動させ、平均空燃比がリッチ方向に設定されているときに、下流側Ｏ２センサの出力値Ｖ２がリッチ方向に反転した場合には、推定酸素吸蔵量ＯＳＣを触媒１２の酸素吸蔵量の振動範囲の下限値にリセットするとともに、平均空燃比をリーン方向に強制的に反転させる。
【００４１】
また、平均空燃比振動手段２０３は、平均空燃比がリーン方向に設定されているときに、下流側Ｏ２センサの出力値Ｖ２がリーン方向に反転した場合には、推定酸素吸蔵量ＯＳＣを触媒１２の酸素吸蔵量の振動範囲の上限値にリセットするとともに、平均空燃比をリッチ方向に強制的に反転させる。
さらに、平均空燃比振動手段２０３は、触媒劣化診断手段２０５による触媒１２の劣化診断時と劣化診断時以外とで、触媒１２の酸素吸蔵量の振動幅ΔＯＳＣが変化するように、平均空燃比の振動幅または振動周期を変更する。
【００４２】
第２の空燃比フィードバック制御手段２０２は、平均空燃比振動手段２０３により振動する平均空燃比の振動中心（中心空燃比）ＡＦＣＮＴを、下流側Ｏ２センサ１５の出力値Ｖ２に基づいて補正する。
【００４３】
また、第２の空燃比フィードバック制御手段２０２は、第２の空燃比フィードバック制御手段２０２の制御ゲインを変更する制御ゲイン変更手段２０６を含む。制御ゲイン変更手段２０６は、平均空燃比振動手段２０３による平均空燃比の振動処理の実行中においては、制御ゲインを変更する。
【００４４】
触媒劣化診断手段２０５は、最大酸素吸蔵量演算手段２０４により演算された最大酸素吸蔵量ＯＳＣｍａｘに基づいて、触媒１２の劣化の有無を診断する。また、触媒劣化診断手段２０５は、平均空燃比振動手段２０３による平均空燃比の振動処理の実行中に、少なくとも下流側Ｏ２センサの出力値Ｖ２により触媒１２の劣化を診断する。
触媒劣化診断手段２０５による診断結果は、警報ランプ（図示せず）などの警報駆動手段に入力される。
【００４５】
次に、図３のフローチャートを参照しながら、図２内の第１の空燃比フィードバック制御手段２０１による演算処理動作について説明する。
図３の演算処理ルーチンは、上流側Ｏ２センサ１３の出力値Ｖ１に基づく燃料補正係数ＦＡＦの演算制御手順を示しており、所定時間（たとえば、５ｍｓｅｃ）ごとに第１の空燃比フィードバック制御手段２０１により実行される。
【００４６】
図３において、各判定処理からの分岐部の符号「Ｙ」、「Ｎ」は、それぞれ「ＹＥＳ」、「ＮＯ」を示している。
まず、上流側Ｏ２センサ１３の出力値Ｖ１をＡ／Ｄ変換して取り込み（ステップ４０１）、上流側Ｏ２センサ１３による空燃比のフィードバックＦ／Ｂ（閉ループ）条件が成立しているか否かを判定する（ステップ４０２）。
【００４７】
このとき、理論空燃比制御以外の空燃比制御条件（たとえば、機関始動中、低水温時のリッチ化制御中、高負荷パワー増量のリッチ化制御中、燃費向上のためのリーン化制御中、始動後のリーン化制御中、燃料カット中）の成立時や、上流側Ｏ２センサ１３の不活性状態時または故障時などの場合は、いずれも閉ループ条件が不成立状態と判定され、その他の場合は、閉ループ条件が成立状態と判定される。
【００４８】
ステップ４０２において、閉ループ条件が不成立（すなわち、ＮＯ）と判定されれば、燃料補正係数ＦＡＦを「１．０」に設定して（ステップ４３３）、ディレイカウンタＣＤＬＹを「０」にリセットする（ステップ４３４）。なお、燃料補正係数ＦＡＦは、閉ループ制御の終了直前の値または学習値（制御回路１０内のバックアップＲＡＭ１０６内の記憶値）としてもよい。
【００４９】
続いて、上流側Ｏ２センサ１３の出力値Ｖ１が比較電圧ＶＲ１以下（リーン）であるか否かを判定し（ステップ４３５）、上流側空燃比がリーン状態（Ｖ１≦ＶＲ１）（すなわち、ＹＥＳ）と判定されれば、遅延前空燃比フラグＦ０を「０」（リーン）に設定するとともに（ステップ４３６）、遅延後空燃比フラグＦ１を「０」（リーン）に設定して（ステップ４３７）、図３の処理ルーチンを抜け出る（ステップ４４０）。なお、比較電圧ＶＲ１は、リーン判定用の基準電圧（たとえば、０．４５Ｖ程度）に設定される。
【００５０】
また、ステップ４３５においてＶ１＞ＶＲ１（すなわち、ＮＯ）と判定されれば、上流側空燃比がリッチ状態なので、遅延前空燃比フラグＦ０を「１」（リッチ）に設定するとともに（ステップ４３８）、遅延後空燃比フラグＦ１を「１」（リッチ）に設定して（ステップ４３９）、図３の処理ルーチンを抜け出る（ステップ４４０）。以上のステップ４３４〜４３９により、空燃比の閉ループ条件が不成立時での初期値が設定される。
【００５１】
一方、ステップ４０２において、閉ループ（フィードバック）条件が成立（すなわち、ＹＥＳ）と判定されれば、続いて、上流側Ｏ２センサ１３の出力値Ｖ１が比較電圧ＶＲ１（たとえば、０．４５Ｖ）以下か否か、つまり、触媒１２の上流側空燃比が比較電圧ＶＲ１に対してリッチ状態かリーン状態かを判定する（ステップ４０３）。
【００５２】
ステップ４０３において、Ｖ１≦ＶＲ１（すなわち、ＹＥＳ）と判定されれば、上流側空燃比がリーン状態であると見なし、続いて、ディレイカウンタＣＤＬＹが最大値ＴＤＲ以上であるか否かを判定する（ステップ４０４）。なお、最大値ＴＤＲは、上流側Ｏ２センサ１３の出力値がリーンからリッチに変化しても、リーン状態であるとの判定を保持するための「リッチ遅延時間」に対応し、正の値で定義される。
【００５３】
ステップ４０４において、ＣＤＬＹ≧ＴＤＲ（すなわち、ＹＥＳ）と判定されれば、ディレイカウンタＣＤＬＹを「０」にリセットするとともに（ステップ４０５）、遅延前空燃比フラグＦ０を「０」（リーン）に設定して（ステップ４０６）、ステップ４１６（後述する）に進む。
【００５４】
また、ステップ４０４において、ＣＤＬＹ＜ＴＤＲ（すなわち、ＮＯ）と判定されれば、続いて、遅延前空燃比フラグＦ０が「０」（リーン）であるか否かを判定し（ステップ４０７）、Ｆ０＝０（リーン）（すなわち、ＹＥＳ）と判定されれば、ディレイカウンタＣＤＬＹを「１」だけ減算して（ステップ４０８）、ステップ４１６に進む。また、ステップ４０７において、Ｆ０＝１（リッチ）（すなわち、ＮＯ）と判定されれば、ディレイカウンタＣＤＬＹを「１」だけ加算して（ステップ４０９）、ステップ４１６に進む。
【００５５】
一方、ステップ４０３において、Ｖ１＞ＶＲ１（すなわち、ＮＯ）と判定されれば、上流側空燃比がリッチ状態であると見なし、続いて、ディレイカウンタＣＤＬＹが最小値ＴＤＬ以下であるか否かを判定する（ステップ４１０）。なお、最小値ＴＤＬは、上流側Ｏ２センサ１３の出力値Ｖ１がリッチからリーンに変化しても、リッチ状態であるとの判定を保持するための「リーン遅延時間」に対応し、負の値で定義される。
【００５６】
ステップ４１０において、ＣＤＬＹ≦ＴＤＬ（すなわち、ＹＥＳ）と判定されれば、ディレイカウンタＣＤＬＹを「０」にリセットするとともに（ステップ４１１）、遅延前空燃比フラグＦ０を「１」（リッチ）に設定して（ステップ４１２）、ステップ４１６に進む。
【００５７】
また、ステップ４１０において、ＣＤＬＹ＞ＴＤＬ（すなわち、ＮＯ）と判定されれば、続いて、遅延前空燃比フラグＦ０が「０」（リーン）であるか否かを判定し（ステップ４１３）、Ｆ０＝０（すなわち、ＹＥＳ）と判定されれば、ディレイカウンタＣＤＬＹを「１」だけ減算して（ステップ４１４）、ステップ４１６に進む。
【００５８】
また、ステップ４１３において、Ｆ０＝１（リッチ）（すなわち、ＮＯ）と判定されれば、ディレイカウンタＣＤＬＹを「１」だけ加算して（ステップ４１５）、ステップ４１６に進む。
【００５９】
ステップ４１６においては、ディレイカウンタＣＤＬＹが最小値ＴＤＬ以下であるか否かを判定し、ＣＤＬＹ＞ＴＤＬ（すなわち、ＮＯ）と判定されれば、ステップ４１９（後述する）に進む。
【００６０】
また、ステップ４１６において、ＣＤＬＹ≦ＴＤＬ（すなわち、ＹＥＳ）と判定されれば、ディレイカウンタＣＤＬＹを最小値ＴＤＬに設定し（ステップ４１７）、遅延後空燃比フラグＦ１を「０」（リーン）に設定する（ステップ４１８）。つまり、ディレイカウンタＣＤＬＹが最小値ＴＤＬに到達した場合には、最小値ＴＤＬでガードするとともに、遅延後空燃比フラグＦ１を「０」（リーン）とする。
【００６１】
続いて、ディレイカウンタＣＤＬＹが最大値ＴＤＲ以上であるか否かを判定し（ステップ４１９）、ＣＤＬＹ＜ＴＤＲ（すなわち、ＮＯ）と判定されれば、ステップ４２２（後述する）に進む。
【００６２】
また、ステップ４１９において、ＣＤＬＹ≧ＴＤＲ（すなわち、ＹＥＳ）と判定されれば、ディレイカウンタＣＤＬＹを最大値ＴＤＲに設定するとともに（ステップ４２０）、遅延後空燃比フラグＦ１を「１」（リッチ）に設定して（ステップ４２１）、ステップ４２２に進む。つまり、ディレイカウンタＣＤＬＹが最大値ＴＤＲに到達した場合には、ディレイカウンタＣＤＬＹを最大値ＴＤＲでガードするとともに、遅延後空燃比フラグＦ１を「１」（リッチ）とする。
【００６３】
ステップ４２２においては、燃料補正係数ＦＡＦのスキップ増減処理（または、積分処理）の実行に先だって、まず、遅延処理後の空燃比が反転したか否かを、遅延後空燃比フラグＦ１の符号が反転したか否かにより判定する。
【００６４】
ステップ４２２において、遅延後空燃比フラグＦ１の符号（空燃比）が反転している（すなわち、ＹＥＳ）と判定されれば、続いて、リッチからリーンへの反転か、またはリーンからリッチへの反転かを、遅延後空燃比フラグＦ１の値が「０」であるか否かにより判定する（ステップ４２３）。
【００６５】
ステップ４２３において、Ｆ１＝０（すなわち、ＹＥＳ）と判定されれば、リッチからリーンへの反転であるので、燃料補正係数ＦＡＦを「ＦＡＦ＋ＲＳＲ」として、定数ＲＳＲだけスキップ的に増大させ（ステップ４２４）、ステップ４２９（後述する）に進む。
【００６６】
また、ステップ４２３において、Ｆ１＝１（すなわち、ＮＯ）と判定されれば、リーンからリッチへの反転であるので、燃料補正係数ＦＡＦを「ＦＡＦ−ＲＳＬ」として、定数ＲＳＬだけスキップ的に減少させ（ステップ４２５）、ステップ４２９に進む。
【００６７】
一方、ステップ４２２において、遅延後空燃比フラグＦ１の符号（空燃比）が反転していない（すなわち、ＮＯ）と判定されれば、続いて、遅延後空燃比フラグＦ１が「０」（リーン）であるか否かを判定し（ステップ４２６）、Ｆ１＝０（すなわち、ＹＥＳ）と判定されれば、燃料補正係数ＦＡＦを「ＦＡＦ＋ＫＩＲ」として、定数ＫＩＲ（＜ＲＳＲ）だけ増大させ（ステップ４２７）、ステップ４２９に進む。
【００６８】
また、ステップ４２６において、Ｆ１＝１（すなわち、ＮＯ）と判定されれば、リッチ状態であるので、燃料補正係数ＦＡＦを「ＦＡＦ−ＫＩＬ」として、定数ＫＩＬ（＜ＲＳＬ）だけ減少させ（ステップ４２８）、ステップ４２９に進む。
【００６９】
なお、積分定数ＫＩＲ、ＫＩＬは、スキップ定数ＲＳＲ、ＲＳＬと比べて、十分小さい値に設定されている。したがって、ステップ４２７においては、リーン状態（Ｆ１＝０）での燃料噴射量を徐々に増大させ、ステップ４２８においては、リッチ状態（Ｆ１＝１）での燃料噴射量を徐々に減少させることになる。
【００７０】
ステップ４２９においては、燃料補正係数ＦＡＦが「０．８」よりも小さいか否かを判定し、ＦＡＦ＜０．８（すなわち、ＹＥＳ）と判定されれば、燃料補正係数ＦＡＦを「０．８」に設定して（ステップ４３０）、ステップ４３１（後述する）に進む。
【００７１】
一方、ステップ４２９において、ＦＡＦ≧０．８（すなわち、ＮＯ）と判定されれば、続いて、燃料補正係数ＦＡＦが「１．２」よりも大きいか否かを判定し（ステップ４３１）、ＦＡＦ＞１．２（すなわち、ＹＥＳ）と判定されれば、燃料補正係数ＦＡＦを「１．２」に設定して（ステップ４３２）、図３の処理ルーチンを抜け出る（ステップ４４０）。また、ステップ４３１において、ＦＡＦ≦１．２（すなわち、ＮＯ）と判定されれば、直ちに、図３の処理ルーチンを抜け出る（ステップ４４０）。
【００７２】
つまり、ステップ４２４、４２５、４２７、４２８で演算された燃料補正係数ＦＡＦは、ステップ４２９、４３０において、「０．８」（最小値）でガードされ、また、ステップ４３１、４３２において、「１．２」（最大値）でガードされる。これにより、何らかの原因で燃料補正係数ＦＡＦが大きく、または、小さくなり過ぎた場合には、最大値（たとえば、１．２）または最小値（たとえば、０．８）で機関本体１の空燃比を制御して、オーバリッチまたはオーバリーンになるのを防ぐ。
【００７３】
以上で図３の演算処理は終了し、ステップ４０１〜４４０により演算された燃料補正係数ＦＡＦは、制御回路１０内のＲＡＭ１０５に格納される。
【００７４】
次に、図４のタイミングチャートを参照しながら、図３に示した演算処理動作について補足説明する。
図４において、上流側Ｏ２センサ１３の出力値Ｖ１に基づいて遅延処理前の空燃比信号（リッチ、リーン判定の比較結果）が得られると、遅延処理前の空燃比信号に応答する遅延前空燃比フラグＦ０は、リッチ状態またはリーン状態に変化する。
【００７５】
ディレイカウンタＣＤＬＹは、最大値ＴＤＲと最小値ＴＤＬとの間の範囲内で、遅延前空燃比フラグＦ０（遅延処理前の空燃比信号に対応）のリッチ状態に応答してカウントアップされ、逆に、リーン状態に応答してカウントダウンされる。これにより、遅延後空燃比フラグＦ１は、遅延処理された空燃比信号を示すようになる。
【００７６】
たとえば、時刻ｔ１において、遅延処理前の空燃比信号（出力値Ｖ１の比較結果）がリーンからリッチに反転しても、遅延処理された空燃比信号（遅延後空燃比フラグＦ１）は、リッチ遅延時間τＤＲだけリーンに保持された後の時刻ｔ２において、リッチに変化する。
【００７７】
同様に、時刻ｔ３において、遅延処理前の空燃比信号（上流側Ａ／Ｆ）がリッチからリーンに変化しても、遅延処理後の空燃比信号（遅延後空燃比フラグＦ１）は、リーン遅延時間τＤＬだけリッチに保持された後の時刻ｔ４において、リーンに変化する。
【００７８】
しかし、たとえば時刻ｔ５の後（リッチ遅延処理の開始後）に、時刻ｔ６、ｔ７に示すように、遅延処理前の空燃比信号（比較結果）が、リッチ遅延時間τＤＲよりも短い期間で反転しても、ディレイカウンタＣＤＬＹがリッチ遅延時間τＤＲに到達するまでの遅延処理中（時刻ｔ５〜ｔ８）においては、遅延前空燃比フラグＦ０が反転することはない。
【００７９】
つまり、遅延前空燃比フラグＦ０は、出力値Ｖ１の微小変動に起因した一時的な比較結果（遅延処理後の空燃比信号）の変動に影響されないので、比較結果（遅延処理前の空燃比信号）に比べて安定した波形となる。このように、遅延処理を実行することにより、安定した遅延前空燃比フラグＦ０および遅延処理後の空燃比信号（遅延後空燃比フラグＦ１）が得られ、遅延後空燃比フラグＦ１に基づいて、適切な燃料補正係数ＦＡＦが得られる。
【００８０】
燃料補正係数ＦＡＦの波形において、増大方向および減少方向の傾きは、それぞれ、積分定数ＫＩＲ、ＫＩＬに相当し、スキップ増減量は、それぞれ、スキップ定数ＲＳＲ、ＲＳＬに相当する。
【００８１】
以下、制御回路１０内の励磁駆動手段は、第１の空燃比フィードバック制御手段２０１で演算された燃料補正係数ＦＡＦと、基本燃料量Ｑｆｕｅｌ０とに応じて、空燃比が目標空燃比Ａ／Ｆｏと一致するように燃料噴射弁７を駆動するために、機関本体１に供給する燃料供給量Ｑｆｕｅｌを、以下の式（１）のように調整する。
【００８２】
Ｑｆｕｅｌ１＝Ｑｆｕｅｌ０×ＦＡＦ  ・・・（１）
【００８３】
ただし、式（１）において、基本燃料量Ｑｆｕｅｌ０は、機関本体１に供給される空気量Ｑａｃｙｌと、目標空燃比Ａ／Ｆｏとを用いて、以下の式（２）のように演算される。
【００８４】
Ｑｆｕｅｌ０＝Ｑａｃｙｌ／（Ａ／Ｆｏ）  ・・・（２）
【００８５】
式（２）において、機関本体１への空気量Ｑａｃｙｌは、エアフローセンサ３から検出される吸入空気量Ｑａに基づいて演算される。また、エアフローセンサ３を用いない場合には、吸気通路２内のスロットル弁下流側に設けられた圧力センサ（図示せず）の出力信号に基づいて吸入空気量Ｑａを演算してもよく、エンジン回転速度Ｎｅまたはスロットル弁のスロットル開度などに基づいて演算してもよい。
【００８６】
また、目標空燃比Ａ／Ｆｏは、図５に示すような、エンジン回転速度Ｎｅと負荷との２次元マップで領域設定された値に設定される。すなわち、目標空燃比Ａ／Ｆｏは、理論空燃比（Ａ／Ｆ≒１４．５３）制御時においては、平均空燃比振動手段２０３により演算される目標平均空燃比として、フィードフォワード的に反映させた値に設定される。
【００８７】
これにより、目標値が変化した場合のフィードバック追従遅れを改善するとともに、燃料補正係数ＦＡＦを「１．０」の中心付近の値に維持することができる。また、このとき、燃料補正係数ＦＡＦに基づき、第１の空燃比フィードバック制御手段２０１に関連する構成要素の経時変化および生産バラツキを吸収するように学習制御が行われるので、フィードフォワード補正により燃料補正係数ＦＡＦが安定している方が、学習制御の精度が向上する。
【００８８】
次に、図６のフローチャートとともに、図７〜図１３および図１５の説明図、ならびに図１４、図１６および図１７のタイミングチャートを参照しながら、図２内の平均空燃比振動手段２０３による演算処理動作について説明する。図６の演算処理ルーチンは、所定時間（たとえば、５ｍｓｅｃ）ごとに実行される。
【００８９】
図６において、まず、下流側Ｏ２センサ１５の出力値Ｖ２のリッチ／リーン反転を判定する（ステップ７０１）。下流側Ｏ２センサ１５は、２値的出力特性を有するλ型センサからなり、図７に示すように、センサ雰囲気の空燃比変化に対し、理論空燃比の付近において出力値Ｖ２（電圧値）が急激に変化する。図７の特性を有するλ型センサは、理論空燃比付近の空燃比に対する検出分解能が非常に高く、かつ検出精度も良い。
【００９０】
つまり、ステップ７０１においては、図８に示すように、判定閾値（１点鎖線）を基準として、下流側Ｏ２センサ１５の出力値Ｖ２がリッチまたはリーン側にあるかを判定するとともに、リッチまたはリーンの判定結果が反転したか否かを判定する。
【００９１】
ステップ７０１において、リーンからリッチへの反転が判定されたときには、下流側Ｏ２センサ１５の反転フラグＦＲＯ２を「１」（リッチ反転を示す値）に設定し、リッチからリーンへの反転が判定されたときには、反転フラグＦＲＯ２を「２」（リーン反転を示す値）に設定し、いずれの反転も判定されないときには、反転フラグＦＲＯ２を「０」（非反転を示す値）に設定する。
【００９２】
なお、図８に示す判定閾値（１点鎖線参照）は、単にエンジン回転速度Ｎｅや負荷などの運転条件に応じた所定電圧に設定されてもよく、第２の空燃比フィードバック制御手段２０２に関連した下流側Ｏ２センサ１５の目標電圧ＶＲ２（後述する）に設定されてもよい。下流側Ｏ２センサ１５の出力値Ｖ２は目標電圧ＶＲ２付近に制御されるので、判定閾値を目標電圧ＶＲ２に設定した場合には、下流側Ｏ２センサ１５のリッチ方向またはリーン方向への変動の検出精度が向上する。
【００９３】
また、下流側Ｏ２センサ１５の目標電圧ＶＲ２にフィルタ処理（または、平均化などのなまし処理）を施した値を、判定閾値として設定してもよい。これにより、下流側Ｏ２センサ１５の出力値Ｖ２が変化しない状態で目標電圧ＶＲ２が急変しても、リッチ／リーン反転を誤判定する可能性を軽減することができる。
【００９４】
また、下流側Ｏ２センサ１５の出力値Ｖ２にフィルタ処理（または、平均化などのなまし処理）を施した値を、判定閾値として設定してもよい。これにより、下流側Ｏ２センサ１５の出力値Ｖ２が、固定閾値からシフトした状態でリッチ方向またはリーン方向に変動しても、リッチ／リーン反転を確実に検出することができる。
【００９５】
また、判定閾値と比較される出力値Ｖ２の代わりに、出力値Ｖ２にフィルタ処理（または、平均化などのなまし処理）を施した値を用いてもよい。これにより、出力値Ｖ２の高周波成分に起因した誤判定を防止することができる。
【００９６】
また、このとき、下流側Ｏ２センサ１５の出力値Ｖ２に対するフィルタ処理（または、平均化などのなまし処理）を調整して、上流側Ｏ２センサ１３の出力値Ｖ１の変動周期の影響を低減するようにしてもよい。これにより、触媒１２の大幅劣化によって、下流側Ｏ２センサ１５の出力値Ｖ２の変動が、上流側Ｏ２センサ１３の出力値Ｖ１の変動に近づいた場合でも、高い周波数でリッチ／リーン反転の判定が行われて制御系の挙動が不安定になる問題を回避することができる。
【００９７】
さらに、図８に示すように、リッチまたはリーンの判定において、リッチからリーンへの判定閾値と、リーンからリッチへの判定閾値との間に、判定閾値を中心としたヒステリシス（または、不感帯）を設定し、ヒステリシス（または、不感帯）の幅を調整してもよい。これにより、出力値Ｖ２の微小変動による判定結果のチャタリングを防止するとともに、反転判定用の出力値Ｖ２の変動幅を調整することができる。
【００９８】
図６に戻り、平均空燃比振動手段２０３は、ステップ７０１に続いて、振動条件フラグＦＰＴが「１」に設定されているか否かにより、平均空燃比の振動条件が成立しているか否かを判定する（ステップ７０２）。
【００９９】
ステップ７０２における振動条件は、触媒１２が安定している状態と、機関本体１があらかじめ設計した運転条件下にある状態とを含み、たとえば、第１の空燃比フィードバック制御手段２０１による理論空燃比制御が実行中の場合、エンジン回転速度Ｎｅ、負荷、吸入空気量Ｑａなどの運転条件が所定範囲内を示す場合、機関本体１の始動後から所定時間以上経過した場合、冷却水温ＴＨＷが所定温度以上の場合、アイドル運転以外の場合、過渡運転以外の場合、および過渡運転後所定期間以外の場合などによって判定される。
【０１００】
過渡運転は、空燃比の変動が増加して、触媒１２の酸素吸蔵量が急変する条件であり、急な加減速時、燃料カット時、リッチ化制御時、リーン化制御時、第２の空燃比フィードバック制御手段２０１による制御の停止時、第１の空燃比フィードバック制御手段２０２による制御の停止時、第１の空燃比フィードバック制御手段２０１からの燃料補正係数ＦＡＦの大変動時、故障診断のためのアクチュエータ強制駆動時、蒸散ガス導入の急変時、などを含む。
【０１０１】
急な加減速は、たとえば単位時間当たりのスロットル開度（または、吸入空気量Ｑａ）の変化量が所定以上を示すことから判定される。また、蒸散ガス導入の急変は、蒸散ガスを導入するバルブ開度の単位時間当たりの変化量が所定以上を示すことから判定される。
【０１０２】
なお、過渡運転後においても、所定期間が経過するまでは、触媒１２の酸素吸蔵量の変動による影響が残るので、振動処理は実行されない。所定期間は、単に時間設定してもよく、触媒１２の酸素吸蔵量の変化と比例関係にある吸入空気量Ｑａを用いて、過渡運転後の積算吸入空気量が所定量に到達するまでの時間に設定してもよい。吸入空気量Ｑａに基づいて所定期間の経過を判定することにより、振動開始時期を触媒１２の酸素吸蔵量の挙動に合わせて、適切に設定することができる。
【０１０３】
ステップ７０２において、振動条件が成立していて、ＦＰＴ＝１（すなわち、ＹＥＳ）と判定されれば、ステップ７０３に進む。また、振動条件が成立しておらず、ＦＰＴ＝０（すなわち、ＮＯ）と判定されれば、ステップ７２３（後述する）に進む。
【０１０４】
振動条件の成立時には、ステップ７０３〜７０５により、振動条件成立後の初回振動用の初期値を設定する。まず、振動回数ＰＴＮが「０」であるか否かにより、初回振動であるか否かを判定し（ステップ７０３）、ＰＴＮ＝０（すなわち、ＹＥＳ）と判定されれば、初期値として、初回の振動方向フラグＦＲＬを「１」（リッチ方向）に設定するとともに（ステップ７０４）、振動回数ＰＴＮを「１」（初回振動中を示す）に設定し（ステップ７０５）、ステップ７０６に進む。
【０１０５】
一方、ステップ７０３において、ＰＴＮ＞０（すなわち、ＮＯ）と判定されれば、初期値の設定処理（ステップ７０４、７０５）を実行せずに、ステップ７０６に進む。
なお、ステップ７０４においては、振動方向フラグＦＲＬの初期値として「１」（リッチ方向）に設定したが、「２」（リーン方向）に設定してもよい。
【０１０６】
次に、ステップ７０６〜７０８により、平均空燃比振動のリッチ方向およびリーン方向での周期Ｔｊおよび振動幅ＤＡＦｊをそれぞれ設定する。まず、振動方向フラグＦＲＬが「１」であるか否かにより、振動方向がリッチ方向であるか否かを判定し（ステップ７０６）、リッチ方向（ＦＲＬ＝１）（すなわち、ＹＥＳ）と判定されれば、周期Ｔｊおよび振動幅ＤＡＦｊとして、それぞれ、リッチ方向の周期Ｔｒおよび振動幅ＤＡＦｒを設定し（ステップ７０７）、ステップ７０９に進む。
【０１０７】
なお、ステップ７０７において、リッチ方向周期Ｔｒおよびリッチ方向振動幅ＤＡＦｒは、図９および図１０の説明図に示すように、触媒１２の酸素吸蔵量の振動幅ΔＯＳＣが所定量となるように、それぞれ吸入空気量Ｑａに応じた１次元マップにより設定される。
【０１０８】
一方、ステップ７０６において、振動方向がリーン方向（ＦＲＬ＝２）（すなわち、ＮＯ）と判定されれば、周期Ｔｊおよび振動幅ＤＡＦｊとして、それぞれ、リーン方向の周期Ｔｌおよび振動幅ＤＡＦｌを設定し（ステップ７０８）、ステップ７０９に進む。
【０１０９】
なお、ステップ７０８において、リーン方向周期Ｔｌおよびリーン方向の平均空燃比の振動幅ＤＡＦｌは、図９、図１０と同様の図１１、図１２の説明図に示すように、触媒１２の酸素吸蔵量の振動幅ΔＯＳＣが所定量となるように、それぞれ吸入空気量Ｑａに応じた１次元マップにより設定される。
【０１１０】
酸素吸蔵量の振動幅ΔＯＳＣは、周期Ｔｊ［ｓｅｃ］と、振動幅ＤＡＦｊの絶対値と、吸入空気量Ｑａ［ｇ／ｓｅｃ］と、酸素吸蔵量に変換するための所定係数ＫＯ２とを用いて、以下の式（３）のように表される。
【０１１１】
ΔＯＳＣ［ｇ］＝Ｔｊ×｜ＤＡＦｊ｜×Ｑａ×ＫＯ２  ・・・（３）
【０１１２】
ここで、振動幅ΔＯＳＣを所定量とするためには、吸入空気量Ｑａの変化により、振動幅ＤＡＦｊまたは周期Ｔｊを変化させる必要がある。
たとえば、振動幅ＤＡＦｊを固定値とした場合には、周期Ｔｊを吸入空気量Ｑａに反比例する値に設定し、周期Ｔｊを固定値とした場合には、振動幅ＤＡＦｊを吸入空気量Ｑａに反比例する値に設定する。
【０１１３】
しかし、実際には、触媒１２の浄化特性の向上、ドライバビリティの向上、または応答性の向上などを目的として、周期Ｔｊ、振動幅ＤＡＦｊの設定範囲には各種の制約があるので、周期Ｔｊおよび振動幅ＤＡＦｊは、両方とも、所定の酸素吸蔵量の振動幅ΔＯＳＣとなるように、吸入空気量Ｑａに応じて可変設定される。
【０１１４】
また、平均空燃比振動のリッチ方向およびリーン方向の周期Ｔｊ（または、振動幅ＤＡＦｊ）を互いに非対称になるように設定してもよい。
たとえば、触媒１２のＮＯｘ浄化特性を向上させるため、またはトルク低下を軽減するために、リーン方向への振動幅ＤＡＦｊの絶対値をリッチ方向への振動幅ＤＡＦｊの絶対値よりも小さく設定し、振動幅ΔＯＳＣが一定となるように、リーン方向への周期Ｔｊをリッチ方向への周期Ｔｊよりも大きく設定してもよい。
【０１１５】
また、酸素吸蔵量の振動幅ΔＯＳＣは、触媒１２の最大酸素吸蔵量ＯＳＣｍａｘの範囲内となるように設定され、触媒１２の酸素吸蔵量は、最大酸素吸蔵量ＯＳＣｍａｘと最小酸素吸蔵量（＝０）との間の範囲内となるように設定される。これにより、触媒１２の上流側空燃比の変動は、酸素吸蔵量の変化によって確実に吸収され、触媒１２内の空燃比は理論空燃比付近に保たれるので、触媒１２の浄化率の大幅な悪化を防止することができる。
【０１１６】
また、最大酸素吸蔵量ＯＳＣｍａｘの範囲内においても、酸素吸蔵量の振動幅ΔＯＳＣは、触媒１２の浄化特性の向上や、触媒１２の劣化診断を目的として、各種条件に応じて調整され、所定量に設定される。たとえばエンジン回転速度Ｎｅや負荷の違いによって、機関本体１からの排気ガス成分や触媒１２の温度は変化し、触媒１２の浄化特性も変化するので、酸素吸蔵量の振動幅ΔＯＳＣをエンジン回転速度Ｎｅまたは負荷に応じて変更する。これにより、さらに触媒１２の浄化特性を向上させることができる。
【０１１７】
また、劣化診断時の酸素吸蔵量の振動幅ΔＯＳＣは、劣化前の触媒１２の最大酸素吸蔵量ＯＳＣｍａｘの範囲内で、かつ劣化診断が必要な触媒の最大酸素吸蔵量の範囲外となるように設定される。これにより、劣化診断が必要な触媒が用いられている場合には、下流側Ｏ２センサ１５の出力値Ｖ２の乱れが大きくなるので、劣化診断における劣化判定精度が向上する。
【０１１８】
図６に戻り、ステップ７０９においては、ステップ７０７、７０８で設定した平均空燃比振動の周期Ｔｊおよび振動幅ＤＡＦｊが、最大酸素吸蔵量演算手段２０４により演算された最大酸素吸蔵量ＯＳＣｍａｘに応じて、それぞれ適応的に補正される。具体的には、周期Ｔｊ、振動幅ＤＡＦｊは、補正係数Ｋｏｓｃｔ、Ｋｏｓｃａｆを用いて、それぞれ、以下の式（４）、式（５）のように補正される。
【０１１９】
Ｔｊ＝Ｔｊ（ｎ−１）×Ｋｏｓｃｔ  ・・・（４）
ＤＡＦｊ＝ＤＡＦｊ（ｎ−１）×Ｋｏｓｃａｆ  ・・・（５）
【０１２０】
式（４）、式（５）において、（ｎ−１）は補正前の前回値を示す。なお、周期Ｔｊに対する補正係数Ｋｏｓｃｔ、および、平均空燃比の振動幅ＤＡＦｊに対する補正係数Ｋｏｓｃａｆは、それぞれ最大酸素吸蔵量ＯＳＣｍａｘに応じた１次元マップにより設定される。
【０１２１】
また、各補正係数Ｋｏｓｃｔ、Ｋｏｓｃａｆは、変化後の最大酸素吸蔵量ＯＳＣｍａｘの範囲内であって、かつ酸素吸蔵量の振動幅ΔＯＳＣが維持されるように、最大酸素吸蔵量ＯＳＣｍａｘの減少とともに、酸素吸蔵量の振動幅ΔＯＳＣが減少するように設定される。これにより、酸素吸蔵量の振動幅ΔＯＳＣが最大酸素吸蔵量ＯＳＣｍａｘから逸脱して大幅に振り切れることを防止して、大幅な排気ガスの悪化を防止することができる。
【０１２２】
また、ステップ７０９に続いて、周期Ｔｊ、振動幅ＤＡＦｊは、平均空燃比の振動開始後の振動回数ＰＴＮに応じた補正係数Ｋｐｔｎｔ、Ｋｐｔｎａｆが、式（４）、式（５）と同様に乗算されて、さらに補正される（ステップ７１０）。なお、周期Ｔｊに対する補正係数Ｋｐｔｎｔ、および、振動幅ＤＡＦｊに対する補正係数Ｋｐｔｎａｆは、振動回数ＰＴＮに応じて、それぞれ、図１３（ａ）、（ｂ）に示すテーブルにより設定される。
【０１２３】
図１３（ａ）において、周期補正係数Ｋｐｔｎｔは、初回振動（ＰＴＮ＝１）に対する値のみが「０．５」に設定され、他の振動回数ＰＴＮに対しては「１．０」に設定される。また、図１３（ｂ）において、振動幅補正係数Ｋｐｔｎａｆは、振動回数ＰＴＮとは無関係に、すべて「１．０」に設定される。
【０１２４】
図１３（ａ）、（ｂ）のように各補正係数Ｋｐｔｎｔ、Ｋｐｔｎａｆを設定することにより、図１４のタイミングチャートに示すように、酸素吸蔵量の振動幅ΔＯＳＣは、初回振動時のみにおいて最終設定値の半分に設定される。これにより、振動幅ΔＯＳＣが所定幅を超過することはない。
【０１２５】
なお、図１３および図１４では、初回振動の周期補正係数Ｋｐｔｎｔを「０．５」に設定した場合を示したが、初回振動の振動幅補正係数Ｋｐｔｎａｆを「０．５」に設定してもよい。また、初回振動時の酸素吸蔵量の振動幅ΔＯＳＣが半分となるように、周期および振動幅の各補正係数Ｋｐｔｎｔ、Ｋｐｔｎａｆの組合せを設定してもよい。
【０１２６】
また、図１５の説明図および図１６のタイミングチャートに示すように、振動回数ＰＴＮの増加とともに、酸素吸蔵量の振動幅ΔＯＳＣが徐々に増加するように、周期および振動幅の各補正係数Ｋｐｔｎｔ、Ｋｐｔｎａｆを設定してもよい。これにより、触媒１２の状態急変を防止することができ、また、空燃比制御（特に、第２の空燃比フィードバック制御手段２０２による制御）の追従性の不良を防止することができる。
【０１２７】
図６に戻り、ステップ７１０に続いて、ステップ７１１〜７１４において、下流側Ｏ２センサ１５の出力値Ｖ２のリッチ／リーン反転により、触媒１２の酸素吸蔵量が最大酸素吸蔵量ＯＳＣｍａｘまたは最小酸素吸蔵量（＝０）の振り切れを検出した場合に、平均空燃比の振動方向を強制的に反転させるための処理を実行する。
【０１２８】
まず、振動方向フラグＦＲＬが「１」であるか否かにより、リッチ方向に振動中であるか否かを判定し（ステップ７１１）、リッチ方向に振動中（ＦＲＬ＝１）（すなわち、ＹＥＳ）と判定されれば、続いて、下流側Ｏ２センサ１５の反転フラグＦＲＯ２が「１」であるか否かにより、下流側Ａ／Ｆがリッチ反転である（下流側Ｏ２センサ１５の出力値Ｖ２がリーンからリッチへの反転を示す）か否かを判定する（ステップ７１２）。
【０１２９】
ステップ７１２において、下流側Ａ／Ｆがリッチ反転（ＦＲＯ２＝１）（すなわち、ＹＥＳ）と判定されれば、振動が反転するように、周期カウンタ（タイマカウンタ）Ｔｍｒを周期Ｔｊにリセットして（ステップ７１４）、ステップ７１５に進む。
また、ステップ７１２において、下流側Ａ／Ｆがリッチ反転でなく、ＦＲＯ２≠１（すなわち、ＮＯ）と判定されれば、周期カウンタＴｍｒのリセット処理（ステップ７１４）を実行せずに、ステップ７１５に進む。
【０１３０】
一方、ステップ７１１において、リーン方向に振動中（ＦＲＬ＝２）（すなわち、ＮＯ）と判定されれば、続いて、下流側Ｏ２センサ１５の反転フラグＦＲＯ２が「２」であるか否かにより、下流側Ａ／Ｆがリーン反転である（下流側Ｏ２センサ１５の出力値Ｖ２がリッチからリーンへの反転を示す）か否かを判定する（ステップ７１３）。
【０１３１】
ステップ７１３において、下流側Ａ／Ｆがリーン反転（ＦＲＯ２＝２）（すなわち、ＹＥＳ）と判定されれば、振動が反転するように、周期カウンタＴｍｒのリセット処理（ステップ７１４）に進む。
また、ステップ７１３において、ＦＲＯ２≠１であって、下流側Ａ／Ｆがリーン反転でない（すなわち、ＮＯ）と判定されれば、周期カウンタＴｍｒのリセット処理（ステップ７１４）を実行せずに、ステップ７１５に進む。
【０１３２】
ここで、図１７のタイミングチャートを参照しながら、触媒１２の酸素吸蔵量の振り切れが発生した場合の挙動について説明する。
酸素吸蔵量の振り切れは、外乱に起因した空燃比の乱れによって酸素吸蔵量が急変した場合、触媒１２の劣化または触媒温度Ｔｍｐｃａｔの低下などによって最大酸素吸蔵量ＯＳＣｍａｘが減少した場合、または、平均空燃比の反転タイミングが遅れた場合などに引き起こされる。
【０１３３】
図１７に示すように、時刻ｔ１４１の直前でリーン方向の空燃比の大きな乱れが生じた場合、触媒１２の推定酸素吸蔵量ＯＳＣは、大幅にかつ急激に増加し、時刻ｔ１４１において、最大酸素吸蔵量ＯＳＣｍａｘから大幅に振り切れてしまう。
【０１３４】
このとき、仮に強制反転処理を実行しない場合には、点線波形で示すように、周期カウンタＴｍｒの値が反転周期Ｔｊに到達していないことから、リーン方向（ＦＲＬ＝２）への振動を継続し、時刻ｔ１４１〜ｔ１４２の期間にわたって、酸素吸蔵量が振り切れた状態を保持するので、触媒１２内の空燃比が理論空燃比から逸脱して、排気ガスの浄化状態は著しく悪化する。
【０１３５】
一方、上記ステップ７１４により強制反転処理を実行する際には、時刻ｔ１４１において下流側Ｏ２センサ１５の出力値Ｖ２が反転し、反転フラグＦＲＯ２が「０」から「２」になり、触媒１２の推定酸素吸蔵量ＯＳＣの振り切れが検出されるので、これに応答して、実線波形で示すように、周期カウンタＴｍｒを反転周期Ｔｊにリセットして、リッチ方向へ振動を強制的に反転させる。これにより、酸素吸蔵量の振り切れ状態から復帰させることができ、排気ガスの悪化を最小限に抑制することができる。
【０１３６】
次に、強制リセット処理（ステップ７１４）に続いて、ステップ７１５〜７２１において、タイマ処理によるリッチ／リーン周期反転処理を実行する。
まず、周期カウンタＴｍｒを所定量Ｄｔｍｒだけ増加させて更新し（ステップ７１５）、周期カウンタＴｍｒが周期Ｔｊを越えたか否かを判定する（ステップ７１６）。なお、所定量Ｄｔｍｒは演算周期５ｍｓｅｃに設定される。
【０１３７】
ステップ７１６において、Ｔｍｒ＞Ｔｊ（すなわち、ＹＥＳ）と判定されれば、反転タイミングに到達しているので、周期カウンタＴｍｒを「０」にリセットするとともに（ステップ７１７）、振動回数ＰＴＮを「１」だけ増加させ（ステップ７１８）、続いて、振動方向フラグＦＲＬが「１」であるか否かにより、現在の振動方向がリッチであるか否かを判定する（ステップ７１９）。
【０１３８】
ステップ７１９において、現在の振動方向がリッチ（ＦＲＬ＝１）（すなわち、ＹＥＳ）と判定されれば、振動方向フラグＦＲＬを「２」に設定して、リーン方向に反転させ（ステップ７２０）、ステップ７２０に進む。
【０１３９】
また、ステップ７１９において、現在の振動方向がリーン（ＦＲＬ＝２）（すなわち、ＮＯ）と判定されれば、振動方向フラグＦＲＬを「１」に設定して、リッチ方向に反転させ（ステップ７２１）、ステップ７２１に進む。
【０１４０】
一方、上記ステップ７１６において、Ｔｍｒ≦Ｔｊ（すなわち、ＮＯ）と判定されれば、反転タイミングに到達していないので、ステップ７１７〜７２１を実行せずに、直ちにステップ７２２に進む。
【０１４１】
ステップ７２２においては、振動条件の成立時での目標平均空燃比ＡＦＡＶＥｏｂｊを設定する。このとき、目標平均空燃比ＡＦＡＶＥｏｂｊは、振動中心ＡＦＣＮＴ（第２の空燃比フィードバック制御手段２０２で演算される目標平均空燃比）に振動幅ＤＡＦｊを加えることにより、以下の式（６）のように演算される。
【０１４２】
ＡＦＡＶＥｏｂｊ＝ＡＦＣＮＴ＋ＤＡＦｊ  ・・・（６）
【０１４３】
このように、下流側Ｏ２センサ１５の出力値Ｖ２に基づいて触媒１２の酸素吸蔵量の状態を検出することにより、最大酸素吸蔵量ＯＳＣｍａｘまたは最小酸素吸蔵量（＝０）を振り切れないように目標平均空燃比ＡＦＡＶＥｏｂｊの振動中心ＡＦＣＮＴを調整することができるので、酸素吸蔵量の振動処理の制御精度をさらに向上させることができる。
【０１４４】
なお、振動中心ＡＦＣＮＴは、運転条件により所定値に設定されてもよい。
また、振動中心ＡＦＣＮＴを条件に応じてリーン方向またはリッチ方向にシフトすることにより、触媒１２の浄化状態を変更してもよい。
さらに、上記振動処理を、触媒１２の劣化診断のみならず、センサなどの故障診断に用いてもよい。
【０１４５】
一方、最初のステップ７０２において、振動条件でない（すなわち、ＮＯ）と判定されれば、振動回数ＰＴＮを「０」にリセットするとともに（ステップ７２３）、周期カウンタＴｍｒを「０」にリセットして（ステップ７２４）、振動条件の不成立時での目標平均空燃比ＡＦＡＶＥｏｂｊを、振動中心ＡＦＣＮＴに設定する（ステップ７２５）。
【０１４６】
最後に、ステップ７２２または７２５で設定された目標平均空燃比ＡＦＡＶＥｏｂｊと一致するように、第１の空燃比フィードバック制御手段２０１における制御定数を設定して（ステップ７２６）、平均空燃比振動手段２０３による図６の処理ルーチンを終了して抜け出る。
【０１４７】
次に、図６内の最終ステップ７２６について具体的に説明する。まず、ステップ７２６で実行される制御定数に基づく平均空燃比の操作処理について説明する。
平均空燃比は、第１の空燃比フィードバック制御手段２０１における制御定数（リッチ／リーンスキップ量ＲＳＲ、ＲＳＬ、リッチ／リーン積分定数ＫＩＲ、ＫＩＬ、リッチ／リーン遅延時間τＤＲ、τＤＬ、または、上流側Ｏ２センサ１３の出力値Ｖ１に対する比較電圧ＶＲ１）を操作することによって操作される。
【０１４８】
たとえば、平均空燃比は、リッチスキップ量ＲＳＲを大きくするか、またはリーンスキップ量ＲＳＬを小さくすると、リッチ側に移行し、リーンスキップ量ＲＳＬを大きくか、またはリッチスキップ量ＲＳＲを小さくすると、リーン側に移行する。つまり、平均空燃比は、リッチスキップ量ＲＳＲおよびリーンスキップ量ＲＳＬを変更することにより制御することができる。
【０１４９】
また、平均空燃比は、リッチ積分定数ＫＩＲを大きくするか、またはリーン積分定数ＫＩＬを小さくするとリッチ側に移行し、リーン積分定数ＫＩＬを大きくするか、またはリッチ積分定数ＫＩＲを小さくするとリーン側に移行する。つまり、平均空燃比は、リッチ積分定数ＫＩＲおよびリーン積分定数ＫＩＬを変更することにより制御することができる。
【０１５０】
また、平均空燃比は、リッチ遅延時間τＤＲおよびリーン遅延時間τＤＬを「τＤＲ＞τＤＬ」の関係に設定すれば、リッチ側に移行し、逆に、「τＤＬ＞τＤＲ」の関係に設定すれば、リーン側に移行する。つまり、平均空燃比は、リッチ／リーン遅延時間τＤＲ、τＤＬを変更することにより制御することができる。
【０１５１】
さらに、平均空燃比は、上流側Ｏ２センサ１３の出力値Ｖ１に対する比較電圧ＶＲ１を大きくすると、リッチ側に移行し、また、比較電圧ＶＲ１を小さくすると、リーン側に移行する。つまり、平均空燃比は、比較電圧ＶＲ１を変更することにより制御することができる。このように、制御定数（遅延時間、スキップ量、積分ゲイン、比較電圧など）を変更することにより、上流側の平均空燃比を制御することができる。
【０１５２】
また、制御定数のうちの２つ以上を同時に操作することにより、平均空燃比の制御性を向上させることができる。
ただし、２つ以上の制御定数を操作すると、平均空燃比のリッチ／リーンの操作方向を管理することはできるが、非線形な相互作用により、操作量の管理が困難となる可能性がある。そこで、複数の制御定数の操作に起因した不具合を解消するとともに、自由度を積極的に利用するために、さらに、目標平均空燃比から制御定数の操作量を演算する手段を設け、目標平均空燃比の管理指標に応じて制御定数を設定して、平均空燃比により制御定数の操作を管理する方法も考えられる。
【０１５３】
また、制御定数ごとに平均空燃比を制御するうえで、たとえば、平均空燃比の制御精度、操作幅、または制御周期、空燃比振動幅などに関して、利点および不利点があるが、目標平均空燃比の動作点に応じて、各制御定数をきめ細かく設定することにより、それぞれの利点を生かすことができる。
【０１５４】
次に、図１８を参照しながら、平均空燃比振動手段２０３による制御定数の設定演算処理について説明する。
図１８は制御定数の設定演算処理を図式的に示すフローチャートであり、目標平均空燃比に応じて第１の空燃比フィードバック制御手段２０１における制御定数（各スキップ量ＲＳＲ、ＲＳＬ、各積分定数ＫＩＲ、ＫＩＬ、各遅延時間τＤＲ、τＤＬ、比較電圧ＶＲ１）を設定する演算ルーチンを示している。図１８の演算ルーチンは、所定時間（たとえば、５ｍｓｅｃ）ごとに実行される。
【０１５５】
図１８において、まず、目標平均空燃比ＡＦＡＶＥｏｂｊに応じた１次元マップにより、リッチスキップ量ＲＳＲを演算する（ステップ１５０１）。なお、１次元マップの値は、あらかじめ机上計算または実験に基づいて設定されており、目標平均空燃比ＡＦＡＶＥｏｂの入力値に対応した設定値（マップ検索結果）がリッチスキップ量ＲＳＲとして出力される。
【０１５６】
また、ステップ１５０１における１次元マップは、機関本体１の運転条件ごとに設けられており、運転条件の変化に応じて、１次元マップを切り替えてマップ検索が行われる。運転条件には、第１の空燃比フィードバック制御手段２０１の構成の応答性や特性などに関係する条件（たとえば、エンジン回転速度Ｎｅ、負荷、アイドル状態、冷却水温ＴＨＷ、排気温度、上流側Ｏ２センサの温度、ＥＧＲバルブ開度など）が含まれる。また、たとえば、運転条件を所定の回転速度、負荷、冷却水温で区分けされた運転領域として設定することができる。
【０１５７】
さらに、リッチスキップ量ＲＳＲの演算マップは、必ずしも１次元マップでなくてもよく、入力値と出力値との関係を表す手段であればよい。たとえば、１次元マップに代えて、任意の近似式であってもよく、さらに多くの入力値に対応した高次元のマップや高次関数であってもよい。
【０１５８】
以下、ステップ１５０１と同様の処理方法で、目標平均空燃比ＡＦＡＶＥｏｂｊに応じてスキップ量ＲＳＬを演算し（ステップ１５０２）、目標平均空燃比ＡＦＡＶＥｏｂｊに応じて積分定数ＫＩＲを演算し（ステップ１５０３）、目標平均空燃比ＡＦＡＶＥｏｂｊに応じて積分定数ＫＩＬを演算し（ステップ１５０４）、目標平均空燃比ＡＦＡＶＥｏｂｊに応じて遅延時間τＤＲを演算し（ステップ１５０５）、目標平均空燃比ＡＦＡＶＥｏｂｊに応じて遅延時間τＤＬを演算し（ステップ１５０６）、目標平均空燃比ＡＦＡＶＥｏｂｊに応じて比較電圧ＶＲ１を演算し（ステップ１５０７）、図１８の処理ルーチンを終了する。
【０１５９】
このように、目標平均空燃比ＡＦＡＶＥｏｂｊに応じて、制御定数（各スキップ量ＲＳＲ、ＲＳＬ、各積分定数ＫＩＲ、ＫＩＬ、各遅延時間τＤＲ、τＤＬ、比較電圧ＶＲ１）がそれぞれ演算される。
【０１６０】
ステップ１５０１〜１５０７における各演算マップ上の設定値は、前述のように、触媒１２の上流側の実際の平均空燃比が、入力値である目標平均空燃比ＡＦＡＶＥｏｂｊと一致するように、あらかじめ机上計算または実験値に基づいて設定されている。また、運転条件により制御定数の設定値を変化させることにより、運転条件にかかわらず、実際の平均空燃比が目標平均空燃比ＡＦＡＶＥｏｂｊと一致するように設定されている。
【０１６１】
次に、図１９のフローチャートとともに、図２０および図２１の説明図を参照しながら、最大酸素吸蔵量演算手段２０４による処理動作について説明する。図１９の演算ルーチンは所定時間（たとえば、５ｍｓｅｃ）ごとに実行される。
【０１６２】
図１９において、まず、触媒１２の最大酸素吸蔵量の初期値ＯＳＣｍａｘ０を設定する（ステップ１６０１）。
なお、初期値ＯＳＣｍａｘ０としては、あらかじめ設計した新品時の触媒の最大酸素吸蔵量が設定されてもよい。
また、初期値ＯＳＣｍａｘ０として、排気ガス規制で定められた所定距離走行後の耐久触媒の最大酸素吸蔵量を設定してもよく、この場合、確実に排気ガス規制の要件を満たすような初期値ＯＳＣｍａｘ０を設定することができる。
さらに、初期値ＯＳＣｍａｘ０として、機関本体１の運転条件（エンジン回転速度Ｎｅ、負荷、吸入空気量Ｑａなど）に基づき、定常状態での最大酸素吸蔵量を設定してもよく、この場合、設定精度が向上する。
【０１６３】
続いて、触媒温度Ｔｍｐｃａｔを演算する（ステップ１６０２）。なお、触媒温度Ｔｍｐｃａｔは、触媒１２に温度センサを取り付けるか、または触媒１２の上下流に温度センサを配置して、測定により直接求めてもよい。
【０１６４】
また、触媒温度Ｔｍｐｃａｔを、他の運転条件情報から推定演算で求めてもよい。たとえば、触媒温度Ｔｍｐｃａｔは、運転条件（エンジン回転速度Ｎｅ、負荷、吸入空気量Ｑａなど）ごとに設定された定常状態での値をマップ演算で読み出すことにより、定常状態時の値として推定演算することができる。また、機関本体１の過渡時における挙動は、定常状態の触媒温度Ｔｍｐｃａｔにフィルタ処理を加えることにより、推定することができる。
【０１６５】
さらに、始動時の初期触媒温度Ｔｍｐｃａｔ０は、始動時の冷却水温ＴＨＷ、または、前回停止時から今回始動時までの時間間隔などから推定することができる。これにより、機関本体１の始動から触媒１２が活性化して定常状態になるまでの過渡的な温度挙動のみならず、運転条件の変動による過渡的な温度挙動を求めることができる。
【０１６６】
次に、ステップ１６０２に続いて、触媒温度Ｔｍｐｃａｔに応じて設定された１次元マップ（図２０参照）により、最大酸素吸蔵量ＯＳＣｍａｘの温度補正係数Ｋｔｍｐｃａｔを演算する（ステップ１６０３）。
【０１６７】
温度補正係数Ｋｔｍｐｃａｔは、図２０に示すように、触媒温度Ｔｍｐｃａｔが低いほど、最大酸素吸蔵量ＯＳＣｍａｘが減少するように、小さい値に設定される。また、触媒１２の酸素吸蔵作用は、３００℃〜４００℃程度の温度領域で急速に活性化する特性を有するので、温度補正係数Ｋｔｍｐｃａｔは、触媒１２の温度特性を考慮して設定される。
【０１６８】
続いて、下流側Ｏ２センサ１５の出力値Ｖ２に対して適応的に触媒劣化度Ｃａｔｄｅｔを演算する（ステップ１６０４）。触媒劣化度Ｃａｔｄｅｔは、触媒１２の劣化が大きいほど大きい値となる。
【０１６９】
続いて、触媒劣化度Ｃａｔｄｅｔに応じて設定された１次元マップ（図２１参照）により最大酸素吸蔵量の劣化補正係数Ｋｃａｔｄｅｔを演算する（ステップ１６０５）。劣化補正係数Ｋｃａｔｄｅｔは、図２１に示すように、触媒劣化度Ｃａｔｄｅｔが大きいほど、最大酸素吸蔵量ＯＳＣｍａｘを減少させるように、小さい値に設定される。
【０１７０】
最後に、温度補正係数Ｋｔｍｐｃａｔおよび劣化補正係数Ｋｃａｔｄｅｔに基づき最大酸素吸蔵量の初期値ＯＳＣｍａｘ０を補正して、以下の式（７）のように最大酸素吸蔵量ＯＳＣｍａｘを演算する（ステップ１６０６）。
【０１７１】
ＯＳＣｍａｘ＝ＯＳＣｍａｘ０×Ｋｔｍｐｃａｔ×Ｋｃａｔｄｅｔ  ・・・（７）
【０１７２】
式（７）により、各種運転条件の変化のみならず、触媒１２の活性途中および過渡時に応じた触媒温度Ｔｍｐｃａｔの変化や、触媒１２の劣化などの各種条件に応じて変化する最大酸素吸蔵量ＯＳＣｍａｘを演算することができ、触媒１２の酸素吸蔵量の振動処理の制御精度を向上させることができる。
【０１７３】
次に、図２２のフローチャートを参照しながら、最大酸素吸蔵量演算手段２０４による図１９内の触媒劣化度演算処理（ステップ１６０４）について、さらに詳細に説明する。図２２の演算ルーチンは、所定時間（たとえば、５ｍｓｅｃ）ごとに実行される。
【０１７４】
図２２において、まず、触媒劣化度Ｃａｔｄｅｔの初期化条件か成立しているか否かを判定し（ステップ１９０１）、初期化条件が成立している（すなわち、ＹＥＳ）と判定されれば、触媒劣化度Ｃａｔｄｅｔを「０」（劣化無し状態）にリセットして（ステップ１９０２）、ステップ１９０３に進む。また、ステップ１９０１において、初期化条件が成立していない（すなわち、ＮＯ）と判定されれば、ステップ１９０２を実行せずに、ステップ１９０３に進む。
【０１７５】
触媒劣化度Ｃａｔｄｅｔは、機関本体１の停止時にリセットされないように、制御回路１０内のバックアップＲＡＭ１０６（または、ＥＥＰＲＯＭなど）に記録されて保持されているが、バッテリの取り外し後またはＥＥＰＲＯＭの初期化後の最初の電源ＯＮ時において、初期化条件が成立するようになっている。
【０１７６】
また、触媒劣化度Ｃａｔｄｅｔの演算が不可能になった場合（下流側Ｏ２センサ１５などのセンサ故障が検出された場合など）や、触媒劣化度Ｃａｔｄｅｔの再演算条件が成立した場合、または、外部機器（図示せず）からの通信によりリセット要求があった場合にも、ステップ１９０１において、初期化条件が成立したものと判定される。
【０１７７】
続いて、下流側Ｏ２センサ１５の出力値Ｖ２のリッチ／リーン反転の判定処理を行う（ステップ１９０３）。ステップ１９０３の判定処理は、平均空燃比振動手段２０３による図６内のステップ７０１の判定処理と同様に行われる。
【０１７８】
すなわち、下流側Ｏ２センサ１５の出力値Ｖ２がリーンからリッチに反転した場合には、下流側Ｏ２センサ１５の反転フラグＦＲＯ２ｄｅｔを「１」に設定し、リッチからリーンに反転した場合には、反転フラグＦＲＯ２ｄｅｔを「２」に設定し、反転しなかった場合には反転フラグＦＲＯ２ｄｅｔを「０」に設定する。なお、図８に示すヒステリシスの設定幅、または不感帯の設定幅、出力値Ｖ２のなまし処理の程度は、平均空燃比振動手段２０３の場合とは異なるように設定してもよい。
【０１７９】
次に、ステップ１９０３に続いて、触媒劣化度Ｃａｔｄｅｔの更新条件が成立しているか否かを判定し（ステップ１９０４）、触媒劣化度Ｃａｔｄｅｔの更新条件が成立している（すなわち、ＹＥＳ）と判定されれば、ステップ１９０５以下の処理に進む。また、ステップ１９０４において、更新条件が成立していない（すなわち、ＮＯ）と判定されれば、ステップ１９０５〜１９１０を実行せずに、図２２の処理ルーチンを終了する。
【０１８０】
なお、触媒劣化度Ｃａｔｄｅｔの更新条件は、触媒１２が十分活性していると判定可能な条件下および平均空燃比の振動処理が実行中の条件下において成立する。また、触媒１２の活性状態は、触媒温度Ｔｍｐｃａｔから直接的に判定してもよく、機関本体１の始動後の経過時間や始動後の積算吸入空気量、または、エンジン回転速度Ｎｅや負荷などの所定運転条件に基づいて判定してもよい。さらに、触媒１２の活性状態を、平均空燃比の振動処理の振動回数ＰＴＮが所定回数以上に達したか否かに基づいて判定してもよい。
【０１８１】
続いて、ステップ１９０５〜１９０９においては、下流側Ｏ２センサ１５の出力値Ｖ２のリッチ／リーン反転に基づいて、触媒１２の酸素吸蔵量が最大酸素吸蔵量ＯＳＣｍａｘまたは最小酸素吸蔵量（＝０）からの振り切れを検出し、触媒劣化度Ｃａｔｄｅｔの増減処理が行われる。
【０１８２】
まず、振動方向フラグＦＲＬが「１」であるか否かにより、リッチ方向に振動中か否かを判定し（ステップ１９０５）、リッチ方向に振動中（ＦＲＬ＝１）（すなわち、ＹＥＳ）と判定されれば、ステップ１９０６に進む。また、ステップ１９０５において、リーン方向に振動中（ＦＲＬ＝２）（すなわち、ＮＯ）と判定されれば、ステップ１９０７に進む。
【０１８３】
ステップ１９０５で、ＦＲＬ＝１（すなわち、ＹＥＳ）と判定された場合に実行されるステップ１９０６においては、下流側Ｏ２センサ１５の反転フラグＦＲＯ２ｄｅｔが「１」であるか否かにより、リッチ反転（下流側Ｏ２センサ１５の出力値Ｖ２がリーンからリッチに反転した）か否かを判定する。
【０１８４】
ステップ１９０６において、リッチ反転（ＦＲＯ２ｄｅｔ＝１）（すなわち、ＹＥＳ）と判定されれば、触媒劣化度Ｃａｔｄｅｔを所定設定値ＸｄｅｔＨだけ増加させて（ステップ１９０８）、以下の式（８）のように更新演算し、ステップ１９１０に進む。
【０１８５】
Ｃａｔｄｅｔ＝Ｃａｔｄｅｔ＋ＸｄｅｔＨ  ・・・（８）
【０１８６】
一方、ステップ１９０５で、ＦＲＬ＝２（すなわち、ＮＯ）と判定された場合に実行されるステップ１９０７においては、下流側Ｏ２センサ１５の反転フラグＦＲＯ２ｄｅｔが「２」であるか否かにより、リーン反転（下流側Ｏ２センサ１５の出力値Ｖ２がリッチからリーンに反転した）か否かを判定する。
【０１８７】
ステップ１９０７において、リーン反転（ＦＲＯ２ｄｅｔ＝２）（すなわち、ＹＥＳ）と判定されれば、ステップ１９０８に進み、上記式（８）のように、触媒劣化度Ｃａｔｄｅｔを所定設定値ＸｄｅｔＨだけ増加させる。
【０１８８】
一方、ステップ１９０６において、リーン反転（ＦＲＯ２ｄｅｔ＝２）（すなわち、ＮＯ）と判定された場合、または、ステップ１９０７において、リッチ反転（ＦＲＯ２ｄｅｔ＝１）（すなわち、ＮＯ）と判定された場合には、触媒劣化度Ｃａｔｄｅｔを所定設定値ＸｄｅｔＬだけ減少させて（ステップ１９０９）、以下の式（９）のように更新演算し、ステップ１９１０に進む。
【０１８９】
Ｃａｔｄｅｔ＝Ｃａｔｄｅｔ−ＸｄｅｔＬ  ・・・（９）
【０１９０】
なお、式（８）、式（９）内の各所定設定値ＸｄｅｔＨ、ＸｄｅｔＬは、平均空燃比の振動周期を考慮して設定されるとともに、吸入空気量Ｑａに反比例するように、吸入空気量Ｑａに応じて、または運転条件に応じて設定される。
【０１９１】
最後に、ステップ１９１０において、上限値ＭＸｄｅｔと下限値ＭＮｄｅｔとの範囲内の値となるように、以下の式（１０）を用いて、触媒劣化度Ｃａｔｄｅｔの上下限制限処理を行い、図２２の処理ルーチンを終了する。
【０１９２】
ＭＮｄｅｔ≦Ｃａｔｄｅｔ≦ＭＸｄｅｔ  ・・・（１０）
【０１９３】
次に、図２３および図２４を参照しながら、触媒劣化診断手段２０５の処理動作について説明する。
図２３は触媒１２の劣化時の挙動を示すタイミングチャートであり、図２４は触媒劣化診断手段２０３の処理動作を示すフローチャートである。図２４の演算ルーチンは、所定時間（たとえば、５ｍｓｅｃ）ごとに実行される。
【０１９４】
図２３において、触媒１２の劣化により最大酸素吸蔵量ＯＳＣｍａｘが減少し、平均空燃比の振動処理による酸素吸蔵量の振動幅が、減少した最大酸素吸蔵量ＯＳＣｍａｘから振り切れるようになると、下流側Ｏ２センサ１５の出力値Ｖ２のリッチ／リーン反転が増加することにより、触媒劣化度Ｃａｔｄｅｔは増加する。
【０１９５】
図２４において、まず、触媒１２の劣化診断の初期化条件が成立しているか否かを判定し（ステップ２１０１）、初期化条件が成立している（すなわち、ＹＥＳ）と判定されれば、診断回数Ｎｒａｔｉｏを「０」にリセットし（ステップ２１０２）、反転回数比Ｒｏａの積算値Ｒｏａｓｍを「０」にリセットし（ステップ２１０３）、劣化診断結果Ｆｃａｔｊを「０」（未判定状態）にリセットし（ステップ２１０４）、反転回数比平均値Ｒｏａａｖｅを「０」にリセットし（ステップ２１０５）、続いて、劣化診断条件が成立しているか否かを判定する（ステップ２１０６）。
【０１９６】
また、ステップ２１０１において、初期化条件が成立していない（すなわち、ＮＯ）と判定されれば、ステップ２１０２〜２１０５を実行せずに、ステップ２１０６に進む。
【０１９７】
なお、触媒劣化診断手段２０５の情報（触媒劣化度Ｃａｔｄｅｔなど）は、機関本体１の停止時にリセットされないように、バックアップＲＡＭ１０６（または、ＥＥＰＲＯＭなど）に記録されて保持されているが、バッテリの取り外し後またはＥＥＰＲＯＭの初期化後の最初の電源ＯＮ時において、ステップ２１０１の初期化条件が成立するようになっている。
【０１９８】
また、触媒劣化度Ｃａｔｄｅｔの演算が不可能になった場合（下流側Ｏ２センサ１５などの故障検出時など）や、触媒劣化度Ｃａｔｄｅｔの再演算条件が成立した場合、または外部機器（図示せず）からの通信によりリセット要求があった場合にも、ステップ２１０１において、初期化条件が成立したものと判定される。
【０１９９】
ステップ２１０６において、劣化診断条件が成立している（すなわち、ＹＥＳ）と判定されれば、続いて、目標平均空燃比がリッチ／リーンで反転したか否かを判定し（ステップ２１０７）、反転した（すなわち、ＹＥＳ）と判定されれば、平均空燃比反転回数Ｎａｆを「１」だけ増加させて（ステップ２１０８）、ステップ２１０９に進む。
【０２００】
また、ステップ２１０７において、目標平均空燃比が反転していない（すなわち、ＮＯ）と判定されれば、ステップ２１０８を実行せずに、ステップ２１０９に進む。
【０２０１】
なお、ステップ２１０７における目標平均空燃比の反転判定は、振動方向フラグＦＲＬが「１」（リッチ）または「２」（リーン）に変化したか否かにより行われる。つまり、前回演算時の振動方向フラグＦＲＬを記憶しておき、今回演算時の振動方向フラグＦＲＬと比較することにより、目標平均空燃比の反転を判定することができる。
【０２０２】
一方、ステップ２１０６において、劣化診断条件が成立していない（すなわち、ＮＯ）と判定されれば、平均空燃比反転回数Ｎａｆを「０」にリセットし（ステップ２１３２）、下流側Ｏ２反転回数Ｎｒｏ２を「０」にリセットし（ステップ２１３３）、ディレイ判定フラグＦｒｓｄｌｙを「０」（後述するディレイ処理の非実行を示す）にリセットして（ステップ２１３４）、ステップ２１２７（後述する）に進む。
【０２０３】
なお、ステップ２１０６における劣化診断条件は、前述（図２２内のステップ１９０４）の触媒劣化度Ｃａｔｄｅｔの更新条件と同様に、触媒１２が十分活性していると判定可能な条件下および平均空燃比の振動処理が実行中の条件下において成立する。また、触媒１２の活性状態は、触媒温度Ｔｍｐｃａｔから直接的に判定してもよく、機関本体１の始動後の経過時間や始動後の積算吸入空気量、または、エンジン回転速度Ｎｅや負荷などの所定運転条件に基づいて判定してもよい。さらに、触媒１２の活性状態を、平均空燃比の振動処理の振動回数ＰＴＮが所定回数以上に達したか否かに基づいて判定してもよい。
【０２０４】
ステップ２１０８に戻り、続いて、前述（図６内のステップ７０１、図２２内のステップ１９０３）と同様に、下流側Ｏ２センサ１５の出力値Ｖ２のリッチ／リーン反転の判定処理を実行する（ステップ２１０９）。
【０２０５】
ステップ２１０９において、出力値Ｖ２がリーンからリッチへの反転が判定された場合には、下流側Ｏ２センサ１５の反転フラグＦＲＯ２ｒｖを「１」に設定し、リッチからリーンへの反転が判定された場合には、反転フラグＦＲＯ２ｒｖを「２」に設定し、反転が判定されなかった場合には、反転フラグＦＲＯ２ｒｖを「０」に設定する。
【０２０６】
このとき、前述のステップ１９０３の場合と同様に、図８に示すヒステリシスの設定幅、または不感帯の設定幅、出力値Ｖ２のなまし処理の程度は、平均空燃比振動手段２０３の場合とは異なるように設定してもよい。
【０２０７】
ステップ２１０５〜２１０９は、出力値Ｖ２のリッチ／リーン反転により、触媒１２の酸素吸蔵量が、最大酸素吸蔵量ＯＳＣｍａｘまたは最小酸素吸蔵量（＝０）から振り切れたことを検出し、これに応答して触媒劣化度Ｃａｔｄｅｔを増減するための処理である。
【０２０８】
次に、反転フラグＦＲＯ２ｒｖが「１」または「２」であるか否かにより、出力値Ｖ２（下流側空燃比）が反転したか否かを判定し（ステップ２１１０）、反転した（ＦＲＯ２ｒｖ＝１、または、ＦＲＯ２ｒｖ＝２）（すなわち、ＹＥＳ）と判定されれば、下流側Ｏ２反転回数Ｎｒｏ２を「１」だけ増加させる（ステップ２１１１）。
【０２０９】
続いて、平均空燃比反転回数Ｎａｆが更新条件判定値Ｘｎａｆ以上であるか否かにより、劣化診断用の判定基準値Ｘｒｏａの更新条件が成立しているか否かを判定し（ステップ２１１２）、判定基準値Ｘｒｏａの更新条件が成立している（Ｎａｆ≧Ｘｎａｆ）（すなわち、ＹＥＳ）と判定されれば、判定用平均空燃比反転回数Ｎａｆｊとして、平均空燃比反転回数Ｎａｆを設定することにより、判定用平均空燃比反転回数Ｎａｆｊを更新する（ステップ２１１３）。
【０２１０】
また、次回の判定基準値Ｘｒｏａを演算するための準備として、平均空燃比反転回数Ｎａｆを「０」にリセットするとともに（ステップ２１１４）、平均空燃比が変動してから出力値Ｖ２が変動するまでの時間遅れを考慮したディレイ判定フラグＦｒｓｄｌｙを「１」（ディレイ処理中を示す）にセットし（ステップ２１１５）、ディレイ判定フラグＦｒｓｄｌｙが「１」であるか否かにより、ディレイ処理中であるか否かを判定する（ステップ２１１６）。
【０２１１】
一方、ステップ２１１２において、判定基準値Ｘｒｏａの更新条件が成立してない（Ｎａｆ＜Ｘｎａｆ）（すなわち、ＮＯ）と判定されれば、ステップ２１１３〜２１１５を実行せずに、ステップ２１１６に進む。
【０２１２】
ステップ２１１６において、ディレイ処理中である（Ｆｒｓｄｌｙ＝１）（すなわち、ＹＥＳ）と判定されれば、以下の式（１１）のように、ディレイタイマＴｒｓｄｌｙを所定値ＤＴｒｓｄｌｙだけ増加させて更新し（ステップ２１１７）、ステップ２１１９に進む。
【０２１３】
Ｔｒｓｄｌｙ＝Ｔｒｓｄｌｙ＋ＤＴｒｓｄｌｙ  ・・・（１１）
【０２１４】
式（１１）において、タイマ更新用の所定値ＤＴｒｓｄｌｙは、たとえば演算周期５ｍｓｅｃに設定される。
【０２１５】
また、ステップ２１１６において、ディレイ処理中でない（Ｆｒｓｄｌｙ＝０）（すなわち、ＮＯ）と判定されれば、ディレイタイマＴｒｓｄｌｙを「０」にリセットして（ステップ２１１８）、ステップ２１１９に進む。
【０２１６】
ステップ２１１９においては、ディレイタイマＴｒｓｄｌｙが所定判定値Ｘｒｓｄｌｙよりも大きいか否かにより、ディレイ時間が経過したか否かを判定し、ディレイ時間が経過していない（Ｔｒｓｄｌｙ≦Ｘｒｓｄｌｙ）（すなわち、ＮＯ）と判定されれば、ステップ２１２７（後述する）に進む。
【０２１７】
また、ステップ２１１９において、ディレイ時間が経過した（Ｔｒｓｄｌｙ＞Ｘｒｓｄｌｙ）（すなわち、ＹＥＳ）と判定されれば、出力値Ｖ２に基づく劣化診断判定情報の更新条件が成立しているので、以下の更新処理（ステップ２１２０〜２１２６）を実行する。
【０２１８】
なお、所定判定値Ｘｒｓｄｌｙは、平均空燃比の変動により、触媒１２の下流側Ｏ２センサ１５の出力値Ｖ２が変動するまでの時間遅れを考慮して設定される。この時間遅れは、燃料噴射弁７から燃料が噴射された時点から、実際に混合気が下流側Ｏ２センサ１５の設置位置に移動するまでの時間遅れと、触媒１２の酸素吸蔵作用による時間遅れとを含み、概して吸入空気量Ｑａに反比例する。
したがって、所定判定値Ｘｒｓｄｌｙは、たとえば吸入空気量Ｑａに応じた１次元マップにより設定されている。
【０２１９】
また、ステップ２１１９における更新条件の判定に、ディレイタイマＴｒｓｄｌｙ（タイマ動作）を用いたが、これに代えて、ディレイタイマＴｒｓｄｌｙを用いずに、ディレイ判定フラグＦｒｓｄｌｙが「１」に設定されている期間中（ディレイ処理中）の吸入空気量Ｑａの積算量を演算し、吸入空気量Ｑａの積算量が所定量よりも大きい場合に、更新条件が成立したと判定してもよい。
【０２２０】
ステップ２１１９に続く劣化診断判定情報の更新処理において、まず、判定用下流側Ｏ２反転回数Ｎｒｏ２ｊとして、下流側Ｏ２反転回数Ｎｒｏ２に設定することにより、判定用下流側Ｏ２反転回数Ｎｒｏ２ｊを更新する（ステップ２１２０）。
【０２２１】
また、次回の判定基準値Ｘｒｏａを演算するための準備として、下流側Ｏ２反転回数Ｎｒｏ２を「０」にリセットするとともに（ステップ２１２１）、ディレイ判定フラグＦｒｓｄｌｙを「０」にリセットして（ステップ２１２２）、ディレイ処理を終了する。
【０２２２】
続いて、判定用平均空燃比反転回数Ｎａｆｊと、これに対応する判定用下流側Ｏ２反転回数Ｎｒｏ２ｊとが揃えられたので、以下の式（１２）のように、判定用平均空燃比反転回数Ｎａｆｊと判定用下流側Ｏ２反転回数Ｎｒｏ２ｊとの反転回数比Ｒｏａを更新演算する（ステップ２１２３）。
Ｒｏａ＝Ｎｒｏ２ｊ／Ｎａｆｊ  ・・・（１２）
【０２２３】
続いて、反転回数比Ｒｏａの平均値Ｒｏａａｖｅを更新演算するために、まず、前回の積算値Ｒｏａｓｍに反転回数比Ｒｏａを加算して積算値Ｒｏａｓｍを更新演算し（ステップ２１２４）、診断回数Ｎｒａｔｉｏを「１」だけ増加させた後（ステップ２１２５）、以下の式（１３）のように、反転回数比平均値Ｒｏａａｖｅを更新演算する（ステップ２１２６）。
【０２２４】
Ｒｏａａｖｅ＝Ｒｏａｓｍ／Ｎｒａｔｉｏ  ・・・（１３）
【０２２５】
次に、劣化診断結果Ｆｃａｔｊが「０」であるか否かにより、劣化診断処理が未実行であるか否かを判定し（ステップ２１２７）、診断処理が実行済み（Ｆｃａｔｊ＝１、または、Ｆｃａｔｊ＝２）（すなわち、ＮＯ）と判定されれば、図２４の処理ルーチンを終了する。
【０２２６】
また、診断処理が未実行である（Ｆｃａｔｊ＝０）（すなわち、ＹＥＳ）と判定されれば、続いて、診断回数Ｎｒａｔｉｏが診断実行回数Ｘｎｒと一致するか否かにより、診断条件が成立しているか否かを判定し（ステップ２１２８）、診断条件が成立していない（Ｎｒａｔｉｏ≠Ｘｎｒ）（すなわち、ＮＯ）と判定されれば、図２４の処理ルーチンを終了する。
【０２２７】
また、ステップ２１２８において、診断条件が成立している（Ｎｒａｔｉｏ＝Ｘｎｒ）（すなわち、ＹＥＳ）と判定されれば、触媒１２の劣化診断処理を実行し、反転回数比平均値Ｒｏａａｖｅが判定基準値Ｘｒｏａ以上であるか否かにより、触媒劣化の有無を判定する（ステップ２１２９）。
【０２２８】
ステップ２１２９において、触媒１２が劣化状態である（Ｒｏａａｖｅ≧Ｘｒｏａ）（すなわち、ＹＥＳ）と判定されれば、劣化診断結果Ｆｃａｔｊを「２」（劣化を示す）に設定して（ステップ２１３０）、図２４の処理ルーチンを終了する。
【０２２９】
また、ステップ２１２９において、触媒１２が正常状態である（Ｒｏａａｖｅ＜Ｘｒｏａ）（すなわち、ＮＯ）と判定されれば、劣化診断結果Ｆｃａｔｊを「１」（正常を示す）に設定して（ステップ２１３１）、図２４の処理ルーチンを終了する。
【０２３０】
なお、判定基準値Ｘｒｏａは、劣化診断が必要な触媒の最大酸素吸蔵量ＯＳＣｍａｘの減少状態を検出できる値に調整されている。
また、平均空燃比の振動による酸素吸蔵量を、劣化診断が必要な触媒の最大酸素吸蔵量ＯＳＣｍａｘよりも大きい値に設定することにより、劣化診断が必要な触媒を確実に検出することができる。
【０２３１】
さらに、下流側Ｏ２反転回数Ｎｒｏ２（下流側Ｏ２センサ１５の出力値Ｖ２の反転回数）を、酸素吸蔵量の振動回数ＰＴＮとの比較に基づいて判定することにより、機関本体１の運転条件および運転パターンにより変化する振動周期に起因した劣化診断の判定精度低下を防止することができる。
【０２３２】
ここでは、反転回数平均値Ｒｏａａｖｅを用いて触媒劣化を診断したが、最大酸素吸蔵量演算手段２０４で演算される触媒劣化度Ｃａｔｄｅｔが所定値以上を示す場合に、触媒１２が劣化していると判定してもよい。
【０２３３】
次に、図２５のタイミングチャートを参照しながら、触媒劣化診断における挙動について説明する。図２５においては、触媒１２の劣化により最大酸素吸蔵量ＯＳＣｍａｘが減少して、酸素吸蔵量の振動幅が振り切れ始めた場合の各パラメータの挙動を示している。
【０２３４】
図２５において、下流側Ｏ２センサ１５の出力値Ｖ２の反転が判定された状態でも、平均空燃比が反転していない理由は、触媒劣化診断手段２０５のヒステリシス幅が、平均空燃比振動手段２０３のヒステリシス幅よりも狭く設定されているからである。
【０２３５】
まず、時刻ｔ２２１において、平均空燃比（振動方向フラグＦＲＬ参照）がリッチからリーンに反転すると、平均空燃比反転回数Ｎａｆが更新条件判定値Ｘｎａｆに到達し、ディレイタイマＴｒｓｄｌｙが増加し始める。
【０２３６】
続いて、前述の混合気の移動遅れや酸素吸蔵作用により、時刻ｔ２２１においてリッチからリーンに反転した影響が、時間遅れをもって時刻ｔ２２２の付近から表れ始め、時刻ｔ２２２において、下流側Ｏ２センサ１５の出力値Ｖ２がリッチ反転する。
【０２３７】
一方、ディレイタイマＴｒｓｄｌｙは、時刻ｔ２２３において、所定判定値Ｘｒｓｄｌｙに到達し、判定用下流側Ｏ２反転回数Ｎｒｏ２ｊを更新する。このように、制御系の遅れを考慮したディレイタイマＴｒｓｄｌｙを設けることにより、平均空燃比の振動に対応した下流側Ｏ２センサ１５の出力値Ｖ２の変動を精度よく検出することができる。
【０２３８】
次に、図２６のフローチャートおよび図２７の説明図を参照しながら、第２の空燃比フィードバック制御手段２０２による演算処理について説明する。図２６の処理ルーチンは、出力値Ｖ２に基づく平均空燃比振動の振動中心ＡＦＣＮＴを演算するための手順を示しており、所定時間（たとえば、５ｍｓｅｃ）ごとに実行される。
【０２３９】
図２６において、第２の空燃比フィードバック制御手段２０２は、まず、下流側Ｏ２センサ１５の出力値Ｖ２を読み込み、フィルタ処理（または、平均化処理などのなまし処理）を施し（ステップ２３０１）、処理後の出力値Ｖ２ｆｌｔに基づく制御を可能にする。
【０２４０】
続いて、下流側Ｏ２センサ１５によるフィードバック領域（閉ループ条件が成立している）か否かを判定する（ステップ２３０２）。
ステップ２３０２においては、たとえば、理論空燃比制御以外の空燃比制御条件下（機関本体１の始動中、冷却水温ＴＨＷが低温時でのリッチ化制御中、高負荷パワー増量時でのリッチ化制御中、燃費向上時のリーン化制御中、始動後のリーン化制御中、燃料カット中など）、下流側Ｏ２センサ１５の不活性状態時または故障時などの場合に、閉ループ条件が不成立と判定され、その他の場合には閉ループ条件が成立したと判定される。
【０２４１】
なお、下流側Ｏ２センサ１５の活性／不活性状態の判定は、始動後から所定時間だけ経過したか否か、または、下流側Ｏ２センサ１５の出力値Ｖ２のレベルが所定電圧を一度横切ったか否かにより判定することができる。
【０２４２】
ステップ２３０２において、閉ループ条件が成立していない（すなわち、ＮＯ）と判定されれば、平均空燃比振動の振動中心（中心空燃比）の初期値ＡＦＣＮＴ０と積分演算値（以下、単に「積分値」という）ＡＦＩとを用いて、平均空燃比振動の振動中心ＡＦＣＮＴを、以下の式（１４）のように求め（ステップ２３１４）、図２６の処理ルーチンを終了する。
【０２４３】
ＡＦＣＮＴ＝ＡＦＣＮＴ０＋ＡＦＩ  ・・・（１４）
【０２４４】
式（１４）において、初期値ＡＦＣＮＴ０は、たとえば「１４．５３」に設定される。また、積分値ＡＦＩは、閉ループ制御が終了する直前の値であり、制御回路１０内のバックアップＲＡＭ１０６に保持されている。初期値ＡＦＣＮＴ０および積分値ＡＦＩは、機関本体１の運転条件（たとえば、エンジン回転速度Ｎｅ、負荷、冷却水温ＴＨＷで区分けされた運転領域）ごとに保持された設定値であり、それぞれ、バックアップＲＡＭ１０６内に保持されている。
【０２４５】
一方、ステップ２３０２において、閉ループ条件が成立している（すなわち、ＹＥＳ）と判定されれば、下流側Ｏ２センサ１５の出力値Ｖ２の目標値ＶＲ２を設定する（ステップ２３０３）。
【０２４６】
目標値ＶＲ２は、理論空燃比付近の触媒１２の浄化ウインドウに対応した下流側Ｏ２センサ１５の所定出力値（たとえば、０．４５Ｖ付近）に設定されてもよく、または、触媒１２のＮＯｘ浄化率が高くなるような高めの電圧（たとえば、０．７５Ｖ付近）や、ＣＯ、ＨＣの浄化率が高くなるような低めの電圧（たとえば、０．２Ｖ付近）などに設定されてもよく、さらに、運転条件などに応じて可変変更されてもよい。
【０２４７】
なお、運転条件に応じて目標値ＶＲ２を変更する場合には、変更時のステップ的な変化による空燃比変動を緩和するために、目標値ＶＲ２になまし処理（たとえば、１次遅れフィルタ処理）を施してもよい。
【０２４８】
次に、ステップ２３０３に続いて、出力値Ｖ２の目標値ＶＲ２と、フィルタ処理後の出力値Ｖ２ｆｌｔとの偏差ΔＶ２（＝ＶＲ２−Ｖ２ｆｌｔ）を演算し（ステップ２３０４）、偏差ΔＶ２が「０」となるような振動中心ＡＦＣＮＴを設定するために、偏差ΔＶ２に応じたＰＩ制御処理（比例演算および積分演算）を行う（ステップ２３０５〜２３１１）。
【０２４９】
たとえば、下流側Ｏ２センサ１５の出力値Ｖ２が目標値ＶＲ２よりも小さく、リーン側の場合には、上流側の目標平均空燃比ＡＦＡＶＥｏｂｊをリッチ側に設定して、下流側Ｏ２センサ１５の出力値Ｖ２が目標値ＶＲ２に復帰するように作用させる。
【０２５０】
触媒１２の上流側の目標平均空燃比ＡＦＡＶＥｏｂｊは、一般的なＰＩ制御器により、目標平均空燃比の初期値ＡＦＡＶＥ０と、積分ゲインＫｉ２に基づく積分操作量Σ｛Ｋｉ２（ΔＶ２）｝と、比例ゲインＫｐ２に基づく比例操作量Ｋｐ２（ΔＶ２）とを用いて、以下の式（１５）のように演算される。
【０２５１】
ＡＦＡＶＥｏｂｊ＝ＡＦＡＶＥ０＋Σ｛Ｋｉ２（ΔＶ２）｝＋Ｋｐ２（ΔＶ２）・・・（１５）
【０２５２】
式（１５）において、初期値ＡＦＡＶＥ０は、運転条件ごとに設定された理論空燃比に相当する値であり、たとえば「１４．５３」に設定される。
また、積分ゲインＫｉ２に基づく積分演算は、偏差ΔＶ２を積分しながら出力を生成して比較的ゆっくり動作するので、上流側Ｏ２センサ１３の特性変動に起因する下流側Ｏ２センサ１５の出力値Ｖ２の定常的な偏差を解消する効果がある。
【０２５３】
積分ゲインＫｉ２は、大きく設定すればするほど、積分操作量Σ｛Ｋｉ２（ΔＶ２）｝の絶対値が大きくなり、偏差解消用の制御効果は大きくなるが、大きく設定し過ぎると位相遅れが大きくなり、制御系が不安定になってハンチングが生じるので、適切なゲイン設定が必要となる。
【０２５４】
一方、比例ゲインＫｐ２に基づく比例演算は、偏差ΔＶ２に比例した出力を生成して早い応答性を示すので、偏差を早急に復帰させる効果がある。比例ゲインＫｐ２は、大きく設定すればするほど、比例操作量Ｋｐ２（ΔＶ２）（たとえば、「Ｋｐ２・ΔＶ２」）の絶対値が大きくなり、復帰速度が早くなるが、大きく設定し過ぎると制御系が不安定になってハンチングを生じるので、適切なゲイン設定が必要となる。
【０２５５】
上記ＰＩ制御処理において、まず、積分値ＡＦＩの更新条件が成立しているか否かを判定する（ステップ２３０５）。積分値ＡＦＩの更新条件は、過渡運転中の場合および過渡運転後の所定期間以外の場合に成立する。
【０２５６】
たとえば、過渡運転時においては、上流側Ａ／Ｆが大きく乱れ、同様に下流側Ａ／Ｆも乱れるので、仮に、この状態で積分演算を行うと間違った値を積分し、特に積分演算は比較的ゆっくり動作することから、過渡運転後もしばらくは間違った値を保持して制御性能が悪化する。
【０２５７】
したがって、過渡運転時においては、積分演算の更新を一時的に停止して積分値ＡＦＩを保持することにより、上記のような誤った積分演算を防止している。また、過渡運転後も、制御対象の遅れによりしばらくは影響が残るので、過渡運転後の所定期間においても積分値ＡＦＩの更新を禁止する。特に、触媒１２の遅れが大きいので、過渡運転後の所定期間を、過渡運転後の積算吸入空気量が所定値に到達するまでの期間として設定してもよい。なぜなら、触媒１２の状態が過渡運転の影響から復帰するまでの速度は、触媒１２のＯ２吸蔵作用に依存し、吸入空気量Ｑａに比例するからである。
【０２５８】
なお、過渡運転は、急な加減速、燃料カット、リッチ化制御、リーン化制御、第２の空燃比フィードバック制御手段２０２による制御の停止、第１の空燃比フィードバック制御手段２０１による制御の停止、蒸散ガス導入の急変、などを含む。急な加減速は、スロットル開度の単位時間当たりの変化量が所定以上を示す場合、または、吸入空気量Ｑａの単位時間当たりの変化量が所定以上を示す場合などに判定される。また、蒸散ガス導入の急変は、蒸散ガスを導入するバルブ開度の単位時間当たりの変化量が所定以上を示す場合などに判定される。
【０２５９】
ステップ２３０５において、積分値ＡＦＩの更新条件が成立している（すなわち、ＹＥＳ）と判定されれば、前回までの積分値ＡＦＩに、積分ゲインＫｉ２に基づく更新量Ｋｉ２（ΔＶ２）を加算し、積分値ＡＦＩを更新演算して（ステップ２３０６）、ステップ２３０８に進む。
【０２６０】
積分値ＡＦＩは、前述のように運転条件ごとにバックアップＲＡＭ１０６に保持されている。更新量Ｋｉ２（ΔＶ２）は、単純に「Ｋｉ２・ΔＶ２」と設定されてもよく、または、図２７に示すような１次元マップを用いて、偏差ΔＶ２に応じた値に可変設定（いわゆる、可変ゲイン設定）してもよい。
【０２６１】
また、積分値ＡＦＩにより補償される上流側Ｏ２センサ１３の特性変動は、排気温度または排気圧力などの運転条件に応じて変化するので、積分値ＡＦＩは、運転条件が変化するごとに更新設定されるバックアップＲＡＭ１０６内に保持しておき、運転条件ごとに切り替えられる。また、積分値ＡＦＩは、バックアップＲＡＭ１０６内に保持されているので、機関本体１の停止または再始動ごとにリセットされ、制御性能の低下を回避することができる。
【０２６２】
一方、ステップ２３０５において、積分値ＡＦＩの更新条件が成立していない（すなわち、ＮＯ）と判定されれば、前回の積分値ＡＦＩのままに設定し、積分値ＡＦＩを更新せずに（ステップ１１０７）、ステップ２３０８に進む。
ステップ２３０８においては、積分値ＡＦＩの最小値ＡＦＩｍｉｎおよび最大値ＡＦＩｍａｘを用いて、以下の式（１６）を満たすように、積分値ＡＦＩの上下限制限処理を行う。
【０２６３】
ＡＦＩｍｉｎ＜ＡＦＩ＜ＡＦＩｍａｘ  ・・・（１６）
【０２６４】
最小値ＡＦＩｍｉｎおよび最大値ＡＦＩｍａｘは、上流側Ｏ２センサ１３の特性変動幅（あらかじめ把握可能）を補償できるような適切な制限値に設定される。これにより、過大な空燃比操作を回避することができる。
【０２６５】
続いて、比例演算処理を行い、比例演算値（以下、「比例値」という）ＡＦＰとして、比例操作量Ｋｐ２（ΔＶ２）を設定する（ステップ２３０９）。比例値Ｋｐ２（ΔＶ２）は、単純に「Ｋｐ２・ΔＶ２」と設定してもよく、積分値ＡＦＩの更新量Ｋｉ２（ΔＶ２）と同様に、図２７に示すような１次元マップを用いて、偏差ΔＶ２に応じて可変設定（可変ゲイン設定）してもよい。
【０２６６】
また、積分ゲインＫｉ２および比例ゲインＫｐ２は、平均空燃比振動手段２０３による平均空燃比の振動処理の有無、または平均空燃比の振動幅に応じて、設定変更されてもよい。この場合、平均空燃比振動手段２０３により下流側Ｏ２センサ１５の出力値Ｖ２の変動が増加すると、第２の空燃比フィードバック制御手段２０２の制御により、出力値Ｖ２の変動を抑制するように平均空燃比が操作されるので、平均空燃比振動手段２０３と第２の空燃比制御手段２０２とが相互に影響する。つまり、積分ゲインＫｉ２および比例ゲインＫｐ２は、平均空燃比の振動処理中に変更され、相互影響を考慮して設定される。
【０２６７】
また、積分ゲインＫｉ２および比例ゲインＫｐ２は、最大酸素吸蔵量演算手段２０４により演算される最大酸素吸蔵量ＯＳＣｍａｘ、触媒温度Ｔｍｐｃａｔ、触媒劣化度Ｃａｔｄｅｔ、または、触媒劣化診断手段２０５による劣化有無の診断結果に応じて、設定変更されてもよい。この場合、積分ゲインＫｉ２および比例ゲインＫｐ２の変更により、触媒１２の最大酸素吸蔵量ＯＳＣｍａｘの変化に応じた適切なゲインを設定することができる。
【０２６８】
また、過渡運転条件下（積分値ＡＦＩの更新条件が不成立）における過渡運転後の所定期間では、比例ゲインＫｐ２の絶対値を大きく設定して、外乱で悪化した触媒１２の浄化状態の復帰速度を速める。一方、過渡運転後の所定期間経過後は、比例ゲインＫｐ２の絶対値を小さく設定して、目標空燃比Ａ／Ｆｏの操作量過大に起因したドライバビリティの悪化を回避する。
【０２６９】
比例演算における過渡運転後の所定時間は、積分演算の場合と同様に、過渡運転後の積算空気量が所定値に到達するまでの期間に制御されてもよい。なぜなら、触媒１２の状態が過渡運転の影響から復帰するまでの速度は、触媒１２のＯ２吸蔵作用に依存し、吸入空気量Ｑａに比例するからである。
【０２７０】
したがって、過渡運転後の所定期間において、比例ゲインＫｐ２の絶対値を大きく設定することにより、過渡運転による触媒１２の浄化状態悪化を早く復帰させることができ、また通常運転時のドライバビリティの悪化を回避することができる。
【０２７１】
次に、ステップ２３０９に続いて、過大な空燃比操作を防止するために、比例値ＡＦＰの最小値ＡＦＰｍｉｎおよび最大値ＡＦＰｍａｘを用いて、以下の式（１７）を満たすように、比例値ＡＦＰの上下限制限処理を行う（ステップ２３１０）。
【０２７２】
ＡＦＰｍｉｎ＜ＡＦＰ＜ＡＦＰｍａｘ  ・・・（１７）
【０２７３】
続いて、ステップ２３０６〜２３０８で求めた積分値ＡＦＩと、ステップ２３０９、２３１０で求めた比例値ＡＦＰとを合計し、以下の式（１８）により、振動中心ＡＦＣＮＴを演算する（ステップ２３１１）。
【０２７４】
ＡＦＣＮＴ＝ＡＦＡＶＥ０＋ＡＦＰ＋ＡＦＩ  ・・・（１８）
【０２７５】
式（１８）のようにＰＩ演算値の合計からなる振動中心ＡＦＣＮＴは、触媒１２の上流側の目標平均空燃比ＡＦＡＶＥｏｂｊを求める前述の式（１５）に対応する。
【０２７６】
最後に、過大な空燃比操作を回避するために、振動中心ＡＦＣＮＴ（目標平均空燃比ＡＦＡＶＥｏｂｊに対応）の最小値ＡＦＣＮＴｍｉｎおよび最大値ＡＦＣＮＴｍａｘを用いて、以下の式（１９）を満たすように、振動中心ＡＦＣＮＴ（目標平均空燃比ＡＦＡＶＥｏｂｊ）の上下限制限処理を行い（ステップ２３１２）、図２６の処理ルーチンを終了する。
【０２７７】
ＡＦＣＮＴｍｉｎ＜ＡＦＣＮＴｏｂｊ＜ＡＦＣＮＴｍａｘ  ・・・（１９）
【０２７８】
以上のように、この発明の実施の形態１に係る内燃機関の空燃比制御装置は、触媒１２の上流側に設けられて上流側排気ガス中の空燃比を検出する上流側Ｏ２センサ１３と、上流側Ｏ２センサ１３の出力値Ｖ１および制御定数に応じて機関本体１に供給する空燃比を調整して、空燃比を周期的にリッチ方向およびリーン方向に振動させる第１の空燃比フィードバック制御手段２０１と、平均空燃比振動手段２０３とを備え、平均空燃比振動手段２０３は、触媒１２の酸素吸蔵量に基づいて、周期的に振動する空燃比を平均化した平均空燃比がリッチ方向およびリーン方向に振動するように、制御定数を操作する。
【０２７９】
これにより、図３２、図３３に示すように、上流側Ａ／Ｆのリッチ方向およびリーン方向への空燃比振動の周期または振動幅を大きく変化させることなく、振動中の空燃比の平均空燃比をリッチ方向およびリーン方向に周期的に振動させて、酸素吸蔵量の振動幅を変更させることができ、空燃比フィードバック性能およびトルク変動を重視した空燃比振動の周期または振動幅の設定を変更することなく、酸素吸蔵量の振動幅ΔＯＳＣを、触媒１２の劣化に適応するために自由に変更することができる。
また、空燃比フィードバック性能およびトルク変動に影響する空燃比振動の周期または振動幅を大きく変えることなく、触媒１２の劣化診断のために自由に変更することができる。
【０２８０】
また、平均空燃比振動手段２０３は、平均空燃比に対する目標平均空燃比ＡＦＡＶＥｏｂｊに応じて制御定数（各スキップ量ＲＳＲ、ＲＳＬ、各積分定数ＫＩＲ、ＫＩＬ、各遅延時間τＤＲ、τＤＬ、比較電圧ＶＲ１）を演算設定し、目標平均空燃比ＡＦＡＶＥｏｂｊをリッチ方向およびリーン方向に周期的に振動させる。また、各演算マップ上の設定値は、触媒１２の上流側の実際の平均空燃比が目標平均空燃比ＡＦＡＶＥｏｂｊと一致するように、あらかじめ机上計算または実験値に基づいて設定される。さらに、運転条件により制御定数の設定値を変化させることにより、運転条件にかかわらず、実際の平均空燃比が目標平均空燃比ＡＦＡＶＥｏｂｊと一致させることができる。
【０２８１】
また、平均空燃比振動手段２０３は、触媒１２の酸素吸蔵量の振動幅ΔＯＳＣが、触媒１２の最大酸素吸蔵量ＯＳＣｍａｘの範囲内であって、かつ機関本体１の運転条件に応じて設定された所定振動幅となるように、平均空燃比の振動幅または振動周期を運転条件に応じて設定する。
【０２８２】
このように、触媒１２の最大酸素吸蔵量ＯＳＣｍａｘの範囲内となるように酸素吸蔵量の振動幅ΔＯＳＣを設定し、最大酸素吸蔵量ＯＳＣｍａｘと最小酸素吸蔵量（＝０）との間の範囲内となるように触媒１２の酸素吸蔵量を設定することにより、触媒１２の上流側空燃比の変動は、酸素吸蔵量の変化によって確実に吸収され、触媒１２内の空燃比は理論空燃比付近に保たれるので、触媒１２の浄化率の大幅な悪化を防止することができる。
【０２８３】
また、平均空燃比振動手段２０３は、触媒劣化診断手段２０５による触媒１２の劣化診断時と劣化診断時以外とで、触媒１２の酸素吸蔵量の振動幅ΔＯＳＣが変化するように、平均空燃比の振動幅または振動周期を変更する。つまり、最大酸素吸蔵量ＯＳＣｍａｘの範囲内においても、酸素吸蔵量の振動幅ΔＯＳＣは、触媒１２の浄化特性の向上や、触媒１２の劣化診断を目的として、各種条件に応じて調整され、所定量に設定される。
【０２８４】
これにより、たとえばエンジン回転速度Ｎｅや負荷の違いによって、機関本体１からの排気ガス成分や触媒１２の温度が変化して、触媒１２の浄化特性が変化しても、エンジン回転速度Ｎｅや負荷に応じて酸素吸蔵量の振動幅ΔＯＳＣが変更されるので、さらに触媒１２の浄化特性を向上させることができる。
【０２８５】
また、平均空燃比振動手段２０３は、触媒１２の酸素吸蔵量の振動幅ΔＯＳＣが、触媒１２が劣化する前の最大酸素吸蔵量ＯＳＣｍａｘの範囲内であって、かつ劣化診断が必要な劣化触媒の最大酸素吸蔵量の範囲外となるように、平均空燃比の振動幅または振動周期を運転条件に応じて設定する。つまり、劣化診断時の酸素吸蔵量の振動幅ΔＯＳＣは、劣化前の触媒１２の最大酸素吸蔵量ＯＳＣｍａｘの範囲内で、かつ劣化診断が必要な触媒の最大酸素吸蔵量の範囲外となるように設定される。
【０２８６】
これにより、劣化診断が必要な触媒が用いられている場合には、下流側Ｏ２センサ１５の出力値Ｖ２の乱れが大きくなるので、劣化診断における劣化判定精度を向上させることができる。
【０２８７】
また、平均空燃比振動手段２０３は、たとえば、平均空燃比の振動開始時の最初の振動周期を、最終的に設定される振動周期の半分に設定し、平均空燃比の振動開始時の最初の振動幅を、最終的に設定される振動幅の半分に設定する。これにより、触媒１２の酸素吸蔵量の振動幅ΔＯＳＣが所定幅を超過することを回避することができる。
【０２８８】
また、この発明の実施の形態１に係る内燃機関の空燃比制御装置は、機関本体１の運転条件に基づいて触媒１２の最大酸素吸蔵量ＯＳＣｍａｘを演算する最大酸素吸蔵量演算手段２０４を備え、平均空燃比振動手段２０３により設定される平均空燃比の振動周期または振動幅は、最大酸素吸蔵量演算手段２０４により演算された最大酸素吸蔵量ＯＳＣｍａｘに応じて設定される。
【０２８９】
これにより、各種運転条件の変化のみならず、触媒１２の活性途中および過渡時に応じた触媒温度Ｔｍｐｃａｔの変化や、触媒１２の劣化などの各種条件に応じて変化する最大酸素吸蔵量ＯＳＣｍａｘを演算することができ、触媒１２の酸素吸蔵量の振動処理の制御精度を向上させることができる。
【０２９０】
また、平均空燃比振動手段２０３は、機関本体１の過渡運転中または過渡運転後の所定期間において、平均空燃比の振動処理の実行を中止するので、酸素吸蔵量の変動による影響を回避して、振動開始時期を触媒１２の酸素吸蔵量の挙動に合わせて、適切に設定することができる。
【０２９１】
また、この発明の実施の形態１に係る内燃機関の空燃比制御装置は、触媒１２の下流側に設けられ、下流側排気ガス中の空燃比を検出する下流側Ｏ２センサ１５と、平均空燃比振動手段２０３により振動する平均空燃比の振動中心（中心空燃比）ＡＦＣＮＴを、下流側Ｏ２センサの出力値Ｖ２に基づいて補正する第２の空燃比フィードバック制御手段２０２とを備え、下流側Ｏ２センサ１５の出力値Ｖ２に基づいて触媒１２の酸素吸蔵量の状態を検出するので、最大酸素吸蔵量ＯＳＣｍａｘまたは最小酸素吸蔵量（＝０）を振り切れないように目標平均空燃比ＡＦＡＶＥｏｂｊの振動中心ＡＦＣＮＴを調整することができ、酸素吸蔵量の振動処理の制御精度をさらに向上させることができる。
【０２９２】
また、この発明の実施の形態１に係る内燃機関の空燃比制御装置は、第２の空燃比フィードバック制御手段２０２の制御ゲインを変更する制御ゲイン変更手段２０６を備え、制御ゲイン変更手段２０６は、平均空燃比振動手段２０３による平均空燃比の振動処理の実行中においては、積分ゲインＫｉ２および比例ゲインＫｐ２を変更するので、触媒１２の最大酸素吸蔵量ＯＳＣｍａｘの変化に応じた適切なゲインを設定することができる。
【０２９３】
また、平均空燃比振動手段２０３は、平均空燃比を所定周期でリッチ方向とリーン方向とに振動させ、平均空燃比がリッチ方向に設定されているときに、下流側Ｏ２センサ１５の出力値Ｖ２がリッチ方向に反転した場合には、平均空燃比のリッチ方向への設定周期を終了して、平均空燃比をリーン方向に強制的に反転させ、平均空燃比がリーン方向に設定されているときに、下流側Ｏ２センサ１５の出力値Ｖ２がリーン方向に反転した場合には、平均空燃比のリーン方向への設定周期を終了して、平均空燃比をリッチ方向に強制的に反転させるので、酸素吸蔵量の振り切れ状態から復帰させることができ、排気ガスの悪化を最小限に抑制することができる。
【０２９４】
また、この発明の実施の形態１に係る内燃機関の空燃比制御装置は、触媒２１の劣化の有無を診断する触媒劣化診断手段２０５を備えているので、触媒劣化診断手段２０５は、最大酸素吸蔵量演算手段２０４により演算された最大酸素吸蔵量ＯＳＣｍａｘに基づいて、触媒１２の劣化を診断することができる。
また、触媒劣化診断手段２０５は、平均空燃比振動手段２０３による平均空燃比の振動処理の実行中に、少なくとも下流側Ｏ２センサ１５の出力値Ｖ２により触媒１２の劣化を診断することができる。
【０２９５】
実施の形態２．
なお、上記実施の形態１では、平均空燃比振動手段２０３は、周期カウンタＴｍｒに基づいて振動処理を実行したが、酸素吸蔵量の推定値（推定酸素吸蔵量ＯＳＣ）に基づいて振動処理を実行してもよい。
【０２９６】
以下、図１および図２とともに、図２８〜図３１を参照しながら、推定酸素吸蔵量ＯＳＣに基づく振動処理を実行するこの発明の実施の形態２について説明する。この場合、平均空燃比振動手段２０３による演算処理（図６参照）の一部が異なるのみであり、内燃機関の空燃比制御装置の全体構成および他の機能は、前述と同様である。
【０２９７】
図２８はこの発明の実施の形態２に係る平均空燃比振動手段２０３による処理動作を示すフローチャートであり、図２８の演算ルーチンは、前述の図６の場合と同様に所定時間（たとえば、５ｍｓｅｃ）ごとに実行される。図２９、図３０はリッチ方向およびリーン方向の推定酸素吸蔵量ＯＳＣｒ、ＯＳＣｌの設定値を示す説明図である。なお、平均空燃比振動のリッチ方向およびリーン方向の振動幅ＤＡＦｒ、ＤＡＦｌは、前述の図１０、図１２に示した通りである。図３１はこの発明の実施の形態２における振動幅ΔＯＳＣを示すタイミングチャートである。
【０２９８】
図２８において、ステップ２５０１〜２５２６は、前述（図６参照）のステップ７０１〜７２６にそれぞれ対応している。ただし、ステップ２５０７〜２５１０、２５１４〜２５１７および２５２４の各処理において、反転周期Ｔｊまたは周期カウンタＴｍｒの代わりに、推定酸素吸蔵量ＯＳＣが適用されている点のみが前述と異なる。
【０２９９】
平均空燃比振動手段２０３は、まず、前述（ステップ７０１）と同様に、下流側Ｏ２センサ１５の出力値Ｖ２のリッチ／リーン反転を判定し（ステップ２５０１）、リーンからリッチへの反転時には、反転フラグＦＲＯ２＝１（リッチ反転）とし、リッチからリーンへの反転時には、ＦＲＯ２＝２（リーン反転）とし、非反転時には、ＦＲＯ２＝０（反転なし）として、ステップ２５０２に進む。
【０３００】
ステップ２５０２においては、前述（ステップ７０２）と同様に、平均空燃比の振動条件が成立しているか否か判定し、振動条件が成立であれば、次の判定処理（ステップ２５０３）に進み、振動条件が不成立であれば、リセット処理（ステップ２５２３）に進む。
【０３０１】
ステップ２５０３〜２５０５では、振動条件成立後の初回振動における初期値（振動方向フラグＦＲＬ、振動回数ＰＴＮ）を設定する。まず、ステップ２５０３の判定結果が、振動回数ＰＴＮ＝０（初回振動）の場合には、ステップ２５０４、２５０５で初期値を設定し、ＰＴＮ＝０以外の場合には、初期値を設定せずにステップ２５０６に進む。ステップ２５０４では、初回の振動方向フラグＦＲＬ（たとえば、リッチ方向「１」）を設定し、ステップ２５０５では、初回の振動回数ＰＴＮ＝１に設定する。
【０３０２】
ステップ２５０６〜２５０８では、リッチ方向およびリーン方向への推定酸素吸蔵量ＯＳＣｊ、平均空燃比の振動幅ＤＡＦｊをそれぞれ設定する。まず、ステップ２５０６で、リッチまたはリーンへの振動方向を判定し、リッチ方向（ＦＲＬ＝１）の場合には、ステップ２５０７に進み、リーン方向（ＦＲＬ＝２）の場合には、ステップ２５０８に進む。
【０３０３】
ステップ２５０７においては、リッチ方向の推定酸素吸蔵量ＯＳＣｒおよび振動幅ＤＡＦｒを設定し、ステップ２５０９に進む。このとき、推定酸素吸蔵量ＯＳＣｊ（＝ＯＳＣｒ）は、酸素吸蔵量の振動幅ΔＯＳＣが所定量となるように、吸入空気量Ｑａに応じた１次元マップ（図２９参照）により設定され、平均空燃比の振動幅ＤＡＦｊ（＝ＤＡＦｒ）は、同様に、振動幅ΔＯＳＣが所定量となるように、吸入空気量Ｑａに応じた１次元マップ（図１０参照）により設定される。
【０３０４】
ステップ２５０８においては、リーン方向の推定酸素吸蔵量ＯＳＣｌおよび振動幅ＤＡＦｌを設定し、ステップ２５０９に進む。このとき、推定酸素吸蔵量ＯＳＣｊ（＝ＯＳＣｌ）は、酸素吸蔵量の振動幅ΔＯＳＣが所定量となるように、吸入空気量Ｑａに応じた１次元マップ（図３０参照）により設定され、平均空燃比の振動幅ＤＡＦｊ（＝ＤＡＦｌ）は、同様に、振動幅ΔＯＳＣが所定量となるように、吸入空気量Ｑａに応じた１次元マップ（図１２参照）により設定される。
【０３０５】
また、後述するように、触媒劣化診断手段２０５による劣化診断中においては、劣化診断時の酸素吸蔵量の振動幅ΔＯＳＣは、劣化前の触媒１２の最大酸素吸蔵量ＯＳＣｍａｘの範囲内で、かつ劣化診断が必要な触媒の最大酸素吸蔵量の範囲外となるように設定される。これにより、劣化診断が必要な触媒の場合に、下流側Ｏ２センサ１５の出力値Ｖ２の乱れが大きくなり、劣化診断の精度が向上する。
【０３０６】
酸素吸蔵量の振動幅ΔＯＳＣは、酸素吸蔵量ＯＳＣｊと、周期Ｔｊ［ｓｅｃ］と、振動幅ＤＡＦｊの絶対値と、吸入空気量Ｑａ［ｇ／ｓｅｃ］と、変換用の所定係数ＫＯ２とを用いて、前述の式（３）と同様に、以下の式（２０）のように表される。
【０３０７】
ΔＯＳＣ［ｇ］＝２×｜ＯＳＣｊ｜［ｇ］
＝Ｔｊ×｜ＤＡＦｊ｜×Ｑａ×ＫＯ２  ・・・（２０）
【０３０８】
酸素吸蔵量の振動幅ΔＯＳＣを所定値に維持させるためには、たとえば振動幅ＤＡＦｊを固定値とすれば、吸入空気量Ｑａに反比例するように周期Ｔｊを変化させればよい（図９、図１１参照）。逆に、周期Ｔｊを固定値とした場合には、吸入空気量Ｑａに反比例するように振動幅ＤＡＦｊを設定すればよい。ただし、実際には、周期Ｔｊまたは振動幅ＤＡＦｊの設定範囲には、触媒１２の浄化特性の向上、ドライバビリティの向上、応答性の向上などの様々な制約があるので、図１０、図１２のように、振動幅ＤＡＦｊを吸入空気量Ｑａに応じて変化させ、酸素吸蔵量の振動幅ΔＯＳＣが所定値となるように設定する。
【０３０９】
また、リッチ方向およびリーン方向への振動幅ＤＡＦｊを非対称になるように設定され、たとえば、触媒１２のＮＯｘ浄化特性を向上させるため、または、機関本体１のトルク低下を軽減するために、リーン方向への振動幅ＤＡＦｊ（＝ＤＡＦｌ）の絶対値をリッチ方向への振動幅ＤＡＦｊ（＝ＤＡＦｒ）の絶対値よりも小さく設定される。
【０３１０】
また、推定酸素吸蔵量ＯＳＣ（振動幅ΔＯＳＣ）は、触媒１２の最大酸素吸蔵量ＯＳＣｍａｘの範囲内となるように設定される。なぜなら、触媒１２の酸素吸蔵量が最大酸素吸蔵量ＯＳＣｍａｘと最小酸素吸蔵量（＝０）との間の範囲内にある場合には、触媒１２の上流側の空燃比変動が酸素吸蔵量の変化によって吸収され、触媒１２内の空燃比が理論空燃比付近に保たれるので、触媒１２の浄化率の大幅な悪化を防止できるからである。
【０３１１】
最大酸素吸蔵量ＯＳＣｍａｘの範囲内においても、たとえば触媒１２の浄化特性の向上や触媒１２の劣化診断のために、酸素吸蔵量の振動幅ΔＯＳＣが調整され、条件に応じて所定量に設定される。なぜなら、エンジン回転速度Ｎｅまたは負荷に応じて、酸素吸蔵量の振動幅ΔＯＳＣを変更することにより、機関本体１から排出される排気ガス成分および触媒温度Ｔｍｐｃａｔが変化して触媒１２の浄化特性が変化するので、さらに触媒１２の浄化特性を向上させることができるからである。
【０３１２】
また、リッチ方向およびリーン方向での推定酸素吸蔵量ＯＳＣｊ、振動幅ＤＡＦｊの各設定値は、触媒１２の浄化特性を向上させる場合や、触媒１２の劣化診断を行う場合などに、切り替えられてもよい。これにより、目的に応じた適切な酸素吸蔵量の振動幅ΔＯＳＣを設定することができる。このときの切り替え処理は、たとえば、ステップ２５０７、２５０８で設定した推定酸素吸蔵量ＯＳＣｊおよび振動幅ＤＡＦｊの各マップを、条件に応じて切り替えることによって行われる。
【０３１３】
劣化診断時の酸素吸蔵量の振動幅ΔＯＳＣは、劣化前の触媒１２の最大酸素吸蔵量ＯＳＣｍａｘの範囲内で、かつ劣化診断が必要な触媒の最大酸素吸蔵量の範囲外となるように設定される。これにより、劣化診断が必要な触媒の場合に、下流側Ｏ２センサ１５の出力値Ｖ２の乱れが大きくなり、劣化診断の精度が向上する。
【０３１４】
図２８に戻り、ステップ２５０９においては、前述（図６）のステップ７０９と同様に、最大酸素吸蔵量演算手段２０４で演算された最大酸素吸蔵量ＯＳＣｍａｘに応じて、ステップ２５０７または２５０８で設定した推定酸素吸蔵量ＯＳＣｊ（振動幅ΔＯＳＣ）および平均空燃比の振動幅ＤＡＦｊを適応的に補正する。
【０３１５】
すなわち、平均空燃比の振動幅ＤＡＦｊは、前述の式（５）により、最大酸素吸蔵量ＯＳＣｍａｘに応じた補正係数Ｋｏｓｃａｆを用いて補正され、推定酸素吸蔵量ＯＳＣｊ（振動幅ΔＯＳＣ）は、前述の式（４）と同様に、補正係数Ｋｏｓｃｔを用いて、以下の式（２１）により補正される。
【０３１６】
ＯＳＣｊ＝ＯＳＣｊ（ｎ−１）×Ｋｏｓｃｔ  ・・・（２１）
【０３１７】
式（２１）において、（ｎ−１）は補正前の前回値を示す。なお、補正係数Ｋｏｓｃｔは、最大酸素吸蔵量ＯＳＣｍａｘに応じた１次元マップにより設定される。
【０３１８】
また、補正係数Ｋｏｓｃｔ、Ｋｏｓｃａｆは、推定酸素吸蔵量ＯＳＣｊの振動幅ΔＯＳＣを、変化後の最大酸素吸蔵量ＯＳＣｍａｘの範囲内に維持するために、最大酸素吸蔵量ＯＳＣｍａｘの減少とともに酸素吸蔵量の振動幅ΔＯＳＣが減少するように設定される。これにより、酸素吸蔵量の振動幅ΔＯＳＣが最大酸素吸蔵量ＯＳＣｍａｘを大幅に振り切れることを防止することができ、大幅な排気ガスの悪化を回避することができる。
【０３１９】
次に、ステップ２５０９の補正処理に続いて、平均空燃比の振動開始後の振動回数ＰＴＮに応じた補正係数Ｋｐｔｎｔ、Ｋｐｔｎａｆを乗算することにより、推定酸素吸蔵量ＯＳＣｊおよび平均空燃比の振動幅ＤＡＦｊをさらに補正する（ステップ２５１０）。
【０３２０】
推定酸素吸蔵量ＯＳＣｊ（振動幅ΔＯＳＣ）の補正係数Ｋｐｔｎｔ、および、平均空燃比の振動幅ＤＡＦｊの補正係数Ｋｐｔｎａｆは、振動回数ＰＴＮに応じたテーブルによりそれぞれ設定される。なお、各補正係数は、振動回数ＰＴＮの増加とともに、酸素吸蔵量の振動幅ΔＯＳＣが徐々に増加するように設定されてもよい。これにより、触媒１２の状態急変を防止することができ、また、空燃比制御（特に、第２の空燃比フィードバック制御手段２０２による制御）の追従性不良を回避することができる。
【０３２１】
続いて、前述（図６）のステップ７１１〜７１４と同様に、ステップ２５１１〜２５１４において、下流側Ｏ２センサ１５の出力値Ｖ２のリッチ／リーン反転時に、触媒１２の酸素吸蔵量ＯＳＣが最大酸素吸蔵量ＯＳＣｍａｘまたは最小酸素吸蔵量（＝０）から振り切れた場合に強制リセットを行い、平均空燃比の振動方向を強制的に反転させる。
【０３２２】
まず、ステップ２５１１の判定結果が、リッチ方向に振動中（振動方向フラグＦＲＬ＝１）であれば、ステップ２５１２に進み、リーン方向に振動中（ＦＲＬ＝２）であれば、ステップ２５１３に進む。
【０３２３】
続いて、リッチ方向に振動中におけるステップ２５１２の判定結果が、出力値Ｖ２のリーンからリッチへの反転（下流側Ｏ２センサ１５の反転フラグＦＲＯ２＝１）であれば、推定酸素吸蔵量ＯＳＣを反転酸素吸蔵量ＯＳＣｊにリセットし（ステップ２５１４）、振動方向を強制的に反転させる。
【０３２４】
また、リーン方向に振動中におけるステップ２５１３の判定結果が、出力値Ｖ２のリッチからリーンへの反転（ＦＲＯ２＝２）であれば、同様に、ステップ２５１４に進み、推定酸素吸蔵量ＯＳＣを反転酸素吸蔵量ＯＳＣｊにリセットして、振動方向を強制的に反転させる。
【０３２５】
このように、前述の実施の形態１と同様に、下流側Ｏ２センサ１５の出力値Ｖ２の反転に基づいて触媒１２の酸素吸蔵量ＯＳＣの振り切れを検出し、平均空燃比の振動方向を反転させることにより、酸素吸蔵量ＯＳＣの振り切れ状態から復帰させることができ、排気ガスの悪化を最小限に抑制することができる。
【０３２６】
次に、ステップ２５１５〜２５２１により、推定酸素吸蔵量ＯＳＣの更新によるリッチ／リーン反転を行う。まず、ステップ２５１５において、推定酸素吸蔵量ＯＳＣは、平均空燃比の振動幅ＤＡＦと、吸入空気量Ｑａ［ｇ／ｓｅｃ］と、演算周期ＤＴ（＝５ｍｓｅｃ）と、酸素吸蔵量ＯＳＣに変換するための所定係数ＫＯ２とを用いて、前回積分値ＯＳＣ（ｎ−１）に対する積分演算により、以下の式（２２）のように更新される。
【０３２７】
ＯＳＣ＝ＯＳＣ（ｎ−１）＋ＤＡＦ×Ｑａ×ＤＴ×ＫＯ２  ・・・（２２）
【０３２８】
図３１は平均空燃比から推定した推定酸素吸蔵量ＯＳＣ（実線参照）の挙動を示すタイミングチャートであり、平均処理前の（リッチ／リーンに周期的に変動する）空燃比挙動から推定した酸素吸蔵量（点線参照）と比較して示している。
【０３２９】
図３１において、空燃比挙動に基づく推定酸素吸蔵量（点線参照）と、平均空燃比に基づく推定酸素吸蔵量ＯＳＣ（実線参照）とを比較すると、推定酸素吸蔵量ＯＳＣ（実線参照）のように微小振動（点線参照）を省略しても、長い周期の酸素吸蔵量の振動を十分に模擬可能なことが分かる。
【０３３０】
なお、式（２２）では、平均空燃比の振動幅ＤＡＦを用いたが、目標平均空燃比ＡＦＡＶＥｏｂｊを用いてもよい。この場合、式（２２）の演算において、振動幅ＤＡＦに代えて、（ＡＦＡＶＥｏｂｊ−１４．５３）が用いられる。
また、目標平均空燃比ＡＦＡＶＥｏｂｊの代わりに、触媒１２の上流空燃比の推定値を用いてもよい。この場合、上流空燃比の推定値は、たとえば、燃料補正係数ＦＡＦに無駄時間処理（または、なまし処理など）を施すことにより推定演算される。
【０３３１】
目標平均空燃比ＡＦＡＶＥｏｂｊまたは燃料補正係数ＦＡＦに基づいて空燃比を推定した場合には、第２の空燃比フィードバック制御手段２０２による制御の影響を受けるので、フィードバック制御との相互作用が生じて設計が複雑になるが、酸素吸蔵量ＯＳＣの推定精度は優れている。一方、平均空燃比の振動幅ＤＡＦに基づいて空燃比を推定した場合には、第２の空燃比フィードバック制御手段２０２による制御の影響を受けないので、設計が容易である反面、酸素吸蔵量ＯＳＣの推定精度は劣る。
【０３３２】
また、理論空燃比を「１４．５３」として説明したが、第２の空燃比フィードバック制御手段２０２による制御で学習した理論空燃比（＝１４．５３＋ＡＦＩ）を用いて演算してもよい。
【０３３３】
次に、推定酸素吸蔵量ＯＳＣの更新処理（ステップ２５１５）に続いて、推定酸素吸蔵量ＯＳＣの絶対値が反転後の推定酸素吸蔵量ＯＳＣｊの絶対値よりも大きいか否かにより、反転タイミングであるか否かを判定し（ステップ２５１６）、反転タイミングである（｜ＯＳＣ｜＞｜ＯＳＣｊ｜）（すなわち、ＹＥＳ）と判定されれば、推定酸素吸蔵量ＯＳＣを「０」にリセットし（ステップ２５１７）、振動回数ＰＴＮを「１」だけ増加させて（ステップ２５１８）、前述（図６）のステップ７１９と同様のステップ２５１９に進む。
【０３３４】
一方、ステップ２５１６において、反転タイミングでない（｜ＯＳＣ｜≦｜ＯＳＣｊ｜）（すなわち、ＮＯ）と判定されれば、目標平均空燃比ＡＦＡＶＥｏｂｊの設定処理（ステップ２５２２）に進む。
【０３３５】
以下、ステップ２５１９の判定結果が、現在の振動方向フラグＦＲＬ＝１（リッチ）であれば、振動方向フラグＦＲＬを「２」に設定してリーン方向に反転させ（ステップ２５２０）、ステップ２５１９の判定結果が、ＦＲＬ＝２（リーン）であれば、ＦＲＬ＝１に設定してリッチ方向に反転させる（ステップ２５２１）。
【０３３６】
また、前述の式（６）のように、振動中心ＡＦＣＮＴに振動幅ＤＡＦｊを加えて、振動条件成立時における目標平均空燃比ＡＦＡＶＥｏｂｊを演算設定し（ステップ２５２２）、ステップ２５２６に進む。なお、振動中心ＡＦＣＮＴは、第２の空燃比フィードバック制御手段２０２による制御で演算される目標平均空燃比である。
【０３３７】
このように、下流側Ｏ２センサ１５の出力値Ｖ２により触媒１２の酸素吸蔵量ＯＳＣの状態が検出することにより、最大酸素吸蔵量ＯＳＣｍａｘまたは最小酸素吸蔵量（＝０）を振り切れないように振動中心ＡＦＣＮＴを調整することができ、酸素吸蔵量ＯＳＣの振動処理の制御精度をさらに向上させることができる。
【０３３８】
なお、振動中心ＡＦＣＮＴを運転条件に応じた所定値に設定してもよい。
また、条件に応じて、振動中心ＡＦＣＮＴをリーン方向またはリッチ方向にシフトすることにより、触媒１２の浄化状態を変更してもよく、触媒１２および各種センサなどの故障診断に用いてもよい。
【０３３９】
一方、前述のステップ２５０２での判定結果が振動条件でない場合には、振動回数ＰＴＮを「０」にリセットし（ステップ２５２３）、推定酸素吸蔵量ＯＳＣを「０」にリセットし（ステップ２５２４）、振動条件の不成立時の目標平均空燃比ＡＦＡＶＥｏｂｊを振動中心ＡＦＣＮＴに設定して（ステップ２５２５）、ステップ２５２６に進む。
【０３４０】
最後に、ステップ２５２６により、目標平均空燃比ＡＦＡＶＥｏｂｊとなるように、第１の空燃比フィードバック制御手段２０１による制御における制御定数を設定し、図２８の平均空燃比振動手段２０３の処理を終了する。
【０３４１】
以上のように、この発明の実施の形態２による平均空燃比振動手段２０３は、触媒１２の酸素吸蔵量ＯＳＣを推定し、推定酸素吸蔵量ＯＳＣが触媒１２の最大酸素吸蔵量ＯＳＣｍａｘの範囲内であって、かつ運転条件に応じて設定された所定範囲を振動するように、推定酸素吸蔵量ＯＳＣに基づいて平均空燃比をリッチ方向とリーン方向とに反転する。
【０３４２】
このように、触媒１２の酸素吸蔵量ＯＳＣを、最大酸素吸蔵量ＯＳＣｍａｘと最小酸素吸蔵量（＝０）との間の範囲内に制御することにより、触媒１２の上流側の空燃比変動が酸素吸蔵量の変化によって吸収され、触媒１２内の空燃比が理論空燃比付近に保たれるので、触媒１２の浄化率の大幅な悪化を防止することができる。
【０３４３】
また、最大酸素吸蔵量ＯＳＣｍａｘの範囲内においても、エンジン回転速度Ｎｅまたは負荷などの条件に応じて、酸素吸蔵量の振動幅ΔＯＳＣを所定量に調整し、機関本体１から排出される排気ガス成分および触媒温度Ｔｍｐｃａｔを変化させて触媒１２の浄化特性を変化させることにより、さらに触媒１２の浄化特性を向上させるとともに、触媒１２の劣化診断に適用することができる。
【０３４４】
また、平均空燃比振動手段２０３は、平均空燃比振動手段２０３により設定される平均空燃比（振動幅ＤＡＦ）に基づいて推定酸素吸蔵量ＯＳＣを求めるので、第２の空燃比フィードバック制御手段２０２による制御の影響を受けないので、設計を容易にすることができる。
【０３４５】
または、平均空燃比振動手段２０３は、第１の空燃比フィードバック制御手段２０１による空燃比の調整量（目標平均空燃比ＡＦＡＶＥｏｂｊ）に基づいて推定酸素吸蔵量ＯＳＣを求めので、酸素吸蔵量ＯＳＣの推定精度を向上させることができる。
【０３４６】
また、この発明の実施の形態２に係る内燃機関の空燃比制御装置は、機関本体１の運転条件に基づいて触媒１２の最大酸素吸蔵量ＯＳＣｍａｘを演算する最大酸素吸蔵量演算手段２０４を備え、平均空燃比振動手段２０３により設定される平均空燃比の振動幅ＤＡＦまたは触媒１２の酸素吸蔵量の振動幅ΔＯＳＣは、最大酸素吸蔵量演算手段２０４で演算された最大酸素吸蔵量ＯＳＣｍａｘに応じて設定され、平均空燃比振動手段２０３は、推定酸素吸蔵量ＯＳＣに基づいて平均空燃比をリッチ方向とリーン方向とに反転する。
【０３４７】
これにより、補正係数Ｋｏｓｃｔ、Ｋｏｓｃａｆは、推定酸素吸蔵量ＯＳＣｊの振動幅ΔＯＳＣを、変化後の最大酸素吸蔵量ＯＳＣｍａｘの範囲内に維持するために、最大酸素吸蔵量ＯＳＣｍａｘの減少とともに酸素吸蔵量の振動幅ΔＯＳＣが減少するように設定されるので、酸素吸蔵量の振動幅ΔＯＳＣが最大酸素吸蔵量ＯＳＣｍａｘを大幅に振り切れることを防止することができ、大幅な排気ガスの悪化を回避することができる。
【０３４８】
また、平均空燃比振動手段２０３は、推定酸素吸蔵量ＯＳＣに基づいて平均空燃比をリッチ方向とリーン方向とに振動させ、平均空燃比がリッチ方向に設定されているときに、下流側Ｏ２センサ１５の出力値Ｖ２がリッチ方向に反転した場合には、推定酸素吸蔵量ＯＳＣを触媒１２の酸素吸蔵量の振動範囲の下限値にリセットするとともに、平均空燃比をリーン方向に強制的に反転させる。一方、平均空燃比がリーン方向に設定されているときに、下流側Ｏ２センサ１５の出力値Ｖ２がリーン方向に反転した場合には、推定酸素吸蔵量ＯＳＣを触媒１２の酸素吸蔵量の振動範囲の上限値にリセットするとともに、平均空燃比をリッチ方向に強制的に反転させる。
【０３４９】
このように、下流側Ｏ２センサ１５の出力値Ｖ２の反転に基づいて触媒１２の酸素吸蔵量ＯＳＣの振り切れを検出し、平均空燃比の振動方向を反転させることにより、酸素吸蔵量ＯＳＣの振り切れ状態から復帰させることができ、排気ガスの悪化を最小限に抑制することができる。
【０３５０】
なお、上記各実施の形態では、下流側Ｏ２センサ１５としてλ型センサを用いたが、流側Ｏ２センサ１５は、上流側に位置する触媒１２の浄化状態を検出可能なセンサであれば他のセンサでもよく、たとえば、リニア空燃比センサ、ＮＯｘセンサ、ＨＣセンサ、ＣＯセンサなどを用いても、触媒１２の浄化状態を制御することができるので、前述と同様の作用効果を奏する。
【０３５１】
また、上流側Ｏ２センサ１３としては、空燃比変化に対してリニアな出力特性を有するリニア型Ｏ２センサを用いてもよく、前述と同様の第１の空燃比フィードバック制御手段２０１による制御により、触媒１２の上流側の空燃比を振動させながら、平均空燃比を制御することができるので、前述と同様の作用効果を奏する。
【０３５２】
また、上流側Ｏ２センサ１３としてリニア型Ｏ２センサを用いる場合には、目標空燃比Ａ／Ｆｏへの追従性に優れた制御も可能なので、目標空燃比Ａ／Ｆｏをリッチ方向およびリーン方向に周期的に振動させて上流側空燃比を振動させ、振動中の目標空燃比Ａ／Ｆｏの平均値を、さらにリッチ方向およびリーン方向に周期的に振動させることにより、前述と同様の作用効果を奏する。
【０３５３】
さらに、第２の空燃比フィードバック制御装置２０２は、目標値ＶＲ２と、下流側Ｏ２センサ１５の出力値Ｖ２（出力情報）とから、比例演算および積分演算を用いて目標空燃比Ａ／Ｆｏを演算する構成としたが、目標値ＶＲ２および出力値Ｖ２から他のフィードバック制御（たとえば、現代制御理論の状態フィードバック制御、スライディングモード制御、オブザーバ、適応制御、Ｈ∞制御など）を用いて目標空燃比Ａ／Ｆｏを演算しても、触媒１２の浄化状態を制御することができるので、前述と同様の作用効果を奏する。
【図面の簡単な説明】
【０３５４】
【図１】この発明の実施の形態１に係る内燃機関の空燃比制御装置を概略的に示す構成図である。
【図２】図１内の制御回路の基本構成を示す機能ブロック図である。
【図３】図２内の第１の空燃比フィードバック制御手段による演算処理動作を示すフローチャートである。
【図４】図２内の第１の空燃比フィードバック制御手段の動作を補足説明するためのタイミングチャートである。
【図５】運転条件に応じて可変設定される一般的な目標空燃比の制御領域を示す説明図である。
【図６】図２内の平均空燃比振動手段の演算処理動作を示すフローチャートである。
【図７】一般的なλ型センサを用いた場合の下流側Ｏ２センサの出力特性を示す説明図である。
【図８】一般的なリッチ／リーン判定閾値のヒステリシス幅を示す説明図である。
【図９】この発明の実施の形態１により吸入吸気量に応じて設定されるリッチ方向の振動周期の特性を示す説明図である。
【図１０】この発明の実施の形態１により吸入吸気量に応じて設定されるリッチ方向の振動幅の特性を示す説明図である。
【図１１】この発明の実施の形態１により吸入吸気量に応じて設定されるリーン方向の振動周期の特性を示す説明図である。
【図１２】この発明の実施の形態１により吸入吸気量に応じて設定されるリーン方向の振動幅の特性を示す説明図である。
【図１３】この発明の実施の形態１により振動回数に応じて設定される周期補正係数および振動幅補正係数をテーブルで示す説明図である。
【図１４】図２内の平均空燃比振動手段の動作を補足説明するためのタイミングチャートである。
【図１５】この発明の実施の形態１により振動回数に応じて設定される周期補正係数および振動幅補正係数の他の例をテーブルで示す説明図である。
【図１６】図１５の周期補正係数および振動幅補正係数に基づく平均空燃比振動手段の動作を補足説明するためのタイミングチャートである。
【図１７】図２内の平均空燃比振動手段の動作を補足説明するためのタイミングチャートである。
【図１８】図２内の平均空燃比振動手段による制御定数の設定演算処理を示すフローチャートである。
【図１９】図２内の最大酸素吸蔵量演算手段による演算処理動作を示すフローチャートである。
【図２０】この発明の実施の形態１により触媒温度に応じて設定される温度補正係数の１次元マップを示す説明図である。
【図２１】この発明の実施の形態１により触媒劣化度に応じて設定される劣化補正係数の１次元マップを示す説明図である。
【図２２】図２内の最大酸素吸蔵量演算手段による触媒劣化度の演算処理動作を示すフローチャートである。
【図２３】図２内の触媒劣化診断手段の動作を補足説明するためのタイミングチャートである。
【図２４】図２内の触媒劣化診断手段の演算処理動作を示すフローチャートである。
【図２５】図２内の触媒劣化診断手段の動作を補足説明するためのタイミングチャートである。
【図２６】図２内の第２の空燃比フィードバック制御手段による演算処理動作を示すフローチャートである。
【図２７】この発明の実施の形態１により偏差に応じて設定される目標平均空燃比の積分演算用の更新量の１次元マップを示す説明図である。
【図２８】この発明の実施の形態２に係る平均空燃比振動手段の演算処理動作を示すフローチャートである。
【図２９】この発明の実施の形態２により吸入吸気量に応じて設定されるリッチ方向の推定酸素吸蔵量の設定値を示す説明図である。
【図３０】この発明の実施の形態２により吸入吸気量に応じて設定されるリーン方向の推定酸素吸蔵量の設定値を示す説明図である。
【図３１】この発明の実施の形態２における推定酸素吸蔵量の振動幅を示すタイミングチャートである。
【図３２】この発明の実施の形態１、２による正常触媒時の処理動作を示すタイミングチャートである。
【図３３】この発明の実施の形態１、２による触媒劣化時の処理動作を示すタイミングチャートである。
【図３４】従来の内燃機関の空燃比制御装置による正常触媒時の処理動作を示すタイミングチャートである。
【図３５】従来の内燃機関の空燃比制御装置による触媒劣化時の処理動作を示すタイミングチャートである。
【符号の説明】
【０３５５】
１  機関本体（内燃機関）、２  吸気通路、３  エアフローセンサ、５、６  クランク角センサ、７  燃料噴射弁、９  水温センサ、１０  制御回路、１１  排気マニホールド、１２  触媒、１３  上流側Ｏ２センサ（上流側空燃比センサ）、１４  排気管、１５  下流側Ｏ２センサ（下流側空燃比センサ）、１０３  ＣＰＵ、１０６  バックアップＲＡＭ、２０１  第１の空燃比フィードバック制御手段、２０２  第２の空燃比フィードバック制御手段、２０３  平均空燃比振動手段、２０４  最大酸素吸蔵量演算手段、２０５  触媒劣化診断手段、２０６  制御ゲイン変更手段、ＡＦＡＶＥｏｂｊ  目標平均空燃比、ＤＡＦ  平均空燃比の振動幅、ＯＳＣ  酸素吸蔵量（推定酸素吸蔵量）、ＯＳＣｍａｘ  最大酸素吸蔵量、ΔＯＳＣ  酸素吸蔵量の振動幅、Ｖ１  上流側Ｏ２センサの出力値、Ｖ２  下流側Ｏ２センサの出力値。
【図１】
2008157132.tif 000003
【図２】
2008157132.tif 000004
【図３】
2008157132.tif 000005
【図４】
2008157132.tif 000006
【図５】
2008157132.tif 000007
【図６】
2008157132.tif 000008
【図７】
2008157132.tif 000009
【図８】
2008157132.tif 000010
【図９】
2008157132.tif 000011
【図１０】
2008157132.tif 000012
【図１１】
2008157132.tif 000013
【図１２】
2008157132.tif 000014
【図１３】
2008157132.tif 000015
【図１４】
2008157132.tif 000016
【図１５】
2008157132.tif 000017
【図１６】
2008157132.tif 000018
【図１７】
2008157132.tif 000019
【図１８】
2008157132.tif 000020
【図１９】
2008157132.tif 000021
【図２０】
2008157132.tif 000022
【図２１】
2008157132.tif 000023
【図２２】
2008157132.tif 000024
【図２３】
2008157132.tif 000025
【図２４】
2008157132.tif 000026
【図２５】
2008157132.tif 000027
【図２６】
2008157132.tif 000028
【図２７】
2008157132.tif 000029
【図２８】
2008157132.tif 000030
【図２９】
2008157132.tif 000031
【図３０】
2008157132.tif 000032
【図３１】
2008157132.tif 000033
【図３２】
2008157132.tif 000034
【図３３】
2008157132.tif 000035
【図３４】
2008157132.tif 000036
【図３５】
2008157132.tif 000037