(57)【特許請求の範囲】
【請求項１】
エンジン（１０）の排気ガス中の酸素濃度を検出する酸素センサ（５０）と、
前記エンジン（１０）の吸気管（２２）に設けられたスロットルバルブ（３４）のスロットル開度（ＴＨ）とエンジン回転数（ＮＥ）とがＯ２フィードバック領域内にある場合は、前記酸素センサ（５０）が検出した酸素濃度に基づいて補正係数であるフィードバック補正量（ＫＯ２）を算出するとともに、当該フィードバック補正量（ＫＯ２）に応じて学習した補正係数である第１学習値（ＫＢＵａｖｅ）を、前記スロットル開度（ＴＨ）と前記エンジン回転数（ＮＥ）とで表され、且つ、前記スロットル開度（ＴＨ）に応じて前記Ｏ２フィードバック領域を区分けした第１学習値マップ（５４）の複数の第１学習領域（Ａ）毎に算出して更新する係数算出部（８４）と、
前記スロットル開度（ＴＨ）と前記エンジン回転数（ＮＥ）とが前記Ｏ２フィードバック領域内にある場合は、基本噴射量（ＴＩＭＢ）を前記フィードバック補正量（ＫＯ２）及び前記第１学習値（ＫＢＵａｖｅ）を用いて補正して燃料噴射量（ＴＯＵＴ）を算出する燃料噴射量算出部（７０）と、
を備えるエンジン（１０）の燃料噴射制御装置（１２）において、
前記第１学習値マップ（５４）の領域内に設定されるとともに、少なくとも前記エンジン回転数（ＮＥ）の幅が前記第１学習値マップ（５４）よりも狭く設定された複数の第２学習領域（Ｂ）を有する第２学習値マップ（５６）を備え、
前記係数算出部（８４）は、前記スロットル開度（ＴＨ）と前記エンジン回転数（ＮＥ）とが前記第２学習値マップ（５６）内にある場合は、更に、前記スロットル開度（ＴＨ）と前記エンジン回転数（ＮＥ）とに対応する前記第２学習値マップ（５６）の第２学習領域（Ｂ）の第２学習値（ＫＢＵＬＥＡＮ）をフィードバック補正量（ＫＯ２）に応じて算出して更新し、
前記燃料噴射量算出部（７０）は、前記スロットル開度（ＴＨ）と前記エンジン回転数（ＮＥ）とが前記第２学習値マップ（５６）の領域内で、所定の運転を行う場合は、前記第１学習値（ＫＢＵａｖｅ）の代わりに、前記第２学習値（ＫＢＵＬＥＡＮ）を用いて基本噴射量（ＴＩＭＢ）を補正して燃料噴射量（ＴＯＵＴ）を算出する
ことを特徴とするエンジン（１０）の燃料噴射制御装置（１２）。
【請求項２】
請求項１に記載のエンジン（１０）の燃料噴射制御装置（１２）において、
前記所定の運転は、リーン化運転であり、
係数算出部（８４）は、前記リーン化運転が可能なリーン化モードに入ると、前記第２学習値（ＫＢＵＬＥＡＮ）の更新を停止する
ことを特徴とするエンジン（１０）の燃料噴射制御装置（１２）。
【請求項３】
請求項２に記載のエンジン（１０）の燃料噴射制御装置（１２）において、
前記リーン化モード中に、前記スロットル開度（ＴＨ）と前記エンジン回転数（ＮＥ）とが前記第２学習値マップ（５６）の領域内になると前記リーン化運転が実行され、
係数算出部（８４）は、前記リーン化運転が実行されていない場合は、前記第１学習値（ＫＢＵａｖｅ）の更新を行い、前記リーン化運転が実行されると前記第１学習値（ＫＢＵａｖｅ）の更新を停止する
ことを特徴とするエンジン（１０）の燃料噴射制御装置（１２）。
【請求項４】
請求項１〜３のいずれか１項に記載のエンジン（１０）の燃料噴射制御装置（１２）において、
前記第２学習値マップ（５６）の前記スロットル開度（ＴＨ）が低開度側の第２学習領域（Ｂ２）は、前記スロットル開度（ＴＨ）が大きくなる程、前記エンジン回転数（ＮＥ）の幅が広がるように設定されている
ことを特徴とするエンジン（１０）の燃料噴射制御装置（１２）。
【請求項５】
請求項１〜４のいずれか１項に記載のエンジン（１０）の燃料噴射制御装置（１２）において、
前記第２学習値マップ（５６）の前記スロットル開度（ＴＨ）が高開度側の第２学習領域（Ｂ５）は、該第２学習領域（Ｂ５）に対応する前記第１学習値マップ（５４）の第１学習領域（Ａ５）よりも、前記スロットル開度（ＴＨ）の上限が低く設定されている
ことを特徴とするエンジン（１０）の燃料噴射制御装置（１２）。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、Ｏ２フィードバック制御を行うエンジンの燃料噴射制御装置に関する。
【背景技術】
【０００２】
従来から、排気ガスの酸素濃度を検出する酸素センサの出力を用いてＯ２フィードバック制御を行うエンジンの燃料噴射制御装置が知られている（特許文献１）。詳しくは、エンジン回転数とスロットル開度とで規定され、スロットル開度に応じて区分けされた学習領域毎に、Ｏ２フィードバック制御で得られた学習値を更新する。そして、学習値を当該学習領域の運転での燃料噴射補正係数として用いて燃料噴射量を算出する。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１１−１５７８３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ここで、低燃費化のために、従来のエンジンの燃料噴射制御装置で、空燃比を薄くしたリーン化運転を行いたい場合は、次のような制御が考えられる。最初に、リーン化運転を行う領域（リーン化運転領域）でのＯ２フィードバック補正係数の学習を済ませ、リーン化運転が可能な状態に入ったら、学習を済ませた学習値を用いて燃料噴射量を決定する。
【０００５】
ここで、酸素センサは、理想空燃比の近傍で空燃比がリーンかリッチかを検出するセンサであるため、リーン化運転を行ってしまうと正確な空燃比がわからなくなる。そのため、リーン化運転中は、Ｏ２フィードバック制御を行うことができなくなる。つまり、リーン化運転中に空燃比が想定している値とズレたとしても検知することは難しい。
【０００６】
リーン化運転中の空燃比のズレが発生するか否かは、リーン化運転領域の学習値の精度によるところが大きい。従って、リーン化運転中に用いる学習値には、精度の高いものが求められる。
【０００７】
従来のエンジンの燃料噴射制御装置では、学習値が学習領域毎に保持されていき、この学習領域は比較的広く設定されている。学習領域を広く設定することによって、学習完了までのスピードを向上させることができる。なお、各学習領域において、エンジン回転数が低回転側の端と高回転側の端とでは、学習値が異なる場合が多いが、Ｏ２フィードバック中は、学習値が更新され続けるので十分な空燃比精度を確保することができる。
【０００８】
しかしながら、リーン化運転中は、学習値が更新されないので、リーン化運転中における運転状況（スロットル開度及びエンジン回転数）によっては、リーン化運転前に学習した学習値をリーン化運転用の学習値として使用するには不適切な場合もあった。
【０００９】
そこで、本発明は、Ｏ２フィードバック制御中の学習完了のスピードを維持しつつ、所定の運転条件下での学習値の精度を向上させるエンジンの燃料噴射制御装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
本発明に係るエンジン（１０）の燃料噴射制御装置（１２）は、以下の特徴を有する。
【００１１】
第１の特徴；エンジン（１０）の排気ガス中の酸素濃度を検出する酸素センサ（５０）と、前記エンジン（１０）の吸気管（２２）に設けられたスロットルバルブ（３４）のスロットル開度（ＴＨ）とエンジン回転数（ＮＥ）とがＯ２フィードバック領域内にある場合は、前記酸素センサ（５０）が検出した酸素濃度に基づいて補正係数であるフィードバック補正量（ＫＯ２）を算出するとともに、当該フィードバック補正量（ＫＯ２）に応じて学習した補正係数である第１学習値（ＫＢＵａｖｅ）を、前記スロットル開度（ＴＨ）と前記エンジン回転数（ＮＥ）とで表され、且つ、前記スロットル開度（ＴＨ）に応じて前記Ｏ２フィードバック領域を区分けした第１学習値マップ（５４）の複数の第１学習領域（Ａ）毎に算出して更新する係数算出部（８４）と、前記スロットル開度（ＴＨ）と前記エンジン回転数（ＮＥ）とが前記Ｏ２フィードバック領域内にある場合は、基本噴射量（ＴＩＭＢ）を前記フィードバック補正量（ＫＯ２）及び前記第１学習値（ＫＢＵａｖｅ）を用いて補正して燃料噴射量（ＴＯＵＴ）を算出する燃料噴射量算出部（７０）と、を備えるエンジン（１０）の燃料噴射制御装置（１２）において、前記第１学習値マップ（５４）の領域内に設定されるとともに、少なくとも前記エンジン回転数（ＮＥ）の幅が前記第１学習値マップ（５４）よりも狭く設定された複数の第２学習領域（Ｂ）を有する第２学習値マップ（５６）を備え、前記係数算出部（８４）は、前記スロットル開度（ＴＨ）と前記エンジン回転数（ＮＥ）とが前記第２学習値マップ（５６）内にある場合は、更に、前記スロットル開度（ＴＨ）と前記エンジン回転数（ＮＥ）とに対応する前記第２学習値マップ（５６）の第２学習領域（Ｂ）の第２学習値（ＫＢＵＬＥＡＮ）をフィードバック補正量（ＫＯ２）に応じて算出して更新し、前記燃料噴射量算出部（７０）は、前記スロットル開度（ＴＨ）と前記エンジン回転数（ＮＥ）とが前記第２学習値マップ（５６）の領域内で、所定の運転を行う場合は、前記第１学習値（ＫＢＵａｖｅ）の代わりに、前記第２学習値（ＫＢＵＬＥＡＮ）を用いて基本噴射量（ＴＩＭＢ）を補正して燃料噴射量（ＴＯＵＴ）を算出する。
【００１２】
第２の特徴；前記所定の運転は、リーン化運転であり、係数算出部（８４）は、前記リーン化運転が可能なリーン化モードに入ると、前記第２学習値（ＫＢＵＬＥＡＮ）の更新を停止する。
【００１３】
第３の特徴；前記リーン化モード中に、前記スロットル開度（ＴＨ）と前記エンジン回転数（ＮＥ）とが前記第２学習値マップ（５６）の領域内になると前記リーン化運転が実行され、係数算出部（８４）は、前記リーン化運転が実行されていない場合は、前記第１学習値（ＫＢＵａｖｅ）の更新を行い、前記リーン化運転が実行されると前記第１学習値（ＫＢＵａｖｅ）の更新を停止する。
【００１４】
第４の特徴；前記第２学習値マップ（５６）の前記スロットル開度（ＴＨ）が低開度側の第２学習領域（Ｂ２）は、前記スロットル開度（ＴＨ）が大きくなる程、前記エンジン回転数（ＮＥ）の幅が広がるように設定されている。
【００１５】
第５の特徴；前記第２学習値マップ（５６）の前記スロットル開度（ＴＨ）が高開度側の第２学習領域（Ｂ５）は、該第２学習領域（Ｂ５）に対応する前記第１学習値マップ（５４）の第１学習領域（Ａ５）よりも、前記スロットル開度（ＴＨ）の上限が低く設定されている。
【発明の効果】
【００１６】
本発明の第１の特徴によれば、Ｏ２フィードバック制御中は、第１学習値マップ内の各第１学習領域の第１学習値を更新して、燃料噴射量を算出するので、従来と同等の第１学習値の学習スピードとＯ２フィードバック制御の精度を確保することができる。また、第１学習値マップの領域内で所定の運転に用いられる第２学習値マップを設定し、Ｏ２フィードバック制御中に、第２学習値マップ内で学習する際は、第１学習値マップ内の第１学習領域の第１学習値と、第２学習値マップ内の第２学習領域の第２学習値との両方を学習させることで、同じスロットル開度及びエンジン回転数であっても、異なる学習値を学習することができる。従って、所定の運転に用いられる第２学習値の精度が向上し、第２学習値マップの領域内で所定の運転を行う際は、第２学習値マップの第２学習値を用いることで高精度な燃料噴射をすることができる。
【００１７】
本発明の第２の特徴によれば、リーン化モードに入った場合は、リーン化モードに入る前の第２学習値マップの各第２学習領域の第２学習値の更新を停止するので、リーン化運転中に想定している空燃比とのズレを抑えることができる。
【００１８】
本発明の第３の特徴によれば、リーン化モード中に、リーン化運転が実行されていない場合は、第１学習値の更新を行うので、リーン化モード中も第１学習値の精度を確保することができる。
【００１９】
本発明の第４の特徴によれば、第２学習値マップのスロットル開度が低開度側の第２学習領域は、スロットル開度が大きくなる程、エンジン回転数の幅が広がるように設定されているので、リーン化運転が可能な領域を極力広げ、低燃費化を図ることができる。
【００２０】
本発明の第５の特徴によれば、第２学習値マップのスロットル開度が高開度側の第２学習領域は、該第２学習領域に対応する第１学習値マップの第１学習領域よりも、スロットル開度の上限が低く設定されているので、リーン化運転が可能な領域を適切に制限でき、リーン化運転中のエンジンの運転変動を抑えることができる。
【図面の簡単な説明】
【００２１】
【図１】実施の形態のエンジンの燃料噴射制御装置の構成を示すブロック図である。
【図２】エンジンの運転領域を検索するためのマップである。
【図３】空燃比のフィードバック領域を示すマップである。
【図４】図２及び図３で定められる領域を重ねることで６つに区分けされたＯ２フィードバック領域の各第１学習領域を示す第１学習値マップを示す。
【図５】図４に示す第１学習値マップの模式図である。
【図６】オープンループ領域の各第２学習領域を示す学習値マップである第２学習値マップの模式図である。
【図７】図１の制御部の構成を示すブロック図である。
【図８】図７の噴射量マップの一例を示す図である。
【図９】図７の揮発性メモリの構成を示すブロック図である。
【図１０】リーン化運転が可能なリーン化モードの設定動作を示すフローチャートである。
【図１１】スロットル開度ＴＨ及びエンジン回転数ＮＥがＯ２フィードバック領域内にある場合の、燃料噴射制御装置の動作を示すフローチャートである。
【図１２】係数算出部のＫＢＵａｖｅ等の更新の動作を示すフローチャートである。
【発明を実施するための形態】
【００２２】
本発明に係るエンジンの燃料噴射制御装置について、好適な実施の形態を掲げ、添付の図面を参照しながら以下、詳細に説明する。
【００２３】
図１は、実施の形態のエンジン１０の燃料噴射制御装置１２の構成を示すブロック図である。自動二輪車等の車両に搭載されるエンジン１０のシリンダボア１４には、ピストン１６が摺動可能に嵌合されている。エンジン１０のシリンダヘッド１８には、燃焼室２０に混合気を供給する吸気管２２と、燃焼室２０からの排気ガスを排出する排気管２４とが接続されている。排気管２４には、触媒コンバータ２６が取り付けられている。シリンダヘッド１８には、その先端が燃焼室２０に突出する点火プラグ２８、吸気バルブ３０、及び排気バルブ３２が取り付けられている。
【００２４】
吸気管２２には、吸気量を制御するスロットルバルブ３４が開閉可能に配設されるとともに、スロットルバルブ３４の上流側と下流側とを接続するバイパス通路３６が設けられている。このバイパス通路３６には、バイパス通路３６を開閉することで、バイパス通路３６を通る空気量を調整するエアスクリュー３８が設けられている。このエアスクリュー３８を運転者が調整することで、アイドリング（アイドル）回転数の調整が行われる。スロットルバルブ３４の下流側と、吸気バルブ３０との間には、燃料を噴射する燃料噴射弁４０が設けられている。
【００２５】
制御部４２は、点火プラグ２８の点火タイミング、及び燃料噴射弁４０から噴射される燃料噴射量等を制御する。エンジン１０の燃料噴射制御装置１２は、更に、スロットルバルブ３４の開度（以下、スロットル開度）ＴＨを検出するスロットル開度センサ４４と、ピストン１６に連接されたエンジン１０のクランク軸１０ａの回転数（以下、エンジン回転数）ＮＥを検出するエンジン回転数センサ４６と、エンジン１０の冷却水の水温ＴＷを検出する水温センサ４８と、触媒コンバータ２６より上流側に設けられ排気ガスに残存する酸素濃度を検出する酸素センサ５０と、燃焼室２０に吸気される吸気温ＴＡを検出する吸気温センサ５２とを備える。このスロットル開度センサ４４、エンジン回転数センサ４６、水温センサ４８、酸素センサ５０、及び吸気温センサ５２のそれぞれの出力信号は制御部４２に入力される。
【００２６】
図２は、エンジン１０の運転領域を検索するためのマップである。制御部４２は、エンジン回転数ＮＥとスロットル開度ＴＨとに基づいて運転領域がどの領域にあるかを検索する。このマップでは、下限スロットル開度ＴＨＯ２Ｌ及び上限スロットル開度ＴＨＯ２Ｈと、この両スロットル開度間の複数のスロットル開度ＴＨＦＢ０、ＴＨＦＢ１、ＴＨＦＢ２、ＴＨＦＢ３とが、エンジン回転数ＮＥの増大に応じて大きくなる。これらのスロットル開度は、ＴＨＯ２Ｌ＜ＴＨＦＢ０＜ＴＨＦＢ１＜ＴＨＦＢ２＜ＴＨＦＢ３＜ＴＨＯ２Ｈ、の関係が成り立つように予め設定されている。
【００２７】
設定された各スロットル開度ＴＨＯ２Ｌ、ＴＨＦＢ０、ＴＨＦＢ１、ＴＨＦＢ２、ＴＨＦＢ３、ＴＨＯ２Ｈは、ヒステリシスを設けて設定されている。つまり、図２に示す実線は、それぞれスロットル開度ＴＨを増大させる際に適用される境界値であり、この実線に隣接する破線は、それぞれスロットル開度を減少させる際に適用される境界値である。
【００２８】
図３は、空燃比のフィードバック領域を示すマップである。斜線で示す空燃比のフィードバック（Ｏ２フィードバック、Ｏ２Ｆ／Ｂ）領域は、エンジン回転数ＮＥ及びスロットル開度ＴＨで表される。Ｏ２フィードバック領域は、下限回転数ＮＬＯＰ、アイドル領域上限回転数ＮＴＨＯ２Ｌ、及び上限回転数ＮＨＯＰと、下限スロットル開度ＴＨＯ２Ｌ及び上限スロットル開度ＴＨＯ２Ｈとで定まる領域である。下限回転数ＮＬＯＰ、アイドル領域上限回転数ＮＴＨＯ２Ｌ、及び上限回転数ＮＨＯＰは、エンジン回転数ＮＥの増大側での値が実線で示され、エンジン回転数ＮＥの減少側での値が破線で示されることでヒステリシスが設定されている。下限スロットル開度ＴＨＯ２Ｌ及び上限スロットル開度ＴＨＯ２Ｈは、スロットル開度ＴＨの増大側での値が実線で示され、スロットル開度ＴＨの減少側での値が破線で示されることでヒステリシスが設定されている。
【００２９】
図４は、図２及び図３で定められる領域を重ねることで６つに区分けされたＯ２フィードバック領域の各第１学習領域Ａを示す第１学習値マップ５４を示す。図５は、図４に示す第１学習値マップ５４の模式図である。第１学習値マップ５４は、Ｏ２フィードバック制御に用いられる。
【００３０】
この複数の第１学習領域（フィードバック領域）Ａは、Ｏ２フィードバック領域を図２の運転領域に応じて６つに区分したものであり、エンジン回転数ＮＥ及びスロットル開度ＴＨで表される。複数の第１学習領域Ａは、スロットル開度ＴＨに応じて６つに区分けされており、エンジン回転数ＮＥ及びスロットル開度ＴＨに基づいて、複数の第１学習領域Ａを含む複数の運転領域が設定される。本実施の形態では、６つのＯ２フィードバック制御用の第１学習領域Ａの運転領域が「１」〜「６」の番号を付されて示され、Ｏ２フィードバック領域以外の運転領域が「０」、「７」〜「１１」の番号を付して示される。
【００３１】
「１」の第１学習領域Ａ（以下、第１学習領域Ａ１）は、エンジン１０のアイドリング領域である。「２」の第１学習領域Ａ（以下、第１学習領域Ａ２）は、第１学習領域Ａ１にエンジン回転数ＮＥが高回転側で隣接する第１学習領域Ａである。「３」の第１学習領域Ａ（以下、第１学習領域Ａ３）は、第１学習領域Ａ１及び第１学習領域Ａ２にスロットル開度ＴＨの高開度側で隣接する第１学習領域Ａである。「４」の第１学習領域Ａ（以下、第１学習領域Ａ４）は、第１学習領域Ａ３にスロットル開度ＴＨの高開度側で隣接する第１学習領域Ａである。「５」の第１学習領域Ａ（以下、第１学習領域Ａ５）は、第１学習領域Ａ４にスロットル開度ＴＨの高開度側で隣接する第１学習領域Ａである。「６」の第１学習領域Ａ（以下、第１学習領域Ａ６）は、第１学習領域Ａ５にスロットル開度ＴＨの高開度側で隣接する第１学習領域Ａである。
【００３２】
図６は、オープンループ領域の各第２学習領域Ｂを示す学習値マップである第２学習値マップ５６の模式図である。第２学習値マップ５６は、Ｏ２フィードバック制御を行うことができないオープンループ制御を行う所定の運転（本実施の形態では、リーン化運転）時に用いられる。リーン化運転は、燃費を抑えるべく空燃比を理想空燃比（１４．７）よりも高くした（例えば、空燃比は１６〜１８）運転（低燃費の運転）のことをいう。図６においては、分かり易くするために、第２学習値マップ５６を２点鎖線の第１学習値マップ５４に重ねて表示している。スロットル開度ＴＨ及びエンジン回転数ＮＥがオープンループ領域（以下、リーン化領域）内に入ると、原則としてオープンループ制御（以下、リーン化制御）を実行することでリーン化運転を行う。
【００３３】
この複数の第２学習領域Ｂは、リーン化領域を４つに区分したものであり、エンジン回転数ＮＥ及びスロットル開度ＴＨで表される。リーン化領域は、第１学習値マップ５４の領域内、つまり、Ｏ２フィードバック領域内に設定されている。リーン化領域を４つに区分けした複数の第２学習領域Ｂは、エンジン回転数ＮＥの幅が、第１学習値マップ５４よりも狭く設定されている。
【００３４】
複数の第２学習領域Ｂは、第１学習領域Ａ２内に設定される第２学習領域Ｂ（以下、第２学習領域Ｂ２）と、第１学習領域Ａ３内に設定される第２学習領域Ｂ（以下、第２学習領域Ｂ３）と、第１学習領域Ａ４内に設定される第２学習領域Ｂ（以下、第２学習領域Ｂ４）と、第１学習領域Ａ５内に設定される第２学習領域Ｂ（以下、第２学習領域Ｂ５）とを有する。
【００３５】
第２学習領域Ｂ２においては、エンジン回転数ＮＥの幅は、対応する第１学習領域Ａ２よりも狭く、且つ、スロットル開度ＴＨは、エンジン回転数ＮＥが低回転側では第１学習領域Ａ２の幅と同じだが、高回転側になるにつれ第１学習領域Ａ２の幅に対して狭くなる。詳しくは、第２学習領域Ｂ２においては、スロットル開度ＴＨが大きくなる程、エンジン回転数ＮＥの幅が広がるものであり、エンジン回転数ＮＥが高くなる程、スロットル開度ＴＨの下限が大きくなる。第２学習領域Ｂ３においては、エンジン回転数ＮＥの幅は、対応する第１学習領域Ａ３よりも狭く、且つ、スロットル開度ＴＨは、第１学習領域Ａ３と同じ幅である。第２学習領域Ｂ４においては、エンジン回転数ＮＥの幅は、対応する第１学習領域Ａ４よりも狭く、且つ、スロットル開度ＴＨは、第１学習領域Ａ４と同じ幅である。第２学習領域Ｂ５においては、エンジン回転数ＮＥの幅は、対応する第１学習領域Ａ５よりも狭く、且つ、スロットル開度ＴＨも、第１学習領域Ａ５よりも狭い。詳しくは、第２学習領域Ｂ５においては、スロットル開度ＴＨの上限が第１学習領域Ａ５よりも低く設定されている。第２学習領域Ｂ２は、スロットル開度ＴＨが低開度側の第２学習領域Ｂであり、第２学習領域Ｂ５は、スロットル開度ＴＨが高開度側の第２学習領域Ｂである。
【００３６】
図７は、制御部４２の構成を示すブロック図である。制御部４２は、基本噴射量算出部６０と、Ｏ２フィードバック部６２と、図４〜図６に示す第１学習値マップ５４及び第２学習値マップ５６を有する学習値マップ６４と、揮発性メモリ６６と、不揮発性メモリ６８と、燃料噴射量算出部７０とを備える。
【００３７】
基本噴射量算出部６０は、噴射量マップ８０を有する。噴射量マップ８０には、スロットル開度ＴＨとエンジン回転数ＮＥに応じた基本噴射量ＴＩＭＢが記憶されている３次元マップである。この基本噴射量ＴＩＭＢは、理想空燃比が得られるように、シミュレーション又は実験等によって予め設定されている。
【００３８】
図８は、噴射量マップ８０の一例を示す図である。図８においては、エンジン回転数ＮＥが所定回数の時の基本噴射量ＴＩＭＢを示している。図８に示すように、スロットル開度ＴＨが大きくなるほど、基本噴射量ＴＩＭＢも増加する。
【００３９】
基本噴射量算出部６０は、スロットル開度センサ４４が検出したスロットル開度ＴＨ及びエンジン回転数センサ４６が検出したエンジン回転数ＮＥに応じた基本噴射量ＴＩＭＢを噴射量マップ８０から取得することで、基本噴射量ＴＩＭＢを算出する。この基本噴射量ＴＩＭＢは燃料噴射弁４０が開いている時間で表すことができる。
【００４０】
Ｏ２フィードバック部６２は、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥがＯ２フィードバック領域内の場合に、空燃比を理想空燃比（ストイキオメトリー）に近づけるような補正係数を算出する。Ｏ２フィードバック部６２は、リッチリーン判定部８２と係数算出部８４とを有する。リッチリーン判定部８２は、酸素センサ５０の出力信号に基づいて排気ガスのリッチ又はリーンを判定する。
【００４１】
係数算出部８４は、フィードバック補正量算出部８４ａと、学習値算出部８４ｂとを有する。フィードバック補正量算出部８４ａは、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥがＯ２フィードバック領域内の場合に、リッチリーン判定部８２の判定結果に基づいてフィードバック補正量としてのＫＯ２及びその平均値であるＫＯ２ａｖｅを算出する。この算出されたＫＯ２及びＫＯ２ａｖｅは、揮発性メモリ６６に記憶される。
【００４２】
学習値算出部８４ｂは、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥがＯ２フィードバック領域内の場合に、ＫＯ２に応じてＫＢＵを算出するとともに、ＫＢＵａｖｅ（第１学習値）を算出する。学習値算出部８４ｂは、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥがＯ２フィードバック領域内で、且つ、リーン化領域内の場合は、ＫＢＵＬＥＡＮ（第２学習値）を算出する。このＫＢＵａｖｅは、Ｏ２フィードバック制御用のＫＢＵの平均値であり、ＫＢＵＬＥＡＮは、リーン化制御用のＫＢＵの平均値である。
【００４３】
この算出されたＫＢＵ、ＫＢＵａｖｅ、及び、ＫＢＵＬＥＡＮは、揮発性メモリ６６に記憶される。不揮発性メモリ６８には、ＫＢＵＬＥＡＮが記憶される。このＫＯ２及びＫＢＵａｖｅは、Ｏ２フィードバック制御中の燃料噴射量ＴＯＵＴの算出の際に使用される補正係数であり、空燃比を理想空燃比（ストイキ）に近づけるためのものである。
【００４４】
揮発性メモリ６６は、図９に示すように、ＫＯ２が記憶されるＫＯ２記憶部９０と、ＫＯ２ａｖｅが記憶されるＫＯ２ａｖｅ記憶部９２とを有する。また、揮発性メモリ６６は、第１学習領域Ａ１〜第１学習領域Ａ６のＫＢＵ（以下、ＫＢＵ１〜ＫＢＵ６）を記憶するＫＢＵ１記憶部９４、ＫＢＵ２記憶部９６、ＫＢＵ３記憶部９８、ＫＢＵ４記憶部１００、ＫＢＵ５記憶部１０２、及びＫＢＵ６記憶部１０４を有する。
【００４５】
また、揮発性メモリ６６は、第１学習領域Ａ１〜第１学習領域Ａ６のＫＢＵａｖｅ（以下、ＫＢＵａｖｅ１〜ＫＢＵａｖｅ６）を記憶するＫＢＵａｖｅ１記憶部１０６、ＫＢＵａｖｅ２記憶部１０８、ＫＢＵａｖｅ３記憶部１１０、ＫＢＵａｖｅ４記憶部１１２、ＫＢＵａｖｅ５記憶部１１４、及びＫＢＵａｖｅ６記憶部１１６を有する。
【００４６】
また、揮発性メモリ６６は、第２学習領域Ｂ２〜第２学習領域Ｂ５のＫＢＵＬＥＡＮ（以下、ＫＢＵＬＥＡＮ２〜ＫＢＵＬＥＡＮ５）を記憶するＫＢＵＬＥＡＮ２記憶部１１８、ＫＢＵＬＥＡＮ３記憶部１２０、ＫＢＵＬＥＡＮ４記憶部１２２、及びＫＢＵＬＥＡＮ５記憶部１２４を有する。この上記各記憶部（９０〜１２４）には、最新の値のみが記憶されている。
【００４７】
フィードバック補正量算出部８４ａは、リッチリーン判定部８２の判定結果が切り換わった場合（リッチからリーンになった時、リーンからリッチになった時）に、ＫＯ２を算出する。フィードバック補正量算出部８４ａは、算出したＫＯ２を揮発性メモリ６６のＫＯ２記憶部９０に上書きして記憶することで、ＫＯ２を更新する。なお、外部環境（温度、気圧、及び湿度等）と運転状態とが一定で、空燃比が理想空燃比近傍にある状態のときには、リッチリーン判定部８２の判定結果は略周期的に切り換わる。
【００４８】
また、フィードバック補正量算出部８４ａは、ＫＯ２の算出タイミングにて所定回数前までに算出したＫＯ２（例えば、今回と前回と前々回の計過去３回分のＫＯ２）のＫＯ２ａｖｅを算出する。フィードバック補正量算出部８４ａは、算出したＫＯ２ａｖｅを揮発性メモリ６６のＫＯ２ａｖｅ記憶部９２に上書きして記憶することで、ＫＯ２の算出の度にＫＯ２ａｖｅを更新する。
【００４９】
学習値算出部８４ｂは、リッチリーン判定部８２の判定結果が切り換わったときに、第１学習値マップ５４を用いて、スロットル開度センサ４４及びエンジン回転数センサ４６が検出したスロットル開度ＴＨ及びエンジン回転数ＮＥで特定される第１学習領域Ａを参照し、参照した第１学習領域ＡのＫＢＵ（ＫＢＵ１〜ＫＢＵ６のいずれか１つ）を算出して更新する。
【００５０】
このＫＢＵの算出は、ＫＯ２ａｖｅ記憶部９２に記憶されているＫＯ２ａｖｅの基準値に対する変動分（ＫＯ２ａｖｅ／基準値）と、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥで特定される第１学習領域Ａの現在のＫＢＵとを乗算することで新たなＫＢＵを算出する。学習値算出部８４ｂは、この算出されたＫＢＵを揮発性メモリ６６に記憶することで、ＫＯ２の算出の度にその時点におけるスロットル開度ＴＨ及びエンジン回転数ＮＥで特定される第１学習領域ＡのＫＢＵを更新する。
【００５１】
例えば、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥで特定される第１学習領域Ａが第１学習領域Ａ２の場合は、学習値算出部８４ｂは、ＫＯ２ａｖｅ記憶部９２に記憶されているＫＯ２ａｖｅの基準値に対する変動分（ＫＯ２ａｖｅ／基準値）と、ＫＢＵ２記憶部９６に記憶されているＫＢＵ２とを乗算して新たなＫＢＵ２を算出する。この新たに算出されたＫＢＵ２は、ＫＢＵ２記憶部９６に上書きして記憶する。
【００５２】
学習値算出部８４ｂは、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥで特定される第１学習領域ＡのＫＢＵを算出すると、当該第１学習領域ＡのＫＢＵの平均値であるＫＢＵａｖｅを新たに算出する。このＫＢＵａｖｅは、所定回数前までに算出した同じ第１学習領域ＡのＫＢＵの平均値（例えば、今回と４回前までの計過去５回分のＫＢＵの平均値）を算出することで求めることができる。学習値算出部８４ｂは、算出したＫＢＵａｖｅを揮発性メモリ６６に記憶する。これにより、ＫＢＵの算出の度にその時点におけるスロットル開度ＴＨ及びエンジン回転数ＮＥで特定される第１学習領域ＡのＫＢＵａｖｅを更新する。
【００５３】
例えば、現在の運転領域に応じた第１学習領域Ａが第１学習領域Ａ２の場合は、学習値算出部８４ｂは、第１学習領域Ａ２の過去所定回数分のＫＢＵ２の平均値であるＫＢＵａｖｅ２を算出し、ＫＢＵａｖｅ２記憶部１０８に該算出したＫＢＵａｖｅ２を上書きして記憶する。
【００５４】
学習値算出部８４ｂは、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥが第１学習領域Ａ内に設定された第２学習領域Ｂ内にある場合は、第２学習領域ＢのＫＢＵの平均値であるＫＢＵＬＥＡＮを算出する。つまり、スロットル開度ＴＨ及びエンジン回転数ＮＥが第２学習領域Ｂ内にあるときに算出されたＫＢＵの平均値であるＫＢＵＬＥＡＮを算出する。このＫＢＵＬＥＡＮは、スロットル開度ＴＨ及びエンジン回転数ＮＥが第２学習領域Ｂ内にあるときに算出されたＫＢＵであって、所定回数前までに算出した同じ第２学習領域Ｂ内のＫＢＵ（例えば、今回と前回と前々回の計過去３回分のＫＢＵ）の平均値を算出することで求めることができる。学習値算出部８４ｂは、算出したＫＢＵＬＥＡＮを揮発性メモリ６６に記憶する。これにより、スロットル開度ＴＨ及びエンジン回転数ＮＥが第２学習領域Ｂ内のときにＫＢＵが算出される度に、その時点における該第２学習領域ＢのＫＢＵＬＥＡＮを更新する。
【００５５】
例えば、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥが第１学習領域Ａ２内で、且つ、第２学習領域Ｂ２内にある場合は、学習値算出部８４ｂは、スロットル開度ＴＨ及びエンジン回転数ＮＥが第２学習領域Ｂ２内にあるときに算出された、過去所定回数分のＫＢＵ２の平均値であるＫＢＵＬＥＡＮ２を算出する。この算出されたＫＢＵＬＥＡＮ２記憶部１１８に記憶される。
【００５６】
ＫＢＵＬＥＡＮが更新される場合は、スロットル開度ＴＨ及びエンジン回転数ＮＥは、当然にＯ２フィードバック領域内にあるので、ＫＢＵａｖｅも更新される。つまり、スロットル開度ＴＨ及びエンジン回転数ＮＥが第１学習領域Ａ内にあり、且つ、第２学習領域Ｂ内にある場合は、当該第１学習領域Ａの、ＫＢＵ、ＫＢＵａｖｅが更新されるとともに、当該第２学習領域ＢのＫＢＵＬＥＡＮも更新される。なお、スロットル開度ＴＨ及びエンジン回転数ＮＥが第１学習領域Ａ内にあり、第２学習領域Ｂ内に無い場合は、第１学習領域ＡのＫＢＵ、ＫＢＵａｖｅのみが更新される。
【００５７】
燃料噴射量算出部７０は、燃料噴射弁４０から噴射される燃料噴射量ＴＯＵＴを算出する。詳しくは、燃料噴射量算出部７０は、スロットル開度ＴＨ及びエンジン回転数ＮＥがＯ２フィードバック領域内にある場合であって、リーン化運転が行われていない場合は、（１）式によって、燃料噴射量ＴＯＵＴを算出する。
ＴＯＵＴ＝ＴＩＭＢ×ＫＯ２×ＫＢＵａｖｅ×ＫＴＡ・・・（１）
【００５８】
ここで、（１）式のＴＩＭＢは、基本噴射量算出部６０が現在のスロットル開度ＴＨ及びエンジン回転数ＮＥに応じて算出した基本噴射量ＴＩＭＢであり、ＫＯ２は、ＫＯ２記憶部９０に記憶されているＫＯ２である。また、（１）式のＫＢＵａｖｅは、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥで特定される第１学習領域ＡのＫＢＵａｖｅであり、揮発性メモリ６６に記憶されているものである。例えば、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥが第１学習領域Ａ３内にある場合は、ＫＢＵａｖｅ３記憶部１１０に記憶されているＫＢＵａｖｅ３である。（１）式のＫＴＡは、吸気温センサ５２が検出した吸気温ＴＡに応じた吸気温補正係数ＫＴＡである。この吸気温補正係数ＫＴＡは、図示しないテーブル又はマップから取得する。なお、（１）のＫＯ２に換えて、ＫＯ２ａｖｅをフィードバック補正量として用いて燃料噴射量ＴＯＵＴを算出してもよい。
【００５９】
燃料噴射量算出部７０は、後述するリーン化運転が可能なリーン化モード中に、スロットル開度ＴＨ及びエンジン回転数ＮＥがリーン化領域内にある場合は、（２）式によって、リーン化制御用の燃料噴射量ＴＯＵＴを算出する。これにより、リーン化運転を行うことができる。
ＴＯＵＴ＝ＴＩＭＢ×ＫＯ２ｓ×ＫＢＵＬＥＡＮ×ＫＴＡ×ＫＬＥＡＮ・・・（２）
【００６０】
（２）式のＴＩＭＢ及びＫＴＡは、（１）式と同様である。（２）式のＫＯ２ｓは、リーン化運転中のようにＫＯ２が算出できない場合に代わりに用いられるＫＯ２の標準値であり、予め決められた係数である。このＫＯ２ｓは、図示しないメモリに記憶されている。（２）式のＫＢＵＬＥＡＮは、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥで特定される第２学習領域ＢのＫＢＵＬＥＡＮであり、揮発性メモリ６６に記憶されているものである。例えば、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥが第２学習領域Ｂ３内にある場合は、ＫＢＵＬＥＡＮ３記憶部１２０に記憶されているＫＢＵＬＥＡＮ３である。（２）式の、ＫＬＥＡＮは、スロットル開度ＴＨ及びエンジン回転数ＮＥに応じて変動するリーン化制御用の係数であり、燃料を薄くするための係数（例えば、０．８等）である。
【００６１】
Ｏ２フィードバック制御を行うことができないリーン化制御の場合は、ＫＯ２及びそのＫＯ２ａｖｅと、ＫＢＵ、ＫＢＵａｖｅ、ＫＢＵＬＥＡＮとが逐次更新されないので、リーン化制御中は、リーン化制御に入る前のＫＢＵＬＥＡＮがそのまま使用されることになる。
【００６２】
燃料噴射量ＴＯＵＴは燃料噴射弁４０が開いている時間で表すことができ、算出された燃料噴射量ＴＯＵＴで表される時間の間燃料噴射弁４０が開くことで、燃料噴射弁４０から燃料が噴射される。
【００６３】
なお、Ｏ２フィードバック制御とは、スロットル開度ＴＨ及びエンジン回転数ＮＥがＯ２フィードバック領域内であって、且つ、リーン化運転が行われていない状況下で、ＫＯ２、ＫＯ２ａｖｅ、ＫＢＵ、及びＫＢＵａｖｅを更新していき、更新したＫＯ２及びＫＯ２ａｖｅを用いて、燃料噴射量ＴＯＵＴを算出する処理を行う一連の制御のことをいう。後述するリーン化モード中を除き、このＯ２フィードバック制御中に、ＫＢＵＬＥＡＮも更新されていく。
【００６４】
このように、本実施の形態では、第１学習値マップ５４と別に、第１学習値マップ５４内に設定され、且つ、エンジン回転数ＮＥの幅が第１学習値マップ５４よりも低く設定されている第２学習値マップ５６を設けている。この第２学習値マップ５６の第２学習値マップ５６の各第２学習領域Ｂのエンジン回転数ＮＥの幅は、対応する第１学習値マップ５４の第１学習領域Ａよりも狭く設定されている。
【００６５】
ここで、同じ第１学習領域Ａ内のＫＢＵａｖｅであっても、エンジン回転数ＮＥが高回転側と低回転側とで算出されるＫＢＵａｖｅの値には、大きな差が生じてしまう可能性がある。例えば、第１学習領域Ａ３であって、図５のＰ３１で示される点（エンジン回転数ＮＥが低回転側）で学習されるＫＢＵによるＫＢＵａｖｅと、Ｐ３２で示される点（エンジン回転数ＮＥが高回転側）で学習されるＫＢＵによるＫＢＵａｖｅとには差がある場合が多い。
【００６６】
しかしながら、第２学習領域Ｂのエンジン回転数ＮＥの幅は第１学習領域Ａに比べ狭いので、同じ第２学習領域Ｂ内のエンジン回転数ＮＥが高回転側と低回転側とで算出されるＫＢＵＬＥＡＮの差を、ＫＢＵａｖｅの場合に対して小さくすることができ、ＫＢＵＬＥＡＮの精度を高くすることができる。
【００６７】
Ｏ２フィードバック制御を行っている最中は、以前にＫＢＵを学習した運転領域（例えばＰ３１）が、今回の燃料噴射量算出タイミングでの運転領域（例えばＰ３２）と異なっていても、ＫＯ２の算出の度に、ＫＢＵａｖｅ等も逐次更新されていくので、上記（１）式によって算出される燃料噴射量ＴＯＵＴに与える影響は少ない。これに対して、リーン化制御の場合は、ＫＢＵａｖｅ及びＫＢＵＬＥＡＮ等は更新されない。そのため、揮発性メモリ６６に記憶されている第１学習値マップ５４のＫＢＵａｖｅが低回転側で算出されたものである場合に、現在のエンジン回転数ＮＥが高回転側になると、揮発性メモリ６６に記憶されているＫＢＵａｖｅとのズレが大きくなってしまう可能性がある。
【００６８】
従って、リーン化制御中には、第１学習値マップ５４のＫＢＵａｖｅに換えて、第２学習値マップ５６のＫＢＵＬＥＡＮを用いる。これにより、揮発性メモリ６６に記憶されている第２学習値マップ５６のＫＢＵＬＥＡＮが低回転側で算出されたものである場合に、現在のエンジン回転数ＮＥが高回転側になったとしても、揮発性メモリ６６に記憶されているＫＢＵａｖｅとのズレを小さくすることができる。その結果、適切な燃料噴射量ＴＯＵＴを算出することができる。
【００６９】
なお、第１学習領域Ａ５に関しては、アクセル開度の低開度側と高開度側とで算出されるＫＢＵａｖｅの値にも比較的大きな差が生じる可能性がある。例えば、図５のＰ５１で示される点（スロットル開度ＴＨが低開度側）で学習されるＫＢＵによるＫＢＵａｖｅと、Ｐ５２で示される点（スロットル開度ＴＨが高開度側）で学習されるＫＢＵによるＫＢＵａｖｅには差がある場合が多い。従って、第２学習領域Ｂ５では、スロットル開度ＴＨの上限が第１学習領域Ａ５よりも低く設定している。これにより、同じ第２学習領域Ｂ５内のスロットル開度ＴＨが高開度側と低開度側とで算出されるＫＢＵＬＥＡＮ５の差を、ＫＢＵａｖｅ５の場合に対して小さくすることができ、ＫＢＵＬＥＡＮ５の精度を高くすることができる。
【００７０】
図１０は、リーン化運転が可能なリーン化モードの設定動作を示すフローチャートである。まず、制御部４２は、水温センサ４８が検出した水温ＴＷが所定温度以上であるか否かを判断する（ステップＳ１）。
【００７１】
ステップＳ１で、水温ＴＷが所定温度以上であると判断すると、制御部４２は、燃料噴射制御装置１２が搭載される車両がニュートラル状態であるか否かを判断する（ステップＳ２）。
【００７２】
ステップＳ２で、ニュートラル状態であると判断すると、ＫＢＵａｖｅ１と、ＫＢＵＬＥＡＮ３、４とが学習済み、つまり、揮発性メモリ６６に記憶されているか否かを判断する（ステップＳ３）。
【００７３】
ステップＳ３で、ＫＢＵａｖｅ１と、ＫＢＵＬＥＡＮ３、４とが学習済みと判断すると、制御部４２は、リーン化モードに設定する（ステップＳ４）。なお、ステップＳ１で、水温ＴＷが所定温度未満と判断した場合、ステップＳ２で、ニュートラル状態と判断した場合、ステップＳ３で、ＫＢＵａｖｅ１及びＫＢＵＬＥＡＮ３、４のうち、少なくとも１つが未学習であると判断した場合は、リーン化モードに設定しない。
【００７４】
図１１は、スロットル開度ＴＨ及びエンジン回転数ＮＥがＯ２フィードバック領域内にある場合の、燃料噴射制御装置１２の動作を示すフローチャートである。まず、制御部４２は、現在リーン化モード中であるか否かを判断する（ステップＳ１１）。
【００７５】
ステップＳ１１で、リーン化モード中であると判断すると、制御部４２は、スロットル開度センサ４４及びエンジン回転数センサ４６が検出した現在のスロットル開度ＴＨ及びエンジン回転数ＮＥが、リーン化領域内であるか否かを判断する（ステップＳ１２）。
【００７６】
ステップＳ１２で、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥがリーン化領域内にあると判断すると、制御部４２は、該スロットル開度ＴＨ及びエンジン回転数ＮＥで特定される第２学習領域ＢのＫＢＵＬＥＡＮが揮発性メモリ６６に記憶されているか否か（学習済みであるか否か）を判断する（ステップＳ１３）。例えば、スロットル開度ＴＨ及びエンジン回転数ＮＥで特定される第２学習領域Ｂが第２学習領域Ｂ５の場合は、ＫＢＵＬＥＡＮ５が学習済みであるか否かを判断する。
【００７７】
ステップＳ１１で、リーン化モード中でないと判断された場合、ステップＳ１２で、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥがリーン化領域内でないと判断された場合、ステップＳ１３で、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥで特定される第２学習領域ＢのＫＢＵＬＥＡＮが学習済みでないと判断された場合は、ステップＳ１４に進み、制御部４２は、Ｏ２フィードバック制御を行う。
【００７８】
具体的には、燃料噴射量算出部７０は、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥで特定される第１学習領域ＡのＫＢＵａｖｅと、ＫＯ２とを揮発性メモリ６６から取得する。そして、基本噴射量算出部６０が現在のスロットル開度ＴＨ及びエンジン回転数ＮＥに応じて算出した基本噴射量ＴＩＭＢに、取得したＫＯ２及びＫＢＵａｖｅと、ＫＯ２現在の吸気温ＴＡに応じて吸気温補正係数ＫＴＡとを乗算することで、燃料噴射量ＴＯＵＴを算出する。つまり、上述した（１）式を用いて燃料噴射量ＴＯＵＴを算出する。燃料噴射弁４０は、この算出された燃料噴射量ＴＯＵＴで燃料を噴射する。
【００７９】
一方、ステップＳ１３で、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥで特定される第２学習領域ＢのＫＢＵＬＥＡＮが学習済みであると判断すると、制御部４２は、リーン化制御を行ってリーン化運転を行う（ステップＳ１５）。
【００８０】
具体的には、燃料噴射量算出部７０は、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥに応じた第２学習領域ＢのＫＢＵＬＥＡＮを揮発性メモリ６６から取得する。そして、基本噴射量算出部６０が現在のスロットル開度ＴＨ及びエンジン回転数ＮＥに応じて算出した基本噴射量ＴＩＭＢに、ＫＯ２ｓと、取得したＫＢＵＬＥＡＮと、現在の吸気温ＴＡに応じた吸気温補正係数ＫＴＡと、リーン化制御用の係数であるＫＬＥＡＮとを乗算することで、燃料噴射量ＴＯＵＴを算出する。つまり、上述した（２）式を用いて燃料噴射量ＴＯＵＴを算出する。燃料噴射弁４０は、この算出された燃料噴射量ＴＯＵＴで燃料を噴射する。この（２）式で算出される燃料噴射量ＴＯＵＴは、（１）式で算出される燃料噴射量ＴＯＵＴに対して燃料が少ないものになり、燃料噴射弁４０から噴射される燃料を少なくしたリーン化運転を行うことができる。
【００８１】
係数算出部８４は、このＯ２フィードバック制御中に、少なくともＫＯ２、ＫＯ２ａｖｅ、ＫＢＵ、及びＫＢＵａｖｅを逐次算出し、揮発性メモリ６６に最新の値が記憶される。このＫＢＵａｖｅ等の更新を図１２のフローチャートに従って説明する。
【００８２】
まず、係数算出部８４は、ＫＯ２の算出タイミングが到来したか否かを判断する（ステップＳ２１）。係数算出部８４は、リッチリーン判定部８２の判定結果が切り換わると（リッチからリーンになる、又は、リーンからリッチになると）ＫＯ２の算出タイミングが到来したと判断する。
【００８３】
ステップＳ２１で、ＫＯ２の算出タイミングが到来していないと判断すると、到来するまでステップＳ２１に留まり、算出タイミングが到来したと判断すると、ステップＳ２２に進む。ステップＳ２２に進むと、係数算出部８４のフィードバック補正量算出部８４ａは、ＫＯ２とＫＯ２ａｖｅとを算出して更新する。つまり、算出されたＫＯ２が揮発性メモリ６６のＫＯ２記憶部９０に上書きされ、算出されたＫＯ２ａｖｅが揮発性メモリ６６のＫＯ２ａｖｅ記憶部９２に上書きされる。
【００８４】
次いで、学習値算出部８４ｂは、スロットル開度センサ４４及びエンジン回転数センサ４６が検出した現在のスロットル開度ＴＨ及びエンジン回転数ＮＥに基づいて第１学習領域Ａを特定する（ステップＳ２３）。言い換えるならば、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥで特定される第１学習領域Ａを判定する。
【００８５】
次いで、学習値算出部８４ｂは、特定された第１学習領域ＡのＫＢＵ、ＫＢＵａｖｅを算出して更新する（ステップＳ２４）。つまり、算出された第１学習領域ＡのＫＢＵ、ＫＢＵａｖｅが揮発性メモリ６６に上書きされる。例えば、特定された第１学習領域Ａが第１学習領域Ａ５の場合は、ＫＢＵ５及びＫＢＵａｖｅ５が算出され、算出されたＫＢＵ５及びＫＢＵａｖｅ５が揮発性メモリ６６のＫＢＵ５記憶部１０２及びＫＢＵａｖｅ５記憶部１１４に上書きされる。
【００８６】
次いで、学習値算出部８４ｂは、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥが、ステップＳ２３で特定された第１学習領域Ａ内に設定された第２学習領域Ｂ内にあるか否かを判断する（ステップＳ２５）。例えば、特定された第１学習領域Ａが第１学習領域Ａ５の場合は、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥが、第２学習領域Ｂ５内にあるか否かを判断する。
【００８７】
ステップＳ２５で、スロットル開度ＴＨ及びエンジン回転数ＮＥが、ステップＳ２３で特定された第１学習領域Ａ内に設定された第２学習領域Ｂ内にあると判断すると、学習値算出部８４ｂは、第２学習領域ＢのＫＢＵＬＥＡＮを算出して更新する（ステップＳ２６）。つまり、算出された第２学習領域ＢのＫＢＵＬＥＡＮが揮発性メモリ６６に上書きされる。例えば、現在のスロットル開度ＴＨ及びエンジン回転数ＮＥが第２学習領域Ｂ５内にあると判断されると、ＫＢＵＬＥＡＮ５が算出され、算出されたＫＢＵＬＥＡＮ５が揮発性メモリ６６のＫＢＵＬＥＡＮ５記憶部１２４に上書きされる。
【００８８】
一方、ステップＳ２５で、スロットル開度ＴＨ及びエンジン回転数ＮＥが、ステップＳ２３で判定された第１学習領域Ａ内に設定された第２学習領域Ｂ内にないと判断されると、ＫＢＵＬＥＡＮは更新されずに処理が終了する。
【００８９】
このように、リーン化モード中でない場合で、スロットル開度ＴＨ及びエンジン回転数ＮＥがＯ２フィードバック領域内に入ると、Ｏ２フィードバック制御が実行される。これにより、ＫＯ２及びＫＯ２ａｖｅが更新されていくとともに、各第１学習領域ＡのＫＢＵ、及びＫＢＵａｖｅが更新されていく。また、Ｏ２フィードバック制御中に、スロットル開度ＴＨ及びエンジン回転数ＮＥがリーン化領域内に入ると、更に、該スロットル開度ＴＨ及びエンジン回転数ＮＥで特定される第２学習領域ＢのＫＢＵＬＥＡＮが更新される。
【００９０】
また、リーン化モード中であっても、スロットル開度ＴＨ及びエンジン回転数ＮＥがリーン化領域内に入っていない場合は、Ｏ２フィードバック制御が実行される。これにより、ＫＯ２及びＫＯ２ａｖｅが更新されていくとともに、各第１学習領域ＡのＫＢＵ、及びＫＢＵａｖｅが更新されていく。
【００９１】
また、リーン化モード中で、スロットル開度ＴＨ及びエンジン回転数ＮＥがリーン化領域内に入っている場合でも、該スロットル開度ＴＨ及びエンジン回転数ＮＥで特定される第２学習領域ＢのＫＢＵＬＥＡＮが学習されていない場合は、Ｏ２フィードバック制御が実行される。これにより、ＫＯ２及びＫＯ２ａｖｅに加え、第１学習領域ＡのＫＢＵ、及びＫＢＵａｖｅが更新されるとともに、学習されていない第２学習領域ＢのＫＢＵＬＥＡＮも学習される。
【００９２】
以上のことから、リーン化モードに入ると、原則として第２学習領域ＢのＫＢＵＬＥＡＮは更新されず、例外として学習されていない第２学習領域ＢのＫＢＵＬＥＡＮのみが学習されることになる。
【００９３】
なお、スロットル開度ＴＨの変化率ΔＴＨが閾値を超えた場合、水温ＴＷが所定値を下回った場合、センサ故障等の不具合によりフェール制御に入った場合は、リーン化モードが解除される。
【００９４】
以上のように、本実施の形態においては、Ｏ２フィードバック制御中は、第１学習値マップ５４内の各第１学習領域ＡのＫＢＵａｖｅを更新して、燃料噴射量ＴＯＵＴを算出するので、従来と同等のＫＢＵａｖｅの学習スピードとＯ２フィードバック制御の精度を確保することができる。また、第１学習値マップ５４の領域内でリーン化運転に用いられる第２学習値マップ５６を設定し、Ｏ２フィードバック制御中に、第２学習値マップ５６内で学習する際は、第１学習値マップ５４内の第１学習領域ＡのＫＢＵａｖｅと、第２学習値マップ５６内の第２学習領域ＢのＫＢＵＬＥＡＮとの両方を学習させることで、同じスロットル開度ＴＨ及びエンジン回転数ＮＥであっても、異なる学習値を学習することができる。従って、所定の運転に用いられるＫＢＵＬＥＡＮの精度が向上し、第２学習値マップ５６の領域内で所定の運転を行う際は、第２学習値マップ５６のＫＢＵＬＥＡＮを用いることで高精度な燃料噴射を行うことができる。
【００９５】
リーン化モードに入った場合は、リーン化モードに入る前の第２学習値マップ５６の各第２学習領域ＢのＫＢＵＬＥＡＮの更新（学習）を停止するので、リーン化運転中に想定している空燃比とのズレを抑えることができる。
【００９６】
リーン化モード中に、リーン化運転が実行されていない場合は、ＫＢＵａｖｅの更新（学習）を行うので、リーン化モード中もＫＢＵａｖｅの精度を確保することができる。
【００９７】
第２学習値マップ５６のスロットル開度ＴＨが低開度側の第２学習領域Ｂ２は、スロットル開度ＴＨが大きくなる程、エンジン回転数ＮＥの幅が広がるように設定されているので、リーン化運転が可能な領域を極力広げ、低燃費化を図ることができる。
【００９８】
第２学習値マップ５６のスロットル開度ＴＨが高開度側の第２学習領域Ｂ５は、第２学習領域Ｂ５に対応する第１学習値マップ５４の第１学習領域Ａ５よりも、スロットル開度ＴＨの上限が低く設定されているので、リーン化運転が可能な領域を適切に制限でき、リーン化運転中のエンジン１０の運転変動を抑えることができる。
【００９９】
なお、不揮発性メモリ６８には、最初に算出されたＫＢＵａｖｅ１〜５の値、リーン化モードに設定される直前に揮発性メモリ６６に記憶されているＫＢＵａｖｅ１〜６の値、又は、リーン化モードが解除後に最初に算出されたＫＢＵａｖｅ１〜ＫＢＵａｖｅ６の値が記憶される。この不揮発性メモリ６８に記憶されているＫＢＵａｖｅ１〜６は、エンジン始動直後のＯ２フィードバック制御時の燃料噴射量ＴＯＵＴの算出に用いられる。
【符号の説明】
【０１００】
１０…エンジン                        １２…燃料噴射制御装置
２２…吸気管                          ２４…排気管
３０…吸気バルブ                      ３２…排気バルブ
３４…スロットルバルブ                ４０…燃料噴射弁
４２…制御部                          ４４…スロットル開度センサ
４６…エンジン回転数センサ            ５０…酸素センサ
５４…第１学習値マップ                ５６…第２学習値マップ
６０…基本噴射量算出部                ６２…フィードバック部
６４…学習値マップ                    ６６…揮発性メモリ
７０…燃料噴射量算出部                ８０…噴射量マップ
８２…リッチリーン判定部              ８４…係数算出部
８４ａ…フィードバック補正量算出部    ８４ｂ…学習値算出部
【図１】
0006006189.tif 000002
【図２】
0006006189.tif 000003
【図３】
0006006189.tif 000004
【図４】
0006006189.tif 000005
【図５】
0006006189.tif 000006
【図６】
0006006189.tif 000007
【図７】
0006006189.tif 000008
【図８】
0006006189.tif 000009
【図９】
0006006189.tif 000010
【図１０】
0006006189.tif 000011
【図１１】
0006006189.tif 000012
【図１２】
0006006189.tif 000013