(57)【要約】本明細書に開示された燃料噴射量制御装置は、触媒の下流に配置された下流側空燃比センサの出力値Ｖｏｘｓと下流側目標値Ｖｏｘｓｒｅｆとの偏差ＤＶｏｘｓｌｏｗに所定の調整ゲインＫを乗じた値を積算することにより時間積分値ＳＤＶｏｘｓｌｏｗを算出し（ステップ１１４０）、サブＦＢ学習値ＫＳＦＢｇとして記憶する（ステップ１１６５）。この装置は、サブＦＢ学習値の増大速度の大きさとサブＦＢ学習値の減少速度の大きさとの差の絶対値が小さくなるように、サブＦＢ学習値が増大する場合における前記調整ゲインＫとサブＦＢ学習値が減少する場合における前記調整ゲインＫとを互いに相違する値に設定する（ステップ１１２５乃至ステップ１１３５）。この制御装置は、サブＦＢ学習値が、その変動中心に応じた判定基準値に特定値を加えた上限値と、判定基準値から特定値を減じた下限値との間に所定期間以上に渡り存在する場合、サブＦＢ学習値は収束したと判定する。
2012014328.tif 000002
【特許請求の範囲】
【請求項１】
内燃機関に対して燃料を噴射する燃料噴射弁と、
前記機関の排気通路に配設された触媒よりも下流の位置に配設されるとともに同触媒から流出するガスの空燃比に応じた出力値を出力する下流側空燃比センサと、
所定の下流側フィードバック条件が成立している期間において、前記下流側空燃比センサの出力値と所定の下流側目標値との偏差に所定の調整ゲインを乗じた値を積算することにより時間積分値を算出するとともに、前記下流側空燃比センサの出力値を前記下流側目標値に一致させるための補正量であって前記燃料噴射弁から噴射される燃料の量をフィードバック補正するための補正量に含まれる積分項を前記算出された時間積分値に基いて算出し、前記積分項に基いて前記補正量を算出する補正量算出手段と、
前記算出された積分項に相関する値を学習値として取得する学習手段と、
前記下流側フィードバック条件が成立している場合には少なくも前記補正量に基いて最終燃料噴射量を算出するとともに、前記下流側フィードバック条件が成立していない場合には少なくとも前記学習値に基いて最終燃料噴射量を算出し、前記算出された最終燃料噴射量の燃料を前記燃料噴射弁から噴射させる燃料噴射制御手段と、
を備えた内燃機関の燃料噴射量制御装置において、
前記学習手段は、
前記学習値が、前記学習値の過去の値に基いて算出される同学習値の過去の値の変動中心である判定基準値に正の特定値を加えた値である上限値と前記判定基準値から前記特定値を減じた値である下限値との間に所定時間に渡って存在している場合、前記学習値が収束したと判定するように構成され
前記補正量算出手段は、
前記学習値の増大速度の大きさと前記学習値の減少速度の大きさとの差の絶対値が小さくなるように、前記学習値が増大する場合における前記調整ゲインと前記学習値が減少する場合における前記調整ゲインとを互いに相違する値に設定するように構成された、
燃料噴射量制御装置。
【請求項２】
請求項１に記載の内燃機関の燃料噴射量制御装置において、
前記学習手段は、
前記学習値が収束したと判定されていない場合の前記調整ゲインを、前記学習値が収束したと判定された場合の前記調整ゲインよりも大きい値に設定するように構成された燃料噴射量制御装置。
【請求項３】
内燃機関に対して燃料を噴射する燃料噴射弁と、
前記機関の排気通路に配設された触媒よりも下流の位置に配設されるとともに同触媒から流出するガスの空燃比に応じた出力値を出力する下流側空燃比センサと、
所定の下流側フィードバック条件が成立している期間において、前記下流側空燃比センサの出力値と所定の下流側目標値との偏差に所定の調整ゲインを乗じた値を積算することにより時間積分値を算出するとともに、前記下流側空燃比センサの出力値を前記下流側目標値に一致させるための補正量であって前記燃料噴射弁から噴射される燃料の量をフィードバック補正するための補正量に含まれる積分項を前記算出された時間積分値に基いて算出し、前記積分項に基いて前記補正量を算出する補正量算出手段と、
前記算出された積分項に相関する値を学習値として取得する学習手段と、
前記下流側フィードバック条件が成立している場合には少なくも前記補正量に基いて最終燃料噴射量を算出するとともに、前記下流側フィードバック条件が成立していない場合には少なくとも前記学習値に基いて最終燃料噴射量を算出し、前記算出された最終燃料噴射量の燃料を前記燃料噴射弁から噴射させる燃料噴射制御手段と、
を備えた内燃機関の燃料噴射量制御装置において、
前記学習手段は、
前記学習値が、前記学習値の過去の値に基いて算出される同学習値の過去の値の変動中心である判定基準値に正の第１特定値を加えた値である上限値と前記判定基準値から正の第２特定値を減じた値である下限値との間に所定時間に渡って存在している場合、前記学習値が収束したと判定するように構成されるとともに、
前記学習値の増大速度の大きさが前記学習値の減少速度の大きさよりも大きい場合には前記第１特定値を前記第２特定値よりも大きい値に設定し、且つ、前記学習値の減少速度の大きさが前記学習値の増大速度の大きさよりも大きい場合には前記第２特定値を前記第１特定値よりも大きい値に設定してなる燃料噴射量制御装置。
【請求項４】
請求項３に記載の内燃機関の燃料噴射量制御装置において、
前記学習手段は、
前記学習値が収束したと判定されていない場合の前記調整ゲインを、前記学習値が収束したと判定された場合の前記調整ゲインよりも大きい値に設定するように構成された燃料噴射量制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、内燃機関の排気通路に配設された触媒の下流に配設される空燃比センサ（下流側空燃比センサ）の出力値に基づいて燃料噴射量を制御する内燃機関の燃料噴射量制御装置に関する。
【背景技術】
【０００２】
従来の内燃機関の燃料噴射量制御装置の一つ（以下、「従来装置」と称呼する。）は、図１に示したように、機関の排気通路に配設された触媒（三元触媒）４３と、上流側空燃比センサ５６と、下流側空燃比センサ５７と、を備える。上流側空燃比センサ５６及び下流側空燃比センサ５７は、触媒４３よりも上流及び下流にそれぞれ配設されている。上流側空燃比センサ５６の出力値Ｖａｂｙｆｓは、被検出ガスの空燃比（上流側空燃比ａｂｙｆｓ）に対して図２に示したように変化する。下流側空燃比センサ５７の出力値Ｖｏｘｓは、被検出ガスの空燃比（下流側空燃比ａｆｄｏｗｎ）に対して図３に示したように変化する。【０００３】
従来装置は、上流側空燃比センサの出力値により表される空燃比（上流側空燃比ａｂｙｆｓ）を「理論空燃比に設定された目標空燃比」に一致させるための「燃料噴射量の補正量」を算出する。この補正量はメインフィードバック量とも称呼される。更に、従来装置は、「下流側空燃比センサの出力値と理論空燃比に相当する値に設定された下流側目標値との差」に基く値を積分処理する。従来装置は、その積分処理された値（以下、「時間積分値」とも称呼する。）に基づいて「燃料噴射量の補正量」の積分項を算出し、その積分項にを含む「燃料噴射量の補正量」を算出する。この補正量はサブフィードバック量とも称呼される。そして、従来装置は、これらの補正量（メインフィードバック量及びサブフィードバック量）を用いて燃料噴射量を補正することにより、機関に供給される混合気の空燃比を理論空燃比に制御している。なお、機関に供給される混合気の空燃比は、機関の空燃比とも称呼され、触媒４３に流入する排ガスの空燃比と実質的に等しい。【０００４】
エアフローメータの吸入空気量検出誤差、燃料噴射弁の噴射特性の個体差又は経時変化、及び、上流側空燃比センサの空燃比検出誤差等（以下、「吸排気系の誤差」と総称する。）は、機関の空燃比の目標空燃比に対する定常的な誤差を発生させる。従って、吸排気系の誤差は、上記時間積分値に現れる。即ち、上記時間積分値は吸排気系の誤差の大きさを表す値と等しい値に収束する。従って、従来装置は、吸排気系の誤差が発生している場合においても、機関の空燃比を理論空燃比に略一致させることができる。【０００５】
ところが、時間積分値が収束するまでには所定の時間を要する。更に、例えば、下流側空燃比センサが活性化していない場合等の「サブフィードバック条件が不成立である期間」において、上記積分処理は実行されない。そこで、従来装置は、上記時間積分値（又は上記時間積分値に相関する値）を学習値（サブフィードバック量の学習値、サブＦＢ学習値）として「機関の運転停止中においてもデータを保持することができるバックアップＲＡＭ等」に記憶・格納する。更に、従来装置は、サブフィードバック条件が不成立である期間、その学習値を用いて燃料噴射量を制御するとともに、サブフィードバック条件が成立するとその学習値に応じた値を時間積分値の初期値として使用する。【０００６】
ところで、前記学習値（又は時間積分値）は、収束すべき値（即ち、上記吸排気系の誤差の大きさを表す値であり、以下、「収束値」とも称呼する。）から大きく乖離する場合がある。例えば、バッテリ交換等によりバックアップＲＡＭに記憶されていた学習値がクリアされると、学習値は収束値から大きく偏移する場合がある。或いは、機関の失火率が変化した場合、及び、特定気筒の燃料噴射弁の燃料噴射特性が他の気筒の燃料噴射弁の燃料噴射特性から大きく変化した場合、等においても、学習値は収束値から大きく乖離する。【０００７】
そこで、従来装置は、学習値（又は時間積分値）を収束値に迅速に収束させるため、学習値の収束の程度に応じて「時間積分値の変化速度」を変更している。より具体的に述べると、従来装置は、学習値の所定期間における変動量が所定の幅を超えると、学習値は収束していないと判定して時間積分値の一回あたりの更新量を大きくし、学習値の所定期間における変動量が所定の幅を超えないとき学習値は収束したと判定して時間積分値の一回あたりの更新量を小さくする。これにより、学習値が収束していない場合において学習値を迅速に収束値に接近させることができ、且つ、学習値が収束した場合において学習値が外乱により過度に変動することを回避することができる（例えば、特許文献１を参照。）。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００９−１６２１３９号公報
【発明の開示】
【０００９】
ところで、三元触媒４３の浄化効率を最適にすること及び／又は特定の成分（例えば、ＮＯｘ）の排出量を低減すること等を目的として、下流側目標値は、「理論空燃比に相当する値Ｖｓｔ以外の一定値」に設定されたり、「三元触媒４３の状態及び機関の運転状態（例えば、吸入空気量）等」に基いて変更されたりする。
【００１０】
この結果、図４に示したように、下流側目標値Ｖｏｘｓｒｅｆが理論空燃比に相当する値Ｖｓｔよりも高い値に設定されると、「出力値Ｖｏｘｓが下流側目標値Ｖｏｘｓｒｅｆよりも大きい場合（リッチ判定時）における時間積分値ＳＤＶｏｘｓ（学習値）の変化速度（減少速度）の大きさｄＶ１」は「出力値Ｖｏｘｓが下流側目標値Ｖｏｘｓｒｅｆよりも小さい場合（リーン判定時）における時間積分値ＳＤＶｏｘｓ（学習値）の変化速度（増大速度）の大きさｄＶ２」よりも小さくなる。これは、次の理由に依るものと考えられる。
【００１１】
（１）時間積分値ＳＤＶｏｘｓが、一定時間の経過毎に「出力値Ｖｏｘｓと下流側目標値Ｖｏｘｓｒｅｆとの差（出力偏差量ＤＶｏｘｓ）」に比例する値（Ｋ・ＤＶｏｘｓ）を積算することにより求められること。
（２）リッチ判定時の出力偏差量ＤＶｏｘｓの大きさＤＲがリーン判定時の出力偏差量ＤＶｏｘｓの大きさＤＬよりも小さくなるので、リッチ判定時の時間積分値ＳＤＶｏｘｓの一回の更新量の大きさがリーン判定時の時間積分値ＳＤＶｏｘｓの一回の更新量の大きさよりも小さくなること。
なお、大きさＤＲが大きさＤＬよりも小さいので、リッチ判定時間ＴＲはリーン判定時間ＴＬよりも一般に長くなる。
【００１２】
一方、学習値（又は時間積分値）が収束しているか否かの判定に要する時間は、従来装置のように「学習値の所定期間における変動量が所定の幅を超えたか否か」により判定するよりも、「学習値の過去の値（直近の値）に基いて学習値の変動中心（「判定基準値Ｖｋｉｊｕｎ」とも称呼する。）を求め、その判定基準値Ｖｋｉｊｕｎと所定期間における学習値との差が所定の閾値ΔＶ（特定値ΔＶ）以上であるか否か」により判定する方が、短くなる。この理由について、図５を参照しながら説明する。
【００１３】
図５の（Ａ）に示したように、学習値（又は時間積分値）が正弦波状に変化する場合、「学習値の所定期間における変動量が所定の幅を超えたか否か」を判定することにより、学習値が収束しているか否かを判定するためには、その所定時間は最低でも「一周期Ｔ」以上でなければならない。これは、学習値の最大値（極大値）と最小値（極小値）とを取得するためには、一周期Ｔを要するからである。
【００１４】
これに対し、「上記判定基準値Ｖｋｉｊｕｎと最新の学習値との差が所定の閾値ΔＶ以上であるか否か」を判定することにより学習値が収束しているか否かを判定する場合、その判定に要する時間は半周期Ｔ／２程度となる。これは、半周期Ｔ／２の時間が経過する間に、学習値の最大値（極大値）及び最小値（極小値）のうちの何れか一方が現れるからである。
【００１５】
従って、学習値が収束しているか否かの判定は、「判定基準値Ｖｋｉｊｕｎと所定期間における学習値との差が所定の閾値ΔＶ以上となったか否か」を判定することにより行う方が、判定時間を短くする上で有利である。
【００１６】
しかしながら、前述したように、例えば、下流側目標値Ｖｏｘｓｒｅｆが理論空燃比に相当する値Ｖｓｔよりも高い値に設定された場合、「リーン判定時における学習値の増大速度の大きさｄＶ２」は「リッチ判定時における学習値の減少速度の大きさｄＶ１」よりも大きい。このため、学習値が収束している場合であっても、学習値を増大させる外乱が発生したとき、判定基準値Ｖｋｉｊｕｎと最新の学習値との差が所定の閾値ΔＶ以上となる可能性が高い（図５（Ｂ）の時刻ｔ１を参照。）。これに対処するために、閾値ΔＶを大きい値に設定すると、実際には学習値が収束していないために（或いは、学習値が収束値から乖離したために）学習値が大きく減少した場合であっても、学習値は収束しているという誤った判定がなされてしまう。
【００１７】
従って、本発明の目的は、学習値が収束しているか否かを迅速且つ精度良く判定することができ、その結果、学習値の変化速度を適切な値に設定することを可能ならしめることにより、学習値を「迅速に収束させ且つ安定して収束値近傍に維持する」ことができる「内燃機関の燃料噴射量制御装置」を提供することにある。
【００１８】
本発明による一つの態様に係る内燃機関の燃料噴射量制御装置は、前記機関に対して燃料を噴射する燃料噴射弁と、前記機関の排気通路に配設された触媒よりも下流の位置に配設されるとともに同触媒から流出するガスの空燃比に応じた出力値を出力する下流側空燃比センサと、補正量算出手段と、学習手段と、燃料噴射制御手段と、を備える。
【００１９】
前記補正量算出手段は、所定の下流側フィードバック条件が成立している期間において、前記下流側空燃比センサの出力値と所定の下流側目標値との偏差に所定の調整ゲインを乗じた値を積算することにより時間積分値を算出する。更に、前記補正量算出手段は、「前記下流側空燃比センサの出力値を前記下流側目標値に一致させるための補正量であって前記燃料噴射弁から噴射される燃料の量をフィードバック補正するための補正量」に含まれる「積分項」を「前記算出された時間積分値」に基いて算出し、その積分項に基いて前記補正量を算出する。
【００２０】
前記学習手段は、前記算出された積分項に相関する値を学習値として取得する。即ち、前記学習手段は、前記時間積分値を学習値として取得してもよく、前記積分項を学習値として取得してもよい。
【００２１】
前記燃料噴射制御手段は、前記下流側フィードバック条件が成立している場合には少なくも前記補正量に基いて最終燃料噴射量を算出するとともに、前記下流側フィードバック条件が成立していない場合には少なくとも前記学習値に基いて最終燃料噴射量を算出し、前記算出された最終燃料噴射量の燃料を前記燃料噴射弁から噴射させる。
【００２２】
更に、前記学習手段は、前記学習値が、「前記学習値の過去の値に基いて算出される同学習値の過去の値の変動中心である判定基準値」に正の特定値（閾値ΔＶ）を加えた値である上限値と、前記判定基準値から前記特定値を減じた値である下限値、との間に、所定時間に渡って存在している場合、前記学習値が収束したと判定するように構成されている。
【００２３】
前記学習手段は、「前記学習値が、前記判定基準値と前記学習値の最新値との差の大きさが所定の判定期間に渡り所定の閾値（前記特定値）よりも小さい場合、前記学習値が収束したと判定するように構成されている。」と言うこともできる。換言すると、前記学習手段は、前記判定基準値と前記学習値の最新値との差の大きさが前記閾値よりも大きくなった場合、前記学習値は収束していない判定する。
【００２４】
前記補正量算出手段は、前記学習値の増大速度の大きさと前記学習値の減少速度の大きさとの差の絶対値が小さくなるように、「前記学習値が増大する場合（前記時間積分値が増大する場合）における前記調整ゲイン」と「前記学習値が減少する場合（前記時間積分値が減少する場合）における前記調整ゲイン」とを互いに相違する値に設定するように構成されている。
【００２５】
これによれば、「リーン判定時における学習値の変化速度の大きさ」と「リッチ判定時における学習値の変化速度の大きさ」とを近づけることができる。従って、学習値が収束している場合、学習値は「前記上限値と前記下限値との間」に存在するようになる。その結果、学習値が収束していることを精度良く判定することができる。
【００２６】
しかも、上記構成によれば、所定期間における学習値の判定基準値からの偏差の大きさが特定値を超えたか否かを判定することになるので、所定期間における学習値の偏差の大きさが閾値を超えたか否かを判定する場合に比べ、学習値が収束しているか否かを短い時間にて判定することができる。
【００２７】
更に、前記特定値を過度に大きい値に設定する必要がないので、学習値が収束していない場合に学習値が収束していると誤って判定することを回避することができる。
【００２８】
この場合、前記学習手段は、前記学習値が収束したと判定されていない場合の前記調整ゲインを、前記学習値が収束したと判定された場合の前記調整ゲインよりも大きい値に設定するように構成されることが好適である。
【００２９】
これによれば、学習値が収束していない場合、調整ゲインが大きい値に設定されるので、学習値を収束値へとより迅速に近づけることができる。なお、学習値が収束していない場合においても、前記学習値が増大する場合における前記調整ゲインと前記学習値が減少する場合における前記調整ゲインとは互いに相違する値に設定されることが望ましい。
【００３０】
本発明の他の態様に係る内燃機関の燃料噴射量制御装置は、上記燃料噴射弁と、上記下流側空燃比センサと、上記補正量算出手段と同様の補正量算出手段と、上記学習手段と同様な学習手段と、上記燃料噴射制御手段と、を備える。
【００３１】
但し、この態様の装置における補正量算出手段は、前記時間積分値を算出する際の前記調整ゲインを前記学習値が増大する場合と前記学習値が減少する場合とにおいて同じ値に維持する。
【００３２】
更に、この態様の装置における学習手段は、
前記学習値が、「前記学習値の過去の値に基いて算出される同学習値の過去の値の変動中心である判定基準値」に正の第１特定値を加えた値である上限値と前記判定基準値から正の第２特定値を減じた値である下限値との間に所定時間に渡って存在している場合、前記学習値が収束したと判定するように構成される。
【００３３】
加えて、この学習手段は、
前記学習値の増大速度の大きさが前記学習値の減少速度の大きさよりも大きい場合には前記第１特定値を前記第２特定値よりも大きい値に設定し、且つ、前記学習値の減少速度の大きさが前記学習値の増大速度の大きさよりも大きい場合には前記第２特定値を前記第１特定値よりも大きい値に設定する。
【００３４】
これによれば、上限値及び下限値のうち「学習値の変化速度の大きさが大きい側の閾値」は「学習値の変化速度の大きさが小さい側の閾値」よりも判定基準値から大きく乖離する値となる。従って、学習値が収束していれば、学習値の増大速度の大きさと減少速度の大きさが異なる場合であっても、学習値は「前記上限値と前記下限値との間」に存在するようになる。その結果、学習値が収束していることを精度良く判定することができる。
【００３５】
しかも、上記構成によれば、所定期間における学習値の判定基準値からの偏差の大きさが「前記第１特定値又は前記第２特定値」を超えたか否かを判定することになるので、所定期間における学習値の偏差の大きさが閾値を超えたか否かを判定する場合に比べ、学習値が収束しているか否かを短い時間にて判定することができる。
【００３６】
更に、前記第１特定値及び前記第２特定値を過度に大きい値に設定する必要がないので、学習値が収束していない場合に学習値が収束していると誤って判定することを回避することができる。加えて、調整ゲインは、学習値が増大する場合及び減少する場合において同じ値に維持される。従って、調整ゲインが過大であるために学習値がオーバーシュートする事態、或いは、調整ゲインが過小であるために学習値の収束が遅れる事態、等が発生することを回避することができる。その結果、エミッションを良好に維持することができる。
【００３７】
この場合においても、前記学習手段は、前記学習値が収束したと判定されていない場合の前記調整ゲインを、前記学習値が収束したと判定された場合の前記調整ゲインよりも大きい値に設定するように構成されることが好適である。
【００３８】
これによれば、学習値が収束していない場合、調整ゲインが大きい値に設定されるので、学習値を収束値へとより迅速に近づけることができる。なお、この態様においては、学習値が収束していない場合においても、前記学習値が増大する場合における前記調整ゲインと前記学習値が減少する場合における前記調整ゲインとは互いに等しい値に維持される。
【図面の簡単な説明】
【００３９】
【図１】図１は、本発明の第１実施形態に係る燃料噴射量制御装置（第１制御装置）を適用した内燃機関の概略図である。
【図２】図２は、図１に示した上流側空燃比センサの出力電圧と空燃比との関係を示したグラフである。
【図３】図３は、図１に示した下流側酸素濃度センサの出力電圧と空燃比との関係を示したグラフである。
【図４】図４は、下流側空燃比センサの出力値及びサブＦＢ学習値の変化の様子を示したタイムチャートである。
【図５】図５（図５の（Ａ）及び（Ｂ））は、サブＦＢ学習値の変化の様子を示したタイムチャートである。
【図６】図６は、図１に示した電気制御装置が燃料噴射量制御（空燃比制御）を実行する際の機能を示した機能ブロック図である。
【図７】図７は、図６に示した基本補正値算出手段の機能ブロック図である。
【図８】図８は、第１制御装置のＣＰＵが実行するルーチンを示したフローチャートである。
【図９】図９は、第１制御装置のＣＰＵが実行するルーチンを示したフローチャートである。
【図１０】図１０は、第１制御装置のＣＰＵが実行するルーチンを示したフローチャートである。
【図１１】図１１は、第１制御装置のＣＰＵが実行するルーチンを示したフローチャートである。
【図１２】図１２は、第１制御装置のＣＰＵが実行するルーチンを示したフローチャートである。
【図１３】図１３は、第１制御装置のＣＰＵが実行するルーチンを示したフローチャートである。
【図１４】図１４は、第１制御装置のＣＰＵが実行するルーチンを示したフローチャートである。
【図１５】図１５は、第１制御装置のＣＰＵが実行するルーチンを示したフローチャートである。
【図１６】図１６は、第１制御装置のＣＰＵが実行するルーチンを示したフローチャートである。
【図１７】図１７は、本発明の第２実施形態に係る燃料噴射量制御装置（第２制御装置）の作動を説明するためのタイムチャートである。
【図１８】図１８は、第２制御装置のＣＰＵが実行するルーチンを示したフローチャートである。
【図１９】図１９は、第２制御装置のＣＰＵが実行するルーチンを示したフローチャートである。
【図２０】図２０は、第２制御装置のＣＰＵが実行するルーチンを示したフローチャートである。
【発明を実施するための形態】
【００４０】
以下、本発明の各実施形態に係る内燃機関の燃料噴射量制御装置（以下、単に「制御装置」とも称呼する。）について図面を参照しながら説明する。この制御装置は、内燃機関の空燃比制御装置でもある。
【００４１】
＜第１実施形態＞
（構成）
図１は、第１実施形態に係る制御装置（以下、「第１制御装置」とも称呼する。）を、４サイクル・火花点火式・多気筒（直列４気筒）・内燃機関１０に適用したシステムの概略構成を示している。
【００４２】
内燃機関１０は、機関本体部２０と、吸気系統３０と、排気系統４０と、を含む。
【００４３】
機関本体部２０は、シリンダブロック部及びシリンダヘッド部を含む。機関本体部２０は、複数の気筒（燃焼室）２１を備えている。各気筒は、図示しない「吸気ポート及び排気ポート」と連通している。吸気ポートと燃焼室２１との連通部は図示しない吸気弁により開閉される。排気ポートと燃焼室２１との連通部は図示しない排気弁により開閉される。各燃焼室２１には図示しない点火プラグが配設されている。
【００４４】
吸気系統３０は、インテークマニホールド３１、吸気管３２、複数の燃料噴射弁３３、及び、スロットル弁３４を備えている。
【００４５】
インテークマニホールド３１は、複数の枝部３１ａとサージタンク３１ｂとを備えている。複数の枝部３１ａのそれぞれの一端は、複数の吸気ポートのそれぞれに接続されている。複数の枝部３１ａの他端はサージタンク３１ｂに接続されている。
【００４６】
吸気管３２の一端はサージタンク３１ｂに接続されている。吸気管３２の他端には図示しないエアフィルタが配設されている。
【００４７】
燃料噴射弁３３は、一つの気筒（燃焼室）２１に対して一つずつ配設されている。燃料噴射弁３３は吸気ポートに設けられている。即ち、複数の気筒のそれぞれは、他の気筒とは独立して燃料供給を行う燃料噴射弁３３を備えている。燃料噴射弁３３は、噴射指示信号に応答して「その噴射指示信号に含まれる指示燃料噴射量の燃料」を吸気ポート内（従って、燃料噴射弁３３に対応する気筒２１）に噴射するようになっている。
【００４８】
スロットル弁３４は、吸気管３２内に回動可能に配設されている。スロットル弁３４は、吸気通路の開口断面積を可変とするようになっている。スロットル弁３４は、図示しないスロットル弁アクチュエータにより吸気管３２内で回転駆動されるようになっている。
【００４９】
排気系統４０は、エキゾーストマニホールド４１、エキゾーストパイプ４２、エキゾーストパイプ４２に配設された上流側触媒４３、及び、上流側触媒４３よりも下流においてエキゾーストパイプ４２に配設された「図示しない下流側触媒」を備えている。
【００５０】
エキゾーストマニホールド４１は、複数の枝部４１ａと集合部４１ｂとを備えている。複数の枝部４１ａのそれぞれの一端は、複数の排気ポートのそれぞれに接続されている。複数の枝部４１ａのそれぞれの他端は集合部４１ｂに集合している。この集合部４１ｂは、複数（２以上であり、本例では４つ）の気筒から排出された排ガスが集合する部分であるから、排気集合部ＨＫとも称呼される。
【００５１】
エキゾーストパイプ４２は集合部４１ｂに接続されている。排気ポート、エキゾーストマニホールド４１及びエキゾーストパイプ４２は、排気通路を構成している。
【００５２】
上流側触媒４３及び下流側触媒のそれぞれは、所謂、白金、ロジウム及びパラジウム等の貴金属（触媒物質）からなる活性成分を担持する三元触媒装置（排気浄化用の触媒）である。各触媒は、各触媒に流入するガスの空燃比が「三元触媒のウインドウ内の空燃比（例えば、理論空燃比）」であるとき、ＨＣ，ＣＯ，Ｈ２などの未燃成分を酸化するとともに窒素酸化物（ＮＯｘ）を還元する機能を有する。この機能は触媒機能とも称呼される。更に、各触媒は、酸素を吸蔵（貯蔵）する酸素吸蔵機能を有する。各触媒は、酸素吸蔵機能により空燃比が理論空燃比から偏移したとしても未燃成分及び窒素酸化物を浄化することができる。つまり、酸素吸蔵機能により、ウインドウの幅が拡大する。酸素吸蔵機能は、触媒に担持されているセリア（ＣｅＯ２）等の酸素吸蔵材によってもたらされる。
【００５３】
このシステムは、熱線式エアフローメータ５１、スロットルポジションセンサ５２、水温センサ５３、クランクポジションセンサ５４、インテークカムポジションセンサ５５、上流側空燃比センサ５６、下流側空燃比センサ５７、及び、アクセル開度センサ５８を備えている。
【００５４】
エアフローメータ５１は、吸気管３２内を流れる吸入空気の質量流量（吸入空気流量）Ｇａに応じた信号を出力するようになっている。即ち、吸入空気量Ｇａは、単位時間あたりに機関１０に吸入される吸入空気量を表す。
【００５５】
スロットルポジションセンサ５２は、スロットル弁３４の開度（スロットル弁開度）を検出し、スロットル弁開度ＴＡを表す信号を出力するようになっている。
【００５６】
水温センサ５３は、内燃機関１０の冷却水の温度を検出し、冷却水温ＴＨＷを表す信号を出力するようになっている。冷却水温ＴＨＷは、機関１０の暖機状態（機関１０の温度）を表すパラメータである。
【００５７】
クランクポジションセンサ５４は、クランク軸が１０°回転する毎に幅狭のパルスを有するとともに同クランク軸が３６０°回転する毎に幅広のパルスを有する信号を出力するようになっている。この信号は、後述する電気制御装置７０によって機関回転速度ＮＥに変換される。
【００５８】
インテークカムポジションセンサ５５は、インテークカムシャフトが所定角度から９０度、次いで９０度、更に１８０度回転する毎に一つのパルスを出力するようになっている。後述する電気制御装置７０は、クランクポジションセンサ５４及びインテークカムポジションセンサ５５からの信号に基づいて、基準気筒（例えば第１気筒）の圧縮上死点を基準とした絶対クランク角度ＣＡを取得するようになっている。この絶対クランク角度ＣＡは、基準気筒の圧縮上死点において「０°クランク角度」に設定され、クランク軸の回転角度に応じて７２０°クランク角度まで増大し、その時点にて再び０°クランク角度に設定される。
【００５９】
上流側空燃比センサ５６は、エキゾーストマニホールド４１の集合部４１ｂ（排気集合部ＨＫ）と上流側触媒４３との間の位置において「エキゾーストマニホールド４１及びエキゾーストパイプ４２の何れか」に配設されている。
【００６０】
上流側空燃比センサ５６は、例えば、特開平１１−７２４７３号公報、特開２０００−６５７８２号公報及び特開２００４−６９５４７号公報等に開示された「拡散抵抗層を備える限界電流式広域空燃比センサ」である。
【００６１】
上流側空燃比センサ５６は、図２に示したように、上流側空燃比センサ５６の配設位置を流れる排ガスの空燃比に応じた出力値Ｖａｂｙｆｓを「空燃比センサ出力」として出力する。この出力値Ｖａｂｙｆｓは、上流側空燃比センサ５６に到達している排ガスの空燃比が大きくなるほど（リーンとなるほど）増大する。出力値Ｖａｂｙｆｓは、上流側空燃比センサ５６に到達している排ガスの空燃比が理論空燃比であるとき、理論空燃比相当値Ｖｓｔｏｉｃｈに一致する。
【００６２】
後述する電気制御装置７０は、図２に示された関係を「空燃比変換テーブルＭａｐａｂｙｆｓ（Ｖａｂｙｆｓ）」としてＲＯＭ内に格納していて、実際の出力値Ｖａｂｙｆｓを空燃比変換テーブルＭａｐａｂｙｆｓ（Ｖａｂｙｆｓ）に適用することにより上流側空燃比ａｂｙｆｓ（検出空燃比ａｂｙｆｓ）を取得するようになっている。
【００６３】
再び、図１を参照すると、下流側空燃比センサ５７は、エキゾーストパイプ４２内に配設されている。下流側空燃比センサ５７の配設位置は、上流側触媒４３よりも下流側であり、且つ、下流側触媒よりも上流側（即ち、上流側触媒４３と下流側触媒との間の排気通路）である。下流側空燃比センサ５７は、周知の起電力式の酸素濃度センサ（安定化ジルコニア等の固体電解質を用いた周知の濃淡電池型の酸素濃度センサ）である。下流側空燃比センサ５７は、排気通路であって下流側空燃比センサ５７が配設されている部位を通過するガスである被検出ガスの空燃比に応じた出力値Ｖｏｘｓを発生するようになっている。換言すると、出力値Ｖｏｘｓは、上流側触媒４３から流出し且つ下流側触媒に流入するガスの空燃比（下流側空燃比ａｆｄｏｗｎ）に応じた値である。
【００６４】
この出力値Ｖｏｘｓは、図３に示したように、被検出ガスの空燃比が理論空燃比よりもリッチのとき最大出力値ｍａｘ（例えば、約０．９Ｖ〜１．０Ｖ）となる。出力値Ｖａｂｙｆｓは、被検出ガスの空燃比が理論空燃比よりもリーンのとき最小出力値ｍｉｎ（例えば、約０．１Ｖ〜０Ｖ）となる。更に、出力値Ｖｏｘｓは、被検出ガスの空燃比が理論空燃比であるとき最大出力値ｍａｘと最小出力値ｍｉｎの略中間の電圧Ｖｓｔ（中間電圧Ｖｓｔ、例えば、約０．５Ｖ）となる。出力値Ｖｏｘｓは、被検出ガスの空燃比が理論空燃比よりもリッチな空燃比からリーンな空燃比へと変化する際に最大出力値ｍａｘから最小出力値ｍｉｎへと急変する。同様に、出力値Ｖｏｘｓは、被検出ガスの空燃比が理論空燃比よりもリーンな空燃比からリッチな空燃比へと変化する際に最小出力値ｍｉｎから最大出力値ｍａｘへと急変する。
【００６５】
図１に示したアクセル開度センサ５８は、運転者によって操作されるアクセルペダルＡＰの操作量Ａｃｃｐ（アクセルペダル操作量、アクセルペダルＡＰの開度）を表す信号を出力するようになっている。アクセルペダル操作量Ａｃｃｐは、アクセルペダルＡＰの操作量が大きくなるとともに大きくなる。
【００６６】
電気制御装置７０は、「ＣＰＵ、ＣＰＵが実行するプログラム、テーブル（マップ、関数）及び定数等を予め記憶したＲＯＭ、ＣＰＵが必要に応じてデータを一時的に格納するＲＡＭ、バックアップＲＡＭ、並びに、ＡＤコンバータを含むインターフェース等」からなる周知のマイクロコンピュータである。
【００６７】
バックアップＲＡＭは、機関１０を搭載した車両の図示しないイグニッション・キー・スイッチの位置（オフ位置、始動位置及びオン位置等の何れか）に関わらず、車両に搭載されたバッテリから電力の供給を受けるようになっている。バックアップＲＡＭは、バッテリから電力の供給を受けている場合、ＣＰＵの指示に応じてデータを格納する（データが書き込まれる）とともに、そのデータを読み出し可能となるように保持（記憶）する。従って、バックアップＲＡＭは、機関１０の運転停止中においてもデータを保持することができる。
【００６８】
バックアップＲＡＭは、バッテリが車両から取り外される等によりバッテリからの電力供給が遮断されると、データを保持することができない。そこで、ＣＰＵは、バックアップＲＡＭへの電力供給が再開されたとき、バックアップＲＡＭに保持されるべきデータを初期化（デフォルト値に設定）するようになっている。なお、バックアップＲＡＭは、ＥＥＰＲＯＭ等の読み書き可能な不揮発性メモリであってもよい。
【００６９】
電気制御装置７０は、上述したセンサ等と接続され、ＣＰＵにそれらのセンサからの信号を供給するようになっている。更に、電気制御装置７０は、ＣＰＵの指示に応じて、各気筒に対応して設けられた点火プラグ（実際にはイグナイタ）、各気筒に対応して設けられた燃料噴射弁３３、及び、スロットル弁アクチュエータ等に駆動信号（指示信号）を送出するようになっている。
【００７０】
なお、電気制御装置７０は、取得されたアクセルペダルの操作量Ａｃｃｐが大きくなるほどスロットル弁開度ＴＡが大きくなるように、スロットル弁アクチュエータに指示信号を送出するようになっている。即ち、電気制御装置７０は、運転者により変更される機関１０の加速操作量（アクセルペダル操作量Ａｃｃｐ）に応じて「機関１０の吸気通路に配設されたスロットル弁３４」の開度を変更するスロットル弁駆動手段を備えている。
【００７１】
（第１制御装置による空燃比制御の概要）
第１制御装置は、上流側空燃比センサ５６の出力値Ｖａｂｙｆｓにより表される上流側空燃比ａｂｙｆｓが所定の目標空燃比ａｂｙｆｒに一致するようにメインフィードバック制御を行う。更に、第１制御装置は、下流側空燃比センサ５７の出力値Ｖｏｘｓが所定の下流側目標値Ｖｏｘｓｒｅｆに一致するようにサブフィードバック制御を行う。メインフィードバック制御とサブフィードバック制御とにより燃料噴射量がフィードバック補正される。
【００７２】
サブフィードバック制御においては、サブフィードバック量ＫＳＦＢが算出される。このサブフィードバック量ＫＳＦＢは目標空燃比ａｂｙｆｒを変更するように作用する。但し、サブフィードバック量ＫＳＦＢは、上流側空燃比センサ５６の出力値Ｖａｂｙｆｓを補正するように作用してもよい。
【００７３】
第１制御装置は、サブフィードバック量ＫＳＦＢを「出力値Ｖｏｘｓと下流側目標値Ｖｏｘｓｒｅｆとの差（出力偏差量ＤＶｏｘｓ）」に基くＰＩＤ制御により算出する。即ち、サブフィードバック量ＫＳＦＢは、比例項、積分項及び微分項を含む。
【００７４】
第１制御装置は、サブフィードバック量ＫＳＦＢの積分項を算出するために、出力偏差量ＤＶｏｘｓに相関する値（実際には、出力偏差量ＤＶｏｘｓをローパスフィルタ処理した値ＤＶｏｘｓｌｏｗ）に所定の調整ゲインＫを乗じた値を積算（積分）することによって時間積分値ＳＤＶｏｘｓｌｏｗを求める。なお、値ＤＶｏｘｓｌｏｗは、実質的に、出力値Ｖｏｘｓと下流側目標値Ｖｏｘｓｒｅｆとの偏差（出力偏差量）と称呼することができる。更に、第１制御装置は、その時間積分値ＳＤＶｏｘｓｌｏｗに積分定数を乗じることにより、サブフィードバック量ＫＳＦＢの積分項を求める。
【００７５】
第１制御装置は、サブフィードバック量ＫＳＦＢの積分項に応じた値をサブフィードバック量の学習値（サブＦＢ学習値ＫＳＦＢｇ）として取得する。サブＦＢ学習値ＫＳＦＢｇは、バックアップＲＡＭに格納され、少なくとも「サブフィードバック量を更新するためのサブフィードバック制御条件が成立しない場合」、燃料噴射量の補正に使用される。
【００７６】
一方、第１制御装置は、図５に示したように、ある時点までのサブＦＢ学習値ＫＳＦＢｇの変動中心（サブＦＢ学習値ＫＳＦＢｇの加重平均値）を示す判定基準値Ｖｋｉｊｕｎを求める。そして、第１制御装置は、判定基準値Ｖｋｉｊｕｎに正の特定値ΔＶを加えた値を上限値Ｖｇｍａｘｔｈとして求めるとともに、判定基準値Ｖｋｉｊｕｎから特定値ΔＶを減じた値を下限値Ｖｇｍｉｎｔｈとして求める。特定値ΔＶは、サブＦＢ学習値ＫＳＦＢｇが収束している可能性（サブＦＢ学習値ＫＳＦＢｇの収束度）が高いと判定されるほど（即ち、後述するステータス（ｓｔａｔｕｓ）の値が大きいほど）、小さい値に設定される。
【００７７】
第１制御装置は、所定期間に渡り「サブＦＢ学習値ＫＳＦＢｇが上限値Ｖｇｍａｘｔｈと下限値Ｖｇｍｉｎｔｈとの間に存在している場合」、サブＦＢ学習値ＫＳＦＢｇの収束度が上昇した（学習値が収束値に近づいている）と判定する。第１制御装置は、逆に、所定期間内において「サブＦＢ学習値ＫＳＦＢｇが上限値Ｖｇｍａｘｔｈと下限値Ｖｇｍｉｎｔｈとの間に存在しなくなった場合」、サブＦＢ学習値ＫＳＦＢｇの収束度が低下した（学習値が収束値から乖離している）と判定する。サブＦＢ学習値ＫＳＦＢｇの収束度は、次に述べるステータス（ｓｔａｔｕｓ）の値により示される。
【００７８】
・ｓｔａｔｕｓ０（ｓｔａｔｕｓが「０」）：サブＦＢ学習値ＫＳＦＢｇの収束状態が良好でない。即ち、ｓｔａｔｕｓ０の状態は、サブＦＢ学習値ＫＳＦＢｇが「その収束値ＳＤＶｏｘｓｆｉｎａｌから乖離し」且つ「サブＦＢ学習値ＫＳＦＢｇの変化速度が大きい」という「不安定状態」にあることを意味する。
・ｓｔａｔｕｓ２（ｓｔａｔｕｓが「２」）：サブＦＢ学習値ＫＳＦＢｇの収束状態が良好である。即ち、ｓｔａｔｕｓ２の状態は、サブＦＢ学習値ＫＳＦＢｇが「その収束値ＳＤＶｏｘｓｆｉｎａｌの近傍にて安定している」という「安定状態」にあることを意味する。安定状態は、サブＦＢ学習値ＫＳＦＢｇの学習が完了している状態と言い換えることもできる。
・ｓｔａｔｕｓ１（ｓｔａｔｕｓが「１」）：サブＦＢ学習値ＫＳＦＢｇの収束状態が、前記安定状態と前記不安定状態との間の状態（即ち、準安定状態）にある。
【００７９】
他方、第１制御装置において、下流側目標値Ｖｏｘｓｒｅｆは理論空燃比に相当する値Ｖｓｔ（例えば、０．５Ｖ）よりも大きい値（例えば、０．７Ｖ）に設定される。この結果、図４に示したように、リッチ判定時の出力偏差量ＤＶｏｘｓの大きさＤＲがリーン判定時の出力偏差量ＤＶｏｘｓの大きさＤＬよりも小さくなる。従って、調整ゲインＫをリッチ判定時とリーン判定時とにおいて同じ値に維持していると、リーン判定時の時間積分値ＳＤＶｏｘｓｌｏｗの一回の更新量の大きさ（Ｋ・ＤＬのローパスフィルタ値）がリッチ判定時の時間積分値ＳＤＶｏｘｓの一回の更新量の大きさ（Ｋ・ＤＲのローパスフィルタ値）よりも大きくなる。この結果、サブＦＢ学習値ＫＳＦＢｇの更新速度の大きさは、リーン判定時の方がリッチ判定時よりも大きくなる。
【００８０】
このため、例えば、サブＦＢ学習値ＫＳＦＢｇが実質的に収束値ＳＤＶｏｘｓｆｉｎａｌに収束している場合であっても、図５の（Ｂ）の時刻ｔ１に示したように、外乱によってサブＦＢ学習値ＫＳＦＢｇが上限値Ｖｇｍａｘｔｈを超える場合が生じる。
【００８１】
そこで、第１制御装置は、サブＦＢ学習値ＫＳＦＢｇの増大速度の大きさとサブＦＢ学習値ＫＳＦＢｇの減少速度の大きさとの差が小さくなるように、（換言すると、時間積分値ＳＤＶｏｘｓｌｏｗの増大速度の大きさと時間積分値ＳＤＶｏｘｓｌｏｗの減少速度の大きさとの差が小さくなるように）、時間積分値ＳＤＶｏｘｓｌｏｗを増大させる場合の調整ゲインＫを、時間積分値ＳＤＶｏｘｓｌｏｗを減少させる場合の調整ゲインＫよりも、小さい値に設定する。この結果、サブＦＢ学習値ＫＳＦＢｇの収束状態を精度良く判定することができる。
【００８２】
（空燃比制御の詳細）
次に、第１制御装置が行う機関の空燃比制御の詳細について説明する。第１制御装置は、上述したように、下流側空燃比センサ５７の出力値Ｖｏｘｓを下流側目標値Ｖｏｘｓｒｅｆと一致させるためのサブフィードバック制御を実行する。
【００８３】
一方、上流側触媒４３は酸素吸蔵機能を有するから、上流側触媒４３の上流の空燃比変化は所定の遅れ時間が経過した後に上流側触媒４３の下流の空燃比変化となって現れる。従って、サブフィードバック制御のみでは過渡的な空燃比変動を十分に抑制することが困難である。そこで、第１制御装置は、上述したように、上流側空燃比センサ５６の出力値Ｖａｂｙｆｓに基く空燃比フィードバック制御（メインフィードバック制御）を実行する。
【００８４】
第１制御装置は、メインフィードバック制御により機関の空燃比を増大しているときにサブフィードバック制御により機関の空燃比を減少させる事態、及び、メインフィードバック制御により機関の空燃比を減少しているときにサブフィードバック制御により機関の空燃比を増大させる事態、が発生することがないように、以下に述べる複数の手段による空燃比制御を行う。これにより、メインフィードバック制御とサブフィードバック制御との間に制御上の干渉が発生しない。
【００８５】
第１制御装置は、機能ブロック図である図６に示した複数の手段等を含んで構成されている。以下、図６を参照しながら説明する。
【００８６】
＜補正後基本燃料噴射量の算出＞
筒内吸入空気量算出手段Ａ１は、実際の吸入空気量Ｇａと、実際の機関回転速度ＮＥと、ＲＯＭに格納されているルックアップテーブルＭａｐＭｃと、に基づき今回の吸気行程を迎える気筒の吸入空気量である筒内吸入空気量Ｍｃ（ｋ）を求める。なお、添え字の（ｋ−Ｎ）は、今回の吸気行程からＮストローク（４気筒エンジンにおいて、Ｎ・１８０°ＣＡ、ＣＡ；クランク角）前の吸気行程に対した値であることを示す。従って、添え字（ｋ）が付された変数は、今回の吸気行程（又は現時点）に対応した値であることを示す。この表記方法は、以下において他のパラメータについても同様に用いられる。筒内吸入空気量Ｍｃは、各気筒の吸気行程に対応されながらＲＡＭに記憶されていく。
【００８７】
上流側目標空燃比設定（決定）手段Ａ２は、内燃機関１０の運転状態である機関回転速度ＮＥ及び機関の負荷（例えば、スロットル弁開度ＴＡ）等に基づいて上流側目標空燃比（目標空燃比）ａｂｙｆｒ（ｋ）を決定する。後述するように、目標空燃比ａｂｙｆｒは「サブフィードバック制御を実現するサブフィードバック量ＫＳＦＢ」により補正される。上流側目標空燃比ａｂｙｆｒ（ｋ）は上流側空燃比センサ５６の出力値に基いて得られる検出空燃比ａｂｙｆｓの目標値の基礎となる値である。目標空燃比ａｂｙｆｒ（ｋ）は各気筒の吸気行程に対応されながらＲＡＭに記憶されていく。
【００８８】
補正前基本燃料噴射量算出手段Ａ３は、下記の（１）式に示したように、手段Ａ１により求められた筒内吸入空気量Ｍｃ（ｋ）を手段Ａ２により設定された上流側目標空燃比ａｂｙｆｒ（ｋ）で除することにより、基本燃料噴射量Ｆｂａｓｅｂ（ｋ）を求める。基本燃料噴射量Ｆｂａｓｅｂ（ｋ）は、後述する基本補正値ＫＦ等による補正がなされる前の基本燃料噴射量であるから、補正前基本燃料噴射量Ｆｂａｓｅｂ（ｋ）とも称呼される。補正前基本燃料噴射量Ｆｂａｓｅｂ（ｋ）は各気筒の吸気行程に対応されながらＲＡＭに記憶されていく。
Ｆｂａｓｅｂ（ｋ）＝Ｍｃ（ｋ）／ａｂｙｆｒ（ｋ）    …（１）
【００８９】
補正後基本燃料噴射量算出手段Ａ４は、手段Ａ３により求められた今回の補正前基本燃料噴射量Ｆｂａｓｅｂ（ｋ）に基本補正値ＫＦを乗じることにより補正後基本燃料噴射量Ｆｂａｓｅ（ｋ）（＝ＫＦ・Ｆｂａｓｅｂ（ｋ））を求める。基本補正値ＫＦは、後述する基本補正値算出手段Ａ１６により求められ、バックアップＲＡＭに格納されている。
【００９０】
＜最終燃料噴射量の算出＞
最終燃料噴射量算出手段Ａ５は、下記の（２）式により示したように、補正後基本燃料噴射量Ｆｂａｓｅ（ｋ）（＝ＫＦ・Ｆｂａｓｅｂ（ｋ））にメインフィードバック補正値ＫＦｍａｉｎを乗じることにより、今回の最終燃料噴射量Ｆｉ（ｋ）を求める。最終燃料噴射量Ｆｉ（ｋ）は、各気筒の吸気行程に対応されながらＲＡＭに記憶されていく。メインフィードバック補正値ＫＦｍａｉｎは、後述するメインフィードバック補正値更新手段Ａ１５によって求められる。
Ｆｉ（ｋ）＝（ＫＦ・Ｆｂａｓｅｂ（ｋ））・ＫＦｍａｉｎ＝Ｆｂａｓｅ（ｋ）・ＫＦｍａｉｎ  …（２）
【００９１】
第１制御装置は、この最終燃料噴射量Ｆｉ（ｋ）の燃料が、今回の吸気行程を迎える気筒の燃料噴射弁３３から噴射されるように、その燃料噴射弁３３に対して噴射指示信号を送出する。換言すると、噴射指示信号は、最終燃料噴射量Ｆｉ（ｋ）に関する情報を指示燃料噴射量として含んでいる。
【００９２】
＜サブフィードバック量の算出＞
下流側目標値設定手段Ａ６は、「機関回転速度ＮＥ、吸入空気量Ｇａ、スロットル弁開度ＴＡ、及び、上流側触媒４３の劣化度（最大酸素吸蔵量Ｃｍａｘ）等」に基づいて下流側目標空燃比に対応する下流側目標値Ｖｏｘｓｒｅｆを決定する。
【００９３】
出力偏差量算出手段Ａ７は、下記（３）式に基づいて、手段Ａ６により設定されている現時点の下流側目標値Ｖｏｘｓｒｅｆから現時点での下流側空燃比センサ５７の出力値Ｖｏｘｓを減じることにより、出力偏差量ＤＶｏｘｓを求める。「現時点」とは、今回のＦｉ（ｋ）の噴射指示開始時点のことである。出力偏差量算出手段Ａ７は、求めた出力偏差量ＤＶｏｘｓをローパスフィルタＡ８に出力する。
ＤＶｏｘｓ＝Ｖｏｘｓｒｅｆ−Ｖｏｘｓ  …（３）
【００９４】
ローパスフィルタＡ８は一次のデジタルフィルタである。ローパスフィルタＡ８の特性を表す伝達関数Ａ８（ｓ）は下記の（４）式により示される。（４）式において、ｓはラプラス演算子であり、τ１は時定数である。ローパスフィルタＡ８は周波数（１／τ１）以上の高周波数成分が通過することを実質的に禁止する。ローパスフィルタＡ８は出力偏差量ＤＶｏｘｓの値を入力するとともに出力偏差量ＤＶｏｘｓの値をローパスフィルタ処理した後の値であるローパスフィルタ通過後出力偏差量ＤＶｏｘｓｌｏｗをＰＩＤコントローラＡ９に出力する。
Ａ８（ｓ）＝１／（１＋τ１・ｓ）  …（４）
【００９５】
ＰＩＤコントローラＡ９は、ローパスフィルタ通過後出力偏差量ＤＶｏｘｓｌｏｗを下記（５）式に基づいて積分処理することにより、時間積分値（積分処理値）ＳＤＶｏｘｓｌｏｗを算出する。左辺のＳＤＶｏｘｓｌｏｗ（ｎ）は更新後の時間積分値であり、右辺のＳＤＶｏｘｓｌｏｗ（ｎ−１）は更新前の時間積分値である。Ｋは調整ゲイン（調整値）であり、後述するように設定・変更される値である。即ち、時間積分値ＳＤＶｏｘｓｌｏｗの１回あたりの更新量は、出力偏差量ＤＶｏｘｓｌｏｗに調整ゲインＫを乗じた値Ｋ・ＤＶｏｘｓｌｏｗである。この調整ゲインＫが変更されることにより、時間積分値ＳＤＶｏｘｓｌｏｗの更新速度（変化速度）が変更される。第１制御装置において、調整ゲインＫは、出力値Ｖｏｘｓが下流側目標値Ｖｏｘｓｒｅｆよりも大きいときと、出力値Ｖｏｘｓが下流側目標値Ｖｏｘｓｒｅｆよりも小さいときとで、互いに異なる値に設定される。
ＳＤＶｏｘｓｌｏｗ（ｎ）＝ＳＤＶｏｘｓｌｏｗ（ｎ−１）＋Ｋ・ＤＶｏｘｓｌｏｗ  …（５）
【００９６】
次いで、ＰＩＤコントローラＡ９は、下記（６）式に基づいて比例・積分・微分処理（ＰＩＤ処理）を実行し、サブフィードバック量ＫＳＦＢを求める。（６）式において、Ｋｐは予め設定された比例ゲイン（比例定数）、Ｋｉは予め設定された積分ゲイン（積分定数）、Ｋｄは予め設定された微分ゲイン（微分定数）である。ＤＤＶｏｘｓｌｏｗはローパスフィルタ通過後出力偏差量ＤＶｏｘｓｌｏｗの時間微分値である。以上により、サブフィードバック量ＫＳＦＢが求められる。
ＫＳＦＢ＝Ｋｐ・ＤＶｏｘｓｌｏｗ＋Ｋｉ・ＳＤＶｏｘｓｌｏｗ＋Ｋｄ・ＤＤＶｏｘｓｌｏｗ  …（６）
【００９７】
上記（６）式は積分項Ｋｉ・ＳＤＶｏｘｓｌｏｗを含んでいるので、定常状態では出力偏差量ＤＶｏｘｓがゼロになることが保証される。換言すれば、下流側目標値Ｖｏｘｓｒｅｆと下流側空燃比センサ５７の出力値Ｖｏｘｓとの定常偏差がゼロになる。また、定常状態においては、出力偏差量ＤＶｏｘｓがゼロになるから、比例項Ｋｐ・ＤＶｏｘｓｌｏｗ及び微分項Ｋｄ・ＤＤＶｏｘｓｌｏｗの両者がゼロとなる。従って、サブフィードバック量ＫＳＦＢの定常状態における収束値は積分項Ｋｉ・ＳＤＶｏｘｓｌｏｗの値と等しくなる。
【００９８】
以上から明らかなように、下流側目標値設定手段Ａ６、出力偏差量算出手段Ａ７、ローパスフィルタＡ８及びＰＩＤコントローラＡ９はサブフィードバック量算出手段を構成している。
【００９９】
＜メインフィードバック制御＞
先に説明したように、上流側触媒４３は酸素吸蔵機能を有している。従って、上流側触媒４３の上流の排ガスの空燃比の変動における「比較的周波数の高い高周波数成分（前記周波数１／τ１以上の高周波数成分）」及び「比較的周波数が低く且つ振幅が比較的小さい低周波数成分（前記周波数１／τ１以下の周波数にて変動するとともに理論空燃比からの偏移量が比較的小さい低周波成分）」は、上流側触媒４３の酸素吸蔵機能により吸収されるから、上流側触媒４３の下流の排ガスの空燃比の変動として現れ難い。
【０１００】
従って、例えば、排ガスの空燃比が前記周波数（１／τ１）以上の高周波数で大きく変動するような「過渡運転状態における空燃比の急変」に対する補償は、サブフィードバック制御により行われ得ない。それ故、「過渡運転状態における空燃比の急変」に対する補償を確実に行うためには、上流側空燃比センサ５６の出力値Ｖａｂｙｆｓに基づいたメインフィードバック制御を行う必要がある。
【０１０１】
一方、上流側触媒４３の上流の排ガスの空燃比の変動における「周波数が比較的低くて振幅が比較的大きい低周波数成分（例えば、前記周波数（１／τ１）以下の周波数で変動するとともに理論空燃比からの偏移量が比較的大きい低周波成分）」は、上流側触媒４３の酸素吸蔵機能では完全には吸収されない。従って、そのような上流側触媒４３の上流における空燃比の変動は、所定の遅れを有しながら上流側触媒４３の下流の排ガスの空燃比の変動として現れる。この結果、上流側空燃比センサ５６の出力値Ｖａｂｙｆｓが目標空燃比ａｂｙｆｒよりもリッチ側となり、下流側空燃比センサ５７の出力値Ｖｏｘｓが下流側目標値Ｖｏｘｓｒｅｆよりもリーン側となる等の状態が発生し、メインフィードバック制御とサブフィードバック制御との間に前述した制御上の干渉が生じる場合がある。
【０１０２】
以上のことから、第１制御装置は、上流側空燃比センサ５６の出力値Ｖａｂｙｆｓの変動における各周波数成分のうち「上流側触媒４３の下流の空燃比の変動として現れ得る程度の周波数成分である所定の周波数（本例では、周波数（１／τ１））以下の低周波数成分」をカットした後の上流側空燃比センサ５６の出力値Ｖａｂｙｆｓに応じた値をメインフィードバック制御に使用する。このメインフィードバック制御に使用される「上流側空燃比センサ５６の出力値Ｖａｂｙｆｓに応じた値」は、「目標空燃比ａｂｙｆｒｔｇｔ（ｋ）と出力値Ｖａｂｙｆｓ（ｋ）との偏差Ｄａｆに対してハイパスフィルタ処理を施した値」である。この結果、前述した空燃比制御の干渉が発生することを回避することができるとともに、メインフィードバック制御によって過渡運転状態における空燃比の急変に対する補償を確実に行うことができる。より具体的には、メインフィードバック補正値は以下に述べるようにして求められる。
【０１０３】
＜メインフィードバック補正値の算出＞
テーブル変換手段Ａ１０は、上流側空燃比センサ５６の出力値Ｖａｂｙｆｓと、図２に示したテーブルＭａｐａｂｙｆｓと、に基づいて、現時点の検出空燃比ａｂｙｆｓ（ｋ）を求める。
【０１０４】
目標空燃比遅延手段Ａ１１は、上流側目標空燃比ａｂｙｆｒのうち、現時点からＮストローク（Ｎ回の吸気行程）前の時点の上流側目標空燃比ａｂｙｆｒをＲＡＭから読み出し、これを上流側目標空燃比ａｂｙｆｒ（ｋ−Ｎ）として設定する。上流側目標空燃比ａｂｙｆｒ（ｋ−Ｎ）は、現時点からＮストローク前に吸気行程を迎えた気筒の補正前基本燃料噴射量Ｆｂａｓｅｂ（ｋ−Ｎ）を算出するために用いられた上流側目標空燃比である。
【０１０５】
前記値Ｎは、内燃機関１０の排気量及び燃焼室２１から上流側空燃比センサ５６までの距離等により異なる値である。このように、現時点からＮストローク前の実際の上流側目標空燃比ａｂｙｆｒ（ｋ−Ｎ）をメインフィードバック補正値の算出に用いるのは、燃料噴射弁３３から噴射された燃料を含み且つ燃焼室２１内で燃焼された混合気が上流側空燃比センサ５６に到達するまでには、Ｎストロークに相当する無駄時間Ｌ１を要しているからである。なお、値Ｎは、機関回転速度ＮＥが大きいほど小さくなり、且つ、機関の負荷（例えば、筒内吸入空気量Ｍｃ）が大きくなるほど小さくなるように変更されることが望ましい。
【０１０６】
ローパスフィルタＡ１２は、手段Ａ１１から出力された上流側目標空燃比ａｂｙｆｒ（ｋ−Ｎ）に対してローパスフィルタ処理を施し、メインフィードバック制御用目標空燃比（上流側フィードバック制御用目標空燃比）ａｂｙｆｒｔｇｔ（ｋ）を算出する。メインフィードバック制御用目標空燃比ａｂｙｆｒｔｇｔ（ｋ）は、上流側目標空燃比設定手段Ａ２により決定されていた上流側の目標空燃比ａｂｙｆｒ（ｋ−Ｎ）に応じた値である。
【０１０７】
このローパスフィルタＡ１２は一次のディジタルフィルタである。ローパスフィルタＡ１２の伝達特性Ａ１２（ｓ）は下記の（７）式により示される。（７）式において、ｓはラプラス演算子であり、τは時定数（応答性に関するパラメータ）である。この特性により、周波数（１／τ）以上の高周波数成分の通過が実質的に禁止される。
Ａ１２（ｓ）＝１／（１＋τ・ｓ）  …（７）
【０１０８】
上流側空燃比センサ５６に到達している排ガスの空燃比の値を入力信号とし、上流側空燃比センサ５６の出力値Ｖａｂｙｆｓに基いて求められる空燃比の値を出力信号とするとき、出力信号は入力信号に対してローパスフィルタ処理（例えば、所謂「なまし処理」を含む一次遅れ処理及び二次遅れ処理等）を施した信号と極めて似た信号となる。この結果、ローパスフィルタＡ１２により生成されるメインフィードバック制御用目標空燃比ａｂｙｆｒｔｇｔ（ｋ）は、上流側空燃比センサ５６に目標空燃比ａｂｙｆｒ（ｋ−Ｎ）に応じた望ましい空燃比の排ガスが到達しているときに上流側空燃比センサ５６が実際に出力するであろう値となる。
【０１０９】
上流側空燃比偏差算出手段Ａ１３は、下記（８）式に基づいて、メインフィードバック制御用目標空燃比ａｂｙｆｒｔｇｔ（ｋ）から現時点の検出空燃比ａｂｙｆｓ（ｋ）を減じることにより、空燃比偏差Ｄａｆを求める。この空燃比偏差Ｄａｆは、Ｎストローク前の時点において筒内に供給された混合気の実際の空燃比と目標空燃比との偏差を表す量である。
Ｄａｆ＝ａｂｙｆｒｔｇｔ（ｋ）−ａｂｙｆｓ（ｋ）  …（８）
【０１１０】
ハイパスフィルタＡ１４は一次のフィルタである。ハイパスフィルタＡ１４の特性を表す伝達関数Ａ１４（ｓ）は（９）式により示される。（９）式において、ｓはラプラス演算子であり、τ１は時定数である。時定数τ１は上記ローパスフィルタＡ８の時定数τ１と同一の時定数である。ハイパスフィルタＡ１４は、周波数（１／τ１）以下の低周波数成分が通過することを実質的に禁止する。
Ａ１４（ｓ）＝｛１−１／（１＋τ１・ｓ）｝  …（９）
【０１１１】
ハイパスフィルタＡ１４は、空燃比偏差Ｄａｆを入力するとともに、上記（９）式より表された特性式に従って空燃比偏差Ｄａｆをハイパスフィルタ処理した後の値であるメインフィードバック制御用偏差ＤａｆＨｉを出力する。
【０１１２】
メインフィードバック補正値更新手段Ａ１５は、ハイパスフィルタＡ１４の出力値であるメインフィードバック制御用偏差ＤａｆＨｉを比例処理する。即ち、メインフィードバック補正値更新手段Ａ１５は、メインフィードバック制御用偏差ＤａｆＨｉに比例ゲインＧｐＨｉを乗じた値に「１」を加えることにより、メインフィードバック補正値ＫＦｍａｉｎを求める。このメインフィードバック補正値ＫＦｍａｉｎは、最終燃料噴射量算出手段Ａ５が今回の最終燃料噴射量Ｆｉ（ｋ）を求める際に使用される。
【０１１３】
なお、メインフィードバック補正値更新手段Ａ１５は、下記（１０）式に基いて、メインフィードバック制御用偏差ＤａｆＨｉを比例・積分処理（ＰＩ処理）することにより、メインフィードバック補正値ＫＦｍａｉｎを求めてもよい。（１０）式において、Ｇｐｈｉは予め設定された比例ゲイン（比例定数）、Ｇｉｈｉは予め設定された積分ゲイン（積分定数）である。ＳＤａｆＨｉはメインフィードバック制御用偏差ＤａｆＨｉの時間積分値である。係数ＫＦＢは本例では「１」である。係数ＫＦＢは、機関回転速度ＮＥ及び筒内吸入空気量Ｍｃ等により可変とすることが好適である。
ＫＦｍａｉｎ＝１＋（Ｇｐｈｉ・ＤａｆＨｉ＋Ｇｉｈｉ・ＳＤａｆＨｉ）・ＫＦＢ  …（１０）
【０１１４】
以上から明らかなように、上流側目標空燃比設定手段Ａ２、テーブル変換手段Ａ１０、目標空燃比遅延手段Ａ１１、ローパスフィルタＡ１２、上流側空燃比偏差算出手段Ａ１３、ハイパスフィルタＡ１４及びメインフィードバック補正値更新手段Ａ１５は、メインフィードバック補正値算出手段（メインフィードバック制御手段）を構成している。
【０１１５】
＜基本補正値の算出＞
サブフィードバック量ＫＳＦＢはＰＩＤコントローラＡ９によりローパスフィルタ通過後出力偏差量ＤＶｏｘｓｌｏｗを比例・積分・微分処理することによって算出される。しかしながら、上流側触媒４３の酸素吸蔵機能の影響により機関の空燃比の変化は少し遅れて上流側触媒４３の下流の排ガスの空燃比の変化として現れる。従って、エアフローメータ５１の検出精度や空気量推定モデルの推定精度に起因する定常的な誤差の大きさが運転領域の急変等によって比較的急激に増大する場合、その誤差に起因する燃料噴射量の過不足分をサブフィードバック制御のみにより直ちに補償することはできない。
【０１１６】
一方、上流側触媒４３の酸素吸蔵機能による遅れの影響がないメインフィードバック制御において、ハイパスフィルタＡ１４によるハイパスフィルタ処理は微分処理（Ｄ処理）と同等の機能を達成する処理である。従って、ハイパスフィルタＡ１４通過後の値がメインフィードバック補正値更新手段Ａ１５の入力値とされている上記メインフィードバック制御においては、仮にメインフィードバック補正値更新手段Ａ１５が積分処理を行うことによりメインフィードバック補正値ＫＦｍａｉｎを求めるように構成されている場合であっても、実質的な積分項を含むメインフィードバック補正値ＫＦｍａｉｎを算出することができない。それ故、上記メインフィードバック制御より、上記エアフローメータの検出精度や空気量推定モデルの推定精度に起因する燃料噴射量の定常的な誤差は補償され得ない。その結果、運転領域が変化した場合等において、一時的に有害成分の排出量が増大する場合が発生するという可能性がある。
【０１１７】
このため、上記定常的な誤差を補償するため、第１制御装置は、補正前基本燃料噴射量Ｆｂａｓｅｂを補正する基本補正値ＫＦを求める。更に、第１制御装置は、下記の（１１）式に再度示したように、基本補正値ＫＦによって補正後基本燃料噴射量Ｆｂａｓｅ（ｋ）を求め、その補正後基本燃料噴射量Ｆｂａｓｅ（ｋ）を更にメインフィードバック補正値ＫＦｍａｉｎにより補正している。
Ｆｉ（ｋ）＝｛ＫＦ・Ｆｂａｓｅｂ（ｋ）｝・ＫＦｍａｉｎ  …（１１）
【０１１８】
基本補正値ＫＦは、下記の（１２）式により定義される。
Ｆｂａｓｅｔ（ｋ−Ｎ）＝ＫＦ・Ｆｂａｓｅｂ（ｋ−Ｎ）  …（１２）
【０１１９】
（１２）式において、Ｆｂａｓｅｔは、目標空燃比を得るために必要な真の指示噴射量であり、誤差を含まない基本燃料噴射量であるということもできる。以下、Ｆｂａｓｅｔを、「真の基本燃料噴射量」と称呼する。（１２）式の真の基本燃料噴射量Ｆｂａｓｅｔ（ｋ−Ｎ）は、下記の（１３）式により算出される。
Ｆｂａｓｅｔ（ｋ−Ｎ）＝（ａｂｙｆｓ（ｋ）・Ｆｉ（ｋ−Ｎ））／ａｂｙｆｒ（ｋ−Ｎ）  …（１３）
【０１２０】
上記（１３）式について説明を加える。上述したＮストロークは上記「無駄時間」に対応するストローク数に設定されている。つまり、現時点における検出空燃比ａｂｙｆｓ（ｋ）は最終燃料噴射量Ｆｉ（ｋ−Ｎ）に基いて噴射された燃料によりもたらされている空燃比である。従って、（１３）式における右辺の分子のａｂｙｆｓ（ｋ）・Ｆｉ（ｋ−Ｎ）は、最終燃料噴射量Ｆｉ（ｋ−Ｎ）を決定した際の筒内空気量を表していることになる。それ故、（１３）式に示したように、最終燃料噴射量Ｆｉ（ｋ−Ｎ）を決定した時点の筒内空気量（ａｂｙｆｓ（ｋ）・Ｆｉ（ｋ−Ｎ））を、最終燃料噴射量Ｆｉ（ｋ−Ｎ）を決定した時点の目標空燃比ａｂｙｆｒ（ｋ−Ｎ）で除することにより、真の基本燃料噴射量Ｆｂａｓｅｔ（ｋ−Ｎ）が算出される。
【０１２１】
一方、上記（１２）式にて使用される補正前基本燃料噴射量Ｆｂａｓｅｂ（ｋ）は、下記（１４）式に基いて求められる。
Ｆｂａｓｅｂ（ｋ）＝Ｍｃ（ｋ）／ａｂｙｆｒ（ｋ）  …（１４）
【０１２２】
そこで、第１制御装置は、上記（１２）〜（１４）式から得られる下記（１５）式に基いて基本補正値ＫＦを求め、求めた基本補正値ＫＦを同基本補正値ＫＦを算出したときの運転領域に対応させてメモリに記憶しておく。
ＫＦ＝Ｆｂａｓｅｔ（ｋ−Ｎ）／Ｆｂａｓｅｂ（ｋ−Ｎ）
＝｛ａｂｙｆｓ（ｋ）・Ｆｉ（ｋ−Ｎ）／ａｂｙｆｒ（ｋ−Ｎ）｝／｛Ｍｃ（ｋ−Ｎ）／ａｂｙｆｒ（ｋ−Ｎ）｝…（１５）
【０１２３】
基本補正値ＫＦは、上述した（１５）式により表された原理に従って構成された基本補正値算出手段Ａ１６によって算出される。以下、基本補正値算出手段Ａ１６の機能ブロック図である図７を参照しながら、基本補正値ＫＦの実際の算出の仕方について説明する。基本補正値算出手段Ａ１６は、Ａ１６ａ〜Ａ１６ｆの各手段等を含んで構成されている。
【０１２４】
最終燃料噴射量遅延手段Ａ１６ａは、今回の最終燃料噴射量Ｆｉ（ｋ）を遅延させることにより現時点からＮストローク前の最終燃料噴射量Ｆｉ（ｋ−Ｎ）を求める。実際には、最終燃料噴射量遅延手段Ａ１６ａは最終燃料噴射量Ｆｉ（ｋ−Ｎ）をＲＡＭから読み出す。
【０１２５】
目標空燃比遅延手段Ａ１６ｂは、今回の目標空燃比ａｂｙｆｒ（ｋ）を遅延させることにより現時点からＮストローク前の目標空燃比ａｂｙｆｒ（ｋ−Ｎ）を求める。実際には、目標空燃比遅延手段Ａ１６ｂは目標空燃比ａｂｙｆｒ（ｋ−Ｎ）をＲＡＭから読み出す。
【０１２６】
真の基本燃料噴射量算出手段Ａ１６ｃは、上記（１３）式（Ｆｂａｓｅｔ（ｋ−Ｎ）＝（（ａｂｙｆｓ（ｋ）・Ｆｉ（ｋ−Ｎ）／ａｂｙｆｒ（ｋ−Ｎ））に従って現時点からＮストローク前の真の基本燃料噴射量Ｆｂａｓｅｔ（ｋ−Ｎ）を求める。
【０１２７】
補正前基本燃料噴射量遅延手段Ａ１６ｄは、今回の補正前基本燃料噴射量Ｆｂａｓｅｂ（ｋ）を遅延させることにより現時点からＮストローク前の補正前基本燃料噴射量Ｆｂａｓｅｂ（ｋ−Ｎ）を求める。実際には、補正前基本燃料噴射量遅延手段Ａ１６ｄは補正前基本燃料噴射量Ｆｂａｓｅｂ（ｋ−Ｎ）をＲＡＭから読み出す。
【０１２８】
フィルタ前基本補正値算出手段Ａ１６ｅは、上述した（１５）式に基く式（ＫＦｂｆ＝Ｆｂａｓｅｔ（ｋ−Ｎ）／Ｆｂａｓｅｂ（ｋ−Ｎ））に従って、真の基本燃料噴射量Ｆｂａｓｅｔ（ｋ−Ｎ）を補正前基本燃料噴射量Ｆｂａｓｅｂ（ｋ−Ｎ）で除することにより、フィルタ前基本補正値ＫＦｂｆを算出する。
【０１２９】
ローパスフィルタＡ１６ｆは、フィルタ前基本補正値ＫＦｂｆに対してローパスフィルタ処理を施すことにより基本補正値ＫＦを算出する。このローパスフィルタ処理は、基本補正値ＫＦを安定化させるため（フィルタ前基本補正値ＫＦｂｆに重畳しているノイズ成分を除去するため）に行われる。このようにして求められた基本補正値ＫＦは、現時点からＮストローク前の運転状態が属していた運転領域に対応させられながらＲＡＭ及びバックアップＲＡＭに記憶・格納されて行く。
【０１３０】
このように、基本補正値算出手段Ａ１６は、最終燃料噴射量Ｆｉ（ｋ）の計算時点が到来する毎に、Ａ１６ａ〜Ａ１６ｆの各手段等を利用して基本補正値ＫＦを更新する。そして、基本補正値算出手段Ａ１６は、最終燃料噴射量Ｆｉ（ｋ）の算出時において機関１０の運転状態が属する運転領域に格納されている基本補正値ＫＦをバックアップＲＡＭから読み出し、読み出した基本補正値ＫＦを補正後基本燃料噴射量算出手段Ａ４に提供する。この結果、燃料噴射量（補正前基本燃料噴射量）の定常的な誤差が迅速に補償されていく。以上が、第１制御装置のメインフィードバック制御及びサブフィードバック制御の概要である。
【０１３１】
（実際の作動）
次に、第１制御装置の実際の作動について説明する。以下、説明の便宜上、「ＭａｐＸ（ａ１，ａ２，…）」は、ａ１，ａ２，…を引数とする値Ｘを求めるためのルックアップテーブルを表すものとする。また、引数の値がセンサの検出値である場合、その引数の値には現在値が適用される。
【０１３２】
＜最終燃料噴射量Ｆｉ（ｋ）の算出＞
ＣＰＵは、図８にフローチャートにより示した最終燃料噴射量Ｆｉの計算及び噴射指示を行うルーチンを、各気筒のクランク角が各吸気上死点前の所定クランク角度（例えば、ＢＴＤＣ９０°ＣＡ）となる毎に、繰り返し実行するようになっている。従って、任意の気筒のクランク角度が上記所定クランク角度になると、ＣＰＵはステップ８００から処理を開始して以下に記載したステップ８１０乃至ステップ８３０の処理を順に行い、ステップ８４０に進む。
【０１３３】
ステップ８１０：ＣＰＵは、テーブルＭａｐＭｃ（Ｇａ，ＮＥ）に基づいて今回の吸気行程を迎える気筒（以下、「燃料噴射気筒」と云うこともある。）に吸入される今回の筒内吸入空気量Ｍｃ（ｋ）を推定・決定する。筒内吸入空気量Ｍｃ（ｋ）は、周知の空気量推定モデル（吸気通路における空気の挙動を模した物理法則に従って構築されたモデル）により算出されてもよい。
【０１３４】
ステップ８２０：ＣＰＵは、下記の（１６）式に基いて目標空燃比ａｂｙｆｒ（ｋ）を決定する。目標空燃比ａｂｙｆｒ（ｋ）は各気筒の吸気行程に対応されながらＲＡＭに記憶されていく。（１６）式において、ａｂｙｆｒ０は所定の基準空燃比であり、ここでは理論空燃比ｓｔｏｉｃｈに設定されている。従って、サブフィードバック量ＫＳＦＢが大きくなれば、目標空燃比ａｂｙｆｒ（ｋ）は小さくなる。なお、目標空燃比ａｂｙｆｒ（ｋ）は、更に、吸入空気量Ｇａ及び／又は機関回転速度ＮＥ等の機関１０の運転状態に基いて補正されてもよい。
ａｂｙｆｒ（ｋ）＝ａｂｙｆｒ０−ＫＳＦＢ…（１６）
【０１３５】
ステップ８３０：ＣＰＵは、上記筒内吸入空気量Ｍｃ（ｋ）を上記目標空燃比ａｂｙｆｒ（ｋ）で除することにより、補正前基本燃料噴射量Ｆｂａｓｅｂ（ｋ）を算出する。補正前基本燃料噴射量Ｆｂａｓｅｂ（ｋ）は各気筒の吸気行程に対応されながらＲＡＭに記憶されていく。
【０１３６】
次に、ＣＰＵはステップ８４０に進み、現在の運転状態がフューエルカット条件が成立しているか否かを判定する。フューエルカット条件が成立していれば、ＣＰＵはステップ８４０にて「Ｙｅｓ」と判定してステップ８９５に直接進み、本ルーチンを一旦終了する。従って、燃料噴射の指示を行うステップ８７０が実行されないので、燃料噴射は停止される（フューエルカット運転が実行される。）。
【０１３７】
一方、ステップ８４０の判定時点においてフューエルカット条件が成立していなければ、ＣＰＵはステップ８４０にて「Ｎｏ」と判定し、以下に記載したステップ８５０乃至ステップ８７０の処理を順に行い、その後、ステップ８９５に進んで本ルーチンを一旦終了する。
【０１３８】
ステップ８５０：ＣＰＵは、後述するルーチンによって計算されるとともにバックアップＲＡＭに運転領域毎に格納されている基本補正値ＫＦの中から、現時点における運転状態が属する運転領域に格納されている基本補正値ＫＦを読み出す。なお、メインフィードバック制御条件が不成立のとき、運転状態に関わらず基本補正値ＫＦには値「１」が設定される。更に、ＣＰＵは、補正前基本燃料噴射量Ｆｂａｓｅｂ（ｋ）に、読み出した基本補正値ＫＦを乗じた値を補正後基本燃料噴射量Ｆｂａｓｅとして設定する。
【０１３９】
ステップ８６０：ＣＰＵは、上記（２）式及び上記（１１）式に従い、補正後基本燃料噴射量Ｆｂａｓｅに後述するルーチンにて求められているメインフィードバック補正値ＫＦｍａｉｎを乗じることにより、今回の最終燃料噴射量Ｆｉ（ｋ）を求める。
ステップ８７０：ＣＰＵは、最終燃料噴射量Ｆｉ（ｋ）の燃料が燃料噴射気筒に対する燃料噴射弁３３から噴射されるように、その燃料噴射弁３３に対して噴射指示を行う。
【０１４０】
以上により、補正前基本燃料噴射量Ｆｂａｓｅｂ（ｋ）が目標空燃比ａｂｙｆｒ（ｋ）と今回の筒内吸入空気量Ｍｃ（ｋ）とに基づいて取得され、その補正前基本燃料噴射量Ｆｂａｓｅｂ（ｋ）と基本補正値ＫＦとにより補正後基本燃料噴射量Ｆｂａｓｅが取得される。更に、その補正後基本燃料噴射量Ｆｂａｓｅがメインフィードバック補正値ＫＦｍａｉｎにより補正されることにより最終的な燃料噴射量（最終燃料噴射量）Ｆｉ（ｋ）が求められ、その最終燃料噴射量Ｆｉ（ｋ）の燃料の噴射指示が燃料噴射気筒の燃料噴射弁３３に対してなされる。
【０１４１】
＜メインフィードバック補正値の計算＞
ＣＰＵは図９にフローチャートにより示したルーチンを実行周期Δｔ１（一定）の経過毎に繰り返し実行するようになっている。従って、所定のタイミングにてＣＰＵはステップ９００から処理を開始し、以下に記載したステップ９０５及びステップ９１０の処理を順に行い、ステップ９１５に進む。なお、この実行周期Δｔ１は、例えば、機関回転速度ＮＥが想定される最大の機関回転速度である場合における連続する二つの噴射指示の発生時間間隔より短い時間に設定されている。
【０１４２】
ステップ９０５：ＣＰＵは、ステップ９０５に記載した簡易のローパスフィルタ式（ａｂｙｆｒｔｇｔ（ｋ）＝α・ａｂｙｆｒｔｇｔｏｌｄ＋（１−α）・ａｂｙｆｒ（ｋ−Ｎ））に従ってメインフィードバック制御用目標空燃比ａｂｙｆｒｔｇｔ（ｋ）を求める。ここで、αは０より大きく１より小さい定数であり、上記ローパスフィルタＡ１２の時定数τに応じて設定されている。ａｂｙｆｒｔｇｔｏｌｄは、「前回本ルーチンを実行した際にステップ９１０にて算出されたメインフィードバック制御用目標空燃比ａｂｙｆｒｔｇｔ」である。ａｂｙｆｒｔｇｔｏｌｄは、前回メインフィードバック制御用目標空燃比と称呼される。ａｂｙｆｒ（ｋ−Ｎ）は、現時点からＮストローク前の実際の上流側目標空燃比である。
【０１４３】
ステップ９１０：ＣＰＵは、次回の本ルーチンの実行のために、前回メインフィードバック制御用目標空燃比ａｂｙｆｒｔｇｔｏｌｄにステップ９０５にて算出したメインフィードバック制御用目標空燃比ａｂｙｆｒｔｇｔ（ｋ）を格納する。
【０１４４】
次に、ＣＰＵはステップ９１５に進み、メインフィードバック制御条件成立フラグＸｍａｉｎＦＢの値が「１」であるか否かを判定する。メインフィードバック制御条件成立フラグＸｍａｉｎＦＢの値は、メインフィードバック制御条件が成立したときに「１」に設定され、メインフィードバック制御条件が不成立のとき「０」に設定される。
【０１４５】
メインフィードバック制御条件は、例えば以下の総ての条件が成立するとき成立する。
・上流側空燃比センサ５６が活性化している。
・フューエルカット条件が成立していない（フューエルカット運転状態でない。）。
【０１４６】
いま、メインフィードバック制御条件成立フラグＸｍａｉｎＦＢの値が「１」であるとすると、ＣＰＵは、以下に記載したステップ９２０乃至ステップ９３５の処理を順に行い、ステップ９９５に進んで本ルーチンを一旦終了する。
【０１４７】
ステップ９２０：ＣＰＵは、現時点の上流側空燃比センサ５６の出力値Ｖａｂｙｆｓを図２により示したテーブルＭａｐａｂｙｆｓ（ｖａｂｙｆｓ）に基づいて変換することにより、現時点の検出空燃比ａｂｙｆｓ（ｋ）を求める。
ステップ９２５：ＣＰＵは、上記（８）式であるステップ９２５内に記載した式に従ってメインフィードバック制御用目標空燃比ａｂｙｆｒｔｇｔ（ｋ）から今回の検出空燃比ａｂｙｆｓ（ｋ）を減じることにより、空燃比偏差Ｄａｆを求める。
【０１４８】
ステップ９３０：ＣＰＵは、空燃比偏差Ｄａｆに上記（９）式により表された特性を有するハイパスフィルタ処理を施すことにより、メインフィードバック制御用偏差ＤａｆＨｉを取得する。
【０１４９】
ステップ９３５：ＣＰＵは、メインフィードバック制御用偏差ＤａｆＨｉに比例ゲインＧｐＨｉを乗じて得られる積に値「１」を加えることにより、メインフィードバック補正値ＫＦｍａｉｎを求める。
【０１５０】
一方、メインフィードバック制御条件成立フラグＸｍａｉｎＦＢの値が「０」であるとすると、ＣＰＵは、ステップ９１５から以下に記載したステップ９４０及びステップ９４５の処理を順に行い、ステップ９９５に進んで本ルーチンを一旦終了する。
【０１５１】
ステップ９４０：ＣＰＵは、メインフィードバック補正値ＫＦｍａｉｎを「１」に設定する。
ステップ９４５：ＣＰＵは、基本補正値ＫＦを「１」に設定する。
【０１５２】
このように、メインフィードバック制御条件が不成立（ＸｍａｉｎＦＢ＝０）の場合、メインフィードバック補正値ＫＦｍａｉｎの更新が停止されるとともに、メインフィードバック補正値ＫＦｍａｉｎの値が「１」に設定されるので、メインフィードバック制御が停止される（メインフィードバック補正値ＫＦｍａｉｎの最終燃料噴射量Ｆｉへの反映が停止される）。また、メインフィードバック制御条件が不成立（ＸｍａｉｎＦＢ＝０）の場合、基本補正値ＫＦの値が「１」に設定されるので、基本補正値ＫＦの最終燃料噴射量Ｆｉへの反映が停止される。
【０１５３】
＜基本補正値の計算と記憶・格納＞
ＣＰＵは図１０にフローチャートにより示したルーチンを、図８に示したルーチンの実行に先だって繰り返し実行するようになっている。従って、所定のタイミングにてＣＰＵはステップ１０００から処理を開始し、ステップ１００５に進んでメインフィードバック制御条件成立フラグＸｍａｉｎＦＢの値が「１」であるか否かを判定する。いま、メインフィードバック制御条件成立フラグＸｍａｉｎＦＢの値が「１」であるとすると、ＣＰＵは、以下に記載したステップ１０１０乃至１０３０の処理を順に行い、ステップ１０９５に進んで本ルーチンを一旦終了する。
【０１５４】
ステップ１０１０：ＣＰＵは、上記（１３）式であるステップ１０１０内に記載した式に従って「現時点からＮストローク前の真の基本燃料噴射量Ｆｂａｓｅｔ」を算出する。なお、現時点からＮストローク前の最終燃料噴射量Ｆｉ（ｋ−Ｎ）及び現時点からＮストローク前の目標空燃比ａｂｙｆｒ（ｋ−Ｎ）は、いずれもＲＡＭから読み出される。
【０１５５】
ステップ１０１５：ＣＰＵは、上記（１５）式と同じ式であるステップ１０１５に記載した式に基いて、現時点からＮストローク前の真の基本燃料噴射量Ｆｂａｓｅｔを現時点からＮストローク前の補正前基本燃料噴射量Ｆｂａｓｅｂ（ｋ−Ｎ）により除することによって、基本補正値ＫＦの基礎となる今回値ＫＦｎｅｗ（フィルタ前基本補正値ＫＦｂｆ）を算出する。なお、現時点からＮストローク前の補正前基本燃料噴射量Ｆｂａｓｅｂ（ｋ−Ｎ）はＲＡＭから読み出される。
【０１５６】
ステップ１０２０：ＣＰＵは、現時点からＮストローク前の時点における機関１０の運転状態が属する運転領域に対応してバックアップＲＡＭ内に格納してある基本補正値ＫＦを同バックアップＲＡＭから読み出す。この読み出された基本補正値ＫＦは、過去の基本補正値ＫＦｏｌｄである。
ステップ１０２５：ＣＰＵは、ステップ１０２５に記載した簡易のローパスフィルタ式（ＫＦ＝β・ＫＦｏｌｄ＋（１−β）・ＫＦｎｅｗ）に従って新たな基本補正値ＫＦ（最終基本補正値ＫＦ）を算出する。ここで、βは０より大きく１より小さい定数である。
【０１５７】
ステップ１０３０：ＣＰＵは、ステップ１０２５にて求められた基本補正値ＫＦを、現時点からＮストローク前の時点における機関１０の運転状態が属する運転領域に対応したバックアップＲＡＭ内の格納領域に記憶・格納する。このようにして、基本補正値ＫＦが更新され、且つ、記憶されて行く。
【０１５８】
一方、メインフィードバック制御条件成立フラグＸｍａｉｎＦＢの値が「０」であると、ＣＰＵはステップ１００５にて「Ｎｏ」と判定し、ステップ１０９５に直ちに進んで本ルーチンを一旦終了する。この場合、基本補正値ＫＦの更新及びバックアップＲＡＭへの記憶・格納処理は実行されない。
【０１５９】
なお、基本補正値ＫＦｎｅｗの値をそのまま新たな基本補正値ＫＦとして採用してもよい。その場合、ステップ１０２０を省略し、ステップ１０２５における定数βを「０」に設定すればよい。
【０１６０】
＜サブフィードバック量の計算＞
ＣＰＵは図１１にフローチャートにより示したルーチンを、所定時間が経過する毎に繰り返し実行するようになっている。従って、所定のタイミングになるとＣＰＵはステップ１１００から処理を開始し、ステップ１１０５に進んでサブフィードバック制御条件が成立しているか否かを判定する。サブフィードバック制御条件はメインフィードバック制御条件が成立し、且つ、下流側空燃比センサ５７が活性化していると判定されるときに成立する。
【０１６１】
いま、サブフィードバック制御条件が成立しているものとして説明を続ける。この場合、ＣＰＵは以下に記載したステップ１１１０乃至ステップ１１２０の処理を順に行い、ステップ１１２５に進む。
【０１６２】
ステップ１１１０：ＣＰＵは、上記（３）式であるステップ１１１０内に記載した式に従って、下流側目標値Ｖｏｘｓｒｅｆから現時点の下流側空燃比センサ５７の出力値Ｖｏｘｓを減じることにより、出力偏差量ＤＶｏｘｓを求める。
ステップ１１１５：ＣＰＵは、出力偏差量ＤＶｏｘｓに対して上記（４）式により表された特性を有するローパスフィルタ処理を施すことによりローパスフィルタ通過後出力偏差量ＤＶｏｘｓｌｏｗを算出する。
【０１６３】
ステップ１１２０：ＣＰＵは、下記（１７）式に基づきローパスフィルタ通過後出力偏差量ＤＶｏｘｓｌｏｗの微分値ＤＤＶｏｘｓｌｏｗを求める。（１７）式において、ＤＶｏｘｓｌｏｗｏｌｄは前回の本ルーチン実行時において「後述するステップ１１５０にて設定（更新）されたローパスフィルタ通過後出力偏差量ＤＶｏｘｓｌｏｗ」である。また、Δｔは本ルーチンが前回実行された時点から今回実行された時点までの時間である。
ＤＤＶｏｘｓｌｏｗ＝（ＤＶｏｘｓｌｏｗ−ＤＶｏｘｓｌｏｗｏｌｄ）／Δｔ  …（１７）
【０１６４】
次に、ＣＰＵはステップ１１２５に進み、下流側空燃比センサ５７の出力値Ｖｏｘｓが所定の下流側目標値Ｖｏｘｓｒｅｆ以上であるか否かを判定する。本例において、下流側目標値Ｖｏｘｓｒｅｆは、理論空燃比に相当する値Ｖｓｔ（例えば、０．５Ｖ）よりも大きい値（例えば、０．７Ｖ）に設定されている。なお、下流側目標値Ｖｏｘｓｒｅｆは、例えば、吸入空気量Ｇａが大きくなるほど、理論空燃比に相当する値Ｖｓｔから次第に大きくなる値に設定されてもよい。下流側目標値Ｖｏｘｓｒｅｆは、吸入空気量Ｇａの他、機関１０の負荷、機関回転速度ＮＥ、上流側触媒４３の温度、及び、最大酸素吸蔵量Ｃｍａｘ等により変更されてもよい。
【０１６５】
このとき、出力値Ｖｏｘｓが下流側目標値Ｖｏｘｓｒｅｆ以上であれば、ＣＰＵはステップ１１３０に進んで調整ゲインＫに「大ゲインＫｌａｒｇｅ」を設定する。これに対し、出力値Ｖｏｘｓが下流側目標値Ｖｏｘｓｒｅｆ未満であれば、ＣＰＵはステップ１１３５に進んで調整ゲインＫに「大ゲインＫｌａｒｇｅよりも小さい小ゲインＫｓｍａｌｌ」を設定する。大ゲインＫｌａｒｇｅ及び小ゲインＫｓｍａｌｌは、後述する図１２に示したルーチンにより決定されている。
【０１６６】
次に、ＣＰＵは以下に述べるステップ１１４０乃至ステップ１１５０の処理を順に行い、ステップ１１６０に進む。
【０１６７】
ステップ１１４０：ＣＰＵは、上記（５）式であるステップ１１４０内に示した式に従って時間積分値ＳＤＶｏｘｓｌｏｗを求める。
ステップ１１４５：ＣＰＵは、上記（６）式であるステップ１１４５内に示した式に従ってサブフィードバック量ＫＳＦＢを求める。
ステップ１１５０：ＣＰＵは、ローパスフィルタ通過後出力偏差量ＤＶｏｘｓｌｏｗの前回値ＤＶｏｘｓｌｏｗｏｌｄに上記ステップ１１１０にて求めたローパスフィルタ通過後出力偏差量ＤＶｏｘｓｌｏｗを格納する。
【０１６８】
次に、ＣＰＵはステップ１１６０に進み、前回のサブＦＢ学習値ＫＳＦＢｇの更新時点から学習間隔時間Ｔｔｈが経過しているか否かを判定する。このとき、前回のサブＦＢ学習値ＫＳＦＢｇの更新時点から学習間隔時間Ｔｔｈが経過していなければ、ＣＰＵはステップ１１６０にて「Ｎｏ」と判定し、ステップ１１９５に直接進んで本ルーチンを一旦終了する。
【０１６９】
これに対し、ＣＰＵがステップ１１６０の処理を実行する時点において、前回のサブＦＢ学習値ＫＳＦＢｇの更新時点から学習間隔時間Ｔｔｈが経過していると、ＣＰＵはステップ１１６０にて「Ｙｅｓ」と判定してステップ１１６５に進み、時間積分値ＳＤＶｏｘｓｌｏｗをサブＦＢ学習値ＫＳＦＢｇとしてバックアップＲＡＭに格納する。このように、ＣＰＵは、サブフィードバック量ＫＳＦＢが更新される期間よりも長い期間が経過した時点における「サブフィードバック量ＫＳＦＢの定常成分に応じた時間積分値ＳＤＶｏｘｓｌｏｗ」を、サブＦＢ学習値ＫＳＦＢｇとして取り込む。
【０１７０】
次に、ＣＰＵはステップ１１７０に進み、サブＦＢ学習値ＫＳＦＢｇの過去の値の変動中心（荷重平均値）Ｖｃを下記（１８）式に従って更新する。γはαは０より大きく１より小さい定数である。Ｖｃ（ｎ）は更新後の中心値Ｖｃであり、Ｖｃ（ｎ−１）は更新前の中心値Ｖｃである。
Ｖｃ（ｎ）＝γ・Ｖｃ（ｎ−１）＋（１−γ）・ＫＳＦＢｇ  …（１８）
【０１７１】
一方、ステップ１１０５の判定時において、サブフィードバック制御条件が不成立であると、ＣＰＵはステップ１１０５にて「Ｎｏ」と判定してステップ１１７５に進み、サブフィードバック量ＫＳＦＢに「積分ゲインＫｉとサブＦＢ学習値ＫＳＦＢｇとの積」を代入する。次に、ＣＰＵはステップ１１８０にて積分値ＳＤＶｏｘｓｌｏｗにサブＦＢ学習値ＫＳＦＢｇを設定した後、ステップ１１９５に進んで本ルーチンを一旦終了する。
【０１７２】
＜調整ゲインＫの設定＞
ＣＰＵは、調整ゲインＫに使用される「大ゲインＫｌａｒｇｅ及び小ゲインＫｓｍａｌｌ」を決定するために、図１２にフローチャートにより示したルーチンを所定時間が経過する毎に繰り返し実行するようになっている。
【０１７３】
従って、所定のタイミングになると、ＣＰＵは図１２のステップ１２００から処理を開始し、ステップ１２０５に進んでステータス（ｓｔａｔｕｓ）が更新された直後か否かを判定する。ｓｔａｔｕｓは、後述する図１３乃至図１６に示したルーチンにより更新される。なお、このｓｔａｔｕｓの更新には、後述する図１３のステップ１３３０におけるｓｔａｔｕｓの初期化設定も含まれる。
【０１７４】
現時点が、ｓｔａｔｕｓの初期化設定がなされた直後であるか、又は、ｓｔａｔｕｓが更新された直後であると、ＣＰＵはステップ１２０５にて「Ｙｅｓ」と判定してステップ１２１０に進み、大ゲインＫｌａｒｇｅをテーブルＭａｐＫｌａｒｇｅ（Ｃｍａｘ，ｓｔａｔｕｓ）に基いて決定するとともに、小ゲインＫｓｍａｌｌをテーブルＭａｐＫｓｍａｌｌ（Ｃｍａｘ，ｓｔａｔｕｓ）に基いて決定する。
【０１７５】
図１２のステップ１２１０内に記載したように、テーブルＭａｐＫｌａｒｇｅ（Ｃｍａｘ，ｓｔａｔｕｓ）によれば、最大酸素吸蔵量Ｃｍａｘが一定の場合において、ｓｔａｔｕｓ０での大ゲインＫｌａｒｇｅがｓｔａｔｕｓ１での大ゲインＫｌａｒｇｅよりも大きく、且つ、ｓｔａｔｕｓ１での大ゲインＫｌａｒｇｅがｓｔａｔｕｓ２での大ゲインＫｌａｒｇｅよりも大きくなるように、大ゲインＫｌａｒｇｅが決定される。
【０１７６】
同様に、テーブルＭａｐＫｓｍａｌｌ（Ｃｍａｘ，ｓｔａｔｕｓ）によれば、最大酸素吸蔵量Ｃｍａｘが一定の場合において、ｓｔａｔｕｓ０での小ゲインＫｓｍａｌｌがｓｔａｔｕｓ１での小ゲインＫｓｍａｌｌよりも大きく、且つ、ｓｔａｔｕｓ１での小ゲインＫｓｍａｌｌがｓｔａｔｕｓ２での小ゲインＫｓｍａｌｌよりも大きくなるように、小ゲインＫｓｍａｌｌが決定される。
【０１７７】
更に、テーブルＭａｐＫｌａｒｇｅ（Ｃｍａｘ，ｓｔａｔｕｓ）及びテーブルＭａｐＫｓｍａｌｌ（Ｃｍａｘ，ｓｔａｔｕｓ）によれば、最大酸素吸蔵量Ｃｍａｘ及びステータスの値が同じである場合、大ゲインＫｌａｒｇｅの方が小ゲインＫｓｍａｌｌよりも常に大きくなるように、大ゲインＫｌａｒｇｅ及び小ゲインＫｓｍａｌｌが決定される。加えて、大ゲインＫｌａｒｇｅ及び小ゲインＫｓｍａｌｌは、各ｓｔａｔｕｓにおいて最大酸素吸蔵量Ｃｍａｘが大きいほど、より小さい値となるように決定される。
【０１７８】
なお、上流側触媒４３の最大酸素吸蔵量Ｃｍａｘは、上流側触媒４３が吸蔵し得る酸素の量の最大値であり、所謂、アクティブ空燃比制御によって別途取得されている。最大酸素吸蔵量Ｃｍａｘは、触媒の劣化が進むほど小さくなる。アクティブ空燃比制御は、例えば、特開平５−１３３２６４号公報等に記載された周知の制御である。従って、ここではその詳細な説明を省略する。最大酸素吸蔵量Ｃｍａｘは、取得される毎にバックアップＲＡＭに記憶・更新されるようになっている。
【０１７９】
一方、ＣＰＵがステップ１２０５の処理を実行する時点において、現時点が、ｓｔａｔｕｓの初期化設定がなされた直後、及び、ステータス（ｓｔａｔｕｓ）が更新された直後、の何れでもなければ、ＣＰＵはステップ１２０５からステップ１２９５に直接進んで本ルーチンを一旦終了する。
【０１８０】
＜ｓｔａｔｕの初期設定＞
次に、学習進行程度等を表す「ｓｔａｔｕｓ（ステータス）」を初期設定する際のＣＰＵの作動について説明する。ｓｔａｔｕｓＮ（Ｎ＝０、１、２）は、上述したように定義されている。
【０１８１】
以下、説明の便宜上、現時点が内燃機関１０の始動直後であり、且つ、この機関始動前に「電気制御装置７０に電力を供給するためのバッテリ」の交換がなされていたと仮定する。ＣＰＵは図１３にフローチャートにより示した「ｓｔａｔｕｓ初期設定ルーチン」を、内燃機関１０の始動時点以降、所定時間が経過する毎に実行するようになっている。
【０１８２】
従って、内燃機関１０の始動時点以降において所定のタイミングが到来すると、ＣＰＵステップ１３００から処理を開始し、ステップ１３１０に進んで「現時点が、内燃機関１０の始動直後であるか否か」を判定する。
【０１８３】
前述の仮定に従うと、現時点は内燃機関１０の始動直後である。従って、ＣＰＵはステップ１３１０にて「Ｙｅｓ」と判定し、ステップ１３２０に進んで「電気制御装置７０に電力を供給するためのバッテリ」交換がなされたか否かを判定する。このとき、前述の仮定に従うと、事前にバッテリが交換されている。従って、ＣＰＵはステップ１３２０にて「Ｙｅｓ」と判定してステップ１３３０に進み、ｓｔａｔｕｓを「０」に設定・更新する。この「ｓｔａｔｕｓ」の値は、その値が更新される毎にバックアップＲＡＭに記憶・更新される。
【０１８４】
次に、ＣＰＵは、ステップ１３４０に進んでカウンタＣＩをクリアし（「０」に設定し）、続くステップ１３４５にて次の処理を行う。
ＣＰＵは、「バックアップＲＡＭに記憶されているサブＦＢ学習値ＫＳＦＢｇ」を「０（初期値、デフォルト値）」に設定する。
ＣＰＵは、時間積分値ＳＤＶｏｘｓｌｏｗを「０（初期値、デフォルト値）」に設定する。
ＣＰＵは、中心値Ｖｃを「０（初期値、デフォルト値）」に設定する。
ＣＰＵは、判定基準値Ｖｋｉｊｕｎを「０（初期値、デフォルト値）」に設定する。
その後、ＣＰＵはステップ１３９５に進み、本ルーチンを一旦終了する。
【０１８５】
なお、ＣＰＵがステップ１３２０に進んだとき、バッテリ交換がされていないと判定した場合、ＣＰＵはそのステップ１３２０にて「Ｎｏ」と判定してステップ１３５０に進み、バックアップＲＡＭに記憶されているｓｔａｔｕｓを読み出す。次いで、ＣＰＵはステップ１３５５にて、「図１１のステップ１１７０において算出されている中心値Ｖｃ」及び「判定基準値Ｖｋｉｊｕｎ」をバックアップＲＡＭから読み出す。判定基準値Ｖｋｉｊｕｎは、「ｓｔａｔｕｓ（ステータス）」の判定のために設定される閾値の基準となる値であり、後述する図１５のステップ１５４０にて更新される。
【０１８６】
以降、ＣＰＵはステップ１３１０にて「Ｎｏ」と判定し、ステップ１３９５に直接進んで本ルーチンを一旦終了するようになる。
【０１８７】
＜ｓｔａｔｕｓ判定その１（第１ステータス判定）＞
ＣＰＵは、ｓｔａｔｕｓ判定を行うために、所定時間が経過する毎に図１４にフローチャートにより示した「第１ステータス判定ルーチン」を実行するようになっている。従って、所定のタイミングになると、ＣＰＵは図１４のステップ１４００から処理を開始してステップ１４１０に進み、サブフィードバック制御条件が成立しているか否かを判定する。
【０１８８】
このとき、サブフィードバック制御条件が成立していなければ、ＣＰＵはステップ１４１０にて「Ｎｏ」と判定してステップ１４２０に進む。そして、ＣＰＵはステップ１４２０にてカウンタＣＩを「０」に設定し、その後、ステップ１４９５に直接進んで本ルーチンを一旦終了する。なお、カウンタＣＩは、機関１０が搭載された車両の図示しないイグニッション・キー・スイッチがオフ位置からオン位置に切り換えられた際に実行される図示しないイニシャルルーチンにより「０」に設定されるようになっている。
【０１８９】
これに対し、ＣＰＵがステップ１４１０に進んだとき、サブフィードバック制御条件が成立していると、ＣＰＵはステップ１４１０にて「Ｙｅｓ」と判定してステップ１４３０に進み、現時点が「サブＦＢ学習値ＫＳＦＢｇが更新された直後の時点」であるか否か（図１１のステップ１１６５及びステップ１１７０の処理を行った直後であるか否か）を判定する。
【０１９０】
このとき、現時点が「サブＦＢ学習値ＫＳＦＢｇが更新された直後の時点」でなければ、ＣＰＵはステップ１４３０にて「Ｎｏ」と判定し、ステップ１４９５に直接進んで本ルーチンを一旦終了する。
【０１９１】
これに対し、ＣＰＵがステップ１４３０に進んだとき、現時点が「サブＦＢ学習値ＫＳＦＢｇが更新された直後の時点」であると、ＣＰＵはそのステップ１４３０にて「Ｙｅｓ」と判定してステップ１４４０に進み、ｓｔａｔｕｓが「０」である（ステータスがｓｔａｔｕｓ０である）か否かを判定する。このとき、ｓｔａｔｕｓが「０」でなければ、ＣＰＵはステップ１４４０にて「Ｎｏ」と判定し、ステップ１４９５に直接進んで本ルーチンを一旦終了する。
【０１９２】
これに対し、ＣＰＵがステップ１４４０に進んだとき、ｓｔａｔｕｓが「０」であると、ＣＰＵはそのステップ１４４０にて「Ｙｅｓ」と判定してステップ１４５０に進み、カウンタＣＩを「１」だけ増大する。次いで、ＣＰＵはステップ１４６０に進み、カウンタＣＩが更新回数閾値ＣＩｔｈ以上であるか否かを判定する。このとき、カウンタＣＩが更新回数閾値ＣＩｔｈよりも小さいと、ＣＰＵはステップ１４６０にて「Ｎｏ」と判定し、ステップ１４９５に直接進んで本ルーチンを一旦終了する。
【０１９３】
これに対し、ＣＰＵがステップ１４６０に進んだとき、カウンタＣＩが更新回数閾値ＣＩｔｈ以上であると、ＣＰＵはそのステップ１４６０にて「Ｙｅｓ」と判定してステップ１４７０に進み、ｓｔａｔｕｓを「１」に設定・更新する（ステータスをｓｔａｔｕｓ１に設定する）。
【０１９４】
このように、ｓｔａｔｕｓが「０」であるとき、サブＦＢ学習値ＫＳＦＢｇの更新が更新回数閾値ＣＩｔｈ以上行われると、ｓｔａｔｕｓは「１」に変更される。これは、サブＦＢ学習値ＫＳＦＢｇの更新が更新回数閾値ＣＩｔｈ以上行われた時点においては、サブＦＢ学習値ＫＳＦＢｇはある程度まで収束値に接近したであろうと判断できるからである。なお、ステップ１４２０を省略してもよい。また、ステップ１４７０の実行後にカウンタＣＩを「０」に設定してもよい。更に、図１４のルーチン自体を省略してもよい。
【０１９５】
＜ｓｔａｔｕｓ判定その２（第２ステータス判定）＞
ＣＰＵは、ｓｔａｔｕｓ判定を行うために、所定時間が経過する毎に図１５にフローチャートにより示した「第２ステータス判定ルーチン」を実行するようになっている。以下においては、機関１０の始動前に「電気制御装置７０に電力を供給するためのバッテリ」が交換されたことによって、ｓｔａｔｕｓが図１３のステップ１３３０にて「０」に設定され、且つ、ステップ１３４５にてサブＦＢ学習値ＫＳＦＢｇが「０」に設定されたと仮定して説明を行う。更に、現時点は機関１０の始動直後であると仮定する。
【０１９６】
ＣＰＵは、所定のタイミングになると、図１５のステップ１５００から処理を開始してステップ１５０５に進み、サブフィードバック制御条件が成立しているか否かを判定する。機関１０の始動直後においては、サブフィードバック制御条件は一般に成立しない。従って、ＣＰＵはステップ１５０５にて「Ｎｏ」と判定してステップ１５５０に進み、カウンタＣＬを「０」に設定する。なお、カウンタＣＬは、上述したイニシャルルーチンにより「０」に設定されるようになっている。その後、ＣＰＵはステップ１５９５に直接進んで本ルーチンを一旦終了する。
【０１９７】
この場合、ＣＰＵは図１１のステップ１１０５からステップ１１７５に進むので、ステップ１１６５の処理は実行されない。従って、サブＦＢ学習値ＫＳＦＢｇは「０」に維持される。
【０１９８】
その後、機関１０の運転が継続すると、サブフィードバック制御条件が成立する。これにより、図１１のルーチンにより、サブフィードバック量ＫＳＦＢが更新される。このとき、図１３のステップ１３３０におけるｓｔａｔｕｓの初期化（「０」への設定）がなされているので、調整ゲインＫは、図１２に示したルーチンにより、ｓｔａｔｕｓが「０」であるときの「大ゲインＫｌａｒｇｅ及び小ゲインＫｓｍａｌｌ」の何れかに設定される。
【０１９９】
係る状態において、ＣＰＵが図１５のステップ１５０５に進むと、ＣＰＵはそのステップ１５０５にて「Ｙｅｓ」と判定してステップ１５１０に進む。そして、ＣＰＵは、ステップ１５１０にて、現時点がサブＦＢ学習値ＫＳＦＢｇの更新直後の時点であるか否かを判定する。このとき、現時点がサブＦＢ学習値ＫＳＦＢｇの更新直後の時点でなければ、ＣＰＵはステップ１５１０にて「Ｎｏ」と判定し、ステップ１５９５に直接進んで本ルーチンを一旦終了する。
【０２００】
一方、現時点がサブＦＢ学習値ＫＳＦＢｇの更新直後の時点であると、ＣＰＵはステップ１５１０にて「Ｙｅｓ」と判定してステップ１５１５に進み、カウンタＣＬを「１」だけ増大する。次いで、ＣＰＵはステップ１５２０に進み、サブＦＢ学習値ＫＳＦＢｇ（本例においては、時間積分値ＳＤＶｏｘｓｌｏｗ）の最大値Ｖｇｍａｘ及び最小値Ｖｇｍｉｎを更新する。このサブＦＢ学習値ＫＳＦＢｇの最大値Ｖｇｍａｘ及び最小値Ｖｇｍｉｎは、カウンタＣＬが「０」から次のステップ１５２５にて用いられる閾値ＣＬｔｈに至るまでの期間（サブＦＢ学習値ＫＳＦＢｇの収束度を判定するための所定時間）におけるサブＦＢ学習値ＫＳＦＢｇの最大値及び最小値となる。
【０２０１】
次に、ＣＰＵはステップ１５２５に進み、カウンタＣＬが閾値ＣＬｔｈ以上であるか否かを判定する。このとき、カウンタＣＬが閾値ＣＬｔｈよりも小さいと、ＣＰＵはステップ１５２５にて「Ｎｏ」と判定し、ステップ１５９５に直接進んで本ルーチンを一旦終了する。
【０２０２】
その後、時間が経過すると、サブＦＢ学習値ＫＳＦＢｇが更新される毎に（即ち、学習間隔時間Ｔｔｈが経過する毎に）ステップ１５１５の処理が実行される。従って、カウンタＣＬは閾値ＣＬｔｈに到達する。このとき、ＣＰＵがステップ１５２５に進むと、ＣＰＵはそのステップ１５２５にて「Ｙｅｓ」と判定してステップ１５３０に進み、カウンタＣＬを「０」に設定する。
【０２０３】
次に、ＣＰＵはステップ１５３５に進み、図１６に示したルーチンを実行する。即ち、ＣＰＵは図１６のステップ１６００から処理を開始してステップ１６０５に進み、ｓｔａｔｕｓが「０」であるか否かを判定する。前述の仮定に従えば、ｓｔａｔｕｓは「０」であるから、ＣＰＵはステップ１６０５にて「Ｙｅｓ」と判定してステップ１６１０に進み、判定基準値Ｖｋｉｊｕｎに「所定の正の特定値である第１値ΔＶ０」を加えた値（Ｖｋｉｊｕｎ＋ΔＶ０）を上限値（大側閾値）Ｖｇｍａｘｔｈとして設定する。更に、ＣＰＵは、判定基準値Ｖｋｉｊｕｎから「第１値ΔＶ０」を減じた値（Ｖｋｉｊｕｎ−ΔＶ０）を下限値（小側閾値）Ｖｇｍｉｎｔｈとして設定する。なお、この時点における判定基準値Ｖｋｉｊｕｎの値は「０」である。
【０２０４】
次に、ＣＰＵはステップ１６１５に進み、図１５のステップ１５２０にて取得した最大値Ｖｇｍａｘが上限値Ｖｇｍａｘｔｈ以下であり、且つ、図１５のステップ１５２０にて取得した最小値Ｖｇｍｉｎが下限値Ｖｇｍｉｎｔｈ以上であるか否かを判定する。即ち、ＣＰＵは、状態判定期間（カウンタＣＬが０から閾値ＣＬｔｈに至るまでの所定時間）におけるサブＦＢ学習値ＫＳＦＢｇが、下限値Ｖｇｍｉｎｔｈと上限値Ｖｇｍａｘｔｈとにより規定される閾値幅内であったか否かを判定する。
【０２０５】
ところで、前述の仮定に従えば、機関始動前にバッテリ交換がなされため、サブＦＢ学習値ＫＳＦＢｇは図１３のステップ１３４５にて「０」に設定されている。この場合、一般に、サブＦＢ学習値ＫＳＦＢｇと収束値ＳＤＶｏｘｓｆｉｎａｌとの差は大きいので、サブフィードバック量ＫＳＦＢ及びサブＦＢ学習値ＫＳＦＢｇの変化速度は大きい。従って、最大値Ｖｇｍａｘが上限値Ｖｇｍａｘｔｈよりも大きいか、又は、最小値Ｖｇｍｉｎが下限値Ｖｇｍｉｎｔｈよりも小さい。
【０２０６】
このため、ＣＰＵはステップ１６１５にて「Ｎｏ」と判定し、ステップ１６９５を経由して図１５のステップ１５４０に進み、判定基準値Ｖｋｉｊｕｎに中心値Ｖｃを設定する。中心値Ｖｃは、図１１のステップ１１７０にて算出されている。従って、ＣＰＵは、ステップ１５３５にてステータス判定が実行される時点において、その時点から状態判定期間（カウンタＣＬが０から閾値ＣＬｔｈに至るまでの期間）前の時点から、その時点まで、の期間におけるサブＦＢ学習値ＫＳＦＢｇの加重平均（一次遅れ相当値である中心値Ｖｃ）を、判定基準値Ｖｋｉｊｕｎとして設定する。その後、ＣＰＵはステップ１５９５に進み、本ルーチンを一旦終了する。この結果、ｓｔａｔｕｓは「０」に維持される。
【０２０７】
この状態においては、ｓｔａｔｕｓが「０」であるため、調整ゲインＫ（大ゲインＫｌａｒｇｅ及び小ゲインＫｓｍａｌｌ）は大きい値に設定される（図１２のステップ１２１０及び図１１のステップ１１２５乃至ステップ１１３５を参照）。これにより、時間積分値ＳＤＶｏｘｓの１回あたりの更新量Ｋ・ＤＶｏｘｓ（の絶対値）が大きい値に設定される。即ち、大きな調整ゲインＫを用いることにより、サブフィードバック量ＫＳＦＢ及び時間積分値ＳＤＶｏｘｓ（即ち、サブＦＢ学習値ＫＳＦＢｇ）の更新が迅速に行われる。従って、サブＦＢ学習値ＫＳＦＢｇ（時間積分値ＳＤＶｏｘｓ）は、「０（初期値、デフォルト値）」から大きい変化速度をもって収束値ＳＤＶｏｘｓｆｉｎａｌに収束（接近）していく。
【０２０８】
この状態が継続すると、サブＦＢ学習値ＫＳＦＢｇは収束値ＳＤＶｏｘｓｆｉｎａｌに接近し、収束値ＳＤＶｏｘｓｆｉｎａｌ近傍において比較的穏やかに変化するようになる。この結果、最大値Ｖｇｍａｘは「ステップ１６１０にて算出される上限値Ｖｇｍａｘｔｈ」以下となり、且つ、最小値Ｖｇｍｉｎは「ステップ１６１０にて算出される下限値Ｖｇｍｉｎｔｈ」以上となる。このとき、ＣＰＵが図１６のステップ１６１５に進むと、ＣＰＵはそのステップ１６１５にて「Ｙｅｓ」と判定し、ステップ１６２０に進んでｓｔａｔｕｓを「１」に設定する。その後、ＣＰＵはステップ１６９５を経由して図１５のステップ１５４０に進む。
【０２０９】
なお、ｓｔａｔｕｓが「０」であるときにステップ１６１５の条件が成立しない場合であっても、前述した図１４のステップ１４６０の条件（カウンタＣＩが更新回数閾値ＣＩｔｈ以上となる条件）が成立すれば、ステップ１４７０にてｓｔａｔｕｓは「１」に変更される。
【０２１０】
このように、ｓｔａｔｕｓが「１」に設定・更新された状態において、ＣＰＵが図１２のステップ１２１０に進むと、ＣＰＵはそのステップ１２１０にて、ｓｔａｔｕｓ１に対応付けられている「テーブルＭａｐＫｌａｒｇｅ（Ｃｍａｘ，ｓｔａｔｕｓ）及びＭａｐＫｓｍａｌｌ（Ｃｍａｘ，ｓｔａｔｕｓ）」に基いて大ゲインＫｌａｒｇｅ及び小ゲインＫｓｍａｌｌをそれぞれ決定する。
【０２１１】
その結果、大きい値に設定されていた調整ゲインＫ（大ゲインＫｌａｒｇｅ及び小ゲインＫｓｍａｌｌ）が中程度の値に設定・変更されるので、時間積分値ＳＤＶｏｘｓの１回あたりの更新量Ｋ・ＤＶｏｘｓ（の絶対値）も中程度の値に設定される。この結果、サブＦＢ学習値ＫＳＦＢｇ（時間積分値ＳＤＶｏｘｓ）は、収束値ＳＤＶｏｘｓｆｉｎａｌに比較的近い値から中程度の変化速度をもって収束値ＳＤＶｏｘｓｆｉｎａｌに更に接近・収束していく。
【０２１２】
一方、この時点以降、ＣＰＵが図１５のルーチンのステップ１５３５を経由して図１６のステップ１６０５に進むと、ｓｔａｔｕｓが「１」に設定されていることから、ＣＰＵはそのステップ１６０５にて「Ｎｏ」と判定する。そして、ＣＰＵはステップ１６３０に進んでｓｔａｔｕｓが「１」であるか否かを判定する。この場合、ＣＰＵはステップ１６３０にて「Ｙｅｓ」と判定してステップ１６３５に進み、判定基準値Ｖｋｉｊｕｎに「第１値ΔＶ０よりも小さい第２値ΔＶ１（ΔＶ１＞０）」を加えた値（Ｖｋｉｊｕｎ＋ΔＶ１）を上限値Ｖｇｍａｘｔｈとして設定する。更に、ＣＰＵは、判定基準値Ｖｋｉｊｕｎから「第２値ΔＶ１」を減じた値（Ｖｋｉｊｕｎ−ΔＶ１）を下限値Ｖｇｍｉｎｔｈとして設定する。なお、第２値ΔＶ１も特定値と称呼される。
【０２１３】
次に、ＣＰＵはステップ１６４０に進み、図１５のステップ１５２０にて取得した最大値Ｖｇｍａｘが上限値Ｖｇｍａｘｔｈ以下であり、且つ、図１５のステップ１５２０にて取得した最小値Ｖｇｍｉｎが下限値Ｖｇｍｉｎｔｈ以上であるか否かを判定する。
【０２１４】
このとき、サブＦＢ学習値ＫＳＦＢｇが収束値ＳＤＶｏｘｓｆｉｎａｌに接近していると、最大値Ｖｇｍａｘは上限値Ｖｇｍａｘｔｈ以下であり、且つ、最小値Ｖｇｍｉｎは下限値Ｖｇｍｉｎｔｈ以上となる。この場合、ＣＰＵはステップ１６４０にて「Ｙｅｓ」と判定してステップ１６４５に進み、ｓｔａｔｕｓを「２」に設定する。その後、ＣＰＵはステップ１６９５を経由して図１５のステップ１５４０に進む。
【０２１５】
このように、ｓｔａｔｕｓが「２」に設定・更新された状態において、ＣＰＵが図１２のステップ１２１０に進むと、ＣＰＵはそのステップ１２１０にて、ｓｔａｔｕｓ２に対応付けられている「テーブルＭａｐＫｌａｒｇｅ（Ｃｍａｘ，ｓｔａｔｕｓ）及びＭａｐＫｓｍａｌｌ（Ｃｍａｘ，ｓｔａｔｕｓ）」に基いて大ゲインＫｌａｒｇｅ及び小ゲインＫｓｍａｌｌをそれぞれ決定する。
【０２１６】
その結果、中程度の値に設定されていた調整ゲインＫ（大ゲインＫｌａｒｇｅ及び小ゲインＫｓｍａｌｌ）が小さい値に設定・変更されるので、時間積分値ＳＤＶｏｘｓの１回あたりの更新量Ｋ・ＤＶｏｘｓ（の絶対値）が更に小さくなる。
【０２１７】
従って、ｓｔａｔｕｓが「１」から「２」に変更されると、サブＦＢ学習値ＫＳＦＢｇ（時間積分値ＳＤＶｏｘｓ）の変化速度はｓｔａｔｕｓが「１」の場合よりも小さくなる。この段階においては、サブＦＢ学習値ＫＳＦＢｇ（時間積分値ＳＤＶｏｘｓ）は収束値ＳＤＶｏｘｓｆｉｎａｌに十分に近づいている。従って、サブＦＢ学習値ＫＳＦＢｇ（時間積分値ＳＤＶｏｘｓ）は、外乱が発生しても収束値ＳＤＶｏｘｓｆｉｎａｌ近傍の値に安定して維持される。
【０２１８】
一方、この時点以降、ＣＰＵが図１５のルーチンのステップ１５３５を経由して図１６のステップ１６０５に進むと、ｓｔａｔｕｓが「２」に設定されていることから、ＣＰＵはそのステップ１６０５にて「Ｎｏ」と判定し、ステップ１６３０にても「Ｎｏ」と判定してステップ１６５５に進む。
【０２１９】
ＣＰＵはステップ１６５５にて、判定基準値Ｖｋｉｊｕｎに「第２値ΔＶ１よりも小さい第３値ΔＶ２（ΔＶ２＞０）」を加えた値（Ｖｋｉｊｕｎ＋ΔＶ２）を上限値Ｖｇｍａｘｔｈとして設定する。更に、ＣＰＵは、判定基準値Ｖｋｉｊｕｎから「第３値ΔＶ２」を減じた値（Ｖｋｉｊｕｎ−ΔＶ２）を下限値Ｖｇｍｉｎｔｈとして設定する。なお、第３値ΔＶ２も特定値と称呼される。
【０２２０】
次に、ＣＰＵはステップ１６６０に進み、図１５のステップ１５２０にて取得した最大値Ｖｇｍａｘが上限値Ｖｇｍａｘｔｈ以下であり、且つ、図１５のステップ１５２０にて取得した最小値Ｖｇｍｉｎが下限値Ｖｇｍｉｎｔｈ以上であるか否かを判定する。
【０２２１】
このとき、サブＦＢ学習値ＫＳＦＢｇが収束値ＳＤＶｏｘｓｆｉｎａｌ付近において安定していると、最大値Ｖｇｍａｘは上限値Ｖｇｍａｘｔｈ以下であり、且つ、最小値Ｖｇｍｉｎは下限値Ｖｇｍｉｎｔｈ以上となる。この場合、ＣＰＵはステップ１６６０にて「Ｙｅｓ」と判定してステップ１６９５に進む。
【０２２２】
一方、何らかの理由（例えば、失火率が変化するなどの大きく空燃比を乱す外乱）により、最大値Ｖｇｍａｘが「（Ｖｋｉｊｕｎ＋ΔＶ２）である上限値Ｖｇｍａｘｔｈ」よりも大きくなるか、又は、最小値Ｖｇｍｉｎが「（Ｖｋｉｊｕｎ−ΔＶ２）である下限値Ｖｇｍｉｎｔｈ」よりも小さくなると、ＣＰＵはステップ１６６０にて「Ｎｏ」と判定してステップ１６６５に進み、ｓｔａｔｕｓを「１」に設定する。この結果、大ゲインＫｌａｒｇｅ及び小ゲインＫｓｍａｌｌが、それぞれの中程度の値になるので、サブＦＢ学習値ＫＳＦＢｇの更新速度が増大する。
【０２２３】
更に、ｓｔａｔｕｓが「１」に設定されている状態において、最大値Ｖｇｍａｘが「（Ｖｋｉｊｕｎ＋ΔＶ１）である上限値Ｖｇｍａｘｔｈ」よりも大きくなるか、又は、最小値Ｖｇｍｉｎが「（Ｖｋｉｊｕｎ−ΔＶ１）である下限値Ｖｇｍｉｎｔｈ」よりも小さくなると、ＣＰＵはステップ１６４０にて「Ｎｏ」と判定してステップ１６５０に進み、ｓｔａｔｕｓを「０」に設定する。この結果、大ゲインＫｌａｒｇｅ及び小ゲインＫｓｍａｌｌが、それぞれの大きい値になるので、サブＦＢ学習値ＫＳＦＢｇの更新速度が更に増大する。
【０２２４】
以上、説明したように、第１制御装置は、
所定の下流側フィードバック条件（サブフィードバック制御条件）が成立している期間において（図１１の「Ｙｅｓ」との判定を参照。）、下流側空燃比センサ５７の出力値Ｖｏｘｓと所定の下流側目標値Ｖｏｘｓｒｅｆとの偏差ＤＶｏｘｓｌｏｗに所定の調整ゲインＫを乗じた値を積算することにより時間積分値ＳＤＶｏｘｓｌｏｗを算出するとともに、下流側空燃比センサ５７の出力値Ｖｏｘｓを下流側目標値Ｖｏｘｓｒｅｆに一致させるための補正量（サブフィードバック量ＫＳＦＢ）であって燃料噴射弁３３から噴射される燃料の量をフィードバック補正するための補正量（サブフィードバック量ＫＳＦＢ）に含まれる「積分項Ｋｉ・ＳＤＶｏｘｓｌｏｗ」を「前記算出された時間積分値ＳＤＶｏｘｓｌｏｗ」に基いて算出し、前記積分項Ｋｉ・ＳＤＶｏｘｓｌｏｗに基いて前記補正量（サブフィードバック量ＫＳＦＢ）を算出する補正量算出手段（図１１のルーチンのステップ１１０５乃至ステップ１１５０）と、
前記算出された積分項Ｋｉ・ＳＤＶｏｘｓｌｏｗに相関する値（即ち、時間積分値ＳＤＶｏｘｓｌｏｗ）を学習値（サブＦＢ学習値ＫＳＦＢｇ）として取得する学習手段（図１１のステップ１１６０及びステップ１１６５）と、
前記下流側フィードバック条件が成立している場合には少なくも前記補正量（サブフィードバック量ＫＳＦＢ）に基いて最終燃料噴射量を算出するとともに（図８のルーチンの特にステップ８２０）、前記下流側フィードバック条件が成立していない場合には少なくとも前記学習値（サブＦＢ学習値ＫＳＦＢｇ）に基いて最終燃料噴射量Ｆｉ（ｋ）を算出し（図８のルーチンの特にステップ８２０、図１１のステップ１１７５）、前記算出された最終燃料噴射量Ｆｉ（ｋ）の燃料を燃料噴射弁３３から噴射させる燃料噴射制御手段（図８のステップ８７０）と、
を備えた内燃機関の燃料噴射量制御装置である。
【０２２５】
更に、前記学習手段は、
前記学習値（サブＦＢ学習値ＫＳＦＢｇ）が、前記学習値の過去の値に基いて算出される同学習値の過去の値の変動中心である判定基準値（判定基準値Ｖｋｉｊｕｎ、図１１のステップ１１７０、図１５のステップ１５４０を参照。）に正の特定値（第１値ΔＶ０、第２値ΔＶ１及び第３値ΔＶ２の何れか）を加えた値である上限値Ｖｇｍａｘｔｈと、前記判定基準値から前記特定値を減じた値である下限値Ｖｇｍｉｎｔｈとの間に所定時間に渡って存在している場合、前記学習値が収束した（即ち、サブＦＢ学習値ＫＳＦＢｇの収束度が向上した）と判定するように構成されている（図１５のステップ１５１５乃至ステップ１５３５、及び、図１６のルーチンの例えばステップ１６４０、ステップ１６６０及びステップ１６１５を参照。）。
【０２２６】
加えて、前記補正量算出手段は、
前記学習値（サブＦＢ学習値ＫＳＦＢｇ）の増大速度の大きさと前記学習値（サブＦＢ学習値ＫＳＦＢｇ）の減少速度の大きさとの差の絶対値（図４のｄＶ１とｄＶ２との差の大きさ）が小さくなるように、前記学習値が増大する場合における前記調整ゲインＫと前記学習値が減少する場合における前記調整ゲインＫとを互いに相違する値に設定するように構成されている（図１２のステップ１２１０及び図１１のステップ１１２５乃至ステップ１１３５を参照。）。
【０２２７】
これによれば、「リーン判定時（出力値Ｖｏｘｓが下流側目標値Ｖｏｘｓｒｅｆよりも小さい場合）における学習値の変化速度の大きさ」とリッチ判定時（出力値Ｖｏｘｓが下流側目標値Ｖｏｘｓｒｅｆよりも大きい場合）における学習値の変化速度の大きさ」とを近づけることができる。従って、サブＦＢ学習値ＫＳＦＢｇが収束している場合、サブＦＢ学習値ＫＳＦＢｇは「上限値Ｖｇｍａｘｔｈと下限値Ｖｇｍｉｎｔｈとの間」に安定して存在するようになる。その結果、サブＦＢ学習値ＫＳＦＢｇが収束していることを精度良く判定することができる。
【０２２８】
更に、前記特定値（上限値Ｖｇｍａｘｔｈ及び下限値Ｖｇｍｉｎｔｈを決める、第１値ΔＶ０、第２値ΔＶ１及び第３値ΔＶ２）を過度に大きい値に設定する必要がないので、サブＦＢ学習値ＫＳＦＢｇの収束度を精度良く判定することができる。
【０２２９】
＜第２実施形態＞
次に、本発明の第２実施形態に係る制御装置（以下、「第２制御装置」とも称呼する。）について説明する。この第２制御装置は、以下の２点についてのみ第１制御装置と異なる。
【０２３０】
第１の相違点は、第２制御装置においては、サブＦＢ学習値ＫＳＦＢｇ（時間積分値ＳＤＶｏｘｓｌｏｗ）が増大するときの変化速度の大きさを決定する調整ゲインＫと、サブＦＢ学習値ＫＳＦＢｇ（時間積分値ＳＤＶｏｘｓｌｏｗ）が減少するときの変化速度の大きさを決定する調整ゲインＫと、が互いに同一の値に設定される点である。
【０２３１】
第２の相違点は、第２制御装置においては、図１７に示したように、上限値Ｖｇｍａｘｔｈを定める特定値（判定基準値Ｖｋｉｊｕｎと上限値Ｖｇｍａｘｔｈとの差の大きさである第１特定値）と、下限値Ｖｇｍｉｎｔｈを定める特定値（判定基準値Ｖｋｉｊｕｎと下限値Ｖｇｍｉｎｔｈとの差の大きさである第２特定値）と、が互いに異なる値に設定される点である。
【０２３２】
なお、第２制御装置においては、第１特定値のほうが第２特定値よりも大きくなるように、第１特定値及び第２特定値が設定される。換言すると、サブＦＢ学習値ＫＳＦＢｇの変化速度の大きさが大きい側の限界値（上限値Ｖｇｍａｘｔｈ）と判定基準値Ｖｋｉｊｕｎとの差（第１特定値）は、サブＦＢ学習値ＫＳＦＢｇの変化速度の大きさが小さい側の限界値（下限値Ｖｇｍｉｎｔｈ）と判定基準値Ｖｋｉｊｕｎとの差（第２特定値）よりも大きい。
【０２３３】
より具体的に述べると、図１７において、ｓｔａｔｕｓ０の場合における第１特定値（ΔＶ０ｓｍａｌｌ）はｓｔａｔｕｓ０の場合における第２特定値（ΔＶ０ｓｍａｌｌ）よりも大きい。ｓｔａｔｕｓ１の場合における第１特定値（ΔＶ１ｌａｒｇｅ）はｓｔａｔｕｓ１の場合における第２特定値（ΔＶ１ｓｍａｌｌ）よりも大きい。更に、ｓｔａｔｕｓ２の場合における第１特定値（ΔＶ２ｌａｒｇｅ）はｓｔａｔｕｓ２の場合における第２特定値（ΔＶ２ｓｍａｌｌ）よりも大きい。なお、第１特定値はｓｔａｔｕｓの値が大きくなるほど小さくなり（即ち、ΔＶ０ｌａｒｇｅ＞ΔＶ１ｌａｒｇｅ＞ΔＶ２ｌａｒｇｅ）、第２特定値はｓｔａｔｕｓの値が大きくなるほど小さくなる（即ち、ΔＶ０ｓｍａｌｌ＞ΔＶ１ｓｍａｌｌ＞ΔＶ２ｓｍａｌｌ）。
【０２３４】
（実際の作動）
次に、第２制御装置の実際の作動について説明する。第２制御装置のＣＰＵは、図８乃至図１０、図１３乃至図１５、並びに、図１８乃至図２０に示したルーチンを実行する。図１８及び図１９は、図１１及び図１２にそれぞれ代わるルーチンである。図２０は図１６に代わるルーチンである。図８乃至図１０、並びに、図１３乃至図１５に示したルーチンについては説明済みである。よって、以下、図１８乃至図２０に示したルーチンについて説明する。なお、図１８乃至図２０に示したステップのうち既に説明したステップと同一の処理を行うためのステップには、そのようなステップに付された符号と同一の符合が付されている。
【０２３５】
第２制御装置のＣＰＵは、サブフィードバック量ＫＳＦＢ及びサブＦＢ学習値ＫＳＦＢｇを算出するために図１８に示したルーチンを所定時間が経過する毎に繰り返し実行するようになっている。この図１８のルーチンは、図１１のルーチンのステップ１１２５乃至ステップ１１３５を、ステップ１８１０に置換した点のみにおいて、図１１のルーチンと相違している。従って、以下、この相違点のみについて説明する。
【０２３６】
ＣＰＵは、ステップ１８１０に進むと調整ゲインＫを読み込む。調整ゲインＫは、後述する図１９に示したルーチンにより決定されている。
【０２３７】
ＣＰＵは、調整ゲインＫを決定するために、図１９にフローチャートにより示したルーチンを所定時間が経過する毎に繰り返し実行するようになっている。この図１９のルーチンは、図１２のルーチンのステップ１２１０を、ステップ１９１０に置換した点のみにおいて、図１２のルーチンと相違している。従って、以下、この相違点のみについて説明する。
【０２３８】
現時点が、ｓｔａｔｕｓの初期化設定がなされた直後であるか、又は、ｓｔａｔｕｓが更新された直後であると、ＣＰＵは図１９のステップ１２０５にて「Ｙｅｓ」と判定してステップ１９１０に進み、調整ゲインＫをテーブルＭａｐＫ（Ｃｍａｘ，ｓｔａｔｕｓ）に基いて決定する。
【０２３９】
図１９のステップ１９１０内に記載したように、テーブルＭａｐＫ（Ｃｍａｘ，ｓｔａｔｕｓ）によれば、最大酸素吸蔵量Ｃｍａｘが一定の場合において、ｓｔａｔｕｓ０での調整ゲインＫがｓｔａｔｕｓ１での調整ゲインＫよりも大きく、且つ、ｓｔａｔｕｓ１での調整ゲインＫがｓｔａｔｕｓ２での調整ゲインＫよりも大きくなるように、調整ゲインＫが決定される。更に、テーブルＭａｐＫ（Ｃｍａｘ，ｓｔａｔｕｓ）によれば、調整ゲインＫは、各ｓｔａｔｕｓにおいて最大酸素吸蔵量Ｃｍａｘが大きいほど、より小さい値となるように決定される。
【０２４０】
更に、ＣＰＵは、図１５のステップ１５３５に進んだとき、図２０に示したルーチンを実行するようになっている。この図２０のルーチンは、図１６のルーチンのステップ１６１０、ステップ１６３５及びステップ１６５５を、ステップ２０１０、ステップ２０３５及びステップ２０５５にそれぞれ置換した点のみにおいて、図１６のルーチンと相違している。従って、以下、この相違点のみについて説明する。
【０２４１】
ＣＰＵはｓｔａｔｕｓが「０」である場合ステップ２０１０に進み、判定基準値Ｖｋｉｊｕｎに「正の所定値ΔＶ０ｌａｒｇｅ」を加えた値（Ｖｋｉｊｕｎ＋ΔＶ０ｌａｒｇｅ）を上限値（大側閾値）Ｖｇｍａｘｔｈとして設定する。更に、ＣＰＵは、判定基準値Ｖｋｉｊｕｎから「正の所定値ΔＶ０ｓｍａｌｌ」を減じた値（Ｖｋｉｊｕｎ−ΔＶ０ｓｍａｌｌ）を下限値（小側閾値）Ｖｇｍｉｎｔｈとして設定する。所定値ΔＶ０ｌａｒｇｅは所定値ΔＶ０ｓｍａｌｌよりも大きい。
【０２４２】
この結果、図１７に示したように、上限値Ｖｇｍａｘｔｈと判定基準値Ｖｋｉｊｕｎとの差の大きさ（ΔＶ０ｌａｒｇｅ）は、下限値Ｖｇｍｉｎｔｈと判定基準値Ｖｋｉｊｕｎとの差の大きさ（ΔＶ０ｓｍａｌｌ）よりも大きくなる。
【０２４３】
ＣＰＵはｓｔａｔｕｓが「１」である場合ステップ２０３５に進み、判定基準値Ｖｋｉｊｕｎに「正の所定値ΔＶ１ｌａｒｇｅ」を加えた値（Ｖｋｉｊｕｎ＋ΔＶ１ｌａｒｇｅ）を上限値（大側閾値）Ｖｇｍａｘｔｈとして設定する。更に、ＣＰＵは、判定基準値Ｖｋｉｊｕｎから「正の所定値ΔＶ１ｓｍａｌｌ」を減じた値（Ｖｋｉｊｕｎ−ΔＶ１ｓｍａｌｌ）を下限値（小側閾値）Ｖｇｍｉｎｔｈとして設定する。所定値ΔＶ１ｌａｒｇｅは所定値ΔＶ１ｓｍａｌｌよりも大きい。
【０２４４】
この結果、図１７に示したように、上限値Ｖｇｍａｘｔｈと判定基準値Ｖｋｉｊｕｎとの差の大きさ（ΔＶ１ｌａｒｇｅ）は、下限値Ｖｇｍｉｎｔｈと判定基準値Ｖｋｉｊｕｎとの差の大きさ（ΔＶ１ｓｍａｌｌ）よりも大きくなる。
【０２４５】
ＣＰＵはｓｔａｔｕｓが「２」である場合ステップ２０５５に進み、判定基準値Ｖｋｉｊｕｎに「正の所定値ΔＶ２ｌａｒｇｅ」を加えた値（Ｖｋｉｊｕｎ＋ΔＶ２ｌａｒｇｅ）を上限値（大側閾値）Ｖｇｍａｘｔｈとして設定する。更に、ＣＰＵは、判定基準値Ｖｋｉｊｕｎから「正の所定値ΔＶ２ｓｍａｌｌ」を減じた値（Ｖｋｉｊｕｎ−ΔＶ２ｓｍａｌｌ）を下限値（小側閾値）Ｖｇｍｉｎｔｈとして設定する。所定値ΔＶ２ｌａｒｇｅは所定値ΔＶ２ｓｍａｌｌよりも大きい。
【０２４６】
この結果、図１７に示したように、上限値Ｖｇｍａｘｔｈと判定基準値Ｖｋｉｊｕｎとの差の大きさ（ΔＶ２ｌａｒｇｅ）は、下限値Ｖｇｍｉｎｔｈと判定基準値Ｖｋｉｊｕｎとの差の大きさ（ΔＶ２ｓｍａｌｌ）よりも大きくなる。
【０２４７】
なお、所定値ΔＶ０ｌａｒｇｅは所定値ΔＶ１ｌａｒｇｅよりも大きく、所定値ΔＶ１ｌａｒｇｅは所定値ΔＶ２ｌａｒｇｅよりも大きい。所定値ΔＶ０ｌａｒｇｅ、所定値ΔＶ１ｌａｒｇｅ及び所定値ΔＶ２ｌａｒｇｅは「第１特定値」と総称される。また、所定値ΔＶ０ｓｍａｌｌは所定値ΔＶ１ｓｍａｌｌよりも大きく、所定値ΔＶ１ｓｍａｌｌは所定値ΔＶ２ｓｍａｌｌよりも大きい。所定値ΔＶ０ｓｍａｌｌ、所定値ΔＶ１ｓｍａｌｌ及び所定値ΔＶ２ｓｍａｌｌは「第２特定値」と総称される。
【０２４８】
以上、説明したように、第２制御装置は、
下流側空燃比センサ５７の出力値Ｖｏｘｓと所定の下流側目標値Ｖｏｘｓｒｅｆとの偏差ＤＶｏｘｓｌｏｗに所定の調整ゲインＫを乗じた値を積算することにより時間積分値ＳＤＶｏｘｓｌｏｗを算出するとともに、下流側空燃比センサ５７の出力値Ｖｏｘｓを下流側目標値Ｖｏｘｓｒｅｆに一致させるための補正量（サブフィードバック量ＫＳＦＢ）であって燃料噴射弁３３から噴射される燃料の量をフィードバック補正するための補正量（サブフィードバック量ＫＳＦＢ）に含まれる「積分項Ｋｉ・ＳＤＶｏｘｓｌｏｗ」を「前記算出された時間積分値ＳＤＶｏｘｓｌｏｗ」に基いて算出し、前記積分項Ｋｉ・ＳＤＶｏｘｓｌｏｗに基いて前記補正量（サブフィードバック量ＫＳＦＢ）を算出する補正量算出手段（図１１のルーチンのステップ１１０５乃至ステップ１１５０）と、
前記算出された積分項Ｋｉ・ＳＤＶｏｘｓｌｏｗに相関する値（即ち、時間積分値ＳＤＶｏｘｓｌｏｗ）を学習値（サブＦＢ学習値ＫＳＦＢｇ）として取得する学習手段（図１１のステップ１１６０及びステップ１１６５）と、
前記下流側フィードバック条件が成立している場合には少なくも前記補正量（サブフィードバック量ＫＳＦＢ）に基いて最終燃料噴射量Ｆｉ（ｋ）を算出するとともに（図８のルーチンの特にステップ８２０）、前記下流側フィードバック条件が成立していない場合には少なくとも前記学習値（サブＦＢ学習値ＫＳＦＢｇ）に基いて最終燃料噴射量Ｆｉ（ｋ）を算出し（図８のルーチンの特にステップ８２０、図１１のステップ１１７５）、前記算出された最終燃料噴射量Ｆｉ（ｋ）の燃料を燃料噴射弁３３から噴射させる燃料噴射制御手段（図８のステップ８７０）と、
を備える。
【０２４９】
更に、第２制御装置における前記学習手段は、前記学習値（サブＦＢ学習値ＫＳＦＢｇ）が、「前記学習値の過去の値に基いて算出される同学習値の過去の値の変動中心である判定基準値Ｖｋｉｊｕｎ」に正の第１特定値（例えば、ΔＶ１ｌａｒｇｅ）を加えた値である上限値Ｖｇｍａｘｔｈと、判定基準値Ｖｋｉｊｕｎから正の第２特定値（例えば、ΔＶ１ｓｍａｌｌ）を減じた値である下限値Ｖｇｍｉｎｔｈと、の間に所定時間に渡って存在している場合、前記学習値（サブＦＢ学習値ＫＳＦＢｇ）が収束した（即ち、サブＦＢ学習値ＫＳＦＢｇの収束度が上昇した）と判定するように構成される（例えば、図２０のステップ２０３５及びステップ１６４０を参照。）。
【０２５０】
加えて、前記学習手段は、前記学習値の増大速度の大きさが前記学習値の減少速度の大きさよりも大きい場合（本例は、この場合に該当する。）には、前記第１特定値を前記第２特定値よりも大きい値に設定する。或いは、前記学習手段は、前記学習値の減少速度の大きさが前記学習値の増大速度の大きさよりも大きい場合（例えば、下流側目標値Ｖｏｘｓｒｅｆが「理論空燃比に相当する値Ｖｓｔよりも小さい値」に設定された場合）には、前記第２特定値を前記第１特定値よりも大きい値に設定する。
【０２５１】
即ち、上限値Ｖｇｍａｘｔｈ及び下限値Ｖｇｍｉｎｔｈのうち「学習値（サブＦＢ学習値ＫＳＦＢｇ）の変化速度の大きさが大きい側の閾値（本例において、上限値Ｖｇｍａｘｔｈ）」は「学習値の変化速度の大きさが小さい側の閾値（本例において、下限値Ｖｇｍｉｎｔｈ）」よりも判定基準値Ｖｋｉｊｕｎから大きく乖離する値となる。従って、学習値（サブＦＢ学習値ＫＳＦＢｇ）が収束していれば、学習値の増大速度の大きさと減少速度の大きさが異なる場合であっても、学習値は「上限値Ｖｇｍａｘｔｈと下限値Ｖｇｍｉｎｔｈとの間」に存在するようになる。その結果、学習値が収束していることを精度良く判定することができる。
【０２５２】
以上、説明したように、本発明の各実施形態に係る燃料噴射量制御装置は、サブＦＢ学習値ＫＳＦＢｇの収束度を精度良く判定することができ、その結果、サブＦＢ学習値ＫＳＦＢｇの更新速度を適切な値に設定することができる。従って、サブＦＢ学習値ＫＳＦＢｇを適切な値（収束すべき値）に迅速に近づけることができるとともに、サブＦＢ学習値ＫＳＦＢｇを適切な値の近傍に安定して維持することができる。
【０２５３】
なお、本発明は上記実施形態に限定されることはなく、本発明の範囲内において種々の変形例を採用することができる。例えば、サブフィードバック制御は、サブフィードバック量により上流側空燃比センサ５６の出力値Ｖａｂｙｆｓを補正する周知の態様であってもよい。加えて、上記実施形態における時間積分値ＳＤＶｏｘｓｌｏｗは、出力偏差量ＤＶｏｘｓをローパスフィルタ処理した値ＤＶｏｘｓｌｏｗに所定の調整ゲインＫを乗じた値を積算することにより求められていたが、ローパスフィルタ処理を行わない出力偏差量ＤＶｏｘｓに所定の調整ゲインＫを乗じた値を積算することにより求められてもよい。
【０２５４】
更に、第１制御装置の特徴（即ち、調整ゲインＫを、サブＦＢ学習値ＫＳＦＢｇの変化速度が増大する場合と減少する場合とで相違させること）と、第２制御装置の特徴（上限値Ｖｇｍａｘｔｈと判定基準値Ｖｋｉｊｕｎとの差の大きさと、下限値Ｖｇｍｉｎｔｈと判定基準値Ｖｋｉｊｕｎとの差の大きさと、を相違させること）と、の両方を一つの制御装置において採用してもよい。更に、サブＦＢ学習値ＫＳＦＢｇは、サブフィードバック量ＫＳＦＢの積分項Ｋｉ・ＳＤＶｏｘｓｌｏｗであってもよく、サブフィードバック量ＫＳＦＢにローパスフィルタ処理を施した値であってもよい。即ち、サブＦＢ学習値ＫＳＦＢｇは、サブフィードバック量ＫＳＦＢの定常成分に応じた値（サブフィードバック量ＫＳＦＢの積分項に相関する値）であればよい。
【図１】
2012014328.tif 000003
【図２】
2012014328.tif 000004
【図３】
2012014328.tif 000005
【図４】
2012014328.tif 000006
【図５】
2012014328.tif 000007
【図６】
2012014328.tif 000008
【図７】
2012014328.tif 000009
【図８】
2012014328.tif 000010
【図９】
2012014328.tif 000011
【図１０】
2012014328.tif 000012
【図１１】
2012014328.tif 000013
【図１２】
2012014328.tif 000014
【図１３】
2012014328.tif 000015
【図１４】
2012014328.tif 000016
【図１５】
2012014328.tif 000017
【図１６】
2012014328.tif 000018
【図１７】
2012014328.tif 000019
【図１８】
2012014328.tif 000020
【図１９】
2012014328.tif 000021
【図２０】
2012014328.tif 000022
【国際調査報告】
2012014328.tif 000023
2012014328.tif 000024
2012014328.tif 000025
2012014328.tif 000026