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