(57)【要約】【課題】触媒下流空燃比センサの出力に基づく空燃比フィードバック制御における積分項（積分項の学習値）が収束目標値から大きくずれている場合であっても、積分項（積分項の学習値）を早期に収束目標値に近づけて制御中心空燃比を目標空燃比に近づけること。【解決手段】触媒下流空燃比センサ出力値Voxsに基づくサブＦＢ制御における積分項の学習値Learnの更新をすべきか否かを判定するために、下流側空燃比センサ出力値Voxsのリッチからリーンへの反転後にリッチ空燃比制御を行い、下流側空燃比センサ出力値Voxsのリーンからリッチへの反転後にリーン空燃比制御を行う「アクティブ空燃比制御」が行われる。リッチ（リーン）空燃比制御中において所定期間が経過してもなお、下流側空燃比センサ出力値Voxsのリーン（リッチ）からリッチ（リーン）への反転が生じない場合、制御中心空燃比AFcenがよりリッチ（リーン）となる方向に学習値Learnが更新される。【選択図】図１４
2008075495.tif 000002
【特許請求の範囲】
【請求項１】
内燃機関の排気通路に配設された酸素吸蔵機能を有する触媒と、
前記触媒よりも下流の前記排気通路に配設されて前記触媒から流出するガスの空燃比に応じた値を出力する起電力式の酸素濃度センサと、
を備えた内燃機関に適用され、
前記酸素濃度センサの出力値と目標空燃比に相当する基準値との偏差に相当する値を積算して更新されていく偏差積分値を算出する積分値算出手段と、
少なくとも前記偏差積分値に基づいて前記触媒に流入するガスの空燃比を前記目標空燃比に一致するように制御する空燃比制御手段と、
前記酸素濃度センサの出力がリッチを示す値からリーンを示す値に反転したときに前記目標空燃比を理論空燃比よりもリッチの目標リッチ空燃比に設定し、前記酸素濃度センサの出力がリーンを示す値からリッチを示す値に反転したときに前記目標空燃比を理論空燃比よりもリーンの目標リーン空燃比に設定する目標空燃比切換手段と、
前記空燃比制御手段により、前記触媒に流入するガスの空燃比が前記目標空燃比切換手段により切換・設定される前記目標空燃比に一致するように制御されている場合において、前記酸素濃度センサの出力の反転時から第１所定期間が経過しても前記酸素濃度センサの出力の次の反転が生じないとき、前記偏差積分値を補正する第１積分値補正手段と、
を備えた内燃機関の空燃比制御装置。
【請求項２】
請求項１に記載の内燃機関の空燃比制御装置において、
前記第１積分値補正手段は、
前記酸素濃度センサの出力のリッチを示す値からリーンを示す値への反転時から前記第１所定期間が経過しても前記酸素濃度センサの出力のリーンを示す値からリッチを示す値への反転が生じないとき、前記偏差積分値を、前記触媒に流入するガスの空燃比がよりリッチになる方向へ補正するように構成された内燃機関の空燃比制御装置。
【請求項３】
請求項２に記載の内燃機関の空燃比制御装置において、
前記第１積分値補正手段は、前記第１所定期間として、
前記酸素濃度センサの出力のリッチを示す値からリーンを示す値への反転時から、前記触媒に流入するガスの空燃比が前記目標リッチ空燃比に制御されているものとして同反転時から算出・更新される前記触媒の酸素吸蔵量の変化量の積算値が第１所定値に達するまで、の期間を使用するように構成された内燃機関の空燃比制御装置。
【請求項４】
請求項１に記載の内燃機関の空燃比制御装置において、
前記第１積分値補正手段は、
前記酸素濃度センサの出力のリーンを示す値からリッチを示す値への反転時から前記第１所定期間が経過しても前記酸素濃度センサの出力のリッチを示す値からリーンを示す値への反転が生じないとき、前記偏差積分値を、前記触媒に流入するガスの空燃比がよりリーンになる方向へ補正するように構成された内燃機関の空燃比制御装置。
【請求項５】
請求項４に記載の内燃機関の空燃比制御装置において、
前記第１積分値補正手段は、前記第１所定期間として、
前記酸素濃度センサの出力のリーンを示す値からリッチを示す値への反転時から、前記触媒に流入するガスの空燃比が前記目標リーン空燃比に制御されているものとして同反転時から算出・更新される前記触媒の酸素吸蔵量の変化量の積算値が第１所定値に達するまで、の期間を使用するように構成された内燃機関の空燃比制御装置。
【請求項６】
請求項３又は請求項５において、
前記第１積分値補正手段は、
前記第１所定値として、前記触媒が吸蔵し得る酸素の量の最大値よりも大きい値を使用するように構成された内燃機関の空燃比制御装置。
【請求項７】
請求項１乃至請求項６の何れか一項に記載の内燃機関の空燃比制御装置において、
前記第１積分値補正手段は、
前記酸素濃度センサの出力の反転が生じる毎に、同反転時から前記第１所定期間が経過しても前記酸素濃度センサの出力の次の反転が生じないときに前記偏差積分値を補正するように構成された内燃機関の空燃比制御装置。
【請求項８】
請求項７に記載の内燃機関の空燃比制御装置において、
前記第１積分値補正手段は、
前記酸素濃度センサの出力の反転回数が増大するほど、前記偏差積分値の補正量をより小さい値に設定するように構成された内燃機関の空燃比制御装置。
【請求項９】
内燃機関の排気通路に配設された酸素吸蔵機能を有する触媒と、
前記触媒よりも下流の前記排気通路に配設されて前記触媒から流出するガスの空燃比に応じた値を出力する起電力式の酸素濃度センサと、
を備えた内燃機関に適用され、
前記酸素濃度センサの出力値と目標空燃比に相当する基準値との偏差に相当する値を積算して更新されていく偏差積分値を算出する積分値算出手段と、
少なくとも前記偏差積分値に基づいて前記触媒に流入するガスの空燃比を前記目標空燃比に一致するように制御する空燃比制御手段と、
前記酸素濃度センサの出力がリッチを示す値からリーンを示す値に反転したときに前記目標空燃比を理論空燃比よりもリッチの目標リッチ空燃比に設定し、前記酸素濃度センサの出力がリーンを示す値からリッチを示す値に反転したときに前記目標空燃比を理論空燃比よりもリーンの目標リーン空燃比に設定する目標空燃比切換手段と、
前記空燃比制御手段により、前記触媒に流入するガスの空燃比が前記目標空燃比切換手段により切換・設定される前記目標空燃比に一致するように制御されている場合において、前記酸素濃度センサの出力の反転時から第２所定期間が経過する前に前記酸素濃度センサの出力の次の反転が生じたとき、前記偏差積分値を補正する第２積分値補正手段と、
を備えた内燃機関の空燃比制御装置。
【請求項１０】
請求項９に記載の内燃機関の空燃比制御装置において、
前記第２積分値補正手段は、
前記酸素濃度センサの出力のリッチを示す値からリーンを示す値への反転時から前記第２所定期間が経過する前に前記酸素濃度センサの出力のリーンを示す値からリッチを示す値への反転が生じたとき、前記偏差積分値を、前記触媒に流入するガスの空燃比がよりリーンになる方向へ補正するように構成された内燃機関の空燃比制御装置。
【請求項１１】
請求項１０に記載の内燃機関の空燃比制御装置において、
前記第２積分値補正手段は、前記第２所定期間として、
前記酸素濃度センサの出力のリッチを示す値からリーンを示す値への反転時から、前記触媒に流入するガスの空燃比が前記目標リッチ空燃比に制御されているものとして同反転時から算出・更新される前記触媒の酸素吸蔵量の変化量の積算値が第２所定値に達するまで、の期間を使用するように構成された内燃機関の空燃比制御装置。
【請求項１２】
請求項９に記載の内燃機関の空燃比制御装置において、
前記第２積分値補正手段は、
前記酸素濃度センサの出力のリーンを示す値からリッチを示す値への反転時から前記第２所定期間が経過する前に前記酸素濃度センサの出力リッチを示す値からリーンを示す値への反転が生じたとき、前記偏差積分値を、前記触媒に流入するガスの空燃比がよりリッチになる方向へ補正するように構成された内燃機関の空燃比制御装置。
【請求項１３】
請求項１２に記載の内燃機関の空燃比制御装置において、
前記第２積分値補正手段は、前記第２所定期間として、
前記酸素濃度センサの出力のリーンを示す値からリッチを示す値への反転時から、前記触媒に流入するガスの空燃比が前記目標リーン空燃比に制御されているものとして同反転時から算出・更新される前記触媒の酸素吸蔵量の変化量の積算値が第２所定値に達するまで、の期間を使用するように構成された内燃機関の空燃比制御装置。
【請求項１４】
請求項１１又は請求項１３において、
前記第２積分値補正手段は、
前記第２所定値として、前記触媒が吸蔵し得る酸素の量の最大値よりも小さい値を使用するように構成された内燃機関の空燃比制御装置。
【請求項１５】
請求項９乃至請求項１４の何れか一項に記載の内燃機関の空燃比制御装置において、
前記第２積分値補正手段は、
前記酸素濃度センサの出力の反転が生じる毎に、同反転時から前記第２所定期間が経過する前に前記酸素濃度センサの出力の次の反転が生じたときに前記偏差積分値を補正するように構成された内燃機関の空燃比制御装置。
【請求項１６】
請求項１５に記載の内燃機関の空燃比制御装置において、
前記第２積分値補正手段は、
前記酸素濃度センサの出力の反転回数が増大するほど、前記偏差積分値の補正量をより小さい値に設定するように構成された内燃機関の空燃比制御装置。
【請求項１７】
内燃機関の排気通路に配設された酸素吸蔵機能を有する触媒と、
前記触媒よりも下流の前記排気通路に配設されて前記触媒から流出するガスの空燃比に応じた値を出力する起電力式の酸素濃度センサと、
を備えた内燃機関に適用され、
前記酸素濃度センサの出力値と目標空燃比に相当する基準値との偏差に相当する値を積算して更新されていく偏差積分値を算出する積分値算出手段と、
少なくとも前記偏差積分値に基づいて前記触媒に流入するガスの空燃比を前記目標空燃比に一致するように制御する空燃比制御手段と、
前記酸素濃度センサの出力がリッチを示す値からリーンを示す値に反転したときに前記目標空燃比を理論空燃比よりもリッチの目標リッチ空燃比に設定し、前記酸素濃度センサの出力がリーンを示す値からリッチを示す値に反転したときに前記目標空燃比を理論空燃比よりもリーンの目標リーン空燃比に設定する目標空燃比切換手段と、
前記空燃比制御手段により、前記触媒に流入するガスの空燃比が前記目標空燃比切換手段により切換・設定される前記目標空燃比に一致するように制御されている場合において、前記酸素濃度センサの出力の反転時から第１所定期間が経過しても前記酸素濃度センサの出力の次の反転が生じないとき、前記偏差積分値を補正する第１積分値補正手段と、
前記空燃比制御手段により、前記触媒に流入するガスの空燃比が前記目標空燃比切換手段により切換・設定される前記目標空燃比に一致するように制御されている場合において、前記酸素濃度センサの出力の反転時から第２所定期間が経過する前に前記酸素濃度センサの出力の次の反転が生じたとき、前記偏差積分値を補正する第２積分値補正手段と、
を備えた内燃機関の空燃比制御装置。
【請求項１８】
請求項１７に記載の内燃機関の空燃比制御装置において、
前記第１積分値補正手段は、
前記酸素濃度センサの出力の反転が生じる毎に、同反転時から前記第１所定期間が経過しても前記酸素濃度センサの出力の次の反転が生じないときに前記偏差積分値を補正するように構成され、
前記第２積分値補正手段は、
前記酸素濃度センサの出力の反転が生じる毎に、同反転時から前記第２所定期間が経過する前に前記酸素濃度センサの出力の次の反転が生じたときに前記偏差積分値を補正するように構成された内燃機関の空燃比制御装置。
【請求項１９】
請求項１８に記載の内燃機関の空燃比制御装置において、
前記第１、第２積分値補正手段は、
前記酸素濃度センサの出力の反転回数が増大するほど、前記偏差積分値の補正量をより小さい値に設定するように構成された内燃機関の空燃比制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、排気通路に配設された触媒の少なくとも下流側に起電力式の酸素濃度センサを備えた内燃機関に適用され、酸素濃度センサの出力値に基づいて触媒に流入するガスの空燃比を制御する内燃機関の空燃比制御装置に関する。以下、「触媒に流入するガスの空燃比」を、「触媒上流空燃比」、或いは、単に「空燃比」と称呼し、「内燃機関」を、単に「機関」と称呼することもある。
【背景技術】
【０００２】
従来より、この種の空燃比制御装置として、例えば、特許文献１に開示されたものが知られている。この空燃比制御装置では、排気通路に配設された触媒の上流に上流側空燃比センサ、同触媒の下流に起電力式の酸素濃度センサ（下流側空燃比センサ）がそれぞれ配設されている。下流側空燃比センサの出力値とこの出力値の目標値（目標空燃比に相当する値）との偏差（下流側偏差）を比例・積分・微分処理（ＰＩＤ処理）してフィードバック補正量が算出される。このフィードバック補正量で上流側空燃比センサの出力値を補正した値に基づいて、空燃比が目標空燃比になるようにインジェクタから噴射される燃料の量がフィードバック制御されるようになっている。
【特許文献１】特開２００５−１１３７２９号公報
【０００３】
一般に、インジェクタから噴射される燃料の量を決定するために使用されるエアフローメータにより計測される吸入空気流量と実際の空気流量との差（エアフローメータのばらつき）、インジェクタに噴射指示される指令燃料噴射量と実際に噴射された燃料の量との差（インジェクタのばらつき）等（以下、これらを「燃料噴射量の誤差」と総称する。）が不可避的に発生する。更には、上流側空燃比センサとして使用されることが多い限界電流式の酸素濃度センサでは、出力値の誤差が発生し易い。以下、燃料噴射量の誤差、及び、上流側空燃比センサの誤差を「吸排気系の誤差」とも総称する。
【０００４】
上記フィードバック補正量には、積分項（Ｉ項）の値、即ち、上記下流側偏差を積算して更新されていく偏差積分値にフィードバックゲインを乗じた値が含まれている。これにより、上記吸排気系の誤差が発生していても、上述したフィードバック制御の実行により、吸排気系の誤差が積分項により補償され得、この結果、空燃比を目標空燃比に一致・収束させることができる。換言すれば、積分項（或いは、偏差積分値）の値は、吸排気系の誤差の大きさを表す値となり得る。
【０００５】
この種の空燃比制御装置では、このような性格を有する積分項の値（或いは、偏差積分値）を記憶するとともに記憶されている積分項の値（以下、「積分項の学習値」とも称呼する。）を所定のタイミング毎に更新（学習）していく積分項の学習が実行される場合が多い。
【０００６】
ところで、この積分項の値（或いは、積分項の学習値）は、上記吸排気系の誤差の大きさを正確に表す値（以下、「収束目標値」と称呼する。）に収束する。積分項の値（或いは、積分項の学習値）が収束目標値に一致していることは、空燃比制御装置が目標空燃比と等しい空燃比であるものとして扱っている実際の空燃比（以下、「制御中心空燃比」と称呼する。）が目標空燃比に一致していることを意味する。制御中心空燃比が目標空燃比と一致している場合、上記吸排気系の誤差が適切に補償され得、空燃比が目標空燃比に適切に一致し得る。
【０００７】
一方、積分項の値（或いは、積分項の学習値）が収束目標値からずれている場合、制御中心空燃比が目標空燃比からずれた値となる。この場合、上記吸排気系の誤差が適切に補償され得ず、空燃比が目標空燃比に適切に一致し得ない可能性がある。従って、積分項の値（或いは、積分項の学習値）が収束目標値からずれている場合、できるだけ早期に積分項の値（或いは、積分項の学習値）を収束目標値に収束させる必要がある。
【０００８】
ところが、上記文献に記載の装置では、積分項の値は、上記下流側偏差を逐次積算していくことでのみ更新され得る値である。従って、特に、積分項の値（或いは、積分項の学習値）が収束目標値から大きくずれている場合、積分項の値（或いは、積分項の学習値）を早期に収束目標値に収束させることができないという問題があった。
【発明の開示】
【０００９】
本発明の目的は、下流側空燃比センサの出力に基づく空燃比フィードバック制御における偏差積分値（積分項の値）が収束目標値から大きくずれている場合であっても、偏差積分値（積分項の値）を早期に収束目標値に近づけて制御中心空燃比を目標空燃比に近づけることができるものを提供することにある。
【００１０】
本発明に係る空燃比制御装置は、酸素吸蔵機能を有する触媒と、前記触媒よりも下流の排気通路に配設された起電力式の酸素濃度センサ（下流側空燃比センサ）とを備えた内燃機関に適用される。
【００１１】
本発明に係る第１の空燃比制御装置は、積分値算出手段と、空燃比制御手段と、目標空燃比切換手段と、第１積分値補正手段を備える。以下、これらについて順に説明していく。
【００１２】
積分値算出手段は、前記酸素濃度センサの出力値と目標空燃比に相当する基準値との偏差（上記下流側偏差）に相当する値を積算して更新されていく偏差積分値を算出する。ここにおいて、「偏差に相当する値」とは、酸素濃度センサの出力値と上記基準値との偏差そのもの、酸素濃度センサにより検出される検出空燃比と目標空燃比との偏差等である。
【００１３】
なお、係る偏差積分値の学習が実行される場合、前記第１の空燃比制御装置は、偏差積分値に基づく値を用いて「偏差積分値に基づく値」の定常的な成分を表す学習値を算出・更新するとともに、前記更新による学習値の変化量に相当する分を前記「偏差積分値に基づく値」から差し引く学習手段を備える。ここにおいて、「偏差積分値に基づく値」とは、例えば、偏差積分値そのもの、偏差積分値にフィードバックゲインを乗じて得られる積分項等である。また、学習値（「偏差積分値に基づく値」の定常的な成分を表す値）とは、例えば、「偏差積分値に基づく値」をローパスフィルタ処理（なまし処理）した値である。
【００１４】
この学習手段は、例えば、所定のタイミングが到来する毎に、「偏差積分値に基づく値」の定常的な成分を学習値更新用の更新値として取得し、取得した更新値をその時点での学習値に積算して学習値を更新するとともに、その更新値に相当する分をその時点での「偏差積分値に基づく値」から差し引く。
【００１５】
空燃比制御手段は、少なくとも前記偏差積分値に基づいて前記触媒に流入するガスの空燃比を前記目標空燃比に一致するように制御する。空燃比制御手段は、例えば、前記偏差積分値に加えて触媒上流の上流側空燃比センサの出力値にも基づいて触媒に流入するガスの空燃比を目標空燃比に一致するように制御するよう構成される。目標空燃比は、通常、理論空燃比に維持される。
【００１６】
目標空燃比切換手段は、前記酸素濃度センサの出力がリッチを示す値からリーンを示す値に反転したときに前記目標空燃比を理論空燃比よりもリッチの目標リッチ空燃比に設定し、前記酸素濃度センサの出力がリーンを示す値からリッチを示す値に反転したときに前記目標空燃比を理論空燃比よりもリーンの目標リーン空燃比に設定する。ここで、目標リッチ空燃比の理論空燃比からの偏移量と目標リーン空燃比の理論空燃比からの偏移量は同じであることが好ましい。
【００１７】
目標空燃比が目標リッチ空燃比に設定されている場合、空燃比制御手段により触媒上流空燃比が目標リッチ空燃比に一致するように制御される（リッチ空燃比制御）。この場合、触媒の酸素吸蔵量は次第に減少し、触媒の酸素吸蔵量がゼロになった時点で酸素濃度センサの出力がリーンを示す値からリッチを示す値に反転する。これを受けて、目標空燃比が目標リッチ空燃比から目標リーン空燃比に切り換わる。
【００１８】
目標空燃比が目標リーン空燃比に切り換わると、空燃比制御手段により触媒上流空燃比が目標リーン空燃比に一致するように制御される（リーン空燃比制御）。この場合、触媒の酸素吸蔵量はゼロから次第に増大し、触媒の酸素吸蔵量が最大量（最大酸素吸蔵量）に達した時点で酸素濃度センサの出力がリッチを示す値からリーンを示す値に反転する。これを受けて、目標空燃比が目標リーン空燃比から目標リッチ空燃比に切り換わる。
【００１９】
即ち、空燃比制御手段により触媒上流空燃比が目標空燃比切換手段により切換・設定される目標空燃比に一致するように制御されると、目標空燃比（従って、触媒上流空燃比）がリッチ又はリーンに交互に切り換わる。このように空燃比がリッチ又はリーンに交互に制御されている状態を「アクティブ空燃比制御状態」と称呼する。
【００２０】
第１積分値補正手段は、アクティブ空燃比制御状態において、前記酸素濃度センサの出力の反転時から第１所定期間が経過しても前記酸素濃度センサの出力の次の反転が生じないとき、前記偏差積分値を補正する。具体的には、例えば、前記第１積分値補正手段は、前記酸素濃度センサの出力のリッチを示す値からリーンを示す値への反転時から前記第１所定期間が経過しても前記酸素濃度センサの出力のリーンを示す値からリッチを示す値への反転が生じないとき、前記偏差積分値を、前記触媒に流入するガスの空燃比がよりリッチになる方向へ補正するように構成される。
【００２１】
アクティブ空燃比制御状態において、上述した制御中心空燃比が理論空燃比と一致している場合（即ち、偏差積分値が収束目標値に収束している場合）、触媒上流空燃比は、リーン空燃比制御中では目標リーン空燃比と一致し、リッチ空燃比制御中では目標リッチ空燃比と一致し得る。
【００２２】
この場合、触媒上流空燃比の理論空燃比からの偏移量は、リッチ空燃比制御中とリーン空燃比制御中とで同程度となり得る。他方、触媒の酸素吸蔵量の変化速度（増大・減少速度）は、触媒上流空燃比の理論空燃比からの偏移量に比例する。以上より、制御中心空燃比が目標空燃比と一致している場合、リッチ空燃比制御とリーン空燃比制御の継続時間は同程度となり得る。
【００２３】
一方、例えば、制御中心空燃比が理論空燃比よりもリーン方向にずれている場合（即ち、偏差積分値が収束目標値から触媒上流空燃比がよりリーンになる方向にずれている場合）を考える。この場合、触媒上流空燃比は、リーン空燃比制御中では目標リーン空燃比よりもリーンとなり、リッチ空燃比制御中では目標リッチ空燃比よりもリーンとなる。換言すれば、触媒上流空燃比の理論空燃比からの偏移量は、リーン空燃比制御中では大きく、リッチ空燃比制御中では小さくなる。従って、リーン空燃比制御の継続時間は短くなり、リッチ空燃比制御の継続時間は長くなる。
【００２４】
このことは、制御中心空燃比が理論空燃比よりもリーン方向にずれている場合、酸素濃度センサの出力のリッチを示す値からリーンを示す値への反転時（即ち、リッチ空燃比制御の開始）から酸素濃度センサの出力のリーンを示す値からリッチを示す値への反転時（即ち、リッチ空燃比制御の終了）までの時間が長いことを意味する。
【００２５】
上記構成は、係る知見に基づく。これによれば、制御中心空燃比が理論空燃比よりもリーン方向にずれている場合、偏差積分値が、触媒上流空燃比がよりリッチになる方向（即ち、制御中心空燃比がよりリッチとなる方向）へ補正される。この結果、偏差積分値が収束目標値から触媒上流空燃比がよりリーンになる方向に大きくずれている場合であっても、偏差積分値を早期に収束目標値に近づけて制御中心空燃比を目標空燃比（＝理論空燃比）に近づけることができる。
【００２６】
この場合、前記第１所定期間として、前記酸素濃度センサの出力のリッチを示す値からリーンを示す値への反転時（即ち、リッチ空燃比制御の開始）から、触媒上流空燃比が前記目標リッチ空燃比に制御されているものとして同反転時から算出・更新される前記触媒の酸素吸蔵量の変化量の積算値が第１所定値に達するまで、の期間を使用することが好適である。前記第１所定値としては、前記触媒が吸蔵し得る酸素の量の最大値（最大酸素吸蔵量）よりも大きい値が使用され得る。
【００２７】
リッチ空燃比制御の開始から積算・更新されていく触媒の酸素吸蔵量の変化量（減少量）の積算値は、触媒上流空燃比が目標リッチ空燃比で一定に制御されているものとして計算される。従って、制御中心空燃比が目標空燃比と一致している場合、この触媒の酸素吸蔵量の変化量の積算値が最大酸素吸蔵量に達する時期と酸素濃度センサの出力がリーンを示す値からリッチを示す値へ反転する時期（リッチ空燃比制御の終期）が一致し得る。
【００２８】
一方、制御中心空燃比が理論空燃比よりもリーン方向にずれている場合、リッチ空燃比制御の継続時間が長くなることから、この触媒の酸素吸蔵量の変化量の積算値が最大酸素吸蔵量に達してもなお、酸素濃度センサの出力のリーンを示す値からリッチを示す値への反転が生じない。
【００２９】
上記構成は、係る知見に基づく。これによれば、制御中心空燃比が理論空燃比よりもリーン方向にずれていることを判定するために使用される第１所定期間（第１所定値）が、簡易な計算により適切な値に設定され得る。
【００３０】
以上、制御中心空燃比が理論空燃比よりもリーン方向にずれている場合（即ち、偏差積分値が収束目標値から触媒上流空燃比がよりリーンになる方向にずれている場合）について説明した。
【００３１】
また、前記第１積分値補正手段は、前記酸素濃度センサの出力のリーンを示す値からリッチを示す値への反転時から前記第１所定期間が経過しても前記酸素濃度センサの出力のリッチを示す値からリーンを示す値への反転が生じないとき、前記偏差積分値を、前記触媒に流入するガスの空燃比がよりリーンになる方向へ補正するように構成され得る。
【００３２】
制御中心空燃比が理論空燃比よりもリッチ方向にずれている場合（即ち、偏差積分値が収束目標値から触媒上流空燃比がよりリッチになる方向にずれている場合）を考える。この場合、触媒上流空燃比は、リーン空燃比制御中では目標リーン空燃比よりもリッチとなり、リッチ空燃比制御中では目標リッチ空燃比よりもリッチとなる。換言すれば、触媒上流空燃比の理論空燃比からの偏移量は、リーン空燃比制御中では小さく、リッチ空燃比制御中では大きくなる。従って、リーン空燃比制御の継続時間は長くなり、リッチ空燃比制御の継続時間は短くなる。
【００３３】
このことは、制御中心空燃比が理論空燃比よりもリッチ方向にずれている場合、酸素濃度センサの出力のリーンを示す値からリッチを示す値への反転時（即ち、リーン空燃比制御の開始）から酸素濃度センサの出力のリッチを示す値からリーンを示す値への反転時（即ち、リーン空燃比制御の終了）までの時間が長いことを意味する。
【００３４】
上記構成は、係る知見に基づく。これによれば、制御中心空燃比が理論空燃比よりもリッチ方向にずれている場合、偏差積分値が、触媒上流空燃比がよりリーンになる方向（即ち、制御中心空燃比がよりリーンとなる方向）へ補正される。この結果、偏差積分値が収束目標値から触媒上流空燃比がよりリッチになる方向に大きくずれている場合であっても、偏差積分値を早期に収束目標値に近づけて制御中心空燃比を目標空燃比（＝理論空燃比）に近づけることができる。
【００３５】
この場合も、上記と同様、前記第１所定期間として、前記酸素濃度センサの出力のリーンを示す値からリッチを示す値への反転時（即ち、リーン空燃比制御の開始）から、触媒上流空燃比が前記目標リーン空燃比に制御されているものとして同反転時から算出・更新される前記触媒の酸素吸蔵量の変化量（増大量）の積算値が第１所定値に達するまで、の期間を使用することが好適である。前記第１所定値としては、前記触媒が吸蔵し得る酸素の量の最大値（最大酸素吸蔵量）よりも大きい値が使用され得る。
【００３６】
これによれば、制御中心空燃比が理論空燃比よりもリッチ方向にずれていることを判定するために使用される第１所定期間（第１所定値）が、簡易な計算により適切な値に設定され得る。
【００３７】
上記第１の空燃比制御装置においては、前記第１積分値補正手段は、アクティブ空燃比制御状態において、前記酸素濃度センサの出力の反転が生じる毎に、同反転時から前記第１所定期間が経過しても前記酸素濃度センサの出力の次の反転が生じないときに前記偏差積分値を補正するように構成されることが好適である。これによれば、制御中心空燃比が理論空燃比よりも大きくずれている場合において、制御中心空燃比を理論空燃比に徐々に近づけることができる。
【００３８】
この場合、前記第１積分値補正手段は、前記酸素濃度センサの出力の反転回数が増大するほど、前記偏差積分値の補正量をより小さい値に設定するように構成されることが好適である。これによれば、制御中心空燃比が理論空燃比よりも大きくずれている場合において、酸素濃度センサの出力の反転回数が小さい早い段階から制御中心空燃比を理論空燃比に十分に近づけることができ、且つ、その後は、制御中心空燃比を理論空燃比に向けて少しずつ徐々に近づけていくことができる。
【００３９】
本発明に係る第２の空燃比制御装置は、上記第１の空燃比制御装置において、前記第１積分値補正手段を、以下に説明する第２積分値補正手段に置き換えたものである。
【００４０】
第２積分値補正手段は、アクティブ空燃比制御状態において、前記酸素濃度センサの出力の反転時から第２所定期間が経過する前に前記酸素濃度センサの出力の次の反転が生じたとき、前記偏差積分値を補正する。具体的には、例えば、前記第２積分値補正手段は、前記酸素濃度センサの出力のリッチを示す値からリーンを示す値への反転時から前記第２所定期間が経過する前に前記酸素濃度センサの出力のリーンを示す値からリッチを示す値への反転が生じたとき、前記偏差積分値を、前記触媒に流入するガスの空燃比がよりリーンになる方向へ補正するように構成される。
【００４１】
アクティブ空燃比制御状態において、例えば、制御中心空燃比が理論空燃比よりもリッチ方向にずれている場合（即ち、偏差積分値が収束目標値から触媒上流空燃比がよりリッチになる方向にずれている場合）を考える。この場合、リーン空燃比制御の継続時間は長くなり、リッチ空燃比制御の継続時間は短くなる。
【００４２】
このことは、制御中心空燃比が理論空燃比よりもリッチ方向にずれている場合、酸素濃度センサの出力のリッチを示す値からリーンを示す値への反転時（即ち、リッチ空燃比制御の開始）から酸素濃度センサの出力のリーンを示す値からリッチを示す値への反転時（即ち、リッチ空燃比制御の終了）までの時間が短いことを意味する。
【００４３】
上記構成は、係る知見に基づく。これによれば、制御中心空燃比が理論空燃比よりもリッチ方向にずれている場合、偏差積分値が、触媒上流空燃比がよりリーンになる方向（即ち、制御中心空燃比がよりリーンとなる方向）へ補正される。この結果、偏差積分値が収束目標値から触媒上流空燃比がよりリッチになる方向に大きくずれている場合であっても、偏差積分値を早期に収束目標値に近づけて制御中心空燃比を目標空燃比（＝理論空燃比）に近づけることができる。
【００４４】
この場合、前記第２所定期間として、前記酸素濃度センサの出力のリッチを示す値からリーンを示す値への反転時（即ち、リッチ空燃比制御の開始）から、触媒上流空燃比が前記目標リッチ空燃比に制御されているものとして同反転時から算出・更新される前記触媒の酸素吸蔵量の変化量の積算値が第２所定値に達するまで、の期間を使用することが好適である。前記第２所定値としては、前記触媒の最大酸素吸蔵量よりも小さい値が使用され得る。
【００４５】
制御中心空燃比が理論空燃比よりもリッチ方向にずれている場合、リッチ空燃比制御の継続時間が短くなることから、この触媒の酸素吸蔵量の変化量の積算値が最大酸素吸蔵量に達する前に酸素濃度センサの出力のリーンを示す値からリッチを示す値への反転が生じる。
【００４６】
上記構成は、係る知見に基づく。これによれば、制御中心空燃比が理論空燃比よりもリッチ方向にずれていることを判定するために使用される第２所定期間（第２所定値）が、簡易な計算により適切な値に設定され得る。
【００４７】
以上、制御中心空燃比が理論空燃比よりもリッチ方向にずれている場合（即ち、偏差積分値が収束目標値から触媒上流空燃比がよりリッチになる方向にずれている場合）について説明した。
【００４８】
また、前記第２積分値補正手段は、前記酸素濃度センサの出力のリーンを示す値からリッチを示す値への反転時から前記第２所定期間が経過する前に前記酸素濃度センサの出力のリッチを示す値からリーンを示す値への反転が生じたとき、前記偏差積分値を、前記触媒に流入するガスの空燃比がよりリッチになる方向へ補正するように構成され得る。
【００４９】
制御中心空燃比が理論空燃比よりもリーン方向にずれている場合（即ち、偏差積分値が収束目標値から触媒上流空燃比がよりリーンになる方向にずれている場合）を考える。この場合、リーン空燃比制御の継続時間は短くなり、リッチ空燃比制御の継続時間は長くなる。
【００５０】
このことは、制御中心空燃比が理論空燃比よりもリーン方向にずれている場合、酸素濃度センサの出力のリーンを示す値からリッチを示す値への反転時（即ち、リーン空燃比制御の開始）から酸素濃度センサの出力のリッチを示す値からリーンを示す値への反転時（即ち、リーン空燃比制御の終了）までの時間が短いことを意味する。
【００５１】
上記構成は、係る知見に基づく。これによれば、制御中心空燃比が理論空燃比よりもリーン方向にずれている場合、偏差積分値が、触媒上流空燃比がよりリッチになる方向（即ち、制御中心空燃比がよりリッチとなる方向）へ補正される。この結果、偏差積分値が収束目標値から触媒上流空燃比がよりリーンになる方向に大きくずれている場合であっても、偏差積分値を早期に収束目標値に近づけて制御中心空燃比を目標空燃比（＝理論空燃比）に近づけることができる。
【００５２】
この場合も、上記と同様、前記第２所定期間として、前記酸素濃度センサの出力のリーンを示す値からリッチを示す値への反転時（即ち、リーン空燃比制御の開始）から、触媒上流空燃比が前記目標リーン空燃比に制御されているものとして同反転時から算出・更新される前記触媒の酸素吸蔵量の変化量（増大量）の積算値が第２所定値に達するまで、の期間を使用することが好適である。前記第２所定値としては、前記触媒が吸蔵し得る酸素の量の最大値（最大酸素吸蔵量）よりも小さい値が使用され得る。
【００５３】
これによれば、制御中心空燃比が理論空燃比よりもリーン方向にずれていることを判定するために使用される第２所定期間（第２所定値）が、簡易な計算により適切な値に設定され得る。
【００５４】
上記第２の空燃比制御装置においては、前記第２積分値補正手段は、アクティブ空燃比制御状態において、前記酸素濃度センサの出力の反転が生じる毎に、同反転時から前記第２所定期間が経過する前に前記酸素濃度センサの出力の次の反転が生じたときに前記偏差積分値を補正するように構成されることが好適である。これによれば、制御中心空燃比が理論空燃比よりも大きくずれている場合において、制御中心空燃比を理論空燃比に徐々に近づけることができる。
【００５５】
この場合、前記第２積分値補正手段は、前記酸素濃度センサの出力の反転回数が増大するほど、前記偏差積分値の補正量をより小さい値に設定するように構成されることが好適である。これによれば、上記第１の空燃比制御装置の場合と同様、制御中心空燃比が理論空燃比よりも大きくずれている場合において、酸素濃度センサの出力の反転回数が小さい早い段階から制御中心空燃比を理論空燃比に十分に近づけることができ、且つ、その後は、制御中心空燃比を理論空燃比に向けて少しずつ徐々に近づけていくことができる。
【発明を実施するための最良の形態】
【００５６】
以下、本発明による内燃機関の空燃比制御装置の実施形態について図面を参照しつつ説明する。
【００５７】
図１は、本発明の実施形態に係る空燃比制御装置を火花点火式多気筒（４気筒）内燃機関１０に適用したシステムの概略構成を示している。この内燃機関１０は、シリンダブロック、シリンダブロックロワーケース、及びオイルパン等を含むシリンダブロック部２０と、シリンダブロック部２０の上に固定されるシリンダヘッド部３０と、シリンダブロック部２０にガソリン混合気を供給するための吸気系統４０と、シリンダブロック部２０からの排気ガスを外部に放出するための排気系統５０とを含んでいる。
【００５８】
シリンダブロック部２０は、シリンダ２１、ピストン２２、コンロッド２３、及びクランク軸２４を含んでいる。このシリンダブロック部２０においては、ピストン２２はシリンダ２１内を往復動し、ピストン２２の往復動がコンロッド２３を介してクランク軸２４に伝達され、これにより当該クランク軸２４が回転するようになっている。シリンダ２１とピストン２２のヘッドは、シリンダヘッド部３０とともに燃焼室２５を形成している。
【００５９】
シリンダヘッド部３０は、燃焼室２５に連通した吸気ポート３１、吸気ポート３１を開閉する吸気弁３２、吸気弁３２を駆動するインテークカムシャフトを含むとともに当該インテークカムシャフトの位相角を連続的に変更する可変吸気タイミング装置３３、可変吸気タイミング装置３３のアクチュエータ３３ａ、燃焼室２５に連通した排気ポート３４、排気ポート３４を開閉する排気弁３５、排気弁３５を駆動するエキゾーストカムシャフト３６、点火プラグ３７、点火プラグ３７に与える高電圧を発生するイグニッションコイルを含むイグナイタ３８、及び燃料を吸気ポート３１内に噴射するインジェクタ（燃料噴射手段）３９を備えている。
【００６０】
吸気系統４０は、吸気ポート３１に連通し当該吸気ポート３１とともに吸気通路を形成するインテークマニホールドを含む吸気管４１、吸気管４１の端部に設けられたエアフィルタ４２、吸気管４１内にあって吸気通路の開口断面積を可変とするスロットル弁４３、及びスロットル弁アクチュエータ４３ａを備えている。ここで、吸気ポート３１、及び吸気管４１は、吸気通路を構成している。
【００６１】
排気系統５０は、排気ポート３４に連通したエキゾーストマニホールド５１、エキゾーストマニホールド５１（実際には、各排気ポート３４に連通した各々のエキゾーストマニホールド５１が集合した集合部）に接続されたエキゾーストパイプ（排気管）５２、エキゾーストパイプ５２に配設（介装）された上流側触媒装置５３（三元触媒、以下、「第１触媒５３」と称呼する。）、及びこの第１触媒５３の下流のエキゾーストパイプ５２に配設（介装）された下流側触媒装置５４（三元触媒、以下、「第２触媒５４」と称呼する。）を備えている。排気ポート３４、エキゾーストマニホールド５１、及びエキゾーストパイプ５２は、排気通路を構成している。
【００６２】
一方、このシステムは、エアフローメータ６１、スロットルポジションセンサ６２、カムポジションセンサ６３、クランクポジションセンサ６４、水温センサ６５、第１触媒５３の上流の排気通路（本例では、前記各々のエキゾーストマニホールド５１が集合した集合部）に配設された空燃比センサ６６（以下、「上流側空燃比センサ６６」と称呼する。）、第１触媒５３の下流であって第２触媒５４の上流の排気通路に配設された空燃比センサ６７（以下、「下流側空燃比センサ６７」と称呼する。）、及びアクセル開度センサ６８を備えている。
【００６３】
エアフローメータ６１は、周知の熱線式エアフローメータにより構成されており、吸気管４１内を流れる吸入空気の単位時間あたりの質量流量（吸入空気流量Ga）に応じた電圧を出力するようになっている。スロットルポジションセンサ６２は、スロットル弁４３の開度を検出し、スロットル弁開度TAを表す信号を出力するようになっている。カムポジションセンサ６３は、インテークカムシャフトが９０°回転する毎に（即ち、クランク軸２４が１８０°回転する毎に）一つのパルスを有する信号（Ｇ２信号）を発生するようになっている。クランクポジションセンサ６４は、クランク軸２４が１０°回転する毎に幅狭のパルスを有するとともに当該クランク軸２４が３６０°回転する毎に幅広のパルスを有する信号を出力するようになっている。この信号は、運転速度NEを表す。水温センサ６５は、内燃機関１０の冷却水の温度を検出し、冷却水温THWを表す信号を出力するようになっている。
【００６４】
上流側空燃比センサ６６は、限界電流式の酸素濃度センサであり、図２に示したように、空燃比Ａ／Ｆに応じた電流を出力し、この電流に応じた電圧である出力値Vabyfsを出力するようになっていて、特に、上流側空燃比センサ６６の出力値Vabyfsの誤差（上流側空燃比センサ６６の誤差）がない場合、空燃比が理論空燃比AFthであるときには出力値Vabyfsは上流側目標値Vstoichになる。図２から明らかなように、上流側空燃比センサ６６によれば、広範囲にわたる空燃比Ａ／Ｆを精度良く検出することができる。
【００６５】
下流側空燃比センサ６７は、起電力式（濃淡電池式）の酸素濃度センサであり、図３に示したように、理論空燃比近傍において急変する電圧である出力値Voxsを出力するようになっている。より具体的に述べると、下流側空燃比センサ６７は、空燃比が理論空燃比よりもリーンのときは略０．１（Ｖ）（リーンを示す値）、空燃比が理論空燃比よりもリッチのときは略０．９（Ｖ）（リッチを示す値）、及び空燃比が理論空燃比のときは０．５（Ｖ）の電圧を出力するようになっている。アクセル開度センサ６８は、運転者によって操作されるアクセルペダル８１の操作量を検出し、アクセルペダル８１の操作量Accpを表す信号を出力するようになっている。
【００６６】
更にこのシステムは、電気制御装置７０を備えている。電気制御装置７０は、互いにバスで接続されたＣＰＵ７１、ＣＰＵ７１が実行するルーチン（プログラム）、テーブル（ルックアップテーブル、マップ）、及びパラメータ等を予め記憶したＲＯＭ７２、ＣＰＵ７１が必要に応じてデータを一時的に格納するＲＡＭ７３、電源が投入された状態でデータを格納するとともに当該格納したデータを電源が遮断されている間も保持するバックアップＲＡＭ（ＳＲＡＭ）７４、並びにＡＤコンバータを含むインターフェース７５等からなるマイクロコンピュータである。インターフェース７５は、前記センサ６１〜６８と接続され、ＣＰＵ７１にセンサ６１〜６８からの信号を供給するとともに、同ＣＰＵ７１の指示に応じて可変吸気タイミング装置３３のアクチュエータ３３ａ、イグナイタ３８、インジェクタ３９、及びスロットル弁アクチュエータ４３ａに駆動信号を送出するようになっている。
【００６７】
（空燃比制御の概要）
次に、上述のように構成された空燃比制御装置（以下、「本装置」とも称呼する。）が行う空燃比制御の概要について説明する。
【００６８】
本装置は、上流側空燃比センサ６６の出力値を用いた空燃比フィードバック制御（以下、「メインＦＢ制御」と称呼する。）、及び、下流側空燃比センサ６７の出力値を用いた空燃比フィードバック制御（以下、「サブＦＢ制御」と称呼する。）という２つの空燃比フィードバック制御を行う。これらにより、空燃比が目標空燃比である理論空燃比に一致するようにフィードバック制御される。
【００６９】
より具体的に述べると、本装置は、機能ブロック図である図４に示したように、Ａ１〜Ａ１３の各機能ブロックを含んで構成されている。以下、図４を参照しながら各機能ブロックについて説明していく。
【００７０】
<基本燃料噴射量の算出>
先ず、筒内吸入空気量算出手段Ａ１は、エアフローメータ６１が計測している吸入空気流量Gaと、クランクポジションセンサ６４の出力に基づいて得られる運転速度NEと、ＲＯＭ７２が記憶しているテーブルMapMcとに基づき、今回の吸気行程において吸気行程を迎える気筒に吸入された新気の量である筒内吸入空気量Mc(k)を求める。ここで、添え字の（k）は、今回の吸気行程に対する値であることを示している（以下、他の物理量についても同様。）。筒内吸入空気量Mcは、各気筒の吸気行程に対応されながらＲＡＭ７３に記憶されていく。
【００７１】
上流側目標空燃比設定手段Ａ２は、内燃機関１０の運転状態である運転速度NE、及びスロットル弁開度TA等に基づいて上流側目標空燃比abyfrを決定する。この上流側目標空燃比abyfrは、例えば、内燃機関１０の暖機終了後においては、特殊な場合を除き理論空燃比に設定されている。
【００７２】
制御用目標空燃比設定手段Ａ３は、下記(1)式に従って、上流側目標空燃比abyfrと、後述するサブＦＢ補正量算出手段Ａ８により算出されるサブＦＢ補正量FBsubとに基づいて制御用目標空燃比abyfrs(k)を設定する。
【００７３】
abyfrs(k)＝abyfr・(1−FBsub)  ・・・(1)
【００７４】
上記(1)式から理解できるように、この制御用目標空燃比abyfrs(k)は、上流側目標空燃比abyfrに対してサブＦＢ補正量FBsubに応じた分だけ異なる空燃比に設定される。制御用目標空燃比abyfrsは、各気筒の吸気行程に対応されながらＲＡＭ７３に記憶されていく。
【００７５】
基本燃料噴射量算出手段Ａ４は、筒内吸入空気量Mc(k)を制御用目標空燃比abyfrs(k)で除することにより、筒内吸入空気量Mc(k)に対応する、制御用目標空燃比abyfrs(k)を得るための燃料の量である基本燃料噴射量Fbaseを求める。このように、制御用目標空燃比abyfrs(k)は、基本燃料噴射量Fbaseの設定に使用され、且つ、後述するように、メインＦＢ制御に使用される。
【００７６】
<指令燃料噴射量の算出>
指令燃料噴射量算出手段Ａ５は、基本燃料噴射量Fbaseに後述するメインＦＢ補正量算出手段Ａ１３により算出されるメインＦＢ補正量FBmainを加えることで、下記(2)式に基づいて指令燃料噴射量Fiを求める。
【００７７】
Fi＝Fbase＋FBmain  ・・・(2)
【００７８】
本装置は、このように算出される指令燃料噴射量Fiの燃料の噴射指示を今回の吸気行程を迎える気筒についてのインジェクタ３９に対して行う。これにより、後に詳述するように、メインＦＢ制御、及びサブＦＢ制御が達成される。
【００７９】
<サブＦＢ制御>
下流側目標値設定手段Ａ６は、上述した上流側目標空燃比設定手段Ａ２と同様、内燃機関１０の運転状態である運転速度NE、及びスロットル弁開度TA等に基づいて下流側目標値Voxsref（前記「目標空燃比に相当する基準値」に相当）を決定する。この下流側目標値Voxsrefは、例えば、内燃機関１０の暖機終了後においては、特殊な場合を除き理論空燃比に対応する値である０．５（Ｖ）に設定されている（図３を参照。）。また、本例では、下流側目標値Voxsrefは、同下流側目標値Voxsrefに対応する空燃比が上述した上流側目標空燃比abyfrと常時一致するように設定される。
【００８０】
出力偏差量算出手段Ａ７は、下記(3)式に基づいて、現時点（具体的には、今回のFiの噴射指示開始時点）での下流側目標値Voxsrefから現時点での下流側空燃比センサ６７の出力値Voxsを減じることにより、出力偏差量DVoxsを求める。この出力偏差量DVoxsは、前記「酸素濃度センサの出力値と目標空燃比に相当する基準値との偏差に相当する値」に対応する。
【００８１】
DVoxs＝Voxsref−Voxs  ・・・(3)
【００８２】
サブＦＢ補正量算出手段Ａ８（ＰＩＤコントローラ）は、出力偏差量DVoxsを比例・積分・微分処理（ＰＩＤ処理）することでサブＦＢ補正量FBsubを求める。以下、サブＦＢ補正量算出手段Ａ８の機能ブロック図である図５を参照しながら、Ａ８ａ〜Ａ８ｇの各機能ブロックを含むサブＦＢ補正量算出手段Ａ８によるサブＦＢ補正量FBsubの算出方法について説明する。
【００８３】
比例項算出手段Ａ８ａは、上記出力偏差量DVoxsに予め設定された比例ゲインKp（比例定数）を乗じることで、サブＦＢ補正量FBsubにおける比例項Ksubp(＝Kp・DVoxs)を求める。
【００８４】
積分処理手段Ａ８ｂは、上記出力偏差量DVoxsを逐次積算していくことで出力偏差量DVoxsの時間積分値である偏差積分値SDVoxsを算出・更新する。この積分処理手段Ａ９ｂは、前記「積分値算出手段」に相当する。
【００８５】
積分項算出手段Ａ８ｃは、上記偏差積分値SDVoxsに予め設定された積分ゲインKi（積分定数）を乗じることで、サブＦＢ補正量FBsubにおける積分項Ksubi(＝Ki・SDVoxs)を求める。
【００８６】
学習処理手段Ａ８ｄは、所定のタイミングにて、後に詳述する「積分項Ksubiの学習処理」を行う。「積分項Ksubiの学習処理」では、所定条件が成立すると、学習値Learn（積分項Ksubiの学習値）を更新するための更新値DLearnが決定され、更新値DLearnはその時点でバックアップＲＡＭ７４に記憶されている学習値Learnに積算される。これにより学習値Learnが更新される。
【００８７】
このように「積分項Ksubiの学習処理」により更新された学習値Learnは、バックアップＲＡＭ７４に記憶される。即ち、バックアップＲＡＭ７４に記憶されている学習値Learnは、「積分項Ksubiの学習処理」により更新される毎にステップ的に変化していく。加えて、学習値Learnが更新される毎に、偏差積分値SDVoxs（従って、積分項Ksubiの値）が「０」にリセットされる。
【００８８】
総和値算出手段Ａ８ｅは、積分項Ksubiの値と学習値Learn（バックアップＲＡＭ７４に記憶されている値）の和を総和値SUMとして算出する。総和値SUMは、サブＦＢ補正量FBsubにおける実質的な積分項として機能する値である。
【００８９】
微分項算出手段Ａ８ｆは、上記出力偏差量DVoxsの時間微分値DDVoxsに予め設定された微分ゲインKd（微分定数）を乗じることで、サブＦＢ補正量FBsubにおける微分項Ksubd(＝Kd・DDVoxs)を求める。
【００９０】
加算手段Ａ８ｇは、下記(4)式に従って、比例項Ksubp、総和値SUM（即ち、実質的な積分項）、及び微分項Ksubdを加えることで、出力偏差量DVoxsを比例・積分・微分処理（ＰＩＤ処理）した値であるサブＦＢ補正量FBsubを求める（−1＜FBsub＜1）。
【００９１】
FBsub＝Ksubp＋SUM＋Ksubd  ・・・(4)
【００９２】
再び、図４を参照すると、上述したように、このサブＦＢ補正量FBsubは、制御用目標空燃比abyfrs(k)の設定に使用される。加えて、サブＦＢ補正量FBsubに基づく制御用目標空燃比abyfrs(k)は、後述するメインＦＢ制御に使用される。これにより、後述するようにサブＦＢ制御がなされる。
【００９３】
<メインＦＢ制御>
テーブル変換手段Ａ９は、上流側空燃比センサ６６の出力値Vabyfsと、先に説明した図２に示した上流側空燃比センサ出力値Vabyfsと空燃比Ａ／Ｆとの関係を規定したテーブル（実線を参照）とに基づいて、上流側空燃比センサ６６が検出する現時点（具体的には、今回のFiの噴射指示開始時点）における今回の検出空燃比abyfs(k)を求める。検出空燃比abyfsは、各気筒の吸気行程に対応されながらＲＡＭ７３に記憶されていく。
【００９４】
目標空燃比遅延手段Ａ１０は、制御用目標空燃比設定手段Ａ３により吸気行程毎に求められＲＡＭ７３に記憶されている制御用目標空燃比abyfrsのうち、現時点からＮストローク（Ｎ回の吸気行程）前の制御用目標空燃比abyfrsをＲＡＭ７３から読み出し、これを制御用目標空燃比abyfrs(k−N)とする。この値Ｎは、燃料の噴射指示から、その噴射指示により噴射された燃料の燃焼に基づく排ガスの空燃比が上流側空燃比センサ６６（の検出部）に到達するまでに要する時間（以下、「遅れ時間Ｌ」と称呼する。）に相当するストローク数である。以下、遅れ時間Ｌ、及びストローク数Ｎについて付言する。
【００９５】
一般に、燃料の噴射指示は、吸気行程中（或いは吸気行程よりも前の時点）にて実行され、噴射された燃料は、その後に到来する圧縮上死点近傍の時点で燃焼室２５内にて着火（燃焼）させられる。この結果、発生する排ガスは、排気弁３５の周囲を介して燃焼室２５から排気通路へと排出され、その後、排気通路内を移動していくことで上流側空燃比センサ６６（の検出部）に到達する。
【００９６】
以上のことから、上記遅れ時間Ｌは、燃焼行程に係わる遅れ（行程遅れ）、及び排気通路内での排ガスの移動に係わる遅れ（輸送遅れ）の和で表される。即ち、上流側空燃比センサ６６による検出空燃比abyfsは、このようにして得られる遅れ時間Ｌだけ前に実行された燃料の噴射指示に基づいて発生した排ガスの空燃比を表す値となる。
【００９７】
上述した行程遅れに係る時間は、運転速度NEの増加に応じて短くなるとともに、輸送遅れに係る時間は、運転速度NE及び筒内吸入空気量Mcの上昇に応じて短くなる傾向がある。従って、遅れ時間Ｌに相当するストローク数Ｎは、運転速度NE及び筒内吸入空気量Mcの上昇に応じて小さくなる。
【００９８】
ローパスフィルタＡ１１は、上流側空燃比センサ６６の応答遅れに相当する時定数と等しい時定数τを有する一次のディジタルフィルタであり、上記制御用目標空燃比abyfrs(k−N)を入力するとともに、上記制御用目標空燃比abyfrs(k−N)を時定数τをもってローパスフィルタ処理した値であるローパスフィルタ通過後制御用目標空燃比abyfrslowを出力する。
【００９９】
上流側空燃比偏差算出手段Ａ１２は、下記(5)式に基づいて、今回の検出空燃比abyfs(k)からローパスフィルタ通過後制御用目標空燃比abyfrslowを減じることにより、現時点からＮストローク前の上流側空燃比偏差DAFを求める。
【０１００】
DAF＝abyfs(k)−abyfrslow  ・・・(5)
【０１０１】
このように、現時点からＮストローク前の上流側空燃比偏差DAFを求めるために、今回の検出空燃比abyfs(k)から、ローパスフィルタ通過後制御用目標空燃比abyfrslowを減じるのは、上述したように、今回の検出空燃比abyfs(k)は、現時点から遅れ時間Ｌだけ前(従って、現時点からＮストローク前)に実行された噴射指示に基づいて発生した排ガスの空燃比を表しているからである。この上流側空燃比偏差DAFは、Ｎストローク前の時点で筒内に供給された燃料の過不足量に対応する値である。
【０１０２】
メインＦＢ補正量算出手段Ａ１３（ＰＩコントローラ）は、上流側空燃比偏差DAFを比例・積分処理（ＰＩ処理）することで、下記(6)式に基づいてＮストローク前の燃料供給量の過不足を補償するためのメインＦＢ補正量FBmainを求める。(6)式において、Gpは予め設定された比例ゲイン（比例定数）、Giは予め設定された積分ゲイン（積分定数）であり、SDAFは上流側空燃比偏差DAFの積分値（積算値）である。
【０１０３】
FBmain＝Gp・DAF＋Gi・SDAF  ・・・(6)
【０１０４】
本装置は、このようにしてメインＦＢ補正量FBmainを求め、指令燃料噴射量Fiを求める際、上述したように、補正後基本燃料噴射量Fbaseに対してメインＦＢ補正量FBmainを加える。これにより、以下のように、メインＦＢ制御がなされる。
【０１０５】
例えば、触媒上流空燃比がリーン方向に変化すると、検出空燃比abyfs(k)はローパスフィルタ通過後制御用目標空燃比abyfrslowよりもリーンな値（より大きな値）となる。このため、上流側空燃比偏差DAFは正の値となる。従って、メインＦＢ補正量FBmainが正の値となる。これにより、指令燃料噴射量Fiは、基本燃料噴射量Fbaseよりも大きくなって、空燃比がリッチ方向に制御される。この結果、検出空燃比abyfs(k)が小さくなり、検出空燃比abyfs(k)がローパスフィルタ通過後制御用目標空燃比abyfrslowと一致するように制御される。
【０１０６】
反対に、触媒上流空燃比がリッチ方向に変化すると、検出空燃比abyfs(k)はローパスフィルタ通過後制御用目標空燃比abyfrslowよりもリッチな値（より小さな値）となる。このため、上流側空燃比偏差DAFは負の値となる。従って、メインＦＢ補正量FBmainが負の値となる。これにより、指令燃料噴射量Fi(k)は、補正後基本燃料噴射量Fbaseよりも小さくなって、空燃比がリーン方向に制御される。この結果、検出空燃比abyfs(k)が大きくなり、検出空燃比abyfs(k)がローパスフィルタ通過後制御用目標空燃比abyfrslowと一致するように制御される。以上のように、メインＦＢ制御により、検出空燃比abyfs(k)がローパスフィルタ通過後制御用目標空燃比abyfrslowと一致するように指令燃料噴射量Fiが制御される。
【０１０７】
加えて、係るメインＦＢ制御を補完（補正）するように、以下のようにサブＦＢ制御がなされる。例えば、第１触媒５３の下流のガスの空燃比がリーンとなることで下流側空燃比センサ６７の出力値Voxsがリーンを示す値となると、出力偏差量DVoxsが正の値となるので（図３を参照）、サブＦＢ補正量FBsubは正の値となる。これにより、制御用目標空燃比abyfrs(k)（従って、ローパスフィルタ通過後制御用目標空燃比abyfrslow）が上流側目標空燃比abyfr（＝理論空燃比）よりも小さい値（即ち、リッチな空燃比）に設定される。この状態で検出空燃比abyfs(k)がローパスフィルタ通過後制御用目標空燃比abyfrslowと一致するようにメインＦＢ制御が実行されることにより、指令燃料噴射量Fiが増大させられ、空燃比がリッチ方向に制御される。この結果、下流側空燃比センサ６７の出力値Voxsが下流側目標値Voxsrefと一致するように制御される。
【０１０８】
反対に、第１触媒５３の下流のガスの空燃比がリッチとなることで下流側空燃比センサ６７の出力値Voxsがリッチを示す値となると、出力偏差量DVoxsが負の値となるので、サブＦＢ補正量FBsubは負の値となる。これにより、制御用目標空燃比abyfrs(k)（従って、ローパスフィルタ通過後制御用目標空燃比abyfrslow）が上流側目標空燃比abyfr（＝理論空燃比）よりも大きい値（即ち、リーンな空燃比）に設定される。この状態で検出空燃比abyfs(k)がローパスフィルタ通過後制御用目標空燃比abyfrslowと一致するようにメインＦＢ制御が実行されることにより、指令燃料噴射量Fiが減少させられ、空燃比がリーン方向に制御される。この結果、下流側空燃比センサ６７の出力値Voxsが下流側目標値Voxsrefと一致するように制御される。以上のように、サブＦＢ制御により、下流側空燃比センサ６７の出力値Voxsが下流側目標値Voxsrefと一致するように指令燃料噴射量Fiが制御される。
【０１０９】
更には、メインＦＢ補正量FBmainは積分項Gi・SDAFを含んでいるので、定常状態では上流側空燃比偏差DAFがゼロになることが保証される。換言すれば、メインＦＢ制御により、上述した「燃料噴射量の誤差」が発生している場合であっても、定常状態において、積分項Gi・SDAFの値が「燃料噴射量の誤差」の大きさに対応する値に収束するとともに、検出空燃比abyfs(k)がローパスフィルタ通過後制御用目標空燃比abyfrslowに収束することが保証される。このように、「燃料噴射量の誤差」は、メインＦＢ制御により補償され得る。
【０１１０】
また、サブＦＢ補正量FBsubも積分項（即ち、実質的な積分項である総和値SUM）を含んでいるので、定常状態では出力偏差量DVoxsがゼロになることが保証される。換言すれば、サブＦＢ制御により、上述した「上流側空燃比センサ６６の誤差」が発生している場合であっても、定常状態において、総和値SUMが「上流側空燃比センサ６６の誤差」の大きさに対応する値（上記「収束目標値」に相当）に収束するとともに、下流側空燃比センサ６７の出力値Voxsが下流側目標値Voxsrefに収束することが保証される。このように、「上流側空燃比センサ６６の誤差」は、サブＦＢ制御により補償され得る。
【０１１１】
なお、基本燃料噴射量算出手段Ａ４において目標空燃比abyfrに代えて制御用目標空燃比abyfrsを使用して基本燃料噴射量Fbaseが算出されること、並びに、目標空燃比遅延手段Ａ１０及びローパスフィルタＡ１１が備えられていること、により、何らかの理由によりサブＦＢ補正量FBsubが荒れてもメインＦＢ補正量FBmainの荒れが次第に大きくなることが抑制され得、空燃比の荒れが増大することを抑制することができる。この点については、特願２００５−３３８１１３に詳細に記載されている。
【０１１２】
ところで、定常状態では、サブＦＢ補正量FBsubにおける比例項Ksubpと微分項ksubdが共にゼロになることを考慮すると、サブＦＢ補正量FBsubは総和値SUM（或いは、上記学習値Learn）と等しい。定常状態において総和値SUM（或いは、学習値Learn）が「上流側空燃比センサ６６の誤差」の大きさに対応する値（収束目標値）に収束している状態では、制御用目標空燃比abyfrs（＝abyfr・(1−FBsub)＝abyfr・(1−SUM)）は、触媒上流空燃比が目標空燃比abyfr（＝理論空燃比AFth）と一致する場合に対応する上流側空燃比センサ６６による検出空燃比abyfsと一致する。
【０１１３】
より具体的に述べると、例えば、上流側空燃比センサ６６の誤差が発生していて、空燃比に対する上流側空燃比センサ６６の出力特性が図２の破線で示される場合を考える。この場合、触媒上流空燃比が目標空燃比abyfr（＝AFth）と一致する場合（Vabyfs＝V1）に対応する上流側空燃比センサ６６による検出空燃比abyfs（値V1と図２の実線とから得られる空燃比）は、値AF1となる。
【０１１４】
この場合において、定常状態において総和値SUM（或いは、学習値Learn）が「上流側空燃比センサ６６の誤差」の大きさに対応する値（収束目標値）に収束している状態では、制御用目標空燃比abyfrs（＝abyfr・(1−SUM)）は、値AF1と一致する。この状態においてメインＦＢ制御により、検出空燃比abyfsが制御用目標空燃比abyfrs（実際にはローパスフィルタ通過後制御用目標空燃比abyfrslow）と一致するように制御されることで、触媒上流空燃比が目標空燃比abyfr（＝AFth）と一致する。なお、この場合、総和値SUM（或いは、学習値Learn）の収束目標値である「上流側空燃比センサ６６の誤差」の大きさに対応する値L1＝1−AF1/abyfr（＞０）となる。
【０１１５】
換言すれば、総和値SUM（或いは、学習値Learn）が「上流側空燃比センサ６６の誤差」の大きさに対応する値（収束目標値）L1に一致していることは、本装置が目標空燃比abyfr（＝AFth）と等しい空燃比であるものとして扱っている実際の空燃比（以下、「制御中心空燃比AFcen」と称呼する。）が目標空燃比abyfr（＝AFth）に一致していることを意味する。このように、制御中心空燃比AFcenが目標空燃比abyfr(＝AFth)と一致している場合、「上流側空燃比センサ６６の誤差」が適切に補償され得、触媒上流空燃比、ひいては、第１触媒５３の下流のガスの空燃比が目標空燃比abyfr（＝AFth）に適切に一致し得る。
【０１１６】
（学習値Learnの更新）
次に、上述した学習処理手段Ａ８ｄ（図５を参照）による「積分項Ksubiの学習処理」（即ち、積分項Ksubiの学習値Learnの更新）について説明する。積分項Ksubiの学習値Learnが「上流側空燃比センサ６６の誤差」の大きさに対応する収束目標値からずれていると、制御中心空燃比AFcenが目標空燃比abyfr(＝AFth)からずれた値となる。この場合、「上流側空燃比センサ６６の誤差」が適切に補償され得ず、触媒上流空燃比、ひいては、第１触媒５３の下流のガスの空燃比が目標空燃比abyfr（＝AFth）に適切に一致し得ない可能性がある。
【０１１７】
従って、制御中心空燃比AFcenが目標空燃比abyfr(＝AFth)からずれている場合、学習値Learnを更新して「上流側空燃比センサ６６の誤差」の大きさに対応する収束目標値に近づける必要がある。以下、本装置（学習処理手段Ａ８ｄ）による学習値Learnの更新方法の概要について図６〜図８を参照しながら説明する。なお、上流側空燃比センサ６６には誤差が発生していて、上述と同様、空燃比に対する上流側空燃比センサ６６の出力特性は、図２の破線で示されるものとする。
【０１１８】
図６では、制御中心空燃比AFcenが目標空燃比abyfr（＝AFth）よりもリーン方向にずれている場合（図中の「中心ずれ」を参照）が示されている。即ち、学習値Learnが、上記収束目標値L1よりも小さい値に維持され、値（abyfr・(1−Learn)）が、値AF1（図２を参照）よりも上記「中心ずれ」の分だけ大きい場合が示されている。ここで、制御中心空燃比AFcenは、検出空燃比abyfsが値（abyfr・(1−Learn)）に一致する場合に対応する触媒上流空燃比であるということもできる。
【０１１９】
図６では、下流側空燃比センサ出力値Voxsがリッチを示す値からリーンを示す値に反転したとき（時刻ｔ１、ｔ３）に制御用目標空燃比abyfrsを値（abyfr・(1−Learn)−ΔAF）に設定し、下流側空燃比センサ出力値Voxsがリーンを示す値からリッチを示す値に反転したとき（時刻ｔ２）に制御用目標空燃比abyfrsを値（abyfr・(1−Learn)＋ΔAF）に設定する制御（以下、「アクティブ空燃比制御」と称呼する。）が実行されている場合が示されている。
【０１２０】
アクティブ空燃比制御中において、制御用目標空燃比abyfrsが値（abyfr・(1−Learn)−ΔAF）に設定されている間（時刻ｔ１〜ｔ２、時刻ｔ３以降）、検出空燃比abyfsが値（abyfr・(1−Learn)−ΔAF）に一致するように制御される（リッチ空燃比制御）。これにより、触媒上流空燃比が値（AFcen−ΔAF）に制御され、触媒上流空燃比が理論空燃比AFthよりもリッチな空燃比に制御される（され得る）。従って、第１触媒５３の酸素吸蔵量の実際値OSAactは最大酸素吸蔵量Cmaxから次第に減少し、酸素吸蔵量実際値OSAactがゼロになった時点（時刻ｔ２）で下流側空燃比センサ出力値Voxsがリーンを示す値からリッチを示す値に反転する。これを受けて、制御用目標空燃比abyfrsが値（abyfr・(1−Learn)＋ΔAF）に切り換わる。
【０１２１】
制御用目標空燃比abyfrsが値（abyfr・(1−Learn)＋ΔAF）に設定されている間（時刻ｔ２〜ｔ３）、検出空燃比abyfsが値（abyfr・(1−Learn)＋ΔAF）に一致するように制御される（リーン空燃比制御）。これにより、触媒上流空燃比が値（AFcen＋ΔAF）に制御され、触媒上流空燃比が理論空燃比AFthよりもリーンな空燃比に制御される（され得る）。従って、酸素吸蔵量実際値OSAactはゼロから次第に増大し、酸素吸蔵量実際値OSAactが最大酸素吸蔵量Cmaxに達した時点（時刻ｔ３）で下流側酸素濃度センサ出力値がリッチを示す値からリーンを示す値に反転する。これを受けて、制御用目標空燃比abyfrsが値（abyfr・(1−Learn)−ΔAF）に切り換わる。このように、アクティブ空燃比制御が実行されると、制御用目標空燃比abyfrs（従って、触媒上流空燃比）がリッチ又はリーンに交互に切り換わる。
【０１２２】
ここで、アクティブ空燃比制御中において、制御中心空燃比AFcenが理論空燃比AFthと一致している場合（即ち、学習値Learnが収束目標値L1と一致している場合）、触媒上流空燃比は、リーン空燃比制御中では値（AFth＋ΔAF）（目標リーン空燃比に相当）と一致し、リッチ空燃比制御中では値（AFth−ΔAF）（目標リッチ空燃比に相当）と一致し得る。
【０１２３】
この場合、触媒上流空燃比の理論空燃比AFthからの偏移量は、リッチ空燃比制御中もリーン空燃比制御中も値ΔAFで同じとなる。他方、酸素吸蔵量実際値OSAactの変化速度（増大・減少速度）は、触媒上流空燃比の理論空燃比AFthからの偏移量に比例する。以上より、制御中心空燃比AFcenが理論空燃比AFthと一致している場合、リッチ空燃比制御とリーン空燃比制御の継続時間は同じ（或いは、同程度）となる。
【０１２４】
一方、図６に示したように、制御中心空燃比AFcenが理論空燃比AFthよりもリーン方向にずれている場合（即ち、学習値Learnが収束目標値L1よりも小さい場合）、触媒上流空燃比は、リーン空燃比制御中では値（AFth＋ΔAF）よりも上記「中心ずれ」の分だけリーンとなり、リッチ空燃比制御中では値（AFth−ΔAF）よりも上記「中心ずれ」の分だけリーンとなる。換言すれば、触媒上流空燃比の理論空燃比AFthからの偏移量は、リーン空燃比制御中では大きく、リッチ空燃比制御中では小さくなる。
【０１２５】
従って、リーン空燃比制御中における酸素吸蔵量実際値OSAactの増大速度は大きくなり、この結果、リーン空燃比制御の継続時間（時刻ｔ２〜ｔ３）は短くなる。一方、リッチ空燃比制御中における酸素吸蔵量実際値OSAactの減少速度は小さくなり、この結果、リッチ空燃比制御の継続時間（時刻ｔ１〜ｔ２）は長くなる。
【０１２６】
いま、下記(7)式にて、下流側空燃比センサ出力値Voxsの反転毎に初期値ゼロから積算されていく第１触媒５３の酸素吸蔵量の変化量の積算値OSA（図６を参照）を考える。(7)式において、値０．２３は、空気中における酸素の質量割合である。「０．２３・Fi・ΔAF」は、第１触媒５３に流入するガス中の酸素の一燃料噴射当たりの過不足量を表す。即ち、この積算値OSAの計算では、リッチ空燃比制御中では触媒上流空燃比が値（AFth−ΔAF）で一定に制御されているものと仮定され、リーン空燃比制御中では触媒上流空燃比が値（AFth＋ΔAF）で一定に制御されているものと仮定されている。換言すれば、制御中心空燃比AFcenが理論空燃比AFthと一致しているものと仮定されている。
【０１２７】
OSA＝Σ(０．２３・Fi・ΔAF)  ・・・(7)
【０１２８】
従って、積算値OSAの変化速度（増大速度）は、制御中心空燃比AFcenの理論空燃比AFthからのずれ量に依存することなく、且つ、リーン空燃比制御中であるかリッチ空燃比制御中であるかに依存することなく、一定となる（燃料噴射量Fi、及びエンジン回転速度NEが一定の場合）。制御中心空燃比AFcenが理論空燃比AFthと一致している場合、積算値OSAが最大酸素吸蔵量Cmaxに達する時期と下流側空燃比センサ出力値Voxsが反転する時期が一致し得る。
【０１２９】
一方、図６に示したように、制御中心空燃比AFcenが理論空燃比AFthよりもリーン方向にずれている場合、リッチ空燃比制御の継続時間が長くなることから（時刻ｔ１〜ｔ２を参照）、リッチ空燃比制御中において積算値OSAが最大酸素吸蔵量Cmaxに達してもなお、下流側空燃比センサ出力値Voxsのリーンを示す値からリッチを示す値への反転が生じない。
【０１３０】
即ち、リッチ空燃比制御中において積算値OSAが最大酸素吸蔵量Cmaxに達してもなお、下流側空燃比センサ出力値Voxsのリーンを示す値からリッチを示す値への反転が生じない場合、制御中心空燃比AFcenが理論空燃比AFthよりもリーン方向にずれていると判定することができる。
【０１３１】
そこで、図６に対応する図７に示すように（図７の時刻ｔ１１、ｔ１２、ｔ１３は、図６の時刻ｔ１、ｔ２、ｔ３にそれぞれ対応する）、本装置は、アクティブ空燃比制御中のリッチ空燃比制御中（時刻ｔ１１〜ｔ１２、時刻ｔ１３以降）において積算値OSAが最大酸素吸蔵量Cmaxよりも若干大きい値αに達してもなお、下流側空燃比センサ出力値Voxsのリーンを示す値からリッチを示す値への反転が生じない場合（時刻ｔ１１’）、学習値Learnをより大きい値（即ち、触媒流入空燃比がよりリッチになる方向の値）に更新する。この結果、時刻ｔ１１’以降、収束目標値L1よりも小さかった学習値Learnが収束目標値L1に近づき、制御中心空燃比AFcenが理論空燃比AFthに近づく。
【０１３２】
同様に、リーン空燃比制御中において積算値OSAが最大酸素吸蔵量Cmaxに達してもなお、下流側空燃比センサ出力値Voxsのリッチを示す値からリーンを示す値への反転が生じない場合、制御中心空燃比AFcenが理論空燃比AFthよりもリッチ方向にずれていると判定することができる。そこで、本装置は、リーン空燃比制御中において積算値OSAが値αに達してもなお、下流側空燃比センサ出力値Voxsのリッチを示す値からリーンを示す値への反転が生じない場合、学習値Learnをより小さい値（即ち、触媒流入空燃比がよりリーンになる方向の値）に更新する。この結果、収束目標値L1よりも大きかった学習値Learnが収束目標値L1に近づき、制御中心空燃比AFcenが理論空燃比AFthに近づく。
【０１３３】
他方、図６に示したように、制御中心空燃比AFcenが理論空燃比AFthよりもリーン方向にずれている場合、リーン空燃比制御の継続時間が短くなることから（時刻ｔ２〜ｔ３を参照）、リーン空燃比制御中において積算値OSAが最大酸素吸蔵量Cmaxに達する前に、下流側空燃比センサ出力値Voxsのリッチを示す値からリーンを示す値への反転が生じる（時刻ｔ３を参照）。
【０１３４】
即ち、リーン空燃比制御中において積算値OSAが最大酸素吸蔵量Cmaxに達する前に、下流側空燃比センサ出力値Voxsのリッチを示す値からリーンを示す値への反転が生じた場合も、制御中心空燃比AFcenが理論空燃比AFthよりもリーン方向にずれていると判定することができる。
【０１３５】
そこで、図６に対応する図８に示すように（図８の時刻ｔ２１、ｔ２２、ｔ２３は、図６の時刻ｔ１、ｔ２、ｔ３にそれぞれ対応する）、本装置は、リーン空燃比制御中（時刻ｔ２２〜ｔ２３）において積算値OSAが最大酸素吸蔵量Cmaxよりも若干小さい値βに達する前に、下流側空燃比センサ出力値Voxsのリッチを示す値からリーンを示す値への反転が生じた場合（時刻ｔ２３）、学習値Learnをより大きい値（即ち、触媒流入空燃比がよりリッチになる方向の値）に更新する。この結果、時刻ｔ２３以降、収束目標値L1よりも小さかった学習値Learnが収束目標値L1に近づき、制御中心空燃比AFcenが理論空燃比AFthに近づく。
【０１３６】
同様に、リッチ空燃比制御中において積算値OSAが最大酸素吸蔵量Cmaxに達する前に、下流側空燃比センサ出力値Voxsのリーンを示す値からリッチを示す値への反転が生じた場合も、制御中心空燃比AFcenが理論空燃比AFthよりもリッチ方向にずれていると判定することができる。そこで、本装置は、リッチ空燃比制御中において積算値OSAが値βに達する前に、下流側空燃比センサ出力値Voxsのリーンを示す値からリッチを示す値への反転が生じた場合、学習値Learnをより小さい値（即ち、触媒流入空燃比がよりリーンになる方向の値）に更新する。この結果、収束目標値L1よりも大きかった学習値Learnが収束目標値L1に近づき、制御中心空燃比AFcenが理論空燃比AFthに近づく。以上が、本装置による「積分項Ksubiの学習処理」、即ち、積分項Ksubiの学習値Learnの更新についての概要である。
【０１３７】
（実際の作動）
次に、本装置による空燃比制御装置の実際の作動について、図９〜図１３に示したフローチャート、及び図１４に示したタイムチャートを参照しながら説明する。図１４では、図６の場合と同様、制御中心空燃比AFcenが理論空燃比AFthよりもリーン方向にずれている場合（図中の「中心ずれ」を参照）が示されている。即ち、学習値Learnが、「上流側空燃比センサ６６の誤差」の大きさに対応する収束目標値よりも小さい値に設定されている場合が示されている。以下、説明の便宜上、「MapX(a1,a2,…)」は、a1,a2,…を引数とする値Xを求めるためのテーブルを表すものとする。また、引数の値がセンサの検出値である場合、現在値が使用される。
【０１３８】
ＣＰＵ７１は、図９にフローチャートにより示した指令燃料噴射量Fiの計算、及び燃料噴射の指示を行うルーチンを、各気筒のクランク角が各吸気上死点前の所定クランク角度（例えば、ＢＴＤＣ９０°ＣＡ）となる毎に、繰り返し実行するようになっている。
【０１３９】
従って、任意の気筒のクランク角度が前記所定クランク角度になると、ＣＰＵ７１はステップ９００から処理を開始してステップ９０５に進んで、テーブルMapMc(NE,Ga)に基づいて、今回の吸気行程を迎える気筒（以下、「燃料噴射気筒」と云うこともある。）に吸入された新気の量である今回の筒内吸入空気量Mc(k)を推定する。
【０１４０】
次に、ＣＰＵ７１はステップ９１０に進んで、学習処理中であるか否かを判定する。学習処理は、例えば、内燃機関１０が所定の定常運転状態にあり、前回の学習処理の終了から所定時間以上が経過し、且つ、下流側空燃比センサ出力値Voxsがリッチを示す値になっている場合に開始・実行される。また、実行中の学習処理は、例えば、学習値Learnの最新の更新時点から所定時間以上が経過した場合に終了する。
【０１４１】
いま、学習処理中でないものとすると、ＣＰＵ７１はステップ９１０にて「Ｎｏ」と判定してステップ９１５に進み、目標空燃比abyfr（＝理論空燃比AFth）と、後述するルーチンにて（前回の燃料噴射時点にて）求められているサブＦＢ補正量FBsubの最新値と、上記(1)式とに基づいて制御用目標空燃比abyfrs(k)を求め、続くステップ９２０にて、上記筒内吸入空気量Mc(k)を制御用目標空燃比abyfrs(k)で除することにより、基本燃料噴射量Fbaseを決定する。
【０１４２】
次いで、ＣＰＵ７１はステップ９２５に進んで、上記(2)式に従って、上記基本燃料噴射量Fbaseに、後述するルーチンにて（前回の燃料噴射時点にて）求められているメインＦＢ補正量FBmainの最新値を加えることで、今回の指令燃料噴射量Fiを決定する。
【０１４３】
続いて、ＣＰＵ７１はステップ９３０に進んで、指令燃料噴射量Fiの燃料の噴射指示を行った後、ステップ９９５に進んで本ルーチンを一旦終了する。以上により、メインＦＢ制御、及びサブＦＢ制御が行われる。学習処理中である場合については後述する。
【０１４４】
次に、上述したメインＦＢ制御においてメインＦＢ補正量FBmainを算出する際の作動について説明すると、ＣＰＵ７１は図１０にフローチャートにより示したルーチンを、燃料噴射気筒について燃料噴射開始時期（噴射指示開始時点）が到来する毎に、繰り返し実行するようになっている。
【０１４５】
従って、燃料噴射気筒について燃料噴射開始時期が到来すると、ＣＰＵ７１はステップ１０００から処理を開始し、ステップ１００５に進んで、メインフィードバック条件が成立しているか否かを判定する。メインフィードバック条件は、例えば、機関の冷却水温THWが第１所定値以上であって、上流側空燃比センサ６６が正常（活性状態となっていることを含む）であって、筒内吸入空気量Mcが所定値以下であるときに成立する。
【０１４６】
いま、メインフィードバック条件が成立しているものとして説明を続けると、ＣＰＵ７１はステップ１００５にて「Ｙｅｓ」と判定してステップ１０１０に進み、テーブルMapabyfs(Vabyfs)（図２の実線を参照）に基づいて、今回の検出空燃比abyfs(k)を求める。
【０１４７】
次に、ＣＰＵ７１はステップ１０１５に進んで、テーブルMapＮ(Mc(k),NE)に基づいて、ストローク数Ｎを決定する。次いで、ＣＰＵ７１はステップ１０２０に進み、現時点からＮストローク（Ｎ回の吸気行程）前の制御用目標空燃比であるabyfrs(k−N)を時定数τをもってローパスフィルタ処理してローパスフィルタ通過後制御用目標空燃比abyfrslowを求める。
【０１４８】
続いて、ＣＰＵ７１はステップ１０２５に進み、上記(5)式に従って、検出空燃比abyfs(k)からローパスフィルタ通過後制御用目標空燃比abyfrslowを減ずることにより、上流側空燃比偏差DAFを求める。
【０１４９】
次いで、ＣＰＵ７１はステップ１０３０に進み、その時点における上流側空燃比偏差DAFの積分値SDAFにステップ１０２５にて求めた上流側空燃比偏差DAFを加えて、積分値SDAFを更新する。そして、ＣＰＵ７１はステップ１０３５に進んで、上記(6)式に従って、メインＦＢ補正量FBmainを求めた後、ステップ１０９５に進んで本ルーチンを一旦終了する。
【０１５０】
以上により、メインＦＢ補正量FBmainが求められ、このメインＦＢ補正量FBmainが前述した図９のステップ９２５により指令燃料噴射量Fiに反映されることで上述したメインＦＢ制御が実行される。
【０１５１】
一方、ステップ１００５の判定時において、メインフィードバック条件が不成立であると、ＣＰＵ７１は同ステップ１００５にて「Ｎｏ」と判定してステップ１０４０に進んでメインＦＢ補正量FBmainの値を「０」に設定し、その後ステップ１０９５に進んで本ルーチンを一旦終了する。このように、メインフィードバック条件が不成立であるときは、メインＦＢ補正量FBmainを「０」としてメインＦＢ制御に基づく空燃比フィードバック制御を行わない。
【０１５２】
次に、上述したサブＦＢ制御においてサブＦＢ補正量FBsubを算出する際の作動について説明すると、ＣＰＵ７１は図１１にフローチャートにより示したルーチンを、燃料噴射気筒について燃料噴射開始時期（噴射指示開始時点）が到来する毎に、繰り返し実行するようになっている。
【０１５３】
従って、燃料噴射気筒について燃料噴射開始時期が到来すると、ＣＰＵ７１はステップ１１００から処理を開始し、まず、ステップ１１０５にて、サブフィードバック条件が成立しているか否かを判定する。サブフィードバック条件は、例えば、前述したステップ１００５でのメインフィードバック条件に加え、機関の冷却水温THWが前記第１所定値よりも高い第２所定値以上のときに成立する。
【０１５４】
いま、サブフィードバック条件が成立しているものとして説明を続けると、ＣＰＵ７１はステップ１１０５にて「Ｙｅｓ」と判定してステップ１１１０に進み、上記(3)式に従って、下流側目標値Voxsrefから現時点の下流側空燃比センサ出力値Voxsを減じることにより、出力偏差量DVoxsを求め、続くステップ１１１５にて、上記出力偏差量DVoxsに比例ゲインKpを乗じることで比例項Ksubpを求める。
【０１５５】
次に、ＣＰＵ７１はステップ１１２０に進んで、下記(8)式に基づき出力偏差量DVoxsの微分値DDVoxsを求める。(8)式において、DVoxs1は前回の本ルーチン実行時において後述するステップ１１３０にて更新された出力偏差量DVoxsの前回値である。また、Δtは本ルーチンが前回実行された時点から今回実行された時点までの時間である。
【０１５６】
DDVoxs＝(DVoxs−DVoxs1)／Δt  ・・・(8)
【０１５７】
次いで、ＣＰＵ７１はステップ１１２５に進み、上記出力偏差量の微分値DDVoxsに微分ゲインKdを乗じることで微分項Ksubdを求め、続くステップ１１３０にて出力偏差量DVoxsの前回値DVoxs1を上記ステップ１１１０にて求めた出力偏差量DVoxsと等しい値に設定する。
【０１５８】
次に、ＣＰＵ７１はステップ１１３５に進んで、その時点における偏差積分値SDVoxsにステップ１１１０にて求めた出力偏差量DVoxsを加えて偏差積分値SDVoxsを更新し、続くステップ１１４０にて、上記偏差積分値SDVoxsに積分ゲインKiを乗じることで積分項Ksubiを求め、続くステップ１１４５にて、上記積分項Ksubiと、後述するルーチンにて設定・更新されている積分項Ksubiの学習値Learnを加えて総和値SUMを求める。
【０１５９】
そして、ＣＰＵ７１はステップ１１５０に進んで、ステップ１１１５にて求めた比例項Ksubpと、ステップ１１２５にて求めた微分項Ksubdと、ステップ１１４５にて求めた総和値SUMと、上記(4)式とに基づいてサブＦＢ補正量FBsubを求め、ステップ１１９５に進んで本ルーチンを一旦終了する。
【０１６０】
以上により、サブＦＢ補正量FBsubが求められる。このサブＦＢ補正量FBsubが、前述した図９のステップ９１５により制御用目標空燃比abyfrs(k)に反映され、この制御用目標空燃比abyfrs(k)に基づいて図１０のルーチンが実行される（即ち、メインＦＢ制御が実行される）ことで、上述したサブＦＢ制御が実行される。
【０１６１】
一方、ステップ１１０５の判定時において、サブフィードバック条件が不成立であると、ＣＰＵ７１は同ステップ１１０５にて「Ｎｏ」と判定してステップ１１５５に進んでサブＦＢ補正量FBsubの値を「０」に設定し、その後、ステップ１１９５に進んで本ルーチンを一旦終了する。このように、サブフィードバック条件が不成立であるときは、サブＦＢ補正量FBsubを「０」としてサブＦＢ制御に基づく空燃比フィードバック制御を行わない。
【０１６２】
次に、積分項Ksubiの学習値Learnを更新する際の作動について説明すると、ＣＰＵ７１は図１２、及び図１３にフローチャートにより示した一連のルーチンを、燃料噴射気筒について燃料噴射開始時期（噴射指示開始時点）が到来する毎に、繰り返し実行するようになっている。
【０１６３】
従って、燃料噴射気筒について燃料噴射開始時期が到来すると、ＣＰＵ７１はステップ１２００から処理を開始し、まず、ステップ１２０２にて、学習処理中であるか否かを判定し、「Ｎｏ」と判定する場合、ステップ１２０４に進んで、学習処理の終了直後であるか否かを判定し、「Ｎｏ」と判定する場合、ステップ１２９５に直ちに進んで本ルーチンを一旦終了する。
【０１６４】
いま、例えば、図１４の時刻ｔ３１にて、学習処理が開始されたものとすると、ＣＰＵ７１はステップ１２０２に進んだとき「Ｙｅｓ」と判定してステップ１２０６に進み、学習処理開始直後であるか否かを判定する。現時点（時刻ｔ３１）は学習処理開始直後であるから、ＣＰＵ７１はステップ１２０６にて「Ｙｅｓ」と判定してステップ１２０８に進んで、値Modeを「１」に設定する。ここで、Mode＝１は、アクティブ空燃比制御中におけるリーン空燃比制御中であることを示し、Mode＝２は、アクティブ空燃比制御中におけるリッチ空燃比制御中であることを示す。
【０１６５】
続いて、ＣＰＵ７１はステップ１２１０に進んで、値αを最大酸素吸蔵量Cmaxに定数γ（＞０）を加えた値に設定し、値βを最大酸素吸蔵量Cmaxから定数γ（＞０）を減じた値に設定する。最大酸素吸蔵量Cmaxは、公知の手法の１つに従って、所定のタイミング毎に取得・更新され得る。
【０１６６】
次いで、ＣＰＵ７１はステップ１２１２に進み、反転回数Ｍの値を「０」に初期化する。反転回数Ｍの値は、学習処理開始からの下流側空燃比センサ出力値Voxsの反転回数を表す。
【０１６７】
次に、ＣＰＵ７１はステップ１２１６に進み、反転回数Ｍ＝０であるか否かを判定し、現時点では「Ｙｅｓ」と判定して図１３のステップ１２１８に進み、下流側空燃比センサ出力値Voxsが反転したか否かを判定する。時刻ｔ３１の直後では、下流側空燃比センサ出力値Voxsの反転が生じていない。従って、ＣＰＵ７１はステップ１２１８にて「Ｎｏ」と判定してステップ１２９５に進んで本ルーチンを一旦終了する。以降、下流側空燃比センサ出力値Voxsの反転が生じるまでの間、ＣＰＵ７１は、ステップ１２０２、１２０６、１２１６、１２１８、１２９５の処理を繰り返し実行する。
【０１６８】
一方、時刻ｔ３１以降、学習処理が開始され、且つ、Mode＝１となっている。従って、時刻ｔ３１以降、図９のルーチンを繰り返し実行しているＣＰＵ７１はステップ９１０に進んだとき「Ｙｅｓ」と判定してステップ９３５に進み、Mode＝１であるか否かを判定し、現時点では「Ｙｅｓ」と判定してステップ９４０に進む。
【０１６９】
ＣＰＵ７１はステップ９４０に進むと、制御用目標空燃比abyfrs(k)を値(abyfr・(1−Learn)＋ΔAF)に設定する。この結果、この制御用目標空燃比abyfrs(k)に基づいて図１０のルーチンが実行されることで、上述したアクティブ空燃比制御におけるリーン空燃比制御（触媒上流空燃比が値(AFcen＋ΔAF)に調整される制御）が開始・実行される。このリーン空燃比制御は、下流側空燃比センサ出力値Voxsのリッチを示す値からリーンを示す値への反転が生じるまで継続される（時刻ｔ３１〜ｔ３２を参照）。この間、酸素吸蔵量実際値OSAactは増大していく。
【０１７０】
次に、この状態にて、酸素吸蔵量実際値OSAactが最大酸素吸蔵量Cmaxに達して下流側空燃比センサ出力値Voxsのリッチを示す値からリーンを示す値への反転が生じた場合について説明する（時刻ｔ３２を参照）。この場合、図１２、及び図１３の一連のルーチンを繰り返し実行しているＣＰＵ７１は、ステップ１２１８に進んだとき「Ｙｅｓ」と判定してステップ１２２０に進み、反転回数Ｍ＝０であるか否かを判定し、現時点では「Ｙｅｓ」と判定してステップ１２２２に進み、Mode＝１であるか否かを判定する。
【０１７１】
現時点では、Mode＝１であるから、ＣＰＵ７１はステップ１２２２にて「Ｙｅｓ」と判定してステップ１２２４に進み、Mode＝２に変更する。続いて、ＣＰＵ７１はステップ１２２６に進んで、反転回数Ｍの値を「１」だけインクリメントし、続くステップ１２２８にてフラグＣＯＮの値を「０」に設定し、続くステップ１２３０にて積算値OSAの値を「０」に初期化する。フラグＣＯＮについては後述する。
【０１７２】
このように、時刻ｔ３２以降、Mode＝２となっている。従って、時刻ｔ３２以降、図９のルーチンを繰り返し実行しているＣＰＵ７１はステップ９３５に進んだとき「Ｎｏ」と判定してステップ９４５に進み、制御用目標空燃比abyfrs(k)を値(abyfr・(1−Learn)−ΔAF)に設定する。この結果、この制御用目標空燃比abyfrs(k)に基づいて図１０のルーチンが実行されることで、上述したアクティブ空燃比制御におけるリッチ空燃比制御（触媒上流空燃比が値(AFcen−ΔAF)に調整される制御）が開始・実行される。このリッチ空燃比制御は、下流側空燃比センサ出力値Voxsのリーンを示す値からリッチを示す値への反転が生じるまで継続される（時刻ｔ３２〜ｔ３４を参照）。この間、酸素吸蔵量実際値OSAactは最大酸素吸蔵量Cmaxから減少していく。
【０１７３】
一方、時刻ｔ３２以降、反転回数Ｍ≠０となっている。従って、図１２、及び図１３の一連のルーチンを繰り返し実行しているＣＰＵ７１は、時刻ｔ３２以降、ステップ１２１６に進んだとき「Ｎｏ」と判定するようになり、ステップ１２３２に進んで、ステップ１２３２内に記載の式に従って、一燃料噴射当たりの酸素吸蔵量の変化量に相当する値DOSAを算出し、続くステップ１２３４にて、その時点での積算値OSAに上記値DOSAを加えて積算値OSAを積算・更新する。このステップ１２３２、１２３４による積算値OSAの計算は、上記(7)式を利用して積算値OSAを計算することに対応している。
【０１７４】
続いて、ＣＰＵ７１はステップ１２３６に進み、積算値OSAが値αよりも大きく、且つ、フラグＣＯＮ＝０であるか否かを判定する。時刻ｔ３２の直後では、フラグＣＯＮ＝０である一方で、積算値OSAは値αよりも小さい。従って、ＣＰＵ７１はステップ１２３６にて「Ｎｏ」と判定してステップ１２１８に進む。
【０１７５】
即ち、ＣＰＵ７１は、時刻ｔ３２以降（即ち、反転回数Ｍ≠０となった時点以降）、ステップ１２３４の繰り返し実行により「０」から増大していく積算値OSAが値αを超えたか否か（ステップ１２３６）、或いは、下流側空燃比センサ出力値Voxsが反転したか否か（ステップ１２１８）をモニタする。
【０１７６】
次に、この状態にて、下流側空燃比センサ出力値Voxsが反転する前に積算値OSAが値αを超えた場合について説明する（時刻ｔ３３を参照）。この場合、ＣＰＵ７１はステップ１２３６に進んだとき「Ｙｅｓ」と判定してステップ１２３８に進み、フラグＣＯＮ＝１に設定する。
【０１７７】
続いて、ＣＰＵ７１はステップ１２４０に進んで、図１５にグラフにより示したテーブルMapＤ(Ｍ)に基づいて、学習値Learnの更新量である更新量Ｄ（＞０）を決定する。これにより、反転回数Ｍが増大するほど、学習値Learnの更新量Ｄがより小さい値に決定される。
【０１７８】
次いで、ＣＰＵ７１はステップ１２４２に進み、Mode＝１であるか否かを判定し、「Ｙｅｓ」と判定する場合、ステップ１２４４に進んで学習値Learnの更新値Dlearnを値−Ｄに設定し、「Ｎｏ」と判定する場合、ステップ１２４６に進んで更新値Dlearnを値Ｄに設定する。これにより、リーン空燃比制御中において積算値OSAが値αを超えた場合、Dlearn＝−Ｄとなり、リッチ空燃比制御中において積算値OSAが値αを超えた場合、Dlearn＝Ｄとなる。時刻ｔ３３では、Mode＝２（リッチ空燃比制御中）であるから、更新値DLearn＝Ｄとなる。
【０１７９】
そして、ＣＰＵ７１はステップ１２４８に進み、その時点での学習値Learnに上記更新値DLearnを加えて学習値Learnを更新する。これにより、時刻ｔ３３では、学習値Learnが更新量Ｄだけステップ的に増大する。この結果、制御中心空燃比AFcenがリッチ方向にずれて理論空燃比AFthに近づく。これに伴い、リッチ空燃比制御中の触媒上流空燃比（＝AFcen−ΔAF）もリッチ方向にずれる。なお、図１４に示した例では、時刻ｔ３３以降もなお、学習値Learnが収束目標値に十分に近づいておらず、制御中心空燃比AFcenが理論空燃比AFthよりもリーン方向に比較的大きくずれている。
【０１８０】
以降、積算値OSAは値αを超えている一方で、フラグＣＯＮ＝１となっている。従って、ＣＰＵ７１はステップ１２３６に進んだとき「Ｎｏ」と判定するようになる。これにより、リーン空燃比制御中、或いはリッチ空燃比制御中において、ステップ１２４８の処理により学習値Learnが更新された後にステップ１２４８にて学習値Learnが連続して繰り返し更新されていく事態の発生が防止される。
【０１８１】
従って、時刻ｔ３３以降、ＣＰＵ７１はステップ１２１６にて「Ｎｏ」と判定してステップ１２１８に進み、下流側空燃比センサ出力値Voxsがリーンを示す値からリッチを示す値に反転したか否かをモニタする。
【０１８２】
次に、この状態にて、酸素吸蔵量実際値OSAactが「０」に達して下流側空燃比センサ出力値Voxsのリーンを示す値からリッチを示す値への反転が生じた場合について説明する（時刻ｔ３４を参照）。この場合、図１２、及び図１３の一連のルーチンを繰り返し実行しているＣＰＵ７１は、ステップ１２１８に進んだとき「Ｙｅｓ」と判定してステップ１２２０に進み、現時点では「Ｎｏ」と判定してステップ１２５２に進み、積算値OSAが値βよりも小さいか否かを判定する。
【０１８３】
現時点では、積算値OSAは値αよりも大きい。従って、ＣＰＵ７１はステップ１２５２にて「Ｎｏ」と判定してステップ１２２２に進み、現時点では「Ｎｏ」と判定してステップ１２５４に進んでMode＝１に変更する。そして、ＣＰＵ７１は、ステップ１２２６、１２２８、１２３０の処理を順に実行する。
【０１８４】
このように、時刻ｔ３４以降、Mode＝１となっている。従って、時刻ｔ３４以降、図９のルーチンを繰り返し実行しているＣＰＵ７１はステップ９３５に進んだとき「Ｙｅｓ」と判定するようなり、この結果、リーン空燃比制御（触媒上流空燃比が値(AFcen＋ΔAF)に調整される制御）が再び開始・実行される。このリーン空燃比制御の間（時刻ｔ３４〜ｔ３５を参照）、酸素吸蔵量実際値OSAactは「０」から増大していく。
【０１８５】
また、時刻ｔ３４以降、反転回数Ｍ≠０となっている。従って、図１２、及び図１３の一連のルーチンを繰り返し実行しているＣＰＵ７１は、時刻ｔ３４以降、上述したように、ステップ１２３４の繰り返し実行により「０」から増大していく積算値OSAが値αを超えたか否か（ステップ１２３６）、或いは、下流側空燃比センサ出力値Voxsが反転したか否か（ステップ１２１８）をモニタする。
【０１８６】
次に、この状態にて、積算値OSAが値βに達する前に下流側空燃比センサ出力値Voxsがリッチを示す値からリーンを示す値に反転した場合について説明する（時刻ｔ３５を参照）。この場合、ＣＰＵ７１はステップ１２１８に進んだとき「Ｙｅｓ」と判定してステップ１２２０に進み、「Ｎｏ」と判定してステップ１２５２に進み、現時点では「Ｙｅｓ」と判定してステップ１２５６に進む。
【０１８７】
ＣＰＵ５１はステップ１２５６に進むと、先のステップ１２４０と同じ処理を行って更新量Ｄを決定する。なお、現時点での更新量Ｄは、時刻ｔ３３にて決定された更新量Ｄよりも小さい（図１５を参照）。
【０１８８】
続いて、ＣＰＵ７１はステップ１２５８に進み、下流側空燃比センサ出力値Voxsがリッチを示す値からリーンを示す値に反転したか否かを判定し、「Ｙｅｓ」と判定する場合、ステップ１２６０に進んで学習値Learnの更新値Dlearnを値Ｄに設定し、「Ｎｏ」と判定する場合、ステップ１２６２に進んで更新値Dlearnを値−Ｄに設定する。これにより、リーン空燃比制御中において積算値OSAが値βに達する前に下流側空燃比センサ出力値Voxsがリッチを示す値からリーンを示す値に反転した場合、Dlearn＝Ｄとなり、リッチ空燃比制御中において積算値OSAが値βに達する前に下流側空燃比センサ出力値Voxsがリーンを示す値からリッチを示す値に反転した場合、Dlearn＝−Ｄとなる。時刻ｔ３５では、更新値DLearn＝Ｄとなる。
【０１８９】
次いで、ＣＰＵ７１はステップ１２６４に進み、先のステップ１２４８と同様、その時点での学習値Learnに上記更新値DLearnを加えて学習値Learnを更新する。これにより、時刻ｔ３５では、学習値Learnが更新量Ｄだけステップ的に増大する。この結果、制御中心空燃比AFcenが再びリッチ方向にずれて理論空燃比AFthに近づく。これに伴い、次に開始されるリッチ空燃比制御中における触媒上流空燃比（＝AFcen−ΔAF）もリッチ方向にずれる。なお、図１４に示した例では、時刻ｔ３５以降もなお、学習値Learnが収束目標値に十分に近づいておらず、制御中心空燃比AFcenが理論空燃比AFthよりもリーン方向に比較的大きくずれている。
【０１９０】
そして、ＣＰＵ７１はステップ１２２２に進んで「Ｙｅｓ」と判定してステップ１２２４に進んでMode＝２に変更し、ステップ１２２６、１２２８、１２３０の処理を順に実行する。
【０１９１】
このように、時刻ｔ３５以降、Mode＝２となっている。従って、時刻ｔ３５以降、リッチ空燃比制御（触媒上流空燃比が値(AFcen−ΔAF)に調整される制御）が再び開始・実行される。このリッチ空燃比制御の間（時刻ｔ３５〜ｔ３７を参照）、酸素吸蔵量実際値OSAactは最大酸素吸蔵量Cmaxから減少していく。
【０１９２】
また、時刻ｔ３５以降、反転回数Ｍ≠０となっている。従って、図１２、及び図１３の一連のルーチンを繰り返し実行しているＣＰＵ７１は、時刻ｔ３５以降、積算値OSAが値αを超えたか否か（ステップ１２３６）、或いは、下流側空燃比センサ出力値Voxsが反転したか否か（ステップ１２１８）をモニタする。
【０１９３】
そして、この状態にて、時刻ｔ３６に示すように、下流側空燃比センサ出力値Voxsが反転する前に積算値OSAが値αを超えた場合、時刻ｔ３３と同様、更新量Ｄが新たに決定され、学習値Learnが新たに決定された更新量Ｄだけステップ的に増大する。この結果、制御中心空燃比AFcenがリッチ方向にずれて理論空燃比AFthに近づく。これに伴い、リッチ空燃比制御中の触媒上流空燃比（＝AFcen−ΔAF）もリッチ方向にずれる。
【０１９４】
図１４に示した例では、時刻ｔ３６以降、学習値Learnが収束目標値に十分に近づき、この結果、制御中心空燃比AFcenが理論空燃比AFthに十分に近づいている。従って、時刻ｔ３６以降、ステップ１２３６、又はステップ１２５２にて「Ｙｅｓ」と判定されず、この結果、学習値Learnは更新されない。即ち、学習値Learnは、時刻ｔ３６にて更新された値に維持される。
【０１９５】
そして、学習処理中において学習値Learnの最新の更新時点から所定時間以上が経過する等により、学習処理が終了すると、図１２、及び図１３の一連のルーチンを繰り返し実行しているＣＰＵ７１は、ステップ１２０２に進んだとき「Ｎｏ」と判定してステップ１２０４に進む。
【０１９６】
現時点は、学習処理終了直後であるから、ＣＰＵ７１はステップ１２０４に進むと、「Ｙｅｓ」と判定してステップ１２７０に進み、偏差積分値SDVoxsを「０」にリセットする。このように、学習処理が終了する毎に、偏差積分値SDVoxsが「０」にリセットされる。加えて、学習処理が終了すると、図９のルーチンを繰り返し実行しているＣＰＵ７１は、ステップ９１０にて「Ｎｏ」と判定してステップ９１５の処理を再び実行するようになる。これにより、アクティブ空燃比制御が終了する。
【０１９７】
なお、ステップ１２１６及びステップ１２２０が設けられているため、反転回数Ｍ＝０の段階（図１４では、時刻ｔ３１〜ｔ３２）では学習値Learnの更新が行われない。これは、学習処理開始時点（即ち、リーン空燃比制御開始時点、図１４では、時刻ｔ３１）での酸素吸蔵量実際値OSAactが「０」であることが保証され得ないから、ステップ１２３６又はステップ１２５２における積算値OSAと値α，βとの比較結果に基づいて学習値Learnの更新を行うか否かを判定すべきでないことに基づく。
【０１９８】
以上、説明したように、本発明による内燃機関の空燃比制御装置の実施形態によれば、下流側空燃比センサ６７の出力値Voxsに基づくサブＦＢ制御における積分項Ksubiの学習値Learnの更新をすべきか否かを判定するために、下流側空燃比センサ出力値Voxsがリッチを示す値からリーンを示す値に反転したときに制御用目標空燃比abyfrsを値（abyfr・(1−Learn)−ΔAF）に設定し（リッチ空燃比制御）、下流側空燃比センサ出力値Voxsがリーンを示す値からリッチを示す値に反転したときに制御用目標空燃比abyfrsを値（abyfr・(1−Learn)＋ΔAF）に設定する（リーン空燃比制御）制御、即ち、「アクティブ空燃比制御」が行われる。
【０１９９】
アクティブ空燃比制御中において、リッチ（リーン）空燃比制御中において積算値OSAが値α（＝Cmax＋γ）に達してもなお、下流側空燃比センサ出力値Voxsのリーン（リッチ）を示す値からリッチ（リーン）を示す値への反転が生じない場合、制御中心空燃比AFcenが理論空燃比AFthよりもリーン（リッチ）方向にずれていると判定できるから、学習値Learnがより大きい（小さい）値（即ち、触媒流入空燃比がよりリッチ（リーン）になる方向の値）に更新される。この結果、「上流側空燃比センサ６６の誤差」の大きさに対応する学習値Learnの収束目標値よりも小さかった（大きかった）学習値Learnが収束目標値L1に近づき、制御中心空燃比AFcenが理論空燃比AFthに近づく。
【０２００】
同様に、アクティブ空燃比制御中において、リーン（リッチ）空燃比制御中において積算値OSAが値β（＝Cmax−γ）に達する前に下流側空燃比センサ出力値Voxsのリッチ（リーン）を示す値からリーン（リッチ）を示す値への反転が生じた場合、制御中心空燃比AFcenが理論空燃比AFthよりもリーン（リッチ）方向にずれていると判定できるから、学習値Learnがより大きい（小さい）値（即ち、触媒流入空燃比がよりリッチ（リーン）になる方向の値）に更新される。この結果、学習値Learnの収束目標値よりも小さかった（大きかった）学習値Learnが収束目標値L1に近づき、制御中心空燃比AFcenが理論空燃比AFthに近づく。
【０２０１】
これにより、学習値Learnが「上流側空燃比センサ６６の誤差」の大きさに対応する収束目標値から大きくずれている場合であっても、学習値Learnを早期に収束目標値に近づけて制御中心空燃比AFcenを目標空燃比（＝理論空燃比AFth）に近づけることができる。
【０２０２】
加えて、学習処理中における下流側空燃比センサ出力値Voxsの反転回数Ｍが増大するほど、学習値Learnの更新量Ｄがより小さい値に設定される（図１５を参照）。これにより、制御中心空燃比AFcenが理論空燃比AFthよりも大きくずれている場合において、下流側空燃比センサ出力値Voxsの反転回数Ｍが小さい早い段階から制御中心空燃比AFcenを理論空燃比AFthに十分に近づけることができ、且つ、その後は、制御中心空燃比AFcenを理論空燃比AFthに向けて少しずつ徐々に近づけていくことができる。
【０２０３】
本発明は上記実施形態に限定されることはなく、本発明の範囲内において種々の変形例を採用することができる。例えば、上記実施形態においては、前記「第１所定期間」として、下流側空燃比センサ出力値Voxsの反転時から積算されていく酸素吸蔵量の変化量の積算値OSAが値αに達するまでの期間が使用されているが、下流側空燃比センサ出力値Voxsの反転時から第１所定時間が経過するまでの期間、下流側空燃比センサ出力値Voxsの反転時からの燃料噴射回数が第１所定回数に達するまでの期間、下流側空燃比センサ出力値Voxsの反転時からの吸入空気流量（エアフローメータ６１により計測される流量）の積算値が第１所定値に達するまでの期間が使用されてもよい。
【０２０４】
また、上記実施形態においては、前記「第２所定期間」として、下流側空燃比センサ出力値Voxsの反転時から積算されていく酸素吸蔵量の変化量の積算値OSAが値βに達するまでの期間が使用されているが、下流側空燃比センサ出力値Voxsの反転時から第２所定時間（＜第１所定時間）が経過するまでの期間、下流側空燃比センサ出力値Voxsの反転時からの燃料噴射回数が第２所定回数（＜第１所定回数）に達するまでの期間、下流側空燃比センサ出力値Voxsの反転時からの吸入空気流量（エアフローメータ６１により計測される流量）の積算値が第２所定値（＜第１所定値）に達するまでの期間が使用されてもよい。
【０２０５】
また、上記実施形態においては、積算値OSAと比較される値αを、反転回数Ｍに依存することなく、最大酸素吸蔵量Cmaxに定数γ（＞０、一定値）を加えた値（＝Cmax＋γ）に設定しているが、反転回数Ｍが増大するほど定数γをより小さい値に設定してもよい。同様に、積算値OSAと比較される値βを、反転回数Ｍに依存することなく、最大酸素吸蔵量Cmaxから定数γ（＞０、一定値）を減じた値（＝Cmax−γ）に設定しているが、反転回数Ｍが増大するほど定数γをより小さい値に設定してもよい。
【０２０６】
また、上記実施形態においては、反転回数Ｍが増大するほど、学習値Learnの更新量Ｄがより小さい値に設定されているが、反転回数Ｍに依存することなく、更新量Ｄを一定としてもよい。
【０２０７】
また、上記実施形態においては、アクティブ空燃比制御のリーン（リッチ）空燃比制御中において、制御用目標空燃比abyfrsを値「abyfr・(1−Learn)＋ΔAF」（値「abyfr・(1−Learn)−ΔAF」）に設定しているが、アクティブ空燃比制御のリーン（リッチ）空燃比制御中において、制御用目標空燃比abyfrsを値「abyfr・(1−FBsub)＋ΔAF」（値「abyfr・(1−FBsub)−ΔAF」）に設定してもよい。或いは、制御用目標空燃比abyfrsを値「abyfr・(1−SUM)＋ΔAF」（値「abyfr・(1−SUM)−ΔAF」）に設定してもよい。
【０２０８】
また、上記実施形態においては、学習処理終了毎に、偏差積分値SDVoxsが「０」にリセットされているが、学習処理終了毎に、学習処理中における学習値Learnの更新量Ｄの総和の分を偏差積分値SDVoxsから差し引いてもよい。
【０２０９】
また、上記実施形態においては、基本燃料噴射量Fbaseを、筒内吸入空気量Mcを制御用目標空燃比abyfrsで除した値に設定しているが、基本燃料噴射量Fbaseを、筒内吸入空気量Mcを目標空燃比abyfrで除した値に設定してもよい。
【０２１０】
加えて、上記実施形態においては、サブＦＢ補正量FBsubに基づいて目標空燃比abyfr（＝理論空燃比AFth）を補正して制御用目標空燃比abyfrsを設定し、検出空燃比abyfsが制御用目標空燃比abyfrsに一致するようにメインＦＢ制御が実行されているが、サブＦＢ補正量FBsubに基づいて検出空燃比abyfs（或いは、上流側空燃比センサの出力値Vabyfs）を補正し、補正された検出空燃比abyfs（或いは、上流側空燃比センサの出力値Vabyfs）が目標空燃比abyfr（＝理論空燃比AFth）と一致するようにメインＦＢ制御が実行されてもよい。
【０２１１】
この場合においてアクティブ空燃比制御が行われる場合、目標空燃比abyfrは、リーン空燃比制御中は値（AFth＋ΔAF）に設定され、リッチ空燃比制御中は値（AFth−ΔAF）に設定される。
【図面の簡単な説明】
【０２１２】
【図１】本発明の実施形態に係る空燃比制御装置を適用した内燃機関の概略図である。
【図２】図１に示した上流側空燃比センサの出力電圧と空燃比との関係を示したグラフである。
【図３】図１に示した下流側空燃比センサの出力電圧と空燃比との関係を示したグラフである。
【図４】図１に示した空燃比制御装置が空燃比フィードバック制御を実行する際の機能ブロック図である。
【図５】図４に示したサブＦＢ補正量算出手段がサブＦＢ補正量を算出する際の機能ブロック図である。
【図６】制御中心空燃比が理論空燃比からずれている場合においてアクティブ空燃比制御が実行された場合の一例を示したタイムチャートである。
【図７】アクティブ空燃比制御中において、下流側空燃比センサ出力値の反転時から所定期間が経過しても同出力値の次の反転が生じない場合に偏差積分値の学習値が更新される場合の一例を示した、図６に対応するタイムチャートである。
【図８】アクティブ空燃比制御中において、下流側空燃比センサ出力値の反転時から所定期間が経過する前に同出力値の次の反転が生じた場合に偏差積分値の学習値が更新される場合の一例を示した、図６に対応するタイムチャートである。
【図９】図１に示したＣＰＵが実行する指令燃料噴射量の計算、及び噴射指示を行うためのルーチンを示したフローチャートである。
【図１０】図１に示したＣＰＵが実行するメインＦＢ補正量を計算するためのルーチンを示したフローチャートである。
【図１１】図１に示したＣＰＵが実行するサブＦＢ補正量を計算するためのルーチンを示したフローチャートである。
【図１２】図１に示したＣＰＵが実行する学習値の更新を行うためのルーチンの前半部を示したフローチャートである。
【図１３】図１に示したＣＰＵが実行する学習値の更新を行うためのルーチンの後半部を示したフローチャートである。
【図１４】図１に示した空燃比制御装置により偏差積分値の学習値が更新されていく場合の一例を示したタイムチャートである。
【図１５】図１に示したＣＰＵが参照する、下流側空燃比センサ出力値の反転回数と、学習値の更新量との関係を規定するテーブルを示したグラフである。
【符号の説明】
【０２１３】
１０…内燃機関、２５…燃焼室、３９…インジェクタ、５１…エキゾーストマニホールド、５３…三元触媒（第１触媒）、６６…上流側空燃比センサ、６７…下流側空燃比センサ、７０…電気制御装置、７１…ＣＰＵ、７４…バックアップＲＡＭ
【図１】
2008075495.tif 000003
【図２】
2008075495.tif 000004
【図３】
2008075495.tif 000005
【図４】
2008075495.tif 000006
【図５】
2008075495.tif 000007
【図６】
2008075495.tif 000008
【図７】
2008075495.tif 000009
【図８】
2008075495.tif 000010
【図９】
2008075495.tif 000011
【図１０】
2008075495.tif 000012
【図１１】
2008075495.tif 000013
【図１２】
2008075495.tif 000014
【図１３】
2008075495.tif 000015
【図１４】
2008075495.tif 000016
【図１５】
2008075495.tif 000017