(57)【特許請求の範囲】
【請求項１】
内燃機関の排気通路に直列に介装された複数の触媒と、
前記複数の触媒の各酸素吸蔵能力を表す値を取得する酸素吸蔵能力取得手段と、
前記取得された酸素吸蔵能力を表す値に基づいて所定の酸素吸蔵能力よりも大きい酸素吸蔵能力を有すると判定される触媒のうち前記排気通路の最も上流に介装された触媒の排気浄化の状態を表す値を取得する排気浄化状態取得手段と、
前記取得された排気浄化の状態を表す値が所定の値となるように前記最も上流に配設された触媒に流入するガスの空燃比を制御する空燃比制御手段と、
を備えた内燃機関の排気浄化装置。
【請求項２】
内燃機関の排気通路に介装された単数又は複数の触媒からなる触媒装置と、
前記触媒装置を同触媒装置に流入するガスの流れ方向に沿って複数のブロックに仮想的に分割したときの各ブロックの最大酸素吸蔵量を取得する取得手段と、
値ｎを自然数とするとき前記触媒装置の最上流のブロックである第１番目のブロックから第ｎ番目のブロックまでのブロックにより構成される第ｎ触媒装置上流部の最大酸素吸蔵量積算値を同第１番目のブロックから同第ｎ番目のブロックまでの各ブロックの前記最大酸素吸蔵量を積算することにより求めるとともに、その求めた第ｎ触媒装置上流部の最大酸素吸蔵量積算値が所定の閾値より大きいか否かを判定するステップを、値ｎを１から次第に増大させながら繰り返し実行する手段と、
前記最大酸素吸蔵量積算値が所定の閾値より大きいと最初に判定されたときの値ｎが値ｋであるとき、第１番目のブロックから第ｋ番目のブロックまでのブロックにより構成される第ｋ触媒装置上流部の排気浄化の状態を表す値又は同第ｋ番目のブロックの排気浄化の状態を表す値を取得する排気浄化状態取得手段と、
前記取得された排気浄化の状態を表す値が所定の値となるように前記触媒装置に流入するガスの空燃比を制御する空燃比制御手段と、
を備えた内燃機関の排気浄化装置。
【請求項３】
請求項２に記載の内燃機関の排気浄化装置において、
前記排気浄化状態取得手段は、前記第ｋ触媒装置上流部の酸素吸蔵量、又は、前記第ｋ触媒装置上流部の第ｋ番目のブロックから流出する特定成分の量に応じた値を前記排気浄化の状態を表す値として取得するように構成された内燃機関の排気浄化装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は排気通路に三元触媒を介装した内燃機関の排気浄化装置に関する。
【０００２】
【従来の技術】
従来より、内燃機関の始動直後の排気浄化性能を確保するとするとともに、完全暖機後の排気浄化性能を一層向上するため、機関の排気通路にスタート・コンバータと云われる三元触媒（以下、「第１触媒」と称呼する。）を配設するともに、第１触媒よりも下流の排気通路にアンダ・フロア・コンバータと云われる三元触媒（以下、「第２触媒」と称呼する。）を配設する構成が採用されることがある。この場合、第１触媒は第２触媒に比べて機関の排気ポートに近い位置に配設され、温度の高い排ガスが流入するから、始動から短期間内に暖機されて良好な排気浄化機能を発揮する。一方、第２触媒は、第１触媒よりも暖機に要する時間が長いが、一旦暖機した後においては第１触媒と協働して優れた排気浄化機能を発揮する。
【０００３】
このように第１触媒と第２触媒とを内燃機関の排気通路に直列に配設した従来の排気浄化装置は、機関と第１触媒の間、第１触媒と第２触媒の間、及び第２触媒の下流にそれぞれ空燃比センサ（酸素濃度センサ）を配設し、第２触媒下流の空燃比センサが非活性状態にある場合、機関と第１触媒の間の空燃比センサ及び第１触媒と第２触媒の間の空燃比センサの出力に基づいて機関に供給される混合気の空燃比を制御するとともに、第２触媒下流の空燃比センサが活性状態にある場合、機関と第１触媒の間の空燃比センサ及び第２触媒下流の空燃比センサの出力に基づいて機関に供給される混合気の空燃比を制御するようになっている（例えば、特許文献１参照。）。
【０００４】
【特許文献１】
特開平６−２９４３４２号公報（第５−第６頁、図４−図６）
【０００５】
【発明が解決しようとする課題】
ところで、三元触媒（以下、単に「触媒」とも称呼する。）は、同触媒に流入する内燃機関の排ガスの空燃比が略理論空燃比のとき、排ガス中の未燃成分（ＨＣ,ＣＯ）を酸化し、同時に窒素酸化物（ＮＯｘ）を還元する機能（以下、「触媒機能」又は「酸化還元機能」と云う。）により排ガスを浄化する。また、触媒は、酸素を吸蔵（貯蔵）する酸素吸蔵機能（Ｏ2ストレージ機能）を有していて、流入する排ガスの空燃比がリッチである場合には吸蔵している酸素により未燃ＨＣ,ＣＯ等の未燃成分を酸化する（酸素を放出する）とともに、流入する排ガスの空燃比がリーンである場合には排ガス中の酸素及びＮＯｘを還元することで得られる酸素を内部に吸蔵する。これにより、触媒は、機関に供給される混合気の空燃比が理論空燃比からある程度まで偏移した場合でも、未燃ＨＣ,ＣＯやＮＯｘを効果的に浄化することができる。
【０００６】
このように、触媒は酸素吸蔵機能を有しているから、触媒上流の排ガスの空燃比がリッチに変化したとしても同触媒内に吸蔵されている酸素が総べて消費されるまで同触媒下流に酸素が殆ど流出してこないため、同触媒の下流に設けられた空燃比センサの出力は略理論空燃比又はリーン空燃比相当の出力を発生し続ける。同様に、触媒上流の排ガスの空燃比がリーンに変化したとしても同触媒内に吸蔵される酸素量（以下、「酸素吸蔵量」と称呼する。）が同触媒に吸蔵され得る酸素の最大量（以下、「最大酸素吸蔵量」と称呼する。）に到達するまで同触媒下流に未燃ＨＣ,ＣＯが殆ど流出してこないので、同触媒の下流に設けられた空燃比センサの出力は略理論空燃比又はリッチ空燃比相当の出力を発生し続ける。
【０００７】
即ち、触媒上流の排ガスの空燃比の変動が同触媒の下流に設けられた空燃比センサの出力に直ちに現れることはなく、触媒下流の空燃比センサの出力は触媒に流入した排ガスの空燃比の平均値（以下、「中心空燃比」と称呼する。）に応じた値となる。従って、触媒下流の空燃比センサ出力が所定の目標出力（例えば、理論空燃比相当の出力）に一致するように機関に供給される混合気の空燃比を制御することにより、触媒に流入する排ガスの中心空燃比を所望の値（例えば、理論空燃比）に制御することが可能となる。
【０００８】
しかしながら、例えば、触媒が劣化する等の理由により、同触媒の最大酸素吸蔵量がある程度まで小さくなると、酸素吸蔵量が「０」又は最大酸素吸蔵量に比較的短時間内に到達するため、触媒上流の排ガスの空燃比の変動が触媒下流の空燃比センサの出力に直ちに現れるようになる。従って、このような場合に上述した空燃比フィードバック制御を行うと、触媒上流の排ガスの空燃比が大きく変動（ハンチング）することになり、その結果、同触媒に流入する排ガスの中心空燃比を所望の値に制御できず、排気浄化性能が低下するという問題がある。
【０００９】
このことから明らかなように、上記従来の装置は、空燃比センサの活性状態にのみ着目して使用する空燃比センサを選択し、触媒の最大酸素吸蔵量（即ち、酸素吸蔵能力）に着目した空燃比センサの選択を行っていないので、第１触媒が劣化した場合等において同第１触媒上流に流入する排ガスの中心空燃比が理論空燃比から偏移し、その結果、浄化性能が低下する可能性がある。従って、本発明の目的は、触媒の酸素吸蔵能力を考慮した制御を行うことにより、触媒上流の排ガスの空燃比が大きく変動してしまうというフィードバック制御の破綻を回避し、未燃成分や窒素酸化物等の有害成分をより効果的に浄化し得る内燃機関の排気浄化装置を提供することにある。
【００２０】
【発明の概要】
触媒を有効に機能させるためには、空燃比センサの出力を目標出力に一致させるように空燃比のフィードバック制御を行う他、触媒の排気浄化の状態を表す値（例えば、酸素吸蔵量や触媒から流出する特定成分の量）を取得して同排気浄化の状態を表す値を所定の値に一致させるように空燃比のフィードバック制御を行うことが有効である。また、このような触媒の排気浄化の状態を表す値に基づくフィードバック制御を行う場合においても、空燃比のハンチングを回避するためには、排気浄化の状態を表す値を取得する触媒又は同触媒と同触媒よりも上流側に介装された触媒からなる触媒装置が所定の閾値以上の酸素吸蔵能力を有していることが必要である。
【００２１】
このような観点に基づき、本発明による他の排気浄化装置は、内燃機関の排気通路に直列に介装された複数の触媒と、前記複数の触媒の各酸素吸蔵能力を表す値を取得する酸素吸蔵能力取得手段と、前記取得された酸素吸蔵能力を表す値に基づいて所定の酸素吸蔵能力よりも大きい酸素吸蔵能力を有すると判定される触媒のうち前記排気通路の最も上流に介装された触媒の排気浄化の状態を表す値を取得する排気浄化状態取得手段と、前記取得された排気浄化の状態を表す値が所定の値となるように前記最も上流に配設された触媒に流入するガスの空燃比を制御する空燃比制御手段と、を備える。ここで、「前記最も上流に配設された触媒に流入するガスの空燃比を制御する」ことには、その触媒（最も上流に配設された触媒）、同触媒より上流の触媒、又は排気通路の最も上流に配設された触媒に流入するガスの空燃比を制御することを含む。
【００２２】
これによれば、排気浄化の状態を表す値は、取得された酸素吸蔵能力を表す値に基づいて所定の酸素吸蔵能力よりも大きい酸素吸蔵能力を有すると判定される触媒のうち前記排気通路の最も上流に介装された触媒の排気浄化の状態を表す値となるから、同最も上流の触媒に流入するガスの空燃比の変動が同排気浄化の状態を表す値に直ちに現れることはない。従って、上述した空燃比のハンチングが回避され、その結果、未燃成分や窒素酸化物等の有害成分の排出量の増大を回避することができる。
【００３４】
本発明による他の内燃機関の排気浄化装置は、内燃機関の排気通路に介装された単数又は複数の触媒からなる触媒装置と、前記触媒装置を同触媒装置に流入するガスの流れ方向に沿って複数のブロックに仮想的に分割したときの各ブロックの最大酸素吸蔵量を取得する取得手段と、値ｎを自然数とするとき前記触媒装置の最上流のブロックである第１番目のブロックから第ｎ番目のブロックまでのブロックにより構成される第ｎ触媒装置上流部の最大酸素吸蔵量積算値を同第１番目のブロックから同第ｎ番目のブロックまでの各ブロックの前記最大酸素吸蔵量を積算することにより求めるとともに、その求めた第ｎ触媒装置上流部の最大酸素吸蔵量積算値が所定の閾値より大きいか否かを判定するステップを、値ｎを１から次第に増大させながら繰り返し実行する手段と、前記最大酸素吸蔵量積算値が所定の閾値より大きいと最初に判定されたときの値ｎが値ｋであるとき、第１番目のブロックから第ｋ番目のブロックまでのブロックにより構成される第ｋ触媒装置上流部の排気浄化の状態を表す値又は同第ｋ番目のブロックの排気浄化の状態を表す値を取得する排気浄化状態取得手段と、前記取得された排気浄化の状態を表す値が所定の値となるように前記触媒装置に流入するガスの空燃比を制御する空燃比制御手段と、を備える。
【００３５】
この排気浄化装置は、単数又は複数の触媒からなる触媒装置をガス（排ガス）の流れ方向に沿って複数のブロックに仮想的に分割したときの各ブロックの最大酸素吸蔵量を求め、最上流のブロック（即ち、第１番目のブロック）から第ｎ番目（ｎは自然数）のブロックまでの各ブロックの最大酸素吸蔵量を積算する。そして、ｎを１から増大して行き、その最大酸素吸蔵量の積算値が所定の閾値より初めて大きくなったときのｎの値をｋとすると、ｋ個のブロック（つまり、所定の閾値以上の最大酸素吸蔵量を確保できるブロック群）からなる触媒装置上流部（第ｋ触媒装置上流部）の排気浄化の状態（例えば、酸素吸蔵量）や同第ｋ番目のブロックの排気浄化の状態を表す値（例えば、同第ｋ番目のブロックから流出する特定成分の量に応じた値）を制御対象とし、同制御対象が所定の値となるように前記触媒装置に流入するガスの空燃比を制御する。
【００３６】
この結果、常に所定の酸素吸蔵能力（所定の閾値以上の最大酸素吸蔵量）を有している触媒装置上流部（第ｋ触媒装置上流部）を介して空燃比のフィードバック制御が行われることとなるので、前記排気浄化の状態をハンチングを回避しながら所望の値に安定して制御することが可能となり、その結果、排ガスを効果的に浄化することができる。なお、前記所定の値は、値ｋに応じて変化する値（例えば、前記取得される排気浄化の状態が酸素吸蔵量である場合、第１番目〜第ｋ番目のブロックで構成される触媒装置上流部の最大酸素吸蔵量の略半分程度の値）であってもよく、一定値（例えば、前記取得される排気浄化の状態が第ｋ番目のブロックから流出する特定成分の量に応じた値である場合「０」又は略「０」）であってもよい。
【００３７】
この場合、排気浄化の状態を表す値を取得する排気浄化状態取得手段は、前記第ｋ触媒装置上流部（第１番目から第ｋ番目のブロックまでからなる触媒装置上流部）の酸素吸蔵量、又は、前記第ｋ触媒装置上流部の第ｋ番目のブロックから流出する特定成分の量に応じた値を前記排気浄化の状態を表す値として取得するように構成されることが好適である。
【００３８】
これによれば、前記第ｋ触媒装置上流部の酸素吸蔵量や同第ｋ触媒装置上流部の最下流のブロックである第ｋ番目のブロックから流出する特定成分の量を空燃比のハンチングを招くことなく安定して所望の値に制御できるので、効果的に排ガスを浄化することができる。
【００３９】
【発明の実施の形態】
＜第１実施形態＞
以下、本発明による内燃機関の排気浄化装置の各実施形態について図面を参照しながら説明する。図１は、本発明の第１実施形態に係る内燃機関の排気浄化装置を火花点火式多気筒（４気筒）内燃機関１０に適用したシステムの概略構成を示している。なお、図１においては、一つの気筒の断面が示されているが、他の気筒も同様の構成を備えている。
【００４０】
この内燃機関１０は、シリンダブロック、シリンダブロックロワーケース、及びオイルパン等を含むシリンダブロック部２０と、シリンダブロック部２０の上に固定されるシリンダヘッド部３０と、シリンダブロック部２０にガソリン混合気を供給するための吸気系統４０と、シリンダブロック部２０からの排ガスを外部に放出するための排気系統５０とを含んでいる。
【００４１】
シリンダブロック部２０は、シリンダ２１、ピストン２２、コンロッド２３、及びクランク軸２４を含んでいる。ピストン２２はシリンダ２１内を往復動し、ピストン２２の往復動がコンロッド２３を介してクランク軸２４に伝達され、これにより同クランク軸２４が回転するようになっている。シリンダ２１とピストン２２のヘッドは、シリンダヘッド部３０とともに燃焼室２５を形成している。
【００４２】
シリンダヘッド部３０は、燃焼室２５に連通した吸気ポート３１、吸気ポート３１を開閉する吸気弁３２、吸気弁３２を駆動するインテークカムシャフトを含むとともに同インテークカムシャフトの位相角を連続的に変更する可変吸気タイミング装置３３、可変吸気タイミング装置３３のアクチュエータ３３ａ、燃焼室２５に連通した排気ポート３４、排気ポート３４を開閉する排気弁３５、排気弁３５を駆動するエキゾーストカムシャフト３６、点火プラグ３７、点火プラグ３７に与える高電圧を発生するイグニッションコイルを含むイグナイタ３８、及び燃料を吸気ポート３１内に噴射するインジェクタ（燃料噴射手段）３９を備えている。
【００４３】
吸気系統４０は、吸気ポート３１に連通し同吸気ポート３１とともに吸気通路を形成するインテークマニホールドを含む吸気管４１、吸気管４１の端部に設けられたエアフィルタ４２、吸気管４１内にあって吸気通路の開口断面積を可変とするスロットル弁４３、及びスロットル弁駆動手段を構成するＤＣモータからなるスロットル弁アクチュエータ４３ａを備えている。
【００４４】
排気系統５０は、排気ポート３４に連通したエキゾーストマニホールド５１、エキゾーストマニホールド５１に接続されたエキゾーストパイプ（排気管）５２、エキゾーストパイプ５２に配設（介装）された第１触媒（最上流三元触媒、又はスタート・コンバータとも云う。）５３、第１触媒５３の下流のエキゾーストパイプ５２に配設（介装）された第２触媒（中間三元触媒、又は、車両のフロア下方に配設されるため、第１アンダ・フロア・コンバータとも云う。）５４、及び第２触媒５４の下流のエキゾーストパイプ５２に配設（介装）された第３触媒（最下流三元触媒、又は、第２アンダ・フロア・コンバータとも云う。）５５を備えている。排気ポート３４、エキゾーストマニホールド５１、及びエキゾーストパイプ５２は、排気通路を構成している。
【００４５】
一方、このシステムは、熱線式エアフローメータ６１、スロットルポジションセンサ６２、カムポジションセンサ６３、クランクポジションセンサ６４、水温センサ６５、第１触媒５３の上流の排気通路に配設された空燃比センサ６６（以下、「最上流空燃比センサ６６」と称呼する。）、第１触媒５３の下流であって第２触媒５４の上流の排気通路に配設された空燃比センサ６７（以下、「第１触媒下流空燃比センサ６７」と称呼する。）、第２触媒５４の下流であって第３触媒の上流の排気通路に配設された空燃比センサ６８（以下、「第２触媒下流空燃比センサ６８」と称呼する。）、第３触媒５５の下流の排気通路に配設された空燃比センサ６９（以下、「第３触媒下流空燃比センサ６９」と称呼する。）、及びアクセル開度センサ８２を備えている。
【００４６】
熱線式エアフローメータ６１は、吸気管４１内を流れる吸入空気の質量流量を検出し、同質量流量Ｇａを表す信号を出力するようになっている。スロットルポジションセンサ６２は、スロットル弁４３の開度を検出し、スロットル弁開度TAを表す信号を出力するようになっている。カムポジションセンサ６３は、インテークカムシャフトが９０°回転する毎に（即ち、クランク軸２４が１８０°回転する毎に）一つのパルスを有する信号（Ｇ２信号）を発生するようになっている。クランクポジションセンサ６４は、クランク軸２４が１０°回転する毎に幅狭のパルスを有するとともに同クランク軸２４が３６０°回転する毎に幅広のパルスを有する信号を出力するようになっている。この信号は、エンジン回転速度ＮＥを表す。水温センサ６５は、内燃機関１０の冷却水の温度を検出し、冷却水温THWを表す信号を出力するようになっている。
【００４７】
最上流空燃比センサ６６は、限界電流式の酸素濃度センサであって、図２に示したように、空燃比Ａ／Ｆに応じた電圧vabyfsを出力するようになっている。図２から明らかなように、最上流空燃比センサ６６によれば、広範囲にわたる空燃比Ａ／Ｆを精度良く検出することができる。第１〜第３触媒下流空燃比センサ６７〜６９は、濃淡電池型の酸素濃度センサであって、図３に示したように、理論空燃比において急変する電圧voxs1,voxs2,voxs3をそれぞれ出力するようになっている。より具体的に述べると、第１〜第３触媒下流空燃比センサ６７〜６９のそれぞれは、排ガスの空燃比が理論空燃比よりもリーンのとき略０．１（Ｖ）、排ガスの空燃比が理論空燃比よりもリッチのとき略０．９（Ｖ）、及び排ガスの空燃比が理論空燃比のとき略０．５（Ｖ）の電圧を出力するようになっている。アクセル開度センサ８２は、運転者によって操作されるアクセルペダル８１の操作量を検出し、同アクセルペダル８１の操作量Accpを表す信号を出力するようになっている。
【００４８】
更に、このシステムは電気制御装置７０を備えている。電気制御装置７０は、互いにバスで接続されたＣＰＵ７１、ＣＰＵ７１が実行するルーチン（プログラム）、テーブル（ルックアップテーブル、マップ）、及び定数等を予め記憶したＲＯＭ７２、ＣＰＵ７１が必要に応じてデータを一時的に格納するＲＡＭ７３、電源が投入された状態でデータを格納するとともに同格納したデータを電源が遮断されている間も保持するバックアップＲＡＭ７４、並びにＡＤコンバータを含むインターフェース７５等からなるマイクロコンピュータである。インターフェース７５は、前記センサ６１〜６９，８２と接続され、ＣＰＵ７１にセンサ６１〜６９，８２からの信号を供給するとともに、同ＣＰＵ７１の指示に応じて可変吸気タイミング装置３３のアクチュエータ３３ａ、イグナイタ３８、インジェクタ３９、及びスロットル弁アクチュエータ４３ａに駆動信号を送出するようになっている。
【００４９】
（空燃比フィードバック制御の概要）
次に、上記のように構成された内燃機関の排気浄化装置が行う空燃比フィードバック制御の概要について説明する。
【００５０】
三元触媒である第１触媒５３（第２触媒５４及び第３触媒５５も同様である。）は、上述した酸素吸蔵機能を有しているから、同第１触媒５３が連続的に流入する多量のＨＣ,ＣＯを効率的に浄化するためには、同第１触媒５３が酸素を多量に貯蔵していなければならず、逆に連続的に流入する多量のＮＯｘを効率的に浄化するためには、同第１触媒５３が酸素を十分に貯蔵し得なければならないことになる。以上のことから明らかなように、第１触媒５３の浄化能力は、同第１触媒５３が貯蔵し得る最大の酸素量（最大酸素吸蔵量）、即ち、酸素吸蔵能力に依存する。
【００５１】
一方、第１触媒５３のような三元触媒は燃料中に含まれる鉛や硫黄等による被毒、或いは触媒に加わる熱により劣化し、これに伴い最大酸素吸蔵量が次第に低下してくる。このように最大酸素吸蔵量が低下した場合であっても、有害ガス成分の排出量を増大させないようにするには、第１触媒５３から排出されるガスの空燃比の平均値（第１触媒５３に流入するガスの中心空燃比）が、理論空燃比に極めて近い状態となるように制御することが好適であると考えらえる。
【００５２】
そこで、本第１実施形態の排気浄化装置は、第１触媒５３に流入する排ガスの中心空燃比が理論空燃比近傍の値となるように、第１〜第３触媒下流空燃比センサ６７〜６９の出力voxs1,vosx2,voxs3のうちの一つを後述するように制御用空燃比センサ出力voxsとして選択し、その選択された空燃比センサ出力voxsが理論空燃比に略相当する目標出力（目標値）voxrefとなるように機関に供給される混合気の空燃比をフィードバック制御する。
【００５３】
より具体的には、選択された空燃比センサ出力voxsが理論空燃比よりリーンな空燃比を表す値となると、同選択された空燃比センサ出力voxsと理論空燃比に略相当する目標出力voxrefとの偏差を比例・積分処理（ＰＩ処理）してサブフィードバック制御量vafsfbを求め、同サブフィードバック制御量vafsfb分だけ最上流空燃比センサ６６の出力vabyfsを補正し、これにより、機関に供給される混合気の空燃比が、同最上流空燃比センサ６６の検出空燃比よりも見かけ上リーン側であるように設定し、その補正した見かけ上の空燃比が目標空燃比（機関の目標空燃比、ここでは理論空燃比）となるように同混合気の空燃比をフィードバック制御する。
【００５４】
同様に、選択された空燃比センサ出力voxsが理論空燃比よりリッチの空燃比を表す値となると、選択された空燃比センサ出力voxsと理論空燃比に略相当する目標出力voxrefとの偏差を比例・積分処理（ＰＩ処理）してサブフィードバック制御量vafsfbを求め、同サブフィードバック制御量vafsfb分だけ最上流空燃比センサ６６の出力vabyfsを補正し、これにより、機関に供給される混合気の空燃比が、同最上流空燃比センサ６６の検出空燃比よりも見かけ上リッチ側であるように設定し、その補正した見かけ上の空燃比が目標空燃比（機関の目標空燃比、ここでは理論空燃比）となるように同混合気の空燃比をフィードバック制御する。以上により、第１触媒５３に流入する排ガスの中心空燃比が目標空燃比（略理論空燃比）と一致せしめられる。
【００５５】
ところで、第１触媒５３は、上述した酸素吸蔵機能を有しているから、第１触媒５３の上流の排ガスの空燃比の変動が第１触媒下流空燃比センサ出力voxs1に直ちに現れることはない。換言すると、第１触媒下流空燃比センサ出力voxs1は、第１触媒５３に流入した排ガスの空燃比の時間的平均値に応じた値となる。従って、第１触媒下流空燃比センサ出力voxs1が所定の目標出力（例えば、理論空燃比相当の出力）に一致するように機関に供給される混合気の空燃比を制御することで、第１触媒５３に流入するガスの中心空燃比を所望の値に制御することが可能となる。
【００５６】
しかしながら、第１触媒５３が劣化したり、或いは機関始動直後であって同第１触媒５３の温度が低い等の理由により、同第１触媒５３の最大酸素吸蔵量が所定の閾値より小さい場合、同第１触媒５３の上流の排ガスの空燃比の変動が第１触媒下流空燃比センサ出力voxs1に直ちに現れるようになり、このような場合にも上述した空燃比フィードバック制御を行うと、同第１触媒５３の上流の排ガスの空燃比がハンチングし、その結果、同第１触媒５３に流入する排ガスの中心空燃比が理論空燃比から偏移する場合がある。換言すると、第１触媒下流空燃比センサ出力voxs1に基づいて決定されるサブフィードバック制御量vafsfbを用いたサブフィードバック制御は、第１触媒５３の酸素吸蔵能力を示す最大酸素吸蔵量が所定の閾値より大きい場合にのみ成立する制御である。
【００５７】
そこで、本排気浄化装置は、第１触媒５３の最大酸素吸蔵量Cmax1が所定の閾値Cthより大きいときは第１触媒下流空燃比センサ６７の出力voxs1を、第１触媒５３の最大酸素吸蔵量Cmax1が所定の閾値Cthより小さく且つ第１触媒５３の最大酸素吸蔵量Cmax1と第２触媒５４の最大酸素吸蔵量Cmax2の合計値（Cmax1+Cmax2）が同所定の閾値Cthより大きいときは第２触媒下流空燃比センサ６８の出力voxs2を、また、第１触媒５３の最大酸素吸蔵量Cmax1、及び第１触媒５３の最大酸素吸蔵量Cmax1と第２触媒５４の最大酸素吸蔵量Cmax2の合計値（Cmax1+Cmax2）がそれぞれ同所定の閾値Cthより小さく、且つ、第１触媒〜第３触媒の各最大酸素吸蔵量の合計値（Cmax1+Cmax2+Cmax3）が同所定の閾値Cthより大きいときは、第３触媒下流空燃比センサ６９の出力voxs3を空燃比センサ出力voxsとして選択し、選択された制御用空燃比センサ出力voxsに基づいてサブフィードバック制御量vafsfbを求めて機関に供給される混合気の空燃比を制御する。
【００５８】
この結果、制御用空燃比センサとして選択された空燃比センサの上流に存在する単数又は複数の触媒からなる触媒装置は所定の閾値Cthより大きい最大酸素吸蔵量（酸素吸蔵能力）を備えているから、同制御用空燃比センサの出力voxsに同触媒装置の上流のガスの空燃比の変動が直ちに現れることはない。換言すると、同制御用空燃比センサの出力voxsは同触媒装置に流入するガスの中心空燃比に応じた値を示す。従って、制御用空燃比センサの出力voxsに基づく空燃比フィードバック制御により、触媒装置に流入するガスの空燃比がハンチングすることなく所定の目標空燃比に安定して制御されるので、未燃ＨＣ，ＣＯやＮＯｘの有害成分の排出量を低減することができる。
【００５９】
（第１実施形態の実際の作動）
次に、第１実施形態に係る排気浄化装置の実際の作動について説明する。
＜空燃比のフィードバック制御＞
ＣＰＵ７１は、図４にフローチャートにより示した最終燃料噴射量Ｆｉの計算及び燃料噴射の指示を行うルーチンを、各気筒のクランク角が各吸気上死点前の所定クランク角度（例えば、ＢＴＤＣ９０°ＣＡ）となる毎に、繰り返し実行するようになっている。従って、任意の気筒のクランク角度が前記所定クランク角度になると、ＣＰＵ７１はステップ４００から処理を開始してステップ４０５に進み、エアフローメータ６１により計測された吸入空気流量Ｇａとエンジン回転速度NEとに基いて、機関に供給される混合気の空燃比を理論空燃比とするための基本燃料噴射量Ｆbaseを求める。具体的には、エアフローメータ６１が計測している吸入空気流量Ｇａに一次遅れ処理を施した値をエンジン回転速度NEで除することで筒内吸入空気量Ｍｃを算出し、これを目標空燃比である理論空燃比で除する関数ｆにより基本燃料噴射量Ｆbaseを求める。
【００６０】
次いで、ＣＰＵ７１はステップ４１０に進み、基本燃料噴射量Ｆbaseに係数Ｋを乗じた値に後述する空燃比フィードバック補正量（メインフィードバック制御量）ＤＦｉを加えた値を最終燃料噴射量Ｆｉとして設定する。この係数Ｋの値は、通常は「１．００」であり、後述するように、各最大酸素吸蔵量Cmax1〜Cmax3を求めるために強制的に空燃比を変更するとき、「１．００」以外の所定値に設定される。
【００６１】
次いで、ＣＰＵ７１はステップ４１５に進み、同ステップ４１５にて同最終燃料噴射量Ｆｉの燃料を噴射するための指示をインジェクタ３９に対して行う。その後、ＣＰＵ７１はステップ４２０に進み、その時点の燃料噴射量合計量mfrに最終燃料噴射量Ｆｉを加えた値を新たな燃料噴射量積算値mfrに設定する。この燃料噴射量積算値mfrは、後述する酸素吸蔵量を算出する際に用いられる。その後、ＣＰＵ７１はステップ４９５に進み、本ルーチンを一旦終了する。以上により、フィードバック補正された最終燃料噴射量Ｆｉの燃料が吸気行程を迎える気筒に対して噴射される。なお、その時点の燃料噴射量合計量mfr1に最終燃料噴射量Ｆｉを加えた値を新たな燃料噴射量積算値mfr1に設定するステップ４２５は、後述する第２実施形態等の他の実施形態において必要となるステップであり、第１実施形態においては使用しない。
【００６２】
次に、上記メインフィードバック制御量ＤＦｉの算出について説明すると、ＣＰＵ７１は図５にフローチャートにより示したルーチンを所定時間の経過毎に繰り返し実行している。従って、所定のタイミングになると、ＣＰＵ７１はステップ５００から処理を開始し、ステップ５０５に進んで空燃比フィードバック制御条件（メインフィードバック条件）が成立しているか否かを判定する。この空燃比フィードバック制御条件は、例えば、機関の冷却水温THWが第１所定温度以上であり、機関の一回転当りの吸入空気量（負荷、筒内吸入空気量Ｍｃ）が所定値以下であり、最上流空燃比センサ６６が正常（活性状態であることを含む。）であり、且つ、後述する空燃比強制設定制御実行中フラグＸＨＡＮの値が「０」のときに成立する。なお、空燃比強制設定制御実行中フラグＸＨＡＮは、その値が「１」のとき最大酸素吸蔵量Cmax1〜Cmax3の算出のために強制的に空燃比を変更する空燃比制御（アクティブ制御）を実行していることを示し、その値が「０」のとき同最大酸素吸蔵量Cmax1〜Cmax3の算出のための空燃比制御を実行していないことを示す。
【００６３】
いま、空燃比フィードバック制御条件が成立しているものとして説明を続けると、ＣＰＵ７１はステップ５０５にて「Ｙｅｓ」と判定してステップ５１０に進み、現時点の最上流空燃比センサ６６の出力vabyfsと後述するサブフィードバック制御量vafsfbとの和（vabyfs＋vafsfb）を図２に示したマップに基いて変換することにより、現時点における第１触媒５３のメインフィードバック制御用空燃比abyfsを求める。このメインフィードバック制御用空燃比abyfsが、最上流空燃比センサ６６の出力をサブフィードバック制御量vafsfbにより補正した第１触媒５３の上流における上記「見かけ上の空燃比」である。
【００６４】
次に、ＣＰＵ７１はステップ５１５に進み、現時点からＮストローク（Ｎ回の吸気行程）前に吸気行程を迎えた気筒の吸入空気量である筒内吸入空気量Ｍｃ（ｋ−Ｎ）を前記求めたメインフィードバック制御用空燃比abyfsで除することにより、現時点からＮストローク前の筒内燃料供給量Ｆｃ（ｋ−Ｎ）を求める。値Ｎは、内燃機関の排気量、燃焼室２５から最上流空燃比センサ６６までの距離等により異なる値である。
【００６５】
このように、現時点からＮストローク前の筒内燃料供給量Ｆｃ（ｋ−Ｎ）を求めるために、現時点からＮストローク前の筒内吸入空気量Ｍｃ（ｋ−Ｎ）をメインフィードバック制御用空燃比abyfsで除するのは、燃焼室２５内で燃焼された混合気が最上流空燃比センサ６６に到達するまでには、Ｎストロークに相当する時間を要しているからである。なお、筒内吸入空気量Ｍｃは、各気筒の吸気行程に対応されながらＲＡＭ７３内に記憶されるようになっている。
【００６６】
次いで、ＣＰＵ７１はステップ５２０に進み、現時点からＮストローク前の筒内吸入空気量Ｍｃ（ｋ−Ｎ）を現時点からＮストローク前の時点における目標空燃比abyfr（ｋ−Ｎ）（この例では、理論空燃比）で除することにより、現時点からＮストローク前の目標筒内燃料供給量Ｆｃｒ（ｋ−Ｎ）を求める。そして、ＣＰＵ７１はステップ５２５に進んで目標筒内燃料供給量Ｆｃｒ（ｋ−Ｎ）から筒内燃料供給量Ｆｃ（ｋ−Ｎ）を減じた値を筒内燃料供給量偏差ＤＦｃとして設定する。つまり、筒内燃料供給量偏差ＤＦｃは、Ｎストローク前の時点で筒内に供給された燃料の過不足分を表す量となる。次に、ＣＰＵ７１はステップ５３０に進み、下記数１に基いてメインフィードバック制御量ＤＦｉを求める。
【００６７】
【数１】
ＤＦｉ＝（Ｇｐ・ＤＦｃ＋Ｇｉ・ＳＤＦｃ）・ＫＦＢ
【００６８】
上記数１において、Ｇｐは予め設定された比例ゲイン（比例定数）、Ｇｉは予め設定された積分ゲイン（積分定数）である。なお、数１の係数ＫＦＢはエンジン回転速度NE、及び筒内吸入空気量Ｍｃ等により可変とすることが好適であるが、ここでは「１」としている。また、値ＳＤＦｃは筒内燃料供給量偏差ＤＦｃの積分値であり、次のステップ５３５にて更新される。即ち、ＣＰＵ７１は、ステップ５３５にてその時点における筒内燃料供給量偏差ＤＦｃの積分値ＳＤＦｃに上記ステップ５２５にて求めた筒内燃料供給量偏差ＤＦｃを加えて、新たな筒内燃料供給量偏差の積分値ＳＤＦｃを求め、ステップ５９５にて本ルーチンを一旦終了する。
【００６９】
以上により、メインフィードバック制御量ＤＦｉが比例積分制御により求められ、このメインフィードバック制御量ＤＦｉが前述した図４のステップ４１０により燃料噴射量に反映されるので、Ｎストローク前の燃料供給量の過不足が補償され、内燃機関に供給される混合気の空燃比の平均値が目標空燃比abyfrと略一致せしめられるようにフィードバック制御される。
【００７０】
一方、ステップ５０５の判定時において、空燃比フィードバック制御条件が不成立であると、ＣＰＵ７１は同ステップ５０５にて「Ｎｏ」と判定してステップ５４０に進み、メインフィードバック制御量ＤＦｉの値を「０」に設定し、その後ステップ５９５に進んで本ルーチンを一旦終了する。このように、空燃比フィードバック制御条件が不成立であるとき（空燃比強制設定制御実行中を含む）は、メインフィードバック制御量ＤＦｉを「０」として空燃比（基本燃料噴射量Ｆbase）の補正を行わない。
【００７１】
次に、第１触媒〜第３触媒下流空燃比センサ６７〜６９のうちの何れか一つの空燃比センサ出力voxsに基く空燃比フィードバック制御（サブフィードバック制御）について説明する。このサブフィードバック制御により、サブフィードバック制御量vafsfbが算出される。
【００７２】
ＣＰＵ７１は、サブフィードバック制御量vafsfbを求めるために使用される制御用空燃比センサ出力voxsを選択する図６に示したルーチンを所定時間の経過毎に実行している。従って、所定のタイミングになると、ＣＰＵ７１はステップ６００から処理を開始し、ステップ６０５にて第１触媒５３の酸素吸蔵能力を示す同第１触媒５３の最大酸素吸蔵量Cmax1が所定の閾値Cthより大きいか否かを判定し、同ステップ６０５にて「Ｙｅｓ」と判定したときはステップ６１０に進んで制御用空燃比センサ出力voxsに第１触媒下流空燃比センサ出力voxs1を設定し（制御用空燃比センサとして第１触媒下流空燃比センサ６７を選択し）、ステップ６９５に進んで本ルーチンを一旦終了する。なお、上記最大酸素吸蔵量Cmax1,Cmax2,Cmax3は、後述するルーチンにより別途求められている。
【００７３】
一方、ＣＰＵ７１は、ステップ６０５にて「Ｎｏ」と判定したとき、ステップ６１５に進んで第１触媒５３の最大酸素吸蔵量Cmax1と第２触媒５４の最大酸素吸蔵量Cmax2の合計値（Cmax1+Cmax2）が所定の閾値Cthより大きいか否かを判定し、同ステップ６１５にて「Ｙｅｓ」と判定したときはステップ６２０に進んで制御用空燃比センサ出力voxsに第２触媒下流空燃比センサ出力voxs2を設定し（制御用空燃比センサとして第２触媒下流空燃比センサ６８を選択し）、ステップ６９５に進んで本ルーチンを一旦終了する。
【００７４】
また、ＣＰＵ７１は、ステップ６１５にて「Ｎｏ」と判定したとき、ステップ６２５に進んで第１触媒〜第３触媒の各最大酸素吸蔵量の合計値（Cmax1+Cmax2+Cmax3）が同所定の閾値Cthより大きいか否かを判定し、同ステップ６２５にて「Ｙｅｓ」と判定したときはステップ６３０に進んで制御用空燃比センサ出力voxsに第３触媒下流空燃比センサ出力voxs3を設定し（制御用空燃比センサとして第３触媒下流空燃比センサ６９を選択し）、ステップ６９５に進んで本ルーチンを一旦終了する。
【００７５】
更に、ＣＰＵ７１は、ステップ６２５にて「Ｎｏ」と判定したとき、ステップ６３５に進み、制御用空燃比センサ出力voxsにサブフィードバック制御目標出力voxrefを設定する。サブフィードバック制御は、上述したように、空燃比センサ出力voxsと目標出力voxrefとの偏差をＰＩ制御により小さくする制御であるあから、ステップ６３５の処理により、サブフィードバック制御は事実上停止された状態となる。
【００７６】
また、ＣＰＵ７１は、サブフィードバック制御量vafsfbを求めるために、図７に示したルーチンを図６に示したルーチンの実行時間間隔と同じ所定時間の経過毎に実行している。従って、所定のタイミングになると、ＣＰＵ７１はステップ７００から処理を開始し、ステップ７０５に進んでサブフィードバック制御条件が成立しているか否かを判定する。サブフィードバック制御条件は、例えば、前述したステップ５０５での空燃比フィードバック制御条件に加え、機関の冷却水温THWが前記第１所定温度よりも高い第２所定温度以上のとき、及び第１〜第３触媒下流空燃比センサ６７〜６９が正常である（活性状態であることを含む。）ときに成立する。
【００７７】
いま、サブフィードバック制御条件が成立しているものとして説明を続けると、ＣＰＵ７１はステップ７０５にて「Ｙｅｓ」と判定してステップ７１０に進み、空燃比センサの目標出力voxrefから上記選択された制御用空燃比センサ出力voxsを減じることにより、出力偏差量Ｄvoxsを求める。この目標出力voxrefは、第１触媒５３の浄化効率が良好（最良）となるように定められ、ここでは、理論空燃比に対応した一定値に設定されている。なお、この目標出力voxrefは選択されている制御用センサに応じて可変としてもよい。
【００７８】
次いで、ＣＰＵ７１はステップ７１５に進み、下記数２に基いてサブフィードバック制御量vafsfbを求める。数２における比例ゲインＫｐ、及び積分ゲインＫｉは固定値であってもよく、選択されている制御用センサに応じて可変（例えば、下流の空燃比センサが選択されるにしたがって大きくなる値）としてもよい。これは、第１触媒５３の上流位置から選択された空燃比センサまでの排気通路長さが異なること等の理由から、第１触媒５３の上流の空燃比の変動が選択された空燃比センサの出力voxsに現れるまでの制御の無駄時間が異なってくるからである。
【００７９】
【数２】
vafsfb＝Ｋｐ・Ｄvoxs＋Ｋｉ・ＳＤvoxs
【００８０】
上記数２において、ＳＤvoxsは、出力偏差量Ｄvoxsの積分値であって、次のステップ７２０にて更新される値である。即ち、ＣＰＵ７１は、ステップ７２０に進むと、その時点における出力偏差量の積分値ＳＤvoxsに上記ステップ７１０にて求めた出力偏差量Ｄvoxsを加えて、新たな出力偏差量の積分値ＳＤvoxsを求め、その後、ステップ７９５に進んで本ルーチンを一旦終了する。以上のようにして、サブフィードバック制御量vafsfbが求められる。
【００８１】
一方、サブフィードバック制御条件が不成立であるとき、ＣＰＵ７１はステップ７０５にて「Ｎｏ」と判定してステップ７２５に進み、同ステップ７２５にてサブフィードバック制御量vafsfbを「０」に設定する。これにより、選択された制御用空燃比センサ出力voxsに基くサブフィードバック制御が停止される。
【００８２】
（最大酸素吸蔵量Cmax1〜Cmax3算出のための最大酸素吸蔵量取得制御）
次に、最大酸素吸蔵量算出のために強制的に空燃比を変更する最大酸素吸蔵量取得制御について説明する。ＣＰＵ７１は図８〜図１３のフローチャートにより示された各ルーチンを所定時間の経過毎に実行するようになっている。
【００８３】
従って、所定のタイミングになると、ＣＰＵ７１は図８のステップ８００から処理を開始し、ステップ８０５に進んで最大酸素吸蔵量取得制御実行中フラグＸＨＡＮの値が「０」であるか否かを判定する。いま、最大酸素吸蔵量算出のための最大酸素吸蔵量取得制御を行っておらず、且つ、最大酸素吸蔵量取得制御開始条件が成立していないとして説明を続けると、最大酸素吸蔵量取得制御実行中フラグＸＨＡＮの値は「０」となっている。従って、ＣＰＵ７１はステップ８０５にて「Ｙｅｓ」と判定してステップ８１０に進み、先に説明した図４のステップ４１０にて使用される係数Ｋの値を１．００に設定する。
【００８４】
次いで、ＣＰＵ７１はステップ８１５にて最大酸素吸蔵量取得制御の開始条件が成立しているか否かを判定する。この最大酸素吸蔵量取得制御の開始条件は、冷却水温THWが所定温度以上であり、図示しない車速センサにより得られた車速が所定の高車速以上であり、スロットル弁開度TAの単位時間あたりの変化量が所定量以下である等の機関が定常運転されている条件が成立し、第１触媒〜第３触媒下流空燃比センサ出力voxs1,voxs2,voxs3の総べてが理論空燃比よりもリッチな空燃比に相当する出力を発生し、且つ、前回の最大酸素吸蔵量取得制御実行時点から所定時間が経過している場合等に成立する。現段階では、上述したように、最大酸素吸蔵量取得制御の開始条件は成立していないから、ＣＰＵ７１はステップ８１５にて「Ｎｏ」と判定してステップ８９５に進み、本ルーチンを一旦終了する。
【００８５】
次に、現時点では最大酸素吸蔵量取得制御を行っていないが、最大酸素吸蔵量取得制御の開始条件が成立したものとして説明を続けると、この場合、ＣＰＵ７１はステップ８０５にて「Ｙｅｓ」と判定してステップ８１０に進み、同ステップ８１０にて係数Ｋの値を１．００に設定する。次いで、ＣＰＵ７１は、開始条件が成立しているので、ステップ８１５にて「Ｙｅｓ」と判定してステップ８２０に進み、同ステップ８２０にて最大酸素吸蔵量取得制御実行中フラグＸＨＡＮの値を「１」に設定する。
【００８６】
そして、ＣＰＵ７１はステップ８２５に進み、第１モードに移行するためにModeの値を「１」に設定するとともに、続くステップ８３０にて係数Ｋの値を０．９８に設定し、ステップ８９５に進んで本ルーチンを一旦終了する。これにより、前述の空燃比フィードバック制御条件が成立しなくなるから、ＣＰＵ７１は図５のステップ５０５にて「Ｎｏ」と判定してステップ５４０に進むようになり、空燃比フィードバック補正量ＤＦｉの値は「０」に設定される。この結果、図４のステップ４１０の実行により、基本燃料噴射量Ｆbaseが０.９８倍された値が最終燃料噴射量Ｆｉとして算出され、この最終燃料噴射量Ｆｉの燃料が噴射されるので、機関に供給される混合気の空燃比（従って、第１触媒５３に流入するガスの空燃比）は理論空燃比よりもリーンな所定のリーン空燃比に制御される。
【００８７】
以降、ＣＰＵ７１は図８のルーチンの処理をステップ８００から繰り返し実行するが、最大酸素吸蔵量取得制御実行中フラグＸＨＡＮの値が「１」となっていることから、ステップ８０５にて「Ｎｏ」と判定して直ちにステップ８９５に進み、本ルーチンを一旦終了するようになる。
【００８８】
一方、ＣＰＵ７１は図９に示した第１モード制御ルーチンを所定時間の経過毎に繰り返し実行している。従って、所定のタイミングとなると、ＣＰＵ７１はステップ９００から処理を開始してステップ９０５に進み、同ステップ９０５にてModeの値が「１」であるか否かを判定する。このとき、Modeの値が「１」でなければ、ＣＰＵ７１は直ちにステップ９９５に進んで本ルーチンを一旦終了する。以下、先の図８のステップ８２５の処理によりModeの値が「１」に変更された直後であるとして説明を続けると、この場合、ＣＰＵ７１はステップ９０５にて「Ｙｅｓ」と判定してステップ９１０に進み、第１触媒下流空燃比センサ出力voxs1、第２触媒下流空燃比センサ出力voxs2、及び第３触媒下流空燃比センサ出力voxs3の総べてが理論空燃比よりもリーンな空燃比に相当する出力（酸素が過剰に存在する場合の出力）となったか否かを判定する。
【００８９】
現時点では、機関に供給される混合気の空燃比を所定のリーン空燃比に変更した直後であるから、第１触媒下流空燃比センサ出力voxs1、第２触媒下流空燃比センサ出力voxs2、及び第３触媒下流空燃比センサ出力voxs3の総べてが理論空燃比よりもリーンな空燃比に相当する出力とはなっていないので、ＣＰＵ７１はステップ９１０にて「Ｎｏ」と判定し、ステップ９９５にて本ルーチンを一旦終了する。
【００９０】
以降、ＣＰＵ７１は図９のステップ９００〜９１０を繰り返し実行する。また、空燃比は所定のリーン空燃比に維持されているから、時間経過に伴って第１触媒５３，第２触媒５４，及び第３触媒５５の順に各酸素吸蔵量が各触媒の最大酸素吸蔵量に到達する。従って、これに応じて第１触媒下流空燃比センサ出力voxs1、第２触媒下流空燃比センサ出力voxs2、及び第３触媒下流空燃比センサ出力voxs3は、順に理論空燃比よりもリーンな空燃比に相当する出力に変化する。これにより、ＣＰＵ７１はステップ９１０に進んだとき、同ステップ９１０にて「Ｙｅｓ」と判定してステップ９１５に進み、同ステップ９１５にてModeの値を「２」に設定するとともに、続くステップ９２０にて係数Ｋの値を１．０２に設定し、その後ステップ９９５にて本ルーチンを一旦終了する。この結果、機関に供給される混合気の空燃比が理論空燃比よりリッチな所定のリッチ空燃比に制御される。
【００９１】
また、ＣＰＵ７１は図１０にフローチャートにより示した第２モード制御ルーチンを所定時間の経過毎に繰り返し実行している。従って、ＣＰＵ７１は、所定のタイミングになると、ステップ１０００から処理を開始し、ステップ１００５にてModeの値が「２」であるか否かを判定し、Modeの値が「２」でなければステップ１００５からステップ１０９５に進んで本ルーチンを一旦終了するように作動している。
【００９２】
一方、先のステップ９１５の処理によりModeの値が「２」に変更されると、ＣＰＵ７１はステップ１００５に進んだとき「Ｙｅｓ」と判定してステップ１０１０に進み、同ステップ１０１０にて第１触媒下流空燃比センサ６７の出力voxs1が理論空燃比よりリーンな空燃比を示す値から同理論空燃比よりリッチな空燃比を示す値に変化したか否かを判定する。この時点では、空燃比が前記所定のリッチ空燃比に変更された直後であるから、ＣＰＵ７１はステップ１０１０にて「Ｎｏ」と判定し、ステップ１０９５に進んで本ルーチンを一旦終了する。
【００９３】
これ以降、機関に供給される混合気の空燃比は前記所定のリッチ空燃比に維持されるから、第１触媒５３に貯蔵されている酸素が消費されて行き、所定の時間が経過すると同第１触媒５３の酸素吸蔵量が「０」に至る。この結果、第１触媒５３から未燃ＨＣ，ＣＯが流出し始めるので、第１触媒下流空燃比センサ６７の出力voxs1が理論空燃比よりリーンな空燃比を示す値から同理論空燃比よりリッチな空燃比を示す値に変化する。これにより、ＣＰＵ７１は、ステップ１０１０に進んだとき同ステップ１０１０にて「Ｙｅｓ」と判定してステップ１０１５に進み、同ステップ１０１５にてModeの値を「３」に変更し、ステップ１０９５にて本ルーチンを一旦終了する。
【００９４】
同様に、ＣＰＵ７１は、所定時間の経過毎に繰り返し実行する図１１にフローチャートにより示した第３モード制御ルーチンにおいて、ステップ１１０５にてModeの値が「３」であるか否かを判定し、Modeの値が「３」でなければステップ１１０５からステップ１１９５に進んで本ルーチンを一旦終了している。
【００９５】
一方、先のステップ１０１５の処理によりModeの値が「３」に変更されると、ＣＰＵ７１はステップ１１０５に進んだとき「Ｙｅｓ」と判定してステップ１１１０に進み、同ステップ１１１０にて第２触媒下流空燃比センサ６８の出力voxs2が理論空燃比よりリーンな空燃比を示す値から同理論空燃比よりリッチな空燃比を示す値に変化したか否かを判定する。この時点では、第１触媒５３から未燃ＨＣ，ＣＯが流出し始めた直後であり、第２触媒５４からは未燃ＨＣ，ＣＯが流出してこないので、ＣＰＵ７１はステップ１１１０にて「Ｎｏ」と判定し、ステップ１１９５に進んで本ルーチンを一旦終了する。
【００９６】
その後、機関に供給される混合気の空燃比は、引き続いて前記所定のリッチ空燃比に維持されるから、第２触媒５４に貯蔵されている酸素が消費されて行き、所定の時間が経過すると同第２触媒５４の酸素吸蔵量が「０」に至る。この結果、第２触媒５４から未燃ＨＣ，ＣＯが流出し始めるので、第２触媒下流空燃比センサ６８の出力voxs2が理論空燃比よりリーンな空燃比を示す値から同理論空燃比よりリッチな空燃比を示す値に変化する。これにより、ＣＰＵ７１はステップ１１１０にて「Ｙｅｓ」と判定してステップ１１１５に進み、第４モードに移行すべくModeの値を「４」に設定し、ステップ１１９５に進む。
【００９７】
同様に、ＣＰＵ７１は、所定時間の経過毎に繰り返し実行する図１２にフローチャートにより示した第４モード制御ルーチンにおいて、ステップ１２０５にてModeの値が「４」であるか否かを判定し、Modeの値が「４」でなければステップ１２０５からステップ１２９５に進んで本ルーチンを一旦終了している。
【００９８】
一方、先のステップ１１１５の処理によりModeの値が「４」に変更されると、ＣＰＵ７１はステップ１２０５に進んだとき「Ｙｅｓ」と判定してステップ１２１０に進み、同ステップ１２１０にて第３触媒下流空燃比センサ６９の出力voxs3が理論空燃比よりリーンな空燃比を示す値から同理論空燃比よりリッチな空燃比を示す値に変化したか否かを判定する。この時点では、第２触媒５４から未燃ＨＣ，ＣＯが流出し始めた直後であり、第３触媒５５から未燃ＨＣ，ＣＯは流出してこないので、ＣＰＵ７１はステップ１２１０にて「Ｎｏ」と判定し、ステップ１２９５に進んで本ルーチンを一旦終了する。
【００９９】
その後、機関に供給される混合気の空燃比は、引き続いて前記所定のリッチ空燃比に維持されるから、第３触媒５５に貯蔵されている酸素が消費されて行き、所定の時間が経過すると同第３触媒５５の酸素吸蔵量が「０」に至る。この結果、第３触媒５５から未燃ＨＣ，ＣＯが流出し始めるので、第３触媒下流空燃比センサ６９の出力voxs3が理論空燃比よりリーンな空燃比を示す値から同理論空燃比よりリッチな空燃比を示す値に変化する。これにより、ＣＰＵ７１はステップ１２１０からステップ１２１５に進み、Modeの値を「０」に再設定し、続くステップ１２２０にて最大酸素吸蔵量取得制御実行中フラグＸＨＡＮの値を「０」に設定した後、ステップ１２９５に進んで本ルーチンを一旦終了する。
【０１００】
係る状態となると、ＣＰＵ７１は図８のルーチンを実行する際、ステップ８０５にて「Ｙｅｓ」と判定してステップ８１０に進むので、係数Ｋの値が１．００に戻される。また、空燃比フィードバック制御条件が成立していれば、ＣＰＵ７１は図５のルーチンのステップ５０５及び図７のルーチンのステップ７０５にて「Ｙｅｓ」と判定するから、空燃比フィードバック制御（メインフィードバック制御及びサブフィードバック制御）が再開される。
【０１０１】
以上、説明したように、最大酸素吸蔵量取得制御の開始条件が成立すると、機関に供給される混合気の空燃比が所定のリーン空燃比、所定のリッチ空燃比の順に１回づつ強制的に制御される。
【０１０２】
次に、最大酸素吸蔵量取得のための酸素吸蔵量の算出における作動について説明する。ＣＰＵ７１は図１３のフローチャートにより示されたルーチンを所定時間（演算周期tsample）の経過毎に実行するようになっている。従って、所定のタイミングになると、ＣＰＵ７１はステップ１３００から処理を開始し、ステップ１３０５に進んで下記数３により酸素吸蔵量変化量ΔO2を求める。
【０１０３】
【数３】
ΔO2＝０．２３・mfr・（stoich − abyfsave）
【０１０４】
上記数３において、値「０．２３」は大気中に含まれる酸素の重量割合である。mfrは所定時間tsample内の燃料噴射量Ｆｉの合計量であり、stoichは理論空燃比（例えば、１４．７）である。abyfsaveは所定時間tsampleにおいて最上流空燃比センサ６６により検出された空燃比Ａ／Ｆの平均値である。この数３に示したように、所定時間tsample内の噴射量の合計量mfrに、検出された空燃比Ａ／Ｆの平均値の理論空燃比からの偏移（stoich − abyfsave）を乗じることで、同所定時間tsampleにおける空気の消費量（不足量）が求められる。この空気の消費量に酸素の重量割合を乗じることで同所定時間tsampleにおける酸素の消費量（酸素吸蔵量変化量ΔO2）が求められる。
【０１０５】
次いで、ＣＰＵ７１はステップ１３１０に進んでModeの値が「２」であるか否か（第２モードであるか否か）を判定し、Modeの値が「２」であれば同ステップ１３１０にて「Ｙｅｓ」と判定してステップ１３１５に進み、その時点の酸素吸蔵量ＯＳＡ１に上記酸素吸蔵量変化量ΔO2を加えた値を新たな酸素吸蔵量ＯＳＡ１として設定し、その後ステップ１３４０に進む。
【０１０６】
このような処置（ステップ１３００〜１３１５）は、Modeの値が「２」である限り繰り返し実行される。この結果、第１触媒５３の上流の空燃比が所定のリッチ空燃比とされる第２モード（Mode=2）において、第１触媒５３の酸素吸蔵量ＯＳＡ１が算出されて行く。第２モードにおいては、第１触媒５３に貯蔵されている酸素が消費されて行くからである。なお、ステップ１３１０での判定において「Ｎｏ」と判定される場合、ＣＰＵ７１は同ステップ１３１０からステップ１３２０に直接進む。
【０１０７】
ＣＰＵ７１は、ステップ１３２０に進んだ場合、Modeの値が「３」であるか否か（第３モードであるか否か）を判定し、Modeの値が「３」であれば同ステップ１３２０にて「Ｙｅｓ」と判定してステップ１３２５に進み、その時点の酸素吸蔵量ＯＳＡ２に上記酸素吸蔵量変化量ΔO2を加えた値を新たな酸素吸蔵量ＯＳＡ２として設定し、その後ステップ１３４０に進む。
【０１０８】
このような処置（ステップ１３００，１３０５，１３１０，１３２０，１３２５）は、Modeの値が「３」である限り繰り返し実行される。この結果、第１触媒５３の上流の空燃比が所定のリッチ空燃比とされる第３モード（Mode=3）において、第２触媒５４の酸素吸蔵量ＯＳＡ２が算出されて行く。第３モードにおいては、第２触媒５４に貯蔵されている酸素が消費されて行くからである。
【０１０９】
また、ステップ１３２０での判定において「Ｎｏ」と判定される場合、ＣＰＵ７１は同ステップ１３２０からステップ１３３０に進み、Modeの値が「４」であるか否か（第４モードであるか否か）を判定し、Modeの値が「４」であればステップ１３３５に進んでその時点の酸素吸蔵量ＯＳＡ３に上記酸素吸蔵量変化量ΔO2を加えた値を新たな酸素吸蔵量ＯＳＡ３として設定し、その後ステップ１３４０に進む。
【０１１０】
このような処置（ステップ１３００，１３０５，１３１０，１３２０，１３３０，１３３５）は、Modeの値が「４」である限り繰り返し実行される。この結果、第１触媒５３の上流の空燃比が所定のリッチ空燃比とされる第４モード（Mode=4）において、第３触媒５５の酸素吸蔵量ＯＳＡ３が算出されて行く。第４モードにおいては、第３触媒５５に貯蔵されている酸素が消費されて行くからである。なお、ステップ１３３０での判定において「Ｎｏ」と判定される場合、ＣＰＵ７１は同ステップ１３３０からステップ１３４０に直接進む。
【０１１１】
そして、ＣＰＵ７１は、ステップ１３４０に進むと、燃料噴射量Ｆｉの合計量mfrを「０」に設定し、その後ステップ１３９５に進んで本ルーチンを一旦終了する。
【０１１２】
次に、最大酸素吸蔵量算出における作動について説明する。ＣＰＵ７１は図１４のフローチャートにより示されたルーチンを所定時間の経過毎に実行するようになっている。従って、所定のタイミングになると、ＣＰＵ７１は図１４のステップ１４００から処理を開始し、ステップ１４０５に進んで最大酸素吸蔵量取得制御実行中フラグＸＨＡＮの値が「１」から「０」に変化したか否かを判定する。このとき、最大酸素吸蔵量取得制御実行中フラグＸＨＡＮの値が「１」から「０」に変化していなければ、ＣＰＵ７１はステップ１４０５からステップ１４９５に直接進んで本ルーチンを一旦終了する。
【０１１３】
一方、先に説明した図１２のステップ１２２０にて最大酸素吸蔵量取得制御実行中フラグＸＨＡＮの値が「０」に変更された直後（即ち、第４モードが終了した直後）であると、ＣＰＵ７１はステップ１４０５に進んだとき、同ステップ１４０５にて「Ｙｅｓ」と判定してステップ１４１０に進み、その時点の酸素吸蔵量ＯＳＡ１〜ＯＳＡ３を、第１〜第３触媒５３〜５５の最大酸素吸蔵量Cmax1〜Cmax3としてそれぞれ格納する。次いで、ＣＰＵ７１は、ステップ１４１５に進んで酸素吸蔵量ＯＳＡ１〜ＯＳＡ３を総べて「０」にクリアし、ステップ１４９５に進んで本ルーチンを一旦終了する。このようにして、最大酸素吸蔵量Cmax1〜Cmax3が取得される。
【０１１４】
以上、説明したように、第１実施形態に係る排気浄化装置は、内燃機関の排気通路に直列に介装された複数の触媒（第１触媒５３、第２触媒５４、第３触媒５５）と、前記複数の触媒のそれぞれの下流であって前記排気通路に配設された複数の空燃比センサ（第１触媒下流空燃比センサ６７、第２触媒下流空燃比センサ６８、第３触媒下流空燃比センサ６９）とを備える。
【０１１５】
また、この排気浄化装置は、値ｎを自然数とするとき前記複数の触媒のうちの最上流の触媒である第１番目の触媒（第１触媒５３）から第ｎ番目の触媒までで構成される触媒装置（即ち、第１触媒５３のみからなる触媒装置、第１触媒５３と第２触媒５４とからなる触媒装置、及び第１触媒〜第３触媒５３〜５５の３個の触媒からなる触媒装置）の酸素吸蔵能力を表す値（第１触媒５３の最大酸素吸蔵量Cmax1、第１触媒５３の最大酸素吸蔵量Cmax1と第２触媒５４の最大酸素吸蔵量Cmax2の和Cmax1+Cmax2、第１触媒５３，第２触媒５４，及び第３触媒５５の各最大酸素吸蔵量の和Cmax1+Cmax2+Cmax3）を取得する酸素吸蔵能力取得手段（図８〜図１４に示したルーチン、及び図６のステップ６０５、６１５、及び６２５）を備える。
【０１１６】
更に、この排気浄化装置は、前記取得された酸素吸蔵能力を表す値に基づいて所定の酸素吸蔵能力よりも大きい酸素吸蔵能力を有すると判定される（最大酸素吸蔵量Cmax1、Cmax1+Cmax2、Cmax1+Cmax2+Cmax3の何れかが閾値Cthより大きい）前記触媒装置のうち前記値ｎが最も小さい触媒装置を構成する第ｎ番目の触媒（排気通路の最上流に介装された触媒を第１番目の触媒としたとき、同第１番目の触媒から下流に向けて数えて第ｎ番目の触媒）の下流（下流であって、第ｎ＋１番目の触媒が存在するときは同第ｎ＋１番目の触媒の上流の排気通路）に配設された前記複数の空燃比センサ６７〜６９のうちの一つの空燃比センサの出力が所定の目標出力となるように前記第１触媒５３に流入するガスの空燃比（実際には機関に供給される混合気の空燃比である。以下、同じ。）を制御する空燃比制御手段（図６に示した制御用空燃比センサ（出力）決定・選択ルーチンと、図４、図５、及び図７に示したルーチンにより達成される空燃比のフィードバック制御ルーチン（メインフィードバック制御とサブフィードバック制御））とを備える。
【０１１７】
従って、係る排気浄化装置においては、空燃比のフィードバック制御に使用される空燃比センサの上流に存在する触媒装置が、同フィードバック制御の破綻を来さない程度に大きい酸素吸蔵能力（最大酸素吸蔵量）を備えていることになるから、空燃比のハンチングが回避され、その結果、未燃成分や窒素酸化物等の有害成分の排出量の増大を回避することができる。
【０１１８】
なお、図６に示したルーチンでは、酸素吸蔵能力を示す値である第１触媒５３の最大酸素吸蔵量Cmax1、第１触媒５３と第２触媒５４の最大酸素吸蔵量の合計値（Cmax1+Cmax2）、及び第１触媒〜第３触媒５３〜５５の各最大酸素吸蔵量の合計値（Cmax1+Cmax2+Cmax3）に基づいて制御用空燃比センサ出力voxsを選択していたが、同酸素吸蔵能力を間接的に示す値（対象としている触媒又は触媒装置の最大酸素吸蔵量と一定の相関を有する値）である、車両の走行距離、各触媒の温度、及び吸入空気流量Ｇａ等に基づいて制御用空燃比センサ出力voxsを選択してもよい。
【０１１９】
この場合、走行距離が第１走行距離より短い場合には第１触媒下流空燃比センサ出力voxs1を、同走行距離が第１走行距離より長く且つ同第１走行距離より長い第２走行距離より短い場合には第２触媒下流空燃比センサ出力voxs2を、同走行距離が第２走行距離より長い場合には第３触媒下流空燃比センサ出力voxs3を、制御用空燃比センサ出力voxsとして選択するように構成することが好適である。走行距離の増大に伴って各触媒が劣化し、その最大酸素吸蔵量が低下するからである。
【０１２０】
また、触媒温度により制御用空燃比センサ出力voxsを選択する場合、第１触媒５３の温度（第１触媒温度）が第１の閾値温度より高い場合には第１触媒下流空燃比センサ出力voxs1を、同第１触媒温度が第１の閾値温度より低く同第１の閾値温度より低い第２の閾値温度より高い場合には第２触媒下流空燃比センサ出力voxs2を、同第１触媒温度が第２の閾値温度より低い場合には第３触媒下流空燃比センサ出力voxs3を、制御用空燃比センサ出力voxsとして選択するように構成することが好適である。第１触媒５３の温度の低下（従って、第２触媒５４及び第３触媒５５の温度の低下）に伴って、各触媒の最大酸素吸蔵能力が低下するからである。
【０１２１】
また、吸入空気流量Ｇａにより制御用空燃比センサ出力voxsを選択する場合、吸入空気流量Ｇａが第１の閾値流量より小さい場合には第１触媒下流空燃比センサ出力voxs1を、同吸入空気流量Ｇａが第１の閾値流量より大きく同第１の閾値流量より大きい第２の閾値流量より小さい場合には第２触媒下流空燃比センサ出力voxs2を、同吸入空気流量Ｇａが第２の閾値流量より大きい場合には第３触媒下流空燃比センサ出力voxs3を、制御用空燃比センサ出力voxsとして選択するように構成することが好適である。吸入空気流量Ｇａの増大に伴って、各触媒が吸蔵し得る酸素量（即ち、最大酸素吸蔵能力である実質的な最大酸素吸蔵量）が低下するからである。
【０１２２】
＜第１実施形態の変形例＞
次に、上記第１実施形態の変形例に係る排気浄化装置について説明する。この変形例は、主として、第３触媒５５及び第３触媒下流空燃比センサ６９を備えていない点、及びＣＰＵ７１が図６に示したルーチンに代えて制御用空燃比センサ出力voxsを選択するための図１５にフローチャートにより示したルーチンを実行する点等において、上記第１実施形態と異なっている。従って、以下、係る相違点を中心として説明する。
【０１２３】
ＣＰＵ７１は、制御用空燃比センサ出力voxsを選択するにあたり、図１５に示したルーチンを所定時間の経過毎に実行する。従って、所定のタイミングになると、ＣＰＵ７１はステップ１５００から処理を開始し、ステップ１５０５に進んで第１触媒５３の最大酸素吸蔵量Cmax1が所定の閾値Cthより大きいか否かを判定する。このとき、最大酸素吸蔵量Cmax1が所定の閾値Cthより大きいと、ＣＰＵ７１はステップ１５０５からステップ１５１０に進んで制御用空燃比センサ出力voxsに第１触媒下流空燃比センサ出力voxs1を設定し、ステップ１５９５に進んで本ルーチンを一旦終了する。
【０１２４】
一方、最大酸素吸蔵量Cmax1が所定の閾値Cthより小さい（以下である）と、ＣＰＵ７１はステップ１５０５からステップ１５１５に進んで制御用空燃比センサ出力voxsに第２触媒下流空燃比センサ出力voxs2を設定し、ステップ１５９５に進んで本ルーチンを一旦終了する。
【０１２５】
このように、第２触媒下流空燃比センサ出力voxs2を制御用空燃比センサ出力voxsとして選択するのは、第１触媒５３の酸素吸蔵能力（最大酸素吸蔵量Cmax1）が所定の能力（閾値Cth）より小さい場合、第１触媒５３と第２触媒５４とからなる触媒装置は、当然に第１触媒５３よりも大きい酸素吸蔵能力を有しているからであり、また、一般に、触媒は排気通路の上流に配設されたものほど熱劣化や被毒による劣化が早く進行するから、第１触媒５３の酸素吸蔵能力（最大酸素吸蔵量Cmax1）が劣化により低下した場合であっても、第２触媒５４の酸素吸蔵能力（最大酸素吸蔵量Cmax2）は比較的大きな値に維持されていると考えられるからである。
【０１２６】
また、この変形例においては、図１０のステップ１０１５を、最大酸素吸蔵量取得制御実行中フラグＸＨＡＮの値を「０」に設定するステップ（ステップ１２２０と同一のステップ）に変更するとともに、図１１及び図１２に示したルーチンを省略し、且つ、図１３のステップ１３２０〜１３３５を省略し、ステップ１３１０にて「Ｎｏ」と判定されたとき、ステップ１３４０に進むようにルーチンを構成しておくことが望ましい。更に、図９のステップ９１０は、第１触媒下流空燃比センサ出力voxs1がリーン空燃比に対応した出力を示した場合にステップ９１５へ、同リーン空燃比に対応した出力を示していない場合にステップ９９５に進むように修正しておく。また、図１４のステップ１４１０及びステップ１４１５において、ＯＳＡ２、ＯＳＡ３、Cmax2、及びCmax3に関する処理を省略しておく。
【０１２７】
以上、説明したように、この第１実施形態の変形例に係る排気浄化装置は、排気通路に直列に介装された第１触媒５３及び第２触媒５４と、第１触媒５３の酸素吸蔵能力を表す値である最大酸素吸蔵量Cmax1を取得する第１触媒酸素吸蔵能力取得手段（図８、図９、図１０、図１３、及び図１４に示したルーチン）と、前記取得された第１触媒５４の酸素吸蔵能力を表す値に基づいて同第１触媒５４の酸素吸蔵能力が所定の酸素吸蔵能力より大きい（最大酸素吸蔵量Cmax1＞閾値Cth）と判定したときは第１触媒下流空燃比センサ６７の出力voxs1が所定の第１目標出力voxrefとなるように第１触媒５３に流入するガスの空燃比を制御するとともに、第１触媒５３の酸素吸蔵能力が同所定の酸素吸蔵能力より小さいと判定したときは第２触媒下流空燃比センサ５４の出力voxs2が所定の第２目標出力voxref（この場合、第１目標出力と同一である。）となるように同第１触媒５３に流入するガスの空燃比を制御する空燃比制御手段（図１５に示した制御用空燃比センサ（出力）決定・選択ルーチンと、図４、図５、及び図７に示したルーチンにより達成される空燃比のフィードバック制御ルーチン）とを備える。
【０１２８】
従って、本排気浄化装置によれば、第１触媒５３が所定の酸素吸蔵能力を有している場合には第１触媒（第１触媒からなる触媒装置）５３の下流に配設された第１触媒下流空燃比センサ出力voxs1、そうでない場合には第１触媒５３と第２触媒５４とからなる触媒装置の下流に配設された第２触媒下流空燃比センサ出力voxs2に基づいて第１触媒５３に流入するガスの空燃比が制御されるので、同触媒装置に流入する排ガスの中心空燃比を所望の値に安定して（即ち、ハンチングの発生等の制御の破綻を招くことなく）制御することができ、排ガスを効果的に浄化することができる。
【０１２９】
なお、上記変形例の図１５において、ステップ１５１０とステップ１５９５との間に、目標出力voxrefに第１目標出力voxref1を設定するステップを追加するとともに、ステップ１５１５とステップ１５９５との間に、目標出力voxrefに第１目標出力voxref1とは異なる値を有する第２目標出力voxref2を設定するステップを追加するように構成してもよい。
【０１３０】
また、図１５に示したルーチンでは、酸素吸蔵能力を示す値である第１触媒５３の最大酸素吸蔵量Cmax1に基づいて制御用空燃比センサ出力voxsを選択していたが、同酸素吸蔵能力を間接的に示す車両の走行距離、第１触媒５３の温度、吸入空気流量Ｇａに基づいて制御用空燃比センサ出力voxsを選択してもよい。
【０１３１】
この場合、走行距離が第１走行距離より短い場合には第１触媒下流空燃比センサ出力voxs1を、同走行距離が第１走行距離より長い場合には第２触媒下流空燃比センサ出力voxs2を制御用空燃比センサ出力voxsとして選択するように構成することが好適である。また、第１触媒５３の温度が第１の閾値温度より高い場合には第１触媒下流空燃比センサ出力voxs1を、同第１触媒５３の温度が第１の閾値温度より低い場合には第２触媒下流空燃比センサ出力voxs2を制御用空燃比センサ出力voxsとして選択するように構成することが好適である。更に、吸入空気流量Ｇａが第１の閾値流量より小さい場合には第１触媒下流空燃比センサ出力voxs1を、同吸入空気流量Ｇａが第１の閾値流量より大きい場合には第２触媒下流空燃比センサ出力voxs2を、制御用空燃比センサ出力voxsとして選択するように構成することが好適である。
【０１３２】
＜第２実施形態＞
次に、本発明による第２実施形態に係る排気浄化装置について説明する。この排気浄化装置は、触媒の排気浄化の状態を示す値である酸素吸蔵量を所定値に維持する制御を行う点、同制御される酸素吸蔵量を何れの触媒の酸素吸蔵量とするかを選択する点、及び同酸素吸蔵量を触媒モデルを用いて求める点において、主として第１実施形態に係る排気浄化装置と異なっている。従って、以下、係る相違点を中心に説明する。
【０１３３】
＜触媒モデル＞
先ず、本実施形態の排気浄化装置が採用する触媒モデルについて説明する。一般に、触媒にリーンな空燃比のガスが流入したときには、同触媒の上流側においてより多くの酸素が吸蔵され、同触媒にリッチな空燃比のガスが流入したときには、同触媒の上流側から吸蔵されている酸素が消費されていく。従って、触媒内に吸蔵されている酸素は同触媒の排ガスの流れ方向において均一に分布しているわけではない。よって、触媒内の酸素吸蔵量を正確に求めるためには、係る吸蔵酸素の分布を考慮した計算を行う必要がある。
【０１３４】
また、触媒の酸素吸蔵量は同触媒内において発生する上記酸素吸蔵・放出反応の程度に応じて変化する。この酸素吸蔵・放出反応の程度は、触媒に流入する排ガスに含まれる上記酸素吸蔵・放出反応に関係する特定成分の量に依存する。従って、触媒の酸素吸蔵量を正確に求めるためには、前記特定成分の量を考慮に入れた計算を行う必要がある。そこで、本装置は以下に説明する触媒モデルを第１〜第３触媒５３〜５５に適用することにより、同第１〜第３触媒５３〜５５の各酸素吸蔵量を算出する。
【０１３５】
この触媒モデルにおいては、図１６に模式的に示したように、軸線に直交する断面形状が一定である柱状の触媒を同軸線に直交する平面によりＮ個の（複数の）領域（「ブロック」とも称呼する。）に仮想的に分割する。即ち、触媒モデルが対象とする触媒は排ガスの流れ方向に沿ってＮ個のブロックに分割されている。分割された各ブロックの軸線方向の長さはＬである。なお、説明の便宜上、各ブロックには、排ガスの流れ方向に沿って上流側から順に図１６に示すように番号が付されている。また、任意のｉ番目のブロックに関連する変数・記号等には、それらの末尾に(i)が付される。
【０１３６】
この触媒モデルにおいては、図１７に示したように、分割されたブロックのうちのｉ番目のブロック(i)（特定領域）に注目し、同ブロック(i)における酸素吸蔵・放出反応に関係する特定成分のＣＰＵ７１の演算周期あたりの収支を考える。このとき、触媒での酸化・還元反応である三元反応は瞬時かつ完全に終了するものと仮定し、その結果としての酸素の過不足に基く酸素の吸蔵・放出反応のみに着目するものとする。係る仮定（触媒モデル）は、現実的でありかつ計算精度のよいものである。なお、図１７に示した排ガス相は排ガスが通過する空間であり、コート層は触媒機能を発生せしめる白金（Pt）等の貴金属からなる活性成分及び酸素吸蔵機能を発生せしめるセリア（CeO2）等の成分が担持された層である。
【０１３７】
特定成分は、例えば、酸素（分子）Ｏ2、窒素酸化物ＮＯｘ、一酸化炭素ＣＯ、炭化水素ＨＣから選択された成分であってもよいが、この触媒モデルでは、上記三元反応が瞬時かつ完全に終了するものと仮定した状態における排ガスに含まれる酸素（酸素分子及び窒素酸化物の酸素。本明細書では、酸素分子及び窒素酸化物の酸素を総称して「酸素」と称呼する。）（の過不足）を特定成分として選択している。この酸素の量である酸素量CgO2は、同酸素が過剰であるとき（即ち、排ガス中にＯ2及びＮＯｘが過剰に存在する場合）に正の値となり、同酸素が不足しているとき（即ち、排ガス中に未燃ＨＣ,ＣＯが過剰に存在する場合）に負の値となるように計算される。
【０１３８】
また、注目するブロック(i)において、ＣＰＵ７１の演算周期あたり同ブロック(i)の排ガス相に流入する酸素量CgO2を流入酸素量CginO2(i)、同演算周期あたり同ブロック(i)の排ガス相から流出する酸素量CgO2を流出酸素量CgoutO2(i)と称呼し、同演算周期あたり同ブロック(i)のコート層に吸蔵され又は同コート層から放出される酸素量CgO2を酸素吸蔵量変化量δOSA(i)と称呼する。この酸素吸蔵量変化量δOSA(i)は、酸素がコート層に吸蔵されるときに正の値となり、酸素がコート層から放出されるときに負の値となるように計算される。また、現時点におけるブロック(i)のコート層における酸素吸蔵量を酸素吸蔵量OSA(i)と称呼し、現時点におけるブロック(i)のコート層における最大酸素吸蔵量を最大酸素吸蔵量Cmax(i)と称呼する。
【０１３９】
いま、図１７に示すブロック(i)における酸素量CgO2の上記演算周期あたりの収支を考えると、同ブロック(i)の排ガス相に流入した流入酸素量CginO2(i)のうち酸素吸蔵量変化量δOSA(i)だけがコート層に吸蔵され、同流入酸素量CginO2(i)のうちコート層に吸蔵されなかった残りの酸素量CgO2が流出酸素量CgoutO2(i)となるから、流入酸素量CginO2(i)，流出酸素量CgoutO2(i)及び酸素吸蔵量変化量δOSA(i)の間には下記数４に示した関係が成立する。この下記数４に示した関係が本触媒モデルの基本式である。
【０１４０】
【数４】
CgoutO2(i)＝CginO2（i）-δOSA(i)
【０１４１】
次に、酸素吸蔵量変化量δOSA(i)について考える。流入酸素量CginO2(i)が正の値のときはブロック(i)の排ガス相に流入する排ガス中に酸素が過剰に存在していることを意味し、同排ガス中の酸素の一部はブロック(i)のコート層に吸蔵されるから酸素吸蔵量変化量δOSA(i)は正の値となる。このときの酸素吸蔵反応の量、即ち酸素吸蔵量変化量δOSA(i)は、流入酸素量CginO2(i)の値に比例するとともにブロック(i)の現時点での最大酸素吸蔵量Cmax(i)と現時点での酸素吸蔵量OSA(i)との差の値に比例すると考えられる。従って、流入酸素量CginO2(i)が正の値のとき、酸素吸蔵量変化量δOSA(i)は下記数５及び下記数６に基いて算出され得る。
【０１４２】
【数５】
δOSA(i)＝H(i)・CginO2(i)
【０１４３】
【数６】
H(i)＝ｈ・((Cmax(i)-OSA(i))/Cmax(i))  (0 ≦ H(i) ＜ 1)
【０１４４】
上記数５及び上記数６において、H(i)はブロック(i)における流入酸素量CginO2(i)に対する吸蔵される酸素量（δOSA(i)）の割合を示す反応率である。ｈは反応速度定数であり本モデルでは正の一定値としているが触媒の温度に応じて変化する正の値（例えば、触媒の温度の増加に応じて単調増加する正の値）としてもよい。また、上記数６における現時点での最大酸素吸蔵量Cmax(i)と現時点での酸素吸蔵量OSA(i)との差の値(Cmax(i)-OSA(i))は、ブロック(i)における現時点での酸素吸蔵余裕量を示している。このように、本触媒モデルでは、少なくとも触媒内の酸素吸蔵量に基いて同触媒が内部に流入する排ガスから吸蔵する酸素量を算出する。
【０１４５】
一方、流入酸素量CginO2(i)が負の値のときはブロック(i)の排ガス相に流入する排ガス中の酸素が不足していることを意味し、同排ガスにはブロック(i)のコート層から放出された酸素が与えられるから酸素吸蔵量変化量δOSA(i)は負の値となる。このときの酸素放出反応の量、即ち酸素吸蔵量変化量δOSA(i)（の絶対値）は、流入酸素量CginO2(i)の値に比例するとともにブロック(i)の現時点での酸素吸蔵量OSA(i)の値に比例すると考えられる。従って、流入酸素量CginO2(i)が負の値のとき、酸素吸蔵量変化量δOSA(i)は上記数５と同一の関係を示す下記数７及び下記数８に基いて算出され得る。
【０１４６】
【数７】
δOSA(i)＝H(i)・CginO2(i)
【０１４７】
【数８】
H(i)＝ｈ・(OSA(i)/Cmax(i))  (0 ≦ H(i) ＜ 1)
【０１４８】
上記数７及び上記数８において、H(i)はブロック(i)における流入酸素量CginO2(i)（負の値）に対する放出される酸素量（δOSA(i)，負の値）の割合を示す反応率である。ｈは反応速度定数であり上記数６にて使用されているものと同様である。また、上記数８における現時点での酸素吸蔵量OSA(i)の値は、ブロック(i)における現時点での酸素放出余裕量を示している。このように、本触媒モデルでは、少なくとも触媒内の酸素吸蔵量に基いて同触媒が内部に吸蔵している酸素から放出する酸素量を算出する。
【０１４９】
なお、上記数６及び上記数８にて使用するブロック(i)における最大酸素吸蔵量Cmax(i)は後述する手法により予め求めらる。また、上記数６及び上記数８にて使用するブロック(i)における現時点での酸素吸蔵量OSA(i)は、初期値が付与された時点から現時点までの酸素吸蔵量変化量δOSA(i)の積算値であるから下記数９に基いて算出することができる。
【０１５０】
【数９】
OSA(i)＝ΣδOSA(i)   (0 ≦ OSA(i) ≦ Cmax(i))
【０１５１】
次に、各ブロック間での境界条件について考えると、図１６に示したように、互いに隣接する２つのブロックのうちの上流側のブロックの排ガス相の流出面と下流側のブロックの排ガス相の流入面は互いに連続しているから、図１７に示したように、ブロック(i)に流入する流入酸素量CginO2(i)は、ブロック(i)に隣接する上流側のブロック(i-1)から流出する流出酸素量CgoutO2(i-1)と等しく、また、ブロック(i)から流出する流出酸素量CgoutO2(i)は、ブロック(i)に隣接する下流側のブロック(i+1)に流入する流入酸素量CginO2(i+1)と等しい。従って、下記数１０に示した関係が成立する。換言すると、任意のｉ番目のブロック(i)の流出酸素量CgoutO2(i)が求まればブロック(i)に隣接する下流側のブロック(i+1)の流入酸素量CginO2(i+1)が求まる。
【０１５２】
【数１０】
CginO2(i+1)＝CgoutO2(i)
【０１５３】
以上のことから、最上流のブロック(1)における流入酸素量CginO2(1)が境界条件として付与されれば、上記数５又は上記数７によりブロック(1)における酸素吸蔵量変化量δOSA(1)が求まり、その結果、上記数９によりブロック(1)における酸素吸蔵量OSA(1)を更新できるとともに上記数４によりブロック(1)における流出酸素量CgoutO2(1)が求まる。ブロック(1)における流出酸素量CgoutO2(1)が求まれば、上記数１０によりブロック(2)における流入酸素量CginO2(2)が求まり、その結果、上記数５又は上記数７によりブロック(2)における酸素吸蔵量変化量δOSA(2)が求まる。これにより、上記数９によりブロック(2)における酸素吸蔵量OSA(2)を更新できるとともに、上記数４によりブロック(2)における流出酸素量CgoutO2(2)が求まる。
【０１５４】
ＣＰＵ７１は、このような処理を所定の演算周期毎に繰り返し実行する。従って、ＣＰＵ７１の演算周期が経過する毎に最上流のブロック(1)における流入酸素量CginO2(1)が境界条件として付与されれば、上記数４〜上記数１０より、最上流のブロック(1)から、順次、各ブロック(i) (i=1,2,・・・,N) における酸素吸蔵量OSA(i)，流入酸素量CginO2(i)，及び流出酸素量CgoutO2(i)を算出することができる。これにより、触媒内部の酸素吸蔵量の分布が精度よく計算される。また、各ブロックの酸素吸蔵量OSA(i) (i=1,2,・・・,N) を触媒全体について積算すれば、同触媒全体の酸素吸蔵量OSAallについても精度よく計算することができる。
【０１５５】
なお、以下に、任意のｉ番目のブロック(i)の流出酸素量CgoutO2(i)を求めるための一般式を求めておく。先ず、上記数４における「i」を「1」に書き換えると下記数１１が導かれる。
【０１５６】
【数１１】
CgoutO2(1)＝CginO2(1)-δOSA(1)
【０１５７】
また、上記数４における「i」を「2」に書き換えて、これに上記数１０及び上記数１１の関係を適用すると、下記数１２が導かれる。
【０１５８】
【数１２】
0004103522.tif 000002
【０１５９】
さらに、上記数４における「i」を「3」に書き換え、これに上記数１０及び上記数１２の関係を適用すると、下記数１３が導かれる。
【０１６０】
【数１３】
0004103522.tif 000003
【０１６１】
このような手続きを繰り返すことにより、任意のｉ番目のブロック(i)の流出酸素量CgoutO2(i)を求めるための一般式である下記数１４が導かれる。
【０１６２】
【数１４】
CgoutO2(i)＝CginO2(1)-δOSA(1)-δOSA(2)- ・・・ -δOSA(i-1)-δOSA(i)
(i=1,2,・・・,N)
【０１６３】
また、上記数４及び上記数５（又は上記数７）より下記数１５が導かれるから、下記数１５に上記数１０の関係を適用し、その関係を一般的に記述すると、任意のｉ番目のブロック(i)の流出酸素量CgoutO2(i)を求めるための他の一般式である下記数１６も容易に導くことができる。
【０１６４】
【数１５】
CgoutO2(i)＝CginO2(i)・(1-H(i))
【０１６５】
【数１６】
0004103522.tif 000004
【０１６６】
次に、上記数６及び数８において反応率H(i)を求める際に必要となるブロック(i)における最大酸素吸蔵量Cmax(i)の求め方について説明する。図１８は、本触媒モデルにおいて、最大酸素吸蔵量Cmax(i)を求める考え方を示した最大酸素吸蔵量分布マップであり、斜線で示された部分の面積は触媒全体の最大酸素吸蔵量Cmaxallの値に対応している。
【０１６７】
このように、触媒の各ブロック毎の各最大酸素吸蔵量Cmax(n) (n=1,・・・,N)は、同各最大酸素吸蔵量Cmax(n)の総和が同触媒全体の最大酸素吸蔵量Cmaxallの値となるように設定されるとともに、上流側のブロックから下流側のブロックに推移するに従い、所定の勾配をもって線形的に増加するとして取り扱われる。これは、触媒の上流側部分の方が下流側部分に比して、内部に流入する排ガス中の鉛や硫黄等により被毒し易いので、同上流部分の最大酸素吸蔵量が同下流部分に比して低下し易くなるからである。
【０１６８】
具体的には、本装置は、触媒モデルが対象とする第１触媒５３、第２触媒５４、及び第３触媒５５を、排ガスの流れ方向に沿ってN1個、N2個、及びN3個のブロックにそれぞれ仮想的に分割し、第１触媒５３の各ブロック1(i)毎の各最大酸素吸蔵量Cmax1(i) (i=1,・・・,N1)、第２触媒５４の各ブロック2(i)毎の各最大酸素吸蔵量Cmax2(i) (i=1,・・・,N2)、及び第３触媒５５の各ブロック3(i)毎の各最大酸素吸蔵量Cmax3(i) (i=1,・・・,N3)を、図１８に示した最大酸素吸蔵量分布マップに基いた下記数１７〜下記数１９に基いてそれぞれ算出する。
【０１６９】
【数１７】
Cmax1(i)＝A1・(i-(N1/2))+(Cmax1all/N1) (i=1,2,・・・,N1)
【０１７０】
【数１８】
Cmax2(i)＝A2・(i-(N2/2))+(Cmax2all/N2) (i=1,2,・・・,N2)
【０１７１】
【数１９】
Cmax3(i)＝A3・(i-(N3/2))+(Cmax3all/N3) (i=1,2,・・・,N3)
【０１７２】
上記数１７〜上記数１９において、A1,A2,A3はそれぞれ正の定数であって、各ブロック毎の最大酸素吸蔵量の分布の上記勾配を決定する値である。A1,A2,A3は同一の値であってもよいし、それぞれ異なる値であってもよい。また、各触媒の最大酸素吸蔵量Cmax1all,Cmaxall2,Cmaxall3は、上記第１実施形態において求めたCmax1,Cmax2,Cmax3とそれぞれ等しいので、ここではその求め方の説明を省略する。なお、触媒の各ブロック毎の各最大酸素吸蔵量は、上流側のブロックから下流側のブロックに推移するに従い増加するように設定されていればよく、例えば、非線形的に増加するように設定されていてもよい。このようにして、第１触媒５３〜第３触媒５５の各ブロック毎の最大酸素吸蔵量が算出される。
【０１７３】
（触媒モデルの適用）
次に、以上説明した触媒モデルを、図１９に示したように、第１〜第３触媒５３〜５５にそれぞれ適用し、各種値を求める例について説明する。
【０１７４】
以下、第１触媒５３のｉ番目のブロックをブロック1(i)と称呼し、同ブロック1(i)における流入酸素量を流入酸素量Cgin1O2(i)，流出酸素量を流出酸素量Cgout1O2(i)，酸素吸蔵量をOSA1(i)，最大酸素吸蔵量をCmax1(i)とそれぞれ称呼する。各ブロックの酸素吸蔵量OSA1(i) (i=1,2,・・・,N1) を積算することにより得られる第１触媒５３全体の酸素吸蔵量を酸素吸蔵量OSA1allと称呼し、各ブロックの最大酸素吸蔵量Cmax1(i) (i=1,2,・・・,N1) を積算した値である第１触媒５３全体の最大酸素吸蔵量を最大酸素吸蔵量Cmax1allと称呼する。
【０１７５】
同様に、第２触媒５４のｉ番目のブロックをブロック2(i)と称呼し、同ブロック2(i)における流入酸素量を流入酸素量Cgin2O2(i)，流出酸素量を流出酸素量Cgout2O2(i)，酸素吸蔵量をOSA2(i)，最大酸素吸蔵量をCmax2(i)とそれぞれ称呼する。各ブロックの酸素吸蔵量OSA2(i) (i=1,2,・・・,N2) を積算することにより得られる第２触媒５４全体の酸素吸蔵量を酸素吸蔵量OSA2allと称呼し、各ブロックの最大酸素吸蔵量Cmax2(i) (i=1,2,・・・,N2) を積算した値である第２触媒５４全体の最大酸素吸蔵量を最大酸素吸蔵量Cmax2allと称呼する。
【０１７６】
同様に、第３触媒５５のｉ番目のブロックをブロック3(i)と称呼し、同ブロック3(i)における流入酸素量を流入酸素量Cgin3O2(i)，流出酸素量を流出酸素量Cgout3O2(i)，酸素吸蔵量をOSA3(i)，最大酸素吸蔵量をCmax3(i)とそれぞれ称呼する。各ブロックの酸素吸蔵量OSA3(i) (i=1,2,・・・,N3) を積算することにより得られる第３触媒５５全体の酸素吸蔵量を酸素吸蔵量OSA3allと称呼し、各ブロックの最大酸素吸蔵量Cmax3(i) (i=1,2,・・・,N3) を積算した値である第３触媒５５全体の最大酸素吸蔵量を最大酸素吸蔵量Cmax3allと称呼する。
【０１７７】
この触媒モデルにおいては、図１９に示したように、第１、第２、第３触媒５３，５４，５５の各々の各ブロックにおける酸素吸蔵量OSA1(i) (i=1,2,・・・,N1)、酸素吸蔵量OSA2(i) (i=1,2,・・・,N2)、及び酸素吸蔵量OSA3(i) (i=1,2,・・・,N3)の初期値を初期条件として付与するとともに、ＣＰＵ７１の演算周期が経過する毎に、第１触媒５３の最上流のブロック1(1)における流入酸素量Cgin1O2(1)、第２触媒５４の最上流のブロック2(1)における流入酸素量Cgin2O2(1)、及び第３触媒５５の最上流のブロック3(1)における流入酸素量Cgin3O2(1)をそれぞれ境界条件として付与すれば、第１触媒５３の各ブロック1(i) (i=1,2,・・・,N1) における酸素吸蔵量OSA1(i)，流入酸素量Cgin1O2(i)，及び流出酸素量Cgout1O2(i)、第２触媒５４の各ブロック2(i) (i=1,2,・・・,N2) における酸素吸蔵量OSA2(i)，流入酸素量Cgin2O2(i)，及び流出酸素量Cgout2O2(i)、並びに第３触媒５５の各ブロック3(i) (i=1,2,・・・,N3) における酸素吸蔵量OSA3(i)，流入酸素量Cgin3O2(i)，及び流出酸素量Cgout3O2(i)を全て算出することができる。これにより、第１触媒５３全体の酸素吸蔵量OSA1all、第２触媒５４全体の酸素吸蔵量OSA2all、及び第２触媒５４全体の酸素吸蔵量OSA2allをそれぞれ取得・算出することができる。
【０１７８】
そこで、先ず、第１〜第３触媒５３〜５５の各々の各ブロックにおける酸素吸蔵量の初期値を付与する手法について説明すると、本装置は、第１触媒下流空燃比センサ６７の出力voxs1が０．７（Ｖ）より大きい値を示したとき、即ち、第１触媒５３の下流側であって第２触媒５４の上流側のガスの空燃比が明白なリッチ空燃比となったときは、同第１触媒５３内に酸素が全く存在せず未燃ＨＣ，ＣＯが浄化されない状態となったことを意味するから、第１触媒５３の各ブロックにおける酸素吸蔵量OSA1(i) (i=1,2,・・・,N1) 及び第１触媒５３全体の酸素吸蔵量OSA1allを全て「０」に設定する。
【０１７９】
同様に、本装置は、第２触媒下流空燃比センサ６８の出力voxs2が０．７（Ｖ）より大きい値を示したとき、即ち、第２触媒５４の下流側の空燃比が明白なリッチ空燃比となったときは、第２触媒５４の各ブロックにおける酸素吸蔵量OSA2(i) (i=1,2,・・・,N2) 及び第２触媒５４全体の酸素吸蔵量OSA2allを全て「０」に設定する。
【０１８０】
同様に、本装置は、第３触媒下流空燃比センサ６９の出力voxs3が０．７（Ｖ）より大きい値を示したとき、即ち、第３触媒５５の下流側の空燃比が明白なリッチ空燃比となったときは、第３触媒５５の各ブロックにおける酸素吸蔵量OSA3(i) (i=1,2,・・・,N3) 及び第３触媒５５全体の酸素吸蔵量OSA3allを全て「０」に設定する。このようにして、第１〜第３触媒５３〜５５の各々の各ブロックにおける酸素吸蔵量の初期値「０」が初期条件として付与される。
【０１８１】
次に、第１触媒５３の最上流のブロック1(1)における流入酸素量Cgin1O2(1)を付与する方法について説明すると、本装置は、下記数２０に基いてＣＰＵ７１の演算周期毎の流入酸素量Cgin1O2(1)を算出する。上記数２０は、上記数３と同様の式である。但し、mfr1は所定時間（演算周期tsample）内の燃料噴射量Ｆｉの合計量である。
【０１８２】
【数２０】
Cgin1O2(1)＝０．２３・mfr1・（abyfs − stoich）
【０１８３】
この流入酸素量Cgin1O2(1)は、上記数２０から明らかなように、酸素が過剰であるとき（即ち、空燃比がリーンであってabyfs＞stoichのとき）に正の値となり、酸素が不足しているとき（即ち、空燃比がリッチであってabyfs＜stoichのとき）に負の値となるように計算される。
【０１８４】
次に、第２触媒５４の最上流のブロック2(1)における流入酸素量Cgin2O2(1)を算出する手法について説明すると、第１触媒５３の最下流のブロック1(N1)から流出する排ガスは、エキゾーストパイプ５２を通過して外部とのガスの授受がないまま第２触媒５４の最上流のブロック2(1)に流入する。従って、第１触媒５３の最下流のブロック1(N1)から流出する流出酸素量Cgout1O2(N1)と第２触媒５４の最上流のブロック2(1)における流入酸素量Cgin2O2(1)とは同一の値となる。よって、本装置は、ＣＰＵ７１の演算周期毎に算出する流出酸素量Cgout1O2(N1)の値を流入酸素量Cgin2O2(1)として使用する。このようにして、ＣＰＵ７１の演算周期毎に第２触媒５４の最上流のブロック2(1)における流入酸素量Cgin2O2(1)が境界条件として付与される。
【０１８５】
第３触媒５５の最上流のブロック3(1)における流入酸素量Cgin2O3(1)についても同様であり、本装置は、第２触媒５４の最下流のブロック2(N2)から流出する流出酸素量Cgout2O2(N2)の値を流入酸素量Cgin3O2(1)として使用する。このようにして、ＣＰＵ７１の演算周期毎に第３触媒５５の最上流のブロック3(1)における流入酸素量Cgin3O2(1)が境界条件として付与される。
【０１８６】
（第２実施形態の実際の作動）
次に、第２実施形態に係る排気浄化装置の実際の作動について説明する。この装置のＣＰＵ７１は、第１実施形態のＣＰＵ７１が実行する図６、図７、及び図１４に示したルーチンに代えて、図２０〜図２２にフローチャートにより示したルーチンを実行するとともに、図２３〜図２６にフローチャートにより示したルーチンを追加的に実行する。以下、第２実施形態に特有のルーチンについて、順に説明する。
【０１８７】
ＣＰＵ７１は、サブフィードバック制御量vafsfbを求めるために使用される制御用酸素吸蔵量OSAall及び目標酸素吸蔵量OSAallrefを決定・選択する図２０に示したルーチンを所定時間の経過毎に実行している。従って、所定のタイミングになると、ＣＰＵ７１はステップ２０００から処理を開始し、ステップ２００５にて第１触媒５３の酸素吸蔵能力を示す同第１触媒５３の最大酸素吸蔵量Cmax1allが所定の閾値Cth1より大きいか否かを判定し、同ステップ２００５にて「Ｙｅｓ」と判定したときはステップ２０１０に進んで制御用酸素吸蔵量OSAallに第１触媒５３の酸素吸蔵量OSA1allを設定するとともに、ステップ２０１５にて目標酸素吸蔵量OSAallrefに第１の値OSA1allrefを設定し、ステップ２０９５に進んで本ルーチンを一旦終了する。第１の値OSA1allrefは、第１触媒５３の最大酸素吸蔵量Cmax1allの１／２に設定されている。
【０１８８】
一方、ＣＰＵ７１は、ステップ２００５にて「Ｎｏ」と判定したとき、ステップ２０２０に進み、第２触媒５４の酸素吸蔵能力を示す同第２触媒５４の最大酸素吸蔵量Cmax2allが所定の閾値Cth2より大きいか否かを判定し、同ステップ２０２０にて「Ｙｅｓ」と判定したときはステップ２０２５に進んで制御用酸素吸蔵量OSAallに第２触媒５４の酸素吸蔵量OSA2allを設定するとともに、ステップ２０３０にて目標酸素吸蔵量OSAallrefに第２の値OSA2allrefを設定し、ステップ２０９５に進んで本ルーチンを一旦終了する。第２の値OSA2allrefは、第２触媒５４の最大酸素吸蔵量Cmax2allの１／２に設定されている。
【０１８９】
また、ＣＰＵ７１は、ステップ２０２０にて「Ｎｏ」と判定したとき、ステップ２０３５に進み、第３触媒５５の酸素吸蔵能力を示す同第３触媒５５の最大酸素吸蔵量Cmax3allが所定の閾値Cth3より大きいか否かを判定し、同ステップ２０３５にて「Ｙｅｓ」と判定したときはステップ２０４０に進んで制御用酸素吸蔵量OSAallに第３触媒５５の酸素吸蔵量OSA3allを設定するとともに、ステップ２０４５にて目標酸素吸蔵量OSAallrefに第３の値OSA3allrefを設定し、ステップ２０９５に進んで本ルーチンを一旦終了する。第３の値OSA3allrefは、第３触媒５５の最大酸素吸蔵量Cmax3allの１／２に設定されている。
【０１９０】
更に、ＣＰＵ７１は、ステップ２０３５にて「Ｎｏ」と判定したとき、ステップ２０５０に進んで制御用酸素吸蔵量OSAallに一定値OSAintを設定するとともに、ステップ２０５５にて目標酸素吸蔵量OSAallrefに同一定値OSAintを設定し、ステップ２０９５に進んで本ルーチンを一旦終了する。このステップ２０５０及びステップ２０５５の処理により、制御用酸素吸蔵量OSAallと目標酸素吸蔵量OSAallrefとは等しくなるので、酸素吸蔵量に基づくサブフィードバック制御は事実上停止された状態となる。
【０１９１】
また、ＣＰＵ７１は、サブフィードバック制御量vafsfbを求めるために、図２１に示したルーチンを図２０に示したルーチンの実行時間間隔と同じ所定時間の経過毎に実行している。従って、所定のタイミングになると、ＣＰＵ７１はステップ２１００から処理を開始し、ステップ２１０５に進んでサブフィードバック制御条件が成立しているか否かを判定する。サブフィードバック制御条件は、第１実施形態のサブフィードバック制御条件と同一である。このとき、サブフィードバック制御条件が成立していなければ、ＣＰＵ７１はステップ２１２５に進んでサブフィードバック制御量vafsfbを「０」に設定し、その後ステップ２１９５に進んで本ルーチンを一旦終了する。
【０１９２】
いま、サブフィードバック制御条件が成立しているものとして説明を続けると、ＣＰＵ７１はステップ２１０５にて「Ｙｅｓ」と判定してステップ２１１０に進み、上記選択された酸素吸蔵量OSAallから上記設定された目標酸素吸蔵量（目標値）OSAallrefを減じることにより偏差量DOSAallを求める。次に、ＣＰＵ７１はステップ２１１５に進み、下記数２１に基いてサブフィードバック制御量（酸素吸蔵量補正量）vafsfbを求める。
【０１９３】
【数２１】
vafsfb＝Ｋｐ・DOSAall＋Ｋｉ・SDOSAall
【０１９４】
上記数２１において、Ｋｐは予め設定された比例ゲイン、Ｋｉは予め設定された積分ゲインである。また、SDOSAallは酸素吸蔵量偏差量DOSAallの積分値であって、次のステップ２１２０にて更新される値である。即ち、ＣＰＵ７１は、ステップ２１２０に進んで、その時点における酸素吸蔵量偏差量の積分値SDOSAallに上記ステップ２１１０にて求めた酸素吸蔵量偏差量DOSAallを加えて、新たな酸素吸蔵量偏差量の積分値SDOSA1allを求め、その後、ステップ２１９５に進んで本ルーチンを一旦終了する。
【０１９５】
このようにして、酸素吸蔵量補正量vafsfbが求められ、この値は前述した図５のステップ５１０にて最上流空燃比センサ６６の実際の出力vabyfsに加えられ、その和（vabyfs + vafsfb）が図２に示したマップに基いてメインフィードバック制御用空燃比abyfsに変換される。この結果、前述した図５のステップ５１５にて計算される筒内燃料供給量Ｆｃ（ｋ−Ｎ）が酸素吸蔵量OSAallに応じて変化し、従って、ステップ５２５，５３０にてフィードバック補正量ＤＦｉが同酸素吸蔵量OSAallに応じて変更せしめられる。この結果、前述した図４のステップ４１０にて酸素吸蔵量OSAallと目標酸素吸蔵量OSAallrefとの偏差が小さくなるように、最終燃料噴射量Ｆｉが決定される。
【０１９６】
次に、各触媒の最大酸素吸蔵量Cmax1all,Cmax2all,Cmax3all、及び各触媒の各ブロックの最大酸素吸蔵量Cmax1(i),Cmax2(i),Cmax3(i)を算出する際の作動について説明する。ＣＰＵ７１は図２２のフローチャートにより示されたルーチンを所定時間の経過毎に実行するようになっている。
【０１９７】
従って、所定のタイミングになると、ＣＰＵ７１は図２２のステップ２２００から処理を開始し、ステップ２２０５に進んで最大酸素吸蔵量取得制御実行中フラグＸＨＡＮの値が「１」から「０」に変化したか否かをモニタする。このとき、最大酸素吸蔵量取得制御実行中フラグＸＨＡＮの値が変化していなければ、ＣＰＵ７１はステップ２２０５からステップ２２９５に直接進んで本ルーチンを一旦終了する。
【０１９８】
一方、前述した第４モードが終了した直後であるとすると、図１２のステップ１２２０にて最大酸素吸蔵量取得制御実行中フラグＸＨＡＮの値が「１」から「０」に変更されるから、ＣＰＵ７１はステップ２２０５にて「Ｙｅｓ」と判定してステップ２２１０に進み、その時点の酸素吸蔵量ＯＳＡ１，ＯＳＡ２，ＯＳＡ３を、それぞれ第１触媒５３全体の最大酸素吸蔵量Cmax1all、第２触媒５４全体の最大酸素吸蔵量Cmax2all、及び第３触媒５５全体の最大酸素吸蔵量Cmax3allとして格納する。
【０１９９】
次いでＣＰＵ７１はステップ２２１５に進み、カウンタ値ｎの値を「０」に設定した後、ステップ２２２０に進んで第１触媒５３の各ブロック1毎の最大酸素吸蔵量を算出する処理を開始する。まず、ＣＰＵ７１はステップ２２２０においてカウンタ値ｎの値を「１」だけ増大して「１」に設定した後、ステップ２２２５に進んで上記ステップ２２１０にて取得した第１触媒５３全体の最大酸素吸蔵量Cmax1allの値と、カウンタ値ｎの値と、上記数１７に基くステップ２２２５内に記載した式とに基いて第１触媒５３のブロック1(n)における最大酸素吸蔵量Cmax1(n)を算出する。この時点ではカウンタ値ｎの値は「１」であるから、ブロック1(1)における最大酸素吸蔵量Cmax1(1)が算出される。
【０２００】
そして、ＣＰＵ７１はステップ２２３０に進んでカウンタ値ｎの値が第１触媒５３のブロック数N1と等しいか否かを判定する。現時点ではカウンタ値ｎの値は「１」であるから、ＣＰＵ７１はステップ２２３０にて「Ｎｏ」と判定し、再びステップ２２２０に戻ってカウンタ値ｎの値を「１」だけ増大した後ステップ２２２５及びステップ２２３０の処理を実行する。即ち、ステップ２２２０及びステップ２２２５の処理は、カウンタ値ｎの値が第１触媒５３のブロック数N1と等しくなるまで繰り返し実行される。これにより、第１触媒５３の最上流のブロック1(1)から最下流のブロック1(N1)までの各ブロック1(n)の最大酸素吸蔵量Cmax1(n)の値が順次算出されていく。
【０２０１】
前述のステップ２２２０の処理が繰り返されることによりカウンタ値ｎの値が第１触媒５３のブロック数N1と等しくなると、ＣＰＵ７１はステップ２２３０にて「Ｙｅｓ」と判定してステップ２２３５に進み、カウンタ値ｎの値を「０」に設定した後、ステップ２２４０に進んで第２触媒５４の各ブロック2毎の最大酸素吸蔵量を算出する処理を開始する。
【０２０２】
この第２触媒５４の各ブロック2毎の最大酸素吸蔵量を算出する処理は、上述したステップ２２２０〜ステップ２２３０の処理と同様であるステップ２２４０〜ステップ２２５０までの処理を第２触媒５４のブロック数N2回だけ繰り返し実行することにより達成される。ステップ２２４５における最大酸素吸蔵量Cmax2(n)の算出は、上記ステップ２２１０にて取得した第２触媒５４全体の最大酸素吸蔵量Cmax2allの値と、カウンタ値ｎの値と、上記数１８に基くステップ２２４５内に記載した式とに基いて行われる。これにより、第２触媒５４の最上流のブロック2(1)から最下流のブロック2(N2)までの各ブロック2(n)の最大酸素吸蔵量Cmax2(n)の値が順次算出されていく。
【０２０３】
ステップ２２４０の処理が繰り返されることによりカウンタ値ｎの値が第２触媒５４のブロック数N2と等しくなると、ＣＰＵ７１はステップ２２５０にて「Ｙｅｓ」と判定してステップ２２５５に進み、カウンタ値ｎの値を「０」に設定した後、ステップ２２６０〜ステップ２２７０を実行し、第３触媒５５の各ブロック3毎の最大酸素吸蔵量を算出する処理を開始する。
【０２０４】
このステップ２２６０〜ステップ２２７０の処理は、上述したステップ２２２０〜ステップ２２３０の処理と同様であり。最大酸素吸蔵量Cmax3(n)の算出は、上記ステップ２２１０にて取得した第３触媒５５全体の最大酸素吸蔵量Cmax3allの値と、カウンタ値ｎの値と、上記数１９に基くステップ２２６５内に記載した式とに基いて行われる。これにより、第３触媒５５の最上流のブロック3(1)から最下流のブロック3(N3)までの各ブロック3(n)の最大酸素吸蔵量Cmax3(n)の値が順次算出されていく。
【０２０５】
そして、カウンタ値ｎの値が第３触媒５５のブロック数N3と等しくなると、ＣＰＵ７１はステップ２２７０にて「Ｙｅｓ」と判定してステップ２２７５に進み、酸素吸蔵量ＯＳＡ１〜ＯＳＡ３の各々の値を「０」に設定した後、ステップ２２９５に進んで本ルーチンを一旦終了する。
【０２０６】
次に、第１〜第３触媒５３〜５５の各々の各ブロック毎の流出酸素量及び酸素吸蔵量等の算出についての作動について説明する。ＣＰＵ７１は図２３〜図２５の一連のフローチャートにより示されたルーチンを所定時間の経過毎に図２３のルーチンから順に実行するようになっている。
【０２０７】
従って、所定のタイミングになると、ＣＰＵ７１は、第１触媒５３の各ブロック1毎の流出酸素量，酸素吸蔵量等を算出するため、図２３に示されたルーチンのステップ２３００から処理を開始してステップ２３０５に進み、図４のステップ４２５にて逐次更新されている燃料噴射量積算値mfr1と、最上流空燃比センサ６６により検出された空燃比abyfsと、上記数２０に基くステップ２３０５内に記載した式とに基いて、第１触媒５３のブロック1（1）の流入酸素量Cgin1O2(1)を算出する。
【０２０８】
次いで、ＣＰＵ７１はステップ２３１０に進んでカウンタ値ｎの値、及び第１触媒５３全体の酸素吸蔵量OSA1allの値をそれぞれ「０」に設定した後、ステップ２３１５に進んでカウンタ値ｎの値を「１」だけ増大する。カウンタ値ｎは第１触媒５３のブロック1の番号を示している。この時点ではカウンタ値ｎの値は「１」であり、続くステップ２３２０〜ステップ２３７５までの処理においてカウンタ値ｎの値は「１」に維持されるので、今回の同ステップ２３２０〜ステップ２３７５までの処理においては最上流のブロック1(1)に関する計算が実行される。
【０２０９】
まず、ＣＰＵ７１はステップ２３２０に進んで、流入酸素量Cgin1O2(1)の値が「０」以上であるか否かを判定し、流入酸素量Cgin1O2(1)の値が「０」以上であれば同ステップ２３２０において「Ｙｅｓ」と判定してステップ２３２５に進み、ブロック1(1)の最大酸素吸蔵量Cmax1(1)の値と、前回本ルーチンが実行されたときに計算（更新）されたブロック1(1)の酸素吸蔵量OSA1(1)の値と、上記数６に基くステップ２３２５内に記載した式とに基いてブロック1（1）における反応率Hを算出する。
【０２１０】
また、流入酸素量Cgin1O2(1)の値が「０」以上でなければＣＰＵ７１は同ステップ２３２０において「Ｎｏ」と判定してステップ２３３０に進み、上記最大酸素吸蔵量Cmax1(1)の値と、上記前回本ルーチンが実行されたときに計算されたブロック1(1)の酸素吸蔵量OSA1(1)の値と、上記数８に基くステップ２３３０内に記載した式とに基いてブロック1（1）における反応率Hを算出する。
【０２１１】
次いで、ＣＰＵ７１はステップ２３３５に進み、ステップ２３２５又はステップ２３３０にて算出した反応率Hの値と、ステップ２３０５にて算出した第１触媒５３のブロック1(1)における流入酸素量Cgin1O2(1)の値と、上記数５又は上記数７に基くステップ２３３５内に記載した式とに基いてブロック1(1)における酸素吸蔵量変化量δOSA1(1)を算出する。
【０２１２】
次に、ＣＰＵ７１はステップ２３４０に進んで、その時点の（即ち、前回本ルーチンが実行されたときに計算された）ブロック1(1)の酸素吸蔵量OSA1(1)の値にステップ２３３５にて今回算出したブロック1(1)の酸素吸蔵量変化量δOSA1(1)の値を加えた値（OSA1(1)+δOSA1(1)）がブロック1(1)の最大酸素吸蔵量Cmax1(1)の値以下であるか否かを判定する。
【０２１３】
ここで、ブロック1(1)の酸素吸蔵量OSA1(1)と酸素吸蔵量変化量δOSA1(1)の和（OSA1(1)+δOSA1(1)）が最大酸素吸蔵量Cmax1(1)以下であれば、ＣＰＵ７１はステップ２３４０にて「Ｙｅｓ」と判定してステップ２３４５に進み、酸素吸蔵量OSA1(1)と酸素吸蔵量変化量δOSA1(1)の和（OSA1(1)+δOSA1(1)）が「０」以上であるか否かを判定する。そして、酸素吸蔵量OSA1(1)と酸素吸蔵量変化量δOSA1(1)の和（OSA1(1)+δOSA1(1)）が「０」以上であれば、ＣＰＵ７１はステップ２３４５にて「Ｙｅｓ」と判定してステップ２３６０に進む。
【０２１４】
一方、ステップ２３４０の判定において、酸素吸蔵量OSA1(1)と酸素吸蔵量変化量δOSA1(1)の和（OSA1(1)+δOSA1(1)）が最大酸素吸蔵量Cmax1(1)より大きければ、ＣＰＵ７１は同ステップ２３４０にて「Ｎｏ」と判定してステップ２３５０に進み、最大酸素吸蔵量Cmax1(1)から酸素吸蔵量変化量δOSA1(1)を減じた値を酸素吸蔵量変化量δOSA1(1)として設定し直し、ステップ２３６０に進む。他方、ステップ２３４５の判定において、酸素吸蔵量OSA1(1)と酸素吸蔵量変化量δOSA1(1)の和（OSA1(1)+δOSA1(1)）が「０」より小さければ、ＣＰＵ７１は同ステップ２３４５にて「Ｎｏ」と判定してステップ２３５５に進み、酸素吸蔵量OSA1(1)の符号を反転した値（−OSA1(1)）を酸素吸蔵量変化量δOSA1(1)に設定し直してステップ２３６０に進む。以上のステップ２３４０〜ステップ２３５５の処理は、次のステップ２３６０にて求められる今回のブロック1(1)の酸素吸蔵量OSA1(1)が「０」以上であって最大酸素吸蔵量Cmax1(1)以下の値となるような酸素吸蔵量変化量δOSA1(1)を求めるための処理である。
【０２１５】
ステップ２３６０に進んだＣＰＵ７１は、その時点（即ち、前回本ルーチンを実行したときに求められた）ブロック1(1)の酸素吸蔵量OSA1(1)に上記のようにして求められた酸素吸蔵量変化量δOSA1(1)を加えた値を今回のブロック1(1)の酸素吸蔵量OSA1(1)として設定し、続くステップ２３６５にてブロック1(1)における流入酸素量Cgin1O2(1)の値と、今回の酸素吸蔵量変化量δOSA1(1)の値と、上記数４に基く同ステップ２３６５内に記載した式とに基いてブロック1(1)における流出酸素量Cgout1O2(1)を算出する。
【０２１６】
次いで、ＣＰＵ７１はステップ２３７０に進んで、現時点における第１触媒５３全体の酸素吸蔵量OSA1allの値に、上記算出されたブロック1(1)の酸素吸蔵量OSA1(1)の値を加えた値を新たな第１触媒５３全体の酸素吸蔵量OSA1(1)として格納し、ステップ２３７５に進んで同ブロック1(1)の流出酸素量Cgout1O2(1)の値をブロック1(1)に隣接する下流側のブロック1(2)における流入酸素量Cgin1O2(2)に設定する（上記数１０を参照。）。
【０２１７】
そして、ＣＰＵ７１はステップ２３８０に進んでカウンタ値ｎの値が第１触媒５３のブロック数N1と等しいか否かを判定する。現時点ではカウンタ値ｎの値は「１」であるから、ＣＰＵ７１はステップ２３８０にて「Ｎｏ」と判定し、再びステップ２３１５に戻ってカウンタ値ｎの値を「１」だけ増大して「２」に設定した後、続くステップ２３２０〜ステップ２３７５までの処理を実行することで次のブロックであるブロック1(2)についての各種値の計算を実行する。
【０２１８】
このようにして、ステップ２３２０〜ステップ２３７５までの処理は、カウンタ値ｎの値が第１触媒５３のブロック数N1と等しくなるまで繰り返し実行される。これにより、第１触媒５３の最上流のブロック1(1)から最下流のブロック1(N1)までの各ブロック1(n)の流入酸素量Cgin1O2(n)、流出酸素量Cgout1O2(n)、酸素吸蔵量変化量δOSA1(n)、及び酸素吸蔵量OSA1(n)の値が順次算出されていく。また、ステップ２３７０の処理が繰り返し実行されることにより、第１触媒５３全体の酸素吸蔵量OSA1allも算出される。
【０２１９】
ステップ２３１５の処理が繰り返されることによりカウンタ値ｎの値が第１触媒５３のブロック数N1と等しくなると、ＣＰＵ７１はステップ２３８０にて「Ｙｅｓ」と判定してステップ２３８５に進み、燃料噴射量積算値mfr1の値を「０」に設定した後、ステップ２３９５を経由して図２４に示されたルーチンのステップ２４００に進む。
【０２２０】
図２４のルーチンは、第２触媒５４の各ブロック2毎の流出酸素量及び酸素吸蔵量等を算出するためのルーチンであって、ステップ２４０５にて、境界条件である第２触媒５４のブロック2(1）における流入酸素量Cgin2O2(1)として図２３のステップ２３６５にて算出済みの第１触媒５３の最下流のブロック1(N1)からの流出酸素量Cgout1O2(N1)を使用する点、及び図２３のステップ２３８５に対応するステップが存在しない点を除き同図２３のルーチンと同様であるので、ここではその詳細な説明を省略する。
【０２２１】
ＣＰＵ７１は、このようにして第２触媒５４の各ブロック2(n)の流入酸素量Cgin2O2(n)、流出酸素量Cgout2O2(n)、酸素吸蔵量変化量δOSA2(n)、酸素吸蔵量OSA2(n)、及び第２触媒５４全体の酸素吸蔵量OSA2allを算出し、ステップ２４９５を経由して図２５に示されたルーチンのステップ２５００に進む。
【０２２２】
図２５のルーチンは、第３触媒５５の各ブロック3毎の流出酸素量及び酸素吸蔵量等を算出するためのルーチンであって、ステップ２５０５にて、境界条件である第３触媒５５のブロック3(1）における流入酸素量Cgin3O2(1)として図２４のステップ２４６５にて算出済みの第２触媒５４の最下流のブロック2(N2)からの流出酸素量Cgout2O2(N2)を使用する点を除き同図２４のルーチンと同様であるので、ここではその詳細な説明を省略する。
【０２２３】
これにより、ＣＰＵ７１は、第３触媒５５の各ブロック3(n)の流入酸素量Cgin3O2(n)、流出酸素量Cgout3O2(n)、酸素吸蔵量変化量δOSA3(n)、酸素吸蔵量OSA3(n)、及び第３触媒５５全体の酸素吸蔵量OSA3allを算出し、ステップ２５９５にて本ルーチンを一旦終了する。
【０２２４】
次に、第１〜第３触媒５３〜５５の各々の各ブロック毎の酸素吸蔵量の値、及び第１〜第３触媒５３〜５５の各々の全体の酸素吸蔵量の値を初期化（クリア）する際の作動について説明する。ＣＰＵ７１は図２６にフローチャートにより示されたルーチンを所定時間の経過毎に実行するようになっている。
【０２２５】
従って、ＣＰＵ７１は所定のタイミングになると、ステップ２６００から処理を開始してステップ２６０５に進み、第１触媒下流空燃比センサ６７の出力voxs1の値が０．７（Ｖ）より大きいか否かをモニタする。このとき、第１触媒下流空燃比センサ６７の出力voxs1の値が０．７（Ｖ）より大きければ、即ち、第１触媒５３の下流空燃比が明白なリッチ空燃比であれば、同第１触媒５３内全体に吸蔵されている酸素量が「０」であることを意味するので、ＣＰＵ７１はステップ２６１０に進んで第１触媒５３の各ブロック1(n）（n＝1,2,・・・,N1)の酸素吸蔵量OSA1(n)を総べて「０」に設定するとともに、続くステップ２６１５にて第１触媒５３全体の酸素吸蔵量OSA1allの値を「０」に設定する。
【０２２６】
全く同様に、ＣＰＵ７１は、第２触媒下流空燃比センサ６８の出力voxs2の値が０．７（Ｖ）より大きいとき、これをステップ２６２０で判定してステップ２６２５及びステップ２６３０に進み、第２触媒５４の各ブロック2(n）（n＝1,2,・・・,N2)の酸素吸蔵量OSA2(n)を総べて「０」に設定するとともに、第２触媒５４全体の酸素吸蔵量OSA2allの値を「０」に設定する。
【０２２７】
また、全く同様に、ＣＰＵ７１は、第３触媒下流空燃比センサ６９の出力voxs3の値が０．７（Ｖ）より大きいとき、これをステップ２６３５で判定してステップ２６４０及びステップ２６４５に進み、第３触媒５５の各ブロック3(n）（n＝1,2,・・・,N3)の酸素吸蔵量OSA3(n)を総べて「０」に設定するとともに、第３触媒５５全体の酸素吸蔵量OSA3allの値を「０」に設定し、ステップ２６９５にて本ルーチンを一旦終了する。このようにして、第１〜第３触媒５３〜５５の各々の各ブロック毎の酸素吸蔵量の値、及び第１〜第３触媒５３〜５５の各々の全体の酸素吸蔵量の値が初期化される。
【０２２８】
以上、説明したように、本発明による第２実施形態に係る排気浄化装置は、内燃機関の排気通路に直列に介装された複数の触媒（第１触媒５３、第２触媒５４、第３触媒５５）と、前記複数の触媒の各酸素吸蔵能力を表す値（最大酸素吸蔵量Cmax1all,Cmax2all,Cmax3all)を取得する酸素吸蔵能力取得手段（図２２のステップ２２１０等）と、前記取得された酸素吸蔵能力を表す値に基づいて所定の酸素吸蔵能力よりも大きい酸素吸蔵能力を有すると判定される触媒のうち前記排気通路の最も上流に介装された触媒の排気浄化の状態を表す値（その触媒の酸素吸蔵量OSA1all,OSA2all,OSA3allの何れか）を取得する排気浄化状態取得手段（図２０、図２２、及び図２３〜図２６に示したルーチン等）と、前記取得された排気浄化の状態を表す値が所定の値となるように前記最も上流に配設された触媒に流入するガスの空燃比を制御する空燃比制御手段（図４、図５、及び図２１に示したルーチンにより達成される空燃比のフィードバック制御ルーチン）と、を備える。
【０２２９】
これによれば、排気浄化の状態を表す値（空燃比フィードバック制御に使用される酸素吸蔵量OSA1all,OSA2all,OSA3allのうちの何れか）は、取得された酸素吸蔵能力を表す値（最大酸素吸蔵量Cmax1all,Cmax2all,Cmax3all)に基づいて所定の酸素吸蔵能力（それぞれの最大酸素吸蔵量に対応する閾値Cth1,Cth2,Cth3）よりも大きい酸素吸蔵能力を有すると判定される触媒のうち前記排気通路の最も上流に介装された触媒の排気浄化の状態を表す値となるから、同最も上流の触媒に流入するガスの空燃比の変動が同排気浄化の状態を表す値に直ちに現れることはない。従って、上述した空燃比のハンチングが回避され、その結果、未燃成分や窒素酸化物等の有害成分の排出量の増大を回避することができる。また、前記最も上流に介装された触媒の排気浄化の状態を空燃比フィードバック制御に用いるから、同フィードバック制御の無駄時間が大きくなりすぎることも回避され、好適な空燃比制御が達成される。
【０２３０】
＜第２実施形態の第１変形例＞
次に、上記第２実施形態の第１変形例に係る排気浄化装置について説明する。この変形例は、第１触媒５３の最大酸素吸蔵量Cmax1（＝Cmax1all)が所定の閾値Cthを超えるとき第１触媒５３全体の酸素吸蔵量OSA1allを、第１触媒５３の最大酸素吸蔵量Cmax1は同所定の閾値Cthより小さいが第１触媒５３と第２触媒５４の各最大酸素吸蔵量の合計値（Cmax1+Cmax2＝Cmax1all+Cmax2all）が同所定の閾値Cthを超えるとき第１触媒５３全体と第２触媒５４全体の各酸素吸蔵量の合計値（OSA1all+OSA2all）を、また、第１触媒５３と第２触媒５４の各最大酸素吸蔵量の合計値（Cmax1+Cmax2）は同所定の閾値Cthより小さいが第１触媒５３全体と第２触媒５４全体と第３触媒５５全体の各最大酸素吸蔵量の合計値（Cmax1+Cmax2+Cmax3＝Cmax1all+Cmax2all+Cmax3all）が所定の閾値を超えるとき、これら三つの触媒の酸素吸蔵量の合計値（OSA1all+OSA2all+OSA3all）を、空燃比制御用酸素吸蔵量OSAallとして選択し、同選択した制御用酸素吸蔵量OSAallが所定の目標酸素吸蔵量となるように制御するものである。
【０２３１】
具体的に述べると、この排気浄化装置のＣＰＵ７１は、上記第２実施形態のＣＰＵ７１が実行する図２０に示したルーチンに代えて図２７に示したルーチンを所定時間の経過毎に実行する点においてのみ、同第２実施形態と異なっている。従って、以下、係る相違点を中心として簡単に説明する。なお、図２７において、図６及び図２０に示したステップと同一のステップには同一の符号を付している。
【０２３２】
ＣＰＵ７１は、所定のタイミングになると、ステップ２７００から処理を開始してステップ６０５に進み、第１触媒５３の最大酸素吸蔵量Cmax1が所定の閾値Cthより大きいか否かを判定し、同ステップ６０５にて「Ｙｅｓ」と判定したときはステップ２０１０に進んで制御用酸素吸蔵量OSAallに第１触媒５３全体の酸素吸蔵量OSA1allを設定する。次いで、ＣＰＵ７１はステップ２７０５に進んで目標酸素吸蔵量（所定の値）OSAallrefに第１の値OSAref1を設定し、ステップ２７９５に進んで本ルーチンを一旦終了する。なお、第１の値OSAref1は、第１触媒５３の最大酸素吸蔵量Cmax1の１／２としておく。
【０２３３】
一方、ＣＰＵ７１は、ステップ６０５にて「Ｎｏ」と判定したとき、ステップ６１５に進んで第１触媒５３の最大酸素吸蔵量Cmax1と第２触媒５４の最大酸素吸蔵量Cmax2の合計値（Cmax1+Cmax2）が所定の閾値Cthより大きいか否かを判定し、同ステップ６１５にて「Ｙｅｓ」と判定したときはステップ２７１０に進んで制御用酸素吸蔵量OSAallに第１触媒５３全体の酸素吸蔵量OSA1allと第２触媒５４全体の酸素吸蔵量OSA2allの和（OSA1all+OSA2all）を設定する。次いで、ＣＰＵ７１はステップ２７１５に進んで目標酸素吸蔵量OSAallrefに第２の値OSAref2を設定し、ステップ２７９５に進んで本ルーチンを一旦終了する。なお、第２の値OSAref2は、第１触媒５３の最大酸素吸蔵量Cmax1と第２触媒５４の最大酸素吸蔵量Cmax2の和（Cmax1+Cmax2）の１／２としておく。
【０２３４】
また、ＣＰＵ７１は、ステップ６１５にて「Ｎｏ」と判定したとき、ステップ６２５に進んで第１触媒〜第３触媒の各最大酸素吸蔵量の合計値（Cmax1+Cmax2+Cmax3）が同所定の閾値Cthより大きいか否かを判定し、同ステップ６２５にて「Ｙｅｓ」と判定したときはステップ２７２０に進んで制御用酸素吸蔵量OSAallに第１触媒５３全体の酸素吸蔵量OSA1allと第２触媒５４全体の酸素吸蔵量OSA2allと第３触媒５５全体の酸素吸蔵量OSA3allの和（OSA1all+OSA2all+OSA3all）を設定する。次いで、ＣＰＵ７１はステップ２７２５に進んで目標酸素吸蔵量OSAallrefに第３の値OSAref3を設定し、ステップ２７９５に進んで本ルーチンを一旦終了する。なお、第３の値OSAref3は、第１触媒５３〜第３触媒５５の各最大酸素吸蔵量の和（Cmax1+Cmax2+Cmax3）の１／２としておく。
【０２３５】
更に、ＣＰＵ７１は、ステップ６２５にて「Ｎｏ」と判定したとき、ステップ２０５０に進んで制御用酸素吸蔵量OSAallに一定値OSAintを設定するとともに、ステップ２０５５にて目標酸素吸蔵量OSAallrefに同一定値OSAintを設定し、ステップ２７９５に進んで本ルーチンを一旦終了する。このステップ２０５０及びステップ２０５５の処理により、制御用酸素吸蔵量OSAallと目標酸素吸蔵量OSAallrefとは等しくなるので、酸素吸蔵量に基づくサブフィードバック制御は事実上停止された状態となる。
【０２３６】
以上、説明したように、第２実施形態の第１変形例に係る排気浄化装置は、値ｎを自然数とするとき複数の触媒（第１触媒５３、第２触媒５４、第３触媒５５）のうちの最上流の触媒である第１番目の触媒（第１触媒５３）から第ｎ番目の触媒までで構成される触媒装置（即ち、第１触媒５３のみからなる触媒装置、第１触媒５３と第２触媒５４とからなる触媒装置、及び第１触媒〜第３触媒５３〜５５の３個の触媒からなる触媒装置）の酸素吸蔵能力を表す値（即ち、第１触媒５３の最大酸素吸蔵量Cmax1、第１触媒５３の最大酸素吸蔵量Cmax1と第２触媒５４の最大酸素吸蔵量Cmax2の和Cmax1+Cmax2、第１触媒５３，第２触媒５４，及び第３触媒５５の各最大酸素吸蔵量の和Cmax1+Cmax2+Cmax3）を取得する酸素吸蔵能力取得手段を備えている。
【０２３７】
更に、この排気浄化装置は、前記取得された酸素吸蔵能力を表す値に基づいて所定の酸素吸蔵能力よりも大きい酸素吸蔵能力を有すると判定される前記触媒装置のうち前記値ｎが最も小さい触媒装置の排気浄化の状態を表す値（OSA1all,OSA1all+OSA2all,又はOSA1all+OSA2all+OSA3all）を取得する排気浄化状態取得手段と、前記取得された排気浄化の状態を表す値が所定の値（OSAallref）となるように前記第１番目の触媒（第１触媒５３）に流入するガスの空燃比を制御する空燃比制御手段とを備えている。
【０２３８】
即ち、空燃比制御に使用されることになる触媒装置の排気浄化の状態を表す値（OSA1all,OSA1all+OSA2all,又はOSA1all+OSA2all+OSA3all）は、十分な酸素吸蔵能力を有している触媒装置の排気浄化の状態を表すから、第１触媒５３に流入するガスの空燃比の変動が同排気浄化の状態を表す値に直ちに現れることはない。従って、上述した空燃比のハンチングが回避され、その結果、未燃成分や窒素酸化物等の有害成分の排出量の増大を回避することができる。
【０２３９】
また、酸素吸蔵能力が大きい触媒装置の酸素吸蔵量を各触媒装置の最大酸素吸蔵量の略半分程度の量に維持できるので、酸素吸蔵能力を有効に利用でき、排ガスの浄化を効果的に行うことが可能となる。
【０２４０】
＜第２実施形態の第２変形例＞
次に、上記第２実施形態の第２変形例に係る排気浄化装置について説明する。この変形例は、主として、第３触媒５５及び第３触媒下流空燃比センサ６９を備えていない点、及びＣＰＵ７１が図２０に示したルーチンに代えて制御用酸素吸蔵量OSAallを選択するための図２８にフローチャートにより示したルーチンを実行する点等において、上記第２実施形態と異なっている。従って、以下、係る相違点を中心として説明する。
【０２４１】
ＣＰＵ７１は、制御用酸素吸蔵量OSAallを選択するにあたり、図２８に示したルーチンを所定時間の経過毎に実行する。従って、所定のタイミングになると、ＣＰＵ７１はステップ２８００から処理を開始し、ステップ２８０５に進んで第１触媒５３の最大酸素吸蔵量Cmax1が所定の閾値Cth1より大きいか否かを判定する。このとき、最大酸素吸蔵量Cmax1が所定の閾値Cth1より大きいと、ＣＰＵ７１はステップ２８０５からステップ２８１０に進んで制御用酸素吸蔵量OSAallに第１触媒５３全体の酸素吸蔵量OSA1allを設定し、続くステップ２８１５にて目標酸素吸蔵量OSAallrefに目標酸素吸蔵量OSA1allref（第１の値）を設定し、ステップ２８９５に進んで本ルーチンを一旦終了する。前記目標酸素吸蔵量OSA1allrefは、最大酸素吸蔵量Cmax1の１／２に設定しておく。
【０２４２】
一方、最大酸素吸蔵量Cmax1が所定の閾値Cth1より小さい（以下である）と、ＣＰＵ７１はステップ２８０５からステップ２８２５に進んで制御用酸素吸蔵量OSAallに第２触媒５３全体の酸素吸蔵量OSA2allを設定し、続くステップ２８３０にて目標酸素吸蔵量OSAallrefに目標酸素吸蔵量OSA2allref（第２の値）を設定し、ステップ２８９５に進んで本ルーチンを一旦終了する。前記目標酸素吸蔵量OSA2allrefは、最大酸素吸蔵量Cmax2の１／２に設定しておく。
【０２４３】
これにより、この第２変形例に係る排気浄化装置は、図２１に示したルーチンを実行することにより上記のように選択された酸素吸蔵量OSAallが上記のように設定された目標酸素吸蔵量OSAallrefに一致するようにサブフィードバック制御量vafsfbを求め、このサブフィードバック制御量vafsfbを図５に示したルーチンを実行することによりメインフィードバック制御量に反映させ、図４に示したルーチンを実行することにより最終燃料噴射量Ｆｉに反映させる。
【０２４４】
このように、第２実施形態の第２変形例に係る排気浄化装置は、第１触媒５３が十分な酸素吸蔵能力を有している場合には同第１触媒５３の酸素吸蔵量OSA1allが目標酸素吸蔵量OSAallref（＝OSA1allref）に一致するように機関に供給される混合気の空燃比のフィードバック制御を実行し、第１触媒５３が十分な酸素吸蔵能力を有していない場合には、同第１触媒５３よりも劣化の進行程度が遅いために十分な酸素吸蔵能力を有していると考えられる第２触媒５４の酸素吸蔵量OSA1allが目標酸素吸蔵量OSAallref（＝OSA2allref）に一致するように同空燃比のフィードバック制御を実行する。
【０２４５】
従って、空燃比のフィードバック制御用として使用される制御用酸素吸蔵量OSAallには、第１触媒５３の上流の空燃比の変動が直ちに現れることがないので、空燃比のフィードバック制御の破綻を招くことなく同制御用酸素吸蔵量OSAallを目標酸素吸蔵量OSAallrefに一致させることができる。
【０２４６】
＜第３実施形態＞
次に、本発明による第３実施形態に係る排気浄化装置について説明する。この排気浄化装置は、上述した触媒モデルにおける所定のブロックから流出する特定成分の量に関する値（ここでは、流出酸素量CgoutO2）を所定値（ここでは、「０」であるが、「０」を含む所定の幅−β１〜＋β２であってもよい。）に維持する制御（空燃比フィードバック制御）を行う点において、主として第２実施形態に係る排気浄化装置と異なっている。
【０２４７】
具体的に述べると、この第３実施形態に係るＣＰＵ７１は、第２実施形態のＣＰＵ７１が実行する図２０及び図２１に示したルーチンを除く総べてのルーチンを実行するとともに、図２０及び図２１に代わる図２９及び図３０に示したルーチンをそれぞれ所定時間の経過毎に実行するようになっている。従って、以下、図２９及び図３０に示したルーチンを参照しながら、本排気浄化装置の作動を説明する。
【０２４８】
ＣＰＵ７１は、所定のタイミングになると、図２９のステップ２９００から処理を開始し、ステップ２９０２に進んで判定用最大酸素吸蔵量Cmax1hに「０」を設定し、続くステップ２９０４にてカウンタ値ｎの値を「０」に設定する。次いで、ＣＰＵ７１はステップ２９０６に進み、カウンタ値ｎの値を「１」だけ増大してステップ２９０８に進み、現時点の判定用最大酸素吸蔵量Cmax1hに、その時点で求められている第１触媒５３のブロック1(n)における最大酸素吸蔵量Cmax1(n)（この時点ではカウンタ値ｎの値は「１」であるから、ブロック1(1)における最大酸素吸蔵量Cmax1(1)）を加えて新たな判定用最大酸素吸蔵量Cmax1hを求める。
【０２４９】
次に、ＣＰＵ７１はステップ２９１０に進み、判定用最大酸素吸蔵量Cmax1hが所定の閾値Cthより大きいか否かを判定する。このとき、判定用最大酸素吸蔵量Cmax1hが所定の閾値Cthより小さければ、ＣＰＵ７１はステップ２９１０にて「Ｎｏ」と判定してステップ２９１２に進みカウンタ値ｎの値が第１触媒５３のブロック数N1と等しいか否かを判定する。
【０２５０】
現時点ではカウンタ値ｎの値は「１」である。従って、ＣＰＵ７１はステップ２９１２にて「Ｎｏ」と判定し、再びステップ２９０６に戻ってカウンタ値ｎの値を「１」だけ増大し、ステップ２９０８及びステップ２９１０の処理を実行する。この結果、判定用最大酸素吸蔵量Cmax1hは、第１触媒５３の最上流のブロックである第１番目のブロックと第２番目のブロックの最大酸素吸蔵量の積算値Cmax1(1)+Cmax1(2)となる。そして、この積算値Cmax1(1)+Cmax1(2)が閾値Cthを超えなければＣＰＵ７１はステップ２９１０から再びステップ２９１２に進み、更に、カウンタ値ｎの値がブロック数N1と等しくなければ再びステップ２９０６にてカウント値ｎの値を「１」だけ増大し、ステップ２９０８の処理を実行する。この結果、その時点の判定用最大酸素吸蔵量Cmax1h（この時点ではCmax1(1)+Cmax1(2)）にブロック1(n)の最大酸素吸蔵量Cmax1(n)（この時点ではｎ＝３であるあるからCmax1(3)）が加算され、新たな判定用最大酸素吸蔵量Cmax1h（＝Cmax1(1)+Cmax1(2)+Cmax1(3)）が求められる。
【０２５１】
このような処理は、判定用最大酸素吸蔵量Cmax1hが閾値Cthを超えない限り繰り返し行われる。従って、判定用最大酸素吸蔵量Cmax1hは、第１触媒５３の最上流のブロックである第１番目のブロックから第ｎ番目のブロックまでの各ブロック1(n)の最大酸素吸蔵量Cmax1(n)の積算値（合計値）として求められる。
【０２５２】
このような処理の実行中、判定用最大酸素吸蔵量Cmax1hが所定の閾値Cthより大きくなった場合、ＣＰＵ７１はステップ２９１０にて「Ｙｅｓ」と判定してステップ２９１４に進み、制御用流出酸素量CgoutO2cに第１触媒５３の第ｎ番目のブロックの流出酸素量Cgout1O2(n)を設定し、ステップ２９９５に進んで本ルーチンを一旦終了する。
【０２５３】
また、第１触媒５３の第１番目のブロックから第N1番目のブロックの総べてのブロックの各最大酸素吸蔵量Cmax1(n)の積算値（即ち、第１触媒５３全体の最大酸素吸蔵量Cmax1all（＝Cmax1））が所定の閾値Cthより小さいとき、ＣＰＵ７１はステップ２９１０にて「Ｙｅｓ」と判定することはなく、カウンタ値ｎの値がN1となったときにステップ２９１２にて「Ｙｅｓ」と判定し、ステップ２９１６に進んで判定用最大酸素吸蔵量Cmax2hに第１触媒５３全体の最大酸素吸蔵量Cmax1allを設定する。次いで、ＣＰＵ７１は、ステップ２９１８にてカウンタ値ｎの値を「０」に設定し、ステップ２９２０以降に進む。
【０２５４】
ステップ２９２０〜ステップ２９２６までの処理は、ステップ２９０６〜ステップ２９１２までの処理と同様である。簡単に説明すると、ＣＰＵ７１は、ステップ２９２０及びステップ２９２２にて第１触媒５３全体の最大酸素吸蔵量Cmax1allに第２触媒５４の最上流のブロック（第１番目のブロック）から同第２触媒５４の第ｎ番目のブロックまでの各ブロック2(n)の最大酸素吸蔵量Cmax2(n)の積算値を加えた値を、判定用最大酸素吸蔵量Cmax2hとして求める。第２触媒５４の第ｎ番目となるブロック2(n)は第１触媒５３の最上流のブロックから数えて（N1+n）番目のブロックということになる。従って、（N1+n)をｍとするとき、判定用最大酸素吸蔵量Cmax2hは、第１触媒５３及び第２触媒５４を一つの触媒装置とみなしたときの最上流のブロックである第１番目のブロックから第ｍ番目のブロックまでのブロックにより構成される触媒装置上流部の各ブロックの最大酸素吸蔵量の積算値ということになる。
【０２５５】
そして、ＣＰＵ７１は、判定用最大酸素吸蔵量Cmax2hが所定の閾値Cthより大きくなった場合、ステップ２９２４にて「Ｙｅｓ」と判定してステップ２９２８に進み、制御用流出酸素量CgoutO2cに第２触媒５４の第ｎ番目のブロックの流出流出酸素量Cgout2O2(n)を設定し、ステップ２９９５に進んで本ルーチンを一旦終了する。
【０２５６】
同様に、第１触媒５３全体の最大酸素吸蔵量Cmax1allと第２触媒５４全体の最大酸素吸蔵量Cmax2allの和（Cmax1all+Cmax2all）が所定の閾値Cthより小さいとき、ＣＰＵ７１はステップ２９２４にて「Ｙｅｓ」と判定することはなく、カウンタ値ｎの値が第２触媒５４のブロック数N2となったときにステップ２９２６にて「Ｙｅｓ」と判定し、ステップ２９３０に進んで判定用最大酸素吸蔵量Cmax3hに第１触媒５３全体の最大酸素吸蔵量Cmax1allと第２触媒５４全体の最大酸素吸蔵量Cmax2allの和（Cmax1all+Cmax2all）を設定する。次いで、ＣＰＵ７１は、ステップ２９３２にてカウンタ値ｎの値を「０」に設定し、ステップ２９３４以降に進む。
【０２５７】
ステップ２９３４〜ステップ２９４０までの処理は、ステップ２９０６〜ステップ２９１２までの処理と同様である。簡単に説明すると、ＣＰＵ７１はステップ２９３４及びステップ２９３６にて第１触媒５３全体と第２触媒５４全体の各最大酸素吸蔵量の和(Cmax1all+Cmax2all）に第３触媒５５の最上流のブロック（第１番目のブロック）から同第３触媒５５の第ｎ番目のブロックまでの各ブロック3(n)の最大酸素吸蔵量Cmax3(n)の積算値を加えた値を、判定用最大酸素吸蔵量Cmax3hとして求める。第３触媒５５の第ｎ番目となるブロック3(n)は、第１触媒５３の最上流のブロックから数えて（N1+N2+n）番目のブロックということになる。従って、（N1+N2+n）をｐとするとき、判定用最大酸素吸蔵量Cmax3hは、第１触媒５３、第２触媒５４、及び第３触媒５５を一つの触媒装置とみなしたときの最上流のブロックである第１番目のブロックから第ｐ番目のブロックまでのブロックにより構成される触媒装置上流部の各ブロックの最大酸素吸蔵量の積算値ということになる。
【０２５８】
そして、ＣＰＵ７１は、判定用最大酸素吸蔵量Cmax3hが所定の閾値Cthより大きくなった場合、ステップ２９３８にて「Ｙｅｓ」と判定してステップ２９４２に進み、制御用流出酸素量CgoutO2cに第３触媒５５の第ｎ番目のブロックの流出酸素濃度Cgout3O2(n)を設定し、ステップ２９９５に進んで本ルーチンを一旦終了する。
【０２５９】
また、第１触媒５３〜第３触媒５５の各最大酸素吸蔵量の和（Cmax1all+Cmax2all+Cmax3all）が所定の閾値Cthより小さいとき、ＣＰＵ７１はステップ２９３８にて「Ｙｅｓ」と判定することはなく、カウンタ値ｎの値が第３触媒５５のブロック数N3となったときステップ２９４０にて「Ｙｅｓ」と判定し、この場合は上記ステップ２９４２を経由してステップ２９９５に進み、本ルーチンを一旦終了する。
【０２６０】
このように、ｎを自然数とし、第１触媒５３〜第３触媒５５を一つの触媒装置とみなしたとき、その触媒装置の第１番目のブロックから第ｎ番目のブロックまでのブロックにより構成される触媒装置上流部の各ブロックの最大酸素吸蔵量の積算値（判定用最大酸素吸蔵量）が所定の閾値Cthを超える触媒装置上流部のうち、前記値ｎが最も小さい触媒装置上流部の最下流のブロック（第１触媒５３の第１番目のブロックから数えて第ｎ番目のブロック）の流出酸素量が制御用流出酸素量CgoutO2cとして設定される。
【０２６１】
次に、サブフィードバック制御量vafsfbを求める際の作動について説明する。ＣＰＵ７１は、図３０に示したルーチンを所定時間の経過毎に実行している。図３０において、図７に示したルーチンのステップと同一のステップには同一の符号を付し、その詳細な説明を省略する。
【０２６２】
ＣＰＵ７１は、このルーチンの実行により、前記決定・選択した制御用流出酸素量CgoutO2cと所定の値である目標酸素量Cgoutref（この例では、目標酸素量Cgoutref＝０）の偏差を求め（ステップ３００５）、この偏差をＰＩ処理してサブフィードバック制御量vafsfbを求める（ステップ７１５，７２０）。この結果、ＣＰＵ７１が図４及び図５に示したルーチンを実行することにより、制御用流出酸素量CgoutO2cと所定の値である目標酸素量Cgoutrefとが一致せしめられるように第１触媒５３に流入するガスの空燃比が制御される。
【０２６３】
以上、説明したように、第３実施形態によれば、値ｎを自然数とするとき単数又は複数の触媒（第１〜第３触媒５３〜５５）からなる触媒装置の最上流のブロックである第１番目のブロックから第ｎ番目のブロックまでのブロックにより構成される触媒装置上流部の各ブロックの最大酸素吸蔵量を積算して同触媒装置上流部の最大酸素吸蔵量積算値（判定用酸素吸蔵量）を求める積算値算出手段（ステップ２９０８、２９２２、２９３６等）と、前記最大酸素吸蔵量積算値が所定の閾値Cthより大きい値をとる前記触媒装置上流部のうち前記値ｎが最も小さい第ｎ番目のブロックまでからなる前記触媒装置上流部の第ｎ番目のブロックの排気浄化の状態を表す値（各触媒内における反応を考慮して構築された前記触媒モデルに基づいて計算される第ｎ番目のブロックの流出酸素濃度Cgout1O2(n),Cgout2O2(n),及びCgout3O2(n)の何れか）を制御用流出酸素量CgoutO2cとして取得・選択する排気浄化状態取得手段（図２３〜図２５、及び図２９に示したルーチン等）とを備える。
【０２６４】
また、この排気浄化装置は、前記取得された排気浄化の状態を表す値（制御用流出酸素量CgoutO2c）が所定の値（Cgoutref）となるように前記触媒装置に流入するガスの空燃比（実際には機関に供給される混合気の空燃比）を制御する空燃比制御手段（図４、図５、及び図３０に示したルーチン等）とを備えている。
【０２６５】
この結果、常に所定の酸素吸蔵能力（所定の閾値Cth以上の最大酸素吸蔵量）を有している触媒装置上流部を介して取得される排気浄化の状態（上記第ｎ番目のブロックの流出酸素濃度である制御用流出酸素量CgoutO2c）に基づいて空燃比のフィードバック制御が行われることとなるので、同排気浄化の状態を、第１触媒５３に流入するガスの空燃比のハンチングを回避しながら所望の値に安定して制御することが可能となり、その結果、排ガスを効果的に浄化することができる。
【０２６６】
＜第３実施形態の変形例＞
次に、上記第３実施形態の変形例に係る排気浄化装置について説明する。この変形例は、第３実施形態の排気浄化装置が上述した触媒装置の所定のブロックの流出酸素濃度CgoutO2を所定値に維持する制御を行っていたのに対し、最大酸素吸蔵量が閾値Cthを超える第１番目のブロックから第ｎ番目のブロックまでで構成される触媒装置上流部の各ブロックの酸素吸蔵量の積算値（総和）が所定の目標酸素吸蔵量（目標値）となるように制御を行う点のみにおいて、同第３実施形態に係る排気浄化装置と異なっている。
【０２６７】
具体的に述べると、この変形例に係るＣＰＵ７１は、第３実施形態のＣＰＵ７１が実行する図２９及び図３０に示したルーチンに代えて、図３１及び図３２に示したルーチンをそれぞれ所定時間の経過毎に実行するようになっている。なお、図３１及び図３２のルーチンのステップにおいて、先に説明したステップと同一のステップには同先に示したステップと同一の符号を付し、その詳細な説明を省略する。
【０２６８】
ＣＰＵ７１は、図３１に示した制御用酸素吸蔵量OSAcを決定するルーチンを所定時間の経過毎に繰り返し実行し、上述した判定用最大酸素吸蔵量Cmax1hが所定の閾値Cthより大きくなった場合、ステップ２９１０にて「Ｙｅｓ」と判定してステップ３１０２に進み、制御用酸素吸蔵量OSAcに第１触媒５３の第１番目のブロックから第ｎ番目のブロックまでの各ブロックjの酸素吸蔵量OSA1(j)の積算値ΣOSA1(j)を設定する。次いで、ＣＰＵ７１はステップ３１０４に進み、目標酸素吸蔵量OSArefに第１番目のブロックから第ｎ番目のブロックまでの各ブロックjの最大酸素吸蔵量Cmax1(j)の積算値ΣCmax1(j)の１／２を設定し、ステップ２９９５に進んで本ルーチンを一旦終了する。
【０２６９】
同様に、ＣＰＵ７１は、上述した判定用最大酸素吸蔵量Cmax2hが所定の閾値Cthより大きくなった場合、ステップ２９２４にて「Ｙｅｓ」と判定してステップ３１０６に進み、第１触媒５３の全体の酸素吸蔵量OSA1allに第２触媒５４の第１番目のブロックから第ｎ番目のブロックまでの各ブロックjの酸素吸蔵量OSA2(j)の積算値ΣOSA2(j)を加えた値を制御用酸素吸蔵量OSAcとして設定する。次いで、ＣＰＵ７１はステップ３１０８に進み、第１触媒５３の全体の最大酸素吸蔵量Cmax1allに第２触媒５４の第１番目のブロックから第ｎ番目のブロックまでの各ブロックjの最大酸素吸蔵量Cmax2(j)の積算値ΣCmax2(j)を加えた値の半分の値を目標酸素吸蔵量OSArefとして設定し、ステップ２９９５に進んで本ルーチンを一旦終了する。
【０２７０】
同様に、ＣＰＵ７１は、上述した判定用最大酸素吸蔵量Cmax3hが所定の閾値Cthより大きくなった場合、ステップ２９３８にて「Ｙｅｓ」と判定してステップ３１１０に進み、第１触媒５３と第２触媒５４の各酸素吸蔵量の和（OSA1all+OSA2all）に第３触媒５５の第１番目のブロックから第ｎ番目のブロックまでの各ブロックjの酸素吸蔵量OSA3(j)の積算値ΣOSA3(j)を加えた値を制御用酸素吸蔵量OSAcとして設定する。次いで、ＣＰＵ７１はステップ３１１２に進み、第１触媒５３及び第２触媒５４の各最大酸素吸蔵量の和（Cmax1all+Cmax2all）に第３触媒５５の第１番目のブロックから第ｎ番目のブロックまでの各ブロックjの最大酸素吸蔵量Cmax3(j)の積算値ΣCmax3(j)を加えた値の半分の値を目標酸素吸蔵量OSArefとして設定し、ステップ２９９５に進んで本ルーチンを一旦終了する。以上により、制御用酸素吸蔵量OSAc及び目標酸素吸蔵量OSArefが決定される。
【０２７１】
また、ＣＰＵ７１は、図３１に示したルーチンを所定時間の経過毎に実行し、制御用酸素吸蔵量OSAcを目標酸素吸蔵量OSArefと等しくさせるためのサブフィードバック制御量vafsfbを、制御用酸素吸蔵量OSAc及び目標酸素吸蔵量OSArefの偏差をＰＩ処理することにより求める。このサブフィードバック制御量vafsfbの求め方は他の実施形態におけるサブフィードバック制御量vafsfbの求め方と同様であるので、詳細な説明を省略する。
【０２７２】
以上、説明したように、第３実施形態の変形例によれば、値ｎを自然数とするとき単数又は複数の触媒（第１〜第３触媒５３〜５５）からなる触媒装置の最上流のブロックである第１番目のブロックから第ｎ番目のブロックまでのブロックにより構成される触媒装置上流部の各ブロックの最大酸素吸蔵量を積算して同触媒装置上流部の最大酸素吸蔵量積算値（判定用酸素吸蔵量）を求める積算値算出手段（ステップ２９０８、２９２２、２９３６等）と、前記最大酸素吸蔵量積算値が所定の閾値Cthより大きい値をとる前記触媒装置上流部のうち前記値ｎが最も小さい第ｎ番目のブロックまでからなる前記触媒装置上流部の排気浄化の状態を表す値（酸素吸蔵量ΣOSA1(j), OSA1all+ΣOSA2(j), 及びOSA1all+OSA2all+ΣOSA3(j)）を制御用酸素吸蔵量OSAcとして取得・選択する排気浄化状態取得手段（図２３〜図２５、及び図３１に示したルーチン等）とを備える。
【０２７３】
また、この排気浄化装置は、前記取得された排気浄化の状態を表す値（制御用酸素吸蔵量OSAc）が所定の値（OSAref）となるように前記触媒装置に流入するガスの空燃比を制御する空燃比制御手段（図４、図５、及び図３２に示したルーチン等）とを備えている。
【０２７４】
この結果、常に所定の酸素吸蔵能力（所定の閾値Cth以上の最大酸素吸蔵量）を有している触媒装置上流部を介して取得される排気浄化の状態（制御用酸素吸蔵量OSAc）に基づいて第１触媒５３に流入するガスの空燃比のフィードバック制御が行われることとなるので、前記排気浄化の状態を同空燃比のハンチングを回避しながら所望の値に安定して制御することが可能となり、その結果、排ガスを効果的に浄化することができる。
【０２７５】
以上、説明したように、本発明による各実施形態及びその変形例によれば、制御の破綻を来さない酸素吸蔵能力を有する触媒（触媒装置）の全部又は上流部を介して得られる空燃比センサ出力、或いは、同触媒（触媒装置）の全部又は上流部の排気浄化の状態を表す値が所定の目標値となるように第１触媒５３に流入するガスの空燃比が制御されるので、排気浄化性能を良好に維持することができる。また、空燃比の制御に使用する空燃比センサよりも下流、又は排気浄化の状態を取得した位置よりも下流に位置する触媒（の部分）を予備的な触媒として使用することもできるので、流出する有害排気成分をより低減することができる。
【０２７６】
なお、本発明は上記実施形態に限定されることはなく、本発明の範囲内において種々の変形例を採用することができる。例えば、上記第２実施形態の第２変形例の図２８に示したルーチンのステップ２８２５において、第１触媒５３の酸素吸蔵量OSA1allと第２触媒５４の酸素吸蔵量OSA1allの和（OSA1all+OSA2all）を制御用酸素吸蔵量OSAallとして設定してもよい。この場合、ステップ２８３０の目標酸素吸蔵量OSA2allref（第２の値）は、第１触媒の最大酸素吸蔵量Cmax1と第２触媒の最大酸素吸蔵量Cmax2の和の１／２（＝（Cmax1+Cmax2)／２）とすることが好適である。
【０２７７】
また、同じく図２８に示したルーチンのステップ２８１０において、第１触媒５３から流出する酸素量（第１触媒５３内における反応を考慮して構築された前記触媒モデルに基づいて計算される同第１触媒５３の最下流のブロックの流出酸素量、即ち第１触媒５３の排気浄化の状態を表す値）Cgout1O2(N1)を制御用流出酸素量CgoutO2cとして設定し、ステップ２８２５において第２触媒５４から流出する酸素量（第２触媒５４内における反応を考慮して構築された前記触媒モデルに基づいて計算される同第２触媒５４の最下流のブロックの流出酸素量、即ち第２触媒５４の排気浄化の状態を表す値）Cgout2O2(N2)を制御用流出酸素量CgoutO2cとして設定するとともに、ステップ２８１５及びステップ２８３０を省略してもよい。この場合、サブフィードバック制御は、図３０に示したルーチンを採用する。
【０２７８】
これにより、第１触媒５３の酸素吸蔵能力が所定の能力より大きいとき同第１触媒５３から流出する特定成分（この場合、酸素）の量に応じた値を所定の値とする空燃比フィードバック制御が、また、第１触媒５３の酸素吸蔵能力が所定の能力より小さいとき同第２触媒５４から流出する特定成分（この場合、酸素）の量に応じた値を同所定の値とする空燃比フィードバック制御が達成される。
【図面の簡単な説明】
【図１】  本発明の第１実施形態に係る排気浄化装置を内燃機関に適用したシステムの概略図である。
【図２】  図１に示した最上流空燃比センサの出力電圧と空燃比との関係を示したマップである。
【図３】  図１に示した第１触媒下流空燃比センサ、第２触媒下流空燃比センサ、及び第３触媒下流空燃比センサの出力電圧と空燃比との関係を示したマップである。
【図４】  図１に示したＣＰＵが実行する燃料噴射量計算のためのルーチンを示したフローチャートである。
【図５】  図１に示したＣＰＵが実行する空燃比フィードバック補正量を計算するためのルーチンを示したフローチャートである。
【図６】  図１に示したＣＰＵが実行するサブフィードバック制御量を求めるために使用される制御用空燃比センサ出力を選択（決定）するためのルーチンを示したフローチャートである。
【図７】  図１に示したＣＰＵが実行するサブフィードバック制御量を求めるためのルーチンを示したフローチャートである。
【図８】  図１に示したＣＰＵが実行する最大酸素吸蔵量取得制御を開始するか否かを決定するためのルーチンを示したフローチャートである。
【図９】  図１に示したＣＰＵが実行する第１モードのルーチンを示したフローチャートである。
【図１０】  図１に示したＣＰＵが実行する第２モードのルーチンを示したフローチャートである。
【図１１】  図１に示したＣＰＵが実行する第３モードのルーチンを示したフローチャートである。
【図１２】  図１に示したＣＰＵが実行する第４モードのルーチンを示したフローチャートである。
【図１３】  図１に示したＣＰＵが実行する酸素吸蔵量を算出するためのルーチンを示したフローチャートである。
【図１４】  図１に示したＣＰＵが実行する最大酸素吸蔵量を算出するためのルーチンを示したフローチャートである。
【図１５】  本発明の第１実施形態の変形例に係る排気浄化装置のＣＰＵが実行する制御用空燃比センサ出力を選択（決定）するためのルーチンを示したフローチャートである。
【図１６】  本発明の排気浄化装置が採用する触媒モデルを模式的に示した図である。
【図１７】  本発明の排気浄化装置が採用する触媒モデルの特定領域に注目したときの同特定領域における酸素吸蔵・放出反応に関係する特定成分の収支を示した図である。
【図１８】  本発明の排気浄化装置が採用する触媒モデルが対象とする触媒全体の最大酸素吸蔵量から同触媒の各ブロック毎の最大酸素吸蔵量の分布を求めるためのマップである。
【図１９】  本発明の排気浄化装置が採用する触媒モデルを第１，第２，第３触媒にそれぞれ適用した場合の模式図である。
【図２０】  本発明の第２実施形態に係る排気浄化装置のＣＰＵが実行する、サブフィードバック制御量を求めるために使用される制御用酸素吸蔵量及び目標酸素吸蔵量を決定・選択するためのルーチンを示したフローチャートである。
【図２１】  本発明の第２実施形態に係る排気浄化装置のＣＰＵが実行するサブフィードバック制御量を求めるためのルーチンを示したフローチャートである。
【図２２】  本発明の第２実施形態に係る排気浄化装置のＣＰＵが実行する各触媒の最大酸素吸蔵量及び各ブロックの最大酸素吸蔵量を求めるためのルーチンを示したフローチャートである。
【図２３】  本発明の第２実施形態に係る排気浄化装置のＣＰＵが実行する第１触媒の各ブロック毎の流出酸素量、及び酸素吸蔵量等を算出するためのルーチンを示したフローチャートである。
【図２４】  本発明の第２実施形態に係る排気浄化装置のＣＰＵが実行する第２触媒の各ブロック毎の流出酸素量、及び酸素吸蔵量等を算出するためのルーチンを示したフローチャートである。
【図２５】  本発明の第２実施形態に係る排気浄化装置のＣＰＵが実行する第３触媒の各ブロック毎の流出酸素量、及び酸素吸蔵量等を算出するためのルーチンを示したフローチャートである。
【図２６】  本発明の第２実施形態に係る排気浄化装置のＣＰＵが実行する第１，第２，第３触媒の各々酸素吸蔵量及びこれらの触媒の各ブロック毎の酸素吸蔵量をクリアするためのルーチンを示したフローチャートである。
【図２７】  本発明の第２実施形態の第１変形例に係る排気浄化装置のＣＰＵが実行する、サブフィードバック制御量を求めるために使用される制御用酸素吸蔵量及び目標酸素吸蔵量を決定・選択するためのルーチンを示したフローチャートである。
【図２８】  第２実施形態の第２変形例に係る排気浄化装置のＣＰＵが実行するサブフィードバック制御量を求めるために使用される制御用酸素吸蔵量及び目標酸素吸蔵量を決定・選択するためのルーチンを示したフローチャートである。
【図２９】  本発明による第３実施形態に係る排気浄化装置のＣＰＵが実行するサブフィードバック制御量を求めるために使用される制御用流出酸素量を決定・選択するためのルーチンを示したフローチャートである。
【図３０】  本発明による第３実施形態に係る排気浄化装置のＣＰＵが実行するサブフィードバック制御量を求めるためのルーチンを示したフローチャートである。
【図３１】  第３実施形態の変形例に係る排気浄化装置のＣＰＵが実行するサブフィードバック制御量を求めるために使用される制御用酸素吸蔵量及び目標酸素吸蔵量を決定・選択するためのルーチンを示したフローチャートである。
【図３２】  第３実施形態の変形例に係る排気浄化装置のＣＰＵが実行するサブフィードバック制御量を求めるためのルーチンを示したフローチャートである。
【符号の説明】
１０…内燃機関、２５…燃焼室、３９…インジェクタ、５２…エキゾーストパイプ（排気管）、５３…第１触媒、５４…第２触媒、５５…第３触媒、６６…最上流空燃比センサ、６７…第１触媒下流空燃比センサ、６８…第２触媒下流空燃比センサ、６９…第３触媒下流空燃比センサ、７０…電気制御装置、７１…ＣＰＵ。
【図１】
0004103522.tif 000005
【図２】
0004103522.tif 000006
【図３】
0004103522.tif 000007
【図４】
0004103522.tif 000008
【図５】
0004103522.tif 000009
【図６】
0004103522.tif 000010
【図７】
0004103522.tif 000011
【図８】
0004103522.tif 000012
【図９】
0004103522.tif 000013
【図１０】
0004103522.tif 000014
【図１１】
0004103522.tif 000015
【図１２】
0004103522.tif 000016
【図１３】
0004103522.tif 000017
【図１４】
0004103522.tif 000018
【図１５】
0004103522.tif 000019
【図１６】
0004103522.tif 000020
【図１７】
0004103522.tif 000021
【図１８】
0004103522.tif 000022
【図１９】
0004103522.tif 000023
【図２０】
0004103522.tif 000024
【図２１】
0004103522.tif 000025
【図２２】
0004103522.tif 000026
【図２３】
0004103522.tif 000027
【図２４】
0004103522.tif 000028
【図２５】
0004103522.tif 000029
【図２６】
0004103522.tif 000030
【図２７】
0004103522.tif 000031
【図２８】
0004103522.tif 000032
【図２９】
0004103522.tif 000033
【図３０】
0004103522.tif 000034
【図３１】
0004103522.tif 000035
【図３２】
0004103522.tif 000036