(57)【要約】【課題】触媒上流側の空燃比センサ出力値の目標値からの偏差に基づく値の時間積分値に少なくとも基づいて空燃比を不必要に過補正することがないように同空燃比をフィードバック制御すること。【解決手段】この排気浄化装置は、補正後基本燃料噴射量Ｆｂａｓｅを補正して空燃比フィードバック制御を行うためのフィードバック制御量ＤＦｉを、ＤＦｉ＝Ｇｐ・ＤＦｃ＋Ｇｉ・（ＯＳＡａｌｌ−（Ｃｍａｘａｌｌ／２））なる式に基づいて算出する。この結果、比例項であるＧｐ・ＤＦｃにより筒内燃料供給量偏差ＤＦｃが「０」になるように制御されるとともに、所定の範囲内の値に制限される積分項であるＧｉ・（ＯＳＡａｌｌ−（Ｃｍａｘａｌｌ／２））により、第１触媒５３に流入する排ガスの空燃比ａｂｙｆｓの理論空燃比からの偏差の収支がゼロになるように制御されるとともに第１触媒５３の酸素吸蔵量ＯＳＡａｌｌが目標酸素吸蔵量（最大酸素吸蔵量Ｃｍａｘａｌｌの半分の量）になるように制御される。【選択図】  図５
2004251123.tif 000002
【特許請求の範囲】
【請求項１】
内燃機関の排気通路に配設された触媒と、
前記触媒よりも上流の前記排気通路に配設された空燃比センサと、
少なくとも前記空燃比センサの出力値と所定の目標値との偏差に基づく値の時間積分値に基づいてフィードバック制御量を算出するフィードバック制御量算出手段と、
前記フィードバック制御量に基づいて前記触媒に流入するガスの空燃比をフィードバック制御する空燃比制御手段と、を備えた内燃機関の排気浄化装置において、
前記フィードバック制御量算出手段は、前記偏差に基づく値の時間積分値が所定の範囲を超える場合、同偏差に基づく値の時間積分値の代わりに同所定の範囲内の値に基づいて前記フィードバック制御量を算出するように構成された内燃機関の排気浄化装置。
【請求項２】
請求項１に記載の内燃機関の排気浄化装置であって、
少なくとも前記偏差に基づく値の時間積分値に基づいて前記触媒が吸蔵している酸素量である酸素吸蔵量を推定する酸素吸蔵量推定手段を備え、
前記フィードバック制御量算出手段は、前記偏差に基づく値の時間積分値に基づく値としての前記推定された酸素吸蔵量に基づいて前記フィードバック制御量を算出するように構成された内燃機関の排気浄化装置。
【請求項３】
請求項２に記載の内燃機関の排気浄化装置において、
前記フィードバック制御量算出手段は、所定の目標酸素吸蔵量と前記推定された酸素吸蔵量との偏差に基づいて前記フィードバック制御量を算出するように構成された内燃機関の排気浄化装置。
【請求項４】
請求項２又は請求項３に記載の内燃機関の排気浄化装置において、
前記酸素吸蔵量推定手段は、前記触媒内における酸素吸蔵反応の速度を考慮して構築された触媒モデルに基づいて前記酸素吸蔵量を推定するように構成された内燃機関の排気浄化装置。
【請求項５】
請求項３又は請求項４に記載の内燃機関の排気浄化装置であって、
前記内燃機関の運転状態に応じて目標空燃比に相当する前記所定の目標値を設定する目標値設定手段を備え、
前記フィードバック制御量算出手段は、
更に前記空燃比センサの出力値と前記所定の目標値との偏差に基づく値に基づいて前記フィードバック制御量を算出するように構成されているとともに、
前記所定の目標値が理論空燃比と異なる空燃比に相当する値に設定されている場合、前記所定の目標酸素吸蔵量と前記推定された酸素吸蔵量との偏差の代わりに前記空燃比センサの出力値と同所定の目標値との偏差に基づく値の時間積分値に基づいて前記フィードバック制御量を算出するように構成された内燃機関の排気浄化装置。
【請求項６】
請求項１乃至請求項５のいずれか一項に記載の内燃機関の排気浄化装置であって、
前記排気浄化装置が適用される内燃機関は、指示に応じて燃料噴射を行う燃料噴射手段を備えていて、
前記空燃比制御手段は、前記内燃機関に供給される混合気の空燃比を前記所定の目標値に相当する目標空燃比とするために必要な基本燃料噴射量を同内燃機関の運転状態に応じて決定するとともに同基本燃料噴射量を前記フィードバック制御量に基づいて補正することにより得られる燃料噴射量の燃料の噴射指示を前記燃料噴射手段に対して行うことで前記触媒に流入するガスの空燃比をフィードバック制御するように構成されていて、
前記フィードバック制御量算出手段が前記空燃比センサの出力値と前記所定の目標値との偏差に基づく値の時間積分値が前記所定の範囲を超えるか否かに拘わらず同偏差に基づく値の時間積分値に基づいて前記フィードバック制御量を算出した場合であって、且つ前記内燃機関が定常運転状態にある場合における同偏差に基づく値の時間積分値に基づいて前記基本燃料噴射量を補正する基本燃料噴射量補正手段を備えた内燃機関の排気浄化装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、内燃機関の排気通路に配設された触媒の上流側に空燃比センサを備え、同空燃比センサの出力値に基づいて同触媒に流入するガスの空燃比をフィードバック制御する内燃機関の排気浄化装置に関する。
【０００２】
【従来の技術】
従来より、内燃機関の排ガスを浄化するための三元触媒（本明細書においては、単に「触媒」と云うこともある。）が、同機関の排気通路に配設されている。この三元触媒は、酸素を吸蔵するＯ２ストレージ機能（以下、この機能を「酸素吸蔵機能」と称呼し、触媒内に吸蔵されている酸素量を「酸素吸蔵量」と称呼する。）を有していて、流入する排ガスの空燃比がリッチである場合には吸蔵している酸素によりＨＣ，ＣＯ等の未燃成分を酸化するとともに、流入するガスの空燃比がリーンである場合には窒素酸化物（ＮＯｘ）を還元して同ＮＯｘから奪った酸素を内部に吸蔵する。換言すれば、三元触媒に流入する排ガスの空燃比がリッチである場合には同三元触媒の酸素吸蔵量が減少するとともに三元触媒に流入する排ガスの空燃比がリーンである場合には同三元触媒の酸素吸蔵量が増加する。これにより、三元触媒は、機関の空燃比が理論空燃比から偏移した場合でも、未燃成分や窒素酸化物等の有害成分を浄化することができる。
【０００３】
ところで、内燃機関の運転状態は時々刻々変化するから、機関の空燃比はリッチとなったり、リーンとなったりする。一方、触媒の酸素吸蔵量は、「０」から吸蔵し得る最大の酸素量（以下、「最大酸素吸蔵量」と称呼する。）の間で変化する。従って、仮に、触媒内の酸素吸蔵量が「０」近傍であるときに機関の空燃比がリッチとなると、触媒内で未燃成分を十分に酸化することができず同触媒から未燃成分が流出してしまう。反対に、触媒内の酸素吸蔵量が最大酸素吸蔵量近傍であるときに機関の空燃比がリーンとなると、触媒内で窒素酸化物を十分に還元することができず同触媒から窒素酸化物が流出してしまう。以上のことから、未燃成分や窒素酸化物を効率よく浄化するため触媒内の酸素吸蔵量が所定の量（例えば、最大酸素吸蔵量の略半分の量）になるように機関の空燃比（従って、触媒に流入する排ガスの空燃比）が制御されることが好ましい。
【０００４】
このため、例えば、特許文献１に開示された内燃機関の排気浄化装置（空燃比制御装置）は、内燃機関の排気通路に配設された触媒よりも上流側に空燃比センサを介装していて、空燃比センサの出力値と理論空燃比に相当する所定の目標値との偏差（実際には、筒内吸入空気量を空燃比センサ出力値に相当する検出空燃比で除した値である実際の筒内燃料供給量と同筒内吸入空気量を所定の目標値に相当する目標空燃比（従って、理論空燃比）で除した値である目標筒内燃料供給量との偏差）、及び同偏差の時間積分値に基づいて（同偏差を比例・積分処理（ＰＩ処理）して）フィードバック制御量を算出し、同フィードバック制御量に基づいて燃料噴射量を補正することで、前記偏差がゼロになるように機関の空燃比をフィードバック制御するようになっている。
【０００５】
これによれば、前記偏差の時間積分値（前記積分処理（Ｉ処理））に基づくフィードバック制御量の値は、触媒に流入する排ガスの空燃比がリッチとなる前記偏差が発生している間は同偏差を時間積分していくことで同空燃比がリーン側に補正される方向に更新されていき、同触媒に流入する排ガスの空燃比がリーンとなる前記偏差が発生している間は同偏差を時間積分していくことで同空燃比がリッチ側に補正される方向に更新されていく。従って、内燃機関が前記偏差がゼロとなり得る定常運転状態から燃料の過不足（即ち、空気の過不足）が発生し易い（従って、前記偏差が発生し易い）過渡運転状態に一旦移行した後、再び定常運転状態に復帰するまでの期間における触媒に流入する排ガスの空燃比の平均値は目標空燃比（従って、理論空燃比）になることが保障され得る。換言すれば、前記偏差の時間積分値に基づく空燃比フィードバック制御により、触媒に流入する排ガスの空燃比は前記偏差の収支がゼロになるように制御される。従って、上記期間の前後において触媒の酸素吸蔵量は変化することなく、この結果、触媒の酸素吸蔵量が前記所定の量近傍に維持され得る。
【０００６】
【特許文献１】
特開平６−２８０６４８号公報
【０００７】
【発明が解決しようとする課題】
上記開示された装置においては、例えば、急加速運転時等、内燃機関が過渡運転状態にあって触媒に流入する空燃比が或る程度の期間に渡って理論空燃比から相当程度偏移する過度のリーン空燃比になった場合、同空燃比が理論空燃比に復帰した時点における前記偏差の時間積分値に基づくフィードバック制御量の値は、同空燃比をリッチ側に大きく補正する値に更新されている。従って、この場合、触媒に流入する排ガスの空燃比は前記過度のリーン空燃比から理論空燃比に復帰した後、過度なリッチ空燃比に不必要に補正されることになり、この結果、触媒の酸素吸蔵量が「０」となって触媒からの未燃ＨＣ，ＣＯ等の有害成分（エミッション）の排出量が増大し、また、燃料噴射量の過度の変動に基づく機関出力の変動によりドライバビリティが悪化するという問題がある。
【０００８】
従って、本発明の目的は、内燃機関の排気通路に配設された触媒の上流側の空燃比センサの出力値の目標値からの偏差に基づく値の時間積分値に少なくとも基づいて触媒に流入するガスの空燃比をフィードバック制御する内燃機関の排気浄化装置において、同空燃比を不必要に過補正することがないものを提供することにある。
【０００９】
【本発明の概要】
本発明の特徴は、内燃機関の排気通路に配設された触媒と、前記触媒よりも上流の前記排気通路に配設された空燃比センサと、少なくとも前記空燃比センサの出力値と所定の目標値との偏差に基づく値の時間積分値に基づいてフィードバック制御量を算出するフィードバック制御量算出手段と、前記フィードバック制御量に基づいて（前記偏差に基づく値がゼロになるように）前記触媒に流入するガスの空燃比をフィードバック制御する空燃比制御手段とを備えた内燃機関の排気浄化装置において、前記フィードバック制御量算出手段が、前記偏差に基づく値の時間積分値が所定の範囲を超える場合、同偏差に基づく値の時間積分値の代わりに同所定の範囲内の値に基づいて前記フィードバック制御量を算出するように構成されたことにある。
【００１０】
ここにおいて、前記所定の目標値は理論空燃比に相当する値に設定されることが好適である。また、「空燃比センサの出力値と所定の目標値との偏差に基づく値」は、例えば、空燃比センサの出力値と所定の目標値との偏差、空燃比センサの出力値に相当する検出空燃比（実空燃比）と所定の目標値に相当する目標空燃比との偏差、筒内吸入空気量を空燃比センサの出力値に相当する検出空燃比で除した値である実際の筒内燃料供給量と同筒内吸入空気量を所定の目標値に相当する目標空燃比で除した値である目標筒内燃料供給量との偏差であって、これらに限定されない。
【００１１】
また、前記フィードバック制御量に基づいて（前記偏差に基づく値がゼロになるように）前記触媒に流入するガスの空燃比をフィードバック制御する空燃比制御手段は、例えば、機関に供給される混合気の空燃比を制御する手段であってもよく、或いは、同機関に供給される混合気の空燃比の制御に加え、又は同制御とは独立して、触媒上流の排気通路に備えられたノズル等から酸化剤（空気等）又は還元剤（未燃ＨＣ等）を所定量供給することで触媒に流入するガスの空燃比を制御する手段であってもよい。なお、機関に供給される混合気の空燃比を制御すれば、触媒に流入するガスの空燃比を制御することができる。
【００１２】
これによれば、前記偏差に基づく値の時間積分値に基づく空燃比フィードバック制御により、先に述べたように、触媒に流入するガスの空燃比が前記偏差に基づく値の収支がゼロになるように制御される。従って、内燃機関が前記偏差に基づく値がゼロとなり得る定常運転状態になる毎に触媒の酸素吸蔵量が所定の量（例えば、最大酸素吸蔵量の半分の量）近傍に維持され得るから、未燃成分や窒素酸化物を効率よく浄化することができる。
【００１３】
更には、上記排気浄化装置によれば、前記偏差に基づく値の時間積分値が所定の範囲を超える場合、同偏差に基づく値の時間積分値の代わりに同所定の範囲内の値に基づいてフィードバック制御量が算出される。換言すれば、前記偏差に基づく値の時間積分値において前記所定の範囲を超える分の値は前記フィードバック制御量として反映されないように構成されている。
【００１４】
従って、例えば、触媒に流入するガスの空燃比が或る程度の期間に渡って理論空燃比から相当程度偏移する過度のリーン空燃比又はリッチ空燃比のいずれか一方の空燃比となることで前記偏差に基づく値の時間積分値が、同空燃比をいずれか他方の空燃比側に補正する方向の値であって前記所定の範囲を超える値となる場合、同偏差に基づく値の時間積分値の代わりに同所定の範囲内の値（例えば、同所定の範囲の上限値又は下限値のいずれか一方の値）に基づいてフィードバック制御量が決定されていく。よって、前記所定の範囲を適切な範囲に設定することにより、触媒に流入する空燃比は前記過度のいずれか一方の空燃比から理論空燃比に復帰した後に過度ないずれか他方の空燃比に不必要に補正されることがなく、この結果、触媒からのエミッションの排出量を少なくし、また、燃料噴射量の変動に基づくドライバビリティの悪化の程度を少なくすることができる。
【００１５】
この場合、前記排気浄化装置は、少なくとも前記偏差に基づく値の時間積分値に基づいて前記触媒が吸蔵している酸素量である酸素吸蔵量を推定する酸素吸蔵量推定手段を備え、前記フィードバック制御量算出手段は、前記偏差に基づく値の時間積分値に基づく値としての前記推定された酸素吸蔵量に基づいて前記フィードバック制御量を算出するように構成されることが好適である。
【００１６】
前記空燃比センサの出力値と所定の目標値との偏差に基づく値は筒内に供給される燃料の過不足量（従って、触媒に流入するガス中の空気（酸素）の過不足量）に相当する値である。従って、前記偏差に基づく値の時間積分値は触媒に流入するガス中の酸素の過不足量の時間積分値に相当する値である。一方、触媒の酸素吸蔵量の変化量は同触媒に流入するガス中の酸素の過不足量に相当する値となるから触媒の酸素吸蔵量は同触媒に流入するガス中の酸素の過不足量の時間積分値に相当する値となる。以上のことから、触媒の酸素吸蔵量は前記偏差に基づく値の時間積分値に基づいて計算され得る値となる。
【００１７】
従って、上記のように、前記偏差に基づく値の時間積分値に基づく値としての前記酸素吸蔵量推定手段により推定された酸素吸蔵量に基づいて空燃比フィードバック制御を実行しても、前記偏差に基づく値の時間積分値に基づく空燃比フィードバック制御の場合と同様、触媒に流入する空燃比が前記偏差に基づく値の収支がゼロになるように制御され得る。従って、内燃機関が前記偏差がゼロとなり得る定常運転状態になる毎に触媒の酸素吸蔵量が前記所定の量（例えば、最大酸素吸蔵量の半分の量）近傍に維持され得ることになる。
【００１８】
更には、触媒の酸素吸蔵量は「０」から最大酸素吸蔵量の間で変化する。従って、前記酸素吸蔵量推定手段は「０」から最大酸素吸蔵量の間で変化する値となるように触媒の酸素吸蔵量を推定するから、このように推定される酸素吸蔵量に基づくフィードバック制御量は、「０」から最大酸素吸蔵量の間の幅を有する所定の範囲内の値に基づいて算出され得ることになる。この結果、前記所定の範囲を「０」から最大酸素吸蔵量の間の幅を有する所定の範囲に設定することと同等の効果が得られることになり、触媒に流入するガスの空燃比が前記所定の目標値に相当する目標空燃比から大きく偏移することで前記偏差に基づく値の時間積分値が触媒の酸素吸蔵量が「０」から最大酸素吸蔵量の範囲外の量になることに相当する値になる場合であっても、上記と同様、その後において同空燃比が過度に不必要に補正されることがなくなる。
【００１９】
なお、前記酸素吸蔵量推定手段は、「０」以上の所定の下限値から最大酸素吸蔵量以下の所定の上限値の間で変化する値となるように触媒の酸素吸蔵量を推定してもよい。この場合、前記所定の範囲を前記所定の下限値から前記所定の上限値の間の幅を有する所定の範囲に設定することと同等の効果が得られることになる。
【００２０】
前記フィードバック制御量算出手段が前記推定された酸素吸蔵量に基づいて前記フィードバック制御量を算出するように構成されている場合、同フィードバック制御量算出手段は、所定の目標酸素吸蔵量と前記推定された酸素吸蔵量との偏差に基づいて（同偏差がゼロになるように）前記フィードバック制御量を算出するように構成されることが更に好適である。この場合、前記所定の目標酸素吸蔵量は最大酸素吸蔵量の略半分の量であることが好ましい。
【００２１】
これによれば、内燃機関が定常運転状態になる毎に触媒の酸素吸蔵量が確実に目標酸素吸蔵量に維持され得るようになる。また、所定の目標酸素吸蔵量を最大酸素吸蔵量の半分の量に設定した場合、所定の目標酸素吸蔵量と前記推定された酸素吸蔵量との偏差は、−「最大酸素吸蔵量の半分の値」から「最大酸素吸蔵量の半分の値」の間で変化する値となる。従って、かかる偏差に基づいて算出されるフィードバック制御量における触媒に流入するガスの空燃比をリッチ側に補正する方向の値の最大値と同空燃比をリーン側に補正する方向の値の最大値とが等しくなる。この結果、触媒に流入するガスの空燃比がリッチ方向に過度に補正されることが防止される程度と同空燃比がリーン方向に過度に補正されることが防止される程度とを等しくすることができる。
【００２２】
また、前記フィードバック制御量算出手段が前記推定された酸素吸蔵量に基づいて前記フィードバック制御量を算出するように構成されている場合、前記酸素吸蔵量推定手段は、前記触媒内における酸素吸蔵反応の速度を考慮して構築された触媒モデルに基づいて前記酸素吸蔵量を推定するように構成されることが好適である。
【００２３】
触媒に流入するガス中の酸素の過不足量が同一であっても、触媒の酸素吸蔵量の変化量は触媒の酸素吸蔵（放出）反応の速度に応じて異なる。従って、触媒の酸素吸蔵量を正確に推定するためには触媒内における酸素吸蔵反応の速度を考慮する必要がある。従って、上記のように構成すれば、前記触媒内における酸素吸蔵反応の速度を考慮して構築された触媒モデルに基づいて前記酸素吸蔵量が推定されるから、より一層正確に触媒の酸素吸蔵量を推定することができ、この結果、より正確に触媒に流入するガスの空燃比をフィードバック制御することができる。
【００２４】
また、前記フィードバック制御量算出手段が前記所定の目標酸素吸蔵量と前記推定された酸素吸蔵量との偏差に基づいて前記フィードバック制御量を算出するように構成されている場合であって、前記排気浄化装置が前記内燃機関の運転状態に応じて目標空燃比に相当する前記所定の目標値を設定（変更）する目標値設定手段を備える場合、前記フィードバック制御量算出手段は、更に前記空燃比センサの出力値と前記所定の目標値との偏差に基づく値に基づいて（同偏差がゼロになるように）前記フィードバック制御量を算出するように構成されているとともに、前記所定の目標値が理論空燃比と異なる空燃比に相当する値に設定されている場合、前記所定の目標酸素吸蔵量と前記推定された酸素吸蔵量との偏差の代わりに前記空燃比センサの出力値と同所定の目標値との偏差に基づく値の時間積分値に基づいて前記フィードバック制御量を算出するように構成されることが好適である。
【００２５】
即ち、この場合、前記フィードバック制御量算出手段は、前記所定の目標値が理論空燃比に相当する値に設定されている場合、前記空燃比センサの出力値と前記所定の目標値との偏差に基づく値、及び前記所定の目標酸素吸蔵量と前記推定された酸素吸蔵量との偏差に基づいて前記フィードバック制御量を算出するとともに、前記所定の目標値が理論空燃比と異なる空燃比に相当する値に設定されている場合、前記空燃比センサの出力値と前記所定の目標値との偏差に基づく値、及び同偏差に基づく値の時間積分値に基づいて（前記開示した従来の装置と同様に、同偏差に基づく値を比例・積分処理（ＰＩ処理）して）フィードバック制御量を算出するように構成される。
【００２６】
所定の目標値に相当する目標空燃比が理論空燃比と異なる空燃比となっている場合、内燃機関が定常運転状態にあって触媒に流入するガスの空燃比が目標空燃比に収束していても、触媒に流入するガス中には酸素の過不足量が発生しているから触媒の酸素吸蔵量は変化し、その結果、触媒の酸素吸蔵量は目標酸素吸蔵量に収束し得ない。換言すれば、触媒に流入するガスの空燃比を目標空燃比に収束させる制御と触媒の酸素吸蔵量を目標酸素吸蔵量に収束させる制御とを同時に行うと互いの制御目標が相違し、両制御が互いに干渉することになるから良好な空燃比フィードバック制御を行うことができない。これに対し、上記のように構成すれば、所定の目標値に相当する目標空燃比が理論空燃比と異なる空燃比となっている場合、前記偏差に基づく値を比例・積分処理（ＰＩ処理）してフィードバック制御量が算出されるように構成されるから、制御目標が前記偏差に基づく値をゼロに収束させること（従って、触媒に流入するガスの空燃比を目標空燃比に収束させること）のみとなって前述した制御の干渉の発生を回避することができる。
【００２７】
また、前記何れかの排気浄化装置が適用される内燃機関が指示に応じて燃料噴射を行う燃料噴射手段を備えている場合であって、前記空燃比制御手段が、前記内燃機関に供給される混合気の空燃比を前記所定の目標値に相当する目標空燃比とするために必要な基本燃料噴射量を同内燃機関の運転状態に応じて決定するとともに同基本燃料噴射量を前記フィードバック制御量に基づいて補正することにより得られる燃料噴射量の燃料の噴射指示を前記燃料噴射手段に対して行うことで前記触媒に流入するガスの空燃比をフィードバック制御するように構成されている場合、前記何れかの排気浄化装置は、更に、前記フィードバック制御量算出手段が前記空燃比センサの出力値と前記所定の目標値との偏差に基づく値の時間積分値が前記所定の範囲を超えるか否かに拘わらず同偏差に基づく値の時間積分値に基づいて前記フィードバック制御量を算出した場合であって、且つ前記内燃機関が定常運転状態にある場合における同偏差に基づく値の時間積分値に基づいて前記基本燃料噴射量を補正する基本燃料噴射量補正手段を備えることが好適である。
【００２８】
前記排気浄化装置において、燃料噴射手段（例えば、インジェクタ）の誤差（指示燃料噴射量と実際の燃料噴射量の差）、（指示）燃料噴射量を計算するために使用される吸入空気流量センサ（例えば、エアフローメータ）の誤差（吸入空気流量計測値と実際の吸入空気流量の差）等の誤差が発生している場合、内燃機関が定常運転状態にあって前記偏差に基づく値がゼロになっているとき（従って、機関の空燃比（従って、触媒に流入するガスの空燃比）が所定の目標値に相当する目標空燃比に収束しているとき）における前記フィードバック制御量（従って、同偏差に基づく値の時間積分値）は前記誤差の大きさに応じた値となる。換言すれば、かかる誤差は、前記偏差に基づく値の時間積分値が同誤差の大きさに応じた値に収束することにより吸収され得る。
【００２９】
しかしながら、前述のごとく、前記偏差に基づく値の時間積分値が所定の範囲を超える場合に同偏差に基づく値の時間積分値の代わりに同所定の範囲内の値に基づいて前記フィードバック制御量を算出するように構成すると、定常運転状態において前記偏差に基づく値の時間積分値が前記所定の範囲外の値になることに相当する大きな前記誤差が発生したとき、かかる誤差の総てを吸収することができず、前記偏差に基づく値がゼロに収束し得なくなる事態が発生する。
【００３０】
これに対し、上記のような基本燃料噴射量補正手段を設けることにより、前記誤差の大きさに拘わらず、同基本燃料噴射量補正手段が基本燃料噴射量を補正する際に使用する定常運転状態における前記偏差に基づく値の時間積分値は正確に同誤差の大きさに応じた値となっている。従って、前記偏差に基づく値の時間積分値に基づいて前記誤差の大きさに応じた分だけ正確に基本燃料噴射量を補正することができる。換言すれば、前記偏差に基づく値の時間積分値が前記所定の範囲外の値になることに相当する大きな前記誤差が発生している場合であっても、前記誤差が基本燃料噴射量の補正により確実に補償され得る。
【００３１】
【発明の実施の形態】
以下、本発明による内燃機関の排気浄化装置を含む空燃比制御装置の実施形態について図面を参照しつつ説明する。
【００３２】
図１は、本発明の実施形態による空燃比制御装置を火花点火式多気筒（４気筒）内燃機関１０に適用したシステムの概略構成を示している。この内燃機関１０は、シリンダブロック、シリンダブロックロワーケース、及びオイルパン等を含むシリンダブロック部２０と、シリンダブロック部２０の上に固定されるシリンダヘッド部３０と、シリンダブロック部２０にガソリン混合気を供給するための吸気系統４０と、シリンダブロック部２０からの排ガスを外部に放出するための排気系統５０とを含んでいる。
【００３３】
シリンダブロック部２０は、シリンダ２１、ピストン２２、コンロッド２３、及びクランク軸２４を含んでいる。ピストン２２はシリンダ２１内を往復動し、ピストン２２の往復動がコンロッド２３を介してクランク軸２４に伝達され、これにより同クランク軸２４が回転するようになっている。シリンダ２１とピストン２２のヘッドは、シリンダヘッド部３０とともに燃焼室２５を形成している。
【００３４】
シリンダヘッド部３０は、燃焼室２５に連通した吸気ポート３１、吸気ポート３１を開閉する吸気弁３２、吸気弁３２を駆動するインテークカムシャフトを含むとともに同インテークカムシャフトの位相角を連続的に変更する可変吸気タイミング装置３３、可変吸気タイミング装置３３のアクチュエータ３３ａ、燃焼室２５に連通した排気ポート３４、排気ポート３４を開閉する排気弁３５、排気弁３５を駆動するエキゾーストカムシャフト３６、点火プラグ３７、点火プラグ３７に与える高電圧を発生するイグニッションコイルを含むイグナイタ３８、及び燃料を吸気ポート３１内に噴射するインジェクタ（燃料噴射手段）３９を備えている。
【００３５】
吸気系統４０は、吸気ポート３１に連通し同吸気ポート３１とともに吸気通路を形成するインテークマニホールドを含む吸気管４１、吸気管４１の端部に設けられたエアフィルタ４２、吸気管４１内にあって吸気通路の開口断面積を可変とするスロットル弁４３、スロットル弁駆動手段を構成するＤＣモータからなるスロットル弁アクチュエータ４３ａ、スワールコントロールバルブ（以下、「ＳＣＶ」と称呼する。）４４、及びＤＣモータからなるＳＣＶアクチュエータ４４ａを備えている。
【００３６】
排気系統５０は、排気ポート３４に連通したエキゾーストマニホールド５１、エキゾーストマニホールド５１（実際には、各排気ポート３４に連通した各々のエキゾーストマニホールド５１が集合した集合部）に接続されたエキゾーストパイプ（排気管）５２、エキゾーストパイプ５２に配設（介装）された上流側の三元触媒５３（上流側触媒コンバータ、又はスタート・キャタリティック・コンバータとも云うが、以下「第１触媒５３」と称呼する。）、及びこの第１触媒５３の下流のエキゾーストパイプ５２に配設（介装）された下流側の三元触媒５４（車両のフロア下方に配設されるため、アンダ・フロア・キャタリティック・コンバータとも云うが、以下「第２触媒５４」と称呼する。）を備えている。排気ポート３４、エキゾーストマニホールド５１、及びエキゾーストパイプ５２は、排気通路を構成している。
【００３７】
一方、このシステムは、熱線式エアフローメータ６１、スロットルポジションセンサ６２、カムポジションセンサ６３、クランクポジションセンサ６４、水温センサ６５、第１触媒５３の上流の排気通路（本例では、上記各々のエキゾーストマニホールド５１が集合した集合部）に配設された空燃比センサ６６（以下、「上流側空燃比センサ６６」と称呼する。）、第１触媒５３の下流であって第２触媒５４の上流の排気通路に配設された空燃比センサ６７（以下、「下流側空燃比センサ６７」と称呼する。）、及びアクセル開度センサ６８を備えている。
【００３８】
熱線式エアフローメータ６１は、吸気管４１内を流れる吸入空気の単位時間あたりの質量流量に応じた電圧Ｖｇを出力するようになっている。かかるエアフローメータ６１の出力Ｖｇと、計測された吸入空気量（流量）Ｇａとの関係は、図２に示したとおりである。スロットルポジションセンサ６２は、スロットル弁４３の開度を検出し、スロットル弁開度ＴＡを表す信号を出力するようになっている。カムポジションセンサ６３は、インテークカムシャフトが９０°回転する毎に（即ち、クランク軸２４が１８０°回転する毎に）一つのパルスを有する信号（Ｇ２信号）を発生するようになっている。クランクポジションセンサ６４は、クランク軸２４が１０°回転する毎に幅狭のパルスを有するとともに同クランク軸２４が３６０°回転する毎に幅広のパルスを有する信号を出力するようになっている。この信号は、エンジン回転速度ＮＥを表す。水温センサ６５は、内燃機関１０の冷却水の温度を検出し、冷却水温ＴＨＷを表す信号を出力するようになっている。
【００３９】
上流側空燃比センサ６６は、限界電流式の酸素濃度センサであり、図３に示したように、空燃比Ａ／Ｆに応じた電流を出力し、この電流に応じた電圧である出力値ｖａｂｙｆｓを出力するようになっていて、特に、空燃比が理論空燃比であるときには出力値ｖａｂｙｆｓは上流側目標値ｖｓｔｏｉｃｈになる。図３から明らかなように、上流側空燃比センサ６６によれば、広範囲にわたる空燃比Ａ／Ｆを精度良く検出することができる。
【００４０】
下流側空燃比センサ６７は、起電力式（濃淡電池式）の酸素濃度センサであり、図４に示したように、理論空燃比近傍において急変する電圧である出力値Ｖｏｘｓを出力するようになっている。より具体的に述べると、下流側空燃比センサ６７は、空燃比が理論空燃比よりもリーンのときは略０．１（Ｖ）、空燃比が理論空燃比よりもリッチのときは略０．９（Ｖ）、及び空燃比が理論空燃比のときは０．５（Ｖ）の電圧を出力するようになっている。アクセル開度センサ６８は、運転者によって操作されるアクセルペダル８１の操作量を検出し、同アクセルペダル８１の操作量Ａｃｃｐを表す信号を出力するようになっている。
【００４１】
電気制御装置７０は、互いにバスで接続されたＣＰＵ７１、ＣＰＵ７１が実行するルーチン（プログラム）、テーブル（ルックアップテーブル、マップ）、及び定数等を予め記憶したＲＯＭ７２、ＣＰＵ７１が必要に応じてデータを一時的に格納するＲＡＭ７３、電源が投入された状態でデータを格納するとともに同格納したデータを電源が遮断されている間も保持するバックアップＲＡＭ７４、並びにＡＤコンバータを含むインターフェース７５等からなるマイクロコンピュータである。インターフェース７５は、前記センサ６１〜６８と接続され、ＣＰＵ７１にセンサ６１〜６８からの信号を供給するとともに、同ＣＰＵ７１の指示に応じて可変吸気タイミング装置３３のアクチュエータ３３ａ、イグナイタ３８、インジェクタ３９、スロットル弁アクチュエータ４３ａ、及びＳＣＶアクチュエータ４４ａに駆動信号を送出するようになっている。
【００４２】
（空燃比フィードバック制御の概要）
次に、上記のように構成された排気浄化装置を含んだ空燃比制御装置が行う機関の空燃比のフィードバック制御の概要について説明する。
【００４３】
第１触媒５３（第２触媒５４も同様である。）は、同第１触媒５３に流入するガスの空燃比が理論空燃比であるときに、ＨＣ，ＣＯを酸化するとともにＮＯｘを還元し、これらの有害成分を高い効率で浄化する。また、第１触媒５３は、酸素を吸蔵・放出する機能（酸素吸蔵機能、酸素吸蔵・放出機能）を有し、この酸素吸蔵・放出機能により、空燃比が理論空燃比からある程度まで偏移したとしても、ＨＣ，ＣＯ、及びＮＯｘを浄化することができる。即ち、機関の空燃比がリーンとなって第１触媒５３に流入するガスにＮＯｘが多量に含まれると、第１触媒５３はＮＯｘから酸素分子を奪って同酸素分子を吸蔵するとともに同ＮＯｘを還元し、これによりＮＯｘを浄化する。また、機関の空燃比がリッチになって第１触媒５３に流入するガスにＨＣ，ＣＯが多量に含まれると、第１触媒５３はこれらに吸蔵している酸素分子を与えて（放出して）酸化し、これによりＨＣ，ＣＯを浄化する。換言すれば、第１触媒５３に流入する排ガスの空燃比がリッチである場合には同第１触媒５３の酸素吸蔵量が減少するとともに第１触媒５３に流入する排ガスの空燃比がリーンである場合には同第１触媒５３の酸素吸蔵量が増加する。
【００４４】
従って、第１触媒５３が連続的に流入するリッチ空燃比の排ガス中にある多量のＨＣ，ＣＯを効率的に浄化するためには、同第１触媒５３が酸素を多量に貯蔵していなければならず、逆に連続的に流入するリーン空燃比の排ガス中にある多量のＮＯｘを効率的に浄化するためには、同第１触媒５３が酸素を十分に貯蔵し得る状態になければならないことになる。以上のことから、ＨＣ，ＣＯやＮＯｘを効率よく浄化するため第１触媒５３内の酸素吸蔵量が最大酸素吸蔵量の半分の量（目標酸素吸蔵量）になるように機関の空燃比（従って、第１触媒５３に流入する排ガスの空燃比）が制御されることが好ましい。
【００４５】
第１触媒５３内の酸素吸蔵量が最大酸素吸蔵量の半分の量に維持され得るように制御するためには、少なくとも、第１触媒５３に流入する排ガスの空燃比の平均値を理論空燃比と等しくするように制御すること（即ち、第１触媒５３に流入する排ガスの空燃比の理論空燃比からの偏差の収支をゼロにするように制御すること）が要求される。このため、上流側空燃比センサ６６の出力値ｖａｂｙｆｓと同出力値の目標値である上流側目標値（所定の目標値）ｖｓｔｏｉｃｈとの偏差の時間積分値に基づいてフィードバック制御量を求め、同フィードバック制御量に基づいて同偏差が「０」になるように第１触媒５３に流入する排ガスの空燃比（従って、機関１０に供給される混合気の空燃比）をフィードバック制御する必要がある。
【００４６】
一方、上流側空燃比センサ６６の出力値ｖａｂｙｆｓと上流側目標値ｖｓｔｏｉｃｈとの偏差は、シリンダ内（筒内）に供給される燃料の過不足量（従って、第１触媒５３に流入するガス中の空気（酸素）の過不足量）に相当する値である。一方、第１触媒５３の酸素吸蔵量の変化量も同第１触媒５３に流入する排ガス中の酸素の過不足量に相当する値となる。以上のことから、第１触媒５３の酸素吸蔵量の変化量は前記偏差に相当する値となるから、第１触媒５３の酸素吸蔵量は前記偏差の時間積分値に基づく値となる。
【００４７】
そこで、本実施形態の空燃比制御装置（排気浄化装置、以下、単に「本装置」と云うこともある。）は、後述する触媒モデルを使用して上流側空燃比センサ６６の出力値ｖａｂｙｆｓと上流側目標値ｖｓｔｏｉｃｈとの偏差に基づく値である筒内燃料供給量偏差ＤＦｃの時間積分値に基づいて第１触媒５３の酸素吸蔵量ＯＳＡａｌｌを逐次求める。また、本装置は、原則的に、下記数１に従って、前記筒内燃料供給量偏差ＤＦｃに比例ゲインＧｐを乗じた比例項（Ｐ項）ＤＦｉｐと、酸素吸蔵量ＯＳＡａｌｌから最大酸素吸蔵量Ｃｍａｘａｌｌの半分の量を減じた値に積分ゲインＧｉを乗じた積分項（Ｉ項）ＤＦｉｉとの和であるフィードバック制御量ＤＦｉを求める。ここで、筒内燃料供給量偏差ＤＦｃは、後述する筒内吸入空気量Ｍｃを上流側空燃比センサ６６の出力値ｖａｂｙｆｓに相当する検出空燃比ａｂｙｆｓで除した値である実際の筒内燃料供給量Ｆｃと同筒内吸入空気量Ｍｃを目標空燃比ａｂｙｆｒで除した値である目標筒内燃料供給量Ｆｃｒとの偏差である。また、下記数１において、Ｃｍａｘａｌｌは第１触媒５３の最大酸素吸蔵量であって、この最大酸素吸蔵量Ｃｍａｘａｌｌの値は、別途、後述するように求められる。
【００４８】
【数１】
ＤＦｉ＝Ｇｐ・ＤＦｃ＋Ｇｉ・（ＯＳＡａｌｌ−（Ｃｍａｘａｌｌ／２））
【００４９】
そして、本装置は、内燃機関１０の運転状態に応じて決定される後述する（補正後）基本燃料噴射量Ｆｂａｓｅに前記フィードバック制御量ＤＦｉを加えた量の燃料を最終燃料噴射量Ｆｉとして設定し、同最終燃料噴射量Ｆｉの燃料を吸気行程を迎える気筒のインジェクタ３９から噴射することにより機関１０に供給される混合気の空燃比をフィードバック制御する。この結果、第１触媒５３に流入する排ガスの空燃比の理論空燃比からの偏差の収支がゼロになるように制御されるとともに、筒内燃料供給量偏差ＤＦｃが「０」になるように（従って、上流側空燃比センサ６６の出力値ｖａｂｙｆｓが上流側目標値ｖｓｔｏｉｃｈになるように）、且つ、第１触媒５３の酸素吸蔵量ＯＳＡａｌｌが最大酸素吸蔵量Ｃｍａｘａｌｌの半分の量になるようにそれぞれ制御される。
【００５０】
（空燃比フィードバック制御の具体的内容）
前述した空燃比フィードバック制御についてより具体的に述べると、この空燃比制御装置は、機能ブロック図である図５に示したように、Ａ１〜Ａ１６の各手段等を含んで構成されている。以下、図５を参照しながら各手段等について説明していく。
【００５１】
＜（補正前）基本燃料噴射量の算出＞
先ず、筒内吸入空気量算出手段Ａ１は、エアフローメータ６１が計測している吸入空気流量Ｇａと、クランクポジションセンサ６４の出力に基づいて得られるエンジン回転速度ＮＥと、ＲＯＭ７２が記憶しているテーブルＭＡＰＭｃとに基づき今回の吸気行程を迎える気筒の吸入空気量である筒内吸入空気量Ｍｃ（ｋ）を求める。ここで、添え字の（ｋ）は、今回の吸気行程に対する値であることを示している（以下、他の物理量についても同様。）。筒内吸入空気量Ｍｃは、各気筒の吸気行程に対応されながらＲＡＭ７３に記憶されていく。
【００５２】
目標値設定手段としての上流側目標空燃比設定手段Ａ２は、内燃機関１０の運転状態であるエンジン回転速度ＮＥ、及びスロットル弁開度ＴＡ等に基づいて上流側目標値に相当する上流側目標空燃比ａｂｙｆｒ（ｋ）を決定する。この上流側目標空燃比ａｂｙｆｒ（ｋ）は、例えば、内燃機関１０の暖機運転中、スロットル弁開度ＴＡが所定値以上である急加速運転中等の特殊な場合を除き理論空燃比に設定されている。また、上流側目標空燃比ａｂｙｆｒは、各気筒の吸気行程に対応されながらＲＡＭ７３に記憶されていく。
【００５３】
補正前基本燃料噴射量算出手段Ａ３は、筒内吸入空気量算出手段Ａ１により求められた筒内吸入空気量Ｍｃ（ｋ）を上流側目標空燃比設定手段Ａ２により設定された上流側目標空燃比ａｂｙｆｒ（ｋ）で除することにより、機関の空燃比を同上流側目標空燃比ａｂｙｆｒ（ｋ）とするための今回の吸気行程に対する補正前基本燃料噴射量Ｆｂａｓｅｂを求める。
【００５４】
このように、本装置は、筒内吸入空気量算出手段Ａ１、上流側目標空燃比設定手段Ａ２、及び補正前基本燃料噴射量算出手段Ａ３を利用して、補正前基本燃料噴射量Ｆｂａｓｅｂを求める。
【００５５】
＜最終燃料噴射量の算出＞
先ず、補正後基本燃料噴射量算出手段Ａ４は、補正前基本燃料噴射量算出手段Ａ３により求められた補正前基本燃料噴射量Ｆｂａｓｅｂに後述する基本燃料噴射量補正量取得手段Ａ１６による最新の基本燃料噴射量補正量算出テーブルΔＦｂａｓｅ（Ｇａ）に従って求められる基本燃料噴射量補正量ΔＦｂａｓｅを加算することで補正後基本燃料噴射量Ｆｂａｓｅ（即ち、目標筒内燃料供給量Ｆｃｒ（ｋ））を求める。目標筒内燃料供給量Ｆｃｒは、各気筒の吸気行程に対応されながらＲＡＭ７３に記憶されていく。
【００５６】
最終燃料噴射量算出手段Ａ５は、前記補正後基本燃料噴射量Ｆｂａｓｅに前述したフィードバック制御量ＤＦｉを加えることで、下記数２に基いて最終燃料噴射量Ｆｉを求める。本装置は、このようにして、補正後基本燃料噴射量算出手段Ａ４、及び最終燃料噴射量算出手段Ａ５により補正後基本燃料噴射量Ｆｂａｓｅをフィードバック制御量ＤＦｉに基づいて補正することにより最終燃料噴射量Ｆｉを求め、同最終燃料噴射量Ｆｉの燃料を今回の吸気行程を迎える気筒に対してインジェクタ３９により噴射する。このようにして、機関１０に供給される混合気の空燃比（従って、第１触媒５３に流入する排ガスの空燃比）をフィードバック制御量ＤＦｉに基づいてフィードバック制御する手段が空燃比制御手段に相当する。
【００５７】
【数２】
Ｆｉ＝Ｆｂａｓｅ＋ＤＦｉ
【００５８】
＜フィードバック制御量の算出＞
先ず、テーブル変換手段Ａ６は、上流側空燃比センサ６６の出力値ｖａｂｙｆｓと、先に説明した図３に示した上流側空燃比センサ出力値ｖａｂｙｆｓと空燃比Ａ／Ｆとの関係を規定したテーブルとに基づいて、上流側空燃比センサ６６が検出する現時点における検出空燃比ａｂｙｆｓを求める。
【００５９】
筒内吸入空気量遅延手段Ａ７は、筒内吸入空気量算出手段Ａ１により吸気行程毎に求められＲＡＭ７３に記憶されている筒内吸入空気量Ｍｃのうち、現時点からＮストローク（Ｎ回の吸気行程）前に吸気行程を迎えた気筒の筒内吸入空気量ＭｃをＲＡＭ７３から読み出し、これを筒内吸入空気量Ｍｃ（ｋ−Ｎ）として設定する。
【００６０】
筒内燃料供給量算出手段Ａ８は、筒内吸入空気量遅延手段Ａ７により求められた現時点からＮストローク前の筒内吸入空気量Ｍｃ（ｋ−Ｎ）をテーブル変換手段Ａ６により求められた現時点における検出空燃比ａｂｙｆｓで除することで、現時点からＮストローク前の実際の筒内燃料供給量Ｆｃ（ｋ−Ｎ）を求める。ここで、前記値Ｎは、内燃機関１０の排気量、及び燃料室２５から上流側空燃比センサ６６までの距離等により異なる値である。
【００６１】
このように、現時点からＮストローク前の実際の筒内燃料供給量Ｆｃ（ｋ−Ｎ）を求めるために、現時点からＮストローク前の筒内吸入吸気量Ｍｃ（ｋ−Ｎ）を現時点における検出空燃比ａｂｙｆｓで除するのは、燃焼室２５内で燃料された混合気が上流側空燃比センサ６６に到達するまでには、Ｎストロークに相当する時間Ｌを要しているからである。
【００６２】
目標筒内燃料供給量遅延手段Ａ９は、補正後基本燃料噴射量算出手段Ａ４により吸気行程毎に求められＲＡＭ７３に記憶されている目標筒内燃料供給量Ｆｃｒのうち、現時点からＮストローク前の目標筒内燃料供給量ＦｃｒをＲＡＭ７３から読み出し、これを目標筒内燃料供給量Ｆｃｒ（ｋ−Ｎ）として設定する。
【００６３】
筒内燃料供給量偏差算出手段Ａ１０は、下記数３に基づいて、目標筒内燃料供給量遅延手段Ａ９により設定された現時点からＮストローク前の目標筒内燃料供給量Ｆｃｒ（ｋ−Ｎ）から筒内燃料供給量算出手段Ａ８により求められた現時点からＮストローク前の実際の筒内燃料供給量Ｆｃ（ｋ−Ｎ）を減じることにより、前述した筒内燃料供給量偏差ＤＦｃを求める。この筒内燃料供給量偏差ＤＦｃは、Ｎストローク前の時点で筒内に供給された燃料の過不足分を表す量であって、上流側空燃比センサ６６の出力値ｖａｂｙｆｓと上流側目標値（上流側目標空燃比ａｂｙｆｒが理論空燃比のときは図３に示すｖｓｔｏｉｃｈ）との偏差に基づく値である。
【００６４】
【数３】
ＤＦｃ＝Ｆｃｒ（ｋ−Ｎ）−Ｆｃ（ｋ−Ｎ）
【００６５】
比例項算出手段Ａ１１は、前記筒内燃料供給量偏差ＤＦｃを比例処理（Ｐ処理）することで、下記数４に基づいて比例項（Ｐ項）に基づくフィードバック制御量ＤＦｉｐを求める。下記数４において、Ｇｐは予め設定された比例ゲイン（比例定数（正の値））である。
【００６６】
【数４】
ＤＦｉｐ＝Ｇｐ・ＤＦｃ
【００６７】
触媒モデルＡ１２は、前記筒内燃料供給量偏差ＤＦｃの時間積分値、後述する最大酸素吸蔵量取得手段Ａ１５による求められている第１触媒５３の最大酸素吸蔵量Ｃｍａｘａｌｌの値等に基づいて第１触媒５３の酸素吸蔵量ＯＳＡａｌｌを求めるモデルであるが、これについては後述する。
【００６８】
積分項算出手段Ａ１３は、触媒モデルＡ１２により求められた第１触媒５３の酸素吸蔵量ＯＳＡａｌｌの値と前記第１触媒５３の最大酸素吸蔵量Ｃｍａｘａｌｌの値とから下記数５に基づいて積分項（Ｉ項）に基づくフィードバック制御量ＤＦｉｉを求める。下記数５において、Ｇｉは予め設定された積分ゲイン（積分定数（正の値））である。
【００６９】
【数５】
ＤＦｉｉ＝Ｇｉ・（ＯＳＡａｌｌ−（Ｃｍａｘａｌｌ／２））
【００７０】
フィードバック制御量算出手段Ａ１４は、前記比例項に基づくフィードバック制御量ＤＦｉｐに前記積分項に基づくフィードバック制御量ＤＦｉｉを加えることで、前述のフィードバック制御量ＤＦｉを求める。このフィードバック制御量ＤＦｉは、先に述べたように最終燃料噴射量算出手段Ａ５により最終燃料噴射量Ｆｉを求める際に使用される。
【００７１】
このようにして、本装置は、上流側空燃比センサ６６の出力値ｖａｂｙｆｓと上流側目標空燃比ａｂｙｆｒに対応する上流側目標値との偏差に基づく値である筒内燃料供給量偏差ＤＦｃ、及び、同筒内燃料供給量偏差ＤＦｃの時間積分値に基づく値としての第１触媒５３の酸素吸蔵量ＯＳＡａｌｌと目標酸素吸蔵量（第１触媒５３の最大酸素吸蔵量Ｃｍａｘａｌｌの半分の量）との偏差に基づいてフィードバック制御量ＤＦｉを求める。そして、補正後基本燃料噴射量Ｆｂａｓｅにフィードバック制御量ＤＦｉを加えることで、同補正後基本燃料噴射量Ｆｂａｓｅを補正する。
【００７２】
例えば、機関の空燃比が急変してリーンとなると、テーブル変換手段Ａ６にて求められる検出空燃比ａｂｙｆｓは上流側目標空燃比設定手段Ａ２により設定されている上流側目標空燃比ａｂｙｆｒよりもリーンな値（より大きな値）として求められる。このため、筒内燃料供給量算出手段Ａ８にて求められる実際の筒内燃料供給量Ｆｃ（ｋ−Ｎ）は目標筒内燃料供給量遅延手段Ａ９にて求められる目標筒内燃料供給量Ｆｃｒ（ｋ−Ｎ）よりも小さい値となり、筒内燃料供給量偏差ＤＦｃは大きい正の値として求められる。また、筒内燃料供給量偏差ＤＦｃの値が正の値であるとき（第１触媒５３に流入する排ガスの空燃比がリーンであるとき）第１触媒５３内の酸素吸蔵量ＯＳＡａｌｌは増加するように算出されていく。従って、比例項に基づくフィードバック制御量ＤＦｉｐも積分項に基づくフィードバック制御量ＤＦｉｉも正の値となってフィードバック制御量ＤＦｉが大きい正の値となる。これにより、最終燃料噴射量算出手段Ａ５にて求められる燃料噴射量Ｆｉは、補正後基本燃料噴射量Ｆｂａｓｅよりも大きくなって、機関の空燃比がリッチとなるように制御される。
【００７３】
反対に、機関の空燃比が急変してリッチとなると、検出空燃比ａｂｙｆｓは上流側目標空燃比ａｂｙｆｒよりもリッチな値（より小さな値）として求められる。このため、実際の筒内燃料供給量Ｆｃ（ｋ−Ｎ）は目標筒内燃料供給量Ｆｃｒ（ｋ−Ｎ）よりも大きい値となり、筒内燃料供給量偏差ＤＦｃは負の値として求められる。また、筒内燃料供給量偏差ＤＦｃの値が負の値であるとき（第１触媒５３に流入する排ガスの空燃比がリッチであるとき）第１触媒５３内の酸素吸蔵量ＯＳＡａｌｌは減少するように算出されていく。従って、比例項に基づくフィードバック制御量ＤＦｉｐも積分項に基づくフィードバック制御量ＤＦｉｉも負の値となってフィードバック制御量ＤＦｉが負の値となる。これにより、燃料噴射量Ｆｉは、補正後基本燃料噴射量Ｆｂａｓｅよりも小さくなって、機関の空燃比がリーンとなるように制御される。以上、テーブル変換手段Ａ６、筒内吸入空気量遅延手段Ａ７、筒内燃料供給量算出手段Ａ８、目標筒内燃料供給量遅延手段Ａ９、筒内燃料供給量偏差算出手段Ａ１０、比例項算出手段Ａ１１、触媒モデルＡ１２、積分項算出手段Ａ１３、及びフィードバック制御量算出手段Ａ１４はフィードバック制御量算出手段に相当する。
【００７４】
図６は、本装置を適用した機関１０の空燃比（従って、第１触媒５３に流入する排ガスの空燃比）が一時的に理論空燃比から大きく偏移する場合における第１触媒５３の酸素吸蔵量ＯＳＡａｌｌ、積分項に基づくフィードバック制御量ＤＦｉｉ（以下、「積分項ＤＦｉｉ」と云うこともある。）の変化を実線にて示したタイムチャートである。また、図６は、比較例として、図７に機能ブロック図にて示した前記開示した従来の排気浄化装置（空燃比制御装置）を内燃機関１０に適用した場合の変化も破線にて示している。なお、図７において図５と同一又は類似の手段等については図５の符号と同一の符号を付している。
【００７５】
従来の装置は、フィードバック制御量ＤＦｉの算出のみが本装置と相違していて、従来の装置ではフィードバック制御量ＤＦｉはＰＩコントローラＡ１１により下記数６に従って算出される。下記数６において、Ｇｐは上記数１におけるものと同一の比例ゲインであり、Ｇｉ’は積分ゲインである。即ち、従来の装置において、比例項に基づくフィードバック制御量ＤＦｉｐは上記数１におけるものと同一のＧｐ・ＤＦｃであり、積分項に基づくフィードバック制御量（積分項）ＤＦｉｉはＧｉ’・ΣＤＦｃである。
【００７６】
【数６】
ＤＦｉ＝Ｇｐ・ＤＦｃ＋Ｇｉ’・ΣＤＦｃ
【００７７】
図６に示すように、時刻ｔ０から時刻ｔ１の間、（ａ）に示すように運転者によるアクセルペダル８１の操作量Ａｃｃｐが所定の一定値に維持されていることで内燃機関１０が定常運転状態にあり、（ｂ）に示すように機関の空燃比ａｂｙｆｓが理論空燃比近傍に維持され、（ｃ）に示すように第１触媒５３の酸素吸蔵量ＯＳＡａｌｌが目標酸素吸蔵量（Ｃｍａｘａｌｌ／２）の近傍に維持されていて、（ｄ）に示すように積分項（Ｉ項）が略「０」に維持されているものとする。
【００７８】
この状態から、時刻ｔ１においてアクセルペダル８１の操作量Ａｃｃｐが急に最大値まで増加したものとすると、エアフローメータ６１の遅れによる吸入空気流量Ｇａの計測誤差等により実際の吸入空気量に対する燃料噴射量Ｆｉが不足して機関の空燃比ａｂｙｆｓが時刻ｔ１以降、一時的に相当のリーン空燃比になる。この時刻ｔ１以降の変化について、先ず、従来の装置を適用した場合について説明する。なお、説明の便宜上、比例項に基づくフィードバック制御量ＤＦｉｐの作用についての説明は省略する。
【００７９】
第１触媒５３の酸素吸蔵量ＯＳＡａｌｌは、第１触媒５３に流入する排ガスの空燃比（従って、機関の空燃比ａｂｙｆｓ）がリーンのとき増加し、機関の空燃比ａｂｙｆｓがリッチのとき減少する。また、積分項（Ｇｉ’・ΣＤＦｃ）（積分項（Ｇｉ・（ＯＳＡａｌｌ−（Ｃｍａｘａｌｌ／２）））についても同様である。）も、機関の空燃比ａｂｙｆｓがリーンのとき筒内燃料供給量偏差ＤＦｃが正の値となることから増加し、機関の空燃比ａｂｙｆｓがリッチのとき筒内燃料供給量偏差ＤＦｃが負の値となることから減少する。
【００８０】
従って、時刻ｔ１以降、機関の空燃比ａｂｙｆｓがリーンとなっているから酸素吸蔵量ＯＳＡａｌｌは増加していき、時刻ｔ２になると最大酸素吸蔵量Ｃｍａｘａｌｌに達するとともに時刻ｔ２以降Ｃｍａｘａｌｌに維持される。一方、積分項（Ｇｉ’・ΣＤＦｃ）の値も時刻ｔ１以降増加していき、更に時刻ｔ２以降も機関の空燃比ａｂｙｆｓがリーンとなっているから増加し続ける。これにより、積分項の値は正の値となって機関の空燃比ａｂｙｆｓをリッチ側に補正する値になっていくから、機関の空燃比ａｂｙｆｓは或る時点から減少し始め、時刻ｔ３になるとリッチに変化する。この時刻ｔ３まで積分項の値は増加し続けるから同時刻ｔ３の時点において積分項の値は相当に大きい正の値（最大値）となって機関の空燃比ａｂｙｆｓをリッチ側に大きく補正する値になっている。
【００８１】
従って、時刻ｔ３以降、機関の空燃比ａｂｙｆｓは不必要に大きくリッチ側に補正される。この結果、時刻ｔ３以降、機関の空燃比ａｂｙｆｓが相当のリッチとなることで最大酸素吸蔵量Ｃｍａｘａｌｌから減少を開始した酸素吸蔵量ＯＳＡａｌｌは時刻ｔ５になると「０」に達するとともに時刻ｔ５以降「０」に維持される。一方、積分項の値も時刻ｔ３以降、機関の空燃比ａｂｙｆｓが再びリーンに変化する時刻ｔ７までの間、空燃比ａｂｙｆｓがリッチとなっているから減少し続ける。これにより、積分項の値は時刻ｔ７の時点でも相当に絶対値が大きい負の値となって機関の空燃比ａｂｙｆｓをリーン側に過度に大きく補正する値になっている。
【００８２】
よって、機関の空燃比ａｂｙｆｓは時刻ｔ７以降もリーン側に或る程度大きく補正され、再びリッチ側に変化する時刻ｔ９の時点以降にて理論空燃比近傍に収束する。このように、従来の装置を適用した場合、積分項（Ｇｉ’・ΣＤＦｃ）の値に制限がないことから、機関の空燃比ａｂｙｆｓ（即ち、最終燃料噴射量Ｆｉ）は同積分項の作用により不必要に過度に補正されることで振動的となって、第１触媒５３から多量のエミッション（時刻ｔ２〜時刻ｔ３の間はＮＯｘ、時刻ｔ５〜時刻ｔ７の間はＨＣ，ＣＯ）が排出されるとともに、ドライバビリティが悪化する。
【００８３】
これに対し、本装置を適用した場合、積分項（Ｇｉ・（ＯＳＡａｌｌ−（Ｃｍａｘａｌｌ／２）））の値は酸素吸蔵量ＯＳＡａｌｌと同様に変化し、酸素吸蔵量ＯＳＡａｌｌが最大酸素吸蔵量Ｃｍａｘａｌｌに達する時刻ｔ２以降、積分項の値は最大値（Ｃｍａｘａｌｌ／２）に維持されて同最大値より大きい値になることはない。従って、機関の空燃比ａｂｙｆｓがリーンからリッチに変化する時刻ｔ４の時点において積分項の値（Ｃｍａｘａｌｌ／２）は機関の空燃比ａｂｙｆｓをリッチ側に補正する値になっているもののリッチ側に過度に大きく補正する値とはなっていない。
【００８４】
従って、機関の空燃比ａｂｙｆｓは時刻ｔ４以降、リーン側に過度に補正されることはなく、再びリーン側に変化する時刻ｔ６の時点（又は、再びリッチ側に変化する時刻ｔ８の時点）以降にて理論空燃比近傍に収束する。また、酸素吸蔵量ＯＳＡａｌｌは、最大酸素吸蔵量Ｃｍａｘａｌｌとなっている時刻ｔ４以降「０」にまで達することはなく、時刻ｔ８の時点でほぼ目標酸素吸蔵量（Ｃｍａｘ／２）に収束する。更に、積分項の値も、時刻ｔ４以降大きく変動することはなく、時刻ｔ８の時点でほぼ「０」に収束する。
【００８５】
このように、本装置を適用した場合、積分項（Ｇｉ・（ＯＳＡａｌｌ−（Ｃｍａｘａｌｌ／２）））の値に制限（−Ｇｉ・（Ｃｍａｘａｌｌ／２）≦積分項≦Ｇｉ・（Ｃｍａｘａｌｌ／２））があるから、機関の空燃比ａｂｙｆｓ（即ち、最終燃料噴射量Ｆｉ）は同積分項の作用により不必要に過度に補正されることがなく（即ち、図６（ｄ）に斜線にて示した面積に相当する分だけ積分項によるリッチ側への補正量が少ないから）、比較的速やかに収束する。従って、第１触媒５３からのエミッションの排出量が少なく（時刻ｔ２〜時刻ｔ４の間にのみＮＯｘが多量に排出される。）、また、ドライバビリティが悪化の程度が少なくなる。
【００８６】
以上、本装置のように積分項（Ｇｉ・（ＯＳＡａｌｌ−（Ｃｍａｘａｌｌ／２）））の値に基づいてフィードバック制御量ＤＦｉを算出することは、上流側空燃比センサ６６の出力値ｖａｂｙｆｓと上流側目標空燃比ａｂｙｆｒに対応する上流側目標値との偏差に基づく値である筒内燃料供給量偏差ＤＦｃの時間積分値（に基づく値）である積分項（Ｇｉ’・ΣＤＦｃ）の値に基づいてフィードバック制御量ＤＦｉを算出するとともに同積分項（Ｇｉ’・ΣＤＦｃ）の値が所定の範囲（−Ｇｉ・（Ｃｍａｘａｌｌ／２）≦積分項≦Ｇｉ・（Ｃｍａｘａｌｌ／２））を超える場合、同積分項（Ｇｉ’・ΣＤＦｃ）の代わりに同所定の範囲の上限値Ｇｉ・（Ｃｍａｘａｌｌ／２）又は下限値−Ｇｉ・（Ｃｍａｘａｌｌ／２）のいずれか一方に基づいてフィードバック制御量ＤＦｉを算出することと実質的に等価である。
【００８７】
（目標空燃比が理論空燃比以外のときの処置）
上記数１に示したように、本装置においては、比例項ＤＦｉｐ（＝Ｇｐ・ＤＦｃ）に基づいて筒内燃料供給量偏差ＤＦｃが「０」になるように（従って、上流側空燃比センサ６６の検出空燃比ａｂｙｆｓが上流側目標空燃比ａｂｙｆｒになるように）、且つ、積分項ＤＦｉｉ（＝Ｇｉ・（ＯＳＡａｌｌ−（Ｃｍａｘａｌｌ／２）））に基づいて第１触媒５３の酸素吸蔵量ＯＳＡａｌｌが目標酸素吸蔵量（Ｃｍａｘａｌｌ／２）になるようにそれぞれ制御される。
【００８８】
しかしながら、先に述べたように、目標空燃比ａｂｙｆｒが理論空燃比と異なる空燃比となる場合があり、この場合、内燃機関１０が定常運転状態にあって第１触媒５３に流入するガスの前記検出空燃比ａｂｙｆｓが目標空燃比ａｂｙｆｒに収束していても、第１触媒５３に流入するガス中には酸素の過不足量が発生しているから第１触媒５３の酸素吸蔵量ＯＳＡａｌｌは変化し、同酸素吸蔵量ＯＳＡａｌｌは目標酸素吸蔵量（Ｃｍａｘａｌｌ／２）に収束し得ない。換言すれば、比例項ＤＦｉｐに基づく制御と積分項ＤＦｉｉに基づく制御とを同時に行うと互いの制御目標が相違し、両制御が互いに干渉する。
【００８９】
そこで、本装置は、目標空燃比ａｂｙｆｒが理論空燃比と異なる空燃比となる場合、上記数１の代わりに上記数６に従って、フィードバック制御量ＤＦｉを算出する。即ち、目標空燃比ａｂｙｆｒが理論空燃比と異なる空燃比となる場合、本装置は、図５に示した機能ブロック図の代わりに図７に示した前記開示した従来の排気浄化装置の機能ブロック図に基づいてフィードバック制御量ＤＦｉを算出する。これにより、制御目標が筒内燃料供給量偏差ＤＦｃをゼロに収束させること（従って、第１触媒５３に流入するガスの検出空燃比ａｂｙｆｓを目標空燃比ａｂｙｆｒに収束させること）のみとなって前述した制御の干渉の発生を回避することができる。
【００９０】
（基本燃料噴射量の補正）
前述した空燃比制御装置において、例えば、インジェクタ３９の誤差（（指示）燃料噴射量Ｆｉと実際の燃料噴射量の差）、（指示）燃料噴射量Ｆｉを計算するために使用されるエアフローメータ６１の誤差（吸入空気流量計測値Ｇａと実際の吸入空気流量の差）等の誤差が発生している場合（（指示）燃料噴射量Ｆｉの値が目標空燃比ａｂｙｆｒを得るための適切な値と異なる値となる場合）がある。この場合、内燃機関１０が定常運転状態にあって筒内燃料供給量偏差ＤＦｃが「０」になっているとき（従って、機関１０の検出空燃比ａｂｙｆｓが目標空燃比ａｂｙｆｒに収束しているとき）における上記数１に基づくフィードバック制御量ＤＦｉの値（即ち、比例項ＤＦｉｐの値が「０」になっていることから積分項ＤＦｉｉの値そのものの値）は、「０」とはならず、前記誤差の大きさに応じた値に収束する。従って、前記誤差が発生している場合、第１触媒５３の酸素吸蔵量ＯＳＡａｌｌは目標酸素吸蔵量（Ｃｍａｘａｌｌ／２）以外の値に収束することになる。
【００９１】
更には、前述のごとく、積分項ＤＦｉｉの値は前記所定の範囲（−Ｇｉ・（Ｃｍａｘａｌｌ／２）≦積分項≦Ｇｉ・（Ｃｍａｘａｌｌ／２））を超えることはないから、定常運転状態において積分項ＤＦｉｉの値が同所定の範囲外の値に収束することに相当する大きな前記誤差が発生したとき、かかる誤差の総てを吸収することができず、筒内燃料供給量偏差ＤＦｃがゼロに収束し得なくなる事態（従って、機関１０の検出空燃比ａｂｙｆｓが目標空燃比ａｂｙｆｒに収束し得なくなる事態）が発生する。
【００９２】
そこで、本装置は、所定の条件が成立する毎に、前述した目標空燃比ａｂｙｆｒが理論空燃比と異なる空燃比となる場合と同様、上記数１の代わりに上記数６に従ってフィードバック制御量ＤＦｉを算出することとし、前記誤差の大きさを表す値である内燃機関１０が定常運転状態にあるときにおけるフィードバック制御量ＤＦｉの値（従って、積分項Ｇｉ’・ΣＤＦｃの値が前記所定の範囲を超えるか否かに拘わらず同積分項Ｇｉ’・ΣＤＦｃの値）に基づいて前述した基本燃料噴射量補正量取得手段Ａ１６により基本燃料噴射量補正量ΔＦｂａｓｅを求めるための基本燃料噴射量補正量算出テーブルΔＦｂａｓｅ（Ｇａ）を求める（更新する）。この基本燃料噴射量補正量算出テーブルΔＦｂａｓｅ（Ｇａ）は、更新される毎にその最新のものがバックアップＲＡＭ７４に記憶される。
【００９３】
そして、本装置は、基本燃料噴射量補正量算出テーブルΔＦｂａｓｅ（Ｇａ）を更新した後、再び上記数１に従ってフィードバック制御量ＤＦｉを算出することを開始するとともに、補正前基本燃料噴射量Ｆｂａｓｅｂに基本燃料噴射量補正量取得手段Ａ１６による最新の基本燃料噴射量補正量算出テーブルΔＦｂａｓｅ（Ｇａ）から求めた基本燃料噴射量補正量ΔＦｂａｓｅを加えることで補正後基本燃料噴射量Ｆｂａｓｅを求める。これにより、前述の大きな誤差が発生している場合であっても前記誤差が基本燃料噴射量の補正により確実に補償されるとともに、第１触媒５３の酸素吸蔵量ＯＳＡａｌｌが確実に目標酸素吸蔵量（Ｃｍａｘａｌｌ／２）に収束するようになる。以上、このように、基本燃料噴射量を補正する手段が基本燃料噴射量補正手段に相当する。
【００９４】
（触媒モデル）
次に、第１触媒５３の酸素吸蔵量ＯＳＡａｌｌを求めるための触媒モデルＡ１２について説明する。一般に、触媒にリーンな空燃比のガスが流入したときには、同触媒の上流側においてより多くの酸素が吸蔵され、同触媒にリッチな空燃比のガスが流入したときには、同触媒の上流側から吸蔵されている酸素が消費されていく。従って、触媒内に吸蔵されている酸素は同触媒の排ガスの流れ方向において均一に分布しているわけではない。よって、触媒内の酸素吸蔵量を正確に求めるためには、かかる吸蔵酸素の分布を考慮した計算を行う必要がある。
【００９５】
また、触媒の酸素吸蔵量は同触媒内において発生する酸素吸蔵・放出反応の程度に応じて変化する。この酸素吸蔵・放出反応の程度は、触媒に流入する排ガスに含まれる上記酸素吸蔵・放出反応に関係する特定成分の量に依存する。従って、触媒の酸素吸蔵量を正確に求めるためには、前記特定成分の量を考慮に入れた計算を行う必要がある。そこで、本装置は以下に説明する触媒モデルを第１触媒５３に適用することにより、同第１触媒５３内の酸素吸蔵量ＯＳＡａｌｌを算出する。
【００９６】
この触媒モデルにおいては、図８に模式的に示したように、軸線に直交する断面形状が一定である柱状の触媒を同軸線に直交する面によりＮ個の（複数の）領域（「ブロック」とも称呼する。）に分割する。即ち、触媒モデルが対象とする触媒は排ガスの流れ方向に沿ってＮ個のブロックに分割されている。分割された各ブロックの軸線方向の長さはＬである。なお、説明の便宜上、各ブロックには、排ガスの流れ方向に沿って上流側から順に図８に示すように番号が付されている。また、任意のｉ番目のブロックに関連する変数・記号等には、それらの末尾に（ｉ）が付されている。
【００９７】
この触媒モデルにおいては、図９に示したように、分割されたブロックのうちのｉ番目のブロック（ｉ）（特定領域）に注目し、同ブロック（ｉ）における酸素吸蔵・放出反応に関係する特定成分のＣＰＵ７１の演算周期あたりの収支を考える。このとき、触媒での酸化・還元反応である三元反応は瞬時かつ完全に終了するものと仮定し、その結果としての酸素の過不足に基く酸素の吸蔵・放出反応のみに着目するものとする。この仮定（触媒モデル）は、現実的でありかつ計算精度のよいものである。なお、図９に示した排ガス相は排ガスが通過する空間であり、コート層は触媒機能を発生せしめる白金（Ｐｔ）等の貴金属からなる活性成分及び酸素吸蔵機能を発生せしめるセリア（ＣｅＯ２）等の成分が担持された層である。
【００９８】
特定成分は、例えば、酸素（分子）Ｏ２、窒素酸化物ＮＯｘ、一酸化炭素ＣＯ、炭化水素ＨＣから選択された成分であってもよいが、この触媒モデルでは、上記三元反応が瞬時かつ完全に終了するものと仮定した状態における排ガスに含まれる酸素（酸素分子及び窒素酸化物の酸素。本明細書では、酸素分子及び窒素酸化物の酸素を総称して「酸素」と称呼する。）（の過不足）を特定成分として選択している。この酸素の量である酸素量ＣｇＯ２は、同酸素が過剰であるとき（即ち、排ガス中にＯ２及びＮＯｘが存在する場合）に正の値となり、同酸素が不足しているとき（即ち、排ガス中に未燃ＨＣ，ＣＯが存在する場合）に負の値となるように計算される。
【００９９】
また、注目するブロック（ｉ）において、ＣＰＵ７１の演算周期あたり同ブロック（ｉ）の排ガス相に流入する酸素量ＣｇＯ２を流入酸素量ＣｇｉｎＯ２（ｉ）、同演算周期あたり同ブロック（ｉ）の排ガス相から流出する酸素量ＣｇＯ２を流出酸素量ＣｇｏｕｔＯ２（ｉ）と称呼し、同演算周期あたり同ブロック（ｉ）のコート層に吸蔵され又は同コート層から放出される酸素量ＣｇＯ２を酸素吸蔵量変化量δＯＳＡ（ｉ）と称呼する。この酸素吸蔵量変化量δＯＳＡ（ｉ）は、酸素がコート層に吸蔵されるときに正の値となり、酸素がコート層から放出されるときに負の値となるように計算される。また、現時点におけるブロック（ｉ）のコート層における酸素吸蔵量を酸素吸蔵量ＯＳＡ（ｉ）と称呼し、現時点におけるブロック（ｉ）のコート層における最大酸素吸蔵量を最大酸素吸蔵量Ｃｍａｘ（ｉ）と称呼する。
【０１００】
いま、図９に示すブロック（ｉ）における酸素量ＣｇＯ２の上記演算周期あたりの収支を考えると、同ブロック（ｉ）の排ガス相に流入した流入酸素量ＣｇｉｎＯ２（ｉ）のうち酸素吸蔵量変化量δＯＳＡ（ｉ）だけがコート層に吸蔵され、同流入酸素量ＣｇｉｎＯ２（ｉ）のうちコート層に吸蔵されなかった残りの酸素量ＣｇＯ２が流出酸素量ＣｇｏｕｔＯ２（ｉ）となるから、流入酸素量ＣｇｉｎＯ２（ｉ），流出酸素量ＣｇｏｕｔＯ２（ｉ）及び酸素吸蔵量変化量δＯＳＡ（ｉ）の間には下記数７に示した関係が成立する。この下記数７に示した関係が本触媒モデルの基本式である。
【０１０１】
【数７】
ＣｇｏｕｔＯ２（ｉ）＝ＣｇｉｎＯ２（ｉ）−δＯＳＡ（ｉ）
【０１０２】
次に、酸素吸蔵量変化量δＯＳＡ（ｉ）について考える。流入酸素量ＣｇｉｎＯ２（ｉ）が正の値のときはブロック（ｉ）の排ガス相に流入する排ガス中の酸素が過剰であることを意味し、同排ガス中の酸素の一部はブロック（ｉ）のコート層に吸蔵されるから酸素吸蔵量変化量δＯＳＡ（ｉ）は正の値となる。このときの酸素吸蔵反応の量、即ち酸素吸蔵量変化量δＯＳＡ（ｉ）は、流入酸素量ＣｇｉｎＯ２（ｉ）の値に比例するとともにブロック（ｉ）の現時点での最大酸素吸蔵量Ｃｍａｘ（ｉ）と現時点での酸素吸蔵量ＯＳＡ（ｉ）との差の値に比例すると考えられる。従って、流入酸素量ＣｇｉｎＯ２（ｉ）が正の値のとき、酸素吸蔵量変化量δＯＳＡ（ｉ）は下記数８，及び下記数９に基づいて算出することができる。
【０１０３】
【数８】
δＯＳＡ（ｉ）＝Ｈ（ｉ）・ＣｇｉｎＯ２（ｉ）
【０１０４】
【数９】
Ｈ（ｉ）＝ｈ・（（Ｃｍａｘ（ｉ）−ＯＳＡ（ｉ））／Ｃｍａｘ（ｉ））  （０  ≦  Ｈ（ｉ）  ＜  １）
【０１０５】
上記数８及び上記数９において、Ｈ（ｉ）はブロック（ｉ）における流入酸素量ＣｇｉｎＯ２（ｉ）に対する吸蔵される酸素量（δＯＳＡ（ｉ））の割合を示す反応率である。ｈは反応速度定数であり、本モデルでは正の一定値としているが触媒の温度に応じて変化する正の値（例えば、触媒の温度の増加に応じて単調増加する正の値）としてもよい。また、上記数９における現時点での最大酸素吸蔵量Ｃｍａｘ（ｉ）と現時点での酸素吸蔵量ＯＳＡ（ｉ）との差の値（Ｃｍａｘ（ｉ）−ＯＳＡ（ｉ））は、ブロック（ｉ）における現時点での酸素吸蔵余裕量を示している。このように、本触媒モデルでは、少なくとも触媒内の酸素吸蔵量に基いて同触媒が内部に流入する排ガスから吸蔵する酸素量を算出する。
【０１０６】
一方、流入酸素量ＣｇｉｎＯ２（ｉ）が負の値のときはブロック（ｉ）の排ガス相に流入する排ガスの酸素が不足していることを意味し、同排ガスにはブロック（ｉ）のコート層から放出された酸素が与えられるから酸素吸蔵量変化量δＯＳＡ（ｉ）は負の値となる。このときの酸素放出反応の量、即ち酸素吸蔵量変化量δＯＳＡ（ｉ）（の絶対値）は、流入酸素量ＣｇｉｎＯ２（ｉ）の値に比例するとともにブロック（ｉ）の現時点での酸素吸蔵量ＯＳＡ（ｉ）の値に比例すると考えられる。従って、流入酸素量ＣｇｉｎＯ２（ｉ）が負の値のとき、酸素吸蔵量変化量δＯＳＡ（ｉ）は上記数８と同一の関係を示す下記数１０，及び下記数１１に基いて算出することができる。
【０１０７】
【数１０】
δＯＳＡ（ｉ）＝Ｈ（ｉ）・ＣｇｉｎＯ２（ｉ）
【０１０８】
【数１１】
Ｈ（ｉ）＝ｈ・（ＯＳＡ（ｉ）／Ｃｍａｘ（ｉ））  （０  ≦  Ｈ（ｉ）  ＜  １）
【０１０９】
上記数１０及び上記数１１において、Ｈ（ｉ）はブロック（ｉ）における流入酸素量ＣｇｉｎＯ２（ｉ）（負の値）に対する放出される酸素量（δＯＳＡ（ｉ），負の値）の割合を示す反応率である。ｈは反応速度定数であり上記数９にて使用されているものと同様である。また、上記数１１における現時点での酸素吸蔵量ＯＳＡ（ｉ）の値は、ブロック（ｉ）における現時点での酸素放出余裕量を示している。このように、本触媒モデルでは、少なくとも触媒内の酸素吸蔵量に基いて同触媒が内部に吸蔵している酸素から放出する酸素量を算出する。
【０１１０】
なお、上記数９及び上記数１１にて使用するブロック（ｉ）における最大酸素吸蔵量Ｃｍａｘ（ｉ）は後述する手法により予め求められている。また、上記数９及び上記数１１にて使用するブロック（ｉ）における現時点での酸素吸蔵量ＯＳＡ（ｉ）は、初期値が付与された時点から現時点までの酸素吸蔵量変化量δＯＳＡ（ｉ）の積算値であるから下記数１２に基いて算出することができる。
【０１１１】
【数１２】
ＯＳＡ（ｉ）＝ΣδＯＳＡ（ｉ）    （０  ≦  ＯＳＡ（ｉ）  ≦  Ｃｍａｘ（ｉ））
【０１１２】
次に、各ブロック間での境界条件について考えると、図８に示したように、互いに隣接する２つのブロックのうちの上流側のブロックの排ガス相の流出面と下流側のブロックの排ガス相の流入面は互いに連続しているから、図９に示したように、ブロック（ｉ）に流入する流入酸素量ＣｇｉｎＯ２（ｉ）は、ブロック（ｉ）に隣接する上流側のブロック（ｉ−１）から流出する流出酸素量ＣｇｏｕｔＯ２（ｉ−１）と等しく、また、ブロック（ｉ）から流出する流出酸素量ＣｇｏｕｔＯ２（ｉ）は、ブロック（ｉ）に隣接する下流側のブロック（ｉ＋１）に流入する流入酸素量ＣｇｉｎＯ２（ｉ＋１）と等しい。従って、下記数１３に示した関係が成立する。換言すると、任意のｉ番目のブロック（ｉ）の流出酸素量ＣｇｏｕｔＯ２（ｉ）が求まればブロック（ｉ）に隣接する下流側のブロック（ｉ＋１）の流入酸素量ＣｇｉｎＯ２（ｉ＋１）が求まる。
【０１１３】
【数１３】
ＣｇｉｎＯ２（ｉ＋１）＝ＣｇｏｕｔＯ２（ｉ）
【０１１４】
以上のことから、最上流のブロック（１）における流入酸素量ＣｇｉｎＯ２（１）が境界条件として付与されれば、上記数８又は上記数１０によりブロック（１）における酸素吸蔵量変化量δＯＳＡ（１）が求まり、その結果、上記数１２によりブロック（１）における酸素吸蔵量ＯＳＡ（１）を更新できるとともに上記数７によりブロック（１）における流出酸素量ＣｇｏｕｔＯ２（１）が求まる。ブロック（１）における流出酸素量ＣｇｏｕｔＯ２（１）が求まれば、上記数１３によりブロック（２）における流入酸素量ＣｇｉｎＯ２（２）が求まり、その結果、上記数８又は上記数１０によりブロック（２）における酸素吸蔵量変化量δＯＳＡ（２）が求まる。これにより、上記数１２によりブロック（２）における酸素吸蔵量ＯＳＡ（２）を更新できるとともに、上記数７によりブロック（２）における流出酸素量ＣｇｏｕｔＯ２（２）が求まる。
【０１１５】
ＣＰＵ７１は、このような処理を所定の演算周期毎に繰り返し実行する。従って、ＣＰＵ７１の演算周期が経過する毎に最上流のブロック（１）における流入酸素量ＣｇｉｎＯ２（１）が境界条件として付与されれば、上記数７〜上記数１３より、最上流のブロック（１）から、順次、各ブロック（ｉ）  （ｉ＝１，２，・・・，Ｎ）  における酸素吸蔵量ＯＳＡ（ｉ），流入酸素量ＣｇｉｎＯ２（ｉ），及び流出酸素量ＣｇｏｕｔＯ２（ｉ）を全て算出することができる。これにより、触媒内部の酸素吸蔵量の分布が精度よく計算される。また、各ブロックの酸素吸蔵量ＯＳＡ（ｉ）  （ｉ＝１，２，・・・，Ｎ）  を触媒全体について積算すれば、同触媒全体の酸素吸蔵量ＯＳＡａｌｌについても精度よく計算することができる。
【０１１６】
次に、上記数９及び数１１において反応率Ｈ（ｉ）を求める際に必要となるブロック（ｉ）における最大酸素吸蔵量Ｃｍａｘ（ｉ）の求め方について説明する。図１０は、本触媒モデルにおいて、最大酸素吸蔵量Ｃｍａｘ（ｉ）を求める考え方を示した最大酸素吸蔵量分布マップであり、斜線で示された部分の面積は触媒全体の最大酸素吸蔵量Ｃｍａｘａｌｌの値に対応している。
【０１１７】
このように、触媒の各ブロック毎の各最大酸素吸蔵量Ｃｍａｘ（ｎ）  （ｎ＝１，・・・，Ｎ）は、同各最大酸素吸蔵量Ｃｍａｘ（ｎ）の総和が同触媒全体の最大酸素吸蔵量Ｃｍａｘａｌｌの値となるように設定されるとともに、上流側のブロックから下流側のブロックに推移するに従い、所定の勾配をもって線形的に増加するとして取り扱われる。これは、触媒の上流側部分の方が下流側部分に比して、内部に流入する排ガス中に含まれる鉛や硫黄等により被毒し易いので、同上流側部分の最大酸素吸蔵量が同下流側部分に比して低下し易くなるからである。
【０１１８】
具体的には、本装置は、触媒モデルが対象とする第１触媒５３の各ブロック（ｉ）毎の各最大酸素吸蔵量Ｃｍａｘ（ｉ）  （ｉ＝１，・・・，Ｎ）を、図１０に示した最大酸素吸蔵量分布マップに基づいた下記数１４に基づいて算出する。
【０１１９】
【数１４】
Ｃｍａｘ（ｉ）＝Ａ・（ｉ−（Ｎ／２））＋（Ｃｍａｘａｌｌ／Ｎ）  （ｉ＝１，・・・，Ｎ）
【０１２０】
上記数１４において、Ａは正の定数であって、各ブロック毎の最大酸素吸蔵量の分布の上記勾配を決定する値である。また、第１触媒５３の最大酸素吸蔵量Ｃｍａｘａｌｌは後述するルーチンにより別途求められている。なお、第１触媒５３の各ブロック毎の各最大酸素吸蔵量は、上流側のブロックから下流側のブロックに推移するに従い増加するように設定されていればよく、例えば、非線形的に増加するように設定されていてもよい。このようにして、第１触媒５３の各ブロック毎の各最大酸素吸蔵量が算出される。
【０１２１】
（触媒モデルの適用）
次に、以上説明した触媒モデルを、図１１に示したように、第１触媒５３に適用し、各種値を求める例について説明する。
【０１２２】
以下、第１触媒５３のｉ番目のブロックであるブロック（ｉ）における流入酸素量を流入酸素量ＣｇｉｎＯ２（ｉ），流出酸素量を流出酸素量ＣｇｏｕｔＯ２（ｉ），酸素吸蔵量をＯＳＡ（ｉ），最大酸素吸蔵量をＣｍａｘ（ｉ）とそれぞれ称呼する。また、各ブロックの酸素吸蔵量ＯＳＡ（ｉ）  （ｉ＝１，２，・・・，Ｎ）  を積算することにより得られる第１触媒５３全体の酸素吸蔵量を酸素吸蔵量ＯＳＡａｌｌと称呼し、各ブロックの最大酸素吸蔵量Ｃｍａｘ（ｉ）  （ｉ＝１，２，・・・，Ｎ）  を積算した値である第１触媒５３全体の最大酸素吸蔵量を最大酸素吸蔵量Ｃｍａｘａｌｌと称呼する。
【０１２３】
この触媒モデルにおいては、図１１に示したように、第１触媒５３の各ブロックにおける酸素吸蔵量ＯＳＡ（ｉ）  （ｉ＝１，２，・・・，Ｎ）の初期値を初期条件として付与するとともに、ＣＰＵ７１の演算周期が経過する毎に、第１触媒５３の最上流のブロック（１）における流入酸素量ＣｇｉｎＯ２（１）を境界条件として付与すれば、第１触媒５３の各ブロック（ｉ）  （ｉ＝１，２，・・・，Ｎ）  における酸素吸蔵量ＯＳＡ（ｉ），流入酸素量ＣｇｉｎＯ２（ｉ），及び流出酸素量ＣｇｏｕｔＯ２（ｉ）を全て算出することができる。これにより、第１触媒５３全体の酸素吸蔵量ＯＳＡａｌｌも取得・算出することができる。
【０１２４】
そこで、先ず、第１触媒５３の各ブロックにおける酸素吸蔵量の初期値を付与する手法について説明すると、本装置は、下流側空燃比センサ６７の出力Ｖｏｘｓが０．７（Ｖ）より大きい値を示したとき、即ち、第１触媒５３の下流側の空燃比が明白なリッチ空燃比となったときは、同第１触媒５３内に酸素が全く存在せず未燃ＨＣ，ＣＯが浄化されない状態となったことを意味するから、第１触媒５３の各ブロックにおける酸素吸蔵量ＯＳＡ（ｉ）  （ｉ＝１，２，・・・，Ｎ）  及び第１触媒５３全体の酸素吸蔵量ＯＳＡａｌｌを全て「０」に設定する。このようにして、第１触媒５３の各ブロックにおける酸素吸蔵量の初期値「０」が初期条件として付与される。
【０１２５】
次に、第１触媒５３の最上流のブロック（１）における流入酸素量ＣｇｉｎＯ２（１）を付与する手法について説明すると、本装置は、下記数１５に基づいてＣＰＵ７１の演算周期毎の流入酸素量ＣｇｉｎＯ２（１）を算出する。
【０１２６】
【数１５】
ＣｇｉｎＯ２（１）＝０．２３・ＤＦｃ・ｓｔｏｉｃｈ・ｔ（ＮＥ，Δｔ）
【０１２７】
上記数１５において、値「０．２３」は大気中に含まれる酸素の重量割合であり、ＤＦｃは前述した筒内燃料供給量偏差であり、ｓｔｏｉｃｈは理論空燃比（例えば、１４．７）である。また、ｔ（ＮＥ，Δｔ）は、エンジン回転速度ＮＥと上記演算周期Δｔから一吸気行程あたりの時間を一演算周期Δｔに変換する関数である。
【０１２８】
この数１５に示したように、筒内燃料供給量偏差ＤＦｃに理論空燃比ｓｔｏｉｃｈを乗じることで一吸気行程あたりの空気の過剰量が求められ、この一吸気行程あたりの空気の過剰量にｔ（ＮＥ，Δｔ）を乗じることで、一演算周期Δｔにおける空気の過剰量が求められ、この一演算周期Δｔにおける空気の過剰量に酸素の重量割合を乗じることで一演算周期Δｔにおける酸素の過剰量、即ち現時点での流入酸素量ＣｇｉｎＯ２（１）が求められる。
【０１２９】
このようにして算出される流入酸素量ＣｇｉｎＯ２（１）は、上記数１５から明らかなように、酸素が過剰であるとき（即ち、空燃比がリーンであってＤＦｃが正の値となるとき）に正の値となり、酸素が不足しているとき（即ち、空燃比がリッチであってＤＦｃが負の値となるとき）に負の値となるように計算される。このようにして、ＣＰＵ７１の演算周期毎に第１触媒５３の最上流のブロック（１）における流入酸素量ＣｇｉｎＯ２（１）が境界条件として付与される。
【０１３０】
なお、上記数１５に示すように、流入酸素量ＣｇｉｎＯ２（１）（従って、流入酸素量ＣｇｉｎＯ２（ｉ））は、上流側空燃比センサ６６の出力値ｖａｂｙｆｓと上流側目標値との偏差に基づく値である筒内燃料供給量偏差ＤＦｃに基づいて計算されている。また、上記数８及び上記数１２に示すように、酸素吸蔵量ＯＳＡ（１）（従って、酸素吸蔵量ＯＳＡ（ｉ））は流入酸素量ＣｇｉｎＯ２（１）の時間積分値に基づいて計算されている。従って、第１触媒５３の酸素吸蔵量ＯＳＡａｌｌは、実質的に、上流側空燃比センサ６６の出力値ｖａｂｙｆｓと上流側目標値との偏差に基づく値の時間積分値に基づいて計算されていると云える。
【０１３１】
以上のようにして、本装置は、ＣＰＵ７１の演算周期毎に、第１触媒５３の各ブロック（ｉ）  （ｉ＝１，２，・・・，Ｎ）  における酸素吸蔵量ＯＳＡ（ｉ），流入酸素量ＣｇｉｎＯ２（ｉ），及び流出酸素量ＣｇｏｕｔＯ２（ｉ）を全て算出するとともに、第１触媒５３全体の酸素吸蔵量ＯＳＡａｌｌの値を算出（推定）する。このように、触媒内における酸素吸蔵反応の速度（前記反応速度定数ｈ）を考慮して構築された触媒モデルＡ１２に基づいて第１触媒５３の酸素吸蔵量ＯＳＡａｌｌを推定する手段が酸素吸蔵量推定手段に相当する。
【０１３２】
（実際の作動）
次に、上記空燃比制御装置（排気浄化装置）の実際の作動について説明する。（基本燃料噴射量補正量の更新）
ＣＰＵ７１は、図１２にフローチャートにより示した基本燃料噴射量補正量の更新を行うルーチンを所定時間の経過毎に繰り返し実行している。従って、所定のタイミングになると、ＣＰＵ７１はステップ１２００から処理を開始し、ステップ１２０５に進んでの値が「０」であって、且つ、基本燃料噴射量補正量ΔＦｂａｓｅの更新条件が成立しているか否かを判定する。基本燃料噴射量補正量更新処理実行中フラグＬＥＡＲＮは、その値が「１」であるとき基本燃料噴射量補正量更新処理が実行されていることを示し、その値が「０」であるとき基本燃料噴射量補正量更新処理が実行されていないことを示す。なお、基本燃料噴射量補正量更新処理実行中フラグＬＥＡＲＮは、図示しないイグニッションスイッチが「ＯＦＦ」から「ＯＮ」に変更されたときに「０」に設定される。
【０１３３】
基本燃料噴射量補正量ΔＦｂａｓｅの更新条件は、内燃機関の暖機運転が終了した場合（具体的には、水温センサ６５が検出する冷却水温ＴＨＷが所定温度未満から同所定温度以上に変化した場合）、燃料の屈折率等を検出して燃料の性状を検出する図示しない周知の燃料性状センサの出力に基づいて燃料の性状に変化があったと判定された場合等に成立する。燃料性状の変化は、例えば、燃料を補給したとき等に発生する。燃料性状の変化があることを更新条件に加えているのは、燃料性状に変化があると、理論空燃比そのものが変化する可能性があるからである。
【０１３４】
いま、内燃機関１０の暖気運転が終了した直後であるものとして説明を続けると、ＣＰＵ７１はステップ１２０５にて「Ｙｅｓ」と判定してステップ１２１０に進み、基本燃料噴射量補正量更新処理実行中フラグＬＥＡＲＮの値を「１」に」設定するとともに、続くステップ１２１５に進んで後述するルーチンにて使用する筒内燃料供給量偏差の積分値ＳＤＦｃ（＝ΣＤＦｃ）の値を「０」に初期化した後、ステップ１２９５に進んで本ルーチンを一旦終了する。以降、基本燃料噴射量補正量更新処理実行中フラグＬＥＡＲＮの値は「１」になっているから、ＣＰＵ７１はステップ１２０５にて「Ｎｏ」と判定してステップ１２９５に直ちに進んで本ルーチンを一旦終了するようになる。
【０１３５】
（目標空燃比の設定）
次に、上流側目標空燃比ａｂｙｆｒを設定する際の作動について説明すると、ＣＰＵ７１は図１３にフローチャートにより示したルーチンを所定時間の経過毎に繰り返し実行している。従って、所定のタイミングになると、ＣＰＵ７１はステップ１３００から処理を開始してステップ１３０５に進み、現時点での内燃機関の運転状態に応じて上流側目標空燃比ａｂｙｆｒ（ｋ）を設定する。
【０１３６】
次に、ＣＰＵ７１はステップ１３１０に進み、前回の本ルーチン実行時にて設定された上流側目標空燃比ａｂｙｆｒ（ｋ）が理論空燃比（例えば、１４．７）であって、今回の本ルーチン実行時にて設定された上流側目標空燃比ａｂｙｆｒ（ｋ）が理論空燃比以外の空燃比であるか否か（上流側目標空燃比ａｂｙｆｒ（ｋ）が理論空燃比から理論空燃比以外に変化したか否か）を判定する。
【０１３７】
現時点は、内燃機関１０の暖気運転が終了した直後であるから、上流側目標空燃比ａｂｙｆｒ（ｋ）は理論空燃比以外から理論空燃比に変化している。従って、ＣＰＵ７１はステップ１３１０にて「Ｎｏ」と判定してステップ１３１５に進み、上流側目標空燃比ａｂｙｆｒ（ｋ）が理論空燃比以外から理論空燃比に変化したか否かを判定し、同ステップ１３１５にて「Ｙｅｓ」と判定してステップ１３２０に進む。
【０１３８】
ＣＰＵ７１はステップ１３２０に進むと、空燃比フラグＸＡＢＹＦの値を「０」に設定するとともに、ステップ１３９５に進んで本ルーチンを一旦終了する。ここで、空燃比フラグＸＡＢＹＦは、その値が「１」のとき上流側目標空燃比ａｂｙｆｒ（ｋ）が理論空燃比以外の空燃比に設定されていることを示し、その値が「０」のとき上流側目標空燃比ａｂｙｆｒ（ｋ）が理論空燃比に設定されていることを示す。以降、上流側目標空燃比ａｂｙｆｒ（ｋ）が理論空燃比に維持されている限りにおいて、ＣＰＵ７１はステップ１３１０、１３１５にて共に「０」と判定してステップ１３９５に進むから空燃比フラグＸＡＢＹＦの値は「０」に維持される。
【０１３９】
（燃料噴射量の計算）
また、ＣＰＵ７１は、図１４にフローチャートにより示した燃料噴射量Ｆｉの計算、及び燃料噴射の指示を行うルーチンを、各気筒のクランク角が各吸気上死点前の所定クランク角度（例えば、ＢＴＤＣ９０°ＣＡ）となる毎に、繰り返し実行するようになっている。従って、任意の気筒のクランク角度が前記所定クランク角度になると、ＣＰＵ７１はステップ１４００から処理を開始してステップ１４０５に進み、エアフローメータ６１により計測された吸入空気流量Ｇａ、エンジン回転速度ＮＥ、及び前記上流側目標空燃比ａｂｙｆｒ（ｋ）に基づいて、機関の空燃比を同上流側目標空燃比ａｂｙｆｒ（ｋ）とするための補正前基本燃料噴射量Ｆｂａｓｅｂを求める。
【０１４０】
次いで、ＣＰＵ７１はステップ１４１０に進み、前記補正前基本燃料噴射量Ｆｂａｓｅｂに、後述するルーチンにて更新されている最新の基本燃料噴射量補正量算出テーブルΔＦｂａｓｅ（Ｇａ）と前記吸入空気流量Ｇａとから求めた基本燃料噴射量補正量ΔＦｂａｓｅを加えることで補正後基本燃料噴射量Ｆｂａｓｅを求め、続くステップ１４１５にて同補正後基本燃料噴射量Ｆｂａｓｅの値を目標筒内燃料供給量Ｆｃｒ（ｋ）として格納する。
【０１４１】
次に、ＣＰＵ７１はステップ１４２０にて、補正後基本燃料噴射量Ｆｂａｓｅに係数Ｋを乗じた値に後述するフィードバック制御量ＤＦｉを加えた値を最終燃料噴射量Ｆｉとして設定する。この係数Ｋの値は、通常は「１．００」であり、後述するように、最大酸素吸蔵量Ｃｍａｘａｌｌを求めるために強制的に空燃比を変更するとき、「１．００」以外の所定値に設定される。
【０１４２】
次に、ＣＰＵ７１はステップ１４２５に進み、同ステップ１４２５にて燃料噴射量Ｆｉの燃料を噴射するための指示をインジェクタ３９に対して行う。その後、ＣＰＵ７１はステップ１４３０に進み、その時点の燃料噴射量合計量ｍｆｒに最終燃料噴射量Ｆｉを加えた値を新たな燃料噴射量合計量ｍｆｒに設定する。この燃料噴射量合計量ｍｆｒは、後述する酸素吸蔵量を算出する際に用いられる。その後、ＣＰＵ７１はステップ１４９５に進み、本ルーチンを一旦終了する。以上により、フィードバック制御量ＤＦｉによりフィードバック補正された後の燃料噴射量Ｆｉの燃料が吸気行程を迎える気筒に対して噴射される。
【０１４３】
（従来の装置を適用した場合のフィードバック制御量の計算）
次に、上記従来の装置を適用した場合のフィードバック制御量ＤＦｉを算出する際の作動について説明すると、ＣＰＵ７１は図１５にフローチャートにより示したルーチンを所定時間の経過毎に繰り返し実行している。従って、所定のタイミングになると、ＣＰＵ７１はステップ１５００から処理を開始し、ステップ１５０５に進んでフィードバック制御条件が成立しているか否かを判定する。このフィードバック制御条件は、例えば、機関の冷却水温ＴＨＷが第１所定温度以上であって、機関の一回転当りの吸入空気量（負荷、筒内吸入空気量Ｍｃ）が所定値以下であり、上流側空燃比センサ６６が正常（活性状態であることを含む。）であり、且つ、後述する最大酸素吸蔵量取得制御実行中フラグＸＨＡＮの値が「０」のときに成立する。なお、最大酸素吸蔵量取得制御実行中フラグＸＨＡＮは、その値が「１」のとき最大酸素吸蔵量Ｃｍａｘａｌｌを取得するために強制的に空燃比を変更する空燃比制御（アクティブ制御）を実行していることを示し、その値が「０」のとき最大酸素吸蔵量Ｃｍａｘａｌｌを取得するための空燃比制御を実行していないことを示す。
【０１４４】
いま、フィードバック制御条件が成立しているものとして説明を続けると、ＣＰＵ７１はステップ１５０５にて「Ｙｅｓ」と判定してステップ１５１０に進み、基本燃料噴射量補正量更新処理実行中フラグＬＥＡＲＮと空燃比フラグＸＡＢＹＦの少なくとも一つの値が「１」になっているか否かを判定する。
【０１４５】
現時点では、基本燃料噴射量補正量更新処理実行中フラグＬＥＡＲＮの値が「１」に、空燃比フラグＸＡＢＹＦの値が「０」に設定されているから、ＣＰＵ７１はステップ１５１０にて「Ｙｅｓ」と判定してステップ１５１５に進み、現時点の上流側空燃比センサ６６の出力値ｖａｂｙｆｓを図３に示したテーブルに基いて変換することにより、現時点における検出空燃比ａｂｙｆｓを求める。
【０１４６】
次に、ＣＰＵ７１はステップ１５２０に進み、現時点からＮストローク（Ｎ回の吸気行程）前に吸気行程を迎えた気筒の吸入空気量である筒内吸入空気量Ｍｃ（ｋ−Ｎ）を前記求めた検出空燃比ａｂｙｆｓで除することにより、現時点からＮストローク前の実際の筒内燃料供給量Ｆｃ（ｋ−Ｎ）を求める。
【０１４７】
そして、ＣＰＵ７１はステップ１５２５に進んで、図１４のステップ１４１５にて既に求めてある現時点からＮストローク前の目標筒内燃料供給量Ｆｃｒ（ｋ−Ｎ）から前記筒内燃料供給量Ｆｃ（ｋ−Ｎ）を減じた値を筒内燃料供給量偏差ＤＦｃとして設定する。つまり、筒内燃料供給量偏差ＤＦｃは、Ｎストローク前の時点で筒内に供給された燃料の過不足分を表す量となる。次に、ＣＰＵ７１はステップ１５３０に進み、上記数６に基づくステップ１５３０内に示した式に従ってフィードバック制御量ＤＦｉを求め、続くステップ１５３５にてその時点における筒内燃料供給量偏差ＤＦｃの積分値ＳＤＦｃに前記ステップ１５２５にて求めた筒内燃料供給量偏差ＤＦｃを加えて、新たな筒内燃料供給量偏差の積分値ＳＤＦｃを求めた後、続くステップ１５９５に進んで本ルーチンを一旦終了する。
【０１４８】
このように、基本燃料噴射量補正量更新処理が実行されている間（基本燃料噴射量補正量更新処理実行中フラグＬＥＡＲＮの値が「１」になっている間）、ＣＰＵ７１がステップ１５１０にて「Ｙｅｓ」と判定し続けるから、前記従来の装置を適用した場合のフィードバック制御量ＤＦｉがステップ１５３０にて求められ、このフィードバック制御量ＤＦｉが前述した図１４のステップ１４２０により燃料噴射量Ｆｉに反映されることで上述した従来の装置を適用した場合の機関の空燃比制御が実行される。
【０１４９】
一方、ステップ１５０５の判定時において、フィードバック制御条件が不成立であると、ＣＰＵ７１は同ステップ１５０５にて「Ｎｏ」と判定してステップ１５４０に進んでフィードバック制御量ＤＦｉの値を「０」に設定し、その後、ステップ１５９５に進んで本ルーチンを一旦終了する。このように、フィードバック制御条件が不成立であるときは、フィードバック制御量ＤＦｉを「０」として前記従来の装置に基づくフィードバック制御による機関の空燃比の補正を行わない。
【０１５０】
（基本燃料噴射量補正量更新処理終了判定）
また、ＣＰＵ７１は、基本燃料噴射量補正量更新処理終了判定を行うための図１６にフローチャートにより示したルーチンを所定時間の経過毎に繰り返し実行している。従って、所定のタイミングになると、ＣＰＵ７１はステップ１６００から処理を開始してステップ１６０５に進んで、基本燃料噴射量補正量更新処理実行中フラグＬＥＡＲＮの値が「１」であり、且つ、内燃機関１０が所定時間以上定常運転状態にあるか否かを判定し、同ステップ１６０５にて「Ｎｏ」と判定する限りにおいてステップ１６９５に直ちに進んで本ルーチンを一旦終了する。なお、内燃機関１０が定常運転状態にあると判定される条件は、冷却水温ＴＨＷが所定温度以上であり、図示しない車速センサにより得られた車速が所定の高車速以上であり、スロットル弁開度ＴＡの単位時間あたりの変化量が所定量以下である等の場合に成立する。
【０１５１】
現時点では、基本燃料噴射量補正量更新処理実行中フラグＬＥＡＲＮの値が「１」になっている。従って、いま、内燃機関１０が所定時間以上定常運転状態にあるものとすると、ＣＰＵ７１はステップ１６０５にて「Ｙｅｓ」と判定してステップ１６１０に進み、現時点にて図１５のステップ１５３０にて算出されているフィードバック制御量ＤＦｉの値を更新用フィードバック制御量ＤＦｉｌｅａｒｎに格納する。なお、現時点では、筒内燃料供給量偏差ＤＦｃの値が「０」になっていることから更新用フィードバック制御量ＤＦｉｌｅａｒｎの値は積分項（Ｇｉ’・ＳＤＦｃ）の値と等しくなる。この更新用フィードバック制御量ＤＦｉｌｅａｒｎの値は、現時点での前述したインジェクタ３９等の誤差の大きさを表す。
【０１５２】
次に、ＣＰＵ７１はステップ１６１５に進んで前記更新用フィードバック制御量ＤＦｉｌｅａｒｎの値に基づいて、基本燃料噴射量補正量算出テーブルΔＦｂａｓｅ（Ｇａ）を更新し、更新後の最新の基本燃料噴射量補正量算出テーブルΔＦｂａｓｅ（Ｇａ）をバックアップＲＡＭ７４に記憶した後、ステップ１６２０に進んで基本燃料噴射量補正量更新処理実行中フラグＬＥＡＲＮの値を「０」に設定し、ステップ１６９５に進んで本ルーチンを一旦終了する。以上の処理により、基本燃料噴射量補正量算出テーブルΔＦｂａｓｅ（Ｇａ）が更新される。以降、基本燃料噴射量補正量更新処理実行中フラグＬＥＡＲＮの値が「０」であるから、ＣＰＵ７１はステップ１６０５にて「Ｎｏ」と判定してステップ１６９５に直ちに進むようになる。
【０１５３】
以降、基本燃料噴射量補正量更新処理実行中フラグＬＥＡＲＮの値が「０」であるから、ＣＰＵ７１はステップ１６０５にて「Ｎｏ」と判定してステップ１６９５に直ちに進むようになる。また、この結果、現時点では、基本燃料噴射量補正量更新処理実行中フラグＬＥＡＲＮの値も空燃比フラグＸＡＢＹＦの値も「０」になっているから、ＣＰＵ７１は図１５のステップ１５１０にて「Ｎｏ」と判定してステップ１５９５に直ちに進み、前記従来の装置を適用した場合のフィードバック制御量ＤＦｉを算出する処理を実行しないようになる。
【０１５４】
（本装置を適用した場合のフィードバック制御量の計算）
一方、ＣＰＵ７１は、本装置を適用した場合のフィードバック制御量ＤＦｉを算出するための図１７にフローチャートにより示したルーチンを所定時間の経過毎に繰り返し実行している。従って、所定のタイミングになると、ＣＰＵ７１はステップ１７００から処理を開始し、ステップ１７０５に進んで前述のステップ１５０５と同一のフィードバック制御条件が成立しているか否かを判定する。
【０１５５】
いま、フィードバック制御条件が成立しているものとして説明を続けると、ＣＰＵ７１はステップ１７０５にて「Ｙｅｓ」と判定してステップ１７１０に進み、基本燃料噴射量補正量更新処理実行中フラグＬＥＡＲＮの値と空燃比フラグＸＡＢＹＦの値が共に「０」になっているか否かを判定する。
【０１５６】
先に述べたように、現時点では基本燃料噴射量補正量更新処理実行中フラグＬＥＡＲＮの値も空燃比フラグＸＡＢＹＦの値も「０」に設定されているから、ＣＰＵ７１はステップ１７１０にて「Ｙｅｓ」と判定してステップ１７１５〜ステップ１７２５に順次進み、前述のステップ１５１５〜ステップ１５２５と同様にして筒内燃料供給量偏差ＤＦｃを求める。
【０１５７】
次に、ＣＰＵ７１はステップ１７３０に進み、上記数１に基づくステップ１７３０内に示した式に従ってフィードバック制御量ＤＦｉを求めた後、ステップ１７９５に進んで本ルーチンを一旦終了する。なお、酸素吸蔵量ＯＳＡａｌｌ、及び最大酸素吸蔵量Ｃｍａｘａｌｌは、それぞれ、後述するルーチンにより別途求められている。
【０１５８】
このように、以降、基本燃料噴射量補正量更新処理が実行されておらず（基本燃料噴射量補正量更新処理実行中フラグＬＥＡＲＮの値が「０」になっていて）、且つ、目標空燃比ａｂｙｆｒ（ｋ）が理論空燃比に維持されている（空燃比フラグＸＡＢＹＦの値が「０」になっている）限りにおいて、ＣＰＵ７１がステップ１７１０にて「Ｙｅｓ」と判定し続けるから、本装置を適用した場合のフィードバック制御量ＤＦｉがステップ１７３０にて求められ、このフィードバック制御量ＤＦｉが前述した図１４のステップ１４２０により燃料噴射量Ｆｉに反映されることで本装置を適用した場合の機関の空燃比制御が実行される。
【０１５９】
一方、ステップ１７０５の判定時において、フィードバック制御条件が不成立であると、ＣＰＵ７１は同ステップ１７０５にて「Ｎｏ」と判定してステップ１７３５に進んでフィードバック制御量ＤＦｉの値を「０」に設定し、その後、ステップ１５９５に進んで本ルーチンを一旦終了する。このように、フィードバック制御条件が不成立であるときは、フィードバック制御量ＤＦｉを「０」として本装置に基づくフィードバック制御による機関の空燃比の補正を行わない。
【０１６０】
次に、この状態（基本燃料噴射量補正量更新処理実行中フラグＬＥＡＲＮの値も空燃比フラグＸＡＢＹＦの値も「０」に設定されている状態）から、内燃機関１０が急加速運転状態等になって上流側目標空燃比ａｂｙｆｒ（ｋ）が理論空燃比以外の空燃比に設定された場合について説明する。この場合、ＣＰＵ７１は図１３のステップ１３１０に進んだとき「Ｙｅｓ」と判定してステップ１３２５に進み、空燃比フラグＸＡＢＹＦの値を「１」に設定するとともに、続くステップ１３３０にて図１５のステップ１５３５にて算出される筒内燃料供給量偏差ＤＦｃの積分値ＳＤＦｃの値を「０」に初期化した後、ステップ１３９５に進んで本ルーチンを一旦終了する。以降、上流側目標空燃比ａｂｙｆｒ（ｋ）が理論空燃比以外の空燃比に維持されている限りにおいて、ＣＰＵ７１はステップ１３１０、１３１５にて共に「０」と判定してステップ１３９５に進むから空燃比フラグＸＡＢＹＦの値は「１」に維持される。
【０１６１】
この結果、現時点では、基本燃料噴射量補正量更新処理実行中フラグＬＥＡＲＮの値は「０」に、空燃比フラグＸＡＢＹＦの値は「１」になっているから、ＣＰＵ７１は図１７のステップ１７１０に進んだとき「Ｎｏ」と判定して本装置を適用した場合のステップ１７３０にて算出されるフィードバック制御量ＤＦｉを算出する処理を実行しないようになる一方で、図１５のステップ１５１０に進んだとき「Ｙｅｓ」と判定して前記従来の装置を適用した場合のステップ１５３０にて実行されるフィードバック制御量ＤＦｉを算出する処理を再び開始するようになる。
【０１６２】
このようにして、基本燃料噴射量補正量算出テーブルΔＦｂａｓｅ（Ｇａ）の更新処理が実行されている間（基本燃料噴射量補正量更新処理実行中フラグＬＥＡＲＮの値が「１」に設定されている間）、及び、上流側目標空燃比ａｂｙｆｒ（ｋ）が理論空燃比以外の空燃比に設定されている間（空燃比フラグＸＡＢＹＦの値が「１」に設定されている間）にのみ、本装置を適用した場合のフィードバック制御量ＤＦｉの代わりに、前記従来の装置を適用した場合のフィードバック制御量ＤＦｉが算出される。
【０１６３】
（最大酸素吸蔵量の算出）
次に、最大酸素吸蔵量算出のために強制的に空燃比を変更する最大酸素吸蔵量取得制御について説明する。ＣＰＵ７１は図１８〜図２２のフローチャートにより示された各ルーチンを所定時間の経過毎に実行するようになっている。
【０１６４】
従って、所定のタイミングになると、ＣＰＵ７１は図１８のステップ１８００から処理を開始し、ステップ１８０５に進んで最大酸素吸蔵量取得制御実行中フラグＸＨＡＮの値が「０」であるか否かを判定する。いま、最大酸素吸蔵量算出のための最大酸素吸蔵量取得制御を行っておらず、且つ、最大酸素吸蔵量取得制御開始条件が成立していないとして説明を続けると、最大酸素吸蔵量取得制御実行中フラグＸＨＡＮの値は「０」となっている。従って、ＣＰＵ７１はステップ１８０５にて「Ｙｅｓ」と判定してステップ１８１０に進み、先に説明した図１４のステップ１４２０にて使用される係数Ｋの値を１．００に設定する。
【０１６５】
次いで、ＣＰＵ７１はステップ１８１５にて最大酸素吸蔵量取得制御の開始判定条件が成立しているか否かを判定する。この最大酸素吸蔵量取得制御の開始判定条件は、冷却水温ＴＨＷが所定温度以上であり、図示しない車速センサにより得られた車速が所定の高車速以上であって、スロットル弁開度ＴＡの単位時間あたりの変化量が所定量以下であること等の機関が定常運転されている条件が成立し、且つ、下流側空燃比センサ６７の出力Ｖｏｘｓが理論空燃比よりもリッチな空燃比に相当する値となっていて、且つ、前回の最大酸素吸蔵量取得制御の終了時点から所定時間以上が経過している場合等に成立する。現段階では、上述したように、最大酸素吸蔵量取得制御の開始判定条件は成立していないから、ＣＰＵ７１はステップ１８１５にて「Ｎｏ」と判定してステップ１８９５に進み、本ルーチンを一旦終了する。
【０１６６】
次に、現時点では最大酸素吸蔵量取得制御を行っていないが、最大酸素吸蔵量取得制御の開始判定条件が成立したものとして説明を続けると、この場合、ＣＰＵ７１はステップ１８０５にて「Ｙｅｓ」と判定してステップ１８１０に進み、同ステップ１８１０にて係数Ｋの値を１．００に設定する。次いで、ＣＰＵ７１は、前記開始判定条件が成立しているので、ステップ１８１５にて「Ｙｅｓ」と判定してステップ１８２０に進み、最大酸素吸蔵量取得制御実行中フラグＨＡＮの値を「１」に設定する。
【０１６７】
そして、ＣＰＵ７１はステップ１８２５に進み、第１モードに移行するためにＭｏｄｅの値を「１」に設定するとともに、続くステップ１８３０にて係数Ｋの値を０．９８に設定し、ステップ１８９５に進んで本ルーチンを一旦終了する。これにより、前述のフィードバック制御条件が成立しなくなるから、ＣＰＵ７１は図１５のステップ１５０５又は図１７のステップ１７０５にて「Ｎｏ」と判定するようになり、フィードバック制御量ＤＦｉの値は「０」に設定される。この結果、図１４のステップ１４２０の実行により、補正後基本燃料噴射量Ｆｂａｓｅが０．９８倍された値が最終燃料噴射量Ｆｉとして算出され、この最終燃料噴射量Ｆｉの燃料が噴射されるから、機関の空燃比（従って、第１触媒５３に流入する排ガスの空燃比）は理論空燃比よりもリーンな所定のリーン空燃比に制御される。
【０１６８】
以降、ＣＰＵ７１は図１８のルーチンの処理をステップ１８００から繰り返し実行するが、最大酸素吸蔵量取得制御実行中フラグＸＨＡＮの値が「１」となっていることから、ステップ１８０５にて「Ｎｏ」と判定して直ちにステップ１８９５に進み、本ルーチンを一旦終了するようになる。
【０１６９】
一方、ＣＰＵ７１は図１９に示した第１モード制御ルーチンを所定時間の経過毎に繰り返し実行している。従って、所定のタイミングとなると、ＣＰＵ７１はステップ１９００から処理を開始してステップ１９０５に進み、Ｍｏｄｅの値が「１」であるか否かを判定する。このとき、Ｍｏｄｅの値が「１」でなければ、ＣＰＵ７１は直ちにステップ１９９５に進んで本ルーチンを一旦終了する。
【０１７０】
以下、図１８のステップ１８２５の処理によりＭｏｄｅの値が「１」に変更された直後であるものとして説明を続けると、この場合、ＣＰＵ７１はステップ１９０５にて「Ｙｅｓ」と判定してステップ１９１０に進み、下流側空燃比センサ６７の出力Ｖｏｘｓが理論空燃比よりもリッチな空燃比を示す値から同理論空燃比よりもリーンな空燃比を示す値に変化したか否かを判定する。
【０１７１】
現時点では、機関の空燃比を所定のリーン空燃比に変更した直後であるから、下流側空燃比センサ出力Ｖｏｘｓは理論空燃比よりもリッチな空燃比を示している。従って、ＣＰＵ７１はステップ２１９１０にて「Ｎｏ」と判定し、ステップ１９９５にて本ルーチンを一旦終了する。
【０１７２】
以降、ＣＰＵ７１は図１９のステップ１９００〜１９１０を繰り返し実行する。また、空燃比は所定のリーン空燃比に維持されているから、所定の時間が経過すると第１触媒５３の酸素吸蔵量が最大酸素吸蔵量に到達する。従って、これに応じて下流側空燃比センサ出力Ｖｏｘｓはリッチを示す値からリーンを示す値に変化する。これにより、ＣＰＵ７１はステップ１９１０に進んだとき、「Ｙｅｓ」と判定してステップ１９１５に進み、Ｍｏｄｅの値を「２」に設定するとともに、続くステップ１９２０にて係数Ｋの値を１．０２に設定し、その後ステップ１９９５にて本ルーチンを一旦終了する。この結果、機関の空燃比は理論空燃比よりもリッチな上記所定のリッチ空燃比に制御される。
【０１７３】
また、ＣＰＵ７１は図２０に示した第２モード制御ルーチンを所定時間の経過毎に繰り返し実行している。従って、所定のタイミングとなると、ＣＰＵ７１はステップ２０００から処理を開始してステップ２００５に進み、Ｍｏｄｅの値が「２」であるか否かを判定する。いま、先の図１９のステップ１９１５の処理によりＭｏｄｅの値が「２」に変更された直後であるものとして説明を続けると、ＣＰＵ７１はステップ２００５にて「Ｙｅｓ」と判定してステップ２０１０に進み、下流側空燃比センサ６７の出力Ｖｏｘｓが理論空燃比よりリーンな空燃比を示す値から同理論空燃比よりリッチな空燃比を示す値に変化したか否かを判定する。この時点では、機関の空燃比を所定のリッチ空燃比に変更した直後であるから第１触媒５３から下流側空燃比センサ出力Ｖｏｘｓは理論空燃比よりもリーンな空燃比を示している。従って、ＣＰＵ７１はステップ２０１０にて「Ｎｏ」と判定し、ステップ２０９５に進んで本ルーチンを一旦終了する処理を行う。
【０１７４】
その後、機関の空燃比は引き続いて前記所定のリッチ空燃比に維持されているから、第１触媒５３に貯蔵されている酸素が消費されていき、所定の時間が経過すると第１触媒５３の酸素吸蔵量が「０」に到達する。この結果、下流側空燃比センサ６７の出力Ｖｏｘｓが理論空燃比よりリーンな空燃比を示す値から同理論空燃比よりリッチな空燃比を示す値に変化する。これにより、ＣＰＵ７１はステップ２０１０からステップ２０１５に進んでＭｏｄｅの値を「０」に再設定し、続くステップ２０２０にて最大酸素吸蔵量取得制御実行中フラグＸＨＡＮの値を「０」に設定した後、ステップ２０９５に進んで本ルーチンを一旦終了する。
【０１７５】
これにより、ＣＰＵ７１は図１８のルーチンを実行する際、ステップ１８０５にて「Ｙｅｓ」と判定してステップ１８１０に進むので、係数Ｋの値が１．００に戻される。また、前述のフィードバック制御条件が成立していれば、ＣＰＵ７１は図１５のステップ１５０５又は図１７のステップ１７０５にて「Ｙｅｓ」と判定するから、空燃比フィードバック制御が再開される。
【０１７６】
以上、説明したように、最大酸素吸蔵量所得制御の開始判定条件が成立すると、機関の空燃比（従って、第１触媒５３に流入する排ガスの空燃比）が所定のリーン空燃比、及び所定のリッチ空燃比の順に強制的に制御される。
【０１７７】
次に、最大酸素吸蔵量取得のための酸素吸蔵量の算出における作動について説明する。ＣＰＵ７１は図２１のフローチャートにより示されたルーチンを所定時間の経過毎に実行するようになっている。従って、所定のタイミングになると、ＣＰＵ７１は図２１のステップ２１００から処理を開始し、ステップ２１０５に進んでＭｏｄｅの値が「２」であるか否かを判定し、Ｍｏｄｅの値が「２」であれば同ステップ２１０５にて「Ｙｅｓ」と判定してステップ２１１０に進み、下記数１６により酸素吸蔵量変化量ΔＯ２を求める。
【０１７８】
【数１６】
ΔＯ２＝０．２３・ｍｆｒ・（ｓｔｏｉｃｈ  −  ａｂｙｆｓａｖｅ）
【０１７９】
上記数１６において、値「０．２３」は大気中に含まれる酸素の重量割合である。ｍｆｒは所定時間ｔｓａｍｐｌｅ内の燃料噴射量Ｆｉの合計量であり、ｓｔｏｉｃｈは理論空燃比（例えば、１４．７）である。ａｂｙｆｓａｖｅは所定時間ｔｓａｍｐｌｅにおいて上流側空燃比センサ６６により検出された空燃比Ａ／Ｆの平均値である。この数１６に示したように、所定時間ｔｓａｍｐｌｅ内の噴射量の合計量ｍｆｒに、検出された空燃比Ａ／Ｆの平均値の理論空燃比からの偏移（ｓｔｏｉｃｈ  −  ａｂｙｆｓａｖｅ）を乗じることで、同所定時間ｔｓａｍｐｌｅにおける空気の消費量（不足量）が求められる。この空気の消費量に酸素の重量割合を乗じることで前記所定時間ｔｓａｍｐｌｅにおける酸素の消費量（酸素吸蔵量変化量ΔＯ２）が求められる。
【０１８０】
そして、ＣＰＵ７１は、ステップ２１１５にてその時点の酸素吸蔵量ＯＳＡ２に上記酸素吸蔵量変化量ΔＯ２の値を加えた値を新たな酸素吸蔵量ＯＳＡ２として設定し、その後ステップ２１２０に進む。
【０１８１】
このような処置（ステップ２１００〜２１１５）は、Ｍｏｄｅの値が「２」である限り繰り返し実行される。この結果、第１触媒５３の上流の空燃比が所定のリッチ空燃比とされる第２モード（Ｍｏｄｅ＝２）において、第１触媒５３の酸素吸蔵量ＯＳＡ２が算出されて行く。第２モードのおいては、第１触媒５３に貯蔵されている酸素が消費されていくからである。なお、ステップ２１０５の判定において「Ｎｏ」と判定される場合、ＣＰＵ７１は同ステップ２１０５からステップ２１２０に直接進む。そして、ＣＰＵ７１は、ステップ２１２０に進むと、燃料噴射量Ｆｉの合計量ｍｆｒを「０」に設定し、その後ステップ２１９５に進んで本ルーチンを一旦終了する。
【０１８２】
次に、最大酸素吸蔵量算出における作動について説明する。ＣＰＵ７１は図２２のフローチャートにより示されたルーチンを所定時間の経過毎に実行するようになっている。従って、所定のタイミングになると、ＣＰＵ７１は図２２のステップ２２００から処理を開始し、ステップ２２０５に進んで最大酸素吸蔵量取得制御実行中フラグＸＨＡＮの値が「１」から「０」に変化したか否かをモニタする。このとき、第２モードが終了して、先に説明した図２０のステップ２０２０にて最大酸素吸蔵量取得制御実行中フラグＸＨＡＮの値が「０」に変更されると、ＣＰＵ７１はステップ２２０５にて「Ｙｅｓ」と判定してステップ２２１０に進む。ここで、最大酸素吸蔵量取得制御実行中フラグＸＨＡＮの値が変化していなければ、ＣＰＵ７１はステップ２２０５からステップ２２９５に直接進んで本ルーチンを一旦終了する。
【０１８３】
いま、第２モードが終了した直後であるとすると、最大酸素吸蔵量取得制御実行中フラグＸＨＡＮの値が「１」から「０」に変更された直後であるから、ＣＰＵ７１はステップ２２０５からステップ２２１０に進み、その時点の酸素吸蔵量ＯＳＡ２を、第１触媒５３の最大酸素吸蔵量Ｃｍａｘａｌｌとして格納する。
【０１８４】
次いで、ＣＰＵ７１はステップ２２１５に進み、カウンタ値ｎの値を「０」に設定した後、ステップ２２２０に進んで第１触媒５３の各ブロック毎の最大酸素吸蔵量を算出する処理を開始する。まず、ＣＰＵ７１はステップ２２２０においてカウンタ値ｎの値を「１」だけ増大して「１」に設定した後、ステップ２２２５に進んで前記ステップ２２１０にて取得した最大酸素吸蔵量Ｃｍａｘａｌｌの値と、カウンタ値ｎの値と、上記数１４に基づくステップ２２２５内に記載した式とに基づいて第１触媒５３のブロック（ｎ）における最大酸素吸蔵量Ｃｍａｘ（ｎ）を算出する。この時点ではカウンタ値ｎの値は「１」であるから、ブロック（１）における最大酸素吸蔵量Ｃｍａｘ（１）が算出される。
【０１８５】
そして、ＣＰＵ７１はステップ２２３０に進んでカウンタ値ｎの値が第１触媒５３のブロック数Ｎと等しいか否かを判定する。現時点ではカウンタ値ｎの値は「１」であるから、ＣＰＵ７１はステップ２２３０にて「Ｎｏ」と判定し、再びステップ２２２０に戻ってカウンタ値ｎの値を「１」だけ増大した後ステップ２２２５及びステップ２２３０の処理を実行する。即ち、ステップ２２２５及びステップ２２３０の処理は、カウンタ値ｎの値が第１触媒５３のブロック数Ｎと等しくなるまで繰り返し実行される。これにより、第１触媒５３の最上流のブロック（１）から最下流のブロック（Ｎ）までの各ブロック（ｎ）の最大酸素吸蔵量Ｃｍａｘ（ｎ）の値が順次算出されていく。
【０１８６】
前述のステップ２２２０の処理が繰り返されることによりカウンタ値ｎの値が第１触媒５３のブロック数Ｎと等しくなると、ＣＰＵ７１はステップ２２３０にて「Ｙｅｓ」と判定してステップ２２３５に進み、酸素吸蔵量ＯＳＡ２の値を「０」に設定した後、ステップ２２９５に進んで本ルーチンを一旦終了する。
【０１８７】
（各ブロック毎の流出酸素量及び酸素吸蔵量、並びに触媒全体の酸素吸蔵量の計算）
次に、第１触媒５３の各ブロック毎の流出酸素量，酸素吸蔵量等の算出における作動について説明する。ＣＰＵ７１は図２３及び図２４のフローチャートにより示された各ルーチンを所定時間の経過毎に実行するようになっている。
【０１８８】
従って、所定のタイミングになると、ＣＰＵ７１は、第１触媒５３の各ブロック毎の流出酸素量，酸素吸蔵量等を算出するための図２３に示したルーチンのステップ２３００から処理を開始し、ステップ２３０５に進んで、図１５のステップ１５２５又は図１７のステップ１７２５にて逐次更新されている筒内燃料供給量偏差ＤＦｃの値と、エンジン回転速度ＮＥと、関数ｔ（ＮＥ，Δｔ）と、上記数１５に基づくステップ２３０５内に記載した式とに基づいて、先に説明したように境界条件である第１触媒５３のブロック（１）における流入酸素量ＣｇｉｎＯ２（１）を算出する。
【０１８９】
次いで、ＣＰＵ７１はステップ２３１０に進んでカウンタ値ｎの値、及び第１触媒５３の酸素吸蔵量ＯＳＡａｌｌの値をそれぞれ「０」に設定した後、ステップ２３１５に進んで第１触媒５３の各ブロック毎の流出酸素量，酸素吸蔵量等を算出する処理を開始する。まず、ＣＰＵ７１はステップ２３１５においてカウンタ値ｎの値を「１」だけ増大して「１」に設定する。カウンタ値ｎは第１触媒５３のブロックの番号を示している。この時点ではカウンタ値ｎの値は「１」であり、続くステップ２３２０からステップ２３７５までの今回の処理においてカウンタ値ｎの値は「１」に維持されるので、今回の同ステップ２３２０〜ステップ２３７５までの処理においては最上流のブロック（１）における計算が実行される。
【０１９０】
まず、ＣＰＵ７１はステップ２３２０に進んで、流入酸素量ＣｇｉｎＯ２（１）の値が「０」以上であるか否かを判定し、流入酸素量ＣｇｉｎＯ２（１）の値が「０」以上であれば同ステップ２３２０において「Ｙｅｓ」と判定するとともにステップ２３２５に進んで、図２２のステップ２２２５にて既に算出されているブロック（１）の最大酸素吸蔵量Ｃｍａｘ（１）の値と、後述するステップ２３６０にて前回本ルーチンが実行されたときに計算（更新）されたブロック（１）の酸素吸蔵量ＯＳＡ（１）の値と、上記数９（の右辺）に基づくステップ２３２５内に記載した式とに基づいてブロック（１）における反応率Ｈを算出する。
【０１９１】
また、ステップ２３２０における判定において、流入酸素量ＣｇｉｎＯ２（１）の値が「０」以上でなければＣＰＵ７１は同ステップ２３２０において「Ｎｏ」と判定するとともにステップ２３３０に進んで、上記最大酸素吸蔵量Ｃｍａｘ（１）の値と、上記酸素吸蔵量ＯＳＡ（１）の値と、上記数１１（の右辺）に基づくステップ２３３０内に記載した式とに基づいてブロック（１）における反応率Ｈを算出する。
【０１９２】
次いで、ＣＰＵ７１はステップ２３３５に進み、ステップ２３２５又はステップ２３３０にて算出した反応率Ｈの値と、ステップ２３０５にて算出したブロック（１）における流入酸素量ＣｇｉｎＯ２（１）の値と、上記数８（の右辺）又は上記数１０（の右辺）に基づくステップ２３３５内に記載した式とに基づいてブロック（１）における酸素吸蔵量変化量δＯＳＡ（１）を算出する。
【０１９３】
次に、ＣＰＵ７１はステップ２３４０に進んで、後述するステップ２３６０にて前回本ルーチンが実行されたときに計算されたブロック（１）の酸素吸蔵量ＯＳＡ（１）の値とステップ２３３５にて今回算出したブロック（１）の酸素吸蔵量変化量δＯＳＡ（１）の値とを積算した値がブロック（１）における最大酸素吸蔵量Ｃｍａｘ（１）の値以下であるか否かを判定する。
【０１９４】
ここで、前記積算した値が最大酸素吸蔵量Ｃｍａｘ（１）の値以下であればＣＰＵ７１は同ステップ２３４０にて「Ｙｅｓ」と判定してステップ２３４５に進んで同積算した値が「０」以上であるか否かを判定するとともに、同積算した値が「０」以上であれば同ステップ２３４５にて「Ｙｅｓ」と判定してステップ２３６０に進んで、同積算した値を新たな酸素吸蔵量ＯＳＡ（１）として設定する。このように、前記積算した値が「０」以上最大酸素吸蔵量Ｃｍａｘ（１）以下であればステップ２３３５にて算出された酸素吸蔵量変化量δＯＳＡ（１）の値がそのままブロック（１）における酸素吸蔵量変化量として使用される。
【０１９５】
一方、ステップ２３４０の判定において、前記積算した値が最大酸素吸蔵量Ｃｍａｘ（１）の値を超えていればＣＰＵ７１は同ステップ２３４０にて「Ｎｏ」と判定してステップ２３５０に進み、最大酸素吸蔵量Ｃｍａｘ（１）の値から前回算出した酸素吸蔵量ＯＳＡ（１）の値を減算した値を酸素吸蔵量変化量δＯＳＡ（１）に格納した後、ステップ２３６０に進む。このように、前記積算した値がブロック（１）における最大酸素吸蔵量Ｃｍａｘ（１）を超えていれば今回ステップ２３６０にて算出されるブロック（１）における酸素吸蔵量ＯＳＡ（１）の値が最大酸素吸蔵量Ｃｍａｘ（１）を超えてしまうことを意味するので、今回ステップ２３６０にて算出される酸素吸蔵量ＯＳＡ（１）の値が最大酸素吸蔵量Ｃｍａｘ（１）の値と等しくなるように酸素吸蔵量変化量δＯＳＡ（１）が調整される。
【０１９６】
同様に、ステップ２３４５の判定において、前記積算した値が「０」未満（負の値）となっていればＣＰＵ７１は同ステップ２３４５にて「Ｎｏ」と判定してステップ２３５５に進み、前回算出した酸素吸蔵量ＯＳＡ（１）の値に対して符号を反転させた値を酸素吸蔵量変化量δＯＳＡ（１）に格納した後、ステップ２３６０に進む。このように、前記積算した値が「０」未満であれば今回ステップ２３６０にて算出されるブロック（１）における酸素吸蔵量ＯＳＡ（１）の値が「０」未満（負の値）になってしまうことを意味するので、今回ステップ２３６０にて算出される酸素吸蔵量ＯＳＡ（１）の値が「０」になるように酸素吸蔵量変化量δＯＳＡ（１）が調整される。
【０１９７】
ステップ２３６０にてブロック（１）における今回の酸素吸蔵量ＯＳＡ（１）を算出した後、ＣＰＵ７１はステップ２３６５に進んでステップ２３０５にて算出したブロック（１）における流入酸素量ＣｇｉｎＯ２（１）の値と、上記調整後のブロック（１）における酸素吸蔵量変化量δＯＳＡ（１）の値と、上記数７（の右辺）に基づくステップ２３６５内に記載した式とに基づいてブロック（１）における流出酸素量ＣｇｏｕｔＯ２（１）を算出する。
【０１９８】
次いで、ＣＰＵ７１はステップ２３７０に進んで、（現時点ではステップ２３１０の実行により「０」となっている）現時点における第１触媒５３の酸素吸蔵量ＯＳＡａｌｌの値にステップ２３６０にて算出されたブロック（１）における今回の酸素吸蔵量ＯＳＡ（１）の値を加えた値を新たな酸素吸蔵量ＯＳＡａｌｌとして格納した後、ステップ２３７５に進んで、ステップ２３６５にて算出されたブロック（１）における流出酸素量ＣｇｏｕｔＯ２（１）の値と、上記数１３に基づいてブロック（１）に隣接する下流側のブロック（２）における流入酸素量ＣｇｉｎＯ２（２）を算出する。
【０１９９】
そして、ＣＰＵ７１はステップ２３８０に進んでカウンタ値ｎの値が第１触媒５３のブロック数Ｎと等しいか否かを判定する。現時点ではカウンタ値ｎの値は「１」であるから、ＣＰＵ７１はステップ２３８０にて「Ｎｏ」と判定し、再びステップ２３１５に戻ってカウンタ値ｎの値を「１」だけ増大して「２」に設定した後、続くステップ２３２０〜ステップ２３７５までの処理を実行することで次のブロックであるブロック（２）における計算を実行する。このとき、ステップ２３６５における流入酸素量ＣｇｉｎＯ２（２）の値としては前回ステップ２３７５にて算出した流入酸素量ＣｇｉｎＯ２（２）の値が使用される。
【０２００】
このようにして、ステップ２３２０〜ステップ２３７５までの処理は、カウンタ値ｎの値が第１触媒５３のブロック数Ｎと等しくなるまで繰り返し実行される。これにより、第１触媒５３の最上流のブロック（１）から最下流のブロック（Ｎ）までの各ブロック（ｎ）の流入酸素量ＣｇｉｎＯ２（ｎ）、流出酸素量ＣｇｏｕｔＯ２（ｎ）、酸素吸蔵量変化量δＯＳＡ（ｎ）、及び酸素吸蔵量ＯＳＡ（ｎ）の値が順次算出されていく。また、ステップ２３７０の処理が繰り返し実行されることにより、第１触媒５３の酸素吸蔵量ＯＳＡａｌｌも算出される。
【０２０１】
ステップ２３１５の処理が繰り返されることによりカウンタ値ｎの値が第１触媒５３のブロック数Ｎと等しくなると、ＣＰＵ７１はステップ２３８０にて「Ｙｅｓ」と判定した後、ステップ２３９５に進んで本ルーチンを一旦終了する。
【０２０２】
また、ＣＰＵ７１は、所定のタイミングになると、第１触媒５３の各ブロック毎の酸素吸蔵量の値、並びに第１触媒５３の酸素吸蔵量の値を初期化（クリア）するための図２４にフローチャートにより示したルーチンのステップ２４００から処理を開始し、ステップ２４０５に進んで、下流側空燃比センサ６７の出力Ｖｏｘｓの値が０．７（Ｖ）より大きいか否かをモニタする。このとき、下流側空燃比センサ６７の出力Ｖｏｘｓの値が０．７（Ｖ）より大きければ、即ち、第１触媒５３の下流空燃比がリッチ空燃比であれば、同第１触媒５３内全体に吸蔵されている酸素量が「０」であることを意味するので、ＣＰＵ７１はステップ２４１０に進んで第１触媒５３の各ブロック毎の酸素吸蔵量の値及び第１触媒５３の酸素吸蔵量の値を総て「０」に設定する処理を開始する。一方、ステップ２４０５の判定において、下流側空燃比センサ６７の出力Ｖｏｘｓの値が０．７（Ｖ）以下であれば、ＣＰＵ７１はステップ２４０５からステップ２４９５に直接進んで本ルーチンを一旦終了する。
【０２０３】
いま、ステップ２４０５の判定において下流側空燃比センサ６７の出力Ｖｏｘｓの値が０．７（Ｖ）より大きくなっているとすると、ＣＰＵ７１はステップ２４１０に進み、カウンタ値ｎの値を「０」に設定した後、ステップ２４１５に進んでカウンタ値ｎの値を「１」だけ増大して「１」に設定する。次いで、ＣＰＵ７１はステップ２４２０に進んで、第１触媒５３のブロック（ｎ）における酸素吸蔵量ＯＳＡ（ｎ）の値を「０」に設定する。この時点ではカウンタ値ｎの値は「１」であるから、最上流のブロック（１）における酸素吸蔵量ＯＳＡ（１）の値が「０」に設定される。
【０２０４】
そして、ＣＰＵ７１はステップ２４２５に進んでカウンタ値ｎの値が第１触媒５３のブロック数Ｎと等しいか否かを判定する。現時点ではカウンタ値ｎの値は「１」であるから、ＣＰＵ７１はステップ２４２５にて「Ｎｏ」と判定し、再びステップ２４１５に戻ってカウンタ値ｎの値を「１」だけ増大した後ステップ２４２０及びステップ２４２５の処理を実行する。即ち、ステップ２４２０及びステップ２４２５の処理は、カウンタ値ｎの値が第１触媒５３のブロック数Ｎと等しくなるまで繰り返し実行される。これにより、第１触媒５３の最上流のブロック（１）から最下流のブロック（Ｎ）までの各ブロック（ｎ）における酸素吸蔵量ＯＳＡ（ｎ）の値が総て「０」にクリアされる。
【０２０５】
前述のステップ２４１５の処理が繰り返されることによりカウンタ値ｎの値が触媒５３のブロック数Ｎと等しくなると、ＣＰＵ７１はステップ２４２５にて「Ｙｅｓ」と判定してステップ２４３０に進み、第１触媒５３の酸素吸蔵量ＯＳＡａｌｌの値を「０」に設定した後、ステップ２４９５に進んで本ルーチンを一旦終了する。
【０２０６】
以上、説明したように、本発明による内燃機関の排気浄化装置の実施形態によれば、補正後基本燃料噴射量Ｆｂａｓｅを補正して空燃比フィードバック制御を行うためのフィードバック制御量ＤＦｉが、原則的に、ＤＦｉ＝Ｇｐ・ＤＦｃ＋Ｇｉ・（ＯＳＡａｌｌ−（Ｃｍａｘａｌｌ／２））なる式に基づいて算出される。この結果、比例項であるＧｐ・ＤＦｃに基づいて筒内燃料供給量偏差ＤＦｃが「０」になるように（従って、上流側空燃比センサ６６の検出空燃比ａｂｙｆｓが上流側目標空燃比ａｂｙｆｒになるように）制御されるとともに、第１触媒５３の酸素吸蔵量ＯＳＡａｌｌの値が筒内燃料供給量偏差ＤＦｃの時間積分値に基づく値であることから積分項であるＧｉ・（ＯＳＡａｌｌ−（Ｃｍａｘａｌｌ／２））に基づいて、第１触媒５３に流入する排ガスの空燃比の理論空燃比からの偏差の収支がゼロになるように制御されるとともに第１触媒５３の酸素吸蔵量ＯＳＡａｌｌが目標酸素吸蔵量（最大酸素吸蔵量Ｃｍａｘａｌｌの半分の量）になるように制御される。
【０２０７】
また、前記積分項（Ｇｉ・（ＯＳＡａｌｌ−（Ｃｍａｘａｌｌ／２）））の値に制限（−Ｇｉ・（Ｃｍａｘａｌｌ／２）≦積分項≦Ｇｉ・（Ｃｍａｘａｌｌ／２））があるから、機関の空燃比ａｂｙｆｓ（即ち、最終燃料噴射量Ｆｉ）は同積分項の作用により不必要に過度に補正されることがなく、空燃比フィードバック制御において大きな外乱が発生しても比較的速やかに収束する。従って、第１触媒５３からのエミッションの排出量が少なくなり、また、ドライバビリティが悪化の程度が少なくなった。
【０２０８】
本発明は上記実施形態に限定されることはなく、本発明の範囲内において種々の変形例を採用することができる。例えば、上記各実施形態においては、筒内燃料供給量偏差ＤＦｃに基づいてフィードバック制御量ＤＦｉを計算しているが、上流側目標空燃比ａｂｙｆｒと上流側空燃比センサ６６による検出空燃比ａｂｙｆｓとの偏差に基づいてフィードバック制御量ＤＦｉを計算してもよい。また、上流側空燃比センサ６６の出力の目標値である上流側目標値を設定することにより、同上流側目標値と同上流側空燃比センサ６６の出力値ｖａｂｙｆｓとの偏差に基づいてフィードバック制御量ＤＦｉを計算してもよい。
【０２０９】
ここで、例えば、上流側目標空燃比ａｂｙｆｒと上流側空燃比センサ６６による検出空燃比ａｂｙｆｓとの偏差に基づいてフィードバック制御量ＤＦｉを計算する場合、触媒モデルが境界条件として使用する第１触媒５３の最上流のブロック（１）における流入酸素量ＣｇｉｎＯ２（１）は、上記数１５の代わりに、上記数１６と類似の下記数１７に基づいて計算できる。
【０２１０】
【数１７】
ΔＯ２＝０．２３・ｍｆｒ１・（ａｂｙｆｓａｖｅ−ｓｔｏｉｃｈ）
【０２１１】
上記数１７において、ｍｆｒ１は上記ｍｆｒと同様、演算周期Δｔ内の燃料噴射量Ｆｉの合計量であり、ａｂｙｆｓａｖｅは演算周期Δｔにおいて上流側空燃比センサ６６により検出された空燃比Ａ／Ｆの平均値である。この数１７に示したように、演算周期Δｔ内の噴射量の合計量ｍｆｒ１に、検出された空燃比Ａ／Ｆの平均値の理論空燃比からの偏移（ａｂｙｆｓａｖｅ−ｓｔｏｉｃｈ）を乗じることで、同演算周期Δｔにおける空気の過剰量が求められる。この空気の過剰量に酸素の重量割合「０．２３」を乗じることで前記演算周期Δｔにおける酸素の過剰量、即ち、流入酸素量ＣｇｉｎＯ２（１）が求められる。
【０２１２】
また、上記各実施形態においては、正負の値を採りえるフィードバック制御量ＤＦｉを補正後基本燃料噴射量Ｆｂａｓｅに加算することによりフィードバック制御を実行しているが、同フィードバック制御量ＤＦｉに相当するフィードバック制御係数（＞０）を設定し、同補正後基本燃料噴射量Ｆｂａｓｅに同フィードバック制御係数を乗算することによりフィードバック制御を実行してもよい。
【０２１３】
また、上記各実施形態においては、触媒モデルを第１触媒５３に適用するにあたり、同第１触媒５３をＮ個のブロックに分割しているが、同第１触媒５３を分割することなく触媒モデルを一つのブロックとしての第１触媒５３に適用してもよい。
【０２１４】
また、上記各実施形態においては、フィードバック制御量ＤＦｉが、比例項Ｇｐ・ＤＦｃと積分項Ｇｉ・（ＯＳＡａｌｌ−（Ｃｍａｘａｌｌ／２））との和として計算されているが、フィードバック制御量ＤＦｉを積分項Ｇｉ・（ＯＳＡａｌｌ−（Ｃｍａｘａｌｌ／２））のみで計算してもよい。
【図面の簡単な説明】
【図１】本発明の実施形態に係る空燃比制御装置（排気浄化装置）を適用した内燃機関の概略図である。
【図２】図１に示したエアフローメータの出力電圧と計測された吸入空気流量との関係を示したグラフである。
【図３】図１に示した上流側空燃比センサの出力電圧と空燃比との関係を示したグラフである。
【図４】図１に示した下流側空燃比センサの出力電圧と空燃比との関係を示したグラフである。
【図５】図１に示した空燃比制御装置が空燃比フィードバック制御を実行する際の機能ブロック図である。
【図６】アクセル操作量が急変した場合の機関の空燃比、第１触媒の酸素吸蔵量、及びフィードバック制御量を算出するための積分項の値の変化を、図１に示した空燃比制御装置と従来の装置とで比較しながら示したタイムチャートである。
【図７】従来の空燃比制御装置が空燃比フィードバック制御を実行する際の機能ブロック図である。
【図８】本発明の排気浄化装置が採用する触媒モデルを模式的に示した図である。
【図９】本発明の排気浄化装置が採用する触媒モデルの特定領域に注目したときの同特定領域における酸素吸蔵・放出反応に関係する特定成分の収支を示した図である。
【図１０】本発明の排気浄化装置が採用する触媒モデルが対象とする触媒全体の最大酸素吸蔵量から同触媒の各ブロック毎の各最大酸素吸蔵量の分布を求めるためのマップである。
【図１１】本発明の排気浄化装置が採用する触媒モデルを第１触媒に適用した場合の模式図である。
【図１２】図１に示したＣＰＵが実行する基本燃料噴射量補正量の更新処理の開始判定を行うためのルーチンを示したフローチャートである。
【図１３】図１に示したＣＰＵが実行する目標空燃比の設定を行うためのルーチンを示したフローチャートである。
【図１４】図１に示したＣＰＵが実行する燃料噴射量の計算等を行うためのルーチンを示したフローチャートである。
【図１５】図１に示したＣＰＵが実行する従来の空燃比制御装置を適用した場合のフィードバック制御量を計算するためのルーチンを示したフローチャートである。
【図１６】図１に示したＣＰＵが実行する基本燃料噴射量補正量の更新処理の終了判定を行うためのルーチンを示したフローチャートである。
【図１７】図１に示したＣＰＵが実行する本発明の排気浄化装置（空燃比制御装置）を適用した場合のフィードバック制御量を計算するためのルーチンを示したフローチャートである。
【図１８】図１示したＣＰＵが実行する最大酸素吸蔵量取得制御を開始するか否かを決定するためのルーチンを示したフローチャートである。
【図１９】図１に示したＣＰＵが実行する第１モードのルーチンを示したフローチャートである。
【図２０】図１に示したＣＰＵが実行する第２モードのルーチンを示したフローチャートである。
【図２１】図１に示したＣＰＵが実行する酸素吸蔵量を算出するためのルーチンを示したフローチャートである。
【図２２】図１に示したＣＰＵが実行する最大酸素吸蔵量を算出するためのルーチンを示したフローチャートである。
【図２３】図１に示したＣＰＵが実行する第１触媒の各ブロック毎の流出酸素量、酸素吸蔵量等を算出するためのルーチンを示したフローチャートである。
【図２４】図１に示したＣＰＵが実行する第１触媒の各ブロック毎の酸素吸蔵量をクリアするためのルーチンを示したフローチャートである。
【符号の説明】
１０…内燃機関、２５…燃焼室、３９…インジェクタ、５２…エキゾーストパイプ（排気管）、５３…三元触媒（第１触媒）、５４…三元触媒（第２触媒）、６６…上流側空燃比センサ、６７…下流側空燃比センサ、７０…電気制御装置、７１…ＣＰＵ
【図１】
2004251123.tif 000003
【図２】
2004251123.tif 000004
【図３】
2004251123.tif 000005
【図４】
2004251123.tif 000006
【図５】
2004251123.tif 000007
【図６】
2004251123.tif 000008
【図７】
2004251123.tif 000009
【図８】
2004251123.tif 000010
【図９】
2004251123.tif 000011
【図１０】
2004251123.tif 000012
【図１１】
2004251123.tif 000013
【図１２】
2004251123.tif 000014
【図１３】
2004251123.tif 000015
【図１４】
2004251123.tif 000016
【図１５】
2004251123.tif 000017
【図１６】
2004251123.tif 000018
【図１７】
2004251123.tif 000019
【図１８】
2004251123.tif 000020
【図１９】
2004251123.tif 000021
【図２０】
2004251123.tif 000022
【図２１】
2004251123.tif 000023
【図２２】
2004251123.tif 000024
【図２３】
2004251123.tif 000025
【図２４】
2004251123.tif 000026