(57)【要約】    【課題】  点火時期の補正と、作動気筒数の制御（一部気筒運転とするか、全筒運転とするかの選択）とを適切に行い、トルクショックを抑制することができる内燃機関の制御装置を提供する。    【解決手段】  内燃機関で発生するノッキングを検出し、そのノッキング検出結果に応じて点火時期の遅角係数ＫＩＧＫＮが算出される。全筒運転中に遅角係数ＫＩＧＫＮのなまし演算を行うことにより、学習値ＫＩＧＫＲＥＦＥまたはＫＩＧＫＲＥＦが算出される。一部気筒運転において、遅角補正係数ＫＩＧＫＮは、学習値ＫＩＧＫＲＥＦＥまたはＫＩＧＫＲＥＦに所定加算値ＤＫＩＧＫＣＳを加算した値に設定される。【選択図】  図２０
2008223768.tif 000002
【特許請求の範囲】
【請求項１】
複数気筒を有し、前記複数気筒の全てを作動させる全筒運転と、前記複数気筒のうち一部気筒の作動を休止させる一部気筒運転とを切換える切換手段を備えた内燃機関の制御装置において、
前記機関の運転パラメータを含む、前記機関により駆動される車両の運転パラメータを検出する運転パラメータ検出手段と、
前記運転パラメータ検出手段により検出される運転パラメータに応じて前記全筒運転または一部気筒運転を前記切換手段に指令する指令手段と、
前記機関のノッキングを検出するノッキング検出手段と、
前記機関の運転パラメータに応じて前記機関の点火時期を制御する点火時期制御手段と、
前記ノッキング検出手段の検出結果に応じて前記点火時期を遅角方向に補正する補正量を算出し、該補正量により前記点火時期を補正する補正手段と、
前記全筒運転中に、前記補正量のなまし演算を行うことにより学習値を算出する学習値算出手段と、
前記一部気筒運転中は、前記点火時期の補正量を前記学習値に所定加算値を加算した値に設定する制限手段とを備えることを特徴とする内燃機関の制御装置。
【請求項２】
前記切換手段による切換時における前記機関の出力トルクの変動を抑制するように前記機関の吸入空気量を制御する吸入空気量制御手段をさらに備えることを特徴とする請求項１に記載の内燃機関の制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、内燃機関の制御装置に関し、特に複数気筒を有する内燃機関の一部気筒の作動を休止させる気筒休止機構を備えた内燃機関の制御装置に関する。
【背景技術】
【０００２】
気筒休止機構を備えた内燃機関において、一部気筒運転から全筒運転への移行、またはその逆の移行を行うと、トルクショックが発生するため、特許文献１には、このようなトルクショックが発生しないように、スロットル弁の開度を制御する制御装置が示されている。この装置によれば、アクセルペダルの操作量に対応するスロットル弁開度を算出するために、全筒運転用のスロットル弁開度演算テーブルと、一部気筒運転用のスロットル弁開度演算テーブルとを使用し、一部気筒運転から全筒運転への移行、またはその逆の移行時に使用するテーブルを切り換えることが行われる。
【０００３】
【特許文献１】特開昭６２−１０３４３０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上記従来の制御装置では、トルクショックを防止するためスロットル弁開度制御において、点火時期の変更によるトルク変動を考慮していないため、以下のような課題があった。
【０００５】
機関のノッキングを検出し、その検出結果に応じて点火時期が補正される場合において、例えば低オクタン価の燃料を使用しているときには、点火時期がノッキングの発生状態に応じて、遅角されたり、進角されたりする。また一部気筒運転中においては、全筒運転時に比べて一気筒当たりの負荷が大きくなるため、ノッキングが発生し易く、また点火時期の変化に起因するトルク変化が大きい。そのため、上記従来の制御装置では、点火時期の補正に伴うトルク変動が発生し、トルクショックを十分に低減できない場合があった。
【０００６】
本発明はこの点に着目してなされたものであり、点火時期の補正と、作動気筒数の制御（一部気筒運転とするか、全筒運転とするかの選択）とを適切に行い、トルクショックを抑制することができる内燃機関の制御装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するため請求項１に記載の発明は、複数気筒を有し、前記複数気筒の全てを作動させる全筒運転と、前記複数気筒のうち一部気筒の作動を休止させる一部気筒運転とを切換える切換手段（３０）を備えた内燃機関の制御装置において、前記機関の運転パラメータを含む、前記機関により駆動される車両の運転パラメータ（ＴＷ，ＶＰ，ＧＰ，ＴＨ，ＴＡ，ＮＥ，ＰＢＡ）を検出する運転パラメータ検出手段と、前記運転パラメータ検出手段により検出される運転パラメータに応じて前記全筒運転または一部気筒運転を前記切換手段（３０）に指令する指令手段と、前記機関のノッキングを検出するノッキング検出手段（１１，５１，５２，５３）と、前記機関の運転パラメータに応じて前記機関の点火時期（ＩＧＣＭＤ）を制御する点火時期制御手段と、前記ノッキング検出手段の検出結果に応じて前記点火時期を遅角方向に補正する補正量（ＫＩＧＫＮ）を算出し、該補正量（ＫＩＧＫＮ）により前記点火時期を補正する補正する補正手段と、前記全筒運転中に、前記補正量（ＫＩＧＫＮ）のなまし演算を行うことにより学習値（ＫＩＧＫＲＥＦＥ，ＫＩＧＫＲＥＦ）を算出する学習値算出手段と、前記一部気筒運転中は、前記点火時期の補正量（ＫＩＧＫＮ）を前記学習値（ＫＩＧＫＲＥＦＥ，ＫＩＧＫＲＥＦ）に所定加算値（ＤＫＩＧＫＣＳ）を加算した値に設定する制限手段とを備えることを特徴とする。
【０００８】
請求項２に記載の発明は、請求項１に記載の内燃機関の制御装置において、前記切換手段による切換時における前記機関の出力トルクの変動を抑制するように前記機関の吸入空気量を制御する吸入空気量制御手段（図８及び図９の処理）をさらに備えることを特徴とする。
【発明の効果】
【０００９】
請求項１に記載の発明によれば、ノッキング検出手段の検出結果に応じて点火時期を遅角方向に補正する補正量が算出されるとともに、全筒運転中に算出された補正量のなまし演算を行うことにより学習値が算出され、一部気筒運転中の補正量が学習値に所定加算値を加算した値に設定される。補正量の学習値は使用している燃料のオクタン価に応じた値となるので、一部気筒運転中の補正量を学習値に所定加算値を加算した値に設定することにより、一部気筒運転中においてもノッキングの発生を確実に抑制することができるとともに、点火時期補正量の変化に起因するトルク変化を防止することができる。
【００１０】
請求項２に記載の発明によれば、作動気筒数の切換時に機関の出力トルクの変動を抑制するように機関の吸入空気量が制御されるので、作動気筒数の変更に伴うトルクショックを抑制することができる。
【発明を実施するための最良の形態】
【００１１】
以下本発明の実施の形態を図面を参照して説明する。
（第１の実施形態）
図１は本発明の第１の実施形態にかかる内燃機関及びその制御装置の構成を示す図である。Ｖ型６気筒の内燃機関（以下単に「エンジン」という）１は、＃１，＃２及び＃３気筒が設けられた右バンクと、＃４，＃５及び＃６気筒が設けられた左バンクとを備え、右バンクには＃１〜＃３気筒を一時的に休止させるための気筒休止機構３０が設けられている。図２は、気筒休止機構３０を油圧駆動するための油圧回路とその制御系を示す図であり、この図も図１と合わせて参照する。
【００１２】
エンジン１の吸気管２の途中にはスロットル弁３が配されている。スロットル弁３には、スロットル弁３の開度ＴＨを検出するスロットル弁開度センサ４が設けられており、その検出信号が電子制御ユニット（以下「ＥＣＵ」という）５に供給される。スロットル弁３には、スロットル弁３を駆動するアクチュエータ２４が接続されており、アクチュエータ２４は、ＥＣＵ５によりその作動が制御される。
【００１３】
燃料噴射弁６は図示しない吸気弁の少し上流側に各気筒毎に設けられており、各噴射弁は図示しない燃料ポンプに接続されていると共にＥＣＵ５に電気的に接続されて当該ＥＣＵ５からの信号により燃料噴射弁６の開弁時間が制御される。
【００１４】
スロットル弁３の直ぐ下流には吸気管内絶対圧（ＰＢＡ）センサ７が設けられており、この絶対圧センサ７により電気信号に変換された絶対圧信号はＥＣＵ５に供給される。また、吸気管内絶対圧センサ７の下流には吸気温（ＴＡ)センサ８が取付けられており、吸気温ＴＡを検出して対応する電気信号をＥＣＵ５に供給する。
【００１５】
エンジン１の本体に装着されたエンジン水温（ＴＷ）センサ９はサーミスタ等から成り、エンジン水温（冷却水温）ＴＷを検出して対応する温度信号を出力してＥＣＵ５に供給する。
ＥＣＵ５には、エンジン１のクランク軸（図示せず）の回転角度を検出するクランク角度位置センサ１０が接続されており、クランク軸の回転角度に応じた信号がＥＣＵ５に供給される。クランク角度位置センサ１０は、エンジン１の特定の気筒の所定クランク角度位置でパルス（以下「ＣＹＬパルス」という）を出力する気筒判別センサ、各気筒の吸入行程開始時の上死点（ＴＤＣ）に関し所定クランク角度前のクランク角度位置で（６気筒エンジンではクランク角１２０度毎に）ＴＤＣパルスを出力するＴＤＣセンサ及びＴＤＣパルスより短い一定クランク角周期（例えば３０度周期）でＣＲＫパルスを発生するＣＲＫセンサから成り、ＣＹＬパルス、ＴＤＣパルス及びＣＲＫパルスがＥＣＵ５に供給される。これらの信号パルスは、燃料噴射時期、点火時期等の各種タイミング制御及びエンジン回転数（エンジン回転速度）ＮＥの検出に使用される。
【００１６】
気筒休止機構３０は、エンジン１の潤滑油を作動油として使用し、油圧駆動される。オイルポンプ３１により加圧された作動油は、油路３２及び吸気側油路３３ｉ，排気側油路３３ｅを介して、気筒休止機構３０に供給される。油路３２と、油路３３ｉ及び３３ｅとの間に、吸気側電磁弁３５ｉ及び排気側電磁弁３５ｅが設けられており、これらの電磁弁３５ｉ，３５ｅはＥＣＵ５に接続されてその作動がＥＣＵ５により制御される。
【００１７】
油路３３ｉ，３３ｅには、作動油圧が所定閾値より低下するとオンする油圧スイッチ３４ｉ，３４ｅが設けられており、その検出信号は、ＥＣＵ５に供給される。また、油路３２の途中には、作動油温ＴＯＩＬを検出する作動油温センサ３３が設けられており、その検出信号がＥＣＵ５に供給される。
【００１８】
気筒休止機構３０の具体的な構成例は、例えば特開平１０−１０３０９７号公報に示されており、本実施形態でも同様の機構を用いている。この機構によれば、電磁弁３５ｉ，３５ｅが閉弁され、油路３３ｉ，３３ｅ内の作動油圧が低いときは、各気筒（＃１〜＃３）の吸気弁及び排気弁が通常の開閉作動を行う一方、電磁弁３５ｉ，３５ｅが開弁され、油路３３ｉ，３３ｅ内の作動油圧が高くなると、各気筒（＃１〜＃３）の吸気弁及び排気弁が閉弁状態を維持する。すなわち、電磁弁３５ｉ，３５ｅの閉弁中は、全ての気筒を作動させる全気筒運転が行われ、電磁弁３５ｉ，３５ｅを開弁させると、＃１〜＃３気筒を休止させ、＃４〜＃６気筒のみ作動させる一部気筒運転が行われる。
【００１９】
吸気管２のスロットル弁３の下流側と、排気管１３との間には、排気還流通路２１が設けられており、排気還流通路２１の途中には排気還流量を制御する排気還流弁（以下「ＥＧＲ弁」という）２２が設けられている。ＥＧＲ弁２２は、ソレノイドを有する電磁弁であり、その弁開度はＥＣＵ５により制御される。ＥＧＲ弁２２には、その弁開度（弁リフト量）ＬＡＣＴを検出するリフトセンサ２３が設けられており、その検出信号はＥＣＵ５に供給される。排気還流通路２１及びＥＧＲ弁２２より、排気還流機構が構成される。
【００２０】
エンジン１の各気筒毎に設けられた点火プラグ１２は、ＥＣＵ５に接続されており、点火プラグ１２の駆動信号、すなわち点火信号がＥＣＵ５から供給される。
エンジン１の適宜の位置に、高周波振動を検出するノックセンサ１１が装着されており、その検出信号がＥＣＵ５に供給される。また、ＥＣＵ５には、大気圧ＰＡを検出する大気圧センサ１４、エンジン１により駆動される車両の走行速度（車速）ＶＰを検出する車速センサ１５、当該車両の変速機のギヤ位置ＧＰを検出するギヤ位置センサ１６、及び当該車両のアクセルペダルの踏み込み量（以下「アクセルペダル操作量」という）ＡＰを検出するアクセルセンサ１７が接続されており、これらのセンサの検出信号がＥＣＵ５に供給される。
【００２１】
ＥＣＵ５は、各種センサからの入力信号波形を整形し、電圧レベルを所定レベルに修正し、アナログ信号値をデジタル信号値に変換する等の機能を有する入力回路、中央演算処理回路（以下「ＣＰＵ」という）、ＣＰＵで実行される各種演算プログラム及び演算結果等を記憶する記憶回路、前記燃料噴射弁６に駆動信号を供給する出力回路等から構成される。ＥＣＵ５は、各種センサの検出信号に基づいて、燃料噴射弁６の開弁時間、点火時期、及びＥＧＲ弁２２の開度を制御するとともに、電磁弁３５ｉ，３５ｅの開閉を行って、エンジン１の全筒運転と、休筒運転との切り換え制御を行う。さらにＥＣＵ５は、アクセルペダル操作量ＡＰに応じてスロットル弁３の目標開度ＴＨＣＭＤを算出し、検出したスロットル弁開度ＴＨが目標開度ＴＨＣＭＤに一致するようにアクチュエータ２４の駆動制御を行う。スロットル弁開度ＴＨを補正することにより、全筒運転と一部気筒運転の切換に伴うトルクショックを抑制する制御が行われる。
【００２２】
さらにＥＣＵ５は、ノックセンサ１１の出力信号に基づいてノッキングの判定を行い、その判定結果に応じて点火時期の補正を行う。
【００２３】
図３は、本実施形態における、ノッキング判定のための回路構成を示すブロック図である。また図４は、本実施形態におけるノッキング判定手法を説明するための信号波形図であり、図４も合わせて参照する。
【００２４】
図３のノッキング判定回路は、アナログ回路部５１と、サブマイクロコンピュータ（以下「サブマイコン」という）５２と、メインマイクロコンピュータ（以下「メインマイコン」という）５３とからなる。本実施形態では、ノックセンサ１１として、共振型ノックセンサが用いられる。
【００２５】
アナログ回路部５１は、バンドパスフィルタ６１と、ゲイン切換回路６２と、整流検波回路６３及び６４とを備えている。ノックセンサ１１の出力（図４のノックセンサ出力波形参照）は、バンドパスフィルタ６１を介してゲイン切換回路６２及び整流検波回路６４に入力される。ゲイン切換回路６２は、エンジン１の高回転領域でゲインが１／２倍となり、低回転領域でゲインが４倍となるように、メインマイコン５３からの制御信号によりに切換られる。ゲイン切換回路６２の出力信号は、整流検波回路６３に入力される。
【００２６】
整流検波回路６３は、ノックレベル（ノッキング判定のための信号レベル）を検出するための信号ＫＮＳをサブマイコン５２に入力し、整流検波回路６４は、ノイズレベルを検出するための信号ＮＯＳをサブマイコン５２に入力する（図４、整流検波波形参照）。サブマイコン５２は、Ａ／Ｄ変換機能を有し、図４に示すノックゲート期間ＴＧＫ中における、信号ＫＮＳの最大値を、ノックレベルＫＳＭＡＸとして検出する。さらにサブマイコン５２は、ノイズゲート期間ＴＧＮ１及びＴＧＮ２におけるノイズレベルの最大値ＮＺＭＡＸ及び最小値ＮＺＭＩＮを検出する。ノックゲート期間ＴＧＫを示すノックゲート信号ＳＧＫ及びノイズゲート期間ＴＧＮ１及びＴＧＮ２を示すノイズゲート信号ＳＧＮは、メインマイコン５３からサブマイコン５２に供給される。
【００２７】
メインマイコン５３は、ＴＤＣパルス及びＣＲＫパルスに応じてノックゲート信号ＳＧＫ及びノイズゲート信号ＳＧＮを生成するとともに、図１１に示すノッキング判定処理を実行する。
【００２８】
図５は、一部の気筒を休止させる気筒休止（一部気筒運転）の実行条件を判定する処理のフローチャートである。この処理はＥＣＵ５のメインマイコン５３で所定時間（例えば１０ミリ秒）毎に実行される。
ステップＳ２１１では、始動モードフラグＦＳＴＭＯＤが「１」であるか否かを判別し、ＦＳＴＭＯＤ＝１であってエンジン１の始動（クランキング）中であるときは、検出したエンジン水温ＴＷを始動モード水温ＴＷＳＴＭＯＤとして記憶する（ステップＳ２１３）。次いで、始動モード水温ＴＷＳＴＭＯＤに応じて図６に示すＴＭＴＷＣＳＤＬＹテーブルを検索し、遅延時間ＴＭＴＷＣＳＤＬＹを算出する。ＴＭＴＷＣＳＤＬＹテーブルは、始動モード水温ＴＷＳＴＭＯＤが第１所定水温ＴＷ１（例えば４０℃）以下の範囲では、遅延時間ＴＭＴＷＣＳＤＬＹが所定遅延時間ＴＤＬＹ１（例えば２５０秒）に設定され、始動モード水温ＴＷＳＴＭＯＤが第１所定水温ＴＷ１（例えば４０℃）より高く第２所定水温ＴＷ２（例えば６０℃）以下の範囲では、始動モード水温ＴＷＳＴＭＯＤが高くなるほど遅延時間ＴＭＴＷＣＳＤＬＹが減少するように設定され、始動モード水温ＴＷＳＴＭＯＤが第２所定水温ＴＷ２より高い範囲では、遅延時間ＴＭＴＷＣＳＤＬＹは「０」に設定されている。
【００２９】
続くステップＳ２１５では、ダウンカウントタイマＴＣＳＷＡＩＴを遅延時間ＴＭＴＷＣＳＤＬＹに設定してスタートさせ、気筒休止フラグＦＣＹＬＳＴＰを「０」に設定する（ステップＳ２２５）。これは気筒休止の実行条件が不成立であることを示す。
【００３０】
ステップＳ２１１でＦＳＴＭＯＤ＝０であって通常運転モードであるときは、エンジン水温ＴＷが気筒休止判定温度ＴＷＣＳＴＰ（例えば７５℃）より高いか否かを判別する（ステップＳ２１２）。ＴＷ≦ＴＷＣＳＴＰであるときは、実行条件不成立と判定し、前記ステップＳ２１４に進む。エンジン水温ＴＷが気筒休止判定温度ＴＷＣＳＴＰより高いときは、ステップＳ２１２からステップＳ２１６に進み、ステップＳ２１５でスタートしたタイマＴＣＳＷＡＩＴの値が「０」であるか否かを判別する。ＴＣＳＷＡＩＴ＞０である間は、前記ステップＳ２４に進み、ＴＣＳＷＡＩＴ＝０となると、ステップＳ２１７に進む。
【００３１】
ステップＳ２１７では、後述する図１９及び図２０の処理により算出される遅角係数ＫＩＧＫＮが所定係数値ＫＩＧＫＮＣＳＸ（例えば「１．０」であって、オクタン価９０程度の燃料に対応する値）以下か否かを判別する。遅角係数ＫＩＧＫＮは、ノッキング判定結果に応じて設定される。より具体的には、ノッキングが発生するときは、遅角係数ＫＩＧＫＮは、増加する方向（遅角方向）に更新され、ノッキングが発生しないときは、遅角係数ＫＩＧＫＮは、減少する方向（進角方向）に更新される。ステップＳ２１７の答が否定（ＮＯ）であって、ノッキングの発生頻度が高く、点火時期の遅角補正量が大きいときは、一部気筒運転を禁止すべく前記ステップＳ２２５に進む。
これにより、作動気筒数の変更に伴うトルクショックと、点火時期の補正に伴うトルク変化とが重なることがなく、トルクショックを効果的に抑制することができる。
【００３２】
ステップＳ２１８では、車速ＶＰ及びギヤ位置ＧＰに応じて図７に示すＴＨＣＳテーブルを検索し、ステップＳ２１９の判別に使用する上側閾値ＴＨＣＳＨ及び下側閾値ＴＨＣＳＬを算出する。図７において、実線が上側閾値ＴＨＣＳＨに対応し、破線が下側閾値ＴＨＣＳＬに対応する。ＴＨＣＳテーブルは、ギヤ位置ＧＰ毎に設定されており、各ギヤ位置（２速〜５速）において、大まかには車速ＶＰが増加するほど、上側閾値ＴＨＣＳＨ及び下側閾値ＴＨＣＳＬが増加するように設定されている。ただし、ギヤ位置ＧＰが２速のときは、車速ＶＰが変化しても上側閾値ＴＨＣＳＨ及び下側閾値ＴＨＣＳＬは一定に維持される領域が設けられている。またギヤ位置ＧＰが１速のときは、常に全筒運転を行うので、上側閾値ＴＨＣＳＨ及び下側閾値ＴＨＣＳＬは例えば「０」に設定される。また車速ＶＰが同一であれば、低速側ギヤ位置ＧＰに対応する閾値（ＴＨＣＳＨ，ＴＨＣＳＬ）の方が、高速側ギヤ位置ＧＰに対応する閾値（ＴＨＣＳＨ，ＴＨＣＳＬ）より大きな値に設定されている。
【００３３】
ステップＳ２１９では、スロットル弁開度ＴＨが閾値ＴＨＣＳより小さいか否かの判別をヒステリシスを伴って行う。具体的には、気筒休止フラグＦＣＹＬＳＴＰが「１」であるときは、スロットル弁開度ＴＨが増加して上側閾値ＴＨＣＳＨに達すると、ステップＳ２１９の答が否定（ＮＯ）となり、気筒休止フラグＦＣＹＬＳＴＰが「０」であるときは、スロットル弁開度ＴＨが減少して下側閾値ＴＨＣＳＬを下回ると、ステップＳ２１９の答が肯定（ＹＥＳ）となる。
【００３４】
ステップＳ２１９の答が肯定（ＹＥＳ）であるときは、大気圧ＰＡが所定圧ＰＡＣＳ（例えば８６．６ｋＰａ（６５０ｍｍＨｇ））以上であるか否かを判別し（ステップＳ２２０）、その答が肯定（ＹＥＳ）であるとき、吸気温ＴＡが所定下限温度ＴＡＣＳＬ（例えば−１０℃）以上であるか否かを判別し（ステップＳ２２１）、その答が肯定（ＹＥＳ）であるときは、吸気温ＴＡが所定上限温度ＴＡＣＳＨ（例えば４５℃）より低いか否かを判別し（ステップＳ２２２）、その答が肯定（ＹＥＳ）であるときは、エンジン回転数ＮＥが所定回転数ＮＥＣＳより低いか否かを判別する（ステップＳ２２３）。ステップＳ２２３の判別は、ステップＳ２１９と同様にヒステリシスを伴って行われる。すなわち、気筒休止フラグＦＣＹＬＳＴＰが「１」であるときは、エンジン回転数ＮＥが増加して上側回転数ＮＥＣＳＨ（例えば３５００ｒｐｍ）に達すると、ステップＳ２２３の答が否定（ＮＯ）となり、気筒休止フラグＦＣＹＬＳＴＰが「０」であるときは、エンジン回転数ＮＥが減少して下側回転数ＮＥＣＳＬ（例えば３３００ｒｐｍ）を下回ると、ステップＳ２２３の答が肯定（ＹＥＳ）となる。
【００３５】
ステップＳ２１９〜Ｓ２２３の何れかの答が否定（ＮＯ）であるときは、気筒休止の実行条件が不成立と判定し、前記ステップＳ２２５に進む。一方ステップＳ２１９〜Ｓ２２３の答がすべて肯定（ＹＥＳ）であるときは、気筒休止の実行条件が成立していると判定し、気筒休止フラグＦＣＹＬＳＴＰを「１」に設定する（ステップＳ２２４）。
【００３６】
気筒休止フラグＦＣＹＬＳＴＰが「１」に設定されているときは、＃１〜＃３気筒を休止させ、＃４〜＃６気筒を作動させる一部気筒運転が実行され、気筒休止フラグＦＣＹＬＳＴＰが「０」に設定されているときは、全気筒＃１〜＃６を作動させる全筒運転が実行される。
【００３７】
図８及び図９は、スロットル弁の目標開度ＴＨＣＭＤを算出する処理のフローチャートである。この処理は、ＥＣＵ５のメインマイコン５３で所定時間（例えば１０ミリ秒）毎に実行される。
ステップＳ２３１では、アクセルペダル操作量ＡＰに応じて基本目標開度ＴＨＯＮＬを算出する。基本目標開度ＴＨＯＮＬは、アクセルペダル操作量ＡＰにほぼ比例するように設定される。ステップＳ２３２では、エンジン回転数ＮＥ及びスロットル弁開度ＴＨに応じてＴＲＱＢＡＳＥマップ（図示せず）を検索し、エンジン１の基本目標トルクＴＲＱＡＳＥを算出する。ＴＲＱＢＡＳＥマップは、エンジン回転数ＮＥ及びスロットル弁開度ＴＨを変化させて、全筒運転時のエンジン１の出力トルクを測定することにより、予め設定されている。
【００３８】
ステップＳ２３３では、気筒休止フラグＦＣＹＬＳＴＰが「０」であるか否かを判別する。ＦＣＹＬＳＴＰ＝０であって全筒運転中であるときは、気筒休止フラグＦＣＹＬＳＴＰが前回「１」であったか否かを判別する（ステップＳ２３４）。この答が肯定（ＹＥＳ）、すなわち一部気筒運転から全筒運転への移行直後であるときは、第１移行フラグＦＰＴＴＯＡＬを「１」に設定する（ステップＳ２３５）。次いでエンジン回転数ＮＥ及び吸気管内絶対圧ＰＢＡに応じてＤＣＳＴＲＱＤマップを検索し、減算補正項ＤＣＳＴＲＱＤを算出する（ステップＳ２３６）。ＤＣＳＴＲＱＤマップは、エンジン回転数ＮＥが高くなるほど、また吸気管内絶対圧ＰＢＡが高くなるほど、減算補正項ＤＣＳＴＲＱＤが大きくなるように設定されている。
【００３９】
ステップＳ２３７では、下記式に基本目標トルクＴＲＱＢＡＳＥ及び減算補正項ＤＣＳＴＲＱＤを適用して、目標トルクＴＲＱＥＮＧを算出する。
ＴＲＱＥＮＧ＝ＴＲＱＢＡＳＥ−ＤＣＳＴＲＱＤ
続くステップＳ２６０では、エンジン回転数ＮＥ及び目標トルクＴＲＱＥＮＧに応じて全筒運転用のＴＲＱＴＨマップ（図示せず）を検索し、目標トルクＴＲＱＥＮＧを出力するのに必要な要求スロットル弁開度ＴＲＱＴＨを算出する。全筒運転用のＴＲＱＴＨマップは、ステップＳ２３２で検索されるＴＲＱＢＡＳＥマップと実質的の同一内容のマップである。すなわち、ＴＲＱＢＡＳＥマップは、エンジン回転数ＮＥ及びスロットル弁開度ＴＨから基本目標トルクＴＲＱＢＡＳＥを算出するように設定されており、全筒運転用のＴＲＱＴＨマップは、エンジン回転数ＮＥ及び目標トルクＴＲＱＥＮＧから、要求スロットル弁開度ＴＲＱＴＨを算出するように設定されている。
ステップＳ２６１では、目標開度ＴＨＣＭＤを、ステップＳ２６０で算出した要求スロットル弁開度ＴＲＱＴＨに設定する。
【００４０】
ステップＳ２３４の答が否定（ＮＯ）、すなわち前回以前から全筒運転が行われているときは、第１移行フラグＦＰＴＴＯＡＬが「１」であるか否かを判別する（ステップＳ２３８）。最初はＦＰＴＴＯＡＬ＝１であるので、ステップＳ２３９に進み、下記式により目標トルクＴＲＱＥＮＧを漸増させる。
ＴＲＱＥＮＧ＝ＴＲＱＥＮＧ＋ＤＴＲＱＥＮＧＤ
ここで、ＤＴＲＱＥＮＧＤは、所定加算値である。
【００４１】
ステップＳ２４０では、目標トルクＴＲＱＥＮＧが基本目標トルクＴＲＱＢＡＳＥより小さいか否かを判別し、ＴＲＱＥＮＧ＜ＴＲＱＢＡＳＥであるときは、前記ステップＳ２６０に進む。ステップＳ２６０では、全筒運転用のＴＲＱＴＨマップを用いて要求スロットル弁開度ＴＲＱＴＨが算出される。目標トルクＴＲＱＥＮＧが基本目標トルクＴＲＱＢＡＳＥ以上であるときは、ステップＳ２４１に進み、第１移行フラグＦＰＴＴＯＡＬを「０」に設定する。次いで、目標トルクＴＲＱＥＮＧを基本目標トルクＴＲＱＢＡＳＥに設定する（ステップＳ２４２）とともに、目標開度ＴＨＣＭＤを基本目標開度ＴＨＯＮＬに設定する（ステップＳ２４３）。
ステップＳ２４１で第１移行フラグＦＰＴＴＯＡＬが「０」に設定されると、その後は、ステップＳ２３８から直ちにステップＳ２４１に進む。
【００４２】
ステップＳ２３３でＦＣＹＬＳＴＰ＝１であって一部気筒運転中であるときは、気筒休止フラグＦＣＹＬＳＴＰが前回「０」であったか否かを判別する（ステップＳ２５１）。この答が肯定（ＹＥＳ）、すなわち全気筒運転から一部気筒運転への移行直後であるときは、第２移行フラグＦＡＬＴＯＰＴを「１」に設定する（ステップＳ２５２）。次いでエンジン回転数ＮＥ及び吸気管内絶対圧ＰＢＡに応じてＤＣＳＴＲＱＵマップを検索し、加算補正項ＤＣＳＴＲＱＵを算出する（ステップＳ２５３）。ＤＣＳＴＲＱＵマップは、エンジン回転数ＮＥが高くなるほど、また吸気管内絶対圧ＰＢＡが高くなるほど、加算補正項ＤＣＳＴＲＱＵが大きくなるように設定されている。
【００４３】
ステップＳ２５４では、下記式に基本目標トルクＴＲＱＢＡＳＥ及び加算補正項ＤＣＳＴＲＱＵを適用して、目標トルクＴＲＱＥＮＧを算出する。
ＴＲＱＥＮＧ＝ＴＲＱＢＡＳＥ＋ＤＣＳＴＲＱＵ
ステップＳ２５４実行後は、前記ステップＳ２６０に進む。ステップＳ２６０では、エンジン回転数ＮＥ及び要求トルクＴＲＱＥＮＧに応じて、一部気筒運転用のＴＲＱＴＨマップ（図示せず）を検索し、要求スロットル弁開度ＴＲＱＴＨが算出される。一部気筒運転用のＴＲＱＴＨマップは、エンジン回転数ＮＥ及び目標トルクＴＲＱＥＮＧに対応する、一部気筒運転時の要求スロットル弁開度ＴＲＱＴＨが設定されている。
【００４４】
ステップＳ２５１の答が否定（ＮＯ）、すなわち前回以前から一部気筒運転が行われているときは、第２移行フラグＦＡＬＴＯＰＴが「１」であるか否かを判別する（ステップＳ２５５）。最初はＦＡＬＴＯＰＴ＝１であるので、ステップＳ２５６に進み、下記式により目標トルクＴＲＱＥＮＧを漸減させる。
ＴＲＱＥＮＧ＝ＴＲＱＥＮＧ−ＤＴＲＱＥＮＧＤ
【００４５】
ステップＳ２５７では、目標トルクＴＲＱＥＮＧが基本目標トルクＴＲＱＢＡＳＥより大きいか否かを判別し、ＴＲＱＥＮＧ＞ＴＲＱＢＡＳＥであるときは、前記ステップＳ２６０に進む。目標トルクＴＲＱＥＮＧが基本目標トルクＴＲＱＢＡＳＥ以下であるときは、ステップＳ２５８に進み、第２移行フラグＦＡＬＴＯＰＴを「０」に設定する。次いで、目標トルクＴＲＱＥＮＧを基本目標トルクＴＲＱＢＡＳＥに設定し（ステップＳ２５９）、前記ステップＳ２６０に進む。ステップＳ２６０では、一部気筒運転用のＴＲＱＴＨマップを検索することにより、要求スロットル弁開度ＴＲＱＴＨが算出される。
【００４６】
図８及び図９の処理によれば、図１０に示すように、全筒運転から一部気筒運転への移行（ＦＣＹＬＳＴＰ＝０→１）直後は、目標トルクＴＲＱＥＮＧはステップ状に増加し、その後基本目標トルクＴＲＱＢＡＳＥまで漸減する。また一部気筒運転から全筒運転への移行（ＦＣＹＬＳＴＰ＝１→０）直後は、目標トルクＴＲＱＥＮＧはステップ状に減少し、その後基本目標トルクＴＲＱＢＡＳＥまで漸増する。そして、スロットル弁の目標開度ＴＨＣＭＤが、この目標トルクＴＲＱＥＮＧに応じて設定され、実際のエンジン１の出力トルクが目標トルクＴＲＱＥＮＧとなるようにスロットル弁開度が制御される。これにより、作動気筒数の変更に伴うトルクショックを抑制することができる。
【００４７】
なお、基本目標開度ＴＨＯＮＬは、図示しない変速制御処理あるいはトラクション制御処理においても用いられる。トラクション制御においては、当該車両の駆動輪の過剰スリップ状態が検出され、過剰スリップを抑制するように、エンジン１の出力トルクが制限される。
【００４８】
図１１は、メインマイコン５３で実行されるノッキング判定処理のフローチャートである。この処理は、ＴＤＣパルスの発生に同期して実行される。
ステップＳ１１では、下記式（１）によりノイズレベルＮＺＭＩＮＡＡ(n)を算出する。
ＮＺＭＩＮＡＡ(n)＝（ＮＺＭＩＮＡＡ(n-3)＋ＮＺＭＩＮＡＡ(n-2)
＋ＮＺＭＩＮＡＡ(n-1)＋ＮＺＭＩＮ(n)）／４  （１）
【００４９】
ここで、右辺のＮＺＭＩＮＡＡ(n-3)〜ＮＺＭＩＮＡＡ(n-1)は、ノイズレベルの過去値であり、ＮＺＭＩＮ(n)は、サブマイコン５２から送信される最新の検出最小値である。
【００５０】
ステップＳ１２では、図１２に示すＧＡＭＰ算出処理を実行し、ゲイン係数ＧＡＭＰを算出する。
【００５１】
図１２のステップＳ３１では、気筒休止フラグＦＣＹＬＳＴＰが「１」であるか否かを判別する。ステップＳ３１の答が否定（ＮＯ）であって、全筒運転中であるときは、エンジン回転数ＮＥ及び吸気管内絶対圧ＰＢＡに応じてＡＭＰＧＬ１マップ（図示せず）を検索し、第１マップ値ＡＭＰＧＬ１を算出する（ステップＳ３４）。ＡＭＰＧＬ１マップは、エンジン回転数ＮＥが増加するほど、また吸気管内絶対圧ＰＢＡが増加するほど、第１マップ値ＡＭＰＧＬ１が増加するように設定されている。続くステップＳ３５では、ゲイン係数ＧＡＭＰを第１マップ値ＡＭＰＧＬ１に設定して、本処理を終了する。
【００５２】
一方、ステップＳ３１の答が肯定（ＹＥＳ）であって、一部気筒運転中であるときは、エンジン回転数ＮＥ及び吸気管内絶対圧ＰＢＡに応じてＡＭＰＧＣＳマップ（図示せず）を検索し、第２マップ値ＡＭＰＧＣＳを算出する（ステップＳ３２）。ＡＭＰＧＣＳマップは、エンジン回転数ＮＥが増加するほど、また吸気管内絶対圧ＰＢＡが増加するほど、第２マップ値ＡＭＰＧＣＳが増加するように設定されている。また同一のエンジン回転数ＮＥ及び吸気管内絶対圧ＰＢＡにおいては、第２マップ値ＡＭＰＧＣＳは、第１マップ値ＡＭＰＧＬ１より小さな値に設定されている。
【００５３】
続くステップＳ３３では、ゲイン係数ＧＡＭＰを第２マップ値ＡＭＰＧＣＳに設定して、本処理を終了する。
【００５４】
図１１に戻り、ステップＳ１３では、図１３に示すＫＡＧＴＷ算出処理を実行し、補正係数ＫＡＧＴＷを算出する。
【００５５】
図１３のステップＳ４１では、エンジン水温ＴＷが第３所定水温ＴＷＫＡＧ２（例えば７０℃）以下か否かを判別し、ＴＷ＞ＴＷＫＡＧ２であるときは、補正係数ＫＡＧＴＷを「１．０」（無補正値）に設定する（ステップＳ５０）。
ステップＳ４１でＴＷ≦ＴＷＫＡＧ２であるときは、エンジン水温ＴＷが第３所定水温ＴＷＫＡＧ２より低い第２所定水温ＴＷＫＡＧ１（例えば６０℃）以下か否かを判別する（ステップＳ４２）。ステップＳ４２の答が否定（ＮＯ）、すなわちＴＷＫＡＧ１＜ＴＷ≦ＴＷＫＡＧ２であるときは、エンジン回転数ＮＥに応じて図１４に示すＫＡＧＴＷ２テーブル（実線Ｌ１３）を検索し、第３係数値ＫＡＧＴＷ２を算出する（ステップＳ４８）。ＫＡＧＴＷ２テーブルは、エンジン回転数ＮＥが増加するほど、第３係数値ＫＡＧＴＷ２が増加するように設定されている。次いで、補正係数ＫＡＧＴＷをその第３係数値ＫＡＧＴＷ２に設定する（ステップＳ４９）。
【００５６】
ステップＳ４２で、ＴＷ≦ＴＷＫＡＧ１であるときは、エンジン水温ＴＷが第２所定水温ＴＷＫＡＧ１より低い第１所定水温ＴＷＫＡＧ０（例えば４０℃）以下か否かを判別する（ステップＳ４３）。ステップＳ４３の答が否定（ＮＯ）、すなわちＴＷＫＡＧ０＜ＴＷ≦ＴＷＫＡＧ１であるときは、エンジン回転数ＮＥに応じて図１４に示すＫＡＧＴＷ１テーブル（破線Ｌ１２）を検索し、第２係数値ＫＡＧＴＷ１を算出する（ステップＳ４６）。ＫＡＧＴＷ１テーブルは、エンジン回転数ＮＥが増加するほど、第２係数値ＫＡＧＴＷ２が増加するように設定されている。次いで、補正係数ＫＡＧＴＷをその第２係数値ＫＡＧＴＷ１に設定する（ステップＳ４７）。
【００５７】
ステップＳ４３でＴＷ≦ＴＷＫＡＧ０であるときは、エンジン回転数ＮＥに応じて図１４に示すＫＡＧＴＷ０テーブル（実線Ｌ１１）を検索し、第１係数値ＫＡＧＴＷ０を算出する（ステップＳ４４）。ＫＡＧＴＷ０テーブルは、エンジン回転数ＮＥが増加するほど、第１係数値ＫＡＧＴＷ０が増加するように設定されている。次いで、補正係数ＫＡＧＴＷをその第１係数値ＫＡＧＴＷ０に設定する（ステップＳ４５）。
【００５８】
図１３の処理によれば、補正係数ＫＡＧＴＷは、エンジン水温ＴＷが低下するほど増加するように、またエンジン回転数ＮＥが増加するほど増加するように設定される。
【００５９】
図１１に戻り、ステップＳ１４では、エンジン回転数ＮＥがゲイン切換回転数ＮＥＫＩＲＩ（例えば２５００ｒｐｍ）より高いか否かを判別する。ＮＥ＞ＮＥＫＩＲＩであってエンジン１が高回転で運転されているときは、ゲイン切換回路６２のゲインを低ゲインとする制御信号を出力する（ステップＳ１５）とともに、ゲイン切換係数ＫＡＧＫＩＲＩを高回転用所定値ＫＡＧＫＩＲＩＨに設定する（ステップＳ１６）。一方、ステップＳ１４でＮＥ≦ＮＥＫＩＲＩであるときは、ゲイン切換回路６２のゲインを高ゲインとする制御信号を出力する（ステップＳ１７）とともに、ゲイン切換係数ＫＡＧＫＩＲＩを低回転用所定値ＫＡＧＫＩＲＩＬに設定する（ステップＳ１６）。低回転用所定値ＫＡＧＫＩＲＩＬは、高回転用所定値ＫＡＧＫＩＲＩＨより大きな値に設定されている。
ステップＳ１９では、ノイズレベルＮＺＭＩＮＡＡ、ゲイン係数ＧＡＭＰ、補正係数ＫＡＧＴＷ及びゲイン切換係数ＫＡＧＫＩＲＩを下記式（２）に適用し、判定閾値ＫＬＶＬを算出する。
ＫＬＶＬ＝ＮＺＭＩＮＡＡ×ＧＡＭＰ×ＫＡＧＴＷ×ＫＡＧＫＩＲＩ  （２）
【００６０】
ステップＳ２０では、ノックレベルの最大値ＫＳＭＡＸが判定閾値ＫＬＶＬを超えたか否かを判別し、ＫＳＭＡＸ＞ＫＬＶＬであるときは、ノッキング発生と判定して、ノッキングフラグＦＫＮＯＣＫを「１」に設定する（ステップＳ２１）。一方、ＫＳＭＡＸ≦ＫＬＶＬであるときは、ノッキングは発生していないと判定し、ノッキングフラグＦＫＮＯＣＫを「０」に設定する（ステップＳ２２）。
【００６１】
次に本実施形態における点火時期制御の概要を、図１５を参照して説明する。図１５のラインＬ２１は、エンジン１の出力トルクを最大とするＭＢＴ（Minimum Spark Advance for Best Torque）を示し、ラインＬ２２は、高オクタン価（例えばオクタン価１００）燃料のノック限界点火時期ＩＧＲＯＮＨを示し、ラインＬ２３は、低オクタン価（例えばオクタン価９０）燃料のノック限界点火時期ＩＧＲＯＮＬを示す。なお、点火時期は、上死点からの進角量で示される。
【００６２】
本実施形態では、高オクタン価燃料を基準とした基本点火時期ＩＧＭＡＰが、エンジン回転数ＮＥ及び吸気管内絶対圧ＰＢＡに応じたマップに設定されている。
より具体的には、基本点火時期ＩＧＭＡＰは、図１５に破線で示すように、吸気管内絶対圧ＰＢＡが図１５の点ＰＸに対応する所定吸気圧ＰＢＰＸより低い低負荷運転状態では、ラインＬ２１に対応するＭＢＴが設定され、吸気管内絶対圧ＰＢＡが所定吸気圧ＰＢＰＸより高い高負荷運転状態では、ラインＬ２２に対応するノック限界点火時期ＩＧＲＯＮＨが設定されている。
【００６３】
そして点火時期ＩＧＣＭＤは、下記式（３）により算出される。
ＩＧＣＭＤ＝ＩＧＭＡＰ＋ＩＧＣＲ                              （３）
ここで、ＩＧＣＲは、下記式（４）により算出される補正項である。
ＩＧＣＲ＝ＤＩＧＲＳＶ＋ＩＧＴＷ＋ＩＧＰＡ−ＩＧＴＡ−ＩＧＫＮＯＣＫ
（４）
ＤＩＧＲＳＶは、図１５に示すように、点ＰＸより低負荷側で（ＩＧＲＯＮＨ−ＭＢＴ）に設定され、点ＰＸより高負荷側では「０」に設定される低負荷進角補正項である。ＩＧＴＷはエンジン水温ＴＷに応じて設定される水温補正項であり、ＩＧＰＡは大気圧に応じて設定される大気圧補正項であり、ＩＧＴＡは、吸気温ＴＡに応じて設定される吸気温補正項である。また、ＩＧＫＮＯＣＫは、下記式（５）により算出されるノック補正項である。
ＩＧＫＮＯＣＫ＝ＤＩＧＫＲ×ＫＩＧＫＮ                        （５）
【００６４】
ここでＤＩＧＫＲは、図１５に示すように、高オクタン価燃料のノック限界点火時期ＩＧＲＯＮＨと、低オクタン価燃料のノック限界点火時期ＩＧＲＯＮＬとの差（以下「オクタン価差分項」という）であり、ＫＩＧＫＮは、ノッキング判定結果に応じて設定される遅角係数である。ノッキングが発生するときは、遅角係数ＫＩＧＫＮは、増加する方向（遅角方向）に更新され、ノッキングが発生しないときは、遅角係数ＫＩＧＫＮは、減少する方向（進角方向）に更新される。
【００６５】
図１６は、点火時期ＩＧＣＭＤを算出する処理のフローチャートである。この処理は、メインマイコン５３により、ＴＤＣパルスの発生に同期して実行される。
ステップＳ６１では、気筒休止フラグＦＣＹＬＳＴＰが「１」であるか否かを判別する。ステップＳ６１の答が否定（ＮＯ）であって、全筒運転中であるときは、エンジン回転数ＮＥ及び吸気管内絶対圧ＰＢＡに応じてＩＧＭＬ１マップ（図示せず）を検索し、第１マップ値ＩＧＭＬ１を算出する（ステップＳ６２）。ＩＧＭＬ１マップは、全筒運転用の基本点火時期マップであり、上述したよに、吸気管内絶対圧ＰＢＡが図１５の点ＰＸに対応する所定吸気圧ＰＢＰＸより低い低負荷運転状態では、ラインＬ２１に対応するＭＢＴが設定され、吸気管内絶対圧ＰＢＡが所定吸気圧ＰＢＰＸより高い高負荷運転状態では、ラインＬ２２に対応するノック限界点火時期ＩＧＲＯＮＨが設定されている。続くステップＳ６３では、基本点火時期ＩＧＭＡＰを第１マップ値ＩＧＭＬ１に設定して、ステップＳ６６に進む。
【００６６】
一方、ステップＳ６１の答が肯定（ＹＥＳ）であって、一部気筒運転中であるときは、エンジン回転数ＮＥ及び吸気管内絶対圧ＰＢＡに応じてＩＧＭＣＳ１マップ（図示せず）を検索し、第２マップ値ＩＧＭＣＳ１を算出する（ステップＳ６４）。ＩＧＭＣＳ１マップは、一部気筒運転用の基本点火時期マップであり、上述したように、吸気管内絶対圧ＰＢＡが図１５の点ＰＸに対応する所定吸気圧ＰＢＰＸより低い低負荷運転状態では、ラインＬ２１に対応するＭＢＴが設定され、吸気管内絶対圧ＰＢＡが所定吸気圧ＰＢＰＸより高い高負荷運転状態では、ラインＬ２２に対応するノック限界点火時期ＩＧＲＯＮＨが設定されている。
【００６７】
基本点火時期マップとして、全筒運転用マップと一部気筒運転用マップとを設けるのは、全筒運転におけるエンジンの体積効率（吸入効率）ηＶと、一部気筒運転における体積効率ηＶとが異なるからである。
続くステップＳ６５では、基本点火時期ＩＧＭＡＰを、第２マップ値ＩＧＭＣＳ１に設定して、ステップＳ６６に進む。
【００６８】
ステップＳ６６では、図１７に示すＩＧＣＲ算出処理を実行し、補正項ＩＧＣＲを算出する。ステップＳ６７では、前記式（３）により、点火時期ＩＧＣＭＤを算出する。
【００６９】
図１７は、図１６のステップＳ６６で実行されるＩＧＣＲ算出処理のフローチャートである。
ステップＳ７１では、図１８に示すＩＧＫＮＯＣＫ算出処理を実行し、ノック補正項ＩＧＫＮＯＣＫを算出する。ステップＳ７２では、エンジン水温ＴＷに応じて水温補正項ＩＧＴＷを算出し、ステップＳ７３では、吸気温ＴＡに応じて吸気温補正項ＩＧＴＡを算出する。さらにステップＳ７４では、大気圧ＰＡに応じて大気圧補正項ＩＧＰＡを算出する。
ステップＳ７５では、前記式（４）により、補正項ＩＧＣＲを算出する。
【００７０】
図１８は、図１７のステップＳ７１で実行されるＩＧＫＮＯＣＫ算出処理のフローチャートである。
ステップＳ８１では、エンジン回転数ＮＥ及び吸気管内絶対圧ＰＢＡに応じてＩＧＲＯＮＨマップ（図示せず）を検索し、高オクタン価燃料のノック限界点火時期ＩＧＲＯＮＨを算出する。そして、ノック限界点火時期ＩＧＲＯＮＨが基本点火時期ＩＧＭＡＰより大きいか否かを判別し（ステップＳ８２）、ＩＧＲＯＮＨ≦ＩＧＭＡＰであるときは、低負荷進角補正項ＤＩＧＲＳＶを「０」に設定する（ステップＳ８３）。一方、ＩＧＲＯＮＨ＞ＩＧＭＡＰであるときは、下記式（６）により、低負荷進角補正項ＤＩＧＲＳＶを算出する（ステップＳ８４）。
ＤＩＧＲＳＶ＝ＩＧＲＯＮＨ−ＩＧＭＡＰ                        （６）
【００７１】
ステップＳ８５では、エンジン回転数ＮＥ及び吸気管内絶対圧ＰＢＡに応じてＤＩＧＫＲマップ（図示せず）を検索し、オクタン価差分項ＤＩＧＫＲを算出する。ＤＩＧＫＲマップは、図１５に示すように、高オクタン価燃料のノック限界点火時期ＩＧＲＯＮＨと、低オクタン価燃料のノック限界点火時期ＩＧＲＯＮＬとの差分が、エンジン回転数ＮＥ及び吸気管内絶対圧ＰＢＡに対応して設定されている。
【００７２】
ステップＳ８６では、図１９及び図２０に示すＫＩＧＫＮ算出処理を実行し、遅角係数ＫＩＧＫＮを算出する。ステップＳ８７では、前記式（５）により、ノック補正項ＩＧＫＮＯＣＫを算出する。
【００７３】
図１９及び図２０は、図１８のステップＳ８６で実行されるＫＩＧＫＮ算出処理のフローチャートである。
ステップＳ９１では、図２１に示すリミット値算出処理を実行し、遅角係数ＫＩＧＫＮの上限値ＫＩＧＫＮＬＭＨ及び下限値ＫＩＧＫＮＬＭＬを算出する。ステップＳ９２では、異常検出フラグＦＦＳＰＫＳが「１」であるか否かを判別する。異常検出フラグＦＦＳＰＫＳは、吸気管内絶対圧センサ７，吸気温センサ８などのエンジン運転状態を検出する各種センサのいずれかの故障が検出されたとき「１」に設定される。ＦＦＳＰＫＳ＝１であって、フェールセーフ動作が必要であるときは、遅角係数ＫＩＧＫＮをフェールセーフ用所定値ＦＳＫＩＧＫＮに設定し（ステップＳ９３）、第２リミット処理を実行する（ステップＳ９４）。第２リミット処理では、遅角係数ＫＩＧＫＮが上限値ＫＩＧＫＮＬＭＨを超えているときは、その上限値ＩＧＫＮＬＭＨに再設定される。ステップＳ９４を実行した後、ステップＳ１１０に進む。
【００７４】
ステップＳ９２でＦＦＳＰＫＳ＝０であってフェールセーフ動作が不要であるときは、初期フラグＦＫＩＧＫＮＩＮＩが「１」であるか否かを判別する（ステップＳ９５）。最初は、ＦＫＩＧＫＮＩＮＩ＝０であるので、ステップＳ９６に進み、初期フラグＦＫＩＧＫＮＩＮＩを「１」に設定する。次いで、下記式（７）により、遅角係数ＫＩＧＫＮを算出する（ステップＳ９７）。
ＫＩＧＫＮ＝ＫＩＧＫＲＥＦ＋ＤＫＮＩＮＩ                      （７）
【００７５】
ここで、ＫＩＧＫＲＥＦは、後述する学習値算出処理で算出される、遅角係数ＫＩＧＫＮの第１学習値であり、ＤＫＮＩＮＩは、所定の初期設定加算値である。
ステップＳ９７の実行後は、ステップＳ１０９に進む。
【００７６】
ステップＳ９６で初期フラグＦＫＩＧＫＮＩＮＩが「１」に設定されると、ステップＳ９５からステップＳ９８に進み、ノック判定禁止フラグＦＫＮＯＣＫＰが「１」であるか否かを判別する。ノック判定禁止フラグＦＫＮＯＣＫＰは、エンジン回転数ＮＥが低い（例えば１０００ｒｐｍ未満の）ときやエンジンへの燃料供給を停止するフュエルカット中などにおいて「１」に設定される。ステップＳ９８の答が肯定（ＹＥＳ）であるときは、ダウンカウントタイマＴＡＤＶを第１所定時間ＴＭＡＤＶＳ（例えば０．２秒）に設定してスタートさせる（ステップＳ９９）。次いで、遅角係数ＫＩＧＫＮを前回値と同一の設定として（ステップＳ１００）、ステップＳ１０９に進む。
【００７７】
ステップＳ９８でＦＫＮＯＣＫＰ＝０であるときは、ノッキングフラグＦＫＮＯＣＫが「１」であるか否かを判別する（ステップＳ１０１）。ＦＫＮＯＣＫ＝１であってノッキングが発生したときは、ダウンカウントタイマＴＡＤＶを第２所定時間ＴＭＡＤＶＬ（例えば０．５秒）に設定してスタートさせる（ステップＳ１０２）。次いで、加算項ＤＫＩＧＫＮＵを所定値ＤＫＩＧＫＮＵＳに設定し（ステップＳ１０３）、その加算項ＤＫＩＧＫＮＵを下記式（８）に適用して、遅角係数ＫＩＧＫＮを増加方向に更新する（ステップＳ１０４）。これにより、点火時期の遅角補正量が増加する。
ＫＩＧＫＮ＝ＫＩＧＫＮ＋ＤＫＩＧＫＮＵ                        （８）
ステップＳ１０４実行後は、ステップＳ１０９に進む。
【００７８】
ステップＳ１０１でＦＫＮＯＣＫ＝０であるときは、ステップＳ９９またはステップＳ１０２でスタートされるダウンカウントタイマＴＡＤＶの値が「０」であるか否かを判別する（ステップＳ１０５）。この答が否定（ＮＯ）である間は、遅角係数ＫＩＧＫＮを前回値と同一の設定として（ステップＳ１０６）、ステップＳ１０９に進む。タイマＴＡＤＶの値が「０」となると、ステップＳ１０５からステップＳ１０７に進み、該タイマＴＡＤＶを第１所定時間ＴＭＡＤＶＳに設定してスタートさせる。次いで、下記式（９）により、遅角係数ＫＩＧＫＮを減少方向に更新し（ステップＳ１０８）、ステップＳ１０９に進む。式（９）による更新によって、点火時期の遅角補正量が減少する（点火時期は進角方向に変化する）。
ＫＩＧＫＮ＝ＫＩＧＫＮ−ＤＫＩＧＫＮＤ                        （９）
ここで、ＤＫＩＧＫＮＤは、所定減算値である。
【００７９】
ステップＳ１０９では、算出された遅角係数ＫＩＧＫＮの第１リミット処理を実行する。すなわち、遅角係数ＫＩＧＫＮが、ステップＳ９１で算出される上限値ＫＩＧＫＮＬＭＨを超えるときは、その上限値ＫＩＧＫＮＬＭＨに再設定され、遅角係数ＫＩＧＫＮがステップＳ９１で算出される下限値ＫＩＧＫＮＬＭＬより小さいときは、その下限値ＫＩＧＫＮＬＭＬに再設定される。
【００８０】
ステップＳ１１０では、学習値算出用遅角係数ＫＩＧＫＭを、算出された遅角係数ＫＩＧＫＮに設定し、次いで図２３及び図２４に示す学習値算出処理を実行する（ステップＳ１１１）。この学習値算出処理により、全筒運転に対応して第１学習値ＫＩＧＫＲＥＦ及び第２学習値ＫＩＧＫＲＥＦＥが算出され、一部気筒運転に対応して第３学習値ＫＩＧＫＲＦＣＳが算出される。第１学習値ＫＩＧＫＲＥＦは、排気還流を行わない運転状態に対応して算出される学習値であり、第２学習値ＫＩＧＫＲＥＦＥは、排気還流を行う運転状態に対応して算出される学習値である。
【００８１】
ステップＳ１１２では、学習値算出処理で設定される進角学習フラグＦＫＩＧＫＮＡＤＶが「１」であるか否かを判別する。進角学習フラグＦＫＩＧＫＮＡＤＶは、学習値が進角方向に更新されたとき「１」に設定される。
ステップＳ１１２の答が否定（ＮＯ）であるときは、遅角係数ＫＩＧＫＮを、学習値算出用遅角係数ＫＩＧＫＭに設定する（ステップＳ１１３）。ステップＳ１１２でＦＫＩＧＫＮＡＤＶ＝１であって学習値が進角方向に更新されたときは、気筒休止フラグＦＣＹＬＳＴＰが「１」であるか否かを判別する（ステップＳ１１４）。そしてＦＣＹＬＳＴＰ＝１であって一部気筒運転中であるときは、遅角係数ＫＩＧＫＮを第３学習値ＫＩＧＫＲＦＣＳに設定する（ステップＳ１１５）。
【００８２】
ステップＳ１１４でＦＣＹＬＳＴＰ＝０であって全筒運転中であるときは、ＥＧＲフラグＦＥＧＲＭが「１」であるか否かを判別する（ステップＳ１１６）。ＥＧＲフラグＦＥＧＲＭは、排気還流を実行しているとき「１」に設定される。ＦＥＧＲＭ＝１であるときは、遅角係数ＫＩＧＫＮを第２学習値ＫＩＧＫＲＥＦＥに設定し（ステップＳ１１７）、ＦＥＧＲＭ＝０であるときは、遅角係数ＫＩＧＫＮを第１学習値ＫＩＧＫＲＥＦに設定する（ステップＳ１１８）。
【００８３】
図２１は、図１９のステップＳ９１で実行されるリミット値算出処理のフローチャートである。
ステップＳ１２１では、エンジン水温ＴＷに応じて図２２に示すＫＩＧＫＮＬＭＸテーブルを検索し、リミット値ＫＩＧＬＮＬＭＸを算出する。ＫＩＧＫＮＬＭＸテーブルは、エンジン水温ＴＷが増加するほど、リミット値ＫＩＧＫＮＬＭＸが増加するように設定されている。エンジン水温ＴＷが低いときは、ノッキングは発生せず、エンジン水温ＴＷが高くなるほど発生しやすくなることを考慮したものである。
【００８４】
ステップＳ１２２では、制御モードフラグＦＫＮＦＢが「１」であるか否かを判別する。制御モードフラグＦＫＮＦＢは、初期値は「０」であり、ステップＳ１２３の答が肯定（ＹＥＳ）となると、ステップＳ１２５で「１」に設定される。最初は、ＦＫＮＦＢ＝０であるので、ステップＳ１２３に進み、ステップＳ１２１で算出されたリミット値ＫＩＧＫＮＬＭＸが第１学習値ＫＩＧＫＲＥＦ以上であるか否かを判別する。エンジンの始動直後は、ステップＳ１２３の答は否定（ＮＯ）となるので、ステップＳ１２４に進み、下限値ＫＩＧＫＮＬＭＬをリミット値ＫＩＧＫＮＬＭＸに設定する。次いで、上限値ＫＩＧＫＮＬＭＨもリミット値ＫＩＧＫＮＬＭＸに設定する（ステップＳ１３３）。
【００８５】
ステップＳ１２３の答が肯定（ＹＥＳ）となると、制御モードフラグＦＫＮＦＢを「１」に設定し（ステップＳ１２５）、ステップＳ１２６に進む。制御モードフラグＦＫＮＦＢが「１」に設定された後は、ステップＳ１２２から直ちにステップＳ１２６に進む。
【００８６】
ステップＳ１２６では、気筒休止フラグＦＣＹＬＳＴＰが「１」であるか否かを判別し、ＦＣＹＬＳＴＰ＝１であるときは、下限値ＫＩＧＫＮＬＭＬを、第３学習値ＫＩＧＫＲＦＣＳ及び所定下限値ＫＩＧＫＮＬのうち、いずれか大きい方に設定する（ステップＳ１２７）。ＦＣＹＬＳＴＰ＝０であるときは、ＥＧＲフラグＦＥＧＲＭが「１」であるか否かを判別し（ステップＳ１２８）、ＦＥＧＲＭ＝１であるときは、下限値ＫＩＧＫＮＬＭＬを、第２学習値ＫＩＧＫＲＥＦＥ及び所定下限値ＫＩＧＫＮＬのうち、いずれか大きい方に設定する（ステップＳ１３０）。また、ＦＥＧＲＭ＝０であるときは、下限値ＫＩＧＫＮＬＭＬを、第１学習値ＫＩＧＫＲＥＦ及び所定下限値ＫＩＧＫＮＬのうち、いずれか大きい方に設定する（ステップＳ１２９）。
【００８７】
ステップＳ１３１では、ステップＳ１２１で算出されたリミット値ＫＩＧＫＮＬＭＸが下限値ＫＩＧＫＮＬＭＬ以上であるか否かを判別し、その答が肯定（ＹＥＳ）であるときは、前記ステップＳ１３３に進んで、上限値ＫＩＧＫＮＬＭＨをリミット値ＫＩＧＫＮＬＭＸに設定する。ステップＳ１３１の答が否定（ＮＯ）であるときは、上限値ＫＩＧＫＮＬＭＨを下限値ＫＩＧＫＮＬＭＬと等しくする（ステップＳ１３２）。
【００８８】
図２３及び図２４は、図２０のステップＳ１１１で実行される学習値算出処理のフローチャートである。
ステップＳ１４０では、初期化フラグＦＫＮＲＥＦＭＯＤが「１」であるか否かを判別する。最初はＦＫＮＲＥＦＭＯＤ＝０であるので、ステップＳ１４１に進み、異常検出フラグＦＦＳＰＫＳが「１」であるか否かを判別する。この答が否定（ＮＯ）であってセンサの異常が検出されていないときは、直ちにステップＳ１４３に進む。一方、ＦＦＳＰＫＳ＝１であって何れかのセンサの異常が検出されているときは、学習値算出用の中間パラメータＫＩＧＫＮＲＥＦ、第１学習値ＫＩＧＫＲＥＦ、第２学習値ＫＩＧＫＲＥＦＥ及び第３学習値ＫＩＧＫＲＦＣＳをいずれも初期化所定値ＫＩＧＲＩＮＩに設定する（ステップＳ１４２）。
【００８９】
ステップＳ１４３では、初期化フラグＦＫＮＲＥＦＭＯＤを「１」に設定する。次いで、進角補正項ＤＲＲＥＦを「０」に設定し（ステップＳ１４４）、ダウンカウントタイマＴＤＲＲＥＦを所定時間ＴＤＲＥＦ０（例えば１．０秒）に設定してスタートさせる（ステップＳ１４５）。さらにステップＳ１７３に進んで、進角学習フラグＦＫＩＧＫＮＡＤＶを「０」に設定する。
【００９０】
初期化フラグＦＫＮＲＥＦＭＯＤが「１」に設定されると、ステップＳ１４１からステップＳ１４６に進み、気筒休止フラグＦＣＹＬＳＴＰが「１」であるか否かを判別する。ＦＣＹＬＳＴＰ＝１であって一部気筒運転中であるときは、中間パラメータＫＩＧＫＮＲＥＦを第３学習値ＫＩＧＫＲＦＣＳに設定する（ステップＳ１４７）。ＦＣＹＬＳＴＰ＝０であって全筒運転中であるときは、ＥＧＲフラグＦＥＧＲＭが「１」であるか否かを判別する（ステップＳ１４８）。ＦＥＧＲＭ＝１であって排気還流実行中であるときは、中間パラメータＫＩＧＫＮＲＥＦを第２学習値ＫＩＧＫＲＥＦＥに設定する（ステップＳ１４９）。ＦＥＧＲＭ＝０であって排気還流を実行していないときは、中間パラメータＫＩＧＫＮＲＥＦを第１学習値ＫＩＧＫＲＥＦに設定する（ステップＳ１５０）。
【００９１】
続くステップＳ１５１では、ノッキングフラグＦＫＮＯＣＫが「１」であるか否かを判別し、ＦＫＮＯＣＫ＝１であってノッキングが発生したときは、下記式（１０）により、進角補正項ＤＲＲＥＦを所定値ＤＤＲＲＥＦだけデクリメントする（ステップＳ１５２）。
ＤＲＲＥＦ＝ＤＲＲＥＦ−ＤＤＲＲＥＦ                        （１０）
【００９２】
ステップＳ１５３では、進角補正項ＤＲＲＥＦのリミット処理を行う。すなわち、進角補正項ＤＲＲＥＦが所定下限値ＤＲＲＥＦＬより小さいときは、進角補正項ＤＲＲＥＦは、その所定下限値ＤＲＲＥＦＬに再設定される。その後ステップＳ１５４に進む。
【００９３】
ステップＳ１５１でＦＫＮＯＣＫ＝０であってノッキングが発生していない時は、直ちにステップＳ１５４に進む。
ステップＳ１５４では、学習値算出用遅角係数ＫＩＧＫＭが中間パラメータＫＩＧＫＮＲＥＦ以下であるか否かを判別し、ＫＩＧＫＭ＞ＫＩＧＫＮＲＥＦであって、遅角係数ＫＩＧＫＭが中間パラメータＫＩＧＫＮＲＥＦより遅角側の値であるときは、ステップＳ１５５〜Ｓ１５９により、学習値算出用遅角係数ＫＩＧＫＭをなまし処理することにより、各学習値が算出されるとともに、算出された学習値の上限リミット処理が行われる。学習値算出用遅角係数ＫＩＧＫＭは図１９のステップＳ１０９でリミット処理がなされているが、学習値の上限値は別に設定される場合があるため、再度リミット処理が行われる。
【００９４】
ステップＳ１５５では、気筒休止フラグＦＣＹＬＳＴＰが「１」であるか否かを判別する。ＦＣＹＬＳＴＰ＝１であって一部気筒運転中であるときは、下記式（１１）に、学習値算出用遅角係数ＫＩＧＫＭを適用して、第３学習値ＫＩＧＫＲＦＣＳを算出する（ステップＳ１５６）。この演算の結果、第３学習値ＫＩＧＫＲＦＣＳが所定上限値ＫＩＧＲＥＦＨを超えたときは、第３学習値ＫＩＧＫＲＦＣＳはこの所定上限値ＫＩＧＲＥＦＨに再設定される。
ＫＩＧＫＲＦＣＳ＝ＣＫＩＧＲＥＦ×ＫＩＧＫＭ
＋（１−ＣＫＩＧＲＥＦ）×ＫＩＧＫＲＦＣＳ  （１１）
ここでＣＫＩＧＲＥＦは０から１の間の値に設定されるなまし係数であり、右辺のＫＩＧＫＲＦＣＳは、第３学習値の最新の過去値である。
【００９５】
ステップＳ１５５でＦＣＹＬＳＴＰ＝０であって全筒運転中であるときは、ＥＧＲフラグＦＥＧＲＭが「１」であるか否かを判別する（ステップＳ１５７）。ＦＥＧＲＭ＝１であって排気還流実行中であるときは、下記式（１２）により第２学習値ＫＩＧＫＲＥＦＥを算出する（ステップＳ１５８）。この演算の結果、第２学習値ＫＩＧＫＲＥＦＥが所定上限値ＫＩＧＲＥＦＨを超えたときは、第２学習値ＫＩＧＫＲＥＦＥはこの所定上限値ＫＩＧＲＥＦＨに再設定される。
ＫＩＧＫＲＥＦＥ＝ＣＫＩＧＲＥＦ×ＫＩＧＫＭ
＋（１−ＣＫＩＧＲＥＦ）×ＫＩＧＫＲＥＦＥ  （１２）
ここで右辺のＫＩＧＫＲＥＦＥは、第２学習値の最新の過去値である。
【００９６】
またＦＥＧＲＭ＝０であって排気還流を実行していないときは、下記式（１３）により、第１学習値ＫＩＧＫＲＥＦを算出する（ステップＳ１５９）。この演算の結果、第２学習値ＫＩＧＫＲＥＦＥが所定上限値ＫＩＧＲＥＦＨを超えたときは、第２学習値ＫＩＧＫＲＥＦＥはこの所定上限値ＫＩＧＲＥＦＨに再設定される。
ＫＩＧＫＲＥＦ＝ＣＫＩＧＲＥＦ×ＫＩＧＫＭ
＋（１−ＣＫＩＧＲＥＦ）×ＫＩＧＫＲＥＦ  （１３）
ここで右辺のＫＩＧＫＲＥＦは、第１学習値の最新の過去値である。
続くステップＳ１６０では、進角学習フラグＦＫＩＧＫＮＡＤＶを「０」に設定し、本処理を終了する。
【００９７】
ステップＳ１５４でＫＩＧＫＭ≦ＫＩＧＫＮＲＥＦであって、学習値算出用遅角係数ＫＩＧＫＭが中間パラメータＫＩＧＫＮＲＥＦより進角側の値であるときは、ステップＳ１４５でスタートされたダウンカウントタイマＴＤＲＲＥＦの値が「０」であるか否かを判別する（ステップＳ１６１）。そしてＴＤＲＲＥＦ＞０である間は前記ステップＳ１７３に進み、ＴＤＲＲＥＦ＝０となると、図２５に示すＦＡＤＶＲＥＦ設定処理を実行する（ステップＳ１６２）。
【００９８】
図２５のステップＳ１８１では、エンジン水温ＴＷが所定水温ＴＷＲＭＨ（例えば１２０℃）より高いか否かを判別し、ＴＷ≦ＴＷＲＭＨであるときは、燃料噴射量の高負荷補正係数ＫＷＯＴが所定計数値ＫＷＯＴＫＮ（例えば１．４３８）より大きいか否かを判別する。高負荷補正係数ＫＷＯＴは、スロットル弁がほぼ全開とされるスロットル全開運転状態において「１．０」より大きな値に設定され、それ以外のエンジン運転状態では「１．０」に設定される。
【００９９】
ステップＳ１８２の答が否定（ＮＯ）、すなわちスロットル全開運転状態でないときは、ダウンカウントタイマＴＫＡＧＮＧＵの値が「０」であるか否かを判別する（ステップＳ１８３）。ダウンカウントタイマＴＫＡＧＮＧＵは、エンジンへの燃料供給を遮断するフュエルカット運転を終了した時点（燃料供給を再開した時点）において所定時間ＴＦＣＤ（例えば０．５秒）に設定される。ＴＫＡＧＮＧＵ＝０であってフュエルカット運転終了後所定時間ＴＦＣＤが経過しているときは、ステップＳ１８４に進み、進角学習許可フラグＦＡＤＶＲＥＦを「１」に設定する。
【０１００】
次いで気筒休止フラグＦＣＹＬＳＴＰが「１」であるか否かを判別し（ステップＳ１８６）、ＦＣＹＬＳＴＰ＝１であって一部気筒運転中であるときは、ダウンカウントタイマＴＤＲＲＥＦを一部気筒運転用所定時間ＴＭＤＲＲＦＣＳ（例えば１．０秒）に設定してスタートさせる（ステップＳ１８７）。またＦＣＹＬＳＴＰ＝０であって全筒運転中であるときは、ダウンカウントタイマＴＤＲＲＥＦを全筒運転用所定時間ＴＭＤＲＲＥＦＬ（例えば０．４〜１．０秒）に設定してスタートさせる（ステップＳ１８８）。
【０１０１】
ステップＳ１８１若しくはＳ１８２の答が肯定（ＹＥＳ）、またはステップＳ１８３の答が否定（ＮＯ）であるときは、ステップＳ１８５に進み、進角学習許可フラグＦＡＤＶＲＥＦを「０」に設定する。これにより、進角方向への学習値の更新が禁止される。平均的なエンジン運転状態から大きく外れたエンジン運転状態においては、学習値を進角方向へ更新することは好ましくないからである。
【０１０２】
図２４に戻り、ステップＳ１６３では、進角学習許可フラグＦＡＤＶＲＥＦが「１」であるか否かを判別し、ＦＡＤＶＲＥＦ＝０であって進角学習が許可されていないときは、学習値を更新することなく前記ステップＳ１７３に進む。
一方ＦＡＤＶＲＥＦ＝１であって進角学習が許可されているときは、下記式（１４）により、中間パラメータＫＩＧＫＮＲＥＦを進角補正項ＤＲＲＥＦだけデクリメントする（ステップＳ１６４）。これにより、中間パラメータＫＩＧＫＮＲＥＦは、進角方向に更新される。
ＫＩＧＫＮＲＥＦ＝ＫＩＧＫＮＲＥＦ−ＤＲＲＥＦ              （１４）
【０１０３】
ステップＳ１６５では、気筒休止フラグＦＣＹＬＳＴＰが「１」であるか否かを判別し、ＦＣＹＬＳＴＰ＝０であって全筒運転中であるときは、中間パラメータの第１のリミット処理を実行する（ステップＳ１６８）。具体的には、中間パラメータＫＩＧＫＮＲＥＦが所定下限値ＫＩＧＲＥＦＬより小さいときは、中間パラメータＫＩＧＫＮＲＥＦは、その所定下限値ＫＩＧＲＥＦＬに再設定される。
【０１０４】
次いでＥＧＲフラグＦＥＧＲＭが「１」であるか否かを判別し（ステップＳ１６９）、ＦＥＧＲＭ＝１であって排気還流を実行しているときは、第２学習値ＫＩＧＫＲＥＦＥを中間パラメータＫＩＧＫＮＲＥＦに設定して（ステップＳ１７０）、ステップＳ１７２に進む。またＦＥＧＲＭ＝０であって排気還流を実行していないときは、第１学習値ＫＩＧＫＲＥＦを中間パラメータＫＩＧＫＮＲＥＦに設定して（ステップＳ１７１）、ステップＳ１７２に進む。
【０１０５】
またステップＳ１６５でＦＣＹＬＳＴＰ＝１であって一部気筒運転中であるときは、中間パラメータＫＩＧＫＮＲＥＦの第２のリミット処理を実行する（ステップＳ１６６）。具体的には、中間パラメータＫＩＧＫＮＲＥＦが所定下限値ＫＩＧＲＦＣＬより小さいときは、中間パラメータＫＩＧＫＮＲＥＦは、その所定下限値ＫＩＧＲＦＣＬに再設定される。
【０１０６】
続くステップＳ１６７では、第３学習値ＫＩＧＫＲＦＣＳを中間パラメータＫＩＧＫＮＲＥＦに設定し、ステップＳ１７２に進む。
ステップＳ１７２では、進角学習フラグＦＫＩＧＫＮＡＤＶを「１」に設定する。
【０１０７】
図２３及び図２４の処理によれば、全筒運転においては、第１学習値ＫＩＧＫＲＥＦまたは第２学習値ＫＩＧＫＲＥＦＥが算出され、一部気筒運転においては、第３学習値ＫＩＧＫＲＦＣＳが算出されるたので、それぞれの運転状態に適した遅角係数の学習値が得られる。例えば一部気筒運転から全筒運転に、またはその逆に運転状態が移行し、かつ学習値ＫＩＧＫＲＥＦ，ＫＩＧＫＲＥＦＥ、またはＫＩＧＫＲＦＣＳが進角方向に更新されたときには、移行後の運転状態に適した学習値が、遅角係数ＫＩＧＫＮとして適用される（図２０，ステップＳ１１４〜Ｓ１１８）。その結果、そのような運転状態の変化直後であってもノッキングの抑制しつつ、十分なエンジン出力を得ることができる。
【０１０８】
以上のように本実施形態では、図１９及び図２０の処理により、ノッキングの検出結果に応じて設定される遅角係数ＫＩＧＫＮが、所定係数値ＫＩＧＫＮＣＳＸより大きいとき、すなわちノッキングの発生頻度が高く、点火時期の遅角補正量が大きいときは、一部気筒運転が禁止される（図５，ステップＳ２１７参照）。したがって、作動気筒数の変更に伴うトルクショックと、ノッキングの発生による点火時期の補正に伴うトルク変化とが重なることがなく、トルクショックを抑制することができる。
【０１０９】
本実施形態においては、気筒休止機構３０が切換手段に相当し、スロットル弁開度センサ４、吸気温センサ８、エンジン水温センサ９、クランク角度位置センサ１０、車速センサ１５，及びギヤ位置センサ１６が運転パラメータ検出手段を構成する。また、ＥＣＵ５のアナログ回路部５１，サブマイコン５２及びメインマイコン５３がノッキング検出手段を構成し、メインマイコン５３が指令手段、点火時期制御手段、補正手段、及び禁止手段を構成する。より具体的には、図１１の処理がノッキング検出手段の一部に相当し、図５の処理が指令手段に相当する。また図１６の処理が点火時期制御手段に相当し、図１８の処理が補正手段に相当し、図５のステップＳ２１７が禁止手段に相当する。
【０１１０】
（第２の実施形態）
本実施形態は、ノッキングの検出結果に応じて設定される遅角係数ＫＩＧＫＮにに応じて一部気筒運転を禁止することに代えて、一部気筒運転中は、点火時期の補正を制限し、点火時期の補正によるトルク変動を抑制するようにしたものである。以下に説明する点以外は、第１の実施形態と同一である。
【０１１１】
図２６は、本実施形態における気筒休止実行条件判定処理のフローチャートである。この処理は、第１の実施形態における図５の処理に対応するものであり、図５の処理のステップＳ２１７が削除されている。それ以外は、図５の処理と同一である。
【０１１２】
図２７は、本実施形態におけるリミット値算出処理のフローチャートである。この処理は、図２１のステップＳ１２６及びＳ１２７を削除し、ステップＳ１２０及びＳ１３４を追加したものである。
ステップＳ１２０では、気筒休止フラグＦＣＹＬＳＴＰが「１」であるか否かを判別し、ＦＣＹＬＳＴＰ＝０であって全筒運転中であるときは、ステップＳ１２１に進む。一方、ＦＣＹＬＳＴＰ＝１であって一部気筒運転中であるときは、上限値ＫＩＧＫＮＬＭＨ及び下限値ＫＩＧＫＮＬＭＬを、それぞれ所定上限値ＫＩＧＬＣＳＨ（例えば「１．５」であって、オクタン価８５程度の燃料に対応する値）及び所定下限値ＫＩＧＬＣＳＬ（例えば「１．０」であって、オクタン価９０程度の燃料に対応する値）に設定する（ステップＳ１３４）。
また制御モードフラグＦＫＮＦＢが「１」に設定されたとき、ステップＳ１２２またはステップＳ１２５からステップＳ１２８に進む。
【０１１３】
本実施形態では、一部気筒運転中は、遅角係数ＫＩＧＫＮの設定範囲が、所定上限値ＫＩＧＬＣＳＨと所定下限値値ＫＩＧＬＣＳＬで決まる範囲に制限される。すなわち、点火時期の遅角補正が、オクタン価９０程度のレギュラーガソリンか、それよりオクタン価の低いガソリンを使用したときの範囲に制限される。したがって、オクタン価の低いガソリンが使用されていたとしても、ノッキングは抑制され、且つ点火時期の補正によるトルク変動が抑制される。その結果、作動気筒数の変更に伴うトルクショックを抑制する制御（図８及び図９の処理）を行うことにより、トルクショックを効果的に抑制することができる。
【０１１４】
本実施形態では、図２６の処理が指令手段に相当し、図２７の処理が制限手段に相当する。
【０１１５】
（第３の実施形態）
本実施形態は、一部気筒運転中に遅角係数ＫＩＧＫＮの設定範囲を制限することに代えて、一部気筒運転中は、遅角係数ＫＩＧＫＮを所定係数値ＫＩＧＫＮＣＳ０（例えば、「１．５」であって、オクタン価８５程度の燃料に対応する値）に固定するようにしたものである。以下に説明する点以外は、第１の実施形態と同一である。
【０１１６】
本実施形態では、第２の実施形態と同様に、図２６に示す処理により、気筒休止条件が判定される。
【０１１７】
図２８及び図２９は、本実施形態におけるＫＩＧＫＮ算出処理のフローチャートである。この処理は、図１９の処理にステップＳ９０を追加し、図２０の処理のステップＳ１１４及びＳ１１５を削除するとともに、ステップＳ１１９を追加したものである。
【０１１８】
ステップＳ９０では、気筒休止フラグＦＣＹＬＳＴＰが「１」であるか否かを判別し、ＦＣＹＬＳＴＰ＝０であって全筒運転中であるときは、ステップＳ９１に進む。一方、ＦＣＹＬＳＴＰ＝１であって一部気筒運転中であるときは、ステップＳ１１９に進み、遅角係数ＫＩＧＫＮを所定係数値ＫＩＧＫＮＣＳ０に設定する。
またステップＳ１１２で、進角学習フラグＦＫＩＧＫＮＡＤＶが「１」であるときは、ステップＳ１１６に進む。
【０１１９】
このように本実施形態では、一部気筒運転中は、遅角係数ＫＩＧＫＮを、オクタン価８５程度の燃料に対応する所定係数値ＫＩＧＫＮＣＳ０に固定するようにしたので、オクタン価の低いガソリンが使用されていたとしても、ノッキングは抑制され、且つ点火時期補正量の変化に起因するトルク変化が発生しない。その結果、作動気筒数の変更に伴うトルクショックを抑制する制御（図８及び図９の処理）を行うことにより、トルクショックを効果的に抑制することができる。
【０１２０】
本実施形態では、図２６の処理が指令手段に相当し、図２８及び図２９が補正手段及び制限手段に相当する。
【０１２１】
（変形例１）
所定係数値ＫＩＧＫＮＣＳ０は、「１．０」（オクタン価９０程度の燃料に対応する値）から「１．５」（オクタン価８５程度の燃料に対応する値）の間の値に設定するようにしてもよい。通常使用されるガソリンのオクタン価は、９０程度あるいはそれより高いので、このような設定であっても、ノッキングはほとんど発生しない。
【０１２２】
（変形例２）
所定係数値ＫＩＧＫＮＣＳ０は、全筒運転時に算出される遅角係数ＫＩＧＫＮの学習値ＫＩＧＫＲＥＦＥまたはＫＩＧＫＲＥＦに所定加算値ＤＫＩＧＫＣＳ（例えば「０．３」）を加算した値に設定するようにしてもよい。ただし、その場合でも「１．５」（オクタン価８５程度の燃料に対応する値）を上限とすることが望ましい。学習値ＫＩＧＫＲＥＦＥまたはＫＩＧＫＲＥＦは、使用している燃料のオクタン価に応じた値となるので、このように設定することにより、一部気筒運転中においてもノッキングの発生を確実に抑制することができる。
【０１２３】
また上述した実施形態では、ＤＢＷ（Drive By Wire）型のスロットル弁を使用し、スロットル弁３を制御弁とし、アクチュエータ２４及びＥＣＵ５により、作動気筒数の切換に伴うトルク変動を抑制する吸入空気量制御手段を構成したが、アクセルペダルと機械的にリンクしたスロットル弁を使用し、このスロットル弁をバイパスするバイパス通路、及び該バイパス通路を介して吸入される空気量を制御するバイパス空気量制御弁を設け、バイパス空気量制御弁をＥＣＵ５により、吸入空気量制御手段を構成するようにしてもよい。
【０１２４】
また本発明は、クランク軸を鉛直方向とした船外機などのような船舶推進機用エンジンなどの点火時期制御にも適用が可能である。
【図面の簡単な説明】
【０１２５】
【図１】本発明の一実施形態にかかる内燃機関及びその制御装置の構成を示す図である。
【図２】気筒休止機構の油圧制御系の構成を示すブロック図である。
【図３】ノッキング判定用回路の構成を示すブロック図である。
【図４】ノッキング判定の手法を説明するためのタイムチャートである。
【図５】気筒休止条件を判定する処理のフローチャートである。
【図６】図５の処理で使用されるＴＭＴＷＣＳＤＬＹテーブルを示す図である。
【図７】図５の処理で使用されるＴＨＣＳテーブルを示す図である。
【図８】スロットル弁の目標開度（ＴＨＣＭＤ）を算出する処理のフローチャートである。
【図９】スロットル弁の目標開度（ＴＨＣＭＤ）を算出する処理のフローチャートである。
【図１０】エンジンの目標トルク（ＴＲＱＥＮＧ）の推移を示すタイムチャートである。
【図１１】ノッキング判定処理のフローチャートである。
【図１２】ノッキング判定に使用するゲイン係数（ＧＡＭＰ）を算出する処理のフローチャートである。
【図１３】ノッキング判定に使用する判定閾値の補正係数（ＫＡＧＴＷ）を算出する処理のフローチャートである。
【図１４】図１３の処理で使用されるテーブルを示す図である。
【図１５】点火時期制御の概要を説明するための図である。
【図１６】点火時期（ＩＧＣＭＤ）を算出する処理のフローチャートである。
【図１７】点火時期の補正項（ＩＧＣＲ）を算出する処理のフローチャートである。
【図１８】点火時期のノック補正項（ＩＧＫＮＯＣＫ）を算出する処理のフローチャートである。
【図１９】遅角係数（ＫＩＧＫＮ）を算出する処理のフローチャートである。
【図２０】遅角係数（ＫＩＧＫＮ）を算出する処理のフローチャートである。
【図２１】遅角係数（ＫＩＧＫＮ）のリミット値を算出する処理のフローチャートである。
【図２２】図２１の処理で使用されるテーブルを示す図である。
【図２３】遅角係数（ＫＩＧＫＮ）の学習値を算出する処理のフローチャートである。
【図２４】遅角係数（ＫＩＧＫＮ）の学習値を算出する処理のフローチャートである。
【図２５】学習値の進角方向への更新を許可するフラグ（ＦＡＤＶＲＥＦ）の設定を行う処理のフローチャートである。
【図２６】本発明の第２の実施形態にかかる気筒休止条件判定処理のフローチャートである。
【図２７】リミット値算出処理（第２の実施形態）のフローチャートである。
【図２８】本発明の第３の実施形態にかかるＫＩＧＫＮ算出処理のフローチャートである。
【図２９】本発明の第３の実施形態にかかるＫＩＧＫＮ算出処理のフローチャートである。
【符号の説明】
【０１２６】
１  内燃機関
４  スロットル弁開度センサ（運転パラメータ検出手段）
５  電子制御ユニット
８  吸気温センサ（運転パラメータ検出手段）
９  エンジン水温センサ（運転パラメータ検出手段）
１０  クランク角度位置センサ（運転パラメータ検出手段）
１５  車速センサ（運転パラメータ検出手段）
１６  ギヤ位置センサ（運転パラメータ検出手段）
１１  ノックセンサ（ノッキング検出手段）
１２  点火プラグ
３０  気筒休止機構（切換手段）
５１  アナログ回路部（ノッキング検出手段）
５２  サブマイクロコンピュータ（ノッキング検出手段）
５３  メインマイクロコンピュータ（ノッキング検出手段、指令手段、点火時期制御手段、補正手段、制限手段）
【図１】
2008223768.tif 000003
【図２】
2008223768.tif 000004
【図３】
2008223768.tif 000005
【図４】
2008223768.tif 000006
【図５】
2008223768.tif 000007
【図６】
2008223768.tif 000008
【図７】
2008223768.tif 000009
【図８】
2008223768.tif 000010
【図９】
2008223768.tif 000011
【図１０】
2008223768.tif 000012
【図１１】
2008223768.tif 000013
【図１２】
2008223768.tif 000014
【図１３】
2008223768.tif 000015
【図１４】
2008223768.tif 000016
【図１５】
2008223768.tif 000017
【図１６】
2008223768.tif 000018
【図１７】
2008223768.tif 000019
【図１８】
2008223768.tif 000020
【図１９】
2008223768.tif 000021
【図２０】
2008223768.tif 000022
【図２１】
2008223768.tif 000023
【図２２】
2008223768.tif 000024
【図２３】
2008223768.tif 000025
【図２４】
2008223768.tif 000026
【図２５】
2008223768.tif 000027
【図２６】
2008223768.tif 000028
【図２７】
2008223768.tif 000029
【図２８】
2008223768.tif 000030
【図２９】
2008223768.tif 000031