以下、本発明による内燃機関の燃料供給制御装置(以下、単に「制御装置」と称呼する。)の実施形態について図面を参照しながら説明する。この制御装置は、内燃機関の空燃比を制御する空燃比制御装置でもあり、更に、燃料噴射量を制御する燃料噴射量制御装置でもある。
(構成)
図1は、この制御装置を4サイクル火花点火式多気筒(4気筒)内燃機関10に適用したシステムの概略構成を示している。なお、図1は、特定気筒の断面のみを示しているが、他の気筒も同様な構成を備えている。
この内燃機関10は、シリンダブロック、シリンダブロックロワーケース及びオイルパン等を含むシリンダブロック部20と、シリンダブロック部20の上に固定されるシリンダヘッド部30と、シリンダブロック部20にガソリン混合気を供給するための吸気系統40と、シリンダブロック部20からの排ガスを外部に放出するための排気系統50と、を含んでいる。
シリンダブロック部20は、シリンダ21、ピストン22、コンロッド23及びクランク軸24を含んでいる。ピストン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を備えている。スロットルバルブ43は、DCモータからなるスロットルバルブアクチュエータ43aにより吸気管41内で回転駆動されるようになっている。
排気系統50は、各気筒の排気ポート34に一端が接続された複数の枝部を含むエキゾーストマニホールド51、各エキゾーストマニホールド51の枝部の他端であって総ての枝部が集合している集合部に接続されたエキゾーストパイプ52、エキゾーストパイプ52に配設された上流側触媒53、及び、上流側触媒53よりも下流のエキゾーストパイプ52に配設された下流側触媒54を備えている。排気ポート34、エキゾーストマニホールド51及びエキゾーストパイプ52は、排気通路を構成している。
上流側触媒53及び下流側触媒54のそれぞれは、所謂、白金等の貴金属からなる活性成分を担持する三元触媒装置(排気浄化触媒)である。各触媒は、各触媒に流入するガスの空燃比が理論空燃比であるとき、HC,COなどの未燃成分を酸化するとともに窒素酸化物(NOx)を還元する機能を有する。この機能は触媒機能とも称呼される。更に、各触媒は、酸素を吸蔵(貯蔵)する酸素吸蔵機能を有し、この酸素吸蔵機能により空燃比が理論空燃比から偏移したとしても未燃成分及び窒素酸化物を浄化することができる。この酸素吸蔵機能は、触媒に担持されているセリア(CeO2)によってもたらされる。
一方、このシステムは、熱線式エアフローメータ61、スロットルポジションセンサ62、カムポジションセンサ63、クランクポジションセンサ64、水温センサ65、上流側空燃比センサ66、下流側空燃比センサ67及びアクセル開度センサ68を備えている。
エアフローメータ61は、吸気管41内を流れる吸入空気の質量流量Gaに応じた信号を出力するようになっている。
スロットルポジションセンサ62は、スロットルバルブ43の開度(スロットル弁開度)を検出し、スロットル弁開度TAを表す信号を出力するようになっている。
カムポジションセンサ63は、インテークカムシャフトが90°回転する毎に(即ち、クランク軸24が180°回転する毎に)一つのパルスを有する信号(G2信号)を発生するようになっている。
クランクポジションセンサ64は、クランク軸24が10°回転する毎に幅狭のパルスを有するとともに同クランク軸24が360°回転する毎に幅広のパルスを有する信号を出力するようになっている。この信号は、後述する電気制御装置70によって機関回転速度NE(内燃機関10の回転速度)に変換される。
水温センサ65は、内燃機関10の冷却水の温度を検出し、冷却水温THWを表す信号を出力するようになっている。
上流側空燃比センサ66は排気通路に配設されている。上流側空燃比センサ66の配設位置は、エキゾーストマニホールド51の枝部の集合部又はその集合部よりも下流側である。上流側空燃比センサ66は限界電流式の酸素濃度センサである。上流側空燃比センサ66は、図2に示したように、「被検出ガス」の空燃比A/Fに応じた電圧である出力値Vabyfsを出力するようになっている。従って、本例において、上流側空燃比センサ66は、排気通路であって上流側空燃比センサ66が配設されている部位を流れるガスの空燃比(従って、上流側触媒53に流入するガスの空燃比、及び、内燃機関10に供給される混合気の空燃比)に応じた出力値Vabyfsを発生するようになっている。
この出力値Vabyfsは、被検出ガスの空燃比が理論空燃比であるときに値Vstoichに一致する。出力値Vabyfsは、被検出ガスの空燃比が大きくなる(リーンとなる)ほど増大する。即ち、上流側空燃比センサ66は、被検出ガスの空燃比の変化に対して出力が連続的に変化する広域空燃比センサである。
後述する電気制御装置70は、図2に示したテーブル(マップ)Mapabyfsを記憶していて、そのテーブルMapabyfsに実際の出力値Vabyfsを適用することによって空燃比を検出する(検出空燃比abyfsを取得する)ようになっている。以下、上流側空燃比センサの出力値VabyfsとテーブルMapabyfsとによって取得される空燃比を、上流側空燃比abyfsとも称呼する。
下流側空燃比センサ67は、排気通路であって上流側触媒53よりも下流側であり且つ下流側触媒54よりも上流側(即ち、上流側触媒53と下流側触媒54との間の排気通路)に配設されている。下流側空燃比センサ67は、周知の起電力式の酸素濃度センサ(安定化ジルコニアを用いた周知の濃淡電池型の酸素濃度センサ)である。下流側空燃比センサ67は、排気通路であって下流側空燃比センサ67が配設されている部位を流れるガスである被検出ガスの空燃比(従って、下流側触媒54に流入するガスの空燃比、及び、内燃機関10に供給される混合気の空燃比の時間的平均値)に応じた出力値Voxsを発生するようになっている。
この出力値Voxsは、図3に示したように、被検出ガスの空燃比が理論空燃比よりもリッチのとき最大出力値max(例えば、約0.9V)となり、被検出ガスの空燃比が理論空燃比よりもリーンのとき最小出力値min(例えば、約0.1V)となり、被検出ガスの空燃比が理論空燃比であるとき最大出力値maxと最小出力値minの略中間の電圧Vst(理論空燃比相当値Vst、例えば、約0.5V)となる。更に、この出力値Voxsは、被検出ガスの空燃比が理論空燃比よりもリッチな空燃比からリーンな空燃比へと変化する際に最大出力値maxから最小出力値minへと急変し、被検出ガスの空燃比が理論空燃比よりもリーンな空燃比からリッチな空燃比へと変化する際に最小出力値minから最大出力値maxへと急変する。
再び、図1を参照すると、アクセル開度センサ68は、運転者によって操作されるアクセルペダルAPの操作量Accpを表す信号を出力するようになっている。
電気制御装置70は、互いにバスで接続されたCPU71、CPU71が実行するプログラム、テーブル(マップ、関数)及び定数等を予め記憶したROM72、CPU71が必要に応じてデータを一時的に格納するRAM73、及び、バックアップRAM74並びにADコンバータを含むインターフェース75等からなるマイクロコンピュータである。
バックアップRAM74は、内燃機関10を搭載した車両の図示しないイグニッション・キー・スイッチの位置(オフ位置、始動位置及びオン位置等の何れか)に関わらず、車両に搭載されたバッテリから電力の供給を受けるようになっている。バックアップRAM74は、バッテリから電力の供給を受けている場合、CPU71の指示に応じてデータを格納する(データが書き込まれる)とともに、そのデータを読み出し可能となるように保持(記憶)する。バックアップRAM74は、バッテリが車両から取り外される等によりバッテリからの電力供給が遮断されると、データを保持することができない。そこで、CPU71は、バックアップRAM74への電力供給が再開されたとき、バックアップRAM74に保持されるべきデータを初期化(デフォルト値に設定)するようになっている。
インターフェース75は、前記センサ61〜68と接続され、CPU71にセンサ61〜68からの信号を供給するようになっている。更に、インターフェース75は、CPU71の指示に応じて可変吸気タイミング装置33のアクチュエータ33a、イグナイタ38、インジェクタ39及びスロットルバルブアクチュエータ43a等に駆動信号(指示信号)を送出するようになっている。
(制御概要)
次に、上記のように構成された制御装置の作動の概要について図4を参照しながら説明する。
この制御装置は、上流側空燃比センサ66の出力値Vabyfsに基づいて得られる上流側空燃比abyfsを上流側目標空燃比abyfrに一致させるメインフィードバック制御と、下流側空燃比センサ67の出力値Voxsを下流側目標値Voxsrefに一致させるサブフィードバック制御と、を含む空燃比フィードバック制御を実行する。この空燃比フィードバック制御は通常制御とも称呼される。上流側目標空燃比abyfrは、通常制御を行なう場合において理論空燃比に設定され、後述するフューエルカット復帰後増量を行う場合において「理論空燃比よりも小さい(リッチな)リッチ空燃比」に設定される。サブフィードバック制御は、上流側空燃比abyfsが理論空燃比に設定されているときに実行される。下流側目標値Voxsrefは理論空燃比に相当する値Vstに設定される。
実際には、制御装置は「上流側空燃比abyfs(又は出力値Vabyfs)」を「下流側空燃比センサ67の出力値Voxsと下流側目標値Voxsrefとの出力偏差量Dvoxsを小さくするように算出されたサブフィードバック量Vafsfb及びその学習値Vafsfbg」により補正し、それによって「フィードバック制御用空燃比(補正検出空燃比)abyfsc」を算出し、そのフィードバック制御用空燃比abyfscを上流側目標空燃比abyfrに一致させる空燃比フィードバック制御を行う。
更に、制御装置は、フューエルカット実行条件が成立している期間において燃料供給を停止するフューエルカット制御(FC制御)を行う。
制御装置は、以下のように算出される積算吸入空気量SGaが閾値積算吸入空気量SGath以上となったとき、学習値(サブFB学習値)Vafsfbgをサブフィードバック量Vafsfbに基づいて更新する「学習」を行う。サブFB学習値VafsfbgはバックアップRAM74に格納される。
積算吸入空気量SGaは、通常制御の実行中において、吸入空気量Gaを積算することによって増大させられる。
積算吸入空気量SGaは、フューエルカット制御中、所定の比率(例えば、一定比率又は吸入空気量Gaに応じた比率)で減少させられる。
積算吸入空気量SGaは、フューエルカット復帰後増量が実行されるとき、閾値積算吸入空気量SGathよりも小さい一定値(本例において「0」)に設定される。
図4は、積算吸入空気量SGaの変化の様子を示す例である。図4に示した例においては、時刻t0以前において通常制御が行なわれ、時刻t0にてフューエルカット実行条件が成立する。よって、時刻t0にてフューエルカットフラグXFCの値が「0」から「1」へと変更され、時刻t0以降においてフューエルカット制御が実行される。
更に、時刻t1においてフューエルカット復帰後増量要求が発生し(後述する増量条件が成立し)、それによって、フューエルカット復帰後増量要求フラグXRICHの値が「0」から「1」へと変更される。このとき、積算吸入空気量SGaは、閾値積算吸入空気量Gathよりも小さい一定値(本例において、「0」)に設定される。
更に、時刻t0以降におけるフューエルカット制御によって触媒53に多量の酸素が流入する。よって、下流側空燃比センサの出力値Voxsは時刻t1と時刻t2との間で「理論空燃比相当値Vstよりも大きい値(リッチ出力値)」から「理論空燃比相当値Vstよりも小さい値(リーン出力値)」へと変化する。
時刻t2にてフューエルカット実行条件が不成立となり、フューエルカットフラグXFCの値が「0」へと変更される。この後、燃料供給(燃料噴射)が再開される。但し、増量要求フラグXRICHの値が「1」に設定されているから、時刻t2以降においてフューエルカット復帰後増量制御が実行される。フューエルカット復帰後増量中、積算吸入空気量SGaは変更されない。
時刻t3においてフューエルカット復帰後増量要求が消失すると、通常制御が実行される。よって、時刻t3以降において積算吸入空気量SGaは「0」から次第に増大させられる。この積算吸入空気量SGaの変更比率は吸入空気量Gaが大きいほど大きくなる。
時刻t4においてフューエルカット実行条件が再び成立する。これにより、フューエルカットフラグXFCの値が「1」に変更され、時刻t4以降においてフューエルカット制御が再び実行される。積算吸入空気量SGaは、フューエルカット制御の実行中において所定の比率(例えば、吸入空気量Gaに応じて大きさが大きくなる比率、或いは、一定比率)にて減少させられる。
そして、時刻t5にてフューエルカット実行条件が不成立となり、フューエルカットフラグXFCの値が「0」へと変更される。よって、燃料供給(燃料噴射)が再開される。この場合、増量要求フラグXRICHの値は「0」である。従って、時刻t5以降においてはフューエルカット復帰後増量制御は実行されず、通常制御が実行される。その結果、積算吸入空気量SGaは再び増大して行く。
そして、時刻t6にて積算吸入空気量SGaは閾値積算吸入空気量SGathに到達する。よって、時刻t6にてサブフィードバック量の学習許可フラグXkyokaの値が「0」から「1」に変更され、これにより、サブフィードバック量の学習値の更新(学習)が実行される。
時刻t7においてフューエルカット実行条件が再び成立すると、時刻t7以降においてフューエルカット制御が再び実行される。よって、積算吸入空気量SGaは時刻t7以降において減少させられ、時刻t8にて閾値積算吸入空気量SGathを下回る。その結果、時刻t8にて学習許可フラグXkyokaの値が「1」から「0」に変更され、これにより、サブフィードバック量の学習値の更新(学習)が禁止される。
更に、時刻t9にてフューエルカット実行条件が不成立となり、フューエルカットフラグXFCの値が「0」へと変更され、通常制御が再開される。よって、時刻t9以降において積算吸入空気量SGaは再び増大し、時刻t10にて積算吸入空気量SGaは再び閾値積算吸入空気量SGathを上回る。従って、時刻t10にてサブフィードバック量の学習許可フラグXkyokaの値が「0」から「1」に再び変更され、これにより、サブフィードバック量の学習値の更新(学習)が実行される。
以降においても、同様な作動が繰り返される。そして、積算吸入空気量SGaが閾値積算吸入空気量SGathよりも大きい期間において、サブフィードバック量の学習が実行される。なお、積算吸入空気量SGaは、閾値積算吸入空気量SGathよりも所定量だけ大きい上限値以上となることがないように、上限値にて制限される。
ところで、図4における破線は従来装置における作動を示している。従来装置は、通常制御の実行中に積算吸入空気量SGaを増加させる点において本発明の実施形態に係る制御装置と同様に作動するが、従来装置はフューエルカット制御が開始される毎に積算吸入空気量SGaを一定値(「0」)にリセットしている。換言すると、従来装置は、フューエルカット制御の時間が長いか否かに関らず、フューエルカット制御の終了時(燃料供給再開時)に積算吸入空気量SGaを一定値(「0」)から増大(積算)させる。そのため、例えば、時刻t6の時点において積算吸入空気量SGaは閾値積算吸入空気量SGathに到達しないので、学習許可フラグXkyokaの値は「0」に維持され、サブフィードバック量の学習が行われない。
更に、従来装置は、時刻t7、時刻t11及び時刻t13等においてフューエルカット制御が開始される毎に積算吸入空気量SGaを一定値(「0」)に設定する。そのため、時刻t15になるまで積算吸入空気量SGaが閾値積算吸入空気量SGathに到達しない。その結果、従来装置によれば、学習が実行されない期間が長くなるので、サブFB学習値が適正値に到達する時点が遅れ、エミッションが悪化する恐れがある。上述したように、本発明の制御装置はこのような事態の発生(学習遅れ)を回避することができる。
(実際の作動)
次に、上記のように構成された空燃比制御装置の実際の作動について説明する。
<燃料噴射量制御>
制御装置のCPU71は、図5にフローチャートにより示した燃料噴射制御ルーチンを各気筒のクランク角が吸気上死点前の所定クランク角度(例えば、BTDC90°)に一致する毎に繰り返し実行するようになっている。従って、任意の気筒のクランク角度が上記所定クランク角度になると、CPU71は、ステップ500から処理を開始してステップ505に進み、フューエルカットフラグXFCが「0」であるか否かを判定する。
このフューエルカットフラグXFCは、その値が「0」のとき、内燃機関10の運転状態が通常運転状態にあってフューエルカット実行条件を満たす状態でないことを示す。更に、フューエルカットフラグXFCは、その値が「1」のとき、内燃機関10の運転状態がフューエルカット実行条件を満たす状態であることを示す。フューエルカット制御は、内燃機関10への燃料の供給(インジェクタ39からの燃料噴射)を停止する制御である。フューエルカットフラグXFCの値は後述するルーチンにより変更される。フューエルカットフラグXFCの値は図示しないイグニッション・キー・スイッチがオフからオンに変更されたときに実行されるイニシャルルーチンにおいて「0」に設定される。
いま、フューエルカットフラグXFCの値が「0」に設定されていると仮定する。この場合、CPU71はステップ505にて「Yes」と判定してステップ510に進み、エアフローメータ61により計測された吸入空気量Gaと、クランクポジションセンサ64からの出力信号により得られる機関回転速度NEと、テーブルMapMc(NE,Ga)と、に基づいて、今回吸気行程を迎える気筒(以下、「燃料噴射気筒」とも称呼する。)に吸入される吸入空気量(筒内吸入空気量)Mc(k)を算出する。なお、筒内吸入空気量Mc(k)は内燃機関10の吸気通路における空気の挙動をモデル化した周知の空気量推定モデル(空気モデル)を用いて求められてもよい。筒内吸入空気量Mc(k)は算出される毎に内燃機関10の絶対クランク角度に対応されながらRAM73に格納されて行く。
次に、CPU71はステップ515に進み、フューエルカット復帰後増量要求フラグXRICHの値が「0」であるか否かを判定する。この増量要求フラグXRICHは、その値が「1」のとき、機関の空燃比を理論空燃比よりもリッチ側の空燃比に制御する「フューエルカット復帰後増量制御(フューエルカット復帰後の空燃比リッチ制御)」を実行すべき要求があることを示す。更に、増量要求フラグXRICHは、その値が「0」のとき、フューエルカット復帰後増量制御を実行する要求がないことを示す。増量要求フラグXRICHの値は後述するルーチンにより操作される。増量要求フラグXRICHの値は通常運転時においては「0」に設定されている。更に、増量要求フラグXRICHの値はイニシャルルーチンにおいて「0」に設定される。
増量要求フラグXRICHの値が「0」に設定されていると、CPU71はステップ515にて「Yes」と判定してステップ520に進み、目標空燃比abyfrに理論空燃比stoich(例えば、14.7)を設定する。その後、CPU71は、以下に述べるステップ525乃至ステップ535の処理を順に行い、ステップ595に進んで本ルーチンを一旦終了する。
ステップ525:CPU71は、筒内吸入空気量Mc(k)を目標空燃比abyfr(この場合、理論空燃比stoich)で除すことによって、基本燃料噴射量Fbaseを求める。この基本燃料噴射量Fbaseは、機関の空燃比を目標空燃比abyfrに一致させるためのフィードフォワード量である。
ステップ530:CPU71は、基本燃料噴射量Fbaseに後述するルーチンによって別途求められているフィードバック補正量(メインフィードバック量)DFiを加えることにより最終燃料噴射量(最終燃料供給量)Fiを求める。
ステップ535:CPU71は、最終燃料噴射量Fiの燃料を噴射するための噴射指示信号を燃料噴射気筒に対して設けられているインジェクタ39に対して送出する。
以上により、最終燃料噴射量Fiの燃料が燃料噴射気筒に供給され、その結果、機関の空燃比は目標空燃比abyfrである理論空燃比stoichに一致するように制御される。
これに対し、CPU71がステップ515に進んだとき、増量要求フラグXRICHの値が「1」であると、CPU71はそのステップ515にて「No」と判定してステップ540に進み、目標空燃比abyfrに目標リッチ空燃比abyfrichを設定する。この目標リッチ空燃比abyfrichは理論空燃比stoichよりもリッチ側の空燃比(理論空燃比よりも小さい空燃比)である(例えば、13)。その後、CPU71は、前述したステップ525乃至ステップ535の処理を順に行う。従って、ステップ525にて求められる基本燃料噴射量Fbaseが目標リッチ空燃比abyfrichを達成する値(目標空燃比abyfrが理論空燃比stoichである場合よりも大きい値)になるので、空燃比リッチ制御が実行される。
更に、CPU71がステップ505に進んだとき、フューエルカットフラグXFCの値が「1」に設定されていると、CPU71はそのステップ505にて「No」と判定し、ステップ595に直接進んで本ルーチンを一旦終了する。この結果、ステップ535の処理が実行されないので、燃料の噴射(供給)が停止し、フューエルカット制御が実行される。
<フューエルカット開始判定>
一方、CPU71は、図6に示したフューエルカット開始判定ルーチンを所定時間の経過毎に繰り返し実行するようになっている。従って、所定のタイミングになると、CPU71はステップ600から処理を開始し、ステップ610にてフューエルカット条件(フューエルカット開始条件)が成立したか否かを判定する。
フューエルカット条件は、以下に述べる条件1及び条件2が成立したときにのみ成立する。
(条件1)スロットル弁開度TAが「0(又は所定開度以下)」である。即ち、スロットル弁44が全閉である。なお、CPU71は、スロットル弁44の開度を、アクセルペダルの操作量Accpが大きくなるほど大きくなるように制御している。
(条件2)機関回転速度NEがフューエルカット回転速度NEFC以上である。
フューエルカット条件が成立している場合、CPU71はステップ610にて「Yes」と判定し、ステップ620に進んでフューエルカットフラグXFCの値を「1」に設定する。この結果、前述したように図5のステップ535の処理が実行されないので、フューエルカット制御が実行される。これに対し、フューエルカット条件が成立していない場合、CPU71はステップ610にて「No」と判定し、ステップ695に直接進んで本ルーチンを一旦終了する。
<酸素吸蔵量推定>
フューエルカット制御が実行され、その後にフューエルカット制御が終了した時点(フューエルカット復帰時点)では、フューエルカット制御中に触媒53に流入した酸素により、触媒53の酸素吸蔵量OSAが触媒53の最大酸素吸蔵量Cmaxに到達している可能性がある。この場合、NOxが流入すると、触媒53はそのNOxを殆ど浄化できない。そこで、フューエルカット制御復帰後においてフューエルカット復帰後増量(以下、「FC復帰後増量」と表記する。)を必要に応じて実行して触媒53に未燃物を流入し、触媒53の酸素吸蔵量OSAを適正値へと早急に到達(減少)させる。このFC復帰後増量を実行するか否かを判定するパラメータの一つは「触媒53の酸素吸蔵量OSA」である。そこで、CPU71は、図7にフローチャートにより示した「酸素吸蔵量OSAを推定するルーチン」を所定時間(サンプリング時間tsample)の経過毎に繰り返し実行するようになっている。
より具体的に述べると、CPU71は所定のタイミングにてステップ700から処理を開始してステップ705に進み、フューエルカットフラグXFCの値が「0」であるか否かを判定する。
いま、フューエルカット制御が実行中である(即ち、フューエルカットフラグXFCの値が「1」となっている)と仮定すると、CPU71はステップ705にて「No」と判定してステップ710に進み、所定時間(サンプリング時間tsample)内における酸素吸蔵量の変化量ΔOSAを下記(1)式に従って計算する。この(1)式は触媒53に流入するガスの100%が大気であるという前提に基づいている。
ΔOSA=0.23・Ga …(1)
この(1)式において、値「0.23」は大気中に含まれる酸素の重量割合である。Gaはサンプリング時間内においてエアフローメータ61により検出された吸入空気量Gaである。なお、(1)式中の値Gaは、サンプリング期間中の吸入空気量Gaの平均値Gaaveに置換されてもよい。
次に、CPU71は以下に述べるステップ715乃至ステップ735の処理を順に行い、ステップ795に進んで本ルーチンを一旦終了する。
ステップ715:CPU71は下記(2)式に従って酸素吸蔵量OSAを更新する。即ち、CPU71は、現時点までに求められている酸素吸蔵量OSAに前記変化量ΔOSAを加えることにより新たな酸素吸蔵量OSAを推定する。
OSA=OSA+ΔOSA …(2)
ステップ720:CPU71は、酸素吸蔵量OSAが図示しないルーチンにより別途算出されている触媒53の最大酸素吸蔵量Cmax以上であるか否かを判定する。そして、酸素吸蔵量OSAが最大酸素吸蔵量Cmax以上であるとき、CPU71はステップ725に進む。これに対し、酸素吸蔵量OSAが最大酸素吸蔵量Cmaxより小さいとき、CPU71はステップ720からステップ730に直接進む。なお、最大酸素吸蔵量Cmaxの推定方法は、例えば、特開2005−194981号公報、特開2006−057461号公報及び特開2005−207286号公報等により周知である。
ステップ725:CPU71は、酸素吸蔵量OSAに最大酸素吸蔵量Cmaxを格納し、ステップ730に進む。
ステップ730:CPU71は、酸素吸蔵量OSAが「0」以下であるか否かを判定する。そして、酸素吸蔵量OSAが「0」以下であるとき、CPU71はステップ735に進む。これに対し、酸素吸蔵量OSAが「0」より大きいとき、CPU71はステップ730からステップ795に直接進んで本ルーチンを一旦終了する。
ステップ735:CPU71は、酸素吸蔵量OSAに「0」を格納し、ステップ795に直接進んで本ルーチンを一旦終了する。
一方、CPU71がステップ705の処理を実行する時点において、フューエルカット制御が実行中でなければフューエルカットフラグXFCの値は「0」となっているから、CPU71はそのステップ705にて「Yes」と判定してステップ740に進む。
次に、CPU71はステップ740に進み、下記(3)式に基づいて酸素吸蔵量の変化量ΔOSAを計算する。(3)式の値「0.23」は、前述したように、大気中に含まれる酸素の重量割合である。mfrは所定時間(サンプリング時間tsample)内の燃料噴射量Fiの合計量(サンプリング時間tsample内において内燃機関10に供給された燃料の総量)である。abyfsは上流側空燃比であり、stoichは理論空燃比である。
ΔOSA=0.23・mfr・(abyfs − stoich) …(3)
その後、CPU71は、前述したステップ715乃至ステップ735の処理を行い、ステップ795に進んで本ルーチンを一旦終了する。以上の処理により、酸素吸蔵量OSAが推定される。
<フューエルカット復帰後増量要求判定>
CPU71は、推定されている酸素吸蔵量OSAに基づいて、フューエルカット制御の終了後においてフューエルカット復帰後増量を実行すべきか否か(即ち、フューエルカット復帰後増量要求が発生したか否か)を判定する。
より具体的に述べると、CPU71は、図8に示したルーチンを所定時間の経過毎に繰り返し実行するようになっている。従って、所定のタイミングになると、CPU71はステップ800から処理を開始しフューエルカットフラグXFCの値が「1」であるか否かを判定する。このとき、フューエルカットフラグXFCの値が「1」でなければ、CPU71はステップ805にて「No」と判定し、ステップ895に直接進んで本ルーチンを一旦終了する。
これに対し、フューエルカットフラグXFCの値が「1」であるとき(即ち、フューエルカット制御の実行中)、CPU71はステップ805にて「Yes」と判定してステップ810に進み、推定されている酸素吸蔵量OSAが第1閾値k1・Cmax以上であるか否かを判定する。但し、k1は「1/2」よりも大きく「1」以下の値に設定されている。
このとき、酸素吸蔵量OSAが第1閾値k1・Cmaxより小さいと、CPU71はステップ810にて「No」と判定し、ステップ895に直接進んで本ルーチンを一旦終了する。
これに対し、フューエルカット制御が継続すると多量の酸素が触媒53に流入するので、酸素吸蔵量OSAは増大して第1閾値k1・Cmaxに到達する。この場合、CPU71はステップ810にて「Yes」と判定してステップ815に進み、フューエルカット復帰後増量要求フラグXRICHの値を「1」に設定し、ステップ895に進んで本ルーチンを一旦終了する。
このように、フューエルカット復帰後増量要求フラグXRICHは、フューエルカット制御中(フューエルカットフラグXFCの値が「1」であるとき)において、酸素吸蔵量OSAが第1閾値k1・Cmax以上となったときに「1」に設定される。フューエルカット制御が停止した時点(即ち、フューエルカット復帰時点)においてフューエルカット復帰後増量要求フラグXRICHの値が「1」に設定されていると、その時点以降においてフューエルカット復帰後増量が実行され、機関の空燃比が理論空燃比よりも小さい空燃比(理論空燃比よりもリッチな空燃比=リッチ空燃比)abyfrichに設定される(図5のステップ540を参照。)。
フューエルカット制御中に酸素吸蔵量OSAが第1閾値k1・Cmax以上となったということは、触媒53の酸素吸蔵量が過大となっているため、触媒53はNOxを浄化し難い状態となっていることを意味する。従って、制御装置は、このような場合、フューエルカット制御が停止した後にフューエルカット復帰後増量制御を実行して触媒53に多量の未燃物を流入させ、それにより、触媒53の酸素吸蔵量OSAを速やかに低下させる。
<フューエルカット復帰(フューエルカット制御の終了)判定>
更に、CPU71は、図9に示したフューエルカット終了判定ルーチンを所定時間の経過毎に繰り返し実行するようになっている。従って、所定のタイミングになると、CPU71はステップ900から処理を開始し、ステップ905に進んでフューエルカットフラグXFCの値が「1」であるか否かを判定する。即ち、CPU71は現在がフューエルカット制御中であるか否かを判定する。現在がフューエルカット制御中でなければ、CPU71はステップ905にて「No」と判定し、ステップ995に直接進んで本ルーチンを一旦終了する。
一方、CPU71がステップ905に進んだ時点においてフューエルカット制御が実行されていてフューエルカットフラグXFCの値は「1」となっていると、CPU71はそのステップ905にて「Yes」と判定してステップ910に進み、フューエルカット終了条件が成立したか否かを判定する。
フューエルカット終了条件は以下に述べる条件1及び条件2の何れかが成立したときに成立し、条件1及び条件2の双方が不成立のとき不成立となる。フューエルカット条件(フューエルカット開始条件)が成立してからフューエルカット終了条件が成立するまでの期間は、フューエルカット実行条件が成立している期間と言うこともできる。
(条件1)スロットル弁開度TAが「0(前記所定開度)」より大きい。
(条件2)機関回転速度NEが、フューエルカット回転速度NEFCよりも所定回転数ΔNだけ小さいフューエルカット復帰回転速度NEFK(NEFK=NEFC−ΔN)より小さい。
このとき、フューエルカット終了条件が成立していなければ、CPU71はステップ910にて「No」と判定し、ステップ995に直接進んで本ルーチンを一旦終了する。この結果、フューエルカットフラグXFCの値は「1」に維持され、フューエルカット制御は継続される。
これに対し、フューエルカット終了条件が成立していると、CPU71はステップ910にて「Yes」と判定し、ステップ915に進んでフューエルカットフラグXFCの値を「0」に設定する。この結果、CPU71は図5に示したルーチンのステップ505に進んだとき、そのステップ505にて「Yes」と判定してステップ510以降に進むようになる。従って、ステップ535が実行されるので、フューエルカット制御が停止され、燃料の噴射(供給)が再開される。
<フューエルカット復帰後増量終了判定>
前述したように、フューエルカット制御が終了したときにフューエルカット復帰後増量要求フラグXRICHが「1」に設定されていると、フューエルカット復帰後増量が実行される。CPU71は、この増量制御を終了すべきか否かを、図10に示したルーチンを所定時間が経過する毎に実行することにより判定する。
より具体的に述べると、CPU71は、所定のタイミングにて図10のステップ1000から処理を開始してステップ1005に進み、増量要求フラグXRICHの値が「1」であるか否かを判定する。
このとき、増量要求フラグXRICHの値が「1」に設定されていると、CPU71はステップ1005にて「Yes」と判定し、ステップ1010に進んで「推定されている酸素吸蔵量OSAが第2閾値k2・Cmax以下であるか否か」を判定する。ここで、k2は、0よりも大きく「1/3」よりも小さい値に設定されている。
フューエルカット復帰時点の直後においては、酸素吸蔵量OSAは相当に大きいので、CPU71はステップ1010にて「No」と判定し、ステップ1095に直接進む。この結果、増量要求フラグXRICHの値が「1」に維持されるので、フューエルカット復帰後増量が継続される。
その後、所定の時間が経過すると、触媒53にはフューエルカット復帰後増量により多量の未燃物が流入するので、酸素吸蔵量OSAは第2閾値k2・Cmax以下となる。このとき、CPU71はステップ1010にて「Yes」と判定してステップ1015に進んで増量要求フラグXRICHの値を「0」に設定し、ステップ1095に進んで本ルーチンを一旦終了する。この結果、フューエルカット復帰後増量は終了する。
なお、ステップ1010は、CPU71が、下流側空燃比センサ67の出力値Voxsが理論空燃比相当値Vstに設定されている下流側目標値Voxsrefよりも大きいか否かを判定するステップであってもよい。この場合、CPU71は、出力値Voxsが下流側目標値Voxsrefよりも大きいとき、即ち、触媒53から流出した排ガスの空燃比が理論空燃比よりもリッチであるときステップ1015に進み、出力値Voxsが下流側目標値Voxsref以下であるとき、即ち、触媒53から流出した排ガスの空燃比が理論空燃比よりもリーンであるとき、ステップ1095に直接進む。
<メインフィードバック制御>
CPU71は図11にフローチャートにより示したメインフィードバック量算出ルーチンを所定時間の経過毎に繰り返し実行している。従って、所定のタイミングになると、CPU71はステップ1100から処理を開始し、ステップ1105に進んでメインフィードバック制御条件(上流側空燃比フィードバック制御条件)が成立しているか否かを判定する。メインフィードバック制御条件は、例えば、フューエルカット制御の実行中でなく、内燃機関10の冷却水温THWが第1所定温度以上であり、内燃機関10の一回転当りの吸入空気量(負荷)が所定値以下であり、且つ、上流側空燃比センサ66が活性化しているときに成立する。
いま、メインフィードバック制御条件が成立しているものとして説明を続けると、CPU71はステップ1105にて「Yes」と判定して以下に述べるステップ1110乃至ステップ1140の処理を順に行い、ステップ1195に進んで本ルーチンを一旦終了する。
ステップ1110:CPU71は、下記(4)式に従ってフィードバック制御用出力値Vabyfcを取得する。(4)式において、Vabyfsは上流側空燃比センサ66の出力値、Vafsfbは下流側空燃比センサ67の出力値Voxsに基づいて算出されるサブフィードバック量、Vafsfbgはサブフィードバック量の学習値である。サブフィードバック量Vafsfb及び学習値Vafsfbgの算出方法は後述される。
Vabyfc=Vabyfs+Vafsfb+Vafsfbg …(4)
ステップ1115:CPU71は、フィードバック制御用出力値Vabyfcを図2に示したテーブルMapabyfsに適用することによりフィードバック制御用空燃比abyfscを得る。
ステップ1120:CPU71は、下記(5)式に従って筒内供給燃料量Fc(k−N)を取得する。筒内吸入空気量Mc(k−N)は、現時点よりもNサイクル(即ち、N・720°クランク角)前の時点における筒内吸入空気量Mcである。筒内供給燃料量Fc(k−N)は、現時点よりもNサイクル前の時点における筒内供給燃料量Fcである。
Fc(k−N)=Mc(k−N)/abyfsc …(5)
ステップ1125:CPU71は、下記(6)式に従って目標筒内供給燃料量Fcr(k−N)を取得する。上流側目標空燃比abyfr(k−N)は、現時点からNストローク前の上流側目標空燃比abyfrである。よって、目標筒内供給燃料量Fcr(k−N)は、現時点からNストローク前の目標筒内供給燃料量Fcrである。
Fcr(k−N)=Mc(k−N)/abyfr(k−N) …(6)
ステップ1130:CPU71は、下記(7)式に従って筒内供給燃料量偏差DFcを取得する。筒内供給燃料量偏差DFcは、Nストローク前の時点で筒内に供給された燃料の過不足分を表す量である。
DFc=Fcr(k−N)−Fc(k−N) …(7)
ステップ1135:CPU71は、下記(8)式に従ってメインフィードバック量DFiを取得する。(8)式において、Gpは予め設定された比例ゲイン、Giは予め設定された積分ゲインである。係数KFBは機関回転速度NE及び筒内吸入空気量Mc等により可変とすることが好適であるが、ここでは「1」に設定されている。筒内供給燃料量偏差DFcの積分値SDFcは次のステップ1140にて求められる。つまり、CPU71は、フィードバック制御用空燃比abyfscと上流側目標空燃比abyfrとに基づく比例積分制御によりメインフィードバック量DFiを算出する。
DFi=(Gp・DFc+Gi・SDFc)・KFB …(8)
ステップ1140:CPU71は、その時点における筒内供給燃料量偏差DFcの積分値SDFcに上記ステップ1130にて求められた筒内供給燃料量偏差DFcを加えることにより、新たな筒内供給燃料量偏差の積分値SDFcを取得する。
以上により、メインフィードバック量DFiが比例積分制御により求められ、このメインフィードバック量DFiが前述した図5のステップ530により最終燃料噴射量Fiに反映される。この結果、現時点からNストローク前の燃料供給量の過不足が補償されるので、機関の空燃比(従って、上流側触媒53に流入するガスの空燃比)の平均値が上流側目標空燃比abyfr(特殊な場合を除き、理論空燃比)と略一致せしめられる。
一方、ステップ1105の判定時において、メインフィードバック制御条件が不成立であると、CPU71はそのステップ1105にて「No」と判定してステップ1145に進み、メインフィードバック量DFiの値を「0」に設定する。次いで、CPU71は、ステップ1150にて筒内供給燃料量偏差の積分値SDFcに「0」を格納する。その後、CPU71は、ステップ1195に進んで本ルーチンを一旦終了する。
<サブフィードバック量及び学習値の算出>
CPU71は、サブフィードバック量Vafsfb及びサブフィードバック量Vafsfbの学習値Vafsfbgを算出するために、図12に示したルーチンを所定時間の経過毎に実行している。従って、所定のタイミングになると、CPU71はステップ1200から処理を開始し、ステップ1205に進んでサブフィードバック制御条件が成立しているか否かを判定する。サブフィードバック制御条件は、例えば、前述したステップ1105でのメインフィードバック制御条件が成立し、上流側目標空燃比abyfrが理論空燃比に設定され、内燃機関10の冷却水温THWが前記第1所定温度よりも高い第2所定温度以上であり、且つ、下流側空燃比センサ67が活性化しているときに成立する。従って、フューエルカット中及びフューエルカット復帰後増量中において、サブフィードバック制御条件は成立しない。
いま、サブフィードバック制御条件が成立していると仮定して説明を続ける。この場合、CPU71はステップ1205にて「Yes」と判定し、以下に述べるステップ1210乃至ステップ1220の処理を順に行い、ステップ1222に進む。
ステップ1210:CPU71は、下記(9)式に従って下流側目標値Voxsrefと下流側空燃比センサ67の出力値Voxsとの差である出力偏差量DVoxsを取得する。なお、この時点における下流側目標値Voxsrefは理論空燃比に相当する値Vstに設定されている。
DVoxs=Voxsref−Voxs …(9)
ステップ1215:CPU71は、下記(10)式に従ってサブフィードバック量Vafsfbを取得する。(10)式において、Kpは予め設定された比例ゲイン(比例定数)、Kiは予め設定された積分ゲイン(積分定数)である。また、SDVoxsは、出力偏差量DVoxsの積分値である。
Vafsfb=Kp・DVoxs+Ki・SDVoxs …(10)
ステップ1220:CPU71は、その時点における出力偏差量の積分値SDVoxsに上記ステップ1210にて求めた出力偏差量DVoxsを加えて、新たな出力偏差量の積分値SDVoxsを取得する。
次に、CPU71はステップ1222に進み、サブフィードバック学習実行許可フラグ(以下、「サブFB学習許可フラグ」、又は、「学習許可フラグ」とも称呼する。)Xkyokaの値が「1」であるか否かを判定する。学習許可フラグXkyokaの値は、後述するルーチンにより操作される。更に、学習許可フラグXkyokaの値はイニシャルルーチンにおいて「0」に設定されるようになっている。
学習許可フラグXkyokaの値が「0」であると、CPU71はステップ1222にて「No」と判定し、ステップ1295に直接進んで本ルーチンを一旦終了する。これに対し、学習許可フラグXkyokaの値が「1」であると、CPU71はステップ1222にて「Yes」と判定してステップ1225以降の「サブフィードバック量の学習」を実行する。
即ち、CPU71は、ステップ1225において、現時点がリーン反転の直後又はリッチ反転の直後であるか否かを判定する。リーン反転とは、下流側空燃比センサ67の出力値Voxsが理論空燃比相当値Vstよりも大きい値から小さい値へと変化する状態のことである。リッチ反転とは、出力値Voxsが理論空燃比相当値Vstよりも小さい値から大きい値へと変化する状態のことである。そして、現時点がリーン反転の直後又はリッチ反転の直後でなければ、CPU71はステップ1225にて「No」と判定し、ステップ1295に直接進んで本ルーチンを一旦終了する。
これに対し、現時点がリーン反転の直後又はリッチ反転の直後であると、CPU71はステップ1225にて「Yes」と判定して以下に述べるステップ1230乃至ステップ1245の処理を順に行い、その後、ステップ1295に進んで本ルーチンを一旦終了する。
ステップ1230:CPU71は、その時点の学習値Vafsfbgを更新前学習値Vafsfbg0として格納する。
ステップ1235:CPU71は、下記(11)式に従って学習値Vafsfbgを更新する。(11)式の左辺Vafsfbgnewは更新後の学習値Vafsbfbgを表す。(11)式から明らかなように、学習値Vafsfbgはサブフィードバック量Vafsfbの積分項Ki・SDVoxsにノイズ除去のためのフィルタ処理を施した値である。
Vafsfbgnew=α・Vafsfbg+(1−α)・Ki・SDVoxs …(11)
ステップ1240:CPU71は、下記(12)式に従って学習値Vafsfbgの変更量(更新量)ΔGを算出する。
ΔG=Vafsfbg−Vafsfbg0 …(12)
ステップ1245:CPU71は、下記(13)式に従ってサブフィードバック量Vafsfbを変更量ΔGにより補正する。即ち、CPU71は、学習値Vafsfbgを変更量ΔGだけ増加するように更新したとき、サブフィードバック量Vafsfbを変更量ΔGだけ減少させる。なお、このとき、CPU71は積分値SDVoxsをΔG/Kiだけ減少させることが望ましい。
Vafsfb=Vafsfb−ΔG …(13)
以上の処理により、所定時間の経過毎にサブフィードバック量Vafsfbが更新される。更に、学習許可フラグXkyokaの値が「1」であるとき、リーン反転毎及びリッチ反転毎にサブフィードバック量の学習値Vafsfbgが更新される(サブフィードバック量の学習が実行される。)。
なお、サブフィードバック制御条件が成立していない場合、CPU71は図12のステップ1205にて「No」と判定し、以下に述べるステップ1250及びステップ1255の処理を順に行い、ステップ1295に進んで本ルーチンを一旦終了する。
ステップ1250:CPU71はサブフィードバック量Vafsfbの値を「0」に設定する。
ステップ1255:CPU71は出力偏差量の積分値SDVoxsの値を「0」に設定する。
<積算吸入空気量の算出>
上述した学習許可フラグXkyokaの値(即ち、サブフィードバック量の学習が禁止されるか許可されるかを示す値)は、積算吸入空気量SGaに基づいて決定される。そこで、先ず、積算吸入空気量SGaの算出手法について説明する。
CPU71は、所定時間Δtが経過する毎に図13にフローチャートにより示した「算出吸入空気量算出ルーチン」を実行するようになっている。従って、所定のタイミングになると、CPU71は図13のステップ1300から処理を開始してステップ1310に進み、フューエルカットフラグXFCの値が「0」であるか否かを判定する。
いま、フューエルカット制御が実行されておらず、更に、フューエルカット復帰後増量も実施されていないと仮定する。この場合、フューエルカットフラグXFCの値は「0」であり、且つ、フューエルカット復帰後増量要求フラグXRICHの値も「0」である。従って、CPU71はステップ1310にて「Yes」と判定してステップ1320に進み、フューエルカット復帰後増量要求フラグXRICHの値が「0」であるか否かを判定する。更に、CPU71はステップ1320にても「Yes」と判定してステップ1330に進み、現時点の積算吸入空気量SGaに現時点の吸入空気量Gaを加える(積算する)ことによって、新たな積算吸入空気量SGaを取得する。その後、CPU71はステップ1395に進み、本ルーチンを一旦終了する。
これに対し、現時点においてフューエルカット制御が実行されている場合(即ち、フューエルカットフラグXFCの値が「1」である場合)、CPU71はステップ1310にて「No」と判定してステップ1340に進み、現時点の積算吸入空気量SGaから現時点の吸入空気量Gaを減じることによって、新たな積算吸入空気量SGaを取得する。
次いで、CPU71はステップ1350に進み、現時点が「増量要求フラグXRICHの値が「0」から「1」へと変更された直後であるか否か」を判定する。このとき、現時点が「増量要求フラグXRICHの値が「0」から「1」へと変更された直後」であると、CPU71はステップ1350にて「Yes」と判定してステップ1360に進み、積算吸入空気量SGaの値を「0(閾値積算吸入空気量SGathよりも小さい一定値)」に設定(リセット)する。その後、CPU71はステップ1395に直接進んで本ルーチンを一旦終了する。
一方、現時点が「増量要求フラグXRICHの値が「0」から「1」へと変更された直後でなければ、CPU71はステップ1350にて「No」と判定し、ステップ1395に直接進んで本ルーチンを一旦終了する。
更に、現時点においてフューエルカット制御は実行されていないが(フューエルカットフラグXFC=0)、増量要求フラグXRICHの値が「1」である場合、CPU71はステップ1310にて「Yes」と判定し且つステップ1320にて「No」と判定して上述したステップ1350へと進む。
このように、積算吸入空気量SGaは、フューエルカット制御が非実行であるときには所定時間Δtの経過毎にその時々の吸入空気量Gaだけ増加させられ、フューエルカット制御中においては所定時間Δtの経過毎にその時々の吸入空気量Ga(又は、一定の正の値でもよい)だけ減じられる(即ち、積算吸入空気量SGaは所定比率にて減少させられる)。更に、積算吸入空気量SGaは、増量要求フラグXRICHの値が「0」から「1」へと変更された場合(換言すると、フューエルカット制御の終了後にフューエルカット復帰後増量が実施される場合)に「0(閾値積算吸入空気量SGathよりも小さい一定値)」に設定される。
<学習許可フラグの設定>
CPU71は、所定時間が経過する毎に図14にフローチャートにより示した「学習許可フラグ設定ルーチン」を実行するようになっている。従って、所定のタイミングになると、CPU71は図14のステップ1400から処理を開始してステップ1410に進み、フューエルカットフラグXFCの値が「0」であるか否かを判定する。
フューエルカットフラグXFCの値が「1」である場合、CPU71はステップ1410にて「No」と判定してステップ1450に進み、学習許可フラグXkyokaの値を「0」に設定する。これにより、サブフィードバック量の学習(サブFB学習値の更新)が禁止される。その後、CPU71はステップ1495に直接進んで本ルーチンを一旦終了する。
これに対し、フューエルカットフラグXFCの値が「0」である場合、CPU71はステップ1410にて「Yes」と判定してステップ1420に進み、増量要求フラグXRICHの値が「0」であるか否かを判定する。
増量要求フラグXRICHの値が「1」である場合、CPU71はステップ1420にて「No」と判定してステップ1450に進む。これにより、サブフィードバック量の学習(サブFB学習値の更新)が禁止される。これに対し、増量要求フラグXRICHの値が「0」である場合、CPU71はステップ1420にて「Yes」と判定してステップ1430に進み、積算吸入空気量SGaが閾値(学習許可閾値)SGath以上であるか否かを判定する。
積算吸入空気量SGaが閾値積算吸入空気量SGath未満であると、CPU71はステップ1430にて「No」と判定してステップ1450に進む。これにより、サブフィードバック量の学習(サブFB学習値の更新)が禁止される。
これに対し、積算吸入空気量SGaが閾値積算吸入空気量SGath以上であると、CPU71はステップ1430にて「Yes」と判定してステップ1440に進み、学習許可フラグXkyokaの値を「1」に設定する。これにより、サブフィードバック量の学習(サブFB学習値の更新)が許可される。その後、CPU71はステップ1495に進み、本ルーチンを一旦終了する。
このように、CPU71は、フューエルカット制御中でなく且つフューエルカット復帰後増量制御中でもない場合(即ち、通常制御の実行中)に積算吸入空気量SGaが閾値積算吸入空気量SGath以上となったとき、学習許可フラグXkyokaの値を「1」に設定する。これにより、サブフィードバック量の学習が実行される(図12のステップ1222における「Yes」との判定を参照。)。
以上、説明したように、本発明の実施形態に係る燃料供給制御装置は、
下流側空燃比センサの出力値Voxsを下流側目標値Voxsref(理論空燃比相当値Vst)に一致させるための下流側フィードバック量(サブフィードバック量Vafsfb)を、下流側空燃比センサの出力値Voxsに基づいて更新するフィードバック部(図12のステップ1205乃至1220を参照。)と、
前記下流側フィードバック量が更新されている期間において(図12のステップ1205での「Yes」との判定を参照。)、下流側フィードバック量(サブフィードバック量Vafsfb)に応じた値に基づいて下流側フィードバック量の学習値(サブFB学習値Vafsfbg)を更新する学習を行う学習部(図12のステップ1225乃至ステップ1245を参照。)と、
前記下流側フィードバック量(Vafsfb)及び前記学習値(Vafsfbg)に基づき内燃機関10に供給される燃料の量を制御する通常制御を実行するとともに(図11及び図5のステップ520乃至ステップ535を参照。)、内燃機関10の運転状態がフューエルカット実行条件を満たしている期間において(図5のステップ505の「No」との判定、図6及び図9を参照。)、内燃機関10への燃料の供給を停止するフューエルカット制御を前記通常制御に代えて実行する燃料供給制御部(図5を参照。)と、
「前記フューエルカット制御が実行されている期間」及び「前記フューエルカット制御の終了時点以降において前記通常制御が実行される期間が学習禁止期間よりも長くなるまでの期間」において前記学習を禁止するとともに(図12のステップ1222での「No」との判定、及び、図14のステップ1450を参照。)、前記フューエルカット制御の終了時点以降において前記通常制御が実行される期間が前記学習禁止期間以上となった時点以降において前記学習を許可する(図12のステップ1222での「Yes」との判定、及び、図14のステップ1430並びにステップ1440を参照。)、学習許可部と、
を備えた内燃機関10の燃料供給制御装置において、
前記学習許可部は、
前記フューエルカット制御が実行されている時間が長くなるほど前記学習禁止期間が長くなるように、前記学習禁止期間を変更するように構成された(図13及び図14のステップ1430を参照。)燃料供給制御装置である。
更に、前記学習許可部は、
前記通常制御が実行されている期間において吸入空気量に対応する値を積算することにより積算吸入空気量SGaを算出するとともに(図13のステップ1330を参照。)、前記フューエルカット制御が実行されている期間において前記積算吸入空気量SGaを所定の比率にて減少させ(図13のステップ1340を参照。)、前記積算吸入空気量SGaが所定の閾値空気量(閾値積算吸入空気量)SGath以上であるとき前記学習値の更新を許可することにより、前記フューエルカット制御が実行されている時間が長くなるほど前記学習禁止期間が長くなるように前記学習禁止期間を変更する(図14のステップ1430及びステップ1440を参照。)。
加えて、前記燃料供給制御部は、
前記フューエルカット制御が実行されている期間において増量条件が満たされた場合(図8を参照。)、前記フューエルカット制御の終了時点からの所定期間に渡り前記通常制御に代えて内燃機関10に供給される混合気の空燃比が理論空燃比よりも小さいリッチ空燃比となるように燃料供給量(燃料噴射量)を制御する増量制御を実行するように構成されている(図5のステップ515、ステップ540、図8のステップ815及び図10を参照。)。
また、前記学習許可部は、
前記フューエルカット制御の終了時点から前記増量制御が実行される場合には(図13のステップ1350を参照。)、前記積算吸入空気量SGaを前記閾値空気量SGathよりも小さい一定値(「0」)に設定する(図13のステップ1360を参照。)。
これにより、フューエルカット制御が頻繁に実行される場合であっても、フューエルカット制御が実行されている時間が短いほど前記学習禁止期間が短くなるので、サブFB学習値Vafsfbgを早期に適正値に近づけることができる。
本発明は上記実施形態に限定されることはなく、本発明の範囲内において種々の変形例を採用することができる。例えば、上記制御装置の変形例は、サブフィードバック量Vafsfb及びサブFB学習値Vafsfbgに基づいて上流側目標空燃比abyfrを変更し、上流側空燃比abyfsを上流側目標空燃比abyfrに一致させるメインフィードバック量を算出し、その算出したメインフィードバック量に基づき内燃機関10の空燃比(燃料噴射量)をフィードバック制御するようになっていてもよい。
更に、上記制御装置の他の変形例は、サブフィードバック量Vafsfb及びサブFB学習値Vafsfbgに基づいて(メインフィードバック量DFiを算出することなく)基本燃料噴射量Fbaseを直接補正してもよい。
更に、上記制御装置の他の変形例は、積算吸入空気量SGaが閾値積算吸入空気量SGath以上となったとき、サブFB学習値Vafsfbgの更新(学習)を許可していたが、積算吸入空気量SGaに代えて「下流側空燃比センサの出力値Voxsの反転回数」が閾値判定回数Cth以上となったときサブFB学習値Vafsfbgの更新を許可してもよい。下流側空燃比センサの出力値Voxsの反転回数は、出力値Voxsが下流側目標値Voxsref(理論空燃比相当値Vst)を横切った回数である。
この場合において、下流側空燃比センサの出力値Voxsの反転回数Cは、通常制御の実行中において出力値Voxsが下流側目標値Voxsref(理論空燃比相当値Vst)を横切るたびに所定値ずつ増大させられる。更に、反転回数Cは、フューエルカット制御中、所定の比率(例えば、一定比率又は吸入空気量Gaに応じた比率)で減少させられるとともに、フューエルカット復帰後増量が実行されるとき閾値判定回数Cthよりも小さい一定値(本例において「0」)に設定される。
更に、上記制御装置の他の変形例は、フューエルカット制御の継続時間を直接計測しておき、その計測された時間(フューエルカット継続時間)が長いほど、フューエルカット制御の終了時点からの学習禁止期間を長い時間に設定してもよい。