本発明に係るエンジンの燃料噴射制御装置について、好適な実施の形態を掲げ、添付の図面を参照しながら以下、詳細に説明する。
図1は、実施の形態のエンジン10の燃料噴射制御装置12の構成を示すブロック図である。自動二輪車等の車両に搭載されるエンジン10のシリンダボア14には、ピストン16が摺動可能に嵌合されている。エンジン10のシリンダヘッド18には、燃焼室20に混合気を供給する吸気管22と、燃焼室20からの排気ガスを排出する排気管24とが接続されている。排気管24には、触媒コンバータ26が取り付けられている。シリンダヘッド18には、その先端が燃焼室20に突出する点火プラグ28、吸気バルブ30、及び排気バルブ32が取り付けられている。
吸気管22には、吸気量を制御するスロットルバルブ34が開閉可能に配設されると共に、スロットルバルブ34の上流側と下流側とを接続するバイパス通路36が設けられている。このバイパス通路36には、バイパス通路36を開閉することで、バイパス通路36を通る空気量を調整するエアスクリュー38が設けられている。このエアスクリュー38を運転者が調整することで、アイドリング(アイドル)回転数の調整が行われる。スロットルバルブ34の下流側には、燃料を噴射する燃料噴射弁40が設けられている。
制御部42は、点火プラグ28の点火タイミング、及び燃料噴射弁40から噴射される燃料噴射量等を制御する。エンジン10の燃料噴射制御装置12は、更に、スロットルバルブ34の開度(以下、スロットル開度)THを検出するスロットル開度センサ44と、ピストン16に連接されたエンジン10のクランク軸10aの回転数(以下、エンジン回転数)NEを検出するエンジン回転数センサ46と、エンジン10の冷却水の水温TWを検出する水温センサ48と、触媒コンバータ26より上流側に設けられ排気ガスに残存する酸素濃度を検出する酸素センサ50と、燃焼室20に吸気される吸気温TAを検出する吸気温センサ52とを備える。このスロットル開度センサ44、エンジン回転数センサ46、水温センサ48、酸素センサ50、及び吸気温センサ52のそれぞれの出力信号は制御部42に入力される。
図2は、エンジン10の運転領域を検索するためのマップである。制御部42は、エンジン回転数NEとスロットル開度THとに基づいて運転領域がどの領域にあるかを検索する。このマップでは、下限スロットル開度THO2L及び上限スロットル開度THO2Hと、この両スロットル開度間の複数のスロットル開度THFB0、THFB1、THFB2、THFB3とが、エンジン回転数NEの増大に応じて大きくなる。これらのスロットル開度は、THO2L<THFB0<THFB1<THFB2<THFB3<THO2H、の関係が成り立つように予め設定されている。
設定された各スロットル開度THO2L、THFB0、THFB1、THFB2、THFB3、THO2Hを示す実線は、それぞれスロットル開度THを増大させる際に適用される境界値であり、この実線に隣接する破線は、それぞれスロットル開度を減少させる際に適用される境界値であり、ヒステリシスを設けて設定されている。
図3は、空燃比のフィードバック領域を示すマップである。斜線で示す空燃比のフィードバック(O2フィードバック、O2F/B)領域は、下限回転数NLOP、アイドル領域上限回転数NTHO2L、及び上限回転数NHOPと、下限スロットル開度THO2L及び上限スロットル開度THO2Hとで定まる領域である。下限回転数NLOP、アイドル領域上限回転数NTHO2L、及び上限回転数NHOPは、エンジン回転数NEの増大側での値が実線で示され、エンジン回転数NEの減少側での値が破線で示されることでヒステリシスが設定されている。下限スロットル開度THO2L及び上限スロットル開度THO2Hは、スロットル開度THの増大側での値が実線で示され、スロットル開度THの減少側での値が破線で示されることでヒステリシスが設定されている。
図4は、図2及び図3で定められる領域を重ねることで6つに区分けされたO2フィードバック領域の各フィードバック領域Aを示すKBUマップ64であり、図5は、図4に示すKBUマップ64の模式図である。この複数のフィードバック領域Aは、O2フィードバック領域を図2の運転領域(スロットル開度TH及びエンジン回転数NE)に応じて6つに区分したものである。この図4では、エンジン回転数NE及びスロットル開度THに基づいて、複数のフィードバック領域Aを含む複数の運転領域が設定される。本実施の形態では、6つのフィードバック領域Aの運転領域が「1」〜「6」の番号を付されて示され、フィードバック領域以外の運転領域が「0」、「7」〜「11」の番号を付して示される。
図5において、「1」のフィードバック領域A(以下、第1フィードバック領域A1)は、エンジン10のアイドリング領域である。図5において、「2」のフィードバック領域A(以下、第2フィードバック領域A2)は、第1フィードバック領域A1にエンジン回転数NEが高回転側で隣接するフィードバック領域Aである。図5において、「3」のフィードバック領域A(以下、第3フィードバック領域A3)は、第1フィードバック領域A1及び第2フィードバック領域A2にスロットル開度THの高開度側で隣接するフィードバック領域Aである。図5において、「4」のフィードバック領域A(以下、第4フィードバック領域A4)は、第3フィードバック領域A3にスロットル開度THの高開度側で隣接するフィードバック領域Aである。図5において、「5」のフィードバック領域A(以下、第5フィードバック領域A5)は、第4フィードバック領域A4にスロットル開度THの高開度側で隣接するフィードバック領域Aである。図5において、「6」のフィードバック領域A(以下、第6フィードバック領域A6)は、第5フィードバック領域A5にスロットル開度THの高開度側で隣接するフィードバック領域Aである。第2フィードバック領域A2及び第3フィードバック領域A3は、スロットル開度THが低開度のフィードバック領域であり、第4フィードバック領域A4〜第6フィードバック領域A6は、スロットル開度THが中開度以上のフィードバック領域である。
図6は、制御部42の構成を示すブロック図である。制御部42は、基本噴射量算出部60、O2フィードバック部62、図4及び図5に示すKBUマップ64、揮発性メモリ66、不揮発性メモリ67、燃料噴射量算出部68、調整検出部70、及び補正値算出部72を備える。
基本噴射量算出部60は、噴射量マップ80を有する。噴射量マップ80には、スロットル開度THとエンジン回転数NEに応じた基本噴射量TIMBが記憶されている3次元マップである。この基本噴射量TIMBは、理想空燃比が得られるように、シミュレーション又は実験等によって予め設定されている。
図7は、噴射量マップ80の一例を示す図である。図7においては、エンジン回転数NEが所定回数の時の基本噴射量TIMBを示している。図7に示すように、スロットル開度THが大きくなるほど、基本噴射量TIMBも増加する。
基本噴射量算出部60は、スロットル開度センサ44が検出したスロットル開度TH及びエンジン回転数センサ46が検出したエンジン回転数NEに応じた基本噴射量TIMBを噴射量マップ80から取得することで、基本噴射量TIMBを算出する。この基本噴射量TIMBは燃料噴射弁40が開いている時間で表すことができる。
O2フィードバック部62は、空燃比を理想空燃比(ストイキ)に近づけるような補正係数を算出する。O2フィードバック部62は、リッチリーン判定部82と係数算出部84とを有する。リッチリーン判定部82は、酸素センサ50の出力信号に基づいて排気ガスのリッチ又はリーンを判定する。
係数算出部84は、フィードバック補正量算出部84aと、学習値算出部84bとを有する。フィードバック補正量算出部84aは、リッチリーン判定部82の判定結果に基づいてフィードバック補正量KO2及びその平均値KO2aveを算出する。学習値算出部84bは、フィードバック補正量KO2に応じて学習した学習値KBUを算出すると共に、その平均値KBUaveを算出する。本実施の形態では、学習値算出部84bは、平均値KO2aveの基準値に対する変動分を乗算した学習値KBUを算出する。この算出されたフィードバック補正量KO2及びその平均値KO2aveと、学習値KBU及びその平均値KBUaveと、後述するスロットル開度補正値ΔTHASとは、揮発性メモリ66に記憶される。不揮発性メモリ67には、エンジン10の暖機後の学習値KBU1〜KBU6と、エンジン停止時のスロットル開度補正値ΔTHASとが記憶される。
このフィードバック補正量KO2及び学習値KBUは、O2フィードバック制御を行なう際に使用される補正係数であり、空燃比を理想空燃比(ストイキ)に近づけるためのものである。学習値算出部84bは、スロットル開度TH及びエンジン回転数NEに基づいて、複数のフィードバック領域A毎に学習値KBUを算出する。
揮発性メモリ66は、図8に示すように、フィードバック補正量KO2が記憶されるKO2記憶部90と、フィードバック補正量KO2の平均値KO2aveが記憶されるKO2平均値記憶部92とを有する。また、揮発性メモリ66は、第1フィードバック領域A1〜第6フィードバック領域A6の学習値KBU(以下、学習値KBU1〜KBU6)を記憶するKBU1記憶部94、KBU2記憶部96、KBU3記憶部98、KBU4記憶部100、KBU5記憶部102、及びKBU6記憶部104を有する。
また、揮発性メモリ66は、第1フィードバック領域A1〜第6フィードバック領域A6の学習値KBUの平均値KBUave(平均値KBUave1〜KBUave6)を記憶するKBU1平均値記憶部106、KBU2平均値記憶部108、KBU3平均値記憶部110、KBU4平均値記憶部112、KBU5平均値記憶部114、及びKBU6平均値記憶部116を有する。この上記各記憶部(90〜116)には、最新の値のみが記憶されている。
フィードバック補正量算出部84aは、リッチリーン判定部82の判定結果が切り換わった場合(例えば、リッチからリーンになった時、リーンからリッチになった時)に、フィードバック補正量KO2を算出する。フィードバック補正量算出部84aは、算出したフィードバック補正量KO2を揮発性メモリ66のKO2記憶部90に上書きして記憶することで、フィードバック補正量KO2を更新する。
また、フィードバック補正量算出部84aは、毎フィードバック補正量KO2の算出サイクルにて所定回数前までに算出したフィードバック補正量KO2(例えば、今回と前回と前々回の計過去3回分のフィードバック補正量KO2)の平均値KO2aveを算出する。フィードバック補正量算出部84aは、算出した平均値KO2aveを揮発性メモリ66のKO2平均値記憶部92に上書きして記憶することで、フィードバック補正量KO2の算出の度に平均値KO2aveを更新する。
学習値算出部84bは、リッチリーン判定部82の判定結果が切り換わった時に、KBUマップ64を用いて、運転領域(スロットル開度センサ44及びエンジン回転数センサ46が検出したスロットル開度TH及びエンジン回転数NE)に応じたその時点におけるフィードバック領域Aを参照し、参照したフィードバック領域Aの学習値KBU(学習値KBU1〜KBU6の何れか1つ)を算出して更新する。
この学習値KBUの算出は、KO2平均値記憶部92に記憶されている平均値KO2aveの基準値に対する変動分(平均値KO2ave/基準値)と、現在の運転領域に応じたフィードバック領域Aの現在の学習値KBUとを乗算することで新たな学習値KBUを算出する。学習値算出部84bは、この算出された学習値KBUを揮発性メモリ66に記憶することで、フィードバック補正量KO2の算出の度にその時点における運転領域に応じたフィードバック領域Aの学習値KBUを更新する。
例えば、現在の運転領域に応じたフィードバック領域Aが第1フィードバック領域A1の場合は、学習値算出部84bは、KO2平均値記憶部92に記憶されている平均値KO2aveの基準値に対する変動分(平均値KO2ave/基準値)と、KBU1記憶部94に記憶されている学習値KBU1とを乗算して新たな学習値KBU1を算出し、KBU1記憶部94に上書きして記憶する。
また、学習値算出部84bは、現在の運転領域に応じたフィードバック領域Aの学習値KBUを算出すると、現在の運転領域に応じたフィードバック領域Aの学習値KBUの平均値KBUaveを新たに算出する。この平均値KBUaveは、所定回数前までに算出した学習値KBU(例えば、今回と4回前までの計過去5回分の学習値)の平均値を算出することで求めることができる。学習値算出部84bは、算出した平均値KBUaveを揮発性メモリ66に記憶することで、学習値KBUの算出の度にその時点における運転領域に応じたフィードバック領域Aの該平均値KBUaveを更新する。
例えば、現在の運転領域に応じたフィードバック領域Aが第1フィードバック領域A1の場合は、学習値算出部84bは、第1フィードバック領域A1の過去所定回数分の学習値KBU1の平均値KBUave1を算出し、KBU1平均値記憶部106に該算出した平均値KBUave1を記憶する。
燃料噴射量算出部68は、燃料噴射弁40から噴射される燃料噴射量TOUTを算出する。詳しくは、燃料噴射量算出部68は、O2フィードバック制御を行なっている場合は、TOUT=TIMB×KO2×KBU×KTA、の(1)式によって、燃料噴射量TOUTを算出する。
ここで、(1)式のTIMBは、基本噴射量算出部60が現在のスロットル開度TH及びエンジン回転数NEに応じて算出した基本噴射量TIMBであり、KO2は、KO2記憶部90に記憶されているフィードバック補正量KO2である。また、(1)式のKBUは、現在のスロットル開度TH及びエンジン回転数NEに応じたフィードバック領域Aの学習値KBUであり、揮発性メモリ66に記憶されているものである。例えば、現在の運転領域に応じたフィードバック領域Aが第3フィードバック領域A3の場合は、KBU3記憶部98に記憶されている学習値KBU3である。(1)式のKTAは、吸気温センサ52が検出した吸気温TAに応じた吸気温補正係数KTAである。この吸気温補正係数KTAは、図示しないテーブル又はマップから取得する。
燃料噴射量算出部68は、O2フィードバック制御を行なうことができない加速運転時の場合(オープンループ制御の場合)は、TOUT=TIMB×KBUave×KTA+TACC×KTACC、の(2)式によって、燃料噴射量TOUTを算出する。(2)式のTIMB及びKTAは、(1)式と同様であり、(2)式のKBUaveは、現在の現在の運転領域に応じたフィードバック領域Aの学習値KBUの平均値KBUaveである。(2)式のTACCは、現在のスロットル開度THとエンジン回転数NEに応じた加速補正での追加噴射量TACCである。この追加噴射量TACCは、図示しないマップから取得する。また、(2)式のKTACCは、加速補正係数KTACCである。なお、(2)式は、オープンループ制御の一種としての加速運転時の燃料噴射量TOUTの算出式である。
O2フィードバック制御を行なうことができないオープンループ制御の場合は、フィードバック補正量KO2及びその平均値KO2aveと、学習値KBU及びその平均値KBUaveとが逐次更新されないので、オープンループ制御に入る直前のKBUaveがそのまま使用されることになる。
この燃料噴射量TOUTは燃料噴射弁40が開いている時間で表すことができ、算出された燃料噴射量TOUTの間燃料噴射弁40が開くことで、燃料噴射弁40から燃料が噴射される。
図9は、ベース値Eと、バイパス通路36を通る空気量を減少させる(バイパス通路36を閉じる)ようにエアスクリュー38が初期位置からずれた時の学習値KBUとの関係を示す図である。なお、ベース値Eは、エアスクリュー38が初期位置にある時を基準とした時の学習値KBUである。図9に示すように運転者によってエアスクリュー38が初期位置から閉じ側に調整されると、スロットル開度THが大きい第4フィードバック領域A4〜第6フィードバック領域A6の学習値KBU4〜KBU6は、ベース値Eとの差があまり生じない。
しかし、スロットル開度THが小さい第1フィードバック領域A1〜第3フィードバック領域A3の学習値KBU1〜KBU3では、スロットル開度THが小さくになるにつれベース値Eとの差が大きくなってしまう。特に、スロットル開度THが全閉若しくは全閉に近い学習値KBU1で最もその影響は大きい。これは、スロットルバルブ34が閉じるほど、吸気管22内の流路抵抗が大きくなり、バイパス通路36の流路抵抗が相対的に小さくなることがその理由として考えられる。スロットルバルブ34が中開度以上開いてくると、吸気管22の流路抵抗は下がり、バイパス通路36の流路抵抗が相対的に大きくなるため、学習値KBUはベース値Eと略同じ値にある。
図10は、バイパス通路36を通る空気量を減少させるようにエアスクリュー38が初期位置から閉じ側にずれた時のベース値EとO2フィードバック制御によって更新される学習値KBU2との関係を示す図である。図10に示すように、同じ第2フィードバック領域内の学習値KBU2であっても、スロットル開度THが低開度側の学習値KBU2と、スロットル開度THが高開度側の学習値KBU2とで大きな差が生じてしまう。なお、これに伴い、スロットル開度THが低開度側で算出された平均値KBUave2と高開度側で算出された平均値KBUave2とでも大きな差が生じる。
しかしながら、O2フィードバック制御を行なっている最中は、前述したようにフィードバック補正量KO2の算出の度に、フィードバック補正量KO2及びその平均値KO2aveと、学習値KBU及びその平均値KBUaveとが逐次更新されていくので、エアスクリュー38の調整によって同じ第2フィードバック領域A2の学習値KBUに差異が生じても、上記(1)式によって算出される燃料噴射量TOUTに与える影響は少ない。
これに対して、オープンループ制御の場合は、フィードバック補正量KO2及びその平均値KO2aveと、学習値KBU及びその平均値KBUaveが更新されていかないので、エアスクリュー38の調整による学習値KBUの差異が燃料噴射量TOUTに与える影響が大きくなる。
図11は、バイパス通路36を通る空気量を減少させるようにエアスクリュー38が初期位置から閉じ側にずれた時のオープンループ制御中のベース値Eと学習値KBU2との関係を示す図である。オープンループ制御の場合は、上記(2)式のように、オープンループ制御に入る直前に揮発性メモリ66に更新された学習値KBUの平均値KBUaveを用いる。そのため、例えば、KBU2平均値記憶部108に記憶されている平均値KBUave2が低開度側で算出されたものである場合に(図11の黒丸)、現在のスロットル開度THが、第2フィードバック領域内の高開度側になると(図11の白丸)、KBU2平均値記憶部108に記憶されている平均値KBUave2とのズレが大きくなる。従って、適切な燃料噴射量TOUTで燃料を噴射することができない場合が生じる。なお、このことは、学習値KBU3及びその平均値KBUave3についても同様の問題が生じる。
そこで、本実施の形態では、エアスクリュー38が調整されたことを検出し、エアスクリューが調整された場合は、該調整量に応じてスロットル開度THを補正するというものである。
図6の調整検出部70は、エアスクリュー38が調整されて初期位置からずれているか否かを検出する。詳しくは、揮発性メモリ66のKBU1平均値記憶部106に記憶されている平均値KBUave1とKBU4平均値記憶部112に記憶されている平均値KBUave4との差(KBUave1−KBUave4)の絶対値が閾値を超えた場合に、エアスクリュー38が調整されて初期位置からずれたと検出する。調整検出部70は、現在のスロットル開度TH及びエンジン回転数NEに応じたフィードバック領域Aが第1フィードバック領域A1の場合に、エアスクリュー38が調整されたか否かを検出する。
調整検出部70は、エアスクリュー38が調整されたことを検出した場合は調整フラグを1にし、エアスクリュー38が調整されていないことを検出した場合は、調整フラグを0にする。この調整フラグは、揮発性メモリ66の調整フラグ記憶部118に記憶される。なお、調整検出部70は、平均値KBUave1と平均値KBUave5との差(KBUave1−KBUave5)の絶対値が閾値を超えた場合に、エアスクリュー38が調整されたと検出してもよい。
ここで、平均値KBUave1と平均値KBUave4又は平均値KBUave5との差分を取る理由について説明する。平均値KBUave1は、エアスクリュー38の調整によって値が大きく変動するので、前回算出した平均値KBUave1と今回算出した平均値KBUave1との差分を取ることで、エアスクリュー38が調整されたと検出することも可能ではある。しかしながら、この手法では、正確にエアスクリュー38が調整されたか否かを精度良く検出することはできない。なぜならば、外気温、大気圧等の環境変化に応じても、学習値KBUが変動し、その結果、平均値KBUaveも変動してしまうからである。例えば、図12に示すように、高地に上がることによって気圧が低下すると、学習値KBUが低下し、それに伴い平均値KBUaveも低下する。
ここで、出願人は、研究の結果エアスクリュー38の調整を行うと、低開度側のフィードバック領域Aほど学習値KBUが変化するが、環境変化では全フィードバック領域Aで同じような学習値KBUの変化が生じることを発見した。そして、平均値KBUave1−平均値KBUave4(又は平均値KBUave5)を見ることで、精度よくエアスクリュー38の調整を検出する手法を発明した。即ち、仮に大気圧の変化等による環境変化であれば、平均値KBUave1、KBUave4、KBUave5は、皆同じように変化するため、平均値KBUave1−平均値KBUave4(又は平均値KBUave5)の値は、それほど大きな値にはならない。一方で、エアスクリュー38が調整された場合は、平均値KBUave1は大きく変化するが、平均値KBUave4、KBUave5は殆ど変化しないため、KBUave1−平均値KBUave4(又は平均値KBUave5)は大きな値を取る。
従って、環境変化及びエアスクリュー38の調整によって変動する平均値KBUave1と、環境変化によって変動しエアスクリュー38の調整によってあまり変動しない平均値KBUave4又は平均値KBUave5との差分を取ることで、エアスクリュー38が調整されたか否かを精度良く検出することができる。
調整検出部70は、エアスクリュー38が調整されて初期位置からずれたと検出すると、エアスクリュー38の調整量(以下、アイドル吸気量変化率)を検出する。調整検出部70は、図13に示すような調整量マップ70aを有する。調整量マップ70aは、図13の実線で示すように、(KBUave1−KBUave4)とアイドル吸気量変化率とが対応付けて記憶されている。調整検出部70は、該調整量マップ70aを用いて、算出した平均値KBUave1と平均値KBUave4との差に応じたアイドル吸気量変化率を検出する。このアイドル吸気量変化率は、エアスクリュー38が初期位置の時にバイパス通路36を通る吸気量に対する変化率である。
なお、調整量マップ70aは、図13の破線に示すように、(KBUave1−KBUave5)とアイドル吸気量変化率とが対応付けて記憶されたものであってもよい。この場合は、調整検出部70は、算出した平均値KBUave1と平均値KBUave5との差に応じたアイドル吸気量変化率を検出する。
また、上述したようにエアスクリュー38が調整された場合も、学習値KBU6とベース値Eとの差があまり生じないので、平均値KBUave1と平均値KBUave6との差を取って、エアスクリュー38が調整されたか否かの検出及びエアスクリュー38の調整量の検出を行うようにしてもよい。しかし、学習値KBU6及びその平均値KBUave6は、スロットル開度THが比較的高開度側なので、第6フィードバック領域A6となるスロットル開度THまでスロットルバルブ34が開かれる可能性が少ないと考えられる。そうすると、学習値KBU6及びその平均値KBUave6が更新される頻度は少なくなる。そのため、本実施の形態では、比較的頻繁に更新されやすい平均値KBUave4又は平均値KBUave5を用いることとした。
補正値算出部72は、図14に示すような、アイドル吸気量変化率とスロットル開度補正値ΔTHASとが対応付けて記憶された補正値テーブル72aを有する。補正値算出部72は、調整検出部70が検出したアイドル吸気量変化率に応じたスロットル開度補正値ΔTHASを補正値テーブル72aから取得することで、スロットル開度補正値ΔTHASを算出する。補正値算出部72は、算出したスロットル開度補正値ΔTHASを揮発性メモリ66の補正値記憶部120に上書きして記憶する。なお、調整検出部70により、エアスクリュー38が調整されていないと検出された場合は、補正値算出部72は、補正値記憶部120に記憶されているスロットル開度補正値ΔTHASを0にする。
基本噴射量算出部60は、調整フラグが1であり、且つ、現在のスロットル開度TH及びエンジン回転数NEに応じたフィードバック領域Aが第2フィードバック領域A2又は第3フィードバック領域A3であると判断すると、該スロットル開度補正値ΔTHASを用いてスロットル開度THを補正する。詳しくは、スロットル開度センサ44が検出したスロットル開度THに、スロットル開度補正値ΔTHASを加算することでスロットル開度THを補正する。そして、基本噴射量算出部60は、噴射量マップ80を用いて、補正したスロットル開度TH(以下、THM)とエンジン回転数NEに応じた基本噴射量TIMBを算出する。
このように、エアスクリュー38が調整されるとスロットル開度THを補正し、補正後のスロットル開度THMを用いて基本噴射量TIMBを算出するので、O2フィードバック制御によって更新される学習値KBU2及び学習値KBU3は、スロットル開度THを補正しない場合に比べ、ベース値Eとの差が小さくなる。
図15は、バイパス通路36を通る空気量を減少させるようにエアスクリュー38が初期位置から閉じ側にずれた時のオープンループ制御中にスロットル開度THを補正した場合の学習値KBU2とベース値Eとの関係を示す図である。図15に示すように、KBU2記憶部96に記憶された学習値KBU2が低開度側のスロットル開度THで算出されたものであっても(図15の黒丸)、KBU2記憶部96に記憶された学習値KBU2とスロットル開度が高開度側の学習値KBU2との差は、スロットル開度THを補正しない場合に比べて(図11と比べて)小さくなる。従って、これにより、KBU2平均値記憶部108に記憶された平均値KBUave2が低開度側のスロットル開度THで算出されたものであっても、KBU2平均値記憶部108に記憶された平均値KBUave2と高開度側での平均値KBUave2との差を小さくすることができ、より適切な燃料噴射量TOUTで燃料を噴射することができる。
スロットル開度補正値ΔTHASの算出動作を、図16のフローチャートに従って説明する。この図16に示す動作は、毎フィードバック補正量KO2の算出サイクル時実行される。調整検出部70は、スロットル開度センサ44及びエンジン回転数センサ46が検出した現在のスロットル開度TH及びエンジン回転数NEに応じたフィードバック領域Aが第1フィードバック領域A1であるか否かを判断する(ステップS1)。
ステップS1で、現在のスロットル開度TH及びエンジン回転数NEに応じたフィードバック領域Aが第1フィードバック領域A1でないと判断すると、処理を終了する。一方、ステップS1で、現在のスロットル開度TH及びエンジン回転数NEに応じたフィードバック領域Aが第1フィードバック領域A1であると判断すると、調整検出部70は、KBU1平均値記憶部106に記憶されている平均値KBUave1と、KBU4平均値記憶部112に記憶されている平均値KBUave4との差の絶対値が閾値を超えているか否かを判断する(ステップS2)。
ステップS2で、平均値KBUave1と平均値KBUave4との差の絶対値が閾値を超えていると判断すると、調整検出部70は、エアスクリュー38が調整されたことを検出し、調整フラグを1にする(ステップS3)。つまり、調整フラグ記憶部118に1を記憶する。
次いで、補正値算出部72は、スロットル開度補正値ΔTHASを算出し、算出したスロットル開度補正値ΔTHASを揮発性メモリ66の補正値記憶部120に記憶する(ステップS4)。詳しくは、調整検出部70は、調整量マップ70aを用いて平均値KBUave1と平均値KBUave4との差に応じた調整量であるアイドル吸気量変化率を検出する。そして、補正値算出部72は、補正値テーブル72aを用いて検出されたアイドル吸気量変化率に応じたスロットル開度補正値ΔTHASを算出する。
一方、ステップS2で、平均値KBUave1と平均値KBUave4との差の絶対値が閾値を超えていないと判断すると、調整検出部70は、エアスクリュー38が調整されていないことを検出し、調整フラグを0にする(ステップS5)。つまり、調整フラグ記憶部118に0を記憶する。次いで、補正値算出部72は、スロットル開度補正値ΔTHASを0にして、揮発性メモリ66の補正値記憶部120に記憶する(ステップS6)。
基本噴射量算出部60の基本噴射量TIMBの算出動作を図17のフローチャートに従って説明する。基本噴射量算出部60は、基本噴射量を算出する際には、まず、スロットル開度センサ44及びエンジン回転数センサ46が検出した現在のスロットル開度TH及びエンジン回転数NEに応じたフィードバック領域Aが第2フィードバック領域A2又は第3フィードバック領域A3であるか否かを判断する(ステップS11)。
ステップS11で、現在のスロットル開度TH及びエンジン回転数NEに応じたフィードバック領域Aが第2フィードバック領域A2又は第3フィードバック領域A3であると判断すると、基本噴射量算出部60は、調整フラグが1であるか否かを判断する(ステップS12)。この判断は、調整フラグ記憶部118に記憶されている値に基づいて判断する。
ステップS12で、調整フラグが1であると判断すると、基本噴射量算出部60は、スロットル開度センサ44によって検出されたスロットル開度THを補正する(ステップS13)。詳しくは、検出されたスロットル開度THに、補正値記憶部120に記憶されているスロットル開度補正値ΔTHASを加算することで、スロットル開度THを補正する。
次いで、基本噴射量算出部60は、噴射量マップ80を用いて補正後のスロットル開度THMとエンジン回転数センサ46が検出した現在のエンジン回転数NEに応じた基本噴射量TIMBを算出する(ステップS14)。
一方、ステップS11で、現在のスロットル開度TH及びエンジン回転数NEに応じたフィードバック領域Aが第2フィードバック領域A2及び第3フィードバック領域A3でないと判断された場合、又は、ステップS12で調整フラグが1でないと判断された場合は、ステップS15に進む。
ステップS15に進むと、基本噴射量算出部60は、噴射量マップ80を用いてスロットル開度センサ44及びエンジン回転数センサ46が検出した現在のスロットル開度TH及びエンジン回転数NEに応じた基本噴射量TIMBを算出する。
次に、制御部42のメイン動作を図18のフローチャートに従って説明する。まず、制御部42は、スロットル開度センサ44が検出したスロットル開度THの角速度dTH/dtが所定値より大きいか否かを判断する(ステップS21)。つまり、ステップS21では、スロットル開度THの単位時間当たりの変化量が所定値より大きいか否かを判断している。
この角速度dTH/dtは、スロットル開度THを時間tで微分することで求めてもよいし、(TH1−TH0)/(t1−t0)、の計算式で求めてもよい。このTH1は、今回検出したスロットル開度THを表し、TH0は、前回検出したスロットル開度THを表している。t1は、スロットル開度TH1を検出したタイミングを表し、t0は、スロットル開度TH0を検出したタイミングを表している。
ステップS21で、スロットル開度THの角速度dTH/dtが所定値より大きくないと判断すると、制御部42は、O2F/B制御を実行することで、燃料噴射量TOUTを算出する(ステップS22)。燃料噴射弁40は、この算出された燃料噴射量TOUTで燃料を噴射する。
具体的には、燃料噴射量算出部68は、スロットル開度センサ44及びエンジン回転数センサ46が検出した現在の運転領域(スロットル開度TH及びエンジン回転数NE)に応じたフィードバック領域Aの学習値KBUと、フィードバック補正量KO2とを揮発性メモリ66から取得する。そして、燃料噴射量算出部68は、図17の動作に従って基本噴射量算出部60が算出した基本噴射量TIMBに、取得したフィードバック補正量KO2及び学習値KBUと、吸気温センサ52が検出した吸気温TAに応じた吸気温補正係数KTAとを乗算することで、燃料噴射量TOUTを算出する。つまり、上述した(1)式を用いて算出する。
係数算出部84は、このO2F/B制御中に、フィードバック補正量KO2及びその平均値KO2aveと、学習値KBU及びその平均値KBUaveとを逐次更新し、揮発性メモリ66に記憶する。係数算出部84は、現在のスロットル開度TH及びエンジン回転数NEに応じたフィードバック領域A(A1〜A6)の学習値KBU(KBU1〜KBU6)及びその平均値KBUaveを更新する。
エアスクリュー38が調整された状態でのO2フィードバック制御中に、現在の運転領域が第2フィードバック領域A2又は第3フィードバック領域A3にある時は、スロットル開度THが補正される。従って、スロットル開度THが低開度側と高開度側での差が小さい学習値KBU2、KBU3、及びその平均値KBUave2、KBUave3が更新されることになる。
一方、ステップS21で、スロットル開度THの角速度dTH/dtが所定値より大きいと判断すると、加速補正噴射制御を行なって燃料噴射量TOUTを算出する(ステップS23)。
具体的には、燃料噴射量算出部68は、スロットル開度センサ44及びエンジン回転数センサ46が検出した現在のスロットル開度TH及びエンジン回転数NEに応じたフィードバック領域Aの平均値KBUaveを揮発性メモリ66から取得する。そして、燃料噴射量算出部68は、図17の動作に従って基本噴射量算出部60が算出した基本噴射量TIMBに、取得した平均値KBUaveと、吸気温センサ52が検出した吸気温TAに応じた吸気温補正係数KTAとを乗算する。そして、乗算して得られた値に、現在のスロットル開度THとエンジン回転数NEに応じた加速補正での追加噴射量TACCと加速補正係数KTACCとを乗算した値を加算することで、燃料噴射量TOUTを算出する。つまり、上述した(2)式を用いて算出する。
揮発性メモリ66に記憶されている平均値KBUave2、KBUave3は、スロットル開度THが低開度側と高開度側での差が小さい値となっているので、O2フィードバック制御が実行されないオープンループ制御の場合であっても適切な燃料噴射量TOUTを算出することができる。また、運転領域が第2フィードバック領域A2又は第3フィードバック領域A3にある時は、スロットル開度THを補正して基本噴射量TIMBが算出されるので、より適切な燃料噴射量TOUTを算出することができる。
なお、上記実施の形態では、フィードバック補正量KO2の平均値KO2aveの基準値に対する変動分を乗算した学習値KBUを算出するようにしたが、フィードバック補正量KO2の基準値に対する変動分を乗算した学習値KBUを算出するようにしてもよい。
また、上記実施の形態では、第1フィードバック領域A1の平均値KBUave1と、第4フィードバック領域A4の平均値KBUave4又は第5フィードバック領域A5の平均値KBUave5との差の絶対値に基づいてエアスクリュー38が調整されたか否かを検出するようにしたが、第1フィードバック領域A1の学習値KBU1と、第4フィードバック領域A4の学習値KBU4又は第5フィードバック領域A5の学習値KBU5との差の絶対値に基づいてエアスクリュー38が調整されたか否かを検出してもよい。
また、上記実施の形態では、第1フィードバック領域A1の平均値KBUave1と、第4フィードバック領域A4の平均値KBUave4又は第5フィードバック領域A5の平均値KBUave5との差に応じてアイドル吸気量変化率を検出するようにしたが、第1フィードバック領域A1の学習値KBU1と、第4フィードバック領域A4の学習値KBU4又は第5フィードバック領域A5の学習値KBU5との差に応じてアイドル吸気量変化率を検出してもよい。
つまり、上記実施の形態では、平均値KO2ave、KBUaveを算出して、該平均値KO2ave、KBUaveを用いるようにしたが、該平均値KO2ave、KBUaveを算出せずに、平均値KO2ave、KBUaveの代わりにフィードバック補正量KO2、学習値KBUを用いてもよい。
エアスクリュー38によって調整されるバイパス通路36を通過する吸気は、スロットル開度THが低開度であるほどバイパス通路36を流れるので、学習値KBUが低開度側であるほどエアスクリュー38の調整による学習値KBUのずれが生じやすい。出願人は、研究の結果、スロットル開度THが高開度側になると吸気はバイパス通路36を通らずに吸気管22を通過するようになるため、高開度側の学習値KBUはエアスクリュー38の調整による影響を受けにくいことを発見した。従って、本実施の形態ではこの性質を生かし、スロットル開度THが低開度側のフィードバック領域Aの学習値KBUと、スロットル開度THが高開度側のフィードバック領域Aの学習値KBUとの差の絶対値が閾値を超えた場合は、エアスクリュー38が調整されたと検出するので、エアスクリュー38の調整を精度良く、簡易な構造で検出することができる。
アイドル時は、スロットル開度THが全閉のため、エアスクリュー38の調整よる学習値KBUのずれが顕著にでる。しかも、エアスクリュー38の調整は、アイドリング時に行われることが多い。そのため、本実施の形態では、低開度側のフィードバック領域Aは、エンジン10のアイドリング領域である第1フィードバック領域A1であり、高開度側のフィードバック領域Aは、エアスクリュー38の調整によって学習値KBUに影響を与えない、つまり、スロットル開度THが中開度以上のフィードバック領域(A4〜A5の何れか1つ)とするので、エアスクリュー38の調整を検出し易くなり、且つ、エアスクリュー38の調整をより精度に検出することができる。
第2及び第3フィードバック領域A2、A3は、停車から発進して定常走行になるまでに通過する運転領域である。一方、第4及び第5フィードバック領域A4、A5は、定常走行に入っている可能性が高い運転領域であり、スロットル開度THが第1〜第3フィードバック領域A1〜A3よりも高いため、エアスクリュー38の調整による学習値KBUのずれの影響も出にくい領域となる。そのため、本実施の形態では、複数のフィードバック領域Aは、第1フィードバック領域A1と、第1フィードバック領域A1にエンジン回転数NEの高回転側で隣接する第2フィードバック領域A2と、第1フィードバック領域A1及び第2フィードバック領域A2にスロットル開度THの高開度側で隣接する第3フィードバック領域A3と、第3フィードバック領域A3にスロットル開度THの高開度側で隣接する第4フィードバック領域A4と、第4フィードバック領域A4にスロットル開度THの高開度側で隣接する第5フィードバック領域A5と、第5フィードバック領域A5にスロットル開度THの高開度側で隣接する第6フィードバック領域A6からなり、高開度側のフィードバック領域Aは、第4フィードバック領域A4又は第5フィードバック領域A5とするので、頻繁に学習値KBUが更新されやすいフィードバック領域Aの学習値KBUを用いることで、エアスクリュー38の調整をより精度に検出することができる。
低開度側のフィードバック領域Aの過去所定回数分の学習値KBUの平均値KBUaveと、高開度側のフィードバック領域Aの過去所定回数分の学習値KBUの平均値KBUaveとの差を用いて、エアスクリュー38が調整されたかを検出するので、学習値KBUのバラツキを抑えてエアスクリュー38が調整されたかを検出することができ、エアスクリュー38の調整の検出精度をより向上させることができる。
エアスクリュー38の調整量を検出し、エアスクリュー38の調整量に応じてスロットル開度補正値ΔTHASを算出し、該スロットル開度補正値ΔTHASを用いてスロットル開度センサ44が検出したスロットル開度THを補正して基本噴射量TIMBを算出するので、エアスクリュー38の調整による吸気量増減分に応じて吸気量と密接に関係するスロットル開度THを補正することができ、この補正されたスロットル開度THMを用いて基本噴射量TIMBを算出することができる。従って、エアスクリュー38の調整による吸気量の増減を簡易且つ精度良く補正することができ、基本噴射量TIMBの算出精度を向上させることができ、その結果、燃料噴射量TOUTの算出精度を向上させることができる。
エアスクリュー38の調整を行うと、スロットル開度THの低開度側の学習値KBUがその影響を受けやすく、高開度側の学習値KBUは比較的影響を受けにくいので、低開度側の学習値KBUと高開度側の学習値KBUとの差からエアスクリュー38の調整量を推測することができる。従って、スロットル開度THが低開度側のフィードバック領域Aの学習値KBUと、スロットル開度THが高開度側のフィードバック領域Aの学習値KBUとの差に基づいて調整量を検出するので、エアスクリュー38の調整量を簡易な構造で精度良く求めることができ、その結果、燃料噴射量TOUTの算出精度を向上させることができる。
低開度側のフィードバック領域Aのスロットル開度THより大きく、高開度側のフィードバック領域Aのスロットル開度TH以下のフィードバック領域であって、エアスクリュー38の調整によって学習値KBUに影響を与えるフィードバック領域A内でのみ、スロットル開度センサ44が検出したスロットル開度THを補正して基本噴射量TIMBを算出するので、基本噴射量TIMBの算出精度を向上させることができ、その結果、特にエアスクリュー38の調整によって影響を受けやすいスロットル開度低開度領域において、燃料噴射量TOUTの算出精度を向上させることができる。
複数のフィードバック領域Aは、エンジン10のアイドリング領域である第1フィードバック領域A1と、第1フィードバック領域A1にエンジン回転数NEが高回転側で隣接する第2フィードバック領域A2と、第1フィードバック領域A1及び第2フィードバック領域A2にスロットル開度THの高開度側で隣接する第3フィードバック領域A3と、第3フィードバック領域A3にスロットル開度THの高開度側で隣接する第4フィードバック領域A4と、第4フィードバック領域A4にスロットル開度THの高開度側で隣接する第5フィードバック領域A5と、第5フィードバック領域A5にスロットル開度THの高開度側で隣接する第6フィードバック領域A6からなり、エアスクリュー38の調整によって学習値KBUに影響を与えるフィードバック領域Aは、第2フィードバック領域A2及び第3フィードバック領域A3であるので、基本噴射量TIMBの算出精度を向上させることができ、その結果、全スロットル開度THの領域において、燃料噴射量TOUTの算出精度を向上させることができる。
算出したスロットル開度補正値ΔTHASを揮発性メモリ66に記憶するが、エンジン10の停止時にその時点で揮発性メモリ66に記憶されているスロットル開度補正値ΔTHASは、不揮発性メモリ67に記憶される。従って、次回のエンジン始動時から適切な燃料噴射量TOUTを算出することができる。
以上、本発明について好適な実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更又は改良を加えることが可能であることが当業者に明らかである。その様な変更又は改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。また、特許請求の範囲に記載された括弧書きの符号は、本発明の理解の容易化のために添付図面中の符号に倣って付したものであり、本発明がその符号をつけた要素に限定して解釈されるものではない。