(57)【特許請求の範囲】
【請求項１】
内燃機関の排気系に設けられた空燃比センサの出力に基づいて漸化式形式の制御器を用いて前記機関に供給する燃料を補正する空燃比補正係数を算出し、該算出された空燃比補正係数を用いて前記機関の空燃比を目標値に収束させるように前記機関に供給する燃料をフィードバック制御する制御手段を備えた内燃機関の空燃比制御装置において、
前記算出された空燃比補正係数を平滑化するフィルタ手段と、
前記平滑化された空燃比補正係数の平均値を算出する平均値算出手段と、
前記平均値に基づいて前記機関の燃料供給系の異常を検出する異常検出手段とを備えたことを特徴とする内燃機関の空燃比制御装置。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、漸化式形式の制御器を用いたフィードバック制御により内燃機関に供給する混合気の空燃比を制御する空燃比制御装置に関し、特に内燃機関の排気系に設けられた空燃比センサの出力に応じて設定される空燃比補正係数に基づいて、燃料供給系に発生した異常を検出する機能を有する空燃比制御装置に関するものである。
【０００２】
【従来の技術】
内燃エンジンの排気系に設けた広域空燃比センサの出力に基づいてエンジンに供給する混合気の空燃比を比例項、積分項及び微分項を用いてフィードバック制御するとともに、前記積分項を用いて燃料供給系の異常を検出するようにした空燃比制御装置が従来より知られている。
【０００３】
また、現代制御理論の１つである最適レギュレータをこの空燃比フィードバック制御に応用し、前記広域空燃比センサの出力と、機関の動的モデルに基づいて算出した最適フィードバックゲインとを用いて算出した空燃比補正係数により空燃比をフィードバック制御する空燃比制御装置が従来より知られている（例えば特開平３−１８５２４４号公報）。
【０００４】
【発明が解決しようとする課題】
しかしながら、制御速度が比較的高い上記最適レギュレータを応用した空燃比制御装置においては、補正係数の動きが速くまた変化幅も大きいため、これをそのまま従来の燃料供給系の異常検出手法に用いると、正確な異常検出ができなという問題があった。
【０００５】
本発明はこの問題を解決するためになされたものであり、漸化式形式の制御器を用いた内燃機関の空燃比フィードバック制御を行いつつ、燃料供給系の異常検出を容易かつ正確に行うことができる空燃比制御装置を提供することを目的とする。
【０００６】
【課題を解決するための手段】
上記目的を達成するため本発明は、内燃機関の排気系に設けられた空燃比センサの出力に基づいて漸化式形式の制御器を用いて前記機関に供給する燃料を補正する空燃比補正係数を算出し、該算出された空燃比補正係数を用いて前記機関の空燃比を目標値に収束させるように前記機関に供給する燃料をフィードバック制御する制御手段を備えた内燃機関の空燃比制御装置において、前記算出された空燃比補正係数を平滑化するフィルタ手段と、前記平滑化された空燃比補正係数の平均値を算出する平均値算出手段と、前記平均値に基づいて前記機関の燃料供給系の異常を検出する異常検出手段とを備えたことを特徴とする。
【０００７】
【作用】
空燃比センサの出力に基づいて漸化式形式の制御器を用いて空燃比補正係数が算出され、前記空燃比補正係数が平滑化され、前記平滑化された空燃比補正係数の平均値が算出され、前記平均値に基づいて前記機関の燃料供給系の異常が検出される。
【０００８】
【実施例】
以下本発明の実施例を図面を参照して説明する。
【０００９】
図１は本発明の一実施例にかかる内燃機関（以下「エンジン」という）及びその制御装置の構成を示す図である。同図中、１は各気筒に吸気弁及び排気弁（図示せず）を各１対ずつ設けたＤＯＨＣ直列４気筒のエンジンである。
【００１０】
エンジン１の吸気管２は分岐部（吸気マニホルド）１１を介してエンジン１の各気筒の燃焼室に連通する。吸気管２の途中にはスロットル弁３が配されている。スロットル弁３にはスロットル弁開度（θＴＨ）センサ４が連結されており、スロットル弁開度θＴＨに応じた電気信号を出力して電子コントロールユニット（以下「ＥＣＵ」という）５に供給する。吸気管２には、スロットル弁３をバイパスする補助空気通路６が設けられており、該通路６の途中には補助空気量制御弁７が配されている。補助空気量制御弁７は、ＥＣＵ５に接続されており、ＥＣＵ５によりその開弁量が制御される。
【００１１】
吸気管２のスロットル弁３の上流側には吸気温（ＴＡ）センサ８が装着されており、その検出信号がＥＣＵ５に供給される。吸気管２のスロットル弁３と吸気マニホルド１１の間には、チャンバ９が設けられており、チャンバ９には吸気管内絶対圧（ＰＢＡ）センサ１０が取り付けられている。ＰＢＡセンサ１０の検出信号はＥＣＵ５に供給される。
【００１２】
エンジン１の本体にはエンジン水温（ＴＷ）センサ１３が装着されており、その検出信号がＥＣＵ５に供給される。ＥＣＵ５には、エンジン１のクランク軸（図示せず）の回転角度を検出するクランク角度位置センサ１４が接続されており、クランク軸の回転角度に応じた信号がＥＣＵ５に供給される。クランク角度位置センサ１４は、エンジン１の特定の気筒の所定クランク角度位置で信号パルス（以下「ＣＹＬ信号パルス」という）を出力する気筒判別センサ、各気筒の吸入行程開始時の上死点（ＴＤＣ）に関し所定クランク角度前のクランク角度位置で（４気筒エンジンではクランク角１８０度毎に）ＴＤＣ信号パルスを出力するＴＤＣセンサ及びＴＤＣ信号パルスより短い一定クランク角周期（例えば３０度周期）で１パルス（以下「ＣＲＫ信号パルス」という）を発生するＣＲＫセンサから成り、ＣＹＬ信号パルス、ＴＤＣ信号パルス及びＣＲＫ信号パルスがＥＣＵ５に供給される。これらの信号パルスは、燃料噴射時期、点火時期等の各種タイミング制御及びエンジン回転数ＮＥの検出に使用される。
【００１３】
吸気マニホルド１１の吸気弁の少し上流側には、各気筒毎に燃料噴射弁１２が設けられており、各噴射弁は図示しない燃料ポンプに接続されているとともにＥＣＵ５に電気的に接続されて、ＥＣＵ５からの信号により燃料噴射時期及び燃料噴射時間（開弁時間）が制御される。エンジン１の点火プラグ（図示せず）もＥＣＵ５に電気的に接続されており、ＥＣＵ５により点火時期θＩＧが制御される。
【００１４】
排気管１６は分岐部（排気マニホルド）１５を介してエンジン１の燃焼室に接続されている。排気管１６には分岐部１５が集合する部分の直ぐ下流側に、広域空燃比センサ（以下「ＬＡＦセンサ」という）１７が設けられている。さらにＬＡＦセンサ１７の下流側には直下三元触媒１９及び床下三元触媒２０が配されており、またこれらの三元触媒１９及び２０の間には酸素濃度センサ（以下「Ｏ２センサ」という）１８が装着されている。三元触媒１９、２０は、排気ガス中のＨＣ，ＣＯ，ＮＯｘ等の浄化を行う。
【００１５】
ＬＡＦセンサ１７は、ローパスフィルタ２２を介してＥＣＵ５に接続されており、排気ガス中の酸素濃度（空燃比）に略比例した電気信号を出力し、その電気信号をＥＣＵ５に供給する。Ｏ２センサ１８は、その出力が理論空燃比の前後において急激に変化する特性を有し、その出力は理論空燃比よりリッチ側で高レベルとなり、リーン側で低レベルとなる。Ｏ２センサ１８は、ローパスフィルタ２３を介してＥＣＵ５に接続されており、その検出信号はＥＣＵ５に供給される。
【００１６】
排気還流機構３０は、吸気管２のチャンバ９と排気管１６とを接続する排気還流路３１と、排気還流路３１の途中に設けられ、排気還流量を制御する排気還流弁（ＥＧＲ弁）３２と、ＥＧＲ弁３２の弁開度を検出し、その検出信号をＥＣＵ５に供給するリフトセンサ３３とから成る。ＥＧＲ弁３２は、ソレノイドを有する電磁弁であり、ソレノイドはＥＣＵ５に接続され、その弁開度がＥＣＵ５からの制御信号によりリニアに変化させることができるように構成されている。
【００１７】
次に図２も合わせて参照して、蒸発燃料処理装置４０について説明する。燃料タンク４１は通路４２を介してキャニスタ４５に連通し、キャニスタ４５はパージ通路４３を介して吸気管２のチャンバ９に連通している。キャニスタ４５は、燃料タンク４１内で発生する蒸発燃料を吸着する吸着剤４６を内蔵し、外気取込口４７を有する。通路４２の途中には、正圧バルブ及び負圧バルブから成る２ウェイバルブ４４が配設され、パージ通路４３の途中にはデューティ制御型の電磁弁であるパージ制御弁４８、パージ通路４３を流れる燃料蒸気を含む混合気の流量を検出する流量センサ４９及び該混合気中のＨＣ濃度を検出するＨＣ濃度センサ５０が設けられている。パージ制御弁４８及びセンサ４９、５０は、ＥＣＵ５に接続されており、パージ制御弁４８はＥＣＵ５からの信号に応じて制御され、センサ４９、５０の検出信号はＥＣＵ５に供給される。
【００１８】
蒸発燃料処理装置４０によれば、燃料タンク４１内で発生した蒸発燃料は、所定の設定圧に達すると２ウェイバルブ４４の正圧バルブを押し開き、キャニスタ４５に流入し、キャニスタ４５内の吸着剤４６によって吸着され貯蔵される。パージ制御弁４８はＥＣＵ５からのデューティ信号によって開弁／閉弁作動し、その開弁時間中においてはキャニスタ４５に一時蓄えられていた蒸発燃料は、チャンバ９の負圧により、キャニスタ４５の外気取込口４７から吸入された外気とともにパージ制御弁４８を経てチャンバ９へ吸引され、各気筒に送られる。また、外気などで燃料タンク４１が冷却されて燃料タンク内の負圧が増すと、２ウェイバルブ４４の負圧バルブが開弁し、キャニスタ４５に一時蓄えられていた蒸発燃料は燃料タンク４１へ戻される。このようにして、燃料タンク４１内で発生した燃料蒸気が大気に放出されることが抑止される。
【００１９】
エンジン１は、吸気弁及び排気弁のバルブタイミングを、エンジンの高速回転領域に適した高速バルブタイミングと、低速回転領域に適した低速バルブタイミングとの２段階に切換可能なバルブタイミング切換機構６０を有する。このバルブタイミングの切換は、弁リフト量の切換も含み、さらに低速バルブタイミング選択時は２つの吸気弁のうちの一方を休止させて、空燃比を理論空燃比よりリーン化する場合においても安定した燃焼を確保するようにしている。
【００２０】
バルブタイミング切換機構６０は、バルブタイミングの切換を油圧を介して行うものであり、この油圧切換を行う電磁弁及び油圧センサがＥＣＵ５接続されている。油圧センサの検出信号はＥＣＵ５に供給され、ＥＣＵ５は電磁弁を制御してバルブタイミングの切換制御を行う。
【００２１】
また、ＥＣＵ５には、大気圧を検出する大気圧（ＰＡ）センサ２１が接続されており、その検出信号がＥＣＵ５に供給される。
【００２２】
ＥＣＵ５は、上述した各種センサからの入力信号波形を整形して電圧レベルを所定レベルに修正し、アナログ信号値をデジタル信号値に変化する等の機能を有する入力回路と、中央処理回路（ＣＰＵ）と、該ＣＰＵで実行される各種演算プログラムや後述する各種マップ及び演算結果等を記憶するＲＯＭ及びＲＡＭからなる記憶回路と、燃料噴射弁１２等の各種電磁弁や点火プラグに駆動信号を出力する出力回路とを備えている。
【００２３】
ＥＣＵ５は、上述の各種エンジン運転パラメータ信号に基づいて、ＬＡＦセンサ１７及びＯ２センサ１８の出力に応じたフィードバック制御運転領域やオープン制御運転領域等の種々のエンジン運転状態を判別するとともに、エンジン運転状態に応じ、下記数式１により燃料噴射弁１２の燃料噴射時間ＴＯＵＴを演算し、この演算結果に基づいて燃料噴射弁１２を駆動する信号を出力する。
【００２４】
【数１】
ＴＯＵＴ＝ＴＩＭＦ×ＫＴＯＴＡＬ×ＫＣＭＤＭ×ＫＦＢ
図３は上記数式１による燃料噴射時間ＴＯＵＴの算出手法を説明するための機能ブロック図であり、これを参照して本実施例における燃料噴射時間ＴＯＵＴの算出手法の概要を説明する。なお、本実施例ではエンジンへの燃料供給量は燃料噴射時間として算出されるが、これは噴射される燃料量に対応するので、ＴＯＵＴを燃料噴射量若しくは燃料量とも呼んでいる。
【００２５】
図３においてブロックＢ１は、吸入空気量に対応した基本燃料量ＴＩＭＦを算出する。この基本燃料量ＴＩＭＦは、基本的にはエンジン回転数ＮＥ及び吸気管内絶対圧ＰＢＡに応じて設定されるが、スロットル弁３からエンジン１の燃焼室に至る吸気系をモデル化し、その吸気系モデルに基づいて吸入空気の遅れを考慮した補正を行うことが望ましい。その場合には、検出パラメータとしてスロットル弁開度θＴＨ及び大気圧ＰＡをさらに用いる。
【００２６】
ブロックＢ２〜Ｂ４は乗算ブロックであり、ブロックの入力パラメータを乗算して出力する。これらのブロックにより、上記数式１の演算が行われ、燃料噴射量ＴＯＵＴが得られる。
【００２７】
ブロックＢ９は、エンジン水温ＴＷに応じて設定されるエンジン水温補正係数ＫＴＷ，排気還流実行中に排気還流量に応じて設定されるＥＧＲ補正係数ＫＥＧＲ，蒸発燃料処理装置４０によるパージ実行時にパージ燃料量に応じて設定されるパージ補正係数ＫＰＵＧ等のフィードフォワード系補正係数をすべて乗算することにより、補正係数ＫＴＯＴＡＬを算出し、ブロックＢ２に入力する。
【００２８】
ブロックＢ２１は、エンジン回転数ＮＥ、吸気管内絶対圧ＰＢＡ等に応じて目標空燃比係数ＫＣＭＤを決定し、ブロック２２に入力する。目標空燃比係数ＫＣＭＤは、空燃比Ａ／Ｆの逆数、すなわち燃空比Ｆ／Ａに比例し、理論空燃比のとき値１．０をとるので、目標当量比ともいう。ブロックＢ２２は、ローパスフィルタ２３を介して入力されるＯ２センサ出力ＶＭＯ２に基づいて目標空燃比係数ＫＣＭＤを修正し、ブロックＢ１８及びＢ２３に入力する。ブロックＢ２３は、ＫＣＭＤ値に応じて燃料冷却補正を行い最終目標空燃比係数ＫＣＭＤＭを算出し、ブロックＢ３に入力する。
【００２９】
ブロックＢ１０は、ローパスフィルタ２２を介して入力されるＬＡＦセンサ出力値を、ＣＲＫ信号パルスの発生毎にサンプリングし、そのサンプル値をリングバッファメモリに順次記憶し、エンジン運転状態に応じて最適のタイミングでサンプリングしたサンプル値を選択し（ＬＡＦセンサ出力選択処理）、ローパスフィルタブロックＢ１６及びＢ１７を介してブロックＢ１８及びＢ１９に入力する。このＬＡＦセンサ出力選択処理は、サンプリングのタイミングによっては変化する空燃比を正確に検出できないこと、燃焼室から排出される排気ガスがＬＡＦセンサ１７に到達するまでの時間やＬＡＦセンサ自体の反応時間がエンジン運転状態によって変化することを考慮したものである。
【００３０】
ブロックＢ１８は、検出空燃比と目標空燃比との偏差に応じてＰＩＤ制御によりＰＩＤ補正係数ＫＬＡＦを算出してブロックＢ２０に入力する。  ブロックＢ１９は、検出空燃比に基づいて適応制御（Ｓｅｌｆ  Ｔｕｎｉｎｇ  Ｒｅｇｕｌａｔｉｏｎ）により適応補正係数ＫＳＴＲを算出してブロックＢ２０に入力する。この適応制御は、目標空燃比係数ＫＣＭＤ（ＫＣＭＤＭ）を基本燃料量ＴＩＭＦに乗算するだけでは、エンジンの応答遅れがあるため目標空燃比がなまされた検出空燃比になってしまうため、これを動的に補償し、外乱に対するタフネス性を向上させるために導入したものである。
【００３１】
ブロックＢ２０は、入力されるＰＩＤ補正係数ＫＬＡＦ及び適応補正係数ＫＳＴＲのいずれか一方をエンジン運転状態に応じて選択し、フィードバック補正係数ＫＦＢとしてブロックＢ４に入力する。これは、エンジン運転状態によっては、適応制御ではなく従来のＰＩＤ制御によって算出したＫＬＡＦ値を用いた方がよいことを考慮したものである。
【００３２】
ブロックＢ２５ば、ローパスフィルタブロックＢ２４を介して適応補正係数ＫＳＴＲのフィルタ出力ＫＳＴＲＬＯ及びＰＩＤ制御の積分項ＫＬＡＦＩが入力され、後述する手法により燃料供給等の異常を検出するフューエルメータリングブロックである。
【００３３】
以上のように本実施例では、ＬＡＦセンサ１７の出力の応じて通常のＰＩＤ制御により算出したＰＩＤ補正係数ＫＬＡＦと、適応制御により算出した適応補正係数ＫＳＴＲとを切り換えて、補正係数ＫＦＢとして上記数１に適用して、燃料噴射量ＴＯＵＴを算出している。適応補正係数ＫＳＴＲにより、目標空燃比を変更したときの追従性及び外乱に対するタフネス性を向上させ、触媒の浄化率を向上させ、種々のエンジン運転状態において良好な排気ガス特性を得ることができる。
【００３４】
本実施例では、上述した図３の各ブロックの機能は、ＥＣＵ５のＣＰＵによる演算処理により実現されるので、この処理のフローチャートを参照して処理の内容を具体的に説明する。
【００３５】
図４は、ＬＡＦセンサ１７の出力に応じてＰＩＤ補正係数ＫＬＡＦ及び適応補正係数ＫＳＴＲを算出し、最終的にフィードバック補正係数ＫＦＢを算出する処理のフローチャートである。本処理はＴＤＣ信号パルスの発生毎に実行される。
【００３６】
ステップＳ１では、始動モードか否か、すなわちクランキング中か否かを判別し、始動モードのときは始動モードの処理へ移行する。始動モードでなければ、目標空燃比係数（目標当量比）ＫＣＭＤ及び最終目標空燃比係数ＫＣＭＤＭの算出（ステップＳ２）及びＬＡＦセンサ出力選択処理を行う（ステップＳ３）とともに検出当量比ＫＡＣＴの演算を行う（ステップＳ４）。検出当量比ＫＡＣＴは、ＬＡＦセンサ１７の出力を当量比に変換したものである。
【００３７】
次いでＬＡＦセンサ１７の活性化が完了したか否かの活性判別を行う（ステップＳ５）。これは、例えばＬＡＦセンサ１７の出力電圧とその中心電圧との差を所定値（例えば０．４Ｖ）と比較し、該差が所定値より小さいとき活性化が完了したと判別するものである。
【００３８】
次にエンジン運転状態がＬＡＦセンサ１７の出力に基づくフィードバック制御を実行する運転領域（以下「ＬＡＦフィードバック領域」という）にあるか否かの判別を行う（ステップＳ６）。これは、例えばＬＡＦセンサ１７の活性化が完了し、且つフュエルカット中やスロットル全開運転中でないとき、ＬＡＦフィードバック領域と判定するものである。この判別の結果、ＬＡＦフィードバック領域にないときはリセットフラグＦＫＬＡＦＲＥＳＥＴを「１」に設定し、ＬＡＦフィードバック領域にあるときは「０」とする。
【００３９】
続くステップＳ７では、リセットフラグＦＫＬＡＦＲＥＳＥＴが「１」か否かを判別し、ＦＫＬＡＦＲＥＳＥＴ＝１のときは、ステップＳ８に進んでＰＩＤ補正係数ＫＬＡＦ、適応補正係数ＫＳＴＲ及びフィードバック補正係数ＫＦＢをいずれもに「１．０」に設定するとともに、ＰＩＤ制御の積分項ＫＬＡＦＩを「０」に設定して、本処理を終了する。また、ＦＫＬＡＦＲＥＳＥＴ＝０のときは、フィードバック補正係数ＫＦＢの演算を行って（ステップＳ９）、本処理を終了する。
【００４０】
以下上記ステップＳ２〜Ｓ４，Ｓ６及びＳ９における処理の詳細を順次説明する。
【００４１】
図５は、図４のステップＳ２における最終目標空燃比係数ＫＣＭＤＭを算出する処理のフローチャートである。
【００４２】
ステップＳ２３では、エンジン回転数ＮＥ及び吸気管内絶対圧ＰＢＡに応じてマップを検索し、基本値ＫＢＳを算出する。なお、そのマップにはアイドル時用の値も設定されている。
【００４３】
続くステップＳ２４では、エンジン始動直後のリーンバーン制御を実行すべき条件が成立するか否かを判別し、条件が成立したときは始動後リーンフラグＦＡＳＴＬＥＡＮを「１」に設定する一方、条件不成立のときは「０」とする。このリーンバーン制御実行条件は、例えばエンジン始動後所定期間内であって、エンジン水温ＴＷ、エンジン回転数ＮＥ及び吸気管内絶対圧ＰＢＡが所定範囲内にあるとき成立する。なお、始動直後のリーンバーン制御は、エンジン始動直後の触媒が未活性の状態でＨＣの排出量が増加すること防止する目的で行うものである。
【００４４】
次いでステップＳ２５では、スロットル弁が全開（ＷＯＴ）の状態か否かを判別し、全開のときはＷＯＴフラグＦＷＯＴを「１」に設定し、全開でなければ「０」とする。次いで、エンジン水温ＴＷに応じて増量補正係数ＫＷＯＴを算出する（ステップＳ２６）。このとき高水温時の補正係数ＫＸＷＯＴも算出する。
【００４５】
続くステップＳ２７では、目標空燃比係数ＫＣＭＤを算出し、次いで算出したＫＣＭＤ値のリミット処理（所定上下限値の範囲内に入るようにする処理）を行う。このステップＳ２７の処理は図６を参照して後述する。
【００４６】
続くステップＳ２９では、Ｏ２センサ１８の活性化が完了しているか否かの判別を行い、活性化が完了したときは、活性フラグＦＭＯ２を「１」に設定し、完了していないときは、「０」とする。例えばエンジン始動後所定期間経過したとき、活性化完了と判定する。次いで、ステップＳ３２に進み、Ｏ２センサ１８の出力ＶＭＯ２に応じて目標空燃比係数ＫＣＭＤの補正項ＤＫＣＭＤＯ２を算出する。この処理は、Ｏ２センサ出力ＶＭＯ２と基準値ＶＲＥＦＭとの偏差に応じてＰＩＤ制御により、補正項ＤＫＣＭＤＯ２を算出するものである。
【００４７】
ステップＳ３３では、次式により目標空燃比係数ＫＣＭＤの補正を行う。
【００４８】
ＫＣＭＤ＝ＫＣＭＤ＋ＤＫＣＭＤＯ２
これにより、ＬＡＦセンサ１７の出力のずれを補償するように目標空燃比係数ＫＣＭＤを設定することができる。
【００４９】
続くステップＳ３４では、算出したＫＣＭＤ値に応じてＫＣＭＤ−ＫＥＴＣテーブルを検索して補正係数ＫＥＴＣを算出し、次式により最終目標空燃比係数ＫＣＭＤＭを算出する。
【００５０】
ＫＣＭＤＭ＝ＫＣＭＤ×ＫＥＴＣ
補正係数ＫＥＴＣは、ＫＣＭＤ値が増加し、燃料噴射量が増加するほど、噴射による燃料冷却効果が大きくなることを考慮して、その影響を補正するものであり、ＫＣＭＤ値が増加するほど大きな値に設定される。
【００５１】
次いで、ＫＣＭＤＭ値のリミット処理を行うとともに（ステップＳ３５）、ステップＳ３３で得られたＫＣＭＤ値をリングバッファに格納して（ステップＳ３６）、本処理を終了する。
【００５２】
図６は、図５のステップＳ２７におけるＫＣＭＤ算出処理のフローチャートである。
【００５３】
先ずステップＳ５１では、図５のステップＳ２４で設定した始動後リーンフラグＦＡＳＴＬＥＡＮが「１」か否かを判別し、ＦＡＳＴＬＥＡＮ＝１であるときは、ＫＣＭＤＡＳＴＬＥＡＮマップを検索して、リーン制御時の中心空燃比に相当するリーン目標値ＫＣＭＤＡＳＴＬＥＡＮを算出する（ステップＳ５２）。ここで、ＫＣＭＤＡＳＴＬＥＡＮマップは、エンジン水温ＴＷ及び吸気管内絶対圧ＰＢＡに応じてリーン目標値ＫＣＭＤＡＳＴＬＥＡＮが設定されたマップである。そして、目標空燃比係数ＫＣＭＤをリーン目標値ＫＣＭＤＡＳＴＬＥＡＮに設定して（ステップＳ５３）、ステップＳ５９に進む。
【００５４】
一方前記ステップＳ５１でＦＡＳＴＬＡＥＡＮ＝０であって、始動後リーンバーン制御実行条件が成立しないときは、エンジン水温ＴＷが所定水温ＴＷＣＭＤ（例えば８０℃）より高いか否かを判別する。そしてＴＷ＞ＴＷＣＭＤが成立するときは、ＫＣＭＤ値を図５のステップＳ２３で算出した基本値ＫＢＳに設定して（ステップＳ５７）、ステップＳ５９に進む。また、ＴＷ≦ＴＷＣＭＤが成立するときは、エンジン水温ＴＷ及び吸気管内絶対圧ＰＢＡに応じて設定されたマップを検索して、低水温用目標値ＫＴＷＣＭＤを算出し（ステップＳ５５）、基本値ＫＢＳがこのＫＴＷＣＭＤ値より大きいか否かを判別する（ステップＳ５６）。その結果ＫＢＳ＞ＫＴＷＣＭＤであるときは、前記ステップＳ５７に進み、ＫＢＳ≦ＫＴＷＣＭＤであるときは、基本値ＫＢＳを低水温用目標値ＫＴＷＣＭＤに置き換えて（ステップＳ５８）、ステップＳ５９に進む。
【００５５】
ステップＳ５９では、Ｏ２センサ１８の異常が検出されているか否かを判別し、異常が検出されていなければ直ちにステップＳ６１に進む一方、異常が検出されているときは、調整用加算項ＫＣＭＤＯＦＦＳＥＴを異常時用の調整値ＫＣＭＤＯＦＦＳＥＴＦＳに設定して（ステップＳ６０）、ステップＳ６１に進む。
【００５６】
ここで、異常時用の調整値ＫＣＭＤＯＦＦＳＥＴＦＳは、空燃比がややリッチ方向にバイアスされるような値に設定される。これにより、Ｏ２センサの異常時において空燃比のリーン化によるトルク変動やノッキングを防止することができる。
【００５７】
そしてステップＳ６１では、下記式によりＫＣＭＤ値を補正してステップＳ６２に進む。調整用加算項ＫＣＭＤＯＦＦＳＥＴは、エンジンの排気系やＬＡＦセンサの特性のばらつきや経時変化の影響を反映させて、目標空燃比係数ＫＣＭＤを微調整し、三元触媒のウィンドウゾーンの最適な位置をとるようにするためのパラメータである。
【００５８】
ＫＣＭＤ＝ＫＣＭＤ＋ＫＣＭＤＯＦＦＳＥＴ
ステップＳ６２では、図５のステップＳ２５で設定したＷＯＴフラグＦＷＯＴが「１」か否かを判別し、ＦＷＯＴ＝０であれば直ちに本処理を終了し、ＦＷＯＴ＝１のときは、高負荷用のＫＣＭＤ値の設定処理を行い（ステップＳ６３）、本処理を終了する。この処理は、ＫＣＭＤ値を図５のステップＳ２６で算出した高負荷用増量補正係数ＫＷＯＴ，ＫＸＷＯＴと比較し、ＫＣＭＤ値がこれらの係数値より小さいときは、ＫＣＭＤ値に補正係数ＫＷＯＴ又はＫＸＷＯＴを乗算して補正を行うものである。
【００５９】
次に図４のステップＳ３におけるＬＡＦセンサ出力選択処理について説明する。
【００６０】
エンジンの排気ガスは排気行程で排出されることから、多気筒エンジンの排気系集合部において空燃比の挙動を見ると、明らかにＴＤＣ信号パルスに同期している。したがって、ＬＡＦセンサ１７により空燃比を検出するときもＴＤＣ信号パルスに同期して行う必要がある。ところが、センサ出力のサンプルタイミングによっては空燃比の挙動を正確に把握できない場合が生じる。例えば、ＴＤＣ信号パルスに対して排気系集合部の空燃比が図７のようであるとき、ＥＣＵ５が認識する空燃比は図８に示すように、サンプルタイミングによって全く異なる値となる。この場合、実際のＬＡＦセンサの出力変化を可能な限り正確に把握できるタイミングでサンプリングすることが望ましい。
【００６１】
さらに、空燃比の変化は排気ガスのセンサまでの到達時間やセンサの反応時間によっても相違する。そのうち、センサまでの到達時間は排気ガス圧力、排気ガスボリューム等に依存して変化する。さらに、ＴＤＣ信号パルスに同期してサンプリングすることはクランク角度に基づいてサンプリングすることになるので、必然的にエンジン回転数ＮＥの影響を受ける。このように、空燃比の検出の最適なタイミングは、エンジン運転状態に大きく依存する。
【００６２】
そこで、本実施例では図９に示すように、ＣＲＫ信号パルス（クランク角度３０度毎に発生する）の発生毎にサンプリングしたＬＡＦセンサ出力をリングバッファ（本実施例では１８個の格納場所を有する）に順次格納し、最適タイミングの出力値（１７回前の値から今回値までの中の最適の値）を検出当量比ＫＡＣＴに変換してフィードバック制御に使用するようにしている。
【００６３】
図１０は、図４のステップＳ３におけるＬＡＦセンサ出力選択処理のフローチャートある。
【００６４】
先ずステップＳ８１では、エンジン回転数ＮＥ及び吸気管内絶対圧ＰＢＡを読み出し、次いで現在のバルブタイミングが高速バルブタイミングか否かを判別する（ステップＳ８２）。その結果高速バルブタイミングのときは高速バルブタイミング用のタイミングマップを検索し（ステップＳ８３）、低速バルブタイミングのときは低速バルブタイミング用のタイミングマップを検索し（ステップＳ８４）、その検索結果に応じてリングバッファに格納したＬＡＦセンサ出力ＶＬＡＦを選択して（ステップＳ８５）、本処理を終了する。
【００６５】
上記タイミングマップは、図１１に示すように、エンジン回転数ＮＥ及び吸気管内絶対圧ＰＢＡに応じて、エンジン回転数ＮＥが低いほど、あるいは吸気管内絶対圧ＰＢＡが高いほど早いクランク角度位置でサンプリングした値を選択するように設定されている。ここで、「早い」とは、前のＴＤＣ位置により近い位置でサンプリングした値（換言すれば古い値）を意味する。このように設定したのは、ＬＡＦセンサ出力は、図８に示したように、実際の空燃比の極大値又は極小値（以下「極値」という）に可能な限り近い位置でサンプリングするのが最良であるが、その極値、例えば最初のピーク値は、センサの反応時間を一定と仮定すれば、図１２に示すように、エンジン回転数ＮＥが低下するほど早いクランク角度位置で生じ、また、負荷が高いほど排気ガス圧力や排気ガスボリュームが増加し、排気ガスの流速が増してセンサへの到達時間が早まるからである。
【００６６】
また、高速バルブタイミング用マップは、同一のエンジン回転数ＮＥ又は吸気管内絶対圧ＰＢＡに対しては、低速バルブタイミング用マップより早期のタイミングとなるように設定されている。これは、高速バルブタイミングでは、低速バルブタイミングより排気弁の開弁開始時期が早いからである。
【００６７】
以上のように、図１０の処理によれば、エンジン運転状態に応じて最適なタイミングでサンプリングしたセンサ出力ＶＬＡＦが選択されるので、空燃比の検出精度を向上させることができる。
【００６８】
次に図４のステップＳ４における検出当量比ＫＡＣＴの算出処理について説明する。図１３は、このＫＡＣＴ算出処理のフローチャートである。
【００６９】
先ずステップＳ１０１では、上述した図１０の処理により選択されたセンサ出力選択値ＶＬＡＦＳＥＬからセンサ出力中心値ＶＣＥＮＴを減算して、テンポラリ値ＶＬＡＦＴＥＭＰを算出する。ここで、中心値ＶＣＥＮＴは、混合気の空燃比が理論空燃比のときのＬＡＦセンサ出力値である。
【００７０】
次いで、ＶＬＡＦＴＥＭＰ値が負の値か否かを判別し（ステップＳ１０２）、ＶＬＡＦＴＥＭＰ＜０であって、空燃比が理論空燃比よりリーン側のときは、リーン補正係数ＫＬＢＬＬを乗算して、ＶＬＡＦＴＥＭＰ値を補正する（ステップＳ１０３）一方、、ＶＬＡＦＴＥＭＰ≧０であって、空燃比が理論空燃比よりリッチ側のときは、リッチ補正係数ＫＬＢＬＲを乗算して、ＶＬＡＦＴＥＭＰ値を補正する（ステップＳ１０４）。ここで、リーン補正係数ＫＬＢＬＬ及びリッチ補正係数ＫＬＢＬＲは、ＬＡＦセンサに装着されたラベル抵抗の値に応じて算出されるばらつき補正用の補正係数である。ラベル抵抗値は、予めＬＡＦセンサの特性を測定して、その結果に応じて設定されており、ＥＣＵ５がその値を読み取って補正係数ＫＬＢＬＬ，ＫＬＢＬＲを決定する。
【００７１】
続くステップＳ１０５では、テンポラリ値ＶＬＡＦＴＥＭＰにテーブル中心値ＶＯＵＴＣＮＴを加算して、修正出力値ＶＬＡＦＥを算出し、次いでＶＬＡＦＥ値に応じてＫＡＣＴテーブルを検索して、検出当量比ＫＡＣＴを算出する（ステップＳ１０６）。ここで、ＫＡＣＴテーブルは、修正出力値ＶＬＡＦＥに応じて検出当量比ＫＡＣＴを算出するためのテーブルであり、テーブル中心値ＶＯＵＴＣＮＴは理論空燃比（ＫＡＣＴ＝１．０）に対応する格子点データ（修正出力値）である。
【００７２】
以上の処理により、ＬＡＦセンサの特性ばらつきの影響を排除した検出当量比ＫＡＣＴを得ることができる。
【００７３】
図１４は、図４のステップＳ６におけるＬＡＦフィードバック領域判別処理のフローチャートである。
【００７４】
先ずステップＳ１２１では、ＬＡＦセンサ１７が不活性状態にあるか否かを判別し、活性状態にあるときはフュエルカット中であることを「１」で示すフラグＦＦＣが「１」か否かを判別し（ステップＳ１２２）、ＦＦＣ＝０であるときは、スロットル弁全開中であることを「１」で示すフラグＦＷＯＴが「１」か否かを判別し（ステップＳ１２３）、ＦＷＯＴ＝１でないときは、図示しないセンサによって検出したバッテリ電圧ＶＢＡＴが所定下限値ＶＢＬＯＷより低いか否かを判別し（ステップＳ１２４）、ＶＢＡＴ≧ＶＢＬＯＷであるときは、理論空燃比に対応するＬＡＦセンサ出力のずれ（ＬＡＦセンサストイキずれ）があるか否かを判別する。そして、ステップＳ１２１〜Ｓ１２５のいずれかの答が肯定（ＹＥＳ）のときは、ＰＩＤ補正係数ＫＬＡＦを１．０（無補正値）にリセットすべき旨を「１」で示すＫＬＡＦリセットフラグＦＫＬＡＦＲＥＳＥＴを「１」に設定する（ステップＳ１３２）。
【００７５】
一方、ステップＳ１２１〜Ｓ１２５の答がすべて否定（ＮＯ）のときは、ＫＬＡＦリセットフラグＦＫＬＡＦＲＥＳＥＴを「０」に設定する（ステップＳ１３１）。
【００７６】
続くステップＳ１３３では、Ｏ２センサ１８が不活性状態にあるか否かを判別し、活性状態にあるときは、エンジン水温ＴＷが所定下限水温ＴＷＬＯＷ（例えば０℃）より低いか否かを判別する（ステップＳ１３４）。そして、Ｏ２センサ１８が不活性状態のときまたはＴＷ＜ＴＷＬＯＷであるときは、ＰＩＤ補正係数ＫＬＡＦを現在値に維持すべきことを「１」で示すホールドフラグＦＫＬＡＦＨＯＬＤを「１」に設定して（ステップＳ１３６）、本処理を終了する。一方、Ｏ２センサ１８が活性状態にあり且つＴＷ≧ＴＷＬＯＷであるときは、ＦＫＬＡＦＨＯＬＤ＝０として（ステップＳ１３５）、本処理を終了する。
【００７７】
次に図４のステップＳ９におけるフィードバック補正係数ＫＦＢの算出処理を説明する。
【００７８】
フィードバック補正係数ＫＦＢは、前述したようにエンジン運転状態に応じてＰＩＤ補正係数ＫＬＡＦ又は適応補正係数ＫＳＴＲに設定される。そこで、先ず図１５及び図１６を参照して、これらの補正係数の算出手法を説明する。
【００７９】
図１５は、ＰＩＤ補正係数ＫＬＡＦ算出処理のフローチャートである。
【００８０】
同図のステップＳ３０１では、ホールドフラグＦＫＬＡＦＨＯＬＤが「１」か否かを判別し、ＦＫＬＡＦＨＯＬＤ＝１のときは、直ちに本処理を終了し、ＦＫＬＡＦＨＯＬＤ＝０のときは、ＫＬＡＦリセットフラグＦＫＬＡＦＲＥＳＥＴが「１」か否かを判別する（ステップＳ３０２）。その結果、ＦＫＬＡＦＲＥＳＥＴ＝１のときは、ステップＳ３０３に進み、ＰＩＤ補正係数ＫＬＡＦを１．０に設定するとともに、積分制御ゲインＫＩ及び目標当量比ＫＣＭＤと検出当量比ＫＡＣＴとの偏差ＤＫＡＦを「０」に設定して、本処理を終了する。
【００８１】
ステップＳ３０２でＦＫＬＡＦＲＥＳＥＴ＝０のときは、ステップＳ３０４に進み、比例制御ゲインＫＰ、積分制御ゲインＫＩ及び微分制御ゲインＫＤをエンジン回転数ＮＥ及び吸気管内絶対圧ＰＢＡに応じて設定されたマップから検索する。ただし、アイドル状態のときはアイドル用のゲインを採用する。次いで、目標当量比ＫＣＭＤと検出当量比ＫＡＣＴとの偏差ＤＫＡＦ（ｋ）（＝ＫＣＭＤ（ｋ）−ＫＡＣＴ（ｋ））を算出し（ステップＳ３０５）、偏差ＤＫＡＦ（ｋ）及び各制御ゲインＫＰ，ＫＩ，ＫＤを下記式に適用して、比例項ＫＬＡＦＰ（ｋ）、積分項ＫＬＡＦＩ（ｋ）及び微分項ＫＬＡＦＤ（ｋ）を算出する（ステップＳ３０６）。
【００８２】
ＫＬＡＦＰ（ｋ）＝ＤＫＡＦ（ｋ）×ＫＰ
ＫＬＡＦＩ（ｋ）＝ＤＫＡＦ（ｋ）×ＫＩ＋ＫＬＡＦ（ｋ−１）
ＫＬＡＦＤ（ｋ）＝（ＤＫＡＦ（ｋ）−ＤＫＡＦ（ｋ−１））×ＫＤ
続くステップＳ３０７〜Ｓ３１０では、積分項ＫＬＡＦＩ（ｋ）のリミット処理を行う。すなわち、ＫＬＡＦＩ（ｋ）値が所定上下限値ＫＬＡＦＩＬＭＴＨ，ＫＬＡＦＩＬＭＴＬの範囲内にあるか否かを判別し（ステップＳ３０７、Ｓ３０８）、ＫＬＡＦＩ（ｋ）＞ＫＬＡＦＩＬＭＴＨであるときは、ＫＬＡＦＩ（ｋ）＝ＫＬＡＦＬＭＴＨとし（ステップＳ３１０）、ＫＬＡＦＩ（ｋ）＜ＫＬＡＦＩＬＭＴＬであるときは、ＫＬＡＦＩ（ｋ）＝ＫＬＡＦＩＬＭＴＬとする（ステップＳ３０９）。
【００８３】
続くステップＳ３１１では、下記式によりＰＩＤ補正係数ＫＬＡＦ（ｋ）を算出する。
【００８４】
0003575708.tif 000002
次いで、ＫＬＡＦ（ｋ）値が所定上限値ＫＬＡＦＬＭＴＨより大きいか否かを判別し（ステップＳ３１２）、ＫＬＡＦ（ｋ）＞ＫＬＡＦＬＭＴＨであるときは、ＫＬＡＦ（ｋ）＝ＫＬＡＦＬＭＴＨとして（ステップＳ３１６）、本処理を終了する。
【００８５】
ステップＳ３１２で、ＫＬＡＦ（ｋ）≦ＫＬＡＦＬＭＴＨであるときは、ＫＬＡＦ（ｋ）値が所定下限値ＫＬＡＦＬＭＴＬより小さいか否かを判別し（ステップＳ３１４）、ＫＬＡＦ（ｋ）≧ＫＬＡＦＬＭＴＬであれば直ちに本処理を終了する一方、ＫＬＡＦ（ｋ）＜ＫＬＡＦＬＭＴＬであるときは、ＫＬＡＦ（ｋ）＝ＫＬＡＦＬＭＴＬとして（ステップＳ３１５）、本処理を終了する。
【００８６】
本処理により、検出当量比ＫＡＣＴが目標当量比ＫＣＭＤに一致するように、ＰＩＤ制御によりＰＩＤ補正係数ＫＬＡＦが算出される。
【００８７】
次に適応補正係数ＫＳＴＲ算出処理について、図１６を参照して説明する。
【００８８】
図１６は、図３のブロックＢ１９、すなわち適応制御（ＳＴＲ（Ｓｅｌｆ  Ｔｕｎｉｎｇ  Ｒｅｇｕｌａｔｏｒ））ブロックの構成を示すブロック図であり、このＳＴＲブロックは、目標空燃比係数（目標当量比）ＫＣＭＤ（ｋ）と検出当量比ＫＡＣＴ（ｋ）とが一致するように適応補正係数ＫＳＴＲを設定するＳＴＲコントローラと、該ＳＴＲコントローラで使用するパラメータを設定するパラメータ調整機構とからなる。
【００８９】
本実施例における適応制御の調整則の一つに、ランダウらが提案したパラメータ調整則がある。この手法は、適応システムを線形ブロックと非線形ブロックとから構成される等価フィードバック系に変換し、非線形ブロックについては入出力に関するポポフの積分不等式が成立し、線形ブロックは強正実となるように調整則を決めることによって、適応システムの安定を保証する手法である。この手法は、例えば「コンピュートロール」（コロナ社刊）Ｎｏ．２７，２８頁〜４１頁、ないしは「自動制御ハンドブック」（オーム社刊）７０３頁〜７０７頁に記載されているように、公知技術である。
【００９０】
本実施例では、このランダウらの調整則を用いた。以下説明すると、ランダウらの調整則では、離散系の制御対象の伝達関数Ａ（Ｚ−１）／Ｂ（Ｚ−１）の分母分子の多項式を数式２で▲１▼、▲２▼のようにおいたとき、適応パラメータθハット（ｋ）及び適応パラメータ調整機構への入力ζ（ｋ）は、数式２で▲３▼、▲４▼のように定められる。数式２では、ｍ＝１、ｎ＝１、ｄ＝３の場合、即ち１次系で３制御サイクル分の無駄時間を持つプラントを例にとった。ここで、ｋは時刻、より具体的には制御サイクルを示す。また、数式２において、ｕ（ｋ）及びｙ（ｋ）は、本実施例では、それぞれＫＳＴＲ（ｋ）及びＫＡＣＴ（ｋ）に対応する。
【００９１】
【数２】
0003575708.tif 000003
ここで、適応パラメータθハット（ｋ）は、数式３で表される。また、数式３中のΓ（ｋ）及びｅアスタリスク（ｋ）は、それぞれゲイン行列及び同定誤差信号であり、数式４及び数式５のような漸化式で表される。
【００９２】
【数３】
0003575708.tif 000004
【００９３】
【数４】
0003575708.tif 000005
【００９４】
【数５】
0003575708.tif 000006
また数式４中のλ１（ｋ）、λ２（ｋ）の選び方により、種々の具体的なアルゴリズムが与えられる。λ１（ｋ）＝１，λ２（ｋ）＝λ（０＜λ＜２）とすると漸減ゲインアルゴリズム（λ＝１の場合、最小自乗法）、λ１（ｋ）＝λ１（０＜λ１＜１）、λ２（ｋ）＝λ２（０＜λ２＜２）とすると、可変ゲインアルゴリズム（λ２＝１の場合、重み付き最小自乗法）、λ１（ｋ）／λ２（ｋ）＝σとおき、λ３が数式６のように表されるとき、λ１（ｋ）＝λ３とおくと固定トレースアルゴリズムとなる。また、λ１（ｋ）＝１，λ２（ｋ）＝０のとき固定ゲインアルゴリズムとなる。この場合は数式４から明らかなように、Γ（ｋ）＝Γ（ｋ−１）となり、よってΓ（ｋ）＝Γの固定値となる。
【００９５】
【数６】
0003575708.tif 000007
ここで、図１６にあっては、前記ＳＴＲコントローラ（適応制御器）と適応パラメータ調整機構とは燃料噴射量演算系の外におかれ、検出当量比ＫＡＣＴ（ｋ）が目標当量比ＫＣＭＤ（ｋ−ｄ’）（ここでｄ’はＫＣＭＤがＫＡＣＴに反映されるまでの無駄時間）に適応的に一致するように動作して適応補正係数ＫＳＴＲ（ｋ）を演算する。
【００９６】
このように、適応補正係数ＫＳＴＲ（ｋ）及び検出当量比ＫＡＣＴ（ｋ）が求められて適応パラメータ調整機構に入力され、そこで適応パラメータθハット（ｋ）が算出されてＳＴＲコントローラに入力される。ＳＴＲコントローラには入力として目標当量比ＫＣＭＤ（ｋ）が与えられ、検出当量比ＫＡＣＴ（ｋ）が目標当量比ＫＣＭＤ（ｋ）に一致するように漸化式を用いて適応補正係数ＫＳＴＲ（ｋ）が算出される。
【００９７】
適応補正係数ＫＳＴＲ（ｋ）は、具体的には数式７に示すように求められる。
【００９８】
【数７】
0003575708.tif 000008
次に上述のようにして算出するＰＩＤ補正係数ＫＬＡＦと適応補正係数ＫＳＴＲとを切り換えて、すなわちＰＩＤ制御と適応制御とを切り換えて、フィードバック補正係数ＫＦＢを算出する手法を説明する。
【００９９】
図１７は、図４のステップＳ９におけるフィードバック補正係数ＫＦＢの算出処理のフローチャートである。
【０１００】
先ずステップＳ１５１では、図４の処理の前回実行時がオープンループ制御であったか（ＦＫＬＡＦＲＥＳＥＴ＝１であったか）否かを判別し、オープンループ制御でなかったときは、目標当量比ＫＣＭＤの変化量ＤＫＣＭＤ（＝｜ＫＣＭＤ（ｋ）−ＫＣＭＤ（ｋ−１）｜）が基準値ＤＫＣＭＤＲＥＦより大きいか否かを判別する。そして、前回がオープンループ制御だったとき又は、前回がフィードバック制御であり且つ変化量ＤＫＣＭＤが基準値ＤＫＣＭＤＲＥＦより大きいときは、ＰＩＤ補正係数ＫＬＡＦによるフィードバック制御を実行すべき運転領域（以下「ＰＩＤ制御領域」という）と判定し、カウンタＣを「０」にリセットするとともに（ステップＳ１５３）、ステップＳ１６４に進み、ＰＩＤ補正係数ＫＬＡＦ演算処理（図１９（ａ））を実行する。
【０１０１】
図１９（ａ）のステップＳ２０１では、前回の制御でＳＴＲフラグＦＫＳＴＲが「１」であったか否かを判別する。このＳＴＲフラグＦＫＳＴＲは、適応補正係数ＫＳＴＲによるフィードバック制御を実行すべき運転領域（以下「適応制御領域」という）であることを「１」で示し、フィードバック補正係数算出後に設定される（ステップＳ２０４、図１９（ｂ）、ステップＳ２１３）。
【０１０２】
ステップＳ２０１で、前回はＦＫＳＴＲ＝０であったときは直ちにステップＳ２０３に進み、前回はＦＫＳＴＲ＝１であったときは、ＰＩＤ制御の積分項の前回値ＫＡＬＦＩ（ｋ−１）を、適応補正係数の前回値ＫＳＴＲ（ｋ−１）に設定して（ステップＳ２０２）、ステップＳ２０３に進む。ステップＳ２０３では、前述した図１５の処理によりＰＩＤ補正係数ＫＬＡＦを算出し、次いでステップＳ２０４に進み、ＳＴＲフラグＦＫＳＴＲを「０」に設定して、図１９（ａ）の処理を終了する。
【０１０３】
ここで、適応制御からＰＩＤ制御への切換時（前回ＦＫＳＴＲ＝１のとき）は、ＰＩＤ制御の積分項ＫＬＡＦＩが急変する可能性があるため、ステップＳ２０２により、ＫＬＡＦＩ（ｋ−１）＝ＫＳＴＲ（ｋ−１）としている。これにより、適応補正係数ＫＳＴＲ（ｋ−１）とＰＩＤ補正係数ＫＬＡＦ（ｋ）との差を小さくとどめ、切換を滑らかにして制御の安定性を確保することができる。
【０１０４】
図１７にもどり、続くステップＳ１６５では、フィードバック補正係数ＫＦＢをステップＳ１６４で算出したＰＩＤ補正係数ＫＬＡＦ（ｋ）に設定して（ステップＳ１６５）、本処理を終了する。
【０１０５】
なお、前回がオープンループ制御であったときは、ＰＩＤ制御領域と判定するのは、例えばフュエルカット状態からの復帰時のような場合には、ＬＡＦセンサの検出遅れなどから、必ずしも検出値が真の値を示すとは限らないため、制御が不安定となる可能性があるからである。また、同様の理由で、目標当量比ＫＣＭＤの変化量ＤＫＣＭＤが大きいとき、例えばスロットル全開増量状態から復帰したとき、リーンバーン制御から理論空燃比制御に復帰したとき等においてもＰＩＤ制御領域と判定している。
【０１０６】
ステップＳ１５１及びＳ１５２の答がともに否定（ＮＯ）のとき、すなわち前回もフィードバック制御であり、かつ目標当量比ＫＣＭＤの変化量ＤＫＣＭＤが基準値ＤＫＣＭＤＲＥＦ以下のときは、カウンタＣを「１」だけインクリメントして（ステップＳ１５４）、ステップＳ１５５でカウンタＣの値を所定値ＣＲＥＦ（例えば５）と比較する。ここで、カウンタＣの値がＣＲＥＦ値以下の場合は前記ステップＳ１６４に進む。
【０１０７】
カウンタＣの値がＣＲＥＦ値以下のときＰＩＤ制御領域とするのは、オープンループ制御からの復帰直後や目標当量比ＫＣＭＤが大きく変化した直後は、燃料の燃焼が完了するまでの遅れやＬＡＦセンサの検出遅れの影響を吸収できないからである。
【０１０８】
次にステップＳ１５６に進み、適応制御領域か否かの判別処理（図１８）を実行する。図１８の処理は、現在のエンジン運転状態から、フィードバック補正係数ＫＦＢを、適応制御則にしたがって求めるか、ＰＩＤ制御則に従って求めるか判別するものである。
【０１０９】
すなわち、エンジン水温ＴＷが所定水温ＴＷＳＴＲＯＮより低いか否かを判別し（ステップＳ１７０）、ＴＷ≧ＴＷＳＴＲＯＮであるときは、エンジン回転数ＮＥが所定回転数ＮＥＳＴＲＬＭＴ以上であるか否かを判別し（ステップＳ１７１）、ＮＥ＜ＮＥＳＴＲＬＭＴであるときは、エンジンがアイドル状態か否かを判別し（ステップＳ１７２）、アイドル状態でないときは、吸気管内絶対圧ＰＢＡが所定値以下の低負荷状態か否かを判別し（ステップＳ１７３）、低負荷状態でないときは、エンジンのバルブタイミングが高速バルブタイミングか否かを判別し（ステップＳ１７４）、高速バルブタイミングでないときは、検出当量比ＫＡＣＴが所定値ａより小さいか否かを判別し（ステップＳ１７５）、所定値ａ以上のときは、検出当量比ＫＡＣＴが所定値ｂ（＞ａ）より大きいか否かを判別する（ステップＳ１７６）。
【０１１０】
その結果、ステップＳ１７０〜Ｓ１７６のいずれかの答が肯定（ＹＥＳ）のときは、ＰＩＤ制御領域と判定して（ステップＳ１７８）、本処理を終了する。
【０１１１】
ここで、ＰＩＤ制御領域と判定し、ＰＩＤ制御によりフィードバック補正係数ＫＦＢを算出することとした理由は以下の通りである。低水温時（ＴＷ＜ＴＷＳＴＲＯＮ）は、燃焼が安定せず、失火などが生じるおそれがあり、安定した検出当量比ＫＡＣＴが得られないからである。なお、エンジン水温ＴＷが異常に高いときも、同様の理由でＰＩＤ制御によりフィードバック補正係数ＫＦＢを算出する。また、高回転時（ＮＥ≧ＮＥＳＴＲＬＭＴ）は、ＥＣＵの演算時間が不足しがちであるとともに、燃焼も安定しないからである。また、高速バルブタイミング選択時は、吸排気弁がともに開弁しているオーバラップ期間が長いので、吸気がそのまま排気弁を通過して排出される、いわゆる吹き抜けが生じるおそれがあり、安定した検出当量比ＫＡＣＴを期待できないからである。また、エンジンのアイドル時は、運転状態がほぼ安定しており、適応制御のような高いゲインの制御は必要としないからである。
【０１１２】
また、検出当量比ＫＡＣＴが所定値ａより小さいとき若しくは所定値ｂより大きいときは、エンジンの空燃比がリーン又はリッチのときであり、適応制御のような高いゲインの制御は行わない方がよいからである。この判別は、本実施例においては、検出当量比ＫＡＣＴで行ったが、目標当量比ＫＣＭＤを用いて行ってもよい。
【０１１３】
一方ステップＳ１７０〜Ｓ１７６の答がすべて否定（ＮＯ）のときは、適応制御領域と判定して（ステップＳ１７７）、本処理を終了する。
【０１１４】
図１７に戻り、ステップＳ１５７では、図１８の処理の結果から、フィードバック補正係数ＫＦＢを適応制御で算出するか否かを判別する。ステップＳ１５７の答が否定（ＮＯ）のときは、前記ステップＳ１６４に進み、ステップＳ１５７の答が肯定（ＹＥＳ）のときは、ステップＳ１５８に進み、前回ＳＴＲフラグＦＫＳＴＲが「０」であったか否かを判別する。
【０１１５】
その結果前回ＦＫＳＴＲ＝１であったときは、直ちにステップＳ１６１に進み、前回はＦＫＳＴＲ＝０であったときは、検出当量比ＫＡＣＴが所定上下限値ＫＡＣＴＬＭＴＨ（例えば１．０１），ＫＡＣＴＬＭＴＬ（例えば０．９９の範囲内にあるか否かを判別し（ステップＳ１５９、Ｓ１６０）、ＫＡＣＴ＜ＫＡＣＴＬＭＴＬ又はＫＡＣＴ＞ＫＡＣＴＬＭＴＨであるときは、前記ステップＳ１６４に進んで、ＰＩＤ補正係数ＫＬＡＦを算出する。また、ＫＡＣＴＬＭＴＬ≦ＫＡＣＴ≦ＫＡＣＴＬＭＴＨであるときは、ステップＳ１６１に進み、ＫＳＴＲ演算処理（図１９（ｂ））を実行する。
【０１１６】
ステップＳ１５８〜Ｓ１６０により、ＰＩＤ制御から適応制御への切換は、適応制御領域であって、且つ検出当量比ＫＡＣＴが１．０付近の値のときに行われる。これにより、ＰＩＤ制御から適応制御への切換を滑らかに行うことができ、制御の安定性を確保することができる。
【０１１７】
図１９（ｂ）のステップＳ２１０では、前回フラグＫＳＴＲが「０」であったか否かを判別する。その結果、前回はＦＫＳＴＲ＝１であったときは、直ちにステップＳ２１２に進み、前述した手法により適応補正係数ＫＳＴＲを算出し、次いでフラグＦＫＳＴＲを「１」に設定して、図１９（ｂ）の処理を終了する。
【０１１８】
一方、前回はＦＫＳＴＲ＝０であったときは、適応パラメータ（ゲインを決定するスカラ量）ｂ０を、ＰＩＤ補正係数の前回値ＫＬＡＦ（ｋ−１）で除算した値に置き換えて（ステップＳ２１１）、前記ステップＳ２１２に進む。
【０１１９】
ステップＳ２１１で、適応パラメータｂ０をｂ０／ＫＬＡＦ（ｋ−１）に置き換えることにより、ＰＩＤ制御から適応制御への切換をより滑らかに行うことができ、制御の安定性を確保することができる。これは、以下のような理由による。前記数式７のｂ０をｂ０／ＫＬＡＦ（ｋ−１）に置き換えると、数式８の第１式に示すようになるが、第１式の第１項は、ＰＩＤ制御実行中はＫＳＴＲ（ｋ）＝１としているので、１となる。従って、適応制御開始当初のＫＳＴＲ（ｋ）値は、ＫＬＡＦ（ｋ−１）に等しくなり、補正係数値が滑らかに切り換えられることになる。
【０１２０】
【数８】
0003575708.tif 000009
図１７に戻り、ステップＳ１６１で求めた適応補正係数ＫＳＴＲの値と１．０との差の絶対値｜ＫＳＴＲ（ｋ）−１．０｜が基準値ＫＳＴＲＲＥＦより大きいか否かを判別し（ステップＳ１６２）、｜ＫＳＴＲ（ｋ）−１．０｜＞ＫＳＴＲＲＥＦであるときは、前記ステップＳ１６４に進む一方、｜ＫＳＴＲ（ｋ）−１．０｜≦ＫＳＴＲＲＥＦであるときは、フィードバック補正係数ＫＦＢをＫＳＴＲ（ｋ）値に設定して（ステップＳ１６３）、本処理を終了する。
【０１２１】
ここで、適応補正係数ＫＳＴＲと１．０との差の絶対値が基準値ＫＳＴＲＲＥＦより大きいときは、ＰＩＤ制御領域とするのは、制御の安定性確保のためである。
【０１２２】
図２０及び図２１は、本発明が適用される燃料供給系の異常検出プログラムフローチャートを示し、本プログラムはバックグラウンド処理手法によりＥＣＵ５において実行される。
【０１２３】
図２０において、まずステップＳ１１０１では、燃料供給系の異常検出（モニタ）を行うべきことを“０”によって示すフラグＦＦＭＰＡＳＳが“１”であるか否かを判別し、その答が肯定（ＹＥＳ）、即ち燃料供給系の異常検出を行う指示が未だない場合は、ステップＳ１１０２へ進む。
【０１２４】
ステップＳ１１０２では、後述するモニタ条件の継続時間を設定するモニタ条件持続タイマｔＣＯＮＴ、パージカット後の安定化時間を設定するパージカット後安定化タイマｔＦＭＰＧＳ、及び空燃比フィードバック補正係数（空燃比補正係数）ＫＦＢの積分値ＫＡＶの算出時間を設定するＫＡＶ算出タイマｔＣＨＫＡＶＥをそれぞれ所定値に初期化してスタートさせる。なお、これらのタイマはダウンカウンタで構成されている。
【０１２５】
続くステップＳ１１０３では、燃料供給系の異常検出を行うためにパージカットを実施すべきことを“１”によって示すフラグＦＰＧＳＣＮＴが“０”であるか否かを判別する。このフラグＦＰＧＳＣＮＴは、後述する異常被判別係数ＫＦＢＣＨＫＡＶＥの算出処理において使用され、パージの影響による誤検出を排除するためのパージカットの指示が出ている場合にパージカットを実施するためのフラグである（後述するステップＳ１２２０で“１”にセットされる）。
【０１２６】
ステップＳ１１０３の答が肯定（ＹＥＳ）、即ちフラグＦＰＧＳＣＮＴが“０”であり前記パージカットを実施しなかった場合はそのまま本ルーチンを終了する。また、その答が否定（ＮＯ）、即ち前記パージカットを実施した場合はパージコントロールを行うべきことを“１”によって示すフラグＦＰＧＳを“１”に設定すると共に、前記フラグＦＰＧＳＣＮＴを“０”に設定して、再びパージを行えるように処理を戻して本ルーチンを終了する（ステップＳ１１０４）。
【０１２７】
一方、前記ステップＳ１１０１の答が否定（ＮＯ）、即ち燃料供給系の異常検出を行う指示が出た場合は、ステップＳ１１０５，Ｓ１１０６，Ｓ１１０７の判別処理を順次実行する。すなわち、ステップＳ１１０５では、パージの影響による誤検出を排除するためモニタの禁止を行うべきことを“１”によって示すフラグＦＦＭＰＧＰＡＳＳが“１”であるか否かを判別する。このフラグＦＦＭＰＧＰＡＳＳは、後述するステップＳ１１２０で“１”にセットされる。
【０１２８】
ステップＳ１１０６では、燃料供給系の異常を“１”によって示すフラグＦＦＭＮＧが“１”でいるか否かを判別する。このフラグＦＦＭＮＧは、後述する燃料供給系の異常が確定した場合に“１”にセット（後述ステップＳ１１１３）される。
【０１２９】
ステップＳ１１０７においては、本モニタがＬＡＦセンサ１７を使用して行われるのでＬＡＦセンサ１７が異常であるか否かを判別する。
【０１３０】
これらの判別処理の答が１つでも肯定（ＹＥＳ）、即ち、フラグＦＦＭＰＧＰＡＳＳ＝“１”、フラグＦＦＭＮＧ＝“１”、あるいはＬＡＦセンサが異常である場合は、燃料供給系の異常検出を行わないとして前記ステップＳ１１０２，Ｓ１１０３，Ｓ１１０４の処理を前述同様に実行する。
【０１３１】
そして、ステップＳ１１０５〜ステップＳ１１０７の判別処理において、その答が全て否定（ＮＯ）の場合、即ちフラグＦＦＭＰＧＰＡＳＳ＝“０”、フラグＦＦＭＮＧ＝“０”、及びＬＡＦセンサが異常でない場合は、燃料供給系の異常検出を行うものとして次のステップＳ１１０８へ進み、後述のサブルーチンで示す異常被判別係数ＫＦＢＣＨＫＡＶＥの算出処理を行う。
【０１３２】
前記ステップＳ１１０８における異常被判別係数ＫＦＢＣＨＫＡＶＥの算出処理後は、ステップＳ１１０９へ進む。このステップＳ１１０９では、前記異常被判別係数ＫＦＢＣＨＫＡＶＥが算出されたことを“１”で示すフラグＦＫＦＢＣＨＫＡＶＥＣＨＫが“１”であるか否かを判別し、その答が否定（ＮＯ）、即ち異常被判別係数ＫＦＢＣＨＫＡＶＥが算出されていないときは本ルーチンを終了する。その答が肯定（ＹＥＳ）、即ち異常被判別係数ＫＦＢＣＨＫＡＶＥが算出された場合は図２１のステップＳ１１１１に進み、その算出された異常被判別係数ＫＦＢＣＨＫＡＶＥがそのＫＦＢＣＨＫＡＶＥ値の上限値ＫＦＢＣＨＫＡＶＥＦＳＨよりも大きいか否かを判別する。
【０１３３】
ステップＳ１１１１の判別処理の答が肯定（ＹＥＳ）、即ち異常被判別係数ＫＦＢＣＨＫＡＶＥがそのＫＦＢＣＨＫＡＶＥ値の上限よりも大きい場合は、燃料供給系に異常があると判別し、ステップＳ１１１２において、パージカットを行うべきことを“１”で示すフラグＦＦＭＰＧＳを“０”に設定し、続いてステップＳ１１１３で前記フラグＦＦＭＮＧを“１”に設定して本ルーチンを終了する。
【０１３４】
また、前記ステップＳ１１１１の判別の答が否定（ＮＯ）の場合は、Ｓ１ステップＳ１１１４に進む。このステップＳ１１１４では、パージの影響による誤検出の可能性の有無を判断するための閾値ＫＦＢＣＨＫＡＶＥＰＧＬよりも今回のＫＦＢＣＨＫＡＶＥ値が小さいか否かを判別する。ここで、閾値ＫＦＢＣＨＫＡＶＥＰＧＬは、図２６に示すようにＫＦＢＣＨＫＡＶＥ値の下限値ＫＦＢＣＨＫＡＶＥＦＳＬよりもやや大きく設定する。これは、閾値ＫＦＢＣＨＫＡＶＥＰＧＬを下限値ＫＦＢＣＨＫＡＶＥＦＳＬと同値にすると、後述するパージカットを行った際に、ＫＦＢＣＨＫＡＶＥ値の変動が現れる以前に燃料供給系が異常と判定されるおそれがあるためである。
【０１３５】
ステップＳ１１１４の判別の答が肯定（ＹＥＳ）、即ちＫＦＢＣＨＫＡＶＥ値が閾値ＫＦＢＣＨＫＡＶＥＰＧＬよりも小さく（図２６のＡ１）、パージの影響による誤検出の可能性があると判断された場合はステップＳ１１１５に進み、前記フラグＦＦＭＰＧＳを“１”にして次回のモニタでパージカットを実施するように指示する（このパージカットは後述するステップＳ１２１９，Ｓ１２２０で実施される）。このように、異常被判別係数ＫＦＢＣＨＫＡＶＥが閾値ＫＦＢＣＨＫＡＶＥＰＧＬを下回ったときのみパージカットを行うことにより、的確にパージの影響による誤検出を防止できるだけでなく、不要なパージカットが行われることがなくなる。これにより、頻繁なパージカット／パージの切り換えを行う必要がなくなり、運転性の悪化を防止できる。
【０１３６】
次いでステップＳ１１１６へ進み、ＫＦＢＣＨＫＡＶＥ値がそのＫＦＢＣＨＫＡＶＥ値の下限値ＫＦＢＣＨＫＡＶＥＦＳＬよりも小さいか否かを判別し、その答が肯定（ＹＥＳ）、即ちＫＦＢＣＨＫＡＶＥ値が下限値ＫＦＢＣＨＫＡＶＥＦＳＬよりも小さい場合は、燃料供給系に異常があるとして前記ステップＳ１１１２及びステップＳ１１１３の処理を経て本ルーチンを終了する。その答が否定（ＮＯ）、即ちＫＦＢＣＨＫＡＶＥ値が下限値ＫＦＢＣＨＫＡＶＥＦＳＬよりも大きい場合は、燃料供給系に異常がないとしてステップＳ１１１７で燃料供給系に異常がないことを“１”よって示すフラグＦＦＭＯＫを“１”に設定し、本ルーチンを終了する。
【０１３７】
一方、次回のモニタで前記ステップＳ１１１４の判別を行った際、その答が否定（ＮＯ）、即ちＫＦＢＣＨＫＡＶＥ値が閾値ＫＦＢＣＨＫＡＶＥＰＧＬよりも大きくなっている場合（前回のパージカットによりＫＦＢＣＨＫＡＶＥ値が上昇する；図２６のＡ２）はステップＳ１１１８へ進み、前回（ステップＳ１１１５）でパージカットが指示されていたか否かを判別し、その答が肯定（ＹＥＳ）、即ちフラグＦＦＭＰＧＳが“１”で前回パージカットが指示されていた場合は、ステップＳ１１１９でフラグＦＦＭＰＧＳを“０”に設定してパージカットを停止する（図２６のＡ３）。
【０１３８】
そして、このような時にモニタを実行することは、パージの影響によって正確なモニタが実施できない状況にあると判断し、続くステップＳ１１２０で前記フラグＦＦＭＰＧＰＡＳＳを“１”に設定して、モニタを禁止する指示を出す（図２６のＡ４）。その後は、前記ステップＳ１１１６へ進んで前記同様の処理後、本ルーチンを終了する。
【０１３９】
次に、図２２〜図２５のフローチャートを用いて前記ステップＳ１１０８における異常被判別係数ＫＦＢＣＨＫＡＶＥの詳細な算出手法を説明する。
【０１４０】
図２２において、まずステップＳ１２０１では、エンジン運転が特定運転領域にあるか否かを判別する。即ちエンジン回転数ＮＥが下限回転数ＮＡＶＥＬ（例えば１５０４ｒｐｍ）と上限回転数ＮＡＶＥＬ（例えば２４９６ｒｐｍ）との間にあり（該上下限回転数はＡＴ車とＭＴ車とで別の値に設定してもよい）、吸気管内絶対圧ＰＢＡが下限圧ＰＢＡＶＥＬ（例えば２６３ｍｍＨｇ）と上限圧ＰＢＡＶＥＨ（例えば４３５ｍｍＨｇ）との間にあり（該上下限圧はＡＴ車とＭＴ車とで別の値に設定してもよい）、吸気温ＴＡが下限温度ＴＡＡＶＥＬ（例えば２０℃）と上限温度ＴＷＡＶＥＨ（例えば７０℃）との間にあり、エンジン水温ＴＷが下限温度ＴＡＡＶＥＬ（例えば７０℃）と上限温度（例えば９０℃）との間にあり、車速Ｖが下限速度ＶＡＶＥＬと上限速度ＶＡＶＥＨとの間にあり、且つスロットル弁開度θＴＨが下限開度θＴＨＡＶＥＬと上限開度θＴＨＡＶＥＨとの間にあるときエンジンが特定運転領域にあるとする。
【０１４１】
ステップＳ１２０１の答が肯定（ＹＥＳ）、即ちエンジン運転が特定運転領域にある場合はステップＳ１２０２へ進み、空燃比フィードバック制御中であるか否かを判別する。前記ステップＳ１２０１またはステップＳ１２０２の答が否定（ＮＯ）、即ちエンジン運転が特定運転領域にない場合、または空燃比フィードバック制御が行われていない場合は、ＬＡＦセンサ１７の出力に応じた空燃比補正係数ＫＦＢの算出が行われないので、ＫＦＢＣＨＫＡＶＥ値の算出処理は実行せずに、図２３に示すステップＳ１２０３〜ステップＳ１２０９の処理を行い、本サブルーチンを終了する。
【０１４２】
すなわち、ステップＳ１２０３〜Ｓ１２０５において、順次、前記モニタ条件持続タイマｔＣＯＮＴ、パージカット後安定化タイマｔＦＭＰＧＳ、及びＫＡＶ算出タイマｔＣＨＫＡＶＥをそれぞれ所定値に初期化してスタートさせる。さらに、ステップＳ１２０６で前記フラグＦＫＦＢＣＨＫＡＶＥＣＨＫを“０”に設定しておき、続くステップＳ１２０７で前記フラグＦＰＧＳＣＮＴが“０”であるか否かを判別する。その答が否定（ＮＯ）、即ちフラグＦＰＧＳＣＮＴが“０”でない場合はステップＳ１２０８へ進み、前記フラグＦＰＧＳを“１”に設定すると共に、前記フラグＦＰＧＳＣＮＴを“０”に戻して、ステップＳ１２０９でフラグＦＫＡＣＴＳＴを“０”に設定して本サブルーチンを終了する。ここで、フラグＦＫＡＣＴＳＴは、他の制御ルーチンでＬＡＦセンサ１７の出力を当量比に変換して得られる検出当量比ＫＡＣＴと目標当量比ＫＣＭＤとの大小関係の反転（以下単に「ＫＡＣＴ値の反転」という）があったときに“１”に設定される反転確認フラグである（後述のステップＳ１２１７で“１”にセットされる）。また、前記ステップＳ１２０７の答が肯定（ＹＥＳ）、即ちフラグＦＰＧＳＣＮＴが“０”のときは、前記ステップＳ１２０８をスキップしてステップＳ１２０９を経て本サブルーチンを終了する。
【０１４３】
図２２に戻り、前記ステップＳ１２０１及びステップＳ１２０２の答が肯定（ＹＥＳ）、即ちエンジン運転が特定運転領域となり、且つ空燃比フィードバック制御中となった場合はステップＳ１２１０へ進み、前記フラグＦＫＦＢＣＨＫＡＶＥＣＨＫが“１”であるか否かを判別する。その答が否定（ＮＯ）、即ちフラグＦＫＦＢＣＨＫＡＶＥＣＨＫが０”で未だ異常被判別係数ＫＦＢＣＨＫＡＶＥが算出されていないときは次のステップＳ１２１１へ進んで、タイマｔＣＯＮＴが“０”であるか否かを判別する。
【０１４４】
前記ステップＳ１２１０の答が肯定（ＹＥＳ）、即ちフラグＦＫＦＢＣＨＫＡＶＥＣＨＫが“１”で既にＫＦＢＣＨＫＡＶＥ値が算出されている場合、または前記ステップＳ１２１１の答が否定（ＮＯ）、即ちタイマｔＣＯＮＴが“０”でない場合は、前記ステップＳ１２０７〜ステップＳ１２０９の処理を同様に行って本サブルーチンを終了する。
【０１４５】
前記ステップＳ１２１０の答が否定（ＮＯ）、即ちＫＦＢＣＨＫＡＶＥ値が算出されておらず、前記ステップＳ１２１１の答が肯定（ＹＥＳ）、即ちタイマｔＣＯＮＴが“０”となり、エンジン運転が特定運転領域にある空燃比フィードバック制御状態が所定時間継続した場合は、モニタ条件が成立したことになり、ステップＳ１３００以降で実際に異常被判別係数ＫＦＢＣＨＫＡＶＥ算出の処理を行う。
【０１４６】
まず、ステップＳ１３００では図１９のステップＳ２０４又はＳ２１３で設定したフラグＦＫＳＴＲが「１」か否かを判別する。その判別の結果、「１」に設定されていないときは、積分値ＫＡＶ算出のための異常判定パラメータＫＦＢＣＨＫに、ＰＩＤ制御の積分項ＫＬＡＦＩをセットし（ステップＳ１３０１）、一方「１」に設定されているときは異常判定パラメータＫＦＢＣＨＫにＳＴＲ制御の適応補正係数ＫＳＴＲのフィルタ出力値ＫＳＴＲＬＯをセットして（ステップＳ１３０２）からステップＳ１２１２へ進む。なおここで、フィルタ出力値ＫＳＴＲＬＯは適応補正係数ＫＳＴＲをローパスフィルタブロックＢ２４に通過させ、いわゆる一次遅れプロセス等によりその値を平滑化して得られる。制御応答性の非常に高いＳＴＲ制御では、その補正係数ＫＳＴＲの動きおよび変化幅が大きいので、ローパスフィルタ出力値ＫＳＴＲＬＯを用いることにより、積分値ＫＡＶの変動を抑制し、適切な異常被判別係数ＫＦＢＣＨＫＡＶＥを得ることができる。その結果、適応補正係数ＫＳＴＲを用いて正確な異常検出を行うことが可能となる。
【０１４７】
次に、ステップＳ１２１２では、前記フラグＦＦＭＰＧＳが“１”であるか否かを判別する。初回は、その答が否定（ＮＯ）、即ちフラグＦＦＭＰＧＳが“０”でパージカットの指示が出ていないので、図２４のステップＳ１２１３へ進む。
【０１４８】
図２４において、ステップＳ１２１３では、タイマｔＦＭＰＧＳが“０”となったか否かを判別し、その答が否定（ＮＯ）、即ち前記ステップＳ１２０５でスタートされたタイマｔＦＭＰＧＳが“０”となっていない場合は、パージ開始から所定時間の経過がないとしてステップＳ１２１４へ進む。このステップＳ１２１４では、前記フラグＦＫＡＣＴＳＴを“０”にして本サブルーチンを終了する。
【０１４９】
前記ステップＳ１２１３の答が肯定（ＹＥＳ）、即ちタイマｔＦＭＰＧＳが“０”となってパージ開始から所定時間経過した場合は、ステップＳ１２１５へ進み、前記フラグＦＫＡＣＴＳＴが“１”であるか否かを判別する。初回では、その答は否定（ＮＯ）、即ちフラグＦＫＡＣＴＳＴが“０”であってＫＡＣＴ値の反転は確認されていないので、ステップＳ１２１６においてＫＡＣＴ値が反転されているか否かを判別する。その答が否定（ＮＯ）、即ちＫＡＣＴ値が反転されていない場合は、本サブルーチンを終了し、肯定（ＹＥＳ）、即ちＫＡＣＴ値が反転されていた場合は、ステップＳ１２１７で前記フラグＦＫＡＣＴＳＴを“１”に設定すると共に、ステップＳ１２１８で現在のＫＦＢＣＨＫ値をその積分値ＫＡＶの初期値として設定して本サブルーチンを終了する。
【０１５０】
図２２に戻り、２回目以降において、前記ステップＳ１２１２の答が肯定（ＹＥＳ）、即ちフラグＦＦＭＰＧＳが“１”となりパージの影響による誤検出を排除するためのパージカットの指示が出ている場合は、ステップＳ１２１９へ進む。このステップＳ１２１９では、前記フラグＦＰＧＳが“１”であるか否かを判別し、その答が肯定（ＹＥＳ）、即ちパージカットの指示が出ているにも拘らずフラグＦＰＧＳが“１”で実際にパージカットが行われていない場合は、ステップＳ１２２０へ進む。
【０１５１】
ステップＳ１２２０では、前記フラグＦＰＧＳを“０”に設定してパージカットを指示し、且つ前記フラグＦＰＧＳＣＮＴを“１”に設定してパージカットを実施した後、図２４に示す前記ステップＳ１２１３へ進む。また、前記ステップＳ１２１９の答が否定（ＮＯ）、パージカット指示によりパージカットとなっている場合は、そのままステップＳ１２１３へ進む。このステップＳ１２１３では、上記同様の処理を行って前記ステップＳ１２１５へ進む。
【０１５２】
ステップＳ１２１５の判別では、前回でＫＡＣＴ値が反転していればフラグＦＫＡＣＴＳＴが“１”となっているので、その答は肯定（ＹＥＳ）、即ちＫＡＣＴ値の反転が確認され、ステップＳ１２２１へ進んで、再度、ＫＡＣＴ値が反転されているか否かを判別する。その答が肯定（ＹＥＳ）、即ちＫＡＣＴ値が反転されているときは下記数式９に基づき異常判定パラメータＫＦＢＣＨＫの学習平均値である積分値ＫＡＶを算出する（ステップ１２２２）。
【０１５３】
【数９】
0003575708.tif 000010
但し、ＣＯ２ＡＶは１〜１００Ｈのうち、特定運転領域において異常判定パラメータＫＦＢＣＨＫの変化に対する追従性をよくするために比較的大きな値に設定される変数であり、ＫＡＶ’は積分値ＫＡＶの前回値であって、その初期値は、前回エンジンが特定運転領域あった時に得られ記憶された最後のＫＦＢＣＨＫＡＶＥ値とし、エンジン始動後最初に特定運転領域に突入した時は、係数ＫＦＢＣＨＫＡＶＥ値の初期値とする。
【０１５４】
また、ステップＳ１２２１の答が否定（ＮＯ）、即ちＫＡＣＴ値が反転されていない場合は、前記ステップＳ１２２２をスキップして、積分値ＫＡＶは前回値を採用する。
【０１５５】
続くステップＳ１２２３では、タイマｔＣＨＫＡＶＥが“０”となっているか否かを判別し、その答が否定（ＮＯ）、即ちタイマｔＣＨＫＡＶＥが“０”となっていない場合は本サブルーチンを終了する。その答が肯定（ＹＥＳ）、即ちタイマｔＣＨＫＡＶＥが“０”となりＫＡＶ値の算出後所定時間が経過した場合は、図２５のステップＳ１２２４へ進む。
【０１５６】
ステップＳ１２２４では、このように決定された積分値ＫＡＶが、前回ＫＦＢＣＨＫＡＶＥ値に経年変化判定用偏差ΔＫＦＢＣＨＫＡＶＥ（例えば８００Ｈ）を加算した値より大きいか否かを判別する。なお、係数ＫＦＢＣＨＫＡＶＥの初期値は他の制御ルーチンで決定されるＫＦＢの平均値ＫＲＥＦとする。このステップＳ１２２４の答が肯定（Ｙｅｓ）ならば下記数式１０に基づき異常被判別係数ＫＦＢＣＨＫＡＶＥの今回値を算出して更新する（ステップＳ１２２５）。
【０１５７】
【数１０】
ＫＦＢＣＨＫＡＶＥ＝ＫＦＢＣＨＫＡＶＥ’＋α×ΔＫＦＢＣＨＫＡＶＥ
但しＫＦＢＣＨＫＡＶＥ’は係数ＫＦＢＣＨＫの前回値を示し、右辺の係数αは運転状態に応じて設定される係数（≦１．０）であり、例えば０．５に設定される。
【０１５８】
次にステップＳ１２２６でフラグＦＫＦＢＣＨＫＡＶＥＣＨＫを、１に設定して、ステップＳ１２２７へ進む。このステップＳ１２２７では、フラグＦＰＧＳＣＮＴが“０”であるか否かを判別し、その答が肯定（ＹＥＳ）、即ち燃料供給系の異常検出のためのパージカットを実施していなかった場合は、本サブルーチンを終了し、その答が否定（ＮＯ）、即ち燃料供給系の異常検出のためのパージカットを実施していた場合は、ステップＳ１２２８へ進む。
【０１５９】
ステップＳ１２２８では、前記フラグＦＰＧＳを“１”に設定すると共に、前記フラグＦＰＧＳＣＮＴを“０”に設定してパージを元に戻し、本サブルーチンを終了する。
【０１６０】
ステップＳ１２２４の答が否定（Ｎｏ）ならば前記積分値ＫＡＶが、前回ＫＦＢＣＨＫＡＶＥ値から前記経年変化判定用偏差値ΔＫＦＢＣＨＫＡＶＥを減算した値より小さいか否かを判別する（ステップＳ１２２９）。この答が肯定（Ｙｅｓ）ならば下記数式１１に基づき異常被判別係数ＫＦＢＣＨＫＡＶＥの今回値を算出して更新する（ステップＳ１２３０）。
【０１６１】
【数１１】
ＫＦＢＣＨＫＡＶＥ＝ＫＦＢＣＨＫＡＶＥ’−α×ΔＫＦＢＣＨＫＡＶＥ
その後、前記ステップＳ１２２６，Ｓ１２２７，Ｓ１２２８の処理を前記同様に行って本サブルーチンを終了する。また、前記ステップＳ１２２９の答が否定（ＮＯ）であれば前記ステップＳ１２３０をスキップして本サブルーチンを終了する。
【０１６２】
図２２乃至図２５の処理により、空燃比制御がＰＩＤ制御による場合とＳＴＲ制御による場合とにかかわらず、異常被判別係数ＫＦＢＣＨＫＡＶＥが適切に算出され、これを図２０、図２１の燃料供給系の異常検出処理に用いることにより、正確な異常検出を行うことができる。
【０１６３】
なお、上述した実施例では適応制御実行中は、ＫＳＴＲ値をローパスフィルタ処理したＫＳＴＲＬＯ値を用いて（ＫＦＢＣＨＫ＝ＫＳＴＲＬＯとして）積分値ＫＡＶを算出するようにしたが、これに限るものではなく、例えば適応制御実行中はＫＦＢＣＨＫ＝ＫＳＴＲとするとともに、数式９の変数ＣＯ２ＡＶをＰＩＤ制御実行中より小さな値とし、数式９によるなましの度合をより大きくするようにしてもよい。
【０１６４】
【発明の効果】
以上詳述したように本発明の内燃機関の空燃比制御装置によれば、空燃比センサの出力に基づいて漸化式形式の制御器を用いて空燃比補正係数が算出され、前記空燃比補正係数が平滑化され、前記平滑化された空燃比補正係数の平均値が算出され、前記平均値に基づいて前記エンジンの燃料供給系の異常が検出されるので、漸化式形式の制御器を用いた空燃比フィードバック制御実行中においても従来の手法に対し複雑な構成の追加を必要とすることなく、容易かつ正確に燃料供給系の異常検出をすることができる。
【図面の簡単な説明】
【図１】本発明の一実施例にかかる内燃機関及びその制御装置の構成を示す図である。
【図２】図１の一部の詳細な構成を示す図である。
【図３】本実施例における空燃比制御手法を説明するための機能ブロック図である。
【図４】ＬＡＦセンサ出力に基づいて空燃比補正係数を算出する処理のフローチャートである。
【図５】最終目標空燃比係数（ＫＣＭＤＭ）算出処理のフローチャートである。
【図６】目標空燃比係数（ＫＣＭＤ）算出処理のフローチャートである。
【図７】ＴＤＣ信号パルスとＬＡＦセンサ出力との関係を示す図である。
【図８】ＬＡＦセンサ出力の最適なサンプリング時期を説明するための図である。
【図９】ＬＡＦセンサ出力選択処理を説明するための図である。
【図１０】ＬＡＦセンサ出力選択処理のフローチャートである。
【図１１】ＬＡＦセンサ出力選択用タイミングマップを示す図である。
【図１２】図１１のマップの設定傾向説明するための図である。
【図１３】検出当量比（ＫＡＣＴ）算出処理のフローチャートである。
【図１４】ＬＡＦフィードバック領域判別処理のフローチャートである。
【図１５】ＰＩＤ補正係数（ＫＬＡＦ）算出処理のフローチャートである。
【図１６】適応補正係数（ＫＳＴＲ）の算出処理を説明するためのブロック図である。
【図１７】フィードバック補正係数（ＫＦＢ）の算出処理のフローチャートである。
【図１８】適応制御領域判別処理のフローチャートである。
【図１９】ＫＬＡＦ／ＫＳＴＲ演算処理のフローチャートである。
【図２０】異常検出プログラムのフローチャートである。
【図２１】異常検出プログラムのフローチャートである。
【図２２】図２０に示されるステップＳ１１０８の詳細なプログラムのフローチャートである。
【図２３】図２０に示されるステップＳ１１０８の詳細なプログラムの続きのフローチャートである。
【図２４】図２０に示されるステップＳ１１０８の詳細なプログラムのフローチャートである。
【図２５】図２０に示されるステップＳ１１０８の詳細なプログラムの続きのフローチャートである。
【図２６】パージの影響による異常被判別係数ＫＦＢＣＨＫＡＶＥの変動を示す図である。
【符号の説明】
１  内燃機関（本体）
５  電子コントロールユニット（ＥＣＵ）
１２  燃料噴射弁
１７  広域空燃比センサ
【図１】
0003575708.tif 000011
【図２】
0003575708.tif 000012
【図３】
0003575708.tif 000013
【図４】
0003575708.tif 000014
【図５】
0003575708.tif 000015
【図６】
0003575708.tif 000016
【図７】
0003575708.tif 000017
【図８】
0003575708.tif 000018
【図９】
0003575708.tif 000019
【図１０】
0003575708.tif 000020
【図１１】
0003575708.tif 000021
【図１２】
0003575708.tif 000022
【図１３】
0003575708.tif 000023
【図１４】
0003575708.tif 000024
【図１５】
0003575708.tif 000025
【図１６】
0003575708.tif 000026
【図１７】
0003575708.tif 000027
【図１８】
0003575708.tif 000028
【図１９】
0003575708.tif 000029
【図２０】
0003575708.tif 000030
【図２１】
0003575708.tif 000031
【図２２】
0003575708.tif 000032
【図２３】
0003575708.tif 000033
【図２４】
0003575708.tif 000034
【図２５】
0003575708.tif 000035
【図２６】
0003575708.tif 000036