(57)【要約】【課題】偶数気筒のエンジンなどにおいても、空燃比が最もずれている気筒をそのずれ方向とともに確実に特定できるようにする。【解決手段】コントロールユニット１６は、空燃比センサ１２の出力信号Rabfに含まれるエンジン２回転成分を離散フーリエ変換する２回転成分演算部１０１と、その位相を求める２回転成分位相演算部１０２と、この位相から、空燃比が最もずれている気筒の２つの候補を特定する空燃比ずれ気筒検出部１（１０３）と、を有する。さらに、クランク角センサ１５の検出信号から気筒別の角加速度を求める気筒別回転変動演算部１０４と、これから空燃比がずれている気筒を検出する空燃比ずれ気筒検出部２（１０５）と、を有する。空燃比ずれ気筒検出部３（１０６）では、双方の検出結果から、空燃比が最もずれている一つの気筒をそのずれ方向とともに特定する。【選択図】図３
2014088795.tif 000002
【特許請求の範囲】
【請求項１】
複数の気筒の排気管集合部に空燃比センサを備えるとともに、クランクシャフトの回転角を検出する回転角センサを備えてなる多気筒エンジンの制御装置において、
上記空燃比センサの出力信号に含まれるエンジン２回転成分の位相に基づいて、最も空燃比がずれている気筒の候補を特定する第１の手段と、
上記回転角センサの出力信号から気筒別の回転変動を検出する第２の手段と、
上記第１の手段と上記第２の手段の検出結果に基づいて、最も空燃比がずれている気筒を特定する第３の手段と、を備えたことを特徴とする多気筒エンジンの制御装置。
【請求項２】
上記第２の手段は、
気筒別の角加速度が最大の気筒を、空燃比が最もリッチな気筒とみなし、
気筒別の角加速度が最小の気筒を、空燃比が最もリーンな気筒とみなし、
上記第３の手段は、
上記第１の手段で特定した候補の中に、上記第２の手段による空燃比が最もリッチな気筒もしくは最もリーンな気筒があれば、当該気筒を最も空燃比がずれている気筒と決定する、ことを特徴とする請求項１に記載の多気筒エンジンの制御装置。
【請求項３】
上記第３の手段は、
上記第１の手段で特定した候補の中に、上記第２の手段による空燃比が最もリッチな気筒と最もリーンな気筒の双方が含まれる場合は、空燃比がリーンな気筒を、最も空燃比がずれている気筒と決定する、ことを特徴とする請求項２に記載の多気筒エンジンの制御装置。
【請求項４】
上記第１の手段は、
上記空燃比センサの出力信号を離散フーリエ変換して得たエンジン２回転成分の実数部と虚数部とからエンジン２回転成分の位相を求める、ことを特徴とする請求項１〜３のいずれかに記載の多気筒エンジンの制御装置。
【請求項５】
上記第１の手段は、
複数に分割した所定の位相の範囲毎に、エンジン２回転成分の位相が現れる頻度を求め、最も頻度が高い位相範囲に対応する一つないし複数の気筒を上記の候補とする、ことを特徴とする請求項１〜４のいずれかに記載の多気筒エンジンの制御装置。
【請求項６】
上記の位相の範囲が、エンジンの運転条件に応じて可変的に設定される、ことを特徴とする請求項６に記載の多気筒エンジンの制御装置。
【請求項７】
特定した最も空燃比がずれている気筒の空燃比のずれ量が小さくなるように、当該気筒の空燃比を補正する手段を備えたことを特徴とする請求項１〜６のいずれかに記載の多気筒エンジンの制御装置。
【請求項８】
上記エンジン２回転成分のパワーを演算する手段と、
このパワーを所定の閾値と比較する手段と、をさらに備え、
上記パワーが上記閾値以上の場合に最も空燃比がずれている気筒の特定を行う、ことを特徴とする請求項１〜７のいずれかに記載の多気筒エンジンの制御装置。
【請求項９】
上記エンジン２回転成分のパワーを演算する手段と、
このパワーを所定の第２の閾値と比較する手段と、
上記パワーが上記第２の閾値以上のときにエンジンの異常と報知する手段と、
をさらに備えたことを特徴とする請求項１〜８のいずれかに記載の多気筒エンジンの制御装置。
【請求項１０】
偶数気筒の排気管の集合部に上記空燃比センサが設けられている、ことを特徴とする請求項１〜９のいずれかに記載の多気筒エンジンの制御装置。
【請求項１１】
複数の気筒を有するエンジンにおいて、
排気管集合部に設けた空燃比センサの出力信号に含まれるエンジン２回転成分の位相と、回転角センサ出力信号から演算した気筒別の回転変動と、を用いてエンジン制御に関するパラメータを演算する手段、を備えたことを特徴とする多気筒エンジンの制御装置。
【請求項１２】
上記パラメータは、少なくとも一つの気筒の空燃比を補正するパラメータであることを特徴とする請求項１１に記載の多気筒エンジンの制御装置。
【請求項１３】
上記パラメータは、エンジン性能異常を報知する装置を作動させるパラメータであることを特徴とする請求項１１に記載の多気筒エンジンの制御装置。
【請求項１４】
上記エンジン２回転成分のパワーを演算する手段と、
このパワーを所定の閾値と比較する手段と、を備え、
上記パワーが上記閾値以上のときに上記パラメータの演算を許可する、ことを特徴とする請求項１１〜１３のいずれかに記載の多気筒エンジンの制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、多気筒エンジンにおいて、気筒間の空燃比のばらつきの診断を行う制御装置に関する。
【背景技術】
【０００２】
多気筒エンジンにおいては、種々の要因によって各気筒の空燃比のばらつきが生じ得る。例えば、各気筒毎に燃料噴射弁から燃料噴射を行う場合には、各燃料噴射弁の個体差によって燃料噴射量のばらつきが生じ、また、可変動弁機構を備えているものでは、各気筒の吸気弁のリフト量のばらつきなとによって、各気筒の空気量が僅かに異なるものとなり易い。このような気筒間の空燃比ばらつきがあると、トルク変動や排気組成の悪化などを招来する。
【０００３】
このような気筒間の空燃比ばらつきに対処するために、特許文献１には、多気筒エンジンの排気管集合部に配設された空燃比センサの出力の周波数成分を分析し、１サイクルに相当する７２０°ＣＡ周期の振動成分つまりエンジン２回転成分に着目して、その位相から空燃比がばらついている気筒を特定する技術が開示されている。
【０００４】
また、特許文献２は、各気筒の空燃比のばらつきに基づく７２０°ＣＡ中の回転速度変動を回転角センサの回転角信号から検出し、空燃比が異常な気筒を特定しようとするものであり、空燃比センサによる平均的な空燃比が理論空燃比に対しリッチ側であるかリーン側であるかによって、異常気筒に対する燃料噴射量の補正を行っている。
【０００５】
さらに特許文献３には、各気筒の排気行程に対応したクランク角期間での酸素濃度センサの出力から排気空燃比を各気筒毎に検出する一方、各気筒の膨張行程に対応したクランク角期間でのエンジン回転数ピーク値から各気筒の回転数の差を求め、かつ両者を合わせた気筒毎のトルクのズレ量を修正するように燃料噴射量を補正する技術が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２０００−２２０４８９号公報
【特許文献２】特開２００４−３４６８０７号公報
【特許文献３】特開２００６−２０７４７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記特許文献１の方法は、例えば実施例として記載されている３気筒エンジンのように奇数気筒のエンジンでは空燃比がリーンないしリッチな気筒を直接に特定することができるが、４気筒エンジンなどのように偶数気筒の排気を一つの空燃比センサが検出する場合には、リーンないしリッチな気筒を直接に特定することができない。つまり、ある一つの気筒がリッチな場合と、他のある一つの気筒がリーンな場合とで、同じ２回転成分の位相となることがあり、いずれかの判別が困難である。また、奇数気筒のエンジンであっても、各気筒から空燃比センサまでの排気管長が等長でない場合や、排気管長が比較的長い場合には、やはり同様の現象が生じうる。
【０００８】
また、特許文献２のように回転速度変動に着目したものでは、空燃比のばらつきと燃料量のばらつきとを区別することができない。つまり、仮にある気筒の新気量が他の気筒に比べて多く、当該気筒がリーンであっても、理論空燃比にある他の気筒と燃料量が等しければ、回転速度変動は生じない。逆に全気筒が理論空燃比であっても、ある気筒の混合気量が相対的に少なければ、回転速度変動が生じる。従って、各気筒の空燃比のばらつきを正確には検出できない。
【０００９】
さらに、特許文献３のものでは、各気筒の排気行程に対応した極短いクランク角期間での酸素濃度センサの出力から各気筒の排気空燃比を個々に検出しようとしているが、現実には、一つの酸素濃度センサでもって各気筒の排気空燃比を個々に検出することは困難である。
【００１０】
本発明は、４気筒エンジンなどのように偶数気筒の排気を一つの空燃比センサが検出する場合や空燃比センサまでの排気管長が長い場合などにおいても、空燃比が最もずれている気筒をそのリッチ，リーンの方向を含めて確実に特定することができる多気筒エンジンの制御装置を提供することを目的としている。
【課題を解決するための手段】
【００１１】
この発明は、複数の気筒の排気管集合部に空燃比センサを備えるとともに、クランクシャフトの回転角を検出する回転角センサを備えてなる多気筒エンジンの制御装置において、
上記空燃比センサの出力信号に含まれるエンジン２回転成分の位相に基づいて、最も空燃比がずれている気筒の候補を特定する第１の手段と、
上記回転角センサの出力信号から気筒別の回転変動を検出する第２の手段と、
上記第１の手段と上記第２の手段の検出結果に基づいて、最も空燃比がずれている気筒を特定する第３の手段と、を備えたことを特徴としている。
【００１２】
すなわち、いずれかの気筒の空燃比が、その他の気筒の空燃比に対してずれると、排気管集合部の空燃比センサの出力信号は、エンジンが２回転する周期（７２０°ＣＡ周期）で振動する。この振動信号の位相から空燃比がずれている気筒とずれている方向（リッチ側もしくはリーン側）がわかる。一方、回転角センサの出力信号から、気筒別の回転変動（角加速度）を演算することにより、空燃比を推定することができる。これは、空燃比に応じてトルクが変化する特性を利用するものであり、空燃比がリッチになるとトルクは増大し、空燃比がリーンになるとトルクは減少する。従って、空燃比信号のエンジン２回転成分の位相と気筒別の回転変動の大きさの双方を用いて、空燃比がずれている気筒とずれている方向（リッチ側もしくはリーン側）をより正確に特定することが可能である。
【００１３】
本発明は、特に、偶数気筒の排気管の集合部に一つの空燃比センサが設けられている場合や、各気筒から空燃比センサまでの排気管長が不等長であるような場合に、有利である。
【００１４】
すなわち、図２９に示すように、例えば、気筒数が３気筒のエンジンでは、エンジン２回転成分の振動波形の位相（図中に☆印で示す）を検出することで、空燃比がずれた気筒とずれた方向（リッチ側もしくはリーン側）を一つに特定することが可能である。しかし、図３０に示すように、例えば、気筒数が４気筒のエンジン（点火順序（燃焼順序）が１番気筒→３番気筒→４番気筒→２番気筒）では、例えば、４番気筒の空燃比がリッチ側にずれたときと、１番気筒の空燃比がリーン側にずれたときでは、エンジン２回転成分の位相がほぼ重なるため、空燃比がずれている気筒を一つに特定することができない。
【００１５】
なお、気筒数が３気筒の場合でも、排気弁から空燃比センサまでの距離が異なっていると、空燃比の振動波形の位相が重なることがあり、同様に、空燃比がずれている気筒を一つに特定することができない。
【００１６】
本発明では、このような場合でも、気筒別の回転変動の大きさを考慮することで、空燃比がずれている気筒とその方向（リッチ側もしくはリーン側）を決定することができる。
【００１７】
好ましい一つの態様では、
上記第２の手段は、
気筒別の角加速度が最大の気筒を、空燃比が最もリッチな気筒とみなし、
気筒別の角加速度が最小の気筒を、空燃比が最もリーンな気筒とみなし、
上記第３の手段は、
上記第１の手段で特定した候補の中に、上記第２の手段による空燃比が最もリッチな気筒もしくは最もリーンな気筒があれば、当該気筒を最も空燃比がずれている気筒と決定する。
【００１８】
すなわち、空燃比センサ信号のエンジン２回転成分の位相は、空燃比がずれている気筒とずれている方向の情報を持つが、実際には、多少のばらつきがある。従って、エンジン２回転成分に基づいて、最も空燃比がずれている気筒の候補を決定する一方で、この候補の中に、回転変動から求めた最も空燃比がリッチな気筒もしくはリーンな気筒があれば、当該気筒を、最も空燃比がずれている気筒と確実に判断することができる。
【００１９】
ここで、上記第１の手段で特定した候補の中に、上記第２の手段による空燃比が最もリッチな気筒と最もリーンな気筒の双方が含まれる場合は、空燃比がリーンな気筒を、最も空燃比がずれている気筒と決定することが望ましい。これは、空燃比がリーンな気筒の方が運転性の悪化への影響が大きいためである。
【００２０】
本発明では、このようにして最も空燃比がずれている気筒を特定することができるが、本発明においては、さらに望ましくは、特定した最も空燃比がずれている気筒の空燃比のずれ量が小さくなるように、当該気筒の空燃比を補正する手段を備える。
【００２１】
本発明の具体的な一つの態様では、上記第１の手段は、上記空燃比センサの出力信号を離散フーリエ変換して得たエンジン２回転成分の実数部と虚数部とからエンジン２回転成分の位相を求める。
【００２２】
例えば、「ａｒｃｔａｎ２」などの関数を用いて、実数部と虚数部とから位相を求めることが可能である。
【００２３】
また望ましい一つの態様では、上記第１の手段は、複数に分割した所定の位相の範囲毎に、エンジン２回転成分の位相が現れる頻度を求め、最も頻度が高い位相範囲に対応する一つないし複数の気筒を上記の候補とする。
【００２４】
このように多数の位相データの出現頻度から気筒の特定を行えば、エンジン２回転成分に基づく候補気筒の特定の際に、より精度が向上する。
【００２５】
上記の位相の範囲は、エンジンの運転条件に応じて可変的に設定されることが望ましい。
【００２６】
すなわち、エンジン２回転成分の位相と最も空燃比ずれている気筒との相関関係は、排気流速に影響を受け、従って、エンジンの運転条件に応じて変化する。任意の運転条件の下で、エンジン２回転成分の位相から最も空燃比がずれている気筒を精度よく特定するためには、両者の相関関係が維持されるように、エンジンの運転条件に応じて上記の位相の範囲を変化させることが望ましい。
【００２７】
また、本発明の好ましい一つの態様では、
上記エンジン２回転成分のパワーを演算する手段と、
このパワーを所定の閾値と比較する手段と、をさらに備え、
上記パワーが上記閾値以上の場合に最も空燃比がずれている気筒の特定を行う。
【００２８】
すなわち、各気筒の空燃比に殆どずれがないような場合に、エンジン２回転成分の演算を行うと、ノイズやばらつきの影響で、位相がばらついた形で検出されることがあり、誤検出の可能性がある。そのため、上記のように、エンジン２回転成分のパワーが所定の閾値以上の場合に限って、エンジン２回転成分の位相と気筒別の回転変動とに基づき、最も空燃比がずれている気筒を特定するようにすれば、誤検出を防止できる。
【００２９】
本発明では、最も空燃比がずれている気筒の特定に関連して何らかの報知を行うようにしてもよい。例えば、本発明では、上記エンジン２回転成分のパワーを演算する手段と、このパワーを所定の第２の閾値と比較する手段と、上記パワーが上記第２の閾値以上のときにエンジンの異常と報知する手段と、をさらに備えることができる。
【００３０】
すなわち、気筒間に空燃比の差が発生すると、エンジンの排気性能および安定性が悪化する。これを、運転者に報知するに際して、より定量的に性能悪化を判定するため、エンジン２回転成分のパワー（２回転周期の振動の振幅）が所定値以上のときは、空燃比のずれにより排気性能もしくは安定性が一定レベル以上悪化したものとして、何らかの手段により異常を報知する。
【発明の効果】
【００３１】
この発明によれば、４気筒エンジンなどのように偶数気筒の排気を一つの空燃比センサが検出する場合や空燃比センサまでの排気管長が長い場合などにおいても、空燃比が最もずれている気筒をそのリッチ，リーンの方向を含めて確実に特定することができる。
【図面の簡単な説明】
【００３２】
【図１】実施例１〜５におけるエンジン制御システムの構成説明図。
【図２】実施例１〜５におけるコントロールユニットの説明図。
【図３】実施例１における制御全体を表したブロック図。
【図４】実施例１〜５における２回転成分演算部のブロック図。
【図５】実施例１〜５における２回転成分位相演算部のブロック図。
【図６】実施例１における空燃比ずれ気筒検出部１のブロック図。
【図７】実施例１における気筒別回転変動演算部のブロック図。
【図８】実施例１における空燃比ずれ気筒検出部２のブロック図。
【図９】実施例１における空燃比ずれ気筒検出部３のブロック図。
【図１０】実施例２における制御全体を表したブロック図。
【図１１】実施例２〜５におけるシリンダ内空気量演算部のブロック図。
【図１２】実施例２〜５における２回転成分パワー演算部のブロック図。
【図１３】実施例２における検出許可部のブロック図。
【図１４】実施例２〜５における２回転成分位相出現頻度演算部のブロック図。
【図１５】実施例２における空燃比ずれ発生回数演算部のブロック図。
【図１６】実施例２〜５における空燃比ずれ気筒検出部１のブロック図。
【図１７】実施例２〜５における気筒別回転変動演算部のブロック図。
【図１８】実施例２〜５における空燃比ずれ気筒検出部２のブロック図。
【図１９】実施例２〜５における空燃比ずれ気筒検出部３のブロック図。
【図２０】実施例３における制御全体を表したブロック図。
【図２１】実施例３〜５における検出許可部のブロック図。
【図２２】実施例３〜５における空燃比ずれ発生回数演算部のブロック図。
【図２３】実施例３〜５における位相しきい値演算部のブロック図。
【図２４】実施例４における制御全体を表したブロック図。
【図２５】実施例４における燃料噴射量補正値演算部のブロック図。
【図２６】実施例４における燃料噴射量演算部のブロック図。
【図２７】実施例５における制御全体を表したブロック図。
【図２８】実施例５における異常判定部を表したブロック図。
【図２９】気筒数が３気筒の場合の排気管集合部における空燃比センサの出力信号に含まれるエンジン２回転成分の波形図。
【図３０】気筒数が４気筒の場合の排気管集合部における空燃比センサの出力信号に含まれるエンジン２回転成分の波形図。
【発明を実施するための形態】
【００３３】
以下、この発明の一実施例を図面を基づいて詳細に説明する。
【００３４】
［実施例１］
図１は、実施例１のシステム構成を示す構成説明図である。なお、このシステム構成は、後述する実施例２〜５においても共通である。
【００３５】
多気筒（ここでは４気筒）で構成されるエンジン９は、吸気通路４および排気通路１０を有する。外部から取り込まれる空気は、エアクリーナ１を通過し、吸気通路４のコレクタ５を経て各シリンダ内に流入する。吸気通路４を通過する吸入空気量は、電子スロットル３により制御され、かつエアフロセンサ２によって、その量が検出される。電子スロットル３の開度は、スロットル開度センサ１７によって検出される。また、吸気温センサ２９によって、吸気温が検出される。
【００３６】
エンジン９は、回転角センサとしてクランク角センサ１５を備えており、このクランク角センサ１５によって、クランク軸の回転角１０゜毎の信号と燃焼周期毎の信号が出力される。水温センサ１４は、エンジン９の冷却水温度を検出する。またアクセル開度センサ１３は、運転者によるアクセルペダル６の踏み込み量を検出している。この踏み込み量は、運転者の要求トルクに相当する。
【００３７】
上記のアクセル開度センサ１３、エアフロセンサ２、吸気温センサ２９、スロットル開度センサ１７、クランク角センサ１５、水温センサ１４のそれぞれの信号は、後述のコントロールユニット１６に入力される。コントロールユニット１６は、これらセンサ出力からエンジン９の運転状態ならびに運転者の要求を得て、エンジン９の吸入空気量、燃料噴射量、点火時期等のエンジンの主要な操作量を最適に演算する。
【００３８】
コントロールユニット１６内で演算された目標空気量は、目標スロットル開度に変換されるとともに、さらに電子スロットル駆動信号に変換され、電子スロットル３に送られる。燃料噴射量は、各気筒に設けた燃料噴射弁７の開弁パルス信号に変換され、かつ各々の燃料噴射弁７に送られる。またコントロールユニット１６で演算された点火時期で点火されるように、点火信号が点火プラグ８に送られる。
【００３９】
燃料噴射弁７からシリンダ内に噴射された燃料は、吸気通路４からの空気と混合され、シリンダ内に適宜な混合気を形成する。この混合気は、所定の点火時期において点火プラグ８から発生される火花により爆発し、その燃焼圧によりピストンを介してエンジン９の動力が得られる。なお、図示例では、燃料噴射弁７がシリンダ内に燃料を噴射供給する筒内直噴型の構成となっているが、各気筒の吸気ポート内に燃料を噴射するポート噴射型の構成であってもよい。
【００４０】
爆発後の排気は、排気通路１０の三元触媒１１を通して外部へ排出される。排気の一部は、排気還流制御弁１９を具備した排気還流通路１８を介して吸気側に還流される。
【００４１】
上記排気通路１０の三元触媒１１上流側には、排気空燃比に応じたレベルの信号を出力する所謂広域型空燃比センサからなる触媒上流空燃比センサ１２が配設されている。そして、三元触媒１１の下流側には、排気空燃比が理論空燃比よりもリッチであるかリーンであるかを示す酸素センサからなる触媒下流Ｏ２センサ２０が配設されている。これらのセンサ１２，２０の出力信号もコントロールユニット１６に入力されている。当業者には知られているように、基本的に、触媒上流空燃比センサ１２の出力信号を用いて空燃比のフィードバック制御が行われ、触媒下流Ｏ２センサ１２は、例えば三元触媒１１の劣化検出やフィードバック系の学習制御などのために用いられる。
【００４２】
本実施例では、さらに、上記触媒上流空燃比センサ１２の出力信号とクランク角センサ１５の出力信号とを用いて、最も空燃比がずれている気筒がそのずれの方向（リーン、リッチ）とともに特定される。
【００４３】
図２は、上記コントロールユニット１６の構成を示している。なお、この図２の構成も、実施例１〜５において共通である。コントロールユニット１６は、ＣＰＵ２１のほか、ＲＯＭ２２、ＲＡＭ２３、入力回路２４、入出力ポート２５、等を備えて構成されている。
【００４４】
コントロールユニット１６には、上述したように、エアフロセンサ２、触媒上流空燃比センサ１２、アクセル開度センサ１３、水温センサ１４、クランク角センサ１５、スロットル弁開度センサ１７、触媒下流Ｏ２センサ２０、吸気温センサ２９、車速センサ３０の各センサ出力値が入力されるが、これらの入力信号は、入力回路２４にてノイズ除去等の信号処理を行った後、入出力ポート２５に送られる。入出力ポート２５の値はＲＡＭ２３に保管され、ＣＰＵ２１内で演算処理される。演算処理の内容を記述した制御プログラムはＲＯＭ２２に予め書き込まれている。制御プログラムに従って演算された各アクチュエータ作動量を表す値は、ＲＡＭ２３に保管された後、入出力ポート２５に送られる。点火プラグ８の作動信号は、点火信号出力回路２６に一次側コイルのＯＮ・ＯＦＦ信号としてセットされ、ＯＮ期間の間は一次側コイルに通電され、ＯＦＦとなったときに一次側コイルへの通電を遮断することで、点火プラグ８から放電が行われる。また燃料噴射弁７の駆動信号は、開弁時ＯＮ、閉弁時ＯＦＦとなるＯＮ・ＯＦＦ信号であり、燃料噴射弁駆動回路２７で増幅された上で各燃料噴射弁７に送られる。電子スロットル３の目標開度を実現する駆動信号は、電子スロットル駆動回路２８を介して電子スロットル３に送られる。
【００４５】
以下、本発明の空燃比がずれている気筒の特定に関してＲＯＭ２２に書き込まれている制御プログラムについて説明する。
【００４６】
図３は、実施例１の制御全体を表したブロック図であり、以下の演算部から構成される。
【００４７】
・２回転成分演算部１０１（図４に詳細を示す）
・２回転成分位相演算部１０２（図５に詳細を示す）
・空燃比ずれ気筒検出部１（１０３）（図６に詳細を示す）
・気筒別回転変動演算部１０４（図７に詳細を示す）
・空燃比ずれ気筒検出部２（１０５）（図８に詳細を示す）
・空燃比ずれ気筒検出部３（１０６）（図９に詳細を示す）
制御全体を簡単に説明すると、まず、「２回転成分演算部１０１」で、触媒上流空燃比センサ１２の出力信号(Rabf)の離散フーリエ変換によりこの出力信号(Rabf)に含まれるエンジン２回転成分（７２０°ＣＡ周期の振動成分）の実数部(R_2rev)と虚数部(I_2rev)を演算する。
【００４８】
「２回転成分位相演算部１０２」で、実数部R_2revと虚数部I_2revとから、エンジン２回転成分の位相(Phase)を演算する。「空燃比ずれ気筒検出部１（１０３）」では、位相Phaseから、空燃比がずれている気筒（詳しくは、空燃比がずれている可能性がある２つの気筒の候補）とずれ方向(リッチもしくはリーン)を検出する。
【００４９】
「気筒別回転変動演算部１０４」では、クランク角センサ１５の信号から気筒別回転変動(dNe_1, dNe_2, dNe_3, dNe_4)を演算する。
【００５０】
「空燃比ずれ気筒検出部２（１０５）」では、気筒別回転変動d_Ne_1, dNe_2, dNe_3, dNe_4から、空燃比がずれている気筒とずれ方向(リッチもしくはリーン)を検出する。
【００５１】
そして、「空燃比ずれ気筒検出部３（１０６）」では、「空燃比ずれ気筒検出部１（１０３）」の検出結果と「空燃比ずれ気筒検出部２（１０５）」の検出結果の双方を用いて、最終的な空燃比ずれ気筒とずれ方向(リッチもしくはリーン)を検出する。
【００５２】
以下、各演算部の詳細を、図４〜図９のブロック図に基づき、説明する。なお、図４〜図９の処理は、各気筒の燃焼毎つまり１８０°ＣＡ周期で実行される。
【００５３】
＜２回転成分演算部１０１（図４）＞
この２回転成分演算部１０１では、触媒上流空燃比センサ１２の出力信号(Rabf)に含まれるエンジン２回転成分の実数部(R_2rev)と虚数部(I_2rev)を演算する。
【００５４】
具体的には、図４に示す処理を、各気筒の燃焼毎つまり１８０°ＣＡ周期で実行し、実質的な離散フーリエ変換（図中の波線で囲まれた部分の処理が離散フーリエ変換に相当する）を実現する。
【００５５】
まず、入力信号Rabfの今回値と前回値の差を演算し、dRabf(触媒上流空燃比センサ信号差分値)とする。このdRabfに対して、複素数の実数部の「cosθ」に相当する係数「C_R」と虚数部の「sinθ」に相当する係数「C_I」を乗じ、１８０°ＣＡ毎に「C_R×dRabf」および「C_I×dRabf」を求めて、７２０°ＣＡの間の総和つまり１８０°ＣＡ毎の４点における「C_R×dRabf」の和および「C_I×dRabf」の和を、それぞれ実数部R_2revおよび虚数部I_2revとする。
【００５６】
ここで、エンジン２回転成分つまり７２０°ＣＡ周期の振動成分に対し１８０°ＣＡ毎に演算処理を行うことから、係数「C_R」および係数「C_I」は、複素平面上の角θが、０°、９０°、１８０°、２７０°のときの「cosθ」ないし「sinθ」に相当し、「１」「０」「−１」のいずれかの値に単純化される。
【００５７】
具体的には、爆発行程にある気筒を示すパラメータCYLCNT(シリンダNo.)に応じて、係数「C_R」および係数「C_I」が次のように与えられる。
【００５８】
CYLCNT=1のとき、C_R=1
CYLCNT=3もしくは2のとき、C_R=0
CYLCNT=4のとき、C_R=-1
また、
CYLCNT=1もしくは4のとき、C_I=0
CYLCNT=3のとき、C_I=1
CYLCNT=2のとき、C_I=-1
なお、パラメータCYLCNTは、Ｎ番気筒のピストン位置が所定値にきたときにインクリメントされる。ここでは、当該気筒の圧縮ＴＤＣ前１１０°ＣＡで更新されるものとする。
【００５９】
そして、図４に示すように、１８０°ＣＡ毎に求められるC_R×dRabfの今回値と、前回値と、前々回値と、前々々回値と、の和を求め、実数部R_2revとする。同様に、１８０°ＣＡ毎に求められるC_I×dRabfの今回値と、前回値と、前々回値と、前々々回値と、の和を求め、虚数部I_2revとする。  
【００６０】
＜２回転成分位相演算部１０２（図５）＞
図５に示す２回転成分位相演算部では、上記のエンジン２回転成分の実数部R_2revおよび虚数部I_2revに基づき、その位相つまり２回転成分位相Phaseを演算する。具体的には、R_2revとI_2revとから、下式のように、関数「arctan２」を用いて、２回転成分位相基本値Phase0を求める    
Phase0＝arctan2(I_2rev/R_2rev)×(180/π)
ここに、arctan2は、４象限(−１８０〜１８０度)に対応した逆正接値(＝位相)を与える関数である。
【００６１】
そして、２回転成分位相基本値Phase0から、位相の範囲を０〜３６０度とした２回転成分位相Phaseを求める。具体的には、Phase0＜0のときは、Phase=Phase0+360とし、それ以外であれば、Phase=Phase0とする。
【００６２】
＜空燃比ずれ気筒検出部１（１０３）（図６）＞
この空燃比ずれ気筒検出部１（１０３）では、図６に示すように、２回転成分位相Phaseを用いて、空燃比がずれている気筒の候補を特定する。
【００６３】
まず初めに、空燃比がずれている気筒の候補を示すフラグ（f_a_2rev、f_b_2rev、f_c_2rev、f_d_2rev）をいずれも０に初期化する。
【００６４】
ここで、第１のフラグ(f_a_2rev）は、１番気筒の空燃比が最もリッチもしくは４番気筒の空燃比が最もリーンであることを表す。同様に、第２のフラグ（f_b_2rev）は、２番気筒が最もリッチもしくは３番気筒が最もリーンであることを表す。第３のフラグ（f_c_2rev）は、３番気筒が最もリッチもしくは２番気筒が最もリーンであることを表す。第４のフラグ（f_d_2rev）は、４番気筒が最もリッチもしくは１番気筒が最もリーンであることを表す。
【００６５】
そして、２回転成分位相Phaseの値を、所定の閾値K1_Phase〜K5_Phaseと比較し、下記のようにフラグのセットを行う。
【００６６】
K1_Phase≦Phase＜K2_Phaseのとき、１番気筒の空燃比が最もリッチもしくは４番気筒の空燃比が最もリーンであるとして、「１番気筒リッチもしくは４番気筒リーン」フラグ(f_a_2rev)を1とする。図３０に示すように、気筒数が４気筒のエンジン（点火順序が１番気筒→３番気筒→４番気筒→２番気筒）では、例えば、１番気筒の空燃比がリッチ側にずれたときと、４番気筒の空燃比がリーン側にずれたときでは、エンジン２回転成分の位相がほぼ重なるため、どちらかに特定することができない。ただし、１番気筒リッチもしくは４番気筒リーンのいずれかであることは、特定することができる。
【００６７】
同様に、K2_Phase≦Phase＜K3_Phaseのとき、「２番気筒リッチもしくは３番気筒リーン」フラグ(f_b_2rev)を1とする。
【００６８】
K3_Phase≦Phase＜K4_Phaseのとき、「３番気筒リッチもしくは２番気筒リーン」フラグ(f_c_2rev)を1とする。
【００６９】
K4_Phase≦Phase＜K5_Phaseのとき、「４番気筒リッチもしくは１番気筒リーン」フラグ(f_d_2rev)を1とする。
【００７０】
閾値K1_Phase、K2_Phase、K3_Phase、K4_Phase、K5_Phaseの値は、エンジンに応じて変わるので、経験的にあるいは実験等によって最適値に定めることが望ましい。
【００７１】
＜気筒別回転変動演算部１０４（図７）＞
気筒別回転変動演算部１０４では、クランク角センサ１５の検出信号に基づき、気筒別の回転変動(dNe_1, dNe_2, dNe_3, dNe_4)つまり各気筒の燃焼爆発に伴う気筒別の角加速度を求める。具体的には、図７に示すように、１８０°ＣＡ毎に回転速度Neの今回値と前回値の差を求め、dNe(回転変動)とする。そして、以下のように、パラメータCYLCNTに基づき、そのときの爆発行程にある気筒に関連付けて、各気筒毎の角加速度（回転変動）のデータを更新していく。
【００７２】
・CYLCNT=1のとき、
dNe_1=dNe_1(前回値), dNe_2=dNe_2(前回値)
dNe_3=dNe_3(前回値), dNe_4=dNe
・CYLCNT=2のとき、
dNe_1=dNe_1(前回値), dNe_2=dNe_2(前回値)
dNe_3=dNe, dNe_4=dNe_4(前回値) 
・CYLCNT=3のとき、
dNe_1=dNe_1(前回値), dNe_2=dNe
dNe_3=dNe_3(前回値), dNe_4=dNe_4(前回値)
・CYLCNT=4のとき、
dNe_1=dNe, dNe_2=dNe_2(前回値)
dNe_3=dNe_3(前回値), dNe_4=dNe_4(前回値)
ここで、dNe_1、dNe_2、dNe_3、dNe_4は、それぞれ、１番気筒、２番気筒、３番気筒、４番気筒の回転変動（角加速度）を示すものであり、正・負双方の値をとり得る。従って、これらの回転変動の「最小値」とは、負で絶対値が最も大きな値を意味する。
【００７３】
＜空燃比ずれ気筒検出部２（１０５）（図８）＞
空燃比ずれ気筒検出部２（１０５）では、図８に示すように、前述したクランク角センサ１５の検出信号に基づく気筒別の回転変動（角加速度）dNe_1, dNe_2, dNe_3, dNe_4の値を用いて、空燃比がずれている気筒をそのずれの方向とともに特定する。
【００７４】
図８の処理はやはり１８０°ＣＡ周期で実行されるが、まず、回転変動に基づくリッチ気筒およびリーン気筒を表す８つのフラグ（f_1R_dNe、f_2R_dNe、f_3R_dNe、f_4R_dNe、f_1L_dNe、f_2L_dNe、f_3L_dNe、f_4L_dNe）を全て０に初期化する。そして、４つの回転変動の比較から、下記のようにフラグのセットを行う。
【００７５】
・dNe_1, dNe_2, dNe_3, dNe_4の中の最大値がdNe_1のとき、１番気筒の空燃比が最もリッチであるとみなして、１番気筒リッチフラグ(f_1R_dNe)を1とする。
【００７６】
・dNe_1, dNe_2, dNe_3, dNe_4の中の最大値がdNe_2のとき、２番気筒の空燃比が最もリッチであるとみなして、２番気筒リッチフラグ(f_2R_dNe)を1とする。
【００７７】
・dNe_1, dNe_2, dNe_3, dNe_4の中の最大値がdNe_3のとき、３番気筒の空燃比が最もリッチであるとみなして、３番気筒リッチフラグ(f_3R_dNe)を1とする。
【００７８】
・dNe_1, dNe_2, dNe_3, dNe_4の中の最大値がdNe_4のとき、４番気筒の空燃比が最もリッチであるとみなして、４番気筒リッチフラグ(f_4R_dNe)を1とする。
【００７９】
・dNe_1, dNe_2, dNe_3, dNe_4の中の最小値がdNe_1のとき、１番気筒の空燃比が最もリーンであるとみなして、１番気筒リーンフラグ(f_1L_dNe)を1とする。
【００８０】
・dNe_1, dNe_2, dNe_3, dNe_4の中の最小値がdNe_2のとき、２番気筒の空燃比が最もリーンであるとみなして、２番気筒リーンフラグ(f_2L_dNe)を1とする。
【００８１】
・dNe_1, dNe_2, dNe_3, dNe_4の中の最小値がdNe_3のとき、３番気筒の空燃比が最もリーンであるとみなして、３番気筒リーンフラグ(f_3L_dNe)を1とする。
【００８２】
・dNe_1, dNe_2, dNe_3, dNe_4の中の最小値がdNe_4のとき、４番気筒の空燃比が最もリーンであるとみなして、４番気筒リーンフラグ(f_4L_dNe)を1とする。
【００８３】
なお、例えば燃料噴射量が他の気筒よりも少なくても同時に空気量が他の気筒よりも少なければ、空燃比は理論空燃比のままあるいは逆にリッチとなることもあり得るが、この空燃比ずれ気筒検出部２（１０５）では、単純にトルク変動が空燃比に対応するものとみなしている。
【００８４】
また、ある一つの気筒のトルクが相対的に大きく、他の一つの気筒のトルクが相対的に小さいときなどは、ある気筒のリッチフラグと他のある気筒のリーンフラグとが同時に１となり得る。
【００８５】
＜空燃比ずれ気筒検出部３（１０６）（図９）＞
図９に示す空燃比ずれ気筒検出部３（１０６）では、空燃比ずれ気筒検出部１（１０３）の検出結果と空燃比ずれ気筒検出部２（１０５）の検出結果とを用いて、空燃比がずれている気筒をそのずれ方向とともに最終的に特定する。
【００８６】
図９の処理はやはり１８０°ＣＡ周期で実行されるが、まず、最終的なリッチ気筒およびリーン気筒を表す８つのフラグ（f_1R、f_2R、f_3R、f_4R、f_1L、f_2L、f_3L、f_4L）を全て０に初期化する。そして、空燃比センサ１２の出力信号のエンジン２回転成分に基づく候補気筒を表すフラグと、クランク角センサ１５による気筒別の回転変動に基づくリッチ気筒およびリーン気筒を表すフラグと、の組み合わせによって、下記のようにフラグのセットを行う。
【００８７】
・f_a_2rev=1かつf_1R_dNe=1のとき、１番気筒の空燃比が最もリッチであると判断し、１番気筒リッチフラグf_1Rを１とする。つまり、フラグf_a_2rev=1は、前述したように、１番気筒の空燃比が最もリッチもしくは４番気筒の空燃比が最もリーンであることを表しており、他方、フラグf_1R_dNe=1は、回転変動から１番気筒の空燃比が最もリッチであるとみなし得ることを表しているので、両者の組み合わせから、１番気筒が最も空燃比がずれている気筒であって、かつそのずれ方向はリッチである、と最終的に特定する。
【００８８】
同様に、下記のように処理する。
【００８９】
・f_b_2rev=1かつf_2R_dNe=1のとき、２番気筒の空燃比が最もリッチであると判断し、２番気筒リッチフラグf_2Rを１とする。
【００９０】
・f_c_2rev=1かつf_3R_dNe=1のとき、３番気筒の空燃比が最もリッチであると判断し、３番気筒リッチフラグf_3Rを１とする。
【００９１】
・f_d_2rev=1かつf_4R_dNe=1のとき、４番気筒の空燃比が最もリッチであると判断し、４番気筒リッチフラグf_4Rを１とする。
【００９２】
・f_d_2rev=1かつf_1L_dNe=1のとき、１番気筒の空燃比が最もリーンであると判断し、１番気筒リーンフラグf_1Lを１とする。
【００９３】
・f_c_2rev=1かつf_2L_dNe=1のとき、２番気筒の空燃比が最もリーンであると判断し、２番気筒リーンフラグf_2Lを１とする。
【００９４】
・f_b_2rev=1かつf_3L_dNe=1のとき、３番気筒の空燃比が最もリーンであると判断し、３番気筒リーンフラグf_3Lを１とする。
【００９５】
・f_a_2rev=1かつf_4L_dNe=1のとき、４番気筒の空燃比が最もリーンであると判断し、４番気筒リーンフラグf_4Lを１とする。
【００９６】
このように、実施例１においては、空燃比センサ１２の出力信号に含まれるエンジン２回転成分の位相に基づいて、４つの気筒の中で空燃比が最もリッチないしリーンである２つの気筒が候補として特定される。そして、これを、さらにクランク角センサ１５の検出信号による回転変動から最もリッチもしくはリーンとみなされる気筒の情報と組み合わせることで、最終的に空燃比が最もずれている気筒がそのずれ方向とともに確実に特定される。
【００９７】
［実施例２］
次に、図１０に基づいて実施例２について説明する。本実施例の特徴の一つは、空燃比がずれている気筒の特定をより確実なものとするために、触媒上流空燃比センサ１２の出力信号(Rabf)に含まれるエンジン２回転成分の位相が所定範囲に現れる頻度に基づいて、空燃比がずれている気筒を特定することである。
【００９８】
また、この実施例２では、最も空燃比がずれている気筒として、リッチ側にずれている気筒とリーン側にずれている気筒との双方が存在する場合、運転性の悪化の影響が大きいリーン側にずれている気筒を、最も空燃比がずれている気筒と判断するようにしている。
【００９９】
さらに、この実施例２では、触媒上流空燃比センサ１２の信号のエンジン２回転成分のパワーが所定値であるときに限って、すなわち、７２０°ＣＡ周期の振動の振幅が所定値以上であることを条件として、空燃比が最もずれている気筒の特定を許可することで、誤検出を防止する。
【０１００】
実施例２のシステム構成およびコントロールユニット１６の構成は、前述した図１，図２つまり実施例１のものと同様である。以下、実施例２としてＲＯＭ２２に書き込まれた制御プログラムについて説明する。
【０１０１】
図１０は実施例２の制御全体を表したブロック図であり、下記の各部で構成される。
【０１０２】
・シリンダ内空気量演算部２１１（図１１に詳細を示す）
・２回転成分演算部１０１（図４）
・２回転成分パワー演算部２１２（図１２に詳細を示す）
・検出許可部２１３（図１３に詳細を示す）
・２回転成分位相演算部１０２（図５）
・２回転成分位相出現頻度演算部２１４（図１４、図１５に詳細を示す）
・空燃比ずれ気筒検出部１（２０３）（図１６に詳細を示す）
・気筒別回転変動演算部（２０４）（図１７に詳細を示す）
・空燃比ずれ気筒検出部２（２０５）（図１８に詳細を示す）
・空燃比ずれ気筒検出部３（２０６）（図１９に詳細を示す）
制御全体を簡単に説明すると、「シリンダ内空気量演算部２１１」では、シリンダ内空気量(Tp)を演算する。
【０１０３】
前述した「２回転成分演算部１０１」で、触媒上流空燃比センサ１２の出力信号(Rabf)の離散フーリエ変換によりこの出力信号(Rabf)に含まれるエンジン２回転成分の実数部(R_2rev)と虚数部(I_2rev)を演算する。「２回転成分パワー演算部２１２」で実数部R_2revと虚数部I_2revとから、２回転成分パワー(Power)を演算する。
【０１０４】
「検出許可部２１３」では、最も空燃比がずれている気筒の検出を許可するフラグ(fp_ken)を演算する。
【０１０５】
前述した「２回転成分位相演算部１０２」で、実数部R_2revと虚数部I_2revとから、エンジン２回転成分の位相(Phase)を演算する。そして「２回転成分位相出現頻度演算部２１４」で、各気筒別に、２回転成分位相出現頻度(R_a_2rev等)を演算する。「空燃比ずれ気筒検出部１（２０３）」では、２回転成分位相出現頻度（R_a_2rev等）から、空燃比がずれている気筒（詳しくは、空燃比がずれている可能性がある２つの気筒の候補）とずれ方向(リッチもしくはリーン)を検出する。
【０１０６】
「気筒別回転変動演算部２０４」では、クランク角センサ１５の信号から気筒別回転変動(dNe_1, dNe_2, dNe_3, dNe_4)を演算する。
【０１０７】
「空燃比ずれ気筒検出部２（２０５）」では、気筒別回転変動d_Ne_1, dNe_2, dNe_3, dNe_4から、空燃比がずれている気筒とずれ方向(リッチもしくはリーン)を検出する。
【０１０８】
そして、「空燃比ずれ気筒検出部３（２０６）」では、「空燃比ずれ気筒検出部１（２０３）」の検出結果と「空燃比ずれ気筒検出部２（２０５）」の検出結果の双方を用いて、最終的な空燃比ずれ気筒とずれ方向(リッチもしくはリーン)を検出する。
【０１０９】
以下、各演算部の詳細を、図１１〜図１９のブロック図に基づき説明する。なお、図１２〜図１９の処理は、各気筒の燃焼毎つまり１８０°ＣＡ周期で実行される。２回転成分演算部１０１（図４参照）および２回転成分位相演算部１０２（図５参照）については、前述したものと変わりがないので、説明は省略する。
【０１１０】
＜シリンダ内空気量演算部２１１（図１１）＞
このシリンダ内空気量演算部２１１では、エアフロセンサ２が検出した吸入空気量Qaとエンジン回転速度Neとから、図１１に示す式によって、シリンダ内空気量Tpを演算する。Cylは気筒数を表す。Ｋ0は、インジェクタの仕様（燃料噴射パルス幅と燃料噴射量の関係）に基づき決定される定数である。。
【０１１１】
＜２回転成分パワー演算部２１２（図１２）＞
２回転成分パワー演算部２１２では、エンジン２回転成分の振幅つまり２回転成分パワー(Power)を演算する。具体的には、図１２に示すように、エンジン２回転成分の実数部R_2revと虚数部I_2revとから、下式により、Power(２回転成分パワー)を求める。
【０１１２】
Power＝√((R_2rev×R_2rev)＋(I_2rev×I_2rev))
＜検出許可部２１３（図１３）＞
検出許可部２１３では、図１３に示すように、空燃比がずれている気筒の検出を行うか否かを示す検出許可フラグ(fp_ken)のセット、リセットを行う。具体的には、２回転成分パワーPowerとエンジン回転速度Neとシリンダ内空気量Tpとから、下記のように処理する。
【０１１３】
・Power≧K1_Power
かつ
K1_Ne≦Ne≦K2_Ne
かつ
K1_Tp≦Tp≦K2_Tp
のとき、fp_ken(検出許可フラグ)を１とする。
【０１１４】
・それ以外では、fp_ken(検出許可フラグ)を０とする。
【０１１５】
すなわち、エンジン回転速度Neおよび負荷（シリンダ内空気量Tp）とが所定の運転領域内にあり、かつ２回転成分パワーPowerが所定の閾値K1_Power以上である場合に限って、空燃比が最もずれている気筒の検出を許可する。これによって、不要な誤検出が回避される。閾値K1_Powerは、目標検出性能相当の空燃比ばらつきレベルに応じて決めることが望ましい。また、K1_Ne, K2_Ne, K1_Tp, K2_Tpは、検出を実施するエンジンの運転領域に応じて設定される。
【０１１６】
＜２回転成分位相出現頻度演算部２１４（図１４）＞
２回転成分位相出現頻度演算部２１４は、図１４に示すように、「空燃比ずれ発生回数演算部２１５（図１５）」で演算される各気筒のリッチ，リーンの発生回数から２回転成分発生頻度(R_a_2rev等)を演算するものであるので、図１５の空燃比ずれ発生回数演算部２１５を先に説明する。
【０１１７】
＜空燃比ずれ発生回数演算部２１５（図１５）＞
本演算部では、空燃比ずれ発生回数(Cnt_a_2rev等)をカウントする。具体的には、図１５に示すように、２回転成分位相Phaseと検出許可フラグfp_kenを用いて、下記の処理を行う。ここで、N_2revは、位相検出回数、Cnt_a_2revは、「１番気筒リッチもしくは４番気筒リーン」発生回数、Cnt_b_2revは、「２番気筒リッチもしくは３番気筒リーン」発生回数、Cnt_c_2revは、「３番気筒リッチもしくは２番気筒リーン」発生回数、Cnt_d_2revは、「４番気筒リッチもしくは１番気筒リーン」発生回数、である。
【０１１８】
検出許可フラグfp_kenが０であるときは、これらのN_2rev、Cnt_a_2rev、Cnt_b_2rev、Cnt_c_2rev、Cnt_d_2rev、を全て０にリセットする。
【０１１９】
検出許可フラグfp_kenが１であるときは、位相検出回数N_2revに基づき、下記の通りとする。
【０１２０】
i）N_2rev(前回値)＜KN_2revのとき
・N_2rev=N_2rev(前回値）＋１
とし、さらに、
・K1_Phase≦Phase＜K2_Phaseであれば、
Cnt_a_2rev=Cnt_a_2rev(前回値)＋１
・K2_Phase≦Phase＜K3_Phaseであれば、
Cnt_b_2rev=Cnt_b_2rev(前回値)＋１
・K3_Phase≦Phase＜K4_Phaseであれば、
Cnt_c_2rev=Cnt_c_2rev(前回値)＋１
・K4_Phase≦Phase＜K5_Phaseであれば、
Cnt_d_2rev=Cnt_d_2rev(前回値)＋１
ii）N_2rev(前回値)＝KN_2revのとき
・N_2rev=１
とし、さらに、
・K1_Phase≦Phase＜K2_Phaseであれば、
Cnt_a_2rev=１
・K2_Phase≦Phase＜K3_Phaseであれば、
Cnt_b_2rev=１
・K3_Phase≦Phase＜K4_Phaseであれば、
Cnt_c_2rev=１
・K4_Phase≦Phase＜K5_Phaseであれば、
Cnt_d_2rev=１
K1_Phase、K2_Phase、K3_Phase、K4_Phase、K5_Phaseは、エンジン２回転成分の位相の範囲を各気筒毎に区切るための閾値であって、その値は、エンジンに応じて変わるので、経験的にもしくは実験等により定めることが望ましい。特に、対象エンジンの検出対象となる運転領域(検出許可部２１３におけるK1_Ne, K2_Ne, K1_TP, K2_TPによって決められる)に対応した値とすることが望ましい。
【０１２１】
一方、位相検出回数N_2revに対する閾値KN_2revは、頻度の演算区間（統計処理区間）を定めており、従って、収束性と応答性の双方を勘案して決めるのがよい。
【０１２２】
すなわち、上記の処理では、検出許可フラグfp_kenが１である場合に１８０°ＣＡ毎にインクリメントされる位相検出回数N_2revが所定の閾値KN_2revに達するまでの統計処理区間において、４つの範囲毎に、位相が出現した回数をカウントしていくことになる。各範囲は、図３０で説明したように、それぞれ、ある一つの気筒が最もリッチであるかある一つの気筒が最もリーンであるかのいずれかに対応したものとなる。
【０１２３】
そして、位相検出回数N_2revが所定の閾値KN_2revに達したら、再び１からカウントが再開されることとなる。
【０１２４】
＜２回転成分位相出現頻度演算部２１４（図１４）＞
再び２回転成分位相出現頻度演算部２１４の説明に戻るが、ここでは、前述した空燃比ずれ発生回数演算部２１５が出力するN_2rev(位相検出回数)、Cnt_a_2rev(１番気筒リッチもしくは４番気筒リーン発生回数)、Cnt_b_2rev(２番気筒リッチもしくは３番気筒リーン発生回数)、Cnt_c_2rev(３番気筒リッチもしくは２番気筒リーン発生回数)、Cnt_d_2rev(４番気筒リッチもしくは１番気筒リーン発生回数)の値を用いて、それぞれの発生頻度を演算する。ここで、R_a_2revは、「１番気筒リッチもしくは４番気筒リーン」発生頻度、R_b_2revは、「２番気筒リッチもしくは３番気筒リーン」発生頻度、R_c_2revは、「３番気筒リッチもしくは２番気筒リーン」発生頻度、R_d_2revは、「４番気筒リッチもしくは１番気筒リーン」発生頻度である。具体的には、以下のように処理する。
【０１２５】
i）N_2rev=KN_2revのとき
R_a_2rev=Cnt_a_2rev/KN_2rev
R_b_2rev=Cnt_b_2rev/KN_2rev
R_c_2rev=Cnt_c_2rev/KN_2rev
R_d_2rev=Cnt_d_2rev/KN_2rev
ii）N_2rev＜KN_2revのとき
R_a_2rev=R_a_2rev(前回値)
R_b_2rev=R_b_2rev(前回値)
R_c_2rev=R_c_2rev(前回値)
R_d_2rev=R_d_2rev(前回値)
すなわち、位相検出回数N_2revが統計処理区間を示す所定の閾値KN_2revに達するたびに、各発生回数を検出回数つまり閾値KN_2revで除して、それぞれの比つまり頻度を求める。
【０１２６】
＜空燃比ずれ気筒検出部１（２０３）（図１６）＞
この空燃比ずれ気筒検出部１（２０３）では、前述した位相検出回数N_2rev、および発生頻度 R_a_2rev, R_b_2rev, R_c_2rev, R_d_2revを用いて、空燃比がずれている気筒（詳しくはその候補となる２つの気筒）を特定する。
【０１２７】
図１６に示すように、まず初めに、空燃比がずれている気筒の候補を示すフラグ（f_a_2rev、f_b_2rev、f_c_2rev、f_d_2rev）をいずれも０に初期化する。
【０１２８】
これらのフラグは、前述した実施例１の空燃比ずれ気筒検出部１（１０３）におけるフラグと同様であり、第１のフラグ(f_a_2rev）は、１番気筒の空燃比が最もリッチもしくは４番気筒の空燃比が最もリーンであることを表す。第２のフラグ（f_b_2rev）は、２番気筒が最もリッチもしくは３番気筒が最もリーンであることを表す。第３のフラグ（(f_c_2rev）は、３番気筒が最もリッチもしくは２番気筒が最もリーンであることを表す。第４のフラグ（f_d_2rev）は、４番気筒が最もリッチもしくは１番気筒が最もリーンであることを表す。
【０１２９】
そして、N_2rev＝KN_2revのとき、つまり位相検出回数N_2revが統計処理区間を示す所定の閾値KN_2revに達したときに、発生頻度から下記のようにフラグのセットを行う。
【０１３０】
K1_R_2rev≦R_a_2revのとき、１番気筒の空燃比が最もリッチもしくは４番気筒の空燃比が最もリーンであるとして、「１番気筒リッチもしくは４番気筒リーン」フラグ(f_a_2rev)を1とする。以下、同様にして、
K1_R_2rev≦R_b_2revのとき、f_b_2rev=1
K1_R_2rev≦R_c_2revのとき、f_c_2rev=1
K1_R_2rev≦R_d_2revのとき、f_d_2rev=1
とする。
【０１３１】
発生頻度の閾値K1_R_2rev、K2_R_2rev、K3_Phase、K4_Phase、K5_Phaseの値は、位相の収束性、発生頻度に応じて、目標性能となるよう経験的に決めるのが望ましい。
【０１３２】
このように実施例２では、複数回の位相の発生頻度から空燃比が最もずれている気筒の特定を行うので、その精度が高くなる。
【０１３３】
＜気筒別回転変動演算部２０４（図１７）＞
この気筒別回転変動演算部２０４では、図１７に示すように、クランク角センサ１５の検出信号に基づき、１８０°ＣＡ毎に回転速度Neの今回値と前回値との差dNe（回転変動）を求め、これに基づいて、実施例１の気筒別回転変動演算部１０４と同じく、気筒別の回転変動(dNe_1, dNe_2, dNe_3, dNe_4)を演算する。特に、この実施例２においては、位相検出回数N_2revが所定の閾値KN_2revに達するまでの各統計処理区間における平均値（移動平均）として、気筒別の回転変動が演算される。具体的には、下記の通りに処理する。
【０１３４】
i）N_2rev=1のとき
・CYLCNT=1のとき、
dNe_1=dNe_1(前回値), dNe_2=dNe_2(前回値)
dNe_3=dNe_3(前回値), dNe_4=dNe
・CYLCNT=2のとき、
dNe_1=dNe_1(前回値), dNe_2=dNe_2(前回値)
dNe_3=dNe, dNe_4=dNe_4(前回値) 
・CYLCNT=3のとき、
dNe_1=dNe_1(前回値), dNe_2=dNe
dNe_3=dNe_3(前回値), dNe_4=dNe_4(前回値)
・CYLCNT=4のとき、
dNe_1=dNe, dNe_2=dNe_2(前回値)
dNe_3=dNe_3(前回値), dNe_4=dNe_4(前回値)
ii）1＜N_2rev≦KN_2revのとき
・CYLCNT=1のとき
dNe_1=dNe_1(前回値), dNe_2=dNe_2(前回値)
dNe_3=dNe_3(前回値), 
dNe_4=(dNe+dNe_4(前回値))/2
・CYLCNT=2のとき、
dNe_1=dNe_1(前回値), dNe_2=dNe_2(前回値)
dNe_3=(dNe+dNe_3(前回値))/2, 
dNe_4=dNe_4(前回値) 
・CYLCNT=3のとき、
dNe_1=dNe_1(前回値),
dNe_2=(dNe+dNe_2(前回値))/2
dNe_3=dNe_3(前回値), dNe_4=dNe_4(前回値)
・CYLCNT=4のとき、
dNe_1=(dNe+dNe_1(前回値))/2, 
dNe_2=dNe_2(前回値)
dNe_3=dNe_3(前回値), dNe_4=dNe_4(前回値)
なお、実施例１と同じく、dNe_1、dNe_2、dNe_3、dNe_4は、それぞれ、１番気筒、２番気筒、３番気筒、４番気筒の回転変動（角加速度）を示し、正・負双方の値をとり得る。
【０１３５】
また、位相検出回数N_2revが０のときは、各回転変動（dNe_1, dNe_2, dNe_3, dNe_4）を０に初期化する。前述したように、検出許可フラグfp_kenが０であるときは、位相検出回数N_2revが０となる。
【０１３６】
＜空燃比ずれ気筒検出部２（２０５）（図１８）＞
図１８に示す空燃比ずれ気筒検出部２（２０５）では、実施例１の空燃比ずれ気筒検出部２（１０５）と同様に、気筒別の回転変動dNe_1, dNe_2, dNe_3, dNe_4を用いて、空燃比がずれている気筒をそのずれの方向とともに特定する。但し、この実施例２においては、統計処理区間毎、つまり、位相検出回数N_2revが所定の閾値KN_2revに達したときに、気筒の特定を行う。
【０１３７】
図１８の処理では、実施例１の空燃比ずれ気筒検出部２（１０５）と同じく、まず、回転変動に基づくリッチ気筒およびリーン気筒を表す８つのフラグ（f_1R_dNe、f_2R_dNe、f_3R_dNe、f_4R_dNe、f_1L_dNe、f_2L_dNe、f_3L_dNe、f_4L_dNe）を全て０に初期化する。
【０１３８】
そして、N_2rev=KN_2revのとき、つまり位相検出回数N_2revが所定の閾値KN_2revに達したときに、４つの回転変動の比較から、下記のようにフラグのセットを行う。
【０１３９】
・dNe_1, dNe_2, dNe_3, dNe_4の中の最大値がdNe_1のとき、１番気筒の空燃比が最もリッチであるとみなして、１番気筒リッチフラグ(f_1R_dNe)を1とする。
【０１４０】
・dNe_1, dNe_2, dNe_3, dNe_4の中の最大値がdNe_2のとき、２番気筒の空燃比が最もリッチであるとみなして、２番気筒リッチフラグ(f_2R_dNe)を1とする。
【０１４１】
・dNe_1, dNe_2, dNe_3, dNe_4の中の最大値がdNe_3のとき、３番気筒の空燃比が最もリッチであるとみなして、３番気筒リッチフラグ(f_3R_dNe)を1とする。
【０１４２】
・dNe_1, dNe_2, dNe_3, dNe_4の中の最大値がdNe_4のとき、４番気筒の空燃比が最もリッチであるとみなして、４番気筒リッチフラグ(f_4R_dNe)を1とする。
【０１４３】
・dNe_1, dNe_2, dNe_3, dNe_4の中の最小値がdNe_1のとき、１番気筒の空燃比が最もリーンであるとみなして、１番気筒リーンフラグ(f_1L_dNe)を1とする。
【０１４４】
・dNe_1, dNe_2, dNe_3, dNe_4の中の最小値がdNe_2のとき、２番気筒の空燃比が最もリーンであるとみなして、２番気筒リーンフラグ(f_2L_dNe)を1とする。
【０１４５】
・dNe_1, dNe_2, dNe_3, dNe_4の中の最小値がdNe_3のとき、３番気筒の空燃比が最もリーンであるとみなして、３番気筒リーンフラグ(f_3L_dNe)を1とする。
【０１４６】
・dNe_1, dNe_2, dNe_3, dNe_4の中の最小値がdNe_4のとき、４番気筒の空燃比が最もリーンであるとみなして、４番気筒リーンフラグ(f_4L_dNe)を1とする。
【０１４７】
このように、実施例２では、ある区間（統計処理区間）の間の平均的な回転変動の大小から空燃比が最もずれている気筒の特定を行うので、その精度が高くなる。
【０１４８】
＜空燃比ずれ気筒検出部３（２０６）（図１９）＞
図１９に示す空燃比ずれ気筒検出部３（２０６）では、実施例１の空燃比ずれ気筒検出部３（１０６）と同様に、空燃比ずれ気筒検出部１（２０３）の検出結果と空燃比ずれ気筒検出部２（２０５）の検出結果とを用いて、空燃比が最もずれている一つの気筒をそのずれ方向とともに最終的に特定する。但し、この実施例２においては、回転変動からリーンとリッチの２つの気筒が検出されたときの処理が実施例１とは異なっている。
【０１４９】
図１９の処理では、まず、最終的なリッチ気筒およびリーン気筒を表す８つのフラグ（f_1R、f_2R、f_3R、f_4R、f_1L、f_2L、f_3L、f_4L）を全て０に初期化する。そして、空燃比センサ１２の出力信号のエンジン２回転成分に基づく候補気筒を表すフラグと、クランク角センサ１５による気筒別の回転変動に基づくリッチ気筒およびリーン気筒を表すフラグと、の組み合わせによって、下記のようにフラグのセットを行う。
【０１５０】
・f_d_2rev=1かつf_1L_dNe=1のとき、１番気筒の空燃比が最もリーンであると判断し、１番気筒リーンフラグf_1Lを１とする。なお、仮に、このとき回転変動の情報に基づき同時に他の気筒がリッチであることを示していても（つまり回転変動によるリッチフラグが１であっても）、リーンフラグを優先し、リーンである気筒が最も空燃比がずれている気筒であると判定する。これは、リーンである気筒の方がエンジンの安定性に影響することを考慮したものである。
【０１５１】
同様に、下記のように処理する。
【０１５２】
・f_c_2rev=1かつf_2L_dNe=1のとき、２番気筒の空燃比が最もリーンであると判断し、２番気筒リーンフラグf_2Lを１とする。
【０１５３】
・f_b_2rev=1かつf_3L_dNe=1のとき、３番気筒の空燃比が最もリーンであると判断し、３番気筒リーンフラグf_3Lを１とする。
【０１５４】
・f_a_2rev=1かつf_4L_dNe=1のとき、４番気筒の空燃比が最もリーンであると判断し、４番気筒リーンフラグf_4Lを１とする。
【０１５５】
一方、
・f_a_2rev=1かつf_1R_dNe=1かつf_4L=0のときは、エンジン２回転成分の位相に基づく検出結果および回転変動に基づく検出結果の双方から、１番気筒の空燃比が最もリッチであり、かつ、４番気筒はリーンではないと判断し、１番気筒リッチフラグ(f_1R)を1とする。
【０１５６】
以下、同様に下記のように処理する。
【０１５７】
・f_b_2rev=1かつf_2R_dNe=1かつf_3L=0のとき、f_2R=1とする。
【０１５８】
・f_c_2rev=1かつf_3R_dNe=1かつf_2L=0のとき、f_3R=1とする。
【０１５９】
・f_d_2rev=1かつf_4R_dNe=1かつf_1L=0のとき、f_4R=1とする。
【０１６０】
このように、実施例２においては、所定の統計処理区間内における位相の発生頻度および同区間内の平均的な回転変動の大小に基づいて、空燃比が最もずれている気筒をそのずれの方向とともに特定するので、より精度の高い特定が可能である。また、エンジン２回転成分のパワーが所定値であるときに限って、位相検出などの処理を行うので、空燃比のばらつきが殆どないような場合の誤検出を防止できる。また、リッチ気筒とリーン気筒の２つの気筒が存在する場合に、リーン気筒の方を空燃比が最もずれている気筒として選択するので、例えば燃料噴射量の補正等によるエンジンの安定性の確保がより容易となる。
【０１６１】
［実施例３］
次に、図２０に基づいて実施例３について説明する。本実施例の特徴は、検出精度をより高めるために、フューエルカットなどに伴う空燃比センサ１２の極端にリーンもしくはリッチな出力信号を排除するとともに、検出した位相を各気筒に対応した複数の範囲に分類する際の位相の閾値（K1_Phase等）をエンジン運転条件に応じて可変的に設定するようにした点にある。他は、基本的に実施例２と同様であるので、重複する説明は省略する。
【０１６２】
実施例３のシステム構成およびコントロールユニット１６の構成は、前述した図１，図２つまり実施例１のものと同様である。以下、実施例３としてＲＯＭ２２に書き込まれた制御プログラムについて説明する。
【０１６３】
図２０は実施例３の制御全体を表したブロック図であり、下記の各部で構成される。
【０１６４】
・シリンダ内空気量演算部２１１（図１１）
・２回転成分演算部１０１（図４）
・２回転成分パワー演算部２１２（図１２）
・検出許可部３１３（図２１に詳細を示す）
・２回転成分位相演算部１０２（図５）
・２回転成分位相出現頻度演算部３１４（図１４、図２２、図２３に詳細を示す）
・空燃比ずれ気筒検出部１（２０３）（図１６）
・気筒別回転変動演算部（２０４）（図１７）
・空燃比ずれ気筒検出部２（２０５）（図１８）
・空燃比ずれ気筒検出部３（２０６）（図１９）
制御全体は実施例２と同様であり、簡単に説明すると、「シリンダ内空気量演算部２１１」では、シリンダ内空気量(Tp)を演算する。
【０１６５】
前述した「２回転成分演算部１０１」で、触媒上流空燃比センサ１２の出力信号(Rabf)の離散フーリエ変換によりこの出力信号(Rabf)に含まれるエンジン２回転成分の実数部(R_2rev)と虚数部(I_2rev)を演算する。「２回転成分パワー演算部２１２」で実数部R_2revと虚数部I_2revとから、２回転成分パワー(Power)を演算する。
【０１６６】
「検出許可部３１３」では、最も空燃比がずれている気筒の検出を許可するフラグ(fp_ken)を演算する。
【０１６７】
前述した「２回転成分位相演算部１０２」で、実数部R_2revと虚数部I_2revとから、エンジン２回転成分の位相(Phase)を演算する。そして「２回転成分位相出現頻度演算部３１４」で、各気筒別に、２回転成分位相出現頻度(R_a_2rev等)を演算する。「空燃比ずれ気筒検出部１（２０３）」では、２回転成分位相出現頻度（R_a_2rev等）から、空燃比がずれている気筒（詳しくは、空燃比がずれている可能性がある２つの気筒の候補）とずれ方向(リッチもしくはリーン)を検出する。
【０１６８】
「気筒別回転変動演算部２０４」では、クランク角センサ１５の信号から気筒別回転変動(dNe_1, dNe_2, dNe_3, dNe_4)を演算する。
【０１６９】
「空燃比ずれ気筒検出部２（２０５）」では、気筒別回転変動d_Ne_1, dNe_2, dNe_3, dNe_4から、空燃比がずれている気筒とずれ方向(リッチもしくはリーン)を検出する。
【０１７０】
そして、「空燃比ずれ気筒検出部３（２０６）」では、「空燃比ずれ気筒検出部１（２０３）」の検出結果と「空燃比ずれ気筒検出部２（２０５）」の検出結果の双方を用いて、最終的な空燃比ずれ気筒とずれ方向(リッチもしくはリーン)を検出する。
【０１７１】
以下、実施例２と異なる検出許可部３１３および２回転成分位相出現頻度演算部３１４の詳細を、図２１〜図２３のブロック図に基づいて説明する。なお、図２１〜図２３の処理は、各気筒の燃焼毎つまり１８０°ＣＡ周期で実行される。他のシリンダ内空気量演算部２１１、２回転成分演算部１０１、２回転成分パワー演算部２１２、２回転成分位相演算部１０２、空燃比ずれ気筒検出部１（２０３）、気筒別回転変動演算部（２０４）、空燃比ずれ気筒検出部２（２０５）、空燃比ずれ気筒検出部３（２０６）については、前述したものと変わりがないので、説明は省略する。
【０１７２】
＜検出許可部３１３（図２１）＞
検出許可部３１３では、図２１に示すように、空燃比がずれている気筒の検出を行うか否かを示す検出許可フラグ(fp_ken)のセット、リセットを行う。具体的には、２回転成分パワーPowerと空燃比センサ１２の出力信号Rabfとから、下記のように処理する。
【０１７３】
・Power≧K1_Power
かつ
K1_Rabf≦Rabf≦K2_Rabf
のとき、fp_ken(検出許可フラグ)を１とする。
【０１７４】
・それ以外では、fp_ken(検出許可フラグ)を０とする。
【０１７５】
すなわち、空燃比センサ１２の出力信号Rabfが一定範囲内（例えば空燃比として１３．５〜１５など）にあり、かつ２回転成分パワーPowerが所定の閾値K1_Power以上である場合に限って、空燃比が最もずれている気筒の検出を許可する。これによって、不要な誤検出が回避される。閾値K1_Powerは、目標検出性能相当の空燃比ばらつきレベルに応じて決めることが望ましい。本実施例３では、空燃比を一定範囲内に制限することで、フューエルカットなどによる極端な出力信号による誤差が排除される。閾値K1_Rabf, K2_Rabfは、空燃比センサ１２の出力信号Rabfからエンジン２回転成分が検出可能な空燃比範囲として決めることが望ましい。
【０１７６】
＜２回転成分位相出現頻度演算部３１４（図１４）＞
実施例３においては、２回転成分位相出現頻度演算部３１４が実施例２の２回転成分位相出現頻度演算部２１４とは異なっているが、その全体的な構成は、図１４に示した実施例２のものと同様であるので、その詳細な説明は省略する。実施例３では、図１４の一部をなす空燃比ずれ発生回数演算部３１５（実施例２の空燃比ずれ発生回数演算部２１５と区別するために異なる参照符号を付す）が実施例２のものと異なっている。
【０１７７】
＜空燃比ずれ発生回数演算部３１５（図２２）＞
実施例３の空燃比ずれ発生回数演算部３１５は、図２２に示すように、図１５のものと比較して、検出した位相を各気筒に対応した複数の範囲に分類する際の位相の閾値（K1_Phase等）をエンジン運転条件に応じて可変的に設定する位相しきい値演算部３２１を備えている点において異なっている。
【０１７８】
すなわち、この空燃比ずれ発生回数演算部３１５は、実施例２と同じく、空燃比ずれ発生回数(Cnt_a_2rev等)をカウントするものであって、２回転成分位相Phaseと検出許可フラグfp_kenを用いて、下記の処理を行う。前述したように、N_2revは、位相検出回数、Cnt_a_2revは、「１番気筒リッチもしくは４番気筒リーン」発生回数、Cnt_b_2revは、「２番気筒リッチもしくは３番気筒リーン」発生回数、Cnt_c_2revは、「３番気筒リッチもしくは２番気筒リーン」発生回数、Cnt_d_2revは、「４番気筒リッチもしくは１番気筒リーン」発生回数、である。
【０１７９】
検出許可フラグfp_kenが０であるときは、これらのN_2rev、Cnt_a_2rev、Cnt_b_2rev、Cnt_c_2rev、Cnt_d_2rev、を全て０にリセットする。
【０１８０】
検出許可フラグfp_kenが１であるときは、位相検出回数N_2revに基づき、下記の通りとする。
【０１８１】
i）N_2rev(前回値)＜KN_2revのとき
・N_2rev=N_2rev(前回値）＋１
とし、さらに、
・K1_Phase≦Phase＜K2_Phaseであれば、
Cnt_a_2rev=Cnt_a_2rev(前回値)＋１
・K2_Phase≦Phase＜K3_Phaseであれば、
Cnt_b_2rev=Cnt_b_2rev(前回値)＋１
・K3_Phase≦Phase＜K4_Phaseであれば、
Cnt_c_2rev=Cnt_c_2rev(前回値)＋１
・K4_Phase≦Phase＜K5_Phaseであれば、
Cnt_d_2rev=Cnt_d_2rev(前回値)＋１
ii）N_2rev(前回値)＝KN_2revのとき
・N_2rev=１
とし、さらに、
・K1_Phase≦Phase＜K2_Phaseであれば、
Cnt_a_2rev=１
・K2_Phase≦Phase＜K3_Phaseであれば、
Cnt_b_2rev=１
・K3_Phase≦Phase＜K4_Phaseであれば、
Cnt_c_2rev=１
・K4_Phase≦Phase＜K5_Phaseであれば、
Cnt_d_2rev=１
ここで、本実施例３においては、位相範囲を仕切る閾値K1_Phase、K2_Phase、K3_Phase、K4_Phase、K5_Phaseが、エンジン回転速度Neとシリンダ内空気量Tpとに基づいて、位相しきい値演算部３２１によって演算される。
【０１８２】
＜位相しきい値演算部３２１（図２３）＞
位相しきい値演算部３２１は、図２３に示すように、例えば、エンジン回転速度Neとシリンダ内空気量Tpとをパラメータとする各々のテーブルTbl_K1_Phase、Tbl_K2_Phase、Tbl_K3_Phase、Tbl_K4_Phase、Tbl_K5_Phaseを参照して、位相閾値(K1_Phase、K2_Phase、K3_Phase、K4_Phase、K5_Phase)を求める。
【０１８３】
各テーブルの値は、エンジンに応じて変わるので、エンジン回転速度Neとシリンダ内空気量Tpとで定まる各運転条件毎に経験的ないし実験的に決めることが望ましい。
【０１８４】
このように実施例３では、位相範囲を仕切る閾値をエンジン運転条件に応じて可変的に設定するので、気筒番号と位相との対応関係がより確実に得られ、最終的な気筒の特定の精度が向上する。
【０１８５】
［実施例４］
次に、図２４に基づいて実施例４について説明する。本実施例の特徴は、前述の各実施例のように空燃比が最もずれている気筒をそのずれ方向とともに特定した後、気筒間の空燃比差が小さくなるように、少なくとも一つの気筒の燃料噴射量を補正するようにした点にある。他は、基本的に実施例３と同様であるので、重複する説明は省略する。
【０１８６】
実施例４のシステム構成およびコントロールユニット１６の構成は、前述した図１，図２つまり実施例１のものと同様である。以下、実施例４としてＲＯＭ２２に書き込まれた制御プログラムについて説明する。
【０１８７】
図２４は実施例４の制御全体を表したブロック図であり、下記の各部で構成される。
【０１８８】
・シリンダ内空気量演算部２１１（図１１）
・２回転成分演算部１０１（図４）
・２回転成分パワー演算部２１２（図１２）
・検出許可部３１３（図２１）
・２回転成分位相演算部１０２（図５）
・２回転成分位相出現頻度演算部３１４（図１４、図２２、図２３）
・空燃比ずれ気筒検出部１（２０３）（図１６）
・気筒別回転変動演算部（２０４）（図１７）
・空燃比ずれ気筒検出部２（２０５）（図１８）
・空燃比ずれ気筒検出部３（２０６）（図１９）
・燃料噴射量補正値演算部４３１（図２５に詳細を示す）
・燃料噴射量演算部４３２（図２６に詳細を示す）
燃料噴射量の補正を除く基本的な制御は実施例３と同様であり、簡単に説明すると、「シリンダ内空気量演算部２１１」では、シリンダ内空気量(Tp)を演算する。
【０１８９】
「２回転成分演算部１０１」で、触媒上流空燃比センサ１２の出力信号(Rabf)の離散フーリエ変換によりこの出力信号(Rabf)に含まれるエンジン２回転成分の実数部(R_2rev)と虚数部(I_2rev)を演算する。「２回転成分パワー演算部２１２」で実数部R_2revと虚数部I_2revとから、２回転成分パワー(Power)を演算する。
【０１９０】
「検出許可部３１３」では、最も空燃比がずれている気筒の検出を許可するフラグ(fp_ken)を演算する。
【０１９１】
「２回転成分位相演算部１０２」で、実数部R_2revと虚数部I_2revとから、エンジン２回転成分の位相(Phase)を演算する。そして「２回転成分位相出現頻度演算部３１４」で、各気筒別に、２回転成分位相出現頻度(R_a_2rev等)を演算する。「空燃比ずれ気筒検出部１（２０３）」では、２回転成分位相出現頻度（R_a_2rev等）から、空燃比がずれている気筒（詳しくは、空燃比がずれている可能性がある２つの気筒の候補）とずれ方向(リッチもしくはリーン)を検出する。
【０１９２】
「気筒別回転変動演算部２０４」では、クランク角センサ１５の信号から気筒別回転変動(dNe_1, dNe_2, dNe_3, dNe_4)を演算する。
【０１９３】
「空燃比ずれ気筒検出部２（２０５）」では、気筒別回転変動d_Ne_1, dNe_2, dNe_3, dNe_4から、空燃比がずれている気筒とずれ方向(リッチもしくはリーン)を検出する。
【０１９４】
そして、「空燃比ずれ気筒検出部３（２０６）」では、「空燃比ずれ気筒検出部１（２０３）」の検出結果と「空燃比ずれ気筒検出部２（２０５）」の検出結果の双方を用いて、最終的な空燃比ずれ気筒とずれ方向(リッチもしくはリーン)を検出する。
【０１９５】
実施例４では、さらに、「燃料噴射量補正値演算部４３１」において、最終的な空燃比ずれ気筒とずれ方向とから各気筒毎に燃料噴射量補正値(Fhos1等)を演算する。そして、「燃料噴射量演算部４３２」では、演算した各気筒の燃料噴射量補正値(Fhos1等)を用いて、気筒別の燃料噴射量(TI1等)を演算する。
【０１９６】
以下、実施例３と異なる燃料噴射量補正値演算部４３１および燃料噴射量演算部４３２の詳細を、図２５、図２６のブロック図に基づいて説明する。なお、図２５の処理は、各気筒の燃焼毎つまり１８０°ＣＡ周期で実行される。他のシリンダ内空気量演算部２１１、２回転成分演算部１０１、２回転成分パワー演算部２１２、検出許可部３１３、２回転成分位相演算部１０２、２回転成分位相出現頻度演算部３１４、空燃比ずれ気筒検出部１（２０３）、気筒別回転変動演算部（２０４）、空燃比ずれ気筒検出部２（２０５）、空燃比ずれ気筒検出部３（２０６）については、前述したものと変わりがないので、説明は省略する。
【０１９７】
＜燃料噴射量補正値演算部４３１（図２５）＞
図２５に示す燃料噴射量補正値演算部４３１では、前述したように空燃比ずれ気筒検出部３（２０６）から最終的に出力される各気筒毎のリッチフラグないしリーンフラグ（f_1R、f_1L等）に基づいて、１番気筒〜４番気筒の燃料噴射量補正値(Fhos1,Fhos2,Fhos3,Fhos4)をそれぞれ演算する。具体的には、下記のように、リッチ側およびリーン側への所定の微小量HosR、HosLの加算・減算によって、各気筒の燃料噴射量補正値（Fhos1等）を増減変化させていく。
【０１９８】
・f_1R=1のとき
Fhos1=Fhos1(前回値)−HosR
f_1L=1のとき
Fhos1=Fhos1(前回値)＋HosL
それ以外は、
Fhos1=Fhos1(前回値)
・f_2R=1のとき
Fhos2=Fhos2(前回値)−HosR
f_2L=1のとき
Fhos2=Fhos2(前回値)＋HosL
それ以外は、
Fhos2=Fhos2(前回値)
・f_3R=1のとき
Fhos3=Fhos3(前回値)−HosR
f_3L=1のとき
Fhos3=Fhos3(前回値)＋HosL
それ以外は、
Fhos3=Fhos3(前回値)
・f_4R=1のとき
Fhos4=Fhos4(前回値)−HosR
f_4L=1のとき
Fhos4=Fhos4(前回値)＋HosL
それ以外は、
Fhos4=Fhos4(前回値)
なお、リッチ側への変化量HosRおよびリーン側への変化量HosLは、目標とする補正速度や補正精度に応じて決めることが望ましい。
【０１９９】
＜燃料噴射量演算部４３２（図２６）＞
図２６に示す燃料噴射量演算部４３２では、前述した各気筒の燃料噴射量補正値（Fhos1等）を用いて、１番気筒〜４番気筒の燃料噴射量(TI1, TI2, TI3, TI4)をそれぞれ演算する。具体的には、下記に示すように、シリンダ内空気量Tpに燃料噴射量補正値（Fhos1等）を乗じて、燃料噴射量を求める。
【０２００】
TI1=Tp×Fhos1
TI2=Tp×Fhos2
TI3=Tp×Fhos3
TI4=Tp×Fhos4
このように、空燃比が最もずれている気筒として特定された気筒の燃料噴射量を、その空燃比のずれが小さくなる方向に補正することで、空燃比のばらつきが小さくなり、エンジンの安定性が向上するとともに、全気筒が目標空燃比（例えば理論空燃比）に揃うようになり、排気性能が向上する。
【０２０１】
［実施例５］
次に、図２７に基づいて実施例５について説明する。本実施例の特徴は、前述の各実施例のように空燃比が最もずれている気筒をそのずれ方向とともに特定した後、そのずれが過度に大きい場合には、エンジンの排気性能および安定性の悪化を報知するようにした点にある。他は、基本的に実施例３と同様であるので、重複する説明は省略する。
【０２０２】
実施例５のシステム構成およびコントロールユニット１６の構成は、前述した図１，図２つまり実施例１のものと同様である。以下、実施例５としてＲＯＭ２２に書き込まれた制御プログラムについて説明する。
【０２０３】
図２７は実施例４の制御全体を表したブロック図であり、下記の各部で構成される。
【０２０４】
・シリンダ内空気量演算部２１１（図１１）
・２回転成分演算部１０１（図４）
・２回転成分パワー演算部２１２（図１２）
・検出許可部３１３（図２１）
・２回転成分位相演算部１０２（図５）
・２回転成分位相出現頻度演算部３１４（図１４、図２２、図２３）
・空燃比ずれ気筒検出部１（２０３）（図１６）
・気筒別回転変動演算部（２０４）（図１７）
・空燃比ずれ気筒検出部２（２０５）（図１８）
・空燃比ずれ気筒検出部３（２０６）（図１９）
・異常判定部５４１（図２８に詳細を示す）
異常報知を除く基本的な制御は実施例３と同様であり、簡単に説明すると、「シリンダ内空気量演算部２１１」では、シリンダ内空気量(Tp)を演算する。
【０２０５】
「２回転成分演算部１０１」で、触媒上流空燃比センサ１２の出力信号(Rabf)の離散フーリエ変換によりこの出力信号(Rabf)に含まれるエンジン２回転成分の実数部(R_2rev)と虚数部(I_2rev)を演算する。「２回転成分パワー演算部２１２」で実数部R_2revと虚数部I_2revとから、２回転成分パワー(Power)を演算する。
【０２０６】
「検出許可部３１３」では、最も空燃比がずれている気筒の検出を許可するフラグ(fp_ken)を演算する。
【０２０７】
「２回転成分位相演算部１０２」で、実数部R_2revと虚数部I_2revとから、エンジン２回転成分の位相(Phase)を演算する。そして「２回転成分位相出現頻度演算部３１４」で、各気筒別に、２回転成分位相出現頻度(R_a_2rev等)を演算する。「空燃比ずれ気筒検出部１（２０３）」では、２回転成分位相出現頻度（R_a_2rev等）から、空燃比がずれている気筒（詳しくは、空燃比がずれている可能性がある２つの気筒の候補）とずれ方向(リッチもしくはリーン)を検出する。
【０２０８】
「気筒別回転変動演算部２０４」では、クランク角センサ１５の信号から気筒別回転変動(dNe_1, dNe_2, dNe_3, dNe_4)を演算する。
【０２０９】
「空燃比ずれ気筒検出部２（２０５）」では、気筒別回転変動d_Ne_1, dNe_2, dNe_3, dNe_4から、空燃比がずれている気筒とずれ方向(リッチもしくはリーン)を検出する。
【０２１０】
そして、「空燃比ずれ気筒検出部３（２０６）」では、「空燃比ずれ気筒検出部１（２０３）」の検出結果と「空燃比ずれ気筒検出部２（２０５）」の検出結果の双方を用いて、最終的な空燃比ずれ気筒とずれ方向(リッチもしくはリーン)を検出する。
【０２１１】
実施例５では、さらに、「異常判定部５４１」において、最終的に特定された空燃比が最もずれている気筒およびその方向と、空燃比センサ出力信号のエンジン２回転成分のパワーと、から、異常フラグ(f_MIL)の演算を行う。
【０２１２】
以下、実施例３と異なる異常判定部５４１の詳細を、図２８のブロック図に基づいて説明する。なお、他のシリンダ内空気量演算部２１１、２回転成分演算部１０１、２回転成分パワー演算部２１２、検出許可部３１３、２回転成分位相演算部１０２、２回転成分位相出現頻度演算部３１４、空燃比ずれ気筒検出部１（２０３）、気筒別回転変動演算部（２０４）、空燃比ずれ気筒検出部２（２０５）、空燃比ずれ気筒検出部３（２０６）については、前述したものと変わりがないので、説明は省略する。
【０２１３】
＜異常判定部５４１（図２８）＞
図２８に示す異常判定部５４１では、前述したように空燃比ずれ気筒検出部３（２０６）から最終的に出力される各気筒毎のリッチフラグないしリーンフラグ（f_1R、f_1L等）と、２回転成分パワー演算部２１２から出力されるエンジン２回転成分のパワーPowerと、に基づいて、異常フラグ(f_MIL)のセット、リセットを行う。具体的には、各気筒のリッチフラグないしリーンフラグ（f_1R_dNe、f_2R_dNe、f_3R_dNe、f_4R_dNe、f_1L_dNe、f_2L_dNe、f_3L_dNe、f_4L_dNe）のいずれかが１で、かつ「Power≧K2_Power」のときには、異常フラグ(f_MIL)を１とし、それ以外であれば、０とする。
【０２１４】
パワーPowerの閾値K2_Powerの値は、報知したい排気悪化レベル相当となるよう、経験的ないし実験的に決めることが望ましい。なお、図２８には示していないが、異常フラグf_MILが１となったときに、例えば、警告ランプの点灯や警告音等によって運転者にエンジンの排気性能異常を報知することができる。
【０２１５】
このように、エンジン２回転成分のパワーPowerの大きさに基づき、各気筒の空燃比のばらつきが許容し得る範囲内のものであるか否かを確実に判別することができる。
【符号の説明】
【０２１６】
７…燃料噴射弁
９…エンジン
１２…触媒上流空燃比センサ
１５…クランク角センサ
１６…コントロールユニット
１０１…２回転成分演算部
１０２…２回転成分位相演算部
１０３…空燃比ずれ気筒検出部１
１０４…気筒別回転変動演算部
１０５…空燃比ずれ気筒検出部２
１０６…空燃比ずれ気筒検出部３
【図１】
2014088795.tif 000003
【図２】
2014088795.tif 000004
【図３】
2014088795.tif 000005
【図４】
2014088795.tif 000006
【図５】
2014088795.tif 000007
【図６】
2014088795.tif 000008
【図７】
2014088795.tif 000009
【図８】
2014088795.tif 000010
【図９】
2014088795.tif 000011
【図１０】
2014088795.tif 000012
【図１１】
2014088795.tif 000013
【図１２】
2014088795.tif 000014
【図１３】
2014088795.tif 000015
【図１４】
2014088795.tif 000016
【図１５】
2014088795.tif 000017
【図１６】
2014088795.tif 000018
【図１７】
2014088795.tif 000019
【図１８】
2014088795.tif 000020
【図１９】
2014088795.tif 000021
【図２０】
2014088795.tif 000022
【図２１】
2014088795.tif 000023
【図２２】
2014088795.tif 000024
【図２３】
2014088795.tif 000025
【図２４】
2014088795.tif 000026
【図２５】
2014088795.tif 000027
【図２６】
2014088795.tif 000028
【図２７】
2014088795.tif 000029
【図２８】
2014088795.tif 000030
【図２９】
2014088795.tif 000031
【図３０】
2014088795.tif 000032