(57)【要約】【課題】可変吸気バルブ制御による吸入空気量制御を行うシステムにおいて、エアフロメータによる吸入空気量の検出精度を向上させる。【解決手段】空燃比制御で用いられる目標空燃比に基づいてエアフロメータ１４で検出した吸入空気量の検出誤差（以下「エアフロメータ検出誤差」という）を算出すると共に、気筒間の吸入空気量ばらつきを表す気筒間ばらつき値を算出し、更に、エアフロメータ検出誤差と気筒間ばらつき値とに基づいて各気筒の検出吸入空気量の誤差（以下「気筒別検出吸入空気量誤差」という）を算出する。そして、エアフロメータ１４の出力の変動状態が過渡状態のとき及び／又は空燃比センサ２４の検出精度が保証されていない状態のときに、前記気筒別検出吸入空気量誤差を用いて各気筒毎にエアフロメータ１４の検出吸入空気量を補正する。【選択図】図１
2008180227.tif 000002
【特許請求の範囲】
【請求項１】
吸気バルブのリフト量や開閉時期等のバルブ制御量を可変することで吸入空気量を制御可能な可変吸気バルブ機構と、内燃機関の吸入空気量を検出するエアフロメータと、該内燃機関の排出ガスの空燃比又はそれに相関する情報を検出する排出ガスセンサとを備えた内燃機関の吸入空気量検出装置において、
前記排出ガスセンサで検出した排出ガスの空燃比を目標空燃比に一致させる空燃比制御を実行する空燃比制御手段と、
前記空燃比制御で用いられる目標空燃比に基づいて前記エアフロメータで検出した吸入空気量の検出誤差（以下「エアフロメータ検出誤差」という）を算出するエアフロメータ検出誤差算出手段と、
前記内燃機関の気筒間の吸入空気量ばらつきを表す気筒間ばらつき値を算出する気筒間ばらつき算出手段と、
前記エアフロメータ検出誤差と前記気筒間ばらつき値とに基づいて各気筒の検出吸入空気量の誤差（以下「気筒別検出吸入空気量誤差」という）を算出する気筒別検出吸入空気量誤差算出手段と、
前記エアフロメータの出力の変動状態が過渡状態のとき及び／又は前記排出ガスセンサの検出精度が保証されていない状態のときに、前記気筒別検出吸入空気量誤差を用いて各気筒毎に前記エアフロメータの検出吸入空気量を補正する気筒別検出吸入空気量補正手段と
を備えていることを特徴とする内燃機関の吸入空気量検出装置。
【請求項２】
前記エアフロメータの出力の変動状態が過渡状態と脈動状態のいずれであるかを判別する変動状態判別手段を備え、
前記エアフロメータ検出誤差算出手段は、前記エアフロメータの出力の変動状態が脈動状態で且つ前記排出ガスセンサの検出精度が保証されている状態のときに、前記空燃比制御で用いられる目標空燃比に基づいて前記エアフロメータ検出誤差を算出することを特徴とする請求項１に記載の内燃機関の吸入空気量検出装置。
【請求項３】
前記エアフロメータの出力の変動状態が過渡状態のとき及び／又は前記排出ガスセンサの検出精度が保証されていない状態のときに、前記エアフロメータ検出誤差を用いて前記エアフロメータの検出吸入空気量を補正する検出吸入空気量補正手段を備えていることを特徴とする請求項２に記載の内燃機関の吸入空気量検出装置。
【請求項４】
前記エアフロメータ検出誤差算出手段は、前記排出ガスセンサの出力と燃料噴射量とに基づいて実吸入空気量を算出し、該実吸入空気量と前記検出吸入空気量とを比較して前記エアフロメータ検出誤差を算出することを特徴とする請求項１又は３に記載の内燃機関の吸入空気量検出装置。
【請求項５】
前記エアフロメータ検出誤差算出手段は、前記空燃比制御で用いられる目標空燃比と燃料噴射量とに基づいて実吸入空気量を算出し、該実吸入空気量と前記検出吸入空気量とを比較して前記エアフロメータ検出誤差を算出することを特徴とする請求項１乃至３のいずれかに記載の内燃機関の吸入空気量検出装置。
【請求項６】
前記エアフロメータ検出誤差算出手段により算出したエアフロメータ検出誤差をその時の内燃機関の運転状態に対応して学習するエアフロメータ検出誤差学習手段を備え、
前記検出吸入空気量補正手段は、前記検出吸入空気量を補正する際に、前記エアフロメータ検出誤差学習手段により学習したエアフロメータ検出誤差学習値の中からその時の内燃機関の運転状態に対応するエアフロメータ検出誤差学習値を選択して用いることを特徴とする請求項３に記載の内燃機関の吸入空気量検出装置。
【請求項７】
前記気筒別検出吸入空気量誤差算出手段により算出した気筒別検出吸入空気量誤差をその時の内燃機関の運転状態に対応して学習する気筒別検出吸入空気量誤差学習手段を備え、
前記気筒別検出吸入空気量補正手段は、各気筒毎に前記検出吸入空気量を補正する際に、前記気筒別検出吸入空気量誤差学習手段により学習した気筒別検出吸入空気量誤差学習値の中からその時の内燃機関の運転状態に対応する気筒別検出吸入空気量誤差学習値を選択して用いることを特徴とする請求項１に記載の内燃機関の吸入空気量検出装置。
【請求項８】
前記内燃機関の吸気管圧力を検出する吸気管圧力センサを備え、
前記気筒間ばらつき算出手段は、各気筒の吸気行程に対応する期間毎に前記吸気管圧力センサにより吸気管圧力を検出し、その吸気管圧力に基づいて前記気筒間ばらつき値を算出することを特徴とする請求項１又は７に記載の内燃機関の吸入空気量検出装置。
【請求項９】
前記気筒間ばらつき算出手段は、各気筒の燃焼行程に対応する期間毎に回転変動を検出し、その回転変動に基づいて前記気筒間ばらつき値を算出することを特徴とする請求項１、７、８のいずれかに記載の内燃機関の吸入空気量検出装置。
【請求項１０】
前記気筒間ばらつき算出手段は、各気筒の排気行程に対応する期間毎に前記排出ガスセンサにより排出ガスの空燃比を検出し、その空燃比に基づいて前記気筒間ばらつき値を算出することを特徴とする請求項１、７乃至９のいずれかに記載の内燃機関の吸入空気量検出装置。
【請求項１１】
前記内燃機関の各気筒毎に筒内圧力を検出する筒内圧力センサを備え、
前記気筒間ばらつき算出手段は、各気筒毎に前記筒内圧力センサにより筒内圧力を検出し、その筒内圧力に基づいて前記気筒間ばらつき値を算出することを特徴とする請求項１、７乃至１０のいずれかに記載の内燃機関の吸入空気量検出装置。
【請求項１２】
吸気バルブのリフト量や開閉時期等のバルブ制御量を可変することで吸入空気量を制御可能な可変吸気バルブ機構と、内燃機関の吸入空気量を検出するエアフロメータと、該内燃機関の排出ガスの空燃比又はそれに相関する情報を検出する排出ガスセンサとを備えた内燃機関の吸入空気量検出装置において、
前記排出ガスセンサの検出精度が保証されている状態のときに、該排出ガスセンサの出力に基づいて前記エアフロメータで検出した吸入空気量の検出誤差（以下「エアフロメータ検出誤差」という）を算出するエアフロメータ検出誤差算出手段を備えていることを特徴とする内燃機関の吸入空気量検出装置。
【請求項１３】
前記排出ガスセンサの検出精度が保証されていない状態のときに、前記エアフロメータ検出誤差を用いて前記エアフロメータの検出吸入空気量を補正する検出吸入空気量補正手段を備えていることを特徴とする請求項１２に記載の内燃機関の吸入空気量検出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、内燃機関の吸入空気量を検出するエアフロメータを備えた内燃機関の吸入空気量検出装置に関するものである。
【背景技術】
【０００２】
内燃機関の吸気管内には、各気筒の吸気行程に対応して吸気脈動が発生することがあり、この吸気脈動によってエアフロメータ出力が脈動状態になると、エアフロメータで検出した吸入空気量が実際の吸入空気量からずれた値となる。そこで、エアフロメータ出力の変動幅に応じてエアフロメータで検出した吸入空気量を補正することで、検出吸入空気量と実吸入空気量との誤差を小さくするようにしたものがある（例えば、特許文献１参照）。
【０００３】
一方、近年、車両に搭載される内燃機関においては、吸気バルブのリフト量や開閉時期等のバルブ制御量を可変する可変吸気バルブ機構を設け、アクセル開度やエンジン運転状態等に応じて吸気バルブのバルブ制御量を可変することで吸入空気量を制御できるようにしたものがある。この可変吸気バルブ制御による吸入空気量制御は、吸気バルブのリフト量や開弁期間を小さくすることによって、吸気通路をスロットルバルブで絞ることなく吸入空気量を少なくすることができるので、ポンピングロスを低減して燃費を向上させることができる利点がある。
【特許文献１】特公昭５９−１７３７１号公報（第２頁等）
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、従来の一般的なスロットルバルブ制御による吸入空気量制御では、通常の運転（全負荷を除く）領域で、スロットルバルブを全開位置よりも閉じた位置に制御するが、可変吸気バルブ制御による吸入空気量制御では、スロットルバルブを全開位置付近に大きく開いたままの状態に保持する。このため、可変吸気バルブ制御による吸入空気量制御では、従来のスロットルバルブ制御による吸入空気量制御よりも、吸気脈動がスロットルバルブの上流側へ伝わり易く、スロットルバルブの上流側に配置されたエアフロメータ出力の脈動が大きくなって、吸気脈動によるエアフロメータの検出誤差（検出吸入空気量と実吸入空気量との誤差）が大きくなる傾向がある。従って、従来と同じ補正方法でエアフロメータの検出吸入空気量を補正しても、十分な精度で検出吸入空気量を補正することができず、吸入空気量の検出精度が低下してしまう。
【０００５】
また、従来のスロットルバルブ制御による吸入空気量制御では、低負荷になるほどスロットルバルブの開度を小さくするため、低負荷になるほど吸気脈動がスロットルバルブ上流側のエアフロメータの周辺に伝わりにくくなって、エアフロメータ出力の脈動が小さくなる傾向がある。このため、実用領域である低負荷領域では、エアフロメータの検出誤差が小さくなり、エアフロメータの検出誤差による悪影響が少ないという特徴があった。
【０００６】
これに対して、可変吸気バルブ制御による吸入空気量制御では、低負荷になるほど吸気バルブのリフト量や開弁期間を小さくするため、低負荷になるほど気筒間の吸気間隔が広がって吸気脈動が大きくなり、エアフロメータ出力の脈動が大きくなる傾向がある。このため、実用領域である低負荷領域で、エアフロメータの検出誤差が大きくなって吸入空気量の検出精度が低下してしまい、空燃比制御精度が低下して排気エミッションが悪化する傾向がある。
【０００７】
本発明はこのような事情を考慮してなされたものであり、従ってその目的は、エアフロメータの検出誤差が大きくなるシステムの場合でも、吸入空気量の検出精度を向上させることができて、空燃比制御精度を向上させることができる内燃機関の吸入空気量検出装置を提供することにある。
【課題を解決するための手段】
【０００８】
上記目的を達成するために、請求項１に係る発明は、吸気バルブのリフト量や開閉時期等のバルブ制御量を可変することで吸入空気量を制御可能な可変吸気バルブ機構と、内燃機関の吸入空気量を検出するエアフロメータと、該内燃機関の排出ガスの空燃比又はそれに相関する情報を検出する排出ガスセンサとを備えた内燃機関の吸入空気量検出装置において、
（１）前記排出ガスセンサで検出した排出ガスの空燃比を目標空燃比に一致させる空燃比制御を実行する空燃比制御手段と、
（２）前記空燃比制御で用いられる目標空燃比に基づいて前記エアフロメータで検出した吸入空気量の検出誤差（以下「エアフロメータ検出誤差」という）を算出するエアフロメータ検出誤差算出手段と、
（３）前記内燃機関の気筒間の吸入空気量ばらつきを表す気筒間ばらつき値を算出する気筒間ばらつき算出手段と、
（４）前記エアフロメータ検出誤差と前記気筒間ばらつき値とに基づいて各気筒の検出吸入空気量の誤差（以下「気筒別検出吸入空気量誤差」という）を算出する気筒別検出吸入空気量誤差算出手段と、
（５）前記エアフロメータの出力の変動状態が過渡状態のとき及び／又は前記排出ガスセンサの検出精度が保証されていない状態のときに、前記気筒別検出吸入空気量誤差を用いて各気筒毎に前記エアフロメータの検出吸入空気量を補正する気筒別検出吸入空気量補正手段とを備えた構成としたものである。
【０００９】
内燃機関の筒内に実際に吸入された実吸入吸気量に応じて排出ガスの空燃比が変化するため、排出ガスの空燃比を検出する排出ガスセンサの出力は、実吸入空気量を精度良く反映したパラメータとなる。また、排出ガスセンサで検出した排出ガスの空燃比を目標空燃比に一致させる空燃比フィードバック制御を実行するシステムでは、排出ガスの空燃比が目標空燃比に精度良く制御される。本発明は、これらの事情を考慮して、排出ガスセンサの出力（排出ガスの空燃比）の代わりに目標空燃比を用いてエアフロメータ検出誤差を算出するものである。このエアフロメータ検出誤差を用いれば、エアフロメータの検出吸入空気量を精度良く補正することができるので、本発明のように、可変吸気バルブ制御による吸入空気量制御を行うシステムにおいて、吸気脈動によるエアフロメータ検出誤差が大きくなる場合でも、吸入空気量の検出精度を向上させることができて、空燃比制御の精度（排気エミッション）を向上させることができる。
【００１０】
一般に、空燃比センサ等の排出ガスセンサは、理論空燃比付近で検出精度が高く、理論空燃比から離れるほど検出精度が低下するという検出特性をもっている。また、高負荷領域では、出力を重視して空燃比をリッチに制御するが、実用領域である低負荷領域では、排気エミッションを重視して排出ガスの空燃比を三元触媒等の触媒の浄化ウインドである理論空燃比付近に制御するようにしている。従って、実用領域である低負荷領域では、排出ガスの空燃比が理論空燃比付近に制御されて排出ガスセンサの検出精度が高い状態に制御される。
【００１１】
可変吸気バルブ制御による吸入空気量制御では、実用領域である低負荷領域でエアフロメータの検出誤差が大きくなる傾向があるが、上述したように低負荷領域では、排出ガスの空燃比が理論空燃比付近に制御されて排出ガスセンサの検出精度が高い状態になっているため、排出ガスセンサの出力に基づいてエアフロメータ検出誤差をより精度良く算出することができ、本発明を適用する効果が大きい。
【００１２】
ところで、可変吸気バルブ制御による吸入空気量制御では、低負荷時に吸気バルブのリフト量が小さくなるため、各気筒で目標リフト量に対する実リフト量のばらつき（各気筒の部品公差や組付公差によるばらつき）の割合が大きくなって、気筒間の吸入空気量ばらつきが大きくなる傾向がある。
【００１３】
そこで、請求項１に係る発明は、内燃機関の気筒間の吸入空気量ばらつきを表す気筒間ばらつき値を算出して、エアフロメータ検出誤差と気筒間ばらつき値とに基づいて各気筒の検出吸入空気量の誤差（以下「気筒別検出吸入空気量誤差」という）を算出し、エアフロメータの出力の変動状態が過渡状態のとき及び／又は排出ガスセンサの検出精度が保証されていない状態のときに、気筒別検出吸入空気量誤差を用いて各気筒毎に検出吸入空気量を補正するようにしている。このようにすれば、気筒間の吸入空気量ばらつきを考慮して、各気筒毎に検出吸入空気量を補正することができるので、気筒間の吸入空気量ばらつきが大きくなる場合でも、各気筒毎に吸入空気量を精度良く検出することができる。
【００１４】
また、目標空燃比に基づいてエアフロメータ検出誤差を算出する場合、排出ガスセンサの検出精度が保証されていない状態のときには、排出ガスの空燃比を目標空燃比に精度良く制御することができず、目標空燃比に基づくエアフロメータ検出誤差の算出精度が低下するため、請求項２のように、エアフロメータの出力の変動状態が脈動状態で且つ排出ガスセンサの検出精度が保証されている状態のときに、目標空燃比に基づいてエアフロメータ検出誤差を算出するようにすると良い。このようにしても、吸気脈動によるエアフロメータ検出誤差を精度良く算出することができる。
【００１５】
更に、請求項３のように、エアフロメータの出力の変動状態が過渡状態のとき及び／又は排出ガスセンサの検出精度が保証されていない状態のときに、エアフロメータ検出誤差を用いて検出吸入空気量を検出吸入空気量補正手段により補正するようにしても良い。
【００１６】
つまり、エアフロメータの出力の変動状態が過渡状態のときや、排出ガスセンサの検出精度が保証されていない状態のときには、吸気脈動によるエアフロメータ検出誤差を精度良く算出できないので、吸気脈動によるエアフロメータ検出誤差を確実に精度良く算出できるとき（つまりエアフロメータの出力の変動状態が脈動状態で且つ排出ガスセンサの検出精度が保証されている状態のとき）に算出したエアフロメータ検出誤差を用いて検出吸入空気量を補正すれば、吸気脈動によるエアフロメータ検出誤差を精度良く算出することができない状態のときでも、エアフロメータの検出吸入空気量を精度良く補正することができ、吸入空気量の検出精度を向上させることができる。
【００１７】
また、エアフロメータ検出誤差の算出方法の具体例としては、請求項４（又は請求項５）のように、排出ガスセンサの出力（又は目標空燃比）と燃料噴射量に基づいて実吸入空気量を算出し、その実吸入空気量と検出吸入空気量とを比較してエアフロメータ検出誤差を算出するようにすると良い。排出ガスセンサの出力（又は目標空燃比）と燃料噴射量とを用いるようにすれば良い。このようにすれば、実吸入空気量を精度良く算出することができるので、その実吸入空気量と検出吸入空気量とを比較すれば、エアフロメータ検出誤差を精度良く算出することができる。
【００１８】
また、請求項３に係る発明において、請求項６のように、エアフロメータ検出誤差をその時の内燃機関の運転状態に対応して学習し、検出吸入空気量を補正する際に、エアフロメータ検出誤差学習値の中からその時の内燃機関の運転状態に対応するエアフロメータ検出誤差学習値を選択して用いるようにしても良い。或は、請求項１に係る発明において、請求項７のように、気筒別検出吸入空気量誤差をその時の内燃機関の運転状態に対応して学習し、各気筒毎に検出吸入空気量を補正する際に、気筒別検出吸入空気量誤差学習値の中からその時の内燃機関の運転状態に対応する気筒別検出吸入空気量誤差学習値を選択して用いるようにしても良い。
【００１９】
このようにすれば、吸気脈動によるエアフロメータ検出誤差を精度良く算出することができない状態のときでも、制御システムの製造ばらつきや経時変化等の影響を受けずに、内燃機関の運転状態に対応した適正なエアフロメータ検出誤差学習値（又は気筒別検出吸入空気量誤差学習値）を用いて検出吸入空気量を補正することができ、吸入空気量の検出精度を更に向上させることができる。
【００２０】
また、気筒間ばらつき値の算出方法の具体例としては、例えば請求項８のように、各気筒の吸気行程に対応する期間毎に吸気管圧力センサにより吸気管圧力を検出し、その吸気管圧力に基づいて気筒間ばらつき値を算出するようにしても良い。吸気管圧力は、各気筒の吸気行程で筒内に吸入される空気量に対応して変化するので、各気筒の吸気行程に対応する期間毎に検出した吸気管圧力を用いれば、各気筒の吸入空気量ばらつきを反映した気筒間ばらつき値を算出することができる。
【００２１】
或は、請求項９のように、各気筒の燃焼行程に対応する期間毎に回転変動を検出し、その回転変動に基づいて前記気筒間ばらつき値を算出するようにしても良い。各気筒の吸入空気量に応じて各気筒の燃焼状態が変化して各気筒の回転変動の値が変化するため、各気筒の燃焼行程に対応する期間毎に検出した回転変動を用いれば、各気筒の吸入空気量ばらつきを反映した気筒間ばらつき値を算出することができる。
【００２２】
また、請求項１０のように、各気筒の排気行程に対応する期間毎に排出ガスセンサにより排出ガスの空燃比を検出し、その空燃比に基づいて気筒間ばらつき値を算出するようにしても良い。各気筒の吸入空気量に応じて各気筒の排出ガスの空燃比が変化するため、各気筒の排気行程に対応する期間毎に検出した排出ガスの空燃比を用いれば、各気筒の吸入空気量ばらつきを反映した気筒間ばらつき値を算出することができる。
【００２３】
また、請求項１１のように、内燃機関の各気筒毎に筒内圧力を検出する筒内圧力センサを設け、各気筒毎に筒内圧力センサにより筒内圧力を検出し、その筒内圧力に基づいて気筒間ばらつき値を算出するようにしても良い。各気筒の吸入空気量に応じて各気筒の圧縮行程における筒内圧力が変化する。また、各気筒の吸入空気量に応じて各気筒の燃焼状態が変化して各気筒の燃焼行程における筒内圧力が変化する。従って、各気筒の圧縮行程や燃焼行程で検出した筒内圧力を用いれば、各気筒の吸入空気量ばらつきを反映した気筒間ばらつき値を算出することができる。
【００２４】
また、エアフロメータ検出誤差の算出時期は、エアフロメータの出力の変動状態が脈動状態で且つ排出ガスセンサの検出精度が保証されている状態のときに限定されず、請求項１２のように、排出ガスセンサの検出精度が保証されている状態のときに、排出ガスセンサの出力に基づいてエアフロメータ検出誤差を算出するようにしても良い。この場合、請求項１３のように、排出ガスセンサの検出精度が保証されていない状態のときに、エアフロメータ検出誤差を用いて検出吸入空気量を補正するようにしても良い。このようにしても、排出ガスセンサの出力に基づいてエアフロメータ検出誤差を精度良く算出することができると共に、エアフロメータ検出誤差を精度良く算出することができないときでも、エアフロメータで検出した検出吸入空気量を精度良く補正することができ、吸入空気量の検出精度を向上させて、空燃比制御精度を向上させることができる。
【発明を実施するための最良の形態】
【００２５】
《実施形態（１）》
以下、本発明の実施形態（１）を図１乃至図１３に基づいて説明する。まず、図１に基づいてエンジン制御システム全体の概略構成を説明する。内燃機関である例えば４気筒のエンジン１１は、第１気筒＃１〜第４気筒＃４の４つの気筒を有し、このエンジン１１の吸気管１２の最上流部には、エアクリーナ１３が設けられ、このエアクリーナ１３の下流側に、吸入空気量を検出するエアフロメータ１４が設けられている。このエアフロメータ１４の下流側には、ＤＣモータ等によって開度調節されるスロットルバルブ１５とスロットル開度を検出するスロットル開度センサ１６とが設けられている。
【００２６】
更に、スロットルバルブ１５の下流側には、サージタンク１７が設けられ、このサージタンク１７に、吸気管圧力を検出する吸気管圧力センサ１８が設けられている。また、サージタンク１７には、エンジン１１の各気筒に空気を導入する吸気マニホールド１９が設けられ、各気筒の吸気マニホールド１９の吸気ポート近傍に、それぞれ燃料を噴射する燃料噴射弁２０が取り付けられている。また、エンジン１１のシリンダヘッドには、各気筒毎に点火プラグ２１が取り付けられ、各点火プラグ２１の火花放電によって筒内の混合気に着火される。
【００２７】
また、エンジン１１の吸気バルブ２８と排気バルブ２９には、それぞれバルブリフト量を可変する可変吸気バルブリフト機構３０と可変排気バルブリフト機構３１が設けられている。更に、吸気バルブ２８と排気バルブ２９に、それぞれバルブタイミング（開閉タイミング）を可変する可変吸気バルブタイミング機構と可変排気バルブタイミング機構を設けるようにしても良い。尚、排気バルブ２９には、可変排気バルブリフト機構３１を設けずに、可変排気バルブタイミング機構のみを設けるようにしても良い。
【００２８】
一方、エンジン１１の排気管２２には、排出ガス中のＣＯ，ＨＣ，ＮＯｘ等を浄化する三元触媒等の触媒２３が設けられ、この触媒２３の上流側に、排出ガスの空燃比を検出する空燃比センサ２４（排出ガスセンサ）が設けられている。また、エンジン１１のシリンダブロックには、冷却水温を検出する水温センサ２５や、エンジン１１のクランク軸が一定クランク角（例えば３０℃Ａ）回転する毎にパルス信号を出力するクランク角センサ２６が取り付けられている。このクランク角センサ２６の出力信号に基づいてクランク角やエンジン回転速度が検出される。
【００２９】
これら各種センサの出力は、エンジン制御回路（以下「ＥＣＵ」と表記する）２７に入力される。このＥＣＵ２７は、マイクロコンピュータを主体として構成され、内蔵されたＲＯＭ（記憶媒体）に記憶された各種のエンジン制御プログラムを実行することで、エンジン運転状態に応じて燃料噴射弁２０の燃料噴射量や点火プラグ２１の点火時期を制御する。
【００３０】
次に、図２乃至図５に基づいて可変吸気バルブリフト機構３０の構成を説明する。尚、可変排気バルブリフト機構３１は、可変吸気バルブリフト機構３０と実質的に同一構成であるため、説明を省略する。
【００３１】
図２に示すように、吸気バルブ２８を駆動するためのカムシャフト３２とロッカーアーム３３との間に、リンクアーム３４が設けられ、このリンクアーム３４の上方に、ステッピングモータ等のモータ４１で回動駆動されるコントロールシャフト３５が設けられている。コントロールシャフト３５には、偏心カム３６が一体的に回動可能に設けられ、この偏心カム３６の軸心に対して偏心した位置に、リンクアーム３４が支持軸（図示せず）を介して揺動可能に支持されている。このリンクアーム３４の中央部には、揺動カム３８が設けられ、この揺動カム３８の側面が、カムシャフト３２に設けられたカム３７の外周面に当接している。また、リンクアーム３４の下端部には、押圧カム３９が設けられ、この押圧カム３９の下端面が、ロッカーアーム３３の中央部に設けられたローラ４０の上端面に当接している。
【００３２】
これにより、カムシャフト３２の回転によってカム３７が回転すると、そのカム３７の外周面形状に追従してリンクアーム３４の揺動カム３８が左右に移動して、リンクアーム３４が左右に揺動する。リンクアーム３４が左右に揺動すると、押圧カム３９が左右に移動するため、押圧カム３９の下端面形状に応じてロッカーアーム３３のローラ４０が上下に移動して、ロッカーアーム３３が上下に揺動する。このロッカーアーム３３の上下動によって吸気バブル２８が上下動するようになっている。
【００３３】
一方、コントロールシャフト３５の回転によって偏心カム３６が回転すると、リンクアーム３４の支持軸の位置が移動して、リンクアーム３４の押圧カム３９とロッカーアーム３３のローラ４０との初期の接触点位置（図３、図４参照）が変化する。また、図２に示すように、リンクアーム３４の押圧カム３９の下端面は、左側部分にロッカーアーム３３の押圧量が０（吸気バルブ２８のバルブリフト量が０）となるような曲率でベース曲面３９ａが形成され、このベース曲面３９ａから右方に向かうに従ってロッカーアーム３３の押圧量が大きくなる（吸気バルブ２８のバルブリフト量が大きくなる）ような曲率で押圧曲面３９ｂが形成されている。
【００３４】
図３に示すように、吸気バルブ２８のバルブリフト量を大きくする高リフトモードの場合には、コントロールシャフト３５の回転によってリンクアーム３４の押圧カム３９とロッカーアーム３３のローラ４０との初期の接触点位置を右方に移動させる。これにより、カム３７の回転によって押圧カム３９が左右に移動したときに押圧カム３９の下端面のうちローラ４０に接触する区間が右方に移動するため、ロッカーアーム３３の最大押圧量が大きくなって吸気バルブ２８の最大バルブリフト量が大きくなると共に、ロッカーアーム３３が押圧される期間が長くなって吸気バブル２８の開弁期間が長くなる。
【００３５】
一方、図４に示すように、吸気バルブ２８のバルブリフト量を小さくする低リフトモードの場合には、コントロールシャフト３５の回転によってリンクアーム３４の押圧カム３９とロッカーアーム３３のローラ４０との初期の接触点位置を左方に移動させる。これにより、カム３７の回転によって押圧カム３９が左右に移動したときに押圧カム３９の下端面のうちローラ４０に接触する区間が左方に移動するため、ロッカーアーム３３の最大押圧量が小さくなって吸気バルブ２８の最大バルブリフト量が小さくなると共に、ロッカーアーム３３が押圧される期間が短くなって吸気バブル２８の開弁期間が短くなる。
【００３６】
以上説明した可変吸気バルブリフト機構３０では、モータ４１でコントロールシャフト３５を回転させてリンクアーム３４の押圧カム３９とロッカーアーム３３のローラ４０との初期の接触点位置を連続的に移動させれば、図５に示すように、全気筒の吸気バルブ２８の最大バルブリフト量と開弁期間（以下単に「バルブリフト量」という）を一括して連続的に可変することができる。
【００３７】
ＥＣＵ２７は、ＲＯＭに記憶された可変バルブ制御プログラム（図示せず）を実行することで、アクセル開度やエンジン運転状態等に基づいて可変吸気バルブリフト機構３０を制御して、吸気バルブ２８のバルブリフト量を連続的に可変して吸入空気量を制御する。尚、可変吸気バルブリフト機構３０と可変吸気バルブタイミング機構を併用したシステムの場合には、バルブリフト量とバルブタイミングの両方を連続的に可変して吸入空気量を制御するようにしても良い。
【００３８】
また、ＥＣＵ２７は、後述する検出吸入空気量補正用の各ルーチンを実行することで、エアフロメータ１４の出力Ｖs の変動状態が脈動状態で且つ空燃比センサ２４の検出精度が保証されている状態のときに、空燃比センサ２４で検出した空燃比ＡＦに基づいてエアフロメータ１４で検出した検出吸入空気量の誤差（以下「エアフロメータ検出誤差」という）ΔＧを算出し、エアフロメータ１４の出力Ｖs の変動状態が過渡状態のときや空燃比センサ２４の検出精度が保証されていない状態のときには、エアフロメータ検出誤差ΔＧを用いてエアフロメータ１４で検出した検出吸入空気量Ｇ0 を補正する。
以下、本実施形態（１）でＥＣＵ２７が実行する検出吸入空気量補正用の各ルーチンの処理内容を説明する。
【００３９】
［検出吸入空気量補正ベースルーチン］
図６に示す検出吸入空気量補正ベースルーチンは、イグニッションスイッチ（図示せず）のオン後に所定周期で実行される。本ルーチンが起動されると、まず、ステップ１０１で、エアフロメータ１４の出力Ｖs を読み込み、次のステップ１０２で、エアフロメータ１４の出力Ｖs に応じた仮の検出吸入空気量Ｇ0 をマップ等により算出する。
【００４０】
この後、ステップ１０３に進み、エアフロメータ１４の出力Ｖs の変動状態が過渡状態であるか否かを判定すると共に、空燃比センサ２４の出力に基づく空燃比フィードバック制御（以下「空燃比Ｆ／Ｂ制御」と表記する）が不許可であるか否かを判定する。
この場合、エアフロメータ１４の出力Ｖs の変動状態が過渡状態であるか否かの判定は、後述する図７に示す変動状態判別ルーチンによる判別結果に基づいて判定する。
【００４１】
また、空燃比Ｆ／Ｂ制御が不許可であるか否かの判定は、空燃比センサ２４が未活性状態であるか否か（例えば始動後の経過時間がセンサ活性判定時間に達する前であるか否か）や、空燃比センサ２４がフェール状態（故障状態）であるか否か等によって判定する。空燃比Ｆ／Ｂ制御が許可されているときには、空燃比Ｆ／Ｂ制御により排出ガスの空燃比が理論空燃比付近に制御されて空燃比センサ２４の検出精度が高い状態になっている。従って、空燃比Ｆ／Ｂ制御が許可されていれば、空燃比センサ２４の検出精度が保証されている状態であると判断することができる。
【００４２】
このステップ１０３で、エアフロメータ１４の出力Ｖs の変動状態が脈動状態であると判定され、且つ、空燃比Ｆ／Ｂ制御が許可されている（つまり空燃比センサ２４の検出精度が保証されている状態である）と判定された場合には、吸気脈動によるエアフロメータ検出誤差ΔＧを精度良く算出できる状態であると判断して、ステップ１０４に進み、後述する図９に示すエアフロメータ検出誤差算出ルーチンを実行して、空燃比センサ２４で検出した空燃比ＡＦと燃料噴射量ＦＵＥＬとに基づいて実吸入空気量Ｇ1 を算出し、その実吸入空気量Ｇ1 と検出吸入空気量Ｇ0 とを比較してエアフロメータ検出誤差ΔＧを算出する。
【００４３】
この後、ステップ１０５に進み、後述する図１０に示すエアフロメータ検出誤差学習ルーチンを実行して、エアフロメータ検出誤差ΔＧを用いてその時のエンジン運転状態に対応するエアフロメータ検出誤差学習値ΔＧ(AREA)を更新（学習）する。
【００４４】
これに対して、上記ステップ１０３で、エアフロメータ１４の出力Ｖs の変動状態が過渡状態であると判定された場合、又は、空燃比Ｆ／Ｂ制御が不許可である（つまり空燃比センサ２４の検出精度が保証されていない状態である）と判定された場合には、ステップ１０６に進み、後述する図１２に示す検出吸入空気量補正ルーチンを実行して、エアフロメータ検出誤差学習値ΔＧ(AREA)の中からその時のエンジン運転状態に対応するエアフロメータ検出誤差学習値ΔＧ(AREA)を選択し、そのエアフロメータ検出誤差学習値ΔＧ(AREA)を用いてエアフロメータ１４で検出した仮の検出吸入空気量Ｇ0 を補正して最終的な検出吸入空気量Ｇを求める。
【００４５】
［変動状態判別ルーチン］
図７に示す変動状態判別ルーチンは、イグニッションスイッチのオン後にエンジン１１の回転周期よりも十分に短い周期（例えばエンジン回転速度が１０００ｒｐｍの場合には１ｍｓ）で実行され、特許請求の範囲でいう変動状態判別手段としての役割を果たす。尚、本ルーチンで用いるエアフロメータ１４の出力の最大値Ｖmax 及び最小値Ｖmin 、カウンタＣmax 及びカウンタＣmin の値は、所定周期（例えば１８０℃Ａ）で、それぞれＶmax ＝マイナス側限界値、Ｖmin ＝プラス側限界値、Ｃmax ＝０、Ｃmin ＝０にリセットされる。
【００４６】
本ルーチンが起動されると、まず、ステップ２０１で、エアフロメータ１４の出力Ｖs を読み込み、その後、ステップ２０２に進み、エアフロメータ１４の出力Ｖs が最大値Ｖmax よりも大きいか否かを判定する。エアフロメータ１４の出力Ｖs が最大値Ｖmax よりも大きいと判定されれば、ステップ２０３に進み、最大値Ｖmax を現在のエアフロメータ１４の出力Ｖs の値で更新する。
【００４７】
そして、次のステップ２０４で、エアフロメータ１４の出力Ｖs の増加状態が継続している時間をカウントするカウンタＣmax を「１」だけインクリメントした後、ステップ２０５に進み、カウンタＣmax が過渡判定値Ｃs 以上であるか否かを判定する。その結果、カウンタＣmax が過渡判定値Ｃs 以上であると判定された場合には、ステップ２０６に進み、エアフロメータ１４の出力Ｖs の変動状態が過渡状態（増加状態）であると判定して本ルーチンを終了する。
【００４８】
これに対して、カウンタＣmax が過渡判定値Ｃs 未満であると判定された場合には、ステップ２１２に進み、エアフロメータ１４の出力Ｖs の変動状態が脈動状態であると判定して本ルーチンを終了する。
【００４９】
一方、上記ステップ２０２で、エアフロメータ１４の出力Ｖs が最大値Ｖmax 以下であると判定された場合には、ステップ２０７に進み、エアフロメータ１４の出力Ｖs が最小値Ｖmin よりも小さいか否かを判定する。エアフロメータ１４の出力Ｖs が最小値Ｖmin よりも小さいと判定されれば、ステップ２０８に進み、最小値Ｖmin を現在のエアフロメータ１４の出力Ｖs の値で更新する。
【００５０】
そして、次のステップ２０９で、エアフロメータ１４の出力Ｖs の減少状態が継続している時間をカウントするカウンタＣmin を「１」だけインクリメントした後、ステップ２１０に進み、カウンタＣmin が過渡判定値Ｃs 以上であるか否かを判定する。その結果、カウンタＣmin が過渡判定値Ｃs 以上であると判定された場合は、ステップ２１１に進み、エアフロメータ１４の出力Ｖs の変動状態が過渡状態（減少状態）であると判定して本ルーチンを終了する。
【００５１】
これに対して、カウンタＣmin が過渡判定値Ｃs 未満であると判定された場合には、ステップ２１２に進み、エアフロメータ１４の出力Ｖs の変動状態が脈動状態であると判定して本ルーチンを終了する。
【００５２】
本ルーチンの処理により、図８（ａ）に示すように、エアフロメータ１４の出力Ｖs の変動状態が脈動状態の場合には、エアフロメータ１４の出力Ｖs が増加と減少を交互に繰り返すので、カウンタＣmax 、Ｃmin はいずれも過渡判定値Ｃs を越えることがなく、脈動状態と判定される。
【００５３】
一方、図８（ｂ）に示すように、エアフロメータ１４の出力Ｖs の変動状態が過渡状態（例えば増加状態）の場合には、エアフロメータ１４の出力Ｖs の増加に伴ってカウンタＣmax がインクリメントされて過渡判定値Ｃs を越えるため、過渡状態と判定される。尚、図８（ｂ）では、エアフロメータ１４の出力Ｖs が増加する過渡状態の場合を例示したが、エアフロメータ１４の出力Ｖs が減少する過渡状態の場合も同様にして過渡状態と判定される。
【００５４】
［エアフロメータ検出誤差算出ルーチン］
図９に示すエアフロメータ検出誤差算出ルーチンは、図６のステップ１０４で起動されるサブルーチンであり、特許請求の範囲でいうエアフロメータ検出誤差算出手段としての役割を果たす。
【００５５】
本ルーチンが起動されると、まず、ステップ３０１で、エアフロメータ１４で検出した仮の検出吸入空気量Ｇ0 を読み込んだ後、ステップ３０２に進み、燃料噴射弁２０の燃料噴射時間（噴射パルス幅）ＴＡＵを読み込む。この燃料噴射時間ＴＡＵは、所定期間の平均値又はなまし値としても良い。
【００５６】
この後、ステップ３０３に進み、エンジン回転速度ＮＥを読み込む。このエンジン回転速度ＮＥは、所定期間の平均値又はなまし値としても良い。
この後、ステップ３０４に進み、燃料噴射弁２０の無効噴射時間ＴＶを読み込んだ後、ステップ３０５に進み、燃料噴射時間ＴＡＵを燃料噴射量に変換するための変換係数ＫＩＮＪを読み込む。
【００５７】
そして、次のステップ３０６で、燃料噴射時間ＴＡＵ、無効噴射時間ＴＶ、エンジン回転速度ＮＥ、変換係数ＫＩＮＪを用いて次式により単位時間当りの燃料噴射量ＦＵＥＬを算出する。
ＦＵＥＬ＝（ＴＡＵ−ＴＶ）×ＮＥ／３０／ＫＩＮＪ
【００５８】
燃料噴射量ＦＵＥＬの算出後、ステップ３０７に進み、空燃比センサ２４で検出した空燃比ＡＦを読み込む。この空燃比ＡＦは、所定期間の平均値又はなまし値としても良い。
そして、次のステップ３０８で、空燃比ＡＦに単位時間当りの燃料噴射量ＦＵＥＬを乗算して単位時間当りの実吸入空気量Ｇ1 を求める。
Ｇ1 ＝ＡＦ×ＦＵＥＬ
【００５９】
この後、ステップ３０９に進み、実吸入空気量Ｇ1 からエアフロメータ１４で検出した仮の検出吸入空気量Ｇ0 を差し引いてエアフロメータ検出誤差ΔＧを求める。
ΔＧ＝Ｇ1 −Ｇ0
【００６０】
［エアフロメータ検出誤差学習ルーチン］
図１０に示すエアフロメータ検出誤差学習ルーチンは、図６のステップ１０５で起動されるサブルーチンであり、特許請求の範囲でいうエアフロメータ検出誤差学習手段としての役割を果たす。
【００６１】
本ルーチンが起動されると、まず、ステップ４０１で、図１１に示すエアフロメータ検出誤差学習値ΔＧ(AREA)のマップにおいて、現在のエンジン運転状態（エンジン回転速度ＮＥと実吸入空気量Ｇ1 ）が、いずれの運転領域ＡＲＥＡであるかを判定する。図１１に示すエアフロメータ検出誤差学習値ΔＧ(AREA)のマップは、エンジン回転速度ＮＥと実吸入空気量Ｇ1 とをパラメータとする複数の運転領域ＡＲＥＡに区分され、各運転領域ＡＲＥＡ毎に、それぞれエアフロメータ検出誤差学習値ΔＧ(AREA)が記憶されている。
【００６２】
この後、ステップ４０２に進み、図９のエアフロメータ検出誤差算出ルーチンで算出したエアフロメータ検出誤差ΔＧをなまし処理して現在のエンジン運転状態に対応する運転領域ＡＲＥＡのエアフロメータ検出誤差学習値ΔＧ(AREA)を求め、その値で該当する運転領域ＡＲＥＡのエアフロメータ検出誤差学習値ΔＧ(AREA)を更新する。
ΔＧ(AREA)＝ΔＧ(AREA)old ＋Ｋ×｛ΔＧ−ΔＧ(AREA)old ｝
ここで、ΔＧ(AREA)は今回のエアフロメータ検出誤差学習値、ΔＧ(AREA)old は前回のエアフロメータ検出誤差学習値、Ｋはなまし係数である。
【００６３】
［検出吸入空気量補正ルーチン］
図１２に示す検出吸入空気量補正ルーチンは、図６のステップ１０６で起動されるサブルーチンであり、特許請求の範囲でいう検出吸入空気量補正手段としての役割を果たす。      
【００６４】
本ルーチンが起動されると、まず、ステップ５０１で、図１１に示すエアフロメータ検出誤差学習値ΔＧ(AREA)のマップにおいて、現在のエンジン運転状態（エンジン回転速度ＮＥと実吸入空気量Ｇ1 ）が、いずれの運転領域ＡＲＥＡであるかを判定する。
【００６５】
この後、ステップ５０２に進み、図１１に示すエアフロメータ検出誤差学習値ΔＧ(AREA)のマップを検索して、現在のエンジン運転状態に対応する運転領域ＡＲＥＡのエアフロメータ検出誤差学習値ΔＧ(AREA)を読み込む。
【００６６】
この後、ステップ５０３に進み、エアフロメータ１４で検出した仮の検出吸入空気量Ｇ0 をエアフロメータ検出誤差学習値ΔＧ(AREA)と過渡補正値ＧＦＷＤとを用いて次式により補正して最終的な検出吸入空気量Ｇを求める。
Ｇ＝Ｇ0 ＋ΔＧ(AREA)＋ＧＦＷＤ
【００６７】
ここで、過渡補正値ＧＦＷＤは、可変吸気バルブ制御やスロットル制御の過渡応答性と実吸入空気の過渡応答性との差を補正するための補正値である。
以上説明した本実施形態（１）の検出吸入空気量補正の実行例を図１３に示すタイムチャートを用いて説明する。
【００６８】
エアフロメータ１４の出力Ｖs の変動状態が脈動状態で且つ空燃比Ｆ／Ｂ制御が許可されている（つまり、空燃比センサ２４の検出精度が保証されている状態である）ときには、空燃比センサ２４で検出した空燃比ＡＦと燃料噴射量ＦＵＥＬとに基づいて実吸入空気量Ｇ1 を算出し、この実吸入空気量Ｇ1 とエアフロメータ１４で検出した仮の検出吸入空気量Ｇ0 とを比較してエアフロメータ検出誤差ΔＧを算出する。そして、このエアフロメータ検出誤差ΔＧを用いてその時のエンジン運転状態に対応するエアフロメータ検出誤差学習値ΔＧ(AREA)を更新して学習する。
【００６９】
この後、エアフロメータ１４の出力Ｖs の変動状態が過渡状態になったときや空燃比Ｆ／Ｂ制御が不許可（つまり、空燃比センサ２４の検出精度が保証されていない状態）になったときには、その時のエンジン運転状態に対応するエアフロメータ検出誤差学習値ΔＧ(AREA)を用いて仮の検出吸入空気量Ｇ0 を補正して最終的な検出吸入空気量Ｇを求める。      
【００７０】
以上説明した本実施形態（１）では、空燃比センサ２４で検出した空燃比ＡＦと燃料噴射量ＦＵＥＬとに基づいて算出した実吸入空気量Ｇ1 と、エアフロメータ１４で検出した検出吸入空気量Ｇ0 とを比較してエアフロメータ検出誤差ΔＧを算出するので、エアフロメータ検出誤差ΔＧを精度良く算出することができる。そして、このエアフロメータ検出誤差ΔＧを用いてエアフロメータ１４の検出吸入空気量Ｇ0 を補正するので、検出吸入空気量Ｇ0 を精度良く補正ことができ、可変吸気バルブ制御による吸入空気量制御を行うシステムのように、吸気脈動によるエアフロメータ検出誤差が大きくなるシステムの場合でも、吸入空気量の検出精度を向上させることができて、空燃比制御の精度（排気エミッション）を向上させることができる。
【００７１】
また、可変吸気バルブ制御による吸入空気量制御では、実用領域である低負荷領域でエアフロメータ検出誤差が大きくなる傾向があるが、低負荷領域では、空燃比Ｆ／Ｂ制御により排出ガスの空燃比が理論空燃比付近に制御されて空燃比センサ２４の検出精度が高い状態になっているため、空燃比センサ２４の出力に基づいてエアフロメータ検出誤差ΔＧをより精度良く算出することができ、実用領域である低負荷領域で要求される空燃比制御の高精度化にも対応することができる。
【００７２】
ところで、エアフロメータ出力Ｖs の変動状態が過渡状態のときには、吸気脈動によるエアフロメータ検出誤差ΔＧを精度良く算出することは困難である。また、空燃比センサ２４の検出精度が保証されていない状態のとき（例えば、空燃比センサ２４が未活性状態やフェール状態のとき、或は空燃比センサ２４の検出精度が悪い空燃比領域のとき）には、空燃比センサ２４の出力に基づくエアフロメータ検出誤差ΔＧの算出精度が低下する。
【００７３】
これらの事情を考慮して、本実施形態（１）では、エアフロメータ１４の出力Ｖs の変動状態が脈動状態で且つ空燃比センサ２４の検出精度が保証されている状態のときに、空燃比センサ２４の出力に基づいてエアフロメータ検出誤差ΔＧを算出するようにしたので、吸気脈動によるエアフロメータ検出誤差ΔＧを確実に精度良く算出することができる。
【００７４】
更に、本実施形態（１）では、エアフロメータ１４の出力Ｖs の変動状態が過渡状態のときや空燃比センサ２４の検出精度が保証されていない状態のときには、吸気脈動によるエアフロメータ検出誤差ΔＧを精度良く算出できないので、吸気脈動によるエアフロメータ検出誤差ΔＧを確実に精度良く算出できるとき（つまりエアフロメータ１４の出力Ｖs の変動状態が脈動状態で且つ空燃比センサ２４の検出精度が保証されている状態のとき）に算出したエアフロメータ検出誤差ΔＧを用いて検出吸入空気量Ｇ0 を補正する。これにより、吸気脈動によるエアフロメータ検出誤差ΔＧを精度良く算出できないときでも、エアフロメータ１４の検出吸入空気量Ｇ0 を精度良く補正することができ、吸入空気量の検出精度を向上させることができる。
【００７５】
しかも、本実施形態（１）では、エアフロメータ検出誤差ΔＧをエンジン運転状態に対応して学習し、検出吸入空気量Ｇ0 を補正する際に、エアフロメータ検出誤差学習値ΔＧ(AREA)の中からその時のエンジン運転状態に対応するエアフロメータ検出誤差学習値ΔＧ(AREA)を選択して用いるようにしたので、吸気脈動によるエアフロメータ検出誤差を精度良く算出することができない状態のときでも、制御システムの製造ばらつきや経時変化等の影響を受けずに、エンジン運転状態に対応した適正なエアフロメータ検出誤差学習値ΔＧ(AREA)を用いて検出吸入空気量Ｇ0 を補正することができ、吸入空気量の検出精度を更に向上させることができる。
【００７６】
《実施形態（２）》
ところで、可変吸気バルブ制御による吸入空気量制御では、低負荷時に吸気バルブ２８のリフト量が小さくなるため、各気筒で目標リフト量に対する実リフト量のばらつき（各気筒の部品公差や組付公差によるばらつき）の割合が大きくなって、気筒間の吸入空気量ばらつきが大きくなる傾向がある。
【００７７】
そこで、図１４乃至図１８に示す本発明の実施形態（２）では、エンジン１１の気筒間の吸入空気量ばらつきを表す気筒間ばらつき値ΔＣＹＬ#iを算出して、エアフロメータ検出誤差ΔＧと気筒間ばらつき値ΔＣＹＬ#iとに基づいて各気筒の検出吸入空気量の誤差（以下「気筒別検出吸入空気量誤差」という）ΔＧ#iを算出し、その気筒別検出吸入空気量誤差ΔＧ#iを用いて各気筒毎に検出吸入空気量Ｇ0 を補正して最終的な気筒別検出吸入空気量Ｇ#iを求めるようにしている。ここで、例えば４気筒のエンジン１１の場合は＃ｉ＝＃１〜＃４である。
【００７８】
［検出吸入空気量補正ベースルーチン］
本実施形態（２）でＥＣＵ２７が実行する図１４に示す検出吸入空気量補正ベースルーチンでは、まず、ステップ６０１、６０２で、エアフロメータ１４の出力Ｖs に応じた仮の検出吸入空気量Ｇ0 をマップ等により算出した後、ステップ６０３に進み、後述する図１５に示す気筒間ばらつき算出ルーチンを実行して、吸気管圧力センサ１８で検出した吸気管圧力ＭＡＰに基づいて各気筒の気筒間ばらつき値ΔＣＹＬ#iを算出する。
【００７９】
そして、次のステップ６０４で、エアフロメータ１４の出力Ｖs の変動状態が脈動状態であると判定され、且つ、空燃比Ｆ／Ｂ制御が許可されている（つまり、空燃比センサ２４の検出精度が保証されている状態である）と判定された場合には、ステップ６０５に進み、前述した図９に示すエアフロメータ検出誤差算出ルーチンを実行して、空燃比センサ２４で検出した空燃比ＡＦに基づいてエアフロメータ検出誤差ΔＧを算出する。
【００８０】
この後、ステップ６０６に進み、後述する図１６に示す気筒別検出吸入空気量誤差算出ルーチンを実行して、エアフロメータ検出誤差ΔＧと各気筒の気筒間ばらつき値ΔＣＹＬ#iに基づいて各気筒の検出吸入空気量の誤差（気筒別検出吸入空気量誤差）ΔＧ#iを算出する。
【００８１】
この後、ステップ６０７に進み、後述する図１７に示す気筒別検出吸入空気量誤差学習ルーチンを実行して、気筒別検出吸入空気量誤差ΔＧ#iを用いてその時のエンジン運転状態に対応する気筒別検出吸入空気量誤差学習値ΔＧ#i(AREA)を更新して学習する。
【００８２】
これに対して、上記ステップ６０４で、エアフロメータ１４の出力Ｖs の変動状態が過渡状態であると判定された場合、又は、空燃比Ｆ／Ｂ制御が不許可である（つまり、空燃比センサ１４の検出精度が保証されていない状態である）と判定された場合には、ステップ６０８に進み、後述する図１８に示す気筒別検出吸入空気量補正ルーチンを実行して、気筒別検出吸入空気量誤差学習値ΔＧ#i(AREA)の中からその時のエンジン運転状態に対応する気筒別検出吸入空気量誤差学習値ΔＧ#i(AREA)を選択し、その気筒別検出吸入空気量誤差学習値ΔＧ#i(AREA)を用いてエアフロメータ１４で検出した仮の検出吸入空気量Ｇ0 を補正して最終的な気筒別検出吸入空気量Ｇ#iを求める。
【００８３】
［気筒間ばらつき算出ルーチン］
図１５に示す気筒間ばらつき算出ルーチンは、図１４のステップ６０３で起動されるサブルーチンであり、特許請求の範囲でいう気筒間ばらつき算出手段としての役割を果たす。
【００８４】
本ルーチンが起動されると、まず、ステップ７０１で、吸気管圧力センサ１８の出力ＭＡＰを読み込んだ後、ステップ７０２に進み、クランク角カウンタＣＣＲＮＫのカウント値を読み込む。このクランク角カウンタＣＣＲＮＫは、クランク角センサ２６の出力信号に基づいて例えば３０℃Ａ毎に「１」ずつインクリメントされるため、クランク角カウンタＣＣＲＮＫの２４カウントが１サイクル（７２０℃Ａ）に相当する。尚、クランク角カウンタＣＣＲＮＫは、「２４」になった時点で「０」にリセットされる。また、クランク角カウンタＣＣＲＮＫ＝０のクランク回転位置が、第１気筒＃１の圧縮上死点（圧縮ＴＤＣ）に相当し、クランク角カウンタＣＣＲＮＫ＝６、１２、１８のクランク回転位置が、それぞれ第３気筒＃３、第４気筒＃４、第２気筒＃２の圧縮ＴＤＣに相当するように設定されている。
【００８５】
この後、ステップ７０３に進み、各気筒の吸気行程に対応する期間の吸気管圧力の最小値ＭＡＰmin(#i) を算出する。
第１気筒＃１の吸気管圧力最小値ＭＡＰmin(#1) を算出する場合は、クランク角カウンタＣＣＲＮＫ＝１２〜１７の期間、つまり、第１気筒＃１の吸気行程に対応する期間の吸気管圧力ＭＡＰの最小値を算出する。
【００８６】
第２気筒＃２の吸気管圧力最小値ＭＡＰmin(#2) を算出する場合は、クランク角カウンタＣＣＲＮＫ＝６〜１１の期間、つまり、第２気筒＃２の吸気行程に対応する期間の吸気管圧力ＭＡＰの最小値を算出する。
【００８７】
第３気筒＃３の吸気管圧力最小値ＭＡＰmin(#3) を算出する場合は、クランク角カウンタＣＣＲＮＫ＝１８〜２３の期間、つまり、第３気筒＃３の吸気行程に対応する期間の吸気管圧力ＭＡＰの最小値を算出する。
【００８８】
第４気筒＃４の吸気管圧力最小値ＭＡＰmin(#4) を算出する場合は、クランク角カウンタＣＣＲＮＫ＝０〜５の期間、つまり、第４気筒＃４の吸気行程に対応する期間の吸気管圧力ＭＡＰの最小値を算出する。
【００８９】
この後、ステップ７０４に進み、全気筒の吸気管圧力最小値ＭＡＰmin(#1) 〜ＭＡＰmin(#4) の平均値ＭＡＰmin(ave)を算出した後、ステップ７０５に進み、各気筒の気筒間ばらつき値ΔＣＹＬ#iを次の各式により算出する。
ΔＣＹＬ#1＝｛１００−ＭＡＰmin(#1) ｝／｛１００−ＭＡＰmin(ave)｝
ΔＣＹＬ#2＝｛１００−ＭＡＰmin(#2) ｝／｛１００−ＭＡＰmin(ave)｝
ΔＣＹＬ#3＝｛１００−ＭＡＰmin(#3) ｝／｛１００−ＭＡＰmin(ave)｝
ΔＣＹＬ#4＝｛１００−ＭＡＰmin(#4) ｝／｛１００−ＭＡＰmin(ave)｝
【００９０】
尚、本ルーチンでは、各気筒の吸気行程に対応する期間の吸気管圧力最小値ＭＡＰmin(#i) に基づいて各気筒の気筒間ばらつき値ΔＣＹＬ#iを算出したが、各気筒の吸気行程に対応する期間の吸気管圧力の平均値、面積等に基づいて各気筒の気筒間ばらつき値ΔＣＹＬ#iを算出するようにしても良い。
【００９１】
［気筒別検出吸入空気量誤差算出ルーチン］
図１６に示す気筒別検出吸入空気量誤差算出ルーチンは、図１４のステップ６０６で起動されるサブルーチンであり、特許請求の範囲でいう気筒別検出吸入空気量誤差算出手段としての役割を果たす。
【００９２】
本ルーチンが起動されると、まず、ステップ８０１で、各気筒の気筒間ばらつき値ΔＣＹＬ#iを読み込んだ後、ステップ８０２に進み、エアフロメータ検出誤差ΔＧを読み込む。
【００９３】
この後、ステップ８０３に進み、各気筒の気筒別検出吸入空気量誤差ΔＧ#iを次の各式により算出する。
ΔＧ#1＝ΔＧ×ΔＣＹＬ#1
ΔＧ#2＝ΔＧ×ΔＣＹＬ#2
ΔＧ#3＝ΔＧ×ΔＣＹＬ#3
ΔＧ#4＝ΔＧ×ΔＣＹＬ#4
【００９４】
［気筒別検出吸入空気量誤差学習ルーチン］
図１７に示す気筒別検出吸入空気量誤差学習ルーチンは、図１４のステップ６０７で起動されるサブルーチンであり、特許請求の範囲でいう気筒別検出吸入空気量誤差学習手段としての役割を果たす。
【００９５】
本ルーチンが起動されると、まず、ステップ９０１で、気筒別検出吸入空気量誤差学習値ΔＧ#i(AREA)のマップ（図示せず）において、現在のエンジン運転状態（エンジン回転速度ＮＥと実吸入空気量Ｇ1 ）が、いずれの運転領域ＡＲＥＡであるかを判定する。ここで、気筒別検出吸入空気量誤差学習値ΔＧ#i(AREA)のマップは、エンジン回転速度ＮＥと実吸入空気量Ｇ1 とをパラメータとする複数の運転領域ＡＲＥＡに区分され、各運転領域ＡＲＥＡ毎に、それぞれ気筒別検出吸入空気量誤差学習値ΔＧ#i(AREA)が記憶されている。
【００９６】
この後、ステップ９０２に進み、図１６の気筒別検出吸入空気量誤差算出ルーチンで算出した気筒別検出吸入空気量誤差ΔＧ#iをなまし処理して現在のエンジン運転状態に対応する運転領域ＡＲＥＡの気筒別検出吸入空気量誤差学習値ΔＧ#i(AREA)を求め、その値で該当する運転領域ＡＲＥＡの気筒別検出吸入空気量誤差学習値ΔＧ#i(AREA)を更新する。
ΔＧ#1(AREA)＝ΔＧ#1(AREA)old ＋Ｋ×｛ΔＧ#1−ΔＧ#1(AREA)old ｝
ΔＧ#2(AREA)＝ΔＧ#2(AREA)old ＋Ｋ×｛ΔＧ#2−ΔＧ#2(AREA)old ｝
ΔＧ#3(AREA)＝ΔＧ#3(AREA)old ＋Ｋ×｛ΔＧ#3−ΔＧ#3(AREA)old ｝
ΔＧ#4(AREA)＝ΔＧ#4(AREA)old ＋Ｋ×｛ΔＧ#4−ΔＧ#4(AREA)old ｝
ここで、ΔＧ#i(AREA)は今回の気筒別検出吸入空気量誤差学習値、ΔＧ#i(AREA)old は前回の気筒別検出吸入空気量誤差学習値、Ｋはなまし係数である。
【００９７】
［気筒別検出吸入空気量補正ルーチン］
図１８に示す気筒別検出吸入空気量補正ルーチンは、図１４のステップ６０８で起動されるサブルーチンであり、特許請求の範囲でいう気筒別検出吸入空気量補正手段としての役割を果たす。
【００９８】
本ルーチンが起動されると、まず、ステップ１００１で、気筒別検出吸入空気量誤差学習値ΔＧ#i(AREA)のマップ（図示せず）において、現在のエンジン運転状態（エンジン回転速度ＮＥと実吸入空気量Ｇ1 ）が、いずれの運転領域ＡＲＥＡであるかを判定する。
【００９９】
この後、ステップ１００２に進み、気筒別検出吸入空気量誤差学習値ΔＧ#i(AREA)のマップを検索して、現在のエンジン運転状態に対応する運転領域ＡＲＥＡの気筒別検出吸入空気量誤差学習値ΔＧ#1(AREA)〜ΔＧ#4(AREA)を読み込む。
【０１００】
この後、ステップ１００３に進み、エアフロメータ１４で検出した仮の検出吸入空気量Ｇ0 を気筒別検出吸入空気量誤差学習値ΔＧ#i(AREA)と気筒別過渡補正値ＧＦＷＤ#iとを用いて次の各式により補正して最終的な気筒別検出吸入空気量Ｇ#iを求める。
Ｇ#1＝Ｇ0 ＋ΔＧ#1(AREA)＋ＧＦＷＤ#1
Ｇ#2＝Ｇ0 ＋ΔＧ#2(AREA)＋ＧＦＷＤ#2
Ｇ#3＝Ｇ0 ＋ΔＧ#3(AREA)＋ＧＦＷＤ#3
Ｇ#4＝Ｇ0 ＋ΔＧ#4(AREA)＋ＧＦＷＤ#4
【０１０１】
ここで、気筒別過渡補正値ＧＦＷＤ#iは、過渡補正値ＧＦＷＤに気筒間ばらつき値ΔＣＹＬ#iを乗算して求めたものである。
ＧＦＷＤ#i＝ＧＦＷＤ×ΔＣＹＬ#i
【０１０２】
以上説明した本実施形態（２）では、エアフロメータ検出誤差ΔＧと気筒間ばらつき値ΔＣＹＬ#iとに基づいて気筒別検出吸入空気量誤差ΔＧ#iを算出し、この気筒別検出吸入空気量誤差ΔＧ#iを用いて各気筒毎に検出吸入空気量Ｇ0 を補正して最終的な気筒別検出吸入空気量Ｇ#iを求めるようにしたので、気筒間の吸入空気量ばらつきを考慮して、各気筒毎に検出吸入空気量Ｇ0 を補正することができ、気筒間の吸入空気量ばらつきが大きくなる場合でも、各気筒毎に吸入空気量を精度良く検出することができる。
【０１０３】
《実施形態（３）》
上記実施形態（２）では、吸気管圧力ＭＡＰに基づいて各気筒の気筒間ばらつき値ΔＣＹＬ#iを算出したが、図１９に示す本発明の実施形態（３）では、クランク角センサ２６の出力信号に基づいて算出した回転変動に基づいて各気筒の気筒間ばらつき値ΔＣＹＬ#iを算出するようにしている。
【０１０４】
［気筒間ばらつき算出ルーチン］
本実施形態（３）でＥＣＵ２７が実行する図１９に示す気筒間ばらつき算出ルーチンでは、まず、ステップ１１０１で、クランク角カウンタＣＣＲＮＫのカウント値を読み込む。前述したように、このクランク角カウンタＣＣＲＮＫは、クランク角センサ２６の出力信号に基づいて例えば３０℃Ａ毎に「１」ずつインクリメントされる。
【０１０５】
この後、ステップ１１０２に進み、クランク軸が３０℃Ａ回転するのに要した時間Ｔ３０（クランク角カウンタＣＣＲＮＫの前回のインクリメントタイミングから今回のインクリメントタイミングまでの時間）を読み込む。
【０１０６】
そして、次のステップ１１０３で、各気筒の燃焼行程に対応する期間のＴ３０の最小値Ｔ３０ＭＩＮ(#i)と最大値Ｔ３０ＭＡＸ(#i)を算出する。
第１気筒＃１の最小値Ｔ３０ＭＩＮ(#1)と最大値Ｔ３０ＭＡＸ(#1)を算出する場合は、クランク角カウンタＣＣＲＮＫ＝０〜５の期間、つまり、第１気筒＃１の燃焼行程に対応する期間のＴ３０の最小値と最大値を算出する。
【０１０７】
第２気筒＃２の最小値Ｔ３０ＭＩＮ(#2)と最大値Ｔ３０ＭＡＸ(#2)を算出する場合は、クランク角カウンタＣＣＲＮＫ＝１８〜２３の期間、つまり、第２気筒＃２の燃焼行程に対応する期間のＴ３０の最小値と最大値を算出する。
【０１０８】
第３気筒＃３の最小値Ｔ３０ＭＩＮ(#3)と最大値Ｔ３０ＭＡＸ(#3)を算出する場合は、クランク角カウンタＣＣＲＮＫ＝６〜１１の期間、つまり、第３気筒＃３の燃焼行程に対応する期間のＴ３０の最小値と最大値を算出する。
【０１０９】
第４気筒＃４の最小値Ｔ３０ＭＩＮ(#4)と最大値Ｔ３０ＭＡＸ(#4)を算出する場合は、クランク角カウンタＣＣＲＮＫ＝１２〜１７の期間、つまり、第４気筒＃４の燃焼行程に対応する期間のＴ３０の最小値と最大値を算出する。
【０１１０】
この後、ステップ１１０４に進み、各気筒の回転変動ΔＴ３０(#i)を次の各式により算出する。
ΔＴ３０(#1)＝Ｔ３０ＭＡＸ(#1)−Ｔ３０ＭＩＮ(#1)
ΔＴ３０(#2)＝Ｔ３０ＭＡＸ(#2)−Ｔ３０ＭＩＮ(#2)
ΔＴ３０(#3)＝Ｔ３０ＭＡＸ(#3)−Ｔ３０ＭＩＮ(#3)
ΔＴ３０(#4)＝Ｔ３０ＭＡＸ(#4)−Ｔ３０ＭＩＮ(#4)
【０１１１】
この後、ステップ１１０５に進み、全気筒の回転変動ΔＴ３０(#1)〜ΔＴ３０(#4)の平均値ΔＴ３０(ave) を算出した後、ステップ１１０６に進み、各気筒の気筒間ばらつき値ΔＣＹＬ#iを次の各式により算出する。
ΔＣＹＬ#1＝ΔＴ３０(#1)／ΔＴ３０(ave)
ΔＣＹＬ#2＝ΔＴ３０(#2)／ΔＴ３０(ave)
ΔＣＹＬ#3＝ΔＴ３０(#3)／ΔＴ３０(ave)
ΔＣＹＬ#4＝ΔＴ３０(#4)／ΔＴ３０(ave)
【０１１２】
《実施形態（４）》
図２０及び図２１に示す本発明の実施形態（４）では、空燃比センサ２４で検出した空燃比ＡＦに基づいて各気筒の気筒間ばらつき値ΔＣＹＬ#iを算出するようにしている。
【０１１３】
［気筒間ばらつき算出ルーチン］
本実施形態（４）でＥＣＵ２７が実行する図２０に示す気筒間ばらつき算出ルーチンでは、まず、ステップ１２０１で、空燃比センサ２４の出力ＡＦを読み込んだ後、ステップ１２０２に進み、クランク角カウンタＣＣＲＮＫのカウント値を読み込む。
【０１１４】
この後、ステップ１２０３に進み、エンジン１１から排出された排出ガスが空燃比センサ２４で検出されるまでに要する排気系の遅れ時間ＤＥＬＹを算出する。この排気系の遅れ時間ＤＥＬＹは、エンジン運転状態（例えばエンジン回転速度ＮＥと実吸入空気量Ｇ1 ）に応じて変化するため、図２１に示す排気系の遅れ時間ＤＥＬＹのマップを検索して、現在のエンジン運転状態（例えばエンジン回転速度ＮＥと実吸入空気量Ｇ1 ）に応じた遅れ時間ＤＥＬＹを算出する。
【０１１５】
そして、次のステップ１２０４で、クランク角カウンタＣＣＲＮＫのカウント値と排気系の遅れ時間ＤＥＬＹとに基づいて各気筒の排気行程に対応する期間の排出ガスの空燃比ＡＦの平均値を算出することで、各気筒の空燃比平均値ＡＦ(#i)を算出する。
【０１１６】
この後、ステップ１２０５に進み、全気筒の空燃比平均値ＡＦ(#1)〜ＡＦ(#4)の平均値ＡＦ(ave) を算出した後、ステップ１２０６に進み、各気筒の気筒間ばらつき値ΔＣＹＬ#iを次の各式により算出する。
ΔＣＹＬ#1＝ＡＦ(#1)／ＡＦ(ave)
ΔＣＹＬ#2＝ＡＦ(#2)／ＡＦ(ave)
ΔＣＹＬ#3＝ＡＦ(#3)／ＡＦ(ave)
ΔＣＹＬ#4＝ＡＦ(#4)／ＡＦ(ave)
【０１１７】
《実施形態（５）》
図２２に示す本発明の実施形態（５）では、エンジン１１の各気筒に、それぞれ筒内圧力センサ又は筒内圧力センサ付きの点火プラグ（いずれも図示せず）を設け、各気筒の筒内圧力センサで検出した筒内圧力ＣＰに基づいて各気筒の気筒間ばらつき値ΔＣＹＬ#iを算出するようにしている。
【０１１８】
［気筒間ばらつき算出ルーチン］
本実施形態（５）でＥＣＵ２７が実行する図２２に示す気筒間ばらつき算出ルーチンでは、まず、ステップ１３０１で、各気筒の筒内圧力センサで検出した筒内圧力ＣＰを読み込んだ後、ステップ１３０２に進み、クランク角カウンタＣＣＲＮＫのカウント値を読み込む。
【０１１９】
この後、ステップ１３０３に進み、各気筒の圧縮行程に対応する期間の筒内圧力の最大値ＣＰmax(#i) を算出する。
第１気筒＃１の筒内圧力最大値ＣＰmax(#1) を算出する場合は、クランク角カウンタＣＣＲＮＫ＝１８〜２３の期間、つまり、第１気筒＃１の圧縮行程に対応する期間の筒内圧力ＣＰの最大値を算出する。
【０１２０】
第２気筒＃２の筒内圧力最大値ＣＰmax(#2) を算出する場合は、クランク角カウンタＣＣＲＮＫ＝１２〜１７の期間、つまり、第２気筒＃２の圧縮行程に対応する期間の筒内圧力ＣＰの最大値を算出する。
【０１２１】
第３気筒＃３の筒内圧力最大値ＣＰmax(#3) を算出する場合は、クランク角カウンタＣＣＲＮＫ＝０〜５の期間、つまり、第３気筒＃３の圧縮行程に対応する期間の筒内圧力ＣＰの最大値を算出する。
【０１２２】
第４気筒＃４の筒内圧力最大値ＣＰmax(#4) を算出する場合は、クランク角カウンタＣＣＲＮＫ＝６〜１１の期間、つまり、第４気筒＃４の圧縮行程に対応する期間の筒内圧力ＣＰの最大値を算出する。
【０１２３】
この後、ステップ１３０４に進み、全気筒の筒内圧力最大値ＣＰmax(#1) 〜ＣＰmax(#4) の平均値ＣＰmax(ave)を算出した後、ステップ１３０５に進み、各気筒の気筒間ばらつき値ΔＣＹＬ#iを次の各式により算出する。
ΔＣＹＬ#1＝ＣＰmax(#1) ／ＣＰmax(ave)
ΔＣＹＬ#2＝ＣＰmax(#2) ／ＣＰmax(ave)
ΔＣＹＬ#3＝ＣＰmax(#3) ／ＣＰmax(ave)
ΔＣＹＬ#4＝ＣＰmax(#4) ／ＣＰmax(ave)
【０１２４】
尚、本ルーチンでは、各気筒の圧縮行程に対応する期間の筒内圧力最大値ＣＰmax(#i) に基づいて各気筒の気筒間ばらつき値ΔＣＹＬ#iを算出したが、各気筒の圧縮行程に対応する期間の筒内圧力の平均値、面積、所定クランク角の筒内圧力検出値等に基づいて各気筒の気筒間ばらつき値ΔＣＹＬ#iを算出するようにしても良い。或は、各気筒の燃焼行程に対応する期間の筒内圧力の最大値、平均値、面積、所定クランク角の筒内圧力検出値等に基づいて各気筒の気筒間ばらつき値ΔＣＹＬ#iを算出するようにしても良い。
【０１２５】
《実施形態（６）》
上記各実施形態（１）〜（５）では、図７に示す変動状態判別ルーチンによりエアフロメータ１４の出力Ｖs の変動状態を判別したが、判別方法は適宜変更しても良く、例えば、図２３に示す変動状態判別ルーチンによりエアフロメータ１４の出力Ｖs の変動状態を判別するようにしても良い。
【０１２６】
［変動状態判別ルーチン］
図２３に示す変動状態判別ルーチンでは、まず、ステップ１４０１で、エアフローメータ１４の出力Ｖs を読み込んだ後、ステップ１４０２に進み、エアフローメータ１４の今回の出力Ｖs(i)から前回の出力Ｖs(i-1)を差し引いてエアフローメータ出力Ｖs の変化量ΔＶs(i)を求める。
ΔＶs(i)＝Ｖs(i)−Ｖs(i-1)
【０１２７】
この後、ステップ１４０３に進み、本ルーチンの処理を開始してからエンジン１１が所定クランク角（例えば１８０℃Ａ）回転したか否かを判定し、所定クランク角回転していなければ、エアフローメータ出力Ｖs の変化量ΔＶs(i)を算出する処理（ステップ１４０１、１４０２）を繰り返す。
【０１２８】
その後、本ルーチンの処理を開始してからエンジン１１が所定クランク角回転したときに、ステップ１４０４に進み、エアフローメータ出力Ｖs の変化量ΔＶs(i)の総和ΣΔＶs(i)を算出する。
【０１２９】
この後、ステップ１４０５に進み、エアフローメータ出力Ｖs の変化量ΔＶs(i)の総和ΣΔＶs(i)が過渡判定値Ａよりも大きいか否かを判定する。その結果、総和ΣΔＶs(i)が過渡判定値Ａよりも大きいと判定された場合には、ステップ１４０７に進み、エアフローメータ１４の出力Ｖs の変動状態が過渡状態（増加状態）であると判定して本ルーチンを終了する。
【０１３０】
一方、上記ステップ１４０５で、エアフローメータ出力Ｖs の変化量ΔＶs(i)の総和ΣΔＶs(i)が過渡判定値Ａ以下であると判定された場合には、ステップ１４０６に進み、総和ΣΔＶs(i)が過渡判定値（−Ａ）よりも小さいか否かを判定する。その結果、総和ΣΔＶs(i)が過渡判定値（−Ａ）よりも小さいと判定された場合には、ステップ１４０７に進み、エアフローメータ１４の出力Ｖs の変動状態が過渡状態（減少状態）であると判定して本ルーチンを終了する。
【０１３１】
また、エアフローメータ出力Ｖs の変化量ΔＶs(i)の総和ΣΔＶs(i)が過渡判定値Ａから−Ａまでの範囲であると判定された場合には、ステップ１４０８に進み、エアフロメータ１４の出力Ｖs の変動状態が脈動状態であると判定して本ルーチンを終了する。
【０１３２】
尚、以上説明した各実施形態（１）〜（６）では、エアフロメータ出力Ｖs が脈動状態で且つ空燃比センサ２４の検出精度が保証されている状態のときに、空燃比センサ２４の出力に基づいてエアフロメータ検出誤差ΔＧを算出するようにしたが、これに限定されず、空燃比センサ２４の検出精度が保証されている状態のときに、空燃比センサ２４の出力に基づいてエアフロメータ検出誤差ΔＧを算出するようにしても良い。この場合、更に、空燃比センサ２４の検出精度が保証されていない状態のときには、空燃比センサ２４の検出精度が保証されている状態のときに算出したエアフロメータ検出誤差ΔＧを用いて検出吸入空気量Ｇ0 を補正するようにしても良い。このようにしても、空燃比センサ２４の出力に基づいてエアフロメータ検出誤差ΔＧを精度良く算出することができると共に、エアフロメータ検出誤差ΔＧを精度良く算出することができないときでも、エアフロメータで検出した検出吸入空気量Ｇ0 を精度良く補正することができ、吸入空気量の検出精度を向上させて、空燃比制御の精度を向上させることができる。
【０１３３】
また、上記各実施形態（１）〜（６）では、空燃比センサ２４で検出した空燃比ＡＦに基づいてエアフロメータ検出誤差ΔＧを算出したが、空燃比センサ２４で検出した空燃比ＡＦを目標空燃比に一致させる空燃比フィードバック制御を実行する場合には、目標空燃比に基づいてエアフロメータ検出誤差ΔＧを算出するようにしても良い。具体的には、図９のエアフロメータ検出誤差算出ルーチンのステップ３０７、３０８の空燃比ＡＦに代えて、空燃比フィードバック制御の目標空燃比を用いるようにしても良い。
【０１３４】
空燃比フィードバック制御の実行中は、排出ガスの空燃比ＡＦが目標空燃比に精度良く制御されるため、目標空燃比に基づいてエアフロメータ検出誤差ΔＧを算出しても、空燃比センサ２４で検出した空燃比ＡＦに基づいてエアフロメータ検出誤差ΔＧを算出する場合と同様の効果を得ることができる。
【０１３５】
また、上記各実施形態（１）〜（６）では、排出ガスの空燃比を検出する空燃比センサ２４を搭載したシステムに本発明を適用したが、排出ガスのリッチ／リーンを検出する酸素センサや、その他の排出ガスセンサを搭載したシステムに本発明を適用しても良い。
また、本発明の適用範囲は、４気筒のエンジンに限定されず、５気筒以上又は３気筒以下のエンジンに本発明を適用しても良い。
【図面の簡単な説明】
【０１３６】
【図１】本発明の実施形態（１）におけるエンジン制御システム全体の概略構成図である。
【図２】可変吸気バルブリフト機構の正面図である。
【図３】可変吸気バルブリフト機構の高リフトモード時の動作を説明するための図である。
【図４】可変吸気バルブリフト機構の高リフトモード時の動作を説明するための図であるである。。
【図５】可変吸気バルブリフト機構によるバルブリフト量の連続可変動作を説明するためのバルブリフト特性図である。
【図６】実施形態（１）の検出吸入空気量補正ベースルーチンの処理の流れを示すフローチャートである。
【図７】実施形態（１）の変動状態判別ルーチンの処理の流れを示すフローチャートである。
【図８】（ａ）はエアフロメータ出力の脈動状態を示すタイムチャート、（ｂ）はエアフロメータ出力の過渡状態を示すタイムチャートである。
【図９】実施形態（１）のエアフロメータ検出誤差算出ルーチンの処理の流れを示すフローチャートである。
【図１０】実施形態（１）のエアフロメータ検出誤差学習ルーチンの処理の流れを示すフローチャートである。
【図１１】エアフロメータ検出誤差学習値ΔＧ(AREA)のマップを概念的に示す図である。
【図１２】実施形態（１）の検出吸入空気量補正ルーチンの処理の流れを示すフローチャートである。
【図１３】実施形態（１）の実行例を示すタイムチャートである。
【図１４】実施形態（２）の検出吸入空気量補正ベースルーチンの処理の流れを示すフローチャートである。
【図１５】実施形態（２）の気筒間ばらつき算出ルーチンの処理の流れを示すフローチャートである。
【図１６】実施形態（２）の気筒別検出吸入空気量誤差算出ルーチンの処理の流れを示すフローチャートである。
【図１７】実施形態（２）の気筒別検出吸入空気量誤差学習ルーチンの処理の流れを示すフローチャートである。
【図１８】実施形態（２）の気筒別検出吸入空気量補正ルーチンの処理の流れを示すフローチャートである。
【図１９】実施形態（３）の気筒間ばらつき算出ルーチンの処理の流れを示すフローチャートである。
【図２０】実施形態（４）の気筒間ばらつき算出ルーチンの処理の流れを示すフローチャートである。
【図２１】排気系の遅れ時間ＤＥＬＹのマップを概念的に示す図である。
【図２２】実施形態（５）の気筒間ばらつき算出ルーチンの処理の流れを示すフローチャートである。
【図２３】実施形態（６）の変動状態判別ルーチンの処理の流れを示すフローチャートである。
【符号の説明】
【０１３７】
１１…エンジン（内燃機関）、１２…吸気管、１４…エアフロメータ、１５…スロットルバルブ、１８…吸気管圧力センサ、２０…燃料噴射弁、２１…点火プラグ、２２…排気管、２４…空燃比センサ（排出ガスセンサ）、２６…クランク角センサ、２７…ＥＣＵ（変動状態判別手段，エアフロメータ検出誤差算出手段，エアフロメータ検出誤差学習手段，検出吸入空気量補正手段，気筒間ばらつき算出手段，気筒別検出吸入空気量誤差算出手段，気筒別検出吸入空気量誤差学習手段，気筒別検出吸入空気量補正手段）、２８…吸気バルブ、２９…排気バルブ、３０…可変吸気バルブリフト機構、３１…可変排気バルブリフト機構
【図１】
2008180227.tif 000003
【図２】
2008180227.tif 000004
【図３】
2008180227.tif 000005
【図４】
2008180227.tif 000006
【図５】
2008180227.tif 000007
【図６】
2008180227.tif 000008
【図７】
2008180227.tif 000009
【図８】
2008180227.tif 000010
【図９】
2008180227.tif 000011
【図１０】
2008180227.tif 000012
【図１１】
2008180227.tif 000013
【図１２】
2008180227.tif 000014
【図１３】
2008180227.tif 000015
【図１４】
2008180227.tif 000016
【図１５】
2008180227.tif 000017
【図１６】
2008180227.tif 000018
【図１７】
2008180227.tif 000019
【図１８】
2008180227.tif 000020
【図１９】
2008180227.tif 000021
【図２０】
2008180227.tif 000022
【図２１】
2008180227.tif 000023
【図２２】
2008180227.tif 000024
【図２３】
2008180227.tif 000025