(57)【特許請求の範囲】
【請求項１】
エンジンの負荷と回転数に基づいて基本噴射量を演算する手段と、
乗算項の学習値を割合の単位で格納する手段と、
加算項の学習値を噴射量の単位で格納する手段と、
前記加算項の学習値を前記基本噴射量に対する割合に換算した値と前記乗算項の学習値とのトータルでリミッタが所定の範囲に収まるように前記２つの学習値をそれぞれ制限する手段と、
排気の空燃比を検出する手段と、
この空燃比検出手段の出力に基づいて空燃比が理論空燃比と一致するように空燃比フィードバック補正量を演算する手段と、
この空燃比フィードバック補正量と前記制限された２つの学習値とで前記基本噴射量を補正して燃料噴射量を演算する手段と、
この噴射量の燃料をエンジンに供給する手段と
を設けたことを特徴とするエンジンの空燃比制御装置。
【請求項２】
前記燃料噴射量が前記基本噴射量と無効噴射量の和からなり、前記加算項の学習値がこの無効噴射量の学習値であることを特徴とする請求項１に記載のエンジンの空燃比制御装置。
【請求項３】
前記無効噴射量の学習値を低負荷域でだけ前記空燃比フィードバック補正量に基づいて更新することを特徴とする請求項２に記載のエンジンの空燃比制御装置。
【請求項４】
前記乗算項の学習値が学習領域毎の学習値であることを特徴とする請求項２または３に記載のエンジンの空燃比制御装置。
【請求項５】
前記学習領域毎の学習値を低負荷域以外の運転域で前記空燃比フィードバック補正量に基づいて更新することを特徴とする請求項４に記載のエンジンの空燃比制御装置。
【請求項６】
前記乗算項の学習値がパージカット時の学習値であることを特徴とする請求項２または３に記載のエンジンの空燃比制御装置。
【請求項７】
前記パージカット時の学習値を所定の１つの学習領域でだけ前記空燃比フィードバック補正量に基づいて更新することを特徴とする請求項６に記載のエンジンの空燃比制御装置。
【請求項８】
前記乗算項の学習値がパージカット時の学習値と学習領域毎の学習値とからなり、パージカット時の学習値からしきい値を差し引いた値と学習領域毎の学習値との比較により、パージカット時の学習値からしきい値を差し引いた値が学習領域毎の学習値以下のときパージカット時の学習値を、またパージカット時の学習値からしきい値を差し引いた値が学習領域毎の学習値を超えるとき学習領域毎の学習値を選択することを特徴とする請求項２または３に記載のエンジンの空燃比制御装置。
【請求項９】
前記無効噴射量の学習値単独でリミッタを設けることを特徴とする請求項２または３に記載のエンジンの空燃比制御装置。
【請求項１０】
前記無効噴射量の学習値の更新時に、前記基本噴射量に応じたリミッタで無効噴射量の学習値を制限するとともに、そのリミッタで無効噴射量の学習値が制限されるときは、そのリミッタで無効噴射量の学習値を更新することを特徴とする請求項９に記載のエンジンの空燃比制御装置。
【請求項１１】
前記無効噴射量の学習値の更新時に、前記基本噴射量に応じたリミッタと前記無効噴射量の学習値単独のリミッタとの狭いほうで無効噴射量の学習値を制限するとともに、その狭いほうのリミッタで無効噴射量の学習値が制限されるときは、その狭いほうのリミッタで無効噴射量の学習値を更新することを特徴とする請求項９に記載のエンジンの空燃比制御装置。
【請求項１２】
前記無効噴射量の学習値の参照時に、低負荷域に限り前記基本噴射量に応じたリミッタで無効噴射量の学習値を制限することを特徴とする請求項９または１０に記載のエンジンの空燃比制御装置。
【請求項１３】
前記リミッタは、２つの学習値のトータルとして割合の単位で予め定めたリミッタから前記乗算項の学習値を差し引いた値に前記基本噴射量をかけた値であることを特徴とする請求項１０から１２までのいずれか一つに記載のエンジンの空燃比制御装置。
【請求項１４】
前記学習領域毎の学習値の更新時に、前記無効噴射量の学習値に応じたリミッタで学習領域毎の学習値を制限するとともに、そのリミッタで学習領域毎の学習値が制限されるときは、そのリミッタで学習領域毎の学習値を更新することを特徴とする請求項４または５に記載のエンジンの空燃比制御装置。
【請求項１５】
前記学習領域毎の学習値の更新時に、前記無効噴射量の学習値に応じたリミッタと２つの学習値のトータルとして割合の単位で予め定めたリミッタとの狭いほうで学習領域毎の学習値を制限するとともに、その狭いほうのリミッタで学習領域毎の学習値が制限されるときは、その狭いほうのリミッタで学習領域毎の学習値を更新することを特徴とする請求項４または５に記載のエンジンの空燃比制御装置。
【請求項１６】
前記学習領域毎の学習値の参照時に、前記無効噴射量の学習値に応じたリミッタで学習領域毎の学習値を制限するとともに、そのリミッタで学習領域毎の学習値が制限されるときは、そのリミッタで学習領域毎の学習値を更新することを特徴とする請求項４、５、１４、１５のいずれか一つに記載のエンジンの空燃比制御装置。
【請求項１７】
前記学習領域毎の学習値の参照時に、前記無効噴射量の学習値に応じたリミッタと２つの学習値のトータルとして割合の単位で予め定めたリミッタとの狭いほうで学習領域毎の学習値を制限するとともに、その狭いほうのリミッタで学習領域毎の学習値が制限されるときは、その狭いほうのリミッタで学習領域毎の学習値を更新することを特徴とする請求項４、５、１４、１５のいずれか一つに記載のエンジンの空燃比制御装置。
【請求項１８】
前記リミッタは、２つの学習値のトータルとして割合の単位で予め定めたリミッタから前記無効噴射量の学習値を前記基本噴射量に対する割合に換算した値を差し引いた値であることを特徴とする請求項１４から１７までのいずれか一つに記載のエンジンの空燃比制御装置。
【請求項１９】
前記基本噴射量に代えて各学習領域の負荷の下限を定める値を用いることを特徴とする請求項１８に記載のエンジンの空燃比制御装置。
【請求項２０】
前記パージカット時の学習値の更新時に前記無効噴射量の学習値に応じたリミッタでパージカット時の学習値を制限するとともに、そのリミッタでパージカット時の学習値が制限されるときは、そのリミッタでパージカット時の学習値を更新することを特徴とする請求項６または７に記載のエンジンの空燃比制御装置。
【請求項２１】
前記パージカット時の学習値の更新時に前記無効噴射量の学習値に応じたリミッタと２つの学習値のトータルとして割合の単位で予め定めたリミッタとの狭いほうでパージカット時の学習値を制限するとともに、その狭いほうのリミッタでパージカット時の学習値が制限されるときは、その狭いほうのリミッタでパージカット時の学習値を更新することを特徴とする請求項６または７に記載のエンジンの空燃比制御装置。
【請求項２２】
前記リミッタは、２つの学習値のトータルとして割合の単位で予め定めたリミッタから前記無効噴射量の学習値を前記基本噴射量に対する割合に換算した値を差し引いた値であることを特徴とする請求項２０または２１に記載のエンジンの空燃比制御装置。
【請求項２３】
前記基本噴射量に代えて学習領域の負荷の下限を定める値を用いることを特徴とする請求項２２に記載のエンジンの空燃比制御装置。
【請求項２４】
前記パージカット時の学習値の参照時に前記無効噴射量の学習値に応じたリミッタで前記パージカット時の学習値を制限することを特徴とする請求項６、７、２０、２１のいずれか一つに記載のエンジンの空燃比制御装置。
【請求項２５】
前記パージカット時の学習値の参照時に前記無効噴射量の学習値に応じたリミッタと２つの学習値のトータルとして割合の単位で予め定めたリミッタとの狭いほうで前記パージカット時の学習値を制限することを特徴とする請求項６、７、２０、２１のいずれか一つに記載のエンジンの空燃比制御装置。
【請求項２６】
前記リミッタは、２つの学習値のトータルとして割合の単位で予め定めたリミッタから前記無効噴射量の学習値を前記基本噴射量に対する割合に換算した値を差し引いた値であることを特徴とする請求項２４または２５に記載のエンジンの空燃比制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明はエンジンの空燃比制御装置、特に空燃比学習値にリミッタを設け、学習値がこのリミッタを超えないように制限するものに関する。
【０００２】
【従来の技術】
空燃比制御に２種以上の学習値を導入するものがある。この種の装置として、たとえば特開昭６４−１９１４３号公報では、マップ学習値ＫＬＣＤ２のほかに、噴射弁流量特性値の学習値（１データ）ＫＬＣＤ１と無効噴射パルス幅の学習値（以下、簡単に「ＴＳ学習値」という、１データ）ＫＬＣＤ３を導入し、
Ｔｐ＝（Ｑａ／Ｎ）×ＫＣＯＮＳＴ×ＫＬＣＤ１
ただし、Ｔｐ：基本噴射パルス幅
Ｑａ：吸入空気流量
Ｎ：エンジン回転数
ＫＣＯＮＳＴ：噴射定数
の式により基本噴射パルス幅Ｔｐを計算するとともに、
Ｔｉ＝Ｔｐ×ＣＯＥＦ×ＫＬＣＤ２×ＡＬＰＨＡ＋Ｔｓ＋ＫＬＣＤ３
ただし、ＣＯＥＦ：１と各種補正係数の和
ＡＬＰＨＡ：空燃比フィードバック補正係数
Ｔｓ：無効噴射パルス幅
の式により１サイクル値に必要となる燃料噴射パルス幅Ｔｉを計算している。
【０００３】
【発明が解決しようとする課題】
ところで、最近の空燃比学習制御では、学習値に対して所定の範囲（あるいは一定割合）のリミッタを設けることで、燃料インジェクタやエアフローメータの製造時の部品バラツキや経時劣化を吸収することができ、また誤学習による理論空燃比からの空燃比誤差も同じ所定の範囲以内であれば、エンスト等の不具合を回避できることがわかっている。
【０００４】
しかしながら、従来装置において、ＫＬＣＤ１、ＫＣＬＤ２は乗算の形で導入された学習値（以下「乗算項の学習値」という）であるのに対してＫＬＣＤ３は加算の形で導入された学習値（以下「加算項の学習値」という）であり、このように異なる形式の２つの学習値を合わせもつものにおいて、各学習値毎に独立してリミッタを設けたのでは、２つの学習値のトータルで所定の範囲のリミッタを確保するのが難しく、一方の学習値が上限リミッタや下限リミッタに張り付いたとき２つの学習値のトータルでリミッタが所定の範囲を超えてしまう事態が生じる。
【０００５】
たとえば、話を簡単にするため従来装置においてＫＬＣＤ１、ＣＯＥＦを省略し、
Ｔｐ＝（Ｑａ／Ｎ）×ＫＣＯＮＳＴ                          …（ａ）
Ｔｉ＝Ｔｐ×マップ学習値×ＡＬＰＨＡ＋Ｔｓ＋ＴＳ学習値    …（ｂ）
の式で考える。
【０００６】
ここで、学習値のリミッタの説明に入る前に、燃料噴射パルス幅の演算式の意味するところを簡単に説明する。まずＴｓは燃料インジェクタの応答遅れを考慮するものである。燃料インジェクタにＴｐの間だけ開弁する信号を与えても、すぐには開くことができず、応答遅れをもって開くので、この応答遅れ分だけ噴射期間が短くなって燃料が不足する。そこで、Ｔｓの分だけ多くすることによって実際にＴｐの間だけ開弁させるようにしているわけである。通常、Ｔｓはバッテリ電圧の影響を大きく受け、バッテリ電圧が低下するほど応答遅れが大きくなるので、バッテリ電圧が低下するほど大きくなる値となっている。
【０００７】
一方、エアフローメータや燃料インジェクタの流量特性に製作バラツキや経時劣化があると、排気の空燃比が理論空燃比からずれてくるが（この場合の理論空燃比からのずれ（空燃比偏差）が定常偏差といわれる）、マップ学習値はこれら空燃比制御部品の製作バラツキや経時劣化に左右されずに、空燃比フィードバック制御を行わない運転条件においても定常偏差を解消するための値である。たとえば、燃料インジェクタの流量特性が設定値より小さいものでは、噴射量が不足して排気の空燃比がリーン側に傾き、このリーン側に傾いた空燃比を理論空燃比に戻そうとＡＬＰＨＡ（中心値は１００％）が１００％よりも大きな値へと変化していく。このときのＡＬＰＨＡに基づいてマップ学習値（中心値は１００％）が更新されるので、マップ学習値は１００％より大きい値へと変化してゆく。このようにして、マップ学習値が収束した段階では、ＡＬＰＨＡが演算されなくとも、ふたたび空燃比が理論空燃比へと落ち着くことになり、燃料インジェクタの流量特性が設定値より小さいものであっても、流量特性が設定通りの燃料インジェクタと変わらなくなるわけである。
【０００８】
同様にして、燃料インジェクタの開き初めのタイミングに製作バラツキや経時劣化があっても、排気の空燃比が理論空燃比からずれるので、このずれを解消するための値がＴＳ学習値である。たとえば燃料インジェクタの開き初めのタイミングが設定値より遅れるものでは、噴射量が不足して排気の空燃比がリーン側に傾き、このリーン側に傾いた空燃比を理論空燃比に戻そうとＡＬＰＨＡが１００％よりも大きな値へと変化し、このときのＡＬＰＨＡに基づいて更新されるＴＳ学習値（中心値は０ｍｓ）、０ｍｓより大きい値へと変化する。したがって、ＴＳ学習値が収束した段階で、ＡＬＰＨＡが演算されなくともふたたび空燃比が理論空燃比へと落ち着くことになり、燃料インジェクタの開き初めのタイミングが設定値より遅れるものであっても、開き初めのタイミングが設定通りの燃料インジェクタと変わらなくなる。
【０００９】
ただし、マップ学習値とＴＳ学習値とで学習許可条件を相違させており、マップ学習値は学習領域毎に更新するのに対して、ＴＳ学習値は低負荷域でだけ更新している。これは、低負荷域ではＴｓよりもＴｐが相対的に小さく、したがって低負荷域における理論空燃比からのずれ（空燃比偏差）は、Ｔｓによる分が支配的となるので、Ｔｓ学習値を更新させるようにしたものである。
【００１０】
これで燃料噴射パルス幅の演算式の説明を終える。
【００１１】
さて、上記（ｂ）式のマップ学習値（乗算項の学習値）とＴＳ学習値（加算項の学習値）を、
９０％≦マップ学習値≦１１０％                    …（ｃ）
−０．１ｍｓ≦ＴＳ学習値≦＋０．１ｍｓ                  …（ｄ）
のように各学習値毎に独立してリミッタを設定したとする。このとき、マップ学習値はＴｐに対する乗算項として、またＴＳ学習値はＴｐに対する加算項として加わることから、マップ学習値のリミッタについてはＴｐの大小に関係なく１１０％が上限リミッタ、９０％が下限リミッタとなるのに対して、ＴＳ学習値のリミッタについてはＴｐが小さくなるほどＴｐに対するリミッタ分が大きくなっていくため、いまＴｐを横軸にとり、マップ学習値のリミッタとＴＳ学習値のリミッタを重ねてみると、図１５上段に示したようになる。つまり、Ｔｐが小さい領域では、ＴＳ学習値のＴｐに対するリミッタ分が急激に大きくなるため、マップ学習値が上限リミッタの１１０％や下限リミッタの９０％に張り付いたとき、ＴＳ学習値がリミッタ分を超えなくても、２つの学習値のトータルでリミッタが±１０％を超えてしまうのである。
【００１２】
そこで本発明は、加算項の学習値を基本噴射量に対する割合（たとえばパーセント）に換算した値と、もともと割合の単位で設けられる乗算項の学習値とのトータルでリミッタが所定の範囲（たとえば±１０パーセント）に収まるように２つの学習値をそれぞれ制限することにより、単位の異なる加算項の学習値と乗算項の学習値を合わせもつものにおいても、２つの学習値のトータルでのリミッタを所定の範囲に収めることができ、これによって誤学習の悪影響を小さくするとともに、エンスト等の不具合を回避することを目的とする。
【００１３】
【課題を解決するための手段】
第１の発明は、図２５に示すように、エンジンの負荷と回転数に基づいて基本噴射量ＴＰ０を演算する手段２１と、乗算項の学習値を割合の単位（たとえばパーセント）で格納する手段２２と、加算項の学習値を噴射量の単位（たとえばｍｓ）で格納する手段２３と、前記加算項の学習値を前記基本噴射量ＴＰ０に対する割合に換算した値と前記乗算項の学習値とのトータルでリミッタが所定の範囲（たとえば±１０パーセント）に収まるように前記２つの学習値をそれぞれ制限する手段２４、２５と、排気の空燃比を検出する手段２６と、この空燃比検出手段２６の出力に基づいて空燃比が理論空燃比と一致するように空燃比フィードバック補正量ＡＬＰＨＡを演算する手段２７と、この空燃比フィードバック補正量ＡＬＰＨＡと前記制限された２つの学習値とで前記基本噴射量ＴＰ０を補正して燃料噴射量を演算する手段２８と、この噴射量の燃料をエンジンに供給する手段２９とを設けた。
【００１４】
第２の発明では、第１の発明において前記燃料噴射量が前記基本噴射量と無効噴射量の和からなり、前記加算項の学習値がこの無効噴射量の学習値である。
【００１５】
第３の発明では、第２の発明において前記無効噴射量の学習値を低負荷域でだけ前記空燃比フィードバック補正量ＡＬＰＨＡに基づいて更新する。
【００１６】
第４の発明では、第２または第３の発明において前記乗算項の学習値が学習領域毎の学習値である。
【００１７】
第５の発明では、第４の発明において前記学習領域毎の学習値を低負荷域以外の運転域で前記空燃比フィードバック補正量ＡＬＰＨＡに基づいて更新する。
【００１８】
第６の発明では、第２または第３の発明において前記乗算項の学習値がパージカット時の学習値である。
【００１９】
第７の発明では、第６の発明において前記パージカット時の学習値を所定の１つの学習領域でだけ前記空燃比フィードバック補正量ＡＬＰＨＡに基づいて更新する。
【００２０】
第８の発明では、第２または第３の発明において前記乗算項の学習値がパージカット時の学習値と学習領域毎の学習値とからなり、パージカット時の学習値からしきい値ＳＬＡＬＰを差し引いた値と学習領域毎の学習値との比較により、パージカット時の学習値からしきい値ＳＬＡＬＰを差し引いた値が学習領域毎の学習値以下のときパージカット時の学習値を、またパージカット時の学習値からしきい値ＳＬＡＬＰを差し引いた値が学習領域毎の学習値を超えるとき学習領域毎の学習値を選択する。
【００２１】
第９の発明では、第２または第３の発明において前記無効噴射量の学習値単独でリミッタＬＴＳＭＡＸ＃、ＬＴＳＭＩＮ＃を設ける（たとえばＬＴＳＭＡＸ＃＝＋０．１ｍｓ、ＬＴＳＭＩＮ＃＝−０．１ｍｓ）。
【００２２】
第１０の発明では、第９の発明において前記無効噴射量の学習値の更新時に、前記基本噴射量ＴＰ０に応じたリミッタＬＴＳＭＡＸ２、ＬＴＳＭＩＮ２で無効噴射量の学習値を制限するとともに、そのリミッタで無効噴射量の学習値が制限されるときは、そのリミッタで無効噴射量の学習値を更新する。
【００２３】
第１１の発明では、第９の発明において前記無効噴射量の学習値の更新時に、前記基本噴射量ＴＰ０に応じたリミッタＬＴＳＭＡＸ２、ＬＴＳＭＩＮ２と前記無効噴射量の学習値単独のリミッタＬＴＳＭＡＸ＃、ＬＴＳＭＩＮ＃との狭いほうで無効噴射量の学習値を制限するとともに、その狭いほうのリミッタで無効噴射量の学習値が制限されるときは、その狭いほうのリミッタで無効噴射量の学習値を更新する。
【００２４】
第１２の発明では、第９または第１０の発明において前記無効噴射量の学習値の参照時に、低負荷域に限り前記基本噴射量ＴＰ０に応じたリミッタＬＴＳＭＡＸ２、ＬＴＳＭＩＮ２で無効噴射量の学習値を制限する。
【００２５】
第１３の発明では、第１０から第１２までのいずれか一つの発明において前記リミッタが、２つの学習値（無効噴射量の学習値と乗算項の学習値）のトータルとして割合の単位（たとえばパーセント）で予め定めたリミッタＲＬＲＭＡＸ＃、ＲＬＲＭＩＮ＃から前記乗算項の学習値を差し引いた値に前記基本噴射量ＴＰ０をかけた値である。
【００２６】
第１４の発明では、第４または第５の発明において前記学習領域毎の学習値の更新時に、前記無効噴射量の学習値に応じたリミッタＲＬＭＡＸ１、ＲＬＭＡＸ２、ＲＬＭＡＸ３、ＲＬＭＩＮ１、ＲＬＭＩＮ２、ＲＬＭＩＮ３で学習領域毎の学習値を制限するとともに、そのリミッタで学習領域毎の学習値が制限されるときは、そのリミッタで学習領域毎の学習値を更新する。
【００２７】
第１５の発明では、第４または第５の発明において前記学習領域毎の学習値の更新時に、前記無効噴射量の学習値に応じたリミッタＲＬＭＡＸ１、ＲＬＭＡＸ２、ＲＬＭＡＸ３、ＲＬＭＩＮ１、ＲＬＭＩＮ２、ＲＬＭＩＮ３と２つの学習値（無効噴射量の学習値と学習領域毎の学習値）のトータルとして割合の単位で予め定めたリミッタＲＬＲＭＡＸ＃、ＲＬＲＭＩＮ＃との狭いほうで学習領域毎の学習値を制限するとともに、その狭いほうのリミッタで学習領域毎の学習値が制限されるときは、その狭いほうのリミッタで学習領域毎の学習値を更新する。
【００２８】
第１６の発明では、第４、第５、第１４、第１５のいずれか一つの発明において前記学習領域毎の学習値の参照時に、前記無効噴射量の学習値に応じたリミッタＲＬＭＡＸ１、ＲＬＭＡＸ２、ＲＬＭＡＸ３、ＲＬＭＩＮ１、ＲＬＭＩＮ２、ＲＬＭＩＮ３で学習領域毎の学習値を制限するとともに、そのリミッタで学習領域毎の学習値が制限されるときは、そのリミッタで学習領域毎の学習値を更新する。
【００２９】
第１７の発明では、第４、第５、第１４、第１５のいずれか一つの発明において前記学習領域毎の学習値の参照時に、前記無効噴射量の学習値に応じたリミッタＲＬＭＡＸ１、ＲＬＭＡＸ２、ＲＬＭＡＸ３、ＲＬＭＩＮ１、ＲＬＭＩＮ２、ＲＬＭＩＮ３と２つの学習値（無効噴射量の学習値と学習領域毎の学習値）のトータルとして割合の単位で予め定めたリミッタＲＬＲＭＡＸ＃、ＲＬＲＭＩＮ＃との狭いほうで学習領域毎の学習値を制限するとともに、その狭いほうのリミッタで学習領域毎の学習値が制限されるときは、その狭いほうのリミッタで学習領域毎の学習値を更新する。
【００３０】
第１８の発明では、第１４から第１７までのいずれか一つの発明において前記リミッタが、２つの学習値（無効噴射量の学習値と学習領域毎の学習値）のトータルとして割合の単位で予め定めたリミッタＲＬＲＭＡＸ＃、ＲＬＲＭＩＮ＃から前記無効噴射量の学習値を前記基本噴射量ＴＰ０に対する割合に換算した値を差し引いた値である。
【００３１】
第１９の発明では、第１８の発明において前記基本噴射量ＴＰ０に代えて各学習領域の負荷の下限を定める値を用いる。
【００３２】
第２０の発明では、第６または第７の発明において前記パージカット時の学習値の更新時に前記無効噴射量の学習値に応じたリミッタＲＬＭＡＸ０、ＲＬＭＩＮ０でパージカット時の学習値を制限するとともに、そのリミッタでパージカット時の学習値が制限されるときは、そのリミッタでパージカット時の学習値を更新する。
【００３３】
第２１の発明では、第６または第７の発明において前記パージカット時の学習値の更新時に前記無効噴射量の学習値に応じたリミッタＲＬＭＡＸ０、ＲＬＭＩＮ０と２つの学習値（無効噴射量の学習値とパージカット時の学習値）のトータルとして割合の単位で予め定めたリミッタＲＬＲＭＡＸ＃、ＲＬＲＭＩＮ＃との狭いほうでパージカット時の学習値を制限するとともに、その狭いほうのリミッタでパージカット時の学習値が制限されるときは、その狭いほうのリミッタでパージカット時の学習値を更新する。
【００３４】
第２２の発明では、第２０または第２１の発明において前記リミッタが、２つの学習値（無効噴射量の学習値とパージカット時の学習値）のトータルとして割合の単位で予め定めたリミッタＲＬＲＭＡＸ＃、ＲＬＲＭＩＮ＃から前記無効噴射量の学習値を前記基本噴射量ＴＰ０に対する割合に換算した値を差し引いた値である。
【００３５】
第２３の発明では、第２２の発明において前記基本噴射量ＴＰ０に代えて学習領域の負荷の下限を定める値を用いる。
【００３６】
第２４の発明では、第６、第７、第２０、第２１の発明のいずれか一つにおいて前記パージカット時の学習値の参照時に前記無効噴射量の学習値に応じたリミッタＲＬＭＡＸ０、ＲＬＭＩＮ０で前記パージカット時の学習値を制限する。
【００３７】
第２５の発明では、第６、第７、第２０、第２１の発明のいずれか一つにおいて前記パージカット時の学習値の参照時に前記無効噴射量の学習値に応じたリミッタＲＬＭＡＸ０、ＲＬＭＩＮ０と２つの学習値（無効噴射量の学習値とパージカット時の学習値）のトータルとして割合の単位で予め定めたリミッタＲＬＲＭＡＸ＃、ＲＬＲＭＩＮ＃との狭いほうで前記パージカット時の学習値を制限する。
【００３８】
第２６の発明では、第２４または第２５の発明において前記リミッタが、２つの学習値（無効噴射量の学習値とパージカット時の学習値）のトータルとして割合の単位で予め定めたリミッタＲＬＲＭＡＸ＃、ＲＬＲＭＩＮ＃から前記無効噴射量の学習値を前記基本噴射量ＴＰ０に対する割合に換算した値を差し引いた値である。
【００３９】
【発明の効果】
第１の発明では、乗算項の学習値が割合の単位、加算項の学習値が噴射量の単位となっており、両者で単位が相違している場合に、両者の単位をそろえるため加算項の学習値を基本噴射量に対する割合に換算し、その加算項の学習値の割合の単位への換算値と、もともと割合の単位である乗算項の学習値とのトータルでリミッタが所定の範囲に収まるように２つの学習値を制限するので、空燃比学習制御において加算項の学習値と乗算項の学習値を合わせもつものに対しても、基本噴射量の大小に関係なく、２つの学習値のトータルでリミッタが所定の範囲に収まり、これによって、誤学習の悪影響を小さくするとともに、エンスト等の不具合を回避することができる。
【００４０】
低負荷域では基本噴射量よりも無効噴射量のほうが燃料噴射量に対する寄与割合が大きく、したがってこのときの理論空燃比からのずれは主に無効噴射量の誤差に伴うものであることより、第３の発明では低負荷域に限り無効噴射量の学習値を更新するので、無効噴射量の学習値の精度を高いものに維持できる。
【００４１】
キャニスタにたくさんの燃料蒸気がたまっていた状態からパージが行われたときは、空燃比が一時的にリッチ側に傾き、このリッチに傾いた空燃比を理論空燃比に戻そうと空燃比フィードバック補正量が１００％よりも小さい側に移動していくため、この空燃比フィードバック補正量に基づいて更新される学習領域毎の学習値が小さい側に移動し、しきい値を下回ってピークをとる。その後はパージガス濃度の減少とともに学習領域毎の学習値が再び大きくなり、パージがしばらく継続した後の状態に対する学習値へと収束してゆく。この場合に、そのピーク位置でリーン運転が開始されたときパージの継続によりキャニスタ内の燃料蒸気がなくなってゆくのに対して、学習領域毎の学習値はピーク位置の値のままでそれ以上更新されることがない。したがって、ピーク位置でリーン運転が開始された後も、更新されることのない学習領域毎の学習値を用いたのでは、パージの継続につれて実際のパージ状態と学習領域毎の学習値とが対応しなくなり、リーン運転中の空燃比がリーン側に大きく傾いてゆくため、空燃比の理論空燃比への制御精度が落ちてしまう。このとき、第８の発明では１００％に近い値にあるパージカット時時の学習値を用いるので、空燃比の理論空燃比への制御精度が落ちてしまうことがない。
【００４２】
第１１の発明では無効噴射量の学習値の更新時に基本噴射量に応じたリミッタと無効噴射量の学習値単独のリミッタとの狭いほうで無効噴射量の学習値を、第１５、第１７の各発明では学習領域毎の学習値の更新時、参照時に無効噴射量の学習値に応じたリミッタと２つの学習値のトータルとして割合の単位で予め定めたリミッタとの狭いほうで学習領域毎の学習値を、第２１、第２５の各発明ではパージカット時の学習値の更新時、参照時に無効噴射量の学習値に応じたリミッタと２つの学習値のトータルとして割合の単位で予め定めたリミッタとの狭いほうでパージカット時の学習値をそれぞれ制限するので、いずれも学習値の範囲を狭めることができ、誤学習の影響をより小さくすることができる。
【００４３】
基本噴射量に応じたリミッタを設ける場合に、他の負荷域より基本噴射量が小さい低負荷域において基本噴射量が小さくなるほどに基本噴射量に応じたリミッタも小さくなることから、このときにも無効噴射量の学習値を更新したのでは、無効噴射量の学習値を小さな値としてしまうのであるが、第１２の発明では低負荷域に限り学習値を更新することはしないので、それまで比較的大きな値だった学習値を無用に小さくすることがない。
【００４４】
２つの学習値（学習領域毎の学習値と無効噴射量の学習値）がある場合は、両方を同じタイミングで更新して各学習値とも最新値に置き換えていくことにより初めて、２つの学習値のトータルでリミッタを所定範囲に収めることができる。しかしながら、２つの学習値の学習許可条件が異なるときは同じタイミングで更新されることがないため、２つの学習値のトータルでリミッタが所定範囲に収まらないことが考えられる。このとき、第１６の発明では学習領域毎の学習値の参照時にリミッタにより制御した値で、また、第１７の発明では学習領域毎の学習値の参照時に狭いほうのリミッタにより制御した値で学習値を更新することで、できるだけ更新の機会を増やしているので、トータルの学習値のリミッタが所定範囲からはみ出す機会を減らすことができる。
【００４５】
同じ学習領域において基本噴射量が小さくなるのにつれて学習値に対するリミッタを小さくしなければならない。したがって、同じ学習領域において比較的大きな値の基本噴射量（これをＴＰ０Ｈとする）のときのリミッタをその学習領域全体についてのリミッタとしたのでは、同じ学習領域のうちＴＰ０Ｈ未満の領域で学習値のリミッタが大きくなり過ぎ、２つの学習値のトータルでリミッタが所定範囲に収まらない事態が生じる。このとき第１９と第２３の各発明では、学習領域の負荷の下限を定める値に対するリミッタを、その同じ学習領域全体についてのリミッタとするので、広がりのある学習領域内で同じ値の学習値をもつ場合であっても、２つの学習値のトータルでリミッタが所定範囲に収まらない事態が生じることがない。
【００４６】
無効噴射量の学習値に応じたリミッタを設ける場合に、基本噴射量が０に近づいていくときリミッタが０に近づいていくので、このときにまでパージカット時の学習値を更新したのでは、学習値がごくわずかな値になってしまうのであるが、第２４の発明ではパージカット時の学習値の参照時にリミッタにより制限した値でベース学習値を更新することはしないので、また、第２５の発明でもパージカット時の学習値の参照時に、狭いほうのリミッタにより制限した値でベース学習値を更新することはしないので、それまで比較的大きな値だった学習値を無用に小さくすることがない。
【００４７】
【発明の実施の形態】
図１において、１はエンジン本体で、吸入空気はエアクリーナ１１から吸気マニフォールドのコレクタ１２ａ、分岐部１２ｂを通ってシリンダに供給される。燃料は、運転条件に応じて所定の空燃比となるようにコントロールユニット２よりの噴射信号に基づき燃料インジェクタ３からエンジン１の吸気ポートに向けて噴射される。
【００４８】
コントロールユニット２にはディストリビュータ内蔵のクランク角センサ７からのＲｅｆ信号（４気筒では１８０°毎、６気筒では１２０°毎に発生）とＰｏｓ信号（１°信号）、エアフローメータ４からの吸入空気量信号、三元触媒１９の上流側に設置したＯ2センサ９からの空燃比（酸素濃度）信号、水温センサ８からのエンジン冷却水温信号、スロットルセンサ６からの絞り弁５開度信号等が入力され、これらに基づいて吸入空気流量とエンジン回転数から基本噴射パルス幅を算出するとともに、三元触媒１９に流入する排気の空燃比が理論空燃比を中心として所定の周期で振れるように空燃比のフィードバック制御を行う。
【００４９】
この場合、さらに目標空燃比への制御精度を高めるため、燃料インジェクタ３やエアフローメータ４の流量特性の製作時の部品バラツキやその後の経時劣化に伴う理論空燃比からのずれの解消を目的とするマップ学習値と燃料インジェクタの開き初めのタイミングが燃料インジェクタの部品バラツキやその後の経時劣化に伴う理論空燃比からのずれの解消を目的とするＴＳ学習値を導入するほか、リーン運転時のキャニスタパージとの両立を図るためのベース学習値を導入している。
【００５０】
コントロールユニット２で実行されるこの空燃比制御の内容を、以下のフローチャートにしたがって説明する。
【００５１】
図２のフローチャートは、気筒別同期噴射パルス幅Ｔｉｎ［ｍｓ］の演算を行わせるためのもので、一定時間毎（たとえば１０ｍｓ毎）に実行する。
【００５２】
なお、図２のフローにおいて、記号の最後に気筒番号ｎをつけることで、気筒別の値であることを示している（ＣＴｉｎ、Ｃｈｏｓｎ、ＥＲＡＣＩｎ）。
【００５３】
ステップ１ではエアフローメータ出力より得られる吸入空気流量Ｑｓ［ｇ／ｓ］とクランク角センサより得られるエンジン回転数Ｎ［ｒｐｍ］より基本噴射パルス幅ＴＰ０［ｍｓ］を
ＴＰ０＝（Ｑｓ／Ｎ）×Ｋ×Ｋｔｒｍ                        …（１）
ただし、Ｋ：噴射定数
Ｋｔｒｍ：トリミング係数
の式で計算する。
【００５４】
ここで、（１）式のＫは理論空燃比の混合気が得られるように定めた定数、Ｋｔｒｍはインジェクタ４の流量特性により定まる固有の定数である。
【００５５】
ステップ２では回転数Ｎおよびシリンダ容積Ｖ［ｃｃ］の積Ｎ×Ｖと絞り弁部の総流路面積Ａａ［ｃｍ2］から所定のマップを参照して加重平均係数Ｆload［％］を求める。なお、総流路面積Ａａは絞り弁５の流路面積［ｃｍ2］にアイドル調整弁２２やエアレギュレータ（図示しない）の流路面積［ｃｍ2］を足したものである。
【００５６】
ステップ３ではシリンダ空気量相当パルス幅ＴＰ［ｍｓ］を
ＴＰ＝ＴＰ０×Ｆｌｏａｄ＋ＴＰ（old）×（１−Ｆｌｏａｄ）…（２）
ただし、ＴＰ（old）：Ａｖｔｐの前回値
の式により計算し、このＴＰを用いステップ４において、
0003644172.tif 000002
ただし、Ｋａｔｈｏｓ：過渡補正量［ｍｓ］
Ｔｆｂｙａ：目標燃空比相当量［無名数］
ＡＬＰＨＡ：空燃比フィードバック補正係数［無名数］
ＬＡＬＰＨＡ：空燃比学習値［無名数］
Ｔｓ：無効パルス幅［ｍｓ］
ＬＲＮＴＳ：ＴＳ学習値［ｍｓ］
ＣＨＯＳｎ：気筒別壁流補正パルス幅［ｍｓ］
ＥＲＡＣＩｎ：割込噴射移行化パルス幅［ｍｓ］
の式により、シーケンシャル噴射モードにおける気筒別同期噴射パルス幅Ｔｉｎ［ｍｓ］を計算する。
【００５７】
なお、始動時のときは
0003644172.tif 000003
の式により、同時噴射モードにおける気筒別同期噴射パルス幅Ｔｉｎ［ｍｓ］を計算する。
【００５８】
ここで、（３）、（４）式の記号を説明すると、まずＴｆｂｙａは水温増量補正係数Ｋｔｗや始動後増量補正係数Ｋａｓと目標燃空比Ｄｍｌの和である。空燃比フィードバック制御を行う条件では、Ｋｔｗ＝０、Ｋａｓ＝０、Ｄｍｌ＝１．０（つまりＴｆｂｙａ＝１．０）であるが、エンジン回転の不安定となる冷間始動時にはＫｔｗとＫａｓが０を超える値（つまりＴｆｂｙａが１．０より大きい値）となって燃料増量が行われる。また、暖機完了後においてリーン運転条件になると、Ｄｍｌが１未満の値となって燃料減量され、リーン運転が行われる。
【００５９】
エンジンの加減速時における空燃比の目標値からのずれは、吸気マニフォールドや吸気ポートに付着し、液状のまま壁面を伝ってシリンダに流れ込む、いわゆる壁流燃料の量的変化に起因するものであり、この壁流燃料による過不足分を補正量として燃料補正を行う。この場合、壁流燃料には直接にシリンダに流入される分が少なく比較的応答の遅いものと、直接にシリンダに流入される分が主で比較的応答の速いものとがあり、Ｋａｔｈｏｓが応答の遅い壁流燃料に関する補正量、またＣｈｏｓｎとＥＲＡＣＩｎ（および図示しない気筒別割込噴射パルス幅Ｉｎｊｓｅｔｎ）とが応答の速い壁流燃料に関する補正量である（特開平１−３０５１４４号参照）。
【００６０】
インジェクタに対して噴射信号が出力されたとしてもインジェクタは応答遅れをもって開くので、この応答遅れの分を考慮した値がＴｓである。
【００６１】
（３）式右辺のＴｓの前にある２は、シーケンシャル噴射（１気筒当たりエンジン２回転に１回の噴射）のときに必要となる値である。
【００６２】
なお、上記（２）式のメモリＴＰ（old）の値は、後述するＡＬＰＨＡ（old）とともに、始動時に０に初期設定されている。
【００６３】
（３）、（４）式の空燃比学習値ＬＡＬＰＨＡの検索については図３のフローチャートにより説明する。同図のフローは一定時間毎に（あるいはバックグランドジョブで）実行する。なお、（３）、（４）式のＬＡＬＰＨＡ（ＡＬＰＨＡについても）は、１．０を中心とする無名数の単位であるが、実際のフロー上では１００％を中心とする値（パーセント表示）で計算する。
【００６４】
この実施形態ではリーン運転時のキャニスタパージを考慮して、通常のマップ学習値の外にベース学習値（１データ）を導入しており、いずれかを選択してＬＡＬＰＨＡに入れることになる。
【００６５】
まず、マップ学習値ＴＡＬＰの学習領域は、図４に示したように、ＴＰ格子である所定値ＴＡＬＰＰ０＃（＝０）、ＴＡＬＰＰ１＃、ＴＡＬＰＰ２＃、ＴＡＬＰＰ３＃とＮ格子とで１６に区分けし、各学習領域毎に独立の学習値を格納している。したがって、運転条件の属する学習領域の学習値を参照するとともに、各学習領域毎に学習値を更新することになる。なお、学習領域には０から１５までの番号を割り振ることで、他の学習領域と区別している。以下で学習領域が０といえば、図４のＴＡＬＰマップの０が指す学習領域のことである。
【００６６】
これに対してベース学習値はパージカット時の学習値として導入しているもので、図５に示したように、マップ学習値の学習領域とは無関係に、リーン運転時の全域を代表できるような領域を学習領域として定めており、その１つの学習領域でだけ学習値の更新を行い、その学習領域に限らず全域で参照する。
【００６７】
なお、マップ学習値、ベース学習値を格納するためのメモリは、ＴＳ学習値を格納するためのメモリとともに、バックアップＲＡＭである。
【００６８】
図３においてステップ１１ではどの学習領域にあるかをみて学習領域が０のときは、ＴＳ学習を行わせるためステップ１２に進んでＬＡＬＰＨＡ［％］に１００を入れる。
【００６９】
学習領域が０以外のときはステップ１１よりステップ１３、１４、１５に進み、冷却水温Ｔｗが所定値ＴＷＬＣＬ＃以上かどうか、フラグＦＬＥＡＮによりリーン運転条件であるかどうか、マップ学習収束カウンタＣＬＲＮＴＤｉ（ｉ＝０〜１５）はマップ学習収束回数ＮＬＲＮＴＤ＃以上かどうかをそれぞれみる。ここで、フラグＦＬＥＡＮはリーン運転条件を許可するときに“１”となるフラグである。マップ学習収束カウンタ（バックアップＲＡＭに格納）ＣＬＲＮＴＤｉ（ｉは学習領域の番号）は、各学習領域でマップ学習値が更新される毎にその更新の回数を学習領域毎に計測するためのものである。
【００７０】
Ｔｗ≧ＴＷＬＣＬ＃のときかつリーン運転条件のときかつＣＬＲＮＴＤｉ≧ＮＬＲＮＴＤ＃のときは、ステップ１６に進んで図４のＴＡＬＰマップを参照してマップ学習値ＴＡＬＰ［％］を求め、変数ＬＲＮＡＬＰ［％］に入れる。ここではマップ学習値そのものと演算に用いるマップ学習値とを区別するため、変数ＬＲＮＡＬＰを用いている。同様にして、後述する変数ＢＳＡＬＰ［％］は演算用のベース学習値、変数ＬＲＮＴＳ［％］は演算用のＴＳ学習値である。
【００７１】
ステップ１８では、演算用のベース学習値ＢＳＡＬＰ［％］としきい値ＳＬＡＬＰ［％］の差と演算用のマップ学習値ＬＲＮＡＬＰを比較し、ＢＳＡＬＰ−ＳＬＡＬＰ≦ＬＲＮＡＬＰのときはマップ学習値のほうを選択するためステップ１９でＬＲＮＡＬＰの値を空燃比学習値ＬＡＬＰＨＡに入れ、ＢＳＡＬＰ−ＳＬＡＬＰ＞ＬＲＮＡＬＰのときはベース学習値のほうを選択するためステップ２０、２２でベース学習値を変数ＢＳＡＬＰに入れるとともに、ＢＳＡＬＰの値をＬＡＬＰＨＡに移す。
【００７２】
ここで、ベース学習値とマップ学習値を使い分けるのは次の理由による。空燃比学習制御中にパージが行われたときの学習値の変化を図６に示すと、ベース学習値はパージカット時の学習値であるからベース学習値の収束後はほぼ一定である。これに対して、キャニスタ（図示しない）にたくさんの燃料蒸気がたまっていた状態からパージが行われたときは、空燃比が一時的にリッチ側に傾き、このリッチに傾いた空燃比を理論空燃比に戻そうと空燃比フィードバック補正係数ＡＬＰＨＡが１００％よりも小さい側に移動していくため、このＡＬＰＨＡに基づいて更新されるマップ学習値がしきい値ＳＬＡＬＰを下回って小さい側に移動し、たとえば８０％でピークをとる。その後はパージガス濃度の減少とともにマップ学習値が再び大きくなり、パージがしばらく継続した後の状態に対する学習値へと収束してゆく。
【００７３】
一方、そのピーク位置でリーン運転が開始されたときは、パージの継続によりキャニスタ内の燃料蒸気がなくなってゆくのに対して、マップ学習値はピーク位置の値のままでそれ以上更新されることがないため一点鎖線で示したようにピーク位置の値のままである。したがって、ピーク位置でリーン運転が開始された後も、その一点鎖線で示したマップ学習値を用いたのでは、パージの継続につれて実際のパージ状態とマップ学習値とが対応しなくなり、リーン運転中の空燃比がリーン側に大きく傾いてゆくため、空燃比の理論空燃比への制御精度が落ちてしまう。そこで、ベース学習値を中心としてしきい値ＳＬＡＬＰよりもマップ学習値が下側にあるときは、マップ学習値を用いない（ベース学習値を用いる）ようにしたのである。
【００７４】
なお、Ｔｗ＜ＴＷＬＣＬ＃のときやＴｗ≧ＴＷＬＣＬ＃かつＦＬＥＡＮ＝１でもＣＬＲＮＴＤｉ＜ＮＬＲＮＴＤ＃のときは、マップ学習が十分に進んでいないと考えられるためステップ１３や１５よりステップ２０、２２に進んで、ベース学習値を選択する。
【００７５】
一方、リーン運転条件でないときはステップ１４よりステップ２３に進み、フラグＦＢＳＬＴＤよりベース学習値が収束したかどうかをみる。このフラグはＦＢＳＬＴＤ＝０のときベース学習が未収束であることを、ＦＢＳＬＴＤ＝１はベース学習が収束したことを表すので、ベース学習が未収束（ＦＢＳＬＴＤ＝０）のときはベース学習を進めるためステップ２４、２６に進んでベース学習値をＬＡＬＰＨＡに入れ、ベース学習が収束（ＦＢＳＬＴＤ＝１）した後はマップ学習を進めるためステップ２７、２９に進んでマップ学習値をＬＡＬＰＨＡに入れる。
【００７６】
図３において説明しなかったステップ１７、２８のリミッタ処理Ｂ２、ステップ２１、２５のリミッタ処理Ｃ２は本発明により新たに追加した部分であるため後で詳述する。
【００７７】
次に、マップ学習値やベース学習値の更新は空燃比フィードバック補正係数ＡＬＰＨＡに基づいて行うため、空燃比フィードバック補正係数ＡＬＰＨＡの演算途中（正確にはリッチ、リーンの反転時）で学習値の更新を指示することになる。
【００７８】
図７のフローチャートはＯ2センサ出力ＶＯ２に基づいて空燃比フィードバック補正係数ＡＬＰＨＡを演算するためのもので、Ｒｅｆ信号に同期して実行する。Ｒｅｆ信号に同期させるのは、燃料噴射がＲｅｆ信号同期であり、系の乱れもＲｅｆ信号同期であるため、これに合わせたものである。
【００７９】
ステップ３１では空燃比フィードバック制御条件が成立しているかどうかをみる。たとえば、次の条件、
▲１▼冷却水温Ｔｗが空燃比フィードバック制御の開始水温ＴＷＣＬＭＰを越えていること、
▲２▼目標燃空比相当量Ｔｆｂｙａ＝１であること、
▲３▼フラグＦＬＧＣＬ＝１であること（つまりＯ2センサ出力が所定回数（たとえば１回）反転していること）、
を一つずつチェックし、いずれかでも満たさないときは空燃比フィードバック制御条件の非成立時と判断して、ステップ３２に進み、メモリＡＬＰＨＡ（old）にＡＬＰＨＡの値を移したあとＡＬＰＨＡに１００％を入れて（ＡＬＰＨＡをクランプ）、図７のフローを終了する。
【００８０】
上記の▲１▼〜▲３▼のすべてを満足するときは空燃比フィードバック制御条件の成立時と判断してステップ３３に進む。
【００８１】
ステップ３３ではＯ2センサ出力ＶＯ２をＡ／Ｄ変換して取り込み、ステップ３４においてＶＯ２とスライスレベル（たとえば５００ｍＶ付近）ＳＬを比較する。ＶＯ２＞ＳＬであればステップ３５でフラグＡＦ１に“１”を、ＶＯ２≦ＳＬであるときはステップ３６においてフラグＡＦ１に“０”を入れる。これによってＡＦ１＝０はＯ2センサ出力がリーン側にあることを、ＡＦ１＝１はリッチ側にあることを表す。
【００８２】
なお、フラグＡＦ１は、他のフラグ（図３のステップ１４のＦＬＥＡＮ、ステップ２３のＦＢＳＬＴＤ、図７のステップ３７のＡＦ０、図８のステップ５７、５８のＦＬＲＮＴＤ、図９のステップ６８のＦＢＳＬＴＤ、図１０のステップ８６、８７のＦＢＳＬＴＤ、図１１のステップ９８のＦＢＳＬＴＤ、図１３のステップ１４０、１４１のＦＬＴＳＴＤ）とともに電源投入時のイニシャライズで“０”に初期設定し、また変数を格納するためのメモリ（たとえば図７のステップ３８のＡＬＰ １、ＡＬＰ ２、ステップ３９のＴＰ １、ＴＰ ２、ステップ４０のＮＥ １、ＮＥ ２、図８のステップ５３のＸ１（new）、Ｘ１（old）、図１０のステップ８２のＸ２（new）、Ｘ２（old）、図１３のステップ１３４、１３５、１３６のＸ３（new）、Ｘ３（old））も電源投入時のイニシャライズで０に初期設定するものであり、以下のフローチャートおいて、フラグ、メモリについての初期設定については省略する。
【００８３】
ステップ３７では２つのフラグＡＦ０、ＡＦ１を比較する。ここで、フラグＡＦ０は前回にＯ2センサ出力ＶＯ２がリッチあるいはリーンのいずれの側にあったかを示すフラグであり、ＡＦ０＝０は前回リーン側にあったことを、ＡＦ０＝１は前回リッチ側にあったことを表す。したがって、２つのフラグＡＦ０、ＡＦ１の値が等しくないときは、ＶＯ２のリッチからリーンへの反転時あるいはその反対にリーンからリッチへの反転時であると判断し、ステップ３８でメモリＡＬＰ ２［％］の値をメモリＡＬＰ １［％］に移し、メモリＡＬＰ ２［％］にＡＬＰＨＡの値（前回演算時の値）を入れる。メモリＡＬＰ ２にリッチ、リーン反転時の最新のＡＬＰＨＡを、メモリＡＬＰ １に前回反転時のＡＬＰＨＡを格納するわけである。同様にしてステップ３９、４０ではメモリＴＰ ２［ｍｓ］の値をメモリＴＰ １［ｍｓ］に移し、メモリＴＰ ２［ｍｓ］にＴＰ（図２のステップ３で既に得ている）の値を入れるとともに、メモリＮＥ ２［ｒｐｍ］の値をメモリＮＥ １［ｒｐｍ］に移し、メモリＮＥ ２に回転数Ｎを入れる。メモリＴＰ ２、ＮＥ ２にリッチ、リーン反転時の最新のＴＰ、Ｎを、メモリＴＰ １、ＮＥ １に前回反転時のＴＰ、Ｎを格納するのである。
【００８４】
ステップ４１ではマップ学習値、ベース学習値およびＴＳ学習値の更新を指示する（図８と図１０と図１３のフローを起動させる）。
【００８５】
ステップ４２ではフラグＡＦ１の値をみる。ＡＦ１＝０（リッチからリーンへの反転時）であればステップ４３で
ＡＬＰＨＡ＝ＡＬＰＨＡ（old）＋ＰＬ                        …（５）
ただし、ＡＬＰＨＡ（old）：ＡＬＰＨＡの前回値
の式により、またＡＦ１＝１（リーンからリッチへの反転時）であるときはステップ４４において
ＡＬＰＨＡ＝ＡＬＰＨＡ（old）−ＰＲ                        …（６）
の式によりＡＬＰＨＡをそれぞれ更新する。
【００８６】
ステップ４５では次回演算のため、フラグＡＦ１の値をフラグＡＦ０に、またＡＬＰＨＡの値をメモリＡＬＰＨＡ（old）に移して図７のフローを終了する。
【００８７】
ステップ３７で２つのフラグＡＦ０、ＡＦ１の値が等しいときは、反転時でないと判断し、ステップ４６に進んでフラグＡＦ１の値をみる。ＡＦ１＝０（前回、今回ともリーン）であれば、ステップ４７でＡＬＰＨＡ（old）に積分分ＩＬを加算することによって、またＡＦ１＝１（前回、今回ともリッチ）であるときはステップ４８でＡＬＰＨＡ（old）より積分分ＩＲを減算することによってそれぞれＡＬＰＨＡを更新したあと、ステップ４５の操作を実行する。
【００８８】
上記の比例分ＰＬ、ＰＲと積分分ＩＬ、ＩＲはＴＰとＮをパラメータとするマップ値である。
【００８９】
図８のフローチャートはマップ学習値を更新するためのもので、Ｏ2センサ出力のリッチ、リーンの反転毎に実行する。
【００９０】
ステップ５１で学習許可条件が成立しているかどうかの判定を行うが、このための具体的な内容を図９に示す。学習許可条件の判定は図９のステップ６１〜６８の内容を一つずつチェックすることにより行い、各項目のすべてを満たしたときにマップ学習を許可し、一つでも反するときはマップ学習を禁止する。すなわち、
ステップ６１；空燃比フィードバック制御中である、
ステップ６２；クランプ中でない状態になってからＡＬＰＨＡが２回以上反転した、
ステップ６３；冷却水温Ｔｗが所定温度範囲（ＴＷＬＣＬ＃≦Ｔｗ≦ＴＷＬＣＨ＃）となってＡＬＰＨＡが２回以上反転した、
ステップ６４；｜ＡＬＰ ２−ＡＬＰ １｜≦所定値ＡＬＰ２１＃である、
ステップ６５；｜ＴＰ ２−ＴＰ １｜≦所定値ＴＰ２１＃である、
ステップ６６；｜ＮＥ ２−ＮＥ １｜≦所定値ＮＥ２１＃である、
ステップ６７；学習領域が０でない、
ステップ６８；ベース学習が収束している（ＦＢＳＬＴＤ＝１）
ときに、ステップ６９でマップ学習を許可し、そうでなければステップ７０に移行してマップ学習を禁止する。
【００９１】
ここで、学習領域が０のときマップ学習値の更新を許可しないのは、学習領域が０のときはＴＳ学習値の更新を行わせるためである。したがって、学習領域０でのマップ学習値は初期値の１００％のままで、更新されないことになる。後述するように学習領域が０である場合にだけＴＳ学習を許可するのは、この領域ではＴＰよりもＴｓのほうがＣＴｉｎに対する寄与割合が大きく、したがってこのときの理論空燃比からの空燃比誤差は主にＴｓの誤差に伴うものであるからである。ベース学習が収束していることを条件とするのは、ベース学習値の収束後にマップ学習値の更新を行わせるためである。
【００９２】
このようにして学習許可条件を判定したら図８のステップ５１に戻り、学習許可条件が成立しているときはステップ５２で運転条件がどの学習領域にあるのかを判定し、運転条件が属する学習領域のマップ学習値を用いて
0003644172.tif 000004
ただし、Ｘ１（new）：更新後のマップ学習値［％］
Ｘ１（old）：更新前のマップ学習値［％］
ＷＥＩＧＨＴ：更新割合
の式によりマップ学習値を更新し、運転条件が属する学習領域に対応するマップ学習収束カウンタＣＬＲＮＴＤｉをステップ５５においてインクリメントする。ただし、この段階ではＸ１（new）の値を、運転条件が属する学習領域にマップ学習値として格納することはしない。
【００９３】
ステップ５６ではマップ学習収束カウンタＣＬＲＮＴＤｉと所定値ＮＬＲＮＴＤ＃を比較し、すべての学習領域でＣＬＲＮＴＤｉ≧ＮＬＲＮＴＤ＃のときステップ５７に進んでマップ学習収束フラグＦＬＲＮＴＤに“１”をセットし、それ以外ではステップ５８に進んでＦＬＲＮＴＤ＝０とする。
【００９４】
図８において説明を飛ばしたステップ５４のリミッタ処理Ｂ１は本発明により新たに導入する部分であり、後で詳述する。
【００９５】
図１０のフローチャートはベース学習値を更新するためのもの、図１１のフローチャートは学習許可条件を判定するためのもので、それぞれ図８、図９に対応する。
【００９６】
ベース学習値の更新の方法は、マップ学習値の更新の方法と基本的に変わらないので、異なる部分を主に説明する。
【００９７】
まず、図１１のほうではステップ９８、９９、１００が図９と相違する。ベース学習では、ベース学習が未収束（フラグＦＢＳＬＴＤ＝０）であり、かつＴＰとＮがベース学習領域にあるとき（ＢＳＬＴＰＬ＃≦ＴＰ≦ＢＳＬＴＰＨ＃かつＢＳＬＮＥＬ＃≦Ｎ≦ＢＳＬＮＥＨ＃のとき）が、学習許可条件に加わるわけである。
【００９８】
また、ベース学習値は１データであるため、図１０を図８と比較すればわかるようにマップ学習値の更新の場合よりベース学習値の更新のほうが簡単になっている。つまり、図１０において学習許可条件の成立時にステップ８１よりステップ８２に進み、
0003644172.tif 000005
ただし、Ｘ２（new）：更新後のベース学習値［％］
Ｘ２（old）：更新前のベース学習値［％］
ＷＥＩＧＨＴ：更新割合
の式によりベース学習値を更新し、ベース学習収束カウンタ（電源投入時のイニシャライズで０に初期設定）ＣＢＳＬＴＤをステップ８４においてインクリメントしている。ただし、この段階ではＸ２（new）の値を、ベース学習値として格納することはしない。また、ステップ８５ではベース学習収束カウンタＣＢＳＬＴＤと所定値ＮＢＳＬＴＤ＃を比較し、ＣＢＳＬＴＤ≧ＮＢＳＬＴＤ＃のときステップ８６に進んでベース学習収束フラグＦＢＳＬＴＤに“１”をセットし、それ以外ではステップ８７に進んでＦＢＳＬＴＤ＝０とする。
【００９９】
図１０において説明を飛ばしたステップ８３のリミッタ処理Ｃ１は本発明により新たに導入する部分であり、後で詳述する。
【０１００】
次に、ＴＳ学習値の参照について図１２のフローチャートにより説明する。同図のフローは図３とは独立に一定時間毎に（あるいはバックグランドジョブで）実行する。
【０１０１】
ステップ１１１ではＴＳ学習値を変数ＬＲＮＴＳ［ｍｓ］に入れる。ここでも、無効パルス幅学習値そのものと演算に用いる無効パルス幅学習値を区別するため変数ＬＲＮＴＳを用いている。
【０１０２】
ステップ１１２〜１１５はＴＳ学習値に対してリミッタ処理を行う部分である。ステップ１１２ではＴＳ学習値の上限値ＬＴＳＭＡＸ＃［ｍｓ］（たとえば＋０．１ｍｓ）とＬＲＮＴＳを比較し、ＬＴＳＭＡＸ＃＜ＬＲＮＴＳのときはステップ１１３に進んでＬＴＳＭＡＸ＃の値をＬＲＮＴＳに、またステップ１１４でＴＳ学習値の下限値ＬＴＳＭＩＭ＃［ｍｓ］（たとえば−０．１ｍｓ）とＬＲＮＴＳを比較し、ＬＴＳＭＩＮ＃＞ＬＲＮＴＳのときはステップ１１５に進んでＬＴＳＭＩＮ＃の値をＬＲＮＴＳに入れる。
【０１０３】
図１２において説明を飛ばしたステップ１１６〜１２２のリミッタ処理は本発明により新たに導入する部分であり、後で詳述する。
【０１０４】
図１３のフローチャートはＴＳ学習値を更新するためのもの、図１４のフローチャートは学習許可条件を判定するためのもので、それぞれ図８、図９あるいは図１０、図１１に対応する。図１３のフローチャートも図８、図１０と同じにＯ2センサ出力のリッチ、リーンの反転毎に実行する。
【０１０５】
ＴＳ学習値の更新の方法もマップ学習値やベース学習値の更新の方法と基本的に変わらない。
【０１０６】
学習許可条件の判定では、図１４のステップ１５５、１５６、１５７が図９と相違する。つまり、ＴＳ学習では
ステップ１５５；学習領域が０である、
ステップ１５６；アイドル回転数制御（図ではＩＳＣ制御で略記）がクローズド中である、
ステップ１５７；アイドルスイッチがＯＦＦよりＯＮに切換わってからＴＳ学習ディレイ時間ＤＴＳＬＲＮ＃が経過した
ときをＴＳ学習許可条件に含めている。
【０１０７】
ここで、学習領域が０である場合にだけＴＳ学習を許可するのは、この領域ではＴＰよりもＴｓのほうがＣＴｉｎに対する寄与割合が大きく、したがってこのときの理論空燃比からの空燃比誤差は主にＴｓの誤差に伴うものであるからである。また、負荷の小さい学習領域でありながら、４、８、１２の各学習領域でＴＳ学習を許可しないのは、この領域ではフュエルカットが行われることがあり、フュエルカット時にはＴＳ学習を行うことができないからである。アイドル回転数制御がクローズド中に限りＴＳ学習を許可するのは、回転数、空燃比がクローズド中以外よりも安定するからである。アイドルスイッチがＯＦＦよりＯＮに切換わってからディレイ時間が経過するのを待つのは、ＴＳ学習値を安定させるためである。
【０１０８】
なお、図１４においては図９のステップ６５、６６と同じ部分がない。これは、ＴＳ学習値の更新を行うのがアイドル時に限られるので、ＴＰとＮより運転条件をみる必要がないからである。
【０１０９】
図１３においては、学習許可条件の成立時にステップ１３２、１３３で（ＡＬＰ １＋ＡＬＰ ２）／２と１００％を比較し、（ＡＬＰ １＋ＡＬＰ ２）／２＜１００のとき（リッチ側にあるとき）、ステップ１３４に進んで
Ｘ３（new）＝Ｘ３（old）−ＤＬＲＮＴＳ                  …（１１）
ただし、Ｘ３（new）：更新後のＴＳ学習値［％］
Ｘ３（old）：更新前のＴＳ学習値［％］
ＤＬＲＮＴＳ：更新量［％］
の式により、また（ＡＬＰ １＋ＡＬＰ ２）／２＞１００のとき（リーン側にあるとき）、ステップ１３５に進んで
Ｘ３（new）＝Ｘ３（old）＋ＤＬＲＮＴＳ                  …（１２）
ただし、Ｘ３（new）：更新後のＴＳ学習値［％］
Ｘ３（old）：更新前のＴＳ学習値［％］
ＤＬＲＮＴＳ：更新量［％］
の式によりＴＳ学習値を更新する。一方、（ＡＬＰ １＋ＡＬＰ ２）／２＝１００のときはステップ１３２、１３３よりステップ１３６に進み、
Ｘ３（new）＝Ｘ３（old）                                …（１３）
の式によりＴＳ学習値を更新する。ただし、この段階ではＸ３（new）の値を、ＴＳ学習値として格納することはしない。
【０１１０】
学習領域が０のときは主にアイドル時であり、アイドル時に学習値を大きく変化させる（つまり空燃比を大きく変化させる）と回転変動が大きくなるので、これを避けるため、（１１）、（１２）式のＤＬＲＮＴＳには比較的小さな値を与えている。
【０１１１】
ステップ１３８ではＴＳ学習収束カウンタ（バックアップＲＡＭに格納）ＣＬＴＳＴＤをインクリメントし、この学習収束カウンタＣＬＴＳＴＤと所定値ＮＬＴＳＴＤ＃をステップ１３９において比較する。ＣＬＴＳＴＤ≧ＮＬＴＳＴＤ＃のときステップ１４０に進んでＴＳ学習収束フラグＦＬＴＳＴＤに“１”をセットし、それ以外ではステップ１４１、１４２に進んでＦＬＴＳＴＤ＝０かつすべてのマップ学習収束カウンタＣＬＲＮＴＤｉ＝０とする。ＴＳ学習値が未収束のときは、マップ学習値の更新をやり直すため、ＣＬＲＮＴＤｉ＝０とするのである。
【０１１２】
図１３において説明を飛ばしたステップ１３７のリミッタ処理Ａは本発明により新たに導入する部分であり、後で詳述する。
【０１１３】
これで、単位の異なる学習値を用いた現状の空燃比学習制御の説明を終える。
【０１１４】
さて、最近の空燃比学習制御では、学習値に対して所定の範囲のリミッタを設けることで、燃料インジェクタやエアフローメータの製造時の部品バラツキや経時劣化を吸収でき、かつ誤学習による理論空燃比からの空燃比誤差も同じ所定の範囲以内であれば、エンスト等の不具合を回避できることがわかっている。
【０１１５】
しかしながら、上記のようにマップ学習値（あるいはベース学習値）とＴＳ学習値をともに用いるものでは、現在のところ各学習値毎に独立してリミッタを設けているため、２つの学習値のトータルで所定の範囲のリミッタを確保するのが難しく、一方の学習値が上限リミッタや下限リミッタに張り付いたときには、２つの学習値のトータルでリミッタが所定の範囲を超えてしまう事態が生じる。
【０１１６】
たとえば現在のところ、マップ学習値、ベース学習値、ＴＳ学習値の各学習値に対して、
ＲＬＲＭＩＮ＃［％］≦マップ学習値≦ＲＬＲＭＡＸ＃［％］…（１４）
ＲＬＲＭＩＮ＃［％］≦ベース学習値≦ＲＬＲＭＡＸ＃［％］…（１５）
ＬＴＳＭＩＮ＃［ｍｓ］≦ＴＳ学習値≦ＬＴＳＭＡＸ＃［ｍｓ］…（１６）
のように各学習値ごとに独立してリミッタを設定している。ただし、（１４）、（１５）、（１６）式においてＲＬＲＭＡＸ＃、ＲＬＲＭＩＮ＃はマップ学習値（またはベース学習値）の上限値（たとえば１１０％）、下限値（たとえば９０％）、また、ＬＴＳＭＡＸ＃、ＬＴＳＭＩＮ＃はＴＳ学習値の上限値（たとえば＋０．１ｍｓ）、下限値（たとえば−０．１ｍｓ）である。
【０１１７】
ここで、マップ学習値とベース学習値はいずれかが選択され、両方がともに選択されることはないので、マップ学習値とＴＳ学習値の組み合わせで考える。この場合に、マップ学習値はＴＰに対する乗算項として、またＴＳ学習値はＴＰに対する加算項として加わることから、マップ学習値のリミッタについてはＴＰに関係なくＲＬＲＭＡＸ＃が上限リミッタ、ＲＬＲＭＩＮ＃が下限リミッタとなるのに対して、ＴＳ学習値のリミッタについてはＴＰが小さくなるほどＴＰに対するリミッタ分が大きくなっていくため、ＴＰを横軸にとり、マップ学習値のリミッタと無効パルス幅のリミッタを重ねたとき、図１５上段のようになる。つまり、マップ学習値が上限リミッタや下限リミッタに張り付いたとき、ＴＳ学習値がリミッタ分を超えなくても、２つの学習値のトータルでリミッタが所定の範囲（±１０％）を超えてしまうのである。
【０１１８】
これに対処するため本発明の第１実施形態では、ＴＳ学習値をＴＰに対するパーセントに換算した値と、もともとパーセントで設定されるマップ学習値とのトータルでリミッタが所定の範囲である±１０パーセントに収まるように２つの学習値をそれぞれ制限する。
【０１１９】
ここで、本発明のリミッタの制御イメージを図１５下段を参照して概説すると、ＴＳ学習値のリミッタをＴＰに対するパーセント表示に換算した値とマップ学習値のリミッタとのトータルで±１０％となるように、マップ学習値のリミッタを定めたとき、図示のように、ＴＰが小さくなるほど１００％に近づいていく曲線がそれぞれマップ学習値の上限リミッタ、下限リミッタとなる。したがって、マップ学習値を更新したり参照するとき、マップ学習値のリミッタを外れないように、またＴＳ学習値についてもＴＳ学習値を更新したり参照するときＴＳ学習値のリミッタを外れないように各学習値を制限することで、噴射時間表示のＴＳ学習値と％表示の学習値を合わせもつものにおいても、２つの学習値のトータルでのリミッタ（％単位）を±１０％以内に収め、これによって誤学習の悪影響を小さくするとともに、エンスト等の不具合を回避することができるのである。
【０１２０】
ただし、マップ学習値は学習領域毎の値であり、ＴＰに対して不連続な値をとることから、実際には図１５下段に示した曲線がそのままマップ学習値のリミッタを定めるものではない。
【０１２１】
具体的には、図１６にまとめて示したように、マップ学習値とＴＳ学習値に対して学習値の更新時、参照時のリミッタ処理を学習領域毎に行う。図１６に示したリミッタ処理を実現するため、
▲１▼図３に示すＬＡＬＰＨＡの検索においてステップ１７、２８のリミッタ処理Ｂ２とステップ２１、２５のリミッタ処理Ｃ２を、
▲２▼図８に示すマップ学習値の更新においてステップ５４のリミッタ処理Ｂ１を、
▲３▼図１０に示すベース学習値の更新においてステップ８３のリミッタ処理Ｃ１を、
▲４▼図１２に示すＴＳ学習値の参照においてステップ１１６〜１２２のリミッタ処理を、
▲５▼図１３に示すＴＳ学習値の更新においてステップ１３７のリミッタ処理Ａを追加している。
【０１２２】
なお、図１６はマップ学習値が選択されたときの２つの学習値（マップ学習値とＴＳ学習値）のリミッタ処理を示しているが、実施形態ではベース学習値が選択されることがあり、このときもマップ学習値が選択されたときと同様に２つの学習値（ベース学習値とＴＳ学習値）のリミッタ処理を行わなければならないので、▲１▼〜▲５▼にはベース学習値についてのリミッタ処理も含めている。
【０１２３】
以下、▲１▼〜▲５▼の順ではなく、
〈１〉ＴＳ学習値の更新時のリミッタ処理（上記▲５▼に対応）
〈２〉ＴＳ学習値の参照時のリミッタ処理（上記▲４▼に対応）
〈３〉マップ学習値の更新時、参照時のリミッタ処理（上記▲２▼、▲１▼に対応）
〈４〉ベース学習値の更新時、参照時のリミッタ処理（上記▲３▼、▲１▼に対応）
の順に項分けして説明する。
【０１２４】
〈１〉ＴＳ学習値の更新時のリミッタ処理
ＴＳ学習値の更新時のリミッタ処理は図１３のステップ１３７のリミッタ処理Ａのことである。この処理を行うため、サブルーチンとして図１７のフローチャートを設けている。つまり、図１３においてステップ１３７に進んだときは、図１７に飛んで図１７の処理をすべて実行した後、再び図１３に戻り、ステップ１３８以降を実行することになる。なお、後述するリミッタ処理Ｂ１、Ｃ１、Ｃ２についてもサブルーチンとして図１９、図２０、図２２、図２３のフローチャートを設けている。
【０１２５】
図１７においてステップ１６１〜１６５は上限リミッタ処理を、１６６〜１７０は下限リミッタ処理をそれぞれ行う部分である。上限リミッタ処理と下限リミッタ処理とで内容は同様であるので、主に上限リミッタ処理を説明する。
【０１２６】
ステップ１６１ではＴＰ（図２のステップ３で得ている）を用いて
ＬＴＳＭＡＸ２＝ＴＰ×（ＲＬＲＭＡＸ＃−ＴＡＬＰ０）／１００×２…（１７）
ただし、ＲＬＲＭＡＸ＃：学習値上限値［％］
ＴＡＬＰ０：学習領域０でのマップ学習値［％］
の式によりＴＳ学習値の上限値ＬＴＳＭＡＸ２［ｍｓ］を計算する。
【０１２７】
ここで、（１７）式がどういう値であるかを図１８を用いて説明すると、同図は前述した図１５下段と基本的に同じもので、図１８においてＴＰが大きくなるほど学習値上限値ＲＬＲＭＡＸ＃に近づいていく曲線が、ＴＳ学習値に対するリミッタ分とマップ学習値に対するリミッタ分を分ける境界である。実際にはマップ学習値は学習領域毎の値（不連続値）であるから、図示のように、マップ学習値に対するリミッタは階段状の値となる。なお、ＴＰ格子点（ＴＡＬＰＰ０＃、ＴＡＬＰＰ１＃、ＴＡＬＰＰ２＃、ＴＡＬＰＰ３＃）では黒丸のほうの値である。
【０１２８】
さて、学習領域が０のときＴＳ学習値に対する上限リミッタ分として許されるのは、ＲＬＲＭＡＸ＃からＴＡＬＰ０までのあいだ（つまり図示の矢印幅）であり、この値はパーセント単位であるため、これを１００パーセントで割った値にＴＰ［ｍｓ］をかけることによってｍｓ単位でのＴＳ学習値に対する上限値へと換算するのである。なお、（１７）式右辺の２はシーケンシャル噴射に対応させるための値である。
【０１２９】
ステップ１６２では、この上限値ＬＴＳＭＡＸ２とＴＳ学習上限値ＬＴＳＭＡＸ＃［ｍｓ］との小さいほうを上限リミッタ［ｍｓ］として選択する。これは次の理由からである。ＴＳ学習上限値ＬＴＳＭＡＸ＃は、現状と同じにＴＳ学習値単独で設定している上限値であり（上記の（１６）式参照）、このＬＴＳＭＡＸ＃とＬＴＳＭＡＸ２との小さいほうを選択することでＴＳ学習値の範囲を狭めて誤学習の影響を小さくするためである。
【０１３０】
このようにしてＴＳ学習値に対する上限リミッタが定まれば、ステップ１６３においてこの上限リミッタとＬＲＮＴＳを比較し、ＬＲＮＴＳが上限リミッタを超えているときはステップ１６４、１６５に進んでＬＲＮＴＳを上限リミッタに制限するとともに、その上限リミッタの値を変数Ｘ３（new）に入れる。
【０１３１】
同様にして、ステップ１６６では
ＬＴＳＭＩＮ２＝ＴＰ×（ＲＬＲＭＩＮ＃−ＴＡＬＰ０）／１００×２…（１８）
ただし、ＲＬＲＭＩＮ＃：学習値下限値［％］
ＴＡＬＰ０：学習領域０でのマップ学習値［％］
の式によりＴＳ学習値の下限値ＬＴＳＭＩＮ２［ｍｓ］を計算し、このＬＴＳＭＩＮ２とＴＳ学習下限値ＬＴＳＭＩＮ＃［ｍｓ］の大きいほうをステップ１６７において下限リミッタ［ｍｓ］として選択する。この下限リミッタとＬＲＮＴＳを比較し、ＬＲＮＴＳが下限リミッタを下回るときはステップ１６９、１７０に進んでＬＲＮＴＳを下限リミッタに制限するとともに、その下限リミッタの値を変数Ｘ３（new）に入れる。
【０１３２】
ステップ１７１では変数Ｘ３（new）の値をＴＳ学習値として格納する。つまり、ＴＳ学習値の更新時に図１３のステップ１３４、１３５、１３６でＴＳ学習値が更新されていても、ステップ１３７のリミッタ処理ＡにおいてＬＲＮＴＳがリミッタで制限されたときはその制限された値でＴＳ学習値をさらに更新するのである。
【０１３３】
〈２〉ＴＳ学習値の参照時のリミッタ処理
ＴＳ学習値の参照時のリミッタ処理は図１２のステップ１１６〜１２２である。
【０１３４】
図１２において、ステップ１１６で学習領域をみて、学習領域が０、４、８、１２のときだけステップ１１７以降に進む。
【０１３５】
ステップ１１７、１１８、１１９は上限リミッタ処理を、ステップ１２０、１２１、１２２は下限リミッタ処理をそれぞれ行う部分である。
【０１３６】
ステップ１１７では、
ＬＴＳＭＡＸ２＝ＴＰ×（ＲＬＲＭＡＸ＃−ＴＡＬＰ）／１００×２…（１９）
ただし、ＲＬＲＭＡＸ＃：学習値上限値［％］
ＴＡＬＰ：０、４、８、１２の各学習領域でのマップ学習値［％］
の式によりＴＳ学習値の上限値ＬＴＳＭＡＸ２［ｍｓ］を計算し、このＬＴＳＭＡＸ２とＬＲＮＴＳをステップ１１８において比較し、ＬＴＳＭＡＸ２＜ＬＲＮＴＳのときはステップ１１９に進んでＬＴＳＭＡＸ２の値をＬＲＮＴＳに移す。
【０１３７】
同様にして、ステップ１２０では
ＬＴＳＭＩＮ２＝ＴＰ×（ＲＬＲＭＩＮ＃−ＴＡＬＰ）／１００×２…（２０）
ただし、ＲＬＲＭＩＮ＃：学習値下限値［％］
ＴＡＬＰ：０、４、８、１２の各学習領域でのマップ学習値［％］
の式によりＴＳ学習の下限値ＬＴＳＭＩＮ２［ｍｓ］を計算し、このＬＴＳＭＩＮ２とＬＲＮＴＳをステップ１２１において比較し、ＬＴＳＭＩＮ２＞ＬＲＮＴＳのときはステップ１２２に進んでＬＴＳＭＩＮ２の値をＬＲＮＴＳに移す。
【０１３８】
（１９）、（２０）式を上記の（１７）、（１８）式と比較すればわかるように、学習領域でのマップ学習値が異なるだけで同等の式である。
【０１３９】
しかしながら、ＴＳ学習値の参照時には、リミッタでＬＲＮＴＳを制限するだけで、ＬＲＮＴＳがリミッタにより制限されたとき、そのリミッタ値でＴＳ学習値を更新することはしていない（図１７のステップ１６５、１７０に対応するステップが図１２にない）。これは次の理由による。学習領域０、４、８、１２では他の学習領域よりＴＰが小さいのであるが、これら４つの学習領域の中でもＴＰが小さくなると、（１９）式右辺の値、（２０）式右辺の値が小さくなる。したがって、このときにもＴＳ学習値を更新したのでは、ＴＳ学習値が小さな値となってしまうので、これを避けるため、学習領域が０、４、８、１２での参照時に限ってはリミッタでＴＳ学習値を更新することはしないのである。
【０１４０】
〈３〉マップ学習値の更新時、参照時のリミッタ処理
マップ学習値の更新時のリミッタ処理は、図８のステップ５４のリミッタ処理Ｂ１のことで、このリミッタ処理Ｂ１を図１９、図２０（図８ステップ５４のサブルーチン）のフローチャートにより説明する。
【０１４１】
図１９においてステップ１８１、１８２では学習領域をみる。ここでの学習領域は、図４に示したようにＴＰ格子だけにより４つに分割し、各学習領域を区別するためＡ０、Ａ１、Ａ２、Ａ３を割り振っている。たとえば学習領域Ａ０は学習領域０、４、８、１２を合わせたものである。
【０１４２】
学習領域がＡ０、Ａ１にあるときは図１９のステップ１８３〜１８７、図２０のステップ１８８〜１９３に、学習領域がＡ２にあるときは図１９のステップ１９４〜１９８、図２０のステップ１９９〜２０４に、学習領域がＡ３にあるときは図１９のステップ２０５〜２０９、図２０のステップ２１０〜２１５に進む。このうち、図１９のほうのステップ１８３〜１８７、ステップ１９４〜１９８、ステップ２０５〜２０９が上限リミッタ処理、図２０のほうのステップ１８８〜１９２、ステップ１９９〜２０３、ステップ２１０〜２１４が下限リミッタ処理をそれぞれ行う部分であり、両者で処理内容は同様であるので、これも上限リミッタ処理のほうで代表させる。
【０１４３】
ステップ１８３、１９４、２０５では
0003644172.tif 000006
ただし、ＲＬＲＭＡＸ＃：学習値上限値［％］
ＬＲＮＴＳ０：ＴＳ学習値［ｍｓ］
の式によりマップ学習領域毎上限値ＲＬＭＡＸ１［％］、ＲＬＭＡＸ２［％］、ＲＬＭＡＸ３［％］をそれぞれ計算し、これらのそれぞれと学習値上限値ＲＬＲＭＡＸ＃のいずれか小さいほうをステップ１８４、１９５、２０６において上限リミッタに設定する。
【０１４４】
ここで、（２１）、（２２）、（２３）式の中から（２１）式を例にとり、（２１）式右辺の値を、ＴＰでなくＴＡＬＰＰ１＃（学習領域Ａ１の下限を定めるＴＰ格子）に対する値とする理由を図２１を用いて説明する。
【０１４５】
学習領域Ａ１においてＴＰがＴＰ１のとき、ＴＳ学習値に対するリミッタ分は｛ＬＲＮＴＳ０／（ＴＰ１×２）｝×１００（％表示）であるから、ＲＬＲＭＡＸ＃からこの分を差し引いた値、つまり
ＲＬＲＭＡＸ＃−｛ＬＲＮＴＳ０／（ＴＰ１×２）｝×１００…（２４）
がマップ学習値に対する上限値となる。
【０１４６】
これに対して、同じ学習領域Ａ１においてＴＰ１よりも小さなＴＰ２のときは、
ＲＬＲＭＡＸ＃−｛ＬＲＮＴＳ０／（ＴＰ２×２）｝×１００…（２５）
がマップ学習値に対する上限値になることから、ＴＰがＴＰ１より小さくなるのにつれてマップ学習値に対する上限値を減少させなけれならない。したがって、（２４）の値を学習領域Ａ１の全体についてのマップ学習値の上限値としたのでは、学習領域Ａ１のうちＴＰ１未満の領域でマップ学習値の上限値が大きくなり過ぎ、２つの学習値のトータルでリミッタがＲＬＲＭＡＸ＃を超える事態が生じてしまう。そこで、学習領域Ａ１において最小のＴＰ（つまりＴＡＬＰＰ１＃）のときの値である
ＲＬＲＭＡＸ＃−｛ＬＲＮＴＳ０／（ＴＡＬＰＰ１＃×２）｝×１００
を学習領域Ａ１の全体についてのマップ学習値の上限値としたわけである。
【０１４７】
なお、学習領域Ａ０でのマップ学習領域毎上限値は学習領域Ａ１でのマップ学習領域毎上限値に等しくしている。これは、学習領域Ａ０においては、（２１）式からの類推により
ＲＬＲＭＡＸ＃−｛ＬＲＮＴＳ０／（ＴＡＬＰＰ０＃×２）｝×１００…（２６）
の値がマップ学習領域毎上限値となりそうであるが、ＴＡＬＰＰ０＃が０であることより、（２６）第２項目の値を計算することができないこと、また学習領域Ａ０ではＴＳ学習値のほうでリミッタにより制限していることから、学習領域Ａ０でのマップ学習領域毎上限値を学習領域Ａ１でのマップ学習領域毎上限値に等しくしているのである。
【０１４８】
図１９のステップ１８５、１９６、２０７では上限リミッタとＬＲＮＡＬＰを比較し、上限リミッタ＜ＬＲＮＡＬＰのときはステップ１８６、１９７、２０８に進んで、上限リミッタをＬＲＮＡＬＰに入れ、さらにステップ１８７、１９８、２０９において上限リミッタの値を変数Ｘ１（new）に移す。
【０１４９】
図２０のステップ１８８〜１９２、ステップ１９９〜２０３、ステップ２１０〜２１４では図１９のステップ１８３〜１８７、ステップ１９４〜１９８、ステップ２０５〜２０９と同様にして、学習領域毎に下限リミッタ処理を行う。
【０１５０】
ステップ１９３、２０４、２１５では、変数Ｘ１（new）の値を、対応する学習領域（このときの学習領域はＡ０、Ａ１、Ａ２、Ａ３でなく、図４の１〜１５の各領域である）のマップ学習値ＴＡＬＰとして格納する。つまり、マップ学習値の更新時に図８のステップ５３でマップ学習値が更新されていても、ステップ５４のリミッタ処理Ｂ１においてＬＲＮＡＬＰがリミッタで制限されたときはその制限された値でマップ学習値をさらに更新する。
【０１５１】
次に、マップ学習値の参照時のリミッタ処理は、図３のステップ１７、２８の各リミッタ処理Ｂ２のことであるが、このリミッタ処理Ｂ２も図１９、図２０に示したリミッタ処理Ｂ１（マップ学習値の更新時のリミッタ処理）と同様である。このときは、図１９、図２０においてステップ１８７、１９２、１９３、１９８、２０３、２０４、２０９、２１４、２１５で上限リミッタ、下限リミッタの各リミッタを変数Ｘ１（new）に入れたあと、この変数Ｘ１（new）の値を、対応する学習領域のマップ学習値として格納する代わりに、上限リミッタ、下限リミッタの各リミッタを直接に、対応する学習領域のマップ学習値として格納すればよい。つまり、マップ学習値の参照時にも、上限リミッタ、下限リミッタの各リミッタでＬＲＮＡＬＰを制限するとともに、リミッタでＬＲＮＡＬＰを制限したときはその制限した値でマップ学習値を更新するのである。
【０１５２】
ここで、マップ学習値の参照時にもリミッタにより制限した値でマップ学習値を更新するのは次の理由からである。２つの学習値（マップ学習値とＴＳ学習値）がある場合は、両方を同じタイミングで更新して各学習値とも最新値に置き換えていくことにより初めて、２つの学習値のトータルでリミッタを学習値上限値ＲＬＲＭＡＸ＃と学習値下限値ＲＬＲＭＩＮ＃の間に収めることができる。しかしながら、２つの学習値は学習許可条件が異なり、同じタイミングで更新されることがないため、２つの学習値のトータルでリミッタが学習値上限値ＲＬＲＭＡＸ＃を超えたり学習値下限値ＲＬＲＭＩＮ＃を下回ることが考えられる。そこで、マップ学習値の参照時にもリミッタにより制御した値でマップ学習値を更新することにより、できるだけ更新の機会を増やし、トータルの学習値のリミッタが学習値上限値ＲＬＲＭＡＸ＃を超えることも、学習値下限値ＲＬＲＭＩＮ＃を下回ることもないようにしているのである。
【０１５３】
〈４〉ベース学習値の更新時、参照時のリミッタ処理
ベース学習値の更新時のリミッタ処理は図１０のステップ８３のリミッタ処理Ｃ１、またベース学習値の参照時のリミッタ処理は図３のステップ２１、２５のリミッタ処理Ｃ２である。このうちリミッタ処理Ｃ１を図２２（図１０のステップ８３のサブルーチン）のフローチャートにより、またリミッタ処理Ｃ２を図２３（図３のステップ２１、２５のサブルーチン）のフローチャートにより説明する。
【０１５４】
ベース学習値の更新時のリミッタ処理はマップ学習値の更新時のリミッタ処理と同様である。ただし、マップ学習値と異なりベース学習値は図５に示したように１つの学習領域であるため、ベース学習値の上限値、下限値の各計算式が図２２のステップ２２１、２２６に示したように、
0003644172.tif 000007
ただし、ＲＬＭＡＸ０：ベース学習値の上限値［％］
ＲＬＭＩＮ０：ベース学習値の下限値［％］
ＲＬＲＭＡＸ＃：学習値上限値［％］
ＲＬＲＭＩＮ＃：学習値上限値［％］
ＬＲＮＴＳ０：ＴＳ学習値［ｍｓ］
ＢＳＬＴＰＬ＃：ベース学習許可下限ＴＰ
となっている。
【０１５５】
ここで、（２７）、（２８）式において右辺第２項の分母がＴＰ×２でなくＢＳＬＴＰＬ＃×２であるのは、図１９のステップ１８３、図２０のステップ１８８において右辺第２項の分母がＴＰ×２でなくＴＡＬＰＰ１＃×２であるのと同じ理由からである。なお、（２７）式右辺の値を図２４に示す。
【０１５６】
これに対してベース学習値の参照時には、ベース学習値の上限値、下限値の各計算式が図２３のステップ２４１、２４５に示したように、
0003644172.tif 000008
ただし、ＲＬＭＡＸ０：ベース学習値の上限値［％］
ＲＬＭＩＮ０：ベース学習値の下限値［％］
ＲＬＲＭＡＸ＃：学習値上限値［％］
ＲＬＲＭＩＮ＃：学習値上限値［％］
ＬＲＮＴＳ０：ＴＳ学習値［ｍｓ］
となり、これら上限値ＲＬＭＡＸ０、下限値ＲＬＭＩＮ０でＢＳＡＬＰを制限するものの（ステップ２４２、２４３、２４４、２４６、２４７、２４８）、制限した値でベース学習値を更新することはしない（図２２のステップ２２５、２３０、２３１に対応する部分が図２３にない）。
【０１５７】
ベース学習値の参照時に、リミッタにより制限するだけで、その制限した値でベース学習値を更新しないのは次の理由からである。（２９）、（３０）式においてＴＰが０に近づいていくとき、（２９）、（３０）式右辺第２項が大きくなり、（２９）、（３０）式右辺の値が０に近づいていくので、このときにまでベース学習値を更新したのでは、ベース学習値がごくわずかな値になってしまう。これを避けるため、ベース学習値の参照時にリミッタにより制限した値でベース学習値を更新することはしないのである。
【０１５８】
実施形態では、加算項の学習値がＴＳ学習値、乗算項の学習値がマップ学習値（またはベース学習値）である場合で説明したが、これに限られるものでない。
【図面の簡単な説明】
【図１】第１実施形態の制御システム図である。
【図２】気筒別燃料噴射パルス幅ＣＴｉｎの演算を説明するためのフローチャートである。
【図３】空燃比学習値ＬＡＬＰＨＡの検索を説明するためのフローチャートである。
【図４】マップ学習値の学習領域図である。
【図５】ベース学習値の学習領域図である。
【図６】マップ学習値とベース学習値の切換を説明するための波形図である。
【図７】空燃比フィードバック補正係数ＡＬＰＨＡの演算を説明するためのフローチャートである。
【図８】マップ学習値の更新を説明するためのフローチャートである。
【図９】学習許可条件の判定を説明するためのフローチャートである。
【図１０】ベース学習値の更新を説明するためのフローチャートである。
【図１１】学習許可条件の判定を説明するためのフローチャートである。
【図１２】ＴＳ学習値の参照を説明するためのフローチャートである。
【図１３】ＴＳ学習値の更新を説明するためのフローチャートである。
【図１４】学習許可条件の判定を説明するためのフローチャートである。
【図１５】現状のリミッタ処理の制御イメージと本発明のリミッタ処理の制御イメージを対比して示す特性図である。
【図１６】各学習領域毎のリミッタ処理をまとめて示す特性図である。
【図１７】ＴＳ学習値の更新時のリミッタ処理を説明するためのフローチャートである。
【図１８】ＴＳ学習値に対するリミッタ分を説明するための特性図である。
【図１９】マップ学習値の更新時のリミッタ処理を説明するためのフローチャートである。
【図２０】マップ学習値の更新時のリミッタ処理を説明するためのフローチャートである。
【図２１】マップ学習値の更新時のマップ学習値に対するリミッタ分を説明するための特性図である。
【図２２】ベース学習値の更新時のリミッタ処理を説明するためのフローチャートである。
【図２３】ベース学習値の参照時のリミッタ処理を説明するためのフローチャートである。
【図２４】ベース学習値の更新時のベース学習値に対するリミッタ分を説明するための特性図である。
【図２５】第１の発明のクレーム対応図である。
【符号の説明】
１  エンジン
２  コントロールユニット
３  燃料インジェクタ
４  エアフローメータ
７  クランク角センサ
９  Ｏ2センサ
【図１】
0003644172.tif 000009
【図２】
0003644172.tif 000010
【図３】
0003644172.tif 000011
【図４】
0003644172.tif 000012
【図５】
0003644172.tif 000013
【図６】
0003644172.tif 000014
【図７】
0003644172.tif 000015
【図８】
0003644172.tif 000016
【図９】
0003644172.tif 000017
【図１０】
0003644172.tif 000018
【図１１】
0003644172.tif 000019
【図１２】
0003644172.tif 000020
【図１３】
0003644172.tif 000021
【図１４】
0003644172.tif 000022
【図１５】
0003644172.tif 000023
【図１６】
0003644172.tif 000024
【図１７】
0003644172.tif 000025
【図１８】
0003644172.tif 000026
【図１９】
0003644172.tif 000027
【図２０】
0003644172.tif 000028
【図２１】
0003644172.tif 000029
【図２２】
0003644172.tif 000030
【図２３】
0003644172.tif 000031
【図２４】
0003644172.tif 000032
【図２５】
0003644172.tif 000033