(57)【要約】【課題】各気筒ごとに最適な空燃比状態に制御することができるエンジン制御装置を提供すること。【解決手段】異常気筒判定部５１は、回転角センサ２６からの回転角信号に基づいて、エンジンの回転変動が起こっている異常な気筒を判定する。また、リッチ・リーン判定部５２は、空燃比センサ２４からの空燃比信号に基づいて、空燃比が目標空燃比に対して、リッチまたはリーン側にずれているかを判定する。そして、ずれレベル算出部５３は異常気筒情報とリッチ・リーン情報とに基づいて、各気筒のずれレベルを算出する。更に各気筒噴射弁補正量算出部５４は、ずれレベル算出部５３から入力される各気筒のずれレベル情報に基づいて、各気筒の燃料噴射弁９の燃料噴射量に対する補正量を算出する。【選択図】図２
2004346807.tif 000002
【特許請求の範囲】
【請求項１】
多気筒エンジンのクランク軸の回転角及び該エンジンに吸入された燃料混合気の空燃比を含む多気筒エンジンの運転状態を検出する運転状態検出手段と、
該運転状態検出手段により検出された空燃比が目標空燃比となるように前記エンジンの制御量を演算する制御量演算手段と、
該制御量演算手段により演算された制御量に基づいて前記エンジンを各気筒毎に制御する制御手段と、
を備えたエンジン制御装置であって、
前記運転状態検出手段により検出された回転角に基づいて、前記エンジンの回転変動を起こしている異常な気筒を検出する異常気筒検出手段と、
前記運転状態検出手段により検出された空燃比の変動周期に対応した所定期間内における前記空燃比の平均値を算出し、該平均値と前記目標空燃比との間のずれを検出する空燃比ずれ検出手段と、
該空燃比ずれ検出手段により検出されたずれが所定範囲からはずれた時には、前記ずれが前記所定範囲内に収まるように、前記異常気筒検出手段にて検出された異常気筒に対して、前記制御手段が用いる制御量を補正する補正手段と、
を備えたことを特徴とするエンジン制御装置。
【請求項２】
前記エンジンは車両に搭載され、
前記異常気筒検出手段および前記空燃比ずれ検出手段は夫々、前記車両が停止状態にあるときに、前記異常気筒の検出および前記ずれの検出を行うことを特徴とする請求項１に記載のエンジン制御装置。
【請求項３】
前記異常気筒検出手段および前記空燃比ずれ検出手段は夫々、当該エンジン制御装置が起動した後に前記ずれが所定時間継続して前記所定範囲内に収まった場合には、それ以降、前記異常気筒の検出および前記ずれの検出を中止することを特徴とする請求項１または請求項２に記載のエンジン制御装置。
【請求項４】
前記補正手段は、前記空燃比ずれ検出手段により検出されたずれが前記所定範囲からはずれているか否かを判定し、前記ずれが前記所定範囲からはずれていると判定される毎に、前記異常気筒における前記ずれの大きさを表すパラメータを更新するとともに、該パラメータに基づいて、前記制御量を補正することを特徴とする請求項１〜請求項３何れかに記載のエンジン制御装置。
【請求項５】
前記補正手段は、前記更新された最新のパラメータを記憶する第１記憶手段を備え、当該エンジン制御装置の起動時には、前記第１記憶手段から前記パラメータを取得し、該パラメータに基づいて、前記制御量を補正する、
ことを特徴とする請求項４に記載のエンジン制御装置。
【請求項６】
前記制御量演算手段は、前記空燃比が前記目標空燃比となるように、燃料噴射弁により噴射される燃料噴射量を演算し、
前記制御手段は、前記燃料噴射量に基づいて、前記気筒毎に前記燃料噴射弁を制御し、
前記補正手段は、前記異常気筒検出手段にて検出された異常気筒に対して、前記制御手段が用いる燃料噴射量を補正する、
ことを特徴とする請求項１〜請求項５何れかに記載のエンジン制御装置。
【請求項７】
前記制御量演算手段は、前記空燃比が前記目標空燃比となるように、吸気弁のリフト量を演算し、
前記制御手段は、前記リフト量に基づいて、前記気筒毎に前記吸気弁を制御し、
前記補正手段は、前記異常気筒検出手段にて検出された異常気筒に対して、前記制御手段が用いるリフト量を補正する、
ことを特徴とする請求項１〜請求項５何れかに記載のエンジン制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、エンジンに吸入される燃料混合気の空燃比が目標空燃比となるように多気筒エンジンを気筒毎に制御するエンジン制御装置に関する。
【０００２】
【従来の技術】
従来より、エンジンの排ガスの浄化促進のために、エンジンに吸入される燃料混合気の空燃比が目標空燃比となるようにフィードバック制御することが行われている。この空燃比を制御する方法としては、燃料噴射弁を制御して燃料混合気に含まれる燃料の量を調節する方法や、吸気弁を制御して吸入空気の量を調節する方法などがあり、例えば、エンジンのクランク軸に対する吸気弁側カム軸の回転位相差が、エンジン回転速度や吸入空気量等のエンジン運転状態に応じて算出された目標位相差になるようにして、バルブタイミングを制御しているものが知られている（例えば、特許文献１参照。）。
【０００３】
【特許文献１】
特開平８−７４５３０号公報  （第６−７頁、第７図）
【０００４】
【発明が解決しようとする課題】
しかし、燃料混合気の空燃比が目標空燃比となるようにフィードバック制御しても、各気筒ごとの吸気弁の開閉機構の機械的なばらつきや、各気筒ごとの燃料噴射弁の噴射特性のばらつきなどのために最適な空燃比状態でない気筒が発生する。これにより、空燃比の変動周期に対応した期間内における空燃比の平均値が目標空燃比からずれるために、排ガスの浄化性能が低下するという問題があった。その理由を図１３を用いて以下に示す。
【０００５】
図１３は、エンジンに吸入される燃料混合気の空燃比が理論空燃比付近にあるときに最適な排ガス浄化作用が得られる三元触媒を備えた４気筒エンジンにおいて、排ガスに含まれる酸素の濃度から、エンジンに吸入される燃料混合気の空燃比を検出し、該空燃比が理論空燃比になるようにフィードバック制御する場合の空燃比の状態を説明する図である。
【０００６】
各気筒に吸入される燃料混合気の空燃比にばらつきがない場合には、図１３の点線で示される曲線のように、フィードバック制御によって周期的に空燃比が変動するものの、その変動周期内（図１３において、空燃比がリッチ側からリーン側になるタイミングから再びリッチ側からリーン側になるタイミングまでの期間。以下、Ａ／Ｆ１サイクルと称す。）での空燃比の平均値は略理論空燃比になる（図１３中の点線で示される直線を参照）。
【０００７】
一方、ある気筒に吸入される燃料混合気の空燃比がリーン側にずれている場合は、図１３の実線で示される曲線のように、その気筒の排気に対応したタイミングで空燃比がリーン側にずれる（図１３では第４気筒がリーン側にずれているとする）ため、Ａ／Ｆ１サイクル内における空燃比の平均値（図１３の空燃比センサ出力平均値）が理論空燃比よりリーン側にずれる（図１３中の実線で示される直線を参照）。
【０００８】
つまり、空燃比の平均値が理論空燃比からずれると、排ガスの浄化性能も最適な状態からずれることになる。
本発明は、上記問題を解決するためになされたもので、各気筒ごとに最適な空燃比状態に制御することができるエンジン制御装置を提供することを目的とする。
【０００９】
【課題を解決するための手段および発明の効果】
係る目的を達成するためになされた請求項１に記載のエンジン制御装置においては、運転状態検出手段は多気筒エンジンのクランク軸の回転角及びエンジンに吸入された燃料混合気の空燃比を含む多気筒エンジンの運転状態を検出し、制御量演算手段は運転状態検出手段により検出された空燃比が目標空燃比となるようにエンジンの制御量を演算し、制御手段は制御量演算手段により演算された制御量に基づいてエンジンを各気筒毎に制御する。そして更に、異常気筒検出手段はエンジンの回転変動を起こしている異常な気筒を検出し、空燃比ずれ検出手段は空燃比の変動周期に対応した所定期間内における空燃比の平均値と目標空燃比との間のずれを検出する。そして、補正手段は、そのずれが所定範囲からはずれた時には、ずれが所定範囲内に収まるように、異常な気筒に対して、制御手段が用いる制御量を補正する。
【００１０】
従って、制御手段は、空燃比の平均値と目標空燃比との間のずれが所定範囲内に収まるように、異常な気筒を制御することができる。
このため、各気筒ごとの吸気弁の開閉機構の機械的なばらつきや、各気筒ごとの燃料噴射弁の噴射特性のばらつきなどによって、空燃比の変動周期に対応した所定期間内における平均値が目標空燃比からずれることを抑えることができる。
【００１１】
ここで、異常気筒検出手段および空燃比ずれ検出手段は、エンジン制御装置が動作中に常時動作するようにしてもよい。しかし、エンジンを車両に搭載した場合、その車両の走行時には、アクセル操作に応じて空燃比が変動するので、各気筒に吸入される燃料混合気の空燃比にばらつきがない場合においても、空燃比ずれ検出手段が空燃比のずれを誤って検出することがある。一方、車両が停止状態の時にはアクセルは通常オフで、エンジンはアイドル状態になっているので、エンジンの運転状態は安定している。そこで更に請求項２に記載のように、車両が停止状態の時に検出を行うようにするとよい。
【００１２】
そして、このようにすれば、空燃比ずれ検出手段が誤検出するといったことを防止することができる。
また、異常気筒検出手段および空燃比ずれ検出手段は、エンジン制御装置が動作中に常時動作するようにしてもよいが、上記ばらつきによる空燃比ずれは通常短期間で変動することはないので、ずれが所定時間継続して所定範囲内に収まった場合には、暫くは空燃比ずれが所定範囲からはずれないと判断できる。そこで請求項３に記載のように、異常気筒検出手段および空燃比ずれ検出手段は、エンジン制御装置が起動した後に空燃比ずれが所定時間継続して所定範囲内に収まった場合には、それ以降、検出を中止するようにするとよい。
【００１３】
そして、このようにすれば、無駄に異常気筒検出手段および空燃比ずれ検出手段を動作させることを抑え、エンジン制御装置が実行する処理の負荷を低減することができる。
なお、検出を中止した後に制御量の補正も中止すると、所定範囲内に収まっていた空燃比ずれが所定範囲からはずれてしまうので、検出中止の前に、空燃比ずれの大きさに応じた補正量を学習し、補正手段はその補正量に基づいて、制御量を補正するようにする必要がある。
【００１４】
また、請求項１〜請求項３に記載のエンジン制御装置における補正手段としては、空燃比ずれの大きさに基づいて、直接補正量を求めるようにしてもよいが、空燃比センサの出力の変動や、エンジンの運転条件による空燃比制御系の変動等により、空燃比ずれ検出手段が検出した空燃比ずれが実際の空燃比ずれの大きさを反映しないことがある。このような実際のずれを反映していない補正量に基づいて制御量を補正すると、空燃比ずれが所定範囲に収まるように制御できないことがある。
【００１５】
そこで、例えば請求項４に記載のように、空燃比ずれが所定範囲からはずれていると判定される毎に、異常気筒におけるずれの大きさを表すパラメータを更新するとともに、そのパラメータに基づいて、制御手段が用いる制御量を補正するようにするとよい。
【００１６】
そして、このようにすれば、空燃比ずれが所定範囲に収まったときにパラメータの更新が終了するため、その時のパラメータに基づいて制御量を補正すれば、空燃比ずれを所定範囲内に収めることができる。
また、請求項４に記載のエンジン制御装置においては、エンジン制御装置が起動する毎に、空燃比ずれの大きさを表すパラメータを初期化し、パラメータを初期値から空燃比ずれに応じた値に改めて更新するようにしてもよいが、請求項５に記載のように、更新された最新のパラメータを第１記憶手段に記憶して、エンジン制御装置の起動時に第１記憶手段からパラメータを取得するようにしてもよい。
【００１７】
そして、このようにすれば、エンジン制御装置が起動したときから、ずれの大きさに応じたパラメータに基づいてエンジンを各気筒毎に制御するので、エンジン制御装置起動時から、エンジンを最適な空燃比状態に制御することができる。
なお、具体的には、燃料噴射弁を制御して燃料混合気に含まれる燃料の量を調節したり、吸気弁を制御して吸入空気の量を調節することにより、請求項１〜請求項５何れかに記載のエンジン制御装置において空燃比制御を実現できる。
【００１８】
そして、燃料噴射弁を用いて空燃比を制御する場合には、例えば請求項６に記載のように、制御量演算手段は空燃比が目標空燃比となるように燃料噴射弁により噴射される燃料噴射量を演算し、制御手段は燃料噴射量に基づいて気筒毎に燃料噴射弁を制御し、補正手段は異常気筒検出手段にて検出された異常気筒に対して制御手段が用いる燃料噴射量を補正するようにするとよい。
【００１９】
そして、このようにすれば、制御手段は、空燃比の平均値と目標空燃比との間のずれが所定範囲内に収まるように、異常な気筒の燃料噴射量を制御することができる。
また、吸気弁を用いて空燃比を制御する場合には、例えば請求項７に記載のように、制御量演算手段は空燃比が目標空燃比となるように吸気弁のリフト量を演算し、制御手段はリフト量に基づいて気筒毎に吸気弁を制御し、補正手段は異常気筒検出手段にて検出された異常気筒に対して制御手段が用いるリフト量を補正するようにするとよい。
【００２０】
そして、このようにすれば、制御手段は、空燃比の平均値と目標空燃比との間のずれが所定範囲内に収まるように、異常な気筒の吸気弁のリフト量を制御することができる。
【００２１】
【発明の実施の形態】
（実施の形態）
以下、４気筒エンジンに本発明のエンジン制御装置を用いたものを本発明の実施の形態として説明する。まず、本発明が適用されたエンジン制御装置全体の構成を図１に基づいて説明する。図１は本発明が適用されたエンジン１及びその周辺装置を表す概略構成図である。
【００２２】
図１に示すようにエンジン１は、シリンダ２，ピストン３及びシリンダヘッド４により燃焼室５を形成しており、燃焼室５内には点火プラグ６が配設されている。そしてエンジン１には、吸気浄化のためのエアクリーナ１５，アクセルペダル１４に連動して開閉されるスロットルバルブ１３，吸気の脈動を除去するためのサージタンク１０及び吸気管８を介して、吸気弁７の開弁時に空気が導入される。また燃料は、燃料ポンプ１１により燃料タンク１２内の燃料が供給された燃料噴射弁９を開弁することにより供給され、点火プラグ６によって点火される。そしてこの点火による燃焼後の排気は、排気弁１６の開弁時に排気管１７及び排気管１７に設けられた三元触媒１８を通って排出される。更に、エンジン１は、図示しないイグナイタからの高電圧を各気筒の点火プラグ６に分配供給するディストリビュータ１９を有する。
【００２３】
またエンジン１には、その運転状態を検出するためのセンサとして、吸気温度を検出する吸気温センサ２０、スロットルバルブ１３の開度を検出するスロットル開度センサ２１、吸気圧力を検出する吸気圧センサ２２、冷却水の温度を検出する水温センサ２３、排気管１７の三元触媒１８より上流側に取り付けられて、排ガス中の酸素濃度からエンジン１に供給された燃料混合気の空燃比を検出する空燃比センサ２４、排気管１７の三元触媒１８より下流側に取り付けられて、排気中の酸素濃度からエンジン１に供給された燃料混合気が理論空燃比に対してリッチかリーンかを検出する酸素センサ２５、ディストリビュータ１９に取り付けられてエンジン１の３０℃Ａの回転角度毎にパルス信号を発生する回転角センサ２６、エンジン１が搭載された車両の走行速度を検出する車速センサ２７が備えられている。
【００２４】
そして、これら各種センサからの検出信号は、電子制御回路（以下、ＥＣＵという）３０に入力される。ＥＣＵ３０は、ＣＰＵ３１，ＲＯＭ３２，ＲＡＭ３３，図示しないバッテリでバックアップされたバックアップＲＡＭ３４を中心とした周知のマイクロコンピュータにより構成されており、上記各センサからの検出信号はＡ／Ｄ変換器３５または入出力ポート３６を介して入力される。またＣＰＵ３１は予めＲＯＭ３２に記憶されている制御プログラムを実行し、入出力ポート３６を介して燃料噴射弁９を通電することにより、エンジン１へ燃料を供給する。
【００２５】
次に、図２を用いて、ＥＣＵ３０が実行する空燃比制御について説明する。図２は、空燃比制御を実行するためにＥＣＵ３０に付与された各機能を表す機能ブロック図である。
図２に示すように、ＥＣＵ３０は、主に、異常気筒判定部５１，リッチ・リーン判定部５２，ずれレベル算出部５３，各気筒噴射弁補正量算出部５４，各気筒噴射弁制御量決定部５５，噴射弁制御量算出部５６，エンジン運転状態検出部５７，回転角センサ２６，空燃比センサ２４，バックアップＲＡＭ３４，第１〜第４気筒燃料噴射弁９ａ〜ｄを備えている。
【００２６】
異常気筒判定部５１は、本発明の異常気筒検出手段に相当し、回転角センサ２６から入力されるエンジン１の３０℃Ａの回転角度毎の回転角信号に基づいて、エンジン回転速度と回転角を求め、エンジン１の回転変動を起こしている異常な気筒を判定する。
【００２７】
また、リッチ・リーン判定部５２は、本発明の空燃比ずれ検出手段に相当し、空燃比センサ２４から入力される空燃比信号に基づいて、エンジン１に供給された燃料混合気の空燃比が目標空燃比に対して、リッチまたはリーン側にずれているかを判定する。
【００２８】
また、エンジン運転状態検出部５７は、上述した吸気温センサ２０，スロットル開度センサ２１，吸気圧センサ２２などを備えており、これらのセンサによりエンジン１の運転状態を検出し、その検出信号を出力する。尚、エンジン運転状態検出部５７，回転角センサ２６および空燃比センサ２４は、本発明の運転状態検出手段に相当する。
【００２９】
そして、ずれレベル算出部５３は、ＥＣＵ３０が起動（電源ＯＮ）した直後に、バックアップＲＡＭ３４から各気筒のずれレベルの情報を取得し、異常気筒判定部５１から入力される異常気筒情報と、リッチ・リーン判定部５２から入力されるリッチ・リーン情報とに基づいて、各気筒のずれレベルを算出し、算出したずれレベルをバックアップＲＡＭ３４に記憶する。尚、バックアップＲＡＭ３４は本発明の第１記憶手段に相当する。
【００３０】
また、各気筒噴射弁補正量算出部５４は、エンジン運転状態検出部５７から入力されるエンジン１の運転状態を示す各種検出信号と、ずれレベル算出部５３から入力される各気筒のずれレベル情報とに基づいて、各気筒の燃料噴射弁９の燃料噴射量に対する補正量を算出する。尚、ずれレベル算出部５３および各気筒噴射弁補正量算出部５４は、本発明の補正手段に相当する。
【００３１】
また、噴射弁制御量算出部５６は、本発明の制御量演算手段に相当し、エンジン運転状態検出部５７から入力される各種検出信号に基づいて、燃料噴射弁９に対する燃料噴射量を算出する。具体的には、空燃比を理論空燃比にするように予め求められている基本燃料噴射時間をエンジン回転速度と吸気圧力とに基づいて算出し、さらに空燃比センサ２４や酸素センサ２５からの信号に基づいて、空燃比が理論空燃比になるようにするための補正等を行う。
【００３２】
そして、各気筒噴射弁制御量決定部５５は、本発明の制御手段に相当し、各気筒噴射弁補正量算出部５４から入力される各気筒毎の補正量と、噴射弁制御量算出部５６から入力される燃料噴射量とに基づいて、各気筒毎の燃料噴射量を決定し、第１〜第４気筒燃料噴射量を表す信号を出力して第１〜第４気筒燃料噴射弁９ａ〜ｄを制御する。
【００３３】
なお、図２に示す各機能は、実際には、ＥＣＵ３０内のＣＰＵ３１により実現される。以下に、本発明の主要部である異常気筒判定部５１，リッチ・リーン判定部５２，ずれレベル算出部５３および各気筒噴射弁補正量算出部５４の機能を実現するためにＣＰＵ３１にて実行される処理をフローチャートを用いて説明する。
【００３４】
異常気筒判定部５１，リッチ・リーン判定部５２，ずれレベル算出部５３および各気筒噴射弁補正量算出部５４の機能は、図３に示す初期値設定処理，図４（ａ）に示す異常気筒判定処理および図４（ｂ）に示すずれレベル判定処理により実現される。図３，図４（ａ），図４（ｂ）は夫々、初期値設定処理，異常気筒判定処理，ずれレベル判定処理を表すフローチャートである。
【００３５】
初期値設定処理は、ＥＣＵ３０が起動（電源ＯＮ）した直後、図２に示す各機能が動作する前に１回のみ実行される処理である。
また、異常気筒判定処理は、異常気筒判定部５１およびリッチ・リーン判定部５２としての処理に相当し、特に図４（ａ）のＳ１２０の異常気筒抽出処理は異常気筒判定部５１，Ｓ１３０のリッチ・リーン判定処理はリッチ・リーン判定部５２に相当する。
【００３６】
また、ずれレベル判定処理は、ずれレベル算出部５３および各気筒噴射弁補正量算出部５４としての処理に相当する。
まず図３を用いて、初期値設定処理について説明する。この初期値設定処理は、ＥＣＵ３０が起動（電源ＯＮ）した直後に１回のみ実行される処理で、後述する各種処理において用いる各種制御変数や制御フラグの初期値を設定する。
【００３７】
なお、以下の説明において、フラグをセットするとは、そのフラグの値を１にすることを示し、フラグをクリアするとは、そのフラグの値を０にすることを示している。
ＥＣＵ３０を起動させ、初期値設定処理を実行すると、ＣＰＵ３１は、まずＳ１０にて、気筒識別番号ｍを０に設定し、Ｓ２０に移行する。Ｓ２０では、各種計測に用いるカウンタの初期化を行う。具体的には、エンジン回転速度計測周期カウンタｎ，Ａ／Ｆ計測周期カウンタｊ，Ａ／Ｆ計測回数カウンタｋを夫々０に設定する。
【００３８】
次にＳ３０において、各種判定用フラグの初期化を行う。具体的には、気筒判定開始条件成立フラグｋｅｉｓｏｋｕ１，リッチ・リーン判定開始条件成立フラグｋｅｉｓｏｋｕ２，今回前提条件成立フラグｚｅｎｔｅｉ，前回前提条件成立フラグｚｅｎｔｅｉｏ，ずれレベル反映フラグｈａｎｅｉ，補正完了フラグｆｉｎｉｓｈを夫々クリアする。
【００３９】
そしてＳ４０において、異常気筒判定用の制御変数や制御フラグの初期化を行う。具体的には、第１〜第４気筒エンジン回転速度積算値Ｓ〔１〕〜Ｓ〔４〕と第１〜第４気筒エンジン回転速度ピーク値Ｓ’〔１〕〜Ｓ’〔４〕を夫々０に設定し、第１〜第４気筒リッチフラグＳ−ｈｉｇｈ〔１〕〜Ｓ−ｈｉｇｈ〔４〕と第１〜第４気筒リーンフラグＳ−ｌｏｗ〔１〕〜Ｓ−ｌｏｗ〔４〕を夫々クリアする。
【００４０】
次にＳ５０において、空燃比ずれ判定用の制御変数や制御フラグの初期化を行う。具体的には、今回Ａ／Ｆ値ａｆ，前回Ａ／Ｆ値ａｆｏをそれぞれ最大値，Ａ／Ｆ積算値ＡＦｓｕｍを０に設定し、リッチフラグＲＩＣＨ，リーンフラグＬＥＡＮを夫々クリアする。
【００４１】
そしてＳ６０において、第１気筒制御ずれレベルＬｅｖｅｌ〔１〕を、バックアップＲＡＭ３４に記憶された第１気筒記憶ずれレベルＬｅｖｅｌ−ｓｅｔ〔１〕の値に設定する。同様に、第２気筒制御ずれレベルＬｅｖｅｌ〔２〕，第３気筒制御ずれレベルＬｅｖｅｌ〔３〕，第４気筒制御ずれレベルＬｅｖｅｌ〔４〕を、それぞれ第２気筒記憶ずれレベルＬｅｖｅｌ−ｓｅｔ〔２〕，第３気筒記憶ずれレベルＬｅｖｅｌ−ｓｅｔ〔３〕，第４気筒記憶ずれレベルＬｅｖｅｌ−ｓｅｔ〔４〕の値に設定して、当該初期値設定処理を終了する。尚、第１〜第４気筒制御ずれレベルＬｅｖｅｌ〔１〕〜Ｌｅｖｅｌ〔４〕は本発明のパラメータに相当する。
【００４２】
次に、図４（ａ）を用いて、異常気筒判定処理について説明する。この異常気筒判定処理は、ＥＣＵ３０が動作している間、クランク軸の回転に同期して、３０℃Ａ毎に実行される処理で、回転変動を起こしている気筒と空燃比ずれを求める。
【００４３】
この異常気筒判定処理において、ＣＰＵ３１は、まずＳ１１０にて、前提条件判定処理を行う。
この前提条件判定処理は、図５に示す手順で実行される。図５は、前提条件判定処理を表すフローチャートである。即ち、この前提条件判定処理では、ＣＰＵ３１は、まずＳ３１０にて、今回前提条件成立フラグｚｅｎｔｅｉを、前回前提条件成立フラグｚｅｎｔｅｉｏの値に設定する。次に、Ｓ３２０にて、補正完了フラグｆｉｎｉｓｈがセットされているか否か判断する。ここで、補正完了フラグｆｉｎｉｓｈがセットされていると判断すると（Ｓ３２０：ＹＥＳ）、Ｓ３５０に移行する。一方、補正完了フラグｆｉｎｉｓｈがセットされていないと判断すると（Ｓ３２０：ＮＯ）、Ｓ３３０に移行する。
【００４４】
Ｓ３３０では、エンジン１がアイドル状態、且つ車速が３ｋｍ／ｈよりも小さく、且つ理論空燃比にフィードバック制御中か否かを判断する。ここで、アイドル状態、且つ車速が３ｋｍ／ｈよりも小さく、且つ理論空燃比にフィードバック制御中となっている場合（Ｓ３３０：ＹＥＳ）、Ｓ３４０へ移行し、今回前提条件成立フラグｚｅｎｔｅｉをセットして、当該前提条件判定処理を終了する。
【００４５】
一方、「アイドル状態でない」，「車速が３ｋｍ／ｈ以上」又は「理論空燃比にフィードバック制御中でない」の少なくとも一つが成立している場合は（Ｓ３３０：ＮＯ）、Ｓ３５０へ移行し、今回前提条件成立フラグｚｅｎｔｅｉをクリアし、補正完了判定タイマＴＭＲ２の値を０に設定する。そして、当該前提条件判定処理を終了する。尚、補正完了判定タイマＴＭＲ２は例えば１６ｍｓごとに自動的にインクリメントするタイマであり、ある時点でその値が０に設定されると、その時点で再び０からインクリメントする。
【００４６】
そして、図４（ａ）に戻り、Ｓ１１０の処理が終了すると、Ｓ１２０に移行し、異常気筒抽出処理を行う。まず、この異常気筒抽出処理の概要を図１２に基づいて説明する。
図１２（ａ）は第４気筒にずれがある場合のエンジン回転の状態を示す図である。図１２（ａ）では、例えば、エンジン回転速度が約７００ｒｐｍのアイドル状態で、エンジン回転速度が７００ｒｐｍ近傍において数１０ｒｐｍの振幅で振動している状態を示している。
【００４７】
そして、ある気筒に空燃比のずれがあると、その気筒の爆発タイミングでエンジン回転速度のピーク値に差がでるため（図１２（ａ）では、第４気筒の爆発タイミングでピーク値が小さくなっている）、各気筒の爆発タイミング中のエンジン回転速度のピーク値を計測し、各気筒のピーク値を比較する。
【００４８】
また、爆発タイミングの気筒の検出は、回転角センサ２６から入力される回転角信号に応じてカウントアップし、２３を超えると（エンジン２回転の７２０℃Ａに相当）０にクリアされるクランクカウンタを用いる（図１２（ｂ）参照）。ここでは、クランクカウンタの値が０〜５の時は第１気筒の爆発タイミング、６〜１１の時は第３気筒の爆発タイミング、１２〜１７の時は第４気筒の爆発タイミング、１８〜２３の時は第２気筒の爆発タイミングと検出される。
【００４９】
そして、図１２に示される状態の場合には、各気筒の爆発タイミング中のエンジン回転速度のピーク値のなかで、第４気筒でのピーク値が他の気筒に対して小さいため、第４気筒が異常気筒であると判定される。
次に、異常気筒抽出処理の手順を図６に基づいて説明する。図６は、異常気筒抽出処理を表すフローチャートである。即ち、この異常気筒抽出処理では、ＣＰＵ３１は、まずＳ４１０にて、気筒判定開始条件成立フラグｋｅｉｓｏｋｕ１がセットされているか否か判断する。ここで、気筒判定開始条件成立フラグｋｅｉｓｏｋｕ１がセットされていないと判断すると（Ｓ４１０：ＮＯ）、Ｓ４２０に移行する。
【００５０】
そして、Ｓ４２０において、クランクカウンタｃｒｎｋの値が０で、且つ今回前提条件成立フラグｚｅｎｔｅｉがセットされているか否か判断する。
ここで、クランクカウンタｃｒｎｋの値が０で、且つ今回前提条件成立フラグｚｅｎｔｅｉがセットされていると判断すると（Ｓ４２０：ＹＥＳ）、Ｓ４３０において、気筒判定開始条件成立フラグｋｅｉｓｏｋｕ１をセットし、その後Ｓ４５０に移行する。
【００５１】
一方、Ｓ４２０において、「クランクカウンタｃｒｎｋの値が０」と「今回前提条件成立フラグｚｅｎｔｅｉがセット」の少なくとも一つが成立していない場合は（Ｓ４２０：ＮＯ）、当該異常気筒抽出処理を終了する。
また、Ｓ４１０に戻り、気筒判定開始条件成立フラグｋｅｉｓｏｋｕ１がセットされていると判断すると（Ｓ４１０：ＹＥＳ）、Ｓ４４０に移行し、前回前提条件成立フラグｚｅｎｔｅｉｏがセットされており、且つ今回前提条件成立フラグｚｅｎｔｅｉがセットされているか否か判断する。ここで、前回前提条件成立フラグｚｅｎｔｅｉｏがセットされており、且つ今回前提条件成立フラグｚｅｎｔｅｉがセットされていると判断すると（Ｓ４４０：ＹＥＳ）、Ｓ４５０に移行し、一方、「前回前提条件成立フラグｚｅｎｔｅｉｏがセット」と「今回前提条件成立フラグｚｅｎｔｅｉがセット」の少なくとも一つが成立していない場合は（Ｓ４４０：ＮＯ）、Ｓ５７０に移行する。
【００５２】
Ｓ４５０では、回転角センサ２６から回転角信号が入力した時刻と、前回に回転角信号が入力した時刻との差を求め、その差の逆数を取ることで、エンジン回転速度Ｎｅを算出する。そしてＳ４６０に移行し、爆発気筒抽出処理を行う。
この爆発気筒抽出処理は、図７に示す手順で実行される。図７は、爆発気筒抽出処理を表すフローチャートである。即ち、この爆発気筒抽出処理では、ＣＰＵ３１は、まずＳ６１０にて、クランクカウンタｃｒｎｋの値が０以上５以下であるか否か判断する。ここで、０以上５以下であると判断すると（Ｓ６１０：ＹＥＳ）、Ｓ６２０に移行し、気筒識別番号ｍの値を１に設定して、当該爆発気筒抽出処理を終了する。一方、０以上５以下でないと判断すると（Ｓ６１０：ＮＯ）、Ｓ６３０に移行する。
【００５３】
Ｓ６３０では、クランクカウンタｃｒｎｋの値が６以上１１以下であるか否か判断する。ここで、６以上１１以下であると判断すると（Ｓ６３０：ＹＥＳ）、Ｓ６４０に移行し、気筒識別番号ｍの値を３に設定して、当該爆発気筒抽出処理を終了する。一方、６以上１１以下でないと判断すると（Ｓ６３０：ＮＯ）、Ｓ６５０に移行する。
【００５４】
Ｓ６５０では、クランクカウンタｃｒｎｋの値が１２以上１７以下であるか否か判断する。ここで、１２以上１７以下であると判断すると（Ｓ６５０：ＹＥＳ）、Ｓ６６０に移行し、気筒識別番号ｍを４に設定して、当該爆発気筒抽出処理を終了する。一方、１２以上１７以下でないと判断すると（Ｓ６５０：ＮＯ）、Ｓ６７０に移行する。
【００５５】
Ｓ６７０では、クランクカウンタｃｒｎｋの値が１８以上２３以下であるか否か判断する。ここで、１８以上２３以下であると判断すると（Ｓ６７０：ＹＥＳ）、Ｓ６８０に移行し、気筒識別番号ｍの値を２に設定して、当該爆発気筒抽出処理を終了する。一方、１８以上２３以下でないと判断すると（Ｓ６７０：ＮＯ）、当該爆発気筒抽出処理を終了する。
【００５６】
図６に戻り、Ｓ４６０の爆発気筒抽出処理を終了すると、Ｓ４７０において、エンジン回転速度Ｎｅが第ｍ気筒エンジン回転速度ピーク値Ｓ’〔ｍ〕より大きいか否かを判断する（ここでの「ｍ」は、Ｓ４６０において設定された気筒識別番号ｍを表す）。
【００５７】
そして、エンジン回転速度Ｎｅが第ｍ気筒エンジン回転速度ピーク値Ｓ’〔ｍ〕より大きいと判断すると（Ｓ４７０：ＹＥＳ）、Ｓ４８０に移行し、第ｍ気筒エンジン回転速度ピーク値Ｓ’〔ｍ〕をエンジン回転速度Ｎｅの値に設定し、Ｓ４９０に移行する。一方、エンジン回転速度Ｎｅが第ｍ気筒エンジン回転速度ピーク値Ｓ’〔ｍ〕以下であると判断すると（Ｓ４７０：ＮＯ）、Ｓ４９０に移行する。
【００５８】
Ｓ４９０では、クランクカウンタｃｒｎｋの値が２３であるか否か判断する。ここで、クランクカウンタｃｒｎｋの値が２３であると判断すると（Ｓ４９０：ＹＥＳ）、Ｓ５００に移行する。
Ｓ５００では、第ｍ気筒エンジン回転速度積算値Ｓ〔ｍ〕に第ｍ気筒エンジン回転速度ピーク値Ｓ’〔ｍ〕を加算し、その値を第ｍ気筒エンジン回転速度積算値Ｓ〔ｍ〕として設定した後に、第ｍ気筒エンジン回転速度ピーク値Ｓ’〔ｍ〕の値を０に設定し、更に、エンジン回転速度計測周期カウンタｎをインクリメントする。
【００５９】
一方、Ｓ４９０において、クランクカウンタｃｒｎｋの値が２３でないと判断すると（Ｓ４９０：ＮＯ）、当該異常気筒抽出処理を終了する。
また、Ｓ５００の処理を終了すると、Ｓ５１０に移行し、エンジン回転速度計測周期カウンタｎの値が５以上であるか否か判断する。ここで、エンジン回転速度計測周期カウンタｎの値が５以上であると判断すると（Ｓ５１０：ＹＥＳ）、Ｓ５２０に移行する。一方、エンジン回転速度計測周期カウンタｎの値が５より小さいと判断すると（Ｓ５１０：ＮＯ）、当該異常気筒抽出処理を終了する。
【００６０】
Ｓ５２０では、第１気筒エンジン回転速度積算値Ｓ〔１〕と第２気筒エンジン回転速度積算値Ｓ〔２〕と第３気筒エンジン回転速度積算値Ｓ〔３〕と第４気筒エンジン回転速度積算値Ｓ〔４〕の加算値を算出し、エンジン回転速度総和値ＴＳの値を該加算値に設定する。
【００６１】
そして、Ｓ５３０において、気筒識別番号ｍ＝１，２，３，４のそれぞれにおける第ｍ気筒エンジン回転速度積算値Ｓ〔ｍ〕をエンジン回転速度総和値ＴＳで割った値（図６のＳ５３０におけるＳ〔ｍ〕／ＴＳ）が、（１／３）より大きいか否かを判断する。つまり、気筒識別番号ごとに（Ｓ〔ｍ〕／ＴＳ）を算出して（１／３）より大きいか否かを判断する。
【００６２】
そして、（Ｓ〔ｍ〕／ＴＳ）が（１／３）より大きい場合には（Ｓ５３０：ＹＥＳ）、Ｓ５５０に移行し、第ｍ気筒リッチフラグＳ−ｈｉｇｈ〔ｍ〕をセットし、補正完了判定タイマＴＭＲ２の値を０に設定する。例えば、Ｓ５３０において（Ｓ〔２〕／ＴＳ）が（１／３）より大きい場合には、Ｓ５５０において第２気筒リッチフラグＳ−ｈｉｇｈ〔２〕をセットする。その後、Ｓ５７０に移行する。
【００６３】
一方、Ｓ５３０において、（１／３）より大きい（Ｓ〔ｍ〕／ＴＳ）が存在しない場合には（Ｓ５３０：ＮＯ）、Ｓ５４０に移行する。
Ｓ５４０では、気筒識別番号ｍ＝１，２，３，４のそれぞれにおける第ｍ気筒エンジン回転速度積算値Ｓ〔ｍ〕をエンジン回転速度総和値ＴＳで割った値（Ｓ〔ｍ〕／ＴＳ）が、（１／５）より小さいか否かを判断する。つまり、気筒識別番号ごとに（Ｓ〔ｍ〕／ＴＳ）を算出して（１／５）より小さいか否かを判断する。
【００６４】
そして、（Ｓ〔ｍ〕／ＴＳ）が（１／５）より小さい場合には（Ｓ５４０：ＹＥＳ）、Ｓ５６０に移行し、第ｍ気筒リーンフラグＳ−ｌｏｗ〔ｍ〕をセットし、補正完了判定タイマＴＭＲ２の値を０に設定する。例えば、Ｓ５４０において（Ｓ〔３〕／ＴＳ）が（１／５）より小さい場合には、Ｓ５６０において第３気筒リーンフラグＳ−ｌｏｗ〔３〕をセットする。その後、Ｓ５７０に移行する。
【００６５】
一方、Ｓ５４０において、（１／５）より小さい（Ｓ〔ｍ〕／ＴＳ）が存在しない場合には（Ｓ５４０：ＮＯ）、Ｓ５７０に移行する。
Ｓ５７０では、第１〜第４気筒エンジン回転速度積算値Ｓ〔１〕〜Ｓ〔４〕を夫々０に設定し、更にＳ５８０において、第１〜第４気筒エンジン回転速度ピーク値Ｓ’〔１〕〜Ｓ’〔４〕を夫々０に設定する。
【００６６】
その後、Ｓ５９０において、エンジン回転速度計測周期カウンタｎの値を０に設定し、更に気筒判定開始条件成立フラグｋｅｉｓｏｋｕ１をクリアして、当該異常気筒抽出処理を終了する。
図４（ａ）に戻り、Ｓ１２０の処理が終了すると、Ｓ１３０に移行し、リッチ・リーン判定処理を行う。このリッチ・リーン判定処理では、空燃比がリッチ側からリーン側になるタイミングから再びリッチ側からリーン側になるタイミングまでをＡ／Ｆ１サイクルとして、Ａ／Ｆ５サイクルの期間内における空燃比の平均値を求めて理論空燃比とのずれを求めている。
【００６７】
次に、リッチ・リーン判定処理の手順を図８に基づいて説明する。図８は、リッチ・リーン判定処理を表すフローチャートである。即ち、このリッチ・リーン判定処理では、ＣＰＵ３１は、まずＳ７１０にて、Ａ／Ｆサイクル判定処理を行う。
【００６８】
このＡ／Ｆサイクル判定処理は、図９に示す手順で実行される。図９は、Ａ／Ｆサイクル判定処理を表すフローチャートである。即ち、このＡ／Ｆサイクル判定処理では、ＣＰＵ３１は、まずＳ９１０にて、前回Ａ／Ｆ値ａｆｏを今回Ａ／Ｆ値ａｆに設定し、次にＳ９２０にて、今回Ａ／Ｆ値ａｆを空燃比センサ２４により検出された値に設定する。
【００６９】
そして、Ｓ９３０において、前回Ａ／Ｆ値ａｆｏが１４．７より小さく、且つ今回Ａ／Ｆ値ａｆが１４．７より大きいか否か判断する。ここで、前回Ａ／Ｆ値ａｆｏが１４．７より小さく、且つ今回Ａ／Ｆ値ａｆが１４．７より大きいと判断すると（Ｓ９３０：ＹＥＳ）、Ｓ９４０に移行し、Ａ／Ｆ反転フラグｈａｎｔｅｎをセットして、当該Ａ／Ｆサイクル判定処理を終了する。一方、「前回Ａ／Ｆ値ａｆｏが１４．７より小さい」と「今回Ａ／Ｆ値ａｆが１４．７より大きい」の少なくとも一つが成立していない場合は（Ｓ９３０：ＮＯ）、Ｓ９５０に移行し、Ａ／Ｆ反転フラグｈａｎｔｅｎをクリアして、当該Ａ／Ｆサイクル判定処理を終了する。
【００７０】
図８に戻り、Ｓ７１０の処理が終了すると、Ｓ７２０に移行し、リッチ・リーン判定開始条件成立フラグｋｅｉｓｏｋｕ２がセットされているか否か判断する。ここで、リッチ・リーン判定開始条件成立フラグｋｅｉｓｏｋｕ２がセットされていないと判断すると（Ｓ７２０：ＮＯ）、Ｓ７３０に移行する。
【００７１】
そして、Ｓ７３０において、Ａ／Ｆ反転フラグｈａｎｔｅｎがセットされており、且つ今回前提条件成立フラグｚｅｎｔｅｉがセットされているか否か判断する。ここで、Ａ／Ｆ反転フラグｈａｎｔｅｎがセットされており、且つ今回前提条件成立フラグｚｅｎｔｅｉがセットされていると判断すると（Ｓ７３０：ＹＥＳ）、Ｓ７４０において、リッチ・リーン判定開始条件成立フラグｋｅｉｓｏｋｕ２をセットし、その後Ｓ７９０に移行する。
【００７２】
一方、Ｓ７３０において、「Ａ／Ｆ反転フラグｈａｎｔｅｎがセット」と「今回前提条件成立フラグｚｅｎｔｅｉがセット」の少なくとも一つが成立していない場合は（Ｓ７３０：ＮＯ）、当該リッチ・リーン判定処理を終了する。
また、Ｓ７２０に戻り、リッチ・リーン判定開始条件成立フラグｋｅｉｓｏｋｕ２がセットされていると判断すると（Ｓ７２０：ＹＥＳ）、Ｓ７５０に移行し、Ａ／Ｆ反転フラグｈａｎｔｅｎがセットされているか否か判断する。
【００７３】
ここで、Ａ／Ｆ反転フラグｈａｎｔｅｎがセットされていないと判断すると（Ｓ７５０：ＮＯ）、Ｓ７８０に移行する。一方、Ｓ７５０において、Ａ／Ｆ反転フラグｈａｎｔｅｎがセットされていると判断すると（Ｓ７５０：ＹＥＳ）、Ｓ７６０に移行し、Ａ／Ｆ計測周期カウンタｊをインクリメントする。その後、Ｓ７７０において、Ａ／Ｆ計測周期カウンタｊの値が５以上であるか否か判断する。ここで、Ａ／Ｆ計測周期カウンタｊの値が５以上であると判断すると（Ｓ７７０：ＹＥＳ）、Ｓ８１０に移行する。一方、Ａ／Ｆ計測周期カウンタｊの値が５より小さいと判断すると（Ｓ７７０：ＮＯ）、Ｓ７８０に移行する。
【００７４】
Ｓ７８０では、前回前提条件成立フラグｚｅｎｔｅｉｏがセットされており、且つ今回前提条件成立フラグｚｅｎｔｅｉがセットされているか否か判断する。ここで、前回前提条件成立フラグｚｅｎｔｅｉｏがセットされており、且つ今回前提条件成立フラグｚｅｎｔｅｉがセットされていると判断すると（Ｓ７８０：ＹＥＳ）、Ｓ７９０に移行し、一方、「前回前提条件成立フラグｚｅｎｔｅｉｏがセット」と「今回前提条件成立フラグｚｅｎｔｅｉがセット」の少なくとも一つが成立していない場合は（Ｓ７８０：ＮＯ）、Ｓ８６０に移行する。
【００７５】
そして、Ｓ７９０では、Ａ／Ｆ積算値ＡＦｓｕｍと今回Ａ／Ｆ値ａｆの加算値を算出し、Ａ／Ｆ積算値ＡＦｓｕｍを該加算値に設定する。そして、Ｓ８００に移行し、Ａ／Ｆ計測回数カウンタｋをインクリメントした後に、当該リッチ・リーン判定処理を終了する。
【００７６】
また、Ｓ８１０では、Ａ／Ｆ積算値ＡＦｓｕｍをＡ／Ｆ計測回数カウンタｋの値で割った値（図８のＳ８１０におけるＡＦｓｕｍ／ｋ）から目標空燃比値１４．７を減算して、空燃比ずれＡＦｄｉｆを算出する。そして、Ｓ８２０において、空燃比ずれＡＦｄｉｆが、０．３以上であるか否かを判断する。ここで、ＡＦｄｉｆが０．３以上である場合には（Ｓ８２０：ＹＥＳ）、Ｓ８３０に移行し、リーンフラグＬＥＡＮをセットし、補正完了判定タイマＴＭＲ２の値を０に設定する。一方、ＡＦｄｉｆが０．３より小さい場合には（Ｓ８２０：ＮＯ）、Ｓ８４０に移行し、ＡＦｄｉｆが（−０．２）以下であるか否かを判断する。
【００７７】
ここで、ＡＦｄｉｆが（−０．２）以下である場合には（Ｓ８４０：ＹＥＳ）、Ｓ８５０に移行し、リッチフラグＲＩＣＨをセットし、補正完了判定タイマＴＭＲ２の値を０に設定する。一方、ＡＦｄｉｆが（−０．２）より大きい場合には（Ｓ８４０：ＮＯ）、Ｓ８６０に移行する。
【００７８】
Ｓ８６０では、Ａ／Ｆ計測周期カウンタｊ，Ａ／Ｆ計測回数カウンタｋの値を０に設定し、Ａ／Ｆ積算値ＡＦｓｕｍの値を０に設定し、更にリッチ・リーン判定開始条件成立フラグｋｅｉｓｏｋｕ２をクリアする。その後、当該リッチ・リーン判定処理を終了する。
【００７９】
そして、図４（ａ）に戻り、Ｓ１３０の処理が終了すると、当該異常気筒判定処理を終了する。
次に、図４（ｂ）を用いて、ずれレベル判定処理について説明する。このずれレベル判定処理は、ＥＣＵ３０が動作している間に、例えば、１６ミリ秒毎に実行される処理である。
【００８０】
このずれレベル判定処理において、ＣＰＵ３１は、まずＳ２１０にて、ずれレベル算出処理を行う。
このずれレベル算出処理は、図１０に示す手順で実行される。図１０は、ずれレベル算出処理を表すフローチャートである。即ち、このずれレベル算出処理では、ＣＰＵ３１は、まずＳ１０１０にて、ずれレベル反映フラグｈａｎｅｉがセットされているか否か判断する。ここで、ずれレベル反映フラグｈａｎｅｉがセットされていないと判断すると（Ｓ１０１０：ＮＯ）、Ｓ１０２０に移行する。
【００８１】
そして、Ｓ１０２０において、気筒識別番号ｍ＝１，２，３，４のそれぞれにおける第ｍ気筒リッチフラグＳ−ｈｉｇｈ〔ｍ〕がセットされ、且つリッチフラグＲＩＣＨがセットされているか否か判断する。つまり、気筒識別番号ｍごとに第ｍ気筒リッチフラグＳ−ｈｉｇｈ〔ｍ〕がセットされ、且つリッチフラグＲＩＣＨがセットされているか否か判断する。
【００８２】
そして、Ｓ−ｈｉｇｈ〔ｍ〕がセットされ、且つリッチフラグＲＩＣＨがセットされている場合には（Ｓ１０２０：ＹＥＳ）、Ｓ１０３０に移行し、第ｍ気筒制御ずれレベルＬｅｖｅｌ〔ｍ〕をインクリメントする。例えば、Ｓ１０２０において、第１気筒リッチフラグＳ−ｈｉｇｈ〔１〕がセットされ、且つリッチフラグＲＩＣＨがセットされている場合には、Ｓ１０３０において、第１気筒制御ずれレベルＬｅｖｅｌ〔１〕をインクリメントする。その後、Ｓ１０６０に移行する。
【００８３】
尚、本実施例では、第ｍ気筒制御ずれレベルＬｅｖｅｌ〔ｍ〕は、−１０，−９，−８，……，−１，０，＋１，……，＋９，＋１０と２１段階ある。そして、ずれレベル「０」は、空燃比のずれが無いことを表し、更に、正方向に値が増えるにつれて空燃比のリッチ側のずれが大きく、負方向に値が増えるにつれて空燃比のリーン側のずれが大きいことを表している。
【００８４】
一方、Ｓ１０２０において、「Ｓ−ｈｉｇｈ〔ｍ〕がセット」と「リッチフラグＲＩＣＨがセット」の少なくとも一つが成立していない場合は（Ｓ１０２０：ＮＯ）、Ｓ１０４０に移行する。
Ｓ１０４０では、気筒識別番号ｍ＝１，２，３，４のそれぞれにおける第ｍ気筒リーンフラグＳ−ｌｏｗ〔ｍ〕がセットされ、且つリーンフラグＬＥＡＮがセットされているか否か判断する。つまり、気筒識別番号ｍごとに第ｍ気筒リーンフラグＳ−ｌｏｗ〔ｍ〕がセットされ、且つリーンフラグＬＥＡＮがセットされているか否か判断する
そして、第ｍ気筒リーンフラグＳ−ｌｏｗ〔ｍ〕がセットされ、且つリーンフラグＬＥＡＮがセットされている場合には（Ｓ１０４０：ＹＥＳ）、Ｓ１０５０に移行し、第ｍ気筒制御ずれレベルＬｅｖｅｌ〔ｍ〕をデクリメントする。例えば、Ｓ１０４０において、第４気筒リーンフラグＳ−ｌｏｗ〔４〕がセットされ、且つリーンフラグＬＥＡＮがセットされている場合には、Ｓ１０５０において、第４気筒制御ずれレベルＬｅｖｅｌ〔４〕をデクリメントする。その後、Ｓ１０６０に移行する。
【００８５】
一方、Ｓ１０４０において、「Ｓ−ｌｏｗ〔ｍ〕がセット」と「リーンフラグＬＥＡＮがセット」の少なくとも一つが成立していない場合は（Ｓ１０４０：ＮＯ）、Ｓ１０９０に移行する。
Ｓ１０６０では、補正量算出マップを参照して、各気筒ごとの補正量を算出する。補正量算出マップは、ＲＯＭ５２に記憶され、ずれレベルごとに存在してエンジン１のエンジン回転速度と吸気圧力をパラメータとするマップである。本実施例では、ずれレベルは−１０，−９，−８，……，−１，０，＋１，……，＋９，＋１０と２１段階あり、ずれレベルごとに２１枚の補正量算出マップがある。そして、例えば、第４気筒制御ずれレベルＬｅｖｅｌ〔４〕の値が＋５の場合には、ずれレベルが＋５の補正量算出マップを参照し、現在のエンジン回転速度と吸気圧力から第４気筒の補正量を算出する。
【００８６】
その後、Ｓ１０７０に移行し、ずれレベル反映フラグｈａｎｅｉをセットする。そして、Ｓ１０８０にて、反映判定タイマＴＭＲ１をスタートし、当該ずれレベル判定処理を終了する。尚、反映判定タイマＴＭＲ１は、例えば１６ｍｓごとにインクリメントするタイマで、Ｓ１０８０にてスタートするまでは、その値は０に保持されている。
【００８７】
また、Ｓ１０９０では、第１〜第４気筒リッチフラグＳ−ｈｉｇｈ〔１〕〜Ｓ−ｈｉｇｈ〔４〕を夫々クリアする。
更に、Ｓ１１００に移行し、第１〜第４気筒リーンフラグＳ−ｌｏｗ〔１〕〜第４気筒リーンフラグＳ−ｌｏｗ〔４〕を夫々クリアする。
【００８８】
その後、Ｓ１１１０においてリッチフラグＲＩＣＨ，リーンフラグＬＥＡＮを夫々クリアする。
そして、Ｓ１１２０に移行し、Ｓ１０６０と同様に、補正量算出マップを参照して各気筒ごとの補正量を算出し、当該ずれレベル判定処理を終了する。
【００８９】
図４（ｂ）に戻り、Ｓ２１０の処理が終了すると、Ｓ２２０に移行し、ずれレベル確定処理を行う。
このずれレベル確定処理は、図１１に示す手順で実行される。図１１は、ずれレベル確定処理を表すフローチャートである。即ち、このずれレベル確定処理では、ＣＰＵ３１は、まずＳ１２１０にて、反映判定タイマＴＭＲ１が１００ｍｓ経過しているか否か判断する。ここで、１００ｍｓ経過していないと判断すると（Ｓ１２１０：ＮＯ）、Ｓ１２８０に移行する。
【００９０】
一方、１００ｍｓ経過したと判断すると（Ｓ１２１０：ＹＥＳ）、Ｓ１２２０に移行し、エンジン回転速度が改善され、且つ空燃比センサ出力が改善されているか否か判断する。つまり、異常気筒のエンジン回転速度ピーク値とその他の気筒のエンジン回転速度ピーク値との差が小さくなり、且つ空燃比センサ２４の出力の平均値が目標空燃比に近づいているかを判断する。
【００９１】
ここで、エンジン回転速度が改善され、且つ空燃比センサ出力が改善されていると判断すると（Ｓ１２２０：ＹＥＳ）、Ｓ１２４０において、異常気筒である第ｍ’気筒の記憶ずれレベルＬｅｖｅｌ−ｓｅｔ〔ｍ’〕を、第ｍ’気筒制御ずれレベルＬｅｖｅｌ〔ｍ’〕  の値に設定し、Ｓ１２５０に移行する。
【００９２】
一方、Ｓ１２２０において、「エンジン回転速度が改善」と「空燃比センサ出力が改善」の少なくとも一つが成立していない場合は（Ｓ１２２０：ＮＯ）、Ｓ１２３０において、第ｍ’気筒制御ずれレベルＬｅｖｅｌ〔ｍ’〕を第ｍ’気筒記憶ずれレベルＬｅｖｅｌ−ｓｅｔ〔ｍ’〕の値に設定し、Ｓ１２５０に移行する。
【００９３】
Ｓ１２５０では、第１〜第４気筒リッチフラグＳ−ｈｉｇｈ〔１〕〜Ｓ−ｈｉｇｈ〔４〕を夫々クリアする。
更に、Ｓ１２６０に移行し、第１〜第４気筒リーンフラグＳ−ｌｏｗ〔１〕〜Ｓ−ｌｏｗ〔４〕を夫々クリアする。
【００９４】
その後、Ｓ１２７０に移行し、リッチフラグＲＩＣＨ，リーンフラグＬＥＡＮ，ずれレベル反映フラグｈａｎｅｉを夫々クリアし、反映判定タイマＴＭＲ１を終了する。尚、反映判定タイマＴＭＲ１を終了すると、その値は０に保持される。
【００９５】
そして、Ｓ１２８０では、補正完了判定タイマＴＭＲ２が１０秒経過しているか否か判断する。ここで、１０秒経過していないと判断すると（Ｓ１２８０：ＮＯ）、当該ずれレベル確定処理を終了する。
一方、１０秒経過したと判断すると（Ｓ１２８０：ＹＥＳ）、Ｓ１２９０に移行し、補正完了フラグｆｉｎｉｓｈをする。そして、当該ずれレベル確定処理を終了する。
【００９６】
図４（ｂ）に戻り、Ｓ２２０の処理が終了すると、当該ずれレベル判定処理を終了する。
以上説明したように、本実施形態のＣＰＵ３１は、図６の異常気筒抽出処理によって、エンジンの回転変動を起こしている異常な気筒を検出し、図８のリッチ・リーン判定処理によって、空燃比の平均値と目標空燃比との間のずれを検出する。そして、図１０のずれレベル算出処理および図１１のずれレベル確定処理によって、ずれが所定範囲からはずれていると判定される毎に、異常気筒におけるずれレベルを更新し、ずれレベルごとに存在する補正量算出マップを参照して、各気筒ごとの補正量を算出する。
【００９７】
従って、各気筒噴射弁制御量決定部５５は、ずれが所定範囲内に収まるように、異常な気筒を制御することができる。
このため、各気筒ごとの吸気弁の開閉機構の機械的なばらつきや、各気筒ごとの燃料噴射弁の噴射特性のばらつきなどにより、空燃比の変動周期に対応した所定期間内における空燃比の平均値が目標空燃比からずれることを抑えることができる。
【００９８】
また、空燃比ずれが所定範囲に収まったときにずれレベルの更新が終了するため、空燃比センサ２４の出力の変動等により空燃比の値が実際の空燃比を反映していない場合においても、その時のずれレベルに基づいて制御量を補正すれば、空燃比ずれを所定範囲内に収めることができる。
【００９９】
また、図５のＳ３３０およびＳ３４０の処理によって、車両が停止状態の時に、異常気筒抽出処理とリッチ・リーン判定処理は実行される。
このため、リッチ・リーン判定処理において誤って空燃比ずれが検出されるといったことを防止することができる。
【０１００】
また、図１１のＳ１２８０およびＳ１２９０の処理によって、ＣＰＵ３１が起動した後にずれが１０秒継続して所定範囲内に収まった場合には、異常気筒抽出処理とリッチ・リーン判定処理を中止するようにしている。
このため、無駄に異常気筒抽出処理とリッチ・リーン判定処理を動作させることを抑え、ＣＰＵ３１が実行する処理の負荷を低減することができる。
【０１０１】
また、図１１のＳ１２３０および図３のＳ６０の処理によって、更新されたずれレベルをバックアップＲＡＭ３４に記憶し、ＥＣＵ３０の起動時にバックアップＲＡＭ３４からずれレベルを取得するようにしている。
このため、ＥＣＵ３０が起動したときから、ずれに応じたずれレベルに基づいてエンジンを各気筒毎に制御するので、ＥＣＵ３０の起動時から、エンジン１を最適な空燃比状態に制御することができる。
【０１０２】
以上、本発明の実施の形態について説明したが、本発明の実施の形態は上記実施の形態に何ら限定されることなく、本発明の技術的範囲に属する限り種々の形態をとり得ることはいうまでもない。
例えば、上記実施形態においては、目標空燃比が理論空燃比（＝１４．７）であるものを示した。しかし、理論空燃比よりリーン側に目標空燃比を設定するリーンバーンエンジンのように、目標空燃比が理論空燃比と一致していないものであってもよい。
【０１０３】
また、上記実施形態においては、リッチ・リーン判定処理は、Ａ／Ｆ値が１４．７より小さい状態から、１４．７より大きい状態へ遷移したタイミングで開始したが、１４．７より大きい状態から１４．７より小さい状態へ遷移したタイミングで開始してもよい。
【０１０４】
また、上記実施形態においては、燃料噴射弁９により噴射される燃料の量をずれレベルに基づいて各気筒ごとに補正することにより、エンジン１を最適な空燃比状態に制御するものを示した。
しかし、空燃比を制御するには燃焼室５に吸入される空気の量を制御してもよく、このために、吸気弁７の開弁時のリフト量を各気筒ごとに制御するようにしてもよい。この場合の制御を、別の実施形態として、図１４を用いて説明する。図１４は別の実施形態における空燃比制御を実行するためにＥＣＵ３０に付与された各機能を表す機能ブロック図である。
【０１０５】
別の実施形態における機能ブロック図のなかで、異常気筒判定部５１，リッチ・リーン判定部５２，ずれレベル算出部５３，エンジン運転状態検出部５７は本実施形態と同様であるので説明は省略する。
各気筒吸気弁補正量算出部５４ａは、エンジン運転状態検出部５７から入力される各種検出信号と、ずれレベル算出部５３から入力される各気筒のずれレベル情報とに基づいて、各気筒の吸気弁７のリフト量に対する補正量を算出する。
【０１０６】
吸気弁制御量算出部５６ａは、エンジン運転状態検出部５７から入力される各種検出信号に基づいて、吸気弁７のリフト量を算出する。
そして、各気筒吸気弁制御量決定部５５ａは、各気筒吸気弁補正量算出部５４ａから入力される各気筒毎の補正量と、吸気弁制御量算出部５６ａから入力されるリフト量とに基づいて、各気筒毎のリフト量を決定し、第１〜４気筒リフト量を表す信号を出力して第１〜４気筒吸気弁７ａ〜ｄを制御する。
【０１０７】
次に、吸気弁７のリフト量を変化させる機構を、図１５を用いて説明する。図１５は、吸気弁７のリフト量可変機構を説明する図である。
モータ７１の出力軸に固設されたモータギア７１ａは、ピニオンギア７２に噛み合っており、モータギア７１ａの回転に伴い、ピニオンギア７２が回転する。さらに、ピニオンギア７２の軸７３にはカム７４が一体的に設けられている。また、バネ７７の一端は支持部材７８に固定され、さらにバネ７７の他端はスイングアーム７５に取り付けられ、右方向（図１５における右方向）にスイングアーム７５を付勢している。
【０１０８】
そして、エンジン１のクランク軸の回転に連動してカム軸が回転し、カム軸に固定されたカム７６がスイングアーム７５を左方向（図１５における左方向）に押すと、スイングアーム７５の押動部７５ａはロッカーアーム７９を押し下げ、さらにロッカーアーム７９がバルブスプリング８０に抗して吸気弁７を押し下げることで、吸気弁７が開く。
【０１０９】
図１５（ａ）に示すように、軸７３に対して左側にピニオンギア７２が位置している場合には、カム７４のカム山はスイングアーム７５に当接しておらず、右方向（図１５における右方向）へのスイングアーム７５の押し出し量は０である。一方、図１５（ａ）に示す状態から、モータ７１を駆動し、ピニオンギア７２を時計回り（図１５における時計回り）に１８０°回転させると、図１５（ｂ）に示すように、カム７４のカム山がスイングアーム７５を右方向に押し出す。
【０１１０】
スイングアーム７５が右方向に押し出されることにより、カム７６の回転によってスイングアーム７５の押動部７５ａがロッカーアーム７６を押し下げる量が大きくなり、図１５（ａ）の状態の場合よりも吸気弁７のリフト量が大きくなる。つまり、モータ７１を駆動させ、カム７４によるスイングアーム７９の押し出し量を変化させることで吸気弁７のリフト量を変えることができる。
【０１１１】
そして、図１５（ａ）に示す状態においてスイングアーム７５の押し出し量が最小で、図１５（ｂ）に示す状態においてスイングアーム７５の押し出し量が最大であるので、モータ７１を駆動させ、カム７４の回転角を図１５（ａ）に示す回転角から、図１５（ｂ）に示す回転角の間で変化させることで、吸気弁７のリフト量を調節することができる。即ち、モータ７１の回転量を各気筒ごとに制御することで、リフト量を変えることができる。
【図面の簡単な説明】
【図１】実施の形態におけるエンジン及びその周辺装置を示す概略構成図。
【図２】実施の形態におけるＥＣＵの機能を表す機能ブロック図。
【図３】実施の形態における初期値設定処理手順を示すフローチャート。
【図４】実施の形態における異常気筒判定処理手順およびずれレベル判定処理手順を示すフローチャート。
【図５】実施の形態における前提条件判定処理手順を示すフローチャート。
【図６】実施の形態における異常気筒抽出処理手順を示すフローチャート。
【図７】実施の形態における爆発気筒抽出処理手順を示すフローチャート。
【図８】実施の形態におけるリッチ・リーン判定処理手順を示すフローチャート。
【図９】実施の形態におけるＡ／Ｆサイクル判定処理手順を示すフローチャート。
【図１０】実施の形態におけるずれレベル算出処理手順を示すフローチャート。
【図１１】実施の形態におけるずれレベル確定処理手順を示すフローチャート。
【図１２】実施の形態における異常気筒抽出方法を説明する図。
【図１３】実施の形態における空燃比ずれを説明する図。
【図１４】別の実施の形態におけるＥＣＵの機能を表す機能ブロック図。
【図１５】別の実施の形態における吸気弁リフト量可変機構を説明する図。
【符号の説明】
１…エンジン、２…シリンダ、３…ピストン、４…シリンダヘッド、５…燃焼室、６…点火プラグ、７…吸気弁、８…吸気管、９…燃料噴射弁、１０…サージタンク、１１…燃料ポンプ、１２…燃料タンク、１３…スロットルバルブ、１４…アクセルペダル、１５…エアクリーナ、１６…排気弁、１７…排気管、１８…三元触媒、１９…ディストリビュータ、２０…吸気温センサ、２１…スロットル開度センサ、２２…吸気圧センサ、２３…水温センサ、２４…空燃比センサ、２５…酸素センサ、２６…回転角センサ、２７…車速センサ、３０…ＥＣＵ、３１…ＣＰＵ、３２…ＲＯＭ、３３…ＲＡＭ、３４…バックアップＲＡＭ、３５…Ａ／Ｄ変換器、３６…入出力ポート、７１…モータ、７２…ピニオンギア、７３…軸、７４…カム、７５…スイングアーム、７６…カム、７７…バネ、７８…支持部材、７９…ロッカーアーム、８０…バルブスプリング。
【図１】
2004346807.tif 000003
【図２】
2004346807.tif 000004
【図３】
2004346807.tif 000005
【図４】
2004346807.tif 000006
【図５】
2004346807.tif 000007
【図６】
2004346807.tif 000008
【図７】
2004346807.tif 000009
【図８】
2004346807.tif 000010
【図９】
2004346807.tif 000011
【図１０】
2004346807.tif 000012
【図１１】
2004346807.tif 000013
【図１２】
2004346807.tif 000014
【図１３】
2004346807.tif 000015
【図１４】
2004346807.tif 000016
【図１５】
2004346807.tif 000017