(57)【特許請求の範囲】
【請求項１】
多気筒内燃機関の出力軸の回転に応じた回転信号を出力する回転信号出力手段と、
前記回転信号に基づき、同機関出力軸の気筒別回転速度を算出する回転速度算出手段と、
２つの気筒について前記気筒別回転速度の変動量を求め、該求めた気筒別回転速度変動量に基づいて当該機関の失火発生を検出する失火検出手段と
を備えた内燃機関の失火検出装置において、
前記失火検出手段は、
各気筒の１燃焼サイクルに要するクランク角を気筒数で除したクランク角を最小単位とし、その整数倍のクランク角度だけ離れた複数の組み合わせの気筒について、前記気筒別回転速度変動量の差分を算出する変動量差分算出手段と、
前記複数の組み合わせの気筒別回転速度変動量の差分演算結果を、個々に所定の失火判定値と比較する比較判定手段と
を備えることを特徴とする内燃機関の失火検出装置。
【請求項２】
多気筒内燃機関の出力軸の回転に応じた回転信号を出力する回転信号出力手段と、
前記回転信号に基づき、同機関出力軸の気筒別回転速度を算出する回転速度算出手段と、
２つの気筒について前記気筒別回転速度の変動量を求め、該求めた気筒別回転速度変動量に基づいて当該機関の失火発生を検出する失火検出手段と
を備えた内燃機関の失火検出装置において、
前記失火検出手段は、
７２０クランク角度の整数倍だけ離れた気筒の前記気筒別回転速度変動量の差分を算出する第１の差分演算法と、３６０クランク角度の奇数倍だけ離れた気筒の前記気筒別回転速度変動量の差分を算出する第２の差分演算法と、各気筒の１燃焼サイクルに要するクランク角を気筒数で除したクランク角を最小単位とし、３６０クランク角度の整数倍を除く前記最小単位の整数倍のクランク角度だけ離れた気筒の前記気筒別回転速度変動量の差分を算出する第３の差分演算法とのうち、少なくともいずれか２つを同時に若しくは選択的に実施する変動量差分算出手段と、
前記変動量差分算出手段が実施した前記第１〜第３の差分演算法による気筒別回転速度変動量の差分演算結果を、個々に所定の失火判定値と比較する比較判定手段と
を備えることを特徴とする内燃機関の失火検出装置。
【請求項３】
請求項１又は２に記載の内燃機関の失火検出装置において、
前記失火検出手段は、
前記比較判定手段の比較結果から前記気筒別回転速度変動量の差分演算結果に基づく失火数を各々に計数する失火数計数手段と、
該計数された複数の失火数データを用いて最終的な失火判定を実施する最終失火判定手段と
を備えることを特徴とする内燃機関の失火検出装置。
【請求項４】
前記最終失火判定手段は、所定点火数が経過するまでの期間内において複数実施された差分演算法による失火数の総和を最終的な失火検出数とし、この失火検出数に基づいて失火判定を実施することを特徴とする請求項３に記載の内燃機関の失火検出装置。
【請求項５】
前記最終失火判定手段は、所定点火数が経過するまでの期間内において複数実施された差分演算法による失火数の最大値を最終的な失火検出数とし、この失火検出数に基づいて失火判定を実施することを特徴とする請求項３に記載の内燃機関の失火検出装置。
【請求項６】
請求項２に記載の内燃機関の失火検出装置において、
前記第１〜第３の差分演算法のうち、いずれか１つの実施により失火発生の旨が検出された場合には、他の差分演算法の演算結果を用いた失火判定を実施しないことを特徴とする内燃機関の失火検出装置。
【請求項７】
前記第１の差分演算法、前記第２の差分演算法、前記第３の差分演算法の優先順位で各演算を実施することを特徴とする請求項６に記載の内燃機関の失火検出装置。
【請求項８】
請求項２に記載の内燃機関の失火検出装置において、
前記第１〜第３の差分演算法を各々独立して実施することを特徴とする内燃機関の失火検出装置。
【請求項９】
前記回転信号出力手段により得られる各気筒間の回転信号の偏差を学習値として逐次演算する学習手段を備え、
前記変動量差分算出手段により実施される第３の差分演算法においては、前記学習手段により得られた学習値を用いて気筒別回転速度変動量の差分を算出することを特徴とする請求項２〜８のいずれかに記載の内燃機関の失火検出装置。
【請求項１０】
前記学習手段は、前記内燃機関が正常点火されていることを条件に、前記学習を実行する請求項９に記載の内燃機関の失火検出装置。
【請求項１１】
前記学習手段は、前記内燃機関が失火していないこと、或いは路面状況による外乱や運転操作による回転変動が発生していないことを条件に、前記学習を実行する請求項９又は１０に記載の内燃機関の失火検出装置。
【請求項１２】
前記変動量差分算出手段により実施される第１の差分演算法から個々の気筒に対して不連続に発生する失火を検出し、前記第２及び第３の差分演算法から少なくとも１つの気筒に対して連続的に発生する失火を検出する請求項２〜１１のいずれかに記載の内燃機関の失火検出装置。
【請求項１３】
偶数個の気筒を有する内燃機関において、
前記前記変動量差分算出手段により実施される第３の差分演算法から３６０クランク角度離れた対向気筒の連続失火の発生を検出し、前記第２の差分演算法から上記対向気筒の連続失火以外の連続失火を検出する請求項２〜１２のいずれかに記載の内燃機関の失火検出装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明は、内燃機関に発生した失火を機関出力軸の回転速度変動を利用して検出する内燃機関の失火検出装置に関するものである。
【０００２】
【従来の技術】
従来、この種の内燃機関の失火検出装置として、爆発行程が連続する２つの気筒間の回転速度（クランク角速度）の変動量に基づいて失火発生の有無を検出するものがある（例えば、特開平４−３６５９５８号公報）。つまり、内燃機関にあっては一般に、ある気筒の爆発行程において失火が発生すると、そのときの回転速度、すなわち機関出力軸であるクランク軸の回転角速度は小さくなる。このため、こうした回転速度の変化を監視することで、それら気筒毎の失火発生の有無を検出することができるようになる。
【０００３】
特に、上記公報（特開平４−３６５９５８号公報）の失火検出装置では、爆発行程が連続する２つの気筒間の回転速度の変動から第１の変動量を算出すると共に、その第１の変動量を算出した気筒よりも３６０°ＣＡ（クランク角度）前の気筒の回転速度の変動から第２の変動量を算出している。そして、第１及び第２の変動量の差分に基づいて内燃機関の失火の有無を検出するようにしている。こうして３６０°ＣＡだけ離れた気筒同士で回転速度変動量の差分を求めることは、偶数個の気筒を有する内燃機関において対向気筒（爆発行程がクランク軸の１回転分だけ離れた気筒を意味する）の回転速度変動を監視することとなり、この場合、回転変動の周期（ばらつき度合）が略一致する回転速度変動量をパラメータとして用いることができる。その結果、失火検出の誤差を削減できるものとしていた。
【０００４】
【発明が解決しようとする課題】
ところが、上記従来技術においては、以下に示す問題を生ずる。つまり、上記従来の失火検出装置では、回転速度変動量の差分をとる組み合わせによっては、検出不可能な失火パターンが存在する。具体的には、上記したように３６０°ＣＡだけ離れた気筒同士（対向気筒同士）で回転速度変動量の差分を求める場合、その対向気筒が共に連続失火しているような事態が発生すると、失火による回転変動が相殺され、失火発生の旨が検出できないこととなる。また、上記３６０°ＣＡ離れた気筒を組み合わせた場合の差分演算に限らず、他の気筒を組み合わせて回転速度変動の差分を求める場合にも、特定気筒で連続失火するような失火パターンが発生している場合には、やはり失火検出が不可能になるという事態を招いてしまう。
【０００５】
本発明は、上記問題に着目してなされたものであって、内燃機関に発生するあらゆる失火パターンを精度良く検出することができる内燃機関の失火検出装置を提供することを目的とする。
【０００６】
【課題を解決するための手段】
こうした目的を達成するため、この発明ではその前提として、多気筒内燃機関の出力軸の回転に応じた回転信号を出力する回転信号出力手段と、前記回転信号に基づき、同機関出力軸の気筒別回転速度を算出する回転速度算出手段と、２つの気筒について前記気筒別回転速度の変動量を求め、該求めた気筒別回転速度変動量に基づいて当該機関の失火発生を検出する失火検出手段とを備える。なおここで、回転速度変動量は必ずしもそれ自身でなくともよく、それに相当する値、例えば回転角度偏差であってもよい。更に、この回転角度偏差に相当する値、或いは回転所要時間偏差などもこの回転度変動量に相当する値として用いることができる。
【０００７】
そして、請求項１に記載の発明ではその特徴として、前記失火検出手段は、各気筒の１燃焼サイクルに要するクランク角を気筒数で除したクランク角を最小単位とし、その整数倍のクランク角度だけ離れた複数の組み合わせの気筒について、前記気筒別回転速度変動量の差分を算出する（変動量差分算出手段）。また、前記複数の組み合わせの気筒別回転速度変動量の差分演算結果を、個々に所定の失火判定値と比較するようにしている（比較判定手段）。
【０００８】
ここで、前記１燃焼サイクルに要するクランク角とは、４サイクル式内燃機関においては７２０°ＣＡを指し、２サイクル式内燃機関においては３６０°ＣＡを指す。また、１燃焼サイクルに要するクランク角を気筒数で除したクランク角（最小単位）とは、例えば４サイクル４気筒内燃機関では１８０°ＣＡとなり、４サイクル６気筒内燃機関では１２０°ＣＡとなる。さらに、クランク角の最小単位を整数倍したクランク角度とは、例えば４サイクル４気筒内燃機関では１８０°ＣＡ，３６０°ＣＡ，５４０°ＣＡ，７２０°ＣＡ・・・となり、４サイクル６気筒内燃機関では１２０°ＣＡ，２４０°ＣＡ，３６０°ＣＡ，４８０°ＣＡ，６００°ＣＡ，７２０°ＣＡ・・・となる。
【０００９】
要するに、本発明で実施するような気筒別回転速度変動量の差分法を用いる失火検出手法では、特定気筒の連続失火が発生する場合において回転速度変動量が相殺され当該失火の検出が不可能になることがある。しかし、上記構成によれば、２階差分による差分演算を複数の気筒組み合わせで実施しその演算結果について個々に失火判定することにより、たとえ連続失火が発生していずれか１つの回転速度変動量の差分が相殺されたとしても他の回転速度変動量の差分により失火発生の旨が検出できる。その結果、内燃機関に発生するあらゆる失火パターンを精度良く検出するという本発明の目的が達せられる。
【００１０】
また、請求項２に記載の発明ではその特徴として、前記失火検出手段は、７２０クランク角度だけ離れた気筒の前記気筒別回転速度変動量の差分を算出する第１の差分演算法（７２０°ＣＡ差分法）と、３６０クランク角度だけ離れた気筒の前記気筒別回転速度変動量の差分を算出する第２の差分演算法（３６０°ＣＡ差分法）と、各気筒の１燃焼サイクルに要するクランク角を気筒数で除したクランク角を最小単位とし、３６０クランク角度の整数倍を除く前記最小単位の整数倍のクランク角度だけ離れた気筒の前記気筒別回転速度変動量の差分を算出する第３の差分演算法（例えば、６気筒内燃機関における１２０°ＣＡ差分法や、４気筒内燃機関における１８０°ＣＡ差分法等）とのうち、少なくともいずれか２つを同時に若しくは選択的に実施する（変動量差分算出手段）。また、前記変動量差分算出手段が実施した前記第１〜第３の差分演算法による気筒別回転速度変動量の差分演算結果を、個々に所定の失火判定値と比較する（比較判定手段）。
【００１１】
この場合、より具体的に説明すれば、第１の差分演算法から個々の気筒に対して不連続に発生する失火（以下、これを間欠失火という）が検出され、第２及び第３の差分演算法から少なくとも１つの気筒に対して連続的に発生する失火（連続失火）が検出される。また、偶数個の気筒を有する内燃機関において、第３の差分演算法から３６０クランク角度離れた対向気筒の連続失火の発生が検出され、第２の差分演算法から上記対向気筒の連続失火以外の連続失火が検出されることとなる（これは、請求項１１及び１２の記載事項に相当する）。こうして各々の差分演算法により異なる失火パターンが検出できることから、失火の検出漏れが回避され、請求項１と同様に、内燃機関に発生するあらゆる失火パターンを精度良く検出するという本発明の目的が達せられる。
【００１２】
また、以上請求項１又は２に記載したように複数の失火パターンが検出できる構成においては、請求項３に記載したように、前記比較判定手段の比較結果から前記気筒別回転速度変動量の差分演算結果に基づく失火数を各々に計数し（失火数計数手段）、該計数された複数の失火数データを用いて最終的な失火判定を実施してもよい（最終失火判定手段）。そして、例えばこの最終の判定結果に基づいて運転者に失火異常の旨を警告する警告灯（ＭＩＬ：Malfunction indicator light ）が点灯制御される。
【００１３】
かかる場合、最終失火判定手段の構成として、請求項４に記載したように、所定点火数が経過するまでの期間内において複数実施された差分演算法による失火数の総和を最終的な失火検出数とし、この失火検出数に基づいて失火判定を実施するようにしたり、請求項５に記載したように、所定点火数が経過するまでの期間内において複数実施された差分演算法による失火数の最大値を最終的な失火検出数とし、この失火検出数に基づいて失火判定を実施するようにしたりすることができる。このとき、前者（請求項４）の構成は、失火パターンが間欠失火と連続失火との間で変化したりする場合に好適であり、後者（請求項５）の構成は、失火パターンが同一パターンで継続する場合に好適である。
【００１４】
他方、請求項６に記載の発明では、前記第１〜第３の差分演算法のうち、いずれか１つの実施により失火発生の旨が検出された場合には、他の差分演算法の演算結果を用いた失火判定を実施しないこととし、更に、請求項７に記載の発明では、前記第１の差分演算法、前記第２の差分演算法、前記第３の差分演算法の優先順位で各演算を実施するようにしている。つまり、失火検出の精度を比較すればそれは、第１の差分演算法（７２０°ＣＡ差分法）、第２の差分演算法（３６０°ＣＡ差分法）、第３の差分演算法（例えば６気筒内燃機関での１２０°ＣＡ差分法）の順となる。そのため、上記のように優先順位に従って差分演算を実施することで、より精度の高い失火検出が可能となる。また、複数の差分演算を排他的に実施することとなるため、余分な演算処理が不要となり、マイクロコンピュータ支援による失火検出装置を構築する上で、演算効率を向上させることができる。
【００１５】
なお、請求項８に記載したように、前記第１〜第３の差分演算法を各々独立に実施することも勿論可能である。この場合にも、失火の検出漏れが回避できるという効果が得られる。
【００１６】
また、請求項９に記載の発明では、前記回転信号出力手段により得られる各気筒間の回転信号の偏差を学習値として逐次演算する学習手段を設け、前記変動量差分算出手段により実施される第３の差分演算法においては、前記学習手段により得られた学習値を用いて気筒別回転速度変動量の差分を算出するようにしている。つまり、前記第１の差分演算法（７２０°ＣＡ差分法）及び第２の差分演算法（３６０°ＣＡ差分法）では、同一気筒又は対向気筒の回転速度変動量の差分値から失火検出がなされるため、機関回転速度が変化する傾向が２階差分を実施する上で略等しくなり、回転信号の偏差（公差）による悪影響が生じにくい。しかし、第３の差分演算法（例えば６気筒内燃機関での１２０°ＣＡ差分法）のように、機関回転速度の変化が気筒間でばらつく場合にはその時の偏差（公差）に応じた補正が必要となり、既述した構成のように学習値を用いて補正処理を行なうことにより、失火検出精度が高く維持されるようになる。
【００１７】
ところで、上記学習手段においてその学習値をより信頼性の高い値に維持するためには、請求項１０に記載の発明によるように、当該機関が正常点火されているか否かを判断し、正常点火されているときにのみ上記学習を実行することが望ましい。こうした構成を採用することにより、当該機関が正常点火されていない旨判断される場合、上記学習の実行は禁止され、同機関の当該運転条件に対応した学習値の信頼性も好適に維持されるようになる。
【００１８】
さらには、請求項１１に記載したように、前記内燃機関が失火していないこと、或いは路面状況による外乱や運転操作による回転変動が発生していないことを条件に、前記学習を実行することによっても、当該学習値をより信頼性の高い値に維持することができる。
【００１９】
【発明の実施の形態】
（第１の実施の形態）
図１に、この発明にかかる内燃機関の失火検出装置についてその第１の実施の形態を示す。
【００２０】
この実施の形態では、内燃機関として６気筒の内燃機関を対象とし、該６気筒の内燃機関に発生した失火を検出する装置について示す。すなわち、同図１に示す本実施の形態の装置において、内燃機関１は、第１気筒（＃１）〜第６気筒（＃６）の６つの気筒を有する内燃機関である。なお、本実施の形態の内燃機関１では、便宜上その点火順序を＃１→＃２→＃３→＃４→＃５→＃６とする。
【００２１】
内燃機関１には吸気管２が設けられ、図示しないエアクリーナから導入された吸入空気は、該吸気管２を通じて同機関１に取り込まれる。また、この吸気管２には吸気管圧力センサ３が設けられ、この吸気管圧力センサ３を通じて吸気管２内の圧力ＰＭが逐次検出される。この検出される吸気管２内の圧力ＰＭは、内燃機関１の運転状態を示す１パラメータとして、後述する電子制御装置（以下、ＥＣＵという）９に取り込まれる。
【００２２】
一方、内燃機関１の図示しないクランク軸には、同クランク軸の所定クランク角毎に回転信号ＮＥを出力する回転角センサ５が設けられている。同機関１の回転数等は、この回転角センサ５から出力される回転信号ＮＥに基づいて算出される。そしてこの回転信号ＮＥも、内燃機関１の運転状態を示す１パラメータとして、後述するＥＣＵ９に取り込まれる。
【００２３】
また、内燃機関１には、その各気筒に対する点火時期や点火順序等を制御するためのディストリビュータ７が設けられ、該ディストリビュータ７には更に、それら各気筒を判別するための基準位置信号ＣＹＬを出力する基準位置センサ６が内蔵されている。この基準位置センサ６では、同機関１の例えば第１気筒のピストン１３が最上部、すなわち圧縮上死点（＃１ＴＤＣ）に達する毎に、上記基準位置信号ＣＹＬを同じくＥＣＵ９に対して出力する。なお、ディストリビュータ７自体は通常、内燃機関１からの回転動力を得て、その（１／２）の回転速度で回転する。
【００２４】
また、内燃機関１の冷却水路には、同水路を循環する冷却水の温度を検出するための水温センサ８が設けられ、排気管１４には、燃焼ガスの酸素濃度に基づき空燃比のリッチ（Ｒ）／リーン（Ｌ）を検出する酸素（Ｏ2 ）センサ１５が設けられている。これら水温センサ８を通じて検出される冷却水の温度、並びに酸素センサを通じて検出される空燃比のリッチ（Ｒ）／リーン（Ｌ）を示す信号も、機関１の運転状態を示すパラメータとしてＥＣＵ９に取り込まれる。
【００２５】
これら水温センサ８や酸素センサ１５をはじめ、上述した吸気管圧力センサ３、回転角センサ５、及び基準位置センサ６による各検出信号が取り込まれるＥＣＵ９は、同図１に併せ示されるように、ＣＰＵ（中央演算処理装置）９ａをはじめ、制御プログラムや演算処理に必要とされる制御定数等を記憶しておくための読み出し専用メモリであるＲＯＭ９ｂ、演算データ等を一時記憶するいわゆるデータメモリとしてのＲＡＭ９ｃ、図示しないバッテリを通じてその記憶内容がバックアップされるバックアップＲＡＭ９ｄ、及び外部装置との間で信号を入出力処理するためのＩ／０ポート９ｅを有して構成されている。
【００２６】
このＥＣＵ９では、大きくは次の（イ）、（ロ）といった処理を実行する。
（イ）上記センサによる各種検出信号に基づき、内燃機関１の燃料系及び点火系の最適な制御量を演算して、燃料噴射手段であるインジェクタ１０、或いは点火手段であるイグナイタ１１等を的確に制御するための制御信号を出力する。
（ロ）同センサによる各種検出信号に基づき、内燃機関１の各気筒において失火が発生したか否かを検出する。
【００２７】
なお、同ＥＣＵ９において、上記（イ）のインジェクタ１０の駆動に際しては、酸素センサ１５の出力に基づく周知の空燃比フィードバック制御を併せ実行する。また、上記（ロ）の失火が発生したか否かの検出において、失火が発生した旨判断される場合には、例えば警告ランプ１２を点灯制御して失火の発生を運転者等に知らせると共に、適宜のフェイルセーフ処理を実行する。
【００２８】
図２は、こうしたＥＣＵ９の主に失火検出装置としての構成を機能的に示したものであり、次に、この図２を併せ参照して、同実施の形態にかかる失火検出装置の構成、並びに機能を更に詳述する。
【００２９】
同図２に示すＥＣＵ９において、角速度変動量演算部９０１は、上記取り込まれる吸気管圧力ＰＭ、回転信号ＮＥ、及び基準位置信号ＣＹＬに基づき、気筒別にクランク軸の角速度（クランク角速度）ωｎ（ｎ＝１〜６）を求めると共に、それら角速度ωｎから気筒間の角速度変動量Δ（Δω）n-1 を算出する部分である。
【００３０】
ここで、同実施の形態にかかる装置のように、６気筒の内燃機関を対象とする場合には、上記クランク角速度ωｎの算出に際し、クランク軸が１２０°ＣＡ回転するのに要した時間Ｔ１２０ｉ（ｉはＥＣＵ９による処理回数を示す）が用いられ、
ωｎ＝（ＫＤＳＯＭＧ−ΔθｎＬ）／Ｔ１２０ｉ    …（１）
といった態様で、同クランク角速度ωｎが算出される。
【００３１】
この（１）式において、係数ＫＤＳＯＭＧは、クランク軸の回転角速度（ｒａｄ：ラジアン）を求めるための変換係数であり、また、値ΔθｎＬは、前記バックアップＲＡＭ９ｄ内の後述する気筒間クランク角偏差（公差）学習値メモリ９１０に格納されている同気筒間クランク角偏差についての学習値である。
【００３２】
角速度変動量演算部９０１ではこのように、気筒間クランク角偏差をその学習値ΔθｎＬにより補正してクランク角速度ωｎを求めるようにしている。
なお因みに、４気筒の内燃機関を対象とする場合には、同クランク角速度ωｎの算出に、クランク軸が１８０°ＣＡ回転するのに要する時間Ｔ１８０ｉが用いられる。
【００３３】
また、同角速度変動量演算部９０１において、上記角速度変動量Δ（Δω）n-1 の算出に際しては、これら求めたクランク角速度ωｎについての現在並びに過去の値に基づき、
Δ（Δω）n-1 ＝（ωｎ−ωn-1 ）−（ωn-α-1 −ωn-α-2 ）…（２）
といった２階差分演算を実行する。
【００３４】
この（２）式において、値ωｎは、今回求めたクランク角速度であり、値ωn-1 は、前回求めたクランク角速度である。そして、これら値の差分（ωｎ−ωn-1 ）は、爆発行程が連続する気筒間での角速度変動量である。
【００３５】
また、同（２）式において、値αは、６気筒の内燃機関を対象とする同実施の形態の装置の場合「０〜５」の値をとることができ、通常は、同（２）式による所定気筒間の角速度変動量Δ（Δω）n-1 の演算結果により、失火によるそれら角速度の変動が現れ易い値が用いられる。
【００３６】
特に、本実施の形態の装置にあっては、７２０°ＣＡだけ離れた気筒間で２階差分演算を実施する手法（７２０°ＣＡ差分法という）と、３６０°ＣＡだけ離れた気筒間で２階差分演算を実施する手法（３６０°ＣＡ差分法という）と、１２０°ＣＡだけ離れた２階差分演算を実施する手法（１２０°ＣＡ差分法という）とを選択的に実施する構成としており、値αとしては「３」，「１」，「０」が採用される。このとき、次の（３）〜（５）式により、７２０°ＣＡ差分法における気筒間の角速度変動量△（△ω）n-1 ７２０、３６０°ＣＡ差分法における気筒間の角速度変動量△（△ω）n-1 ３６０、及び、１２０°ＣＡ差分法における気筒間の角速度変動量△（△ω）n-1 １２０が算出できる。
【００３７】
△（△ω）n-1 ７２０＝（ωｎ−ωn-1 ）−（ωn-6 −ωn-7 ）…（３）
△（△ω）n-1 ３６０＝（ωｎ−ωn-1 ）−（ωn-3 −ωn-4 ）…（４）
△（△ω）n-1 １２０＝（ωｎ−ωn-1 ）−（ωn-1 −ωn-2 ）…（５）
本実施の形態では、上記７２０°ＣＡ差分法が請求項記載の第１の差分演算法に、３６０°ＣＡ差分法が請求項記載の第２の差分演算法に、１２０°ＣＡ差分法が請求項記載の第３の差分演算法にそれぞれ相当する。因みに、４気筒の内燃機関を対象とする場合には、この値αとして「０〜３」の値が用いられることとなる。
【００３８】
なお、上記値ωn-1 以前の過去の値は、例えば前記ＲＡＭ９ｃ或いはバックアップＲＡＭ９ｄからなる角速度記憶部９０５に対して逐次更新登録されていく。６気筒の内燃機関を対象とする同実施の形態の装置の場合、それら過去の値としては、最大でもωn-1 〜ωn-7 の７つの値があれば足りうる。
【００３９】
また、同図２に示すＥＣＵ９において、失火判定部９０２は、上記算出された気筒間の角速度変動量Δ（Δω）n-1 ７２０，Δ（Δω）n-1 ３６０，Δ（Δω）n-1 １２０と、同角速度変動量に対応した所定の失火判定値ＲＥＦ７２０，ＲＥＦ３６０，ＲＥＦ１２０とを比較して、内燃機関１における失火発生の有無を判定する部分である。ここでは、気筒間の角速度変動量Δ（Δω）n-1 ７２０，Δ（Δω）n-1 ３６０，Δ（Δω）n-1 １２０が失火判定値ＲＥＦ７２０，ＲＥＦ３６０，ＲＥＦ１２０を超えるとき、前記ＲＡＭ９ｃ内にある仮失火カウンタ９０４の当該気筒に対応するカウンタＣＭＩＳ１〜ＣＭＩＳ６をインクリメントする。
【００４０】
こうした各気筒に対応したカウンタＣＭＩＳ１〜ＣＭＩＳ６のインクリメントは、点火数カウンタ９０３を通じて計数される点火数が「１００」或いは「５００」等の所定の点火数に達するまで継続して実行される。そして例えば、点火数「１００」のうち、ある気筒に対応したカウンタＣＭＩＳ１〜ＣＭＩＳ６の計数値が「３０」以上であったような場合、失火による触媒コンバータ（図示せず）のダメージ等が懸念されるため、該ＥＣＵ９では、前記警告ランプ１２の点灯制御等を通じてその旨を運転者に警報する。
【００４１】
一方、同ＥＣＵ９において、学習制御部９０６は、上記取り込まれる吸気管圧力ＰＭ、回転信号ＮＥ、及び基準位置信号ＣＹＬに基づいて気筒間のクランク角偏差（公差）を学習制御する部分である。
【００４２】
ここでは、上記６つの気筒のうち、第１気筒（＃１）に対する第２〜第６気筒（＃２〜＃６）のクランク角偏差を学習するものとし、大きくは、次の（１）及び（２）の処理を実行する。
（１）上記クランク軸が１２０°ＣＡ回転するのに要した時間Ｔ１２０ｉに基づいて上記第１気筒（＃１）に対する第２〜第６気筒（＃２〜＃６）のクランク角偏差Δθｎ（ｎ＝２〜６）を気筒別に、且つ内燃機関１の運転条件の別に所定数ずつ積算する。
（２）内燃機関１が正常点火されていることを条件に、上記クランク角偏差Δθｎの気筒別、且つ運転条件別の積算値を平均すると共に、その平均値に更になまし処理（徐変処理）を施して、これを同クランク角偏差についての学習値ΔθｎＬとする。
【００４３】
なお、上記（１）の処理における積算数の計数には積算カウンタ９０７が用いられ、クランク角偏差Δθｎの気筒別、且つ運転条件別の積算値の登録には前記ＲＡＭ９ｃ内の気筒間クランク角偏差（公差）積算値メモリ９０８が用いられる。また、上記学習値ΔθｎＬも、機関１の気筒別、且つ運転条件の別に求められるものであり、それら求められた学習値ΔθｎＬは、前記バックアップＲＡＭ９ｄ内の気筒間クランク角偏差（公差）学習値メモリ９１０に対して各々更新登録される。
【００４４】
その他、ラフロード（ＣＲＧ）カウンタ９１１及び仮失火カウンタ９１２は、同学習制御部９０６の上記（２）の処理において内燃機関１が正常点火されているか否かについてのチェック結果が所定点火数分（例えば「１００」点火分）の計数値としてセットされるカウンタであり、また点火数カウンタ９０９は、こうした点火数を繰り返し計数するためのカウンタである。
【００４５】
次に、ＥＣＵ９により実施される失火検出制御について説明する。
図３〜図５に、同ＥＣＵ９の上記角速度変動量演算部９０１並びに失火判定部９０２を通じて実行される失火判定に際してのメインルーチンを、また図６に、同ＥＣＵ９の上記学習制御部９０６を通じて実行される公差学習制御ルーチンをそれぞれ示す。以下、これら図３〜図６を併せ参照して、同実施の形態にかかる装置の失火判定動作を更に具体的に説明する。
【００４６】
はじめに、図３〜図５に示すメインルーチンについて説明する。
このメインルーチンは、前記回転信号ＮＥに基づき認識される内燃機関１のクランク角が６０°ＣＡとなる毎に、角度割り込み処理として起動される。すなわちいま、クランク軸が６０°ＣＡ回転してこうした割り込み条件が成立すると、電子制御装置９は先ず、ステップＳ１００にて、本ルーチンの前回の割り込み時刻と今回の割り込み時刻との偏差から、同クランク軸が６０°ＣＡ回転するのに要した時間Ｔ６０ｉを算出する。
【００４７】
そして、ＥＣＵ９は、続くステップＳ１０１で今回の割り込みタイミングが上死点後（ＡＴＤＣ）６０°ＣＡであるか否かを基準位置信号ＣＹＬに基づいて判別する。同割り込みタイミングがＡＴＤＣ６０°ＣＡでなければ、ＥＣＵ９はステップＳ１０２に進み、時間Ｔ６０i をＴ６０i-1 として本ルーチンを一旦終了する。なお、これら時間の添字ｉが同ＥＣＵ９による処理回数を示すことは前述した。
【００４８】
また、同割り込みタイミングがＡＴＤＣ６０°ＣＡであれば、ＥＣＵ９はステップＳ１０３以降の失火判定処理を実行する。すなわち、ＥＣＵ９は、ステップＳ１０３で基準位置信号ＣＹＬに基づき、今回の気筒番号ｎを識別し、続くステップＳ１０４で上記求めた時間Ｔ６０i についての過去２回分データを累積して、クランク軸が１２０°ＣＡ回転するのに要した時間Ｔ１２０i を算出する。
【００４９】
更に、ＥＣＵ９は、ステップＳ１０５で時間Ｔ１２０i を用い、これに基づいて、
ωｎ＝ＫＤＳＯＭＧ／Ｔ１２０ｉ    …（１）’
といった態様で、同クランク角速度ωｎを算出する。上記（１）’式は、既述した（１）式に対し、学習値ΔθｎＬ(NE,PM) が存在しないものとして与えられている。なお、７２０°ＣＡ差分法及び３６０°ＣＡ差分法の場合には、学習値ΔθｎＬがキャンセルされるため、常に前記（１）式に代えて（１）'式が用いられることとなる。
【００５０】
その後、ＥＣＵ９は、ステップＳ１０６で先の（１）式を用い公差補正した、すなわち当該学習値ΔθｎＬに基づき補正した当該気筒のクランク角速度ωｎを算出する。なおここでは、前記クランク角偏差（公差）学習値メモリ９１０に対応する学習値、すなわち当該気筒の当該運転条件（回転速度ＮＥ・機関負荷ＰＭ）に対応する学習値ΔθｎＬ(NE,PM) が存在するものとして、公差補正したωｎを算出している。
【００５１】
更に、ＥＣＵ９は、次のステップＳ１０７で先の（３）〜（５）式、並びに上記求めたクランク角速度ωn を用い、（ｎ−１）番気筒について気筒間の角速度変動量Δ（Δω）n-1 を３通り算出する。但し、７２０°ＣＡ差分法により求められる角速度変動量Δ（Δω）n-1 ７２０及び３６０°ＣＡ差分法により求められる角速度変動量Δ（Δω）n-1 ３６０については、前記ステップＳ１０５にて算出されたクランク角速度ωｎが用いられ、１２０°ＣＡ差分法により求められる角速度変動量Δ（Δω）n-1 １２０についは、前記ステップＳ１０６にて算出された、公差補正したクランク角速度ωｎが用いられる。
【００５２】
その後、ＥＣＵ９は、ステップＳ１０８で前記の７２０°ＣＡ差分法により算出された角速度変動量△（△ω）n-1 ７２０と失火判定値ＲＥＦ７２０とを比較し、同角速度変動量△（△ω）n-1 ７２０が失火判定値ＲＥＦ７２０を上回るのであれば、失火が発生しているとみなしステップＳ１０９で前記図２に示す仮失火カウンタ９０４の該当気筒番号に対応するＣＭＩＳカウンタ（ＣＭＩＳ７２０）を「１」インクリメントする。また、ステップＳ１０８が否定判別されれば（△（△ω）n-1 ７２０≦ＲＥＦ７２０の場合）、ＥＣＵ９はそのまま図４のステップＳ１１０に進む。
【００５３】
ここで、上記ステップＳ１０８の判別によれば、不定期に発生する失火（間欠失火）を検出することができるものの、例えば同一気筒が連続して失火している場合には、当該気筒での失火発生の旨が検出できない。つまり、７２０°ＣＡ前の爆発行程、すなわち１燃焼サイクル前の自気筒でも失火が発生していると、かかる７２０°ＣＡ差分法では同一気筒同士で差分を算出しているために失火による回転変動が相殺され、角速度変動量△（△ω）n-1 ７２０が失火判定値ＲＥＦ７２０を上回ることがなく失火発生が検出できなくなる。なお、こうした同一気筒の連続失火は後述する処理にて検出される。
【００５４】
その後、ＥＣＵ９は、図４のステップＳ１１０で前記角速度変動量△（△ω）n-1 ７２０と失火判定値ＲＥＦ７２０とを用い、連続失火が発生している可能性があるか否かを判別する。すなわち、既述したように角速度変動量△（△ω）n-1 ７２０は連続失火の発生時には変動せず、間欠失火時のみ変動する。そのため、角速度変動量△（△ω）n ７２０に基づいて、失火発生が検出されていない状態が数サイクル連続した場合、連続失火発生の可能性有りとしてステップＳ１１０が肯定判別されることとなる。
【００５５】
連続失火の可能性がないと判別された場合、既に前記ステップＳ１０８，Ｓ１０９で間欠失火発生の旨が検出されているため、ＥＣＵ９は、以降の失火検出処理（ステップＳ１１１〜１１６）をバイパスし、そのまま図５のステップＳ１１７に進む。また、連続失火の可能性有りと判別された場合、ＥＣＵ９はステップＳ１１１に進む。
【００５６】
ＥＣＵ９は、ステップＳ１１１で前記の３６０°ＣＡ差分法により算出された角速度変動量△（△ω）n-1 ３６０と失火判定値ＲＥＦ３６０とを比較し、同角速度変動量△（△ω）n-1 ３６０が失火判定値ＲＥＦ３６０を上回るのであれば、失火が発生しているとみなしステップＳ１１２で前記仮失火カウンタ９０４の該当気筒番号に対応するＣＭＩＳカウンタ（ＣＭＩＳ３６０）を「１」インクリメントする。そして、カウンタのインクリメント後、ＥＣＵ９は図５のステップＳ１１７に進む。
【００５７】
この場合、３６０°ＣＡ差分法により算出された角速度変動量△（△ω）n-1 ３６０は、３６０°ＣＡ離れた気筒との差分値であるので、対向気筒（例えば、＃１気筒と＃４気筒の組み合わせ、＃２気筒と＃５気筒の組み合わせ、＃３気筒と＃６気筒の組み合わせ）の連続失火を検出することはできないが、それ以外の組合せの連続失火は全て検出できる。
【００５８】
また、前記ステップＳ１１１が否定判別されれば（△（△ω）n-1 ３６０≦ＲＥＦ３６０の場合）、ＥＣＵ９はステップＳ１１３進む。そして、ＥＣＵ９は、前記クランク角偏差（公差）学習値メモリ９１０に対応する学習値、すなわち当該気筒の当該運転条件（回転速度ＮＥ・機関負荷ＰＭ）に対応する学習値ΔθｎＬ(NE,PM) が存在することを条件に（ステップＳ１１３がＹＥＳ）、次のステップＳ１１４にて、前記の１２０°ＣＡ差分法により算出された角速度変動量△（△ω）n-1 １２０と失火判定値ＲＥＦ１２０とを比較する。つまり、１２０°ＣＡ差分法による角速度変動量△（△ω）n-1 １２０は、先の（１）式に基づき公差補正した、すなわち当該学習値ΔθｎＬに基づき補正した当該気筒のクランク角速度ωｎを用いて算出されるものであるので、学習値ΔθｎＬ(NE,PM) が存在しなければ、ステップＳ１１４による失火検出は実施されないこととなる。
【００５９】
この場合、同角速度変動量△（△ω）n-1 １２０が失火判定値ＲＥＦ１２０を上回るのであれば、失火発生の可能性があるとみなされる。つまり、１２０°ＣＡ差分法により算出された角速度変動量△（△ω）n-1 １２０は、１２０°ＣＡ離れた気筒との差分値であるので、隣接した気筒が連続失火している場合は失火検出ができなくなるが、対向気筒が連続失火している場合にはその旨が検出できる。
【００６０】
そして、こうしてステップＳ１１４が肯定判別されると、ＥＣＵ９はステップＳ１１５に進み、対向気筒が連続失火しているのか否かを判別する。同ステップＳ１１５が肯定判別されれば、ＥＣＵ９は、ステップＳ１１６で前記仮失火カウンタ９０４の該当気筒番号に対応するＣＭＩＳカウンタ（ＣＭＩＳ１２０）を「１」インクリメントする。要するに、対向気筒の連続失火以外は既に前記ステップＳ１１１で検出されているため、ステップＳ１１４では失火発生の気筒組合わせが対向気筒の場合のみが検出される。カウンタのインクリメント後、ＥＣＵ９は図５のステップＳ１１７に進む。
【００６１】
次に、ＥＣＵ９は、図５のステップＳ１１７で前記点火数カウンタ９０３を通じて計数される点火数が所定点火数（例えば、５００）に達したか否かを判別する。この場合、点火数が所定点火数に達していれば、ＥＣＵ９はステップＳ１１８〜Ｓ１２３の処理を実施した後、ステップＳ１２４に進み、点火数が所定点火数に達していなければそのままステップＳ１２４に進む。
【００６２】
ステップＳ１１７が肯定判別された場合、ＥＣＵ９は、ステップＳ１１８で次の（６）式を用い、前記ステップＳ１０９，Ｓ１１２，Ｓ１１６で計数したカウント値ＣＭＩＳ７２０，ＣＭＩＳ３６０，ＣＭＩＳ１２０を気筒毎に加算してその時の該当気筒に対して仮失火カウンタ９０４のＣＭＩＳｎを積算する（但し、ｎ＝１〜６）。
【００６３】
ＣＭＩＳｎ＝ＣＭＩＳ７２０ｎ＋ＣＭＩＳ３６０ｎ＋ＣＭＩＳ１２０ｎ…（６）
なおこのとき、失火数が数個程度であるデータについては、検出誤差である可能性があるため、除外してもよい。
【００６４】
更に、ＥＣＵ９は、続くステップＳ１１９で前記の如く求めた仮失火カウンタ９０４内のＣＭＩＳｎ（ｎ＝１〜６）を全て加算し、全気筒分の失火数を表すカウントタＣＭＩＳのカウント値を算出する（ＣＭＩＳ＝ΣＣＭＩＳｎ）。
【００６５】
その後、ＥＣＵ９は、ステップＳ１２０でカウンタＣＭＩＳと所定の判定値ＫＣ（例えば、１００）とを比較し、ＣＭＩＳ＞ＫＣであれば、ステップＳ１２１で失火フラグＸＭＦに「１」をセットする。また、ＣＭＩＳ≦ＫＣであれば、ＥＣＵ９は、ステップＳ１２２で失火フラグＸＭＦを「０」にクリアする。この場合、失火フラグＸＭＦに「１」がセットされると、エミッション悪化や触媒の損傷等の不具合が発生しうるとして、前記警告ランプ１２の点灯制御等が実施される。
【００６６】
失火フラグＸＭＦの操作後、ＥＣＵ９は、ステップＳ１２３でカウンタＣＭＩＳをはじめ、その他ＣＭＩＳ７２０、ＣＭＩＳ３６０、ＣＭＩＳ１２０等、全てのカウンタをクリアする。そして最後に、ＥＣＵ９は、ステップＳ１２４で前記角速度記憶部９０５に既に格納されているクランク角速度データに対し、ωn-7 →廃棄、ωn-6 →ωn-7 、ωn-5 →ωn-6 、ωn-4 →ωn-5 、ωn-3 →ωn-4 、ωn-2 →ωn-3 、ωn-1 →ωn-2 、ωｎ→ωn-1 といったかたちで更新処理を実施し、その後本ルーチンを終了する。
【００６７】
なお、上記メインルーチンは、請求項記載の失火検出手段を構成するものであるが、特に、ステップＳ１０５，Ｓ１０６の処理が請求項記載の回転速度算出手段に相当し、ステップＳ１０７の処理が請求項記載の変動量差分算出手段に相当する。また、ステップＳ１０８，Ｓ１１１，Ｓ１１４の処理が請求項記載の比較判定手段に、ステップＳ１０９，Ｓ１１２，Ｓ１１６の処理が請求項記載の失火数計数手段に、ステップＳ１１８〜Ｓ１２２の処理が請求項記載の最終失火判定処理に、それぞれ相当する。
【００６８】
次に、請求項記載の学習手段を実現するための公差学習制御ルーチンについて、図６のフローチャートを用いて説明する。
この公差学習制御ルーチンも、上記メインルーチンと同様、回転信号ＮＥに基づき認識される内燃機関１のクランク角が６０°ＣＡとなる毎に、角度割り込み処理として起動される。
【００６９】
そして、この公差学習制御ルーチンにおいても、クランク軸が６０°ＣＡ回転して割り込み条件が成立する毎に、次の（１）〜（４）に示す処理がＥＣＵ９（学習制御部９０６）を通じて実行される。
（１）本ルーチン（公差学習制御ルーチン）の前回の割り込み時刻と今回の割り込み時刻との偏差から、クランク角が６０°ＣＡ回転するのに要した時間Ｔ６０ｉを算出する（ステップＳ２００）。
（２）今回の割り込みタイミングが上死点後（ＡＴＤＣ）６０°ＣＡであるか否かを前記基準信号ＣＹＬに基づき判別する（ステップＳ２０１）。
（３）この割り込みタイミングが上死点後６０°ＣＡではない旨判断される場合、上記求めた時間Ｔ６０ｉをＴ６０ｉ-1とした後、本ルーチンを一旦終了する（ステップＳ２１８）。
（４）同割り込みタイミングが上死点後６０°ＣＡである旨判断される場合には、前記基準信号ＣＹＬに基づき今回の気筒の気筒番号ｎを識別した後（ステップＳ２０２）、上記求めた時間Ｔ６０ｉについての過去２回分のデータを累積して、クランク軸が１２０°ＣＡ回転するのに要した時間Ｔ１２０ｉを算出する（ステップＳ２０３）。
【００７０】
こうして時間Ｔ１２０ｉを算出したＥＣＵ９は次に、ステップＳ２０４にて、上記識別した気筒番号ｎが第１気筒（＃１）であるか否かを判別する。該識別した気筒番号ｎが第１気筒ではない旨判断される場合、ＥＣＵ９は、そのままステップＳ２１０の公差学習実行条件のチェック処理に移行する。
【００７１】
他方、同識別した気筒番号ｎが第１気筒である旨判断される場合には、次のステップＳ２０５にて、該第１気筒に対する第２〜第６気筒（＃２〜＃６）のクランク角偏差（気筒公差）時間ΔＴｎを算出する。
【００７２】
例えば、第１気筒に対する第２気筒のクランク角偏差時間ΔＴ#2は、
0003675049.tif 000002
として算出される。ここで、「（Ｔ１２０ｉ−Ｔ１２０i-6 ）／６」項は、過渡補正項であり、気筒間のクランク角偏差時間の算出にこうした過渡補正項を加味することにより、例えば加速時や減速時等、内燃機関の運転条件による過渡的な回転変動増減の影響は好適に排除されるようになる。
【００７３】
同様にして、第１気筒に対する第３〜第６気筒のクランク角偏差時間ΔＴ#3〜ΔＴ#6は、それぞれ
ΔＴ#3＝｛（Ｔ１２０ｉ＋２×Ｔ１２０i-6 ）／３｝−Ｔ１２０i-4 …（８）
ΔＴ#4＝｛（Ｔ１２０ｉ＋Ｔ１２０i-6 ）／２｝−Ｔ１２０i-3 …（９）
ΔＴ#5＝｛（２×Ｔ１２０ｉ＋Ｔ１２０i-6 ）／３｝−Ｔ１２０i-2 …（１０）
ΔＴ#6＝｛（５×Ｔ１２０ｉ＋Ｔ１２０i-6 ）／６｝−Ｔ１２０i-1 …（１１）
として算出される。
【００７４】
なお、上記第１気筒の前回のクランク軸１２０°ＣＡ回転時間Ｔ１２０i-6 を含め、第２〜第６気筒のクランク軸１２０°ＣＡ回転時間Ｔ１２０i-5 〜Ｔ１２０i-1 は、上記ステップＳ２０３を通じて算出され、後のステップＳ２１７を通じて更新されている値が用いられる。
【００７５】
こうして第１気筒に対する第２〜第６気筒のクランク角偏差時間ΔＴｎを算出したＥＣＵ９は次に、ステップＳ２０６にて、次式に基づき、それらクランク角偏差時間ΔＴｎをクランク角偏差Δθｎ、すなわち回転角度の偏差に変換する。但し、次式（１２）式において、ｎは、＃２〜＃６の５気筒分である。
【００７６】
Δθｎ＝ΔＴｎ×（１２０°ＣＡ／Ｔ１２０ｉ）    …（１２）
この第１気筒に対する第２〜第６気筒のクランク角偏差Δθｎを求めると、同ＥＣＵ９は、次のステップＳ２０７にて内燃機関１が今現在、特定の運転条件下にないか否かをその都度の運転情報に基づき判別する。ここで、特定の運転条件下とは、例えば急加速や急減速等の過渡状態、シフトチェンジ状態、燃料カット時や復帰時、始動時や電気負荷投入時、アイドル状態、パージ制御状態、ＥＧＲ（排気還流制御）実行中、可変吸気実行中等々、クランク軸の大きな回転変動を招く特定の運転状態、或いは軽負荷運転域や高回転域等、いわゆる失火判定不能な運転域を意味する。そして、同機関１がこうした特定の運転条件下にないことを条件に、ＥＣＵ９はステップＳ２０８にて、各気筒別、且つ運転条件の別に上記求めた（変換した）クランク角偏差Δθｎを積算し、続くステップＳ２０９にて、前記積算カウンタ９０７をインクリメントする。
【００７７】
すなわち、内燃機関１が上記急加速や急減速等の過渡状態、シフトチェンジ状態、燃料カット時や復帰時、始動時や電気負荷投入時、等々の運転条件下にあった場合には、上記クランク角偏差Δθｎも、同機関１の正常な燃焼状態において求められた値ではない可能性が高い。そこで、内燃機関１のそのような運転条件下では、上記求めたクランク角偏差Δθｎについての積算処理を行わないようにしている。なお後述するように、同実施の形態にかかる装置にあっては、この積算処理されるいわば正常なクランク角偏差Δθｎのみが、後に実施される公差学習処理に供されることとなる。
【００７８】
また、上記ステップＳ２０８におけるクランク角偏差Δθｎの各気筒別、且つ運転条件別の積算処理は前述のように、前記気筒間クランク角偏差（公差）積算値メモリ９０８に対して行われる。この積算値メモリ９０８のメモリ構造を図７に例示する。
【００７９】
この図７に示されるように、上記気筒間クランク角偏差（公差）積算値メモリ９０８は、第２〜第６気筒（＃２〜＃６）の別に、且つ機関１の運転条件である回転速度（ＮＥ）及び負荷（吸気管圧力ＰＭ）の別に、クランク角偏差Δθｎが積算登録される構造となっている。すなわち、本学習制御ルーチンの繰り返しの実行に基づき、同図７に示されるテーブルの各々には、それぞれ正常なクランク角偏差Δθｎが、「ΣΔθｎ(NE,PM) 」といったかたちで積算登録されるようになる。そして、前記積算カウンタ９０７は、こうして気筒間クランク角偏差（公差）積算値メモリ９０８に登録されたクランク角偏差ΣΔθｎ(NE,PM) の積算数をその計数値として示すこととなる。
【００８０】
こうしてクランク角偏差Δθｎの積算処理を行うと、ＥＣＵ９は次に、ステップＳ２１０にて、公差学習を行うべきか否か、その実行条件をチェックする。この実行条件のチェック処理については、後に図９及び図１０を併せ参照して詳述する。
【００８１】
該公差学習実行条件についてのチェックを終えたＥＣＵ９は、次のステップＳ２１１にて、前記点火数カウンタ９０９の計数値に基づき例えば「１００」点火等、所定の点火数が経過しているか否かを判別する。この結果、所定の点火数に達していない旨判別される場合には、ステップＳ２１６に移行して、前記点火数カウンタ９０９をインクリメントし、ステップＳ２１７にて、前記各気筒のクランク軸１２０°ＣＡ回転時間Ｔ１２０ｉの値を
Ｔ１２０i-6 ＝Ｔ１２０i-5                   …（１３）
Ｔ１２０i-5 ＝Ｔ１２０i-4                   …（１４）
Ｔ１２０i-4 ＝Ｔ１２０i-3                   …（１５）
Ｔ１２０i-3 ＝Ｔ１２０i-2                   …（１６）
Ｔ１２０i-2 ＝Ｔ１２０i-1                   …（１７）
Ｔ１２０i-1 ＝Ｔ１２０ｉ                    …（１８）
といったかたちで更新した後、本ルーチンを一旦抜ける。
【００８２】
他方、所定の点火数を経過している旨判別される場合には、ステップＳ２１２にて、上記公差学習実行条件についてのチェック結果に基づき、同実行条件の成否判定を行う。この公差学習実行条件の成否判定処理については、後に図１３を併せ参照して詳述する。
【００８３】
ＥＣＵ９は次いで、ステップＳ２１３にて、該公差学習実行条件の成否判定が公差学習実行の「可」を示すものであるか「不可」を示すものであるかを判別する。そして、同成否判定が「公差学習実行不可」を示すものであった場合には、上記ステップＳ２１６及びステップＳ２１７の処理を実行して本ルーチンを一旦抜け、「公差学習実行可」を示すものであったときに、ステップＳ２１４にて公差学習を実行する。
【００８４】
この公差学習は、前記バックアップＲＡＭ９ｄ内の気筒間クランク角偏差（公差）学習値メモリ９１０に対して行われる。この学習値メモリ９１０のメモリ構造を図８に例示する。
【００８５】
この図８に示されるように、該学習値メモリ９１０も、上記気筒間クランク角偏差（公差）積算値メモリ９０８（図７）同様、第２〜第６気筒（＃２〜＃６）の別に、且つ機関１の運転条件である回転速度（ＮＥ）並びに負荷（吸気管圧力ＰＭ）の別に、前記クランク角偏差についての学習値ΔθｎＬが更新登録される構造となっている。
【００８６】
そしてここでは、上述した積算処理（ステップＳ２０８）において気筒間クランク角偏差（公差）積算値メモリ９０８に登録されている気筒別、運転条件別のクランク角偏差積算値ΣΔθｎ(NE,PM) を読み込んでその平均値Δθｎ(NE,PM)_AVを
Δθｎ(NE,PM)_AV ＝ΣΔθｎ(NE,PM) ／（積算カウンタ計数値）…（１９）
として求めると共に、該求めたクランク角偏差平均値Δθｎ(NE,PM)_AVと上記学習値メモリ９１０内の当該気筒、並びに当該運転条件に対応する同クランク角偏差についての学習値ΔθｎＬ(NE,PM) とから、なまし（徐変）演算
0003675049.tif 000003
を実行して、新たな学習値ΔθｎＬ(NE,PM) を求める。そして、この新たに求めた学習値ΔθｎＬ(NE,PM) を、上記学習値メモリ９１０の該当する欄に更新登録する。
【００８７】
なお、上記（２０）式において、値「８」は、なまし（徐変）係数であり、該値「８」以外にも処理系に応じた任意の値を採用することができることは云うまでもない。
【００８８】
また、上記学習値メモリ９１０において、その学習値ΔθｎＬ(NE,PM) の更新が行われるのは、上記積算値メモリ９０８にも対応するクランク角偏差積算値ΣΔθｎ(NE,PM) が存在している場合に限られる。すなわち、対応するクランク角偏差積算値ΣΔθｎ(NE,PM) が存在していなかった場合、その平均値Δθｎ(NE,PM)_AVも得られないことから、上記（２０）式のなまし（徐変）演算自体、その実行が不可能となる。
【００８９】
公差学習制御ルーチンにおいて、こうして公差学習を実行したＥＣＵ９は、次のステップＳ２１５にて、前記積算値メモリ９０８、前記積算カウンタ９０７、及び前記点火数カウンタ９０９をそれぞれリセットする。そして次の学習に備えるべく、上述したステップＳ２１６並びにステップＳ２１７の処理を実行した後、本ルーチンを一旦抜ける。
【００９０】
ＥＣＵ９（学習制御部９０６）を通じてこのような機関１の運転条件に応じた学習処理が行われることにより、前記メインルーチン（図３〜図５）において同学習値ΔθｎＬ(NE,PM) に基づき公差補正された値として算出されるクランク角速度ωｎの値も自ずとその信頼性が高められることとなる。そしてひいては、その後の失火判定に際しても、その判定精度は自ずと高いものとなる。
【００９１】
次に、図９及び図１０を参照して、上記公差学習制御ルーチンにおけるステップＳ２１０の処理として実行される公差学習実行条件のチェック処理について説明する。
【００９２】
この図９及び図１０に示す公差学習実行条件のチェックルーチンにおいて、ＥＣＵ９（学習制御部９０６）は、これまでと同様に、先ずは次の（１）〜（４）の処理を実行する。
（１）前回の割り込み時刻と今回の割り込み時刻との偏差から、クランク角が６０°ＣＡ回転するのに要した時間Ｔ６０ｉを算出する（ステップＳ３００）。
（２）今回の割り込みタイミングが上死点後（ＡＴＤＣ）６０°ＣＡであるか否かを前記基準信号ＣＹＬに基づき判別する（ステップＳ３０１）。
（３）この割り込みタイミングが上死点後６０°ＣＡではない旨判別される場合、上記求めた時間Ｔ６０ｉをＴ６０ｉ-1とした後、本ルーチンを一旦終了する（ステップＳ３１９）。
（４）同割り込みタイミングが上死点後６０°ＣＡである旨判別される場合には、前記基準信号ＣＹＬに基づき今回の気筒の気筒番号ｎを識別した後（ステップＳ３０２）、上記求めた時間Ｔ６０ｉについての過去２回分のデータを累積して、クランク軸が１２０°ＣＡ回転するのに要した時間Ｔ１２０ｉを算出する（ステップＳ３０３）。
【００９３】
その後、ＥＣＵ９は、次のステップＳ３０４にて、先の（１）’式に基づき気筒毎のクランク角速度ωｎを算出する。そして、更に次のステップＳ３０５にて、それら算出したクランク角速度ωｎに基づき、３６０°ＣＡ差分法、すなわち失火検出対象となる気筒及びその隣接気筒の回転角速度差分を３６０°ＣＡ離れた気筒の同差分から差し引いた２階差分
Δ（Δω）n-1 ＝（ωｎ− ωn-1 ）−（ωn-3 −ωn-4 ）…（２１）
を用いてクランク角速度変動量Δ（Δω）n-1 を算出する。
【００９４】
こうしてクランク角速度変動量Δ（Δω）n-1 を算出したＥＣＵ９は次に、ステップＳ３０６にて、このクランク角速度変動量Δ（Δω）n-1 と同変動量Δ（Δω）n-1 に対して予め設定されている失火判定値ＲＥＦ２とを比較する。そして、このクランク角速度変動量Δ（Δω）n-1 が失火判定値ＲＥＦ２を超えている旨判別される場合には、ステップＳ３０７にて、前記仮失火カウンタ９１２のうちのＣＭＦカウンタをインクリメントして、ステップＳ３０８の処理に移行する。
【００９５】
他方、ステップＳ３０６において、クランク角速度変動量Δ（Δω）n-1 が失火判定値ＲＥＦ２以下である旨判別される場合には、そのままステップＳ３０８の処理に移行する。
【００９６】
ステップＳ３０８においては、上記クランク角速度変動量Δ（Δω）n-1 と同変動量Δ（Δω）n-1 に対して予め設定されているラフロード（悪路走行）判定値ＲＥＦ３（＜ＲＥＦ２）とを更に比較する。
【００９７】
ラフロードにあっては一般に、過渡的な回転変動が起こりやすい状況にあるため、こうした状況が継続される場合にも、公差学習は実行すべきではない。
そこで、ＥＣＵ９は、同ステップＳ３０８において、クランク角速度変動量Δ（Δω）n-1 が該ラフロード判定値ＲＥＦ３を超えていて且つ上記失火判定値ＲＥＦ２以下である旨判別される場合には、現在ラフロードを走行中であるとして、ステップＳ３０９にて前記ラフロード（ＣＲＧ）カウンタ９１１をインクリメントする。
【００９８】
他方、同ステップＳ３０８において、クランク角速度変動量Δ（Δω）n-1 が上記ラフロード判定値ＲＥＦ３以下である旨判別される場合には、そのままステップＳ３１０の処理に移行する。
【００９９】
この公差学習実行条件チェックルーチンにおいて、図１０のステップＳ３１０以降の処理は、上記３６０°ＣＡ差分法では失火の判定が不可能である３６０°ＣＡ対向気筒連続失火を検出するための失火判定処理である。引き続き、それら処理の詳細について説明する。
【０１００】
上記ラフロード判定を終えたＥＣＵ９は、次のステップＳ３１０にて、前記酸素（Ｏ2 ）センサ１５の出力に基づく空燃比フィードバック（Ｆ／Ｂ）制御の実行中であるか否かを先ず判別する。
【０１０１】
因みに、こうしたフィードバック制御が実行されている状態にあって機関１に失火が発生している場合には、その空燃比フィードバック補正係数ｃｆｂと同補正係数の平均値ｃｆｂＡＶとの和が、上記酸素センサ１５の特性や内燃機関個々の機差などによる初期公差よりも大きい側（空燃比のリーン（Ｌ）側）にずれることが発明者等によって確認されている。
【０１０２】
そこで、ＥＣＵ９は、上記ステップＳ３１０にて空燃比フィードバック制御中である旨判別される場合、ステップＳ３１１にて、空燃比フィードバック補正係数ｃｆｂ及び同補正係数の平均値ｃｆｂＡＶの和と上記初期公差とを比較し、それら和が上記初期公差以上であるときには、失火が発生しているとして、ステップＳ３１２にて前記仮失火カウンタ９１２のうちのＣＯＦカウンタをインクリメントする。
【０１０３】
ところで、上記ステップＳ３１１の判定処理は、空燃比のフィードバック制御が実行中であることが大前提となるが、例えば高負荷燃料増量中など、こうしたフィードバック制御が行われない場合であっても、当該機関１が正常点火されているか否かについての判別が行われることが望ましい。
【０１０４】
因みに、前記酸素（Ｏ2 ）センサ１５にあっては、その活性時、内燃機関１に失火が発生すると、
（Ａ）その出力周期が極端に短くなる、或いは
（Ｂ）その出力がリーン（Ｌ）側にへばりつく、
といった何れかの状態を示すようになることが発明者等によって確認されている。これら（Ａ）及び（Ｂ）の状態についての測定結果をそれぞれ図１１及び図１２に示す。
【０１０５】
例えば、内燃機関１の失火に伴い、酸素センサ１５の出力周期が短くなる場合には、図１１において「ＦＯ2 センサ出力」として示されるように、正常点火時の振幅周期（およそ０．５〜２Ｈｚ）に対して明らかに区別できるような短い周期（同図１１に「ｃｓｇｔ」として示される点火周期程度）となる。
【０１０６】
なお、この図１１は、空燃比フィードバック制御が実行されている状態における上記空燃比フィードバック補正係数ｃｆｂの推移についても併せ示しており、機関１に失火が発生した場合にこの空燃比フィードバック補正係数ｃｆｂと同補正係数の平均値ｃｆｂＡＶとの和が大きな値をとるようになることは、この図１１によっても明らかである。
【０１０７】
一方、内燃機関１の高負荷燃料増量時（ＷＯＴ）には、同機関１の失火に伴い、酸素センサ１５の出力がリーン（Ｌ）側にへばりつくようになる。そしてこの場合には、図１２においてこれも「ＦＯ2 センサ出力」として示されるように、上述した正常点火時の振幅周期よりも十分長い時間に亘って、その出力がリーン（Ｌ）側に固定されるようになる。
【０１０８】
このように、上記酸素センサ１５が活性状態にあれば、その出力（Ｒ／Ｌ）を監視することで、内燃機関１の失火発生の有無を判定することができるようになる。
【０１０９】
図１０に示す同公差学習実行条件チェックルーチンにおいて、ステップＳ３１３以降の処理は、こうした原理に基づいて酸素センサ１５の出力から内燃機関１の失火発生の有無を判定するための処理である。
【０１１０】
すなわち、上記ステップＳ３１０にて空燃比フィードバック制御中ではない旨判別した、或いは空燃比フィードバック制御中であったとしても上記ステップＳ３１１にて空燃比フィードバック補正係数ｃｆｂ及び同補正係数の平均値ｃｆｂＡＶの和が上記初期公差未満である旨判別したＥＣＵ９は、ステップＳ３１３にて、上記酸素（Ｏ2 ）センサ１５が活性状態にあるか否かを判別する。
【０１１１】
そして、同酸素センサ１５が活性状態にあることを条件に、それぞれ、
・その出力周期（振幅周期）が正常点火時の振幅周期Ｆｓよりも短いか否か（ステップＳ３１４）、
・そのリーン（Ｌ）側の出力時間が正常点火時のリーン側出力時間ＴLOW よりも長いか否か（ステップＳ３１６）、
といった比較を行う。
【０１１２】
同出力周期が正常点火時の振幅周期Ｆｓよりも短い旨判別された場合、ＥＣＵ９は、ステップＳ３１５にて前記仮失火カウンタ９１２のうちのＣＦカウンタをインクリメントする。また、同出力のリーン側出力時間が正常点火時のリーン側出力時間ＴLOW よりも長い旨判別される場合、ＥＣＵ９は、ステップＳ３１７にて前記仮失火カウンタ９１２のうちのＣＴカウンタをインクリメントする。
【０１１３】
こうして全ての項目についてのチェックを終えたＥＣＵ９は、最後に、ステップＳ３１８にて、上記ステップＳ３０４において算出したクランク角速度ωｎをはじめとするそれら気筒毎のクランク角速度の値に対し、前述のようにωn-5 →廃棄、ωn-4 →ωn-5 、ωn-3 →ωn-4 、ωn-2 →ωn-3 、ωn-1 →ωn-2 、ωｎ→ωn-1 といった更新処理を施して、同公差学習実行条件チェックルーチンを抜ける。
【０１１４】
なお、こうした公差学習実行条件のチェックルーチンが、前記点火数カウンタ９０９の計数値に基づき、例えば「１００」点火等を経過するまで繰り返し実行されるようになることは公差学習制御ルーチン（図６）の説明において既述した通りである。
【０１１５】
次に、図１３を更に参照して、上記公差学習制御ルーチンにおけるステップＳ２１２の処理として実行される公差学習実行条件の成否判定処理について説明する。
【０１１６】
この図１３に示す公差学習実行条件の成否判定ルーチンは前述のように、公差学習制御ルーチン（図６）のステップＳ２１１において上記所定の点火数を経過している旨判別される場合に起動される。
【０１１７】
こうして公差学習実行条件の成否判定ルーチンが起動されると、ＥＣＵ９（学習制御部９０６）は先ず、ステップＳ４００にて、前記仮失火カウンタ９１２を構成する各カウンタ（ＣＭＦカウンタ、ＣＯＦカウンタ、ＣＦカウンタ、及びＣＴカウンタ）の計数値が何れか１つでも「１」以上となっているか否か、或いは前記ラフロードカウンタ（ＣＲＧカウンタ）９１１の計数値が同計数値に対する所定のラフロード判定値ＫＲＧ以上となっているか否かを判別する。
【０１１８】
その結果、前記仮失火カウンタ９１２の計数値が何れか１つでも「１」以上となっている場合、或いは前記ラフロードカウンタ９１１の計数値が上記判定値ＫＲＧ以上となっている場合には、ステップＳ４０１にて、前記ＲＡＭ９ｃ内の適宜の領域に「公差学習実行不可」を示すフラグをセットする。
【０１１９】
他方、前記仮失火カウンタ９１２の計数値が何れも「０」であり、且つ前記ラフロードカウンタ９１１の計数値が上記判定値ＫＲＧ未満である場合には、ステップＳ４０２にて、同ＲＡＭ９ｃ内の適宜の領域に「公差学習実行可」を示すフラグをセットする。
【０１２０】
こうしてフラグ処理を終えると、同ＥＣＵ９は、前記仮失火カウンタ９１２並びにラフロードカウンタ９１１をリセットして、同公差学習実行条件の成否判定ルーチンを抜ける。
【０１２１】
公差学習制御ルーチン（図６）のステップＳ２１３において、ＥＣＵ９は、こうして処理した「公差学習実行可」を示すフラグ、或いは「公差学習実行不可」を示すフラグに基づいて前述した公差学習実行の「可」若しくは「不可」を判別することとなる。換言すれば、図９及び図１０に示した公差学習実行条件のチェックルーチンにおいて、その全てのチェック項目が正常である場合にのみ、前記態様での公差学習、すなわちその学習値ΔθｎＬ(NE,PM) の更新が行われるようになる。そしてこのため、同学習値ΔθｎＬ(NE,PM) の信頼性も自ずと高く維持されるようになる。
【０１２２】
以上説明したように、同実施の形態にかかる失火検出装置によれば、以下に示す優れた効果が得られる。
（ａ）本実施の形態では、６気筒内燃機関について、７２０°ＣＡ差分法と、３６０°ＣＡ差分法と、１２０°ＣＡ差分法とを実施し、その演算結果である△（△ω）n-1 ７２０，△（△ω）n-1 ３６０，△（△ω）n-1 １２０を、個々に所定の失火判定値ＲＥＦ７２０，ＲＥＦ３６０，ＲＥＦ１２０と比較するようにした。この場合、７２０°ＣＡ差分法による演算結果から間欠失火が、１２０°ＣＡ差分法による演算結果から対向気筒の連続失火の発生が、更に３６０°ＣＡ差分法から上記対向気筒の連続失火以外の連続失火が検出されることとなる。こうして各々の差分法により異なる失火パターンが検出できることから、失火の検出漏れが回避され、内燃機関１に発生するあらゆる失火パターンを精度良く検出することができる。
【０１２３】
（ｂ）また、上記各差分法により得られる複数の失火数データの総和を用いて最終的な失火判定を実施するようにした。つまり、失火数データの総和に応じて運転者に失火異常の旨を警告する警告ランプ１２を点灯制御するようにした。かかる場合、この構成は、失火パターンが間欠失火と連続失火との間で変化したりする場合に好適な効果を得ることができる。
【０１２４】
（ｃ）７２０°ＣＡ差分法、３６０°ＣＡ差分法及び１２０°ＣＡ差分法のうち、いずれか１つの実施により失火発生の旨が検出された場合には、他の差分法を実施しないこととし、更に、その優先順位をそれらの検出精度に合わせて７２０°ＣＡ差分法、３６０°ＣＡ差分法、１２０°ＣＡ差分法の順とした。そのため、より精度の高い失火検出が可能となる。また、複数の差分演算が排他的に実施されることとなるため、余分な演算処理が不要となり、マイクロコンピュータ支援による失火検出装置を構築する上で、演算効率を向上させることができる。
【０１２５】
（ｄ）内燃機関１の気筒別、且つ、運転条件の別にクランク角偏差（気筒間角度公差）についての学習を行うようにしたことで、同機関１のその都度の気筒、並びに運転条件に応じた極めて正確なクランク角速度ωｎを算出することができるようになる。そしてこのため、それらクランク角速度ωｎの推移に基づき算出されるクランク角速度変動量Δ（Δω）n-1 も自ずと正確な値となり、該クランク角速度変動量Δ（Δω）n-1 と失火判定値ＲＥＦとの比較のもとに行われる失火の判定精度も極めて高く維持されるようになる。このとき、１２０°ＣＡ差分法のように、機関回転速度の変化が気筒間でばらつく場合にも、既述した構成のように学習値ΔθｎＬを用いて補正処理を行なうことにより、失火検出精度が高く維持されるようになる。
【０１２６】
（ｅ）また特に、３６０°ＣＡ差分法に基づき判定される失火はもとより、該３６０°ＣＡ差分法では失火の判定が不可能である３６０°ＣＡ対向気筒連続失火等についてもその発生の有無を判定すると共に、それら判定において正常な点火が確認された場合にのみ上記学習を実行するようにしたことから、学習値の信頼性も高く維持されるようになる。
【０１２７】
（ｆ）機関１が例えば急加速や急減速等の過渡状態、シフトチェンジ状態、燃料カット時や復帰時、始動時や電気負荷投入時、アイドル状態、パージ制御状態、ＥＧＲ（排気還流制御）実行中、可変吸気実行中等々、クランク軸の大きな回転変動を招く特定の運転状態にあるとき、或いは軽負荷運転域や高回転域等、いわゆる失火判定不能な運転域にあるときにも学習の実行を禁止するようにしたため、これによっても学習値の信頼性は高く維持される。
【０１２８】
（ｇ）前記（７）式〜（１１）式によるように、気筒間のクランク角偏差時間ΔＴｎの算出に過渡補正項を加味したことで、例えば急加速時や急減速時等、機関１の運転条件による過渡的な回転変動増減の影響も上記学習値から好適に排除されるようになる。
【０１２９】
なお、同実施の形態の装置にあっては、公差学習制御ルーチン（図６）のステップＳ２０４において第１気筒（＃１）を判別した際、この第１気筒と他の第２〜第６気筒（＃２〜＃６）との間の全てのクランク角偏差を求めるようにした。しかし、偶数個の気筒からなる内燃機関であれば、３６０°ＣＡ離れた気筒同士は同じロータ被検出部を通じてそのクランク角度が検出されるため、それら気筒間のクランク角偏差はそもそも小さい。
【０１３０】
したがって、これら３６０°ＣＡ離れた気筒同士を１組とし（６気筒の場合であれば３組となる）、それら組毎に気筒間の（組間の）公差学習を行う構成とすることもできる。このような構成によれば、ＥＣＵ９において必要とされる演算量やＲＯＭ、ＲＡＭ等のメモリ容量を大幅に削減することができるようになる。
【０１３１】
また、公差学習制御ルーチンの同ステップＳ２０４において判別する気筒は、第１気筒（＃１）に限らず、他の任意の気筒であってもよい。要は、特定の気筒（若しくは組）に対する他の気筒（若しくは組）のクランク角偏差が算出される構成でありさえすればよい。
【０１３２】
また、同実施の形態の装置にあっては、同じく公差学習制御ルーチン（図６）のステップＳ２０８及びステップＳ２１４において、それぞれ図７及び図８に示される態様で、機関１の運転条件（回転速度ＮＥ，機関負荷ＰＭ）の別にクランク角偏差Δθｎを積算し、或いは学習するようにした。しかし、内燃機関の上記運転条件に鑑みた場合、図１４（ａ）及び（ｂ）に、第１、第４気筒グループに対するそれぞれ第２、第５気筒グループ、及び第３、第６気筒グループの機関負荷に対する回転変動公差を例示するように、機関負荷が変化しても、それら回転変動公差の傾向はほぼ一定となっている。
【０１３３】
したがって、図７及び図８に例示したメモリ構造においても、その運転条件として機関負荷の欄を削除し、気筒並びに回転速度の別に、上述したクランク角偏差Δθｎの積算、或いは学習が行われる構成とすることもできる。こうした構成によっても、ＥＣＵ９において必要とされる演算量やＲＯＭ、ＲＡＭ等のメモリ容量は大幅に削減されるようになる。
【０１３４】
また、上述したクランク角偏差Δθｎの積算、或いは学習を機関１の運転条件の別に行うにしろ、同機関１の高回転域ではそれら積算、或いは学習が行われる機会は少ない。そしてこのため、学習値が求まらず、失火が発生してもその旨を検出することができないこともある。しかし、図１５に例示したように、各気筒間のクランク角偏差（公差）には、回転速度が増加するとそれら公差もほぼ直線的に増加する傾向がある。
【０１３５】
すなわち、機関１の例えば低回転域における頻度の高い２運転条件でそれら公差が学習されたときには、いわゆる線形補間を行うことによって、同機関１の高回転域での公差を割り出すことが可能となる。こうした原理に基づいて機関１の高回転域での公差を割り出し、該割り出した公差を学習するようにすれば、上記不都合も好適に解消されるようになる。
【０１３６】
また同原理によれば、機関１の回転変動が大きくなることを予想して公差学習実行条件から外した領域についても、上記線形補間によってそれら領域の公差を学習することができるようになる。
【０１３７】
また、内燃機関１において失火が発生した場合、その未燃ガスが排気管１４内で後燃えし、公差学習実行条件のチェックルーチン（図９、図１０）においてその酸素（Ｏ2 ）センサ１５の出力に基づく正確な失火判定（ステップＳ３１４及びステップＳ３１６）が不能となることがある。しかし、上記実施の形態の装置において、
・排気温センサを追加し、同センサを通じて検出される排気温度が所定温度以上となるときには学習の実行を禁止する、或いは、
・高負荷状態での運転時等、後燃えが発生しやすい運転条件では学習の実行を禁止する、
といった構成を併せ具えるようにすれば、こうした不都合も好適に回避されるようになる。
【０１３８】
また、同実施の形態の装置にあっては、上記酸素センサ１５の出力に基づいて空燃比のフィードバック制御を行うシステムを想定した。しかし、機関の燃焼ガスに基づき空燃比をリニアに検出するリニア空燃比センサを用い、該リニア空燃比センサの出力に基づいて同空燃比のフィードバック制御を行うシステムにあっては、このリニア空燃比センサの出力を利用して、公差学習実行条件チェックルーチン（図９、図１０）における前記ステップＳ３１４及びステップＳ３１６の処理に相当する失火判定を行うこともできる。
【０１３９】
因みに、リニア空燃比センサの場合、当該機関に失火が発生すると、
（ａ）その出力がリーン側に変化する、或いは、
（ｂ）その出力が全体的にリーン側へのオフセットを持つようになる、
といった何れかの状態を示すようになる。したがってこの場合、前記学習制御部９０６としては、
・該リニア空燃比センサの出力が所定期間以上リーン側にあるとき前記ＣＦカウンタをインクリメントする、
・該リニア空燃比センサの出力の平均値が所定値以上リーン側にあるとき前記ＣＴカウンタをインクリメントする、
といった構成を採ることとなる。
【０１４０】
なお、こうした失火判定に寄与し得るセンサとしては、ＨＣ濃度センサなどもある。
また、同公差学習実行条件チェックルーチン（図９、図１０）におけるチェック項目の選択、或いは組み合わせ等は任意であり、対象となるシステムの規模に応じて自由にそれら項目の選択、或いは組み合わせを行うことができる。もっとも、前述した項目の全てが選択されるとき、前記学習値の信頼性が最大となことは云うまでもない。
【０１４１】
また、同実施の形態の装置にあって、上記公差学習実行条件のチェックルーチン（図９、図１０）におけるステップＳ３０５のクランク角速度変動量Δ（Δω）n-1 の算出には、前記（２１）式による３６０°ＣＡ差分法を用いることとしていた。
【０１４２】
しかし、ある気筒において失火が発生した場合、クランク角速度ωｎは通常、その後徐々に正常な角速度に戻るようになる。このため、上記３６０°ＣＡ差分法においても次式（２１）’式として示すように、
Δ（Δω）n-1 ＝（ωｎ−ωn-1 ）−（ωn+3 −ωn+4 ）…（２１）’
といったかたちで、その後のクランク角速度「ωn+2 」及び「ωn+3 」を導入することが望ましい。これにより、失火発生の際にはクランク角速度変動量Δ（Δω）n-1 としてより大きな値が得られ、Ｓ／Ｎ（信号／雑音）比の向上が図られるようになる。
【０１４３】
また、同実施の形態の装置にあっては、公差学習実行条件の成否判定処理（図１３）において「公差学習実行可」を示すフラグがセットされることを条件に前記学習値の更新が行われるとしたが、他に例えば、
・更新しようとする値とそれまでの学習値との差が所定以上に大きいときには、その更新しようとする値が複数回連続してほぼ同じ値となるときに限り、その値による学習値の更新を許可する、
といった学習アルゴリズムを採用するようにしてもよい。このようなアルゴリズムによれば、偶然に求まった値によって誤った学習が行われることもなく、それら学習値の信頼性が更に向上されるようになる。
【０１４４】
なお、この公差学習値の算出に際し、同実施の形態の装置では上述のように、所定のサンプル数となるまで運転条件別のクランク角偏差を積算し、その平均値（Δθｎ(NE,PM)_AV）に基づき（正確には（２０）式のなまし演算によって）学習値（ΔθｎＬ(NE,PM) ）を求めたが、この平均値に代えて、所定のサンプル数となるまで同運転条件別のクランク角偏差をなまし処理した値なども適宜採用することができる。
【０１４５】
また、同実施の形態の装置にあっては、メインルーチン（図３〜図５）での失火判定の際、失火判定値ＲＥＦと比較されるクランク角速度変動量Δ（Δω）n-1 を前記学習値に基づき補正することとしたが、失火判定値ＲＥＦの側を前記学習値に基づき補正するようにしても勿論よい。
【０１４６】
また、同学習値としても、前記クランク角偏差（気筒間角度公差）に限らず、それに相当する値、例えばクランク角速度、或いはその変動量、等々を採用することもできる。
【０１４７】
次に、本発明の第２〜第５の実施の形態について図面を用いて説明する。但し、以下の各実施の形態の構成において、上述した第１の実施の形態と同等であるものについてはその説明を簡略化する。そして、以下には第１の実施の形態との相違点を中心に説明する。
【０１４８】
（第２の実施の形態）
本第２の実施の形態は、上記第１の実施の形態におけるメインルーチン（図３〜図５）の一部を変更して実現されるものであって、図１６はその変更部分を抽出して示すフローチャートである。つまり、図１６のフローは、前記図３及び図４のステップＳ１０８〜Ｓ１１６に相当する部分であり、それ以外は図３〜図５のフローに準ずる。
【０１４９】
さて、図１６では、ステップＳ１０７以前の処理にて、７２０°ＣＡ差分法における気筒間の角速度変動量△（△ω）n-1 ７２０、３６０°ＣＡ差分法における気筒間の角速度変動量△（△ω）n-1 ３６０、及び、１２０°ＣＡ差分法における気筒間の角速度変動量△（△ω）n-1 １２０が算出されており、ＥＣＵ９は、ステップＳ１５０，Ｓ１５２，Ｓ１５４で上記△（△ω）n-1 ７２０，△（△ω）n-1 ３６０，△（△ω）n-1 １２０をぞれぞれ失火判定値ＲＥＦ７２０，ＲＥＦ３６０，ＲＥＦ１２０と比較する。この場合、上記比較判定の優先順位を７２０°ＣＡ差分法、３６０°ＣＡ差分法、１２０°ＣＡ差分法の順とし、先のステップで失火発生の旨が判別された場合には、後に来る失火判定が実施されないようになっている。
【０１５０】
そして、ステップＳ１５０，Ｓ１５２，Ｓ１５４のいずれかが肯定判別されると、ＥＣＵ９は、ステップＳ１５１，Ｓ１５３，Ｓ１５
５のどれかで前記図２に示す仮失火カウンタ９０４の気筒別カウンタＣＭＩＳｎ（ここでは、ＣＭＩＳ７２０，ＣＭＩＳ３６０，ＣＭＩＳ１２０として示す）をインクリメントする。そして、同図１６の処理後、ＥＣＵ９は前記図５のステップＳ１１７に進み、それ以降、各カウンタにより計数された失火数に応じた失火判定処理を実施する（既述した処理と同様であるため、ここでは説明を省略する）。
【０１５１】
本第２の実施の形態によれば、上記第１の実施の形態と同様に、各々の差分法により異なる失火パターンが検出できることから、失火の検出漏れが回避され、内燃機関１に発生するあらゆる失火パターンを精度良く検出することができる。また、第１の実施の形態の構成と比較して、前記図４のステップＳ１１０，Ｓ１１３，Ｓ１１５の処理が削除されたかたちとなり、演算処理が簡素化できる。
【０１５２】
（第３の実施の形態）
本第３の実施の形態においても、上記第１の実施の形態におけるメインルーチン（図３〜図５）の一部を変更して実現されるものであって、図１７はその変更部分を抽出して示すフローチャートである。つまり、図１７のフローは、前記図３〜図５のステップＳ１０８〜Ｓ１１９に相当する部分であり、それ以外は図３〜図５のフローに準ずる。
【０１５３】
さて、図１７では、ステップＳ１０７以前の処理にて、７２０°ＣＡ差分法における気筒間の角速度変動量△（△ω）n-1 ７２０、３６０°ＣＡ差分法における気筒間の角速度変動量△（△ω）n-1 ３６０、及び、１２０°ＣＡ差分法における気筒間の角速度変動量△（△ω）n-1 １２０が算出されている。そして、ＥＣＵ９は、ステップＳ１６０以降で３通りの失火判定（仮判定）を順次実行する。
【０１５４】
つまり、ＥＣＵ９は、ステップＳ１６０で上記△（△ω）n-1 ７２０と失火判定値ＲＥＦ７２０とを比較し、△（△ω）n-1 ７２０＞ＲＥＦ７２０であれば、ステップＳ１６１で前記図２の仮失火カウンタ９０４の気筒別カウンタＣＭＩＳｎ（ここではＣＭＩＳ７２０として示す）をインクリメントする。
【０１５５】
また、ＥＣＵ９は、ステップＳ１６２で上記△（△ω）n-1 ３６０と失火判定値ＲＥＦ３６０とを比較し、△（△ω）n-1 ３６０＞ＲＥＦ３６０であれば、ステップＳ１６３で仮失火カウンタ９０４の気筒別カウンタＣＭＩＳｎ（ここではＣＭＩＳ３６０として示す）をインクリメントする。更に、ＥＣＵ９は、ステップＳ１６４で上記△（△ω）n-1 １２０と失火判定値ＲＥＦ１２０とを比較し、△（△ω）n-1 １２０＞ＲＥＦ１２０であれば、ステップＳ１６５で仮失火カウンタ９０４の気筒別カウンタＣＭＩＳｎ（ここではＣＭＩＳ１２０として示す）をインクリメントする。
【０１５６】
その後、点火数が所定数に達していることを条件に（ステップＳ１６６）、ＥＣＵ９は、ステップＳ１６７で上記各カウンタＣＭＩＳ７２０，ＣＭＩＳ３６０，ＣＭＩＳ１２０の最大値を最終失火数に相当するカウンタＣＭＩＳの計数値とする（ＣＭＩＳ＝ｍａｘ（ＣＭＩＳ７２０，ＣＭＩＳ３６０，ＣＭＩＳ１２０））。このとき、最終失火数を表すカウンタＣＭＩＳは、一旦、気筒毎の失火数を算出した後で求めるようにしてもよい。
【０１５７】
そして、同図１７の処理後、ＥＣＵ９は前記図５のステップＳ１２０に進み、それ以降、カウンタＣＭＩＳに応じた失火判定処理を実施する（既述した処理と同様であるため、ここでは説明を省略する）。
【０１５８】
本第３の実施の形態でもやはり、上記第１の実施の形態と同様に、各々の差分法により異なる失火パターンが検出できることから、失火の検出漏れが回避され、内燃機関１に発生するあらゆる失火パターンを精度良く検出することができる。また、特に本実施の形態では、各差分法について、いずれの差分法をも同時に実施するようにしたため、失火の検出漏れがより一層確実に回避できるという効果が得られる。
【０１５９】
更に、本実施の形態では、所定点火数が経過するまでの期間内において複数実施された差分演算法による失火数の最大値を最終的な失火検出数とし、この失火検出数に基づいて失火判定を実施するようにしたため、失火パターンが同一パターンで継続する場合に好適に失火検出が実施できる。
【０１６０】
（第４の実施の形態）
ところで、上記各実施の形態では触れなかったが、内燃機関の特性として、機関本体の振動等により、ある特定の回転速度においてクランク角偏差が著しく不均一となることがある。その一例として、機関本体の振動により、クランク角度を検出するための前述した電磁ピックアップの取り付け腕（ステー）が共振し、同ピックアップとロータ被検出部との位置関係が変化することなどが挙げられる。
【０１６１】
このような場合、電磁ピックアップによるロータ被検出部の検出間隔（検出時間）が変則的になってしまうことから、同検出時間に基づき前記（１２）式を通じて算出されるクランク角偏差（角度公差）Δθにも図１８に示されるような特異点ＳＰ、ＳＰ’が生じることとなる。因みに図１８は、排気量１８００ｃｃ直列４気筒エンジンについて測定した回転速度と同角度公差Δθとの関係についての実測データである。
【０１６２】
そして、このような特異点ＳＰ、ＳＰ’が生じる場合、同クランク角偏差Δθについての前記運転条件（回転速度）別の公差学習を行い、それ以外の回転速度領域ではそれら公差学習値からの直線補間によってその角度公差を求めたとしても当該角度公差特性を正確に角速度変動量に反映させることはできず、ひいては前記メインルーチン（図３〜図５）を通じて実行される失火判定についての誤判定をも招きかねなくなる。
【０１６３】
なお、このような特異点ＳＰ、ＳＰ’の生じ方は、機関の種類や形状、更にはそのおかれる環境等によって区々であり、機関のどのような運転条件で該特異点ＳＰ、ＳＰ’生じるかを特定することは困難である。また、そうかといって、対象となる内燃機関の全運転領域に亘ってそれら角度公差を全て学習するにはメモリ容量等の制限を受けることとなり、やはり現実的ではない。
【０１６４】
そこで以下に、この発明にかかる失火検出装置の他の実施の形態として、クランク角偏差（角度公差）Δθに上記特異点が生じる場合であっても、少ないメモリ容量で、しかも好適に該特異点による影響を回避することのできる装置についてその一例を示す。
【０１６５】
ここでは、先の実施の形態の装置による前記公差学習に併せて、その公差学習値と上記特異点を含む実公差との偏差についての図１９及び図２０に示されるような偏差学習制御を実行し、その偏差学習値に基づき前記メインルーチン（図３〜図５）で用いられる失火判定値ＲＥＦ１２０を補正して上記特異点の存在に起因する誤った失火判定が行われることを回避する。
【０１６６】
因みにこの場合、前記公差学習を実行した各々特定の回転速度（運転条件）の合間の補間領域で上記公差学習値と実公差との偏差を求める必要があるため、同図１９及び図２０に示す偏差学習制御ルーチンでは、公差学習を実行した回転速度区間をそれら学習域に対応した所定の回転数毎の（例えば５００ｒｐｍ毎の）ゾーンに区分けし、それら区分けしたゾーンの単位で上記公差学習値（補間値）と実公差との偏差による影響を抑制するようにしている。なおこの偏差学習制御ルーチンは、前記内燃機関１の一点火毎（６気筒の場合には１２０゜ＣＡ毎、４気筒の場合には１８０゜ＣＡ毎）に、前記ＥＣＵ９を通じて起動、実行される。
【０１６７】
以下、この図１９及び図２０に示す偏差学習制御ルーチンについてその詳細を順次説明する。
すなわちいま、内燃機関１の任意気筒の点火に伴って同偏差学習制御ルーチンが起動されると、ＥＣＵ９は先ず、ステップＳ５００にて、同機関の現在の回転速度（運転条件）に対応したゾーンにおいて前記公差学習が完了しているか否かを判別する。公差学習が完了していなければ、その対応する実公差との比較もできないため、本ルーチンを一旦終了する。
【０１６８】
一方、当該ゾーンにおいて公差学習が完了していれば、ＥＣＵ９は次のステップＳ５０１にて、偏差学習実行中フラグがセットされているか否かを判別する。この偏差学習実行中フラグとは、通常はセット状態におかれ、次に述べる条件によってはリセットされて、不十分な偏差学習の完了を未然に防止するためのフラグである。
【０１６９】
すなわち、上記区分けした各々のゾーンに対応した偏差学習を行う上で、あるゾーンでの公差学習値（補間値）と実公差との偏差測定が部分的に行われただけでは、最も影響の大きい上記特異点が測定されていない可能性がある。そこでここでは、例えば、
・先の図６に例示した公差学習制御ルーチンのステップＳ２１０にかかる「公差学習実行条件のチェック処理（図９、図１０）」やステップＳ２１２にかかる「公差学習実行条件の成否判定処理（図１３）」において学習を実行してはいけない状態であることが認識されている場合（ステップＳ５０２）、或いは、
・回転速度が急激に変動するなどして、特定ゾーンの偏差測定を入念に行うことができない場合（ステップＳ５０３）、
等々、当該ゾーンで偏差学習が完了したとするには不十分な状態では、ステップＳ５０４にて上記偏差学習実行中フラグをリセットして、同ゾーンでの少なくとも今回の偏差学習を完了させないようにしている。
【０１７０】
上記ステップＳ５０１にて偏差学習実行中フラグがセットされている旨判別され、且つこれら学習をキャンセルすべき要因が生じていない旨判別される場合、ＥＣＵ９は、ステップＳ５０５にて、該当する公差学習値ΔθＬと実公差Δθとの偏差Δ（Δθ）を求める。実公差Δθが電磁ピックアップによるロータ被検出部の検出間隔（検出時間）に基づき前記（１２）式を通じて算出されることは上述した通りである。
【０１７１】
こうして偏差Δ（Δθ）を求めたＥＣＵ９は、次のステップＳ５０６にて、同偏差Δ（Δθ）についての最も大きな値を求めるべく、当該ゾーンにおいて保持している偏差Δ（Δθ）の値と今回求めた偏差Δ（Δθ）の値との大きい方の値を前記ＲＡＭ９ｃ（図１）内の所定の領域に保持していく。これは、上記特異点等、最も影響の大きい偏差を学習値とするための配慮である。
【０１７２】
こうしてより大きな偏差Δ（Δθ）を保持した、若しくはステップＳ５０４にて偏差学習実行中フラグをリセットした、若しくはステップＳ５０１にて同偏差学習実行中フラグがセットされていない旨判別したＥＣＵ９は、ステップＳ５０７にて、回転速度がそれまでのゾーンを抜け、新しいゾーンに移行したか否かを判別する。新しいゾーンに移行していない場合には、当該ゾーンでの上記偏差Δ（Δθ）の算出、並びにそのより大きな値による更新と、後述するステップＳ５１６（図２０）以降の処理のみが繰り返し実行される。
【０１７３】
同ステップＳ５０７において、新しいゾーンに移行している旨判別される場合ＥＣＵ９は更に、次のステップＳ５０８にて、その移行がもといたゾーンへの逆戻りではなく、移行前のゾーンを全て通った次のゾーン（１段階だけ高速側のゾーン）への移行であるか否かを判別する。同移行がもといたゾーンへの逆戻りであった場合、移行前のゾーンの全域に亘って上記偏差Δ（Δθ）の測定を行ったことにはならないため、以下に説明する学習処理は行われずに、後述するステップＳ５１４（図２０）以降の処理が行われる。
【０１７４】
一方、ステップＳ５０８において、新しいゾーンへの移行が上記次のゾーンへの移行である旨判別される場合、ＥＣＵ９は、ステップＳ５０９にて上記偏差学習実行中フラグがセットされていることを確認した上で、次のステップＳ５１０〜ステップＳ５１３にかかる偏差学習を実行する。偏差学習実行中フラグがセットされていない場合、すなわち移行前のゾーンにおいて一度、ステップＳ５０２〜ステップＳ５０４を通じて学習の実行が不適当である旨判別されている場合にも移行前のゾーンの全域に亘って上記偏差Δ（Δθ）の測定を行ったことにはならないため、以下に説明する学習処理は行われずに、後述するステップＳ５１４以降の処理が行われる。
【０１７５】
偏差学習の実行に際しては先ず、ステップＳ５１０（以下、図２０）にて、該学習対象となるゾーン、すなわち移行前のゾーンでの偏差学習実行条件の成立が初回であるか否かが判別される。
【０１７６】
この結果、同条件の成立が初回である旨判別される場合には、ステップＳ５１２にて、上記移行前のゾーンに関して上記ＲＡＭ９ｃ内の所定領域に保持されている最大の偏差Δ（Δθ）を同ゾーンの偏差学習値として偏差学習値メモリに登録し、次のステップＳ５１３にて、同ゾーンについての偏差学習が完了したことを示す偏差学習完了フラグをセットする。この偏差学習値メモリも、先の図８に例示した公差学習値メモリ９１０と同様、前記バックアップＲＡＭ９ｄ（図１）内の所定領域に予め用意されていて、上述した各ゾーン（回転速度範囲）の別にそれら偏差学習値Δ（Δθ）が登録される構造となっている。
【０１７７】
他方、ステップＳ５１０において、上記移行前のゾーンでの偏差学習実行条件の成立が初回ではなく、２回目以降である旨判別される場合には、ステップＳ５１１にて、上記偏差学習値メモリに登録されている同ゾーンについての偏差学習値Δ（Δθ）を同ゾーンに関して上記ＲＡＭ９ｃ内の所定領域に保持されている最大の偏差Δ（Δθ）によって更新する。なお、この更新に際しては、前述したなまし（徐変）処理を併用するようにしてもよい。
【０１７８】
こうして偏差学習の実行を終えるとＥＣＵ９は次に、該移行した新しいゾーンについての偏差学習を行うため、ステップＳ５１４にて、上記ＲＡＭ９ｃ内の所定領域に保持されている偏差Δ（Δθ）の値を「０」にクリアすると共に、ステップＳ５１５にて、上記偏差学習実行中フラグを標準（デフォルト）の状態であるセット状態とする。
【０１７９】
その後、ＥＣＵ９は、ステップＳ５１６にてその対象となっているゾーン（移行前のゾーン）に関する上記偏差学習完了フラグがセットされていることを確認した上で、次のステップＳ５１７〜ステップＳ５１８にかかる失火判定値補正処理を実行する。同ゾーンに関する偏差学習完了フラグがセットされていない場合には、このステップＳ５１７〜ステップＳ５１８にかかる失火判定値補正処理を行わずに、本ルーチンを一旦終了する。
【０１８０】
失火判定値補正処理の実行に際しては先ず、ステップＳ５１７にて、当該ゾーンの偏差学習値Δ（Δθ）から前記失火判定値ＲＥＦ１２０に加えるべきオフセット量ＲＥＦｏｆｓを算出する。このオフセット量ＲＥＦｏｆｓの算出は、
ＲＥＦｏｆｓ＝Ｋｏｆｓ×Δ（Δθ）×回転速度    …（２２）
といったように、偏差学習値Δ（Δθ）の角度（ｒａｄ）情報を角速度（ｒａｄ／ｓｅｃ）の変動量に換算するかたちで行われる。ここで係数Ｋｏｆｓは、偏差学習値Δ（Δθ）をこうした失火判定値ＲＥＦ１２０と同じ次元の値に換算するための換算係数である。
【０１８１】
こうしてオフセット量ＲＥＦｏｆｓを算出したＥＣＵ９は最後に、ステップＳ５１８にて同算出したオフセット量ＲＥＦｏｆｓを前記失火判定値ＲＥＦ（ＲＥＦ１２０）に加えて、本ルーチンを終了する。
【０１８２】
このような偏差学習制御が内燃機関１の一点火毎に行われることにより、上記各ゾーン毎に測定された公差学習値補間値と実公差との偏差Δ（Δθ）の最大値（偏差学習値）に応じた角速度変動量が別途求められると共に、この求められた角速度変動量がオフセット量ＲＥＦｏｆｓとして、その都度、前記失火判定値ＲＥＦ１２０に加えられるようになる。
【０１８３】
したがって、たとえクランク角偏差（実公差）Δθに上述した特異点が生じる場合であっても、すなわちメインルーチン（図３〜図５）において失火判定値ＲＥＦ１２０と比較されるクランク角速度変動量Δ（Δω）n-1 に該特異点に基づく増加が生じる場合であっても、その角速度変動量増加分に応じたオフセット量ＲＥＦｏｆｓが失火判定値ＲＥＦ１２０に加わることで、同特異点に起因する誤った失火判定が行われることも好適に回避されるようになる。
【０１８４】
しかも、同偏差学習制御ルーチンによれば、上記ゾーンを単位として偏差学習を行うようにしたことで、その必要とされるメモリ容量の増加を最小限に抑えることができるようにもなる。
【０１８５】
なお、同実施の形態の装置にあっては、失火判定値ＲＥＦ１２０に上記オフセット量ＲＥＦｏｆｓを加えて上記特異点に対処することとしたが、同メインルーチンにおいて比較対象となるクランク角速度変動量Δ（Δω）n-1 から上記オフセット量ＲＥＦｏｆｓを引いてその対処とする構成であっても勿論よい。
【０１８６】
また、上記偏差学習値としても、クランク角偏差（気筒間角度公差）との偏差量に限らず、それに相当する値、すなわち公差学習値に応じて、例えばクランク角速度との偏差量、或いはその変動量、等々を採用することができる。
【０１８７】
（第５の実施の形態）
また、以上各実施の形態では何れも、学習の実行条件を適正に判別するための要素として上記空燃比センサ（酸素センサ、リニア空燃比センサ）の出力や空燃比フィードバック制御にかかる空燃比補正係数を参照するようにした。しかし、図１０に例示したそれら判別内容からも明らかなように、こうした空燃比センサの出力や空燃比フィードバック制御にかかる空燃比補正係数から直接、当該機関の失火発生の有無を検出する構成とすることもできる。
【０１８８】
すなわち、同図１０に例示した正常点火を判定するルーチンのみを同実施の形態にかかる装置のクランク角速度変動量を用いた失火検出に代えて用いる構成とすることもできる。そしてこのときであれ、同図１０におけるチェック項目の選択、或いは組み合わせ等は任意であり、対象となるシステムの規模に応じて自由にそれら項目の選択、或いは組み合わせを行うことができる。
【０１８９】
また更には、それら自由に選択、若しくは組み合わせた失火検出方法を、上記実施の形態にかかる装置の失火検出方法以外の方法と組み合わせて、それら方法による失火検出精度の更なる向上を図るようにすることもできる。
【０１９０】
また、図１０に例示したチェックルーチンでは、３６０°ＣＡ対向気筒の連続失火を検出する３つの方法が示されているが、この中のステップＳ３１１の処埋を図２１のステップＳ３１１’の処理として示すように変更してもよい。
【０１９１】
すなわち、図１０のチェックルーチンでは空燃比補正係数ｃｆｂとその平均値との和を初期公差と比較して失火検出していたが、他に図２１に示すように、空燃比補正係数と同補正係数の学習値との和を初期公差と比較して失火検出するようにしてもよい。
【０１９２】
また更に、図１０のチェックルーチンでは、そのステップＳ３１４の処理において、Ｏ2 センサ振幅周期が予め設定されている正常点火時の振幅周期Ｆｓよりも短いとき失火が発生している旨判別しているが、図２１のチェックルーチンにおけるステップＳ３１４’の処理として示すように、下限の判定値（Ｆｓ）だけでなく、所定範囲を設定して、この範囲外のときには失火が発生している旨判別するようにしてもよい。このように所定範囲を設定することにより、図１１に示すような失火だけでなく、図１２に示すような失火も検出することができるようになる。
【０１９３】
なお、本発明は、上記各実施の形態の他にも次の形態にて実現可能である。
（１）上記実施の形態では、６気筒内燃機関について７２０°ＣＡ差分法、３６０°ＣＡ差分法及び１２０°ＣＡ差分法を適用した具体例を開示したが、これに限らず他の形態にて具体化してもよい。例えば、同じく６気筒内燃機関について、２４０°ＣＡ差分法や４８０°ＣＡ差分法等を複数個組み合わせて適用してもよい。また、奇数個の気筒を有する内燃機関（例えば５気筒内燃機関）については、一例として７２０°ＣＡ差分法と１４４°ＣＡ差分法（或いは、２８８°ＣＡ差分法等）を用いて失火検出を実施するようにすればよい。要は、各気筒の１燃焼サイクルに要するクランク角（７２０°ＣＡ）を気筒数で除したクランク角を最小単位とし、その整数倍のクランク角度だけ離れた複数の組み合わせの気筒について、気筒別回転速度変動量の差分を算出して前記複数の組み合わせの気筒別回転速度変動量の差分演算結果を個々に所定の失火判定値と比較する構成であれば、任意に実現できる。
【０１９４】
さらに、上記実施の形態において第１の差分演算法としての７２０°ＣＡ差分法に代えて、７２０°ＣＡの整数倍のクランク角だけ離れた気筒の気筒別回転速度変動量の差分を検出する、例えば１４４０°ＣＡ差分法を適用したり、第２の差分演算法としての３６０°ＣＡ差分法に代えて、３６０°ＣＡの奇数倍のクランク角だけ離れた気筒の気筒別回転速度変動量の差分を検出する、例えば１０８０°ＣＡ差分法を適用したりすることもできる。以上各々の場合についても、上記各実施の形態で既述した通り、内燃機関に発生するあらゆる失火パターンを精度良く検出するという本発明の目的が達せられる。
【０１９５】
（２）最終的な失火数の総和を求める際において、第１の実施の形態では図５のステップＳ１１８でカウンタＣＭＩＳ７２０、ＣＭＩＳ３６０及びＣＭＩＳ１２０を加算したが、これに代えて上記カウンタの最大値ｍａｘを最終的な失火数として求めるようにしてもよい。つまり、最終の失火数を求める際には、一義的に固定手段を用いるのではなく、その方法を任意に変更してもよい。
【０１９６】
（３）上記実施の形態において、３６０°ＣＡ差分法、１２０°ＣＡ差分法等、連続失火のみを検出対象とする場合には、各気筒毎に平滑化（なまし処理）をしてばらつきを抑え、検出精度を向上させるようにしてもよい。この場合、３６０°ＣＡ差分法により算出される気筒間の角速度変動量△（△ω）n-1 ３６０、及び１２０°ＣＡ差分法により算出される気筒間の角速度変動量△（△ω）n-1 １２０が次の（２３），（２４）式により平滑化され、それにより、変動量なまし値ｄωn-1 ３６０、ｄωn-1 １２０が算出される。
【０１９７】
0003675049.tif 000004
ここで、ｄωｎ３６０は、ｎ番気筒の前回のなまし値である。また、定数ｋは、コンピュータの処理上、２のべき乗とするのが望ましく、例えば「８」とする。以上のなまし処理により、正常気筒と連続失火気筒との角速度変動量を分離することができ、失火検出が容易となる。なおこの場合には、間欠失火の検出はできなくなるため、連続失火判定で現在連続失火状態の判定がなされていない間は連続失火検出方法の判定を禁止してもよい。
【０１９８】
（４）連続失火時において、気筒間の角速度変動量△（△ω）の出力を各気筒毎になまし処理する場合、それ同時に判定レベルにもなまし処理をかけ、運転条件急変時のなましによる更新遅れの発生による誤検出の発生を防止するようにしてもよい。また、△（△ω）出力や判定レベルにかけるなましは機関の回転域により可変としてもよい。
【０１９９】
（５）連続失火の検出状態である場合、失火発生と判定される気筒数が所定の気筒数範囲内であれば検出し、それ以外の場合には失火発生をキャンセルする。具体的には、気筒別に失火判定を行い、６気筒中、３気筒以上が失火発生とされれば最終的に失火発生の旨を判断し、警告ランプを点灯させる。
【０２００】
（６）また、以上の各実施の形態では、回転角速度変動量としてクランク角偏差Δθｎを運転条件の別に学習しているが、これに限られることはなく、これに相当する値として、例えばクランク角偏差Δθｎを求めるために用いるクランク角偏差時間ΔＴｎを学習するようにしてもよい。
【０２０１】
（７）以上の実施の形態では、４サイクル式内燃機関を対象として失火検出装置を具現化したが、２サイクル式内燃機関にも本発明を適用することができる。この場合には、１燃焼サイクルに要するクランク角が３６０°ＣＡとして取り扱われる。
【図面の簡単な説明】
【図１】この発明にかかる失火検出装置の一実施の形態を示すブロック図。
【図２】同実施の形態にかかるＥＣＵの機能的構成を示すブロック図。
【図３】同実施の形態の失火判定のメインルーチンを示すフローチャート。
【図４】図３に続き、失火判定のメインルーチンを示すフローチャート。
【図５】図３及び図４に続き、失火判定のメインルーチンを示すフローチャート。
【図６】同実施の形態の公差学習制御ルーチンを示すフローチャート。
【図７】気筒間クランク角偏差（公差）の積算値メモリ構造例を示す略図。
【図８】気筒間クランク角偏差（公差）の学習値メモリ構造例を示す略図。
【図９】公差学習実行条件のチェックルーチンを示すフローチャート。
【図１０】公差学習実行条件のチェックルーチンを示すフローチャート。
【図１１】失火時における酸素センサの出力例を示すタイムチャート。
【図１２】失火時における酸素センサの出力例を示すタイムチャート。
【図１３】公差学習実行条件の成否判定ルーチンを示すフローチャート。
【図１４】負荷−気筒間クランク角偏差（公差）特性を示すグラフ。
【図１５】回転速度−気筒間クランク角偏差（公差）特性を示すグラフ。
【図１６】第２の実施の形態における失火判定のメインルーチンの一部を示すフローチャート。
【図１７】第３の実施の形態における失火判定のメインルーチンの一部を示すフローチャート。
【図１８】クランク角偏差（公差）に生じる特異点の様子を示すグラフ。
【図１９】第４の実施の形態において、特異点対策である偏差学習制御ルーチンを示すフローチャート。
【図２０】図１９に続き、特異点対策である偏差学習制御ルーチンを示すフローチャート。
【図２１】第５の実施の形態において、公差学習実行条件の他のチェックルーチンを示すフローチャート。
【符号の説明】
１…内燃機関、５…回転信号出力手段としての回転角センサ、９…回転速度算出手段，失火検出手段（変動量差分算出手段，比較判定手段，失火数計数手段，最終失火判定手段），学習手段を構成するＥＣＵ（電子制御装置）、１２…警告ランプ、９ａ…ＣＰＵ、９ｂ…ＲＯＭ、９ｃ…ＲＡＭ、９ｄ…バックアップＲＡＭ。
【図１】
0003675049.tif 000005
【図２】
0003675049.tif 000006
【図３】
0003675049.tif 000007
【図４】
0003675049.tif 000008
【図５】
0003675049.tif 000009
【図６】
0003675049.tif 000010
【図７】
0003675049.tif 000011
【図８】
0003675049.tif 000012
【図９】
0003675049.tif 000013
【図１０】
0003675049.tif 000014
【図１１】
0003675049.tif 000015
【図１２】
0003675049.tif 000016
【図１３】
0003675049.tif 000017
【図１４】
0003675049.tif 000018
【図１５】
0003675049.tif 000019
【図１６】
0003675049.tif 000020
【図１７】
0003675049.tif 000021
【図１８】
0003675049.tif 000022
【図１９】
0003675049.tif 000023
【図２０】
0003675049.tif 000024
【図２１】
0003675049.tif 000025