(57)【要約】【課題】空燃比センサの出力に基づいて実施する異常診断の精度を向上させる。【解決手段】エンジン１１の排気管２６に限界電流型の空燃比センサ２８を設置する。この空燃比センサ２８の印加電圧を正方向（又は負方向）に変化させたときの電圧変化量ΔＶと電流変化量ΔＩとから素子抵抗値Ｚ（＝ΔＶ／ΔＩ）を素子温度の代用情報として算出し、この素子抵抗値Ｚが完全活性温度範囲の下限温度に相当する抵抗値（例えば６０Ω）よりも低いか否かによって空燃比センサ２８が完全活性状態であるか否かを判定する。そして、空燃比センサ２８が完全活性状態であると判定される期間に、空燃比センサ２８の出力に基づいて燃料供給系等の異常診断を行う。このようにすれば、空燃比センサ２８が半活性状態の時に異常診断を行うことを防止でき、異常診断精度を向上できる。【選択図】図１０
2006177371.tif 000002
【特許請求の範囲】
【請求項１】
排ガス中の酸素濃度にほぼ比例する限界電流を発生するセンサ素子を有し、半活性状態でも空燃比を検出できる空燃比検出手段と、
前記空燃比検出手段の出力に基づいて空燃比フィードバック制御を行う空燃比制御手段と、
前記空燃比検出手段の出力に基づいて異常診断を行う異常診断手段とを備え、
前記空燃比制御手段は、前記空燃比検出手段が半活性状態又は完全活性状態のいずれかの状態にあるときに空燃比フィードバック制御を行い、
前記異常診断手段は、前記空燃比検出手段が完全活性状態にあるときに異常診断を行うことを特徴とする内燃機関の制御装置。
【請求項２】
排ガス中の酸素濃度にほぼ比例する限界電流を発生するセンサ素子を有し、半活性状態でも空燃比を検出できる空燃比検出手段と、
前記空燃比検出手段の出力に基づいて空燃比フィードバック制御を行う空燃比制御手段と、
前記空燃比検出手段の出力に基づいて異常診断を行う異常診断手段と、
内燃機関の冷却水温を検出する冷却水温検出手段とを備え、
前記空燃比制御手段は、前記冷却水温検出手段で検出された冷却水温が第１の所定水温以上のときに空燃比フィードバック制御を行い、
前記異常診断手段は、前記冷却水温検出手段で検出された冷却水温が前記第１の所定水温より高い第２の所定水温以上のときに異常診断を行うことを特徴とする内燃機関の制御装置。
【請求項３】
前記異常診断手段は、前記冷却水温検出手段で検出された冷却水温が前記第２の所定水温より高い第３の所定水温以上のときに異常診断を行わないことを特徴とする請求項２に記載の内燃機関の制御装置。
【請求項４】
前記異常診断手段は、燃料供給系の異常を診断することを特徴とする請求項１乃至３のいずれか１つに記載の内燃機関の制御装置。
【請求項５】
前記異常診断手段は、前記空燃比検出手段の異常を診断することを特徴とする請求項１乃至３のいずれか１つに記載の内燃機関の制御装置。
【請求項６】
内燃機関の排気系に設けられ、排ガスを浄化するための触媒と、
前記触媒の下流側に設けられ、触媒下流の空燃比を検出する触媒下流空燃比検出手段とを備え、
前記異常診断手段は、前記空燃比検出手段の出力と前記触媒下流空燃比検出手段の出力との関係から前記触媒の異常を診断することを特徴とする請求項１乃至３のいずれか１つに記載の内燃機関の制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、排ガスの空燃比を検出する空燃比検出手段の出力に基づいて異常診断を行う内燃機関の制御装置に関するものである。
【背景技術】
【０００２】
例えば、内燃機関の排ガスを三元触媒で浄化するシステムでは、排ガスの空燃比を空燃比センサ（又は酸素センサ）で検出して、排ガスの空燃比を理論空燃比近傍にフィードバック制御することで、三元触媒の排ガス浄化効率を高めるようにしている。このシステムにおいて、もし、燃料供給系が異常になったり、空燃比センサが異常になると、空燃比センサの出力の挙動が異常になることから、空燃比センサの出力に基づいて燃料供給系や空燃比センサ等の異常診断を行うようにしたものがある。
【０００３】
空燃比センサは、不活性状態（センサ素子の温度が低い状態）であると、空燃比を検出できないため、空燃比センサの出力に基づく空燃比フィードバック制御や異常診断は、空燃比センサが活性状態になってから行う必要がある。
【０００４】
そこで、例えば特開昭６１−１９７７３８号公報では、空燃比センサの出力電圧が所定電圧以上になったか否かで空燃比センサが活性状態であるか否かを判定し、活性状態と判定した時に、空燃比フィードバック制御を開始するようにしている。その他、始動後の経過時間や空燃比センサの内蔵ヒータの通電時間積算値に基づいて空燃比センサの活性状態を判定して空燃比フィードバック制御を開始するようにしたものもある。更に、空燃比センサの出力に基づいて異常診断を行う場合は、空燃比フィードバック制御実行中であれば、空燃比センサが活性状態であると判断して、異常診断を行うようにしている。
【０００５】
また、特公平６−３９９３２号公報では、触媒の上流側と下流側の両方に空燃比センサを設置して、下流側の空燃比センサの出力電圧が所定電圧以上となった時に、活性状態と判定して、下流側の空燃比センサの出力変化幅から触媒の異常診断を開始するようにしている。
【特許文献１】特開昭６１−１９７７３８号公報（第４頁等）
【特許文献２】特公平６−３９９３２号公報（第４頁等）
【発明の開示】
【発明が解決しようとする課題】
【０００６】
ところで、空燃比センサの活性状態には、センサ素子の昇温が少し不足する半活性状態と、センサ素子温度が十分に活性温度まで昇温した完全活性状態とがある。半活性状態でも空燃比を検出できるが、図２に示すように、半活性状態では、空燃比センサの検出レンジ（リーン検出限界とリッチ検出限界との幅）が狭いため、空燃比が異常な値（例えばλ＝１．２）になっても検出できない。しかも、図３に示すように、半活性状態では、空燃比センサの応答性が遅いため、外乱発生時の空燃比フィードバック制御の収束性が悪化し、正常であるにも拘らず、異常と判定されてしまうおそれがある。従って、信頼性の高い異常診断を行うのに必要な空燃比センサの検出レンジと応答性を確保するには、空燃比センサを完全活性状態まで昇温させる必要がある。
【０００７】
しかし、近年の空燃比フィードバック制御システムでは、始動後に空燃比フィードバック制御を早期に開始するために、空燃比センサが半活性状態まで昇温した時点で空燃比フィードバック制御を開始するようにしている。このため、従来のように、空燃比フィードバック制御中に異常診断を行うと、空燃比センサが半活性状態の時でも異常診断が行われてしまい、信頼性の高い異常診断を行うのに必要な空燃比センサの検出レンジと応答性を確保することができず、異常診断精度が低下してしまう。
【０００８】
また、特許文献２において、空燃比センサの出力電圧は、排ガスの空燃比によって変化するため、空燃比センサの活性判定が空燃比の影響を受けてしまう。従って、この場合も、空燃比センサが半活性状態の時に異常診断が行われてしまうことがあり、異常診断精度が低下してしまう。
【０００９】
一方、始動後の経過時間や空燃比センサの内蔵ヒータの通電時間積算値に基づいて空燃比センサの活性状態を判定する方法では、空燃比の影響を受けずに活性判定を行うことができるが、低温始動時や極低温環境下での走行時等では、空燃比センサの昇温が遅れるため、半活性状態で異常診断が開始されてしまうことがあり、やはり異常診断精度が低下してしまう。
【００１０】
本発明はこのような事情を考慮してなされたものであり、従ってその目的は、空燃比検出手段の出力に基づいて行う異常診断の精度を向上できる内燃機関の制御装置を提供することにある。
【課題を解決するための手段】
【００１１】
上記目的を達成するために、請求項１に係る発明によれば、空燃比制御手段は空燃比検出手段が半活性状態又は完全活性状態のいずれかの状態にあるときに空燃比フィードバック制御を行い、前記異常診断手段は前記空燃比検出手段が完全活性状態にあるときに異常診断を行う。このようにすれば、空燃比検出手段が実際に完全活性状態になっている期間に異常診断を行うことができるため、異常診断時の空燃比検出手段の空燃比検出レンジと応答性を確保することができ、空燃比検出手段の検出精度を高めて異常診断精度を向上できる。なお、異常診断手段としては、例えば請求項４乃至６のように、燃料供給系、空燃比検出手段、触媒が含まれる。
【００１２】
また、請求項２に係る発明によれば、空燃比制御手段は冷却水温検出手段で検出された冷却水温が第１の所定水温以上のときに空燃比フィードバック制御を行い、異常診断手段は冷却水温検出手段で検出された冷却水温が第１の所定水温より高い第２の所定水温以上のときに異常診断を行う。このようにすれば、異常診断時の空燃比検出手段の空燃比検出レンジと応答性を確保することができ、空燃比検出手段の検出精度を高めて異常診断精度を向上できる。
【００１３】
また、請求項３のように、冷却水温検出手段で検出された冷却水温が第２の所定水温より高い第３の所定水温以上のときに異常診断を行わないようにするとよい。これにより、センサ類やアクチュエータ類の温度特性の影響が大きくなる高温域で異常診断することを禁止することができる。
【発明を実施するための最良の形態】
【００１４】
以下、本発明の一実施形態を図面に基づいて説明する。まず、図１に基づいてエンジン制御システム全体の概略構成を説明する。内燃機関であるエンジン１１の吸気管１２の最上流部には、エアクリーナ１３が設けられ、このエアクリーナ１３の下流側には、吸気温度ＴＨＡを検出する吸気温度センサ１４と、吸入空気量Ｇａを検出するエアフローメータ１０とが設けられている。このエアフローメータ１０の下流側には、スロットルバルブ１５とスロットル開度ＴＨを検出するスロットル開度センサ１６とが設けられている。
【００１５】
更に、スロットルバルブ１５の下流側には、吸気管圧力ＰＭを検出する吸気管圧力センサ１７が設けられ、この吸気管圧力センサ１７の下流側にサージタンク１８が設けられている。このサージタンク１８には、エンジン１１の各気筒に空気を導入する吸気マニホールド１９が接続され、この吸気マニホールド１９の各気筒の分岐管部に、それぞれ燃料を噴射する燃料噴射弁２０が取り付けられている。この燃料噴射弁２０は、燃料タンク（図示せず）、燃料ポンプ（図示せず）等と共に燃料供給系を構成し、燃料タンク内から燃料ポンプで汲み上げた燃料が燃料配管（図示せず）を通して各気筒の燃料噴射弁２０に分配される。
【００１６】
また、エンジン１１には各気筒毎に点火プラグ２１が取り付けられ、各点火プラグ２１には、点火回路２２で発生した高圧電流がディストリビュータ２３を介して供給される。このディストリビュータ２３には、７２０℃Ａ（クランク軸２回転）毎に例えば２４個のパルス信号を出力するクランク角センサ２４が設けられ、このクランク角センサ２４の出力パルスの周波数によってエンジン回転数Ｎｅを検出するようになっている。また、エンジン１１には、エンジン冷却水温ＴＨＷを検出する水温センサ３９が取り付けられている。
【００１７】
一方、エンジン１１の排気ポート（図示せず）には、排気マニホールド２５を介して排気管２６が接続され、この排気管２６の途中に排ガス中のＣＯ，ＨＣ，ＮＯｘ等を低減させる三元触媒等の触媒２７が設けられている。この触媒２７の上流側には、空燃比センサ２８（空燃比検出手段）が設けられている。この空燃比センサ２８は基準電圧を印加したときに排ガス中の酸素濃度にほぼ比例する限界電流を発生するセンサ素子３８を内蔵し、この限界電流より空燃比λを検出するようになっている。また、触媒２７の下流側には、排ガスの空燃比が理論空燃比に対してリッチかリーンかによって出力電圧Ｒ／Ｌが反転する酸素センサ２９が設けられている。
【００１８】
上述した各種のセンサの出力はエンジン制御回路３０内に入力ポート３１を介して読み込まれる。このエンジン制御回路３０は、マイクロコンピュータを主体として構成され、ＣＰＵ３２、ＲＯＭ３３（記憶媒体）、ＲＡＭ３４、バッテリ（図示せず）でバックアップされたバックアップＲＡＭ３５等を備え、ＲＯＭ３３に記憶された後述する図４、図６及び図９に示す燃料噴射制御用のプログラムや点火制御プログラム（図示せず）を実行することで、各種センサで検出されたエンジン運転パラメータを用いて要求燃料噴射量ＴＡＵや点火時期Ｉｇ等を演算し、その演算結果に応じた信号を出力ポート３６から燃料噴射弁２０や点火回路２２に出力してエンジン１１の運転を制御する。
【００１９】
更に、このエンジン制御回路３０は、後述する図１０乃至図１２に示す燃料供給系異常診断用の各プログラムや、これらのプログラムに用いる図１３の異常診断基準値マップや初期値等をＲＯＭ３３に記憶し、これら図１０乃至図１２に示す各プログラムを実行することで、空燃比センサ２８が完全活性状態になっているか否かを判定し、空燃比センサ２８が完全活性状態になっている期間に空燃比センサ２８の出力に基づいて燃料供給系の異常の有無を診断する。従って、これら図１０乃至１２に示す各プログラムが特許請求の範囲でいう異常診断手段として機能する。
【００２０】
［空燃比制御］
図４に示す空燃比制御プログラムは、空燃比のフィードバック制御を通じて要求燃料噴射量ＴＡＵを設定するプログラムであり、所定クランク角毎（例えば３６０℃Ａ毎）に起動される。本プログラムが起動されると、まずステップ１０１で、前記各種センサからの検出信号（例えばエンジン回転数Ｎｅ、吸気管圧力ＰＭ、冷却水温ＴＨＷ、空燃比λ、排ガス中の酸素濃度Ｒ／Ｌ等）を読み込む。この後、ステップ１０２で、エンジン運転状態（エンジン回転数Ｎｅと吸気管圧力ＰＭ等）に応じてマップ等から基本燃料噴射量Ｔｐを演算する。
【００２１】
そして、次のステップ１０３で、空燃比フィードバック条件が成立しているか否かを判定する。ここで、空燃比フィードバック条件は、次の（Ａ１）〜（Ａ４）の条件を全て満たした時に成立し、１つでも満たさない条件があれば、不成立となる。
（Ａ１）各種の燃料増量補正が行われていないこと
（Ａ２）燃料カット中でないこと
（Ａ３）高負荷運転中でないこと
（Ａ４）空燃比センサ２８が半活性又は完全活性していること
尚、上記（Ａ４）の空燃比センサ２８が半活性又は完全活性しているかは、例えば、冷却水温ＴＨＷが所定温度（例えば３０℃）以上となっているか否かで判定したり、始動後の経過時間が所定時間以上となっているか否かで判定したり、実際に空燃比センサ２８から出力λが出たか否かで判定したり、或は、後述する空燃比センサ２８の素子抵抗値から判定しても良い。
【００２２】
上記ステップ１０３で、空燃比フィードバック条件が不成立と判定された場合には、ステップ１０４に進み、空燃比補正係数ＦＡＦ（フィードバック補正量に相当）を「１．０」に設定して、ステップ１０９に進む。この場合は、空燃比の補正は行われない。
【００２３】
一方、上記ステップ１０３で、空燃比フィードバック条件成立と判定された場合には、ステップ１０５に進み、触媒２８が活性化しているか否かを判定する。この触媒２８の活性の有無は、例えば、冷却水温ＴＨＷが所定温度（例えば４０℃）以上となっているか否かで判定する。このステップ１０５で、触媒２８が活性化していると判定された時には、ステップ１０６に進み、後述する図６の目標空燃比設定プログラムを実行し、触媒２８下流の酸素センサ２９の出力Ｒ／Ｌに基づいて目標空燃比λＴＧを設定してから、ステップ１０８に進む。
【００２４】
これに対し、上記ステップ１０５において、触媒２８が活性化していないと判定された時には、ステップ１０７に進み、図５に示す冷却水温ＴＨＷをパラメータとする目標空燃比マップを検索して、その時点の冷却水温ＴＨＷに応じた目標空燃比λＴＧを設定してステップ１０８に進む。
【００２５】
以上のようにして、ステップ１０６又は１０７で目標空燃比λＴＧを設定した後、ステップ１０８に進み、目標空燃比λＴＧと空燃比センサ２８の出力λ（空燃比）とに基づいて空燃比補正係数ＦＡＦを次式により算出する。
ＦＡＦ（ｋ）＝Ｋ１・λ（ｋ）＋Ｋ２・ＦＡＦ（ｋ−３）＋Ｋ３・ＦＡＦ（ｋ−２）＋Ｋ４・ＦＡＦ（ｋ−１）＋ＺＩ（ｋ）
但し、ＺＩ（ｋ）＝ＺＩ（ｋ−１）＋Ｋａ・｛λＴＧ−λ（ｋ）｝
ここで、ｋは最初のサンプリング開始からの制御回数を示す変数、Ｋ１〜Ｋ４は最適フィードバック定数、Ｋａは積分定数である。
【００２６】
そして、次のステップ１０９で、基本燃料噴射量Ｔｐ、空燃比補正係数ＦＡＦ、バックアップＲＡＭ３５に格納されている空燃比の学習補正量ＫＧｊのうちの現在の運転領域に属する学習補正量ＫＧｊを用いて、次式の演算を実行し、要求燃料噴射量ＴＡＵを算出して、本プログラムを終了する。
ＴＡＵ＝Ｔｐ・ＦＡＦ・ＫＧｊ・ＦＡＬＬ
ここで、ＦＡＬＬは、空燃比補正係数ＦＡＦと学習補正量ＫＧｊによらない他の補正係数（例えばエンジン温度による補正係数、加減速時の補正係数等）である。
【００２７】
［目標空燃比設定］
図６に示す目標空燃比設定プログラムは、図４の空燃比制御プログラムのステップ１０６で実行されるサブルーチンである。本プログラムが起動されると、まずステップ１１１〜１１３で、酸素センサ２９の出力Ｒ／Ｌに基づいて、実際の空燃比と空燃比センサ２８の出力λ（検出した空燃比）とのずれを補正するように、目標空燃比の中央値λＴＧＣを設定する。具体的には、まずステップ１１１で、酸素センサ２９の出力Ｒ／Ｌがリッチ（Ｒ）かリーン（Ｌ）かを判別し、リッチ（Ｒ）の場合は、ステップ１１２に進み、中央値λＴＧＣを所定値λＭだけ大きく、すなわちλＭだけリーンに設定する（λＴＧＣ←λＴＧＣ＋λＭ）。
【００２８】
一方、酸素センサ２９の出力Ｒ／Ｌがリーン（Ｌ）の場合は、ステップ１１３に進み、中央値λＴＧＣを所定値λＭだけ小さく、すなわちλＭだけリッチに設定する（λＴＧＣ←λＴＧＣ一λＭ）。図７は、このような酸素センサ２９の出力Ｒ／Ｌに基づいて目標空燃比の中央値λＴＧＣを設定する場合の一例を示している。
【００２９】
以上のようにして、目標空燃比の中央値λＴＧＣを設定した後、ステップ１１４〜１２３で、いわゆるディザ制御により目標空燃比λＴＧを次のようにして設定する。まず、ステップ１１４で、ディザ周期カウンタのカウント値ＣＤＺＡがディザ周期ＴＤＺＡ以上となっているか否かを判定する。このディザ周期ＴＤＺＡは、当該ディザ制御の分解能を決定する因子であり、後述するステップ１１８の処理により、エンジン１１の運転状態に対応した望ましい値がその都度設定される。
【００３０】
もし、ディザ周期カウンタのカウント値ＣＤＺＡがディザ周期ＴＤＺＡよりも小さければ、ステップ１１５に進み、ディザ周期カウンタのカウント値ＣＤＺＡを１インクリメントして、ステップ１２３の処理を実行する。この場合は、目標空燃比λＴＧの値を更新することなく、その時点で設定されている目標空燃比λＴＧの値を維持する。
【００３１】
一方、ディザ周期カウンタのカウント値ＣＤＺＡがディザ周期ＴＤＺＡ以上であれば、ステップ１１６に進み、ディザ周期カウンタのカウント値ＣＤＺＡを「０」にリセットした後、ディザ制御により目標空燃比λＴＧが前記中央値λＴＧＣを中心にしてリッチ／リーン側に交互に階段状に変化するように、以下の処理を実行する。
【００３２】
まず、ステップ１１７，１１８で、ディザ振幅λＤＺＡとディザ周期ＴＤＺＡを設定する。ここで、ディザ振幅λＤＺＡは、ディザ制御の制御量を決定する因子であり、ディザ周期ＴＤＺＡと同じく、エンジン１１の運転状態に対応した望ましい値がその都度設定される。これらディザ振幅λＤＺＡとディザ周期ＴＤＺＡは、エンジン回転数Ｎｅと吸気管圧力ＰＭとをパラメータとする２次元マップ（図示せず）を検索して、その時点のエンジン回転数Ｎｅと吸気管圧力ＰＭに対応するディザ振幅λＤＺＡとディザ周期ＴＤＺＡを求める。
【００３３】
この後、ステップ１１９で、ディザ処理フラグＸＤＺＲが「０」であるか否かを判定する。このディザ処理フラグＸＤＺＲは、目標空燃比中央値λＴＧＣに対して目標空燃比λＴＧをリッチに設定する場合にＸＤＺＲ＝１にセットし、リーンに設定する場合にＸＤＺＲ＝０にリセットする。
【００３４】
上記ステップ１１９で、ＸＤＺＲ＝０と判定された場合、つまり前回のディザ制御で目標空燃比中央値λＴＧＣに対して目標空燃比λＴＧがリーンに設定されている場合には、ステップ１２０に進み、今回のディザ制御で目標空燃比λＴＧがリッチに設定されるように、ディザ処理フラグＸＤＺＲを「１」にセットする。これに対し、上記ステップ１１９で、ＸＤＺＲ＝１と判定された場合、つまり前回のディザ制御で目標空燃比中央値λＴＧＣに対して目標空燃比λＴＧがリッチに設定されている場合には、ステップ１２１に進み、今回のディザ制御で目標空燃比λＴＧがリーンに設定されるように、ディザ処理フラグＸＤＺＲを「０」にリセットする。
【００３５】
このようにして、ステップ１２０又は１２１で、ディザ処理フラグＸＤＺＲを反転させ、更に、ＸＤＺＲ＝１の場合には、ステップ１２２で、ディザ振幅λＤＺＡを−値に反転させる（ＸＤＺＲ＝０の場合はステップ１１２又は１１３で設定したディザ振幅λＤＺＡをそのまま用いる）。この後、ステップ１２３で、目標空燃比中央値λＴＧＣとディザ振幅λＤＺＡとから目標空燃比λＴＧを設定する。例えば、前回のディザ制御で目標空燃比中央値λＴＧＣに対して目標空燃比λＴＧがリーンに設定された場合には、今回のディザ制御で、目標空燃比λＴＧを中央値λＴＧＣに対してディザ振幅λＤＺＡだけリッチに設定するように、次式により目標空燃比λＴＧを算出する。
λＴＧ＝λＴＧＣ−λＤＺＡ
逆に、前回のディザ制御で目標空燃比中央値λＴＧＣに対して目標空燃比λＴＧがリッチに設定された場合には、今回のディザ制御で、目標空燃比λＴＧを中央値λＴＧＣに対してディザ振幅λＤＺＡだけリーンに設定するように、次式により目標空燃比λＴＧを算出する。
λＴＧ＝λＴＧＣ＋λＤＺＡ
このようなディザ制御により、図８に示すように、目標空燃比λＴＧが中央値λＴＧＣを中心にしてリッチ／リーン側に交互にディザ振幅λＤＺＡだけ階段状に変化するように設定される。
【００３６】
［空燃比学習］
図９に示す空燃比学習プログラムは、所定クランク角毎に起動される。本プログラムが起動されると、まずステップ２０１で、後述する例えば８つの運転領域０〜７についての空燃比学習が全て終了したか否かを判定する。この判定は、各運転領域０〜７に対応した学習フラグＸＤＯＭ０〜ＸＤＯＭ７が学習終了を意味する「１」であるか否かによって行われる。８つの運転領域０〜７の空燃比学習が全て終了している場合（ＸＤＯＭ０〜ＸＤＯＭ７＝１の場合）には、ステップ２０３に進み、学習終了フラグＸＡＦＬＮを全領域学習終了を意味する「１」にセットする。
【００３７】
一方、運転領域０〜７のうちのいずれか１つでも空燃比学習が終了していない場合には、ステップ２０１からステップ２０２に進み、学習終了フラグＸＡＦＬＮを「０」にリセットする。
【００３８】
この後、ステップ２０４で、下記の（Ｂ１）〜（Ｂ６）の学習条件が成立しているか否かを判定する。
（Ｂ１）空燃比フィードバック制御中であること
（Ｂ２）冷却水温ＴＨＷが例えば８０℃以上であること
（Ｂ３）始動後増量が「０」であること
（Ｂ４）暖機増量が「０」であること
（Ｂ５）現在の運転領域に入ってから所定クランク角だけ経過していること
（Ｂ６）バッテリ電圧が例えば１１．５Ｖ以上であること
これら（Ｂ１）〜（Ｂ６）の条件を１つでも満たさないものがあれば、学習条件が不成立となり、ステップ２０５以降の学習処理を行うことなく、本プログラムを終了する。
【００３９】
一方、（Ｂ１）〜（Ｂ６）の条件を全て満たせば、学習条件が成立し、ステップ２０５以降の学習処理を次のようにして実行する。まずステップ２０５で、ＲＡＭ３４に格納されている空燃比補正係数ＦＡＦの平均値ＦＡＦＡＶを読み込んだ後、ステップ２０６で、アイドル時（ＩＤＬＯＮ）であるか否かを判定し、アイドル時か走行時かに応じて、以下のような学習処理を実行する。
【００４０】
すなわち、走行時である場合には、ステップ２０７に進み、その時点のエンジン回転数Ｎｅが１０００〜３２００ｒｐｍの範囲内（安定した走行状態）であるか否かを判定し、範囲外であれば、以降の処理を行うことなく、本プログラムを終了する。一方、エンジン回転数Ｎｅが１０００〜３２００ｒｐｍの範囲内であれば、学習処理が可能と判断して、ステップ２０８に進み、エンジン１１の運転領域が「１」〜「７」のいずれの領域に該当するか判定する。この運転領域の判定は、エンジン１１の負荷（例えば吸気管圧力ＰＭ）に基づいて行われ、該負荷の大きさに応じて、運転領域「１」〜「７」のいずれかの領域を当該学習処理領域として設定する。この後、ステップ２０９で、上記ステップ２０８で設定した領域ｉ（ｉは「１」〜「７」のいずれか）に対応する学習フラグＸＤＯＭｉをセットする。
【００４１】
一方、ステップ２０６において、アイドル時と判定された場合には、エンジン回転数Ｎｅが例えば６００〜１０００ｒｐｍの範囲内（安定したアイドル状態）であるか否か（ステップ２１０）、また、吸気管圧力ＰＭが例えば１７３ｍｍＨｇより高いか否かを判定する（ステップ２１１）。これら２つの条件，のいずれか一方でも満たさなければ、以降の処理を行うことなく、本プログラムを終了する。
【００４２】
これに対し、２つの条件，を共に満たせば、学習処理が可能であると判断して、ステップ２１２に進み、その運転領域を領域「０」に設定した後、ステップ２１３で、上記ステップ２１２で設定した領域「０」に対応する学習フラグＸＤＯＭ０をセットする。
【００４３】
以上のようにして、現在の運転状態に応じて学習フラグＸＤＯＭｉ又はＸＤＯＭ０をセットした後、ステップ２１４〜２１７で、空燃比の学習補正量ＫＧｊ（ｊ＝０〜７）の設定、又は既に設定した学習補正量ＫＧｊの更新を実行する。この学習処理は、まずステップ２１４で、前記ステップ２０５で読み込んだ空燃比補正係数の平均値ＦＡＦＡＶの基準値（１．０）からのずれ量（１−ＦＡＦＡＶ）を判定し、ずれ量が所定値（例えば２％）以上であれば、当該領域の学習補正量ＫＧｊを所定値Ｋ％だけ補正し（ステップ２１５）、ずれ量が所定値（例えば一２％）以下であれば、当該領域の学習補正量ＫＧｊを所定値Ｌ％だけ補正する（ステップ２１７）。もし、ずれ量が上記所定値内であれば、当該領域の学習補正量ＫＧｊを維持する（ステップ２１６）。
【００４４】
この後、ステップ２１８で、上記ステップ２１５〜２１７で設定（更新）した学習補正量ＫＧｊの上下限チェック（ガード処理）を実行する。この上下限チェックでは、学習補正量ＫＧｊの上限値が例えば「１．２」に設定され、下限値が例えば「０．８」に設定される。これら上下限値は、上述したエンジン１１の運転領域毎に設定しても良い。このようにして設定された学習補正量ＫＧｊは、バックアップＲＡＭ３５に運転領域毎に格納される。
【００４５】
［異常診断実行条件判定］
図１０に示す異常診断実行条件判定プログラムは、所定時間毎（例えば２５６ｍｓ毎）に起動され、次のようにして燃料供給系の異常診断実行条件が成立しているか否かを判定する。まず、ステップ３０１で、エンジン始動後の運転状態が安定したか否かを判定するために、エンジン始動後の経過時間が例えば６０秒を越えたか否かを判定し、経過時間が６０秒に達していなければ、運転状態がまだ不安定であると判断して、ステップ３１１に進み、異常診断許可フラグＸＤＧＦＵＥＬＥＸを異常診断禁止を意味する「０」にリセットして、本プログラムを終了する。
【００４６】
一方、エンジン始動後の経過時間が６０秒を越えている場合には、エンジン始動後の運転状態が安定していると判断して、ステップ３０１からステップ３０２に進み、空燃比センサ２８の素子温度の代用情報として求めた素子抵抗値Ｚが、完全活性温度範囲の下限温度に相当する抵抗値（例えば６０Ω）よりも低いか否かにより、空燃比センサ２８が完全活性しているか否かを判定する。このステップ３０２の処理が特許請求の範囲でいう完全活性判定手段として機能する。
【００４７】
このステップ３０２では、素子抵抗値Ｚを次のようにして算出する。素子抵抗値Ｚの検出時にセンサ素子３８の印加電圧を一時的に正方向に変化させた後、負方向に変化させる。そして、印加電圧を正方向（又は負方向）に変化させたときの電圧変化量ΔＶと電流変化量ΔＩとから素子抵抗値Ｚを次式により算出する。
Ｚ＝ΔＶ／ΔＩ
尚、この検出方法は一例であって、正負両側の電圧及び電流の変化量に基づき素子抵抗値Ｚを検出したり、負の印加電圧Ｖｎｅｇを印加したときのセンサ電流Ｉｎｅｇから素子抵抗値Ｚ（＝Ｖｎｅｇ／Ｉｎｅｇ）を算出しても良い。このようにして素子抵抗値Ｚを算出する機能が特許請求の範囲でいう抵抗値検出手段に相当する。
【００４８】
上記ステップ３０２で、Ｚ≧６０と判定された場合、つまり、図２及び図３に示すように、空燃比センサ２８が完全活性していない場合には、空燃比センサ２８の空燃比検出レンジが狭く、しかも応答性が遅いため、空燃比センサ２８の検出精度が低く、燃料供給系の異常を誤検出するおそれがある。従って、この場合には、ステップ３１１に進み、異常診断許可フラグＸＤＧＦＵＥＬＥＸを異常診断禁止を意味する「０」にリセットして本プログラムを終了する。一方、上記ステップ３０２で、Ｚ＜６０と判定されたときには、空燃比センサ２８が完全活性していると判断して、ステップ３０３に進む。
【００４９】
このステップ３０３では、空燃比フィードバック制御中（図４のステップ１０３で空燃比フィードバック条件が成立している時）であるか否かを判定し、空燃比フィードバック制御中でない場合は、ステップ３１１に進み、異常診断許可フラグＸＤＧＦＵＥＬＥＸを異常診断禁止を意味する「０」にリセットして本プログラムを終了する。
【００５０】
空燃比フィードバック制御中であれば、ステップ３０３からステップ３０４に進み、冷却水温ＴＨＷが例えば７０℃＜ＴＨＷ＜９０℃であるか否かを判定し、ＴＨＷ≦７０℃の場合（エンジン暖機完了前）、又は、ＴＨＷ≧９０℃の場合（センサ類やアクチュエータ類の温度特性の影響が大きくなる高温域）であれば、ステップ３１１に進み、異常診断許可フラグＸＤＧＦＵＥＬＥＸを異常診断禁止を意味する「０」にリセットして本プログラムを終了する。
【００５１】
７０℃＜ＴＨＷ＜９０℃であれば、ステップ３０４からステップ３０５に進み、吸気温度ＴＨＡが例えば−１０℃＜ＴＨＡ＜６０℃であるか否かを判定し、ＴＨＡ≦−１０℃の場合（極低温時）、又は、ＴＨＡ≧６０℃の場合（センサ類やアクチュエータ類の温度特性の影響が大きくなる高温域）であれば、ステップ３１１に進み、異常診断許可フラグＸＤＧＦＵＥＬＥＸを異常診断禁止を意味する「０」にリセットして本プログラムを終了する。
【００５２】
−１０℃＜ＴＨＡ＜６０℃であれば、ステップ３０５からステップ３０６に進み、エンジン回転数Ｎｅが例えば７００ｒｐｍ＜Ｎｅ＜３６００ｒｐｍであるか否かを判定し、Ｎｅ≦７００ｒｐｍの場合、又は、Ｎｅ≧３６００ｒｐｍの場合には、エンジン１１の運転状態が不安定で、燃料供給系の異常を誤検出するおそれがあるので、ステップ３１１に進み、異常診断許可フラグＸＤＧＦＵＥＬＥＸを異常診断禁止を意味する「０」にリセットして本プログラムを終了する。
【００５３】
７００ｒｐｍ＜Ｎｅ＜３６００ｒｐｍであれば、ステップ３０６からステップ３０７に進み、吸気管圧力ＰＭが例えば２００ｍｍＨｇ＜ＰＭ＜６３０ｍｍＨｇであるか否かを判定し、ＰＭ≦２００ｍｍＨｇの場合、又は、ＰＭ≧６３０ｍｍＨｇの場合には、エンジン１１の運転状態が不安定で、燃料供給系の異常を誤検出するおそれがあるので、ステップ３１１に進み、異常診断許可フラグＸＤＧＦＵＥＬＥＸを異常診断禁止を意味する「０」にリセットして本プログラムを終了する。
【００５４】
２００ｍｍＨｇ＜ＰＭ＜６３０ｍｍＨｇであれば、ステップ３０７からステップ３０８に進み、吸気管圧力センサ１７、水温センサ３９、吸気温度センサ１４、空燃比センサ２８等、空燃比に影響する全てのセンサが正常であるか否かを判定し、１つでも異常なセンサがあれば、燃料供給系の異常を誤検出するおそれがあるので、ステップ３１１に進み、異常診断許可フラグＸＤＧＦＵＥＬＥＸを異常診断禁止を意味する「０」にリセットして本プログラムを終了する。
【００５５】
空燃比に影響する全てのセンサが正常であれば、ステップ３０８からステップ３０９に進み、失火検出系とエバポパージ系等、空燃比に影響する全てのシステムが正常であるか否かを判定し、１つでも異常なシステムがあれば、燃料供給系の異常を誤検出するおそれがあるので、ステップ３１１に進み、異常診断許可フラグＸＤＧＦＵＥＬＥＸを異常診断禁止を意味する「０」にリセットして本プログラムを終了する。
【００５６】
以上説明したステップ３０１〜３０９で判定する条件が全て満たされた時に、異常診断実行条件が成立し、ステップ３１０に進み、異常診断許可フラグＸＤＧＦＵＥＬＥＸを異常診断許可を意味する「１」にセットして本プログラムを終了する。
【００５７】
［異常診断パラメータ算出］
図１１に示す異常診断パラメータ算出プログラムは、所定クランク角毎（例えば１８０℃Ａ毎）に起動される。本プログラムが起動されると、まずステップ４０１で、異常診断実行条件が成立しているか否か（つまり異常診断許可フラグＸＤＧＦＵＥＬＥＸが「１」にセットされているか否か）を判定し、異常診断実行条件が成立していない場合（ＸＤＧＦＵＥＬＥＸ＝０）には、ステップ４０８，４０９に進み、異常診断パラメータＤＧＤＥＬＡＦと異常診断パラメータなまし値ＤＧＤＥＬＡＦＳＭを、共に、異常無しを意味する「１．０」に設定して本プログラムを終了する。この場合は、燃料供給系の異常は検出されない。
【００５８】
一方、異常診断実行条件が成立している場合（ＸＤＧＦＵＥＬＥＸ＝１）には、ステップ４０２〜４０５において、空燃比補正係数ＦＡＦ、学習補正量ＫＧｊ、空燃比λ及び目標空燃比λＴＧを読み込む。この後、ステップ４０６で、空燃比センサ２８で検出した空燃比λと目標空燃比λＴＧとの差と、空燃比補正係数ＦＡＦ（フィードバック補正量）と、学習補正量ＫＧｊとを合計して異常診断パラメータＤＧＤＥＬＡＦを求める。
ＤＧＤＥＬＡＦ＝（λ−λＴＧ）＋ＦＡＦ＋ＫＧｊ
この後、ステップ４０７で、異常診断パラメータＤＧＤＥＬＡＦを次式によりなまし処理して異常診断パラメータなまし値ＤＧＤＥＬＡＦＳＭを算出する。
ＤＧＤＥＬＡＦＳＭ（ｉ）＝｛３×ＤＧＤＥＬＡＦＳＭ（ｉ−１）＋ＤＧＤＥＬＡＦ｝／４
上式は、なまし係数が１／４であるが、１／３、１／６、１／８等であっても良い。
【００５９】
［異常診断実行］
図１２に示す異常診断実行プログラムは、所定時間毎（例えば１０２４ｍｓ毎）に起動される。本プログラムが起動されると、まずステップ５０１で、異常診断許可フラグＸＤＧＦＵＥＬＥＸ＝１（異常診断許可）の状態が例えば２０ｓ継続したか否かを判定し、「Ｎｏ」と判定された場合には、ステップ５１４，５１５に進み、リッチ側診断カウンタｃＤＦＡＦＲとリーン側診断カウンタｃＤＦＡＦＬを「０」にリセットする。
【００６０】
その後、異常診断許可フラグＸＤＧＦＵＥＬＥＸ＝１の状態が２０ｓ継続した時点で、ステップ５０１からステップ５０２に進み、図１１のステップ４０７で算出した異常診断パラメータなまし値ＤＧＤＥＬＡＦＳＭを読み込んだ後、ステップ５０３で、リッチ側異常診断基準値ｔＤＦＡＦＲとリーン側異常診断基準値ｔＤＦＡＦＬを現在の吸入空気量Ｇａに応じて図１３の異常診断基準値マップより読み込む。
【００６１】
この後、ステップ５０４で、異常診断パラメータなまし値ＤＧＤＥＬＡＦＳＭをリッチ側異常診断基準値ｔＤＦＡＦＲと比較し、ＤＧＤＥＬＡＦＳＭ≦ｔＤＦＡＦＲ（リッチ側の異常）であれば、ステップ５０９に進み、リッチ側診断カウンタｃＤＦＡＦＲを１インクリメントする。そして、次のステップ５１０で、リッチ側診断カウンタｃＤＦＡＦＲのカウント値が例えば２０以上になった否か、つまり、リッチ側の異常が例えば２０秒継続したか否かを判定し、２０秒継続すれば、ステップ５１２に進み、最終的に燃料供給系のリッチ側の異常と診断してリッチ側異常診断フラグＤＧＦＵＥＬＲＮＧをリッチ側の異常を意味する「１」にセットし、次のステップ５１３で、警告ランプ３７を点灯して運転者に警告して本プログラムを終了する。
【００６２】
上記ステップ５１０で、リッチ側診断カウンタｃＤＦＡＦＲのカウント値が２０未満の場合、つまり、リッチ側の異常が２０秒継続していない場合には、最終的な診断結果を出さずに本プログラムを終了する。
【００６３】
また、上記ステップ５０４で、ＤＧＤＥＬＡＦＳＭ＞ｔＤＦＡＦＲ（リッチ側正常）と判定された場合には、ステップ５０５に進み、異常診断パラメータなまし値ＤＧＤＥＬＡＦＳＭをリーン側異常診断基準値ｔＤＦＡＦＬと比較し、ＤＧＤＥＬＡＦＳＭ≧ｔＤＦＡＦＬ（リーン側の異常）であれば、ステップ５０６に進み、リーン側診断カウンタｃＤＦＡＦＬを１インクリメントする。そして、次のステップ５０７で、リーン側診断カウンタｃＤＦＡＦＬのカウント値が例えば２０以上になった否か、つまり、リーン側の異常が例えば２０秒継続したか否かを判定し、２０秒継続すれば、ステップ５０８に進み、最終的に燃料供給系のリーン側の異常と診断して、リーン側異常診断フラグＤＧＦＵＥＬＬＮＧをリーン側の異常を意味する「１」にセットし、次のステップ５１３で、警告ランプ３７を点灯して運転者に警告して本プログラムを終了する。
【００６４】
上記ステップ５０７で、リーン側診断カウンタｃＤＦＡＦＬのカウント値が２０未満の場合、つまり、リーン側の異常が２０秒継続していない場合には、最終的な診断結果を出さずに本プログラムを終了する。
【００６５】
以上説明したプログラムによって燃料供給系の異常診断を行った場合の一例を図１４に基づいて説明する。図１４の例では、空燃比補正係数ＦＡＦが途中から下限ガード値に張り付いた状態となり、学習補正量ＫＧｊが更新されなくなる。学習補正量ＫＧｊが更新されない期間でも、異常診断パラメータなまし値ＤＧＤＥＬＡＦＳＭがリッチ側異常診断基準値ｔＤＦＡＦＲ以下になると、リッチ側診断カウンタｃＤＦＡＦＲがインクリメントされる。このインクリメント動作は、ＤＧＤＥＬＡＦＳＭ≦ｔＤＦＡＦＲの状態が続く限り約１秒毎に繰り返され、該カウンタｃＤＦＡＦＲのカウント値が２０（秒）に達した時点で、リッチ側異常診断フラグＤＧＦＵＥＬＲＮＧが「１」にセットされ、燃料供給系の異常が検出される。
【００６６】
以上説明した実施形態によれば、異常診断実行条件の１つとして、空燃比センサ２８が完全活性したこと（素子抵抗値Ｚ＜６０Ω）を追加したので、たとえ空燃比フィードバック制御中であっても、空燃比センサ２８が完全活性していなければ、燃料供給系の異常診断が行われず、空燃比センサ２８が完全活性してから異常診断が行われる。これにより、異常診断時の空燃比センサ２８の検出レンジと応答性を確保することができ、空燃比を精度良く検出することができて、異常診断精度を向上できる。
【００６７】
しかも、空燃比センサ２８の素子温度に応じて素子抵抗値Ｚが変化する特性を利用して、空燃比センサ２８の活性判定を素子抵抗値Ｚに基づいて行うようにしたので、空燃比センサ２８に熱電対等の温度センサを取り付けなくても、空燃比センサ２８の印加電圧変化量ΔＶと電流変化量ΔＩとから算出した素子抵抗値Ｚに基づいて素子温度（活性状態）を精度良く検出することができ、部品点数削減、低コスト化の要求も満たすことができる。
【００６８】
しかしながら、本発明は、空燃比センサ２８に温度センサを設けて、この温度センサで検出した素子温度に基づいて空燃比センサ２８が完全活性したか否かを判定するようにしても良く、この場合でも、本発明の所期の目的は十分に達成できる。
【００６９】
ところで、空燃比センサ２８は、素子温度が高くなるに従って素子抵抗値Ｚが低下するため、上記実施形態のように、素子抵抗値Ｚが所定値（例えば６０Ω）より低いか否かで、完全活性状態であるか否かを判定すると、素子温度が高温になり過ぎても、完全活性状態と判定される。しかし、通常の空燃比センサ２８は、素子温度が高温になり過ぎると、検出誤差が大きくなるため、空燃比センサ２８の製造メーカーは、空燃比センサ２８の仕様（規格）に応じて検出精度を保証する温度範囲（素子抵抗値Ｚの範囲）を保証範囲として設定し、この保証範囲内でのみ空燃比検出値の信頼性を保証するようにしている。従って、素子温度が高温になり過ぎて素子抵抗値Ｚが保証範囲の下限値よりも小さくなれば、空燃比検出値の信頼性が保証されない。
【００７０】
この点を考慮し、空燃比センサ２８の素子抵抗値Ｚが保証範囲（例えば２０Ω＜Ｚ＜６０Ω）であるか否かで完全活性状態であるか否かを判定するようにしても良い。このようにすれば、空燃比センサ２８の素子温度が高温になり過ぎて検出精度が低下した領域では、完全活性状態と判定されず、異常診断が行われないため、異常診断の信頼性を更に向上できる。
【００７１】
尚、上記実施形態では、空燃比センサ２８の出力に基づいて燃料供給系の異常診断を行うようにしたが、例えば、空燃比センサ２８の異常診断や触媒２７の異常診断を行うようにしても良い。空燃比センサ２８の異常診断は、例えば空燃比フィードバック制御中の空燃比の追従性を空燃比センサ２８の出力から判定して空燃比センサ２８の応答性に異常がないかを診断したり、或は、触媒の上流側と下流側の両方に空燃比センサを設置したシステムでは、一方の空燃比センサの出力と他方の空燃比センサの出力とを比較して空燃比センサの出力に異常がないかを診断しても良い。また、触媒の異常診断は、触媒の上流側と下流側の両方に空燃比センサを設置したシステムにおいて、上流側の空燃比センサの出力（上流側の空燃比）と下流側の空燃比センサの出力（下流側の空燃比）との関係から触媒の劣化を診断しても良い。これら空燃比センサの異常診断や触媒の異常診断においても、空燃比センサが完全活性した状態で異常診断を行えば、異常診断精度を向上できる。
【図面の簡単な説明】
【００７２】
【図１】本発明の一実施形態を示すエンジン制御システム全体の概略構成図
【図２】空燃比センサの素子抵抗値と検出レンジとの関係を示す図
【図３】空燃比センサの素子抵抗値と応答性との関係を示す図
【図４】空燃比制御プログラムの処理の流れを示すフローチャート
【図５】目標空燃比マップを概念的に示す図
【図６】目標空燃比設定プログラムの処理の流れを示すフローチャート
【図７】酸素センサの出力と目標空燃比の中央値λＴＧＣとの関係を示すタイムチャート
【図８】酸素センサの出力と目標空燃比λＴＧとの関係を示すタイムチャート
【図９】空燃比学習プログラムの処理の流れを示すフローチャート
【図１０】異常診断実行条件判定プログラムの処理の流れを示すフローチャート
【図１１】異常診断パラメータ算出プログラムの処理の流れを示すフローチャート
【図１２】異常診断実行プログラムの処理の流れを示すフローチャート
【図１３】異常診断基準値マップを概念的に示す図
【図１４】燃料供給系の異常診断を行った場合の一例を示すタイムチャート
【符号の説明】
【００７３】
１１  エンジン（内燃機関）
２６  排気管
２７  触媒
２８  空燃比センサ（空燃比検出手段）
２９  酸素センサ
３０  エンジン制御回路（異常診断手段，完全活性判定手段，抵抗値検出手段）
３７  警告ランプ
３８  センサ素子
【図１】
2006177371.tif 000003
【図２】
2006177371.tif 000004
【図３】
2006177371.tif 000005
【図４】
2006177371.tif 000006
【図５】
2006177371.tif 000007
【図６】
2006177371.tif 000008
【図７】
2006177371.tif 000009
【図８】
2006177371.tif 000010
【図９】
2006177371.tif 000011
【図１０】
2006177371.tif 000012
【図１１】
2006177371.tif 000013
【図１２】
2006177371.tif 000014
【図１３】
2006177371.tif 000015
【図１４】
2006177371.tif 000016