(57)【要約】  【課題】  エンジンの排気集合部に設置した１つの空燃比センサの検出値に基づいて各気筒の空燃比を推定するシステムにおいて、エンジン運転中に各気筒の空燃比検出タイミングのずれを精度良く学習補正することができるようにする。  【解決手段】  学習モード期間中に、各気筒の燃料補正係数（燃料補正量）を補正無しの状態から強制的に複数回（例えば３回）変化させることで、各気筒の燃料噴射量を補正無しの状態から強制的に複数回（例えば３回）変化させ、その変化毎に例えば６０℃Ａずつ異なる空燃比検出タイミングで空燃比センサの検出値に基づいて演算した各気筒の推定空燃比の変化量と各気筒の燃料補正係数の変化量との相互相関を評価し、その評価結果に基づいて空燃比検出タイミングの適正値からのずれを学習する。この際、全気筒の燃料補正係数の補正量の総和がほぼ０になるように設定すると良い。  【選択図】  図３
2006300020.tif 000002
【特許請求の範囲】
【請求項１】
内燃機関の各気筒の排出ガスが集合して流れる排気集合部に、該排出ガスの空燃比を検出する空燃比センサを設置し、各気筒の空燃比検出タイミング毎に前記空燃比センサの検出値に基づいて各気筒の空燃比を推定する気筒別空燃比推定手段と、各気筒の推定空燃比に基づいて各気筒の燃料噴射量を補正して気筒間の空燃比ばらつきを小さくする気筒別空燃比制御を実行する気筒別空燃比制御手段とを備えた内燃機関の気筒別空燃比制御装置において、
空燃比検出タイミングの適正値又は適正値からのずれを学習（以下「空燃比検出タイミングの学習」という）する学習手段と、
前記学習手段の学習値に基づいて前記気筒別空燃比制御中の空燃比検出タイミングのずれを補正する検出タイミング補正手段とを備え、
前記学習手段は、学習期間中に各気筒の燃料噴射量を強制的に変化させ、その変化の影響が現れる空燃比検出タイミングで前記空燃比センサの検出値に基づいて演算した各気筒の推定空燃比と各気筒の燃料噴射量とに基づいて前記空燃比検出タイミングの学習を行うことを特徴とする内燃機関の気筒別空燃比制御装置。
【請求項２】
前記学習手段は、学習期間中に各気筒の燃料噴射量を強制的に複数回変化させ、その変化毎に異なる空燃比検出タイミングで前記空燃比センサの検出値に基づいて演算した各気筒の推定空燃比と各気筒の燃料噴射量との相互相関に基づいて前記空燃比検出タイミングの学習を行うことを特徴とする請求項１に記載の内燃機関の気筒別空燃比制御装置。
【請求項３】
前記学習手段は、学習期間中に各気筒の燃料噴射量を強制的に１回のみ変化させ、その変化の影響が現れる期間に複数の空燃比検出タイミングを設定して、その空燃比検出タイミング毎に前記空燃比センサの検出値に基づいて演算した各気筒の推定空燃比と各気筒の燃料噴射量との相互相関に基づいて前記空燃比検出タイミングの学習を行うことを特徴とする請求項１に記載の内燃機関の気筒別空燃比制御装置。
【請求項４】
前記学習手段は、学習期間中に各気筒の燃料噴射量を強制的に変化させる際に、各気筒の燃料噴射量をそれらの変化量の総和がほぼ０になるように設定することを特徴とする請求項１乃至３のいずれかに記載の内燃機関の気筒別空燃比制御装置。
【請求項５】
前記検出タイミング補正手段は、内燃機関回転速度、負荷、吸気バルブタイミング、排気バルブタイミングのいずれか１つ又は２つ以上に基づいて基準空燃比検出タイミングを算出し、この基準空燃比検出タイミングを前記学習手段の学習値に基づいて補正して最終的な空燃比検出タイミングを決定することを特徴とする請求項１乃至４のいずれかに記載の内燃機関の気筒別空燃比制御装置。
【請求項６】
前記学習手段は、学習期間中に前記気筒別空燃比制御を禁止する手段を備えていることを特徴とする請求項１乃至５のいずれかに記載の内燃機関の気筒別空燃比制御装置。
【請求項７】
前記学習手段は、スロットル開度、内燃機関回転速度、負荷、吸気バルブタイミング、排気バルブタイミングのいずれかの変化量が所定値を越えたときに前記空燃比検出タイミングの学習を禁止する手段を備えていることを特徴とする請求項１乃至６のいずれかに記載の内燃機関の気筒別空燃比制御装置。
【請求項８】
前記学習手段は、内燃機関の運転領域毎に前記空燃比検出タイミングの学習を行うことを特徴とする請求項１乃至７のいずれかに記載の内燃機関の気筒別空燃比制御装置。
【請求項９】
前記学習手段は、前記気筒別空燃比制御の発散を検出したときに前記空燃比検出タイミングの学習を行うことを特徴とする請求項１乃至８のいずれかに記載の内燃機関の気筒別空燃比制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、内燃機関の排気集合部に設置した１つの空燃比センサの検出値に基づいて各気筒の空燃比を推定する機能を備えた内燃機関の気筒別空燃比制御装置に関するものである。
【背景技術】
【０００２】
近年、内燃機関の気筒間の空燃比ばらつきを少なくして空燃比制御精度を向上させるために、特許文献１（特開平１０−７３０４９号公報）に記載されているように、内燃機関の排気系の挙動を記述するモデルを設定して、排気集合部に設置した１つの空燃比センサの検出値（排気集合部を流れる排出ガスの空燃比）を該モデルに入力し、その内部状態を観測するオブザーバによって各気筒の空燃比を推定すると共に、各気筒の推定空燃比と目標値との偏差に応じて各気筒の燃料噴射量を補正して、各気筒の空燃比を目標値に一致させるようにしたものがある。更に、この特許文献１の技術では、各気筒から排出される排出ガスが空燃比センサ付近に到達してその空燃比が検出されるまでの遅れ（以下「排気系の応答遅れ」という）が空燃比センサの応答性の経時劣化によって変化することを考慮して、燃料カット時の空燃比センサの応答遅れを計測して空燃比センサの応答劣化度合いを示す劣化パラメータを算出し、空燃比センサ出力のサンプルタイミング（各気筒の空燃比検出タイミング）を該劣化パラメータに応じて補正するようにしている。
【０００３】
しかし、この方法では、燃料カット時の空燃比センサの応答遅れを計測している期間中に、外乱により空燃比が大きく変動すると、劣化パラメータの算出精度が悪化して空燃比検出タイミングの補正精度が悪化する欠点がある。
【０００４】
そこで、特許文献２（特開２００１−１４０６８５号公報）では、燃料カット時の空燃比センサの応答遅れを計測している期間中に、外乱により空燃比が大きく変動した場合に、空燃比センサの応答遅れの計測を禁止することで、空燃比検出タイミングの補正精度の悪化を回避するようにしている。
【特許文献１】特開平１０−７３０４９号公報（第２頁等）
【特許文献２】特開２００１−１４０６８５号公報（第３頁等）
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上記特許文献１，２の技術は、いずれも、燃料カット時の空燃比センサの応答遅れを計測して空燃比検出タイミングを補正するものであるが、気筒別空燃比ばらつき時の挙動は１８０℃Ａ毎（４気筒エンジンの場合）に繰り返される、各気筒の排気系の応答遅れと空燃比センサの応答遅れの組合せであるため、補正すべき空燃比検出タイミングのずれは、必ずしも、燃料カット時の空燃比センサの応答遅れのずれと精度良く一対一の関係にはならなず、また、空燃比検出タイミングのずれを補正する時間は、空燃比センサ応答遅れ時間に比べて非常に短い時間となる。従って、特許文献１，２のように、燃料カット時の空燃比センサの応答遅れを計測して空燃比検出タイミングを補正する方法では、空燃比検出タイミングのずれを精度良く学習補正することは困難である。
【０００６】
本発明はこのような事情を考慮してなされたものであり、従ってその目的は、内燃機関の排気集合部に設置した１つの空燃比センサの検出値に基づいて各気筒の空燃比を推定するシステムにおいて、内燃機関の運転中に各気筒の空燃比検出タイミングのずれを精度良く学習補正することができる内燃機関の気筒別空燃比制御装置を提供することにある。
【課題を解決するための手段】
【０００７】
上記目的を達成するために、請求項１に係る発明は、内燃機関の各気筒の排出ガスが集合して流れる排気集合部に、該排出ガスの空燃比を検出する空燃比センサを設置し、各気筒の空燃比検出タイミング毎に前記空燃比センサの検出値に基づいて各気筒の空燃比を推定する気筒別空燃比推定手段と、各気筒の推定空燃比に基づいて各気筒の空燃比を制御する気筒別空燃比制御を実行する気筒別空燃比制御手段とを備えた内燃機関の気筒別空燃比制御装置において、空燃比検出タイミングの適正値又は適正値からのずれを学習（以下「空燃比検出タイミングの学習」という）する学習手段と、この学習手段の学習値に基づいて前記気筒別空燃比制御中の空燃比検出タイミングのずれを補正する検出タイミング補正手段とを備え、前記学習手段は、学習期間中に各気筒の燃料噴射量を強制的に変化させ、その変化の影響が現れる空燃比検出タイミングで前記空燃比センサの検出値に基づいて演算した各気筒の推定空燃比と各気筒の燃料噴射量とに基づいて前記空燃比検出タイミングの学習を行うようにしたものである。
【０００８】
要するに、各気筒の燃料噴射量を強制的に変化させた時の各気筒の推定空燃比と各気筒の燃料噴射量との関係は、各気筒の排気系の応答遅れと空燃比センサの応答遅れの両方の影響を含む空燃比検出タイミングのずれを評価するデータとなるため、各気筒の燃料噴射量を強制的に変化させた時の各気筒の推定空燃比と各気筒の燃料噴射量との関係から各気筒の空燃比検出タイミングの適正値又は適正値からのずれを精度良く学習することができる。
【０００９】
具体的には、請求項２のように、学習期間中に各気筒の燃料噴射量を強制的に複数回変化させ、その変化毎に異なる空燃比検出タイミングで前記空燃比センサの検出値に基づいて演算した各気筒の推定空燃比と各気筒の燃料噴射量との相互相関を評価し、その評価結果に基づいて空燃比検出タイミングの学習を行うようにしても良い。このようにすれば、空燃比検出タイミングの学習処理を複数回に分けて実施することができるため、学習期間中のＣＰＵ演算負荷を大幅に増加させることなく、比較的安価なＣＰＵでも空燃比検出タイミングの学習処理を実施することができる。
【００１０】
また、請求項３のように、学習期間中に各気筒の燃料噴射量を強制的に１回のみ変化させ、その変化の影響が現れる期間に複数の空燃比検出タイミングを設定して、その空燃比検出タイミング毎に空燃比センサの検出値に基づいて演算した各気筒の推定空燃比と各気筒の燃料噴射量との相互相関を評価し、その評価結果に基づいて空燃比検出タイミングの学習を行うようにしても良い。このようにすれば、同一の運転条件下で複数の空燃比検出タイミングのずれ度合い（適正度合い）を相互相関によって評価することが可能となり、空燃比検出タイミングの学習精度を更に向上させることができる。しかも、燃料噴射量の１回の変化で複数の空燃比検出タイミングのずれ度合い（適正度合い）を評価できるため、学習時間を短縮できる利点もある。
【００１１】
また、請求項４のように、学習期間中に各気筒の燃料噴射量を強制的に変化させる際に、各気筒の燃料噴射量をそれらの変化量の総和がほぼ０になるように設定するようにすると良い。このようにすれば、学習期間中に各気筒の燃料噴射量を強制的に変化させても触媒に流入する排出ガスの平均空燃比を目標空燃比付近に制御することが可能となり、学習期間中の各気筒の燃料噴射量の強制的な変化によるエミッション増加の問題を回避することができる。
【００１２】
また、空燃比検出タイミングの学習値に基づいて気筒別空燃比制御中の空燃比検出タイミングのずれを補正する際に、請求項５のように、内燃機関回転速度、負荷、吸気バルブタイミング、排気バルブタイミングのいずれか１つ又は２つ以上に基づいて基準空燃比検出タイミングを算出し、この基準空燃比検出タイミングを空燃比検出タイミングの学習値に基づいて補正して最終的な空燃比検出タイミングを決定するようにすると良い。このようにすれば、内燃機関回転速度、負荷、吸気バルブタイミング、排気バルブタイミングによって排気系の応答遅れが変化するのに対応して基準空燃比検出タイミングを適正に変化させることができるので、この基準空燃比検出タイミングを空燃比検出タイミングの学習値に基づいて補正して最終的な空燃比検出タイミングを決定すれば、より適正な空燃比検出タイミングを求めることができる。
【００１３】
また、請求項６のように、学習期間中には、気筒別空燃比制御を禁止するようにすると良い。このようにすれば、学習期間中に、気筒別空燃比制御による各気筒の空燃比の変動を無くすことができ、気筒別空燃比制御の影響を受けない安定した条件下で空燃比検出タイミングの学習を行うことができる。
【００１４】
ところで、学習期間中に、内燃機関回転速度、負荷、吸気バルブタイミング、排気バルブタイミングが大きく変化すると、その影響で各気筒の空燃比がずれて、空燃比検出タイミングの学習精度が低下することは避けられない。
【００１５】
この対策としては、請求項７のように、スロットル開度、内燃機関回転速度、負荷、吸気バルブタイミング、排気バルブタイミングのいずれかの変化量が所定値を越えたときに空燃比検出タイミングの学習を禁止するようにすると良い。このようにすれば、燃料噴射量の強制的な変化以外の要因で各気筒の空燃比がずれるような過渡状態では、空燃比検出タイミングの学習を禁止することができるので、各気筒の空燃比が安定した定常状態のときのみ空燃比検出タイミングの学習を行うという運転状態に応じた選択的な学習制御が可能となる。
【００１６】
また、内燃機関の運転状態に応じて空燃比検出タイミングの適正値が変化するという事情を考慮して、請求項８のように、内燃機関の運転領域毎に空燃比検出タイミングの学習を行うようにしても良い。このようにすれば、空燃比検出タイミングの学習値の精度を更に向上させることができる。
【００１７】
ところで、気筒別空燃比制御中に空燃比検出タイミングの学習補正の精度が悪化してくると、図２に示すように、気筒別空燃比制御を実施して気筒間の空燃比ばらつきを少なくしようとしているにも拘らず、各気筒の燃料補正係数（燃料補正量）、推定空燃比、検出空燃比のばらつきが次第に大きくなっていく現象（気筒別空燃比制御の発散）が発生する。この反対に、気筒別空燃比制御が発散しないということは、その気筒別空燃比制御に使用している空燃比検出タイミングの学習値の精度が確保されているということを意味するため、この状態では、学習値を更新する必要がない。
【００１８】
この点を考慮して、請求項９のように、気筒別空燃比制御の発散を検出したときに空燃比検出タイミングの学習を行うようにすると良い。このようにすれば、空燃比検出タイミングの学習値の精度が悪化して、学習値を更新する必要が生じたときのみ、空燃比検出タイミングの学習を行うという制御が可能となり、学習頻度を少なくしてＣＰＵ演算負荷を軽減しながら、空燃比検出タイミングの学習補正の精度を維持することができる。
【発明を実施するための最良の形態】
【００１９】
以下、本発明を実施するための最良の形態を具体化した２つの実施例１，２を説明する。
【実施例１】
【００２０】
本発明の実施例１を図１乃至図１０に基づいて説明する。まず、図１に基づいてエンジン制御システム全体の概略構成を説明する。内燃機関である例えば直列４気筒のエンジン１１の吸気管１２の最上流部には、エアクリーナ１３が設けられ、このエアクリーナ１３の下流側に、吸入空気量を検出するエアフローメータ１４が設けられている。このエアフローメータ１４の下流側には、モータ等によって開度調節されるスロットルバルブ１５とスロットル開度を検出するスロットル開度センサ１６とが設けられている。
【００２１】
更に、スロットルバルブ１５の下流側には、サージタンク１７が設けられ、このサージタンク１７には、吸気管圧力を検出する吸気管圧力センサ１８が設けられている。また、サージタンク１７には、エンジン１１の各気筒に空気を導入する吸気マニホールド１９が設けられ、各気筒の吸気マニホールド１９の吸気ポート近傍に、それぞれ燃料を噴射する燃料噴射弁２０が取り付けられている。エンジン運転中は、燃料タンク２１内の燃料が燃料ポンプ２２によりデリバリパイプ２３に送られ、各気筒の噴射タイミング毎に各気筒の燃料噴射弁２０から燃料が噴射される。デリバリパイプ２３には、燃料圧力（燃圧）を検出する燃圧センサ２４が取り付けられている。
【００２２】
また、エンジン１１には、吸気バルブ２５と排気バルブ２６の開閉タイミングをそれぞれ可変する可変バルブタイミング機構２７，２８が設けられている。更に、エンジン１１には、吸気カム軸２９と排気カム軸３０の回転に同期してカム角信号を出力する吸気カム角センサ３１と排気カム角センサ３２が設けられ、エンジン１１のクランク軸の回転に同期して所定クランク角毎（例えば３０℃Ａ毎）にクランク角信号のパルスを出力するクランク角センサ３３が設けられている。
【００２３】
一方、エンジン１１の各気筒の排気マニホールド３５が集合する排気集合部３６には、排出ガスの空燃比を検出する空燃比センサ３７が設置され、この空燃比センサ３７の下流側に排出ガス中のＣＯ，ＨＣ，ＮＯｘ等を浄化する三元触媒等の触媒３８が設けられている。
【００２４】
上記空燃比センサ３７等の各種センサの出力は、エンジン制御回路（以下「ＥＣＵ」と表記する）４０に入力される。このＥＣＵ４０は、マイクロコンピュータを主体として構成され、内蔵されたＲＯＭ（記憶媒体）に記憶された各種のエンジン制御プログラムを実行することで、エンジン運転状態に応じて各気筒の燃料噴射弁２０の燃料噴射量や点火時期を制御する。
【００２５】
本実施例では、ＥＣＵ４０は、後述する図６の気筒別空燃比制御ルーチンを実行することで、気筒別空燃比制御実行条件が成立しているときに、後述する気筒別空燃比推定モデルを用いて空燃比センサ３７の検出値（排気集合部３６を流れる排出ガスの実空燃比）に基づいて各気筒の空燃比（気筒別空燃比）を推定し、全気筒の推定空燃比の平均値を算出して、その平均値を基準空燃比（全気筒の目標空燃比）に設定すると共に、各気筒の推定空燃比（気筒別推定空燃比）と基準空燃比との偏差を各気筒毎に算出して、その偏差が小さくなるように各気筒の燃料噴射量に対する燃料補正係数（燃料補正量）を算出し、その算出結果に基づいて各気筒の燃料噴射量を補正することで、各気筒に供給する混合気の空燃比を各気筒毎に補正して気筒間の空燃比ばらつきを少なくするように制御する（以下、この制御を気筒別空燃比制御という）。更に、この気筒別空燃比制御中に所定の空燃比検出タイミング学習条件が成立したときに、後述するようにして各気筒の空燃比検出タイミング（空燃比センサ３７の出力のサンプルタイミング）の適正値又は最適値からのずれを学習し、この学習値に基づいて気筒別空燃比制御中の空燃比検出タイミングのずれを補正する。
【００２６】
ここで、空燃比センサ３７の検出値（排気集合部３６を流れる排出ガスの実空燃比）に基づいて各気筒の空燃比を推定するモデル（以下「気筒別空燃比推定モデル」という）の具体例を説明する。
【００２７】
排気集合部３６におけるガス交換に着目して、空燃比センサ３７の検出値を、排気集合部３６における各気筒の推定空燃比の履歴と空燃比センサ３７の検出値の履歴とにそれぞれ所定の重みを乗じて加算したものとしてモデル化し、該モデルを用いて各気筒の空燃比を推定するようにしている。この際、オブザーバとしてはカルマンフィルタを用いる。
【００２８】
より具体的には、排気集合部３６におけるガス交換のモデルを次の（１）式にて近似する。
ｙ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) を全て満したときに気筒別空燃比制御の実行条件が成立して気筒別空燃比制御実行フラグがＯＮにセットされ、いずれか１つでも満たさない条件があれば、実行条件が不成立となり、気筒別空燃比制御実行フラグがＯＦＦにリセットされる。
【００５２】
この後、ステップ１０２に進み、気筒別空燃比制御実行フラグがＯＮ（気筒別空燃比制御の実行条件が成立）か否かを判定し、その結果、気筒別空燃比制御実行フラグがＯＦＦ（気筒別空燃比制御の実行条件が不成立）と判定されれば、以降の処理を行うことなく、本ルーチンを終了する。
【００５３】
一方、気筒別空燃比制御実行フラグがＯＮ（気筒別空燃比制御の実行条件が成立）の場合は、ステップ１０３に進み、後述する図８の空燃比検出タイミング算出ルーチンを実行して、空燃比検出タイミングを算出する。この後、ステップ１０４に進み、後述する図９の空燃比検出タイミング学習条件判定ルーチンを実行して、気筒別空燃比制御が発散しているか否かで空燃比検出タイミング学習条件が成立しているか否かを判定して、その判定結果に応じて学習実行フラグをＯＮ／ＯＦＦする。
【００５４】
この後、ステップ１０５に進み、学習実行フラグがＯＮ（空燃比検出タイミング学習条件が成立）か否かを判定し、その結果、学習実行フラグがＯＦＦ（空燃比検出タイミング学習条件が不成立）と判定されれば、空燃比検出タイミングの学習処理を行わずに、ステップ１０６に進み、現在のクランク角が上記ステップ１０３で設定した空燃比検出タイミングであるか否かを判定し、空燃比検出タイミングでなければ、以降の処理を行うことなく、本ルーチンを終了する。
【００５５】
これに対して、現在のクランク角が上記ステップ１０３で算出した空燃比検出タイミングであれば、ステップ１０７に進み、空燃比センサ３７の出力（空燃比検出値）を読み込む。この後、ステップ１０８に進み、前記気筒別空燃比推定モデルを用いて今回の空燃比推定対象となる気筒の空燃比を空燃比センサ３７の検出値に基づいて推定する。このステップ１０８の処理が特許請求の範囲でいう気筒別空燃比推定手段としての役割を果たす。      
【００５６】
この後、ステップ１０９に進み、全気筒の推定空燃比の平均値を算出して、その平均値を基準空燃比（全気筒の目標空燃比）に設定した後、ステップ１１０に進み、各気筒の推定空燃比と基準空燃比との偏差を算出して、その偏差が小さくなるように各気筒の燃料補正係数を算出する。この後、ステップ１１１に進み、各気筒の燃料補正係数に基づいて各気筒の燃料噴射量を補正することで、各気筒に供給する混合気の空燃比を各気筒毎に補正して気筒間の空燃比ばらつきを少なくするように制御する。これらステップ１０９〜１１１の処理が特許請求の範囲でいう気筒別空燃比制御手段としての役割を果たす。
【００５７】
一方、前記ステップ１０５で、学習実行フラグがＯＮ（空燃比検出タイミング学習条件が成立）と判定されれば、ステップ１１２に進み、後述する図７の空燃比検出タイミング学習ルーチンを実行して、空燃比検出タイミングの適正値と基準空燃比検出タイミングとのずれを次のようにして学習する。
【００５８】
［空燃比検出タイミング学習ルーチン］
図７の空燃比検出タイミング学習ルーチンは、上記図６の気筒別空燃比制御ルーチンのステップ１１２で起動されるサブルーチンであり、特許請求の範囲でいう学習手段としての役割を果たす。本ルーチンが起動されると、まずステップ１２１で、空燃比検出タイミングの切り換え時期（図３のタイミングＡ、Ｃ、Ｅ）であるか否かを判定し、切り換え時期であれば、ステップ１２２に進み、空燃比検出タイミングＴを６０℃Ａ補正（進角又は遅角）することで、空燃比検出タイミングＴを図４に示す補正クランク位置ＣＣＲＮＫ＝−２又は０又は＋２のいずれかにセットする。空燃比検出タイミングの切り換え時期でなければ、空燃比検出タイミングＴを補正しない。
【００５９】
この後、ステップ１２３に進み、気筒別空燃比制御（各気筒の空燃比フィードバック制御）を禁止する。これにより、学習モードの期間中に、気筒別空燃比制御による各気筒の空燃比の変動を無くすことができ、気筒別空燃比制御の影響を受けない安定した条件下で空燃比検出タイミングの学習を行うことができる。
【００６０】
この後、ステップ１２４に進み、各気筒の燃料補正係数を強制的に変化させる。この際、各気筒の燃料補正係数の強制的な変化によるエミッション増加の問題を回避するために、全気筒の燃料補正係数の変化量の総和がほぼ０になるように設定することが好ましい。この後、ステップ１２５に進み、現在のクランク角が上記空燃比検出タイミングであるか否かを判定し、空燃比検出タイミングでなければ、以降の処理を行うことなく、本ルーチンを終了する。
【００６１】
これに対して、現在のクランク角が上記空燃比検出タイミングであれば、ステップ１２６に進み、空燃比センサ３７の出力（空燃比検出値）を読み込む。この後、ステップ１２７に進み、前記気筒別空燃比推定モデルを用いて今回の空燃比推定対象となる気筒の空燃比を空燃比センサ３７の検出値に基づいて推定する。
【００６２】
そして、次のステップ１２８で、図４の［数１］〜［数３］の各式を用いて、各気筒の推定空燃比の変化量と各気筒の燃料補正係数の変化量との相互相関値を演算する。この後、ステップ１２９に進み、空燃比検出タイミングの補正回数が３回になったか否かを判定し、まだ３回になっていなければ、ステップ１２１に戻り、上述した処理を繰り返す。
【００６３】
これにより、空燃比検出タイミングの６０℃Ａ補正して相互相関値を演算するという処理を３回繰り返した後、ステップ１３０に進み、各空燃比検出タイミングでの相互相関値を比較して、相互相関値が最大となる空燃比検出タイミングを適正な空燃比検出タイミングとし、この適正な空燃比検出タイミングと基準空燃比検出タイミングとのずれ（補正クランク位置ＣＣＲＮＫ）を学習する。
【００６４】
この際、エンジン運転状態に応じて空燃比検出タイミングの適正値が変化するという事情を考慮して、図１０に示すように、エンジン運転領域毎に空燃比検出タイミングのずれ（補正クランク位置ＣＣＲＮＫ）を学習して、エンジン運転領域（例えばエンジン回転速度とエンジン負荷等）をパラメータとする空燃比検出タイミングの学習マップを作成するようにしても良い。この場合、学習マップの全ての領域に学習値が格納されるまでは、気筒別空燃比制御中に未学習の領域に対応する一部のエンジン運転領域で学習値を使用できなくなるが、この場合は、未学習の領域に最も近い学習済みの領域に格納された学習値を代用するようにすると良い。
【００６５】
尚、本発明は、空燃比検出タイミングの学習マップを作成せずに、全運転領域に共通して使用する空燃比検出タイミングのずれを学習するようにしても良い。
上記ステップ１３０で、空燃比検出タイミングのずれを学習した後は、ステップ１３１に進み、気筒別空燃比制御（各気筒の空燃比フィードバック制御）を許可して本ルーチンを終了する。
【００６６】
［空燃比検出タイミング算出ルーチン］
図８の空燃比検出タイミング算出ルーチンは、上記図６の気筒別空燃比制御ルーチンのステップ１０３で起動されるサブルーチンである。本ルーチンが起動されると、まずステップ２０１で、現在のエンジン回転速度とエンジン負荷率に基づいて基準空燃比検出タイミングをマップ等により算出する。この基準空燃比検出タイミングは、空燃比センサ３７の応答性中央品における適正な空燃比検出タイミング（空燃比センサ３７の応答性中央品の出力が＃１気筒の排出ガスに反応するクランク位置）であり、例えば、＃１気筒についての基準空燃比検出タイミングがマップ化されている。
【００６７】
この後、ステップ２０２に進み、排気ＶＶＴ（排気可変バルブタイミング）のバルブ開タイミングに応じてマップ等により設定した補正係数により基準空燃比検出タイミングを補正する。この後、ステップ２０３に進み、上記ステップ２０２で補正した基準空燃比検出タイミングを基準にして次気筒の空燃比検出タイミングを燃焼間隔毎（１８０℃Ａ毎）に設定する。そして、次のステップ２０４に進み、図１０の学習マップから、現在のエンジン運転領域（例えばエンジン回転速度とエンジン負荷等）に対応する学習領域の学習値を読み込んで、上記ステップ２０３で設定した各気筒の空燃比検出タイミングを学習値で補正して最終的な空燃比検出タイミングを決定する。このステップ２０４の処理が特許請求の範囲でいう検出タイミング補正手段としての役割を果たす。
【００６８】
尚、本ルーチンでは、ステップ２０１で、エンジン回転速度とエンジン負荷率に基づいて基準空燃比検出タイミングをマップ等により算出するようにしたが、エンジン回転速度、エンジン負荷率、吸気バルブタイミング、排気バルブタイミングのいずれか１つ又は２つ以上に基づいて基準空燃比検出タイミングをマップ等により算出するようにしても良い。このようにすれば、エンジン回転速度、エンジン負荷率、吸気バルブタイミング、排気バルブタイミングによって排気系の応答遅れが変化するのに対応して基準空燃比検出タイミングを適正に変化させることができるので、この基準空燃比検出タイミングを空燃比検出タイミングの学習値に基づいて補正して最終的な空燃比検出タイミングを決定すれば、より適正な空燃比検出タイミングを求めることができる。
【００６９】
［空燃比検出タイミング学習条件判定ルーチン］
図９の空燃比検出タイミング学習条件判定ルーチンは、上記図６の気筒別空燃比制御ルーチンのステップ１０４で起動されるサブルーチンである。本ルーチンが起動されると、まずステップ３０１で、気筒別空燃比制御開始から所定時間経過後、且つ、今回の運転中に空燃比検出タイミングの学習を１回も実施していないか否かを判定し、「Ｙｅｓ」と判定されれば、ステップ３０３に進み、空燃比検出タイミング学習条件成立と判定して、学習実行フラグをＯＮにセットする。
【００７０】
また、上記ステップ３０１で、「Ｎｏ」と判定されれば、ステップ３０２に進み、気筒別空燃比制御が発散しているか否かを判定する。ここで、気筒別空燃比制御の発散の検出方法は、例えば、全気筒の燃料補正係数（燃料補正量）の最大値と最小値との差が所定値以上で、且つ、全気筒の推定空燃比の最大値と最小値との差が所定値以上である状態が連続的に所定回数以上発生した場合に、気筒別空燃比制御の発散と判定する。このステップ３０２で、気筒別空燃比制御の発散と判定されれば、ステップ３０３に進み、空燃比検出タイミング学習条件成立と判定して、学習実行フラグをＯＮにセットする。
【００７１】
要するに、上記２つのステップ３０１、３０２のいずれか一方で「Ｙｅｓ」と判定されれば、ステップ３０３に進み、空燃比検出タイミング学習条件成立と判定するが、上記２つのステップ３０１、３０２で、共に「Ｎｏ」と判定されれば、空燃比検出タイミングの学習値を更新する必要がないと判断して、空燃比検出タイミング学習条件が不成立となり、以降の処理を行うことなく、本ルーチンを終了する。
【００７２】
これに対して、ステップ３０３で、空燃比検出タイミング学習条件成立と判定して、学習実行フラグをＯＮにセットした場合は、ステップ３０４に進み、空燃比検出タイミング学習中であるか否かを判定し、空燃比検出タイミング学習中でなければ、そのまま本ルーチンを終了するが、空燃比検出タイミング学習中であれば、ステップ３０５に進み、スロットル開度変化量が所定値以上、又は、エンジン回転速度変化量が所定値以上、又は、エンジン負荷変化量が所定値以上、又は、吸気・排気バルブタイミングの変化量が所定値以上のいずれかに該当するか否かを判定し、いずれにも該当しなければ、各気筒の空燃比が安定した定常状態で、空燃比検出タイミングの学習精度を確保できると判断して、そのまま本ルーチンを終了する。
【００７３】
これに対して、スロットル開度、エンジン回転速度、エンジン負荷、吸気・排気バルブタイミングのいずれかの変化量が所定値以上となる場合は、その影響で各気筒の空燃比がずれて、空燃比検出タイミングの学習精度が低下することは避けられないと判断して、ステップ３０６に進み、空燃比検出タイミング学習条件が不成立であると判定して、学習実行フラグをＯＦＦにリセットし、空燃比検出タイミングの学習を禁止（中止）する。このようにすれば、燃料補正係数の強制的な変化以外の要因で各気筒の空燃比がずれるような過渡状態では、空燃比検出タイミングの学習を禁止（中止）することができるので、各気筒の空燃比が安定した定常状態のときのみ空燃比検出タイミングの学習を行うというエンジン運転状態に応じた選択的な学習制御が可能となる。
【００７４】
以上説明した本実施例１によれば、学習モード期間中に各気筒の燃料補正係数を強制的に複数回変化させ、その変化毎に異なる空燃比検出タイミングで空燃比センサ３７の検出値に基づいて演算した各気筒の推定空燃比と各気筒の燃料補正係数（燃料補正量）との相互相関を評価し、その評価結果に基づいて空燃比検出タイミングの適正値からのずれを学習するようにしたので、空燃比検出タイミングの学習を精度良く行うことができる。しかも、本実施例１では、空燃比検出タイミングの学習処理を複数回に分けて実施することができるため、学習モード期間中のＥＣＵ４０のＣＰＵ演算負荷を大幅に増加させることなく、比較的安価なＣＰＵでも空燃比検出タイミングの学習処理を実施することができる利点がある。
【実施例２】
【００７５】
上記実施例１では、学習モード期間中に各気筒の燃料補正係数を強制的に複数回変化させ、その変化毎に異なる空燃比検出タイミングで空燃比センサ３７の検出値に基づいて演算した各気筒の推定空燃比と各気筒の燃料補正係数との相互相関を評価するようにしたが、学習モード期間中に各気筒の燃料補正係数を強制的に１回のみ変化させ、その変化の影響が現れる期間に複数の空燃比検出タイミングを設定して、その空燃比検出タイミング毎に空燃比センサ３７の検出値に基づいて演算した各気筒の推定空燃比と各気筒の燃料噴射量との相互相関を評価し、その評価結果に基づいて空燃比検出タイミングの学習を行うようにしても良い。
【００７６】
以下、これを具体化した本発明の実施例２を図１１に基づいて説明する。図１１の空燃比検出タイミング学習ルーチン以外は、前記実施例１と同じ処理が行われる。
図１１の空燃比検出タイミング学習ルーチンは、前記実施例１と同じく、学習実行フラグがＯＮ（空燃比検出タイミング学習条件が成立）の期間中に実行される。本ルーチンが起動されると、まずステップ４０１で、燃料補正係数を強制的に１回のみ変化させた時の影響が現れるクランク角区間に所定クランク角（例えば６０℃Ａ）ずつ異なる複数の空燃比検出タイミングを設定する。この後、ステップ４０２に進み、気筒別空燃比制御（各気筒の空燃比フィードバック制御）を禁止した後、ステップ４０３に進み、各気筒の燃料補正係数を強制的に変化させる。この際、各気筒の燃料補正係数の強制的な変化によるエミッション増加の問題を回避するために、全気筒の燃料補正係数の変化量の総和がほぼ０になるように設定することが好ましい。
【００７７】
この後、ステップ４０４ａ、４０４ｂ、４０４ｃ、…に進む。このステップ４０４ａ、４０４ｂ、４０４ｃ、…の数は、ステップ４０１で設定した空燃比検出タイミングの数と同数となっている。各ステップ４０４ａ、４０４ｂ、４０４ｃ、…では、それぞれステップ４０１で設定した異なる空燃比検出タイミングを判定する。各ステップ４０４ａ、４０４ｂ、４０４ｃ、…で、現在のクランク角が上記ステップ４０１で設定した異なる空燃比検出タイミングであるか否かを判定し、空燃比検出タイミングでなければ、以降の処理を行うことなく、本ルーチンを終了する。
【００７８】
これに対して、ステップ４０４ａ、４０４ｂ、４０４ｃ、…のいずれかで、現在のクランク角が上記ステップ４０１で設定した空燃比検出タイミングであれば、ステップ４０５（ａ又はｂ又はｃ…）に進み、空燃比センサ３７の出力（空燃比検出値）を読み込む。この後、ステップ４０６（ａ又はｂ又はｃ…）に進み、前記気筒別空燃比推定モデルを用いて今回の空燃比推定対象となる気筒の空燃比を空燃比センサ３７の検出値に基づいて推定する。
【００７９】
そして、次のステップ４０７（ａ又はｂ又はｃ…）で、図４の［数１］〜［数３］の各式を用いて、各気筒の推定空燃比の変化量と各気筒の燃料補正係数の変化量との相互相関値を演算する。
【００８０】
以上のようにして、異なる複数の空燃比検出タイミングで相互相関値を演算した後、ステップ４０８に進み、各空燃比検出タイミングでの相互相関値を比較して、相互相関値が最大となる空燃比検出タイミングを適正な空燃比検出タイミングとし、この適正な空燃比検出タイミングと基準空燃比検出タイミングとのずれ（補正クランク位置ＣＣＲＮＫ）を学習する。この後、ステップ４０９に進み、気筒別空燃比制御（各気筒の空燃比フィードバック制御）を許可して本ルーチンを終了する。
【００８１】
以上説明した本実施例２によれば、学習モード期間中に各気筒の燃料補正係数を強制的に１回のみ変化させ、その変化の影響が現れる期間に複数の空燃比検出タイミングを設定して、その空燃比検出タイミング毎に空燃比センサ３７の検出値に基づいて演算した各気筒の推定空燃比と各気筒の燃料噴射量との相互相関を評価し、その評価結果に基づいて空燃比検出タイミングの学習を行うようにしたので、同一の運転条件下で複数の空燃比検出タイミングのずれ度合い（適正度合い）を相互相関によって評価することが可能となり、空燃比検出タイミングの学習精度を向上させることができる。しかも、燃料補正係数の１回の変化で複数の空燃比検出タイミングのずれ度合い（適正度合い）を評価できるため、学習時間を短縮できる利点もある。
【００８２】
本発明は、吸気ポート噴射エンジンに限定されず、筒内噴射エンジンにも適用して実施できる等、要旨を逸脱しない範囲で種々変更して実施できる。
【図面の簡単な説明】
【００８３】
【図１】本発明の実施例１におけるエンジン制御システム全体の概略構成図である。
【図２】空燃比検出タイミングが１５０℃Ａずれている場合の気筒別空燃比制御の挙動を示すタイムチャートである。
【図３】実施例１の空燃比検出タイミングの学習方法を説明するタイムチャートである。
【図４】実施例１の相互相関値の演算方法を説明する図である。
【図５】実施例１の補正クランク位置ＣＣＲＮＫと相互相関値との関係を説明する図である。
【図６】実施例１の気筒別空燃比制御ルーチンの処理の流れを示すフローチャートである。
【図７】実施例１の空燃比検出タイミング学習ルーチンの処理の流れを示すフローチャートである。
【図８】実施例１の空燃比検出タイミング算出ルーチンの処理の流れを示すフローチャートである。
【図９】実施例１の空燃比検出タイミング学習条件判定ルーチンの処理の流れを示すフローチャートである。
【図１０】実施例１の学習マップの一例を概念的に示す図である。
【図１１】実施例２の空燃比検出タイミング学習ルーチンの処理の流れを示すフローチャートである。
【符号の説明】
【００８４】
１１…エンジン（内燃機関）、１２…吸気管、１４…エアフローメータ、１５…スロットルバルブ、１９…吸気マニホールド、２０…燃料噴射弁、２２…燃料ポンプ、２４…燃圧センサ、２７，２８…可変バルブタイミング機構、３５…排気マニホールド、３６…排気集合部、３７…空燃比センサ、３８…触媒、４０…ＥＣＵ（気筒別空燃比推定手段，気筒別空燃比制御手段，学習手段，検出タイミング補正手段）
【図１】
2006300020.tif 000003
【図２】
2006300020.tif 000004
【図３】
2006300020.tif 000005
【図４】
2006300020.tif 000006
【図５】
2006300020.tif 000007
【図６】
2006300020.tif 000008
【図７】
2006300020.tif 000009
【図８】
2006300020.tif 000010
【図９】
2006300020.tif 000011
【図１０】
2006300020.tif 000012
【図１１】
2006300020.tif 000013