(57)【特許請求の範囲】
【請求項１】
内燃機関の回転に応じて所定の回転角度毎に回転信号を出力する回転信号出力手段と、
前記回転信号に基づいて前記内燃機関の各気筒の爆発行程毎の回転速度変動量を算出する回転速度変動量算出手段と、
前記回転信号のうち点火直後の失火の影響が現れない期間の信号に基づいて各気筒間の回転速度偏差を学習し、各気筒毎に前記回転速度偏差に応じた補正値を算出する気筒別補正値算出手段と、
前記回転速度変動量算出手段で算出した各気筒の爆発行程毎の回転速度変動量を前記気筒別補正値算出手段で算出した補正値で補正する回転速度変動量補正手段と、
この回転速度変動量補正手段で補正された各気筒の爆発行程毎の回転速度変動量を所定の失火判定値と比較して各気筒の失火の有無を判定する失火判定手段と
を備えたことを特徴とする内燃機関の失火検出装置。
【請求項２】
前記気筒別補正値算出手段は、各気筒の点火直後の回転速度と１回転前の回転速度との差分から回転速度偏差を学習することを特徴とする請求項１に記載の内燃機関の失火検出装置。
【請求項３】
前記気筒別補正値算出手段は、特定の気筒と点火時期が１回転ずれた気筒についての補正値として、当該特定の気筒について算出した補正値を用いることを特徴とする請求項１又は２に記載の内燃機関の失火検出装置。
【請求項４】
前記気筒別補正値算出手段は、補正値をなまし処理することを特徴とする請求項１乃至３のいずれかに記載の内燃機関の失火検出装置。
【請求項５】
前記気筒別補正値算出手段は、学習した回転速度偏差の絶対値を点火時期が１回転ずれた気筒について平均して補正値を求めることを特徴とする請求項１又は２に記載の内燃機関の失火検出装置。
【請求項６】
前記気筒別補正値算出手段は、機関負荷毎に前記補正値を学習し、それを次回の補正値の算出に反映させるようにしたことを特徴とする請求項１乃至５のいずれかに記載の内燃機関の失火検出装置。
【請求項７】
前記気筒別補正値算出手段は、各気筒間の回転速度偏差を学習するか否かを回転安定度合から判定する学習許可判定手段を有することを特徴とする請求項１乃至６のいずれかに記載の内燃機関の失火検出装置。
【請求項８】
前記学習許可判定手段は、回転安定度合を判断する指標として、全気筒分又は各気筒毎に回転速度変動量の標準偏差若しくはばらつきの程度を表すパラメータを演算し、そのパラメータが所定値以下のときに各気筒間の回転速度偏差の学習を許可することを特徴とする請求項７に記載の内燃機関の失火検出装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、内燃機関に発生する失火を内燃機関の回転状態から検出する内燃機関の失火検出装置に関するものである。
【０００２】
【従来の技術】
一般に、内燃機関（以下「エンジン」という）の気筒内の燃焼室で失火が発生すると、爆発行程の回転速度が低下することから、特開昭６１−２５８９５５公報に示すように、各気筒の爆発行程毎の回転速度変動量を算出し、この回転速度変動量を所定の失火判定値と比較して各気筒の失火の有無を判定するようにしたものがある。
【０００３】
しかしながら、図７に示すように、各気筒の爆発行程毎の回転速度変動量ΔＴは各気筒間でばらつきがあるので、全気筒一律の失火判定値を設定すると、失火時に失火を検出できなかったり、正常燃焼時に失火発生と誤判定してしまうおそれがある。
【０００４】
この不具合を解消するために、特開平５−１９５８５８号公報に示すように、各気筒の燃焼状態のばらつき度合に応じて各気筒毎に予め設定された補正係数で失火判定値を補正し、各気筒毎に補正された失火判定値と各気筒の爆発行程毎の回転速度変動量ΔＴとを比較することにより、各気筒の失火の有無を判定するようにしたものがある。
【０００５】
【発明が解決しようとする課題】
上記従来構成では、各気筒の燃焼状態のばらつき度合に応じて各気筒毎に補正係数を設定するようにしたが、各気筒の燃焼状態のばらつき度合は、エンジン間でもばらつきがあり、また、経年変化によってもばらつきが生じてくるので、全てのエンジンに対して予め適正な補正係数を設定することは困難であり、まして経年変化に適正に対処することは不可能である。従って、各気筒毎に予め設定された補正係数で失火判定値を補正する方法では、少ないながらも誤判定するおそれがあり、更なる失火判定精度の向上が望まれていた。
【０００６】
本発明はこのような事情を考慮してなされたものであり、従ってその目的は、失火判定精度を向上することができる内燃機関の失火検出装置を提供することにある。
【０００７】
【課題を解決するための手段】
上記目的を達成するために、本発明の請求項１の内燃機関の失火検出装置は、図１（ａ）に例示するように、内燃機関（以下「エンジン」という）の回転に応じて所定の回転角度毎に回転信号出力手段１から回転信号を出力し、この回転信号に基づいてエンジンの各気筒の爆発行程毎の回転速度変動量を回転速度変動量算出手段２により算出する。この際、気筒別補正値算出手段３は、回転信号出力手段１からの回転信号のうち点火直後の失火の影響が現れない期間の信号に基づいて各気筒間の回転速度偏差を学習し、各気筒毎に前記回転速度偏差に応じた補正値を算出する。そして、回転速度変動量補正手段４は、前記回転速度変動量算出手段２で算出した各気筒の爆発行程毎の回転速度変動量を前記気筒別補正値算出手段３で算出した補正値で補正し、失火判定手段６は、補正された各気筒の爆発行程毎の回転速度変動量を失火判定値記憶手段５に記憶されている所定の失火判定値と比較して各気筒の失火の有無を判定する。
【０００８】
この場合、従来のように失火判定値を補正するのではなく、各気筒間の回転速度偏差を学習して得られた補正値により回転速度変動量を補正することで、各気筒間の回転速度偏差を吸収（是正）するものであるから、エンジン間のばらつきや経年変化にも適切に対応できる。しかも、各気筒間の回転速度偏差の学習タイミングを各気筒の点火直後の失火の影響が現れない期間に設定しているので、失火の影響を受けずに回転速度偏差の学習が可能となり、学習精度を向上することができる。
【０００９】
更に、請求項２では、気筒別補正値算出手段３は、各気筒の点火直後の回転速度と１回転前（３６０℃Ａ前）の回転速度との差分から回転速度偏差を学習する。図５に示すように、各気筒の点火直後は、失火時でも回転速度に影響が現われず、失火時も正常燃焼時と同じ回転速度であるため、各気筒の点火直後の回転速度と１回転前の回転速度との差分から回転速度偏差を学習すれば、失火の影響を受けずに回転速度偏差の学習が可能となり、学習精度が向上する。
【００１０】
また、請求項３では、気筒別補正値算出手段３は、特定の気筒と点火時期が１回転（３６０℃Ａ）ずれた気筒についての補正値として、当該特定の気筒について算出した補正値を用いる。つまり、特定の気筒についての補正値（回転速度偏差）と、点火時期が１回転（３６０℃Ａ）ずれた気筒についての補正値（回転速度偏差）との関係は、絶対値がほぼ等しく、±が逆になるだけであるから、特定の気筒について算出した補正値を１回転（３６０℃Ａ）ずれた気筒についても利用するようにすれば、補正値の算出処理を半数の気筒について行えば良く、演算負荷を軽減できる。
【００１１】
更に、請求項４では、気筒別補正値算出手段３は、補正値をなまし処理する。これにより、補正値の過大な変化が適度に抑えられ、信頼性のある補正値が求められる。
【００１２】
また、請求項５では、気筒別補正値算出手段３は、学習した回転速度偏差の絶対値を点火時期が１回転ずれた気筒について平均して補正値を求める。この場合も、補正値の過大な変化が適度に抑えられ、信頼性のある補正値が求められる。
【００１３】
また、請求項６では、図１（ｂ）に例示するように、気筒別補正値算出手段３は、機関負荷出力手段７から出力される機関負荷毎に補正値を学習し、その学習結果を次回の補正値の算出に反映させる。このようにすれば、学習効果により、補正値の精度が更に向上する。
【００１５】
また、請求項７では、図１５に例示するように、学習許可判定手段９が、各気筒間の回転速度偏差を学習するか否かを回転安定度合から判定し、回転が安定しているときにのみ気筒別補正値算出手段３で各気筒間の回転速度偏差を学習し、回転が不安定なとき（例えば失火時や過渡時）には、回転速度偏差の学習を禁止することで、学習精度を向上させる。
【００１６】
また、請求項８では、学習許可判定手段９は、回転安定度合を判断する指標として、全気筒分又は各気筒毎に回転速度変動量の標準偏差若しくはばらつきの程度を表すパラメータを演算し、そのパラメータが所定値以下のときに、回転状態が安定していると判断して各気筒間の回転速度偏差の学習を許可する。つまり、回転安定度合を判断する指標として、回転速度変動量の標準偏差若しくはばらつきの程度を表すパラメータを演算することで、回転安定度合をより正確に判断するものである。
【００１７】
【発明の実施の形態】
以下、本発明の第１実施形態を図２乃至図１１に基づいて説明する。エンジン（内燃機関）１１の吸気管１２には、スロットルバルブ１３と吸気管圧力センサ１４が設けられ、また、エンジン１１の各気筒毎に燃料噴射弁１５が設けられている。エンジン１１には、イグナイタ１６で発生した高電圧を各気筒の点火プラグ（図示せず）に順次分配するディストリビュータ１７が取り付けられ、このディストリビュータ１７には、エンジン１１の２回転に１回の割合でパルス信号を発生する気筒判別センサ１８が設けられている。また、エンジン１１のクランク軸（図示せず）には、所定のクランク角（本実施形態では３０℃Ａ）回転する毎にパルス状の回転信号を出力する回転信号出力手段である回転角センサ１９が設けられている。更に、エンジン１１のウォータジャケット２０には、冷却水温を検出する水温センサ２１が取り付けられている。
【００１８】
これら各センサからの検出信号は、制御回路２２に入力される。この制御回路２２は、ＣＰＵ２３，ＲＯＭ２４，ＲＡＭ２５，入出力ポート２６等を内蔵したマイクロコンピュータにより構成されている。この制御回路２２は、ＲＯＭ２４に記憶された各種のエンジン制御プログラムに従って燃料噴射量や点火時期を演算してエンジン１１の運転を制御すると共に、ＲＯＭ２４に記憶されている図３及び図４に示す失火判定プログラムに従って各気筒の失火の有無を判定し、失火時には警告ランプ２７を点灯させて運転者に警告する。
【００１９】
ここで、本実施形態における失火判定の原理を例えば直列６気筒エンジンを例にして説明する。
制御回路２２は、図５に示すように、回転角センサ１９から３０℃Ａ毎に出力される回転信号ＮＥ（パルス信号）に基づいて各気筒の点火時期を演算し、点火信号を出力する。各気筒の点火直後のＴＤＣ（上死点）〜ＡＴＤＣ（上死点後）３０℃Ａまでの期間Ｔ３０２は、失火時でも回転速度に影響が現われず、失火時も正常燃焼時とほぼ同じ回転速度である。しかし、その後のＡＴＤＣ６０℃Ａ〜９０℃Ａまでの期間Ｔ３００は、失火時には図５に点線で示すように回転速度が上がらず、正常燃焼時の回転速度（実線）と大きな差ができる。従って、ＴＤＣ〜ＡＴＤＣ９０℃Ａの回転速度変動を所定の失火判定値と比較することで、失火の判定が可能である。そこで、この失火判定に用いる各気筒の爆発行程毎のＴＤＣ〜ＡＴＤＣ９０℃Ａ間の回転速度変動量ΔＴを次の（１）式で算出する（図６参照）。
【００２０】
ΔＴ＝（Ｔ３００−Ｔ３０２）−（Ｔ３００’−Ｔ３０２’）    ……（１）
ここで、Ｔ３０２，Ｔ３０２’は点火直後のＴＤＣ〜ＡＴＤＣ３０℃Ａの時間（パルス間隔）であり、Ｔ３０２’はＴ３０２のクランク軸１回転（３６０℃Ａ）前の時間である。また、Ｔ３００，Ｔ３００’はＡＴＤＣ６０℃Ａ〜９０℃Ａの時間（パルス間隔）であり、Ｔ３００’はＴ３００のクランク軸１回転（３６０℃Ａ）前の時間である。上記（１）式において、Ｔ３００−Ｔ３０２は、１点火周期内での瞬時トルク差に相当する回転速度差を時間に換算して算出する式であり、最新の回転速度差（Ｔ３００−Ｔ３０２）とその１回転前の回転速度差（Ｔ３００’−Ｔ３０２’）との差分をとって回転速度変動量ΔＴを時間に換算して求めるものである。
【００２１】
この回転速度変動量ΔＴは、各気筒の点火毎に算出されるが、図７に示すように、正常燃焼時（実線）であっても、気筒間で回転速度変動量ΔＴにばらつきがある。図７には、各気筒をそれぞれ失火させた場合の回転速度変動量ΔＴを点線で示しているが、失火時も、正常燃焼時と同じく、気筒間で回転速度変動量ΔＴにばらつきがある。図８に示すように、直列６気筒エンジンになると、クランク軸２８が長くなり、このクランク軸２８の一端のシグナルロータ２９に対向する回転角センサ１９の位置（通常はエンジンフロント側である＃１気筒側）と爆発行程の気筒との間のクランク軸２８のねじれ等によって回転角センサ１９の検出回転速度が微妙にずれてしまい、このずれが回転速度変動量ΔＴのばらつきを大きくする原因の１つとなっている。
【００２２】
このように、気筒の爆発行程毎の回転速度変動量ΔＴは各気筒間でばらつきがあるので、図７に示すように、全気筒一律の失火判定値を設定すると、失火時に失火を検出できなかったり、正常燃焼時に失火発生と誤判定してしまうおそれがある。
【００２３】
この不具合を解消するために、特開平５−１９５８５８号公報に示すように、各気筒の燃焼状態のばらつき度合に応じて各気筒毎に予め設定された補正係数で失火判定値を補正するようにしたものがあるが、各気筒の燃焼状態のばらつき度合は、エンジン間でもばらつきがあり、また、経年変化によってもばらつきが生じてくるので、全てのエンジンに対して予め適正な補正係数を設定することは困難であり、まして経年変化に適正に対処することは不可能であり、少ないながらも誤判定するおそれがある。
【００２４】
そこで、本実施形態では、各気筒間の回転速度偏差に応じて各気筒の回転速度変動量ΔＴを次のように補正することで、上記問題を解消するようにしている。図９に示すように、ＴＤＣ〜ＡＴＤＣ３０℃Ａまでの期間Ｔ３０２の回転速度は、＃１気筒が最も速く、＃６気筒が最も遅くなるという傾向がある。一方、ＡＴＤＣ６０℃Ａ〜９０℃Ａまでの期間Ｔ３００の回転速度は、図１０に示すように＃１〜＃６の全ての気筒でほぼ同速度となる。また、直列６気筒エンジンでは点火順序が＃１→＃５→＃３→＃６→＃２→＃４であり、図６に示すように＃１気筒と１回転（３６０℃Ａ）ずれた気筒は＃６気筒となる。＃１気筒と、その１回転前の＃６気筒との回転速度偏差を算出すると、図９にＡで示すように他の気筒よりも回転速度偏差が大きくなる。＃５気筒はその１回転前の＃２気筒との間で回転速度偏差を算出し、＃３気筒はその１回転前の＃４気筒との間で回転速度偏差を算出する。この回転速度偏差の算出は、失火時でも回転速度に影響が現われない領域、つまりＴＤＣ〜ＡＴＤＣ３０℃Ａまでの期間Ｔ３０２で行う。
【００２５】
各気筒の回転速度偏差（Ｔ３０２−Ｔ３０２’）の一例が図１１に示されている。回転速度偏差（Ｔ３０２−Ｔ３０２’）は、＃６気筒の点火直後（ＡＴＤＣ３０℃Ａ）で最大（Ａ）となり、その１回転前の＃１気筒の点火直後（ＡＴＤＣ３０℃Ａ）で最小（−Ａ）となるが、両者の絶対値はほぼ等しくなる。また、＃５気筒とその１回転前の＃２気筒とは、回転速度偏差の絶対値Ｂが同じで、±が逆になる。同様に、＃３気筒とその１回転前の＃４気筒とは、回転速度偏差の絶対値Ｃが同じで、±が逆になる。
【００２６】
本実施形態では、各気筒間の回転速度偏差（Ａ，Ｂ，Ｃ，−Ａ，−Ｂ，−Ｃ）に応じて求めた補正値ＴＣＹＬｉにより各気筒の回転速度変動量ΔＴを補正することで、各気筒間の回転速度偏差を吸収（是正）する。この際、前述したように気筒＃１，＃３，＃５と気筒＃６，＃４，＃２とは、それぞれ回転速度偏差の絶対値が同じで、±が逆になるだけであるから、補正値ＴＣＹＬｉの算出は半数の気筒＃１，＃３，＃５についてのみ行い、残りの気筒＃６，＃４，＃２については、対応する気筒＃１，＃３，＃５についての補正値ＴＣＹＬｉを利用する。
【００２７】
以下、失火判定処理の流れを図３に示すフローチャートに従って説明する。本ルーチンは、回転角センサ１９から入力される回転信号ＮＥ（パルス信号）により所定のクランク角毎（本実施形態では３０℃Ａ毎）に割込処理される。処理が開始されると、まず、ステップ１０１で、フリーランタイマーの現時刻ＴＩＭＥＲと前回のＮＥ割込時の時刻ＴＮＥＯＬＤとの差により、クランク軸２８が３０℃Ａ回転するのに要した時間（以下「３０℃Ａ時間」という）ｔＴ３０を算出した後、ステップ１０２で、現時刻ＴＩＭＥＲをＴＮＥＯＬＤに記憶する。次のステップ１０３で、３０℃Ａ時間データＴ３００，Ｔ３０１，Ｔ３０２，Ｔ３０３を更新する。ここで、Ｔ３００は今回の３０℃Ａ時間であり、Ｔ３０１は前回（３０℃Ａ前）の３０℃Ａ時間であり、Ｔ３０２は前々回（６０℃Ａ前）の３０℃Ａ時間であり、Ｔ３０３は前々々回（９０℃Ａ前）の３０℃Ａ時間である。
【００２８】
この後、ステップ１０４で、ＡＴＤＣ３０℃Ａであるか否かを判定し、ＡＴＤＣ３０℃Ａであれば、ステップ１０５の学習処理を実行するが、ＡＴＤＣ３０℃Ａでなければ、学習処理を実行せずにステップ１０６に移行する。
【００２９】
ＡＴＤＣ３０℃Ａで実行される学習処理（ステップ１０６）は、各気筒間の回転速度偏差を学習して各気筒毎に回転速度偏差に応じた補正値を算出する気筒別補正値算出手段としての役割を果たす。この学習処理では、図４に示すように、まず、ステップ１２１で、ＡＴＤＣ３０℃Ａでの３０℃Ａ時間データＴ３０２１，Ｔ３０２２，Ｔ３０２３を更新する。ここで、Ｔ３０２１は１２０℃Ａ前の３０℃Ａ時間であり、Ｔ３０２２は２４０℃Ａ前の３０℃Ａ時間であり、Ｔ３０２３は３６０℃Ａ前の３０℃Ａ時間である。この後、ステップ１２２で、最新のＡＴＤＣ３０℃Ａでの３０℃Ａ時間データＴ３０２をＴ３０２０に記憶し、次のステップ１２２で、Ｔ３０２０とその１回転前のＴ３０２３との差分（回転速度偏差）をＴＧとして算出する。
【００３０】
次のステップ１２４で、点火気筒が＃１，＃３，＃５のいずれかに該当するか否かを判定し、＃１，＃３，＃５のいずれかであれば、ステップ１２５に進んで補正値ＴＣＹＬｉを算出し、＃２，＃４，＃６のいずれかであれば、補正値ＴＣＹＬｉを算出せずに本ルーチンを終了する。前述したように、気筒＃１，＃３，＃５と気筒＃６，＃４，＃２とは、それぞれ回転速度偏差の絶対値が同じで、±が逆になるだけであるから、ステップ１２４，１２５により補正値ＴＣＹＬｉの算出は半数の気筒＃１，＃３，＃５についてのみ行い、残りの気筒＃６，＃４，＃２については、対応する気筒＃１，＃３，＃５についての補正値ＴＣＹＬｉを利用する。
【００３１】
更に、本実施形態では、補正値ＴＣＹＬｉを次の（２）式によりなまし処理して算出する。
ＴＣＹＬｉ＝｛ＴＣＹＬｉ（前回の値）＋７×ＴＧ｝／８    ……（２）
上式は、１／８なましであるが、１／４，１／２，１／１６，……等のいずれであっても良い。
【００３２】
以上のようにして学習処理を実行した後、図３のステップ１０６に移行し、ＡＴＤＣ９０℃Ａであるか否かを判定し、ＡＴＤＣ９０℃Ａでなければ、以降の処理を行わずに本ルーチンを終了するが、ＡＴＤＣ９０℃Ａであれば、ステップ１０７に進んで、１点火周期内での瞬時トルク差に相当する回転速度差データΔＴ３０１，ΔＴ３０２，ΔＴ３０３を更新する。ここで、ΔＴ３０１は１２０℃Ａ前の回転速度差データであり、ΔＴ３０２は２４０℃Ａ前の回転速度差データであり、ΔＴ３０３は３６０℃Ａ前の回転速度差データである。次のステップ１０８で、最新の１点火周期内での瞬時トルク差に相当する回転速度差データΔＴ３００を、３０℃Ａ時間データＴ３００とＴ３０２との差により算出する。
【００３３】
この後、ステップ１０９で、回転速度変動量ΔＴを、最新の回転速度差データΔＴ３００とその１回転（３６０℃Ａ）前の回転速度差データΔＴ３０３との差により算出する。このステップ１０９の処理が特許請求の範囲でいう回転速度変動量算出手段として機能する。次いで、ステップ１１０で、点火気筒が＃１，＃３，＃５のいずれかに該当するか否かを判定し、＃１，＃３，＃５のいずれかであれば、ステップ１１１に進んで、回転速度変動量ΔＴに補正値ＴＣＹＬｉを加算して回転速度変動量ΔＴを補正する。一方、＃２，＃４，＃６のいずれかであれば、回転速度変動量ΔＴから補正値ＴＣＹＬj を差し引いて回転速度変動量ΔＴを補正する。この際、点火気筒が＃２（気筒番号ｉ＝２）のときには、＃５の補正値ＴＣＹＬｊ（ｊ＝５）を用い、＃４（気筒番号ｉ＝４）のときには、＃３の補正値ＴＣＹＬｊ（ｊ＝３）を用い、＃６（気筒番号ｉ＝６）のときには、＃１の補正値ＴＣＹＬｊ（ｊ＝１）を用いる。これらステップ１１１，１１２の処理が特許請求の範囲でいう回転速度変動量補正手段として機能する。
【００３４】
以上のようにして回転速度変動量ΔＴを補正した後、ステップ１１３に進み、回転速度変動量ΔＴを、ＲＯＭ２４に記憶されている所定の失火判定値ＬＶＬＭＦと比較し、ΔＴ＞ＬＶＬＭＦであれば、失火と判定し（ステップ１１４）、警告ランプ２７を点灯して運転者に警告する（ステップ１１５）。一方、ΔＴ≦ＬＶＬＭＦであれば、正常燃焼と判定し（ステップ１１６）、本ルーチンを終了する。上記ステップ１１３，１１４，１１６の処理が特許請求の範囲でいう失火判定手段として機能する。
【００３５】
以上説明した第１実施形態では、従来のように失火判定値を補正するのではなく、各気筒間の回転速度偏差を学習して得られた補正値により回転速度変動量ΔＴを補正することで、各気筒間の回転速度偏差を吸収（是正）するものであるから、エンジン間のばらつきや経年変化にも適切に対応でき、失火判定精度を向上することができる。しかも、各気筒間の回転速度偏差の学習タイミングを各気筒の点火直後（失火の影響が現れない時期）に設定しているので、失火の影響を受けずに回転速度偏差の学習が可能となり、学習精度を向上することができる。
【００３６】
更に、特定の気筒についての補正値（回転速度偏差）と、点火時期が１回転（３６０℃Ａ）ずれた気筒についての補正値（回転速度偏差）とは、絶対値がほぼ等しく、±が逆になるだけであるという事情に着目し、特定の気筒について算出した補正値を１回転（３６０℃Ａ）ずれた気筒についても利用するようにしたので、補正値の算出処理を半数の気筒について行えば良く、演算負荷を軽減できる。尚、上記実施形態では、＃１，＃３，＃５の気筒について補正値を算出するようにしたが、＃２，＃４，＃６の気筒について補正値を算出するようにしても良く、要は、点火時期が１回転（３６０℃Ａ）ずれた２つの気筒（＃１，＃６），（＃３，＃４），（＃５，＃２）の各組からそれぞれ１つの気筒について補正値を算出するようすれば良い。
【００３７】
勿論、全ての気筒について補正値を算出するようにしても良いことは言うまでもない。これを具体化した実施形態が図１２に示す本発明の第２実施形態である。この第２実施形態の学習処理も、第１実施形態と同じステップ１２１〜１２３の処理により、各気筒の回転速度偏差ＴＧｉを算出し、続くステップ１２６で、次の（３）式により補正値ＴＣＹＬｉを算出する。
【００３８】
ＴＣＹＬｉ＝｛｜ＴＧｉ｜＋｜ＴＧｊ｜｝／２    ……（３）
ここで、添字のｉとｊは、１回転（３６０℃Ａ）ずれた気筒の番号を表している。従って、ｉ＝１のときはｊ＝６であり、ｉ＝３のときはｊ＝４であり、ｉ＝５のときはｊ＝２である。
【００３９】
このようにして、各気筒の回転速度偏差ＴＧｉの絶対値を点火時期が１回転ずれた気筒について平均して補正値ＴＣＹＬｉを求めれば、第１実施形態のなまし処理の場合と同じく、補正値ＴＣＹＬｉの過大な変化を適度に抑えることができて、信頼性のある補正値ＴＣＹＬｉを求めることができる。
【００４０】
また、吸気量，吸気管圧力，エンジン回転数等のエンジン負荷毎に補正値を学習し、それを次回の補正値の算出に反映させるようにしても良い。これを具体化した実施形態が図１３に示す本発明の第３実施形態である。この第３実施形態では、エアフローメータ等の吸気量検出手段により検出される吸気量ＧＮに応じて該当する学習エリアＴＣＹＬｉｊに補正値を更新記憶し、これを次回の補正値の算出に反映させる（例えば学習エリアＴＣＹＬｉｊの値を用いて補正値をなまし処理する）。このようにすれば、学習効果により補正値の精度が更に向上する。
【００４１】
また、図１４に示す本発明の第４実施形態では、各気筒間の回転速度偏差を学習しないが、その代わりに、予め各気筒毎に設定された補正マップ（ａ）及び（ｂ）をＲＯＭ２４に記憶し、その補正マップからエンジン負荷に応じて補正値を求める。ここで、補正マップ（ａ）は、各気筒毎に吸気量ＧＮに応じた補正係数ＲＥｉｊを記憶するマップであり、補正マップ（ｂ）は、各気筒毎にエンジン回転数に応じた補正係数ＲＦｉｊを記憶するマップである。これら両補正マップ（ａ）及び（ｂ）から補正値ＴＣＹＬｉｊを次の（４）式により算出する。
ＴＣＹＬｉｊ＝ＲＥｉｊ×ＲＦｉｊ      ……（４）
【００４２】
このように、エンジン負荷に応じて補正値を補正マップから求めれば、エンジン運転状態に合った補正値を求めることができる。尚、第４実施形態では、エンジン負荷として吸気量ＧＮとエンジン回転数とを用いたが、吸気管圧力等の他のエンジン負荷を表すデータを用いるようにしても良い。
【００４３】
また、第３及び第４実施形態では、＃１，＃３，＃５の気筒についてのみマップを作り、＃６，＃４，＃２の気筒については、それぞれ＃１，＃３，＃５の気筒についての補正値を利用するものであるが、全ての気筒についてマップを作るようにしても良いことは言うまでもない。
【００４４】
また、上記各実施形態において、学習処理は、回転変化、負荷変化、スロットル開度等のエンジン運転条件を表す信号が定常状態であるとき、つまり回転状態が安定しているときに実施することが好ましい。従って、失火発生時は勿論のこと、自動変速機がニュートラルからドライブレンジへ切り替えられるときや、空調装置のオン／オフ切替時、電気負荷（オルタネータ負荷）のオン／オフ切替時等の過渡時には、学習処理を禁止する。これにより、誤学習を未然に防止して学習精度を向上させることができる。
【００４５】
以下、これを具体化した本発明の第５実施形態を図１６乃至図２０に基づいて説明する。まず、図１６に基づいて回転速度変動量ΔＴの算出方法について説明する。直前のＴＤＣから次のＴＤＣまでの時間、つまりクランク軸２８が１２０℃Ａ（６気筒エンジンの場合）回転するのに要する時間Ｔ１２０を、回転角センサ１９から３０℃Ａ毎に出力される回転信号ＮＥのパルス間隔を積算することで算出する。そして、今回算出したＴ１２０ｉと、クランク軸１回転前（３６０℃Ａ前）のＴ１２０i-3 とを用いて回転速度変動量ΔＴを次式により算出する。
ΔＴ＝Ｔ１２０ｉ−Ｔ１２０i-3
【００４６】
この回転速度変動量ΔＴの算出は、図１７に示すＮＥ割込ルーチンによって行われる。本ルーチンは、回転信号ＮＥの入力に同期して所定のクランク角毎（本実施形態では３０℃Ａ毎）に割込処理される。処理が開始されると、まず、ステップ２０１で、フリーランタイマーの現時刻ＴＩＭＥＲと前回のＮＥ割込時の時刻ＴＮＥＯＬＤとの差により、クランク軸２８が３０℃Ａ回転するのに要した時間（以下「３０℃Ａ時間」という）ｔＴ３０を算出した後、ステップ２０２で、現時刻ＴＩＭＥＲをＴＮＥＯＬＤに記憶する。
【００４７】
そして、次のステップ２０３で、３０℃Ａ時間データＴ３００，Ｔ３０１，Ｔ３０２，Ｔ３０３，Ｔ３０４を更新する。ここで、Ｔ３００は今回の３０℃Ａ時間であり、Ｔ３０１は前回（３０℃Ａ前）の３０℃Ａ時間であり、Ｔ３０２は前々回（６０℃Ａ前）の３０℃Ａ時間であり、Ｔ３０３は前々々回（９０℃Ａ前）の３０℃Ａ時間であり、Ｔ３０４は前々々々回（１２０℃Ａ前）の３０℃Ａ時間である。そして、次のステップ２０４で、過去１２０℃Ａ分の３０℃Ａ時間Ｔ３０４〜Ｔ３０１を合算して、クランク軸２８が１２０℃Ａ回転するのに要する時間Ｔ１２０を算出する。
【００４８】
一方、図１８に示す失火判定ルーチンは、ＴＤＣ毎に割込処理される。処理が開始されると、まず、ステップ２１１で、気筒判別を行い、どの気筒のデータか判定する。この気筒判別は、回転信号ＮＥの入力毎（３０℃Ａ毎）にカウントアップされる気筒判別カウンタＣＣＲＮＫの値から次式により点火順番ｉを算出して行う（ＣＣＲＮＫは２３を越えると０に戻る）。
ｉ＝ＣＣＲＮＫ／４＋１
６気筒エンジンでは、点火順序は、＃１→＃５→＃３→＃６→＃２→＃４の繰り返しであり、ｉ＝１のとき＃１、ｉ＝２のとき＃５、ｉ＝３のとき＃３、ｉ＝４のとき＃６、ｉ＝５のとき＃２、ｉ＝６のとき＃４と判別される。
【００４９】
この後、ステップ２１２で、現在のＴ１２０ｉと、クランク軸１回転前（３６０℃Ａ前）のＴ１２０i-3 との差を算出して回転速度変動量ΔＴｉを求める。そして、次のステップ２１３で学習処理を実行する。この学習処理は、図１９の学習処理ルーチンによって実行される。この学習処理ルーチンでは、まずステップ２２１で、回転速度変動量ΔＴｉの標準偏差σと平均値Ｘを図２０のルーチンによって算出する。標準偏差σと平均値Ｘは、所定の点火回数毎に算出しても良いが、ここでは確率的手法を用いて標準偏差σと平均値Ｘを次のようにしてリアルタイムに算出する。
【００５０】
まず、ステップ２３１で、現在の回転速度変動量ΔＴｉと現在のＹｉ（＝Ｘ＋σ）とを比較し、ΔＴｉ＞Ｙｉであれば、ステップ２３２に進み、現在のＹｉに０．１を加算した値でＹｉを更新し、ΔＴｉ≦Ｙｉであれば、ステップ２３３に進み、現在のＹｉから０．０２を減算した値でＹｉを更新する。この後、ステップ２３４に進み、現在の回転速度変動量ΔＴｉと現在の平均値Ｘｉとを比較し、ΔＴｉ＞Ｘｉであれば、ステップ２３５に進み、現在のＸｉに０．０１を加算した値でＸｉを更新し、ΔＴｉ≦Ｘｉであれば、ステップ２３６に進んで、現在のＸｉから０．０１を減算した値でＸｉを更新する。この後、ステップ２３７に進み、現在の標準偏差σｉを現在のＹｉから現在の平均値Ｘｉを減算して求めて、本ルーチンを終了する。
【００５１】
この後、図１９の学習処理ルーチンのステップ２２２に戻り、気筒判別カウンタＣＣＲＮＫの値が０であるか否か、つまり＃１のＴＤＣであるか否かを判定し、「Ｎｏ」であれば、以降の学習処理を行うことなく、本ルーチンを終了する。一方、ＣＣＲＮＫ＝０（＃１のＴＤＣ）の場合には、ステップ２２３に進み、各気筒の回転速度変動量の標準偏差σｊ（ｊ＝１〜６）を所定値と比較し、各気筒の回転速度変動量のばらつきの程度を判定する。もし、σｊ≧所定値（ばらつきが大）であれば、ステップ２２４に進み、ディレーカウンタＣＤＫを０にクリアし、続くステップ２２５で、補正値ＴＣＹＬｉの学習値を読み出して、本ルーチンを終了する。
【００５２】
一方、上記ステップ２２３で、σｊ＜所定値（ばらつきが小）と判定された場合には、ステップ２２６に進み、ディレーカウンタＣＤＫをカウントアップし、続くステップ２２７で、ディレーカウンタＣＤＫが１５に達したか否かを判定する。もし、ディレーカウンタＣＤＫが１５未満であれば、学習値を更新せずに本ルーチンを終了する。つまり、σｊ＜所定値（ばらつきが小）の状態が１５回以上連続した場合、つまり回転状態が安定している場合にのみ、学習値を更新すべく、ステップ２２８に進み、平均値Ｘの最大値Ｘmax を算出し、続くステップ２２９で、補正値ＴＣＹＬｉを次によりなまし処理して算出する。
ＴＣＹＬｉ＝｛１５ＴＣＹＬｉ（前回の値）＋（Ｘmax −Ｘｉ）｝／１６
【００５３】
上式は、１／１６なましであるが、１／４，１／８，……等のいずれであっても良い。算出した補正値ＴＣＹＬｉを学習領域毎に記憶して本ルーチンを終了する。上記ステップ２２３，２２６，２２７の処理と図２０の標準偏差σ・平均値Ｘ算出処理が特許請求の範囲でいう学習許可判定手段として機能する。
【００５４】
このようにして学習処理ルーチンを終了すると、図１８の失火判定ルーチンのステップ２１４に戻り、回転速度変動量ΔＴｉに補正値ＴＣＹＬｉを加算して回転速度変動量ΔＴｉを補正する。そして、次のステップ２１５で、回転速度変動量ΔＴｉを、ＲＯＭ２４に記憶されている所定の失火判定値ＬＶＬＭＦと比較し、ΔＴ＞ＬＶＬＭＦであれば、失火と判定し（ステップ２１６）、警告ランプ２７を点灯して運転者に警告する（ステップ２１７）。一方、ΔＴ≦ＬＶＬＭＦであれば、正常燃焼と判定し（ステップ２１８）、本ルーチンを終了する。
【００５５】
以上説明した第５実施形態では、回転速度変動量ΔＴの標準偏差σを演算し、全気筒の回転速度変動量ΔＴの標準偏差σｊが所定値未満の状態が所定回数以上連続するときに、回転状態が安定していると判断して補正値ＴＣＹＬｉの学習を許可し、回転が不安定なとき（例えば失火時や過渡時）には、学習を禁止するようにしたので、誤学習を防止できて、学習精度を向上させることができる。
【００５６】
尚、図１９のステップ２２７では、σｊ＜所定値の状態が１５回連続するか否かによって回転状態が安定しているか否かを判断するようにしたが、この回数は１５回に限定されず、１４回以下又は１６回以上であっても良い。
【００５７】
また、図１９のステップ２２３では、全気筒分について回転速度変動量ΔＴの標準偏差σｊが所定値未満であるかを判定するようにしたが、この判定を気筒毎に別々に行うようにしても良い。また、回転安定具合を判断する指標は標準偏差σに限定されず、要は、全気筒分又は各気筒毎に回転速度変動量ΔＴのばらつきの程度を表す何等かのパラメータを演算するようにすれば良い。
【００５８】
尚、上記各実施形態は、本発明を６気筒エンジンに適用したものであるが、これに限られず、４気筒以上のエンジンに同様に適用して実施でき、また、直列エンジンに限らず、Ｖ型エンジンにも適用して実施できる。また、上記実施形態では、回転角センサ１９から３０℃Ａ毎に出力される回転信号ＮＥ（パルス信号）に基づいて回転速度偏差を学習するようにしたが、回転信号ＮＥのパルス間隔は３０℃Ａに限定されず、１５℃Ａ等、他のクランク角であっても良いことは言うまでもない。
【図面の簡単な説明】
【図１】本発明の３種類の実施態様を示すブロック図
【図２】本発明の第１実施形態のシステム全体の概略構成を示す図
【図３】失火判定ルーチンの処理の流れを示すフローチャート
【図４】学習処理ルーチンの処理の流れを示すフローチャート
【図５】回転速度の変動の一例を示すタイムチャート
【図６】回転速度変動量ΔＴの算出方法を説明する図
【図７】各気筒の回転速度変動量ΔＴのばらつきを説明する図
【図８】各気筒と回転角センサとの位置関係を説明する図
【図９】各気筒におけるＴＤＣ〜ＡＴＤＣ３０℃Ａの間Ｔ３０２の時間（回転速度差）の関係を説明する図
【図１０】各気筒におけるＡＴＤＣ６０℃Ａ〜９０℃Ａの間Ｔ３００の時間（回転速度差）の関係を説明する図
【図１１】各気筒間の回転速度偏差を説明するタイムチャート
【図１２】本発明の第２実施形態における学習処理ルーチンの処理の流れを示すフローチャート
【図１３】本発明の第３実施形態における学習エリアを概念的に示す図
【図１４】本発明の第４実施形態における補正マップ（ａ），（ｂ）を概念的に示す図
【図１５】本発明の第５実施形態を概念的に示す機能ブロック図
【図１６】第５実施形態における回転速度変動量ΔＴの算出方法を説明する図
【図１７】ＮＥ割込ルーチンの処理の流れを示すフローチャート
【図１８】失火判定ルーチンの処理の流れを示すフローチャート
【図１９】学習処理ルーチンの処理の流れを示すフローチャート
【図２０】標準偏差σ・平均値Ｘ算出処理ルーチンの処理の流れを示すフローチャート
【符号の説明】
１…回転信号出力手段、２…回転変動量算出手段、３…気筒別補正値算出手段、４…回転速度変動量補正手段、５…失火判定値記憶手段、６…失火判定手段、７…機関負荷出力手段、８…補正マップ記憶手段、９…学習許可判定手段、１１…エンジン（内燃機関）、１４…吸気管圧力センサ、１５…燃料噴射弁、１８…気筒判別センサ、１９…回転角センサ（回転信号出力手段）、２２…制御回路（回転変動量算出手段，気筒別補正値算出手段，回転速度変動量補正手段，失火判定手段）、２７…警告ランプ、２８…クランク軸。
【図１】
0003922468.tif 000002
【図２】
0003922468.tif 000003
【図３】
0003922468.tif 000004
【図４】
0003922468.tif 000005
【図５】
0003922468.tif 000006
【図６】
0003922468.tif 000007
【図７】
0003922468.tif 000008
【図８】
0003922468.tif 000009
【図９】
0003922468.tif 000010
【図１０】
0003922468.tif 000011
【図１１】
0003922468.tif 000012
【図１２】
0003922468.tif 000013
【図１３】
0003922468.tif 000014
【図１４】
0003922468.tif 000015
【図１５】
0003922468.tif 000016
【図１６】
0003922468.tif 000017
【図１７】
0003922468.tif 000018
【図１８】
0003922468.tif 000019
【図１９】
0003922468.tif 000020
【図２０】
0003922468.tif 000021