(57)【要約】【課題】内燃機関の気筒間のトルクばらつきや気筒間の空燃比ばらつきを精度良く補正する。【解決手段】まず、内燃機関の吸入空気量や吸気管圧力に基づいて各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃１）〜ＤＥＶ１（＃４）を算出し、第１の気筒間ばらつき補正で、第１の気筒間ばらつき値ＤＥＶ１（＃１）〜ＤＥＶ１（＃４）に基づいて各気筒の点火時期を補正することで気筒間のトルクばらつきを補正する。この後、第１の気筒間ばらつき補正によって点火時期が補正されてから所定時間ＫＣＤＥＶが経過した後、内燃機関の回転変動や空燃比に基づいて各気筒の第２の気筒間ばらつき値ＤＥＶ２（＃１）〜ＤＥＶ２（＃４）を算出し、第２の気筒間ばらつき補正で、第２の気筒間ばらつき値ＤＥＶ２（＃１）〜ＤＥＶ２（＃４）に基づいて各気筒の燃料噴射時間を補正することで気筒間の空燃比ばらつきを補正する。【選択図】　図１７
2004052620.tif 000002
【特許請求の範囲】
【請求項１】
複数の気筒を有する内燃機関の吸入空気量と吸気管圧力の少なくとも一方に基づいて気筒間の吸入空気量ばらつきを表す第１の気筒間ばらつき値を算出する第１の気筒間ばらつき推定出手段と、
前記第１の気筒間ばらつき値に基づいて気筒間のトルクばらつきと気筒間の空燃比ばらつきの少なくとも一方を補正する第１の気筒間ばらつき補正を実行する第１の気筒間ばらつき補正手段と、
前記第１の気筒間ばらつき補正の実行後に前記内燃機関の燃焼状態と排出ガスの空燃比の少なくとも一方に基づいて気筒間の吸入空気量ばらつき及び／又は気筒間の吸入燃料量ばらつきを表す第２の気筒間ばらつき値を算出する第２の気筒間ばらつき推定手段と、
前記第２の気筒間ばらつき値に基づいて気筒間のトルクばらつきと気筒間の空燃比ばらつきの少なくとも一方を補正する第２の気筒間ばらつき補正を実行する第２の気筒間ばらつき補正手段と
を備えていることを特徴とする内燃機関の制御装置。
【請求項２】
前記内燃機関の吸入空気量を検出するエアフローメータを備え、
前記第１の気筒間ばらつき推定手段は、各気筒の吸気行程に対応する期間毎に前記エアフローメータで検出した吸入空気量の平均値、極大値、極小値、振幅値、面積のうちの少なくとも１つに基づいて前記第１の気筒間ばらつき値を算出することを特徴とする請求項１に記載の内燃機関の制御装置。
【請求項３】
前記内燃機関の吸気管圧力を検出する吸気管圧力センサを備え、
前記第１の気筒間ばらつき推定手段は、各気筒の吸気行程に対応する期間毎に前記吸気管圧力センサで検出した吸気管圧力の平均値、極大値、極小値、振幅値、面積のうちの少なくとも１つに基づいて前記第１の気筒間ばらつき値を算出することを特徴とする請求項１又は２に記載の内燃機関の制御装置。
【請求項４】
前記第１の気筒間ばらつき推定手段は、前記内燃機関のスロットル開度が所定開度よりも小さいとき又は吸気管圧力が所定圧力よりも低いときには、前記吸気管圧力センサで検出した吸気管圧力の極小値に基づいて前記第１の気筒間ばらつき値を算出することを特徴とする請求項３に記載の内燃機関の制御装置。
【請求項５】
前記第２の気筒間ばらつき推定手段は、各気筒の燃焼行程に対応する期間毎に各気筒の燃焼状態の情報となる回転変動を検出し、その回転変動に基づいて前記第２の気筒間ばらつき値を算出することを特徴とする請求項１乃至４のいずれかに記載の内燃機関の制御装置。
【請求項６】
前記内燃機関の排出ガスの空燃比を検出する空燃比センサを備え、
前記第２の気筒間ばらつき推定手段は、各気筒の排気行程に対応する期間毎に前記空燃比センサにより各気筒の排出ガスの空燃比を検出し、その空燃比に基づいて前記第２の気筒間ばらつき値を算出することを特徴とする請求項１乃至５のいずれかに記載の内燃機関の制御装置。
【請求項７】
前記第１の気筒間ばらつき補正手段は、前記第１の気筒間ばらつき値に基づいて各気筒毎に点火時期を補正することで気筒間のトルクばらつきを補正し、
前記第２の気筒間ばらつき補正手段は、前記第２の気筒間ばらつき値に基づいて各気筒毎に燃料噴射量を補正することで気筒間の空燃比ばらつきを補正することを特徴とする請求項１乃至６のいずれかに記載の内燃機関の制御装置。
【請求項８】
前記第１の気筒間ばらつき補正手段は、前記第１の気筒間ばらつき値に基づいて各気筒毎に燃料噴射量を補正することで気筒間の空燃比ばらつきを補正し、
前記第２の気筒間ばらつき補正手段は、前記第２の気筒間ばらつき値に基づいて各気筒毎に点火時期を補正することで気筒間のトルクばらつきを補正することを特徴とする請求項１乃至６のいずれかに記載の内燃機関の制御装置。
【請求項９】
前記内燃機関の各気筒毎に吸入空気量を可変する気筒別吸入空気可変手段を備え、
前記第１の気筒間ばらつき補正手段は、前記第１の気筒間ばらつき値に基づいて各気筒毎に前記気筒別吸入空気可変手段の制御量を補正して各気筒毎に吸入空気量を補正し、
前記第２の気筒間ばらつき補正手段は、前記第２の気筒間ばらつき値に基づいて各気筒毎に燃料噴射量を補正することを特徴とする請求項１乃至６のいずれかに記載の内燃機関の制御装置。
【請求項１０】
前記第１の気筒間ばらつき補正手段は、前記第１の気筒間ばらつき値に基づいて各気筒毎に点火時期を補正することで気筒間のトルクばらつきを補正し、
前記第２の気筒間ばらつき補正手段は、前記第１の気筒間ばらつき補正で補正した点火時期を前記第２の気筒間ばらつき値に基づいて各気筒毎に再補正することを特徴とする請求項１乃至６のいずれかに記載の内燃機関の制御装置。
【請求項１１】
前記第１の気筒間ばらつき補正手段は、前記第１の気筒間ばらつき値に基づいて各気筒毎に燃料噴射量を補正することで気筒間の空燃比ばらつきを補正し、
前記第２の気筒間ばらつき補正手段は、前記第１の気筒間ばらつき補正で補正した燃料噴射量を前記第２の気筒間ばらつき値に基づいて各気筒毎に再補正することを特徴とする請求項１乃至６のいずれかに記載の内燃機関の制御装置。
【請求項１２】
前記内燃機関の各気筒毎に吸入空気量を可変する気筒別吸入空気可変手段を備え、
前記第１の気筒間ばらつき補正手段は、前記第１の気筒間ばらつき値に基づいて各気筒毎に前記気筒別吸入空気可変手段の制御量を補正して各気筒毎に吸入空気量を補正し、
前記第２の気筒間ばらつき補正手段は、前記第１の気筒間ばらつき補正で補正した前記気筒別吸入空気可変手段の制御量を前記第２の気筒間ばらつき値に基づいて各気筒毎に再補正することを特徴とする請求項１乃至６のいずれかに記載の内燃機関の制御装置。
【請求項１３】
前記第１の気筒間ばらつき補正の補正量変更から所定期間が経過するまで前記第２の気筒間ばらつき値の算出を禁止するばらつき推定禁止手段を備えていることを特徴とする請求項１乃至１２のいずれかに記載の内燃機関の制御装置。
【請求項１４】
前記第１の気筒間ばらつき補正によってトルク及び／又は空燃比の変動が所定以下になった場合に、前記第２の気筒間ばらつき補正を省略するばらつき補正省略手段を備えていることを特徴とする請求項１乃至１３のいずれかに記載の内燃機関の制御装置。
【請求項１５】
複数の気筒を有する内燃機関の各気筒毎に吸入空気量を可変する気筒別吸入空気可変手段と、
前記内燃機関の吸入空気量と吸気管圧力のうちの少なくとも一方に基づいて各気筒の吸入空気量ばらつきを表す気筒間ばらつき値を算出する気筒間ばらつき推定手段と、
前記気筒間ばらつき値に基づいて各気筒毎に前記気筒別吸入空気可変手段の制御量を補正して各気筒毎に吸入空気量を補正することで気筒間の吸入空気量ばらつきを補正する気筒間ばらつき補正手段と
を備えていることを特徴とする内燃機関の制御装置。
【請求項１６】
前記気筒別吸入空気可変手段は、各気筒毎に独立した可変吸気バルブ機構を有し、各気筒の可変吸気バルブ機構を個別に制御することで各気筒毎に吸入空気量を可変することを特徴とする請求項９、１２、１５のいずれかに記載の内燃機関の制御装置。
【請求項１７】
前記気筒別吸入空気可変手段は、前記内燃機関の全気筒又は複数気筒の吸気バルブのバルブ制御量を一括して可変する可変吸気バルブ機構を有し、各気筒の吸気行程毎に前記可変バルブ機構を高速駆動してバルブ制御量を可変することで各気筒毎に吸入空気量を可変することを特徴とする請求項９、１２、１５のいずれかに記載の内燃機関の制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複数の気筒を有する内燃機関の気筒間のトルクばらつきや気筒間の空燃比ばらつきを補正する内燃機関の制御装置に関するものである。
【０００２】
【従来の技術】
一般に、複数気筒の内燃機関では、各気筒の吸気マニホールド形状の違いや、吸気バルブのバルブクリアランスのばらつき等によって各気筒の吸入空気量（筒内充填空気量）にばらつきが生じる。また、各気筒の燃料噴射弁の個体差や燃料配管内の圧力分布特性、エバポガスパージ実行時の吸気管内のエバポガス分布特性等によって各気筒の吸入燃料量にばらつきが生じる。このような気筒間の吸入空気量ばらつきや吸入燃料量ばらつきによって各気筒のトルクや空燃比にばらつきが生じる。気筒間のトルクばらつきが大きくなると、エンジントルクのサイクル内変動が大きくなって、運転者に不快な振動が発生するおそれがある。また、気筒間の空燃比ばらつきが大きくなると、触媒に流入する排出ガスの空燃比のサイクル内変動が大きくなるため、排出ガスの空燃比の変動幅が触媒の浄化ウインドからはみ出して排出ガス浄化率が低下するおそれがある。
【０００３】
これらの対策として、気筒間のトルクばらつきや空燃比ばらつきを補正する方法が幾つか提案されている。例えば、特開昭６２−１７３４２号公報に示すように、クランク軸に設けたトルクセンサで各気筒毎にトルクを検出し、各気筒のトルクが全気筒の平均トルクになるように各気筒毎に燃料噴射量を補正するようにしたものがある。また、特開２０００−２２０４８９号公報に示すように、排気管に設置した空燃比センサの出力に基づいて各気筒の空燃比を推定し、気筒間の空燃比ばらつきが小さくなるように各気筒毎に燃料噴射量を補正するようにしたものがある。
【０００４】
一方、近年、車両に搭載される内燃機関においては、吸気バルブのリフト量や開閉時期等のバルブ制御量を可変する可変吸気バルブ機構を設け、アクセル開度やエンジン運転状態等に応じて吸気バルブのバルブ制御量を可変することで吸入空気量を制御できるようにしたものがある。この可変吸気バルブ制御による吸入空気量制御は、吸気バルブのリフト量や開弁期間を小さくすることによって、吸気通路をスロットルバルブで絞ることなく吸入空気量を少なくすることができるので、ポンピングロスを低減して燃費を向上させることができるという利点がある。
【０００５】
【発明が解決しようとする課題】
ところが、上述した可変吸気バルブ制御による吸入空気量制御では、低負荷時に吸気バルブのリフト量が小さくなるため、各気筒で目標リフト量に対する実リフト量のばらつき（各気筒の部品公差や組付公差によるばらつき）の割合が大きくなって、気筒間の吸入空気量ばらつきが大きくなる傾向がある。このため、気筒間の吸入空気量ばらつきの影響を受けて各気筒のトルクや空燃比が変動し易く、気筒間のトルクばらつきや空燃比ばらつきが大きくなる傾向がある。
【０００６】
従って、従来の気筒間ばらつき補正方法を用いて、トルクと空燃比のいずれか一方の気筒間ばらつきを補正すると、その補正量が大きくなって、補正しなかった他方（トルク又は空燃比）の気筒間ばらつきが増大してしまう傾向があり、気筒間のトルクばらつきの低減と気筒間の空燃比ばらつきの低減とを両立させることが難しく、ドライバビリティと排気エミッションとを両立させるのが困難である。しかも、従来の気筒間ばらつき補正方法では、気筒間のトルクばらつきや空燃比ばらつきを補正する場合に、気筒間の吸入空気量ばらつきが大きいために、十分な精度で補正することは困難である。更に、気筒間の吸入空気量ばらつきや吸入燃料量ばらつき等の複数の要因が絡み合って気筒間のトルクばらつきや空燃比ばらつきが発生している場合も、十分な精度で補正することは困難である。
【０００７】
本発明はこれらの事情を考慮してなされたものであり、第１の目的は、気筒間のトルクばらつきと空燃比ばらつきを両方とも補正できるようにすることであり、更に、第２の目的は、気筒間のトルクばらつき及び／又は空燃比ばらつきの補正精度を向上させることである。
【０００８】
【課題を解決するための手段】
上記第１の目的を達成するために、本発明の請求項１の内燃機関の制御装置は、複数の気筒を有する内燃機関の吸入空気量と吸気管圧力の少なくとも一方に基づいて各気筒の吸入空気量ばらつきを表す第１の気筒間ばらつき値を第１の気筒間ばらつき推定手段により算出し、その第１の気筒間ばらつき値に基づいて気筒間のトルクばらつきと気筒間の空燃比ばらつきの少なくとも一方を補正する第１の気筒間ばらつき補正を第１の気筒間ばらつき補正手段により実行する。そして、この第１の気筒間ばらつき補正の実行後に内燃機関の燃焼状態と排出ガスの空燃比の少なくとも一方に基づいて各気筒の吸入空気量ばらつき及び／又は吸入燃料量ばらつきを表す第２の気筒間ばらつき値を第２の気筒間ばらつき推定手段により算出し、その第２の気筒間ばらつき値に基づいて気筒間のトルクばらつきと気筒間の空燃比ばらつきの少なくとも一方を補正する第２の気筒間ばらつき補正を第２の気筒間ばらつき補正手段により実行するようにしたものである。
【０００９】
この構成では、まず、燃焼前の情報（吸入空気量や吸気管圧力）に基づいて算出した第１の気筒間ばらつき値に基づいて、第１の気筒間ばらつき補正を実行することで、気筒間のトルクばらつきや気筒間の空燃比ばらつきを補正し、その後、燃焼後の情報（燃焼状態や排出ガスの空燃比）に基づいて算出した第２の気筒間ばらつき値に基づいて、第２の気筒間ばらつき補正を実行することで、気筒間のトルクばらつきや気筒間の空燃比ばらつきを補正する。
【００１０】
このようにすれば、気筒間のトルクばらつきの補正と気筒間の空燃比ばらつきの補正を、第１の気筒間ばらつき補正と第２の気筒間ばらつき補正とに分けて行うことができるので、可変吸気バルブ制御による吸入空気量制御の低負荷時のように、気筒間の吸入空気量ばらつきが大きくなって気筒間のトルクばらつきや空燃比ばらつきが大きくなる場合でも、気筒間のトルクばらつき補正と気筒間の空燃比ばらつき補正とを両立させて、気筒間のトルクばらつきと空燃比ばらつきを両方とも低減させることができる。
【００１１】
また、燃焼前の情報に基づいた第１の気筒間ばらつき補正と燃焼後の情報に基づいた第２の気筒間ばらつき補正の２段階で補正を行うことができるので、第１の気筒間ばらつき補正の実行後に、吸入空気量ばらつきや吸入燃料量ばらつきの影響が残っていても、それを第２の気筒間ばらつき補正で補正することができ、気筒間の吸入空気量ばらつきや吸入燃料量ばらつき等の複数の要因によって発生する気筒間のトルクばらつきや気筒間の空燃比ばらつきを精度良く補正することが可能となる。
【００１２】
尚、この請求項１に係る発明は、可変吸気バルブ制御による吸入空気量制御を行うシステムに限定されず、スロットルバルブ制御による吸入空気量制御を行うシステムに適用しても良く、この場合でも、気筒間の空燃比ばらつきを精度良く補正して、より高精度な空燃比制御を行うことが可能となる。
【００１３】
一般に、複数の気筒を有する内燃機関の吸気管内には、各気筒の吸気行程に対応して吸気脈動が発生するので、エアフローメータで検出した吸入空気量の波形は、各気筒の吸気行程に対応した脈動波形、つまり、各気筒の吸入空気量に対応した脈動波形となる。
【００１４】
そこで、第１の気筒間ばらつき値の算出方法の具体例としては、例えば、請求項２のように、各気筒の吸気行程に対応する期間毎にエアフローメータで検出した吸入空気量の平均値、極大値、極小値、振幅値、面積のうちの少なくとも１つに基づいて第１の気筒間ばらつき値を算出するようにすると良い。各気筒の吸気行程に対応する期間毎にエアフローメータで検出した吸入空気量の平均値、極大値、極小値、振幅値、面積のうちの少なくとも１つを算出すれば、各気筒の吸入空気量を反映した脈動波形の特性値を算出することができるので、この特性値を用いれば、各気筒の吸入空気量ばらつきを反映した第１の気筒間ばらつき値を算出することができる。尚、最近では、高応答でかつ吸入空気の逆流も検出可能なエアフローメータが実用化されているため、このようなエアフローメータを用いれば、第１の気筒間ばらつき値をより精度良く算出することができる。
【００１５】
また、吸気管圧力センサで検出した吸気管圧力の波形も、各気筒の吸気行程に対応した脈動波形、つまり、各気筒の吸入空気量を反映した脈動波形となるため、請求項３のように、各気筒の吸気行程に対応する期間毎に吸気管圧力センサで検出した吸気管圧力の平均値、極大値、極小値、振幅値、面積のうちの少なくとも１つに基づいて第１の気筒間ばらつき値を算出するようにしても良い。このようにしても、各気筒の吸入空気量ばらつきを反映した第１の気筒間ばらつき値を算出することができる。
【００１６】
一般に、エアフローメータは、スロットルバルブよりも上流側に配置され、吸気管圧力センサ１８は、スロットルバルブ１５よりも下流側に配置されている。スロットルバルブが全開位置から閉じられたときに、スロットルバルブの上流側では吸気脈動が小さくなるため、スロットルバルブの上流側に配置されたエアフローメータの出力に基づいて第１の気筒間ばらつき値を算出すると、スロットルバルブが閉じられたときに、第１の気筒間ばらつき値の算出精度が低下するおそれがある。
【００１７】
そこで、請求項４のように、内燃機関のスロットル開度が所定開度よりも小さいとき又は吸気管圧力が所定圧力よりも低いときには、スロットルバルブよりも下流側に配置された吸気管圧力センサで検出した吸気管圧力の極小値に基づいて第１の気筒間ばらつき値を算出することが好ましい。スロットルバルブが全開位置から閉じられても、スロットルバルブの下流側では比較的大きな吸気脈動が発生するため、スロットル開度が所定開度よりも小さいとき（又は内燃機関の吸気管圧力が所定圧力よりも低いとき）には、スロットルバルブの下流側に配置された吸気管圧力センサの出力に基づいて第１の気筒間ばらつき値を算出するようにすれば、常にスロットルバルブの上流側に配置されたエアフローメータの出力に基づいて第１の気筒間ばらつき値を算出する場合に比べて、スロットルバルブが閉じられたときの第１の気筒間ばらつき値の算出精度を向上させることができる。しかも、スロットルバルブが閉じられたときは、各気筒への空気吸入によって吸気管圧力が負圧側に振れるので、吸気管圧力の極小値を用いることによって第１の気筒間ばらつき値の算出精度をより高めることができる。
【００１８】
一方、第２の気筒間ばらつき値の算出方法の具体例としては、例えば、請求項５のように、各気筒の燃焼行程に対応する期間毎に各気筒の燃焼状態の情報となる回転変動を検出し、その回転変動に基づいて第２の気筒間ばらつき値を算出するようにしても良い。各気筒の吸入空気量や吸入燃料量に応じて各気筒の燃焼状態が変化して回転変動の値が変化するため、各気筒の回転変動を用いれば、各気筒の吸入空気量ばらつきや吸入燃料量ばらつきを反映した第２の気筒間ばらつき値を算出することができる。
【００１９】
或は、請求項６のように、各気筒の排気行程に対応する期間毎に前記空燃比センサにより各気筒の排出ガスの空燃比を検出し、その空燃比に基づいて前記第２の気筒間ばらつき値を算出するようにしても良い。各気筒の吸入空気量や吸入燃料量に応じて各気筒の排出ガスの空燃比が変化するため、各気筒の排出ガスの空燃比を用いれば、各気筒の吸入空気量ばらつきや吸入燃料量ばらつきを反映した第２の気筒間ばらつき値を算出することができる。
【００２０】
また、第１の気筒間ばらつき補正と第２の気筒間ばらつき補正は、種々の組み合わせが考えられるが、可変吸気バルブ制御による吸入空気量制御の低負荷時のように気筒間の吸入空気量ばらつきが大きい場合は、請求項７のように、第１の気筒間ばらつき補正として、第１の気筒間ばらつき値に基づいて各気筒毎に点火時期を補正することで気筒間のトルクばらつきを補正し、第２の気筒間ばらつき補正として、第２の気筒間ばらつき値に基づいて各気筒毎に燃料噴射量を補正することで気筒間の空燃比ばらつきを補正すると良い。
【００２１】
吸入空気量ばらつきが大きい場合（気筒間のトルクばらつきや空燃比ばらつきが大きい場合）に、第１の気筒間ばらつき補正で気筒間の空燃比ばらつきを補正すると、気筒間のトルクばらつきが大きいために、各気筒の回転変動が干渉した状態で、第２の気筒間ばらつき値を算出する必要があるため、各気筒の回転変動に基づいた第２の気筒間ばらつき値の算出精度が低下して、第２の気筒間ばらつき補正の補正精度が低下する。従って、気筒間の吸入空気量ばらつきが大きい場合には、第１の気筒間ばらつき補正で気筒間のトルクばらつきを補正した後、第２の気筒間ばらつき補正で気筒間の空燃比ばらつきを補正するという組み合わせが推奨される。
【００２２】
一方、可変吸気バルブ制御による吸入空気量制御の中負荷・高負荷時やスロットル制御による吸入空気量制御時のように吸入空気量ばらつきが比較的小さい場合には、請求項８のように、第１の気筒間ばらつき補正として、第１の気筒間ばらつき値に基づいて各気筒毎に燃料噴射量を補正することで気筒間の空燃比ばらつきを補正し、第２の気筒間ばらつき補正として、第２の気筒間ばらつき値に基づいて各気筒毎に点火時期を補正することで気筒間のトルクばらつきを補正するようにしても良い。
【００２３】
吸入空気量ばらつきが比較的小さい場合（気筒間のトルクばらつきや空燃比ばらつきが小さい場合）は、第１の気筒間ばらつき補正で気筒間の空燃比ばらつきを補正しても、気筒間のトルクばらつきが小さために、各気筒の回転変動が干渉しない状態で、第２の気筒間ばらつき値を算出することができるので、各気筒の回転変動に基づいて第２の気筒間ばらつき値を精度良く算出することができ、第２の気筒間ばらつき補正によって気筒間のトルクばらつきを精度良く補正することができる。この組み合わせは、特に、空燃比制御（排気エミッション低減）を優先しながらトルク変動も抑制したい場合に推奨される。
【００２４】
また、請求項９のように、内燃機関の各気筒毎に吸入空気量を可変する気筒別吸入空気可変手段を備えたシステムの場合には、第１の気筒間ばらつき補正として、第１の気筒間ばらつき値に基づいて各気筒毎に気筒別吸入空気可変手段の制御量を補正して各気筒毎に吸入空気量を補正し、第２の気筒間ばらつき補正として、第２の気筒間ばらつき値に基づいて各気筒毎に燃料噴射量を補正するようにしても良い。このようにすれば、第１の気筒間ばらつき補正と第２の気筒間ばらつき補正で、それぞれ気筒間の吸入空気量ばらつきと気筒間の吸入燃料量ばらつきを直接補正して、気筒間のトルクばらつきと気筒間の空燃比ばらつきを補正することができるので、点火時期の補正が不要となり、点火遅角による燃費の低下の問題を回避することができる。
【００２５】
また、吸入空気量ばらつきが比較的小さい場合で、トルク変動の抑制（ドライバビリティ向上）を重視する場合は、請求項１０のように、第１の気筒間ばらつき補正として、第１の気筒間ばらつき値に基づいて各気筒毎に点火時期を補正することで気筒間のトルクばらつきを補正し、第２の気筒間ばらつき補正として、第１の気筒間ばらつき補正で補正した点火時期を第２の気筒間ばらつき値に基づいて各気筒毎に再補正するようにすると良い。このようにすれば、第１の気筒間ばらつき補正と第２の気筒間ばらつき補正の２段階で気筒間のトルクばらつきを補正することができるので、気筒間のトルクばらつきをより精度良く補正することができ、ドライバビリティ向上の効果を高めることができる。
【００２６】
また、吸入空気量ばらつきが比較的小さい場合で、空燃比制御（排気エミッション低減）を重視する場合は、請求項１１のように、第１の気筒間ばらつき補正として、第１の気筒間ばらつき値に基づいて各気筒毎に燃料噴射量を補正することで気筒間の空燃比ばらつきを補正し、第２の気筒間ばらつき補正として、第１の気筒間ばらつき補正で補正した燃料噴射量を第２の気筒間ばらつき値に基づいて各気筒毎に再補正するようにすると良い。このようにすれば、第１の気筒間ばらつき補正と第２の気筒間ばらつき補正の２段階で気筒間の空燃比ばらつきを補正することができるので、気筒間の空燃比ばらつきをより精度良く補正することができ、排気エミッションを効果的に低減することができる。
【００２７】
また、気筒間の吸入燃料量ばらつきが非常に小さい場合（例えば各気筒の燃料噴射弁の個体差が小さく、エバポガスパージ実行中でない場合）は、請求項１２のように、第１の気筒間ばらつき補正として、第１の気筒間ばらつき値に基づいて各気筒毎に気筒別吸入空気可変手段の制御量を補正して各気筒毎に吸入空気量を補正し、第２の気筒間ばらつき補正として、第１の気筒間ばらつき補正で補正した気筒別吸入空気可変手段の制御量を第２の気筒間ばらつき値に基づいて各気筒毎に再補正するようにすると良い。このようにすれば、第１の気筒間ばらつき補正と第２の気筒間ばらつき補正の２段階で気筒間の吸入空気量ばらつきを補正することができるので、気筒間の吸入空気量ばらつきをより精度良く補正することができ、気筒間のトルクばらつき補正と気筒間の空燃比ばらつき補正を両立させることができる。しかも、点火時期補正や燃料噴射量補正が不要となり、燃費の低下の問題を回避することができる。
【００２８】
ところで、第１の気筒間ばらつき補正の補正量を変更してから暫くの間は、各気筒の燃焼状態が変化するので、第１の気筒間ばらつき補正の補正量変更の直後に、第２の気筒間ばらつき値を算出すると、第２の気筒間ばらつき値の算出精度が低下して、第２の気筒間ばらつき補正の補正精度が低下するおそれがある。
【００２９】
そこで、請求項１３のように、第１の気筒間ばらつき補正の補正量変更から所定期間が経過するまで第２の気筒間ばらつき値の算出を禁止するようにすると良い。このようにすれば、第１の気筒間ばらつき補正の補正量変更の直後で各気筒の燃焼状態が変化している期間に、第２の気筒間ばらつき値を算出することを避けて、第１の気筒間ばらつき補正の補正量変更から所定期間が経過して各気筒の燃焼状態が安定するのを待ってから第２の気筒間ばらつき値を算出することができるので、第２の気筒間ばらつき値の算出精度、ひいては第２の気筒間ばらつき補正の補正精度を向上させることができる。
【００３０】
また、請求項１４のように、第１の気筒間ばらつき補正によってトルク及び／又は空燃比の変動が所定以下になった場合には、第２の気筒間ばらつき補正を省略するようにしても良い。このようにすれば、第１の気筒間ばらつき補正によってトルクや空燃比が安定して第２の気筒間ばらつき補正が不必要になった場合に、第２の気筒間ばらつき補正を実行せずに済む。
【００３１】
また、内燃機関の各気筒毎に吸入空気量を可変する気筒別吸入空気可変手段を備えたシステムでは、請求項１５のように、内燃機関の吸入空気量と吸気管圧力のうちの少なくとも一方に基づいて各気筒の吸入空気量ばらつきを表す気筒間ばらつき値を算出し、その気筒間ばらつき値に基づいて各気筒毎に気筒別吸入空気可変手段の制御量を補正して各気筒毎に吸入空気量を補正することで気筒間の吸入空気量ばらつきを補正するようにしても良い。このようにしても、気筒間の吸入空気量ばらつきを補正することができるので、気筒間のトルクばらつきや気筒間の空燃比ばらつきを精度良く補正することができる。
【００３２】
尚、上記請求項９、１２、１５に係る発明において、各気筒毎に吸入空気量を可変する気筒別吸入空気可変手段は、請求項１６のように、各気筒毎に独立した可変吸気バルブ機構を設け、各気筒の可変吸気バルブ機構を個別に制御することで各気筒毎に吸入空気量を可変するようにしても良い。或は、請求項１７のように、内燃機関の全気筒又は複数気筒の吸気バルブのバルブ制御量を一括して可変する可変吸気バルブ機構を設け、各気筒の吸気行程毎に可変バルブ吸気機構を高速駆動してバルブ制御量を可変することで各気筒毎に吸入空気量を可変するようにしても良い。いずれの場合も、各気筒毎に吸入空気量を可変することが可能である。
【００３３】
【発明の実施の形態】
《実施形態（１）》
以下、本発明の実施形態（１）を図１乃至図１７に基づいて説明する。まず、図１に基づいてエンジン制御システム全体の概略構成を説明する。内燃機関である例えば４気筒のエンジン１１は、第１気筒＃１〜第４気筒＃４の４つの気筒を有し、このエンジン１１の吸気管１２の最上流部には、エアクリーナ１３が設けられ、このエアクリーナ１３の下流側に、吸入空気量を検出するエアフローメータ１４が設けられている。このエアフローメータ１４は、吸入空気の逆流も検出可能なエアフローメータが用いられている。エアフローメータ１４の下流側には、ＤＣモータ等によって開度調節されるスロットルバルブ１５とスロットル開度を検出するスロットル開度センサ１６とが設けられている。
【００３４】
更に、スロットルバルブ１５の下流側には、サージタンク１７が設けられ、このサージタンク１７に、吸気管圧力を検出する吸気管圧力センサ１８が設けられている。また、サージタンク１７には、エンジン１１の各気筒に空気を導入する吸気マニホールド１９が設けられ、各気筒の吸気マニホールド１９の吸気ポート近傍に、それぞれ燃料を噴射する燃料噴射弁２０が取り付けられている。また、エンジン１１のシリンダヘッドには、各気筒毎に点火プラグ２１が取り付けられ、各点火プラグ２１の火花放電によって筒内の混合気に着火される。
【００３５】
また、エンジン１１の吸気バルブ２８と排気バルブ２９には、それぞれバルブリフト量を可変する可変バルブリフト機構３０，３１が設けられている。更に、吸気バルブ２８と排気バルブ２９に、それぞれバルブタイミング（開閉タイミング）を可変する可変バルブタイミング機構を設けるようにしても良い。尚、排気バルブ２９には、可変バルブリフト機構３１を設けずに、可変バルブタイミング機構のみを設けるようにしても良い。
【００３６】
一方、エンジン１１の排気管２２には、排出ガス中のＣＯ，ＨＣ，ＮＯｘ等を浄化する三元触媒等の触媒２３が設けられ、この触媒２３の上流側に、排出ガスの空燃比を検出する空燃比センサ２４が設けられている。また、エンジン１１のシリンダブロックには、冷却水温を検出する冷却水温センサ２５や、エンジン１１のクランク軸が一定クランク角（例えば３０℃Ａ）回転する毎にパルス信号を出力するクランク角センサ２６が取り付けられている。このクランク角センサ２６の出力信号に基づいてクランク角やエンジン回転速度が検出される。
【００３７】
これら各種センサの出力は、エンジン制御回路（以下「ＥＣＵ」と表記する）２７に入力される。このＥＣＵ２７は、マイクロコンピュータを主体として構成され、内蔵されたＲＯＭ（記憶媒体）に記憶された各種のエンジン制御プログラムを実行することで、エンジン運転状態に応じて燃料噴射弁２０の燃料噴射量や点火プラグ２１の点火時期を制御する。
【００３８】
次に、図２に基づいて吸気バルブ２８の可変バルブリフト機構３０の構成を説明する。尚、排気バルブ２９の可変バルブリフト機構３１は、吸気バルブ２８の可変バルブリフト機構３０と実質的に同一構成であるため、説明を省略する。
【００３９】
図２に示すように、吸気バルブ２８を駆動するためのカムシャフト３２とロッカーアーム３３との間に、リンクアーム３４が設けられ、このリンクアーム３４の上方に、ステッピングモータ等のモータ４１で回動駆動されるコントロールシャフト３５が設けられている。コントロールシャフト３５には、偏心カム３６が一体的に回動可能に設けられ、この偏心カム３６の軸心に対して偏心した位置に、リンクアーム３４が支持軸（図示せず）を介して揺動可能に支持されている。このリンクアーム３４の中央部には、揺動カム３８が設けられ、この揺動カム３８の側面が、カムシャフト３２に設けられたカム３７の外周面に当接している。また、リンクアーム３４の下端部には、押圧カム３９が設けられ、この押圧カム３９の下端面が、ロッカーアーム３３の中央部に設けられたローラ４０の上端面に当接している。
【００４０】
これにより、カムシャフト３２の回転によってカム３７が回転すると、そのカム３７の外周面形状に追従してリンクアーム３４の揺動カム３８が左右に移動して、リンクアーム３４が左右に揺動する。リンクアーム３４が左右に揺動すると、押圧カム３９が左右に移動するため、押圧カム３９の下端面形状に応じてロッカーアーム３３のローラ４０が上下に移動して、ロッカーアーム３３が上下に揺動する。このロッカーアーム３３の上下動によって吸気バブル２８が上下動するようになっている。
【００４１】
一方、コントロールシャフト３５の回転によって偏心カム３６が回転すると、リンクアーム３４の支持軸の位置が移動して、リンクアーム３４の押圧カム３９とロッカーアーム３３のローラ４０との初期の接触点位置が変化する。また、リンクアーム３４の押圧カム３９の下端面は、左側部分にロッカーアーム３３の押圧量が０（吸気バルブ２８のバルブリフト量が０）となるような曲率でベース曲面３９ａが形成され、このベース曲面３９ａから右方に向かうに従ってロッカーアーム３３の押圧量が大きくなる（吸気バルブ２８のバルブリフト量が大きくなる）ような曲率で押圧曲面３９ｂが形成されている。
【００４２】
吸気バルブ２８のバルブリフト量を大きくする高リフトモードの場合には、コントロールシャフト３５の回転によってリンクアーム３４の押圧カム３９とロッカーアーム３３のローラ４０との初期の接触点位置を右方に移動させる。これにより、カム３７の回転によって押圧カム３９が左右に移動したときに押圧カム３９の下端面のうちローラ４０に接触する区間が右方に移動するため、ロッカーアーム３３の最大押圧量が大きくなって吸気バルブ２８の最大バルブリフト量が大きくなると共に、ロッカーアーム３３が押圧される期間が長くなって吸気バブル２８の開弁期間が長くなる。
【００４３】
一方、吸気バルブ２８のバルブリフト量を小さくする低リフトモードの場合には、コントロールシャフト３５の回転によってリンクアーム３４の押圧カム３９とロッカーアーム３３のローラ４０との初期の接触点位置を左方に移動させる。これにより、カム３７の回転によって押圧カム３９が左右に移動したときに押圧カム３９の下端面のうちローラ４０に接触する区間が左方に移動するため、ロッカーアーム３３の最大押圧量が小さくなって吸気バルブ２８の最大バルブリフト量が小さくなると共に、ロッカーアーム３３が押圧される期間が短くなって吸気バブル２８の開弁期間が短くなる。
【００４４】
以上説明した可変バルブリフト機構３０では、モータ４１でコントロールシャフト３５を回転させてリンクアーム３４の押圧カム３９とロッカーアーム３３のローラ４０との初期の接触点位置を連続的に移動させれば、全気筒（＃１〜＃４）の吸気バルブ２８の最大バルブリフト量と開弁期間（以下単に「バルブリフト量」という）を一括して連続的に可変することができる。
【００４５】
ＥＣＵ２７は、ＲＯＭに記憶された可変バルブ制御プログラム（図示せず）を実行することで、アクセル開度やエンジン運転状態等に基づいて吸気バルブ２８の可変バルブリフト機構３０を制御して、吸気バルブ２８のバルブリフト量を連続的に可変して吸入空気量を制御する。尚、可変バルブリフト機構３０と可変バルブタイミング機構を併用したシステムの場合には、バルブリフト量とバルブタイミングの両方を連続的に可変して吸入空気量を制御するようにしても良い。
【００４６】
また、ＥＣＵ２７は、後述する気筒間ばらつき補正用の各ルーチンを実行することで、エンジン１１の燃焼前の情報（吸入空気量や吸気管圧力）に基づいて各気筒の吸入空気量ばらつきを表す第１の気筒間ばらつき値ＤＥＶ１を算出し、この第１の気筒間ばらつき値ＤＥＶ１に基づいて第１の気筒間ばらつき補正を実行して気筒間のトルクばらつきや気筒間の空燃比ばらつきを補正する。そして、この第１の気筒間ばらつき補正の実行後にエンジン１１の燃焼後の情報（燃焼状態や排出ガスの空燃比）に基づいて各気筒の吸入空気量ばらつきや吸入燃料量ばらつきを表す第２の気筒間ばらつき値ＤＥＶ２を算出し、この第２の気筒間ばらつき値ＤＥＶ２に基づいて第２の気筒間ばらつき補正を実行して気筒間のトルクばらつきや気筒間の空燃比ばらつきを補正する。
【００４７】
以下、本実施形態（１）でＥＣＵ２７が実行する気筒間ばらつき補正用の各ルーチンの処理内容を説明する。
【００４８】
［気筒間ばらつき補正ベースルーチン］
図３に示す気筒間ばらつき補正ベースルーチンは、エンジン運転中に所定周期で実行される。本ルーチンが起動されると、まず、ステップ１０１で、気筒間ばらつき補正実行条件が成立しているか否かを判定する。ここで、気筒間ばらつき補正実行条件は、例えば、次の▲１▼〜▲３▼の条件を全て満たすことである。
【００４９】
▲１▼始動後所定時間以上が経過していること（つまり始動直後の不安定な運転状態でないこと）
▲２▼過渡運転状態でないこと（つまり定常運転状態であること）
▲３▼空燃比センサ２４が活性状態であること
【００５０】
上記▲１▼〜▲３▼の条件を全て満たせば、気筒間ばらつき補正実行条件が成立するが、上記▲１▼〜▲３▼の条件のうちいずれか１つでも満たさない条件があれば、気筒間ばらつき補正実行条件が不成立となる。尚、第２の気筒間ばらつき値ＤＥＶ２を算出する際に空燃比センサ２４の出力信号を用いない場合には、上記▲３▼の条件を省略しても良い。
【００５１】
気筒間ばらつき補正実行条件が不成立と判定された場合には、以降の気筒間ばらつき補正（ステップ１０２〜１１０）を実行することなく、本ルーチンを終了する。
【００５２】
一方、上記ステップ１０１で、気筒間ばらつき補正実行条件が成立していると判定された場合には、ステップ１０２以降の気筒間ばらつき補正を次のようにして実行する。まず、ステップ１０２で、後述する図４に示す第１の気筒間ばらつき推定ルーチンを実行して、第１の気筒間ばらつき値ＤＥＶ１を算出する。本実施形態（１）では、エアフロメータ１４で検出した吸入空気量に基づいて第１の気筒間ばらつき値ＤＥＶ１を各気筒毎に算出する。
【００５３】
この後、ステップ１０３に進み、後述する図１０に示す第１の気筒間ばらつき補正ルーチンを実行して、第１の気筒間ばらつき補正を実行する。本実施形態（１）では、第１の気筒間ばらつき補正として、各気筒の第１の気筒間ばらつき値ＤＥＶ１に基づいて各気筒毎に点火時期を補正することで、気筒間のトルクばらつきを補正する。
【００５４】
この後、ステップ１０４に進み、第１の気筒間ばらつき補正の補正量変更がなく且つ第１の気筒間ばらつき補正の補正量変更後の経過時間をカウントする補正後経過時間カウンタＣＤＥＶが「０」にリセットされているか否かによって、第１の気筒間ばらつき補正の補正量が変更されてから各気筒の燃焼状態が安定するのに必要な所定時間ＫＣＤＥＶが経過した状態であるか否かを判定する。
【００５５】
第１の気筒間ばらつき補正の補正量が変更されてから所定時間ＫＣＤＥＶが経過する前は、ステップ１０５に進み、補正後経過時間カウンタＣＤＥＶを「１」だけインクリメントした後、ステップ１０６に進み、補正後経過時間カウンタＣＤＥＶのカウント値が所定時間ＫＣＤＥＶを越えたか否かを判定する。補正後経過時間カウンタＣＤＥＶのカウント値が所定時間ＫＣＤＥＶを越えていなければ、そのまま本ルーチンを終了する。
【００５６】
その後、ステップ１０６で、補正後経過時間カウンタＣＤＥＶのカウント値が所定時間ＫＣＤＥＶを越えたと判定された時点、つまり、第１の気筒間ばらつき補正の補正量が変更されてから所定時間ＫＣＤＥＶが経過した時点で、ステップ１０７に進み、補正後経過時間カウンタＣＤＥＶを「０」にリセットした後、ステップ１０８に進む。
【００５７】
これらのステップ１０４〜１０７の処理により、第１の気筒間ばらつき補正の補正量が変更されてから所定時間ＫＣＤＥＶが経過するまで後述するステップ１０９の処理（第２の気筒間ばらつき値を算出する処理）を禁止する。これらのステップ１０４〜１０７の処理が特許請求の範囲でいうばらつき推定禁止手段としての役割を果たす。
【００５８】
一方、上記ステップ１０４で、第１の気筒間ばらつき補正の補正量変更がなく且つ補正後経過時間カウンタＣＤＥＶが「０」にリセットされている状態、つまり、第１の気筒間ばらつき補正の補正量が変更されてから所定時間ＫＣＤＥＶが経過した状態であると判定された場合は、ステップ１０４からステップ１０８に進む。
【００５９】
このステップ１０８では、エンジン１１のトルクと空燃比が両方とも安定した状態であるか否かを判定する。この際、例えば、クランク角センサ２６で検出したエンジン回転速度の挙動に基づいてトルクが安定しているか否か（トルクのサイクル内変動が所定以下であるか否か）を判定し、空燃比センサ２４で検出した空燃比の挙動に基づいて空燃比が安定しているか否か（空燃比のサイクル内変動が所定以下であるか否か）を判定する。尚、第１の気筒間ばらつき補正と第２の気筒間ばらつき補正の組み合わせ等によっては、必ずしもトルクと空燃比が両方とも安定しているか否かを判定する必要はなく、トルクと空燃比のうちの一方が安定しているか否かを判定するようにしても良い。
【００６０】
ステップ１０８でトルクや空燃比が安定していないと判定された場合には、ステップ１０９に進み、後述する図１３に示す第２の気筒間ばらつき推定ルーチンを実行して、第２の気筒間ばらつき値ＤＥＶ２を算出する。本実施形態（１）では、クランク角センサ２６の出力信号に基づいて算出した回転変動に基づいて第２の気筒間ばらつき値ＤＥＶ２を各気筒毎に算出する。
【００６１】
この後、ステップ１１０に進み、後述する図１４に示す第２の気筒間ばらつき補正ルーチンを実行して、第２の気筒間ばらつき補正を実行する。本実施形態（１）では、第２の気筒間ばらつき補正として、各気筒の第２の気筒間ばらつき値ＤＥＶ２に基づいて各気筒毎に燃料噴射量を補正することで、気筒間の空燃比ばらつきを補正する。
【００６２】
これに対して、上記ステップ１０８で、トルクと空燃比が安定したと判定された場合には、第１の気筒間ばらつき補正によって気筒間の空燃比ばらつきや気筒間のトルクばらつきが小さくなったため、第２の気筒間ばらつき補正を実行する必要がないと判断して、第２の気筒間ばらつき推定及び第２の気筒間ばらつき補正を省略して、本ルーチンを終了する。このステップ１０８の処理が特許請求の範囲でいうばらつき補正省略手段としての役割を果たす。
【００６３】
［第１の気筒間ばらつき推定ルーチン］
図４に示す第１の気筒間ばらつき推定ルーチン（図３のステップ１０２）は、エアフロメータ１４で検出した吸入空気量に基づいて第１の気筒間ばらつき値ＤＥＶ１を各気筒毎に算出するものである。本ルーチンは、所定周期（例えば４ｍｓ）で繰り返し実行され、特許請求の範囲でいう第１の気筒間ばらつき推定手段としての役割を果たす。
【００６４】
本ルーチンが起動されると、まず、ステップ２０１で、エアフロメータ１４のフィルタ処理後の出力電圧ＶＡＦＭを読み込んだ後、ステップ２０２に進み、図８に示す特性の吸入空気量瞬時値ＧＡＦＭの変換マップを検索して、現在のエアフロメータ１４の出力電圧ＶＡＦＭに応じた吸入空気量瞬時値ＧＡＦＭ（エアフロメータ１４を通過する吸入空気量の瞬時値）を算出する。
【００６５】
この後、ステップ２０３に進み、クランク角カウンタＣＣＲＮＫのカウント値を読み込む。このクランク角カウンタＣＣＲＮＫは、クランク角センサ２６の出力信号に基づいて例えば３０℃Ａ毎に「１」ずつインクリメントされるため、クランク角カウンタＣＣＲＮＫの２４カウントが１サイクル（７２０℃Ａ）に相当する。尚、クランク角カウンタＣＣＲＮＫは、「２４」になった時点で「０」にリセットされる。また、クランク角カウンタＣＣＲＮＫ＝０のクランク回転位置が、第１気筒＃１の圧縮上死点（圧縮ＴＤＣ）に相当し、クランク角カウンタＣＣＲＮＫ＝６、１２、１８のクランク回転位置が、それぞれ第３気筒＃３、第４気筒＃４、第２気筒＃２の圧縮ＴＤＣに相当するように設定されている。
【００６６】
この後、ステップ２０４に進み、各気筒の吸入空気量平均値ＧＧＡａｖｅ（＃ｉ）　を算出する。ここで、＃ｉ＝＃１〜＃４である。
第１気筒＃１の吸入空気量平均値ＧＧＡａｖｅ（＃１）　を算出する場合は、クランク角カウンタＣＣＲＮＫ＝１２〜１７の期間、つまり、第１気筒＃１の吸気行程に対応する期間の例えば６回分の吸入空気量瞬時値ＧＡＦＭの平均値を算出する。
【００６７】
第２気筒＃２の吸入空気量平均値ＧＧＡａｖｅ（＃２）　を算出する場合は、クランク角カウンタＣＣＲＮＫ＝６〜１１の期間、つまり、第２気筒＃２の吸気行程に対応する期間の例えば６回分の吸入空気量瞬時値ＧＡＦＭの平均値を算出する。
【００６８】
第３気筒＃３の吸入空気量平均値ＧＧＡａｖｅ（＃３）　を算出する場合は、クランク角カウンタＣＣＲＮＫ＝１８〜２３の期間、つまり、第３気筒＃３の吸気行程に対応する期間の例えば６回分の吸入空気量瞬時値ＧＡＦＭの平均値を算出する。
【００６９】
第４気筒＃４の吸入空気量平均値ＧＧＡａｖｅ（＃４）　を算出する場合は、クランク角カウンタＣＣＲＮＫ＝０〜５の期間、つまり、第４気筒＃４の吸気行程に対応する期間の例えば６回分の吸入空気量瞬時値ＧＡＦＭの平均値を算出する。
【００７０】
図９に示すように、一般に、複数の気筒を有するエンジン１１の吸気管１２内には、各気筒の吸気行程に対応して吸気脈動が発生するので、エアフローメータ１４で検出した吸入空気量の波形（出力電圧ＶＡＦＭの波形）は、各気筒の吸気行程に対応した脈動波形、つまり、各気筒の吸入空気量を反映した脈動波形となる。従って、各気筒の吸気行程に対応する期間毎にエアフローメータ１４で検出した吸入空気量の平均値、極大値、極小値、振幅値、面積等を算出すれば、各気筒の吸入空気量を反映した脈動波形の特性値を算出することができるので、この特性値（例えば平均値）を用いれば、各気筒の吸入空気量ばらつきを反映した第１の気筒間ばらつき値ＤＥＶ１を算出することができる。
【００７１】
この後、ステップ２０５に進み、上記ステップ２０４で算出した各気筒の吸入空気量平均値ＧＧＡａｖｅ（＃ｉ）　をなまし処理して、各気筒の最終的な吸入空気量平均値ＧＡａｖｅ（＃ｉ）　を求める。
ＧＡａｖｅ（＃ｉ）　＝ＧＡａｖｅ（＃ｉ）ｏｌｄ＋ｋ×｛ＧＧＡａｖｅ（＃ｉ）　−ＧＡａｖｅ（＃ｉ）ｏｌｄ｝
ここで、ＧＡａｖｅ（＃ｉ）　は今回の吸入空気量平均値、ＧＡａｖｅ（＃ｉ）ｏｌｄは前回の吸入空気量平均値、ｋはなまし係数である。
【００７２】
この後、ステップ２０６で、各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を次式により算出する。
ＤＥＶ１（＃ｉ）＝｛ＧＡａｖｅ（＃ｉ）　−ＡＶＥＧＡａｖｅ　｝／ＡＶＥＧＡａｖｅ
ここで、ＡＶＥＧＡａｖｅ　は全気筒の吸入空気量平均値ＧＡａｖｅ（＃１）　〜ＧＡａｖｅ（＃４）　の平均値である。
ＡＶＥＧＡａｖｅ　＝｛ＧＡａｖｅ（＃１）　＋……＋ＧＡａｖｅ（＃４）　｝／４
【００７３】
尚、図４に示す第１の気筒間ばらつき推定ルーチンでは、各気筒の吸入空気量平均値ＧＡａｖｅ（＃ｉ）　に基づいて第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を算出したが、各気筒の吸入空気量極大値ＧＡｍａｘ（＃ｉ）　や吸入空気量極小値ＧＡｍｉｎ（＃ｉ）　に基づいて第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を算出するようにしても良い。或は、各気筒の吸入空気量振幅値ＧＡｗｉｄ（＃ｉ）　に基づいて第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を算出するようにしても良い。また、各気筒の吸入空気量の面積を算出するようにしても良い。
【００７４】
各気筒の吸入空気量極大値ＧＡｍａｘ（＃ｉ）　に基づいて第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を算出する場合は、図４のステップ２０１〜ステップ２０３の処理を実行した後、図５に示すステップ２０４ａに進み、各気筒の吸入空気量極大値ＧＧＡｍａｘ（＃ｉ）　を算出する。この場合、各気筒の吸入空気量極大値ＧＧＡｍａｘ（＃１）　〜ＧＧＡｍａｘ（＃４）　として、それぞれ各気筒の吸気行程に対応する期間の吸入空気量瞬時値ＧＡＦＭの最大値を算出する。
【００７５】
この後、ステップ２０５ａに進み、各気筒の吸入空気量極大値ＧＧＡｍａｘ（＃ｉ）　をなまし処理して、各気筒の最終的な吸入空気量極大値ＧＡｍａｘ（＃ｉ）　を求める。ＧＡｍａｘ（＃ｉ）　＝ＧＡｍａｘ（＃ｉ）ｏｌｄ＋ｋ×｛ＧＧＡｍａｘ（＃ｉ）　−ＧＡｍａｘ（＃ｉ）ｏｌｄ｝
ここで、ＧＡｍａｘ（＃ｉ）ｏｌｄは前回の吸入空気量極大値である。
【００７６】
そして、次のステップ２０６ａで、各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を次式により算出する。
ＤＥＶ１（＃ｉ）＝｛ＧＡｍａｘ（＃ｉ）　−ＡＶＥＧＡｍａｘ　｝／ＡＶＥＧＡｍａｘ
ここで、ＡＶＥＧＡｍａｘ　は全気筒の吸入空気量極大値ＧＡｍａｘ（＃１）　〜ＧＡｍａｘ（＃４）　の平均値である。
ＡＶＥＧＡｍａｘ　＝｛ＧＡｍａｘ（＃１）　＋……＋ＧＡｍａｘ（＃４）　｝／４
【００７７】
一方、各気筒の吸入空気量極小値ＧＡｍｉｎ（＃ｉ）　に基づいて第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を算出する場合は、図４のステップ２０１〜ステップ２０３の処理を実行した後、図６に示すステップ２０４ｂに進み、各気筒の吸入空気量極小値ＧＧＡｍｉｎ（＃ｉ）　を算出する。この場合、各気筒の吸入空気量極小値ＧＧＡｍｉｎ（＃１）　〜ＧＧＡｍｉｎ（＃４）　として、それぞれ各気筒の吸気行程に対応する期間の吸入空気量瞬時値ＧＡＦＭの最小値を算出する。尚、吸入空気量極小値ＧＧＡｍｉｎ（＃１）　〜ＧＧＡｍｉｎ（＃４）　は、吸入空気量とばらつき方向を合わせるためにマイナス値にしておく。
【００７８】
そして、次のステップ２０５ｂで、各気筒の吸入空気量極小値ＧＧＡｍｉｎ（＃ｉ）　をなまし処理して、各気筒の最終的な吸入空気量極小値ＧＡｍｉｎ（＃ｉ）　を求める。ＧＡｍｉｎ（＃ｉ）　＝ＧＡｍｉｎ（＃ｉ）ｏｌｄ＋ｋ×｛ＧＧＡｍｉｎ（＃ｉ）　−ＧＡｍｉｎ（＃ｉ）ｏｌｄ｝
ここで、ＧＡｍｉｎ（＃ｉ）ｏｌｄは、前回の吸入空気量極小値である。
【００７９】
この後、ステップ２０６ｂに進み、各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を次式により算出する。
ＤＥＶ１（＃ｉ）＝｛ＧＡｍｉｎ（＃ｉ）　−ＡＶＥＧＡｍｉｎ　｝／ＡＶＥＧＡｍｉｎ
ここで、ＡＶＥＧＡｍｉｎ　は全気筒の吸入空気量極小値ＧＡｍｉｎ（＃１）　〜ＧＡｍｉｎ（＃４）　の平均値である。
ＡＶＥＧＡｍｉｎ　＝｛ＧＡｍｉｎ（＃１）　＋……＋ＧＡｍｉｎ（＃４）　｝／４
【００８０】
また、各気筒の吸入空気量振幅値ＧＡｗｉｄ（＃ｉ）　に基づいて第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を算出する場合は、図４のステップ２０１〜ステップ２０３の処理を実行した後、図７に示すステップ２０４ｃに進み、各気筒の吸入空気量極大値ＧＧＡｍａｘ（＃ｉ）　を算出した後、ステップ２０５ｃに進み、各気筒の吸入空気量極小値ＧＧＡｍｉｎ（＃ｉ）　を算出する。
【００８１】
この後、ステップ２０６ｃに進み、各気筒の吸入空気量振幅値ＧＧＡｗｉｄ（＃ｉ）　を次式により算出する。
ＧＧＡｗｉｄ（＃ｉ）　＝ＧＧＡｍａｘ（＃ｉ）　−ＧＧＡｍｉｎ（＃ｉ）
【００８２】
そして、次のステップ２０７ｃで、各気筒の吸入空気量振幅値ＧＧＡｗｉｄ（＃ｉ）　をなまし処理して各気筒の最終的な吸入空気量振幅値ＧＧＡｗｉｄ（＃ｉ）　を求める。
ＧＡｗｉｄ（＃ｉ）　＝ＧＡｗｉｄ（＃ｉ）ｏｌｄ＋ｋ×｛ＧＧＡｗｉｄ（＃ｉ）　−ＧＡｗｉｄ（＃ｉ）ｏｌｄ｝
ここで、ＧＡｗｉｄ（＃ｉ）ｏｌｄは、前回の吸入空気量振幅値である。
【００８３】
この後、ステップ２０８ｃに進み、各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を次式により算出する。
ＤＥＶ１（＃ｉ）＝｛ＧＡｗｉｄ（＃ｉ）　−ＡＶＥＧＡｗｉｄ　｝／ＡＶＥＧＡｗｉｄ
ここで、ＡＶＥＧＡｗｉｄ　は全気筒の吸入空気量振幅値ＧＡｗｉｄ（＃１）　〜ＧＡｗｉｄ（＃４）　の平均値である。
ＡＶＥＧＡｗｉｄ　＝｛ＧＡｗｉｄ（＃１）　＋……＋ＧＡｗｉｄ（＃４）　｝／４
【００８４】
尚、吸入空気量平均値ＧＡａｖｅ（＃ｉ）　、吸入空気量極大値ＧＡｍａｘ（＃ｉ）　、吸入空気量極小値ＧＡｍｉｎ（＃ｉ）　、吸入空気量振幅値ＧＡｗｉｄ（＃ｉ）　のうちの２つ以上に基づいて第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を算出するようにしても良い。
【００８５】
［第１の気筒間ばらつき補正ルーチン］
図１０に示す第１の気筒間ばらつき補正ルーチンは、図３のステップ１０３で起動されるサブルーチンであり、各気筒の第１の気筒間ばらつき値ＤＥＶ１に基づいて各気筒毎に点火時期を補正することで、気筒間のトルクばらつきを補正するものであり、特許請求の範囲でいう第１の気筒間ばらつき補正手段としての役割を果たす。
【００８６】
本ルーチンが起動されると、まず、ステップ３０１で、各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃１）〜ＤＥＶ１（＃４）を読み込んだ後、ステップ３０２に進み、各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃１）〜ＤＥＶ１（＃４）のうちの最小値ＤＥＶ１ｍｉｎ　を選択する。
【００８７】
この後、ステップ３０３に進み、図１１に示す特性の点火時期の基本補正量ＦＡＯＰ１のマップを検索して、各気筒毎に第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）と最小値ＤＥＶ１ｍｉｎ　との差分に応じた点火時期の基本補正量ＦＡＯＰ１（＃ｉ）を算出する。
【００８８】
図１１の点火時期の基本補正量ＦＡＯＰ１のマップは、ＤＥＶ１（＃ｉ）−ＤＥＶ１ｍｉｎ　の値が大きくなるほど基本補正量ＦＡＯＰ１が小さくなる（点火時期の遅角量が大きくなる）ように遅角補正側（トルクダウン側）のみが設定されている。また、ＤＥＶ１（＃ｉ）−ＤＥＶ１ｍｉｎ　が所定値以下の領域では、基本補正量ＦＡＯＰ１＝０に設定され、点火時期を補正しない。
【００８９】
この後、ステップ３０４に進み、クランク角センサ２６で検出したエンジン回転速度ＮＥを読み込むと共に、エアフローメータ１４で検出した吸入空気量ＧＡを読み込んだ後、ステップ３０５に進み、図１２に示す補正係数ＦＡＯＰ２のマップを検索して、各気筒毎に現在のエンジン運転状態（例えばエンジン回転速度ＮＥと吸入空気量ＧＡ）に応じた補正係数ＦＡＯＰ２（＃ｉ）を算出する。
【００９０】
この後、ステップ３０６に進み、各気筒の基本補正量ＦＡＯＰ１（＃ｉ）に補正係数ＦＡＯＰ２（＃ｉ）を乗算して、各気筒の点火時期補正量ＦＡＯＰ（＃ｉ）を求める。
ＦＡＯＰ（＃ｉ）＝ＦＡＯＰ１（＃ｉ）×ＦＡＯＰ２（＃ｉ）
【００９１】
この後、ステップ３０７に進み、補正前の全気筒の平均点火時期ＡＯＰに各気筒の点火時期補正量ＦＡＯＰ（＃ｉ）を加算して、各気筒の最終点火時期ＡＯＰ（＃ｉ）を求める。
ＡＯＰ（＃ｉ）＝ＡＯＰ＋ＦＡＯＰ（＃ｉ）
【００９２】
以上の処理により各気筒の第１の気筒間ばらつき値ＤＥＶ１に応じて各気筒の点火時期を遅角補正して各気筒のトルクを適宜低下させることで、気筒間のトルクばらつきを小さくする。
【００９３】
尚、本ルーチンでは、点火時期の遅角補正によるトルクダウンのみを利用して気筒間のトルクばらつきを補正するため、点火時期が進角補正されてノック限界を越えてしまうことを防止することができる利点があるが、点火時期の進角側に余裕がある場合は、点火時期の進角補正によるトルクアップと遅角補正によるトルクダウンを両方とも利用して気筒間のトルクばらつきを小さくするようにしても良い。
【００９４】
［第２の気筒間ばらつき推定ルーチン］
図１３に示す第２の気筒間ばらつき推定ルーチンは、図３のステップ１０９で起動されるサブルーチンであり、クランク角センサ２６の出力信号に基づいて算出した回転変動に基づいて第２の気筒間ばらつき値ＤＥＶ２を各気筒毎に算出するものであり、特許請求の範囲でいう第２の気筒間ばらつき推定手段としての役割を果たす。
【００９５】
本ルーチンが起動されると、まず、ステップ４０１で、クランク角カウンタＣＣＲＮＫのカウント値を読み込む。前述したように、このクランク角カウンタＣＣＲＮＫは、クランク角センサ２６の出力信号に基づいて例えば３０℃Ａ毎に「１」ずつインクリメントされる。
【００９６】
この後、ステップ４０２に進み、クランク軸が３０℃Ａ回転するのに要した時間Ｔ３０（クランク角カウンタＣＣＲＮＫの前回のインクリメントタイミングから今回のインクリメントタイミングまでの時間）を読み込む。
そして、次のステップ４０３で、各気筒の燃焼行程に対応する期間のＴ３０の最小値Ｔ３０ＭＩＮ（＃ｉ）と最大値Ｔ３０ＭＡＸ（＃ｉ）を算出する。
【００９７】
第１気筒＃１の最小値Ｔ３０ＭＩＮ（＃１）と最大値Ｔ３０ＭＡＸ（＃１）を算出する場合は、クランク角カウンタＣＣＲＮＫ＝０〜５の期間、つまり、第１気筒＃１の燃焼行程に対応する期間のＴ３０の最小値と最大値を算出する。
【００９８】
第２気筒＃２の最小値Ｔ３０ＭＩＮ（＃２）と最大値Ｔ３０ＭＡＸ（＃２）を算出する場合は、クランク角カウンタＣＣＲＮＫ＝１８〜２３の期間、つまり、第２気筒＃２の燃焼行程に対応する期間のＴ３０の最小値と最大値を算出する。
【００９９】
第３気筒＃３の最小値Ｔ３０ＭＩＮ（＃３）と最大値Ｔ３０ＭＡＸ（＃３）を算出する場合は、クランク角カウンタＣＣＲＮＫ＝６〜１１の期間、つまり、第３気筒＃３の燃焼行程に対応する期間のＴ３０の最小値と最大値を算出する。
【０１００】
第４気筒＃４の最小値Ｔ３０ＭＩＮ（＃４）と最大値Ｔ３０ＭＡＸ（＃４）を算出する場合は、クランク角カウンタＣＣＲＮＫ＝１２〜１７の期間、つまり、第４気筒＃４の燃焼行程に対応する期間のＴ３０の最小値と最大値を算出する。
【０１０１】
この後、ステップ４０４に進み、各気筒の回転変動ΔＴＴ３０（＃ｉ）を次式により算出する。
ΔＴＴ３０（＃ｉ）＝Ｔ３０ＭＡＸ（＃ｉ）−Ｔ３０ＭＩＮ（＃ｉ）
このようにして算出した各気筒の回転変動ΔＴＴ３０（＃ｉ）は、各気筒の燃焼トルクに応じた値となる。
【０１０２】
そして、次のステップ４０５で、上記ステップ４０４で算出した各気筒の回転変動ΔＴＴ３０（＃ｉ）をなまし処理して、各気筒の最終的な回転変動ΔＴ３０（＃ｉ）を求める。
ΔＴ３０（＃ｉ）＝ΔＴ３０（＃ｉ）ｏｌｄ　＋ｋ×｛ΔＴＴ３０（＃ｉ）−ΔＴ３０（＃ｉ）ｏｌｄ　｝
ここで、ΔＴ３０（＃ｉ）ｏｌｄ　は前回の回転変動である。
【０１０３】
この後、ステップ４０６に進み、全気筒の回転変動ΔＴ３０（＃１）〜ΔＴ３０（＃４）の平均値ΔＴ３０ａｖｅ　を算出した後、ステップ２０７に進み、各気筒の第２の気筒間ばらつき値ＤＥＶ２（＃ｉ）を次式により算出する。
ＤＥＶ２（＃ｉ）＝｛ΔＴ３０（＃ｉ）−ΔＴ３０ａｖｅ　｝／ΔＴ３０ａｖｅ
【０１０４】
［第２の気筒間ばらつき補正ルーチン］
図１４に示す第２の気筒間ばらつき補正ルーチンは、図３のステップ１１０で起動されるサブルーチンである。本ルーチンは、各気筒の回転変動ΔＴ３０（＃ｉ）に基づいて第２の気筒間ばらつき値ＤＥＶ２を算出した場合の第２の気筒間ばらつき補正として、各気筒の第２の気筒間ばらつき値ＤＥＶ２に基づいて各気筒毎に燃料噴射時間（燃料噴射量）を補正することで、気筒間の空燃比ばらつきを補正するものであり、特許請求の範囲でいう第２の気筒間ばらつき補正手段としての役割を果たす。
【０１０５】
本ルーチンが起動されると、まず、ステップ５０１で、各気筒の第２の気筒間ばらつき値ＤＥＶ２（＃ｉ）を読み込んだ後、ステップ５０２に進み、図１５に示す特性の燃料噴射時間の基本補正量ＫＴＡＵ１のマップを検索して、各気筒毎に第２の気筒間ばらつき値ＤＥＶ２（＃ｉ）に応じた基本補正量ＫＴＡＵ１（＃ｉ）を算出する。
【０１０６】
図１５の基本補正量ＫＴＡＵ１のマップは、第２の気筒間ばらつき値ＤＥＶ２（＃ｉ）の値が大きくなるほど基本補正量ＫＴＡＵ１が小さくなるように設定されているが、ＤＥＶ２（＃ｉ）が０付近の所定領域では、基本補正量ＫＴＡＵ１＝１．０に設定され、燃料噴射時間を補正しない。
【０１０７】
この後、ステップ５０３に進み、エンジン回転速度ＮＥと吸入空気量ＧＡを読み込んだ後、ステップ５０４に進み、図１６に示す補正係数ＫＴＡＵ２のマップを検索して、各気筒毎に現在のエンジン運転状態（例えばエンジン回転速度ＮＥと吸入空気量ＧＡ）に応じた補正係数ＫＴＡＵ２（＃ｉ）を算出する。
【０１０８】
エンジン回転速度ＮＥが高くなると、慣性力が大きくなって回転変動ΔＴ３０が小さくなることを考慮して、図１６の補正係数ＫＴＡＵ２のマップは、エンジン回転速度ＮＥが高くなるほど補正係数ＫＴＡＵ２が大きくなるように設定されている。
【０１０９】
この後、ステップ５０５に進み、各気筒の基本補正量ＫＴＡＵ１（＃ｉ）に補正係数ＫＴＡＵ２（＃ｉ）を乗算して、各気筒の燃料噴射時間補正係数ＫＴＡＵ（＃ｉ）を求める。
ＫＴＡＵ（＃ｉ）＝ＫＴＡＵ１（＃ｉ）×ＫＴＡＵ２（＃ｉ）
【０１１０】
そして、次のステップ５０６で、補正前の全気筒の平均燃料噴射時間ＴＡＵに各気筒の燃料噴射時間補正係数ＫＴＡＵ（＃ｉ）を乗算して、各気筒の最終燃料噴射時間ＴＡＵ（＃ｉ）を求める。
ＴＡＵ（＃ｉ）＝ＴＡＵ×ＫＴＡＵ（＃ｉ）
以上の処理により、各気筒の第２の気筒間ばらつき値ＤＥＶ２に応じて各気筒の燃料噴射量を補正することで、気筒間の空燃比ばらつきを小さくする。
【０１１１】
以上説明した本実施形態（１）の気筒間ばらつき補正の実行例を図１７に示すタイムチャートを用いて説明する。
気筒間ばらつき補正実行条件が成立して補正実行フラグがオンされると、まず、エアフロメータ１４で検出した吸入空気量に基づいて各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃１）〜ＤＥＶ１（＃４）を算出する。そして、第１の気筒間ばらつき補正では、各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃１）〜ＤＥＶ１（＃４）に基づいて各気筒の点火時期補正量ＦＡＯＰ（＃１）〜ＦＡＯＰ（＃４）を算出し、これらの点火時期補正量ＦＡＯＰ（＃１）〜ＦＡＯＰ（＃４）を用いて各気筒の点火時期を補正することで気筒間のトルクばらつきを補正する。
【０１１２】
この後、第１の気筒間ばらつき補正で点火時期が補正されてから（点火時期補正量ＦＡＯＰが変更されてから）、各気筒の燃焼状態が安定するのに必要な所定時間ＫＣＤＥＶが経過した後、クランク角センサ２６の出力信号に基づいて算出した回転変動ΔＴ３０（＃ｉ）に基づいて各気筒の第２の気筒間ばらつき値ＤＥＶ２（＃１）〜ＤＥＶ２（＃４）を算出する。そして、第２の気筒間ばらつき補正では、各気筒の第２の気筒間ばらつき値ＤＥＶ２（＃１）〜ＤＥＶ２（＃４）に基づいて各気筒の燃料噴射時間補正係数ＫＴＡＵ（＃１）〜ＫＴＡＵ（＃４）を算出し、これらの燃料噴射時間補正係数ＫＴＡＵ（＃１）〜ＫＴＡＵ（＃４）を用いて各気筒の燃料噴射時間を補正することで気筒間の空燃比ばらつきを補正する。
【０１１３】
以上の処理により、各気筒の図示平均有効圧力をほぼ均等にして回転変動の発生を抑えることができ、ドライバビリティを向上させることができると共に、各気筒の空燃比をほぼ均等にして排出ガスの空燃比を触媒２３の浄化ウインド内に制御するとができ、排気エミッションを低減することができる。
【０１１４】
以上説明した本実施形態（１）では、気筒間のトルクばらつきの補正と気筒間の空燃比ばらつきの補正を、第１の気筒間ばらつき補正と第２の気筒間ばらつき補正とに分けて行うことができるので、可変吸気バルブ制御による吸入空気量制御の低負荷時のように、気筒間の吸入空気量ばらつきが大きくなって気筒間のトルクばらつきや空燃比ばらつきが大きくなる場合でも、気筒間のトルクばらつき補正と気筒間の空燃比ばらつき補正を両立させて、気筒間のトルクばらつきと空燃比ばらつきを両方とも低減させることができる。
【０１１５】
ところで、可変吸気バルブ制御による吸入空気量制御の低負荷時のように、吸入空気量ばらつきが大きい場合（気筒間のトルクばらつきや空燃比ばらつきが大きい場合）に、第１の気筒間ばらつき補正で気筒間の空燃比ばらつきを補正すると、気筒間のトルクばらつきが大きいために、各気筒の回転変動が干渉した状態で、第２の気筒間ばらつき値を算出する必要があるため、各気筒の回転変動ΔＴ３０（＃ｉ）に基づいた第２の気筒間ばらつき値ＤＥＶ２の算出精度が低下して、第２の気筒間ばらつき補正の補正精度が低下する。
【０１１６】
その点、本実施形態（１）では、第１の気筒間ばらつき補正で気筒間のトルクばらつきを補正し、第２の気筒間ばらつき補正で気筒間の空燃比ばらつきを補正するようにしているので、各気筒の回転変動ΔＴ３０（＃ｉ）に基づいて第２の気筒間ばらつき値ＤＥＶ２を算出しても、その算出精度の低下を防止することができて、第２の気筒間ばらつき補正の補正精度の低下を防止することができ、気筒間のトルクばらつき補正と気筒間の空燃比ばらつき補正をより効果的に両立させることができる。
【０１１７】
更に、本実施形態（１）では、第１の気筒間ばらつき補正で補正量が変更されてから所定時間ＫＣＤＥＶが経過するまで第２の気筒間ばらつき値ＤＥＶ２の算出を禁止するようにしたので、第１の気筒間ばらつき補正で補正量が変更された直後で各気筒の燃焼状態が変化している期間に第２の気筒間ばらつき値ＤＥＶ２を算出することを避けて、第１の気筒間ばらつき補正で補正量が変更されてから所定時間ＫＣＤＥＶが経過して各気筒の燃焼状態が安定するのを待ってから第２の気筒間ばらつき値ＤＥＶ２を算出することができ、第２の気筒間ばらつき値ＤＥＶ２の算出精度、ひいては第２の気筒間ばらつき補正の補正精度を向上させることができる。
【０１１８】
また、本実施形態（１）では、第１の気筒間ばらつき補正によってエンジン１１のトルクや空燃比が安定した場合には、第１の気筒間ばらつき補正によって気筒間のトルクばらつきや気筒間の空燃比ばらつきが小さくなったため、第２の気筒間ばらつき補正を実行する必要がないと判断して、第２の気筒間ばらつき推定及び第２の気筒間ばらつき補正を省略するようにしたので、無駄に第２の気筒間ばらつき推定や第２の気筒間ばらつき補正を実行せずに済む。
【０１１９】
《実施形態（２）》
上記実施形態（１）では、エアフロメータ１４で検出した吸入空気量に基づいて第１の気筒間ばらつき値ＤＥＶ１を各気筒毎に算出したが、図１８乃至図２２に示す本発明の実施形態（２）は、吸気管圧力センサ１８で検出した吸気管圧力に基づいて第１の気筒間ばらつき値ＤＥＶ１を各気筒毎に算出するようにしたものである。
【０１２０】
［第１の気筒間ばらつき推定ルーチン］
本実施形態（２）でＥＣＵ２７が実行する図１８に示す第１の気筒間ばらつき推定ルーチンは、所定周期（例えば４ｍｓ）で繰り返し実行される。本ルーチンが起動されると、まず、ステップ６０１で、吸気管圧力センサ１８のフィルタ処理後の出力電圧ＶＭＡＰを読み込んだ後、ステップ６０２に進み、図２２に示す特性の吸気管圧力瞬時値ＰＭＡＰのマップを検索して、現在の吸気管圧力センサ１８の出力電圧ＶＭＡＰに応じた吸気管圧力瞬時値ＰＭＡＰを算出する。
【０１２１】
この後、ステップ６０３に進み、クランク角カウンタＣＣＲＮＫのカウント値を読み込んだ後、ステップ６０４に進み、各気筒の吸気管圧力平均値ＰＰＭａｖｅ（＃ｉ）　を算出する。
【０１２２】
第１気筒＃１の吸気管圧力平均値ＰＰＭａｖｅ（＃１）　を算出する場合は、第１気筒＃１の吸気行程に対応する期間（ＣＣＲＮＫ＝１２〜１７の期間）の例えば６回分の吸気管圧力瞬時値ＰＭＡＰの平均値を算出する。
【０１２３】
第２気筒＃２の吸気管圧力平均値ＰＰＭａｖｅ（＃２）　を算出する場合は、第２気筒＃２の吸気行程に対応する期間（ＣＣＲＮＫ＝６〜１１の期間）の例えば６回分の吸気管圧力瞬時値ＰＭＡＰの平均値を算出する。
【０１２４】
第３気筒＃３の吸気管圧力平均値ＰＰＭａｖｅ（＃３）　を算出する場合は、第３気筒＃３の吸気行程に対応する期間（ＣＣＲＮＫ＝１８〜２３の期間）の例えば６回分の吸気管圧力瞬時値ＰＭＡＰの平均値を算出する。
【０１２５】
第４気筒＃４の吸気管圧力平均値ＰＰＭａｖｅ（＃４）　を算出する場合は、第４気筒＃４の吸気行程に対応する期間（ＣＣＲＮＫ＝０〜５の期間）の例えば６回分の吸気管圧力瞬時値ＰＭＡＰの平均値を算出する。
尚、吸気管圧力平均値ＰＰＭａｖｅ（＃１）　〜ＰＰＭａｖｅ（＃４）　は、吸入空気量とばらつき方向を合わせるためにマイナス値にしておく。
【０１２６】
エアフローメータ１４で検出した吸入空気量の波形（出力電圧ＶＡＦＭの波形）と同じように、吸気管圧力センサ１８で検出した吸気管圧力の波形（出力電圧ＶＭＡＰの波形）も、各気筒の吸気行程に対応した脈動波形、つまり、各気筒の吸入空気量を反映した脈動波形となる。従って、各気筒の吸気行程に対応する期間毎に吸気管圧力センサ１８で検出した吸気管圧力の平均値、極大値、極小値、振幅値、面積等を算出すれば、各気筒の吸入空気量を反映した脈動波形の特性値を算出することができるので、この特性値（例えば平均値）を用いれば、各気筒の吸入空気量ばらつきを反映した第１の気筒間ばらつき値ＤＥＶ１を算出することができる。
【０１２７】
この後、ステップ６０５に進み、上記ステップ６０４で算出した各気筒の吸気管圧力平均値ＰＰＭａｖｅ（＃ｉ）　をなまし処理して、各気筒の最終的な吸気管圧力平均値ＰＭａｖｅ（＃ｉ）　を求める。
ＰＭａｖｅ（＃ｉ）　＝ＰＭａｖｅ（＃ｉ）ｏｌｄ＋ｋ×｛ＰＰＭａｖｅ（＃ｉ）　−ＰＭａｖｅ（＃ｉ）ｏｌｄ｝
ここで、ＰＭａｖｅ（＃ｉ）ｏｌｄは、前回の吸気管圧力平均値である。
【０１２８】
そして、次のステップ６０６で、各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を次式により算出する。
ＤＥＶ１（＃ｉ）＝｛ＰＭａｖｅ（＃ｉ）　−ＡＶＥＰＭａｖｅ　｝／ＡＶＥＰＭａｖｅ
ここで、ＡＶＥＰＭａｖｅ　は全気筒の吸気管圧力平均値ＰＭａｖｅ（＃１）　〜ＰＭａｖｅ（＃４）　の平均値である。
【０１２９】
尚、図１８に示す第１の気筒間ばらつき推定ルーチンでは、各気筒の吸気管圧力平均値ＰＭａｖｅ（＃ｉ）　に基づいて第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を算出したが、各気筒の吸気管圧力極大値ＰＭｍａｘ（＃ｉ）　や吸気管圧力極小値ＰＭｍｉｎ（＃ｉ）　に基づいて第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を算出するようにしても良い。或は、各気筒の吸気管圧力振幅値ＰＭｗｉｄ（＃ｉ）　に基づいて第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を算出するようにしても良い。また、各気筒の吸気管圧力の面積を算出するようにしても良い。
【０１３０】
各気筒の吸気管圧力極大値ＰＭｍａｘ（＃ｉ）　に基づいて第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を算出する場合は、図１８のステップ６０１〜ステップ６０３の処理を実行した後、図１９に示すステップ６０４ａに進み、各気筒の吸気管圧力極大値ＰＰＭｍａｘ（＃ｉ）　を算出する。この場合、各気筒の吸気管圧力極大値ＰＰＭｍａｘ（＃１）　〜ＰＰＭｍａｘ（＃４）　として、それぞれ各気筒の吸気行程に対応する期間の吸気管圧力瞬時値ＰＭＡＰの最大値を算出する。
【０１３１】
この後、ステップ６０５ａに進み、各気筒の吸気管圧力極大値ＰＰＭｍａｘ（＃ｉ）　をなまし処理して、各気筒の最終的な吸気管圧力極大値ＰＭｍａｘ（＃ｉ）　を求める。
ＰＭｍａｘ（＃ｉ）　＝ＰＭｍａｘ（＃ｉ）ｏｌｄ＋ｋ×｛ＰＰＭｍａｘ（＃ｉ）　−ＰＭｍａｘ（＃ｉ）ｏｌｄ｝
ここで、ＰＭｍａｘ（＃ｉ）ｏｌｄは、前回の吸気管圧力極大値である。
【０１３２】
そして、次のステップ６０６ａで、各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を次式により算出する。
ＤＥＶ１（＃ｉ）＝｛ＰＭｍａｘ（＃ｉ）　−ＡＶＥＰＭｍａｘ　｝／ＡＶＥＰＭｍａｘ
ここで、ＡＶＥＰＭｍａｘ　は、全気筒の吸気管圧力極大値ＰＭｍａｘ（＃１）　〜ＰＭｍａｘ（＃４）　の平均値である。
【０１３３】
一方、各気筒の吸気管圧力極小値ＰＭｍｉｎ（＃ｉ）　に基づいて第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を算出する場合は、図１８のステップ６０１〜ステップ６０３の処理を実行した後、図２０に示すステップ６０４ｂに進み、各気筒の吸気管圧力極小値ＰＰＭｍｉｎ（＃ｉ）　を算出する。この場合、各気筒の吸気管圧力極小値ＰＰＭｍｉｎ（＃１）　〜ＰＰＭｍｉｎ（＃４）　として、それぞれ各気筒の吸気行程に対応する期間の吸気管圧力瞬時値ＰＭＡＰの最小値を算出する。尚、吸気管圧力極小値ＰＰＭｍｉｎ（＃１）　〜ＰＰＭｍｉｎ（＃４）　は、吸気管圧力とばらつき方向を合わせるためにマイナス値にしておく。
【０１３４】
この後、ステップ６０５ｂに進み、各気筒の吸気管圧力極小値ＰＰＭｍｉｎ（＃ｉ）　をなまし処理して、各気筒の最終的な吸気管圧力極小値ＰＭｍｉｎ（＃ｉ）　を求める。
ＰＭｍｉｎ（＃ｉ）　＝ＰＭｍｉｎ（＃ｉ）ｏｌｄ＋ｋ×｛ＰＰＭｍｉｎ（＃ｉ）　−ＰＭｍｉｎ（＃ｉ）ｏｌｄ｝
ここで、ＰＭｍｉｎ（＃ｉ）ｏｌｄは、前回の吸気管圧力極小値である。
【０１３５】
この後、ステップ６０６ｂに進み、各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を次式により算出する。
ＤＥＶ１（＃ｉ）＝｛ＰＭｍｉｎ（＃ｉ）　−ＡＶＥＰＭｍｉｎ　｝／ＡＶＥＰＭｍｉｎ
ここで、ＡＶＥＰＭｍｉｎ　は、全気筒の吸気管圧力極小値ＰＭｍｉｎ（＃１）　〜ＰＭｍｉｎ（＃４）　の平均値である。
【０１３６】
また、各気筒の吸気管圧力振幅値ＰＭｗｉｄ（＃ｉ）　に基づいて第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を算出する場合は、図１８のステップ６０１〜ステップ６０３の処理を実行した後、図２１に示すステップ６０４ｃに進み、各気筒の吸気管圧力極大値ＰＰＭｍａｘ（＃ｉ）　を算出した後、ステップ６０５ｃに進み、各気筒の吸気管圧力極小値ＰＰＭｍｉｎ（＃ｉ）　を算出する。
【０１３７】
この後、ステップ６０６ｃに進み、各気筒の吸気管圧力振幅値ＰＰＭｗｉｄ（＃ｉ）　を次式により算出する。
ＰＰＭｗｉｄ（＃ｉ）　＝ＰＰＭｍａｘ（＃ｉ）　−ＰＰＭｍｉｎ（＃ｉ）
【０１３８】
この後、ステップ６０７ｃに進み、各気筒の吸気管圧力振幅値ＰＰＭｗｉｄ（＃ｉ）　をなまし処理して、各気筒の最終的な吸気管圧力振幅値ＰＭｗｉｄ（＃ｉ）　を求める。
ＰＭｗｉｄ（＃ｉ）　＝ＰＭｗｉｄ（＃ｉ）ｏｌｄ＋ｋ×｛ＰＰＭｗｉｄ（＃ｉ）　−ＰＭｗｉｄ（＃ｉ）ｏｌｄ｝
ここで、ＰＭｗｉｄ（＃ｉ）ｏｌｄは、前回の吸気管圧力振幅値である。
【０１３９】
そして、次のステップ６０８ｃで、各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を次式により算出する。
ＤＥＶ１（＃ｉ）＝｛ＰＭｗｉｄ（＃ｉ）　−ＡＶＥＰＭｗｉｄ　｝／ＡＶＥＰＭｗｉｄ
ここで、ＡＶＥＰＭｗｉｄ　は、全気筒の吸気管圧力振幅値ＰＭｗｉｄ（＃１）　〜ＰＭｗｉｄ（＃４）　の平均値である。
【０１４０】
尚、吸気管圧力平均値ＰＭａｖｅ（＃ｉ）　、吸気管圧力極大値ＰＭｍａｘ（＃ｉ）　、吸気管圧力極小値ＰＭｍｉｎ（＃ｉ）　、吸気管圧力振幅値ＰＭｗｉｄ（＃ｉ）　のうちの２つ以上に基づいて第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を算出するようにしても良い。
【０１４１】
《実施形態（３）》
一般に、エアフローメータ１４は、スロットルバルブ１５よりも上流側に配置され、吸気管圧力センサ１８は、スロットルバルブ１５よりも下流側に配置されている。スロットルバルブ１５が全開位置から閉じられたときに、スロットルバルブ１５の上流側では吸気脈動が小さくなるため、スロットルバルブ１５の上流側に配置されたエアフローメータ１４の出力に基づいて第１の気筒間ばらつき値ＤＥＶ１を算出すると、スロットルバルブ１５が閉じられたときに、第１の気筒間ばらつき値ＤＥＶ１の算出精度が低下するおそれがある。
【０１４２】
そこで、図２３に示す本発明の実施形態（３）では、スロットル開度ＴＡが所定開度ＫＴＡよりも小さいときに、吸気管圧力センサ１８で検出した吸気管圧力の極小値ＰＭｍｉｎ（＃ｉ）　に基づいて第１の気筒間ばらつき値ＤＥＶ１を算出することで、スロットルバルブ１５が閉じられたときの第１の気筒間ばらつき値ＤＥＶ１の算出精度を確保するようにしている。
【０１４３】
［第１の気筒間ばらつき推定ルーチン］
本実施形態（３）では、図２３に示す第１の気筒間ばらつき推定ルーチンを実行する。本ルーチンが起動されると、まず、ステップ７０１で、クランク角カウンタＣＣＲＮＫのカウント値を読み込んだ後、ステップ７０２に進み、スロットル開度ＴＡが所定開度ＫＴＡよりも小さいか否かによって、スロットルバルブ１５が閉じられているか否かを判定する。尚、吸気管圧力ＰＭ（例えば全気筒の平均吸気管圧力）が所定圧力ＫＰＭ（例えば大気圧）よりも小さいか否かによってスロットルバルブ１５が閉じられているか否かを判定するようにしても良い。
【０１４４】
スロットル開度ＴＡが所定開度ＫＴＡよりも小さい（又は吸気管圧力ＰＭが所定圧力ＫＰＭよりも小さい）と判定された場合には、ステップ７０３〜７０７の処理を実行し、まず、吸気管圧力センサ１８の出力電圧ＶＭＡＰに応じた吸気管圧力瞬時値ＰＭＡＰを算出する（ステップ７０３、７０４）。
【０１４５】
この後、各気筒の吸気管圧力極小値ＰＰＭｍｉｎ（＃ｉ）　を算出し、これをなまし処理して各気筒の最終的な吸気管圧力極小値ＰＭｍｉｎ（＃ｉ）　を求めた後、これら各気筒の吸気管圧力極小値ＰＭｍｉｎ（＃ｉ）　に基づいて各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を算出する（ステップ７０５〜７０７）。
【０１４６】
一方、上記ステップ７０２で、スロットル開度ＴＡが所定開度ＫＴＡ以上（又は吸気管圧力ＰＭが所定圧力ＫＰＭ以上）と判定された場合、つまり、スロットルバルブ１５が全開位置又はその付近に制御されている場合には、ステップ７０６〜７１２の処理を実行し、まず、エアフロメータ１４の出力電圧ＶＡＦＭに応じた吸入空気量瞬時値ＧＡＦＭを算出する（ステップ７０８、７０９）。
【０１４７】
この後、各気筒の吸入空気量極大値ＧＧＡｍａｘ（＃ｉ）　を算出し、これをなまし処理して各気筒の最終的な吸入空気量極大値ＧＡｍａｘ（＃ｉ）　を求め、これら各気筒の吸入空気量極大値ＧＡｍａｘ（＃ｉ）　に基づいて各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を算出する（ステップ７１０〜７１２）。
【０１４８】
尚、本ルーチンでは、スロットル開度ＴＡが所定開度ＫＴＡ以上（又は吸気管圧力ＰＭが所定圧力ＫＰＭ以上）と判定された場合に、各気筒の吸入空気量極大値ＧＡｍａｘ（＃ｉ）　に基づいて各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を算出するようにしたが、これに限定されず、吸入空気量平均値ＧＡａｖｅ（＃ｉ）　、吸入空気量極大値ＧＡｍａｘ（＃ｉ）　、吸入空気量極小値ＧＡｍｉｎ（＃ｉ）　、吸入空気量振幅値ＧＡｗｉｄ（＃ｉ）　のうちの１つ又は２つ以上に基づいて第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を算出するようにしても良い。或は、吸気管圧力平均値ＰＭａｖｅ（＃ｉ）　、吸気管圧力極大値ＰＭｍａｘ（＃ｉ）　、吸気管圧力極小値ＰＭｍｉｎ（＃ｉ）　、吸気管圧力振幅値ＰＭｗｉｄ（＃ｉ）　のうちの２つ以上に基づいて第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を算出するようにしても良い。尚、吸気管圧力平均値ＰＭａｖｅ（＃ｉ）　の代わりに、各気筒の吸気管圧力の面積を算出するようにしても良い。
【０１４９】
以上説明した本実施形態（３）では、スロットル開度ＴＡが所定開度ＫＴＡよりも小さい（又は吸気管圧力ＰＭが所定圧力ＫＰＭよりも小さい）場合には、スロットルバルブ１５の下流側に配置された吸気管圧力センサ１８で検出した吸気管圧力極小値ＰＭｍｉｎ（＃ｉ）　に基づいて第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を算出するようにしたので、常にスロットルバルブ１５の上流側に配置されたエアフローメータ１４の出力に基づいて第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を算出する場合に比べて、スロットルバルブ１５が閉じられたときの第１の気筒間ばらつき値（＃ｉ）の算出精度を向上させることができる。しかも、スロットルバルブ１５が閉じられたときは、各気筒への空気吸入によって吸気管圧力が負圧側に振れるので、吸気管圧力極小値ＰＭｍｉｎ（＃ｉ）　を用いることによって第１の気筒間ばらつき値（＃ｉ）の算出精度をより高めることができる。
【０１５０】
《実施形態（４）》
前記実施形態（１）では、回転変動に基づいて第２の気筒間ばらつき値ＤＥＶ２を各気筒毎に算出するようにしたが、図２４乃至図２６に示す本発明の実施形態（４）では、空燃比に基づいて第２の気筒間ばらつき値ＤＥＶ２を各気筒毎に算出するようにしている。
【０１５１】
本実施形態（４）では、図２４に示す第２の気筒間ばらつき推定ルーチンと図２６に示す第２の気筒間ばらつき補正ルーチンを実行する。
【０１５２】
［第２の気筒間ばらつき推定ルーチン］
図２４に示す第２の気筒間ばらつき推定ルーチンは、空燃比センサ２４で検出した空燃比に基づいて第２の気筒間ばらつき値ＤＥＶ２を各気筒毎に次のようにして算出する。
【０１５３】
本ルーチンが起動されると、まず、ステップ８０１で、空燃比センサ２４の出力ＡＦを読み込んだ後、ステップ８０２に進み、クランク角カウンタＣＣＲＮＫのカウント値を読み込む。
【０１５４】
この後、ステップ８０３に進み、エンジン１１から排出された排出ガスが空燃比センサ２４で検出されるまでに要する排気系の遅れ時間ＤＥＬＹを算出する。この排気系の遅れ時間ＤＥＬＹは、エンジン運転状態（例えばエンジン回転速度ＮＥと吸入空気量ＧＡ）に応じて変化するため、図２５に示す排気系の遅れ時間ＤＥＬＹのマップを検索して、現在のエンジン運転状態（例えばエンジン回転速度ＮＥと吸入空気量ＧＡ）に応じた遅れ時間ＤＥＬＹを算出する。
【０１５５】
そして、次のステップ８０４で、クランク角カウンタＣＣＲＮＫのカウント値と排気系の遅れ時間ＤＥＬＹとに基づいて各気筒の排気行程に対応する期間の排出ガスの空燃比ＡＦの平均値を算出することで、各気筒の空燃比平均値ＡＡＦ（＃ｉ）を算出する。
【０１５６】
この後、ステップ８０５に進み、上記ステップ８０４で算出した各気筒の空燃比平均値ＡＡＦ（＃ｉ）をなまし処理して各気筒の最終的な空燃比平均値ＡＦ（＃ｉ）を求める。
ＡＦ（＃ｉ）＝ＡＦ（＃ｉ）ｏｌｄ　＋ｋ×｛ＡＡＦ（＃ｉ）−ＡＦ（＃ｉ）ｏｌｄ　｝
ここで、ＡＦ（＃ｉ）ｏｌｄ　は、前回の空燃比平均値である。
【０１５７】
この後、ステップ８０６に進み、全気筒の空燃比平均値ＡＦ（＃１）〜ＡＦ（＃４）の平均値ＡＦａｖｅ　を算出した後、ステップ８０７に進み、各気筒の第２の気筒間ばらつき値ＤＥＶ２（＃ｉ）を次式により算出する。
【０１５８】
ＤＥＶ２（＃ｉ）＝｛ＡＦ（＃ｉ）−ＡＦａｖｅ　｝／ＡＦａｖｅ
［第２の気筒間ばらつき補正ルーチン］
図２６に示す第２の気筒間ばらつき補正ルーチンは、各気筒の空燃比に基づいて第２の気筒間ばらつき値ＤＥＶ２を算出した場合の第２の気筒間ばらつき補正として、各気筒の第２の気筒間ばらつき値ＤＥＶ２に基づいて各気筒毎に燃料噴射時間（燃料噴射量）を補正することで、気筒間の空燃比ばらつきを補正するものである。
【０１５９】
本ルーチンが起動されると、まず、ステップ９０１で、各気筒の第２の気筒間ばらつき値ＤＥＶ２（＃ｉ）を読み込んだ後、ステップ９０２に進み、各気筒の第２の気筒間ばらつき値ＤＥＶ２（＃ｉ）を用いて、各気筒の燃料噴射時間補正係数ＫＴＡＵ１（＃ｉ）を次式により算出する。
ＫＴＡＵ（＃ｉ）＝ＤＥＶ２（＃ｉ）＋１
【０１６０】
この後、ステップ９０３に進み、補正前の全気筒の平均燃料噴射時間ＴＡＵに各気筒の燃料噴射時間補正係数ＫＴＡＵ（＃ｉ）を乗算して、各気筒の最終燃料噴射時間ＴＡＵ（＃ｉ）を求める。
ＴＡＵ（＃ｉ）＝ＴＡＵ×ＫＴＡＵ（＃ｉ）
【０１６１】
以上の処理により、各気筒の第２の気筒間ばらつき値ＤＥＶ２に応じて各気筒の燃料噴射量を補正することで（図１７の括弧内参照）、気筒間の空燃比ばらつきを小さくする。
【０１６２】
以上説明した本実施形態（４）のようにしても、前記実施形態（１）と同様の効果を得ることができる。
【０１６３】
《実施形態（５）》
上記各実施形態（１）〜（４）では、第１の気筒間ばらつき補正で各気筒毎に点火時期を補正することで気筒間のトルクばらつきを補正し、第２の気筒間ばらつき補正で各気筒毎に燃料噴射時間（燃料噴射量）を補正することで気筒間の空燃比ばらつきを補正するようにしたが、これとは逆に、図２７乃至図３１に示す本発明の実施形態（５）では、第１の気筒間ばらつき補正で各気筒毎に燃料噴射時間（燃料噴射量）を補正することで気筒間の空燃比ばらつきを補正し、第２の気筒間ばらつき補正で各気筒毎に点火時期を補正することで気筒間のトルクばらつきを補正するようにしている。
【０１６４】
本実施形態（５）では、図２７に示す第１の気筒間ばらつき補正ルーチンと、図２８に示す第２の気筒間ばらつき補正ルーチンを実行する。
【０１６５】
［第１の気筒間ばらつき補正ルーチン］
図２７に示す第１の気筒間ばらつき補正ルーチンは、各気筒の第１の気筒間ばらつき値ＤＥＶ１に基づいて各気筒毎に燃料噴射時間（燃料噴射量）を補正することで、気筒間の空燃比ばらつきを補正するものである。
【０１６６】
本ルーチンが起動されると、まず、ステップ１００１で、各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を読み込んだ後、ステップ１００２に進み、各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を用いて、各気筒の燃料噴射時間補正係数ＦＴＡＵ１（＃ｉ）を次式により算出する。
ＦＴＡＵ（＃ｉ）＝ＤＥＶ１（＃ｉ）＋１
【０１６７】
この後、ステップ１００３に進み、補正前の全気筒の平均燃料噴射時間ＴＡＵに各気筒の燃料噴射時間補正係数ＦＴＡＵ（＃ｉ）を乗算して、各気筒の最終燃料噴射時間ＴＡＵ（＃ｉ）を求める。
ＴＡＵ（＃ｉ）＝ＴＡＵ×ＦＴＡＵ（＃ｉ）
以上の処理により、各気筒の第１の気筒間ばらつき値ＤＥＶ１に応じて各気筒の燃料噴射量を補正することで、気筒間の空燃比ばらつきを小さくする。
【０１６８】
［第２の気筒間ばらつき補正ルーチン］
図２８に示す第２の気筒間ばらつき補正ルーチンは、各気筒の回転変動に基づいて第２の気筒間ばらつき値ＤＥＶ２を算出した場合の第２の気筒間ばらつき補正として、各気筒の第２の気筒間ばらつき値ＤＥＶ２に基づいて各気筒毎に点火時期を補正することで、気筒間のトルクばらつきを補正するものである。
【０１６９】
本ルーチンが起動されると、まず、ステップ１１０１で、各気筒の第２の気筒間ばらつき値ＤＥＶ２（＃ｉ）を読み込んだ後、ステップ１１０２に進み、各気筒の第２の気筒間ばらつき値ＤＥＶ２（＃１）〜ＤＥＶ２（＃４）のうちの最小値ＤＥＶ２ｍｉｎ　を選択する。
【０１７０】
そして、次のステップ１１０３で、図２９に示す特性の点火時期の基本補正量ＫＡＯＰ１のマップを検索して、各気筒毎に第２の気筒間ばらつき値ＤＥＶ２（＃ｉ）と最小値ＤＥＶ２ｍｉｎ　との差に応じた基本補正量ＫＡＯＰ１（＃ｉ）を算出する。
【０１７１】
この後、ステップ１１０４に進み、エンジン回転速度ＮＥと吸入空気量ＧＡを読み込んだ後、ステップ１１０５に進み、図３０に示す補正係数ＫＡＯＰ２のマップを検索して、各気筒毎に現在のエンジン運転状態（例えばエンジン回転速度ＮＥと吸入空気量ＧＡ）に応じた補正係数ＫＡＯＰ２（＃ｉ）を算出する。
【０１７２】
この後、ステップ１１０６に進み、各気筒の基本補正量ＫＡＯＰ１（＃ｉ）に補正係数ＫＡＯＰ２（＃ｉ）を乗算して各気筒の点火時期補正量ＫＡＯＰ（＃ｉ）を求める。
ＫＡＯＰ（＃ｉ）＝ＫＡＯＰ１（＃ｉ）×ＫＡＯＰ２（＃ｉ）
そして、次のステップ１１０７で、補正前の全気筒の平均点火時期ＡＯＰに各気筒の点火時期補正量ＫＡＯＰ（＃ｉ）を加算して、各気筒の最終点火時期ＡＯＰ（＃ｉ）を求める。
ＡＯＰ（＃ｉ）＝ＡＯＰ＋ＫＡＯＰ（＃ｉ）
【０１７３】
以上の処理により、各気筒の第２の気筒間ばらつき値ＤＥＶ２に応じて各気筒の点火時期を遅角補正してトルクを下げることで、気筒間のトルクばらつきを小さくする。尚、点火時期の進角側に余裕がある場合は、点火時期の進角補正によるトルクアップと、遅角補正によるトルクダウンを両方とも利用して気筒間のトルクばらつきを小さくするようにしても良い。
【０１７４】
以上説明した本実施形態（５）では、図３１のタイムチャートに示すように、第１の気筒間ばらつき補正では、各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃１）〜ＤＥＶ１（＃４）に基づいて各気筒の燃料噴射時間補正係数ＦＴＡＵ（＃１）〜ＦＴＡＵ（＃４）を算出し、これらの燃料噴射時間補正係数ＦＴＡＵ（＃１）〜ＦＴＡＵ（＃４）を用いて各気筒の燃料噴射時間を補正することで気筒間の空燃比ばらつきを補正する。
【０１７５】
この後、第２の気筒間ばらつき補正では、各気筒の第２の気筒間ばらつき値ＤＥＶ２（＃１）〜ＤＥＶ２（＃４）に基づいて各気筒の点火時期補正量ＫＡＯＰ（＃１）〜ＫＡＯＰ（＃４）を算出し、これらの点火時期補正量ＫＡＯＰ（＃１）〜ＫＡＯＰ（＃４）を用いて各気筒の点火時期を補正することで気筒間のトルクばらつきを補正する。
【０１７６】
可変吸気バルブ制御による吸入空気量制御の中・高負荷時やスロットル制御による吸入空気量制御時のように気筒間の吸入空気量ばらつきが比較的小さい場合（気筒間のトルクばらつきや空燃比ばらつきが小さい場合）は、第１の気筒間ばらつき補正で気筒間の空燃比ばらつきを補正しても、気筒間のトルクばらつきが小さいために、各気筒の回転変動が干渉していない状態で、第２の気筒間ばらつき値ＤＥＶ２を算出することができるので、各気筒の回転変動に基づいて第２の気筒間ばらつき値ＤＥＶ２を算出しても、第２の気筒間ばらつき値ＤＥＶを精度良く算出することができ、第２の気筒間ばらつき補正によって気筒間のトルクばらつきを精度良く補正することができる。本実施形態（５）は、特に、空燃比制御（排気エミッション低減）を優先しながらトルク変動も抑制したい場合に有効である。
【０１７７】
《実施形態（６）》
図３２に示す本発明の実施形態（６）では、第１の気筒間ばらつき補正で各気筒毎に点火時期を補正することで気筒間のトルクばらつきを補正し、更に、第２の気筒間ばらつき補正で各気筒の点火時期を再補正するようにしている。
本実施形態（６）では、上述した図１０に示す第１の気筒間ばらつき補正ルーチンと図２８に示す第２の気筒間ばらつき補正ルーチンを実行する。
【０１７８】
この場合、図３２のタイムチャートに示すように、第１の気筒間ばらつき補正では、各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃１）〜ＤＥＶ１（＃４）に基づいて各気筒の点火時期補正量ＦＡＯＰ（＃１）〜ＦＡＯＰ（＃４）を算出し、これらの点火時期補正量ＦＡＯＰ（＃１）〜ＦＡＯＰ（＃４）を用いて各気筒の点火時期を補正することで気筒間のトルクばらつきを補正する。
【０１７９】
この後、第２の気筒間ばらつき補正で、各気筒の第２の気筒間ばらつき値ＤＥＶ２（＃１）〜ＤＥＶ２（＃４）に基づいて各気筒の点火時期補正量ＫＡＯＰ（＃１）〜ＫＡＯＰ（＃４）を算出し、これらの点火時期補正量ＫＡＯＰ（＃１）〜ＫＡＯＰ（＃４）を用いて、第１の気筒間ばらつき補正で補正した各気筒の点火時期を再補正する（図２８のステップ１１０７の括弧内参照）ことで、気筒間のトルクばらつきを更に精度良く補正する。
【０１８０】
可変吸気バルブ制御による吸入空気量制御の中・高負荷時やスロットル制御による吸入空気量制御時のように吸入空気量ばらつきが比較的小さい場合で、トルク変動の抑制（ドライバビリティ向上）を重視する場合は、本実施形態（６）のように、第１の気筒間ばらつき補正で各気筒の点火時期を補正することで気筒間のトルクばらつきを補正し、更に、第２の気筒間ばらつき補正で各気筒の点火時期を再補正するようにすれば、第１の気筒間ばらつき補正と第２の気筒間ばらつき補正の２段階で気筒間のトルクばらつきを補正することができるので、気筒間のトルクばらつきをより精度良く補正することができ、ドライバビリティ向上の効果を高めることができる。
【０１８１】
《実施形態（７）》
図３３に示す本発明の実施形態（７）では、第１の気筒間ばらつき補正で各気筒毎に燃料噴射時間（燃料噴射量）を補正することで気筒間の空燃比ばらつきを補正し、更に、第２の気筒間ばらつき補正で各気筒の燃料噴射時間を再補正するようにしている。
【０１８２】
本実施形態（７）では、上述した図２７に示す第１の気筒間ばらつき補正ルーチンと図１４に示す第２の気筒間ばらつき補正ルーチン（又は図２６に示す第２の気筒間ばらつき補正ルーチン）を実行する。
【０１８３】
この場合、図３３のタイムチャートに示すように、第１の気筒間ばらつき補正では、各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃１）〜ＤＥＶ１（＃４）に基づいて各気筒の燃料噴射時間補正係数ＦＴＡＵ（＃１）〜ＦＴＡＵ（＃４）を算出し、これらの燃料噴射時間補正係数ＦＴＡＵ（＃１）〜ＦＴＡＵ（＃４）を用いて各気筒の燃料噴射時間を補正することで気筒間の空燃比ばらつきを補正する。
【０１８４】
この後、第２の気筒間ばらつき補正で、各気筒の第２の気筒間ばらつき値ＤＥＶ２（＃１）〜ＤＥＶ２（＃４）に基づいて各気筒の燃料噴射時間補正係数ＫＴＡＵ（＃１）〜ＫＴＡＵ（＃４）を算出し、これらの燃料噴射時間補正係数ＫＴＡＵ（＃１）〜ＫＴＡＵ（＃４）を用いて、第１の気筒間ばらつき補正で補正した各気筒の燃料噴射時間を再補正する（図１４のステップ５０６の括弧内又は図２６のステップ９０３の括弧内参照）ことで、気筒間の空燃比ばらつきを更に精度良く補正する。
【０１８５】
可変吸気バルブ制御による吸入空気量制御の中・高負荷時やスロットル制御による吸入空気量制御時のように吸入空気量ばらつきが比較的小さい場合で、空燃比制御（排気エミッション低減）を重視する場合は、本実施形態（７）のように、第１の気筒間ばらつき補正で各気筒毎に燃料噴射時間を補正することで気筒間の空燃比ばらつきを補正し、更に、第２の気筒間ばらつき補正で各気筒の燃料噴射時間を再補正するようにすれば、第１の気筒間ばらつき補正と第２の気筒間ばらつき補正の２段階で気筒間の空燃比ばらつきを補正することができるので、気筒間の空燃比ばらつきをより精度良く補正することができ、排気エミッションを効果的に低減することができる。
【０１８６】
《実施形態（８）》
ところで、前記各実施形態で用いた吸気バルブ２８の可変バルブリフト機構３０は、全気筒の吸気バルブ２８のバルブリフト量（最大バルブリフト量と開弁期間）を一括して可変するように構成されているが、可変バルブリフト機構３０のモータ４１を各気筒の吸気行程毎に高速駆動して吸気バルブ２８のバルブリフト量を可変すれば、各気筒毎に吸入空気量を可変することができる。
【０１８７】
そこで、図３４乃至図３７に示す本発明の実施形態（８）では、吸気バルブ２８の可変バルブリフト機構３０を気筒別吸入空気可変手段として用い、第１の気筒間ばらつき補正では、可変バルブリフト機構３０により各気筒毎に吸気バルブリフト量を補正して各気筒毎に吸入空気量を補正することで気筒間の吸入空気量ばらつきを補正し、第２の気筒間ばらつき補正では、各気筒毎に燃料噴射時間（燃料噴射量）を補正することで気筒間の吸入燃料量ばらつきを補正するようにしている。
【０１８８】
本実施形態（８）では、図３４に示す第１の気筒間ばらつき補正ルーチンと、前述した図１４に示す第２の気筒間ばらつき補正ルーチン（又は図２６に示す第２の気筒間ばらつき補正ルーチン）を実行する。
【０１８９】
［第１の気筒間ばらつき補正ルーチン］
図３４に示す第１の気筒間ばらつき補正ルーチンが起動されると、まず、ステップ１２０１で、各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）を読み込んだ後、ステップ１２０２に進み、図３５に示す吸気バルブリフト量の基本補正量ＦＶＶＬ１のマップを検索して、各気筒毎に第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）に応じた基本補正量ＦＶＶＬ１（＃ｉ）を算出する。
【０１９０】
図３５の吸気バルブリフト量の基本補正量ＦＶＶＬ１のマップは、第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）の値が大きくなるほど基本補正量ＦＶＶＬ１が小さくなるように設定されているが、ＤＥＶ１（＃ｉ）が０付近の所定領域では、基本補正量ＦＶＶＬ１＝０に設定され、吸気バルブリフト量を補正しない。
【０１９１】
この後、ステップ１２０３に進み、エンジン回転速度ＮＥと吸入空気量ＧＡを読み込んだ後、ステップ１２０４に進み、図３６に示す補正係数ＦＶＶＬ２のマップを検索して、各気筒毎に現在のエンジン運転状態（例えばエンジン回転速度ＮＥと吸入空気量ＧＡ）に応じた補正係数ＦＶＶＬ２（＃ｉ）を算出する。
【０１９２】
吸入空気量ＧＡが少なくなると（吸気バルブリフト量が小さくなると）、バルブリフト量補正の影響を受けやすくなることを考慮して、図３６の補正係数ＦＶＶＬ２のマップは、吸入空気量ＧＡが少なくなるほど補正係数ＦＶＶＬ２が小さくなるように設定されている。
【０１９３】
そして、次のステップ１２０５で、各気筒の基本補正量ＦＶＶＬ１（＃ｉ）に補正係数ＦＶＶＬ２（＃ｉ）を乗算して、各気筒のバルブリフト補正量ＦＶＶＬ（＃ｉ）を求める。
ＦＶＶＬ（＃ｉ）＝ＦＶＶＬ１（＃ｉ）×ＦＶＶＬ２（＃ｉ）
【０１９４】
この後、ステップ１２０６に進み、補正前の全気筒の平均バルブリフト量ＶＶＬに各気筒のバルブリフト補正量ＦＶＶＬ（＃ｉ）を加算して、最終目標バルブリフト量ＶＶＬＭを求める。
【０１９５】
この場合、クランク角カウンタＣＣＲＮＫ＝１２〜１７の期間、つまり、第１気筒＃１の吸気行程に対応する期間は、第１気筒＃１のバルブリフト補正量ＦＶＶＬ（＃１）を用いて、最終目標バルブリフト量ＶＶＬＭを次式により算出する。
ＶＶＬＭ＝ＶＶＬ＋ＦＶＶＬ（＃１）
クランク角カウンタＣＣＲＮＫ＝６〜１１の期間、つまり、第２気筒＃２の吸気行程に対応する期間は、第２気筒＃２のバルブリフト補正量ＦＶＶＬ（＃２）を用いて、最終目標バルブリフト量ＶＶＬＭを次式により算出する。
ＶＶＬＭ＝ＶＶＬ＋ＦＶＶＬ（＃２）
【０１９６】
クランク角カウンタＣＣＲＮＫ＝１８〜２３の期間、つまり、第３気筒＃３の吸気行程に対応する期間は、第３気筒＃３のバルブリフト補正量ＦＶＶＬ（＃３）を用いて、最終目標バルブリフト量ＶＶＬＭを次式により算出する。
ＶＶＬＭ＝ＶＶＬ＋ＦＶＶＬ（＃３）
【０１９７】
クランク角カウンタＣＣＲＮＫ＝０〜５の期間、つまり、第４気筒＃４の吸気行程に対応する期間は、第４気筒＃４のバルブリフト補正量ＦＶＶＬ（＃４）を用いて、最終目標バルブリフト量ＶＶＬＭを次式により算出する。
ＶＶＬＭ＝ＶＶＬ＋ＦＶＶＬ（＃４）
【０１９８】
この後、ステップ１２０７に進み、各気筒の吸気行程に対応して変化する最終目標バルブリフト量ＶＶＬＭに応じて吸気バルブ２８の可変バルブリフト機構３０のモータ４１を高速駆動して各気筒の吸気行程毎に吸気バルブリフト量を補正して吸入空気量を補正する。これにより、気筒間の吸入空気量ばらつきを補正する。
【０１９９】
また、本実施形態（８）では、図１４に示す第２の気筒間ばらつき補正ルーチン（又は図２６に示す第２の気筒間ばらつき補正ルーチン）を実行することで、各気筒の第２の気筒間ばらつき値ＤＥＶ２に基づいて各気筒毎に燃料噴射時間（燃料噴射量）を補正することで、気筒間の吸入燃料量ばらつきを補正する。
【０２００】
以上説明した本実施形態（８）では、図３７のタイムチャートに示すように、第１の気筒間ばらつき補正では、各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃１）〜ＤＥＶ１（＃４）に基づいて各気筒のバルブリフト補正量ＦＶＶＬ（＃１）〜ＦＶＶＬ（＃４）を算出し、これらのバルブリフト補正量ＦＶＶＬ（＃１）〜ＦＶＶＬ（＃４）を用いて、各気筒の吸気バルブリフト量を補正して各気筒毎に吸入空気量を補正することで気筒間の吸入空気量ばらつきを補正する。
【０２０１】
この後、第２の気筒間ばらつき補正では、各気筒の第２の気筒間ばらつき値ＤＥＶ２（＃１）〜ＤＥＶ２（＃４）に基づいて各気筒の燃料噴射時間補正係数ＫＴＡＵ（＃１）〜ＫＴＡＵ（＃４）を算出し、これらの燃料噴射時間補正係数ＫＴＡＵ（＃１）〜ＫＴＡＵ（＃４）を用いて、各気筒の燃料噴射時間を補正することで気筒間の吸入燃料量ばらつきを補正する。
【０２０２】
このようにすれば、第１の気筒間ばらつき補正と第２の気筒間ばらつき補正で、それぞれ気筒間の吸入空気量ばらつきと気筒間の吸入燃料量ばらつきを直接補正して、気筒間のトルクばらつきと気筒間の空燃比ばらつきを補正することができるので、点火時期の補正が不要となり、点火遅角による燃費の低下の問題を回避することができる。
【０２０３】
《実施形態（９）》
図３８乃至図４１に示す本発明の実施形態（９）の特徴は、第１の気筒間ばらつき補正で、可変バルブリフト機構３０により各気筒毎に吸気バルブリフト量を補正して各気筒毎に吸入空気量を補正することで気筒間の吸入空気量ばらつきを補正し、更に、第２の気筒間ばらつき補正で各気筒の吸気バルブリフト量を再補正することである。
【０２０４】
本実施形態（９）では、上述した図３４に示す第１の気筒間ばらつき補正ルーチンと、図３８に示す第２の気筒間ばらつき補正ルーチンを実行する。
【０２０５】
［第２気筒間ばらつき補正ルーチン］
図３８に示す第２の気筒間ばらつき補正ルーチンが起動されると、まず、ステップ１３０１で、各気筒の第２の気筒間ばらつき値ＤＥＶ２（＃ｉ）を読み込んだ後、ステップ１３０２に進み、図３９に示す吸気バルブリフト量の基本補正量ＫＶＶＬ１のマップを検索して、各気筒毎に第２の気筒間ばらつき値ＤＥＶ２（＃ｉ）に応じた基本補正量ＫＶＶＬ１（＃ｉ）を算出する。
【０２０６】
この後、ステップ１３０３に進み、エンジン回転速度ＮＥと吸入空気量ＧＡを読み込んだ後、ステップ１３０４に進み、図４０に示す補正係数ＫＶＶＬ２のマップを検索して、各気筒毎に現在のエンジン運転状態（例えばエンジン回転速度ＮＥと吸入空気量ＧＡ）に応じた補正係数ＫＶＶＬ２（＃ｉ）を算出する。
【０２０７】
この後、ステップ１３０５に進み、各気筒の基本補正量ＫＶＶＬ１（＃ｉ）に補正係数ＫＶＶＬ２（＃ｉ）を乗算して、各気筒のバルブリフト補正量ＫＶＶＬ（＃ｉ）を求める。
ＫＶＶＬ（＃ｉ）＝ＫＶＶＬ１（＃ｉ）×ＫＶＶＬ２（＃ｉ）
【０２０８】
そして、次のステップ１３０６で、各気筒のバルブリフト補正量ＫＶＶＬ（＃ｉ）を用いて、図３４に示す第１の気筒間ばらつき補正ルーチンで算出した最終目標バルブリフト量ＶＶＬＭ＝ＶＶＬ＋ＦＶＶＬ（＃ｉ）を再補正する。
【０２０９】
この場合、第１気筒＃１の吸気行程に対応する期間（ＣＣＲＮＫ＝１２〜１７の期間）は、第１気筒＃１のバルブリフト補正量ＫＶＶＬ（＃１）を用いて、最終目標バルブリフト量ＶＶＬＭを次式により算出する。
ＶＶＬＭ＝ＶＶＬ＋ＦＶＶＬ（＃１）＋ＫＶＶＬ（＃１）
【０２１０】
第２気筒＃２の吸気行程に対応する期間（ＣＣＲＮＫ＝６〜１１の期間）は、第２気筒＃２のバルブリフト補正量ＫＶＶＬ（＃２）を用いて、最終目標バルブリフト量ＶＶＬＭを次式により算出する。
ＶＶＬＭ＝ＶＶＬ＋ＦＶＶＬ（＃２）＋ＫＶＶＬ（＃２）
【０２１１】
第３気筒＃３の吸気行程に対応する期間（ＣＣＲＮＫ＝１８〜２３の期間）は、第３気筒＃３のバルブリフト補正量ＫＶＶＬ（＃３）を用いて、最終目標バルブリフト量ＶＶＬＭを次式により算出する。
ＶＶＬＭ＝ＶＶＬ＋ＦＶＶＬ（＃３）＋ＫＶＶＬ（＃３）
【０２１２】
第４気筒＃４の吸気行程に対応する期間（ＣＣＲＮＫ＝０〜５の期間）は、第４気筒＃４のバルブリフト補正量ＫＶＶＬ（＃４）を用いて、最終目標バルブリフト量ＶＶＬＭを次式により算出する。
ＶＶＬＭ＝ＶＶＬ＋ＦＶＶＬ（＃４）＋ＫＶＶＬ（＃４）
【０２１３】
この後、ステップ１３０７に進み、各気筒の吸気行程に対応して変化する最終目標バルブリフト量ＶＶＬＭに応じて可変バルブリフト機構３０のモータ４１を高速駆動して各気筒の吸気行程毎に吸気バルブリフト量を補正して吸入空気量を補正する。
【０２１４】
以上説明した本実施形態（９）では、図４１のタイムチャートに示すように、第１の気筒間ばらつき補正では、各気筒の第１の気筒間ばらつき値ＤＥＶ１（＃１）〜ＤＥＶ１（＃４）に基づいて各気筒のバルブリフト補正量ＦＶＶＬ（＃１）〜ＦＶＶＬ（＃４）を算出し、これらのバルブリフト補正量ＦＶＶＬ（＃１）〜ＦＶＶＬ（＃４）を用いて、各気筒の吸気バルブリフト量を補正して各気筒毎に吸入空気量を補正することで気筒間の吸入空気量ばらつきを補正する。
【０２１５】
この後、第２の気筒間ばらつき補正では、各気筒の第２の気筒間ばらつき値ＤＥＶ２（＃１）〜ＤＥＶ２（＃４）に基づいて各気筒のバルブリフト補正量ＫＶＶＬ（＃１）〜ＫＶＶＬ（＃４）を算出し、これらのバルブリフト補正量ＫＶＶＬ（＃１）〜ＫＶＶＬ（＃４）を用いて、第１の気筒間ばらつき補正で補正した各気筒の最終目標バルブリフト量ＶＶＬＭを再補正することで気筒間の吸入空気量ばらつきを更に精度良く補正する。
【０２１６】
気筒間の吸入燃料量ばらつきが非常に小さい場合（各気筒の燃料噴射弁２０の個体差が小さく、エバポガスパージ実行中でない場合）は、本実施形態（９）のように、第１の気筒間ばらつき補正で各気筒毎に吸気バルブリフト量を補正することで気筒間の吸入空気量ばらつきを補正し、更に、第２の気筒間ばらつき補正で各気筒の吸気バルブリフト量を再補正するようにすれば、第１の気筒間ばらつき補正と第２の気筒間ばらつき補正の２段階で気筒間の吸入空気量ばらつきを補正することができるので、気筒間の吸入空気量ばらつきをより精度良く補正することができ、気筒間のトルクばらつき補正と気筒間の空燃比ばらつき補正を両立させることができる。しかも、点火時期補正や燃料噴射量補正が不要となり、燃費の低下の問題を回避することができる。
【０２１７】
《実施形態（１０）》
次に、本発明の実施形態（１０）を図４２及び図４３を用いて説明する。本実施形態（１０）では、図４２に示すように、エンジン１１の各気筒に、それぞれ電磁アクチュエータ４２，４３（可変バルブ機構）が設けられ、各気筒の吸気バルブ２８と排気バルブ２９は、それぞれ電磁アクチュエータ４２，４３によって駆動される。従って、各気筒の吸気バルブ２８の電磁アクチュエータ４２を個別に制御して各気筒の吸気バルブリフト量を個別に可変すれば、各気筒毎に吸入空気量を可変することができる。これらの吸気バルブ２８の電磁アクチュエータ４２で気筒別吸入空気可変手段が構成されている。
【０２１８】
本実施形態（１０）は、第１の気筒間ばらつき補正では、吸気バルブ２８の電磁アクチュエータ４２により各気筒毎に吸気バルブリフト量を補正して各気筒毎に吸入空気量を補正することで気筒間の吸入空気量ばらつきを補正し、第２の気筒間ばらつき補正では、各気筒毎に燃料噴射時間（燃料噴射量）を補正することで気筒間の吸入燃料量ばらつきを補正するようにしている。
【０２１９】
本実施形態（１０）では、図４３に示す第１の気筒間ばらつき補正ルーチンと、前述した図１４に示す第２の気筒間ばらつき補正ルーチン（又は図２６に示す第２の気筒間ばらつき補正ルーチン）を実行する。
【０２２０】
［第１の気筒間ばらつき補正ルーチン］
図４３に示す第１の気筒間ばらつき補正ルーチンでは、各気筒毎に第１の気筒間ばらつき値ＤＥＶ１（＃ｉ）に応じた吸気バルブリフト量の基本補正量ＦＶＶＬ１（＃ｉ）を図３５のマップを用いて算出した後、各気筒毎に現在のエンジン運転状態（例えばエンジン回転速度ＮＥと吸入空気量ＧＡ）に応じた補正係数ＦＶＶＬ２（＃ｉ）を図３６のマップを用いて算出する（ステップ１４０１〜１４０４）。
【０２２１】
この後、ステップ１４０５に進み、各気筒の基本補正量ＦＶＶＬ１（＃ｉ）に補正係数ＦＶＶＬ２（＃ｉ）を乗算して、各気筒のバルブリフト補正量ＦＶＶＬ（＃ｉ）を求める。
ＦＶＶＬ（＃ｉ）＝ＦＶＶＬ１（＃ｉ）×ＦＶＶＬ２（＃ｉ）
【０２２２】
そして、次のステップ１４０６で、補正前の全気筒の平均バルブリフト量ＶＶＬに各気筒のバルブリフト補正量ＦＶＶＬ（＃ｉ）を加算して、各気筒の最終目標バルブリフト量ＶＶＬを求める。
ＶＶＬ（＃ｉ）＝ＶＶＬ＋ＦＶＶＬ（＃ｉ）
【０２２３】
このようにして算出した各気筒の最終目標バルブリフト量ＶＶＬに応じて各気筒の吸気バルブ２８の電磁アクチュエータ４２を個別に制御して各気筒毎に吸気バルブリフト量を補正して吸入空気量を補正することで、気筒間の吸入空気量ばらつきを補正する。
【０２２４】
また、本実施形態（１０）では、図１４に示す第２の気筒間ばらつき補正ルーチン（又は図２６に示す第２の気筒間ばらつき補正ルーチン）を実行することで、各気筒の第２の気筒間ばらつき値ＤＥＶ２に基づいて各気筒毎に燃料噴射時間（燃料噴射量）を補正することで、気筒間の吸入燃料量ばらつきを補正する。
以上説明した本実施形態（１０）の場合も、前記実施形態（８）と同様の効果を得ることができる。
【０２２５】
《実施形態（１１）》
図４４に示す本発明の実施形態（１１）では、第１の気筒間ばらつき補正で電磁アクチュエータ４２により各気筒毎に吸気バルブリフト量を補正して各気筒毎に吸入空気量を補正することで気筒間の吸入空気量ばらつきを補正し、更に、第２の気筒間ばらつき補正で各気筒の吸気バルブリフト量を再補正するようにしている。
本実施形態（１１）では、上述した図４３に示す第１の気筒間ばらつき補正ルーチンと、図４４に示す第２の気筒間ばらつき補正ルーチンを実行する。
【０２２６】
［第２気筒間ばらつき補正ルーチン］
図４４に示す第２の気筒間ばらつき補正ルーチンでは、各気筒毎に第２の気筒間ばらつき値ＤＥＶ２（＃ｉ）に応じた吸気バルブリフト量の基本補正量ＫＶＶＬ１（＃ｉ）を図３９のマップを用いて算出した後、各気筒毎に現在のエンジン運転状態（例えばエンジン回転速度ＮＥと吸入空気量ＧＡ）に応じた補正係数ＫＶＶＬ２（＃ｉ）を図４０のマップを用いて算出する（ステップ１５０１〜１５０４）。
【０２２７】
この後、ステップ１５０５に進み、各気筒の基本補正量ＫＶＶＬ１（＃ｉ）に補正係数ＫＶＶＬ２（＃ｉ）を乗算して、各気筒のバルブリフト補正量ＫＶＶＬ（＃ｉ）を求める。
ＫＶＶＬ（＃ｉ）＝ＫＶＶＬ１（＃ｉ）×ＫＶＶＬ２（＃ｉ）
【０２２８】
そして、次のステップ１５０６で、各気筒のバルブリフト補正量ＫＶＶＬ（＃ｉ）を用いて、図４３に示す第１の気筒間ばらつき補正ルーチンで算出した最終目標バルブリフト量ＶＶＬ（＃ｉ）＝ＶＶＬ＋ＦＶＶＬ（＃ｉ）を次式により再補正する。
ＶＶＬ（＃ｉ）＝ＶＶＬ＋ＦＶＶＬ（＃ｉ）＋ＫＶＶＬ（＃ｉ）
【０２２９】
以上説明した本実施形態（１１）の場合も、前記実施形態（９）と同様の効果を得ることができる。
【０２３０】
尚、上記各実施形態（１）〜（１１）の中から複数の気筒間ばらつき補正を組み合わせて実施するようにしても良く、例えば、エンジン運転中に、エンジン運転条件等に応じて上記各実施形態（１）〜（１１）で説明した気筒間ばらつき補正を切り換えて実行するようにしても良い。
【０２３１】
また、上記各実施形態（１）〜（１１）の気筒間ばらつき補正では、第１の気筒間ばらつき値ＤＥＶ１に基づいた第１の気筒間ばらつき補正と、第２の気筒間ばらつき値ＤＥＶ２に基づいた第２の気筒間ばらつき補正の２段階の補正を行うようにしたが、エンジン１１の各気筒毎に吸入空気量を可変する気筒別吸入空気可変手段（可変バルブリフト機構３０や電磁アクチュエータ４２）を備えたシステムでは、エンジン１１の吸入空気量と吸気管圧力のうちの少なくとも一方に基づいて気筒間ばらつき値ＤＥＶを算出し、その気筒間ばらつき値ＤＥＶに基づいて各気筒毎に吸入空気量を補正することで気筒間の吸入空気量ばらつきを補正するようにしても良い。このようにしても、気筒間の吸入空気量ばらつきを補正することができるので、気筒間のトルクばらつきや気筒間の空燃比ばらつきを補正することができる。
【０２３２】
また、上記各実施形態（１）〜（１１）では、可変吸気バルブ制御による吸入空気量制御を行うシステムに本発明を適用したが、スロットル制御による吸入空気量制御のみを行うシステムに本発明を適用しても良い。
【０２３３】
また、本発明の適用範囲は４気筒のエンジンに限定されず、５気筒以上又は３気筒以下の複数気筒エンジンンに本発明を適用しても良い。
【図面の簡単な説明】
【図１】本発明の実施形態（１）におけるエンジン制御システム全体の概略構成図
【図２】可変バルブリフト機構の正面図
【図３】実施形態（１）の気筒間ばらつき補正ベースルーチンの処理の流れを示すフローチャート
【図４】実施形態（１）の第１の気筒間ばらつき推定ルーチンの処理の流れを示すフローチャート
【図５】実施形態（１）の第１の気筒間ばらつき推定ルーチンの変形例（その１）の処理の流れの一部を示すフローチャート
【図６】実施形態（１）の第１の気筒間ばらつき推定ルーチンの変形例（その２）の処理の流れの一部を示すフローチャート
【図７】実施形態（１）の第１の気筒間ばらつき推定ルーチンの変形例（その３）の処理の流れの一部を示すフローチャート
【図８】エアフロメータの出力電圧ＶＡＦＭを吸入空気量瞬時値ＧＡＦＭに変換するマップを概念的に示す図
【図９】吸入空気量の脈動波形を示すタイムチャート
【図１０】実施形態（１）の第１の気筒間ばらつき補正ルーチンの処理の流れを示すフローチャート
【図１１】点火時期の基本補正量ＦＡＯＰ１のマップを概念的に示す図
【図１２】補正係数ＦＡＯＰ２のマップを概念的に示す図
【図１３】実施形態（１）の第２の気筒間ばらつき推定ルーチンの処理の流れを示すフローチャート
【図１４】実施形態（１）の第２の気筒間ばらつき補正ルーチンの処理の流れを示すフローチャート
【図１５】燃料噴射時間の基本補正量ＫＴＡＵ１のマップを概念的に示す図
【図１６】補正係数ＫＴＡＵ２のマップを概念的に示す図
【図１７】実施形態（１）の実行例を示すタイムチャート
【図１８】実施形態（２）の第１の気筒間ばらつき推定ルーチンの処理の流れを示すフローチャート
【図１９】実施形態（２）の第１の気筒間ばらつき推定ルーチンの変形例（その１）の処理の流れの一部を示すフローチャート
【図２０】実施形態（２）の第１の気筒間ばらつき推定ルーチンの変形例（その２）の処理の流れの一部を示すフローチャート
【図２１】実施形態（２）の第１の気筒間ばらつき推定ルーチンの変形例（その３）の処理の流れの一部を示すフローチャート
【図２２】吸気管圧力瞬時値ＰＭＡＰのマップを概念的に示す図
【図２３】実施形態（３）の第１の気筒間ばらつき推定ルーチンの処理の流れを示すフローチャート
【図２４】実施形態（４）の第２の気筒間ばらつき推定ルーチンの処理の流れを示すフローチャート
【図２５】排気系の遅れ時間ＤＥＬＹのマップを概念的に示す図
【図２６】実施形態（４）の第２の気筒間ばらつき補正ルーチンの処理の流れを示すフローチャート
【図２７】実施形態（５）の第１の気筒間ばらつき補正ルーチンの処理の流れを示すフローチャート
【図２８】実施形態（５）の第２の気筒間ばらつき補正ルーチンの処理の流れを示すフローチャート
【図２９】点火時期の基本補正量ＫＡＯＰ１のマップを概念的に示す図
【図３０】補正係数ＫＡＯＰ２のマップを概念的に示す図
【図３１】実施形態（５）の実行例を示すタイムチャート
【図３２】実施形態（６）の実行例を示すタイムチャート
【図３３】実施形態（７）の実行例を示すタイムチャート
【図３４】実施形態（８）の第１の気筒間ばらつき補正ルーチンの処理の流れを示すフローチャート
【図３５】吸気バルブリフト量の基本補正量ＦＶＶＬ１のマップを概念的に示す図
【図３６】補正係数ＦＶＶＬ２のマップを概念的に示す図
【図３７】実施形態（８）の実行例を示すタイムチャート
【図３８】実施形態（９）の第２の気筒間ばらつき補正ルーチンの処理の流れを示すフローチャート
【図３９】吸気バルブリフト量の基本補正量ＫＶＶＬ１のマップを概念的に示す図
【図４０】補正係数ＫＶＶＬ２のマップを概念的に示す図
【図４１】実施形態（９）の実行例を示すタイムチャート
【図４２】実施形態（１０）におけるエンジン制御システム全体の概略構成図
【図４３】実施形態（１０）の第１の気筒間ばらつき補正ルーチンの処理の流れを示すフローチャート
【図４４】実施形態（１１）の第２の気筒間ばらつき補正ルーチンの処理の流れを示すフローチャート
【符号の説明】
１１…エンジン（内燃機関）、１２…吸気管、１４…エアフローメータ、１５…スロットルバルブ、１８…吸気管圧力センサ、２０…燃料噴射弁、２１…点火プラグ、２２…排気管、２４…空燃比センサ、２６…クランク角センサ、２７…ＥＣＵ（第１の気筒間ばらつき推定手段，第１の気筒間ばらつき補正手段，第２の気筒間ばらつき推定手段，第２の気筒間ばらつき補正手段，ばらつき推定禁止手段，ばらつき補正省略手段）、２８…吸気バルブ、２９…排気バルブ、３０，３１…可変バルブリフト機構（気筒別吸入空気可変手段）、４２，４３…電磁アクチュエータ（気筒別吸入空気可変手段）。
【図１】
2004052620.tif 000003
【図２】
2004052620.tif 000004
【図３】
2004052620.tif 000005
【図４】
2004052620.tif 000006
【図５】
2004052620.tif 000007
【図６】
2004052620.tif 000008
【図７】
2004052620.tif 000009
【図８】
2004052620.tif 000010
【図９】
2004052620.tif 000011
【図１０】
2004052620.tif 000012
【図１１】
2004052620.tif 000013
【図１２】
2004052620.tif 000014
【図１３】
2004052620.tif 000015
【図１４】
2004052620.tif 000016
【図１５】
2004052620.tif 000017
【図１６】
2004052620.tif 000018
【図１７】
2004052620.tif 000019
【図１８】
2004052620.tif 000020
【図１９】
2004052620.tif 000021
【図２０】
2004052620.tif 000022
【図２１】
2004052620.tif 000023
【図２２】
2004052620.tif 000024
【図２３】
2004052620.tif 000025
【図２４】
2004052620.tif 000026
【図２５】
2004052620.tif 000027
【図２６】
2004052620.tif 000028
【図２７】
2004052620.tif 000029
【図２８】
2004052620.tif 000030
【図２９】
2004052620.tif 000031
【図３０】
2004052620.tif 000032
【図３１】
2004052620.tif 000033
【図３２】
2004052620.tif 000034
【図３３】
2004052620.tif 000035
【図３４】
2004052620.tif 000036
【図３５】
2004052620.tif 000037
【図３６】
2004052620.tif 000038
【図３７】
2004052620.tif 000039
【図３８】
2004052620.tif 000040
【図３９】
2004052620.tif 000041
【図４０】
2004052620.tif 000042
【図４１】
2004052620.tif 000043
【図４２】
2004052620.tif 000044
【図４３】
2004052620.tif 000045
【図４４】
2004052620.tif 000046