以下、図面を参照しつつ、本発明の実施の形態について説明する。以下の説明では、同一の部品には同一の符号を付してある。それらの名称および機能も同一である。したがって、それらについての詳細な説明は繰返さない。
図1を参照して、車両のエンジン100について説明する。このエンジン100には複数の気筒が設けられる。本実施の形態に係る制御装置は、たとえばエンジンECU(Electronic Control Unit)200が実行するプログラムにより実現される。なお、エンジンECU200により実行されるプログラムをCD(Compact Disc)、DVD(Digital Versatile Disc)などの記録媒体に記録して市場に流通させてもよい。
エンジン100は、エアクリーナ102から吸入された空気とインジェクタ104から噴射される燃料との混合気を、燃焼室内で点火プラグ106により点火して燃焼させる内燃機関である。
点火時期は、エンジン100の運転状態に応じて設定される。以下、エンジン100の運転状態に応じて設定される点火時期を基本点火時期とも記載する。ノックが発生した場合などには、点火時期は基本点火時期から遅角される。すなわち基本点火時期は、点火時期の基準として用いられる。
混合気が燃焼すると、燃焼圧によりピストン108が押し下げられ、クランクシャフト110が回転する。燃焼後の混合気(排気ガス)は、三元触媒112により浄化された後、車外に排出される。エンジン100に吸入される空気の量は、スロットルバルブ114により調整される。吸気バルブ116が開いた際に燃焼室に混合気が導入される。排気バルブ118が開いた際に燃焼室から排気ガスが排出される。
エンジン100は、エンジンECU200により制御される。エンジンECU200には、ノックセンサ300と、水温センサ302と、タイミングロータ304に対向して設けられたクランクポジションセンサ306と、スロットル開度センサ308と、車速センサ310と、イグニッションスイッチ312と、エアフローメータ314とが接続されている。
ノックセンサ300は、エンジン100のシリンダブロックに設けられる。ノックセンサ300は、圧電素子により構成されている。ノックセンサ300は、エンジン100の振動により電圧を発生する。電圧の大きさは、振動の大きさと対応した大きさとなる。ノックセンサ300は、電圧を表わす信号をエンジンECU200に送信する。水温センサ302は、エンジン100のウォータージャケット内の冷却水の温度を検出し、検出結果を表わす信号を、エンジンECU200に送信する。
タイミングロータ304は、クランクシャフト110に設けられており、クランクシャフト110と共に回転する。タイミングロータ304の外周には、予め定められた間隔で複数の突起が設けられている。クランクポジションセンサ306は、タイミングロータ304の突起に対向して設けられている。タイミングロータ304が回転すると、タイミングロータ304の突起と、クランクポジションセンサ306とのエアギャップが変化するため、クランクポジションセンサ306のコイル部を通過する磁束が増減し、コイル部に起電力が発生する。クランクポジションセンサ306は、起電力を表わす信号を、エンジンECU200に送信する。エンジンECU200は、クランクポジションセンサ306から送信された信号に基づいて、クランク角およびクランクシャフト110の回転数を検出する。
スロットル開度センサ308は、スロットル開度を検出し、検出結果を表わす信号をエンジンECU200に送信する。車速センサ310は、車輪(図示せず)の回転数を検出し、検出結果を表わす信号をエンジンECU200に送信する。エンジンECU200は、車輪の回転数から、車速を算出する。イグニッションスイッチ312は、エンジン100を始動させる際に、運転者によりオン操作される。エアフローメータ314は、エンジン100に吸入される空気量を検出し、検出結果を表わす信号をエンジンECU200に送信する。また、本実施の形態において、エアフローメータ314にはホットワイヤ式のエアフローメータが用いられており、エアフローメータ314によりエンジン100に吸入される空気の温度が検出される。検出結果を表わす信号はエンジンECU200に送信される。
エンジンECU200は、電源である補機バッテリ320から供給された電力により作動する。エンジンECU200は、各センサおよびイグニッションスイッチ312から送信された信号、ROM(Read Only Memory)202に記憶されたマップおよびプログラムに基づいて演算処理を行ない、エンジン100が所望の運転状態となるように、機器類を制御する。
本実施の形態において、エンジンECU200は、ノックセンサ300から送信された信号およびクランク角に基づいて、予め定められたノック検出ゲート(予め定められた第1クランク角から予め定められた第2クランク角までの区間)におけるエンジン100の振動の波形(以下、振動波形と記載する)を検出し、検出された振動波形に基づいて、エンジン100にノックが発生したか否かを判定する。本実施の形態におけるノック検出ゲートは、燃焼行程において上死点(0度)から90度までである。なお、ノック検出ゲートはこれに限らない。
ノックが発生した場合、図2に示すように、エンジン100には、周波数帯A〜Cに含まれるの周波数の振動が発生する。そこで、本実施の形態においては、周波数帯A〜Cを含む広域の周波数帯Dにおける振動が検出される。
図3に示すように、エンジンECU200は、A/D(アナログ/デジタル)変換部400と、バンドパスフィルタ410と、積算部420とを含む。
A/D変換部400は、アナログ信号をデジタル信号に変換する。バンドパスフィルタ410は、ノックセンサ300から送信された信号のうち、周波数帯Dの信号のみを通過させる。すなわち、バンドパスフィルタ410により、ノックセンサ300が検出した振動から、周波数帯Dの振動のみが抽出される。
積算部420は、バンドパスフィルタ410により選別された信号、すなわち振動の強度を、クランク角度で5度分づつ積算した積算値(以下、5度積算値とも記載する)を算出する。これにより、図4に示すように、周波数帯Dの振動波形が検出される。
検出された振動波形は、振動波形がノック波形モデルに類似する度合を表わす(振動波形の形状とノック波形モデルの形状との差を表わす)相関係数Kを算出するために用いられる。図5に示すように、隣接するクランク角の強度に比べて大きく、かつそのような強度の中で最大の強度のクランク角、すなわち強度がピークになるクランク角以降のクランク角の範囲において、検出された振動波形とノック波形モデルとを比較することにより、相関係数Kが算出される。
ノック波形モデルは、ノックが発生した場合のエンジン100の振動波形の基準として定められる。本実施の形態において、ノック波形モデルの強度は、振動波形と比較する度に設定される。より具体的には、ノック波形モデルにおける強度の最大値が、振動波形において、隣接する強度に比べて大きい強度(強度のピーク値)と同じになるように設定される。
一方、最大値以外の強度は、エンジン回転数NEおよびエンジン100の負荷に応じて設定される。より具体的には、隣接するクランク角における強度の減衰率が、エンジン回転数NEおよびエンジン100の負荷をパラメータに有するマップに従って設定される。
たとえば、25%の減衰率で、クランク角で20度分の強度を設定する場合、図6に示すように、25%ずつ強度が減少する。なお、ノック波形モデルの強度を設定する方法はこれに限らない。
振動波形における強度とノック波形モデルにおける強度との差の絶対値(ズレ量)をクランク角ごと(5度ごと)に算出することにより、相関係数Kが算出される。なお、5度以外のクランク角ごとに振動波形における強度とノック波形モデルにおける強度との差の絶対値を算出するようにしてもよい。
振動波形における強度とノック波形モデルにおける強度とのクランク角ごとの差の絶対値をΔS(I)(Iは自然数)とおく。図7において斜線で示すように、ノック波形モデルの振動の強度を合計した値、すなわち、ノック波形モデルの面積をSとおく。相関係数Kは、下記の式1を用いて算出される。
K=(S−ΣΔS(I))/S・・・(1)
ΣΔS(I)は、ΔS(I)の総和である。なお、相関係数Kの算出方法はこれに限らない。
本実施の形態においては、相関係数Kの他、ノック強度Nが算出される。ノック強度Nは、図8において斜線で示すように、振動波形における強度(5度積算値)を合計した90度積算値lpkknkを用いて算出される。なお、90度積算値lpkknkの代わりに、振動波形における最大の強度を用いるようにしてもよい。
エンジン100にノックが発生していない状態におけるエンジン100の振動の強度を表わす値をBGL(Back Ground Level)と表わす。ノック強度Nは、下記の式2を用いて算出される。
N=lpkknk/BGL・・・(2)
なお、ノック強度Nの算出方法はこれに限らない。BGLは、各90度積算値lpkknkが検出された頻度(回数、確率ともいう)を表わす頻度分布において、標準偏差SGMと係数(たとえば「1」)との積を、中央値VMEDから減算した値として算出される。なお、BGLの算出方法はこれに限らず、BGLをROM202に記憶しておくようにしてもよい。また、頻度分布を作成する際、90度積算値lpkknkの対数変換値が用いられる。
本実施の形態においては、振動波形の形状に基づいて算出される相関係数Kおよび振動波形の強度に基づいて算出されるノック強度Nを用いて、ノックが発生したか否かが1点火毎に判定される。ノックが発生したか否かは気筒毎に判定される。相関係数Kがしきい値K1以上であり、かつノック強度Nが判定値J以上であると、ノックが発生したと判定される。もしそうでないと、ノックが発生していないと判定される。
なお、90度積算値lpkknkの対数変換値の頻度分布上では、ノック強度Nが判定値J以上となる場合、90度積算値lpkknkが判定値JとBGLとの和以上になる。
したがって、判定値JとBGLとの和が判定値であると仮定すれば、90度積算値lpkknkと判定値とを比較することによってノックが発生したか否かを判定していると言い換えることができる。
ノックが発生したと判定された場合、予め定められた量だけ点火時期が遅角される。ノックが発生していないと判定された場合、予め定められた量だけ点火時期が進角される。
エンジン100もしくは車両の出荷時において、ROM202に記憶される判定値J(出荷時における判定値Jの初期値)には、予め実験などにより定められる値が用いられる。ところが、ノックセンサ300の出力値のばらつきや劣化などにより、エンジン100で同じ振動が生じた場合であっても、検出される強度が変化し得る。この場合、判定値Jを補正し、実際に検出される強度に応じた判定値Jを用いてノックが発生したか否かを判定する必要がある。そこで、本実施の形態においては、予め定められた点火サイクル毎、たとえば200点火サイクル毎に、判定値Jが補正される。
また、判定値Jは、200点火サイクル毎に補正される他、後述するように、ノックが頻発していると判定された場合に小さくなるように補正される。なお、判定値Jは、複数の気筒毎に補正される。すなわち、判定値Jは、複数の気筒毎に設定される。
また、判定値Jは、複数の気筒の判定値Jの平均値を基準にして±α(αは任意の正値)の範囲内に制限される。
図9を参照して、エンジンECU200の機能について説明する。なお、以下に説明する機能はソフトウェアにより実現するようにしてもよく、ハードウェアにより実現するようにしてもよい。
エンジンECU200は、点火時期設定部500と、クランク角検出部600と、強度検出部602と、波形検出部604と、相関係数算出部606と、90度積算値算出部608と、算出部610と、判定部612と、点火時期制御部614と、判定値設定部700とを備える。
点火時期設定部500は、エンジン100の運転状態に応じて基本点火時期を設定する。基本点火時期は、図10に示すように、エンジン回転数NEおよび負荷KLをパラメータとして有するマップに従って設定される。
本実施の形態においては、エンジン回転数NEがしきい値NE0より小さく、かつ負荷KLがしきい値KL0より小さい運転状態(運転領域)において、MBT(Minimum advance for Best Torque)が基本点火時期として設定される。エンジン回転数NEがしきい値NE0より小さく、かつ負荷KLがしきい値KL0より小さい運転状態では、ノックがほとんど発生しないからである。なお、MBTとは、エンジン100の出力が最大になる点火時期を示す。
負荷KLは、エアフローメータ314により検出された吸入空気量およびエンジン回転数NEなどに基づいて算出される。なお、負荷KLを算出する方法は周知の一般的な技術を利用すればよいため、ここではそれらの詳細な説明は繰り返さない。
クランク角検出部600は、クランクポジションセンサ306から送信された信号に基づいて、クランク角を検出する。
強度検出部602は、ノックセンサ300から送信された信号に基づいて、ノック検出ゲートにおける振動の強度を検出する。振動の強度は、クランク角に対応させて検出される。また、振動の強度は、ノックセンサ300の出力電圧値で表される。なお、ノックセンサ300の出力電圧値と対応した値で振動の強度を表してもよい。
波形検出部604は、振動の強度をクランク角で5度分づつ積算することにより、ノック検出ゲートにおける振動波形を検出する。
相関係数算出部606は、振動波形がノック波形モデルに類似する度合を表わす(振動波形の形状とノック波形モデルの形状との差を表わす)相関係数Kを算出する。
90度積算値算出部608は、振動波形における強度(5度積算値)を合計した90度積算値lpkknkを算出する。
算出部610は、90度積算値lpkknkを用いて、ノック強度Nを算出する。判定部612は、相関係数Kおよびノック強度Nを用いて、ノックが発生したか否かを1点火毎に判定する。相関係数Kがしきい値K1以上であり、かつノック強度Nが判定値J以上であると、ノックが発生したと判定される。もしそうでないと、ノックが発生していないと判定される。
点火時期制御部614は、ノックが発生したか否かに応じて点火時期を補正することにより制御する。ノックが発生したと判定された場合、予め定められた量だけ点火時期が遅角される。ノックが発生していないと判定された場合、予め定められた量だけ点火時期が進角される。点火時期は、たとえば、MBTから遅角制限値までの範囲で進角されたり、遅角されたりする。すなわち、最も進角された場合、点火時期はMBTである。最も遅角された場合、点火時期は遅角制限値である。
判定値設定部700は、ノック強度Nと比較される判定値Jを設定する。判定値設定部700は、頻度分布作成部702と、第1補正部710と、第1制限部711と、第2制限部712と、第2補正部720と、第3補正部730と、カウント部732と、増大部734とを備える。
頻度分布作成部702は、図11に示すように、各点火サイクルにおいて算出された90度積算値lpkknkの頻度分布を作成する。頻度分布を作成する際には、90度積算値lpkknkの対数変換値が用いられる。また、90度積算値lpkknkの頻度分布は、複数の気筒毎に作成される。
頻度分布においては、図11に示すように、90度積算値lpkknkの中央値VMEDおよび標準偏差SGMが算出される。中央値VMEDは、下記の式3を用いて1点火サイクル毎に算出される。
VMED(i)=VMED(i-1)+(lpkknk-VMED(i-1))/X・・・(3)
式3においてVMED(i)は今回値を示す。VMED(i−1)は前回値を示す。Xは正の値である。すなわち、中央値VMは、積算値lpkknkに応じて定められる更新量(lpkknk−VMED(i−1))/Xだけ更新することにより算出される。Xが小さくなることにより、中央値VMEDの更新量が大きくなる。
なお、式3を用いて算出される中央値VMEDは、複数(たとえば200点火サイクル)の積算値lpkknkに基づいて算出される中央値を表わす近似値である。したがって、式3を用いて算出される中央値VMEDは、実際の中央値とは異なり得る。
標準偏差SGMは、下記の式4を用いて1点火サイクル毎に算出される。
SGM(i)= SGM(i-1)+(lpkknk-SGM(i-1))/Y・・・(4)
式4においてSGM(i)は今回値を示す。SGM(i−1)は前回値を示す。Yは正の値である。すなわち、標準偏差SGMは、積算値lpkknkに応じて定められる更新量(lpkknk−SGM(i−1))/Yだけ更新することにより算出される。
なお、式4を用いて算出される標準偏差SMGは、複数(たとえば200点火サイクル)の積算値lpkknkに基づいて算出される標準偏差を表わす近似値である。したがって、式4を用いて算出される標準偏差SGMは、実際の標準偏差とは異なり得る。
なお、中央値VMEDおよび標準偏差SGMの算出方法はこれに限定されない。また、中央値VMEDおよび標準偏差SGMの初期値は、予め設定された値であってもよいし、「0」であってもよい。
中央値VMEDおよび標準偏差SGMを用いて、ノック判定レベルVKDが算出される。図11に示すように、中央値VMEDに係数U(Uは定数で、たとえばU=3)と標準偏差SGMとの積を加算した値が、ノック判定レベルVKDとなる。なお、ノック判定レベルVKDの算出方法はこれに限らない。
係数Uは、実験などより得られたデータや知見から求められた係数である。U=3とした場合のノック判定レベルVKDよりも大きい90度積算値lpkknkが、実際にノックが発生した点火サイクルにおける90度積算値lpkknkと略一致する。なお、係数Uに「3」以外の値を用いるようにしてもよい。
第1補正部710は、90度積算値lpkknkの標準偏差SGMが、しきい値SGMREF以上であると、判定値Jが小さくなるように補正する。
第1補正部710は、下記の式5〜8のうちのいずれかの式を用いて判定値Jが小さくなるように補正する。
J=J×(1−((SGM−SGMM)/SGMREF)×F)・・・(5)
J=J−(SGM−SGMM)×F・・・(6)
J=J×((1−(SGM−SGMM)/SGMREF)2)×F・・・(7)
J=J×((1−(SGM−SGMM)/SGMREF)1/2)×F・・・(8)
なお、各式における左辺の「J」は、補正後の判定値Jを示す。右辺の「J」は、補正前の判定値Jを示す。
「SGMM」は、下記の式9を用いて算出される値である。
SGMM=SGMREF−(SGM−SGMREF)・・・(9)
「F」は、マップなどを用いて、エンジン回転数NEおよび負荷KLに応じて定められる係数である。なお、エンジン回転数NEおよび負荷KLのうちのいずれか一方に応じて係数Fを定めるようにしてもよい。
エンジン回転数NEおよび負荷KLに応じて定められる係数Fを用いて判定値Jを補正することにより、エンジン回転数NEおよび負荷KLに応じて判定値Jが小さくなるように補正することができる。
上述の式5もしくは式6を用いて判定値Jを補正した場合、図12に示すように、判定値Jは、90度積算値lpkknkの標準偏差SGMとしきい値SGMREFとの差に比例した補正量で小さくなるように補正される。
上述の式7を用いて判定値Jを補正した場合、図13に示すように、判定値Jは、90度積算値lpkknkの標準偏差SGMとしきい値SGMREFとの二乗に応じて小さくなるように補正される。
上述の式8を用いて判定値Jを補正した場合、図14に示すように、判定値Jは、90度積算値lpkknkの標準偏差SGMとしきい値SGMREFとの差の平方根に応じて小さくなるように補正される。なお、判定値Jの補正方法はこれらに限らない。
また、第1補正部710は、エンジン回転数NEが予め定められた回転数よりも低く、かつ負荷KLが予め定められた負荷よりも高いという条件、エンジン100に吸入される空気の温度がしきい値以上であるという条件、基本点火時期からのノックによる遅角量が予め定められた量以下であるという条件ならびに判定値Jよりも高いノック強度Nが複数の点火サイクルにおいて連続して検出された回数が予め定められた回数より小さいという条件が満たされた場合に限り、判定値Jが小さくなるように補正する。すなわち、これらの条件が全て満たされると、判定値Jが小さくなるように補正することが許可され、いずれか一つの条件が満たされないと、判定値Jが小さくなるように補正することが禁止される。
なお、これらの条件のうちのいずれか一つの条件が満たされた場合に判定値Jが小さくなるように補正することを許可するようにしてもよい。
また、ノックによる点火時期の遅角量がしきい値を超える度に学習される学習値を用いて、基本点火時期からの遅角量が予め定められた量以下であるか否かを判断するようにしてもよい。すなわち、遅角量の学習値が予め定められた量以下であると、基本点火時期からの遅角量が予め定められた量以下であると判断するようにしてもよい。
第1制限部711は、判定値Jを下限値以上に制限する。判定値Jの下限値は、設計者が予め定めた一定値であってもよい。また、判定値Jの下限値は、図15に示すように、複数の気筒の判定値Jの平均値を基準にした下限値、すなわち判定値Jの平均値からαを減算した値から、さらにβ(βは任意の正値)だけ減算した値であってもよい。これにより、気筒間の判定値Jの差を所望の範囲内に制限することができる。
第2制限部712は、上述の式5〜式8において判定値Jを補正するために用いられる係数Fを予め定められた係数以上に制限する。たとえば、設計者により予め定められた係数以上に係数Fが制限される。
第2補正部720は、90度積算値lpkknkの標準偏差SGMと比較されるしきい値SGMREFを、エンジン100に吸入される空気の温度に応じて補正する。たとえば、空気の温度が高いほどより小さくなるようにしきい値SGMREFが補正される。なおしきい値SGMREFを補正する方法はこれに限らない。
第3補正部730は、予め定められた回数の点火サイクル(たとえば200点火サイクル)においてノック判定レベルVKDよりも大きい90度積算値lpkknkの割合(頻度)としてカウントされるノック占有率knkshareがしきい値knkshare0以上である場合、予め定められた補正量A1だけ小さくなるように、判定値Jを補正する。また、第2補正部720は、ノック占有率knkshareがしきい値knkshare0よりも小さい場合、予め定められた補正量A2だけ大きくなるように判定値Jを補正する。
カウント部732は、ノック占有率knkshareをカウントする。すなわち、カウント部は、ノック判定レベルVKDよりも大きい90度積算値lpkknkが検出された場合に、ノック占有率knkshareをたとえば「1」だけ増加する。
増大部734は、90度積算値lpkknkの標準偏差SGMが、しきい値SGMREF以上である場合は、しきい値SGMREFより小さい場合に比べて、ノック占有率knkshareの増加量を大きくする。ノック占有率knkshareの増加量は、たとえば2倍にされる。なお、増加量を大きくする方法はこれに限らない。
図16および図17を参照して、エンジンECU200が実行するプログラムの制御構造について説明する。なお、以下に説明するプログラムはたとえば1点火サイクル毎に繰り返し実行される。
ステップ(以下、ステップをSと略す)100にて、エンジンECU200は、クランクポジションセンサ306から送信された信号に基づいて、クランク角を検出する。S102にて、エンジンECU200は、ノックセンサ300から送信された信号に基づいて、クランク角に対応させて、エンジン100の振動の強度を検出する。
S104にて、エンジンECU200は、ノックセンサ300の出力電圧値(振動の強度を表わす値)を、クランク角で5度ごとに(5度分だけ)積算した5度積算値を算出することにより、エンジン100の振動波形を検出する。
S106にて、エンジンECU200は、相関係数Kを算出する。S108にて、エンジンECU200は、90度積算値lpkknkを算出する。S110にて、エンジンECU200は、ノック強度Nを算出する。
S120にて、エンジンECU200は、相関係数Kがしきい値K1以上であり、かつノック強度Nが判定値J以上であるか否かを判定する。相関係数Kがしきい値K1以上であり、かつノック強度Nが判定値J以上であると(S120にてYES)、処理はS122に移される。もしそうでないと(S120にてNO)、処理はS126に移される。
S122にて、エンジンECU200は、エンジン100にノックが発生したと判
定する。S124にて、エンジンECU200は、点火時期を遅角する。S126にて、エンジンECU200は、エンジン100にノックが発生していないと判定する。S128にて、エンジンECU200は、点火時期を進角する。
S200にて、エンジンECU200は、90度積算値lpkknkの頻度分布を作成(更新)する。すなわち、中央値VMED、標準偏差SGMおよびノック判定レベルVKDが設定(更新)される。
図17を参照して、S210にて、エンジンECU200は、エンジンの運転状態が、エンジン回転数NEが予め定められた回転数よりも低く、かつ負荷KLが予め定められた負荷よりも高いという状態であるか否かを判断する。
エンジン100の運転状態が、エンジン回転数NEが予め定められた回転数よりも低く、かつ負荷KLが予め定められた負荷よりも高いという状態であると(S210にてYES)、処理はS212に移される。もしそうでないと(S210にてNO)、処理はS230に移される。
S212にて、エンジンECU200は、90度積算値lpkknkの標準偏差SGMと比較されるしきい値SGMREFを、エンジン100に吸入される空気の温度に応じて補正する。
S214にて、エンジンECU200は、90度積算値lpkknkの標準偏差SGMが、しきい値SGMREF以上であるか否かを判断する。90度積算値lpkknkの標準偏差SGMが、しきい値SGMREF以上であると(S214にてYES)、処理はS216に移される。もしそうでないと(S214にてNO)、処理はS230に移される。
S216にて、エンジンECU200は、「SGMM」を算出する。
S218にて、エンジンECU200は、エンジン100に吸入される空気の温度がしきい値以上であるという条件、基本点火時期からのノックによる遅角量が予め定められた量以下であるという条件ならびに判定値Jよりも高いノック強度Nが複数の点火サイクルにおいて連続して検出された回数が予め定められた回数より小さいという条件が全て満たされているか否かを判断する。
全ての条件が満たされていると(S218にてYES)、処理はS220に移される。もしそうでないと(S218にてNO)、処理はS230に移される。
S220にて、エンジンECU200は、判定値Jを補正するために用いられる係数Fを予め定められた係数以上に制限する。すなわち、エンジン回転数NEおよび負荷KLに応じて定められる係数Fが、予め定められた係数以上である場合、定められた係数Fがそのまま用いられる。エンジン回転数NEおよび負荷KLに応じて定められる係数Fが、予め定められた係数より小さい場合、係数Fに予め定められた係数が設定される。
S222にて、エンジンECU200は、判定値Jが小さくなるように補正する。S224にて、エンジンECU200は、判定値Jを下限値以上に制限する。すなわち、補正後の判定値Jが下限値以上であると、補正後の判定値Jがそのまま用いられる。補正後の判定値Jが下限値より小さいと、下限値が判定値Jに設定される。
S230にて、エンジンECU200は、90度積算値lpkknkがノック判定レベルVKDより大きいか否かを判断する。90度積算値lpkknkがノック判定レベルVKDより大きいと(S230にてYES)、処理はS232に移される。もしそうでないと(S230にてのNO)、処理はS250に移される。
S232にて、エンジンECU200は、ノック占有率knkshareを「1」だけ増加する。
S240にて、エンジンECU200は、90度積算値lpkknkの頻度分布におて、90度積算値lpkknk(90度積算値lpkknkの対数変換値)が、「SGMM」と係数Uとの積を中央値VMEDに加算した値よりも大きいか否かを判断する。90度積算値lpkknkが、「SGMM」と係数Uとの積を中央値VMEDに加算した値よりも大きいと(S240にてYES)、処理はS242に移される。もしそうでないと(S240にてNO)、処理はS250に移される。
S242にて、エンジンECU200は、ノック占有率knkshareを「2」だけ増加する。すなわち、ノック占有率knkshareの増加量が大きくされる。
S250にて、エンジンECU200は、前回、ノック占有率knkshareに基づいて判定値Jを補正してからの点火サイクルの回数が、予め定められた回数以上であるか否かを判定する。前回、ノック占有率knkshareに基づいて判定値Jを補正してからの点火サイクルの回数が、予め定められた回数以上であると(S250にてYES)、処理はS252に移される。もしそうでないと(S250にてNO)、処理は終了する。
S252にて、エンジンECU200は、ノック占有率knkshareに応じて判定値Jを補正する。ノック占有率knkshareがしきい値knkshare0以上である場合、予め定められた補正量A1だけ小さくなるように、判定値Jが補正される。ノック占有率knkshareがしきい値knkshare0よりも小さい場合、予め定められた補正量A2だけ大きくなるように判定値Jが補正される。
なお、S100〜S252の処理を行なう順序は、図16および図17に示す順序に限らない。S100〜S240の処理を、図16および図17に示す順序とは異なる順序で実行するようにしてもよい。
以上のような構造およびフローチャートに基づく、本実施の形態におけるエンジンECU200の動作について説明する。
エンジン100の運転中、クランクポジションセンサ306から送信された信号に基づいて、クランク角が検出される(S100)。ノックセンサ300から送信された信号に基づいて、クランク角に対応させて、エンジン100の振動の強度が検出される(S102)。ノックセンサ300の出力電圧値をクランク角で5度ごとに積算した5度積算値を算出することにより、エンジン100の振動波形が検出される(S104)。
ノックが発生したか否かを波形の形状に基づいて判定するため、ノック波形モデルを用いて相関係数Kが算出される(S106)。さらに、ノックに起因して発生した振動が振動波形に含まれるか否かを強度に基づいて判定するため、90度積算値lpkknkが算出される(S108)。90度積算値lpkknkをBGLで除算することにより、ノック強度Nが算出される(S110)。
相関係数Kがしきい値K1以上であり、かつノック強度Nが判定値J以上である場合(S120にてYES)、検出された波形の形状がノックによる波形の形状に類似しており、かつ振動の強度が大きいといえる。すなわち、ノックが発生した可能性が非常に高いといえる。この場合、エンジン100にノックが発生したと判定される(S122)。ノックを抑制するために、点火時期が遅角される(S124)。
一方、相関係数Kがしきい値K1よりも小さい場合、またはノック強度Nが判定値Jよりも小さい場合、エンジン100にノックが発生していないと判定される(S126)。この場合、点火時期が進角される(S128)。
ところで、エンジン100もしくは車両の出荷時において、ROM202に記憶される判定値J(出荷時における判定値Jの初期値)には、予め実験などにより定められる値が用いられる。ところが、ノックセンサ300の出力値のばらつきや劣化などにより、エンジン100で同じ振動が生じた場合であっても、検出される強度が変化し得る。この場合、判定値Jを補正し、実際に検出される強度に応じた判定値Jを用いてノックが発生したか否かを判定する必要がある。
そこで、本実施の形態においては、90度積算値lpkknkの頻度分布を用いて判定値Jが補正される。
判定値Jを補正するために、90度積算値lpkknkの頻度分布が作成される(S200)。その結果、中央値VMED、標準偏差SGMおよびノック判定レベルVKDが設定される。
90度積算値lpkknkがノック判定レベルVKDより大きいと(S230にてYES)、ノック占有率knkshareを「1」だけ増加される(S232)。
前回判定値Jを補正してからの点火サイクルの回数が、予め定められた回数以上であると(S250にてYES)、ノック占有率knkshareに応じて判定値Jが補正される(S252)。
ところが、ノックが頻発している状態では、図18に示すように90度積算値lpkknkの頻度分布が正規分布にはならずに、強度が大きい方向に伸びる。この場合、90度積算値lpkknkの標準偏差SGMが大きくなる。そのため、ノック判定レベルVKDが大きくなる。その結果、ノックが発生しているにもかかわらず、ノック占有率knkshareが小さくなり得る。
この場合、判定値Jが小さくなるように補正されない。そのため、点火時期の遅角が行なわれ難い状態が継続する。その結果、ノックの発生がさらに助長され得る。
そこで、本実施の形態においては、90度積算値lpkknkの標準偏差SGMがしきい値SGMREF以上である場合、すなわちノックが頻発している場合には、判定値Jが小さくなるように補正される。
エンジン100の運転状態が、判定値Jを小さくするように補正すべき運転状態であるか否かを判断するために、エンジンの運転状態が、エンジン回転数NEが予め定められた回転数よりも低く、かつ負荷KLが予め定められた負荷よりも高いという状態であるか否かを判断される(S210)。
すなわち、判定値Jを小さくするように補正すべき運転状態は、エンジン回転数NEが予め定められた回転数よりも低く、かつ負荷KLが予め定められた負荷よりも高いという状態に制限される。これにより、ノックの音が運転者に聞こえ易く、かつノックが発生し易い状態において、ノックを抑制することができる。
エンジンの運転状態が、エンジン回転数NEが予め定められた回転数よりも低く、かつ負荷KLが予め定められた負荷よりも高いという状態であると(S210にてYES)、90度積算値lpkknkの標準偏差SGMと比較されるしきい値SGMREFが、エンジン100に吸入される空気の温度に応じて補正される。
エンジン100に吸入される空気の温度に応じてノックの発生し易さが変化するので、ノックが頻発しているか否かを判定するために用いられるしきい値SGMREFがエンジン100に吸入される空気の温度に応じて補正される。より具体的には、空気の温度が高いほどしきい値SGMREFが小さくなるように補正される。これにより、ノックが発生し易い状態においては、ノックが頻発していることを速やかに検出することができる。
90度積算値lpkknkの標準偏差SGMが、しきい値SGMREF以上であると(S214にてYES)、標準偏差SGMならびにしきい値SGMREFを用いて「SGMM」が算出される(S216)。
さらに、エンジン100に吸入される空気の温度がしきい値以上であるという条件、基本点火時期からのノックによる遅角量が予め定められた量以下であるという条件ならびに判定値Jよりも高いノック強度Nが複数の点火サイクルにおいて連続して検出された回数が予め定められた回数より小さいという条件が全て満たされているか否かが判断される(S218)。
すなわち、エンジン100に吸入される空気の温度がしきい値以上であるという条件、基本点火時期からのノックによる遅角量が予め定められた量以下であるという条件ならびに判定値Jよりも高いノック強度Nが複数の点火サイクルにおいて連続して検出された回数が予め定められた回数より小さいという条件が全て満たされている場合に限って、判定値Jを小さくするように補正することが許可される。いずれかの条件が満たされていない場合、判定値Jを小さくするように補正することが禁止される。
これにより、ノックが発生し難い状態、点火時期の更なる遅角が可能である状態、ノックが発生しているにもかかわらずノックの検出ができない状態に限って、判定値Jを小さくして点火時期の遅角を行ない易くすることができる。そのため、判定値Jを小さくする必要がない状況において、不必要に判定値Jが小さくされないようにすることができる。
判定値Jを小さくするように補正するための全ての条件が満たされていると(S218にてYES)、前述した式5〜式8において、判定値Jを補正するために用いられる係数Fが、予め定められた係数以上に制限される(S220)。これにより、判定値Jの補正量を制限することができる。
その後、判定値Jが小さくなるように補正される(S222)。これにより、点火時期を遅角し易くすることができる。
上述の式5もしくは式6を用いて判定値Jを補正した場合、前述の図12に示すように、判定値Jは、90度積算値lpkknkの標準偏差SGMとしきい値SGMREFとの差に比例した補正量で小さくなるように補正される。そのため、ノックの発生回数に応じて判定値Jを補正することができる。
上述の式7を用いて判定値Jを補正した場合、前述の図13に示すように、判定値Jは、90度積算値lpkknkの標準偏差SGMとしきい値SGMREFとの二乗に応じて小さくなるように補正される。この場合、標準偏差SGMが大きい状態において、判定値Jの補正量を抑制することができる。そのため、判定値Jを誤って補正した場合における悪影響を小さくすることができる。
上述の式8を用いて判定値Jを補正した場合、前述の図14に示すように、判定値Jは、90度積算値lpkknkの標準偏差SGMとしきい値SGMREFとの差の平方根に応じて小さくなるように補正される。この場合、標準偏差SGMが小さくても判定値Jの補正量を大きくすることができる。そのため、判定値Jが適切な値に補正されるまでの収束速度を大きくすることができる。
ところで、判定値Jが小さくなりすぎると、ノックが発生していなくても点火時期が遅角され得る。そこで、判定値Jが、下限値以上に制限される(S224)。これにより、点火時期の誤遅角を抑制することができる。その結果、点火時期を精度よく制御することができる。
さらに、90度積算値lpkknkの標準偏差SGMが、しきい値SGMREF以上であり(S214にてYES)、かつ90度積算値lpkknkが、「SGMM」と係数Uとの積を中央値VMEDに加算した値よりも大きいと(S240にてYES)、ノック占有率knkshareが「2」だけ増加される(S242)。すなわち、ノック占有率knkshareの増加量が大きくされる。
これにより、予め定められた回数の点火サイクル(たとえば200点火サイクル)毎に判定値Jを補正する際に、判定値Jが小さくなるように補正し易くすることができる。そのため、判定値Jをより速やかに補正することができる。
今回開示された実施の形態は、すべての点で例示であって制限的なものではないと考えられるべきである。本発明の範囲は上記した説明ではなくて特許請求の範囲によって示され、特許請求の範囲と均等の意味および範囲内でのすべての変更が含まれることが意図される。
100 エンジン、104 インジェクタ、106 点火プラグ、110 クランクシャフト、116 吸気バルブ、118 排気バルブ、200 エンジンECU、202 ROM、300 ノックセンサ、302 水温センサ、304 タイミングロータ、306 クランクポジションセンサ、308 スロットル開度センサ、310 車速センサ、312 イグニッションスイッチ、314 エアフローメータ、320 補機バッテリ、400 A/D変換部、410 バンドパスフィルタ、420 積算部、500 点火時期設定部、600 クランク角検出部、602 強度検出部、604 波形検出部、606 相関係数算出部、608 90度積算値算出部、610 算出部、612 判定部、614 点火時期制御部、700 判定値設定部、702 頻度分布作成部、710 第1補正部、711 第1制限部、712 第2制限部、720 第2補正部、730 第3補正部、732 カウント部、734 増大部。