<第1実施形態>
以下、本発明の第1実施形態に係る内燃機関の空燃比制御装置(以下、単に「第1制御装置」と称呼する。)について図面を参照しながら説明する。この第1制御装置は、機関に対して噴射・供給される燃料の量(燃料噴射量)を制御する燃料噴射量制御装置でもある。
(構成)
図1は、この第1制御装置が適用される内燃機関10の概略構成を示している。機関10は、4サイクル・火花点火式・多気筒(本例において4気筒)・ガソリン燃料機関である。機関10は、本体部20、吸気系統30及び排気系統40を備えている。
本体部20は、シリンダブロック部とシリンダヘッド部とを備えている。本体部20は、ピストン頂面、シリンダ壁面及びシリンダヘッド部の下面からなる複数(4個)の燃焼室(第1気筒#1乃至第4気筒#4)21を備えている。
シリンダヘッド部には、各燃焼室(各気筒)21に空気及び燃料からなる混合気を供給するための吸気ポート22と、各燃焼室21から排ガス(既燃ガス)を排出するための排気ポート23と、が形成されている。吸気ポート22は図示しない吸気弁により開閉され、排気ポート23は図示しない排気弁により開閉されるようになっている。
シリンダヘッド部には複数(4個)の点火プラグ24が固定されている。各点火プラグ24は、その火花発生部が各燃焼室21の中央部であってシリンダヘッド部の下面近傍位置に露呈するように配設されている。各点火プラグ24は、点火信号に応答して火花発生部から点火用火花を発生するようになっている。更に、シリンダヘッド部には複数(4個)の燃料噴射弁(インジェクタ)25が固定されている。燃料噴射弁25は、各吸気ポート22に一つずつ設けられている。燃料噴射弁25は、噴射指示信号に応答し、その噴射指示信号に含まれる指示噴射量の燃料を対応する吸気ポート22内に噴射するようになっている。
更に、シリンダヘッド部には、吸気弁制御装置26が設けられている。この吸気弁制御装置26は、インテークカムシャフト(図示せず)とインテークカム(図示せず)との相対回転角度(位相角度)を油圧により調整・制御する周知の構成を備えている。吸気弁制御装置26は、指示信号(駆動信号)に基づいて作動し、吸気弁の開弁タイミング(吸気弁開弁タイミング)を変更することができるようになっている。
吸気系統30は、インテークマニホールド31、吸気管32、エアフィルタ33、スロットル弁34及びスロットル弁アクチュエータ34aを備えている。
インテークマニホールド31は、各吸気ポート22に接続された複数の枝部と、それらの枝部が集合したサージタンク部と、を備えている。吸気管32はサージタンク部に接続されている。インテークマニホールド31、吸気管32及び複数の吸気ポート22は、吸気通路を構成している。エアフィルタ33は吸気管32の端部に設けられている。スロットル弁34はエアフィルタ33とインテークマニホールド31との間の位置において吸気管32に回動可能に取り付けられている。スロットル弁34は、回動することにより吸気管32が形成する吸気通路の開口断面積を変更するようになっている。スロットル弁アクチュエータ34aは、DCモータからなり、指示信号(駆動信号)に応答してスロットル弁34を回動させるようになっている。
排気系統40は、エキゾーストマニホールド41、エキゾーストパイプ(排気管)42上流側触媒43及び下流側触媒44を備えている。
エキゾーストマニホールド41は、各排気ポート23に接続された複数の枝部41aと、それらの枝部41aが集合した集合部41bと、からなっている。エキゾーストパイプ42は、エキゾーストマニホールド41の集合部41bに接続されている。エキゾーストマニホールド41、エキゾーストパイプ42及び複数の排気ポート23は、排ガスが通過する通路を構成している。なお、本明細書において、エキゾーストマニホールド41の集合部41b及びエキゾーストパイプ42を、便宜上、「排気通路」と称呼する。
上流側触媒43は、セラミックからなる担持体に「触媒物質である貴金属」及び「セリア(CeO2)」を担持していて、酸素吸蔵・放出機能(酸素吸蔵機能)を有する三元触媒である。上流側触媒43はエキゾーストパイプ42に配設(介装)されている。上流側触媒43は所定の活性温度に到達すると、「未燃物(HC、CO、H2等)と窒素酸化物(NOx)とを同時に浄化する触媒機能」及び「酸素吸蔵機能」を発揮する。
下流側触媒44は、上流側触媒43と同様の三元触媒である。下流側触媒44は、上流側触媒43よりも下流においてエキゾーストパイプ42に配設(介装)されている。
更に、この第1制御装置は、熱線式エアフローメータ51、スロットルポジションセンサ52、機関回転速度センサ53、水温センサ54、上流側空燃比センサ55、下流側空燃比センサ56及びアクセル開度センサ57を備えている。
熱線式エアフローメータ51は、吸気管32内を流れる吸入空気の質量流量を検出し、その質量流量(機関10の単位時間あたりの吸入空気量)Gaを表す信号を出力するようになっている。
スロットルポジションセンサ52は、スロットル弁34の開度を検出し、スロットル弁開度TAを表す信号を出力するようになっている。
機関回転速度センサ53は、インテークカムシャフトが5°回転する毎に幅狭のパルスを有するとともにインテークカムシャフトが360°回転する毎に幅広のパルスを有する信号を出力するようになっている。機関回転速度センサ53から出力される信号は電気制御装置60により機関回転速度NEを表す信号に変換されるようになっている。更に、電気制御装置60は、機関回転速度センサ53及び図示しないクランク角センサからの信号に基いて、機関10のクランク角度(絶対クランク角)を取得するようになっている。
水温センサ54は、内燃機関10の冷却水の温度を検出し、冷却水温THWを表す信号を出力するようになっている。
上流側空燃比センサ55は、エキゾーストマニホールド41の集合部41bと上流側触媒43との間の位置においてエキゾーストマニホールド41及びエキゾーストパイプ42の何れか(即ち、排気通路)に配設されている。上流側空燃比センサ55は、例えば、特開平11−72473号公報、特開2000−65782号公報及び特開2004−69547号公報等に開示された「拡散抵抗層を備える限界電流式広域空燃比センサ」である。
上流側空燃比センサ55は、図2に示したように、上流側空燃比センサ55の排気側電極及び大気側電極の間に印加される電圧Vが一定電圧Vp以上となると、上流側空燃比abyfsに応じた出力値Vabyfs(限界電流値Ipに応じた値)を出力するようになっている。換言すると、上流側空燃比センサ55は、図3の実線CTにより示したように、「排気通路であって上流側空燃比センサ55が配設されている部位を流れる排ガスの空燃比(即ち、上流側空燃比abyfs)」に応じた「出力値Vabyfs」を発生するようになっている。なお、上流側空燃比abyfsは、上流側触媒43に流入するガスの空燃比であり、機関10に供給される混合気の空燃比であると言うことができる。
上流側空燃比センサ55の出力値Vabyfsは、上流側空燃比abyfsの空燃比が大きくなる(リーン側の空燃比になる)ほど増大する。出力値Vabyfsは、上流側空燃比abyfsが理論空燃比であるときに値Vstoichに一致する。
後述する電気制御装置60は、図3の実線CTにより示したデータを「ルックアップテーブル(マップ)Mapabyfs(Vabyfs)」の形式により記憶していて、そのテーブルMapabyfsに実際の出力値Vabyfsを適用することによって「実際の上流側空燃比abyfs」を取得するようになっている。
再び、図1を参照すると、下流側空燃比センサ56は、上流側触媒43と下流側触媒44との間の位置においてエキゾーストパイプ42(即ち、排気通路)に配設されている。下流側空燃比センサ56は、周知の濃淡電池型の酸素濃度センサ(O2センサ)である。下流側空燃比センサ56は、「排気通路であって下流側空燃比センサ56が配設されている部位を流れる排ガスの空燃比(即ち、下流側空燃比afdown)」に応じた出力値Voxsを出力するようになっている。下流側空燃比afdownは、上流側触媒43から流出するガスの空燃比である。上流側触媒43から流出するガスの空燃比は、周知のように、機関10に供給される混合気の空燃比の平均値を精度良く表す。
下流側空燃比センサ56の出力値Voxsは、図4に示したように、下流側空燃比afdownが理論空燃比よりもリッチのとき最大出力値max(例えば、約0.9V)となり、下流側空燃比afdownが理論空燃比よりもリーンのとき最小出力値min(例えば、約0.1V)となる。更に、出力値Voxsは、下流側空燃比afdownが理論空燃比であるとき「最大出力値maxと最小出力値minの略中間の電圧Vst(中間電圧Vst、例えば、約0.5V)」となる。また、この出力値Voxsは、下流側空燃比afdownが理論空燃比よりもリッチな空燃比からリーンな空燃比へと変化する際に最大出力値maxから最小出力値minへと急変し、下流側空燃比afdownが理論空燃比よりもリーンな空燃比からリッチな空燃比へと変化する際に最小出力値minから最大出力値maxへと急変する。
再び図1を参照すると、アクセル開度センサ57は、運転者によって操作されるアクセルペダルAPの操作量を検出し、アクセルペダルAPの操作量Accpを表す信号を出力するようになっている。
電気制御装置60は、「CPU、ROM、RAM、電源が投入された状態でデータを格納するとともに格納したデータを電源が遮断されている間も保持するバックアップRAM、並びに、ADコンバータを含むインターフェース等」からなる「周知のマイクロコンピュータ」である。
電気制御装置60のインターフェースは、前記センサ51〜57と接続され、CPUにセンサ51〜57からの信号を供給するようになっている。更に、そのインターフェースは、CPUの指示に応じて、各気筒の点火プラグ24、各気筒の燃料噴射弁25、吸気弁制御装置26及びスロットル弁アクチュエータ34a等に指示信号(駆動信号)等を送出するようになっている。なお、電気制御装置60は、取得されたアクセルペダルの操作量Accpが大きくなるほどスロットル弁開度TAが大きくなるように、スロットル弁アクチュエータ34aに指示信号を送出するようになっている。
(第1制御装置の作動の概要)
次に、上記第1制御装置の作動の概要について説明する。第1制御装置は、後に詳述するように、下流側空燃比センサ56の出力値Voxsを「理論空燃比に相当する下流側目標値Voxsref」に一致させるためのサブフィードバック量Vafsfbを、比例積分制御(PI制御)又は比例積分微分制御(PID制御)に従って算出する。更に、第1制御装置は、「サブフィードバック量Vafsfbに含まれる定常成分(積分項)に応じた値」に基づいてサブフィードバック量の学習値Vafsfbg(以下、「サブFB学習値Vafsfbg」とも称呼する。)を所定のタイミングにて更新する。このとき、サブFB学習値Vafsfbgが変化量ΔGだけ増大したとすると、第1制御装置は、サブフィードバック量Vafsfbを変化量ΔGだけ減少させる。
加えて、第1制御装置は、上流側空燃比センサ55の出力値Vabyfsと、サブフィードバック量Vafsfbと、学習値Vafsfbgと、テーブルMapabyfsとに基いて、制御用空燃比abyfscを算出する。そして、第1制御装置は、その制御用空燃比abyfscを「理論空燃比である上流側空燃比abyfs」に一致させるためのメインフィードバック量を算出し、その算出したメインフィードバック量に基づき機関の空燃比(燃料噴射量)を制御する。
ところで、いま、上述した「センサ出力値拡大異常」が発生したと仮定する。このとき、真の上流側空燃比abyfsが理論空燃比よりもリーン側の空燃比であると、図3の破線CLにより示したように、上流側空燃比センサの出力値Vabyfsは実線CTにより示した「上流側空燃比センサ55が正常である場合の出力値(正常値)Vabyfs」よりも大きくなる。更に、真の上流側空燃比abyfsが理論空燃比よりもリッチ側の空燃比であると、図3の破線CLにより示したように、上流側空燃比センサの出力値Vabyfsは実線CTにより示した正常値Vabyfsよりも小さくなる。
更に、前述したように、「上流側空燃比センサ55のセンサ出力値拡大異常」が発生した場合、上流側空燃比センサの実際の出力値VabyfsとテーブルMapabyfsとにより取得される上流側空燃比と、真の上流側空燃比と、の差が、理論空燃比を中心としてリーン側とリッチ側とで対称ではない状況(空燃比検出誤差の非対称性)が発生する。
即ち、いま、図3に示した空燃比A2が理論空燃比に対して正の値dAFだけ小さい空燃比であり、図3に示した空燃比A4が理論空燃比に対して正の値dAFだけ大きい空燃比であると仮定する。上流側空燃比センサ55に出力値拡大異常が発生していると、真の空燃比がA2であるとき、出力値VabyfsはV1となる。従って、検出上流側空燃比はA1となる。また、上流側空燃比センサ55に出力値拡大異常が発生していると、真の空燃比がA4であるとき、出力値VabyfsはV2となる。従って、検出上流側空燃比はA3となる。
このとき、図3から明らかなように、検出上流側空燃比A1と真の空燃比A2との差の大きさ(|A2−A1|)は、検出上流側空燃比A3と真の空燃比A4との差の大きさ(|A3−A4|)よりも大きくなる。この結果、メインフィードバック制御によって、機関の空燃比は理論空燃比よりもリーン側に過補正される。従って、サブフィードバック量Vafsfbは「機関の空燃比をよりリッチ側に補正するための値」へと変化し、その結果、サブFB学習値Vafsfbgも「機関の空燃比をよりリッチ側に補正するための値」へと変化する(収束する。)。
図5は、時刻t1〜t2の期間においてフューエルカット制御が実行されるととともに、そのフューエルカット制御中に「上流側空燃比センサ55のセンサ出力値拡大異常」が発生した状況における「サブFB学習値Vafsfbgの変化」を示すタイムチャートである。図5に示した状況において、サブFB学習値Vafsfbgの収束値はフューエルカット制御の前後において値Vafsfbg0から値VafsfbgLへと変化する。なお、一般に、フューエルカット制御中においてサブフィードバック制御は停止される。
この場合、従来の制御装置によれば、フューエルカット終了時(時刻t2)からサブフィードバック制御が再開され、サブフィードバック量Vafsfbは機関の空燃比をリッチ側に変更する値へと除々に変化する。その結果、サブFB学習値Vafsfbgは「フューエルカット開始直前の値Vafsfbg0」から「収束値VafsfbgL」へと除々に変化し、時刻t2から時間Tが経過した後の時刻t3にて収束値VafsfbgLに到達する。換言すると、サブFB学習値Vafsfbgは、時刻t2から時刻t3までの間、適正値(収束値)とは大きく相違する。また、フィードバック制御は不可避的な制御遅れを伴うので、サブフィードバック量Vafsfbが「かかるサブFB学習値Vafsfbgの適正値からの乖離」を直ちに補償する値とはならない。この結果、機関の空燃比が理論空燃比から乖離し、エミッションが悪化する場合が生じる。
これに対し、第1制御装置は、時刻t1から時刻t2までの期間(フューエルカット制御中)に「上流側空燃比センサ55のセンサ出力値拡大異常」が発生したか否かを判定する。そして、第1制御装置は、「上流側空燃比センサ55のセンサ出力値拡大異常」が発生したと判定したとき、時刻t1から時刻t2の間(遅くとも、時刻t2)においてサブFB学習値Vafsfbgの値を「上流側空燃比センサ55のセンサ出力値拡大異常の発生時に予想される収束値VafsfbgL」に直ちに設定する。この結果、センサ出力値拡大異常が発生した後にエミッションが大きく悪化することを排除することができる。
なお、第1制御装置は、実際には、フューエルカット制御中において「上流側空燃比センサ55のセンサ出力値拡大異常」及び「上流側空燃比センサ55のセンサ出力値縮小異常」の両者の何れかが発生したか否かを判定する。換言すると、第1制御装置は、フューエルカット制御中において、「上流側空燃比センサ55の実際の出力値Vabyfsである実出力値」が「上流側空燃比センサ55が正常であるときの上流側空燃比センサの出力値Vabyfsである正常値」と相違する「第1異常状態が発生したか否か」を判定する第1異常判定手段を備える。そして、第1制御装置は、第1異常状態が発生したと判定すると、サブFB学習値Vafsfbgを、「第1異常状態発生時に予想されるサブFB学習値Vafsfbgの収束値(収束予想値)VafsfbgL」に直ちに設定する。以上が、第1制御装置の作動の概要である。
(実際の作動)
次に、第1制御装置の実際の作動について説明する。
<燃料噴射量制御>
第1制御装置のCPUは、図6に示した「燃料噴射量Fiの計算及び燃料噴射の指示を行うルーチン」を、所定の気筒のクランク角が吸気上死点前の所定クランク角度(例えば、BTDC90°CA)となる毎に、その気筒(以下、「燃料噴射気筒」とも称呼する。)に対して繰り返し実行するようになっている。従って、所定のタイミングになると、CPUはステップ600から処理を開始し、ステップ610にてフューエルカットフラグXCF(以下、「F/CフラグXFC」と表記する。)の値が「0」であるか否かを判定する。
F/CフラグXFCの値は、後述するフューエルカット開始条件が成立してからフューエルカット復帰条件が成立するまで「1」に設定され、それ以外の場合に「0」に設定される。即ち、F/CフラグXFCの値は、フューエルカット制御を実行すべきときに「1」に設定される。なお、F/CフラグXFCの値は、「機関10が搭載された図示しない車両のイグニッション・キー・スイッチ」がオフ位置からオン位置に切り換えられた際に実行されるイニシャルルーチンにより「0」に設定されるようになっている。
いま、図5に示した時刻t1以前であり、F/CフラグXFCの値が「0」であると仮定する。この場合、CPUは、以下に述べるステップ620乃至ステップ650の処理を順に行い、ステップ695に進んで本ルーチンを一旦終了する。
ステップ620:CPUは、「エアフローメータ51により計測された吸入空気量Ga、機関回転速度センサ53の信号に基いて取得された機関回転速度NE、及び、ルックアップテーブルMapMc」に基いて「燃料噴射気筒に吸入される空気量」である「筒内吸入空気量Mc(k)」を取得する。筒内吸入空気量Mc(k)は、各吸気行程に対応されながらRAM内に記憶される。筒内吸入空気量Mc(k)は、周知の空気モデル(吸気通路における空気の挙動を模した物理法則に従って構築されたモデル)により算出されてもよい。
ステップ630:CPUは、筒内吸入空気量Mc(k)を上流側目標空燃比abyfrで除することにより基本燃料噴射量Fbaseを求める。上流側目標空燃比abyfrは理論空燃比stoichに設定されている。
ステップ640:CPUは、基本燃料噴射量Fbaseをメインフィードバック量DFiにより補正する。より具体的には、CPUは、基本燃料噴射量Fbaseにメインフィードバック量DFiを加えることにより、最終燃料噴射量Fiを算出する。メインフィードバック量DFiについては後述する。
ステップ650:CPUは、最終燃料噴射量Fiの燃料を燃料噴射気筒に対応して設けられている燃料噴射弁25から噴射する。
<メインフィードバック量の算出>
CPUは図7にフローチャートにより示した「メインフィードバック量算出ルーチン」を所定時間の経過毎に繰り返し実行している。従って、所定のタイミングになると、CPUはステップ700から処理を開始し、ステップ705に進んで「メインフィードバック制御条件(上流側空燃比フィードバック制御条件)」が成立しているか否かを判定する。
メインフィードバック制御条件は以下の総ての条件が成立したときに成立する。
(A1)上流側空燃比センサ55が活性化している。
(A2)機関の負荷(負荷率)KLが閾値KLth以下である。
(A3)フューエルカット制御中でない(F/CフラグXFCの値が「1」でない。)。
なお、負荷率KLは、ここでは下記の(1)式により求められる。この負荷率KLに代え、アクセルペダル操作量Accpが用いられても良い。(1)式において、Mcは筒内吸入空気量であり、ρは空気密度(単位は(g/l))、Lは機関10の排気量(単位は(l))、「4」は機関10の気筒数である。
KL=(Mc/(ρ・L/4))・100% …(1)
いま、メインフィードバック制御条件が成立しているものとして説明を続ける。この場合、CPUはステップ705にて「Yes」と判定して以下に述べるステップ710乃至ステップ740の処理を順に行い、ステップ795に進んで本ルーチンを一旦終了する。
ステップ710:CPUは、下記(2)式に従ってフィードバック制御用出力値Vabyfcを取得する。(2)式において、Vabyfsは上流側空燃比センサ55の出力値、Vafsfbは下流側空燃比センサ56の出力値Voxsに基づいて算出されるサブフィードバック量、Vafsfbgはサブフィードバック量の学習値(サブFB学習値Vafsfbg)である。これらの値は、何れも現時点において得られている値である。サブフィードバック量Vafsfb及びサブFB学習値Vafsfbgの算出方法については、後述する。
Vabyfc=Vabyfs+(Vafsfb+Vafsfbg) …(2)
ステップ715:CPUは、下記(3)式に示したように、上記フィードバック制御用出力値Vabyfcを図3の実線CTにより示したテーブルMapabyfsに適用することにより、フィードバック制御用空燃比abyfscを得る。
abyfsc=Mapabyfs(Vabyfc) …(3)
ステップ720:CPUは、下記(4)式に従って、「現時点よりもNサイクル前の時点において燃焼室21に実際に供給された燃料の量」である「筒内燃料供給量Fc(k−N)」を求める。即ち、CPUは、「現時点よりもNサイクル(即ち、N・720°クランク角)前の時点における筒内吸入空気量Mc(k−N)」を「上記フィードバック制御用空燃比abyfsc」により除すことにより、筒内燃料供給量Fc(k−N)を求める。
Fc(k−N)=Mc(k−N)/abyfsc …(4)
このように、筒内燃料供給量Fc(k−N)を求めるために、現時点からNストローク前の筒内吸入空気量Mc(k−N)をフィードバック制御用空燃比abyfscで除すのは、「燃焼室21内での混合気の燃焼により生成された排ガス」が上流側空燃比センサ55に到達するまでに「Nストロークに相当する時間」を要しているからである。
ステップ725:CPUは、下記(5)式に従って、「現時点よりもNサイクル前の時点において燃焼室21に供給されるべきであった燃料の量」である「目標筒内燃料供給量Fcr(k−N)」を求める。即ち、CPUは、現時点からNストローク前の筒内吸入空気量Mc(k−N)を上流側目標空燃比abyfr(=stoich)で除すことにより、目標筒内燃料供給量Fcr(k−N)を求める。
Fcr=Mc(k−N)/abyfr …(5)
ステップ730:CPUは、上記(6)式に従って、筒内燃料供給量偏差DFcを取得する。即ち、CPUは、目標筒内燃料供給量Fcr(k−N)から筒内燃料供給量Fc(k−N)を減じることにより、筒内燃料供給量偏差DFcを求める。この筒内燃料供給量偏差DFcは、Nストローク前の時点で筒内に供給された燃料の過不足分を表す量となる。
DFc=Fcr(k−N)−Fc(k−N) …(6)
ステップ735:CPUは、上記(7)式に従って、メインフィードバック量DFiを求める。この(7)式において、Gpは予め設定された比例ゲイン、Giは予め設定された積分ゲインである。更に、(7)式の「値SDFc」は「筒内燃料供給量偏差DFcの積分値」である。つまり、CPUは、フィードバック制御用空燃比abyfscを上流側目標空燃比abyfrに一致させるための比例積分制御により「メインフィードバック量DFi」を算出する。
DFi=Gp・DFc+Gi・SDFc …(7)
ステップ740:CPUは、その時点における筒内燃料供給量偏差DFcの積分値SDFcに上記ステップ730にて求められた筒内燃料供給量偏差DFcを加えることにより、新たな筒内燃料供給量偏差の積分値SDFcを取得する。
以上により、メインフィードバック量DFiが比例積分制御により求められ、このメインフィードバック量DFiが前述した図6のステップ640の処理により最終燃料噴射量Fiに反映される。
ところで、上記(2)式の右辺の「サブフィードバック量Vafsfb及びサブFB学習値Vafsfbg」は、後述するように、「下流側空燃比センサ56の出力値Voxs」を「理論空燃比に相当する値である下流側目標値Voxsref」に一致させるための「補助的な補正量」と考えることができる。従って、フィードバック制御用空燃比abyfscは上流側空燃比センサ55の出力値Vabyfsに実質的に基づく値であるから、メインフィードバック量DFiは「上流側空燃比センサ55の出力値Vabyfsにより表される機関の空燃比」を「上流側目標空燃比abyfr(理論空燃比)」に一致させるための補正量であると言うことができる。
一方、図7のステップ705の判定時において、メインフィードバック制御条件が不成立であると、CPUはそのステップ705にて「No」と判定してステップ745に進み、メインフィードバック量DFiの値を「0」に設定する。次いで、CPUは、ステップ750にて筒内燃料供給量偏差の積分値SDFcに「0」を格納する。その後、CPUは、ステップ795に進んで本ルーチンを一旦終了する。このように、メインフィードバック制御条件が不成立であるとき、メインフィードバック量DFiは「0」に設定される。従って、基本燃料噴射量Fbaseのメインフィードバック量DFiによる補正は行わない。
<サブフィードバック量及びサブFB学習値の算出>
CPUは、「サブフィードバック量Vafsfb」及び「サブFB学習値Vafsfbg」を算出するために、図8示したルーチンを所定時間の経過毎に実行している。従って、所定のタイミングになると、CPUはステップ800から処理を開始し、ステップ805に進んで「サブフィードバック制御条件(下流側空燃比フィードバック制御条件)」が成立しているか否かを判定する。
サブフィードバック制御条件は以下の総ての条件が成立したときに成立する。
(B1)メインフィードバック制御条件が成立している。
(B2)下流側空燃比センサ56が活性化している。
(B3)上流側目標空燃比abyfrが理論空燃比stoichに設定されている。
いま、サブフィードバック制御条件が成立していると仮定して説明を続ける。この場合、CPUはステップ805にて「Yes」と判定し、以下に述べるステップ810乃至ステップ820の処理を順に行い、サブフィードバック量Vafsfbを算出する。
ステップ810:CPUは、下記(8)式に従って、「下流側目標値Voxsref」と「下流側空燃比センサ56の出力値Voxs」との差である「出力偏差量DVoxs」を取得する。下流側目標値Voxsrefは理論空燃比に相当する値Vst(0.5V)に設定されている。即ち、CPUは、「下流側目標値Voxsref」から「現時点の下流側空燃比センサ56の出力値Voxs」を減じることにより「出力偏差量DVoxs」を求める。なお、下流側目標値Voxsrefは値Vstよりも「僅かにリッチ側の空燃比に対応した値」に設定されてもよい。但し、この値も「上流側触媒43の所謂ウインドウ」の範囲内の空燃比に対応した値であるので、実質的に理論空燃比に相当した値である。
DVoxs=Voxsref−Voxs …(8)
ステップ815:CPUは、下記(9)式に従って、サブフィードバック量Vafsfbを求める。この(9)式において、Kpは予め設定された比例ゲイン(比例定数)、Kiは予め設定された積分ゲイン(積分定数)である。また、SDVoxsは、出力偏差量DVoxsの積分値である。
Vafsfb=Kp・DVoxs+Ki・SDVoxs …(9)
ステップ820:CPUは、「その時点における出力偏差量の積分値SDVoxs」に「上記ステップ810にて求めた出力偏差量DVoxs」を加えることにより、新たな出力偏差量の積分値SDVoxsを求める。
このように、CPUは、下流側空燃比センサ56の出力値Voxsを下流側目標値Voxsrefに一致させるための比例積分制御により「サブフィードバック量Vafsfb」を算出する。このサブフィードバック量Vafsfbは、上述した(2)式に示したように、フィードバック制御用出力値Vabyfcを算出するために使用される。なお、CPUは上記(9)式の右辺に微分項Kd・DDVoxを加えることにより、PID(比例積分微分制御)によりサブFB学習値Vafsfbgを算出してもよい。この場合、Kdは予め設定された微分ゲイン(定数)である。また、DDVoxsは、出力偏差量DVoxsの微分値(時間微分値)である。
次いで、CPUは、以下に述べるステップ825乃至ステップ840の処理を順に行うことにより「サブFB学習値Vafsfbg」を算出するとともに「サブフィードバック量Vafsfb」を補正し、その後、ステップ895に進んで本ルーチンを一旦終了する。
ステップ825:CPUは、その時点のサブFB学習値Vafsfbgを更新前学習値Vafsfbgbfとして格納する。
ステップ830:CPUは、下記(10)式に従ってサブFB学習値Vafsfbgを更新する。この(10)式の左辺Vafsfbg(k+1)は更新後のサブFB学習値Vafsfbgを表し、右辺のVafsfbg(k)は更新前のサブFB学習値Vafsfbgを表す。値αは0より大きく且つ1より小さい任意の値である。
Vafsfbg(k+1)=α・Vafsfbg +(1−α)・Ki・SDVoxs …(10)
(10)式から明らかなように、サブFB学習値Vafsfbgは「サブフィードバック量Vafsfbの積分項Ki・SDVoxs」に「ノイズ除去のためのフィルタ処理」を施した値である。換言すると、サブFB学習値Vafsfbgは、サブフィードバック量Vafsfbの定常成分(積分項)に応じた値である。サブFB学習値VafsfbgはバックアップRAMに格納される。
ステップ835:CPUは、下記(11)式に従ってサブFB学習値Vafsfbgの変更量(更新量)ΔGを算出する。
ΔG=Vafsfbg−Vafsfbgbf …(11)
ステップ840:CPUは、下記(12)式に従ってサブフィードバック量Vafsfbを変更量ΔGにより補正する。(12)式において、Vafsfb(k+1)は補正後のサブフィードバック量Vafsfbであり、Vafsfbg(k)は補正前のサブフィードバック量Vafsfbである。
Vafsfb(k+1)=Vafsfb(k)−ΔG …(12)
このステップ835及びステップ840の処理について説明する。上記(2)式に示したように、CPUは、「サブフィードバック量Vafsfb及びサブFB学習値Vafsfbg」を「上流側空燃比センサ55の出力値Vabyfs」に加えることにより、フィードバック制御用出力値Vabyfcを得る。サブFB学習値Vafsfbgはサブフィードバック量Vafsfbの積分項Ki・SDVoxs(定常成分)の一部を取り込んだ値である。従って、サブFB学習値Vafsfbgを更新した場合、サブフィードバック量Vafsfbをその更新分に応じて補正しないと、「更新後のサブFB学習値Vafsfbg及び更新後のサブフィードバック量Vafsfb」により二重の補正が行われる。従って、CPUは、サブFB学習値Vafsfbgを更新した場合、サブフィードバック量Vafsfbを「サブFB学習値Vafsfbgの更新分ΔG」に応じて補正する必要がある。
そこで、CPUは上記(11)及び上記(12)式に示したように、サブFB学習値Vafsfbgを変更量ΔGだけ増加するように更新したとき、サブフィードバック量Vafsfbを変更量ΔGだけ減少させる。(11)式において、Vafsfbgbfは更新直前のサブFB学習値Vafsfbgであり、Vafsfbgは更新直後のサブFB学習値Vafsfbgである。従って、変更量ΔGは正の値及び負の値の何れともなる。
以上の処理により、所定時間の経過毎にサブフィードバック量VafsfbとサブFB学習値Vafsfbgとが更新される。
一方、サブフィードバック制御条件が成立していない場合、CPUは図8のステップ805にて「No」と判定し、以下に述べるステップ845及びステップ850の処理を順に行い、ステップ895に進んで本ルーチンを一旦終了する。
ステップ845:CPUはサブフィードバック量Vafsfbの値を「0」に設定する。
ステップ850:CPUは出力偏差量の積分値SDVoxsの値を「0」に設定する。
これにより、上記(2)式から明らかなように、フィードバック制御用出力値Vabyfcは、上流側空燃比センサ55の出力値VabyfsとサブFB学習値Vafsfbgとの和となる。即ち、この場合、「サブフィードバック量Vafsfbの更新」及び「サブフィードバック量Vafsfbの最終燃料噴射量Fiへの反映」は停止される。但し、少なくとも、「サブフィードバック量Vafsfbの積分項」に対応する「サブFB学習値Vafsfbg」は最終燃料噴射量Fiに反映される。
<フューエルカット制御>
CPUは、フューエルカット制御を実行するために、図9示したフューエルカット制御ルーチンを所定時間の経過毎に実行している。従って、所定のタイミングになると、CPUはステップ900から処理を開始し、ステップ910に進んでF/CフラグXFCの値が「1」であるか否かを判定する。
いま、F/CフラグXFCの値が「0」である(即ち、フューエルカット制御が実行されていない)と仮定する。この場合、CPUはステップ910にて「No」と判定してステップ920に進み、フューエルカット開始条件が成立しているか否かを判定する。フューエルカット開始条件は、以下に述べる条件1及び条件2の双方が成立したときにのみ成立する。
(条件1)スロットル弁34の開度TAが「ゼロ(又は所定開度TAth以下)」であること。
(条件2)機関回転速度NEが「フューエルカット開始回転速度NEfcth以上」であること。
このとき、フューエルカット開始条件が成立していなければ、CPUはステップ920にて「No」と判定し、ステップ995に直接進んで本ルーチンを一旦終了する。よって、F/CフラグXFCの値は「0」に維持される。
これに対し、フューエルカット開始条件が成立していると、CPUはステップ920にて「Yes」と判定し、ステップ930に進んでF/CフラグXFCの値を「1」に設定する。これにより、CPUは図6のステップ610にて「No」と判定し、ステップ695に直接進むようになる。この結果、ステップ650が実行されないので、燃料噴射が停止される(フューエルカット制御が実行される。)。
再び、図9を参照すると、CPUはステップ930に続くステップ940に進み、第1異常状態判定実施フラグXIL(以下、「判定実施フラグXIL」と表記する。)の値を「1」に設定する。この判定実施フラグXILの値が「1」に設定されると、「上流側空燃比センサ55の出力値Vabyfsが正常値から乖離している第1異常状態」が発生しているか否かの判定が実行される(後述する図10を参照。)。その後、CPUはステップ995に進み、本ルーチンを一旦終了する。
このようにF/CフラグXFCの値が「1」に設定された後、CPUが図9に示したルーチンの処理を再び開始すると、CPUはステップ900に続くステップ910にて「Yes」と判定し、ステップ950に進む。そして、CPUはそのステップ950にてフューエルカット復帰条件(フューエルカット制御終了条件)が成立したか否かを判定する。
フューエルカット復帰条件は、以下に述べる条件3及び条件4のうちの少なくとも一つが成立したときに成立する。
(条件3)スロットル弁開度TAが「ゼロ(又は所定開度TAth)」より大きいこと。
(条件4)機関回転速度NEが「フューエルカット復帰回転速度NEfcre」より小さいこと。なお、フューエルカット復帰回転速度NEfcreは、フューエルカット開始回転速度NEfcthよりも所定回転速度ΔNだけ小さい回転速度である。
いま、フューエルカット復帰条件が成立していないと仮定する。この場合、CPUはステップ950にて「No」と判定し、ステップ995に直接進んで本ルーチンを一旦終了する。従って、F/CフラグXFCの値は「1」に維持される。その結果、フューエルカット制御が継続して実行される。
これに対し、フューエルカット復帰条件が成立すると、CPUはステップ950に進んだとき、そのステップ950にて「Yes」と判定してステップ960に進み、F/CフラグXFCの値を「0」に設定する。その後、CPUはステップ995に進んで本ルーチンを一旦終了する。この結果、CPUは図6のステップ610にて「Yes」と判定してステップ620乃至ステップ650の処理を実行するようになる。従って、燃料噴射が再開される(フューエルカット制御が停止される。)。
<第1異常状態の判定とサブFB学習値の設定>
更に、CPUは図10に示した「サブFB学習値設定ルーチン(第1異常状態判定ルーチン)」を所定時間の経過毎に繰り返し実行している。従って、所定のタイミングになると、CPUはステップ1000から処理を開始してステップ1010に進み、判定実施フラグXILの値が「1」であるか否かを判定する。このとき、判定実施フラグXILの値が「1」でなければ、CPUはステップ1010にて「No」と判定し、ステップ1060に進んで判定実施フラグXILの値を「0」に設定する。その後、CPUは、ステップ1095に進んで本ルーチンを一旦終了する。
これに対し、フューエルカット開始条件が成立することに伴って、前述した図9のステップ940の処理が実行されることにより判定実施フラグXILの値が「1」に設定されると、CPUは図10のステップ1010にて「Yes」と判定し、次のステップ1020及びステップ1030の処理を実行する。なお、CPUは、ステップ1010にて「Yes」と判定してから所定時間(フューエルカット制御によるガスが燃焼室21から上流側空燃比センサ55に到達するのに要する時間よりも長い時間)後に、以下のステップ1020以降に進むように構成されてもよい。換言すると、本例においては、この所定時間は実質的に「0」であると想定されている。また、この点については、後述他の実施形態においても同様に適用される。
ステップ1020:CPUは上流側空燃比センサ55の現時点における出力値Vabyfsを取得する。
ステップ1030:CPUは、「ステップ1020にて取得した出力値Vabyfs」から「フューエルカット中正常値Vabyfsfc(以下、「FC中正常値Vabyfsfc」と称呼する。)」を減じた値を、センサ出力変化量ΔVとして取得する。このFC中正常値Vabyfsfcは、図2に示したように、上流側空燃比センサ55が正常である場合であってフューエルカット制御が実行されたとき(即ち、上流側空燃比センサ55に所定の(酸素濃度の)ガスである大気が到達したとき)に上流側空燃比センサ55が出力する出力値Vabyfsである。
次に、CPUはステップ1040に進み、センサ出力変化量ΔVの大きさ(絶対値)が異常判定閾値ε(ε>0)より大きいか否かを判定する。このとき、センサ出力変化量ΔVの大きさが異常判定閾値ε以下であると、第1異常状態が発生していないと判定することができる。従って、センサ出力変化量ΔVの大きさが異常判定閾値ε以下である場合、CPUはステップ1040にて「No」と判定し、ステップ1060に進んで判定実施フラグXILの値を「0」に設定する。その後、CPUは、ステップ1095に進んで本ルーチンを一旦終了する。
これに対し、第1異常状態のうちの「センサ出力値拡大異常」が発生していると、図2に示したように、「ステップ1020にて取得した出力値Vabyfs」はFC中正常値Vabyfsfcよりも相当に大きくなる。即ち、センサ出力変化量ΔVは異常判定閾値εよりも大きくなる。この場合、CPUはステップ1040にて「Yes」と判定しステップ1050に進む。同様に、第1異常状態のうちの「センサ出力値縮小異常」が発生していると、図2に示したように、「ステップ1020にて取得した出力値Vabyfs」はFC中正常値Vabyfsfcよりも相当に小さくなる。即ち、センサ出力変化量ΔVの絶対値は異常判定閾値εよりも大きくなる。この場合にも、CPUはステップ1040にて「Yes」と判定しステップ1050に進む。
CPUはステップ1050にてサブFB学習値Vafsfbgの収束予想値Vafsfbgyを決定するとともに、その収束予想値VafsfbgyをサブFB学習値Vafsfbgとして設定する。この結果、サブFB学習値Vafsfbgは収束予想値Vafsfbgyに一致せしめられる。
より具体的に述べると、CPUはセンサ出力変化量ΔVと収束予想値Vafsfbgyとの関係をルックアップテーブルの形式にてROM内に記憶している。収束予想値Vafsfbgyとは、上流側空燃比センサ55のフューエルカット制御中の出力値VabyfsがFC中正常値Vabyfsfcからセンサ出力変化量ΔVだけ乖離するような第1異常状態となった場合に、サブFB学習値Vafsfbgが収束するであろう収束値のことである。このテーブルのデータは、予め実験により求められたデータである。
このテーブルによれば、図10のブロック1050内に示したように、センサ出力変化量ΔVが「0」であるとき、収束予想値Vafsfbgyは基準値Vafsfbg0となる。更に、このテーブルによれば、収束予想値Vafsfbgyは、センサ出力変化量ΔVが大きくなるほど大きくなるように決定される。即ち、例えば、センサ出力値拡大異常が生じているためにセンサ出力変化量ΔVがΔVL(ΔVL>0)であるとき、収束予想値Vafsfbgyは「基準値Vafsfbg0よりも大きいVafsfbgL」に設定される。更に、例えば、センサ出力値縮小異常が生じているためにセンサ出力変化量ΔVがΔVR(ΔVR<0)であるとき、収束予想値Vafsfbgyは「基準値Vafsfbg0よりも小さいVafsfbgyR」に設定される。その後、CPUはステップ1060に進んで判定実施フラグXILの値を「0」に設定し、ステップ1095に進んで本ルーチンを一旦終了する。
先に説明した図5のタイムチャートは、センサ出力変化量ΔVがΔVLとなるような「センサ出力値拡大異常」が発生した場合のサブFB学習値Vafsfbgの変化を示している。この図5に示したように、第1制御装置によれば、「センサ出力値拡大異常」が発生したと判定されたとき(時刻t1の直後)、サブFB学習値Vafsfbgは収束予想値Vafsfbgyである値VafsfbgLに一致させられる。従って、フューエルカット制御の終了後にサブフィードバック制御が再開される時点(時刻t2)から、サブFB学習値Vafsfbgは適正値(収束値)に近しい値となる。この結果、エミッションが悪化することを回避することができる。
以上、説明したように、第1制御装置は、
前記下流側空燃比センサの出力値を下流側目標値に一致させるためのサブフィードバック量を算出するサブフィードバック量算出手段(図8のステップ810乃至ステップ820を参照。)と、
前記サブフィードバック量に含まれる定常成分に応じた値に基づいて学習値を更新する学習を行うとともに同サブフィードバック量を同更新した学習値に応じて補正する学習手段と(図8のステップ825乃至ステップ840を参照。)、
前記上流側空燃比センサの出力値と前記補正されたサブフィードバック量と前記更新された学習値とに基づき前記機関に供給される混合気の空燃比を理論空燃比に一致させる空燃比フィードバック制御を実行する空燃比制御手段と(図7の各ステップ及び図6のステップ640を参照。)、
を備えた内燃機関の空燃比制御装置であって、
前記上流側空燃比センサの実際の出力値である実出力値が同上流側空燃比センサが正常であるときの同上流側空燃比センサの出力値である正常値と相違する第1異常状態が発生したか否かを判定する第1異常判定手段(図10のステップ1020乃至ステップ1040を参照。)と、
前記上流側空燃比センサに所定のガス(例えば、フューエルカット制御中の排気、即ち、大気)が到達している時点である所定ガス到達時における前記上流側空燃比センサの出力値と、前記学習値の収束値である収束予想値との関係(図10のステップ1050のブロック内に示された関係)を予め記憶するとともに、前記第1異常状態が発生したと判定されたとき同所定ガス到達時における前記実出力値(図10のステップ1020にて取得される出力値Vabyfs)と前記関係とに基づいて前記学習値の実際の収束予想値を取得し且つ前記学習値を同取得した実際の収束予想値に設定する学習値設定手段と(図10のステップ1040及びステップ1050を参照。)、
を備えた空燃比制御装置である。
従って、上流側空燃比センサ55が第1異常状態となったとき、サブFB学習値Vafsfbgは予想される収束値(収束予想値Vafsfbgy)に直ちに変更させられる。従って、サブFB学習値Vafsfbgは、第1異常状態が発生した直後において適正値に近い値となる。これにより、第1制御装置は、第1異常状態発生時点からサブFB学習値Vafsfbgが収束する時点までの時間を短くすることができる。その結果、「サブFB学習値Vafsfbgが適正値と乖離していることに起因するエミッションの悪化」を回避することができる。
<第2実施形態>
以下、本発明の第2実施形態に係る内燃機関の空燃比制御装置(以下、単に「第2制御装置」と称呼する。)について説明する。第2制御装置は、第1制御装置が収束予想値Vafsfbgyを決定する際に使用するテーブル(図10のステップ1050のブロック内に示したテーブル)を、図11に示したテーブルに置換する点においてのみ、第1制御装置と相違している。
図11に示したテーブルは、収束予想値Vafsfbgyを、実際の機関回転速度NEが属する領域毎に定めたテーブルである。収束予想値Vafsfbgyは、機関回転速度NEに応じて変化する。より具体的に述べると、収束予想値Vafsfbgyは、機関回転速度NEが1500rpmより小さい場合には図11の線L1により示したように変化する。収束予想値Vafsfbgyは、機関回転速度NEが1500rpm以上であり且つ3000rpmより小さい場合には図11の線L2により示したように変化する。更に、収束予想値Vafsfbgyは、機関回転速度NEが3000rpm以上である場合には図11の線L3により示したように変化する。
従って、第2制御装置のCPUは、ステップ1050に進んだとき、その時点の機関回転速度NEと、センサ出力変化量ΔVと、図11に示したテーブルとに基いて、収束予想値Vafsfbgyを取得し、その収束予想値VafsfbgyをサブFB学習値Vafsfbgに格納する。この結果、第1異常状態発生時における収束予想値Vafsfbgyが機関回転速度NEに応じて相違する場合であっても、第1異常状態発生直後におけるサブFB学習値Vafsfbgを適正値に近い値に設定することができる。
なお、第2制御装置は、次のように構成されることもできる。即ち、第2制御装置は、第1異常状態が発生したと判定したとき(即ち、ステップ1050に進んだとき)、センサ出力変化量ΔVと図11に示したテーブルとに基いて「機関回転速度NEの領域毎に収束予想値Vafsfbgyを決定する」とともに、バックアップRAMにそれらの収束予想値Vafsfbgyを格納させておく。そして、その時点以降において、機関回転速度NEが異なる領域へと変化する毎に、その変化した領域に対応する収束予想値VafsfbgyをバックアップRAMから読み出し、その読み出した収束予想値VafsfbgyをサブFB学習値Vafsfbgに設定するように構成されてもよい。
更に、図11に示したテーブルは、収束予想値Vafsfbgyを、機関10の負荷KLが属する領域毎に定めるテーブルに置換することもできる。この場合、第2制御装置は、第1異常状態が発生したと判定したとき(即ち、ステップ1050に進んだとき)、センサ出力変化量ΔVとその置換したテーブルとに基いて「機関10の負荷KLの領域毎に収束予想値Vafsfbgyを決定する」とともに、バックアップRAMにそれらの収束予想値Vafsfbgyを格納させておく。そして、その時点以降において、機関の負荷KLが異なる領域へと変化する毎に、その変化した領域に対応する収束予想値VafsfbgyをバックアップRAMから読み出し、その読み出した収束予想値VafsfbgyをサブFB学習値Vafsfbgに設定するように構成される。
加えて、図11に示したテーブルは、収束予想値Vafsfbgyを、機関回転速度NEと機関10の負荷KLとにより定まる運転状態が属する領域毎に定めるテーブルに置換することもできる。この場合、第2制御装置は、第1異常状態が発生したと判定したとき(即ち、ステップ1050に進んだとき)、センサ出力変化量ΔVとその置換したテーブルとに基いて「機関10の負荷KLの領域毎に収束予想値Vafsfbgyを決定する」とともに、バックアップRAMにそれらの収束予想値Vafsfbgyを格納させておく。そして、その時点以降において、機関回転速度NEと機関10の負荷KLとにより定まる運転状態が変化する毎に、その変化した領域に対応する収束予想値VafsfbgyをバックアップRAMから読み出し、その読み出した収束予想値VafsfbgyをサブFB学習値Vafsfbgに設定するように構成される。
<第3実施形態>
以下、本発明の第3実施形態に係る内燃機関の空燃比制御装置(以下、単に「第3制御装置」と称呼する。)について説明する。
(第3制御装置の作動の概要)
サブFB学習値Vafsfbgは、上述した「センサ出力値拡大異常及びセンサ出力値縮小異常等」の「第1異常状態」が発生した場合のみでなく、第1異常状態とは異なる他の異常状態(第2異常状態)が発生した場合にも、その第2異常状態が発生する前とは異なる値へと収束する。
例えば、複数の気筒のうちの特定の気筒に対して設けられている燃料噴射弁25が「指示される燃料量よりも多量の燃料」を噴射する異常状態(燃料噴射弁リッチずれ異常)が発生した場合、その特定気筒から排出されるHC,CO及びH2は急激に増大する。一方、水素分子は、その分子径が他の未燃物に比べて小さいので、上流側空燃比センサ55の拡散抵抗層をより迅速に拡散する。その結果、上流側空燃比センサ55は、分子径の小さいH2の影響を受け、実際の空燃比の平均値よりもリッチ側の空燃比に相当する出力値Vabyfsを発生するようになる。
この結果、その上流側空燃比センサ55の出力値に基くメインフィードバック制御により機関の空燃比の中心は理論空燃比よりもリーン側に偏移する。従って、サブフィードバック量Vafsfbは「燃料噴射弁リッチずれ異常」が発生する直前に比べ「機関10の空燃比をよりリッチ側に移行させる値」へと変化する。よって、サブFB学習値Vafsfbgも「機関10の空燃比をよりリッチ側に移行させる値」へと収束する。
更に、例えば、失火が発生した場合(混合気が燃焼室において燃焼しなかった場合)、サブFB学習値Vafsfbgは、失火が発生する直前のサブFB学習値Vafsfbgに比べ「機関の空燃比をよりリーン側へ移行する値」に収束することがある。
これらの「燃料噴射弁のリッチずれ異常(空燃比気筒間インバランス)」及び「失火」等は、上述した第2異常状態の代表例である。そして、このような第2異常状態が発生している場合に第1異常状態が重ねて発生すると、サブFB学習値Vafsfbgは、図10のステップ1050にて決定(予想)される「第1異常発生時(第1異常状態単独発生時)における収束予想値Vafsfbgy」とは異なる値に収束する。従って、第2異常状態が発生している場合に第1異常状態が重ねて発生した場合、サブFB学習値Vafsfbgを「第1異常発生時が単独で発生した場合に予想される収束予想値Vafsfbgy」に設定すると、却ってサブFB学習値Vafsfbgを「実際の収束値」から遠ざけてしまう虞がある。
図12は、このような状況におけるサブFB学習値Vafsfbgの一例を示すタイムチャートである。図12に示した例においては、時刻t1にて第2異常状態としての失火が発生している。そのため、サブFB学習値Vafsfbgは時刻t1以降において値Vafsfbg0から値VafsfbgAに向かって減少し、時刻t2以降において値VafsfbgAに収束する。
その後、時刻t3にて第1異常状態としてのセンサ出力値拡大異常が発生する。この場合、第1制御装置は、時刻t3にてサブフィードバック量Vafsfbを収束予想値Vafsfbgyに設定する。
しかしながら、実際には、サブFB学習値Vafsfbgは「値VafsfbgAと値Vafsfbgyとの間の値VafsfbgBに収束する。従って、第1制御装置は、時刻t3においてサブFB学習値Vafsfbgを「実際の収束値」から却って遠ざけてしまう。
そこで、第3制御装置は、第2異常状態が発生している場合に第1異常状態が重ねて発生した場合、サブFB学習値Vafsfbgの「収束予想値Vafsfbgy」への設定を行わないように構成されている(図3の時刻t3以降における実線を参照。)。従って、サブフィードバック量Vafsfbが実際の収束値から却って乖離してしまう可能性を低減することができる。その結果、エミッションが却って悪化することを回避することができる。
(実際の作動)
次に、第3制御装置の実際の作動について説明する。
第3制御装置のCPUは、図6乃至図9に示したルーチンを第1制御装置のCPUと同様に実行するようになっている。更に、第3制御装置のCPUは、図10に代わる図13に示した「サブFB学習値設定ルーチン(第1異常状態判定ルーチン)」を所定時間の経過毎に繰り返し実行している。図6乃至図9に示したルーチンについては説明済みである。従って、以下、図13に示されたルーチンに焦点を当てて説明する。なお、図13に示したステップのうち図10に示したステップと同じ処理を行うステップには、図10のそのようなステップに付された符号と同一の符号が付されている。
所定のタイミングになると、CPUは図13のステップ1300から処理を開始してステップ1010に進み、判定実施フラグXILの値が「1」であるか否かを判定する。前述したように、判定実施フラグXILの値はフューエルカット開始条件が成立することに伴って、図9のステップ940の処理により「1」に設定される。
いま、判定実施フラグXILの値が「1」でないと仮定する。この仮定に従えば、CPUはステップ1010にて「No」と判定し、ステップ1060に進んで判定実施フラグXILの値を「0」に設定する。その後、CPUは、ステップ1395に進んで本ルーチンを一旦終了する。
一方、フューエルカット開始条件が成立することに伴って、図9のステップ940の処理が実行されることにより判定実施フラグXILの値が「1」に設定されると、CPUは図13のステップ1010にて「Yes」と判定し、次のステップ1020及びステップ1030の処理を実行する。この結果、実際の出力値VabyfsからFC中正常値Vabyfsfcを減じた値である「センサ出力変化量ΔV」が取得される。
次に、CPUはステップ1040に進み、センサ出力変化量ΔVの大きさ(絶対値)が異常判定閾値ε(ε>0)より大きいか否かを判定する。このとき、センサ出力変化量ΔVの大きさが異常判定閾値ε以下であると、第1異常状態が発生していないと判定することができる。従って、センサ出力変化量ΔVの大きさが異常判定閾値ε以下である場合、CPUはステップ1040にて「No」と判定し、ステップ1060に進んで判定実施フラグXILの値を「0」に設定する。その後、CPUは、ステップ1395に進んで本ルーチンを一旦終了する。
これに対し、第1異常状態が発生していると、センサ出力変化量ΔVの大きさは異常判定閾値εより大きくなる。この場合、CPUはステップ1040にて「Yes」と判定してステップ1310に進み、上述した第2異常状態が発生しているか否かを判定する。
第2異常状態が発生しているか否かは、図示しない「第2異常状態発生判定ルーチン」により判定されている。例えば、CPUは、サブFB学習値Vafsfbgが第2異常状態判定閾値以上になったとき、第2異常状態が発生したと判定するようになっている。或いは、CPUは、機関回転速度NEの変化速度に基いて「第2異常状態としての失火」が発生しているか否かを判定することもできる。
この時点において、第2異常状態が発生していなければ、CPUはステップ1310にて「No」と判定し、前述したステップ1050及びステップ1060の処理を実行し、その後、ステップ1395に進んで本ルーチンを一旦終了する。この結果、第1制御装置と同様、第1異常状態が単独で発生した直後にサブFB学習値Vafsfbgは収束予想値Vafsfbgyに設定される。従って、第3制御装置も、第1異常状態が単独にて発生した直後においてエミッションが悪化することを回避することができる。
一方、CPUがステップ1310の処理を実行する時点において、第2異常状態が発生している場合、CPUはそのステップ1310にて「Yes」と判定してステップ1060に直接進み、その後、ステップ1395に進んで本ルーチンを一旦終了する。この結果、第1異常状態が発生したと判定された場合(ステップ1040にて「Yes」と判定された場合)であっても、第2異常状態が既に発生しているときには、サブFB学習値Vafsfbgは収束予想値Vafsfbgyに設定されない。
この結果、第3制御装置は、サブFB学習値Vafsfbgが実際の収束値から却って乖離してしまう可能性を低減することができる。その結果、エミッションが却って悪化することを回避することができる。
<第4実施形態>
以下、本発明の第4実施形態に係る内燃機関の空燃比制御装置(以下、単に「第4制御装置」と称呼する。)について説明する。
(第4制御装置の作動の概要)
第4制御装置は、第2異常状態が発生している場合に第1異常状態が重ねて発生したとき、その第1異常状態が発生したことに伴ってサブFB学習値Vafsfbgの収束値が変化する量だけ、サブFB学習値Vafsfbgを変更する装置である。
即ち、第4制御装置は、第1異常状態が発生した場合においてその異常の程度を表す「上記センサ出力変化量ΔV」とサブFB学習値Vafsfbgの変化量との関係(以下、「学習値差関係」と称呼する。)を予め記憶しておく。
より具体的に述べると、学習値差関係は、下記差Δ1と下記差Δ2との関係である。
差Δ1は、所定のガス(例えば、フューエルカット制御中のガスである大気)が上流側空燃比センサ55に到達した時(所定ガス到達時)における「上流側空燃比センサ55の出力値Vabyfs」と、「所定ガス到達時における正常値(FC中正常値Vabyfsfc)」と、の差である。差Δ1はフューエルカット制御中に得られる差であるとき、上記差ΔVと一致する。
差Δ2は、「上流側空燃比センサ55が上記差Δ1を生じるような第1異常状態が単独で発生した場合におけるサブFB学習値Vafsfbgの収束予想値Vafsfbgy」と、「上流側空燃比センサ55が正常である場合に予想されるサブFB学習値Vafsfbgの収束値(正常時収束予想値)Vafsfbg0」と、の差である。
そして、第4制御装置は、第1異常状態発生時に「上記差Δ1を取得する」とともに、上記学習値差関係と取得した差Δ1とから差Δ2を求め、その時点のサブFB学習値Vafsfbgに「求めた差Δ2」を加えた値を新たなサブFB学習値Vafsfbgとして設定する。第1異常状態発生時点のサブFB学習値Vafsfbgは、それ以前に第2異常状態が発生している場合、その第2異常状態が発生した状態におけるサブFB学習値Vafsfbgの収束値近傍の値になっている可能性が高い。従って、第4制御装置によれば、第2異常状態が発生しているときに第1異常状態が重ねて発生した場合においても、サブFB学習値Vafsfbgを適正値に直ちに近づけることができる。従って、エミッションが悪化することを回避することができる。
図14は、このような状況におけるサブFB学習値Vafsfbgの一例を示すタイムチャートである。図14に示した例においては、時刻t1にて第2異常状態としての失火が発生している。そのため、サブFB学習値Vafsfbgは時刻t1以降において値Vafsfbg0から値VafsfbgAに向かって減少し、時刻t2以降において値VafsfbgAに収束する。
その後、時刻t3にて第1異常状態としてのセンサ出力値拡大異常が発生する。この場合、上記第3実施形態に係る第3制御装置は、時刻t3にてサブフィードバック量Vafsfb変化させない。そのため、サブFB学習値Vafsfbgは時刻t4にて値VafsfbgBに収束する。
これに対し、第4制御装置は、時刻t3において「サブFB学習値Vafsfbg」を「差Δ2」だけ変更(この場合、増大)する(図14の実線を参照。)。その結果、サブFB学習値Vafsfbgが実際の収束値に速やかに近づくので、エミッションが却って悪化することを回避することができる。
(実際の作動)
次に、第4制御装置の実際の作動について説明する。
第4制御装置のCPUは、図6乃至図9に示したルーチンを第1制御装置のCPUと同様に実行するようになっている。更に、第4制御装置のCPUは、図10に代わる図15に示した「サブFB学習値設定ルーチン(第1異常状態判定ルーチン)」を所定時間の経過毎に繰り返し実行している。図6乃至図9に示したルーチンについては説明済みである。従って、以下、図15に示されたルーチンに焦点を当てて説明する。なお、図15に示したステップのうち図10に示したステップと同じ処理を行うステップには、図10のそのようなステップに付された符号と同一の符号が付されている。
所定のタイミングになると、CPUは図15のステップ1500から処理を開始してステップ1010に進み、判定実施フラグXILの値が「1」であるか否かを判定する。前述したように、判定実施フラグXILの値はフューエルカット開始条件が成立することに伴って、図9のステップ940の処理により「1」に設定される。
いま、判定実施フラグXILの値が「1」でないと仮定する。この仮定に従えば、CPUはステップ1010にて「No」と判定し、ステップ1060に進んで判定実施フラグXILの値を「0」に設定する。その後、CPUは、ステップ1595に進んで本ルーチンを一旦終了する。
一方、フューエルカット開始条件が成立することに伴って、図9のステップ940の処理が実行されることにより判定実施フラグXILの値が「1」に設定されると、CPUは図15のステップ1010にて「Yes」と判定し、次のステップ1020及びステップ1030の処理を実行する。この結果、実際の出力値VabyfsからFC中正常値Vabyfsfcを減じた値である「センサ出力変化量ΔV=Δ1」が取得される。
次に、CPUはステップ1040に進み、センサ出力変化量ΔVの大きさ(絶対値)が異常判定閾値ε(ε>0)より大きいか否かを判定する。このとき、センサ出力変化量ΔVの大きさが異常判定閾値ε以下であると、第1異常状態が発生していないと判定することができる。従って、センサ出力変化量ΔVの大きさが異常判定閾値ε以下である場合、
CPUはステップ1040にて「No」と判定し、ステップ1060に進んで判定実施フラグXILの値を「0」に設定する。その後、CPUは、ステップ1595に進んで本ルーチンを一旦終了する。
これに対し、第1異常状態が発生していると、センサ出力変化量ΔVの大きさは異常判定閾値εより大きくなる。この場合、CPUはステップ1040にて「Yes」と判定してステップ1510に進み、上述した「学習値差関係」に「上記ステップ1030にて取得したセンサ出力変化量ΔV」を適用することにより「上記差Δ2(即ち、サブFB学習値Vafsfbgの補正量ΔVafsfbg)」を取得する。本例において、差Δ2(補正量ΔVafsfbg)は、センサ出力変化量ΔVが大きいほど大きくなる。また、差Δ2(補正量ΔVafsfbg)は、センサ出力変化量ΔVが正の値のとき正の値をとり、センサ出力変化量ΔVが負の値のとき正の値をとる。なお、この場合においても、上記第2実施形態のように、学習値差関係を、更に、機関回転速度NE領域別及び/または機関の負荷KL別に設定しておいてもよい。
次いで、CPUはステップ1520に進み、その時点のサブFB学習値Vafsfbgに差Δ2(補正量ΔVafsfbg)を加えることによりサブFB学習値Vafsfbgを更新する。即ち、サブFB学習値Vafsfbgに、「その時点の直前のサブFB学習値Vafsfbgと差Δ2との和」を設定する。その後、CPUはステップ1595に進んで本ルーチンを一旦終了する。
この結果、第1異常状態が発生したと判定されたとき、学習値Vafsfbgは差Δ2だけ補正(増大又は減少)させられる。その差Δ2は、第1異常状態が単独で発生した場合における学習値Vafsfbgの変化量である。従って、第4制御装置によれば、第1異常状態が発生した時点において第2異常状態が発生しているか否かに関わらず、サブFB学習値Vafsfbgは直ちに適正値に近づく。よって、エミッションが悪化することを回避することができる。
以上、説明したように、本発明の各実施形態に係る空燃比制御装置は、上流側空燃比センサ55に第1異常状態が発生した場合において、サブFB学習値Vafsfbgを速やかに適正値(収束値)に近づけることができる。従って、それらの空燃比制御装置は、「サブFB学習値Vafsfbgが適正値から乖離することに起因するエミッションの悪化」を回避することができる。
本発明の範囲内において種々の変形例を採用することができる。例えば、上記各実施形態に係る空燃比制御装置は、第1異常状態が発生した時点から所定時間が経過するまでの間(第1期間)、サブFB学習値Vafsfbgの更新速度を第1期間以外の期間におけるサブFB学習値Vafsfbgの更新速度よりも上昇させてもよい。サブFB学習値Vafsfbgの更新速度は、例えば、図8のステップ830における値αを小さい値に変更することにより容易に上昇させることができる。これによれば、第1異常状態発生後からサブFB学習値Vafsfbgが収束するまでの時間を一層短くすることができる。
また、例えば、空燃比フィードバック制御は、例えば特開2005−273524に開示されているように、上流側空燃比センサの出力値をハイパスフィルタ処理した値に基くメインフィードバック量と、下流側空燃比センサの出力値をローパスフィルタ処理した値に基づくサブフィードバック量と、を独立して算出し、それらに基いて空燃比フィードバック制御を実行する態様でもよい。更に、空燃比フィードバック制御は、例えば特開平06−010738号公報に開示されているように、下流側空燃比センサ56の出力値Voxsに基づいてサブフィードバック量を算出し、そのサブフィードバック量により上流側空燃比センサの出力値に基づいて作成されるメインフィードバック量(空燃比補正係数)を変更する態様であってもよい。
加えて、上記各空燃比制御装置は、第1異常状態の判定を、フューエルカット制御中に実行していた。これに代え、上記空燃比制御装置は、基準用上流側空燃比センサを上記上流側空燃比センサ55に加えて上流側空燃比センサ55に隣接する位置に配設しておき、その基準用上流側空燃比センサの出力値と上流側空燃比センサ55の出力値との差に基いて第1異常状態が発生したか否かを判定するように構成されてもよい。
10…内燃機関、20…本体部、21…燃焼室、25…燃料噴射弁、30…吸気系統、34…スロットル弁、40…排気系統、41…エキゾーストマニホールド、42…エキゾーストパイプ、43…上流側触媒、44…下流側触媒、55…上流側空燃比センサ、56…下流側空燃比センサ、60…電気制御装置。