(57)【要約】【課題】排気空燃比の検出結果に基づいて失火の有無を診断させる失火診断装置において、燃料供給量の補正に伴って失火の有無が誤診断されることを抑制できるようにする。【解決手段】空燃比センサの出力ＶＡＦの変化量の積算値ＤＶＡＦＳが判定値を超える場合に、失火発生を診断する失火診断装置において、燃料増量補正係数ＫＦＵＬＬの変化量の積算値ＳＵＭＫＦＵＬが閾値を超える場合に失火診断を中止させ、また、空燃比センサの応答診断を行うために燃料噴射量を周期的に補正する場合に失火診断を中止させる。また、前記積算値ＳＵＭＫＦＵＬに基づいて前記積算値ＤＶＡＦＳを減少補正し、更に、前記応答診断のための燃料補正量の変化量の積算値に基づいて前記積算値ＤＶＡＦＳを減少補正し、補正後の積算値ＤＶＡＦＳに基づいて失火診断を行わせる。【選択図】図４
2010150953.tif 000002
【特許請求の範囲】
【請求項１】
燃料供給量を補正する燃料補正手段を備えた内燃機関に適用される失火診断装置であって、
内燃機関の排気空燃比を検出する排気空燃比検出手段と、
前記排気空燃比検出手段の出力に基づいて失火診断に用いる失火パラメータを算出する失火パラメータ算出手段と、
前記失火パラメータに基づいて失火の有無を診断する失火診断手段と、
前記燃料補正手段による燃料供給量の補正状態に応じて、前記失火診断手段による失火の有無の診断を中止させる失火診断中止手段と、
を含むことを特徴とする内燃機関の失火診断装置。
【請求項２】
燃料供給量を補正する燃料補正手段を備えた内燃機関に適用される失火診断装置であって、
内燃機関の排気空燃比を検出する排気空燃比検出手段と、
前記排気空燃比検出手段の出力に基づいて失火診断に用いる失火パラメータを算出する失火パラメータ算出手段と、
前記燃料補正手段による燃料供給量の補正状態に応じて、前記失火パラメータを補正する失火パラメータ補正手段と、
前記失火パラメータ補正手段で補正された失火パラメータに基づいて失火の有無を診断する失火診断手段と、
を含むことを特徴とする内燃機関の失火診断装置。
【請求項３】
前記失火診断手段が、前記失火パラメータと閾値との比較に基づいて失火の有無を診断し、
前記失火パラメータ補正手段が、前記燃料補正手段による燃料供給量の補正状態に応じて、前記失火パラメータを、前記閾値から遠ざける方向に補正することを特徴とする請求項２記載の内燃機関の失火診断装置。
【請求項４】
前記燃料補正手段が、前記内燃機関の排気管に介装される触媒コンバータの温度が許容温度を超えて上昇しないように、前記燃料供給量を増量補正することを特徴とする請求項１〜３のいずれか１つに記載の内燃機関の失火診断装置。
【請求項５】
前記燃料補正手段が、前記内燃機関の出力要求条件で、前記燃料供給量を増量補正することを特徴とする請求項１〜３のいずれか１つに記載の内燃機関の失火診断装置。
【請求項６】
前記燃料補正手段が、排気空燃比の変化に対する前記排気空燃比検出手段の出力変化に基づいて前記排気空燃比検出手段の故障診断を行うために、前記燃料供給量を補正して排気空燃比を変化させることを特徴とする請求項１〜３のいずれか１つに記載の内燃機関の失火診断装置。
【請求項７】
前記失火診断中止手段が、前記燃料補正手段が燃料供給量を繰り返し変化させる場合に、前記失火診断手段による失火の有無の診断を中止させることを特徴とする請求項１記載の内燃機関の失火診断装置。
【請求項８】
前記失火診断中止手段が、前記燃料補正手段により燃料供給量が補正される状態と補正されない状態とが繰り返される場合に、前記失火診断手段による失火の有無の診断を中止させることを特徴とする請求項１記載の内燃機関の失火診断装置。
【請求項９】
前記失火診断中止手段が、前記燃料補正手段による燃料供給量の補正量の変化量を積算し、該積算値と閾値との比較に基づいて、前記失火診断手段による失火の有無の診断を中止させることを特徴とする請求項１記載の内燃機関の失火診断装置。
【請求項１０】
前記失火診断中止手段が、前記燃料補正手段による燃料供給量の補正量の変化幅と閾値との比較に基づいて、前記失火診断手段による失火の有無の診断を中止させることを特徴とする請求項１記載の内燃機関の失火診断装置。
【請求項１１】
前記燃料補正手段が、排気空燃比の変化に対する前記排気空燃比検出手段の出力変化に基づいて前記排気空燃比検出手段の故障診断を行わせるために、前記燃料供給量を補正して排気空燃比を変化させ、
前記失火診断中止手段が、前記燃料補正手段による前記故障診断のための補正状態において、前記失火診断手段による失火の有無の診断を中止させることを特徴とする請求項１記載の内燃機関の失火診断装置。
【請求項１２】
前記失火パラメータ補正手段が、前記燃料補正手段による燃料供給量の補正量の変化量を積算し、該積算値に基づいて前記失火パラメータを補正するための補正値を設定することを特徴とする請求項２又は３記載の内燃機関の失火診断装置。
【請求項１３】
前記失火パラメータ補正手段が、前記燃料補正手段による燃料供給量の補正量の変化幅に基づいて前記失火パラメータを補正するための補正値を設定することを特徴とする請求項２又は３記載の内燃機関の失火診断装置。
【請求項１４】
前記燃料補正手段が、排気空燃比の変化に対する前記排気空燃比検出手段の出力変化に基づいて前記排気空燃比検出手段の故障診断を行わせるために、前記燃料供給量を補正して排気空燃比を変化させ、
前記失火パラメータ補正手段が、前記燃料補正手段による前記故障診断のための燃料供給量の補正量の変化量を積算し、該積算値に基づいて前記失火パラメータを補正するための補正値を設定することを特徴とする請求項２又は３記載の内燃機関の失火診断装置。
【請求項１５】
前記失火診断中止手段が、前記失火パラメータの算出、前記失火パラメータに基づく失火の有無の診断、失火診断の実行条件の成立判断のうちの少なくとも１つを中止することを特徴とする請求項１，４〜１０のいずれか１つに記載の内燃機関の失火診断装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、内燃機関の排気空燃比に基づいて失火の有無を診断する失火診断装置に関する。
【背景技術】
【０００２】
特許文献１には、気筒毎に機関回転速度を検出し、燃焼行程気筒の機関回転速度と、当該気筒の前回燃焼行程時の機関回転速度との差である差回転を演算し、該差回転に基づいて失火診断を行う一方、排気空燃比を検出する空燃比センサの出力に基づいて失火診断を行い、両方の失火診断で共に失火の発生が診断された場合に、失火発生を最終的に診断する失火診断装置が開示されている。
【特許文献１】特開平１０‐２１３０５８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ところで、上記のように、排気空燃比の検出結果に基づいて失火の有無を診断させる失火診断装置において、燃料供給量の補正によって排気空燃比が失火発生時に近似する変化を示すことで、失火の有無が誤診断されることがあるという問題があった。
【０００４】
本発明は上記問題点に鑑みなされたものであり、排気空燃比の検出結果に基づいて失火の有無を診断させる失火診断装置において、燃料供給量の補正に伴って失火の有無が誤診断されることを抑制できるようにすることを目的とする。
【課題を解決するための手段】
【０００５】
そのため、請求項１，４〜１１，１５に記載の発明では、排気空燃比検出手段の出力に基づいて失火診断に用いる失火パラメータを算出し、前記失火パラメータに基づいて失火の有無を診断する失火診断装置において、燃料供給量の補正状態に応じて、前記失火の有無の診断を中止させるようにした。
【０００６】
また、請求項２〜６，１２〜１４に記載の発明では、排気空燃比検出手段の出力に基づいて失火診断に用いる失火パラメータを算出し、前記失火パラメータに基づいて失火の有無を診断する失火診断装置において、内燃機関における燃料供給量の補正状態に応じて前記失火パラメータを補正し、該補正された失火パラメータに基づいて失火の有無を診断させるようにした。
【発明の効果】
【０００７】
請求項１，４〜１１，１５に記載の発明によると、燃料供給量が補正されることで排気空燃比が変化しても失火の有無が誤診断されることを抑制できる。
また、請求項２〜６，１２〜１４に記載の発明によると、失火診断に用いる失火パラメータが燃料供給量の補正に影響されて変化しても、失火の有無が誤診断されることを抑制できる。
【発明を実施するための最良の形態】
【０００８】
以下に本発明の実施の形態を説明する。
図１は、本願発明に係る失火診断装置が適用される車両用内燃機関のシステム図であり、図１に示す内燃機関の出力軸は、図外の変速機を介して車両の駆動輪に連結されている。
【０００９】
図１において、内燃機関１は水平対向型の４気筒内燃機関である。
但し、内燃機関１を水平対向型に限定するものではなく、気筒数を４気筒に限定するものでもない。
【００１０】
前記内燃機関１のシリンダブロック１ａの左右バンクには、シリンダヘッド２がそれぞれ設けられ、各シリンダヘッド２には、シリンダに連通する吸気ポート２ａと排気ポート２ｂとが形成されている。
【００１１】
前記各吸気ポート２ａには、インテークマニホルド３が連通され、このインテークマニホルド３の上流側は集合して、エアチャンバ４を介してスロットルチャンバ５に連通されている。
【００１２】
そして、前記スロットルチャンバ５の上流側に、吸気管６を介してエアクリーナ７が取り付けられ、このエアクリーナ７がエアインテークチャンバ８に連通されている。
また、スロットルチャンバ５には、モータ等のアクチュエータで開閉動作する電制スロットル弁１０が設けられている。
【００１３】
更に、吸気ポート２ａの上流のインテークマニホルド３に、インジェクタ１１が配設されている。
インジェクタ１１は、燃料供給路１２を介して燃料タンク１３に連通されており、燃料タンク１３には、インタンク式の燃料ポンプ１４が設けられている。
【００１４】
そして、燃料ポンプ１４から吐出される燃料が、燃料供給路１２に介装された燃料フィルタ１５を経てインジェクタ１１及びプレッシャレギュレータ１６に圧送され、プレッシャレギュレータ１６から燃料タンク１３にリターンさせる燃料量を調整することで、インジェクタ１１に圧送される燃料の圧力が所定の圧力に調圧される。
【００１５】
一方、シリンダヘッド２の気筒毎に、先端の放電電極を燃焼室に露呈する点火プラグ１７が取り付けられ、この点火プラグ１７に、各気筒毎に配設された点火コイル１８を介してイグナイタ１９が接続されている。
【００１６】
また、シリンダヘッド２の各排気ポート２ｂに連通するエキゾーストマニホルド２０が設けられる。
前記エキゾーストマニホルド２０の集合部には排気管２１が連通され、この排気管２１に触媒コンバータ２２及びマフラ２３が介装されている。
【００１７】
次に、内燃機関１の運転状態を検出するための各種センサについて説明する。
前記エアクリーナ７直下の吸気管６に、内燃機関１の吸入空気流量ＱＡを検出するホットワイヤ或いはホットフィルム等を用いた熱式の吸入空気量センサ２４が介装されている。
【００１８】
更に、スロットルチャンバ５に設けられた電制スロットル弁１０には、スロットル開度ＴＶＯを検出するスロットル開度センサ２５ａと、電制スロットル弁１０の全閉を含む低開度領域でＯＮとなるアイドルスイッチ２５ｂとを含んでなるスロットルセンサ２５が設けられている。
【００１９】
また、内燃機関１のシリンダブロック１ａには、ノッキング発生時の振動を圧電素子などによって感知するノックセンサ２６が取り付けられている。
また、シリンダブロック１ａの左右バンクを連通する冷却水通路２７に、冷却水の温度ＴＷを検出する冷却水温センサ２８が設けられ、更に、上記触媒コンバータ２２の上流には、排気中の酸素濃度に基づいて排気空燃比ＡＦを検出する空燃比センサ２９（排気空燃比検出手段）が配設されている。
【００２０】
また、内燃機関１のクランクシャフト３０に軸着するクランクロータ３１の外周に、クランク角センサ３２が対設され、更に、クランクシャフト３０に対して１／２回転する左右バンクの吸気カムシャフト３３それぞれにカムロータ３４が連設され、各カムロータ３４の外周に、それぞれ気筒判別用のカム角センサ３５Ａ，３５Ｂが対設されている。
【００２１】
前記クランクロータ３１及びカムロータ３４の外周には突起が形成され、前記クランク角センサ３２及びカム角センサ３５Ａ，３５Ｂは、前記突起を検出する毎にパルス信号を発生する。
【００２２】
図２は、前記クランク角センサ３２、及び、左右バンクのカム角センサ３５Ａ，３５Ｂから出力されるパルス信号を示す。
尚、本実施形態の４気筒内燃機関１では、点火が、第１気筒，第３気筒，第２気筒，第４気筒の順で行われるものとする。
【００２３】
前記クランク角センサ３２が、単位クランク角度（本実施形態では１０deg）毎のポジション信号ＰＯＳを出力するように、クランクロータ３１の外周に単位クランク角度毎に突起部が形成されるが、前記ポジション信号ＰＯＳは、各気筒の上死点ＴＤＣ直前で欠落が生じるように予め設定されている。
【００２４】
具体的には、図２に示すように、第１気筒及び第２気筒の上死点ＴＤＣ前では、ＢＴＤＣ５０deg、ＢＴＤＣ６０degの計２箇所で、ポジション信号ＰＯＳが出力されずに欠落を生じるように設定される。
【００２５】
また、第３気筒及び第４気筒の上死点ＴＤＣ前では、ＢＴＤＣ２０deg、ＢＴＤＣ３０deg、ＢＴＤＣ５０deg、ＢＴＤＣ６０degの計４箇所で、ポジション信号ＰＯＳが出力されずに欠落を生じるように設定される。
【００２６】
一方、カム角センサ３５Ａは、図２に示すように、第１気筒及び第３気筒の上死点ＴＤＣ直前（ＢＴＤＣ５０deg〜４０deg付近）で気筒判別信号ＰＨＡＳＥａを発生し、カム角センサ３５Ｂは、図２に示すように、第２気筒及び第４気筒の上死点ＴＤＣ直前（ＢＴＤＣ３０deg〜２０deg付近）で気筒判別信号ＰＨＡＳＥｂを発生する。
【００２７】
上記のように、第１気筒及び第２気筒の上死点ＴＤＣ前では、ポジション信号ＰＯＳが同じパターンで欠落し、欠落パターンでは、第１気筒の上死点ＴＤＣ前であるか第２気筒の上死点ＴＤＣ前であるかを区別することができない。
【００２８】
しかし、第１気筒の上死点ＴＤＣ前であれば、カム角センサ３５Ａが気筒判別信号ＰＨＡＳＥａを出力し、第２気筒の上死点ＴＤＣ前であれば、カム角センサ３５Ｂが気筒判別信号ＰＨＡＳＥｂを出力する。
【００２９】
従って、ポジション信号ＰＯＳが２パルスだけ欠落してから１０deg毎の出力に復帰した場合には、第１気筒又は第２気筒の上死点ＴＤＣ前であると判断でき、更に、前記ポジション信号ＰＯＳの欠落が生じた領域付近で、カム角センサ３５Ａが気筒判別信号ＰＨＡＳＥａを出力した場合には、第１気筒の上死点ＴＤＣ前であると判断でき、また、前記ポジション信号ＰＯＳの欠落が生じた領域付近で、カム角センサ３５Ｂが気筒判別信号ＰＨＡＳＥｂを出力した場合には、第２気筒の上死点ＴＤＣ前であると判断できる。
【００３０】
同様に、ポジション信号ＰＯＳが２パルスだけ欠落してから１パルスだけ出力され、その後再度２パルスだけ欠落した場合には、第３気筒又は第４気筒の上死点ＴＤＣ前であると判断でき、前記ポジション信号ＰＯＳの欠落が２回連続して生じた領域付近で、カム角センサ３５Ａが気筒判別信号ＰＨＡＳＥａを出力した場合には、第３気筒の上死点ＴＤＣ前であると判断でき、また、前記ポジション信号ＰＯＳの欠落が２回連続して生じた領域付近で、カム角センサ３５Ｂが気筒判別信号ＰＨＡＳＥｂを出力した場合には、第４気筒の上死点ＴＤＣ前であると判断できる。
【００３１】
更に、ポジション信号ＰＯＳの欠落位置は、前述のように既知であるから、例えば、ポジション信号ＰＯＳの欠落後に初めて出力されるポジション信号ＰＯＳからのポジション信号ＰＯＳの発生数に基づいて、各気筒の上死点ＴＤＣ、更に、上死点ＴＤＣを基点とするクランク角位置を検出することができる。
【００３２】
本実施形態では、ポジション信号ＰＯＳの欠落を検出することで、上死点ＴＤＣの候補気筒となる２気筒を特定すると共に、上死点ＴＤＣを検出する一方、上死点ＴＤＣからポジション信号ＰＯＳを計数することでＢＴＤＣ１００degの位置を検出する。
【００３３】
そして、ＢＴＤＣ１００deg毎に最近の１８０deg間における気筒判別信号ＰＨＡＳＥａ又は気筒判別信号ＰＨＡＳＥｂの出力から、前記候補として特定した２気筒から次に上死点ＴＤＣとなる気筒を特定する気筒判別を行い、判別結果に基づいて気筒判別値ＣＹＬを切り替えるようになっている。
【００３４】
前記ポジション信号ＰＯＳの欠落は、ポジション信号ＰＯＳの発生周期を計測し、発生周期が長くなった部分を欠落箇所として検出できる。
より具体的には、例えば、最新のポジション信号ＰＯＳ発生周期ＴＰＯＳ（ｎ）と前々回に発生周期ＴＰＯＳ（ｎ−２）との比ＲＰＯＳ（ＲＰＯＳ＝ＴＰＯＳ（ｎ）／ＴＰＯＳ（ｎ−２））を算出し、前記比ＲＰＯＳが閾値以上である場合に、最新の周期計測部分が欠落部分（ポジション信号ＰＯＳが３０deg間隔で出力される部分）であると判断する。
【００３５】
尚、クランク角センサ３２及びカム角センサ３５Ａ，３５Ｂの出力信号のパターンを、図２に示すものに限定するものではなく、気筒判別を行う手段は、公知の種々の手段を適宜採用でき、例えば、気筒判別信号ＰＨＡＳＥの出力数や、気筒判別信号ＰＨＡＳＥのパルス幅などから気筒判別を行わせることができる。
【００３６】
後述する電子制御装置４０は、クランク角センサ３２及びカム角センサ３５Ａ，３５Ｂからの信号を入力し、前述のようにして気筒判別を行うと共に、前記ＢＴＤＣ１００degの周期などから機関回転速度ＮＥを算出する。
【００３７】
前記インジェクタ１１、点火プラグ１７，電制スロットル弁１０等のアクチュエータ類に対する制御信号の演算・出力、即ち、燃料噴射制御、点火時期制御、アイドル回転速度制御等の機関制御は、電子制御装置（ＥＣＵ）４０によって行われる。
【００３８】
前記ＥＣＵ４０は、図３に示すように、ＣＰＵ４１、ＲＯＭ４２、ＲＡＭ４３、バックアップＲＡＭ４４、カウンタ・タイマ群４５、及び、Ｉ／Ｏインターフェイス４６がバスライン４０ａを介して互いに接続されるマイクロコンピュータを中心として構成され、更に、各部に安定化電源を供給する定電圧回路４７、前記Ｉ／Ｏインターフェイス４６に接続される駆動回路４８及びＡ／Ｄ変換器４９等の周辺回路が内蔵されている。
【００３９】
尚、前記カウンタ・タイマ群４５には、フリーランカウンタ、カム角センサ信号（気筒判別信号ＰＨＡＳＥ）の入力計数用カウンタ等の各種カウンタ、燃料噴射用タイマ、点火用タイマ、定期割り込みを発生させるための定期割り込み用タイマ、クランク角センサ信号（ポジション信号ＰＯＳ）の入力間隔計時用タイマ、及び、システム異常監視用のウオッチドッグタイマ等の各種タイマなどが含まれる。
【００４０】
前記定電圧回路４７は、２回路のリレー接点を有する電源リレー５０の第１のリレー接点を介してバッテリ５１に接続され、バッテリ５１に、上記電源リレー５０のリレーコイルがイグニッションスイッチ５２を介して接続されている。
【００４１】
また、前記定電圧回路４７は、直接バッテリ５１に接続されており、イグニッションスイッチ５２がＯＮされて電源リレー５０の接点が閉となると、ＥＣＵ４０内の各部へ電源を供給する一方、前記イグニッションスイッチ５２のＯＮ・ＯＦＦに拘らず、常時、上記バックアップＲＡＭ４４にバックアップ用の電源を供給する。
【００４２】
更に、上記バッテリ５１には、燃料ポンプリレー５３のリレー接点を介して燃料ポンプ１４が接続されている。
尚、前記電源リレー５０の第２のリレー接点には、前記バッテリ５１から各アクチュエータに電源を供給するための電源線が接続されている。
【００４３】
前記Ｉ／Ｏインターフェイス４６の入力ポートには、アイドルスイッチ２５ｂ、ノックセンサ２６、クランク角センサ３２、カム角センサ３５Ａ，３５Ｂ、内燃機関１が搭載されている車両の走行速度（車速）ＶＳＰを検出するための車速センサ３６、及び、内燃機関１の始動状態を検出するためにスタータスイッチ３７が接続されている。
【００４４】
更に、上記Ａ／Ｄ変換器４９を介して、吸入空気量センサ２４、スロットル開度センサ２５ａ、冷却水温センサ２８、及び、空燃比センサ２９が接続されると共に、バッテリ電圧ＶＢが入力されてモニタされる。
【００４５】
一方、前記Ｉ／Ｏインターフェイス４６の出力ポートには、燃料ポンプリレー５３のリレーコイル、電制スロットル弁１０、インジェクタ１１、及び、図示しない車両のインストルメントパネルに配設され各種警報を表示する警報ランプ３８が、前記駆動回路４８を介して接続されると共に、イグナイタ１９が接続されている。
【００４６】
前記ＣＰＵ４１では、ＲＯＭ４２に記憶されている制御プログラムに従って、Ｉ／Ｏインターフェイス４６を介して入力されるセンサ・スイッチ類からの検出信号、及び、バッテリ電圧のデータ等を処理し、ＲＡＭ４３に格納される各種データ、及び、バックアップＲＡＭ４４に格納されている各種学習値データ，ＲＯＭ４２に記憶されている固定データ等に基づき、燃料噴射量、点火時期、電制スロットル弁１０に対する駆動信号等を演算し、燃料噴射制御、点火時期制御、吸入空気量制御等の機関制御を行う。
【００４７】
前記燃料噴射制御（燃料供給量制御）においては、吸入空気量センサ２４で検出される内燃機関１の吸入空気流量ＱＡと、クランク角センサ３２から出力されるポジション信号ＰＯＳに基づいて算出される機関回転速度ＮＥと、インジェクタ１１における単位開弁時間当たりの噴射量などに基づき予め設定されている定数Ｋとから、一定の時間周期毎（例えば１０ms毎）に基本噴射パルス幅ＴＰを演算する。
【００４８】
ＴＰ＝Ｋ＊ＱＡ／ＮＥ
また、前記冷却水温センサ２８で検出される冷却水温度ＴＷに基づき、低水温時（冷機時）に燃料噴射量を増量補正するための水温増量補正係数ＫＴＷを演算し、始動直後の燃焼が不安定な状態で燃料噴射量を増量するための始動後増量補正係数ＫＡＳを演算する。
【００４９】
更に、機関負荷を示す前記基本噴射パルス幅ＴＰと、機関回転速度ＮＥとに基づき判別される高負荷・高回転領域で空燃比をリッチ化させるための空燃比補正係数ＫＭＲを、予め前記基本噴射パルス幅ＴＰと機関回転速度ＮＥとに応じて空燃比補正係数ＫＭＲを記憶したマップから検索して求める。
【００５０】
前記空燃比補正係数ＫＭＲは、高負荷・高回転領域であって出力要求条件であるときに空燃比をリッチ化させることで、機関出力を増大させ、また、触媒コンバータ２２が温度上昇する高負荷・高回転領域で空燃比をリッチ化させることで排気温度の上昇を抑制し、触媒コンバータ２２の温度が耐熱限界（許容温度）を超えることを回避するための補正係数である。
【００５１】
また、内燃機関１の加減速運転時における壁流燃料量の変化による空燃比変化を抑制するための壁流補正量ＫＯＴＨＯＳを、スロットル開度ＴＶＯの変化速度などから演算し、空燃比センサ２９で検出される実際の空燃比を目標空燃比に近づけるように、実際の空燃比と目標空燃比との偏差に基づいて空燃比フィードバック補正係数ＬＡＭＢＤＡを演算する。
【００５２】
また、そのときのバッテリ電圧ＶＢによるインジェクタ１１の無効噴射時間の変化に対応するための電圧補正分ＴＳを演算する。
そして、前記水温増量補正係数ＫＴＷ，始動後増量補正係数ＫＡＳ，空燃比補正係数ＫＭＲなどから、各種補正係数ＣＯ（ＣＯ＝１＋ＫＴＷ＋ＫＡＳ＋ＫＭＲ＋・・・）を演算し、前記各種補正係数ＣＯ，壁流補正量ＫＯＴＨＯＳ，空燃比フィードバック補正係数ＬＡＭＢＤＡ，電圧補正分ＴＳによって、前記基本噴射パルス幅ＴＰを補正し、該補正結果を最終的な燃料噴射パルス幅ＴＩとする。
【００５３】
ＴＩ＝（ＴＰ＋ＫＯＴＨＯＳ）×ＣＯ×ＬＡＭＢＤＡ＋ＴＳ
そして、各気筒の吸気行程に合わせた噴射タイミングにおいて、そのときの燃料噴射パルス幅ＴＩの噴射パルス信号を、対応するインジェクタ１１に出力し、有効噴射パルス幅ＴＥ＝（ＴＰ＋ＫＯＴＨＯＳ）×ＣＯ×ＬＡＭＢＤＡに比例する量の燃料を噴射させる。
【００５４】
尚、前記各種補正係数ＣＯによって燃料噴射量が増量補正される場合には、前記空燃比フィードバック補正はクランプされる。
また、上記の基本噴射パルス幅ＴＰ（基本燃料供給量）を、前記各種補正係数ＣＯで増量補正する前記ＥＣＵ４０機能が、本実施形態における燃料補正手段に相当する。
【００５５】
一方、点火時期制御においては、前記基本噴射パルス幅ＴＰ（機関負荷）と機関回転速度ＮＥとに基づいて点火時期（圧縮上死点から点火時期までの進角量）を算出し、該点火時期及び点火エネルギを得るための通電時間とから、前記点火コイル１８の通電開始時期及び通電遮断時期を決定し、該通電開始時期及び通電遮断時期に対応する点火制御信号で点火コイル１８の通電を制御して、前記点火時期での火花点火を気筒毎に実行させる。
【００５６】
更に、アイドル回転速度制御においては、冷却水温度ＴＷや変速機のレンジ位置などから、目標アイドル回転速度ＴＮＥを演算し、内燃機関１のアイドル運転時において、実際の機関回転速度ＮＥが前記目標アイドル回転速度ＴＮＥに近づくように、前記電制スロットル弁１０の開度をフィードバック制御する。
【００５７】
また、前記ＥＣＵ４０は、内燃機関１における失火の有無を診断する失火診断装置を構成し、機関回転速度ＮＥの変化と空燃比センサ２９の出力値とに基づいて失火診断を行うようになっている。
【００５８】
図４のフローチャートは、前記失火診断の第１実施形態における診断処理の流れを示すものであり、図４のフローチャートに示されるルーチンは所定微小時間毎（例えば１０ms毎）に割り込み実行されるようになっている。
【００５９】
まず、ステップＳ１００では、内燃機関１が回転中であるか否かを、クランク角センサ３２からのポジション信号ＰＯＳの出力、又は、前記ポジション信号ＰＯＳに基づいて算出される機関回転速度ＮＥなどから判断する。
【００６０】
そして、内燃機関１が回転中であれば、ステップＳ２００へ進む。
ステップＳ２００では、失火診断を実行する条件が成立しているか否かを判断する。
前記失火診断の実行条件としては、例えば、機関トルクが、ポジティブトルク＋Ｎ／Ｌ（ノー・ロード）の範囲内であることを、前記基本噴射パルス幅ＴＰや吸気管負圧などから判断し、また、急激なトルク変動が発生する運転中（急加速、急減速、燃料カット状態、点火時期の遅角補正状態）でない（例えば定常状態）ことを判断し、機関トルクが実行条件の範囲内であり、かつ、急激なトルク変動が発生する運転中でない場合に、失火診断の実行条件が成立していると判断する。
【００６１】
尚、ポジティブトルク＋Ｎ／Ｌとは、機関が正トルクを発生している状態であり、換言すれば、駆動輪に機関トルクが加わっている状態である。
但し、失火診断の実行条件は、上記のものに限定されず、診断精度や運転性への影響を考慮して適宜設定することができる。
【００６２】
機関回転中であってかつ失火診断の実行条件が成立していれば、ステップＳ３００へ進み、内燃機関１の停止状態、又は、機関回転中であるが診断実行条件が成立していない場合には、ステップＳ１００に戻ってステップＳ１００及びステップＳ２００の判断を繰り返す。
【００６３】
ステップＳ３００では、気筒別の回転速度ＮＥの変動に基づく失火診断において用いる失火パラメータである差回転ＤＥＬＮＥｎを算出する。
図２に示すように、本実施形態では、上死点前７０deg（ＢＴＤＣ７０deg）から上死点前１０deg（ＢＴＤＣ１０deg）までを、気筒別の回転速度を検出するためのクランク角範囲として定め、ＢＴＤＣ７０degからＢＴＤＣ１０degにまで（クランク角で６０degだけ）回転するのに要した時間ＭＴＸｎを、前記クランク角範囲毎に順次計測する。
【００６４】
前記気筒別の回転速度を検出するためのクランク角範囲は、ノック判定のための信号分析区間と重ならないようにすることが好ましく、本実施形態では、ノック信号の分析区間が上死点後となるため、上死点前に回転速度の検出範囲を設定することで、電子制御装置４０の演算負荷が軽減されるようにしている。
【００６５】
ここで、ＢＴＤＣ７０degからＢＴＤＣ１０degまでのクランク角範囲は、クランク角センサ３２のポジション信号ＰＯＳに基づいて検出するため、クランクロータ３１の外周に形成される突起部の位置ばらつきなどによって、実際には６０degで一定ではなくばらつきを生じる場合があり、係る角度ばらつきによって気筒間での回転速度の差が見かけ上生じ、これによって失火の有無が誤診断されてしまう可能性がある。
【００６６】
そこで、前記角度ばらつきを補正するための学習補正値ＫＭＦＸ１２，ＫＭＦＸ３４を学習し、該学習値ＫＭＦＸ１２，ＫＭＦＸ３４で前記時間ＭＴＸｎの測定結果を補正するようにしてある。
【００６７】
尚、第３気筒の上死点ＴＤＣを含む回転測定区間と、第４気筒の上死点ＴＤＣを含む回転測定区間とは、クランクロータ３１の同じ角度範囲を用いて計測され、角度誤差がある場合には、双方に同じ角度誤差が発生するので、共通の学習補正値ＫＭＦＸ３４で時間ＭＴＸｎの測定結果を補正する。
【００６８】
同様に、第１気筒の上死点ＴＤＣを含む回転測定区間と、第２気筒の上死点ＴＤＣを含む回転測定区間とは、クランクロータ３１の同じ角度範囲を用いて計測され、角度誤差がある場合には、双方に同じ角度誤差が発生するので、共通の学習補正値ＫＭＦＸ１２で時間ＭＴＸｎの測定結果を補正する。
【００６９】
前記学習補正値ＫＭＦＸ１２，ＫＭＦＸ３４は、失火発生が検出されなかった機関１の定常運転状態において、第１気筒又は第２気筒の上死点ＴＤＣを含む回転測定区間での時間ＭＴＸｎと、第３気筒又は第４気筒の上死点ＴＤＣを含む回転測定区間での時間ＭＴＸｎとを比較し、学習補正値ＫＭＦＸ１２，ＫＭＦＸ３４で時間ＭＴＸｎを補正することで、時間ＭＴＸｎが一定乃至許容範囲内で安定するように更新され、該更新結果を記憶するようになっている。
【００７０】
換言すれば、第１気筒又は第２気筒の上死点ＴＤＣを含む回転測定区間での時間ＭＴＸｎを学習補正値ＫＭＦＸ１２で補正した結果と、第３気筒又は第４気筒の上死点ＴＤＣを含む回転測定区間での時間ＭＴＸｎを学習補正値ＫＭＦＸ３４で補正した結果とが一致乃至許容範囲内となるように学習される。
【００７１】
次いで、時間ＭＴＸｎを、前記学習補正値ＫＭＦＸ１２又は学習補正値ＫＭＦＸ３４で補正した後の時間ＭＴＸＡｎから機関回転速度ＭＮＸｎを算出し、この気筒毎に算出される機関回転速度ＭＮＸｎの最新値ＭＮＸｎから前回値ＭＮＸ（ｎ−１）を減算した結果を、前記差回転ＤＥＬＮＥｎとする。
【００７２】
ＤＥＬＮＥｎ＝ＭＮＸｎ−ＭＮＸ（ｎ−１）
更に、前記差回転ＤＥＬＮＥｎの気筒別の平均値ＤＮＡＶＥ１〜ＤＮＡＶＥ４を算出するようになっている。
【００７３】
図５のフローチャートは、前記ステップＳ３００における前記差回転ＤＥＬＮＥｎの算出を詳細に示し、一定時間毎の判断で、ＢＴＤＣ１０deg又はそれ以降の例えば上死点ＴＤＣのクランク角位置であると判断された場合に実行されるものとする。
【００７４】
まず、ステップＳ３０１では、前述のように、ポジション信号ＰＯＳの欠落の検出と、気筒判別信号ＰＨＡＳＥａ，ＰＨＡＳＥｂとに基づく気筒判別の結果から、現在の燃焼行程気筒ｎを特定する。
【００７５】
ステップＳ３０２では、直前のＢＴＤＣ７０degからＢＴＤＣ１０degまでの間の時間ＭＴＸｎから求めた機関回転速度ＮＥを、現在の燃焼行程気筒に対応する機関回転速度ＭＮＸｎとする。
【００７６】
ステップＳ３０３では、ステップＳ３０２で求めた現在の燃焼行程気筒に対応する機関回転数ＭＮＸｎから、前回のルーチン実行時に設定され記憶されている１燃焼行程前の気筒に対応する機関回転速度ＭＮＸ（ｎ−１）を減算し、気筒間における機関回転速度ＮＥの変化、即ち、現在の燃焼行程気筒に対する差回転ＤＥＬＮＥｎを算出する（ＤＥＬＮＥｎ←ＭＮＸｎ−ＭＮＸ（ｎ−１））。
【００７７】
そして、ステップＳ３０４では、前記差回転ＤＥＬＮＥｎを気筒別に積算して、当該気筒の差回転積算値ΣＤＥＬＮＥｎとする（ΣＤＥＬＮＥｎ←ΣＤＥＬＮＥｎ＋ＤＥＬＮＥｎ）。
【００７８】
ステップＳ３０５では、点火回数ＣIGNをカウントアップする（ＣIGN←ＣIGN＋１）。
ここで、本ルーチンは、ＡＴＤＣ２０deg毎、即ち、クランク角で１８０deg毎に実行され、本実施形態における内燃機関１は、クランク角で１８０deg毎に点火される４気筒機関であるから、本ルーチンの実行毎にカウンタＣIGNをカウントアップすることで、点火回数をカウントすることになる。
【００７９】
そして、ステップＳ３０６では、次の燃焼行程気筒に対する差回転ＤＥＬＮＥｎの算出に備え、今回求めた機関回転速度ＭＮＸｎを前回の機関回転速度ＭＮＸ（ｎ−１）として記憶させ（ＭＮＸ（ｎ−１）←ＭＮＸｎ）、本ルーチンを終了させる。
【００８０】
図４のフローチャートに戻って説明を続けると、ステップＳ３００で差回転ＤＥＬＮＥｎを求めると、次のステップＳ４００では、空燃比センサ２９（排気空燃比検出手段）が活性化しているか否かを判断する。
【００８１】
前記空燃比センサ２９が活性化しているか否かは、冷却水温度ＴＷ，機関始動からの経過時間、空燃比センサ２９の出力変化幅（最大出力），センサ素子の内部抵抗などから判断できる。
【００８２】
空燃比センサ２９が活性化しておらず、実際の排気空燃比に対応する出力を発生しない状態では、空燃比センサ２９で検出される排気空燃比に基づく失火診断は行えないので、ステップＳ５００〜ステップＳ１２００を迂回することで、排気空燃比に基づく失火診断をキャンセルして、ステップＳ１３００へ進む。
【００８３】
一方、空燃比センサ２９が活性化していれば、空燃比センサ２９で検出される排気空燃比に基づく失火診断が可能であるので、ステップＳ５００へ進む。
ステップＳ５００では、空燃比センサ２９の出力に基づいて、失火判断に用いる失火パラメータを算出する。
【００８４】
従って、ステップＳ５００の機能が、失火パラメータ算出手段に相当する。
上記ステップＳ５００における空燃比センサ２９の出力に基づく失火パラメータの算出処理は、図６のフローチャートに詳細に示してある。
【００８５】
ステップＳ５０１では、最新の空燃比センサ２９の出力値ＶＡＦｎを読み込み、該出力値ＶＡＦｎを、前回までの出力積算値ΣＶＡＦに加算し、該加算結果を今回の出力積算値ΣＶＡＦとして、出力値ＶＡＦｎを所定時間毎に順次積算する（ΣＶＡＦ←ΣＶＡＦ＋ＶＡＦｎ）。
【００８６】
ステップＳ５０２では、空燃比センサ２９の最新出力値ＶＡＦｎから、前回値（所定時間だけ前の値）ＶＡＦ（ｎ−１）を減算し、この減算結果（変化量）の絶対値を、前回までの変化量積算値ＤＶＡＦＳに加算し、該加算結果を今回の変化量積算値ＤＶＡＦＳとして、変化量の絶対値を順次積算する（ＤＶＡＦＳ←ＤＶＡＦＳ＋｜ＶＡＦｎ−ＶＡＦ（ｎ−１）｜）。
【００８７】
その後、ステップＳ５０３で、空燃比センサ２９の出力値ＶＡＦのサンプリング回数ＣVAFをカウントアップし（ＣVAF←ＣVAF＋１）、続くステップＳ５０４では、次回の本ルーチンの実行時における変化量積算値ＤＶＡＦＳの算出に備え、空燃比センサ２９の最新出力値ＶＡＦｎを、前回値ＶＡＦ（ｎ−１）として記憶させ（ＶＡＦ（ｎ−１）←ＶＡＦｎ）、本ルーチンを終了させる。
【００８８】
図４のフローチャートに戻って説明を続けると、ステップＳ５００で空燃比センサ２９の出力に基づき失火パラメータ（ΣＶＡＦ，ＤＶＡＦＳ）を算出すると、次のステップＳ６００では、前記失火パラメータ（ΣＶＡＦ，ＤＶＡＦＳ）に基づく失火診断をキャンセルするか否かの判断に用いる失火キャンセルパラメータを、前記燃料噴射制御における燃料増量係数に基づいて算出する。
【００８９】
ステップＳ６００における失火キャンセルパラメータの算出処理は、図７のフローチャートに詳細に示してある。
ステップＳ６０１では、最新に演算された燃料増量係数ＫＦＵＬＬｎから、所定時間前に演算された燃料増量係数ＫＦＵＬＬ（ｎ−１）を減算し、この減算結果（変化量）の絶対値を、前回までの増量変化積算値ＳＵＭＫＦＵＬに加算し、該加算結果を今回の増量変化積算値ＳＵＭＫＦＵＬとして、燃料増量係数ＫＦＵＬＬｎの変化量の絶対値を所定時間毎に順次積算する（ＳＵＭＫＦＵＬ←ＳＵＭＫＦＵＬ＋｜ＫＦＵＬＬｎ−ＫＦＵＬＬ（ｎ−１）｜）。
【００９０】
ステップＳ６０２では、次回の本ルーチンの実行時における増量変化積算値ＳＵＭＫＦＵＬの算出に備え、燃料増量係数ＫＦＵＬＬｎを、前回（１回前）の値ＫＦＵＬＬ（ｎ−１）として記憶させ（ＫＦＵＬＬ（ｎ−１）←ＫＦＵＬＬｎ）、本ルーチンを終了させる。
【００９１】
前記燃料増量係数ＫＦＵＬＬｎは、前記燃料噴射パルス幅ＴＩの演算に用いる各種補正係数ＣＯ（ＣＯ＝１＋ＫＴＷ＋ＫＡＳ＋ＫＭＲ＋・・・）、又は、空燃比補正係数ＫＭＲとする。
【００９２】
前記失火キャンセルパラメータは、燃料増量によって排気空燃比が変化し、係る排気空燃比の変化が失火に因るものであると誤診断されることを抑制するために、前記失火パラメータ（ΣＶＡＦ，ＤＶＡＦＳ）に基づく失火診断を中止させるか否かの判断指標となる値である。
【００９３】
そして、前記失火キャンセルパラメータに基づき、燃料増量によって失火時に近似する排気空燃比の変動が発生するか否かを判断し、失火時に近似する排気空燃比の変動が発生する場合には、排気空燃比の変化に基づく失火診断が中止されるようになっている。
【００９４】
従って、前記燃料増量係数ＫＦＵＬＬｎの対象とする燃料供給量の補正係数は、失火時に近似する排気空燃比の変化を発生させ得る補正係数とすることが好ましい。
ここで、前記空燃比補正係数ＫＭＲは、高負荷・高回転域で出力要求及び／又は触媒昇温の抑制を目的として燃料噴射量を増量する補正係数であって、高負荷・高回転域と低中負荷・低中回転域との境界付近で運転が行われ、周期的に高負荷・高回転域になったり、低中負荷・低中回転域になったりを繰り返すと、空燃比補正係数ＫＭＲによる増量状態と増量停止状態とが繰り返されたり、空燃比補正係数ＫＭＲによる補正レベルの増減が繰り返されたりことで（燃料供給量を繰り返し変化させることで）、排気空燃比が繰り返し変動し、これを失火による排気空燃比の変動として誤診断する可能性がある。
【００９５】
そこで、本実施形態では、前記燃料増量係数ＫＦＵＬＬｎに、少なくとも前記空燃比補正係数ＫＭＲを含めるようにしてある。
一方、前記水温増量補正係数ＫＴＷや始動後増量補正係数ＫＡＳは、内燃機関１の冷機始動時に燃料噴射量を増量するものであり、その増量補正量は漸減してゼロにまで低下すると、その後、再度増量状態に戻ることはなく、排気空燃比を繰り返し変動させる可能性は低く、燃料増量係数ＫＦＵＬＬｎの対象として、前記水温増量補正係数ＫＴＷや始動後増量補正係数ＫＡＳを含める必要性は低い。
【００９６】
換言すれば、前記水温増量補正係数ＫＴＷや始動後増量補正係数ＫＡＳによる増量補正では、排気空燃比がリッチ状態から徐々に目標空燃比に戻ることになり、排気空燃比を失火時のように周期的に変動させることにはならず、前記失火パラメータ（ΣＶＡＦ，ＤＶＡＦＳ）に基づく失火診断における誤診断の要因になることはない。
【００９７】
また、燃料噴射量の補正として、本実施形態では、壁流補正量ＫＯＴＨＯＳによる補正を行うが、前記壁流補正量ＫＯＴＨＯＳは、過渡運転時の壁流燃料量の変化による空燃比の変動を抑制するための補正値であり、壁流補正量ＫＯＴＨＯＳは排気空燃比を変化させるための補正ではなく、排気空燃比の変化を抑制することを目的とするものであり、壁流補正量ＫＯＴＨＯＳによる補正を施すことによって、失火時に近似する排気空燃比の周期的な変動を招き難い。
【００９８】
同様に、空燃比フィードバック補正係数ＬＡＭＢＤＡは、排気空燃比が目標空燃比からずれた場合に、目標空燃比付近に戻す働きのものであり、失火時に近似する排気空燃比の周期的な変動を招き難い。
【００９９】
従って、燃料増量係数ＫＦＵＬＬｎの対象として、前記壁流補正量ＫＯＴＨＯＳ及び空燃比フィードバック補正係数ＬＡＭＢＤＡを含める必要性は低い。
更に、電圧補正分ＴＳは、燃料噴射量を変化させることを目的とするものではなく、インジェクタ１１の開弁遅れによって本来の燃料量よりも少なくなってしまうことを抑制すべく、噴射時間を補正するものであるので、燃料増量係数ＫＦＵＬＬｎの対象として含める必要性は低い。
【０１００】
以上のような理由で、本実施形態では、前記燃料増量係数ＫＦＵＬＬｎを、前記燃料噴射パルス幅ＴＩの演算に用いる各種補正係数ＣＯ（ＣＯ＝１＋ＫＴＷ＋ＫＡＳ＋ＫＭＲ＋・・・）、又は、空燃比補正係数ＫＭＲとしている。
【０１０１】
また、空燃比補正係数ＫＭＲ及び空燃比の変動により失火の誤判定に影響が小さい各種補正係数付加した前記燃料噴射パルス幅ＴＩの演算に用いる各種補正係数ＣＯ（ＣＯ＝１＋・・・）としても良い。
【０１０２】
尚、本実施形態では、基本噴射パルス幅ＴＰを補正する補正項として、上記の水温増量補正係数ＫＴＷ、始動後増量補正係数ＫＡＳ、空燃比補正係数ＫＭＲ、壁流補正量ＫＯＴＨＯＳ、空燃比フィードバック補正係数ＬＡＭＢＤＡ、電圧補正分ＴＳを用いたが、こられによる補正処理に限定するものではない。
【０１０３】
また、燃料増量係数ＫＦＵＬＬｎには、失火時に近似する排気空燃比の変動（排気空燃比の繰り返し変動）を招く可能性がある補正項が含まれていればよく、更に、空燃比補正係数ＫＭＲと同様な目的（高負荷・高回転域での出力要求に基づくリッチ化、高負荷・高回転域での触媒昇温抑制のためのリッチ化）で燃料噴射量を補正する値であれば、その名称に関わらず燃料増量係数ＫＦＵＬＬｎに含めるようにすることが好ましい。
【０１０４】
更に、出力要求や触媒昇温の抑制以外要求に基づく補正項であっても、例えば機関負荷と機関回転速度とに応じて補正レベルが切り替わる補正項であれば、補正レベルが切り替わる境界付近で運転された場合に、補正レベルが繰り返し変化することで、失火時に近似する排気空燃比の変動を示す場合があるので、このような補正項についても、前記燃料増量係数ＫＦＵＬＬｎに含めることが好ましい。
【０１０５】
ところで、図７のフローチャートでは、燃料増量係数ＫＦＵＬＬの変化量の絶対値を積算させることで、燃料増量係数ＫＦＵＬＬが繰り返し変化し、これに連動して排気空燃比が繰り返し変化する状態を判断させるようにしたが、前記燃料増量係数ＫＦＵＬＬの最大振幅（変化幅）を前記失火キャンセルパラメータとして算出させることができる。
【０１０６】
図８のフローチャートは、前記燃料増量係数ＫＦＵＬＬの最大振幅（変化幅）ＫＦＵＬＭＸＭＮを前記失火キャンセルパラメータとして算出させる処理を示す。
ステップＳ６５１では、最新に算出された燃料増量係数ＫＦＵＬＬが、前回までの最大値ＫＦＵＬＭＸよりも大きいか否かを判断する。
【０１０７】
尚、前記最大値ＫＦＵＬＭＸの初期値は、例えば、零乃至零付近の値に設定される。
そして、最新の燃料増量係数ＫＦＵＬＬが、前回までの最大値ＫＦＵＬＭＸよりも大きい場合には、ステップＳ６５２へ進んで、前記最大値ＫＦＵＬＭＸの値を、最新の燃料増量係数ＫＦＵＬＬに書き換え更新させて、更新後の最大値ＫＦＵＬＭＸを記憶し、その後ステップＳ６５３へ進む。
【０１０８】
一方、現時点での燃料増量係数ＫＦＵＬＬが、前回までの最大値ＫＦＵＬＭＸ以下である場合には、ステップＳ６５２を迂回してステップＳ６５３に進むことで、最大値ＫＦＵＬＭＸを更新せずに前回までの値を保持させるようにする。
【０１０９】
ステップＳ６５３では、最新に算出された燃料増量係数ＫＦＵＬＬが、前回までの最小値ＫＦＵＬＭＮよりも小さいか否かを判断する。
尚、最小値ＫＦＵＬＭＮの初期値は、例えば、燃料増量係数ＫＦＵＬＬの設計上の最大値或いは該最大値の近傍の値に設定される。
【０１１０】
そして、現時点での燃料増量係数ＫＦＵＬＬが、前回までの最小値ＫＦＵＬＭＮよりも小さい場合には、ステップＳ６５４へ進んで、前記最小値ＫＦＵＬＭＮの値を、最新に算出された燃料増量係数ＫＦＵＬＬに書き換え更新させて、更新後の最小値ＫＦＵＬＭＮを記憶し、その後ステップＳ６５５へ進む。
【０１１１】
一方、現時点での燃料増量係数ＫＦＵＬＬが、前回までの最小値ＫＦＵＬＭＮ以上である場合には、ステップＳ６５４を迂回してステップＳ６５５に進むことで、最小値ＫＦＵＬＭＮを更新せずに前回までの値を保持させるようにする。
【０１１２】
ステップＳ６５５では、前記最大値ＫＦＵＬＭＸから最小値ＫＦＵＬＭＮを減算した値を、前記燃料増量係数ＫＦＵＬＬの最大振幅値ＫＦＵＬＭＸＭＮ（変化幅）に設定する。
ＫＦＵＬＭＸＭＮ＝ＫＦＵＬＭＸ−ＫＦＵＬＭＮ
前記最大振幅値ＫＦＵＬＭＸＭＮは、前記最大値ＫＦＵＬＭＸ及び最小値ＫＦＵＬＭＮの初期値からの更新を開始した時点から現時点までの間における燃料増量係数ＫＦＵＬＬの最大値と最小値との偏差（変化幅）に相当する。
【０１１３】
図４のフローチャートのステップＳ６００で、前記燃料増量係数ＫＦＵＬＬに基づき失火キャンセルパラメータ（増量変化積算値ＳＵＭＫＦＵＬ又は最大振幅ＫＦＵＬＭＸＭＮ）を算出すると、次のステップＳ７００では、空燃比センサ２９の応答診断を実行したか否かを判断する。
【０１１４】
そして、空燃比センサ２９の応答診断を実行した場合には、ステップＳ８００へ進んで、応答診断経験フラグに１をセットし、空燃比センサ２９の応答診断を実行していない場合には、ステップＳ８００を迂回してステップＳ９００に進んで、応答診断経験フラグを零に保持させる。
【０１１５】
尚、後述するように、失火診断のタイミング毎に前記応答診断経験フラグは零にリセットされるようになっているから、失火診断周期の間、即ち、失火パラメータを演算している間に応答診断が実行されたか否かを、前記応答診断経験フラグで判断できるようにしてある。
【０１１６】
前記空燃比センサ２９の応答診断とは、応答診断条件が成立したとき、例えば、定常運転でかつ空燃比変動が運転性に大きく影響しない場合に、排気空燃比がベース空燃比を中心にリッチ及び／又はリーンを周期的に繰り返すように燃料噴射量を強制的に補正し（燃料補正手段）、係る燃料噴射量の補正による排気空燃比の変動に対する、空燃比センサ２９の出力の変化をモニタし、排気空燃比の変動に対する空燃比センサ２９の反応の遅れや出力レベルの劣化（故障）を診断するものである。
【０１１７】
本実施形態では、前記空燃比フィードバック補正係数ＬＡＭＢＤＡを周期的に増減補正することで、燃料噴射量を周期的に増減変化させ、排気空燃比が周期的に変化するようにするが、応答診断のために燃料噴射量を補正して排気空燃比を変化させる方法を、空燃比フィードバック補正係数ＬＡＭＢＤＡの補正に限定するものではない。
【０１１８】
前記応答診断では、前述のように、排気空燃比を強制的に変動させることになり、これが失火による変動と誤診断される可能性があるため、空燃比センサ２９の出力に基づいて失火パラメータを算出している間に、前記応答診断が行われたか否かを判断するようにしてある。
【０１１９】
尚、前記応答診断は、例えば、１トリップ（イグニションスイッチ５２のＯＮからＯＦＦまでの間）に１回だけ行わせる構成とすることができ、また、応答診断の実行条件に対応する運転状態になる毎に行わせる構成とすることができる。
【０１２０】
そして、空燃比センサ２９の応答診断（故障診断）で、例えば、実際の排気空燃比の変化に対して空燃比センサ２９の出力変化の応答が初期状態よりも遅くなる異常の発生が診断された場合には、空燃比センサ２９の出力に基づく空燃比フィードバックにおけるゲインを小さくしたり、空燃比フィードバック制御を中止させるなどのフェイルセーフ制御を実行させる。
【０１２１】
ステップＳ９００では、内燃機関１の２００回転（点火回数４００回）毎の失火診断タイミングであるか否かを判断し、失火診断タイミングでない場合にはステップＳ１００に戻り、失火診断タイミングになると、ステップＳ１０００へ進む。
【０１２２】
即ち、前回の失火診断タイミングから次の失火診断タイミングなるまでの間、ステップＳ１００〜ステップＳ８００の処理を繰り返すことで、失火パラメータや失火キャンセルパラメータの更新を行い、失火診断タイミングになると、ステップＳ９００からステップＳ１０００に進む。
【０１２３】
但し、失火診断タイミングの間隔を、２００回転（点火回数４００回）に限定するものではない。
ステップＳ１０００では、前記燃料増量係数ＫＦＵＬＬに基づき算出した失火キャンセルパラメータ（増量変化積算値ＳＵＭＫＦＵＬ及び／又は最大振幅ＫＦＵＬＭＸＭＮ）が、失火診断のキャンセル判定値以下であるか否かを判断する。
【０１２４】
前記失火キャンセルパラメータは、後述するように、失火診断タイミング毎にクリアされるようになっており、前回の失火診断タイミングから今回の失火診断タイミングまでの間（最近の２００回転の間）における燃料増量係数ＫＦＵＬＬの変動、換言すれば、増量補正の変化による排気空燃比の変化を示し、前記失火キャンセルパラメータが大きいほど、増量補正の変化が大きく、これに伴って排気空燃比が大きく（繰り返し）変化したことになる。
【０１２５】
一方、本実施形態では、後述するように、空燃比センサ２９の出力に基づく失火パラメータから、失火に伴う排気空燃比のリーン化及び周期的な変動を判断して、失火診断を行うが、上記のように、増量レベルが変動することで排気空燃比が変動する条件下では、増量レベルの変動による排気空燃比の変化を空燃比センサ２９が検出することになるので、失火パラメータが増量レベルの変動に影響を受け、失火の有無を誤診断する可能性がある。
【０１２６】
そこで、前記燃料増量係数ＫＦＵＬＬに基づき算出した失火キャンセルパラメータ（増量変化積算値ＳＵＭＫＦＵＬ及び／又は最大振幅ＫＦＵＬＭＸＭＮ）が、失火診断のキャンセル判定値を超えて大きい場合には、増量補正の変化が大きく、これに伴って排気空燃比が大きく（繰り返し）変化し、排気空燃比に基づく失火診断が誤診断する可能性があるので、ステップＳ１１００〜ステップＳ１４００の失火診断を迂回して、ステップＳ１６００に進むことで、最近の２００回転間において算出した失火パラメータに基づく失火診断を中止させ、失火の有無を診断させないようにする。
【０１２７】
燃料供給量の補正状態を示す失火キャンセルパラメータ（増量変化積算値ＳＵＭＫＦＵＬ及び／又は最大振幅ＫＦＵＬＭＸＭＮ）と、キャンセル判定値との比較に基づいて、ステップＳ１１００〜ステップＳ１４００の失火診断を迂回してステップＳ１６００に進ませる処理が、失火診断中止手段に相当する。
【０１２８】
一方、前記燃料増量係数ＫＦＵＬＬに基づき算出した失火キャンセルパラメータ（増量変化積算値ＳＵＭＫＦＵＬ又は最大振幅ＫＦＵＬＭＸＭＮ）が、失火診断のキャンセル判定値以下であれば、増量レベルの変化が失火診断に影響しない程度に小さく、最近の２００回転間において算出した、排気空燃比に基づく失火パラメータに基づいて失火診断を行っても、失火の有無を誤診断することはないものと判断し、ステップＳ１１００へ進む。
【０１２９】
即ち、前記キャンセル判定値は、失火の発生を誤診断する程に増量レベルの変化が大きいか否かを判断するための値であり、失火の発生を誤診断する程に増量レベルの変化が大きい場合に、失火キャンセルパラメータ（増量変化積算値ＳＵＭＫＦＵＬ又は最大振幅ＫＦＵＬＭＸＭＮ）が、前記キャンセル判定値を超えるように予め適合されている。
【０１３０】
尚、失火キャンセルパラメータとして、増量変化積算値ＳＵＭＫＦＵＬと最大振幅ＫＦＵＬＭＸＭＮとのいずれか一方のみを算出し、キャンセル判定値と比較させることができる。
【０１３１】
また、増量変化積算値ＳＵＭＫＦＵＬがキャンセル判定値以下で、かつ、最大振幅ＫＦＵＬＭＸＭＮがキャンセル判定値以下である場合に、失火診断を許可するようにできる。
更に、増量変化積算値ＳＵＭＫＦＵＬ及び最大振幅ＫＦＵＬＭＸＭＮから失火キャンセルパラメータを設定させ、該失火キャンセルパラメータとキャンセル判定値との比較から、失火診断を許可するか中止させることを判断させることもできる。
【０１３２】
前記燃料増量係数ＫＦＵＬＬに基づき算出した失火キャンセルパラメータ（増量変化積算値ＳＵＭＫＦＵＬ及び／又は最大振幅ＫＦＵＬＭＸＭＮ）が、失火診断のキャンセル判定値以下である場合、ステップＳ１１００へ進み、空燃比センサ２９の応答診断経験フラグに１がセットされているか否かを判断する。
【０１３３】
前記応答診断経験フラグに１がセットされている場合には、最近の２００回転間において空燃比センサ２９の応答診断が行われたことになる。
そして、前記応答診断においては、前述のように排気空燃比を変動させる燃料補正がなされ、これによって、排気空燃比に基づく失火パラメータによる失火診断に誤りを生じさせる可能性がある。
【０１３４】
そこで、応答診断経験フラグに１がセットされている場合には、ステップＳ１２００〜ステップＳ１４００の失火診断を迂回して、ステップＳ１６００に進むことで、最近の２００回転間において算出した失火パラメータに基づく失火診断を中止させ、失火の有無を診断させないようにする。
【０１３５】
燃料供給量の補正状態を示す応答診断経験フラグに基づいて、ステップＳ１２００〜ステップＳ１４００の失火診断を迂回してステップＳ１６００に進ませる処理が、失火診断中止手段に相当する。
【０１３６】
一方、応答診断経験フラグに零がセットされていて、最近の２００回転間において空燃比センサ２９の応答診断が行われていない場合には、失火パラメータに基づく失火診断を許可して、ステップＳ１２００へ進む。
【０１３７】
ステップＳ１２００では、空燃比センサ２９の出力ＶＡＦに基づく失火パラメータに基づいて、失火の有無を診断させる。
このステップＳ１２００における失火診断の詳細を、図９のフローチャートに従って説明する。
【０１３８】
ステップＳ１２０１では、空燃比センサ２９の出力値ＶＡＦの積算値ΣＶＡＦ、及び、空燃比センサ２９の出力値ＶＡＦのサンプリング回数ＣVAFを読み出し、積算値ΣＶＡＦをサンプリング回数ＣVAFにより除算して、最近の２００回転間における空燃比センサ２９の出力平均値ＡＦＡＶＥを算出する（ＡＦＡＶＥ←ΣＶＡＦ／ＣVAF）。
【０１３９】
次いで、ステップＳ１２０２へ進み、前記出力平均値ＡＦＡＶＥと、該出力平均値ＡＦＡＶＥにより失火を診断するための判定値ＬＶＬAFAVEとを比較する。
尚、空燃比センサ２９の出力ＶＡＦは、排気空燃比がリッチになるほど大きくなるものとする。
【０１４０】
そして、上記出力平均値ＡＦＡＶＥが判定値ＬＶＬAFAVE未満である場合には、所定気筒（１気筒又は複数気筒）に連続失火が発生しているために、排気空燃比が平均的にリーンになっているものと判断し、ステップＳ１２０４へ進んで、失火診断フラグＦNGに１をセットする。
【０１４１】
即ち、連続失火している気筒があると、当該気筒からは、排気行程毎に空気がそのまま排出され、排気中の酸素濃度を高くするから、排気空燃比としては平均的にリーン状態として検出されることになる。
【０１４２】
前記判定値ＬＶＬAFAVEは、そのときの目標空燃比よりもリーンである空燃比に相当する値として設定され、前記目標空燃比よりもリーンである空燃比とは、少なくとも１気筒で連続失火が発生している場合に、排気空燃比の平均値が上回る値として予め適合されている。
【０１４３】
尚、上記では、空燃比センサ２９の出力の平均値ＡＦＡＶＥと判定値ＬＶＬAFAVEとを比較させたが、空燃比センサ２９の出力を空燃比のデータに変換して、該空燃比データの平均値を求めるか、前記平均値ＡＦＡＶＥを空燃比のデータに変換し、これらの空燃比データと空燃比判定値とを比較させて、平均的な空燃比データが空燃比判定値を上回る場合（平均的な空燃比データが空燃比判定値よりもリーンである場合）に、失火発生を判断させることができる。
【０１４４】
ステップＳ１２０２で、出力平均値ＡＦＡＶＥが判定値ＬＶＬAFAVE以上であると判断され、排気空燃比の平均的なリーン化が発生していない場合には、ステップＳ１２０３へ進む。
【０１４５】
ステップＳ１２０３では、変化量積算値ＤＶＡＦＳを読み出し、この変化量積算値ＤＶＡＦＳを、該変化量積算値ＤＶＡＦＳにより失火を診断するための判定値ＬＶＬDVAFSと比較する。
【０１４６】
そして、変化量積算値ＤＶＡＦＳが判定値ＬＶＬDVAFSよりも大きい場合には、所定気筒（１気筒又は複数気筒）に連続失火が発生しているために、排気空燃比が繰り返し変化し、これによって空燃比センサ２９の出力値ＶＡＦが繰り返し変動したため、変化量積算値ＤＶＡＦＳが、判定値ＬＶＬDVAFSよりも大きくなったものと判断して、ステップＳ１２０４へ進んで、失火診断フラグＦNGに１をセットする。
【０１４７】
従って、出力平均値ＡＦＡＶＥが連続失火に伴う空燃比の平均的なリーン化を示していない場合であっても、変化量積算値ＤＶＡＦＳが判定値ＬＶＬDVAFSよりも大きく、排気空燃比が繰り返しの変動を示している場合には、失火の発生を診断するようにしてある。
【０１４８】
上記の出力平均値ＡＦＡＶＥ及び変化量積算値ＤＶＡＦＳと判定値との比較に基づいて失火の有無を診断する機能が失火診断手段に相当する。
一方、変化量積算値ＤＶＡＦＳが判定値ＬＶＬDVAFS以下である場合には、連続失火による排気空燃比の変動は発生しなかったために、排気空燃比が比較的安定していて、空燃比センサ２９の出力値ＶＡＦも繰り返しの変動を示さなかったものと判断し、ステップＳ１２０５へ進んで、失火診断フラグＦNGに零をセットする。
【０１４９】
即ち、失火診断フラグＦNGに１がセットされている場合には、連続失火している気筒があることを示し、失火診断フラグＦNGに零がセットされている場合には、少なくとも連続失火している気筒がないと判断されていることを示す。
【０１５０】
前記判定値ＬＶＬDVAFSは、失火発生時に変化量積算値ＤＶＡＦＳが超える値として予め設定されるが、例えば機関負荷と機関回転速度とから可変に設定させることができる。
以上のように、本実施形態では、空燃比センサ２９の出力値ＶＡＦの平均値ＡＦＡＶＥ及び変化量積算値ＤＶＡＦＳに基づいて失火診断を行うが、平均値ＡＦＡＶＥと変化量積算値ＤＶＡＦＳとのいずれか一方に基づいて失火診断を行わせることができ、更に、出力平均値ＡＦＡＶＥが判定値ＬＶＬAFAVE未満で、かつ、変化量積算値ＤＶＡＦＳが判定値ＬＶＬDVAFSよりも大きい場合に失火診断を行わせることができる。
【０１５１】
図４のフローチャートのステップＳ１２００で、空燃比センサ２９の出力値ＶＡＦの平均値ＡＦＡＶＥ又は変化量積算値ＤＶＡＦＳ（失火パラメータ）に基づいて失火の発生が診断され、失火診断フラグＦNGに１が設定された場合には、ステップＳ１２００からステップＳ１３００へ進み、機関回転速度変化に基づく失火気筒判別を行う。
【０１５２】
一方、ステップＳ１２００で、失火の発生が診断されず、失火診断フラグＦNGに零が設定された場合には、ステップＳ１２００からステップＳ１６００へ進む。
ステップＳ１３００における失火気筒の判別処理の詳細を、図１０のフローチャートに従って説明する。
【０１５３】
ステップＳ１３０１では、最近の２００回転の間で求められた気筒毎の差回転積算値ΣＤＥＬＮＥｎ（ｎ＝１〜４）を、サンプル数（４００点火／４気筒＝１００）でそれぞれに除算することで、気筒毎の差回転ＤＥＬＮＥｎの平均値ＤＮＡＶＥｎをそれぞれ算出する。
【０１５４】
そして、次のステップＳ１３０２では、気筒毎の平均値ＤＮＡＶＥｎ（ｎ＝１〜４）を相互に比較することで、平均値ＤＮＡＶＥｎのうちの最大値ＤＮＡＶＥＭＡＸを求める。
次いで、ステップＳ１３０３へ進み、上記最大値ＤＮＡＶＥＭＡＸから気筒毎の差回転平均値ＤＮＡＶＥｎをそれぞれ減算して、この最大値ＤＮＡＶＥＭＡＸに対する各気筒毎の平均値差ＳＤＮＡＶＥｎを算出する（ＳＤＮＡＶＥｎ←ＤＮＡＶＥＭＡＸ−ＤＮＡＶＥｎ）。
【０１５５】
ステップＳ１３０４では、空燃比センサ２９が活性状態であって、ステップＳ１２００で、空燃比センサ２９の出力ＶＡＦに応じた失火パラメータに基づく失火診断がなされたか否かを判断する。
【０１５６】
空燃比センサ２９が活性状態であって、ステップＳ１２００において空燃比センサ２９の出力ＶＡＦに応じた失火パラメータに基づく失火診断がなされる場合には、空燃比センサ２９で検出される排気空燃比から失火の発生が診断された場合に、更に、ステップＳ１３００での差回転に基づく失火診断がなされるため、高い診断精度が得られる。
【０１５７】
これに対し、空燃比センサ２９が非活性状態である場合には、ステップＳ４００からステップＳ１３００に進み、ステップＳ１２００での失火診断を行わず、差回転のみから失火診断を行うことになるため、空燃比センサ２９の活性状態での失火診断に比べて、診断精度が低下する。
【０１５８】
そこで、ステップＳ１３０４で空燃比センサ２９の非活性状態であると判断された場合には、ステップＳ１３０５へ進み、気筒毎の平均値差ＳＤＮＡＶＥｎと比較される失火判定値ＬＶＬＭＩＳを、予め記憶された一定の補正係数ＡＦＮＯＡＣＴＨＯＳ（＞1.0）で増大補正し（ＬＶＬＭＩＳ←ＬＶＬＭＩＳ×ＡＦＮＯＡＣＴＨＯＳ）、平均値差ＳＤＮＡＶＥｎと失火判定値ＬＶＬＭＩＳとの比較に基づく失火診断において、失火発生が診断され難くする。
【０１５９】
即ち、空燃比センサ２９が非活性状態であって、差回転のみから失火の有無を診断させる場合には、差回転がより明確に失火時に対応する値を示す場合に、失火の発生を診断させるようにして、実際には失火していない状態で失火発生が誤診断されてしまうことを抑制する。
【０１６０】
尚、失火診断値ＬＶＬＭＩＳの増大補正は、補正係数ＡＦＮＯＡＣＴＨＯＳの乗算によって行う方法に限定されず、補正値ＡＦＮＯＡＣＴＨＯＳを加算することで増大補正することができる。
【０１６１】
前記失火判定値ＬＶＬＭＩＳは、失火発生によって平均値差ＳＤＮＡＶＥｎが越えるようになる値に予め設定され、固定値であっても良いし、機関負荷及び機関回転速度から可変に設定したり、前記平均値差ＳＤＮＡＶＥｎの移動平均値に基づいて設定したりすることができる。
【０１６２】
一方、空燃比センサ２９が活性状態であって、空燃比センサ２９で検出される排気空燃比に基づいて失火の発生が診断されてからステップＳ１３００に進んだ場合には、失火診断の精度が上がるので、ステップＳ１３０５を迂回して進むことで、失火診断値ＬＶＬＭＩＳを増大補正せずに初期値のままとする。
【０１６３】
従って、空燃比センサ２９が活性状態で失火診断に用いる失火診断値ＬＶＬＭＩＳと、空燃比センサ２９の非活性状態で失火診断に用いる失火診断値ＬＶＬＭＩＳとは、活性時の失火診断値ＬＶＬＭＩＳ＜非活性時の失火診断値ＬＶＬＭＩＳ、という相関を示すことになる。
【０１６４】
そして、ステップＳ１３０６では、気筒毎の平均値差ＳＤＮＡＶＥｎを、それぞれ失火判定値ＬＶＬＭＩＳと比較し、失火判定値ＬＶＬＭＩＳよりも平均値差ＳＤＮＡＶＥｎの大きい気筒を、連続失火中の失火気筒と判別し、ステップＳ１３０７で、該当気筒の連続失火を表す気筒別失火フラグＦMISｎに１をセットする。
【０１６５】
上記のように、ＳＤＮＡＶＥｎ＞ＬＶＬＭＩＳである場合に、失火発生（連続失火）を判定するので、空燃比センサ２９の非活性時に、失火判定値ＬＶＬＭＩＳを増大補正することで、失火発生が診断され難くなる。
【０１６６】
また、平均値差ＳＤＮＡＶＥｎが失火診断値ＬＶＬＭＩＳ以下である気筒については、少なくとも恒常的な連続失火は生じていないと判断して、ステップＳ１３０８で、該当気筒に対応する気筒別失火フラグＦMISｎに零をセットする。
【０１６７】
図４のフローチャートのステップＳ１３００において、差回転に基づく失火診断を上記のようにして行うと、次のステップＳ１４００では、失火発生気筒を特定したか否か、即ち、気筒別失火フラグＦMISｎ（ｎ＝１〜４）のうち、１がセットされたフラグが存在するか否かを判断する。
【０１６８】
そして、失火発生気筒を特定したと判断した場合（気筒別失火フラグＦMISｎ（ｎ＝１〜４）のうち、１がセットされたフラグが存在する場合）には、ステップＳ１５００へ進み、警報ランプ３８を点灯させて（警告手段を動作させて）、失火の発生（機関異常の発生）を車両の運転者に警告する。
【０１６９】
一方、失火発生気筒を特定しなかったと判断した場合（気筒別失火フラグＦMISｎ（ｎ＝１〜４）が全て零である場合）には、ステップＳ１６００へ進み、前記警報ランプ３８を消灯させて（警告手段の動作を停止させて）、失火の発生（機関異常の発生）がないことを車両の運転者に認識させる。
【０１７０】
また、前記警報ランプ３８の点灯又は消灯処理を行った後は、ステップＳ１７００へ進み、診断結果（前記気筒別失火フラグＦMISｎ（ｎ＝１〜４）の値）をバックアップＲＡＭ４４などに時系列的に記憶させ、整備工場などで失火診断結果の履歴を後から読み出せるようにする。
【０１７１】
更に、次のステップＳ１８００では、空燃比センサ２９の出力ＶＡＦに基づく失火パラメータである積算値ΣＶＡＦ及び変化量積算値ＤＶＡＦＳを零にリセットし、また、回転変動による失火パラメータである差回転積算値ΣＤＥＬＮＥを零にリセットし、次の２００回転間におけるデータが新たに積算されるようにする。
【０１７２】
また、次のステップＳ１９００では、燃料増量係数に基づく失火キャンセルパラメータである増量変化積算値ＳＵＭＫＦＵＬ（及び最大振幅ＫＦＵＬＭＸＭＮ）を零にリセットし、次の２００回転間におけるデータが新たに積算されるようにする。
【０１７３】
また、次のステップＳ２０００では、空燃比センサ２９の応答診断経験フラグを零にリセットし、次の２００回転間に応答診断が行われた場合に、新たに応答診断経験フラグに１がセットされるようにする。
【０１７４】
上記図４のフローチャートに示した実施形態では、空燃比補正係数ＫＭＲなどの燃料増量係数による燃料増量補正によって排気空燃比が変動する条件において、また、空燃比センサ２９の応答診断が実行された（応答診断用の燃料補正が行われた）場合に、空燃比センサ２９の出力に応じて設定した失火パラメータに基づく失火診断を中止させたが、失火診断を中止させる代わりに、空燃比センサ２９の出力ＶＡＦに基づく失火パラメータを、燃料増量係数による燃料増量補正や応答診断の実行に応じて補正することで、誤診断を抑制することが可能である。
【０１７５】
以下では、空燃比センサ２９の出力に基づく失火パラメータを、燃料増量係数による燃料増量補正や応答診断の実行に応じて補正する第２実施形態を、図１１のフローチャートに従って説明する。
【０１７６】
図１１のフローチャートに示すルーチンにおいて、ステップＳ３１００では、前記ステップＳ１００と同様に、内燃機関１が回転中であるか否かを判断する。
そして、内燃機関１が回転中であれば、ステップＳ３２００へ進む。
【０１７７】
ステップＳ３２００では、前記ステップＳ２００と同様に、失火診断を実行する条件が成立しているか否かを判断する。
そして、内燃機関１の回転中であって、かつ、失火診断を実行する条件が成立している場合に、ステップＳ３３００へ進み、内燃機関１の停止中である場合、又は、内燃機関１の回転中であるものの失火診断を実行する条件が成立していない場合には、ステップＳ３１００に戻る。
【０１７８】
ステップＳ３３００では、前記ステップＳ３００と同様に、図５のフローチャートに従って、内燃機関１の回転変動に基づく失火診断において用いる失火パラメータである、差回転ＤＥＬＮＥｎ及び差回転積算値ΣＤＥＬＮＥｎを演算する。
【０１７９】
ステップＳ３４００では、前記ステップＳ４００と同様に、空燃比センサ２９が活性化しているか否かを判断する。
そして、空燃比センサ２９が活性化していない場合には、ステップＳ３５００〜ステップＳ４１００を迂回して、ステップＳ４２００に進む。
【０１８０】
一方、空燃比センサ２９が活性化している場合には、ステップＳ３５００へ進む。
ステップＳ３５００では、前記ステップＳ５００と同様に、空燃比センサ２９の出力ＶＡＦに基づいて、失火パラメータとしての出力積算値ΣＶＡＦ及び変化量積算値ＤＶＡＦＳを算出する。
【０１８１】
この出力積算値ΣＶＡＦ及び変化量積算値ＤＶＡＦＳの算出処理は、前述のように、図６のフローチャートに従って行われる。
次のステップＳ３６００では、前記空燃比センサ２９の出力に基づく失火パラメータとしての変化量積算値ＤＶＡＦＳを補正するための補正値ＫＦＵＬＤＥＣを算出する。
【０１８２】
以下では、前記補正値ＫＦＵＬＤＥＣの算出処理を、図１２のフローチャートに従って説明する。
図１２のフローチャートにおいて、ステップＳ３６０１では、最新の燃料増量係数ＫＦＵＬＬｎから、所定時間前に演算された燃料増量係数ＫＦＵＬＬ（ｎ−１）を減算し、この減算結果（変化量）の絶対値を、前回までの増量変化積算値ＳＵＭＫＦＵＬに加算し、該加算結果を今回の増量変化積算値ＳＵＭＫＦＵＬとして、燃料増量係数ＫＦＵＬＬｎの変化量の絶対値を順次積算する（ＳＵＭＫＦＵＬ←ＳＵＭＫＦＵＬ＋｜ＫＦＵＬＬｎ−ＫＦＵＬＬ（ｎ−１）｜）。
【０１８３】
ステップＳ３６０２では、前記増量変化積算値ＳＵＭＫＦＵＬに基づいて補正値ＫＦＵＬＤＥＣ（≧０）を算出する。
前記増量変化積算値ＳＵＭＫＦＵＬを補正値ＫＦＵＬＤＥＣに変換する変換テーブルが予め記憶されており、該変換テーブルを用いて増量変化積算値ＳＵＭＫＦＵＬに対応する補正値ＫＦＵＬＤＥＣを求める。
【０１８４】
ここで、前記補正値ＫＦＵＬＤＥＣは、前記変化量積算値ＤＶＡＦＳから減算される値であり、図１３に示すように、増量変化積算値ＳＵＭＫＦＵＬが大きいほどより大きな値、換言すれば、変化量積算値ＤＶＡＦＳをより大きく減少させる値に設定される。
【０１８５】
ステップＳ３６０３では、次回の本ルーチンの実行時における増量変化積算値ＳＵＭＫＦＵＬの算出に備え、燃料増量係数ＫＦＵＬＬｎを、前回（１回前）の値ＫＦＵＬＬ（ｎ−１）として記憶させ（ＫＦＵＬＬ（ｎ−１）←ＫＦＵＬＬｎ）、本ルーチンを終了させる。
【０１８６】
前記燃料増量係数ＫＦＵＬＬｎは、第１実施形態と同様に、前記燃料噴射パルス幅ＴＩの演算に用いた各種補正係数ＣＯ（ＣＯ＝１＋ＫＴＷ＋ＫＡＳ＋ＫＭＲ＋・・・）、又は、空燃比補正係数ＫＭＲとする。
【０１８７】
前記補正値ＫＦＵＬＤＥＣは、燃料増量によって排気空燃比が変化し、係る排気空燃比の変化が失火に因るものであると誤診断されることを抑制するために、変化量積算値ＤＶＡＦＳを補正するための値であり、燃料増量補正が変動することで排気空燃比が繰り返し変動する場合には、前記変化量積算値ＤＶＡＦＳを減少補正する。
【０１８８】
変化量積算値ＤＶＡＦＳに基づく失火診断においては、後述するように、変化量積算値ＤＶＡＦＳが判定値ＬＶＬDVAFSよりも大きい場合に、失火の発生を診断するから、変化量積算値ＤＶＡＦＳを減少補正することで、失火発生が診断され難くなり、結果、燃料増量補正によって排気空燃比が繰り返し変動し、これに影響されて変化量積算値ＤＶＡＦＳが大きくなっている場合に、失火の発生が診断されることを抑制することになる。
【０１８９】
従って、前記燃料増量係数ＫＦＵＬＬｎの対象とする燃料噴射量の補正係数は、失火時に近似する排気空燃比の変化を発生させ得る補正係数とすることが好ましく、第１実施形態と同様な理由によって、前記燃料噴射パルス幅ＴＩの演算に用いた各種補正係数ＣＯ（ＣＯ＝１＋ＫＴＷ＋ＫＡＳ＋ＫＭＲ＋・・・）、又は、空燃比補正係数ＫＭＲとする。
【０１９０】
尚、前記ステップＳ３６０１において、増量変化積算値ＳＵＭＫＦＵＬの算出に代えて、既述した図８のフローチャートに従って、前記燃料増量係数ＫＦＵＬＬの最大振幅（変化幅）ＫＦＵＬＭＸＭＮを演算させ、ステップＳ３６０２において、前記最大振幅（変化幅）ＫＦＵＬＭＸＭＮに基づいて補正値ＫＦＵＬＤＥＣを演算させることができる。
【０１９１】
この場合、前記最大振幅（変化幅）ＫＦＵＬＭＸＭＮが大きいほど、これに影響されて増量変化積算値ＳＵＭＫＦＵＬが大きくなるから、前記最大振幅（変化幅）ＫＦＵＬＭＸＭＮが大きいほど補正値ＫＦＵＬＤＥＣをより大きな値に設定し、前記最大振幅（変化幅）ＫＦＵＬＭＸＭＮが大きいほど前記変化量積算値ＤＶＡＦＳをより小さく補正するようにする。
【０１９２】
ステップＳ３６００で、変化量積算値ＤＶＡＦＳを補正するための補正値ＫＦＵＬＤＥＣを、燃料増量係数ＫＦＵＬＬｎに基づいて算出すると、次のステップＳ３７００では、空燃比センサ２９の応答診断中であるか否かを判断する。
【０１９３】
前記空燃比センサ２９の応答診断とは、前述のように、応答診断条件が成立したときに、排気空燃比がベース空燃比を基点として周期的に変動するように燃料噴射量を強制的に補正し、係る燃料噴射量の補正による排気空燃比の変動に対する、空燃比センサ２９の出力の変化をモニタし、排気空燃比の変動に対する空燃比センサ２９の反応の遅れや出力レベルの劣化（故障）を診断するものである。
【０１９４】
ここで、空燃比センサ２９の応答診断中でない場合には、応答診断による排気空燃比の変動に対応するために、前記変化量積算値ＤＶＡＦＳを補正する必要はないので、ステップＳ３８００を迂回してステップＳ３９００へ進む。
【０１９５】
一方、空燃比センサ２９の応答診断中である場合には、応答診断による排気空燃比の変動に影響されて前記変化量積算値ＤＶＡＦＳが大きくなり、これによって失火発生が誤診断される可能性があるので、ステップＳ３８００へ進み、前記誤診断を抑制するために、変化量積算値ＤＶＡＦＳを補正するための補正値ＬＭＤＤＥＣを設定する。
【０１９６】
上記の応答診断中における補正値ＬＭＤＤＥＣの演算処理を、図１４のフローチャートに従って詳細に説明する。
まず、ステップＳ３８０１では、空燃比センサ２９の応答診断中であるか否かを判断し、応答診断中であれば、ステップＳ３８０２に進む。
【０１９７】
ステップＳ３８０２では、空燃比フィードバック補正係数ＬＡＭＢＤＡの最新値ＬＡＭＢＤＡｎから、所定時間前の値ＬＡＭＢＤＡ（ｎ−１）を減算し、この減算結果（変化量）の絶対値を、前回までの空燃比補正積算値ＳＵＭＬＭＤに加算し、該加算結果を今回の空燃比補正積算値ＳＵＭＬＭＤとして、空燃比フィードバック補正係数ＬＡＭＢＤＡの変化量の絶対値を順次積算する（ＳＵＭＬＭＤ←ＳＵＭＬＭＤ＋｜ＬＡＭＢＤＡｎ−ＬＡＭＢＤＡ（ｎ−１）｜）。
【０１９８】
応答診断においては、空燃比フィードバック補正係数ＬＡＭＢＤＡの補正によって燃料噴射量を補正し、排気空燃比を変動させるので、前記空燃比補正積算値ＳＵＭＬＭＤは、燃料噴射量の補正量の変化を積算した値に相当する。
【０１９９】
ステップＳ３８０３では、前記空燃比補正積算値ＳＵＭＬＭＤに基づいて補正値ＬＭＤＤＥＣ（≧０）を算出する。
前記空燃比補正積算値ＳＵＭＬＭＤを補正値ＬＭＤＤＥＣに変換する変換テーブルが予め記憶されており、該変換テーブルを用いて空燃比補正積算値ＳＵＭＬＭＤに対応する補正値ＬＭＤＤＥＣを求める。
【０２００】
ここで、前記補正値ＬＭＤＤＥＣは、前記変化量積算値ＤＶＡＦＳから減算される値であり、図１５に示すように、空燃比補正積算値ＳＵＭＬＭＤが大きいほどより大きな値、換言すれば、変化量積算値ＤＶＡＦＳをより大きく減少させる値に設定される。
【０２０１】
ステップＳ３８０４では、次回の本ルーチンの実行時における空燃比補正積算値ＳＵＭＬＭＤの算出に備え、空燃比フィードバック補正係数ＬＡＭＢＤＡｎを、前回（１回前）の値ＬＡＭＢＤＡ（ｎ−１）として記憶させ（ＬＡＭＢＤＡ（ｎ−１）←ＬＡＭＢＤＡｎ）、本ルーチンを終了させる。
【０２０２】
ステップＳ３８００において、前記補正値ＬＭＤＤＥＣを算出すると、ステップＳ３９００では、内燃機関１の２００回転（点火回数４００回）毎の失火診断タイミングであるか否かを判断し、失火診断タイミングでない場合にはステップＳ３１００に戻り、失火診断タイミングになると、ステップＳ４０００へ進む。
【０２０３】
ステップＳ４０００では、前記変化量積算値ＤＶＡＦＳから、前記補正値ＫＦＵＬＤＥＣ及び補正値ＬＭＤＤＥＣを減算し、該減算結果を最終的な失火パラメータＤＶＡＦＳＳとする補正演算を行う。
【０２０４】
ＤＶＡＦＳＳ＝ＤＶＡＦＳ−ＫＦＵＬＤＥＣ−ＬＭＤＤＥＣ
上記ステップＳ４０００における演算機能が、失火パラメータ補正手段に相当する。
そして、次のステップＳ４１００では、空燃比センサ２９の出力ＶＡＦに基づく失火パラメータに基づいて、失火の有無を診断させる。
【０２０５】
このステップＳ４１００における失火診断の詳細を、図１６のフローチャートに従って説明する。
ステップＳ４１０１では、空燃比センサ２９の出力値ＶＡＦの積算値ΣＶＡＦ、及び、空燃比センサ２９の出力値ＶＡＦのサンプリング回数ＣVAFを読み出し、積算値ΣＶＡＦをサンプリング回数ＣVAFにより除算して、最近の２００回転間における空燃比センサ２９の出力平均値ＡＦＡＶＥを算出する（ＡＦＡＶＥ←ΣＶＡＦ／ＣVAF）。
【０２０６】
次いで、ステップＳ４１０２へ進み、前記出力平均値ＡＦＡＶＥと、該出力平均値ＡＦＡＶＥにより失火を診断するための判定値ＬＶＬAFAVEとを比較する。
尚、空燃比センサ２９の出力ＶＡＦは、排気空燃比がリッチになるほど大きくなるものとする。
【０２０７】
そして、上記出力平均値ＡＦＡＶＥが判定値ＬＶＬAFAVE未満である場合には、所定気筒（１気筒又は複数気筒）に連続失火が発生しているために、排気空燃比が平均的にリーンになっているものと判断し、ステップＳ４１０４へ進んで、失火診断フラグＦNGに１をセットする。
【０２０８】
即ち、連続失火している気筒があると、当該気筒からは、排気行程毎に空気がそのまま排出され、排気中の酸素濃度を高くするから、排気空燃比としては平均的にリーン状態として検出されることになる。
【０２０９】
前記判定値ＬＶＬAFAVEは、そのときの目標空燃比よりもリーンである空燃比に相当する値として設定され、前記目標空燃比よりもリーンである空燃比とは、少なくとも１気筒で連続失火が発生している場合に、排気空燃比の平均値が上回る値として予め適合されている。
【０２１０】
尚、上記では、空燃比センサ２９の出力の平均値ＡＦＡＶＥと判定値ＬＶＬAFAVEとを比較させたが、空燃比センサ２９の出力を空燃比のデータに変換して、該空燃比データの平均値を求めるか、前記平均値ＡＦＡＶＥを空燃比のデータに変換し、これらの空燃比データと空燃比判定値とを比較させて、平均的な空燃比データが空燃比判定値を上回る場合（平均的な空燃比データが空燃比判定値よりもリーンである場合）に、失火発生を判断させることができる。
【０２１１】
一方、ステップＳ４１０２で、出力平均値ＡＦＡＶＥが診断値ＬＶＬAFAVE以上であると判断され、排気空燃比の平均的なリーン化が発生していない場合には、ステップＳ４１０３へ進む。
【０２１２】
ステップＳ４１０３では、前記変化量積算値ＤＶＡＦＳＳ（ＤＶＡＦＳＳ＝ＤＶＡＦＳ−ＫＦＵＬＤＥＣ−ＬＭＤＤＥＣ）を読み出し、この変化量積算値ＤＶＡＦＳＳを、該変化量積算値ＤＶＡＦＳＳにより失火を診断するための判定値ＬＶＬDVAFSと比較する。
【０２１３】
そして、変化量積算値ＤＶＡＦＳＳが判定値ＬＶＬDVAFSよりも大きい場合には、所定気筒（１気筒又は複数気筒）に連続失火が発生しているために、排気空燃比が繰り返し変化し、これによって空燃比センサ２９の出力値ＶＡＦが繰り返し変動したため、変化量積算値ＤＶＡＦＳＳが、判定値ＬＶＬDVAFSよりも大きくなったものと判断して、ステップＳ４１０４へ進んで、失火診断フラグＦNGに１をセットする。
【０２１４】
従って、出力平均値ＡＦＡＶＥが連続失火に伴う空燃比のリーン化を示していない場合であっても、変化量積算値ＤＶＡＦＳＳが判定値ＬＶＬDVAFSよりも大きく、排気空燃比が繰り返しの変動を示している場合には、失火の発生を診断するようにしてある。
【０２１５】
一方、変化量積算値ＤＶＡＦＳＳが判定値ＬＶＬDVAFS以下である場合には、連続失火による排気空燃比の変動は発生しなかったために、排気空燃比が比較的安定していて、空燃比センサ２９の出力値ＶＡＦも繰り返しの変動を示さなかったものと判断し、ステップＳ４１０５へ進んで、失火診断フラグＦNGに零をセットする。
【０２１６】
ここで、燃料噴射量の増量補正による排気空燃比の変動や、空燃比センサ２９の応答診断に伴う排気空燃比の変動が発生する場合には、前記変化量積算値ＤＶＡＦＳＳが、これらの影響分に応じて判定値（閾値）ＬＶＬDVAFSから遠ざかる方向に減少補正される。
【０２１７】
従って、燃料噴射量の増量補正による排気空燃比の変動や、空燃比センサ２９の応答診断に伴う排気空燃比の変動によって、変化量積算値ＤＶＡＦＳが大きな値に算出され、これによって、実際には失火が発生していないのに失火発生が誤診断されることを抑制できる。
【０２１８】
尚、上記のように、前記出力平均値ＡＦＡＶＥと判定値ＬＶＬAFAVEとの比較に基づく失火診断においては、前記燃料噴射量の増量補正による排気空燃比の変動や、空燃比センサ２９の応答診断に伴う排気空燃比の変動に応じた補正は行っていない。
【０２１９】
これは、前記出力平均値ＡＦＡＶＥと判定値ＬＶＬAFAVEとの比較に基づく失火診断は、平均空燃比がリーン化した場合に失火の発生を診断する構成であるのに対し、前記燃料噴射量の増量補正や空燃比センサ２９の応答診断によっては、平均空燃比がリーン化することはなく、失火の発生を誤診断することがないためである。
【０２２０】
但し、空燃比センサ２９の応答診断において、周期的に空燃比をリーン化させ、該リーン化に対する空燃比センサ２９の応答をモニタする場合には、平均空燃比がリーン化して失火発生を誤診断する可能性があるので、前記出力平均値ＡＦＡＶＥを、前記リーン化に応じて空燃比のリッチ方向に補正する（増大補正する）ことが好ましい。
【０２２１】
図１１のフローチャートのステップＳ４１００で失火の発生が診断され、失火診断フラグＦNGに１が設定された場合には、ステップＳ４１００からステップＳ４２００へ進み、機関回転変化に基づく失火気筒判別を行う。
【０２２２】
一方、ステップＳ４１００で、失火の発生が診断されず、失火診断フラグＦNGに零が設定された場合には、ステップＳ４１００からステップＳ４５００へ進む。
ステップＳ４２００における失火気筒の判別処理の詳細は、先に説明した図１０のフローチャートに従って行われるので、ここでは、詳細な説明は省略する。
【０２２３】
ステップＳ４２００において、差回転に基づく失火診断を行うと、次のステップＳ４３００では、失火発生気筒を特定したか否か、即ち、気筒別失火フラグＦMISｎ（ｎ＝１〜４）のうち、１がセットされたフラグが存在するか否かを判断する。
【０２２４】
そして、失火発生気筒を特定したと判断した場合（気筒別失火フラグＦMISｎ（ｎ＝１〜４）のうち、１がセットされたフラグが存在する場合）には、ステップＳ４４００へ進み、警報ランプ３８を点灯させて（警告手段を動作させて）、失火の発生（機関異常の発生）を車両の運転者に警告する。
【０２２５】
一方、失火発生気筒を特定しなかったと判断した場合（気筒別失火フラグＦMISｎ（ｎ＝１〜４）が全て零である場合）には、ステップＳ４５００へ進み、前記警報ランプ３８を消灯させて（警告手段の動作を停止させて）、失火の発生（機関異常の発生）がないことを車両の運転者に認識させる。
【０２２６】
また、前記警報ランプ３８の点灯又は消灯処理を行った後は、ステップＳ４６００へ進み、診断結果（前記気筒別失火フラグＦMISｎ（ｎ＝１〜４）の値）をバックアップＲＡＭ４４などに時系列的に記憶させ、整備工場などで失火診断結果の履歴を後から読み出せるようにする。
【０２２７】
更に、次のステップＳ４７００では、空燃比センサ２９の出力ＶＡＦに基づく失火パラメータである積算値ΣＶＡＦ及び変化量積算値ＤＶＡＦＳを零にリセットし、また、差回転積算値ΣＤＥＬＮＥを零にリセットし、次の２００回転間におけるデータが新たに積算されるようにする。
【０２２８】
また、次のステップＳ４８００では、増量変化積算値ＳＵＭＫＦＵＬ（又は最大振幅ＫＦＵＬＭＸＭＮ）を零にリセットし、次の２００回転間におけるデータが新たに積算されるようにする。
【０２２９】
また、次のステップＳ４９００では、空燃比補正積算値ＳＵＭＬＭＤを零にリセットし、次の２００回転間におけるデータが新たに積算されるようにする。
図１７は、燃料増量係数ＫＦＵＬＬによって周期的な排気空燃比の変動が発生する様子、及び、該排気空燃比の変動に対する各種パラメータの変化を示すタイムチャートである。
【０２３０】
図１７において、事象を分かり易くするために、スロットル開度ＴＶＯが、空燃比補正係数ＫＭＲによる増量が行われる領域と増量が行われない領域との境界を中心に、一定周期で変化する場合を示してある。
【０２３１】
上記スロットル開度ＴＶＯの周期的な変動に伴って、空燃比補正係数ＫＭＲ（燃料増量係数ＫＦＵＬＬ）による増量補正が周期的に行われ、空燃比補正係数ＫＭＲ（燃料増量係数ＫＦＵＬＬ）による増量補正状態と増量補正停止状態とを繰り返すことで、空燃比センサ２９の出力ＶＡＦ（排気空燃比）は、周期的に変動する。
【０２３２】
一方、前述のような周期的な増量補正、及び、これに伴う排気空燃比の周期的な変動によって、増量補正係数ＫＦＵＬＬの変化量を積算する増量変化積算値ＳＵＭＫＦＵＬ、及び、空燃比センサ２９の出力ＶＡＦの変化量を積算する変化量積算値ＤＶＡＦＳは、失火診断タイミング後に逐次増大変化することになる。
【０２３３】
ここで、失火診断タイミングになった時点での増量変化積算値ＳＵＭＫＦＵＬが、キャンセル診断値を超えていれば、増量補正量の繰り返しの変化によって、増量変化積算値ＳＵＭＫＦＵＬがキャンセル診断値を超えるほどに大きくなったものと推定でき、更に、前記増量補正量の繰り返しの変化に伴って空燃比センサ２９の出力ＶＡＦが変動したものと判断できる。
【０２３４】
従って、４００点火毎の失火診断タイミングにおいて、増量変化積算値ＳＵＭＫＦＵＬがキャンセル診断値を超えている場合には、変化量積算値ＤＶＡＦＳに基づく失火診断をキャンセルすることで、増量補正量の繰り返しの変化による排気空燃比の変化を、失火による排気空燃比の周期的な変化と誤診断することがないようにする。
【０２３５】
また、増量変化積算値ＳＵＭＫＦＵＬが大きくなるほど、変化量積算値ＤＶＡＦＳを減少補正すれば、変化量積算値ＤＶＡＦＳに含まれる増量補正量の繰り返し変化による分が除かれるように補正されることとなり、増量補正量の繰り返しの変化による排気空燃比の変化を、失火による排気空燃比の周期的な変化と誤診断することが抑制される。
【０２３６】
図１８は、空燃比センサ２９の応答診断における排気空燃比の変化、及び、該排気空燃比の変動に対する各種パラメータの変化を示すタイムチャートである。
図１８に示す例では、空燃比センサ２９の応答診断条件（定常運転など）が成立すると、排気空燃比がそのときの目標空燃比を中心にリッチ・リーンを繰り返すように、空燃比フィードバック補正係数ＬＭＢＤＡを周期的に変動させる補正が行われる。
【０２３７】
そして、前記補正によって燃料噴射量が増減変化し、排気空燃比が変動するときに、この排気空燃比を検出する空燃比センサ２９の出力の応答変化がモニタされ、応答の劣化など故障を診断する。
【０２３８】
ここで、排気空燃比がリッチ・リーンを繰り返すことで、空燃比センサ２９の出力ＶＡＦも周期的に変動し、変化量積算値ＤＶＡＦＳは漸増することになり、変化量積算値ＤＶＡＦＳに基づき失火の発生が誤診断されてしまう。
【０２３９】
そこで、前記失火診断タイミング間で、空燃比センサ２９の応答診断がなされた場合には、変化量積算値ＤＶＡＦＳが応答診断に影響されて大きくなっているものと推定し、変化量積算値ＤＶＡＦＳに基づく失火診断をキャンセルして、応答診断に伴う排気空燃比の変化を、失火による排気空燃比の周期的な変化と誤診断することがないようにする。
【０２４０】
そこで、応答診断中の空燃比フィードバック補正係数ＬＡＭＢＤＡの変化量を積算する空燃比補正積算値ＳＵＭＬＭＤを演算させ、応答診断のための燃料補正量の変化量の積算値である前記空燃比補正積算値ＳＵＭＬＭＤに基づいて変化量積算値ＤＶＡＦＳを減少補正することで、変化量積算値ＤＶＡＦＳに含まれる応答診断に伴う排気空燃比の変動分が除かれるように補正されることになり、応答診断に伴う排気空燃比の変化を、失火による排気空燃比の周期的な変化と誤診断することを抑制する。
【０２４１】
尚、上記実施形態では、変化量積算値ＤＶＡＦＳを、前記補正値ＫＦＵＬＤＥＣ及び補正値ＬＭＤＤＥＣで減算補正することで、増量補正又は応答診断に伴う排気空燃比の変動で失火発生が誤診断されることを抑制するようにしたが、変化量積算値ＤＶＡＦＳの減少補正に代えて、又は、変化量積算値ＤＶＡＦＳの減少補正と共に、前記変化量積算値ＤＶＡＦＳと比較させる失火判定値ＬＶＬDVAFSを、増量補正量の変動時や空燃比センサ２９の応答診断時に増大補正させることで、誤診断の抑制を図ることができる。
【０２４２】
また、失火診断の中止は、変化量積算値ＤＶＡＦＳ（失火パラメータ）と失火判定値との比較に基づき失火の有無を判断する処理を行わないことの他、変化量積算値ＤＶＡＦＳ（失火パラメータ）の積算を中止すること、変化量積算値ＤＶＡＦＳ（失火パラメータ）をリセットしてしまうこと、失火診断の実行条件に、増量補正量の変動時でないことや空燃比センサ２９の応答診断時でないことを含めることなどが含まれ、更に、これらの処理を複数組み合わせることができる。
【０２４３】
更に、本実施形態では、排気空燃比の検出結果に基づく失火診断と、機関回転速度に基づく失火診断とを組み合わせる構成としたが、排気空燃比の検出結果（空燃比センサ２９の出力）のみに基づいて失火診断を行う構成の失火診断装置であってもよい。
【０２４４】
また、空燃比センサ２９は、排気空燃比を広域に検出するセンサの他、理論空燃比に対するリッチ・リーンを検出する所謂リッチ・リーンセンサであってもよく、また、リッチ・リーンセンサの出力を、空燃比データに変換する構成であってもよい。
【０２４５】
また、失火気筒が特定された場合には、当該失火気筒に対する燃料噴射を中止し、未燃焼成分が排気系に多く排出されることを抑止することが好ましい。
また、燃料増量による失火診断の中止又は失火パラメータの補正と、応答診断時の失火診断の中止又は失火パラメータの補正とのいずれか一方のみを行わせることができ、更に、燃料増量レベルが切り換る境界付近の運転領域（エンジン負荷・エンジン回転速度領域）で失火診断を行わせないことは、燃料増量による失火診断の中止に含まれるものとする。
【０２４６】
更に、失火診断タイミング毎の診断結果の履歴から最終的な失火診断を行う構成において、燃料増量レベルの変動状態で算出された変化量積算値ＤＶＡＦＳ（失火パラメータ）に基づく診断結果や、応答診断中に算出された変化量積算値ＤＶＡＦＳ（失火パラメータ）に基づく診断結果に対する重み付けを軽くして、最終的な失火診断への影響度合いを低下させることで、失火発生が誤診断されることを抑制することができる。
【０２４７】
また、失火診断と空燃比センサ２９の応答診断とが同時に実行されないように、例えば、失火診断中は応答診断の開始を延期させたり、応答診断の実行間隔が過剰に長くなった場合に、失火診断（失火パラメータの積算）を中断させて応答診断を行わせたりすることができる。
【図面の簡単な説明】
【０２４８】
【図１】実施形態における車両用内燃機関のシステム図である。
【図２】実施形態におけるクランク角センサ及びカム角センサの出力信号の特性を示すタイムチャートである。
【図３】実施形態における電子制御装置の詳細を示すブロック図である。
【図４】実施形態における失火診断のメインルーチンを示すフローチャートである。
【図５】実施形態における差回転ＤＥＬＮＥの算出処理を示すフローチャートである。
【図６】実施形態における空燃比センサの出力に基づく失火パラメータの算出処理を示すフローチャートである。
【図７】実施形態における燃料増量係数ＫＦＵＬＬの変化量の積算値ＳＵＭＫＦＵＬの算出処理を示すフローチャートである。
【図８】実施形態における燃料増量係数ＫＦＵＬＬの変化幅ＫＦＵＬＭＸＭＮの算出処理を示すフローチャートである。
【図９】実施形態における空燃比センサの出力に応じた失火パラメータに基づく失火診断を示すフローチャートである。
【図１０】実施形態における差回転ＤＥＬＮＥに基づく失火気筒の判別処理を示すフローチャートである。
【図１１】実施形態における失火診断のメインルーチンを示すフローチャートである。
【図１２】実施形態における燃料増量係数ＫＦＵＬＬの変化量の積算値ＳＵＭＫＦＵＬの算出、及び、前記積算値ＳＵＭＫＦＵＬに基づく補正値ＫＦＵＬＤＥＣの算出を示すフローチャートである。
【図１３】実施形態における燃料増量係数ＫＦＵＬＬの変化量の積算値ＳＵＭＫＦＵＬと補正値ＫＦＵＬＤＥＣとの相関を示す線図である。
【図１４】実施形態における空燃比フィードバック補正係数ＬＡＭＢＤＡの変化量の積算値ＳＵＭＬＭＤの算出、及び、前記積算値ＳＵＭＬＭＤに基づく補正値ＬＭＤＤＥＣの算出を示すフローチャートである。
【図１５】実施形態における空燃比フィードバック補正係数ＬＡＭＢＤＡの変化量の積算値ＳＵＭＬＭＤと補正値ＬＭＤＤＥＣとの相関を示す線図である。
【図１６】実施形態における空燃比センサの出力に応じて設定した失火パラメータの補正、及び、補正後の失火パラメータに基づく失火診断を示すフローチャートである。
【図１７】実施形態において周期的な燃料増量補正が行われる場合の各パラメータの変化を示すタイムチャートである。
【図１８】実施形態において空燃比センサの応答診断が行われる場合の各パラメータの変化を示すタイムチャートである。
【符号の説明】
【０２４９】
１…内燃機関、１１…インジェクタ、２２…触媒コンバータ、２９…空燃比センサ、３２…クランク角センサ、３５Ａ，３５Ｂ…カム角センサ、３８…警報ランプ、４０…電子制御装置（ＥＣＵ）
【図１】
2010150953.tif 000003
【図２】
2010150953.tif 000004
【図３】
2010150953.tif 000005
【図４】
2010150953.tif 000006
【図５】
2010150953.tif 000007
【図６】
2010150953.tif 000008
【図７】
2010150953.tif 000009
【図８】
2010150953.tif 000010
【図９】
2010150953.tif 000011
【図１０】
2010150953.tif 000012
【図１１】
2010150953.tif 000013
【図１２】
2010150953.tif 000014
【図１３】
2010150953.tif 000015
【図１４】
2010150953.tif 000016
【図１５】
2010150953.tif 000017
【図１６】
2010150953.tif 000018
【図１７】
2010150953.tif 000019
【図１８】
2010150953.tif 000020