(57)【特許請求の範囲】
【請求項１】
エンジンと同期回転するロータに、少なくとも気筒毎の特定クランク角区間を表示する角度表示部を設け、
該角度表示部を検出したクランク角検出手段からの信号に基づきエンジン１回転の間隔時間と特定クランク角区間の間隔時間とを算出し、この両間隔時間の比から上記クランク角区間の設計角度に対する角度補正値を算出する手段と、
上記角度補正値を加重平均処理して回転補正値を算出する手段と、
上記回転補正値で上記特定クランク角区間の間隔時間を補正して補正間隔時間を算出する手段と、
この補正間隔時間に基づき区間平均回転数を算出する手段とを備えることを特徴とするエンジン回転数算出装置。
【請求項２】
エンジンと同期回転するロータに、少なくとも気筒毎の特定クランク角区間を表示する角度表示部を設け、
該角度表示部を検出したクランク角検出手段からの信号に基づき２カ所以上の特定クランク角区間の間隔時間を算出し、この各間隔時間のひとつを基準間隔時間とし、該基準間隔時間と他のクランク角区間の間隔時間との比から相対的な角度補正値を算出する手段と、
上記角度補正値を加重平均処理して回転補正値を算出する手段と、
上記回転補正値で上記特定クランク角区間の間隔時間を補正して補正間隔時間を算出する手段と、
この補正間隔時間に基づき対応するクランク角区間毎の区間平均回転数を算出する手段とを備えることを特徴とするエンジン回転数算出装置。
【請求項３】
前記回転補正値が燃料カット時に算出されることを特徴とする請求項１或いは２記載エンジンの回転数算出装置。
【請求項４】
前記回転補正値をエンジン回転数をパラメータとして領域別に格納することを特徴とする請求項１或いは２記載のエンジン回転数算出装置。
【請求項５】
前記回転補正値をエンジン回転数をパラメータとして領域別に格納するテーブルを備え、
上記テーブルの全領域が初期化されているときは最初に算出された回転補正値を上記テーブルの全領域に格納することを特徴とする請求項１或いは２載のエンジンの回転数算出装置。
【請求項６】
前記回転補正値をエンジン回転数をパラメータとして領域別に格納するテーブルを備えると共に、
上記テーブルの各領域がエンジン回転域毎に一定のグループに区分され、
上記テーブルの全領域が初期化されているときは最初に算出された回転補正値を上記テーブルの全領域に格納し、
又上記テーブルの全領域に同一の回転補正値が格納された後、該テーブルの各グループ内の領域が更新されていないときは、エンジン回転数をパラメータとして特定した該当グループ内の領域を当該回転補正値で更新することを特徴とする請求項１或いは２記載のエンジン回転数算出装置。
【請求項７】
エンジンと同期回転するロータに、少なくとも気筒毎の特定クランク角区間を表示する角度表示部を設け、
該角度表示部を検出したクランク角検出手段からの信号に基づきエンジン１回転の間隔時間と特定クランク角区間の間隔時間とを算出し、この両間隔時間の比から上記クランク角区間の設計角度に対する角度補正値を算出する手段と、
上記角度補正値を加重平均処理して回転補正値を算出する手段と、
上記回転補正値で上記特定クランク角区間の間隔時間を補正して補正間隔時間を算出する手段と、
この補正間隔時間に基づき区間平均回転数を算出する手段と、
前回算出した区間平均回転数と今回算出した区間平均回転数及び前々回算出した区間平均回転数との変化量に基づき前回算出した区間平均回転数に対応する気筒の失火を判定する手段とを備えることを特徴とするエンジンの気筒別失火検出装置。
【請求項８】
エンジンと同期回転するロータに、少なくとも気筒毎の特定クランク角区間を表示する角度表示部を設け、
該角度表示部を検出したクランク角検出手段からの信号に基づき２カ所以上の特定クランク角区間の間隔時間を算出し、この各間隔時間のひとつを基準間隔時間とし、該基準間隔時間と他のクランク角区間の間隔時間との比から相対的な角度補正値を算出する手段と、
上記角度補正値を加重平均処理して回転補正値を算出する手段と、
上記回転補正値で上記特定クランク角区間の間隔時間を補正して補正間隔時間を算出する手段と、
この補正間隔時間に基づき対応するクランク角区間毎の区間平均回転数を算出する手段と、
前回算出した区間平均回転数と今回算出した区間平均回転数及び前々回算出した区間平均回転数との変化量に基づき前回算出した区間平均回転数に対応する気筒の失火を判定する手段とを備えることを特徴とするエンジンの気筒別失火検出装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、エンジンと同期回転するロータに設けた気筒毎の特定クランク角区間を表示する角度表示部の間隔時間から区間平均回転数を算出し、或いは該区間平均回転数の変化量から失火を気筒別に判定するエンジン回転数算出装置及びエンジンの気筒別失火検出装置に関する。
【０００２】
【従来の技術】
一般に、多気筒エンジンにおける燃焼は毎サイクル同一過程を経て行われることが、安定した出力を得る上で理想であるが、多気筒エンジンにおいては吸気管形状の複雑化、気筒間の吸気干渉などによる吸気分配率の不均一化、冷却順路によって生じる各気筒間の若干の燃焼温度の相違、各気筒の燃焼室容積、ピストン形状などの製造上のばらつき等の相乗的作用により気筒毎の燃焼にばらつきが生じ易い。
【０００３】
従来、この気筒間の燃焼変動は、気筒別の空燃比制御、点火時期制御等で最小限に抑制されているが、最近の高出力、低燃費化の傾向にある高性能エンジンでは、インジェクタ、点火プラグ等の劣化の進行度合い、或いは故障等で断続的な失火が発生し易く、失火の発生により気筒間の燃焼変動が大きくなり、出力の低下を招く。
【０００４】
そこで、本出願人は、特開平４−１７１２５０号公報において、４気筒エンジンの各気筒の燃焼による仕事をしていない区間、すなわち燃焼終了気筒と次の燃焼開始気筒との間の特定のクランク角区間の区間平均回転数を算出し、１燃焼行程前に算出した区間平均回転数と、その前後に算出した区間平均回転数の平均値との差回転を算出し、該差回転と失火レベル判定値とを比較して１燃焼行程前気筒の失火状態を判定する技術を提案した。
【０００５】
ところで、上記特定クランク角区間は、クランクシャフトに軸着したクランクロータの外周に形成した突起（或いはスリット）によって始まりと終わりとが設定されており、この突起（或いはスリット）をクランク角センサにて検出したときに出力される信号（クランクパルス）の入力間隔時間に基づいて上記区間平均回転数が算出されるため、クランク角区間を表示する突起（或いはスリット）の開き角にばらつきがあると、クランク角区間ごとに算出する区間平均回転数に誤差が生じ、この誤差が見かけ上、回転変動因子として取り込まれてしまい、失火判定を精度良く行うことができなくなる。
【０００６】
そのため、本出願人は、特開平６−４２３９７号公報において、上記差回転を統計処理して、クランクロータに形成した特定クランク角区間の始まりと終わりとに対応する突起（或いはスリット）の製造上のばらつきによって生じる回転変動因子を補正して、補正後差回転を求め、この補正後差回転の変化に基づいて失火を判定する技術を提案した。
【０００７】
【発明が解決しようとする課題】
しかし、例えば図２１（ａ）に示すように、４気筒エンジンにおいてクランクロータの周囲に各気筒の圧縮上死点（ＴＤＣ）を基準として、圧縮上死点前（ＢＴＤＣ）θ1，θ2，θ3の位置に突起を形成し、各突起の位置がθ1＝９７°、θ2＝６５°、θ3＝１０°で、これらの製造公差が±0.25°の場合、クランク角区間θ2−θ3（開き角５５°）の製造誤差は±0.5°となる。上記先行例では、クランク角区間θ2−θ3の間隔時間から区間平均回転数を算出しており、点火順序を＃１→＃３→＃２→＃４とし、＃１，＃２気筒側のクランク角区間θ2−θ3が５５°＋0.5°、＃３，＃４気筒側のクランク角区間θ2−θ3が５５°−0.5°の最大公差で製造された場合、各クランク角区間θ2−θ3における実際の角速度がほぼ同じで、且つ失火することなく定速運転している状態のときの真の平均回転数が６０００ｒｐｍのとき、＃１，＃２気筒側のクランク角区間θ2−θ3で計測した区間平均回転数は６０５４ｒｐｍ、＃３，＃４気筒側のクランク角区間θ2−θ3で計測した区間平均回転数は５９４５ｒｐｍとなる。
【０００８】
特開平４−１７１２５０号公報では、図２１（ｂ）において、今回算出した区間平均回転数が＃３気筒の燃焼終了後の区間平均回転数Ｎ#3とした場合、１燃焼行程前の区間平均回転数がＮ#1、２燃焼行程前の区間平均回転数がＮ#4であり、１燃焼行程前の差回転ΔＮは、
0003963984.tif 000002
となり、−１０９(rpm)の検出誤差が生じる。
【０００９】
一方、特開平６−４２３９７号公報で算出する補正後差回転変化ＤＤＮＥＡ#3は、ＤＥＬＮＡ#3，ＤＥＬＮＡ#1を補正後差回転とすると、
ＤＤＮＥＡ#3＝ＤＥＬＮＡ#3−ＤＥＬＮＡ#1
但し、補正後差回転ＤＥＬＮＡ#3，ＤＥＬＮＡ#1は差回転ＤＥＬＮＥ#3，ＤＥＬＮＥ#1から、この差回転ＤＥＬＮＥ#3，ＤＥＬＮＥ#1を統計処理して気筒毎に算出した差回転補正値ＡＶＥＤＮO#3，ＡＶＥＤＮO#1を減算して求めたものである（ＤＥＬＮＡ#i＝ＤＥＬＮＥ#i−ＡＶＥＤＮO#i）。
【００１０】
尚、差回転ＤＥＬＮＥ#3はクランク角区間θ2−θ3の区間平均回転数Ｎ#3，Ｎ#1の差回転、ＤＥＬＮＥ#1は同様にクランク角区間θ2−θ3の区間平均回転数Ｎ#1，Ｎ#4の差回転であり、エンジンが失火を伴わずに一定速で高速回転している場合には、上記差回転ＤＥＬＮＥ#3，ＤＥＬＮＥ#1と上記補正後差回転ＤＥＬＮＡ#3，ＤＥＬＮＡ#1とが近似し（上記統計処理して気筒毎に算出する上記差回転補正値ＡＶＥＤＮO#3、ＡＶＥＤＮO#1は無視できるものとする）、したがって、
0003963984.tif 000003
となり、補正後差回転変化ＤＤＮＥＡ#3，ＤＤＮＥＡ#1が ＋２１８(rpm)，−２１８(rpm)とそれぞれ誤検出されてしまう。その結果、図２２に示すように、縦軸に補正後差回転(rpm)、横軸に１目盛り（１Div）を１サイクル（７２０゜CA）として表した場合、クランク角区間θ2−θ3で検出した区間平均回転数基づいて算出した気筒毎の補正後差回転ＤＥＬＮＡ#iが、見かけ上、大きく変動したように誤検出されてしまう。
【００１１】
このように、上記先行例では、クランクロータの特定クランク角区間の始まりと終わりに形成した突起の開き角が寸法公差内で製造されていたとしても、特に高速回転域では真の区間平均回転数に対して実際に計測した区間平均回転数が大きな誤差を生じ、しかも、高速回転域では運動エネルギが大きいため失火発生時の運動変化量が相対的に小さく、計測した区間平均回転数の誤差分と、失火によって生じる運動変化量とを明確に峻別することが困難で、失火判定精度を高めるには限界がある。
【００１２】
又、特開平６−４２３９８号公報には、該当気筒の差回転ＤＥＬＮＥ#iと全気筒差回転加重平均値ＡＶＥＤＮとの差を加重平均して得た前回の該当気筒の気筒別差回転加重平均値ＡＶＥＤＮ#iOLDを、該当気筒の差回転ＤＥＬＮＥ#iから減算して補正後差回転ＤＥＬＮＡ#iを求め、この補正後差回転ＤＥＬＮＡ#iに基づき該当気筒の失火判定を行うことで、クランクロータに形成した突起（或いはスリット）の位置及び形状等の製造誤差を排除し、失火の有無を気筒毎に正確に検出する技術が開示されている。
【００１３】
しかし、この先行例では、全気筒の差回転を加重平均した全気筒差回転加重平均値と該当気筒の差回転との差を更に加重平均によりなまし処理した気筒別差回転加重平均を用いて該当気筒の差回転を補正しているため、間接的な補正であり、且つ、２重のなまし処理による加重平均により補正を行うため、補正遅れを生じ、特に、製造誤差などに起因するクランクロータの突起間の角度誤差による影響を確実に排除することはできない。
【００１４】
本発明は、上記事情に鑑み、低回転域は勿論のこと、高回転域においても、各気筒の燃焼のばらつきの影響を受けることなく、ロータに設けた気筒毎の特定クランク角区間を表示する角度表示部の開き角のばらつきによる区間平均回転数の検出誤差を排除し、正確な区間平均回転数を算出することができると共に、失火の有無を気筒毎に正確に検出することのできるエンジン回転数算出装置及びエンジンの気筒別失火検出装置を提供することを目的とする。
【００１５】
【課題を解決するための手段】
上記目的を達成するため本発明による第１のエンジン回転数算出装置は、エンジンと同期回転するロータに、少なくとも気筒毎の特定クランク角区間を表示する角度表示部を設け、該角度表示部を検出したクランク角検出手段からの信号に基づきエンジン１回転の間隔時間と特定クランク角区間の間隔時間とを算出し、この両間隔時間の比から上記クランク角区間の設計角度に対する角度補正値を算出する手段と、上記角度補正値を加重平均処理して回転補正値を算出する手段と、上記回転補正値で上記特定クランク角区間の間隔時間を補正して補正間隔時間を算出する手段と、この補正間隔時間に基づき区間平均回転数を算出する手段とを備えることを特徴とする。
【００１６】
本発明による第２のエンジン回転数算出装置は、エンジンと同期回転するロータに、少なくとも気筒毎の特定クランク角区間を表示する角度表示部を設け、該角度表示部を検出したクランク角検出手段からの信号に基づき２カ所以上の特定クランク角区間の間隔時間を算出し、この各間隔時間のひとつを基準間隔時間とし、該基準間隔時間と他のクランク角区間の間隔時間との比から相対的な角度補正値を算出する手段と、上記角度補正値を加重平均処理して回転補正値を算出する手段と、上記回転補正値で上記特定クランク角区間の間隔時間を補正して補正間隔時間を算出する手段と、この補正間隔時間に基づき対応するクランク角区間毎の区間平均回転数を算出する手段とを備えることを特徴とする。
【００１７】
本発明による第３のエンジン回転数算出装置は、前記第１のエンジン回転数算出装置或いは前記第２のエンジンの回転数算出装置において、前記回転補正値が燃料カット時に算出されることを特徴とする。
【００１８】
本発明による第４のエンジン回転数算出装置は、前記第１のエンジン回転数算出装置或いは前記第２のエンジンの回転数算出装置において、前記回転補正値をエンジン回転数をパラメータとして領域別に格納することを特徴とする。
【００１９】
本発明による第５のエンジン回転数算出装置は、前記第１のエンジン回転数算出装置或いは前記第２のエンジンの回転数算出装置において、前記回転補正値をエンジン回転数をパラメータとして領域別に格納するテーブルを備え、上記テーブルの全領域が初期化されているときは最初に算出された回転補正値を上記テーブルの全領域に格納することを特徴とする。
【００２０】
本発明による第６のエンジン回転数算出装置は、前記第１のエンジン回転数算出装置或いは前記第２のエンジンの回転数算出装置において、前記回転補正値をエンジン回転数をパラメータとして領域別に格納するテーブルを備えると共に、上記テーブルの各領域がエンジン回転域毎に一定のグループに区分され、上記テーブルの全領域が初期化されているときは最初に算出された回転補正値を上記テーブルの全領域に格納し、又上記テーブルの全領域に同一の回転補正値が格納された後、該テーブルの各グループ内の領域が更新されていないときは、エンジン回転数をパラメータとして特定した該当グループ内の領域を当該回転補正値で更新することを特徴とする。
【００２１】
本発明による第１のエンジンの気筒別失火検出装置は、エンジンと同期回転するロータに、少なくとも気筒毎の特定クランク角区間を表示する角度表示部を設け、該角度表示部を検出したクランク角検出手段からの信号に基づきエンジン１回転の間隔時間と特定クランク角区間の間隔時間とを算出し、この両間隔時間の比から上記クランク角区間の設計角度に対する角度補正値を算出する手段と、上記角度補正値を加重平均処理して回転補正値を算出する手段と、上記回転補正値で上記特定クランク角区間の間隔時間を補正して補正間隔時間を算出する手段と、この補正間隔時間に基づき区間平均回転数を算出する手段と、前回算出した区間平均回転数と今回算出した区間平均回転数及び前々回算出した区間平均回転数との変化量に基づき前回算出した区間平均回転数に対応する気筒の失火を判定する手段とを備えることを特徴とする。
【００２２】
本発明による第２のエンジンの気筒別失火検出装置は、エンジンと同期回転するロータに、少なくとも気筒毎の特定クランク角区間を表示する角度表示部を設け、該角度表示部を検出したクランク角検出手段からの信号に基づき２カ所以上の特定クランク角区間の間隔時間を算出し、この各間隔時間のひとつを基準間隔時間とし、該基準間隔時間と他のクランク角区間の間隔時間との比から相対的な角度補正値を算出する手段と、上記角度補正値を加重平均処理して回転補正値を算出する手段と、上記回転補正値で上記特定クランク角区間の間隔時間を補正して補正間隔時間を算出する手段と、この補正間隔時間に基づき対応するクランク角区間毎の区間平均回転数を算出する手段と、前回算出した区間平均回転数と今回算出した区間平均回転数及び前々回算出した区間平均回転数との変化量に基づき前回算出した区間平均回転数に対応する気筒の失火を判定する手段とを備えることを特徴とする。
【００２３】
本発明による第１のエンジン回転数算出装置では、エンジン運転時、該エンジンに同期して回転するロータに設けた気筒毎の特定クランク角区間を表示する角度表示部をクランク角検出手段にて検出すると、該クランク角検出手段から上記角度表示部に対応する信号が出力され、この信号に基づき上記クランク角区間の間隔時間とエンジン１回転の間隔時間とを算出し、この両間隔時間の比から上記クランク角区間の設計角度に対する角度補正値を算出し、この角度補正値を加重平均処理して回転補正値を算出し、この回転補正値で当該特定クランク角区間の間隔時間を補正して補正間隔時間を算出し、この補正間隔時間に基づいて当該特定クランク角区間の区間平均回転数を算出する。
【００２４】
本発明による第２のエンジン回転数算出装置では、エンジン運転時、該エンジンに同期して回転するロータに設けた気筒毎の特定クランク角区間を表示する角度表示部をクランク角検出手段にて検出すると、該クランク角検出手段から上記角度表示部に対応する信号が出力され、この信号に基づき上記各クランク角区間の間隔時間を算出し、ひとつの間隔時間を基準間隔時間として該基準間隔時間と他のクランク角区間の間隔時間との比から、基準となるクランク角区間に対する他のクランク角区間の相対的な角度補正値を算出し、この角度補正値を加重平均処理して回転補正値を算出し、この回転補正値で他の特定クランク角区間の間隔時間を補正して補正間隔時間を算出し、この補正間隔時間に基づいて当該特定クランク角区間の区間平均回転数を算出する。
【００２５】
本発明による第３のエンジン回転数算出装置では、前記第１のエンジン回転数算出装置、或いは前記第２のエンジン回転数算出装置において、前記回転補正値を燃料カット時に算出することで、燃焼のばらつきの影響を受けずに回転補正値を設定することが可能になる。
【００２６】
本発明による第４のエンジン回転数算出装置では、前記第１のエンジン回転数算出装置、或いは前記第２のエンジン回転数算出装置において、前記回転補正値をエンジン回転数をパラメータとして区画される領域に格納することで、エンジン回転数毎の回転補正値で前記間隔時間を補正することが可能となる。
【００２７】
本発明による第５のエンジン回転数算出装置では、前記第１のエンジン回転数算出装置、或いは前記第２のエンジン回転数算出装置において、前記回転補正値をエンジン回転数をパラメータとして格納する全ての領域が初期化されているときは最初に算出した回転補正値を上記テーブルの全領域に格納することで、その後、エンジン回転数領域が変化した場合であっても、対応する間隔時間を上記回転補正値で補正することが可能になる。
【００２８】
本発明による第６のエンジン回転数算出装置では、前記第１のエンジン回転数算出装置、或いは前記第２のエンジン回転数算出装置において、前記回転補正値をエンジン回転数をパラメータとして格納するテーブルをエンジン運転域毎に一定のグループに区分し、上記テーブルの各領域が初期化されているときは最初に算出した回転補正値を上記テーブルの全領域に格納し、上記テーブルの全領域に同一の回転補正値が格納された後、エンジン回転数をパラメータとして特定する回転補正値を格納する領域が属するグループの全領域が更新されていないときは、今回算出した回転補正値でグループ内の全領域を更新する。
【００２９】
本発明による第１のエンジンの気筒別失火検出装置では、エンジン運転時、該エンジンに同期して回転するロータに設けた気筒毎の特定クランク角区間を表示する角度表示部をクランク角検出手段にて検出すると、該クランク角検出手段から上記角度表示部に対応する信号が出力され、この信号に基づき上記クランク角区間の間隔時間とエンジン１回転の間隔時間とを算出し、この両間隔時間の比から上記クランク角区間の設計角度に対する角度補正値を算出し、この角度補正値を加重平均処理して回転補正値を算出し、この回転補正値で当該特定クランク角区間の間隔時間を補正して補正間隔時間を算出し、この補正間隔時間に基づいて当該特定クランク角区間の区間平均回転数を算出する。次いで、前回算出した区間平均回転数を、その両隣の前々回算出した区間平均回転数及び今回算出した区間平均回転数と比較し、その変化量から上記前回算出した区間平均回転数に対応する気筒が失火したか否かを判定する。
【００３０】
本発明による第２のエンジンの気筒別失火判別装置は、エンジン運転時、該エンジンに同期して回転するロータに設けた気筒毎の特定クランク角区間を表示する角度表示部をクランク角検出手段にて検出すると、該クランク角検出手段から上記角度表示部に対応する信号が出力され、この信号に基づき上記各クランク角区間の間隔時間を算出し、該間隔時間のひとつを基準間隔時間として該基準間隔時間と他のクランク角区間の間隔時間との比から、基準となるクランク角区間に対する他のクランク角区間の相対的な角度補正値を算出し、この角度補正値を加重平均処理して回転補正値を算出し、この回転補正値で他の特定クランク角区間の間隔時間を補正して補正間隔時間を算出し、この補正間隔時間に基づいて当該特定クランク角区間の区間平均回転数を算出する。次いで、前回算出した区間平均回転数を、その両隣の前々回算出した区間平均回転数及び今回算出した区間平均回転数と比較し、その変化量から上記前回算出した区間平均回転数に対応する気筒が失火したか否かを判定する。
【００３１】
【発明の実施の形態】
以下、図面に基づいて本発明の一実施の形態を説明する。図１〜図１８に本発明の第１実施の形態を示す。図１１の符号１はエンジンで、図においては水平対向型４気筒エンジンを示す。このエンジン１のシリンダヘッド２に形成された各吸気ポート２ａに吸気マニホールド３が連通され、この吸気マニホールド３に各気筒の吸気通路が集合するエアチャンバ４を介してスロットルチャンバ５、吸気管６が連通され、この吸気管６の吸入空気取り入れ口側にエアクリーナ７が取り付けられている。
【００３２】
又、上記吸気管６のエアクリーナ７の直下流に、ホットワイヤ式等の吸入空気量センサ８が介装され、さらに、上記スロットルチャンバ５に設けられたスロットル弁５ａに、スロットル開度に応じた電圧を出力するスロットル開度センサ９ａとスロットル弁全閉でＯＮするアイドル接点を有するアイドルスイッチ９ｂとが組み込まれたスロットルセンサ９が連設されている。
【００３３】
又、上記スロットル弁５ａをバイパスして、その上流側と下流側とを連通するバイパス通路１０に、ＩＳＣ（アイドル回転数制御）弁１１が介装されている。さらに、上記吸気マニホールド３の各気筒の各吸気ポート２ａ直上流側にインジェクタ１４が臨まされ、上記シリンダヘッド２には、先端を燃焼室に露呈する点火プラグ１５ａが各気筒毎に取り付けられている。各点火プラグ１５ａには点火コイル１５ｂがそれぞれ連設され、この各点火コイル１５ｂにイグナイタ１６が接続されている。
【００３４】
上記インジェクタ１４は、燃料供給路１７を介して燃料タンク１８に連通されており、この燃料タンク１８内にはインタンク式の燃料ホンプ１９が設けられている。この燃料ポンプ１９からの燃料は、上記燃料供給路１７に介装された燃料フィルタ２０を経て上記インジェクタ１４及びプレッシャレギュレータ２１に圧送され、プレッシャレギュレータ２１から上記燃料タンク１８にリターンされて上記インジェクタ１４への燃料圧力が所定の圧力に調圧される。
【００３５】
又、エンジン１のシリンダブロック１ａにノックセンサ２２が取り付けられると共に、シリンダブロック１ａの左右バンクを連通する冷却水通路２３に冷却水温センサ２４が臨まされている。さらに、上記シリンダヘッド２の排気ポート２ｂに連通する排気マニホールド２５の集合部にＯ2センサ２６が配設され、その下流に触媒コンバータ２７が介装されている。
【００３６】
又、上記シリンダブロック１ａに支承されたクランクシャフト１ｂに、クランクロータ２８が軸着され、このクランクロータ２８の外周に、所定のクランク角に対応する突起を検出する電磁ピックアップ等からなるクランク角センサ２９が対設され、さらに、上記クランクシャフト１ｂに対して１／２回転するカムシャフト１ｃに連設されたカムロータ３０に、電磁ピックアップ等からなる気筒判別用のカム角センサ３１が対設されている。
【００３７】
本実施の形態によるエンジン１の点火順序は＃１→＃３→＃２→＃４であり、図１２に示すように、＃１，＃２気筒の圧縮上死点（ＴＤＣ＃１，＃２）が同位相であり、＃３，＃４気筒の圧縮上死点（ＴＤＣ＃３，＃４）が同位相となる。この＃１，＃２気筒の圧縮上死点（ＴＤＣ＃１，＃２）と、＃３，＃４気筒の圧縮上死点（ＴＤＣ＃３，＃４）とが互いに対向され、クランクロータ２８の外周には、各圧縮上死点（ＴＤＣ＃１，＃２、ＴＤＣ＃３，＃４）を基準として、回転方向に、角度表示部としての突起（或いはスリット）２８ａ，２８ｂ，２８ｃ（２８ａ’，２８ｂ’，２８ｃ’）が、圧縮上死点前（ＢＴＤＣ）θ1a，θ2a，θ3a（θ1b，θ2b，θ3b）の位置にそれぞれ形成されている。
【００３８】
又、図１３に示すように、上記カムロータ３０の外周に気筒判別用突起（或いはスリット）３０ａ，３０ｂ，３０ｃが形成されている。突起３０ａが＃３，＃４気筒の圧縮上死点後（ＡＴＤＣ）θ4の位置に形成され、又突起３０ｂが３個の突起で形成され、その最初の突起が＃１気筒の圧縮上死点後（ＡＴＤＣ）θ5の位置に形成されている。更に、突起３０ｃが２個の突起で形成され、その最初の突起が＃２気筒の圧縮上死点後（ＡＴＤＣ）θ6の位置に形成されている。
【００３９】
尚、本実施の形態では、θ1a，θ1b＝９７゜CA（CAはクランク角度）、θ2a，θ2b＝６５゜CA、θ3a，θ3b＝１０゜CA、θ4＝２０゜CA、θ5＝５゜CA、θ6＝２０゜CAに設定されている。従って、クランク角区間θ2a−θ3aの開き角θ12、及びクランク角区間θ2b−θ3bの開き角θ34は、設計上、５５゜CAになる。
【００４０】
図１０に示すように、後述する電子制御装置（ＥＣＵ）４０では、クランク角区間θ2a−θ3a（或いはθ2b−θ3b）のクランクパルスの入力間隔時間から失火判定用の区間平均回転数ＭＮＸ#iを算出し、又、特定突起間のクランクパルス入力間隔時間から燃料噴射制御、或いは点火時期制御等の各制御系で読込まれるエンジン回転数Ｎｅが算出される。尚、θ2a，θ2bが点火時期ＡＤＶをカウントする際の基準クランク角に設定されている。又、各カムパルスがクランクパルスと重複しない位置に割り込まれ、割り込まれたカムパルスの個数と発生位置から気筒判別を行う。上記クランク角区間θ2a−θ3a（或いはθ2b−θ3b）は、本実施の形態ではＢＴＤＣ６５−１０゜CA区間であり、既に燃焼を終了した気筒とこれから燃焼を開始する気筒との間の燃焼により仕事を行わない区間であり、換言すれば、このクランク角区間θ2a−θ3a（或いはθ2b−θ3b）は、既に燃焼を終了した気筒の燃焼の影響を受けにくいため、このクランク角区間θ2a−θ3a（或いはθ2b−θ3b）の回転変動から失火を判定することができる。
【００４１】
図１４に示すように、上記電子制御装置４０は、ＣＰＵ４１、ＲＯＭ４２、ＲＡＭ４３、バックアップＲＡＭ４３、カウンタ・タイマ群４５、及びＩ／Ｏインターフェース４６がバスライン４７を介して互いに接続されるマイクロコンピュータを中心として構成されており、その他、安定化電圧を各部に供給する定電圧回路４８、上記Ｉ／Ｏインターフェース４６の出力ポートからの信号によりアクチュエータ類を駆動する駆動回路４９、及びセンサ類からのアナログ信号をデジタル信号に変換するＡ／Ｄ変換器５０等の周辺回路が組み込まれている。
【００４２】
尚、上記カウンタ・タイマ群４５は、フリーランカウンタ、カム角センサ信号の入力計数用カウンタ等の各種タイマ、燃料噴射用タイマ、点火用タイマ、定期割込みを発生させるための定期割込み用タイマ、クランク角センサ出力信号の入力間隔計数用タイマ、及びシステム異常監視用ウォッチドッグタイマ等の各種タイマを便宜上総称するもので、上記マイクロコンピュータにおいては、その他、各種のソフトウェアカウンタ・タイマが用いられる。
【００４３】
上記定電圧回路４８は、電源リレー５１のリレー接点を介してバッテリ５２に接続されており、電源リレー５１のリレーコイルがイグニッションスイッチ５３を介して上記バッテリ５２に接続されている。又、上記バッテリ５２に燃料ポンプ１９が燃料ポンプリレー５４のリレー接点を介して接続されている。又、上記定電圧回路４８は、上記イグニッションスイッチ５３がＯＮされ、上記電源リレー５１の接点が閉となったとき、上記バッテリ５２の電圧を安定化して電子制御装置４０の各部に供給する。さらに、上記バックアップＲＡＭ４３には、バッテリ５２が上記定電圧回路４８を介して直接接続されており、上記イグニッションスイッチ５３のＯＮ／ＯＦＦに拘らず常時バックアップ用電源が供給される。
【００４４】
又、上記Ｉ／Ｏインターフェース４６の入力ポートには、車速センサ３２、スタータスイッチ３３、アイドルスイッチ９ｂ、ノックセンサ２２、クランク角センサ２９、及びカム角センサ３１が接続されると共に、吸入空気量センサ８、スロットル開度センサ９ａ、冷却水温センサ２４、Ｏ2センサ２６がＡ／Ｄ変換器５０を介して接続され、更に、このＡ／Ｄ変換器５０に上記バッテリ５２の端子電圧ＶBが入力されてモニタされる。
【００４５】
一方、上記Ｉ／Ｏインターフェース４６の出力ポートには、イグナイタ１６が接続され、更に、上記駆動回路４９を介してＩＳＣ弁１１、インジェクタ１４及び、図示しないインストルメントパネルに配設され、各種警報を集中して表示するCHECK ENGINEランプ３４が接続されていると共に、燃料ポンプリレー５４のリレーコイルの一端が接続され、又、このリレーコイルの他端が上記イグニッションスイッチ５３に接続されている。
【００４６】
上記ＲＯＭ４２には、エンジン制御プログラムや各種の故障診断プログラム、マップ類等の固定データが記憶されており、また、上記ＲＡＭ４３には、上記各センサ類、スイッチ類の出力信号を処理した後のデータ、及び上記ＣＰＵ４１で演算処理したデータがストアされる。また、上記バックアップＲＡＭ４３には、各種学習マップ、制御用データ、自己診断機能により検出した故障部位に対応するトラブルデータ等がストアされ、上記イグニッションスイッチ５３がＯＦＦのときにもデータが保持される。
【００４７】
上記ＣＰＵ４１では、ＲＯＭ４２に記憶されているプログラムに従って、各センサ、及びスイッチ類からの出力信号に基づき、上記インジェクタ１４、上記点火プラグ１５ａ、及び、ＩＳＣ弁１１に対する制御量の演算並びに制御信号の出力、すなわち、燃料噴射制御（空燃比制御）、点火時期制御、アイドル回転数制御等のエンジン制御を最適に制御すると共に、クランクロータ２８の各突起２８ｂ，２８ｃ間、及び，２８ｂ’，２８ｃ’間の製造公差による区間平均回転数の誤差を修正し、更に、修正後の区間平均回転数に基づき算出した特定クランク角区間の回転変動から気筒別の失火判定を行う。そして、失火判定時には上記CHECH ENGINEランプ３４を点灯して運転者に警告すると共に、失火気筒を示すトラブルデータをバックアップＲＡＭ４３にストアする。
【００４８】
尚、上記トラブルデータは、電子制御装置４０に対し故障診断用セレクタモニタ（携帯型故障診断装置）３５をコネクタ３６を介して接続することで外部に読み出すことができる。上記故障診断用セレクタモニタ３５については、本出願人による特公平７−９３８８号公報等に詳述されている。
【００４９】
以下、上記電子制御装置４０で実行される失火判定ルーチンについて、図１〜図７のフローチャートに従って説明する。
【００５０】
イグニッションスイッチ５３をＯＮすると電子制御装置４０に電源が投入され、システムがイニシャライズ（各フラグ、及びデータ類のクリア、但し、バックアップＲＡＭ４３に格納されているトラブルデータ等のデータは除く）され、その後、エンジンを始動させると、図１〜図２に示す失火診断ルーチンが、クランク角センサ２９から出力されるθ3a（或いはθ3b）のクランクパルス毎、すなわちエンジン１／２回転毎に実行される。尚、フローチャート中の#iは、直前に燃焼を終了した気筒を示している。
【００５１】
先ず、ステップＳ１０１で、前回ルーチン実行時に得られたクランク角区間θ2a−θ3a（或いは θ2b−θ3b）の補正間隔時間ＭＴＸＡ#i、区間平均回転数ＭＮＸ#i、１８０゜CAクランクパルス間隔時間Ｔ１８０#i、差回転変化量ＤＤＮＥＡ#i等の各データを、前回のデータとして、ＲＡＭ４３のワークエリアにストアする（ＭＴＸＡ#i-1←ＭＴＸＡ#i，ＭＮＸ#i-1←ＭＮＸ#i，Ｔ１８０#i-1←Ｔ１８０#i，ＤＤＮＥＡ#i-1←ＤＤＮＥＡ#i…）。尚、イグニッションスイッチ５３をＯＮ後の最初のルーチン実行時には、各データがクリアされているため、上記ワークエリアには、“０”が格納される。
【００５２】
そして、ステップＳ１０２で、これから圧縮行程を迎える気筒＃i+1が、＃１，＃２気筒か、＃３，＃４気筒かをバックアップＲＡＭ４３の所定アドレスに格納されている気筒番号ＣＹＬの値を参照して判別する。図１０に示すように、気筒判別は、クランクパルスと、このクランクパルス間に割り込むカムパルスとに基づいて判別する。例えば、カムパルスθ5が入力された後のクランクパルスが、＃３気筒の圧縮上死点前（ＢＴＤＣ）θ1ｂのクランク角を示すことが判別でき、又、カムパルスθ5の後にカムパルスθ4が入力された後のクランクパルスが、＃２気筒のＢＴＤＣθ1aのクランク角を示すことが判別できる。同様に、カムパルスθ6が入力された後のクランクパルスが、＃４気筒のＢＴＤＣθ1bを示すクランク角であり、又、カムパルスθ6の後にカムパルスθ4が入力された後のクランクパルスが、＃１気筒のＢＴＤＣθ1aを示すクランク角であることが判別できる。そして、これから圧縮上死点を迎える気筒＃i+1の気筒番号（１，３，２，４）がバックアップＲＡＭ４３の所定アドレスＣＹＬに順次格納される。従って、例えば、現在実行されている失火診断ルーチンが＃１，＃２気筒のＢＴＤＣθ3aのカムパルス入力時のものである場合、ＣＹＬ＝１、或いはＣＹＬ＝２であり、又、＃３，＃４気筒のＢＴＤＣθ3aのカムパルス入力時のものである場合、ＣＹＬ＝３、或いはＣＹＬ＝４である。
【００５３】
そして、上記ステップＳ１０２で、ＣＹＬ＜３（＃１気筒、或いは＃２気筒）と判定したときはステップＳ１０３へ進み、又、ＣＹＬ≧３（＃３気筒、或いは＃４気筒）と判定したときはステップＳ１０４へ進む。
【００５４】
ステップＳ１０３へ進むと、エンジン回転数Ｎｅを読込み、このエンジン回転数ＮｅをパラメータとしてテーブルＴＫＭＦ12を参照して、回転補正値ＫＭＦＸ１２を設定し、ステップＳ１０５へ進む。又、ステップＳ１０４へ進むと、エンジン回転数Ｎｅを読込み、このエンジン回転数ＮｅをパラメータとしてテーブルＴＫＭＦ34を参照して、回転補正値ＫＭＦＸ３４を設定し、ステップＳ１０６へ進む。上記回転補正値ＫＭＦＸ１２，ＫＭＦＸ３４は後述する回転補正値算出サブルーチンで算出され、エンジン回転数ＮｅをパラメータとするテーブルＴＫＭＦ12，ＴＫＭＦ34の対応する領域にそれぞれ格納される。
【００５５】
そして、ステップＳ１０３からステップＳ１０５へ進むと、次式からクランク角区間θ2a−θ3aの補正間隔時間ＭＴＸＡ#i（μsec）を算出しステップＳ１０７へ進む。
【００５６】
ＭＴＸＡ#i←ＭＴＸ#i・ＫＭＦＸ１２    …（１）
一方、ステップＳ１０４からステップＳ１０６へ進むと、次式からクランク角区間θ2b−θ3bの補正間隔時間ＭＴＸＡ#i（μsec）を算出しステップＳ１０７へ進む。
ＭＴＸＡ#i←ＭＴＸ#i・ＫＭＦＸ３４    …（２）
ステップＳ１０７では、上記ステップＳ１０５或いはステップＳ１０６で算出した補正間隔時間ＭＴＸＡ#i（μsec）に基づき、燃焼行程気筒＃ｉに対応する区間平均回転数ＭＮＸ#i(rpm)を次式から算出する。
ＭＮＸ#i←（６０・１０6）／ＭＴＸＡ#i  …（３）
次いで、ステップＳ１０８で、上記区間平均回転数ＭＮＸ#iから前回算出した区間平均回転数ＭＮＸ#i-1を減算して、差回転ＤＥＬＮＥ#iを算出し（ＤＥＬＮＥ#i←ＭＮＸ#i−ＭＮＸ#i-1）、ステップＳ１０９で、上記差回転ＤＥＬＮＥ#iから前回算出した差回転ＤＥＬＮＥ#i-1を減算して、差回転変化量ＤＤＮＥＡ#iを算出する。
ＤＤＮＥＡ#i←ＤＥＬＮＥ#i−ＤＥＬＮＥ#i-1  …（４）
尚、上記差回転変化量ＤＤＮＥＡ#iは、
0003963984.tif 000004
となる。
【００５７】
すなわち、図１０に示すように、例えば燃焼行程気筒が＃３である場合、１燃焼行程前の気筒である＃１気筒の区間平均回転数ＭＮＸ#i-１の２倍と、その両隣の区間平均回転数ＭＮＸ#i，ＭＮＸ#i-2との差が、今回算出した差回転変化量ＤＤＮＥＡ#iであり、従って、後述する単発失火判定サブルーチンにおいて、失火判定レベルＬＶＬＭＩＳと比較されて、失火の有無が診断されるが、このときの失火判定の対象となる気筒は、１燃焼行程前気筒＃i-1であることが解る。
【００５８】
ところで、上記ステップＳ１０７で算出する区間平均回転数ＭＮＸ#iは、クランク角区間θ2a−θ3a，θ2b−θ3bの開き角θ12，θ34の製造誤差分のばらつきを補正して算出されているため、この区間平均回転数ＭＮＸ#iと前回算出した区間平均回転数ＭＮＸ#i-1との差から算出する上記差回転ＤＥＬＮＥ#iは、図１５に示すように、クランクロータ２８の製造誤差による回転数算出誤差を修正した正確な差回転となる。尚、図１５及び、後述する図１６、２２においては、縦軸の１目盛りを５０回転、横軸の１目盛り（１ｄｉｖ）を７２０°ＣＡとして、電子制御装置４０内で算出した差回転データを示している。
【００５９】
しかし、図１８に示すように、エンジンにスナッチなどの断続的な回転変動が発生すると、上記差回転ＤＥＬＮＥ#iを所定の失火判定レベルと比較するだけでは、正確な失火判定は困難であるため、上記ステップＳ１０９において、差回転変化量ＤＤＮＥＡ#iを求め、この差回転変化量ＤＤＮＥＡ#iにより、その前後の気筒の差回転の変化を捕らえることで、図１６に示すように、失火発生時のエンジン運転状態に応じてレベルの変化する差回転ＤＥＬＮＥ#iに対し、スナッチなどによるエンジン回転変動の影響を排除して正確な失火判定が可能となる。
【００６０】
その後、上記ステップ１１０へ進むと、燃料カット中か否かを判別する。燃料カット条件としては、例えば、高回転（例えば6500rpm以上）、高車速（例えば180Km/h以上）、減速走行中等があり、これらの条件の何れかが満足されたとき燃料カットが実行される。そして、燃料カット中のときはステップＳ１１１へ進み、後述する回転補正値算出サブルーチンを実行し、ステップＳ１１５で診断許可フラグＦＬＧDIAGをクリアして（ＦＬＧDIAG←０）、ステップＳ１１６へ進む。
【００６１】
又、燃料噴射が許可されているときはステップＳ１１２へ進み、このステップＳ１１２，Ｓ１１３で、基本燃料噴射パルス幅Ｔｐと設定値ＴｐLWER、或いはエンジン回転数Ｎｅと設定回転数ＮｅUPERとを比較して診断条件が成立するか否かを判別する。
【００６２】
そして、Ｔｐ≧ＴｐLWER、且つ、Ｎｅ＜ＮｅUPERのときは、診断条件成立としてステップ１１４へ進み、診断許可フラグＦＬＧDIAGをセットし（ＦＬＧDIAG←１）、一方、Ｔｐ＜ＴｐLWER、或いは、Ｎｅ≧ＮｅUPERのときは、診断条件不成立としてステップＳ１１５へ分岐し、診断許可フラグＦＬＧDIAGをクリアして（ＦＬＧDIAG←０）、ステップＳ１１６へ進む。。
【００６３】
そして、上記ステップＳ１１６へ進むと、後述する単発失火診断サブルーチンを実行し、ステップＳ１１７へ進み、１つ前の燃焼行程気筒＃i-1の失火フラグＦＬＧMIS#i-1の値を参照する。この失火フラグは、上記ステップＳ１１６における単発失火診断において失火と判定されたときセットされるもので、ＦＬＧMIS#i-1＝１、すなわち、失火診断対象となる１つ前の燃焼行程気筒＃I-1が失火のときは、ステップＳ１１８へ進み、失火回数のカウント値ＭＩＳＣＮＴ#i-1をカウントアップして（ＭＩＳＣＮＴ#i-1←ＭＩＳＣＮＴ#i-1＋１）、ステップＳ１１９へ進む。又、上記ステップＳ１１７で、ＦＬＧMIS#i-1＝０、すなわち、失火診断対象となる１つ前の燃焼行程気筒＃I-1に失火が発生していないときは、そのままステップＳ１１９へ進む。
【００６４】
そして、ステップＳ１１９へ進むと、診断許可フラグＦＬＧDIAGの値を参照し、ＦＬＧDIAG＝０のときには、ステップＳ１２５へジャンプし、ＦＬＧDIAG＝１のときには、ステップＳ１２０で、失火診断の実行毎にカウントされるカウント値ＣＲＡＣＮＴをカウントアップし（ＣＲＡＣＮＴ←ＣＲＡＣＮＴ＋１）、ステップＳ１２１で、上記カウント値ＣＲＡＣＮＴが２０００に達したか否かを判別する。尚、この失火判定ルーチンは、クランク角センサ２９から出力されるθ3a，θ3bのクランクパルス入力毎、すなわちエンジン１／２回転毎に実行されるため、ＣＲＡＣＮＴ≧２０００のときは、エンジンが１０００回転以上経過した状態を示す。
【００６５】
そして、ＣＲＡＣＮＴ＜２０００のときはステップＳ１２５へジャンプし、又、ＣＲＡＣＮＴ≧２０００のときは、ステップＳ１２２へ進み、後述する失火判定サブルーチンを実行し、ステップＳ１２３，Ｓ１２４で、それぞれ、カウント値ＣＲＡＣＮＴ、及び全ての気筒に対する失火回数のカウント値ＭＩＳＣＮＴ#1〜#4をクリアして（ＣＲＡＣＮＴ←０、ＭＩＳＣＮＴ#1〜#4←０）、ステップＳ１２５へ進む。ステップＳ１２５では、今回算出した補正間隔時間ＭＴＸＡ#i、区間平均回転数ＭＮＸ#i、差回転ＤＥＬＮＥ#i、差回転変化量ＤＤＥＮＡ#iの各データをモニタ用データとしてＲＡＭ４３にセットし、ルーチンを抜ける。
【００６６】
次に、上記失火判定ルーチンのステップＳ１１１で実行される回転補正値算出サブルーチンについて、図３に示すフローチャートに従って説明する。このルーチンでは、クランクロータ２８に形成されているクランク角区間θ2a−θ3a，θ2b−θ3bの始まりと終わりを表示する突起２８ｂ，２８ｃ間、及び突起２８ｂ’，２８ｃ’間の開き角θ12，θ34の製造誤差による区間平均回転数の算出誤差を補正する回転補正値ＫＭＦＸ12，ＫＭＦＸ34を算出する。この回転補正値ＫＭＦＸ12，ＫＭＦＸ34を燃料カット中に行うのは、以下の理由による。
【００６７】
燃料噴射中は、各気筒の吸気管形状や吸気干渉による吸気分配率の不均一、冷却系の影響による燃焼温度の相違、燃焼室容積やピストン形状の製造誤差による気筒毎の圧縮比のばらつき、燃料噴射弁の製造誤差による燃料噴射量のばらつき等の相乗作用から燃焼にばらつきが生じ易く、このような運転条件下でクランクロータ２８に形成されている突起２８ｂ，２８ｃ間、及び突起２８ｂ’，２８ｃ’間の開き角θ12，θ34の製造誤差を推定することは困難である。
【００６８】
これに対し、燃料カット中は、クランクシャフトの回転が正の運動エネルギとフリクションによる負の力にのみ依存しているため、燃焼のばらつきの影響を受け難く、上記回転補正値ＫＭＦＸ12，ＫＭＦＸ34を高精度に算出することができるからである。
【００６９】
先ず、ステップＳ２０１では、クランク角区間θ2a−θ3a（或いは，θ2b−θ3b）の１８０゜CAクランクパルス入力間隔時間Ｔ１８０#iを算出し、ステップＳ２０２で、上記１８０゜CAクランク角間隔時間Ｔ１８０#iと、ワークエリアにストアされている前回算出した１８０゜CAクランク角間隔時間Ｔ１８０#i-1、及び今回算出したクランクパルス入力間隔時間ＭＴＸ#iとに基づき次式から、角度補正値ＫＦＭを算出する。
0003963984.tif 000005
ここで、θKは定数であり、クランク角区間θ2a−θ3a（或いは、θ2b−θ3b）の設計角度（本実施の形態では５５゜CA）とエンジン１回転（３６０゜CA）との比（５５゜CA／３６０゜CA）に相当する。
【００７０】
従って、上記（５）式は、
0003963984.tif 000006
となり、上記角度補正値ＫＦＭがエンジン１回転当たりの周期と、失火判別に利用するクランク角区間θ2a−θ3a（或いは、θ2b−θ3b）の周期との比であることが解る。ここで、周期ｆは、ｆ＝１／ω（ω：角速度）であるため、クランク角区間θ2a−θ3a（或いは、θ2b−θ3b）が誤差なく形成されていれば、上記角度補正値ＫＦＭは、１.０となる。
【００７１】
そして、ステップＳ２０３で、これから圧縮行程を迎える気筒＃i+1が、＃１，＃２気筒か、＃３，＃４気筒かをバックアップＲＡＭ４３の所定アドレスに格納されている気筒番号ＣＹＬの値を参照して判別し、ＣＹＬ＜３（＃１気筒、或いは＃２気筒）と判定したときはステップＳ２０４へ進み、上記角度補正値ＫＭＦを次式に基づき加重平均処理して、回転補正値ＫＭＦＸ１２を算出する。
0003963984.tif 000007
そして、ステップＳ２０５で、後述するθ2a−θ3a区間回転補正値更新サブルーチンを実行し、上記回転補正値ＫＦＭＸ１２をエンジン回転数をパラメータとするテーブルＴＫＭＦ12の所定領域に格納し、ルーチンを抜ける。
【００７２】
一方、上記ステップＳ２０３で、ＣＹＬ≧３（＃３気筒、或いは＃４気筒）と判定したときはステップＳ２０６へ進み、上記角度補正値ＫＭＦを次式に基づき加重平均処理して、回転補正値ＫＭＦＸ３４を算出する。
【００７３】
0003963984.tif 000008
そして、ステップＳ２０７で、後述するθ2b−θ3b区間回転補正値更新サブルーチンを実行し、上記回転補正値ＫＦＭＸ３４をエンジン回転数をパラメータとするテーブルＴＫＭＦ34の所定領域に格納し、ルーチンを抜ける。
【００７４】
図８に示すように、例えばクランクロータ２８のクランク角区間θ2a−θ3aの開き角θ12が製造公差の上限で製造され、又、クランク角区間θ2b−θ3bの挟み角θ34が製造公差の下限で製造された場合、上記回転補正値ＫＭＦＸ12，ＫＭＦＸ34は、図の一点鎖線で示すように、理論的にはエンジン回転数に影響されず常に一定値を示す筈であるが、実際のクランク角区間θ2a−θ3a（或いは、θ2b−θ3b）の周期とエンジン１回転の周期との比は、動弁系のフリクションやそれを駆動するベルトの共振、ピストン、クランクシャフト等のフリクション、ポンピングロス、及び慣性力等の影響により変化するため、同図に実線で示すように、エンジン回転数が高くなるに従い、エンジン１回転の周期に対して、クランク角区間θ2a−θ3a（或いは、θ2b−θ3b）の周期が長くなる、換言すれば、エンジン１回転の角速度に対してクランク角区間θ2a−θ3a（或いはθ2b−θ3b）の角速度が遅くなる右下がりの特性を示す。そのため、上記ステップＳ２０５，Ｓ２０７において、上記回転補正値ＫＭＦＸ12，ＫＭＦＸ34を、図９に示すようなエンジン回転数をパラメータとする１６格子のテーブルに格納し、エンジン特性によって生じる種々の影響を排除する。
【００７５】
上記θ2a−θ3a区間回転補正値更新サブルーチン、及びθ2b−θ3b区間回転補正値更新サブルーチンは、図４、図５に示すフローチャートに従って、それぞれ実行される。本実施の形態では、図９に示すように、上記回転補正値ＫＭＦＸ12，ＫＭＦＸ34を格納するテーブルＴＫＭＦ12，ＴＫＭＦ34の領域が、エンジン回転数Ｎｅをパラメータとして２０００rpm〜６０００rpmの範囲で、２５０rpm毎に１６格子に区画し、更に、各格子を１０００rpm毎の４グループに区分している。
【００７６】
図４に示すθ2a−θ3a区間回転補正値更新サブルーチンでは、先ず、ステップＳ３０１で、バックアップＲＡＭ４３の所定アドレスに格納されている全体フラグＦＫＭＦＸ１２０の値を参照する。バッテリ５２や電子制御装置４０を一旦取り外し、再度組み込んだ後、或いは組立工程において上記電子制御装置４０にバックアップ電源を供給した後の最初ルーチン実行時には、上記バックアップＲＡＭ４３が初期化されて、全てのフラグ類がクリアされるため、ＦＫＭＦＸ１２０＝０であり、ステップＳ３０２へ進み、テーブルＴＫＭＦ12の全格子に今回算出した回転補正値ＫＭＦＸ12を記憶させ、ステップＳ３０３で上記全体フラグＦＫＭＦＸ１２０をセットし、ルーチンを抜ける。
【００７７】
一方、二回目以後のルーチン実行時には、ＦＫＭＦＸ１２０＝１であるため、ステップＳ３０１からステップＳ３０４へ進み、このステップＳ３０４〜Ｓ３０６で、エンジン回転数Ｎｅに基づきテーブルＴＫＭＦ12の格子の１０００rpm毎に区分されているグループを判別する。そして、エンジン回転数Ｎｅが５０００rpm以上のときは、ステップＳ３０４からステップＳ３０７へ進み、グループ別フラグＦＫＭＦＸ１２１の値を参照する。
【００７８】
ＦＫＭＦＸ１２１＝０のときは５０００rpm以上の４格子（図９(a)参照）に対して、初期の回転補正値ＫＭＦＸ12が記憶されたままの状態であり、ステップＳ３０８へ進み、上記５０００rpm以上の４格子全てに回転補正値ＫＭＦＸ12を記憶させ、ステップＳ３０９で、バックアップＲＡＭ４３に記憶されているグループ別フラグＦＫＭＦＸ１２１をセットし、ルーチンを抜ける。又、ＦＫＭＦＸ１２１＝１のときは、ステップＳ３１０へ進み、エンジン回転数Ｎｅに対応する格子に上記回転補正値ＫＭＦＸ12を記憶させて、ルーチンを抜ける。
【００７９】
又、エンジン回転数Ｎｅが５０００rpm＞Ｎｅ≧４０００rpmのときは、ステップＳ３０５からステップＳ３１１へ進み、グループ別フラグＦＫＭＦＸ１２２の値を参照する。ＦＫＭＦＸ１２２＝０のときは５０００rpm〜４０００rpm間の４格子（図９(a)参照）に対して、初期の回転補正値ＫＭＦＸ12が記憶されたままの状態であり、ステップＳ３１２へ進み、５０００rpm〜４０００rpm間の４格子全てに回転補正値ＫＭＦＸ12を記憶させ、ステップＳ３１３で、バックアップＲＡＭ４３に記憶されているグループ別フラグＦＫＭＦＸ１２２をセットし、ルーチンを抜ける。又、ＦＫＭＦＸ１２２＝１のときは、ステップＳ３１４へ進み、エンジン回転数Ｎｅに対応する格子に上記回転補正値ＫＭＦＸ12を記憶させて、ルーチンを抜ける。
【００８０】
又、エンジン回転数Ｎｅが４０００rpm＞Ｎｅ≧３０００rpmのときは、ステップＳ３０６からステップＳ３１５へ進み、グループ別フラグＦＫＭＦＸ１２３の値を参照する。ＦＫＭＦＸ１２３＝０のときは、４０００rpm〜３０００rpm間の４格子（図９(a)参照）に対して、初期の回転補正値ＫＭＦＸ12が記憶されたままの状態であり、ステップＳ３１６へ進み、４０００rpm〜３０００rpm間の４格子全てに回転補正値ＫＭＦＸ12を記憶させ、ステップＳ３１７で、バックアップＲＡＭ４３に記憶されているグループ別フラグＦＫＭＦＸ１２３をセットし、ルーチンを抜ける。又、ＦＫＭＦＸ１２３＝１のときは、ステップＳ３１８へ進み、エンジン回転数Ｎｅに対応する格子に上記回転補正値ＫＭＦＸ12を記憶させて、ルーチンを抜ける。
【００８１】
又、エンジン回転数Ｎｅが、３０００＞ＮｅのときはステップＳ３１９へ進み、グループ別フラグＦＫＭＦＸ１２４の値を参照する。ＦＫＭＦＸ１２４＝０のときは、３０００rpm未満の４格子（図９(a)参照）に対して、初期の回転補正値ＫＭＦＸ12が記憶されたままの状態であり、ステップＳ３２０へ進み、３０００rpm未満の４格子全てに、今回算出した回転補正値ＫＭＦＸ12を記憶させ、ステップＳ３２１で、バックアップＲＡＭ４３に記憶されているグループ別フラグＦＫＭＦＸ１２４をセットし、ルーチンを抜ける。又、ＦＫＭＦＸ１２４＝１のときは、ステップＳ３２２へ進み、エンジン回転数Ｎｅに対応する格子に上記回転補正値ＫＭＦＸ12を記憶させて、ルーチンを抜ける。
【００８２】
又、図５に示すθ2b−θ3b区間回転補正値更新サブルーチンでは、先ず、ステップＳ４０１で、バックアップＲＡＭ４３の所定アドレスに格納されている全体フラグＦＫＭＦＸ３４０の値を参照する。上述と同様、バッテリ５２や電子制御装置４０を一旦取り外し、再度組み込んだ後、或いは組立工程において上記電子制御装置４０にバックアップ電源を供給した後の最初ルーチン実行時には、上記バックアップＲＡＭ４３が初期化されて、全てのフラグ類がクリアされるため、ＦＫＭＦＸ３４０＝０であり、ステップＳ４０２へ進み、テーブルＴＫＭＦ34の全格子に今回算出した回転補正値ＫＭＦＸ34を記憶させ、ステップＳ４０３で上記全体フラグＦＫＭＦＸ３４０をセットし、ルーチンを抜ける。
【００８３】
一方、二回目以後のルーチン実行時には、ＦＫＭＦ３４０＝１であるため、ステップＳ４０１からステップＳ４０４へ進み、このステップＳ４０４〜Ｓ４０６で、エンジン回転数Ｎｅに基づきテーブルＴＫＭＦ34の格子の１０００rpm毎に区分けしたグループを判別する。
【００８４】
そして、エンジン回転数Ｎｅが５０００rpm以上のときは、ステップＳ４０４からステップＳ４０７へ進み、グループ別フラグＦＫＭＦ３４１の値を参照する。ＦＫＭＦ３４１＝０のときは５０００rpm以上の４格子（図９(b)参照）に対して、初期の回転補正値ＫＭＦＸ34が記憶されたままの状態であり、ステップＳ４０８へ進み、上記５０００rpm以上の４格子全てに、今回算出した回転補正値ＫＭＦＸ34を記憶させ、ステップＳ４０９で、バックアップＲＡＭ４３に記憶されているグループ別フラグＦＫＭＦ３４１をセットし、ルーチンを抜ける。又、ＦＫＭＦ３４１＝１のときは、ステップＳ４１０へ進み、エンジン回転数Ｎｅに対応する格子に上記回転補正値ＫＭＦＸ34を記憶させて、ルーチンを抜ける。
【００８５】
又、エンジン回転数Ｎｅが５０００rpm＞Ｎｅ≧４０００rpmのときは、ステップＳ４０５からステップＳ４１１へ進み、グループ別フラグＦＫＭＦ３４２の値を参照する。ＦＫＭＦ３４２＝０のときは５０００rpm〜４０００rpm間の４格子（図９(b)参照）に対して、初期の回転補正値ＫＭＦＸ34が記憶されたままの状態であり、ステップＳ４１２へ進み、５０００rpm〜４０００rpm間の４格子全てに回転補正値ＫＭＦＸ34を記憶させ、ステップＳ４１３で、バックアップＲＡＭ４３に記憶されているグループ別フラグＦＫＭＦ３４２をセットし、ルーチンを抜ける。又、ＦＫＭＦ３４２＝１のときは、ステップＳ４１４へ進み、エンジン回転数Ｎｅに対応する格子に上記回転補正値ＫＭＦＸ34を記憶させて、ルーチンを抜ける。
【００８６】
又、エンジン回転数Ｎｅが４０００rpm＞Ｎｅ≧３０００rpmのときは、ステップＳ４０６からステップＳ４１５へ進み、グループ別フラグＦＫＭＦ３４３の値を参照する。ＦＫＭＦ３４３＝０のときは、４０００rpm〜３０００rpm間の４格子（図９(b)参照）に対して、初期の回転補正値ＫＭＦＸ34が記憶されたままの状態であり、ステップＳ４１６へ進み、４０００rpm〜３０００rpm間の４格子全てに回転補正値ＫＭＦＸ34を記憶させ、ステップＳ４１７で、バックアップＲＡＭ４３に記憶されているグループ別フラグＦＫＭＦ３４３をセットし、ルーチンを抜ける。又、ＦＫＭＦ３４３＝１のときは、ステップＳ４１８へ進み、エンジン回転数Ｎｅに対応する格子に上記回転補正値ＫＭＦＸ34を記憶させて、ルーチンを抜ける。
【００８７】
又、エンジン回転数Ｎｅが、３０００＞ＮｅのときはステップＳ４１９へ進み、グループ別フラグＦＫＭＦ３４４の値を参照する。ＦＫＭＦ３４４＝０のときは、３０００rpm未満の４格子（図９(b)参照）に対して、初期の回転補正値ＫＭＦＸ34が記憶されたままの状態であり、ステップＳ４２０へ進み、３０００rpm未満の４格子全てに回転補正値ＫＭＦＸ34を記憶させ、ステップＳ４２１で、バックアップＲＡＭ４３に記憶されているグループ別フラグＦＫＭＦ３４４をセットし、ルーチンを抜ける。又、ＦＫＭＦ３４４＝１のときは、ステップＳ４２２へ進み、エンジン回転数Ｎｅに対応する格子に上記回転補正値ＫＭＦＸ34を記憶させて、ルーチンを抜ける。
【００８８】
その結果、上記各テーブルＴＫＭＦ12，ＴＫＭＦ34に格納されている回転補正値ＫＭＦＸ12，ＫＭＦＸ34がクリアされた場合であっても、最初のルーチン実行時に全ての格子に回転補正値ＫＭＦＸ12，ＫＭＦＸ34が記憶され、次いで、グループ化された複数の格子に新たな回転補正値ＫＭＦＸ12，ＫＭＦＸ34が格納され、さらにグループ化された格子に新たな回転補正値ＫＭＦＸ12，ＫＭＦＸ34が格納されているときは、個別の格子に新たな回転補正値ＫＭＦＸ12，ＫＭＦＸ34が格納されるようにしたので、未学習の格子がなく、運転頻度の少ない回転数域であっても、エンジン回転数Ｎｅに対応して格納されている回転補正値ＫＭＦＸ12，ＫＭＦＸ34を用いてクランク角区間θ2a−θ3a，θ2a−θ3aの開き角θ12，θ34の製造上のばらつきを速やかに補正することができるばかりでなく、各回転補正値ＫＭＦＸ12，ＫＭＦＸ34を１６格子以上に細分化した場合であっても、各適正補正値への収束性が良くなる。
【００８９】
尚、上記テーブルＴＫＭＦ12，ＴＫＭＦ34が初期化されているときの最初のルーチン実行時に、全ての格子に対して同一の回転補正値ＫＭＦＸ12，ＫＭＦＸ34を格納せず、エンジン回転数をパラメータとして該当する領域に上記回転補正値ＫＭＦＸ12，ＫＭＦＸ34を格納し、他の領域に対しては、今回算出した角度補正値ＫＭＦの傾向を再現する値を、演算により、或いは、該回転補正値ＫＭＦＸ12，ＫＭＦＸ34の基準値１.０に対する偏差をテーブル化し、該テーブルを参照して、他の領域に格納する回転補正値ＫＭＦＸ12，ＫＭＦＸ34を設定するようにしても良い。
【００９０】
次に、上記失火判定ルーチンのステップＳ１１６で実行する単発失火判定サブルーチン、及びステップＳ１２２で実行する失火判定サブルーチンについて説明する。
【００９１】
上記単発失火判定サブルーチンは、図６に示すフローチャートに従って実行される。先ず、ステップＳ５０１で、診断許可フラグＦＬＧDIAGの値を参照し、ＦＬＧDIAG＝０のときには、ステップＳ５０６で１燃焼行程前気筒＃i-1に対する失火フラグＦＬＧMIS#i-1をクリアして（ＦＬＧMIS#i-1←０）、ルーチンを抜け、又、ＦＬＧDIAG＝１のときには、ステップＳ５０２へ進む。
【００９２】
ステップＳ５０２では、エンジン回転数Ｎｅとエンジン負荷の代表である基本燃料噴射パルス幅Ｔｐとをパラメータとして失火判定レベルマップを補間計算付きで参照し、エンジン運転状態に応じた失火判定レベルＬＶＬＭＩＳを設定し、ステップＳ５０３へ進む。
【００９３】
上記失火判定レベルＬＶＬＭＩＳは、図１７に示すように、基本燃料噴射パルス幅Ｔｐの小さいエンジン低負荷域から基本燃料噴射パルス幅Ｔｐが大きくなって負荷が増大する程、スライスレベルが上昇するような値が、ＲＯＭ４２にマップとしてストアされている。
【００９４】
そして、ステップＳ５０２からステップＳ５０３へ進むと、このステップＳ５０３、及びステップＳ５０４で、上記失火判定レベルＬＶＬＭＩＳと、ＲＡＭ４３から読出した燃焼行程気筒＃ｉの差回転変化量ＤＤＮＥＡ#i、１燃焼行程前気筒#i-1の差回転変化量ＤＤＮＥＡ#i-1をそれぞれ比較し、失火判定を行なう。
【００９５】
先ず、ステップＳ５０３では、失火判定レベルＬＶＬＭＩＳと燃焼行程気筒＃ｉの差回転変化量ＤＤＮＥＡ#iとを比較し、ＤＤＮＥＡ#i＜ＬＶＬＭＩＳのときは、前述のステップＳ５０６を経てルーチンを抜け、ＤＤＮＥＡ#i≧ＬＶＬＭＩＳのとき、ステップＳ５０４で、負の失火判定レベル（−ＬＶＬＭＩＳ）と上記１燃焼行程前気筒＃i-1の差回転変化量ＤＤＮＥＡ#i-1とを比較する。
【００９６】
そして、ＤＤＮＥＡ#i-1＞−ＬＶＬＭＩＳのときには、失火なしと判別して前述のステップＳ５０６へ分岐し、ＤＤＮＥＡ#i-1≦−ＬＶＬＭＩＳのときには、１燃焼行程前気筒＃i-1（これから燃焼行程を迎える気筒を基準とした場合には、２燃焼行程前気筒）が失火状態であると判別し、ステップＳ５０５へ進み、失火フラグＦＬＧMIS#i-1をセットして（ＦＬＧMIS#i-1←１）、ルーチンを抜ける。
【００９７】
すなわち、２燃焼行程前気筒＃i-2から１燃焼行程前気筒＃i-1にかけての差回転変化量ＤＤＮＥＡ#i-1が失火判定レベルＬＶＬＭＩＳ以下の負の方向に減少した後、１燃焼行程前気筒＃i-1から現在の燃焼行程気筒＃ｉにかけての差回転変化量ＤＤＮＥＡ#iが失火判定レベルＬＶＬＭＩＳ以上の正の方向に増加したときにのみ、１燃焼行程前気筒＃i-1が失火状態であると判定することにより、図１８に示すように、差回転が所定時間連続して変化するスナッチなどのエンジン回転変動と区別し、正確に失火を検出することができる。
【００９８】
一方、図７に示す失火判定サブルーチンでは、先ず、ステップＳ６０１で、４気筒分の合計失火回数ΣＭＩＳＣＮＴn（ｎ＝１〜４）を、前述の失火診断ルーチンのステップＳ１２０でカウントしたカウント値ＣＲＡＣＮＴ（＝２０００）で割算して、エンジン１０００回転当りの失火率ＭＩＳＣＮＴ（％）を算出する（ＭＩＳＣＮＴ←ΣＭＩＳＣＮＴn／ＣＲＡＣＮＴ×１００）。
【００９９】
次いで、ステップＳ６０２へ進み、上記ステップＳ６０１で算出した失火率ＭＩＳＣＮＴが設定値ＬＭＳＣＮＴ未満かを判別する。この設定値ＬＭＳＣＮＴは、エンジン回転数Ｎｅと基本燃料噴射パルス幅Ｔｐとをパラメータとして予めＲＯＭ４２にストアされた定数である。
【０１００】
上記ステップＳ６０２における判別の結果、ＭＩＳＣＮＴ≧ＬＭＳＣＮＴのときには、ステップＳ６０３で、失火率ＭＩＳＣＮＴをバックアップＲＡＭ４４の所定アドレスにストアし、ステップＳ６０４で、バックアップＲＡＭ４４の所定アドレスにストアされている１回目失火判定ＮＧフラグＦＬＧNG1の値を参照する。
【０１０１】
そして、未だ１回目失火判定ＮＧフラグＦＬＧNG1がセットされておらずＦＬＧNG1＝０のときには、ステップＳ６０６へジャンプし、又、１回目失火判定ＮＧフラグＦＬＧNG1がセットされておりＦＬＧNG1＝１のときには、ステップＳ６０５へ進んでバックアップＲＡＭ４４の所定アドレスにストアされている２回目失火判定ＮＧフラグＦＬＧNG2をセットし（ＦＬＧNG2←１）、CHECH ENGINEランプ３４を点灯あるいは点滅させるなどしてユーザーに警告を発し、ステップＳ６０６へ進む。
【０１０２】
ステップＳ６０６では、１回目失火判定ＮＧフラグＦＬＧNG1をセットし（ＦＬＧNG1←１）、ステップＳ６１２で、異常なしの判定回数をカウントするための失火ＯＫカウンタをクリアして（ＣＮＴOK←０）ルーチンを抜ける。
【０１０３】
すなわち、ノイズなどによる誤診断を避けるため、１回目の判定で失火率ＭＩＳＣＮＴが設定値ＬＭＳＣＮＴ以上となっても、すぐには警告を発せず、２回目の判定で続けて失火率ＭＩＳＣＮＴが設定値ＬＭＳＣＮＴ以上となった場合に、その気筒は異常であると断定して警告を発する。
【０１０４】
尚、このとき、バックアップＲＡＭ４４には、失火気筒のトラブルデータがストアされ、ディーラにおけるトラブルシュートの際に、ＥＣＵ４０のモニタランプの点滅コードあるいはセレクトモニタ３５にて上記バックアップＲＡＭ４４に記憶されているトラブルデータが読出される。そして、失火気筒が判別されて修理がなされた後、上記バックアップＲＡＭ４４のトラブルデータは上記セレクトモニタ３５などを介してクリアする。
【０１０５】
一方、上記ステップＳ６０２で、ＭＩＳＣＮＴ＜ＬＭＳＣＮＴのときには異常なしであるため、ステップＳ６０７で、失火ＯＫカウンタＣＮＴOKをインクリメントすると（ＣＮＴOK←ＣＮＴOK＋１）、ステップＳ６０８で、失火ＯＫカウンタＣＮＴOKの値が８０回を越えたかを判別し、ＣＮＴOK＜８０のときは、そのままルーチンを抜け、ＣＮＴOK≧８０のとき、ステップＳ６０９，Ｓ６１０，Ｓ６１１で、それぞれ、１回目失火判定ＮＧフラグＦＬＧNG1、２回目失火判定ＮＧフラグＦＬＧNG2、失火率ＭＩＳＣＮＴをクリアすると（ＦＬＧNG1←０、ＦＬＧNG2←０、ＭＩＳＣＮＴ←０）、前述のステップＳ６１２へ進み、失火ＯＫカウンタＣＮＴOKをクリアして（ＣＮＴOK←０）ルーチンを抜ける。
【０１０６】
次に、図１９、図２０に本発明の第２の実施の形態を示す。図１９は、第１の実施の形態の図３に代えて採用される回転補正値算出サブルーチンで、図２０は、図１のステップＳ１０３〜Ｓ１０６に代えて採用される失火診断ルーチンである。
【０１０７】
上記第１の実施の形態では、回転補正値ＫＭＦＸ12，ＫＭＦＸ34を、失火判別に利用するクランク角区間θ2a−θ3a、或いはθ2b−θ3bの周期と、エンジン１回転の周期との比から個別に算出してるが、本実施の形態では、失火判別に利用するクランク角区間が複数ある場合、あるクランク角区間の角速度を基準とし、この基準となるクランク角区間のクランクパルス入力間隔時間に対する他のクランク角区間のクランクパルス入力間隔時間の相対変動から失火を判別するもので、失火を判定する区間が２カ所の場合には、１つの角度補正値ＫＭＦのみが算出される。尚、本実施の形態では、クランク角区間θ2a−θ3aの区間を基準とし、このクランク角区間θ2a−θ3aの区間で算出した基準区間平均角速度ＭＴＦ12と他のクランク角区間θ2b−θ3bで算出した角速度ＭＴＦ34との比から、該クランク角区間θ2b−θ3bのクランクパルス入力間隔時間ＭＴＸ34に対する角度補正値ＫＭＦを求める。
【０１０８】
図１９に示す回転補正値算出サブルーチンでは、先ず、ステップＳ７０１で、最新のクランクパルス入力間隔時間ＭＴＸ12、ＭＴＸ34に基づき算出した各クランク角区間θ2a−θ3a，θ2b−θ3bの周期ＴＭＦ12，ＴＭＦ34の比から、角度補正値ＫＭＦを算出する。
ＫＭＦ←ＴＭＦ12／ＴＭＦ34  …（８）
尚、本実施の形態では、各クランク角区間θ2a−θ3a，θ2b−θ3bの開き角θ12，θ34は、同じ角度（５５゜CA）に設定されているため、上記（８）式は、
ＫＭＦ←ＭＴＸ12／ＭＴＸ34  …（８’）
でも良い。
【０１０９】
次いで、ステップＳ７０２で、上記補正値ＫＭＦを次式に基づき加重平均処理して、クランク角区間θ2b−θ3bのクランクバルブ入力間隔時間ＭＴＸ34を補正する回転補正値ＫＭＦＸを算出する。
【０１１０】
0003963984.tif 000009
そして、ステップＳ７０３で、前記第１の実施の形態のθ2a−θ3a区間回転補正値更新サブルーチン（或いはθ2b−θ3b区間回転補正値更新ルーチン）と同様のルーチンを実行して上記回転補正値ＫＦＭＸをエンジン回転数をパラメータとするテーブルＴＫＭＦ12（或いはＴＫＭＦ34）の所定領域に格納し、ルーチンを抜ける。
【０１１１】
そして、図２０に示す失火診断ルーチンのステップＳ１０２で、これから圧縮行程を迎える気筒＃i+1を、前記第１の実施の形態と同様、パックアップＲＡＭ４３の所定アドレスに格納されている気筒番号ＣＹＬの値を参照して判別し、＃１，＃２気筒のときはステップＳ８０１へ進み、クランク角区間θ2a−θ3aのクランクパルス入力間隔時間ＭＴＸ12を、補正間隔時間ＭＴＸＡ#iとして、ステップＳ１０７へ進む。又、これから圧縮行程を迎える気筒が＃３，＃４気筒の場合には、ステップＳ８０２へ分岐し、エンジン回転数Ｎｅを読込み、このエンジン回転数ＮｅをパラメータとしてテーブルＴＫＭＦを参照して、回転補正値ＫＭＦＸを設定し、ステップＳ８０３で、次式からクランク角区間θ2b−θ3bの補正間隔時間ＭＴＸＡ#iを算出しステップＳ１０７へ進む。
【０１１２】
ＭＴＸＡ#i←ＭＴＸ34・ＫＭＦＸ    …（１０）
そして、ステップＳ１０７以降において、前記第１の実施の形態と同様にルーチンを実行して、失火の有無を気筒別に診断する。
【０１１３】
この実施の形態によれば、基準となるクランク角区間のクランクパルス入力間隔時間を基準として、他のクランク角区間のクランクパルス入力間時間を修正してクランクロータ２８のクランク角区間θ2a−θ3a，θ2b−θ3bの製造誤差に伴う区間平均回転数の算出誤差を相対的に修正するようにしたので、演算が容易になる。
【０１１４】
【発明の効果】
以上、説明したように請求項１記載の発明によれば、エンジンと同期回転するロータの気筒毎に対応する特定クランク角区間に設けた角度表示部を検出して出力されるクランクパルスに基づきエンジン１回転の間隔時間と特定クランク角区間の間隔時間とを算出し、この両間隔時間の比から当該特定クランク角区間の角度補正値を算出し、この角度補正値を加重平均処理して回転補正値を算出し、この回転補正値により当該特定クランク角区間の間隔時間を補正するようにしたので、上記ロータのクランク角区間毎に設けた角度表示部の開き角に製造誤差があっても、この製造誤差が排除された、設計通りのクランク角区間に対応した真の間隔時間を求めることができ、従って、この間隔時間に基づいて正確な区間平均回転数を算出することができる。
【０１１５】
請求項２記載の発明によれば、エンジンと同期回転するロータの気筒毎に対応する特定クランク角区間に設けた角度表示部を検出して出力されるクランクパルスに基づき２カ所以上の特定クランク角区間の間隔時間を算出し、この各間隔時間の１つを基準間隔時間とし、この基準間隔時間と他のクランク角区間の間隔時間との比から、当該クランク角区間の間隔時間を補正する角度補正値を算出し、この角度補正値を加重平均処理して回転補正値を算出し、この回転補正値で補正した間隔時間に基づいて当該クランク角区間の区間平均回転数を算出するようにしたので、基準となるクランク角区間の開き角に対する他のクランク角区間の開き角のばらつきが相対的に排除され、従って、全クランク角区間の区間平均回転数が、基準となるクランク角区間の区間平均回転数を基準とした相対的な値に統一され、該基準区間平均回転数に対する他の区間平均回転数の相対的な変化量を一律に検出することが可能となる。
【０１１６】
請求項３記載の発明によれば、上記請求項１或いは２記載の発明において、前記回転補正値を燃料カット時に算出することで、気筒間の燃焼によるばらつきの影響を排除して正確な回転補正値を求めることができる。
【０１１７】
請求項４記載の発明によれば、上記請求項１或いは２記載の発明において、前記角度補正値をエンジン回転数をパラメータとして領域別に格納するようにしたので、高回転域であっても動弁系、及びクランクシャフトなどのフリクション、ポンプピングロス等の影響による回転変動を排除した正確な値を求めることができる。
【０１１８】
請求項５記載の発明によれば、上記請求項１或いは２記載の発明において、前記回転補正値をエンジン回転数をパラメータとしてテーブルに対して領域別に格納する際に、該テーブルが初期化されているときは、最初に算出された回転補正値を上記テーブルの全領域に格納するようにしたので、テーブルが初期化された後に運転領域が変化した場合でも、上記回転補正値を利用してクランク角区間の間隔時間を補正することができ、各領域に格納される補正値の適正な値への収束性が良くなる。
【０１１９】
請求項６記載の発明によれば、上記請求項１或いは２記載の発明において、前記回転補正値をエンジン回転数をパラメータとしてテーブルに対して領域別に格納する際に、該テーブルが初期化されているときは、最初に算出された回転補正値を上記テーブルの全領域に格納し、その後は、エンジン回転数に基づき、該エンジン回転数毎に一定のグループに区分された領域に上記回転補正値を格納するようにしたので、学習の機会の少ない領域であっても適正な回転補正値への収束性が良くなり、従って、テーブルの領域をより細分化することができ、その分、上記間隔時間をより緻密に補正することができる。
【０１２０】
請求項７記載の発明によれば、エンジンと同期回転するロータの気筒毎に対応する特定クランク角区間に設けた角度表示部を検出して出力されるクランクパルスに基づきエンジン１回転の間隔時間と特定クランク角区間の間隔時間とを算出し、この両間隔時間の比から当該特定クランク角区間の角度補正値を算出し、この角度補正値を加重平均して回転補正値を算出し、この回転補正値により当該特定クランク角区間の間隔時間を補正するようにしたので、上記ロータのクランク角区間毎に設けた角度表示部の開き角に製造誤差があっても、この製造誤差が排除された、設計通りのクランク角区間に対応した真の間隔時間を求めることができ、この真の間隔時間から算出された区間平均回転数に基づき、失火診断の対象となる気筒に係わる区間平均回転数と、その両隣の区間平均回転数との変化量に基づき上記失火診断対象となる気筒の失火の有無を正確に検出することができる。
【０１２１】
請求項８記載の発明によれば、エンジンと同期回転するロータの気筒毎に対応する特定クランク角区間に設けた角度表示部を検出して出力されるクランクパルスに基づき２カ所以上の特定クランク角区間の間隔時間を算出し、この各間隔時間の１つを基準間隔時間とし、この基準間隔時間周期と他のクランク角区間の間隔時間との比から、当該クランク角区間の間隔時間を補正する角度補正値を算出し、この角度補正値を加重平均処理して回転補正値を算出し、この回転補正値で補正した間隔時間に基づいて当該クランク角区間の区間平均回転数を算出するようにしたので、基準となるクランク角区間の開き角に対する他のクランク角区間の開き角のばらつきが相対的に排除され、従って、全クランク角区間の区間平均回転数が、基準となるクランク角区間の区間平均回転数にを基準とした相対的な値に統一され、上記ロータのクランク角区間毎に設けた角度表示部の開き角に製造誤差があっても、各クランク角区間の区間平均回転数は、この製造誤差によるばらつきが相対的に修正された状態で算出される。従って、この区間平均回転数を用いて、失火診断の対象となる気筒に係わる区間平均回転数と、その両隣の区間平均回転数との変化量から上記失火診断対象となる気筒の失火の有無を正確に検出することができる。
【図面の簡単な説明】
【図１】第１実施の形態による失火診断ルーチンを示すフローチャート
【図２】同失火診断ルーチンを示すフローチャート（続き）
【図３】同回転補正値算出サブルーチンを示すフローチャート
【図４】同θ2a−θ3a区間回転補正値更新サブルーチンを示すフローチャート
【図５】同θ2b−θ3b区間回転補正値更新サブルーチンを示すフローチャート
【図６】同単発失火判定サブルーチンを示すフローチャート
【図７】同失火判定サブルーチンを示すフローチャート
【図８】同回転補正値の特性を示す説明図
【図９】同回転補正値を格納するテーブルの概念図
【図１０】同筒内圧力変動、クランクパルス、カムパルス、及びエンジン回転変動を示すタイミングチャート
【図１１】同エンジンの全体概略図
【図１２】同クランクロータとクランク角センサの正面図
【図１３】同カムロータとカム角センサの正面図
【図１４】同電子制御装置の回路図
【図１５】同差回転を示す説明図
【図１６】同差回転変化量を示す説明図
【図１７】同失火判定レベルの説明図
【図１８】同スナッチ発生時の運転状態と差回転を示す説明図
【図１９】第２実施の形態による回転補正値算出サブルーチンを示すフローチャート
【図２０】同失火診断ルーチンを示すフローチャート
【図２１】従来例によるクランクロータとクランク角センサの正面図、及びクランクパルスと燃焼行程気筒を示すタイミングチャート
【図２２】従来例による補正前の差回転を示す説明図
【符号の説明】
１…エンジン
２８…クランクロータ
２８ｂ，２８ｃ，２８ａ’，２８ｂ’…角度表示部（突起）
２９…クランク角検出手段（クランク角センサ）
ＫＭＦ…角度補正値
ＭＴＸＡ#i…補正間隔時間
ＭＮＸ#i…区間平均回転数
ＭＮＸ#i-2…（前々回算出した）区間平均回転数
ＭＮＸ#i-1…（前回算出した）区間平均回転数
Ｎｅ…エンジン回転数
ＴＫＭＦ12，ＴＫＭＦ34…テーブル
θ2a−θ3a，θ2b−θ3b…クランク角区間
【図１】
0003963984.tif 000010
【図２】
0003963984.tif 000011
【図３】
0003963984.tif 000012
【図４】
0003963984.tif 000013
【図５】
0003963984.tif 000014
【図６】
0003963984.tif 000015
【図７】
0003963984.tif 000016
【図８】
0003963984.tif 000017
【図９】
0003963984.tif 000018
【図１０】
0003963984.tif 000019
【図１１】
0003963984.tif 000020
【図１２】
0003963984.tif 000021
【図１３】
0003963984.tif 000022
【図１４】
0003963984.tif 000023
【図１５】
0003963984.tif 000024
【図１６】
0003963984.tif 000025
【図１７】
0003963984.tif 000026
【図１８】
0003963984.tif 000027
【図１９】
0003963984.tif 000028
【図２０】
0003963984.tif 000029
【図２１】
0003963984.tif 000030
【図２２】
0003963984.tif 000031