(57)【要約】【課題】ノック回避のための点火時期の遅角とそれに続く進角の操作とを繰り返さない方法でノックを回避すると共に２種類のノック相関パラメータの推定値の精度のよい算出を可能とする装置を提供する。【解決手段】燃焼室（５）内で実際にノックが生じているか否かを検出するノック検出手段（４７）と、燃料に関するノック相関パラメータと、燃焼室内の燃焼ガス状態に関するノック相関パラメータの各推定値を有し、条件により２種類のノック相関パラメータのうちのいずれかを選択し、その選択した側のノック相関パラメータの推定値を前記ノック検出結果に基づいて算出する手段（３１）と、この算出したノック相関パラメータ推定値に基づいて点火時期を算出する手段（３１）と、この点火時期で火花点火を行う手段（３１、１３、１４）とを備える。【選択図】図１
2005315097.tif 000002
【特許請求の範囲】
【請求項１】
燃焼室内で実際にノックが生じているか否かを検出するノック検出手段と、
燃料に関するノック相関パラメータと、燃焼室内の燃焼ガス状態に関するノック相関パラメータの各推定値を有し、条件により２種類のノック相関パラメータのうちいずれかを選択し、選択した側のノック相関パラメータの推定値を前記ノック検出結果に基づいて算出するノック相関パラメータ推定値算出手段と、
この算出したノック相関パラメータ推定値に基づいて点火時期を算出する点火時期算出手段と、
この点火時期で火花点火を行う点火実行手段と
を備えることを特徴とするエンジンの点火時期制御装置。
【請求項２】
燃焼室内で実際にノックが生じているか否かを検出するノック検出手段と、
燃料に関するノック相関パラメータと、燃焼室内の燃焼ガス状態に関するノック相関パラメータの各推定値を有し、条件により２種類のノック相関パラメータのうちのいずれかを選択し、その選択した側のノック相関パラメータの推定値を前記ノック検出結果に基づいて算出するノック相関パラメータ推定値算出手段と、
前記燃料に関するノック相関パラメータ推定値に基づいて燃焼室内でのノック発生時期を予測するノック発生時期予測手段と、
このノック発生時期に基づいてノック限界点火時期を算出するノック限界点火時期算出手段と、
このノック限界点火時期で火花点火を行う点火実行手段と
を備えることを特徴とするエンジンの点火時期制御装置。
【請求項３】
燃焼室内で実際にノックが生じているか否かを検出するノック検出手段と、
燃料に関するノック相関パラメータと、燃焼室内の燃焼ガス状態に関するノック相関パラメータの各推定値を有し、条件により２種類のノック相関パラメータのうちいずれかを選択し、選択した側のノック相関パラメータの推定値を前記ノック検出結果に基づいて算出するノック相関パラメータ推定値算出手段と、
前記燃料に関するノック相関パラメータ推定値に基づいてノック限界点火時期を算出するノック限界点火時期算出手段と、
前記燃焼室内の燃焼ガス状態に関するノック相関パラメータ推定値に基づいてＭＢＴの得られる基本点火時期を算出する基本点火時期算出手段と、
前記２種類のノック相関パラメータのうち燃焼室内の燃焼ガス状態に関するノック相関パラメータを選択した際に、前記ノック限界点火時期と前記基本点火時期のうち、遅角側の点火時期で火花点火を行う点火実行手段と
を備えることを特徴とするエンジンの点火時期制御装置。
【請求項４】
燃焼室内で実際にノックが生じているか否かを検出するノック検出手段と、
燃料に関するノック相関パラメータと、燃焼室内の燃焼ガス状態に関するノック相関パラメータの各推定値を有し、条件により２種類のノック相関パラメータのうちいずれかを選択し、選択した側のノック相関パレメータの推定値を前記ノック検出結果に基づいて算出するノック相関パラメータ推定値算出手段と、
前記燃料に関するノック相関パラメータ推定値に基づいて燃焼室内でのノック発生時期を予測するノック発生時期予測手段と、
このノック発生時期に基づいてノック限界点火時期を算出するノック限界点火時期算出手段と、
前記燃焼室内の燃焼ガス状態に関するノック相関パラメータ推定値に基づいて燃焼室の燃焼開始時期における容積を算出する燃焼開始時容積算出手段と、
この燃焼開始時における容積に基づいて燃焼開始から所定クランク角までの燃焼期間を算出する燃焼期間算出手段と、
この燃焼期間に基づいてＭＢＴの得られる基本点火時期を算出する基本点火時期算出手段と、
前記２種類のノック相関パラメータのうち燃焼室内の燃焼ガス状態に関するノック相関パラメータを選択した際に、前記ノック限界点火時期と前記基本点火時期のうち、遅角側の点火時期で火花点火を行う点火実行手段と
を備えることを特徴とするエンジンの点火時期制御装置。
【請求項５】
前記ノック限界点火時期算出手段は、前記ノック発生時期と運転条件とに基づいて燃焼室のノックによる圧力上昇量を推定する圧力上昇量推定手段と、運転条件に応じた基本点火時期を算出する基本点火時期算出手段と、前記燃料室内の圧力上昇量に基づいてこの基本点火時期を遅角側に補正した値をノック限界点火時期として設定するノック限界点火時期設定手段とを含むことを特徴とする請求項２、３、４に記載のエンジンの点火時期制御装置。
【請求項６】
ガソリンを燃料とする場合に前記燃料に関するノック相関パラメータは燃料のオクタン価であることを特徴とする請求項１から４までのいずれか一つに記載のエンジンの点火時期制御装置。
【請求項７】
ガソリンとアルコールの混合燃料である場合に前記燃料に関するノック相関パラメータは混合燃料中のアルコール濃度であることを特徴とする請求項１から４までのいずれか一つに記載のエンジンの点火時期制御装置。
【請求項８】
前記燃焼室内の燃焼ガス状態に関するノック相関パラメータの推定値は圧縮比推定値であることを特徴とする請求項６または７に記載のエンジンの点火時期制御装置。
【請求項９】
複数の気筒を有し、前記２種類のノック相関パラメータのうちのいずれかを選択するための前記条件は全気筒のうちノックが発生した気筒の数であることを特徴とする請求項１から４までのいずれか一つに記載のエンジンの点火時期制御装置。
【請求項１０】
前記ノックが発生した気筒の数が複数であるとき前記燃料に関するノック相関パラメータを選択することを特徴とする請求項９に記載のエンジンの点火時期制御装置。
【請求項１１】
前記ノックが発生した気筒の数が単数であるとき前記燃焼室内の燃焼ガス状態に関するノック相関パラメータを選択することを特徴とする請求項９に記載のエンジンの点火時期制御装置。
【請求項１２】
前記２種類のノック相関パラメータのうちのいずれかを選択するための前記条件は給油を判定したか否かであることを特徴とする請求項１から４までのいずれか一つに記載のエンジンの点火時期制御装置。
【請求項１３】
前記給油を判定したときに前記燃料に関するノック相関パラメータを選択することを特徴とする請求項１２に記載のエンジンの点火時期制御装置。
【請求項１４】
前記給油を判定しないときに前記燃焼室内の燃焼ガス状態に関するノック相関パラメータを選択することを特徴とする請求項１２に記載のエンジンの点火時期制御装置。
【請求項１５】
前記燃料に関するノック相関パラメータの推定値に所定の範囲の制限を有し、前記２種類のノック相関パラメータのうちのいずれかを選択するための前記条件は前記燃料に関するノック相関パラメータの推定値が前記所定の範囲の制限を外れたか否かであることを特徴とする請求項１から４までのいずれか一つに記載のエンジンの点火時期制御装置。
【請求項１６】
前記燃料に関するノック相関パラメータの推定値が所定の範囲の制限を外れたとき前記燃焼室内の燃焼ガス状態に関するノック相関パラメータを選択することを特徴とする請求項１５に記載のエンジンの点火時期制御装置。
【請求項１７】
前記燃料に関するノック相関パラメータの推定値を前記所定の範囲の中間値に設定し直すことを特徴とする請求項１６に記載のエンジンの点火時期制御装置。
【請求項１８】
前記燃料に関するノック相関パラメータの推定値が所定の範囲の制限を外れないとき前記燃料に関するノック相関パラメータを選択することを特徴とする請求項１５に記載のエンジンの点火時期制御装置。
【請求項１９】
燃焼ガスの層流状態での燃焼速度である層流燃焼速度を算出する層流燃焼速度算出手段と、
燃焼室内の燃焼ガス体積に相当する容積を算出する燃焼ガス体積相当容積算出手段と、
所定のクランク角までに前記燃焼室内で燃焼するガスの燃焼質量割合を算出する燃焼質量割合算出手段と、
所定運転条件での燃焼ガスの燃焼のしやすさを示す反応確率を算出する反応確率算出手段と、
これら層流燃焼速度、燃焼ガス体積相当容積、燃焼質量割合及び反応確率に基づいて燃焼開始から所定クランク角までの燃焼期間を算出する燃焼期間算出手段と、
この燃焼期間に基づいてＭＢＴの得られる基本点火時期を算出する基本点火時期算出手段と
を備え、
前記燃焼期間を初期燃焼期間と主燃焼期間とに分割し、
前記圧縮比推定値に基づいて前記燃焼室の燃焼開始時期における容積を算出する燃焼開始時容積算出手段と、
この燃焼室の燃焼開始時期の容積を前記燃焼室内の燃焼ガス体積に相当する容積として用いて前記初期燃焼期間を算出する初期燃焼期間算出手段と
を備えることを特徴とする請求項８に記載のエンジンの点火時期制御装置。
【請求項２０】
燃焼室の吸気弁閉時期における容積と燃焼開始時期における容積とに基づいて吸気弁閉時期から燃焼開始時期までの有効圧縮比を算出し、
燃焼室の吸気弁閉時期の温度とこの有効圧縮比とから燃焼室の燃焼開始時期における温度を、燃焼室の吸気弁閉時期の圧力とこの有効圧縮比とから燃焼室の燃焼開始時期における圧力をそれぞれ算出し、
これら燃焼室の燃焼開始時期における温度と圧力とに基づいて前記初期燃焼期間の算出に用いる層流燃焼速度を算出する場合に、
前記圧縮比推定値に基づいて前記燃焼室の吸気弁閉時期における容積を算出することを特徴とする請求項１９に記載のエンジンの点火時期制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、エンジン（内燃機関）の点火時期制御装置に関する。
【背景技術】
【０００２】
高オクタン価燃料（オクタン価９８）と低オクタン価燃料（オクタン価９１）の２つの燃料が市販されていることに着目し、燃料キャップが開かれた場合に、まず高オクタン価燃料用のベース点火時期に設定して運転を行い、予め定めた設定領域でノッキングが発生したか否かをみてノッキングが発生すれば高オクタン価燃料であると、またノッキングが発生しなければ低オクタン価燃料であると判定し、高オクタン価燃料であると判定したときにはそのまま運転を続け、低オクタン価燃料であると判定したときには低オクタン価燃料用のベース点火時期に切換えて運転を行うものがある（特許文献１参照）。
【特許文献１】特開平５−２８０４５４号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
ところで、海外市場においては様々なオクタン価の燃料が用いられ予めオクタン価の知り得ていない市場がある。こうした市場で販売されている燃料に対して上記特許文献１の技術を適用し、低オクタン価燃料用のベース点火時期に設定されている場合において、現地での燃料のオクタン価がこの低オクタン価燃料用のベース点火時期のマッチングに用いた燃料のオクタン価より小さいときにノックが生じる。
【０００４】
この場合に、上記特許文献１の技術でも従来技術と同様にノックセンサによるノック制御を行っているので、ノックセンサによりノックが生じたことを検出したときにはベース点火時期を第１の所定値だけステップ的に大きく遅角し、その後はベース点火時期を第２の所定値ずつ徐々に進角してゆく操作を行い、この操作における点火時期の進角により再びノックセンサによりノックが生じたことを検出すると上記の操作を繰り返すことになる。
【０００５】
このように、現地での燃料のオクタン価が低オクタン価燃料用のベース点火時期のマッチングに用いた燃料のオクタン価より小さくてノックが生じたとしても、上記特許文献１の技術によればノック回避のための点火時期の遅角とそれに続く進角の操作が繰り返され、その操作によりノックは回避できるのであるが、ノック回避のための点火時期の遅角により燃費悪化と出力低下とが生じる。こうした燃費悪化、出力低下を避けようとすれば、ベース点火時期算出用のマップを、最大のオクタン価から最小のオクタン価までの複数の異なるオクタン価毎に備えさせることであるが、この方法ではオクタン価毎のベース点火時期算出用のマップを格納するためのＲＯＭ容量が大きくなってしまう。
【０００６】
上記のオクタン価はガソリンを燃料とする場合におけるノックと相関を有するパラメータであり、ガソリンとアルコールの混合燃料の場合には混合燃料中のアルコール濃度がノック相関パラメータである。この混合燃料中のアルコール濃度についても海外市場においては予め知り得ていない市場があり、そうした市場で販売されている混合燃料に対しても上記特許文献１の技術をそのまま適用し、高アルコール濃度の混合燃料用のベース点火時期に設定されている場合において、現地での混合燃料のアルコール濃度が、高アルコール濃度の混合燃料用のベース点火時期のマッチングに用いた混合燃料のアルコール濃度よりさらに高いときにノックが生じる。これに対してノックセンサによるノック回避のための点火時期の遅角とそれに続く進角の操作を実行するのでは燃費悪化、出力低下が生じ、これを避けようとして、ベース点火時期算出用のマップを、最低のアルコール濃度から最高のアルコール濃度までの複数の異なるアルコール濃度毎に備えさせるのでは、アルコール濃度毎のベース点火時期算出用のマップを格納するためのＲＯＭ容量が大きくなる。
【０００７】
一方、圧縮比もノック相関パラメータである。予めオクタン価の定まっている燃料を使用する場合に、圧縮比はエンジン仕様により定まっているので、そのエンジン仕様により定まっている圧縮比のときノックが生じないようにベース点火時期をマッチングすることになる。しかしながら、何らかの原因で実際の圧縮比が、エンジン仕様の圧縮比より高くなった場合にノックが生じる。このとき、ノックセンサに基づいてノック回避のための点火時期の遅角とそれに続く進角の操作とを繰り返すのでは、やはり燃費悪化、出力低下が生じる。
【０００８】
このように、使用する燃料と燃焼室内の燃焼ガス状態とがノックに及ぼす影響の主要因であるので、オクタン価やアルコール濃度を燃料に関するノック相関パラメータ、圧縮比を燃焼室内の燃焼ガス状態に関するノック相関パラメータとして位置づけ、これら２種類のノック相関パラメータ推定値を別々に導入することが考えられる。
【０００９】
しかしながら、使用燃料の変更によりノックが生じた場合においてそのノック検出結果を燃焼室内の燃焼ガス状態に関するノック相関パラメータの推定値に反映させたのでは燃焼室内の燃焼ガス状態に関するノック相関パラメータの推定値に新たな誤差が生じ、かつ燃料に関するノック相関パラメータの推定値と、燃料に関するノック相関パラメータの実際値との偏差が解消されることもない。この逆に、製作バラツキや燃焼室内へのデポジットの付着による圧縮比の増大に起因してノックが生じた場合においてそのノック検出結果を燃料に関するノック相関パラメータの推定値に反映させたのでは燃料は変更していないのであるから燃料に関するノック相関パラメータの推定値に新たな誤差が生じ、かつ燃焼室内の燃焼ガス状態に関するノック相関パラメータの推定値と、燃焼室内の燃焼ガス状態に関するノック相関パラメータの実際値との偏差が解消されることもない。
【００１０】
このように、２つのパラメータを導入したときには適切な条件でいずれかのパラメータを選択する必要がある。
【００１１】
そこで本発明は、ノックセンサによるノック検出結果を、点火時期ではなくノック相関パラメータにフィードバックすると共に２種類のノック相関パラメータを導入し、条件によりいずれかのパラメータを選択することにより、従来装置のようにノック回避のための点火時期の遅角とそれに続く進角の操作とを繰り返さない方法でノックを回避すると共に２種類のノック相関パラメータの推定値の精度のよい算出を可能とする装置を提供することを目的とする。
【課題を解決するための手段】
【００１２】
本発明は、燃焼室内で実際にノックが生じているか否かを検出し、燃料に関するノック相関パラメータと、燃焼室内の燃焼ガス状態に関するノック相関パラメータの各推定値を有し、条件により２種類のノック相関パラメータのうちのいずれかを選択し、その選択した側のノック相関パラメータの推定値を前記ノック検出結果に基づいて算出する。
【００１３】
そして、前記算出したノック相関パラメータ推定値に基づいて点火時期を算出し、この点火時期で火花点火を行うように構成する。具体的には前記燃料に関するノック相関パラメータ推定値に基づいて燃焼室内でのノック発生時期（θｋｎｋ）を予測し、このノック発生時期に基づいてノック限界点火時期（ＫＮＯＣＫｃａｌ）を算出し、このノック限界点火時期（ＫＮＯＣＫｃａｌ）で火花点火を行うように構成する。
【００１４】
または、前記燃料に関するノック相関パラメータ推定値に基づいてノック限界点火時期（ＫＮＯＣＫｃａｌ）を算出し、前記燃焼室内の燃焼ガス状態に関するノック相関パラメータ推定値に基づいてＭＢＴの得られる基本点火時期（ＭＢＴＣＡＬ）を算出し、前記２種類のノック相関パラメータのうち燃焼室内の燃焼ガス状態に関するノック相関パラメータを選択した際に、前記ノック限界点火時期（ＫＮＯＣＫｃａｌ）と前記基本点火時期（ＭＢＴＣＡＬ）のうち、遅角側の点火時期で火花点火を行うように構成する。
【００１５】
または、前記燃料に関するノック相関パラメータ推定値に基づいて燃焼室内でのノック発生時期（θｋｎｋ）を予測し、このノック発生時期（θｋｎｋ）に基づいてノック限界点火時期（ＫＮＯＣＫｃａｌ）を算出し、前記燃焼室内の燃焼ガス状態に関するノック相関パラメータ推定値に基づいて燃焼室の燃焼開始時期における容積（Ｖ０）を算出し、この燃焼開始時における容積（Ｖ０）に基づいて燃焼開始から所定クランク角までの燃焼期間（ＢＵＲＮ）を算出し、この燃焼期間（ＢＵＲＮ）に基づいてＭＢＴの得られる基本点火時期（ＭＢＴＣＡＬ）を算出し、前記２種類のノック相関パラメータのうち燃焼室内の燃焼ガス状態に関するノック相関パラメータを選択した際に、前記ノック限界点火時期（ＫＮＯＣＫｃａｌ）と前記基本点火時期（ＭＢＴＣＡＬ）のうち、遅角側の点火時期で火花点火を行うように構成する。
【発明の効果】
【００１６】
本発明によれば、使用する燃料と燃焼室内の燃焼ガス状態とがノックに及ぼす影響の主要因であることに対応して、本発明によれば、燃料に関するノック相関パラメータと、燃焼室内の燃焼ガス状態に関するノック相関パラメータの各推定値を導入し、燃料に関するノック相関パラメータの推定値と燃焼室内の燃焼ガス状態に関するノック相関パラメータの推定値とを条件により切換えて算出する、つまり使用する燃料の変更に起因してノックが生じているときには燃料に関するノック相関パラメータの推定値を算出し、製作バラツキや燃焼室内へのデポジットの付着に起因してノックが生じているときには燃焼室内の燃焼ガス状態に関するノック相関パラメータの推定値を算出するようにしたので、種類の異なるいずれのノック相関パラメータの推定値をも精度よく算出することができる。
【００１７】
また、ノック検出結果に基づいてノック相関パラメータの推定値を算出し（ノック検出結果をノック相関パラメータにフィードバック）し、その算出したノック相関パラメータ推定値に基づいて点火時期を算出し、この点火時期で火花点火を行う。具体的にはそのノック相関パラメータ推定値に基づいて燃焼室内でのノック発生時期を予測し、このノック発生時期に基づいてノック限界点火時期を算出し、このノック限界点火時期で火花点火を行い、または燃料に関するノック相関パラメータ推定値に基づいてノック限界点火時期を算出し、前記燃焼室内の燃焼ガス状態に関するノック相関パラメータ推定値に基づいてＭＢＴの得られる基本点火時期を算出し、前記２種類のノック相関パラメータのうち燃焼室内の燃焼ガス状態に関するノック相関パラメータを選択した際に、前記ノック限界点火時期と前記基本点火時期のうち、遅角側の点火時期で火花点火を行い、または燃料に関するノック相関パラメータ推定値に基づいて燃焼室内でのノック発生時期を予測し、このノック発生時期に基づいてノック限界点火時期を算出し、前記燃焼室内の燃焼ガス状態に関するノック相関パラメータ推定値に基づいて燃焼室の燃焼開始時期における容積を算出し、この燃焼開始時における容積に基づいて燃焼開始から所定クランク角までの燃焼期間を算出し、この燃焼期間に基づいてＭＢＴの得られる基本点火時期を算出し、前記２種類のノック相関パラメータのうち燃焼室内の燃焼ガス状態に関するノック相関パラメータを選択した際に、前記ノック限界点火時期と前記基本点火時期のうち、遅角側の点火時期で火花点火を行うようにしたので、燃料のオクタン価や混合燃料中のアルコール濃度を予め知り得ていない市場で販売される燃料を使用する場合においても、運転状態によらず、ノック検出結果を点火時期にフィードバックする従来装置のようにノック回避のための点火時期の遅角とそれに続く進角の操作とが繰り返されることがない。このため、加速時や減速時などの過渡でもノック限界点火時期を追従できるので、燃費悪化、出力低下を防ぐことができる。
【発明を実施するための最良の形態】
【００１８】
以下、図面に基づき本発明の実施形態について説明する。
【００１９】
図１は、本発明のシステムを説明するための概略図である。
【００２０】
空気は吸気コレクタ２に蓄えられた後、吸気マニホールド３を介して各気筒の燃焼室５に導入される。燃料（ガソリン）は各気筒の吸気ポート４に配置された燃料インジェクタ２１より噴射供給される。空気中に噴射された燃料は気化しつつ空気と混合してガス（混合気）を作り、燃焼室５に流入する。この混合気は吸気弁１５が閉じることで燃焼室５内に閉じこめられ、ピストン６の上昇によって圧縮される。
【００２１】
この圧縮混合気に対して高圧火花により点火を行うため、パワートランジスタ内蔵の点火コイルを各気筒に配した電子配電システムの点火装置１１を備える。すなわち、点火装置１１は、バッテリからの電気エネルギーを蓄える点火コイル１３と、点火コイル１３の一次側への通電、遮断を行うパワートランジスタと、燃焼室５の天井に設けられ点火コイル１３の一次電流の遮断によって点火コイル１３の二次側に発生する高電圧を受けて、火花放電を行う点火プラグ１４とからなっている。
【００２２】
圧縮上死点より少し手前で点火プラグ１４により火花が飛ばされ圧縮混合気に着火されると、火炎が広がりやがて爆発的に燃焼し、この燃焼によるガス圧がピストン６を押し下げる仕事を行う。この仕事はクランクシャフト７の回転力として取り出される。燃焼後のガス（排気）は排気弁１６が開いたとき排気通路８へと排出される。
【００２３】
排気通路８には三元触媒９を備える。三元触媒９は排気の空燃比が理論空燃比を中心とした狭い範囲（ウインドウ）にあるとき、排気に含まれるＨＣ、ＣＯ、ＮＯｘといった有害三成分を同時に効率よく除去できる。空燃比は吸入空気量と燃料量の比であるので、エンジンの１サイクル（４サイクルエンジンではクランク角で７２０°区間）当たりに燃焼室５に導入される吸入空気量と、燃料インジェクタ２１からの燃料噴射量との比が理論空燃比となるように、エンジンコントローラ３１ではエアフローメータ３２からの吸入空気流量の信号とクランク角センサ（３３、３４）からの信号に基づいて燃料インジェクタ２１からの燃料噴射量を定めると共に、三元触媒９の上流に設けたＯ2センサ３５からの信号に基づいて空燃比をフィードバック制御している。
【００２４】
吸気コレクタ２の上流には絞り弁２３がスロットルモータ２４により駆動される、いわゆる電子制御スロットル２２を備える。運転者が要求するトルクはアクセルペダル４１の踏み込み量（アクセル開度）に現れるので、エンジンコントローラ３１ではアクセルセンサ４２からの信号に基づいて目標トルクを定め、この目標トルクを実現するための目標空気量を定め、この目標空気量が得られるようにスロットルモータ２４を介して絞り弁２３の開度を制御する。
【００２５】
吸気弁用カムシャフト２５、排気弁用カムシャフト２６及びクランクシャフト７の各前部にはそれぞれカムスプロケット、クランクスプロケットが取り付けられ、これらスプロケットにタイミングチェーン（図示しない）を掛け回すことで、カムシャフト２５、２６がエンジンのクランクシャフト７により駆動されるのであるが、このカムスプロケットと吸気弁用カムシャフト２５との間に介在して、作動角一定のまま吸気弁用カムの位相を連続的に制御し得る可変吸気バルブタイミングコントロール機構（以下、「吸気ＶＴＣ機構」という。）２７と、カムスプロケットと排気弁用カムシャフト２６との間に介在して、作動角一定のまま排気弁用カムの位相を連続的に制御し得る可変排気バルブタイミングコントロール機構（以下、「排気ＶＴＣ機構」という。）２８とを備える。吸気弁１５の開閉時期や排気弁１６の開閉時期を変えると燃焼室５に残留する不活性ガスの量が変化する。燃焼室５内の不活性ガスの量が増えるほどポンピングロスが減って燃費がよくなるので、運転条件によりどのくらいの不活性ガスが燃焼室５内に残留したらよいかを目標吸気弁閉時期や目標排気弁閉時期にして予め定めており、エンジンコントローラ３１ではそのときの運転条件（エンジンの負荷と回転速度）より目標吸気弁閉時期と目標排気弁閉時期を定め、それら目標値が得られるように吸気ＶＴＣ機構２７、排気ＶＴＣ機構２８の各アクチュエータを介して吸気弁閉時期と排気弁閉時期を制御する。
【００２６】
吸気温度センサ４３からの吸気温度の信号、吸気圧力センサ４４からの吸気圧力の信号、排気温度センサ４５からの排気温度の信号、排気圧力センサ４６からの排気圧力の信号が、水温センサ３７からの冷却水温の信号と共に入力されるエンジンコントローラ３１では、パワートランジスタ１３を介して点火プラグ１４の一次側電流の遮断時期である点火時期を制御する。
【００２７】
この場合に、ノックが生じていないときの点火時期は運転条件に応じた基本点火時期ＭＢＴＣＡＬであるが、エンジンの高負荷低回転速度域などでは燃焼室５内にノックが生じることがあり、ノックが生じるとエンジンの耐久性が低下するので、エンジンコントローラ３１ではノック制御を行う。
【００２８】
この場合に、一般的なノック制御では、ノックセンサによりノックが生じたことを検出したときにはベース点火時期を第１の所定値だけステップ的に大きく遅角し、その後はベース点火時期を第２の所定値ずつ徐々に進角してゆく操作を行い、この操作における点火時期の進角により再びノックセンサによりノックが生じたことを検出すると上記の操作を繰り返すのであるが、本実施形態では、ノックセンサ４７（ノック検出手段）によるノック検出結果を、点火時期ではなく燃料のオクタン価（ノック相関パラメータ）の推定値ＯＣＴＥＳＴにフィードバックすることにより、従来装置のようにノック回避のための点火時期の遅角とそれに続く進角の操作とを繰り返さない方法でノックを回避する。すなわち、ノックセンサ４７によるノック検出結果に基づいてオクタン価推定値ＯＣＴＥＳＴを算出し、このオクタン価推定値ＯＣＴＥＳＴに基づいて燃焼室５内での自着火時期θｋｎｋ（ノック発生時期）を予測し、この自着火時期θｋｎｋに基づいてノック限界点火時期ＫＮＯＣＫｃａｌを算出する。ノックが生じるときにはこのノック限界点火時期ＫＮＯＣＫｃａｌのほうが上記の基本点火時期ＭＢＴＣＡＬより遅角側の値となり、このノック限界点火時期ＫＮＯＣＫｃａｌを点火時期として火花点火を行う。
【００２９】
図２は点火時期制御の全体の流れを示すフローである。このフローは一定時間毎に実行するフローではなく操作の流れを示している。なお、ステップ３９１〜３９６については後述する。
【００３０】
ステップ１、２では基本点火時期ＭＢＴｃａｌ［ｄｅｇＢＴＤＣ］、ＭＢＴＣＡＬｉ［ｄｅｇＢＴＤＣ］、ノック限界点火時期ＫＮＯＣＫｃａｌ［ｄｅｇＢＴＤＣ］をそれぞれ算出する。
【００３１】
ここでは、基本点火時期ＭＢＴｃａｌの算出を先に説明する。まず、燃焼解析に基づく点火時期制御を概説する（基本的な考え方は特開２００３−１４８２３６公報に記載されている）。
【００３２】
図３に示すようにＭＢＴ（最大トルクの得られる最小進角値）で混合気に点火した場合に混合気の燃焼圧力が最大値Ｐｍａｘとなるクランク角を基準クランク角θＰＭＡＸ［ｄｅｇＡＴＤＣ］とする。基準クランク角θＰＭＡＸは燃焼方式によらずほぼ一定であり、一般に圧縮上死点後１２〜１５度、最大で圧縮上死点後１０〜２０度の範囲にある。
【００３３】
図４に火花点火エンジンにおける燃焼室内の燃焼解析により得られた燃焼質量割合ＢＲ（燃焼ガス質量割合）の変化を示す。燃焼室に供給された燃料に対する燃焼質量の比率を表す燃焼質量割合ＢＲは、点火時に０％であり、完全燃焼によって１００％に達する。基準クランク角θＰＭＡＸにおける燃焼質量割合は一定で約６０％であることが実験により確かめられている。
【００３４】
燃焼質量割合ＢＲが０％から基準クランク角θＰＭＡＸ相当の約６０％に達するまでの変化代に相当する燃焼期間は、燃焼開始直後で燃焼質量割合にも燃焼圧力にもほとんど変化のない期間である初期燃焼期間と、燃焼質量割合と燃焼圧力が急激に増加する主燃焼期間とに分けられる。初期燃焼期間は、燃焼開始から火炎核が形成されるまでの段階であり、火炎核が形成されるのは燃焼質量割合が０％から２％〜１０％まで変化したときである。この初期燃焼期間中は、燃焼圧力や燃焼温度の上昇速度が小さく、燃焼質量割合の変化に対して初期燃焼期間は長い。初期燃焼期間の長さは燃焼室内の温度や圧力の変化の影響を受けやすい。
【００３５】
一方、主燃焼期間においては、火炎核から外側へと火炎が伝播するのであり、その火炎速度（つまり燃焼速度）が急上昇する。そのため、主燃焼期間の燃焼質量割合の変化は初期燃焼期間の燃焼質量割合の変化に比べて大きい。
【００３６】
エンジンコントローラ３１では、燃焼質量割合が２％に達する（変化する）までを初期燃焼期間ＢＵＲＮ１［ｄｅｇ］とし、初期燃焼期間ＢＵＲＮ１の終了後、基準クランク角θＰＭＡＸに至るまでの区間（燃焼室量割合でいえば２％より約６０％に達するまでの間）を主燃焼期間ＢＵＲＮ２［ｄｅｇ］として区別する。そして、初期燃焼期間ＢＵＲＮ１に主燃焼期間ＢＵＲＮ２を加えた合計である燃焼期間ＢＵＲＮ［ｄｅｇ］を算出し、この燃焼期間ＢＵＲＮから基準クランク角θＰＭＡＸ［ｄｅｇＡＴＤＣ］を差し引き、さらに後述する点火無駄時間相当クランク角ＩＧＮＤＥＡＤ［ｄｅｇ］を加えたクランク角位置を、ＭＢＴの得られる点火時期である基本点火時期ＭＢＴＣＡＬ［ｄｅｇＢＴＤＣ］として設定する。
【００３７】
火炎核の形成される初期燃焼期間での燃焼室５内の圧力、温度は、点火時の圧力、温度とほぼ等価になるが、これから点火時期を算出しようとしているのに、最初から正確な点火時期を設定することはできない。そこで、図１３に示したように基本点火時期の前回値を前回燃焼開始時期ＭＢＴＣＹＣＬ［ｄｅｇＢＴＤＣ］として算出し（ステップ４４）、この値を図１０に示したように初期燃焼期間の算出に用いるようにし（ステップ１６２）、初期燃焼期間の算出をサイクリックに繰り返すことで、精度の高い結果を時間遅れなしに出すようにしている。
【００３８】
次に、エンジンコントローラ３１で実行される基本点火時期ＭＢＴＣＡＬの算出を以下のフローチャートを参照しながら詳述する。
【００３９】
図５は点火時期の算出に必要な各種の物理量を算出するためのもので、一定時間毎（例えば１０ｍｓｅｃ毎）に実行する。なお、ステップ４０１〜４０４については後述する。
【００４０】
まずステップ１１では、吸気弁閉時期ＩＶＣ［ｄｅｇＢＴＤＣ］、温度センサ４３により検出されるコレクタ内温度ＴＣＯＬ［Ｋ］、圧力センサ４４により検出されるコレクタ内圧力ＰＣＯＬ［Ｐａ］、温度センサ４５により検出される排気温度ＴＥＸＨ［Ｋ］、内部不活性ガス率ＭＲＥＳＦＲ［％］、温度センサ３７により検出される冷却水温ＴＷＫ［Ｋ］、目標当量比ＴＦＢＹＡ、クランク角センサにより検出されるエンジン回転速度ＮＲＰＭ［ｒｐｍ］、点火無駄時間ＤＥＡＤＴＩＭＥ［μｓｅｃ］を読み込む。
【００４１】
ここで、クランク角センサはクランクシャフト７のポジションを検出するポジションセンサ３３と、吸気用カムシャフト２５のポジションを検出するフェーズセンサ３４とからなり、これら２つのセンサ３３、３４からの信号に基づいてエンジン回転速度ＮＲＰＭ［ｒｐｍ］が算出されている。
【００４２】
吸気弁閉時期ＩＶＣは吸気ＶＴＣ機構２７に与える指令値から既知である。あるいはフェーズセンサ３４により実際の吸気弁閉時期を検出してもかまわない。
【００４３】
内部不活性ガス率ＭＲＥＳＦＲは燃焼室内に残留する不活性ガス量を燃焼室内の総ガス量で除した値で、その算出については後述する。点火無駄時間ＤＥＡＤＴＩＭＥは一定値である。
【００４４】
目標当量比ＴＦＢＹＡは図示しない燃料噴射量の算出フローにおいて算出されている。目標当量比ＴＦＢＹＡは無名数であり、理論空燃比を１４．７とすると、次式により表される値である。
【００４５】
ＴＦＢＹＡ＝１４．７／目標空燃比                                  …（１）
例えば（１）式より目標空燃比が理論空燃比のときＴＦＢＹＡ＝１．０となり、目標空燃比が例えば２２．０といったリーン側の値であるとき、ＴＦＢＹＡは１．０未満の正の値である。
【００４６】
ステップ１２では、燃焼室５の吸気弁閉時期ＩＶＣにおける容積（つまり圧縮開始時期での容積）ＶＩＶＣ［ｍ3］を算出する。燃焼室５の吸気弁閉時期における容積ＶＩＶＣは、ピストン６のストローク位置によって決まる。ピストン６のストローク位置はエンジンのクランク角位置によって決まる。
【００４７】
図６を参照して、エンジンのクランクシャフト７１の回転中心７２がシリンダの中心軸７３からオフセットしている場合を考える。コネクティングロッド７４、コネクティングロッド７４とクランクシャフト７１との結節点７５、コネクティングロッド７４とピストンをつなぐピストンピン７６が図に示す関係にあるとする。このときの、燃焼室５の吸気弁閉時期における容積ＶＩＶＣは次式（２）〜（６）で表すことができる。
【００４８】
ＶＩＶＣ＝ｆ１（θivc）＝Ｖｃ＋（π／４）Ｄ2・Ｈivc                …（２）
Ｖｃ＝（π／４）Ｄ2・Ｈx／（ε−１）                             …（３）
Ｈivc＝｛（ＣＮＤ＋ＳＴ2／２）−（ＣＲoff−ＰＩＳoff）2｝1/2
−｛（ＳＴ／２）・cos（θivc＋θoff）｝
＋（ＣＮＤ2−Ｘ2）1/2                                   …（４）
Ｘ  ＝（ＳＴ／２）・sin（θivc＋θoff）−ＣＲoff＋ＰＩＳoff      …（５）
θoff＝arcsin｛（ＣＲoff−ＰＩＳoff）／（ＣＮＤ・（ＳＴ／２））｝…（６）
ただし、Ｖｃ     ：隙間容積［ｍ3］、
ε       ：圧縮比、
Ｄ       ：シリンダボア径［ｍ］、
ＳＴ     ：ピストンの全ストローク［ｍ］、
Ｈivc    ：吸気弁閉時期におけるピストンピン７６の
ＴＤＣからの距離［ｍ］、
Ｈx      ：ピストンピン７６のＴＤＣからの距離の最大値と最小値の
差［ｍ］、
ＣＮＤ   ：コネクティングロッド７４の長さ［ｍ］、
ＣＲoff  ：結節点７５のシリンダ中心軸７３からのオフセット距離
［ｍ］、
ＰＩＳoff：クランクシャフト回転中心７２のシリンダ中心軸７３から 
のオフセット距離［ｍ］、
θivc    ：吸気弁閉時期のクランク角［ｄｅｇＡＴＤＣ］、
θoff    ：ピストンピン７６とクランクシャフト回転中心７２とを結
ぶ線がＴＤＣにおいて垂直線となす角度［ｄｅｇ］、
Ｘ       ：結節点７５とピストンピン７６との水平距離［ｍ］、
吸気弁閉時期のクランク角θivcは前述のように、エンジンコントローラ３１から吸気ＶＴＣ機構２７への指令信号によって決まるので、既知である。式（２）〜（６）にこのときのクランク角θivc（＝ＩＶＣ）を代入すれば、燃焼室５の吸気弁閉時期における容積ＶＩＶＣを算出することができる。したがって、実用上は燃焼室５の吸気弁閉時期における容積ＶＩＶＣは吸気弁閉時期ＩＶＣをパラメータとするテーブルで設定したものを用いる。吸気ＶＴＣ機構２７を備えないときには定数で与えることができる。
【００４９】
ステップ１３では、燃焼室５の吸気弁閉時期ＩＶＣにおける温度（つまり圧縮開始時期温度）ＴＩＮＩ［Ｋ］を算出する。燃焼室５に流入するガスの温度は、燃焼室５に流入する新気と燃焼室５に残留する不活性ガスとが混じったガスの温度であり、燃焼室５に流入する新気の温度は吸気コレクタ２内の新気温度ＴＣＯＬに等しく、また燃焼室５内に残留する不活性ガスの温度は排気ポート部近傍の排気温度ＴＥＸＨで近似できるので、燃焼室５の吸気弁閉時期ＩＶＣにおける温度ＴＩＮＩは吸気弁閉時期ＩＶＣになったタイミングでの、吸気コレクタ２内の新気温度ＴＣＯＬ、排気温度ＴＥＸＨ、燃焼室５内に残留する不活性ガスの割合である内部不活性ガス率ＭＲＥＳＦＲから次式により求めることができる。
【００５０】
ＴＩＮＩ＝ＴＥＸＨ×ＭＲＥＳＦＲ＋ＴＣＯＬ×（１−ＭＲＥＳＦＲ）…（７）
ステップ１４では燃焼室５の吸気弁閉時期ＩＶＣにおける圧力（つまり圧縮開始時期圧力）ＰＩＮＩ［Ｐａ］を算出する。すなわち、吸気弁閉時期ＩＶＣになったタイミングでのコレクタ内圧力ＰＣＯＬを吸気弁閉時期ＩＶＣにおける圧力ＰＩＮＩとして取り込む。
【００５１】
ステップ１５では、燃焼室５内の混合気の燃えやすさを表す反応確率ＲＰＲＯＢＡ［％］を算出する。反応確率ＲＰＲＯＢＡは無次元の値であり、残留不活性ガス率ＭＲＥＳＦＲ、冷却水温ＴＷＫ［Ｋ］、目標当量比ＴＦＢＹＡの３つのパラメータに依存するので、次式により表すことができる。
【００５２】
ＲＰＲＯＢＡ＝ｆ３（ＭＲＥＳＦＲ、ＴＷＫ、ＴＦＢＹＡ）          …（８）
具体的に説明すると、ＭＲＥＳＦＲ、ＴＷＫ、ＴＦＢＹＡの３つのパラメータの組み合わせによって得られる反応確率の最大値を１００％とし、これらのパラメータと反応確率ＲＰＲＯＢＡの関係を実験的に求め、求めた反応確率ＲＰＲＯＢＡをパラメータに応じたテーブルとしてエンジンコントローラ３１のメモリに予め格納しておく。ステップ１５ではパラメータに応じてこのテーブルを検索することにより反応確率ＲＰＲＯＢＡを求める。
【００５３】
具体的には、冷却水温ＴＷＫに応じて図７に示すような特性を有する水温補正係数のテーブルと、同様に設定された内部不活性ガス率補正係数のテーブル（図示しない）と、目標当量比ＴＦＢＹＡに応じて図８に示すような特性を有する当量比補正係数のテーブルを予めメモリに格納しておく。各補正係数の最大値はそれぞれ１．０であり、３種類の補正係数の積に反応確率の最大値１００％を掛け合わせることで、反応確率ＲＰＲＯＢＡを算出する。
【００５４】
各テーブルを説明すると、図７に示す水温補正係数は冷却水温ＴＷＫが高いほど大きく、冷却水温ＴＷＫが８０℃以上では１．０になる。図８に示す当量比補正係数は目標当量比ＴＦＢＹＡが１．０のとき、つまり理論空燃比のときに最大値の１．０となり、目標当量比が１．０より大きくても小さくても当量比補正係数は減少する。内部不活性ガス率補正係数は図示しないが、内部不活性ガス率ＭＲＥＳＦＲがゼロの場合に１．０となる。
【００５５】
ステップ１６では、基準クランク角θＰＭＡＸ［ｄｅｇＡＴＤＣ］を算出する。前述のように基準クランク角θＰＭＡＸはあまり変動しないが、それでもエンジン回転速度ＮＲＰＭの上昇に応じて進角する傾向があるため、基準クランク角θＰＭＡＸはエンジン回転速度ＮＲＰＭの関数として次式で表すことができる。
【００５６】
θＰＭＡＸ＝ｆ４（ＮＲＰＭ）                                    …（９）
具体的にはエンジン回転速度ＮＲＰＭから、エンジンコントローラ３１のメモリに予め格納された図９に示す特性のテーブルを検索することにより基準クランク角θＰＭＡＸを求める。算出を容易にするために、基準クランク角θＰＭＡＸを一定とみなすことも可能である。
【００５７】
最後にステップ１７では、点火無駄時間相当クランク角ＩＧＮＤＥＡＤ［ｄｅｇ］を算出する。点火無駄時間相当クランク角ＩＧＮＤＥＡＤは、エンジンコントローラ３１から点火コイル１３の一次電流を遮断する信号を出力したタイミングから点火プラグ１４が実際に点火するまでのクランク角区間で、次式により表すことができる。
【００５８】
ＩＧＮＤＥＡＤ＝ｆ５（ＤＥＡＤＴＩＭＥ、ＮＲＰＭ）              …（１０）
ここでは、点火無駄時間ＤＥＡＤＴＩＭＥを２００μｓｅｃとする。（１０）式は、エンジン回転速度ＮＲＰＭから点火無駄時間ＤＥＡＤＴＩＭＥに相当するクランク角である点火無駄時間相当クランク角ＩＧＮＤＥＡＤを算出するためのものである。
【００５９】
図１０は初期燃焼期間ＢＵＲＮ１［ｄｅｇ］を算出するためのもの、また図１２は主燃焼期間ＢＵＲＮ２［ｄｅｇ］を算出するためのもので、一定時間毎（例えば１０ｍｓｅｃ毎）に実行する。図１０、図１２は図５に続けて実行する。図１０、図１２はどちらを先に実行してもかまわない。なお、図１０のステップ４１１〜４１６については後述する。
【００６０】
まず図１０から説明すると、ステップ１６１では、前回燃焼開始時期ＭＢＴＣＹＣＬ［ｄｅｇＢＴＤＣ］、図５のステップ１２で算出されている燃焼室５の吸気弁閉時期における容積ＶＩＶＣ［ｍ3］、図５のステップ１３で算出されている燃焼室５の吸気弁閉時期における温度ＴＩＮＩ［Ｋ］、図５のステップ１４で算出されている燃焼室５の吸気弁閉時期における圧力ＰＩＮＩ［Ｐａ］、エンジン回転速度ＮＲＰＭ［ｒｐｍ］、図５のステップ１５で算出されている反応確率ＲＰＲＯＢＡ［％］を読み込む。
【００６１】
ここで、前回燃焼開始時期ＭＢＴＣＹＣＬは、基本点火時期ＭＢＴＣＡＬの［ｄｅｇＢＴＤＣ］の１サイクル前の値であり、その算出については図１３により後述する。
【００６２】
ステップ１６２では燃焼室５の燃焼開始時期における容積Ｖ０［ｍ3］を算出する。前述したように、ここでの点火時期（燃焼開始時期）は今回のサイクルで演算する基本点火時期ＭＢＴＣＡＬではなく基本点火時期の１サイクル前の値である。すなわち、基本点火時期の１サイクル前の値であるＭＢＴＣＹＣＬから次式により燃焼室５の燃焼開始時期における容積Ｖ０を算出する。
【００６３】
Ｖ０＝ｆ６（ＭＢＴＣＹＣＬ）                                  …（１１）
具体的には前回燃焼開始時期ＭＢＴＣＹＣＬにおけるピストン６のストローク位置と、燃焼室５のボア径から、燃焼室５のＭＢＴＣＹＣＬにおける容積Ｖ０を算出する。図５のステップ１２では、燃焼室５の吸気弁閉時期ＩＶＣにおける容積ＶＩＶＣを、吸気弁閉時期をパラメータとする吸気弁閉時期容積のテーブルを検索することにより求めたが、ここではＭＢＴＣＹＣＬをパラメータとする前回燃焼開始時期容積のテーブルを検索することにより、燃焼室５の前回燃焼開始時期ＭＢＴＣＹＣＬにおける容積Ｖ０を求めればよい。
【００６４】
ステップ１６３では燃焼開始時期における有効圧縮比Ｅｃを算出する。有効圧縮比Ｅｃは無次元の値であり、次式に示すように燃焼室５の燃焼開始時期における容積Ｖ０を燃焼室５の吸気弁閉時期における容積ＶＩＶＣで除した値である。
【００６５】
Ｅｃ＝ｆ７（Ｖ０、ＶＩＶＣ）
＝（Ｖ０）／ＶＩＶＣ                                      …（１２）
ステップ１６４では吸気弁閉時期ＩＶＣから燃焼開始時期に至る間の燃焼室５内の温度上昇率ＴＣＯＭＰを次式に示すように有効圧縮比Ｅｃに基づいて算出する。
【００６６】
ＴＣＯＭＰ＝ｆ８（Ｅｃ）＝Ｅｃ＾（κ−１）                    …（１３）
ただし、κ：比熱比、
（１３）式は断熱圧縮されるガスの温度上昇率の式である。なお、（１３）式右辺の「＾」は累乗計算を表している。この記号は後述する式でも使用する。
【００６７】
κは断熱圧縮されるガスの定圧比熱を定容比熱で除した値で、断熱圧縮されるガスが空気であればκ＝１．４であり、簡単にはこの値を用いればよい。ただし、混合気に対してκの値を実験的に求めることで、一層の算出精度の向上が可能である。
【００６８】
図１１は（１３）式を図示したものである。従って、このような特性のテーブルを予めエンジンコントローラ３１のメモリに格納しておき、有効圧縮比Ｅｃに基づき当該テーブルを検索することにより温度上昇率ＴＣＯＭＰを求めることも可能である。
【００６９】
ステップ１６５では、燃焼室５の燃焼開始時期における温度Ｔ０［Ｋ］を、燃焼室５の吸気弁閉時期における温度ＴＩＮＩに温度上昇率ＴＣＯＭＰを乗じることで、つまり
Ｔ０＝ＴＩＮＩ×ＴＣＯＭＰ                                    …（１４）
の式により算出する。
【００７０】
ステップ１６６、１６７はステップ１６４、１６５と同様である。すなわち、ステップ１６６では吸気弁閉時期ＩＶＣから燃焼開始時期に至る間の燃焼室５内の圧力上昇率ＰＣＯＭＰを次式に示すように有効圧縮比Ｅｃに基づいて算出する。
【００７１】
ＰＣＯＭＰ＝ｆ９（Ｅｃ）＝Ｅｃ＾κ…（４１）
ただし、κ：比熱比、
（４１）式も（１３）式と同じに断熱圧縮されるガスの圧力上昇率の式である。（４１）式右辺の「＾」も（１３）式と同じに累乗計算を表している。
【００７２】
κは上記（１３）式で用いている値と同じで、断熱圧縮されるガスが空気であればκ＝１．４であり、簡単にはこの値を用いればよい。ただし、混合気に対してその組成、温度からκの値を求めることで、一層の算出精度の向上が可能である。
【００７３】
図１１と同様の特性のテーブルを予めエンジンコントローラ３１のメモリに格納しておき、有効圧縮比Ｅｃに基づき当該テーブルを検索することにより圧力上昇率ＰＣＯＭＰを求めることも可能である。
【００７４】
ステップ１６７では、燃焼室５の燃焼開始時期における圧力Ｐ０［Ｐａ］を、燃焼室５の吸気弁閉時期における圧力ＰＩＮＩに圧力上昇率ＰＣＯＭＰを乗じることで、つまり
Ｐ０＝ＰＩＮＩ×ＰＣＯＭＰ        …（４２）
の式により算出する。
【００７５】
ステップ１６８では、初期燃焼期間における層流燃焼速度ＳＬ１［ｍ／ｓｅｃ］を次式（公知）により算出する。
【００７６】
ＳＬ１＝ｆ１０（Ｔ０、Ｐ０）
＝ＳＬstd×（Ｔ０／Ｔstd）2.18×（Ｐ０／Ｐstd）-0.16        …（１５）
ただし、Ｔstd  ：基準温度［Ｋ］、
Ｐstd  ：基準圧力［Ｐａ］、
ＳＬstd：基準温度Ｔstdと基準圧力Ｐstdにおける基準層流燃焼
速度［ｍ／ｓｅｃ］、
Ｔ０   ：燃焼室５の燃焼開始時期における温度［Ｋ］、
Ｐ０   ：燃焼室５の燃焼開始時期における圧力［Ｐａ］、
層流燃焼速度（層流火炎速度）は気体の流れがない状態での火炎の伝播速度のことであり、燃焼室５内の圧縮速度、燃焼室５内の吸気流速に因らず、燃焼室５の温度及び圧力の関数となることが知られていることから、初期燃焼期間における層流燃焼速度を燃焼開始時温度Ｔ０と燃焼開始時圧力Ｐ０の関数として、また後述するように主燃焼期における層流燃焼速度を圧縮上死点温度ＴＴＤＣと圧縮上死点圧力ＰＴＤＣの関数としている。これは、層流燃焼速度は一般的に、エンジン負荷、燃焼室５内の不活性ガス率、吸気弁閉時期、比熱比、吸気温度により変化するのであるが、これらは燃焼室５内の温度Ｔと圧力Ｐに影響する因子であるので、層流燃焼速度は最終的に燃焼室５内の温度Ｔと圧力Ｐにより規定できるとするものである。
【００７７】
上記の（１５）式において基準温度Ｔstdと基準圧力Ｐstdと基準層流燃焼速度ＳＬstdは実験により予め定められる値である。
【００７８】
燃焼室５の通常の圧力である２ｂａｒ以上の圧力下では、（１５）式の圧力項（Ｐ０／Ｐstd）-0.16は小さな値となる。従って、圧力項（Ｐ０／Ｐstd）-0.16を一定値として、基準層流燃焼速度ＳＬstdを基準温度Ｔstdのみで規定することも可能である。
【００７９】
従って、基準温度Ｔstdが５５０［Ｋ］で、基準層流燃焼速度ＳＬstdが１．０［ｍ／ｓｅｃ］で、圧力項が０．７である場合の燃焼開始時期における温度Ｔ０と層流燃焼速度ＳＬ１との関係は近似的に次式で定義することができる。
【００８０】
ＳＬ１＝ｆ１１（Ｔ０）
＝１．０×０．７×（Ｔ０／５５０）2.18                     …（１６）
ステップ１６９では、初期燃焼期間におけるガス流動の乱れ強さＳＴ１を算出する。このガス流動の乱れ強さＳＴ１は無次元の値であり、燃焼室５に流入する新気の流速と燃料インジェクタ２１の噴射燃料のペネトレーションとに依存する。
【００８１】
燃焼室５に流入する新気の流速は、吸気通路の形状と、吸気弁１５の作動状態と、吸気弁１５を設ける吸気ポート４の形状に依存する。噴射燃料のペネトレーションは燃料インジェクタ２１の噴射圧力と、燃料噴射期間と、燃焼噴射タイミングに依存する。
【００８２】
最終的に、初期燃焼期間におけるガス流動の乱れ強さＳＴ１は、エンジン回転速度ＮＲＰＭの関数として次式で表すことができる。
【００８３】
ＳＴ１＝ｆ１２（ＮＲＰＭ）＝Ｃ１×ＮＲＰＭ                    …（１７）
ただし、Ｃ１：定数、
乱れ強さＳＴ１を回転速度ＮＲＰＭをパラメータとするテーブルから求めることも可能である。
【００８４】
ステップ１７０では層流燃焼速度Ｓ１と乱れ強さＳＴ１から、初期燃焼期間におけるガスの燃焼速度ＦＬＡＭＥ１［ｍ／ｓｅｃ］を次式により算出する。
【００８５】
ＦＬＡＭＥ１＝ＳＬ１×ＳＴ１                                  …（１８）
燃焼室５内にガス乱れがあるとガスの燃焼速度が変化する。（１８）式はこのガス乱れに伴う燃焼速度への寄与（影響）を考慮したものである。
【００８６】
ステップ１７１では、次式により初期燃焼期間ＢＵＲＮ１［ｄｅｇ］を算出する。
【００８７】
ＢＵＲＮ１＝｛（ＮＲＰＭ×６）×ＢＲ１×Ｖ０｝
／（ＲＰＲＯＢＡ×ＡＦ１×ＦＬＡＭＥ１）          …（１９）
ただし、ＡＦ１  ：火炎核の反応面積（固定値）［ｍ2］、
この（１９）式および後述する（２２）式は、燃焼ガス質量を燃焼速度で割ると燃焼期間が得られるとする次の基本式より導いたものであるが、（１９）、（２２）式右辺の分子、分母がただちに燃焼ガス質量、燃焼速度を表すものではない。
【００８８】
燃焼期間［ｓｅｃ］＝シリンダ内総質量［ｇ］／（未燃ガス密度［ｇ／ｍ3］
×火炎表面積［ｍ2］×火炎速度［ｍ／ｓｅｃ］）
…（補１）
（補１）式右辺分母の未燃ガス密度は、未燃ガス質量［ｇ］を未燃ガス体積［ｍ3］で割った値であるので、従来装置のように質量に相当する充填効率ＩＴＡＣのみの関数では未燃ガス密度を正確に計算できているとはいえない。そこで、（補１）式に対して実験結果とを照らし合わせつつ所定の近似を導入して初めて得られたのが上記（１９）式及び後述する（２２）式に示す実験式である。
【００８９】
ここで、（１９）式右辺のＢＲ１は燃焼開始時期より初期燃焼期間ＢＵＲＮ１の終了時期までの燃焼質量割合の変化代であり、ここではＢＲ１＝２％に設定している。（１９）式右辺の（ＮＲＰＭ×６）は単位をｒｐｍからクランク角（ｄｅｇ）に変換するための処理である。火炎核の反応面積ＡＦ１は実験的に設定される。
【００９０】
また、初期燃焼期間中はほぼ燃焼室容積は変わらないとみなすことができる。従って、初期燃焼期間ＢＵＲＮ１を算出するに際して最初の燃焼室容積である燃焼開始時の燃焼室容積Ｖ０を採用している。
【００９１】
次に図１２のフローに移ると、ステップ１８１では図１０のステップ１６１と同様に、図５のステップ１２で算出されている燃焼室５の吸気弁閉時期における容積ＶＩＶＣ［ｍ3］、図５のステップ１３で算出されている燃焼室５の吸気弁閉時期における温度ＴＩＮＩ［Ｋ］、図５のステップ１４で算出されている燃焼室５の吸気弁閉時期における圧力ＰＩＮＩ［Ｐａ］、エンジン回転速度ＮＲＰＭ［ｒｐｍ］、図５のステップ１５で算出されている反応確率ＲＰＲＯＢＡ［％］を読み込み、さらにシリンダ新気量ＭＡＣＹＬ［ｇ]、目標当量比ＴＦＢＹＡ、内部不活性ガス量ＭＲＥＳ［ｇ］、外部不活性ガス量ＭＥＧＲ［ｇ］を読み込む。
【００９２】
ここで、図１には外部ＥＧＲ装置は示していないが、図１２に関する限り外部ＥＧＲ装置を備えているエンジンを前提として説明する。この場合に、外部不活性ガス量ＭＥＧＲは例えば公知の手法（特開平１０−１４１１５０号公報参照）を用いて算出すればよい。なお、図１に示す本実施形態のように外部ＥＧＲ装置を備えていないエンジンを対象とするときには外部不活性ガス量ＭＥＧＲ＝０で扱えば足りる。シリンダ新気量ＭＡＣＹＬ、内部不活性ガス量ＭＲＥＳの算出については図１４以降で後述する。
【００９３】
ステップ１８２、１８３は図１０のステップ１６３、１６４と同様である。すなわち、ステップ１８２で圧縮上死点時期における有効圧縮比Ｅｃ ２を算出する。有効圧縮比Ｅｃ ２も上記（１２）式の有効圧縮比Ｅｃと同様に無次元の値であり、次式に示すように燃焼室５の圧縮上死点における容積ＶＴＤＣを燃焼室５の吸気弁閉時期における容積ＶＩＶＣで除した値である。
【００９４】
Ｅｃ ２＝ｆ１３（ＶＴＤＣ、ＶＩＶＣ）＝ＶＴＤＣ／ＶＩＶＣ
…（４３）
（４３）式において燃焼室５の圧縮上死点における容積ＶＴＤＣは運転条件によらず一定であり、予めエンジンコントローラ３１のメモリに格納しておけばよい。
【００９５】
ステップ１８３では吸気弁閉時期ＩＶＣから圧縮上死点に至る間の燃焼室５内の断熱圧縮による温度上昇率ＴＣＯＭＰ ２を次式に示すように有効圧縮比Ｅｃ ２に基づいて算出する。
【００９６】
ＴＣＯＭＰ ２＝ｆ１４（Ｅｃ ２）
＝Ｅｃ ２＾（κ−１）…（４４）
ただし、κ：比熱比、
図１１と同様の特性のテーブルを予めエンジンコントローラ３１のメモリに格納しておき、有効圧縮比Ｅｃ ２から当該テーブルを検索することにより温度上昇率ＴＣＯＭＰ ２を求めることも可能である。
【００９７】
ステップ１８４ではシリンダ新気量ＭＡＣＹＬ、目標当量比ＴＦＢＹＡ、内部不活性ガス量ＭＲＥＳ、外部不活性ガス量ＭＥＧＲから次式により燃焼室５の総ガス質量ＭＧＡＳ［ｇ］を算出する。
【００９８】
ＭＧＡＳ＝ＭＡＣＹＬ×(１＋ＴＦＢＹＡ／１４．７)＋ＭＲＥＳ＋ＭＥＧＲ
…（４５）
（４５）式右辺の括弧内の「１」は新気分、「ＴＦＢＹＡ／１４．７」は燃料分である。
【００９９】
ステップ１８５ではこの燃焼室５の総ガス質量ＭＧＡＳと、シリンダ新気量ＭＡＣＹＬ、目標当量比ＴＦＢＹＡを用い、次式により混合気の燃焼による温度上昇量（燃焼上昇温度）ＴＢＵＲＮ［Ｋ］を算出する。
【０１００】
ＴＢＵＲＮ＝｛ＭＡＣＹＬ×（ＴＦＢＹＡ／１４．７）×ＢＲｋ×Ｑ｝
／（Ｃｖ×ＭＧＡＳ）…（４６）
ただし、Ｑ    ：燃料の定発熱量、
ＢＲｋ：シリンダ内燃料の燃焼質量割合、
Ｃｖ  ：定積比熱、
（４６）式右辺の分子はシリンダ内燃料による発生総熱量［Ｊ］、分母は単位発生熱量当たりの温度上昇率［Ｊ／Ｋ］を意味している。すなわち、（４６）式は熱力学の公式に当てはめた近似式である。
【０１０１】
ここで、シリンダ内燃料の燃焼質量割合ＢＲｋとしては予め実験等で適合しておく。簡易的には例えば６０％／２＝３０％を設定する。これは、本実施形態では燃焼質量割合ＢＲが約６０％に達するまでを燃焼期間として扱うので、そのちょうど中間の３０％をＢＲｋとして設定するものである。
【０１０２】
燃料の定発熱量Ｑは燃料の種類により異なる値であるので、燃料の種類に応じ予め実験等で求めておく。定積比熱Ｃｖは２〜３の値であり予め実験等で代表値を適合しておく。ただし、混合気に対してその組成、温度から定積比熱Ｃｖの値を求めることで、一層の算出精度の向上が可能である。
【０１０３】
ステップ１８６では、燃焼室５の圧縮上死点における温度ＴＴＤＣ［Ｋ］を、燃焼室５の吸気弁閉時期における温度ＴＩＮＩに圧縮上死点までの温度上昇率ＴＣＯＭＰ ２を乗じその乗算値に上記の燃焼上昇温度ＴＢＵＲＮを加算することで、つまり次式により算出する。
【０１０４】
ＴＴＤＣ＝ＴＩＮＩ×ＴＣＯＭＰ ２＋ＴＢＵＲＮ
…（４７）
ステップ１８７では、この燃焼室５の圧縮上死点における温度ＴＴＤＣと容積ＶＴＤＣ及び燃焼室５の吸気弁閉時期における圧力ＰＩＮＩ、容積ＶＩＶＣ及び温度ＴＩＮＩから次式により燃焼室５の圧縮上死点における圧力ＰＴＤＣ［Ｋ］を算出する。
【０１０５】
ＰＴＤＣ＝ＰＩＮＩ×ＶＩＶＣ×ＴＴＤＣ／（ＶＴＤＣ×ＴＩＮＩ）
…（４８）
（４８）式は状態方程式を用いて得たものである。すなわち、吸気弁閉時期における圧力、容積及び温度（ＰＩＮＩ、ＶＩＶＣ、ＴＩＮＩ）を用いて次の状態方程式が成立する。
【０１０６】
ＰＩＮＩ×ＶＩＶＣ＝ｎ・Ｒ・ＴＩＮＩ…（補２）
ただし、ｎ：モル数、
Ｒ：ガス定数、
圧縮上死点近傍では容積はほぼ等しいので、圧縮上死点での圧力、容積及び温度（ＰＴＤＣ、ＶＴＤＣ、ＴＴＤＣ）を用いて次の状態方程式が成立する。
【０１０７】
ＰＴＤＣ×ＶＴＤＣ＝ｎ・Ｒ・ＴＴＤＣ…（補３）
この（補３）式と上記（補２）との両式からｎ・Ｒを消去しＰＴＤＣについて解くと、上記（４８）式が得られる。
【０１０８】
ステップ１８８では図１０のステップ１６８と同様にして、次式（公知）により、主燃焼期間における層流燃焼速度ＳＬ２［ｍ／ｓｅｃ］を算出する。
【０１０９】
ＳＬ２＝ｆ１５（ＴＴＤＣ、ＰＴＤＣ）
＝ＳＬstd×（ＴＴＤＣ／Ｔstd）2.18×（ＰＴＤＣ／Ｐstd）-0.16
…（４９）
ただし、Ｔstd  ：基準温度［Ｋ］、
Ｐstd  ：基準圧力［Ｐａ］、
ＳＬstd：基準温度Ｔstdと基準圧力Ｐstdにおける基準層流燃焼速度
［ｍ／ｓｅｃ］、
ＴＴＤＣ：燃焼室５の圧縮上死点における温度［Ｋ］、
ＰＴＤＣ：燃焼室５の圧縮上死点における圧力［Ｐａ］、
（４９）式の解説は上記（１６）式と同様ある。すなわち、（４９）式の基準温度Ｔstdと基準圧力Ｐstdと基準層流燃焼速度ＳＬstdは実験により予め定められる値である。燃焼室５の通常の圧力である２ｂａｒ以上の圧力下では、（４９）式の圧力項（ＰＴＤＣ／Ｐstd）-0.16は小さな値となる。従って、圧力項（ＰＴＤＣ／Ｐstd）-0.16を一定値として、基準層流燃焼速度ＳＬstdを基準温度Ｔstdのみで規定することも可能である。よって、基準温度Ｔstdが５５０［Ｋ］で、基準層流燃焼速度ＳＬstdが１．０［ｍ／ｓｅｃ］で、圧力項が０．７である場合の圧縮上死点における温度ＴＴＤＣと層流燃焼速度ＳＬ２との関係は近似的に次式で定義することができる。
【０１１０】
ＳＬ２＝ｆ１６（ＴＴＤＣ）
＝１．０×０．７×（ＴＴＤＣ／５５０）2.18
…（５０）
ステップ１８９では主燃焼期間におけるガス流動の乱れ強さＳＴ２を算出する。このガス流動の乱れ強さＳＴ２も初期燃焼期間におけるガス流動の乱れ強さＳＴ１と同様に、エンジン回転速度ＮＲＰＭの関数として次式で表すことができる。
【０１１１】
ＳＴ２＝ｆ１７（ＮＲＰＭ）＝Ｃ２×ＮＲＰＭ                      …（２０）
ただし、Ｃ２：定数、
乱れ強さＳＴ２を回転速度をパラメータとするテーブルから求めることも可能である。
【０１１２】
ステップ１９０では、層流燃焼速度ＳＬ２［ｍ／ｓｅｃ］と主燃焼期間におけるガス流動の乱れ強さＳＴ２とから、主燃焼期間における燃焼速度ＦＬＡＭＥ２［ｍ／ｓｅｃ］を次式により算出する。
【０１１３】
ＦＬＡＭＥ２＝ＳＬ２×ＳＴ２                                    …（２１）
ただし、ＳＬ２：層流燃焼速度［ｍ／ｓｅｃ］、
（２１）式は（１８）式と同様、ガス乱れに伴う燃焼速度への寄与を考慮したものである。
【０１１４】
ステップ１９１では、主燃焼期間ＢＵＲＮ２［ｄｅｇ］を（１９）式に類似した次式で算出する。
【０１１５】
ＢＵＲＮ２＝｛（ＮＲＰＭ×６）×（ＢＲ２×ＶＴＤＣ）｝
／（ＲＰＲＯＢＡ×ＡＦ２×ＦＬＡＭＥ２）            …（２２）
ただし、ＡＦ２：火炎核の反応面積［ｍ2］、
ここで、（２２）式右辺のＢＲ２は主燃焼期間の開始時期より終了時期までの燃焼質量割合の変化代である。初期燃焼期間の終了時期に燃焼質量割合ＢＲが２％になり、その後、主燃焼期間が開始し、燃焼質量割合ＢＲが６０％に達して主燃焼期間が終了すると考えているので、ＢＲ２＝６０％−２％＝５８％を設定している。ＡＦ２は火炎核の成長行程における平均の反応面積であり、（１９）式のＡＦ１と同様に、予め実験的に定めた固定値とする。
【０１１６】
主燃焼期間では圧縮上死点を挟んで燃焼室容積が変化する。つまり、主燃焼期間の開始時期と、主燃焼期間の終了時期のほぼ中央に圧縮上死点位置が存在するとみなすことができる。また、圧縮上死点付近ではクランク角が変化しても燃焼室容積があまり変化しない。そこで主燃焼期間での燃焼室容積としてはこの圧縮上死点での燃焼室容積ＶＴＤＣで代表させることとしている。
【０１１７】
図１３は基本点火時期ＭＢＴＣＡＬ［ｄｅｇＢＴＤＣ］を算出するためのもので、一定時間毎（例えば１０ｍｓｅｃ毎）に実行する。図１０、図１２のうち遅く実行されるフローに続けて実行する。なお、ステップ４２１〜４２４については後述する。
【０１１８】
ステップ４１では、図１０のステップ１７１で算出されている初期燃焼期間ＢＵＲＮ１、図１２のステップ１９１で算出されている主燃焼期間ＢＵＲＮ２、図５のステップ１７で算出されている点火時期無駄時間相当クランク角ＩＧＮＤＥＡＤ、図５のステップ１６で算出されている基準クランク角θＰＭＡＸを読み込む。
【０１１９】
ステップ４２では、初期燃焼期間ＢＵＲＮ１と主燃焼期間ＢＵＲＮ２の合計を燃焼期間ＢＵＲＮ［ｄｅｇ］として算出する。
【０１２０】
ステップ４３では次式により基本点火時期ＭＢＴＣＡＬ［ｄｅｇＢＴＤＣ］を算出する。
【０１２１】
ＭＢＴＣＡＬ＝ＢＵＲＮ−θＰＭＡＸ＋ＩＧＮＤＥＡＤ            …（２３）
ステップ４４では、この基本点火時期ＭＢＴＣＡＬから点火無駄時間相当クランク角ＩＧＮＤＥＡＤを差し引いた値を前回燃焼開始時期ＭＢＴＣＹＣＬ［ｄｅｇＢＴＤＣ］として算出する。
【０１２２】
今サイクルの点火時期指令値としてステップ４３で算出された基本点火時期ＭＢＴＣＡＬが用いられたとすると、次サイクルの点火時期になるまでの間、ステップ４４で算出された前回燃焼開始時期ＭＢＴＣＹＣＬが図１０のステップ１６２において用いられる。
【０１２３】
図１４は燃焼室５内の内部不活性ガス率ＭＲＥＳＦＲを算出するためのもので、一定時間毎（例えば１０ｍｓｅｃ毎）に実行する。このフローは上記図５のフローに先立って実行する。
【０１２４】
ステップ５１ではエアフローメータ３２の出力と目標当量比ＴＦＢＹＡを読み込む。ステップ５２ではエアフロメータ３２の出力に基づいて、燃焼室５に流入する新気量（シリンダ新気量）ＭＡＣＹＬを算出する。このシリンダ新気量ＭＡＣＹＬの算出方法については公知の方法を用いればよい（特開２００１−５００９１公報参照）。
【０１２５】
ステップ５３では、燃焼室５内の内部不活性ガス量ＭＲＥＳを算出する。この内部不活性ガス量ＭＲＥＳの算出については、図１５のフローにより説明する。
【０１２６】
図１５（図１４ステップ５３のサブルーチン）においてステップ６１では、燃焼室５内の排気弁閉時期ＥＶＣにおける不活性ガス量ＭＲＥＳＣＹＬを算出する。この不活性ガス量ＭＲＥＳＣＹＬの算出についてはさらに図１６のフローにより説明する。
【０１２７】
図１６（図１５ステップ６１のサブルーチン）においてステップ７１では、排気弁閉時期ＥＶＣ［ｄｅｇＢＴＤＣ］、温度センサ４５により検出される排気温度ＴＥＸＨ［Ｋ］、圧力センサ４６により検出される排気圧力ＰＥＸＨ［ｋＰａ］を読み込む。
【０１２８】
ここで、吸気弁閉時期ＩＶＣが吸気ＶＴＣ機構２７に与える指令値から既知であったように、排気弁閉時期ＥＶＣも排気ＶＴＣ機構２８に与える指令値から既知である。
【０１２９】
ステップ７２では燃焼室５の排気弁閉時期ＥＶＣにおける容積ＶＥＶＣを算出する。これは吸気弁閉時期ＩＶＣにおける容積ＶＩＶＣと同様に、排気弁閉時期をパラメータとするテーブルを検索することにより求めればよい。すなわち、排気弁ＶＴＣ機構２８を備える場合には、排気弁閉時期ＥＶＣから図２３に示すテーブルを検索することにより、燃焼室５の排気弁閉時期ＥＶＣにおける容積ＶＥＶＣを求めればよい。排気ＶＴＣ機構２８を備えないときには定数で与えることができる。
【０１３０】
また、図示しないが圧縮比を変化させる機構を有する場合には、圧縮比の変化量に応じた排気弁閉時期における燃焼室容積ＶＥＶＣをテーブルから求める。排気ＶＴＣ機構２８に加えて圧縮比を変化させる機構をも有する場合には、排気弁閉時期と圧縮比変化量とに応じたマップを検索することにより排気弁閉時期における燃焼室容積を求める。
【０１３１】
ステップ７３では、目標当量比ＴＦＢＹＡから図２４に示すテーブルを検索することにより、燃焼室５内の不活性ガスのガス定数ＲＥＸを求める。図２４に示すように、不活性ガスのガス定数ＲＥＸは目標当量比ＴＦＢＹＡが１．０のとき、つまり理論空燃比のとき最も小さく、これより大きくても小さくても大きくなる。
【０１３２】
ステップ７４では、排気温度ＴＥＸＨに基づいて燃焼室５の排気弁閉時期ＥＶＣにおける温度ＴＥＶＣを推定する。簡単には排気温度ＴＥＸＨをそのままＴＥＶＣとおけばよい。なお、燃焼室５の排気弁閉時期における温度ＴＥＶＣは、インジェクタ２１の燃料噴射量に応じた熱量により変化するため、このような特性をも加味すれば、ＴＥＶＣの算出精度が向上する。
【０１３３】
ステップ７５では、排気圧力ＰＥＸＨに基づいて燃焼室５の排気弁閉時期ＥＶＣにおける圧力ＰＥＶＣを算出する。簡単には排気圧力ＰＥＸＨをＰＥＶＣと置けばよい。
【０１３４】
ステップ７６では、燃焼室５の排気弁閉時期ＥＶＣにおける容積ＶＥＶＣ、排気弁閉時期ＥＶＣにおける温度ＴＥＶＣ、排気弁閉時期ＥＶＣにおける圧力ＰＥＶＣ及び不活性ガスのガス定数ＲＥＸから、燃焼室５の排気弁閉時期ＥＶＣにおける不活性ガス量ＭＲＥＳＣＹＬを次式により算出する。
【０１３５】
ＭＲＥＳＣＹＬ＝（ＰＥＶＣ×ＶＥＶＣ）／（ＲＥＸ×ＴＥＶＣ）    …（２４）
このようにして燃焼室５の排気弁閉時期ＥＶＣにおける不活性ガス量ＭＲＥＳＣＹＬの算出を終了したら図１５に戻り、ステップ６２で吸排気弁１５、１６のオーバーラップ（図では「Ｏ／Ｌ」と略記する）中に排気側から吸気側へ吹き返す不活性ガス量であるオーバーラップ中吹き返し不活性ガス量ＭＲＥＳＯＬを算出する。
【０１３６】
この不活性ガス量ＭＲＥＳＯＬの算出については図１７のフローにより説明する。
【０１３７】
図１７（図１５ステップ６２のサブルーチン）においてステップ８１では、吸気弁開時期ＩＶＯ［ｄｅｇＢＴＤＣ］と、排気弁閉時期ＥＶＣ［ｄｅｇＢＴＤＣ］、図１６のステップ７４で算出されている燃焼室５の排気弁閉時期ＥＶＣにおける温度ＴＥＶＣを読み込む。
【０１３８】
ここで、吸気弁開時期ＩＶＯは、吸気弁閉時期ＩＶＣより吸気弁１５の開き角だけ前の時期となるので、吸気弁閉時期ＩＶＣより吸気弁１５の開き角（予め分かっている）とから求めることができる。
【０１３９】
ステップ８２では吸気弁開時期ＩＶＯと排気弁閉時期ＥＶＣとから、吸排気弁のオーバーラップ量ＶＴＣＯＬ［ｄｅｇ］を次式により算出する。
【０１４０】
ＶＴＣＯＬ＝ＩＶＯ＋ＥＶＣ                                      …（２５）
例えば、吸気ＶＴＣ機構２７用アクチュエータへの非通電時に吸気弁開時期ＩＶＯが吸気上死点位置にあり、吸気ＶＴＣ機構２７用アクチュエータへの通電時に吸気弁開時期が吸気上死点より進角する特性であり、かつ排気ＶＴＣ機構２８用アクチュエータへの非通電時に排気弁閉時期ＥＶＣが排気上死点にあり、排気弁ＶＴＣ機構２８用アクチュエータへの通電時に排気弁閉時期ＥＶＣが排気上死点より進角する特性である場合には、ＩＶＯとＥＶＣの合計が吸排気弁のオーバーラップ量ＶＴＣＯＬとなる。
【０１４１】
ステップ８３では、吸排気弁のオーバーラップ量ＶＴＣＯＬから、図２５に示すテーブルを検索することによりオーバーラップ中の積算有効面積ＡＳＵＭＯＬを算出する。図２５に示すようにオーバーラップ中の積算有効面積ＡＳＵＭＯＬは吸排気弁のオーバーラップ量ＶＴＣＯＬが大きくなるほど大きくなる値である。
【０１４２】
ここで、図２６は、吸排気弁のオーバーラップ中の積算有効面積ＡＳＵＭＯＬの説明図であり、横軸はクランク角、縦軸は吸気弁１２と排気弁１５とのそれぞれの開口面積を示している。オーバーラップ中の任意の時点における有効開口面積は、排気弁開口面積と吸気弁開口面積とのうち小さい方とする。オーバーラップ中の全期間における積算有効面積ＡＳＵＭＯＬは、吸気弁１５及び排気弁１６が開いている期間の積分値（図中の斜線部）である。
【０１４３】
このようにオーバーラップ中積算有効面積ＡＳＵＭＯＬを算出することで、吸気弁１５と排気弁１６とのオーバーラップ量を１つのオリフィス（流出孔）であると近似することができ、排気系の状態と吸気系の状態とからこの仮想オリフィスを通過するガス流量を簡略的に算出し得る。
【０１４４】
ステップ８４では、目標当量比ＴＦＢＹＡと、燃焼室５の排気弁閉時期ＥＶＣにおける温度ＴＥＶＣとから、図２７に示すマップを検索することにより、燃焼室５に残留する不活性ガスの比熱比ＳＨＥＡＴＲを算出する。図２７に示したように、燃焼室に残留する不活性ガスの比熱比ＳＨＥＡＴＲは目標当量比ＴＦＢＹＡが１．０の近傍にあるときが最も小さくなり、それより大きくても小さくても大きくなる。また、目標当量比ＴＦＢＹＡが一定の条件では、燃焼室５の排気弁閉時期ＥＶＣにおける温度ＴＥＶＣが高くなるほど小さくなる。
【０１４５】
ステップ８５では過給判定フラグＴＢＣＲＧ及びチョーク判定フラグＣＨＯＫＥを設定する。この過給判定フラグＴＢＣＲＧ及びチョーク判定フラグＣＨＯＫＥの設定については図１８のフローにより説明する。
【０１４６】
図１８（図１７ステップ８５のサブルーチン）においてステップ１０１では、吸気圧力センサ４４により検出される吸気圧力ＰＩＮと、図１６のステップ７５で算出されている燃焼室５の排気弁閉時期ＥＶＣにおける圧力ＰＥＶＣを読み込む。
【０１４７】
ステップ１０２では、吸気圧力ＰＩＮと、燃焼室５の排気弁閉時期ＥＶＣにおける圧力ＰＥＶＣとから、次式により吸気排気圧力比ＰＩＮＢＹＥＸを算出する。
【０１４８】
ＰＩＮＢＹＥＸ＝ＰＩＮ／ＰＥＶＣ                                …（２６）
この吸気排気圧力比ＰＩＮＢＹＥＸは無名数であり、これと１をステップ１０３で比較する。吸気排気圧力比ＰＩＮＢＹＥＸが１以下の場合には過給無しと判断し、ステップ１０４に進んで過給判定フラグＴＢＣＲＧ（ゼロに初期設定）＝０とする。
【０１４９】
吸気排気圧力比ＰＩＮＢＹＥＸが１より大きい場合には過給有りと判断し、ステップ１０５へ進んで過給判定フラグＴＢＣＲＧ＝１とする。
【０１５０】
ステップ１０６では、図１４のステップ５１で読み込まれている目標当量比ＴＦＢＹＡから図２８に示すテーブルを検索することにより、混合気の比熱比ＭＩＸＡＩＲＳＨＲを求め、これをステップ１０７で不活性ガスの比熱比ＳＨＥＡＴＲと入れ換える。図２８に示したように、混合気の比熱比ＭＩＸＡＩＲＳＨＲは、目標当量比ＴＦＢＹＡが小さくなるほど大きくなる値である。
【０１５１】
ステップ１０６、１０７において、不活性ガスの比熱比ＳＨＥＡＴＲを混合気の比熱比ＭＩＸＡＩＲＳＨＲに置き換えるのは、ターボ過給や慣性過給等の過給時を考慮したものである。すなわち、過給時には吸排気弁のオーバーラップ中のガス流れが吸気系から排気系へ向かう（吹き抜ける）ので、この場合においては、上記の仮想オリフィスを通過するガスの比熱比を不活性ガスの比熱比から混合気の比熱比に変更することで、吹き抜けるガス量を精度良く推定し、内部不活性ガス量を精度良く算出するためである。
【０１５２】
ステップ１０８では、図１７のステップ８４または図１８のステップ１０６、１０７で算出している不活性ガスの比熱比ＳＨＥＡＴＲに基づき、最小と最大とのチョーク判定しきい値ＳＬＣＨＯＫＥＬ、ＳＬＣＨＯＫＥＨを次式により算出する。
【０１５３】
ＳＬＣＨＯＫＥＬ＝｛２／（ＳＨＥＡＴＲ＋１）｝
＾｛ＳＨＥＡＴＲ／（ＳＨＥＡＴＲ−１）｝  …（２７ａ）
ＳＬＣＨＯＫＥＨ＝｛−２／（ＳＨＥＡＴＲ+１）｝
＾｛−ＳＨＥＡＴＲ／（ＳＨＥＡＴＲ−１）｝…（２７ｂ）
これらのチョーク判定しきい値ＳＬＣＨＯＫＥＬ、ＳＬＣＨＯＫＥＨは、チョークする限界値を算出している。
【０１５４】
ステップ１０８において、（２７ａ）右辺、（２７ｂ）右辺の各累乗計算が困難な場合には、（２７ａ）、（２７ｂ）式の算出結果を、最小チョーク判定しきい値ＳＬＣＨＯＫＥＬのテーブルと最大チョーク判定しきい値ＳＬＣＨＯＫＥＨのテーブルとしてそれぞれエンジンコントローラ３１のメモリに予め記憶しておき、不活性ガスの比熱比ＳＨＥＡＴＲから当該テーブルを検索することにより求めてもよい。
【０１５５】
テップ１０９では、吸気排気圧力比ＰＩＮＢＹＥＸが、最小チョーク判定しきい値ＳＬＣＨＯＫＥＬ以上でかつ最大チョーク判定しきい値ＳＬＣＨＯＫＥＨ以下の範囲内にあるか否か、すなわちチョーク状態にないか否かを判定する。吸気排気圧力比ＰＩＮＢＹＥＸが範囲内にある場合にはチョーク無しと判断し、ステップ１１０に進んでチョーク判定フラグＣＨＯＫＥ（ゼロに初期設定）＝０とする。
【０１５６】
吸気排気圧力比Ｐ１ＮＢＹＥＸが範囲内にない場合にはチョーク有りと判断し、ステップ１１１に進んでチョーク判定フラグＣＨＯＫＥ＝１とする。
【０１５７】
このようにして過給判定フラグとチョーク判定フラグの設定を終了したら図１７に戻り、ステップ８６〜８８で次の４つの場合分けを行う。
【０１５８】
〈１〉過給判定フラグＴＢＣＲＧ＝０かつチョーク判定フラグＣＨＯＫＥ＝０のとき
〈２〉過給判定フラグＴＢＣＲＧ＝０かつチョーク判定フラグＣＨＯＫＥ＝０のとき
〈３〉過給判定フラグＴＢＣＲＧ＝０かつチョーク判定フラグＣＨＯＫＥ＝１のとき
〈４〉過給判定フラグＴＢＣＲＧ＝１かつチョーク判定フラグＣＨＯＫＥ＝０のとき
そして、上記〈１〉のときにはステップ８９に進んで、過給無しかつチョーク無し時のオーバーラップ中の平均吹き返し不活性ガス流量ＭＲＥＳＯＬｔｍｐ１を、上記〈２〉のときにはステップ９０に進んで過給無しかつチョーク有り時のオーバーラップ中の吹き返し不活性ガス流量ＭＲＥＳＯＬｔｍｐ２を、上記〈３〉のときにはステップ９１に進んで過給有りかつチョーク無し時のオーバーラップ中の平均吹き返し不活性ガス流量ＭＲＥＳＯＬｔｍｐ３を、上記〈４〉のときにはステップ９２に進んで過給有りかつチョーク有り時の吹き返し不活性ガス流量ＭＲＥＳＯＬｔｍｐ４をそれぞれ算出し、算出結果をオーバーラップ中の吹き返し不活性ガス流量ＭＲＥＳＯＬｔｍｐに移す。
【０１５９】
ここで、過給無しかつチョーク無し時のオーバーラップ中吹き返し不活性ガス流量ＭＲＥＳＯＬｔｍｐ１の算出について図１９のフローにより説明する
図１９（図１７ステップ８９のサブルーチン）においてステップ１２１では、図１６のステップ７３、７５で算出されている不活性ガスのガス定数ＲＥＸ、燃焼室５の排気弁閉時期における圧力ＰＥＶＣを読み込む。
【０１６０】
ステップ１２２では、不活性ガスのガス定数ＲＥＸと、図１７のステップ８１で読み込まれている燃焼室５の排気弁閉時期における温度ＴＥＶＣとに基づき、後述するガス流量の算出式に用いる密度項ＭＲＳＯＬＤを次式により算出する。
【０１６１】
ＭＲＳＯＬＤ＝ＳＱＲＴ｛１／（ＲＥＸ×ＴＥＶＣ）｝              …（２８）
ここで、（２８）式右辺の「ＳＱＲＴ」はすぐ右のカッコ内の値の平方根を計算させる関数である。
【０１６２】
なお、密度項ＭＲＳＯＬＤの平方根計算が困難な場合は、（２８）式の算出結果をマップとしてエンジンコントローラ３１のメモリに予め記憶しておき、ガス定数ＲＥＸと燃焼室５の排気弁閉時期における温度ＴＥＶＣとからそのマップを検索することにより求めてもよい。
【０１６３】
ステップ１２３では、図１７のステップ８４で算出されている不活性ガスの比熱比ＳＨＥＡＴＲと、図１８のステップ１０２で算出されている吸気排気圧力比ＰＩＮＢＹＥＸとに基づき、後述するガス流量の算出式に用いる圧力差項ＭＲＳＯＬＰを次式により算出する。
【０１６４】
ＭＲＳＯＬＰ＝ＳＱＲＴ［ＳＨＥＡＴＲ／（ＳＨＥＡＴＲ−１）
×｛ＰＴＮＢＹＥＸ＾（２／ＳＨＥＡＴＲ）
−ＰＴＮＢＹＥＸ＾（（ＳＨＥＡＴＲ＋１）／ＳＨＥＡＴＲ）｝］…（２９）
ステップ１２４では、これら密度項ＭＲＳＯＬＤ、圧力差項ＭＲＳＯＬＰと、燃焼室５の排気弁閉時期における圧力ＰＥＶＣとから、過給無しかつチョーク無し時のオーバーラップ中の吹き返し不活性ガス流量ＭＲＥＳＯＬｔｍｐ１を次式（ガス流量の算出式）により算出し、その算出値をステップ１２５でオーバーラップ中の吹き返し不活性ガス流量ＭＲＥＳＯＬｔｍｐに移す。
【０１６５】
ＭＲＥＳＯＬｔｍｐ１＝１．４×ＰＥＶＣ×ＭＲＳＯＬＤ×ＭＲＳＯＬＰ…（３０）
次に、過給無しかつチョーク有り時の吹き返し不活性ガス流量の算出について図２０のフローにより説明する
図２０（図１７ステップ９０のサブルーチン）においてステップ１３１、１３２では、図１９のステップ１２１、１２２と同様にして、不活性ガスのガス定数ＲＥＸ、燃焼室５の排気弁閉時期における圧力ＰＥＶＣを読み込み、これらから前述の（２８）式により密度項ＭＲＳＯＬＤを算出する。
【０１６６】
ステップ１３３では、図１７のステップ８４で算出されている不活性ガスの比熱比ＳＨＥＡＴＲに基づき、チョーク時圧力差項ＭＲＳＯＬＰＣを次式により算出する。
【０１６７】
ＭＲＳＯＬＰＣ＝ＳＱＲＴ［ＳＨＥＡＴＲ×｛２／（ＳＨＥＡＴＲ＋１）｝                          ＾｛（ＳＨＥＡＴＲ＋１）／〔ＳＨＥＡＴＲ−１）｝］…（３１）
なお、（３１）式の累乗計算と平方根計算とが困難な場合には、（３１）式の算出結果を、チョーク時圧力差項ＭＲＳＯＬＰＣのテーブルとしてエンジンコントローラ３１のメモリに予めに記憶しておき、不活性ガスの比熱比ＳＨＥＡＴＲからそのテーブルを検索することにより求めてもよい。
【０１６８】
ステップ１３４では、これら密度項ＭＲＳＯＬＤ、チョーク時圧力差項ＭＲＳＯＬＰＣと、燃焼室５の排気弁閉時期における圧力ＰＥＶＣとから、過給無しかつチョーク有り時のオーバーラップ中吹き返し不活性ガス流量ＭＲＥＳＯＬｔｍｐ２を次式により算出し、その算出値をステップ１３５でオーバーラップ中の吹き返し不活性ガス流量ＭＲＥＳＯＬｔｍｐに移す。
【０１６９】
ＭＲＥＳＯＬｔｍｐ２＝ＰＥＶＣ×ＭＲＳＯＬＤ×ＭＲＳＯＬＰＣ    …（３２）
次に、過給有りかつチョーク無し時の吹き返しガス流量の算出について図２１のフローにより説明する
図２１（図１７ステップ９１のサブルーチン）においてステップ１４１では、吸気圧力センサ４４により検出される吸気圧力ＰＩＮを読み込む。
【０１７０】
ステップ１４２では、図１８のステップ１０６、１０７で算出されている不活性ガスの比熱比ＳＨＥＡＴＲと、図１８のステップ１０２で算出されている吸気排気圧力比ＰＩＮＢＹＥＸとから、過給時圧力差項ＭＲＳＯＬＰＴを次式により算出する。
【０１７１】
ＭＲＳＯＬＰＴ＝ＳＱＲＴ［ＳＨＥＡＴＲ／（ＳＨＥＡＴＲ−１）
×｛ＰＩＮＢＹＥＸ＾（−２／ＳＨＥＡＴＲ）
−ＰＩＮＢＹＥＸ＾（−（ＳＨＥＡＴＲ＋１）／ＳＨＥＡＴＲ）｝］…（３３）
なお、（３３）式の累乗計算と平方根計算とが困難な場合は、（３３）式の算出結果を、過給時圧力差項ＭＲＳＯＬＰＴのマップとしてエンジンコントローラ３１のメモリに予め記憶しておき、不活性ガスの比熱比ＳＨＥＡＴＲと吸気排気圧力比ＰＩＮＢＹＥＸとからそのマップを検索することにより求めてもよい。
【０１７２】
ステップ１４３では、この過給時圧力差項ＭＲＳＯＬＰＴと吸気圧力ＰＩＮとに基づいて、過給有りかつチョーク無し時のオーバーラップ中吹き返し不活性ガス流量ＭＲＥＳＯＬｔｍｐ３を次式により算出し、その算出値をステップ１４４でオーバーラップ中の吹き返し不活性ガス流量ＭＲＥＳＯＬｔｍｐに移す。
【０１７３】
ＭＲＥＳＯＬｔｍｐ３＝−０．１５２×ＰＩＮ×ＭＲＳＯＬＰＴ      …（３４）
ここで、（３４）式の吹き返し不活性ガス流量ＭＲＥＳＯＬｔｍｐ３は負の値とすることで、オーバーラップ中に吸気系から排気系へ吹き抜ける混合気のガス流量を表すことができる。
【０１７４】
次に、過給有りかつチョーク有り時のオーバーラップ中吹き返し不活性ガス流量の算出について図２２のフローにより説明する
図２２（図１７ステップ９２のサブルーチン）においてステップ１５１、１５２では、図２１のステップ１４１と同じく吸気圧力センサ４４により検出される吸気圧力ＰＩＮを読み込むと共に、図２０のステップ１３２と同じくチョーク時圧力差項ＭＲＳＯＬＰＣを前述の（３１）式により算出する。
【０１７５】
ステップ１５３では、このチョーク時圧力差項ＭＲＳＯＬＰＣと吸気圧力ＰＩＮとに基づいて、過給有りかつチョーク有り時のオーバーラップ中吹き返しガス流量ＭＲＥＳＯＬｔｍｐ４を次式により算出し、その算出値をステップ１５４でオーバーラップ中の吹き返し不活性ガス流量ＭＲＥＳＯＬｔｍｐに移す。
【０１７６】
ＭＲＥＳＯＬｔｍｐ４＝−０．１０８×ＰＩＮ×ＭＲＳＯＬＰＣ      …（３５）
ここで、（３５）式の吹き返し不活性ガス流量ＭＲＥＳＯＬｔｍｐ４も、ＭＲＥＳＯＬｔｍｐ３と同様、負の値とすることで、オーバーラップ中に吸気側から排気側へ吹き抜ける混合気のガス流量を表すことができる。
【０１７７】
このようにして、過給の有無とチョークの有無との組み合わせにより場合分けした、オーバーラップ中の吹き返し不活性ガス流量ＭＲＥＳＯＬｔｍｐの算出を終了したら図１７に戻り、ステップ９３においてこのオーバーラップ中の吹き返し不活性ガス流量ＭＲＥＳＯＬｔｍｐとオーバーラップ期間中の積算有効面積ＡＳＵＭＯＬとから、次式によりオーバーラップ中の吹き返し不活性ガス量ＭＲＥＳＯＬを算出する。
【０１７８】
ＭＲＥＳＯＬ＝（ＭＲＥＳＯＬｔｍＰ×ＡＳＵＭＯＬ×６０）
／（ＮＲＰＭ×３６０）                          …（３６）
このようにしてオーバーラップ中の吹き返し不活性ガス量ＭＲＥＳＯＬの算出を終了したら図１５に戻り、ステップ６３において燃焼室５内の排気弁閉時期ＥＶＣにおける不活性ガス量ＭＲＥＳＣＹＬと、このオーバーラップ中吹き返しガス量ＭＲＥＳＯＬとを加算して、つまり次式により内部不活性ガス量ＭＲＥＳを算出する。
【０１７９】
ＭＲＥＳ＝ＭＲＥＳＣＹＬ＋ＭＲＥＳＯＬ                          …（３７）
前述のように、過給有り時にはオーバーラップ中吹き返し不活性ガス流量（ＭＲＥＳＯＬｔｍｐ３、ＭＲＥＳＯＬｔｍｐ４）が負となるため、上記（３６）式のオーバーラップ中の吹き返し不活性ガス量ＭＲＥＳＯＬも負となり、このとき（３７）式によれば、オーバーラップ中の吹き返し不活性ガス量ＭＲＥＳＯＬの分だけ内部不活性ガス量が減じられる。
【０１８０】
このようにして内部不活性ガス量ＭＲＥＳの算出を終了したら図１４に戻り、ステップ５４においてこの内部不活性ガス量ＭＲＥＳと、目標当量比ＴＦＢＹＡとを用いて、次式により内部不活性ガス率ＭＲＥＳＦＲ（燃焼室５内の総ガス量に対する内部不活性ガス量の割合）を算出する。
【０１８１】
ＭＲＥＳＦＲ＝ＭＲＥＳ
／｛ＭＲＥＳ＋ＭＡＣＹＬ×（１＋ＴＦＢＹＡ／１４．７）｝…（３８）
これで内部不活性ガス率ＭＲＥＳＦＲの算出を総て終了する。
【０１８２】
このように本実施形態によれば、内部不活性ガス量ＭＲＥＳを、燃焼室５の排気弁閉時期における不活性ガス量ＭＲＥＳＣＹＬと、吸排気弁のオーバーラップ中の吹き返しガス量ＭＲＥＳＯＬとで構成し（図１５のステップ６３参照）、この場合に、燃焼室５の排気弁閉時期における温度ＴＥＶ及び圧力ＰＥＶＣを算出し（図１６のステップ７４、７５）、これら温度ＴＥＶＣ、圧力ＰＥＶＣと不活性ガスのガス定数ＲＥＸとに基づいて状態方程式（上記（２４）式）により燃焼室５の排気弁閉時期における不活性ガス量ＭＲＥＳＣＹＬを算出する（図１６のステップ７６参照）ようにしたので、特に、燃焼室５内部の状態量（ＰＥＶＣ、ＶＥＶＣ、ＴＥＶＣ）が刻々と変化する過渡運転時においても、運転条件に関わらず精度良く燃焼室５の排気弁閉時期における不活性ガス量ＭＲＥＳＣＹＬを算出（推定）できる。
【０１８３】
また、燃焼室５の排気弁閉時期における温度ＴＥＶＣ及び圧力ＰＥＶＣ、不活性ガスのガス定数ＲＥＸ及び比熱比ＳＨＥＡＴＲ、吸気圧力ＰＩＮに基づいてオーバーラップ中の吹き返し不活性ガス流量（ＭＲＥＳＯＬｔｍｐ１、ＭＲＥＳＯＬｔｍｐ２）を算出し（図１９、図２０参照）、このガス流量にオーバーラップ中の積算有効面積ＡＳＵＭＯＬを乗算して、オーバーラップ中の吹き返しガス量ＭＲＥＳＯＬを算出する（図１７のステップ９３参照）ようにしたので、精度良くオーバーラップ中吹き返しガス量ＭＲＥＳＯＬを算出（推定）できる。
【０１８４】
このように、燃焼室５の排気弁閉時期における不活性ガス量ＭＲＥＳＣＹＬ、オーバーラップ中吹き返しガス量ＭＲＥＳＯＬとも精度良く算出（推定）できると、これらの和である内部不活性ガス量ＭＲＥＳも精度良く算出（推定）できることになり、この精度良く推定することが可能となった内部不活性ガス量ＭＲＥＳに基づいて算出される内部不活性ガス率ＭＲＥＳＦＲを、点火時期の算出に用いる燃焼室５内の吸気弁閉時期ＩＶＣにおける温度ＴＩＮＩに活かすことで（図５のステップ１３参照）、燃焼室５内の吸気弁閉時期ＩＶＣにおける温度ＴＩＮＩを精度良く算出できる。また、精度良く推定することが可能となった内部不活性ガス量ＭＲＥＳを、燃料噴射量、バルブ開閉タイミング（オーバーラップ量）などにも活かすことで、エンジンを適切に制御することが可能である。
【０１８５】
また、不活性ガスのガス定数ＲＥＸや不活性ガスの比熱比ＳＨＥＡＴＲは、目標当量比ＴＦＢＹＡに応じた値としているので（図２４、図２７参照）、理論空燃比を外れた空燃比での運転時（例えば理論空燃比よりもリーンな空燃比で運転を行うリーン運転時、冷間始動時のようにエンジンが元々不安定な状態を安定させるために理論空燃比の空燃比よりもリッチ側の空燃比で運転するエンジン始動直後、同じく大きな出力が要求されるために理論空燃比の空燃比よりもリッチ側の空燃比で運転する全負荷運転時）にも、燃焼室５の排気弁閉時期における不活性ガス量ＭＲＥＳＣＹＬ、オーバーラップ中吹き返しガス量ＭＲＥＳＯＬ、これらの合計である内部不活性ガス量ＭＲＥＳ、これに基づく内部不活性ガス率ＭＲＥＳＦＲを精度良く算出できる。
【０１８６】
また、オーバーラップ期間の積算有効面積ＡＳＵＭＯＬを仮想オリフィスの面積とし、この仮想オリフィスを排気が燃焼室５から吸気系へと吹き抜けると仮定しているので、オーバーラップ中の吹き返し不活性ガス量ＭＲＥＳＯＬの算出が簡略化されている。
【０１８７】
これで燃焼室５内の内部不活性ガス率ＭＲＥＳＦＲの算出についての説明を終了し、次にはノック限界点火時期ＫＮＯＣＫｃａｌの算出ついて説明する。
【０１８８】
ここでは、まず新たに創出したノック制御の考え方について説明する。図２９はノック発生時の燃焼室５内の圧力履歴を示している。高周波分を取り除いた平均圧力を改めて描いてみると、自着火時期θｋｎｋ（ノック発生時期）に燃焼室５内の圧力が一気に上昇していることがわかる。このノックによる圧力上昇は燃焼室５内の未燃混合気が等容燃焼した結果で生じるとみなして、その圧力上昇分ｄＰを次のように熱力学の計算式により算出する。
【０１８９】
いま、未燃燃料量ＭＵＢの未燃ガスが等容燃焼で全て燃えると仮定すると、熱力学より発熱量Ｑは次式で与えられる。
【０１９０】
Ｑ＝ＣＦ＃×ＭＵＢ                            …（補４）
ただし、ＣＦ＃：燃料の低位発熱量、
一方、この発熱量Ｑにより燃焼室５内のガス温度が上昇するので、この温度上昇分をΔＴとすれば次式が成立する。
【０１９１】
Ｑ＝Ｃｖ×Ｍ×ΔＴ                            …（補５）
ただし、Ｍ：燃焼室５内の全てのガスの質量、
Ｃｖ：既燃ガスの定容比熱、
（補４）、（補５）の両式は等しいと置いて温度上昇分ΔＴについて解くと次式が得られる。
【０１９２】
ΔＴ＝（ＣＦ＃×ＭＵＢ）／（Ｃｖ×Ｍ）        …（補６）
気体の状態方程式ＰＶ＝ｎＲＴの両辺を微分する（ただし、定容変化であるためＶは一定）。
【０１９３】
Ｖ×ｄＰ＝ｄｎ×Ｒ×Ｔ＋ｎ×Ｒ×ｄＴ          …（補７）
ここで、ノックが発生するような状態ではモル数ｎの変化は小さいため、（補７）式右辺のｄｎ＝０として次式を得る。
【０１９４】
ｄＰ＝（ｎ×Ｒ／Ｖ）×ｄＴ                    …（補８）
（補８）、（補６）の両式より温度上昇分ｄＴ（＝ΔＴ）を消去し圧力上昇分ｄＰについて整理すると最終的に次式を得る。
【０１９５】
ｄＰ＝ｎ×Ｒ×ＣＦ＃×ＭＵＢ／（Ｖ×Ｃｖ×Ｍ）…（補９）
すなわち、（補９）式は、未燃燃料量ＭＵＢ、燃焼室５の自着火時期における容積Ｖ、既燃ガスの定容比熱Ｃｖ、燃焼室５内の全てのガスの質量Ｍ、燃焼室５内の全てのガスの総モル数ｎが分かれば、圧力上昇分ｄＰを計算式により求めることができることを示している。
【０１９６】
この場合、燃焼室５の自着火時期は公知の手法を用いて求めることができる。公知の手法とは、単位クランク角毎に燃焼室５内の温度及び圧力を算出して図３０Ａまたは図３０Ｂよりその温度、圧力に対する１／τを求め、この１／τを積算した値が１となるときのクランク角を自着火時期θｋｎｋとするものである。ここで、図３０Ａまたは図３０Ｂのτは燃焼室５内の燃料が自着火にいたるまでの時間である。自着火時期θｋｎｋが求まれば、この自着火時期θｋｎｋから燃焼室５の自着火時期における容積Ｖｋｎｋが機械的に求まる。
【０１９７】
なお、第１実施形態ではガソリンを燃料としている場合に、この燃料のオクタン価推定値ＯＣＴＥＳＴを算出するようにしており、このオクタン価推定値ＯＣＴＥＳＴの燃料のときの１／τを算出する必要がある。このため、図３０Ａに示すオクタン価１００（最大オクタン価）の燃料での１／τと、図３０Ｂに示すオクタン価８０（最小オクタン価）の燃料での１／τとに基づいてオクタン価推定値ＯＣＴＥＳＴの燃料での１／τを算出するようにしている（後述する）。
【０１９８】
一方、自着火時期θｋｎｋが分かれば図３１より自着火時の燃焼質量割合ＢＲｋｎｋを求めることができ、この自着火時の燃焼質量割合ＢＲｋｎｋと燃料量ＱＩＮＪとから次の計算式により未燃燃料量ＭＵＢを求めることができる。すなわち、燃料量ＱＩＮＪのうちＢＲｋｎｋが既に燃焼している割合であるから、残りの１−ＢＲｋｎｋがまだ燃焼していない割合となる。
【０１９９】
ＭＵＢ＝ＱＩＮＪ×（１−ＢＲｋｎｋ）          …（補１０）
ただし、図３１では計算を簡単にするため、燃焼開始遅れ期間、初期燃焼期間、主燃焼期間の３つ分け、各期間の特性を直線で近似している。
【０２００】
この場合、図３１の特性はエンジンの負荷や回転速度が相違しても変わらないので、エンジン仕様が定まれば一義的に定まることから、運転条件の相違毎に適合する必要はない。
【０２０１】
次に、既燃ガスの定容比熱Ｃｖについても次のように熱力学の計算式により算出することができる。すなわち、定圧比熱Ｃｐの定義はＣｐ＝（∂Ｅ／∂Ｔ）ｐであるから、この式を積分すると次式を得る。
【０２０２】
∫ｄＥ＝Ｃｐ×∫ｄＴ                          …（補１１）
∴Ｅ＝Ｃｐ×Ｔ                            …（補１２）
（補１２）式より定圧比熱Ｃｐは次式で与えられる。
【０２０３】
Ｃｐ＝Ｅ／Ｔ                                  …（補１３）
一方、理想気体で等圧変化のときにはＣｐ−Ｃｖ＝Ｒが成立するので、この式と（補１３）式より定圧比熱Ｃｐを消去し定容比熱Ｃｖについて整理すると最終的に次式が得られる。
【０２０４】
Ｃｖ＝Ｅ／Ｔ−Ｒ                              …（補１４）
ただし、Ｅ：エンタルピ、
Ｔ：燃焼室５内の自着火時時期における平均温度、
上記（補９）式の燃焼室５内の全てのガスの質量Ｍは次式により計算できる。
【０２０５】
Ｍ＝ＭＲＥＳ＋ＭＡＣＹＬ＋ＱＩＮＪ            …（補１５）
ただし、ＭＲＥＳ：内部不活性ガス量、
ＭＡＣＹＬ：シリンダ新気量、
ＱＩＮＪ：燃料量、
このように、未燃燃料量ＭＵＢ、既燃ガスの定容比熱Ｃｖ、燃焼室５内の全てのガスの質量Ｍも（補１０）、（補１４）、（補１５）の計算式によりそれぞれ求めることができることがわかる。残る未知数は、上記（補９）式の燃焼室５内の全てのガスの総モル数ｎ、（補１４）式のエンタルピＥ及び燃焼室５内の自着火時期における平均温度Ｔ（＝ＴＥ）である。
【０２０６】
ここで、上記（補９）式の燃焼室５内の全てのガスの総モル数ｎ及び各成分ガスのモル数は燃焼の基礎式を用いて計算により求めることができ、各成分ガスのモル数と実験式とを用いて（補１４）式のエンタルピＥを計算することができる。燃焼室５内の自着火時期における平均温度ＴＥも熱力学の式を用いて計算により求めることができる。
【０２０７】
このように、ノックによる圧力上昇分ｄＰを、テーブルやマップに頼らずにほぼ計算式により求められるように構成しているのであり、これによりテーブルやマップ作成に要する実験の工数と時間を大幅に削減することができる。
【０２０８】
後は、このようにして得た圧力上昇分ｄＰとノックとを関連させることであり、このｄＰをノック強度推定値に換算する。
【０２０９】
次に、ノック限界点火時期ＫＮＯＣＫｃａｌの算出を以下のフローチャートを参照しながら詳述する。
【０２１０】
図３２、図３３（図２のステップ２のサブルーチン）はノック限界点火時期ＫＮＯＣＫｃａｌを算出するためのもので、クランク角が所定の時期（例えばＭＢＴＣＡＬ）になると実行する。なお、以下では前述のフローで既に求めている物理量を重複して求めているような部分もあるが、説明する。
【０２１１】
図３２においてステップ２０１では、図１４のステップ５２、５３で算出されているシリンダ新気量ＭＡＣＹＬ［ｇ］及び内部不活性ガス量ＭＲＥＳ［ｇ］、燃料量ＱＩＮＪ［ｇ］、図１０のステップ１７１で算出されている初期燃焼期間ＢＵＲＮ１［ｄｅｇ］、図１２のステップ１９１で算出されている主燃焼期間ＢＵＲＮ２［ｄｅｇ］、図１３のステップ４３で算出されている基本点火時期ＭＢＴＣＡＬ［ｄｅｇＢＴＤＣ］のほか、図５のステップ１７で算出されている点火無駄時間相当値ＩＧＮＤＥＡＤ［ｄｅｇ］、温度センサ４３により検出されるコレクタ内温度ＴＣＯＬ［Ｋ］、温度センサ４５より検出される排気温度ＴＥＸＨ［Ｋ］、圧力センサ４４により検出されるコレクタ内圧力ＰＣＯＬ［Ｐａ］を読み込む。なお、燃料量ＱＩＮＪ［ｇ］は燃料噴射パルス幅ＴＩ［ｍｓ］に比例させて求めればよい。
【０２１２】
ステップ２０２ではシリンダ新気量ＭＡＣＹＬ［ｇ］をＷＩＤＲＹ［ｇ］に、内部不活性ガス量ＭＲＥＳ［ｇ］をＭＡＳＳＺ［ｇ］に移す。これらＷＩＤＲＹ、ＭＡＳＳＺは、ノック強度推定値ＫＩＣの算出にのみ用いるために導入したもので、ＷＩＤＲＹはシリンダ新気量、ＭＡＳＳＺは内部不活性ガス量である。
【０２１３】
ステップ２０３では基本点火時期ＭＢＴｃａｌ［ｄｅｇＢＴＤＣ］と点火無駄時間相当クランク角ＩＧＮＤＥＡＤ［ｄｅｇ］を加算した値（つまり燃焼開始時のクランク角）をクランク角θ［ｄｅｇＢＴＤＣ］にセットする。
【０２１４】
ステップ２０４では燃焼室５の圧縮開始時温度ＴＣ０［Ｋ］を次式により算出する。
【０２１５】
ＴＣ０＝｛（ＷＩＤＲＹ＋ＱＩＮＪ）×ＴＣＯＬ＋ＭＡＳＳＺ×ＴＥＸＨ｝
／（ＷＩＤＲＹ＋ＱＩＮＪ＋ＭＡＳＳＺ）        …（６０）
ここでは、不活性ガスと新気の比熱を等しくして式を簡略化している。
【０２１６】
ステップ２０５では燃焼室５の圧縮開始時圧力ＰＣ０［Ｐａ］を算出する。これは圧力センサ４４により検出される吸気弁閉時期ＩＶＣのコレクタ内圧力ＰＣＯＬをＰＣ０とすればよい。
【０２１７】
ステップ２０６〜２０８はオクタン価推定値ＯＣＴＥＳＴの燃料に対する１／τを算出する部分である。最大オクタン価から最小オクタン価までの複数の異なるオクタン価毎に１／τのマップを備えさせるとＲＯＭ容量が大きくなり過ぎるので、ここでは最大オクタン価（例えば１００）の燃料に対する１／τのマップと、最小オクタン価（例えば８０）の燃料に対する１／τのマップとだけ持たせておき、最大オクタン価と最小オクタン価の間にあるオクタン価（オクタン価推定値ＯＣＴＥＳＴ）の燃料に対する１／τは、それらオクタン価１００の燃料での１／τと、オクタン価８０の燃料での１／τとの間を補間計算して算出する。
【０２１８】
具体的にはステップ２０６、２０７で圧縮開始時温度ＴＣ０と圧縮開始時圧力ＰＣ０とから図３０Ａ、図３０Ｂを内容とするマップをそれぞれ検索することによりオクタン価１００の燃料での１／τ、オクタン価８０の燃料での１／τを算出する。各１／τは図３０Ａ、図３０Ｂのように温度、圧力が大きくなるほど大きくなる値である。また、温度、圧力が同じであれば、オクタン価１００の燃料での１／τのほうが、オクタン価８０の燃料での１／τより大きい傾向を示す。従って、ステップ２０８ではオクタン価推定値ＯＣＴＥＳＴの燃料での１／τを次式（補間計算式）により算出する。
【０２１９】
１／τEST＝１／τ80＋（ＯＣＴＥＳＴ−８０）
×（１／τ100−１／τ80）／（１００−８０）
…（補１７）
ただし、１／τEST：オクタン価推定値ＯＣＴＥＳＴの燃料での１／τ、
１／τ100：オクタン価１００の燃料での１／τ、
１／τ80 ：オクタン価８０の燃料での１／τ、
ここで、オクタン価推定値ＯＣＴＥＳＴの算出については図３８により後述する。
【０２２０】
ステップ２０９ではこのオクタン価推定値ＯＣＴＥＳＴの燃料での１／τをＳＵＭに加算する。ＳＵＭは１／τの積算値を表す。積算値ＳＵＭの初期値はゼロである。
【０２２１】
ステップ２１０ではこの積算値ＳＵＭと１とを比較する。積算値ＳＵＭが１に満たないときには自着火したタイミングでないのでステップ２１１に進んで現在のクランク角θと所定値ｃｏｎｓｔ０１を比較する。ここで、所定値ｃｏｎｓｔ０１には点火後のノックがもう生じないクランク角位置（例えば９０ｄｅｇＡＴＤＣ）を設定している。現在のクランク角θが所定値ｃｏｎｓｔ０１を超えていないときにはステップ２１２に進み、クランク角を所定角度ｃｏｎｓｔ０２（例えば１ｄｅｇ）だけ進める。
【０２２２】
ステップ２１３では燃焼室５内の瞬間圧縮比εθを算出する。この瞬間圧縮比εθは燃焼室５の隙間容積Ｖｃを燃焼室５の現在のクランク角θにおける容積で除算した値である。燃焼室５の現在のクランク角θにおける容積はピストン６のストローク位置つまりエンジンのクランク角により定まるので、クランク角θをパラメータとするテーブルを予め作成しておき現在のクランク角θからこのテーブルを検索することにより求めればよい。
【０２２３】
ステップ２１４では現在のクランク角θのときの燃焼質量割合ＢＲを算出する。これには、まず現在のクランク角θから、燃焼質量割合を求めるためのクランク角Θ［ｄｅｇＡＴＤＣ］を算出する。
【０２２４】
この場合、変数としてのクランク角Θは圧縮上死点ＴＤＣを基準のゼロとしてこれより遅角側をプラス、これより進角側をマイナスに採った値であり、このクランク角Θ［ｄｅｇＡＴＤＣ］を用いると燃焼質量割合ＢＲは次のような一次式となる。
【０２２５】
燃焼遅れ期間；
ＢＲ＝０                                              …（６１）
初期燃焼期間；
ＢＲ＝ＳＳ１×（Θ＋ＭＢＴＣＡＬ−ＩＧＮＤＥＡＤ）    …（６２）
主燃焼期間  ；
ＢＲ＝０．０２＋ＳＳ２×（Θ＋ＭＢＴＣＡＬ−ＩＧＮＤＥＡＤ−ＢＵＲＮ１）
…（６３）
ただし、ＳＳ１：０．０２／ＢＵＲＮ１、
ＳＳ２：０．５８／ＢＵＲＮ２、
従って、算出したクランク角Θが燃焼遅れ期間にあるときには（６１）式により、初期燃焼期間にあるときには（６２）式により、主燃焼期間にあるときには（６３）式により燃焼質量割合を算出する。
【０２２６】
ステップ２１５、２１６では燃焼室５内の燃料が燃焼したときの平均温度ＴＣ［Ｋ］と平均圧力ＰＣ［Ｐａ］を次式により算出する。
【０２２７】
ＴＣ＝ＴＣ０×εθ＾０・３５
＋ＣＦ＃×ＱＩＮＪ×ＢＲ／（ＭＡＳＳＺ＋ＷＩＤＲＹ＋ＱＩＮＪ）
…（６４）
ＰＣ＝ＰＣ０×εθ＾１．３５×ＴＣ／ＴＣ０／εθ＾０．３５…（６５）
ただし、εθ  ：瞬間圧縮比、
ＣＦ＃：燃料の低位発熱量、
（６４）、（６５）式は燃焼室５内でガスが断熱圧縮されると共に定容変化で燃焼すると仮定したときの式である。すなわち、（６４）式右辺第１項が断熱圧縮後の温度を、（６５）式右辺のＰＣ０×εθ＾１．３５が断熱圧縮後の圧力を、これに対して（６４）式右辺第２項が定容変化で燃焼により温度上昇した分を、（６５）式右辺のＴＣ／ＴＣ０／εθ＾０．３５が定容変化での燃焼による圧力上昇率を表している。
【０２２８】
ステップ２１７では燃焼室５内の未燃混合気の温度Ｔｕｂを次式により算出する。
【０２２９】
Ｔｕｂ＝ＴＣ０×εθ＾０・３５×（ＰＣ／ＰＣ０／εθ＾１．３５）
＾（０．３５／１．３５）                        …（６６）
（６６）式は燃焼室５内でガスが断熱圧縮されると共に、（６４）式とは相違して、可逆断熱変化で燃焼すると仮定したときの式である。すなわち、（６６）式右辺のＴＣ０×εθ＾０．３５が断熱圧縮後の温度を、（６６）式右辺の（ＰＣ／ＰＣ０／εθ＾１．３５）＾（０．３５／１．３５）が可逆断熱変化での燃焼による温度上昇率を表している。      
【０２３０】
なお、未燃混合気の圧力は上記（６５）式の平均圧力ＰＣと等しいと仮定する。
【０２３１】
ここで、（６４）式の平均温度ＴＣと、（６６）式の未燃混合気の温度Ｔｕｂとの違いは次のようなものである。すなわち、（６４）式の平均温度ＴＣは燃焼室５内で発生した熱が燃焼室５内の全てのガスを昇温させると仮定したときの温度である。これに対して、（６６）式の未燃混合気温度Ｔｕｂは燃焼室５内でガスが既燃ガスと未燃ガスの２つに分離された状態にあり、燃焼室５内で発生した熱は既燃ガスのみを昇温させると仮定したときの温度である。そして、未燃混合気の自着火により急激な圧力上昇が生じてノックが発生する。
【０２３２】
この後はステップ２０６に戻り、ステップ２０６、２０７において、初回に用いた燃焼開始時温度ＴＣ０と燃焼開始時圧力ＰＣ０に代えて、今度はステップ２１６、２１７で得ている未燃混合気温度Ｔｕｂと未燃混合気圧力（＝ＰＣ）から図３０Ａ、図３０Ｂを内容とするマップをそれぞれ検索することによりオクタン価１００の燃料での１／τとオクタン価８０の燃料での１／τとを算出する。そしてステップ２０８ではこれら２つの１／τに基づいてオクタン価推定値ＯＣＴＥＳＴの燃料での１／τを上記の（補１７）式を用いて算出し、算出したオクタン価推定値ＯＣＴＥＳＴの燃料での１／τをステップ２０９で積算値ＳＵＭに積算する。そして、積算後のＳＵＭと１をステップ２１０で、また現在のクランク角θと所定値ｃｏｎｓｔ０１をステップ２１１で比較する。積算値ＳＵＭが１に満たずかつクランク角θが所定値ｃｏｎｓｔ０２を超えていない場合にはステップ２１２〜２１７の操作を行って燃焼室平均圧力ＰＣと未燃混合気温度Ｔｕｂを算出し、再びステップ２０６〜２１７の操作を繰り返す。
【０２３３】
このようにクランク角θを所定値ｃｏｎｓｔ０２進める毎に燃焼室平均圧力ＰＣと未燃混合気温度Ｔｕｂを算出し直してオクタン価推定値ＯＣＴＥＳＴの燃料での１／τを算出しこれを積算値ＳＵＭに積算することで、ステップ２０９における積算値ＳＵＭが１に向かって徐々に大きくなってゆく。
【０２３４】
やがて積算値ＳＵＭが１以上となったときには自着火時期（ノック発生時期）になったと判断し、ステップ２１０より図３３のステップ２１８に進んでそのときのクランク角θを自着火時期θｋｎｋに移す。
【０２３５】
図３３のステップ２１９では、自着火時の燃焼質量割合ＢＲｋｎｋを算出する。これは自着火時期θｋｎｋが初期燃焼期間にあるときにはこの自着火時期θｋｎｋを圧縮上死点ＴＤＣを基準とする上記のクランク角Θに変換し、その変換したクランク角Θを上記の（６２）式に、また自着火時期θｋｎｋが主燃焼期間にあるときにはこの自着火時期θｋｎｋを圧縮上死点ＴＤＣを基準とする上記のクランク角Θに変換し、その変換したクランク角Θを上記の（６３）式にそれぞれ代入することによって求めることができる。
【０２３６】
ステップ２２０では、燃焼室５の自着火時θｋｎｋにおける平均温度ＴＥを算出する。これは上記（６４）式右辺の燃焼質量割合ＢＲに１．０を代入して得られる燃焼室５の平均温度ＴＣを燃焼室５の自着火時平均温度ＴＥとして求めればよい。
【０２３７】
ステップ２２１では、燃焼室５の自着火時期θｋｎｋにおける容積Ｖｋｎｋを算出する。燃焼室５の自着火時期θｋｎｋにおける容積Ｖｋｎｋは、燃焼室５の現在のクランク角θにおける容積と同様に、ピストン６のストローク位置つまりエンジンのクランク角により定まるので、クランク角θをパラメータとするテーブルを予め作成しておき自着火時θｋｎｋからこのテーブルを検索することにより求めればよい。
【０２３８】
ステップ２２２では燃料量ＱＩＮＪ［ｇ］と自着火時の燃焼質量割合ＢＲｋｎｋとから自着火時の未燃燃料量ＭＵＢ［ｇ］を次式により算出する。
【０２３９】
ＭＵＢ＝ＱＩＮＪ×（１−ＢＲｋｎｋ）                          …（６７）
（６７）式は上記（補１０）式そのものである。
【０２４０】
ステップ２２３では総ガスモル数ＭＬＡＬＬを算出する。これについては図３４のフローにより説明する。
【０２４１】
図３４（図３３ステップ２２３のサブルーチン）において、ステップ２４１では図３２のステップ２０２で算出されている内部不活性ガス量ＭＡＳＳＺ［ｇ］、シリンダ新気量ＷＩＤＲＹ［ｇ］、燃料量ＱＩＮＪ［ｇ］を読み込み、ステップ２４２で燃焼室５の内部不活性ガス率ＲＴＯＥＧＲを次式により算出する。
【０２４２】
ＲＴＯＥＧＲ＝ＭＡＳＳＺ／（ＭＡＳＳＺ＋ＷＩＤＲＹ＋ＱＩＮＪ）…（６８）
ステップ２４３では燃焼室５内の燃料が全て燃焼した（つまりＢＲ＝１）ときの各ガス成分のモル数を算出する。ただし、ガス成分としては、燃料のほかは、Ｏ2、Ｎ2、ＣＯ2、ＣＯ、Ｈ2Ｏに限定する。また、ガソリンの燃料組成をＣ7Ｈ14で近似している。
【０２４３】
まず、燃料量ＱＩＮＪ［ｇ］の燃料が燃焼した後に発生する総排出ガスのモル数ＷＥＤＲＹ［ｍｏｌ］と排出ガス中のＯ2、Ｎ2、ＣＯ2、ＣＯ、Ｈ2Ｏといったそれぞれのガス成分のモル数ＸＥＯ２［ｍｏｌ］、ＸＥＮ２［ｍｏｌ］、ＸＥＣＯ２［ｍｏｌ］、ＸＥＣＯ［ｍｏｌ］、ＸＥＨ２Ｏ［ｍｏｌ］を次のように算出する。
【０２４４】
総排出ガス；ＷＥＤＲＹ＝ＭＩＤＲＹ＃×ＷｌＤＲＹ−ＱｌＮＪ
／（Ｂ＃×ＡＣ＃＋Ａ＃×ＡＨ）×（Ａ＃／４）                                                                      …（６９．１）
酸素      ；ＸＥＯ２  ＝｛ＭＩＤＲＹ＃×ＷｌＤＲＹ×０．２１−ＱＩＮＪ
／（Ｂ＃×ＡＣ＃＋Ａ＃×ＡＨ）×（Ｂ＃＋Ａ＃／４）｝
／ＷＥＤＲＹ                      …（６９．２）
二酸化炭素；ＸＥＣＯ２＝｛ＱＩＮＪ／（Ｂ＃×ＡＣ＃＋Ａ＃×ＡＨ＃）×Ｂ＃｝
／ＷＥＤＲＹ                      …（６９．３）
一酸化炭素；ＸＥＣＯ  ＝０                                  …（６９．４）
窒素      ；ＸＥＮ２  ＝１−ＸＥＯ２−ＸＥＣＯ２−ＸＥＣＯ  …（６９．５）
水        ；ＸＥＨ２Ｏ＝｛ＭＩＤＲＹ＃×ＷＩＤＲＹ×１５／７４５
＋ＱＩＮＪ／（Ｂ＃×ＡＣ＃＋Ａ＃×ＡＨ＃）
×Ａ＃／２｝／ＷＥＤＲＹ          …（６９．６）
ただし、ＭＩＤＲＹ＃：１ｇ当たりの新気ガスのモル数
ＡＨ＃：水素のモル質量、
ＡＣ＃：炭素のモル質量、
Ａ＃、Ｂ＃：定数、
ここで、ガソリンの組成をＣ7Ｈ14で近似しているため、定数Ａ＃は１４、定数Ｂ＃は７である。
【０２４５】
次に、燃焼サイクル初期の各ガス成分のモル数ＷＧＡＳ［ｍｏｌ］、ＷＥＧＲ［ｍｏｌ］、ＷＯ２［ｍｏｌ］、ＷＮ２［ｍｏｌ］、ＷＣＯ２［ｍｏｌ］、ＷＣＯ［ｍｏｌ］、ＷＨ２Ｏ［ｍｏｌ］を次のように算出する。
【０２４６】
燃料      ；ＷＧＡＳ＝ＱＩＮＪ／（Ｂ＃×ＡＣ＃＋Ａ＃×ＡＨ＃）
…（７０．１）
不活性ガス；ＷＥＧＲ＝ＭＩＤＲＹ＃×ＷＩＤＲＹ×ＲＴＯＥＧＲ…（７０．２）
酸素      ；ＷＯ２  ＝ＭＩＤＲＹ＃×ＷＩＤＲＹ×０．２１＋ＷＥＧＲ×ＸＥＯ２
…（７０．３）
窒素      ；ＷＮ２  ＝ＭＩＤＲＹ＃×ＷＩＤＲＹ×０．８９＋ＷＥＧＲ×ＸＥＮ２
…（７０．４）
二酸化炭素；ＷＣＯ２＝ＷＥＧＲ×ＸＥＣＯ２                  …（７０．５）
一酸化炭素；ＷＣＯ  ＝ＷＥＧＲ×ＸＥＣＯ                    …（７０．６）
水        ；ＷＨ２Ｏ＝ＭＩＤＲＹ＃×ＷＩＤＲＹ×１５／７４５
＋ＷＥＧＲ×ＸＥＨ２Ｏ            …（７０．７）
次に、全て燃焼した（つまりＢＲ＝１）ときの各ガス成分のモル数ＭＬＧＡＳ［ｍｏｌ］、ＭＬＯ２［ｍｏｌ］、ＭＬＮ２［ｍｏｌ］、ＭＬＣＯ２［ｍｏｌ］、ＭＬＣＯ［ｍｏｌ］、ＭＬＨ２Ｏ［ｍｏｌ］を次のように算出する。
【０２４７】
燃料      ；ＭＬＧＡＳ＝ＷＧＡＳ−ＱＩＮＪ／（Ｂ＃×ＡＣ＃＋Ａ＃×ＡＨ＃）
…（７１．１）
酸素      ；ＭＬＯ２  ＝ＷＯ２−（Ｂ＃＋Ａ＃／４）×ＱｌＮＪ
／（Ｂ＃×ＡＣ＃＋Ａ＃×ＡＨ＃）  …（７１．２）
窒素      ；ＭＬＮ２  ＝ＷＮ２                              …（７１．３）
二酸化炭素；ＭＬＣＯ２＝ＷＣＯ２＋Ｂ＃×ＱＩＮＪ
／（Ｂ＃×ＡＣ＃＋Ａ＃×ＡＨ＃）  …（７１．４）
一酸化炭素；ＭＬＣＯ  ＝ＷＣＯ                              …（７１．５）
水        ；ＭＬＨ２Ｏ＝ＷＨ２Ｏ＋Ａ＃／２×ＱＩＮＪ
／（Ｂ＃×ＡＣ＃＋Ａ＃×ＡＨ＃）  …（７１．６）
これで、燃焼室５内の燃料が全て燃焼した（つまりＢＲ＝１）ときの各ガス成分のモル数の算出を終了するので、ステップ２４４に進み各ガス成分のモル数の総和を燃焼室５内の燃料が全て燃焼したときの総ガスモル数ＭＬＡＬＬとして、つまり次式により総ガスモル数ＭＬＡＬＬを算出する。
【０２４８】
ＭＬＡＬＬ＝ＭＬＧＡＳ＋ＭＬＯ２＋ＭＬＮ２＋ＭＬＣＯ２＋ＭＬＣＯ＋ＭＬＨ２Ｏ
…（７１．７）
このようにして総ガスモル数ＭＬＡＬＬの算出を終わったら図３３のステップ２２４に戻り、ガスエンタルピ（自着火する燃料ガスのエンタルピ）Ｅ［ｃａｌ／ｍｏｌ］を算出する。このガスエンタルピの算出については図３５のフローにより説明する。図３５（図３３ステップ２２４のサブルーチン）においてステップ２５１では、図３３のステップ２２０で算出されている燃焼室５の自着火時平均温度ＴＥ、図３４のステップ２４３、２４４で算出されている各ガス成分のモル数ＭＬＧＡＳ、ＭＬＯ２、ＭＬＮ２、ＭＬＣＯ２、ＭＬＣＯ、ＭＬＨ２Ｏ、総ガスモル数ＭＬＡＬＬを読み込む。
【０２４９】
ステップ２５２では自着火時平均温度ＴＥから各ガス成分のエンタルピＥＯ２、ＥＮ２、ＥＣＯ２、ＥＣＯ、ＥＨ２Ｏを算出する。各ガス成分のエンタルピは次の水谷の実験式（内燃機関ｖｏｌ．１１  Ｎｏ．１２５ｐ７９参照）を用いて算出すればよい。
（１）ＴＥ＜１２００Ｋの場合
Ｅ＝Ａ０＃＋１０００×（Ａ１＃×（ＴＥ／１０００）
＋Ａ２＃／２×（ＴＥ／１０００）＾２
＋Ａ３＃／３×（ＴＥ／１０００）＾３
＋Ａ４＃／４×（ＴＥ／１０００）＾４
＋Ａ５＃／５×（ＴＥ／１０００）＾５）＋ＨＤＬ＃…（７２．１）
（２）ＴＥ＞１２００Ｋの場合
Ｅ＝Ｂ０＃＋１０００×（Ｂ１＃×（ＴＥ／１０００）
＋Ｂ２＃×ＬＮ（ＴＥ／１０００）
−Ｂ３＃／（ＴＥ／１０００）
−Ｂ４＃／２／（ＴＥ／１０００）＾２
−Ｂ５＃／３／（ＴＥ／１０００）＾３）＋ＨＤＬ＃…（７２．２）
ただし、Ａ０＃〜Ａ５＃、Ｂ０〜Ｂ５＃、ＨＤＬ＃は実験により求める適合値、
ステップ２５３では燃料のエンタルピＥＧを次式により算出する。
【０２５０】
ＥＧ＝Ｂ＃／ＡＣ＃×ＥＣＯ２＋Ａ＃／ＡＨ＃×ＥＨ２０／２
＋（Ｂ＃／ＡＣ＃＋Ａ＃／ＡＨ＃／４）×ＥＯ２…（７２．３）
ステップ２５４では各ガス成分の平均エンタルピＥを次式により計算して図３５の処理を終了し、図３３のステップ２２５に戻る。
【０２５１】
Ｅ＝（ＭＬＧＡＳ×ＥＧ＋ＭＬＯ２×ＥＯ２＋ＭＬＮ２×ＥＮ２
＋ＭＬＣＯ２×ＥＣＯ２＋ＭＬＣＯ×ＥＣＯ＋ＭＬＨ２Ｏ×ＥＨ２Ｏ）
／ＭＬＡＬＬ                                    …（７２．４）
図３３のステップ２２５では既燃ガスの定容比熱Ｃｖ［Ｊ／Ｋ・ｇ］をガスエンタルピＥ、燃焼室５の自着火時平均温度ＴＥを用いて次式により計算する。
【０２５２】
Ｃｖ＝Ｅ／ＴＥ−Ｒ＃                                    …（７３）
ただし、Ｒ＃：普遍気体定数、
（７３）式は上記（補１４）式においてＴ→ＴＥ、Ｒ→Ｒ＃の置き換えにより得られる式である。
【０２５３】
ステップ２２６では自着火による圧力上昇分つまりノックによる圧力上昇分ＤＰ［Ｐａ］を次式により算出する。
【０２５４】
ＤＰ＝（ＷＡＬＬ×ＭＵＢ×Ｒ＃×ＣＦ＃）
／｛Ｃｖ×Ｖｋｎｋ×（ＭＡＳＳＺ＋ＱＩＮＪ＋ＷＩＤＲＹ）｝
…（７４）
ただし、ＣＦ＃：燃料の低位発熱量、
（７４）式の圧力上昇分ＤＰは図２９に示したようにノック発生により燃焼室５内の圧力がステップ的に大きくなるので、この圧力上昇分を計算式により求めるようにしたものである。
【０２５５】
（７４）式は上記（補９）式においてｄＰ→ＤＰ、ｎ→ＭＬＡＬＬ、Ｒ→Ｒ＃、Ｖ→Ｖｋｎｋ、Ｍ→ＭＡＳＳＺ＋ＷＩＤＲＹ＋ＱＩＮＪの置き換えにより得られる式である。
【０２５６】
ステップ２２７ではノック強度推定値基本値ＫＩＣ０を次式により算出する。
【０２５７】
ＫＩＣ０＝相関係数１×ＤＰ                              …（７５）
ここで、（７５）式右辺の相関係数１はノック強度との相関を表すための係数である。この場合、ノックによる圧力上昇分ＤＰが大きいほどノック強度推定値基本値ＫＩＣ０が大きくなるようにしている。
【０２５８】
ステップ２２８ではエンジン回転速度ＮＲＰＭから図３６を内容とするテーブルを検索することにより回転速度補正係数ＫＮを次式により算出し、ステップ２２９でこの回転速度補正係数ＫＮをノック強度推定値基本値ＫＩＣ０に乗算した値をノック強度推定値ＫＩＣとして、つまり次式によりノック強度推定値ＫＩＣを算出する。
【０２５９】
ＫＩＣ＝ＫＩＣ０×ＫＮ                                  …（７６）
ここで、回転速度補正係数ＫＮは、エンジン回転速度ＮＲＰＭが低いときのほうが回転速度が高いときよりノックによる圧力振動をドライバーが強く感じるので、この違いをノック強度推定値に反映させるためのものである。すなわち、図３６のようにＫＮの値は、基準回転速度ＮＲＰＭ０のときを１．０としてこれより低い回転速度域では１．０を超える値、この逆に基準回転速度ＮＲＰＭ０より高い回転速度域で１．０未満の値である。実際の値は実験により適合する。
【０２６０】
ステップ２３０ではノックリタード量ＫＮＲＴ［ｄｅｇ］を次の式により算出する。
【０２６１】
ＫＮＲＴ＝ＫＩＣ−トレースノック強度                    …（７７）
ここで、（７７）式のトレースノック強度は周知のように軽いノックが生じるときのノック強度である。このトレースノック強度はエンジン回転速度ＮＲＰＭから図３７を内容とするテーブルを検索して求める。
【０２６２】
ステップ２３１では基本点火時期ＭＢＴＣＡＬよりノックリタード量ＫＮＲＴを差し引いた値をノック限界点火時期ＫＮＯＣＫｃａｌとして、つまりノック限界点火時期ＫＮＯＣＫｃａｌ［ｄｅｇＢＴＤＣ］を次式により算出する。
【０２６３】
ＫＮＯＣＫｃａｌ＝ＭＢＴＣＡＬ−ＫＮＲＴ                …（７８）
一方、積算値ＳＵＭが１に達しないことあり、このときには図３２のステップ２１１において、現在のクランク角θがやがて所定値ｃｏｎｓｔ０１を超える。このときには図３２のステップ２１１より図３３のステップ２３２に進みノックリタード量ＫＮＲＴ＝０とした後、ステップ２３１の操作を実行する。
【０２６４】
そのあとはクランク角が次の燃焼サイクルの基本点火時期ＭＢＴＣＡＬにくるまでそのまま待機し、再び図３２、図３３の処理を実行する。こうして一燃焼サイクル毎にノック限界点火時期ＫＮＯＣＫｃａｌが求められる。
【０２６５】
このようにしてノック限界点火時期ＫＮＯＣＫｃａｌの算出を終了したら図２のステップ３に戻り、基本点火時期ＭＢＴＣＡＬ［ｄｅｇＢＴＤＣ］とノック限界点火時期ＫＮＯＣＫｃａｌ［ｄｅｇＢＴＤＣ］のうちから小さいほう、つまり遅角側の値を点火時期最小値ＰＡＤＶとして選択し、さらにステップ４ではこれに水温等による各種の補正を加えた値を点火時期指令値ＱＡＤＶ［ｄｅｇＢＴＤＣ］として設定する。エンジンの暖機完了後であれば、水温等による補正はないので、点火時期指令値ＱＡＤＶは点火時期最小値ＰＡＤＶに等しくなる。
【０２６６】
こうして設定した点火時期指令値ＱＡＤＶは、ステップ５で点火レジスタに移され、実際のクランク角がこの点火時期指令値ＱＡＤＶと一致したタイミングでエンジンコントローラ３１より一次電流を遮断する点火信号が点火コイル１３に出力される。
【０２６７】
次に、運転中における燃料のオクタン価推定値ＯＣＴＥＳＴ及び圧縮比推定値ＣＭＰＥＳＴの算出を図３８のフローにより説明する。オクタン価及び圧縮比の推定はノックセンサ４７からの信号に基づいてノックが生じたか否かを検出しつつ行うので、図３８のフローは気筒毎かつ点火毎に点火の直後に実行する。ここで、気筒毎かつ点火毎に実行するにはクランク角センサ（３３、３４）からの信号により作られる基準位置信号（気筒毎）の入力より所定のクランク角が経過したタイミングで実行すればよい。ここでは４気筒エンジンの場合で説明する。もちろん本発明は４気筒エンジンに限定されるものでなく、６気筒、８気筒、１２気筒エンジン等にも適用可能である。
【０２６８】
図３８においてステップ２６１では気筒数カウンタ値（始動時にゼロに初期設定）ｋｔｃｎｔを１だけインクリメントする。気筒数カウンタ値ｋｔｃｎｔは点火した気筒数を計測するためのものである。
【０２６９】
ステップ２６２ではノックセンサ４７を用いてノックが生じているか否かを気筒別にみる。例えばノックセンサ４７により検出される電圧値と所定値とを比較し、電圧値が所定値を超えていればそのとき点火した気筒でノックが発生していると判断し、ステップ２６３に進んでノック検出気筒の気筒番号をメモリに記憶する。４気筒エンジンでは４つのメモリを用意しており、ノック検出気筒が例えばＮｏ．１気筒であれば１を記憶する。
【０２７０】
ステップ２６４ではノックカウンタ値ｋｎｋｃｎｔ（始動時にゼロに初期設定）を１だけインクリメントする。ノックカウンタ値ｋｎｋｃｎｔは全気筒のうちノックの生じた気筒の数を計測するためのものである。第１実施形態では上記のノックセンサ４７は一つであり、この一つのノックセンサ４７により気筒毎にノックが生じたか否かを検出しているが、気筒毎にノックセンサを設けるようにしてもかまわない。
【０２７１】
ステップ２６５では気筒数カウンタ値ｋｔｃｎｔと気筒数（４気筒エンジンでは４）を比較する。気筒数カウンタ値ｋｔｃｎｔが気筒数に達しないときにはそのまま今回の処理を終了する。
【０２７２】
次からの基準位置信号の入力毎にステップ２６１〜２６５の操作を繰り返す。オクタン価推定値ＯＣＴＥＳＴが実際のオクタン価より大き過ぎるときには２以上（複数）の気筒でノックが生じる。このときにはステップ２６５、２６６で気筒数カウンタ値ｋｔｃｎｔが気筒数に等しくかつノックカウンタ値ｋｎｋｃｎｔが２以上となるので、ノックが生じたことより大きすぎると推定されるオクタン価推定値ＯＣＴＥＳＴを実際のオクタン価へと戻すためステップ２６７に進み、オクタン価推定値ＯＣＴＥＳＴを第１の所定値ｃｏｎｓｔ０３だけ小さくする。つまり、次式によりオクタン価推定値ＯＣＴＥＳＴを更新する。
【０２７３】
ＯＣＴＥＳＴ（new）＝ＯＣＴＥＳＴ（old）−ｃｏｎｓｔ０３…（７９）
ただし、ＯＣＴＥＳＴ（new）：更新後のオクタン価推定値、
ＯＣＴＥＳＴ（old）：更新前のオクタン価推定値、
ｃｏｎｓｔ０３     ：小さくする側への更新量、
ステップ２６８ではオクタン価推定値を（７９）式により更新したことを表すためオクタン価推定値更新フラグ（始動時にゼロに初期設定）＝１とする。
【０２７４】
一方、オクタン価推定値に実際のオクタン価からの誤差はなくてもノックが生じることがあり、そのノック検出気筒では何からの原因で（考えられるのは製作バラツキや燃焼室５内でのデポジットの付着等）残りの気筒より圧縮比が増大していると考えられる。また、こうした事態は全気筒のうちの１つの気筒についてだけ生じることが多い。そこで、全気筒のうちの１つの気筒についてだけノックが生じるとき（つまり気筒数カウンタ値ｋｔｃｎｔが気筒数に等しくかつノックカウンタ値ｋｎｋｃｎｔが１であるとき）にはノックが生じた原因はオクタン価推定値の誤差によるものでなく、ノック検出気筒でのみ圧縮比が予め設定した圧縮比ε（上記（３）式参照）より増大しているためであると判断しノック検出気筒の圧縮比推定値を、予定されていた圧縮比εを外れてしまった実際の圧縮比と合わせるためステップ２６５、２６６よりステップ２６９に進み、ノック検出気筒の圧縮比推定値ＣＭＰＥＳＴｉを第１の所定値ｃｏｎｓｔ２３だけ大きくする。つまり、次式によりノック検出気筒の圧縮比推定値ＣＭＰＥＳＴｉを更新する。
【０２７５】
ＣＭＰＥＳＴｉ（new）＝ＣＭＰＥＳＴｉ（old）＋ｃｏｎｓｔ２３…（８０）
ただし、ＣＭＰＥＳＴｉ（new）：更新後の圧縮比推定値、
ＣＭＰＥＳＴｉ（old）：更新前の圧縮比推定値、
ｃｏｎｓｔ２３       ：大きくする側への更新量、
ここで、ノック検出気筒の圧縮比推定値の初期値は予め設定した圧縮比ε（一定値）である。
【０２７６】
多気筒エンジンではどの気筒でも予め設定した圧縮比εより増大し得るので、圧縮比の増大した気筒を知る必要があり気筒別の圧縮比推定値ＣＭＰＥＳＴｉ（ｉは気筒番号）を導入している。４気筒エンジンであれば、これら気筒別の圧縮比推定値はＮｏ．１気筒の圧縮比推定値がＣＭＰＥＳＴ１、Ｎｏ．２気筒の圧縮比推定値がＣＭＰＥＳＴ２、Ｎｏ．３気筒の圧縮比推定値がＣＭＰＥＳＴ３、Ｎｏ．４気筒の圧縮比推定値がＣＭＰＥＳＴ４である。上記のようにノック検出気筒がＮｏ．１気筒であるときにはＮｏ．１気筒の圧縮比推定値ＣＭＰＥＳＴ１だけが上記（８０）式により増大側に更新される。残りＮｏ．２、Ｎｏ．３、Ｎｏ．４の３つの気筒の圧縮比推定値ＣＭＰＥＳＴ２〜ＣＭＰＥＳＴ４はそのまま、つまり予め設定されているεである。
【０２７７】
ステップ２７０では圧縮比推定値を上記（８０）式により更新したことを表すため圧縮比推定値更新フラグ（始動時にゼロに初期設定）＝１とすると共に、ステップ２７１でノック検出気筒（圧縮比が増大している気筒）の気筒番号をメモリｉに格納して保存する。圧縮比が増大している気筒の気筒番号を保存する必要があるのは、次の理由からである。すなわち、圧縮比が異なれば前述の初期燃焼期間ＢＵＲＮ１が異なり、初期燃焼期間が異なれば基本点火時期ＭＢＴＣＡＬを変更する必要がある。そうなると圧縮比が増大している気筒と、圧縮比は増大せず初期設定のままの残りの気筒とに分けて点火時期制御を行わなければならないので、その気筒別の点火時期制御において圧縮比が増大している気筒の気筒番号が必要となるためである。
【０２７８】
ステップ２７２では全気筒分の一燃焼サイクルを終了するので、次の燃焼サイクルに備えるためカウンタ値ｋｔｃｎｔ、ｋｎｋｃｎｔをリセットすると共に、ステップ２６３でノック検出気筒を記憶したメモリを全てクリアする。
【０２７９】
ノックが検出されない場合にはステップ２６２よりステップ２７３に進み、オクタン価推定値更新フラグをみる。オクタン価推定値更新フラグ＝０であるときにはそのまま今回の処理を終了する。
【０２８０】
オクタン価推定値更新フラグ＝１であるときにはノックが生じたためにオクタン価推定値ＯＣＴＥＳＴが小さくなる側に更新され、この更新後のオクタン価推定値に基づいて算出されるノック限界点火期は基本点火時期よりも遅角される。この場合に、点火時期を遅角のしっ放しにしておくと燃費が悪くなるので、ノックを回避した後は点火時期を再び、燃費が最適となる基本点火時期へと戻す必要があり、そのためにはノック回避のためオクタン価推定値ＯＣＴＥＳＴを小さくなる側に更新した後に所定の周期でオクタン価推定値ＯＣＴＥＳＴを大きくなる側に戻せばよい。
【０２８１】
このため、オクタン価推定値ＯＣＴＥＳＴが小さくなる側に更新されたとき（オクタン価推定値更新フラグ＝１あるとき）にはステップ２７３よりステップ２７４に進み図２のステップ３において算出されている点火時期最小値ＰＡＤＶ［ｄｅｇＢＴＤＣ］と図２のステップ１において算出されている基本点火時期ＭＢＴＣＡＬ［ｄｅｇＢＴＤＣ］を比較する。オクタン価推定値更新フラグ＝１となった直後には点火時期最小値ＰＡＤＶが基本点火時期ＭＢＴＣＡＬとが一致していない。つまり、オクタン価推定値ＯＣＴＥＳＴと実際のオクタン価が一致しておらずその結果としてノック回避のため点火時期が遅角されていると判断し、ステップ２７４よりステップ２７５に進んでカウンタ値ｃｏｕｎｔと所定値ｃｏｎｓｔ０４とを比較する。カウンタ値ｃｏｕｎｔの初期値はゼロであり、ステップ２７５に進んできた当初はカウンタ値ｃｏｕｎｔが所定値ｃｏｎｓｔ０４未満にあるので、このときにはステップ２７６に進み、カウンタ値ｃｏｕｎｔを１だけインクリメントする。すなわち、カウンタ値ｃｏｕｎｔは図３８のフローを一回実行する毎に値が１ずつ増すので、やがてカウンタ値ｃｏｕｎｔが所定値ｃｏｎｓｔ０４以上になる。このときにはステップ２７５よりステップ２７７に進んでオクタン価推定値ＯＣＴＥＳＴを第２の所定値ｃｏｎｓｔ０５だけ増やす。つまり、次式によりオクタン価推定値ＯＣＴＥＳＴを更新する。
【０２８２】
ＯＣＴＥＳＴ（new）＝ＯＣＴＥＳＴ（old）＋ｃｏｎｓｔ０５…（８１）
ただし、ＯＣＴＥＳＴ（new）：更新後のオクタン価推定値、
ＯＣＴＥＳＴ（old）：更新前のオクタン価推定値、
ｃｏｎｓｔ０５     ：大きくする側への更新量、
オクタン価推定値ＯＣＴＥＳＴの更新は、カウンタ値ｃｏｕｎｔが所定値ｃｏｎｓｔ０４となる毎であるので、ステップ２７８ではカウンタ値ｃｏｕｎｔをゼロにリセットする。
【０２８３】
ステップ２７７の操作が何度が繰り返されると点火時期最小値ＰＡＤＶが基本点火時期ＭＢＴＣＡＬと一致するので、このときにはステップ２７３、２７４よりステップ２７９へと進んでオクタン価推定値更新フラグ＝０とする。これは次のノックに備えるためである。
【０２８４】
図３９はオクタン価推定値が実際のオクタン価より大き過ぎたためにノックが生じた、つまり全気筒のうち複数の気筒でノックが検出される場合の点火時期、カウンタ値ｃｏｕｎｔ、オクタン価推定値ＯＣＴＥＳＴの動きをモデルで示している。図示のようにｔ０１のタイミングでノックセンサ４７により複数の気筒でノックを検出したときにはオクタン価推定値ＯＣＴＥＳＴが実際のオクタン価より大きい結果であると判断されオクタン価推定値ＯＣＴＥＳＴが第１の所定値ｃｏｎｓｔ０３だけステップ的に小さくされる。この結果、ノックが生じないようであれば、カウンタ値ｃｏｕｎｔが所定値ｃｏｎｓｔ０４に達する毎に今度はオクタン価推定値ＯＣＴＥＳＴが第２の所定値ｃｏｎｓｔ０５ずつ大きくなってゆく。そして、ｔ０２のタイミングで点火時期最小値ＰＡＤＶがＭＢＴＣＡＬに一致した後はオクタン価推定値ＯＣＴＥＳＴの更新が中止されそのときの値が保持される。その後のｔ０３のタイミングで再び複数の気筒でノックが生じれば上記の操作が繰り返される。
【０２８５】
このようにして算出されるオクタン価推定値ＯＣＴＥＳＴは図３２のステップ２０８でのオクタン価推定値ＯＣＴＥＳＴの燃料での１／τの算出に用いられる。
【０２８６】
また、図３８のステップ２６９において算出されているノック検出気筒の圧縮比推定値ＣＭＰＥＳＴｉは基本点火時期の算出及び点火時期制御のため図２、図５、図１０、図１３において用いられる。
【０２８７】
図５から説明すると、図５においてステップ４０１〜４０４は圧縮比が設定値であるεより増大している気筒（以下「圧縮比増大気筒」という。）について燃焼室５の吸気弁閉時期における容積を算出する部分である。
【０２８８】
ここで、圧縮比増大気筒について燃焼室５の吸気弁閉時期における容積を「ＶＩＶＣｉ」として圧縮比増大気筒以外の気筒についての燃焼室５の吸気弁閉時期における容積であるＶＩＶＣと区別する。また、圧縮比増大気筒についての隙間容積及び圧縮比増大気筒についての燃焼室５の吸気弁閉時期における容積についても、「Ｖｃｉ」及び「ＶＩＶＣｉ」として圧縮比増大気筒以外の気筒についての隙間容積であるＶｃ及び圧縮比増大気筒以外の気筒についての燃焼室５の吸気弁閉時期における容積であるＶＩＶＣと区別する。
【０２８９】
具体的には図５のステップ４０１で圧縮比推定値更新フラグをみる。圧縮比推定値更新フラグ＝１であるときには圧縮比増大気筒があると判断して図５のステップ４０２に進み図３８のステップ２６９で得られている圧縮比増大気筒の圧縮比推定値ＣＭＰＥＳＴｉを読込み、この圧縮比推定値ＣＭＰＥＳＴｉを用い図５のステップ４０３で次式により圧縮比増大気筒の隙間容積Ｖｃｉ［ｍ3］を算出する。
【０２９０】
Ｖｃｉ＝（π／４）Ｄ2・Ｈx／（ＣＭＰＥＳＴｉ−１）            …（８２）
ただし、ＣＭＰＥＳＴ：圧縮比推定値、
Ｄ ：シリンダボア径［ｍ］、
Ｈx：ピストンピン７６のＴＤＣからの距離との最大値と最小値の差
［ｍ］、
ここで、（８２）式は上記（３）式に置き換わるものである。（３）式の圧縮比εは予め設定している値（一定値）であるのに対して圧縮比増大気筒ではこのεに代えて圧縮比推定値ＣＭＰＥＳＴｉ（ＣＭＰＥＳＴｉ＞ε）を採用するとしたものである。
【０２９１】
このようにして求めた圧縮比増大気筒の隙間容積Ｖｃｉを用い、図５のステップ４０４では圧縮比増大気筒についての燃焼室５の吸気弁閉時期における容積ＶＩＶＣｉを次式により算出する。
【０２９２】
ＶＩＶＣｉ＝Ｖｃｉ＋（π／４）Ｄ2・Ｈivc                      …（８３）
Ｄ          ：シリンダボア径［ｍ］、
Ｈivc       ：吸気弁閉時期におけるピストンピン７６のＴＤＣ
からの距離［ｍ］、
この（８３）式は上記（２）式と式そのものは同じである。
【０２９３】
次に、図１０においてステップ４１１〜４１４、４１５、４１６は圧縮比増大気筒について燃焼室５の燃焼開始時期における容積、初期燃焼期間を算出する部分である。ここでも、圧縮比増大気筒についての燃焼室５の燃焼開始時期における容積を「Ｖ０ｉ」及び圧縮比増大気筒についての初期燃焼期間を「ＢＵＲＮ１ｉ」として圧縮比増大気筒以外の気筒についての燃焼室５の燃焼開始時期における容積であるＶ０及び圧縮比増大気筒以外の気筒についての初期燃焼期間であるＢＵＲＮ１と区別する。
【０２９４】
具体的には図１０のステップ４１１で圧縮比推定値更新フラグをみる。圧縮比推定値更新フラグ＝１であるときには圧縮比増大気筒があると判断し図１０のステップ４１２に進み図３８のステップ２６９で得られている圧縮比増大気筒の圧縮比推定値ＣＭＰＥＳＴｉを読込み、この圧縮比推定値ＣＭＰＥＳＴｉを用い図１０のステップ４１３で上記（８２）式により圧縮比増大気筒の隙間容積Ｖｃｉ［ｍ3］を算出する。図１０のステップ４１４ではこの隙間容積Ｖｃｉを用い次式により圧縮比増大気筒についての燃焼室５の燃焼開始時期（ＭＢＴＣＹＣＬ）における容積Ｖ０ｉを算出する。
【０２９５】
Ｖ０ｉ＝Ｖｃｉ＋（π／４）Ｄ2・Ｈmbtcycl                    …（８４）
ただし、Ｄ       ：シリンダボア径［ｍ］、
Ｈmbtcycl：燃焼開始時期（ＭＢＴＣＹＣＬ）におけるピストンピン
７６のＴＤＣからの距離［ｍ］、
また、図１０のステップ４１５でも圧縮比推定値更新フラグをみる。圧縮比推定値更新フラグ＝１であるときには図１０のステップ４１６に進んで次式により圧縮比増大気筒の初期燃焼期間ＢＵＲＮ１ｉ［ｄｅｇ］を算出する。
【０２９６】
ＢＵＲＮ１ｉ＝｛（ＮＲＰＭ×６）×ＢＲ１×Ｖ０ｉ｝
／（ＲＰＲＯＢＡ×ＡＦ１×ＦＬＡＭＥ１）          …（８５）
ただし、ＡＦ１  ：火炎核の反応面積（固定値）［ｍ2］、
次に図１３においてステップ４２１〜４２５は圧縮比増大気筒について燃焼期間、基本点火時期を算出する部分である。ここでも、圧縮比増大気筒についての燃焼期間及び圧縮比増大気筒についての基本点火時期を「ＢＵＲＮｉ」及び「ＭＢＴＣＡＬｉ」として圧縮比増大気筒以外の気筒についての燃焼期間であるＢＵＲＮ及び圧縮比増大気筒以外の気筒についての基本点火時期であるＭＢＴＣＡＬと区別する。
【０２９７】
具体的には図１３のステップ４２１で圧縮比推定値更新フラグをみる。圧縮比推定値更新フラグ＝１であるときには図１３のステップ４２２に進み図１０のステップ４１６で得られている圧縮比増大気筒の初期燃焼期間ＢＵＲＮ１ｉを読込み、この圧縮比推定値ＣＭＰＥＳＴｉを用い図１３のステップ４２３で圧縮比増大気筒の初期燃焼期間ＢＵＲＮ１ｉと主燃焼期間ＢＵＲＮ２の合計を圧縮比増大気筒の燃焼期間ＢＵＲＮｉ［ｄｅｇ］として算出する。
【０２９８】
図１３のステップ４２４では圧縮比増大気筒の燃焼期間ＢＵＲＮｉを用いて次式により基本点火時期ＭＢＴＣＡＬｉ［ｄｅｇＢＴＤＣ］を算出する。
【０２９９】
ＭＢＴＣＡＬｉ＝ＢＵＲＮｉ−θＰＭＡＸ＋ＩＧＮＤＥＡＤ        …（８６）
次に図２においてステップ３９１〜３９３は圧縮比増大気筒について点火時期最小値、点火時期指令値を算出する部分である。ここでも、圧縮比増大気筒についての点火時期最小値及び圧縮比増大気筒についての点火時期指令値を「ＰＡＤＶｉ」及び「ＱＡＤＶｉ」として圧縮比増大気筒以外の気筒についての点火時期最小値であるＰＡＤＶ及び圧縮比増大気筒以外の気筒についての点火時期指令値であるＱＡＤＶと区別する。
【０３００】
具体的には図２のステップ３９１で圧縮比推定値更新フラグをみる。圧縮比推定値更新フラグ＝１であるときにはステップ３９２に進み図１３のステップ４２４で算出されている圧縮比増大気筒の基本点火時期ＭＢＴＣＡＬｉ［ｄｅｇＢＴＤＣ］とノック限界点火時期ＫＮＯＣＫｃａｌ［ｄｅｇＢＴＤＣ］のうちから小さいほう、つまり遅角側の値を圧縮比増大気筒の点火時期最小値ＰＡＤＶｉとして選択し、さらに図２のステップ３９３ではこれに水温等による各種の補正を加えた値を圧縮比増大気筒の点火時期指令値ＱＡＤＶｉ［ｄｅｇＢＴＤＣ］として設定する。エンジンの暖機完了後であれば、水温等による補正はないので、点火時期指令値ＱＡＤＶｉは点火時期最小値ＰＡＤＶｉに等しくなる。
【０３０１】
図２のステップ３９４では点火気筒の気筒番号が図３８のステップ２７１で得られているメモリｉの気筒番号と一致するか否かをみる。点火気筒の気筒番号がメモリｉの気筒番号と一致するときには図２のステップ３９５に進んで圧縮比増大気筒の点火時期指令値ＱＡＤＶｉを点火レジスタに移す。
【０３０２】
一方、圧縮比増大気筒以外の気筒については点火気筒の気筒番号がメモリｉの気筒番号と一致しないので、図２のステップ３９４より図２のステップ３９６に進んで点火時期指令値ＱＡＤＶを点火レジスタに移す。
【０３０３】
このようにして、２種類の基本点火時期（圧縮比増大気筒についての基本点火時期であるＭＢＴＣＡＬｉと圧縮比増大気筒以外の気筒についての基本点火時期であるＭＢＴＣＡＬ）を用いて点火制御を行う。
【０３０４】
ここで、本実施形態（第１実施形態）の作用効果を説明する。
【０３０５】
第１実施形態（請求項１〜４に記載の発明）によれば、使用する燃料と燃焼室５内の燃焼ガス状態とがノックに及ぼす影響の主要因であることに対応して、第１実施形態（請求項１〜４に記載の発明）によれば、オクタン価推定値ＯＣＴＥＳＴ（燃料に関するノック相関パラメータの推定値）と圧縮比推定値ＣＭＰＥＳＴｉ（燃焼室内の燃焼ガス状態に関するノック相関パラメータの推定値）とを条件により切換えて算出する、つまり使用する燃料の変更に起因してノックが生じているときにはオクタン価推定値ＯＣＴＥＳＴを算出（図３８のステップ２６３〜２６６、２６７参照）し、製作バラツキや燃焼室５内へのデポジットの付着に起因してノックが生じているときには圧縮比増大気筒の圧縮比推定値ＣＭＰＥＳＴｉを算出（図３８のステップ２６３〜２６６、２６９参照）するので、種類の異なるノック相関パラメータのいずれの推定値（オクタン価推定値ＯＣＴＥＳＴと圧縮比推定値ＣＭＰＥＳＴｉ）をも精度よく算出できる。
【０３０６】
また、第１実施形態（請求項１〜４、６に記載の発明）によれば、ガソリンを燃料としている場合に、ノックセンサ４７によるノック検出結果を点火時期ではなく燃料のオクタン価にフィードバックしている（図３８参照）。すなわち、図３９最下段に示したように、オクタン価推定値ＯＣＴＥＳＴは、ノックが生じたことを検出したときに第１の所定値ｃｏｎｓｔ０３だけステップ的に小さくなり、その後は第２の所定値ｃｏｎｓｔ０５ずつ所定の周期で徐々に大きくなっている。この動きは、ちょうど従来装置のノック制御における点火時期リタード量の動きと同様である。
【０３０７】
このように、第１実施形態（請求項１〜４に記載の発明）によれば、ノックセンサ４７によるノック検出結果に基づいてオクタン価推定値ＯＣＴＥＳＴ（燃料に関するノック相関パラメータの推定値）を算出し（図３８のステップ２６２、２６７、２７７参照）、そのオクタン価推定値ＯＣＴＥＳＴに基づいて点火時期を算出し、その算出した点火時期で火花点火を行う、具体的にはそのオクタン価推定値ＯＣＴＥＳＴに基づいて燃焼室５内での自着火時期θｋｎｋ（ノック発生時期）を予測し（図３２のステップ２０６〜２１０、図３３のステップ２１８参照）、この自着火時期θｋｎｋに基づいてノック限界点火時期ＫＮＯＣＫｃａｌを算出し（図３３のステップ２１９〜２３１参照）、このノック限界点火時期ＫＮＯＣＫｃａｌで火花点火を行う（図２のステップ３、４、５参照）ので、またはオクタン価推定値ＯＣＴＥＳＴ（燃料に関するノック相関パラメータの推定値）に基づいてノック限界点火時期ＫＮＯＣＫｃａｌを算出し（図３２のステップ２０６〜２１０、図３３のステップ２１８、図３３のステップ２１９〜２３１参照）、圧縮比推定値ＣＯＭＰＥＳＴｉ（燃焼室内の燃焼ガス状態に関するノック相関パラメータの推定値）に基づいてＭＢＴの得られる基本点火時期ＭＢＴＣＡＬｉを算出し（図１０のステップ４１１、４１２〜４１４、４１６、図１３のステップ４２１〜４２４参照）、圧縮比推定値ＣＭＰＥＳＴｉを選択した際に、ノック限界点火時期ＫＮＯＣＫｃａｌと基本点火時期ＭＢＴＣＡＬｉのうち、遅角側の点火時期で火花点火を行う（図２のステップ３９１〜３９４、３９６参照）ので、またはオクタン価推定値ＯＣＴＥＳＴ（燃料に関するノック相関パラメータの推定値）に基づいて燃焼室内での自着火時期θｋｎｋ（ノック発生時期）を予測し（図３２のステップ２０６〜２１０、図３３のステップ２１８参照）、この自着火時期θｋｎｋに基づいてノック限界点火時期ＫＮＯＣＫｃａｌを算出し（図３３のステップ２１９〜２３１参照）、圧縮比推定値ＣＭＰＥＳＴｉ（燃焼室内の燃焼ガス状態に関するノック相関パラメータの推定値）に基づいて燃焼室５の燃焼開始時期における容積Ｖ０ｉを算出し（図１０のステップ４１１〜４１４参照）、この燃焼開始時における容積Ｖ０ｉに基づいて燃焼開始から所定クランク角までの燃焼期間ＢＵＲＮｉを算出し（図１０のステップ４１５、４１６、図１３のステップ４２１〜４２３参照）、この燃焼期間ＢＵＲＮｉに基づいてＭＢＴの得られる基本点火時期ＭＢＴＣＡＬｉを算出し（図１３のステップ４２４参照）、圧縮比推定値ＣＭＰＥＳＴｉを選択した際に、ノック限界点火時期ＫＮＯＣＫｃａｌと基本点火時期ＭＴＣＡＬｉのうち、遅角側の点火時期で火花点火を行う（図２のステップ３９１〜３９４、３９６参照）ので、燃料のオクタン価を予め知り得ていない市場で販売される燃料を使用する場合においても、運転状態によらず、ノックセンサ４７によるノック検出結果を点火時期にフィードバックする従来装置のようにノック回避のための点火時期の遅角とそれに続く進角の操作とが繰り返されることがない。このため、加速時や減速時といった過渡でもノック限界点火時期を追従できるので、燃費悪化、出力低下を防ぐことができ���。
【０３０８】
第１実施形態では、図５、図１０、図１２、図１３に示したように、層流燃焼速度ＳＬ１、ＳＬ２、燃焼ガス体積相当容積（Ｖ０、ＶＴＤＣ）、燃焼質量割合（ＢＲ１、ＢＲ２）及び反応確率ＲＰＲＯＢＡに基づいて燃焼開始から所定クランク角までの燃焼期間（ＢＵＲＮ１、ＢＵＲＮ２）を算出し、この燃焼期間（ＢＵＲＮ１、ＢＵＲＮ２）に基づいて基本点火時期ＭＢＴＣＡＬを算出する場合で説明したが、基本点火時期ＭＢＴＣＡＬの算出に代えて、ベース点火時期のマップを備えさせるものでもかまわない。この場合に、ノック限界点火時期算出手段を、自着火時期θｋｎｋ（ノック発生時期）と運転条件とに基づいて燃焼室５のノックによる圧力上昇量ＤＰを推定する圧力上昇量推定手段（図３３のステップ２１９〜２２６参照）と、この圧力上昇量ＤＰに基づいてノック強度推定値ＫＩＣを算出するノック強度推定値算出手段（図３３のステップ２２７〜２２９参照）と、このノック強度推定値ＫＩＣに基づいてノックリタード量ＫＮＲＴを算出するノックリタード量算出手段（図３３のステップ２３０参照）と、このノックリタード量ＫＮＲＴだけ基本点火時期ＭＢＴＣＡＬを遅角側に補正した値をノック限界点火時期ＫＮＯＣＫｃａｌとして設定するノック限界点火時期設定手段（図３３のステップ２３１参照）とを含んで構成することで（請求項５に記載の発明）、基本点火時期としてのベース点火時期をマップで与えるにしても、最大オクタン価から最小オクタン価までの複数の異なるオクタン価毎にベース点火時期のマップを与える必要がなく、これによりＲＯＭ容量が大きくなることがない。
【０３０９】
第１実施形態（請求項６に記載の発明）によれば、燃料に関するノック相関パラメータは燃料のオクタン価であるので、ガソリンを燃料とする場合に、燃料のオクタン価を正確に推定できる。
【０３１０】
第１実施形態（請求項９に記載の発明）によれば、２種類のノック相関パラメータのうちのいずれかを選択するための条件がノックカウンタ値ｋｎｋｃｎｔ（全気筒のうちノックが発生した気筒の数）である（図３８のステップ２６６参照）ので、複数の気筒を有する多気筒エンジンの場合にノックが生じた原因がいずれのノック相関パラメータによるものか、つまりノックが生じた原因が燃料のオクタン価（燃料に関するノック相関パラメータ）によるものか、あるいは圧縮比（燃焼室内の燃焼ガス状態に関するノック相関パラメータ）によるものかを精度よく判定できる。
【０３１１】
第１実施形態（請求項１１に記載の発明）によれば、ノックカウンタ値ｋｎｋｃｎｔ（ノックが発生した気筒の数）が１（単数）であるとき圧縮比（燃焼室内の燃焼ガス状態に関するノック相関パラメータ）を選択する（図３８のステップ２６６、２６９参照）ので、複数の気筒を有する多気筒エンジンの場合に気筒別の圧縮比推定値ＣＭＰＥＳＴｉ（燃焼室内の燃焼ガス状態に関するノック相関パラメータの推定値）を算出することができる。
【０３１２】
第１実施形態（請求項１９に記載の発明）によれば、燃焼ガスの層流状態での燃焼速度である層流燃焼速度（ＳＬ１、ＳＬ２）を算出し、燃焼室内の燃焼ガス体積に相当する容積（Ｖ０、ＶＴＤＣ）を算出し、所定のクランク角までに前記燃焼室内で燃焼するガスの燃焼質量割合（ＢＲ１、ＢＲ２）を算出し、所定運転条件での燃焼ガスの燃焼のしやすさを示す反応確率ＲＰＲＯＢＡを算出し、これら層流燃焼速度（ＳＬ１、ＳＬ２）、燃焼ガス体積相当容積（Ｖ０、ＶＴＤＣ）、燃焼質量割合（ＢＲ１、ＢＲ２）及び反応確率ＲＰＲＯＢＡに基づいて燃焼開始から所定クランク角までの燃焼期間（ＢＵＲＮ１、ＢＵＲＮ２）を算出し、この燃焼期間（ＢＵＲＮ１、ＢＵＲＮ２）に基づいてＭＢＴの得られる基本点火時期ＭＢＴＣＡＬを算出すると共に、前記燃焼期間を初期燃焼期間ＢＵＲＮ１と主燃焼期間ＢＵＲＮ２とに分割し（以上図２のステップ１、図５、図１０、図１２、図１３参照）、圧縮比増大気筒の圧縮比推定値ＣＭＰＥＳＴｉに基づいて燃焼室の開始時期における容積Ｖ０ｉを算出し（図１０のステップ４１３、４１４参照）、この燃焼室の燃焼開始時期の容積Ｖ０を前記燃焼室内の燃焼ガス体積に相当する容積として用いて圧縮比増大気筒の初期燃焼期間ＢＵＲＮ１を算出する（図１０のステップ４１６参照）ので、予めオクタン価の定まっている燃料を使用する場合において製作バラツキや燃焼室５内へのデポジットの付着に起因して実際の圧縮比がエンジン仕様の圧縮比より増大する気筒が生じたときにおいても、運転状態によらず、ノック検出結果を点火時期にフィードバックする従来装置のようにノック回避のための点火時期の遅角とそれに続く進角の操作とが繰り返されることがない。このため、加速時や減速時などの過渡でもノック限界点火時期を追従できるので、燃費悪化、出力低下を防ぐことができる。
【０３１３】
第１実施形態（請求項２０に記載の発明）によれば、図１０に示したように燃焼室５の吸気弁閉時期における容積ＶＩＶＣと燃焼開始時期における容積Ｖ０とに基づいて吸気弁閉時期ＩＶＣから燃焼開始時期までの有効圧縮比Ｅｃを算出し（図１０のステップ１６３参照）、燃焼室５の吸気弁閉時期の温度ＴＩＮＩとこの有効圧縮比Ｅｃとから燃焼室５の燃焼開始時期における温度Ｔ０を、燃焼室５の吸気弁閉時期の圧力ＰＩＮＩとこの有効圧縮比Ｅｃとから燃焼室５の燃焼開始時期における圧力Ｐ０をそれぞれ算出し（図１０のステップ１６４〜１６７参照）、これら燃焼室５の燃焼開始時期における温度Ｔ０と圧力Ｐ０とに基づいて初期燃焼期間ＢＵＲＮ１の算出に用いる層流燃焼速度ＳＬ１を算出する（図１０のステップ１６８参照）場合に、圧縮比増大気筒の圧縮比推定値ＣＭＰＥＳＴｉに基づいて圧縮比増大気筒についての燃焼室５の吸気弁閉時期における容積ＶＩＶＣｉを算出する（図５のステップ４０３、４０４参照）ので、予めオクタン価の定まっている燃料を使用する場合において製作バラツキや燃焼室５内へのデポジットの付着に起因して実際の圧縮比が予定している圧縮比より増大する気筒が生じたときにおいても、圧縮比増大気筒についての燃焼室５の吸気弁閉時期における容積ＶＩＶＣを精度よく算出できる。
【０３１４】
図４０、図４２のフローは第２実施形態で、図４０は第１実施形態の図３２と、図４２は第１実施形態の図３８とそれぞれ置き換わるものである。図４０において図３２と同一部分には同一のステップ番号を、また図４２において図３８と同一部分には同一のステップ番号を付している。なお、図３３は第１、第２の実施形態に共通のフローである。
【０３１５】
ガソリンとアルコールの混合燃料（アルコール含有燃料）が使用されることがある。この場合に、ベース点火時期の設定に際して混合燃料中のアルコール濃度を調べ、その調べたアルコール濃度の混合燃料を使用したときにノックが生じないようにベース点火時期をマッチングすることになる。
【０３１６】
しかしながら、例えば海外市場において混合燃料中のアルコール濃度がベース点火時期のマッチングに用いた混合燃料と異なる場合、例えばマッチングに用いた混合燃料のアルコール濃度より低い場合にノックが生じ、ノック回避のための点火時期の遅角とそれに続く進角の操作とが繰り返されると、点火時期の遅角によりノック回避はできても燃費悪化、出力低下が生じる。
【０３１７】
第２実施形態は、アルコールとガソリンとの混合燃料を使用燃料とする場合に適用するもので、条件により２種類のノック相関パラメータのうちのいずれかを選択し、その選択した側のノック相関パラメータの推定値（アルコール濃度推定値または圧縮比推定値）をノックセンサ４７によるノック検出結果に基づいて算出し、このうちアルコール濃度推定値ＡＬＣＥＳＴに基づいて燃焼室５内での自着火時期θｋｎｋ（ノック発生時期）を予測し、この自着火時期θｋｎｋに基づいてノック限界点火時期ＫＮＯＣＫｃａｌを算出する。
【０３１８】
第１実施形態と相違する部分を主に説明すると、図４０においてステップ２８１〜２８３はアルコール濃度推定値ＡＬＣＥＳＴの混合燃料に対する１／τを算出する部分である。最低のアルコール濃度から最高のアルコール濃度までの複数の異なるアルコール濃度毎に１／τのマップを持たせるとＲＯＭ容量が大きくなり過ぎるので、ここでは最低のアルコール濃度（例えば０％）の燃料に対する１／τのマップと、最高のアルコール濃度（例えば８５％）の燃料に対する１／τのマップとだけ持たせておき、最低のアルコール濃度と最高のアルコール濃度の間にあるアルコール濃度（アルコール濃度推定値ＡＬＣＥＳＴ）の混合燃料に対する１／τは、それらアルコール濃度０％の燃料での１／τと、アルコール濃度８５％の燃料での１／τとの間を補間計算して算出する。
【０３１９】
具体的にはステップ２８１、２８２で初回は圧縮開始時温度ＴＣ０と圧縮開始時圧力ＰＣ０とから図４１Ａ、図４１Ｂを内容とするマップをそれぞれ検索することによりアルコール濃度０％の混合燃料での１／τ、アルコール濃度８５％の混合燃料での１／τを算出する。各１／τは図４１Ａ、図４１Ｂのように温度、圧力が大きくなるほど大きくなる値である。また、温度、圧力が同じであれば、アルコール濃度０％の混合燃料での１／τのほうが、アルコール濃度８５％の混合燃料での１／τより大きい傾向を示す。従って、ステップ２８３ではアルコール濃度推定値ＡＬＣＥＳＴの混合燃料での１／τを次式（補間計算式）により算出する。
【０３２０】
１／τEST＝１／τ85＋（８５−ＡＬＣＴＥＳＴ）
×（１／τ0−１／τ85）／（８５−０）
…（補１８）
ただし、１／τEST：アルコール濃度推定値ＡＬＣＥＳＴの混合燃料での１／τ、
１／τ0  ：アルコール濃度０％の混合燃料での１／τ、
１／τ85 ：アルコール濃度８５％の混合燃料での１／τ、
ここで、アルコール濃度推定値ＡＬＣＥＳＴの算出については後述する。
【０３２１】
ステップ２０９ではこのアルコール濃度推定値ＡＬＣＥＳＴの混合燃料での１／τを積算値ＳＵＭに加算する。
【０３２２】
次に、図４２においてステップ２６５、２６６で気筒数カウンタ値ｋｔｃｎｔが気筒数に等しくかつノックカウンタ値ｋｎｋｃｎｔが２以上であるときには全気筒のうち複数気筒でノックが生じており、従って使用している混合燃料の変更によりアルコール濃度推定値ＡＬＣＥＳＴが実際のアルコール濃度より低いと判断しステップ２６５、２６６よりステップ２９１に進み、アルコール濃度推定値ＡＬＣＥＳＴを第１の所定値ｃｏｎｓｔ１３だけ高くする。つまり、次式によりアルコール濃度推定値ＡＬＣＥＳＴを更新する。
【０３２３】
ＡＬＣＥＳＴ（new）＝ＡＬＣＥＳＴ（old）＋ｃｏｎｓｔ１３…（８７）
ただし、ＡＬＣＥＳＴ（new）：更新後のアルコール濃度推定値、
ＡＬＣＥＳＴ（old）：更新前のアルコール濃度推定値、
ｃｏｎｓｔ１３     ：高くする側への更新量、
図４２のステップ２９２ではアルコール濃度推定値を（８７）式により更新したことを表すためアルコール濃度推定値更新フラグ（始動時にゼロに初期設定）＝１とする。
【０３２４】
ノックが検出されない場合にはステップ２６２よりステップ２９３に進み、アルコール濃度推定値更新フラグをみる。アルコール濃度推定値更新フラグ＝０であるときにはそのまま今回の処理を終了する。
【０３２５】
アルコール濃度推定値更新フラグ＝１あるときにはノックが生じたためにアルコール濃度推定値ＡＬＣＥＳＴが上記（８７）式により高くなる側に更新され、この更新後のアルコール濃度推定値に基づいて算出されるノック限界点火期は基本点火時期よりも遅角される。この場合に、点火時期を遅角のしっ放しにしておくと燃費が悪くなるので、ノックを回避した後は点火時期を再び、燃費が最適となる基本点火時期へと戻す必要があり、そのためにはノック回避のためアルコール濃度推定値ＡＬＣＥＳＴを高くなる側に更新した後に所定の周期でアルコール濃度推定値ＡＬＣＥＳＴを低くなる側に戻せばよい。
【０３２６】
このため、アルコール濃度推定値ＡＬＣＥＳＴが高くなる側に更新されたとき（アルコール濃度推定値更新フラグ＝１あるとき）にはステップ２９３よりステップ２７４に進み図２のステップ３において算出されている点火時期最小値ＰＡＤＶ［ｄｅｇＢＴＤＣ］と図２のステップ１において算出されている基本点火時期ＭＢＴＣＡＬ［ｄｅｇＢＴＤＣ］を比較する。アルコール濃度推定値更新フラグ＝１となった直後には点火時期最小値ＰＡＤＶが基本点火時期ＭＢＴＣＡＬとが一致していない。つまり、アルコール濃度推定値ＡＬＣＥＳＴと実際のアルコール濃度が一致しておらずその結果としてノック回避のため点火時期が遅角されていると判断し、ステップ２７４よりステップ２９４に進んでカウンタ値ｃｏｕｎｔと所定値ｃｏｎｓｔ１４とを比較する。カウンタ値ｃｏｕｎｔの初期値はゼロであり、ステップ２９４に進んできた当初はカウンタ値ｃｏｕｎｔが所定値ｃｏｎｓｔ１４未満にあるので、このときにはステップ２７６に進み、カウンタ値ｃｏｕｎｔを１だけインクリメントする。すなわち、カウンタ値ｃｏｕｎｔは図４２のフローを一回実行する毎に値が１ずつ増すので、やがてカウンタ値ｃｏｕｎｔが所定値ｃｏｎｓｔ１４以上になる。このときにはステップ２９４よりステップ２９５に進んでアルコール濃度推定値ＡＬＣＥＳＴを第２の所定値ｃｏｎｓｔ１５だけ低くする。つまり、次式によりアルコール濃度推定値ＡＬＣＥＳＴを更新する。
【０３２７】
ＡＬＣＥＳＴ（new）＝ＡＬＣＥＳＴ（old）−ｃｏｎｓｔ１５…（８８）
ただし、ＡＬＣＥＳＴ（new）：更新後のアルコール濃度推定値、
ＡＬＣＥＳＴ（old）：更新前のアルコール濃度推定値、
ｃｏｎｓｔ１５     ：低くする側への更新量、
また、図４０のステップ２８４、２８５、図４２のステップ２９４では所定値ｃｏｎｓｔ１１、ｃｏｎｓｔ１２、ｃｏｎｓｔ１４を第１実施形態と異なる値にしている。これらの所定値は事前の予備実験等によりマッチングする。ただし、所定値ｃｏｎｓｔ１１、ｃｏｎｓｔ１２は第１実施形態の所定値ｃｏｎｓｔ０１、ｃｏｎｓｔ０２と同じでかまわない。
【０３２８】
図４３にアルコール濃度推定値が実際のアルコール濃度より低過ぎたためにノックが生じた、つまり全気筒のうち複数の気筒でノックが検出される場合の点火時期、カウンタ値ｃｏｕｎｔ、アルコール濃度推定値ＡＬＣＥＳＴの動きをモデルで示す。図示のようにｔ１１のタイミングで複数の気筒でノッキングが生じたときにはアルコール濃度推定値ＡＬＣＥＳＴが実際のアルコール濃度より低い結果であると判断されアルコール濃度推定値ＡＬＣＥＳＴがステップ的に第１の所定値ｃｏｎｓｔ１３だけ高くなる。この結果、ノッキングが生じないようであれば、カウンタ値ｃｏｕｎｔが所定値ｃｏｎｓｔ１４に達する毎に今度はアルコール濃度推定値ＡＬＣＥＳＴが第２の所定値ｃｏｎｓｔ１５ずつ低くなってゆく。そして、ｔ１２のタイミングで点火時期最小値ＰＡＤＶがＭＢＴＣＡＬに一致した後はアルコール濃度推定値ＡＬＣＥＳＴの更新が中止されそのときの値が保持される。その後のｔ１３のタイミングで再び複数の気筒でノックが生じれば上記の操作が繰り返される。
【０３２９】
このようにして算出されるアルコール濃度推定値ＡＬＣＥＳＴは図４０のステップ２８３でアルコール濃度推定値ＡＬＣＥＳＴの燃料での１／τの算出に用いられる。
【０３３０】
また、図４２のステップ２６９において算出されている圧縮比増大気筒の圧縮比推定値ＣＭＰＥＳＴｉは第１、第２の実施形態に共通の図２、図５、図１０、図１３において用いられる。
【０３３１】
第２実施形態によれば、使用する燃料と燃焼室内の燃焼ガス状態とがノックに及ぼす影響の主要因であることに対応して、第２実施形態（請求項１〜４に記載の発明）によれば、アルコール濃度推定値ＡＬＣＥＳＴ（燃料に関するノック相関パラメータの推定値）と圧縮比推定値ＣＭＰＥＳＴ（燃焼室内の燃焼ガス状態に関するノック相関パラメータの推定値）とを条件により切換えて算出する、つまり使用する燃料の変更に起因してノックが生じているときにはアルコール濃度推定値ＡＬＣＥＳＴを算出（図４２のステップ２６３〜２６６、２９１参照）し、製作バラツキや燃焼室内へのデポジットの付着に起因してノックが生じているときには圧縮比増大気筒の圧縮比推定値ＣＭＰＥＳＴｉを算出（図４２のステップ２６３〜２６６、２６９参照）するようにしたので、種類の異なるノック相関パラメータのいずれの推定値（アルコール濃度推定値ＡＬＣＥＳＴと圧縮比推定値ＣＭＰＥＳＴｉ）をも精度よく算出することができる。
【０３３２】
また、第１実施形態（請求項１〜４、７に記載の発明）によれば、ガソリンとアルコールの混合燃料である場合に、ノックセンサ４７によるノック検出結果を点火時期ではなく混合燃料中のアルコール濃度にフィードバックしている（図４２参照）。すなわち、図４３最下段に示したように、アルコール濃度推定値ＡＬＣＥＳＴは、ノックが生じたことを検出したときに第１の所定値ｃｏｎｓｔ１３だけステップ的に高くなり、その後は第２の所定値ｃｏｎｓｔ１５ずつ所定の周期で徐々に小さくなっている。この動きは、ちょうど従来装置のノック制御における点火時期リタード量の動きと同様である。
【０３３３】
このように、第２施形態（請求項１〜４に記載の発明）によれば、ノックセンサ４７によるノック検出結果に基づいてアルコール濃度推定値ＡＬＣＥＳＴを算出し（図４２のステップ２６２、２９１、２９５参照）、そのアルコール濃度推定値ＡＬＣＥＳＴに基づいて点火時期を算出し、その算出した点火時期で火花点火を行う、具体的にはそのアルコール濃度推定値ＡＬＣＥＳＴに基づいて燃焼室５内での自着火時期θｋｎｋ（ノック発生時期）を予測し（図４０のステップ２８１〜２８３、２０９、２１０、図３３のステップ２１８参照）、この自着火時期θｋｎｋに基づいてノック限界点火時期ＫＮＯＣＫｃａｌを算出し（図３３のステップ２１９〜２３１参照）、このノック限界点火時期ＫＮＯＣＫｃａｌで火花点火を行う（図２のステップ３、４、５参照）ので、またはアルコール濃度推定値ＡＬＣＥＳＴ（燃料に関するノック相関パラメータの推定値）に基づいてノック限界点火時期ＫＮＯＣＫｃａｌを算出し（図４０のステップ２８１〜２８３、２０９、２１０、図３３のステップ２１８、図３３のステップ２１９〜２３１参照）、圧縮比推定値ＣＭＰＥＳＴｉ（燃焼室内の燃焼ガス状態に関するノック相関パラメータの推定値）に基づいてＭＢＴの得られる基本点火時期ＭＢＴＣＡＬｉを算出し（図１０のステップ４１１、４１２〜４１４、４１６、図１３のステップ４２１〜４２４参照）、圧縮比推定値ＣＭＰＥＳＴｉを選択した際に、ノック限界点火時期ＫＮＯＣＫｃａｌと基本点火時期ＭＢＴＣＡＬｉのうち、遅角側の点火時期で火花点火を行う（図２のステップ３９１〜３９４、３９６参照）ので、またはアルコール濃度ＡＬＣＥＳＴ（燃料に関するノック相関パラメータの推定値）に基づいて燃焼室内での自着火時期θｋｎｋ（ノック発生時期）を予測し（図４０のステップ２８１〜２８３、２０９、２１０、図３３のステップ２１８参照）、この自着火時期θｋｎｋに基づいてノック限界点火時期ＫＮＯＣＫｃａｌを算出し（図３３のステップ２１９〜２３１参照）、圧縮比推定値ＣＭＰＥＳＴｉ（燃焼室内の燃焼ガス状態に関するノック相関パラメータの推定値）に基づいて燃焼室５の燃焼開始時期における容積Ｖ０ｉを算出し（図１０のステップ４１１〜４１４参照）、この燃焼開始時における容積Ｖ０ｉに基づいて燃焼開始から所定クランク角までの燃焼期間ＢＵＲＮｉを算出し（図１０のステップ４１５、４１６、図１３のステップ４２１〜４２３参照）、この燃焼期間ＢＵＲＮｉに基づいてＭＢＴの得られる基本点火時期ＭＢＴＣＡＬｉを算出し（図１３のステップ４２４参照）、圧縮比推定値ＣＭＰＥＳＴｉを選択した際に、ノック限界点火時期ＫＮＯＣＫｃａｌと基本点火時期（ＭＴＣＡＬｉのうち、遅角側の点火時期で火花点火を行う（図２のステップ３９１〜３９４、３９６参照）ので、混合燃料中のアルコール濃度を予め知り得ていない市場で販売される混合燃料を使用する場合においても、運転状態によらず、ノック検出結果を点火時期にフィードバックする従来装置のようにノック回避のための点火時期の遅角とそれに続く進角の操作とが繰り返されることがない。このため、第１実施形態と同様に過渡でもノック限界点火時期を追従できるので、燃費悪化、出力低下を防ぐこと���できる。
【０３３４】
第２実施形態（請求項７に記載の発明）によれば、燃料に関するノック相関パラメータは混合燃料のアルコール濃度であるので、ガソリンとアルコールの混合燃料である場合に、混合燃料のアルコール濃度を正確に推定できる。
【０３３５】
そのほか第１実施形態と同様の作用効果を奏することはいうまでもない。
【０３３６】
図４４、図４７のフローは第３、第４の実施形態で、図４４のフローは第１実施形態の図３８と、図４７のフローは第２実施形態の図４２と置き換わるものである。これらのフローはエンジンの始動後の流れを時系列に示したもので、一定時間毎に実行するフローではない。
【０３３７】
第３実施形態はガソリンを使用するエンジンを対象として給油されたことを判定したときにノック検出結果をオクタン価推定値ＯＣＴＥＳＴに、給油されたことを判定しないときにはノック検出結果を圧縮比推定値ＣＭＰＥＳＴにフィードバックするようにしたもの、第４実施形態はガソリンとアルコールの混合燃料を使用するエンジンを対象として給油されたことを判定したときにノック検出結果をアルコール濃度推定値ＡＬＣＥＳＴに、給油されたことを判定しないときにはノック判定結果を圧縮比推定値ＣＭＰＥＳＴにフィードバックするようにしたものである。ここで、第１、第２の実施形態ではどの気筒においてノックが生じているか否かまで検出したが、第３、第４の実施形態では気筒判別までは必要ない。従って、気筒毎にノックが生じているか否かあるいは全気筒まとめてノックが生じているか否かを検出すればよい。
【０３３８】
第３、第４の２つの実施形態において使用する燃料は相違するものの、推定値の算出方法はほぼ同様であるので、２つの実施形態に共通する部分についてはまとめて説明し、２つの実施形態で相違する部分については別々に説明する。
【０３３９】
図４４、図４７においてステップ３０１ではイグニッションキーをＯＦＦとしている間に給油キャップを開けたかどうかをみる。これは、給油キャップの開閉を検出するセンサを給油口に設けておき、このセンサからの出力に基づいて給油キャップが開いたか否かを検出してその結果を保持させておけばよい。イグニッションキーをＯＦＦとしている間に給油キャップが開いたことを示す情報が保持されていると判定したときには給油があったことを表すためステップ３０２に進んで給油フラグ＝１とする。
【０３４０】
第３実施形態では図４４のステップ３０２でオクタン価推定値ＯＣＴＥＳＴに初期値としての１００％を入れる。これは、ノック検出結果を即座にオクタン価推定値に反映させるためである。すなわち、給油された燃料のオクタン価が１００％であれば、初期値として入れたオクタン価推定値ＯＣＴＥＳＴ（＝１００％）と一致するのでノックは生じない。ところが、給油された燃料のオクタン価が１００％より小さい場合に、オクタン価推定値ＯＣＴＥＳＴに初期値として入れた１００％が大き過ぎることになりノックが生じる。そこで、このときにはノックが生じるたびにオクタン価推定値ＯＣＴＥＳＴを第１の所定値ｃｏｎｓｔ０３ずつ減少していき、ノックが生じなくなったときオクタン価推定値ＯＣＴＥＳＴが収束した、つまりその収束値を給油された燃料のオクタン価であるとみなすものである。
【０３４１】
同様にして第４実施形態では図４７のステップ３３１でアルコール濃度推定値ＡＬＣＯＣＴＥＳＴに初期値としての０％を入れる。これは、ノック検出結果を即座にアルコール濃度推定値に反映させるためである。すなわち、給油された混合燃料のアルコール濃度が０％であれば、初期値として入れたアルコール濃度推定値ＡＬＣＥＳＴ（＝０％）と一致するのでノックは生じない。ところが、給油された混合燃料のアルコール濃度が０％より高い場合に、アルコール濃度推定値ＡＬＣＥＳＴに初期値として入れた０％が低過ぎることになりノックが生じる。そこで、このときにはノックが生じるたびにアルコール濃度推定値ＡＬＣＥＳＴを第１の所定値ｃｏｎｓｔ１３ずつ高くしていき、ノックが生じなくなったときアルコール濃度推定値ＡＬＣＥＳＴが収束した、つまりその収束値を給油された混合燃料のアルコール濃度であるとみなすものである。
【０３４２】
図４４、図４７のステップ３０３、３０４は給油後に給油前の燃料がすべて消費されたか否かを判定する部分である。この部分の実行タイミングは各気筒の燃料噴射直後である。給油直後には給油前の燃料が燃料配管中に残っており、燃料配管中の燃料が全て消費されたときに給油後の燃料に入れ替わったとみなすことができる。そこで、始動からの燃料消費量ＳＵＭＱを算出しその燃料消費量ＳＵＭＱが燃料配管容量とが一致したとき燃料が入れ替わったと判断する。すなわち、図４４、図４７のステップ３０３では今回噴射終了直後の燃料消費量ＳＵＭＱ（new）［ｇ］（始動時にゼロに初期設定）と所定の燃料配管容量［ｇ］（一定値）とを比較する。始動後直ぐには燃料消費量ＳＵＭＱ（new）は燃料配管容量より小さいので図４４、図４７のステップ３０４に進み、次回の燃料噴射に備えて今回噴射終了直後の燃料消費量ＳＵＭＱ（new）を前回噴射終了直後の燃料消費量であるＳＵＭＱ（old）［ｇ］に移す。
【０３４３】
次回の燃料噴射が行われると、図４４、図４７のステップ３０５ではその次回の燃料噴射量Ｑｆ［ｇ］を前回噴射終了直後の燃料消費量であるＳＵＭＱ（old）に加算して今回噴射終了直後の燃料消費量であるＳＵＭＱ（new）を算出する。ここで、今回の燃料噴射量Ｑｆを求めるには今回の燃料噴射に用いた燃料噴射パルス幅Ｔｉ［ｍｓ］に変換係数を乗算して燃料質量単位［ｇ］に換算してやればよい。そして、図４４、図４７のステップ３０３で再び燃料消費量ＳＵＭＱ（new）と所定の燃料配管容量とを比較する。燃料消費量ＳＵＭＱ（new）が燃料配管容量より小さければ図４４、図４７のステップ３０４、３０５、３０３の操作を繰り返す。
【０３４４】
始動からの燃料噴射の回数が多くなれば、やがて燃料消費量ＳＵＭＱ（new）が燃料配管容量に達するので、このときには給油前の燃料から給油後の燃料に入れ替わったと判断して第３実施形態では図４４のステップ３０３より図４４のステップ３０６に進みオクタン価推定値ＯＣＴＥＳＴを、第４実施形態では図４７のステップ３０３より図４７のステップ３３２に進みアルコール濃度推定値ＡＬＣＥＳＴを算出する。
【０３４５】
第３実施形態におけるオクタン価推定値ＯＣＴＥＳＴの算出については図４５のフローにより説明する。
【０３４６】
図４５（図４４ステップ３０６のサブルーチン）は第１実施形態の図３８と基本的に同様であり、従って図３８と同一部分に同一のステップ番号をつけている。第１実施形態は、気筒別のノック検出結果に基づいて全気筒のうち複数気筒でノックが生じている場合であるのかそれとも全気筒のうち１つの気筒にだけノックが生じている場合であるのかを判定し、全気筒のうち複数気筒でノックが生じている場合にはオクタン価推定値ＯＣＴＥＳＴを算出し、全気筒のうち１つの気筒にだけノックが生じている場合にはそのノックが生じている気筒（つまり圧縮比増大気筒）の圧縮比推定値ＣＭＰＥＳＴｉを算出する構成であったので、圧縮比推定値を気筒別の値としたり気筒判別を行うなどそのぶん構成が複雑になっているが、第３実施形態では給油直後にオクタン価推定値を１００％に設定した状態でノックが生じるか否かを検出し、ノックが生じたときにはそのノック検出結果を即座にオクタン価推定値ＯＣＴＥＳＴに反映させるので、第１実施形態よりシンプルな構成となっている。すなわち、図４５においてステップ２６２でノックが生じたことが検出されたときにはステップ２６７に進んで上記（７９）式によりオクタン価推定値ＯＣＴＥＳＴを小さくなる側に第１の所定値ｃｏｎｓｔ０３だけ更新し、その後はステップ２７４〜２７８において所定の周期で上記（８１）式によりオクタン価推定値ＯＣＴＥＳＴを大きくなる側に第２の所定値ｃｏｎｓｔ０５ずつ戻している。
【０３４７】
同様にして第４実施形態におけるこのアルコール濃度推定値ＡＬＣＥＳＴの算出については図４８のフローにより説明する。
【０３４８】
図４８（図４７ステップ３３２のサブルーチン）は第２実施形態の図４２と基本的に同様であり、図４２と同一部分に同一のステップ番号をつけている。第２実施形態でも、気筒別のノック検出結果に基づいて全気筒のうち複数気筒でノックが生じている場合であるのかそれとも全気筒のうち１つの気筒にだけノックが生じている場合であるのかを判定し、全気筒のうち複数気筒でノックが生じている場合にはアルコール濃度推定値ＡＬＣＥＳＴを算出し、全気筒のうち１つの気筒にだけノックが生じている場合にはそのノックが生じている気筒（つまり圧縮比増大気筒）の圧縮比推定値ＣＭＰＥＳＴｉを算出する構成であったのでそのぶん構成が複雑になっているが、第４実施形態では給油直後にアルコール濃度推定値を０％に設定した状態でノックが生じるか否かを検出し、ノックが生じたときにはそのノック検出結果を即座にアルコール濃度推定値ＡＬＣＥＳＴに反映させるので、第２実施形態よりシンプルな構成となっている。すなわち、図４８においてステップ２６２でノックが生じたことが検出されたときにはステップ２９１に進んで上記（８７）式によりアルコール濃度推定値ＡＬＣＥＳＴを高くなる側に第１の所定値ｃｏｎｓｔ１３だけ更新し、その後はステップ２７４、２９４、２７６、２９５、２７８において所定の周期で上記（８８）式によりアルコール濃度推定値ＡＬＣＥＳＴを低くなる側に第２の所定値ｃｏｎｓｔ１５ずつ戻している。
【０３４９】
このようにして第３実施形態においてオクタン価推定値ＯＣＴＥＳＴの算出を終了したら図４４に戻る。
【０３５０】
図４４のステップ３０７〜３１３の処理タイミングは図４５の算出タイミングと同じであり、図４５の算出に続けて実行する。
【０３５１】
図４４のステップ３０７では、図４５のサブルーチンにおいてノックが生じたことを検出したか否か、図４４のステップ３０８では前回のオクタン価推定値ＯＣＴＥＳＴ（old）と今回のオクタン価推定値ＯＣＴＥＳＴ（new）とが一致するか否かをみる。図４５のサブルーチンで説明したようにオクタン価推定値ＯＣＴＥＳＴは、ノックが生じたときに第１の所定値だけ小さくされ、その後にノックが生じない限り第２の所定値ずつ大きくなる側に戻されるため、ノックが検出されたタイミングでは、図４４のステップ３０７より図４４のステップ３０９に進み、今回のオクタン価推定値ＯＣＴＥＳＴ（new）の値を前回のオクタン価推定値ＯＣＴＥＳＴ（old）に移した後、ステップ３０６に戻る。
【０３５２】
一方、ノック回避のためオクタン価推定値を小さくした後には図４４のステップ３０７でノックが検出されず、かつオクタン価推定値ＯＣＴＥＳＴが第２の所定値ずつ大きくなる側に戻されるので、今回のオクタン価推定値ＯＣＴＥＳＴ（new）と前回のオクタン価推定値ＯＣＴＥＳＴ（old）とが一致しない。従ってこのときには図４４のステップ３０７、３０８より図４４のステップ３１０の操作（図４４のステップ３０９と同じ操作）を行った後、図４４のステップ３０６に戻って図４４のステップ３０６、３０７、３０８、３１０の操作を繰り返す。
【０３５３】
やがて今回のオクタン価推定値ＯＣＴＥＳＴ（new）と前回のオクタン価推定値ＯＣＴＥＳＴ（old）とが一致すれば図４４のステップ３０８より図４４のステップ３１１に進む。
【０３５４】
同様にして第４実施形態においてアルコール濃度推定値ＡＬＣＥＳＴの算出を終了したら図４７のステップ３３３に戻る。
【０３５５】
図４７のステップ３３３〜３３６、３１１、３３７、３１３の処理タイミングは図４８の算出タイミングと同じであり、図４８の算出に続けて実行する。
【０３５６】
図４７のステップ３３３では、図４８のサブルーチンにおいてノックが生じたことを検出したか否か、図４７のステップ３３４では前回のアルコール濃度推定値ＡＬＣＥＳＴ（old）と今回のアルコール濃度推定値ＡＬＣＥＳＴ（new）とが一致するか否かをみる。図４８のサブルーチンで説明したようにアルコール濃度推定値ＡＬＣＥＳＴは、ノックが生じたときに第１の所定値だけ高くされ、その後にノックが生じない限り第２の所定値ずつ低くなる側に戻されるため、ノックが検出されたタイミングでは、図４７のステップ３３３より図４７のステップ３３５に進み、今回のアルコール濃度推定値ＡＬＣＥＳＴ（new）の値を前回のアルコール濃度推定値ＡＬＣＥＳＴ（old）に移した後、ステップ３３２に戻る。
【０３５７】
一方、ノック回避のためアルコール濃度推定値を高くした後には図４７のステップ３３３でノックが検出されず、かつアルコール濃度推定値ＡＬＣＥＳＴが第２の所定値ずつ低くなる側に戻されるので、今回のアルコール濃度推定値ＡＬＣＥＳＴ（new）と前回のアルコール濃度推定値ＡＬＣＥＳＴ（old）とが一致しない。従ってこのときには図４７のステップ３３３、３３４より図４７のステップ３３６の操作（図４７のステップ３３５と同じ操作）を行った後、図４７のステップ３３２に戻って図４７のステップ３３２、３３３、３３４、３３６の操作を繰り返す。
【０３５８】
やがて今回のアルコール濃度推定値ＡＬＣＥＳＴ（new）と前回のアルコール濃度推定値ＡＬＣＥＳＴ（old）とが一致すれば図４７のステップ３３４より図４７のステップ３１１に進む。
【０３５９】
図４４、図４７のステップ３１１ではカウンタ値ｃｏｕｎｔ２（始動時にゼロに初期設定）を１だけインクリメントする。このカウンタ値ｃｏｕｎｔ２はノック検出後に第３実施形態では今回のオクタン価推定値ＯＣＴＥＳＴ（new）と前回のオクタン価推定値ＯＣＴＥＳＴ（old）とが一致した回数を、第４実施形態では今回のアルコール濃度推定値ＡＬＣＥＳＴ（new）と前回のアルコール濃度推定値ＡＬＣＥＳＴ（old）とが一致した回数を計測するためのものである。
【０３６０】
第３実施形態ではそのカウンタ値ｃｏｕｎｔ２と所定値ｃｏｎｓｔ２１を図４４のステップ３１２において、第４実施形態ではそのカウンタ値ｃｏｕｎｔ２と所定値ｃｏｎｓｔ２２を図４７のステップ３３７において比較する。第３実施形態において所定値ｃｏｎｓｔ２１はオクタン価推定値が収束したと判断するまでのディレイを、第４実施形態において所定値ｃｏｎｓｔ２２はアルコール濃度推定値が収束したと判断するまでのディレイを定めるもので、所定値ｃｏｎｓｔ２１は上記の所定値ｃｏｎｓｔ０５よりも、所定値ｃｏｎｓｔ２２は上記の所定値ｃｏｎｓｔ１５よりも大きな値とする。所定値ｃｏｎｓｔ２１、２２の実際の値は適合により求める。
【０３６１】
第３実施形態では当初はカウンタ値ｃｏｕｎｔ２が所定値ｃｏｎｓｔ２１に満たないので、図４４のステップ３０６に戻り、図４４のステップ３０６〜３１２の操作を繰り返す。やがてカウンタ値ｃｏｕｎｔ２が所定値ｃｏｎｓｔ２１を超えたときにはオクタン価推定値が収束したと判断し図４４のステップ３１２より図４４のステップ３１３に進む。
【０３６２】
同様にして第４実施形態では当初はカウンタ値ｃｏｕｎｔ２が所定値ｃｏｎｓｔ２２に満たないので、図４７のステップ３３２に戻り、図４７のステップ３３２〜３３６、３１１、３３７の操作を繰り返す。やがてカウンタ値ｃｏｕｎｔ２が所定値ｃｏｎｓｔ２２を超えたときにはアルコール濃度推定値が収束したと判断し図４７のステップ３３７より図４７のステップ３１３に進む。
【０３６３】
図４４、図４７のステップ３１３では給油フラグ＝０、燃料消費量ＳＵＭＱ（new）＝０、ＳＵＭＱ（old）＝０として次回の給油時に備える。
【０３６４】
一方、イグニッションキーＯＦＦ中に給油キャップが開かれなかった、つまりイグニッションキーをＯＦＦとしている間に給油が行われなかったと判定したときには図４４、図４７のステップ３０１よりステップ３１４に進んで圧縮比推定値ＣＭＰＥＳＴを算出する。なお、第３実施形態ではオクタン価推定値ＯＣＴＥＳＴの算出を終了した後にも図４４のステップ３１４に進ませるようにしているが、オクタン価推定値ＯＣＴＥＳＴの算出を終了したあとには図４４のステップ３１４を飛ばして図４４のステップ３１５に進むように構成してもかまわない。第４実施形態ではアルコール濃度推定値ＡＬＣＥＳＴの算出を終了したあとにも図４７のステップ３１４に進ませるようにしているが、アルコール濃度推定値ＡＬＣＥＳＴの算出を終了したあとには図４７のステップ３１４を飛ばして図４７のステップ３１５に進むように構成してもかまわない。
【０３６５】
図４４、図４７のステップ３１４の圧縮比推定値ＣＭＰＥＳＴの算出については図４６のフローにより説明する。
【０３６６】
第３、第４の実施形態に共通の図４６（第３実施形態では図４４ステップ３１４のサブルーチン、第４実施形態では図４７ステップ３１４のサブルーチン）は図４５と同様であり、図４５と同一部分に同一のステップ番号をつけている。すなわち、図４６においてノックが生じたことが検出されると、その原因は圧縮比推定値ＣＭＰＥＳＴが実際の圧縮比より増大しているせいであると判断しステップ３２１に進んで圧縮比推定値ＣＭＰＥＳＴを第１の所定値ｃｏｎｓｔ２３だけ大きくする。つまり、次式により圧縮比推定値ＣＭＰＥＳＴを更新する。
【０３６７】
ＣＭＰＥＳＴ（new）＝ＣＭＰＥＳＴ（old）＋ｃｏｎｓｔ２３…（８９）
ただし、ＣＭＰＥＳＴ（new）：更新後の圧縮比推定値、
ＣＭＰＥＳＴ（old）：更新前の圧縮比推定値、
ｃｏｎｓｔ２３     ：大きくする側への更新量、
ここで、圧縮比推定値の初期値は上記（３）式のεである。
【０３６８】
その後は図４６のステップ２７４、３２２、２７６、３２３、２７８において所定の周期毎にステップ３２３に進んで圧縮比推定値ＣＭＰＥＳＴを第２の所定値ｃｏｎｓｔ２５だけ小さくする。つまり、次式により圧縮比推定値ＣＭＰＥＳＴを更新する。
【０３６９】
ＣＭＰＥＳＴ（new）＝ＣＭＰＥＳＴ（old）−ｃｏｎｓｔ２５…（９０）
ただし、ＣＭＰＥＳＴ（new）：更新後の圧縮比推定値、
ＣＭＰＥＳＴ（old）：更新前の圧縮比推定値、
ｃｏｎｓｔ２５     ：小さくする側への更新量、
このようにして圧縮比推定値ＣＭＰＥＳＴの算出を終了したら図４４、図４７のステップ３１５に戻り、イグニッションキーがＯＦＦになったか否かをみる。イグニッションキーがＯＦＦになっていなければステップ３１４の操作を繰り返す。イグニッションキーがＯＦＦになれば図４４、図４７の処理を終了する。
【０３７０】
第３実施形態でこのようにして算出されるオクタン価推定値ＯＣＴＥＳＴは図３２のステップ２０８でのオクタン価推定値ＯＣＴＥＳＴの燃料での１／τの算出に、第４実施形態でこのようにして算出されるアルコール濃度推定値ＡＬＣＥＳＴは図４０のステップ２８３でのアルコール濃度推定値ＡＬＣＥＳＴの混合燃料での１／τの算出に用いられる。
【０３７１】
給油により使用する燃料が変更されることに対応して、第３、第４の実施形態（請求項１２、１３に記載の発明）によれば、２種類のノック相関パラメータのうちのいずれかを選択するための条件がイグニッションキーＯＦＦ中に給油キャップが開いたことを判定したか否か（給油を判定したか否か）である（第３、第４の実施形態について図４４、図４７のステップ３０１参照）ので、給油を判定したときには即座に燃料に関するノック相関パラメータの推定値（第３実施形態についてオクタン価推定値ＯＣＴＥＳＴ、第４実施形態についてアルコール濃度推定値ＡＬＣＥＳＴ）を算出することが可能となり（第３実施形態について図４４のステップ３０１、３０６参照、第４実施形態について図４７のステップ３０１、３３２参照）、これにより給油直後に速やかに燃料に関するノック相関パラメータの推定値を収束させることができる。
【０３７２】
これを逆いえば、給油を判定したときでない場合には即座に圧縮比推定値ＣＭＰＥＳＴ（燃焼室内の燃焼ガス状態に関するノック相関パラメータの推定値）を算出すればよいのであり（請求項１４に記載の発明）、給油を判定したときでない場合に圧縮比推定値ＣＭＰＥＳＴを速やかに収束させることができる。
【０３７３】
図４９、図５０のフローは第５、第６の実施形態で、図４９のフローは第１実施形態の図３８と、図５０のフローは第２実施形態の図４２と置き換わるものである。
【０３７４】
第５実施形態はノック検出結果を基本的にオクタン価推定値ＯＣＴＥＳＴにフィードバックするが、オクタン価推定値ＯＣＴＥＳＴに所定の範囲の制限を与え、その制限を超える場合にオクタン価推定値をその制限値に固定するのではなく所定の範囲のほぼ中間の値に設定し直すと共に、そのときのノック検出結果を圧縮比推定値ＣＭＰＥＳＴにフィードバックするようにしたものである。また、第６実施形態はノック検出結果を基本的にアルコール濃度推定値ＡＬＣＥＳＴにフィードバックするが、アルコール濃度推定値ＡＬＣＥＳＴに所定の範囲の制限を与え、その制限を超える場合にアルコール濃度推定値をその制限値に固定するのではなく所定の範囲のほぼ中間の値に設定し直すと共に、そのときのノック検出結果を圧縮比推定値ＣＭＰＥＳＴにフィードバックするようにしたものである。
【０３７５】
第５実施形態から説明すると、図４９においてステップ３４１ではオクタン価推定値ＯＣＴＥＳＴを算出する。これは、ノックが生じる原因にはオクタン価のほか圧縮比の影響があるものの、第５実施形態では最初にノック検出結果を圧縮比による影響分をも含めてオクタン価推定値に反映させるものである。オクタン価推定値ＯＣＴＥＳＴの算出には第３実施形態で説明した図４５のフローを用いればよい。
【０３７６】
図４９のステップ３４２、３４３はこのようにして算出したオクタン価推定値ＯＣＴＥＳＴを所定の範囲に制限する部分である。所定の範囲とは市販されている燃料のオクタン価の範囲（例えば８０％から１００％の範囲）である。すなわち、オクタン価推定値ＯＣＴＥＳＴが、市販されている燃料のオクタン価の範囲を超えることは本来あり得ない。しかしながら、図４９のステップ３４１ではノック検出結果を圧縮比による影響分をも含めてオクタン価推定値に反映させているので、圧縮比の影響を受けてオクタン価推定値ＯＣＴＥＳＴが、市販されている燃料のオクタン価の範囲を超えることがあり得る。そこで、図４９のステップ３４２においてオクタン価推定値が１００％を上回るときには図４９のステップ３４４に進んでオクタン価推定値ＯＣＴＥＳＴを所定の範囲の中間値ｃｏｎｓｔ３０に設定し直すと共にノックが生じにくい原因は圧縮比が小さいことにあると判断し図４９のステップ３４５で圧縮比推定値ＣＭＰＥＳＴを所定値ｃｏｎｓｔ３２だけ小さくする。つまり、次式により圧縮比推定値ＣＭＰＥＳＴを更新する。
【０３７７】
ＣＭＰＥＳＴ（new）＝ＣＭＰＥＳＴ（old）−ｃｏｎｓｔ３２…（９１）
ただし、ＣＭＰＥＳＴ（new）：更新後の圧縮比推定値、
ＣＭＰＥＳＴ（old）：更新前の圧縮比推定値、
ｃｏｎｓｔ３２     ：小さくする側への更新量、
また、図４９のステップ３４３においてオクタン価推定値が８０％を下回るときには図４９のステップ３４６に進んでオクタン価推定値を所定の範囲の中間値ｃｏｎｓｔ３０に設定し直すと共にノックが生じる原因は圧縮比が大きいことにあると判断し図４９のステップ３４７で圧縮比推定値ＣＭＰＥＳＴを所定値ｃｏｎｓｔ３１だけ大きくする。つまり、次式により圧縮比推定値ＣＭＰＥＳＴを更新する。
【０３７８】
ＣＭＰＥＳＴ（new）＝ＣＭＰＥＳＴ（old）＋ｃｏｎｓｔ３１…（９２）
ただし、ＣＭＰＥＳＴ（new）：更新後の圧縮比推定値、
ＣＭＰＥＳＴ（old）：更新前の圧縮比推定値、
ｃｏｎｓｔ３１     ：大きくする側への更新量、
オクタン価推定値ＯＣＴＥＳＴを所定の範囲の中間値ｃｏｎｓｔ３０に設定し直すのはオクタン価推定値ＯＣＴＥＳＴをいったんリセットしてオクタン価の推定をやり直させることを目的とするものである。中間値ｃｏｎｓｔ３０としては最小の８０％と最大の１００％の中間の値である９０％程度を採用する。中間値ｃｏｎｓｔ３０の実際の値は適合により求める。圧縮比推定値ＣＭＰＥＳＴの初期値は上記（３）式のεである。
【０３７９】
次に第６実施形態について説明すると、図５０においてステップ３５１ではアルコール濃度推定値ＡＬＣＥＳＴを算出する。これは、ノックが生じる原因にはアルコール濃度のほか圧縮比の影響があるものの、第６実施形態では最初にノック検出結果を圧縮比による影響分をも含めてアルコール濃度推定値ＡＬＣＥＳＴに反映させるものである。アルコール濃度推定値ＡＬＣＥＳＴの算出には第４実施形態で説明した図４８のフローを用いればよい。
【０３８０】
図５０のステップ３５２、３５３はこのようにして算出したアルコール濃度推定値ＡＬＣＥＳＴを所定の範囲に制限する部分である。所定の範囲とは市販されている混合燃料のアルコール濃度の範囲（例えば０％から８５％の範囲）である。すなわち、アルコール濃度推定値ＡＬＣＥＳＴが、市販されている混合燃料のアルコール濃度の範囲を超えることは本来あり得ない。しかしながら、図５０のステップ３５１ではノック検出結果を圧縮比による影響分をも含めてアルコール濃度推定値に反映させているので、圧縮比の影響を受けてアルコール濃度推定値ＡＬＣＥＳＴが、市販されている混合燃料のアルコール濃度の範囲を超えることがあり得る。そこで、図５０のステップ３５２においてアルコール濃度推定値が０％より低くなるときには図５０のステップ３５４に進んでアルコール濃度推定値ＡＬＣＥＳＴを所定の範囲の中間値ｃｏｎｓｔ４０に設定し直すと共にノックが生じにくい原因は圧縮比が小さいことにあると判断し図５０のステップ３４５で圧縮比推定値ＣＭＰＥＳＴを所定値ｃｏｎｓｔ３２だけ小さくする。つまり、上記（９１）式により圧縮比推定値ＣＭＰＥＳＴを更新する。
【０３８１】
また、図５０ステップ３５３においてアルコール濃度推定値が８５％を上回るときには図５０ステップ３５５に進んでアルコール濃度推定値を所定の範囲の中間値ｃｏｎｓｔ４０に設定し直すと共にノックが生じる原因は圧縮比が大きいことにあると判断し図５０のステップ３４７で圧縮比推定値ＣＭＰＥＳＴを所定値ｃｏｎｓｔ３１だけ大きくする。つまり、上記（９２）式により圧縮比推定値ＣＭＰＥＳＴを更新する。
【０３８２】
アルコール濃度推定値ＡＬＣＥＳＴを所定の範囲の中間値ｃｏｎｓｔ４０に設定し直すのはアルコール濃度推定値ＡＬＣＥＳＴをいったんリセットしてアルコール濃度の推定をやり直させることを目的とするものである。中間値ｃｏｎｓｔ４０としては最小の０％と最大の８５％の中間の値である４０％〜５０％程度を採用する。中間値ｃｏｎｓｔ４０の実際の値は適合により求める。
【０３８３】
第５実施形態でこのようにして算出されるオクタン価推定値ＯＣＴＥＳＴは図３２のステップ２０８でのオクタン価推定値ＯＣＴＥＳＴの燃料での１／τの算出に、第６実施形態でこのようにして算出されるアルコール濃度推定値ＡＬＣＥＳＴは図４０のステップ２８３でのアルコール濃度推定値ＡＬＣＥＳＴの混合燃料での１／τの算出に用いられる。
【０３８４】
第５、第６の実施形態（請求項１５に記載の発明）によれば、燃料に関するノック相関パラメータの推定値（第５実施形態についてオクタン価推定値ＯＣＴＥＳＴ、第６実施形態についてアルコール濃度推定値ＡＬＣＥＳＴ）に所定の範囲（第５実施形態について１００％から８０％の範囲、第６実施形態について０％から８５％の範囲）に制限し、２種類のノック相関パラメータのいずれかを選択するための条件が、燃料に関するノック相関パラメータの推定値が所定の範囲の制限を外れたか否かである（第５実施形態について図４９のステップ３４２、３４３、第６実施形態について図５０のステップ３５２、３５３参照）ので、圧縮比推定値ＣＭＰＥＳＴ（燃焼室内の燃焼ガス状態に関するノック相関パラメータの推定値）の算出方法がシンプルになる。すなわち、第３、第４の実施形態による圧縮比推定値ＣＭＰＥＳＴの算出方法を示す図４６より簡単である。
【０３８５】
図５１、図５２、図５３、図５４のフローは第３、第４、第５、第６の実施形態に共通のフローで、それぞれ第１、第２の実施形態の図２、図５、図１０、図１３と置き換わるものである。図５１において図２と同一部分には同一のステップ番号を、図５２において図５と同一部分には同一のステップ番号を、図５３において図１０と同一部分には同一のステップ番号を、また図５４において図１３と同一部分には同一のステップ番号を付している。
【０３８６】
第１、第２の実施形態では、圧縮比増大気筒と、圧縮比増大気筒以外の気筒とに分けて燃焼室５の吸気弁閉時期における容積（ＶＩＶＣ、ＶＩＶＣｉ）、燃焼室５の燃焼開始時期における容積（Ｖ０、Ｖ０ｉ）、初期燃焼期間（ＢＵＲＮ１、ＢＵＲＮ１ｉ）、基本点火時期（ＭＢＴＣＡＬ、ＭＢＴＣＡＬｉ）を算出したが、第３、第４、第５、第６の実施形態は、これら燃焼室５の吸気弁閉時期における容積、燃焼室５の燃焼開始時期における容積、初期燃焼期間、基本点火時期を全気筒に共通の値として算出するものである。
【０３８７】
第１、第２の実施形態と相違する部分を主に説明すると、図５２においてステップ４３１では次式により隙間容積Ｖｃ［ｍ3］を算出する。
【０３８８】
Ｖｃ＝（π／４）Ｄ2・Ｈx／（ＣＭＰＥＳＴ−１）        …（９３）
ただし、ＣＭＰＥＳＴ：圧縮比推定値、
Ｄ ：シリンダボア径［ｍ］、
Ｈx：ピストンピン７６のＴＤＣからの距離との最大値と最小値の差
［ｍ］、
ここで、（９３）式は第１、第２の実施形態の上記（３）式に置き換わるものである。第１、第２の実施形態では（３）式の圧縮比εが一定あるとしていたのを、第３、第４、第５、第６の実施形態では可変値としての圧縮比推定値ＣＭＰＥＳＴとしたものである。
【０３８９】
このようにして求めた隙間容積Ｖｃを用い、図５２のステップ４３２では燃焼室５の吸気弁閉時期における容積ＶＩＶＣを次式により算出する。
【０３９０】
ＶＩＶＣ＝Ｖｃ＋（π／４）Ｄ2・Ｈivc                      …（９４）
Ｄ          ：シリンダボア径［ｍ］、
Ｈivc       ：吸気弁閉時期におけるピストンピン７６のＴＤＣ
からの距離［ｍ］、
この（９４）式は、第１、第２の実施形態の上記（２）式と同じである。
【０３９１】
次に、図５３においてステップ４４１では上記（９３）式により隙間容積Ｖｃ［ｍ3］を算出し、この隙間容積Ｖｃを用い、図５３のステップ４４２で次式により燃焼室５の燃焼開始時期（ＭＢＴＣＹＣＬ）における容積Ｖ０を算出する。
【０３９２】
Ｖ０＝Ｖｃ＋（π／４）Ｄ2・Ｈmbtcycl                      …（９５）
ただし、Ｄ       ：シリンダボア径［ｍ］、
Ｈmbtcycl：燃焼開始時期（ＭＢＴＣＹＣＬ）におけるピストンピン
７６のＴＤＣからの距離［ｍ］、
次に、図５４においては図１３のステップ４２１〜４２４を、また図５１においては図２のステップ３９１〜３９６を省略したものである。
【０３９３】
請求項１に記載の発明において、ノック相関パラメータ推定値算出手段の機能は図３８のステップ２６２、２６５、２６６、２６７、２６９により、点火時期算出手段の機能は図３２、図３３、図１３により、点火実行手段の機能は図２によりそれぞれ果たされている。
【０３９４】
請求項２に記載の発明において、ノック相関パラメータ推定値算出手段の機能は図３８のステップ２６２、２６５、２６６、２６７、２６９により、ノック発生時期予測手段の機能は図３２のステップ２０６、２０７、２０８、２０９、２１０、図３３の２１８により、ノック限界点火時期算出手段の機能は図３３のステップ２１９〜２３１により、
点火実行手段の機能は図２のステップ２、３、５によりそれぞれ果たされている。
【０３９５】
請求項３に記載の発明において、ノック相関パラメータ推定値算出手段の機能は図３８のステップ２６２、２６５、２６６、２６７、２６９により、ノック限界点火時期算出手段の機能は図３３のステップ２１９〜２３１により、基本点火時期算出手段の機能は図１０のステップ４１１、４１２〜４１４、４１６、図１３のステップ４２１〜４２４により、点火実行手段の機能は図２のステップ３９１〜３９４、３９６によりそれぞれ果たされている。
【０３９６】
請求項４に記載の発明において、ノック相関パラメータ推定値算出手段の機能は図３８のステップ２６２、２６５、２６６、２６７、２６９により、ノック発生時期予測手段の機能は図３２のステップ２０６、２０７、２０８、２０９、２１０、図３３の２１８により、ノック限界点火時期算出手段の機能は図３３のステップ２１９〜２３１により、燃焼開始時容積算出手段の機能は図１０のステップ４１１〜４１４により、燃焼期間算出手段の機能は図１０のステップ４１５、４１６、図１３のステップ４２１〜４２３により、基本点火時期算出手段の機能は図１３のステップ４２４により、点火実行手段の機能は図２のステップ３９１〜３９４、３９６によりそれぞれ果たされている。
【図面の簡単な説明】
【０３９７】
【図１】一実施形態のエンジンの制御システム図。
【図２】第１、第２の実施形態の点火時期制御を説明するためのフローチャート。
【図３】燃焼室の圧力変化図。
【図４】燃焼質量割合の変化を説明する特性図。
【図５】第１、第２の実施形態の物理量の算出を説明するためのフローチャート。
【図６】エンジンのクランクシャフトとコネクティングロッドの位置関係を説明するダイアグラム。
【図７】水温補正係数の特性図。
【図８】当量比補正係数の特性図。
【図９】基準クランク角の特性図。
【図１０】第１、第２の実施形態の初期燃焼期間の算出を説明するためのフローチャート。
【図１１】温度上昇率の特性図。
【図１２】主燃焼期間の算出を説明するためのフローチャート。
【図１３】第１、第２の実施形態の基本点火時期の算出を説明するためのフローチャート。
【図１４】内部不活性ガス率の算出を説明するためのフローチャート。
【図１５】内部不活性ガス量の算出を説明するためのフローチャート。
【図１６】ＥＶＣ時不活性ガス量の算出を説明するためのフローチャート。
【図１７】オーバーラップ中吹き返し不活性ガス量の算出を説明するためのフローチャート。
【図１８】過給判定フラグ、チョーク判定フラグの設定を説明するためのフローチャート。
【図１９】過給無しかつチョーク無し時のオーバーラップ中吹き返し不活性ガス流量の算出を説明するためのフローチャート。
【図２０】過給無しかつチョーク有り時のオーバーラップ中吹き返し不活性ガス流量の算出を説明するためのフローチャート。
【図２１】過給有りかつチョーク無し時のオーバーラップ中吹き返し不活性ガス流量の算出を説明するためのフローチャート。
【図２２】過給有りかつチョーク有り時のオーバーラップ中吹き返し不活性ガス流量の算出を説明するためのフローチャート。
【図２３】排気弁閉時期における燃焼室容積の特性図。
【図２４】不活性ガスのガス定数の特性図。
【図２５】オーバーラップ中の積算有効面積の特性図。
【図２６】オーバーラップ中の積算有効面積の説明図。
【図２７】不活性ガスの比熱比の特性図。
【図２８】混合気の比熱比の特性図。
【図２９】ノック発生時の燃焼室内の圧力履歴を示す特性図。
【図３０Ａ】オクタン価１００の燃料での１／τの特性図。
【図３０Ｂ】オクタン価８０の燃料での１／τの特性図。
【図３１】直線で近似した場合の燃焼質量割合の変化を示す特性図。
【図３２】第１、第３、第５の実施形態のノック限界点火時期の算出を説明するためのフローチャート。
【図３３】第１、第２、第３、第４、第５、第６の実施形態のノック限界点火時期の算出を説明するためのフローチャート。
【図３４】総ガスモル数の算出を説明するためのフローチャート。
【図３５】ガスエンタルピの算出を説明するためのフローチャート。
【図３６】回転速度補正係数の特性図。
【図３７】トレースノック強度の特性図。
【図３８】オクタン価推定値及び圧縮比推定値の算出を説明するためのフローチャート。
【図３９】ノック検出時のオクタン価推定値の動きを示す波形図。
【図４０】第２、第４、第６の実施形態のノック限界点火時期の算出を説明するためのフローチャート。
【図４１Ａ】第２実施形態のアルコール濃度０％の混合燃料での１／τの特性図。
【図４１Ｂ】第２実施形態のアルコール濃度８５％の混合燃料での１／τの特性図。
【図４２】第２実施形態のアルコール濃度推定値及び圧縮比推定値の算出を説明するためのフローチャート。
【図４３】第２実施形態のノック検出時のアルコール濃度推定値の動きを示す波形図。
【図４４】第３実施形態のオクタン価推定値及び圧縮比推定値の算出を説明するためのフローチャート。
【図４５】第３、第５実施形態のオクタン価推定値の算出を説明するためのフローチャート。
【図４６】第３、第４の実施形態の縮比推定値の算出を説明するためのフローチャート。
【図４７】第４実施形態のオクタン価推定値及び圧縮比推定値の算出を説明するためのフローチャート。
【図４８】第４、第６の実施形態のアルコール濃度推定値の算出を説明するためのフローチャート。
【図４９】第５実施形態のオクタン価推定値及び圧縮比推定値の算出を説明するためのフローチャート。
【図５０】第６実施形態のオクタン価推定値及び圧縮比推定値の算出を説明するためのフローチャート。
【図５１】第３、第４、第５、第６の実施形態の点火時期制御を説明するためのフローチャート。
【図５２】第３、第４、第５、第６の実施形態の物理量の算出を説明するためのフローチャート。
【図５３】第３、第４、第５、第６の実施形態の初期燃焼期間の算出を説明するためのフローチャート。
【図５４】第３、第４、第５、第６の実施形態の基本点火時期の算出を説明するためのフローチャート。
【符号の説明】
【０３９８】
１  エンジン
５  燃焼室
１１  点火装置（火花点火手段）
２１  燃料インジェクタ
３１  エンジンコントローラ
４７  ノックセンサ（ノック強度検出手段）
【図１】
2005315097.tif 000003
【図２】
2005315097.tif 000004
【図３】
2005315097.tif 000005
【図４】
2005315097.tif 000006
【図５】
2005315097.tif 000007
【図６】
2005315097.tif 000008
【図７】
2005315097.tif 000009
【図８】
2005315097.tif 000010
【図９】
2005315097.tif 000011
【図１０】
2005315097.tif 000012
【図１１】
2005315097.tif 000013
【図１２】
2005315097.tif 000014
【図１３】
2005315097.tif 000015
【図１４】
2005315097.tif 000016
【図１５】
2005315097.tif 000017
【図１６】
2005315097.tif 000018
【図１７】
2005315097.tif 000019
【図１８】
2005315097.tif 000020
【図１９】
2005315097.tif 000021
【図２０】
2005315097.tif 000022
【図２１】
2005315097.tif 000023
【図２２】
2005315097.tif 000024
【図２３】
2005315097.tif 000025
【図２４】
2005315097.tif 000026
【図２５】
2005315097.tif 000027
【図２６】
2005315097.tif 000028
【図２７】
2005315097.tif 000029
【図２８】
2005315097.tif 000030
【図２９】
2005315097.tif 000031
【図３０Ａ】
2005315097.tif 000032
【図３０Ｂ】
2005315097.tif 000033
【図３１】
2005315097.tif 000034
【図３２】
2005315097.tif 000035
【図３３】
2005315097.tif 000036
【図３４】
2005315097.tif 000037
【図３５】
2005315097.tif 000038
【図３６】
2005315097.tif 000039
【図３７】
2005315097.tif 000040
【図３８】
2005315097.tif 000041
【図３９】
2005315097.tif 000042
【図４０】
2005315097.tif 000043
【図４１Ａ】
2005315097.tif 000044
【図４１Ｂ】
2005315097.tif 000045
【図４２】
2005315097.tif 000046
【図４３】
2005315097.tif 000047
【図４４】
2005315097.tif 000048
【図４５】
2005315097.tif 000049
【図４６】
2005315097.tif 000050
【図４７】
2005315097.tif 000051
【図４８】
2005315097.tif 000052
【図４９】
2005315097.tif 000053
【図５０】
2005315097.tif 000054
【図５１】
2005315097.tif 000055
【図５２】
2005315097.tif 000056
【図５３】
2005315097.tif 000057
【図５４】
2005315097.tif 000058