(57)【特許請求の範囲】
【請求項１】
内燃機関の振動の強度を、点火サイクル毎に検出するための手段と、
前記強度の分布の中央値を表わす第１の値を更新するための第１の算出手段と、
前記強度の分布の標準偏差を表わす第２の値を更新するための第２の算出手段と、
前記第１の値および前記第２の値に応じた第３の値を算出するための第３の算出手段と、
前記強度および前記第３の値に応じた第４の値を算出するための第４の算出手段と、
前記第４の値が第１の判定値よりも大きい場合、点火時期を遅角するための制御手段と、
今回の点火サイクルにおいて、第２の判定値より小さい強度が検出された場合および第３の判定値以上の強度が検出された場合のうちの少なくともいずれか一方の場合、前記第２の値の更新を停止するための手段と、
第４の判定値以上の強度が検出された頻度をカウントするための手段と、
前記第４の判定値以上の強度が検出された頻度が予め定められた頻度よりも大きい場合に前記第１の判定値が小さくなるように補正するための手段と、
前記第２の判定値より小さい強度が複数の点火サイクルにおいて連続して検出された場合および前記第３の判定値以上の強度が複数の点火サイクルにおいて連続して検出された場合のうちの少なくともいずれか一方の場合、頻度のカウントを停止するため手段とを備え、
前記第３の算出手段は、零より大きい第１の係数と前記第２の値との積を前記第１の値から減算することにより前記第３の値を算出するための手段を含み、
前記第４の算出手段は、前記強度を前記第３の値で除算することにより前記第４の値を算出するための手段を含み、
前記第２の判定値は、前記第１の係数より大きい第２の係数と前記第２の値との積を、前記第１の値から減算した値であり、
前記第３の判定値は、前記第２の係数より大きい第３の係数と前記第２の値との積を、前記第１の値に加算した値であり、
前記第４の判定値は、前記第３の係数より大きい第４の係数と前記第２の値との積を、前記第１の値に加算した値である、内燃機関の点火時期制御装置。
【請求項２】
今回の点火サイクルにおいて、前記第２の判定値より小さい強度が検出された場合および前記第３の判定値以上の強度が検出された場合のうちの少なくともいずれか一方の場合、前記第１の値の更新を停止するための手段をさらに備える、請求項１に記載の内燃機関の点火時期制御装置。
【請求項３】
前記第１の算出手段は、前回の点火サイクルにおいて検出された強度に応じた更新量だけ更新するための手段を含み、
前記第２の判定値より小さい強度が複数の点火サイクルにおいて連続して検出された場合、前記第１の値の更新を再開するための手段と、
前記第２の判定値より小さい強度が前記複数の点火サイクルにおいて連続して検出された場合、前記更新量を小さくするための手段をさらに備える、請求項２に記載の内燃機関の点火時期制御装置。
【請求項４】
前記第１の算出手段は、前回の点火サイクルにおいて検出された強度に応じた更新量だけ更新するための手段を含み、
前記第３の判定値以上の強度が複数の点火サイクルにおいて連続して検出された場合、前回の点火サイクルにおいて検出された強度の代わりに、今回の点火サイクルにおいて検出された強度に応じた更新量を用いて前記第１の値の更新を再開するための手段と、
前記第３の判定値以上の強度が前記複数の点火サイクルにおいて連続して検出された場合、今回の点火サイクルにおいて検出された強度に応じた更新量を大きくするための手段をさらに備える、請求項２に記載の内燃機関の点火時期制御装置。
【請求項５】
前記第３の判定値以上の強度が複数の点火サイクルにおいて連続して検出された場合、カウントされた頻度を低減するための手段をさらに備える、請求項１に記載の内燃機関の点火時期制御装置。
【請求項６】
内燃機関の振動の強度を、点火サイクル毎に検出するステップと、
前記強度の分布の中央値を表わす第１の値を更新するステップと、
前記強度の分布の標準偏差を表わす第２の値を更新するステップと、
前記第１の値および前記第２の値に応じた第３の値を算出するステップと、
前記強度および前記第３の値に応じた第４の値を算出するステップと、
前記第４の値が第１の判定値よりも大きい場合、点火時期を遅角するステップと、
今回の点火サイクルにおいて、第２の判定値より小さい強度が検出された場合および第３の判定値以上の強度が検出された場合のうちの少なくともいずれか一方の場合、前記第２の値の更新を停止するステップと、
第４の判定値以上の強度が検出された頻度をカウントするステップと、
前記第４の判定値以上の強度が検出された頻度が予め定められた頻度よりも大きい場合に前記第１の判定値が小さくなるように補正するステップと、
前記第２の判定値より小さい強度が複数の点火サイクルにおいて連続して検出された場合および前記第３の判定値以上の強度が複数の点火サイクルにおいて連続して検出された場合のうちの少なくともいずれか一方の場合、頻度のカウントを停止するためステップとを備え、
前記第３の値を算出するステップは、零より大きい第１の係数と前記第２の値との積を前記第１の値から減算することにより前記第３の値を算出するステップを含み、
前記第４の値を算出するステップは、前記強度を前記第３の値で除算することにより前記第４の値を算出するステップを含み、
前記第２の判定値は、前記第１の係数より大きい第２の係数と前記第２の値との積を、前記第１の値から減算した値であり、
前記第３の判定値は、前記第２の係数より大きい第３の係数と前記第２の値との積を、前記第１の値に加算した値であり、
前記第４の判定値は、前記第３の係数より大きい第４の係数と前記第２の値との積を、前記第１の値に加算した値である、内燃機関の点火時期制御方法。
【請求項７】
今回の点火サイクルにおいて、前記第２の判定値より小さい強度が検出された場合および前記第３の判定値以上の強度が検出された場合のうちの少なくともいずれか一方の場合、前記第１の値の更新を停止するステップをさらに備える、請求項６に記載の内燃機関の点火時期制御方法。
【請求項８】
前記第１の値を更新するステップは、前回の点火サイクルにおいて検出された強度に応じた更新量だけ更新するステップを含み、
前記第２の判定値より小さい強度が複数の点火サイクルにおいて連続して検出された場合、前記第１の値の更新を再開するステップと、
前記第２の判定値より小さい強度が前記複数の点火サイクルにおいて連続して検出された場合、前記更新量を小さくするステップをさらに備える、請求項７に記載の内燃機関の点火時期制御方法。
【請求項９】
前記第１の値を算出するステップは、前回の点火サイクルにおいて検出された強度に応じた更新量だけ更新するステップを含み、
前記第３の判定値以上の強度が複数の点火サイクルにおいて連続して検出された場合、前回の点火サイクルにおいて検出された強度の代わりに、今回の点火サイクルにおいて検出された強度に応じた更新量を用いて前記第１の値の更新を再開するステップと、
前記第３の判定値以上の強度が前記複数の点火サイクルにおいて連続して検出された場合、今回の点火サイクルにおいて検出された強度に応じた更新量を大きくするステップをさらに備える、請求項７に記載の内燃機関の点火時期制御方法。
【請求項１０】
前記第３の判定値以上の強度が複数の点火サイクルにおいて連続して検出された場合、カウントされた頻度を低減するステップをさらに備える、請求項６に記載の内燃機関の点火時期制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、内燃機関の点火時期制御装置および点火時期制御方法に関し、特に、内燃機関の振動の強度と判定値とを比較した結果に応じて点火時期を制御する技術に関する。
【背景技術】
【０００２】
従来より、ノッキング（ノック）の有無を判定する様々な方法が提案されている。たとえば、内燃機関より検出される振動の強度が、ノック判定値より大きいか否かによりノッキングの発生を判定する技術がある。しかしながら、内燃機関において検出される振動の強度は、内燃機関およびノックセンサなどの経年変化により変化し得る。また、内燃機関において検出される振動の強度は、内燃機関の個体毎に異なり得る。そのため、ノッキングの有無を精度よく判定するには、内燃機関において実際に検出される強度に応じてノック判定値を補正することが望ましい。
【０００３】
特開２００７−２５５１９５号公報（特許文献１）は、内燃機関で発生する振動の強度を複数回検出するための検出部と、検出部により検出された各強度に応じて、ノッキングに起因する振動の強度に関するノック強度を算出するための第１の算出部と、ノック強度と予め定められた第１の判定値とを比較した結果に基づいて、内燃機関の点火時期を制御するための制御部と、検出部により検出された強度の中央値および標準偏差を算出するための第２の算出部と、標準偏差および予め定められた係数の積を中央値に加算して算出される第２の判定値が第１の判定値よりも大きい場合、制御部により点火時期が遅角される度合が大きくなるように、第１の判定値を補正するための第２の補正部とを含む、内燃機関の点火時期制御装置を開示する。ノック強度は、振動の強度をＢＧＬ（Back Ground Level）で除算することにより算出される。ＢＧＬは、標準偏差と係数との積を中央値から減算することにより算出される。
【０００４】
この公報に記載の点火時期制御装置によると、内燃機関で発生する振動の強度が複数回検出される。検出された各強度に応じて、ノッキングに起因する振動の強度に関するノック強度が算出される。このノック強度と予め定められた判定値とを比較した結果に基づいて、内燃機関の点火時期が制御される。たとえば、ノック強度が判定値よりも大きいと点火時期が遅角され、ノック強度が判定値よりも小さいと点火時期が進角される。標準偏差および予め定められた係数の積を中央値に加算して算出される第２の判定値が第１の判定値よりも大きい場合、制御部により点火時期が遅角される度合が大きくなるように、第１の判定値が補正される。これにより、ノッキングが頻発したといえる状態において、振動の強度と比較される判定値が、内燃機関で発生する振動に対して過大になることを抑制することができる。そのため、点火時期の遅角を行ない易くすることができる。その結果、ノッキングの発生を抑制することができる。
【特許文献１】特開２００７−２５５１９５号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
ところで、内燃機関の負荷が急変すると、振動の強度が必然的に急変する。そのため、強度の標準偏差が突発的に大きくなる場合がある。したがって、特開２００７−２５５１９５号公報に記載の点火時期制御装置のように、強度の標準偏差に応じてノック強度を算出すると、ノッキングが発生していなくても、内燃機関の負荷が変化する際にノック強度が突発的に大きくなる場合がある。この場合、点火時期が誤って遅角される。
【０００６】
本発明は、上述の課題を解決するためになされたものであって、その目的は、点火時期を精度よく制御することができる内燃機関の点火時期制御装置および点火時期制御方法を提供することである。
【課題を解決するための手段】
【０００７】
第１の発明に係る内燃機関の点火時期制御装置は、内燃機関の振動の強度を、複数の点火サイクルにおいて検出するための手段と、強度の中央値を表わす第１の値を算出するための第１の算出手段と、強度の標準偏差を表わす第２の値を算出するための第２の算出手段と、第１の値および第２の値に応じた第３の値を算出するための第３の算出手段と、強度および第３の値に応じた第４の値を算出するための第４の算出手段と、第４の値および第１の判定値を比較した結果に応じて、内燃機関の点火時期を制御するための制御手段と、第２の判定値より小さい強度が検出された場合および第３の判定値以上の強度が検出された場合のうちの少なくともいずれか一方の場合、第２の値の算出を停止するための手段とを備える。第９の発明に係る内燃機関の点火時期制御方法は、第１の発明に係る内燃機関の点火時期制御装置と同様の要件を備える。
【０００８】
この構成によると、内燃機関の振動の強度が、複数の点火サイクルにおいて検出される。検出された強度の中央値を表わす第１の値および標準偏差を表わす第２の値が算出される。これらの第１の値および第２の値に応じた第３の値が算出される。これにより、振動の強度の基準となるＢＧＬを得ることができる。強度および第３の値に応じた第４の値が算出される。たとえば、強度を第３の値で除算することにより第４の値が算出される。これにより、検出された強度と振動の強度の基準との相対的な大きさを示す第４の値を得ることができる。第４の値および第１の判定値を比較した結果に応じて、内燃機関の点火時期が制御される。たとえば、第４の値が第１の判定値よりも大きい場合、ノッキングが発生した可能性が高い。そのため、点火時期が遅角される。ところで、たとえば内燃機関の負荷が急変する際、ノッキングの有無にかかわらず、検出される強度が必然的に急変する。この場合、強度の標準偏差が突発的に大きくなり得る。第４の値は標準偏差表わす第２の値に応じて算出される。そのため、標準偏差が大きくなると、ノッキングが発生していなくても、第４の値が大きくなり得る。この場合、点火時期を誤って遅角し得る。そこで、第２の判定値より小さい強度が検出された場合および第３の判定値以上の強度が検出された場合のうちの少なくともいずれか一方の場合、すなわち、内燃機関の負荷が急変した場合、標準偏差を表わす第２の値の算出が停止される。これにより、内燃機関の負荷が急変する際に、第４の値が突発的に大きくならないようにすることができる。そのため、点火時期が誤って遅角される頻度を低減することができる。その結果、点火時期を精度よく制御することができる内燃機関の点火時期制御装置もしくは点火時期制御方法を提供することができる。
【０００９】
第２の発明に係る内燃機関の点火時期制御装置においては、第１の発明の構成に加えて、第２の判定値より小さい強度が検出された場合および第３の判定値以上の強度が検出された場合のうちの少なくともいずれか一方の場合、第１の値の算出を停止するための手段をさらに備える。第１０の発明に係る内燃機関の点火時期制御方法は、第２の発明に係る内燃機関の点火時期制御装置と同様の要件を備える。
【００１０】
この構成によると、第２の判定値より小さい強度が検出された場合および第３の判定値以上の強度が検出された場合のうちの少なくともいずれか一方の場合、中央値を表わす第１の値の算出が停止される。これにより、内燃機関の負荷が急変する際に、第１の値に応じて算出される第４の値が突発的に大きくなったり、小さくなったりしないようにすることができる。
【００１１】
第３の発明に係る内燃機関の点火時期制御装置においては、第２の発明の構成に加えて、第１の算出手段は、強度に応じた更新量だけ更新することにより第１の値を算出するための手段を含む。点火時期制御装置は、第２の判定値より小さい強度が複数の点火サイクルにおいて連続して検出された場合、第１の値の更新を再開するための手段と、第２の判定値より小さい強度が複数の点火サイクルにおいて連続して検出された場合、第１の値の更新量を小さくするための手段をさらに備える。第１１の発明に係る内燃機関の点火時期制御方法は、第３の発明に係る内燃機関の点火時期制御装置と同様の要件を備える。
【００１２】
この構成によると、強度に応じた更新量だけ更新することにより第１の値が算出される。第２の判定値より小さい強度が複数の点火サイクルにおいて連続して検出された場合、第１の値の更新が再開されるとともに、第１の値の更新量が小さくされる。これにより、強度の中央値を表わす第１の値を、内燃機関において実際に発生する強度に追従させるとともに、第１の値が必要以上に小さくならないようすることができる。
【００１３】
第４の発明に係る内燃機関の点火時期制御装置においては、第２の発明の構成に加えて、第１の算出手段は、強度に応じた更新量だけ更新することにより第１の値を算出するための手段を含む。点火時期制御装置は、第３の判定値以上の強度が複数の点火サイクルにおいて連続して検出された場合、第１の値の更新を再開するための手段と、第３の判定値以上の強度が複数の点火サイクルにおいて連続して検出された場合、第１の値の更新量を大きくするための手段をさらに備える。第１２の発明に係る内燃機関の点火時期制御方法は、第３の発明に係る内燃機関の点火時期制御装置と同様の要件を備える。
【００１４】
この構成によると、強度に応じた更新量だけ更新することにより第１の値が算出される。第３の判定値以上の強度が複数の点火サイクルにおいて連続して検出された場合、第１の値の更新が再開されるとともに、第１の値の更新量が大きくされる。これにより、強度の中央値を表わす第１の値を、内燃機関において実際に発生する強度に速やかに追従させることができる。
【００１５】
第５の発明に係る内燃機関の点火時期制御装置においては、第１〜４のいずれかの発明の構成に加えて、第３の算出手段は、零より大きい第１の係数と第２の値との積を第１の値から減算することにより第３の値を算出するための手段を含む。第４の算出手段は、強度を第３の値で除算することにより第４の値を算出するための手段を含む。第２の判定値は、零より大きい第２の係数と第２の値との積を、第１の値から減算した値である。第３の判定値は、零より大きい第３の係数と第２の値との積を、第１の値に加算した値である。第１３の発明に係る内燃機関の点火時期制御方法は、第５の発明に係る内燃機関の点火時期制御装置と同様の要件を備える。
【００１６】
この構成によると、零より大きい第１の係数と第２の値との積を第１の値から減算することにより第３の値を算出することができる。強度を第３の値で除算することにより第４の値を算出することができる。第２の判定値は、零より大きい第２の係数と第２の値との積を、第１の値から減算した値である。第３の判定値は、零より大きい第３の係数と第２の値との積を、第１の値に加算した値である。これにより、内燃機関において実際に検出される振動の強度に対応した第２の判定値および第３の判定値を得ることができる。この第２の判定値もしくは第３の判定値と、検出された強度とが比較される。そのため、内燃機関の負荷が変化したか否かを精度よく判定することができる。
【００１７】
第６の発明に係る内燃機関の点火時期制御装置においては、第１〜４のいずれかの発明の構成に加えて、制御手段は、第２の値が第１の判定値よりも大きい場合、点火時期を遅角するための手段を含む。点火時期制御装置は、第４の判定値以上の強度が検出された頻度をカウントするための手段と、第４の判定値以上の強度が検出された頻度が予め定められた頻度よりも大きい場合に第１の判定値が小さくなるように補正するための手段と、第２の判定値より小さい強度が複数の点火サイクルにおいて連続して検出された場合および第３の判定値以上の強度が複数の点火サイクルにおいて連続して検出された場合のうちの少なくともいずれか一方の場合、頻度のカウントを停止するため手段とをさらに備える。第１４の発明に係る内燃機関の点火時期制御方法は、第６の発明に係る内燃機関の点火時期制御装置と同様の要件を備える。
【００１８】
この構成によると、第２の値が第１の判定値よりも大きい場合、点火時期が遅角される。これにより、検出された強度が大きい場合、すなわちノッキングが発生した場合には、点火時期を遅角することができる。そのため、ノッキングが発生する回数を低減できる。第４の判定値以上の強度が検出された頻度がカウントされる。第４の判定値以上の強度が検出された頻度が予め定められた頻度よりも大きい場合に第１の判定値が小さくなるように補正される。これにより、点火時期を遅角し易くすることができる。そのため、ノッキングが発生する回数をさらに低減できる。ところで、内燃機関の負荷が急変する際、強度が必然的に大きく変化し得る。この場合、第４の判定値以上の強度が検出された頻度を誤ってカウントし得る。そこで、第２の判定値より小さい強度が複数の点火サイクルにおいて連続して検出された場合および第３の判定値以上の強度が複数の点火サイクルにおいて連続して検出された場合のうちの少なくともいずれか一方の場合、頻度のカウントが停止される。これにより、第４の判定値以上の強度が検出された頻度、すなわちノッキングが発生した頻度が誤ってカウントされないようにすることができる。そのため、第１の判定値を精度よく補正することができる。
【００１９】
第７の発明に係る内燃機関の点火時期制御装置は、第６の発明の構成に加えて、第３の判定値以上の強度が複数の点火サイクルにおいて連続して検出された場合、カウントされた頻度を低減するための手段をさらに備える。第１５の発明に係る内燃機関の点火時期制御方法は、第７の発明に係る内燃機関の点火時期制御装置と同様の要件を備える。
【００２０】
この構成によると、第３の判定値以上の強度が複数の点火サイクルにおいて連続して検出された場合、カウントされた頻度が低減される。これにより、誤ってカウントされた頻度を修正することができる。そのため、第４の判定値以上の強度が検出された頻度、すなわちノッキングが発生した頻度を精度よくカウントすることができる。
【００２１】
第８の発明に係る内燃機関の点火時期制御装置においては、第６または７の発明の構成に加えて、第３の算出手段は、零より大きい第１の係数と第２の値との積を第１の値から減算することにより第３の値を算出するための手段を含む。第４の算出手段は、強度を第３の値で除算することにより第４の値を算出するための手段を含む。第２の判定値は、零より大きい第２の係数と第２の値との積を、第１の値から減算した値である。第３の判定値は、第２の係数より大きい第３の係数と第２の値との積を、第１の値に加算した値である。第４の判定値は、第３の係数より大きい第４の係数と第２の値との積を、第１の値に加算した値である。第１５の発明に係る内燃機関の点火時期制御方法は、第７の発明に係る内燃機関の点火時期制御装置と同様の要件を備える。
【００２２】
この構成によると、零より大きい第１の係数と第２の値との積を第１の値から減算することにより第３の値を算出することができる。強度を第３の値で除算することにより第４の値を算出することができる。第２の判定値は、零より大きい第２の係数と第２の値との積を、第１の値から減算した値である。第３の判定値は、第２の係数より大きい第３の係数と第２の値との積を、第１の値に加算した値である。これにより、内燃機関において実際に検出される振動の強度に対応した第２の判定値、第３の判定値および第４の判定値を得ることができる。第２の判定値もしくは第３の判定値と、検出された強度とが比較される。そのため、内燃機関の負荷が変化したか否かを精度よく判定することができる。また、第４の判定値は、第３の係数より大きい第４の係数と第２の値との積を、第１の値に加算した値である。これにより、内燃機関において実際に検出される振動の強度に対応した第４の判定値を得ることができる。第４の判定値以上の強度が検出された頻度がカウントされる。そのため、ノッキングが発生した頻度を精度よくカウントすることができる。ここで、第３の係数は、第４の係数よりも小さい。すなわち、第３の判定値が第４の判定値よりも小さい。第２の係数は、第３の係数よりも小さい。すなわち、第２の判定値と中央値との差は、第３の判定値と中央値との差よりも小さい。これにより、標準偏差を表わす第２の値および中央値を表わす第１の値の算出などを停止し易くすることができる。
【発明を実施するための最良の形態】
【００２３】
以下、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同一である。したがって、それらについての詳細な説明は繰返さない。
【００２４】
図１を参照して、本発明の実施の形態に係る点火時期制御装置を搭載した車両のエンジン１００について説明する。このエンジン１００には複数の気筒が設けられる。本実施の形態に係る点火時期制御装置は、たとえばエンジンＥＣＵ（Electronic Control Unit）２００が実行するプログラムにより実現される。なお、エンジンＥＣＵ２００により実行されるプログラムをＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disc）などの記録媒体に記録して市場に流通させてもよい。
【００２５】
エンジン１００は、エアクリーナ１０２から吸入された空気とインジェクタ１０４から噴射される燃料との混合気を、燃焼室内で点火プラグ１０６により点火して燃焼させる内燃機関である。
【００２６】
点火時期は、エンジン１００の運転状態に応じて設定される。以下、エンジン１００の運転状態に応じて設定される点火時期を基本点火時期とも記載する。ノッキングが発生した場合などには、点火時期は基本点火時期から遅角される。
【００２７】
混合気が燃焼すると、燃焼圧によりピストン１０８が押し下げられ、クランクシャフト１１０が回転する。燃焼後の混合気（排気ガス）は、三元触媒１１２により浄化された後、車外に排出される。エンジン１００に吸入される空気の量は、スロットルバルブ１１４により調整される。吸気バルブ１１６が開いた際に燃焼室に混合気が導入される。排気バルブ１１８が開いた際に燃焼室から排気ガスが排出される。
【００２８】
エンジン１００は、エンジンＥＣＵ２００により制御される。エンジンＥＣＵ２００には、ノックセンサ３００と、水温センサ３０２と、タイミングロータ３０４に対向して設けられたクランクポジションセンサ３０６と、スロットル開度センサ３０８と、車速センサ３１０と、イグニッションスイッチ３１２と、エアフローメータ３１４とが接続されている。
【００２９】
ノックセンサ３００は、エンジン１００のシリンダブロックに設けられる。ノックセンサ３００は、圧電素子により構成されている。ノックセンサ３００は、エンジン１００の振動により電圧を発生する。電圧の大きさは、振動の大きさと対応した大きさとなる。ノックセンサ３００は、電圧を表わす信号をエンジンＥＣＵ２００に送信する。水温センサ３０２は、エンジン１００のウォータージャケット内の冷却水の温度を検出し、検出結果を表わす信号を、エンジンＥＣＵ２００に送信する。
【００３０】
タイミングロータ３０４は、クランクシャフト１１０に設けられており、クランクシャフト１１０と共に回転する。タイミングロータ３０４の外周には、予め定められた間隔で複数の突起が設けられている。クランクポジションセンサ３０６は、タイミングロータ３０４の突起に対向して設けられている。タイミングロータ３０４が回転すると、タイミングロータ３０４の突起と、クランクポジションセンサ３０６とのエアギャップが変化するため、クランクポジションセンサ３０６のコイル部を通過する磁束が増減し、コイル部に起電力が発生する。クランクポジションセンサ３０６は、起電力を表わす信号を、エンジンＥＣＵ２００に送信する。エンジンＥＣＵ２００は、クランクポジションセンサ３０６から送信された信号に基づいて、クランク角およびクランクシャフト１１０の回転数を検出する。
【００３１】
スロットル開度センサ３０８は、スロットル開度を検出し、検出結果を表わす信号をエンジンＥＣＵ２００に送信する。車速センサ３１０は、車輪（図示せず）の回転数を検出し、検出結果を表わす信号をエンジンＥＣＵ２００に送信する。エンジンＥＣＵ２００は、車輪の回転数から、車速を算出する。イグニッションスイッチ３１２は、エンジン１００を始動させる際に、運転者によりオン操作される。エアフローメータ３１４は、エンジン１００に吸入される空気量を検出し、検出結果を表わす信号をエンジンＥＣＵ２００に送信する。
【００３２】
エンジンＥＣＵ２００は、電源である補機バッテリ３２０から供給された電力により作動する。エンジンＥＣＵ２００は、各センサおよびイグニッションスイッチ３１２から送信された信号、ＲＯＭ（Read Only Memory）２０２に記憶されたマップおよびプログラムに基づいて演算処理を行ない、エンジン１００が所望の運転状態となるように、機器類を制御する。
【００３３】
本実施の形態において、エンジンＥＣＵ２００は、ノックセンサ３００から送信された信号およびクランク角に基づいて、予め定められたノック検出ゲート（予め定められた第１クランク角から予め定められた第２クランク角までの区間）におけるエンジン１００の振動の波形（以下、振動波形と記載する）を検出し、検出された振動波形に基づいて、エンジン１００にノッキングが発生したか否かを判定する。本実施の形態におけるノック検出ゲートは、燃焼行程において上死点（０度）から９０度までである。なお、ノック検出ゲートはこれに限らない。
【００３４】
ノッキングが発生した場合、図２に示すように、エンジン１００には、周波数帯Ａ〜Ｃに含まれるの周波数の振動が発生する。そこで、本実施の形態においては、周波数帯Ａ〜Ｃを含む広域の周波数帯Ｄにおける振動が検出される。
【００３５】
図３に示すように、エンジンＥＣＵ２００は、Ａ／Ｄ（アナログ／デジタル）変換部４００と、バンドパスフィルタ４１０と、積算部４２０とを含む。
【００３６】
Ａ／Ｄ変換部４００は、アナログ信号をデジタル信号に変換する。バンドパスフィルタ４１０は、ノックセンサ３００から送信された信号のうち、周波数帯Ｄの信号のみを通過させる。すなわち、バンドパスフィルタ４１０により、ノックセンサ３００が検出した振動から、周波数帯Ｄの振動のみが抽出される。
【００３７】
積算部４２０は、バンドパスフィルタ４１０により選別された信号、すなわち振動の強度を、クランク角度で５度分づつ積算した積算値（以下、５度積算値とも記載する）を算出する。これにより、図４に示すように、周波数帯Ｄの振動波形が検出される。
【００３８】
検出された振動波形は、振動波形がノック波形モデルに類似する度合を表わす（振動波形の形状とノック波形モデルの形状との差を表わす）相関係数Ｋを算出するために用いられる。図５に示すように、隣接するクランク角の強度に比べて大きく、かつそのような強度の中で最大の強度のクランク角、すなわち強度がピークになるクランク角以降のクランク角の範囲において、検出された振動波形とノック波形モデルとを比較することにより、相関係数Ｋが算出される。
【００３９】
ノック波形モデルは、ノッキングが発生した場合のエンジン１００の振動波形の基準として定められる。本実施の形態において、ノック波形モデルの強度は、振動波形と比較する度に設定される。より具体的には、ノック波形モデルにおける強度の最大値が、振動波形において、隣接する強度に比べて大きい強度（強度のピーク値）と同じになるように設定される。
【００４０】
一方、最大値以外の強度は、エンジン回転数ＮＥおよびエンジン１００の負荷に応じて設定される。より具体的には、隣接するクランク角における強度の減衰率が、エンジン回転数ＮＥおよびエンジン１００の負荷をパラメータに有するマップに従って設定される。
【００４１】
たとえば、２５％の減衰率で、クランク角で２０度分の強度を設定する場合、図６に示すように、２５％ずつ強度が減少する。なお、ノック波形モデルの強度を設定する方法はこれに限らない。
【００４２】
振動波形における強度とノック波形モデルにおける強度との差の絶対値（ズレ量）をクランク角ごと（５度ごと）に算出することにより、相関係数Ｋが算出される。なお、５度以外のクランク角ごとに振動波形における強度とノック波形モデルにおける強度との差の絶対値を算出するようにしてもよい。
【００４３】
振動波形における強度とノック波形モデルにおける強度とのクランク角ごとの差の絶対値をΔＳ（Ｉ）（Ｉは自然数）とおく。図７において斜線で示すように、ノック波形モデルの振動の強度を合計した値、すなわち、ノック波形モデルの面積をＳとおく。相関係数Ｋは、下記の式（１）を用いて算出される。
【００４４】
Ｋ＝（Ｓ−ΣΔＳ（Ｉ））／Ｓ・・・（１）
ΣΔＳ（Ｉ）は、ΔＳ（Ｉ）の総和である。なお、相関係数Ｋの算出方法はこれに限らない。
【００４５】
本実施の形態においては、相関係数Ｋの他、ノック強度Ｎが算出される。ノック強度Ｎは、図８において斜線で示すように、振動波形における強度（５度積算値）を合計した９０度積算値ｌｐｋｋｎｋを用いて算出される。なお、９０度積算値ｌｐｋｋｎｋの代わりに、振動波形における最大の強度を用いるようにしてもよい。
【００４６】
エンジン１００にノッキングが発生していない状態におけるエンジン１００の振動の強度を表わす値をＢＧＬ（Back Ground Level）と表わす。ノック強度Ｎは、下記の式（２）を用いて算出される。
【００４７】
Ｎ＝ｌｐｋｋｎｋ／ＢＧＬ・・・（２）
なお、ノック強度Ｎの算出方法はこれに限らない。ノック強度Ｎを算出する際、９０度積算値ｌｐｋｋｎｋの対数変換値が用いられる。ＢＧＬは、各９０度積算値ｌｐｋｋｎｋが検出された頻度（回数、確率ともいう）を表わす頻度分布において、標準偏差σと正の係数（たとえば「１」）との積を、中央値ＶＭから減算した値として算出される。なお、ＢＧＬの算出方法はこれに限らず、ＢＧＬをＲＯＭ２０２に記憶しておくようにしてもよい。また、頻度分布を作成する際、９０度積算値ｌｐｋｋｎｋの対数変換値が用いられる。
【００４８】
本実施の形態においては、振動波形の形状に基づいて算出される相関係数Ｋおよび振動波形の強度に基づいて算出されるノック強度Ｎを用いて、ノッキングが発生したか否かが１点火毎に判定される。ノッキングが発生したか否かは気筒毎に判定される。相関係数Ｋがしきい値Ｋ（１）以上であり、かつノック強度Ｎが判定値ＶＪ以上であると、ノッキングが発生したと判定される。もしそうでないと、ノッキングが発生していないと判定される。
【００４９】
ノッキングが発生したと判定された場合、予め定められた量だけ点火時期が遅角される。ノッキングが発生していないと判定された場合、予め定められた量だけ点火時期が進角される。
【００５０】
エンジン１００もしくは車両の出荷時において、ＲＯＭ２０２に記憶される判定値ＶＪ（出荷時における判定値ＶＪの初期値）には、予め実験などにより定められる値が用いられる。ところが、ノックセンサ３００の出力値のばらつきや劣化などにより、エンジン１００で同じ振動が生じた場合であっても、検出される強度が変化し得る。この場合、判定値ＶＪを補正し、実際に検出される強度に応じた判定値ＶＪを用いてノッキングが発生したか否かを判定する必要がある。そこで、本実施の形態においては、予め定められた点火サイクル毎、たとえば２００点火サイクル毎に、判定値ＶＪが補正される。
【００５１】
図９を参照して、エンジンＥＣＵ２００の機能について説明する。なお、以下に説明する機能はソフトウェアにより実現するようにしてもよく、ハードウェアにより実現するようにしてもよい。
【００５２】
エンジンＥＣＵ２００は、点火時期設定部５００と、クランク角検出部６００と、強度検出部６０２と、波形検出部６０４と、相関係数算出部６０６と、９０度積算値算出部６０８と、算出部６１０と、判定部６１２と、点火時期制御部６１４と、フィードバック部７００とを備える。
【００５３】
点火時期設定部５００は、エンジン１００の運転状態に応じて基本点火時期を設定する。基本点火時期は、図１０に示すように、エンジン回転数ＮＥおよび負荷ＫＬをパラメータとして有するマップに従って設定される。
【００５４】
本実施の形態においては、エンジン回転数ＮＥがしきい値ＮＥ（０）より小さく、かつ負荷ＫＬがしきい値ＫＬ（０）より小さい運転状態（運転領域）において、ＭＢＴ（Minimum advance for Best Torque）が基本点火時期として設定される。エンジン回転数ＮＥがしきい値ＮＥ（０）より小さく、かつ負荷ＫＬがしきい値ＫＬ（０）より小さい運転状態では、ノッキングがほとんど発生しないからである。なお、ＭＢＴとは、エンジン１００の出力が最大になる点火時期を示す。
【００５５】
負荷ＫＬは、エアフローメータ３１４により検出された吸入空気量およびエンジン回転数ＮＥなどに基づいて算出される。なお、負荷ＫＬを算出する方法は周知の一般的な技術を利用すればよいため、ここではそれらの詳細な説明は繰り返さない。
【００５６】
クランク角検出部６００は、クランクポジションセンサ３０６から送信された信号に基づいて、クランク角を検出する。
【００５７】
強度検出部６０２は、ノックセンサ３００から送信された信号に基づいて、ノック検出ゲートにおける振動の強度を検出する。振動の強度は、クランク角に対応させて検出される。また、振動の強度は、ノックセンサ３００の出力電圧値で表される。なお、ノックセンサ３００の出力電圧値と対応した値で振動の強度を表してもよい。
【００５８】
波形検出部６０４は、振動の強度をクランク角で５度分づつ積算することにより、ノック検出ゲートにおける振動波形を検出する。
【００５９】
相関係数算出部６０６は、振動波形がノック波形モデルに類似する度合を表わす（振動波形の形状とノック波形モデルの形状との差を表わす）相関係数Ｋを算出する。
【００６０】
９０度積算値算出部６０８は、振動波形における強度（５度積算値）を合計した９０度積算値ｌｐｋｋｎｋを算出する。
【００６１】
算出部６１０は、９０度積算値ｌｐｋｋｎｋを用いて、ノック強度Ｎを算出する。判定部６１２は、相関係数Ｋおよびノック強度Ｎを用いて、ノッキングが発生したか否かを１点火毎に判定する。相関係数Ｋがしきい値Ｋ（１）以上であり、かつノック強度Ｎが判定値ＶＪ以上であると、ノッキングが発生したと判定される。もしそうでないと、ノッキングが発生していないと判定される。
【００６２】
点火時期制御部６１４は、ノッキングが発生したか否かに応じて点火時期を補正することにより制御する。ノッキングが発生したと判定された場合、予め定められた量だけ点火時期が遅角される。ノッキングが発生していないと判定された場合、予め定められた量だけ点火時期が進角される。点火時期は、たとえば、ＭＢＴから遅角制限値までの範囲で進角されたり、遅角されたりする。すなわち、最も進角された場合、点火時期はＭＢＴである。最も遅角された場合、点火時期は遅角制限値である。
【００６３】
フィードバック部７００は、ノック強度Ｎと比較される判定値ＶＪを設定する。フィードバック部７００は、図９に示すように、頻度分布作成部７０２と、中央値算出部７０４と、標準偏差算出部７０６と、ＢＧＬ算出部７０８と、ノック判定レベル算出部７１０と、カウント部７１２と、補正部７１４とを含む。さらに、フィードバック部７００は、第１停止部８００と、再開部８０２と、変更部８０４と、第２停止部８０６と、低減部８０８とを備える。
【００６４】
頻度分布作成部７０２は、図１１に示すように、各点火サイクルにおいて算出された９０度積算値ｌｐｋｋｎｋの頻度分布を作成する。頻度分布を作成する際には、９０度積算値ｌｐｋｋｎｋの対数変換値が用いられる。
【００６５】
中央値算出部７０４は、９０度積算値ｌｐｋｋｎｋの中央値ＶＭを算出する。中央値ＶＭは、下記の式（３）を用いて１点火サイクル毎に算出される。
【００６６】
ＶＭ（ｉ）＝ＶＭ（ｉ−１）＋（ｌｐｋｋｎｋ−ＶＭ（ｉ−１））／Ｘ・・・（３）
式（３）においてＶＭ（ｉ）は今回値を示す。ＶＭ（ｉ−１）は前回値を示す。Ｘは正の値である。すなわち、中央値ＶＭは、９０度積算値ｌｐｋｋｎｋに応じて定められる更新量（ｌｐｋｋｎｋ−ＶＭ（ｉ−１））／Ｘだけ更新することにより算出される。Ｘが小さくなることにより、中央値ＶＭの更新量が大きくなる。
【００６７】
なお、式（３）を用いて算出される中央値ＶＭは、複数（たとえば２００点火サイクル）の９０度積算値ｌｐｋｋｎｋに基づいて算出される中央値を表わす近似値である。したがって、式（３）を用いて算出される中央値ＶＭは、実際の中央値とは異なり得る。
【００６８】
標準偏差算出部７０６は、９０度積算値ｌｐｋｋｎｋの標準偏差σを算出する。標準偏差σは、下記の式（４）を用いて１点火サイクル毎に算出される。
【００６９】
σ（ｉ）＝σ（ｉ−１）＋（ｌｐｋｋｎｋ−σ（ｉ−１））／Ｙ・・・（４）
式（４）においてσ（ｉ）は今回値を示す。σ（ｉ−１）は前回値を示す。Ｙは正の値である。すなわち、標準偏差σは、９０度積算値ｌｐｋｋｎｋに応じて定められる更新量（ｌｐｋｋｎｋ−σ（ｉ−１））／Ｙだけ更新することにより算出される。
【００７０】
なお、式（４）を用いて算出される標準偏差σは、複数（たとえば２００点火サイクル）の９０度積算値ｌｐｋｋｎｋに基づいて算出される標準偏差を表わす近似値である。したがって、式（４）を用いて算出される標準偏差σは、実際の標準偏差とは異なり得る。
【００７１】
式（３）および式（４）を用いて中央値ＶＭおよび標準偏差σを算出する代わりに、以下の算出方法を用いるようにしてもよい。
【００７２】
今回算出された９０度積算値ｌｐｋｋｎｋが前回算出された中央値ＶＭよりも大きい場合、前回算出された中央値ＶＭに予め定められた値Ｃ（１）を加算した値が、今回の中央値ＶＭとして算出される。逆に、今回算出された９０度積算値ｌｐｋｋｎｋが前回算出された中央値ＶＭよりも小さい場合、前回算出された中央値ＶＭから予め定められた値Ｃ（２）（たとえばＣ（２）はＣ（１）と同じ値）を減算した値が、今回の中央値ＶＭとして算出される。
【００７３】
今回算出された９０度積算値ｌｐｋｋｎｋが、前回算出された中央値ＶＭよりも小さく、かつ前回算出された中央値ＶＭから前回算出された標準偏差σを減算した値よりも大きい場合、前回算出された標準偏差σから予め定められた値Ｃ（３）を２倍した値を減算した値が、今回の標準偏差σとして算出される。逆に、今回算出された９０度積算値ｌｐｋｋｎｋが、前回算出された中央値ＶＭよりも大きい場合、または前回算出された中央値ＶＭから前回算出された標準偏差σを減算した値よりも小さい場合、前回算出された標準偏差σに予め定められた値Ｃ（４）（たとえばＣ（４）はＣ（３）と同じ値）を加算した値が、今回の標準偏差σとして算出される。中央値ＶＭおよび標準偏差σの初期値は、予め設定された値であってもよいし、「０」であってもよい。
【００７４】
ＢＧＬ算出部７０８は、図１１に示すように、標準偏差σを中央値ＶＭから減算することによりＢＧＬを算出する。なお、標準偏差σと零より大きい係数との積を、中央値ＶＭから減算することによりＢＧＬを算出するようにしてもよい。
【００７５】
ノック判定レベル算出部７１０は、中央値ＶＭおよび標準偏差σを用いて、ノック判定レベルＶＫＤを算出（設定）する。図１１に示すように、中央値ＶＭに正の係数Ｕ（Ｕは定数で、たとえばＵ＝３）と標準偏差σとの積を加算した値が、ノック判定レベルＶＫＤとなる。なお、ノック判定レベルＶＫＤの算出方法はこれに限らない。
【００７６】
係数Ｕは、実験などより得られたデータや知見から求められた係数である。Ｕ＝３とした場合のノック判定レベルＶＫＤよりも大きい９０度積算値ｌｐｋｋｎｋが、実際にノッキングが発生した点火サイクルにおける９０度積算値ｌｐｋｋｎｋと略一致する。なお、係数Ｕに「３」以外の値を用いるようにしてもよい。
【００７７】
カウント部７１２は、予め定められた回数の点火サイクル（たとえば２００点火サイクル）中の、ノック判定レベルＶＫＤ以上の９０度積算値ｌｐｋｋｎｋの頻度を、ノックカウント値ＫＣとしてカウントする。なお、ノック判定レベルＶＫＤ以上の９０度積算値ｌｐｋｋｎｋの割合をカウントするようにしてもよい。
【００７８】
補正部７１４は、ノックカウント値ＫＣがしきい値ＫＣ（０）以上である場合、予め定められた補正量Ａ（１）だけ小さくなるように、判定値ＶＪを補正する。また、補正部７１４は、ノックカウント値ＫＣがしきい値ＫＣ（０）よりも小さい場合、予め定められた補正量Ａ（２）だけ大きくなるように判定値ＶＪを補正する。
【００７９】
第１停止部８００は、９０度積算値ｌｐｋｋｎｋが、第１しきい値より小さい場合、中央値ＶＭおよび標準偏差σの更新を停止する。また、第１停止部８００は、９０度積算値ｌｐｋｋｎｋが、第２しきい値以上である場合、中央値ＶＭおよび標準偏差σの更新を停止する。
【００８０】
図１１に示すように、第１しきい値は、標準偏差σと正の係数Ｇとの積を、中央値ＶＭから減算した値である。第２しきい値は、標準偏差σと正の係数Ｈとの積を、中央値ＶＭに加算した値である。係数Ｇは、係数Ｈよりも小さい。また、係数Ｈは、係数Ｕよりも小さい。なお、第１しきい値および第２しきい値に用いられる中央値ＶＭは、今回値であってもよく、前回値であってもよい。
【００８１】
本実施の形態においては、気筒毎に、第１しきい値よりも小さい９０度積算値ｌｐｋｋｎｋが連続して検出された点火サイクル数がカウントされる。さらに、気筒を区別せずに、第１しきい値よりも小さい９０度積算値ｌｐｋｋｎｋが連続して検出された点火サイクル数がカウントされる。
【００８２】
同様に、第２しきい値以上の９０度積算値ｌｐｋｋｎｋが連続して検出された点火サイクル数が気筒毎にカウントされるとともに、第２しきい値以上の９０度積算値ｌｐｋｋｎｋが連続して検出された点火サイクル数が気筒を区別せずにカウントされる。
【００８３】
再開部８０２は、第１しきい値よりも小さい９０度積算値ｌｐｋｋｎｋが複数の点火サイクルにおいて連続して検出された場合、中央値ＶＭの更新を再開する。また、再開部８０２は、第２しきい値以上の９０度積算値ｌｐｋｋｎｋが複数の点火サイクルにおいて連続して検出された場合、中央値ＶＭの更新を再開する。
【００８４】
より具体的には、第１しきい値よりも小さい９０度積算値ｌｐｋｋｎｋが連続して検出された点火サイクル数の、気筒を区別したカウント数がα（αは正の定数）回以上である場合、中央値ＶＭの更新が再開される。
【００８５】
同様に、第２しきい値以上の９０度積算値ｌｐｋｋｎｋが連続して検出された点火サイクル数の、気筒を区別したカウント数がα回以上である場合、中央値ＶＭの更新が再開される。
【００８６】
また、第１しきい値よりも小さい９０度積算値ｌｐｋｋｎｋが連続して検出された点火サイクル数の、気筒を区別しないカウント数がβ（βは正の定数であって、β＞α）回以上である場合、中央値ＶＭの更新が再開される。
【００８７】
同様に、第２しきい値以上の９０度積算値ｌｐｋｋｎｋが連続して検出された点火サイクル数の、気筒を区別しないカウント数がβ回以上である場合、中央値ＶＭの更新が再開される。
【００８８】
変更部８０４は、第１しきい値よりも小さい９０度積算値ｌｐｋｋｎｋが複数の点火サイクルにおいて連続して検出された場合、中央値ＶＭの更新量を小さくする。すなわち、第１しきい値よりも小さい９０度積算値ｌｐｋｋｎｋが複数の点火サイクルにおいて連続して検出されたことにより中央値ＶＭの更新が再開される際、中央値ＶＭの更新量が小さくされる。
【００８９】
さらに、変更部８０４は、第２しきい値以上の９０度積算値ｌｐｋｋｎｋが複数の点火サイクルにおいて連続して検出された場合、中央値ＶＭの更新量を大きくする。すなわち、第２しきい値以上の９０度積算値ｌｐｋｋｎｋが複数の点火サイクルにおいて連続して検出されたことにより中央値ＶＭの更新が再開される際、中央値ＶＭの更新量が大きくされる。
【００９０】
第２停止部８０６は、第１しきい値よりも小さい９０度積算値ｌｐｋｋｎｋが複数の点火サイクルにおいて連続して検出された場合、ノックカウント値ＫＣのカウントおよび点火サイクル数のカウントを停止する。
【００９１】
さらに、第２停止部８０６は、第２しきい値以上の９０度積算値ｌｐｋｋｎｋが複数の点火サイクルにおいて連続して検出された場合、ノックカウント値ＫＣのカウントおよび点火サイクル数のカウントを停止する。
【００９２】
低減部８０８は、第２しきい値以上の９０度積算値ｌｐｋｋｎｋが複数の点火サイクルにおいて連続して検出された場合、ノックカウント値ＫＣを低減する。たとえば、複数の気筒のうちのいずれか１つの気筒において第２しきい値以上の９０度積算値ｌｐｋｋｎｋが連続して検出された点火サイクル数がα回以上である場合、「α−１」だけノックカウント値ＫＣが低減される。点火順序が連続する気筒において第２しきい値以上の９０度積算値ｌｐｋｋｎｋが連続して検出された点火サイクル数がβ回以上である場合、「β−１」だけノックカウント値ＫＣが低減される。なお、ノックカウント値ＫＣを低減する方法はこれに限らない。
【００９３】
図１２〜図１４を参照して、エンジンＥＣＵ２００が実行するプログラムの制御構造について説明する。
【００９４】
ステップ（以下、ステップをＳと略す）１００にて、エンジンＥＣＵ２００は、クランクポジションセンサ３０６から送信された信号に基づいて、クランク角を検出する。Ｓ１０２にて、エンジンＥＣＵ２００は、ノックセンサ３００から送信された信号に基づいて、クランク角に対応させて、エンジン１００の振動の強度を検出する。
【００９５】
Ｓ１０４にて、エンジンＥＣＵ２００は、ノックセンサ３００の出力電圧値（振動の強度を表わす値）を、クランク角で５度ごとに（５度分だけ）積算した５度積算値を算出することにより、エンジン１００の振動波形を検出する。
【００９６】
Ｓ１０６にて、エンジンＥＣＵ２００は、相関係数Ｋを算出する。Ｓ１０８にて、エンジンＥＣＵ２００は、９０度積算値ｌｐｋｋｎｋを算出する。Ｓ１１０にて、エンジンＥＣＵ２００は、ノック強度Ｎを算出する。
【００９７】
Ｓ１２０にて、エンジンＥＣＵ２００は、相関係数Ｋがしきい値Ｋ（１）以上であり、かつノック強度Ｎが判定値ＶＪ以上であるか否かを判定する。相関係数Ｋがしきい値Ｋ（１）以上であり、かつノック強度Ｎが判定値ＶＪ以上であると（Ｓ１２０にてＹＥＳ）、処理はＳ１２２に移される。もしそうでないと（Ｓ１２０にてＮＯ）、処理はＳ１２６に移される。
【００９８】
Ｓ１２２にて、エンジンＥＣＵ２００は、エンジン１００にノッキングが発生したと判定する。Ｓ１２４にて、エンジンＥＣＵ２００は、点火時期を遅角する。Ｓ１２６にて、エンジンＥＣＵ２００は、エンジン１００にノッキングが発生していないと判定する。Ｓ１２８にて、エンジンＥＣＵ２００は、点火時期を進角する。
【００９９】
図１３を参照して、Ｓ２００にて、エンジンＥＣＵ２００は、今回の点火サイクルにおいて検出された９０度積算値ｌｐｋｋｎｋが、第１しきい値（ＶＭ−σ×Ｇ）より小さいか否かを判定する。９０度積算値ｌｐｋｋｎｋが、第１しきい値より小さい場合（Ｓ２００にてＹＥＳ）、処理はＳ２０２に移される。もしそうでないと（Ｓ２００にてＮＯ）、処理はＳ３００に移される。
【０１００】
Ｓ２０２にて、エンジンＥＣＵ２００は、中央値ＶＭおよび標準偏差σの更新を停止する。Ｓ２０４にて、エンジンＥＣＵ２００は、第１しきい値よりも小さい９０度積算値ｌｐｋｋｎｋが連続して検出された点火サイクル数の、気筒を区別したカウント数がα回以上であるか、もしくは気筒を区別しないカウント数がβ回以上であるかを判定する。
【０１０１】
気筒を区別したカウント数がα回以上であるか、もしくは気筒を区別しないカウント数がβ回以上であると（Ｓ２０４にてＹＥＳ）、処理はＳ２０６に移される。もしそうでないと（Ｓ２０４にてＮＯ）、処理はＳ４００に移される。
【０１０２】
Ｓ２０６にて、エンジンＥＣＵ２００は、中央値ＶＭの更新量を小さくするとともに、前回の点火サイクルにおいて検出された９０度積算値ｌｐｋｋｎｋを用いて中央値ＶＭを更新する。すなわち、中央値ＶＭの更新が再開される。
【０１０３】
Ｓ２０８にて、エンジンＥＣＵ２００は、ノックカウント値ＫＣのカウントおよび点火サイクル数のカウントを停止する。
【０１０４】
Ｓ２１０にて、エンジンＥＣＵ２００は、今回算出された（最新の）中央値ＶＭを用いて、ノック判定レベルＶＫＤ、第１しきい値および第２しきい値を更新（設定）する。
【０１０５】
Ｓ３００にて、エンジンＥＣＵ２００は、今回の点火サイクルにおいて検出された９０度積算値ｌｐｋｋｎｋが、第２しきい値（ＶＭ＋σ×Ｈ）以上であるか否かを判定する。９０度積算値ｌｐｋｋｎｋが、第２しきい値以上であると（Ｓ３００にてＹＥＳ）、処理はＳ３０２に移される。もしそうでないと（Ｓ３００にてＮＯ）、処理はＳ４００に移される。
【０１０６】
Ｓ３０２にて、エンジンＥＣＵ２００は、中央値ＶＭおよび標準偏差σの更新を停止する。Ｓ３０４にて、エンジンＥＣＵ２００は、第２しきい値以上の９０度積算値ｌｐｋｋｎｋが連続して検出された点火サイクル数の、気筒を区別したカウント数がα回以上であるか、もしくは気筒を区別しないカウント数がβ回以上であるかを判定する。
【０１０７】
気筒を区別したカウント数がα回以上であるか、もしくは気筒を区別しないカウント数がβ回以上であると（Ｓ３０４にてＹＥＳ）、処理はＳ３０６に移される。もしそうでないと（Ｓ３０４にてＮＯ）、処理はＳ４００に移される。
【０１０８】
Ｓ３０６にて、エンジンＥＣＵ２００は、中央値ＶＭの更新量を大きくするとともに、今回の点火サイクルにおいて検出された９０度積算値ｌｐｋｋｎｋを用いて中央値ＶＭを更新する。すなわち、中央値ＶＭの更新が再開される。
【０１０９】
Ｓ３０８にて、エンジンＥＣＵ２００は、ノックカウント値ＫＣのカウントおよび点火サイクル数のカウントを停止する。Ｓ３１０にて、エンジンＥＣＵ２００は、ノックカウント値ＫＣを低減する。
【０１１０】
Ｓ３１２にて、エンジンＥＣＵ２００は、今回算出された（最新の）中央値ＶＭを用いて、ノック判定レベルＶＫＤ、第１しきい値および第２しきい値を更新（設定）する。
【０１１１】
Ｓ４００にて、エンジンＥＣＵ２００は、ノックカウント値ＫＣをカウントする。Ｓ４０２にて、エンジンＥＣＵ２００は、前回判定値ＶＪを補正してからの点火サイクルの回数が、予め定められた回数以上であるか否かを判定する。前回判定値ＶＪを補正してからの点火サイクルの回数が、予め定められた回数以上であると（Ｓ４０２にてＹＥＳ）、処理はＳ４０４に移される。もしそうでないと（Ｓ４０２にてＮＯ）、処理はＳ４０６に移される。
【０１１２】
Ｓ４０４にて、エンジンＥＣＵ２００は、ノックカウント値ＫＣに応じて判定値ＶＪを補正する。ノックカウント値ＫＣがしきい値ＫＣ（０）以上である場合、予め定められた補正量Ａ（１）だけ小さくなるように、判定値ＶＪが補正される。ノックカウント値ＫＣがしきい値ＫＣ（０）よりも小さい場合、予め定められた補正量Ａ（２）だけ大きくなるように判定値ＶＪが補正される。
【０１１３】
Ｓ４０６にて、エンジンＥＣＵ２００は、中央値ＶＭおよび標準偏差σの更新が停止されているか否かを判定する。更新が停止されていると（Ｓ４０６にてＹＥＳ）、処理はＳ１００に戻される。もしそうでないと（Ｓ４０６にてＮＯ）、処理はＳ４０８に移される。
【０１１４】
Ｓ４０８にて、エンジンＥＣＵ２００は、前回の点火サイクルにおいて検出された９０度積算値ｌｐｋｋｎｋを用いて中央値ＶＭおよび標準偏差σを更新する。Ｓ４１０にて、エンジンＥＣＵ２００は、前回算出された中央値ＶＭおよび標準偏差σを用いて、ノック判定レベルＶＫＤ、第１しきい値および第２しきい値を更新（設定）する。
【０１１５】
なお、Ｓ１００〜Ｓ４１０の処理を行なう順序は、図１２〜図１４に示す順序に限らない。Ｓ１００〜Ｓ４１０の処理を、図１２〜図１４に示す順序とは異なる順序で実行するようにしてもよい。
【０１１６】
以上のような構造およびフローチャートに基づく、本実施の形態におけるエンジンＥＣＵ２００の動作について説明する。
【０１１７】
エンジン１００の運転中、クランクポジションセンサ３０６から送信された信号に基づいて、クランク角が検出される（Ｓ１００）。ノックセンサ３００から送信された信号に基づいて、クランク角に対応させて、エンジン１００の振動の強度が検出される（Ｓ１０２）。ノックセンサ３００の出力電圧値をクランク角で５度ごとに積算した５度積算値を算出することにより、エンジン１００の振動波形が検出される（Ｓ１０４）。
【０１１８】
ノッキングが発生したか否かを波形の形状に基づいて判定するため、ノック波形モデルを用いて相関係数Ｋが算出される（Ｓ１０６）。さらに、ノッキングに起因して発生した振動が振動波形に含まれるか否かを強度に基づいて判定するため、９０度積算値ｌｐｋｋｎｋが算出される（Ｓ１０８）。９０度積算値ｌｐｋｋｎｋをＢＧＬで除算することにより、ノック強度Ｎが算出される（Ｓ１１０）。
【０１１９】
ノック強度Ｎが最小ガード値よりも大きいと（Ｓ１１２にてＮＯ）、ノッキングが発生したか否かが判定される。相関係数Ｋがしきい値Ｋ（１）以上であり、かつノック強度Ｎが判定値ＶＪ以上である場合（Ｓ１２０にてＹＥＳ）、検出された波形の形状がノッキングによる波形の形状に類似しており、かつ振動の強度が大きいといえる。すなわち、ノッキングが発生した可能性が非常に高いといえる。この場合、エンジン１００にノッキングが発生したと判定される（Ｓ１２２）。ノッキングを抑制するために、点火時期が遅角される（Ｓ１２４）。
【０１２０】
一方、相関係数Ｋがしきい値Ｋ（１）よりも小さい場合、またはノック強度Ｎが判定値ＶＪよりも小さい場合、エンジン１００にノッキングが発生していないと判定される（Ｓ１２６）。この場合、点火時期が進角される（Ｓ１２８）。
【０１２１】
ところで、エンジン１００もしくは車両の出荷時において、ＲＯＭ２０２に記憶される判定値ＶＪ（出荷時における判定値ＶＪの初期値）には、予め実験などにより定められる値が用いられる。ところが、ノックセンサ３００の出力値のばらつきや劣化などにより、エンジン１００で同じ振動が生じた場合であっても、検出される強度が変化し得る。この場合、判定値ＶＪを補正し、実際に検出される強度に応じた判定値ＶＪを用いてノッキングが発生したか否かを判定する必要がある。
【０１２２】
そこで、本実施の形態においては、９０度積算値ｌｐｋｋｎｋの頻度分布を用いて判定値ＶＪが補正される。今回の点火サイクルにおいて検出された９０度積算値ｌｐｋｋｎｋが、第１しきい値以上であり（Ｓ２００にてＮＯ）、第２しきい値より小さいと（Ｓ３００にてＮＯ）、判定値ＶＪを補正するために、ノックカウント値ＫＣがカウントされる（Ｓ４００）。
【０１２３】
前回判定値ＶＪを補正してからの点火サイクルの回数が、予め定められた回数より少なく（Ｓ４０２にてＮＯ）、かつ中央値ＶＭおよび標準偏差σの更新が停止されていないと（Ｓ４０６にてＮＯ）、中央値ＶＭおよび標準偏差σが更新される（Ｓ４０８）。さらに、前回算出された中央値ＶＭおよび標準偏差σを用いて、ノック判定レベルＶＫＤ、第１しきい値および第２しきい値が更新される（Ｓ４０８）。
【０１２４】
前回に判定値ＶＪを補正してからの点火サイクルの回数が、予め定められた回数以上であると（Ｓ４０２にてＹＥＳ）、ノックカウント値ＫＣに応じて判定値ＶＪが補正される（Ｓ４０４）。
【０１２５】
ノックカウント値ＫＣがしきい値ＫＣ（０）以上である場合、補正量Ａ（１）だけ小さくなるように、判定値ＶＪが補正される。これにより、ノッキングが発生したと判定し易くすることができる。そのため、点火時期を遅角する頻度を多くすることができる。その結果、ノッキングが発生する回数を低減することができる。
【０１２６】
ノックカウント値ＫＣがしきい値ＫＣ（０）よりも小さい場合、補正量Ａ（２）だけ大きくなるように判定値ＶＪが補正される。これにより、ノッキングが発生したと判定され難くすることができる。そのため、点火時期を進角する頻度を多くすることができる。その結果、エンジン１００の出力を高めることができる。
【０１２７】
ところで、ノッキングがほとんど発生していない運転状態においては、図１５に示すように、９０度積算値ｌｐｋｋｎｋの頻度分布は正規分布になる。この頻度分布においては、標準偏差σが小さい。
【０１２８】
しかしながら、エンジン１００の負荷が急増もしくは急減する場合、９０度積算値ｌｐｋｋｎｋの頻度分布が大きく変化し得る。そのため、標準偏差σが大きくなり得る。標準偏差σが大きくなると、ＢＧＬが小さくなる。そのため、９０度積算値ｌｐｋｋｎｋをＢＧＬで除算することにより算出されるノック強度Ｎが突発的に大きくなり得る。そのため、ノッキングが発生していなくても、必然的に９０度積算値ｌｐｋｋｎｋが大きくなる。
【０１２９】
また、エンジン１００の負荷が急増する場合、エンジン１００の機械振動自体が大きくなる。ところが、エンジンＥＣＵ２００における演算処理には時間が必要である。そのため、ノック判定レベルＶＫＤが９０度積算値ｌｐｋｋｎｋに追従して大きくなるにはある程度の時間が必要である。
【０１３０】
そのため、停車していた車両が発進する際など、負荷が低い状態から高い状態に変化すると、ノッキングが発生していなくても、ノック判定レベルＶＫＤ以上の９０度積算値ｌｐｋｋｎｋが得られる回数が増加する。この状態で判定値ＶＪを補正すると、判定値ＶＪが誤って小さくされる。
【０１３１】
いずれの場合においても、点火時期を不必要に遅角し得る。そこで、本実施の形態においては、負荷が急変する場合、中央値ＶＭおよび標準偏差σの更新が停止される。
【０１３２】
今回の点火サイクルにおいて検出された９０度積算値ｌｐｋｋｎｋが、第１しきい値より小さいと（Ｓ２００にてＹＥＳ）、エンジン１００の負荷が急減していると判定される。この場合、中央値ＶＭおよび標準偏差σの更新が停止される（Ｓ２０２）。これにより、ノック強度Ｎが突発的に大きくならないようにすることができる。
【０１３３】
ところで、更新を停止したままであると、ノック判定レベルＶＫＤなどが更新されない。この場合、負荷が安定しても、ノック判定レベルＶＫＤなどが実際に検出された９０度積算値ｌｐｋｋｎｋに対応しない値になり得る。
【０１３４】
そこで、第１しきい値よりも小さい９０度積算値ｌｐｋｋｎｋが連続して検出された点火サイクル数の、気筒を区別したカウント数がα回以上である場合、もしくは気筒を区別しないカウント数がβ回以上である場合（Ｓ２０４にてＹＥＳ）、中央値ＶＭのみ更新される（Ｓ２０６）。このとき、中央値ＶＭの更新量を小さくするとともに、前回の点火サイクルにおいて検出された９０度積算値ｌｐｋｋｎｋを用いて中央値ＶＭが更新される。これにより、中央値ＶＭの更新が再開される。
【０１３５】
ただし、エンジン１００の負荷が急変している状態では、９０度積算値ｌｐｋｋｎｋの頻度分布が過渡的に変化している。この状態でノックカウント値ＫＣをカウントすると、ノックカウント値ＫＣの精度が悪化し得る。そこで、ノックカウント値ＫＣのカウントおよび点火サイクル数のカウントが停止される（Ｓ２０８）。一方、ノック判定レベルＶＫＤ、第１しきい値および第２しきい値が更新される（Ｓ２１０）。これにより、実際に検出された９０度積算値ｌｐｋｋｎｋに対応したノック判定レベルＶＫＤ、第１しきい値および第２しきい値を得ることができる。
【０１３６】
今回の点火サイクルにおいて検出された９０度積算値ｌｐｋｋｎｋが、第２しきい値以上であると（Ｓ３００にてＹＥＳ）、中央値ＶＭおよび標準偏差σの更新が停止される（Ｓ３０２）。これにより、ノック強度Ｎが突発的に大きくならないようにすることができる。
【０１３７】
第２しきい値以上の９０度積算値ｌｐｋｋｎｋが連続して検出された点火サイクル数の、気筒を区別したカウント数がα回以上である場合、もしくは気筒を区別しないカウント数がβ回以上である場合（Ｓ３０４にてＹＥＳ）、中央値ＶＭのみ更新される（Ｓ３０６）。このとき、中央値ＶＭの更新量を大きくするとともに、今回の点火サイクルにおいて検出された９０度積算値ｌｐｋｋｎｋを用いて中央値ＶＭが更新される。これにより、中央値ＶＭの更新が再開される。
【０１３８】
また、ノックカウント値ＫＣのカウントおよび点火サイクル数のカウントが停止される（Ｓ３０８）。さらに、ノックカウント値が誤って多くカウントされているため、ノックカウント値ＫＣが低減される（Ｓ３１０）。一方、今回算出された中央値ＶＭを用いて、ノック判定レベルＶＫＤ、第１しきい値および第２しきい値が更新される（Ｓ３１２）。
【０１３９】
以上のように、本実施の形態に係る点火時期制御装置においては、強度を合計した９０度積算値ｌｐｋｋｎｋの中央値ＶＭおよび標準偏差σが算出される。中央値ＶＭから標準偏差σを減算することによりＢＧＬが定められる。９０度積算値ｌｐｋｋｎｋをＢＧＬで除算することにより、ノック強度Ｎが算出される。ノック強度Ｎが判定値ＶＪ以上である場合において、点火時期が遅角される。第１のしきい値より小さい９０度積算値ｌｐｋｋｎｋが検出された場合、もしくは第２のしきい値以上の９０度積算値ｌｐｋｋｎｋが検出された場合、中央値ＶＭおよび標準偏差σの更新が停止される。これにより、エンジンの負荷が急変する際に、中央値ＶＭおよび標準偏差σに応じて算出されるノック強度Ｎが突発的に大きくならないようにすることができる。そのため、点火時期が誤って遅角される頻度を、低減することができる。その結果、点火時期を精度よく制御することができる。
【０１４０】
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
【図面の簡単な説明】
【０１４１】
【図１】エンジンを示す概略構成図である。
【図２】ノッキング時にエンジンで発生する振動の周波数帯を示す図である。
【図３】エンジンＥＣＵを示す制御ブロック図である。
【図４】エンジンの振動波形を示す図である。
【図５】振動波形とノック波形モデルとを比較した図である。
【図６】ノック波形モデルを示す図である。
【図７】ノック波形モデルの面積Ｓを示す図である。
【図８】９０度積算値ｌｐｋｋｎｋを示す図である。
【図９】エンジンＥＣＵの機能ブロック図である。
【図１０】基本点火時期を定めたマップである。
【図１１】９０度積算値ｌｐｋｋｎｋの頻度分布を示す図（その１）である。
【図１２】エンジンＥＣＵが実行するプログラムの制御構造を示す図（その１）である。
【図１３】エンジンＥＣＵが実行するプログラムの制御構造を示す図（その２）である。
【図１４】エンジンＥＣＵが実行するプログラムの制御構造を示す図（その３）である。
【図１５】９０度積算値ｌｐｋｋｎｋの頻度分布を示す図（その２）である。
【符号の説明】
【０１４２】
１００  エンジン、１０４  インジェクタ、１０６  点火プラグ、１１０  クランクシャフト、１１６  吸気バルブ、１１８  排気バルブ、２００  エンジンＥＣＵ、２０２  ＲＯＭ、３００  ノックセンサ、３０２  水温センサ、３０４  タイミングロータ、３０６  クランクポジションセンサ、３０８  スロットル開度センサ、３１０  車速センサ、３１２  イグニッションスイッチ、３１４  エアフローメータ、３２０  補機バッテリ、４００  Ａ／Ｄ変換部、４１０  バンドパスフィルタ、４２０  積算部、５００  点火時期設定部、６００  クランク角検出部、６０２  強度検出部、６０４  波形検出部、６０６  相関係数算出部、６０８  ９０度積算値算出部、６１０  算出部、６１２  判定部、６１４  点火時期制御部、７００  フィードバック部、７０２  頻度分布作成部、７０４  中央値算出部、７０６  標準偏差算出部、７０８  ＢＧＬ算出部、７１０  ノック判定レベル算出部、７１２  カウント部、７１４  補正部、８００  第１停止部、８０２  再開部、８０４  変更部、８０６  第２停止部、８０８  低減部。
【図１】
0004680248.tif 000002
【図２】
0004680248.tif 000003
【図３】
0004680248.tif 000004
【図４】
0004680248.tif 000005
【図５】
0004680248.tif 000006
【図６】
0004680248.tif 000007
【図７】
0004680248.tif 000008
【図８】
0004680248.tif 000009
【図９】
0004680248.tif 000010
【図１０】
0004680248.tif 000011
【図１１】
0004680248.tif 000012
【図１２】
0004680248.tif 000013
【図１３】
0004680248.tif 000014
【図１４】
0004680248.tif 000015
【図１５】
0004680248.tif 000016