(57)【要約】【課題】気筒別空燃比制御を行うシステムにおいて、メインＦ／Ｂ（フィードバック）補正値の変動による気筒間の空燃比ばらつきの増大を抑制できるようにする。【解決手段】空燃比センサ３６の出力に基づいて排出ガスの空燃比を目標空燃比に一致させるようにメインＦ／Ｂ補正値を算出して各気筒の空燃比を一律に補正する。更に、空燃比センサ３６の検出値に基づいて各気筒の空燃比を気筒毎に推定し、各気筒の推定空燃比に基づいて各気筒の空燃比を気筒毎に制御する。その際、気筒別空燃比推定による初期推定空燃比の大きさに基づいてエンジン１１の気筒間インバランス故障の可能性有り（気筒間の空燃比ばらつきが比較的大きい）か否かを判定し、気筒間インバランス故障の可能性有りと判定され且つエンジン１１の負荷が所定値以上のときに、メインＦ／Ｂ補正値の変化量を所定のガード値で制限して、メインＦ／Ｂ補正値の変動を抑制する。【選択図】図１
2016044576.tif 000002
【特許請求の範囲】
【請求項１】
内燃機関（１１）の各気筒の排出ガスが合流して流れる排気集合部（３４ａ）に該排出ガスの空燃比を検出する空燃比センサ（３６）を設置し、前記空燃比センサ（３６）の出力に基づいて前記排出ガスの空燃比を目標空燃比に一致させるようにメインフィードバック補正値を算出して前記各気筒の空燃比を一律に補正するメインフィードバック制御手段（３９）と、前記各気筒の空燃比検出タイミング毎に検出された前記空燃比センサ（３６）の検出値に基づいて前記各気筒の空燃比を気筒毎に推定する気筒別空燃比推定を実行する気筒別空燃比推定手段（３９）と、前記各気筒の推定空燃比に基づいて前記各気筒の空燃比を気筒毎に制御する気筒別空燃比制御を実行する気筒別空燃比制御手段（３９）とを備えた内燃機関の気筒別空燃比制御装置において、
前記内燃機関（１１）の気筒間インバランス故障の可能性有りか否かを判定する判定手段（３９）と、
前記気筒間インバランス故障の可能性有りと判定され且つ前記内燃機関（１１）の負荷が所定値以上のときに、前記メインフィードバック補正値の変化量を所定のガード値で制限する制限手段（３９）と
を備えていることを特徴とする内燃機関の気筒別空燃比制御装置。
【請求項２】
前記判定手段（３９）は、前記気筒別空燃比推定による初期推定空燃比の大きさに基づいて前記気筒間インバランス故障の可能性有りか否かを判定することを特徴とする請求項１に記載の内燃機関の気筒別空燃比制御装置。
【請求項３】
前記判定手段（３９）は、前記気筒別空燃比制御による気筒別補正値の大きさに基づいて前記気筒間インバランス故障の可能性有りか否かを判定することを特徴とする請求項１又は２に記載の内燃機関の気筒別空燃比制御装置。
【請求項４】
前記判定手段（３９）は、前記空燃比センサ（３６）の出力の１サイクル間の振幅値に基づいて前記気筒間インバランス故障の可能性有りか否かを判定することを特徴とする請求項１乃至３のいずれかに記載の内燃機関の気筒別空燃比制御装置。
【請求項５】
前記判定手段（３９）は、前記気筒間インバランス故障の可能性有りと判定した後、前記各気筒の推定空燃比が収束したと判定されたときに、前記気筒間インバランス故障の可能性有りの判定をリセットすることを特徴とする請求項１乃至４のいずれかに記載の内燃機関の気筒別空燃比制御装置。
【請求項６】
前記判定手段（３９）は、前記気筒間インバランス故障の可能性有りと判定した後、前記各気筒の推定空燃比が所定値よりも目標値側になった状態が所定時間以上継続したときに、前記気筒間インバランス故障の可能性有りの判定をリセットすることを特徴とする請求項１乃至５のいずれかに記載の内燃機関の気筒別空燃比制御装置。
【請求項７】
前記制限手段（３９）は、前記メインフィードバック補正値の変化量の制限中に、前記メインフィードバック補正値の学習更新速度を低下させる又は前記メインフィードバック補正値の学習を停止することを特徴とする請求項１乃至６のいずれかに記載の内燃機関の気筒別空燃比制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、内燃機関の各気筒の空燃比を推定し、その推定空燃比に基づいて各気筒の空燃比を制御する内燃機関の気筒別空燃比制御装置に関する発明である。
【背景技術】
【０００２】
従来より、内燃機関の排出ガス浄化用の触媒の排出ガス浄化率を高めることを目的として、排気管に設置した空燃比センサの出力に基づいて排出ガスの空燃比を目標空燃比に一致させるようにメインフィードバック補正値を算出して各気筒の空燃比（例えば燃料噴射量）を一律に補正するメインフィードバック制御を行うようにしたものがある。
【０００３】
更に、内燃機関の気筒間の空燃比ばらつきを小さくする技術として、例えば、特許文献１（特開２０１３−２５３５９３号公報）に記載されているように、空燃比センサの検出値に基づいて各気筒の空燃比を気筒毎に推定し、各気筒の推定空燃比に基づいて各気筒の空燃比を気筒毎に制御する気筒別空燃比制御を行うようにしたものがある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１３−２５３５９３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、内燃機関の気筒間の空燃比ばらつきが比較的大きいときに、内燃機関の負荷が大きい（つまり排気流速が速い）と、空燃比センサ出力の振幅が大きくなって空燃比センサ出力が大きく変動する。このような場合、メインフィードバック制御によるメインフィードバック補正値が大きく変動するため、これが原因で気筒間の空燃比ばらつきが増大してしまうことがある。このため、気筒別空燃比制御により気筒間の空燃比ばらつきを小さくする（各気筒の推定空燃比を収束させる）ことが困難になり、排気エミッションの悪化を招く可能性がある。
【０００６】
そこで、本発明が解決しようとする課題は、メインフィードバック補正値の変動による気筒間の空燃比ばらつきの増大を抑制することができる内燃機関の気筒別空燃比制御装置を提供することにある。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、請求項１に係る発明は、内燃機関（１１）の各気筒の排出ガスが合流して流れる排気集合部（３４ａ）に該排出ガスの空燃比を検出する空燃比センサ（３６）を設置し、空燃比センサ（３６）の出力に基づいて排出ガスの空燃比を目標空燃比に一致させるようにメインフィードバック補正値を算出して各気筒の空燃比を一律に補正するメインフィードバック制御手段（３９）と、各気筒の空燃比検出タイミング毎に検出された空燃比センサ（３６）の検出値に基づいて各気筒の空燃比を気筒毎に推定する気筒別空燃比推定を実行する気筒別空燃比推定手段（３９）と、各気筒の推定空燃比に基づいて各気筒の空燃比を気筒毎に制御する気筒別空燃比制御を実行する気筒別空燃比制御手段（３９）とを備えた内燃機関の気筒別空燃比制御装置において、内燃機関（１１）の気筒間インバランス故障の可能性有りか否かを判定する判定手段（３９）と、気筒間インバランス故障の可能性有りと判定され且つ内燃機関（１１）の負荷が所定値以上のときに、メインフィードバック補正値の変化量を所定のガード値で制限する制限手段（３９）とを備えた構成としたものである。
【０００８】
気筒間インバランス故障の可能性有り（つまり気筒間の空燃比ばらつきが比較的大きい）と判定され且つ内燃機関の負荷が所定値以上（つまり排気流速が比較的速い状態）のときには、空燃比センサ出力の振幅が大きくなって、メインフィードバック補正値が大きく変動する可能性がある。
【０００９】
従って、気筒間インバランス故障の可能性有りと判定され且つ内燃機関の負荷が所定値以上のときに、メインフィードバック補正値の変化量を所定のガード値で制限することで、メインフィードバック補正値の変動を適度に抑制して、メインフィードバック補正値の変動による気筒間の空燃比ばらつきの増大を抑制することができる。これにより、気筒間インバランス故障の可能性有り（気筒間の空燃比ばらつきが比較的大きい）と判定された場合でも、気筒別空燃比制御により速やかに気筒間の空燃比ばらつきを小さくする（各気筒の推定空燃比を収束させる）ことが可能となり、排気エミッションの悪化を抑制することができる。
【図面の簡単な説明】
【００１０】
【図１】図１は本発明の一実施例におけるエンジン制御システムの概略構成を示す図である。
【図２】図２は空燃比制御機能を説明するブロック図である。
【図３】図３はメインＦ／Ｂ制御ルーチンの処理の流れを示すフローチャートである。
【図４】図４は気筒別空燃比推定ルーチンの処理の流れを示すフローチャートである。
【図５】図５は気筒別空燃比制御及び収束判定ルーチンの処理の流れを示すフローチャート（その１）である。
【図６】図６は気筒別空燃比制御及び収束判定ルーチンの処理の流れを示すフローチャート（その２）である。
【図７】図７は実施例１のインバランス故障可能性判定ルーチンの処理の流れを示すフローチャートである。
【図８】図８は実施例１の制御の実行例を示すタイムチャートである。
【図９】図９は実施例１の効果を示すタイムチャートである。
【図１０】図１０は実施例２のインバランス故障可能性判定ルーチンの処理の流れを示すフローチャートである。
【図１１】図１１は実施例３のインバランス故障可能性判定ルーチンの処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明を実施するための形態を具体化した幾つかの実施例を説明する。
【実施例１】
【００１２】
本発明の実施例１を図１乃至図９に基づいて説明する。
まず、図１に基づいてエンジン制御システム全体の概略構成を説明する。
内燃機関である例えば直列４気筒のエンジン１１は、第１気筒＃１〜第４気筒＃４の四つの気筒を有し、このエンジン１１の吸気管１２の最上流部には、エアクリーナ１３が設けられ、このエアクリーナ１３の下流側に、吸入空気量を検出するエアフローメータ１４が設けられている。このエアフローメータ１４の下流側には、モータ等によって開度調節されるスロットルバルブ１５と、このスロットルバルブ１５の開度（スロットル開度）を検出するスロットル開度センサ１６とが設けられている。
【００１３】
更に、スロットルバルブ１５の下流側には、サージタンク１７が設けられ、このサージタンク１７には、吸気管圧力を検出する吸気管圧力センサ１８が設けられている。また、サージタンク１７には、エンジン１１の各気筒に空気を導入する吸気マニホールド１９が設けられ、各気筒の吸気マニホールド１９に接続された吸気ポート又はその近傍に、それぞれ吸気ポートに燃料を噴射する燃料噴射弁２０が取り付けられている。或は、エンジン１１の各気筒に、それぞれ筒内に燃料を直接噴射する燃料噴射弁２０が取り付けられているようにしても良い。エンジン運転中は、燃料タンク２１内の燃料が燃料ポンプ２２によりデリバリパイプ２３に送られ、各気筒の噴射タイミング毎に各気筒の燃料噴射弁２０から燃料が噴射される。デリバリパイプ２３には、燃料圧力（燃圧）を検出する燃圧センサ２４が取り付けられている。
【００１４】
また、エンジン１１には、吸気バルブ２５と排気バルブ２６のバルブタイミング（開閉タイミング）をそれぞれ変化させる可変バルブタイミング機構２７，２８が設けられている。更に、エンジン１１には、吸気カム軸２９と排気カム軸３０の回転に同期してカム角信号を出力する吸気カム角センサ３１と排気カム角センサ３２が設けられていると共に、エンジン１１のクランク軸の回転に同期して所定クランク角毎（例えば３０ＣＡ毎）にクランク角信号のパルスを出力するクランク角センサ３３が設けられている。
【００１５】
一方、エンジン１１の排気管３４のうちの各気筒の排出ガスが合流して流れる排気集合部３４ａ（各気筒の排気マニホールド３５が集合する部分又はそれよりも下流側）には、排出ガスの空燃比を検出する空燃比センサ３６が設けられている。この空燃比センサ３６の下流側に、排出ガス中のＣＯ，ＨＣ，ＮＯX 等を浄化する三元触媒等の触媒３７が設けられている。また、エンジン１１のシリンダブロックには、冷却水温を検出する冷却水温センサ３８が取り付けられている。
【００１６】
これら各種センサの出力は、電子制御ユニット（以下「ＥＣＵ」と表記する）３９に入力される。このＥＣＵ３９は、マイクロコンピュータを主体として構成され、内蔵されたＲＯＭ（記憶媒体）に記憶された各種のエンジン制御用のプログラムを実行することで、エンジン運転状態に応じて、燃料噴射量、点火時期、スロットル開度（吸入空気量）等を制御する。
【００１７】
その際、ＥＣＵ３９は、後述する図３のメインＦ／Ｂ制御ルーチンを実行することで、所定のメインＦ／Ｂ制御実行条件が成立したときに、空燃比センサ３６の出力に基づいて排出ガスの空燃比を目標空燃比に一致させるようにメインＦ／Ｂ補正値を算出して各気筒の空燃比（例えば燃料噴射量）を一律に補正するメインＦ／Ｂ制御を実行する。ここで、「Ｆ／Ｂ」は「フィードバック」を意味する（以下、同様）。
【００１８】
具体的には、図２に示すように、まず、空燃比偏差算出部４０で、検出空燃比（空燃比センサ３６で検出した排出ガスの空燃比）と目標空燃比との偏差を算出し、メインＦ／Ｂ制御部４１で、検出空燃比と目標空燃比との偏差が小さくなるようにメインＦ／Ｂ補正値を算出する。そして、噴射量算出部４２で、エンジン回転速度や負荷（吸気管圧力や吸入空気量等）に基づいて算出されたベース噴射量やメインＦ／Ｂ補正値等に基づいて燃料噴射量を算出し、その燃料噴射量に基づいて各気筒の燃料噴射弁２０を制御する。
【００１９】
更に、ＥＣＵ３９は、後述する図４乃至図６の各ルーチンを実行することで、各気筒の空燃比検出タイミング毎に検出された空燃比センサ３６の検出値に基づいて各気筒の空燃比を気筒毎に推定する気筒別空燃比推定を実行し、各気筒の推定空燃比に基づいて各気筒の空燃比を気筒毎に制御する気筒別空燃比制御を実行する。
【００２０】
具体的には、図２に示すように、まず、気筒別空燃比推定部４３で、後述する気筒別空燃比推定モデルを用いて空燃比センサ３６の検出値（排気集合部３４ａを流れる排出ガスの実空燃比）に基づいて各気筒の空燃比を気筒毎に推定し、基準空燃比算出部４４で、全気筒の推定空燃比の平均値を算出して、その平均値を基準空燃比に設定する。この後、気筒別空燃比偏差算出部４５で、各気筒の推定空燃比と基準空燃比との偏差を気筒毎に算出し、気筒別空燃比制御部４６で、各気筒の推定空燃比と基準空燃比との偏差が小さくなるように気筒別補正値として例えば燃料補正量（燃料噴射量の補正量）を気筒毎に算出する。その算出結果に基づいて各気筒の燃料噴射量を気筒毎に補正することで、各気筒に供給する混合気の空燃比を気筒毎に補正して気筒間の空燃比ばらつきを小さくする。
【００２１】
ここで、空燃比センサ３６の検出値（排気集合部３４ａを流れる排出ガスの実空燃比）に基づいて各気筒の空燃比を推定するモデル（以下「気筒別空燃比推定モデル」という）の具体例を説明する。
【００２２】
排気集合部３４ａにおけるガス交換に着目して、空燃比センサ３６の検出値を、排気集合部３４ａにおける各気筒の推定空燃比の履歴と空燃比センサ３６の検出値の履歴とにそれぞれ所定の重みを乗じて加算したものとしてモデル化し、このモデルを用いて各気筒の空燃比を推定するようにしている。この際、オブザーバとしてはカルマンフィルタを用いる。
【００２３】
より具体的には、排気集合部３４ａにおけるガス交換のモデルを次の（１）式にて近似する。
ｙ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) ，(2) がある。
(1) 空燃比センサ３６が活性状態であること
(2) 空燃比センサ３６が異常（故障）と判定されていないこと
【００４３】
これら二つの条件(1) と(2) を両方とも満したときにメインＦ／Ｂ制御の実行条件が成立し、いずれか一つでも満たさない条件があれば、実行条件が不成立となる。実行条件が不成立の場合は、ステップ１０２以降の処理を行うことなく、本ルーチンを終了する。
【００４４】
一方、実行条件が成立している場合は、ステップ１０２に進み、エンジン１１の負荷（例えば吸入空気量や吸気管圧力）が所定値以上か否かを判定する。この所定値は、例えば、気筒間インバランス故障の可能性有りの場合に、空燃比センサ３６出力の振幅が比較的大きくなるような値である。
【００４５】
このステップ１０２で、エンジン１１の負荷が所定値以上と判定された場合には、ステップ１０３に進み、気筒間インバランス故障の可能性有りか否かを、後述するインバランス故障可能性フラグが「１」であるか否かによって判定する。
【００４６】
上記ステップ１０２でエンジン１１の負荷が所定値以上と判定され且つ上記ステップ１０３で気筒間インバランス故障の可能性有り（インバランス故障可能性フラグ＝１）と判定された場合には、ステップ１０４に進み、メインＦ／Ｂ補正値の変化量を制限するための変化量ガード値を所定値に設定する。
【００４７】
一方、上記ステップ１０２でエンジン１１の負荷が所定値よりも小さいと判定された場合、又は、上記ステップ１０３で気筒間インバランス故障の可能性無し（インバランス故障可能性フラグ＝０）と判定された場合には、ステップ１０５に進み、変化量ガード値を無しにする（設定しない）。
【００４８】
この後、ステップ１０６に進み、検出空燃比（空燃比センサ３６で検出した排出ガスの空燃比）と目標空燃比との偏差が小さくなるようにメインＦ／Ｂ補正値を算出する。
この後、ステップ１０７に進み、今回のメインＦ／Ｂ補正値と所定期間前（例えば１燃焼前又は１ＴＤＣ前）のメインＦ／Ｂ補正値との差を、メインＦ／Ｂ補正値の変化量として算出する。
【００４９】
この後、ステップ１０８に進み、上記ステップ１０４で変化量ガード値を設定した場合には、メインＦ／Ｂ補正値の変化量を変化量ガード値で制限する。具体的には、メインＦ／Ｂ補正値の変化量が変化量ガード値よりも大きい場合には、メインＦ／Ｂ補正値の変化量を変化量ガード値でガード処理して、メインＦ／Ｂ補正値の変化量を変化量ガード値に設定する（メインＦ／Ｂ補正値の変化量＝変化量ガード値）。一方、メインＦ／Ｂ補正値の変化量が変化量ガード値以下の場合には、メインＦ／Ｂ補正値の変化量をそのまま採用する。尚、上記ステップ１０５で変化量ガード値を無しにした場合には、メインＦ／Ｂ補正値の変化量をそのまま採用する。
【００５０】
この後、ステップ１０９に進み、所定期間前のメインＦ／Ｂ補正値にメインＦ／Ｂ補正値の変化量を加算して、最終的なメインＦ／Ｂ補正値を求める。尚、上記ステップ１０５で変化量ガード値を無しにした場合には、上記ステップ１０６で算出したメインＦ／Ｂ補正値をそのまま最終的なメインＦ／Ｂ補正値として採用するようにしても良い。
【００５１】
この後、ステップ１１０に進み、最終的なメインＦ／Ｂ補正値に基づいてメインＦ／Ｂ補正値の学習値を算出する。具体的には、メインＦ／Ｂ補正値をフィルタ処理（例えば、なまし処理、平均化処理、一次遅れ処理）してメインＦ／Ｂ補正値の学習値を求める。このメインＦ／Ｂ補正値の学習値をＥＣＵ３９のバックアップＲＡＭ（図示せず）等の書き換え可能な不揮発性メモリ（ＥＣＵ３９の電源オフ中でも記憶データを保持する書き換え可能なメモリ）に記憶することで、メインＦ／Ｂ補正値を学習する。この際、メインＦ／Ｂ補正値の変化量の制限中（つまり上記ステップ１０４で変化量ガード値を設定した場合）には、メインＦ／Ｂ補正値の学習更新速度を低下させる（メインＦ／Ｂ補正値の学習値を更新する間隔を通常よりも長くする）又はメインＦ／Ｂ補正値の学習を停止する（メインＦ／Ｂ補正値の学習値の算出を停止する）。
【００５２】
［気筒別空燃比推定ルーチン］
図４に示す気筒別空燃比推定ルーチンは、クランク角センサ３３の出力パルスに同期して所定クランク角毎（例えば３０ＣＡ毎）に起動され、特許請求の範囲でいう気筒別空燃比推定手段としての役割を果たす。
【００５３】
本ルーチンが起動されると、まず、ステップ２０１で、気筒別空燃比制御の実行条件が成立しているか否かを判定する。この気筒別空燃比制御の実行条件としては、例えば、次の条件(1) 〜(3) がある。
(1) 空燃比センサ３６が活性状態であること
(2) 空燃比センサ３６が異常（故障）と判定されていないこと
(3) エンジン運転領域（例えばエンジン回転速度と吸気管圧力）が空燃比推定精度を確保できる運転領域であること
【００５４】
これら三つの条件(1) 〜(3) を全て満したときに気筒別空燃比制御の実行条件が成立し、いずれか１つでも満たさない条件があれば、実行条件が不成立となる。実行条件が不成立の場合は、ステップ２０２以降の処理を行うことなく、本ルーチンを終了する。
【００５５】
一方、実行条件が成立している場合は、ステップ２０２に進み、各気筒の空燃比検出タイミング（空燃比センサ３６の出力のサンプルタイミング）を、その時点のエンジン１１の負荷（例えば吸気管圧力）に応じてマップにより設定する。尚、各気筒の空燃比検出タイミングをエンジン１１の負荷とエンジン回転速度に応じてマップにより設定しても良い。この空燃比検出タイミングを設定するマップは、図示しない空燃比検出タイミング補正用のルーチン（例えばＬｏｃａｌ学習実行ルーチンやＧｌｏｂａｌ学習実行ルーチン）によって学習補正される。
【００５６】
この後、ステップ２０３に進み、現在のクランク角が上記ステップ２０２で設定した空燃比検出タイミングであるか否かを判定し、空燃比検出タイミングでなければ、以降の処理を行うことなく、本ルーチンを終了する。
【００５７】
これに対して、現在のクランク角が上記ステップ２０２で設定した空燃比検出タイミングであれば、ステップ２０４に進み、空燃比センサ３６の出力（空燃比検出値）を読み込む。この後、ステップ２０５に進み、前記気筒別空燃比推定モデルを用いて今回の空燃比推定対象となる気筒の空燃比を空燃比センサ３６の検出値に基づいて推定する。
【００５８】
［気筒別空燃比制御及び収束判定ルーチン］
図５及び図６に示す気筒別空燃比制御及び収束判定ルーチンは、クランク角センサ３３の出力パルスに同期して所定クランク角毎（例えば３０ＣＡ毎）に起動され、特許請求の範囲でいう気筒別空燃比制御手段としての役割を果たす。本ルーチンが起動されると、まず、ステップ３０１で、気筒別空燃比制御の実行条件（前記図４のステップ２０１と同じ条件）が成立しているか否かを判定する。実行条件が不成立の場合は、ステップ３０２以降の処理を行うことなく、本ルーチンを終了する。
【００５９】
一方、実行条件が成立している場合は、ステップ３０２に進み、空燃比センサ３６の検出値φ（排気集合部３４ａを流れる排出ガスの実空燃比）と推定空燃比φ＾とに基づいて観測残差ｅｒｒを次の（４）式により算出する。その際、空燃比センサ３６の検出値φの振幅（目標空燃比 tφとの差）を用いて観測残差ｅｒｒを正規化する。尚、空燃比センサ３６の検出値φ、推定空燃比φ＾、目標空燃比 tφは、それぞれ等量比（空気過剰率の逆数）で算出される。
【００６０】
【数１】
2016044576.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が発散した場合には、ステップ３２０に進み、判定をリセットする。つまり、推定空燃比収束状態ではないと判定して収束判定フラグを「０」にリセットする。
【００８１】
［インバランス故障可能性判定ルーチン］
図７に示すインバランス故障可能性判定ルーチンは、クランク角センサ３３の出力パルスに同期して所定クランク角毎（例えば３０ＣＡ毎）に起動され、特許請求の範囲でいう判定手段としての役割を果たす。
【００８２】
本ルーチンが起動されると、まず、ステップ４０１で、後述するインバランス故障可能性フラグが「０」であるか否かを判定する。このステップ４０１で、インバランス故障可能性フラグが「０」であると判定された場合には、ステップ４０２に進み、各気筒の初期推定空燃比initφ＾#iの絶対値のうちの最大値ｍａｘ［ａｂｓ（初期推定空燃比）］が所定値Ａ1 以上であるか否かを判定する。
【００８３】
このステップ４０２で、最大値ｍａｘ［ａｂｓ（初期推定空燃比）］が所定値Ａ1 よりも小さいと判定された場合には、ステップ４０６に進み、気筒間インバランス故障の可能性無しと判定して、インバランス故障可能性フラグを「０」に維持したまま、本ルーチンを終了する。
【００８４】
一方、上記ステップ４０２で、最大値ｍａｘ［ａｂｓ（初期推定空燃比）］が所定値Ａ1 以上であると判定された場合には、ステップ４０３に進み、気筒間インバランス故障の可能性有り（気筒間の空燃比ばらつきが比較的大きい）と判定して、インバランス故障可能性フラグを「１」にセットした後、本ルーチンを終了する。
【００８５】
その後、上記ステップ４０１で、インバランス故障可能性フラグが「１」であると判定された場合には、ステップ４０４に進み、各気筒の推定空燃比が収束したか否かを、収束判定フラグが「１」であるか否かによって判定する。
【００８６】
このステップ４０４で、各気筒の推定空燃比が収束していない（収束判定フラグ＝０）と判定された場合には、ステップ４０５に進む。このステップ４０５で、各気筒の推定空燃比φ＾#iの絶対値のうちの最大値ｍａｘ［ａｂｓ（推定空燃比）］が所定値Ａ2 よりも小さい状態が所定時間以上継続した（つまり各気筒の推定空燃比が所定値Ａ2 よりも目標値側になった状態が所定時間以上継続した）か否かを判定する。ここで、所定値Ａ2 は、所定値Ａ1 と同じ値か又は所定値Ａ1 よりも小さい値に設定されている。
【００８７】
このステップ４０５で、最大値ｍａｘ［ａｂｓ（推定空燃比）］が所定値Ａ2 よりも小さい状態が所定時間以上継続していないと判定された場合には、インバランス故障可能性フラグを「１」に維持したまま、本ルーチンを終了する。
【００８８】
その後、上記ステップ４０４で各気筒の推定空燃比が収束した（収束判定フラグ＝１）と判定された場合、又は、上記ステップ４０５で最大値ｍａｘ［ａｂｓ（推定空燃比）］が所定値Ａ2 よりも小さい状態が所定時間以上継続したと判定された場合には、ステップ４０６に進む。このステップ４０６で、気筒間インバランス故障の可能性有りの判定をリセットして、気筒間インバランス故障の可能性無しと判定して、インバランス故障可能性フラグを「０」にリセットした後、本ルーチンを終了する。
【００８９】
以上説明した本実施例１の制御の実行例を図８を用いて説明する。
気筒別空燃比制御の実行条件が成立した時点ｔ1 で、各気筒の空燃比検出タイミング毎に検出された空燃比センサ３６の検出値に基づいて各気筒の空燃比を推定する気筒別空燃比推定を開始する。更に、空燃比センサ３６の検出値と推定空燃比とに基づいて観測残差ｅｒｒを算出する処理を開始する。
【００９０】
この観測残差ｅｒｒが気筒別空燃比制御の許可閾値Ｋ1on 以上のときには、気筒別空燃比制御の許可フラグを「０」に維持して気筒別空燃比制御を禁止すると共に収束判定許可フラグを「０」に維持して推定空燃比の収束判定を禁止する。
【００９１】
その後、観測残差ｅｒｒが気筒別空燃比制御の許可閾値Ｋ1on よりも小さくなった時点ｔ2 で、気筒別空燃比制御の許可フラグを「１」にセットして気筒別空燃比制御を許可すると共に収束判定許可フラグを「１」にセットして推定空燃比の収束判定を許可する。
【００９２】
気筒別空燃比制御が許可されると、気筒別空燃比制御の開始前の所定期間Ａにおける各気筒の推定空燃比に基づいて各気筒の初期推定空燃比を気筒毎に算出する。更に、各気筒の初期推定空燃比に応じて各気筒の収束判定閾値を気筒毎に設定すると共に、初期推定空燃比（例えば各気筒の初期推定空燃比の最大値）に応じて収束判定時間を設定する。
【００９３】
初期推定空燃比の算出が終了した時点ｔ3 で、気筒別空燃比制御を開始する。また、各気筒の初期推定空燃比の絶対値のうちの最大値ｍａｘ［ａｂｓ（初期推定空燃比）］が所定値Ａ1 以上であると判定された場合には、気筒間インバランス故障の可能性有り（気筒間の空燃比ばらつきが比較的大きい）と判定して、インバランス故障可能性フラグを「１」にセットする。
【００９４】
更に、気筒間インバランス故障の可能性有り（インバランス故障可能性フラグ＝１）と判定され且つエンジン１１の負荷が所定値以上のときには、変化量ガード値を設定し、この変化量ガード値でメインＦ／Ｂ補正値の変化量を制限する。これにより、メインＦ／Ｂ補正値の変化量が変化量ガード値よりも大きい場合には、メインＦ／Ｂ補正値の変化量を変化量ガード値でガード処理して、メインＦ／Ｂ補正値の変化量を変化量ガード値に設定する（メインＦ／Ｂ補正値の変化量＝変化量ガード値）。一方、メインＦ／Ｂ補正値の変化量が変化量ガード値以下の場合には、メインＦ／Ｂ補正値の変化量をそのまま採用する。
【００９５】
その後、各気筒の推定空燃比が収束判定閾値よりも目標値側になった時点ｔ4 で、収束判定カウンタのカウント値をインクリメントする処理を開始する。この収束判定カウンタのカウント値が収束判定時間に達するまでは、推定空燃比収束状態ではないと判定して収束判定フラグを「０」に維持する。
【００９６】
その後、収束判定カウンタのカウント値が収束判定時間以上になった時点ｔ5 で、推定空燃比収束状態であると判定して収束判定フラグを「１」にセットすると共に、気筒間インバランス故障の可能性有りの判定をリセットして、気筒間インバランス故障の可能性無しと判定して、インバランス故障可能性フラグを「０」にリセットする。これにより、メインＦ／Ｂ補正値の変化量の制限を終了（変化量ガード値による制限を解除）する。
【００９７】
以上説明した本実施例１では、エンジン１１の気筒間インバランス故障の可能性有りか否かを判定し、気筒間インバランス故障の可能性有りと判定され且つエンジン１１の負荷が所定値以上のときに、メインＦ／Ｂ補正値の変化量を変化量ガード値で制限するようにしている。これにより、図９に実線で示すように、メインＦ／Ｂ補正値の変動を適度に抑制して、メインＦ／Ｂ補正値の変動による気筒間の空燃比ばらつきの増大を抑制することができる。これにより、気筒間インバランス故障の可能性有り（気筒間の空燃比ばらつきが比較的大きい）と判定された場合でも、気筒別空燃比制御により速やかに気筒間の空燃比ばらつきを小さくする（各気筒の推定空燃比を収束させる）ことが可能となり、排気エミッションの悪化を抑制することができる。
【００９８】
また、本実施例１では、気筒間インバランス故障の可能性有りと判定した後、各気筒の推定空燃比が収束したと判定されたとき、又は、各気筒の推定空燃比が所定値よりも目標値側になった状態が所定時間以上継続したときに、気筒間インバランス故障の可能性有りの判定をリセットして、気筒間インバランス故障の可能性無しと判定するようにしている。このようにすれば、各気筒の推定空燃比が収束したと判定されるタイミングと、各気筒の推定空燃比が所定値よりも目標値側になった状態が所定時間以上継続したタイミングのうちの早い方のタイミングで、メインＦ／Ｂ補正値の変化量の制限を終了（変化量ガード値による制限を解除）して、通常のメインＦ／Ｂ制御に復帰することができる。
【００９９】
また、本実施例１では、メインＦ／Ｂ補正値の変化量の制限中（つまり変化量ガード値を設定した場合）には、メインＦ／Ｂ補正値の学習更新速度を低下させる又はメインＦ／Ｂ補正値の学習を停止するようにしている。このようにすれば、メインＦ／Ｂ補正値の変化量の制限中に、メインＦ／Ｂ補正値の変動が小さくなるのに対応して、メインＦ／Ｂ補正値の学習更新速度を低下させる又はメインＦ／Ｂ補正値の学習を停止して、ＥＣＵ３９の演算負荷を低減することができる。
【実施例２】
【０１００】
次に、図１０を用いて本発明の実施例２を説明する。但し、前記実施例１と実質的に同一部分については説明を省略又は簡略化し、主として前記実施例１と異なる部分について説明する。
【０１０１】
本実施例２では、ＥＣＵ３９により後述する図１０のインバランス故障可能性判定ルーチンを実行することで、気筒別空燃比制御による気筒別補正値の大きさ（例えば各気筒の気筒別補正値の絶対値のうちの最大値）に基づいて気筒間インバランス故障の可能性有りか否かを判定するようにしている。
【０１０２】
気筒間の空燃比ばらつきが小さければ、各気筒の気筒別補正値（燃料補正量Ｃmp#i）が所定範囲内に収まるが、気筒間の空燃比ばらつきが大きいと、各気筒の気筒別補正値が所定範囲内には収まらない（少なくとも一つの気筒の気筒別補正値が所定範囲外となる）。従って、気筒別補正値の大きさを監視すれば、気筒間インバランス故障の可能性有り（気筒間の空燃比ばらつきが比較的大きい）か否かを精度良く判定することができる。
【０１０３】
本実施例２で実行する図１０のルーチンは、前記実施例１で説明した図７のルーチンのステップ４０２の処理を、ステップ４０２ａの処理に変更したものであり、それ以外の各ステップの処理は図７と同じである。
【０１０４】
図１０のインバランス故障可能性判定ルーチンでは、ステップ４０１で、インバランス故障可能性フラグが「０」であると判定された場合には、ステップ４０２ａに進み、各気筒の気筒別補正値（燃料補正量Ｃmp#i）の絶対値のうちの最大値ｍａｘ［ａｂｓ（気筒別補正値）］が所定値以上であるか否かを判定する。
【０１０５】
このステップ４０２ａで、最大値ｍａｘ［ａｂｓ（気筒別補正値）］が所定値よりも小さいと判定された場合には、ステップ４０６に進み、気筒間インバランス故障の可能性無しと判定して、インバランス故障可能性フラグを「０」に維持する。
【０１０６】
一方、上記ステップ４０２ａで、最大値ｍａｘ［ａｂｓ（気筒別補正値）］が所定値以上であると判定された場合には、ステップ４０３に進み、気筒間インバランス故障の可能性有り（気筒間の空燃比ばらつきが比較的大きい）と判定して、インバランス故障可能性フラグを「１」にセットする。
【０１０７】
その後、上記ステップ４０１で、インバランス故障可能性フラグが「１」であると判定された場合には、ステップ４０４で、各気筒の推定空燃比が収束した（収束判定フラグ＝１）か否かを判定し、ステップ４０５で、最大値ｍａｘ［ａｂｓ（推定空燃比）］が所定値Ａ2 よりも小さい状態が所定時間以上継続したか否かを判定する。
【０１０８】
上記ステップ４０４で「Ｙｅｓ」と判定された場合、又は、上記ステップ４０５で「Ｙｅｓ」と判定された場合には、ステップ４０６に進み、気筒間インバランス故障の可能性有りの判定をリセットして、気筒間インバランス故障の可能性無しと判定して、インバランス故障可能性フラグを「０」にリセットする。
【０１０９】
以上説明した本実施例２においても前記実施例１とほぼ同様の効果を得ることができる。
【実施例３】
【０１１０】
次に、図１１を用いて本発明の実施例３を説明する。但し、前記実施例１と実質的に同一部分については説明を省略又は簡略化し、主として前記実施例１と異なる部分について説明する。
【０１１１】
本実施例３では、ＥＣＵ３９により後述する図１１のインバランス故障可能性判定ルーチンを実行することで、空燃比センサ３６の出力の１サイクル間の振幅値に基づいて気筒間インバランス故障の可能性有りか否かを判定するようにしている。
【０１１２】
気筒間の空燃比ばらつきが小さければ、空燃比センサ３６の出力の１サイクル間の振幅値が小さくなるが、気筒間の空燃比ばらつきが大きいと、空燃比センサ３６の出力の１サイクル間の振幅値が大きくなる。従って、空燃比センサ３６の出力の１サイクル間の振幅値を監視すれば、気筒間インバランス故障の可能性有り（気筒間の空燃比ばらつきが比較的大きい）か否かを精度良く判定することができる。
【０１１３】
本実施例３で実行する図１１のルーチンは、前記実施例１で説明した図７のルーチンのステップ４０２の処理を、ステップ４０２ｂの処理に変更したものであり、それ以外の各ステップの処理は図７と同じである。
【０１１４】
図１１のインバランス故障可能性判定ルーチンでは、ステップ４０１で、インバランス故障可能性フラグが「０」であると判定された場合には、ステップ４０２ｂに進み、空燃比センサ３６の出力の１サイクル間の振幅値が所定値以上であるか否かを判定する。ここで、空燃比センサ３６の出力の１サイクル間の振幅値は、例えば、空燃比センサ３６の出力の１サイクル間の最大値と最小値との差、或は、最大値と目標空燃比との差とする。
【０１１５】
このステップ４０２ｂで、振幅値が所定値よりも小さいと判定された場合には、ステップ４０６に進み、気筒間インバランス故障の可能性無しと判定して、インバランス故障可能性フラグを「０」に維持する。
【０１１６】
一方、上記ステップ４０２ｂで、振幅値が所定値以上であると判定された場合には、ステップ４０３に進み、気筒間インバランス故障の可能性有り（気筒間の空燃比ばらつきが比較的大きい）と判定して、インバランス故障可能性フラグを「１」にセットする。
【０１１７】
その後、上記ステップ４０１で、インバランス故障可能性フラグが「１」であると判定された場合には、ステップ４０４で、各気筒の推定空燃比が収束した（収束判定フラグ＝１）か否かを判定し、ステップ４０５で、最大値ｍａｘ［ａｂｓ（推定空燃比）］が所定値Ａ2 よりも小さい状態が所定時間以上継続したか否かを判定する。
【０１１８】
上記ステップ４０４で「Ｙｅｓ」と判定された場合、又は、上記ステップ４０５で「Ｙｅｓ」と判定された場合には、ステップ４０６に進み、気筒間インバランス故障の可能性有りの判定をリセットして、気筒間インバランス故障の可能性無しと判定して、インバランス故障可能性フラグを「０」にリセットする。
以上説明した本実施例３においても前記実施例１とほぼ同様の効果を得ることができる。
【０１１９】
尚、上記各実施例１〜３のインバランス故障可能性判定ルーチン（図７，１０，１１）のうちの二つ又は三つを組み合わせて実施するようにしても良い。具体的には、ステップ４０２，４０２ａ，４０２ｂの処理のうちの二つ又は三つを実施して、ステップ４０２，４０２ａ，４０２ｂのうちの二つ又は三つで「Ｙｅｓ」と判定された場合に、ステップ４０３に進み、気筒間インバランス故障の可能性有りと判定して、インバランス故障可能性フラグを「１」にセットする。
【０１２０】
また、上記各実施例１〜３のインバランス故障可能性判定ルーチン（図７，１０，１１）では、ステップ４０４，４０５の処理を実施するようにしたが、これに限定されず、ステップ４０４，４０５のうちの一方のみを実施する（つまりステップ４０４，４０５のうちの一方を省略する）ようにしても良い。
【０１２１】
また、上記各実施例１〜３では、気筒別空燃比制御の開始前の推定空燃比に基づいて初期推定空燃比を算出するようにしたが、これに限定されず、気筒別空燃比制御の開始直後の推定空燃比に基づいて初期推定空燃比を算出するようにしても良い。
【０１２２】
また、空燃比検出タイミングのずれ有りと判定されたときに、空燃比検出タイミングを補正する方法は、上記実施例で説明した方法に限定されず、適宜変更しても良い。
また、上記各実施例１〜３では、本発明を４気筒エンジンに適用したが、これに限定されず、２気筒エンジンや３気筒エンジン或は５気筒以上のエンジンに本発明を適用しても良い。
【符号の説明】
【０１２３】
１１…エンジン（内燃機関）、１２…吸気管、３４…排気管、３４ａ…排気集合部、３６…空燃比センサ、３９…ＥＣＵ（メインフィードバック制御手段，気筒別空燃比推定手段，気筒別空燃比制御手段，判定手段，制限手段）
【図１】
2016044576.tif 000004
【図２】
2016044576.tif 000005
【図３】
2016044576.tif 000006
【図４】
2016044576.tif 000007
【図５】
2016044576.tif 000008
【図６】
2016044576.tif 000009
【図７】
2016044576.tif 000010
【図８】
2016044576.tif 000011
【図９】
2016044576.tif 000012
【図１０】
2016044576.tif 000013
【図１１】
2016044576.tif 000014