(57)【要約】【課題】気筒別空燃比制御による気筒別補正量の学習値の誤学習を防止する。【解決手段】ＥＣＵ３９は、空燃比センサ３６の検出値に基づいて各気筒の空燃比を推定し、各気筒の推定空燃比に基づいて各気筒の空燃比を制御する気筒別空燃比制御を実行する。更に、気筒別空燃比制御による気筒別補正量に基づいて気筒別補正量学習値を算出する。その際、各気筒の推定空燃比が所定値よりも目標値側になった状態が所定時間以上継続したか否かによって推定空燃比収束状態（各気筒の推定空燃比が収束した状態）であるか否かを判定し、推定空燃比収束状態であると判定されるまで気筒別補正量学習値の算出を禁止する。これにより、空燃比検出タイミングのずれによって各気筒の推定空燃比が収束していないときの気筒別補正量（つまり各気筒の空燃比を適正に制御できていないときの気筒別補正量）に基づいて気筒別補正量学習値を算出してしまうことを回避する。【選択図】図１
2015059450.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) を全て満したときに気筒別空燃比制御の実行条件が成立し、いずれか１つでも満たさない条件があれば、実行条件が不成立となる。実行条件が不成立の場合は、ステップ１０２以降の処理を行うことなく、本ルーチンを終了する。
【００４２】
一方、実行条件が成立している場合は、ステップ１０２に進み、各気筒の空燃比検出タイミング（空燃比センサ３６の出力のサンプルタイミング）を、その時点のエンジン負荷（例えば吸気管圧力）に応じてマップにより設定する。尚、各気筒の空燃比検出タイミングをエンジン負荷とエンジン回転速度に応じてマップにより設定しても良い。この空燃比検出タイミングを設定するマップは、図示しない空燃比検出タイミング補正用のルーチン（例えばＬｏｃａｌ学習実行ルーチンやＧｌｏｂａｌ学習実行ルーチン）によって学習補正される。
【００４３】
この後、ステップ１０３に進み、現在のクランク角が上記ステップ１０２で設定した空燃比検出タイミングであるか否かを判定し、空燃比検出タイミングでなければ、以降の処理を行うことなく、本ルーチンを終了する。
【００４４】
これに対して、現在のクランク角が上記ステップ１０２で設定した空燃比検出タイミングであれば、ステップ１０４に進み、空燃比センサ３６の出力（空燃比検出値）を読み込む。この後、ステップ１０５に進み、前記気筒別空燃比推定モデルを用いて今回の空燃比推定対象となる気筒の空燃比を空燃比センサ３６の検出値に基づいて推定する。
【００４５】
［気筒別空燃比制御及び収束判定ルーチン］
図５及び図６に示す気筒別空燃比制御及び収束判定ルーチンは、クランク角センサ３３の出力パルスに同期して所定クランク角毎（例えば３０ＣＡ毎）に起動され、特許請求の範囲でいう気筒別空燃比制御手段及び収束判定手段としての役割を果たす。本ルーチンが起動されると、まず、２０１で、気筒別空燃比制御の実行条件（前記図４のステップ１０１と同じ条件）が成立しているか否かを判定する。実行条件が不成立の場合は、ステップ２０２以降の処理を行うことなく、本ルーチンを終了する。
【００４６】
一方、実行条件が成立している場合は、ステップ２０２に進み、空燃比センサ３６の検出値φ（排気集合部３４ａを流れる排出ガスの実空燃比）と推定空燃比φ＾とに基づいて観測残差ｅｒｒを次の（４）式により算出する。その際、空燃比センサ３６の検出値φの振幅（目標空燃比 tφとの差）を用いて観測残差ｅｒｒを正規化する。尚、空燃比センサ３６の検出値φ、推定空燃比φ＾、目標空燃比 tφは、それぞれ等量比（空気過剰率の逆数）で算出される。
【００４７】
【数１】
2015059450.tif 000003
【００４８】
ここで、τは時定数であり、ｓはラプラス演算子である。このステップ２０２の処理が特許請求の範囲でいう残差算出手段としての役割を果たす。
この後、ステップ２０３に進み、気筒別空燃比制御の許可フラグが「１」である（気筒別空燃比制御が許可されている）か否かを判定する。このステップ２０３で、気筒別空燃比制御の許可フラグが「０」である（気筒別空燃比制御が禁止されている）と判定された場合には、ステップ２０４に進み、観測残差ｅｒｒが気筒別空燃比制御の許可閾値Ｋ1on よりも小さいか否かを判定する。
【００４９】
このステップ２０４で、観測残差ｅｒｒが許可閾値Ｋ1on 以上であると判定された場合には、ステップ２０６に進み、気筒別空燃比制御の許可フラグを「０」に維持すると共に、収束判定許可フラグを「０」に維持する。その後、上記ステップ２０４で、観測残差ｅｒｒが許可閾値Ｋ1on よりも小さいと判定された場合には、ステップ２０７に進み、気筒別空燃比制御の許可フラグを「１」にセットすると共に、収束判定許可フラグを「１」にセットする。
【００５０】
一方、上記２０３で、気筒別空燃比制御の許可フラグが「１」である（気筒別空燃比制御が許可されている）と判定された場合には、ステップ２０５に進み、観測残差ｅｒｒが気筒別空燃比制御の禁止閾値Ｋ1offよりも小さいか否かを判定する。この禁止閾値Ｋ1offは、許可閾値Ｋ1on よりも大きい値に設定されている。
【００５１】
このステップ２０５で、観測残差ｅｒｒが禁止閾値Ｋ1offよりも小さいと判定された場合には、ステップ２０７に進み、気筒別空燃比制御の許可フラグを「１」に維持すると共に、収束判定許可フラグを「１」に維持する。その後、上記ステップ２０５で、観測残差ｅｒｒが禁止閾値Ｋ1off以上であると判定された場合には、ステップ２０６に進み、気筒別空燃比制御の許可フラグを「０」にリセットすると共に、収束判定許可フラグを「０」にリセットする。
【００５２】
気筒別空燃比制御の許可フラグが「１」の期間中（つまり収束判定許可フラグが「１」の期間中）は、図６のステップ２０８に進み、初期値算出終了フラグが「１」である（初期推定空燃比の算出が終了している）か否かを判定する。このステップ２０８で、初期値算出終了フラグが「０」である（初期推定空燃比の算出が終了していない）と判定された場合には、ステップ２０９に進み、次式により各気筒の初期推定空燃比initφ＾#iを算出する。
【００５３】
initφ＾#i＝｛１／（τ×２×ｓ＋１）｝×φ＾#i
ここで、φ＾#iは第ｉ気筒＃ｉの推定空燃比であり、initφ＾#iは第ｉ気筒＃ｉの初期推定空燃比である。
【００５４】
この後、ステップ２１０に進み、初期値算出カウンタのカウント値をインクリメントした後、ステップ２１１に進み、初期値算出カウンタのカウント値が所定値よりも大きいか否かを判定する。このステップ２１１で、初期値算出カウンタのカウント値が所定値以下であると判定された場合には、初期値算出終了フラグを「０」に維持したまま、本ルーチンを終了する。
【００５５】
その後、上記ステップ２１１で、初期値算出カウンタのカウント値が所定値よりも大きいと判定された場合には、ステップ２１２に進み、初期値算出終了フラグを「１」にセットして、本ルーチンを終了する。
【００５６】
これらのステップ２０８〜２１２の処理により、気筒別空燃比制御の開始前の所定期間における各気筒の推定空燃比φ＾#iに基づいて各気筒の初期推定空燃比initφ＾#iを気筒毎に算出すると共に、初期推定空燃比initφ＾#iの算出が終了するまで気筒別空燃比制御を禁止する。これらのステップ２０８〜２１２の処理が特許請求の範囲でいう初期値算出手段としての役割を果たす。
【００５７】
一方、上記ステップ２０８で、初期値算出終了フラグが「１」である（初期推定空燃比の算出が終了している）と判定された場合には、ステップ２１３〜２１５の気筒別空燃比制御に関する処理を実行すると共に、ステップ２１６〜２２２の推定空燃比の収束判定に関する処理を実行する。
【００５８】
まず、ステップ２１３で、全気筒の推定空燃比の平均値を算出して、その平均値を基準空燃比baseφに設定する。
【００５９】
この後、ステップ２１４に進み、各気筒の推定空燃比φ＾#iと基準空燃比baseφとの偏差（baseφ−φ＾#i）を算出して、その偏差（baseφ−φ＾#i）が小さくなるように各気筒の気筒別補正量として燃料補正量Ｃmp#iを次式により算出する。
Ｃmp#i＝∫（baseφ−φ＾#i）ｄｔ
ここで、Ｃmp#iは第ｉ気筒＃ｉの燃料補正量である。
【００６０】
この後、ステップ２１５に進み、各気筒の燃料補正量Ｃmp#iに基づいて各気筒の燃料噴射量を補正することで、各気筒に供給する混合気の空燃比を各気筒毎に補正して気筒間の空燃比ばらつきを少なくするように制御する。
【００６１】
この後、ステップ２１６に進み、各気筒の初期推定空燃比initφ＾#iに応じて各気筒の収束判定閾値を気筒毎にマップ又は数式等により設定する（第ｉ気筒#iの初期推定空燃比initφ＾#iに応じて第ｉ気筒#iの収束判定閾値を設定する）。収束判定閾値のマップ又は数式等は、例えば、初期推定空燃比の基準空燃比に対する偏差が大きいほど収束判定閾値の基準空燃比に対する偏差が大きくなるように設定されている。
【００６２】
更に、初期推定空燃比initφ＾#i（例えば各気筒の初期推定空燃比initφ＾#iの最大値）に応じて全気筒共通の収束判定時間をマップ又は数式等により設定する。収束判定時間のマップ又は数式等は、例えば、初期推定空燃比の最大値の基準空燃比に対する偏差が小さいほど収束判定時間が長くなるように設定されている。
【００６３】
この後、ステップ２１７に進み、各気筒の推定空燃比φ＾#iが収束判定閾値よりも目標値（例えば基準空燃比）側であるか否かによって、各気筒の推定空燃比φ＾#iが収束判定領域内であるか否かを判定する。
【００６４】
このステップ２１７で、少なくとも一つの気筒の推定空燃比φ＾#iが収束判定領域外であると判定された場合には、ステップ２２０に進み、推定空燃比収束状態ではないと判定して収束判定フラグを「０」に維持したまま、本ルーチンを終了する。
【００６５】
その後、上記ステップ２１７で、各気筒の推定空燃比φ＾#iが収束判定領域内である（全ての気筒の推定空燃比φ＾#iが収束判定閾値よりも目標値側である）と判定された場合には、ステップ２１８に進み、収束判定カウンタのカウント値をインクリメントした後、ステップ２１９に進み、収束判定カウンタのカウント値が収束判定時間以上であるか否かを判定する。このステップ２１９で、収束判定カウンタのカウント値が収束判定時間よりも小さいと判定された場合には、収束判定フラグを「０」に維持したまま、本ルーチンを終了する。
【００６６】
その後、上記ステップ２１９で、収束判定カウンタのカウント値が収束判定時間以上であると判定された場合には、各気筒の推定空燃比φ＾#iが収束判定閾値よりも目標値側になった状態が収束判定時間以上継続したと判断して、ステップ２２１に進み、推定空燃比収束状態であると判定して収束判定フラグを「１」にセットする。
【００６７】
この後、ステップ２２２に進み、推定空燃比収束状態であると判定されたときに推定空燃比φ＾#iの変化量（例えば各気筒の推定空燃比φ＾#iの変化量の平均値）と燃料補正量Ｃmp#iの変化量（例えば各気筒の燃料補正量Ｃmp#iの変化量の平均値）との比に基づいて定常ゲインＫdcを算出し、この定常ゲインＫdcを気筒別空燃比推定モデルに反映させる。具体的には、上記（２ａ）式のパラメータＢに定常ゲインＫdcを乗算する。このステップ２２２の処理が特許請求の範囲でいうゲイン反映手段としての役割を果たす。
【００６８】
推定空燃比収束状態であると判定した後、上記ステップ２１７で、少なくとも一つの気筒の推定空燃比φ＾#iが収束判定領域外であると判定された場合、つまり、推定空燃比収束状態であると判定した後に推定空燃比φ＾#iが発散した場合には、ステップ２２０に進み、判定をリセットする。つまり、推定空燃比収束状態ではないと判定して収束判定フラグを「０」にリセットする。
【００６９】
［補正量学習値算出ルーチン］
図７に示す補正量学習値算出ルーチンは、クランク角センサ３３の出力パルスに同期して所定クランク角毎（例えば３０ＣＡ毎）に起動され、特許請求の範囲でいう学習手段としての役割を果たす。本ルーチンが起動されると、まず、ステップ３０１で、ＩＧスイッチがＯＦＦ（オフ）からＯＮ（オン）に切り換わった直後であるか否かを判定する。
【００７０】
このステップ３０１で、ＩＧスイッチがＯＦＦからＯＮに切り換わった直後であると判定された場合には、ステップ３０２に進み、ＥＣＵ３９のバックアップ用メモリに記憶されている各気筒の燃料補正量学習値Ｃmpadp#i （後述するステップ３０８で前回のＩＧスイッチのＯＦＦ時に記憶した各気筒の燃料補正量学習値Ｃmpadp#i ）を気筒別空燃比制御に反映させる。具体的には、各気筒の燃料補正量学習値Ｃmpadp#i に基づいて各気筒の燃料補正量Ｃmp#iを次式により算出する。
Ｃmp#i＝Ｋadp ×Ｃmpadp#i
ここで、Ｋadp は０以上１以下の係数である。
【００７１】
この後、ステップ３０３に進み、ずれ判定フラグが「１」である（空燃比検出タイミングがずれている）か否かを判定する。このずれ判定フラグは、気筒別空燃比制御中に推定空燃比に基づいて空燃比検出タイミングのずれの有無を判定する空燃比検出タイミング判定によって空燃比検出タイミングのずれ有りと判定されたときに「１」にセットされる。
【００７２】
このステップ３０３で、ずれ判定フラグが「１」である（空燃比検出タイミングがずれている）と判定された場合には、ステップ３０９に進み、各気筒の燃料補正量学習値Ｃmpadp#i を「０」にリセットして、本ルーチンを終了する。
【００７３】
一方、上記ステップ３０３で、ずれ判定フラグが「０」である（空燃比検出タイミングがずれていない）と判定された場合には、ステップ３０４に進み、気筒別空燃比制御の実行中（燃料補正量の算出中）であるか否かを判定する。このステップ３０４で、気筒別空燃比制御の実行中ではないと判定された場合には、ステップ３０５以降の処理を行うことなく、本ルーチンを終了する。
【００７４】
一方、上記ステップ３０４で、気筒別空燃比制御の実行中であると判定された場合には、ステップ３０５に進み、収束判定フラグが「１」である（推定空燃比収束状態である）か否かを判定する。このステップ３０５で、収束判定フラグが「０」である（推定空燃比収束状態ではない）と判定された場合には、ステップ３０６以降の処理を行うことなく、本ルーチンを終了する。これにより、推定空燃比収束状態であると判定されるまで燃料補正量学習値の算出を禁止する。このステップ３０５の処理が特許請求の範囲でいう学習禁止手段としての役割を果たす。
【００７５】
一方、上記ステップ３０５で、収束判定フラグが「１」である（推定空燃比収束状態である）と判定された場合には、ステップ３０６に進み、各気筒の燃料補正量Ｃmp#iに基づいて各気筒の燃料補正量学習値Ｃmpadp#i を次式により気筒毎に算出する。
Ｃmpadp#i ＝｛１／（τ×ｓ＋１）｝×Ｃmp#i
ここで、Ｃmpadp#i は第ｉ気筒＃ｉの燃料補正量学習値である。
【００７６】
この後、ステップ３０７に進み、ＩＧスイッチがＯＮからＯＦＦに切り換わったか否かを判定し、ＩＧスイッチがＯＮからＯＦＦに切り換わったと判定された場合には、ステップ３０８に進み、各気筒の燃料補正量学習値Ｃmpadp#i をＥＣＵ３９のバックアップ用メモリに記憶する。
【００７７】
［インバランス故障診断ルーチン］
図８に示すインバランス故障診断ルーチンは、クランク角センサ３３の出力パルスに同期して所定クランク角毎（例えば３０ＣＡ毎）に起動され、特許請求の範囲でいう故障診断手段としての役割を果たす。本ルーチンが起動されると、まず、４０１で、気筒別空燃比制御の実行中（燃料補正量の算出中）であるか否かを判定する。このステップ４０１で、気筒別空燃比制御の実行中ではないと判定された場合には、ステップ４０２以降の処理を行うことなく、本ルーチンを終了する。
【００７８】
一方、上記ステップ４０１で、気筒別空燃比制御の実行中であると判定された場合には、ステップ４０２に進み、各気筒の燃料補正量Ｃmp#iに基づいて故障診断指標Ｖalueを算出する。この場合、例えば、各気筒の燃料補正量Ｃmp#iのうちの絶対値が最も大きい燃料補正量Ｃmp#i(max) を選択し、この絶対値が最も大きい燃料補正量Ｃmp#i(max) を用いて故障診断指標Ｖalueを次式により算出する。
Ｖalue＝（４／３）×Ｃmp#i(max)
【００７９】
この後、ステップ４０３に進み、収束判定フラグが「１」である（推定空燃比収束状態である）か否かを判定する。このステップ４０３で、収束判定フラグが「０」である（推定空燃比収束状態ではない）と判定された場合には、ステップ４０４以降の処理（気筒間インバランス故障の有無を判定する処理）を行うことなく、本ルーチンを終了する。
【００８０】
一方、上記ステップ４０３で、収束判定フラグが「１」である（推定空燃比収束状態である）と判定された場合には、ステップ４０４に進み、故障診断指標Ｖalueが故障判定値よりも大きい状態が所定時間以上継続したか否かを判定する。
【００８１】
このステップ４０４で、故障診断指標Ｖalueが故障判定値よりも大きい状態が所定時間以上継続していないと判定された場合には、ステップ４０５に進み、エンジン１１の気筒間インバランス故障無しと判定して、本ルーチンを終了する。
【００８２】
一方、上記ステップ４０４で、故障診断指標Ｖalueが故障判定値よりも大きい状態が所定時間以上継続したと判定された場合には、ステップ４０６に進み、エンジン１１の気筒間インバランス故障有りと判定して、本ルーチンを終了する。
【００８３】
以上説明した本実施例の補正量学習の実行例を図９を用いて説明する。
気筒別空燃比制御の実行条件が成立した時点ｔ1 で、各気筒の空燃比検出タイミング毎に検出された空燃比センサ３６の検出値に基づいて各気筒の空燃比を推定する気筒別空燃比推定を開始する。更に、空燃比センサ３６の検出値と推定空燃比とに基づいて観測残差ｅｒｒを算出する処理を開始する。
【００８４】
この観測残差ｅｒｒが気筒別空燃比制御の許可閾値Ｋ1on 以上のときには、気筒別空燃比制御の許可フラグを「０」に維持して気筒別空燃比制御を禁止すると共に収束判定許可フラグを「０」に維持して推定空燃比の収束判定を禁止する。
【００８５】
その後、観測残差ｅｒｒが気筒別空燃比制御の許可閾値Ｋ1on よりも小さくなった時点ｔ2 で、気筒別空燃比制御の許可フラグを「１」にセットして気筒別空燃比制御を許可すると共に収束判定許可フラグを「１」にセットして推定空燃比の収束判定を許可する。
【００８６】
気筒別空燃比制御が許可されると、気筒別空燃比制御の開始前の所定期間Ａにおける各気筒の推定空燃比に基づいて各気筒の初期推定空燃比を気筒毎に算出する。更に、各気筒の初期推定空燃比に応じて各気筒の収束判定閾値を気筒毎に設定すると共に、初期推定空燃比（例えば各気筒の初期推定空燃比の最大値）に応じて収束判定時間を設定する。
【００８７】
初期推定空燃比の算出が終了した時点ｔ3 で、気筒別空燃比制御を開始する。その後、エンジン１１の運転領域の変化等によって観測残差ｅｒｒが気筒別空燃比制御の禁止閾値Ｋ1off以上になった場合には、その時点ｔ4 で、気筒別空燃比制御の許可フラグを「０」にリセットして気筒別空燃比制御を禁止すると共に収束判定許可フラグを「０」にリセットして推定空燃比の収束判定を禁止する。
【００８８】
その後、観測残差ｅｒｒが気筒別空燃比制御の許可閾値Ｋ1on よりも小さくなった時点ｔ5 で、再び気筒別空燃比制御の許可フラグを「１」にセットして気筒別空燃比制御を許可すると共に収束判定許可フラグを「１」にセットして推定空燃比の収束判定を許可する。
【００８９】
その後、各気筒の推定空燃比が収束判定閾値よりも目標値側になった時点ｔ6 で、収束判定カウンタのカウント値をインクリメントする処理を開始する。この収束判定カウンタのカウント値が収束判定時間に達するまでは、推定空燃比収束状態ではないと判定して収束判定フラグを「０」に維持して、燃料補正量学習値の算出を禁止する。
【００９０】
その後、収束判定カウンタのカウント値が収束判定時間以上になった時点ｔ7 （つまり各気筒の推定空燃比が収束判定閾値よりも目標値側になった状態が収束判定時間以上継続した時点）で、推定空燃比収束状態であると判定して収束判定フラグを「１」にセットして、燃料補正量学習値の算出を許可する。燃料補正量学習値の算出が許可されると、各気筒の燃料補正量に基づいて各気筒の燃料補正量学習値を気筒毎に算出する処理を開始する。
【００９１】
その後、ＩＧスイッチがＯＮからＯＦＦに切り換わった時点ｔ8 で、各気筒の燃料補正量学習値をＥＣＵ３９のバックアップ用メモリに記憶する。その後、ＩＧスイッチがＯＦＦからＯＮに切り換わった時点ｔ9 で、ＥＣＵ３９のバックアップ用メモリに記憶されている各気筒の燃料補正量学習値を気筒別空燃比制御に反映させる（各気筒の燃料補正量学習値に基づいて各気筒の燃料補正量を算出する）。
【００９２】
以上説明した本実施例では、推定空燃比収束状態（各気筒の推定空燃比が収束した状態）であるか否かを判定し、推定空燃比収束状態であると判定されるまで燃料補正量学習値の算出を禁止し、推定空燃比収束状態であると判定されているときに燃料補正量学習値の算出を行うようにしている。これにより、空燃比検出タイミングのずれによって各気筒の推定空燃比が収束していないときの燃料補正量（つまり各気筒の空燃比を適正に制御できていないときの燃料補正量）に基づいて燃料補正量学習値を算出してしまうことを回避することができ、空燃比検出タイミングのずれによる燃料補正量学習値の誤学習を防止することができる。
【００９３】
また、本実施例では、各気筒の推定空燃比が収束判定閾値よりも目標値側になった状態が収束判定時間以上継続したときに推定空燃比収束状態であると判定するようにしたので、各気筒の推定空燃比が一時的に収束判定閾値よりも目標値側になっただけで、推定空燃比収束状態であると判定してしまうことを防止することができる。
【００９４】
更に、本実施例では、気筒別空燃比制御の開始前の推定空燃比に基づいて初期推定空燃比を算出し、この初期推定空燃比に応じて収束判定閾値と収束判定時間を設定するようにしている。このようにすれば、初期推定空燃比に応じて推定空燃比収束状態の判定条件（収束判定閾値や収束判定時間）を変化させて判定条件を初期推定空燃比に対応した適正な値に設定することができる（例えば、初期推定空燃比が小さいときには、燃料補正量学習値を直ぐに学習する必要がないため、収束判定時間を長くする）。
【００９５】
また、本実施例では、空燃比センサ３６の検出値と推定空燃比とに基づいて観測残差を算出し、この観測残差が所定閾値よりも小さいときに推定空燃比収束状態であるか否かを判定するようにしたので、各気筒の推定空燃比の推定精度がある程度高くなってから、各気筒の推定空燃比に基づいて推定空燃比収束状態であるか否かを精度良く判定することができる。
【００９６】
更に、本実施例では、推定空燃比収束状態であると判定した後に推定空燃比が発散した場合には、判定をリセット（推定空燃比収束状態ではないと判定）するようにしている。このようにすれば、一旦、推定空燃比収束状態であると判定した場合でも、その後、推定空燃比が発散した場合には、判定をリセット（推定空燃比収束状態ではないと判定）して、再び燃料補正量学習値の算出を禁止することができ、燃料補正量学習値の誤学習を確実に防止することができる。
【００９７】
また、本実施例では、ＩＧスイッチのオフ時に燃料補正量学習値をバックアップ用メモリに記憶するようにしたので、次回のＩＧスイッチのオン直後で、まだ燃料補正量学習値の算出前でも、バックアップ用メモリに記憶された燃料補正量学習値を気筒別空燃比制御に反映させることができる。
【００９８】
更に、本実施例では、推定空燃比収束状態であると判定されたときに推定空燃比の変化量と燃料補正量の変化量との比に基づいて定常ゲインＫdcを算出し、この定常ゲインＫdcを気筒別空燃比推定モデルに反映させるようにしたので、気筒別空燃比推定モデルのゲインを適正値に設定することができる。
【００９９】
また、本実施例では、推定空燃比収束状態であると判定された後に、燃料補正量に基づいてエンジン１１の気筒間インバランス故障（例えば燃料噴射量や吸入空気量等の気筒間ばらつきが許容レベルを越えた状態）の有無を判定する気筒間インバランス故障診断を行うようにしている。このようにすれば、各気筒の推定空燃比が収束した状態での燃料補正量（つまり各気筒の空燃比を適正に制御できているときの燃料補正量）に基づいて気筒間インバランス故障診断を行うことができ、気筒間インバランス故障診断の故障診断精度を向上させることができる。
【０１００】
尚、上記実施例では、ＩＧスイッチのオフ時に燃料補正量学習値をバックアップ用メモリに記憶するようにしたが、これに限定されず、エンジン運転中に燃料補正量学習値を算出（更新）する毎に又は所定期間経過毎に、燃料補正量学習値をバックアップ用メモリに記憶するようにしても良い。
【０１０１】
また、上記実施例では、気筒別空燃比制御の開始前の推定空燃比に基づいて初期推定空燃比を算出するようにしたが、これに限定されず、気筒別空燃比制御の開始直後の推定空燃比に基づいて初期推定空燃比を算出するようにしても良い。この場合、初期推定空燃比の算出が終了するまで気筒別補正値の変化量を制限するようにしても良い。
【０１０２】
また、空燃比検出タイミングのずれ有りと判定されたときに、空燃比検出タイミングを補正する方法は、上記実施例で説明した方法に限定されず、適宜変更しても良い。
また、上記実施例では、本発明を４気筒エンジンに適用したが、これに限定されず、２気筒エンジンや３気筒エンジン或は５気筒以上のエンジンに本発明を適用しても良い。
【０１０３】
その他、本発明は、吸気ポート噴射式エンジンに限定されず、筒内噴射式エンジンや、吸気ポート噴射用の燃料噴射弁と筒内噴射用の燃料噴射弁の両方を備えたデュアル噴射式のエンジンにも適用して実施できる。
【符号の説明】
【０１０４】
１１…エンジン（内燃機関）、１２…吸気管、３４…排気管、３４ａ…排気集合部、３６…空燃比センサ、３９…ＥＣＵ（気筒別空燃比推定手段，気筒別空燃比制御手段，学習手段，収束判定手段，学習禁止手段，初期値算出手段，残差算出手段，ゲイン反映手段，故障診断手段）
【図１】
2015059450.tif 000004
【図２】
2015059450.tif 000005
【図３】
2015059450.tif 000006
【図４】
2015059450.tif 000007
【図５】
2015059450.tif 000008
【図６】
2015059450.tif 000009
【図７】
2015059450.tif 000010
【図８】
2015059450.tif 000011
【図９】
2015059450.tif 000012