(57)【要約】【課題】出力トルクロスを生じることなく高い出力トルクを得るとともに、連続ノック発生による聴感悪化を回避した内燃機関の点火時期制御装置を得る。【解決手段】気筒別点火時期設定手段２０４は、基準点火時期制御手段２０２および気筒別補正値設定手段２０３を備えている。気筒別補正値設定手段２０３は、内燃機関を構成する気筒数だけ気筒別補正値Ｋｓａを有する。基準点火時期制御手段２０２は、全気筒共通の基準点火時期θｒを演算し、ノック発生時は、連続してノックが発生しないように全気筒一律で遅角制御する。気筒別補正値設定手段２０３は、気筒別最適点火時期のばらつきを補償するための気筒別補正値Ｋｓａを演算するとともに、ノック発生回数が所定回数以上となった気筒以外の気筒の気筒別補正値Ｋｓａを進角側となるように設定する。【選択図】図２
2007327346.tif 000002
【特許請求の範囲】
【請求項１】
複数の気筒を有する内燃機関の点火時期制御装置であって、
前記複数の気筒のいずれかのノック発生を検出するノック検出手段と、
前記複数の気筒のすべてに対して共通の基準点火時期を設定する基準点火時期制御手段と、
前記複数の気筒の各々に対して個別に異なる気筒別点火時期を設定する気筒別点火時期設定手段とを備え、
前記基準点火時期制御手段は、
前記ノック発生の検出状態に応じて前記基準点火時期を補正する基準点火時期補正手段を含み、
前記基準点火時期補正手段は、前記ノック発生が検出された場合には前記基準点火時期を遅角側に補正し、前記ノック発生が検出されなかった場合には前記基準点火時期を進角側に補正し、
前記気筒別点火時期設定手段は、
前記複数の気筒の各々の気筒別最適点火時期のばらつきを補償するための気筒別補正値を設定する気筒別補正値設定手段を含み、
前記気筒別補正値に応じて前記基準点火時期に基づいた前記気筒別点火時期を設定し、
前記気筒別補正値設定手段は、
前記気筒別補正値を前記複数の気筒の数と同数だけ設定し、
前記複数の気筒のいずれかで今回のノック発生が検出されてから、前記複数の気筒のいずれにもノック発生が検出されない期間を経て、前記複数の気筒のいずれかで次回のノック発生が検出されるまでのノック−ノック発生期間において、前記複数の気筒別補正値のうち、前記今回のノック発生までに所定のノック発生回数に達していない気筒に対応する少なくとも１つの気筒別補正値を進角側の値に設定することを特徴とする内燃機関の点火時期制御装置。
【請求項２】
前記気筒別補正値設定手段は、
前記複数の気筒に対応するすべての気筒別補正値を一括して記憶する気筒別補正値一括記憶手段を有し、
前記ノック−ノック発生期間において、前記複数の気筒別補正値のうち、前記今回のノック発生までに前記所定のノック発生回数に達した気筒に対応する気筒別補正値を固定するとともに、前記今回のノック発生までに前記所定のノック発生回数に達していない気筒に対応する少なくとも１つの気筒別補正値を進角側の値に設定する処理を繰り返し実行し、
前記複数の気筒に対応するすべての気筒別補正値が少なくとも１回ずつ固定された場合に、前記気筒別補正値一括記憶手段に前記すべての気筒別補正値を一括して記憶させることを特徴とする請求項１に記載の内燃機関の点火時期制御装置。
【請求項３】
前記気筒別補正値設定手段は、前記気筒別補正値一括記憶手段への前記すべての気筒別補正値の一括記憶処理を、所定回数だけ繰り返し実行することを特徴とする請求項２に記載の内燃機関の点火時期制御装置。
【請求項４】
前記気筒別補正値設定手段は、前記気筒別補正値一括記憶手段への前記すべての気筒別補正値の一括記憶処理を、連続的に繰り返し実行することを特徴とする請求項２に記載の内燃機関の点火時期制御装置。
【請求項５】
前記気筒別補正値設定手段は、所定条件が成立した場合に、前記気筒別補正値一括記憶手段への前記すべての気筒別補正値の一括記憶処理を、繰り返し実行することを特徴とする請求項２に記載の内燃機関の点火時期制御装置。
【請求項６】
前記気筒別補正値設定手段は、前記内燃機関の始動および停止が所定回数だけ実行されるごと、または所定時間が経過するごと、または前記内燃機関の使用燃料量の所定量変化が所定回数だけ発生するごとに、前記所定条件が成立したと判定することを特徴とする請求項５に記載の内燃機関の点火時期制御装置。
【請求項７】
前記気筒別補正値設定手段は、前記内燃機関の所定運転条件が成立する場合に、前記所定条件が成立したと判定することを特徴とする請求項５に記載の内燃機関の点火時期制御装置。
【請求項８】
前記気筒別補正値設定手段は、初期値設定手段を含み、
前記初期値設定手段は、前記気筒別補正値一括記憶手段への前記すべての気筒別補正値の一括記憶処理を繰り返し実行する際、または、前記所定条件が非成立となって前記一括記憶処理を中断してから前記所定条件が再び成立して前記一括記憶処理を再開する際に、前記気筒別補正値一括記憶手段に記憶された前記複数の気筒に対応するすべての気筒別補正値を初期値として設定することを特徴とする請求項２から請求項７までのいずれか１項に記載の内燃機関の点火時期制御装置。
【請求項９】
前記気筒別補正値設定手段は、
前記複数の気筒のうちのノック発生気筒に対応する気筒別補正値を順次に記憶する気筒別補正値順次記憶手段を有し、
前記ノック−ノック発生期間において、前記複数の気筒別補正値のうち、前記今回のノック発生までに前記所定のノック発生回数に達した気筒に対応する気筒別補正値を固定するとともに、前記今回のノック発生までに前記所定のノック発生回数に達していない気筒に対応する少なくとも１つの気筒別補正値を進角側の値に設定する処理を繰り返し実行し、
前記複数の気筒別補正値のうちのいずれかが少なくとも１回ずつ固定された場合に、前記少なくとも１回ずつ固定された前記ノック発生気筒の気筒別補正値を、前記気筒別補正値順次記憶手段に順次に記憶させることを特徴とする請求項１に記載の内燃機関の点火時期制御装置。
【請求項１０】
前記気筒別補正値設定手段は、前記気筒別補正値順次記憶手段への前記ノック発生気筒の気筒別補正値の順次記憶処理を、所定回数だけ繰り返し実行することを特徴とする請求項９に記載の内燃機関の点火時期制御装置。
【請求項１１】
前記気筒別補正値設定手段は、前記気筒別補正値順次記憶手段への前記ノック発生気筒の気筒別補正値の順次記憶処理を、連続的に繰り返し実行することを特徴とする請求項９に記載の内燃機関の点火時期制御装置。
【請求項１２】
前記気筒別補正値設定手段は、所定条件が成立した場合に、前記気筒別補正値順次記憶手段への前記ノック発生気筒の気筒別補正値の順次記憶処理を、繰り返し実行することを特徴とする請求項９に記載の内燃機関の点火時期制御装置。
【請求項１３】
前記気筒別補正値設定手段は、前記内燃機関の始動および停止が所定回数だけ実行されるごと、または所定時間が経過するごと、または前記内燃機関の使用燃料量の所定量変化が所定回数だけ発生するごとに、前記所定条件が成立したと判定することを特徴とする請求項１２に記載の内燃機関の点火時期制御装置。
【請求項１４】
前記気筒別補正値設定手段は、前記内燃機関の所定運転条件が成立する場合に、前記所定条件が成立したと判定することを特徴とする請求項１２に記載の内燃機関の点火時期制御装置。
【請求項１５】
前記気筒別補正値設定手段は、初期値設定手段を含み、
前記初期値設定手段は、前記気筒別補正値順次記憶手段への前記ノック発生気筒の気筒別補正値の順次記憶処理を繰り返し実行する際、または、前記所定条件が非成立となって前記順次記憶処理を中断してから前記所定条件が再び成立して前記順次記憶処理を再開する際に、前記気筒別補正値順次記憶手段に記憶された前記ノック発生気筒の気筒別補正値を初期値として設定することを特徴とする請求項９から請求項１４までのいずれか１項に記載の内燃機関の点火時期制御装置。
【請求項１６】
前記気筒別補正値設定手段は、進角処理手段を含み、
前記進角処理手段は、前記ノック−ノック発生期間において、前記複数の気筒別補正値のうち、前記今回のノック発生までに前記所定のノック発生回数に達していない気筒に対応する少なくとも１つの気筒別補正値を、所定継続条件にしたがって進角側の値に設定することを特徴とする請求項１から請求項１５までのいずれか１項に記載の内燃機関の点火時期制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、複数の気筒を有する内燃機関（エンジン）の点火時期制御装置に関し、特にノッキング（以下、「ノック」と略称する）の発生を抑制して高出力を得るための新規な技術改良に関するものである。
【背景技術】
【０００２】
従来から、内燃機関の点火時期制御装置においては、ノック発生の有無に応じて点火時期を遅らせる（遅角側に制御する）か、または点火時期を進ませる（進角側に制御する）ことが行われている（たとえば、特許文献１参照）。
また、複数の気筒のいずれかにノックが発生した場合にすべての気筒の点火時期を一律に遅角制御するものも提案されている（たとえば、特許文献２参照）。
また、各気筒別にノック発生を検出してノック発生気筒に関して独立に点火時期を遅らせるものも提案されている（たとえば、特許文献３参照）。
【０００３】
また、ノック発生時にすべての気筒を一律に遅角制御した場合の過遅角制御を回避するために、気筒ごとに事前に設定された複数の点火時期マップから点火時期を算出する内燃機関の点火時期制御装置も提案されている（たとえば、特許文献４参照）。
さらに、気筒ごとに独立して点火時期を制御した場合の過大な連続ノック発生を回避するために、同一気筒で連続してノックが発生した場合にはノック発生気筒のみの点火時期を遅角側に設定し、同一気筒以外で連続してノックが発生した場合には、すべての気筒の点火時期を遅角側に設定する内燃機関の点火時期制御装置も提案されている（たとえば、特許文献５参照）。
【０００４】
【特許文献１】特開昭５８−５３６７５号公報
【特許文献２】特開昭５８−１６５５７４号公報
【特許文献３】特開昭５９−２５０８１号公報
【特許文献４】特開平９−２４２６５５号公報
【特許文献５】特開昭６２−１９５４６５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
従来の内燃機関の点火時期制御装置では、特許文献２のようにノック発生時にすべての気筒の点火時期を一律に遅角制御した場合には、ノックが発生する点火時期（以下、「ノック限界点火時期」という）が気筒ごとに異なるにもかかわらず、複数の気筒のうちノック限界点火時期が相対的に遅角側にある気筒で発生したノックに応じて、すべての気筒の点火時期が一律に遅角制御されるので、ノック限界点火時期が相対的に進角側にある気筒に対しては過遅角状態での運転となってしまい、出力トルクロスが生じるという課題があった。
【０００６】
また、上記のようにすべての気筒を一律に遅角側に制御する場合には、複数の気筒のうち、相対的にノック限界点火時期が遅角側にある気筒にノック発生が集中するので、ノック限界点火時期が相対的に進角側にある他の気筒に比べて、ノック発生が集中した気筒およびそのブロックの劣化が激しくなり、最終的にエンジンの破損につながる可能性があるという課題があった。
【０００７】
また、特許文献３のように気筒ごとに独立して点火時期を制御した場合には、ノック発生に応じた遅角量は、実際にはノック発生気筒における次回の点火サイクルで初めて反映されることから、次回に点火される他の気筒に対しては、ノック発生の可能性があるにもかかわらずノック発生に応じた遅角量が反映されないので、過大に連続してノックが発生してしまい、ユーザの聴感を悪化させる可能性があるという課題があった。
【０００８】
また、特許文献４のように、一律遅角制御時の出力トルクロスの回避を目的として、気筒ごとにマップから点火時期を算出した場合には、エンジンの個体ばらつきに起因したノック限界点火時期のばらつきや、経年変化によるノック限界点火時期のばらつきが考慮されていないので、点火時期を各気筒における最適点火時期に常に設定することができず、結局、出力トルクロスを十分に回避することができないという課題があった。
【０００９】
一方、特許文献４のように、独立遅角制御時の連続ノック発生の回避を目的として、同一気筒での連続ノック発生時にはノック発生気筒のみの点火時期を遅角制御し、同一気筒以外での連続ノック発生時にはすべての気筒の点火時期を一律に遅角制御した場合には、ノック発生頻度に基づくノック連続発生状態の判定結果に応じてすべての気筒を遅角制御することから、ノックが２回〜数回にわたって連続発生することになり、たとえ最低の２回であっても過大なノックが連続発生すればユーザの聴感が悪化するので、結局、一律遅角制御した場合よりも商品性が低いという課題があった。
【００１０】
この発明は、一律遅角制御時と独立遅角制御時とで相反して発生する上記課題の両方を解決するためになされたものであり、ノック発生が検出された場合にすべての気筒を一律に遅角側に点火時期を制御する際に、気筒ごとの最適点火時期のばらつきを記憶しておき、気筒ごとに最適点火時期を設定可能とすることにより、連続ノック発生を回避するとともに内燃機関の性能低下を防止した内燃機関の点火時期制御装置を得ることを目的とする。
【課題を解決するための手段】
【００１１】
この発明による内燃機関の点火時期制御装置は、複数の気筒を有する内燃機関の点火時期制御装置であって、複数の気筒のいずれかのノック発生を検出するノック検出手段と、複数の気筒のすべてに対して共通の基準点火時期を設定する基準点火時期制御手段と、複数の気筒の各々に対して個別に異なる気筒別点火時期を設定する気筒別点火時期設定手段とを備え、基準点火時期制御手段は、ノック発生の検出状態に応じて基準点火時期を補正する基準点火時期補正手段を含み、基準点火時期補正手段は、ノック発生が検出された場合には基準点火時期を遅角側に補正し、ノック発生が検出されなかった場合には基準点火時期を進角側に補正し、気筒別点火時期設定手段は、複数の気筒の各々の気筒別最適点火時期のばらつきを補償するための気筒別補正値を設定する気筒別補正値設定手段を含み、気筒別補正値に応じて基準点火時期に基づいた気筒別点火時期を設定し、気筒別補正値設定手段は、気筒別補正値を複数の気筒の数と同数だけ設定し、複数の気筒のいずれかで今回のノック発生が検出されてから、複数の気筒のいずれにもノック発生が検出されない期間を経て、複数の気筒のいずれかで次回のノック発生が検出されるまでのノック−ノック発生期間において、複数の気筒別補正値のうち、今回のノック発生までに所定のノック発生回数に達していない気筒に対応する少なくとも１つの気筒別補正値を進角側の値に設定するものである。
【発明の効果】
【００１２】
この発明によれば、複数の気筒の各々を最適点火時期で制御することにより、出力トルクロスが生じることがなく、高い出力トルクを得ることができる。
また、いずれかの気筒のノック発生に応答してすべての気筒を一律に遅角側に制御することにより、ノックが連続して発生することもないので、出力トルクを向上させるとともに、ノック制御性の確保によってユーザの聴感悪化を抑制することができる。
【発明を実施するための最良の形態】
【００１３】
実施の形態１．
以下、図面を参照しながら、この発明の実施の形態１について説明する。
図１はこの発明の実施の形態１に係る内燃機関の点火時期制御装置を概略的に示すブロック構成図である。
図１において、内燃機関１０１は、複数（Ｎ個）の気筒１０２により構成されている。ここでは、代表的に１つの気筒１０２のみが示されている。
【００１４】
内燃機関１０１の各気筒１０２には、エアクリーナ１０３、スロットル弁１０４、サージタンク１０５、および吸気マニホールド１０６を介して、吸入空気が供給される。
スロットル弁１０４の上流部には、吸入空気量Ｑａを検出するエアフローセンサ１０７が設けられている。
スロットル弁１０４は、運転者により操作されるアクセルペダル（図示せず）と連動して作動し、吸入空気量Ｑａを調整する。
【００１５】
スロットル弁１０４には、スロットル開度を検出するスロットル開度センサ１１６と、スロットル開度が全閉に近いアイドル状態を検出するアイドルセンサ１１７とが設けられている。
内燃機関（エンジン）１０１の本体ブロックには、ノック振動に対応したノック信号Ｃｋを生成するノックセンサ１１８が取り付けられている。
【００１６】
内燃機関１０１により回転駆動されるクランク軸には、クランク角度位置およびエンジン回転速度Ｎｅに対応したクランク角信号を出力するクランク角センサ１１９が設けられている。また、クランク軸と同期回転するカム軸には、カム角信号を出力するカム角センサ１２０が設けられている。
各種センサ１０７、１１６〜１２０の検出情報（吸入空気量Ｑａ、ノック信号Ｃｋ、エンジン回転速度Ｎｅなど）は、ＥＣＵ（エンジンコントロールユニット）１１０に入力される。
【００１７】
吸気マニホールド１０６には、気筒１０２ごとに個別に対応した複数（Ｎ個）の燃料噴射弁１０８が設けられている。
燃料噴射弁１０８は、各気筒１０２に燃料を噴射供給し、吸入空気および燃料からなる混合気を形成する。
【００１８】
燃料噴射弁１０８からの燃料噴射量は、ＥＣＵ１１０で算出される噴射駆動信号（図示せず）によって制御される。
ＥＣＵ１１０は、吸入空気量Ｑａおよびエンジン回転速度Ｎｅに応じて、燃料噴射弁１０８に対する噴射駆動信号を演算して燃料噴射弁１０８に入力する。
【００１９】
内燃機関１０１の各気筒１０２には、混合気を点火して燃焼させるための点火プラグ１２２が装着されている。
点火プラグ１２２による点火時期は、ＥＣＵ１１０で算出される点火信号Ｐによって制御される。
ＥＣＵ１１０は、点火時期制御演算（後述する）にしたがって点火信号Ｐを設定し、点火信号Ｐを、Ｉ／Ｏコントローラ１１４から点火コイル１２１に印加し、点火プラグ１２２から放電火花を発生させる。
【００２０】
ＥＣＵ１１０は、各種演算処理を実行するＣＰＵ１１１と、ＣＰＵ１１１の動作プログラムなどを格納するＲＯＭ１１２と、ＣＰＵ１１１の演算結果などを格納するＲＡＭ１１３と、各種センサからの検出信号を取り込むとともに各種アクチュエータに対する制御信号（噴射駆動信号、点火信号Ｐなど）を出力するＩ／Ｏコントローラ１１４と、ノックセンサ１１８からのノック信号Ｃｋを処理して取り込むＩ／Ｆ回路１１５とを備えている。
【００２１】
Ｉ／Ｆ回路１１５は、ここでは図示を省略するが、ノック振動周波数を通過させるバンドパスフィルタと、バンドパスフィルタ通過後の信号を増幅する増幅回路と、増幅後の信号のピーク値を検出するピークホールド回路とにより構成されている。
【００２２】
Ｉ／Ｆ回路１１５は、ノック発生時を含むタイミング期間（たとえば、圧縮上死点ＴＤＣ以後のクランク角度期間ＡＴＤＣ１０［ｄｅｇＣＡ］〜ＡＴＤＣ４０［ｄｅｇＣＡ］）に入力されたノック信号Ｃｋのうち、バンドパスフィルタ通過後のノック周波数信号（たとえば、７［ｋＨｚ］）を増幅し、増幅後のノック周波数信号のピーク値（ノック発生時を含むタイミング期間におけるノック周波数信号の最大値）を保持する。
Ｉ／Ｆ回路１１５内で保持されたピーク値は、各気筒の燃焼サイクルごとに、Ｉ／Ｏコントローラ１１４でＡ／Ｄ変換され、ノック検出値ＶｐとしてＲＡＭ１１３内に格納される。
【００２３】
次に、図１とともに図２を参照しながら、この発明の実施の形態１による動作について説明する。
図２はこの発明の実施の形態１に係る内燃機関の点火時期制御装置の要部を示す機能ブロック図であり、主として図１内のノックセンサ１１８、点火コイル１２１および点火プラグ１２２と関連したＥＣＵ１１０の機能構成を示している。
【００２４】
図２においては、内燃機関の点火時期制御装置の要部として、ノック検出手段２０１と、基準点火時期設定手段２０２と、気筒別点火時期設定手段２０４とが示されている。
気筒別点火時期設定手段２０４は、気筒別補正値設定手段２０３と、最終点火時期設定手段２０５とを備えている。
【００２５】
ノック検出手段２０１は、図１内のノックセンサ１１８およびＥＣＵ１１０により構成され、複数の気筒のいずれかのノック発生を検出し、ノック判定結果（ノック発生の有無）に応じたノック遅角量θｋを、基準点火時期設定手段２０２と気筒別点火時期設定手段２０４内の気筒別補正値設定手段２０３とに入力する。
また、基準点火時期制御手段２０２および気筒別点火時期設定手段２０４は、ＥＣＵ１１０内のＩ／Ｏコントローラ１１４、ＣＰＵ１１１、ＲＡＭ１１３およびＲＯＭ１１２により構成されている。
【００２６】
基準点火時期設定手段２０２は、複数の気筒のすべてに対して共通の基準点火時期θｒを設定し、気筒別点火時期設定手段２０４内の最終点火時期設定手段２０５に入力する。
また、基準点火時期制御手段２０２は、ノック遅角量θｋ（ノック発生の検出状態）に応じて基準点火時期θｒを補正する基準点火時期補正手段を含む。
基準点火時期設定手段２０２内の基準点火時期補正手段は、ノック発生が検出された場合には基準点火時期θｒを遅角側に補正し、ノック発生が検出されなかった場合には基準点火時期θｒを進角側に補正する。
【００２７】
気筒別点火時期設定手段２０４内の気筒別補正値設定手段２０３は、複数の気筒の各々の気筒別最適点火時期のばらつきを補償するための気筒別補正値Ｋｓａを設定する。
気筒別補正値設定手段２０３は、複数の気筒の数と同数（Ｎ個）の気筒別補正値Ｋｓａ［ｎ］（ｎ＝１，２，・・・，Ｎ）を設定する。
ここで、気筒別補正値Ｋｓａに付された［  ］は、配列を意味し、「ｎ（数字）」は気筒番号を指示するものとする。
【００２８】
また、後述するように、気筒別補正値設定手段２０３は、複数の気筒のいずれかで今回のノック発生が検出されてから、複数の気筒のいずれにもノック発生が検出されない期間を経て、複数の気筒のいずれかで次回のノック発生が検出されるまでの「ノック−ノック発生期間」において、複数の気筒別補正値のうち、今回のノック発生までに所定のノック発生回数α１に達していない気筒に対応する少なくとも１つの気筒別補正値Ｋｓａを進角側の値に設定する。
【００２９】
気筒別点火時期設定手段２０４内の最終点火時期設定手段２０５は、気筒別補正値Ｋｓａに応じて、かつ基準点火時期θｒに基づいて、複数の気筒の各々に対して個別に異なる最終点火時期θｐを設定する。
【００３０】
図１および図２において、まず、ノック検出手段２０１は、ノックセンサ１１８から出力されるノック信号Ｃｋに基づき、今回点火した気筒Ｎｐでのノック検出値ＶｐをＲＡＭ１１３内に格納する。
また、ノック検出手段２０１を構成するＣＰＵ１１１は、あらかじめＲＯＭ１１２に格納されているプログラム（処理手順）にしたがい、ノック検出値Ｖｐに基づいてノックが発生したか否かを判定し、ノック判定結果に応じたノック遅角量θｋを演算する。
【００３１】
続いて、基準点火時期制御手段２０２を構成するＣＰＵ１１１は、Ｉ／Ｏコントローラ１１４を介してＲＡＭ１１３内に格納されたエンジン回転速度Ｎｅおよび吸入空気量Ｑａに基づき、あらかじめＲＯＭ１１２に格納されているプログラム（処理手順）にしたがって基本点火時期θｂを演算し、基本点火時期θｂとノック検出手段２０１で演算されたノック遅角量θｋとを用いて基準点火時期θｒを演算する。
【００３２】
次に、気筒別点火時期設定手段２０４を構成するＣＰＵ１１１は、詳細については後述するが、ＲＡＭ１１３内に格納された各種の入力信号および出力信号を用いて、あらかじめＲＯＭ１１２に格納されているプログラム（処理手順）にしたがう処理動作により、気筒ごとの最終点火時期θｐを演算する。
最終点火時期θｐは、点火時期Ｉ／Ｏコントローラ１１４を介して、点火信号Ｐとして点火コイル１２１に入力され、点火プラグを点火して点火時期を制御する。
【００３３】
以下、気筒別点火時期設定手段２０４による最終点火時期θｐの演算処理について詳細に説明する。
まず、気筒別点火時期設定手段２０４内の気筒別補正値設定手段２０３は、気筒別点火時期設定手段２０４と同様に、Ｉ／Ｏコントローラ１１４、ＲＡＭ１１３、ＲＯＭ１１２およびＣＰＵ１１１の機能として動作する。
【００３４】
気筒別補正値設定手段２０３は、前述のように、内燃機関１０１を構成する気筒数と同一数の気筒別補正値Ｋｓａ［ｎ］を有し、ノック−ノック発生期間（いずれかの気筒で発生した今回のノックに対して基準点火時期θｒを遅角側に制御した時点から、どの気筒にもノックが発生せずに基準点火時期θｒを進角側に制御している期間を経て、いずれかの気筒で次回のノックが発生して基準点火時期θｒを遅角側に制御する時期まで期間）において、気筒別補正値Ｋｓａ［ｎ］のうち、今回のノック発生までに所定のノック発生回数α１に達していない気筒のうち、少なくとも１つ以上の気筒別補正値Ｋｓａの値を、所定のノック発生回数α１に達した気筒における気筒別補正値Ｋｓａの値に比べて、点火時期が進角側になるよう設定する。
【００３５】
このとき、今回のノック発生で所定のノック発生回数α１に達した気筒の気筒別補正値Ｋｓａは、そのままの値に固定する。
または、気筒別補正値Ｋｓａの上記固定処理に代えて、今回のノック発生で所定のノック発生回数α１に達した気筒の気筒別補正値Ｋｓａを、そのままの値に比べて相対的に点火時期が遅角側になる値に固定してもよい。
【００３６】
続いて、気筒別点火時期設定手段２０４内の最終点火時期設定手段２０５は、気筒別補正値設定手段２０３で設定された気筒別補正値Ｋｓａ［ｎ］と、基準点火時期制御手段２０２で計算された基準点火時期θｒとに基づいて、次回点火する気筒の最終点火時期θｐを演算し、次回点火する気筒のクランク角が最終点火時期θｐに達したタイミングで、空気と燃料との混合気に点火するための点火信号Ｐを生成する。
【００３７】
次に、図３を参照しながら、気筒別補正値設定手段２０３の処理動作について、さらに詳細に説明する。図３はＣＰＵ１１１が実行する気筒別補正値Ｋｓａ［ｎ］の演算処理を示すフローチャートである。
図３の処理ルーチンは、あらかじめ定められた特定クランク角度（たとえば、ＢＴＤＣ７５［ｄｅｇＣＡ］）ごとに発生する割込み信号によって呼び出され、ＲＡＭ１１３内に格納された各種の入力信号および出力信号を用いてあらかじめＲＯＭ１１２に格納されているプログラム（処理手順）にしたがって実行される。なお、「ＢＴＤＣ」は、内燃機関１０１の圧縮上死点以前のクランク角度を表す。
【００３８】
図１において、クランク角センサ１１９は、クランク軸の回転と同期したパルスからなるクランク角信号（クランク角位置およびエンジン回転速度Ｎｅに対応）を生成する。
同様に、カム角センサ１２０は、クランク軸が２回転する間に１回転するカム軸の回転と同期したパルスからなるカム角信号（気筒識別信号）を生成する。
クランク角信号およびカム角信号は、ＥＣＵ１１０に入力され、Ｉ／Ｏコントローラ１１４を介してＲＡＭ１１３に格納される。
【００３９】
図３において、まず、ＥＣＵ１１０は、ＲＡＭ１１３に格納されたクランク角信号およびカム角信号に基づく演算により、今回の点火制御対象となった気筒の番号ｎを識別し、ｎ番気筒にノックが発生したか否かを判定する（ステップＳ５０１）。
このとき、具体的には、Ｉ／Ｏコントローラ１１４でＡ／Ｄ変換されてＲＡＭ１１３に格納されたノック検出値Ｖｐと、あらかじめ算出されたノック判定レベルＶｔｈとを比較して、「Ｖｐ＞Ｖｔｈ」の関係を満たすか否かにより、ノックが発生したか否かを判定する。
【００４０】
ステップＳ５０１において、Ｖｐ≦Ｖｔｈ（すなわち、ＮＯ）と判定されれば、今回点火した気筒Ｎｐでノックは発生していないものと見なし、ステップＳ５０６（後述する）に進む。
一方、ステップＳ５０１において、Ｖｐ＞Ｖｔｈ（すなわち、ＹＥＳ）と判定されれば、今回点火した気筒Ｎｐでノックが発生したものと見なし、ノック発生気筒のノック発生回数カウンタＣＫＮの値を所定値（たとえば、１［回］）だけカウントアップ（インクリメント）する（ステップＳ５０２）。
ステップＳ５０２により、ノック発生回数カウンタＣＫＮは、「ＣＫＮ＋所定値」に更新される。
【００４１】
続いて、ノック発生気筒Ｎｋのノック発生回数カウンタＣＫＮが所定回数α１（たとえば、２［回］）以上であるか否かを判定し（ステップＳ５０３）、ＣＫＮ＜α１（すなわち、ＮＯ）と判定されれば、ステップＳ５０６に進む。
一方、ステップＳ５０３において、ＣＫＮ≧α１（すなわち、ＹＥＳ）と判定されれば、ノック発生気筒Ｎｋに設定されている気筒別補正値Ｋｓａ［Ｎｋ］の値を前回値に固定する（ステップＳ５０４）。
【００４２】
なお、図３内のステップＳ５０４においては、今回のノック発生の検出結果に応答して、所定のノック発生回数α１に達した気筒の気筒別補正値Ｋｓａ［Ｎｋ］の値を、そのままの値に固定しているが、「Ｋｓａ［Ｎｋ］−所定値」というように減少させ、そのままの値に比べて相対的に点火時期が遅角側になる値に固定してもよい。
【００４３】
次に、ノック発生回数カウンタＣＫＮが所定回数α１未満となっている気筒の気筒別補正値Ｋｓａ［Ｎｍ］（Ｎｍは、ノック発生気筒Ｎｋ以外の気筒を示す）の値を所定値だけ増大させ、今回のノック発生によってノック発生回数が所定回数α１に達したノック発生気筒Ｎｋの気筒別補正値Ｋｓａ［Ｎｋ］の値よりも、点火時期が進角側になるように設定して（ステップＳ５０５）、図３の処理ルーチンを終了する。
【００４４】
なお、ノック発生回数が所定回数α１以上に達した場合のみに、ステップＳ５０５で気筒別補正値Ｋｓａの進角処理を行う理由は、確実にノックが発生したと見なされる状況のみにおいて、気筒別補正値Ｋｓａを設定することにより、気筒別補正値Ｋｓａの設定精度を高めるためである。
【００４５】
一方、ステップＳ５０１でノック発生が検出されない場合、および、ステップＳ５０３でノック発生気筒のノック発生回数カウンタＣＫＮが所定回数α１に満たない場合には、現在の気筒別補正値Ｋｓａを変更せずにそのまま設定して（ステップＳ５０６）、図３の処理ルーチンを終了する。
【００４６】
なお、図３内のステップＳ５０６においては、ノック発生気筒Ｎｋのノック発生回数カウンタＣＫＮが所定回数α１に満たない場合には、現在の気筒別補正値Ｋｓａ［Ｎｋ］の値を保持しているが、気筒別補正値Ｋｓａの値を増大させて点火時期が進角側となるように設定し、確実にノックが発生する状況を作り出して、気筒別補正値Ｋｓａの設定精度を高めてもよい。また、逆に、ステップＳ５０６において、気筒別補正値Ｋｓａの値を減少させて、点火時期が遅角側になるように設定してもよい。
【００４７】
以上のように、気筒別補正値設定手段２０３は、図３の処理ルーチンにより、気筒別補正値Ｋｓａを演算する。
次に、図４を参照しながら、気筒別点火時期設定手段２０４内の最終点火時期設定手段２０５の処理動作について、さらに詳細に説明する。
図４はＣＰＵ１１１が実行する最終点火時期の演算を示すフローチャートである。
【００４８】
図４の処理ルーチンは、図３の処理ルーチンと同様に、あらかじめ定められた特定クランク角度（たとえば、ＢＴＤＣ７５［ｄｅｇＣＡ］）ごとに発生する割込み信号により呼び出されて実行される。
また、図４の処理ルーチンは、ＲＡＭ１１３内に格納された各種の入力信号および出力信号を用いて、あらかじめＲＯＭ１１２に格納されているプログラム（処理手順）にしたがって実行される。
【００４９】
図４において、ステップＳ６０１〜Ｓ６０３は、図３内の判定ステップＳ５０１に対応する。
まず、最終点火時期設定手段２０５を構成するＣＰＵ１１１は、ノック信号Ｃｋに基づくノック信号レベルをピークホールドし、ピークホールド値を、Ｉ／Ｏコントローラ１１４を介してＡ／Ｄ変換し、Ａ／Ｄ変換値をノック検出値ＶｐとしてＲＡＭ１１３に格納する（ステップＳ６０１）。
【００５０】
また、ノック検出値Ｖｐに対する判定基準となるノック判定レベルＶｔｈを演算し（ステップＳ６０２）、ノック検出値Ｖｐとノック判定レベルＶｔｈとを比較して、ノックが発生したか否かを判定する（ステップＳ６０３）。
ステップＳ６０３において、Ｖｐ＞Ｖｔｈ（すなわち、ＹＥＳ）と判定されれば、今回点火した気筒Ｎｐでノックが発生したものと見なし、あらかじめ設定されたノック遅角反映量Ｋｇを用いて、以下の式（１）のように、ノック遅角量更新値Δθｋを演算する（ステップＳ６０４）。
【００５１】
Δθｋ＝（Ｖｐ−Ｖｔｈ）×Ｋｇ    ・・・（１）
【００５２】
式（１）から明らかなように、ノック遅角量更新値Δθｋの値は、発生したノック検出値Ｖｐとノック判定レベルＶｔｈとの差分の大きさに比例する。
一方、ステップＳ６０３において、Ｖｐ≦Ｖｔｈ（すなわち、ＮＯ）と判定されれば、今回点火した気筒Ｎｐでノックは発生していないと見なし、以下の式（２）のように、ノック遅角量更新値Δθｋを演算する（ステップＳ６０５）。
【００５３】
Δθｋ＝０    ・・・（２）
【００５４】
式（１）または式（２）によりノック遅角量更新値Δθｋが算出されると、続いて、今回点火した気筒Ｎｐのノック遅角量θｋ［Ｎｐ］にノック遅角量更新値Δθｋを加算することにより、次回点火する気筒Ｎｎのノック遅角量θｋ［Ｎｎ］の値を、以下の式（３）のように更新する（ステップＳ６０６）。
【００５５】
θｋ［Ｎｎ］＝θｋ［Ｎｐ］＋Δθｋ    ・・・（３）
【００５６】
また、エンジン回転速度Ｎｅおよび吸入空気量Ｑａに基づいて、あらかじめ設定されてＲＯＭ１１２上に記憶された基本点火時期マップＢＡＳＥＭＡＰ（Ｎｅ，Ｑａ）から、基本点火時期θｂを演算する（ステップＳ６０７）。
次に、基本点火時期θｂと、ステップＳ６０６で演算される次回点火する気筒Ｎｎのノック遅角量θｋ［Ｎｎ］とを用いて、次回点火する気筒Ｎｎの基準点火時期θｒを、以下の式（４）のように演算する（ステップＳ６０８）。
【００５７】
θｒ＝θｂ＋θｋ［Ｎｎ］    ・・・（４）
【００５８】
最後に、基準点火時期θｒと各気筒の気筒別補正値Ｋｓａ［Ｎｎ］とに応じて、以下の式（５）のように、最終点火時期θｐを演算し（ステップＳ６０９）、図４の処理ルーチンを終了する。
【００５９】
θｐ＝θｒ＋Ｋｓａ［Ｎｎ］    ・・・（５）
【００６０】
なお、図４内のステップＳ６０９では、全気筒に共通の基準点火時期θｒと気筒別補正値Ｋｓａ［Ｎｎ］とを加算して、最終点火時期θｐを算出したが、以下の式（６）のように両者を乗算して最終点火時期θｐを算出してもよい。
【００６１】
θｐ＝θｒ×Ｋｓａ［Ｎｎ］    ・・・（６）
【００６２】
また、気筒別のノック遅角量θｋ［ｎ］（ｎ＝１，２，・・・，Ｎ）は、図５のフローチャート内のステップＳ６１０に示すように、一定時間間隔で発生する割込み信号により呼び出されて実行される。
すなわち、ステップＳ６１０において、気筒別のノック遅角量θｋ［ｎ］は、以下の式（７）のように、あらかじめ設定された所定量θａずつ減算（進角側に更新）される。
【００６３】
θｋ［ｎ］＝θｋ［ｎ］−θａ    ・・・（７）
【００６４】
これにより、気筒別のノック遅角量θｋ［ｎ］に基づく点火時期は、一定時間間隔ごとに進角側に制御される。
なお、図５内のステップＳ６１０では、一定時間間隔で発生する割込み信号によりノック遅角量θｋ［ｎ］の演算処理を実行したが、あらかじめ定められた特定クランク角度（たとえば、ＢＴＤＣ７５［ｄｅｇＣＡ］）ごとに発生する割込み信号により実行してもよい。
【００６５】
次に、図６のタイミングチャートを参照しながら、気筒別補正値Ｋｓａ［ｎ］の演算処理について、さらに具体的に説明する。
図６においては、４気筒エンジンからなる内燃機関１０１の各気筒＃１〜＃４を、＃１→＃３→＃４→＃２の順に点火制御した場合の、点火時期および気筒別補正値Ｋｓａの時間変化（推移）の一例を具体的に示している。
【００６６】
図６（Ａ）は従来の全気筒共通の点火時期制御動作を示し、ノック発生時にノック発生気筒を区別せずに、全気筒の点火時期を一律に遅角側に制御する場合を示している。
図６（Ｂ）はこの発明の実施の形態１に係る気筒別点火時期設定手段２０４による気筒別の学習機能付きの点火時期制御動作を示している。
図６（Ｃ）は気筒別点火時期設定手段２０４内の気筒別補正値設定手段２０３で演算される気筒別補正値Ｋｓａの時間変化を気筒＃１〜＃４ごとに示している。
また、図６中の各タイミングＡ〜Ｅ（ノック発生タイミング）は、ノック−ノック発生期間（たとえば、タイミングＡからタイミングＢまでの期間）の境界に対応している。
【００６７】
従来動作を示す図６（Ａ）において、まず、ノックが発生しない期間（図中左端の始点からタイミングＡまでの期間）での点火時期は、すべての気筒に対して一律に、一定時間Ｔａごとに一定量の割合で進角側となるよう制御されている。
次に、タイミングＡの時点で気筒＃４にノックが発生したとすると、次の点火気筒となる気筒＃２の点火時期は、気筒＃４で設定されていた点火時期から、気筒＃４で発生したノック強度に応じて演算されたノック遅角量θｋ１を差し引いた値に設定され、設定後のタイミングで点火制御されることになる。
【００６８】
その後、ノックが発生しない状況が続けば、上述のように一定時間Ｔａ経過するごとに点火時期を所定量ずつ進角方向に進め、ノックが発生した場合には、タイミングＡでの点火時期演算と同様に、ノック発生気筒の次の点火気筒の点火時期を、ノック強度に応じたノック遅角量θｋを反映させて算出する。
以上の点火時期制御処理は、前述と同様にあらかじめ定められた特定クランク角度ごとに実行される。
【００６９】
次に、図６（Ｂ）を参照しながら、この発明の実施の形態１による気筒別点火時期設定手段２０４の点火時期制御動作について説明する。
まず、ノックが発生するまで点火時期は、図６（Ａ）と同じように、一定時間Ｔａごとに所定量ずつ進角されるが、タイミングＡでノックが発生した以降の処理は、図６（Ａ）とは異なる。
【００７０】
なお、気筒別点火時期設定手段２０４により算出される最終点火時期θｐは、全気筒に共通の基準点火時期θｒに対して、気筒別補正値Ｋｓａを加算して求めてもよく、または、上述したように、気筒別補正値Ｋｓａを乗算して求めてもよい。
【００７１】
図６（Ｂ）において、前述と同様に、タイミングＡの時点で気筒＃４にノックが発生したとすると、まず、気筒別補正値Ｋｓａは、ノック発生気筒＃４のノック発生回数が所定回数α１以上に達していれば、図６（Ｃ）のように、気筒＃４の気筒別補正値Ｋｓａの値はそのまま固定され、ノック発生回数が所定回数α１未満の気筒＃１〜＃３については、気筒別補正値Ｋｓａの値を気筒＃４の気筒別補正値Ｋｓａの値よりも進角側に設定する。
すなわち、気筒＃４の気筒別補正値Ｋｓａ（＃４）は、そのまま保持され、気筒＃１〜＃３（＃４以外）の気筒別補正値Ｋｓａ（＃１）〜Ｋｓａ（＃３）は、所定値ａが加算されて点火時期が進角側となるように更新される。以降、所定値ａ＝１として説明する。
【００７２】
次に、気筒＃４の次の点火気筒である気筒＃２の最終点火時期θｐ（＃２）は、基準点火時期θｒと気筒＃２の気筒別補正値Ｋｓａ（＃２）とを用いて、以下の式（８）のように算出される。
【００７３】
θｐ（＃２）＝θｒ＋Ｋｓａ（＃２）    ・・・（８）
【００７４】
以下、同様にして、基準点火時期θｒと気筒別補正値Ｋｓａ［ｎ］（ｎ＝１，２，・・・Ｎ）とを加算して、最終点火時期θｐが算出される。
したがって、図６（Ｃ）内の所定値ａ（＝１）が加算された気筒別補正値Ｋｓａを用いて求められた気筒＃１〜＃３の最終点火時期θｐは、図６（Ｂ）のように、気筒別補正値Ｋｓａが固定された気筒＃４の点火時期よりも、所定値ａだけ進角側に設定されている。
【００７５】
続いて、図６（Ｂ）に示すように、タイミングＢで＃１気筒にノックが発生し、タイミングＣで＃３気筒にノックが発生し、タイミングＤで＃２気筒にノックが発生し、タイミングＥで＃４気筒にノックが発生した場合には、各タイミングＢ〜Ｅで、タイミングＡでの演算処理と同様に、気筒別補正値Ｋｓａを固定するかまたは進角側に設定し、更新設定された気筒別補正値Ｋｓａを用いて最終点火時期θｐを演算する。
気筒別補正値Ｋｓａは、更新設定処理が進むにつれて、気筒ごとの点火ばらつきを吸収するようになり、図６（Ｂ）のように、時間経過ともに気筒＃１〜＃４ごとに設定される各最終点火時期θｐも異なっていく。
【００７６】
以上のように、この発明の実施の形態１によれば、内燃機関１０１を構成する気筒の数と同数だけの気筒別補正値Ｋｓａを有し、全気筒に共通の基準点火時期θｒと気筒別補正値Ｋｓａとの加算により、気筒ごとのノック限界点火時期となるように最終点火時期θｐを設定することができるので、出力トルクロスを生じることがなく、高い出力トルクを得ることができる。
【００７７】
また、複数気筒を有する内燃機関１０１のいずれかの気筒でのノック発生に応答して、基準点火時期θｒを遅角させてすべての気筒を一律に遅角側に制御することにより、ノックの連続発生を回避することができるので、ユーザの聴感悪化を抑制したノック制御性を確保することができ、出力トルクの向上と聴感悪化の抑制とを両立させることができる。
さらに、気筒別補正値Ｋｓａは、ノック発生回数が所定回数α１以上となった気筒以外の気筒の気筒別補正値Ｋｓａを進角側となるように設定することにより、確実にノックが発生したと見なされる状況のみにおいて気筒別補正値Ｋｓａを設定することができ、気筒別補正値Ｋｓａの設定精度を高めることができる。
【００７８】
実施の形態２．
なお、上記実施の形態１（図２参照）では、気筒別補正値設定手段２０３に関連した記憶手段について言及しなかったが、図７に示すように、気筒別点火時期設定手段２０４Ａ内に、気筒別補正値設定手段２０３Ａに関連した気筒別補正値一括記憶手段２０６を設けてもよい。
以下、図１とともに、図７および図８を参照しながら、この発明の実施の形態２について説明する。
【００７９】
図７はこの発明の実施の形態２の要部を示す機能ブロック図であり、前述（図２参照）と同様のものについては、前述と同一符号を付して、または符号の後に「Ａ」を付して詳述を省略する。
なお、この発明の実施の形態２に係る内燃機関の点火時期制御装置の全体構成は図１に示した通りである。
また、点火時期制御に関する基本的な演算処理については、前述（図４、図５参照）に示した通りなので、ここでは詳述を省略する。
【００８０】
図７において、気筒別補正値設定手段２０３Ａは、複数の気筒に対応するすべての気筒別補正値Ｋｓａを一括して記憶する気筒別補正値一括記憶手段２０６を有する。
気筒別補正値設定手段２０３Ａは、ノック−ノック発生期間において、複数の気筒別補正値Ｋｓａ［ｎ］のうち、今回のノック発生までに所定のノック発生回数α１に達した気筒に対応する気筒別補正値Ｋｓａを前回値に固定する。
【００８１】
また、気筒別補正値設定手段２０３Ａは、今回のノック発生までに所定のノック発生回数α１に達していない気筒に対応する少なくとも１つの気筒別補正値Ｋｓａを進角側の値に設定する処理を繰り返し実行する。
そして、気筒別補正値設定手段２０３Ａは、複数の気筒に対応するすべての気筒別補正値Ｋｓａ［ｎ］が少なくとも１回ずつ固定された場合に、気筒別補正値一括記憶手段２０６にすべての気筒別補正値Ｋｓａ［ｎ］を一括して記憶させる。
すなわち、気筒別補正値一括記憶手段２０６は、内燃機関１０１を構成する気筒の数Ｎだけ存在する気筒別補正値Ｋｓａ［ｎ］（ｎ＝１，２，・・・，Ｎ）を、気筒数Ｎ分だけ一括して記憶する。
【００８２】
以下、図８を参照しながら、この発明の実施の形態２による処理動作について、さらに詳細に説明する。
図８はこの発明の実施の形態２に係る気筒別補正値設定手段２０３Ａの処理動作を示すフローチャートであり、ステップＳ５０１〜Ｓ５０６は、前述（図３参照）と同様の処理を示している。
図８の処理ルーチンは、あらかじめ定められた特定クランク角度ごとに発生する割込み信号に応じて実行される。
【００８３】
図８において、気筒別補正値Ｋｓａの更新演算処理（ステップＳ５０１〜Ｓ５０６）に続いて、すべての気筒に関する気筒別補正値Ｋｓａの固定が完了しているか否かを判定する（ステップＳ５０７）。
ステップＳ５０７において、気筒ごとに設定されたノック発生回数カウンタＣＫＮが、すべての気筒に関して所定回数α１（たとえば、２［回］）以上となっている場合には、全気筒の気筒別補正値Ｋｓａの固定が完了した（すなわち、ＹＥＳ）と判定し、全気筒の気筒別補正値Ｋｓａ［ｎ］（４気筒の場合、ｎ＝１，２，３，４）を一括して１セットとして、気筒別補正値一括記憶手段２０６に記憶させ（ステップＳ５０８）、図８の処理ルーチンを終了する。
【００８４】
一方、ステップＳ５０７において、気筒ごとに設定されているノック発生回数カウンタＣＫＮのうち少なくとも１つの気筒に関する値が所定回数α１未満を示す場合には、該当気筒で気筒別補正値Ｋｓａの固定が未完了である（すなわち、ＮＯ）と判定し、全気筒の気筒別補正値Ｋｓａの記憶処理（ステップＳ５０８）を実行せずに、図８の処理ルーチンを終了する。
【００８５】
なお、気筒別補正値設定手段２０３Ａは、気筒別補正値一括記憶手段２０６へのすべての気筒別補正値Ｋｓａ［ｎ］の一括記憶処理を、連続的に繰り返し実行してもよい。
【００８６】
以上のように、この発明の実施の形態２によれば、前述と同様に、気筒ごとのノック限界点火時期に最終点火時期θｐを設定することができるので、出力トルクロスを生じることがなく、高い出力トルクを得ることができる。
また、これと同時に、複数の気筒のうちのいずれかの気筒のノック発生に応答して、すべての気筒を一律に遅角側に制御するので、ノックが連続して発生することもなく、聴感悪化を抑制したノック制御性を確保することができる。
【００８７】
また、気筒別補正値一括記憶手段２０６を設け、全気筒分の気筒別補正値Ｋｓａ［ｎ］を一括記憶することにより、前述の作用効果に加えて、エンジンの個体ばらつきに起因したノック限界点火時期のばらつきを吸収することができ、気筒ごとに高いトルクを常に得ることができる。
【００８８】
さらに、気筒別補正値一括記憶手段２０６に対する全気筒の気筒別補正値Ｋｓａ［ｎ］の一括記憶処理を連続的に繰り返し実行することにより、エンジンの個体ばらつきに起因したノック限界点火時期のばらつきのみならず、経年変化によるノック限界点火時期のばらつきを吸収することができ、気筒ごとに高いトルクを常に得ることができる。
【００８９】
実施の形態３．
なお、上記実施の形態２では、気筒別補正値Ｋｓａ［ｎ］の一括記憶処理の実行回数について言及しなかったが、一括記憶処理を所定回数α２だけ繰り返し実行してもよい。
以下、図１および図７とともに、図９のフローチャートを参照しながら、記憶回数を所定回数α２に設定したこの発明の実施の形態３による気筒別補正値設定手段２０３Ａの処理動作について説明する。
【００９０】
なお、この発明の実施の形態３に係る内燃機関の点火時期制御装置の全体構成は図１に示した通りである。
また、気筒別点火時期設定手段２０４Ａ、気筒別補正値設定手段２０３Ａ、最終点火時期設定手段２０５および気筒別補正値一括記憶手段２０６の構成は図７に示した通りであり、最終点火時期θｐの演算処理動作は、図４および図５に示した通りである。
【００９１】
この場合、図７内の気筒別補正値設定手段２０３Ａは、気筒別補正値一括記憶手段２０６へのすべての気筒別補正値Ｋｓａ［ｎ］の一括記憶処理を、所定回数α２だけ繰り返し実行する。
図９の処理ルーチンは、図７内の気筒別補正値設定手段２０３Ａを構成するＣＰＵ１１１（図１参照）が実行する気筒別補正値Ｋｓａ［ｎ］の記憶動作を示しており、特定クランク角度ごとに発生する割込み信号に応じて実行される。
【００９２】
図９において、ステップＳ５０１〜Ｓ５０８は、前述（図８参照）と同様の気筒別補正値Ｋｓａの更新演算処理なので、ここでは詳述を省略する。
気筒別補正値設定手段２０３Ａは、前述の気筒別補正値Ｋｓａの進角処理および設定処理（ステップＳ５０５、Ｓ５０６）に続いて、気筒別補正値Ｋｓａの記憶回数が所定回数α２（たとえば、３［回］）未満か否かを判定する（ステップＳ７０１）。
すなわち、気筒別補正値Ｋｓａを記憶するごとにカウントアップしていく記憶回数カウンタＣｐｎの値を所定回数α２と比較して、Ｃｐｎ＜α２であるか否かを判定する。
【００９３】
ステップＳ７０１において、Ｃｐｎ≧α２（すなわち、ＮＯ）と判定されれば、気筒別補正値Ｋｓａ［ｎ］の一括記憶処理の実行回数が必要な所定回数α２に達したものと見なして、図９の処理ルーチンを直ちに終了する。
【００９４】
一方、ステップＳ７０１において、Ｃｐｎ＜α２（すなわち、ＹＥＳ）と判定されれば、一括記憶処理の実行回数が所定回数α２に達していないので、前述の判定処理（ステップＳ５０７）を実行する。
すなわち、気筒ごとに設定されたノック発生回数カウンタＣＫＮが、すべての気筒において、所定回数α１（たとえば、２［回］）以上に達したか否かに基づいて、全気筒の気筒別補正値Ｋｓａの固定が完了したか否かを判定する。
【００９５】
ステップＳ５０７において、全気筒の気筒別補正値Ｋｓａの固定が完了した（すなわち、ＹＥＳ）と判定されれば、前述と同様に、全気筒の気筒別補正値Ｋｓａ［ｎ］を一括して１セットとして、気筒別補正値一括記憶手段２０６に記憶させる（ステップＳ５０８）。
続いて、気筒別補正値Ｋｓａ［ｎ］の一括記憶処理が１回完了したので、記憶回数カウンタＣｐｎをインクリメント（１回だけカウントアップ）して（ステップＳ７０２）、図９の処理ルーチンを終了する。
【００９６】
一方、ステップＳ５０７で、気筒ごとに設定されているノック発生回数カウンタＣＫＮの少なくとも１つの値が所定回数α１未満を示す場合には、該当気筒で気筒別補正値Ｋｓａの固定が未完了（すなわち、ＮＯ）と判定し、全気筒の気筒別補正値Ｋｓａ［ｎ］の一括記憶処理（ステップＳ５０８）を実行せずに、図９の処理ルーチンを終了する。
【００９７】
以上のように、この発明の実施の形態３によれば、前述と同様に、気筒ごとの最終点火時期θｐを各気筒のノック限界点火時期に設定することができるので、出力トルクロスを生じることなく高い出力トルクを得ることができる。
また、いずれかの気筒のノック発生に応答して全気筒を一律に遅角側に制御するので、ノックが連続して発生することもなく、聴感悪化を抑制したノック制御性を確保することができる。
【００９８】
また、全気筒分の気筒別補正値Ｋｓａ［ｎ］の一括記憶処理を所定回数α２だけ実行することにより、前述の点火時期制御機能に加えて、エンジンの個体ばらつきに起因したノック限界点火時期のばらつきや、経年変化によるノック限界点火時期のばらつきを吸収することができ、気筒ごとに高いトルクを常に得ることができる。
【００９９】
さらに、この発明の実施の形態３のように、全気筒分の気筒別補正値Ｋｓａ［ｎ］の一括記憶処理を所定回数α２だけ実行する場合は、前述の実施の形態２のように連続的に繰り返し実行する場合と比べて、気筒ごとのノック限界点火時期であることを連続的に繰り返し記憶することがないので、ノック発生の頻度が比較的安定し、商品性が向上するという効果がある。
【０１００】
実施の形態４．
なお、上記実施の形態３（図９参照）では、記憶回数カウンタＣｐｎが所定回数α２未満の場合に、気筒別補正値Ｋｓａ［ｎ］の一括記憶処理を実行したが、他の所定条件が成立した場合に一括記憶処理を実行してもよい。
以下、図１および図７とともに、図１０のフローチャートを参照しながら、他の所定条件を用いたこの発明の実施の形態４による気筒別補正値Ｋｓａ［ｎ］の一括記憶処理について説明する。
【０１０１】
図１０の処理ルーチンは、前述（図９）と同様に、気筒別補正値設定手段２０３Ａを構成するＣＰＵ１１１による気筒別補正値Ｋｓａの記憶処理を示しており、特定クランク角度ごとに発生する割込み信号に応じて実行される。
また、この発明の実施の形態４に係る内燃機関の点火時期制御装置の全体構成および気筒別点火時期設定手段２０４Ａの機能構成は、前述（図１、図７参照）と同様なので、ここでは詳述を省略する。
【０１０２】
この場合、図７内の気筒別補正値設定手段２０３Ａは、他の所定条件として、内燃機関１０１（図１参照）の始動および停止が所定回数α３だけ実行されるごとに、気筒別補正値一括記憶手段２０６へのすべての気筒別補正値Ｋｓａ［ｎ］の一括記憶処理を繰り返し実行する。
すなわち、気筒別補正値設定手段２０３は、内燃機関１０１の始動および停止が所定回数α３だけ実行されるごとに、所定条件が成立したと判定し、一括記憶処理を実行する。
【０１０３】
図１０において、ステップＳ５０１〜Ｓ５０８は、前述の気筒別補正値Ｋｓａの更新演算処理と同様なので、ここでは詳述を省略する。
気筒別補正値設定手段２０３は、前述の気筒別補正値Ｋｓａの進角処理および設定処理（ステップＳ５０５、Ｓ５０６）に続いて、ＩＧ＿ＯＮ状態カウンタＣｉｇの値が所定回数α３（たとえば、２００［回］）以上に達したか否かを判定する（ステップＳ７０３）。
【０１０４】
ＩＧ＿ＯＮ状態カウンタＣｉｇは、イグニッションスイッチ（図示せず）のＯＮ状態の回数を計数し、イグニッションスイッチがＯＦＦ状態からＯＮ状態に切り換わるごとにカウントアップしていく。
ステップＳ７０３において、Ｃｉｇ＜α３（すなわち、ＮＯ）と判定されれば、所定条件が成立しないものと見なして、図１０の処理ルーチンを直ちに終了する。
【０１０５】
一方、ステップＳ７０３において、Ｃｉｇ≧α３（すなわち、ＹＥＳ）と判定されれば、前述と同様のステップＳ５０７に進み、すべての気筒に関して気筒別補正値Ｋｓａの固定が完了しているか否かを判定する。
ステップＳ５０７において、全気筒の気筒別補正値Ｋｓａの固定が完了している（すなわち、ＹＥＳ）と判定されれば、前述と同様のステップＳ５０８に進み、全気筒の気筒別補正値Ｋｓａ［ｎ］を一括して１セットとして、気筒別補正値一括記憶手段２０６に記憶させる。
【０１０６】
また、ステップＳ５０８に続いて、ＩＧ＿ＯＮ状態カウンタＣｉｇをリセット（０クリア）して（ステップＳ７０４）、図１０処理を終了する。
一方、ステップＳ５０７において、気筒ごとのノック発生回数カウンタＣＫＮが少なくとも１つが所定回数α１未満を示す場合には、該当気筒で気筒別補正値の固定が未完了である（すなわち、ＮＯ）と判定し、全気筒の気筒別補正値Ｋｓａ［ｎ］の一括記憶処理を実行せずに、図１０の処理ルーチンを終了する。
【０１０７】
なお、図１０においては、イグニッションスイッチがＯＦＦ状態からＯＮ状態に切り換わった回数に応じて、気筒別補正値一括記憶手段２０６への記憶処理を実行する例を示したが、これに限らず他の所定条件を用いてもよい。
たとえば、単純に、ＩＧ＿ＯＮ状態（イグニッションスイッチのＯＮ状態）が所定時間以上継続した場合に所定条件が成立したと判定してもよく、ＣＰＵ１１１内のタイマで計測された所定の積算時間ごとに所定条件が成立したと判定し、気筒別補正値一括記憶手段２０６への記憶処理を実行するようにしてもよい。
【０１０８】
さらに、燃料として用いられるガソリン性状の変更によって気筒別補正値Ｋｓａが変化する可能性があるので、ガソリン給油回数ごとに所定条件が成立したと判定してもよく、またはガソリンタンク（図示せず）およびガソリンのレベルゲージ値などから算出したガソリン使用量の変化量が所定変化量に達するごとに所定条件が成立したと判定し、気筒別補正値一括値記憶手段２０６への記憶処理を実行するようにしてもよい。
【０１０９】
以上のように、この発明の実施の形態４によれば、気筒別補正値設定手段２０３Ａは、内燃機関１０１の始動および停止が所定回数α３だけ実行されるごとに、または所定時間が経過するごと、または内燃機関１０１の使用燃料量の所定量変化が所定回数だけ発生するごとに、所定条件が成立したと判定し、気筒別補正値一括値記憶手段２０６への記憶処理を実行するので、前述と同様に、最終点火時期θｐを、気筒ごとのノック限界点火時期に設定することができるので、出力トルクロスを生じることなく高い出力トルクを得ることができる。
【０１１０】
また、いずれかの気筒のノック発生に応答して全気筒を一律に遅角側に制御するので、ノックが連続して発生することもなく、聴感悪化を抑制したノック制御性を確保することができる。
また、所定条件が成立した場合に、全気筒分の気筒別補正値Ｋｓａ［ｎ］の一括記憶処理を所定回数α２だけ実行することにより、所定条件が成立している場合のノック限界点火時期と、所定条件が成立していない場合のノック限界点火時期とが異なることに対しても、高精度のノック限界点火時期のばらつきを吸収することができ、気筒ごとの高いトルクを常に高精度に得ることができる。
【０１１１】
また、所定条件が成立した場合に、全気筒分の気筒別補正値Ｋｓａ［ｎ］の一括記憶処理を所定回数α２だけ実行することにより、エンジンの個体ばらつきに起因したノック限界点火時期のばらつきや、経年変化によるノック限界点火時期のばらつきを吸収することができるうえ、所定条件の成立を判定することにより、経年変化の発生を予想することができ、比較的効率良く気筒ごとに高いトルクを常に得ることができる。
【０１１２】
実施の形態５．
なお、上記実施の形態３、４（図９、図１０）では、所定条件として内燃機関１０１の運転条件を考慮しなかったが、所定運転条件が成立する場合に、所定条件が成立したと判定して一括記憶処理を実行してもよい。
以下、図１および図７とともに、図１１のフローチャートを参照しながら、所定運転条件を用いたこの発明の実施の形態５による気筒別補正値Ｋｓａ［ｎ］の一括記憶処理について説明する。
【０１１３】
図１１の処理ルーチンは、前述（図９、図１０）と同様に、特定クランク角度ごとに発生する割込み信号に応じて実行される。
また、この発明の実施の形態５に係る内燃機関の点火時期制御装置の全体構成および気筒別点火時期設定手段２０４Ａの機能構成は、前述（図１、図７参照）と同様なので、ここでは詳述を省略する。
【０１１４】
この場合、図７内の気筒別補正値設定手段２０３Ａは、内燃機関１０１の所定運転条件が成立する場合に所定条件が成立したと判定し、気筒別補正値Ｋｓａ［ｎ］の一括記憶処理を実行する。
また、この発明の実施の形態５に係る気筒別補正値一括記憶手段２０６（図７参照）は、エンジン回転速度Ｎｅを縦軸とし、吸入空気量Ｑａを横軸として定義された気筒別補正値記憶マップＭｐｎ（図示せず）を有し、気筒別補正値記憶マップＭｐｎは、Ｍ個の運転領域に区切られているものとする。
【０１１５】
気筒別補正値記憶マップＭｐｎ内のＭ個の運転領域は、運転領域番号Ａ＿Ｍで指定されており、運転領域番号Ａ＿Ｍで指定された領域の記憶値として気筒別補正値Ｋｓａを記憶することができるようになっている。
また、気筒別補正値記憶マップＭｐｎは、後述のフローチャート（図１２参照）に示すように、特定の運転領域ごとに記憶された記憶値Ｇｓａが呼び出されて、記憶値Ｇｓａが気筒別補正値設定手段２０３Ａからの気筒別補正値Ｋｓａの初期値として設定される場合にも使用される。
【０１１６】
図１１において、ステップＳ５０１〜Ｓ５０７は前述と同様の処理なので、ここでは詳述を省略する。また、ステップ５０８Ａは、前述のステップＳ５０８に対応した記憶処理である。
気筒別補正値設定手段２０３は、前述の気筒別補正値Ｋｓａの進角処理および設定処理（ステップＳ５０５、Ｓ５０６）に続いて、現在のエンジン回転速度Ｎｅおよび吸入空気量Ｑａの条件から、気筒別補正値記憶マップＭｐｎ中のどの運転領域にあるかを検出し、現在の運転領域として今回検出された運転領域番号Ａ＿Ｍ（ｎ）を記憶する（ステップＳ７０５）。
【０１１７】
続いて、今回の運転領域番号Ａ＿Ｍ（ｎ）が前回の運転領域番号Ａ＿Ｍ（ｎ−１）と一致するか否かにより、内燃機関１０１が特定の運転領域に連続して存在しているか否かを判定する（ステップＳ７０６）。
ステップＳ７０６において、Ａ＿Ｍ（ｎ）＝Ａ＿Ｍ（ｎ−１）（すなわち、ＹＥＳ）と判定されれば、内燃機関１０１の運転条件が同一の運転領域に連続して存在するものと見なし、運転領域定常判定カウンタＣＡＭを所定値だけインクリメント（カウントアップ）して（ステップＳ７０７）、次の判定処理（ステップＳ７０９）に進む。
【０１１８】
一方、ステップＳ７０６において、Ａ＿Ｍ（ｎ）≠Ａ＿Ｍ（ｎ−１）（すなわち、ＮＯ）と判定されれば、内燃機関１０１の運転条件が連続して同じ領域に存在しなかったものと見なして、運転領域定常判定カウンタＣＡＭをリセット（０クリア）して（ステップＳ７０８）、ステップＳ７０９に進む。
【０１１９】
ステップＳ７０９においては、運転領域定常判定カウンタＣＡＭの値が所定回数α４（たとえば、４［回］）以上に達したか否かを判定する。
ステップＳ７０９において、ＣＡＭ＜α４（すなわち、ＮＯ）と判定されれば、内燃機関１０１の運転条件が定常状態に存在しないものと見なして、図１１の処理ルーチンを直ちに終了する。
【０１２０】
一方、ステップＳ７０９において、ＣＡＭ≧α４（すなわち、ＹＥＳ）と判定されれば、内燃機関１０１の運転条件が定常状態にあって所定条件が成立したと見なされるので、前述と同様に、全気筒の気筒別補正値Ｋｓａの固定が完了しているか否かを判定する（ステップＳ５０７）。
【０１２１】
ステップＳ５０７において、全気筒の気筒別補正値Ｋｓａの固定が完了している（すなわち、ＹＥＳ）と判定されれば、今回判定した運転領域番号Ａ＿Ｍ（ｎ）における記憶値として、全気筒分の気筒別補正値Ｋｓａ［ｎ］を、一括して１セットとして気筒別補正値一括記憶手段２０６に記憶させ（ステップＳ５０８Ａ）、図１１の処理ルーチンを終了する。
【０１２２】
一方、ステップＳ５０７において、いずれかの気筒に関して気筒別補正値Ｋｓａの固定が未完了である（すなわち、ＮＯ）と判定されれば、全気筒の気筒別補正値Ｋｓａ［ｎ］の一括記憶処理を実行せずに、図１１の処理ルーチンを終了する。
【０１２３】
また、気筒別補正値一括記憶手段２０６内の気筒別補正値記憶マップＭｐｎは、気筒別補正値設定手段２０３Ａにおける気筒別補正値Ｋｓａの初期値設定時にも使用される。
すなわち、図１２のフローチャートに示すように、気筒別補正値設定手段２０３Ａは、気筒別補正値一括記憶手段２０６内の気筒別補正値記憶マップＭｐｎを参照して、特定の運転領域ごとに記憶された記憶値Ｇｓａを呼び出し（ステップＳ７１０）、呼び出した記憶値Ｇｓａを気筒別補正値Ｋｓａの初期値として設定する（ステップＳ７１１）。
【０１２４】
なお、図１１内のステップＳ５０８Ａにおいては、エンジン回転速度Ｎｅおよび吸入空気量Ｑａで定義した運転領域ごとに気筒別補正値Ｋｓａ［ｎ］を一括記憶処理したが、運転領域を他のパラメータを用いて定義してもよい。
たとえば、吸入空気量Ｑａは内燃機関１０１の運転負荷の状態を表しているが、内燃機関１０１の充填効率や体積効率、またはスロットル開度センサ１１６からのスロットル開度情報や、アクセルペダル（図示せず）の操作量などのパラメータを用いてもよい。
【０１２５】
また、内燃機関１０１の運転状態を示すパラメータとして、内燃機関１０１の冷却水温、吸気温、潤滑油の油温、排気温、または内燃機関１０１が動作している環境の大気圧などを用いて運転領域を設定してもよい。
さらに、空燃比Ａ／Ｆ（内燃機関１０１で燃焼する混合気の空気と燃料との混合比）、または、排ガス還流装置（図示せず）に流れる排ガス流量（ＥＧＲ流量）、または、内燃機関１０１の吸気弁および排気弁を開閉するクランク角度（ＶＶＴ位相角）の条件と上記パラメータとを組み合わせた条件の成立に応じて、気筒別補正値一括記憶手段２０６への一括記憶処理を実行してもよい。
【０１２６】
以上のように、この発明の実施の形態５によれば、気筒別補正値設定手段２０３Ａは、内燃機関１０１の所定運転条件（定常運転状態）が成立する場合に、所定条件が成立したと判定して、運転領域ごとに、気筒別補正値一括記憶手段２０６内の気筒別補正値記憶マップＭｐｎへの気筒別補正値Ｋｓａ［ｎ］の一括記憶処理を繰り返し実行するので、各気筒の最終点火時期θｐを、運転領域ごとにノック限界点火時期に設定することができるので、出力トルクロスを生じることなく高い出力トルクを得ることができる。
また、いずれかの気筒のノック発生に応答してすべての気筒を一律に遅角側に制御するので、ノックが連続して発生することもなく、聴感悪化を抑制したノック制御性を確保することができる。
【０１２７】
また、図１１には示されていないが、前述の実施の形態３（図９参照）と同様に、所定条件の成立時に全気筒分の気筒別補正値Ｋｓａ［ｎ］の一括記憶処理を所定回数α２だけ実行することにより、所定条件成立時のノック限界点火時期と所定条件非成立時のノック限界点火時期とが異なることに対しても、高精度にノック限界点火時期のばらつきを吸収することができ、気筒ごとに高精度に高いトルクを常に得ることができる。
【０１２８】
さらに、前述と同様に、所定運転条件（定常運転状態）の成立時に全気筒分の気筒別補正値Ｋｓａ［ｎ］の一括記憶処理を所定回数α２だけ実行することにより、エンジンの個体ばらつきおよび経年変化に起因したノック限界点火時期のばらつきのみならず、運転条件によるばらつきに起因したノック限界点火時期のばらつきをも吸収することができ、気筒ごとに高精度で高いトルクを常に得ることができる。
【０１２９】
実施の形態６．
なお、上記実施の形態２〜５では、気筒別補正値Ｋｓａの初期値設定手段について具体的に言及しなかったが、気筒別補正値設定手段２０３Ａに初期値設定手段を設け、必要時に気筒別補正値Ｋｓａの初期値設定処理を実行できるように構成してもよい。
以下、図１および図７とともに、図１３〜図１７を参照しながら、気筒別補正値Ｋｓａの初期値設定手段を設けたこの発明の実施の形態６について説明する。
【０１３０】
この場合、前述（図７参照）の気筒別補正値設定手段２０３Ａは、初期値設定手段を含み、初期値設定手段は、気筒別補正値一括記憶手段２０６へのすべての気筒別補正値Ｋｓａ［ｎ］の一括記憶処理を繰り返し実行する際、または、所定条件が非成立となって一括記憶処理を中断してから所定条件が再び成立して一括記憶処理を再開する際に、気筒別補正値一括記憶手段に記憶された複数の気筒に対応するすべての気筒別補正値を初期値として設定する。
【０１３１】
この発明の実施の形態６に係る内燃機関の点火時期制御装置の全体構成および気筒別点火時期設定手段２０４Ａの機能構成は、前述（図１、図７参照）と同様なので、ここでは詳述を省略する。
図１３〜図１５はこの発明の実施の形態６による気筒別補正値設定手段２０３Ａの演算処理動作を示すフローチャートである。
図１６はこの発明の実施の形態６による記憶値Ｇｓａの時間変化を示すタイミングチャートである。
また、図１７は図１６内のタイミングｂ（気筒別補正値Ｋｓａの演算条件不成立となった時点）における各気筒＃１〜＃４の記憶値Ｇｓａを一覧表で示す説明図である。
【０１３２】
図１３および図１４の処理ルーチンは、特定クランク角度（クランク角信号の特定パルスタイミング）ごとに発生する割込み信号により呼び出されて実行される。
また、図１５の初期値更新処理ルーチンは、ＥＣＵ１１０に接続されたバッテリバックアップをＯＦＦした状態から、バッテリ（図示せず）をＯＮしたタイミングに同期して呼び出されて実行される。
【０１３３】
図１３内のステップＳ８０２は、図１４内のステップＳ５０４〜Ｓ５０６の処理に対応している。
図１３において、気筒別補正値設定手段２０３Ａは、まず、気筒別補正値Ｋｓａの演算条件が成立しているか否かを判定し（ステップＳ８０１）、気筒別補正値Ｋｓａの演算条件が不成立（すなわち、ＮＯ）と判定されれば、気筒別補正値Ｋｓａの演算処理を実行せずに、図１３の処理ルーチンを終了する。
【０１３４】
一方、ステップＳ８０１において、気筒別補正値Ｋｓａの演算条件が成立している（すなわち、ＹＥＳ）と判定されれば、気筒別補正値Ｋｓａを演算して（ステップＳ８０２）、図１３の処理ルーチンを終了する。
なお、ステップＳ８０１において、気筒別補正値設定手段２０３Ａは、たとえば、エンジン回転速度Ｎｅが所定回転速度（たとえば、５００［ｒ／ｍｉｎ］）以上で、かつ吸入空気量Ｑａが所定量（たとえば、１［Ｌ／Ｓ］）以上を示す場合に、気筒別補正値演算条件が成立したものと判定する。
【０１３５】
次に、図１４を参照しながら、気筒別補正値Ｋｓａの演算処理および初期値の設定処理について説明を行う。なお、図１４内のステップＳ５０１〜Ｓ５０８は、前述（図８〜図１０参照）と同様の処理を示している。
図１４において、気筒別補正値設定手段２０３Ａは、まず、記憶完了フラグＦＬｎ（気筒別補正値Ｋｓａの記憶時に「１」にセットされる）が「１」にセットされているか否かにより、気筒別補正値Ｋｓａの記憶処理が実行されたか否かを判定する（ステップＳ８１１）。
【０１３６】
ステップＳ８１１において、ＦＬｎ＝０（すなわち、ＮＯ）と判定されれば、気筒別補正値Ｋｓａの記憶処理が実行されていないと見なして、気筒別補正値Ｋｓａの値を保持して、前述と同様の一括記憶処理（ステップＳ５０１〜Ｓ５０８）に進む。
一方、ステップＳ８１１において、ＦＬｎ＝１（すなわち、ＹＥＳ）と判定されれば、以下の式（９）のように、今回の気筒別補正値Ｋｓａを、気筒別補正値一括記憶手段２０６内の記憶値Ｇｓａと同一の値に設定する（ステップＳ８１２）。
【０１３７】
Ｋｓａ＝Ｇｓａ    ・・・（９）
【０１３８】
続いて、記憶完了フラグＦＬｎを「０」にリセット（ＦＬｎ＝０）して（ステップＳ８１３）、ステップＳ５０１に進む。
【０１３９】
すなわち、ステップＳ５０１においては、ノック検出値Ｖｐとノック判定レベルＶｔｈとを比較し、「Ｖｐ≦Ｖｔｈ」の場合には、ノックが発生していないと判定して、ステップＳ５０６に進む。
一方、ステップＳ５０１での比較結果が「Ｖｐ＞Ｖｔｈ」の場合には、今回点火した気筒でノックが発生したと判定して、ノック発生気筒のノック発生回数カウンタＣＫＮを「１」だけインクリメントする（ステップＳ５０２）。
【０１４０】
続いて、ノック発生気筒のノック発生回数カウンタＣＫＮが所定回数α１以上であるか否かを判定し（ステップＳ５０３）、ＣＫＮ≧α１（すなわち、ＹＥＳ）と判定されれば、ノック発生気筒に設定されている気筒別補正値Ｋｓａを前回値に固定する（ステップＳ５０４）。
また、ノック発生回数カウンタＣＫＮが所定回数α１未満となっている気筒（ノック発生気筒Ｎｋ以外の気筒Ｎｍ）の気筒別補正値Ｋｓａ［Ｎｍ］に所定値を加算して、今回のノック発生によってノック発生回数ＫＣＮが、所定回数α１に達したノック発生気筒の気筒別補正値Ｋｓａ［Ｎｋ］よりも点火時期が所定値だけ進角側になるように設定し（ステップＳ５０５）、気筒別補正値Ｋｓａの演算処理を終了して、ステップＳ５０７に進む。
【０１４１】
一方、ステップＳ５０３において、ノック発生気筒のノック発生回数カウンタＣＫＮが所定回数α１に満たない場合には、現在の気筒別補正値Ｋｓａを設定し（ステップＳ５０６）、気筒別補正値Ｋｓａの演算処理を終了して、ステップＳ５０７に進む。
【０１４２】
ステップＳ５０７においては、すべての気筒において、気筒別補正値Ｋｓａの固定が完了している（気筒ごとのノック発生回数カウンタＣＫＮがすべて所定回数α１以上）か否かを判定し、気筒別補正値Ｋｓａの固定処理終了を判定した場合に、全気筒の気筒別補正値Ｋｓａ［ｎ］（ｎ＝１，２，・・・，Ｎ）を一括して１セットとして記憶する（ステップＳ５０８）。
【０１４３】
続いて、記憶完了フラグＦＬｎを「１」にセットし（ステップＳ８１４）、全気筒の気筒別補正値Ｋｓａ［ｎ］の記憶処理が完了して、次回サイクルへの気筒別補正値Ｋｓａの反映が可能な状態にあることを明確化して、図１４の処理ルーチンを終了する。
一方、ステップＳ５０７で、気筒ごとのノック発生回数カウンタＣＫＮのいずれかが所定回数α１未満の場合には、該当気筒で気筒別補正値Ｋｓａの固定が未完了であると判定して、全気筒の気筒別補正値Ｋｓａ［ｎ］の一括記憶処理を実行せずに、図１４の処理ルーチンを終了する。
【０１４４】
次に、図１５を参照しながら、気筒別補正値一括記憶手段２０６への記憶値Ｇｓａの初期値設定処理について説明する。
図１５において、気筒別補正値設定手段２０３Ａは、まず、バッテリをＯＮにした状態で、気筒別補正値記憶マップＭｐｎ内の記憶値Ｇｓａとして、所定値（たとえば、０［ｄｅｇＣＡ］）を設定する（ステップＳ８２１）。
続いて、記憶完了フラグＦＬｎを「１」に設定して（ステップＳ８２２）、図１５の処理ルーチンを終了する。
【０１４５】
次に、図１６および図１７を参照しながら、気筒別補正値Ｋｓａの一括記憶処理について説明する。
図１６のタイミングチャートは、気筒別補正値設定手段２０３Ａにより演算設定される各気筒＃１〜＃４の気筒別補正値Ｋｓａの時間変化を示しており、タイミングｂで処理を一旦中断し、タイミングｃで処理を再開した場合の初期値の設定動作を示している。
図１６において、タイミングａ（矢印参照）は、全気筒分の気筒別補正値Ｋｓａ［ｎ］を１セットとして一括記憶（学習）する場合の記憶タイミングを示している。
また、図１６および図１７において、各気筒＃１〜＃４における記憶値Ｋｓａは、それぞれ、＃１＿Ａ、＃２＿Ａ、＃３＿Ａ、＃４＿Ａで示されている。
【０１４６】
図１６において、まず、タイミングａにおいて、気筒別補正値設定手段２０３Ａは、気筒別補正値一括記憶手段２０６への気筒数分の気筒別補正値Ｋｓａ［ｎ］の一括記憶処理を実行する。
その後、気筒別補正値Ｋｓａの固定処理は、タイミングａから開始され、気筒＃４、気筒＃１の順で実行されていくが、タイミングｂで一旦演算が中断されるまでに、すべての気筒で固定処理が完了していないので、一括記憶処理は実行されない。
したがって、タイミングｃにおいて、演算が再開された時点で設定される気筒別補正値Ｋｓａの初期値としては、図１７に示すように、タイミングａで記憶された記憶値Ｇｓａが設定される。
【０１４７】
以上のように、この発明の実施の形態６によれば、気筒ごとのノック限界点火時期に最終点火時期θｐを設定することができるので、出力トルクロスを生じることなく高い出力トルクを得ることができる。
また、いずれかの気筒のノック発生に応答してすべての気筒を一律に遅角側に制御するので、ノックが連続して発生することもなく、聴感悪化を抑制したノック制御性の確保ができる。
【０１４８】
また、気筒別補正値設定手段２０３Ａが連続して演算する場合や、気筒別補正値Ｋｓａの演算条件が一旦不成立となった後に再び成立して演算を開始する場合に、気筒別補正値一括記憶手段２０６から得られた記憶値Ｇｓａを、気筒別補正値Ｋｓａの初期値として設定することにより、気筒ごとの最終点火時期θｐを、滑らかにかつ高精度にノック限界点火時期に設定することができ、出力トルクロスを生じることなく高い出力トルクを得ることができる。
【０１４９】
実施の形態７．
なお、上記実施の形態２〜６では、気筒別補正値設定手段２０３Ａと協働する気筒別補正値一括記憶手段２０６（図７参照）を設け、全気筒の気筒別補正値Ｋｓａ［ｎ］を固定完了時に一括記憶したが、図１８のように気筒別補正値順次記憶手段２０７を設け、ノック発生気筒の気筒別補正値Ｋｓａ［Ｎｋ］を固定完了時に順次記憶してもよい。
【０１５０】
以下、図１とともに、図１８および図１９を参照しながら、この発明の実施の形態７について説明する。
図１８はこの発明の実施の形態７に係る内燃機関の点火時期制御装置の要部を示す機能ブロック図であり、前述（図７参照）と同様のものについては、前述と同一符号を付して詳述を省略する。また、気筒別点火時期設定手段２０４Ｂは、前述の気筒別点火時期設定手段２０４Ａに対応している。
【０１５１】
図１８において、気筒別点火時期設定手段２０４Ｂ内の気筒別補正値設定手段２０３Ｂは、ノック発生気筒Ｎｋに対応する気筒別補正値Ｋｓａ［Ｎｋ］を順次に記憶する気筒別補正値順次記憶手段２０７を有する。
気筒別補正値設定手段２０３Ｂは、ノック−ノック発生期間において、複数の気筒別補正値Ｋｓａ［ｎ］のうち、今回のノック発生までに所定のノック発生回数α１に達した気筒に対応する気筒別補正値Ｋｓａを固定するとともに、今回のノック発生までに所定のノック発生回数α１に達していない気筒に対応する少なくとも１つの気筒別補正値Ｋｓａを進角側の値に設定する処理（前述のステップＳ５０１〜Ｓ５０６）を繰り返し実行する。
【０１５２】
その後、気筒別補正値設定手段２０３Ｂは、複数の気筒別補正値Ｋｓａ［ｎ］のうちのいずれかが少なくとも１回ずつ固定された場合に、気筒別補正値順次記憶手段２０７に少なくとも１回ずつ固定されたノック発生気筒の気筒別補正値Ｋｓａ［Ｎｋ］を順次に記憶させる。
また、気筒別補正値設定手段２０３Ｂは、気筒別補正値順次記憶手段２０７へのノック発生気筒の気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理を、連続的に繰り返し実行する。
【０１５３】
次に、図１９のフローチャートを参照しながら、図１８に示したこの発明の実施の形態７による気筒別補正値設定手段２０３Ｂおよび気筒別補正値順次記憶手段２０７の処理動作について説明する。
図１９内のステップＳ５０１〜Ｓ５０６は、前述の気筒別補正値Ｋｓａ［ｎ］の更新演算処理を示し、ステップＳ５０７ＢおよびＳ５０８Ｂは、ステップＳ５０７およびＳ５０８にそれぞれ対応している。
【０１５４】
また、図１９の処理ルーチンは、特定クランク角度ごとに発生する割込み信号に応じて、気筒別補正値順次記憶手段２０７を構成するＥＣＵ１１０内のＣＰＵ１１１（図１参照）により実行される。
気筒別補正値順次記憶手段２０７は、内燃機関を構成する気筒数だけ存在する気筒別補正値Ｋｓａ［ｎ］（ｎ＝１，２，・・・，Ｎ）を順次記憶する。
【０１５５】
図１９において、気筒別補正値設定手段２０３Ｂは、前述と同様のステップＳ５０１〜Ｓ５０６に続いて、ノック発生気筒で設定されているノック発生回数カウンタＣＫＮが所定回数α１（たとえば、２［回］）以上であるか否かにより、ノック発生気筒において、気筒別補正値Ｋｓａ［Ｎｋ］の固定が完了しているか否かを判定する（ステップＳ５０７Ｂ）。
【０１５６】
ステップＳ５０７Ｂにおいて、ノック発生気筒Ｎｋに設定されているノック発生回数カウンタＣＫＮの値が、ＣＫＮ≧α１であって、ノック発生気筒Ｎｋで気筒別補正値Ｋｓａ［Ｎｋ］の固定が完了している（すなわち、ＹＥＳ）と判定されれば、ノック発生気筒の気筒別補正値Ｋｓａ［Ｎｋ］を順次記憶させて（ステップＳ５０８Ｂ）、図１９の処理ルーチンを終了する。
【０１５７】
一方、ステップＳ５０７Ｂにおいて、ノック発生気筒Ｎｋにおけるノック発生回数カウンタＣＫＮの値が、ＣＫＮ＜α１であって、ノック発生気筒Ｎｋで気筒別補正値Ｋｓａ［Ｎｋ］の固定が完了していない（すなわち、ＮＯ）と判定されれば、気筒別補正値順次記憶手段２０７へのノック発生気筒Ｎｋの気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理（ステップＳ５０８Ｂ）を実行せずに、図１９の処理ルーチンを終了する。
また、図１９の処理ルーチンを繰り返すことによって、ノック発生気筒Ｎｋの気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理を連続して実行することができる。
【０１５８】
以上のように、この発明の実施の形態７によれば、前述と同様に気筒ごとの最終点火時期θｐを各気筒のノック限界点火時期に設定することができ、出力トルクロスを生じることなく高い出力トルクを得ることができる。
また、いずれかの気筒のノック発生に応答してすべての気筒を一律に遅角側に制御するので、ノックが連続して発生することもなく、聴感悪化を抑制したノック制御性を確保することができる。
【０１５９】
また、全気筒の気筒別補正値Ｋｓａの固定完了を待たずに、ノック発生気筒の気筒別補正値Ｋｓａ［Ｎｋ］を気筒ごとに順次記憶するので、エンジンの個体ばらつきに起因したノック限界点火時期のばらつきを速やかに吸収することができ、気筒ごとに高いトルクを常に得ることができる。
また、ノック発生気筒の気筒別補正値Ｋｓａ［Ｎｋ］を気筒ごとに順次記憶する処理を連続して実行ことにより、エンジンの個体ばらつきに起因したノック限界点火時期のばらつきや、経年変化によるノック限界点火時期のばらつきを、速やかに吸収することができ、気筒ごとに高いトルクを常に得ることができる。
【０１６０】
実施の形態８．
なお、上記実施の形態７では、ノック発生気筒の気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理の実行回数について言及しなかったが、図２０に示すように、順次記憶処理を所定回数α２だけ繰り返し実行してもよい。
以下、図１および図１８とともに、図２０のフローチャートを参照しながら、この発明の実施の形態８による気筒別補正値設定手段２０３Ｂの処理動作について説明する。
【０１６１】
この発明の実施の形態８に係る内燃機関の点火時期制御装置の全体構成は、図１に示した通りであり、気筒別点火時期設定手段２０４Ｂの機能構成は、図１８に示した通りである。
図２０の処理ルーチンは、特定クランク角度ごとに発生する割込み信号に応じて、気筒別補正値設定手段２０３Ｂを構成するＣＰＵ１１１により実行される。
【０１６２】
この場合、気筒別補正値設定手段２０３Ｂは、気筒別補正値順次記憶手段２０７へのノック発生気筒の気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理を、所定回数α２だけ繰り返し実行する。
また、気筒別補正値設定手段２０３Ｂは、記憶回数カウンタＣｐｋを有する。
記憶回数カウンタＣｐｋは、気筒別補正値順次記憶手段２０７への気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理を実行するごとにカウントアップされる。
【０１６３】
図２０内のステップＳ５０１〜Ｓ５０６については、前述と同様の気筒別補正値Ｋｓａの更新演算処理なのでここでは詳述を省略する。
また、図２０内のステップＳ５０７ＢおよびＳ５０８Ｂは、図１９内の処理と同様であり、ステップＳ７０１ＢおよびＳ７０２Ｂは、前述（図９参照）のステップＳ７０１およびＳ７０２にそれぞれ対応している。
【０１６４】
図２０において、気筒別補正値設定手段２０３Ｂは、前述と同様のステップＳ５０１〜Ｓ５０６に続いて、記憶回数カウンタＣｐｋの値を所定回数α２（たとえば、３［回］）と比較することにより、気筒別補正値Ｋｓａ［Ｎｋ］の記憶回数が所定回数α２未満か否かを判定する（ステップＳ７０１Ｂ）。
【０１６５】
ステップＳ７０１Ｂにおいて、Ｃｐｋ＜α２（すなわち、ＹＥＳ）と判定されれば、続いて、ノック発生気筒Ｎｋで設定されているノック発生回数カウンタＣＫＮの値が所定回数α１以上か否かにより、ノック発生気筒Ｎｋにおける気筒別補正値Ｋｓａ［Ｎｋ］の固定が完了しているか否かを判定する（ステップＳ５０７Ｂ）。
【０１６６】
ステップＳ５０７Ｂにおいて、ノック発生気筒Ｎｋのノック発生回数カウンタＣＫＮがＣＫＮ≧α１となって、気筒別補正値Ｋｓａ［Ｎｋ］の固定が完了している（すなわち、ＹＥＳ）と判定されれば、気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理を実行する（ステップＳ５０８Ｂ）。
これにより、順次記憶処理が１回完了したので、記憶回数カウンタＣｐｋをインクリメント（１［回］カウントアップ）して（ステップＳ７０２Ｂ）、図２０の処理ルーチンを終了する。
【０１６７】
一方、ステップＳ５０７Ｂにおいて、ノック発生気筒Ｎｋのノック発生回数カウンタＣＫＮがＣＫＮ＜α１であって、ノック発生気筒の気筒別補正値Ｋｓａ［Ｎｋ］の固定が未完了である（すなわち、ＮＯ）と判定されれば、ノック発生気筒の気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理（ステップＳ５０８Ｂ）を実行せずに、図２０の処理ルーチンを終了する。
また、ステップＳ７０１Ｂにおいて、Ｃｐｋ≧α２（すなわち、ＮＯ）と判定されれば、順次記憶処理の実行回数が必要回数に達したものと見なして、図２０の処理ルーチンを終了する。
【０１６８】
以上のように、この発明の実施の形態８によれば、ノック発生気筒Ｎｋの気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理を所定回数α２だけ実行することにより、前述の作用効果に加えて、エンジンの個体ばらつきに起因したノック限界点火時期のばらつきを速やかに吸収することができ、気筒ごとに高いトルクを常に得ることができる。
また、気筒別補正値の順次記憶処理を所定回数α２だけ実行ことは、前述の実施の形態７のように順次記憶処理を連続して実行する場合と比較して、気筒ごとのノック限界点火時期であることの記憶処理を連続して繰り返すことがないので、ノック発生の頻度が比較的安定し、商品性が向上するという効果がある。
【０１６９】
実施の形態９．
なお、上記実施の形態８（図２０参照）では、記憶回数カウンタＣｐｋが所定回数α２未満の場合に、気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理を実行したが、図２１に示すように、他の所定条件が成立した場合に順次記憶処理を実行してもよい。
以下、図１および図１８とともに、図２１のフローチャートを参照しながら、この発明の実施の形態９に係る気筒別補正値設定手段２０３Ｂによる気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理について説明する。
【０１７０】
この場合、図１８内の気筒別補正値設定手段２０３Ｂは、内燃機関１０１の始動および停止が所定回数だけ実行されるごとに、所定条件が成立したと判定して、気筒別補正値順次記憶手段２０７へのノック発生気筒Ｎｋの気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理を繰り返し実行する。
図２１の処理ルーチンは、前述と同様に、特定クランク角度ごとに発生する割込み信号に応じて、ＣＰＵ１１１により実行される。
【０１７１】
図２１内のステップＳ５０１〜Ｓ５０６は、前述と同様の気筒別補正値Ｋｓａの更新演算処理なので、ここでは詳述を省略する。
また、ステップＳ５０７ＢおよびＳ５０８Ｂは、図１９内の処理と同様であり、ステップＳ７０３およびＳ７０４は、前述（図１０参照）の処理と同様である。
【０１７２】
図２１において、気筒別補正値設定手段２０３Ｂは、前述のステップＳ５０１〜Ｓ５０６に続いて、ＩＧ＿ＯＮ状態カウンタＣｉｇ（イグニッションスイッチのＯＦＦ→ＯＮでカウントアップする）の値が所定回数α３（たとえば、２００［回］）以上か否かを判定する（ステップＳ７０３）。
【０１７３】
ステップＳ７０３において、Ｃｉｇ≧α３（すなわち、ＹＥＳ）と判定されれば、続いて、ノック発生気筒の気筒別補正値Ｋｓａ［Ｎｋ］の固定が完了しているか否かを判定する（ステップＳ５０７Ｂ）。
ステップＳ５０７Ｂにおいて、気筒別補正値Ｋｓａ［Ｎｋ］の固定が完了している（すなわち、ＹＥＳ）と判定されれば、ノック発生気筒の気筒別補正値Ｋｓａ［Ｎｋ］を気筒別補正値順次記憶手段２０７に順次記憶させて（ステップＳ５０８Ｂ）、ＩＧ＿ＯＮ状態カウンタＣｉｇを「０」にリセットし（ステップＳ７０４）、図２１の処理ルーチンを終了する。
【０１７４】
一方、ステップＳ７０３において、Ｃｉｇ＜α３（すなわち、ＮＯ）と判定されれば、気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理（ステップＳ５０８Ｂ）を実行せずに、図２１の処理ルーチンを終了する。
また、ステップＳ５０７Ｂにおいて、ノック発生気筒の気筒別補正値Ｋｓａ［Ｎｋ］の固定が未完了である（すなわち、ＮＯ）と判定されれば、気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理（ステップＳ５０８Ｂ）を実行せずに、図２１処理ルーチンを終了する。
【０１７５】
なお、上記実施の形態９では、イグニッションスイッチのＯＦＦ→ＯＮへの切換回数に応じて、気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理を実行したが、他の所定条件としてこれに限られることなはない。
たとえば、単純に、ＩＧ＿ＯＮ状態が所定時間以上継続した場合に、所定条件が成立したと判定してもよく、ＣＰＵ１１１内のタイマで計算された積算時間ごとに気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理を実行してもよい。
【０１７６】
また、気筒別補正値設定手段２０３Ｂは、内燃機関１０１の使用燃料量の所定量変化が所定回数だけ発生するごとに、所定条件が成立したと判定してもよい。
すなわち、ガソリン性状の変更によって気筒別補正値Ｋｓａ［Ｎｋ］が変化する可能性があるので、ガソリン給油回数ごと、またはガソリンタンクおよびガソリンのレベルゲージの値などから算出したガソリンの使用量が所定の変化量に達するごと条件などで、気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理を実行してもよい。
【０１７７】
以上のように、この発明の実施の形態９によれば、前述と同様に、気筒ごとの最終点火時期θｐを各気筒のノック限界点火時期に設定することができ、出力トルクロスを生じることなく高い出力トルクを得ることができるうえ、ノックが連続して発生することもなく、聴感悪化を抑制したノック制御性を確保することができる。
【０１７８】
また、所定条件の成立時に気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理を所定回数α２だけ実行することにより、所定条件の成立時のノック限界点火時期と所定条件が非成立時のノック限界点火時期とが異なることに対し、高精度にかつ速やかにノック限界点火時期のばらつきを吸収することができ、高精度に気筒ごとに高いトルクを常に得ることができる。
【０１７９】
また、所定条件の成立時に気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理を所定回数α２だけ実行することにより、エンジンの個体ばらつきに起因したノック限界点火時期のばらつきや、経年変化によるノック限界点火時期のばらつきを、速やかに吸収することができるうえ、所定条件の成立を判定することにより経年変化の発生を予想することができ、比較的効率良く、気筒ごとに高いトルクを常に得ることができる。
【０１８０】
実施の形態１０．
なお、上記実施の形態８、９（図２０、図２１）では、所定条件として内燃機関１０１の運転条件を考慮しなかったが、図２２に示すように、所定運転条件が成立する場合に、所定条件が成立したと判定して順次記憶処理を実行してもよい。
以下、図１および図１８とともに、図２２のフローチャートを参照しながら、この発明の実施の形態１０に係る気筒別補正値設定手段２０３Ｂによる気筒別補正値Ｋｓａ［ｎ］の順次記憶処理について説明する。
【０１８１】
図２２の処理ルーチンは、前述（図２０、図２１）と同様に、特定クランク角度ごとに発生する割込み信号に応じて実行される。
また、この発明の実施の形態１０に係る内燃機関の点火時期制御装置の全体構成および気筒別点火時期設定手段２０４Ｂの機能構成については、前述（図１、図１８参照）と同様なので、ここでは詳述を省略する。
【０１８２】
この場合、図１８内の気筒別補正値設定手段２０３Ｂは、内燃機関１０１の所定運転条件が成立する場合に所定条件が成立したと判定し、気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理を実行する。
また、この発明の実施の形態１０に係る気筒別補正値順次記憶手段２０７は、エンジン回転速度Ｎｅを縦軸とし、吸入空気量Ｑａを横軸として定義された気筒別補正値記憶マップＭｐｎ（図示せず）を有し、気筒別補正値記憶マップＭｐｎは、Ｍ個の運転領域に区切られているものとする。
【０１８３】
気筒別補正値記憶マップＭｐｎ内の各運転領域は、運転領域番号Ａ＿Ｍで指定されており、運転領域番号Ａ＿Ｍで指定された領域の記憶値Ｇｓａとして、気筒別補正値Ｋｓａを記憶することができるようになっている。
また、気筒別補正値記憶マップＭｐｎは、前述（図１２参照）のフローチャートに示すように、ステップＳ７１０において、特定の運転領域ごとに記憶された記憶値Ｇｓａが呼び出され、ステップＳ７１１において、記憶値Ｇｓａの値が気筒別補正値設定手段２０３Ｂでの気筒別補正値Ｋｓａの初期値として設定される場合にも使用される。
【０１８４】
図２２において、ステップＳ５０１〜Ｓ５０６は、前述と同様の処理なので、ここでは詳述を省略する。
また、ステップＳ５０７Ｂは前述（図１９〜図２１参照）と同様の処理であり、ステップＳ７０５〜Ｓ７０９は、前述（図１１参照）と同様の処理であり、ステップＳ５０８Ｃは、図１１内のステップＳ５０８Ａに対応している。
【０１８５】
気筒別補正値設定手段２０３Ｂは、前述のステップＳ５０１〜Ｓ５０６に続いて、現在のエンジン回転速度Ｎｅと吸入空気量Ｑａとの条件から、現在の内燃機関１０１の運転状態が、気筒別補正値記憶マップＭｐｎ内のどの運転領域にあるかを検出し、現在の運転領域の運転領域番号Ａ＿Ｍを記憶する（ステップＳ７０５）。
【０１８６】
次に、今回の運転領域番号Ａ＿Ｍ（ｎ）が前回の運転領域番号Ａ＿Ｍ（ｎ−１）と一致するか否かにより、特定の運転領域に連続して存在しているか否かを判定し（ステップＳ７０６）、Ａ＿Ｍ（ｎ）＝Ａ＿Ｍ（ｎ−１）（すなわち、ＹＥＳ）と判定されれば、連続して同一運転領域にあるものと見なし、運転領域定常判定カウンタＣＡＭを所定値だけインクリメント（カウントアップ）して（ステップＳ７０７）、次の判定処理（ステップＳ７０９）に進む。
【０１８７】
一方、ステップＳ７０６において、Ａ＿Ｍ（ｎ）≠Ａ＿Ｍ（ｎ−１）（すなわち、ＮＯ）と判定されれば、内燃機関１０１の運転条件が連続して同じ領域に存在しなかったものと見なして、運転領域定常判定カウンタＣＡＭをリセット（０クリア）して（ステップＳ７０８）、次の判定処理（ステップＳ７０９）に進む。
【０１８８】
ステップＳ７０９においては、運転領域定常判定カウンタＣＡＭの値が所定回数α４（たとえば、４［回］）以上か否かを判定し、ＣＡＭ≧α４（すなわち、ＹＥＳ）と判定されれば、内燃機関１０１の運転状態が定常状態にあるものと見なして、次の判定処理（ステップＳ５０７Ｂ）に進む。
【０１８９】
ステップＳ５０７Ｂにおいては、ノック発生気筒に設定されたノック発生回数カウンタＣＫＮが所定回数α１（たとえば、２［回］）以上に達したか否かにより、ノック発生気筒の気筒別補正値Ｋｓａ［Ｎｋ］の固定が完了しているか否かを判定する。
ステップＳ５０７Ｂにおいて、気筒別補正値Ｋｓａ［Ｎｋ］の固定が完了している（すなわち、ＹＥＳ）と判定されれば、判定した運転番号の領域における記憶値Ｇｓａとして、ノック発生気筒の気筒別補正値Ｋｓａ［Ｎｋ］を順次記憶し（ステップＳ５０８Ｃ）、図２２の処理ルーチンを終了する。
【０１９０】
一方、ステップＳ５０７Ｂにおいて、ノック発生気筒のノック発生回数カウンタＣＫＮが所定回数α１未満であって、ノック発生気筒での気筒別補正値Ｋｓａ［Ｎｋ］の固定が完了していない（すなわち、ＮＯ）と判定されれば、気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理（ステップＳ５０８Ｃ）を実行せずに、図２２の処理ルーチンを終了する。
また、ステップＳ７０９において、ＣＡＭ＜α４（すなわち、ＮＯ）と判定されれば、運転状態が定常状態にないものと見なして、気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理（ステップＳ５０８Ｃ）を実行せずに、図２２の処理ルーチンを終了する。
【０１９１】
なお、図２２内のステップＳ５０８Ｃにおいては、エンジン回転速度Ｎｅおよび吸入空気量Ｑａで定義した運転領域ごとに、気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理を実行したが、他のパラメータに基づく運転領域ごとに、気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理を実行してもよい。
たとえば、吸入空気量Ｑａは内燃機関１０１の運転負荷の状態を表しているが、内燃機関１０１の充填効率や体積効率、およびスロットル開度やアクセルペダルの操作量などを運転領域を定義するためのパラメータとして用いてもよい。
【０１９２】
また、運転状態を表すパラメータと同様に、内燃機関１０１の運転状態を示すパラメータとして、内燃機関１０１の冷却水温、吸気温、潤滑油の油温、排気温、または、内燃機関１０１が動作している環境の大気圧などで運転領域を設定してもよい。
また、空燃比Ａ／Ｆ、排ガス還流装置を流れる排ガス流量であるＥＧＲ流量、内燃機関１０１の吸気弁および排気弁を開閉するクランク角度を表すＶＶＴ位相角の条件と、上記パラメータを組み合わせた条件の成立に応じて、気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理を実行しても、同様の作用効果が得られることは言うまでもない。
【０１９３】
以上のように、この発明の実施の形態１０によれば、運転領域ごとに各気筒のノック限界点火時期に最終点火時期θｐを設定することができ、出力トルクロスを生じることなく高い出力トルクを得ることができる。
また、いずれかの気筒のノック発生に応答してすべての気筒を一律に遅角側に制御するので、ノックが連続して発生することもなく、聴感悪化を抑制したノック制御性を確保することができる。
【０１９４】
また、所定条件の成立時に気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理を所定回数α２だけ実行することにより、所定条件成立時のノック限界点火時期と所定条件非成立時のノック限界点火時期とが異なることに対し、高精度にノック限界点火時期のばらつきを速やかに吸収することができ、高精度に気筒ごとに高いトルクを常に得ることができる。
【０１９５】
また、所定運転条件の成立時に気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理を所定回数α２だけ実行することにより、エンジンの個体ばらつきやエンジン運転条件に依存したばらつきに起因したノック限界点火時期のばらつきのみならず、経年変化によるノック限界点火時期のばらつきを速やかに吸収することができ、気筒ごとに高いトルクを常に得ることができる。
【０１９６】
実施の形態１１．
なお、上記実施の形態７〜１０では、気筒別補正値Ｋｓａの初期値設定手段について具体的に言及しなかったが、気筒別補正値設定手段２０３Ｂに初期値設定手段を設け、必要時に気筒別補正値Ｋｓａの初期値設定処理を実行できるように構成してもよい。
以下、図１、図１３、図１５および図１８とともに、図２３〜図２５を参照しながら、気筒別補正値Ｋｓａの初期値設定手段を設けたこの発明の実施の形態１１について説明する。
【０１９７】
この場合、図１８内の気筒別補正値設定手段２０３Ｂは、初期値設定手段を含み、初期値設定手段は、気筒別補正値順次記憶手段２０７へのノック発生気筒Ｎｋの気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理を繰り返し実行する際、または、所定条件が非成立となって順次記憶処理を中断してから所定条件が再び成立して順次記憶処理を再開する際に、気筒別補正値順次記憶手段２０７に記憶されたノック発生気筒Ｎｋの気筒別補正値Ｋｓａ［Ｎｋ］を初期値として設定する。
【０１９８】
図２３はこの発明の実施の形態１１による気筒別補正値Ｋｓａの演算処理および初期値の設定処理を示すフローチャートであり、図２３内のステップＳ５０１〜Ｓ５０６、Ｓ５０７ＢおよびＳ５０８Ｂは、前述と同様の処理である。
また、ステップＳ８１２は、前述の実施の形態６における図１４内の処理と同様であり、ステップＳ８１１Ｂ、Ｓ８１３ＢおよびＳ８１４Ｂは、図１４内のステップＳ８１１、Ｓ８１３およびＳ８１４にそれぞれ対応している。
【０１９９】
また、気筒別補正値Ｋｓａの演算処理および初期値設定処理の概略処理は、図１３および図１５に示した通りである。
ただし、この場合、図１５内の一括記憶処理に対する記憶完了フラグＦＬｎは、順次記憶処理に対する記憶完了フラグＦＬｋに変更されている。
【０２００】
まず、前述の図１３において、気筒別補正値設定手段２０３Ｂは、気筒別補正値Ｋｓａの演算条件が成立しているか否かを判定し（ステップＳ８０１）、演算条件が不成立の場合には、気筒別補正値Ｋｓａを演算せずに処理を終了し、演算条件が成立した場合には、気筒別補正値Ｋｓａを演算する（ステップＳ８０２）。
このときの演算条件は、前述のように、たとえばエンジン回転速度Ｎｅが５００［ｒ／ｍｉｎ］以上で、かつ吸入空気量Ｑａが１［Ｌ／Ｓ］以上の条件に設定される。
【０２０１】
次に、図２３を参照しながら、気筒別補正値Ｋｓａの演算処理について具体的に説明する。
図２３において、気筒別補正値設定手段２０３Ｂは、まず、記憶完了フラグＦＬｋ（気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理実行時にセットされる）が「１」であるか否かにより、気筒別補正値Ｋｓａの順次記憶処理が実行されたか否かを判定する（ステップＳ８１１Ｂ）。
【０２０２】
ステップＳ８１１Ｂにおいて、ＦＬｋ＝０（すなわち、ＮＯ）と判定されれば、気筒別補正値の順次記憶処理が実行されていないと見なして、気筒別補正値Ｋｓａの値をそのままに保持して、ステップＳ５０１に進む。
一方、ステップＳ８１１Ｂにおいて、ＦＬｋ＝１（すなわち、ＹＥＳ）と判定されれば、前述の式（９）のように、気筒別補正値Ｋｓａとして記憶値Ｇｓａを設定し（ステップＳ８１２）、記憶完了フラグＦＬｋをリセット（０クリア）し（ステップＳ８１３Ｂ）、ステップＳ５０１に進む。
【０２０３】
ステップＳ５０１においては、前述のように、ノック検出値Ｖｐとノック判定レベルＶｔｈとの比較によりノック発生の有無を判定する。
すなわち、Ｖｐ＞Ｖｔｈとなる場合は、今回点火した気筒でノックが発生したと判定してステップＳ５０２に進み、ノック発生気筒のノック発生回数カウンタＣＫＮの値をカウントアップさせて、所定値α１との比較判定処理（ステップＳ５０３）に進む。
【０２０４】
ステップＳ５０３において、ＣＫＮ≧α１と判定された場合は、ノック発生気筒に設定されている気筒別補正値Ｋｓａを固定し（ステップＳ５０４）、ＣＫＮ＜α１となっている気筒の気筒別補正値Ｋｓａを、今回のノック発生によってノック発生回数が所定回数α１に達したノック発生気筒の気筒別補正値よりも点火時期が進角側になるように設定する（ステップＳ５０５）。
【０２０５】
また、ステップＳ５０３において、ノック発生気筒のノック発生回数カウンタＣＫＮが所定回数α１に満たない場合には、ステップＳ５０６に進み、現在の気筒別補正値Ｋｓａを設定し、気筒別補正値Ｋｓａの演算処理を終了する。
また、ステップＳ５０１において、ノックが発生していないと判定された場合も、ステップＳ５０６に進み、気筒別補正値として現在の気筒別補正値Ｋｓａを設定する。
【０２０６】
続いて、気筒ごとに設定されたノック発生回数カウンタＣＫＮが、ノック発生気筒において所定回数α１以上となっているか否かにより、ノック発生気筒の気筒別補正値Ｋｓａ［Ｎｋ］の固定が完了しているか否かを判定する（ステップＳ５０７Ｂ）。
気筒別補正値Ｋｓａ［Ｎｋ］の固定が完了している場合には、ステップＳ５０８Ｂに進み、気筒別補正値Ｋｓａ［ｎ］を気筒ごとに順次記憶する。
最後に、気筒別補正値Ｋｓａ［Ｎｋ］が順次記憶されて、次回サイクルにて反映可能な状態であることを明示するために、記憶完了フラグＦＬｋを「１」にセットし（ステップＳ８１４Ｂ）、図２３の処理ルーチンを終了する。
【０２０７】
一方、ステップＳ５０７Ｂにおいて、ノック発生気筒ごとに設定されているノック発生回数カウンタＣＫＮが少なくとも１ついずれかの気筒で所定回数α１未満の場合は、該当気筒で気筒別補正値の固定が未完了であると判定して、気筒別補正値Ｋｓａ［Ｎｋ］の順次記憶処理を実行せずに、図２３の処理ルーチンを終了する。
【０２０８】
ここで、前述の図１５のフローチャートを参照しながら、記憶値Ｇｓａの初期値設定について説明する。
図１５において、まず、ステップＳ８２１において、バッテリをＯＮにした状態で、記憶値Ｇｓａに所定値（たとえば、０［ｄｅｇＣＡ］）を設定する。
次に、ステップＳ８２２に進み、前述の実施の形態６の場合と同様に、記憶完了フラグＦＬｋを「１」に設定し、初期値設定処理を終了する。
【０２０９】
次に、図２４のタイミングチャートおよび図２５の説明図を参照しながら、気筒別補正値Ｋｓａの記憶処理および初期値設定処理について説明する。
図２４には、前述（図１６参照）と同様に、気筒別補正値設定手段２０３Ｂの演算処理がタイミングｂで一旦中断し、タイミングｃで再開した場合の気筒別補正値Ｋｓａの時間変化が示されている。
【０２１０】
図２４内の矢印は、気筒ごとに順次記憶処理を実行するタイミングａ１〜ａ４を示している。
また、図２４において、各気筒＃１〜＃４における記憶値Ｋｓａは、それぞれ、＃１＿Ａ、＃２＿Ａ、＃３＿Ａ、または、＃４＿Ａ、＃１＿Ｂ、＃２＿Ｂ、＃３＿Ｂ、＃４＿Ｂで示されている。
【０２１１】
また、図２５には、図２４内のタイミングｂ（気筒別補正値Ｋｓａの演算条件の不成立時点）における記憶値Ｇｓａ、すなわち気筒別補正値設定手段２０３Ｂの演算処理が中断したときの記憶値Ｇｓａが表として示されている。
【０２１２】
以下、気筒別補正値設定手段２０３Ｂにより、気筒別補正値順次記憶手段２０７に気筒別補正値Ｋｓａ［Ｎｋ］を順次記憶させる場合について説明する。
この場合、図２４に示すように、初期のタイミングａ１から、演算処理が中断されるタイミングｂまでの間に、気筒別補正値Ｋｓａを固定および順次記憶するタイミングとして、２回のタイミングａ２、ａ３が存在する。
【０２１３】
したがって、タイミングｂの時点で記憶されている記憶値Ｇｓａは、図２５に示すように、各気筒＃１〜＃４に関して、１＿Ｂ、＃２＿Ｂ、＃３＿Ｂ、＃４＿Ａとなる。
これにより、各気筒において、演算処理が再開されたタイミングｃでの気筒別補正値Ｋｓａの初期値は、図２５に示した気筒別補正値順次記憶手段２０７内の記憶値Ｇｓａが設定される。
【０２１４】
このように、気筒別補正値設定手段２０３Ｂが気筒別補正値順次記憶手段２０７に気筒別補正値Ｋｓａ［Ｎｋ］を順次記憶させる場合、気筒＃１、気筒＃２、気筒＃３における記憶値Ｇｓａ（図２５参照）は、前述の実施の形態６のように全気筒の気筒別補正値Ｋｓａ［ｎ］を気筒別補正値一括記憶手段２０６に一括記憶させる場合（図１７参照）と比べて、最適な点火時期に近い設定値となっており、各気筒の最適点火時期に収束するまでに要する時間を短縮することができる。
【０２１５】
以上のように、この発明の実施の形態１１によれば、前述のように、気筒ごとにノック限界点火時期に最終点火時期θｐを設定することができ、出力トルクロスを生じることなく高い出力トルクを得ることができる。
また、いずれかの気筒のノック発生に応答してすべての気筒を一律に遅角側に制御するので、ノックが連続して発生することもなく、聴感悪化を抑制したノック制御性を確保することができる。
【０２１６】
また、気筒別補正値設定手段２０３Ｂが連続して演算する場合や、気筒別補正値の演算条件が一旦不成立となった後で再び成立して演算処理を開始した場合に、気筒別補正値順次記憶手段２０７により得られた記憶値Ｇｓａを、気筒別補正値の初期値として設定することにより、滑らかにかつ、さらに高精度に気筒ごとのノック限界点火時期に最終点火時期θｐ設定することができ、出力トルクロスを生じることなく高い出力トルクを得ることができる。
【０２１７】
実施の形態１２．
なお、上記実施の形態１〜１１では、気筒別補正値設定手段におけるステップＳ５０１の判定結果が「ノック未発生」を示す場合に、ステップＳ５０６に移行して現在の気筒別補正値Ｋｓａをそのまま設定したが、気筒別補正値設定手段に進角処理手段を設け、ノック未発生状態の所定継続条件に応じて気筒別補正値Ｋｓａを進角させてもよい。
【０２１８】
以下、図１、図２、図７および図１８とともに、図２６〜図２９を参照しながら、気筒別補正値Ｋｓａの進角処理手段を設けたこの発明の実施の形態１２について説明する。
図２６および図２７は、進角処理手段による所定継続条件の判定にノック未発生カウンタＣＮＴを用いた場合のフローチャートであり、図２８および図２９は、進角処理手段による所定継続条件の判定にタイマＴＭを用いた場合のフローチャートである。
また、図２６および図２８は、進角処理手段を前述の実施の形態２に適用した場合、図２７および図２９は、進角処理手段を前述の実施の形態７に適用した場合を、それぞれ示している。
【０２１９】
この場合、図２、図７、図１８内の気筒別補正値設定手段２０３、２０３Ａ、２０３Ｂは、所定継続条件に応じて機能する進角処理手段を有する。
進角処理手段は、ノック−ノック発生期間において、複数の気筒別補正値Ｋｓａ［ｎ］のうち、今回のノック発生までに所定のノック発生回数α１に達していない気筒に対応する少なくとも１つの気筒別補正値Ｋｓａを、ノック未発生状態の所定継続条件（後述する）にしたがい、ノック未発生状態の所定継続条件を満たす場合に気筒別補正値Ｋｓａを進角側の値に設定する。
【０２２０】
図２６において、ステップＳ５０１〜Ｓ５０８は、前述の実施の形態２における図８と同様の処理であり、進角処理手段（ステップＳ９０１〜Ｓ９０４）が追加された点のみが図８と異なる。
まず、ノック発生の有無判定処理（ステップＳ５０１）において、各気筒の点火制御ごとにノックが発生していない（すなわち、ＮＯ）と判定されれば、ノック未発生カウンタＣＮＴを所定値（たとえば、１［回］）だけインクリメントして（ステップＳ９０１）、ノック未発生回数カウンタＣＮＴの値が所定回数α５（たとえば、１００［回］）以上か否かを判定する（ステップＳ９０２）。
【０２２１】
ステップＳ９０２において、ＣＮＴ≧α５（すなわち、ＹＥＳ）と判定されれば、固定されていない１つ以上の気筒別補正値Ｋｓａを、点火時期が進角側になるよう設定する（ステップＳ９０３）。
このとき、進角側に設定する進角量の大きさは、ノックが発生した場合に、ノック発生気筒以外の気筒に対する気筒別補正値Ｋｓａを、ノック発生気筒に対して進角側に設定する幅よりも大きくなるよう設定する。
【０２２２】
次に、ノック未発生回数カウンタＣＮＴの値をリセット（０クリア）して（ステップＳ９０４）、ステップＳ５０７の判定処理に進む。
また、ステップＳ９０２において、ＣＮＴ＜α５（すなわち、ＮＯ）と判定されれば、気筒別補正値Ｋｓａの進角側設定処理（ステップＳ９０３）を実行せずに、ステップＳ５０７に進む。
【０２２３】
以下、ステップＳ５０７において、気筒別補正値Ｋｓａ［ｎ］の固定が完了していると判定された場合には、ステップＳ５０８に進み、全気筒の気筒別補正値Ｋｓａ［ｎ］を一括して１セットとして記憶して、図２６の処理ルーチンを終了する。
一方、ステップＳ５０７において、いずれかの気筒別補正値の固定が完了していないと判定された場合には、気筒別補正値Ｋｓａ「ｎ」の一括記憶処理（ステップＳ５０８）を実行せずに、図２６の処理ルーチンを終了する。
【０２２４】
図２６においては、気筒別補正値一括記憶手段２０６を有する気筒別点火時期設定手段２０３Ａ（図７参照）に進角処理手段を設けた場合について説明したが、次に、図２７を参照しながら、気筒別補正値順次記憶手段２０７を有する気筒別補正値設定手段２０３Ｂ（図１８参照）に進角処理手段を設けた場合について説明する。
【０２２５】
図２７において、ステップＳ５０１〜Ｓ５０６、Ｓ５０７Ｂ、Ｓ５０８Ｂは、前述の実施の形態７における図１９と同様の処理であり、ステップＳ９０１〜Ｓ９０４は、図２６と同様の処理である。
すなわち、前述と同様に、進角処理手段を構成するステップＳ９０１〜Ｓ９０４においては、ノック未発生状態の所定継続条件（ＣＮＴ≧α５）を満たす場合に、気筒別補正値Ｋｓａを進角側の値に設定する。
【０２２６】
以下、ステップＳ５０１〜Ｓ５０６に続くステップＳ５０７Ｂにおいて、ノック発生気筒で気筒別補正値Ｋｓａ［Ｎｋ］の固定が完了しているか否かを判定し、気筒別補正値Ｋｓａ［Ｎｋ］の固定が完了してれば、ステップＳ５０８Ｂに進み、気筒別補正値Ｋｓａ［Ｎｋ］を順次記憶して、図２７の処理ルーチンを終了する。
【０２２７】
図２６および図２７においては、ノック発生回数が所定回数α１に達していない気筒の気筒別補正値Ｋｓａを進角側に設定するときの所定継続条件を判定するために、ノック未発生中の点火回数を計数するカウンタＣＮＴを用いた場合について説明したが、次に、図２８および図２９を参照しながら、所定継続条件の判定にタイマＴＭを用いた場合について説明する。
【０２２８】
図２８および図２９においては、ノック未発生状態での点火回数を計数する代わりに、ＣＰＵ１１１が有するタイマを用いて経過時間を計測し、計測時間が所定時間以上となった場合に、所定継続条件を満たすと判定して気筒別補正値Ｋｓａの進角処理を実行する。
【０２２９】
図２８において、ステップＳ５０１〜Ｓ５０８については、前述と同様の処理なので説明を省略する。
この場合、前述（図２６参照）のステップＳ９０１〜Ｓ９０４に代えて、ステップＳ９１０〜Ｓ９１５を追加した点のみが、図２６と異なる。
【０２３０】
まず、ステップＳ５０１において、ノックが発生していない（すなわち、ＮＯ）と判定された場合には、タイマＴＭが作動中か否かを判定する（ステップＳ９１１）。
ステップＳ９１１において、タイマＴＭの値が作動中（すなわち、ＹＥＳ）と判定されれば、続いて、タイマＴＭが一定時間（たとえば、３０［ｓｅｃ］）を経過したか否かを判定する（ステップＳ９１２）。
【０２３１】
ステップＳ９１１において、ＴＭ≧一定時間（すなわち、ＹＥＳ）と判定されれば、ノック未発生状態が所定時間にわたって連続的に継続しているものと見なして、固定されていない１つ以上の気筒別補正値Ｋｓａを、点火時期が進角側になるように設定し（ステップＳ９１３）、タイマＴＭをリセット（０クリア）して（ステップＳ９１４）、ステップＳ５０７の判定処理に進む。
【０２３２】
一方、ステップＳ９１１において、タイマＴＭが作動中でない（すなわち、ＮＯ）と判定されれば、タイマをスタートさせて（ステップＳ９１５）、ステップＳ５０７に進む。
また、ステップＳ９１２において、ＴＭ＜一定時間（すなわち、ＮＯ）と判定されれば、ノック未発生状態が所定時間以上継続していないので、進角処理（ステップＳ９１３）を実行せずに、ステップＳ５０７に進む。
【０２３３】
一方、ステップＳ５０１において、ノック発生（すなわち、ＹＥＳ）と判定された場合には、ステップＳ５０２〜Ｓ５０６の処理を実行した後、タイマＴＭをストップして（ステップＳ９１０）、ステップＳ５０７に進む。
ステップＳ５０７においては、すべての気筒において、気筒別補正値Ｋｓａ［ｎ］の固定が完了しているか否かを判定し、固定が完了している場合には、ステップＳ５０８に進み、全気筒分の気筒別補正値Ｋｓａ［ｎ］を一括記憶して、図２８の処理ルーチンを終了する。
【０２３４】
図２８においては、全気筒の気筒別補正値を一括記憶する気筒別補正値設定手段２０３Ａ（図７参照）に進角処理手段を設けた場合について説明したが、次に、図２９を参照しながら、ノック発生気筒の気筒別補正値を順次記憶する気筒別補正値設定手段２０３Ｂ（図１８参照）に進角処理手段を設けた場合について説明する。
図２９において、前述（図１９、図２８）と同様の処理については、前述と同一符号を付して詳述を省略する。
【０２３５】
図２９内のステップＳ５０７Ｂにおいては、ノック発生気筒で気筒別補正値Ｋｓａ［Ｎｋ］の固定が完了しているか否かを判定し、気筒別補正値Ｋｓａ［Ｎｋ］の固定が完了している場合には、ステップＳ５０８Ｂに進み、気筒別補正値Ｋｓａ［Ｎｋ］を記憶して、図２９の処理ルーチンを終了する。
【０２３６】
図２６〜図２９のように、気筒別補正値設定手段２０３Ａ、２０３Ｂに進角処理手段（ステップＳ９０１〜Ｓ９０４、Ｓ９１０〜Ｓ９１５）を設けることにより、ノック発生までの間隔が短くなるので、迅速に気筒別補正値Ｋｓａを固定することができ、気筒別に最適な点火時期に設定することができる。
【０２３７】
以上のように、この発明の実施の形態１２によれば、気筒別補正値Ｋｓａが未記憶の状態であっても、速やかに気筒別補正値Ｋｓａを記憶することにより、気筒ごとのノック限界点火時期に速やかに設定することができ、出力トルクロスを生じることなく高い出力トルクを得ることができる。
また、いずれかの気筒のノック発生に応答してすべての気筒を一律に遅角側に制御するので、ノックが連続して発生することもなく、聴感悪化を抑制したノック制御性を確保することができる。
【図面の簡単な説明】
【０２３８】
【図１】この発明の実施の形態１に係る内燃機関の点火時期制御装置を概略的に示すブロック構成図である。
【図２】この発明の実施の形態１に係る内燃機関の点火時期制御装置の要部を示す機能ブロック図である。
【図３】この発明の実施の形態１による気筒別補正値の演算処理を示すフローチャートである。
【図４】この発明の実施の形態１による最終点火時期の演算処理を示すフローチャートである。
【図５】この発明の実施の形態１によるノック遅角量の演算処理を示すフローチャートである。
【図６】この発明の実施の形態１による気筒別点火時期設定処理を従来処理（全気筒共通点火時期による制御処理）と比較して示すタイミングチャートである。
【図７】この発明の実施の形態２に係る内燃機関の点火時期制御装置の要部を示す機能ブロック図である。
【図８】この発明の実施の形態２による気筒別補正値の演算処理および記憶処理を示すフローチャートである。
【図９】この発明の実施の形態３による気筒別補正値の記憶処理を示すフローチャートである。
【図１０】この発明の実施の形態４による気筒別補正値の記憶処理を示すフローチャートである。
【図１１】この発明の実施の形態５による気筒別補正値の記憶処理を示すフローチャートである。
【図１２】この発明の実施の形態５による気筒別補正値の演算処理を示すフローチャートである。
【図１３】この発明の実施の形態６による気筒別補正値の演算処理を示すフローチャートである。
【図１４】この発明の実施の形態６による気筒別補正値の演算処理および記憶処理を示すフローチャートである。
【図１５】この発明の実施の形態６による気筒別補正値の記憶値の初期化演算処理を示すフローチャートである。
【図１６】この発明の実施の形態６による気筒別補正値の記憶処理を示すタイミングチャートである。
【図１７】この発明の実施の形態６による気筒別補正値の記憶値を示す説明図である。
【図１８】この発明の実施の形態７に係る内燃機関の点火時期制御装置の要部を示す機能ブロック図である。
【図１９】この発明の実施の形態７による気筒別補正値の演算処理を示すフローチャートである。
【図２０】この発明の実施の形態８による気筒別補正値の記憶処理を示すフローチャートである。
【図２１】この発明の実施の形態９による気筒別補正値の記憶処理を示すフローチャートである。
【図２２】この発明の実施の形態１０による気筒別補正値の記憶処理を示すフローチャートである。
【図２３】この発明の実施の形態１１による気筒別補正値の演算処理および記憶処理を示すフローチャートである。
【図２４】この発明の実施の形態１１による気筒別補正値の記憶処理を示すタイミングチャートである。
【図２５】この発明の実施の形態１１による気筒別補正値の記憶値を示す説明図である。
【図２６】この発明の実施の形態１２による気筒別補正値の演算処理および記憶処理を示すフローチャートである。
【図２７】この発明の実施の形態１２による気筒別補正値の演算処理および記憶処理を示すフローチャートである。
【図２８】この発明の実施の形態１２による気筒別補正値の演算処理および記憶処理を示すフローチャートである。
【図２９】この発明の実施の形態１２による気筒別補正値の演算処理および記憶処理を示すフローチャートである。
【符号の説明】
【０２３９】
１０１  内燃機関、１１０  ＥＣＵ、１１１  ＣＰＵ、１１８  ノックセンサ、１１９  クランク角センサ、１２０  カム角センサ、１２１  点火コイル、１２２  点火プラグ、２０１  ノック検出手段、２０２  基準点火時期制御手段、２０３、２０３Ａ、２０３Ｂ  気筒別補正値設定手段、２０４、２０４Ａ、２０４Ｂ  気筒別点火時期設定手段、２０６  気筒別補正値一括記憶手段、２０７  気筒別補正値順次記憶手段、Ｋｓａ、Ｋｓａ［ｎ］、Ｋｓａ［Ｎｋ］  気筒別補正値、α１  ノック発生回数、α２、α３  所定回数、θｒ  基準点火時期、θｐ  最終点火時期。
【図１】
2007327346.tif 000003
【図２】
2007327346.tif 000004
【図３】
2007327346.tif 000005
【図４】
2007327346.tif 000006
【図５】
2007327346.tif 000007
【図６】
2007327346.tif 000008
【図７】
2007327346.tif 000009
【図８】
2007327346.tif 000010
【図９】
2007327346.tif 000011
【図１０】
2007327346.tif 000012
【図１１】
2007327346.tif 000013
【図１２】
2007327346.tif 000014
【図１３】
2007327346.tif 000015
【図１４】
2007327346.tif 000016
【図１５】
2007327346.tif 000017
【図１６】
2007327346.tif 000018
【図１７】
2007327346.tif 000019
【図１８】
2007327346.tif 000020
【図１９】
2007327346.tif 000021
【図２０】
2007327346.tif 000022
【図２１】
2007327346.tif 000023
【図２２】
2007327346.tif 000024
【図２３】
2007327346.tif 000025
【図２４】
2007327346.tif 000026
【図２５】
2007327346.tif 000027
【図２６】
2007327346.tif 000028
【図２７】
2007327346.tif 000029
【図２８】
2007327346.tif 000030
【図２９】
2007327346.tif 000031