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