(57)【特許請求の範囲】
【請求項１】
燃焼室内に燃料を直接噴射する筒内用燃料噴射弁と、吸気通路に燃料を噴射する吸気通路用燃料噴射弁とを備え、噴き分け率の異なる複数の噴射状態のうちの１つの噴射状態に選択的に切り替えることが可能な内燃機関の失火異常検出装置であって、
失火が発生した際の前記内燃機関の運転状態と噴射状態とを記憶し、前記複数の噴射状態ごとに異常時運転状態を求めるとともに、所定の期間内で失火が発生した際の前記複数の噴射状態の中から所定の条件に基づいて異常時噴射状態を決定し、その決定した異常時噴射状態と、この異常時噴射状態における異常時運転状態とを対応づけて記憶することを特徴とする内燃機関の失火異常検出装置。
【請求項２】
請求項１記載の内燃機関の失火異常検出装置において、
前記所定の期間内で発生した各噴射状態ごとの失火の回数に基づいて異常時噴射状態を決定することを特徴とする内燃機関の失火異常検出装置。
【請求項３】
請求項１または２記載の内燃機関の失火異常検出装置において、
前記決定した異常時噴射状態と同一の噴射状態であり、かつ、前記記憶した異常時運転状態と類似運転状態であるときに、正常復帰判定を行うことを特徴とする内燃機関の失火異常検出装置。
【請求項４】
請求項３記載の内燃機関の失火異常検出装置において、
前記類似運転状態とは、前記記憶した異常時運転状態と同一の機関運転状態、または、当該異常時運転状態に対して予め設定された所定範囲内にある機関運転状態であることを特徴とする内燃機関の失火異常検出装置。
【請求項５】
請求項１〜４のいずれか１つに記載の内燃機関の失火異常検出装置において、
前記機関運転状態とは、機関回転数、機関負荷率、暖機状態であり、
前記噴射状態とは、筒内用燃料噴射弁のみによって燃料を噴射する噴射状態、吸気通路用燃料噴射弁のみによって燃料を噴射する噴射状態、筒内用燃料噴射弁及び吸気通路用燃料噴射弁によって燃料を噴射する噴射状態であることを特徴とする内燃機関の失火異常検出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、筒内に向けて燃料を噴射する筒内噴射用インジェクタと、吸気通路（吸気ポート）内に向けて燃料を噴射する吸気通路噴射用インジェクタとを備えた内燃機関の失火異常検出装置に関する。
【背景技術】
【０００２】
車両等に搭載される内燃機関（エンジン）として、筒内に向けて燃料を噴射するための筒内噴射用インジェクタと、吸気通路（吸気ポート）内に向けて燃料を噴射するための吸気通路噴射用インジェクタとを備えた、いわゆるデュアル噴射型の内燃機関が知られている。このようなデュアル噴射型の内燃機関では、機関の運転状態に応じて、２つのインジェクタを切り替えて使用することにより、例えば、低負荷運転領域での成層燃焼と高負荷運転領域での均質燃焼を実現することができる。また、筒内噴射用インジェクタと吸気通路噴射用インジェクタとの噴射比率（噴き分け率）を調整することにより燃費特性や出力特性の改善を図ることができる。
【０００３】
このような内燃機関にあっては、例えば、失火異常の検出とその異常からの正常復帰とが行われている。その失火異常検出処理の一例として、失火カウンタのカウント数が所定値以上となったときの機関回転数・機関負荷（負荷率）・暖機状態に加えて、噴射状態（ポート噴射、筒内噴射、デュアル噴射）を記憶し、この記憶した機関運転状態及び噴射状態と類似した条件のときに正常復帰判定を行うという技術がある（例えば、特許文献１参照）。このような失火異常検出方法（従来技術）によれば、機関運転状態（機関回転数・機関負荷（負荷率）・暖機状態）に加えて、噴射状態も条件として記憶しているので、噴射状態が異なるのに正常復帰してしまうことを低減することができる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１１−０２６９６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、上記した失火異常検出方法では、失火カウンタのカウント数が所定値以上となったときに、単に、機関運転状態及び噴射状態を記憶しているのみであるため、その記憶した噴射状態と実際に失火が発生した機関運転状態とが乖離する場合がある。例えば、失火が発生した機関運転状態が筒内噴射状態であるのにも関わらず、その失火が発生した噴射状態がデュアル噴射状態であると記憶する場合がある。こうした状況になると、正常復帰判定を適正に行えなくなる場合がある。
【０００６】
本発明はそのような実情を考慮してなされたもので、筒内に向けて燃料を噴射する筒内噴射用インジェクタと、吸気通路内に向けて燃料を噴射する吸気通路噴射用インジェクタとを備えた内燃機関であって、失火が発生したときの噴射状態に合わせて異常時運転状態を記憶することが可能な失火検出装置を備えた内燃機関を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、燃焼室内に燃料を直接噴射する筒内用燃料噴射弁と、吸気通路に燃料を噴射する吸気通路用燃料噴射弁とを備え、噴き分け率の異なる複数の噴射状態のうちの１つの噴射状態に選択的に切り替えることが可能な内燃機関の失火異常検出装置を前提としている。そして、このような失火異常検出装置において、失火が発生した際の前記内燃機関の運転状態と噴射状態とを記憶し、前記複数の噴射状態ごとに異常時運転状態を求めるとともに、所定の期間内で失火が発生した際の複数の噴射状態の中から所定の条件に基づいて異常時噴射状態を決定し、その決定した異常時噴射状態と、この異常時噴射状態における異常時運転状態とを対応づけて記憶することを特徴としている。
【０００８】
本発明において、前記処理により決定した異常時噴射状態と同一の噴射状態であり、かつ、前記処理により記憶した異常時運転状態と類似運転状態であるときに、正常復帰判定を行うようにする。なお、類似運転状態とは、前記処理により記憶した異常時運転状態と同一の機関運転状態、または、当該異常時運転状態に対して予め設定された所定範囲内にある機関運転状態のことである。
【０００９】
本発明によれば、失火が発生したときの噴射状態に合わせて異常時運転状態を記憶することができるので、失火異常検出の後に、正常復帰判定を実施するにあたり、その正常復帰判定を適正に行うことができる。
【００１０】
ここで、本発明において、噴き分け率の異なる複数の噴射状態としては、例えば、筒内用燃料噴射弁のみによって燃料を噴射する噴射状態（ＤＩ噴射）、吸気通路用燃料噴射弁のみによって燃料を噴射する噴射状態（ＰＦＩ噴射）、筒内用燃料噴射弁及び吸気通路用燃料噴射弁によって燃料を噴射する噴射状態（ＤＵＡＬ噴射）を挙げることができる。
【００１１】
本発明において、上記した異常時噴射状態を決定する際の具体的な手法としては、所定の期間（失火異常の検出期間：図８参照）内で発生する、各噴射状態ごとの失火の回数（具体的には、各噴射状態ごとの失火カウンタのカウント値）に基づいて決定するという方法を挙げることができる。
【００１２】
この場合、例えば、所定の期間内おいて失火回数が最も多い噴射状態を異常時噴射状態と決定するようにしてもよい。また、例えば、噴き分け率が異なる複数の噴射状態が、ＤＵＡＬ噴射、ＤＩ噴射、ＰＦＩ噴射の３つの形態である場合、ＤＵＡＬ噴射での失火回数が所定の判定値以上である場合は、ＤＵＡＬ噴射を異常時噴射状態（ＤＵＡＬ異常）と決定する。一方、ＤＵＡＬ噴射での失火回数が判定値未満である場合は、ＤＩ噴射での失火回数とＰＦＩ噴射での失火回数とを比較し、ＤＩ噴射での失火回数の方が多い場合はＤＩ噴射を異常噴射状態（ＤＩ異常）と決定し、ＰＦＩ噴射での失火回数の方が多い場合にはＰＦＩ噴射を異常時噴射状態（ＰＦＩ異常）と決定するようにしてもよい。
【発明の効果】
【００１３】
本発明によれば、失火が発生したときの噴射状態に合わせて異常時運転状態を記憶することができるので、失火異常検出の後に、正常復帰判定を実施するにあたり、その正常復帰判定を適正に行うことができる。
【図面の簡単な説明】
【００１４】
【図１】本発明を適用するエンジン（内燃機関）の一例を示す概略構成図である。
【図２】ＥＣＵ等の制御系の構成を示すブロック図である。
【図３】燃料噴射の噴き分け率マップの一例を示す図である。
【図４】ＥＣＵが実行する失火異常検出処理の一例を示すフローチャートである。
【図５】正常復帰領域を示す図である。
【図６】従来の失火異常検出方法の問題点を示す図である。
【図７】ＥＣＵが実行する失火異常検出処理の他の例を示すフローチャートである。
【図８】失火異常の検出期間を示す図である。
【発明を実施するための形態】
【００１５】
以下、本発明の実施形態を図面に基づいて説明する。
【００１６】
−エンジン−
図１は本発明を適用するエンジンの概略構成を示す図である。なお、図１にはエンジンの１気筒の構成のみを示している。
【００１７】
この例のエンジン１は、車両に搭載される４気筒（第１気筒＃１〜第４気筒＃４）のガソリンエンジンであって、その各気筒を構成するシリンダブロック１ａ内には上下方向に往復動するピストン１ｃが設けられている。ピストン１ｃはコネクティングロッド１６を介してクランクシャフト１５に連結されており、ピストン１ｃの往復運動がコネクティングロッド１６によってクランクシャフト１５の回転へと変換される。
【００１８】
クランクシャフト１５にはシグナルロータ１７が取り付けられている。シグナルロータ１７の外周面には複数の歯（突起）１７ａが等角度（この例では、例えば１０°ＣＡ（クランク過度））ごとに設けられている。また、シグナルロータ１７は、歯１７ａの２枚分が欠落した欠歯部１７ｂを有している。
【００１９】
シグナルロータ１７の側方近傍には、クランク角を検出するクランクポジションセンサ（エンジン回転数センサ）２０１が配置されている。クランクポジションセンサ２０１は、例えば電磁ピックアップであって、クランクシャフト１５が回転する際にシグナルロータ１７の歯１７ａに対応するパルス状の信号（電圧パルス）を発生する。このクランクポジションセンサ２０１の出力信号からエンジン回転数ＮＥを算出することができる。
【００２０】
エンジン１のシリンダブロック１ａにはエンジン冷却水の水温を検出する水温センサ２０３が配置されている。また、シリンダブロック１ａの上端にはシリンダヘッド１ｂが設けられており、このシリンダヘッド１ｂとピストン１ｃとの間に燃焼室１ｄが形成されている。エンジン１の燃焼室１ｄには点火プラグ３が配置されている。点火プラグ３の点火タイミングはイグナイタ４によって調整される。イグナイタ４はＥＣＵ（Ｅｌｅｃｔｒｏｎｉｃ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ）１００によって制御される。
【００２１】
エンジン１のシリンダブロック１ａの下部には、潤滑油（エンジンオイル）を貯留するオイルパン１８が設けられている。オイルパン１８に貯留された潤滑油は、エンジン１の運転時に、異物を除去するオイルストレーナを介してオイルポンプ（図示せず）によって汲み上げられて、ピストン１ｃ、クランクシャフト１５、コネクティングロッド１６などエンジン各部に供給され、その各部の潤滑・冷却等に使用される。そして、このようにして供給された潤滑油は、エンジン各部の潤滑・冷却等のために使用された後、オイルパン１８に戻され、再びオイルポンプによって汲み上げられるまでオイルパン１８内に貯留される。
【００２２】
エンジン１の燃焼室１ｄには吸気通路１１と排気通路１２とが接続されている。吸気通路１１の一部は吸気ポート１１ａ及び吸気マニホールド１１ｂによって形成されている。また、排気通路１２の一部は排気ポート１２ａ及び排気マニホールド１２ｂによって形成されている。
【００２３】
吸気通路１１には、吸入空気（新気）を濾過するエアクリーナ７、エアフロメータ２０４、吸気温センサ２０７、及び、エンジン１の吸入空気量を調整するためのスロットルバルブ５などが配置されている。エアフロメータ２０４は、吸入空気量（新規空気量）を検出する。吸気温センサ２０７は、エンジン１に吸入される空気の温度（吸気温）を検出する。
【００２４】
スロットルバルブ５のスロットル開度はＥＣＵ１００によって駆動制御される。具体的には、クランクポジションセンサ２０１の出力信号から算出されるエンジン回転数ＮＥ、及び、ドライバのアクセルペダル踏み込み量（アクセル開度）等のエンジン１の運転状態に応じた最適な吸入空気量（目標吸気量）が得られるようにスロットルバルブ５のスロットル開度を制御している。より詳細には、スロットル開度センサ２０５を用いてスロットルバルブ５の実際のスロットル開度を検出し、その実スロットル開度が、上記目標吸気量が得られるスロットル開度（目標スロットル開度）に一致するようにスロットルバルブ５のスロットルモータ６をフィードバック制御している。なお、こうしたスロットルバルブ５の制御システムは、「電子スロットルシステム」と称されており、アイドリング運転時などにおいて、ドライバのアクセルペダルの操作とは独立してスロットル開度を制御することも可能である。
【００２５】
吸気通路１１と燃焼室１ｄとの間に吸気バルブ１３が設けられており、この吸気バルブ１３を開閉駆動することにより、吸気通路１１と燃焼室１ｄとが連通または遮断される。また、排気通路１２と燃焼室１ｄとの間に排気バルブ１４が設けられており、この排気バルブ１４を開閉駆動することにより、排気通路１２と燃焼室１ｄとが連通または遮断される。これら吸気バルブ１３及び排気バルブ１４の開閉駆動は、クランクシャフト１５の回転がタイミングチェーン等を介して伝達される吸気カムシャフト２１及び排気カムシャフト２２の各回転によって行われる。
【００２６】
吸気カムシャフト２１の近傍には、特定の気筒（例えば第１気筒＃１）のピストン１ｃが圧縮上死点（ＴＤＣ）に達したときにパルス状の信号を発生するカムポジションセンサ２０２が設けられている。カムポジションセンサ２０２は、例えば電磁ピックアップであって、吸気カムシャフト２１に一体的に設けられたロータ外周面の１個の歯（図示せず）に対向するように配置されており、その吸気カムシャフト２１が回転する際にパルス状の信号（電圧パルス）を出力する。なお、吸気カムシャフト２１（及び排気カムシャフト２２）は、クランクシャフト１５の１／２の回転速度で回転するので、クランクシャフト１５が２回転（７２０°回転）するごとにカムポジションセンサ２０２が１つのパルス状の信号を発生する。
【００２７】
このようなカムポジションセンサ２０２及び上記クランクポジションセンサ２０１の各出力信号から、エンジン運転時において、エンジン１の各気筒（第１気筒＃１〜第４気筒＃４）のピストン位置（吸入行程・圧縮行程・爆発行程・排気行程）を認識することができ、精密な燃料噴射制御や点火時期制御などのエンジン運転制御を行うことができる。
【００２８】
一方、排気通路１２には三元触媒９が配置されている。三元触媒９においては、燃焼室１ｄから排気通路１２に排気された排気ガス中のＣＯ、ＨＣの酸化及びＮＯｘの還元が行われ、それらを無害なＣＯ2、Ｈ2Ｏ、Ｎ2とすることで排気ガスの浄化が図られている。
【００２９】
三元触媒９の上流側（排気流れの上流側）の排気通路１２に空燃比（Ａ／Ｆ）センサ２０９が配置されている。空燃比センサ２０９は、空燃比に対してリニアな特性を示すセンサである。また、三元触媒９の下流側の排気通路１２にはＯ２センサ２１０が配置されている。Ｏ２センサ２１０は、排気ガス中の酸素濃度に応じて起電力を発生するものであって、理論空燃比に相当する電圧（比較電圧）よりも出力が高いときはリッチと判定し、逆に比較電圧よりも出力が低いときはリーンと判定する。
【００３０】
＜燃料噴射系＞
次に、エンジン１の燃料噴射系について説明する。
【００３１】
エンジン１の各気筒には、それぞれ、各燃焼室１ｄ内に燃料を直接噴射することが可能な筒内噴射用インジェクタ（筒内用燃料噴射弁）２ａが配置されている。これら筒内噴射用インジェクタ２ａは、共通の高圧燃料用デリバリパイプ２０ａに接続されている。
【００３２】
また、エンジン１の吸気通路１１には、各吸気ポート１１ａ内に燃料を噴射可能なポート噴射用インジェクタ（吸気通路用燃料噴射弁）２ｂが配置されている。ポート噴射用インジェクタ２ｂは各気筒毎に設けられている。これらポート噴射用インジェクタ２ｂは共通の低圧燃料用デリバリパイプ２０ｂに接続されている。
【００３３】
上記高圧燃料用デリバリパイプ２０ａ、及び、上記低圧燃料用デリバリパイプ２０ｂへの燃料供給は、低圧ポンプとしてのフィードポンプ３０１及び高圧ポンプ３０２によって行われる。フィードポンプ３０１は、燃料タンク３００内の燃料（ガソリン等）を汲み上げて、低圧燃料用デリバリパイプ２０ｂ及び高圧ポンプ３０２に供給する。高圧ポンプ３０２は、フィードポンプ３０１からの低圧燃料を加圧して高圧燃料用デリバリパイプ２０ａに供給する。
【００３４】
筒内噴射用インジェクタ２ａは、所定電圧が印加されたときに開弁して燃焼室１ｄ内に燃料を直接噴射する電磁駆動式の開閉弁である。筒内噴射用インジェクタ２ａの開閉（噴射時間・噴射タイミング）は、ＥＣＵ１００によってデューティ制御される。
【００３５】
ポート噴射用インジェクタ２ｂも、同様に、所定電圧が印加されたときに開弁して吸気ポート１１ａ内に燃料を噴射する電磁駆動式の開閉弁である。ポート噴射用インジェクタ２ｂについても、ＥＣＵ１００によって開閉（噴射時間・噴射タイミング）がデューティ制御される。
【００３６】
なお、筒内噴射用インジェクタ２ａによる燃料噴射（ＤＩ噴射）と、ポート噴射用インジェクタ２ｂによる燃料噴射（ＰＦＩ噴射）との噴き分け率（ＰＦＩ噴き分け率：ＫＰＦＩ）等については後述する。
【００３７】
そして、以上の筒内噴射用インジェクタ２ａ及びポート噴射用インジェクタ２ｂのいずれか一方または両方のインジェクタからの燃料噴射により、燃焼室１ｂ内に混合気（燃料＋空気）が形成される。この混合気は点火プラグ３にて点火されて燃焼・爆発する。このときに生じた高温高圧の燃焼ガスによりピストン１ｃが往復動され、クランクシャフト１５が回転されてエンジン１の駆動力（出力トルク）が得られる。燃焼室１ｄ内で燃焼した燃焼ガスは、排気バルブ１４の開弁にともない排気通路１２に排出される。
【００３８】
−ＥＣＵ−
ＥＣＵ１００は、図２に示すように、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）１０１、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）１０２、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）１０３、バックアップＲＡＭ１０４、失火カウンタ１１０、及び、検出期間カウンタ１２０などを備えている。
【００３９】
ＲＯＭ１０２は、各種制御プログラムや、それら各種制御プログラムを実行する際に参照されるマップ等が記憶されている。ＣＰＵ１０１は、ＲＯＭ１０２に記憶された各種制御プログラムやマップに基づいて各種の演算処理を実行する。また、ＲＡＭ１０３は、ＣＰＵ１０１での演算結果や各センサから入力されたデータ等を一時的に記憶するメモリであり、バックアップＲＡＭ１０４は、例えばエンジン１の停止時にその保存すべきデータ等を記憶する不揮発性のメモリである。
【００４０】
検出期間カウンタ１２０は、エンジン１の累積回転数（Ｒｅｖ）を計測するカウンタであって、この検出期間カウンタ１２０のカウント値が、例えば１０００Ｒｅｖに達した時点で、１回の失火検出期間（図８参照）を終了する。
【００４１】
失火カウンタ１１０は、後述するように、エンジン１の各気筒＃１〜＃４の回転変動量ΔＮＥが失火判定閾値を超える度に、カウント値が１つずつカウントアップ（インクリメント）する総失火カウンタと、噴射状態（ＤＵＡＬ噴射、ＤＩ噴射、ＰＦＩ噴射）ごとに失火回数をカウントする失火時ＤＵＡＬカウンタ、失火時ＤＩカウンタ、及び、失火時ＰＦＩカウンタとを備えている。この例の失火カウンタ１１０にあっては、図８に示す検出期間中に失火が発生したときには、その失火が発生するごとに総失火カウンタのカウント値が１つずつカウントアップされ、その失火発生時の噴射状態に応じて失火時ＤＵＡＬカウンタ、失火時ＤＩカウンタ、または、失火時ＰＦＩカウンタのカウント値が１つずつカウントアップされる。
【００４２】
以上のＣＰＵ１０１、ＲＯＭ１０２、ＲＡＭ１０３及びバックアップＲＡＭ１０４、並びに失火カウンタ１１０及び検出期間カウンタ１２０は、バス１０７を介して互いに接続されるとともに、入力インターフェース１０５及び出力インターフェース１０６と接続されている。
【００４３】
入力インターフェース１０５には、クランクポジションセンサ（エンジン回転数センサ）２０１、カムポジションセンサ２０２、水温センサ２０３、エアフロメータ２０４、スロットル開度センサ２０５、アクセルペダルの踏み込み量に応じた検出信号を出力するアクセル開度センサ２０６、吸気温センサ２０７、インマニ圧センサ２０８、空燃比センサ２０９、Ｏ２センサ２１０、筒内噴射用インジェクタ２ａに供給する高圧燃料の圧力（燃圧）を検出する高圧燃料用燃圧センサ２１１、及び、ポート噴射用インジェクタ２ｂに供給する低圧燃料の圧力（燃圧）を検出する低圧燃料用燃圧センサ２１２などの各種センサ類が接続されている。また、入力インターフェース１０５にはイグニッションスイッチ２１３が接続されており、このイグニッションスイッチ２１３がオン操作（ＩＧ−ＯＮ）されると、スタータモータ（図示せず）によるエンジン１のクランキングが開始される。
【００４４】
出力インターフェース１０６には、筒内噴射用インジェクタ２ａ、ポート噴射用インジェクタ２ｂ、点火プラグ３のイグナイタ４、及び、スロットルバルブ５のスロットルモータ６などが接続されている。
【００４５】
そして、ＥＣＵ１００は、上記した各種センサの検出信号に基づいて、下記の燃料噴射量制御、点火プラグ３の点火時期制御、及び、スロットルバルブ５のスロットルモータ６の駆動制御（吸入空気量制御）などを含むエンジン１の各種制御を実行する。さらに、ＥＣＵ１００は、下記の「失火検出処理」及び「失火異常検出処理」を実行する。
【００４６】
以上のＥＣＵ１００により実行されるプログラムによって本発明の内燃機関（エンジン）失火検出装置が実現される。
【００４７】
−燃料噴射量制御−
まず、ＥＣＵ１００のＲＯＭ１０２には、図３に示す噴き分け率マップが記憶されている。
【００４８】
図３の噴き分け率マップは、エンジン１の運転状態を示すエンジン回転数ＮＥ及び負荷率ＫＬをパラメータとして、燃費（燃料消費率）特性や出力特性などを考慮して、燃料噴射形態を実験・シミュレーション等によって適合したマップであって、筒内噴射用インジェクタ２ａのみによって燃料が噴射されるＤＩ領域（直噴領域）、ポート噴射用インジェクタ２ｂのみによって燃料が噴射されるＰＦＩ領域（ポート噴射領域）、及び、筒内噴射用インジェクタ２ａ及びポート噴射用インジェクタ２ｂによって燃料が噴射されるＤＵＡＬ領域（直噴及びポート噴射領域（ＰＦＩ＋ＤＩ））が設定されている。
【００４９】
そして、ＥＣＵ１００は、クランクポジションセンサ２０１の出力信号から得られるエンジン回転数ＮＥ及びエンジン負荷率ＫＬに基づいて、図３のマップを参照して燃料噴射の噴き分け率（ポート噴射用インジェクタ２ｂから噴射する燃料の噴き分け率ＫＰＦＩ（％））を求め、その噴き分け率ＫＰＦＩ及び要求噴射量に基づいて噴射時間及び噴射タイミングを算出して燃料噴射を実行する。
【００５０】
具体的には、エンジン運転状態（エンジン回転数ＮＥ・負荷率ＫＬ）が、ＤＩ領域（噴き分け率ＫＰＦＩ＝０％）である場合、ＤＩ要求噴射量、高圧燃料用燃圧センサ２１１の出力信号から得られる燃圧、及び、筒内噴射用インジェクタ２ａの容量（流量サイズ）に基づいて、筒内噴射用インジェクタ２ａから噴射する高圧燃料のＤＩ噴射時間及びＤＩ噴射タイミングを算出し、その算出したＤＩ噴射時間及びＤＩ噴射タイミングに基づいて筒内噴射用インジェクタ２ａを開閉制御して燃料噴射を実行する。
【００５１】
エンジン運転状態（エンジン回転数ＮＥ・負荷率ＫＬ）が、ＰＦＩ領域（噴き分け率ＫＰＦＩ＝１００％）である場合、ＰＦＩ要求噴射量、低圧燃料用燃圧センサ２１２の出力信号から得られる燃圧、及び、ポート噴射用インジェクタ２ｂの容量（流量サイズ）に基づいてポート噴射用インジェクタ２ｂから噴射する低圧燃料のＰＦＩ噴射時間、及び、ＰＦＩ噴射タイミングを算出し、その算出したＰＦＩ噴射時間及びＰＦＩ噴射タイミングに基づいてポート噴射用インジェクタ２ｂを開閉制御して燃料噴射を実行する。
【００５２】
エンジン運転状態（エンジン回転数ＮＥ・負荷率ＫＬ）が、ＤＵＡＬ領域（０％＜噴き分け率ＫＰＦＩ＜１００％）である場合、噴き分け率ＫＰＦＩに基づいて筒内噴射用インジェクタ２ａのＤＩ要求噴射量（全体要求噴射量×（１−噴き分け率ＫＰＦＩ／１００））と、ポート噴射用インジェクタ２ｂのＰＦＩ要求噴射量（全体要求噴射量×噴き分け率ＫＰＦＩ／１００）とを求め、上記と同様にして、ＤＩ噴射時間及びＤＩ噴射タイミングと、ＰＦＩ噴射時間及びＰＦＩ噴射タイミングとを算出する。そして、その算出したＤＩ噴射時間及びＤＩ噴射タイミングに基づいて筒内噴射用インジェクタ２ａを開閉制御するとともに、算出したＰＦＩ噴射時間及びＰＦＩ噴射タイミングに基づいてポート噴射用インジェクタ２ｂを開閉制御して燃料噴射を実行する。
【００５３】
ここで、上記要求噴射量は、エンジン１で燃焼された混合気の空燃比が理論空燃比となる燃料の量であって、例えば、エンジン運転状態（エンジン回転数ＮＥ及びエンジン負荷率ＫＬ）に基づいてマップ等を用いて算出することができる。また、エンジン負荷率ＫＬは、例えば、エンジン回転速度ＮＥ、エアフロメータ２０４の出力信号から得られる吸入空気量、スロットル開度センサ２０５の出力信号から得られるスロットル開度などに基づいてマップ等を用いて算出することができる。
【００５４】
−失火検出処理−
次に、ＥＣＵ１００が実行する失火検出処理について説明する。
【００５５】
まず、エンジン１の４つの気筒＃１〜＃４のうち、ある気筒（例えば第１気筒＃１）に失火が発生した場合、その気筒（複数の気筒の場合も含む）の爆発行程におけるエンジン回転速度が低下するので、この失火が生じた気筒（第１気筒＃１）の爆発行程中においてクランクシャフト１５が一定クランク角度を回転するのに要する時間が、他の気筒（例えば第２気筒＃２〜第４気筒＃４）の爆発行程時におけるその時間よりも長くなる。したがって、これらの時間を計測して比較することにより失火の発生を認識することが可能になる。
【００５６】
その具体的な処理の一例について説明する。
【００５７】
まず、ＥＣＵ１００は、クランクポジションセンサ（エンジン回転数センサ）２０１及びカムポジションセンサ２０２の各出力信号を所定のクランク角度毎（例えば３０°ＣＡ毎）に取り込み、それらの各信号に基づいて、第１気筒＃１が爆発行程にあるときに、この爆発行程中において、クランクシャフト１５が一定クランク角度（例えば１８０°ＣＡ）を回転するのに要する経過時間Ｔ１と、この第１気筒＃１の爆発行程よりも１回前（３６０°ＣＡ前）に爆発行程を迎えていた第２気筒＃２の爆発行程中においてクランクシャフト１５が一定のクランク角度（例えば１８０°ＣＡ）を回転するのに要する経過時間Ｔ２との差を演算して、第１気筒＃１の回転変動量ΔＮＥ１（＝Ｔ１−Ｔ２）を得る。
【００５８】
また、同様にして、エンジン１の各気筒＃２〜＃４の爆発行程中においてクランクシャフト１５が一定クランク角度（例えば１８０°ＣＡ）を回転するのに要する経過時間Ｔ３（第３気筒＃３）、Ｔ４（第４気筒＃４）、Ｔ２（第２気筒＃２）を順次演算して、第３気筒＃３の回転変動量ΔＮＥ３（＝Ｔ３−Ｔ１）、第４気筒＃４の回転変動量ΔＮＥ４（＝Ｔ４−Ｔ３）、及び、第２気筒＃２の回転変動量ΔＮＥ２（＝Ｔ２−Ｔ４）を得る。
【００５９】
そして、ＥＣＵ１００は、上記演算により求めた各気筒＃１〜＃４の回転変動量ΔＮＥ１〜ΔＮＥ４と失火判定閾値とを比較し、回転変動量ΔＮＥが失火判定閾値を超えている気筒がある場合は「失火が発生している」と判定する。そして、この回転変動量ΔＮＥが失火判定閾値を超える度に、ＥＣＵ１００に備えられている失火カウンタ（総失火カウンタ）１１０が１つずつインクリメントされる。
【００６０】
ここで、回転変動量ΔＮＥに対して設定する失火判定閾値は、失火が発生するエンジン１の回転変動量を実験・シミュレーション等によって取得しておき、その結果を基に経験的に適合した値である。この失火判定閾値はＥＣＵ１００のＲＯＭ１０２内に記憶されている。また、失火判定閾値は、回転変動量ΔＮＥなどに応じて可変に設定するようにしてもよい。なお、各気筒＃１〜＃４の回転変動量は、他の公知の方法によって認識（演算）するようにしてもよい。
【００６１】
また、エンジン１の失火を検出する方法としては、上記したエンジン１の回転変動量を用いて失火を検出する方法に限られることなく、例えば、触媒の前後に配置された空燃比センサとＯ2センサ（酸素センサ）との出力信号（２つのセンサ検出値の差）に基づいて失火の発生を検出する方法など、他の公知の方法を採用してもよい。
【００６２】
−失火異常検出処理−
まず、上述したように、従来の失火異常検出方法にあっては、失火カウンタのカウント数が所定値以上となったときに、単に、機関運転状態及び噴射状態を記憶しているのみであるため、その記憶した噴射状態と実際に失火が発生した機関運転状態（異常時運転状態）とが乖離する場合がある。例えば、図６に示すように、失火が発生した異常時運転状態がＰＦＩ領域（ポート噴射領域）内のポイントであるのにも関わらず、異常時噴射状態をＤＵＡＬ噴射状態と記憶してしまう場合がある。こうした状況になると、ＤＵＡＬ領域と正常判定領域とを同時に満たす領域（図中のハッチング領域）が狭くなるため、正常復帰判定が難しくなる。
【００６３】
このような点を解消するため、本実施形態では、失火異常が発生した際の運転状態に合わせた異常時運転状態を記憶できるようにする。
【００６４】
その具体的な処理の例（失火異常検出処理）について図４のフローチャートを参照して説明する。図４の処理ルーチンはＥＣＵ１００において例えば数ｍｓｅｃごとに繰り返して実行される。
【００６５】
ここで、本実施形態において対象とする運転状態は、エンジン回転数ＮＥ、負荷率ＫＬ及び暖機状態とする。また、暖機状態は、冷間時（水温が暖機温度（例えば８０℃）未満の状態）と高温時（水温が暖機温度以上の状態）のいずれか一方の状態とする。
【００６６】
また、本実施形態にあっては、図４の制御ルーチンが開始された時点からＥＣＵ１００内の検出期間カウンタ１２０のカウントが開始され（別ルーチンでカウント）、エンジン１（クランクシャフト１５）が１回転（１Ｒｅｖ）するごとに、検出期間カウンタ１２０のカウント値が１つずつカウントアップされる。なお、ＥＣＵ１００は、クランクポジションセンサ２０１の出力信号に基づいてエンジン１の回転数を認識している。
【００６７】
図４の制御ルーチンが開始されると、まずは、ステップＳＴ１０１において、失火カウンタ（総失火カウンタ）１１０のカウント値がアップされたか否かを判定する。
【００６８】
ステップＳＴ１０１の判定結果が否定判定（ＮＯ）である場合（失火カウンタ１１０のカウントアップがない場合）はリターンする。ステップＳＴ１０１の判定結果が肯定判定（ＹＥＳ）である場合（失火カウンタ１１０のカウントアップがある場合）はステップＳＴ１０２に進む。
【００６９】
ステップＳＴ１０２では、失火が発生したとき（失火カウンタ１１０のカウントアップがあったとき）の異常時噴射状態がＤＵＡＬ噴射（ＤＵＡＬ異常）であるか否かを判定する。その判定結果が肯定判定（ＹＥＳ）である場合はステップＳＴ１０３に進む。なお、ＤＵＡＬ異常時である場合、失火カウンタ１１０の失火時ＤＵＡＬカウンタのカウント値がインクリメントされる。
【００７０】
ステップＳＴ１０３ではＤＵＡＬ異常時運転状態を更新する。その後にステップＳＴ１０５に進む。このステップＳＴ１０２で実行する異常時運転状態の更新処理について、各運転状態（エンジン回転数ＮＥ、負荷率ＫＬ、暖機状態）ごとに具体的に説明する。
【００７１】
（エンジン回転数ＮＥ）
失火異常時（失火カウンタ１１０のカウントアップ時）のエンジン回転数ＮＥに対して下記の式（１）によりなまし処理（１／２なまし処理）を施してエンジン回転数ＮＥを更新する（更新値を算出する）。
【００７２】
ＮＥ(i)＝（ＮＥ(i-1)＋ＮＥ(i)）／２  ・・・（１）
この式（１）において、ＮＥ(i)は今回の失火異常時（ＤＵＡＬ異常時）のエンジン回転数、ＮＥ(i-1)は前回の失火異常時（ＤＵＡＬ異常時）のエンジン回転数である。
【００７３】
なお、上記式（１）を用いた場合、例えば、前回の失火異常時のエンジン回転数ＮＥが１２００ｒｐｍであり、今回の失火異常時のエンジン回転数ＮＥが１４００ｒｐｍである場合、エンジン回転数ＮＥの更新値は１３００ｒｐｍとなり、次回の失火異常時のエンジン回転数ＮＥが１６００ｒｐｍである場合、その時点でのエンジン回転数ＮＥの更新値は１４５０ｒｐｍとなる。
【００７４】
（負荷率ＫＬ）
失火異常時（失火カウンタ１１０のカウントアップ時）の負荷率ＫＬに対して下記の式（２）によりなまし処理（１／２なまし処理）を施して負荷率ＫＬを更新する（更新値を算出する）。
【００７５】
ＫＬ(i)＝（ＫＬ(i-1)＋ＫＬ(i)）／２  ・・・（２）
この式（２）において、ＫＬ(i)は今回の失火異常時（ＤＵＡＬ異常時）の負荷率、ＫＬ(i-1)は前回の失火異常時（ＤＵＡＬ異常時）の負荷率である。
【００７６】
なお、上記式（２）を用いた場合、例えば、前回の失火異常時の負荷率ＫＬが３０％であり、今回の失火異常時の負荷率ＫＬが４０％である場合、負荷率ＫＬの更新値は３５％となり、次回の失火異常時の負荷率ＫＬが４５％である場合、その時点での負荷率ＫＬの更新値は４０％となる。
【００７７】
（暖機状態）
失火異常時（失火カウンタ１１０のカウントアップ時）の暖機状態については、最新の状態（冷間時または高温時）に順次更新していく。例えば、前回の失火異常時（ＤＵＡＬ異常時）の暖機状態が高温時であり、今回の失火異常時（ＤＵＡＬ異常時）の暖機状態が冷間時である場合は、暖機状態を「冷間時」に更新する。また、このような更新処理に替えて、検出期間中（図８参照）に、１度でも冷間時に失火異常（ＤＵＡＬ異常時）が発した場合は、暖機状態の更新値を「冷間時」に固定するようにしてもよい。
【００７８】
上記ステップＳＴ１０２の判定結果が否定判定（ＮＯ）である場合、ステップＳＴ１０４に進む。ステップＳＴ１０４では、失火が発生したとき（失火カウンタ１１０のカウントアップがあったとき）の異常時噴射状態がＤＩ噴射（ＤＩ異常）であるか否かを判定する。その判定結果が肯定判定（ＹＥＳ）である場合はステップＳＴ１１３に進む。なお、ＤＩ異常時である場合、失火カウンタ１１０の失火時ＤＩカウンタのカウント値がインクリメントされる。
【００７９】
ステップＳＴ１１３では、上記したステップＳＴ１０３と同様な処理により、ＤＩ異常時の運転状態を更新する。つまり、失火異常時（ＤＩ異常時）のエンジン回転数ＮＥ及び負荷率ＫＬについては、上記した式（１）及び式（２）によりなまし処理を施して、ＤＩ異常時におけるエンジン回転数ＮＥ及び負荷率ＫＬを更新する。また、ＤＩ異常時の暖機状態については、最新の状態（冷間時または高温時）に更新する（もしくは、検出期間中に冷間時異常があれば、暖機状態を冷間時に固定する）。この更新処理を行った後にステップＳＴ１０５に進む。
【００８０】
上記ステップＳＴ１０４の判定結果が否定判定（ＮＯ）である場合、つまり、失火が発生したとき（失火カウンタ１１０のカウントアップがあったとき）の異常時噴射状態がＰＦＩ噴射である場合はステップＳＴ１２３に進む。なお、ＰＦＩ異常時である場合、失火カウンタ１１０の失火時ＰＦＩカウンタのカウント値がインクリメントされる。
【００８１】
ステップＳＴ１２３では、上記したステップＳＴ１０３と同様な処理により、ＰＦＩ異常時の運転状態を更新する。つまり、失火異常時（ＰＦＩ異常時）のエンジン回転数ＮＥ及び負荷率ＫＬについては、上記した式（１）及び式（２）によりなまし処理を施して、ＰＦＩ異常時におけるエンジン回転数ＮＥ及び負荷率ＫＬを更新する。また、ＰＦＩ異常時の暖機状態については、最新の状態（冷間時または高温時）に更新する（もしくは、検出期間中に冷間時異常があれば、暖機状態を冷間時に固定する）。この更新処理を行った後にステップＳＴ１０５に進む。
【００８２】
ステップＳＴ１０５では、検出期間カウンタ１２０のカウント値が１０００Ｒｅｖに達しているか否かを判定する。その判定結果が否定判定（ＮＯ）である場合（図８に示す検出期間内である場合）はリターンしてステップＳＴ１０１に戻る。以降、［ステップＳＴ１０１〜ステップＳＴ１０３］、［ステップＳＴ１０１、ステップＳＴ１０２、ステップＳＴ１０４、ステップＳＴ１１３］、または、［ステップＳＴ１０１、ステップＳＴ１０２、ステップＳＴ１０４、ステップＳＴ１２３］の処理が、ステップＳＴ１０５の判定結果が肯定判定（ＹＥＳ）となるまで順次繰り返して実行され、その繰り返し処理の過程において、失火が発生するごとに、その失火発生時の噴射状態に応じて、上述したＤＵＡＬ異常時運転状態、ＤＩ異常時運転状態、及び、ＰＦＩ異常時運転状態がそれぞれ更新されていく。
【００８３】
そして、検出期間カウンタ１２０のカウント値が１０００Ｒｅｖに達した時点（ステップＳＴ１０５の判定結果が肯定判定（ＹＥＳ）となった時点）でステップＳＴ１０６に進む。ここで、検出期間カウンタ１２０のカウント値が１０００Ｒｅｖに達した時点（検出期間終了時）での、ＤＵＡＬ異常時運転状態の更新値（最終なまし値等）、ＤＩ異常時運転状態の更新値（最終なまし値等）、ＰＦＩ異常時運転状態の更新値（最終なまし値等）を、例えばＲＡＭ１０３内に記憶しておく。
【００８４】
ステップＳＴ１０６では異常時噴射状態を決定する。具体的には、上記失火時ＤＵＡＬカウンタのカウント値が所定の判定値以上である場合、ＤＵＡＬ噴射を異常時噴射状態（ＤＵＡＬ異常）と決定する。一方、失火時ＤＵＡＬカウンタのカウント値が判定値未満である場合、上記失火時ＤＩカウンタのカウント値と、上記失火時ＰＦＩカウンタのカウント値とを比較し、カウント値が大きい方の噴射状態を異常時噴射状態と決定する。つまり、失火時ＤＩカウンタのカウント値の方が大きい場合は、ＤＩ噴射を異常時噴射状態（ＤＩ異常）と決定し、失火時ＰＦＩカウンタのカウント値の方が大きい場合は、ＰＦＩ噴射を異常時噴射状態（ＰＦＩ異常）と決定する。
【００８５】
なお、上記ステップＳＴ１０６において異常時噴射状態を決定する処理が、本発明でいう「所定の期間内で失火が発生した際の複数の噴射状態の中から所定の条件に基づいて異常時噴射状態を決定」することに相当する。
【００８６】
ここで、上記失火時ＤＵＡＬカウンタのカウント値に対して設定する判定値は、「１」であってもよいし、「２」以上の正の整数であってもよい。また、失火時ＤＩカウンタのカウント値及び失火時ＰＦＩカウンタのカウント値に対しても判定値を設定しておき、その各カウント値がともに判定値未満である場合は、失火異常なしと判定するようにしてもよい。
【００８７】
次に、ステップＳＴ１０７において、上記ステップＳＴ１０６で決定した異常時噴射状態が「ＤＵＡＬ異常」であるか否かを判定し、その判定結果が肯定判定（ＹＥＳ）である場合はステップＳＴ１０８に進む。
【００８８】
ステップＳＴ１０８では、上記検出期間カウンタ１２０のカウント値が１０００Ｒｅｖに達した時点（検出期間終了時）でのＤＵＡＬ異常時運転状態の更新値を、例えばＲＡＭ１０３内に記憶する。具体的には、上記ステップＳＴ１０６において決定した異常時噴射状態（この場合はＤＵＡＬ異常）とそのＤＵＡＬ異常時運転状態の更新値（エンジン回転数ＮＥ、負荷率ＫＬ、暖機状態）とを対応づけて記憶する。
【００８９】
ステップＳＴ１０７の判定結果が否定判定（ＮＯ）である場合はステップＳＴ１０９に進む。ステップＳＴ１０９では、上記ステップＳＴ１０６で決定した異常時噴射状態が「ＤＩ異常」であるか否かを判定し、その判定結果が肯定判定（ＹＥＳ）である場合はステップＳＴ１１８に進む。
【００９０】
ステップＳＴ１１８では、上記検出期間カウンタ１２０のカウント値が１０００Ｒｅｖに達した時点（検出期間終了時）でのＤＩ異常時運転状態の更新値を、例えばＲＡＭ１０３内に記憶する。具体的には、上記ステップＳＴ１０６において決定した異常時噴射状態（この場合はＤＩ異常）とそのＤＩ異常時運転状態（エンジン回転数ＮＥ、負荷率ＫＬ、暖機状態）の更新値とを対応づけて記憶する。
【００９１】
上記ステップＳＴ１０７の判定結果が否定判定（ＮＯ）である場合、つまり、上記ステップＳＴ１０６で決定した異常時噴射状態が「ＰＦＩ異常」である場合はステップＳＴ１２８に進む。
【００９２】
ステップＳＴ１２８では、上記検出期間カウンタ１２０のカウント値が１０００Ｒｅｖに達した時点（検出期間終了時）でのＰＦＩ異常時運転状態の更新値を、例えばＲＡＭ１０３内に記憶する。具体的には、上記ステップＳＴ１０６において決定した異常時噴射状態（この場合はＰＦＩ異常）とそのＰＦＩ異常時運転状態（エンジン回転数ＮＥ、負荷率ＫＬ、暖機状態）の更新値とを対応づけて記憶する。
【００９３】
以上の処理で、１回の失火異常検出を終了する。なお、このような失火異常検出処理は繰り返して実行するようにしてもよい。
【００９４】
そして、ＥＣＵ１００は、ＲＡＭ１０３内に記憶したＤＵＡＬ異常時運転状態、ＤＩ異常時運転状態、または、ＰＦＩ異常時運転状態に基づいて正常復帰判定を行う。その一例について図５を参照して説明する。
【００９５】
ＲＡＭ１０３内に記憶の異常時噴射状態及び異常時運転状態が、ＤＵＡＬ異常でのＤＵＡＬ異常運転状態である場合、図５に示すように、ＤＵＡＬ異常時運転状態の更新値（なまし値）Ｐｄｕａｌを中心点として、その運転ポイントＰｄｕａｌ（ＮＥｄｕａｌ、ＫＬｄｕａｌ）に対して設定された所定の範囲（例えば、ＮＥｄｕａｌ±３７５ｒｐｍ、ＫＬｄｕａｌ±２０％）の領域を正常判定領域とし、その正常判定領域でのエンジン運転状態で正常復帰判定を行う。
【００９６】
また、同様に、ＲＡＭ１０３内に記憶の異常時噴射状態及び異常時運転状態が、ＤＩ異常でのＤＩ異常運転状態である場合、その運転ポイントＰｄｉ（ＮＥｄｉ、ＫＬｄｉ）に対して設定された所定の範囲（例えば、ＮＥｄｉ±３７５ｒｐｍ、ＫＬｄｉ±２０％）の領域を正常判定領域とし、その正常判定領域でのエンジン運転状態で正常復帰判定を行う。また、同様に、ＲＡＭ１０３内に記憶の異常時噴射状態及び異常時運転状態が、ＰＦＩ異常でのＰＦＩ異常運転状態である場合、その運転ポイントＰｐｆｉ（ＮＥｐｆｉ、ＫＬｐｆｉ）に対して設定された所定の範囲（例えば、ＮＥｐｆｉ±３７５ｒｐｍ、Ｋｐｆｉ±２０％）の領域を正常判定領域とし、その正常判定領域でのエンジン運転状態で正常復帰判定を行う。
【００９７】
以上説明したように、本実施形態によれば、失火が発生した際の運転状態と噴射状態とを記憶し、その噴射状態ごとに異常時運転状態を求めるとともに、失火異常の検出期間内で発生する各噴射状態ごとの失火の回数に基づいて異常時噴射状態を決定する。そして、その決定した異常時噴射状態での異常時運転状態を記憶するようにしているので、失火異常が発生した際の噴射状態（ＤＵＡＬ異常、ＤＩ異常、ＰＦＩ異常）に合わせて異常時運転状態を記憶することができる。これにより、失火異常検出の後に、正常復帰判定を実施するにあたり、その正常復帰判定を適正に行うことができる。しかも、例えば図５に示すように、正常判定領域を大きくすることができるので、正常復帰判定の機会を増やすことができる。
【００９８】
なお、本実施形態において、上記ステップＳＴ１０６において異常時噴射状態を決定する手法としては、上記した方法のほか、例えば、失火時ＤＵＡＬカウンタのカウント値、失火時ＤＩカウンタのカウント値、及び、失火時ＰＦＩカウンタのカウント値のうち、最も大きなカウント値の噴射状態を異常時噴射状態とするという方法を採用してもよい。
【００９９】
（変形例）
以上の実施形態では、噴射状態を、ＤＵＡＬ噴射と、ＤＩ噴射と、ＰＦＩ噴射との３つの状態に区分しているが、本発明はこれに限られることなく、噴射状態を噴き分け率ＫＰＦＩで３つに区分するようにしてもよい。その一例について図７のフローチャートを参照して説明する。この図７の制御ルーチンもＥＣＵ１００において実行可能である。
【０１００】
なお、この例においても、対象とする運転状態は、エンジン回転数ＮＥ、負荷率ＫＬ及び暖機状態とする。また、暖機状態は、冷間時（水温が暖機温度（例えば８０℃）未満の状態）と高温時（水温が暖機温度以上の状態）のいずれか一方の状態とする。
【０１０１】
また、この例においても、図７の制御ルーチンが開始された時点からＥＣＵ１００内の検出期間カウンタ１２０のカウントが開始され（別ルーチンでカウント）、エンジン１（クランクシャフト１５）が１回転（１Ｒｅｖ）するごとに、検出期間カウンタ１２０のカウント値が１つずつカウントアップされる。なお、ＥＣＵ１００は、クランクポジションセンサ２０１の出力信号に基づいてエンジン１の回転数を認識している。
【０１０２】
ここで、この例では、上記した失火時ＤＵＡＬカウンタ、失火時ＤＩカウンタ、失火時ＰＦＩカウンタに替えて、第１失火時カウンタ、第２失火時カウンタ、第３失火時カウンタを用いる。
【０１０３】
図７の制御ルーチンが開始されると、まずは、ステップＳＴ２０１において、失火カウンタ（総失火カウンタ）１１０のカウント値がアップされたか否かを判定する。
【０１０４】
ステップＳＴ２０１の判定結果が否定判定（ＮＯ）である場合（失火カウンタ１１０のカウントアップがない場合）はリターンする。ステップＳＴ２０１の判定結果が肯定判定（ＹＥＳ）である場合（失火カウンタ１１０のカウントアップがある場合）はステップＳＴ２０２に進む。
【０１０５】
ステップＳＴ２０２では、失火が発生したとき（失火カウンタ１１０のカウントアップがあったとき）の異常時噴射状態の噴き分け率ＫＰＦＩが［０％≦ＫＰＦＩ＜３０％］であるか否かを判定する。その判定結果が肯定判定（ＹＥＳ）である場合はステップＳＴ２０３に進む。なお、噴き分け率ＫＰＦＩが［０％≦ＫＰＦＩ＜３０％］の範囲での異常時（０％−３０％異常時）である場合、失火カウンタ１１０の第１失火時カウンタのカウント値がインクリメントされる。
【０１０６】
ステップＳＴ２０３では、上記した図４のステップＳＴ１０３と同様な処理により、噴き分け率ＫＰＦＩが［０％≦ＫＰＦＩ＜３０％］での異常時運転状態（０％−３０％異常時運転状態）を更新する。具体的には、失火異常時（０％−３０％異常時）のエンジン回転数ＮＥ及び負荷率ＫＬについては、上記した式（１）及び式（２）によりなまし処理を施して、０％−３０％異常時におけるエンジン回転数ＮＥ及び負荷率ＫＬを更新する。また、０％−３０％異常時の暖機状態については、最新の状態（冷間時または高温時）に更新する（もしくは、検出期間中に冷間時異常があれば、暖機状態を冷間時に固定する）。この更新処理を行った後にステップＳＴ２０５に進む。
【０１０７】
上記ステップＳＴ２０２の判定結果が否定判定（ＮＯ）である場合、ステップＳＴ２０４に進む。ステップＳＴ２０４では、失火が発生したとき（失火カウンタ１１０のカウントアップがあったとき）の異常時噴射状態の噴き分け率ＫＰＦＩが［３０％≦ＫＰＦＩ＜７０％］であるか否かを判定する。その判定結果が肯定判定（ＹＥＳ）である場合はステップＳＴ２１３に進む。なお、噴き分け率ＫＰＦＩが［３０％≦ＫＰＦＩ＜７０％］の範囲での異常時（３０％−７０％異常時）である場合、失火カウンタ１１０の第２失火時カウンタのカウント値がインクリメントされる。
【０１０８】
ステップＳＴ２１３では、上記した図４のステップＳＴ１０３と同様な処理により、噴き分け率ＫＰＦＩが［３０％≦ＫＰＦＩ＜７０％］での異常時運転状態（３０％−７０％異常時運転状態）を更新する。具体的には、失火異常時（３０％−７０％異常時）のエンジン回転数ＮＥ及び負荷率ＫＬについては、上記した式（１）及び式（２）によりなまし処理を施して、３０％−７０％異常時におけるエンジン回転数ＮＥ及び負荷率ＫＬを更新する。また、３０％−７０％異常時の暖機状態については、最新の状態（冷間時または高温時）に更新する（もしくは、検出期間中に冷間時異常があれば、暖機状態を冷間時に固定する）。この更新処理を行った後にステップＳＴ２０５に進む。
【０１０９】
上記ステップＳＴ２０４の判定結果が否定判定（ＮＯ）である場合、つまり、失火が発生したとき（失火カウンタ１１０のカウントアップがあったとき）の異常時噴射状態の噴き分け率ＫＰＦＩが［７０％≦ＫＰＦＩ≦１００％］である場合はステップＳＴ２２３に進む。なお、噴き分け率ＫＰＦＩが［７０％≦ＫＰＦＩ≦１００％］の範囲での異常時（７０％−１００％異常時）である場合、失火カウンタ１１０の第３失火時カウンタのカウント値がインクリメントされる。
【０１１０】
ステップＳＴ２２３では、上記した図４のステップＳＴ１０３と同様な処理により、噴き分け率ＫＰＦＩが［７０％≦ＫＰＦＩ≦１００％］での異常時運転状態（７０％−１００％異常時運転状態）を更新する。具体的には、失火異常時（７０％−１００％異常時）のエンジン回転数ＮＥ及び負荷率ＫＬについては、上記した式（１）及び式（２）によりなまし処理を施して、７０％−１００％異常時におけるエンジン回転数ＮＥ及び負荷率ＫＬを更新する。また、７０％−１００％異常時の暖機状態については、最新の状態（冷間時または高温時）に更新する（もしくは、検出期間中に冷間時異常があれば、暖機状態を冷間時に固定する）。この更新処理を行った後にステップＳＴ２０５に進む。
【０１１１】
ステップＳＴ２０５では、上記検出期間カウンタ１２０のカウント値が１０００Ｒｅｖに達しているか否かを判定する。その判定結果が否定判定（ＮＯ）である場合（図８に示す検出期間内である場合）はリターンしてステップＳＴ２０１に戻る。以降、［ステップＳＴ２０１〜ステップＳＴ２０３］、［ステップＳＴ２０１、ステップＳＴ２０２、ステップＳＴ２０４、ステップＳＴ２１３］、または、［ステップＳＴ２０１、ステップＳＴ２０２、ステップＳＴ２０４、ステップＳＴ２２３］の処理が、ステップＳＴ２０５の判定結果が肯定判定（ＹＥＳ）となるまで順次繰り返して実行され、その繰り返し処理の過程において、失火が発生するごとに、その失火発生時の噴射状態に応じて、上述した０％−３０％異常時運転状態、３０％−７０％異常時運転状態、及び、７０％−１００％異常時運転状態がそれぞれ更新されていく。
【０１１２】
そして、検出期間カウンタ１２０のカウント値が１０００Ｒｅｖに達した時点（ステップＳＴ２０５の判定結果が肯定判定（ＹＥＳ）となった時点）でステップＳＴ２０６に進む。ここで、検出期間カウンタ１２０のカウント値が１０００Ｒｅｖに達した時点（検出期間終了時）での、０％−３０％異常時運転状態の更新値（最終なまし値等）、３０％−７０％異常時運転状態の更新値（最終なまし値等）、７０％−１００％異常時運転状態の更新値（最終なまし値等）を、例えばＲＡＭ１０３（図１参照）内に記憶しておく。
【０１１３】
ステップＳＴ２０６では異常時噴射状態を決定する。具体的には、上記第１失火時カウンタ（０％−３０％失火時用）のカウント値と、上記第２失火時カウンタ（３０％−７０％異常時用）のカウント値と、上記第３失火時カウンタ（７０％−１００％異常時用）のカウント値とを比較し、カウント値が最大である噴射状態を異常時噴射状態と決定する。つまり、第１失火カウンタのカウント値が最大である場合は異常時噴射状態を「０％−３０％異常」と決定する。また、第２失火時カウンタのカウント値が最大である場合は異常時噴射状態を「３０％−７０％異常」と決定し、第３失火時カウンタのカウント値が最も大きい場合は異常時噴射状態を「７０％−１００％異常」と決定する。
【０１１４】
次に、ステップＳＴ２０７において、上記ステップＳＴ２０６で決定した異常時噴射状態が「０％−３０％異常」であるか否かを判定し、その判定結果が肯定判定（ＹＥＳ）である場合はステップＳＴ２０８に進む。
【０１１５】
ステップＳＴ２０８では、上記検出期間カウンタ１２０のカウント値が１０００Ｒｅｖに達した時点（検出期間終了時）での０％−３０％異常時運転状態の更新値を、例えばＲＡＭ１０３内に記憶する。具体的には、上記ステップＳＴ２０６において決定した異常時噴射状態（この場合は０％−３０％異常）とその０％−３０％異常時運転状態の更新値（エンジン回転数ＮＥ、負荷率ＫＬ、暖機状態）とを対応づけて記憶する。
【０１１６】
ステップＳＴ２０７の判定結果が否定判定（ＮＯ）である場合はステップＳＴ２０９に進む。ステップＳＴ２０９では、上記ステップＳＴ２０６で決定した異常時噴射状態が「３０％−７０％異常」であるか否かを判定し、その判定結果が肯定判定（ＹＥＳ）である場合はステップＳＴ２１８に進む。
【０１１７】
ステップＳＴ２１８では、上記検出期間カウンタ１２０のカウント値が１０００Ｒｅｖに達した時点（検出期間終了時）での３０％−７０％異常時運転状態の更新値を、例えばＲＡＭ１０３内に記憶する。具体的には、上記ステップＳＴ２０６において決定した異常時噴射状態（この場合は３０％−７０％異常）とその３０％−７０％異常時運転状態（エンジン回転数ＮＥ、負荷率ＫＬ、暖機状態）の更新値とを対応づけて記憶する。
【０１１８】
上記ステップＳＴ２０７の判定結果が否定判定（ＮＯ）である場合、つまり、上記ステップＳＴ２０６で決定した異常時噴射状態が「７０％−１００％異常」である場合はステップＳＴ２２８に進む。
【０１１９】
ステップＳＴ２２８では、上記検出期間カウンタ１２０のカウント値が１０００Ｒｅｖに達した時点（検出期間終了時）での７０％−１００％異常時運転状態の更新値を、例えばＲＡＭ１０３内に記憶する。具体的には、上記ステップＳＴ２０６において決定した異常時噴射状態（この場合は７０％−１００％異常）とその７０％−１００％異常時運転状態（エンジン回転数ＮＥ、負荷率ＫＬ、暖機状態）の更新値とを対応づけて記憶する。
【０１２０】
以上の処理で、１回の失火異常検出を終了する。なお、このような失火異常検出処理は繰り返して実行するようにしてもよい。
【０１２１】
そして、ＥＣＵ１００は、ＲＡＭ１０３内に記憶したＤＵＡＬ異常時運転状態、ＤＩ異常時運転状態、または、ＰＦＩ異常時運転状態に基づいて正常復帰判定を行う。その正常復帰判定の際の処理は、上記した実施形態の処理（図５で説明した処理）と基本的に同じであるので、その具体的な説明は省略する。
【０１２２】
この変形例においても、失火異常が発生した際の噴射状態つまり噴き分け率ＫＰＦＩの区分（０％−３０％異常、３０％−７０％異常、７０％−１００％異常）に合わせて、異常時運転状態（エンジン回転数ＮＥ、負荷率ＫＬ、暖機状態）を記憶することできる。これにより、正常復帰判定を実施するにあたり、その正常復帰判定を適正に行うことができる。
【０１２３】
なお、この変形例では、噴射状態を噴き分け率ＫＰＦＩで３つに区分しているが、これに限られることなく、噴射状態を噴き分け率ＫＰＦＩで２つまたは４つ以上に区分して、失火異常を検出するようにしてもよい。
【０１２４】
−他の実施形態−
以上の例では、失火が発生した際のエンジン回転数ＮＥ及び負荷率ＫＬに対して１／２なまし処理を行って異常時運転更新値（なまし値）を求めているが、これに限られることなく、例えば１／４なまし処理など、他の任意のなまし係数のなまし処理にてエンジン回転数ＮＥのなまし値及び負荷率のなまし値を算出するようにしてもよい。
【０１２５】
以上の例では、失火が発生した際のエンジン回転数ＮＥ及び負荷率ＫＬに対してなまし処理を施したなまし値を、異常時運転状態の更新値としているが、本発明はこれに限定されない。
【０１２６】
例えば、図８に示す失火異常の検出期間内において、失火が発生した際の各噴射状態ごとのエンジン回転数ＮＥの平均値、負荷率ＫＬの平均値を各噴射状態ごとの異常時運転状態の更新値としてもよい。また、図８に示す検出期間内において、失火が発生する度に、各噴射状態ごとのエンジン回転数ＮＥ及び負荷率ＫＬを順次最新の値に更新・記憶していき、検出期間が終了した際に、その検出期間内で最後に更新された値を各噴射状態ごとの異常時運転状態の更新値としてもよい。
【０１２７】
以上の例では、検出期間カウンタ１２０のカウント値が１０００Ｒｅｖ（エンジン回転回数＝１０００回転）に達したときに検出期間終了と判定しているが、これに限られることなく、例えば、検出期間カウンタ１２０のカウント値が２００Ｒｅｖ（エンジン回転回数＝２００回転）に達したときに検出期間終了と判定してもよい。また、これら１０００Ｒｅｖや２００Ｒｅｖ以外の任意の数値（Ｒｅｖ）にカウント値が達したときに検出期間終了と判定するようにしてもよい。なお、失火異常の検出期間については、検出開始からの経過時間または走行距離などに基づいて判定するようにしてもよい。
【０１２８】
以上の例では、異常時運転状態の更新値に対して予め設定された所定範囲内の領域を正常判定領域とし、その正常判定領域での機関運転状態で正常復帰判定を行うようにしているが、本発明はこれに限られることなく、異常時運転状態の更新値と同一の機関運転状態で正常復帰判定を行うようにしてもよい。
【０１２９】
以上の例では、４気筒ガソリンエンジンに本発明を適用した場合について説明したが、本発明はこれに限られることなく、例えば６気筒ガソリンエンジンなど他の任意の気筒数のガソリンエンジンにも適用可能である。また、直列多気筒ガソリンエンジンのほか、Ｖ型多気筒ガソリンエンジンの制御にも本発明を適用することができる。
【産業上の利用可能性】
【０１３０】
本発明は、燃焼室内に燃料を直接噴射する筒内用燃料噴射弁と、吸気通路に燃料を噴射する吸気通路用燃料噴射弁とを備え、噴き分け率の異なる複数の噴射状態のうちの１つの噴射状態に選択的に切り替えることが可能な内燃機関の失火異常検出装置に有効に利用することができる。
【符号の説明】
【０１３１】
１  エンジン
１ｄ  燃焼実
１１  吸気通路
１１ａ  吸気ポート
２ａ  筒内噴射用インジェクタ（筒内用燃料噴射弁）
２ｂ  ポート噴射用インジェクタ（吸気通路用燃料噴射弁）
１００  ＥＣＵ
１０３  ＲＡＭ
１１０  失火カウンタ
１２０  検出期間カウンタ
【図１】
0005821566.tif 000002
【図２】
0005821566.tif 000003
【図３】
0005821566.tif 000004
【図４】
0005821566.tif 000005
【図５】
0005821566.tif 000006
【図６】
0005821566.tif 000007
【図７】
0005821566.tif 000008
【図８】
0005821566.tif 000009