(57)【要約】【課題】空燃比の推定を適切に行い、減筒運転実行中に不具合が発生することを防止することができる制御装置を提供する。【解決手段】ＥＣＵ１の空燃比推定部１０６は、内燃機関２０が、全ての気筒２０１を運転させる全筒運転実行中の場合は、第１オブザーバを用いて各気筒２０１の空燃比を推定する。一方で、内燃機関２０が、一部の気筒２０１を休止させるとともに、他の気筒２０１を運転させる減筒運転実行中の場合は、第１オブザーバを用いた各気筒２０１の空燃比の推定を行わない。【選択図】図２
2016109034.tif 000002
【特許請求の範囲】
【請求項１】
複数の気筒（２０１）を有する内燃機関（２０）の運転を制御し、各気筒から排出された排気ガスが集められる排気集合部（４０２ｂ）に設けられた空燃比センサ（４２１）の検出情報に基づいて各気筒の空燃比を制御する制御装置（１）において、
前記複数の気筒の全てを運転させる全筒運転を実行する全筒運転実行手段（１０１）と、
前記複数の気筒のうち一部の気筒（＃２，＃３）を休止させるとともに、他の気筒（＃１，＃４）を運転させる減筒運転を実行する減筒運転実行手段（１０２）と、
前記全筒運転及び前記減筒運転の一方から他方に移行させる運転移行手段（１０３）と、
前記運転移行手段及び前記空燃比センサの検出情報に基づいて、前記内燃機関が前記全筒運転実行中、前記減筒運転実行中、又は、それらへの移行中のいずれの運転状態にあるかを判定する運転状態判定手段（１０４）と、
前記空燃比センサの検出情報に基づいて各気筒の空燃比を推定する空燃比推定手段（１０６）と、
前記空燃比推定手段によって推定された各気筒の空燃比に基づいて、各気筒に供給する燃料の量を補正する燃料補正手段（１０７）と、を備え、
前記空燃比推定手段は、前記内燃機関が前記全筒運転実行中の場合は第１オブザーバを用いて各気筒の空燃比を推定する一方で、前記内燃機関が前記減筒運転実行中の場合は前記第１オブザーバを用いた各気筒の空燃比の推定を行わないことを特徴とする制御装置。
【請求項２】
前記燃料補正手段は、前記内燃機関の運転状態が移行中の場合は、燃料の量の補正を行わないことを特徴とする請求項１に記載の制御装置。
【請求項３】
前記空燃比推定手段は、前記内燃機関が前記減筒運転実行中の場合は、前記第１オブザーバと異なる第２オブザーバを用いて運転中の気筒の空燃比の推定を行うことを特徴とする請求項１に記載の制御装置。
【請求項４】
前記空燃比推定手段は、前記一部の気筒が休止を開始してから予め定められた第１所定時間と、前記一部の気筒が運転を開始してから第２所定時間とは、前記空燃比センサの検出情報に基づいた各気筒の空燃比の推定を行わないことを特徴とする請求項１に記載の制御装置。
【請求項５】
所定タイミングで前記空燃比センサの検出情報を取得する検出情報取得手段（１０５）を備え、
前記検出情報取得手段は、各気筒のクランク角に対応する基準信号に基づいて前記空燃比センサの検出情報を取得し、
前記基準信号は、前記全筒運転実行中と前記減筒運転実行中とで互いに異なるように設定されていることを特徴とする請求項１に記載の制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数の気筒を有する内燃機関の運転を制御し、各気筒から排出された排気ガスが集められる排気集合部に設けられた空燃比センサの検出情報に基づいて各気筒の空燃比を制御する制御装置に関する。
【背景技術】
【０００２】
内燃機関の運転を制御する制御装置において、空燃比を目標値と一致させるために、気筒への燃料の供給量を補正するものが提案されている。しかしながら、複数の気筒を有する内燃機関の場合、燃料噴射装置の機体差や、経年変化等によって、燃料供給量は気筒ごとにばらつきが生じ、その結果、空燃比も気筒ごとにばらつきが生じてしまう。このばらつきは、内燃機関の燃費や、排気ガス成分の悪化を招く懸念がある。
【０００３】
これに対し、下記特許文献１には、空燃比の推定を気筒ごとに行い、燃料供給量の補正も気筒ごとに行うことで、気筒ごとの空燃比ばらつきを解消する制御（以下、「気筒別空燃比制御」とも称する）を行う制御装置が開示されている。ここで、空燃比センサは、各気筒から排出された排気ガスが集められる排気集合部に設けられている。下記特許文献１の制御装置は、当該空燃比センサの検出情報と、その空燃比センサの値が過去の他気筒の空燃比の影響を受けるというモデル情報とに基づいて、空燃比の推定を行う。これにより、空燃比センサを気筒ごとに設けることなく、製造コストの増加を抑制しながらも、空燃比の推定を気筒ごとに行って空燃比ばらつきを解消し、燃費やエミッションの改善が図ることができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−２０７４０５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
このほか、内燃機関に減筒運転を行わせる制御装置が普及しつつある。減筒運転とは、内燃機関の運転が所定の条件となった場合に、その複数の気筒のうち一部の気筒を休止させるとともに、他の気筒を運転させるものである。
【０００６】
ここで、気筒の「運転」とは、気筒の吸排気弁を開閉可能な状態とし、その気筒に燃料を供給して燃焼を行うことをいう。また、気筒の「休止」とは、吸排気弁を閉弁状態で保持し、燃料の供給を停止することで、その気筒における燃焼を停止させることをいう。このように、一部の気筒を休止させることで、ポンピングロスを低減し、燃費の改善を図ることができる。
【０００７】
上記特許文献１に記載された気筒別空燃比制御では、内燃機関の全ての気筒が運転している状態を前提としてアルゴリズムが構成されている。当該アルゴリズムを、減筒運転を実行する内燃機関にそのまま適用すると、減筒運転実行中の空燃比の推定や燃料供給量の補正が適切に行われないおそれがある。
【０００８】
すなわち、前述のアルゴリズムによれば、内燃機関が減筒運転実行中であっても、全ての気筒における空燃比の推定と、燃料の供給量の補正が行われてしまう。しかし、休止している気筒では燃料の燃焼が行われていないため、空燃比センサが検出する情報は、運転中の気筒における燃焼により排出された排気ガスのもののみとなる。
【０００９】
つまり、前述のアルゴリズムでは、空燃比の推定において、一部の気筒が休止していることによる影響が考慮されていないため、その推定値と実際値との乖離が著しくなる。したがって、運転している気筒に対して誤った燃料供給量の補正を行ってしまい、排気ガス成分やドライバビリティの悪化等、種々の不具合を招く懸念がある。
【００１０】
本発明では、上述した問題点に鑑みてなされたものであり、その目的は、空燃比の推定を適切に行い、減筒運転実行中に不具合が発生することを防止することができる制御装置を提供することになる。
【課題を解決するための手段】
【００１１】
上記課題を解決するために、本発明に係る制御装置は、複数の気筒（２０１）を有する内燃機関（２０）の運転を制御し、各気筒から排出された排気ガスが集められる排気集合部（４０２ｂ）に設けられた空燃比センサ（４２１）の検出情報に基づいて各気筒の空燃比を制御する制御装置（１）において、複数の気筒の全てを運転させる全筒運転を実行する全筒運転実行手段（１０１）と、複数の気筒のうち一部の気筒（＃２，＃３）を休止させるとともに、他の気筒（＃１，＃４）を運転させる減筒運転を実行する減筒運転実行手段（１０２）と、全筒運転及び減筒運転の一方から他方に移行させる運転移行手段（１０３）と、運転移行手段及び空燃比センサの検出情報に基づいて、内燃機関が全筒運転実行中、減筒運転実行中、又は、それらへの移行中のいずれの運転状態にあるかを判定する運転状態判定手段（１０４）と、空燃比センサの検出情報に基づいて各気筒の空燃比を推定する空燃比推定手段（１０６）と、空燃比推定手段によって推定された各気筒の空燃比に基づいて、各気筒に供給する燃料の量を補正する燃料補正手段（１０７）と、を備える。空燃比推定手段は、内燃機関が全筒運転実行中の場合は第１オブザーバを用いて各気筒の空燃比を推定する一方で、内燃機関が減筒運転実行中の場合は第１オブザーバを用いた各気筒の空燃比の推定を行わない。
【００１２】
本発明では、内燃機関が全筒運転実行中の場合は、第１オブザーバを用いて各気筒の空燃比を推定する。一方、内燃機関が減筒運転実行中の場合は、第１オブザーバを用いた各気筒の空燃比の推定を行わない。このため、一部の気筒が休止している減筒運転実行中に、全ての気筒における空燃比の推定や燃料供給量の補正が行われてしまうことを防止することができる。したがって、減筒運転実行中に、排気ガス成分やドライバビリティの悪化等の不具合が生じることを防止することができる。
【発明の効果】
【００１３】
本発明によれば、空燃比の推定を適切に行い、減筒運転実行中に不具合が発生することを防止することができる制御装置を提供することができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の実施形態に係るＥＣＵを適用した駆動システムの概略構成図である。
【図２】図１に示されているＥＣＵの機能的なブロックを説明するための制御ブロック図である。
【図３】本発明の実施形態に係るＥＣＵのベースルーチンのフローチャートである。
【図４】図３に示されている気筒別空燃比制御許可判定ルーチンにおける処理の流れを示すフローチャートである。
【図５】本発明の実施形態に係るＥＣＵによる制御の一例を示すタイムチャートである。
【図６】図３に示されている運転気筒状態判定ルーチンにおける処理の流れを示すフローチャートである。
【図７】本発明の実施形態に係るＥＣＵによる制御の一例を示すタイムチャートである。
【図８】図３に示されているセンサ値取得タイミング算出ルーチンにおける処理の流れの一部を示すフローチャートである。
【図９】図３に示されているセンサ値取得タイミング算出ルーチンにおける処理の流れの他部を示すフローチャートである。
【図１０】本発明の実施形態に係るＥＣＵによる制御の一例を示すタイムチャートである。
【図１１】図３に示されている気筒別空燃比推定ルーチンにおける処理の流れを示すフローチャートである。
【図１２】本発明の実施形態に係るＥＣＵによる制御の一例を示すタイムチャートである。
【図１３】図３に示されている気筒別燃料補正量算出ルーチンにおける処理の流れを示すフローチャートである。
【発明を実施するための形態】
【００１５】
以下、添付図面を参照しながら本発明の実施形態について説明する。説明の理解を容易にするため、各図面において同一の構成要素に対しては可能な限り同一の符号を付して、重複する説明は省略する。
【００１６】
まず、図１及び図２を参照しながら、本発明の実施形態に係るＥＣＵ１について説明する。ＥＣＵ１は、車両の駆動システムに適用される。まず、ＥＣＵ１の制御対象である内燃機関２０の構成について説明する。
【００１７】
内燃機関２０は、燃料であるガソリンを燃焼させ、乗用車の駆動力を発生させるガソリンエンジンである。内燃機関２０は、気筒２０１と、ピストン２０２と、クランクシャフト２０３と、吸気ポート２０４と、排気ポート２０５と、燃料噴射弁２０６と、点火プラグ２０７と、を備えている。
【００１８】
内燃機関２０は、４つの気筒２０１を備えている。図１では、便宜上１つの気筒２０１のみを図示しているが、実際には奥行方向に第１気筒＃１、第２気筒＃２，第３気筒＃３、第４気筒＃４を備えている。各気筒２０１の内部には、上下方向に往復運動するピストン２０２が配置されている。各ピストン２０２は、クランクシャフト２０３によって連結されており、それぞれが異なるタイミングで上下に往復運動するように構成されている。
【００１９】
各気筒２０１の上部内壁面とピストン２０２との間には、燃焼室２０１ａが形成されている。各気筒２０１には、燃焼室２０１ａ内に空気を導入する吸気ポート２０４と、燃焼室２０１ａ内から排気ガスを排出する排気ポート２０５と、が設けられている。各気筒２０１には、吸気ポート２０４と燃焼室２０１ａとの間を開閉する吸気バルブ２０１ｂと、排気ポート２０５と燃焼室２０１ａとの間を開閉する排気バルブ２０１ｃと、が設けられている。吸気バルブ２０１ｂは、その上端部がカムシャフト２１１と当接している。また、排気バルブ２０１ｃは、その上端部がカムシャフト２１２と当接している。さらに、各気筒２０１の上方には、吸気バルブ２０１ｂの上昇を禁止するアクチュエータ２１３と、排気バルブ２０１ｃの上昇を禁止するアクチュエータ２１４と、が設けられている。
【００２０】
各気筒２０１には、燃料噴射弁２０６と、点火プラグ２０７と、クランク角センサ２０８と、が取り付けられている。燃料噴射弁２０６は、その先端が燃焼室２０１ａ内に臨むように取り付けられている。燃料噴射弁２０６は、その先端から燃焼室２０１ａ内に燃料を直接噴射する。燃料は高圧で燃料噴射弁２０６に供給されているので、噴射した燃料はその直後に霧化する。尚、本実施例では、燃料を燃焼室２０１ａに直接噴射する筒内直接噴射方式を採用しているが、本発明はこれに限定されるものではない。クランク角センサ２０８は、クランクシャフト２０３の回転に同期して、クランクシャフト２０３が所定角度回転するごとに、クランク信号を出力するセンサである。
【００２１】
各気筒２０１には、吸気管４０１と、排気管４０２と、が接続されている。吸気管４０１は、各気筒２０１の吸気ポート２０４に空気を導入するための流路を内部に有している。排気管４０２は、各気筒２０１の排気ポート２０５から排気ガスを外部に導くための流路を内部に有している。排気管４０２はマニホールド状に形成され、その上流側に４つに分岐した分岐部４０２ａを有している（図１では、便宜上１つの分岐部４０２ａのみを図示している）。４つの分岐部４０２ａは、各気筒２０１に１つずつ接続される。各分岐部４０２ａから流入した排気ガスは、その下流側の排気集合部４０２ｂにおいて集められ、合流してさらに下流側へと流れる。
【００２２】
吸気管４０１にはエアフロメータ４１１が設けられている。エアフロメータ４１１は、吸気管４０１内の流路を流れる空気の流量を測定し、電気信号に変換して出力する。また、吸気管４０１のエアフロメータ４１１が設けられている部分よりも下流側には、スロットルバルブ４１２が設けられている。スロットルバルブ４１２は、電動モータ（不図示）の駆動によってスロットル開度を調整するように構成されている。
【００２３】
排気管４０２の排気集合部４０２ｂには空燃比センサ４２１が設けられている。空燃比センサ４２１は、排気集合部４０２ｂ内の流路を流れる排気ガスの空燃比を測定し、電気信号に変換して出力するセンサである。また、排気管４０２の空燃比センサ４２１が設けられている部分よりも下流側には、触媒４２２が設けられている。触媒４２２は、排気ガス浄化用の三元触媒である。
【００２４】
以上のように構成された内燃機関２０は、ＥＣＵ１によって制御される。ＥＣＵ１は、エアフロメータ４１１及び空燃比センサ４２１と電気的に接続されており、それぞれから電気信号を受信して処理を行う。また、ＥＣＵ１は、スロットルバルブ４１２、燃料噴射弁２０６、点火プラグ２０７及びアクチュエータ２１３，２１４とも電気的に接続されており、それぞれに制御信号を送信してそれらの制御を行う。
【００２５】
ＥＣＵ１は、スロットルバルブ４１２の開度を調整することで、吸気バルブ２０１ｂの開弁時に各気筒２０１の燃焼室２０１ａに供給する空気の流量を調整する。また、ＥＣＵ１は、燃料噴射弁２０６によって燃焼室２０１ａに燃料を噴射させ、霧化した燃料と空気との混合気を生成するとともに、点火プラグ２０７に火花放電を行わせて当該混合気に着火させる。また、ＥＣＵ１は、クランク角センサ２０８の信号に基づいて、クランク角や内燃機関２０の出力軸の回転速度を検出する。
【００２６】
ＥＣＵ１は、その一部又は全部が、アナログ回路で構成されるか、メモリを備えたデジタルプロセッサとして構成される。いずれにしても、受信した電気信号に基づいて制御信号を出力する機能を果たすため、ＥＣＵ１には機能的な制御ブロックが構成される。
【００２７】
図２は、ＥＣＵ１このような機能的な制御ブロック図として示したものである。尚、ＥＣＵ１を構成するアナログ回路又はデジタルプロセッサに組み込まれるソフトウェアのモジュールは、必ずしも図２に示す制御ブロックに分割されている必要はない。つまり、アナログ回路等は、複数の制御ブロックの働きをするものとして構成されていても構わず、更に細分化されていても構わない。ＥＣＵ１として後述する処理フローを実行できるように構成されていれば、ＥＣＵ１内部の実際の構成は当業者が適宜変更できるものである。
【００２８】
図２に示されるように、ＥＣＵ１は、機能的な制御ブロックとして、全筒運転実行部１０１（全筒運転実行手段）と、減筒運転実行部１０２（減筒運転実行手段）と、運転移行部１０３（運転移行手段）と、運転状態判定部１０４（運転状態判定手段）と、検出情報取得部１０５（検出情報取得手段）と、空燃比推定部１０６（空燃比推定手段）と、燃料補正部１０７（燃料補正手段）と、を備えている。
【００２９】
全筒運転実行部１０１は、内燃機関２０に、第１気筒＃１、第２気筒＃２，第３気筒＃３及び第４気筒＃４の全ての気筒２０１を運転させる「全筒運転」を実行させる部分である。この全筒運転では、カムシャフト２１１，２１２とともに回転するカム２１１ａ，２１２ａによって、全ての気筒２０１の吸気バルブ２０１ｂ及び排気バルブ２０１ｃを開閉させる。これにより、全ての気筒２０１において燃料の燃焼が行われる。したがって、排気管４０２の排気集合部４０２ｂには、全ての気筒２０１から排出された排気ガスが流れることになる。
【００３０】
減筒運転実行部１０２は、内燃機関２０の運転が所定の条件となった場合に、第２気筒＃２及び第３気筒＃３を休止させるとともに、第１気筒＃１及び第４気筒＃４を運転させる「減筒運転」を実行させる部分である。すなわち、減筒運転実行中は、全筒運転実行中に比べて、運転させる気筒２０１の数を減らす。この減筒運転では、カムシャフト２１１，２１２とともに回転するカム２１１ａ，２１２ａによって第１気筒＃１及び第４気筒＃４の吸気バルブ２０１ｂ及び排気バルブ２０１ｃのみを開閉させる。一方、第２気筒＃２及び第３気筒＃３の吸気バルブ２０１ｂ及び排気バルブ２０１ｃは、アクチュエータ２１３，２１４によって押さえられ、開閉が禁止された状態となる。これにより、吸気バルブ２０１ｂ及び排気バルブ２０１ｃは、第２気筒＃２及び第３気筒＃３の吸気ポート２０４及び排気ポート２０５を閉弁した状態で保持される。これにより、第１気筒＃１及び第４気筒＃４のみで燃料の燃焼が行われ、排気管４０２には第１気筒＃１及び第４気筒＃４から排出された排気ガスのみが流れることになる。
【００３１】
尚、本実施形態では、減筒運転は第２気筒＃２及び第３気筒＃３を休止させるものとしているが、本発明はこれに限定されるものではない。例えば、減筒運転を、第１気筒＃１及び第４気筒＃４を休止させるものとすることもできる。
【００３２】
運転移行部１０３は、内燃機関２０の運転状態を、全筒運転から減筒運転に、又は、減筒運転から全筒運転に移行させる部分である。運転移行部１０３は、全筒運転から減筒運転への移行においては、第２気筒＃２及び第３気筒＃３のうち、準備が整った気筒２０１から順次休止させる。また、減筒運転から全筒運転への移行においても、第２気筒＃２及び第３気筒＃３のうち、準備が整った気筒２０１から順次運転を再開させる。
【００３３】
運転状態判定部１０４は、内燃機関２０の運転状態が、全筒運転実行中、減筒運転実行中、又は、それらへの移行中のいずれにあるのかを判定する部分である。
【００３４】
検出情報取得部１０５は、エアフロメータ４１１、空燃比センサ４２１、クランク角センサ２０８がそれぞれ検出した情報を、所定のタイミングで取得する部分である。
【００３５】
空燃比推定部１０６は、空燃比センサ４２１が検出する情報に基づいて、各気筒２０１の空燃比を推定する部分である。
【００３６】
燃料補正部１０７は、運転状態判定部１０４における運転状態の判定結果と、空燃比推定部１０６における空燃比の推定値とを適宜用いて、燃料噴射弁２０６から噴射する燃料の流量を補正する部分である。
【００３７】
次に、図３乃至図１３を参照しながら、ＥＣＵ１による内燃機関２０の制御処理について説明する。尚、以下では簡便のため、詳細にはＥＣＵ１の全筒運転実行部１０１等の各部分によって行われている処理も、総括してＥＣＵ１が行うとして説明する。
【００３８】
ＥＣＵ１は、その電源オン期間中（車両のイグニッションスイッチのオン期間中）に、図３に示されるベースルーチンに従って処理を行う。ＥＣＵ１は、まず、ステップＳ１０１で、イニシャライズ処理ルーチンを実行し、制御プログラムを初期化する。その後、ステップＳ１０２からステップＳ１０６の各サブルーチンを、所定周期（例えば１msec周期）で繰り返し実行する。
【００３９】
［気筒別空燃比制御許可判定ルーチン］
ＥＣＵ１は、まず、図３のステップＳ１０２で、気筒別空燃比制御許可判定ルーチンを実行する。気筒別空燃比制御許可判定ルーチンは、内燃機関２０が、気筒２０１ごとの空燃比の推定を許可できる運転状態であるか否かを判定するルーチンである。
【００４０】
図４を参照しながら、気筒別空燃比制御許可判定ルーチンについて詳述する。気筒別空燃比制御許可判定ルーチンは、所定周期（例えば３０ＣＡ（Crank Angle）周期）で実行される。
【００４１】
ＥＣＵ１は、まず、ステップＳ２０１で、燃料カット実行フラグxfcutと、内燃機関回転速度Neと、内燃機関負荷率elrと、の読み込みを行う。燃料カット実行フラグxfcutは、車両の減速中など、全ての気筒２０１を対象として燃料の供給を停止（燃料カット）している場合のみ「１」がセットされるフラグである。つまり、内燃機関２０が減筒運転実行中の場合のように、一部の気筒２０１のみを対象として燃料カットが実行されている場合は、燃料カット実行フラグxfcutは「１」がセットされない。
【００４２】
次に、ＥＣＵ１は、ステップＳ２０２で、燃料カット実行フラグxfcutが「０」か否かを判定する。すなわち、内燃機関２０において、全ての気筒を対象とした燃料カットが実行されていないか否かを判定する。
【００４３】
ステップＳ２０２で、燃料カット実行フラグxfcutが「０」であると判定された場合（ステップＳ２０２：ＹＥＳ）、つまり、全ての気筒を対象とした燃料カットが実行されていないと判定された場合には、ステップＳ２０３へと進む。
【００４４】
次に、ＥＣＵ１は、ステップＳ２０３で、予め用意されたマップと、ステップＳ２０１で読み込んだ内燃機関回転速度Neと内燃機関負荷率elrとを対照させて、その結果に基づいて気筒別空燃比制御許可判定フラグxafestに「０」又は「１」をセットする。当該マップは、内燃機関回転速度Neと内燃機関負荷率elrとをパラメータとするものであり、内燃機関２０の運転状態を示すものである。
【００４５】
一般に、排気管４０２内の流路を流れる排気ガスの流量が小さい場合、各気筒２０１の空燃比の推定を正確に行うことができない。ステップＳ２０３では、読み込んだ内燃機関回転速度Ne及び内燃機関負荷率elrの組み合わせが所定条件を満たす場合に、空燃比の推定を正確に行うことができる流量の排気ガスが流れているとして、気筒別空燃比制御許可判定フラグxafestに「１」がセットされ、それ以外の場合は「０」がセットされる。これは、燃料カットの実行中は、燃料噴射を行っていないので、空燃比の推定を行うことができないし、そもそも、行う必要性が無いからである。
【００４６】
一方、ステップＳ２０２で、燃料カット実行フラグxfcutが「０」ではないと判定された場合（ステップＳ２０２：ＮＯ）、つまり、全ての気筒２０１を対象とした燃料カットが実行されていると判定された場合には、ステップＳ２０４へと進む。
【００４７】
次に、ＥＣＵ１は、ステップＳ２０４で、気筒別空燃比制御許可判定フラグxafestに「０」をセットする。
【００４８】
［運転気筒状態判定ルーチン］
気筒別空燃比制御許可判定ルーチンの実行を終えたＥＣＵ１は、次に、図３のステップＳ１０３で、運転気筒状態判定ルーチンを実行する。運転気筒状態判定ルーチンは、内燃機関２０が全筒運転実行中、減筒運転実行中のいずれの運転状態にあるのかを判定するとともに、燃料の供給量の補正が可能な状態であるか否かを判定するためのサブルーチンである。
【００４９】
図５及び図６を参照しながら、運転気筒状態判定ルーチンについて詳述する。運転気筒状態判定ルーチンは、所定周期（例えば３０ＣＡ（Crank Angle）周期）で実行される。まず、図５を参照しながら、運転気筒状態判定ルーチンの概要について説明する。
【００５０】
ＥＣＵ１は、内燃機関２０の運転中に、減筒運転フェイズ信号ccofを随時算出している。減筒運転フェイズ信号ccofは、内燃機関２０の運転フェイズを示す信号である。具体的には、減筒運転フェイズ信号ccofにおいて、「０」は全ての気筒２０１が運転していることを示す。また、減筒運転フェイズ信号ccofにおいて、「１」は第２気筒＃２が休止し、他の気筒２０１運転していることを示す。さらに、減筒運転フェイズ信号ccofにおいて、「２」は、第２気筒＃２及び第３気筒＃３が休止し、他の気筒２０１が運転していることを示す。減筒運転フェイズ信号ccofが、「０」及び「１」の一方から他方へ移行する際は、必ず「１」を経由するものとする。
【００５１】
また、ＥＣＵ１は、運転気筒状態フェイズ信号estmodfを随時算出している。運転気筒状態フェイズ信号estmodfは、カウンタＣ１を用いて算出される信号である。カウンタＣ１は、時間経過に基づいてカウントアップする。
【００５２】
空燃比センサ４２１の出力値には、その性能に起因した応答遅れが生じる。また、各気筒２０１から排出された排気ガスが、空燃比センサ４２１が設けられている排気集合部４０２ｂまで到達するのに時間を要する。したがって、この排気ガスが流れる時間も、空燃比センサ４２１の出力値に応答遅れを生じさせる。このような応答遅れを考慮し、空燃比を正確に推定し、確実に本サブルーチン以降の演算へ採用するために、ＥＣＵ１はカウンタＣ１を用いた判断を行っている。
【００５３】
時刻ｔ１で、内燃機関２０の全筒運転実行中に、気筒別空燃比制御の実行条件が全て成立した場合、ＥＣＵ１は、それまで「０」であった気筒別空燃比制御許可判定フラグxafestに「１」をセットする。気筒別空燃比制御許可判定フラグxafestに「１」がセットされると、カウンタＣ１がカウントアップを開始する。
【００５４】
カウンタＣ１のカウント値が閾値β未満で、減筒運転フェイズ信号ccofが「０」を示している場合、運転気筒状態フェイズ信号estmodfは「２」を示す。時刻ｔ２で、カウンタＣ１のカウント値が閾値β以上になると、気筒別空燃比制御を実行する為に十分な時間が経過したと判断して、運転気筒状態フェイズ信号estmodfに「１」をセットする。ここで、閾値βは、図１に示した駆動システムにおいて、予め試験的に得られている値である。
【００５５】
時刻ｔ３で、内燃機関２０が全筒運転から減筒運転への移行を開始すると、減筒運転フェイズ信号ccofが「０」から「１」に切り替わる。このタイミングで、全筒運転から減筒運転への移行タイミングであると判定して、カウンタＣ１のカウント値をリセットし、運転気筒状態フェイズ信号estmodfに「３」をセットする。
【００５６】
時刻ｔ４で、減筒運転フェイズ信号ccofが「２」を示し、内燃機関２０の減筒運転への移行が完了したとき、カウンタＣ１がカウントアップを開始する。このカウンタＣ１が閾値β未満の場合は、ＥＣＵ１は、空燃比センサ４２１はまだ減筒運転移行後の排気ガスを検出していないと判断し、運転気筒状態フェイズ信号estmodfを「３」のまま維持する。
【００５７】
時刻ｔ５で、カウンタＣ１のカウント値が閾値β以上となると、ＥＣＵ１は、気筒別空燃比制御を実行する為に十分な時間が経過したと判断して、運転気筒状態フェイズ信号estmodfを「４」にセットする。
【００５８】
ここで、図５の最上段に示している「全筒運転」等の表記は、そのタイミングで空燃比センサ４２１が検出している空燃比が、内燃機関２０がどの運転状態にあるときに排出された排気ガスのものであるかを示している。例えば、時刻ｔ４乃至ｔ５では、減筒運転フェイズ信号ccofが「２」を示しているように、内燃機関２０は既に２つの気筒２０１を休止させて減筒運転実行中の状態にある。しかしながら、空燃比センサ４２１の出力値には前述したような応答遅れがあるため、時刻ｔ４乃至ｔ５で空燃比センサ４２１が検出する空燃比は、依然として減筒運転への移行中の排気ガスのものであるため、図５の最上段では「減筒運転移行期間」と表記している。
【００５９】
次に、図６を参照しながら、運転気筒状態判定ルーチンにおける処理の流れについて説明する。
【００６０】
まず、ＥＣＵ１は、ステップＳ３０１で、気筒別空燃比制御許可判定フラグxafestと、減筒運転フェイズ信号ccofを読み込む。読み込み後、ＥＣＵ１は、次にステップＳ３０２へと進む。
【００６１】
次に、ＥＣＵ１は、ステップＳ３０２で、気筒別空燃比制御許可判定フラグxafestが「１」であるか否かを判定する。すなわち、内燃機関２０の運転状態が、気筒別空燃比制御を許可できる状態にあるか否かを判定する。内燃機関２０の運転状態が、気筒別空燃比制御を許可できる状態にある場合（Ｓ３０２：ＹＥＳ）、ＥＣＵ１は、次にステップＳ３０３に進む。
【００６２】
次に、ＥＣＵ１は、ステップＳ３０３で、減筒運転フェイズ信号ccofが「２」であるか否かを判定する。すなわち、内燃機関２０の４つの気筒２０１のうち、２つの気筒２０１が休止し、他の気筒２０１が運転している状態にあるか否かを判定する。内燃機関２０がそのような状態にある場合、（Ｓ３０３：ＹＥＳ）、ＥＣＵ１は、次にステップＳ３０４に進む。
【００６３】
次に、ＥＣＵ１は、ステップＳ３０４で、カウンタＣ１のカウント値を「１」だけカウントアップする。このカウントアップ後、ＥＣＵ１は、次にステップＳ３０５に進む。
【００６４】
次に、ＥＣＵ１は、ステップＳ３０５で、カウンタＣ１のカウント値が閾値βより大きいか否かを判定する。カウント値が閾値βよりも大きい場合（Ｓ３０５：ＹＥＳ）、ＥＣＵ１は、内燃機関２０が減筒運転に移行した後、空燃比センサ４２１にて正確な空燃比を検出可能となる時間が経過したと判断して、次のステップＳ３０６に進む。
【００６５】
次に、ＥＣＵ１は、ステップＳ３０６で、カウンタＣ１のカウント値に「β＋１」をセットし、オーバーフローに伴うカウンタリセットを回避する。カウント値のセット後、ＥＣＵ１は、次にステップＳ３０７に進む。
【００６６】
次に、ＥＣＵ１は、ステップＳ３０７で、減筒移行期間フラグxtccoに「０」をセットする。減筒移行期間フラグxtccoにセットされた「０」は、内燃機関２０の減筒運転への移行期間は終了したことを意味する。減筒移行期間フラグxtccoのセット後、ＥＣＵ１は、次にステップＳ３０８に進む。
【００６７】
次に、ＥＣＵ１は、ステップＳ３０８で、運転気筒状態フェイズ信号estmodfに「４」をセットする。すなわち、ＥＣＵ１は、気筒別空燃比制御を実行するために十分な時間が経過したと判断し、当該セットを行う。
【００６８】
一方、ステップＳ３０３において、減筒運転フェイズ信号ccofが「２」ではないと判定された場合（Ｓ３０３：ＮＯ）、ＥＣＵ１は、内燃機関２０は減筒運転実行中ではないと判断し、次にステップＳ３０９に進む。
【００６９】
次に、ＥＣＵ１は、ステップＳ３０９で、カウンタＣ１のカウンタ値をリセットする。リセット後、ＥＣＵ１は、次にステップＳ３１０に進む。
【００７０】
次に、ＥＣＵ１は、ステップＳ３１０で、減筒運転フェイズ信号ccofが「１」であるか否かを判定する。すなわち、内燃機関２０が、１つの気筒２０１が休止し、他の気筒２０１が運転している、減筒運転と全筒運転の移行中であるか否かを判定する。当該移行中は、内燃機関２０の運転状態が過渡的な状態にあるため、空燃比センサ４２１において妥当な空燃比に関する情報を得られない。内燃機関２０が、減筒運転と全筒運転の移行中である場合（Ｓ３１０：ＹＥＳ）、ＥＣＵ１は、次にステップＳ３１１に進む。
【００７１】
次に、ＥＣＵ１は、ステップＳ３１１で、減筒運転フェイズ信号ccofの今回値と、前回値の大きさを比較する。このステップＳ３１１にて、減筒運転フェイズ信号ccofの今回値が前回値より大きいと判定された場合（Ｓ３１１：＞）、ＥＣＵ１は、全筒運転から減筒運転への移行を開始したと判断し、次にステップＳ３１３に進む。
【００７２】
次に、ＥＣＵ１は、ステップＳ３１３で、減筒移行期間フラグxtccoに「１」をセットする。減筒移行期間フラグxtccoのセット後、ＥＣＵ１は、次にステップＳ３１４に進む。
【００７３】
次に、ＥＣＵ１は、ステップＳ３１４で、運転気筒状態フェイズ信号estmodfに「３」をセットする。これは、内燃機関２０が減筒運転へ移行中であることを意味する値である。
【００７４】
一方、ステップＳ３１１において、減筒運転フェイズ信号ccofの今回値と前回値が一致していると判定された場合（Ｓ３１１：＝）、内燃機関２０が全筒運転と減筒運転との移行中であると判断できる。この場合、ＥＣＵ１は、次にステップＳ３１２に進む。
【００７５】
次に、ＥＣＵ１は、ステップＳ３１２で、減筒移行期間フラグxtccoが「１」であるか否かを判定する。減筒移行期間フラグxtccoが「１」である場合（Ｓ３１２：ＹＥＳ）、ＥＣＵ１は、次にステップＳ３１４に進み、前述したように、ステップＳ３１４で、運転気筒状態フェイズ信号estmodfに「３」をセットする。
【００７６】
一方、ステップＳ３１２で、減筒移行期間フラグxtccoが「１」ではないと判定された場合（Ｓ３１２：ＮＯ）、減筒運転から全筒運転への移行中であると判断して、ＥＣＵ１は、次にステップＳ３２０に進む。
【００７７】
次に、ＥＣＵ１は、ステップＳ３２０で、運転気筒状態フェイズ信号estmodfに「２」をセットする。これは、内燃機関２０が全筒運転へ移行中であることを意味する。
【００７８】
一方、ステップＳ３１１において、減筒運転フェイズ信号ccofの今回値が前回値よりも小さいと判定された場合（Ｓ３１１：＜）、内燃機関２０が減筒運転から全筒運転への移行を開始したタイミングであると判断できる。この場合、ＥＣＵ１は、次にステップＳ３１９に進む。
【００７９】
次に、ＥＣＵ１は、ステップＳ３１９で、減筒移行期間フラグxtccoに「０」をセットする。減筒移行期間フラグxtccoにセットされた「０」は、内燃機関２０が、減筒運転から全筒運転への移行期間に切り替わったタイミングであることを意味する。減筒移行期間フラグxtccoのセット後、ＥＣＵ１は、次にステップＳ３２０に進み、前述と同様の処理を行う。
【００８０】
一方、ステップＳ３１０で、減筒運転フェイズ信号ccofが「１」ではないと判定された場合（Ｓ３１０：ＮＯ）、すなわち、減筒運転フェイズ信号ccofが「０」であり、内燃機関２０が全筒運転実行中と判定した場合、ＥＣＵ１は、次にステップＳ３１５に進む。
【００８１】
次に、ＥＣＵ１は、ステップＳ３１５で、カウンタＣ１のカウント値を「１」だけカウントアップする。このカウントアップ後、ＥＣＵ１は、次にステップＳ３１６に進む。
【００８２】
次に、ＥＣＵ１は、ステップＳ３１６で、カウンタＣ１のカウント値が閾値βより大きいか否かを判定する。カウント値が閾値βよりも大きい場合（Ｓ３１６：ＹＥＳ）、ＥＣＵ１は、内燃機関２０が減筒運転に移行した後、空燃比センサ４２１で正確な空燃比を検出可能となる時間が経過したと判断して、次のステップＳ３１７に進む。
【００８３】
次に、ＥＣＵ１は、ステップＳ３１７で、カウンタＣ１のカウント値に「β＋１」をセットし、オーバーフローに伴うカウンタリセットを回避する。カウント値のセット後、ＥＣＵ１は、次にステップＳ３１８に進む。
【００８４】
次に、ＥＣＵ１は、ステップＳ３１８で、運転気筒状態フェイズ信号estmodfを「１」にセットする。すなわち、ＥＣＵ１は、気筒別空燃比制御を実行する為に十分な時間が経過したと判断し、当該セットを行う。
【００８５】
また、ステップＳ３１６で、カウンタＣ１のカウント値が閾値βより大きくないと判定された場合（Ｓ３１６：ＮＯ）、正確な空燃比センサ値を得る為の十分な時間が経過していないと判断し、ＥＣＵ１は、次にステップＳ３１９に進む。ステップＳ３１９以降は、前述したものと同様の処理を行う。
【００８６】
また、ステップＳ３０５で、カウンタＣ１のカウント値が閾値βより大きくないと判定された場合（Ｓ３０５：ＮＯ）、内燃機関２０は減筒運転に移行しているが、正確な空燃比センサ値を得る為の十分な時間が経過していないと推測できる。したがって、この場合、ＥＣＵ１は、次にステップＳ３１３に進む。ステップＳ３１３以降は、前述したものと同様の処理を行う。
【００８７】
これに対し、このステップＳ３０２で、気筒別空燃比制御許可判定フラグxafestが「１」ではないと判定された場合（Ｓ３０２：ＮＯ）、内燃機関２０の運転状態が、気筒別空燃比制御を許可できる状態にないと判断し、ＥＣＵ１は、次のステップＳ３２１に進む。
【００８８】
次に、ＥＣＵ１は、ステップＳ３２１で、カウンタＣ１のカウント値をリセットする。カウント値のリセット後、ＥＣＵ１は、次にステップＳ３２２に進む。
【００８９】
次に、ＥＣＵ１は、ステップＳ３２２で、運転気筒状態フェイズ信号estmodfを「０」にセットする。これは、気筒別空燃比制御を許可しないことを意味する。
【００９０】
［センサ値取得タイミング算出ルーチン］
運転気筒状態判定ルーチンの実行を終えたＥＣＵ１は、次に、図３のステップＳ１０４で、センサ値取得タイミング算出ルーチンを実行する。このセンサ値取得タイミング算出ルーチンは、空燃比センサ４２１によって排気ガスの空燃比に関する値を取得するタイミングを算出するサブルーチンである。
【００９１】
図７乃至図９を参照しながら、センサ値取得タイミング算出ルーチンについて詳述する。センサ値取得タイミング算出ルーチンは、所定周期（例えば３０ＣＡ（Crank Angle）周期）で実行される。まず、図７を参照しながら、運転気筒状態判定ルーチンの概要について説明する。
【００９２】
ＥＣＵ１は、第１気筒＃１の空燃比が空燃比センサ４２１の出力値に表れるタイミングのクランク信号crksを、運転条件ごとにマップ化して保持している。ＥＣＵ１は、０〜２３までの３０°ＣＡごとにカウントアップするクランク信号crksに基づいて、クランクオフセット値crkosを迎えるタイミングでリセットされる基準クランク信号crksstを作成する。
【００９３】
ＥＣＵ１は、その基準クランク信号crksstが、「０」、「６」、「１２」、「１８」を示すタイミングにおいて、それぞれ第１気筒タイミング判定フラグxtmgcyl1、第２気筒タイミング判定フラグxtmgcyl2、第３気筒タイミング判定フラグxtmgcyl3、第４気筒タイミング判定フラグxtmgcyl4に「１」をセットする。また、ＥＣＵ１は、いずれかの気筒タイミング判定フラグが成立するタイミングにおいて、空燃比センサ値取得フラグxtmgestに「１」をセットする。
【００９４】
ここで、内燃機関２０の減筒運転実行中と全筒運転実行中とでは、排気ガスの特性や、空燃比センサ４２１の応答特性が異なる。したがって、内燃機関２０の減筒運転実行中は、ＥＣＵ１は全筒運転実行中とは異なるマップを参照し、クランクオフセット値crkosの値を切り替える。さらに、内燃機関２０の減筒運転実行中は、ＥＣＵ１は運転している気筒２０１の空燃比のみが空燃比センサ４２１の出力値に表れるタイミングで空燃比センサ値を取得するために、休止している気筒２０１に対応するタイミング判定フラグには「１」をセットしない。
【００９５】
次に、図８及び図９を参照しながら、センサ値取得タイミング算出ルーチンにおける処理の流れについて説明する。
【００９６】
まず、ＥＣＵ１は、ステップＳ４０１で、内燃機関回転速度Neと、内燃機関負荷率elrと、クランク信号crksと、運転気筒状態フェイズ信号estmodfと、を読み込む。読み込み後、ＥＣＵ１は、次にステップＳ４０２へと進む。
【００９７】
次に、ＥＣＵ１は、ステップＳ４０２で、運転気筒状態フェイズ信号estmodfが「０」とは異なるか否かを判定する。運転気筒状態フェイズ信号estmodfが「０」とは異なる場合（Ｓ４０２：ＹＥＳ）、気筒別空燃比制御が許可されていると判断し、ＥＣＵ１は、次にステップＳ４０３に進む。
【００９８】
次に、ＥＣＵ１は、ステップＳ４０３で、運転気筒状態フェイズ信号estmodfが「１」又は「２」であるか否かを判定する。運転気筒状態フェイズ信号estmodfに「１」がセットされている状態は、内燃機関２０が全筒運転実行中であることを示している。また、運転気筒状態フェイズ信号estmodfに「２」がセットされている状態は、内燃機関２０が全筒運転への移行中であることを示している。運転気筒状態フェイズ信号estmodfが「１」又は「２」である場合（Ｓ４０３：Ｙｅｓ）、ＥＣＵ１は、次にステップＳ４０４に進む。
【００９９】
次に、ＥＣＵ１は、ステップＳ４０４で、前述した全筒運転用のマップを参照して、クランクオフセット値crkosを算出する。当該マップは、内燃機関回転速度Neと内燃機関負荷率elrとをパラメータとするものであり、第１気筒＃１の空燃比が空燃比センサの出力値に表れたタイミングのクランク信号crksの値を保持している。クランクオフセット値crkosの算出後、ＥＣＵ１は、次にステップＳ４０５に進む。
【０１００】
一方、ステップＳ４０３で、運転気筒状態フェイズ信号estmodfが「１」又は「２」ではないと判定された場合（Ｓ４０３：ＮＯ）、内燃機関２０は、減筒運転実行中又は減筒運転への移行中であると判断できる。この場合、ＥＣＵ１は、次にステップＳ４０８に進む。
【０１０１】
次に、ＥＣＵ１は、ステップＳ４０８で、減筒運転用のマップを参照し、クランクオフセット値crkosを算出する。当該マップも、内燃機関回転速度Neと内燃機関負荷率elrとをパラメータとするものであり、第１気筒＃１の空燃比が空燃比センサの出力値に表れたタイミングのクランク信号crksの値を保持している。クランクオフセット値crkosの算出後、ＥＣＵ１は、次にステップＳ４０５に進む。
【０１０２】
ステップＳ４０４又はステップＳ４０８でクランクオフセット値crkosの算出後、ＥＣＵ１は、ステップＳ４０５で、クランク信号crksがクランクオフセット値crkos以上か否かを判定する。クランク信号crksがクランクオフセット値crkos以上である場合（Ｓ４０５：ＹＥＳ）、ＥＣＵ１は、次にステップＳ４０６に進む。
【０１０３】
次に、ＥＣＵ１は、ステップＳ４０６で、所定の計算式に基づいて基準クランク信号crksstを算出する。算出後、ＥＣＵ１は、次にステップＳ４０７に進む。
【０１０４】
一方、ステップＳ４０５で、クランク信号crksがクランクオフセット値crkos以下ではないと判断された場合（Ｓ４０５：ＮＯ）、ＥＣＵ１は、次にステップＳ４０９に進む。
【０１０５】
次に、ＥＣＵ１は、ステップＳ４０９で、ステップＳ４０６とは異なる所定の計算式に基づいて、基準クランク信号crksstを算出する。ステップＳ４０６と、ステップＳ４０９とで異なる計算式を用いて基準クランク信号crksstを算出することにより、基準クランク信号crksstは、空燃比センサ４２１の出力値に第１気筒＃１の空燃比が表れるタイミングでリセットされる、０から２３までの３０ＣＡごとにカウントアップするカウンタとなる。基準クランク信号crksstの算出後、ＥＣＵ１は、次にステップＳ４０７に進む。
【０１０６】
次に、ＥＣＵ１は、ステップＳ４０７で、ステップＳ４０３同様に、運転気筒状態フェイズ信号estmodfが「１」又は「２」であるか否かを判定する。運転気筒状態フェイズ信号estmodfが「１」又は「２」である場合（Ｓ４０７：Ｙｅｓ）、ＥＣＵ１は、次にステップＳ４１０に進む。
【０１０７】
次に、ＥＣＵ１は、ステップＳ４１０で、基準クランク信号crksstが「０」であるか否かを判定する。基準クランク信号crksstが「０」であると判定された場合（Ｓ４１０：ＹＥＳ）、空燃比センサ４２１の出力値が第１気筒＃１の空燃比を示すタイミングであると判断できる。この場合、ＥＣＵ１は、次にステップＳ４１１に進む。
【０１０８】
次に、ＥＣＵ１は、ステップＳ４１１で、第１気筒タイミング判定フラグxtmgcyl1を「１」にセットする。第１気筒タイミング判定フラグxtmgcyl1のセット後、ＥＣＵ１は、次にステップＳ４１２に進む。
【０１０９】
次に、ＥＣＵ１は、ステップＳ４１２で、空燃比センサ値取得フラグxtmgestを「１」にセットする。これは、空燃比推定を許可することを意味する。
【０１１０】
これに対し、ステップＳ４１０で基準クランク信号crksstが「０」ではないと判定された場合、ＥＣＵ１は、次にステップＳ４１３に進む。
【０１１１】
このステップＳ４１３からステップＳ４１４、ステップＳ４１５からＳ４１６、及び、ステップＳ４１７からＳ４１８では、ＥＣＵ１は、それぞれステップＳ４１０からステップＳ４１１と同様の処理を行っている。それぞれ、空燃比センサ４２１の出力値が第３気筒＃３、第４気筒＃４、第２気筒＃４の空燃比を示すタイミングであると判断できる。そして、ＥＣＵ１は、第３気筒タイミング判定フラグxtmgcyl3、第４気筒タイミング判定フラグxtmgcyl4、第２気筒タイミング判定フラグxtmgcyl2に、いずれも「１」をセットする。その後、ＥＣＵ１は、ステップＳ４１２へ進み、以下、同様の処理を行う。
【０１１２】
ところで、ステップＳ４１７で、基準クランク信号crksstが「１８」ではないと判定された場合（Ｓ４１７：ＮＯ）、空燃比センサ４２１の出力値が各気筒２０１の空燃比を示すタイミングではないと判断できる。この場合、ＥＣＵ１は、次にステップＳ４１９に進む。
【０１１３】
次に、ＥＣＵ１は、ステップＳ４１９で、第１気筒タイミング判定フラグxtmgcyl1、第２気筒タイミング判定フラグxtmgcyl2、第３気筒タイミング判定フラグxtmgcyl3及び第４気筒タイミング判定フラグxtmgcyl4に、いずれも「０」をセットするリセット処理を行う。リセット処理後、ＥＣＵ１は、次にステップＳ４２０に進む。
【０１１４】
次に、ＥＣＵ１は、ステップＳ４２０で、空燃比センサ値取得フラグxtmgestに「０」をセットする。これは、空燃比推定を許可しないことを示す。
【０１１５】
一方、ステップＳ４０７で、運転気筒状態フェイズ信号estmodfが「１」又は「２」ではないと判定された場合、内燃機関２０は、減筒運転実行中又は減筒運転への移行中であると判断できる。この場合、ＥＣＵ１は、次にステップＳ４２１に進む。
【０１１６】
次に、ＥＣＵ１は、ステップＳ４２１で、第２気筒タイミング判定フラグ xtmgcyl2 及び第３気筒タイミング判定フラグxtmgcyl3に「０」をセットする。次に、ＥＣＵ１は、ステップＳ４２２に進む。
【０１１７】
次に、ＥＣＵ１は、ステップＳ４２２で、ステップＳ４１０同様、基準クランク信号crksstが「０」であるか否かを判定する。基準クランク信号crksstが「０」であると判定された場合（Ｓ４２２：ＹＥＳ）、それ以降のステップＳ４２３，Ｓ４２４の処理は、それぞれ前述したステップＳ４１１，Ｓ４１２と同様である。
【０１１８】
一方、ステップＳ４２２で、基準クランク信号crksstが「０」ではないと判定された場合（Ｓ４２２：ＮＯ）、ＥＣＵ１は、次にステップＳ４２５に進む。
【０１１９】
次に、ＥＣＵ１は、ステップＳ４２５で、ステップＳ４１５同様、基準クランク信号crksstが「１２」であるか否かを判定する。基準クランク信号crksstが「１２」であると判定された場合（Ｓ４２５：ＹＥＳ）、それ以降のステップＳ４２６，Ｓ４２４の処理は、それぞれ前述したステップＳ４１６，Ｓ４１２と同様である。
【０１２０】
一方、ステップＳ４２５で、基準クランク信号crksstが「１２」ではないと判定された場合（Ｓ４２５：ＮＯ）、ＥＣＵ１は、次にステップＳ４２７に進む。それ以降のステップＳ４２７，Ｓ４２８における処理は、それぞれ前述したステップＳ４１９，Ｓ４２０と同様である。
【０１２１】
また、ステップＳ４０２で、運転気筒状態フェイズ信号estmodfが「０」とは異なると判定された場合（Ｓ４０２：ＮＯ）、ＥＣＵ１は、次にステップＳ４２７に進む。それ以降のステップＳ４２７，Ｓ４２８における処理は、前述したとおりである。
【０１２２】
［気筒別空燃比推定ルーチン］
センサ値取得タイミング算出ルーチンの実行を終えたＥＣＵ１は、次に、図３のステップＳ１０５で、気筒別空燃比推定ルーチンを実行する。この気筒別空燃比推定ルーチンは、気筒２０１ごとに空燃比を推定するためのサブルーチンである。
【０１２３】
図１０及び図１１を参照しながら、気筒別空燃比推定ルーチンについて詳述する。まず、図１０を参照しながら、運転気筒状態判定ルーチンの概要について説明する。
【０１２４】
ＥＣＵ１は、空燃比センサ値取得フラグxtmgestに「１」がセットされているタイミングで、空燃比センサの出力値を取得し、空燃比推定値afestを算出する。さらに、ＥＣＵ１は、第１気筒タイミング判定フラグxtmgcyl1、第２気筒タイミング判定フラグxtmgcyl2、第３気筒タイミング判定フラグxtmgcyl3及び第４気筒タイミング判定フラグxtmgcyl4のいずれかに「１」がセットされているタイミングにおいて、空燃比推定値afestに基づいて、第１気筒空燃比推定値indafest1、第２気筒空燃比推定値indafest2、第３気筒空燃比推定値indafest3及び第４気筒空燃比推定値indafest4を算出する。
【０１２５】
ここで、運転気筒状態フェイズが「３」又は「４」であるとき、内燃機関は減筒運転実行中、又は、減筒運転への移行中であると判断できる。この場合、ＥＣＵ１は、全筒運転実行中とは異なるオブザーバを用いて空燃比を推定する（詳細は後述する）。
【０１２６】
次に、図１１を参照しながら、運転気筒状態判定ルーチンにおける処理の流れについて説明する。
【０１２７】
まず、ＥＣＵ１は、ステップＳ５０１で、運転気筒状態フェイズ信号estmodfと、空燃比センサ値afsensと、第１気筒タイミング判定フラグxtmgcyl1と、第２気筒タイミング判定フラグxtmgcyl2と、第３気筒タイミング判定フラグxtmgcyl3と、第４気筒タイミング判定フラグxtmgcyl4と、を読み込む。読み込み後、ＥＣＵ１は、次にステップＳ５０２に進む。
【０１２８】
次に、ＥＣＵ１は、ステップＳ５０２で、運転気筒状態フェイズ信号estmodfが「０」ではないか否かを判定する。すなわち、気筒別空燃比制御が許可されているか否かを判定する。運転気筒状態フェイズ信号estmodfが「０」ではない場合（Ｓ５０２：ＹＥＳ）、気筒別空燃比制御が許可されていると判断できる。この場合、ＥＣＵ１は、次にステップＳ５０３に進む。
【０１２９】
次に、ＥＣＵ１は、ステップＳ５０３で、運転気筒状態フェイズ信号estmodfが「１」又は「２」であるか否かを判定する。前述したように、運転気筒状態フェイズ信号estmodfに「１」がセットされている状態は、内燃機関２０が全筒運転実行中であることを示している。また、運転気筒状態フェイズ信号estmodfに「２」がセットされている状態は、内燃機関２０が全筒運転への移行中であることを示している。運転気筒状態フェイズ信号estmodfが「１」又は「２」である場合（Ｓ５０３：ＹＥＳ）ＥＣＵ１は、次にステップＳ５０４に進む。
【０１３０】
次に、ＥＣＵ１は、ステップＳ５０４で、空燃比センサ値afsensを用いて、空燃比推定値afestを算出する。この空燃比推定値afestの算出は、空燃比センサ値afsensの検出値を、空燃比センサ値afsensの履歴と空燃比推定値afestの履歴とにそれぞれ所定の重みを乗じて加算したものをモデル化することで行っている。また、オブザーバには、カルマンフィルタを用いる。より具体的に表すと、次式ｆ１のようになる。ここで、a1〜a4、b1〜b4は重み付けの度合いを表す定数である。
【０１３１】
【数１】
2016109034.tif 000003
（ｆ１）
【０１３２】
空燃比センサ４２１に生じ得る検出遅れとして、排気ガスの混合による遅れ（現在の空燃比が過去の気筒の空燃比の影響を受ける）と、空燃比センサの応答性による遅れと、が存在する。そこで、式ｆ１は、これらの遅れを考慮して、過去４回分の履歴（１サイクル前の同一気筒２０１の値）までを参照することとしている。
【０１３３】
Ａ，Ｂ，Ｃ，Ｄはモデルのパラメータ、afsensは空燃比センサの検出値、Ｘは状態変数としての気筒別空燃比、Ｗはノイズとして、式ｆ１を状態空間モデルに変換すると、次式ｆ２が得られる。
【０１３４】
【数２】
2016109034.tif 000004
（ｆ２）
【０１３５】
さらに、Ｘ＾（エックスハット）は推定値としての気筒別空燃比、Ｋはカルマンゲイン、Ｘ＾（ｋ＋１｜ｋ）の表記は時間ｋの推定値により時間ｋ＋１の推定値を求めることを表すとし、カルマンフィルタを設計すると、次式ｆ３のようになる。
【０１３６】
【数３】
2016109034.tif 000005
（ｆ３）
【０１３７】
このように、カルマンフィルタ型オブザーバを用いて空燃比推定を行うことにより、燃焼行程の進行に伴い空燃比が気筒ごとに順次推定できる。なお、上記出力Ｙには、空燃比センサ値afsensと目標空燃比との偏差としている。空燃比推定値afestの算出を終えたＥＣＵ１は、次にステップＳ５０５に進む。
【０１３８】
次に、ＥＣＵ１は、ステップＳ５０５で、第１気筒タイミング判定フラグxtmgcyl1が「１」であるか否かを判定する。すなわち、第１気筒＃１の空燃比が表れているタイミングの空燃比センサ４２１の出力値から、他気筒２０１の過去の空燃比の影響と空燃比センサ４２１の応答遅れを補償した第１気筒＃１の空燃比推定値afestを算出したか否かを判断する。第１気筒タイミング判定フラグxtmgcyl1が「１」である場合（Ｓ５０５：ＹＥＳ）、ＥＣＵ１は、次にステップＳ５０６に進む。
【０１３９】
次に、ＥＣＵ１は、ステップＳ５０６で、第１気筒空燃比推定値indafest1に空燃比推定値afestの値をセットする。
【０１４０】
一方、ステップＳ５０５で、第１気筒タイミング判定フラグ xtmgcyl1が「１」ではないと判定された場合（Ｓ５０５：ＮＯ）、ＥＣＵ１は、次にステップＳ５０７に進む。
【０１４１】
次に、ＥＣＵ１は、ステップＳ５０７で、第２気筒タイミング判定フラグ xtmgcyl2が「１」であるか否かを判定する。第２気筒タイミング判定フラグ xtmgcyl2が「１」であると判定された場合（Ｓ５０７：ＹＥＳ）、ＥＣＵ１は、次にステップＳ５０８に進む。
【０１４２】
次に、ＥＣＵ１は、ステップＳ５０８で、第２気筒空燃比推定値indafest2に空燃比推定値afestの値をセットする。
【０１４３】
一方、ステップＳ５０７で、第２気筒タイミング判定フラグ xtmgcyl2が「１」ではないと判定された場合（Ｓ５０７：ＮＯ）、ＥＣＵ１は、次にステップＳ５０９に進む。
【０１４４】
次に、ＥＣＵ１は、ステップＳ５０９で、第３気筒タイミング判定フラグ xtmgcyl3が「１」であるか否かを判定する。第３気筒タイミング判定フラグxtmgcyl3が「１」であると判定された場合（Ｓ５０９：ＹＥＳ）、ＥＣＵ１は、次にステップＳ５１０に進む。
【０１４５】
次に、ＥＣＵ１は、ステップＳ５１０で、第３気筒空燃比推定値indafest3に空燃比推定値afestの値をセットする。
【０１４６】
一方、ステップＳ５０９で、第２気筒タイミング判定フラグ xtmgcyl3が「１」ではないと判定された場合（Ｓ５０９：ＮＯ）、ＥＣＵ１は、次にステップＳ５１１に進む。
【０１４７】
次に、ＥＣＵ１は、ステップＳ５１１で、第４気筒空燃比推定値indafest4に空燃比推定値afestの値をセットする。
【０１４８】
これに対し、ステップＳ５０２で、運転気筒状態フェイズ信号estmodfが「０」であると判定された場合、気筒別空燃比制御は許可されていないと判断できるため、そのまま処理を終了する。
【０１４９】
また、ステップＳ５０３で、運転気筒状態フェイズ信号estmodfが「１」又は「２」ではないと判定された場合、内燃機関２０は、減筒運転実行中、又は、減筒運転への移行中であると判断できる。この場合、ＥＣＵ１は、次にステップＳ５１２に進む。
【０１５０】
次に、ＥＣＵ１は、ステップＳ５１２で、休止している第２気筒＃２の第２気筒空燃比推定値indafest2と、第３気筒＃３の第３気筒空燃比推定値indafest3と、を「０」にセットする。セット後、ＥＣＵ１は、次にステップＳ５１３に進む。
【０１５１】
次に、ＥＣＵ１は、ステップＳ５１３で、空燃比センサ値afsensを用いて、空燃比推定値afestを算出する。この空燃比推定値afestの算出は、ステップＳ５０４と同様に、空燃比センサ値afsensの検出値を、空燃比センサ値afsensの履歴と空燃比推定値afest履歴とにそれぞれ所定の重みを乗じて加算したものをモデル化することで行う。ただし、内燃機関２０が減筒運転実行中であり、７２０°ＣＡの間に２つの気筒しか燃焼していないので、モデリングの構成を変更する。
【０１５２】
内燃機関２０の全筒運転実行中は、排気ガスの混合による遅れと、空燃比センサの応答性による遅れを考慮し、過去４回分の履歴までを参照していた。しかしながら、内燃機関２０の減筒運転実行中は、過去２回分（１サイクル前の同一気筒２０１の値）までの履歴を参照することとする。より具体的に式で表すと、次式ｆ４のようになる。ここで、c1，c2，c3，c4及びd1,d2は重み付けの度合いを表す定数であり、同様に状態空間モデルに変換した後、カルマンフィルタを設計することで空燃比推定を行うことができる。
【０１５３】
【数４】
2016109034.tif 000006
（ｆ４）
【０１５４】
次に、ＥＣＵ１は、ステップＳ５１４で、第１気筒タイミング判定フラグxtmgcyl1が「１」であるか否かを判定する。第１気筒タイミング判定フラグxtmgcyl1が「１」である場合（Ｓ５１４：ＹＥＳ）、ＥＣＵ１は、次にステップＳ５１５に進む。
【０１５５】
次に、ＥＣＵ１は、ステップＳ５１５で、ステップＳ５０６と同様に、第１気筒空燃比推定値indafest1に空燃比推定値afestの値をセットする。
【０１５６】
一方、ステップＳ５１４で、第２気筒タイミング判定フラグ xtmgcyl3が「１」ではないと判定された場合（Ｓ５０９：ＮＯ）、ＥＣＵ１は、次にステップＳ５１６に進む。
【０１５７】
次に、ＥＣＵ１は、ステップＳ５１６で、第４気筒空燃比推定値indafest4に空燃比推定値afestの値をセットする。
【０１５８】
以上のように、ＥＣＵ１では、内燃機関２０が全筒運転実行中の場合と減筒運転実行中の場合とで、異なるオブザーバを用いて空燃比の推定を行っている。仮に、内燃機関２０が減筒運転実行中の場合も、全筒運転実行中と同様のオブザーバを用いて空燃比の推定を行った場合の結果を、図１０に点線で記載している。
【０１５９】
運転気筒状態フェイズ信号estmodfが「３」又は「４」である場合、内燃機関２０は減筒運転実行中、又は、減筒運転への移行中である。この場合、休止している第２気筒＃２、第３気筒＃３のタイミングで表れる空燃比センサ値afsensは、それぞれの気筒２０１の燃焼による空燃比を出力したものではなく、直前に燃焼した他の気筒２０１の空燃比の影響を受けているものである。
【０１６０】
ＥＣＵ１が、内燃機関２０が減筒運転実行中の場合も、全筒運転を前提にしたアルゴリズムで構成されたオブザーバを用いると、適切な空燃比の推定を行うことができない。つまり、第２気筒＃２及び第３気筒＃３が休止しているにもかかわらず、空燃比センサ値afsensを、それらにおける燃焼によって生じた排気ガスによるものであると扱い、誤った推定値を算出してしまう。さらに、前述したように、空燃比の推定には過去の推定値の履歴を用いるので、運転している第１気筒＃１や、第４気筒＃４の空燃比の推定にも影響を与え、誤った結果となってしてしまう。
【０１６１】
これに対し、本実施形態のＥＣＵ１では、運転している第１気筒＃１、第４気筒＃４の排気ガスの空燃比が空燃比センサ４２１の出力値に表れるタイミングのみで空燃比センサ値afsensを読み取り、空燃比の推定を行う。
【０１６２】
また、前述したように、内燃機関２０が減筒運転実行中の場合も、全筒運転実行中と同様のオブザーバを用いて空燃比の推定を行うと、過去４回分の推定値の履歴まで参照してしまう。このため、第１気筒＃１、第４気筒＃４のみが運転している状態では、２サイクル前までの推定空燃比まで参照してしまうことになり、空燃比を正しく推定できなくなる。さらに、全筒運転実行中と減筒運転実行中とでは、空燃比挙動が異なる為、全筒運転実行中の空燃比挙動から決定したモデル定数からなるオブザーバを用いて減筒運転実行中の空燃比推定を行うと、誤差が大きくなると考えられる。
【０１６３】
これに対し、本実施形態ＥＣＵ１では、減筒運転実行中は過去２回分の推定値の履歴まで参照するモデル構成とし、減筒運転実行中の空燃比挙動からモデル等の定数を決定したオブザーバを用いて空燃比推定を行っている。これにより、休止している第２気筒＃２及び第３気筒＃３の推定空燃比の影響を受けることない。すなわち、第２気筒＃２及び第３気筒＃３が休止していることを前提とした、適切な空燃比推定が可能となる。
【０１６４】
［気筒別燃料補正量算出ルーチン］
運転気筒状態判定ルーチンの実行を終えたＥＣＵ１は、次に、図３のステップＳ１０６で、気筒別燃料補正量算出ルーチンを実行する。この気筒別燃料補正量算出ルーチンは、気筒別空燃比制御において、各気筒２０１に供給する燃料の量の補正量（以下、単に「燃料補正量」とも称する）を算出するためのサブルーチンである。
【０１６５】
図１２及び図１３を参照しながら、気筒別燃料補正量算出ルーチンについて詳述する。気筒別燃料補正量算出ルーチンは、所定周期（例えば３０ＣＡ（Crank Angle）周期）で実行される。まず、図１２を参照しながら、気筒別燃料補正量算出ルーチンの概要について説明する。
【０１６６】
ＥＣＵ１は、第１気筒タイミング判定フラグxtmgcyl1、第２気筒タイミング判定フラグxtmgcyl2、第３気筒タイミング判定フラグxtmgcyl3、第４気筒タイミング判定フラグxtmgcyl4のいずれかに「１」がセットされているタイミングで、その気筒２０１に対応した対応した第１気筒空燃比推定値indafest1、第２気筒空燃比推定値indafest2、第３気筒空燃比推定値indafest3、第４気筒空燃比推定値indafest4に基づいて、燃料補正量を算出する。
【０１６７】
運転気筒状態フェイズ信号estmodfが「２」を示している場合は、内燃機関２０は全筒運転への移行中であるため、ＥＣＵ１は燃料補正量を算出しない。また、運転気筒状態フェイズ信号estmodfが「３」を示している場合も、内燃機関２０は減筒運転への移行中であるため、ＥＣＵ１は燃料補正量を算出しない。
【０１６８】
運転気筒状態フェイズ信号estmodfが「２」又は「３」を示す場合に、燃料補正量を算出しないにもかかわらず空燃比推定を行う理由は、空燃比推定には、過去の履歴が必要となる為、算出値を蓄積しておく必要があるからである。
【０１６９】
一方、運転気筒状態フェイズ信号estmodfが「１」を示す場合は、内燃機関２０が全筒運転実行中であり、正確な空燃比を推定するための十分な時間が経過したとして、ＥＣＵ１は燃料補正量を算出する。また、運転気筒状態フェイズ信号estmodfが「４」を示す場合は、内燃機関２０が減筒運転実行中であり、正確な空燃比を推定するための十分な時間が経過したとして、ＥＣＵ１は燃料補正量を算出する。
【０１７０】
次に、図１３を参照しながら、運転気筒状態判定ルーチンにおける処理の流れについて説明する。
【０１７１】
まず、ＥＣＵ１は、ステップＳ６０１で、運転気筒状態フェイズ信号estmodfと、第１気筒空燃比推定値indafest1と、第２気筒空燃比推定値indafest2と、第３気筒空燃比推定値indafest3と、第４気筒空燃比推定値indafest4と、を読み込む。また、ＥＣＵ１は、第１気筒タイミング判定フラグxtmgcyl1と、第２気筒タイミング判定フラグxtmgcyl2と、第３気筒タイミング判定フラグxtmgcyl3と、第４気筒タイミング判定フラグxtmgcyl4と、を読み込む。読み込み後、ＥＣＵ１は、次にステップＳ６０２に進む。
【０１７２】
次に、ＥＣＵ１は、ステップＳ６０２で、運転気筒状態フェイズ信号estmodfが「１」であるか否かを判定する。運転気筒状態フェイズ信号estmodfに「１」がセットされているのは、内燃機関２０が全筒運転実行中であり、かつ、かつ安定した空燃比センサ値を得るための十分な時間が経過している場合である。運転気筒状態フェイズ信号estmodfに「１」がセットされていると判定された場合（Ｓ６０２：ＹＥＳ）、ＥＣＵ１は、次にステップＳ６０３に進む。
【０１７３】
次に、ＥＣＵ１は、ステップＳ６０３で、次式ｆ５を用いて、標準空燃比推定値afeststを算出する。この標準空燃比推定値afeststは、目標の空燃比として用いられるものである。メインフィードバック制御と本制御の干渉を避けるために、ＥＣＵ１は、メインフィードバック制御の目標空燃比信号を用いていない。標準空燃比推定値afeststの算出後、ＥＣＵ１は、次にステップＳ６０４に進む。
【０１７４】
【数５】
2016109034.tif 000007
（ｆ５）
【０１７５】
次に、ＥＣＵ１は、ステップＳ６０４で、第１気筒タイミング判定フラグxtmgcyl1に「１」がセットされているか否かを判定する。第１気筒タイミング判定フラグxtmgcyl1に「１」がセットされている場合、第１気筒空燃比推定値indafest1の値を更新したタイミングであると判断できる。第１気筒タイミング判定フラグxtmgcyl1に「１」がセットされていると判定された場合（Ｓ６０４：ＹＥＳ）、ＥＣＵ１は、次にステップＳ６０５に進む。
【０１７６】
次に、ＥＣＵ１は、ステップＳ６０５で、次式ｆ６を用いて第１気筒空燃比偏差deltaaf1を算出する。第１気筒空燃比偏差deltaaf1は、第１気筒空燃比推定値indafest1と標準空燃比推定値afeststとの偏差である。第１気筒空燃比偏差deltaaf1の算出後、ＥＣＵ１は、次にステップＳ６０６に進む。
【０１７７】
【数６】
2016109034.tif 000008
（ｆ６）
【０１７８】
次に、ＥＣＵ１は、ステップＳ６０６で、第１気筒燃料補正量indfcr1を算出する。この第１気筒燃料補正量indfcr1は、第１気筒空燃比偏差deltaaf1に基づいて、第１気筒空燃比推定値indafest1を標準空燃比推定値afeststに一致させる補正量として算出されるものである。第１気筒燃料補正量indfcr1は、第１気筒＃１の燃料噴射量と乗算されるものである。これにより、気筒２０１ごとの空燃比のばらつきの解消が図られる。
【０１７９】
一方、ステップＳ６０４で、第１気筒タイミング判定フラグxtmgcyl1に「１」がセットされていないと判定された場合（Ｓ６０４：ＮＯ）、ＥＣＵ１は、次にステップＳ６０７に進む。
【０１８０】
次に、ＥＣＵ１は、ステップＳ６０７で、第２気筒タイミング判定フラグxtmgcyl2に「１」がセットされているか否かを判定する。第２気筒タイミング判定フラグxtmgcyl2に「１」がセットされている場合、第２気筒空燃比推定値indafest2の値を更新したタイミングであると判断できる。第２気筒タイミング判定フラグxtmgcyl2に「１」がセットされている場合（Ｓ６０７：ＹＥＳ）、ＥＣＵ１は、次にステップＳ６０８に進む。以下、ステップＳ６０８，Ｓ６０９では、前述したステップＳ６０５，Ｓ６０６と同等の処理を行い、第２気筒燃料補正量indfcr2を算出する。
【０１８１】
一方、ステップＳ６０７で、第２気筒タイミング判定フラグxtmgcyl2に「１」がセットされていないと判定された場合（Ｓ６０７：ＮＯ）、ＥＣＵ１は、次にステップＳ６１０に進む。
【０１８２】
次に、ＥＣＵ１は、ステップＳ６１０で、第３気筒タイミング判定フラグxtmgcyl3に「１」がセットされているか否かを判定する。第３気筒タイミング判定フラグxtmgcyl3に「１」がセットされている場合、第３気筒空燃比推定値indafest3の値を更新したタイミングであると判断できる。第３気筒タイミング判定フラグxtmgcyl3に「１」がセットされている場合（Ｓ６１０：ＹＥＳ）、ＥＣＵ１は、次にステップＳ６１１に進む。以下、ステップＳ６１１，Ｓ６１２では、前述したステップＳ６０５，Ｓ６０６と同等の処理を行い、第３気筒燃料補正量indfcr3を算出する。
【０１８３】
一方、ステップＳ６１０で、第３気筒タイミング判定フラグxtmgcyl3に「１」がセットされていないと判定された場合（Ｓ６１０：ＮＯ）、ＥＣＵ１は、次にステップＳ６１３に進む。
【０１８４】
次に、ＥＣＵ１は、ステップＳ６１３で、第４気筒タイミング判定フラグxtmgcyl4に「１」がセットされているか否かを判定する。第４気筒タイミング判定フラグxtmgcyl4に「１」がセットされている場合、第４気筒空燃比推定値indafest4の値を更新したタイミングであると判断できる。第４気筒タイミング判定フラグxtmgcyl4に「１」がセットされている場合（Ｓ６１３：ＹＥＳ）、ＥＣＵ１は、次にステップＳ６１４に進む。以下、ステップＳ６１４，Ｓ６１５では、前述したステップＳ６０５，Ｓ６０６と同等の処理を行い、第４気筒燃料補正量indfcr4を算出する。
【０１８５】
これに対し、ステップＳ６１３で、第４気筒タイミング判定フラグxtmgcyl4に「１」がセットされていないと判定された場合（Ｓ６１３：ＮＯ）、空燃比を推定したタイミングではないため、ＥＣＵ１は燃料補正量の算出を行わない。
【０１８６】
また、ステップＳ６０２で、運転気筒状態フェイズ信号estmodfが「１」ではないと判定された場合（Ｓ６０２：ＮＯ）、内燃機関２０は全筒運転に完全に移行していない、又は、減筒運転実行中であると判断できる。この場合、ＥＣＵ１は、次にステップＳ６１６に進む。
【０１８７】
次に、ＥＣＵ１は、ステップＳ６１６で、第２気筒燃料補正量indfcr2及び第３気筒燃料補正量indfcr3に「１」をセットする。これは、減筒運転実行中は、休止している第２気筒＃２及び第３気筒＃３に対して燃料補正を行わないためである。また、全筒運転実行中、又は、減筒運転への移行中を示す、運転気筒状態フェイズ信号estmodfが「２」か「３」である場合は、空燃比の推定は行うものの、その確からしさが保証できないため、燃料補正を行わない。セット後、ＥＣＵ１は、次にステップＳ６１７に進む。
【０１８８】
次に、ＥＣＵ１は、ステップＳ６１７で、運転気筒状態フェイズ信号estmodfが「４」であるか否かを判定する。すなわち、内燃機関２０が減筒運転実行中であり、かつ正確な空燃比センサ値を得るための十分な時間が経過しているか否かを判定する。運転気筒状態フェイズ信号estmodfが「４」である場合（Ｓ６１７：ＹＥＳ）、ＥＣＵ１は、次にステップＳ６１８に進む。
【０１８９】
次に、ＥＣＵ１は、ステップＳ６１８で、次式ｆ７を用いて、標準空燃比推定値afeststを算出する。ステップＳ６０３の場合と異なり、第２気筒＃２及び第３気筒＃３は休止しており、空燃比の推定が行われないため、次式ｆ７では、第２気筒空燃比推定値indafest2及び第３気筒空燃比推定値indafest3は含まれない。標準空燃比推定値afeststの算出後、ＥＣＵ１は、次にステップＳ６１９に進む。
【０１９０】
【数７】
2016109034.tif 000009
（ｆ７）
【０１９１】
次に、ＥＣＵ１は、ステップＳ６１９で、第１気筒タイミング判定フラグxtmgcyl1に「１」がセットされているか否かを判定する。第１気筒タイミング判定フラグxtmgcyl1に「１」がセットされている場合、第１気筒空燃比推定値indafest1の値を更新したタイミングであると判断できる。第１気筒タイミング判定フラグxtmgcyl1に「１」がセットされていると判定された場合（Ｓ６１９：ＹＥＳ）、ＥＣＵ１は、次にステップＳ６２０に進む。
【０１９２】
次に、ＥＣＵ１は、ステップＳ６２０で、第１気筒空燃比偏差deltaaf1を算出する。以降、ステップＳ６２０，Ｓ６２１では、前述したステップＳ６０５，Ｓ６０６と同等の処理を行い、第１気筒燃料補正量indfcr1を算出する。
【０１９３】
一方、ステップＳ６１９で、第１気筒タイミング判定フラグxtmgcyl1に「１」がセットされていないと判定された場合（Ｓ６１９：ＮＯ）、ＥＣＵ１は、次にステップＳ６２２に進む。
【０１９４】
次に、ＥＣＵ１は、ステップＳ６２２で、第４気筒タイミング判定フラグxtmgcyl4に「１」がセットされているか否かを判定する。第４気筒タイミング判定フラグxtmgcyl4に「１」がセットされていると判定された場合（Ｓ６２２：ＹＥＳ）、ＥＣＵ１は、次にステップＳ６２３に進む。
【０１９５】
次に、ＥＣＵ１は、ステップＳ６２３で、第４気筒空燃比偏差deltaaf4を算出する。以降、ステップＳ６２３，Ｓ６２４では、前述したステップＳ６１４，Ｓ６１５と同等の処理を行い、第４気筒燃料補正量indfcr4を算出する。
【０１９６】
一方、ステップＳ６２２で、第４気筒タイミング判定フラグxtmgcyl4に「１」がセットされていないと判定された場合（Ｓ６２２：ＮＯ）、空燃比を推定したタイミングではないため、ＥＣＵ１は燃料補正量の算出を行わない。
【０１９７】
これに対し、ステップＳ６１７で、運転気筒状態フェイズ信号estmodfが「４」ではないと判定された場合（Ｓ６１７：ＮＯ）、燃料補正が許可されていないと判断できる。この場合、ＥＣＵ１は、次にステップＳ６２５に進む。
【０１９８】
次に、ＥＣＵ１は、ステップＳ６２５で、第１気筒燃料補正量indfcr1と第４気筒燃料補正量indfcr4に「１」をセットする。
【０１９９】
ここで、仮に、内燃機関２０が減筒運転実行中の場合も、全筒運転実行中と同様のオブザーバを用いて空燃比の推定を行い、燃料の補正を行った場合の結果を、図１２に点線で示している。
【０２００】
運転気筒状態フェイズ信号estmodfが「３」又は「４」である場合、内燃機関２０は減筒運転実行中、又は、減筒運転への移行中である。この場合に、気筒別空燃比推定ルーチンで、全筒運転実行中と同様のオブザーバを用いて空燃比の推定を行うと、図１２に点線で示すように、第１気筒空燃比推定値indafest1、第２気筒空燃比推定値indafest2、第３気筒空燃比推定値indafest3、第４気筒空燃比推定値indafest4は、いずれも実際の値から乖離したものとなってしまう。
【０２０１】
そのような乖離が生じた第１気筒空燃比推定値indafest1、第２気筒空燃比推定値indafest2、第３気筒空燃比推定値indafest3、第４気筒空燃比推定値indafest4に基づいて算出することで、第１気筒燃料補正量indfcr1、第２気筒燃料補正量indfcr2、第３気筒燃料補正量indfcr3、第４気筒燃料補正量indfcr4も点線で示すように、妥当な値から乖離したものとなってしまう。このため、不当な量の燃料が供給された気筒２０１では、排気ガス成分やドライバビリティの悪化等の不具合が生じる。
【０２０２】
これに対し、本実施形態では、気筒別空燃比推定ルーチンで、内燃機関２０が減筒運転実行中は、全筒運転実行中用のオブザーバを用いた空燃比の推定を行わない。より具体的には、内燃機関２０が減筒運転実行中は、全筒運転実行中用のオブザーバとは異なるオブザーバを用いて空燃比の推定を行う。したがって、気筒２０１間の空燃比ずれが解消でき、排気ガス成分やドライバビリティの悪化等の不具合が生じることを防止することができる。
【０２０３】
以上、具体例を参照しつつ本発明の実施の形態について説明した。しかし、本発明はこれらの具体例に限定されるものではない。すなわち、これら具体例に、当業者が適宜設計変更を加えたものも、本発明の特徴を備えている限り、本発明の範囲に包含される。前述した各具体例が備える各要素およびその配置、材料、条件、形状、サイズなどは、例示したものに限定されるわけではなく適宜変更することができる。
【０２０４】
例えば、前述した実施形態では、全筒運転実行中及び減筒運転実行中に気筒別空燃比制御を行うものとしている。しかしながら、これに代えて、全筒運転実行中は気筒別空燃比制御を行う一方で、減筒運転実行中は気筒別空燃比制御を行わないものとすることも可能である。この場合も、減筒運転実行中に全筒運転実行中用のオブザーバを用いて空燃比の推定を行ってしまい、排気ガス成分やドライバビリティの悪化等の不具合が生じる事態を抑制することができる。
【符号の説明】
【０２０５】
１    ：ＥＣＵ（制御装置）
２０  ：内燃機関
１０１：全筒運転実行部（全筒運転実行手段）
１０２：減筒運転実行部（減運転実行手段）
１０３：運転移行部（運転移行手段）
１０４：運転状態判定部（運転状態判定手段）
１０５：検出情報取得部（検出情報取得手段）
１０６：空燃比推定部（空燃比推定手段）
１０７：燃料補正部（燃料補正手段）
２０１：気筒
２０３：クランクシャフト
４０２ｂ：排気集合部
４２１：空燃比センサ
【図１】
2016109034.tif 000010
【図２】
2016109034.tif 000011
【図３】
2016109034.tif 000012
【図４】
2016109034.tif 000013
【図５】
2016109034.tif 000014
【図６】
2016109034.tif 000015
【図７】
2016109034.tif 000016
【図８】
2016109034.tif 000017
【図９】
2016109034.tif 000018
【図１０】
2016109034.tif 000019
【図１１】
2016109034.tif 000020
【図１２】
2016109034.tif 000021
【図１３】
2016109034.tif 000022