(57)【要約】【課題】排気集合部に設置した空燃比センサの検出値に基づいて各気筒の空燃比を推定するシステムにおいて、エンジン運転中に空燃比センサ出力のサンプルタイミング（各気筒の空燃比検出タイミング）のずれを高精度且つ短時間で修正できるようにする。【解決手段】エンジン１１の１サイクル内で空燃比センサ３６の検出値のばらつきが最大となるように空燃比検出タイミングを補正するＬｏｃａｌ学習を実行した後に、気筒別空燃比制御中に各気筒の推定空燃比の変化と燃料補正量の変化との関係に基づいて空燃比検出タイミングを補正するＧｌｏｂａｌ学習を実行する。このＧｌｏｂａｌ学習では、各気筒の推定空燃比が想定している各気筒番号を仮想的に複数通り変更した場合の各々において各気筒の推定空燃比の変化とその推定空燃比の変更後の気筒番号の燃料補正量の変化との相関値を算出し、この相関値が最大となるように空燃比検出タイミングを補正する。【選択図】図１
2013253593.tif 000002
【特許請求の範囲】
【請求項１】
内燃機関（１１）の複数の気筒の排出ガスが合流して流れる排気集合部（３４ａ）に該排出ガスの空燃比を検出する空燃比センサ（３６）を設置し、各気筒の空燃比検出タイミング毎に検出された前記空燃比センサ（３６）の検出値に基づいて各気筒の空燃比を推定する気筒別空燃比推定手段（３９）と、各気筒の推定空燃比に基づいて各気筒の空燃比を制御する気筒別空燃比制御を実行する気筒別空燃比制御手段（３９）とを備えた内燃機関の気筒別空燃比制御装置において、
前記内燃機関（１１）の１サイクル内で前記空燃比センサ（３６）の検出値のばらつきが最大となるように前記空燃比検出タイミングを補正する第１のタイミング補正手段（３９）と、
前記気筒別空燃比制御中に少なくとも一つの気筒の推定空燃比の変化と該気筒の気筒別補正値の変化との関係に基づいて前記空燃比検出タイミングを補正する第２のタイミング補正手段（３９）とを備え、
前記第２のタイミング補正手段（３９）は、各気筒の推定空燃比が想定している各気筒番号を仮想的に複数通り変更した場合の各々において少なくとも一つの気筒の推定空燃比の変化と該推定空燃比の変更後の気筒番号の気筒別補正値の変化との相関値を算出し、該相関値が最大となるように前記空燃比検出タイミングを補正することを特徴とする内燃機関の気筒別空燃比制御装置。
【請求項２】
前記第１のタイミング補正手段（３９）により前記空燃比検出タイミングの補正を実行した後に前記第２のタイミング補正手段（３９）により前記空燃比検出タイミングの補正を実行することを特徴とする請求項１に記載の内燃機関の気筒別空燃比制御装置。
【請求項３】
前記第２のタイミング補正手段（３９）は、前記推定空燃比の変化量と前記気筒別補正値の変化量との積を前記相関値として算出し、該相関値が最大となるように前記空燃比検出タイミングを補正することを特徴とする請求項１又は２に記載の内燃機関の気筒別空燃比制御装置。
【請求項４】
前記第２のタイミング補正手段（３９）は、前記相関値の所定期間の積算値が最大となるように前記空燃比検出タイミングを補正することを特徴とする請求項３に記載の内燃機関の気筒別空燃比制御装置。
【請求項５】
内燃機関（１１）の複数の気筒の排出ガスが合流して流れる排気集合部（３４ａ）に該排出ガスの空燃比を検出する空燃比センサ（３６）を設置し、各気筒の空燃比検出タイミング毎に検出された前記空燃比センサ（３６）の検出値に基づいて各気筒の空燃比を推定する気筒別空燃比推定手段（３９）と、各気筒の推定空燃比に基づいて各気筒の空燃比を制御する気筒別空燃比制御を実行する気筒別空燃比制御手段（３９）とを備えた内燃機関の気筒別空燃比制御装置において、
前記内燃機関（１１）の１サイクル内で前記空燃比センサ（３６）の検出値のばらつきが最大となるように前記空燃比検出タイミングを補正する第１のタイミング補正手段（３９）と、
前記第１のタイミング補正手段（３９）により前記空燃比検出タイミングが補正された後、前記空燃比検出タイミングがずれていると判定される毎に該空燃比検出タイミングを前記内燃機関の燃焼間隔又はその複数倍ずつ補正する第２のタイミング補正手段（３９）と
を備えていることを特徴とする内燃機関の気筒別空燃比制御装置。
【請求項６】
前記第２のタイミング補正手段（３９）は、前記空燃比検出タイミングがずれていると判定される毎に前記空燃比検出タイミングを補正する際に、各気筒の空燃比検出タイミングを、まず燃焼順序が連続する気筒である連続気筒の空燃比検出タイミングに補正し、その後、前記連続気筒以外の気筒の空燃比検出タイミングに補正することを特徴とする請求項５に記載の内燃機関の気筒別空燃比制御装置。
【請求項７】
前記第２のタイミング補正手段（３９）により前記空燃比検出タイミングを１サイクル分補正しても前記空燃比検出タイミングがずれていると判定された場合には、前記第１のタイミング補正手段（３９）による前記空燃比検出タイミングの補正を再び実行することを特徴とする請求項５又は６に記載の内燃機関の気筒別空燃比制御装置。
【請求項８】
前記第１のタイミング補正手段（３９）は、前記各気筒の空燃比検出タイミング毎に検出された前記空燃比センサ（３６）の検出値の分散に相当する値が最大となるように前記空燃比検出タイミングを補正することを特徴とする請求項１乃至７のいずれかに記載の内燃機関の気筒別空燃比制御装置。
【請求項９】
前記第１のタイミング補正手段（３９）は、前記分散に相当する値の所定期間の積算値が最大となるように前記空燃比検出タイミングを補正することを特徴とする請求項８に記載の内燃機関の気筒別空燃比制御装置。
【請求項１０】
前記第１のタイミング補正手段（３９）は、前記分散に相当する値を正規化したデータの所定期間の積算値が最大となるように前記空燃比検出タイミングを補正することを特徴とする請求項８に記載の内燃機関の気筒別空燃比制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、内燃機関の排気集合部に設置した空燃比センサの検出値に基づいて各気筒の空燃比を推定する機能を備えた内燃機関の気筒別空燃比制御装置に関する発明である。
【背景技術】
【０００２】
例えば、特許文献１（特許第４３２１４１１号公報）に記載されているように、内燃機関の排気集合部に設置した空燃比センサの検出値に基づいて各気筒の空燃比を推定し、各気筒の推定空燃比に基づいて各気筒の空燃比を制御する気筒別空燃比制御を実行するシステムにおいて、内燃機関の運転中に空燃比センサ出力のサンプルタイミング（各気筒の空燃比検出タイミング）のずれを精度良く検出・修正できるようにしたものがある。この特許文献１では、気筒別空燃比制御中に、各気筒の空燃比検出タイミング毎に検出された空燃比センサの検出値に基づいて推定する各気筒の推定空燃比の気筒間のばらつき度合いに基づいて、空燃比検出タイミングのずれを判定し、少なくとも一つの気筒の推定空燃比の変化量とその気筒の燃料補正量の変化量との関係に基づいて、各気筒の空燃比検出タイミングを補正するようにしている。
【０００３】
具体的には、気筒別空燃比制御中に、空燃比検出タイミングがずれていると判定した場合に、空燃比検出タイミングを現在タイミング又は最進角位置から所定クランク角（例えば３０ＣＡ）ずつ遅角させて、少なくとも一つの気筒の推定空燃比の変化量とその気筒の燃料補正量の変化量との積を所定期間積算した相関値を算出する処理を繰り返し、相関値が最適となるタイミングを最適値として学習して空燃比検出タイミングを最適値に修正するようにしている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特許第４３２１４１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、上記特許文献１の技術では、最適な空燃比検出タイミングが現在タイミング又は最進角位置から大きく乖離している場合（例えば３６０ＣＡ乖離している場合）には、空燃比検出タイミングを所定クランク角（例えば３０ＣＡ）ずつ遅角させて、推定空燃比の変化量とその気筒の燃料補正量の変化量との積を所定期間積算した相関値を算出する処理を何回（例えば１２回）も繰り返す必要があり、空燃比検出タイミングずれの修正に要する時間が長くなってしまう。このように、空燃比検出タイミングずれの修正に要する時間が長くなる場合、その期間は、各気筒間の空燃比ばらつきが小さくなるように正しく制御することができず、排気エミッションの悪化を招くおそれがある。また、気筒別空燃比推定値又は気筒別空燃比制御の気筒別補正量に基づいて、気筒間の空燃比インバランス状態の故障を検出するようにしている場合、故障状態を検出できないおそれがある。
【０００６】
そこで、本発明が解決しようとする課題は、内燃機関の排気集合部に設置した空燃比センサの検出値に基づいて各気筒の空燃比を推定するシステムにおいて、内燃機関の運転中に空燃比センサ出力のサンプルタイミング（各気筒の空燃比検出タイミング）のずれを高精度且つ短時間で修正することができる内燃機関の気筒別空燃比制御装置を提供することにある。
【課題を解決するための手段】
【０００７】
上記課題を解決するために、請求項１に係る発明は、内燃機関（１１）の複数の気筒の排出ガスが合流して流れる排気集合部（３４ａ）に該排出ガスの空燃比を検出する空燃比センサ（３６）を設置し、各気筒の空燃比検出タイミング毎に検出された空燃比センサ（３６）の検出値に基づいて各気筒の空燃比を推定する気筒別空燃比推定手段（３９）と、各気筒の推定空燃比に基づいて各気筒の空燃比を制御する気筒別空燃比制御を実行する気筒別空燃比制御手段（３９）とを備えた内燃機関の気筒別空燃比制御装置において、内燃機関（１１）の１サイクル内で空燃比センサ（３６）の検出値のばらつきが最大となるように空燃比検出タイミングを補正する第１のタイミング補正手段（３９）と、気筒別空燃比制御中に少なくとも一つの気筒の推定空燃比の変化と該気筒の気筒別補正値の変化との関係に基づいて空燃比検出タイミングを補正する第２のタイミング補正手段（３９）とを備え、第２のタイミング補正手段（３９）は、各気筒の推定空燃比が想定している各気筒番号を仮想的に複数通り変更した場合の各々において少なくとも一つの気筒の推定空燃比の変化と該推定空燃比の変更後の気筒番号の気筒別補正値の変化との相関値を算出し、該相関値が最大となるように空燃比検出タイミングを補正するようにしたものである。
【０００８】
各気筒の空燃比検出タイミングがずれた場合、ある気筒の正しい空燃比検出タイミングがその気筒の現在の空燃比検出タイミングの近傍であるとは限らず、例えば、次の燃焼気筒の現在の空燃比検出タイミング又はそれよりも遅角側まで遅れることや、前の燃焼気筒の現在の空燃比検出タイミング又はそれよりも進角側まで進むことも想定される。例えば、図３（ｂ）に示すように、ある気筒（第１気筒＃１と仮定）の正しい空燃比検出タイミングが他の気筒（第３気筒＃３と仮定）の現在の空燃比検出タイミングまでずれた場合、第１気筒＃１の実空燃比を最もよく検出しているタイミングは、第１気筒＃１の現在の空燃比検出タイミングではなく、第３気筒＃３の現在の空燃比検出タイミングであることを意味しており、第１気筒＃１の現在の空燃比検出タイミングに基づき推定した第１気筒＃１の推定空燃比に基づき算出した第１気筒＃１の気筒別補正値（例えば燃料補正量）で気筒別空燃比制御を実施すると、第１気筒＃１の実空燃比は第１気筒＃１の気筒別補正値の変化に応じて変化するが、第１気筒＃１の推定空燃比は第１気筒＃１の気筒別補正値の変化に応じて変化せず、第３気筒＃３の推定空燃比が第１気筒＃１の気筒別補正値の変化に応じて変化することになる。
【０００９】
この特性に着目して、請求項１に係る発明では、第２のタイミング補正手段によって、気筒別空燃比制御中に少なくとも一つの気筒の推定空燃比の変化とその気筒の気筒別補正値（例えば燃料補正量）の変化との関係に基づいて空燃比検出タイミングを補正するようにしているため、空燃比検出タイミングのずれを修正することができる。しかも、各気筒の推定空燃比が想定している各気筒番号を仮想的に複数通り変更した場合の各々において少なくとも一つの気筒の推定空燃比の変化とその推定空燃比の変更後の気筒番号の気筒別補正値の変化との相関値を算出し、その相関値に基づいて空燃比検出タイミングを補正するようにしている。これにより、実際に現在の空燃比検出タイミングを順次ずらして相関値を算出する必要がなく、現在の空燃比検出タイミングでの各気筒の推定空燃比とそれに基づく各気筒の気筒別補正値のみに基づいて、仮想的に想定気筒を入れ替えた場合の各々の相関値を同時に算出して比較することができ、最適な空燃比検出タイミングが現在の空燃比検出タイミングから大きく乖離している場合でも、短時間で空燃比検出タイミングのずれを修正することができる。
【００１０】
また、例えば、ある気筒（第１気筒＃１と仮定）の正しい空燃比検出タイミングが他の連続する気筒（第２気筒＃２、第４気筒＃４と仮定）の現在の空燃比検出タイミングの中間までずれた場合、第１気筒＃１の実空燃比を最も精度良く検出することができる空燃比検出タイミングは、第１気筒＃１の現在の空燃比検出タイミングではなく、第２気筒＃２と第４気筒＃４の現在の空燃比検出タイミングの中間であることを意味しており、前述の第１気筒＃１の気筒別補正値の変化に最も相関があるタイミングでの推定空燃比は現在の空燃比検出タイミングでの推定において得ることができないため、最適な空燃比検出タイミングに修正できない可能性がある。従って、各気筒の空燃比検出タイミングでの空燃比センサの検出値のいずれかが、各気筒の実空燃比のいずれかを精度良く検出していることが望ましい。
【００１１】
そこで、請求項１に係る発明では、第１のタイミング補正手段によって、内燃機関の１サイクル（７２０ＣＡ）内で空燃比センサの検出値のばらつき（変動）が最大となるように空燃比検出タイミングを補正するようにしている。これにより、各気筒の実空燃比がばらついている場合、１サイクル内で空燃比が変動するが、その変動を最大に検出することができ、各気筒の空燃比検出タイミングでの空燃比センサの検出値のいずれかが、各気筒の実空燃比のいずれかを精度良く検出しているようにできる。これにより、各気筒の推定空燃比のいずれかが各気筒の実空燃比のいずれかを検出することができるため、第２のタイミング補正手段において、空燃比検出タイミングのずれを精度良く修正することができる。以上により、請求項１に係る発明によれば、高精度且つ短時間で空燃比検出タイミングのずれを修正することが可能となる。
【００１２】
また、請求項５に係る発明は、内燃機関（１１）の複数の気筒の排出ガスが合流して流れる排気集合部（３４ａ）に該排出ガスの空燃比を検出する空燃比センサ（３６）を設置し、各気筒の空燃比検出タイミング毎に検出された空燃比センサ（３６）の検出値に基づいて各気筒の空燃比を推定する気筒別空燃比推定手段（３９）と、各気筒の推定空燃比に基づいて各気筒の空燃比を制御する気筒別空燃比制御を実行する気筒別空燃比制御手段（３９）とを備えた内燃機関の気筒別空燃比制御装置において、内燃機関（１１）の１サイクル内で空燃比センサ（３６）の検出値のばらつきが最大となるように空燃比検出タイミングを補正する第１のタイミング補正手段（３９）と、この第１のタイミング補正手段（３９）により空燃比検出タイミングが補正された後、空燃比検出タイミングがずれていると判定される毎に該空燃比検出タイミングを内燃機関の燃焼間隔又はその複数倍ずつ補正する第２のタイミング補正手段（３９）とを備えた構成としたものである。
【００１３】
この構成では、まず、第１のタイミング補正手段によって、内燃機関の１サイクル（７２０ＣＡ）内で空燃比センサの検出値のばらつき（変動）が最大となるように空燃比検出タイミングを補正することで、各気筒の空燃比検出タイミングでの空燃比センサの検出値のいずれかが、各気筒の実空燃比のいずれかを精度良く検出している状態、つまり、各気筒の正しい空燃比検出タイミングが、いずれかの気筒の現在の空燃比検出タイミンとなっている状態にすることができる。この後、空燃比検出タイミングがずれていると判定される毎に、第２のタイミング補正手段によって、空燃比検出タイミングを内燃機関の燃焼間隔又はその複数倍ずつ補正することで、各気筒の空燃比検出タイミングを他の気筒の空燃比検出タイミングと入れ替えて、各気筒の空燃比検出タイミングを正しい空燃比検出タイミングに補正することができ、短時間で空燃比検出タイミングのずれを精度良く修正することができる。これにより、請求項５に係る発明においても高精度且つ短時間で空燃比検出タイミングのずれを修正することが可能となる。
【図面の簡単な説明】
【００１４】
【図１】図１は本発明の実施例１におけるエンジン制御システムの概略構成を示す図である。
【図２】図２は空燃比制御機能を説明するブロック図である。
【図３】図３は各気筒の推定空燃比と気筒別補正値と実空燃比の挙動を示す図である。
【図４】図４は気筒別空燃比制御ルーチンの処理の流れを示すフローチャートである。
【図５】図５は空燃比検出タイミングずれ判定ルーチンの処理の流れを示すフローチャートである。
【図６】図６は実施例１の空燃比検出タイミングずれ学習補正ルーチンの処理の流れを示すフローチャートである。
【図７】図７は実施例１のＬｏｃａｌ学習実行ルーチンの処理の流れを示すフローチャートである。
【図８】図８は実施例１のＬｏｃａｌ学習指標算出ルーチンの処理の流れを示すフローチャートである。
【図９】図９は実施例１のＧｌｏｂａｌ学習実行ルーチンの処理の流れを示すフローチャートである。
【図１０】図１０は実施例１のＧｌｏｂａｌ学習指標算出ルーチンの処理の流れを示すフローチャートである。
【図１１】図１１は空燃比検出タイミングの変更を仮定した場合の想定気筒を示す図である。
【図１２】図１２は実施例１の空燃比検出タイミングずれ学習補正の実行例を示すタイムチャートである。
【図１３】図１３は実施例２のＬｏｃａｌ学習指標算出ルーチンの処理の流れを示すフローチャートである。
【図１４】図１４は実施例３のＧｌｏｂａｌ学習を説明する図である。
【図１５】図１５は実施例３の空燃比検出タイミングずれ学習補正ルーチンの処理の流れを示すフローチャートである。
【図１６】図１６は実施例３のＬｏｃａｌ学習実行ルーチンの処理の流れを示すフローチャートである。
【図１７】図１７は実施例３のＧｌｏｂａｌ学習実行ルーチンの処理の流れを示すフローチャートである。
【図１８】図１８は実施例３の空燃比検出タイミングずれ学習補正の実行例（その１）を示すタイムチャートである。
【図１９】図１９は実施例３の空燃比検出タイミングずれ学習補正の実行例（その２）を示すタイムチャートである。
【図２０】図２０は実施例３の空燃比検出タイミングずれ学習補正の実行例（その３）を示すタイムチャートである。
【発明を実施するための形態】
【００１５】
以下、本発明を実施するための形態を具体化した幾つかの実施例を説明する。
【実施例１】
【００１６】
本発明の実施例１を図１乃至図１２に基づいて説明する。
まず、図１に基づいてエンジン制御システム全体の概略構成を説明する。
【００１７】
内燃機関である例えば直列４気筒のエンジン１１は、第１気筒＃１〜第４気筒＃４の４つの気筒を有し、このエンジン１１の吸気管１２の最上流部には、エアクリーナ１３が設けられ、このエアクリーナ１３の下流側に、吸入空気量を検出するエアフローメータ１４が設けられている。このエアフローメータ１４の下流側には、モータ等によって開度調節されるスロットルバルブ１５と、このスロットルバルブ１５の開度（スロットル開度）を検出するスロットル開度センサ１６とが設けられている。
【００１８】
更に、スロットルバルブ１５の下流側には、サージタンク１７が設けられ、このサージタンク１７には、吸気管圧力を検出する吸気管圧力センサ１８が設けられている。また、サージタンク１７には、エンジン１１の各気筒に空気を導入する吸気マニホールド１９が設けられ、各気筒の吸気マニホールド１９の吸気ポート近傍に、それぞれ燃料を吸気ポートに向けて噴射する燃料噴射弁２０が取り付けられている。エンジン運転中は、燃料タンク２１内の燃料が燃料ポンプ２２によりデリバリパイプ２３に送られ、各気筒の噴射タイミング毎に各気筒の燃料噴射弁２０から燃料が噴射される。デリバリパイプ２３には、燃料圧力（燃圧）を検出する燃圧センサ２４が取り付けられている。
【００１９】
また、エンジン１１には、吸気バルブ２５と排気バルブ２６のバルブタイミング（開閉タイミング）をそれぞれ変化させる可変バルブタイミング機構２７，２８が設けられている。更に、エンジン１１には、吸気カム軸２９と排気カム軸３０の回転に同期してカム角信号を出力する吸気カム角センサ３１と排気カム角センサ３２が設けられていると共に、エンジン１１のクランク軸の回転に同期して所定クランク角毎（例えば３０ＣＡ毎）にクランク角信号のパルスを出力するクランク角センサ３３が設けられている。
【００２０】
一方、エンジン１１の排気管３４のうちの各気筒の排出ガスが合流して流れる排気集合部３４ａ（各気筒の排気マニホールド３５が集合する部分又はそれよりも下流側）には、排出ガスの空燃比を検出する空燃比センサ３６が設けられ、この空燃比センサ３６の下流側に、排出ガス中のＣＯ，ＨＣ，ＮＯｘ等を浄化する三元触媒等の触媒３７が設けられている。また、エンジン１１のシリンダブロックには、冷却水温を検出する冷却水温センサ３８が取り付けられている。
【００２１】
これら各種センサの出力は、電子制御ユニット（以下「ＥＣＵ」と表記する）３９に入力される。このＥＣＵ３９は、マイクロコンピュータを主体として構成され、内蔵されたＲＯＭ（記憶媒体）に記憶された各種のエンジン制御用のプログラムを実行することで、エンジン運転状態に応じて、燃料噴射量、点火時期、スロットル開度（吸入空気量）等を制御する。
【００２２】
その際、ＥＣＵ３９は、所定の空燃比Ｆ／Ｂ制御実行条件が成立したときに、空燃比センサ３６の出力に基づいて排出ガスの空燃比を目標空燃比に一致させるように混合気の空燃比（例えば燃料噴射量）をＦ／Ｂ制御する空燃比Ｆ／Ｂ制御を実行する。ここで、「Ｆ／Ｂ」は「フィードバック」を意味する（以下、同様）。
【００２３】
具体的には、図２に示すように、まず、空燃比偏差算出部４０で、検出空燃比（空燃比センサ３６で検出した排出ガスの空燃比）と目標空燃比との偏差を算出し、空燃比Ｆ／Ｂ制御部４１で、検出空燃比と目標空燃比との偏差が小さくなるように空燃比補正係数を算出する。そして、噴射量算出部４２で、エンジン回転速度やエンジン負荷（吸気管負圧や吸入空気量等）に基づいて算出されたベース噴射量や空燃比補正係数等に基づいて燃料噴射量を算出し、その燃料噴射量に基づいて各気筒の燃料噴射弁２０を制御する。
【００２４】
更に、ＥＣＵ３９は、後述する図４の気筒別空燃比制御ルーチンを実行することで、各気筒の空燃比検出タイミング毎に検出された空燃比センサ３６の検出値に基づいて各気筒の空燃比を気筒毎に推定し、各気筒の推定空燃比に基づいて各気筒の空燃比を気筒毎に制御する気筒別空燃比制御を実行する。
【００２５】
具体的には、図２に示すように、まず、気筒別空燃比推定部４３で、後述する気筒別空燃比推定モデルを用いて空燃比センサ３６の検出値（排気集合部３４ａを流れる排出ガスの実空燃比）に基づいて各気筒の空燃比を気筒毎に推定し、基準空燃比算出部４４で、全気筒の推定空燃比の平均値を算出して、その平均値を基準空燃比（全気筒の目標空燃比）に設定する。この後、気筒別空燃比偏差算出部４５で、各気筒の推定空燃比と基準空燃比との偏差を気筒毎に算出して、気筒別空燃比制御部４６で、各気筒の推定空燃比と基準空燃比との偏差が小さくなるように気筒別補正値として例えば燃料補正量（燃料噴射量の補正量）を気筒毎に算出し、その算出結果に基づいて各気筒の燃料噴射量を気筒毎に補正することで、各気筒に供給する混合気の空燃比を気筒毎に補正して気筒間の空燃比ばらつきを少なくする。
【００２６】
ここで、空燃比センサ３６の検出値（排気集合部３４ａを流れる排出ガスの実空燃比）に基づいて各気筒の空燃比を推定するモデル（以下「気筒別空燃比推定モデル」という）の具体例を説明する。
【００２７】
排気集合部３４ａにおけるガス交換に着目して、空燃比センサ３６の検出値を、排気集合部３４ａにおける各気筒の推定空燃比の履歴と空燃比センサ３６の検出値の履歴とにそれぞれ所定の重みを乗じて加算したものとしてモデル化し、このモデルを用いて各気筒の空燃比を推定するようにしている。この際、オブザーバとしてはカルマンフィルタを用いる。
【００２８】
より具体的には、排気集合部３４ａにおけるガス交換のモデルを次の（１）式にて近似する。
ｙs(t)＝ｋ1 ×ｕ(t-1) ＋ｋ2 ×ｕ(t-2) −ｋ3 ×ｙs(t-1)−ｋ4 ×ｙs(t-2)
……（１）
ここで、ｙs は空燃比センサ３６の検出値、ｕは排気集合部３４ａに流入するガスの空燃比、ｋ1 〜ｋ4 は定数である。
【００２９】
排気系では、排気集合部３４ａにおけるガス流入及び混合の一次遅れ要素と、空燃比センサ３６の応答遅れによる一次遅れ要素とが存在する。そこで、上記（１）式では、これらの一次遅れ要素を考慮して過去２回分の履歴を参照することとしている。
【００３０】
上記（１）式を状態空間モデルに変換すると、次の（２ａ）、（２ｂ）式が導き出される。
Ｘ(t+1) ＝Ａ・Ｘ(t) ＋Ｂ・ｕ(t) ＋Ｗ(t)       ……（２ａ）
Ｙ(t) ＝Ｃ・Ｘ(t) ＋Ｄ・ｕ(t)                 ……（２ｂ）
ここで、Ａ，Ｂ，Ｃ，Ｄはモデルのパラメータ、Ｙは空燃比センサ３６の検出値、Ｘは状態変数としての各気筒の推定空燃比、Ｗはノイズである。
【００３１】
更に、上記（２ａ）、（２ｂ）式によりカルマンフィルタを設計すると、次の（３）式が得られる。
Ｘ＾(k+1｜k)＝Ａ・Ｘ＾(k｜k-1)＋Ｋ｛Ｙ(k) −Ｃ・Ａ・Ｘ＾(k｜k-1)｝  ……（３）  ここで、Ｘ＾（エックスハット）は各気筒の推定空燃比、Ｋはカルマンゲインである。Ｘ＾(k+1｜k)の意味は、時間(k) の推定値により次の時間(k+1) の推定値を求めることを表す。
【００３２】
以上のようにして、気筒別空燃比推定モデルをカルマンフィルタ型オブザーバにて構成することにより、燃焼サイクルの進行に伴って各気筒の空燃比を順次推定することができる。
【００３３】
次に、各気筒の空燃比検出タイミング（空燃比センサ３６の出力のサンプルタイミング）の設定方法について説明する。本実施例では、各気筒から排出される排出ガスが空燃比センサ３６付近に到達してその空燃比が検出されるまでの遅れ（以下「排気系の応答遅れ」という）がエンジン運転状態によって変化することを考慮して、エンジン運転状態（例えばエンジン負荷、エンジン回転速度等）に応じてマップにより各気筒の空燃比検出タイミングを設定し、空燃比センサ３６の出力をＥＣＵ３９に取り込むようにしている。一般に、エンジン負荷が小さくなるほど、排気系の応答遅れが大きくなるため、各気筒の空燃比検出タイミングは、エンジン負荷が小さくなるほど、遅角側にシフトされるように設定されている。
【００３４】
しかしながら、各気筒の排気ポートから空燃比センサ３６までの排気マニホールド３５の長さが各気筒毎に異なると共に、各気筒の排出ガスの流れがエンジン運転状態（エンジン回転速度や筒内充填空気量等）によって複雑に変化し、しかも、エンジン１１の製造ばらつきや経年変化によっても排気系の応答遅れが変化するため、エンジン設計・製造過程で、各気筒の排気系の応答遅れ（各気筒の空燃比検出タイミング）とエンジン負荷との関係を精度良くマップ化しておくことは困難である。このため、各気筒の空燃比検出タイミングが適正な空燃比検出タイミングからずれる可能性がある。
【００３５】
もし、各気筒の空燃比検出タイミングがずれると、各気筒の空燃比の推定精度が悪化して、気筒別空燃比制御を続けても気筒間の推定空燃比のばらつきがいつまでも小さくならならない状態となる。
【００３６】
そこで、本実施例１では、後述する図５乃至図１０の各ルーチンを実行することで、エンジン１１の１サイクル（７２０ＣＡ）内で空燃比センサ３６の検出値のばらつき（変動）が最大となるように空燃比検出タイミングを補正するＬｏｃａｌ学習を実行し、このＬｏｃａｌ学習の実行後に、気筒別空燃比制御中に少なくとも一つの気筒の推定空燃比の変化とその気筒の気筒別補正値（例えば燃料補正量）の変化との関係に基づいて空燃比検出タイミングを補正するＧｌｏｂａｌ学習を実行する。このＧｌｏｂａｌ学習では、各気筒の推定空燃比が想定している各気筒番号を仮想的に複数通り変更した場合の各々において少なくとも一つの気筒の推定空燃比の変化とその推定空燃比の変更後の気筒番号の気筒別補正値の変化との相関値を算出し、この相関値が最大となるように空燃比検出タイミングを補正する。
【００３７】
各気筒の空燃比検出タイミングがずれた場合、ある気筒の正しい空燃比検出タイミングがその気筒の現在の空燃比検出タイミングの近傍であるとは限らず、例えば、次の燃焼気筒の現在の空燃比検出タイミング又はそれよりも遅角側まで遅れることや、前の燃焼気筒の現在の空燃比検出タイミング又はそれよりも進角側まで進むことも想定される。例えば、図３（ｂ）に示すように、ある気筒（第１気筒＃１と仮定）の正しい空燃比検出タイミングが他の気筒（第３気筒＃３と仮定）の現在の空燃比検出タイミングまでずれた場合、第１気筒＃１の実空燃比を最もよく検出しているタイミングは、第１気筒＃１の現在の空燃比検出タイミングではなく、第３気筒＃３の現在の空燃比検出タイミングであることを意味しており、第１気筒＃１の現在の空燃比検出タイミングに基づき推定した第１気筒＃１の推定空燃比に基づき算出した第１気筒＃１の気筒別補正値（例えば燃料補正量）で気筒別空燃比制御を実施すると、第１気筒＃１の実空燃比は第１気筒＃１の気筒別補正値の変化に応じて変化するが、第１気筒＃１の推定空燃比は第１気筒＃１の気筒別補正値の変化に応じて変化せず、第３気筒＃３の推定空燃比が第１気筒＃１の気筒別補正値の変化に応じて変化することになる。
【００３８】
この特性に着目して、本実施例では、Ｇｌｏｂａｌ学習によって、気筒別空燃比制御中に少なくとも一つの気筒の推定空燃比の変化とその気筒の気筒別補正値（例えば燃料補正量）の変化との関係に基づいて空燃比検出タイミングを補正するようにしているため、空燃比検出タイミングのずれを修正することができる。しかも、各気筒の推定空燃比が想定している各気筒番号を仮想的に複数通り変更した場合の各々において少なくとも一つの気筒の推定空燃比の変化とその推定空燃比の変更後の気筒番号の気筒別補正値（例えば燃料補正量）の変化との相関値を算出し、その相関値に基づいて空燃比検出タイミングを補正するようにしている。これにより、実際に現在の空燃比検出タイミングを順次ずらして相関値を算出する必要がなく、現在の空燃比検出タイミングでの各気筒の推定空燃比とそれに基づく各気筒の気筒別補正値のみに基づいて、仮想的に想定気筒を入れ替えた場合の各々の相関値を同時に算出して比較することができ、最適な空燃比検出タイミングが現在の空燃比検出タイミングから大きく乖離している場合でも、短時間で空燃比検出タイミングのずれを修正することができる。
【００３９】
また、例えば、ある気筒（第１気筒＃１と仮定）の正しい空燃比検出タイミングが他の連続する気筒（第２気筒＃２、第４気筒＃４と仮定）の現在の空燃比検出タイミングの中間までずれた場合、第１気筒＃１の実空燃比を最も精度良く検出することができる空燃比検出タイミングは、第１気筒＃１の現在の空燃比検出タイミングではなく、第２気筒＃２と第４気筒＃４の現在の空燃比検出タイミングの中間であることを意味しており、前述の第１気筒＃１の気筒別補正値の変化に最も相関があるタイミングでの推定空燃比は現在の空燃比検出タイミングでの推定において得ることができないため、最適な空燃比検出タイミングに修正できない可能性がある。従って、各気筒の空燃比検出タイミングでの空燃比センサ３６の検出値のいずれかが、各気筒の実空燃比のいずれかを精度良く検出していることが望ましい。
【００４０】
そこで、本実施例では、Ｌｏｃａｌ学習によって、エンジン１１の１サイクル（７２０ＣＡ）内で空燃比センサ３６の検出値のばらつき（変動）が最大となるように空燃比検出タイミングを補正するようにしている。これにより、各気筒の実空燃比がばらついている場合、１サイクル内で空燃比が変動するが、その変動を最大に検出することができ、各気筒の空燃比検出タイミングでの空燃比センサ３６の検出値のいずれかが、各気筒の実空燃比のいずれかを精度良く検出しているようにできる。これにより、各気筒の推定空燃比のいずれかが各気筒の実空燃比のいずれかを検出することができるため、Ｇｌｏｂａｌ学習において、空燃比検出タイミングのずれを精度良く修正することができる。
以下、本実施例１でＥＣＵ３９が実行する図４乃至図１０の各ルーチンの処理内容を説明する。
【００４１】
［気筒別空燃比制御ルーチン］
図４に示す気筒別空燃比制御ルーチンは、クランク角センサ３３の出力パルスに同期して所定クランク角毎（例えば３０ＣＡ毎）に起動され、特許請求の範囲でいう気筒別空燃比制御手段としての役割を果たす。本ルーチンが起動されると、まず、ステップ１０１で、気筒別空燃比制御の実行条件が成立しているか否かを判定する。この気筒別空燃比制御の実行条件としては、例えば次の条件(1) 〜(4) がある。
【００４２】
(1) 空燃比センサ３６が活性状態であること
(2) 空燃比センサ３６が異常（故障）と判定されていないこと
(3) エンジン１１が暖機状態（例えば冷却水温が所定温度以上）であること
(4) エンジン運転領域（例えばエンジン回転速度と吸気管圧力）が空燃比推定精度を確保できる運転領域であること
【００４３】
これら４つの条件(1) 〜(4) を全て満したときに気筒別空燃比制御の実行条件が成立し、いずれか１つでも満たさない条件があれば、実行条件が不成立となる。実行条件が不成立の場合は、以降の処理を行うことなく、本ルーチンを終了する。
【００４４】
一方、実行条件が成立している場合は、ステップ１０２に進み、各気筒の空燃比検出タイミング（空燃比センサ３６の出力のサンプルタイミング）を、その時点のエンジン負荷（例えば吸気管圧力）に応じてマップにより設定する。尚、各気筒の空燃比検出タイミングをエンジン負荷とエンジン回転速度に応じてマップにより設定しても良い。この空燃比検出タイミングを設定するマップは、後述する図７のＬｏｃａｌ学習実行ルーチン及び図９のＧｌｏｂａｌ学習実行ルーチンによって学習補正される。
【００４５】
この後、ステップ１０３に進み、現在のクランク角が上記ステップ１０２で設定した空燃比検出タイミングであるか否かを判定し、空燃比検出タイミングでなければ、以降の処理を行うことなく、本ルーチンを終了する。
【００４６】
これに対して、現在のクランク角が上記ステップ１０２で設定した空燃比検出タイミングであれば、ステップ１０４に進み、空燃比センサ３６の出力（空燃比検出値）を読み込む。この後、ステップ１０５に進み、前記気筒別空燃比推定モデルを用いて今回の空燃比推定対象となる気筒の空燃比を空燃比センサ３６の検出値に基づいて推定する。このステップ１０５の処理が特許請求の範囲でいう気筒別空燃比推定手段としての役割を果たす。この後、ステップ１０６に進み、全気筒の推定空燃比の平均値を算出して、その平均値を基準空燃比（全気筒の目標空燃比）に設定する。
【００４７】
この後、ステップ１０７に進み、各気筒の推定空燃比と基準空燃比との偏差を算出して、その偏差が小さくなるように各気筒の気筒別補正値として燃料補正量を算出した後、ステップ１０８に進み、各気筒の燃料補正量に基づいて各気筒の燃料噴射量を補正することで、各気筒に供給する混合気の空燃比を各気筒毎に補正して気筒間の空燃比ばらつきを少なくするように制御する。
【００４８】
［空燃比検出タイミングずれ判定ルーチン］
図５に示す空燃比検出タイミングずれ判定ルーチンは、クランク角センサ３３の出力パルスに同期して所定クランク角毎（例えば３０ＣＡ毎）に起動される。本ルーチンが起動されると、まず、ステップ２０１で、気筒別空燃比制御中であるか否かを判定し、気筒別空燃比制御中でなければ、以降の処理を行うことなく、本ルーチンを終了する。
【００４９】
これに対して、気筒別空燃比制御中であれば、ステップ２０２に進み、所定以上の燃料補正を実施中であるか否かを例えば下記の条件(A1)〜(A3)のいずれか１つ又は２つ以上によって判定する。
【００５０】
(A1)各気筒の燃料補正量のうちの最大の燃料補正量と最小の燃料補正量との偏差が所定値以上であるか否かで、所定以上の燃料補正を実施中であるか否かを判定する。
(A2)全気筒の燃料補正量の標準偏差が所定値以上であるか否かで、所定以上の燃料補正を実施中であるか否かを判定する。
(A3)燃料補正開始後の経過時間が所定時間以上であるか否かで、所定以上の燃料補正を実施中であるか否かを判定する。
【００５１】
このステップ２０２で、所定以上の燃料補正を実施していないと判定されれば、そのまま本ルーチンを終了するが、所定以上の燃料補正を実施中であると判定されれば、ステップ２０３に進み、気筒間の推定空燃比のばらつき度合いが大きいか否かを例えば下記の条件(B1)，(B2)のいずれか一方又は両方によって判定する。
【００５２】
(B1)各気筒の推定空燃比のうちの最大の推定空燃比と最小の推定空燃比との偏差が所定値以上であるか否かで、気筒間の推定空燃比のばらつき度合いが大きいか否かを判定する。
(B2)全気筒の推定空燃比の標準偏差が所定値以上であるか否かで、気筒間の推定空燃比のばらつき度合いが大きいか否かを判定する。
【００５３】
このステップ２０３で、気筒間の推定空燃比のばらつき度合いが小さいと判定されれば、空燃比検出タイミングが正しいと判断して、そのまま本ルーチンを終了するが、気筒間の推定空燃比のばらつき度合いが大きいと判定されれば、空燃比検出タイミングがずれている可能性があると判断して、ステップ２０４に進み、各気筒の燃料補正量の増減方向と推定空燃比の増減方向とが反対の挙動になっているか否かを、例えば各気筒の燃料補正量の変化率と推定空燃比の変化率との偏差が所定値以上であるか否かによって判定する。
【００５４】
このステップ２０４で、各気筒の燃料補正量の増減方向と推定空燃比の増減方向とが同じ挙動になっていると判定されれば、空燃比検出タイミングが正しいと判断して、そのまま本ルーチンを終了するが、各気筒の燃料補正量の増減方向と推定空燃比の増減方向とが反対の挙動になっていると判定されれば、ステップ２０５に進み、空燃比検出タイミングがずれていると判定して、ずれ判定フラグを「１」にセットした後、本ルーチンを終了する。
【００５５】
［空燃比検出タイミングずれ学習補正ルーチン］
図６に示す空燃比検出タイミングずれ学習補正ルーチンは、クランク角センサ３３の出力パルスに同期して所定クランク角毎（例えば３０ＣＡ毎）に起動される。本ルーチンが起動されると、まず、ステップ３０１で、Ｌｏｃａｌ学習完了フラグが「１」にセットされているか否かを判定し、Ｌｏｃａｌ学習完了フラグが「１」にセットされていると判定されれば、ステップ３０２に進み、Ｌｏｃａｌ学習完了後カウンタをカウントアップする。
【００５６】
この後、ステップ３０３に進み、図５の空燃比検出タイミングずれ判定ルーチンにより空燃比検出タイミングがずれていると判定されたか否かを、ずれ判定フラグが「１」にセットされているか否かによって判定し、空燃比検出タイミングがずれていると判定されていない場合（ずれ判定フラグ＝０の場合）には、以降の処理を行うことなく、本ルーチンを終了する。
【００５７】
一方、空燃比検出タイミングがずれていると判定されている場合（ずれ判定フラグ＝１の場合）には、ステップ３０４に進み、Ｌｏｃａｌ学習完了フラグが「０」であるか又はＬｏｃａｌ学習完了後カウンタのカウント値が所定値Ｔ1 以上であるか否かを判定する。
【００５８】
このステップ３０４で、Ｌｏｃａｌ学習完了フラグが「０」であると判定された場合、又は、Ｌｏｃａｌ学習完了後カウンタのカウント値が所定値Ｔ1 以上であると判定された場合には、ステップ３０５に進み、Ｌｏｃａｌ学習完了後カウンタのカウント値を「０」にリセットすると共に、Ｌｏｃａｌ学習完了フラグを「０」にリセットして、Ｌｏｃａｌ学習実行カウンタをカウントアップする。
【００５９】
この後、ステップ３０６に進み、各気筒の気筒別補正値（燃料補正量）を前回値にホールドした後、ステップ３０７に進み、後述する図７のＬｏｃａｌ学習実行ルーチンを実行して、１サイクル内で空燃比センサ３６の検出値のばらつきが最大となるように空燃比検出タイミングを補正するＬｏｃａｌ学習を実行する。
【００６０】
一方、上記ステップ３０４で、Ｌｏｃａｌ学習完了フラグが「１」であると判定され、且つ、Ｌｏｃａｌ学習完了後カウンタのカウント値が所定値Ｔ1 に達していないと判定された場合には、ステップ３０８に進み、Ｌｏｃａｌ学習完了後カウンタのカウント値が所定値Ｔ2 以上であるか否かを判定する。ここで、所定値Ｔ2 は、所定値Ｔ1 よりも小さい値である（Ｔ2 ＜Ｔ1 ）。
【００６１】
このステップ３０８で、Ｌｏｃａｌ学習完了後カウンタのカウント値が所定値Ｔ2 に達していないと判定された場合には、Ｌｏｃａｌ学習が完了してから気筒別空燃比制御が安定するのに十分な時間が経過していないと判断して、本ルーチンを終了する。
【００６２】
その後、上記ステップ３０８で、Ｌｏｃａｌ学習完了後カウンタのカウント値が所定値Ｔ2 以上であると判定された場合には、Ｌｏｃａｌ学習が完了してから気筒別空燃比制御が安定するのに十分な時間が経過したと判断して、ステップ３０９に進み、Ｇｌｏｂａｌ学習実行カウンタをカウントアップした後、ステップ３１０に進み、後述する図９のＧｌｏｂａｌ学習実行ルーチンを実行して、各気筒の推定空燃比の変化と気筒別補正値（燃料補正量）の変化との関係に基づいて空燃比検出タイミングを補正するＧｌｏｂａｌ学習を実行する。
【００６３】
［Ｌｏｃａｌ学習実行ルーチン］
図７に示すＬｏｃａｌ学習実行ルーチンは、前記図６の空燃比検出タイミングずれ学習補正ルーチンのステップ３０７で実行されるサブルーチンであり、特許請求の範囲でいう第１のタイミング補正手段としての役割を果たす。
【００６４】
本ルーチンでは、１サイクル内で空燃比センサ３６の検出値のばらつきが最大となるように空燃比検出タイミングを補正するＬｏｃａｌ学習を実行する。このＬｏｃａｌ学習では、各気筒の空燃比検出タイミング毎に検出された空燃比センサ３６の検出値の分散に相当する値が最大となるように空燃比検出タイミングを補正する。
【００６５】
本ルーチンが起動されると、まず、ステップ４０１で、Ｌｏｃａｌ学習実行カウンタのカウント値が所定値（例えば３０サイクルに相当する値）以下であるか否かを判定する。
【００６６】
このステップ４０１で、Ｌｏｃａｌ学習実行カウンタのカウント値が所定値以下であると判定されれば、ステップ４０２に進み、図８のＬｏｃａｌ学習指標算出ルーチンを実行して、第１気筒＃１の空燃比検出タイミングを下記の各タイミングＬ1 〜Ｌ6 ［ＣＡ］と仮定した場合について、それぞれ各気筒の空燃比検出タイミング毎に検出された空燃比センサ３６の検出値の分散に相当する値（以下「検出空燃比の分散」という）を算出し、この検出空燃比の分散をＬｏｃａｌ学習指標とする。
【００６７】
(1) 第１気筒＃１の空燃比検出タイミングを、第１のタイミングＬ1 ＝Ｄca1 −９０（第１気筒＃１の現在の空燃比検出タイミングＤca1 から９０ＣＡ進角したタイミング）と仮定した場合の検出空燃比の分散Ｖ(Dca1-90) は、次式により算出する。
【００６８】
【数１】
2013253593.tif 000003
【００６９】
ここで、Ｎは一つの空燃比センサ３６当りの気筒数（例えば４）、φ(k) はｋ［ＣＡ］での空燃比センサ３６の検出値である。また、Ｍean φ(k) は｛φ(k) 、φ(k+720/N*1) 、φ(k+720/N*2) 、φ(k+720/N*3) ｝の平均値である。尚、φ(k) は等量比（空気過剰率の逆数）で算出される。
【００７０】
(2) 第１気筒＃１の空燃比検出タイミングを、第２のタイミングＬ2 ＝Ｄca1 −６０（第１気筒＃１の現在の空燃比検出タイミングＤca1 から６０ＣＡ進角したタイミング）と仮定した場合の検出空燃比の分散Ｖ(Dca1-60) は、次式により算出する。
【００７１】
【数２】
2013253593.tif 000004
【００７２】
(3) 第１気筒＃１の空燃比検出タイミングを、第３のタイミングＬ3 ＝Ｄca1 −３０（第１気筒＃１の現在の空燃比検出タイミングＤca1 から３０ＣＡ進角したタイミング）と仮定した場合の検出空燃比の分散Ｖ(Dca1-30) は、次式により算出する。
【００７３】
【数３】
2013253593.tif 000005
【００７４】
(4) 第１気筒＃１の空燃比検出タイミングを、第４のタイミングＬ4 ＝Ｄca1 （第１気筒＃１の現在の空燃比検出タイミングＤca1 と同じタイミング）と仮定した場合の検出空燃比の分散Ｖ(Dca1)は、次式により算出する。
【００７５】
【数４】
2013253593.tif 000006
【００７６】
(5) 第１気筒＃１の空燃比検出タイミングを、第５のタイミングＬ5 ＝Ｄca1 ＋３０（第１気筒＃１の現在の空燃比検出タイミングＤca1 から３０ＣＡ遅角したタイミング）と仮定した場合の検出空燃比の分散Ｖ(Dca1+30) は、次式により算出する。
【００７７】
【数５】
2013253593.tif 000007
【００７８】
(6) 第１気筒＃１の空燃比検出タイミングを、第６のタイミングＬ6 ＝Ｄca1 ＋６０（第１気筒＃１の現在の空燃比検出タイミングＤca1 から６０ＣＡ遅角したタイミング）と仮定した場合の検出空燃比の分散Ｖ(Dca1+60) は、次式により算出する。
【００７９】
【数６】
2013253593.tif 000008
【００８０】
このようにして、第１気筒＃１の空燃比検出タイミングを各タイミングＬ1 〜Ｌ6 と仮定した場合について、それぞれ検出空燃比の分散Ｖ（Ｌｏｃａｌ学習指標）を算出した後、図７のステップ４０３に進み、第１気筒＃１の空燃比検出タイミングを各タイミングＬ1 〜Ｌ6 と仮定した場合について、それぞれ前回までの検出空燃比の分散Ｖの積算値に今回の検出空燃比の分散Ｖを積算して検出空燃比の分散Ｖの積算値を更新する。
【００８１】
その後、上記ステップ４０１で、Ｌｏｃａｌ学習実行カウンタのカウント値が所定値を越えたと判定された時点で、検出空燃比の分散Ｖの所定期間の積算値を算出したと判断して、ステップ４０４に進み、各タイミングＬ1 〜Ｌ6 のうちの検出空燃比の分散Ｖの所定期間の積算値が最大となるタイミングを最適タイミングとして選択する。
【００８２】
この後、ステップ４０５に進み、選択した最適タイミング（検出空燃比の分散Ｖの所定期間の積算値が最大となるタイミング）を第１気筒＃１の空燃比検出タイミングとして学習すると共に、その第１気筒＃１の空燃比検出タイミングを基準にして他の気筒（第２気筒＃２〜第４気筒＃４）の空燃比検出タイミングを学習し、それらの学習値をＥＣＵ３９のバックアップＲＡＭ等の書き換え可能な不揮発性メモリの学習値記憶領域に更新記憶する。
【００８３】
この後、ステップ４０６に進み、Ｌｏｃａｌ学習実行カウンタのカウント値を「０」にリセットすると共に、ずれ判定フラグを「０」にリセットして、Ｌｏｃａｌ学習完了フラグを「１」にセットする。この後、ステップ４０７に進み、各気筒の気筒別補正値（燃料補正量）を所定値（例えば初期値又はずれ判定前の値）にリセットして、本ルーチンを終了する。
【００８４】
［Ｇｌｏｂａｌ学習実行ルーチン］
図９に示すＧｌｏｂａｌ学習実行ルーチンは、前記図６の空燃比検出タイミングずれ学習補正ルーチンのステップ３１０で実行されるサブルーチンであり、特許請求の範囲でいう第２のタイミング補正手段としての役割を果たす。
【００８５】
本ルーチンでは、各気筒の推定空燃比の変化と気筒別補正値（燃料補正量）の変化との関係に基づいて空燃比検出タイミングを補正するＧｌｏｂａｌ学習を実行する。このＧｌｏｂａｌ学習では、各気筒の推定空燃比が想定している各気筒番号を仮想的に複数通り変更した場合の各々において各気筒の推定空燃比の変化とその推定空燃比の変更後の気筒番号の気筒別補正値（燃料補正量）の変化との相関値を算出し、その相関値が最大となるように空燃比検出タイミングを補正する。
【００８６】
本ルーチンが起動されると、まず、ステップ５０１で、Ｇｌｏｂａｌ学習指標算出タイミング（例えば７２０ＣＡ毎）であるか否かを判定し、Ｇｌｏｂａｌ学習指標算出タイミングではないと判定されれば、以降の処理を行うことなく、本ルーチンを終了する。
【００８７】
一方、上記ステップ５０１で、Ｇｌｏｂａｌ学習指標算出タイミングであると判定されれば、ステップ５０２に進み、Ｇｌｏｂａｌ学習実行カウンタのカウント値が所定値（例えば３０サイクルに相当する値）以下であるか否かを判定する。
【００８８】
このステップ５０２で、Ｇｌｏｂａｌ学習実行カウンタのカウント値が所定値以下であると判定されれば、ステップ５０３に進み、図１０のＧｌｏｂａｌ学習指標算出ルーチンを実行して、第１気筒＃１の空燃比検出タイミングを下記の各タイミングＧ1 〜Ｇ4 ［ＣＡ］と仮定した場合について、それぞれ各気筒の推定空燃比の変化と燃料補正量の変化との相関値を算出し、この相関値をＧｌｏｂａｌ学習指標とする。
【００８９】
具体的には、ステップ５１１で、現在の空燃比検出タイミングでの各気筒の推定空燃比の変化量Δφと燃料補正量の変化量ΔＣmpを次式により算出する。
Δφ＾#i(t) ＝φ＾#i(t) −φ＾#i(t-n)
ΔＣmp#i(t) ＝Ｃmp#i(t) −Ｃmp#i(t-n)
【００９０】
ここで、φ＾#i(t) は第ｉ気筒＃ｉの推定空燃比の今回の算出値であり、φ＾#i(t-n) は第ｉ気筒＃ｉの推定空燃比のｎ回前の算出値である。また、Ｃmp#i(t) は第ｉ気筒＃ｉの燃料補正量の今回の算出値であり、Ｃmp#i(t-n) は第ｉ気筒＃ｉの燃料補正量のｎ回前の算出値である。尚、ｎは１以上の所定整数値である。
【００９１】
この後、ステップ５１２に進み、第１気筒＃１の空燃比検出タイミングを下記の各タイミングＧ1 〜Ｇ4 ［ＣＡ］と仮定した場合について、それぞれ各気筒の推定空燃比の変化と燃料補正量の変化との相関値（推定空燃比の変化量Δφと燃料補正量の変化量ΔＣmpとの積の和）を算出する。
【００９２】
(1) 第１気筒＃１の空燃比検出タイミングを、第１のタイミングＧ1 ＝Ｄca1 （第１気筒＃１の現在の空燃比検出タイミングＤca1 と同じタイミング）と仮定した場合には、図１１（ａ）に示すように、現在の空燃比検出タイミングでの第１気筒＃１の推定空燃比φ＾#1が第１気筒＃１の推定空燃比として算出され、現在の空燃比検出タイミングでの第３気筒＃３の推定空燃比φ＾#3が第３気筒＃３の推定空燃比として算出され、現在の空燃比検出タイミングでの第４気筒＃４の推定空燃比φ＾#4が第４気筒＃４の推定空燃比として算出され、現在の空燃比検出タイミングでの第２気筒＃２の推定空燃比φ＾#2が第２気筒＃２の推定空燃比として算出される。
【００９３】
従って、第１気筒＃１の空燃比検出タイミングを第１のタイミングＧ1 ＝Ｄca1 と仮定した場合の相関値Ｃor(Dca1)は、次式により算出することができる。
Ｃor(Dca1)＝Δφ＾#1(t) ×ΔＣmp#1(t) ＋Δφ＾#3(t) ×ΔＣmp#3(t)
＋Δφ＾#4(t) ×ΔＣmp#4(t) ＋Δφ＾#2(t) ×ΔＣmp#2(t)
【００９４】
(2) 第１気筒＃１の空燃比検出タイミングを、第２のタイミングＧ2 ＝Ｄca1 ＋１８０（第１気筒＃１の現在の空燃比検出タイミングＤca1 から１８０ＣＡ遅角したタイミング）と仮定した場合には、図１１（ｂ）に示すように、現在の空燃比検出タイミングでの第１気筒＃１の推定空燃比φ＾#1が第２気筒＃２の推定空燃比として算出され、現在の空燃比検出タイミングでの第３気筒＃３の推定空燃比φ＾#3が第１気筒＃１の推定空燃比として算出され、現在の空燃比検出タイミングでの第４気筒＃４の推定空燃比φ＾#4が第３気筒＃３の推定空燃比として算出され、現在の空燃比検出タイミングでの第２気筒＃２の推定空燃比φ＾#2が第４気筒＃４の推定空燃比として算出される。
【００９５】
従って、第１気筒＃１の空燃比検出タイミングを第２のタイミングＧ2 ＝Ｄca1 ＋１８０と仮定した場合の相関値Ｃor(Dca1+180)は、次式により算出することができる。
Ｃor(Dca1+180)＝Δφ＾#3(t) ×ΔＣmp#1(t) ＋Δφ＾#4(t) ×ΔＣmp#3(t)
＋Δφ＾#2(t) ×ΔＣmp#4(t) ＋Δφ＾#1(t) ×ΔＣmp#2(t)
【００９６】
(3) 第１気筒＃１の空燃比検出タイミングを、第３のタイミングＧ3 ＝Ｄca1 ＋３６０（第１気筒＃１の現在の空燃比検出タイミングＤca1 から３６０ＣＡ遅角したタイミング）と仮定した場合には、図１１（ｃ）に示すように、現在の空燃比検出タイミングでの第１気筒＃１の推定空燃比φ＾#1が第４気筒＃４の推定空燃比として算出され、現在の空燃比検出タイミングでの第３気筒＃３の推定空燃比φ＾#3が第２気筒＃２の推定空燃比として算出され、現在の空燃比検出タイミングでの第４気筒＃４の推定空燃比φ＾#4が第１気筒＃１の推定空燃比として算出され、現在の空燃比検出タイミングでの第２気筒＃２の推定空燃比φ＾#2が第３気筒＃３の推定空燃比として算出される。
【００９７】
従って、第１気筒＃１の空燃比検出タイミングを第３のタイミングＧ3 ＝Ｄca1 ＋３６０と仮定した場合の相関値Ｃor(Dca1+360)は、次式により算出することができる。
Ｃor(Dca1+360)＝Δφ＾#4(t) ×ΔＣmp#1(t) ＋Δφ＾#2(t) ×ΔＣmp#3(t)
＋Δφ＾#1(t) ×ΔＣmp#4(t) ＋Δφ＾#3(t) ×ΔＣmp#2(t)
【００９８】
(4) 第１気筒＃１の空燃比検出タイミングを、第４のタイミングＧ4 ＝Ｄca1 ＋５４０（第１気筒＃１の現在の空燃比検出タイミングＤca1 から５４０ＣＡ遅角したタイミング）と仮定した場合には、図１１（ｄ）に示すように、現在の空燃比検出タイミングでの第１気筒＃１の推定空燃比φ＾#1が第３気筒＃３の推定空燃比として算出され、現在の空燃比検出タイミングでの第３気筒＃３の推定空燃比φ＾#3が第４気筒＃４の推定空燃比として算出され、現在の空燃比検出タイミングでの第４気筒＃４の推定空燃比φ＾#4が第２気筒＃２の推定空燃比として算出され、現在の空燃比検出タイミングでの第２気筒＃２の推定空燃比φ＾#2が第１気筒＃１の推定空燃比として算出される。
【００９９】
従って、第１気筒＃１の空燃比検出タイミングを第４のタイミングＧ4 ＝Ｄca1 ＋５４０と仮定した場合の相関値Ｃor(Dca1+540)は、次式により算出することができる。
Ｃor(Dca1+540)＝Δφ＾#2(t) ×ΔＣmp#1(t) ＋Δφ＾#1(t) ×ΔＣmp#3(t)
＋Δφ＾#3(t) ×ΔＣmp#4(t) ＋Δφ＾#4(t) ×ΔＣmp#2(t)
【０１００】
このようにして、第１気筒＃１の空燃比検出タイミングを各タイミングＧ1 〜Ｇ4 と仮定した場合について、それぞれ各気筒の推定空燃比の変化と燃料補正量の変化との相関値Ｃor（Ｇｌｏｂａｌ学習指標）を算出した後、図９のステップ５０４に進み、第１気筒＃１の空燃比検出タイミングを各タイミングＧ1 〜Ｇ4 と仮定した場合について、それぞれ前回までの相関値Ｃorの積算値に今回の相関値Ｃorを積算して相関値Ｃorの積算値を更新する。この際、相関値Ｃorのうちのプラス値のみを積算するようにしたり、或は、相関値Ｃorのうちのマイナス値のみを積算するようにしても良い。
【０１０１】
その後、上記ステップ５０２で、Ｇｌｏｂａｌ学習実行カウンタのカウント値が所定値を越えたと判定された時点で、相関値Ｃorの所定期間の積算値を算出したと判断して、ステップ５０５に進み、各タイミングＧ1 〜Ｇ4 のうちの相関値Ｃorの所定期間の積算値が最大となるタイミングを最適タイミングとして選択する。
【０１０２】
この後、ステップ５０６に進み、選択した最適タイミング（相関値Ｃorの所定期間の積算値が最大となるタイミング）を第１気筒＃１の空燃比検出タイミングとして学習すると共に、その第１気筒＃１の空燃比検出タイミングを基準にして他の気筒（第２気筒＃２〜第４気筒＃４）の空燃比検出タイミングを学習し、それらの学習値をＥＣＵ３９のバックアップＲＡＭ等の書き換え可能な不揮発性メモリの学習値記憶領域に更新記憶する。
【０１０３】
この後、ステップ５０７に進み、Ｇｌｏｂａｌ学習実行カウンタのカウント値を「０」にリセットすると共に、ずれ判定フラグを「０」にリセットし、更に、Ｌｏｃａｌ学習完了フラグを「０」にリセットすると共に、Ｌｏｃａｌ学習完了後カウンタのカウント値を「０」にリセットして、本ルーチンを終了する。
【０１０４】
尚、Ｌｏｃａｌ学習が完了してからＧｌｏｂａｌ学習が完了するまでの期間、気筒別空燃比制御のＦ／Ｂゲインを大きくするようにしても良い。この場合、特定の気筒のＦ／Ｂゲインのみを大きくするようにして良いし、各気筒毎に異なるＦ／Ｂゲインを設定するようにしても良い。
【０１０５】
以上説明した本実施例１の空燃比検出タイミングずれ学習補正の実行例を図１２を用いて説明する。
気筒別空燃比制御中に、各気筒の推定空燃比や各気筒の燃料補正量に基づいて空燃比検出タイミングがずれているか否かを判定し、空燃比検出タイミングがずれていると判定されて、ずれ判定フラグが「１」にセットされた時点ｔ1 で、各気筒の気筒別補正値（燃料補正量）を前回値にホールドして、１サイクル内で空燃比センサ３６の検出値のばらつきが最大となるように空燃比検出タイミングを補正するＬｏｃａｌ学習を実行する。このＬｏｃａｌ学習では、各気筒の空燃比検出タイミング毎に検出された空燃比センサ３６の検出値の分散に相当する値が最大となるように空燃比検出タイミングを補正する。
【０１０６】
具体的には、第１気筒＃１の空燃比検出タイミングを各タイミングＬ1 〜Ｌ6 と仮定した場合について、それぞれ検出空燃比の分散Ｖ（Ｌｏｃａｌ学習指標）の所定期間の積算値を算出し、各タイミングＬ1 〜Ｌ6 のうちの検出空燃比の分散Ｖの所定期間の積算値が最大となるタイミングを最適タイミングとして選択して学習する。
【０１０７】
このＬｏｃａｌ学習が完了した時点ｔ2 で、ずれ判定フラグを「０」にリセットすると共に、Ｌｏｃａｌ学習完了フラグを「１」にセットし、更に、各気筒の気筒別補正値（燃料補正量）を所定値（例えば初期値又はずれ判定前の値）にリセットする。
【０１０８】
その後、再び空燃比検出タイミングがずれていると判定されて、ずれ判定フラグが「１」にセットされた時点ｔ3 で、各気筒の推定空燃比の変化と気筒別補正値（燃料補正量）の変化との関係に基づいて空燃比検出タイミングを補正するＧｌｏｂａｌ学習を実行する。このＧｌｏｂａｌ学習では、各気筒の推定空燃比が想定している各気筒番号を仮想的に複数通り変更した場合の各々において各気筒の推定空燃比の変化とその推定空燃比の変更後の気筒番号の気筒別補正値（燃料補正量）の変化との相関値を算出し、その相関値が最大となるように空燃比検出タイミングを補正する。
【０１０９】
具体的には、第１気筒＃１の空燃比検出タイミングを各タイミングＧ1 〜Ｇ4 と仮定した場合について、それぞれ各気筒の推定空燃比の変化と燃料補正量の変化との相関値Ｃor（Ｇｌｏｂａｌ学習指標）の所定期間の積算値を算出し、各タイミングＧ1 〜Ｇ4 のうちの相関値Ｃorの所定期間の積算値が最大となるタイミングを最適タイミングとして選択して学習する。
このＧｌｏｂａｌ学習が完了した時点ｔ4 で、ずれ判定フラグを「０」にリセットすると共に、Ｌｏｃａｌ学習完了フラグを「０」にリセットする。
【０１１０】
以上説明した本実施例１では、１サイクル内で空燃比センサ３６の検出値のばらつきが最大となるように空燃比検出タイミングを補正するＬｏｃａｌ学習を実行すると共に、各気筒の推定空燃比の変化と気筒別補正値（燃料補正量）の変化との関係に基づいて空燃比検出タイミングを補正するＧｌｏｂａｌ学習を実行するようにしたので、空燃比検出タイミングのずれを精度良く修正することができる。しかも、Ｇｌｏｂａｌ学習では、各気筒の推定空燃比が想定している各気筒番号を仮想的に複数通り変更した場合の各々において各気筒の推定空燃比の変化とその推定空燃比の変更後の気筒番号の気筒別補正値（燃料補正量）の変化との相関値を算出し、その相関値が最大となるように空燃比検出タイミングを補正するようにしたので、実際に現在の空燃比検出タイミングを順次ずらして相関値を算出する必要がなく、短時間で空燃比検出タイミングのずれを修正することができる。
【０１１１】
更に、本実施例１では、Ｌｏｃａｌ学習を実行した後に、Ｇｌｏｂａｌ学習を実行するようにしたので、Ｇｌｏｂａｌ学習における相関値の算出精度を向上させることができ、空燃比検出タイミングのずれの修正精度を向上させることができる。
【０１１２】
また、本実施例１では、Ｌｏｃａｌ学習の際に、各気筒の空燃比検出タイミング毎に検出された空燃比センサ３６の検出値の分散に相当する値（検出空燃比の分散Ｖ）が最大となるように空燃比検出タイミングを補正するようにしたので、各気筒の実空燃比のばらつき（空燃比センサ３６の検出値のばらつき）を適切に検出して、空燃比検出タイミングを補正することができる。
【０１１３】
しかも、本実施例１では、Ｌｏｃａｌ学習の際に、分散に相当する値（検出空燃比の分散Ｖ）の所定期間の積算値が最大となるように空燃比検出タイミングを補正するようにしたので、瞬時的に発生するノイズや外乱の影響を軽減することができ、Ｌｏｃａｌ学習による空燃比検出タイミングの修正精度を向上させることができる。
【０１１４】
また、本実施例１では、Ｇｌｏｂａｌ学習の際に、各気筒の推定空燃比の変化量と気筒別補正値の変化量との積の和を相関値Ｃorとして算出し、その相関値Ｃorが最大となるように空燃比検出タイミングを補正するようにしたので、空燃比検出タイミングのずれを定量的に評価して、空燃比検出タイミングを補正することができる。
【０１１５】
しかも、本実施例１では、Ｇｌｏｂａｌ学習の際に、相関値Ｃorの所定期間の積算値が最大となるように空燃比検出タイミングを補正するようにしたので、瞬時的に発生するノイズや外乱の影響を軽減することができ、Ｇｌｏｂａｌ学習による空燃比検出タイミングの修正精度を向上させることができる。
【実施例２】
【０１１６】
次に、図１３を用いて本発明の実施例２を説明する。但し、前記実施例１と実質的に同一部分については説明を省略又は簡略化し、主として前記実施例１と異なる部分について説明する。
【０１１７】
前記実施例１では、図８のＬｏｃａｌ学習指標算出ルーチンを実行することで、検出空燃比の分散をＬｏｃａｌ学習指標として算出するようにしたが、本実施例２では、図１３のＬｏｃａｌ学習指標算出ルーチンを実行することで、第１気筒＃１の空燃比検出タイミングを各タイミングＬ1 〜Ｌ6 と仮定した場合について、それぞれ各気筒の空燃比検出タイミング毎に検出された空燃比センサ３６の検出値の振幅を算出し、この検出空燃比の振幅をＬｏｃａｌ学習指標とする。
【０１１８】
(1) 第１気筒＃１の空燃比検出タイミングを、第１のタイミングＬ1 ＝Ｄca1 −９０と仮定した場合の検出空燃比の振幅Ｍ(Dca1-90) は、次式により算出する。
Ｍ(Dca1-90) ＝Ｍaxφ(Dca1-90) −Ｍinφ(Dca1-90)
ここで、Ｍaxφ(k) は｛φ(k) 、φ(k+720/N*1) 、φ(k+720/N*2) 、φ(k+720/N*3) ｝の最大値で、Ｍinφ(k) は｛φ(k) 、φ(k+720/N*1) 、φ(k+720/N*2) 、φ(k+720/N*3) ｝の最小値である。
【０１１９】
(2) 第１気筒＃１の空燃比検出タイミングを、第２のタイミングＬ2 ＝Ｄca1 −６０と仮定した場合の検出空燃比の振幅Ｍ(Dca1-60) は、次式により算出する。
Ｍ(Dca1-60) ＝Ｍaxφ(Dca1-60) −Ｍinφ(Dca1-60)
【０１２０】
(3) 第１気筒＃１の空燃比検出タイミングを、第３のタイミングＬ3 ＝Ｄca1 −３０と仮定した場合の検出空燃比の振幅Ｍ(Dca1-30) は、次式により算出する。
Ｍ(Dca1-30) ＝Ｍaxφ(Dca1-30) −Ｍinφ(Dca1-30)
【０１２１】
(4) 第１気筒＃１の空燃比検出タイミングを、第４のタイミングＬ4 ＝Ｄca1 と仮定した場合の検出空燃比の振幅Ｍ(Dca1)は、次式により算出する。
Ｍ(Dca1)＝Ｍaxφ(Dca1)−Ｍinφ(Dca1)
【０１２２】
(5) 第１気筒＃１の空燃比検出タイミングを、第５のタイミングＬ5 ＝Ｄca1 ＋３０と仮定した場合の検出空燃比の振幅Ｍ(Dca1+30) は、次式により算出する。
Ｍ(Dca1+30) ＝Ｍaxφ(Dca1+30) −Ｍinφ(Dca1+30)
【０１２３】
(6) 第１気筒＃１の空燃比検出タイミングを、第６のタイミングＬ6 ＝Ｄca1 ＋６０と仮定した場合の検出空燃比の振幅Ｍ(Dca1+60) は、次式により算出する。
Ｍ(Dca1+60) ＝Ｍaxφ(Dca1+60) −Ｍinφ(Dca1+60)
【０１２４】
このようにして、第１気筒＃１の空燃比検出タイミングを各タイミングＬ1 〜Ｌ6 と仮定した場合について、それぞれ検出空燃比の振幅Ｍ（Ｌｏｃａｌ学習指標）を算出した後、図７のステップ４０３に進み、第１気筒＃１の空燃比検出タイミングを各タイミングＬ1 〜Ｌ6 と仮定した場合について、それぞれ前回までの検出空燃比の振幅Ｍの積算値に今回の検出空燃比の振幅Ｍを積算して検出空燃比の振幅Ｍの積算値を更新する。
【０１２５】
その後、Ｌｏｃａｌ学習実行カウンタのカウント値が所定値を越えたと判定された時点で、検出空燃比の振幅Ｍの所定期間の積算値を算出したと判断して、各タイミングＬ1 〜Ｌ6 のうちの検出空燃比の振幅Ｍの所定期間の積算値が最大となるタイミングを最適タイミングとして選択する（ステップ４０４）。
【０１２６】
この後、選択した最適タイミング（検出空燃比の振幅Ｍの所定期間の積算値が最大となるタイミング）を第１気筒＃１の空燃比検出タイミングとして学習すると共に、その第１気筒＃１の空燃比検出タイミングを基準にして他の気筒（第２気筒＃２〜第４気筒＃４）の空燃比検出タイミングを学習し、それらの学習値をＥＣＵ３９のバックアップＲＡＭ等の書き換え可能な不揮発性メモリの学習値記憶領域に更新記憶する（ステップ４０５）。
以上説明した本実施例２においても、前記実施例１とほぼ同じ効果を得ることができる。
【実施例３】
【０１２７】
次に、図１４乃至図２０を用いて本発明の実施例３を説明する。但し、前記実施例１と実質的に同一部分については説明を省略又は簡略化し、主として前記実施例１と異なる部分について説明する。
【０１２８】
本実施例３では、後述する図１５乃至図１７の各ルーチンを実行することで、エンジン１１の１サイクル（７２０ＣＡ）内で空燃比センサ３６の検出値のばらつき（変動）が最大となるように空燃比検出タイミングを補正するＬｏｃａｌ学習を実行し、このＬｏｃａｌ学習の実行後（つまりＬｏｃａｌ学習により空燃比検出タイミングが補正された後）、空燃比検出タイミングがずれていると判定される毎に該空燃比検出タイミングをエンジン１１の燃焼間隔（４気筒の場合には１８０ＣＡ）又はその複数倍ずつ補正するＧｌｏｂａｌ学習を実行する。
【０１２９】
この場合、まず、Ｌｏｃａｌ学習によって、エンジン１１の１サイクル（７２０ＣＡ）内で空燃比センサ３６の検出値のばらつき（変動）が最大となるように空燃比検出タイミングを補正することで、各気筒の空燃比検出タイミングでの空燃比センサ３６の検出値のいずれかが、各気筒の実空燃比のいずれかを精度良く検出している状態、つまり、各気筒の正しい空燃比検出タイミングが、いずれかの気筒の現在の空燃比検出タイミンとなっている状態にすることができる。この後、空燃比検出タイミングがずれていると判定される毎に、Ｇｌｏｂａｌ学習によって、空燃比検出タイミングをエンジン１１の燃焼間隔（４気筒の場合には１８０ＣＡ）又はその複数倍ずつ補正することで、各気筒の空燃比検出タイミングを他の気筒の空燃比検出タイミングと入れ替えて、各気筒の空燃比検出タイミングを正しい空燃比検出タイミングに補正することができ、短時間で空燃比検出タイミングのずれを精度良く修正することができる。
【０１３０】
ここで、Ｌｏｃａｌ学習の実行後に、空燃比検出タイミングがずれていると判定されたときには、各気筒の正しい空燃比検出タイミングが連続気筒（燃焼順序が連続する気筒）以外の気筒の現在の空燃比検出タイミンとなっている場合よりも、各気筒の正しい空燃比検出タイミングが連続気筒の現在の空燃比検出タイミンとなっている場合の方が多いと考えられる。
【０１３１】
そこで、本実施例３では、Ｌｏｃａｌ学習の実行後、空燃比検出タイミングがずれていると判定される毎にＧｌｏｂａｌ学習によって空燃比検出タイミングを補正する際に、各気筒の空燃比検出タイミングを、まず連続気筒の空燃比検出タイミングに補正し、その後、連続気筒以外の気筒の空燃比検出タイミングに補正する。
【０１３２】
具体的には、図１４に示すように、(1) 最初に空燃比検出タイミングがずれていると判定されたときには、Ｌｏｃａｌ学習を実行して、各気筒の正しい空燃比検出タイミングがいずれかの気筒の現在の空燃比検出タイミンとなっている状態にする。
【０１３３】
(2) 次に（Ｌｏｃａｌ学習実行後の１回目）に空燃比検出タイミングがずれていると判定されたときには、Ｇｌｏｂａｌ学習によって各気筒の空燃比検出タイミングを燃焼間隔（例えば１８０ＣＡ）だけ進角することで、各気筒の空燃比検出タイミングをＬｏｃａｌ学習実行直後の空燃比検出タイミングに対して進角側の連続気筒の空燃比検出タイミングに補正する。
【０１３４】
(3) 次に（Ｌｏｃａｌ学習実行後の２回目）に空燃比検出タイミングがずれていると判定されたときには、Ｇｌｏｂａｌ学習によって各気筒の空燃比検出タイミングを燃焼間隔の２倍（例えば３６０ＣＡ）だけ進角することで、各気筒の空燃比検出タイミングをＬｏｃａｌ学習実行直後の空燃比検出タイミングに対して遅角側の連続気筒の空燃比検出タイミングに補正する。
【０１３５】
(4) 次に（Ｌｏｃａｌ学習実行後の３回目）に空燃比検出タイミングがずれていると判定されたときには、Ｇｌｏｂａｌ学習によって各気筒の空燃比検出タイミングを燃焼間隔（例えば１８０ＣＡ）だけ遅角することで、各気筒の空燃比検出タイミングをＬｏｃａｌ学習実行直後の空燃比検出タイミングに対して連続気筒以外の気筒の空燃比検出タイミングに補正する。
【０１３６】
このようにしてＧｌｏｂａｌ学習により空燃比検出タイミングを１サイクル分補正しても空燃比検出タイミングがずれていると判定された場合には、Ｌｏｃａｌ学習による空燃比検出タイミングの補正を再び実行する。
【０１３７】
また、前記実施例１では、Ｌｏｃａｌ学習の際に、検出空燃比の分散Ｖの所定期間の積算値が最大となるように空燃比検出タイミングを補正するようにしたが、本実施例３では、Ｌｏｃａｌ学習の際に、検出空燃比の分散Ｖを正規化したデータの所定期間の積算値が最大となるように空燃比検出タイミングを補正するようにしている。
以下、本実施例３でＥＣＵ３９が実行する図１５乃至図１７の各ルーチンの処理内容を説明する。
【０１３８】
［空燃比検出タイミングずれ学習補正ルーチン］
図１５に示す空燃比検出タイミングずれ学習補正ルーチンは、前記実施例１で説明した図６のルーチンのステップ３０８，３０９の処理を省略したものであり、それ以外の各ステップの処理は図６と同じである。
【０１３９】
本ルーチンでは、まず、Ｌｏｃａｌ学習完了フラグが「１」にセットされているか否かを判定し、Ｌｏｃａｌ学習完了フラグが「１」にセットされていると判定されれば、Ｌｏｃａｌ学習完了後カウンタをカウントアップする（ステップ３０１，３０２）。
【０１４０】
この後、空燃比検出タイミングがずれていると判定されたか否かを判定し、空燃比検出タイミングがずれていると判定されている場合（ずれ判定フラグ＝１の場合）には、Ｌｏｃａｌ学習完了フラグが「０」であるか又はＬｏｃａｌ学習完了後カウンタのカウント値が所定値Ｔ1 以上であるか否かを判定する（ステップ３０３，３０４）。
【０１４１】
ステップ３０４で、Ｌｏｃａｌ学習完了フラグが「０」であると判定された場合、又は、Ｌｏｃａｌ学習完了後カウンタのカウント値が所定値Ｔ1 以上であると判定された場合には、Ｌｏｃａｌ学習完了後カウンタのカウント値を「０」にリセットすると共に、Ｌｏｃａｌ学習完了フラグを「０」にリセットして、Ｌｏｃａｌ学習実行カウンタをカウントアップする（ステップ３０５）。
【０１４２】
この後、各気筒の気筒別補正値（燃料補正量）を前回値にホールドした後、後述する図１６のＬｏｃａｌ学習実行ルーチンを実行して、１サイクル内で空燃比センサ３６の検出値のばらつきが最大となるように空燃比検出タイミングを補正するＬｏｃａｌ学習を実行する（ステップ３０６，３０７）。
【０１４３】
一方、上記ステップ３０４で、Ｌｏｃａｌ学習完了フラグが「１」であると判定され、且つ、Ｌｏｃａｌ学習完了後カウンタのカウント値が所定値Ｔ1 に達していないと判定された場合には、後述する図１７のＧｌｏｂａｌ学習実行ルーチンを実行して、空燃比検出タイミングがずれていると判定される毎に該空燃比検出タイミングをエンジン１１の燃焼間隔（４気筒の場合には１８０ＣＡ）又はその複数倍ずつ補正するＧｌｏｂａｌ学習を実行する（ステップ３１０）。
【０１４４】
［Ｌｏｃａｌ学習実行ルーチン］
図１６に示すＬｏｃａｌ学習実行ルーチンは、前記図１５の空燃比検出タイミングずれ学習補正ルーチンのステップ３０７で実行されるサブルーチンであり、特許請求の範囲でいう第１のタイミング補正手段としての役割を果たす。また、図１６に示すＬｏｃａｌ学習実行ルーチンは、前記実施例１で説明した図７のルーチンのステップ４０３の処理及びステップ４０４の処理を、それぞれステップ４０３ａ，４０３ｂの処理及びステップ４０４ａの処理に変更したものであり、それ以外の各ステップの処理は図７と同じである。
【０１４５】
本ルーチンでは、まず、Ｌｏｃａｌ学習実行カウンタのカウント値が所定値以下であるか否かを判定し、Ｌｏｃａｌ学習実行カウンタのカウント値が所定値以下であると判定されれば、前記実施例１で説明した図８のＬｏｃａｌ学習指標算出ルーチンを実行して、第１気筒＃１の空燃比検出タイミングを各タイミングＬ1 〜Ｌ6 と仮定した場合について、それぞれ検出空燃比の分散Ｖ（Ｌｏｃａｌ学習指標）を算出する（ステップ４０１，４０２）。
【０１４６】
この後、ステップ４０３ａに進み、第１気筒＃１の空燃比検出タイミングを各タイミングＬ1 〜Ｌ6 と仮定した場合について、それぞれ検出空燃比の分散Ｖ（Ｌｏｃａｌ学習指標）を正規化する。
【０１４７】
具体的には、第１気筒＃１の空燃比検出タイミングを各タイミングＬ1 〜Ｌ6 と仮定した場合の検出空燃比の分散Ｖ(Dca1-90) ，Ｖ(Dca1-60) ，Ｖ(Dca1-30) ，Ｖ(Dca1)，Ｖ(Dca1+30) ，Ｖ(Dca1+60) に対して、値が大きい方から順に高い得点（例えば５〜０点）を付加し、それらの得点Ｐoint(Dca1-90) ，Ｐoint(Dca1-60) ，Ｐoint(Dca1-30) ，Ｐoint(Dca1)，Ｐoint(Dca1+30) ，Ｐoint(Dca1+60) を、正規化指標（検出空燃比の分散Ｖを正規化したデータ）とする。
【０１４８】
Ｖ(Dca1-90) →Ｐoint(Dca1-90)
Ｖ(Dca1-60) →Ｐoint(Dca1-60)
Ｖ(Dca1-30) →Ｐoint(Dca1-30)
Ｖ(Dca1)    →Ｐoint(Dca1)
Ｖ(Dca1+30) →Ｐoint(Dca1+30)
Ｖ(Dca1+60) →Ｐoint(Dca1+60)
【０１４９】
この後、ステップ４０３ｂに進み、第１気筒＃１の空燃比検出タイミングを各タイミングＬ1 〜Ｌ6 と仮定した場合について、それぞれ前回までの正規化指標（検出空燃比の分散Ｖを正規化したデータ）の積算値に今回の正規化指標を積算して正規化指標の積算値を更新する。
【０１５０】
その後、上記ステップ４０１で、Ｌｏｃａｌ学習実行カウンタのカウント値が所定値を越えたと判定された時点で、正規化指標の所定期間の積算値を算出したと判断して、ステップ４０４ａに進み、各タイミングＬ1 〜Ｌ6 のうちの正規化指標の所定期間の積算値が最大となるタイミングを最適タイミングとして選択する。
【０１５１】
この後、選択した最適タイミング（正規化指標の所定期間の積算値が最大となるタイミング）を第１気筒＃１の空燃比検出タイミングとして学習すると共に、その第１気筒＃１の空燃比検出タイミングを基準にして他の気筒の空燃比検出タイミングを学習し、それらの学習値をＥＣＵ３９のバックアップＲＡＭ等の書き換え可能な不揮発性メモリの学習値記憶領域に更新記憶する（ステップ４０５）。
【０１５２】
この後、Ｌｏｃａｌ学習実行カウンタのカウント値を「０」にリセットすると共に、ずれ判定フラグを「０」にリセットして、Ｌｏｃａｌ学習完了フラグを「１」にセットした後、各気筒の気筒別補正値を所定値にリセットして、本ルーチンを終了する（ステップ４０６，４０７）。
【０１５３】
［Ｇｌｏｂａｌ学習実行ルーチン］
図１７に示すＧｌｏｂａｌ学習実行ルーチンは、前記図１５の空燃比検出タイミングずれ学習補正ルーチンのステップ３１０で実行されるサブルーチンであり、特許請求の範囲でいう第２のタイミング補正手段としての役割を果たす。
【０１５４】
本ルーチンでは、Ｌｏｃａｌ学習の実行後、空燃比検出タイミングがずれていると判定される毎に該空燃比検出タイミングをエンジン１１の燃焼間隔（４気筒の場合には１８０ＣＡ）又はその複数倍ずつ補正するＧｌｏｂａｌ学習を実行する。
【０１５５】
本ルーチンが起動されると、まず、ステップ６０１で、Ｇｌｏｂａｌ学習実行回数カウンタをカウントアップした後、ステップ６０２に進み、Ｇｌｏｂａｌ学習実行回数カウンタのカウント値が「１」であるか否かを判定する。
【０１５６】
このステップ６０２で、Ｇｌｏｂａｌ学習実行回数カウンタのカウント値が「１」である（つまりＬｏｃａｌ学習実行後の１回目のＧｌｏｂａｌ学習である）と判定された場合には、ステップ６０３に進み、各気筒の空燃比検出タイミングの学習値を燃焼間隔（例えば１８０ＣＡ）だけ進角することで、各気筒の空燃比検出タイミングの学習値をＬｏｃａｌ学習実行直後の空燃比検出タイミングに対して進角側の連続気筒の空燃比検出タイミングに補正した後、ステップ６０８に進み、各気筒の気筒別補正値（燃料補正量）を所定値（例えば初期値又はずれ判定前の値）にリセットして、本ルーチンを終了する。
【０１５７】
一方、上記ステップ６０２で、Ｇｌｏｂａｌ学習実行回数カウンタのカウント値が「１」ではないと判定された場合には、ステップ６０４に進み、Ｇｌｏｂａｌ学習実行回数カウンタのカウント値が「２」であるか否かを判定する。
【０１５８】
このステップ６０４で、Ｇｌｏｂａｌ学習実行回数カウンタのカウント値が「２」である（つまりＬｏｃａｌ学習実行後の２回目のＧｌｏｂａｌ学習である）と判定された場合には、ステップ６０５に進み、各気筒の空燃比検出タイミングの学習値を燃焼間隔の２倍（例えば３６０ＣＡ）だけ進角することで、各気筒の空燃比検出タイミングの学習値をＬｏｃａｌ学習実行直後の空燃比検出タイミングに対して遅角側の連続気筒の空燃比検出タイミングに補正した後、ステップ６０８に進み、各気筒の気筒別補正値を所定値にリセットして、本ルーチンを終了する。
【０１５９】
一方、上記ステップ６０４で、Ｇｌｏｂａｌ学習実行回数カウンタのカウント値が「２」ではないと判定された場合には、Ｇｌｏｂａｌ学習実行回数カウンタのカウント値が「３」である（つまりＬｏｃａｌ学習実行後の３回目のＧｌｏｂａｌ学習である）と判断して、。ステップ６０６に進み、各気筒の空燃比検出タイミングの学習値を燃焼間隔（例えば１８０ＣＡ）だけ遅角することで、各気筒の空燃比検出タイミングの学習値をＬｏｃａｌ学習実行直後の空燃比検出タイミングに対して連続気筒以外の気筒の空燃比検出タイミングに補正した後、ステップ６０７に進み、Ｌｏｃａｌ学習完了フラグを「０」にリセットする共に、Ｌｏｃａｌ学習完了後カウンタのカウント値を「０」にリセットして、Ｇｌｏｂａｌ学習実行回数カウンタのカウント値を「０」にリセットする。
【０１６０】
このステップ６０７でＬｏｃａｌ学習完了フラグを「０」にリセットすることで、Ｇｌｏｂａｌ学習により空燃比検出タイミングを１サイクル分補正しても（１〜３回目のＧｌｏｂａｌ学習を実行しても）、空燃比検出タイミングがずれていると判定された場合に、Ｌｏｃａｌ学習による空燃比検出タイミングの補正を再び実行するようにする。
この後、ステップ６０８に進み、各気筒の気筒別補正値を所定値にリセットして、本ルーチンを終了する。
【０１６１】
以上説明した本実施例３の空燃比検出タイミングずれ学習補正の実行例を図１８乃至図２０を用いて説明する。
図１８に示すように、気筒別空燃比制御中に、空燃比検出タイミングがずれていると判定されて、ずれ判定フラグが「１」にセットされた時点ｔ1 で、各気筒の気筒別補正値（燃料補正量）を前回値にホールドして、１サイクル内で空燃比センサ３６の検出値のばらつきが最大となるように空燃比検出タイミングを補正するＬｏｃａｌ学習を実行する。このＬｏｃａｌ学習では、第１気筒＃１の空燃比検出タイミングを各タイミングＬ1 〜Ｌ6 と仮定した場合について、それぞれ正規化指標（検出空燃比の分散Ｖを正規化したデータ）の積算値を算出し、各タイミングＬ1 〜Ｌ6 のうちの正規化指標の所定期間の積算値が最大となるタイミングを最適タイミングとして選択して学習する。
【０１６２】
このＬｏｃａｌ学習が完了した時点ｔ2 で、ずれ判定フラグを「０」にリセットすると共に、Ｌｏｃａｌ学習完了フラグを「１」にセットし、更に、各気筒の気筒別補正値（燃料補正量）を所定値（例えば初期値又はずれ判定前の値）にリセットする。また、Ｌｏｃａｌ学習完了フラグを「１」にセットすることで、Ｌｏｃａｌ学習完了後カウンタのカウントアップが開始される。
【０１６３】
その後、再び空燃比検出タイミングがずれていると判定されて、ずれ判定フラグが「１」にセットされた時点ｔ3 で、Ｌｏｃａｌ学習実行後の１回目のＧｌｏｂａｌ学習を実行する。この１回目のＧｌｏｂａｌ学習では、各気筒の空燃比検出タイミングの学習値を燃焼間隔（例えば１８０ＣＡ）だけ進角することで、各気筒の空燃比検出タイミングの学習値をＬｏｃａｌ学習実行直後の空燃比検出タイミングに対して進角側の連続気筒の空燃比検出タイミングに補正する。
【０１６４】
１回目のＧｌｏｂａｌ学習が完了した時点ｔ4 で、各気筒の気筒別補正値を所定値にリセットすることで、ずれ判定フラグが「０」にリセットされる。その後、ずれ判定フラグが「０」に維持されたまま、Ｌｏｃａｌ学習完了後カウンタのカウント値が所定値以上になった場合には、その時点で、Ｌｏｃａｌ学習完了後カウンタのカウント値を「０」にリセットすると共に、Ｌｏｃａｌ学習完了フラグを「０」にリセットする。
【０１６５】
一方、図１９に示すように、Ｌｏｃａｌ学習実行後の１回目のＧｌｏｂａｌ学習が完了した後、Ｌｏｃａｌ学習完了後カウンタのカウント値が所定値以上になる前に、再び空燃比検出タイミングがずれていると判定されて、ずれ判定フラグが「１」にセットされた場合には、その時点ｔ5 で、Ｌｏｃａｌ学習実行後の２回目のＧｌｏｂａｌ学習を実行する。この２回目のＧｌｏｂａｌ学習では、各気筒の空燃比検出タイミングの学習値を燃焼間隔の２倍（例えば３６０ＣＡ）だけ進角することで、各気筒の空燃比検出タイミングの学習値をＬｏｃａｌ学習実行直後の空燃比検出タイミングに対して遅角側の連続気筒の空燃比検出タイミングに補正する。
【０１６６】
２回目のＧｌｏｂａｌ学習が完了した時点ｔ6 で、各気筒の気筒別補正値を所定値にリセットすることで、ずれ判定フラグが「０」にリセットされる。その後、ずれ判定フラグが「０」に維持されたまま、Ｌｏｃａｌ学習完了後カウンタのカウント値が所定値以上になった場合には、その時点で、Ｌｏｃａｌ学習完了後カウンタのカウント値を「０」にリセットすると共に、Ｌｏｃａｌ学習完了フラグを「０」にリセットする。
【０１６７】
一方、図２０に示すように、Ｌｏｃａｌ学習実行後の２回目のＧｌｏｂａｌ学習が完了した後、Ｌｏｃａｌ学習完了後カウンタのカウント値が所定値以上になる前に、再び空燃比検出タイミングがずれていると判定されて、ずれ判定フラグが「１」にセットされた場合には、その時点ｔ7 で、Ｌｏｃａｌ学習実行後の３回目のＧｌｏｂａｌ学習を実行する。この３回目のＧｌｏｂａｌ学習では、各気筒の空燃比検出タイミングの学習値を燃焼間隔（例えば３６０ＣＡ）だけ遅角することで、各気筒の空燃比検出タイミングの学習値をＬｏｃａｌ学習実行直後の空燃比検出タイミングに対して連続気筒以外の気筒の空燃比検出タイミングに補正する。
【０１６８】
３回目のＧｌｏｂａｌ学習が完了した時点ｔ8 で、Ｌｏｃａｌ学習完了フラグを「０」にリセットすると共に、各気筒の気筒別補正値を所定値にリセットすることで、ずれ判定フラグが「０」にリセットされる。その後、ずれ判定フラグが「０」に維持されたまま、Ｌｏｃａｌ学習完了後カウンタのカウント値が所定値以上になった場合には、その時点で、Ｌｏｃａｌ学習完了後カウンタのカウント値を「０」にリセットする。
【０１６９】
尚、３回目のＧｌｏｂａｌ学習が完了した時点ｔ8 で、Ｌｏｃａｌ学習完了フラグを「０」にリセットすることで、Ｌｏｃａｌ学習完了後カウンタのカウント値が所定値以上になる前であっても、再び空燃比検出タイミングがずれていると判定されて、ずれ判定フラグが「１」にセットされた場合には、Ｌｏｃａｌ学習による空燃比検出タイミングの補正をを再び実行する。
【０１７０】
以上説明した本実施例３では、１サイクル内で空燃比センサ３６の検出値のばらつきが最大となるように空燃比検出タイミングを補正するＬｏｃａｌ学習を実行し、このＬｏｃａｌ学習の実行後、空燃比検出タイミングがずれていると判定される毎に該空燃比検出タイミングを燃焼間隔又はその複数倍ずつ補正するＧｌｏｂａｌ学習を実行するようにしたので、短時間で空燃比検出タイミングのずれを精度良く修正することができる。しかも、Ｇｌｏｂａｌ学習では、各気筒の空燃比検出タイミングを他の気筒の空燃比検出タイミングと入れ替えるだけであるため、空燃比検出タイミングを判定するための相関値（例えば各気筒の推定空燃比の変化と気筒別補正値の変化との相関値）等を算出する必要がなく、ＥＣＵ３９の演算負荷を低減することができる。また、例えば空燃比センサ３６の応答特性が変わった場合にノイズ（燃焼ばらつきや過渡）の影響で気筒別補正値の変化と推定空燃比の変化が逆方向になっても、その影響を受けずに各気筒の空燃比検出タイミングを正しい空燃比検出タイミングに補正することができる。
【０１７１】
また、Ｌｏｃａｌ学習の実行後に、空燃比検出タイミングがずれていると判定されたときには、各気筒の正しい空燃比検出タイミングが連続気筒の現在の空燃比検出タイミンとなっている場合の方が多い。この点に着目して、本実施例３では、Ｌｏｃａｌ学習の実行後、空燃比検出タイミングがずれていると判定される毎にＧｌｏｂａｌ学習によって空燃比検出タイミングを補正する際に、各気筒の空燃比検出タイミングを、まず連続気筒の空燃比検出タイミングに補正し、その後、連続気筒以外の気筒の空燃比検出タイミングに補正するようにしたので、より短時間で空燃比検出タイミングのずれを修正することができる。
【０１７２】
更に、本実施例３では、Ｇｌｏｂａｌ学習により空燃比検出タイミングを１サイクル分補正しても空燃比検出タイミングがずれていると判定された場合には、Ｌｏｃａｌ学習による空燃比検出タイミングの補正を再び実行するようにしたので、もし、Ｌｏｃａｌ学習が正しくなかった場合でも、速やかにＬｏｃａｌ学習を再実行することができる。
【０１７３】
また、本実施例３では、Ｌｏｃａｌ学習の際に、検出空燃比の分散を正規化したデータの所定期間の積算値が最大となるように空燃比検出タイミングを補正するようにしたので、過渡走行時等に一時的に検出空燃比の分散が大きくなった場合でも、その影響をあまり受けないようにすることができ、Ｌｏｃａｌ学習による空燃比検出タイミングの修正精度を更に向上させることができる。
【０１７４】
尚、上記実施例１では、Ｌｏｃａｌ学習の際に、検出空燃比の分散の所定期間の積算値が最大となるように空燃比検出タイミングを補正するようにしたが、これに限定されず、検出空燃比の分散を正規化したデータの所定期間の積算値が最大となるように空燃比検出タイミングを補正するようにしても良い。
【０１７５】
また、上記実施例３では、Ｌｏｃａｌ学習の際に、検出空燃比の分散を正規化したデータの所定期間の積算値が最大となるように空燃比検出タイミングを補正するようにしたが、これに限定されず、検出空燃比の分散の所定期間の積算値が最大となるように空燃比検出タイミングを補正するようにしたり、或は、検出空燃比の振幅の所定期間の積算値が最大となるように空燃比検出タイミングを補正するようにしても良い。
【０１７６】
また、上記実施例３では、Ｇｌｏｂａｌ学習の際に、各気筒の空燃比検出タイミングを、まず連続気筒の空燃比検出タイミングに補正し、その後、連続気筒以外の気筒の空燃比検出タイミングに補正するようにしたが、これに限定されず、各気筒の空燃比検出タイミングを燃焼間隔ずつ補正（進角又は遅角）するようにしても良い。
【０１７７】
また、上記各実施例１〜３では、本発明を４気筒エンジンに適用したが、これに限定されず、２気筒エンジンや３気筒エンジン或は５気筒以上のエンジンに本発明を適用しても良い。
【０１７８】
その他、本発明は、吸気ポート噴射式エンジンに限定されず、筒内噴射式エンジンや、吸気ポート噴射用の燃料噴射弁と筒内噴射用の燃料噴射弁の両方を備えたデュアル噴射式のエンジンにも適用して実施できる。
【符号の説明】
【０１７９】
１１…エンジン（内燃機関）、１２…吸気管、３４…排気管、３４ａ…排気集合部、３６…空燃比センサ、３９…ＥＣＵ（気筒別空燃比推定手段，気筒別空燃比制御手段，第１のタイミング補正手段，第２のタイミング補正手段）
【図１】
2013253593.tif 000009
【図２】
2013253593.tif 000010
【図３】
2013253593.tif 000011
【図４】
2013253593.tif 000012
【図５】
2013253593.tif 000013
【図６】
2013253593.tif 000014
【図７】
2013253593.tif 000015
【図８】
2013253593.tif 000016
【図９】
2013253593.tif 000017
【図１０】
2013253593.tif 000018
【図１１】
2013253593.tif 000019
【図１２】
2013253593.tif 000020
【図１３】
2013253593.tif 000021
【図１４】
2013253593.tif 000022
【図１５】
2013253593.tif 000023
【図１６】
2013253593.tif 000024
【図１７】
2013253593.tif 000025
【図１８】
2013253593.tif 000026
【図１９】
2013253593.tif 000027
【図２０】
2013253593.tif 000028