(57)【要約】【課題】内燃機関の排気集合部に設置した１つの空燃比センサの検出値に基づいて各気筒の空燃比を精度良く推定できるように、空燃比検出タイミング（空燃比センサ出力のサンプルタイミング）を適正に補正する。【解決手段】空燃比がストイキ（理論空燃比）の時には、空燃比検出タイミングの適正値からのずれが０となり、空燃比がリーンの時には空燃比検出タイミングの適正値が遅くなる方向にずれ（空燃比センサの応答性が遅くなり）、リッチの時には空燃比検出タイミングの適正値が早くなる方向にずれる（空燃比センサの応答性が早くなる）。この特性を考慮して、目標空燃比がリーンの時に空燃比検出タイミングをストイキの時よりも遅くするように補正し、目標空燃比がリッチの時に空燃比検出タイミングをストイキの時よりも早めるように補正する。【選択図】図３
2007211609.tif 000002
【特許請求の範囲】
【請求項１】
内燃機関の各気筒の排出ガスが集合して流れる排気集合部に、該排出ガスの空燃比を検出する空燃比センサを設置し、各気筒の空燃比検出タイミング毎に前記空燃比センサの検出値に基づいて各気筒の空燃比を推定する気筒別空燃比推定手段と、各気筒の推定空燃比に基づいて各気筒の空燃比を目標空燃比に一致させるように制御（以下「気筒別空燃比制御」という）する気筒別空燃比制御手段とを備えた内燃機関の気筒別空燃比制御装置において、
前記空燃比検出タイミングを目標空燃比又は検出空燃比に応じて補正する空燃比検出タイミング補正手段を備え、
前記空燃比検出タイミング補正手段は、目標空燃比又は検出空燃比がリーンの時に前記空燃比検出タイミングをストイキの時よりも遅くするように補正し、目標空燃比又は検出空燃比がリッチの時に前記空燃比検出タイミングをストイキの時よりも早めるように補正することを特徴とする内燃機関の気筒別空燃比制御装置。
【請求項２】
前記空燃比検出タイミング補正手段は、前記目標空燃比又は検出空燃比に応じて設定した空燃比検出タイミングの補正量を前記空燃比センサの応答性に応じて補正することを特徴とする請求項１に記載の内燃機関の気筒別空燃比制御装置。
【請求項３】
内燃機関の運転中に前記空燃比検出タイミングの適正値からのずれを学習してその学習値を書き換え可能な不揮発性メモリに更新記憶する学習手段を備え、
前記空燃比検出タイミング補正手段は、前記学習手段の学習値に基づいて前記空燃比検出タイミングを補正することを特徴とする請求項１に記載の内燃機関の気筒別空燃比制御装置。
【請求項４】
前記学習手段は、前記空燃比検出タイミングの適正値からのずれを空燃比毎に学習することを特徴とする請求項３に記載の内燃機関の気筒別空燃比制御装置。
【請求項５】
前記学習手段は、ストイキを含む所定空燃比範囲よりもリッチ側の空燃比領域とリーン側の空燃比領域では、それぞれ前記空燃比検出タイミングの適正値からのずれを１つずつ学習することを特徴とする請求項３に記載の内燃機関の気筒別空燃比制御装置。
【請求項６】
前記空燃比検出タイミング補正手段は、目標空燃比又は検出空燃比が前記ストイキを含む所定空燃比範囲内の時に、前記学習手段で学習された前記リッチ側の空燃比領域における学習値と前記リーン側の空燃比領域における学習値との補間補正により前記空燃比検出タイミングの補正量を設定することを特徴とする請求項５に記載の内燃機関の気筒別空燃比制御装置。
【請求項７】
前記学習手段は、前記空燃比検出タイミングの適正値からのずれの学習中に空燃比を変化させる制御を禁止する手段を備えていることを特徴とする請求項３乃至６のいずれかに記載の内燃機関の気筒別空燃比制御装置。
【請求項８】
前記学習手段は、前記空燃比センサの応答性の経時変化に応じて学習値を更新するために所定間隔で学習を実行することを特徴とする請求項３乃至７のいずれかに記載の内燃機関の気筒別空燃比制御装置。
【請求項９】
前記学習手段は、空燃比をリーン側又はリッチ側に変化させて学習を実行する時期を排出ガス浄化用の触媒の状態に基づいて判断することを特徴とする請求項３乃至８のいずれかに記載の内燃機関の気筒別空燃比制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、内燃機関の排気集合部に設置した１つの空燃比センサの検出値に基づいて各気筒の空燃比を推定する機能を備えた内燃機関の気筒別空燃比制御装置に関する発明である。
【背景技術】
【０００２】
近年、内燃機関の気筒間の空燃比ばらつきを少なくして空燃比制御精度を向上させるために、特許文献１（特許第３２１７６８０号公報）に記載されているように、内燃機関の排気系の挙動を記述するモデルを設定して、排気集合部に設置した１つの空燃比センサの検出値（排気集合部を流れる排出ガスの空燃比）を該モデルに入力し、その内部状態を観測するオブザーバによって各気筒の空燃比を推定すると共に、各気筒の推定空燃比と目標値との偏差に応じて各気筒の燃料噴射量を補正して、各気筒の空燃比を目標値に一致させるようにしたものがある。更に、この特許文献１では、各気筒から排出される排出ガスが空燃比センサ付近に到達してその空燃比が検出されるまでの遅れ（以下「排気系の応答遅れ」という）がエンジン運転状態によって変化することを考慮して、エンジン設計・製造過程で、排気系の応答遅れとエンジン運転状態との関係を規定するマップを作成しておき、エンジン運転中に空燃比センサ出力のサンプルタイミング（各気筒の空燃比検出タイミング）をエンジン運転状態に応じて上記マップにより変化させるようにしている。
【特許文献１】特許第３２１７６８０号公報（段落［０００８］、［００１３］、［０１６２］〜［０１７０］等参照）
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ところで、上記特許文献１には、空燃比検出タイミングをエンジン運転状態に応じて変化させる際に、エンジン回転速度、吸気圧、バルブタイミングの他に、空燃比も考慮して、空燃比検出タイミングを変化させる技術が記載されている。この特許文献１の段落［０１７０］には、空燃比センサの応答性（反応時間）と空燃比との関係に関して、「空燃比センサ（ＬＡＦセンサ）の反応時間は検出しようとする空燃比がリーンであると、リッチのときに比し、短くなることから、検出すべき空燃比がリーンのときは、より早期のクランク角度で空燃比を検出する（つまり空燃比検出タイミングを早める）ことが望ましい。」と記載されているが、最近の本発明者の研究結果によれば、図３に示すように、空燃比による空燃比検出タイミングのずれの変化特性が上記特許文献１の記載と全く反対になることが判明した。従って、上記特許文献１のように、空燃比がリーンの時に空燃比検出タイミングを早めると、空燃比検出タイミングを誤った方向に変化させてしまう。これにより、各気筒の空燃比検出タイミングが適正値からずれると、各気筒の空燃比の推定精度が悪化して、気筒別空燃比制御の状態が悪化することになる。
【０００４】
本発明はこのような事情を考慮してなされたものであり、従ってその目的は、内燃機関の排気集合部に設置した１つの空燃比センサの検出値に基づいて各気筒の空燃比を推定する機能を備えたものにおいて、各気筒の空燃比検出タイミングを空燃比に応じて適正な方向に補正することができて、各気筒の空燃比推定精度を向上させることができる内燃機関の気筒別空燃比制御装置を提供することにある。
【課題を解決するための手段】
【０００５】
上記目的を達成するために、請求項１に係る発明は、内燃機関の各気筒の排出ガスが集合して流れる排気集合部に、該排出ガスの空燃比を検出する空燃比センサを設置し、各気筒の空燃比検出タイミング毎に前記空燃比センサの検出値に基づいて各気筒の空燃比を推定する気筒別空燃比推定手段と、各気筒の推定空燃比に基づいて各気筒の空燃比を目標空燃比に一致させるように制御（以下「気筒別空燃比制御」という）する気筒別空燃比制御手段とを備えた内燃機関の気筒別空燃比制御装置において、前記空燃比検出タイミングを目標空燃比又は検出空燃比に応じて補正する空燃比検出タイミング補正手段を備え、前記空燃比検出タイミング補正手段は、目標空燃比又は検出空燃比がリーンの時に前記空燃比検出タイミングをストイキの時よりも遅くするように補正し、目標空燃比又は検出空燃比がリッチの時に前記空燃比検出タイミングをストイキの時よりも早めるように補正することを特徴とするものである。このようにすれば、各気筒の空燃比検出タイミングを空燃比（目標空燃比又は検出空燃比）に応じて適正な方向に補正することができて、各気筒の空燃比推定精度を向上させることができる。
【０００６】
この場合、例えば、適合工程で空燃比と空燃比検出タイミングの適正値からのずれ（補正量）との関係を測定して、その測定結果に基づいて空燃比をパラメータとする補正量のテーブルを作成して内燃機関制御コンピュータの不揮発性メモリに記憶させておき、内燃機関の運転中に当該テーブルを参照して目標空燃比又は検出空燃比に応じた補正量を設定するようにしても良い。これにより、空燃比検出タイミングの補正量を空燃比（目標空燃比又は検出空燃比）に応じて適正に設定できる。
【０００７】
また、請求項２のように、目標空燃比又は検出空燃比に応じて設定した空燃比検出タイミングの補正量を空燃比センサの応答性に応じて補正するようにしても良い。つまり、空燃比検出タイミングの適正値からのずれ（補正量）は、空燃比センサの応答性に応じて変化し、空燃比センサの応答性は経時変化や製造ばらつきによって変化するため、テーブル等で空燃比（目標空燃比又は検出空燃比）に応じて設定した空燃比検出タイミングの補正量を空燃比センサの応答性に応じて補正すれば、空燃比に応じて設定した空燃比検出タイミングの補正量を空燃比センサの応答性の経時変化や製造ばらつきに応じて適正に補正することができ、空燃比センサの応答性の経時変化や製造ばらつきによる空燃比検出タイミングの補正精度低下を防止することができる。
【０００８】
また、請求項３のように、内燃機関の運転中に空燃比検出タイミングの適正値からのずれ（補正量）を学習してその学習値を書き換え可能な不揮発性メモリに更新記憶する学習手段を設け、この学習手段の学習値に基づいて空燃比検出タイミングを補正するようにしても良い。このようにすれば、内燃機関の運転中に空燃比検出タイミングの適正値からのずれ（補正量）を空燃比によるずれだけでなく空燃比センサの応答性の経時変化や製造ばらつきによるずれも含めて学習することができるため、空燃比センサの応答性の経時変化や製造ばらつきの影響を無視できないシステムでも、空燃比検出タイミングの補正量を空燃比によるずれだけでなく空燃比センサの応答性の経時変化や製造ばらつきによるずれも含めて適正に設定することができる。
【０００９】
この場合、空燃比検出タイミングの適正値からのずれ（補正量）は、空燃比に応じて変化することを考慮して、請求項４のように、空燃比検出タイミングの適正値からのずれ（補正量）を空燃比毎に学習するようにしても良い。これにより、空燃比検出タイミングの補正量を精度良く学習することができる。
【００１０】
本発明者は、空燃比と空燃比検出タイミングの適正値からのずれ（補正量）との関係を実験により考察した結果、図３に示すように、空燃比検出タイミングの適正値からのずれは空燃比に応じてＺ字型に変化することが判明した。すなわち、空燃比がストイキ（理論空燃比）の時には、空燃比検出タイミングの適正値からのずれが０となり、空燃比がストイキに比較的近い領域では、リーンになるほど空燃比検出タイミングの適正値が遅くなる方向にずれ（空燃比センサの応答性が遅くなり）、リッチになるほど空燃比検出タイミングの適正値が早くなる方向にずれる（空燃比センサの応答性が早くなる）。しかし、空燃比がストイキからある程度離れた領域（図３のλrichよりもリッチ側の空燃比領域とλleanよりもリーン側の空燃比領域）では、空燃比がそれ以上リッチ／リーン側に変化しても、空燃比検出タイミングの適正値からのずれ量はほとんど変化しない。
【００１１】
このような空燃比による空燃比検出タイミングのずれのＺ字型の変化特性を考慮して、請求項５のように、ストイキを含む所定空燃比範囲（図３のλrich〜λleanの範囲）よりもリッチ側の空燃比領域とリーン側の空燃比領域（つまり空燃比が変化しても空燃比センサの応答性がほとんど変化しない空燃比領域）では、それぞれ空燃比検出タイミングの適正値からのずれ（補正量）を１つずつ学習するようにしても良い。このようにすれば、全ての空燃比領域で補正量を空燃比毎に細かく学習する場合と比較して、学習処理が単純な処理となり、学習処理の演算負荷を軽減することができる利点がある。
【００１２】
この場合、空燃比に応じて空燃比検出タイミングの適正値からのずれ（補正量）が変化する所定空燃比範囲内（図３のλrich〜λleanの範囲内）については、空燃比検出タイミングの補正量を空燃比毎に細かく学習するようにしても良いが、請求項６のように、目標空燃比又は検出空燃比がストイキを含む所定空燃比範囲内の時に、学習手段で学習されたリッチ側の空燃比領域における学習値とリーン側の空燃比領域における学習値との補間補正により空燃比検出タイミングの補正量を設定するようにしても良い。このようにすれば、ストイキを含む所定空燃比範囲内では、学習しなくても、その両側の空燃比領域で学習した２つの学習値の補間補正により補正量を設定することができるため、全ての空燃比領域で補正量を空燃比毎に細かく学習する場合と比較して、学習処理が単純な処理となり、学習処理の演算負荷を軽減することができる利点がある。ここで、補間補正は、ストイキの時に補正量が０となる直線で近似する線形補間（直線補間）を用いても良いし、∫字状の曲線で近似する曲線補間（スプライン補間）を用いても良い。
【００１３】
また、請求項７のように、空燃比検出タイミングのずれの学習中に空燃比を変化させる制御を禁止するようにすると良い。これにより、空燃比を一定に維持した状態で空燃比検出タイミングのずれ（補正量）を精度良く学習することができる。
【００１４】
尚、図３に示すように、空燃比がストイキからある程度離れた領域では、空燃比がそれ以上リッチ／リーン側に変化しても、空燃比検出タイミングのずれはほとんど変化しないため、この空燃比領域で空燃比検出タイミングのずれを学習する場合は、この空燃比領域内での空燃比の変化を許容し、この空燃比領域外への空燃比の変化のみを禁止するようにしても良い。
【００１５】
また、請求項８のように、空燃比センサの応答性の経時変化に応じて学習値を更新するために所定間隔で学習を実行するようにすると良い。例えば、車載バッテリの取替えで学習値がクリアされた後の最初の走行中に学習し、その後、所定期間経過毎、或は、所定積算走行距離毎、或は、所定走行回数毎、或は、所定給油回数毎に学習を実行するようにすると良い。これにより、空燃比センサの応答性の経時変化に応じて学習値を随時更新することができる。
【００１６】
また、内燃機関をリーン空燃比又はリッチ空燃比で運転する時に学習実行条件が成立して空燃比検出タイミングのずれを学習するようにしても良いし、学習時に空燃比を強制的にリーン側又はリッチ側に変化させて空燃比検出タイミングのずれを学習するようにしても良い。この場合、排出ガス浄化用の触媒の酸素ストレージ量（酸素吸蔵量）が飽和レベル近くまで増加している状態では、触媒のＮＯｘ等のリーン成分浄化能力が低下しているため、この状態で空燃比を強制的にリーン側に変化させて学習すると、触媒で浄化しきれないＮＯｘ等のリーン成分の排出量が増加してしまう。また、触媒の酸素ストレージ量が少なくなっている状態では、触媒のＨＣ，ＣＯ等のリッチ成分浄化能力が低下しているため、この状態で空燃比を強制的にリッチ側に変化させて学習すると、触媒で浄化しきれないＨＣ，ＣＯ等のリッチ成分の排出量が増加してしまう。
【００１７】
この対策として、請求項９のように、空燃比をリーン側又はリッチ側に変化させて学習を実行する時期を排出ガス浄化用の触媒の状態に基づいて判断するようにすると良い。このようにすれば、例えば、触媒の状態がＨＣ，ＣＯ等のリッチ成分浄化能力が高くなっている時（酸素ストレージ量が多くなっている時）に、空燃比を強制的にリッチ側に変化させて学習することで、リッチ側の空燃比領域でエミッションを悪化させることなく空燃比検出タイミングのずれを学習することができ、また、触媒の状態がＮＯｘ等のリーン成分浄化能力が高くなっている時（酸素ストレージ量が少なくなっている時）に、空燃比を強制的にリーン側に変化させて学習することで、リーン側の空燃比領域でエミッションを悪化させることなく空燃比検出タイミングのずれを学習することができ、学習時のエミッション悪化の問題を解消することができる。
【発明を実施するための最良の形態】
【００１８】
以下、本発明を実施するための最良の形態を具体化した幾つかの実施例を説明する。
【実施例１】
【００１９】
本発明の実施例１を図１乃至図７に基づいて説明する。まず、図１に基づいてエンジン制御システム全体の概略構成を説明する。内燃機関である例えば直列４気筒のエンジン１１の吸気管１２の最上流部には、エアクリーナ１３が設けられ、このエアクリーナ１３の下流側に、吸入空気量を検出するエアフローメータ１４が設けられている。このエアフローメータ１４の下流側には、モータ等によって開度調節されるスロットルバルブ１５とスロットル開度を検出するスロットル開度センサ１６とが設けられている。
【００２０】
更に、スロットルバルブ１５の下流側には、サージタンク１７が設けられ、このサージタンク１７には、吸気管圧力を検出する吸気管圧力センサ１８が設けられている。また、サージタンク１７には、エンジン１１の各気筒に空気を導入する吸気マニホールド１９が設けられ、各気筒の吸気マニホールド１９の吸気ポート近傍に、それぞれ燃料を噴射する燃料噴射弁２０が取り付けられている。エンジン運転中は、燃料タンク２１内の燃料が燃料ポンプ２２によりデリバリパイプ２３に送られ、各気筒の噴射タイミング毎に各気筒の燃料噴射弁２０から燃料が噴射される。デリバリパイプ２３には、燃料圧力（燃圧）を検出する燃圧センサ２４が取り付けられている。
【００２１】
また、エンジン１１には、吸気バルブ２５と排気バルブ２６の開閉タイミングをそれぞれ可変する可変バルブタイミング機構２７，２８が設けられている。更に、エンジン１１には、吸気カム軸２９と排気カム軸３０の回転に同期してカム角信号を出力する吸気カム角センサ３１と排気カム角センサ３２が設けられ、エンジン１１のクランク軸の回転に同期して所定クランク角毎（例えば３０℃Ａ毎）にクランク角信号のパルスを出力するクランク角センサ３３が設けられている。
【００２２】
一方、エンジン１１の各気筒の排気マニホールド３５が集合する排気集合部３６には、排出ガスの空燃比を検出する空燃比センサ３７が設置され、この空燃比センサ３７の下流側に排出ガス中のＣＯ，ＨＣ，ＮＯｘ等を浄化する三元触媒等の触媒３８が設けられている。
【００２３】
上記空燃比センサ３７等の各種センサの出力は、エンジン制御回路（以下「ＥＣＵ」と表記する）４０に入力される。このＥＣＵ４０は、マイクロコンピュータを主体として構成され、内蔵されたＲＯＭ（記憶媒体）に記憶された各種のエンジン制御プログラムを実行することで、エンジン運転状態に応じて各気筒の燃料噴射弁２０の燃料噴射量や点火時期を制御する。
【００２４】
本実施例１では、ＥＣＵ４０は、後述する図４乃至図７に示す気筒別空燃比制御の各ルーチンを実行することで、後述する気筒別空燃比推定モデルを用いて空燃比センサ３７の検出値（排気集合部３６を流れる排出ガスの実空燃比）に基づいて各気筒の空燃比を推定し、全気筒の推定空燃比の平均値を算出して、その平均値を基準空燃比（全気筒の目標空燃比）に設定すると共に、各気筒の推定空燃比と基準空燃比との偏差を各気筒毎に算出して、その偏差が小さくなるように各気筒の燃料補正量（燃料噴射量の補正量）を算出し、その算出結果に基づいて各気筒の燃料噴射量を補正することで、各気筒に供給する混合気の空燃比を各気筒毎に補正して気筒間の空燃比ばらつきを少なくするように制御する（以下、この制御を「気筒別空燃比制御」という）。
【００２５】
ここで、空燃比センサ３７の検出値（排気集合部３６を流れる排出ガスの実空燃比）に基づいて各気筒の空燃比を推定するモデル（以下「気筒別空燃比推定モデル」という）の具体例を説明する。
【００２６】
排気集合部３６におけるガス交換に着目して、空燃比センサ３７の検出値を、排気集合部３６における各気筒の推定空燃比の履歴と空燃比センサ３７の検出値の履歴とにそれぞれ所定の重みを乗じて加算したものとしてモデル化し、該モデルを用いて各気筒の空燃比を推定するようにしている。この際、オブザーバとしてはカルマンフィルタを用いる。
【００２７】
より具体的には、排気集合部３６におけるガス交換のモデルを次の（１）式にて近似する。
ｙ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) の推定値を求めることを表す。
【００３１】
以上のようにして、気筒別空燃比推定モデルをカルマンフィルタ型オブザーバにて構成することにより、燃焼サイクルの進行に伴い各気筒の空燃比を順次推定することができる。
【００３２】
次に、各気筒の空燃比検出タイミング（空燃比センサ３７の出力のサンプルタイミング）の設定方法について説明する。本実施例１では、各気筒から排出される排出ガスが空燃比センサ３７付近に到達してその空燃比が検出されるまでの遅れ（以下「排気系の応答遅れ」という）がエンジン運転状態によって変化することを考慮して、エンジン運転状態（例えばエンジン負荷、エンジン回転速度等）に応じてマップ等により各気筒の空燃比検出基準タイミングを設定する。一般に、エンジン負荷やエンジン回転速度が低下するほど、排気系の応答遅れが大きくなるため、各気筒の空燃比検出基準タイミングは、エンジン負荷やエンジン回転速度が低下するほど、遅角側にシフトされるように設定されている。この空燃比検出基準タイミングは、目標空燃比がストイキ（空気過剰率λ＝１．０）の時の適正な空燃比検出タイミングに相当する。
【００３３】
ところで、図２は、１気筒のみがリッチになっている時の空燃比センサ３７の出力振幅の挙動例を示すタイムチャートである。この場合、適正な空燃比検出タイミングは、空燃比センサ３７の出力振幅がピークとなるタイミングである。空燃比と空燃比検出タイミングの適正値からのずれとの関係を実験により考察した結果、図３に示すように、空燃比検出タイミングの適正値からのずれは空燃比に応じてＺ字型に変化することが判明した。すなわち、空燃比がストイキ（λ＝１．０）の時には、空燃比検出タイミングの適正値からのずれが０となり、空燃比がストイキに比較的近い領域では、リーンになるほど空燃比検出タイミングの適正値が遅くなる方向にずれ（空燃比センサの応答性が遅くなり）、リッチになるほど空燃比検出タイミングの適正値が早くなる方向にずれる（空燃比センサの応答性が早くなる）。しかし、空燃比がストイキからある程度離れた領域では、空燃比がそれ以上リッチ／リーン側に変化しても、空燃比検出タイミングの適正値からのずれ量（空燃比センサの応答性）はほとんど変化しない。
【００３４】
このような空燃比による空燃比検出タイミングのずれの変化特性を考慮して、本実施例１では、例えば、適合工程で空燃比と空燃比検出タイミングの適正値からのずれ（補正量）との関係を測定して、その測定結果に基づいて空燃比をパラメータとする空燃比検出タイミングの適正値からのずれ（補正量）のテーブルを作成してＥＣＵ４０のＲＯＭ等の不揮発性メモリに記憶させておき、エンジン運転中に当該テーブルを参照して目標空燃比又は検出空燃比に応じた空燃比検出タイミングの補正量を設定するようにしている。この空燃比検出タイミングの補正量は、リッチ側の空燃比でマイナス値（空燃比検出タイミングを早める方向の補正）となり、リーン側の空燃比でプラス値（空燃比検出タイミングを遅くする方向の補正）となる。
【００３５】
この場合、空燃比検出タイミングの補正量のテーブルは、全ての空燃比領域で空燃比毎に細かく補正量を設定したものであっても良いが、図３に示すように、空燃比検出タイミングの適正値からのずれ（補正量）は空燃比に応じてＺ字型に変化するため、空燃比がストイキからある程度離れた領域（図３のλrichよりもリッチ側の空燃比領域とλleanよりもリーン側の空燃比領域）では、空燃比がそれ以上リッチ／リーン側に変化しても、空燃比検出タイミングの適正値からのずれ量がほとんど変化しない。このような空燃比による空燃比検出タイミングのずれのＺ字型の変化特性を考慮して、図３のλrichよりもリッチ側の空燃比領域とλleanよりもリーン側の空燃比領域では、それぞれ１つずつ空燃比検出タイミングの補正量を設定するようにしても良い。
【００３６】
また、空燃比に応じて空燃比検出タイミングの適正値からのずれ（補正量）が変化する所定空燃比範囲内（図３のλrich〜λleanの範囲内）については、空燃比検出タイミングの補正量を空燃比毎に細かくテーブルデータとして設定するようにしても良いが、λrichよりもリッチ側の空燃比領域の補正量のテーブルデータとλleanよりもリーン側の空燃比領域の補正量のテーブルデータとの補間補正により空燃比検出タイミングの補正量を設定するようにしても良い。ここで、補間補正は、ストイキ（λ＝１．０）の時に空燃比検出タイミングの補正量が０となる直線で近似する線形補間（直線補間）を用いても良いし、∫字状の曲線で近似する曲線補間（スプライン補間）を用いても良い。
【００３７】
以上説明した本実施例１の空燃比検出タイミングの設定と気筒別空燃比制御は、ＥＣＵ４０によって図４乃至図７の各ルーチンに従って実行される。以下、各ルーチンの処理内容を説明する。
【００３８】
［気筒別空燃比制御メインルーチン］
図４の気筒別空燃比制御メインルーチンは、クランク角センサ３３の出力パルスに同期して所定クランク角毎（例えば３０℃Ａ毎）に起動される。本ルーチンが起動されると、まずステップ１０１で、後述する図５の気筒別空燃比制御実行条件判定ルーチンを実行して、気筒別空燃比制御の実行条件が成立しているか否かを判定する。この後、ステップ１０２に進み、図５の気筒別空燃比制御実行条件判定ルーチンでセットされた気筒別空燃比制御実行フラグがＯＮであるか否かで、気筒別空燃比制御の実行条件が成立しているか否かを判定する。その結果、気筒別空燃比制御実行フラグがＯＦＦ（実行条件が不成立）と判定された場合は、以降の処理を行うことなく、本ルーチンを終了する。
【００３９】
一方、気筒別空燃比制御実行フラグがＯＮ（実行条件成立）と判定された場合は、ステップ１０３に進み、後述する図６の空燃比検出タイミング演算ルーチンを実行して、現在のエンジン負荷、エンジン回転速度等のエンジン運転状態と目標空燃比に応じた空燃比検出タイミング（空燃比センサ１６の出力のサンプルタイミング）を設定する。この後、ステップ１０４に進み、現在のクランク角が各気筒の空燃比検出タイミングであるか否かを判定し、空燃比検出タイミングでなければ、以降の処理を行うことなく、本ルーチンを終了する。
【００４０】
これに対して、現在のクランク角が空燃比検出タイミングであれば、ステップ１０５に進み、後述する図７の気筒別空燃比制御実行ルーチンを実行して、気筒別空燃比制御を実行する。
【００４１】
［気筒別空燃比制御実行条件判定ルーチン］
図５の気筒別空燃比制御実行条件判定ルーチンは、図４の気筒別空燃比制御メインルーチンのステップ１０１で実行されるサブルーチンである。本ルーチンが起動されると、まずステップ２０１で、空燃比センサ３７が使用可能な状態であるか否かを判定する。ここで、使用可能な状態とは、例えば、空燃比センサ３７が活性状態で、且つ、故障していない状態であることである。空燃比センサ３７が使用可能な状態でなければ、気筒別空燃比制御実行条件が不成立となり、ステップ２０５に進み、気筒別空燃比制御実行フラグをＯＦＦにセットして、本ルーチンを終了する。
【００４２】
一方、空燃比センサ３７が使用可能な状態であれば、ステップ２０２に進み、冷却水温が所定温度以上（エンジン１１が暖機状態）であるか否かを判定し、所定温度未満であれば、気筒別空燃比制御実行条件が不成立となり、ステップ２０５に進み、気筒別空燃比制御実行フラグをＯＦＦにセットして、本ルーチンを終了する。
【００４３】
また、冷却水温が所定温度以上であれば、ステップ２０３に進み、エンジン回転速度とエンジン負荷（例えば吸気管圧力）とをパラメータとする運転領域マップを参照して、現在のエンジン運転領域が気筒別空燃比制御の実行領域であるか否かを判定する。例えば、高回転域や低負荷域では、気筒別空燃比の推定精度が悪化されるため、気筒別空燃比制御が禁止される。
【００４４】
現在のエンジン運転領域が気筒別空燃比制御の実行領域でなければ、気筒別空燃比制御実行条件が不成立となり、ステップ２０５に進み、気筒別空燃比制御実行フラグをＯＦＦにセットして、本ルーチンを終了する。これに対して、現在のエンジン運転領域が気筒別空燃比制御の実行領域であれば、気筒別空燃比制御実行条件が成立して、ステップ２０４に進み、気筒別空燃比制御実行フラグをＯＮにセットして、本ルーチンを終了する。
【００４５】
［空燃比検出タイミング演算ルーチン］
図６の空燃比検出タイミング演算ルーチンは、図４の気筒別空燃比制御メインルーチンのステップ１０３で実行されるサブルーチンである。本ルーチンが起動されると、まずステップ３０１で、現在のエンジン運転状態（例えばエンジン負荷、エンジン回転速度等）に応じてマップ等により各気筒の空燃比検出基準タイミングを演算する。この空燃比検出基準タイミングは、目標空燃比がストイキ（空気過剰率λ＝１．０）の時の適正な空燃比検出タイミングに相当する。
【００４６】
この後、ステップ３０２に進み、空燃比による空燃比検出タイミングのずれのＺ字型の変化特性（図３参照）を考慮して設定された空燃比検出タイミングの補正量のテーブルを参照して、現在の目標空燃比（又はその平均値）に応じた空燃比検出タイミングの補正量を演算する。この空燃比検出タイミングの補正量は、リッチ側の空燃比でマイナス値（空燃比検出タイミングを早める方向の補正）となり、リーン側の空燃比でプラス値（空燃比検出タイミングを遅くする方向の補正）となる。
【００４７】
この場合、空燃比検出タイミングの補正量のテーブルは、全ての空燃比領域で空燃比毎に細かく補正量を設定したものであっても良いが、空燃比による空燃比検出タイミングのずれのＺ字型の変化特性を考慮して、図３のλrichよりもリッチ側の空燃比領域とλleanよりもリーン側の空燃比領域では、それぞれ空燃比検出タイミングの補正量を１つずつ設定するようにしても良い。
【００４８】
また、空燃比に応じて空燃比センサ３７の応答性が変化する所定空燃比範囲内（図３のλrich〜λleanの範囲内）については、空燃比検出タイミングの補正量を空燃比毎に細かくテーブルデータとして設定するようにしても良いが、λrichよりもリッチ側の空燃比領域の補正量のテーブルデータとλleanよりもリーン側の空燃比領域の補正量のテーブルデータとの補間補正により空燃比検出タイミングの補正量を設定するようにしても良い。ここで、補間補正は、ストイキ（λ＝１．０）の時に空燃比検出タイミングの補正量が０となる直線又は∫字状の曲線で近似して補間補正すれば良い。
【００４９】
尚、空燃比検出タイミングの補正量のデータは、現在の目標空燃比（又はその平均値）の代わりに、現在の検出空燃比（又はその平均値）をパラメータとしてテーブル化しても良い。
【００５０】
この後、ステップ３０３に進み、現在のエンジン運転状態に応じて設定された空燃比検出基準タイミングに、現在の目標空燃比（又はその平均値）に応じて設定された補正量を加算して、最終的な空燃比検出タイミングを求める。
空燃比検出タイミング＝空燃比検出基準タイミング＋補正量
【００５１】
要するに、現在のエンジン運転状態に応じて設定された空燃比検出基準タイミング（ストイキの時の適正な空燃比検出タイミング）を、現在の目標空燃比（又はその平均値）に応じて設定された補正量によって補正して、最終的な空燃比検出タイミングを決定する。この場合、空燃比検出タイミングの補正量は、リッチ側の空燃比でマイナス値（空燃比検出タイミングを早める方向の補正）となり、リーン側の空燃比でプラス値（空燃比検出タイミングを遅くする方向の補正）となるため、現在の目標空燃比（又はその平均値）がリーンの時には、空燃比検出タイミングをストイキの時よりも遅くするように補正し、リッチの時には、空燃比検出タイミングをストイキの時よりも早めるように補正することになる。
尚、上記ステップ３０２、３０３の処理は、特許請求の範囲でいう空燃比検出タイミング補正手段に相当する役割を果たす。
【００５２】
［気筒別空燃比制御実行ルーチン］
図７の気筒別空燃比制御実行ルーチンは、図４の気筒別空燃比制御メインルーチンのステップ１０５で実行されるサブルーチンであり、特許請求の範囲でいう気筒別空燃比制御手段としての役割を果たす。
【００５３】
本ルーチンが起動されると、まずステップ４０１で、空燃比センサ３７の出力（空燃比検出値）を読み込み、次のステップ４０２で、前記気筒別空燃比推定モデルを用いて今回の空燃比推定対象となる気筒の空燃比を空燃比センサ３７の検出値に基づいて推定する。この際、不等間隔燃焼による各気筒の空燃比の位相ずれを考慮して気筒別空燃比を推定する。このステップ４０２の処理が特許請求の範囲でいう気筒別空燃比推定手段としての役割を果たす。この後、ステップ４０３に進み、全気筒の推定空燃比の平均値を算出して、その平均値を基準空燃比（全気筒の目標空燃比）に設定する。
【００５４】
この後、ステップ４０４に進み、各気筒の推定空燃比と基準空燃比との偏差を算出して、その偏差が小さくなるように気筒別補正量を算出した後、ステップ４０５に進み、気筒別補正量に基づいて気筒別燃料噴射量を補正することで、各気筒に供給する混合気の空燃比を各気筒毎に補正して気筒間の空燃比ばらつきを少なくするように制御する。
【００５５】
以上説明した本実施例１によれば、目標空燃比がリーンの時に空燃比検出タイミングをストイキの時よりも遅くするように補正し、目標空燃比がリッチの時に空燃比検出タイミングをストイキの時よりも早めるように補正するようにしたので、各気筒の空燃比検出タイミングを空燃比に応じて適正な方向に補正することができて、各気筒の空燃比推定精度を向上させることができる。
【実施例２】
【００５６】
ところで、空燃比検出タイミングの適正値からのずれ（補正量）は、空燃比センサ３７の応答性に応じて変化し、空燃比センサ３７の応答性は経時変化や製造ばらつきによって変化する。図８に示すように、空燃比センサ３７の応答性が遅くなるほど、空燃比検出タイミングの適正値からのずれ（補正量）が大きくなる傾向がある。従って、空燃比センサ３７の応答性の経時変化や製造ばらつきを無視した上記実施例１の空燃比検出タイミングの補正方法では、空燃比センサ３７の応答性の経時変化や製造ばらつきが大きくなると、空燃比検出タイミングの補正精度の低下ひいては各気筒の空燃比推定精度の低下は避けられない。
【００５７】
この対策として、本発明の実施例２では、図９の空燃比検出タイミング演算ルーチンを実行することで、目標空燃比（又は検出空燃比）に応じて設定した空燃比検出タイミングの補正量を空燃比センサ３７の応答性に応じて補正する（ステップ３０２ａ）。
【００５８】
この場合、空燃比センサ３７の応答性の経時変化を例えば積算走行距離、走行回数等で推定して、目標空燃比（又は検出空燃比）に応じて設定した空燃比検出タイミングの補正量を空燃比センサ３７の応答性の経時変化に応じて補正するようにしても良い。
【００５９】
また、空燃比センサ３７の応答性の経時変化や製造ばらつきによって生じる空燃比検出タイミングのずれが大きくなるほど、気筒別空燃比制御中の気筒間の推定空燃比のばらつき度合いが大きくなるという関係を考慮して、気筒別空燃比制御中に気筒間の推定空燃比のばらつき度合いを空燃比検出タイミングのずれの情報として検出して、目標空燃比（又は検出空燃比）に応じて設定した空燃比検出タイミングの補正量を気筒間の推定空燃比のばらつき度合いに応じて補正するようにしても良い。
【００６０】
このようにすれば、空燃比センサ３７の応答性の経時変化や製造ばらつきによって空燃比検出タイミングのずれが生じる場合でも、目標空燃比（又は検出空燃比）に応じて設定した空燃比検出タイミングの補正量を空燃比センサ３７の応答性の経時変化や製造ばらつきに応じて適正に補正することができ、空燃比センサ３７の応答性の経時変化や製造ばらつきによる空燃比検出タイミングの補正精度低下を防止することができる。
【実施例３】
【００６１】
上記実施例１，２では、予め設定された空燃比検出タイミングの補正量のテーブルを参照して、目標空燃比（又は検出空燃比）に応じて空燃比検出タイミングの補正量を設定するようにしたが、本発明の実施例３では、図１０乃至図１４の各ルーチンを実行することで、エンジン運転中に空燃比検出タイミングの適正値からのずれ（補正量）を学習し、この学習値をＥＣＵ４０のバックアップＲＡＭ等の書き換え可能な不揮発メモリに更新記憶するようにしている。
【００６２】
この場合、全ての空燃比領域で空燃比検出タイミングの適正値からのずれ（補正量）を空燃比毎に細かく学習するようにしても良いが、空燃比と空燃比検出タイミングの適正値からのずれ（補正量）との関係は、図３に示すように、空燃比検出タイミングの適正値からのずれ（補正量）が空燃比に応じてＺ字型に変化する特性を有するため、空燃比がストイキからある程度離れた領域（図３のλrichよりもリッチ側の空燃比領域とλleanよりもリーン側の空燃比領域）では、空燃比がそれ以上リッチ／リーン側に変化しても、空燃比検出タイミングの適正値からのずれ量がほとんど変化しない。このような空燃比による空燃比検出タイミングのずれのＺ字型の変化特性を考慮して、図３のλrichよりもリッチ側の空燃比領域とλleanよりもリーン側の空燃比領域では、それぞれ空燃比検出タイミングの補正量を１つずつ学習するようにしても良い。このようにすれば、全ての空燃比領域で補正量を空燃比毎に細かく学習する場合と比較して、学習処理が単純な処理となり、学習処理の演算負荷を軽減することができる利点がある。
【００６３】
この場合、空燃比に応じて空燃比検出タイミングの適正値からのずれ（補正量）が変化する所定空燃比範囲内（図３のλrich〜λleanの範囲内）については、空燃比検出タイミングの補正量を空燃比毎に細かく学習するようにしても良いが、目標空燃比（又は検出空燃比）がストイキを含む所定空燃比範囲内の時に、リッチ側の空燃比領域における学習値とリーン側の空燃比領域における学習値との補間補正により空燃比検出タイミングの補正量を設定するようにしても良い。このようにすれば、ストイキを含む所定空燃比範囲内では、学習しなくても、その両側の空燃比領域で学習した２つの学習値の補間補正により補正量を設定することができるため、全ての空燃比領域で補正量を空燃比毎に細かく学習する場合と比較して、学習処理が単純な処理となり、学習処理の演算負荷を軽減することができる利点がある。ここで、補間補正は、ストイキの時に補正量が０となる直線で近似する線形補間（直線補間）を用いても良いし、∫字状の曲線で近似する曲線補間（スプライン補間）を用いても良い。
【００６４】
また、空燃比検出タイミングのずれ（補正量）の学習中には、空燃比を変化させる制御（例えばサブフィードバック制御、触媒中立化制御等）を禁止するようにすると良い。これにより、空燃比を一定に維持した状態で空燃比検出タイミングのずれ（補正量）を精度良く学習することができる。
【００６５】
尚、図３に示すように、空燃比がストイキからある程度離れた領域では、空燃比がそれ以上リッチ／リーン側に変化しても、空燃比検出タイミングのずれはほとんど変化しないため、この空燃比領域で空燃比検出タイミングのずれを学習する場合は、この空燃比領域内での空燃比の変化を許容し、この空燃比領域外への空燃比の変化のみを禁止するようにしても良い。
【００６６】
また、空燃比センサ３７の応答性の経時変化に応じて学習値を更新するために所定間隔で学習を実行するようにすると良い。例えば、車載バッテリの取替えで学習値がクリアされた後の最初の走行中に学習し、その後、所定期間経過毎、或は、所定積算走行距離毎、或は、所定走行回数毎、或は、所定給油回数毎に学習を実行するようにすると良い。これにより、空燃比センサ３７の応答性の経時変化に応じて学習値を随時更新することができる。
【００６７】
また、エンジン１１をリーン空燃比又はリッチ空燃比で運転する時に学習実行条件が成立して空燃比検出タイミングのずれを学習するようにしても良いし、学習時に目標空燃比を強制的にリーン側又はリッチ側に変化させて空燃比検出タイミングのずれを学習するようにしても良い。この場合、排出ガス浄化用の触媒３８の酸素ストレージ量（酸素吸蔵量）が飽和レベル近くまで増加している状態では、触媒３８のＮＯｘ等のリーン成分浄化能力が低下しているため、この状態で空燃比を強制的にリーン側に変化させて学習すると、触媒３８で浄化しきれないＮＯｘ等のリーン成分の排出量が増加してしまう。また、触媒３８の酸素ストレージ量が少なくなっている状態では、触媒３８のＨＣ，ＣＯ等のリッチ成分浄化能力が低下しているため、この状態で目標空燃比を強制的にリッチ側に変化させて学習すると、触媒３８で浄化しきれないＨＣ，ＣＯ等のリッチ成分の排出量が増加してしまう。
【００６８】
この対策として、目標空燃比をリーン側又はリッチ側に変化させて学習を実行する時期を触媒３８の状態に基づいて判断するようにすると良い。このようにすれば、例えば、触媒３８の状態がＨＣ，ＣＯ等のリッチ成分浄化能力が高くなっている時（酸素ストレージ量が多くなっている時）に、目標空燃比を強制的にリッチ側に変化させて学習することで、リッチ側の空燃比領域でエミッションを悪化させることなく空燃比検出タイミングのずれを学習することができ、また、触媒３８の状態がＮＯｘ等のリーン成分浄化能力が高くなっている時（酸素ストレージ量が少なくなっている時）に、目標空燃比を強制的にリーン側に変化させて学習することで、リーン側の空燃比領域でエミッションを悪化させることなく空燃比検出タイミングのずれを学習することができ、学習時のエミッション悪化の問題を解消することができる。
【００６９】
以上説明した本実施例３の空燃比検出タイミングの学習補正と気筒別空燃比制御は、ＥＣＵ４０によって図１０乃至図１４の各ルーチンに従って実行される。以下、各ルーチンの処理内容を説明する。
【００７０】
［気筒別空燃比制御メインルーチン］
図１０の気筒別空燃比制御メインルーチンは、クランク角センサ３３の出力パルスに同期して所定クランク角毎（例えば３０℃Ａ毎）に起動される。本ルーチンが起動されると、まず、ステップ５０１で、前記実施例１で説明した図５の気筒別空燃比制御実行条件判定ルーチンを実行して、気筒別空燃比制御の実行条件が成立しているか否かを判定する。この後、ステップ５０２に進み、図５の気筒別空燃比制御実行条件判定ルーチンでセットされた気筒別空燃比制御実行フラグがＯＮであるか否かで、気筒別空燃比制御の実行条件が成立しているか否かを判定する。その結果、気筒別空燃比制御実行フラグがＯＦＦ（実行条件が不成立）と判定された場合は、以降の処理を行うことなく、本ルーチンを終了する。
【００７１】
一方、気筒別空燃比制御実行フラグがＯＮ（実行条件成立）と判定された場合は、ステップ５０３に進み、後述する図１１の空燃比検出タイミング演算ルーチンを実行して、現在のエンジン負荷、エンジン回転速度等のエンジン運転状態と目標空燃比に応じた空燃比検出タイミングを設定する。この後、ステップ５０４に進み、後述する図１２の補正量学習実行条件判定ルーチンを実行して、目標空燃比に応じた空燃比検出タイミングの補正量の学習実行条件が成立しているか否かを判定する。
【００７２】
この後、ステップ５０５に進み、図１２の補正量学習実行条件判定ルーチンでセットされた補正量学習実行フラグがＯＮであるか否かで、補正量学習の実行条件が成立しているか否かを判定する。その結果、補正量学習実行フラグがＯＦＦ（実行条件が不成立）と判定された場合は、ステップ５０６に進み、現在のクランク角が各気筒の空燃比検出タイミングであるか否かを判定し、空燃比検出タイミングでなければ、以降の処理を行うことなく、本ルーチンを終了する。
【００７３】
これに対して、現在のクランク角が空燃比検出タイミングであれば、ステップ５０７に進み、前記実施例１で説明した図７の気筒別空燃比制御実行ルーチンを実行して、気筒別空燃比制御を実行する。
【００７４】
一方、前記ステップ５０５で、補正量学習実行フラグがＯＮ（実行条件が成立）と判定された場合は、ステップ５０８に進み、後述する図１３及び図１４の補正量学習ルーチンを実行して、目標空燃比に応じた空燃比検出タイミングの補正量を学習する。
【００７５】
［空燃比検出タイミング演算ルーチン］
図１１の空燃比検出タイミング演算ルーチンは、図１０の気筒別空燃比制御メインルーチンのステップ５０３で実行されるサブルーチンである。本ルーチンが起動されると、まずステップ６０１で、現在のエンジン運転状態（例えばエンジン負荷、エンジン回転速度等）に応じてマップ等により各気筒の空燃比検出基準タイミングを演算する。この空燃比検出基準タイミングは、目標空燃比がストイキ（空気過剰率λ＝１．０）の時の適正な空燃比検出タイミングに相当する。
【００７６】
この後、ステップ３０２に進み、後述する図１３及び図１４の補正量学習ルーチンで学習された空燃比検出タイミングの補正量学習値のテーブルを参照して、現在の目標空燃比（又は検出空燃比）に応じた空燃比検出タイミングの補正量学習値を読み込む（又は補間補正する）。この空燃比検出タイミングの補正量学習値は、リッチ側の空燃比でマイナス値（空燃比検出タイミングを早める方向の補正）となり、リーン側の空燃比でプラス値（空燃比検出タイミングを遅くする方向の補正）となる。
【００７７】
この後、ステップ６０３に進み、現在のエンジン運転状態に応じて設定された空燃比検出基準タイミングに、現在の目標空燃比（又は検出空燃比）に応じた補正量学習値を加算して、最終的な空燃比検出タイミングを求める。
【００７８】
空燃比検出タイミング＝空燃比検出基準タイミング＋補正量学習値
要するに、現在のエンジン運転状態に応じて設定された空燃比検出基準タイミング（ストイキの時の適正な空燃比検出タイミング）を、現在の目標空燃比（又は検出空燃比）に応じた補正量学習値によって補正して、最終的な空燃比検出タイミングを決定する。
【００７９】
［補正量学習実行条件判定ルーチン］
図１２の補正量学習実行条件判定ルーチンは、図１０の気筒別空燃比制御メインルーチンのステップ５０４で実行されるサブルーチンである。本ルーチンが起動されると、まずステップ７０１で、車載バッテリの取替えで補正量の学習値がクリアされた後の最初の走行であるか否か、又は前回の学習から所定期間（所定積算走行距離、或は、所定走行回数等）が経過しているか否かを判定し、その判定結果が「Ｎｏ」であれば、補正量学習実行条件が不成立となり、ステップ７０５に進み、補正量学習実行フラグをＯＦＦにセットして、本ルーチンを終了する。
【００８０】
これに対して、上記ステップ７０１で、「Ｙｅｓ」と判定されれば、ステップ７０２に進み、気筒別空燃比制御の他に、空燃比を変化させる制御（例えばサブフィードバック制御、触媒中立化制御等）が停止（禁止）されているか否かを判定し、空燃比を変化させる制御が停止されていなければ、補正量学習実行条件が不成立となり、ステップ７０５に進み、補正量学習実行フラグをＯＦＦにセットして、本ルーチンを終了する。
【００８１】
そして、上記ステップ７０２で、空燃比を変化させる制御が停止されていれば、ステップ７０３に進み、補正量の学習を実行しても（つまり補正量の学習のために目標空燃比を変化させても）、エミッションが悪化しないような触媒３８の状態であるか否かを判定する。もし、補正量の学習を実行すると、エミッションが悪化するような触媒３８の状態であれば、補正量学習実行条件が不成立となり、ステップ７０５に進み、補正量学習実行フラグをＯＦＦにセットして、本ルーチンを終了する。これに対して、補正量の学習を実行しても、エミッションが悪化しないような触媒３８の状態であれば、補正量学習実行条件が成立して、ステップ７０４に進み、補正量学習実行フラグをＯＮにセットして、本ルーチンを終了する。
【００８２】
［補正量学習ルーチン］
まず、空燃比検出タイミングの補正量の学習方法を図１５及び図１６を用いて説明する。図１５及び図１６は、空燃比検出タイミングが適正な場合とずれている場合の燃料噴射量の補正（燃料補正）の効果を説明する図である。空燃比検出タイミングが適正な場合は、各気筒の空燃比を精度良く推定できるため、所定の気筒の燃料噴射量を所定量補正すると、その気筒の空燃比は、燃料補正量相当分だけ変化するはずである。この特性に着目して、本実施例３では、図１３及び図１４の補正量学習ルーチンを実行することで、各気筒の空燃比検出タイミングを変化させて、当該空燃比検出タイミングにおける各気筒の燃料補正前後の空燃比を推定し、燃料補正前後の推定空燃比の変化量が燃料補正量相当分になる空燃比検出タイミングを適正な空燃比検出タイミングと判断して、空燃比検出タイミングの適正値からのずれ（補正量）を学習するようにしている。
【００８３】
図１３及び図１４の補正量学習ルーチンは、図１０の気筒別空燃比制御メインルーチンのステップ５０８で実行されるサブルーチンであり、特許請求の範囲でいう学習手段としての役割を果たす。本ルーチンが起動されると、まずステップ８０１で、空燃比検出タイミングがずれているか否かを、気筒別空燃比制御中の気筒間の推定空燃比のばらつき度合いに基づいて判定する。この際、例えば、下記の条件(A1)，(A2)のいずれか一方又は両方によって判定する。
【００８４】
(A1)各気筒の推定空燃比のうちの最大の推定空燃比と最小の推定空燃比との偏差が所定値以上であるか否かで、気筒間の推定空燃比のばらつき度合いが大きいか否かを判定する。
(A2)全気筒の推定空燃比の標準偏差が所定値以上であるか否かで、気筒間の推定空燃比のばらつき度合いが大きいか否かを判定する。
もし、気筒間の推定空燃比のばらつき度合いが大きければ、空燃比検出タイミングがずれていると判定し、気筒間の推定空燃比のばらつき度合いが小さければ、空燃比検出タイミングがずれていないと判定する。
【００８５】
空燃比検出タイミングがずれていないと判定されれば、補正量を学習する必要がないため、以降の学習処理を行うことなく、本ルーチンを終了する。
一方、空燃比検出タイミングがずれていると判定されれば、ステップ８０２に進み、遅角補正回数（空燃比検出タイミングを遅角側に補正した回数）が規定回数未満であるか否かを判定し、遅角補正回数が規定回数未満であれば、ステップ８０３に進み、空燃比検出タイミングを遅角側に所定クランク角だけ補正する。この後、ステップ８０４に進み、遅角補正後の空燃比検出タイミングにおける当該気筒の燃料補正前後の空燃比を推定し、燃料補正前後の推定空燃比の変化量を算出する。
【００８６】
この後、ステップ８０５に進み、推定空燃比の変化量が燃料補正量相当分にほぼ一致するか否かを判定することで、現在の空燃比検出タイミングが適正な空燃比検出タイミングであるか否かを判定する。その結果、現在の空燃比検出タイミングが適正な空燃比検出タイミングでないと判定された場合には、ステップ８０２に戻り、上述した空燃比検出タイミングの遅角補正を繰り返す。
【００８７】
この遅角補正回数が規定回数に達する前に、推定空燃比の変化量が燃料補正量相当分にほぼ一致して空燃比検出タイミングが適正な空燃比検出タイミングになったと判定されれば、ステップ８０６に進み、その時点の空燃比検出タイミングを適正な空燃比検出タイミングと判断して、この適正な空燃比検出タイミングと遅角補正前の空燃比検出タイミングとの偏差（ずれ）を空燃比検出タイミングの補正量として学習し、その学習値をＥＣＵ４０のバックアップＲＡＭ等の書き換え可能な不揮発性メモリの学習値記憶領域に更新記憶する。この際、空燃比に応じて空燃比検出タイミングの補正量が変化することを考慮して、補正量学習値を空燃比毎に更新記憶する。或は、空燃比による空燃比検出タイミングのずれのＺ字型の変化特性を考慮して、図３のλrichよりもリッチ側の空燃比領域とλleanよりもリーン側の空燃比領域では、それぞれ空燃比検出タイミングの補正量を１つずつ学習するようにしても良い。
この後、ステップ８０７に進み、遅角補正回数のカウント値をリセットして本ルーチンを終了する。
【００８８】
これに対して、空燃比検出タイミングの遅角補正を規定回数繰り返しても、空燃比検出タイミングが適正な空燃比検出タイミングにならなかった場合には、図１４のステップ８０８に進み、進角補正回数（空燃比検出タイミングを進角側に補正した回数）が規定回数未満であるか否かを判定し、進角補正回数が規定回数未満であれば、ステップ８０９に進み、空燃比検出タイミングを遅角補正前の最初の位置から進角側に所定クランク角だけ補正する。この後、ステップ３１０に進み、進角補正後の空燃比検出タイミングにおける当該気筒の燃料補正前後の空燃比を推定し、燃料補正前後の推定空燃比の変化量を算出する。
【００８９】
この後、ステップ３１１に進み、推定空燃比の変化量が燃料補正量相当分にほぼ一致するか否かを判定することで、現在の空燃比検出タイミングが適正な空燃比検出タイミングであるか否かを判定する。その結果、現在の空燃比検出タイミングが適正な空燃比検出タイミングでないと判定された場合には、ステップ８０８に戻り、上述した空燃比検出タイミングの進角補正を繰り返す。
【００９０】
この進角補正回数が規定回数に達する前に、推定空燃比の変化量が燃料補正量相当分にほぼ一致して空燃比検出タイミングが適正な空燃比検出タイミングになったと判定されれば、ステップ３１２に進み、その時点の空燃比検出タイミングを適正な空燃比検出タイミングと判断して、この適正な空燃比検出タイミングと進角補正前の空燃比検出タイミングとの偏差（ずれ）を空燃比検出タイミングの補正量として学習し、その補正量学習値をＥＣＵ４０のバックアップＲＡＭ等の書き換え可能な不揮発性メモリの学習値記憶領域に更新記憶する。この後、ステップ３１３に進み、進角補正回数のカウント値をリセットして本ルーチンを終了する。
【００９１】
本ルーチンにより作成される補正量の学習マップは、前記図１１の空燃比検出タイミング演算ルーチンのステップ６０２で、空燃比検出タイミングの補正量学習値を読み込むためのマップとして使用される。
【００９２】
尚、空燃比検出タイミングの進角補正を規定回数繰り返しても、空燃比検出タイミングが適正な空燃比検出タイミングにならなかった場合（つまり適正な空燃比検出タイミングを学習できなかった場合）には、ステップ８０８で「Ｎｏ」と判定され、本ルーチンを終了する。
【００９３】
以上説明した本実施例３では、エンジン運転中に空燃比検出タイミングの適正値からのずれを空燃比検出タイミングの補正量として学習して、その補正量学習値を書き換え可能な不揮発性メモリに更新記憶するようにしたので、エンジン運転中に空燃比検出タイミングの適正値からのずれ（補正量）を空燃比によるずれだけでなく空燃比センサ３７の応答性の経時変化や製造ばらつきによるずれも含めて学習することができる。このため、空燃比センサ３７の応答性の経時変化や製造ばらつきの影響が無視できないシステムでも、空燃比検出タイミングの補正量を空燃比によるずれだけでなく空燃比センサの応答性の経時変化や製造ばらつきによるずれも含めて適正に設定することができ、各気筒の空燃比推定精度を向上させることができる。
【００９４】
尚、本発明は、図１に例示するような吸気ポート噴射エンジンに限定されず、筒内噴射エンジンにも適用して実施できる等、要旨を逸脱しない範囲で種々変更して実施できることは言うまでもない。
【図面の簡単な説明】
【００９５】
【図１】本発明の実施例１におけるエンジン制御システム全体の概略構成図である。
【図２】１気筒のみリッチ時の空燃比センサの出力振幅挙動の一例を示すタイムチャートである。
【図３】目標空燃比（目標λ）と空燃比検出タイミングの適正値からのずれとの関係を測定して求めた空燃比センサ特性図である。
【図４】実施例１の気筒別空燃比制御メインルーチンの処理の流れを示すフローチャートである。
【図５】実施例１の気筒別空燃比制御実行条件判定ルーチンの処理の流れを示すフローチャートである。
【図６】実施例１の空燃比検出タイミング演算ルーチンの処理の流れを示すフローチャートである。
【図７】実施例１の気筒別空燃比制御実行ルーチンの処理の流れを示すフローチャートである。
【図８】空燃比検出タイミングの適正値からのずれと空燃比センサの応答性と目標空燃比（目標λ）との関係を測定して求めた空燃比センサ特性図である。
【図９】実施例２の空燃比検出タイミング演算ルーチンの処理の流れを示すフローチャートである。
【図１０】実施例３の気筒別空燃比制御メインルーチンの処理の流れを示すフローチャートである。
【図１１】実施例３の空燃比検出タイミング演算ルーチンの処理の流れを示すフローチャートである。
【図１２】実施例３の補正量学習実行条件判定ルーチンの処理の流れを示すフローチャートである。
【図１３】実施例３の補正量学習ルーチンの処理の流れを示すフローチャートである（その１）。
【図１４】実施例３の補正量学習ルーチンの処理の流れを示すフローチャートである（その２）。
【図１５】実施例３の空燃比検出タイミングの適正値からのずれの検出方法を説明するタイムチャートである。
【図１６】実施例３の空燃比検出タイミングの補正量の学習方法を説明するタイムチャートである。
【符号の説明】
【００９６】
１１…エンジン（内燃機関）、１２…吸気管、１４…エアフローメータ、１５…スロットルバルブ、１９…吸気マニホールド、２０…燃料噴射弁、２２…燃料ポンプ、２４…燃圧センサ、２７，２８…可変バルブタイミング機構、３５…排気マニホールド、３６…排気集合部、３７…空燃比センサ、３８…触媒、４０…ＥＣＵ（気筒別空燃比推定手段，気筒別空燃比制御手段，空燃比検出タイミング補正手段，学習手段）
【図１】
2007211609.tif 000003
【図２】
2007211609.tif 000004
【図３】
2007211609.tif 000005
【図４】
2007211609.tif 000006
【図５】
2007211609.tif 000007
【図６】
2007211609.tif 000008
【図７】
2007211609.tif 000009
【図８】
2007211609.tif 000010
【図９】
2007211609.tif 000011
【図１０】
2007211609.tif 000012
【図１１】
2007211609.tif 000013
【図１２】
2007211609.tif 000014
【図１３】
2007211609.tif 000015
【図１４】
2007211609.tif 000016
【図１５】
2007211609.tif 000017
【図１６】
2007211609.tif 000018