以下、本発明による内燃機関の空燃比制御装置の実施形態について図面を参照しつつ説明する。
図1は、本発明の実施形態に係る空燃比制御装置を火花点火式多気筒(4気筒)内燃機関10に適用したシステムの概略構成を示している。この内燃機関10は、シリンダブロック、シリンダブロックロワーケース、及びオイルパン等を含むシリンダブロック部20と、シリンダブロック部20の上に固定されるシリンダヘッド部30と、シリンダブロック部20にガソリン混合気を供給するための吸気系統40と、シリンダブロック部20からの排気ガスを外部に放出するための排気系統50とを含んでいる。
シリンダブロック部20は、シリンダ21、ピストン22、コンロッド23、及びクランク軸24を含んでいる。このシリンダブロック部20においては、ピストン22はシリンダ21内を往復動し、ピストン22の往復動がコンロッド23を介してクランク軸24に伝達され、これにより当該クランク軸24が回転するようになっている。シリンダ21とピストン22のヘッドは、シリンダヘッド部30とともに燃焼室25を形成している。
シリンダヘッド部30は、燃焼室25に連通した吸気ポート31、吸気ポート31を開閉する吸気弁32、吸気弁32を駆動するインテークカムシャフトを含むとともに当該インテークカムシャフトの位相角を連続的に変更する可変吸気タイミング装置33、可変吸気タイミング装置33のアクチュエータ33a、燃焼室25に連通した排気ポート34、排気ポート34を開閉する排気弁35、排気弁35を駆動するエキゾーストカムシャフト36、点火プラグ37、点火プラグ37に与える高電圧を発生するイグニッションコイルを含むイグナイタ38、及び燃料を吸気ポート31内に噴射するインジェクタ(燃料噴射手段)39を備えている。
吸気系統40は、吸気ポート31に連通し当該吸気ポート31とともに吸気通路を形成するインテークマニホールドを含む吸気管41、吸気管41の端部に設けられたエアフィルタ42、吸気管41内にあって吸気通路の開口断面積を可変とするスロットル弁43、及びスロットル弁アクチュエータ43aを備えている。ここで、吸気ポート31、及び吸気管41は、吸気通路を構成している。
排気系統50は、排気ポート34に連通したエキゾーストマニホールド51、エキゾーストマニホールド51(実際には、各排気ポート34に連通した各々のエキゾーストマニホールド51が集合した集合部)に接続されたエキゾーストパイプ(排気管)52、エキゾーストパイプ52に配設(介装)された上流側触媒装置53(以下、「第1触媒53」と称呼する。)、及びこの第1触媒53の下流のエキゾーストパイプ52に配設(介装)された下流側触媒装置54(以下、「第2触媒54」と称呼する。)を備えている。排気ポート34、エキゾーストマニホールド51、及びエキゾーストパイプ52は、排気通路を構成している。
一方、このシステムは、エアフローメータ61、スロットルポジションセンサ62、カムポジションセンサ63、クランクポジションセンサ64、水温センサ65、第1触媒53の上流の排気通路(本例では、前記各々のエキゾーストマニホールド51が集合した集合部)に配設された空燃比センサ66(以下、「上流側空燃比センサ66」と称呼する。)、第1触媒53の下流であって第2触媒54の上流の排気通路に配設された空燃比センサ67(以下、「下流側空燃比センサ67」と称呼する。)、及びアクセル開度センサ68を備えている。
エアフローメータ61は、周知の熱線式エアフローメータにより構成されており、吸気管41内を流れる吸入空気の単位時間あたりの質量流量(吸入空気流量Ga)に応じた電圧を出力するようになっている。スロットルポジションセンサ62は、スロットル弁43の開度を検出し、スロットル弁開度TAを表す信号を出力するようになっている。カムポジションセンサ63は、インテークカムシャフトが90°回転する毎に(即ち、クランク軸24が180°回転する毎に)一つのパルスを有する信号(G2信号)を発生するようになっている。クランクポジションセンサ64は、クランク軸24が10°回転する毎に幅狭のパルスを有するとともに当該クランク軸24が360°回転する毎に幅広のパルスを有する信号を出力するようになっている。この信号は、運転速度NEを表す。水温センサ65は、内燃機関10の冷却水の温度を検出し、冷却水温THWを表す信号を出力するようになっている。
上流側空燃比センサ66は、限界電流式の酸素濃度センサであり、図2に示したように、空燃比A/Fに応じた電流を出力し、この電流に応じた電圧である出力値Vabyfsを出力するようになっていて、特に、空燃比が理論空燃比であるときには出力値Vabyfsは上流側目標値Vstoichになる。図2から明らかなように、上流側空燃比センサ66によれば、広範囲にわたる空燃比A/Fを精度良く検出することができる。
下流側空燃比センサ67は、起電力式(濃淡電池式)の酸素濃度センサであり、図3に示したように、理論空燃比近傍において急変する電圧である出力値Voxsを出力するようになっている。より具体的に述べると、下流側空燃比センサ67は、空燃比が理論空燃比よりもリーンのときは略0.1(V)、空燃比が理論空燃比よりもリッチのときは略0.9(V)、及び空燃比が理論空燃比のときは0.5(V)の電圧を出力するようになっている。アクセル開度センサ68は、運転者によって操作されるアクセルペダル81の操作量を検出し、アクセルペダル81の操作量Accpを表す信号を出力するようになっている。
更にこのシステムは、電気制御装置70を備えている。電気制御装置70は、互いにバスで接続されたCPU71、CPU71が実行するルーチン(プログラム)、テーブル(ルックアップテーブル、マップ)、及びパラメータ等を予め記憶したROM72、CPU71が必要に応じてデータを一時的に格納するRAM73、電源が投入された状態でデータを格納するとともに当該格納したデータを電源が遮断されている間も保持するバックアップRAM(SRAM)74、並びにADコンバータを含むインターフェース75等からなるマイクロコンピュータである。インターフェース75は、前記センサ61〜68と接続され、CPU71にセンサ61〜68からの信号を供給するとともに、同CPU71の指示に応じて可変吸気タイミング装置33のアクチュエータ33a、イグナイタ38、インジェクタ39、及びスロットル弁アクチュエータ43aに駆動信号を送出するようになっている。
(空燃比制御の概要)
次に、上述のように構成された空燃比制御装置(以下、「本装置」とも称呼する。)が行う機関の空燃比制御の概要について説明する。
本装置は、上流側空燃比センサ66の出力値を用いた空燃比フィードバック制御(以下、「メインFB制御」と称呼する。)、及び、下流側空燃比センサ67の出力値を用いた空燃比フィードバック制御(以下、「サブFB制御」と称呼する。)という2つの空燃比フィードバック制御を行う。加えて、本装置は、上述した「燃料噴射量の誤差」を適切に補償するため上流側空燃比センサ66の出力値を用いて後述する「基本燃料噴射量の補正」を行う。これらにより、空燃比が目標空燃比である理論空燃比に一致するようにフィードバック制御される。
より具体的に述べると、本装置は、機能ブロック図である図4に示したように、A1〜A15の各機能ブロックを含んで構成されている。以下、図4を参照しながら各機能ブロックについて説明していく。
<基本燃料噴射量の算出・補正>
先ず、筒内吸入空気量算出手段A1は、エアフローメータ61が計測している吸入空気流量Gaと、クランクポジションセンサ64の出力に基づいて得られる運転速度NEと、ROM72が記憶しているテーブルMapMcとに基づき、今回の吸気行程において吸気行程を迎える気筒に吸入された新気の量である筒内吸入空気量Mc(k)を求める。ここで、添え字の(k)は、今回の吸気行程に対する値であることを示している(以下、他の物理量についても同様。)。筒内吸入空気量Mcは、各気筒の吸気行程に対応されながらRAM73に記憶されていく。
上流側目標空燃比設定手段A2は、内燃機関10の運転状態である運転速度NE、及びスロットル弁開度TA等に基づいて上流側目標空燃比abyfrを決定する。この上流側目標空燃比abyfrは、例えば、内燃機関10の暖機終了後においては、特殊な場合を除き理論空燃比に設定されている。
制御用目標空燃比設定手段A3は、下記(1)式に従って、上流側目標空燃比abyfrと、後述するサブFB補正量算出手段A9により算出されるサブFB補正量FBsubとに基づいて制御用目標空燃比abyfrs(k)を設定する。
abyfrs(k)=abyfr/(1+FBsub) ・・・(1)
上記(1)式から理解できるように、この制御用目標空燃比abyfrs(k)は、上流側目標空燃比abyfrに対してサブFB補正量FBsubに応じた分だけ異なる空燃比に設定される。制御用目標空燃比abyfrsは、各気筒の吸気行程に対応されながらRAM73に記憶されていく。
基本燃料噴射量算出手段A4は、筒内吸入空気量Mc(k)を制御用目標空燃比abyfrs(k)で除することにより、筒内吸入空気量Mc(k)に対応する、制御用目標空燃比abyfrs(k)を得るための燃料の量である補正前基本燃料噴射量Fbaseb(k)を求める。補正前基本燃料噴射量Fbasebは、各気筒の吸気行程に対応されながらRAM73に記憶されていく。
補正後基本燃料噴射量算出手段A5は、補正前基本燃料噴射量Fbaseb(k)に、後述する基本燃料噴射量補正係数設定手段A15により(前回の吸気行程にて既に)求められている基本燃料噴射量補正係数KFを乗じることで、補正後基本燃料噴射量Fbaseを求める。
この補正後基本燃料噴射量Fbaseは、後述するように、今回の吸気行程における空燃比を今回の制御用目標空燃比abyfrs(k)と一致させるために噴射されるべき燃料の量と等しい量の燃料を実際に噴射するためにインジェクタ39に噴射指示すべき指令燃料噴射量となる。これにより、後に詳述するように、上記「基本燃料噴射量の補正」が達成される。
<指令燃料噴射量の算出>
指令燃料噴射量算出手段A6は、補正後基本燃料噴射量Fbaseに後述するメインFB補正量算出手段A14により算出されるメインFB補正量FBmainを加えることで、下記(2)式に基づいて指令燃料噴射量Fi(k)を求める。指令燃料噴射量Fiは、各気筒の吸気行程に対応されながらRAM73に記憶されていく。
Fi(k)=Fbase+FBmain ・・・(2)
本装置は、このようにして、サブFB補正量FBsubに基づく補正後基本燃料噴射量Fbaseと、メインFB補正量FBmainとに基づいて算出される指令燃料噴射量Fi(k)の燃料の噴射指示を今回の吸気行程を迎える気筒についてのインジェクタ39に対して行う。これにより、後に詳述するように、上記メインFB制御、及び上記サブFB制御が達成される。
<サブFB制御>
下流側目標値設定手段A7は、上述した上流側目標空燃比設定手段A2と同様、内燃機関10の運転状態である運転速度NE、及びスロットル弁開度TA等に基づいて下流側目標値Voxsrefを決定する。この下流側目標値Voxsrefは、例えば、内燃機関10の暖機終了後においては、特殊な場合を除き理論空燃比に対応する値である0.5(V)に設定されている(図3を参照。)。また、本例では、下流側目標値Voxsrefは、同下流側目標値Voxsrefに対応する空燃比が上述した上流側目標空燃比abyfrと常時一致するように設定される。
出力偏差量算出手段A8は、下記(3)式に基づいて、現時点(具体的には、今回のFi(k)の噴射指示開始時点)での下流側目標値Voxsrefから同現時点での下流側空燃比センサ67の出力値Voxsを減じることにより、出力偏差量DVoxsを求める。この出力偏差量DVoxsは、前記「下流側空燃比センサの出力値と目標空燃比に相当する目標値との偏差に相当する値」に対応する。
DVoxs=Voxsref−Voxs ・・・(3)
サブFB補正量算出手段A9(PIDコントローラ)は、出力偏差量DVoxsを比例・積分・微分処理(PID処理)することでサブFB補正量FBsubを求める。以下、サブFB補正量算出手段A9の機能ブロック図である図5を参照しながら、A9a〜A9kの各機能ブロックを含むサブFB補正量算出手段A9によるサブFB補正量FBsubの算出方法について説明する。
比例項算出手段A9aは、上記出力偏差量DVoxsに予め設定された比例ゲインKp(比例定数)を乗じることで、サブFB補正量FBsubにおける比例項Ksubp(=Kp・DVoxs)を求める。
積分処理手段A9bは、上記出力偏差量DVoxsを逐次積算していくことで出力偏差量DVoxsの時間積分値である偏差積分値SDVoxsを算出・更新する。ただし、積分処理手段A9bは、後述する第3ガード処理手段A9gにより後述する「第3ガード処理された学習値Learn」がガード制限中(即ち、Learn=G or −G)である場合、後述する「第2ガード処理された積分項Ksubi」(=Ki・SDVoxs)(−G≦Ksubi≦G)がガード制限中の学習値Learn(=G or −G)に近づく方向に対応する偏差積分値SDVoxsの更新を行わない。以下、このように偏差積分値SDVoxsの更新を行わない処理を「更新禁止処理」と称呼する。「更新禁止処理」による作用・効果については後述する。この積分処理手段A9bは、前記「積分値算出手段」に相当する。
積分項算出手段A9cは、上記偏差積分値SDVoxsに予め設定された積分ゲインKi(積分定数)を乗じることで、サブFB補正量FBsubにおける積分項Ksubi(=Ki・SDVoxs)を求める。この積分項Ksubiが前記「偏差積分値に基づく値」に対応する。
第2ガード処理手段A9dは、上記積分項Ksubiの値に対して第2ガード処理を行う。第2ガード処理では、積分項Ksubiの値が−G(負の値、第2ガード値)を下回った場合に積分項Ksubiの値が値−Gに設定(制限)されるとともに、積分項Ksubiの値が値G(正の値、第2ガード値)を超えた場合に積分項Ksubiの値が値Gに設定(制限)される。ここで、値Gは、可燃領域に対応する空燃比範囲や、上流側空燃比センサ66の出力値Vabyfsにおいて発生し得る誤差の大きさ等を考慮して決定される。
これにより、第2ガード処理された積分項Ksubiの値は、値−G以上、値G以下となる。なお、第2ガード処理された積分項Ksubiがガード制限中(即ち、Ksubi=G or −G)である場合、偏差積分値SDVoxsは、ガード制限中の積分項Ksubiの値に対応する値(=Ksubi/Ki)に補正される。この第2ガード処理による作用・効果については後述する。この第2ガード処理手段A9dは、前記「第2ガード処理実行手段」に相当する。
なまし処理手段A9eは、第2ガード処理された積分項Ksubiの値に対して周知のなまし処理の一つ(例えば、一次のディジタルローパスフィルタ処理)を施した値(以下、「なまし処理後積分項Ksubilow」と称呼する。)を算出する。このなまし処理後積分項Ksubilowの値は、第2ガード処理された積分項Ksubiの値の定常的な成分を表す。
学習処理手段A9fは、所定のタイミングが到来する毎に「積分項Ksubiの学習処理」を行う。「積分項Ksubiの学習処理」では、その時点での上記なまし処理後積分項Ksubilowの値が学習値Learn(第2ガード処理された積分項Ksubiの値の定常的な成分を表す値)を更新するための更新値DLearnとして取得される。更新値DLearnはその時点でバックアップRAM74に記憶されている学習値Learnに積算される。これにより学習値Learnが更新される。
第3ガード処理手段A9gは、上記更新された学習値Learnに対して第3ガード処理を行う。第3ガード処理では、更新された学習値Learnが−G(負の値、第3ガード値)を下回った場合に学習値Learnが値−Gに設定(制限)されるとともに、更新された学習値Learnが値G(正の値、第3ガード値)を超えた場合に学習値Learnが値Gに設定(制限)される。これにより、第3ガード処理された学習値Learnは、値−G以上、値G以下となる。この第3ガード処理による作用・効果については後述する。この第3ガード処理手段A9gは、前記「第3ガード処理実行手段」に相当する。
このように「積分項Ksubiの学習処理」により更新され、且つ第3ガード処理された後の学習値Learnは、バックアップRAM74に記憶される。即ち、バックアップRAM74に記憶される「第3ガード処理された学習値Learn」は、所定のタイミングが到来する毎に(即ち、「積分項Ksubiの学習処理」の実行タイミングが到来する毎に)ステップ的に変化していく。そして、バックアップRAM74に記憶される学習値Learnの前回値からの変化分がその時点での「第2ガード処理された積分項Ksubi」の値から差し引かれる。これに伴い、偏差積分値SDVoxsは、差し引かれた後の積分項Ksubiの値に対応する値(=Ksubi/Ki)に補正される。
即ち、「積分項Ksubiの学習処理」の実行タイミングが到来する毎に、第2ガード処理された積分項Ksubiの値の定常的な成分が第3ガード処理された学習値Learnに移し変えられていく。そして、各「積分項Ksubiの学習処理」の前後において、第2ガード処理された積分項Ksubiの値と第3ガード処理された学習値Learnの和は変化しない。換言すれば、第2ガード処理された積分項Ksubiの値と第3ガード処理された学習値Learnの和は、サブFB補正量FBsubにおける実質的な積分項の値として機能する。加えて、「積分項Ksubiの学習処理」が完了する毎に、なまし処理後積分項Ksubilowの値が「0」にクリアされる。このように「積分項Ksubiの学習処理」を行う手段が、前記「学習手段」に相当する。
総和値算出手段A9hは、第2ガード処理された積分項Ksubiの値と第3ガード処理された学習値Learn(バックアップRAM74に記憶されている値)の和を総和値SUMとして算出する。即ち、総和値SUMは、サブFB補正量FBsubにおける実質的な積分項として機能する値である。総和値算出手段A9hは、前記「総和値算出手段」に相当する。
第1ガード処理手段A9iは、上記総和値SUMに対して第1ガード処理を行う。第1ガード処理では、総和値SUMが−G(負の値、第1ガード値)を下回った場合に総和値SUMが値−Gに設定(制限)されるとともに、総和値SUMが値G(正の値、第1ガード値)を超えた場合に総和値SUMが値Gに設定(制限)される。これにより、第1ガード処理された総和値SUMは、値−G以上、値G以下となる。この第1ガード処理による作用・効果については後述する。この第1ガード処理手段A9iは、前記「第1ガード処理実行手段」に相当する。
微分項算出手段A9jは、上記出力偏差量DVoxsの時間微分値DDVoxsに予め設定された微分ゲインKd(微分定数)を乗じることで、サブFB補正量FBsubにおける微分項Ksubd(=Kd・DDVoxs)を求める。
加算手段A9kは、下記(4)式に従って、比例項Ksubp、総和値SUM(即ち、実質的な積分項)、及び微分項Ksubdを加えることで、出力偏差量DVoxsを比例・積分・微分処理(PID処理)した値であるサブFB補正量FBsubを求める(−1<FBsub<1)。
FBsub=Ksubp+SUM+Ksubd ・・・(4)
再び、図4を参照すると、上述したように、このサブFB補正量FBsubは、制御用目標空燃比abyfrs(k)の設定に使用され、制御用目標空燃比abyfrs(k)に基づいて補正前基本燃料噴射量Fbaseb(k)(ひいては、指令燃料噴射量Fi(k))が決定される。これにより、以下のようにサブFB制御がなされる。
例えば、平均的な空燃比が理論空燃比よりもリーンであるために下流側空燃比センサ67の出力値Voxsが理論空燃比よりもリーンである空燃比に対応した値を示すと、出力偏差量DVoxsが正の値となるので(図3を参照。)、サブFB補正量FBsubは正の値となる。これにより、制御用目標空燃比abyfrs(k)が上流側目標空燃比abyfr(=理論空燃比)よりも小さい値(即ち、リッチな空燃比)に設定される。従って、補正前基本燃料噴射量Fbaseb(k)(ひいては、指令燃料噴射量Fi(k))が上流側目標空燃比abyfrに対応する値よりも大きくなって、空燃比が理論空燃比よりもリッチとなるように制御される。
反対に、平均的な空燃比が理論空燃比よりもリッチであるために下流側空燃比センサ67の出力値Voxsが理論空燃比よりもリッチである空燃比に対応した値を示すと、出力偏差量DVoxsが負の値となるので、サブFB補正量FBsubは負の値となる。これにより、制御用目標空燃比abyfrs(k)が上流側目標空燃比abyfr(=理論空燃比)よりも大きい値(即ち、リーンな空燃比)に設定される。従って、補正前基本燃料噴射量Fbaseb(k)(ひいては、指令燃料噴射量Fi(k))が上流側目標空燃比abyfrに対応する値よりも小さくなって、空燃比が理論空燃比よりもリーンとなるように制御される。
加えて、サブFB補正量FBsubは、積分項(即ち、実質的な積分項である総和値SUM)を含んでいるので、定常状態では出力偏差量DVoxsがゼロになることが保証される。換言すれば、下流側目標値Voxsrefと下流側空燃比センサ67の出力値Voxsとの定常偏差がゼロになる。この結果、サブFB制御により、上述した「燃料噴射量の誤差」や上流側空燃比センサ66の出力値Vabyfsの誤差が発生している場合であっても、定常状態において第1触媒53の下流の空燃比が下流側目標値Voxsrefに対応する空燃比(即ち、理論空燃比)に収束することが保証される。
以上、サブFB制御では、上記第1ガード処理された総和値SUMに基づくサブFB補正量FBsubに基づいて空燃比が理論空燃比になるようにインジェクタ39から噴射される燃料の量がフィードバック制御される。このように燃料噴射量を制御する手段が前記「空燃比フィードバック制御手段」に相当する。
<各処理の作用・効果>
次に、図5に示した第1ガード処理手段A9iによる「第1ガード処理」、第2ガード処理手段A9dによる「第2ガード処理」、第3ガード処理手段A9gによる「第3ガード処理」、及び積分処理手段A9bによる「更新禁止処理」の作用・効果について図6A〜図6Dを参照しながら説明する。
図6Aは、本装置の比較対象として、本装置において上記「第1ガード処理」、「第2ガード処理」、「第3ガード処理」、及び「更新禁止処理」の全てを行わないもの(以下、「比較対象装置A」と称呼する。)を使用した場合における、下流側空燃比センサ67の出力値Voxs、積分項Ksubi、なまし処理後積分項Ksubilow、学習値Learn、及び総和値SUM(=Ksubi+Learn)の変化の一例を示したタイムチャートである。時刻t1〜t7はそれぞれ、上記「積分項Ksubiの学習処理」の実行タイミングに対応している。
図6Aに示すように、下流側空燃比センサ67の出力値Voxsが理論空燃比よりもリーンを示す期間(即ち、出力偏差量DVoxsが正の値に維持されている期間)では、積分項Ksubiの値(従って、総和値SUM)は増大していく一方、出力値Voxsが理論空燃比よりもリッチを示す期間(即ち、出力偏差量DVoxsが負の値に維持されている期間)では、積分項Ksubiの値(従って、総和値SUM)は減少していく。
また、「積分項Ksubiの学習処理」の実行タイミングが到来する毎に、その時点での学習値Learnにその時点でのなまし処理後積分項Ksubilowの値が加えられて学習値Learnがステップ的に更新されるとともに学習値Learnの変化分が積分項Ksubiの値から差し引かれる。即ち、各「積分項Ksubiの学習処理」の実行タイミングの直前・直後において、総和値SUM(=Ksubi+Learn)は変化しない。更には、なまし処理後積分項Ksubilowの値が「0」にクリアされる。
図6Aに示した例では、何らかの原因により空燃比制御系に異常が発生して出力値Voxsがリーンを示す期間がリッチを示す期間よりも平均的に長くなることで積分項Ksubi(従って、総和値SUM)が平均的に増大している(時刻t1以前〜時刻t6)。その後、その異常が解除されて出力値Voxsがリッチを示す期間がリーンを示す期間よりも平均的に長くなることで積分項Ksubi(従って、総和値SUM)が平均的に減少している(時刻t6以降)。
図6Aに示した例では、学習値Learnに対して上記第3ガード処理がなされていないから、学習値Learnが値Gを超えて際限なく増大し得る。この結果、学習値Learnは、時刻t5〜時刻t6の間において値Gに達しているとともに、時刻t6〜時刻t7の間において値Gを超えている。
加えて、総和値SUMに対して上記第1ガード処理がなされていないから、総和値SUMが値Gを超えて際限なく増大し得る。この結果、時刻t4と時刻t5の間の或る時点〜時刻t7の直前に亘って、総和値SUMが値Gを超えている(斜線で示した領域を参照)。これにより、図6Aに示した例(即ち、比較対象装置Aを使用した場合)では、総和値SUMが値Gを超えている期間内に亘って空燃比が可燃領域から逸脱する等の問題が発生し得る。
これに対し、図6Bは、本装置の比較対象として、上記比較対象装置Aにおいて上記「第1ガード処理」を行うもの(以下、「比較対象装置B」と称呼する。)を使用した場合における、図6Aに対応するタイムチャートである。
図6Bに示すように、この場合、総和値SUMに対して上記第1ガード処理がなされるから、時刻t4と時刻t5の間の或る時点〜時刻t7の直前に亘って総和値SUMが値Gに制限される(値Gに張り付く)。換言すれば、総和値SUMが値Gを超えることがない。従って、上記第1ガード処理を行うことにより、空燃比が可燃領域から逸脱する等の問題の発生が効果的に抑制され得る。
ただし、この場合、総和値SUMがガード制限中(即ち、SUM=G)であっても、学習値Learn(及び、積分項Ksubi)が値Gを超えて際限なく増大し得、図6Aの場合と同様、時刻t6〜時刻t7の間、学習値Learnが値Gを超えている。この結果、時刻t6において積分項Ksubiが平均的に減少を開始してから、総和値SUM(=Ksubi+Learn)が値G以下に戻る時刻tAまでには比較的長い時間が必要となっている。即ち、「総和値SUMの戻り」が大きく遅れている。
これに対し、図6Cは、本装置の比較対象として、上記比較対象装置Bにおいて上記「第2ガード処理」及び「第3ガード処理」を行うもの(以下、「比較対象装置C」と称呼する。)を使用した場合における、図6Bに対応するタイムチャートである。
図6Cに示すように、この場合、学習値Learnに対して上記第3ガード処理がなされるから、時刻t6〜t7に亘って学習値Learnが値Gに制限される(値Gに張り付く)。換言すれば、総和値SUMがガード制限中において学習値Learnが値Gを超えることがない。従って、時刻t6において積分項Ksubiが平均的に減少を開始してから、比較的早い段階(時刻tB)で総和値SUM(=Ksubi+Learn)が値G以下に戻っている。
即ち、上記第1ガード処理に加えて上記第2、第3ガード処理を行うことにより、「総和値SUMの戻り」を早くすることができる。この結果、空燃比が理論空燃比と大きく異なる値に維持される期間を短くすることができるから、エミッションの悪化を抑制することができる。
図6Dは、上記比較対象装置Cにおいて上記「更新禁止処理」を行うもの、即ち、本装置そのものを使用した場合における、図6Cに対応するタイムチャートである。図6Dに示すように、この場合、学習値Learnがガード制限中(即ち、Learn=G)である場合(時刻t5〜時刻t7)において、積分項Ksubi(−G≦Ksubi≦G)の、ガード制限中の学習値Learn(=G)に近づく方向(図6Dでは、積分項Ksubiが増大する方向)への更新が行われない。
換言すれば、下流側空燃比センサ67の出力値Voxsがリーンを示す期間において積分項Ksubiの値が一定に維持される(図6Dにおいて3つの楕円で示した各部分を参照)。一方、時刻t5〜時刻t7において、出力値Voxsがリッチを示す期間における積分項Ksubiの減少方向への更新は許可される。この結果、時刻t6において積分項Ksubiが平均的に減少を開始する前の段階(時刻tC)で既に総和値SUM(=Ksubi+Learn)が値G以下に戻っている。
即ち、上記第1ガード処理、上記第2、第3ガード処理に加えて上記更新禁止処理を行うことにより、「総和値SUMの戻り」を更に一層早くすることができる。この結果、空燃比が理論空燃比と大きく異なる値に維持される期間を更に一層短くすることができるから、エミッションの悪化を更に一層抑制することができる。以上、「第1ガード処理」、「第2ガード処理」、「第3ガード処理」、及び「更新禁止処理」の作用・効果について説明した。
<メインFB制御>
再び、図4を参照すると、テーブル変換手段A10は、上流側空燃比センサ66の出力値Vabyfsと、先に説明した図2に示した上流側空燃比センサ出力値Vabyfsと空燃比A/Fとの関係を規定したテーブルとに基づいて、上流側空燃比センサ66が検出する現時点(具体的には、今回のFi(k)の噴射指示開始時点)における今回の検出空燃比abyfs(k)を求める。検出空燃比abyfsは、各気筒の吸気行程に対応されながらRAM73に記憶されていく。
目標空燃比遅延手段A11は、制御用目標空燃比設定手段A3により吸気行程毎に求められRAM73に記憶されている制御用目標空燃比abyfrsのうち、現時点からNストローク(N回の吸気行程)前の制御用目標空燃比abyfrsをRAM73から読み出し、これを制御用目標空燃比abyfrs(k−N)とする。この値Nは、燃料の噴射指示から、その噴射指示により噴射された燃料の燃焼に基づく排ガスの空燃比が上流側空燃比センサ66の出力値Vabyfsとして現れるまでに要する時間(以下、「遅れ時間L」と称呼する。)に相当するストローク数である。以下、遅れ時間L、及びストローク数Nについて付言する。
一般に、燃料の噴射指示は、吸気行程中(或いは吸気行程よりも前の時点)にて実行され、噴射された燃料は、その後に到来する圧縮上死点近傍の時点で燃焼室25内にて着火(燃焼)させられる。この結果、発生する排ガスは、排気弁35の周囲を介して燃焼室25から排気通路へと排出され、その後、排気通路内を移動していくことで上流側空燃比センサ66(の検出部)に到達する。更に、上流側空燃比センサ66の検出部に到達した排ガスの空燃比が同センサの出力値Vabyfsとして現れるまでには所定の時間を要する。
以上のことから、上記遅れ時間Lは、燃焼行程に係わる遅れ(行程遅れ)、排気通路内での排ガスの移動に係わる遅れ(輸送遅れ)、及び上流側空燃比センサ66の応答に係わる遅れ(応答遅れ)の和で表される。即ち、上流側空燃比センサ66による検出空燃比abyfsは、このようにして得られる遅れ時間Lだけ前に実行された燃料の噴射指示に基づいて発生した排ガスの空燃比を表す値となる。
上述した行程遅れに係る時間は、運転速度NEの増加に応じて短くなるとともに、輸送遅れに係る時間は、運転速度NE及び筒内吸入空気量Mcの上昇に応じて短くなる傾向がある。従って、遅れ時間Lに相当するストローク数Nは、筒内吸入空気量Mc(k)と、運転速度NEと、図7にグラフにより示した、運転速度NE及び筒内吸入空気量Mcと、ストローク数Nとの関係を規定するテーブルMapN(Mc,NE)と、に基づいて求めることができる。これにより、ストローク数Nは、運転速度NE及び筒内吸入空気量Mcの上昇に応じて小さくなる。
上流側空燃比偏差算出手段A12は、下記(5)式に基づいて、今回の検出空燃比abyfs(k)から現時点からNストローク前の制御用目標空燃比abyfrs(k−N)を減じることにより、現時点からNストローク前の上流側空燃比偏差DAFを求める。
DAF=abyfs(k)−abyfrs(k−N) ・・・(5)
このように、現時点からNストローク前の上流側空燃比偏差DAFを求めるために、今回の検出空燃比abyfs(k)から、現時点からNストローク前の制御用目標空燃比abyfrs(k−N)を減じるのは、上述したように、今回の検出空燃比abyfs(k)は、現時点から遅れ時間Lだけ前(従って、現時点からNストローク前)に実行された噴射指示に基づいて発生した排ガスの空燃比を表しているからである。この上流側空燃比偏差DAFは、Nストローク前の時点で筒内に供給された燃料の過不足量に対応する値である。
ハイパスフィルタA13は、その特性をラプラス演算子sを用いて表した下記(6)式に示すように、一次のディジタルフィルタである。下記(6)式において、τ1は時定数である。ハイパスフィルタA13は、周波数(1/τ1)以下の低周波数成分が通過することを実質的に禁止する。
1−1/(1+τ1・s) ・・・(6)
ハイパスフィルタA13は、上記上流側空燃比偏差DAFの値を入力するとともに、上記(6)式に従って上流側空燃比偏差DAFの値をハイパスフィルタ処理した後の値であるハイパスフィルタ通過後上流側空燃比偏差DAFhiを出力する。
メインFB補正量算出手段A14(Pコントローラ)は、ハイパスフィルタ通過後上流側空燃比偏差DAFhiを比例処理(P処理)することで、下記(7)式に基づいてNストローク前の燃料供給量の過不足(における周波数(1/τ1)以上の高周波数成分のみの過不足)を補償するためのメインFB補正量FBmainを求める。(7)式において、Gphiは予め設定された比例ゲイン(比例定数)である。
FBmain=Gphi・DAFhi ・・・(7)
このようにして、本装置は、上流側空燃比センサ66の出力値Vabyfsに基づく値であってハイパスフィルタ処理された値に基づいてメインFB補正量FBmainを求める。そして、本装置は、指令燃料噴射量Fi(k)を求める際、上述したように、補正後基本燃料噴射量Fbaseに対してメインFB補正量FBmainを加える。これにより、上述したサブFB制御とは独立して、以下のように、メインFB制御がなされる。
例えば、空燃比が急変してリーンとなると、今回の検出空燃比abyfs(k)は現時点からNストローク前の制御用目標空燃比abyfrs(k−N)よりもリーンな値(より大きな値)となる。このため、上流側空燃比偏差DAFは大きい正の値となる。また、空燃比の急変によりこの上流側空燃比偏差DAFを示す信号には前記周波数(1/τ1)以上の高周波数成分が存在するから、ハイパスフィルタA13を通過した後のハイパスフィルタ通過後上流側空燃比偏差DAFhiも大きい正の値となる。従って、メインFB補正量FBmainが大きい正の値となる。これにより、指令燃料噴射量Fi(k)は、補正後基本燃料噴射量Fbaseよりも大きくなって、空燃比がリッチとなるように制御される。
反対に、空燃比が急変してリッチとなると、今回の検出空燃比abyfs(k)は制御用目標空燃比abyfrs(k−N)よりもリッチな値(より小さな値)となる。このため、上流側空燃比偏差DAFは負の値となる。また、空燃比の急変によりこの上流側空燃比偏差DAFを示す信号には前記周波数(1/τ1)以上の高周波数成分が存在するから、ハイパスフィルタ通過後上流側空燃比偏差DAFhiも負の値となる。従って、メインFB補正量FBmainが負の値となる。これにより、指令燃料噴射量Fi(k)は、補正後基本燃料噴射量Fbaseよりも小さくなって、空燃比がリーンとなるように制御される。
このようにして、メインFB制御により、過渡の外乱に対して適切な空燃比の補正が実行され得る。なお、メインFB補正量算出手段A14(Pコントローラ)は積分項を含んでいない。従って、メインFB制御では、上述した「燃料噴射量の誤差」は補償され得ない。
<基本燃料噴射量補正係数の設定>
基本燃料噴射量補正係数設定手段A15は、上述した「基本燃料噴射量の補正」を行うため、上記補正前基本燃料噴射量Fbaseb(k)に基本燃料噴射量補正係数KFを乗じた値(=上記補正後基本燃料噴射量Fbase)が、今回の吸気行程における空燃比を今回の制御用目標空燃比abyfrs(k)と一致させるために噴射されるべき燃料の量と等しい量の燃料を実際に噴射するためにインジェクタ39に噴射指示すべき指令燃料噴射量と一致する(近づく)ように、基本燃料噴射量補正係数KFを設定する。以下、基本燃料噴射量補正係数設定手段A15による基本燃料噴射量補正係数KFの設定方法について説明する。
筒内吸入空気量Mcが一定であるとの仮定のもとでは、燃料噴射量と空燃比の積は一定となる。係る関係を利用すると、下記(8)式に示すように、指令燃料噴射量Fiに値(検出空燃比abyfs/制御用目標空燃比abyfrs)を乗じることで、空燃比を制御用目標空燃比abyfrsとするために噴射されるべき燃料の量と等しい量の燃料を実際に噴射するために噴射指示されるべき指令燃料噴射量(以下、「基本燃料噴射量相当指令噴射量Fbaset」と称呼する。)が求められる。
Fbaset=Fi・(abyfs/abyfrs) ・・・(8)
ここで、上述したように、補正前基本燃料噴射量Fbasebに基本燃料噴射量補正係数KFを乗じた値が上記(8)式に従って求められる基本燃料噴射量相当指令噴射量Fbasetと等しくなるように基本燃料噴射量補正係数KFが設定されるから、基本燃料噴射量補正係数KFは下記(9)式に従って設定することができる。
KF=Fbaset/Fbaseb ・・・(9)
ところで、上述したように、上流側空燃比センサ66の出力値Vabyfsに基づく検出空燃比abyfsは、現時点から上記遅れ時間L前(従って、現時点から上記Nストローク前(図7を参照))に実行された噴射指示により噴射された燃料の燃焼に基づく排ガスの空燃比を表す。このことを考慮すると、上記(8)式を使用して基本燃料噴射量相当指令噴射量Fbasetを算出する際、検出空燃比abyfsとして今回の値abyfs(k)を使用し、制御用目標空燃比abyfrs、及び指令燃料噴射量Fiとして現時点からNストローク前の値abyfrs(k−N),Fi(k−N)をそれぞれ使用すれば、基本燃料噴射量相当指令噴射量Fbasetの算出に使用される3つの値(検出空燃比abyfs、制御用目標空燃比abyfrs、指令燃料噴射量Fi)に対応する吸気行程を全て同じとすることができる。この結果、現時点からNストローク前の吸気行程に対応する基本燃料噴射量相当指令噴射量Fbasetを精度良く求めることができる。
そして、上記(9)式を使用して基本燃料噴射量補正係数KFを算出する際、基本燃料噴射量相当指令噴射量Fbasetとして上述のように精度良く求められる「現時点からNストローク前の吸気行程に対応する値」を使用し、補正前基本燃料噴射量Fbasebとして現時点からNストローク前の吸気行程に対応する値Fbaseb(k−N)を使用すれば、基本燃料噴射量補正係数KFが、現時点からNストローク前の吸気行程の時点における、補正前基本燃料噴射量Fbasebと基本燃料噴射量相当指令噴射量Fbasetの比を精度良く表す値に算出され得る。
従って、このようにして得られる基本燃料噴射量補正係数KFを現時点での(今回の)補正前基本燃料噴射量Fbaseb(k)に乗じることで、現時点での(今回の)補正後基本燃料噴射量Fbaseを今回の吸気行程に対応する上記基本燃料噴射量相当指令噴射量と精度良く一致させることができる。
加えて、機関が過渡運転状態にある場合、検出空燃比abyfs、指令燃料噴射量Fi、制御用目標空燃比abyfrs、及び補正前基本燃料噴射量Fbasebは別個独立に高周波数をもって大きく変動し得る。このような場合、上記(9)式に従って算出される基本燃料噴射量補正係数KFも高周波数をもって大きく変動し得、この結果、安定した「基本燃料噴射量の補正」を実現できなくなる可能性がある。従って、安定した「基本燃料噴射量の補正」を実現するためにローパスフィルタ処理を用いることが好ましい。以上のことから、基本燃料噴射量補正係数設定手段A15は、その機能ブロック図である図8に示したようにA15a〜A15fの各機能ブロックを含んで構成されている。
指令燃料噴射量遅延手段A15aは、指令燃料噴射量算出手段A6により吸気行程毎に求められRAM73に記憶されている指令燃料噴射量Fiのうち、現時点からNストローク前の値をRAM73から読み出し、これを指令燃料噴射量Fi(k−N)とする。
制御用空燃比遅延手段A15bは、制御用目標空燃比設定手段A3により吸気行程毎に求められRAM73に記憶されている制御用目標空燃比abyfrsのうち、現時点からNストローク前の値をRAM73から読み出し、これを制御用目標空燃比abyfrs(k−N)とする。
基本燃料噴射量相当指令噴射量算出手段A15cは、上記(8)式に相当する下記(10)式に従って、現時点からNストローク前の吸気行程に対応する基本燃料噴射量相当指令噴射量Fbasetを求める。
Fbaset=Fi(k−N)・(abyfs(k)/abyfrs(k−N)) ・・・(10)
補正前基本燃料噴射量遅延手段A15dは、基本燃料噴射量算出手段A4により吸気行程毎に求められRAM73に記憶されている補正前基本燃料噴射量Fbasebのうち、現時点からNストローク前の値をRAM73から読み出し、これを補正前基本燃料噴射量Fbaseb(k−N)とする。
補正係数設定手段A15eは、上記(9)に相当する下記(11)式に従って、ローパスフィルタ処理前の基本燃料噴射量補正係数KF1を求める。
KF1=Fbaset/Fbaseb(k−N) ・・・(11)
ローパスフィルタA15fは、その特性をラプラス演算子sを用いて表した下記(12)式に示すように、一次のディジタルフィルタである。下記(12)式において、τ2は時定数である。ローパスフィルタA15fは、周波数(1/τ2)以上の高周波数成分が通過することを実質的に禁止する。
1/(1+τ2・s) ・・・(12)
ローパスフィルタA15fは、上記ローパスフィルタ処理前の基本燃料噴射量補正係数KF1の値を入力するとともに、上記(12)式に従って値KF1をローパスフィルタ処理した後の値である基本燃料噴射量補正係数KFを出力する。
以上が、基本燃料噴射量補正係数設定手段A15による基本燃料噴射量補正係数KFの設定方法の概要である。このようにして、基本燃料噴射量補正係数KFは、「燃料噴射量の誤差」を補償するための適切な値に設定され得る。
<基本燃料噴射量補正係数の記憶処理>
内燃機関の暖気運転中等、「上流側空燃比センサ66の出力値Vabyfsが正常な値とならない場合」においては、検出空燃比abyfsが排気ガスの空燃比を精度良く表す値とならない。このような場合、検出空燃比abyfsの値を使用して前記(10)式〜(12)式に従って算出される基本燃料噴射量補正係数KFの値も「燃料噴射量の誤差」を補償するための適切な値とならない。従って、このような場合、前記(10)式〜(12)式に従って算出される基本燃料噴射量補正係数KFは補正前基本燃料噴射量Fbaseb(k)の補正に使用されるべきでない。
そこで、本装置は、「上流側空燃比センサ66の出力値Vabyfsが正常な値となる(なり得る)場合(具体的には、後述するメインフィードバック条件が成立する場合)」に限り、前記(10)式〜(12)式に従って計算された基本燃料噴射量補正係数KFを使用して補正前基本燃料噴射量Fbaseb(k)を補正していく。加えて、この場合、本装置は、計算された基本燃料噴射量補正係数KFの値を逐次バックアップRAM74に記憶・更新していく。
ここで、基本燃料噴射量補正係数KFの値の記憶・更新について付言する。一般に、筒内吸入空気量Mcが増大すると、「燃料噴射量の誤差」の程度が増大する(従って、基本燃料噴射量補正係数KFの値の「1」からの偏移量が変化する)傾向がある。そこで、本装置は、図9に示すように、筒内吸入空気量Mcのとり得る範囲を複数の(本例では、4つの)分類に区分する。そして、本装置は、新たな基本燃料噴射量補正係数KFを計算する毎に、今回の筒内吸入空気量Mc(k)が属する分類を選択するとともに、同選択された分類に対応する基本燃料噴射量補正係数KFmem(m)(m:1,2,3,4)の値を前記計算された新たな基本燃料噴射量補正係数KFの値に更新・記憶していく。
一方、本装置は、「上流側空燃比センサ66の出力値Vabyfsが正常な値とならない場合(具体的には、後述するメインフィードバック条件が成立しない場合)」においては、今回の筒内吸入空気量Mc(k)が属する分類を選択するとともに、バックアップRAM74に記憶されている基本燃料噴射量補正係数KFmem(m)(m:1,2,3,4)のうち同選択された分類に対応する値を基本燃料噴射量補正係数記憶値KFmemとする。
そして、本装置は、前記(10)式〜(12)式に従って計算される基本燃料噴射量補正係数KFに代えて基本燃料噴射量補正係数記憶値KFmemを利用して補正前基本燃料噴射量Fbaseb(k)を補正していく。これにより、「上流側空燃比センサ66の出力値Vabyfsが正常な値とならない場合」においても、「燃料噴射量の誤差」をある程度正確に補償していくことができる。以上が、本装置による空燃比制御の概要である。
(実際の作動)
次に、本装置による空燃比制御装置の実際の作動について説明する。以下、説明の便宜上、「MapX(a1,a2,…)」は、a1,a2,…を引数とする値Xを求めるためのテーブルを表すものとする。また、引数の値がセンサの検出値である場合、現在値が使用される。
<空燃比フィードバック制御>
CPU71は、図10にフローチャートにより示した指令燃料噴射量Fiの計算、及び燃料噴射の指示を行うルーチンを、各気筒のクランク角が各吸気上死点前の所定クランク角度(例えば、BTDC90°CA)となる毎に、繰り返し実行するようになっている。
従って、任意の気筒のクランク角度が前記所定クランク角度になると、CPU71はステップ1000から処理を開始してステップ1005に進んで、テーブルMapMc(NE,Ga)に基づいて、今回の吸気行程を迎える気筒(以下、「燃料噴射気筒」と云うこともある。)に吸入された新気の量である今回の筒内吸入空気量Mc(k)を推定する。
次に、CPU71はステップ1010に進んで、今回の目標空燃比abyfr(k)と、後述するルーチンにて(前回の燃料噴射時点にて)求められているサブFB補正量FBsubの最新値と、上記(1)式とに基づいて制御用目標空燃比abyfrs(k)を求め、続くステップ1015にて、上記筒内吸入空気量Mc(k)を制御用目標空燃比abyfrs(k)で除することにより、今回の補正前基本燃料噴射量Fbaseb(k)を決定する。
次いで、CPU71はステップ1020に進んで、メインフィードバック条件が成立しているか否かを判定する。ここで、メインフィードバック条件は、例えば、機関の冷却水温THWが第1所定温度以上であって、上流側空燃比センサ66が正常(活性状態となっていることを含む)であって、筒内吸入空気量Mc(k)(或いは、負荷)が所定値以下であるときに成立する。
メインフィードバック条件が成立している場合、CPU71はステップ1020にて「Yes」と判定してステップ1025に進み、上記補正前基本燃料噴射量Fbaseb(k)に、後述するルーチンにて(前回の燃料噴射時点にて)求められている基本燃料噴射量補正係数KFの最新値を乗じることにより補正後基本燃料噴射量Fbaseを決定する。
一方、メインフィードバック条件が成立していない場合、CPU71はステップ1020にて「No」と判定してステップ1030に進み、基本燃料噴射量補正係数記憶値KFmemを、バックアップRAM74に記憶されている基本燃料噴射量補正係数KFmem(m)(m:1,2,3,4)のうち筒内吸入空気量Mc(k)の値から選択された値に決定する。
次いで、CPU71はステップ1035に進み、ステップ1015にて決定された補正前基本燃料噴射量Fbaseb(k)に上記基本燃料噴射量補正係数記憶値KFmemを乗じることにより補正後基本燃料噴射量Fbaseを決定する。
次に、CPU71はステップ1040に進み、上記(2)式に従って、上記求めた補正後基本燃料噴射量Fbaseに、後述するルーチンにて(前回の燃料噴射時点にて)求められているメインFB補正量FBmainの最新値を加えることで、今回の指令燃料噴射量Fi(k)を決定する。
続いて、CPU71はステップ1045に進んで、指令燃料噴射量Fi(k)の燃料の噴射指示を行った後、ステップ1095に進んで本ルーチンを一旦終了する。以上により、補正前基本燃料噴射量Fbaseb(k)が上述した基本燃料噴射量相当指令噴射量Fbasetに一致するように補正されて「燃料噴射量の誤差」が補償され得るとともに、メインFB制御、及びサブFB制御が行われる。
<メインFB補正量の計算>
次に、上述したメインFB制御においてメインFB補正量FBmainを算出する際の作動について説明すると、CPU71は図11にフローチャートにより示したルーチンを、燃料噴射気筒について燃料噴射開始時期(噴射指示開始時点)が到来する毎に、繰り返し実行するようになっている。
従って、燃料噴射気筒について燃料噴射開始時期が到来すると、CPU71はステップ1100から処理を開始し、ステップ1105に進んで、メインフィードバック条件が成立しているか否かを判定する。このメインフィードバック条件は、先の図10のステップ1020におけるメインフィードバック条件と同一である。
いま、メインフィードバック条件が成立しているものとして説明を続けると、CPU71はステップ1105にて「Yes」と判定してステップ1110に進み、テーブルMapabyfs(Vabyfs)(図2を参照)に基づいて、今回の検出空燃比abyfs(k)を求める。
次に、CPU71はステップ1115に進んで、テーブルMapN(Mc(k),NE)(図7を参照)に基づいて、ストローク数Nを決定する。次いで、CPU71はステップ1120に進み、上記(5)式に従って、前記求めた検出空燃比abyfs(k)から現時点からNストローク(N回の吸気行程)前の制御用目標空燃比であるabyfrs(k−N)を減ずることにより、上流側空燃比偏差DAFを求める。
続いて、CPU71はステップ1125に進み、上流側空燃比偏差DAFをハイパスフィルタA13によりハイパスフィルタ処理してハイパスフィルタ通過後上流側空燃比偏差DAFhiを取得する。次に、CPU71はステップ1130に進んで、前記(7)式に従ってメインFB補正量FBmainを求めた後、ステップ1195に進んで本ルーチンを一旦終了する。
以上により、メインFB補正量FBmainが求められ、このメインFB補正量FBmainが前述した図10のステップ1040により指令燃料噴射量Fi(k)に反映されることで上述したメインFB制御が実行される。
一方、ステップ1105の判定時において、メインフィードバック条件が不成立であると、CPU71は同ステップ1105にて「No」と判定してステップ1135に進んでメインFB補正量FBmainの値を「0」に設定し、その後ステップ1195に進んで本ルーチンを一旦終了する。このように、メインフィードバック条件が不成立であるときは、メインFB補正量FBmainを「0」としてメインFB制御に基づく空燃比フィードバック制御を行わない。
<サブFB補正量の計算>
次に、上述したサブFB制御においてサブFB補正量FBsubを算出する際の作動について説明すると、CPU71は図12にフローチャートにより示したルーチンを、燃料噴射気筒について燃料噴射開始時期(噴射指示開始時点)が到来する毎に、繰り返し実行するようになっている。
従って、燃料噴射気筒について燃料噴射開始時期が到来すると、CPU71はステップ1200から処理を開始し、まず、ステップ1205にて、サブフィードバック条件が成立しているか否かを判定する。サブフィードバック条件は、例えば、前述したステップ1020(及び、ステップ1105)でのメインフィードバック条件に加え、機関の冷却水温THWが前記第1所定温度よりも高い第2所定温度以上のときに成立する。
いま、サブフィードバック条件が成立しているものとして説明を続けると、CPU71はステップ1205にて「Yes」と判定してステップ1210に進み、上記(3)式に従って、下流側目標値Voxsrefから現時点の下流側空燃比センサ67の出力値Voxsを減じることにより、出力偏差量DVoxsを求め、続くステップ1215にて、上記出力偏差量DVoxsに比例ゲインKpを乗じることで比例項Ksubpを求める。
次に、CPU71はステップ1220に進んで、下記(13)式に基づき出力偏差量DVoxsの微分値DDVoxsを求める。(13)式において、DVoxs1は前回の本ルーチン実行時において後述するステップ1230にて設定(更新)された出力偏差量DVoxsの前回値である。また、Δtは本ルーチンが前回実行された時点から今回実行された時点までの時間である。
DDVoxs=(DVoxs−DVoxs1)/Δt ・・・(13)
次いで、CPU71はステップ1225に進み、上記出力偏差量の微分値DDVoxsに微分ゲインKdを乗じることで微分項Ksubdを求め、続くステップ1230にて出力偏差量DVoxsの前回値DVoxs1を上記ステップ1210にて求めた出力偏差量DVoxsと等しい値に設定する。
次に、CPU71はステップ1235に進んで、後述するルーチンにて(前回の燃料噴射時点にて)求められている第3ガード処理された学習値Learnがガード制限中(即ち、Learn=G or −G))であるか否かを判定し、「No」と判定する場合、ステップ1240に進んで、その時点における偏差積分値SDVoxsに上記ステップ1210にて求めた出力偏差量DVoxsを加えて、新たな偏差積分値SDVoxsを求め(即ち、偏差積分値SDVoxsを更新し)、ステップ1250に進む。
一方、ステップ1235にて「Yes」と判定される場合、CPU71はステップ1245に進んで、ステップ1210にて求めた出力偏差量DVoxsの符号が、「積分項Ksubiの値がガード制限中の学習値Learn(=G or −G)に近づく方向」に対応しているか否かを判定する。具体的には、ガード制限中の学習値Learnが値Gである場合、出力偏差量DVoxsの値が正(或いは、「0」)のときに「Yes」と判定され出力偏差量DVoxsの値が負のときに「No」と判定される。ガード制限中の学習値Learnが値−Gである場合、出力偏差量DVoxsの値が正のときに「No」と判定され出力偏差量DVoxsの値が負(或いは、「0」)のときに「Yes」と判定される。
CPU71はステップ1245にて「No」と判定する場合、上記ステップ1240の偏差積分値SDVoxsの更新処理を行った後ステップ1250に進む。一方、ステップ1245にて「Yes」と判定する場合、CPU71は上記ステップ1240の処理を行わずに直ちにステップ1250に進む。このように偏差積分値SDVoxsの更新(従って、積分項Ksubiの更新)を行わない処理が上述した「更新禁止処理」に対応する。
CPU71はステップ1250に進むと、上記偏差積分値SDVoxsに積分ゲインKiを乗じることで積分項Ksubiを求め(更新し)、続くステップ1255にて、前記求めた積分項Ksubiに対して上述した第2ガード処理(−G≦Ksubi≦G)を行う。
続いて、CPU71はステップ1260に進み、上記積分項Ksubiがガード制限中(即ち、Ksubi=G or −G))であるか否かを判定し、「No」と判定する場合、ステップ1270に直ちに進む。一方、「Yes」と判定する場合、CPU71はステップ1265に進んで、偏差積分値SDVoxsをガード制限中の積分項Ksubiの値に対応させるため、偏差積分値SDVoxsを値(Ksubi/Ki)に補正し、その後ステップ1270に進む。
CPU71はステップ1270に進むと、ステップ1255において第2ガード処理した積分項Ksubiと後述するルーチンにて求められている第3ガード処理された学習値Learnを加えて総和値SUMを求め、続くステップ1275にて、前記求めた総和値SUMに対して上述した第1ガード処理(−G≦SUB≦G)を行う。
そして、CPU71はステップ1280に進んで、上記ステップ1215にて求めた比例項Ksubpと、上記ステップ1225にて求めた微分項Ksubdと、上記ステップ1275にて第1ガード処理された総和値SUMと、上記(4)式とに基づいてサブFB補正量FBsubを求め、ステップ1295に進んで本ルーチンを一旦終了する。
以上により、サブFB補正量FBsubが求められる。このサブFB補正量FBsubが、前述した図10のステップ1010により制御用目標空燃比abyfrs(k)に反映され、この制御用目標空燃比abyfrs(k)に基づいて指令燃料噴射量Fi(k)が決定されることで上述したサブFB制御が実行される。
一方、ステップ1205の判定時において、サブフィードバック条件が不成立であると、CPU71は同ステップ1205にて「No」と判定してステップ1285に進んでサブFB補正量FBsubの値を「0」に設定し、その後、ステップ1295に進んで本ルーチンを一旦終了する。このように、サブフィードバック条件が不成立であるときは、サブFB補正量FBsubを「0」としてサブFB制御に基づく空燃比フィードバック制御を行わない。
<サブFB学習値Learnの更新>
次に、上述した積分項Ksubiの学習値Learnを更新する際の作動について説明すると、CPU71は図13にフローチャートにより示したルーチンを、燃料噴射気筒について燃料噴射開始時期(噴射指示開始時点)が到来する毎に、繰り返し実行するようになっている。
従って、燃料噴射気筒について燃料噴射開始時期が到来すると、CPU71はステップ1300から処理を開始し、まず、ステップ1305にて、サブフィードバック条件が成立しているか否かを判定する。このサブフィードバック条件は、先の図12のステップ1205におけるサブフィードバック条件と同一である。
CPU71はステップ1305にて「No」と判定する場合、ステップ1395に直ちに進んで本ルーチンを一旦終了する。この場合、学習値Learnの更新は行われない。一方、CPU71はステップ1305にて「Yes」と判定する場合、ステップ1310に進んで、先のステップ1255にて第2ガード処理された積分項Ksubiの値をローパスフィルタ処理してなまし処理後積分項Ksubilowを求める。
続いて、CPU71はステップ1315に進み、学習値Learnの更新タイミングが到来したか否かを判定し、「No」と判定する場合、ステップ1395に直ちに進んで本ルーチンを一旦終了する。この場合、学習値Learnの更新は行われない。本例では、学習値Learnの更新タイミングは、燃料噴射が所定回数行われる毎に到来する。
いま、学習値Learnの更新タイミングが到来したものとすると、CPU71はステップ1315にて「Yes」と判定してステップ1320に進み、学習値の更新値DLearnを、先のステップ1310にて更新されている現時点でのなまし処理後積分項Ksubilowの値に設定する。
続いて、CPU71はステップ1325に進んで、その時点においてバックアップRAM74に記憶されている学習値Learnに上記ステップ1320にて求めた更新値DLearnを加えて、新たな学習値Learnを求め(即ち、学習値Learnを更新し)、続くステップ1330にて、前記更新した学習値Learnに対して上述した第3ガード処理(−G≦Learn≦G)を行う。この第3ガード処理された学習値Learnは、バックアップRAM74に記憶される。
次いで、CPU71はステップ1335に進み、上記学習値Learnがガード制限中(即ち、Learn=G or −G))であるか否かを判定し、「No」と判定する場合、ステップ1345に直ちに進む。一方、「Yes」と判定する場合、CPU71はステップ1340に進んで、更新値DLearnを、ガード制限されている学習値Learnから、前回の学習値Learnの更新時において後述するステップ1360にて更新されている前回の学習値Learn1を減じた値に補正し、その後ステップ1345に進む。
CPU71はステップ1345に進むと、その時点において先のステップ1255にて第2ガード処理された積分項Ksubiから上記更新値DLearnを減じることで、更新値DLearnの分を積分項Ksubiから差し引き、続くステップ1350にて、偏差積分値SDVoxsを上記差し引かれた後の積分項Ksubiの値に対応させるため、偏差積分値SDVoxsを値(Ksubi/Ki)に補正する。
そして、CPU71はステップ1355に進んで、なまし処理後積分項Ksubilowの値を「0」にクリアし、続くステップ1360にて前回の学習値Learn1を、上記ステップ1330にて第3ガード処理された学習値Learnと等しい値に設定した後、ステップ1395に進んで本ルーチンを一旦終了する。
このように、更新タイミングが到来する毎に、第2ガード処理された積分項Ksubiの値の定常的な成分(=Ksubilow)が第3ガード処理された学習値Learnに移し変えられていき、これにより、学習値Learnが更新されていく。
<基本燃料噴射量補正係数の計算、及び記憶>
次に、基本燃料噴射量補正係数KFを計算する際の作動について説明すると、CPU71は図14にフローチャートにより示したルーチンを、燃料噴射気筒について燃料噴射開始時期(噴射指示開始時点)が到来する毎に、繰り返し実行するようになっている。
従って、燃料噴射気筒について燃料噴射開始時期が到来すると、CPU71はステップ1400から処理を開始し、ステップ1405に進んで、メインフィードバック条件が成立しているか否かを判定し、「No」と判定する場合、ステップ1495に直ちに進んで本ルーチンを一旦終了する。この場合、基本燃料噴射量補正係数KFの計算、及び基本燃料噴射量補正係数KFの値のバックアップRAM74への記憶処理が実行されない。このメインフィードバック条件は、上記ステップ1020、1105におけるメインフィードバック条件と同一である。
いま、メインフィードバック条件が成立しているものとして説明を続けると、CPU71はステップ1405にて「Yes」と判定してステップ1410に進み、テーブルMapN(Mc(k),NE)に基づいてストローク数Nを決定する。
次に、CPU71はステップ1415に進んで、現時点からNストローク前の指令燃料噴射量Fi(k−N)と、先のステップ1110にて求めた今回の検出空燃比abyfs(k)と、現時点からNストローク前の制御用目標空燃比abyfrs(k−N)と、上記(10)式とに基づいて、基本燃料噴射量相当指令噴射量Fbasetを求める。
次いで、CPU71はステップ1420に進んで、上記基本燃料噴射量相当指令噴射量Fbasetと、現時点からNストローク前の補正前基本燃料噴射量Fbaseb(k−N)と、上記(11)式とに基づいてローパスフィルタ処理前の基本燃料噴射量補正係数KF1を求める。
次に、CPU71はステップ1425に進み、上記ローパスフィルタ処理前の基本燃料噴射量補正係数KF1をローパスフィルタA15fによりローパスフィルタ処理して基本燃料噴射量補正係数KFを取得する。
次に、CPU71はステップ1430に進んで、KF記憶条件が成立したか否かを判定する。基本燃料噴射量補正係数KFの記憶処理は、基本燃料噴射量補正係数KFの値が安定している定常運転状態において実行されることが好ましい。本例では、KF記憶条件は、機関10が所定の定常運転状態(例えば、運転速度NE、及びアクセルペダル操作量Accpの変動幅が現時点までの所定期間に亘って所定値以下の状態)にある場合に成立する。
いま、KF記憶条件が成立しているものとすると、CPU71はステップ1430にて「Yes」と判定してステップ1435に進んで、筒内吸入空気量Mc(k)の最新値から選択されるKFmem(m)(m:1,2,3,4)の値を先のステップ1425にて求めた基本燃料噴射量補正係数KFと等しい値に更新し、同更新されたKFmem(m)の値をバックアップRAM74の対応するメモリに記憶した後ステップ1495に進む。一方、CPU71はステップ1430にて「No」と判定した場合、ステップ1435の処理を実行することなく直ちにステップ1495に進む。
これにより、メインフィードバック条件が成立している場合において、燃料噴射気筒について燃料噴射開始時期が到来する毎に、基本燃料噴射量補正係数KFの計算(更新)が実行されていく。そして、前述した図10のルーチンのステップ1025にて、上述のように計算(更新)される基本燃料噴射量補正係数KFの最新値が使用されることで、補正前基本燃料噴射量Fbaseb(k)が補正されていく。加えて、KF記憶条件が成立している場合、基本燃料噴射量補正係数KFの値のバックアップRAM74への記憶処理が実行されていく。
以上、説明したように、本発明による内燃機関の空燃比制御装置の実施形態によれば、下流側目標値Voxsrefと下流側空燃比センサ67の出力値の差(=出力偏差量DVoxs)についての積分項Ksubiの定常的な成分(=なまし処理後積分項Ksubilow)は所定のタイミング毎に学習値Learnに移し変えられていく。従って、積分項Ksubiの値と学習値Learnの和(=総和値SUM)は、実質的な積分項の値として機能する。総和値SUMには「第1ガード処理」(−G≦SUM≦G)が施され、第1ガード処理された総和値SUMがサブFB制御に使用されるサブFB補正量FBsub(=比例項Ksubp+微分項Ksubd+総和値SUM)の算出に使用される。
これにより、サブFB制御による空燃比補正を行う際における実質的な積分項として機能する総和値SUMそのものに対して直接ガード処理がなされることになる。従って、空燃比補正に対するガード処理を適切に行うことができ、この結果、空燃比が可燃領域から逸脱する等の問題の発生を効果的に抑制することができる。
また、総和値SUM(=Ksubi+Learn)の算出に使用される積分項Ksubi、及び学習値Learnにはそれぞれ、「第2ガード処理」(−G≦Ksubi≦G)、「第3ガード処理」(−G≦Learn≦G)が施されて、更には、上述した「更新禁止処理」も施される。これらにより、一旦ガード値(値G、又は値−G)に張り付いた総和値SUMがガード範囲内(−G<SUM<G)に戻る時期を早くすることができる。この結果、空燃比が理論空燃比と大きく異なる値に維持される期間を短くすることができるから、エミッションの悪化を抑制することができる。
更には、サブFB補正量FBsubにおいて出力偏差量DVoxsについての積分項(=総和値SUM)が含まれているから、上流側空燃比センサ66の出力値Vabyfsに誤差がある場合であっても、定常状態において第1触媒53の下流の空燃比が下流側目標値Voxsrefに対応する空燃比(即ち、理論空燃比)に収束することが保証され得る。
また、上流側空燃比センサ66の出力値Vabyfsに基づく値であってハイパスフィルタ処理された値に基づくメインFB制御により、過渡の外乱に対して適切な空燃比の補正が実行され得る。
加えて、上記(10)式〜(12)式に従って得られる基本燃料噴射量補正係数KFを補正前基本燃料噴射量Fbaseb(k)に乗じることで「基本燃料噴射量の補正」が行われる。これにより、上記「燃料噴射量の誤差」が適切に補償され得る。
本発明は上記実施形態に限定されることはなく、本発明の範囲内において種々の変形例を採用することができる。例えば、上記実施形態においては、総和値SUMを含むサブFB補正量FBsubに応じて目標空燃比(制御用目標空燃比abyfrs)を変更することでサブFB制御を行っているが、総和値SUMを含むサブFB補正量FBsubに応じて上流側空燃比センサ66の出力値Vabyfsを補正し、補正した出力値に基づいてサブFB制御を行ってもよいし、総和値SUMを含むサブFB補正量FBsubに応じて基本燃料噴射量を直接補正することでサブFB制御を行ってもよい。
また、上記実施形態においては、総和値SUMに対する「第1ガード処理」に使用されるガード値(第1ガード値)、積分項Ksubiに対する「第2ガード処理」に使用されるガード値(第2ガード値)、及び学習値Learnに対する「第3ガード処理」に使用されるガード値(第3ガード値)が、全て同じ値(値G or 値−G)となっているが、互いに異ならせてもよい。
また、上記実施形態においては、「第1ガード処理」に加えて、「第2ガード処理」、「第3ガード処理」、及び「更新禁止処理」が行われているが、「第2ガード処理」が行われなくてもよい。或いは、「第3ガード処理」及び「更新禁止処理」が行われなくてもよい。或いは、「第2ガード処理」、「第3ガード処理」、及び「更新禁止処理」が全て行われなくてもよい。
また、上記実施形態においては、学習値として、出力偏差量DVoxsの時間積分値である偏差積分値SDVoxsに積分ゲインKiを乗じて得られる積分項Ksubiの定常的な成分を表す値(=Learn)を使用し、第1ガード処理される総和値SUMとして、積分項Ksubiと学習値Learnの和を使用しているが、図15に示すように、学習値として、偏差積分値SDVoxsそのものの定常的な成分を表す値(=Learn1)を使用し、第1ガード処理される総和値SUM1として、偏差積分値SDVoxsと学習値Learn1の和を使用してもよい。図15において、第1〜第3ガード処理に使用されるガード値G1は、図5におけるガード値Gを積分ゲインKiで除した値である。
この場合、第1ガード処理された総和値SUM1に積分ゲインKiを乗じることで積分項Ksubiが求められ(機能ブロックA9lを参照)、サブFB補正量FBsubは、下記(14)式に従って求められる。これによっても、第1実施形態と同じ作用・効果を得ることができる。
FBsub=Ksubp+Ksubi+Ksubd ・・・(14)
10…内燃機関、25…燃焼室、39…インジェクタ、51…エキゾーストマニホールド、53…三元触媒(第1触媒)、66…上流側空燃比センサ、67…下流側空燃比センサ、70…電気制御装置、71…CPU、74…バックアップRAM