(57)【要約】【課題】エンジンの個体差を考慮した適切な点火時期を設定可能とする内燃機関の点火時期制御装置を提供する。【解決手段】エンジン回転数及びエンジン負荷に基づいて基本点火時期ラインＡ及びＭＢＴラインＢを設定する。進角側補正量ｂ及び遅角側補正量ａによって点火時期を制御する。基本点火時期ラインＡに対し、現運転状態に応じて求められる学習補正量ｃを基準にして上記進角側補正量ｂ及び遅角側補正量ａによって点火時期を制御する。【選択図】図４
2008051016.tif 000002
【特許請求の範囲】
【請求項１】
内燃機関の運転状態に応じて決定される基本点火時期ライン（Ａ）を基準とした補正基準点ライン（Ｃ）を設定するための補正量を更新する補正基準点変更手段と、
上記補正基準点ライン（Ｃ）と平行な点火栓の実点火時期ライン（ＯＵＴ）を、上記補正基準点ライン（Ｃ）上の補正基準点から所定補正量をもって補正して設定する実点火時期ライン設定手段と、
補正基準点ライン（Ｃ）と実点火時期ライン（ＯＵＴ）との間の補正量を内燃機関の運転状態に応じて変更する補正量変更手段とを備えた内燃機関の点火時期制御装置において、
上記補正基準点変更手段は、補正基準点（Ｃ１）を求めるための基本点火時期ライン（Ａ）に対して補正する補正量（ｃ）として記憶する学習値を、内燃機関の運転状態に対して常に最適値に設定するよう構成されていることを特徴とする内燃機関の点火時期制御装置。
【請求項２】
上記請求項１記載の内燃機関の点火時期制御装置において、
補正基準点変更手段は、進角補正量の「なまし処理」を行い、この「なまし処理」された進角補正量と現在の進角補正量との乖離幅が所定値以下である場合には、学習値を所定の固定値に設定するよう構成されていることを特徴とする内燃機関の点火時期制御装置。
【請求項３】
上記請求項１記載の内燃機関の点火時期制御装置において、
補正基準点変更手段は、進角補正量の「なまし処理」を行い、この「なまし処理」された進角補正量と現在の進角補正量との乖離幅が所定値を超えている場合には、この乖離幅を修正量として、補正基準点（Ｃ１）を求めるための学習値の算出に使用するよう構成されていることを特徴とする内燃機関の点火時期制御装置。
【請求項４】
上記請求項１、２または３記載の内燃機関の点火時期制御装置において、
補正基準点変更手段により求められた学習値に基づく補正量（ｃ）だけ、基本点火時期ライン（Ａ）から補正した位置を補正基準点（Ｃ１）とし、この補正基準点（Ｃ１）に対して、進角側補正量（ｂ）だけ進角側に、また、遅角側補正量（ａ）だけ遅角側にそれぞれ補正した時期を実点火時期として設定するよう構成されていることを特徴とする内燃機関の点火時期制御装置。
【請求項５】
上記請求項１〜４のうち何れか一つに記載の内燃機関の点火時期制御装置において、
内燃機関の回転数と負荷とをパラメータとする複数種類の運転状態をポイントとして設定した学習マップを備えており、
補正基準点変更手段により学習値を求める際、内燃機関の現運転状態を囲む学習マップ上の複数のポイントに対して逆補間計算を行って配分し、これら各ポイントに対して学習値を反映させる構成とされていることを特徴とする内燃機関の点火時期制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、例えば自動車用エンジンに代表される内燃機関に備えられ、内燃機関の運転状態に応じて点火栓（点火プラグ）の点火時期を制御（ＫＣＳ制御）する点火時期制御装置に係る。特に、本発明は、内燃機関の個体差に応じた適切な点火時期を設定可能とするための対策に関する。
【背景技術】
【０００２】
従来より、内燃機関（以下、エンジンと呼ぶ）における点火プラグの点火時期は、エンジンの排気ガスや燃費、あるいはドライバビリティ（エンジンの出力トルク）等に大きな影響を与える因子の一つである。そのため、エンジンのノッキングの発生回数を抑えながらも、エンジンの運転状態に応じた最適時期となるような点火時期を得るための学習制御が行われている（例えば下記の特許文献１を参照）。
【０００３】
また、上記エンジンのノッキングの発生しやすさは種々の運転条件の影響を受ける。例えば、吸気温度が高い程、また圧縮比が大きい程、更にはエンジン負荷が高い程、ノッキングは発生し易い状況となる。一方、吸気湿度が高い程、ノッキングは発生し難い状況となる。また、可変バルブタイミング機構（以下、ＶＶＴと呼ぶ）を備えたエンジンにあっては、吸排気バルブのオーバラップ量の大きさによって気筒内の残留燃焼ガスの量（所謂内部ＥＧＲ量）が異なるため、これによってもノッキングの発生しやすさは変化する。
【０００４】
従来の一般的な点火時期学習制御としては、エンジン回転数やエンジン負荷等に基づいて求められるＭＢＴ （Ｍｉｎｉｍｕｍ  Ｓｐａｒｋ  Ａｄｖａｎｃｅ  ｆｏｒ  Ｂｅｓｔ  Ｔｏｒｑｕｅ：最適点火時期）に近付くように点火時期の進角補正を行っていきながら、ノックセンサによってノッキングが検知された場合には、点火時期の遅角補正を行ってノッキングを解消するといった制御が行われる。このため、上述した各条件（ノッキングの発生しやすさを左右する条件）が変化すればこの点火時期の補正量も変化することになる。
【０００５】
ところで、エンジンが、ある運転状態から他の運転状態に急変した場合、例えばアクセル開度の急激な増大によりエンジン負荷が急上昇した場合等にあっては、エンジンの運転状態としてはノッキングが発生しやすい状況となることがある。ところが、ノックセンサによってノッキングが検知される度に所定量（例えば０．５°ＣＡ：Ｃｒａｎｋ  Ａｎｇｌｅ）ずつ遅角していくような制御では、ノッキングの解消までに時間を要し、継続的に多数回のノッキングが発生してしまう可能性があり、ノッキング音が車室内に伝達されてしまって乗員に違和感を与えたり、エンジンに悪影響を与えたりする。
【０００６】
これを考慮して、エンジン負荷が急上昇する等の運転状態の急変時には点火時期を大幅に遅角させてノッキングの発生を確実に防止することが考えられる。しかし、これでは、点火時期がＭＢＴから大きく離れ、必要以上に点火時期が遅角してしまう可能性が高く、エンジンの運転効率の悪化を招いてしまうことに繋がる。
【０００７】
この点に鑑み、例えば下記の特許文献２に開示されているような点火時期学習制御が行われている。以下、この特許文献２に開示されている点火時期学習制御について図１５を用いて説明する。図１５では、点火時期学習制御の理解を容易にするためにエンジン負荷と点火時期との関係を示しているが、実際には、エンジン負荷だけでなくエンジン回転数等にも基づいて点火時期は制御されることになる。
【０００８】
この点火時期学習制御にあっては、先ず、エンジン回転数及びエンジン負荷に基づいて基本点火時期の設定ライン（図１５におけるラインＡ；基本点火時期ライン）及びＭＢＴライン（図１５におけるラインＢ）を設定する。そして、上記基本点火時期に対して進角側補正量（図１５における補正量ｂ）だけ点火時期を進角させる。図１５におけるラインＡ’は、上記基本点火時期の設定ラインＡに対して進角側補正量ｂだけ平行移動したラインとなっている。この進角側補正量ｂはノッキングが発生するまで次第に増加される。そして、ノッキングが発生すると、遅角側補正量（図１５における補正量ａ）だけ点火時期を遅角させる。この遅角側補正量ａはノッキングが解消されるまで継続的に増大していく。つまり、実点火時期（図１５に破線で示すＯＵＴ）は、上記基本点火時期の設定ラインＡ上における現在のエンジン運転状態に相当する点に対して進角側補正量ｂだけ進角させ且つ遅角側補正量ａだけ遅角した値となる。
【０００９】
即ち、基本点火時期の設定ラインＡに対して、進角側補正量ｂと遅角側補正量ａとの差分だけ進角させた位置を実点火時期ＯＵＴとする制御となっている。
【００１０】
そして、図１５に示すように、基本点火時期の設定ラインＡに対して平行な実点火時期ラインＯＵＴを設定することで、ある１点のエンジン運転状態における点火時期を学習すれば、その学習値（上記進角側補正量ｂや遅角側補正量ａ）を他のエンジン運転状態における点火時期の制御にも反映させることができ、エンジン運転状態の急変時であっても必要以上に点火時期が遅角されてしまうといったことがなくなるようにしている。
【００１１】
尚、上記進角側補正量ｂ及び遅角側補正量ａの補正動作としては、上記遅角側補正量ａが「０」に維持されている状況では進角側補正量ｂを増加させていき、ノッキングの発生に伴い遅角側補正量ａが所定値に達すると進角側補正量ｂを減少させるようにしている。
【００１２】
ところが、上述したように、基本点火時期の設定ラインＡに対して平行移動するように点火時期を補正していくものでは、あるエンジン運転領域において適切な点火時期が得られない可能性があった。例えば、エンジンの低負荷時にあっては、ノッキングの発生しやすさは、高負荷時に比べて温度の影響を大きく受ける可能性がある。このため、上記基本点火時期の設定ラインＡに対して平行移動させる上記点火時期制御では、低負荷時における進角側補正量ｂが小さくなりすぎて、その後に高負荷運転に移行した際に十分な進角側補正量ｂが得られない場合があった。
【００１３】
この点を考慮し、上記基本点火時期の設定ラインＡに対する補正ライン（補正基準点ライン）Ｃを設定しておき、この補正ラインＣを基準にして上記点火時期を補正することが行われている。これによれば、例えば、高負荷時において進角側補正量として図中ｂ１が設定されている状況において、エンジンの運転状態が低負荷となった場合、進角側補正量としては最大で図中ｂ２を確保でき、その後に、エンジンの運転状態が高負荷となった場合でも進角側補正量ｂを大きく確保できてエンジンの運転効率の悪化を阻止できることになる。
【特許文献１】特開平１１−３０１７６号公報
【特許文献２】特開２００２−３１０２４号公報
【発明の開示】
【発明が解決しようとする課題】
【００１４】
しかしながら、上述した従来の点火時期の制御手法では、上記補正ラインＣの設定に関しては、例えば、上記基本点火時期の設定ラインＡに対して所定角度（図中の角度ｄ）をもって傾斜させたラインとして設定されているに過ぎず、未だ最適な補正ラインＣとは言えないものであった。
【００１５】
つまり、上記基本点火時期の設定ラインＡは、エンジンの個体差に拘わらずエンジン回転数及びエンジン負荷に基づいて設定されている。そして、補正ラインＣは、この基本点火時期の設定ラインＡを基準にして設定されている。このため、この補正ラインＣにあっても、エンジンの個体差を反映できてはいなかった。ここでいうエンジンの個体差とは、例えば、シリンダヘッドの加工誤差やシリンダヘッドガスケットの厚さ寸法の誤差等による圧縮比のバラツキや、圧縮室内や点火プラグにおけるカーボンの付着量の増加などといった経時的なバラツキなどであって、上記補正ラインＣは、このようなエンジンの個体差を反映したものにはなっていなかった。
【００１６】
本発明は、かかる点に鑑みてなされたものであり、その目的とするところは、上述したエンジンの個体差を考慮した適切な点火時期を設定可能とする内燃機関の点火時期制御装置を提供することにある。
【課題を解決するための手段】
【００１７】
−課題の解決原理−
上記の目的を達成するために講じられた本発明の解決原理は、上記基本点火時期の設定ラインＡを基準にして補正ラインＣを決定するものに代えて、この設定ラインＡに対する補正量を内燃機関の運転状態に応じて可変とするようにしている。
【００１８】
−解決手段−
具体的に、本発明は、内燃機関の運転状態に応じて決定される基本点火時期ライン（Ａ）を基準とした補正基準点ライン（Ｃ）を設定するための補正量（後述する学習補正量（ｃ））を更新する補正基準点変更手段と、上記補正基準点ライン（Ｃ）と平行な点火栓の実点火時期ライン（ＯＵＴ）を、上記補正基準点ライン（Ｃ）上の補正基準点（Ｃ１）から所定補正量（後述する遅角側補正量（ａ）、進角側補正量（ｂ）、学習補正量（ｃ）による補正量）をもって補正して設定する実点火時期ライン設定手段と、補正基準点ライン（Ｃ）と実点火時期ライン（ＯＵＴ）との間の補正量（後述する遅角側補正量（ａ）、進角側補正量（ｂ）による補正量）を内燃機関の運転状態に応じて変更する補正量変更手段とを備えた内燃機関の点火時期制御装置を前提としている。この内燃機関の点火時期制御装置に対し、上記補正基準点変更手段が、補正基準点（Ｃ１）を求めるための基本点火時期ライン（Ａ）に対して補正する補正量（ｃ）として記憶する学習値を、内燃機関の運転状態に対して常に最適値に設定する構成としている。例えば、補正基準点（Ｃ１）を求めるための基本点火時期ライン（Ａ）に対して補正する補正量（ｃ）となる学習値が最適な値となるように、内燃機関の運転状態に応じて補正量（ｃ）を可変とする構成としている。
【００１９】
この特定事項により、基本点火時期ライン（Ａ）に対して補正した点を、上記進角補正量により点火時期を補正する基準となる補正基準点（Ｃ１）として設定するに際し、その補正量（補正基準点を求めるための基本点火時期ラインからの補正学習値）を、内燃機関の運転状態に応じた最適値とすることで、内燃機関の個体差を反映した実点火時期を得ることが可能になる。例えば、シリンダヘッドの加工誤差やシリンダヘッドガスケットの厚さ寸法の誤差等による圧縮比のバラツキが生じていたとしても、それを反映した適切な点火時期で点火栓を点火させることが可能になる。
【００２０】
上記補正基準点変更手段として、より具体的には以下の構成が挙げられる。つまり、補正基準点変更手段が、進角補正量の「なまし処理」を行い、この「なまし処理」された進角補正量と現在の進角補正量との乖離幅が所定値以下である場合に、学習値を所定の固定値に設定する構成としている。
【００２１】
また、上記補正基準点変更手段が、進角補正量の「なまし処理」を行い、この「なまし処理」された進角補正量と現在の進角補正量との乖離幅が所定値を超えている場合に、この乖離幅を修正量として、補正基準点（Ｃ１）を求めるための学習値の算出に使用する構成としている。
【００２２】
また、補正基準点変更手段により求められた学習値に基づく補正量（ｃ）だけ、基本点火時期ライン（Ａ）から補正した位置を補正基準点（Ｃ１）とし、この補正基準点（Ｃ１）に対して、進角側補正量（ｂ）だけ進角側に、また、遅角側補正量（ａ）だけ遅角側にそれぞれ補正した時期を実点火時期として設定するよう構成されている。
【００２３】
これにより、従来例の如く設定ラインＡに対する補正ラインＣを設定したものと同様に、エンジンの運転状態が急変した場合に進角側補正量（ｂ）が小さくなりすぎてしまうことを阻止しながらも、上述した本発明の効果である内燃機関の個体差を反映した実点火時期を得ることが可能になる。
【００２４】
また、ある運転状態において補正基準点変更手段により求められた学習値を、他の運転状態における点火時期の制御にも反映させるための構成として以下のものが挙げられる。つまり、内燃機関の回転数と負荷とをパラメータとする複数種類の運転状態をポイントとして設定した学習マップを備えさせ、補正基準点変更手段により学習値を求める際、内燃機関の現運転状態を囲む学習マップ上の複数のポイントに対して逆補間計算を行って配分し、これら各ポイントに対して学習値を反映させる構成としている。これによれば、学習値の利用範囲を拡大させることができ、点火時期制御の効率化を図ることができる。
【発明の効果】
【００２５】
本発明では、上記基本点火時期ライン（Ａ）を基準にして補正基準点ライン（Ｃ）を決定するものに代えて、この基本点火時期ライン（Ａ）に対する補正量（ｃ）を内燃機関の運転状態に応じて設定するようにしている。このため、基本点火時期ライン（Ａ）に対して補正する割合を、内燃機関の個体差を反映したものとして得ることが可能になり、適切な点火時期で点火栓を点火させることが可能になる。
【発明を実施するための最良の形態】
【００２６】
以下、本発明の実施の形態を図面に基づいて説明する。本実施形態では、本発明に係る点火時期制御装置を自動車用Ｖ型６気筒エンジン（内燃機関）に適用した場合について説明する。
【００２７】
−エンジン全体構成の説明−
図１は、本実施形態に係るＶ型エンジンＥをクランクシャフトＣの軸心に沿った方向から見たエンジン内部の概略構成を示す図である。また、図２は、このエンジンＥ、吸排気系及び制御系の概略を示すシステム構成図である。
【００２８】
これら図に示すように、Ｖ型エンジンＥは、シリンダブロック１の上部にＶ型に突出した一対のバンク２Ｌ，２Ｒを有している。各バンク２Ｌ，２Ｒは、シリンダブロック１の上端部に設置されたシリンダヘッド３Ｌ，３Ｒと、その上端に取り付けられたヘッドカバー４Ｌ，４Ｒとをそれぞれ備えている。上記シリンダブロック１には複数のシリンダ５Ｌ，５Ｒ，…（例えば各バンク２Ｌ，２Ｒに３個ずつ）が所定の挟み角（例えば９０°）をもって配設されており、これらシリンダ５Ｌ，５Ｒ，…の内部にピストン５１Ｌ，５１Ｒ，…が往復移動可能に収容されている。また、各ピストン５１Ｌ，５１Ｒ，…はコネクティングロッド５２Ｌ，５２Ｒ，…を介してクランクシャフトＣに動力伝達可能に連結されている。更に、シリンダブロック１の下側にはクランクケース６が取り付けられており、上記シリンダブロック１内の下部からクランクケース６の内部に亘る空間がクランク室６１となっている。また、このクランクケース６の更に下側にはオイル溜まり部となるオイルパン６２が配設されている。
【００２９】
また、上記シリンダヘッド３Ｌ，３Ｒには吸気ポート３１Ｌ，３１Ｒを開閉するための吸気バルブ３２Ｌ，３２Ｒ及び排気ポート３３Ｌ，３３Ｒを開閉するための排気バルブ３４Ｌ，３４Ｒがそれぞれ組み付けられており、シリンダヘッド３Ｌ，３Ｒとヘッドカバー４Ｌ，４Ｒとの間に形成されているカム室４１Ｌ，４１Ｒに配置されたカムシャフト３５Ｌ，３５Ｒ，３６Ｌ，３６Ｒの回転によって各バルブ３２Ｌ，３２Ｒ，３４Ｌ，３４Ｒの開閉動作が行われるようになっている。
【００３０】
また、本実施形態に係るエンジンＥのシリンダヘッド３Ｌ，３Ｒは、分割構造となっている。詳しくは、シリンダブロック１の上面に取り付けられるシリンダヘッド本体３７Ｌ，３７Ｒと、このシリンダヘッド本体３７Ｌ，３７Ｒの上側に組み付けられるカムシャフトハウジング３８Ｌ，３８Ｒとによりシリンダヘッド３Ｌ，３Ｒが構成されている。
【００３１】
一方、上記各バンク２Ｌ，２Ｒの内側（バンク間側）の上部には各バンク２Ｌ，２Ｒに対応する吸気マニホールド７Ｌ，７Ｒが配設されており、各吸気マニホールド７Ｌ，７Ｒの下流端が各吸気ポート３１Ｌ，３１Ｒ，…に連通している。また、この吸気マニホールド７Ｌ，７Ｒは、各バンク共通のサージタンク７１（図２参照）及びスロットルバルブ７２を備えた吸気管７３に連通されており、この吸気管７３の上流側にはエアクリーナ７４が設けられている。これにより、上記エアクリーナ７４から吸気管７３内に導入された空気は、サージタンク７１を通じて各吸気マニホールド７Ｌ，７Ｒに導入される。
【００３２】
上記シリンダヘッド３Ｌ，３Ｒの吸気ポート３１Ｌ，３１Ｒにはインジェクタ７５Ｌ，７５Ｒがそれぞれ設けられており、このインジェクタ７５Ｌ，７５Ｒからの燃料噴射時にあっては、吸気マニホールド７Ｌ，７Ｒ内に導入された空気と、このインジェクタ７５Ｌ，７５Ｒから噴射された燃料とが混合されて混合気となり、吸気バルブ３２Ｌ，３２Ｒの開弁に伴って燃焼室７６Ｌ，７６Ｒへ導入されることになる。
【００３３】
燃焼室７６Ｌ，７６Ｒの頂部には点火プラグ７７Ｌ，７７Ｒが配設されている。上記燃焼室７６Ｌ，７６Ｒにおいて、点火プラグ７７Ｌ，７７Ｒの点火に伴う混合気の燃焼圧力はピストン５１Ｌ，５１Ｒに伝えられ、ピストン５１Ｌ，５１Ｒを往復運動させる。このピストン５１Ｌ，５１Ｒの往復運動はコネクティングロッド５２Ｌ，５２Ｒを介してクランクシャフトＣに伝えられ、回転運動に変換されてエンジンＥの出力として取り出されることになる。また、上記各カムシャフト３５Ｌ，３５Ｒ，３６Ｌ，３６Ｒは、クランクシャフトＣから取り出される動力がタイミングチェーンによって伝達されて回転駆動され、この回転によって上記各バルブ３２Ｌ，３２Ｒ，３４Ｌ，３４Ｒの開閉動作を行わせる。
【００３４】
上記燃焼後の混合気は排気ガスとなり、排気バルブ３４Ｌ，３４Ｒの開弁に伴い排気マニホールド８Ｌ，８Ｒに排出される。排気マニホールド８Ｌ，８Ｒには排気管８１Ｌ，８１Ｒがそれぞれ接続され、更に、排気管８１Ｌ，８１Ｒには三元触媒等を内蔵した触媒コンバータ８２Ｌ，８２Ｒが取り付けられている。この触媒コンバータ８２Ｌ，８２Ｒを排気ガスが通過することにより、排気ガス中に含まれる炭化水素（ＨＣ）、一酸化炭素（ＣＯ）、及び酸化窒素成分（ＮＯｘ）が浄化されるようになっている。また、上記排気管８１Ｌ，８１Ｒの下流端側は合流されてマフラ８３に接続されている。
【００３５】
−制御ブロックの説明−
以上のエンジンＥの運転状態はエンジンＥＣＵ（Ｅｌｅｃｔｒｏｎｉｃ  Ｃｏｎｔｒｏｌ  Ｕｎｉｔ）９によって制御される。このエンジンＥＣＵ９は、図３に示すように、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）９１、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）９２、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）９３及びバックアップＲＡＭ９４などを備えている。
【００３６】
ＲＯＭ９２は、各種制御プログラムや、それら各種制御プログラムを実行する際に参照されるマップ等が記憶されている。ＣＰＵ９１は、ＲＯＭ９２に記憶された各種制御プログラムやマップに基づいて演算処理を実行する。
【００３７】
ＲＡＭ９３は、ＣＰＵ９１での演算結果や各センサから入力されたデータ等を一時的に記憶するメモリであり、バックアップＲＡＭ９４は、エンジンＥの停止時にその保存すべきデータ等を記憶する不揮発性のメモリである。これらＲＯＭ９２、ＣＰＵ９１、ＲＡＭ９３及びバックアップＲＡＭ９４は、バス９７を介して互いに接続されるとともに、外部入力回路９５及び外部出力回路９６と接続されている。
【００３８】
外部入力回路９５には、水温センサ１０１、エアフローメータ１０２、吸気温センサ１０３、Ｏ2センサ１０４、スロットルポジションセンサ１０５、クランク角センサ１０６、カム角センサ１０７、ノックセンサ１０８、吸気圧センサ１０９、アクセル開度センサ１１０等が接続されている。一方、外部出力回路９６には、上記インジェクタ７５Ｌ，７５Ｒ、イグナイタ１１１及び、スロットルバルブ７２を駆動するスロットルモータ７２ａ等が接続されている。
【００３９】
上記水温センサ１０１は、シリンダブロック１に形成されているウォータジャケット１１内を流れる冷却水の温度を検出し、その冷却水温信号をエンジンＥＣＵ９に送信する。
【００４０】
エアフローメータ１０２は、吸入空気量を検出し、その吸入空気量信号をエンジンＥＣＵ９に送信する。
【００４１】
吸気温センサ１０３は、上記エアクリーナ７４の下流側に配設され、吸入空気温度を検出して、その吸気温信号をエンジンＥＣＵ９に送信する。
【００４２】
Ｏ2センサ１０４は、各触媒コンバータ８２Ｌ，８２Ｒの下流側に配設され、排気中の酸素濃度を検知するものであり、排気中の空燃比が理論空燃比にあるか否かを判定しその判定信号をエンジンＥＣＵ９に送信する。
【００４３】
スロットルポジションセンサ１０５は、スロットルバルブ７２の開度を検出するものであって、そのスロットル開度検出信号をエンジンＥＣＵ９に送信する。
【００４４】
クランク角センサ１０６は、クランクシャフトＣの近傍に配設されており、クランクシャフトＣの回転角（クランク角ＣＡ）及び回転速度（エンジン回転速度ＮＥ）を検出するものである。具体的に、このクランク角センサ１０６は、所定のクランク角（例えば３０°）毎にパルス信号を出力する。このクランク角センサ１０６によるクランク角の検出手法の一例としては、クランクシャフトＣと回転一体のロータ（ＮＥロータ）１０６ａの外周面の３０°おきに外歯を形成しておき、この外歯と対面して電磁ピックアップで成る上記クランク角センサ１０６を配置する。そして、クランクシャフトＣの回転に伴って外歯がクランク角センサ１０６の近傍を通過した際に、このクランク角センサ１０６が出力パルスを発生するようになっている。尚、このＮＥロータ１０６ａとしては、外周面に形成される外歯が１０°おきに形成されたものが適用される場合もある。この場合、ＥＣＵ９内で分周して３０°ＣＡ毎の出力パルスを発生する。
【００４５】
カム角センサ１０７は、吸気カムシャフト３５Ｌ，３５Ｒの近傍に配設されており、例えば第１番気筒の圧縮上死点（ＴＤＣ）に対応してパルス信号を出力することにより気筒判別センサとして使用される。つまり、このカム角センサ１０７は、吸気カムシャフト３５Ｌ，３５Ｒの１回転毎にパルス信号を出力する。このカム角センサ１０７によるカム角の検出手法の一例としては、吸気カムシャフト３５Ｌ，３５Ｒと回転一体のロータの外周面の１箇所に外歯を形成しておき、この外歯と対面して電磁ピックアップで成る上記カム角センサ１０７を配置し、吸気カムシャフト３５Ｌ，３５Ｒの回転に伴って外歯がカム角センサ１０７の近傍を通過した際に、このカム角センサ１０７が出力パルスを発生するようになっている。このロータはクランクシャフトＣの１／２の回転速度で回転するため、クランクシャフトＣが７２０°回転する毎に出力パルスを発生する。言い換えると、ある特定の気筒が同一行程（例えば第１番気筒が圧縮上死点に達した時点）となる度に出力パルスを発生する構成である。
【００４６】
ノックセンサ１０８は、各バンク２Ｌ，２Ｒそれぞれに配設され、シリンダブロック１に伝わるエンジンの振動を圧電素子式（ピエゾ素子式）または電磁式（マグネット、コイル）などによって検出する振動式センサであり、エンジンＥのノッキング発生を検知すると、その検知信号をエンジンＥＣＵ９に送信する。
【００４７】
吸気圧センサ１０９は、サージタンク７１に取り付けられており、吸気管７３内の圧力（吸気管内圧力）を検出し、その吸気圧信号をエンジンＥＣＵ９に送信する。
【００４８】
アクセル開度センサ１１０は、アクセルペダルの踏み込み量（アクセル開度）に応じた検出信号を出力するものであり、単位時間あたりのアクセル開度の変化量を認識することによってアクセルの操作速度を認識できるようになっている。
【００４９】
そして、エンジンＥＣＵ９は、上記各種センサ１０１〜１１０の出力信号に基づいて、イグナイタ１１１、インジェクタ７５Ｌ，７５Ｒ、スロットルモータ７２ａ等の各部を制御することにより、下記の点火時期制御を含むエンジンＥの各種制御を実行する。
【００５０】
その一例として、イグナイタ１１１，１１１による点火プラグ７７Ｌ，７７Ｒの点火タイミングの基本制御としては、点火タイミングがＭＢＴに近付くように点火タイミングの進角補正を行っていきながら、ノックセンサ１０８，１０８によってノッキングが検知された場合には、点火タイミングの遅角補正を行ってノッキングを解消するといった制御が行われる。また、インジェクタ７５Ｌ，７５Ｒの燃料噴射の制御としては、エンジン負荷やエンジン回転数等に基づいて目標空燃比を算出し、エアフローメータ１０２によって検出された吸入空気量に基づき、上記目標空燃比が得られるように燃料噴射量の制御（インジェクタ７５Ｌ，７５Ｒの開弁時間の制御）が行われる。また、スロットルモータ７２ａの駆動制御としては、運転者により操作されるアクセルペダルの開度等に基づき、要求されたエンジン出力を得るための吸入空気量となるスロットルバルブ７２の開度が得られるようにスロットルモータ７２ａの駆動量が制御される。
【００５１】
−点火時期制御動作−
次に、本実施形態の特徴とする点火時期制御動作について説明する。本実施形態における点火時期制御動作の基本的な動作としては、上述した如く、先ず、エンジン回転数及びエンジン負荷に基づいて基本点火時期ライン（図４におけるラインＡ）を設定する（基本点火時期ライン設定手段による基本点火時期ラインＡの設定動作）。また、同様にエンジン回転数及びエンジン負荷に基づいてＭＢＴライン（図４におけるラインＢ）を設定する。そして、上記進角側補正量ｂ及び遅角側補正量ａによって点火時期を制御（補正量変更手段による補正量の変更動作、実点火時期ライン設定手段による実点火時期ラインＯＵＴ（補正基準点ラインＣと平行なライン）の設定動作）する。そして、上記基本点火時期ラインＡに対する補正基準点ラインＣを設定し、この補正基準点ラインＣを基準にして上記点火時期を補正するようにしている。本実施形態の特徴は、この補正基準点ラインＣの設定動作にある。この補正基準点ラインＣの設定動作については後述する。
【００５２】
以下の説明では、ＭＢＴラインＢの算出動作、上記遅角側補正量ａの算出動作、学習補正量ｃの算出動作、点火時期の算出動作の順で説明する。尚、これら各動作はエンジンＥの運転開始後、例えば数十ｍｓｅｃ（例えば６４ｍｓｅｃ）毎に繰り返される。
【００５３】
（ＭＢＴラインの算出動作）
図５及び図６はＭＢＴラインＢの算出ルーチンを示している。また、図７はエンジン回転数とエンジン負荷とをパラメータとしてエンジンの運転状態を認識する学習マップを示している。この学習マップにおいて、エンジン回転数として、例えば「Ｉ」は１０００ｒｐｍ、「ＩＩ」は２０００ｒｐｍ、「ＩＩＩ」は３０００ｒｐｍ、「ＩＶ」は４０００ｒｐｍ、「Ｖ」は５０００ｒｐｍである。また、エンジン負荷として、例えば「ｉ」は５０ｋＰａ、「ｉｉ」は７０ｋＰａ、「ｉｉｉ」は９０ｋＰａである。つまり、この学習マップ上に設定されているエンジン回転数及びエンジン負荷により得られる１５ポイントに対して、現エンジン運転状態の位置（現エンジン運転状態を囲む４ポイントに対する配分）を求め、それに基づいてＭＢＴラインＢの算出動作を行うようにしている。例えば、エンジン回転数が１５００ｒｐｍで且つエンジン負荷が６０ｋＰａである場合、現エンジン運転状態は学習マップ上の点Ｘにあり、この点Ｘを囲む４ポイントとしては、ポイント「０」「１」「５」「６」となる。また、上記各値はこれに限るものではなく、任意に設定可能である。
【００５４】
図５及び図６に示すＭＢＴラインの算出ルーチンにおいて、ステップＳＴ１−１〜ＳＴ１−１２は、エンジン回転数に基づいた学習マップ上の現エンジン運転状態を求めるための変数を算出する手順である。また、ステップＳＴ１−１３〜ＳＴ１−２０は、エンジン負荷に基づいた学習マップ上の現エンジン運転状態を求めるための変数を算出する手順である。また、ステップＳＴ１−２１〜ＳＴ１−２３では、これら求めた変数を利用した補間計算により現エンジン運転状態でのＭＢＴを求め、それによりＭＢＴラインＢを決定している。以下、ＭＢＴラインＢの算出ルーチンについて説明する。
【００５５】
図５及び図６に示すように、ＭＢＴラインの算出動作にあっては、先ず、ステップＳＴ１−１において、上記クランク角センサ１０６の出力信号に基づいてエンジン回転数を検出し、この値を「α」とする。そして、ステップＳＴ１−２において、このエンジン回転数が図７における学習マップの運転状態「Ｖ」（例えばエンジン回転数５０００ｒｐｍ）以下であるか否かを判定する。この判定がＮｏである場合にはステップＳＴ１−３に移って、「α」に「Ｖ」を代入する。つまり、エンジン回転数が「Ｖ」を超えている場合には、以下の制御動作では、エンジン回転数を「Ｖ」として扱うこととする。
【００５６】
一方、ステップＳＴ１−４において、このエンジン回転数が図７における学習マップの運転状態「Ｉ」（例えばエンジン回転数１０００ｒｐｍ）以上であるか否かを判定する。この判定がＮｏである場合にはステップＳＴ１−５に移って、「α」に「Ｉ」を代入する。つまり、エンジン回転数が「Ｉ」未満である場合には、以下の制御動作では、エンジン回転数を「Ｉ」として扱うこととする。
【００５７】
その後、ステップＳＴ１−６において、このエンジン回転数が図７における学習マップの運転状態「ＩＩ」（例えばエンジン回転数２０００ｒｐｍ）以上であるか否かを判定する。この判定がＮｏである場合にはステップＳＴ１−７に移る。つまり、エンジン回転数が「Ｉ」以上で且つ「ＩＩ」未満である場合にはステップＳＴ１−７に移る。また、上記ステップＳＴ１−５で「α」が「Ｉ」に設定された場合にもステップＳＴ１−７に移ることになる。
【００５８】
また、ステップＳＴ１−６の判定がＹｅｓである場合にはステップＳＴ１−８に移る。このステップＳＴ１−８では、エンジン回転数が図７における学習マップの運転状態「ＩＩＩ」（例えばエンジン回転数３０００ｒｐｍ）以上であるか否かを判定する。この判定がＮｏである場合にはステップＳＴ１−９に移る。つまり、エンジン回転数が「ＩＩ」以上で且つ「ＩＩＩ」未満である場合にはステップＳＴ１−９に移る。
【００５９】
更に、ステップＳＴ１−８の判定がＹｅｓである場合にはステップＳＴ１−１０に移る。このステップＳＴ１−１０では、エンジン回転数が図７における学習マップの運転状態「ＩＶ」（例えばエンジン回転数４０００ｒｐｍ）以上であるか否かを判定する。この判定がＮｏである場合にはステップＳＴ１−１１に移る。また、この判定がＹｅｓである場合にはステップＳＴ１−１２に移る。つまり、エンジン回転数が「ＩＩＩ」以上で且つ「ＩＶ」未満である場合にはステップＳＴ１−１１に移り、エンジン回転数が「ＩＶ」以上で且つ「Ｖ」未満である場合にはステップＳＴ１−１２に移る。また、上記ステップＳＴ１−３で「α」が「Ｖ」に設定された場合にもステップＳＴ１−１２に移ることになる。
【００６０】
ステップＳＴ１−７、ＳＴ１−９、ＳＴ１−１１、ＳＴ１−１２においては、「α」、「β」、「γ」の値として以下のように設定される。
【００６１】
ステップＳＴ１−７では、「α」を「α−Ｉ」により求め、「β」を「０」とし、「γ」を「ＩＩ−Ｉ」により求める。上述した数値の場合には、「α」は、現エンジン回転数から「１０００」を減じた値となり、また、「γ」は「１０００」となる。ステップＳＴ１−９では、「α」を「α−ＩＩ」により求め、「β」を「１」とし、「γ」を「ＩＩＩ−ＩＩ」により求める。上述した数値の場合には、「α」は、現エンジン回転数から「２０００」を減じた値となり、また、「γ」は「１０００」となる。ステップＳＴ１−１１では、「α」を「α−ＩＩＩ」により求め、「β」を「２」とし、「γ」を「ＩＶ−ＩＩＩ」により求める。上述した数値の場合には、「α」は、現エンジン回転数から「３０００」を減じた値となり、また、「γ」は「１０００」となる。ステップＳＴ１−１２では、「α」を「α−ＩＶ」により求め、「β」を「３」とし、「γ」を「Ｖ−ＩＶ」により求める。上述した数値の場合には、「α」は、現エンジン回転数から「４０００」を減じた値となり、また、「γ」は「１０００」となる。
【００６２】
以上のようにして、エンジン回転数に基づいた「α」、「β」、「γ」の各値を求める。
【００６３】
次に、エンジン負荷に基づいた「θ」、「δ」、「μ」の各値を求める。図６に示すように、先ず、ステップＳＴ１−１３において、上記エンジン回転数やアクセル開度センサ１１０により検出されるアクセル開度等からエンジン負荷を求め、この値を「θ」とする。そして、ステップＳＴ１−１４において、このエンジン負荷が図７における学習マップの運転状態「ｉ」（例えばエンジン負荷５０ｋＰａ）以上であるか否かを判定する。この判定がＮｏである場合にはステップＳＴ１−１５に移って、「θ」に「ｉ」を代入する。つまり、エンジン負荷が「ｉ」未満である場合には、以下の制御動作では、エンジン負荷を「ｉ」として扱うこととする。
【００６４】
一方、ステップＳＴ１−１４でＹｅｓに判定されると、ステップＳＴ１−１６において、このエンジン負荷が図７における学習マップの運転状態「ｉｉｉ」（例えばエンジン負荷９０ｋＰａ）以下であるか否かを判定する。この判定がＮｏである場合にはステップＳＴ１−１７に移って、「θ」に「ｉｉｉ」を代入する。つまり、エンジン負荷が「ｉｉｉ」を超えている場合には、以下の制御動作では、エンジン負荷を「ｉｉｉ」として扱うこととする。
【００６５】
その後、ステップＳＴ１−１８において、このエンジン負荷が図７における学習マップの運転状態「ｉｉ」（例えばエンジン負荷７０ｋＰａ）以上であるか否かを判定する。この判定がＮｏである場合にはステップＳＴ１−１９に移る。また、この判定がＹｅｓである場合にはステップＳＴ１−２０に移る。つまり、エンジン負荷が「ｉ」以上で且つ「ｉｉ」未満である場合にはステップＳＴ１−１９に移り、エンジン負荷が「ｉｉ」以上で且つ「ｉｉｉ」未満である場合にはステップＳＴ１−２０に移る。また、上記ステップＳＴ１−１５で「θ」が「ｉ」に設定された場合にはステップＳＴ１−１９に移ることになり、上記ステップＳＴ１−１７で「θ」が「ｉｉｉ」に設定された場合にはステップＳＴ１−２０に移ることになる。
【００６６】
ステップＳＴ１−１９、ＳＴ１−２０においては、「θ」、「δ」、「μ」の値として以下のように設定される。
【００６７】
ステップＳＴ１−１９では、「θ」を「θ−ｉ」により求め、「δ」を「０」とし、「μ」を「ｉｉ−ｉ」により求める。上述した数値の場合には、「θ」は、現エンジン負荷から「５０」を減じた値となり、また、「μ」は「２０」となる。ステップＳＴ１−２０では、「θ」を「θ−ｉｉ」により求め、「δ」を「１」とし、「μ」を「ｉｉｉ−ｉｉ」により求める。上述した数値の場合には、「θ」は、現エンジン負荷から「７０」を減じた値となり、また、「μ」は「２０」となる。
【００６８】
以上のようにして、エンジン負荷に基づいた「θ」、「δ」、「μ」の各値を求める。
【００６９】
その後、ステップＳＴ１−２１において、以下の演算式（１）〜（４）により、「ε」、「φ」、「τ」、「η」を求める。
【００７０】
ε←β＋５δ        …（１）
φ←β＋５δ＋１    …（２）
τ←β＋５δ＋５    …（３）
η←β＋５δ＋６    …（４）
このようにして、「ε」、「φ」、「τ」、「η」を求めた後、ステップＳＴ１−２２において、以下の演算式（５）による補間計算により、「β」を求め、この「β」をＭＢＴライン上の点「Ｂ」として設定する（ステップＳＴ１−２３）。
【００７１】
β＝｛（η−τ）×α／γ＋τ−（φ−ε）×α／γ＋ε｝×θ／μ
＋（φ−ε）×α／γ＋ε      …（５）
（遅角側補正量ａの算出動作）
図８は遅角側補正量ａの算出ルーチンを示している。この図８に示すように、先ず、ステップＳＴ２−１において、上記水温センサ１０１によって検出された冷却水温度が８０℃以上であるか否かを判定する。この判定がＹｅｓであるときにはステップＳＴ２−２において、上記エンジン負荷が５０ｋＰａ以上であるか否かを判定する。この判定がＹｅｓであるときにはステップＳＴ２−３において、上記エンジン回転数が８００ｒｐｍ以上であるか否かを判定する。つまり、これらステップＳＴ２−１〜ＳＴ２−３の全てがＹｅｓ判定されたことを条件にノッキングの発生に伴う遅角側補正量ａの変更動作を実行するようになっている。また、上記ステップＳＴ２−１〜ＳＴ２−３の何れかでＮｏ判定された場合には、例えばエンジンの始動直後（例えばアイドリング運転時）であるとして、遅角側補正量ａの変更動作を実行することなく、この遅角側補正量ａを１°ＣＡ（Ｃｒａｎｋ  Ａｎｇｌｅ）に固定する（ステップＳＴ２−４）。
【００７２】
上記ステップＳＴ２−３でＹｅｓ判定されると、ステップＳＴ２−５に移り、上記ノックセンサ１０８からの信号に基づいてノッキングが発生したか否かを判定する。ノッキングが発生してＹｅｓに判定されると、ステップＳＴ２−６において、現在の遅角側補正量ａに対して遅角量１°ＣＡを加算する。つまり、ノッキングの発生を解消するべく点火時期を遅角させるように遅角側補正量ａを大きくする。
【００７３】
一方、上記ステップＳＴ２−５において、ノッキングが発生しておらずＮｏに判定されると、ステップＳＴ２−７において、予めカウントが開始されていたタイマのカウント値が１ｓｅｃに達したか否か（タイマがリセットされた後、ノッキングが発生していない状態が１ｓｅｃ継続したか否か）が判定される。そして、タイマのカウント値が１ｓｅｃに達すると、つまり、ノッキングが発生していない状況が１ｓｅｃ継続すると、ステップＳＴ２−８においてタイマをリセットすると共に、ステップＳＴ２−９において現在の遅角側補正量ａに対して遅角量０．５°ＣＡを減算する。つまり、点火時期をＭＢＴに近付けるべく点火時期を進角させるように遅角側補正量ａを小さくする。
【００７４】
このようにしてノッキングの発生に応じて遅角側補正量ａを増減させている状況で、ステップＳＴ２−１０において遅角側補正量ａが「０」未満になるような状況では（ステップＳＴ２−１０でＹｅｓ判定された際には）、ステップＳＴ２−１１において遅角側補正量ａを「０」に設定する。つまり、遅角側補正量ａが負の値にならないようにしている。以上のような動作により、エンジンＥのノッキング発生状態に応じて遅角側補正量ａが変更されていく。
【００７５】
（学習補正量ｃの算出動作）
次に、本実施形態において特徴とする制御動作である学習補正量ｃ（図４に示すように、基本点火時期ラインＡに対する補正基準点ラインＣを設定するための補正量）の算出動作について説明する。
【００７６】
図９は学習補正量ｃの算出ルーチンを示している。この図９に示すように、先ず、ステップＳＴ３−１において基本点火時期ラインＡから現エンジン運転状態における基本点火時期Ａ１を、ステップＳＴ３−２においてＭＢＴラインＢから現エンジン運転状態におけるＭＢＴの値Ｂ１を求める。
【００７７】
その後、ステップＳＴ３−３において、現在の上記遅角側補正量ａ（上記図８に示す遅角側補正量ａの算出ルーチンで求められた値）が３°ＣＡ以下であるか否かを判定する。この判定がＮｏである場合にはステップＳＴ３−４に移り、現在の進角側補正量ｂに対して１°ＣＡだけ減算し、これを新たな進角側補正量ｂとする。また、ステップＳＴ３−５において、現在の遅角側補正量ａに対して１°ＣＡだけ減算し、これを新たな遅角側補正量ａとする。この動作は、現時点では、遅角側補正量ａが比較的大きい値（「３」を超えている値）であり、つまり、進角側補正量ｂが大きすぎるために遅角側補正量ａを大きな値とせねばノッキングを解消できない状況となっているため、進角側補正量ｂを小さくするための動作である（ステップＳＴ３−４）。また、このように進角側補正量ｂを小さくした場合、遅角側補正量ａを大きな値のまま維持しておくと遅角側への補正量が大きくなりすぎる可能性があるため、進角側補正量ｂを小さくするのに伴って遅角側補正量ａも同量だけ小さくして、現時点での点火時期を維持できるようにしている（ステップＳＴ３−５）。
【００７８】
一方、上記ステップＳＴ３−３においてＹｅｓに判定された場合にはステップＳＴ３−６に移り、現在の上記遅角側補正量ａが０°ＣＡであるか否かを判定する。この判定がＮｏである場合にはステップＳＴ３−８に移る一方、この判定がＹｅｓである場合には、ステップＳＴ３−７に移って、現在の進角側補正量ｂに対して１°ＣＡだけ加算し、これを新たな進角側補正量ｂとする。この動作は、現時点では、遅角側補正量ａが「０」となっており、つまり、進角側補正量ｂで進角させてもノッキングは発生していない状況であり、更に進角させることができる可能性があるため、進角側補正量ｂを増大させて点火時期を進角させる動作である。
【００７９】
このようにして遅角側補正量ａ及び進角側補正量ｂを調整している状態で、ステップＳＴ３−８では、予めカウントが開始されていたタイマのカウント値が６４ｍｓｅｃに達したか否かが判定される。つまり、ステップＳＴ３−９以降の動作は６４ｍｓｅｃ毎に実行される。
【００８０】
このタイマのカウント値が６４ｍｓｅｃに達してＹｅｓに判定された場合には、ステップＳＴ３−９に移り、現在の進角側補正量ｂと、過去に本算出ルーチンにおいて設定された１５回分の進角側補正量ｂとの平均値を進角側補正量平均値ｂ’として算出する。つまり、進角側補正量ｂの「なまし処理」を行う。
【００８１】
その後、ステップＳＴ３−１０において、上記進角側補正量平均値ｂ’から現在の進角側補正量ｂを減算した値が１°ＣＡ以上であるか否かを判定する。この判定がＹｅｓである場合にはステップＳＴ３−１１に移り、この両者の差を修正値として求める。
【００８２】
一方、ステップＳＴ３−１０においてＮｏ判定された場合には、ステップＳＴ３−１２に移り、上記現在の進角側補正量ｂから進角側補正量平均値ｂ’を減算した値が１°ＣＡ以上であるか否かを判定する。この判定がＹｅｓである場合にもステップＳＴ３−１１に移り、この両者の差を修正値として求める。つまり、上記「なまし処理」により得られた進角側補正量平均値ｂ’に対して現在の進角側補正量ｂが所定量（１°ＣＡ）以上乖離している場合には所定の修正量をもって後述するステップＳＴ３−１３の演算処理に反映させるようにしている。
【００８３】
このようにして修正値を求めた後、ステップＳＴ３−１３において、上記修正量を現エンジン運転状態を囲む上記学習マップ上の４点に振り分ける以下の逆補間計算（６）〜（９）により、「ε」、「φ」、「τ」、「η」を求める。
【００８４】
ε＝ε＋（２°ＣＡ×α／γ×θ／μ）                  …（６）
φ＝φ＋｛２°ＣＡ×（γ−α）／γ×θ／μ｝          …（７）
τ＝τ＋｛２°ＣＡ×α／γ×（μ−θ）／μ｝          …（８）
η＝η＋｛２°ＣＡ×（γ−α）／γ×（μ−θ）／μ｝  …（９）
尚、これら各逆補間計算で使用される各変数は、上記図５及び図６で示したＭＢＴラインＢの算出ルーチンにおけるステップＳＴ１−１〜ＳＴ１−２１の動作と同様にして求められた値である。
【００８５】
つまり、この逆補間計算では、現エンジン運転状態を囲む上記学習マップ上の４点のうち、現エンジン運転状態に近いポイント程、後述の演算式（１０）により求められる学習補正量ｃの影響度合いを大きくするように配分されることになる。
【００８６】
このようにして、「ε」、「φ」、「τ」、「η」を求めた後、ステップＳＴ３−１４において、以下の演算式（１０）により学習補正量ｃ（本発明でいう学習値としての最適値）を求める（補正基準点変更手段による学習値の算出動作）。
【００８７】
ｃ＝｛（η−τ）×α／γ＋τ−（φ−ε）×α／γ＋ε｝×θ／μ
＋（φ−ε）×α／γ＋ε      …（１０）
このようにして、求められた学習補正量ｃだけ、上記基本点火時期ラインＡから遅角側に移行させた補正基準点ラインＣ上の点（例えば図４におけるポイントＣ１：補正基準点）が、上記進角側補正量ｂの基準点とされる。つまり、この補正基準点Ｃ１を基準にして、後述する進角側補正量ｂ及び遅角側補正量ａによって点火時期を制御することになる。
【００８８】
（点火時期の算出動作）
次に、上記動作によって求められた学習補正量ｃに基づいた点火時期の算出動作について図１０のフローチャートに沿って説明する。
【００８９】
先ず、ステップＳＴ４−１において、以下の演算式（１１）により、点火時期Ａ１を求める。つまり、上記基本点火時期ラインＡから得られた基本点火時期Ａ１に対して、上記各算出動作（補正量変更手段による補正量の変更動作）により得られた値ｃ（学習補正量），ａ（遅角側補正量）及びｂ（進角側補正量）を反映した点火時期を新たに設定する点火時期Ａ１として算出する（図４参照）。
【００９０】
Ａ１＝Ａ１−ｃ＋ｂ−ａ          …（１１）
そして、ステップＳＴ４−２において、この算出された点火時期Ａ１がＢＭＴライン上の点Ｂ１以下、つまり、このＭＢＴラインＢ上または、このＭＢＴラインＢよりも遅角側であるか否かを判定する。
【００９１】
この判定がＹｅｓである場合には、ステップＳＴ４−３に移り、上記算出された点火時期Ａ１をそのまま今回の点火時期として設定する。
【００９２】
一方、ステップＳＴ４−２でＮｏに判定された場合には、ステップＳＴ４−４に移り、上記ＢＭＴラインＢ上の点ｂ１を点火時期Ａ１として設定（ＢＭＴラインＢによるガード）した後、ステップＳＴ４−５において上記遅角側補正量ａとしては「−１°ＣＡ」に設定し、ステップＳＴ４−５において今回の点火時期「Ａ１（＝ｂ１）」を設定する。
【００９３】
以上のような点火時期の設定動作により、基本点火時期ラインＡに対する補正の割合を、エンジンＥの個体差を反映したものとして得ることが可能になる。例えば、シリンダヘッドの加工誤差やシリンダヘッドガスケットの厚さ寸法の誤差等による圧縮比のバラツキが生じていたとしても、それを反映した適切な点火時期で点火栓を点火させることが可能になる。
【００９４】
＜変形例＞
次に、本発明の変形例について説明する。本変形例は、冷却水温度や吸気温度等に基づいた温度補正係数を求め、この温度補正係数を点火時期の設定動作に反映させるようにしたものである。その他の構成及び制御動作は上述した実施形態のものと同様であるので、ここでは、温度補正係数の算出動作（図１１）及び点火時期の算出動作（図１４：上記実施形態の図１０のフローチャートに相当）についてのみ説明する。
【００９５】
先ず、図１１を用いて温度補正係数の算出動作について説明する。先ず、ステップＳＴ５−１において、エンジン運転状態やエンジン負荷から燃焼室の安定温度を算出し、その値を「ｔ１」とする。その後、ステップＳＴ５−２において、下記の演算式（１２）により、補正温度値Ｔを算出する。
【００９６】
Ｔ←Ｔ＋（ｔ１−Ｔ）／６４            …（１２）
この補正温度値は、上記エンジン運転状態やエンジン負荷から求められる燃焼室温度に対して実際の燃焼室温度が異なっている可能性のあることを考慮した値である。つまり、図１２に示すように、エンジン負荷が急上昇した場合、上記算出される燃焼室の安定温度「ｔ１」に対して実際の燃焼室温度Ｔの上昇は緩やかであり、未だ温度「ｔ１」に達していない可能性がある。このため、上記演算式（１２）によって補正温度値Ｔを算出するようにしている。
【００９７】
その後、ステップＳＴ５−３において、上記水温センサ１０１によって検出された冷却水温度から９０℃を減算した値を「ｔ２」として求め、ステップＳＴ５−４において、上記吸気温センサ１０３によって検出された吸気温度から５０℃を減算した値を「ｔ３」として求める。
【００９８】
そして、ステップＳＴ５−５において、上記「ｔ２」は「０」以上の値であるか、つまり、冷却水温度は９０℃以上であるか否かを判定し、この判定がＮｏである場合にはステップＳＴ５−６において「ｔ２」を「０」に設定する。一方、ステップＳＴ５−５の判定がＹｅｓである場合にはステップＳＴ５−７において、上記「ｔ３」は「０」以上の値であるか、つまり、吸気温度は５０℃以上であるか否かを判定し、この判定がＮｏである場合にはステップＳＴ５−８において「ｔ３」を「０」に設定する。一方、ステップＳＴ５−７の判定がＹｅｓである場合にはステップＳＴ５−９に移り、以下の演算式（１３）により、ノッキングの発生のし易さの指数となるノッキング係数「ｎｋ」を算出する。
【００９９】
ｎｋ←Ｔ＋ｔ２×０．５＋ｔ３×０．４            …（１３）
このようにしてノッキング係数「ｎｋ」を算出した後、ステップＳＴ５−１０に移り、このノッキング係数「ｎｋ」に基づいて温度補正係数「Ｄ」を取得する。この温度補正係数Ｄの取得動作の一例としては、上記ＲＯＭ９２に、ノッキング係数「ｎｋ」から温度補正係数Ｄを求める温度補正係数マップを記憶させておき、この温度補正係数マップから温度補正係数Ｄを取得する。図１３は、上記ノッキング係数ｎｋと温度補正係数Ｄとの関係の一例を示す図である。
【０１００】
次に、上記温度補正係数Ｄを使用する点火時期の算出動作について図１４のフローチャートに沿って説明する。
【０１０１】
先ず、ステップＳＴ６−１において、以下の演算式（１４）により、点火時期「Ａ１」を求める。
【０１０２】
Ａ１＝Ａ１−（ｃ×Ｄ）＋ｂ−ａ          …（１４）
そして、ステップＳＴ６−２において、この算出された点火時期「Ａ１」がＢＭＴライン上の点「Ｂ１」以下、つまり、このＭＢＴライン上または、このＭＢＴラインよりも遅角側であるか否かを判定する。
【０１０３】
この判定がＹｅｓである場合には、ステップＳＴ６−３に移り、上記算出された点火時期「Ａ１」をそのまま今回の点火時期として設定する。
【０１０４】
一方、ステップＳＴ６−２でＮｏに判定された場合には、ステップＳＴ６−４に移り、上記ＢＭＴライン上の点「Ｂ１」を点火時期「Ａ１」として設定した後、ステップＳＴ６−５において上記遅角側補正量ａとしては「−１°ＣＡ」に設定し、ステップＳＴ６−５において今回の点火時期「Ａ１（＝Ｂ１）」を設定する。
【０１０５】
以上のような点火時期の設定動作により、本変形例においても、基本点火時期ラインＡに対する補正の割合を、エンジンＥの個体差を反映したものとして得ることが可能になる。例えば、シリンダヘッドの加工誤差やシリンダヘッドガスケットの厚さ寸法の誤差等による圧縮比のバラツキが生じていたとしても、それを反映した適切な点火時期で点火栓を点火させることが可能になる。
【０１０６】
−その他の実施形態−
以上説明した実施形態及び変形例では、自動車用Ｖ型６気筒エンジンに本発明を適用した場合について説明した。本発明はこれに限らず、種々のエンジンに対して適用可能である。
【０１０７】
また、上述した実施形態では、基本点火時期ラインＡに対して補正基準点ラインＣが遅角側に設定される場合、つまり、上記学習補正量ｃによって遅角側に補正される場合について説明したが、これに限らず、基本点火時期ラインＡに対して補正基準点ラインＣが進角側に設定される場合、つまり、上記学習補正量ｃによって進角側に補正される場合もある。
【０１０８】
また、上述した実施形態では、学習補正量ｃの算出動作（図９のフローチャート）において、ステップＳＴ３−１０及びステップＳＴ３−１２で共にＮｏ判定された場合、つまり、進角側補正量平均値ｂ’に対する現在の進角側補正量ｂの乖離幅が１°ＣＡ未満である場合には、学習補正量ｃの更新動作を行うことなく、前回の演算によって得られた学習補正量ｃを使用するようにしていた。本発明はこれに限らず、進角側補正量平均値ｂ’に対する現在の進角側補正量ｂの乖離幅が所定値（例えば１°ＣＡ）未満である場合には、予め設定された固定値としての学習補正量ｃ（例えば０．５°ＣＡ）を使用するようにしてもよい。
【図面の簡単な説明】
【０１０９】
【図１】実施形態に係るＶ型エンジンをクランクシャフトの軸心に沿った方向から見たエンジン内部の概略構成を示す図である。
【図２】エンジン、吸排気系及び制御系の概略を示すシステム構成図である。
【図３】エンジンの制御系を示すブロック図である。
【図４】エンジン負荷と点火時期との関係を示す図である。
【図５】ＭＢＴライン算出ルーチンの一部を示すフローチャート図である。
【図６】ＭＢＴライン算出ルーチンの他の一部を示すフローチャート図である。
【図７】学習マップを示す図である。
【図８】遅角側補正量算出ルーチンを示すフローチャート図である。
【図９】学習補正量算出ルーチンを示すフローチャート図である。
【図１０】学習補正量に基づいた点火時期の算出動作を示すフローチャート図である。
【図１１】変形例における温度補正係数算出ルーチンを示すフローチャート図である。
【図１２】エンジン負荷の変化と温度との関係を示す図である。
【図１３】ノッキング係数と温度補正係数との関係を示す図である。
【図１４】変形例において学習補正量に基づいた点火時期の算出動作を示すフローチャート図である。
【図１５】従来例におけるエンジン負荷と点火時期との関係を示す図である。
【符号の説明】
【０１１０】
７７Ｌ，７７Ｒ  点火プラグ（点火栓）
Ｅ        エンジン（内燃機関）
Ａ        基本点火時期ライン
Ｃ        補正基準点ライン
Ｃ１      補正基準点
ＯＵＴ    実点火時期ライン
ａ        遅角側補正量
ｂ        進角側補正量
ｃ        学習補正量（学習値）
【図１】
2008051016.tif 000003
【図２】
2008051016.tif 000004
【図３】
2008051016.tif 000005
【図４】
2008051016.tif 000006
【図５】
2008051016.tif 000007
【図６】
2008051016.tif 000008
【図７】
2008051016.tif 000009
【図８】
2008051016.tif 000010
【図９】
2008051016.tif 000011
【図１０】
2008051016.tif 000012
【図１１】
2008051016.tif 000013
【図１２】
2008051016.tif 000014
【図１３】
2008051016.tif 000015
【図１４】
2008051016.tif 000016
【図１５】
2008051016.tif 000017