(57)【要約】【課題】コストの上昇を抑えつつ、燃料供給系の異常を検出することが可能な燃料供給系異常検出装置を提供する。【解決手段】燃料供給系異常検出装置の構成として、エンジンに設置された空燃比センサの出力信号を基に空燃比がリッチかリーンかを判定する処理と、エンジン運転状態が異常監視運転領域に含まれる場合に前記空燃比がリーンと判定されたリーン判定回数を計数する処理と、前記リーン判定回数が所定回数以上となった場合を異常監視状態として認識する処理と、前記異常監視状態を連続して所定回数認識した場合に燃料供給系の異常と判断する処理とを実行する信号処理部を備えるという構成を採用する。【選択図】図１
2011185222.tif 000002
【特許請求の範囲】
【請求項１】
エンジンに設置された空燃比センサの出力信号を基に空燃比がリッチかリーンかを判定する処理と、
エンジン運転状態が異常監視運転領域に含まれる場合に前記空燃比がリーンと判定されたリーン判定回数を計数する処理と、
前記リーン判定回数が所定回数以上となった場合を異常監視状態として認識する処理と、前記異常監視状態を連続して所定回数認識した場合に燃料供給系の異常と判断する処理
とを実行する信号処理部を備えることを特徴とする燃料供給系異常検出装置。
【請求項２】
エンジンに設置された空燃比センサの出力信号を基に空燃比がリッチかリーンかを判定する処理と、
エンジン運転状態が空燃比フィードバック領域に含まれる場合に前記空燃比のリッチ／リーン判定結果に応じて空燃比フィードバック補正値を算出する処理と、
前記エンジン運転状態が前記空燃比フィードバック領域内の低負荷運転領域に含まれる場合に前記空燃比フィードバック補正値を基に低負荷補正学習値を算出する処理と、
前記エンジン運転状態が前記空燃比フィードバック領域内の高負荷運転領域に含まれる場合に前記空燃比フィードバック補正値を基に高負荷補正学習値を算出する処理と、
前記高負荷補正学習値と前記低負荷補正学習値との偏差が所定値以上となった場合を異常監視状態として認識する処理と、
前記異常監視状態を連続して所定回数認識した場合に燃料供給系の異常と判断する処理
とを実行する信号処理部を備えることを特徴とする燃料供給系異常検出装置。
【請求項３】
燃料噴射弁の電気的異常を検出する燃料噴射弁電気的異常検出部と、燃料ポンプの電気的異常を検出する燃料ポンプ電気的異常検出部との少なくとも一方を備え、
前記信号処理部は、前記燃料噴射弁と前記燃料ポンプとの少なくとも一方に電気的異常が検出された場合には、前記燃料供給系の異常判断を禁止することを特徴とする請求項１または２に記載の燃料供給系異常検出装置。
【請求項４】
点灯によって前記燃料供給系の異常をユーザに報知する報知部を備え、
前記信号処理部は、前記燃料供給系の異常と連続して判断された回数が１回以上所定回数未満の場合、前記燃料供給系に軽度の異常が発生したことをユーザに報知するための第１の点灯パターンにて前記報知部を点灯させることを特徴とする請求項１〜３のいずれか一項に記載の燃料供給系異常検出装置。
【請求項５】
前記信号処理部は、前記燃料供給系の異常と連続して判断された回数が前記所定回数以上となった場合、前記燃料供給系に重度の異常が発生したことをユーザに報知するための第２の点灯パターンにて前記報知部を点灯させることを特徴とする請求項４に記載の燃料供給系異常検出装置。
【請求項６】
前記信号処理部は、
前記エンジンの運転状態に基づいて燃料噴射量を算出する処理と、
前記燃料噴射量に基づいて燃料ポンプの吐出流量が要求される最小限度となるように前記燃料ポンプの通電デューティ比率を決定する処理と、
前記燃料供給系の異常と連続して判断された回数が１回以上所定回数未満の場合に、前記燃料ポンプの吐出流量が増加するように前記通電デューティ比率を補正する処理とを実行することを特徴とする請求項１〜５のいずれか一項に記載の燃料供給系異常検出装置。
【請求項７】
前記信号処理部は、前記燃料供給系の異常と連続して判断された回数が前記所定回数以上となった場合には、前記通電デューティ比率を１００％にすることを特徴とする請求項６に記載の燃料供給系異常検出装置。
【請求項８】
前記信号処理部は、前記燃料供給系の異常と連続して判断された回数が所定回数以上となった場合、前記エンジン運転状態に応じて前記燃料噴射量の減量、または燃料噴射の停止を行うことを特徴とする請求項１〜７のいずれか一項に記載の燃料供給系異常検出装置。
【請求項９】
前記信号処理部は、前記エンジン運転状態に基づいて前記燃料噴射量を算出する一方、前記燃料供給系の異常と連続して判断された回数が所定回数以上となった場合、前記算出した燃料噴射量に基づいて１時間当りの燃料噴射量を算出し、当該１時間当りの燃料噴射量が規定流量以上の場合には、前記規定流量を越えないような前記燃料噴射量を再算出することを特徴とする請求項１〜７のいずれか一項に記載の燃料供給系異常検出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、燃料供給系異常検出装置に関し、特に燃料ポンプを含む燃料供給系の異常を検出し、異常検出時にユーザへ報知すると共に、燃料供給系の破損防止に好適な燃料供給系異常検出装置に関する。
【背景技術】
【０００２】
近年では、小型自動二輪車において排気ガスの低減及び燃費向上を目的として、燃料噴射量を高精度に制御可能な電子制御式燃料噴射装置の採用が促進されている。小型二輪車は大型二輪車と比較して燃料タンクが小さいことから、燃料タンク中に設置する燃料ポンプモジュールの小型化が求められている。この燃料ポンプモジュールの小型化に効果的な項目として、燃料ポンプの燃料吸入孔に配置される燃料フィルタの小型化が挙げられる。しかしながら、燃料フィルタの小型化は、燃料フィルタの有効寿命長さと相反する関係にあり、適切な有効寿命を設定することがより重要になると共に、燃料フィルタの詰まりによる燃料流量不足が発生した場合に、燃料流量不足を検出してユーザに報知し、さらに、燃料ポンプの破損防止のための処理を行うことが必要となる。
【０００３】
このような燃料フィルタを含む燃料供給系の異常検出に関する技術として、例えば下記特許文献１には、燃料ポンプ下流に燃圧検出手段を設け、燃料ポンプの駆動開始後の燃圧検出値が所定の基準値を越えた後の経過時間を計測し、燃圧検出値と経過時間の計測値から得られる燃圧の時間変化率に基づいて、燃料供給系の不良を判定する技術が開示されている。また、下記特許文献２には、燃料タンクからインジェクタへ至る燃料供給経路中に燃料ポンプと燃圧検出手段を設け、燃圧検出値が目標燃圧に一致するように燃料ポンプの回転数をフィードバック制御する際に、フィードバック補正量が基準制御量に対して所定範囲外となった場合に燃料供給系の異常と判定する技術が開示されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開平５−１９５８９４号公報
【特許文献２】特開平８−３２６６１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
小型二輪車は大型二輪車と比較して、車両サイズが小さいことから、センサ等の補機類を設置するためのスペースに制限があり、また、車両価格についても大型二輪車と比較して安価に抑える必要がある。そのため、燃料供給系の異常検出を行うために、燃圧センサ等の燃圧検出手段を用いる場合、センサ設置スペースの確保が困難であり、さらにコストアップになるという問題がある。
【０００６】
また、燃料フィルタの小型化は燃料フィルタの有効寿命長さと相反する関係にあることから、燃料フィルタを小型化すると共に燃料フィルタの詰まりによる燃料流量不足の検出をしない場合、燃料フィルタの詰まりによる燃料流量不足を想定して定期的に燃料フィルタを交換する必要があるため、ユーザのランニングコストが増大するという問題がある。
【０００７】
さらに、燃料フィルタを小型化すると共に燃料フィルタの詰まりによる燃料流量不足の検出をしない場合には、燃料フィルタの詰まりによる燃料流量不足が発生した場合に原因特定が困難であり、燃料フィルタの詰まりをユーザへ報知することができない。つまり、燃料フィルタの交換を速やかに促すことができないことから、エンジンの出力低下によって商品性が低下した状態が継続するという問題がある。
【０００８】
本発明は、上述した事情に鑑みてなされたものであり、コストの上昇を抑えつつ、燃料供給系の異常を検出することが可能な燃料供給系異常検出装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
上記課題を解決するために、本発明では、燃料供給系異常検出装置に係る第１の解決手段として、エンジンに設置された空燃比センサの出力信号を基に空燃比がリッチかリーンかを判定する処理と、エンジン運転状態が異常監視運転領域に含まれる場合に前記空燃比がリーンと判定されたリーン判定回数を計数する処理と、前記リーン判定回数が所定回数以上となった場合を異常監視状態として認識する処理と、前記異常監視状態を連続して所定回数認識した場合に燃料供給系の異常と判断する処理とを実行する信号処理部を備えることを特徴とする。
このような特徴を有する燃料供給系異常検出装置によれば、従来のような燃圧センサ等の燃圧検出手段を設けることなく、既存の空燃比センサを利用して精度良く燃料供給系の異常を検出することができ、コストの上昇を抑えることができる。また、燃料供給系の異常を検出することで、燃料供給系の異常をユーザに報知することができるようになり、ユーザに燃料フィルタ等の交換を促すことができる。
また、エンジン運転状態が空燃比フィードバック領域に含まれていない場合（空燃比フィードバック制御を実施していない場合）であっても、空燃比センサの出力信号のみによって異常監視状態を精度よく認識することができると共に、ガス欠による燃料供給系の異常誤判断を防止することができる。
【００１０】
また、本発明では、燃料供給系異常検出装置に係る第２の解決手段として、エンジンに設置された空燃比センサの出力信号を基に空燃比がリッチかリーンかを判定する処理と、エンジン運転状態が空燃比フィードバック領域に含まれる場合に前記空燃比のリッチ／リーン判定結果に応じて空燃比フィードバック補正値を算出する処理と、前記エンジン運転状態が前記空燃比フィードバック領域内の低負荷運転領域に含まれる場合に前記空燃比フィードバック補正値を基に低負荷補正学習値を算出する処理と、前記エンジン運転状態が前記空燃比フィードバック領域内の高負荷運転領域に含まれる場合に前記空燃比フィードバック補正値を基に高負荷補正学習値を算出する処理と、前記高負荷補正学習値と前記低負荷補正学習値との偏差が所定値以上となった場合を異常監視状態として認識する処理と、前記異常監視状態を連続して所定回数認識した場合に燃料供給系の異常と判断する処理とを実行する信号処理部を備えることを特徴とする。
このような特徴を有する燃料供給系異常検出装置によれば、従来のような燃圧センサ等の燃圧検出手段を設けることなく、既存の空燃比センサを利用して精度良く燃料供給系の異常を検出することができ、コストの上昇を抑えることができる。また、燃料供給系の異常を検出することで、燃料供給系の異常をユーザに報知することができるようになり、ユーザに燃料フィルタ等の交換を促すことができる。
また、空燃比フィードバック領域内の高負荷運転領域と低負荷運転領域との空燃比フィードバック補正値に基づいて異常監視状態を認識するため、燃料にアルコールが混合されて空燃比フィードバック補正値に影響があったとしても、異常監視状態を精度よく認識できると共に、ガス欠による燃料供給系の異常誤判断を防止することができる。
【００１１】
また、本発明では、燃料供給系異常検出装置に係る第３の解決手段として、上記第１または第２の解決手段において、燃料噴射弁の電気的異常を検出する燃料噴射弁電気的異常検出部と、燃料ポンプの電気的異常を検出する燃料ポンプ電気的異常検出部との少なくとも一方を備え、前記信号処理部は、前記燃料噴射弁の電気的異常と前記燃料ポンプの電気的異常との少なくとも一方が検出された場合には、前記燃料供給系の異常判断を禁止することを特徴とする。
これにより、燃料噴射弁と燃料ポンプとの少なくとも一方に電気的異常が発生した場合であっても、それを燃料供給系の異常と誤判断してしまうことを防止することができる。
【００１２】
また、本発明では、燃料供給系異常検出装置に係る第４の解決手段として、上記第１〜第３のいずれかの解決手段において、点灯によって前記燃料供給系の異常をユーザに報知する報知部を備え、前記信号処理部は、前記燃料供給系の異常と連続して判断された回数が１回以上所定回数未満の場合、前記燃料供給系に軽度の異常が発生したことをユーザに報知するための第１の点灯パターンにて前記報知部を点灯させることを特徴とする。
これにより、ユーザに対して、燃料供給系に軽度の異常が発生したことを報知することができ、燃料フィルタ等の交換を促すことができる。
【００１３】
また、本発明では、燃料供給系異常検出装置に係る第５の解決手段として、上記第４の解決手段において、前記信号処理部は、前記燃料供給系の異常と連続して判断された回数が前記所定回数以上となった場合、前記燃料供給系に重度の異常が発生したことをユーザに報知するための第２の点灯パターンにて前記報知部を点灯させることを特徴とする。
これにより、ユーザに対して、燃料供給系に重度の異常が発生したことを報知することができ、燃料フィルタ等の交換を促すことができる。
【００１４】
また、本発明では、燃料供給系異常検出装置に係る第６の解決手段として、上記第１〜第５の解決手段において、前記信号処理部は、前記エンジンの運転状態に基づいて燃料噴射量を算出する処理と、前記燃料噴射量に基づいて燃料ポンプの吐出流量が要求される最小限度となるように前記燃料ポンプの通電デューティ比率を決定する処理と、前記燃料供給系の異常と連続して判断された回数が１回以上所定回数未満の場合に、前記燃料ポンプの吐出流量が増加するように前記通電デューティ比率を補正する処理とを実行することを特徴とする。
このように、燃料供給系の異常と連続して判断された回数が１回以上所定回数未満の場合、つまり比較的軽度の詰まり異常が発生したと推定される場合、燃料ポンプの吐出流量が増加するように燃料ポンプの通電デューティ比率を補正することにより、燃欠の発生を防止することができる。
【００１５】
また、本発明では、燃料供給系異常検出装置に係る第７の解決手段として、上記第６の解決手段において、前記信号処理部は、前記燃料供給系の異常と連続して判断された回数が前記所定回数以上となった場合には、前記通電デューティ比率を１００％にすることを特徴とする。
このように、燃料供給系の異常と連続して判断された回数が所定回数以上となった場合には、つまり比較的重度の詰まり異常が発生したと推定される場合には、燃料ポンプの通電デューティ比率を１００％にして、最大吐出流量で燃料ポンプから燃料噴射弁へ燃料供給することにより、燃欠の発生を防止することができる。
【００１６】
また、本発明では、燃料供給系異常検出装置に係る第８の解決手段として、上記第１〜第７のいずれかの解決手段において、前記信号処理部は、前記燃料供給系の異常と連続して判断された回数が所定回数以上となった場合、前記エンジン運転状態に応じて前記燃料噴射量の減量、または燃料噴射の停止を行うことを特徴とする。
このように、燃料供給系の異常と連続して判断された回数が所定回数以上となった場合、つまり比較的重度の詰まり異常が発生したと推定される場合には、現在のエンジン運転状態に応じて燃料噴射量の減量、または燃料噴射の停止を行うことで、燃料供給系の異常に応じた適切な燃料噴射を行うことができる。
【００１７】
また、本発明では、燃料供給系異常検出装置に係る第９の解決手段として、上記第１〜第７のいずれかの解決手段において、前記信号処理部は、前記エンジン運転状態に基づいて前記燃料噴射量を算出する一方、前記燃料供給系の異常と連続して判断された回数が所定回数以上となった場合、前記算出した燃料噴射量に基づいて１時間当りの燃料噴射量を算出し、当該１時間当りの燃料噴射量が規定流量以上の場合には、前記規定流量を越えないような前記燃料噴射量を再算出することを特徴とする。
このように、比較的重度の詰まり異常が発生したと推定される場合には、１時間当りの燃料噴射量が規定流量を越えないような前記燃料噴射量を再算出することにより、上記第９の解決手段を採用した場合と比べて、高精度に燃料噴射量を制御することができる。
【発明の効果】
【００１８】
本発明によれば、コストの上昇を抑えつつ、燃料供給系の異常を検出することが可能な燃料供給系異常検出装置を提供することができる。
【図面の簡単な説明】
【００１９】
【図１】本実施形態におけるエンジン制御システムの構成概略図である。
【図２】本実施形態における燃料供給系異常検出装置（ＥＣＵ４）のブロック構成図である。
【図３】ＥＥＰＲＯＭ読込み処理を示すフローチャートである。
【図４】燃料ポンプ駆動制御処理を示す第１フローチャートである。
【図５】燃料ポンプ駆動制御処理を示す第２フローチャートである。
【図６】Ｏ２フィードバック制御処理を示すフローチャートである。
【図７】Ｏ２フィードバック制御処理における第１のサブルーチンであるＯ２センサ電圧読込み処理を示すフローチャートである。
【図８】Ｏ２センサ出力電圧値ＶＨＧと空燃比（空気過剰率）λとの関係を示す特性図である。
【図９】Ｏ２フィードバック制御処理における第２のサブルーチンであるＯ２フィードバック補正値算出処理を示す第１フローチャートである。
【図１０】Ｏ２フィードバック補正値算出処理を示す第２フローチャートである。
【図１１】エンジン回転数ＮＥとスロットル開度値ＴＨとの対応関係によってＯ２フィードバック制御を必要とするＯ２フィードバック領域が設定された２次元マップを示す特性図である。
【図１２】Ｏ２フィードバック制御処理における第３のサブルーチンである燃料ポンプ異常判断パラメータ算出処理を示す第１フローチャートである。
【図１３】燃料ポンプ異常判断パラメータ算出処理を示す第２フローチャートである。
【図１４】Ｏ２フィードバック制御処理における第３のサブルーチンである燃料ポンプ異常監視・検出判断処理を示す第１フローチャートである。
【図１５】燃料ポンプ異常監視・検出判断処理を示す第２フローチャートである。
【図１６】燃料噴射量算出処理を示すフローチャートである。
【図１７】燃料噴射処理を示すフローチャートである。
【図１８】燃料供給系異常判断動作を示す第１のタイミングチャートである。
【図１９】燃料供給系異常判断動作を示す第２のタイミングチャートである。
【図２０】燃料噴射量算出処理の変形例である。
【発明を実施するための形態】
【００２０】
以下、本発明の一実施形態について、図面を参照しながら説明する。
図１は、本実施形態における燃料供給系異常検出装置（ＥＣＵ）を備えるエンジン制御システムの構成概略図である。この図１に示すように、本実施形態におけるエンジン制御システムは、エンジン１、燃料供給系２、インジケータ３、ＥＣＵ（Electronic Control Unit）４から概略構成されている。
【００２１】
エンジン１は、４サイクルエンジンであり、シリンダ１０、ピストン１１、コンロッド１２、クランクシャフト１３、吸気バルブ１４、排気バルブ１５、点火プラグ１６、点火コイル１７、吸気管１８、エアクリーナ１９、スロットルバルブ２０、インジェクタ２１、吸気圧センサ２２、吸気温センサ２３、スロットル開度センサ２４、排気管２５、Ｏ２センサ２６、三元触媒コンバータ２７、冷却水温センサ２８及びクランク角度センサ２９から概略構成されている。
【００２２】
シリンダ１０は、内部に設けられたピストン１１を、吸気、圧縮、燃焼（膨張）、排気の４行程を繰り返すことによって往復運動させるための中空の円筒形状部材であり、空気と燃料との混合気を燃焼室１０ｂに供給するための流路である吸気ポート１０ａ、上記混合気を留め、圧縮行程において圧縮された混合気を燃焼行程において燃焼させるための空間である燃焼室１０ｂ、排気行程において燃焼室１０ｂから排気ガスを外部に排出するための流路である排気ポート１０ｃが設けられている。また、このシリンダ１０の外壁には、冷却水を循環させるための冷却水路１０ｄが設けられている。
【００２３】
ピストン１１には、ピストン１１の往復運動を回転運動に変換するためのクランクシャフト１３がコンロッド１２を介して連結されている。クランクシャフト１３は、ピストン１１の往復方向と直交する方向に延在しており、不図示のフライホイール、ミッションギア等と連結されている。また、このクランクシャフト１３には、クランク角度を検出するために用いられるタイミングロータ１３ａが同軸接続されている。このタイミングロータ１３ａの外周には、複数の突起が回転方向に対して、各突起の後端が等角度間隔（例えば２０°間隔）になるように設けられている。
【００２４】
吸気バルブ１４は、吸気ポート１０ａにおける燃焼室１０ｂ側の開口部を開閉するための弁部材であり、不図示のカムシャフトと連結されており、当該カムシャフトによって各行程に応じて開閉駆動される。排気バルブ１５は、排気ポート１０ｃにおける燃焼室１０ｂ側の開口部を開閉するための弁部材であり、不図示のカムシャフトと連結されており、当該カムシャフトによって各行程に応じて開閉駆動される。
【００２５】
点火プラグ１６は、燃焼室１０ｂの内側に電極が露出するように燃焼室１０ｂの上部に設置されており、点火コイル１７から供給される高電圧信号によって電極間に火花を発生させる。点火コイル１７は、１次巻線と２次巻線からなるトランスであり、ＥＣＵ４から１次巻線に供給される点火用電圧信号を昇圧して２次巻線から点火プラグ１６に供給する。
【００２６】
吸気管１８は、空気供給用の配管であり、内部の吸気流路１８ａが吸気ポート１０ａと連通するようにシリンダ１０に連結されている。エアクリーナ１９は、吸気管１８の上流側に設けられており、外部から吸気される空気を清浄化して吸気流路１８ａに送り込む。スロットルバルブ２０は、吸気流路１８ａの内部に設けられており、スロットル操作（もしくはアクセル操作）に応じて回動する。つまり、スロットルバルブ２０の回動によって吸気流路１８ａの断面積が変化し、吸気量が変化する。インジェクタ２１は、吸気ポート１０ａ側に噴射口が露出するように吸気管１８に設置された燃料噴射弁（例えばソレノイドバルブ等）であり、燃料供給系２から供給される燃料を、ＥＣＵ４から入力されるインジェクタ駆動信号に応じて噴射する。
【００２７】
吸気圧センサ２２は、例えばピエゾ抵抗効果を利用した半導体圧力センサであり、スロットルバルブ２０の下流側において吸気流路１８ａ側に感度面が露出するように吸気管１８に設置されており、吸気管１８内の吸気圧に応じた吸気圧信号をＥＣＵ４に出力する。吸気温センサ２３は、スロットルバルブ２０の上流側において吸気流路１８ａ側に感部が露出するように吸気管１８に設置されており、吸気管１８内の吸気温度に応じた吸気温信号をＥＣＵ４に出力する。スロットル開度センサ２４は、スロットルバルブ２０の開度に応じたスロットル開度信号をＥＣＵ４に出力する。
【００２８】
排気管２５は、排気ガス排出用の配管であり、内部の排気流路２５ａが排気ポート１０ｃと連通するようにシリンダ１０に連結されている。Ｏ２センサ２６は、例えばガス検知物質としてジルコニアを用いた酸素センサ（空燃比センサ）であり、ガス接触部が排気流路２５ａ側に露出するように排気管２５に設置されており、排気ガスの酸素濃度に応じた電圧信号をＥＣＵ４に出力する。三元触媒コンバータ２７は、例えば触媒としてプラチナ、パラジウム及びロジウムを用いた浄化装置であり、排気ガスが内部を流通するように排気流路２５ａ中に設置されており、排気ガスに含まれる有害成分（炭化水素、一酸化炭素、窒素酸化物）を触媒反応によって除去する。
【００２９】
冷却水温センサ２８は、冷却水路１０ｄ側に感部が露出するようにシリンダ１０に設置されており、冷却水路１０ｄを流れる冷却水の温度に応じた冷却水温信号をＥＣＵ４に出力する。クランク角度センサ２９は、例えば電磁式ピックアップセンサであり、タイミングロータ１３ａの外周に設けられた各突起がセンサ近傍を通過する毎に極性の異なる１対のパルス状の信号をＥＣＵ４に出力する。より詳細には、クランク角度センサ２９は、回転方向に対して各突起の前端が通過した場合、負極性の振幅を有するパルス状の信号を出力し、回転方向に対して各突起の後端が通過した場合、正極性の振幅を有するパルス状の信号を出力する。
【００３０】
燃料供給系２は、燃料タンク３０と、この燃料タンク３０内に設置され、燃料ポンプ３１ａ、燃料フィルタ３１ｂ及びプレッシャレギュレータ３１ｃを備える燃料ポンプモジュール３１とから構成されている。燃料タンク３０は、例えばガソリン燃料、或いはアルコール燃料などの燃料を貯留するための容器である。燃料ポンプ３１ａは、ＥＣＵ４から入力される燃料ポンプ駆動信号に応じて燃料タンク３０内の燃料を吸入し、プレッシャレギュレータ３１ｃを介してインジェクタ２１の燃料入口に圧送する。燃料フィルタ３１ｂは、燃料ポンプ３１ａの燃料吸入孔に配置された異物除去用フィルタである。プレッシャレギュレータ３１ｃは、インジェクタ２１に供給される燃料の圧力（燃圧）を所望の値に保持するための調圧弁である。
【００３１】
インジケータ３は、ＥＣＵ４から入力されるインジケータ駆動信号に応じて点灯するＬＥＤランプ等から構成されており、燃料供給系２の異常やエンジン１の動作状態等をユーザに報知する報知部として用いられる。
【００３２】
ＥＣＵ４は、エンジン制御システムの全体動作を統括制御するものであり、図２に示すように、波形整形回路４０、回転数カウンタ４１、Ａ／Ｄ変換器４２、点火回路４３、インジェクタ駆動回路４４、インジェクタ電気的異常検出回路４５、燃料ポンプ駆動回路４６、燃料ポンプ電気的異常検出回路４７、インジケータ駆動回路４８、ＲＯＭ(Read Only Memory)４９、ＥＥＰＲＯＭ（Electronically Erasable and Programmable Read Only Memory）５０、ＲＡＭ(Random Access Memory)５１、タイマ５２及びＣＰＵ（Central Processing Unit）５３を備えている。
【００３３】
波形整形回路４０は、クランク角度センサ２９から入力されるクランク信号を、方形波のパルス信号（例えば負極性のクランク信号をハイレベルとし、正極性及びグランドレベルのクランク信号をローレベルとする）に波形整形し、回転数カウンタ４１及びＣＰＵ５３に出力する。つまり、この方形波のパルス信号は、クランクシャフト１３が２０°回転するのに要した時間を周期とする信号である。以下では、この波形整形回路４０から出力される方形波のパルス信号をクランクパルス信号と称す。
【００３４】
回転数カウンタ４１は、上記波形整形回路４０から入力されるクランクパルス信号に基づいてエンジン回転数を算出し、その算出結果をＣＰＵ５３に出力する。Ａ／Ｄ変換器４２は、吸気圧センサ２２から入力される吸気圧信号、吸気温センサ２３から入力される吸気温信号、スロットル開度センサ２４から入力されるスロットル開度信号、Ｏ２センサ２６から入力される電圧信号、及び冷却水温センサ２８から入力される冷却水温信号を、デジタル信号（吸気圧値、吸気温値、スロットル開度値、Ｏ２センサ出力電圧値、冷却水温値）に変換してＣＰＵ５３に出力する。点火回路４３は、不図示のバッテリから供給される電源電圧を蓄積するコンデンサを備え、ＣＰＵ５３から入力される点火制御信号に応じて、コンデンサに蓄積された電荷を点火用電圧信号として点火コイル１７の１次巻線に放電する。
【００３５】
インジェクタ駆動回路４４は、ＣＰＵ５３から入力される燃料噴射制御信号に応じて、インジェクタ駆動信号を生成してインジェクタ２１に出力する。インジェクタ電気的異常検出回路４５（燃料噴射弁電気的異常検出部）は、インジェクタ２１の電気的な異常を検出するための回路であり、インジェクタ駆動状態、即ち通電／非通電の状態信号をＣＰＵ５３に出力する。具体的には、このインジェクタ電気的異常検出回路４５は、インジェクタ２１が通電状態にある場合にローレベル信号を出力し、非通電状態にある場合にハイレベル信号をＣＰＵ５３に出力する。インジェクタ駆動回路４４から出力されるインジェクタ駆動信号とインジェクタ電気的異常検出回路４５から出力される通電／非通電状態信号との論理が一致している場合に、インジェクタ２１は電気的に正常であると判断できる一方、断線、短絡等が発生した場合には上記の論理が不一致となり、インジェクタ２１は電気的に異常であると判断できる。
【００３６】
燃料ポンプ駆動回路４６は、ＣＰＵ５３から入力される燃料供給制御信号に応じて、燃料ポンプ駆動信号を生成して燃料ポンプ３１ａに出力する。燃料ポンプ異常検知回路４７（燃料ポンプ電気的異常検出部）は、燃料ポンプ３１ａの電気的な異常を検出するための回路であり、燃料ポンプ駆動状態、即ち通電／非通電の状態信号をＣＰＵ５３に出力する。具体的には、この燃料ポンプ電気的異常検出回路４７は、燃料ポンプ３１ａが通電状態にある場合にローレベル信号を出力し、非通電状態にある場合にハイレベル信号をＣＰＵ５３に出力する。燃料ポンプ駆動回路４６から出力される燃料ポンプ駆動信号と燃料ポンプ電気的異常検出回路４７から出力される通電／非通電状態信号との論理が一致している場合に、燃料ポンプ３１ａは電気的に正常であると判断できる一方、断線、短絡等が発生した場合には上記の論理が不一致となり、燃料ポンプ３１ａは電気的に異常であると判断できる。
【００３７】
インジケータ駆動回路４８は、ＣＰＵ５３から入力される報知制御信号に応じて、インジケータ駆動信号を生成してインジケータ３に出力する。ＲＯＭ４９は、ＣＰＵ５３の各種機能を実現するための制御プログラムや各種設定データを予め記憶している不揮発性メモリである。ＥＥＰＲＯＭ５０は、ＣＰＵ５３からの要求に応じて各種データを記憶する書き換え可能な不揮発性メモリである。ＲＡＭ５１は、ＣＰＵ５３が制御プログラムに従って各種処理を実行する際に、データの一時保存先に用いられる揮発性のワーキングメモリである。タイマ５２は、ＣＰＵ５３による制御の下、タイムカウントを行い、その結果（カウント値）をＣＰＵ５３に出力する。
【００３８】
ＣＰＵ５３（信号処理部）は、ＲＯＭ４９に記憶されている制御プログラムに従い、波形整形回路４０から得られるクランクパルス信号と、回転数カウンタ４１から得られるエンジン回転数と、Ａ／Ｄ変換器４２から得られる吸気圧値、吸気温値、スロットル開度値、Ｏ２センサ出力電圧値及び冷却水温値とに基づいてエンジン１の運転制御を行う。
【００３９】
また、このＣＰＵ５３は、本実施形態における特徴的な機能として、Ｏ２センサ出力電圧値（Ｏ２センサ（空燃比センサ）の出力信号）に基づいて、エンジン運転状態に見合った燃料噴射量が得られているか否かを判定し、否の場合に燃料供給系２の異常と判断する燃料供給系異常検出機能を有している。なお、本実施形態において、燃料供給系２の異常とは、主に燃料フィルタ３１ｂの詰まりによる燃料供給不足（いわゆる燃欠）を指し、燃料ポンプ３１ａやインジェクタ２１の電気的異常は除外している。
以下、上記の燃料供給系異常検出機能を実現するために、ＣＰＵ５３が実行するＥＥＰＲＯＭ読込み処理、燃料ポンプ駆動制御処理、Ｏ２フィードバック制御処理、燃料噴射量算出処理及び燃料噴射処理について詳細に説明する。
【００４０】
〔ＥＥＰＲＯＭ読込み処理〕
最初に、システム起動時、つまりＥＣＵ４の電源オン時（ＣＰＵ５３の起動時）に１回実行されるＥＥＰＲＯＭ読込み処理について、図３のフローチャートを参照しながら説明する。
＜ステップＳ１＞
図３に示すように、ＣＰＵ５３は、ＥＥＰＲＯＭ読込み処理におけるステップＳ１の処理として、プログラムの初回実施か否かを判定し、「Ｙｅｓ」の場合にはステップＳ２の処理に移行する一方、「Ｎｏ」の場合にはＥＥＰＲＯＭ読込み処理を終了する。
【００４１】
＜ステップＳ２＞
ＣＰＵ５３は、上記ステップＳ１において「Ｙｅｓ」の場合、ステップＳ２の処理として、Ｏ２フィードバック補正学習値の読込み及びセットを行う。具体的には、ＣＰＵ５３は、ＥＥＰＲＯＭ５０に記憶されている３つのＯ２フィードバック補正学習値MREFHG1、MREFHG2及びMREFHG3を読込んでＲＡＭ５１にセット（記憶）する。
【００４２】
なお、詳細は後述するが、これらＯ２フィードバック補正学習値MREFHG1、MREFHG2及びMREFHG3は、Ｏ２フィードバック制御処理が２０ｍｓ周期で実行される度に算出及び更新されてＥＥＰＲＯＭ５０に上書き保存されるパラメータである。つまり、前回のエンジン運転時において、電源オフ前に最終的に得られたＯ２フィードバック補正学習値MREFHG1、MREFHG2及びMREFHG3が、このステップＳ２によってＲＡＭ５１にセットされることになる。
【００４３】
＜ステップＳ３＞
続いて、ＣＰＵ５３は、ステップＳ３の処理として、燃料ポンプ異常検出カウンタCTXAPXFPF及び燃料ポンプ異常監視カウンタCTXDPXFPFの読込み及びセットを行った後、ＥＥＰＲＯＭ読込み処理を終了する。具体的には、ＣＰＵ５３は、ＥＥＰＲＯＭ５０に記憶されている燃料ポンプ異常検出カウンタCTXAPXFPF及び燃料ポンプ異常監視カウンタCTXDPXFPFを読込んでＲＡＭ５１にセットする。
【００４４】
なお、詳細は後述するが、これら燃料ポンプ異常検出カウンタCTXAPXFPF及び燃料ポンプ異常監視カウンタCTXDPXFPFも、Ｏ２フィードバック制御処理が２０ｍｓ周期で実行される度に算出及び更新されてＥＥＰＲＯＭ５０に上書き保存されるパラメータである。つまり、前回のエンジン運転時において、電源オフ前に最終的に得られた燃料ポンプ異常検出カウンタCTXAPXFPF及び燃料ポンプ異常監視カウンタCTXDPXFPFが、このステップＳ３によってＲＡＭ５１にセットされることになる。
【００４５】
〔燃料ポンプ駆動制御処理〕
次に、エンジン１の運転制御中において、５ｍｓ周期で実行される燃料ポンプ駆動制御処理について、図４及び図５のフローチャートを参照しながら詳細に説明する。
＜ステップＳ１１＞
図４に示すように、ＣＰＵ５３は、燃料ポンプ駆動制御処理におけるステップＳ１１の処理として、燃料ポンプ３１ａの初回駆動が実施済みか否かを判定し、「Ｎｏ」の場合にはステップＳ１２の処理に移行する一方、「Ｙｅｓ」の場合にはステップＳ１４の処理に移行する。具体的には、ＣＰＵ５３は、燃料ポンプ初回駆動済みフラグF_PUMPINIが「１」にセットされていれば「Ｙｅｓ」と判定し、「０」にセットされていれば「Ｎｏ」と判定する。
【００４６】
＜ステップＳ１２＞
ＣＰＵ５３は、上記ステップＳ１１において「Ｎｏ」の場合、つまり燃料ポンプ３１ａの初回駆動が未実施であった場合、ステップＳ１２の処理として、初回駆動時間TMFFPONが経過したか否かを判定し、「Ｙｅｓ」の場合にはステップＳ１３の処理に移行する一方、「Ｎｏ」の場合にはステップＳ２１の処理に移行する。ここで、初回駆動時間TMFFPONは、ＣＰＵ５３の起動時において３ｍｓに初期設定されるパラメータであり、ＣＰＵ５３は、タイマ５２に対して初回駆動時間TMFFPONのカウントダウンを指示し、タイマ５２からタイムアップ（TMFFPON＝０）の通知を受けた場合に、初回駆動時間TMFFPONが経過したと判定する。
【００４７】
＜ステップＳ１３＞
ＣＰＵ５３は、上記ステップＳ１２において「Ｙｅｓ」の場合、つまり初回駆動時間TMFFPONが経過した場合、ステップＳ１３の処理として、燃料ポンプ初回駆動済みフラグF_PUMPINIを「１」にセットする。
【００４８】
＜ステップＳ１４＞
ＣＰＵ５３は、上記ステップＳ１１において「Ｙｅｓ」の場合（つまり燃料ポンプ初回駆動済みフラグF_PUMPINI＝１の場合）、または上記ステップＳ１３の終了後に、ステップＳ１４の処理として、回転数カウンタ４１から取得したエンジン回転数ＮＥを参照して、エンストが発生したか否かを判定し、「Ｎｏ」の場合にはステップＳ１５の処理に移行する一方、「Ｙｅｓ」の場合にはステップＳ２２の処理に移行する。なお、ＣＰＵ５３は、エンジン回転数ＮＥが「０」であった場合に、エンストが発生したと判定する。
【００４９】
＜ステップＳ１５＞
ＣＰＵ５３は、上記ステップＳ１４において「Ｎｏ」の場合、つまりエンストが発生していなかった場合、ステップ１５の処理として、回転数カウンタ４１から取得したエンジン回転数ＮＥと、後述の燃料噴射量算出処理によって算出された燃料噴射量TIOUTとに基づいて、燃料ポンプ３１ａの吐出流量が要求される最小限度となるように燃料ポンプ通電デューティ比率を算出する。具体的には、エンジン回転数ＮＥと、燃料噴射量TIOUTと、燃料ポンプ通電デューティ比率との対応関係を示す３次元マップがＲＯＭ４９に予め記憶されており、ＣＰＵ５３は、上記３次元マップを用いて、エンジン回転数ＮＥ及び燃料噴射量TIOUTの現在値に対応する燃料ポンプ通電デューティ比率を算出する。
【００５０】
なお、燃料ポンプ通電デューティ比率とは、燃料ポンプ３１ａに対する通電時間と非通電時間との比率（言い換えれば、燃料ポンプ３１ａに供給する燃料ポンプ駆動信号のデューティ比率）を指し、通電時間の割合が大きいほど（デューティ比率が高いほど）燃料ポンプ３１ａの吐出流量は増大する。つまり、エンジン回転数ＮＥが高いほど、また、要求される燃料噴射量TIOUTが大きいほど、燃料ポンプ通電デューティ比率が高くなるように３次元マップは設定されている。
【００５１】
＜ステップＳ１６＞
続いて、ＣＰＵ５３は、ステップＳ１６の処理として、燃料ポンプ異常検出カウンタCTXAPXFPFを参照して、燃料ポンプ異常検出回数が所定回数（例えば３回）以上か否かを判定し、「Ｎｏ」の場合にはステップＳ１７の処理に移行する一方、「Ｙｅｓ」の場合にはステップＳ２１の処理に移行する。なお、燃料ポンプ異常検出カウンタCTXAPXFPFとは、後述のＯ２フィードバック制御処理において、燃料供給系２の異常と連続して判断された場合にインクリメントされるカウンタ変数であり、つまり燃料供給系２の異常と連続して判断された回数を示している。
【００５２】
＜ステップＳ１７＞
ＣＰＵ５３は、上記ステップＳ１６において「Ｎｏ」の場合、つまり燃料ポンプ異常検出カウンタCTXAPXFPFが「３」未満の場合、ステップＳ１７の処理として、燃料ポンプ異常検出済み（CTXAPXFPF≧１）か否かを判定し、「Ｙｅｓ」の場合にはステップＳ１８の処理に移行する一方、「Ｎｏ」の場合にはステップＳ２０の処理に移行する。
【００５３】
＜ステップＳ１８＞
ＣＰＵ５３は、上記ステップＳ１７において「Ｙｅｓ」の場合、つまり燃料ポンプ異常検出回数が１回以上３回未満（３＞CTXAPXFPF≧１）の場合、ステップＳ１８の処理として、ステップＳ１５で算出した燃料ポンプ通電デューティ比率を補正する。具体的には、ＣＰＵ５３は、燃料ポンプ３１ａの吐出流量が増加する方向に燃料ポンプ通電デューティ比率を補正する（例えば通電時間を１．５倍とする）。
【００５４】
＜ステップＳ１９＞
そして、ＣＰＵ５３は、ステップＳ１９の処理として、燃料ポンプ通電デューティ比率が１００％以上か否かを判定し、「Ｎｏ」の場合にはステップＳ２０の処理に移行する一方、「Ｙｅｓ」の場合にはステップＳ２１の処理に移行する。
【００５５】
＜ステップＳ２０＞
ＣＰＵ５３は、上記ステップＳ１７において「Ｎｏ」の場合（つまり燃料ポンプ異常検出回数が０回（CTXAPXFPF＝０）の場合）、または上記ステップＳ１９において「Ｎｏ」の場合（つまり燃料ポンプ通電デューティ比率が１００％未満の場合）、ステップＳ２０の処理として、燃料ポンプ駆動回路４６を制御して燃料ポンプ通電デューティ比率を有する燃料ポンプ駆動信号を燃料ポンプ３１ａに供給させる。これにより、燃料ポンプ通電デューティ比率に応じた量の燃料が燃料ポンプ３１ａからインジェクタ２１へ供給されることになる。
【００５６】
＜ステップＳ２１＞
一方、ＣＰＵ５３は、上記ステップＳ１２において「Ｎｏ」の場合（つまり初回駆動時間が経過していない場合）、または上記ステップＳ１６において「Ｙｅｓ」の場合（つまり燃料ポンプ異常検出回数が３回以上（CTXAPXFPF≧３）の場合）、または上記ステップＳ１９において「Ｙｅｓ」の場合（つまり燃料ポンプ通電デューティ比率が１００％以上の場合）、ステップＳ２１の処理として、燃料ポンプ駆動回路４６を制御して１００％の燃料ポンプ通電デューティ比率を有する燃料ポンプ駆動信号を燃料ポンプ３１ａに供給させる（つまり常時通電）。これにより、１００％の燃料ポンプ通電デューティ比率に応じた量（最大吐出流量）の燃料が燃料ポンプ３１ａからインジェクタ２１へ供給されることになる。
【００５７】
＜ステップＳ２２＞
一方、ＣＰＵ５３は、上記ステップＳ１４において「Ｙｅｓ」の場合（つまりエンストが発生した場合）、ステップＳ２２の処理として、燃料ポンプ駆動回路４６を制御して燃料ポンプ３１ａへの通電を停止させる（燃料ポンプ駆動信号の供給を停止させる）。
【００５８】
＜ステップＳ２３＞
続いて、図５に示すように、ＣＰＵ５３は、上記ステップＳ２０、Ｓ２１、またはＳ２２の処理終了後に、ステップＳ２３の処理として、現在、燃料ポンプ３１ａに対する通電がオンか否か（通電期間か否か）を判定し、「Ｙｅｓ」の場合にはステップＳ２４の処理に移行する一方、「Ｎｏ」の場合にはステップＳ２５の処理に移行する。
【００５９】
＜ステップＳ２４＞
ＣＰＵ５３は、上記ステップＳ２３において「Ｙｅｓ」の場合（つまり通電期間中の場合）、ステップＳ２４の処理として、燃料ポンプ電気的異常検出回路４７から入力される通電／非通電状態信号がローレベルか否かを判定し、「Ｙｅｓ」の場合、つまり燃料ポンプ駆動信号と通電／非通電状態信号との論理が一致し、燃料ポンプ３１ａが電気的に正常であると判断される場合には燃料ポンプ駆動制御処理を終了する一方、「Ｎｏ」の場合、つまり燃料ポンプ３１ａが電気的に異常であると判断される場合にはステップＳ２６の処理に移行する。
【００６０】
＜ステップＳ２５＞
ＣＰＵ５３は、上記ステップＳ２３において「Ｎｏ」の場合（つまり非通電期間中の場合）、ステップＳ２５の処理として、燃料ポンプ電気的異常検出回路４７から入力される通電／非通電状態信号がハイレベルか否かを判定し、「Ｙｅｓ」の場合、つまり燃料ポンプ駆動信号と通電／非通電状態信号との論理が一致し、燃料ポンプ３１ａが電気的に正常であると判断される場合には燃料ポンプ駆動制御処理を終了する一方、「Ｎｏ」の場合、つまり燃料ポンプ３１ａが電気的に異常であると判断される場合にはステップＳ２６の処理に移行する。
【００６１】
＜ステップＳ２６＞
ＣＰＵ５３は、上記ステップＳ２４において「Ｎｏ」の場合、または上記ステップＳ２５において「Ｎｏ」の場合、つまり燃料ポンプ３１ａに電気的異常が発生した場合、ステップＳ２６の処理として、燃料ポンプ電気的異常検出フラグF_XDRXFPRを「１」にセットした後、燃料ポンプ駆動制御処理を終了する。
【００６２】
以上のように、燃料ポンプ駆動制御処理では、燃料供給系２の異常と連続して判断された回数が１回以上所定回数（例えば３回）未満の場合、つまり比較的軽度の詰まり異常が発生したと推定される場合、燃料ポンプ３１ａの吐出流量が増加するように燃料ポンプ通電デューティ比率を補正することにより、燃欠の発生を防止している。また、燃料供給系２の異常と連続して判断された回数が所定回数（例えば３回）以上となった場合、つまり比較的重度の詰まり異常が発生したと推定される場合には、燃料ポンプ通電デューティ比率を１００％にして、最大吐出流量で燃料ポンプ３１ａからインジェクタ２１へ燃料供給することにより、燃欠の発生を防止している。
【００６３】
〔Ｏ２フィードバック制御処理〕
次に、エンジン１の運転制御中において、２０ｍｓ周期で実行されるＯ２フィードバック制御処理について、図６〜図１５を参照しながら詳細に説明する。図６は、Ｏ２フィードバック制御処理のメインルーチンを表すフローチャートである。この図６に示すように、Ｏ２フィードバック制御処理は、Ｏ２センサ電圧読込み処理（ステップＳ３１）と、Ｏ２フィードバック補正値算出処理（ステップＳ３２）と、燃料ポンプ異常判断パラメータ算出処理（ステップＳ３３）と、燃料ポンプ異常監視・検出判断処理（ステップＳ３４）との４つのサブルーチンから構成されている。以下、各サブルーチンの処理について詳細に説明する。
【００６４】
（１）Ｏ２センサ電圧読込み処理
まず、図７のフローチャートを参照しながら、Ｏ２フィードバック制御処理における第１のサブルーチンであるＯ２センサ電圧読込み処理について説明する。
＜ステップＳ３１＿１＞
図７に示すように、ＣＰＵ５３は、Ｏ２センサ電圧読込み処理におけるステップＳ３１＿１の処理として、Ｏ２センサ電圧判定フラグF_VHGREFの値を前回Ｏ２センサ電圧判定フラグF_VHGREF1にセットすることで、前回Ｏ２センサ電圧判定フラグF_VHGREF1の更新を行う。なお、後述のように、Ｏ２センサ電圧判定フラグF_VHGREFが「１」の時、空気過剰率（空燃比）が「リッチ」であることを示し、Ｏ２センサ電圧判定フラグF_VHGREFが「０」の時、空燃比が「リーン」であることを示している。
【００６５】
＜ステップＳ３１＿２＞
そして、ＣＰＵ５３は、ステップＳ３１＿２の処理として、Ａ／Ｄ変換器４２からＯ２センサ出力電圧値を読込み、その値をＯ２センサ出力電圧VHGにセットする。
【００６６】
＜ステップＳ３１＿３＞
そして、ＣＰＵ５３は、ステップＳ３１＿３の処理として、Ｏ２センサ出力電圧VHGが閾値VHGREF以上か否かを判定し、「Ｙｅｓ」の場合にはステップＳ３１＿４の処理に移行する一方、「Ｎｏ」の場合にはステップＳ３１＿７の処理に移行する。ここで、閾値VHGREFは、Ｏ２センサ出力電圧VHGから現在の空燃比が「リッチ」なのか「リーン」なのかを判定するために設定された電圧値（例えば０．４５Ｖ）である。
【００６７】
一般的に、Ｏ２センサ２６の出力電圧値（起電力）VHGと空気過剰率（空燃比）λとの関係は図８のようになることが知られており、理論空燃比（λ＝１）に対応する出力電圧値VHGを閾値VHGREFとして設定することで、Ｏ２センサ出力電圧VHGが閾値VHGREF以上であれば「リッチ」、閾値VHGREF未満であれば「リーン」と判定することができる。なお、周知のように、理論空燃比λ＝１を中心として、空燃比λが「リッチ」領域と「リーン」領域とを行き来するように燃料噴射量を制御することを、Ｏ２フィードバック制御（或いはλ＝１フィードバック制御、空燃比フィードバック制御等）と呼ぶ。
【００６８】
＜ステップＳ３１＿４＞
図７に戻り、ＣＰＵ５３は、上記ステップＳ３１＿３において「Ｙｅｓ」の場合、つまり現在の空燃比が「リッチ」の場合、ステップＳ３１＿４の処理として、Ｏ２センサ電圧判定フラグF_VHGREFに「１」をセットする。
【００６９】
＜ステップＳ３１＿５＞
そして、ＣＰＵ５３は、ステップＳ３１＿５の処理として、前回Ｏ２センサ電圧判定フラグF_VHGREF1が「０」か否か（つまり前回「リーン」と判定していたか否か）を判定し、「Ｎｏ」の場合にはステップＳ３１＿６の処理に移行する一方、「Ｙｅｓ」の場合にはステップＳ３１＿１０の処理に移行する。
【００７０】
＜ステップＳ３１＿６＞
ＣＰＵ５３は、上記ステップＳ３１＿５において「Ｎｏ」の場合、つまり前回「リッチ」と判定していた場合、ステップＳ３１＿６の処理として、前回と今回とで「リッチ」から「リーン」への反転がなかったと判断して、リッチ／リーン反転フラグF_VHGTGLに「０」をセットした後、Ｏ２センサ電圧読込み処理を終了する。
【００７１】
＜ステップＳ３１＿７＞
一方、ＣＰＵ５３は、上記ステップＳ３１＿３において「Ｎｏ」の場合、つまり現在の空燃比が「リーン」の場合、ステップＳ３１＿７の処理として、Ｏ２センサ電圧判定フラグF_VHGREFに「０」をセットする。
【００７２】
＜ステップＳ３１＿８＞
そして、ＣＰＵ５３は、ステップＳ３１＿８の処理として、前回Ｏ２センサ電圧判定フラグF_VHGREF1が「１」か否か（つまり前回「リッチ」と判定していたか否か）を判定し、「Ｎｏ」の場合にはステップＳ３１＿９の処理に移行する一方、「Ｙｅｓ」の場合にはステップＳ３１＿１０の処理に移行する。
【００７３】
＜ステップＳ３１＿９＞
ＣＰＵ５３は、上記ステップＳ３１＿８において「Ｎｏ」の場合、つまり前回「リーン」と判定していた場合、ステップＳ３１＿９の処理として、前回と今回とで「リーン」から「リッチ」への反転がなかったと判断して、リッチ／リーン反転フラグF_VHGTGLに「０」をセットした後、Ｏ２センサ電圧読込み処理を終了する。
【００７４】
＜ステップＳ３１＿１０＞
ＣＰＵ５３は、上記ステップＳ３１＿５において「Ｙｅｓ」の場合（つまり前回「リーン」と判定していた場合）、または上記ステップＳ３１＿８において「Ｙｅｓ」の場合（つまり前回「リッチ」と判定していた場合）、ステップＳ３１＿１０の処理として、前回と今回とで「リッチ」から「リーン」への反転、或いは「リーン」から「リッチ」への反転があったと判断して、リッチ／リーン反転フラグF_VHGTGLに「１」をセットした後、Ｏ２センサ電圧読込み処理を終了する。
【００７５】
（２）Ｏ２フィードバック補正値算出処理
続いて、図９及び図１０のフローチャートを参照しながら、Ｏ２フィードバック制御処理における第２のサブルーチンであるＯ２フィードバック補正値算出処理を説明する。
＜ステップＳ３２＿１＞
図９に示すように、ＣＰＵ５３は、Ｏ２フィードバック補正値算出処理におけるステップＳ３２＿１の処理として、回転数カウンタ４１からエンジン回転数ＮＥを取得すると共に、Ａ／Ｄ変換器４２からスロットル開度値ＴＨを取得する。
【００７６】
＜ステップＳ３２＿２＞
そして、ＣＰＵ５３は、ステップＳ３２＿２の処理として、エンジン回転数ＮＥ及びスロットル開度値ＴＨを参照して、現在のエンジン運転状態を判断する。具体的には、図１１に示すように、エンジン回転数ＮＥとスロットル開度値ＴＨとの対応関係によってＯ２フィードバック制御を必要とするＯ２フィードバック領域が設定された２次元マップが予めＲＯＭ４９に記憶されており、ＣＰＵ５３は、上記２次元マップを用いて、現在のエンジン運転状態がＯ２フィードバック領域に含まれるかを判断する。
【００７７】
また、図１１に示すように、Ｏ２フィードバック領域は、アイドリング運転領域に対応する第１学習領域と、低負荷運転領域に対応する第２学習領域と、高負荷運転領域に対応する第３学習領域との３つの学習領域に区分されている。つまり、ＣＰＵ５３は、上記２次元マップを用いて、現在のエンジン運転状態がＯ２フィードバック領域に含まれるか判断すると同時に、Ｏ２フィードバック領域内のどの学習領域に含まれるかも判断する。
【００７８】
＜ステップＳ３２＿３＞
そして、ＣＰＵ５３は、ステップＳ３２＿３の処理として、現在のエンジン運転状態がＯ２フィードバック領域に含まれるか否かを判断し、「Ｙｅｓ」の場合にはステップＳ３２＿４の処理に移行する一方、「Ｎｏ」の場合にはＯ２フィードバック制御を行う必要がないため、Ｏ２フィードバック補正値算出処理を終了する。
【００７９】
＜ステップＳ３２＿４＞
ＣＰＵ５３は、上記ステップＳ３２＿３において「Ｙｅｓ」の場合、つまり現在のエンジン運転状態がＯ２フィードバック領域の場合、ステップＳ３２＿４の処理として、Ｏ２センサ電圧判定フラグF_VHGREFが「１」か否か、つまり現在の空燃比λが「リッチ」か否かを判定し、「Ｙｅｓ」の場合にはステップＳ３２＿５の処理に移行する一方、「Ｎｏ」の場合にはステップＳ３２＿６の処理に移行する。
【００８０】
＜ステップＳ３２＿５＞
ＣＰＵ５３は、上記ステップＳ３２＿４において「Ｙｅｓ」の場合、つまり現在の空燃比λが「リッチ」の場合、ステップＳ３２＿５の処理として、Ｏ２フィードバック補正値MHGから所定値Δを減算して得られる値を新たなＯ２フィードバック補正値MHGとして算出する。
【００８１】
＜ステップＳ３２＿６＞
一方、ＣＰＵ５３は、上記ステップＳ３２＿４において「Ｎｏ」の場合、つまり現在の空燃比λが「リーン」の場合、ステップＳ３２＿６の処理として、Ｏ２フィードバック補正値MHGに所定値Δを加算して得られる値を新たなＯ２フィードバック補正値MHGとして算出する。
【００８２】
＜ステップＳ３２＿７＞
続いて、図１０に示すように、ＣＰＵ５３は、上記ステップＳ３２＿５の処理終了後、または上記ステップＳ３２＿６の処理終了後、ステップＳ３２＿７の処理として、リッチ／リーン反転フラグF_VHGTGLが「１」か否か、つまりリッチ／リーン反転があったか否かを判定し、「Ｙｅｓ」の場合にはステップＳ３２＿８の処理に移行する一方、「Ｎｏ」の場合にはＯ２フィードバック補正値算出処理を終了する。
【００８３】
＜ステップＳ３２＿８＞
ＣＰＵ５３は、上記ステップＳ３２＿７において「Ｙｅｓ」の場合、つまりリッチ／リーン反転があった場合、ステップＳ３２＿８の処理として、現在のエンジン運転状態がＯ２フィードバック領域内の第１学習領域（アイドリング運転領域）に含まれるか否かを判定し、「Ｙｅｓ」の場合にはステップＳ３２＿９の処理に移行する一方、「Ｎｏ」の場合にはステップＳ３２＿１０の処理に移行する。
【００８４】
＜ステップＳ３２＿９＞
ＣＰＵ５３は、上記ステップＳ３２＿８において「Ｙｅｓ」の場合、つまり現在のエンジン運転状態がＯ２フィードバック領域内の第１学習領域に含まれる場合、ステップＳ３２＿９の処理として、下記（１）式を用いて、Ｏ２フィードバック補正学習値MREFHG1を算出した後、Ｏ２フィードバック補正値算出処理を終了する。なお、下記（１）式において、「CHGREF」は、Ｏ２フィードバック補正平均値算出用フィルタリング係数（例えば０．０１）である。また、このＯ２フィードバック補正学習値MREFHG1は、３分間隔でＥＥＰＲＯＭ５０に上書き保存される。
MREFHG1＝MHG×CHGREF＋MREFHG1×(1-CHGREF)        ・・・（１）
【００８５】
＜ステップＳ３２＿１０＞
ＣＰＵ５３は、上記ステップＳ３２＿８において「Ｎｏ」の場合、ステップＳ３２＿１０の処理として、現在のエンジン運転状態がＯ２フィードバック領域内の第２学習領域（低負荷運転領域）に含まれるか否かを判定し、「Ｙｅｓ」の場合にはステップＳ３２＿１１の処理に移行する一方、「Ｎｏ」の場合にはステップＳ３２＿１５の処理に移行する。
【００８６】
＜ステップＳ３２＿１１＞
ＣＰＵ５３は、上記ステップＳ３２＿１０において「Ｙｅｓ」の場合、つまり現在のエンジン運転状態がＯ２フィードバック領域内の第２学習領域に含まれる場合、ステップＳ３２＿１１の処理として、下記（２）式を用いて、Ｏ２フィードバック補正学習値MREFHG2（低負荷補正学習値）を算出する。なお、このＯ２フィードバック補正学習値MREFHG2は、３分間隔でＥＥＰＲＯＭ５０に上書き保存される。
MREFHG2＝MHG×CHGREF＋MREFHG2×(1-CHGREF)        ・・・（２）
【００８７】
＜ステップ３２＿１２＞
そして、ＣＰＵ５３は、上記ステップＳ３２＿１１の処理終了後、ステップＳ３２＿１２の処理として、第２学習値算出回数CTMREFHG2をインクリメントする。
【００８８】
＜ステップＳ３２＿１３＞
そして、ＣＰＵ５３は、上記ステップＳ３２＿１２の処理終了後、ステップＳ３２＿１３の処理として、第２学習値算出回数CTMREFHG2が所定回数（例えば２５０回）以上か否かを判定し、「Ｙｅｓ」の場合にはステップＳ３２＿１４の処理に移行する一方、「Ｎｏ」の場合にはＯ２フィードバック補正値算出処理を終了する。
【００８９】
＜ステップＳ３２＿１４＞
ＣＰＵ５３は、上記ステップＳ３２＿１３において「Ｙｅｓ」の場合、つまり第２学習値算出回数CTMREFHG2が所定回数以上になった場合、ステップＳ３２＿１４の処理として、低負荷学習値取得フラグF_MREFHG2を「１」にセットした後、Ｏ２フィードバック補正値算出処理を終了する。
【００９０】
＜ステップＳ３２＿１５＞
一方、ＣＰＵ５３は、上記ステップＳ３２＿１０において「Ｎｏ」の場合、つまり現在のエンジン運転状態がＯ２フィードバック領域内の第３学習領域（高負荷運転領域）に含まれる場合、ステップＳ３２＿１５の処理として、下記（３）式を用いて、Ｏ２フィードバック補正学習値MREFHG3（高負荷補正学習値）を算出する。なお、このＯ２フィードバック補正学習値MREFHG3は、３分間隔でＥＥＰＲＯＭ５０に上書き保存される。
MREFHG3＝MHG×CHGREF＋MREFHG3×(1-CHGREF)        ・・・（３）
【００９１】
＜ステップ３２＿１６＞
そして、ＣＰＵ５３は、上記ステップＳ３２＿１５の処理終了後、ステップＳ３２＿１６の処理として、第３学習値算出回数CTMREFHG3をインクリメントする。
【００９２】
＜ステップＳ３２＿１７＞
そして、ＣＰＵ５３は、上記ステップＳ３２＿１６の処理終了後、ステップＳ３２＿１７の処理として、第３学習値算出回数CTMREFHG3が所定回数（例えば２５０回）以上か否かを判定し、「Ｙｅｓ」の場合にはステップＳ３２＿１８の処理に移行する一方、「Ｎｏ」の場合にはＯ２フィードバック補正値算出処理を終了する。
【００９３】
＜ステップＳ３２＿１８＞
ＣＰＵ５３は、上記ステップＳ３２＿１７において「Ｙｅｓ」の場合、つまり第３学習値算出回数CTMREFHG3が所定回数以上になった場合、ステップＳ３２＿１８の処理として、高負荷学習値取得フラグF_MREFHG3を「１」にセットした後、Ｏ２フィードバック補正値算出処理を終了する。
【００９４】
以上のように、Ｏ２フィードバック補正値算出処理では、空燃比λを理論空燃比（λ＝１）を挟んで、「リッチ」領域と「リーン」領域とを行き来させるためのＯ２フィードバック補正値MHGと、燃料供給系２の異常判断に用いられるＯ２フィードバック補正学習値MREFHG2及びMREFHG3が得られる。なお、Ｏ２フィードバック補正学習値MREFHG2及びMREFHG3を所定回数（例えば２５０回）算出した理由は、上記（２）式及び（３）式からわかるように、これらのパラメータがＯ２フィードバック補正値MHGの平均値を示しており、異常判断精度を確保可能な程度の安定した値が得られるまで一定時間を必要とするからである。
【００９５】
（３）燃料ポンプ異常判断パラメータ算出処理
続いて、図１２及び図１３のフローチャートを参照しながら、Ｏ２フィードバック制御処理における第３のサブルーチンである燃料ポンプ異常判断パラメータ算出処理について説明する。
＜ステップＳ３３＿１＞
図１２に示すように、ＣＰＵ５３は、燃料ポンプ異常判断パラメータ算出処理におけるステップＳ３３＿１の処理として、現在のエンジン回転数ＮＥが高負荷回転数NEXFPFH以上か否かを判定し、「Ｙｅｓ」の場合にはステップＳ３３＿２の処理に移行する一方、「Ｎｏ」の場合にはステップＳ３３＿１２の処理に移行する。
【００９６】
＜ステップＳ３３＿２＞
ＣＰＵ５３は、上記ステップＳ３３＿１において「Ｙｅｓ」の場合、ステップＳ３３＿２の処理として、現在のスロットル開度値ＴＨが高負荷開度値THXFPFH以上か否かを判定し、「Ｙｅｓ」の場合にはステップＳ３３＿３の処理に移行する一方、「Ｎｏ」の場合にはステップＳ３３＿１２の処理に移行する。
【００９７】
＜ステップＳ３３＿３＞
ＣＰＵ５３は、上記ステップＳ３３＿２において「Ｙｅｓ」の場合、ステップＳ３３＿３の処理として、リッチ／リーン判定回数XCOXFPFが所定回数（例えば２５０回）以上か否かを判定し、「Ｎｏ」の場合にはステップＳ３３＿４の処理に移行する一方、「Ｙｅｓ」の場合にはステップＳ３３＿７の処理に移行する。
【００９８】
＜ステップＳ３３＿４＞
ＣＰＵ５３は、上記ステップＳ３３＿３において「Ｎｏ」の場合、つまりリッチ／リーン判定回数XCOXFPFが所定回数未満の場合、ステップＳ３３＿４の処理として、Ｏ２センサ電圧判定フラグF_VHGREFが「１」か否か、つまり現在の空燃比λが「リッチ」か否かを判定し、「Ｎｏ」の場合にはステップＳ３３＿５の処理に移行する一方、「Ｙｅｓ」の場合にはステップＳ３３＿６の処理に移行する。
【００９９】
＜ステップＳ３３＿５＞
ＣＰＵ５３は、上記ステップＳ３３＿４において「Ｎｏ」の場合、つまり現在の空燃比λが「リーン」の場合、ステップＳ３３＿５の処理として、リーン判定回数XCDXFPFをインクリメントする。
【０１００】
＜ステップＳ３３＿６＞
そして、ＣＰＵ５３は、上記ステップＳ３３＿４において「Ｙｅｓ」の場合（つまり現在の空燃比λが「リッチ」の場合）、または上記ステップＳ３３＿５の処理終了後、ステップＳ３３＿６の処理として、リッチ／リーン判定回数XCOXFPFをインクリメントした後、ステップＳ３３＿１２の処理に移行する。
【０１０１】
＜ステップＳ３３＿７＞
一方、ＣＰＵ５３は、上記ステップＳ３３＿３において「Ｙｅｓ」の場合、つまりリッチ／リーン判定回数XCOXFPFが所定回数以上の場合、ステップＳ３３＿７の処理として、リーン判定回数XCDXFPFが所定回数（例えば２２５回）以上か否か、つまり所定回数（２５０回）のリッチ／リーン判定の内、「リーン」と判定した回数が９０％以上か否かを判定し、「Ｎｏ」の場合にはステップＳ３３＿８の処理に移行する一方、「Ｙｅｓ」の場合にはステップＳ３３＿９の処理に移行する。
【０１０２】
＜ステップＳ３３＿８＞
ＣＰＵ５３は、上記ステップＳ３３＿７において「Ｎｏ」の場合、つまりリッチ／リーン判定の内、「リーン」と判定した回数が９０％未満であった場合、ステップＳ３３＿８の処理として、リーン状態検出フラグF_LEANを「０」にリセットした後、ステップＳ３３＿１１の処理に移行する。
【０１０３】
＜ステップＳ３３＿９＞
一方、ＣＰＵ５３は、上記ステップＳ３３＿７において「Ｙｅｓ」の場合、つまりリッチ／リーン判定の内、「リーン」と判定した回数が９０％以上であった場合、ステップＳ３３＿９の処理として、リーン状態検出フラグF_LEANを「１」にセットする。
【０１０４】
＜ステップＳ３３＿１０＞
そして、ＣＰＵ５３は、上記ステップＳ３３＿９の処理終了後、ステップＳ３３＿１０の処理として、リーン判定回数XCDXFPF及びリッチ／リーン判定回数XCOXFPFを「０」にリセットした後、ステップＳ３３＿１１の処理に移行する。
【０１０５】
＜ステップＳ３３＿１１＞
そして、ＣＰＵ５３は、上記ステップＳ３３＿８の処理終了後、または上記ステップＳ３３＿１０の処理終了後、ステップＳ３３＿１１の処理として、異常チェック実施要求フラグF_FPFCHECKを「１」にセットした後、ステップＳ３３＿１２の処理に移行する。
【０１０６】
＜ステップＳ３３＿１２＞
図１３に示すように、ＣＰＵ５３は、上記ステップＳ３３＿１において「Ｎｏ」の場合、または上記ステップＳ３３＿２において「Ｎｏ」の場合、または上記ステップＳ３３＿６の処理終了後、または上記ステップＳ３３＿１１の処理終了後、ステップＳ３３＿１２の処理として、高負荷学習値取得フラグF_MREFHG3が「１」にセットされているか否か、つまり安定したＯ２フィードバック補正学習値MREFHG3が得られたか否かを判定し、「Ｙｅｓ」の場合にはステップＳ３３＿１３の処理に移行する一方、「Ｎｏ」の場合には燃料ポンプ異常判断パラメータ算出処理を終了する。
【０１０７】
＜ステップＳ３３＿１３＞
ＣＰＵ５３は、上記ステップＳ３３＿１２において「Ｙｅｓ」の場合、つまり高負荷学習値取得フラグF_MREFHG3が「１」にセットされている場合、ステップＳ３３＿１３の処理として、低負荷学習値取得フラグF_MREFHG2が「１」にセットされているか否か、つまり安定したＯ２フィードバック補正学習値MREFHG2が得られたか否かを判定し、「Ｙｅｓ」の場合にはステップＳ３３＿１４の処理に移行する一方、「Ｎｏ」の場合には燃料ポンプ異常判断パラメータ算出処理を終了する。
【０１０８】
＜ステップＳ３３＿１４＞
ＣＰＵ５３は、上記ステップＳ３３＿１３において「Ｙｅｓ」の場合、つまり低負荷学習値取得フラグF_MREFHG2が「１」にセットされている場合、ステップＳ３３＿１４の処理として、Ｏ２フィードバック補正学習値MREFHG3（高負荷補正学習値）がＯ２フィードバック補正学習値MREFHG2（低負荷補正学習値）以上か否かを判定し、「Ｙｅｓ」の場合にはステップＳ３３＿１５の処理に移行する一方、「Ｎｏ」の場合にはステップＳ３３＿１７の処理に移行する。
【０１０９】
＜ステップＳ３３＿１５＞
ＣＰＵ５３は、上記ステップＳ３３＿１４において「Ｙｅｓ」の場合、つまり高負荷補正学習値MREFHG3が低負荷補正学習値MREFHG2以上の場合、ステップＳ３３＿１５の処理として、学習値偏差（＝MREFHG3−MREFHG2）が所定値（例えば０．１４倍）以上か否かを判定し、「Ｙｅｓ」の場合にはステップＳ３３＿１６の処理に移行する一方、「Ｎｏ」の場合にはステップＳ３３＿１７の処理に移行する。
【０１１０】
＜ステップＳ３３＿１６＞
ＣＰＵ５３は、上記ステップＳ３３＿１５において「Ｙｅｓ」の場合、つまり学習値偏差が所定値以上の場合、ステップＳ３３＿１６の処理として、高負荷学習値偏差検出フラグF_MREFHGLNを「１」にセットした後、ステップＳ３３＿１８の処理に移行する。
【０１１１】
＜ステップＳ３３＿１７＞
一方、ＣＰＵ５３は、上記ステップＳ３３＿１４において「Ｎｏ」の場合（つまり高負荷学習値MREFHG3が低負荷学習値MREFHG2未満の場合）、または上記ステップＳ３３＿１５において「Ｎｏ」の場合（つまり学習値偏差が所定値未満の場合）、ステップＳ３３＿１７の処理として、高負荷学習値偏差検出フラグF_MREFHGLNを「０」にリセットした後、ステップＳ３３＿１８の処理に移行する。
【０１１２】
＜ステップＳ３３＿１８＞
そして、ＣＰＵ５３は、上記ステップＳ３３＿１６の処理終了後、または上記ステップＳ３３＿１７の処理終了後、ステップＳ３３＿１８の処理として、異常チェック実施要求フラグF_FPFCHECKを「１」にセットした後、燃料ポンプ異常判断パラメータ算出処理を終了する。
【０１１３】
以上のように、燃料ポンプ異常判断パラメータ算出処理は、図１２に示したステップＳ３３＿１からステップＳ３３＿１１までの第１パートと、図１３に示したステップＳ３３＿１２からステップＳ３３＿１８までの第２パートとに分割されている。
【０１１４】
第１パートは、エンジン運転状態が異常監視運転領域に含まれる場合（エンジン回転数ＮＥ≧NEXFPFH、且つスロットル開度値ＴＨ≧THXFPFHの場合）に、空燃比λが「リーン」と判定されたリーン判定回数XCDXFPFを計数し、このリーン判定回数XCDXFPFが所定回数以上となった場合に、異常チェック実施要求フラグF_FPFCHECKを「１」にセットするためのパートである。この場合、後述の燃料ポンプ異常監視・検出判断処理において異常監視状態として認識される。つまり、第１パートの実行により、エンジン運転状態がＯ２フィードバック領域に含まれていない場合（Ｏ２フィードバック制御を実施していない場合）であっても、Ｏ２センサ出力電圧値のみによって異常監視状態を精度よく認識することができる。
【０１１５】
一方、第２パートは、Ｏ２フィードバック制御の実施中に得られた高負荷補正学習値MREFHG3と低負荷補正学習値MREFHG2との偏差が所定値以上となった場合に、異常チェック実施要求フラグF_FPFCHECKを「１」にセットするためのパートである。この場合も、後述の燃料ポンプ異常監視・検出判断処理において異常監視状態として認識される。つまり、この第２パートの実行により、Ｏ２フィードバック領域内の高負荷運転領域（第３学習領域）と低負荷運転領域（第２学習領域）とのＯ２フィードバック補正値に基づいて異常監視状態を認識するため、燃料にアルコールが混合されてＯ２フィードバック補正値に影響があったとしても、異常監視状態を精度よく認識できる。
【０１１６】
（４）燃料ポンプ異常監視・検出判断処理
続いて、図１４及び図１５のフローチャートを参照しながら、Ｏ２フィードバック制御処理における第４のサブルーチンである燃料ポンプ異常監視・検出判断処理について説明する。
＜ステップＳ３４＿１＞
図１４に示すように、ＣＰＵ５３は、燃料ポンプ異常監視・検出判断処理におけるステップＳ３４＿１の処理として、燃料ポンプ電気的異常検出フラグF_XDRXFPRが「１」か否か、つまり燃料ポンプ３１ａの電気的異常を検出済みか否かを判定し、「Ｎｏ」の場合にはステップＳ３４＿２の処理に移行する一方、「Ｙｅｓ」の場合にはステップＳ３４＿１６の処理に移行する。
【０１１７】
＜ステップＳ３４＿２＞
ＣＰＵ５３は、上記ステップＳ３４＿１において「Ｎｏ」の場合、ステップＳ３４＿２の処理として、インジェクタ電気的異常検出フラグF_XDRXINJが「１」か否か、つまりインジェクタ２１の電気的異常を検出済みか否かを判定し、「Ｎｏ」の場合にはステップＳ３４＿３の処理に移行する一方、「Ｙｅｓ」の場合にはステップＳ３４＿１６の処理に移行する。なお、インジェクタ電気的異常検出フラグF_XDRXINJは、後述の燃料噴射処理においてインジェクタ２１の電気的異常が検出された場合に、「１」にセットされるフラグである。
【０１１８】
＜ステップＳ３４＿３＞
ＣＰＵ５３は、上記ステップＳ３４＿２において「Ｎｏ」の場合、つまり燃料ポンプ３１ａ及びインジェクタ２１共に電気的異常がない場合、ステップＳ３４＿３の処理として、異常チェック実施要求フラグF_FPFCHECKが「１」にセットされているか否かを判定し、「Ｙｅｓ」の場合にはステップＳ３４＿４の処理に移行する一方、「Ｎｏ」の場合には燃料ポンプ異常監視・検出判断処理を終了する。
【０１１９】
＜ステップＳ３４＿４＞
ＣＰＵ５３は、上記ステップＳ３４＿３において「Ｙｅｓ」の場合、つまり異常チェック実施要求フラグF_FPFCHECKが「１」にセットされている場合、ステップＳ３４＿４の処理として、高負荷学習値偏差検出フラグF_MREFHGLNが「１」にセットされているか否かを判定し、「Ｎｏ」の場合にはステップＳ３４＿５の処理に移行する一方、「Ｙｅｓ」の場合にはステップＳ３４＿６の処理に移行する。
【０１２０】
＜ステップＳ３４＿５＞
ＣＰＵ５３は、上記ステップＳ３４＿４において「Ｎｏ」の場合、つまり高負荷学習値偏差検出フラグF_MREFHGLNが「０」の場合、ステップＳ３４＿５の処理として、リーン状態検出フラグF_LEANが「１」にセットされているか否かを判定し、「Ｙｅｓ」の場合にはステップＳ３４＿６の処理に移行する一方、「Ｎｏ」の場合にはステップＳ３４＿１５の処理に移行する。
【０１２１】
＜ステップＳ３４＿６＞
続いて、図１５に示すように、ＣＰＵ５３は、上記ステップＳ３４＿４において「Ｙｅｓ」の場合（つまり高負荷学習値偏差検出フラグF_MREFHGLNが「１」の場合）、または上記ステップＳ３４＿５において「Ｙｅｓ」の場合（つまりリーン状態検出フラグF_LEANが「１」の場合）、ステップＳ３４＿６の処理として、燃料ポンプ異常監視フラグF_XDPXFPFが「１」にセットされているか否か、つまり燃料ポンプ異常監視状態か否かを判定し、「Ｎｏ」の場合にはステップＳ３４＿７の処理に移行する一方、「Ｙｅｓ」の場合にはステップＳ３４＿２１の処理に移行する。
【０１２２】
＜ステップＳ３４＿７＞
ＣＰＵ５３は、上記ステップＳ３４＿６において「Ｎｏ」の場合、つまり燃料ポンプ異常監視フラグF_XDPXFPFが「０」の場合、ステップＳ３４＿７の処理として、燃料ポンプ異常監視フラグF_XDPXFPFを「１」にセットした後、ステップＳ３４＿８の処理に移行する。つまり、燃料ポンプ異常監視フラグF_XDPXFPFを「１」にセットすることは、現在の状態を燃料ポンプ異常監視状態として認識したことを指す。
【０１２３】
＜ステップＳ３４＿８＞
そして、ＣＰＵ５３は、上記ステップＳ３４＿７の処理終了後、ステップＳ３４＿８の処理として、燃料ポンプ異常監視カウンタCTXDPXFPFをインクリメントした後、燃料ポンプ異常監視カウンタCTXDPXFPFをＥＥＰＲＯＭ５０に上書き保存する。なお、燃料ポンプ異常監視カウンタCTXDPXFPFは、燃料ポンプ異常監視状態の認識回数を示すカウンタ変数である。
【０１２４】
＜ステップＳ３４＿９＞
そして、ＣＰＵ５３は、上記ステップＳ３４＿８の処理終了後、ステップＳ３４＿９の処理として、燃料ポンプ異常監視カウンタCTXDPXFPFが所定値（例えば３）以上か否か、つまり燃料ポンプ異常監視状態の認識回数が３回以上か否かを判定し、「Ｙｅｓ」の場合にはステップＳ３４＿１０の処理に移行する一方、「Ｎｏ」の場合にはステップＳ３４＿２１の処理に移行する。
【０１２５】
＜ステップＳ３４＿１０＞
ＣＰＵ５３は、上記ステップＳ３４＿９において「Ｙｅｓ」の場合、つまり燃料ポンプ異常監視カウンタCTXDPXFPFが所定値（例えば「３」）以上の場合、ステップＳ３４＿１０の処理として、燃料ポンプ異常検出フラグF_XAPXFPFを「１」にセットした後、ステップＳ３４＿１１の処理に移行する。つまり、ＣＰＵ５３は、燃料ポンプ異常監視カウンタCTXDPXFPFが所定値以上になった場合に、燃料供給系２（燃料ポンプ３１ａ）の異常と判断する。
【０１２６】
＜ステップＳ３４＿１１＞
そして、ＣＰＵ５３は、上記ステップＳ３４＿１０の処理終了後、ステップＳ３４＿１１の処理として、燃料ポンプ異常検出カウンタCTXAPXFPFをインクリメントした後、燃料ポンプ異常検出カウンタCTXAPXFPFをＥＥＰＲＯＭ５０に上書き保存する。なお、燃料ポンプ異常検出カウンタCTXAPXFPFは、燃料供給系２の異常と判断された回数を示すカウンタ変数である。
【０１２７】
＜ステップＳ３４＿１２＞
そして、ＣＰＵ５３は、上記ステップＳ３４＿１１の処理終了後、ステップＳ３４＿１２の処理として、燃料ポンプ異常検出カウンタCTXAPXFPが所定値（例えば「３」）以上か否か、つまり燃料ポンプ異常検出回数が３回以上か否かを判定し、「Ｙｅｓ」の場合にはステップＳ３４＿１３の処理に移行する一方、「Ｎｏ」の場合にはステップＳ３４＿１４の処理に移行する。
【０１２８】
＜ステップＳ３４＿１３＞
ＣＰＵ５３は、上記ステップＳ３４＿１２において「Ｙｅｓ」の場合、つまり燃料ポンプ異常検出カウンタCTXAPXFPが所定値以上の場合、ステップＳ３４＿１３の処理として、第２の点灯パターン（燃料供給系２に比較的重度の異常が発生したことをユーザに報知するための点灯パターン）でインジケータ３が点灯するように、インジケータ駆動回路４８を制御する。
【０１２９】
＜ステップＳ３４＿１４＞
一方、ＣＰＵ５３は、上記ステップＳ３４＿１２において「Ｎｏ」の場合、つまり燃料ポンプ異常検出カウンタCTXAPXFPが所定値未満の場合、ステップＳ３４＿１４の処理として、第１の点灯パターン（燃料供給系２に比較的軽度の異常が発生したことをユーザに報知するための点灯パターン）でインジケータ３が点灯するように、インジケータ駆動回路４８を制御する。
【０１３０】
＜ステップＳ３４＿１５＞
また、ＣＰＵ５３は、上記ステップＳ３４＿５において「Ｎｏ」の場合、つまりリーン状態検出フラグF_LEANが「０」の場合、ステップＳ３４＿１５の処理として、燃料ポンプ異常監視フラグF_XDPXFPFが「１」にセットされているか否かを判定し、「Ｙｅｓ」の場合にはステップＳ３４＿１６の処理に移行する一方、「Ｎｏ」の場合にはステップＳ３４＿２１の処理に移行する。
【０１３１】
＜ステップＳ３４＿１６＞
ＣＰＵ５３は、上記ステップＳ３４＿１において「Ｙｅｓ」の場合、または上記ステップＳ３４＿２において「Ｙｅｓ」の場合、または上記ステップＳ３４＿１５において「Ｙｅｓ」の場合、ステップＳ３４＿１６の処理として、燃料ポンプ異常監視フラグF_XDPXFPFを「０」にリセットした後、ステップＳ３４＿１７の処理に移行する。
【０１３２】
＜ステップＳ３４＿１７＞
そして、ＣＰＵ５３は、上記ステップＳ３４＿１６の処理終了後、ステップＳ３４＿１７の処理として、燃料ポンプ異常監視カウンタCTXDPXFPFを「０」にリセットした後、燃料ポンプ異常監視カウンタCTXDPXFPFをＥＥＰＲＯＭ５０に上書き保存する。
【０１３３】
＜ステップＳ３４＿１８＞
そして、ＣＰＵ５３は、上記ステップＳ３４＿１７の処理終了後、ステップＳ３４＿１８の処理として、燃料ポンプ異常検出フラグF_XAPXFPFを「０」にリセットした後、ステップＳ３４＿１９の処理に移行する。
【０１３４】
＜ステップＳ３４＿１９＞
そして、ＣＰＵ５３は、上記ステップＳ３４＿１８の処理終了後、ステップＳ３４＿１９の処理として、燃料ポンプ異常検出カウンタCTXAPXFPを「０」にリセットした後、燃料ポンプ異常検出カウンタCTXAPXFPFをＥＥＰＲＯＭ５０に上書き保存する。
【０１３５】
＜ステップＳ３４＿２０＞
そして、ＣＰＵ５３は、上記ステップＳ３４＿１９の処理終了後、ステップＳ３４＿２０の処理として、インジケータ駆動回路４８を制御してインジケータ３を消灯させた後、ステップＳ３４＿２１の処理に移行する。
【０１３６】
＜ステップＳ３４＿２１＞
ＣＰＵ５３は、上記ステップＳ３４＿６において「Ｙｅｓ」の場合、または上記ステップＳ３４＿９において「Ｎｏ」の場合、または上記ステップＳ３４＿１３の処理終了後、または上記ステップＳ３４＿１４の処理終了後、または上記ステップＳ３４＿１５において「Ｎｏ」の場合、または上記ステップＳ３４＿２０の処理終了後、ステップＳ３４＿２１の処理として、異常チェック実施要求フラグF_FPFCHECKを「０」にリセットした後、燃料ポンプ異常監視・検出判断処理を終了する。
【０１３７】
以上のように、燃料ポンプ異常監視・検出判断処理では、リーン状態検出フラグF_LEAN＝「１」（リーン判定回数XCDXFPFが所定回数以上）の場合、または高負荷補正学習値MREFHG3と低負荷補正学習値MREFHG2との偏差が所定値以上の場合を、燃料ポンプ異常監視状態として認識し、この異常監視状態を連続して所定回数（例えば３回）認識した場合に燃料供給系２の異常と判断する。一方、インジェクタ２１と燃料ポンプ３１ａの少なくとも一方に電気的異常が検出された場合には、ステップＳ３４＿１６以降の処理を行なうことで、燃料供給系２の異常判断を禁止する。
【０１３８】
つまり、本実施形態では、従来のような燃圧センサ等の燃圧検出手段を設けることなく、既存の空燃比センサ（Ｏ２センサ２６）を利用して精度良く燃料供給系２の異常を検出することができ、コストの上昇を抑えることができる。また、インジケータ３の点灯によって燃料供給系２の異常をユーザに報知することで、ユーザに燃料フィルタ３１ｂの交換を促すことができる。さらに、インジェクタ２１と燃料ポンプ３１ａの少なくとも一方に電気的異常が検出された場合には、燃料供給系２の異常判断を禁止することで、これらの電気的異常による誤判断を防止することができる。
【０１３９】
〔燃料噴射量算出処理〕
次に、エンジン１の運転制御中において、エンジン１の１回転毎に１回実行される燃料噴射量算出処理について、図１６のフローチャートを参照しながら詳細に説明する。
＜ステップＳ４１＞
図１６に示すように、ＣＰＵ５３は、燃料噴射量算出処理におけるステップＳ４１の処理として、回転数カウンタ４１からエンジン回転数ＮＥを取得すると共に、Ａ／Ｄ変換器４２からスロットル開度値ＴＨを取得する（つまり、現在のエンジン運転状態を把握する）。
【０１４０】
＜ステップＳ４２＞
そして、ＣＰＵ５３は、ステップＳ４２の処理として、燃料ポンプ異常検出カウンタCTXAPXFPが所定値（例えば「３」）以上か否か、つまり燃料ポンプ異常検出回数が３回以上か否かを判定し、「Ｙｅｓ」の場合にはステップＳ４３の処理に移行する一方、「Ｎｏ」の場合にはステップＳ４７の処理に移行する。
【０１４１】
＜ステップＳ４３＞
ＣＰＵ５３は、上記ステップＳ４２において「Ｙｅｓ」の場合、つまり燃料ポンプ異常検出カウンタCTXAPXFP≧３の場合、ステップＳ４３の処理として、エンジン回転数ＮＥが高負荷回転数NEXFPFH以上か否かを判定し、「Ｙｅｓ」の場合にはステップＳ４４の処理に移行する一方、「Ｎｏ」の場合にはステップＳ４５の処理に移行する。
【０１４２】
＜ステップＳ４４＞
ＣＰＵ５３は、上記ステップＳ４３において「Ｙｅｓ」の場合、つまりエンジン回転数ＮＥ≧高負荷回転数NEXFPFHの場合、ステップＳ４４の処理として、スロットル開度値ＴＨが高負荷開度値THXFPFH以上か否かを判定し、「Ｙｅｓ」の場合にはステップＳ４９の処理に移行する一方、「Ｎｏ」の場合にはステップＳ４５の処理に移行する。
【０１４３】
＜ステップＳ４５＞
ＣＰＵ５３は、上記ステップＳ４３において「Ｎｏ」の場合（つまりエンジン回転数ＮＥ＜高負荷回転数NEXFPFHの場合）、または上記ステップＳ４４において「Ｎｏ」の場合（つまりスロットル開度値ＴＨ＜高負荷開度値THXFPFHの場合）、ステップＳ４５の処理として、エンジン回転数ＮＥが低負荷回転数NEXFPFL以上か否かを判定し、「Ｙｅｓ」の場合にはステップＳ４６の処理に移行する一方、「Ｎｏ」の場合にはステップＳ４７の処理に移行する。
【０１４４】
＜ステップＳ４６＞
ＣＰＵ５３は、上記ステップＳ４５において「Ｙｅｓ」の場合、つまりエンジン回転数ＮＥ≧低負荷回転数NEXFPFLの場合、ステップＳ４６の処理として、スロットル開度値ＴＨが低負荷開度値THXFPFL以上か否かを判定し、「Ｙｅｓ」の場合にはステップＳ４８の処理に移行する一方、「Ｎｏ」の場合にはステップＳ４７の処理に移行する。
【０１４５】
＜ステップＳ４７＞
ＣＰＵ５３は、上記ステップＳ４２において「Ｎｏ」の場合（つまり燃料ポンプ異常検出カウンタCTXAPXFP＜３の場合）、または上記ステップＳ４５において「Ｎｏ」の場合（つまりエンジン回転数ＮＥ＜低負荷回転数NEXFPFLの場合）、または上記ステップＳ４６において「Ｎｏ」の場合（つまりスロットル開度値ＴＨ＜低負荷開度値THXFPFLの場合）、ステップＳ４７の処理として、燃料噴射量TIOUTの算出及び補正を行った後、燃料噴射量算出処理を終了する。
【０１４６】
具体的には、エンジン回転数ＮＥと、スロットル開度値ＴＨと、燃料噴射量TIOUTとの対応関係を示す３次元マップが予めＲＯＭ４９に記憶されており、ＣＰＵ５３は、上記３次元マップを用いて、現在のエンジン回転数ＮＥ及びスロットル開度値ＴＨに対応する燃料噴射量TIOUT（単位はｍｓ）を算出する。さらに、ＣＰＵ５３は、３次元マップを用いて算出した燃料噴射量TIOUTにＯ２フィードバック補正値MHGを乗算することで、燃料噴射量TIOUTを補正する。
【０１４７】
＜ステップＳ４８＞
ＣＰＵ５３は、上記ステップＳ４６において「Ｙｅｓ」の場合、つまりスロットル開度値ＴＨ≧低負荷開度値THXFPFLの場合、ステップＳ４８の処理として、燃料噴射量TIOUTの算出及び補正を行った後、燃料噴射量算出処理を終了する。具体的には、ＣＰＵ５３は、上記３次元マップを用いて、現在のエンジン回転数ＮＥ及びスロットル開度値ＴＨに対応する燃料噴射量TIOUTを算出し、当該算出した燃料噴射量TIOUTに予め設定された補正係数（例えば「０．８６」）を乗算することで、燃料噴射量TIOUTを補正（減量）する。
【０１４８】
＜ステップＳ４９＞
ＣＰＵ５３は、上記ステップＳ４４において「Ｙｅｓ」の場合、つまりスロットル開度値ＴＨ≧高負荷開度値THXFPFHの場合、ステップＳ４９の処理として、燃料噴射量TIOUTを「０」に設定した後、燃料噴射量算出処理を終了する。
【０１４９】
以上のように、燃料噴射量算出処理では、燃料供給系２の異常と連続して判断された回数が所定回数以上となった場合に、現在のエンジン運転状態に応じて燃料噴射量TIOUTの減量、または燃料噴射の停止（燃料噴射量TIOUTを「０」に設定）を行うことで、後述の燃料噴射処理において燃料供給系２の異常に応じた適切な燃料噴射を行うことができる。
【０１５０】
〔燃料噴射処理〕
次に、エンジン１の運転制御中において、クランクパルス信号に同期して実行される燃料噴射処理について、図１７のフローチャートを参照しながら詳細に説明する。
＜ステップＳ５１＞
図１７に示すように、ＣＰＵ５３は、燃料噴射処理におけるステップＳ５１の処理として、クランクパルス信号に基づいて現在のクランク角を把握し、当該把握したクランク角がインジェクタタイマをセットすべきクランク角か否か、つまり燃料噴射実施タイミングか否かを判定し、「Ｙｅｓ」の場合にはステップＳ５２の処理に移行する一方、「Ｎｏ」の場合にはステップＳ５３の処理に移行する。
【０１５１】
＜ステップＳ５２＞
ＣＰＵ５３は、上記ステップＳ５１において「Ｙｅｓ」の場合、つまり燃料噴射実施タイミングであった場合、ステップＳ５２の処理として、インジェクタ駆動回路４４を制御してインジェクタ２１による燃料噴射を実施する。具体的には、ＣＰＵ５３は、インジェクタタイマに燃料噴射量TIOUTをセットし、タイマ５２によるインジェクタタイマのカウント開始からカウント終了までの期間、インジェクタ２１にインジェクタ駆動信号が供給されるようにインジェクタ駆動回路４４を制御する。これにより、燃料噴射実施タイミングから燃料噴射量TIOUTの期間、インジェクタ２１が通電され、燃料噴射量TIOUTに応じた量の燃料が噴射されることになる。
【０１５２】
＜ステップＳ５３＞
続いて、ＣＰＵ５３は、ステップＳ５３の処理として、現在、インジェクタ２１に対する通電がオンか否か（通電期間か否か）を判定し、「Ｙｅｓ」の場合にはステップＳ５４の処理に移行する一方、「Ｎｏ」の場合にはステップＳ５５の処理に移行する。
【０１５３】
＜ステップＳ５４＞
ＣＰＵ５３は、上記ステップＳ５３において「Ｙｅｓ」の場合（つまり通電期間中の場合）、ステップＳ５４の処理として、インジェクタ異常検出回路４５から入力される通電／非通電状態信号がローレベルか否かを判定し、「Ｙｅｓ」の場合、つまりインジェクタ駆動信号と通電／非通電状態信号との論理が一致し、インジェクタ２１が電気的に正常であると判断される場合にはインジェクタタイマのカウント終了後に燃料噴射処理を終了する一方、「Ｎｏ」の場合、つまりインジェクタ２１が電気的に異常であると判断される場合にはステップＳ５６の処理に移行する。
【０１５４】
＜ステップＳ５５＞
ＣＰＵ５３は、上記ステップＳ５３において「Ｎｏ」の場合（つまり非通電期間中の場合）、ステップＳ５５の処理として、インジェクタ異常検出回路４５から入力される通電／非通電状態信号がハイレベルか否かを判定し、「Ｙｅｓ」の場合、つまりインジェクタ駆動信号と通電／非通電状態信号との論理が一致し、インジェクタ２１が電気的に正常であると判断される場合にはインジェクタタイマのカウント終了後に燃料噴射処理を終了する一方、「Ｎｏ」の場合、つまりインジェクタ２１が電気的に異常であると判断される場合にはステップＳ５６の処理に移行する。
【０１５５】
＜ステップＳ５６＞
ＣＰＵ５３は、上記ステップＳ５４において「Ｎｏ」の場合、または上記ステップＳ５５において「Ｎｏ」の場合、つまりインジェクタ２１に電気的異常が発生した場合、ステップＳ５６の処理として、インジェクタ電気的異常検出フラグF_XDRXINJを「１」にセットした後、燃料噴射処理を終了する。
【０１５６】
以上が、燃料供給系異常検出機能を実現するために、ＣＰＵ５３が実行するＥＥＰＲＯＭ読込み処理、燃料ポンプ駆動制御処理、Ｏ２フィードバック制御処理、燃料噴射量算出処理及び燃料噴射処理の説明であるが、以下では、上述した各処理の視覚的な理解を容易とするために、図１８及び図１９に示すタイミングチャートを用いて追加説明を行う。
【０１５７】
図１８は、ＥＣＵ４の電源オン／オフ状態（図中の「Ａ」）と、エンジン回転数ＮＥ（「Ｂ」）と、スロットル開度値ＴＨ（「Ｃ」）と、Ｏ２センサ出力電圧値ＶＨＧ（「Ｄ」）と、Ｏ２フィードバック補正値ＭＨＧ（「Ｅ」）、高負荷補正学習値MREFHG3（「Ｆ」）及び低負荷補正学習値MREFHG2（「Ｇ」）と、第２学習値算出回数CTMREFHG2（「Ｈ」）及び第３学習値算出回数CTMREFHG3（「Ｉ」）と、リッチ／リーン判定回数XCOXFPF（「Ｊ」）及びリーン判定回数XCDXFPF（「Ｋ」）と、燃料ポンプ異常監視フラグF_XDPXFPF（「Ｌ」）と、燃料ポンプ異常監視カウンタCTXDPXFPF（「Ｍ」）と、燃料ポンプ異常検出フラグF_XAPXFPF（「Ｎ」）との時間的対応関係を示すタイミングチャートである。
【０１５８】
この図１８に示すように、時刻Ｔ０に１回目のＥＣＵ４の電源オンがなされたと仮定する。なお、この時刻Ｔ０において、上記の各信号及び各変数は「０」に初期化されているものとする。この時刻Ｔ０からエンジン回転数ＮＥ及びスロットル開度値ＴＨが徐々に高くなっていき、時刻Ｔ１においてエンジン運転状態がＯ２フィードバック領域内の第２学習領域（低負荷運転領域）に到達したとすると、この時刻Ｔ１からＯ２センサ出力電圧値ＶＨＧに基づくＯ２フィードバック制御（Ｏ２フィードバック補正値ＭＨＧ及び低負荷補正学習値MREFHG2の算出）が行われる。
【０１５９】
この時、低負荷補正学習値MREFHG2の算出が行われる度に、第２学習値算出回数CTMREFHG2はインクリメントされ、時刻Ｔ２に第２学習値算出回数CTMREFHG2が所定回数（例えば２５０回）に到達したものとする。この時刻Ｔ２以降、さらにエンジン回転数ＮＥ及びスロットル開度値ＴＨが高くなっていき、時刻Ｔ３においてエンジン運転状態がＯ２フィードバック領域内の第３学習領域（高負荷運転領域）に到達したとすると、この時刻Ｔ３からＯ２フィードバック補正値ＭＨＧ及び高負荷補正学習値MREFHG3の算出が開始される。
【０１６０】
この時、高負荷補正学習値MREFHG3の算出が行われる度に、第３学習値算出回数CTMREFHG3はインクリメントされ、時刻Ｔ４に第３学習値算出回数CTMREFHG3が所定回数（例えば２５０回）に到達したものとする。この時刻Ｔ４において、高負荷補正学習値MREFHG3と低負荷補正学習値MREFHG2との偏差が所定値（例えば１．４倍）以上になったとすると、この時点で燃料ポンプ異常監視フラグF_XDPXFPFが「１」にセットされ、さらに、燃料ポンプ異常監視カウンタCTXDPXFPFがインクリメントされて「１」になる。なお、この時点では、燃料ポンプ異常検出フラグF_XAPXFPFは「０」のままである。
【０１６１】
この状態で、ＥＣＵ４の電源がオフされて、時刻Ｔ５に２回目のＥＣＵ４の電源オンがなされたと仮定する。なお、この時刻Ｔ５において、燃料ポンプ異常監視カウンタCTXDPXFPFはＥＥＰＲＯＭ５０から読み込まれるため、前回の値（「１」）を保持している。この時刻Ｔ５から時刻Ｔ９までの期間に、上述した時刻Ｔ０から時刻Ｔ４までの期間と同様の動作が生じたとすると、時刻Ｔ９において、燃料ポンプ異常監視フラグF_XDPXFPFが「１」にセットされ、さらに、燃料ポンプ異常監視カウンタCTXDPXFPFがインクリメントされて「２」になる。なお、この時点では、燃料ポンプ異常検出フラグF_XAPXFPFは「０」のままである。
【０１６２】
この状態で、ＥＣＵ４の電源がオフされて、時刻Ｔ１０に３回目のＥＣＵ４の電源オンがなされたと仮定する。なお、この時刻Ｔ１０において、燃料ポンプ異常監視カウンタCTXDPXFPFはＥＥＰＲＯＭ５０から読み込まれるため、前回の値（「２」）を保持している。この時刻Ｔ１０以降、エンジン回転数ＮＥが高負荷回転数NEXFPFH以上、且つスロットル開度値ＴＨが高負荷開度値THXFPFH以上に急激に変化したと仮定する。この場合、エンジン運転状態がＯ２フィードバック領域を越える運転領域に到達するため、Ｏ２フィードバック制御は行われず、よってＯ２フィードバック補正値ＭＨＧ、低負荷補正学習値MREFHG2及び高負荷補正学習値MREFHG3の算出は行われない。
【０１６３】
一方、Ｏ２センサ出力電圧値ＶＨＧに基づくリッチ／リーン判定は行われるため、時刻Ｔ１１以降、リッチ／リーン判定回数XCOXFPF及びリーン判定回数XCDXFPFがインクリメントされて上昇していく。そして、時刻Ｔ１２において、リッチ／リーン判定回数XCOXFPFが所定回数（例えば２５０回）に到達し、この時、リーン判定回数XCDXFPFがリッチ／リーン判定回数XCOXFPFの９０％（つまり２２５回）以上であったとすると、この時点で燃料ポンプ異常監視フラグF_XDPXFPFが「１」にセットされ、さらに、燃料ポンプ異常監視カウンタCTXDPXFPFがインクリメントされて「３」になる。つまり、時刻Ｔ１２において、燃料ポンプ異常監視カウンタCTXDPXFPFが「３」以上となるため、燃料ポンプ異常検出フラグF_XAPXFPFが「１」にセットされる（燃料供給系２の異常と判断）。
【０１６４】
図１９は、ＥＣＵ４の電源オン／オフ状態（図中の「Ａ」）と、エンジン回転数ＮＥ（「Ｂ」）と、スロットル開度値ＴＨ（「Ｃ」）と、燃料噴射量TIOUT（「Ｐ」）と、燃料ポンプ異常検出カウンタCTXAPXFPF（「Ｑ」）と、燃料ポンプ異常検出フラグF_XAPXFPF（「Ｎ」）と、ポンプ通電デューティ比率（「Ｒ」）と、インジケータ３の点灯状態（「Ｓ」）との時間的対応関係を示すタイミングチャートである。
【０１６５】
図１９に示すように、時刻Ｔ２０に何回目かの（少なくとも３回目以上の）ＥＣＵ４の電源オンがなされたと仮定する。なお、この時刻Ｔ２０において、燃料ポンプ異常検出フラグF_XAPXFPF及び燃料ポンプ異常検出カウンタCTXAPXFPFは「０」であるとする。そして、時刻Ｔ２１において、上記の図１８で説明したように、燃料ポンプ異常検出フラグF_XAPXFPFが「１」にセットされて、燃料ポンプ異常検出カウンタCTXAPXFPFが「１」にインクリメントされたとする。
【０１６６】
この時刻Ｔ２１以降、燃料ポンプ異常検出カウンタCTXAPXFPFが「１」、つまり燃料ポンプ異常検出回数が１回以上３回未満であるため、時刻Ｔ２１以前と比較して、燃料ポンプ３１ａの吐出流量が増加するようにポンプ通電デューティ比率は高く設定される。また、この時刻Ｔ２１以降、燃料ポンプ異常検出回数が１回以上３回未満であるため、インジケータ３は第１の点灯パターン（比較的長周期で点灯するパターン）で点灯する。
【０１６７】
この状態で、ＥＣＵ４の電源がオフされて、時刻Ｔ２２に再度ＥＣＵ４の電源オンがなされたと仮定する。なお、この時刻Ｔ２２において、燃料ポンプ異常検出フラグF_XAPXFPFは「０」に初期化されているが、燃料ポンプ異常検出カウンタCTXAPXFPFはＥＥＰＲＯＭ５０から読み込まれるため、前回の値（「１」）を保持している。この時刻Ｔ２２以降、燃料ポンプ異常検出カウンタCTXAPXFPFが「１」であるため、前回同様、ポンプ通電デューティ比率は高く設定される。
【０１６８】
そして、時刻Ｔ２３において、燃料ポンプ異常検出フラグF_XAPXFPFが「１」にセットされて、燃料ポンプ異常検出カウンタCTXAPXFPFが「２」にインクリメントされたとすると、この時刻Ｔ２３以降、燃料ポンプ異常検出カウンタCTXAPXFPFが「２」、つまり燃料ポンプ異常検出回数が１回以上３回未満であるため、ポンプ通電デューティ比率は前回同様、高く設定されたままであり、また、インジケータ３も前回同様、第１の点灯パターンで点灯する。
【０１６９】
この状態で、ＥＣＵ４の電源がオフされて、時刻Ｔ２４に再度ＥＣＵ４の電源オンがなされたと仮定する。なお、この時刻Ｔ２４において、燃料ポンプ異常検出フラグF_XAPXFPFは「０」に初期化されているが、燃料ポンプ異常検出カウンタCTXAPXFPFはＥＥＰＲＯＭ５０から読み込まれるため、前回の値（「２」）を保持している。この時刻Ｔ２４以降、燃料ポンプ異常検出カウンタCTXAPXFPFが「２」であるため、前回同様、ポンプ通電デューティ比率は高く設定される。
【０１７０】
そして、時刻Ｔ２５において、燃料ポンプ異常検出フラグF_XAPXFPFが「１」にセットされて、燃料ポンプ異常検出カウンタCTXAPXFPFが「３」にインクリメントされたとする。この時刻Ｔ２５以降、燃料ポンプ異常検出カウンタCTXAPXFPFが「３」、つまり燃料ポンプ異常検出回数が３回以上であるため、燃料ポンプ３１ａの吐出流量が最大化されるようにポンプ通電デューティ比率は１００％に設定される。また、この時刻Ｔ２５以降、燃料ポンプ異常検出回数が３回以上であるため、インジケータ３は第２の点灯パターン（比較的短周期で点灯するパターン）で点灯する。
【０１７１】
そして、時刻Ｔ２６において、エンジン回転数ＮＥが低負荷回転数NEXFPFL以上、且つスロットル開度値ＴＨが低負荷開度値THXFPFL以上になったとすると、この時刻Ｔ２６以降、燃料噴射量TIOUTは減量（０．８６倍）されることになる。さらに、時刻Ｔ２７において、エンジン回転数ＮＥが高負荷回転数NEXFPFH以上、且つスロットル開度値ＴＨが高負荷開度値THXFPFH以上になったとすると、この時刻Ｔ２７以降、燃料噴射量TIOUTは「０」に設定されることになる（燃料噴射の停止）。
【０１７２】
以上説明したように、本実施形態によれば、従来のような燃圧センサ等の燃圧検出手段を設けることなく、既存の空燃比センサ（Ｏ２センサ２６）を利用して精度良く燃料供給系２の異常を検出することができ、コストの上昇を抑えることができる。また、インジケータ３の点灯によって燃料供給系２の異常をユーザに報知することで、ユーザに燃料フィルタ３１ｂの交換を促すことができる。
【０１７３】
なお、本発明は上記実施形態に限定されず、以下のような変形例が挙げられる。
（１）上記実施形態では、図１６に示した燃料噴射量算出処理に従って燃料噴射量TIOUTを算出する場合を例示して説明したが、図２０に示す燃料噴射量算出処理に従って燃料噴射量TIOUTを算出しても良い。以下、燃料噴射量算出処理の変形例について、図２０のフローチャートを参照しながら説明する。
＜ステップＳ６１＞
図２０に示すように、ＣＰＵ５３は、まずステップＳ６１の処理として、回転数カウンタ４１からエンジン回転数ＮＥを取得すると共に、Ａ／Ｄ変換器４２からスロットル開度値ＴＨを取得する（つまり、エンジン運転状態を把握する）。
【０１７４】
＜ステップＳ６２＞
そして、ＣＰＵ５３は、ステップＳ６２の処理として、エンジン回転数ＮＥと、スロットル開度値ＴＨと、燃料噴射量TIOUTとの対応関係を示す３次元マップを用いて、現在のエンジン回転数ＮＥ及びスロットル開度値ＴＨに対応する燃料噴射量TIOUT（単位はｍｓ）を算出し、当該算出した燃料噴射量TIOUTにＯ２フィードバック補正値MHGを乗算することで、燃料噴射量TIOUTを補正する。
【０１７５】
＜ステップＳ６３＞
そして、ＣＰＵ５３は、ステップＳ６３の処理として、燃料ポンプ異常検出カウンタCTXAPXFPが所定値（例えば「３」）以上か否か、つまり燃料ポンプ異常検出回数が３回以上か否かを判定し、「Ｙｅｓ」の場合にはステップＳ６４の処理に移行する一方、「Ｎｏ」の場合には燃料噴射量算出処理を終了する。
【０１７６】
＜ステップＳ６４＞
ＣＰＵ５３は、上記ステップＳ６３において「Ｙｅｓ」の場合、つまり燃料ポンプ異常検出カウンタCTXAPXFP≧３の場合、ステップＳ６４の処理として、下記（４）式を用いて理論燃料噴射時間TILOGを算出する。なお、下記（４）式において、「TIO」はインジェクタ無効噴射時間を指し、インジェクタ２１の機種によって設定される固定値である。
TILOG  ＝  TIOUT  −  TIO          ・・・（４）
【０１７７】
＜ステップＳ６５＞
続いて、ＣＰＵ５３は、上記ステップＳ６５の処理として、下記（５）式を用いて、１回当りの燃料噴射量QTILOG(単位はリットル：Ｌ)を算出する。なお、下記（５）式において、「ΔTIOUT」は、単位時間当たりの燃料噴射量（単位はｍｍ３／ｍｓ）であり、インジェクタ２１の機種によって設定される固定値である。
QTILOG  ＝  TILOG  ×  ΔTIOUT ／1000000      ・・・（５）
【０１７８】
＜ステップＳ６６＞
続いて、ＣＰＵ５３は、上記ステップＳ６６の処理として、下記（６）式を用いて、１時間当りの燃料噴射回数CTINJOUT（回／Ｈ）を算出する。
CTINJOUT  ＝  ＮＥ（ｒｐｍ）×６０／２    ・・・（６）
【０１７９】
＜ステップＳ６７＞
続いて、ＣＰＵ５３は、上記ステップＳ６７の処理として、下記（７）式を用いて、１時間当りの燃料噴射量QFUEL（Ｌ／Ｈ）を算出する。
QFUEL  ＝  QTILOG（Ｌ）×  CTINJOUT（回／Ｈ）  ・・・（７）
【０１８０】
＜ステップＳ６８＞
そして、ＣＰＵ５３は、上記ステップＳ６７の処理終了後、ステップＳ６８の処理として、１時間当りの燃料噴射量QFUELが規定流量（例えば「７（Ｌ／Ｈ）」）以上か否かを判定し、「Ｙｅｓ」の場合にはステップＳ６９の処理に移行する一方、「Ｎｏ」の場合には燃料噴射量算出処理を終了する。
【０１８１】
＜ステップＳ６９＞
ＣＰＵ５３は、上記ステップＳ６８において「Ｙｅｓ」の場合、つまり１時間当りの燃料噴射量QFUELが規定流量以上の場合、ステップＳ６９の処理として、規定流量を越えないような燃料噴射量TIOUTを再度算出した後、燃料噴射量算出処理を終了する。具体的には、規定流量を「７（Ｌ／Ｈ）」とすると、燃料噴射量TIOUTは下記（８）式で表される。
TIOUT  ＝  TILOG  ×  ７／QFUEL  ＋  TIO        ・・・（８）
【０１８２】
以上のように、本変形例における燃料噴射量算出処理では、エンジン運転状態に基づいて燃料噴射量TIOUTを算出する一方、燃料供給系２の異常と連続して判断された回数が所定回数以上となった場合、燃料噴射量TIOUTに基づいて１時間当りの燃料噴射量QFUELを算出し、当該１時間当りの燃料噴射量QFUELが規定流量以上の場合には、規定流量を越えないような燃料噴射量TIOUTを再算出する。これにより、図１６に示した燃料噴射量算出処理と比べて、高精度に燃料噴射量を制御することができる。
【０１８３】
（２）上記実施形態では、図１１に示したように、Ｏ２フィードバック領域を３つの学習領域（アイドリング運転領域、低負荷運転領域、高負荷運転領域）に分割した場合を例示したが、Ｏ２フィードバック領域の分割数はこれに限らず、低負荷運転領域及び高負荷運転領域さえ設定されていれば、４つ以上でも良いし、２つだけでも良い。
【０１８４】
（３）本発明は、小型二輪車のようにサイズが小さい車両の燃料供給系の異常検出に好適であるが、これに限定されるものでなく、大型二輪車や四輪自動車等のサイズの大きな車両に適用することでもコストメリットを得ることができる。
【符号の説明】
【０１８５】
１…エンジン、２…燃料供給系、３…インジケータ（報知部）、４…ＥＣＵ（燃料供給系異常検出装置）、２６…Ｏ２センサ（空燃比センサ）、３０…燃料タンク、３１…燃料ポンプモジュール、３１ａ…燃料ポンプ、２１…インジェクタ（燃料噴射弁）、５３…ＣＰＵ（Central Processing Unit：信号処理部） 
【図１】
2011185222.tif 000003
【図２】
2011185222.tif 000004
【図３】
2011185222.tif 000005
【図４】
2011185222.tif 000006
【図５】
2011185222.tif 000007
【図６】
2011185222.tif 000008
【図７】
2011185222.tif 000009
【図８】
2011185222.tif 000010
【図９】
2011185222.tif 000011
【図１０】
2011185222.tif 000012
【図１１】
2011185222.tif 000013
【図１２】
2011185222.tif 000014
【図１３】
2011185222.tif 000015
【図１４】
2011185222.tif 000016
【図１５】
2011185222.tif 000017
【図１６】
2011185222.tif 000018
【図１７】
2011185222.tif 000019
【図１８】
2011185222.tif 000020
【図１９】
2011185222.tif 000021
【図２０】
2011185222.tif 000022