(57)【特許請求の範囲】
【請求項１】
ノックの有無に応じた点火時期補正量を学習し、この学習した点火時期補正量に基づいて点火時期を制御すると共に、加速を判断し、加速時は所定の点火回数の間、上記点火時期補正量の学習を禁止するエンジンの点火時期学習制御方法において、
自動変速機搭載車のエンジンの点火時期学習制御であって、スロットル開度の変化により加速度合いを示す加速判定レベルを設定し、
加速判定レベルと設定値との比較により加速が大きいと判断されるとき、点火時期補正量の学習を禁止し、
且つ、このときの学習禁止期間を定める点火回数を、車速が設定値以上の高車速の場合は、車速が設定値未満の低車速の場合に比べ、大きく設定することを特徴とするエンジンの点火時期学習制御方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、ノック発生の有無に応じて点火時期を学習制御するエンジンの点火時期学習制御方法に関する。
【０００２】
【従来の技術】
最近では、エンジンの異常燃焼によるノッキングを検出し、点火時期を最適に制御する技術が広く採用されている。
【０００３】
この場合、エンジンのノックは、混合気の異常燃焼による圧力振動を、シリンダヘッドあるいはシリンダブロックに取付けた加速度センサなどにより機械的振動として検出するものが多く、エンジン高回転時などにはノックによる振動成分とエンジン自体の振動成分との区別が困難となる。
【０００４】
従って、ノック検出の困難な運転領域では、ノック検出の可能な運転領域で学習した学習値により点火時期の補正を行なうようにしており、例えば、特開昭６０−２７７８２号公報には、エンジン（機関）の状態が急変する過渡時に学習遅角量の更新を停止し、学習遅角量が異常に大きくなることによる不必要なトルクの低下を防止する技術が開示されている。
【０００５】
【発明が解決しようとする課題】
しかしながら、加速時には、車輌の変速機のシフト位置（シフトレンジ）によってエンジンの運転状態が左右されるため、加速が比較的緩やかであっても、ノック発生を正確に検出することが困難で、適切な学習ができない場合がある。また、ノック発生期間も一定でないため、一義的に点火時期学習を停止すると制御性の悪化を招くおそれがある。
【０００６】
本発明は上記事情に鑑みてなされたもので、加速時に、エンジンの状態に応じた期間だけ点火時期学習を停止することにより制御性の悪化を防止し、安定した点火時期制御を行なうことのできるエンジンの点火時期学習制御方法を提供することを目的としている。
【０００７】
【課題を解決するための手段】
上記目的を達成するため、本発明は、ノックの有無に応じた点火時期補正量を学習し、この学習した点火時期補正量に基づいて点火時期を制御すると共に、加速を判断し、加速時は所定の点火回数の間、上記点火時期補正量の学習を禁止するエンジンの点火時期学習制御方法において、自動変速機搭載車のエンジンの点火時期学習制御であって、スロットル開度の変化により加速度合いを示す加速判定レベルを設定し、加速判定レベルと設定値との比較により加速が大きいと判断されるとき、点火時期補正量の学習を禁止し、且つ、このときの学習禁止期間を定める点火回数を、車速が設定値以上の高車速の場合は、車速が設定値未満の低車速の場合に比べ、大きく設定することを特徴とする。
【０００９】
【作用】
本発明は、自動変速機搭載車のエンジンの点火時期学習制御において、加速時に所定の点火回数の間、点火時期補正量の学習を禁止するに際し、スロットル開度の変化により加速度合いを示す加速判定レベルを設定する。そして、加速判定レベルと設定値との比較により加速が大きいと判断されるとき、点火時期補正量の学習を禁止すると共に、このときの学習禁止期間を定める点火回数を、車速が設定値以上の高車速の場合は、車速が設定値未満の低車速の場合に比べ、大きく設定する。
【００１１】
【実施例】
以下、図面を参照して本発明の実施例を説明する。図面は本発明の一実施例を示し、図１は全体補正係数及び部分補正点火時期学習手順のフローチャート（その１）、図２は全体補正係数及び部分補正点火時期学習手順のフローチャート（その２）、図３は全体補正係数及び部分補正点火時期学習手順のフローチャート（その３）、図４は加速判定手順のフローチャート（その１）、図５は加速判定手順のフローチャート（その２）、図６は気筒判別・エンジン回転数算出手順のフローチャート、図７は点火時期設定手順のフローチャート（その１）、図８は点火時期設定手順のフローチャート（その２）、図９は通電・点火制御手順におけるθ２割込みのフローチャート、図１０は通電・点火制御手順におけるθ３割込みのフローチャート、図１１は全体補正係数学習のサブルーチンを示すフローチャート（その１）、図１２は全体補正係数学習のサブルーチンを示すフローチャート（その２）、図１３は全体補正係数学習のサブルーチンを示すフローチャート（その３）、図１４は部分補正点火時期学習のサブルーチンを示すフローチャート（その１）、図１５は部分補正点火時期学習のサブルーチンを示すフローチャート（その２）、図１６は部分補正点火時期学習のサブルーチンを示すフローチャート（その３）、図１７は部分補正点火時期学習のサブルーチンを示すフローチャート（その４）、図１８は部分補正テーブルの概念図、図１９はエンジン制御系の概略図、図２０はクランクロータとクランク角センサの正面図、図２１はカムロータとカム角センサの正面図、図２２は制御装置の回路構成図、図２３は点火タイミングを示すタイムチャートである。
【００１２】
（エンジン制御系の構成）
図１９において、符号１はエンジン本体であり、図においては水平対向４気筒型エンジンを示す。このエンジン本体１のシリンダヘッド２に形成された各吸気ポート２ａにインテークマニホルド３が連通され、このインテークマニホルド３にエアチャンバ４を介してスロットルチャンバ５が連通され、このスロットルチャンバ５上流側に吸気管６を介してエアクリーナ７が取付けられている。
【００１３】
また、上記吸気管６の上記エアクリーナ７の直下流に吸入空気量センサ（図においては、ホットワイヤ式エアフローメータ）８が介装され、さらに、上記スロットルチャンバ５に設けられたスロットルバルブ５ａに、スロットル開度センサ９ａとスロットルバルブ全閉を検出するアイドルスイッチ９ｂとが連設されている。
【００１４】
さらに、上記スロットルバルブ５ａの上流側と下流側とを連通するバイパス通路１０に、アイドルスピードコントロールバルブ（ＩＳＣＶ）１１が介装され、上記インテークマニホルド３の各気筒の各吸気ポート２ａ直上流側に、インジェクタ１２が臨まされている。さらに、上記シリンダヘッド２の各気筒毎に、その先端を燃焼室に露呈する点火プラグ１３ａが取付けられ、この点火プラグ１３ａに連設される点火コイル１３ｂにイグナイタ１４が接続されている。
【００１５】
上記インジェクタ１２は、燃料供給路１５を介して燃料タンク１６に連通されており、この燃料タンク１６内にはインタンク式の燃料ポンプ１７が設けられている。この燃料ポンプ１７からの燃料は、上記燃料供給路１５に介装された燃料フィルタ１８を経て上記インジェクタ１２、プレッシャレギュレータ１９に圧送され、このプレッシャレギュレータ１９から上記燃料タンク１６にリターンされて所定の圧力に調圧される。
【００１６】
また、上記エンジン本体１のシリンダブロック１ａにノックセンサ２０が取付けられるとともに、このシリンダブロック１ａに形成された冷却水通路（図示せず）に冷却水温センサ２１が臨まされ、さらに、上記シリンダヘッド２の排気ポート２ｂに連通するエグゾーストマニホルド２２の集合部に、Ｏ２  センサ２３が臨まされている。尚、符号２４は触媒コンバータである。
【００１７】
また、上記シリンダブロック１ａに支承されたクランクシャフト１ｂに、クランクロータ２５が軸着され、このクランクロータ２５の外周に、所定のクランク角に対応する突起（あるいはスリット）を検出する電磁ピックアップなどからなるクランク角センサ２６が対設され、さらに、上記シリンダヘッド２のカムシャフト１ｃに連設されたカムロータ２７に、電磁ピックアップなどからなる気筒判別用のカム角センサ２８が対設されている。
【００１８】
上記クランクロータ２５は、図２０に示すように、その外周に突起２５ａ，２５ｂ，２５ｃが形成され、これらの各突起２５ａ，２５ｂ，２５ｃが、各気筒（＃１，＃２と＃３，＃４）  の圧縮上死点前（ＢＴＤＣ）θ１，θ２，θ３  の位置（例えば、θ１  ＝９７°，θ２  ＝６５°，θ３  ＝１０°）に形成されている。
【００１９】
すなわち、突起２５ａ，２５ｂ間の通過時間からエンジン回転数ＮＥが算出され、突起２５ｂ、突起２５ｃが、それぞれ、点火時期及び燃料噴射タイミング設定の際の基準クランク角、固定点火時期を示す基準クランク角となる。
【００２０】
また、上記カムロータ２７の外周には、図２１に示すように、気筒判別用の突起２７ａ，２７ｂ，２７ｃが形成され、例えば、突起２７ａが＃３，＃４の圧縮上死点後（ＡＴＤＣ）θ４  の位置（例えばθ４  ＝２０°）に形成され、突起２７ｂが３個の突起で構成されて最初の突起が＃１気筒のＡＴＤＣθ５  の位置（例えばθ５  ＝５°）に形成されている。さらに、突起２７ｃが２個の突起で形成され、最初の突起が＃２気筒のＡＴＤＣθ６  の位置（例えばθ６  ＝２０°）に形成されている。
【００２１】
尚、上記クランク角センサ２６、カム角センサ２８は、電磁ピックアップなどの磁気センサに限らず、光センサなどでも良い。
【００２２】
（制御装置の回路構成）
一方、図２２において、符号３０は、マイクロコンピュータなどからなる制御装置（ＥＣＵ）であり、このＥＣＵ３０は、点火時期制御、燃料噴射制御などを行なうメインコンピュータ３１と、ノック検出処理を行なう専用のサブコンピュータ３２との２つのマイクロコンピュータを中核として構成されている。
【００２３】
上記ＥＣＵ３０内には、各部に安定化電圧を供給する定電圧回路３３が内蔵されており、この定電圧回路３３は、直接、及びＥＣＵリレー３４のリレー接点を介して、バッテリ３５に接続されている。このバッテリ３５には、上記ＥＣＵリレー３４のリレーコイルがキースイッチ３６を介して接続されるとともに、燃料ポンプリレー３７のリレー接点を介して燃料ポンプ１７が接続されている。
【００２４】
上記メインコンピュータ３１は、メインＣＰＵ３８、ＲＯＭ３９、ＲＡＭ４０、バックアップＲＡＭ４０ａ、タイマ４１、シリアルインターフェース（ＳＣＩ）４２、及び、Ｉ／Ｏインターフェース４３がバスライン４４を介して互いに接続されて構成され、具体的には、例えば１つのＬＳＩチップとしてＥＣＵ３０内に実装されている。
【００２５】
上記Ｉ／Ｏインターフェース４３の入力ポートには、吸入空気量センサ８、スロットル開度センサ９ａ、冷却水温センサ２１、Ｏ２センサ２３、及び、車速センサ６０が、Ａ／Ｄ変換器４５を介して接続されるとともに、スタータスイッチ４６、アイドルスイッチ９ｂ、クランク角センサ２６、カム角センサ２８が接続され、さらに、上記バッテリ３５が接続されてバッテリ電圧がモニタされる。
【００２６】
また、上記Ｉ／Ｏインターフェース４３の出力ポートには、イグナイタ１４が接続され、さらに、駆動回路４７を介して、ＩＳＣＶ１１、インジェクタ１２、燃料ポンプリレー３７のリレーコイルが接続されている。
【００２７】
一方、サブコンピュータ３２は、サブＣＰＵ４８、ＲＯＭ４９、ＲＡＭ５０、タイマ５１、ＳＣＩ５２、及び、Ｉ／Ｏインターフェース５３がバスライン５４を介して互いに接続されて構成され、具体的には、上記メインコンピュータ３１同様、例えば１つのＬＳＩチップとしてＥＣＵ３０内に実装されている。
【００２８】
上記Ｉ／Ｏインターフェース５３の入力ポートには、クランク角センサ２６、カム角センサ２８が接続されるとともに、ノックセンサ２０が、アンプ５５、周波数フィルタ５６、Ａ／Ｄ変換器５７を介して接続されている。
【００２９】
上記ノックセンサ２０は、例えばノック振動とほぼ同じ固有周波数を持つ振動子と、この振動子の振動加速度を検知して電気信号に変換する圧電素子とから構成される共振形のノックセンサであり、エンジンの爆発行程における燃焼圧力波によりシリンダブロック１ａに伝わる振動を検出し、その振動波形を検出信号として出力する。
【００３０】
上記ノックセンサ２０の検出信号は上記アンプ５５により所定のレベルに増幅された後、上記周波数フィルタ５６により必要な周波数成分が抽出され、Ａ／Ｄ変換器５７でアナログデータからデジタルデータに変換される。
【００３１】
また、上記メインコンピュータ３１と上記サブコンピュータ３２とは、ＳＣＩ４２，５２を介したシリアル回線により接続されるとともに、上記サブコンピュータ３２のＩ／Ｏインターフェース５３の出力ポートが、上記メインコンピュータ３１のＩ／Ｏインターフェース４３の入力ポートに接続されている。
【００３２】
上記メインコンピュータ３１では、クランク角センサ２６からのクランクパルスに基づいて点火時期などを設定するとともに、カム角センサ２８からのカムパルスに基づいて点火対象となる該当気筒を判別し、所定の点火時期に達すると、イグナイタ１４に点火信号を出力して該当気筒の点火を行なう。
【００３３】
一方、上記サブコンピュータ３２では、エンジン回転数とエンジン負荷とに基づいてノックセンサ２０からの検出信号のサンプル区間を設定し、このサンプル区間でノックセンサ２０からの検出信号を高速にＡ／Ｄ変換して振動波形を忠実にデジタルデータに変換し、ノック発生の有無を判定する。
【００３４】
このノック発生の有無のノック判定データは、サブコンピュータ３２のＩ／Ｏインターフェース５３に出力され、ノック発生の場合には、ＳＣＩ５２，４２を介したシリアル回線を通じてサブコンピュータ３２から上記メインコンピュータ３１にノックデータが読込まれる。上記メインコンピュータ３１では、このノックデータに基づいて直ちに該当気筒の点火時期を遅らせ、ノックを回避する。
【００３５】
上記メインコンピュータ３１による点火時期制御に際しては、低オクタン価燃料用の基本進角値テーブルと高オクタン価燃料用進角値テーブルとの２つの点火時期テーブルに対して学習制御が行なわれ、この学習制御は、加速時、停止される。以下、この点火時期学習制御に係わる動作について説明する。
【００３６】
（気筒判別・エンジン回転数算出手順）
図６は、クランク角センサ２６からのクランクパルス入力により割込みスタートする気筒判別・エンジン回転数算出のルーチンであり、まず、ステップＳ１０１で、カム角センサ２８の出力に基づき、＃ｉの点火対象気筒を判別すると、次に、ステップＳ１０２で、クランクパルスを識別する。
【００３７】
図２３のタイムチャートに示すように、例えば、上記カム角センサ２８からθ５  （突起２７ｂ）のカムパルスが出力された場合、次の圧縮上死点は＃３気筒であり、この＃３気筒が点火対象気筒（＃４気筒が燃料噴射対象気筒）となることが判別できる。
【００３８】
また、上記θ５  のカムパルスの後にθ４  （突起２７ａ）のカムパルスが出力された場合、次の圧縮上死点は＃２気筒であり、この＃２気筒が点火対象気筒（＃１気筒が燃料噴射対象気筒）となることが判別できる。
【００３９】
同様にθ６  （突起２７ｃ）のカムパルスが出力された後の圧縮上死点は＃４気筒であり、この＃４気筒が点火対象気筒（＃３気筒が燃料噴射対象気筒）となる。さらに、上記θ６  のカムパルスの後にθ４  （突起２７ａ）のカムパルスが出力された場合、その後の圧縮上死点は＃１気筒であり、この＃１気筒が点火対象気筒（＃２気筒が燃料噴射対象気筒）となることが判別できる。
【００４０】
さらに、上記カム角センサ２８からカムパルスが出力された後に、クランク角センサ２６から出力されるクランクパルスが周期（回転数）を算出する際の基準クランク角（θ１）を示し、次のクランクパルスが該当気筒の点火時期及び燃料噴射開始時期を設定する際の基準クランク角（θ２  ）を示すものであることが判別できる。
【００４１】
すなわち、本実施例の４サイクル４気筒エンジンでは、燃焼行程は＃１→＃３→＃２→＃４の気筒順であり、＃ｉ気筒の点火対象気筒が＃１気筒とすると、このときの燃料噴射対象気筒＃ｉ（＋２）は＃２気筒であり、次の燃料噴射対象気筒＃ｉ（＋２）のは＃４気筒となる。そして、点火が＃１→＃３→＃２→＃４の気筒順に行われ、燃料噴射は該当気筒に対して７２０℃Ａ（エンジン２回転）毎に１回のシーケンシャル噴射が行われる。
【００４２】
その後、ステップＳ１０３で、例えば、クランク角センサ２６から出力されるＢＴＤＣθ１  ，θ２  のクランクパルスの入力間隔時間（周期）Ｔθ１２を計時し、ステップＳ１０４で、この入力間隔時間Ｔθ１２からエンジン回転数ＮＥ  を算出し、ＲＡＭ４０の所定アドレスに回転数データとしてストアしてルーチンを抜ける。
【００４３】
（点火時期設定手順）
一方、所定時間毎に実行される図７及び図８の割込みルーチンにて点火時期が設定される。この点火時期設定ルーチンでは、まず、ステップＳ２０１，Ｓ２０２で、それぞれ、スタータスイッチ４６がＯＮされているか否か、エンジン回転数ＮＥが完爆回転数ＮＥＳＥＴ（例えば、ＮＥＳＥＴ＝４００ｒｐｍ）に達しているか否かを判別する。
【００４４】
そして、スタータスイッチ４６がＯＮのエンジン始動時、あるいは、ＮＥ≦ＮＥＳＥＴのときには、ステップＳ２０１あるいはステップＳ２０２からステップＳ２１６へ分岐してエンジン始動時及び極低回転時を判別するための始動時・極低回転時判別フラグＦＬＡＧＳＴをセットし（ＦＬＡＧＳＴ←１）、ルーチンを抜ける。
【００４５】
一方、スタータスイッチ４６のＯＮによるエンジンのクランキング後、スタータスイッチ４６がＯＦＦされ、ＮＥ＞ＮＥＳＥＴとなってエンジンが完爆したときには、ステップＳ２０１，Ｓ２０２からステップＳ２０３へ進んで、始動時・極低回転時判別フラグＦＬＡＧＳＴをクリアし（ＦＬＡＧＳＴ←０）、ステップＳ２０４で、冷却水温ＴＷに基づき水温補正値ＡＤＶＴＷ（角度データ）を設定する。
【００４６】
次いで、ステップＳ２０５へ進み、エンジン回転数ＮＥ、エンジン負荷としての基本燃料噴射量ＴＰに基づき、部分補正テーブルＴＢＡＤＶＰＲＴを参照して部分補正点火時期ＡＤＶＰＲＴを設定する。この部分補正テーブルＴＢＡＤＶＰＲＴは、運転領域毎に部分的な補正を行なうための部分補正点火時期ＡＤＶＰＲＴをバックアップＲＡＭ４０ａにストアしたものであり、図１８に示すように、エンジン回転数ＮＥ、基本燃料噴射量ＴＰをパラメータとして特定される各領域毎に部分補正点火時期ＡＤＶＰＲＴがストアされている。
【００４７】
尚、上述の基本燃料噴射量ＴＰは、エンジン負荷の一例であり、その他、燃料噴射量あるいは１行程当たりの吸入空気量などを用いても良い。
【００４８】
ステップＳ２０６では、エンジン回転数ＮＥ、基本燃料噴射量ＴＰに基づき、基本進角値テーブルを補間計算付きで参照して基本進角値ＩＧＲＥＧを設定する。この基本進角値テーブルは、レギュラーガソリンなどの低オクタン価の燃料を使用した際に、ノッキングを許容範囲内に抑えることのできるノック限界の点火時期を基本進角値として、エンジン回転数ＮＥ、基本燃料パルス幅ＴＰをパラメータとして予め実験などにより求めてＲＯＭ３９にストアされているものであり、例えば、１６×１６格子の三次元テーブルとして構成されている。
【００４９】
その後、ステップＳ２０７へ進むと、バックアップＲＡＭ４０ａにストアされている全体補正係数ＴＣＭＰを読出し、ステップＳ２０８で、エンジン回転数ＮＥ、基本燃料噴射量ＴＰに基づき、高オクタン価燃料用進角値テーブルを補間計算付きで参照して高オクタン価燃料用進角値ＩＧＭＢＴを設定する。
【００５０】
上記高オクタン価燃料用進角値テーブルは、プレミアムガソリンなどの高オクタン価で耐ノック性の高い燃料を使用した際に発揮することのできる許容最大トルクを得られる点火時期を、エンジン回転数ＮＥ、基本燃料パルス幅ＴＰをパラメータとして予め実験などにより求め、ＲＯＭ３９に、例えば、１６×１６格子の三次元テーブルとしてストアされているものである。
【００５１】
次いで、ステップＳ２０９へ進み、上記ステップＳ２０６で設定した基本進角値ＩＧＲＥＧと、上記ステップＳ２０８で設定した高オクタン価燃料用進角値ＩＧＭＢＴに上記ステップＳ２０７で読出した全体補正係数ＴＣＭＰを乗算した値とを加算し、全体補正点火時期（°ＣＡを単位とする角度データ）ＡＤＶＴＯＴを算出する（ＡＤＶＴＯＴ←ＩＧＲＥＧ＋ＴＣＭＰ×ＩＧＭＢＴ）。
【００５２】
そして、ステップＳ２１０へ進み、上記ステップＳ２０９で算出した全体補正点火時期ＡＤＶＴＯＴに、部分補正点火時期ＡＤＶＰＲＴ及び水温補正値ＡＤＶＴＷを加算して制御進角ＡＤＶを算出し（ＡＤＶ←ＡＤＶＴＯＴ＋ＡＤＶＰＲＴ＋ＡＤＶＴＷ）、ステップＳ２１１で、制御進角ＡＤＶをθ２パルスを基準とした点火時刻、すなわち角度を時間データに変換した点火タイミングＴＡＤＶを設定する（ＴＡＤＶ←Ｔθ１２×（θ２−ＡＤＶ）／θ１２）。但し、θ１２はθ１クランクパルスとθ２クランクパルスに対応する角度差（例えば、θ１＝９７°ＣＡ、θ２＝６５°ＣＡのとき、θ１２＝３２°ＣＡ）である。
【００５３】
次に、ステップＳ２１２へ進むと、バッテリ電圧に基づき基本通電時間テーブルを補間計算付きで参照して基本通電時間ＤＷＬＢを設定すると、ステップＳ２１３で、エンジン回転数ＮＥに基づき回転補正テーブルを補間計算付きで参照して回転補正ＫＤＷＬＮを設定する。尚、上記基本通電時間ＤＷＬＢは、バッテリ電圧が高いほど短く設定され、上記回転補正ＫＤＷＬＮは、エンジン回転数ＮＥが高いほど小さく設定される。
【００５４】
そして、ステップＳ２１４へ進んで、基本通電時間ＤＷＬＢに回転補正ＫＤＷＬＮを乗じて通電時間ＤＷＬを算出すると（ＤＷＬ←ＤＷＬＢ×ＫＤＷＬＮ）、ステップＳ２１５で、θ２クランクパルスを基準とした通電開始時刻すなわち通電開始タイミングＴＤＷＬを設定して（ＴＤＷＬ←ＴＡＤＶ−ＤＷＬ）ルーチンを抜ける。
【００５５】
この点火時期設定ルーチンで設定した点火時期に対し、図９及び図１０に示す通電・点火制御手順のルーチンが、θ２、θ３クランクパルス割込みにより起動され、点火対象気筒＃ｉのドエル（通電）及びドエルカット（点火）を行なう。
【００５６】
図９に示すθ２クランクパルスによる割込みでは、ステップＳ３０１で、始動時・極低回転時判別フラグＦＬＡＧＳＴの値を参照し、ＦＬＡＧＳＴ＝１、すなわち、始動時あるいは極低回転時にはステップＳ３０２へ分岐して点火対象気筒＃ｉのドエルを開始してルーチンを抜け、ＦＬＡＧＳＴ＝０、すなわち、通常時には、ステップＳ３０３へ進んで、ドエルセットタイマＴＩＭ１及び点火セットタイマＴＩＭ２のカウントを開始する。
【００５７】
次いで、ステップＳ３０４へ進むと、ドエルセットタイマＴＩＭ１のカウント値が通電開始タイミングＴＤＷＬに達したか否かを判別するループとなり、通電開始タイミングＴＤＷＬに達すると、ステップＳ３０５へ進んで、点火対象気筒＃ｉのドエルを開始し、ステップＳ３０６で、ドエルセットタイマＴＩＭ１をクリアして（ＴＩＭ１←０）、ステップＳ３０７で、点火セットタイマＴＩＭ２のカウント値が点火タイミングＴＡＤＶに達したか否かを判別する。
【００５８】
そして、上記ステップＳ３０７で、点火セットタイマＴＩＭ２のカウント値が点火タイミングＴＡＤＶに達すると、ステップＳ３０８へ進んで、点火対象気筒＃ｉのドエルカットすなわち点火を行ない、ステップＳ３０９で、点火セットタイマＴＩＭ２をクリアして（ＴＩＭ２←０）ルーチンを抜ける。
【００５９】
次に、θ３のクランクパルスが入力されると、図１０の割込みルーチンが起動され、ステップＳ４０１で、始動時・極低回転時判別フラグＦＬＡＧＳＴの値を参照し、ＦＬＡＧＳＴ＝０、すなわち、通常時にはそのままルーチンを抜け、ＦＬＡＧＳＴ＝１、すなわち、始動時あるいは極低回転時には、ステップＳ４０２で、点火対象気筒＃ｉのドエルカットを行ない、ルーチンを抜ける。
【００６０】
すなわち、図２３に示すように、始動時あるいは極低回転時には、θ２（例えば、ＢＴＤＣ６５°）クランクパルスが入力されると直ちに該当気筒＃ｉのドエルを開始し、θ３（例えば、ＢＴＤＣ１０°）クランクパルスで点火を行なう固定点火時期となり、一方、通常時には、θ２クランクパルスを基準として、この基準から所定時間経過した通電開始タイミングＴＤＷＬにてドエルを開始し、点火タイミングＴＡＤＶにて点火を行なうのである。
【００６１】
また、通常時の点火時期制御においては、現在のエンジンの要求する点火時期の値が、低オクタン価燃料用の基本進角値テーブルと高オクタン価燃料用進角値テーブルとの２つの点火時期テーブルのどの位置にあるかを決定する全体補正と、エンジン回転数とエンジン負荷とをパラメータとする領域毎にノック発生の有無により点火時期の値を補正する部分補正とが行われる。以下、その手順について説明する。
【００６２】
図１〜図３は全体補正係数及び部分補正点火時期学習手順を示し、本実施例の４気筒エンジンにおいては、エンジン１／２回転毎の点火に対し実行される（６気筒エンジンではエンジン１／３回転毎）。
【００６３】
まず、ステップＳ５０１，Ｓ５０２，５０３で学習条件の判別を行なう。すなわち、ステップＳ５０１で、始動時・極低回転時判別フラグＦＬＡＧＳＴが”０”か否かを判別し、ステップＳ５０２で、ノックセンサ２０、ＩＳＣＶ１１などの点火時期に影響するセンサ、アクチュエータが正常か否かをＥＣＵ３０の内部データにより判別し、ステップＳ５０３で、冷却水温ＴＷが暖機完了温度ＴＷＳＥＴ以上か否かを判別する。
【００６４】
そして、上記ステップＳ５０１，Ｓ５０２，Ｓ５０３で満足されない条件がある場合には、そのステップからルーチンを抜け、一方、ステップＳ５０１でＦＬＡＧＳＴ＝０で通常時であり、且つ、ステップＳ５０２でノックセンサ２０、ＩＳＣＶ１１などの点火時期に影響するセンサ、アクチュエータが正常であり、さらに、ステップＳ５０３で冷却水温ＴＷが暖機完了温度ＴＷＳＥＴ以上の場合、学習条件成立と判別してステップＳ５０４へ進み、加速状態での点火時期学習を中止する点火回数を示す学習中止点火回数ＣＯＵＮＴＡＣＣの値が０か否かを判別する。
【００６５】
上記ステップＳ５０４で、ＣＯＵＮＴＡＣＣ≠０のときには、ステップＳ５０９へジャンプし、学習中止点火回数ＣＯＵＮＴＡＣＣをカウントダウンして（ＣＯＵＮＴＡＣＣ←ＣＯＵＮＴＡＣＣ−１）ルーチンを抜け、ＣＯＵＮＴＡＣＣ＝０のときには、ステップＳ５０５で、加速判定レベルＬＥＶＡＣＣ（後述する加速判定ルーチンにて設定され、数値が小さいほど加速が大きい）と設定値ＡＣＣＤＶＧ（例えば、ＡＣＣＤＶＧ＝４）とを比較する。
【００６６】
その結果、上記ステップＳ５０５で、ＬＥＶＡＣＣ≦ＡＣＣＤＶＧのときには、ステップＳ５０６へ進んで、車速ＶＳＰが設定値ＶＳＰＡＣＴ（例えば、ＶＳＰＡＣＴ＝２０〜６０Ｋｍ）未満か否かを判別し、ＶＳＰ＜ＶＳＰＡＣＴのとき、ステップＳ５０７で、学習中止点火回数ＣＯＵＮＴＡＣＣに設定値ＡＣＣＴＮ（例えば、３０回）をセットして（ＣＯＵＮＴＡＣＣ←ＡＣＣＴＮ）、ステップＳ５０９でカウントダウンを行なってルーチンを抜け、ＶＳＰ≧ＶＳＰＡＣＴのとき、ステップＳ５０８で、学習中止点火回数ＣＯＵＮＴＡＣＣに設定値ＡＣＣＮＴＶ（例えば、１５０回）をセットして（ＣＯＵＮＴＡＣＣ←ＡＣＣＮＴＶ）、ステップＳ５０９でカウントダウンを行なってルーチンを抜ける。
【００６７】
すなわち、加速時には、正確なノック検出が困難であって的確な点火時期学習が期待できず、また、加速状態は短時間であるため、学習を中止しても問題はないため、加速レベルＬＥＶＡＣＣが設定値ＡＣＣＤＶＧ以下のとき、所定点火回数の間、加速と判定して学習を中止するのである。
【００６８】
この際、自動変速機を搭載した自動車では、車速ＶＳＰが高い（ＶＳＰ≧ＶＳＰＡＣＴ）とキックダウンが起こり、エンジン回転数が急激に変化し、安定化するに至るまで時間を要し、車速ＶＳＰが低い（ＶＳＰ＜ＶＳＰＡＣＴ）と、キックダウンは起こらず、比較的エンジン回転数変化が少ない。従って、学習中止の際、ＶＳＰ≧ＶＳＰＡＣＴの場合には、ＶＳＰ＜ＶＳＰＡＣＴの場合よりも学習中止の点火回数を大きくするのである。
【００６９】
一方、上記ステップＳ５０５で、ＬＥＶＡＣＣ＞ＡＣＣＤＶＧのときには、上記ステップＳ５０５からステップＳ５１０以降へ分岐して学習を行なう。以下、学習手順について説明すると、ステップＳ５１０で、バックアップＲＡＭ４０ａの所定アドレスから全体補正終了フラグＦＬＡＧＴＣＭＰの値を読出し、全体補正が終了したか否かを判別する。
【００７０】
そして、ＦＬＡＧＴＣＭＰ＝０、すなわち、全体補正が終了していないときには、ステップＳ５１０からステップＳ５１１へ進んで、ノック無しの状態の継続時間をカウントするノック無し継続時間タイマＴＩＭ３をクリアし（ＴＩＭ３←０）、ステップＳ５１２で、全体補正係数学習のサブルーチンを呼び出して全体補正係数ＴＣＭＰを学習し、ルーチンを終了する。
【００７１】
一方、上記ステップＳ５１０で、ＦＬＡＧＴＣＭＰ＝１、すなわち、全体補正が終了しているときには、ステップＳ５１０からステップＳ５１３以降へと分岐し、ステップＳ５１３，Ｓ５１４で、それぞれ、後述する全体補正係数学習のサブルーチンにて、全体補正係数ＴＣＭＰが上下限に達した状態をカウントするための制限カウント値ＣＯＵＮＴＴＣＭＰ、ノック発生無しの状態をカウントするためのノック発生無しカウント値ＣＯＵＮＴＮＫをクリアする（ＣＯＵＮＴＴＣＭＰ←０、ＣＯＵＮＴＮＫ←０）。
【００７２】
その後、ステップＳ５１５で、部分補正点火時期学習のサブルーチンを呼び出して部分補正点火時期ＡＤＶＰＲＴを学習し、次いで、部分補正の結果、全体補正が不適当となって、再度、全体補正を行なう全体補正復帰条件が成立するか否かを、ステップＳ５１６〜Ｓ５２０において判別する。
【００７３】
すなわち、ステップＳ５１６で、学習した運転領域の部分補正点火時期ＡＤＶＰＲＴが負の値か否か（リタードか否か）を判別するとともに、ステップＳ５１７で、全体補正係数ＴＣＭＰが設定値ＴＣＬＯＷ（但し、１．０＞ＴＣＬＯＷ＞０）以上か否かを判別し、ＡＤＶＰＲＴ＜０（リタード）且つＴＣＭＰ≧ＴＣＬＯＷのときステップＳ５１８へ進み、これ以外のときにはルーチンを抜ける。
【００７４】
ステップＳ５１８では、エンジン回転数ＮＥ、基本燃料噴射量ＴＰに基づき、高オクタン価燃料用進角値テーブルから高オクタン価燃料用進角値ＩＧＭＢＴを設定し、この高オクタン価燃料用進角値ＩＧＭＢＴに設定値ＰＣＭＰＬ（例えば、ＰＣＭＰＬ＝０．１〜０．４）を乗算した値ＩＧＭＢＴ×ＰＣＭＰＬと、部分補正点火時期ＡＤＶＰＲＴの絶対値｜ＡＤＶＰＲＴ｜とを、ステップＳ５１９にて比較する。
【００７５】
そして、｜ＡＤＶＰＲＴ｜＜ＩＧＭＢＴ×ＰＣＭＰＬのときには、ステップＳ５１９からルーチンを抜け、｜ＡＤＶＰＲＴ｜≧ＩＧＭＢＴ×ＰＣＭＰＬのとき、ステップＳ５１９からステップＳ５２０へ進んで、エンジン回転数ＮＥ及び基本燃料噴射量ＴＰが設定範囲内（ＮＥＳＥＴＬ３≦ＮＥ≦ＮＥＳＥＴＨ３、且つ、ＴＰＳＥＴＬ３≦ＴＰ≦ＴＰＳＥＴＨ３）にあるか否かを判別し、設定範囲内にないときにはルーチンを抜け、設定範囲内のとき、ステップＳ５２１で、全体補正終了フラグＦＬＡＧＴＣＭＰをクリアして（ＦＬＡＧＴＣＭＰ←０）ルーチンを抜ける。
【００７６】
上述のステップＳ５０５における加速判定レベルＬＥＶＡＣＣは、所定時間毎に実行される加速判定ルーチン（図４及び図５）にて設定される。この加速判定ルーチンでは、まず、ステップＳ６０１で、スロットル開度センサ９ａからのスロットル開度θを読込み、ステップＳ６０２で、前回のルーチン実行時のスロットル開度θＭＥＭＯをＲＡＭ４０から読出す。
【００７７】
次いで、ステップＳ６０３へ進んで、今回のスロットル開度θと前回のスロットル開度θＭＥＭＯからスロットル開度変化ｄ（θ−θＭＥＭＯ）／ｄｔを算出し、ステップＳ６０４以降におけるスロットル開度変化ｄ（θ−θＭＥＭＯ）／ｄｔの設定値ＳＥＴ０，ＳＥＴ１，ＳＥＴ２，ＳＥＴ３，ＳＥＴ４，ＳＥＴ５，ＳＥＴ６（ＳＥＴ０＞ＳＥＴ１＞ＳＥＴ２＞ＳＥＴ３＞ＳＥＴ４＞ＳＥＴ５＞ＳＥＴ６）に対する大小比較結果により、加速判定レベルＬＥＶＡＣＣを決定する。
【００７８】
すなわち、ステップＳ６０４で、ｄ（θ−θＭＥＭＯ）／ｄｔ＞ＳＥＴ０のときには、ステップＳ６０５へ進んで、加速判定レベルＬＥＶＡＣＣを０として（ＬＥＶＡＣＣ←０）ＲＡＭ４０にストアし、ｄ（θ−θＭＥＭＯ）／ｄｔ≦ＳＥＴ０のときには、ステップＳ６０６へ分岐して、スロットル開度変化ｄ（θ−θＭＥＭＯ）／ｄｔを設定値ＳＥＴ１と比較する。
【００７９】
上記ステップＳ６０６での比較結果、ｄ（θ−θＭＥＭＯ）／ｄｔ＞ＳＥＴ１のときには、ステップＳ６０７で、加速判定レベルＬＥＶＡＣＣを１として（ＬＥＶＡＣＣ←１）ＲＡＭ４０にストアし、ｄ（θ−θＭＥＭＯ）／ｄｔ≦ＳＥＴ１のときには、ステップＳ６０８以降へ分岐する。
【００８０】
そして、以下、同様にして、スロットル開度変化ｄ（θ−θＭＥＭＯ）／ｄｔと設定値ＳＥＴ２，ＳＥＴ３，ＳＥＴ４，ＳＥＴ５，ＳＥＴ６とを順に比較し、スロットル開度変化ｄ（θ−θＭＥＭＯ）／ｄｔが設定値より大きいとき、ステップＳ６０９，Ｓ６１１，Ｓ６１３，Ｓ６１５，Ｓ６１７のいずれかのステップで、加速判定レベルＬＥＶＡＣＣを２、３、４、５、あるいは６として（ＬＥＶＡＣＣ←２、ＬＥＶＡＣＣ←３、ＬＥＶＡＣＣ←４、ＬＥＶＡＣＣ←５、あるいは、ＬＥＶＡＣＣ←６）ＲＡＭ４０にストアし、最終的に、ステップＳ６１６で、ｄ（θ−θＭＥＭＯ）／ｄｔ≦ＳＥＴ６のとき、ステップＳ６１８へ進んで、加速判定レベルＬＥＶＡＣＣを７として（ＬＥＶＡＣＣ←７）ＲＡＭ４０にストアする。
【００８１】
その後、加速判定レベルＬＥＶＡＣＣを決定すると、ステップＳ６１９へ進み、今回読込んだスロットル開度θをスロットル開度θＭＥＭＯとしてＲＡＭ４０の所定アドレスにストアし、ルーチンを抜ける。
【００８２】
また、上述の全体補正係数及び部分補正点火時期学習ルーチンのステップＳ５１２，Ｓ５１５における全体補正係数学習のサブルーチン、部分補正点火時期学習のサブルーチンは、それぞれ、図１１〜図１３、図１４〜図１７に示される。
【００８３】
図１１〜図１３の全体補正係数学習のサブルーチンでは、ステップＳ７０１で、エンジン回転数ＮＥ、基本燃料噴射量ＴＰが学習領域内（ＮＥＳＥＴＬ１≦ＮＥ≦ＮＥＳＥＴＨ１、且つ、ＴＰＳＥＴＬ１≦ＴＰ≦ＴＰＳＥＴＨ１）にあるか否かを判別し、学習領域内にないときにはルーチンを抜け、学習領域内にあるときには、ステップＳ７０２で、ノック発生の有無を判別して、ノック発生有りのとき、ステップＳ７０３以降へ進み、、ノック発生無しのとき、ステップＳ７１３以降へ分岐する。
【００８４】
まず、ノック発生有りの場合について説明すると、ステップＳ７０３で、ノックの有無の変化を判別するための全体補正ノック有無変化判別フラグＦＬＡＧＮＫ１の値を参照し、ＦＬＡＧＮＫ１＝１のとき、すなわち、前回もノック発生有りの状態であり、ノック有無の状態が変化していないときには、ステップＳ７０５へジャンプし、ＦＬＡＧＮＫ１＝０のとき、すなわち、前回、ノック発生無しであり、今回ノック発生有りとなったときには、ステップＳ７０４で、全体補正係数ＴＣＭＰを更新するための変化量ΔＴＣＭＰを前回の値の１／２に更新し（ΔＴＣＭＰ←ΔＴＣＭＰ／２）、ステップＳ７０５へ進む。
【００８５】
ステップＳ７０５では、前回までの全体補正係数ＴＣＭＰを変化量ΔＴＣＭＰを減算して更新し（ＴＣＭＰ←ＴＣＭＰ−ΔＴＣＭＰ）、ステップＳ７０６で、部分補正テーブルＴＢＡＤＶＰＲＴを初期化する。すなわち、ノックが発生しているときには、エンジン１／２回転毎に全体補正係数ＴＣＭＰを遅角側に更新し、この全体補正係数ＴＣＭＰの更新に伴い部分補正テーブルＴＢＡＤＶＰＲＴのテーブル値を全て”０”にクリアして初期化するのである。
【００８６】
尚、部分補正テーブルＴＢＡＤＶＰＲＴは、バックアップ電源がＯＦＦとなってバックアップＲＡＭ４０ａ内のデータが破壊された場合には、電源再投入時、テーブル値は全てクリアされ初期化される。
【００８７】
その後、ステップＳ７０７へ進むと、全体補正係数ＴＣＭＰが遅角側に更新されて負の値になったか否かを判別し、ＴＣＭＰ≦０のとき、ステップＳ７０８で、全体補正係数ＴＣＭＰを”０”に固定して（ＴＣＭＰ←０）遅角制限すると、ステップＳ７０９で、全体補正係数ＴＣＭＰが上下限に達した状態をカウントするための制限カウント値ＣＯＵＮＴＴＣＭＰをカウントアップし（ＣＯＵＮＴＴＣＭＰ←ＣＯＵＮＴＴＣＭＰ＋１）、ステップＳ７１１へ進む。
【００８８】
また、上記ステップＳ７０７で、ＴＣＭＰ＞０のときには、ステップＳ７０９で、制限カウント値ＣＯＵＮＴＴＣＭＰをクリアし（ＣＯＵＮＴＴＣＭＰ←０）、ステップＳ７１１で、全体補正ノック有無変化判別フラグＦＬＡＧＮＫ１をセットすると（ＦＬＡＧＮＫ１←１）、ステップＳ７１２で、ノック発生無しの状態をカウントするためのノック発生無しカウント値ＣＯＵＮＴＮＫをクリアし（ＣＯＵＮＴＮＫ←０）、ステップＳ７２５へ進む。
【００８９】
一方、上記ステップＳ７０２で、ノック発生無しの場合には、ステップＳ７１３で、全体補正ノック有無変化判別フラグＦＬＡＧＮＫ１の値を参照し、ＦＬＡＧＮＫ１＝１のとき、すなわち、前回、ノック発生有りの状態からノック無しの状態に変化したときには、ステップＳ７１４へ進んで、変化量ΔＴＣＭＰを前回の値の１／２に更新し（ΔＴＣＭＰ←ΔＴＣＭＰ／２）、ステップＳ７２４で、全体補正ノック有無変化判別フラグＦＬＡＧＮＫ１をクリアして（ＦＬＡＧＮＫ１←０）ステップＳ７２５へ進む。
【００９０】
また、上記ステップＳ７１３で、ＦＬＡＧＮＫ１＝０であり、前回から引き続きノック発生無しの状態が継続しているときには、上記ステップＳ７１３からステップＳ７１５へ進んで、ノック発生無しカウント値ＣＯＵＮＴＮＫをカウントアップすると（ＣＯＵＮＴＮＫ←ＣＯＵＮＴＮＫ＋１）、ステップＳ７１６で、ノック発生無しカウント値ＣＯＵＮＴＮＫが設定値ＣＴＯＴＪＤ以上となったか否かを判別する。
【００９１】
そして、上記ステップＳ７１６で、ＣＯＵＮＴＮＫ＜ＣＴＯＴＪＤのときには、前述のステップＳ７２４へ分岐し、ＣＯＵＮＴＮＫ≧ＣＴＯＴＪＤのとき、すなわち、ノックが設定回数の点火で発生しなかったときには、ステップＳ７１７へ進んで、前回までの全体補正係数ＴＣＭＰに変化量ΔＴＣＭＰを加算して進角側に更新し（ＴＣＭＰ←ＴＣＭＰ＋ΔＴＣＭＰ）、ステップＳ７１８で、部分補正テーブルＴＢＡＤＶＰＲＴを初期化する。
【００９２】
次いで、ステップＳ７１９へ進み、進角側への更新により全体補正係数ＴＣＭＰが１．０以上となったか否かを判別し、ＴＣＭＰ≧１．０のとき、ステップＳ７２０で、全体補正係数ＴＣＭＰを１．０に固定して（ＴＣＭＰ←１．０）進角制限すると、ステップＳ７２１で、制限カウント値ＣＯＵＮＴＴＣＭＰをカウントアップし（ＣＯＵＮＴＴＣＭＰ←ＣＯＵＮＴＴＣＭＰ＋１）、ＴＣＭＰ＜１．０のときには、ステップＳ７２２で、制限カウント値ＣＯＵＮＴＴＣＭＰをクリアする（ＣＯＵＮＴＴＣＭＰ←０）。
【００９３】
次いで、上記ステップＳ７２１あるいはステップＳ７２２からステップＳ７２３へ進むと、ノック発生無しカウント値ＣＯＵＮＴＮＫをクリアして（ＣＯＵＮＴＮＫ←０）、ステップＳ７２４で、全体補正ノック有無変化判別フラグＦＬＡＧＮＫ１をクリアし（ＦＬＡＧＮＫ１←０）、その後、ステップＳ７２５で、変化量ΔＴＣＭＰを設定値ＤＴＣＭＰ２（例えば、１／１６）と比較するとともに、ステップＳ７２６で、制限カウント値ＣＯＵＮＴＴＣＭＰを設定値ＮＴＣＭＰと比較する。
【００９４】
そして、上記ステップＳ７２５，Ｓ７２６において、ΔＴＣＭＰ≦ＤＴＣＭＰ２、あるいは、ＣＯＵＮＴＴＣＭＰ≧ＮＴＣＭＰの条件が不成立のときには、ステップＳ７２７で、全体補正終了フラグＦＬＡＧＴＣＭＰをクリアして（ＦＬＡＧＴＣＭＰ←０）ルーチンを抜け、条件が１つでも成立したとき、すなわち、変化量ΔＴＣＭＰが設定値ＤＴＣＭＰ２以下のとき、あるいは、全体補正係数ＴＣＭＰが上下限となった状態が設定回連続したときには、ステップＳ７２８で、全体補正終了フラグＦＬＡＧＴＣＭＰをセットして（ＦＬＡＧＴＣＭＰ←１）ルーチンを抜け、前述した全体補正係数及び部分補正点火時期学習手順のルーチンが次回に起動されたとき、全体補正を終了させて部分補正に移行させる。
【００９５】
尚、全体補正係数ＴＣＭＰ、変化量ΔＴＣＭＰ、全体補正終了フラグＦＬＡＧＴＣＭＰは、バックアップＲＡＭ４０ａにストアされており、バッテリ３５を取外すなどしてバックアップ電源がＯＦＦとなり、バックアップＲＡＭ４０ａ内のデータが破壊された場合には、電源再投入時に、それぞれ、初期値にイニシャルセットされる（ＴＣＭＰ←ＴＣＭＰＩＮＩ（例えば、１／２）、ΔＴＣＭＰ←ΔＴＣＭＰＩＮＩ（例えば、１／４）、ＦＬＡＧＴＣＭＰ←０）
また、図１４〜図１７の部分補正点火時期学習のサブルーチンでは、ステップＳ８０１で、エンジン回転数ＮＥ、基本燃料噴射量ＴＰが、部分補正テーブルＴＢＡＤＶＰＲＴの領域内（ＮＥ０≦ＮＥ≦ＮＥＮ、且つ、ＴＰ０≦ＴＰ≦ＴＰＮ）か否かを判別し、領域内にないときにはルーチンを抜け、領域内にあるとき、ステップＳ８０２で、ノック発生の有無を判別する。
【００９６】
そして、ノック発生有りの場合には、ステップＳ８０２からステップＳ８０３へ進み、ノック無しの状態の継続時間をカウントするためのノック無し継続時間タイマＴＩＭ３をクリアし（ＴＩＭ３←０）、ステップＳ８０４で、エンジン回転数ＮＥ、基本燃料噴射量ＴＰに基づき、部分補正テーブルＴＢＡＤＶＰＲＴを参照して部分補正点火時期ＡＤＶＰＲＴを設定する。
【００９７】
次いで、ステップＳ８０５へ進み、上記ステップＳ８０４で設定した部分補正点火時期ＡＤＶＰＲＴを旧テーブル値（ＡＤＶＰＲＴ）ＯＬＤとし（（ＡＤＶＰＲＴ）ＯＬＤ←ＡＤＶＰＲＴ）、ステップＳ８０６で、旧テーブル値（ＡＤＶＰＲＴ）ＯＬＤから設定値ＤＲＥＴＰを減算して新テーブル値（ＡＤＶＰＲＴ）ＮＥＷとする（（ＡＤＶＰＲＴ）ＮＥＷ←（ＡＤＶＰＲＴ）ＯＬＤ−ＤＲＥＴＰ）ことにより、１回ノックが発生する毎に設定値ＤＲＥＴＰずつ遅角させ、ステップＳ８０７へ進む。
【００９８】
ステップＳ８０７では、新テーブル値（ＡＤＶＰＲＴ）ＮＥＷを遅角制限値ＬＷＬＭＴＰと比較し、（ＡＤＶＰＲＴ）ＮＥＷ＞ＬＷＬＭＴＰのときには、ステップＳ８０９にジャンプする一方、（ＡＤＶＰＲＴ）ＮＥＷ≦ＬＷＬＭＴＰのときには、ステップＳ８０８で、新テーブル値（ＡＤＶＰＲＴ）ＮＥＷを遅角制限値ＬＷＬＭＴＰに固定して（（ＡＤＶＰＲＴ）ＮＥＷ←ＬＷＬＭＴＰ）ステップＳ８０９に進み、制限値以上の遅角化を防止する。
【００９９】
ステップＳ８０９では、部分補正テーブルＴＢＡＤＶＰＲＴの該当領域ＡＤＤＲＥＳＳの部分補正点火時期ＡＤＶＰＲＴを新テーブル値（ＡＤＶＰＲＴ）ＮＥＷで更新し（ＡＤＶＰＲＴ←（ＡＤＶＰＲＴ）ＮＥＷ）、ステップＳ８１０で、ノックの有無の変化を判別するための部分補正ノック有無変化判別フラグＦＬＡＧＮＫ２をセットして（ＦＬＡＧＮＫ２←１）ルーチンを抜ける。
【０１００】
一方、上記ステップＳ８０２で、ノック発生無しの場合には、上記ステップＳ８０２からステップＳ８１１へ分岐し、部分補正ノック有無変化判別フラグＦＬＡＧＮＫ２の値を参照し、ＦＬＡＧＮＫ２＝１のとき、すなわち、前回、ノック発生有りの状態からノック無しの状態に変化したときには、ステップＳ８３２へジャンプして、ノック無し継続時間タイマＴＩＭ３をスタートさせ、ステップＳ８３３で、部分補正ノック有無変化判別フラグＦＬＡＧＮＫ２をクリアして（ＦＬＡＧＮＫ２←０）ルーチンを抜ける。
【０１０１】
また、部分補正ノック有無変化判別フラグＦＬＡＧＮＫ２がＦＬＡＧＮＫ２＝０のとき、すなわち、前回ルーチン実行時もノック発生無しのときには、上記ステップＳ８１１からステップＳ８１２へ進んで、エンジン回転数ＮＥ、基本燃料噴射量ＴＰに基づき部分補正テーブルＴＢＡＤＶＰＲＴにおける領域ＡＤＤＲＥＳＳを特定し、ステップＳ８１３で、この領域ＡＤＤＲＥＳＳを新領域（ＡＤＤＲＥＳＳ）ＮＥＷとする（（ＡＤＤＲＥＳＳ）ＮＥＷ←ＡＤＤＲＥＳＳ）。
【０１０２】
そして、今回のルーチン実行時の新領域（ＡＤＤＲＥＳＳ）ＮＥＷが前回の旧領域（ＡＤＤＲＥＳＳ）ＯＬＤと同じか否かをステップＳ８１４で判別し、新領域（ＡＤＤＲＥＳＳ）ＮＥＷが前回のルーチン実行時の旧領域（ＡＤＤＲＥＳＳ）ＯＬＤと異なる場合には、ステップＳ８１４からステップＳ８３０へ分岐してノック無し継続時間タイマＴＩＭ３をクリアし（ＴＩＭ３←０）、ステップＳ８３１で、新領域（ＡＤＤＲＥＳＳ）ＮＥＷを旧領域（ＡＤＤＲＥＳＳ）ＯＬＤとして（（ＡＤＤＲＥＳＳ）ＯＬＤ←（ＡＤＤＲＥＳＳ）ＮＥＷ）、前述したステップＳ８３２，Ｓ８３３を経てルーチンを抜ける。
【０１０３】
一方、今回のルーチン実行時の新領域（ＡＤＤＲＥＳＳ）ＮＥＷが前回のルーチン実行時の旧領域（ＡＤＤＲＥＳＳ）ＯＬＤと同じ場合には、上記ステップＳ８１４からステップＳ８１５へ進んで、新領域（ＡＤＤＲＥＳＳ）ＮＥＷを旧領域（ＡＤＤＲＥＳＳ）ＯＬＤとし（（ＡＤＤＲＥＳＳ）ＯＬＤ←（ＡＤＤＲＥＳＳ）ＮＥＷ）、ステップＳ８１６で、ノック無し継続時間タイマＴＩＭ３の計時が設定時間ＴＩＭＰＲＴ以上経過したか否かを判別する。
【０１０４】
上記ステップＳ８１６で、ノック無し継続時間タイマＴＩＭ３の計時が設定時間ＴＩＭＰＲＴを越えていないときには、前述のステップＳ８３３を経てルーチンを抜け、ノック無し継続時間タイマＴＩＭ３の計時が設定時間ＴＩＭＰＲＴ以上となったときには、ステップＳ８１７で、ノック無し継続時間タイマＴＩＭ３をクリアして（ＴＩＭ３←０）ステップＳ８１８へ進み、部分補正テーブルＴＢＡＤＶＰＲＴの該当領域ＡＤＤＲＥＳＳから部分補正点火時期ＡＤＶＰＲＴを読出す。
【０１０５】
その後、ステップＳ８１９へ進んで、読出した部分補正点火時期ＡＤＶＰＲＴを旧テーブル値（ＡＤＶＰＲＴ）ＯＬＤとし（（ＡＤＶＰＲＴ）ＯＬＤ←ＡＤＶＰＲＴ）、ステップＳ８２０で、旧テーブル値（ＡＤＶＰＲＴ）ＯＬＤに設定値ＤＡＤＶＰを加算して新テーブル値（ＡＤＶＰＲＴ）ＮＥＷとする（（ＡＤＶＰＲＴ）ＮＥＷ←（ＡＤＶＰＲＴ）ＯＬＤ＋ＤＡＤＶＰ）ことにより、同一の運転領域でノックが発生していなければ設定時間ＴＩＭＰＲＴ毎に設定値ＤＡＤＶＰずつ進角させ、ステップＳ８２１へ進む。
【０１０６】
ステップＳ８２１では、エンジン回転数ＮＥ、基本燃料噴射量ＴＰに基づき、高オクタン価燃料用進角値テーブルを参照して高オクタン価燃料用進角値ＩＧＭＢＴを設定すると、ステップＳ８２２で、全体補正係数ＴＣＭＰをバックアップＲＡＭ４０ａから読出す。
【０１０７】
次に、ステップＳ８２３で、高オクタン価燃料用進角値ＩＧＭＢＴに全体補正係数ＴＣＭＰの上限との差（１−ＴＣＭＰ）を乗算した値を、部分補正点火時期制限値ＡＤＶＰＲＴＬＩＭとし（ＡＤＶＰＲＴＬＩＭ←ＩＧＭＢＴ×（１−ＴＣＭＰ））、この新テーブル値（ＡＤＶＰＲＴ）ＮＥＷを、ステップＳ８２４以降で、設定値ＵＰＬＭＴＰと部分補正点火時期制限値ＡＤＶＰＲＴＬＩＭとの小さい方の値に進角制限する。
【０１０８】
すなわち、ステップＳ８２４で、部分補正点火時期制限値ＡＤＶＰＲＴＬＩＭと設定値ＵＰＬＭＴＰと比較し、ＵＰＬＭＴＰ≦ＡＤＶＰＲＴＬＩＭのときには、上記ステップＳ８２４からステップＳ８２５へ進んで、上記ステップＳ８２０で設定した新テーブル値（ＡＤＶＰＲＴ）ＮＥＷと設定値ＵＰＬＭＴＰとを比較する。
【０１０９】
その比較結果、（ＡＤＶＰＲＴ）ＮＥＷ＜ＵＰＬＭＴＰのときには、上記ステップＳ８２５からステップＳ８２９へジャンプし、（ＡＤＶＰＲＴ）ＮＥＷ≧ＵＰＬＭＴＰのときには、ステップＳ８２６で、設定値ＵＰＬＭＴＰを新テーブル値（ＡＤＶＰＲＴ）ＮＥＷとして（（ＡＤＶＰＲＴ）ＮＥＷ←ＵＰＬＭＴＰ）、ステップＳ８２９へ進む。
【０１１０】
一方、上記ステップＳ８２４での比較結果、ＵＰＬＭＴＰ＞ＡＤＶＰＲＴＬＩＭのときには、上記ステップＳ８２４からステップＳ８２７へ分岐して新テーブル値（ＡＤＶＰＲＴ）ＮＥＷと部分補正点火時期制限値ＡＤＶＰＲＴＬＩＭとを比較し、（ＡＤＶＰＲＴ）ＮＥＷ＜ＡＤＶＰＲＴＬＩＭのときにはステップＳ８２９にジャンプし、（ＡＤＶＰＲＴ）ＮＥＷ≧ＡＤＶＰＲＴＬＩＭのときには、ステップＳ８２８で、部分補正点火時期制限値ＡＤＶＰＲＴＬＩＭを新テーブル値（ＡＤＶＰＲＴ）ＮＥＷとして（（ＡＤＶＰＲＴ）ＮＥＷ←ＡＤＶＰＲＴＬＩＭ）、ステップＳ８２９へ進む。
【０１１１】
そして、一連の進角制限のステップを経てステップＳ８２９へ進むと、部分補正テーブルＴＢＡＤＶＰＲＴの該当領域ＡＤＤＲＥＳＳの部分補正点火時期ＡＤＶＰＲＴを、新テーブル値（ＡＤＶＰＲＴ）ＮＥＷにて更新し（ＡＤＶＰＲＴ←（ＡＤＶＰＲＴ）ＮＥＷ）、ステップＳ８３３で、部分補正ノック有無変化判別フラグＦＬＡＧＮＫ２をクリアして（ＦＬＡＧＮＫ２←０）ルーチンを抜ける。
【０１１２】
これにより、全体補正点火時期ＡＤＶＴＯＴ（＝ＩＧＲＥＧ＋ＴＣＭＰ×ＩＧＭＢＴ）と部分補正点火時期ＡＤＶＰＲＴとの加算値は、ＩＧＲＥＧ＋ＩＧＭＢＴ以下に制限され、過進角が防止される。
【０１１３】
【発明の効果】
以上説明したように本発明によれば、自動変速機搭載車のエンジンの点火時期学習制御において、加速時に所定の点火回数の間、点火時期補正量の学習を禁止するに際し、スロットル開度の変化により加速度合いを示す加速判定レベルを設定する。そして、加速判定レベルと設定値との比較により加速が大きいと判断されるとき、点火時期補正量の学習を禁止すると共に、このときの学習禁止期間を定める点火回数を、車速が設定値以上の高車速の場合は、車速が設定値未満の低車速の場合に比べ、大きく設定する。すなわち、自動変速機搭載車においては、スロットル開度と車速により変速パターンが定義されており、スロットル開度が変化する加速時に、車速が高い場合、キックダウンが生じてエンジン回転数が急変し、エンジン状態が安定化に至るまで時間を要し、車速が低いと、キックダウンは起こらず比較的エンジン回転数変化が少なくエンジン安定化に至るまでの時間が短い。ここで、キックダウンに影響を与える変速パターンを定める同一パラメータ、すなわち、スロットル開度と車速とを用い、スロットル開度の変化により加速度合いを示す加速判定レベルを設定して、加速判定レベルと設定値との比較により加速が大きいと判断されるとき、学習禁止期間を定める点火回数を、車速が設定値以上の高車速の場合は、車速が設定値未満の低車速の場合に比べて大きく設定し、この点火回数により加速時の学習禁止期間を定めるので、加速時のキックダウンによる影響と学習禁止期間とを的確に整合させることができる。
従って、自動変速機搭載車において加速時に、キックダウンの影響によるエンジン回転数の変化によりエンジン状態が安定化するまでの期間に対応して学習停止期間を適正に定めることができ、制御性の悪化を防止して安定した点火時期制御を確実に実現し、点火時期制御性を著しく向上することができる。
【図面の簡単な説明】
【図１】全体補正係数及び部分補正点火時期学習手順のフローチャート（その１）
【図２】全体補正係数及び部分補正点火時期学習手順のフローチャート（その２）
【図３】全体補正係数及び部分補正点火時期学習手順のフローチャート（その３）
【図４】加速判定手順のフローチャート（その１）
【図５】加速判定手順のフローチャート（その２）
【図６】気筒判別・エンジン回転数算出手順のフローチャート
【図７】点火時期設定手順のフローチャート（その１）
【図８】点火時期設定手順のフローチャート（その２）
【図９】通電・点火制御手順におけるθ２割込みのフローチャート
【図１０】通電・点火制御手順におけるθ３割込みのフローチャート
【図１１】全体補正係数学習のサブルーチンを示すフローチャート（その１）
【図１２】全体補正係数学習のサブルーチンを示すフローチャート（その２）
【図１３】全体補正係数学習のサブルーチンを示すフローチャート（その３）
【図１４】部分補正点火時期学習のサブルーチンを示すフローチャート（その１）
【図１５】部分補正点火時期学習のサブルーチンを示すフローチャート（その２）
【図１６】部分補正点火時期学習のサブルーチンを示すフローチャート（その３）
【図１７】部分補正点火時期学習のサブルーチンを示すフローチャート（その４）
【図１８】部分補正テーブルの概念図
【図１９】エンジン制御系の概略図
【図２０】クランクロータとクランク角センサの正面図
【図２１】カムロータとカム角センサの正面図
【図２２】制御装置の回路構成図
【図２３】点火タイミングを示すタイムチャート
【符号の説明】
ＬＥＶＡＣＣ      加速判定レベル
ＡＣＣＤＶＧ      設定値
ＶＳＰ          車速
ＣＯＵＮＴＡＣＣ  学習中止点火回数
【図１】
0003564146.tif 000002
【図２】
0003564146.tif 000003
【図３】
0003564146.tif 000004
【図４】
0003564146.tif 000005
【図５】
0003564146.tif 000006
【図６】
0003564146.tif 000007
【図７】
0003564146.tif 000008
【図８】
0003564146.tif 000009
【図９】
0003564146.tif 000010
【図１０】
0003564146.tif 000011
【図１１】
0003564146.tif 000012
【図１２】
0003564146.tif 000013
【図１３】
0003564146.tif 000014
【図１４】
0003564146.tif 000015
【図１５】
0003564146.tif 000016
【図１６】
0003564146.tif 000017
【図１７】
0003564146.tif 000018
【図１８】
0003564146.tif 000019
【図１９】
0003564146.tif 000020
【図２０】
0003564146.tif 000021
【図２１】
0003564146.tif 000022
【図２２】
0003564146.tif 000023
【図２３】
0003564146.tif 000024