以下、図面を参照しながら、本発明の好ましい実施形態について説明する。図1に示すように、本発明を適用した異常判定装置1は、ECU2を備えており、このECU2は、内燃機関(以下「エンジン」という)3の空燃比制御を含む各種の制御処理を行う。エンジン3は、車両(図示せず)に搭載された、例えば4気筒のガソリンエンジンである。エンジン3の吸気管4には、スロットル弁6が設けられ、その下流側の吸気マニホールド(図示せず)には、燃料噴射弁(以下「インジェクタ」という)7が気筒ごとに設けられている。各インジェクタ7の開弁時間および開閉タイミングは、ECU2によって制御され、それにより、燃料噴射量QINJおよび燃料噴射時期が制御される。一方、排気管5の下流側には、触媒8が設けられている。この触媒8は、三元触媒で構成されており、酸化還元作用によって、排ガス中のCO、HCおよびNOxを浄化する。
また、排気管5の触媒8よりも下流側には、酸素濃度センサ(以下「O2センサ」という)21が設けられている。O2センサ21は、触媒8の下流側における排ガス中の酸素濃度を検出し、混合気の空燃比に応じて変化する排ガスの空燃比(以下「排ガス空燃比」という)A/FEXに応じた電圧を有する信号をECU2に出力する。図2に示すように、O2センサ21は、混合気の理論空燃比に相当する排ガスの空燃比(以下「理論排ガス空燃比」という)A/FTHEXのときに、O2センサ21の出力信号の電圧値(以下「O2出力値」という)SVO2がストイキ出力値VTHEX(例えば450mV)を示すとともに、理論排ガス空燃比A/FTHEXの前後において急激に変化する出力特性を有する。
具体的には、O2出力値SVO2は、排ガス空燃比A/FEXがリッチなときには、高い値(例えば600mV)を示し、排ガス空燃比A/FEXがリーンなときには、低い値(例えば150mV)を示すとともに、その間では急激に変化する。また、その変化度合は、排ガス空燃比A/FEXに応じて変化し、排ガス空燃比A/FEXが理論排ガス空燃比A/FTHEX付近のときに、この例では、排ガス空燃比A/FEXが、O2出力値SVO2がストイキ出力値VTHEXよりも50mVだけ小さい値(=400mV)に相当するときに、最大になる。また、O2センサ21の検出部(図示せず)には、温度センサ22が設けられている。温度センサ22は、検出部の温度TSO2を検出し、その検出信号をECU2に出力する。
また、吸気管4のスロットル弁6よりも上流側には、エアフローメータ23が設けられている。エアフローメータ23は、吸気管4を流れる空気の質量(以下「吸気量」という)GAIRを検出し、その検出信号をECU2に出力する。
また、ECU2は、CPU、RAM、ROMおよび入出力インターフェース(いずれも図示せず)などから成るマイクロコンピュータ(図示せず)で構成されている。ECU2は、上述したセンサ21〜23の検出信号に応じ、ROMに記憶された制御プログラムなどに基づいて、空燃比制御などのための各種の演算処理を実行する。なお、本実施形態では、ECU2は、微分値算出手段および異常判定手段に相当する。
次に、図3〜図13を参照しながら、ECU2で実行されるO2センサ21の異常判定処理について説明する。この異常判定処理は、O2センサ21の出力特性の変化に伴う出力値SVO2の異常を判定するものであり、図3がメインルーチン、図4〜図13がサブルーチンに相当する。各処理は、所定時間ごとに実行される。
図3のメインルーチンではまず、ステップ1(「S1」と図示。以下同じ)において、モニタ条件判定処理を実行する。このモニタ条件判定処理は、O2センサ21の異常判定処理の実行条件が整っているか否かを判定するものであり、図4はそのサブルーチンを示す。
本処理ではまず、ステップ21〜23において、以下の(1)〜(3)の条件が成立しているか否かをそれぞれ判別する。
(1)O2センサ21の検出部の温度TSO2が所定温度TREF以上であること
(2)O2センサ異常フラグF_SO2ERRが「0」であること(O2センサ21の異常が確定していないこと)
(3)O2センサ21に断線や出力値の停滞・振動などの他の異常が発生していないこと
これらの(1)〜(3)の条件がすべて成立しているときには、モニタ条件が成立していると判定し、そのことを表すために、ステップ24において、モニタ条件フラグF_MONを「1」にセットし、本処理を終了する。一方、(1)〜(3)の条件のいずれかが成立していないときには、モニタ条件が成立していないと判定し、そのことを表すために、ステップ25において、モニタ条件フラグF_MONを「0」にセットし、本処理を終了する。
図3に戻り、前記ステップ1に続くステップ2では、モニタ条件フラグF_MONが「1」であるか否かを判別する。この答がNOで、モニタ条件が成立していないときには、そのまま本処理を終了する。一方、上記ステップ2の答がYESで、モニタ条件が成立しているときには、O2出力値SVO2の今回値と前回値との差を、O2微分値DSVO2として算出する(ステップ3)とともに、算出されたO2微分値DSVO2を、O2出力値SVO2の今回値とともに記憶する(ステップ4)。
次に、ステップ5において、フューエルカットフラグF_FCが「1」であるか否かを判別する。この答がYESで、エンジン3がフューエルカット(F/C)運転中のときには、ステップ6において、F/C開始時異常判定終了フラグF_INENDが「1」であるか否かを判別する。この答がYESで、フューエルカット運転開始時の異常判定がすでに終了しているときには、そのまま本処理を終了する。
一方、上記ステップ6の答がNOで、フューエルカット運転開始時の異常判定がまだ終了していないときには、ステップ7において、フューエルカット運転の終了時からの吸気量GAIRの積算値(以下「終了時吸気量積算値」という)ΣGOUTを0にリセットし、ステップ8において、フューエルカット運転の開始時から前回時までの吸気量GAIRの積算値ΣGINに吸気量GAIRを加算することによって、今回時までの吸気量GAIRの積算値(以下「開始時吸気量積算値」という)ΣGINを算出する。
次に、ステップ9において、算出した開始時吸気量積算値ΣGINが第1所定量GREF1以上であるか否かを判別する。この答がNOのときには、そのまま本処理を終了する。一方、上記ステップ9の答がYESのときには、フューエルカット運転を開始してから十分な量の空気がエンジン3に供給され、フューエルカット運転の実行に伴って排ガス空燃比A/FEXがリッチ側からリーン側に変化したとして、ステップ10において、フューエルカット運転開始時の異常判定処理を実行し、ステップ15に進む。このフューエルカット運転開始時の異常判定処理は、フューエルカット運転の開始後に前記ステップ4で記憶されたO2出力値SVO2およびO2微分値DSVO2を用いて、O2センサ21の異常を判定するものであり、図5はそのサブルーチンを示す。
本処理ではまず、ステップ31において、開始時ピーク異常判定終了フラグF_INPENDが「1」であるか否かを判別する。この答がNOのときには、ステップ32において、フューエルカット運転開始時のピーク異常判定処理を実行し、図5の処理を終了する。このピーク異常判定処理は、理論排ガス空燃比A/FTHEX付近におけるO2センサ21の出力特性のずれの異常を判定するものであり、図6はそのサブルーチンを示す。
本処理ではまず、ステップ40において、開始時ピーク微分値DINPを算出する。この開始時ピーク微分値DINPは、O2微分値DSVO2が極小値を示すとき(ピーク時)の値であり、次のようにして算出される。まず、フューエルカット運転を開始してから開始時吸気量積算値ΣGINが第1所定量GREF1以上になるまでの間(以下、この期間を「開始時移行期間」という)に記憶されたO2微分値DSVO2のうち、O2微分値DSVO2が極小値になったタイミングをピーク時と判定する。このタイミングは、O2微分値DSVO2をさらに微分した値(O2微分値の増加量)が3回以上連続して正の値になったときの1回目の制御サイクルの開始タイミングに定められる。次に、ピーク時のO2微分値DSVO2を開始時ピーク微分値DINPとして算出する。
次に、ステップ41において、開始時ピーク微分値DINPに対応するO2出力値SVO2を開始時ピーク出力値VINPとして算出する。
なお、前述したように、O2センサ21は、理論排ガス空燃比A/FTHEX付近において出力値の変化度合が最大になる出力特性を有するため、O2センサ21が正常なときには、開始時ピーク微分値DINPおよび開始時ピーク出力値VINPは、理論排ガス空燃比A/FTHEX付近において得られる。
次に、ステップ42において、開始時ピーク微分値DINPの1/2(=DINP/2)を、開始時基本微分値DINBASEとして算出する。この開始時基本微分値DINBASEは、後述するリッチ側異常判定およびリーン側異常判定に用いられる。
次に、ステップ43において、算出した開始時ピーク出力値VINPが第1下限電圧VL1以上で、かつ第1上限電圧VH1以下であるか否かを判別する。この第1下限電圧VL1は、ストイキ出力値VTHEXよりも150mVだけ小さな値(=300mV)に、第1上限電圧VH1は、ストイキ出力値VTHEXよりも50mVだけ大きな値(=500mV)に、それぞれ設定されている。ステップ43の答がYESで、VL1≦VINP≦VH1のときには、理論排ガス空燃比A/FTHEX付近におけるO2センサ21の出力特性は正常であると判定し、そのことを表すために、ステップ44において、開始時ピーク異常フラグF_INPERRを「0」にセットし、ステップ46に進む。
一方、前記ステップ43の答がNOで、VINP<VL1またはVINP>VH1のときには、理論排ガス空燃比A/FTHEX付近におけるO2センサ21の出力特性のずれの異常が発生していると判定し、そのことを表すために、ステップ45において、開始時ピーク異常フラグF_INPERRを「1」にセットし、ステップ46に進む。
ステップ44またはステップ45に続くステップ46では、フューエルカット運転開始時のピーク異常判定処理が終了したことを表すために、開始時ピーク異常判定終了フラグF_INPENDを「1」にセットし、本処理を終了する。
図5に戻り、前記ステップ31の答がYESで、開始時ピーク異常判定終了フラグF_INPENDが「1」のときには、ステップ33において、開始時リッチ異常判定終了フラグF_INRENDが「1」であるか否かを判別する。この答がNOのときには、ステップ34において、フューエルカット運転開始時のリッチ側異常判定処理を実行し、図5の処理を終了する。このリッチ側異常判定処理は、理論排ガス空燃比A/FTHEX付近よりもリッチ側の領域におけるO2センサ21の出力特性のずれの異常を判定するものであり、図7はそのサブルーチンを示す。
本処理ではまず、ステップ51において、開始時上限通過フラグF_INVH2を設定する。図示しないが、この開始時上限通過フラグF_INVH2は、開始時移行期間の始点からピーク時までの間に記憶されたO2出力値SVO2が、第2上限電圧VH2よりも大きい側から第2上限電圧VH2をまたいで小さい側に変化したときに「0」にセットされ、それ以外のときに「1」にセットされる。第2上限電圧VH2は、前記第1上限電圧VH1よりも大きく、O2センサ21の出力範囲の上限よりも50mVだけ小さな値(=550mV)に設定されている。
次に、ステップ52において、開始時上限通過フラグF_INVH2が「0」であるか否かを判別する。この答がNOで、O2出力値SVO2が、第2上限電圧VH2をまたいで大きい側から小さい側に変化していないときには、O2出力値SVO2が出力範囲の上限に達しない異常が発生しているとして、ステップ56において、開始時リッチ異常フラグF_INRERRを「1」にセットし、ステップ57に進む。
一方、上記ステップ52の答がYESで、O2出力値SVO2が、第2上限電圧VH2をまたいで変化しているときには、O2出力値SVO2が出力範囲の上限に達していると判定し、ステップ53において、開始時リッチ出力値VINRを算出する。この開始時リッチ出力値VINRは、開始時移行期間の始点からピーク時までの間において、O2微分値DSVOがステップ42で算出された開始時基本微分値DINBASEに最も近い値を示すときのO2出力値SVO2である。具体的には、開始時移行期間の始点からピーク時までの間に前記ステップ4で記憶されたO2微分値DSVOの中から、開始時基本微分値DINBASEとの差の絶対値(=|DINBASE−DSVO2|)が最も小さいO2微分値DSVOを求め、それに対応するO2出力値SVO2を開始時リッチ出力値VINRとして算出する。
次に、ステップ54において、算出した開始時リッチ出力値VINRが、第2下限電圧VL2以上で、かつ前記第2上限電圧VH2以下であるか否かを判別する。この第2下限電圧VL2は、前記第1下限電圧VL1よりも小さく、かつO2センサ21の出力範囲の下限よりも50mVだけ大きな値(=200mV)に設定されている。ステップ54の答がNOで、VINR<VL2またはVINR>VH2のときには、第2上限電圧VH2に相当する排ガス空燃比A/FEXと理論排ガス空燃比A/FTHEX付近の間の領域において、O2センサ21の出力特性のずれの異常が発生していると判定し、前記ステップ56に進み、開始時リッチ異常フラグF_INRERRを「1」にセットする。
一方、上記ステップ54の答がYESで、VL2≦VINR≦VH2のときには、上記の領域におけるO2センサ21の出力特性は正常であると判定するとともに、前記ステップ52の答もYESであることから、理論排ガス空燃比A/FTHEX付近よりもリッチ側の領域におけるO2センサ21の出力特性は正常であると判定し、そのことを表すために、ステップ55において、開始時リッチ異常フラグF_INRERRを「0」にセットし、ステップ57に進む。
ステップ55またはステップ56に続くステップ57では、フューエルカット運転開始時のリッチ側異常判定処理が終了したことを表すために、開始時リッチ異常判定終了フラグF_INRENDを「1」にセットし、本処理を終了する。
図5に戻り、前記ステップ33の答がYESで、開始時リッチ異常判定終了フラグF_INRENDが「1」のときには、ステップ35において、開始時リーン異常判定終了フラグF_INRENDが「1」であるか否かを判別する。この答がNOのときには、ステップ36において、フューエルカット運転開始時のリーン側異常判定処理を実行し、図5の処理を終了する。このリーン側異常判定処理は、理論排ガス空燃比A/FTHEX付近よりもリーン側の領域におけるO2センサ21の出力特性のずれの異常を判定するものであり、図8はそのサブルーチンを示す。
本処理ではまず、ステップ61において、開始時リーン出力値VINLを算出する。この開始時リーン出力値VINLは、ピーク時から開始時移行期間の終点までの間において、O2微分値DSVOが開始時基本微分値DINBASEに最も近い値を示すときのO2出力値SVO2である。具体的には、ピーク時から開始時移行期間の終点までの間に記憶されたO2微分値DSVOの中から、開始時基本微分値DINBASEとの差の絶対値が最も小さいO2微分値DSVOを求め、それに対応するO2出力値SVO2を開始時リーン出力値VINLとして算出する。
次に、ステップ62において、算出した開始時リーン出力値VINLが、前記第2下限電圧VL2以上で、かつ前記第2上限電圧VH2以下であるか否かを判別する。この答がNOで、VINL<VL2またはVINL>VH2のときには、第2下限電圧VL2に相当する排ガス空燃比A/FEXと理論排ガス空燃比A/FTHEX付近の間の領域において、O2センサ21の出力特性のずれの異常が発生していると判定し、ステップ66において、開始時リーン異常フラグF_INLERRを「1」にセットし、ステップ67に進む。
一方、上記ステップ62の答がYESで、VL2≦VINL≦VH2のときには、上記の領域におけるO2センサ21の出力特性は正常であると判定し、ステップ63において、開始時下限通過フラグF_INVL2を設定する。図示しないが、この開始時下限通過フラグF_INVL2は、ピーク時から開始時移行期間の終点までの間に記憶されたO2出力値SVO2が、第2下限電圧VL2よりも大きい側から第2下限電圧VL2をまたいで小さい側に変化したときに「0」にセットされ、それ以外のときに「1」にセットされる。
次に、ステップ64において、開始時下限通過フラグF_INVL2が「0」であるか否かを判別する。この答がNOで、O2出力値SVO2が、第2下限電圧VL2をまたいで大きい側から小さい側に変化していないときには、O2出力値SVO2が出力範囲の下限に達しない異常が発生しているとして、前記ステップ66に進み、開始時リーン異常フラグF_INLERRを「1」にセットする。
一方、上記ステップ64の答がYESで、O2出力値SVO2が、第2下限電圧VL2をまたいで変化しているときには、O2出力値SVO2が出力範囲の下限に達していると判定するとともに、前記ステップ62の答もYESであることから、理論排ガス空燃比A/FTHEX付近よりもリーン側の領域におけるO2センサ21の出力特性は正常であると判定し、そのことを表すために、ステップ65において、開始時リーン異常フラグF_INLERRを「0」にセットし、ステップ67に進む。
ステップ65またはステップ66に続くステップ67では、フューエルカット運転開始時のリーン側異常判定処理が終了したことを表すために、開始時リーン異常判定終了フラグF_INLENDを「1」にセットし、本処理を終了する。
図5に戻り、前記ステップ35の答がYESで、開始時リーン異常判定終了フラグF_INLENDが「1」のときには、フューエルカット運転開始時の一連の異常判定処理が終了しているため、そのことを表すために、ステップ37において、開始時異常判定終了フラグF_INENDを「1」にセットし、本処理を終了する。
図3に戻り、前記ステップ5の答がNOで、フューエルカットフラグF_FCが「0」であり、エンジン3のフューエルカット運転が終了しているときには、ステップ11において、開始時吸気量積算値ΣGINを0にリセットし、ステップ12において、前回時までの終了時吸気量積算値ΣGOUTに吸気量GAIRを加算することによって、今回時までの終了時吸気量積算値ΣGOUTを算出する。
次に、ステップ13において、算出した終了時吸気量積算値ΣGOUTが第2所定量GREF2以上であるか否かを判別する。この答がNOのときには、そのまま本処理を終了する。一方、上記ステップ13の答がYESのときには、フューエルカット運転の終了に伴って排ガス空燃比A/FEXがリーン側からリッチ側に変化したとして、ステップ14において、フューエルカット運転終了時の異常判定処理を実行し、ステップ15に進む。このフューエルカット運転終了時の異常判定処理は、前述したフューエルカット運転開始時の異常判定処理と同様のものであり、図9はそのサブルーチンを示す。
本処理ではまず、ステップ71において、終了時ピーク異常判定終了フラグF_OUTPENDが「1」であるか否かを判別する。この答がNOのときには、ステップ72において、フューエルカット運転終了時のピーク異常判定処理を実行し、図9の処理を終了する。図10はそのサブルーチンを示す。
本処理ではまず、ステップ80において、終了時ピーク微分値DOUTPを算出する。この終了時ピーク微分値DOUTPは、O2微分値DSVO2が極大値を示すとき(ピーク時)の値であり、フューエルカット運転を終了してから終了時吸気量積算値ΣGOUTが第2所定量GREF2以上になるまでの間(以下、この期間を「終了時移行期間」という)に記憶されたO2微分値DSVO2に基づき、前述した開始時ピーク微分値DINPと同様にして算出される。
次に、ステップ81において、終了時ピーク微分値DOUTPに対応するO2出力値SVO2を終了時ピーク出力値VOUTPとして算出する。
次に、ステップ82において、終了時ピーク微分値DOUTPの1/2(=DOUTP/2)を、終了時基本微分値DOUTBASEとして算出する。この終了時基本微分値DOUTBASEは、後述するリッチ側異常判定およびリーン側異常判定に用いられる。
次に、ステップ83において、算出した終了時ピーク出力値VOUTPが前記第1下限電圧VL1以上で、かつ前記第1上限電圧VH1以下であるか否かを判別する。この答がYESで、VL1≦VOUTP≦VH1のときには、理論排ガス空燃比A/FTHEX付近におけるO2センサ21の出力特性は正常であると判定し、そのことを表すために、ステップ84において、終了時ピーク異常フラグF_OUTPERRを「0」にセットし、ステップ86に進む。
一方、前記ステップ83の答がNOで、VOUTP<VL1またはVOUTP>VH1のときには、理論排ガス空燃比A/FTHEX付近におけるO2センサ21の出力特性のずれの異常が発生していると判定し、そのことを表すために、ステップ85において、終了時ピーク異常フラグF_OUTPERRを「1」にセットし、ステップ86に進む。
ステップ84またはステップ85に続くステップ86では、フューエルカット運転終了時のピーク異常判定処理が終了したことを表すために、終了時ピーク異常判定終了フラグF_OUTPENDを「1」にセットし、本処理を終了する。
図9に戻り、前記ステップ71の答がYESで、終了時ピーク異常判定終了フラグF_OUTPENDが「1」のときには、ステップ73において、終了時リーン異常判定終了フラグF_OUTLENDが「1」であるか否かを判別する。この答がNOのときには、ステップ74において、フューエルカット運転終了時のリーン側異常判定処理を実行し、図9の処理を終了する。図11はそのサブルーチンを示す。
本処理ではまず、ステップ91において、終了時下限通過フラグF_OUTVL2を設定する。図示しないが、この終了時下限通過フラグF_OUTVL2は、フューエルカット運転を終了してからピーク時までの間に、O2出力値SVO2が第2下限電圧VL2よりも小さい側から第2下限電圧VL2をまたいで大きい側に変化したときに「0」にセットされ、それ以外のときに「1」にセットされる。
次に、ステップ92において、終了時下限通過フラグF_OUTVL2が「0」であるか否かを判別する。この答がNOで、O2出力値SVO2が、第2下限電圧VL2をまたいで小さい側から大きい側に変化していないときには、O2出力値SVO2が出力範囲の下限に達しない異常が発生しているとして、ステップ96において、終了時リーン異常フラグF_OUTLERRを「1」にセットし、ステップ57に進む。
一方、上記ステップ92の答がYESで、O2出力値SVO2が、第2下限電圧VH2をまたいで変化しているときには、O2出力値SVO2が出力範囲の下限に達していると判定し、ステップ93において、終了時リーン出力値VOUTLを算出する。この終了時リーン出力値VOUTLは、終了時移行期間の始点からピーク時までの間において、O2微分値DSVOがステップ82で算出された終了時基本微分値DOUTBASEに最も近い値を示すときのO2出力値SVO2であり、前述した開始時リッチ出力値VINRと同様の方法で算出される。
次に、ステップ94において、算出した終了時リーン出力値VOUTLが前記第2下限電圧VL2以上で、かつ前記第2上限電圧VH2以下であるか否かを判別する。この答がNOで、VOUTL<VL2またはVOUTL>VH2のときには、第2下限電圧VL2に相当する排ガス空燃比A/FEXと理論排ガス空燃比A/FTHEX付近の間の領域において、O2センサ21の出力特性のずれの異常が発生していると判定し、前記ステップ96に進み、終了時リーン異常フラグF_OUTLERRを「1」にセットする。
一方、上記ステップ94の答がYESで、VL2≦VOUTL≦VH2のときには、上記の領域におけるO2センサ21の出力特性は正常であると判定するとともに、前記ステップ92の答もYESであることから、理論排ガス空燃比A/FTHEX付近よりもリーン側の領域におけるO2センサ21の出力特性は正常であると判定し、そのことを表すために、ステップ95において、終了時リーン異常フラグF_OUTLERRを「0」にセットし、ステップ97に進む。
ステップ95またはステップ96に続くステップ97では、フューエルカット運転終了時のリーン側異常判定処理が終了したことを表すために、終了時リーン異常判定終了フラグF_OUTLENDを「1」にセットし、本処理を終了する。
図9に戻り、前記ステップ73の答がYESで、終了時リーン異常判定終了フラグF_OUTLENDが「1」のときには、ステップ75において、終了時リッチ異常判定終了フラグF_OUTRENDが「1」であるか否かを判別する。この答がNOのときには、ステップ76において、フューエルカット運転終了時のリッチ側異常判定処理を実行し、図9の処理を終了する。図12はそのサブルーチンを示す。
本処理ではまず、ステップ101において、終了時リッチ出力値VOUTRを算出する。この終了時リッチ出力値VOUTRは、ピーク時から終了時移行期間の終点までの間において、O2微分値DSVOが終了時基本微分値DOUTBASEに最も近い値を示すときのO2出力値SVO2であり、前述した開始時リーン出力値VINLと同様の方法で算出される。
次に、ステップ102において、算出した終了時リッチ出力値VOUTRが、前記第2下限電圧VL2以上で、かつ前記第2上限電圧VH2以下であるか否かを判別する。この答がNOで、VOUTR<VL2またはVOUTR>VH2のときには、第2上限電圧VH2に相当する排ガス空燃比A/FEXと理論排ガス空燃比A/FTHEX付近の間の領域において、O2センサ21の出力特性のずれの異常が発生していると判定し、ステップ106において、終了時リッチ異常フラグF_OUTRERRを「1」にセットし、ステップ107に進む。
一方、前記ステップ102の答がYESで、VL2≦VOUTR≦VH2のときには、ステップ103において、終了時上限通過フラグF_OUTVH2を設定する。図示しないが、この終了時上限通過フラグF_OUTVH2は、ピーク時から終了時移行期間の終点までの間に記憶されたO2出力値SVO2が、第2上限電圧VH2よりも小さい側から第2上限電圧VH2をまたいで大きい側に変化したときに「0」にセットされ、それ以外のときに「1」にセットされる。
次に、ステップ104において、終了時上限通過フラグF_OUTVH2が「0」であるか否かを判別する。この答がNOで、O2出力値SVO2が、第2上限電圧VH2をまたいで小さい側から大きい側に変化していないときには、O2出力値SVO2が出力範囲の上限に達しない異常が発生しているとして、前記ステップ106に進み、終了時リッチ異常フラグF_OUTRERRを「1」にセットする。
一方、上記ステップ104の答がYESで、O2出力値SVO2が、第2上限電圧VH2をまたいで変化しているときには、O2出力値SVO2が出力範囲の上限に達していると判定するとともに、前記ステップ102の答もYESであることから、理論排ガス空燃比A/FTHEX付近よりもリッチ側の領域におけるO2センサ21の出力特性は正常であると判定し、そのことを表すために、ステップ105において、終了時リッチ異常フラグF_OUTRERRを「0」にセットし、ステップ107に進む。
ステップ105またはステップ106に続くステップ107では、フューエルカット運転終了時のリッチ側異常判定処理が終了したことを表すために、終了時リッチ異常判定終了フラグF_OUTRENDを「1」にセットし、本処理を終了する。
図9に戻り、前記ステップ75の答がYESで、終了時リッチ異常判定終了フラグF_OUTRENDが「1」のときには、フューエルカット運転終了時の一連の異常判定処理が終了しているため、そのことを表すために、ステップ77において、終了時異常判定終了フラグF_OUTENDを「1」にセットし、本処理を終了する。
図3に戻り、前記ステップ10またはステップ14に続くステップ15では、終了時異常判定終了フラグF_OUTENDが「1」であるか否かを判別する。この答がNOのときには、そのまま本処理を終了する。一方、上記ステップ15の答がYESで、フューエルカット運転終了時の異常判定処理が終了しているときには、ステップ16において、総合判定処理を実行し、図3の処理を終了する。この総合判定処理は、上述した各種の異常判定においてセットされた異常フラグを用いて、O2センサ21の異常を総合的に判定するものであり、図13はそのサブルーチンを示す。
本処理ではまず、ステップ111〜116において、以下の(1)〜(6)の条件が成立しているか否かをそれぞれ判別する。
(1)開始時ピーク異常フラグF_INPERR=0
(2)開始時リッチ異常フラグF_INRERR=0
(3)開始時リーン異常フラグF_INLERR=0
(4)終了時ピーク異常フラグF_OUTPERR=0
(5)終了時リーン異常フラグF_OUTLERR=0
(6)終了時リッチ異常フラグF_OUTRERR=0
これらの(1)〜(6)の条件がすべて成立しているときには、O2センサ21は正常であると判定し、そのことを表すために、ステップ117において、O2センサ異常フラグF_SO2ERRを「0」にセットし、ステップ119に進む。一方、(1)〜(6)の条件のいずれかが成立していないときには、O2センサ21の異常が発生していると判定し、そのことを表すために、ステップ118において、O2センサ異常フラグF_SO2ERRを「1」にセットし、ステップ119に進む。
ステップ117またはステップ118に続くステップ119およびステップ120では、開始時異常判定終了フラグF_INENDおよび終了時異常判定終了フラグF_OUTENDをいずれも「0」にセットし、本処理を終了する。
次に、図14〜図18を参照しながら、これまでに説明した異常判定処理による判定例を、フューエルカット運転開始時の異常判定処理の場合を例にとり説明する。図14(a)〜(f)は、異常発生時のO2センサ21の出力特性(細線)を、正常時の出力特性(太線)とともに、異常パターンごとに示し、図15〜18は、フューエルカット運転の開始に伴う各種パラメータの変化を示す。
図15に示すように、O2センサ21が正常な場合には、フューエルカット運転を開始する前に(F_FC=0)、O2出力値SVO2は第2上限値VH2よりも大きなほぼ一定の値になっており、したがって、O2微分値DSVO2は0である。フューエルカットフラグF_FCが「1」にセットされ、フューエルカット運転が開始されると、O2出力値SVO2は、O2センサ21の出力特性に従って減少し、最終的に第2下限値VL2よりも小さなほぼ一定の値になる。その間、O2微分値DSVO2は、O2センサ21の出力特性に従って、理論排ガス空燃比A/FTHEX付近において開始時ピーク微分値DINPまで減少した後、増加に転じ、0に戻る。
同図に示すように、O2出力値SVO2は、第2上限値VH2および第2下限値VL2をまたいで変化しており、開始時ピーク出力値VINPは、第1上限値VH1と第1下限値VL1の間にあり、開始時リッチ出力値VINRおよび開始時リーン出力値VINLはいずれも、第2上限値VH2と第2下限値VL2の間にある。
したがって、O2センサ21が正常なときには、図19に示すように、開始時上限通過フラグF_INVH2、開始時ピーク異常フラグF_INPERR、開始時リッチ異常フラグF_INRERR、開始時リーン異常フラグF_INLERRおよび開始時下限通過フラグF_INVL2がすべて「0」にセットされる。その結果、図13に示す総合判定において、O2センサ21は正常と判定される。
これに対し、図14(a)の細線に示すように、O2出力値SVO2が全体的に増加側にオフセットする異常(以下「リッチ側オフセット」という)が発生している場合には、図16の1点鎖線に示すように、O2微分値DSVO2は、O2センサ21が正常なときと同じであり、したがって、開始時ピーク微分値DINPおよび開始時基本微分値DINBASEも同じである。
一方、O2出力値SVO2は、第2上限値VH2をまたいで変化するものの、第2下限値VL2はまたがず、その上側(大きい側)に留まる。また、開始時リーン出力値VINLは第2上限値VH2と第2下限値VL2の間にあるものの、開始時ピーク出力値VINPは第1上限値VH1よりも上側(大きい側)にあり、開始時リッチ出力値VINRは第2上限値VH2よりも上側にある。
したがって、リッチ側オフセットが発生しているときには、図19に示すように、開始時上限通過フラグF_INVH2は「0」にセットされ、開始時ピーク異常フラグF_INPERR、開始時リッチ異常フラグF_INRERR、開始時リーン異常フラグF_INLERRおよび開始時下限通過フラグF_INVL2はいずれも「1」にセットされる。その結果、図13に示す総合判定において、O2センサ21は異常と判定される。
また、図14(b)の細線に示すように、O2出力値SVO2が全体的に減少側にオフセットする異常(以下「リーン側オフセット」という)が発生している場合には、図16の2点鎖線に示すように、O2微分値DSVO2は、O2センサ21が正常なときと同じであり、したがって、開始時ピーク微分値DINPおよび開始時基本微分値DINBASEも同じである。
一方、O2出力値SVO2は、第2下限値VL2をまたいで変化するものの、第2上限値VH2はまたがず、その下側(小さい側)に留まる。また、開始時リッチ出力値VINRは第2上限値VH2と第2下限値VL2の間にあるものの、開始時ピーク出力値VINPは第1上限値VH1よりも下側(小さい側)にあり、開始時リーン出力値VINLは第2下限値VL2よりも下側にある。
したがって、リーン側オフセットが発生しているときには、図19に示すように、開始時下限通過フラグF_INVL2は「0」にセットされ、開始時上限通過フラグF_INVH2、開始時ピーク異常フラグF_INPERR、開始時リッチ異常フラグF_INRERRおよび開始時リーン異常フラグF_INLERRはいずれも「1」にセットされる。その結果、図13に示す総合判定において、O2センサ21は異常と判定される。
また、図14(c)の細線に示すように、O2出力値SVO2が理論排ガス空燃比A/FTHEX付近よりもリッチ側の出力範囲において増加側にオフセットする異常(以下「リッチ片側オフセット」という)が発生している場合には、図17の1点鎖線に示すように、O2センサ21の正常時と比較し、O2微分値DSVO2のピーク位置はリッチ側にずれ、そのときの開始時ピーク微分値DINPはより小さく(O2微分値DSVO2の変化量が大きく)なり、したがって、開始時基本微分値DINBASEもより小さくなっている。
一方、O2出力値SVO2は、第2上限値VH2および第2下限値VL2をまたいで変化する。しかし、開始時リーン出力値VINLは第2上限値VH2と第2下限値VL2の間にあるものの、開始時ピーク出力値VINPは第1上限値VH1よりも上側にあり、開始時リッチ出力値VINRは第2上限値VH2よりも上側にある。
したがって、リッチ片側オフセットが発生しているときには、図19に示すように、開始時上限通過フラグF_INVH2、開始時リーン異常フラグF_INLERRおよび開始時下限通過フラグF_INVL2はいずれも「0」にセットされ、開始時リッチ異常フラグF_INRERRおよび開始時ピーク異常フラグF_INPERRはいずれも「1」にセットされる。その結果、図13に示す総合判定において、O2センサ21は異常と判定される。
また、図14(d)の細線に示すように、O2出力値SVO2が理論排ガス空燃比A/FTHEX付近よりもリーン側の出力範囲において減少側にオフセットする異常(以下「リーン片側オフセット」という)が発生している場合には、図17の2点鎖線に示すように、O2センサ21の正常時と比較し、O2微分値DSVO2のピーク位置はリーン側にずれ、そのときの開始時ピーク微分値DINPはより小さく(O2微分値DSVO2の変化量が大きく)なり、したがって、開始時基本微分値DINBASEもより小さくなっている。
一方、O2出力値SVO2は、第2上限値VH2および第2下限値VL2をまたいで変化する。しかし、開始時リッチ出力値VINRは第2上限値VH2と第2下限値VL2の間にあるものの、開始時ピーク出力値VINPは第1下限値VL1よりも下側にあり、開始時リーン出力値VINLは第2下限値VL2よりも下側にある。
したがって、リーン片側オフセットが発生しているときには、図19に示すように、開始時上限通過フラグF_INVH2、開始時リッチ異常フラグF_INRERRおよび開始時下限通過フラグF_INVL2はいずれも「0」にセットされ、開始時ピーク異常フラグF_INPERRおよび開始時リーン異常フラグF_INLERRはいずれも「1」にセットされる。その結果、図13に示す総合判定において、O2センサ21は異常と判定される。
また、図14(e)の細線に示すように、O2出力値SVO2が理論排ガス空燃比A/FTHEX付近よりもリッチ側の出力範囲において減少側にオフセットする異常(以下「リッチ側つぶれ」という)が発生している場合には、図18の1点鎖線に示すように、O2センサ21の正常時と比較し、O2微分値DSVO2のピーク位置はリーン側にずれ、そのときの開始時ピーク微分値DINPはより大きく(O2微分値DSVO2の変化量が小さく)なり、したがって、開始時基本微分値DINBASEもより大きくなっている。
一方、O2出力値SVO2は、第2下限値VL2をまたいで変化するものの、第2上限値VH2はまたがず、その下側(小さい側)に留まる。また、開始時リッチ出力値VINRおよび開始時リーン出力値VINLは第2上限値VH2と第2下限値VL2の間にあるものの、開始時ピーク出力値VINPは第1下限値VL1よりも下側にある。
したがって、リッチ側つぶれが発生しているときにO2センサ21の異常判定処理を実行すると、図19に示すように、開始時リーン異常フラグF_INLERRおよび開始時下限通過フラグF_INVL2はいずれも「0」にセットされ、開始時上限通過フラグF_INVH2、開始時リッチ異常フラグF_INRERRおよび開始時ピーク異常フラグF_INPERRはいずれも「1」にセットされる。その結果、図13に示す総合判定において、O2センサ21は異常と判定される。
また、図14(f)の細線に示すように、O2出力値SVO2が理論排ガス空燃比A/FTHEX付近よりもリーン側の出力範囲において増加側にオフセットする異常(以下「リーン側つぶれ」という)が発生している場合には、図18の2点鎖線に示すように、O2センサ21の正常時と比較し、O2微分値DSVO2のピーク位置はリッチ側にずれ、そのときの開始時ピーク微分値DINPはより大きく(O2微分値DSVO2の変化量が小さく)なり、したがって、開始時基本微分値DINBASEもより大きくなっている。
一方、O2出力値SVO2は、第2上限値VH2をまたいで変化するものの、第2下限値VL2はまたがず、その上側(大きい側)に留まる。また、開始時リッチ出力値VINRおよび開始時リーン出力値VINLは第2上限値VH2と第2下限値VL2の間にあるものの、開始時ピーク出力値VINPは第1上限値VH1よりも下側にある。
したがって、リーン側つぶれが発生しているときには、図19に示すように、開始時上限通過フラグF_INVH2および開始時リッチ異常フラグF_INRERRはいずれも「0」にセットされ、開始時ピーク異常フラグF_INPERR、開始時リーン異常フラグF_INLERRおよび開始時下限通過フラグF_INVL2はいずれも「1」にセットされる。その結果、図13に示す総合判定において、O2センサ21は異常と判定される。
以上の結果から、図19に示すように、5つのフラグの値の組み合わせが、O2センサ21の異常パターンに応じて異なるので、それらの組み合わせに基づいて、異常パターンを特定することも可能である。
以上のように、本実施形態によれば、O2微分値DSVO2が所定値(開始時ピーク微分値DINP、開始時基本微分値DINBASE、終了時ピーク微分値DOUTP、終了時基本微分値DOUTBASE)になったときのO2出力値SVO2を用いてO2センサ21の異常を判定するので、O2センサ21にリッチ側オフセットやリーン側オフセットなどのO2微分値DSVO2に変化が現れない異常が発生しているときでも、出力特性のずれが発生しているとして、O2センサ21の異常を適切に判定することができる。
また、開始時ピーク出力値VINPおよび終了時ピーク出力値VOUTPがそれぞれ第1上限値VH1と第1下限値VL1の間にあるか否かに応じて、O2センサ21の異常を判定するので、理論排ガス空燃比A/FTHEX付近におけるO2センサ21の出力特性のずれの異常を適切に判定することができる。さらに、開始時ピーク微分値DINPはO2微分値DSVO2の極小値であり、終了時ピーク微分値DOUTPはO2微分値DSVO2の極大値であるため、異常判定を行うべき基準点がより明確に現れることで、O2センサ21の異常判定を適切に行うことができる。
また、開始時リッチ出力値VINR、開始時リーン出力値VINL、終了時リーン出力値VOUTLおよび終了時リッチ出力値VOUTRがそれぞれ第1上限値VH1と第1下限値VL1の間にあるか否かに応じてO2センサ21の異常を判定するので、理論排ガス空燃比A/FTHEX付近よりもリッチ側およびリーン側の領域におけるO2センサ21の異常を適切に判定することができる。
また、O2出力値SVO2が第2上限値VH2および第2下限値VL2をそれぞれまたいで変化したか否かに基づいてO2センサ21の異常を判定するので、O2センサ21の出力範囲の上限付近および下限付近に相当する排ガス空燃比A/FEXの領域におけるO2センサ21の異常を適切に判定することができる。
また、上述したように排ガス空燃比A/FEXの様々な領域において異常判定を行うので、排ガス空燃比A/FEXの広い領域を対象として、O2センサ21の異常を総合的にかつきめ細かく適切に判定することができる。
また、フューエルカット運転の開始時および終了時のいずれにおいても、O2センサ21の異常判定を実行するので、O2センサ21の出力特性がフューエルカット運転の開始時と終了時で互いに異なるときでも、O2センサ21の異常を判定することができる。
なお、本発明は、説明した実施形態に限定されることなく、種々の態様で実施することができる。例えば、実施形態では、開始時基本微分値DINBASEとして、開始時ピーク微分値DINPの1/2を用いているが、0と開始時ピーク微分値DINPの間の値であればよく、開始時ピーク微分値DINPに相関しない値や固定値でもよい。このことは、終了時基本微分値DOUTBASEについても同様である。
また、実施形態では、O2センサ21の異常判定を、F/C開始(終了)時移行期間が経過し、フューエルカット運転の開始(終了)に伴う排ガス空燃比A/FEXの変化が終了してから行っているが、これに限らず、フューエルカット運転の開始(終了)時から、O2出力値SVO2およびO2微分値DSVO2のその時点の値を用いて、リアルタイムにO2センサ21の異常判定を行ってもよく、あるいは、フューエルカット運転の終了後に、フューエルカット運転の開始時および終了時の異常判定処理をまとめて行ってもよい。
また、実施形態では、第1上限値VH1、第2上限値VH2、第1下限値VL1および第2下限値VL2は、フューエルカット運転開始時と終了時とで同じであるが、異なる値にしてもよい。
また、リッチ側異常判定およびリーン側異常判定を行う場合の第2上限値および第2下限値と、上限(下限)通過フラグを設定する場合の第2上限値および第2下限値を、それぞれ互いに同じ値(第2上限値VH2、第2下限値VL2)に設定し、共通に用いているが、互いに異なる値に設定してもよい。例えば、開始時上限通過フラグF_INVH2および終了時上限通過フラグF_OUTVH2の設定に用いる第2上限値を、O2センサ21の出力範囲の上限よりも大きな値に設定し、および/または、開始時下限通過フラグF_INVL2および終了時下限通過フラグF_OUTVL2の設定に用いる第2下限値を、O2センサ21の出力範囲の下限よりも小さな値に設定するとともに、O2出力値SVO2が第2上限値および/または第2下限値を通過したときに異常と判定してもよい。
また、実施形態では、O2センサ21の異常判定を、フューエルカット運転の開始時および終了時の双方において実行しているが、いずれか一方において実行してもよい。また、実施形態では、O2センサ21は、触媒8の下流側に設けられているが、上流側に設けられていてもよい。
また、実施形態は、本発明を車両に搭載されたガソリンエンジンに適用した例であるが、本発明は、これに限らず、ガソリンエンジン以外のディーゼルエンジンなどの各種のエンジンに適用してもよく、また、車両用以外のエンジン、例えば、クランク軸を鉛直に配置した船外機などのような船舶推進機用エンジンにも適用可能である。その他、本発明の趣旨の範囲内で、細部の構成を適宜、変更することが可能である。