(57)【特許請求の範囲】
【請求項１】
エンジンの排気系と吸気系とを接続する通路に、排気ガスの一部を吸気系に還流させるための流量制御弁を介装したエンジンの排気ガス還流制御装置において、
エンジンのクランク角速度情報に基づいて、エンジンで発生するサージを検出するためのサージレベル指標値を算出するサージレベル指標値算出手段と、
上記サージレベル指標値と判定閾値とを比較してサージレベルを判定するサージレベル判定手段と、
上記サージレベルが増加方向に変化したとき、上記流量制御弁の開度を制御して上記排気ガスの還流量を減少させ、同一サージレベルが継続するとき、上記流量制御弁の開度を制御して漸次的に上記排気ガスの還流量を増加させる制御手段とを備え、
上記制御手段は、
同一サージレベルが継続するとき、エンジン安定状態を表す安定指標パラメータと判定閾値とを比較し、
上記安定指標パラメータが上記判定閾値以下で安定度合いの高いときには、上記安定指標パラメータが上記判定閾値を越える安定度合いの低いときよりも、上記排気ガスの還流量を漸次的に増加する際の増加量を大きくすることを特徴とするエンジンの排気ガス還流制御装置。
【請求項２】
上記制御手段は、
上記サージレベルの増加方向への変化量が大きいとき、上記サージレベルの増加方向への変化量が小さいときよりも上記排気ガスの還流量の減少量を大きくすることを特徴とする請求項１記載のエンジンの排気ガス還流制御装置。
【請求項３】
上記制御手段は、
上記サージレベル指標値を算出する際のパラメータが上限値に張り付いたとき、上記排気ガスの還流量を漸次的に減少させることを特徴とする請求項１又は２記載のエンジンの排気ガス還流制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、サージの発生状況に応じて排気ガス還流量を制御するエンジンの排気ガス還流制御装置に関する。
【０００２】
【従来の技術】
従来から、エンジンの失火によるトルク変動に起因するサージを検出し、このサージの発生状況に応じて空燃比、点火時期、排気系から吸気系への排気ガス還流量等の制御パラメータを修正することで、エンジンの失火率を制御し、サージを抑制する技術を採用するシステムが知られている。
【０００３】
例えば、特許公報第２８７０２１０号には、機関回転数の時間当たり変動量からサージ発生の有無を判定し、排気系と吸気系とを連通する排気再循環（排気ガス還流：ＥＧＲ）通路に配設した流量制御弁の開度制御中にサージ発生有りと判定したとき、流量制御弁の開度を減少させる方向に補正し、サージが出ない範囲で最大限のＥＧＲ量を確保する技術が開示されている。
【０００４】
【発明が解決しようとする課題】
しかしながら、先行例では、単にサージの有無によってＥＧＲ量を減少させ、サージが出ない範囲でＥＧＲ量を増加させるのみであり、サージの度合いは考慮されていない。このため、必ずしも最大限のＥＧＲ量を確保できるとは限らず、また、必ずしも運転状態に適合したＥＧＲ量を得られるわけでもない。
【０００５】
本発明は上記事情に鑑みてなされたもので、サージの度合いを考慮して排気ガス還流量を緻密に制御し、サージの許容範囲内で最大限の排気還流を可能とすることのできるエンジンの排気ガス還流制御装置を提供することを目的としている。
【０００６】
【課題を解決するための手段】
上記目的を達成するため、請求項１記載の発明は、エンジンの排気系と吸気系とを接続する通路に、排気ガスの一部を吸気系に還流させるための流量制御弁を介装したエンジンの排気ガス還流制御装置において、エンジンのクランク角速度情報に基づいて、エンジンで発生するサージを検出するためのサージレベル指標値を算出するサージレベル指標値算出手段と、上記サージレベル指標値と判定閾値とを比較してサージレベルを判定するサージレベル判定手段と、上記サージレベルが増加方向に変化したとき、上記流量制御弁の開度を制御して上記排気ガスの還流量を減少させ、同一サージレベルが継続するとき、上記流量制御弁の開度を制御して漸次的に上記排気ガスの還流量を増加させる制御手段とを備え、上記制御手段は、同一サージレベルが継続するとき、エンジン安定状態を表す安定指標パラメータと判定閾値とを比較し、上記安定指標パラメータが上記判定閾値以下で安定度合いの高いときには、上記安定指標パラメータが上記判定閾値を越える安定度合いの低いときよりも、上記排気ガスの還流量を漸次的に増加する際の増加量を大きくすることを特徴とする。
【０００８】
請求項２記載の発明は、請求項１記載の発明において、上記制御手段は、上記サージレベルの増加方向への変化量が大きいとき、上記サージレベルの増加方向への変化量が小さいときよりも上記排気ガスの還流量の減少量を大きくすることを特徴とする。
【００１０】
請求項３記載の発明は、請求項１又は２記載の発明において、上記制御手段は、上記サージレベル指標値を算出する際のパラメータが上限値に張り付いたとき、上記排気ガスの還流量を漸次的に減少させることを特徴とする。
【００２５】
すなわち、請求項１記載の発明は、エンジンのクランク角速度情報に基づいて、エンジンで発生するサージを検出するためのサージレベル指標値を算出し、このサージレベル指標値と判定閾値とを比較してサージレベルを判定する。そして、サージレベルが増加方向に変化したとき、流量制御弁の開度を制御して排気ガスの還流量を減少させることでサージを解消させ、同一サージレベルが継続するときには、流量制御弁の開度を制御して漸次的に排気ガスの還流量を増加させることで、排気ガス還流による排気エミッションの改善を促進する。その際、同一サージレベルが継続するときには、エンジン安定状態を表す安定指標パラメータと判定閾値とを比較し、安定指標パラメータが判定閾値以下で安定度合いの高いときには、安定指標パラメータが判定閾値を越える安定度合いの低いときよりも排気ガスの還流量を漸次的に増加する際の増加量を大きくすることで、排気ガス還流による排気エミッションの改善を促進する。
【００２７】
また、請求項２記載の発明は、サージレベルの増加方向への変化量が大きいとき、サージレベルの増加方向への変化量が小さいときよりも排気ガスの還流量の減少量を大きくすることで、排気ガス還流量の過多による燃焼悪化を早期に防止する。
【００２９】
請求項３記載の発明は、サージレベル指標値を算出する際のパラメータが上限値に張り付いたとき、排気ガスの還流量を漸次的に減少させ、サージレベルの増大を予測して排気ガス還流量の過多による燃焼悪化を未然に回避する。
【００４４】
【発明の実施の形態】
以下、図面を参照して本発明の実施の形態を説明する。図１〜図５０は本発明の実施の一形態に係わり、図１はエンジンの全体概略図、図２はクランクロータとクランク角センサの正面図、図３はカムロータと気筒判別センサの正面図、図４はクランクパルス、気筒判別パルス、燃焼行程気筒、点火信号、及びインジェクタ駆動信号の関係を示すタイムチャート、図５は電子制御系の回路構成図、図６は気筒判別／エンジン回転数算出ルーチンのフローチャート、図７はサージレベル検出ルーチンのフローチャート、図８は指標値演算サブルーチンのフローチャート、図９はデジタルフィルタ処理の説明図、図１０及び図１１はサージレベル指標値算出サブルーチンのフローチャート、図１２は指標最大値の説明図、図１３は指標最大値減衰量テーブルの説明図、図１４は指標最大値張り付き判定の説明図、図１５〜図１７はサージレベル判定閾値設定サブルーチンのフローチャート、図１８は小サージレベル判定閾値の説明図、図１９は中サージレベル判定閾値の説明図、図２０は大サージレベル判定閾値の説明図、図２１はサージレベル検出サブルーチンのフローチャート、図２２はＥＧＲ制御量算出ルーチンのフローチャート、図２３〜図２９はＥＧＲ実施可能判定サブルーチンのフローチャート、図３０はＥＧＲ実施可能判定条件の説明図、図３１〜図３６はＥＧＲリミットガード目標値更新条件判定サブルーチンのフローチャート、図３７はＥＧＲリミットガード目標値更新条件判定の説明図、図３８〜図４１はＥＧＲリミットガード目標値更新サブルーチンのフローチャート、図４２は安定指標パラメータ算出ルーチンのフローチャート、図４３は回転補正係数テーブルの説明図、図４４及び図４５はＥＧＲリミット値設定サブルーチンのフローチャート、図４６はＥＧＲ禁止／許可によるＥＧＲ許可係数の変化を示す説明図、図４７はＥＧＲ流量算出サブルーチンのフローチャート、図４８はモータ目標位置算出サブルーチンのフローチャート、図４９はＥＧＲ駆動ルーチンのフローチャート、図５０はサージレベルとＥＧＲリミットガード目標値とモータ目標位置との関係を示すタイムチャートである。
【００４５】
図１において、符号１はエンジンであり、図においては水平対向型４気筒ガソリンエンジンを示す。エンジン１のシリンダブロック１ａの左右両バンクには、シリンダヘッド２がそれぞれ設けられ、各シリンダヘッド２に吸気ポート２ａと排気ポート２ｂとが形成されている。
【００４６】
エンジン１の吸気系としては、各吸気ポート２ａにインテークマニホルド３が連通され、このインテークマニホルド３に各気筒の吸気通路が集合するエアチャンバ４を介して、アクセルペダルに連動するスロットル弁５ａが介装されたスロットルチャンバ５が連通されている。そして、このスロットルチャンバ５の上流側に吸気管６を介してエアクリーナ７が取り付けられ、このエアクリーナ７に接続されるエアインテーク通路の中途にチャンバ８が連通されている。
【００４７】
また、吸気管６には、スロットル弁５ａをバイパスするバイパス通路９が接続されており、このバイパス通路９に、アイドル時にその弁開度によって該バイパス通路９を流れるバイパス空気量を調整することでアイドル回転数を制御するアイドル回転数制御弁（ＩＳＣ弁）１０が介装されている。更に、インテークマニホルド３の各気筒の吸気ポート２ａの直上流にインジェクタ１１が配設され、シリンダヘッド２の各気筒毎に、その放電電極部を燃焼室に露呈する点火プラグ１２が配設されている。点火プラグ１２には、イグナイタ１４を内蔵するイグニッションコイル１３が接続されている。
【００４８】
一方、エンジン１の排気系としては、シリンダヘッド２の各排気ポート２ｂにエキゾーストマニホルド１５を介して排気官１６が連通されている。各バンクからの排気官１６の合流部には、三元触媒等を有する触媒コンバータ１７が介装され、触媒コンバータ１７下流にマフラ１８が介装されている。
【００４９】
また、エンジン１の排気系から吸気系へ排気ガスを還流させるため、一方のバンクのエキゾーストマニホルド１５から排気ガス還流（ＥＧＲ）通路１９が延出され、エアチャンバ４に連通されている。ＥＧＲ通路１９の途中には、ＥＧＲ量を調整するための流量制御弁としてのＥＧＲ弁２０が介装されており、このＥＧＲ弁２０の開度に応じて排気ガスの一部が吸気系に還流される。本形態においては、ＥＧＲ弁２０は、弁開度を調整するアクチュエータとしてステップモータを用いるステップモータ式ＥＧＲ弁である。
【００５０】
次に、エンジン運転状態を検出するためのセンサ類について説明する。吸気管６のエアクリーナ７の直下流には、ホットワイヤ或いはホットフィルム等を用いた熱式の吸入空気量センサ２１が介装されている。また、スロットルチャンバ５に設けられたスロットル弁５ａに、スロットル開度センサ２２ａとスロットル弁５ａの全閉でＯＮするアイドルスイッチ２２ｂとを内蔵したスロットルセンサ２２が連設されている。また、エアチャンバ４には、吸気温度を検出するための吸気温センサ２３が臨まされると共に、スロットル弁５ａ下流の圧力（吸気管圧力）を絶対圧で検出するための吸気管圧力センサ２４が連設されている。
【００５１】
また、エンジン１のシリンダブロック１ａにノックセンサ２５が取り付けられ、シリンダブロック１ａの左右バンクを連通する冷却水通路２６に冷却水温センサ２７が臨まされている。また、触媒コンバータ１７の上流側に、空燃比を検出するためのＯ2センサ２８が配設されている。更に、エンジン１のクランクシャフト１ｂに軸着するクランクロータ２９の外周に、クランク角センサ３０が対設され、クランクシャフト１ｂに対して１／２回転するカムシャフト１ｃに軸着するカムロータ３１の外周に、気筒判別センサ３２が対設されている。
【００５２】
クランクロータ２９は、図２に示すように、その外周に突起２９ａ，２９ｂ，２９ｃが形成され、これらの各突起２９ａ，２９ｂ，２９ｃが、各気筒（＃１，＃２気筒と＃３，＃４気筒）の圧縮上死点前（ＢＴＤＣ）θ１，θ２，θ３の位置に形成されている。本形態においては、θ１＝１００°ＣＡ，θ２＝７０°ＣＡ，θ３＝１０°ＣＡである。
【００５３】
また、図３に示すように、カムロータ３１の外周には、気筒判別用の突起３１ａ，３１ｂ，３１ｃが形成され、突起３１ａが＃３，＃４気筒の圧縮上死点後（ＡＴＤＣ）θ４の位置に形成され、突起３１ｂが３個の突起で構成されて最初の突起が＃１気筒のＡＴＤＣθ５の位置に形成されている。更に、突起３１ｃが２個の突起で形成され、最初の突起が＃２気筒のＡＴＤＣθ６の位置に形成されている。本形態においては、θ４＝２０°ＣＡ，θ５＝５°ＣＡ，θ６＝２０°ＣＡである。
【００５４】
図４のタイムチャートに示すように、エンジン運転に伴いクランクシャフト１ｂ及びカムシャフト１ｃが回転してクランクロータ２９及びカムロータ３１が回転すると、クランクロータ２９の各突起がクランク角センサ３０によって検出され、クランク角センサ３０からθ１，θ２，θ３（ＢＴＤＣ１００°，７０°，１０°ＣＡ）の各クランクパルスがエンジン１／２回転（１８０°ＣＡ）毎に出力される。一方、θ３クランクパルスとθ１クランクパルスとの間でカムロータ３１の各突起が気筒判別センサ３２によって検出され、気筒判別センサ３２から所定数の気筒判別パルスが出力される。
【００５５】
そして、以下のエンジン制御用の電子制御装置５０（ＥＣＵ５０）において、クランク角センサ３０から出力されるクランクパルスの入力間隔時間Ｔθに基づいてエンジン回転数ＮＥを算出し、また、各気筒の燃焼行程順（例えば、＃１気筒→＃３気筒→＃２気筒→＃４気筒）と、気筒判別センサ３２からの気筒判別パルスをカウンタによって計数した値とのパターンに基づいて、燃焼行程気筒、燃料噴射対象気筒や点火対象気筒の気筒判別を行う。
【００５６】
エンジン制御用のＥＣＵ５０は、前述のインジェクタ１１、イグナイタ１４、ＩＳＣ弁１０、ＥＧＲ弁２０等のアクチュエータ類に対する制御量の演算、制御信号の出力、すなわち空燃比制御を含む燃料噴射制御、点火時期制御、アイドル回転数制御、ＥＧＲ制御等を行うものである。図５に示すように、ＥＣＵ５０は、ＣＰＵ５１、ＲＯＭ５２、ＲＡＭ５３、バックアップＲＡＭ５４、シリアルインターフェース（ＳＣＩ）５５、カウンタ・タイマ群５６、及びＩ／Ｏインターフェイス５７がバスラインを介して互いに接続されるマイクロコンピュータを中心として構成され、各部に安定化電源を供給する定電圧回路５８、Ｉ／Ｏインターフェイス５７に接続される駆動回路５９及びＡ／Ｄ変換器６０等の周辺回路が内蔵されている。
【００５７】
尚、カウンタ・タイマ群５６は、フリーランカウンタ、気筒判別センサ信号（気筒判別パルス）の入力計数用カウンタ等の各種カウンタ、燃料噴射用タイマ、点火用タイマ、定期割り込みを発生させるための定期割り込み用タイマ、クランク角センサ信号（クランクパルス）の入力間隔計時用タイマ、エンジン始動後の経過時間を計時する始動後時間計時用タイマ、及びシステム異常監視用のウオッチドッグタイマ等の各種タイマを便宜上総称するものであり、その他、各種のソフトウエアカウンタ・タイマが用いられる。
【００５８】
定電圧回路５８は、２回路のリレー接点を有する電源リレー６１の第１のリレー接点を介してバッテリ６２に接続されている。電源リレー６１は、そのリレーコイルの一端が接地され、リレーコイルの他端が駆動回路５９に接続されている。尚、電源リレー６１の第２のリレー接点には、バッテリ６２から各アクチュエータに電源を供給するための電源線が接続されている。
【００５９】
また、バッテリ６２には、イグニッションスイッチ６３の一端が接続され、このイグニッションスイッチ６３の他端がＩ／Ｏインターフェース５７の入力ポートに接続されている。また、定電圧回路５８は、直接、バッテリ６２に接続されており、イグニッションスイッチ６３のＯＮが検出されて電源リレー６１の接点が閉になると、ＥＣＵ５０内の各部へ電源を供給する一方、イグニッションスイッチ６３のＯＮ，ＯＦＦに拘らず、常時、バックアップＲＡＭ５４にバックアップ用の電源を供給する。
【００６０】
また、Ｉ／Ｏインターフェイス５７の入力ポートには、アイドルスイッチ２２ｂ、ノックセンサ２５、クランク角センサ３０、気筒判別センサ３２、転舵角が設定値より大のときにＯＮするパワステスイッチ（パワーステアリング転舵スイッチ）３３、車速を検出するための車速センサ３４等が接続され、更に、Ａ／Ｄ変換器６０を介して、スロットル開度センサ２２ａ、吸入空気量センサ２１、吸気管圧力センサ２４、吸気温センサ２３、冷却水温センサ２７、Ｏ2センサ２８等が接続されると共にバッテリ電圧ＶBが入力されてモニタされる。また、Ｉ／Ｏインターフェイス５７の出力ポートには、ＩＳＣ弁１０、インジェクタ１１、ステップモータ式ＥＧＲ弁２０、電源リレー６１及びエアコンリレー６４の各リレーコイルが駆動回路５９を介して接続されると共に、イグナイタ１４が接続されている。
【００６１】
一方、符号７０は、変速機制御用の電子制御装置７０（ＴＣＵ７０）であり、エンジン制御用のＥＣＵ５０と同様、マイクロコンピュータを中心として構成され、エンジン制御用のＥＣＵ５０にＳＣＩ５５を介して互いにデータ交換可能に接続されている。本形態では、エンジン１の出力軸に連設される変速駆動系として、インペラとタービンとを係合するためのロックアップクラッチ７５を備えたトルクコンバータ７６に、前進・後退の切換や変速切り換えを行うための各種油圧クラッチや各種油圧ブレーキ等からなるクラッチ機構部とプラネタリーギヤ等からなる主変速機構部とを備えた変速機８０が連設されており、この変速機８０に、各機構部へのライン圧やパイロット圧を制御する各種コントロール弁を一体的に形成した油圧制御部８５が連設されている。
【００６２】
ＴＣＵ７０には、ＥＣＵ５０と共用するスロットル開度センサ２２ａ、冷却水温センサ２７、及び車速センサ３４からの各信号が入力されるとともに、タービン回転センサ７１からのタービン回転数信号、ＡＴＦ油温センサ７２からのＡＴＦ油温信号、ブレーキスイッチ７３からのブレーキ信号、インヒビタスイッチ７４からの図示しないセレクト機構部の操作位置を示す信号等が入力される。そして、油圧制御部８５を介して、ロックアップクラッチ７５の締結・スリップ・解放を制御すると共に、変速機８０の変速制御を行う。
【００６３】
エンジン制御用のＥＣＵ５０では、ＲＯＭ５２に記憶されている制御プログラムに従って、Ｉ／Ｏインターフェイス５７を介して入力されるセンサ・スイッチ類からの検出信号、及びバッテリ電圧等をＣＰＵ５１で処理するとともに、ＳＣＩ５５を介して変速機制御用のＴＣＵ７０から変速機のギヤ位置やロックアップクラッチ７５の制御データ等を受信し、これらの受信データ、ＲＡＭ５３に格納される各種データ、及びバックアップＲＡＭ５４に格納されている各種学習値データ、ＲＯＭ５２に記憶されている固定データ等に基づき、燃料噴射量、点火時期、ＩＳＣ弁１０に対する制御駆動信号のデューティ比、ステップモータ式ＥＧＲ弁２０に対する制御駆動信号のステップ数等を演算し、空燃比制御を含む燃料噴射制御、点火時期制御、アイドル回転数制御、ＥＧＲ制御等のエンジン制御を行う。
【００６４】
この場合、ＥＧＲ制御では、失火によるエンジンのトルク変動すなわちサージの度合いに応じてＥＧＲ流量を可変し、サージの許容範囲内で最大限のＥＧＲを可能とする。サージの検出は、エンジンのクランク角速度情報に基づいて算出した指標値（後述するサージレベル指標値ＤＦＩＬＤＭＰ）とサージレベル判定閾値（後述する小サージレベル判定閾値ＳＦＩＬＤＬ、中サージレベル判定閾値ＳＦＩＬＤＭ、大サージレベル判定閾値ＳＦＩＬＤＨ）とを比較することで行ない、サージレベルの変化及びサージレベルに基づいて流量制御弁としてのＥＧＲ弁２０の開度を制御し、運転状態に適合する適正なＥＧＲ流量を得る。
【００６５】
すなわち、ＥＣＵ５０は、本発明に係るサージレベル指標値算出手段、サージレベル判定手段、サージレベルの変化及びサージレベルに基づいて流量制御弁の開度を制御する制御手段としての機能を実現する。以下、ＥＣＵ５０によって実行されるＥＧＲ制御に係る処理について、図６以下に示すフローチャートを用いて説明する。
【００６６】
先ず、イグニッションスイッチ６３がＯＮされ、ＥＣＵ５０に電源が投入されると、システムがイニシャライズされ、バックアップＲＡＭ５４に格納されている各種学習値等のデータを除く、各フラグ、各カウンタ類が初期化される。そして、図示しないスタータスイッチがＯＮされてエンジン１が起動すると、クランク角センサ３０からのクランクパルス入力毎に、図６の気筒判別／エンジン回転数算出ルーチンが実行され、燃料噴射対象気筒及び点火対象気筒の判別、エンジン回転数ＮEの算出が行われる。
【００６７】
この気筒判別／エンジン回転数算出ルーチンでは、エンジン運転に伴いクランクロータ２９が回転してクランク角センサ３０からのクランクパルスが入力されると、先ず、ステップＳ１で、今回入力されたクランクパルスがθ１，θ２，θ３の何れのクランク角に対応する信号かを気筒判別センサ３２からの気筒判別パルスの入力パターンに基づいて識別する。そして、ステップＳ２で、クランクパルスと気筒判別パルスとの入力パターンから燃焼行程気筒、点火対象気筒、及び燃料噴射対象気筒等の気筒判別を行う。
【００６８】
すなわち、図４のタイムチャートに示すように、例えば、前回クランクパルスが入力してから今回クランクパルスが入力されるまでの間に気筒判別パルス入力があれば、今回のクランクパルスはθ１クランクパルスであると識別でき、更に次回入力されるクランクパルスはθ２クランクパルスと識別できる。また、前回と今回とのクランクパルス入力間に気筒判別パルス入力がなく、前々回と前回のクランクパルス入力間に気筒判別パルス入力が有ったときには、今回のクランクパルスはθ２クランクパルスと識別でき、次回入力されるクランクパルスはθ３クランクパルスと識別できる。また、前回と今回との間、及び前々回と前回とのクランクパルス入力間に、何れも気筒判別パルス入力が無いときには、今回入力されたクランクパルスはθ３クランクパルスと識別でき、次回入力されるクランクパルスはθ１クランクパルスと判別できる。
【００６９】
更に、前回と今回とのクランクパルス入力間に気筒判別パルスが３個入力（突起３１ｂに対応するθ５気筒判別パルス）したときには、次の圧縮上死点は＃３気筒であり、現在の燃焼行程気筒は＃１気筒であって、点火対象気筒は＃３気筒、燃料噴射対象気筒は、その２つ後の＃４気筒と判別することができる。また、前回と今回のクランクパルス入力間に気筒判別パルスが２個入力（突起３１ｃに対応するθ６気筒判別パルス）したときには、次の圧縮上死点は＃４気筒であり、現在の燃焼行程気筒は＃２気筒であって、点火対象気筒は＃４気筒、燃料噴射対象気筒は＃３気筒と判別できる。
【００７０】
また、前回と今回のクランクパルス入力間に気筒判別パルスが１個入力（突起３１ａに対応するθ４気筒判別パルス）し、前の圧縮上死点判別が＃４気筒であったときには、次の圧縮上死点は＃１気筒であり、現在の燃焼行程気筒は＃４気筒であって、点火対象気筒は＃１気筒、燃料噴射対象気筒は＃２気筒と判別できる。同様に、前回と今回のクランクパルス入力間に気筒判別パルスが１個入力し、前の圧縮上死点判別が＃３気筒であったときには、次の圧縮上死点は＃２気筒であり、現在の燃焼行程気筒は＃３気筒であって、点火対象気筒は＃２気筒、燃料噴射対象気筒は＃１気筒と判別できる。
【００７１】
その後、ステップＳ２からステップＳ３へ進み、クランクパルス入力間隔計時用タイマによって計時された前回のクランクパルス入力から今回のクランクパルス入力までの時間、すなわち、今回識別したクランクパルスに対応するクランクパルス間角度に対応するクランクパルス入力間隔時間Ｔθを検出する。このクランクパルス入力間隔時間Ｔθは、予めＲＯＭ５２に固定データとして記憶されている既知のクランクパルス間角度だけクランクロータ２９が回転する時間であり、本実施の形態においては、θ３クランクパルスとθ１クランクパルス間の角度９０°ＣＡに対応するクランクパルス入力間隔時間ＴＯ９０、θ１クランクパルスとθ２クランクパルス間の角度３０°ＣＡに対応するクランクパルス入力間隔時間ＴＯ３０、θ２クランクパルスとθ３クランクパルス間の角度６０°ＣＡに対応するクランクパルス入力間隔時間ＴＯ６０がそれぞれ検出され、ＲＡＭ５３の所定アドレスにストアされる。
【００７２】
次にステップＳ４へ進み、ＲＡＭ５３からクランクパルス入力間隔時間ＴＯ９０,ＴＯ６０,ＴＯ３０を読み出すと、各クランクパルス入力間隔時間ＴＯ９０,ＴＯ６０,ＴＯ３０を合計してクランク角１８０°ＣＡ（エンジン半回転）の経過時間を求め、このエンジン半回転の経過時間に基づいて現在のエンジン回転数ＮＥを算出する。そして、算出したエンジン回転数ＮＥをＲＡＭ５３の所定アドレスにストアし、ルーチンを抜ける。
【００７３】
また、システムイニシャライズ後、ＥＧＲ制御に係わる処理として、図７に示すサージレベル検出ルーチン、図２２に示すＥＧＲ制御量算出ルーチン、図４２に示す安定指標パラメータ算出ルーチン、図４９に示すＥＧＲ駆動ルーチンが所定時間毎に実行される。本形態においては、サージレベル検出ルーチン、ＥＧＲ制御量算出ルーチン、安定指標パラメータ算出ルーチンが１０ｍｓｅｃ毎に実行され、ＥＧＲ駆動ルーチンは４ｍｓｅｃ毎に実行される。
【００７４】
まず、図７のサージレベル検出ルーチンについて説明する。このルーチンでは、最初のステップＳ１０で、図８に示す指標値演算サブルーチンを実行し、各サンプリングタイムでのエンジン回転数データから所定周波数帯域の成分を回転変動を表わす指標値ＦＩＬＤＭＰとして算出する。次いで、ステップＳ１１で図１０及び図１１に示すサージレベル指標値算出サブルーチンを実行し、時系列的にサンプリングした指標値ＦＩＬＤＭＰの時間波形をフィルタ処理した後、時間微分してサージレベル指標値ＤＦＩＬＤＭＰを算出する。サージレベル指標値ＤＦＩＬＤＭＰは、サージの大きさを評価するために使用されるパラメータであり、後述するように、サージレベル指標値ＤＦＩＬＤＭＰに基づいて検出されるサージが所定レベル以上で増加方向に変化すると、サージを解消すべくＥＧＲ流量が減少させられる。
【００７５】
その後、ステップＳ１２へ進み、図１５〜図１７に示すサージレベル判定閾値設定サブルーチンを実行し、サージレベルを判定するためのサージレベル判定閾値を変速機のギヤ位置及びロックアップクラッチ７５の制御状態に応じて設定する。そして、ステップＳ１３で図２１に示すサージレベル検出サブルーチンを実行し、サージレベル指標値ＤＦＩＬＤＭＰとサージレベル判定閾値とを比較してサージレベルを検出する。
【００７６】
次に、以上のサージレベル検出ルーチンにおける各サブルーチンについて説明する。先ず、図８の指標値演算サブルーチンでは、ステップＳ２０でクランク角１８０°ＣＡ（エンジン半回転）に相当する設定値ＤＣＣを、クランクパルス入力間隔時間ＴＯ９０,ＴＯ６０,ＴＯ３０の合計値で除算してサージレベル指標値計算用のエンジン回転数データＮＥＬＥを求め（ＮＥＬＥ←ＤＣＣ／(ＴＯ９０＋ＴＯ６０＋ＴＯ３０)）、ステップＳ２１〜Ｓ２４で、このエンジン回転数データＮＥＬＥにＩＩＲフィルタ（Infinite Impulse Response Filter）を適用して４段のデジタルフィルタ処理を行い、所定周波数帯域の成分を抽出する。
【００７７】
すなわち、図９に示すように、ステップＳ２１で、ＩＩＲフィルタにハイパスフィルタを実現するフィルタ係数を与えてエンジン回転数データＮＥＬＥにデジタルフィルタ処理Iを実施し、低周波成分を除去したデータＩＩＲＦ１を取り出す（ＩＩＲＦ１←ＦＩＬＴＥＲI（ＮＥＬＥ））。そして、このデータＩＩＲＦ１に対し、ステップＳ２２で、ＩＩＲフィルタにローパスフィルタを実現するフィルタ係数を与えてデジタルフィルタ処理IIを実施し、高周波成分を除去したデータＩＩＲＦ２を取り出す（ＩＩＲＦ２←ＦＩＬＴＥＲII（ＩＩＲＦ１））。
【００７８】
次いで、ステップＳ２３でハイパスのデジタルフィルタ処理IIIを実施し、低周波側の波形の立上がりをシャープに整形したデータＩＩＲＦ３を取得し（ＩＩＲＦ３←ＦＩＬＴＥＲIII（ＩＩＲＦ２））、ステップＳ２４でローパスのデジタルフィルタ処理IVを実施し、高周波側の波形の立ち上がりをシャープに整形したデータＩＩＲＦ４を取得する（ＩＩＲＦ４←ＦＩＬＴＥＲIV（ＩＩＲＦ３））。そして、エンジン回転数の上昇及び低下の双方を評価するため、ステップＳ２５でデータＩＩＲＦ４の絶対値 ＩＩＲＦ４ を回転変動を表わす指標値ＦＩＬＤＭＰとして（ＦＩＬＤＭＰ← ＩＩＲＦ４ ）ルーチンを抜ける。
【００７９】
本形態では、エンジン半回転時間の変動のうち、運転者が最もサージ（エンジン回転変動）を感じる３Ｈｚ〜１２Ｈｚの成分を取り出し、この成分の絶対値をエンジンの回転変動を表わす指標値ＦＩＬＤＭＰとする。そして、この指標値ＦＩＬＤＭＰを以下に説明する図１０及び図１１のサージレベル指標値算出サブルーチンで処理してサージレベル指標値ＤＦＩＬＤＭＰを算出する。
【００８０】
一般に、エンジンで発生するトルク変動による車体共振のレベルは、車両の駆動系やエンジンマウント等の状態によって異なる。従って、従来のように、所定周波数帯域のエンジン回転数データを実効値に変換しただけの指標値やトルク変動或いは回転変動を平均化処理しただけの指標値を用いてサージを検出すると、車両の個体差の影響を受けてサージを適正に検出できない虞がある。このため、サージを検出するためのサージレベル指標値ＤＦＩＬＤＭＰには、振動レベルを示す指標値を時間微分した値を採用し、これにより、車両の個体差の影響を排除して適正にサージを検出することができる。
【００８１】
この場合、回転変動を表わす指標値ＦＩＬＤＭＰを、直接、時間微分してサージレベル指標値ｄＦＩＬＤＭＰ／ｄｔを算出すると、連続的に失火が発生するような場合、１回目の失火は、指標値ＦＩＬＤＭＰの変化が大きいため微分波形に明確な変化が現れて失火を確実に検出できるものの、２回目の失火の発生時点では、１回目の失火の発生時点から２回目の失火の発生時点までの指標値ＦＩＬＤＭＰの相対的な変化量すなわち微分値が小さくなってしまい、ノイズと同様のレベルとなって２回目の失火を捕捉できない虞がある。
【００８２】
従って、サージレベル指標値算出サブルーチンでは、指標値ＦＩＬＤＭＰに対し、図１２に例示するように、指標値ＦＩＬＤＭＰの時間波形の減衰側の速度を可変修正し、波形の上側をなぞるようなフィルタ処理を行い、このフィルタ処理後の指標値（指標最大値）ＦＩＬＤＭＰＭＡＸを時間微分してサージレベル指標値ＤＦＩＬＤＭＰを算出する。
【００８３】
具体的には、先ず、ステップＳ３０で、前回の指標最大値ＦＩＬＤＭＰＭＡＸに基づいて指標最大値減衰量テーブルＴＦＩＬＤＭＰＤを参照し、補間計算によって減衰量ＦＩＬＤＭＰＤＬＭを算出する。指標最大値減衰量テーブルＴＦＩＬＤＭＰＤは、図１３に示すように、指標最大値ＦＩＬＤＭＰＭＡＸが小さい程、減衰量ＦＩＬＤＭＰＤＬＭを小さくして減衰速度を低下させ、指標最大値ＦＩＬＤＭＰＭＡＸが大きい程、減衰量ＦＩＬＤＭＰＤＬＭを大きくして減衰速度を上昇させる特性に設定されている。
【００８４】
次いで、ステップＳ３１へ進み、指標最大値ＦＩＬＤＭＰＭＡＸから減衰量ＦＩＬＤＭＰＤＬＭを減算して減衰値ＦＩＬＤＭＰＬを求めると（ＦＩＬＤＭＰＬ←ＦＩＬＤＭＰＭＡＸ−ＦＩＬＤＭＰＤＬＭ）、ステップＳ３２で元データである指標値ＦＩＬＤＭＰと減衰値ＦＩＬＤＭＰＬとを比較する。そして、ＦＩＬＤＭＰ≧ＦＩＬＤＭＰＬのとき、ステップＳ３３で指標値ＦＩＬＤＭＰを指標最大値ＦＩＬＤＭＰＭＡＸとし（ＦＩＬＤＭＰＭＡＸ←ＦＩＬＤＭＰ）、ＦＩＬＤＭＰ＜ＦＩＬＤＭＰＬのとき、ステップＳ３４で減衰値ＦＩＬＤＭＰＬを指標最大値ＦＩＬＤＭＰＭＡＸとする（ＦＩＬＤＭＰＭＡＸ←ＦＩＬＤＭＰＬ）。
【００８５】
すなわち、指標最大値ＦＩＬＤＭＰＭＡＸが小さい程、減衰量ＦＩＬＤＭＰＤＬＭを小さくし、指標最大値ＦＩＬＤＭＰＭＡＸが大きい程、減衰量ＦＩＬＤＭＰＤＬＭを大きくした上で、指標値ＦＩＬＤＭＰと減衰値ＦＩＬＤＭＰＬとのうち、大きい方を指標最大値ＦＩＬＤＭＰＭＡＸとする。これにより、指標値ＦＩＬＤＭＰの波形における中レベルから大レベルのピーク波形の上昇側は略そのままで下降側の減衰速度を小さくし、小レベルのノイズを含んだ細かな波形変動を平滑化する。
【００８６】
ステップＳ３３或いはステップＳ３４で指標最大値ＦＩＬＤＭＰＭＡＸを求めた後は、ステップＳ３５へ進んで指標最大値ＦＩＬＤＭＰＭＡＸが上限値ＫＦＩＬＤＬＭＴＨ（例えば、４５００ｒｐｍ相当）に達したか否かを調べる。その結果、ＦＩＬＤＭＰＭＡＸ≦ＫＦＩＬＤＬＭＴＨのときには、ステップＳ３５からそのままステップＳ３７へ進み、ＦＩＬＤＭＰＭＡＸ＞ＫＦＩＬＤＬＭＴＨのとき、ステップＳ３６で指標最大値ＦＩＬＤＭＰＭＡＸを上限値ＫＦＩＬＤＬＭＴＨに制限し（ＦＩＬＤＭＰＭＡＸ←ＫＦＩＬＤＬＭＴＨ）、ステップＳ３７へ進む。そして、ステップＳ３７〜Ｓ４２で指標最大値ＦＩＬＤＭＰＭＡＸに対し、図１４に示すようなヒステリシス付きでの上限への張り付き判定を行う。
【００８７】
このため、ステップＳ３７では、指標最大値上限張り付き判定フラグＦＦＩＬＤＭＡＸを参照する。この指標最大値上限張り付き判定フラグＦＦＩＬＤＭＡＸは、指標最大値ＦＩＬＤＭＰＭＡＸが上限に張り付いていると判定されたときに１にセットされるものであり、ＥＧＲ制御において、後述するＥＧＲリミットガード目標値ＦＬＥＧＤの更新条件の一つとして参照される。
【００８８】
そして、ＦＦＩＬＤＭＡＸ＝０のときには、ステップＳ３８で上限張り付き判定値ＫＦＩＬＤＬＭＴにヒステリシス上側の設定値として前述の上限値ＫＦＩＬＤＬＭＴＨをセット（ＫＦＩＬＤＬＭＴ←ＫＦＩＬＤＬＭＴＨ）してステップＳ４０へ進む。また、ＦＦＩＬＤＭＡＸ＝１のときには、ステップＳ３９で上限張り付き判定値ＫＦＩＬＤＬＭＴにヒステリシス下側の設定値ＫＦＩＬＤＬＭＴＬ（例えば、４０００ｒｐｍ相当）をセット（ＫＦＩＬＤＬＭＴ←ＫＦＩＬＤＬＭＴＬ）してステップＳ４０へ進む。
【００８９】
ステップＳ４０では、指標最大値ＦＩＬＤＭＰＭＡＸと上限張り付き判定値ＫＦＩＬＤＬＭＴとを比較する。そして、ＦＩＬＤＭＰＭＡＸ＜ＫＦＩＬＤＬＭＴのとき、上限張り付き条件不成立と判定してステップＳ４１で指標最大値上限張り付き判定フラグＦＦＩＬＤＭＡＸを０にクリアし（ＦＦＩＬＤＭＡＸ←０）、ステップＳ４３へ進む。また、ＦＩＬＤＭＰＭＡＸ≧ＫＦＩＬＤＬＭＴのときには、上限張り付き条件成立と判定してステップＳ４２で指標最大値上限張り付き判定フラグＦＦＩＬＤＭＡＸを１にセットし（ＦＦＩＬＤＭＡＸ←１）、ステップＳ４３へ進む。
【００９０】
ステップＳ４３以降は、指標最大値ＦＩＬＤＭＰＭＡＸを時間微分してサージレベル指標値ＤＦＩＬＤＭＰを求める処理であり、実際のコンピュータ処理では時間微分を差分として処理し、設定時間毎の指標最大値ＦＩＬＤＭＰＭＡＸの変化量をサージレベル指標値ＤＦＩＬＤＭＰとして求める。すなわち、ステップＳ４３で、時間微分のためのタイマＴＭＦＩＬＤが設定値ＴＦＩＬＤ（例えば、ＴＦＩＬＤ＝３；３０ｍｓｅｃ相当値）に達したか否かを調べ、ＴＭＦＩＬＤ＜ＴＦＩＬＤのときには、ステップＳ４４で、タイマＴＭＦＩＬＤをカウントアップしてステップＳ５３へ進み、ＴＭＦＩＬＤ≧ＴＦＩＬＤのとき、ステップＳ４５でタイマＴＭＦＩＬＤを０にクリア（ＴＭＦＩＬＤ←０）した後、ステップＳ４６で指標最大値ＦＩＬＤＭＰＭＡＸのサンプル値ＦＩＬＤＭＰＭ３０を取得する（ＦＩＬＤＭＰＭ３０←ＦＩＬＤＭＰＭＡＸ）。
【００９１】
そして、ステップＳ４７〜Ｓ５２で、それぞれ、レジスタ等に時系列的に格納されている設定時間毎（本形態では３０ｍｓｅｃ毎）のサンプル値ＦＩＬＤＭＰＭ３０n-19,ＦＩＬＤＭＰＭ３０n-18,ＦＩＬＤＭＰＭ３０n-17,…,ＦＩＬＤＭＰＭ３０n-1,ＦＩＬＤＭＰＭ３０n,ＦＩＬＤＭＰＭ３０を順次シフトさせ（ＦＩＬＤＭＰＭ３０n-19←ＦＩＬＤＭＰＭ３０n-18、ＦＩＬＤＭＰＭ３０n-18←ＦＩＬＤＭＰＭ３０n-17、…、ＦＩＬＤＭＰＭ３０n-1←ＦＩＬＤＭＰＭ３０n、ＦＩＬＤＭＰＭ３０n←ＦＩＬＤＭＰＭ３０）、ステップＳ５３へ進む。
【００９２】
ステップＳ５３では、最新のサンプル値ＦＩＬＤＭＰＭ３０nから１９サンプル前の値ＦＩＬＤＭＰＭ３０n-19を減算した差分値をサージレベル指標値ＤＦＩＬＤＭＰとし（ＤＦＩＬＤＭＰ←ＦＩＬＤＭＰＭ３０n−ＦＩＬＤＭＰＭ３０n-19）、ルーチンを抜ける。本形態では、指標最大値ＦＩＬＤＭＰＭＡＸのサンプル値ＦＩＬＤＭＰＭ３０の６００ｍｓｅｃ毎の変化速度すなわち時間微分値を、サージレベル指標値ＤＦＩＬＤＭＰとして捉える。
【００９３】
次に、図１５〜図１７のサージレベル判定閾値設定サブルーチンについて説明する。このサージレベル判定閾値設定サブルーチンでは、サージレベル指標値ＤＦＩＬＤＭＰを用いて検出するサージレベルを、０（サージ無し），１（サージ小），２（サージ中），３（サージ大）の４段階に評価するため、小サージレベル判定閾値ＳＦＩＬＤＬ、中サージレベル判定閾値ＳＦＩＬＤＭ、大サージレベル判定閾値ＳＦＩＬＤＨの３つの判定閾値を設定する。
【００９４】
これらの判定閾値ＳＦＩＬＤＬ，ＳＦＩＬＤＭ，ＳＦＩＬＤＨは、変速機８０のギヤ位置ＧＥＡＲがＧＥＡＲ＝３（３速）或いはＧＥＡＲ＝４（４速）の場合、ロックアップクラッチ７５の制御状態に応じ、車速ＶＳＰをパラメータとしてギヤ位置及びロックアップ状態毎のテーブル参照によって設定され、ロックアップクラッチ７５が解放のＧＥＡＲ＝５（５速）とＧＥＡＲ＝２（２速）とＧＥＡＲ＝１（１速）との場合、車速ＶＳＰをパラメータとしてギヤ位置毎のテーブル参照によって設定される。
【００９５】
すなわち、サージレベル指標値ＤＦＩＬＤＭＰは、車速ＶＳＰ、変速機８０のギヤ位置ＧＥＡＲに応じて変化するため、ギヤ位置ＧＥＡＲ、ロックアップクラッチ制御状態毎に、車速ＶＳＰをパラメータとして予めシミュレーション或いは実験等によりサージレベルを的確に判定できる適正な判定閾値を求めておき、図１８に示すような小サージレベル判定閾値ＳＦＩＬＤＬの各テーブルＴＳＦＩＬＤＬ５，ＴＳＦＩＬＤＬ４Ｒ，ＴＳＦＩＬＤＬ４Ｓ，ＴＳＦＩＬＤＬ４Ｆ，ＴＳＦＩＬＤＬ３Ｒ，ＴＳＦＩＬＤＬ３Ｓ，ＴＳＦＩＬＤＬ３Ｆ，ＴＳＦＩＬＤＬ２，ＴＳＦＩＬＤＬ１、図１９に示すような中サージレベル判定閾値ＳＦＩＬＤＭの各テーブルＴＳＦＩＬＤＭ５，ＴＳＦＩＬＤＭ４Ｒ，ＴＳＦＩＬＤＭ４Ｓ，ＴＳＦＩＬＤＭ４Ｆ，ＴＳＦＩＬＤＭ３Ｒ，ＴＳＦＩＬＤＭ３Ｓ，ＴＳＦＩＬＤＭ３Ｆ，ＴＳＦＩＬＤＭ２，ＴＳＦＩＬＤＭ１、図２０に示すような大サージレベル判定閾値ＳＦＩＬＤＨの各テーブルＴＳＦＩＬＤＨ５，ＴＳＦＩＬＤＨ４Ｒ，ＴＳＦＩＬＤＨ４Ｓ，ＴＳＦＩＬＤＨ４Ｆ，ＴＳＦＩＬＤＨ３Ｒ，ＴＳＦＩＬＤＨ３Ｓ，ＴＳＦＩＬＤＨ３Ｆ，ＴＳＦＩＬＤＨ２，ＴＳＦＩＬＤＨ１に格納しておく。
【００９６】
この場合、ロックアップ状態ＡＴＲＯＣＫがＯＮでロックアップクラッチ７５が締結されている場合には、エンジン１と変速機８０との直結による抵抗が増加し、サージレベル指標値ＤＦＩＬＤＭＰが相対的に小さくなる。従って、これに対応してサージレベルを検出するための各判定閾値ＳＦＩＬＤＬ，ＳＦＩＬＤＭ，ＳＦＩＬＤＨを小さい値とし、的確にサージを検出する。また、ロックアップ状態ＡＴＲＯＣＫがＯＦＦでロックアップクラッチ７５が開放の場合には、エンジン１から変速機８０の負荷が開放されることによってエンジン１に対する抵抗が減少し、サージレベル指標値ＤＦＩＬＤＭＰがロックアップクラッチ締結時に比較して相対的に大きくなる。従って、このときには、サージレベルを検出するための各判定閾値ＳＦＩＬＤＬ，ＳＦＩＬＤＭ，ＳＦＩＬＤＨを大きい値とし、ロックアップクラッチ締結時と同様、的確にサージを検出する。更に、ロックアップ状態ＡＴＲＯＣＫがＳＬＩＰでロックアップクラッチ７５のスリップ制御中の場合には、各判定閾値ＳＦＩＬＤＬ，ＳＦＩＬＤＭ，ＳＦＩＬＤＨを、ロックアップクラッチ締結時とロックアップクラッチ開放時との中間の値とする。
【００９７】
具体的には、先ず、ステップＳ６０でギヤ位置ＧＥＡＲが３か否かを調べ、ＧＥＡＲ＝３でギヤ位置が３速のとき、ステップＳ６１へ進んでロックアップ状態ＡＴＲＯＣＫがＳＬＩＰか否かを調べる。そして、ロックアップ状態ＡＴＲＯＣＫがＳＬＩＰでロックアップクラッチスリップ制御中のときには、ステップＳ６２，Ｓ６３，Ｓ６４で、車速ＶＳＰに基づいて、それぞれテーブルＴＳＦＩＬＤＬ３Ｓ,ＴＳＦＩＬＤＭ３Ｓ,ＴＳＦＩＬＤＨ３Ｓを参照し、小サージレベル判定閾値ＳＦＩＬＤＬ、中サージレベル判定閾値ＳＦＩＬＤＭ、大サージレベル判定閾値ＳＦＩＬＤＨを設定してルーチンを抜ける。
【００９８】
また、ステップＳ６１でロックアップクラッチスリップ制御中でないときには、ステップＳ６５でロックアップ状態ＡＴＲＯＣＫがＯＦＦか否かを調べる。そして、ロックアップ状態ＡＴＲＯＣＫがＯＦＦでロックアップクラッチ解放のとき、ステップＳ６６，Ｓ６７，Ｓ６８で、車速ＶＳＰに基づいて、それぞれテーブルＴＳＦＩＬＤＬ３Ｆ,ＴＳＦＩＬＤＭ３Ｆ,ＴＳＦＩＬＤＨ３Ｆを参照し、小サージレベル判定閾値ＳＦＩＬＤＬ、中サージレベル判定閾値ＳＦＩＬＤＭ、大サージレベル判定閾値ＳＦＩＬＤＨを設定してルーチンを抜ける。
【００９９】
更に、ステップＳ６５でロックアップ状態ＡＴＲＯＣＫがＯＦＦでないとき、すなわち、ロックアップ状態ＡＴＲＯＣＫがＳＬＩＰでもＯＦＦでもなく、ロックアップクラッチ締結のＯＮのときには、ステップＳ６９，Ｓ７０，Ｓ７１で、車速ＶＳＰに基づいて、それぞれテーブルＴＳＦＩＬＤＬ３Ｒ,ＴＳＦＩＬＤＭ３Ｒ,ＴＳＦＩＬＤＨ３Ｒを参照し、小サージレベル判定閾値ＳＦＩＬＤＬ、中サージレベル判定閾値ＳＦＩＬＤＭ、大サージレベル判定閾値ＳＦＩＬＤＨを設定してルーチンを抜ける。
【０１００】
一方、ステップＳ６０でＧＥＡＲ≠３のときには、ステップＳ６０からステップＳ７２へ進み、ＧＥＡＲ＝５か否かを調べる。そして、ＧＥＡＲ＝５でギヤ位置が５速のとき、ステップＳ７３，Ｓ７４，Ｓ７５で、車速ＶＳＰに基づいて、それぞれテーブルＴＳＦＩＬＤＬ５,ＴＳＦＩＬＤＭ５,ＴＳＦＩＬＤＨ５を参照し、小サージレベル判定閾値ＳＦＩＬＤＬ、中サージレベル判定閾値ＳＦＩＬＤＭ、大サージレベル判定閾値ＳＦＩＬＤＨを設定してルーチンを抜ける。
【０１０１】
また、ステップＳ７２でＧＥＡＲ≠５のときには、ステップＳ７２からステップＳ７６へ進んでＧＥＡＲ＝４か否かを調べる。そして、ＧＥＡＲ＝４でギヤ位置が４速のとき、ステップＳ７７でロックアップ状態ＡＴＲＯＣＫがＯＮか否かを調べ、ロックアップ状態ＡＴＲＯＣＫがＯＮでロックアップクラッチ７５が締結されているときには、ステップＳ７８，Ｓ７９，Ｓ８０で、車速ＶＳＰに基づいて、それぞれテーブルＴＳＦＩＬＤＬ４Ｒ,ＴＳＦＩＬＤＭ４Ｒ,ＴＳＦＩＬＤＨ４Ｒを参照し、小サージレベル判定閾値ＳＦＩＬＤＬ、中サージレベル判定閾値ＳＦＩＬＤＭ、大サージレベル判定閾値ＳＦＩＬＤＨを設定してルーチンを抜ける。
【０１０２】
また、ステップＳ７７でロックアップクラッチ７５が締結されていないときには、ステップＳ８１でロックアップ状態ＡＴＲＯＣＫがＳＬＩＰか否かを調べる。そして、ロックアップ状態ＡＴＲＯＣＫがＳＬＩＰでロックアップクラッチスリップ制御中のとき、ステップＳ８２，Ｓ８３，Ｓ８４で、車速ＶＳＰに基づいて、それぞれテーブルＴＳＦＩＬＤＬ４Ｓ,ＴＳＦＩＬＤＭ４Ｓ,ＴＳＦＩＬＤＨ４Ｓを参照し、小サージレベル判定閾値ＳＦＩＬＤＬ、中サージレベル判定閾値ＳＦＩＬＤＭ、大サージレベル判定閾値ＳＦＩＬＤＨを設定してルーチンを抜ける。
【０１０３】
更に、ステップＳ８１でロックアップ状態ＡＴＲＯＣＫがＳＬＩＰでないとき、すなわち、ロックアップ状態ＡＴＲＯＣＫがＯＮでもＳＬＩＰでもなく、ロックアップ状態ＡＴＲＯＣＫがＯＦＦであり、ロックアップクラッチ７５が解放されているときには、ステップＳ８５，Ｓ８６，Ｓ８７で、車速ＶＳＰに基づいて、それぞれテーブルＴＳＦＩＬＤＬ４Ｆ,ＴＳＦＩＬＤＭ４Ｆ,ＴＳＦＩＬＤＨ４Ｆを参照し、小サージレベル判定閾値ＳＦＩＬＤＬ、中サージレベル判定閾値ＳＦＩＬＤＭ、大サージレベル判定閾値ＳＦＩＬＤＨを設定してルーチンを抜ける。
【０１０４】
一方、ステップＳ７６でＧＥＡＲ≠４のときには、ステップＳ８８でＧＥＡＲ＝２か否かを調べる。そして、ＧＥＡＲ=２でギヤ位置が２速のとき、ステップＳ８９，Ｓ９０，Ｓ９１で、車速ＶＳＰに基づいて、それぞれテーブルＴＳＦＩＬＤＬ２,ＴＳＦＩＬＤＭ２,ＴＳＦＩＬＤＨ２を参照し、小サージレベル判定閾値ＳＦＩＬＤＬ、中サージレベル判定閾値ＳＦＩＬＤＭ、大サージレベル判定閾値ＳＦＩＬＤＨを設定してルーチンを抜ける。
【０１０５】
また、ステップＳ８８でＧＥＡＲ≠２のときには、ステップＳ９２で、ＧＥＡＲ＝１か否かを調べる。そして、ＧＥＡＲ≠1のとき、すなわち、ニュートラル或いはバック或いはパーキングの位置のときには、そのままルーチンを抜け、ＧＥＡＲ=１でギヤ位置が１速のとき、ステップＳ９３，Ｓ９４，Ｓ９５で、車速ＶＳＰに基づいて、それぞれテーブルＴＳＦＩＬＤＬ１,ＴＳＦＩＬＤＭ１,ＴＳＦＩＬＤＨ１を参照し、小サージレベル判定閾値ＳＦＩＬＤＬ、中サージレベル判定閾値ＳＦＩＬＤＭ、大サージレベル判定閾値ＳＦＩＬＤＨを設定してルーチンを抜ける。
【０１０６】
次に、以上のサージレベル判定閾値ＳＦＩＬＤＬ，ＳＦＩＬＤＭ，ＳＦＩＬＤＨを用いてサージレベルを検出する図２１のサージレベル検出サブルーチンについて説明する。このサージレベル検出サブルーチンでは、先ず、ステップＳ１００〜Ｓ１０４でサージレベルの初期化処理を行う。
【０１０７】
すなわち、ステップＳ１００で、後述するＥＧＲリミットガード目標値更新条件が成立したとき１にセットされるＥＧＲリミットガード目標値更新条件成立フラグＦＦＬＥＧＤが０→１に切り換わったか否かを調べ、０→１に切り換わってＥＧＲリミットガード目標値ＦＬＥＧＤの更新条件が不成立から成立に変化したときには、ステップＳ１０１でサージレベルを３（サージ大）とし、ステップＳ１０４へ進んでサージレベル初期化フラグＦＳＵＲＩＮＩを１にセット（ＦＳＵＲＩＮＩ←１）してルーチンを抜ける。このサージレベル初期化フラグＦＳＵＲＩＮＩは、後述するＥＧＲリミットガード目標値ＦＬＥＧＤの更新条件として参照される。
【０１０８】
一方、ＥＧＲリミットガード目標値更新条件成立フラグＦＦＬＥＧＤが０→１に切り換わっていないときには、ステップＳ１０２でサージレベル指標値ＤＦＩＬＤＭＰが０以下（所定値以下でも良い）になったか否かを調べる。そして、ＤＦＩＬＤＭＰ≦０のとき、ステップＳ１０３でサージレベルを０（サージ無し）とし、前述のステップＳ１０４でサージレベル初期化フラグＦＳＵＲＩＮＩを１にセットしてルーチンを抜け、ＤＦＩＬＤＭＰ＞０であるときには、ステップＳ１０５以降へ進んで、前回のサージレベルよりも大きい方向にのみサージレベルを更新する。
【０１０９】
このため、ステップＳ１０５では、サージレベル指標値ＤＦＩＬＤＭＰを大サージレベル判定閾値ＳＦＩＬＤＨと比較する。そして、ＤＦＩＬＤＭＰ≧ＳＦＩＬＤＨのとき、ステップＳ１０６で今回のサージレベルを３（サージ大）と判定し、ステップＳ１１３でサージレベル初期化フラグＦＳＵＲＩＮＩを０にクリア（ＦＳＵＲＩＮＩ←０）してルーチンを抜け、ＤＦＩＬＤＭＰ＜ＳＦＩＬＤＨのときには、ステップＳ１０７へ進む。
【０１１０】
ステップＳ１０７では、サージレベル指標値ＤＦＩＬＤＭＰが大サージレベル判定閾値ＳＦＩＬＤＨと中サージレベル判定閾値ＳＦＩＬＤＭとの間にあるか否かを調べ、ＳＦＩＬＤＨ＞ＤＦＩＬＤＭＰ≧ＳＦＩＬＤＭのとき、更に、ステップＳ１０８で前回のサージレベルが２（サージ中）より小さいか否かを調べる。そして、前回のサージレベルが２以上のときには、サージレベルを更新せずにステップＳ１０８から前述のステップＳ１１３を経てルーチンを抜け、前回のサージレベルが２より小さいとき、ステップＳ１０８からステップＳ１０９へ進んで今回のサージレベルを２と判定し、前述のステップＳ１１３を経てルーチンを抜ける。
【０１１１】
また、ステップＳ１０７においてＤＦＩＬＤＭＰ＜ＳＦＩＬＤＭのときには、ステップＳ１１０へ進んでサージレベル指標値ＤＦＩＬＤＭＰが中サージレベル判定閾値ＳＦＩＬＤＭと小サージレベル判定閾値ＳＦＩＬＤＬとの間にあるか否かを調べる。そして、ＤＦＩＬＤＭＰ＜ＳＦＩＬＤＬのときには、ステップＳ１１０からステップＳ１１３を経てルーチンを抜け、ＳＦＩＬＤＭ＞ＤＦＩＬＤＭＰ≧ＳＦＩＬＤＬのとき、ステップＳ１１１で前回のサージレベルが０であるか否かを調べる。その結果、前回のサージレベルが０でないときには、サージレベルを更新せずにステップＳ１１１からステップＳ１１３を経てルーチンを抜け、前回のサージレベルが０のとき、ステップＳ１１１からステップＳ１１２へ進んで今回のサージレベルを１（サージ小）と判定し、前述のステップＳ１１３を経てルーチンを抜ける。
【０１１２】
すなわち、失火発生時には、サージレベル指標値ＤＦＩＬＤＭＰの挙動が安定していないため、サージレベル指標値ＤＦＩＬＤＭＰと判定閾値とを比較してサージレベルを決定する際、ノイズ等の影響によってサージレベル指標値ＤＦＩＬＤＭＰがばたついて短時間に判定閾値を複数回上下する場合があり、サージレベル指標値ＤＦＩＬＤＭＰと判定閾値との単純な大小関係だけでサージレベルを決定すると誤判定となる可能性がある。このため、サージレベル指標値ＤＦＩＬＤＭＰがＤＦＩＬＤＭＰ≦０となった場合にサージレベルを０に初期化し、サージレベル指標値ＤＦＩＬＤＭＰが判定閾値を下から上に横切った場合にのみサージレベルを判定し、この判定結果をＤＦＩＬＤＭＰ≦０となるまで保持する（サージレベルを大方向にのみ更新する）。
【０１１３】
次に、サージ検出結果を用いたＥＧＲ制御について説明する。図２２のＥＧＲ制御量算出ルーチンでは、先ず、ステップＳ２００で、図２３〜図２９のＥＧＲ実施可能判定サブルーチンを実行して現在の運転領域がＥＧＲ実施可能領域であるか否かを調べる。次に、ステップＳ２０１へ進み、図３１〜図３６のＥＧＲリミットガード目標値更新条件判定サブルーチンを実行してＥＧＲリミットガード目標値ＦＬＥＧＤの更新条件が成立するか否かを調べる。ＥＧＲリミットガード目標値ＦＬＥＧＤは、ＥＧＲ量を増加させる際のガード値であり、サージの無い安定状態では徐々に大きくされて許容範囲以内の大量ＥＧＲを可能とし、サージ発生時には急速に小さくされてＥＧＲ量を急速に減量させ、迅速にサージを解消するよう作用する。
【０１１４】
次いで、ステップＳ２０２へ進んで図３８〜図４１のＥＧＲリミットガード目標値更新サブルーチンを実行し、更新条件が成立する場合、ＥＧＲリミットガード目標値ＦＬＥＧＤを更新する。更に、ステップＳ２０３で、図４４〜図４５のＥＧＲリミット値設定サブルーチンを実行し、ＥＧＲリミットガード目標値ＦＬＥＧＤを単位換算した換算値に、ＥＧＲ実施状態を示すためのＥＧＲ許可係数ＰＦＬＥＧＤを乗算してＥＧＲリミット値ＦＬＥＧＤＢを設定する。ＥＧＲ許可係数ＰＦＬＥＧＤは、後述するように、ＥＧＲリミット値設定サブルーチンにおいて、ＥＧＲ禁止の状態でＰＦＬＥＧＤ＝０、ＥＧＲ許可の状態で補正無しに対応するＰＦＬＥＧＤ＝１．０に固定され、ＥＧＲ禁止←→ＥＧＲ許可の過渡状態においては０≦ＰＦＬＥＧＤ≦１．０の間で値が増減される。
【０１１５】
その後、ステップＳ２０３からステップＳ２０４へ進み、図４７のＥＧＲ流量算出サブルーチンを実行し、ＥＧＲ流量を算出する。ＥＧＲ流量は、後述するように、運転領域に応じた基本ＥＧＲ流量にＥＧＲリミット値ＦＬＥＧＤＢを乗算して算出される。そして、ステップＳ２０５で図４８のモータ目標位置算出サブルーチンを実行してＥＧＲ流量をステップモータ式ＥＧＲ弁２０のステップ数に変換し、本ＥＧＲ制御量算出ルーチンを抜ける。
【０１１６】
次に、ＥＧＲ制御量算出ルーチンにおける各サブルーチンについて説明する。先ず、図２３〜図２９のＥＧＲ実施可能判定サブルーチンでは、以下の条件を全て満足するとき、ＥＧＲ実施可能と判定する。
（ａ）エンジン極低温を除く状態である条件（水温条件）
（ｂ）通常走行状態である条件（車速条件）
（ｃ）エンジン回転数が低中回転数域である条件（エンジン回転数条件）
（ｄ）ＥＧＲガスを吸気系へ吸引可能な領域である条件（吸気管圧力条件）
（ｅ）低中負荷域である条件（スロットル開度条件）
（ｆ）極低温及び高温を除く状態である条件（吸気温条件）
（ｈ）アイドルスイッチ２２ｂがＯＦＦである条件
（ｉ）ＥＧＲ弁２０が正常である条件
（ｊ）エンジン始動後設定時間以上経過している条件
（ｋ）ＥＧＲリミットガード目標値ＦＬＥＧＤが下限値に張り付いていない条件
【０１１７】
具体的には、先ず、ステップＳ２１０〜Ｓ２１５で（ａ）の条件すなわち冷却水温が制御ハンチング防止のためのヒステリシスを伴った設定範囲内にあり、エンジン極低温を除く状態か否かを判定する。この水温条件の判定では、条件成立を判定するための水温判定フラグＦＴＷ（システムイニシャライズ時に０に初期化される）を用い、冷却水温が設定範囲内にある条件を満足するとき、ＦＴＷ＝１とする。
【０１１８】
このため、ステップＳ２１０では水温判定フラグＦＴＷを参照し、ＦＴＷ＝０のとき、ステップＳ２１１でヒステリシス幅の上限値ＫＴＷＥＧＲＨ（例えば、２°Ｃ相当）を、水温上昇時の判定閾値ＫＴＷＥＧＲとしてセットし（ＫＴＷＥＧＲ←ＫＴＷＥＧＲＨ）、ステップＳ２１３へ進む。また、ステップＳ２１０でＦＴＷ＝１のときには、ステップＳ２１２でヒステリシス幅の下限値ＫＴＷＥＧＲＬ（例えば、０°Ｃ相当）を水温下降時の判定閾値ＫＴＷＥＧＲＬとしてセットし（ＫＴＷＥＧＲ←ＫＴＷＥＧＲＬ）、ステップＳ２１３へ進む。
【０１１９】
ステップＳ２１３では、冷却水温センサ２７で検出した現在の冷却水温ＴＷと判定閾値ＫＴＷＥＧＲとを比較する。そして、ＴＷ≧ＫＴＷＥＧＲのとき、水温条件成立と判定してステップＳ２１４で水温判定フラグＦＴＷを１にセットして（ＦＴＷ←１）、ステップＳ２１６へ進み、ＴＷ＜ＫＴＷＥＧＲのときには、水温条件不成立と判定してステップＳ２１５で水温判定フラグＦＴＷを０にクリアして（ＦＴＷ←０）ステップＳ２１６へ進む。すなわち、図３０（ａ）に示すように、水温上昇時には、冷却水温ＴＷがヒステリシス幅の上限値ＫＴＷＥＧＲＨ以上のとき水温条件が成立し、水温下降時には、冷却水温ＴＷがヒステリシス幅の下限値ＫＴＷＥＧＲＬ以上のとき、水温条件が成立する。
【０１２０】
次のステップＳ２１６〜Ｓ２２７は、（ｂ）の条件すなわち車速が制御ハンチングを防止するためのヒステリシスを上下限に設けた設定範囲内にある通常走行か否かを判定する処理であり、第１車速判定フラグＦＳＰＬと第２車速判定フラグＦＳＰＨとを用いて行われる。各フラグＦＳＰＬ,ＦＳＰＨは、システムイニシャライズ時に共に０に初期化され、車速が設定範囲内にある条件を満足するとき、ＦＳＰＬ＝１且つＦＳＰＨ＝１とする。
【０１２１】
ステップＳ２１６では第１車速判定フラグＦＳＰＬを参照し、ＦＳＰＬ＝０のとき、ステップＳ２１７で、低速側に設けたヒステリシス幅の上限値ＫＳＰＥＧＲＬＨ（例えば、２０Ｋｍ／ｈ相当）を、車速上昇時に対する低速側の判定閾値ＫＳＰＥＧＲＬとしてセットし（ＫＳＰＥＧＲＬ←ＫＳＰＥＧＲＬＨ）、ステップＳ２１９へ進む。また、ステップＳ２１６でＦＳＰＬ＝１のときには、ステップＳ２１８で、低速側に設けたヒステリシス幅の下限値ＫＳＰＥＧＲＬＬ（例えば、１６Ｋｍ／ｈ相当）を、車速下降時に対する低速側の判定閾値ＫＳＰＥＧＲＬとしてセットし（ＫＳＰＥＧＲＬ←ＫＳＰＥＧＲＬＬ）、ステップＳ２１９へ進む。
【０１２２】
ステップＳ２１９では、車速センサ３４で検出した現在の車速ＶＳＰと低速側の判定閾値ＫＳＰＥＧＲＬとを比較する。そして、ＶＳＰ≧ＫＳＰＥＧＲＬのときには、低速側の条件成立と判定してステップＳ２２０で第１車速判定フラグＦＳＰＬを１にセットして（ＦＳＰＬ←１）ステップＳ２２２へ進み、ＶＳＰ＜ＫＳＰＥＧＲＬのときには、低速側の条件不成立と判定してステップＳ２２１で第１車速判定フラグＦＳＰＬを０にクリアし（ＦＳＰＬ←０）、ステップＳ２２２へ進む。
【０１２３】
ステップＳ２２２では、第２車速判定フラグＦＳＰＨを参照し、ＦＳＰＨ＝０のとき、ステップＳ２２３で、高速側に設けたヒステリシス幅の下限値ＫＳＰＥＧＲＨＬ（例えば、８０Ｋｍ／ｈ相当）を、車速下降時に対する判定閾値ＫＳＰＥＧＲＨとしてセットし（ＫＳＰＥＧＲＨ←ＫＳＰＥＧＲＨＬ）、ステップＳ２２５へ進む。また、ステップＳ２２２でＦＳＰＨ＝１のときには、ステップＳ２２４で、高速側に設けたヒステリシス幅の上限値ＫＳＰＥＧＲＨＨ（例えば、８２Ｋｍ／ｈ相当）を、車速上昇時に対する判定閾値ＫＳＰＥＧＲＨとしてセットし（ＫＳＰＥＧＲＨ←ＫＳＰＥＧＲＨＨ）し、ステップＳ２２５へ進む。
【０１２４】
ステップＳ２２５では、現在の車速ＶＳＰと高速側の判定閾値ＫＳＰＥＧＲＨとを比較する。そして、ＶＳＰ≦ＫＳＰＥＧＲＨのとき、高速側の条件成立と判定してステップＳ２２６で第２車速判定フラグＦＳＰＨを１にセットして（ＦＳＰＨ←１）ステップＳ２２８以降へ進み、ＶＳＰ＞ＫＳＰＥＧＲＨのとき、高速側の条件不成立と判定してステップＳ２２７で第２車速判定フラグＦＳＰＨを０にクリアし（ＦＳＰＨ←０）、ステップＳ２２８以降へ進む。
【０１２５】
すなわち、図３０（ｂ）に示すように、車速上昇時には、車速ＶＳＰが低速側に設けたヒステリシス幅の上限値ＫＳＰＥＧＲＬＨ以上、且つ高速側に設けたヒステリシス幅の上限値ＫＳＰＥＧＲＨＨ以下のとき、車速条件が成立し、また、車速下降時には、車速ＶＳＰが高速側に設けたヒステリシス幅の下限値ＫＳＰＥＧＲＨＬ以下、且つ低速側に設けたヒステリシス幅の下限値ＫＳＰＥＧＲＬＬ以上のとき、車速条件が成立する（ＦＳＰＬ＝１且つＦＳＰＨ＝１）。
【０１２６】
ステップＳ２２８〜Ｓ２３９は、（ｃ）の条件すなわちエンジン回転数が制御ハンチングを防止するためのヒステリシスを低回転側と高回転側とに設けた設定範囲内にあり、低中回転域にあるか否かを判定する処理であり、車速条件の判定と同様の２つのフラグ、第１回転数判定フラグＦＮＥＬと第２回転数判定フラグＦＮＥＨとを用いて行われる。各フラグＦＮＥＬ，ＦＮＥＨは、システムイニシャライズ時に共に０に初期化され、エンジン回転数が設定範囲内にある条件を満足するとき、ＦＮＥＬ＝１且つＦＮＥＨ＝１とする。
【０１２７】
先ず、ステップＳ２２８では、第１回転数判定フラグＦＮＥＬを参照し、ＦＮＥＬ＝０のとき、ステップＳ２２９で、低回転側に設けたヒステリシス幅の下限値ＫＮＥＥＧＲ１Ｈ（例えば、１１００ｒｐｍ相当）を、回転上昇時に対する低回転側の判定閾値ＫＮＥＥＧＲ１としてセットし（ＫＮＥＥＧＲ１←ＫＮＥＥＧＲ１Ｈ）、ステップＳ２３１へ進む。また、ステップＳ２２８でＦＮＥＬ＝１のときには、ステップＳ２３０で、低回転側に設けたヒステリシス幅の下限値ＫＮＥＥＧＲ１Ｌ（例えば、１０００ｒｐｍ相当）を、回転下降時に対する低回転側の判定閾値ＫＮＥＥＧＲ１としてセットし（ＫＮＥＥＧＲ１←ＫＮＥＥＧＲ１Ｌ）、ステップＳ２３１へ進む。
【０１２８】
ステップＳ２３１では、現在のエンジン回転数ＮＥと低回転側の判定閾値ＫＮＥＥＧＲ１とを比較する。そして、ＮＥ≧ＫＮＥＥＧＲ１のとき、低回転側の条件成立と判定してステップＳ２３２で第１回転数判定フラグＦＮＥＬを１にセットして（ＦＮＥＬ←１）ステップＳ２３４へ進み、ＮＥ＜ＫＮＥＥＧＲ１のときには、低回転側の条件不成立としてステップＳ２３３で第１回転数判定フラグＦＮＥＬを０にクリア（ＦＮＥＬ←０）し、ステップＳ２３４へ進む。
【０１２９】
ステップＳ２３４では第２回転数判定フラグＦＮＥＨを参照する。そして、ＦＮＥＨ＝０のとき、ステップＳ２３５へ進んで、高回転側に設けたヒステリシス幅の下限値ＫＮＥＥＧＲ２Ｌ（例えば、３５００ｒｐｍ相当）を、回転下降時に対する高回転側の判定閾値ＫＮＥＥＧＲ２としてセットし（ＫＮＥＥＧＲ２←ＫＮＥＥＧＲ２Ｌ）、ステップＳ２３７へ進む。また、ステップＳ２３４でＦＮＥＨ＝１のときには、ステップＳ２３６で、高回転側に設けたヒステリシス幅の上限値ＫＮＥＥＧＲ２Ｈ（例えば、３５４９．５ｒｐｍ相当）を、回転上昇時に対する判定閾値ＫＮＥＥＧＲ２としてセットし（ＫＮＥＥＧＲ２←ＫＮＥＥＧＲ２Ｈ）し、ステップＳ２３７へ進む。
【０１３０】
ステップＳ２３７では、現在のエンジン回転数ＮＥと高回転側の判定閾値ＫＮＥＥＧＲ２とを比較する。そして、ＮＥ≦ＫＮＥＥＧＲ２のとき、高回転側の条件成立と判定してステップＳ２３８で第２回転数判定フラグＦＮＥＨを１にセットして（ＦＮＥＨ←１）ステップＳ２４０以降へ進み、ＮＥ＞ＫＮＥＥＧＲ２のとき、高回転側の条件不成立と判定してステップＳ２３９で第２回転数判定フラグＦＮＥＨを０にクリアし（ＦＮＥＨ←０）、ステップＳ２４０以降へ進む。
【０１３１】
すなわち、図３０（ｃ）に示すように、回転数上昇時には、エンジン回転数ＮＥが低回転側に設けたヒステリシス幅の上限値ＫＮＥＥＧＲ１Ｈ以上、且つ高回転側に設けたヒステリシス幅の上限値ＫＮＥＥＧＲ２Ｈ以下のとき、回転数条件が成立し、また、回転下降時には、エンジン回転数ＮＥが高回転側に設けたヒステリシス幅の下限値ＫＮＥＥＧＲ２Ｌ以下、且つ低回転側に設けたヒステリシス幅の下限値ＫＮＥＥＧＲ１Ｌ以上のとき、回転数条件が成立する（ＦＮＥＬ＝１且つＦＮＥＨ＝１）。
【０１３２】
続くステップＳ２４０〜Ｓ２４５は、（ｄ）の条件すなわちスロットル弁５ａ下流の吸気管圧力により排気ガスを吸気系へ吸引可能な領域か否かを判定する処理であり、スロットル弁５ａ下流の吸気管圧力ＰＭ（絶対圧力）がヒステリシス付きの判定閾値より低い条件が成立するか否かを判定する。吸気管圧力に対する判定は、条件成立を判定するための吸気管圧力判定フラグＦＰＭ（システムイニシャライズ時に０に初期化される）を用い、吸気管圧力ＰＭが設定範囲内にある条件を満足するとき、ＦＰＭ＝１とする。
【０１３３】
このため、ステップＳ２４０では、吸気管圧力判定フラグＦＰＭを参照し、ＦＰＭ＝０のとき、ステップＳ２４１でヒステリシス幅の下限値ＫＰＭＥＧＲＬ（例えば、５４０ｍｍＨｇ相当）を、圧力下降時の判定閾値ＫＰＭＥＧＲとしてセットし（ＫＰＭＥＧＲ←ＫＰＭＥＧＲＬ）、ステップＳ２４３へ進む。また、ステップＳ２４０でＦＰＭ＝１のときには、ステップＳ２４２でヒステリシス幅の上限値ＫＰＭＥＧＲＨ（例えば、５５０ｍｍＨｇ相当）を圧力上昇時の判定閾値ＫＰＭＥＧＲとしてセットし（ＫＰＭＥＧＲ←ＫＰＭＥＧＲＨ）、ステップＳ２４３へ進む。
【０１３４】
ステップＳ２４３では、吸気管圧力センサ２４で検出した現在の吸気管圧力ＰＭと判定閾値ＫＰＭＥＧＲとを比較する。そして、ＰＭ≦ＫＰＭＥＧＲのとき、吸気管圧力条件成立と判定してステップＳ２４４で吸気管圧力判定フラグＦＰＭを１にセットして（ＦＰＭ←１）、ステップＳ２４６へ進み、ＰＭ＞ＫＰＭＥＧＲのときには、吸気管圧力条件不成立と判定してステップＳ２４５で吸気管圧力判定フラグＦＰＭを０にクリアして（ＦＰＭ←０）ステップＳ２４６へ進む。すなわち、図３０（ｄ）に示すように、圧力上昇時には、吸気管圧力ＰＭがヒステリシス幅の上限値ＫＰＭＥＧＲＨ以下のとき吸気管圧力条件が成立し、圧力下降時には、吸気管圧力ＰＭがヒステリシス幅の下限値ＫＰＭＥＧＲＬ以下になったとき、吸気管圧力条件が成立する。
【０１３５】
ステップＳ２４６〜Ｓ２５１は、（ｅ）の条件すなわち低・中負荷域を判定する処理であり、スロットル開度がヒステリシス付きの判定閾値より小さい条件が成立するか否かを判定する。スロットル開度に対する判定は、条件成立を判定するためのスロットル開度判定フラグＦＴＶＯ（システムイニシャライズ時に０に初期化される）を用い、スロットル開度ＴＶＯが設定開度以下にある条件を満足するとき、ＦＴＶＯ＝１とする。
【０１３６】
このため、ステップＳ２４６でスロットル開度判定フラグＦＴＶＯを参照し、ＦＴＶＯ＝０のときには、ステップＳ２４７でヒステリシス幅の下限値ＴＶＯＥＧＲＬ（例えば、１９．８ｄｅｇ相当）を、スロットル閉方向に対する判定閾値ＴＶＯＥＧＲとしてセットし（ＴＶＯＥＧＲ←ＴＶＯＥＧＲＬ）、ステップＳ２４９へ進む。また、ステップＳ２４６でＦＴＶＯ＝１のときには、ステップＳ２４８でヒステリシス幅の上限値ＴＶＯＥＧＲＨ（例えば、２２ｄｅｇ相当）をスロットル開方向に対する判定閾値ＴＶＯＥＧＲとしてセットし（ＴＶＯＥＧＲ←ＴＶＯＥＧＲＨ）、ステップＳ２４９へ進む。
【０１３７】
ステップＳ２４９では、スロットル開度センサ２２ａで検出した現在のスロットル開度ＴＶＯと判定閾値ＴＶＯＥＧＲとを比較する。そして、ＴＶＯ≦ＴＶＯＥＧＲのとき、スロットル開度条件成立と判定してステップＳ２５０でスロットル開度判定フラグＦＴＶＯを１にセットして（ＦＴＶＯ←１）、ステップＳ２５２へ進み、ＴＶＯ＞ＴＶＯＥＧＲのときには、スロットル開度条件不成立と判定してステップＳ２５１でスロットル開度判定フラグＦＴＶＯを０にクリアして（ＦＴＶＯ←０）ステップＳ２５２へ進む。すなわち、図３０（ｅ）に示すように、スロットル開度増加時には、スロットル開度ＴＶＯがヒステリシス幅の上限値ＴＶＯＥＧＲＨ以下のときスロットル開度条件が成立し、スロットル開度減少時には、スロットル開度ＴＶＯがヒステリシス幅の下限値ＴＶＯＥＧＲＬ以下になったとき、スロットル開度条件が成立する。
【０１３８】
ステップＳ２５２〜Ｓ２６３は、（ｆ）の条件すなわち吸気温度が制御ハンチングを防止するためのヒステリシスを低温側と高温側とに設けた設定範囲内にあり、極低温及び高温を除く状態にあるか否かを判定する処理であり、第１吸気温判定フラグＦＴＡＬと第２吸気温判定フラグＦＴＡＨとの２つのフラグを用いて行われる。各フラグＦＴＡＬ，ＦＴＡＨは、システムイニシャライズ時に共に０に初期化され、吸気温度が設定範囲内にある条件を満足するとき、ＦＴＡＬ＝１且つＦＴＡＨ＝１とする。
【０１３９】
先ず、ステップＳ２５２では、第１吸気温判定フラグＦＴＡＬを参照し、ＦＴＡＬ＝０のとき、ステップＳ２５３で、低温側に設けたヒステリシス幅の上限値ＫＴＡＥＧＲＬＨ（例えば、５°Ｃ相当）を、温度上昇時に対する低温側の判定閾値ＫＴＡＥＧＲＬとしてセットし（ＫＴＡＥＧＲＬ←ＫＴＡＥＧＲＬＨ）、ステップＳ２５５へ進む。また、ステップＳ２５２でＦＴＡＬ＝１のときには、ステップＳ２５４で、低温側に設けたヒステリシス幅の下限値ＫＴＡＥＧＲＬＬ（例えば、０°Ｃ相当）を、温度下降時に対する低温側の判定閾値ＫＴＡＥＧＲＬとしてセットし（ＫＴＡＥＧＲＬ←ＫＴＡＥＧＲＬＬ）、ステップＳ２５５へ進む。
【０１４０】
ステップＳ２５５では、吸気温センサ２３で検出した現在の吸気温度ＴＡＮと低温側の判定閾値ＫＴＡＥＧＲＬとを比較する。そして、ＴＡＮ≧ＫＴＡＥＧＲＬのとき、低回転側の条件成立と判定してステップＳ２５６で第１吸気温判定フラグＦＴＡＬを１にセットして（ＦＴＡＬ←１）ステップＳ２５８へ進み、ＴＡＮ＜ＫＴＡＥＧＲＬのときには、低温側の条件不成立としてステップＳ２５７で第１吸気温判定フラグＦＴＡＬを０にクリア（ＦＴＡＬ←０）し、ステップＳ２５８へ進む。
【０１４１】
ステップＳ２５８では第２吸気温判定フラグＦＴＡＨを参照する。そして、ＦＴＡＨ＝０のとき、ステップＳ２５９へ進んで、高温側に設けたヒステリシス幅の下限値ＫＴＡＥＧＲＨＬ（例えば、５０°Ｃ相当）を、温度下降時に対する高温側の判定閾値ＫＴＡＥＧＲＨとしてセットし（ＫＴＡＥＧＲＨ←ＫＴＡＥＧＲＨＬ）、ステップＳ２６１へ進む。また、ステップＳ２５８でＦＴＡＨ＝１のときには、ステップＳ２６０で、高温側に設けたヒステリシス幅の上限値ＫＴＡＥＧＲＨＨ（例えば、５５°Ｃ相当）を、回転上昇時に対する判定閾値ＫＴＡＥＧＲＨとしてセットし（ＫＴＡＥＧＲＨ←ＫＴＡＥＧＲＨＨ）し、ステップＳ２６１へ進む。
【０１４２】
ステップＳ２６１では、現在の吸気温度ＴＡＮと高温側の判定閾値ＫＴＡＥＧＲＨとを比較する。そして、ＴＡＮ≦ＫＴＡＥＧＲＨのとき、高温側の条件成立と判定してステップＳ２６２で第２吸気温判定フラグＦＴＡＨを１にセットして（ＦＴＡＨ←１）ステップＳ２６４以降へ進み、ＴＡＮ＞ＫＴＡＥＧＲＨのとき、高温側の条件不成立と判定してステップＳ２６３で第２吸気温判定フラグＦＴＡＨを０にクリアし（ＦＴＡＨ←０）、ステップＳ２６４以降へ進む。
【０１４３】
すなわち、図３０（ｆ）に示すように、温度上昇時には、吸気温度ＴＡＮが低温側に設けたヒステリシス幅の上限値ＫＴＡＥＧＲＬＨ以上、且つ高温側に設けたヒステリシス幅の上限値ＫＴＡＥＧＲＨＨ以下のとき、吸気温条件が成立し、また、温度下降時には、吸気温度ＴＡＮが高温側に設けたヒステリシス幅の下限値ＫＴＡＥＧＲＨＬ以下、且つ低温側に設けたヒステリシス幅の下限値ＫＴＡＥＧＲＬＬ以上のとき、吸気温条件が成立する（ＦＴＡＬ＝１且つＦＴＡＨ＝１）。
【０１４４】
そして、以上の水温条件、車速条件、エンジン回転数条件、吸気管圧力条件、スロットル開度条件、吸気温条件を調べた後、ステップＳ２６４，Ｓ２６５，Ｓ２６６，Ｓ２６７，Ｓ２６８，Ｓ２６９，Ｓ２７０，Ｓ２７１で、それぞれ、水温判定フラグＦＴＷ、アイドルスイッチ２２ｂのＯＮ，ＯＦＦ状態（（ｈ）の条件）、第１車速判定フラグＦＳＰＬ、第２車速判定フラグＦＳＰＨ、ＥＧＲ弁２０の異常の有無（（ｉ）の条件）、第１回転数判定フラグＦＮＥＬ、第２回転数判定フラグＦＮＥＨ、吸気管圧力判定フラグＦＰＭを調べる。
【０１４５】
そして、水温判定フラグＦＴＷ、第１車速判定フラグＦＳＰＬ、第２車速判定フラグＦＳＰＨ、第１回転数判定フラグＦＮＥＬ、第２回転数判定フラグＦＮＥＨ、吸気管圧力判定フラグＦＰＭのうち、一つでも値が０のフラグがある場合、アイドルスイッチ２２ｂがＯＮの場合、或いは、ＥＧＲ弁２０に異常がある場合には、ＥＧＲ実施可能条件不成立として該当するステップからステップＳ２７９へ進み、ＥＧＲを禁止すべくＥＧＲ実施可能フラグＦＥＧＲを０にクリアし（ＦＥＧＲ←０）、ルーチンを抜ける。
【０１４６】
また、水温判定フラグＦＴＷ、第１車速判定フラグＦＳＰＬ、第２車速判定フラグＦＳＰＨ、第１回転数判定フラグＦＮＥＬ、第２回転数判定フラグＦＮＥＨ、吸気管圧力判定フラグＦＰＭが全て１の場合、すなわち、水温条件、車速条件、回転数条件、吸気管圧力条件が全て成立し、且つアイドルスイッチ２２ｂがＯＦＦでＥＧＲ弁２０が正常の場合には、ステップＳ２６４〜Ｓ２７１を経てステップＳ２７２へ進み、（ｊ）の条件を判定する。
【０１４７】
すなわち、ステップＳ２７２では、エンジン始動後の経過時間が設定時間ＫＴＳＴＡＥＧＲ（例えば、２５５０ｍｓｅｃ）以上経過しているか否かを調べる。そして、設定時間ＫＴＳＴＡＥＧＲが経過していないときには、ＥＧＲを禁止する前述のステップＳ２７９を経てルーチンを抜け、設定時間ＫＴＳＴＡＥＧＲ以上経過しているとき、ステップＳ２７３，Ｓ２７４，Ｓ２７５で、それぞれ、スロットル開度判定フラグＦＴＶＯ、第１吸気温判定フラグＦＴＡＬ、第２吸気温判定フラグＦＴＡＨを参照する。
【０１４８】
その結果、スロットル開度判定フラグＦＴＶＯ、第１吸気温判定フラグＦＴＡＬ、第２吸気温判定フラグＦＴＡＨの何れかが０であり、スロットル開度条件或いは吸気温条件が成立しない場合には、同様にＥＧＲを禁止する前述のステップＳ２７９を経てルーチンを抜ける。また、スロットル開度判定フラグＦＴＶＯ、第１吸気温判定フラグＦＴＡＬ、第２吸気温判定フラグＦＴＡＨが全て１であり、スロットル開度条件及び吸気温条件が成立する場合、ステップＳ２７６へ進み、（ｋ）の条件としてＥＧＲリミットガード目標値ＦＬＥＧＤの更新条件が成立しているか否かを調べる。
【０１４９】
その結果、ＥＧＲリミットガード目標値ＦＬＥＧＤの更新条件が非成立であり、ＥＧＲリミットガード目標値ＦＬＥＧＤを更新するタイミングでない場合、ＥＧＲ実施可能と判定してＥＧＲを許可すべくステップＳ２７６からステップＳ２７８へ進んでＥＧＲ実施可能フラグＦＥＧＲを１にセットし（ＦＥＧＲ←１）、ルーチンを抜ける。一方、ＥＧＲリミットガード目標値ＦＬＥＧＤの更新条件が成立しており、ＥＧＲリミットガード目標値ＦＬＥＧＤを更新中の場合には、ステップＳ２７６からステップＳ２７７へ進み、ＥＧＲリミットガード目標値ＦＬＥＧＤが下限値ＫＦＬＥＧＤＭＮに達しているか否かを調べる。そして、ＦＬＥＧＤ≠ＫＦＬＥＧＤＭＮのときには、ＥＧＲ実施可能と判定する前述のステップＳ２７８を経てルーチンを抜け、ＦＬＥＧＤ＝ＫＦＬＥＧＤＭＮのとき、ＥＧＲを禁止すべく前述のステップＳ２７９を経てルーチンを抜ける。
【０１５０】
次に、図３１〜図３６のＥＧＲリミットガード目標値更新条件判定サブルーチンついて説明する。ＥＧＲリミットガード目標値更新ルーチンでは、以下の（１）〜（１１）の条件を全て満足し、且つ、これらの条件を全て満足する状態が設定時間以上継続したとき、ＥＧＲリミットガード目標値ＦＬＥＧＤの更新条件成立と判定する。
（１）ＥＧＲ実施可能と判定されてＥＧＲ実施が許可されている条件
（２）スロットル開度変化が小である条件
（３）エンジン回転変動が小さいか又は指標最大値ＦＩＬＤＭＰＭＡＸが上限に張り付いている条件
（４）吸気管圧力変化が小である条件
（５）パワステスイッチ３３及びエアコンリレー６４がＯＮ又はＯＦＦに切り換わった後、設定時間が経過している条件
（６）変速機が同一ギヤ位置である状態が設定時間以上継続する条件
（７）ＥＧＲ許可係数ＰＦＬＥＧＤが１でＥＧＲ実施への移行過程でない条件
（８）ロックアップクラッチ７５の制御状態が設定時間以上変化しない条件
（９）エンジン回転数が低中回転数域である条件
（１０）吸気管圧力が低中負荷域である条件
（１１）通常走行状態である条件
【０１５１】
（１）〜（５），（７）の条件は、エンジンが安定しており、過渡状態の影響を受けずにサージの検出が行われているときのみ、ＥＧＲリミットガード目標値ＦＬＥＧＤの更新を可能として誤更新を防止するための条件であり、（６），（８）の条件は、駆動系が過渡状態のときには、その影響によるエンジン回転変動が生じてサージを適切に検出できないことから、ＥＧＲリミットガード目標値ＦＬＥＧＤの更新を禁止するための条件である。また、（９）〜（１１）の条件は、ＥＧＲ実施対象領域を判定するための条件である。
【０１５２】
このため、ＥＧＲリミットガード目標値更新条件判定サブルーチンでは、先ず、ステップＳ３００で、（１）の条件を判定するためＥＧＲ実施可能フラグＦＥＧＲを参照する。そして、ＦＥＧＲ＝０でＥＧＲが禁止されているときにはＥＧＲリミットガード目標値更新条件不成立としてステップＳ３５３へ分岐し、ＥＧＲリミットガード目標値更新条件成立フラグＦＦＬＥＧＤを０にクリアして（ＦＦＬＥＧＤ←０）ルーチンを抜ける。尚、以下のステップにおいては、ＥＧＲリミットガード目標値更新条件不成立のときには、各ステップから上述のステップＳ３５３を経てルーチンを抜ける。
【０１５３】
一方、ステップＳ３００においてＦＥＧＲ＝１であり、ＥＧＲが許可されているときには、ステップＳ３０１へ進み、（２）の条件を判定するため、現在のスロットル開度ＴＶＯnと４回前のルーチン実行時（本形態では、４０ｍｓｅｃ前のタイミング）のスロットル開度ＴＶＯn-4との差の絶対値 ＴＶＯn−ＴＶＯn-4を、判定閾値ＫＤＴＶＬＥＧＤ（例えば、６０ｍＶ相当）と比較する。そして、 ＴＶＯn−ＴＶＯn-4 ≧ＫＤＴＶＬＥＧＤのときには、ＥＧＲリミットガード目標値更新条件不成立と判定し、 ＴＶＯn−ＴＶＯn-4 ＜ＫＤＴＶＬＥＧＤのとき、ステップＳ３０２，Ｓ３０３で（３）の条件を判定する。
【０１５４】
すなわち、ステップＳ３０２で現在のエンジン回転数ＮＥnと４回前のルーチン実行時のエンジン回転数ＮＥn-4との差の絶対値 ＮＥn−ＮＥn-4 を判定閾値ＫＤＮＥＬＥＧＤ（例えば、１２５ｒｐｍ相当）と比較し、 ＮＥn−ＮＥn-4 ＜ＫＤＮＥＬＥＧＤのときにはステップＳ３０４以降の次の判定処理へ進み、 ＮＥn−ＮＥn-4 ≧ＫＤＮＥＬＥＧＤのとき、ステップＳ３０３で、前述のサージレベル指標値算出サブルーチンで設定される指標最大値上限張り付き判定フラグＦＦＩＬＤＭＡＸを参照する。そして、ＦＦＩＬＤＭＡＸ＝０であり、指標最大値ＦＩＬＤＭＰＭＡＸが上限に張り付いていないときには、ＥＧＲリミットガード目標値更新条件不成立と判定し、ＦＦＩＬＤＭＡＸ＝１であり、指標最大値ＦＩＬＤＭＰＭＡＸが上限に張り付いているとき、ステップＳ３０４以降の次の判定処理へ進む。
【０１５５】
ステップＳ３０４では、（４）の条件を判定するため、現在の吸気管圧力ＰＭnと８回前のルーチン実行時（本形態では、８０ｍｓｅｃ前のタイミング）の吸気管圧力ＰＭn-8との差の絶対値 ＰＭn−ＰＭn-8 を判定閾値ＫＤＬＤＬＥＧＤ（例えば、１０．５ｍｍＨｇ相当）と比較する。そして、 ＰＭn−ＰＭn-8 ≧ＫＤＬＤＬＥＧＤで吸気管圧力が変動しているとき、すなわちエンジン負荷が変動しているときには、ＥＧＲリミットガード目標値更新条件不成立と判定し、 ＰＭn−ＰＭn-8 ＜ＫＤＬＤＬＥＧＤで吸気管圧力の変動が小さく、エンジン負荷の変動が小さい定常運転状態であるときには、ステップＳ３０５へ進む。
【０１５６】
ステップＳ３０５では、（５）の条件であるパワステスイッチ３３及びエアコンリレー６４がＯＮからＯＦＦ、或いはＯＦＦからＯＮに切り換わった後、設定時間ＫＴＬＥＧＤＰ（例えば、３０００ｍｓｅｃ）以上経過しているか否かを判定する。そして、設定時間が経過していないときには、ＥＧＲリミットガード目標値更新条件不成立と判定し、パワステスイッチ３３及びエアコンリレー６４がＯＮまたはＯＦＦの一定状態を設定時間以上継続し、エンジン負荷変動が生じていない状態でエンジン回転が安定していると見做し得るとき、ステップＳ３０６へ進む。
【０１５７】
次のステップＳ３０６は、（６）の条件すなわち変速機８０が変速されていない状態が設定時間以上継続し、変速に伴うエンジン回転数の変動が生じていない状態であるか否かを判定する処理であり、今回ルーチン実行時のギヤ位置ＧＥＡＲnが前回ルーチン実行時のギヤ位置（本形態では、１０ｍｓｅｃ前のギヤ位置）ＧＥＡＲn-1と同じ状態が設定時間ＫＴＬＥＧＤ２（例えば、５００ｍｓｅｃ相当）以上連続しているか否かを調べる。そして、変速中或いは同一ギヤ位置で設定時間が経過していないときには、駆動系の過渡状態であるため、ＥＧＲリミットガード目標値更新条件不成立と判定し、同一ギヤ位置の状態が連続する時間が設定時間以上のとき、ステップＳ３０７で、（７）の条件すなわちＥＧＲ許可係数ＰＦＬＥＧＤが１．０でＥＧＲ実行への移行過程でないことを確認する。
【０１５８】
その結果、ＰＦＬＥＧＤ≠１．０でＥＧＲ実行への移行過程のときには、ＥＧＲリミットガード目標値更新条件不成立と判定し、ＰＦＬＥＧＤ＝１．０でＥＧＲを完全に実行中であるときには、更に、ステップＳ３０８で、（８）の条件すなわちロックアップクラッチ７５の制御状態が設定時間以上変化しないか否かを判定する。すなわち、ステップＳ３０８では、今回ルーチン実行時におけるロックアップクラッチ７５の制御状態（締結、スリップ、解放）を示すロックアップクラッチ制御状態ＡＴＲＯＣＫnが前回ルーチン実行時のロックアップクラッチ制御状態（本形態では、１０ｍｓｅｃ前のロックアップクラッチ制御状態）ＡＴＲＯＣＫn-1と同じ状態が設定時間ＫＴＬＥＧＤ３（例えば、１５００ｍｓｅｃ相当）以上連続しているか否かを調べる。そして、ロックアップクラッチ制御状態が変化したとき、或いは連続して設定時間以上経過していないときには、駆動系の過渡状態であるため、ＥＧＲリミットガード目標値更新条件不成立と判定する。また、同一のロックアップクラッチ制御状態が設定時間以上連続するとき、ロックアップクラッチ７５の制御形態の変化に伴うエンジン回転数変動を生じていないと判断し、ステップＳ３０９以降へ進む。
【０１５９】
ステップＳ３０９〜Ｓ３２０は、（９）の条件すなわちエンジン回転数が制御ハンチングを防止するためのヒステリシスを低回転側と高回転側とに設けた設定範囲内にあり、低中回転域にあるか否かを判定する処理であり、前述のＥＧＲ実施可能判定サブルーチンにおけるエンジン回転数条件の判定と同様の処理である。この処理においては、システムイニシャライズ時に共に０に初期化される第１回転数判定フラグＦＮＥＥＧＲＬ及び第２回転数判定フラグＦＮＥＥＧＲＨを用い、エンジン回転数が設定範囲内にある条件を満足するとき、ＦＮＥＥＧＲＬ＝１且つＦＮＥＥＧＲＨ＝１とする。
【０１６０】
先ず、ステップＳ３０９では、第１回転数判定フラグＦＮＥＥＧＲＬを参照する。そして、ＦＮＥＥＧＲＬ＝０のとき、ステップＳ３１０で、低回転側に設けたヒステリシス幅の下限値ＫＮＥＦＬＥＧＬ（例えば、９００ｒｐｍ相当）にヒステリシス幅ＫＮＥＦＬＥＨＳ（例えば、１００ｒｐｍ相当）を加算し、回転上昇時に対応する低回転側の判定閾値ＫＮＥＦＬＥＧＬとする（ＫＮＥＦＬＥＧＬ←ＫＮＥＦＬＥＧＬ＋ＫＮＥＦＬＥＨＳ）。また、ＦＮＥＥＧＲＬ＝１のときには、ステップＳ３１１で、低回転側に設けたヒステリシス幅の下限値ＫＮＥＦＬＥＧＬを、回転下降時に対応する低回転側の判定閾値ＫＮＥＦＬＥＧＬとして設定する（ＫＮＥＦＬＥＧＬ←ＫＮＥＦＬＥＧＬ）。
【０１６１】
次に、ステップＳ３１２へ進み、現在のエンジン回転数ＮＥと低回転側の判定閾値ＫＮＥＦＬＥＧＬとを比較する。そして、ＮＥ≧ＫＮＥＦＬＥＧＬのとき、低回転側の条件成立と判定してステップＳ３１３で第１回転数判定フラグＦＮＥＥＧＲＬを１にセットし（ＦＮＥＥＧＲＬ←１）、ステップＳ３１５へ進む。また、ＮＥ＜ＫＮＥＦＬＥＧＬのときには、低回転側の条件不成立としてステップＳ３１４で第１回転数判定フラグＦＮＥＥＧＲＬを０にクリアし（ＦＮＥＥＧＲＬ←０）、ステップＳ３１５へ進む。
【０１６２】
ステップＳ３１５では、第２回転数判定フラグＦＮＥＥＧＲＨを参照する。そして、ＦＮＥＥＧＲＨ＝１のとき、ステップＳ３１６へ進んで高回転側に設けたヒステリシス幅の下限値ＫＮＥＦＬＥＧＨ（例えば、３４００ｒｐｍ相当）にヒステリシス幅ＫＮＥＦＬＥＨＳを加算し、回転上昇時に対応する高回転側の判定閾値ＫＮＥＦＬＥＧＨとして設定し（ＫＮＥＦＬＥＧＨ←ＫＮＥＦＬＥＧＨ＋ＫＮＥＦＬＥＨＳ）、ステップＳ３１８へ進む。また、ＦＮＥＥＧＲＨ＝０のときには、ステップＳ３１７で、高回転側に設けたヒステリシス幅の下限値ＫＮＥＦＬＥＧＨを、回転下降時に対応する高回転側の判定閾値ＫＮＥＦＬＥＧＨとして設定し（ＫＮＥＦＬＥＧＨ←ＫＮＥＦＬＥＧＨ）、ステップＳ３１８へ進む。
【０１６３】
ステップＳ３１８では、現在のエンジン回転数ＮＥと高回転側の判定閾値ＫＮＥＦＬＥＧＨとを比較し、ＮＥ≦ＫＮＥＦＬＥＧＨのとき、高回転側の条件成立と判定してステップＳ３１９で第２回転数判定フラグＦＮＥＥＧＲＨを１にセットして（ＦＮＥＥＧＲＨ←１）ステップＳ３２１以降へ進む。また、ＮＥ＞ＫＮＥＦＬＥＧＨのときには、高回転側の条件不成立と判定し、ステップＳ３１８からステップＳ３２０へ進んで第２回転数判定フラグＦＮＥＥＧＲＨを０にクリアし（ＦＮＥＥＧＲＨ←０）、ステップＳ３２１以降へ進む。
【０１６４】
すなわち、図３７（ａ）に示すように、回転数上昇時には、エンジン回転数ＮＥが低回転側に設けたヒステリシス幅の上限である判定閾値（ＫＮＥＦＬＥＧＬ＋ＫＮＥＦＬＥＨＳ）以上で、且つ高回転側に設けたヒステリシス幅の上限である判定閾値（ＫＮＥＦＬＥＧＨ＋ＫＮＥＦＬＥＨＳ）以下のとき、回転数条件が成立する。また、回転下降時には、エンジン回転数ＮＥが高回転側に設けたヒステリシス幅の下限である判定閾値ＫＮＥＦＬＥＧＨ以下で、且つ、低回転側に設けたヒステリシス幅の下限である判定閾値ＫＮＥＦＬＥＧＬ以上のとき、回転数条件が成立する（ＦＮＥＥＧＲＬ＝１且つＦＮＥＥＧＲＨ＝１）。
【０１６５】
ステップＳ３２１〜Ｓ３３２は、（１０）の条件すなわち吸気管圧力が制御ハンチングを防止するためのヒステリシスを低圧側と高圧側とに設けた設定範囲内にあり、低中負荷域にあるか否かを判定する処理である。本処理においても、システムイニシャライズ時に共に０に初期化される第１吸気管圧力判定フラグＦＰＭＥＧＲＬ及び第２吸気管圧力判定フラグＦＰＭＥＧＲＨを用い、吸気管圧力が設定範囲内にある条件を満足するとき、ＦＰＭＥＧＲＬ＝１且つＦＰＭＥＧＲＨ＝１とする。
【０１６６】
このため、ステップＳ３２１では、第１吸気管圧力判定フラグＦＰＭＥＧＲＬを参照し、ＦＰＭＥＧＲＬ＝０で、ルーチン初回のとき、或いは前回ルーチン実行時においてアクセル踏み込み量の大きい高負荷運転状態（加速運転状態）のときには、ステップＳ３２２で、低圧側に設けたヒステリシスの下限値ＫＰＭＦＬＥＧＬ（例えば、２２４ｍｍＨｇ相当）にヒステリシス幅ＫＰＭＦＬＥＨＳ（例えば、９８ｍｍＨｇ相当）を加算し、圧力上昇時に対応する低圧側の判定閾値ＫＰＭＦＬＥＧＬとして設定する（ＫＰＭＦＬＥＧＬ←ＫＰＭＦＬＥＧＬ＋ＫＰＭＦＬＥＨＳ）。また、ステップＳ３２１において、ＦＰＭＥＧＲＬ＝１でアクセル解放状態或いはアクセル踏み込み量が小さい低負荷運転状態であるときには、ステップＳ３２１からステップＳ３２３へ進み、低圧側に設けたヒステリシス幅の下限値ＫＰＭＦＬＥＧＬを、圧力下降時に対応する低圧側の判定閾値ＫＰＭＦＬＥＧＬとして設定する（ＫＰＭＦＬＥＧＬ←ＫＰＭＦＬＥＧＬ）。
【０１６７】
そして、ステップＳ３２２或いはステップＳ３２３で低圧側の判定閾値ＫＰＭＦＬＥＧＬを設定した後、ステップＳ３２４へ進み、現在の吸気管圧力ＰＭと低圧側の判定閾値ＫＰＭＦＬＥＧＬとを比較する。その結果、ＰＭ≧ＫＰＭＦＬＥＧＬのとき、低圧側の条件成立と判定してステップＳ３２５で第１吸気管圧力判定フラグＦＰＭＥＧＲＬを１にセットし（ＦＰＭＥＧＲＬ←１）、ステップＳ３２７へ進む。また、ＰＭ＜ＫＰＭＦＬＥＧＬのときには、低圧側の条件不成立としてステップＳ３２６で第１吸気管圧力判定フラグＦＰＭＥＧＲＬを０にクリアし（ＦＰＭＥＧＲＬ←０）、ステップＳ３２７へ進む。
【０１６８】
ステップＳ３２７では、第２吸気管圧力判定フラグＦＰＭＥＧＲＨを参照する。そして、ＦＰＭＥＧＲＨ＝１のとき、ステップＳ３２８へ進んで高圧側に設けたヒステリシス幅の下限値ＫＰＭＦＬＥＧＨ（例えば、３９９ｍｍＨｇ相当）にヒステリシス幅ＫＰＭＦＬＥＨＳを加算し、圧力上昇時に対応する高圧側の判定閾値ＫＰＭＦＬＥＧＨとして設定し（ＫＰＭＦＬＥＧＨ←ＫＰＭＦＬＥＧＨ＋ＫＰＭＦＬＥＨＳ）、ステップＳ３３０へ進む。また、ＦＰＭＥＧＲＨ＝０のときには、ステップＳ３２９で、高圧側に設けたヒステリシス幅の下限値ＫＰＭＦＬＥＧＨを、圧力下降時に対応する高圧側の判定閾値ＫＰＭＦＬＥＧＨとして設定し（ＫＰＭＦＬＥＧＨ←ＫＰＭＦＬＥＧＨ）、ステップＳ３３０へ進む。
【０１６９】
ステップＳ３３０では、現在の吸気管圧力ＰＭと高圧側の判定閾値ＫＰＭＦＬＥＧＨとを比較し、ＰＭ≦ＫＰＭＦＬＥＧＨのとき、高圧側の条件成立と判定してステップＳ３３１で第２吸気管圧力判定フラグＦＰＭＥＧＲＨを１にセットして（ＦＰＭＥＧＲＨ←１）ステップＳ３３３以降へ進む。また、ＰＭ＞ＫＰＭＦＬＥＧＨのときには、高圧側の条件不成立と判定し、ステップＳ３３０からステップＳ３３２へ進んで第２吸気管圧力判定フラグＦＰＭＥＧＲＨを０にクリアし（ＦＰＭＥＧＲＨ←０）、ステップＳ３３３以降へ進む。
【０１７０】
すなわち、図３７（ｂ）に示すように、圧力上昇時には、吸気管圧力ＰＭが低圧側に設けたヒステリシス幅の上限である判定閾値（ＫＰＭＦＬＥＧＬ＋ＫＰＭＦＬＥＨＳ）以上で、且つ高圧側に設けたヒステリシス幅の上限である判定閾値（ＫＰＭＦＬＥＧＨ＋ＫＰＭＦＬＥＨＳ）以下のとき、吸気管圧力条件が成立する。また、圧力下降時には、吸気管圧力ＰＭが高圧側に設けたヒステリシス幅の下限である判定閾値ＫＰＭＦＬＥＧＨ以下で、且つ、低圧側に設けたヒステリシス幅の下限である判定閾値ＫＰＭＦＬＥＧＬ以上のとき、吸気管圧力条件が成立する（ＦＰＭＥＧＲＬ＝１且つＦＰＭＥＧＲＨ＝１）。
【０１７１】
次のステップＳ３３３〜Ｓ３４４は、（１１）の条件すなわち車速が制御ハンチングを防止するためのヒステリシスを上下限に設けた設定範囲内にある通常走行か否かを判定する処理であり、第１車速判定フラグＦＳＰＥＧＲＬと第２車速判定フラグＦＳＰＥＧＲＨとを用いて行われる。各フラグＦＳＰＥＧＲＬ，ＦＳＰＥＧＲＨは、システムイニシャライズ時、共に０に初期化され、車速が設定範囲内にある条件を満足するとき、ＦＳＰＥＧＲＬ＝１且つＦＳＰＥＧＲＨ＝１とする。
【０１７２】
ステップＳ３３３では、第１車速判定フラグＦＳＰＥＧＲＬを参照し、ＦＳＰＥＧＲＬ＝０のとき、ステップＳ３３４で、低速側に設けたヒステリシス幅の下限値ＫＶＳＦＬＥＧＬ（例えば、１６Ｋｍ／ｈ相当）に、ヒステリシス幅ＫＶＳＦＬＥＨＳ（例えば、５Ｋｍ／ｈ相当）を加算し、車速上昇時に対応する低速側の判定閾値ＫＶＳＦＬＥＧＬとしてセットし（ＫＶＳＦＬＥＧＬ←ＫＶＳＦＬＥＧＬ＋ＫＶＳＦＬＥＨＳ）、ステップＳ３３６へ進む。また、ステップＳ３３３でＦＳＰＥＧＲＬ＝１のときには、ステップＳ３３５で、低速側に設けたヒステリシス幅の下限値ＫＶＳＦＬＥＧＬを、車速下降時に対応する低速側の判定閾値ＫＶＳＦＬＥＧＬとしてセットし（ＫＶＳＦＬＥＧＬ←ＫＶＳＦＬＥＧＬ）、ステップＳ３３６へ進む。
【０１７３】
ステップＳ３３６では、現在の車速ＶＳＰと低速側の判定閾値ＫＶＳＦＬＥＧＬとを比較する。そして、ＶＳＰ≧ＫＶＳＦＬＥＧＬのときには、低速側の条件成立と判定してステップＳ３３７で第１車速判定フラグＦＳＰＥＧＲＬを１にセットして（ＦＳＰＥＧＲＬ←１）ステップＳ３３９へ進み、ＶＳＰ＜ＫＶＳＦＬＥＧＬのときには、低速側の条件不成立と判定してステップＳ３３８で第１車速判定フラグＦＳＰＥＧＲＬを０にクリアし（ＦＳＰＥＧＲＬ←０）、ステップＳ３３９へ進む。
【０１７４】
続くステップＳ３３９では、第２車速判定フラグＦＳＰＥＧＲＨを参照し、ＦＳＰＥＧＲＨ＝１のとき、ステップＳ３４０で、高速側に設けたヒステリシス幅の下限値ＫＶＳＦＬＥＧＨ（例えば、１１０Ｋｍ／ｈ相当）に、ヒステリシス幅ＫＶＳＦＬＥＨＳを加算し、車速上昇時に対応する高速側の判定閾値ＫＶＳＦＬＥＧＨとしてセットし（ＫＶＳＦＬＥＧＨ←ＫＶＳＦＬＥＧＨ＋ＫＶＳＦＬＥＨＳ）、ステップＳ３４２へ進む。また、ステップＳ３３９でＦＳＰＥＧＲＨ＝０のときには、ステップＳ３４１で、高速側に設けたヒステリシス幅の下限値ＫＶＳＦＬＥＧＨを、車速下降時に対応する高速側の判定閾値ＫＶＳＦＬＥＧＨとしてセットし（ＫＶＳＦＬＥＧＨ←ＫＶＳＦＬＥＧＨ）、ステップＳ３４２へ進む。
【０１７５】
ステップＳ３４２では、現在の車速ＶＳＰと高速側の判定閾値ＫＶＳＦＬＥＧＨとを比較する。そして、ＶＳＰ≦ＫＶＳＦＬＥＧＨのときには、高速側の条件成立と判定してステップＳ３４３で第２車速判定フラグＦＳＰＥＧＲＨを１にセットして（ＦＳＰＥＧＲＨ←１）してステップＳ３４５以降へ進み、ＶＳＰ＞ＫＶＳＦＬＥＧＨのとき、高速側の条件不成立と判定してステップＳ３４４で第２車速判定フラグＦＳＰＥＧＲＨを０にクリアし（ＦＳＰＥＧＲＨ←０）、ステップＳ３４５以降へ進む。
【０１７６】
すなわち、図３７（ｃ）に示すように、現在の車速ＶＳＰが、車速上昇時には低速側に設けたヒステリシス幅の上限である判定閾値（ＫＶＳＦＬＥＧＬ＋ＫＶＳＦＬＥＨＳ）以上で、且つ高速側に設けたヒステリシス幅の上限である判定閾値（ＫＶＳＦＬＥＧＨ＋ＫＶＳＦＬＥＨＳ）以下のとき、車速条件が成立する。また、車速下降時には、車速ＶＳＰが高速側に設けたヒステリシス幅の下限である判定閾値ＫＶＳＦＬＥＧＨ以下で、且つ、低速側に設けたヒステリシス幅の下限である判定閾値ＫＶＳＦＬＥＧＬ以上のとき、車速条件が成立する（ＦＳＰＥＧＲＬ＝１且つＦＳＰＥＧＲＨ＝１）。
【０１７７】
以上のエンジン回転数条件、吸気管圧力条件、車速条件を調べた後は、ステップＳ３４５〜Ｓ３５０で、それぞれ、第１回転数判定フラグＦＮＥＥＧＲＬ、第２回転数判定フラグＦＮＥＥＧＲＨ、第１吸気管圧力判定フラグＦＰＭＥＧＲＬ、第２吸気管圧力判定フラグＦＰＭＥＧＲＨ、第１車速判定フラグＦＳＰＥＧＲＬ、第２車速判定フラグＦＳＰＥＧＲＨの値を調べる。そして、各判定フラグＦＮＥＥＧＲＬ，ＦＮＥＥＧＲＨ，ＦＰＭＥＧＲＬ，ＦＰＭＥＧＲＨ，ＦＳＰＥＧＲＬ，ＦＳＰＥＧＲＨのうち、一つでも値が０のフラグがある場合には、ＥＧＲリミットガード目標値更新条件不成立と判定し、全てのフラグＦＮＥＥＧＲＬ，ＦＮＥＥＧＲＨ，ＦＰＭＥＧＲＬ，ＦＰＭＥＧＲＨ，ＦＳＰＥＧＲＬ，ＦＳＰＥＧＲＨが１の場合、すなわち、回転数条件、吸気管圧力条件、車速条件が全て成立する場合、ステップＳ３５１へ進む。
【０１７８】
ステップＳ３５１では、（１）〜（１１）の全ての条件が設定値ＫＴＬＥＧＤ（例えば、１５００ｍｓｅｃ相当）により定まる設定時間以上連続して成立するか否かを調べる。そして、（１）〜（１１）の条件を満足する時間が設定時間に達していないときには、ＥＧＲリミットガード目標値更新条件不成立と判定し、条件成立の時間が設定時間継続しているときには、ＥＧＲリミットガード目標値更新を許可すべくステップＳ３５２でＥＧＲリミットガード目標値更新条件成立フラグＦＦＬＥＧＤを１にセットし（ＦＦＬＥＧＤ←１）、ルーチンを抜ける。
【０１７９】
以上のＥＧＲリミットガード目標値更新条件成立フラグＦＦＬＥＧＤは、図３８〜図４１のＥＧＲリミットガード目標値更新サブルーチンで参照される。次に、ＥＧＲリミットガード目標値更新サブルーチンについて説明する。
【０１８０】
ＥＧＲリミットガード目標値更新サブルーチンでは、先ず、ステップＳ４００で、ＥＧＲリミットガード目標値更新条件成立フラグＦＦＬＥＧＤを参照する。そして、ＦＦＬＥＧＤ＝０で更新禁止のときには、ステップＳ４０１で、以下に説明するように、ＥＧＲリミットガード目標値ＦＬＥＧＤを設定時間毎に減少更新するため、更新後の経過時間を計時するタイマＴＭＦＩＬＤ１を０にクリアして（ＴＭＦＩＬＤ１←０）ルーチンを抜け、ＦＦＬＥＧＤ＝１で更新が許可されているとき、ステップＳ４０２以降へ進み、指標最大値ＦＩＬＤＭＰＭＡＸが上限に張り付いている場合と張り付いていない場合とに分けてＥＧＲリミットガード目標値ＦＬＥＧＤの更新を行う。
【０１８１】
すなわち、ステップＳ４０２で、前述のサージレベル指標値算出サブルーチンにおいて設定された指標最大値上限張り付き判定フラグＦＦＩＬＤＭＡＸを参照し、ＦＦＩＬＤＭＡＸ＝１で指標最大値ＦＩＬＤＭＰＭＡＸが上限に張り付いているときには、ステップＳ４０３以降でＥＧＲリミットガード目標値ＦＬＥＧＤを設定時間毎に一定値ずつ減少させ、ＦＦＩＬＤＭＡＸ＝０で指標最大値ＦＩＬＤＭＰＭＡＸが上限に張り付いていない場合には、ステップＳ４０７以降へ分岐してサージレベルの変化の度合いに応じてＥＧＲリミットガード目標値ＦＬＥＧＤを減少或いは増加させる処理を行う。
【０１８２】
先ず、指標最大値ＦＩＬＤＭＰＭＡＸが上限に張り付いている場合について説明する。ステップＳ４０３ではＥＧＲリミットガード目標値更新後の経過時間を計時するタイマＴＭＦＩＬＤ１が設定値ＫＴＳＦＩＬＤ１（例えば、８０ｍｓｅｃ相当）に達したか否かを調べる。そして、ＴＭＦＩＬＤ１＜ＫＴＳＦＩＬＤ１のとき、ステップＳ４０４でタイマＴＭＦＩＬＤ１をカウントアップ（ＴＭＦＩＬＤ１←ＴＭＦＩＬＤ１＋１）してステップＳ４３２へジャンプし、ステップＳ４３２以降でＥＧＲリミットガード目標値ＦＬＥＧＤの上下限規制（詳細は後述）を行ってルーチンを抜ける。
【０１８３】
また、ステップＳ４０３においてＴＭＦＩＬＤ１≧ＫＴＳＦＩＬＤ１であり、ＥＧＲリミットガード目標値更新後の経過時間が設定時間に達しているときには、ステップＳ４０５でＥＧＲリミットガード目標値ＦＬＥＧＤから設定値ＫＤＬＥＧＤＭＴ（例えば、０．７８％）を減算してＥＧＲリミットガード目標値ＦＬＥＧＤを新たな値に更新する（ＦＬＥＧＤ←ＦＬＥＧＤ−ＫＤＬＥＧＤＭＴ）。そして、ステップＳ４０６でタイマＴＭＦＩＬＤ１を０にクリアした後、ステップＳ４１７へ進み、ＥＧＲリミットガード目標値ＦＬＥＧＤを更新したことを示すＥＧＲリミットガード目標値更新フラグＦＦＬＥを１にセットする（ＦＦＬＥ←１）。
【０１８４】
続くステップＳ４１８では、指標最大値張り付き条件成立下でのＥＧＲリミットガード目標値ＦＬＥＧＤの更新後の経過時間、或いは、指標最大値張り付き条件非成立下での以下に説明するサージレベルの変化に応じたＥＧＲリミットガード目標値ＦＬＥＧＤの更新後の経過時間を計時するタイマＴＭＦＩＬＤ４を０にクリアする（ＴＭＦＩＬＤ４←０）。そして、ＥＧＲリミットガード目標値ＦＬＥＧＤの上下限規制を行なう後述のステップＳ４３２以降へ進む。
【０１８５】
一方、ステップＳ４０２においてＦＦＩＬＤＭＡＸ＝０であり、指標最大値ＦＩＬＤＭＰＭＡＸが上限に張り付いていない場合には、ステップＳ４０７でタイマＴＭＦＩＬＤ１を０にクリアし（ＴＭＦＩＬＤ１←０）、ステップＳ４０８で、前述のサージレベル検出サブルーチンで設定されるサージレベル初期化フラグＦＳＵＲＩＮＩを参照する。そして、ＦＳＵＲＩＮＩ＝１であり、サージレベル初期化時であるときには、ステップＳ４０８からＥＧＲリミットガード目標値ＦＬＥＧＤの上下限規制を行う後述のステップＳ４３２以降へ進み、ＦＳＵＲＩＮＩ＝０のとき、ステップＳ４０８からステップＳ４０９以降へ進んで、(i)サージレベル０又は１からサージレベル３に変化した場合、(ii)サージレベル２からサージレベル３に変化した場合、(iii)サージレベル０又は１からサージレベル２に変化した場合、(iv)それ以外の場合に区分してＥＧＲリミットガード目標値ＦＬＥＧＤを更新する。
【０１８６】
このため、ステップＳ４０９では、サージレベルが０→３に変化したか否かを調べ、０→３に変化したとき、ステップＳ４１１へ進み、サージレベルが０→３へ変化していないときには、更に、ステップＳ４１０でサージレベルが１→３に変化したか否かを調べる。そして、サージレベルが１→３に変化したとき、ステップＳ４１０からステップＳ４１１へ進む。
【０１８７】
サージレベル０又は１からサージレベル３に変化した場合、ステップＳ４１１では、ＥＧＲリミットガード目標値ＦＬＥＧＤから設定値ＫＳＦＩＬＤ３１（例えば、３．９％）を減算し、ＥＧＲリミットガード目標値ＦＬＥＧＤを減少更新する（ＦＬＥＧＤ←ＦＬＥＧＤ−ＫＳＦＩＬＤ３１）。設定値ＫＳＦＩＬＤ３１は、ＥＧＲリミットガード目標値ＦＬＥＧＤを急速に減少させるものであり、サージレベルが急速に大きくなったとき、この設定値ＫＳＦＩＬＤ３１によってＥＧＲリミットガード目標値ＦＬＥＧＤを急速に減少させることでＥＧＲ流量を減少させ、ＥＧＲ過多による燃焼悪化に伴うサージを解消する。そして、ＥＧＲリミットガード目標値更新フラグＦＦＬＥを１にセットする前述のステップＳ４１７、及びタイマＴＭＦＩＬＤ４を０にクリアする前述のステップＳ４１８を経てＥＧＲリミットガード目標値ＦＬＥＧＤの上下限規制を行う後述のステップＳ４３２以降へ進む。
【０１８８】
一方、サージレベル０又は１からサージレベル３に変化していないときには、ステップＳ４１０からステップＳ４１２へ進み、サージレベルが２→３に変化したか否かを調べる。そして、サージレベルが２→３に変化したとき、ステップＳ４１３でＥＧＲリミットガード目標値ＦＬＥＧＤから設定値ＫＳＦＩＬＤ３２（例えば、１．９５％）を減算してＥＧＲリミットガード目標値ＦＬＥＧＤを減少更新し（ＦＬＥＧＤ←ＦＬＥＧＤ−ＫＳＦＩＬＤ３２）、同様に、前述のステップＳ４１７,Ｓ４１８を経てステップＳ４３２以降へ進む。
【０１８９】
また、サージレベルが２→３に変化していないときには、ステップＳ４１２からステップＳ４１４へ進んでサージレベルが０→２へ変化したか否かを調べる。そして、サージレベルレベルが０→２へ変化したとき、ステップＳ４１６へジャンプし、サージレベルが０→２に変化していないときには、更にステップＳ４１５でサージレベルが１→２に変化したか否かを調べ、サージレベルが１→２に変化したとき、ステップＳ４１６へ進む。
【０１９０】
ステップＳ４１６では、ＥＧＲリミットガード目標値ＦＬＥＧＤから設定値ＫＳＦＩＬＤ２１（例えば、１．９５％）を減算してＥＧＲリミットガード目標値ＦＬＥＧＤを減少更新する（ＦＬＥＧＤ←ＦＬＥＧＤ−ＫＳＦＩＬＤ２１）。そして、同様に、前述のステップＳ４１７,Ｓ４１８を経てステップＳ４３２以降へ進む。
【０１９１】
すなわち、サージレベル２からサージレベル３、サージレベル０又は１からサージレベル２に移行し、サージが大きくなったものの、サージの変化が小〜中程度の場合には、設定値ＫＳＦＩＬＤ３２或いは設定値ＫＳＦＩＬＤ２１によってＥＧＲリミットガード目標値ＦＬＥＧＤの減衰量をサージレベルが急速に大きくなった場合よりも少なくし、過補正を防止しつつサージを解消する。
【０１９２】
一方、ステップＳ４１５においてサージレベルが１→２に変化していないときには、ステップＳ４１５からステップＳ４１９へ分岐してＥＧＲリミットガード目標値更新フラグＦＦＬＥを参照する。そして、ＦＦＬＥ＝０であり、ＥＧＲリミットガード目標値ＦＬＥＧＤが更新されていないときには、ステップＳ４２４へジャンプし、ＦＦＬＥ＝１でＥＧＲリミットガード目標値ＦＬＥＧＤの更新が実施されているときには、ステップＳ４２０でタイマＴＭＦＩＬＤ４を設定値ＫＴＳＦＩＬＤ４（例えば、２０００ｍｓｅｃ相当）と比較し、ＴＭＦＩＬＤ４≦ＫＴＳＦＩＬＤ４のとき、ステップＳ４２１でタイマＴＭＦＩＬＤ４をカウントアップして（ＴＭＦＩＬＤ４←ＴＭＦＩＬＤ４＋１）ルーチンを抜ける。
【０１９３】
すなわち、ＥＧＲリミットガード目標値ＦＬＥＧＤの指標最大値張り付き条件成立下での減少更新或いはサージレベルの変化に応じた減少更新後、設定値ＫＴＳＦＩＬＤ４により定まる所定時間に達するまでの間、ＥＧＲリミットガード目標値ＦＬＥＧＤの値を保持し、ＥＧＲリミットガード目標値ＦＬＥＧＤの増加更新を中止してＥＧＲ制御性の向上及び安定化を図る。
【０１９４】
また、ステップＳ４２０でＴＭＦＩＬＤ４＞ＫＴＳＦＩＬＤ４のときには、ステップＳ４２２，Ｓ４２３で、それぞれ、ＥＧＲリミットガード目標値更新フラグＦＦＬＥ、タイマＴＭＦＩＬＤ４を０にクリアする（ＦＦＬＥ←０、ＴＭＦＩＬＤ４←０）。そして、ステップＳ４２４でサージレベルの０→１への変化を検出後、設定値ＫＴＳＦＩＬＤ３（例えば、２０００ｍｓｅｃ相当）により定まる経過時間以内であるかを調べ、この経過時間以内であるときにはルーチンを抜ける。
【０１９５】
すなわち、サージレベル無しの状態から微小サージが生じた場合においても、設定値ＫＴＳＦＩＬＤ３により定まる設定時間を越えるまでの間、ＥＧＲリミットガード目標値ＦＬＥＧＤの値を保持して増加更新を中止し、ＥＧＲ制御性の向上及び安定化を図る。
【０１９６】
その後、ＥＧＲリミットガード目標値ＦＬＥＧＤの値を保持したまま、サージレベルの０→１への変化を検出した後の経過時間が設定値ＫＴＳＦＩＬＤ３により定まる時間を越えたとき、ステップＳ４２４からステップＳ４２５へ進んで指標最大値ＦＩＬＤＭＰＭＡＸを判定値ＫＦＩＬＤＳＬ（例えば、２５００相当）と比較する。そして、ＦＩＬＤＭＰＭＡＸ＞ＫＦＩＬＤＳＬでサージが生じていると判断されるときには、ルーチンを抜けてＥＧＲリミットガード目標値ＦＬＥＧＤの増加更新を中止し、ＥＧＲ流量の増加に伴うサージの増大を防止する。尚、ステップＳ４２５で指標最大値ＦＩＬＤＭＰＭＡＸを参照するのは、サージレベル指標値ＤＦＩＬＤＭＰによるサージレベルの検出結果を待つことなく、直接的にサージの程度を判断するためである。
【０１９７】
また、ステップＳ４２５においてＦＩＬＤＭＰＭＡＸ≦ＫＦＩＬＤＳＬであり、サージが解消されて安定状態にあると判断されるときには、ステップＳ４２６以降へ進んでＥＧＲリミットガード目標値ＦＬＥＧＤの増加更新を行い、ＥＧＲ流量を増加させる。すなわち、ステップＳ４２６で、ＥＧＲリミットガード目標値ＦＬＥＧＤを設定時間毎に更新するためのタイマＴＭＦＩＬＤ２を設定値ＫＴＳＦＩＬＤ２（例えば、２５０ｍｓｅｃ相当）と比較し、ＴＭＦＩＬＤ２＜ＫＴＳＦＩＬＤ２のときには、ステップＳ４２７でタイマＴＭＦＩＬＤ２をカウントアップして（ＴＭＦＩＬＤ２←ＴＭＦＩＬＤ２＋１）ルーチンを抜け、ＴＭＦＩＬＤ２≧ＫＴＳＦＩＬＤ２のとき、ステップＳ４２８でタイマＴＭＦＩＬＤ２を０にクリアし（ＴＭＦＩＬＤ２←０）、ステップＳ４２９へ進む。
【０１９８】
ステップＳ４２９では、図４２の安定指標パラメータ算出ルーチンで所定周期毎（例えば、１０ｍｓｅｃ毎）に算出される安定指標パラメータＳＦＩＬＤＮと判定閾値ＫＦＬＥＵＰＳＦ（例えば、５００相当）とを比較する。安定指標パラメータＳＦＩＬＤＮは、サージ（回転変動）の変化度合いを評価してエンジン安定状態を表す指標とするものであり、エンジンの回転変動を表わす指標値ＦＩＬＤＭＰの加重平均値を回転補正して算出される。また、判定閾値ＫＦＬＥＵＰＳＦは、回転変動が比較的大きい状況を判定するためのものである。
【０１９９】
ここで、図４２の安定指標パラメータ算出ルーチンについて説明する。このルーチンは、先ず、ステップＳ５００で、指標値ＦＩＬＤＭＰを加重平均の重みＫＳＦＩＬＲ（例えば、１６０）を用いて以下の式により加重平均し、指標値加重平均値ＳＦＩＬＤを算出する。
ＳＦＩＬＤ←（ＳＦＩＬＤ×（ＫＳＦＩＬＲ−１）＋ＦＩＬＤＭＰ）／ＫＳＦＩＬＲ
【０２００】
次にステップＳ５０１へ進み、エンジン回転数ＮＥをパラメータとして図４３に示す回転補正係数テーブルを参照し、補間計算によって回転補正係数ＳＦＮを設定する。更に、ステップＳ５０２で指標値加重平均値ＳＦＩＬＤに回転補正係数ＳＦＮを乗算して回転補正を行って安定指標パラメータＳＦＩＬＤＮを算出し（ＳＦＩＬＤＮ←ＳＦＩＬＤ×ＳＦＮ）、ルーチンを抜ける。
【０２０１】
そして、以上の安定指標パラメータＳＦＩＬＤＮを用いたＥＧＲリミットガード目標値更新サブルーチンのステップＳ４２９での比較結果、ＳＦＩＬＤＮ＞ＫＦＬＥＵＰＳＦで回転変動が比較的大きい場合には、ステップＳ４３０で、ＥＧＲリミットガード目標値ＦＬＥＧＤに設定値ＫＤＬＥＧＤＰ１（例えば、０．２％）を加算してＥＧＲリミットガード目標値ＦＬＥＧＤを増加更新（ＦＬＥＧＤ←ＦＬＥＧＤ＋ＫＤＬＥＧＤＰ１）し、ステップＳ４３２以降へ進む。ステップＳ４３２以降は、ＥＧＲリミットガード目標値ＦＬＥＧＤの上下限規制を行う処理である。
【０２０２】
設定値ＫＤＬＥＧＤＰ１は、ＥＧＲリミットガード目標値ＦＬＥＧＤの増加更新量を比較的小さく抑えるものであり、安定指標パラメータＳＦＩＬＤＮから回転変動が比較的大きいと判定される場合、設定値ＫＴＳＦＩＬＤ２により定まる所定時間毎のＥＧＲリミットガード目標値ＦＬＥＧＤの増加更新量を少なくして増加速度を減少させ、ＥＧＲ過多による燃焼の悪化に起因するエンジン回転変動を抑制する。
【０２０３】
また、ステップＳ４２９においてＳＦＩＬＤＮ≦ＫＦＬＥＵＰＳＦで回転変動が小さいときには、ステップＳ４３１へ進み、ＥＧＲリミットガード目標値ＦＬＥＧＤに上述の設定値ＫＤＬＥＧＤＰ１よりも大きい設定値ＫＤＬＥＧＤＰ２（例えば、０．４％）を加算し、ＥＧＲリミットガード目標値ＦＬＥＧＤを増加更新（ＦＬＥＧＤ←ＦＬＥＧＤ＋ＫＤＬＥＧＤＰ２）する。そして、ステップＳ４３１からステップＳ４３２以降へ進む。
【０２０４】
すなわち、安定指標パラメータＳＦＩＬＤＮから回転変動が小さくエンジン安定度合いが高いと判定される場合には、ＥＧＲリミットガード目標値ＦＬＥＧＤの１回当たりの増加更新量を大きくして増加速度を上昇させることでＥＧＲ流量の増加速度を上昇させ、早期にＥＧＲ流量を増加させて許容限度までの大量ＥＧＲを可能とする。
【０２０５】
ステップＳ４３２以降は、ＥＧＲリミットガード目標値ＦＬＥＧＤの上下限規制を行う処理であり、ステップＳ４３２でＥＧＲリミットガード目標値ＦＬＥＧＤが上限値ＫＦＬＥＧＤＭＸ（例えば、２２％）以下か否かを調べる。そして、ＦＬＥＧＤ＞ＫＦＬＥＧＤＭＸのときには、ステップＳ４３３でＥＧＲリミットガード目標値ＦＬＥＧＤを上限値ＫＦＬＥＧＤＭＸに規制（ＦＬＥＧＤ←ＫＦＬＥＧＤＭＸ）してルーチンを抜ける。
【０２０６】
また、ステップＳ４３２においてＦＬＥＧＤ≦ＫＦＬＥＧＤＭＸのときには、ステップＳ４３２からステップＳ４３４へ進み、ＥＧＲリミットガード目標値ＦＬＥＧＤが下限値ＫＦＬＥＧＤＭＮ（例えば、−２２％）以上か否かを調べ、ＦＬＥＧＤ≧ＫＦＬＥＧＤＭＮのときにはそのままルーチンを抜け、ＦＬＥＧＤ＜ＫＦＬＥＧＤＭＮのとき、ステップＳ４３５で、ＥＧＲリミットガード目標値ＦＬＥＧＤを下限値ＫＦＬＥＧＤＭＮに規制し（ＦＬＥＧＤ←ＫＦＬＥＧＤＭＮ）、ルーチンを抜ける。
【０２０７】
次に、以上のＥＧＲリミットガード目標値ＦＬＥＧＤからＥＧＲリミット値ＦＬＥＧＤＢを求める図４４〜図４５のＥＧＲリミット値設定サブルーチンについて説明する。ＥＧＲリミット値設定サブルーチンでは、先ず、ステップＳ６００で、ＥＧＲ許可係数ＰＦＬＥＧＤの更新後の経過時間を計時するためのタイマＴＭＰＦＬＥＧＤと、更新周期を定める設定値ＫＴＰＦＬＥＧＤ（例えば、４０ｍｓｅｃ相当値）とを比較し、更新周期に達したか否かを調べる。
【０２０８】
そして、ＴＭＰＦＬＥＧＤ＜ＫＴＰＦＬＥＧＤの場合、ステップＳ６００からステップＳ６０１へ進んでタイマＴＭＰＦＬＥＧＤをカウントアップし（ＴＭＰＦＬＥＧＤ←ＴＭＰＦＬＥＧＤ＋１）、ステップＳ６１９で、ＥＧＲリミットガード目標値ＦＬＥＧＤを単位換算して換算値ＦＬＥＧＤＨを求める。そして、ステップＳ６２０で、換算値ＦＬＥＧＤＨとＥＧＲ許可係数ＰＦＬＥＧＤとを乗算してＥＧＲリミット値ＦＬＥＧＤＢとして算出し（ＦＬＥＧＤＢ←ＰＦＬＥＧＤ×ＦＬＥＧＤＨ）、ルーチンを抜ける。
【０２０９】
また、ＴＭＰＦＬＥＧＤ≧ＫＴＰＦＬＥＧＤの場合には、ステップＳ６００からステップＳ６０２へ進み、タイマＴＭＰＦＬＥＧＤをクリアし（ＴＭＰＦＬＥＧＤ←０）、ステップＳ６０３でＥＧＲ実施可能フラグＦＥＧＲを参照する。その結果、ＦＥＧＲ＝１でＥＧＲ実施可能と判定されているときには、ステップ６０３からステップＳ６０４へ進み、現在のＥＧＲ許可係数ＰＦＬＥＧＤに増分値ＫＤＬＥＡＮＰ（例えば、０．７８１％）を加算し、ＥＧＲ許可係数ＰＦＬＥＧＤを増加させて新たな値に更新する（ＰＦＬＥＧＤ←ＰＦＬＥＧＤ＋ＫＤＬＥＡＮＰ）。
【０２１０】
次に、ステップＳ６０５へ進み、ＥＧＲ許可係数ＰＦＬＥＧＤが上限値（１．０）に達したか否かを調べる。そして、ＰＦＬＥＧＤ＞１．０で上限値に達しているときには、ステップＳ６０６でＥＧＲ許可係数ＰＦＬＥＧＤを１．０に固定し（ＰＦＬＥＧＤ←１．０）、前述のステップＳ６１９，Ｓ６２０で、ＥＧＲリミットガード目標値ＦＬＥＧＤの単位換算処理、換算値ＦＬＥＧＤＨ及びＥＧＲ許可係数ＰＦＬＥＧＤからＥＧＲリミット値ＦＬＥＧＤＢを求める処理を行ってルーチンを抜ける。
【０２１１】
一方、ステップＳ６０５において、ＰＦＬＥＧＤ≦１．０のとき、すなわちＥＧＲ禁止（ＦＥＧＲ＝０）からＥＧＲ許可（ＦＥＧＲ＝１）になってＥＧＲ実施へ移行する過渡状態であるときには、ステップＳ６０７でＥＧＲ許可係数ＰＦＬＥＧＤと設定値ＫＰＦＬＥＧＤＬ（例えば、７９．６％）とを比較する。設定値ＫＰＦＬＥＧＤＬは、ＥＧＲ許可係数ＰＦＬＥＧＤを漸次増加させる際のいわば初期値であり、ステップＳ６０７において、ＰＦＬＥＧＤ＞ＫＰＦＬＥＧＤＬのときには、前述のステップＳ６１９，Ｓ６２０を経てルーチンを抜け、ＰＦＬＥＧＤ≦ＫＰＦＬＥＧＤＬのとき、ステップＳ６０８でＥＧＲ許可係数ＰＦＬＥＧＤに設定値ＫＰＦＬＥＧＤＬをセットし（ＰＦＬＥＧＤ←ＫＰＦＬＥＧＤＬ）、前述のステップＳ６１９，Ｓ６２０を経てルーチンを抜ける。
【０２１２】
そして、ルーチン実行毎にＥＧＲ許可係数ＰＦＬＥＧＤを増分値ＫＤＬＥＡＮＰずつ漸次大きくし、ステップＳ６０５においてＰＦＬＥＧＤ＞１．０になると、ステップＳ６０５からステップＳ６０６へ進んでＥＧＲ許可係数ＰＦＬＥＧＤを１．０に固定した後、前述のステップＳ６１９，Ｓ６２０で、ＥＧＲリミットガード目標値ＦＬＥＧＤの単位換算処理、換算値ＦＬＥＧＤＨ及びＥＧＲ許可係数ＰＦＬＥＧＤからＥＧＲリミット値ＦＬＥＧＤＢを求める処理を行ってルーチンを抜ける。
【０２１３】
すなわち、図４６（ａ）に示すように、ＥＧＲが禁止されてＥＧＲを実行していない状態（ＰＦＬＥＧＤ＝０）からＥＧＲが許可されたときには、先ず、ＥＧＲ許可係数ＰＦＬＥＧＤを０から設定値ＫＰＦＬＥＧＤＬ（例えば、７９．６％）に直ちに変更し、その後、ＥＧＲ許可係数ＰＦＬＥＧＤを増分値ＫＤＬＥＡＮＰ（例えば、０．７８１％）ずつ徐々に大きくして漸次的にＥＧＲリミット値ＦＬＥＧＤＢを増加させる。これにより、ＥＧＲ禁止からＥＧＲ実施への切換え時に漸次的にＥＧＲ流量を増加させ、ＥＧＲ流量の急変に起因するトルクショック等を防止する。
【０２１４】
一方、ステップＳ６０３においてＦＥＧＲ＝０であり、ＥＧＲ実施不可と判定されているときには、ステップＳ６０３からステップＳ６０９へ進んでアイドルスイッチ２２ｂがＯＮか否かを調べる。そして、アイドルスイッチ２２ｂがＯＮでアイドル運転になっているときには、ステップＳ６１０でＥＧＲ許可係数ＰＦＬＥＧＤを漸次減少させるための減少分ＤＬＥＡＮＭに設定値ＫＤＬＥＡＮＭ（例えば、１０．１６％）をセットし（ＤＬＥＡＮＭ←ＫＤＬＥＡＮＭ）、ステップＳ６１６へ進む。
【０２１５】
また、ステップ６０９において、アイドルスイッチ２２ｂがＯＦＦのときには、ステップＳ６１１以降で、スロットル開度ＴＶＯの変化に応じて減少分ＤＬＥＡＮＭの値を設定してステップＳ６１６へ進む。すなわち、ステップＳ６１１で、現在のスロットル開度ＴＶＯと３回前のルーチン実行時の演算タイミング（本形態では、１２０ｍｓｅｃ前の演算タイミング）でのスロットル開度ＴＶＯn-3との差の絶対値をスロットル開度変化量 ＴＶＯ−ＴＶＯn-3 として求め、このスロットル開度変化量 ＴＶＯ−ＴＶＯn-3 を判定閾値ＫＤＴＶＯＬＥ１（例えば、６０ｍＶ相当）と比較する。そして、 ＴＶＯ−ＴＶＯn-3 ＜ＫＤＴＶＯＬＥ１でスロットル開度変化が比較的小さい運転状態であるときには、ステップＳ６１２で減少分ＤＬＥＡＮＭに設定値ＫＤＬＥＡＮＭ１（例えば、３．１３％）をセットし（ＤＬＥＡＮＭ←ＫＤＬＥＡＮＭ１）、ステップＳ６１６へ進む。
【０２１６】
また、ステップＳ６１１で、│ＴＶＯ−ＴＶＯn-3  ≧ＫＤＴＶＯＬＥ１のときには、ステップＳ６１３でスロットル開度変化量 ＴＶＯ−ＴＶＯn-3 を判定閾値ＫＤＴＶＯＬＥ２（例えば、２４０ｍＶ相当）と比較する。そして、 ＴＶＯ−ＴＶＯn-3 ＜ＫＤＴＶＯＬＥ２でスロットル開度変化が中程度の運転状態であるときには、ステップＳ６１４で減少分ＤＬＥＡＮＭに設定値ＫＤＬＥＡＮＭ２（例えば、６．６０％）をセットして（ＤＬＥＡＮＭ←ＫＤＬＥＡＮＭ２）ステップＳ６１６へ進み、ＴＶＯ−ＴＶＯn-3 ≧ＫＤＴＶＯＬＥ２でスロットル開度変化が大きい過渡状態であるときには、ステップＳ６１５で減少分ＤＬＥＡＮＭに、減少量が最も大きい設定値ＫＤＬＥＡＮＭ３（例えば、１０．１６％）をセットし（ＤＬＥＡＮＭ←ＫＤＬＥＡＮＭ３）、ステップＳ６１６へ進む。
【０２１７】
ステップＳ６１６では、ＥＧＲ許可係数ＰＦＬＥＧＤを減少分ＤＬＥＡＮＭだけ減少させて新たな値に更新し（ＰＦＬＥＧＤ←ＰＦＬＥＧＤ−ＤＬＥＡＮＭ）、ステップＳ６１７で、ＥＧＲ許可係数ＰＦＬＥＧＤと、ＥＧＲ許可係数ＰＦＬＥＧＤを漸次減少させる際の漸次減少の終値となる設定値ＫＰＦＬＥＧＤＲ（本形態では、０％）とを比較する。そして、ＰＦＬＥＧＤ＞ＫＰＦＬＥＧＤＲのときには前述のステップＳ６１９，Ｓ６２０で、ＥＧＲリミットガード目標値ＦＬＥＧＤの単位換算処理、換算値ＦＬＥＧＤＨ及びＥＧＲ許可係数ＰＦＬＥＧＤからＥＧＲリミット値ＦＬＥＧＤＢを求める処理を行ってルーチンを抜け、ＰＦＬＥＧＤ≦ＫＰＦＬＥＧＤＲのとき、ステップＳ６１８でＥＧＲ許可係数ＰＦＬＥＧＤを０にし（ＰＦＬＥＧＤ←０）、前述のステップＳ６１９，Ｓ６２０で、ＥＧＲリミットガード目標値ＦＬＥＧＤの単位換算処理、換算値ＦＬＥＧＤＨ及びＥＧＲ許可係数ＰＦＬＥＧＤからＥＧＲリミット値ＦＬＥＧＤＢを求める処理を行ってルーチンを抜ける。
【０２１８】
すなわち、図４６（ｂ）に示すように、ＥＧＲが許可されてＥＧＲを実行している状態（ＰＦＬＥＧＤ＝１）からＥＧＲが禁止されたときには、ＥＧＲ許可係数ＰＦＬＥＧＤをアイドル運転あるいはスロットル開度変化に応じた減少分ＤＬＥＡＮＭによって漸次的に小さくして漸次的にＥＧＲリミット値ＦＬＥＧＤＢを減少させ、ＥＧＲ許可からＥＧＲ禁止への切換え時に漸次的にＥＧＲ流量を減少させ、ＥＧＲ流量の急変に起因するトルクショック等を防止する。この場合、スロットル開度変化速度が大きい程、ＥＧＲ許可係数ＰＦＬＥＧＤの減少の傾きを大きくし、早期にＥＧＲ流量を減少させる。
【０２１９】
次に、ＥＧＲ流量は、ＥＧＲリミット値ＦＬＥＧＤＢを用い、図４７のＥＧＲ流量算出サブルーチンで算出される。このサブルーチンでは、先ず、ステップＳ７００で、エンジン回転数ＮＥと、エンジン負荷例えば吸気管圧力ＰＭとをパラメータとしてテーブルＴＥＬＢＡＳＥを参照し、補間計算により基本ＥＧＲ流量ＥＬＢＡＳＥを算出する。基本ＥＧＲ流量ＥＬＢＡＳＥは、エンジン運転領域毎に予め設定されたＥＧＲ流量の基本値であり、エンジン回転数ＮＥとエンジン負荷としての吸気管圧力ＰＭとによる運転領域毎に、予めシミュレーション或いは実験等により求めた最適ＥＧＲ流量がテーブルＴＥＬＢＡＳＥにストアされている。
【０２２０】
そして、ステップＳ７００で基本ＥＧＲ流量ＥＬＢＡＳＥを算出した後、ステップＳ７０１へ進み、基本ＥＧＲ流量ＥＬＢＡＳＥにＥＧＲリミット値ＦＬＥＧＤＢを乗算してＥＧＲ流量ＦＩＭＥＧＲを算出し（ＦＩＭＥＧＲ←ＥＬＢＡＳＥ×ＦＬＥＧＤＢ）、ルーチンを抜ける。
【０２２１】
次に、ＥＧＲ流量ＦＩＭＥＧＲをステップモータ式ＥＧＲ弁２０に対するステップ数に変換する図４８のモータ目標位置算出サブルーチンについて説明する。このサブルーチンでは、先ず、ステップＳ７５０で、ＥＧＲ流量ＦＩＭＥＧＲをパラメータとしてテーブルＴＭＥＧＲＱＳを参照し、補間計算により最新のモータ目標位置ＥＧＲＳＴＤＩを算出する。
【０２２２】
テーブルＴＭＥＧＲＱＳには、ステップＳ７５０において図示するように、ＥＧＲ流量ＦＩＭＥＧＲによる領域毎に、ステップモータ式ＥＧＲ弁２０で各領域毎のＥＧＲ流量を得るに最適なステップ数が予めシミュレーション或いは実験等により求められ、最新モータ目標位置ＥＧＲＳＴＤＩとしてストアされている。本形態においては、ステップモータ式ＥＧＲ弁２０の流量特性が非線形であることから、テーブルＴＭＥＧＲＱＳ中の上限ステップ数は１２０ｓｔｅｐであるが、後述するように、実際に使用するステップ数で良好な流量特性を得られる範囲とするため、モータ目標位置（ステップ数）の上限規制を行なう。
【０２２３】
続くステップＳ７５１では、システムイニシャライズのためＣＰＵ５１がリセットされ、ＣＰＵリセット後に始めてルーチンが実行されるルーチン初回であるか否かを調べる。そして、ＣＰＵリセット後のルーチン初回であるときには、ステップＳ７５１からステップＳ７５２へ進んでモータ目標位置ＥＧＲＳＴＤを０に初期設定し、ルーチンを抜ける。また、ＣＰＵリセット時でないときには、ステップＳ７５１からステップＳ７５３へ進み、前回ルーチン実行時（本形態においては、１０ｍｓｅｃ前）のモータ目標位置ＥＧＲＳＴＤn-1が現運転状態に適合する適正ＥＧＲ流量を得るためのテーブル設定の最新モータ目標位置ＥＧＲＳＴＤＩよりも大きいか否かを調べる。
【０２２４】
その結果、ＥＧＲＳＴＤn-1＞ＥＧＲＳＴＤＩのときには、ステップＳ７５３からステップＳ７５４へ進んで、前回のモータ目標位置ＥＧＲＳＴＤn-1から設定値ＫＥＧＲＭ（例えば、２ｓｔｅｐ）を減算し、今回の制御タイミングにおけるモータ目標位置ＥＧＲＳＴＤとする（ＥＧＲＳＴＤ←ＥＧＲＳＴＤn-1−ＫＥＧＲＭ）。更に、ステップＳ７５５で、今回のモータ目標位置ＥＧＲＳＴＤとテーブル設定の最新モータ目標位置ＥＧＲＳＴＤＩとを比較し、ＥＧＲＳＴＤ≧ＥＧＲＳＴＤＩのときには、ステップＳ７６１へジャンプし、ＥＧＲＳＴＤ＜ＥＧＲＳＴＤＩのとき、ステップＳ７５６で、テーブル設定の最新モータ目標位置ＥＧＲＳＴＤＩを今回の制御タイミングにおけるモータ目標位置ＥＧＲＳＴＤとし（ＥＧＲＳＴＤ←ＥＧＲＳＴＤＩ）、ステップＳ７６１へ進む。
【０２２５】
ステップＳ７６１では、モータ目標位置ＥＧＲＳＴＤが設定値ＫＥＧＲＳＴＰＦＬＳ（例えば、５２ｓｔｅｐ）を越えていないか否かを調べる。そして、ＥＧＲＳＴＤ≦ＫＥＧＲＳＴＰＦＬＳのときには、そのままモータ目標位置を確定してルーチンを抜け、ＥＧＲＳＴＤ＞ＫＥＧＲＳＴＰＦＬＳのとき、ステップＳ７６２でモータ目標位置ＥＧＲＳＴＤを設定値ＫＥＧＲＳＴＰＦＬＳに上限規制し（ＥＧＲＳＴＤ←ＫＥＧＲＳＴＰＦＬＳ）、ルーチンを抜ける。
【０２２６】
そして、演算周期毎にモータ目標位置ＥＧＲＳＴＤを設定値ＫＥＧＲＭずつ減少させ、ステップＳ７５３において、ＥＧＲＳＴＤn-1≦ＥＧＲＳＴＤＩになると、ステップＳ７５７へ進んで、テーブル設定の最新モータ目標位置ＥＧＲＳＴＤＩと前回のモータ目標位置ＥＧＲＳＴＤn-1との差が０〜設定値ＫＥＧＲＨＳ（例えば、２ｓｔｅｐ）の範囲内に収束しているか否かを調べる。設定値ＫＥＧＲＨＳは、適正ＥＧＲ流量を得るための最新モータ目標位置ＥＧＲＳＴＤＩに収束させる際の不感帯を定めるものである。
【０２２７】
その結果、０≦ＥＧＲＳＴＤＩ−ＥＧＲＳＴＤn-1＜ＫＥＧＲＨＳであり、前回のモータ目標位置ＥＧＲＳＴＤn-1が適正ＥＧＲ流量を得るための最新モータ目標位置ＥＧＲＳＴＤＩに収束ないし略収束しているときには、ステップＳ７５７からステップＳ７５８へ進んで、今回の制御タイミングにおけるモータ目標位置ＥＧＲＳＴＤを前回のモータ目標位置ＥＧＲＳＴＤn-1に保持し（ＥＧＲＳＴＤ←ＥＧＲＳＴＤn-1）、ルーチンを抜ける。
【０２２８】
また、ＥＧＲＳＴＤＩ−ＥＧＲＳＴＤn-1≧ＫＥＧＲＨＳであり、前回のモータ目標位置ＥＧＲＳＴＤn-1が不感帯の下にある場合には、ステップＳ７５７からステップ７５９へ進み、前回のモータ目標位置ＥＧＲＳＴＤn-1に設定値ＫＥＧＲＰ（例えば、２ｓｔｅｐ）を加算し、今回の制御タイミングにおけるモータ目標位置ＥＧＲＳＴＤとする（ＥＧＲＳＴＤ←ＥＧＲＳＴＤn-1＋ＫＥＧＲＰ）。そして、ステップＳ７６０で、今回のモータ目標位置ＥＧＲＳＴＤとテーブル設定の最新モータ目標位置ＥＧＲＳＴＤＩとを比較し、ＥＧＲＳＴＤ≦ＥＧＲＳＴＤＩのときには、前述のステップＳ７６１以降で上限規制を行なってルーチンを抜け、ＥＧＲＳＴＤ＞ＥＧＲＳＴＤＩのとき、前述のステップＳ７５６で、テーブル設定の最新モータ目標位置ＥＧＲＳＴＤＩを今回の制御タイミングにおけるモータ目標位置ＥＧＲＳＴＤとし（ＥＧＲＳＴＤ←ＥＧＲＳＴＤＩ）、ステップＳ７６１以降で上限規制を行なってルーチンを抜ける。
【０２２９】
以上の各サブルーチンを含むＥＧＲ制御量算出ルーチンで算出されたＥＧＲ流量に基づくモータ目標位置ＥＧＲＳＴＤを用い、図４９のＥＧＲ駆動ルーチンにより、ステップモータ式ＥＧＲ弁２０が駆動される。このＥＧＲ駆動ルーチンでは、現運転状態に適合する適正ＥＧＲ流量を得るためのモータ目標位置ＥＧＲＳＴＤに対するモータ位置の大小関係に応じ、ＥＧＲ弁２０を逆転或いは正転駆動し、モータ位置がモータ目標位置ＥＧＲＳＴＤに収束するようフィードバック制御する。
【０２３０】
すなわち、ＥＧＲ駆動ルーチンの最初のステップＳ８００では、現在のモータ位置ＥＧＲＳＴＭがモータ目標位置ＥＧＲＳＴＤを越えているか否かを調べる。そして、ＥＧＲＳＴＭ＞ＥＧＲＳＴＤのとき、更に、ステップＳ８０１で、前回ルーチン実行時（本形態においては、４ｍｓｅｃ前）にモータ位置ＥＧＲＳＴＭがモータ目標位置より小さい状態（ＥＧＲＳＴＭ＜ＥＧＲＳＴＤ）であったか否かを調べる。
【０２３１】
その結果、モータ位置ＥＧＲＳＴＭがモータ目標位置ＥＧＲＳＴＤよりも大きい状態が前回から今回まで継続している場合には、ステップＳ８０１からステップＳ８０２へ進んでステップモータを逆転し、ＥＧＲ弁２０を閉じ側に駆動してルーチンを抜ける。また、モータ位置ＥＧＲＳＴＭが前回ルーチン実行時にモータ目標位置ＥＧＲＳＴＤより小さく、今回、モータ位置ＥＧＲＳＴＭがモータ目標位置ＥＧＲＳＴＤよりも大きくなった場合には、ステップＳ８０１からステップＳ８０５へ分岐し、前回の出力を保持してルーチンを抜ける。すなわち、モータ目標位置に対する実際のモータ位置が前回と今回とで反転した場合には、一時的な外乱等の影響に起因した比較結果の反転を考慮し、出力を保持して制御ハンチングを防止し、ＥＧＲ制御性を向上する。
【０２３２】
一方、ステップＳ８００において、ＥＧＲＳＴＭ≦ＥＧＲＳＴＤのときには、ステップＳ８０３で、現在のモータ位置ＥＧＲＳＴＭがモータ目標位置ＥＧＲＳＴＤより小さいか否かを調べる。そして、現在のモータ位置ＥＧＲＳＴＭがモータ目標位置ＥＧＲＳＴＤより大きくも小さくもなく、モータ目標位置ＥＧＲＳＴＤに一致している（ＥＧＲＳＴＭ＝ＥＧＲＳＴＤ）ときには、前述のステップＳ８０５で出力値を保持してルーチンを抜け、ＥＧＲＳＴＭ＜ＥＧＲＳＴＤのとき、更に、ステップ８０４で、前回ルーチン実行時にモータ位置ＥＧＲＳＴＭがモータ目標位置より大きい状態（ＥＧＲＳＴＭ＞ＥＧＲＳＴＤ）であったか否かを調べる。
【０２３３】
その結果、前回ルーチン実行時にモータ位置ＥＧＲＳＴＭがモータ目標位置ＥＧＲＳＴＤより大きく、今回、モータ位置ＥＧＲＳＴＭがモータ目標位置ＥＧＲＳＴＤよりも小さくなった場合には、ステップＳ８０４からステップＳ８０５へ分岐し、前回の出力を保持してルーチンを抜ける。すなわち、前述のステップＳ８０１で、モータ位置ＥＧＲＳＴＭが前回ルーチン実行時にモータ目標位置ＥＧＲＳＴＤより小さく、今回、モータ位置ＥＧＲＳＴＭがモータ目標位置ＥＧＲＳＴＤよりも大きくなった場合と同様、一時的な外乱等の影響に起因した比較結果の反転を考慮し、出力を保持して制御ハンチングを防止し、ＥＧＲ制御性を向上する。
【０２３４】
また、ステップＳ８０４においてＥＧＲＳＴＭ≦ＥＧＲＳＴＤの場合、すなわち、モータ位置ＥＧＲＳＴＭがモータ目標位置ＥＧＲＳＴＤ以下の状態が前回から今回まで継続している場合には、ステップＳ８０４からステップＳ８０６へ進んでステップモータを正転し、ＥＧＲ弁２０を開き側に駆動してルーチンを抜ける。
【０２３５】
以上のモータ目標位置ＥＧＲＳＴＤへのフィードバック制御を、サージレベルとＥＧＲリミットガード目標値ＦＬＥＧＤとモータ目標位置との関係を示す図５０を用いて説明する。
【０２３６】
ＥＧＲ実施可能と判定されると、エンジン回転数とエンジン負荷とに基づく基本ＥＧＲ流量ＥＬＢＡＳＥにＥＧＲ許可係数ＰＦＬＥＧＤに基づくＥＧＲリミット値ＦＬＥＧＤＢを乗算して求められるＥＧＲ流量ＦＩＭＥＧＲに従い、ステップモータ式ＥＧＲ弁２０のモータ目標位置ＥＧＲＳＴＤが所定位置に設定され、ＥＧＲが開始される。そして、ＥＧＲ開始後、微小サージが発生してサージレベルが０から１に変化すると、設定値ＫＴＳＦＩＬＤ３により定まる所定時間だけＥＧＲリミットガード目標値ＦＬＥＧＤの増加更新が中止され、この中止期間が過ぎると安定指標パラメータＳＦＩＬＤＮが参照される。この時点では、安定指標パラメータＳＦＩＬＤＮに微小サージが与える影響は小さく、安定指標パラメータＳＦＩＬＤＮが判定値ＫＦＬＥＵＰＳＦ以下であるため、ＥＧＲリミットガード目標値ＦＬＥＧＤの増加更新量を大きくして増加速度を上昇させ、このＥＧＲリミットガード目標値ＦＬＥＧＤの増加に追従してモータ目標位置ＥＧＲＳＴＤを変更し、ＥＧＲ流量を増加させる。
【０２３７】
その後、微小サージ発生の影響が安定指標パラメータＳＦＩＬＤＮに反映され、ＳＦＩＬＤＮ＞ＫＦＬＥＵＰＳＦになると、ＥＧＲリミットガード目標値ＦＬＥＧＤの増加更新量が小さく抑えられてモータ目標位置ＥＧＲＳＴＤの更新が抑えられ、ＥＧＲ流量の増加を進めることによる回転変動の悪化が防止される。
【０２３８】
そして、ＥＧＲリミットガード目標値ＦＬＥＧＤが上限値ＫＦＬＥＧＤＭＸに達すると、ＥＧＲリミットガード目標値ＦＬＥＧＤが上限値ＫＦＬＥＧＤＭＸに規制されてモータ目標位置ＥＧＲＳＴＤが対応する位置に規制され、ＥＧＲ流量の増加が止められる。
【０２３９】
このような状態で、大きなサージが発生してサージレベルが１から３に変化すると、サージを解消すべく、直ちにＥＧＲリミットガード目標値ＦＬＥＧＤが設定値ＫＳＦＩＬＤ３１だけ小さくされ、モータ目標位置ＥＧＲＳＴＤが小さくされてＥＧＲ流量を迅速に減少させる。このＥＧＲリミットガード目標値ＦＬＥＧＤの減少更新後は、設定値ＫＴＳＦＩＬＤ４により定まる所定時間だけ、ＥＧＲリミットガード目標値ＦＬＥＧＤの増加更新が中止され、この中止期間後、指標最大値ＦＩＬＤＭＰＭＡＸの値からサージが解消されたと判断されると、再び、安定指標パラメータＳＦＩＬＤＮの評価によってＥＧＲリミットガード目標値ＦＬＥＧＤの増加更新が開始される。このときには、ＳＦＩＬＤＮ＞ＫＦＬＥＵＰＳＦであり、ＥＧＲリミットガード目標値ＦＬＥＧＤの増加更新量は小さい。そして、サージの解消によってサージレベル指標値ＤＦＩＬＤＭＰがＤＦＩＬＭＰ≦０になると、サージレベルが０に初期化される。
【０２４０】
このサージレベルが０の状態で、再び微小サージが発生し、サージレベルが０から１に変化すると、前述したように、設定値ＫＴＳＦＩＬＤ３により定まる所定時間だけＥＧＲリミットガード目標値ＦＬＥＧＤの増加更新が中止される。この中止期間中にサージが大きくなり、サージレベルが１から２に変化すると、設定値ＫＳＦＩＬＤ２１だけＥＧＲリミットガード目標値ＦＬＥＧＤが減少更新され、設定値ＫＴＳＦＩＬＤ４により定まる所定時間だけ保持される（ＥＧＲリミットガード目標値ＦＬＥＧＤの増加更新中止）。
【０２４１】
また、この設定値ＫＴＳＦＩＬＤ４により定まる期間中にサージが大きくなり、サージレベル２からサージレベル３に変化すると、ＥＧＲリミットガード目標値ＦＬＥＧＤが更に設定値ＫＳＦＩＬＤ３２だけ減少され、この減少更新後、同様に、設定値ＫＴＳＦＩＬＤ４により定まる時間、ＥＧＲリミットガード目標値ＦＬＥＧＤの増加更新が中止される。
【０２４２】
そして、これらの設定値ＫＳＦＩＬＤ２１，ＫＳＦＩＬＤ３２によるＥＧＲリミットガード目標値ＦＬＥＧＤの減少更新によるＥＧＲ流量の減少によりサージが解消し、サージレベルが０に初期化されて増加更新中止期間を過ぎると、再び、安定指標パラメータＳＦＩＬＤＮの評価によってＥＧＲリミットガード目標値ＦＬＥＧＤが上限値ＫＦＬＥＧＤＭＸに向かって増加更新され、モータ目標位置ＥＧＲＳＴＤのステップ数が増加更新されてＥＧＲ流量が増加される。
【０２４３】
【発明の効果】
以上説明したように本発明によれば、サージの度合いを考慮して排気ガス還流量を緻密に制御することができ、サージの許容範囲内で最大限の排気還流を可能として排気エミッションの向上に寄与することができる。
【図面の簡単な説明】
【図１】エンジンの全体概略図
【図２】クランクロータとクランク角センサの正面図
【図３】カムロータと気筒判別センサの正面図
【図４】クランクパルス、気筒判別パルス、燃焼行程気筒、点火信号、及びインジェクタ駆動信号の関係を示すタイムチャート
【図５】電子制御系の回路構成図
【図６】気筒判別／エンジン回転数算出ルーチンのフローチャート
【図７】サージレベル検出ルーチンのフローチャート
【図８】指標値演算サブルーチンのフローチャート
【図９】デジタルフィルタ処理の説明図
【図１０】サージレベル指標値算出サブルーチンのフローチャート（その１）
【図１１】サージレベル指標値算出サブルーチンのフローチャート（その２）
【図１２】指標最大値の説明図
【図１３】指標最大値減衰量テーブルの説明図
【図１４】指標最大値張り付き判定の説明図
【図１５】サージレベル判定閾値設定サブルーチンのフローチャート（その１）
【図１６】サージレベル判定閾値設定サブルーチンのフローチャート（その２）
【図１７】サージレベル判定閾値設定サブルーチンのフローチャート（その３）
【図１８】小サージレベル判定閾値の説明図
【図１９】中サージレベル判定閾値の説明図
【図２０】大サージレベル判定閾値の説明図
【図２１】サージレベル検出サブルーチンのフローチャート
【図２２】ＥＧＲ制御量算出ルーチンのフローチャート
【図２３】ＥＧＲ実施可能判定サブルーチンのフローチャート（その１）
【図２４】ＥＧＲ実施可能判定サブルーチンのフローチャート（その２）
【図２５】ＥＧＲ実施可能判定サブルーチンのフローチャート（その３）
【図２６】ＥＧＲ実施可能判定サブルーチンのフローチャート（その４）
【図２７】ＥＧＲ実施可能判定サブルーチンのフローチャート（その５）
【図２８】ＥＧＲ実施可能判定サブルーチンのフローチャート（その６）
【図２９】ＥＧＲ実施可能判定サブルーチンのフローチャート（その７）
【図３０】ＥＧＲ実施可能判定条件の説明図
【図３１】ＥＧＲリミットガード目標値更新条件判定サブルーチンのフローチャート（その１）
【図３２】ＥＧＲリミットガード目標値更新条件判定サブルーチンのフローチャート（その２）
【図３３】ＥＧＲリミットガード目標値更新条件判定サブルーチンのフローチャート（その３）
【図３４】ＥＧＲリミットガード目標値更新条件判定サブルーチンのフローチャート（その４）
【図３５】ＥＧＲリミットガード目標値更新条件判定サブルーチンのフローチャート（その５）
【図３６】ＥＧＲリミットガード目標値更新条件判定サブルーチンのフローチャート（その６）
【図３７】ＥＧＲリミットガード目標値更新条件判定の説明図
【図３８】ＥＧＲリミットガード目標値更新サブルーチンのフローチャート（その１）
【図３９】ＥＧＲリミットガード目標値更新サブルーチンのフローチャート（その２）
【図４０】ＥＧＲリミットガード目標値更新サブルーチンのフローチャート（その３）
【図４１】ＥＧＲリミットガード目標値更新サブルーチンのフローチャート（その４）
【図４２】安定指標パラメータ算出ルーチンのフローチャート
【図４３】回転補正係数テーブルの説明図
【図４４】ＥＧＲリミット値設定サブルーチンのフローチャート（その１）
【図４５】ＥＧＲリミット値設定サブルーチンのフローチャート（その２）
【図４６】ＥＧＲ禁止／許可によるＥＧＲ許可係数の変化を示す説明図
【図４７】ＥＧＲ流量算出サブルーチンのフローチャート
【図４８】モータ目標位置算出サブルーチンのフローチャート
【図４９】ＥＧＲ駆動ルーチンのフローチャート
【図５０】サージレベルとＥＧＲリミットガード目標値とモータ目標位置との関係を示すタイムチャート
【符号の説明】
１    エンジン
２０  ＥＧＲ弁（流量制御弁）
５０  電子制御装置（サージレベル指標値算出手段、サージレベル判定手段、制御手段）
ＤＦＩＬＤＭＰ      サージレベル指標値
ＳＦＩＬＤＮ        安定指標パラメータ
ＦＩＬＤＭＰＭＡＸ  指標最大値（サージレベル指標値を算出する際のパラメータ）
ＥＬＢＡＳＥ        基本ＥＧＲ流量（基本排気ガス還流量）
ＦＬＥＧＤ          ＥＧＲリミットガード目標値（サージレベルの変化及びサージレベルに基づいて増減される目標値）
ＦＬＥＧＤＢ        ＥＧＲリミット値（リミット値）
ＥＧＲＳＴＤ        モータ目標位置
ＥＧＲＳＴＭ        モータ位置
ＰＦＬＥＧＤ        ＥＧＲ許可係数（許可係数）
【図１】
0004531945.tif 000002
【図２】
0004531945.tif 000003
【図３】
0004531945.tif 000004
【図４】
0004531945.tif 000005
【図５】
0004531945.tif 000006
【図６】
0004531945.tif 000007
【図７】
0004531945.tif 000008
【図８】
0004531945.tif 000009
【図９】
0004531945.tif 000010
【図１０】
0004531945.tif 000011
【図１１】
0004531945.tif 000012
【図１２】
0004531945.tif 000013
【図１３】
0004531945.tif 000014
【図１４】
0004531945.tif 000015
【図１５】
0004531945.tif 000016
【図１６】
0004531945.tif 000017
【図１７】
0004531945.tif 000018
【図１８】
0004531945.tif 000019
【図１９】
0004531945.tif 000020
【図２０】
0004531945.tif 000021
【図２１】
0004531945.tif 000022
【図２２】
0004531945.tif 000023
【図２３】
0004531945.tif 000024
【図２４】
0004531945.tif 000025
【図２５】
0004531945.tif 000026
【図２６】
0004531945.tif 000027
【図２７】
0004531945.tif 000028
【図２８】
0004531945.tif 000029
【図２９】
0004531945.tif 000030
【図３０】
0004531945.tif 000031
【図３１】
0004531945.tif 000032
【図３２】
0004531945.tif 000033
【図３３】
0004531945.tif 000034
【図３４】
0004531945.tif 000035
【図３５】
0004531945.tif 000036
【図３６】
0004531945.tif 000037
【図３７】
0004531945.tif 000038
【図３８】
0004531945.tif 000039
【図３９】
0004531945.tif 000040
【図４０】
0004531945.tif 000041
【図４１】
0004531945.tif 000042
【図４２】
0004531945.tif 000043
【図４３】
0004531945.tif 000044
【図４４】
0004531945.tif 000045
【図４５】
0004531945.tif 000046
【図４６】
0004531945.tif 000047
【図４７】
0004531945.tif 000048
【図４８】
0004531945.tif 000049
【図４９】
0004531945.tif 000050
【図５０】
0004531945.tif 000051