(57)【特許請求の範囲】
【請求項１】
内燃機関の各気筒の排出ガスが集合して流れる排気集合部に、該排出ガスの空燃比を検出する空燃比センサを設置し、各気筒の空燃比検出タイミング毎に検出された前記空燃比センサの検出値に基づいて各気筒の空燃比を推定する気筒別空燃比推定手段と、各気筒の推定空燃比と基準空燃比との偏差に基づいて各気筒の燃料補正量を算出して各気筒の燃料噴射量を前記燃料補正量で補正することで各気筒の空燃比を制御（以下「気筒別空燃比制御」という）する気筒別空燃比制御手段とを備えた内燃機関の気筒別空燃比制御装置において、
前記気筒別空燃比制御中に各気筒の空燃比検出タイミングを変化させて各気筒の空燃比を推定し、燃料補正前後の推定空燃比の変化量が前記燃料補正量に応じた空燃比変化量になる空燃比検出タイミングを、各気筒の空燃比を検出するのに適正な空燃比検出タイミングとして学習する学習手段を備えていることを特徴とする内燃機関の気筒別空燃比制御装置。
【請求項２】
前記学習手段は、前記気筒別空燃比制御中に各気筒の空燃比検出タイミングを変化させて各気筒の空燃比を推定し、気筒間の推定空燃比のばらつき度合い及び前記燃料補正量のばらつき度合いが最小又は所定値以下となる空燃比検出タイミングを前記適正な空燃比検出タイミングとして学習することを特徴とする請求項１に記載の内燃機関の気筒別空燃比制御装置。
【請求項３】
前記学習手段は、内燃機関の運転状態毎に前記適正な空燃比検出タイミングを学習することを特徴とする請求項１又は２に記載の内燃機関の気筒別空燃比制御装置。
【請求項４】
前記気筒別空燃比推定手段は、前記空燃比センサの検出値を、各気筒の推定空燃比の履歴と該空燃比センサの検出値の履歴とにそれぞれ所定の重みを乗じて加算したものとしてモデル化し、該モデルを用いて各気筒の空燃比を推定することを特徴とする請求項１乃至３のいずれかに記載の内燃機関の気筒別空燃比制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、内燃機関の排気集合部に設置した１つの空燃比センサの検出値に基づいて各気筒の空燃比を推定する機能を備えた内燃機関の気筒別空燃比制御装置に関するものである。
【背景技術】
【０００２】
近年、内燃機関の気筒間の空燃比ばらつきを少なくして空燃比制御精度を向上させるために、特許文献１（特許第３２１７６８０号公報）に記載されているように、内燃機関の排気系の挙動を記述するモデルを設定して、排気集合部に設置した１つの空燃比センサの検出値（排気集合部を流れる排出ガスの空燃比）を該モデルに入力し、その内部状態を観測するオブザーバによって各気筒の空燃比を推定すると共に、各気筒の推定空燃比と目標値との偏差に応じて各気筒の燃料噴射量を補正して、各気筒の空燃比を目標値に一致させるようにしたものがある。更に、この特許文献１では、各気筒から排出される排出ガスが空燃比センサ付近に到達してその空燃比が検出されるまでの遅れ（以下「排気系の応答遅れ」という）がエンジン運転状態によって変化することを考慮して、エンジン設計・製造過程で、排気系の応答遅れとエンジン運転状態との関係を規定するマップを作成しておき、エンジン運転中に空燃比センサ出力のサンプルタイミング（各気筒の空燃比検出タイミング）をエンジン運転状態に応じて上記マップにより変化させるようにしている。
【０００３】
しかし、排気系の応答遅れを変化させる要因は、エンジン運転状態のみではなく、空燃比センサの応答性の経時劣化によっても排気系の応答遅れが変化する。
そこで、特許文献２（特開平１０−７３０４９号公報）では、燃料カット開始後の空燃比センサの応答遅れを計測して空燃比センサの応答劣化度合いを示す劣化パラメータを算出し、空燃比センサ出力のサンプルタイミング（各気筒の空燃比検出タイミング）を該劣化パラメータとエンジン運転状態の両方を考慮して変化させるようにしている。
【特許文献１】特許第３２１７６８０号公報（［０００８］、［００１３］、［０１６２］              〜［０１６４］等参照）
【特許文献２】特開平１０−７３０４９号公報（第２頁等）
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかしながら、各気筒の排気ポートから空燃比センサまでの排気通路（排気マニホールド）の長さが各気筒毎に異なると共に、各気筒の排出ガスの流れがエンジン回転速度や筒内充填空気量によって複雑に変化し、しかも、エンジンの製造ばらつきや経年変化によっても排気系の応答遅れが変化するため、エンジン設計・製造過程で、各気筒の排気系の応答遅れとエンジン運転状態との関係を精度良くマップ化しておくことは困難である。従って、上記特許文献１，２の技術では、空燃比センサ出力のサンプルタイミング（各気筒の空燃比検出タイミング）を精度良く補正することは困難である。
【０００５】
そこで、本発明の目的は、内燃機関の排気集合部に設置した１つの空燃比センサの検出値に基づいて各気筒の空燃比を推定するシステムにおいて、内燃機関の運転中に空燃比センサ出力のサンプルタイミング（各気筒の空燃比検出タイミング）のずれを精度良く学習できるようにすることである。
【課題を解決するための手段】
【０００６】
上記目的を達成するために、請求項１に係る発明は、内燃機関の各気筒の排出ガスが集合して流れる排気集合部に、該排出ガスの空燃比を検出する空燃比センサを設置し、各気筒の空燃比検出タイミング毎に検出された前記空燃比センサの検出値に基づいて各気筒の空燃比を気筒別空燃比推定手段により推定すると共に、気筒別空燃比制御手段により各気筒の推定空燃比と基準空燃比との偏差に基づいて各気筒の燃料補正量を算出して各気筒の燃料噴射量を前記燃料補正量で補正することで各気筒の空燃比を制御（以下「気筒別空燃比制御」という）するようにした内燃機関の気筒別空燃比制御装置において、前記気筒別空燃比制御中に各気筒の空燃比検出タイミングを変化させて各気筒の空燃比を推定し、燃料補正前後の推定空燃比の変化量が前記燃料補正量に応じた空燃比変化量になる空燃比検出タイミングを、各気筒の空燃比を検出するのに適正な空燃比検出タイミングとして学習する学習手段を備えた構成としたものである。
【０００７】
各気筒の推定空燃比の精度が良ければ、各気筒の燃料補正量が推定空燃比の変化量に精度良く反映され、燃料補正前後の推定空燃比の変化量が燃料補正量に応じた空燃比変化量（以下「燃料補正量相当分」という）になるはずである。
この特性に着目して、請求項１に係る発明では、気筒別空燃比制御中に各気筒の空燃比検出タイミングを変化させて、当該空燃比検出タイミングにおける各気筒の燃料補正前後の空燃比を推定し、燃料補正前後の推定空燃比の変化量が燃料補正量相当分になる空燃比検出タイミングを適正な空燃比検出タイミングとして学習手段により学習するようにしたものであり、これにより、気筒別空燃比制御中に適正な空燃比検出タイミングを学習することができ、その学習結果に基づいて各気筒の空燃比検出タイミングを適正な空燃比検出タイミングに補正することができて、各気筒の空燃比を精度良く推定することができる。
【０００８】
また、各気筒の推定空燃比の精度が良ければ、気筒間の推定空燃比のばらつき度合い及び燃料補正量のばらつき度合いが小さくなる。
この特性に着目して、請求項２のように、気筒別空燃比制御中に各気筒の空燃比検出タイミングを変化させて各気筒の空燃比を推定し、気筒間の推定空燃比のばらつき度合い及び燃料補正量のばらつき度合いが最小又は所定値以下となる空燃比検出タイミングを適正な空燃比検出タイミングとして学習するようにしても良い。このようにしても、気筒別空燃比制御中に適正な空燃比検出タイミングを学習することができ、その学習結果に基づいて各気筒の空燃比検出タイミングを適正な空燃比検出タイミングに設定することができて、各気筒の空燃比を精度良く推定することができる。
【００１１】
この場合、内燃機関の運転状態に応じて適正な空燃比検出タイミングが変化することを考慮して、請求項３のように、内燃機関の運転状態毎に適正な空燃比検出タイミングを学習するようにすると良い。このようにすれば、空燃比検出タイミングの学習値の精度を向上させることができる。
【００１２】
尚、上記各請求項１〜３に係る発明において、空燃比センサの検出値に基づいて各気筒の空燃比を推定する方法は、前記特許文献１，２や、その他の公知文献に記載された方法を用いても良いが、請求項４のように、空燃比センサの検出値を、各気筒の推定空燃比の履歴と該空燃比センサの検出値の履歴とにそれぞれ所定の重みを乗じて加算したものとしてモデル化し、該モデルを用いて各気筒の空燃比を推定するようにしても良い。このようにすれば、気筒別空燃比を推定するモデルが空燃比センサの検出値をその過去の検出値から予測する自己回帰モデルとなるため、空燃比センサの検出値から気筒別空燃比を精度良く推定することができる。しかも、簡単なモデルにすることができるので、モデリングの複雑さを解消できると共に、車載コンピュータの演算負荷を軽減できるという利点がある。
【発明を実施するための最良の形態】
【００１３】
以下、本発明を実施するための最良の形態について、幾つかの実施例を用いて説明する。
【実施例１】
【００１４】
本発明の実施例１を図１乃至図１０に基づいて説明する。まず、図１に基づいてエンジン制御システム全体の概略構成を説明する。内燃機関である例えば直列４気筒のエンジン１１の吸気管１２の最上流部には、エアクリーナ１３が設けられ、このエアクリーナ１３の下流側に、吸入空気量を検出するエアフローメータ１４が設けられている。このエアフローメータ１４の下流側には、モータ等によって開度調節されるスロットルバルブ１５とスロットル開度を検出するスロットル開度センサ１６とが設けられている。
【００１５】
更に、スロットルバルブ１５の下流側には、サージタンク１７が設けられ、このサージタンク１７には、吸気管圧力を検出する吸気管圧力センサ１８が設けられている。また、サージタンク１７には、エンジン１１の各気筒に空気を導入する吸気マニホールド１９が設けられ、各気筒の吸気マニホールド１９の吸気ポート近傍に、それぞれ燃料を噴射する燃料噴射弁２０が取り付けられている。エンジン運転中は、燃料タンク２１内の燃料が燃料ポンプ２２によりデリバリパイプ２３に送られ、各気筒の噴射タイミング毎に各気筒の燃料噴射弁２０から燃料が噴射される。デリバリパイプ２３には、燃料圧力（燃圧）を検出する燃圧センサ２４が取り付けられている。
【００１６】
また、エンジン１１には、吸気バルブ２５と排気バルブ２６の開閉タイミングをそれぞれ可変する可変バルブタイミング機構２７，２８が設けられている。更に、エンジン１１には、吸気カム軸２９と排気カム軸３０の回転に同期してカム角信号を出力する吸気カム角センサ３１と排気カム角センサ３２が設けられ、エンジン１１のクランク軸の回転に同期して所定クランク角毎（例えば３０℃Ａ毎）にクランク角信号のパルスを出力するクランク角センサ３３が設けられている。
【００１７】
一方、エンジン１１の各気筒の排気マニホールド３５が集合する排気集合部３６には、排出ガスの空燃比を検出する空燃比センサ３７が設置され、この空燃比センサ３７の下流側に排出ガス中のＣＯ，ＨＣ，ＮＯｘ等を浄化する三元触媒等の触媒３８が設けられている。
【００１８】
上記空燃比センサ３７等の各種センサの出力は、エンジン制御回路（以下「ＥＣＵ」と表記する）４０に入力される。このＥＣＵ４０は、マイクロコンピュータを主体として構成され、内蔵されたＲＯＭ（記憶媒体）に記憶された各種のエンジン制御プログラムを実行することで、エンジン運転状態に応じて各気筒の燃料噴射弁２０の燃料噴射量や点火時期を制御する。
【００１９】
本実施例では、ＥＣＵ４０は、後述する図２の気筒別空燃比制御ルーチンを実行することで、後述する気筒別空燃比推定モデルを用いて空燃比センサ３７の検出値（排気集合部３６を流れる排出ガスの実空燃比）に基づいて各気筒の空燃比を推定し、全気筒の推定空燃比の平均値を算出して、その平均値を基準空燃比（全気筒の目標空燃比）に設定すると共に、各気筒の推定空燃比と基準空燃比との偏差を各気筒毎に算出して、その偏差が小さくなるように各気筒の燃料補正量（燃料噴射量の補正量）を算出し、その算出結果に基づいて各気筒の燃料噴射量を補正することで、各気筒に供給する混合気の空燃比を各気筒毎に補正して気筒間の空燃比ばらつきを少なくするように制御する（以下、この制御を気筒別空燃比制御という）。
【００２０】
ここで、空燃比センサ３７の検出値（排気集合部３６を流れる排出ガスの実空燃比）に基づいて各気筒の空燃比を推定するモデル（以下「気筒別空燃比推定モデル」という）の具体例を説明する。
【００２１】
排気集合部３６におけるガス交換に着目して、空燃比センサ３７の検出値を、排気集合部３６における各気筒の推定空燃比の履歴と空燃比センサ３７の検出値の履歴とにそれぞれ所定の重みを乗じて加算したものとしてモデル化し、該モデルを用いて各気筒の空燃比を推定するようにしている。この際、オブザーバとしてはカルマンフィルタを用いる。
【００２２】
より具体的には、排気集合部３６におけるガス交換のモデルを次の（１）式にて近似する。
ｙs(t)＝ｋ1 ×ｕ(t-1) ＋ｋ2 ×ｕ(t-2) −ｋ3 ×ｙs(t-1)−ｋ4 ×ｙs(t-2)
……（１）
ここで、ｙS は空燃比センサ３７の検出値、ｕは排気集合部３６に流入するガスの空燃比、ｋ1 〜ｋ4 は定数である。
【００２３】
排気系では、排気集合部３６におけるガス流入及び混合の一次遅れ要素と、空燃比センサ３７の応答遅れによる一次遅れ要素とが存在する。そこで、上記（１）式では、これらの一次遅れ要素を考慮して過去２回分の履歴を参照することとしている。
【００２４】
上記（１）式を状態空間モデルに変換すると、次の（２ａ）、（２ｂ）式が導き出される。
【００２５】
Ｘ(t+1) ＝Ａ・Ｘ(t) ＋Ｂ・ｕ(t) ＋Ｗ(t)       ……（２ａ）
Ｙ(t) ＝Ｃ・Ｘ(t) ＋Ｄ・ｕ(t)                 ……（２ｂ）
ここで、Ａ，Ｂ，Ｃ，Ｄはモデルのパラメータ、Ｙは空燃比センサ３７の検出値、Ｘは状態変数としての各気筒の推定空燃比、Ｗはノイズである。
【００２６】
更に、上記（２ａ）、（２ｂ）式によりカルマンフィルタを設計すると、次の（３）式が得られる。
Ｘ＾(k+1｜k)＝Ａ・Ｘ＾(k｜k-1)＋Ｋ｛Ｙ(k) −Ｃ・Ａ・Ｘ＾(k｜k-1)｝  ……（３）  ここで、Ｘ＾（エックスハット）は各気筒の推定空燃比、Ｋはカルマンゲインである。Ｘ＾(k+1｜k)の意味は、時間(k) の推定値により次の時間(k+1) の推定値を求めることを表す。
【００２７】
以上のようにして、気筒別空燃比推定モデルをカルマンフィルタ型オブザーバにて構成することにより、燃焼サイクルの進行に伴い各気筒の空燃比を順次推定することができる。
【００２８】
次に、各気筒の空燃比検出タイミング（空燃比センサ３７の出力のサンプルタイミング）の設定方法について説明する。本実施例１では、各気筒から排出される排出ガスが空燃比センサ３７付近に到達してその空燃比が検出されるまでの遅れ（以下「排気系の応答遅れ」という）がエンジン運転状態によって変化することを考慮して、エンジン運転状態（例えばエンジン負荷、エンジン回転速度等）に応じてマップにより各気筒の空燃比検出タイミングを設定し、空燃比センサ３７の出力をＥＣＵ４０に取り込むようにしている。一般に、エンジン負荷が小さくなるほど、排気系の応答遅れが大きくなるため、各気筒の空燃比検出タイミングは、エンジン負荷が小さくなるほど、遅角側にシフトされるように設定されている。
【００２９】
しかしながら、各気筒の排気ポートから空燃比センサ３７までの排気マニホールド３５の長さが各気筒毎に異なると共に、各気筒の排出ガスの流れがエンジン運転状態（エンジン回転速度や筒内充填空気量等）によって複雑に変化し、しかも、エンジン１１の製造ばらつきや経年変化によっても排気系の応答遅れが変化するため、エンジン設計・製造過程で、各気筒の排気系の応答遅れ（各気筒の空燃比検出タイミング）とエンジン負荷との関係を精度良くマップ化しておくことは困難である。このため、各気筒の空燃比検出タイミングが適正な空燃比検出タイミングからずれる可能性がある。
【００３０】
もし、各気筒の空燃比検出タイミングがずれると、各気筒の空燃比の推定精度が悪化して、気筒別空燃比制御を続けても気筒間の推定空燃比のばらつきがいつまでも小さくならならない状態となる（図４参照）。
【００３１】
そこで、本実施例１では、後述する図５に示す空燃比検出タイミングずれ判定ルーチンを実行することで、気筒別空燃比制御中に気筒間の推定空燃比のばらつき度合いに基づいて空燃比検出タイミングのずれの有無を判定するようにしている。
以下、ＥＣＵ４０が実行する各ルーチンの処理内容を説明する。
【００３２】
［気筒別空燃比制御ルーチン］
図２に示す気筒別空燃比制御ルーチンは、クランク角センサ３３の出力パルスに同期して所定クランク角毎（例えば３０℃Ａ毎）に起動され、特許請求の範囲でいう気筒別空燃比制御手段としての役割を果たす。本ルーチンが起動されると、まずステップ１０１で、気筒別空燃比制御の実行条件が成立しているか否かを判定する。この気筒別空燃比制御の実行条件としては、例えば次の条件(1) 〜(4) がある。
【００３３】
(1) 空燃比センサ３７が活性状態であること
(2) 空燃比センサ３７が異常（故障）と判定されていないこと
(3) エンジン１１が暖機状態（例えば冷却水温が所定温度以上）であること
(4) エンジン運転領域（例えばエンジン回転速度と吸気管圧力）が空燃比推定精度を確保できる運転領域であること
【００３４】
これら４つの条件(1) 〜(4) を全て満したときに気筒別空燃比制御の実行条件が成立し、いずれか１つでも満たさない条件があれば、実行条件が不成立となる。実行条件が不成立の場合は、以降の処理を行うことなく、本ルーチンを終了する。
【００３５】
一方、実行条件が成立している場合は、ステップ１０２に進み、各気筒の空燃比検出タイミング（空燃比センサ３７の出力のサンプルタイミング）を、その時点のエンジン負荷（例えば吸気管圧力）に応じてマップにより設定する。尚、各気筒の空燃比検出タイミングをエンジン負荷とエンジン回転速度に応じてマップにより設定しても良い。この空燃比検出タイミングを設定するマップは、後述する図６及び図７の空燃比検出タイミングずれ学習補正ルーチンによって学習補正される。
【００３６】
この後、ステップ１０３に進み、現在のクランク角が上記ステップ１０２で設定した空燃比検出タイミングであるか否かを判定し、空燃比検出タイミングでなければ、以降の処理を行うことなく、本ルーチンを終了する。
【００３７】
これに対して、現在のクランク角が上記ステップ１０２で設定した空燃比検出タイミングであれば、ステップ１０４に進み、空燃比センサ３７の出力（空燃比検出値）を読み込む。この後、ステップ１０５に進み、前記気筒別空燃比推定モデルを用いて今回の空燃比推定対象となる気筒の空燃比を空燃比センサ３７の検出値に基づいて推定する。このステップ１０５の処理が特許請求の範囲でいう気筒別空燃比推定手段としての役割を果たす。この後、ステップ１０６に進み、全気筒の推定空燃比の平均値を算出して、その平均値を基準空燃比（全気筒の目標空燃比）に設定する。
【００３８】
この後、ステップ１０７に進み、各気筒の推定空燃比と基準空燃比との偏差を算出して、その偏差が小さくなるように各気筒の燃料補正量を算出した後、ステップ１０８に進み、各気筒の燃料補正量に基づいて各気筒の燃料噴射量を補正することで、各気筒に供給する混合気の空燃比を各気筒毎に補正して気筒間の空燃比ばらつきを少なくするように制御する。
【００３９】
［空燃比検出タイミングずれ判定ルーチン］
まず、空燃比検出タイミングのずれの判定方法を図３及び図４のタイムチャートを用いて説明する。図３は各気筒の空燃比検出タイミングが正しい場合の制御例であり、図４は各気筒の空燃比検出タイミングがずれている場合の制御例である。
【００４０】
図３に示すように、各気筒の空燃比検出タイミングが正しい場合は、空燃比センサ３７の検出値に基づいて各気筒の空燃比を精度良く推定できるため、気筒別空燃比制御を開始すると、各気筒の推定空燃比と基準空燃比との偏差（以下この偏差を「推定空燃比偏差」という）が小さくなり、気筒間の推定空燃比のばらつきが小さくなる。
【００４１】
これに対し、図４に示すように、各気筒の空燃比検出タイミングがずれている場合は、空燃比センサ３７の検出値から算出する各気筒の推定空燃比の精度が悪化するため、気筒別空燃比制御を続けても各気筒の推定空燃比偏差がいつまでも小さくならならず、気筒間の推定空燃比のばらつきが小さくならない状態となる。
【００４２】
このような特性に着目し、本実施例１では、図５の空燃比検出タイミングずれ判定ルーチンを実行することで、気筒間の推定空燃比のばらつき度合いが大きいか否かで空燃比検出タイミングのずれの有無を判定するようにしている。本ルーチンは、クランク角センサ３３の出力パルスに同期して所定クランク角毎（例えば３０℃Ａ毎）に起動される。本ルーチンが起動されると、まずステップ２０１で、気筒別空燃比制御中であるか否かを判定し、気筒別空燃比制御中でなければ、以降の処理を行うことなく、本ルーチンを終了する。
【００４３】
これに対して、気筒別空燃比制御中であれば、ステップ２０２に進み、気筒間の推定空燃比のばらつき度合いが大きいか否かを例えば下記の条件(A1)，(A2)のいずれか一方又は両方によって判定する。
【００４４】
(A1)各気筒の推定空燃比のうちの最大の推定空燃比と最小の推定空燃比との偏差が所定値以上であるか否かで、気筒間の推定空燃比のばらつき度合いが大きいか否かを判定する。
(A2)全気筒の推定空燃比の標準偏差が所定値以上であるか否かで、気筒間の推定空燃比のばらつき度合いが大きいか否かを判定する。
【００４５】
このステップ２０２で、気筒間の推定空燃比のばらつき度合いが大きいと判定されれば、ステップ２０３に進み、空燃比検出タイミングがずれていると判定して、本ルーチンを終了する。尚、気筒間の推定空燃比のばらつき度合いが小さい場合（ステップ２０２で「Ｎｏ」と判定される場合）には、空燃比検出タイミングが正しいと判断して、本ルーチンを終了する。
【００４６】
［空燃比検出タイミングずれ学習補正ルーチン］
まず、空燃比検出タイミングのずれの学習補正方法を図８及び図９を用いて説明する。図８及び図９は、空燃比検出タイミングが正しい場合とずれている場合の燃料噴射量の補正（燃料補正）の効果を説明する図である。空燃比検出タイミングが正しい場合は、各気筒の空燃比を精度良く推定できるため、所定の気筒の燃料噴射量を所定量補正すると、その気筒の空燃比は、燃料補正量相当分だけ変化するはずである。この特性に着目して、本実施例１では、図６及び図７の空燃比検出タイミングずれ学習補正ルーチンを実行することで、各気筒の空燃比検出タイミングを変化させて、当該空燃比検出タイミングにおける各気筒の燃料補正前後の空燃比を推定し、燃料補正前後の推定空燃比の変化量が燃料補正量相当分になる空燃比検出タイミングを適正な空燃比検出タイミングとして学習するようにしている。
【００４７】
図６及び図７の空燃比検出タイミングずれ学習補正ルーチンは、図５の空燃比検出タイミングずれ判定ルーチンの終了後に起動され、特許請求の範囲でいう学習手段としての役割を果たす。本ルーチンが起動されると、まずステップ３０１で、図５の空燃比検出タイミングずれ判定ルーチンにより空燃比検出タイミングがずれていると判定されたか否かを判定し、空燃比検出タイミングがずれていると判定されていない場合には、以降の処理を行うことなく、本ルーチンを終了する。
【００４８】
一方、空燃比検出タイミングがずれていると判定されている場合には、ステップ３０２に進み、遅角補正回数（空燃比検出タイミングを遅角側に補正した回数）が規定回数未満であるか否かを判定し、遅角補正回数が規定回数未満であれば、ステップ３０３に進み、空燃比検出タイミングを遅角側に所定クランク角だけ補正する。この後、ステップ３０４に進み、遅角補正後の空燃比検出タイミングにおける当該気筒の燃料補正前後の空燃比を推定し、燃料補正前後の推定空燃比の変化量を算出する。
【００４９】
この後、ステップ３０５に進み、推定空燃比の変化量が燃料補正量相当分にほぼ一致するか否かを判定することで、現在の空燃比検出タイミングが適正な空燃比検出タイミングであるか否かを判定する。その結果、現在の空燃比検出タイミングが適正な空燃比検出タイミングでないと判定された場合には、ステップ３０２に戻り、上述した空燃比検出タイミングの遅角補正を繰り返す。この遅角補正回数が規定回数に達する前に、推定空燃比の変化量が燃料補正量相当分にほぼ一致して空燃比検出タイミングが適正な空燃比検出タイミングになったと判定されれば、ステップ３０６に進み、その時点の空燃比検出タイミングを適正な空燃比検出タイミングとして学習し、その学習値をＥＣＵ４０のバックアップＲＡＭ等の書き換え可能な不揮発性メモリの学習値記憶領域に更新記憶する。この際、エンジン運転状態に応じて適正な空燃比検出タイミングが変化することを考慮して、図１０に示すように、空燃比検出タイミングの学習値をエンジン運転状態（例えばエンジン負荷とエンジン回転速度）毎に更新記憶する。この後、ステップ３０７に進み、遅角補正回数のカウント値をリセットした本ルーチンを終了する。
【００５０】
これに対して、空燃比検出タイミングの遅角補正を規定回数繰り返しても、空燃比検出タイミングが適正な空燃比検出タイミングにならなかった場合には、図７のステップ３０８に進み、進角補正回数（空燃比検出タイミングを進角側に補正した回数）が規定回数未満であるか否かを判定し、進角補正回数が規定回数未満であれば、ステップ３０９に進み、空燃比検出タイミングを遅角補正前の最初の位置から進角側に所定クランク角だけ補正する。この後、ステップ３１０に進み、進角補正後の空燃比検出タイミングにおける当該気筒の燃料補正前後の空燃比を推定し、燃料補正前後の推定空燃比の変化量を算出する。
【００５１】
この後、ステップ３１１に進み、推定空燃比の変化量が燃料補正量相当分にほぼ一致するか否かを判定することで、現在の空燃比検出タイミングが適正な空燃比検出タイミングであるか否かを判定する。その結果、現在の空燃比検出タイミングが適正な空燃比検出タイミングでないと判定された場合には、ステップ３０８に戻り、上述した空燃比検出タイミングの進角補正を繰り返す。この進角補正回数が規定回数に達する前に、推定空燃比の変化量が燃料補正量相当分にほぼ一致して空燃比検出タイミングが適正な空燃比検出タイミングになったと判定されれば、ステップ３１２に進み、その時点の空燃比検出タイミングを適正な空燃比検出タイミングとして学習し、その学習値をＥＣＵ４０のバックアップＲＡＭ等の書き換え可能な不揮発性メモリに更新記憶する。この後、ステップ３１３に進み、進角補正回数のカウント値をリセットした本ルーチンを終了する。
【００５２】
本ルーチンにより作成される空燃比検出タイミングの学習マップは、前記図２の気筒別空燃比制御ルーチンのステップ１０２で、空燃比検出タイミングを設定するマップとして使用される。
【００５３】
尚、空燃比検出タイミングの進角補正を規定回数繰り返しても、空燃比検出タイミングが適正な空燃比検出タイミングにならなかった場合（つまり適正な空燃比検出タイミングを学習できなかった場合）には、ステップ３０８で「Ｎｏ」と判定され、本ルーチンを終了する。
【００５４】
以上説明した本実施例１では、気筒別空燃比制御中に気筒間の推定空燃比のばらつき度合いに基づいて空燃比検出タイミングのずれの有無を判定するようにしたので、気筒別空燃比制御中に空燃比検出タイミングのずれを精度良く判定することができる。
【００５５】
しかも、本実施例１では、気筒別空燃比制御中に各気筒の空燃比検出タイミングを変化させて、当該空燃比検出タイミングにおける各気筒の燃料補正前後の空燃比を推定し、燃料補正前後の推定空燃比の変化量が燃料補正量相当分になる空燃比検出タイミングを適正な空燃比検出タイミングとして学習するようにしたので、気筒別空燃比制御中に適正な空燃比検出タイミングを学習することができ、その学習結果に基づいて各気筒の空燃比検出タイミングを適正な空燃比検出タイミングに補正することができて、各気筒の空燃比を精度良く推定することができる。
【００５６】
更に、本実施例１では、エンジン運転状態に応じて適正な空燃比検出タイミングが変化することを考慮して、空燃比検出タイミングをエンジン運転状態（例えばエンジン負荷とエンジン回転速度）毎に学習するようにしたので、空燃比検出タイミングの学習値の精度を向上させることができる。
しかしながら、本発明は、空燃比検出タイミングの平均的なずれを学習するようにしても良いことは言うまでもない。
【実施例２】
【００５７】
図３に示すように、各気筒の空燃比検出タイミングが正しい場合は、空燃比センサ３７の検出値に基づいて各気筒の空燃比を精度良く推定できるため、気筒別空燃比制御開始後に各気筒の燃料補正量が増加するにつれて各気筒の推定空燃比と基準空燃比との偏差（推定空燃比偏差）が小さくなり、気筒間の推定空燃比のばらつきが小さくなる。
【００５８】
これに対し、図４に示すように、各気筒の空燃比検出タイミングがずれている場合は、空燃比センサ３７の検出値から算出する各気筒の推定空燃比の精度が悪化するため、気筒別空燃比制御開始後に各気筒の燃料補正量が増加しても各気筒の推定空燃比偏差が小さくならならず、気筒間の推定空燃比のばらつきが小さくならない状態となる。
【００５９】
この特性に着目して、本発明の実施例２では、図１１の空燃比検出タイミングずれ判定ルーチンを実行することで、気筒別空燃比制御中に気筒間の燃料補正量のばらつき度合いと気筒間の推定空燃比のばらつき度合いとに基づいて空燃比検出タイミングのずれの有無を判定するようにしている。本ルーチンは、クランク角センサ３３の出力パルスに同期して所定クランク角毎（例えば３０℃Ａ毎）に起動される。本ルーチンが起動されると、まずステップ４０１で、気筒別空燃比制御中であるか否かを判定し、気筒別空燃比制御中でなければ、以降の処理を行うことなく、本ルーチンを終了する。
【００６０】
これに対して、気筒別空燃比制御中であれば、ステップ４０２に進み、所定以上の燃料補正を実施中であるか否かを例えば下記の条件(B1)〜(B3)のいずれか１つ又は２つ以上によって判定する。
【００６１】
(B1)各気筒の燃料補正量のうちの最大の燃料補正量と最小の燃料補正量との偏差が所定値以上であるか否かで、所定以上の燃料補正を実施中であるか否かを判定する。
(B2)全気筒の燃料補正量の標準偏差が所定値以上であるか否かで、所定以上の燃料補正を実施中であるか否かを判定する。
(B3)燃料補正開始後の経過時間が所定時間以上であるか否かで、所定以上の燃料補正を実施中であるか否かを判定する。
【００６２】
このステップ４０２で、所定以上の燃料補正を実施していないと判定されれば、そのまま本ルーチンを終了するが、所定以上の燃料補正を実施中であると判定されれば、ステップ４０３に進み、気筒間の推定空燃比のばらつき度合いが大きいか否かを例えば下記の条件(C1)，(C2)のいずれか一方又は両方によって判定する。
【００６３】
(C1)各気筒の推定空燃比のうちの最大の推定空燃比と最小の推定空燃比との偏差が所定値以上であるか否かで、気筒間の推定空燃比のばらつき度合いが大きいか否かを判定する。
(C2)全気筒の推定空燃比の標準偏差が所定値以上であるか否かで、気筒間の推定空燃比のばらつき度合いが大きいか否かを判定する。
【００６４】
このステップ４０３で、気筒間の推定空燃比のばらつき度合いが大きいと判定されれば、ステップ４０４に進み、空燃比検出タイミングがずれていると判定して、本ルーチンを終了する。尚、気筒間の推定空燃比のばらつき度合いが小さい場合（ステップ４０３で「Ｎｏ」と判定される場合）には、空燃比検出タイミングが正しいと判断して、本ルーチンを終了する。
【００６５】
以上説明した本実施例２においても、気筒別空燃比制御中に空燃比検出タイミングのずれを精度良く判定することができる。
【実施例３】
【００６６】
各気筒の推定空燃比の精度が良ければ、各気筒の燃料補正量の増減方向と推定空燃比の増減方向とが同じ挙動になる運転状態において、これと反対の挙動になれば、各気筒の推定空燃比の精度が悪いと考えられる。
【００６７】
この特性に着目して、本発明の実施例３では、図１２の空燃比検出タイミングずれ判定ルーチンを実行することで、気筒別空燃比制御中に各気筒の燃料補正量の増減方向と推定空燃比の増減方向とに基づいて空燃比検出タイミングのずれの有無を判定するようにしている。本ルーチンは、クランク角センサ３３の出力パルスに同期して所定クランク角毎（例えば３０℃Ａ毎）に起動される。本ルーチンが起動されると、まずステップ５０１で、気筒別空燃比制御中であるか否かを判定し、気筒別空燃比制御中でなければ、以降の処理を行うことなく、本ルーチンを終了する。
【００６８】
これに対して、気筒別空燃比制御中であれば、ステップ５０２に進み、所定以上の燃料補正を実施中であるか否かを例えば下記の条件(D1), (D3)のいずれか一方又は両方によって判定する。
【００６９】
(D1)各気筒の燃料補正量のうちの最大の燃料補正量と最小の燃料補正量との偏差が所定値以上であるか否かで、所定以上の燃料補正を実施中であるか否かを判定する。
(D2)特定気筒の燃料補正量が所定値以上であるか否かで、所定以上の燃料補正を実施中であるか否かを判定する。
【００７０】
このステップ５０２で、所定以上の燃料補正を実施していないと判定されれば、そのまま本ルーチンを終了するが、所定以上の燃料補正を実施中であると判定されれば、ステップ５０３に進み、各気筒の燃料補正量の増減方向と推定空燃比の増減方向とが反対の挙動になっているか否かを、例えば各気筒の燃料補正量の変化率と推定空燃比の変化率との偏差が所定値以上であるか否かによって判定する。その結果、各気筒の燃料補正量の増減方向と推定空燃比の増減方向とが反対の挙動になっていると判定されれば、ステップ５０４に進み、空燃比検出タイミングがずれていると判定して、本ルーチンを終了する。尚、各気筒の燃料補正量の増減方向と推定空燃比の増減方向とが同じ挙動になっている場合（ステップ５０３で「Ｎｏ」と判定される場合）には、空燃比検出タイミングが正しいと判断して、本ルーチンを終了する。
【００７１】
以上説明した本実施例３においても、気筒別空燃比制御中に空燃比検出タイミングのずれを精度良く判定することができる。
【実施例４】
【００７２】
各気筒の空燃比検出タイミングが正しければ、空燃比センサ３７の検出値に基づいて各気筒の空燃比を精度良く推定できるため、図１３に示すように、空燃比検出タイミングの最適点において、気筒間の推定空燃比のばらつき度合い（各気筒の推定空燃比偏差）が最小になると共に、気筒間の燃料補正量のばらつき度合いも最小になる。
【００７３】
この特性に着目して、本発明の実施例４では、図１４に示す空燃比検出タイミングずれ学習補正ルーチンを実行することで、気筒別空燃比制御中に各気筒の空燃比検出タイミングを変化させて各気筒の空燃比を推定し、気筒間の推定空燃比のばらつき度合い及び燃料補正量のばらつき度合いが最小となる空燃比検出タイミングを適正な空燃比検出タイミングとして学習するようにしている。
【００７４】
本ルーチンは、実施例１〜３のいずれかで説明した空燃比検出タイミングずれ判定ルーチンによって空燃比検出タイミングのずれの有無を判定した後に起動され、特許請求の範囲でいう学習手段としての役割を果たす。本ルーチンが起動されると、まずステップ６０１で、空燃比検出タイミングずれ判定ルーチンにより空燃比検出タイミングがずれていると判定されたか否かを判定し、空燃比検出タイミングがずれていると判定されていない場合には、以降の処理を行うことなく、本ルーチンを終了する。
【００７５】
一方、空燃比検出タイミングがずれていると判定されている場合には、ステップ６０２に進み、空燃比検出タイミングを最進角位置（補正可能な進角側の限界位置）に設定する。この後、ステップ６０３に進み、気筒間の推定空燃比のばらつき度合いを下記(E1)，(E2)のいずれかによって算出する。
【００７６】
(E1)各気筒の推定空燃比のうちの最大の推定空燃比と最小の推定空燃比との偏差を算出して、これを気筒間の推定空燃比のばらつき度合いとする。
(E2)全気筒の推定空燃比の標準偏差を算出して、これを気筒間の推定空燃比のばらつき度合いとする。
【００７７】
この後、ステップ６０４に進み、気筒間の燃料補正量のばらつき度合いを下記(F1)，(F2)のいずれかによって算出する。
(F1)各気筒の燃料補正量のうちの最大の燃料補正量と最小の燃料補正量との偏差を算出して、これを気筒間の燃料補正量のばらつき度合いとする。
(F2)全気筒の燃料補正量の標準偏差を算出して、これを気筒間の燃料補正量のばらつき度合いとする。
【００７８】
この後、ステップ６０４に進み、空燃比検出タイミングを遅角側に所定クランク角だけ補正した後、ステップ６０５に進み、遅角補正後の空燃比検出タイミングが最遅角位置（補正可能な遅角側の限界位置）を越えたか否かを判定し、越えていなければ、ステップ６０３に戻り、上述した処理を繰り返す。これにより、空燃比検出タイミングを最進角位置から最遅角位置に向けて少しずつ進角させて気筒間の推定空燃比のばらつき度合いと燃料補正量のばらつき度合いを算出する処理を繰り返す。
【００７９】
その後、ステップ６０５で遅角補正した空燃比検出タイミングが最遅角位置を越えると、ステップ６０６の判定結果が「Ｙｅｓ」となって、ステップ６０７に進み、それまでに算出した気筒間の推定空燃比のばらつき度合いと燃料補正量のばらつき度合いの中からそれらが最小となる空燃比検出タイミングの最適点を検索し、次のステップ６０８で、この空燃比検出タイミングの最適点をＥＣＵ４０のバックアップＲＡＭ等の書き換え可能な不揮発性メモリの学習値記憶領域に更新記憶する。この際、エンジン運転状態に応じて適正な空燃比検出タイミングが変化することを考慮して、空燃比検出タイミングの最適点の学習値をエンジン運転状態（例えばエンジン負荷とエンジン回転速度）毎に更新記憶するようにすると良い。
【００８０】
以上説明した本実施例４では、気筒別空燃比制御中に空燃比検出タイミングの最適点を精度良く学習することができる。
尚、本実施例４では、空燃比検出タイミングを最進角位置から最遅角位置まで変化させるようにしたが、気筒間の推定空燃比のばらつき度合いと燃料補正量のばらつき度合いが所定値以下になった段階で、これらのばらつき度合いを算出する処理を終了し、これらのばらつき度合いが所定値以下になった位置を適正な空燃比検出タイミングとして学習するようにしても良い。
【実施例５】
【００８１】
図１５に示すように、燃料カット復帰時に最初に空燃比センサ３７の出力が噴射再開後の空燃比に相当するレベルに変化するタイミングは、燃料カット復帰時の最初の噴射気筒のみによって決まり、他の気筒の影響を受けない。
【００８２】
この特性に着目して、本発明の実施例５では、図１６に示す空燃比検出タイミングずれ学習補正ルーチンを実行することで、燃料カット復帰時に最初に空燃比センサ３７の出力が噴射再開後の空燃比に相当する所定レベルに変化するタイミングに基づいて燃料カット復帰時の最初の噴射気筒（以下「燃料カット復帰気筒」という）における適正な空燃比検出タイミングを学習するようにしている。
【００８３】
本ルーチンは、クランク角センサ３３の出力パルスに同期して所定クランク角毎（例えば３０℃Ａ毎）に起動され、特許請求の範囲でいう学習手段としての役割を果たす。本ルーチンが起動されると、まずステップ７０１で、燃料カット復帰（燃料カット終了）から所定期間内であるか否かを判定し、所定期間内でなければ、以降の学習処理を行うことなく、本ルーチンを終了する。この所定期間は、燃料カット復帰時に最初に空燃比センサ３７の出力が噴射再開後の空燃比に相当する所定レベルに変化するまでの期間よりも少し長い期間に設定されている。尚、この所定期間内にエンジン運転条件（エンジン回転速度や負荷等）の変化量が所定値以上になった場合も、以降の学習処理を行うことなく、本ルーチンを終了するようにしても良い。エンジン運転条件の変化が大きいと、学習精度が低下するためである。
【００８４】
一方、燃料カット復帰から所定期間内であれば、ステップ７０２に進み、燃料カット復帰気筒をＥＣＵ４０のＲＡＭ等のメモリに記憶した後、ステップ７０３に進み、空燃比センサ３７の出力が噴射再開後の空燃比に相当する所定レベルに変化するまで待機する。この所定レベルは、エンジン運転条件（エンジン回転速度、負荷、燃料補正量等）に応じてマップ等により可変設定するようにしても良い。
【００８５】
その後、空燃比センサ３７の出力が噴射再開後の空燃比に相当する所定レベルに変化した時点で、ステップ７０４に進み、空燃比センサ３７の出力が噴射再開後の空燃比に相当する所定レベルに変化した時のクランク角（クランクカウンタの値）と燃料カット復帰気筒の噴射再開時のクランク角（クランクカウンタの値）とのずれ量に基づいて燃料カット復帰気筒の適正な空燃比検出タイミングを算出する。この際、エンジン運転条件（エンジン回転速度、負荷等）を考慮するようにしても良い。
【００８６】
この後、ステップ７０５に進み、この空燃比検出タイミングをＥＣＵ４０のバックアップＲＡＭ等の書き換え可能な不揮発性メモリの学習値記憶領域に更新記憶する。この際、エンジン運転状態に応じて適正な空燃比検出タイミングが変化することを考慮して、空燃比検出タイミングの学習値をエンジン運転状態（例えばエンジン負荷とエンジン回転速度）毎に更新記憶するようにすると良い。
【００８７】
以上説明した本実施例５においても、気筒別空燃比制御中に空燃比検出タイミングの最適点を精度良く学習することができる。
また、特定気筒で検出された空燃比検出タイミングのずれは、他の気筒の空燃比検出タイミングの平均的なずれとして学習するようにしても良いことは言うまでもない。
【実施例６】
【００８８】
次に、図１７乃至図２３を用いて本発明の実施例６を説明する。
本実施例６では、空燃比検出タイミングのずれを評価するデータとして、少なくとも１つの気筒の推定空燃比の変化量とその気筒の燃料補正量（空燃比補正量）の変化量との関係を表す指標となる相関値を用いる。
【００８９】
この相関値は、１つの気筒の推定空燃比の変化量とその気筒の燃料補正量の変化量との積、又はこの積の複数気筒分の和で表される。本実施例６では、各気筒の推定空燃比の変化量と燃料補正量の変化量との積を全気筒数分積算して相関値を求めるようにしている。      
【００９０】
更に、本実施例６では、相関値の算出タイミングを、７２０℃Ａ当たり複数のタイミング、例えば６つのタイミング（ベースタイミング、ベースタイミング＋１８０℃Ａ、ベースタイミング−１８０℃Ａ、ベースタイミング＋３６０℃Ａ、ベースタイミング＋９０℃Ａ、ベースタイミング−９０℃Ａ）に設定し、各タイミングで算出した相関値の中で、最も相関値が大きいタイミングを最もずれの少ない空燃比検出タイミングであると判断するようにしている。
【００９１】
前記実施例３で説明したように、各気筒の燃料補正量の増減方向と推定空燃比の増減方向とが反対の挙動になれば、各気筒の推定空燃比の精度が悪いと考えられる。各気筒の燃料補正量の増減方向と推定空燃比の増減方向とが反対の挙動になれば、各気筒の推定空燃比の変化量の符号（±）と燃料補正量の変化量の符号（±）が反対になるため、両者の積がマイナス値になり、この積の全気筒数分の和である相関値が小さくなる。従って、相関値が小さくなるほど、空燃比検出タイミングのずれが大きいことを意味し、相関値が大きくなるほど、空燃比検出タイミングのずれが小さいことを意味する。この関係から、本実施例６では、相関値を７２０℃Ａ当たり複数のタイミングで算出して、最も相関値が大きいタイミングを最もずれの少ない空燃比検出タイミングであると判断して、空燃比検出タイミングを学習補正するようにしている。
【００９２】
以上説明した本実施例６の空燃比検出タイミングのずれ判定・学習補正は、ＥＣＵ４０によって図１７乃至図２２に従って実行される。以下、これら各ルーチンの処理内容を説明する。
【００９３】
図１７の空燃比検出タイミングずれ判定ルーチンは、クランク角センサ３３の出力パルスに同期して所定クランク角毎（例えば３０℃Ａ毎）に起動される。本ルーチンが起動されると、まずステップ８０１で、気筒別空燃比制御中であるか否かを判定し、気筒別空燃比制御中でなければ、以降の処理を行うことなく、本ルーチンを終了する。
【００９４】
これに対して、気筒別空燃比制御中であれば、ステップ８０２に進み、所定以上の燃料補正を実施中であるか否かを、前記実施例３で説明した図１２のステップ５０２と同様の方法で判定する。このステップ８０２で、所定以上の燃料補正を実施していないと判定されれば、そのまま本ルーチンを終了するが、所定以上の燃料補正を実施中であると判定されれば、ステップ８０３に進み、図１８の相関値算出ルーチンを実行する。
【００９５】
図１８の相関値算出ルーチンが起動されると、まずステップ８１１で、相関値算出タイミング（例えば７２０℃Ａ毎）であるか否かを判定し、相関値算出タイミングでなければ、以降の処理を行うことなく、本ルーチンを終了する。
【００９６】
これに対して、相関値算出タイミングであれば、ステップ８１２に進み、各気筒の燃料補正係数（燃料補正量）の変化量である差分ΔＦＡＦ(1) 〜ΔＦＡＦ(N) を算出する。
ΔＦＡＦ(k) ＝ΔＦＡＦ(k)[i]−ΔＦＡＦ(k)[i-1]
ここで、ΔＦＡＦ(k) はｋ番気筒のΔＦＡＦであり（ｋ＝１〜Ｎ）、ΔＦＡＦ(k)[i]は今回のΔＦＡＦ(k) 、ΔＦＡＦ(k)[i-1]は前回のΔＦＡＦ(k) である。
【００９７】
この後、ステップ８１３に進み、図１９の推定空燃比差分算出ルーチンを実行して、下記の各タイミング(T1)〜(T6)における各気筒の推定空燃比の変化量である差分ΔＰＨＩを算出する。
【００９８】
(T1)ベースタイミングにおける各気筒の推定空燃比の差分ΔＰＨＩbase
ΔＰＨＩbase(k) ＝ＰＨＩbase(k)[i]−ＰＨＩbase(k)[i-1]    （ｋ＝１〜Ｎ）
ＰＨＩbase(k) はベースタイミングで推定したｋ番気筒の推定空燃比である。ベースタイミングは、基準となる空燃比検出タイミングであり、後述する図２２の空燃比検出タイミングずれ学習補正ルーチンによって学習補正される。
【００９９】
(T2)ベースタイミング＋１８０℃Ａにおける各気筒の推定空燃比の差分ΔＰＨＩp180
ΔＰＨＩp180(k) ＝ＰＨＩp180(k)[i]−ＰＨＩp180(k)[i-1]    （ｋ＝１〜Ｎ）
ＰＨＩp180(k) はベースタイミング＋１８０℃Ａのタイミングで推定したｋ番気筒の推定空燃比である。
【０１００】
(T3)ベースタイミング−１８０℃Ａにおける各気筒の推定空燃比の差分ΔＰＨＩm180
ΔＰＨＩm180(k) ＝ＰＨＩm180(k)[i]−ＰＨＩm180(k)[i-1]    （ｋ＝１〜Ｎ）
ＰＨＩm180(k) はベースタイミング−１８０℃Ａのタイミングで推定したｋ番気筒の推定空燃比である。
【０１０１】
(T4)ベースタイミング＋３６０℃Ａにおける各気筒の推定空燃比の差分ΔＰＨＩp360
ΔＰＨＩp360(k) ＝ＰＨＩp360(k)[i]−ＰＨＩp360(k)[i-1]    （ｋ＝１〜Ｎ）
ＰＨＩp360(k) はベースタイミング＋３６０℃Ａのタイミングで推定したｋ番気筒の推定空燃比である。
【０１０２】
(T5)ベースタイミング＋９０℃Ａにおける各気筒の推定空燃比の差分ΔＰＨＩp90
ΔＰＨＩp90(k)＝ＰＨＩp90(k)[i] −ＰＨＩp90(k)[i-1]       （ｋ＝１〜Ｎ）
ＰＨＩp90(k)はベースタイミング＋９０℃Ａのタイミングで推定したｋ番気筒の推定空燃比である。
【０１０３】
(T6)ベースタイミング−９０℃Ａにおける各気筒の推定空燃比の差分ΔＰＨＩm90
ΔＰＨＩm90(k)＝ＰＨＩm90(k)[i] −ＰＨＩm90(k)[i-1]       （ｋ＝１〜Ｎ）
ＰＨＩm90(k)はベースタイミング−９０℃Ａのタイミングで推定したｋ番気筒の推定空燃比である。
【０１０４】
ここで、各タイミング(T1)〜(T6)におけるｋ番気筒の推定空燃比ＰＨＩbase(k) 〜ＰＨＩm90(k)は、当量比φで算出される。
当量比φ＝理論空燃比／推定空燃比＝１／空気過剰率
【０１０５】
各タイミング(T1)〜(T6)における各気筒の推定空燃比の差分ΔＰＨＩを算出した後、図１８のステップ８１４に進み、図２０の瞬時相関値算出ルーチンを実行して、各タイミング(T1)〜(T6)における瞬時相関値ｄＣＯＲを算出する。
【０１０６】
(T1)ベースタイミングにおける瞬時相関値ｄＣＯＲbase
ｄＣＯＲbase＝Σ｛ΔＦＡＦ(k) ×ΔＰＨＩbase(k) ｝      （ｋ＝１〜Ｎ）
ここで、Σは１番気筒からＮ番気筒まで積算することを意味する（以下、同じ）。
(T2)ベースタイミング＋１８０℃Ａにおける瞬時相関値ｄＣＯＲp180
ｄＣＯＲp180＝Σ｛ΔＦＡＦ(k) ×ΔＰＨＩp180(k) ｝      （ｋ＝１〜Ｎ）
(T3)ベースタイミング−１８０℃Ａにおける瞬時相関値ｄＣＯＲm180
ｄＣＯＲm180＝Σ｛ΔＦＡＦ(k) ×ΔＰＨＩm180(k) ｝      （ｋ＝１〜Ｎ）
(T4)ベースタイミング＋３６０℃Ａにおける瞬時相関値ｄＣＯＲp360
ｄＣＯＲp360＝Σ｛ΔＦＡＦ(k) ×ΔＰＨＩp360(k) ｝      （ｋ＝１〜Ｎ）
(T5)ベースタイミング＋９０℃Ａにおける瞬時相関値ｄＣＯＲp90
ｄＣＯＲp90 ＝Σ｛ΔＦＡＦ(k) ×ΔＰＨＩp90(k)｝        （ｋ＝１〜Ｎ）
(T6)ベースタイミング−９０℃Ａにおける瞬時相関値ｄＣＯＲm90
ｄＣＯＲm90 ＝Σ｛ΔＦＡＦ(k) ×ΔＰＨＩm90(k)｝        （ｋ＝１〜Ｎ）
【０１０７】
各タイミング(T1)〜(T6)における瞬時相関値ｄＣＯＲを算出した後、図１８のステップ８１５に進み、図２１の積算相関値算出ルーチンを実行して、各タイミング(T1)〜(T6)における積算相関値ｓｕｍＣＯＲを算出する。
【０１０８】
(T1)ベースタイミングにおける積算相関値ｓｕｍＣＯＲbase(i)
ｓｕｍＣＯＲbase(i) ＝ｓｕｍＣＯＲbase(i-1) ＋ｄＣＯＲbase
（ｓｕｍＣＯＲbase(i-1) ：前回のｓｕｍＣＯＲbase）
(T2)ベースタイミング＋１８０℃Ａにおける積算相関値ｓｕｍＣＯＲp180(i)
ｓｕｍＣＯＲp180(i) ＝ｓｕｍＣＯＲp180(i-1) ＋ｄＣＯＲp180
（ｓｕｍＣＯＲp180(i-1) ：前回のｓｕｍＣＯＲp180）
(T3)ベースタイミング−１８０℃Ａにおける積算相関値ｓｕｍＣＯＲm180(i)
ｓｕｍＣＯＲm180(i) ＝ｓｕｍＣＯＲm180(i-1) ＋ｄＣＯＲm180
（ｓｕｍＣＯＲm180(i-1) ：前回のｓｕｍＣＯＲm180）
(T4)ベースタイミング＋３６０℃Ａにおける積算相関値ｓｕｍＣＯＲp360(i)
ｓｕｍＣＯＲp360(i) ＝ｓｕｍＣＯＲp360(i-1) ＋ｄＣＯＲp360
（ｓｕｍＣＯＲp360(i-1) ：前回のｓｕｍＣＯＲp360）
(T5)ベースタイミング＋９０℃Ａにおける積算相関値ｓｕｍＣＯＲp90(i)
ｓｕｍＣＯＲp90(i)＝ｓｕｍＣＯＲp90(i-1)＋ｄＣＯＲp90
（ｓｕｍＣＯＲp90(i-1)：前回のｓｕｍＣＯＲp90 ）
(T6)ベースタイミング−９０℃Ａにおける積算相関値ｓｕｍＣＯＲm90(i)
ｓｕｍＣＯＲm90(i)＝ｓｕｍＣＯＲm90(i-1)＋ｄＣＯＲm90
（ｓｕｍＣＯＲm90(i-1)：前回のｓｕｍＣＯＲm90 ）
【０１０９】
各タイミング(T1)〜(T6)における積算相関値ｓｕｍＣＯＲを算出した後、図１８のステップ８１６に進み、瞬時相関値ｄＣＯＲの積算回数をカウントする積算期間算出用カウンタＣをインクリメントし、次のステップ８１７で、積算期間算出用カウンタＣの値（瞬時相関値ｄＣＯＲの積算回数）が設定値ＣＭＡＸ（例えば２５）に達したか否かを判定し、まだ設定値ＣＭＡＸに達していなければ、そのまま本ルーチンを終了する。
【０１１０】
その後、積算期間算出用カウンタＣの値（瞬時相関値ｄＣＯＲの積算回数）が設定値ＣＭＡＸに達した時点で、ステップ８１８に進み、図２２の空燃比検出タイミングずれ学習補正ルーチンを実行して、空燃比検出タイミングのずれを次のようにして学習補正する。まず、ステップ８３１で、６つのタイミング(T1)〜(T6)における積算相関値ｓｕｍＣＯＲbase(i) 、ｓｕｍＣＯＲp180(i) 、ｓｕｍＣＯＲm180(i) 、ｓｕｍＣＯＲp360(i) 、ｓｕｍＣＯＲp90(i)、ｓｕｍＣＯＲm90(i)の中から、最大の積算相関値を選択する。
【０１１１】
この後、ステップ８３２に進み、積算相関値が最大となるタイミングに応じて空燃比検出タイミングの補正量Ｌcrnkを次のように選択する。
(T1)ベースタイミングの積算相関値ｓｕｍＣＯＲbase(i) が最大の場合
空燃比検出タイミングの補正量Ｌcrnk＝０
(T2)ベースタイミング＋１８０℃Ａの積算相関値ｓｕｍＣＯＲp180(i) が最大の場合
空燃比検出タイミングの補正量Ｌcrnk＝＋１８０℃Ａ
(T3)ベースタイミング−１８０℃Ａの積算相関値ｓｕｍＣＯＲm180(i) が最大の場合
空燃比検出タイミングの補正量Ｌcrnk＝−１８０℃Ａ
(T4)ベースタイミング＋３６０℃Ａの積算相関値ｓｕｍＣＯＲp360(i) が最大の場合
空燃比検出タイミングの補正量Ｌcrnk＝＋３６０℃Ａ
(T5)ベースタイミング＋９０℃Ａの積算相関値ｓｕｍＣＯＲp90(i)が最大の場合
空燃比検出タイミングの補正量Ｌcrnk＝＋３０℃Ａ
(T6)ベースタイミング−９０℃Ａの積算相関値ｓｕｍＣＯＲm90(i)が最大の場合
空燃比検出タイミングの補正量Ｌcrnk＝−３０℃Ａ
【０１１２】
ここで、ベースタイミングの積算相関値ｓｕｍＣＯＲbase(i) が最大の場合は、ベースタイミングにおいて、空燃比検出タイミングのずれが最も小さくなることを意味する。従って、この場合は、空燃比検出タイミングの補正量Ｌcrnkを０に設定する。
【０１１３】
一方、ベースタイミング±１８０℃Ａ、＋３６０℃Ａの積算相関値が最大となる場合は、空燃比検出タイミングが１８０℃Ａ以上ずれていることを意味する。このような大きなずれは、間違った気筒の空燃比を推定して補正してしまう原因となるため、空燃比検出タイミングのずれの補正を急ぐ必要がある。従って、この場合は、空燃比検出タイミングの補正量Ｌcrnkを±１８０℃Ａ、＋３６０℃Ａに設定して、空燃比検出タイミングの大きなずれを一挙に補正する。
【０１１４】
また、ベースタイミング±９０℃Ａの積算相関値が最大となる場合は、現在の空燃比検出タイミングが適正のタイミングに近いことを意味する。従って、この場合は、空燃比検出タイミングの補正精度を重視して、空燃比検出タイミングのずれを±３０℃Ａずつ小刻みに補正する。
【０１１５】
そして、次のステップ８３３で、バックアップＲＡＭ等の書き換え可能な不揮発性メモリに記憶されている空燃比検出タイミングの補正量Ｌcrnkを、上記ステップ８３２で選択した値で更新する。この後、図１８のステップ８１９に進み、積算期間算出用カウンタＣをリセットした後、ステップ８２０に進み、各タイミング(T1)〜(T6)の積算相関値をリセットして、本ルーチンを終了する。
【０１１６】
以上説明した本実施例６の空燃比検出タイミングの学習補正の一例を図２３に示している。図２３の例は、＃１気筒の空燃比がずれている状態で気筒別空燃比制御を開始したときの制御例を示している。図２３の例では、気筒別空燃比制御開始後、各タイミング(T1)〜(T6)における積算相関値は、ベースタイミング＋９０℃Ａにおける積算相関値ｓｕｍＣＯＲp90 が最大となるため、空燃比検出タイミングのずれが＋３０℃Ａずつ小刻みに補正される。これにより、空燃比検出タイミングが最適なタイミングに精度良く補正される。      
【０１１７】
以上説明した本実施例６では、各気筒の燃料補正係数の差分と推定空燃比の差分との積を全気筒数分積算して瞬時相関値を求める処理を、７２０℃Ａ当たり複数のタイミングで実施し、各タイミング毎に瞬時相関値を所定期間積算して、複数のタイミングの積算相関値を算出した後、最も積算相関値が大きいタイミングを最もずれの少ない空燃比検出タイミングであると判断して空燃比検出タイミングのずれを学習補正するようにしたので、空燃比検出タイミングのずれを精度良く学習補正することができる。
しかも、本実施例６では、瞬時相関値を所定期間積算するようにしたので、瞬間的に発生するノイズの影響を軽減することができる利点もある。
【０１１８】
尚、本実施例６では、各気筒の燃料補正係数の差分と推定空燃比の差分との積を全気筒数分積算して相関値を求めるようにしたが、特定の１つの気筒についてのみ、又は、全気筒数よりも少ない複数気筒分について相関値を求めるようにしても良い。
その他、本発明は、吸気ポート噴射エンジンに限定されず、筒内噴射エンジンにも適用して実施できる等、要旨を逸脱しない範囲で種々変更して実施できる。
【図面の簡単な説明】
【０１１９】
【図１】本発明の実施例１におけるエンジン制御システム全体の概略構成図である。
【図２】実施例１の気筒別空燃比制御ルーチンの処理の流れを示すフローチャートである。
【図３】各気筒の空燃比検出タイミングが正しい場合の制御例を示すタイムチャートである。
【図４】各気筒の空燃比検出タイミングがずれている場合の制御例を示すタイムチャートである。
【図５】実施例１の空燃比検出タイミングずれ判定ルーチンの処理の流れを示すフローチャートである。
【図６】実施例１の空燃比検出タイミングずれ学習補正ルーチンの処理の流れを示すフローチャートである（その１）。
【図７】実施例１の空燃比検出タイミングずれ学習補正ルーチンの処理の流れを示すフローチャートである（その２）。
【図８】実施例１の空燃比検出タイミングずれの検出方法を説明するタイムチャートである。
【図９】実施例１の空燃比検出タイミングずれの学習補正方法を説明するタイムチャートである。
【図１０】実施例１の空燃比検出タイミングの学習マップを概念的に示す図
【図１１】実施例２の空燃比検出タイミングずれ判定ルーチンの処理の流れを示すフローチャートである。
【図１２】実施例３の空燃比検出タイミングずれ判定ルーチンの処理の流れを示すフローチャートである。
【図１３】実施例４の空燃比検出タイミングずれの学習補正方法を説明するタイムチャートである。
【図１４】実施例４の空燃比検出タイミングずれ学習補正ルーチンの処理の流れを示すフローチャートである。
【図１５】実施例５の空燃比検出タイミングずれの学習補正方法を説明するタイムチャートである。
【図１６】実施例５の空燃比検出タイミングずれ学習補正ルーチンの処理の流れを示すフローチャートである。
【図１７】実施例６の空燃比検出タイミングずれ判定ルーチンの処理の流れを示すフローチャートである。
【図１８】実施例６の相関値算出ルーチンの処理の流れを示すフローチャートである。
【図１９】実施例６の推定空燃比差分算出ルーチンの処理内容を示すフローチャートである。
【図２０】実施例６の瞬時相関値算出ルーチンの処理内容を示すフローチャートである。
【図２１】実施例６の積算相関値算出ルーチンの処理内容を示すフローチャートである。
【図２２】実施例６の空燃比検出タイミングずれ学習補正ルーチンの処理の流れを示すフローチャートである。
【図２３】実施例６の空燃比検出タイミングずれ学習補正の一例を示すタイムチャートである。
【符号の説明】
【０１２０】
１１…エンジン（内燃機関）、１２…吸気管、１４…エアフローメータ、１５…スロットルバルブ、１９…吸気マニホールド、２０…燃料噴射弁、２２…燃料ポンプ、２４…燃圧センサ、２７，２８…可変バルブタイミング機構、３５…排気マニホールド、３６…排気集合部、３７…空燃比センサ、３８…触媒、４０…ＥＣＵ（気筒別空燃比推定手段，気筒別空燃比制御手段，学習手段）
【図１】
0004600699.tif 000002
【図２】
0004600699.tif 000003
【図３】
0004600699.tif 000004
【図４】
0004600699.tif 000005
【図５】
0004600699.tif 000006
【図６】
0004600699.tif 000007
【図７】
0004600699.tif 000008
【図８】
0004600699.tif 000009
【図９】
0004600699.tif 000010
【図１０】
0004600699.tif 000011
【図１１】
0004600699.tif 000012
【図１２】
0004600699.tif 000013
【図１３】
0004600699.tif 000014
【図１４】
0004600699.tif 000015
【図１５】
0004600699.tif 000016
【図１６】
0004600699.tif 000017
【図１７】
0004600699.tif 000018
【図１８】
0004600699.tif 000019
【図１９】
0004600699.tif 000020
【図２０】
0004600699.tif 000021
【図２１】
0004600699.tif 000022
【図２２】
0004600699.tif 000023
【図２３】
0004600699.tif 000024