以下、本発明による内燃機関の空燃比制御装置の実施形態について図面を参照しつつ説明する。図1は、本発明の実施形態による空燃比制御装置を火花点火式多気筒(4気筒)内燃機関10に適用したシステムの概略構成を示している。この内燃機関10は、シリンダブロック、シリンダブロックロワーケース、及びオイルパン等を含むシリンダブロック部20と、シリンダブロック部20の上に固定されるシリンダヘッド部30と、シリンダブロック部20にガソリン混合気を供給するための吸気系統40と、シリンダブロック部20からの排ガスを外部に放出するための排気系統50とを含んでいる。なお、図1は、4気筒(#1気筒〜#4気筒)のうちの任意の一つの気筒に関する構成のみを示しているが、他の3つの気筒に関する構成についても同様である。
シリンダブロック部20は、シリンダ21、ピストン22、コンロッド23、及びクランク軸24を含んでいる。ピストン22はシリンダ21内を往復動し、ピストン22の往復動がコンロッド23を介してクランク軸24に伝達され、これにより同クランク軸24が回転するようになっている。シリンダ21とピストン22のヘッドは、シリンダヘッド部30とともに燃焼室25を形成している。
シリンダヘッド部30は、燃焼室25に連通した吸気ポート31、吸気ポート31を開閉する吸気弁32、吸気弁32を駆動する吸気弁駆動装置33、燃焼室25に連通した排気ポート34、排気ポート34を開閉する排気弁35、排気弁35を駆動する排気弁駆動装置36、点火プラグ37、点火プラグ37に与える高電圧を発生するイグニッションコイルを含むイグナイタ38、及び燃料を吸気ポート31内に噴射するインジェクタ(燃料噴射手段)39を備えている。イグナイタ38、及びインジェクタ39はそれぞれ、後述する電気制御装置70からの指示により駆動されるようになっている。
吸気弁駆動装置33(排気弁駆動装置36についても同様である。)は、気筒毎に、吸気弁32(排気弁35)を中立位置に付勢する図示しない2つのスプリングと、同吸気弁32(排気弁35)を開弁方向又は閉弁方向に付勢する電磁力をそれぞれ発生する図示しない2つの電磁石とを備えていて、後述する電気制御装置70からの指示により同2つの電磁石への通電を制御することで吸気弁32(排気弁35)のリフト量を制御できるようになっている。
また、吸気弁駆動装置33(排気弁駆動装置36についても同様である。)は、機関10の運転状態に応じた電気制御装置70からの指示に応じて、4つの気筒についての吸気弁32(排気弁35)の全てに対してクランク軸24の回転に応じた所定のリフト量制御を実行する全気筒稼動状態と、4つの気筒のうち電気制御装置70からの指示により指定された一つの気筒(休止気筒)についての吸気弁32(排気弁35)のみを閉弁状態に維持するとともに他の3つの気筒についての吸気弁32(排気弁35)に対しては前記所定のリフト量制御と同一の制御を実行する一部気筒休止状態と、の何れか一方の状態に制御されるようになっている。
即ち、一部気筒休止状態において、前記休止気筒についての吸気弁32、及び排気弁35は共に閉弁状態に維持されるようになっている。また、電気制御装置70からの指示により、この休止気筒についてのイグナイタ38、及びインジェクタ39は非駆動状態に維持されるようになっている。このように、機関10の運転状態に応じて4つの気筒の状態を、全ての気筒が稼動する全気筒稼動状態と、前記指定された一つの気筒(一部の気筒)のみが休止する一部気筒休止状態との何れか一方に切換える手段が気筒状態切換手段に相当する。
吸気系統40は、吸気ポート31に連通し同吸気ポート31とともに吸気通路を形成するインテークマニホールドを含む吸気管41、吸気管41の端部に設けられたエアフィルタ42、吸気管41内にあって吸気通路の開口断面積を可変とするスロットル弁43、スロットル弁駆動手段を構成するDCモータからなるスロットル弁アクチュエータ43a、スワールコントロールバルブ(以下、「SCV」と称呼する。)44、及びDCモータからなるSCVアクチュエータ44aを備えている。
排気系統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内を流れる吸入空気の単位時間あたりの質量流量に応じた電圧Vgを出力するようになっている。かかるエアフローメータ61の出力Vgと、計測された吸入空気量(流量)Gaとの関係は、図2に示したとおりである。スロットルポジションセンサ62は、スロットル弁43の開度を検出し、スロットル弁開度TAを表す信号を出力するようになっている。クランクポジションセンサ64は、クランク軸24が10°回転する毎に幅狭のパルスを有するとともに同クランク軸24が360°回転する毎に幅広のパルスを有する信号を出力するようになっている。この信号は、エンジン回転速度NEを表す。水温センサ65は、内燃機関10の冷却水の温度を検出し、冷却水温THWを表す信号を出力するようになっている。
上流側空燃比センサ66は、限界電流式の酸素濃度センサであり、図3に示したように、空燃比A/Fに応じた電流を出力し、この電流に応じた電圧である出力値vabyfsを出力するようになっていて、特に、空燃比が理論空燃比であるときには出力値vabyfsは上流側目標値vstoichになる。図3から明らかなように、上流側空燃比センサ66によれば、広範囲にわたる空燃比A/Fを精度良く検出することができる。
電気制御装置70は、互いにバスで接続されたCPU71、CPU71が実行するルーチン(プログラム)、テーブル(ルックアップテーブル、マップ)、及び定数等を予め記憶したROM72、CPU71が必要に応じてデータを一時的に格納するRAM73、電源が投入された状態でデータを格納するとともに同格納したデータを電源が遮断されている間も保持するバックアップRAM74、並びにADコンバータを含むインターフェース75等からなるマイクロコンピュータである。インターフェース75は、前記センサ61〜68と接続され、CPU71にセンサ61〜68からの信号を供給するとともに、同CPU71の指示に応じて吸気弁駆動装置33、排気弁駆動装置36、イグナイタ38、インジェクタ39、スロットル弁アクチュエータ43a、及びSCVアクチュエータ44aに駆動信号を送出するようになっている。
(空燃比フィードバック制御の概要)
次に、上記のように構成された空燃比制御装置(以下、「本装置」と云うこともある。)が行う機関の空燃比フィードバック制御の概要について説明する。この空燃比制御装置は、機能ブロック図である図4に示したように、A1〜A12の各手段等を含んで構成されている。以下、図4を参照しながら各手段等について説明していく。
<補正前基本燃料噴射量の算出>
先ず、筒内吸入空気量算出手段A1は、エアフローメータ61が計測している吸入空気流量Gaと、クランクポジションセンサ64の出力に基づいて得られるエンジン回転速度NEと、ROM72が記憶しているテーブルMAPMcとに基づき今回の吸気行程を迎える稼動中の気筒(以下、「燃料噴射気筒」と云うこともある。)の吸入空気量である筒内吸入空気量Mc(k)を求める。ここで、添え字の(k)は、今回の吸気行程に対する値であることを示している(以下、他の物理量についても同様。)。筒内吸入空気量Mcは、各気筒の吸気行程に対応されながらRAM73に記憶されていく。
上流側目標空燃比設定手段A2は、内燃機関10の運転状態であるエンジン回転速度NE、及びスロットル弁開度TA等に基づいて所定の目標値に相当する上流側目標空燃比abyfr(k)を決定する。この上流側目標空燃比abyfr(k)は、例えば、内燃機関10の暖機運転中、スロットル弁開度TAが所定値以上である急加速運転中等の特殊な場合を除き理論空燃比に設定されている。また、上流側目標空燃比abyfrは、各気筒の吸気行程に対応されながらRAM73に記憶されていく。
補正前基本燃料噴射量算出手段A3は、筒内吸入空気量算出手段A1により求められた筒内吸入空気量Mc(k)を上流側目標空燃比設定手段A2により設定された上流側目標空燃比abyfr(k)で除することにより、燃料噴射気筒に供給される混合気の空燃比を同上流側目標空燃比abyfr(k)とするための今回の吸気行程に対する補正前基本燃料噴射量Fbasebを求める。
このように、本装置は、筒内吸入空気量算出手段A1、上流側目標空燃比設定手段A2、及び補正前基本燃料噴射量算出手段A3を利用して、今回の吸気行程に対する補正前基本燃料噴射量Fbasebを機関10の運転状態(具体的には、エンジン回転速度NE、筒内吸入空気量Mc、及び上流側目標空燃比abyfr)に基づいて求める。
<最終燃料噴射量の算出>
補正後基本燃料噴射量算出手段A4は、補正前基本燃料噴射量算出手段A3により求められた補正前基本燃料噴射量Fbasebに、後述する燃料噴射気筒についての基本燃料噴射量補正係数α#injを乗じることで、下記(1)式に基づいて燃料噴射気筒についての補正後基本燃料噴射(指示)量Fbase#injを求める。ここで、燃料噴射気筒についての基本燃料噴射量補正係数α#injは、後述する基本燃料噴射量補正係数取得手段A12により算出される#1気筒〜#4気筒の各々についての基本燃料噴射量補正係数α#1〜α#4のうちから選択される燃料噴射気筒についての値である。本明細書において、添え字の「#inj」は燃料噴射気筒についての値であることを示す。また、添え字の「#n」は、#1気筒〜#4気筒のうちの#n気筒(n:1〜4の何れかの自然数)についての値であることを示す。なお、後述するように、上記基本燃料噴射量補正係数α#1〜α#4の全てが算出されていない段階では、補正後基本燃料噴射量算出手段A4は、補正前基本燃料噴射量Fbasebの値そのものを燃料噴射気筒についての補正後基本燃料噴射(指示)量Fbase#injとして求める。
Fbase#inj=Fbaseb・α#inj ・・・(1)
最終燃料噴射量算出手段A5は、前記燃料噴射気筒についての補正後基本燃料噴射量Fbase#injに後述するフィードバック補正量DFiを乗じることで、下記(2)式に基づいて燃料噴射気筒についての最終燃料噴射量Fi#injを求める。本装置は、このようにして、補正後基本燃料噴射量算出手段A4、及び最終燃料噴射量算出手段A5により燃料噴射気筒についての補正後基本燃料噴射量Fbase#injをフィードバック補正量DFiに基づいて補正(調整)することにより燃料噴射気筒についての最終燃料噴射量Fi#injを求め、同最終燃料噴射量Fi#injの燃料を燃料噴射気筒についてのインジェクタ39により同燃料噴射気筒に対して噴射する。このようにして、燃料噴射気筒に供給される混合気の空燃比をフィードバック補正量DFiに基づいてフィードバック制御する手段がフィードバック制御手段に相当する。
Fi#inj=Fbase#inj・DFi ・・・(2)
<フィードバック補正量の算出>
先ず、テーブル変換手段A6は、上流側空燃比センサ66の出力値vabyfsと、先に説明した図3に示した上流側空燃比センサ出力値vabyfsと空燃比A/Fとの関係を規定したテーブルとに基づいて、上流側空燃比センサ66が検出する現時点における検出空燃比abyfsを求める。
筒内吸入空気量遅延手段A7は、筒内吸入空気量算出手段A1により吸気行程毎に求められRAM73に記憶されている筒内吸入空気量Mcのうち、現時点からNストローク(N回の吸気行程)前に吸気行程を迎えた気筒の筒内吸入空気量McをRAM73から読み出し、これを筒内吸入空気量Mc(k−N)として設定する。
筒内燃料供給量算出手段A8は、筒内吸入空気量遅延手段A7により求められた現時点からNストローク前の筒内吸入空気量Mc(k−N)をテーブル変換手段A6により求められた現時点における検出空燃比abyfsで除することで、現時点からNストローク前の実際の筒内燃料供給量Fc(k−N)を求める。ここで、前記値Nは、内燃機関10の排気量、及び燃料室25から上流側空燃比センサ66までの距離等により異なる値である。
このように、現時点からNストローク前の実際の筒内燃料供給量Fc(k−N)を求めるために、現時点からNストローク前の筒内吸入吸気量Mc(k−N)を現時点における検出空燃比abyfsで除するのは、燃焼室25内で燃料された混合気が上流側空燃比センサ66に到達するまでには、Nストロークに相当する時間Lを要しているからである。
目標筒内燃料供給量遅延手段A9は、筒内吸入空気量算出手段A1、及び上流側目標空燃比設定手段A2により吸気行程毎に求められRAM73にそれぞれ記憶されている筒内吸入空気量Mc、及び上流側目標空燃比abyfrのうち、現時点からNストローク前の筒内吸入空気量Mc(k−N)、及び現時点からNストローク前の上流側目標空燃比abyfr(k−N)をRAM73からそれぞれ読み出し、現時点からNストローク前の筒内吸入空気量Mc(k−N)を現時点からNストローク前の上流側目標空燃比abyfr(k−N)で除した値を現時点からNストローク前の目標筒内燃料供給量Fcr(k−N)として設定する。
筒内燃料供給量偏差算出手段A10は、下記(3)式に基づいて、目標筒内燃料供給量遅延手段A9により設定された現時点からNストローク前の目標筒内燃料供給量Fcr(k−N)から筒内燃料供給量算出手段A8により求められた現時点からNストローク前の実際の筒内燃料供給量Fc(k−N)を減じることにより、前述した筒内燃料供給量偏差DFcを求める。この筒内燃料供給量偏差DFcは、Nストローク前の時点で筒内に供給された燃料の過不足分を表す量であって、上流側空燃比センサ66の出力値vabyfsと前記所定の目標値(上流側目標空燃比abyfrが理論空燃比のときは図3に示すvstoich)との偏差に基づく値である。
DFc=Fcr(k−N)-Fc(k−N) ・・・(3)
PIコントローラA11は、前記筒内燃料供給量偏差DFcを比例・積分処理(PI処理)することで、下記(4)式に基づいてフィードバック補正量DFi(>0)を求める。下記(4)式において、Gpは予め設定された比例ゲイン(比例定数(正の値))であり、Giは予め設定された積分ゲイン(比例定数(正の値))である。このフィードバック補正量DFiは、先に述べたように最終燃料噴射量算出手段A5により最終燃料噴射量Fiを求める際に使用される。
DFi=1+(Gp・DFc+Gi・ΣDFc)/Fbaseb ・・・(4)
このようにして、本装置は、上流側空燃比センサ66の出力値vabyfsと上流側目標空燃比abyfrに対応する所定の目標値との偏差に基づく値である筒内燃料供給量偏差DFcに基づいてフィードバック補正量DFiを求める。そして、前記燃料噴射気筒についての補正後基本燃料噴射量Fbase#injにフィードバック補正量DFiを乗じることで、同補正後基本燃料噴射量Fbase#injを補正(調整)する。
例えば、機関の空燃比が急変してリーンとなると、テーブル変換手段A6にて求められる検出空燃比abyfsは上流側目標空燃比設定手段A2により設定されている上流側目標空燃比abyfrよりもリーンな値(より大きな値)として求められる。このため、筒内燃料供給量算出手段A8にて求められる実際の筒内燃料供給量Fc(k−N)は目標筒内燃料供給量遅延手段A9にて求められる目標筒内燃料供給量Fcr(k−N)よりも小さい値となり、筒内燃料供給量偏差DFcは大きい正の値として求められる。従って、フィードバック補正量DFiが「1」より大きい値となる。これにより、最終燃料噴射量算出手段A5にて求められる最終燃料噴射量Fi#injは、補正後基本燃料噴射量Fbase#injよりも大きくなって、機関の空燃比がリッチとなるように制御される。
反対に、機関の空燃比が急変してリッチとなると、検出空燃比abyfsは上流側目標空燃比abyfrよりもリッチな値(より小さな値)として求められる。このため、実際の筒内燃料供給量Fc(k−N)は目標筒内燃料供給量Fcr(k−N)よりも大きい値となり、筒内燃料供給量偏差DFcは負の値として求められる。従って、フィードバック補正量DFiが「1」より小さい正の値となる。これにより、最終燃料噴射量Fi#injは、補正後基本燃料噴射量Fbase#injよりも小さくなって、機関の空燃比がリーンとなるように制御される。以上が、空燃比フィードバック制御の概要である。
(基本燃料噴射量の補正)
先に述べたように、上流側空燃比センサ66は、各々のエキゾーストマニホールド51が集合した集合部に配設されているから、その出力vabyfsは稼動している各気筒から排出された排ガスの平均的な空燃比を表す値となる。従って、本装置は、実際にはこの平均的な空燃比が前記上流側目標空燃比abyfrになるように前記空燃比フィードバック制御を行うことになる。
一方、4つの気筒に個別に配設された各インジェクタ39にはそれぞれ異なる誤差が不可避的に存在するから、同一の最終燃料噴射量Fiの燃料の噴射指示に対する実燃料噴射量はインジェクタ39毎に異なる。従って、定常運転状態において稼動している全ての気筒に対して同一の最終燃料噴射量Fi#injの燃料の噴射指示がなされているものとすると(具体的には、前述の燃料噴射気筒についての補正後基本燃料噴射量Fbase#injではなく前述の補正前基本燃料噴射量Fbasebそのものに前記フィードバック補正量DFiを乗じた値(Fbaseb・DFi)を燃料噴射気筒についての最終燃料噴射量Fi#injとして設定するものとすると)、前記平均的な空燃比が上流側目標空燃比abyfr(例えば、理論空燃比)になるように制御されている定常運転状態においても、インジェクタ39毎の誤差の相違により、気筒に供給される混合気の空燃比が理論空燃比よりリッチ、或いはリーンとなる気筒が実際には存在し、この結果、気筒間における空燃比のばらつきが発生することになる。
即ち、このような気筒間における空燃比のばらつきは、補正前基本燃料噴射量Fbasebの燃料の噴射指示に対する実燃料噴射量がインジェクタ39毎の誤差の相違により気筒毎に異なることに基づく。従って、このような気筒間における空燃比のばらつきを消滅させるためには、前記補正前基本燃料噴射量Fbasebの燃料が実際に噴射されるために必要な補正後基本燃料噴射(指示)量Fbaseを気筒毎に求める必要がある(即ち、補正前基本燃料噴射量Fbasebを気筒毎に補正する必要がある)。
そこで、本装置は、補正前基本燃料噴射量算出手段A3による算出される補正前基本燃料噴射量Fbasebを気筒毎に補正するための基本燃料噴射量補正係数α#nを気筒毎に導入する。そして、本装置は、補正前基本燃料噴射量Fbasebに基本燃料噴射量補正係数α#nを乗じた値(Fbaseb・α#n)が#n気筒に補正前基本燃料噴射量Fbasebの燃料が実際に噴射されるために必要な補正後基本燃料噴射(指示)量Fbase#nになるように、同基本燃料噴射量補正係数α#nを後述するように気筒毎に求める。この基本燃料噴射量補正係数α#nの値は、#n気筒についてのインジェクタ39の誤差分に相当する値である。
以下、基本燃料噴射量補正係数α#nを算出する方法について詳述する。機関10は、前記補正前基本燃料噴射量Fbasebの値そのものに前記フィードバック補正量DFiを乗じた値(Fbaseb・DFi)を燃料噴射気筒についての最終燃料噴射量Fi#injとして設定した状態で定常運転状態にあって(即ち、全ての気筒に対して同一の最終燃料噴射量Fi#inj(=Fbaseb・DFi)の燃料の噴射指示がなされていて)、且つ、吸気管41から吸入された空気は各気筒に均一に分配され筒内吸入空気量Mcの気筒間におけるばらつきはないと仮定する。
先ず、機関10が全気筒稼動状態にあって定常運転状態になっている場合について考える。この場合、前記PIコントローラA11により算出されているフィードバック補正量DFiを全気筒稼動時フィードバック補正量DFiallと称呼するものとすると、4つの全ての気筒に対してFbaseb・DFiallの量の燃料の噴射指示がなされているから、4つの全ての気筒に対して一回ずつ燃料が噴射された場合における燃料の噴射指示合計量mfrAは下記(5)式にて表される。
mfrA=4・Fbaseb・DFiall ・・・(5)
一方、全気筒稼動状態において稼動している#1気筒〜#4気筒についての前記補正後基本燃料噴射(指示)量Fbase#1〜Fbase#4はそれぞれ下記(6)式にて表される。
Fbase#1=Fbaseb・α#1
Fbase#2=Fbaseb・α#2
Fbase#3=Fbaseb・α#3
Fbase#4=Fbaseb・α#4 ・・・(6)
かかる補正後基本燃料噴射(指示)量Fbase#1〜Fbase#4の各燃料の噴射指示を全気筒稼動状態において#1気筒〜#4気筒についてそれぞれ行ったとすれば、4つの全ての気筒に供給される混合気の空燃比が全て上流側目標空燃比abyfrと等しくなるから、全気筒稼動状態における定常運転状態においてフィードバック補正量DFiの値は「1」になる。従って、この場合、4つの全ての気筒に対して一回ずつ燃料が噴射された場合における燃料の噴射指示合計量mfrBは下記(7)式にて表される。
mfrB=Fbaseb・(α#1+α#2+α#3+α#4)・DFi=Fbaseb・(α#1+α#2+α#3+α#4) ・・・(7)
ここで、上記燃料の噴射指示合計量mfrA、及び上記燃料の噴射指示合計量mfrBは共に、4つの全ての気筒から排出される排ガスの平均的な空燃比(従って、4つの全ての気筒に供給される混合気の平均的な空燃比)が上流側目標空燃比abyfrと等しくなる定常運転状態において取得される値であるから、両者の値は等しくなるはずである。従って、上記(5)、及び上記(7)式を等しいと置いて整理すると、下記(8)式が成立する。下記(8)式から理解できるように、全気筒稼動状態において前記平均的な空燃比が目標空燃比abyfrに一致している場合に算出される全気筒稼動時フィードバック補正量DFiallの値は、4つの全ての気筒についてのインジェクタ39の誤差の平均値を表す値となる。
DFiall=(α#1+α#2+α#3+α#4)/4 ・・・(8)
次に、機関10が一部気筒休止状態(例えば、#1気筒が休止気筒である状態)にあって定常運転状態になっている場合について考える。この場合、前記PIコントローラA11により算出されているフィードバック補正量DFiを一部気筒休止時フィードバック補正量DFi#234と称呼するものとすると、#1気筒以外の他の3つの気筒に対してFbaseb・DFi#234の量の燃料の噴射指示がなされているから、同3つの気筒に対して一回ずつ燃料が噴射された場合における燃料の噴射指示合計量mfrCは下記(9)式にて表される。
mfrC=3・Fbaseb・DFi#234 ・・・(9)
一方、前記一部気筒休止状態において稼動している気筒である#2気筒〜#4気筒についての前記補正後基本燃料噴射(指示)量Fbase#2〜Fbase#4はそれぞれ上記(6)式と同様、下記(10)式にて表される。
Fbase#2=Fbaseb・α#2
Fbase#3=Fbaseb・α#3
Fbase#4=Fbaseb・α#4 ・・・(10)
かかる補正後基本燃料噴射(指示)量Fbase#2〜Fbase#4の各燃料の噴射指示を前記一部気筒休止状態において稼動している#2気筒〜#4気筒についてそれぞれ行ったとすれば、かかる3つの気筒に供給される混合気の空燃比が全て上流側目標空燃比abyfrと等しくなるから、前記一部気筒休止状態における定常運転状態においてフィードバック補正量DFiの値は「1」になる。従って、この場合、かかる3つの気筒に対して一回ずつ燃料が噴射された場合における燃料の噴射指示合計量mfrDは下記(11)式にて表される。
mfrD=Fbaseb・(α#2+α#3+α#4)・DFi=Fbaseb・(α#2+α#3+α#4) ・・・(11)
ここで、上記燃料の噴射指示合計量mfrC、及び上記燃料の噴射指示合計量mfrDは共に、前記3つの気筒に供給される混合気の平均的な空燃比が上流側目標空燃比abyfrと等しくなる定常運転状態において取得される値であるから、両者の値は等しくなるはずである。従って、上記(9)、及び上記(11)式を等しいと置いて整理すると、下記(12)式が成立する。下記(12)式から理解できるように、この一部気筒休止状態において前記平均的な空燃比が目標空燃比abyfrに一致している場合に算出される一部気筒休止時フィードバック補正量DFi#234の値は、休止気筒を除いた残りの3つの気筒についてのインジェクタ39の誤差の平均値を表す値となる。
DFi#234=(α#2+α#3+α#4)/3 ・・・(12)
以上、全気筒稼動状態において成立する上記(8)式と一部気筒休止状態において成立する上記(12)式とから (α#2+α#3+α#4) を消去すれば、下記(13)式が得られる。従って、下記(13)式から理解できるように、前記全気筒稼動時フィードバック補正量DFiallと休止気筒が#1気筒である場合の前記一部気筒休止時フィードバック補正量DFi#234とを取得すれば、休止気筒である#1気筒についてのインジェクタ39の誤差分に相当する基本燃料噴射量補正係数α#1を求めることができる。
α#1=4・DFiall−3・DFi#234 ・・・(13)
従って、同様の考え方を用いると、前記全気筒稼動時フィードバック補正量DFiallと、休止気筒が#n気筒(n:2〜4の何れかの自然数)である場合の一部気筒休止時フィードバック補正量DFi#elseとを取得すれば、休止気筒である#n気筒についてのインジェクタ39の誤差分に相当する基本燃料噴射量補正係数α#nを下記(14)式〜(16)式に従ってそれぞれ求めることができる。なお、本明細書において、添え字の「#else」は休止気筒以外の3つの稼動している気筒についての値であることを示し、例えば、休止気筒が#2気筒である場合には「DFi#else」は「DFi#134」を意味する。以上が、基本燃料噴射量補正係数α#1〜α#4をそれぞれ算出する方法である。
α#2=4・DFiall−3・DFi#134 ・・・(14)
α#3=4・DFiall−3・DFi#124 ・・・(15)
α#4=4・DFiall−3・DFi#123 ・・・(16)
そこで、上記算出方法を採用する本装置は、先ず、補正前基本燃料噴射量算出手段A3による算出される補正前基本燃料噴射量Fbasebの値そのものにPIコントローラA11により算出されるフィードバック補正量DFiを乗じた値(Fbaseb・DFi)を燃料噴射気筒についての最終燃料噴射量Fi#injとして設定し、この最終燃料噴射量Fi#injの燃料の噴射指示を燃料噴射気筒のインジェクタ39に与え続ける。この段階では、気筒間における空燃比のばらつきが発生している。
この状態で、本装置は、機関10が一部気筒休止状態にある場合における休止気筒を#1気筒から#4気筒まで順次変更していき、対応する一部気筒休止時フィードバック補正量DFi#elseの値と全気筒稼動状態における全気筒稼動時フィードバック補正量DFiallの値とが共に取得された各段階で、上記(13)式〜(16)式に従って順次、基本燃料噴射量補正係数α#1〜α#4を算出する。このようにして、基本燃料噴射量補正係数α#1〜α#4を取得する手段が前記基本燃料噴射量補正係数取得手段A12に相当する。
そして、基本燃料噴射量補正係数α#1〜α#4の全てが取得されると、これ以降、本装置は、先に図4を参照しながら説明したように、同基本燃料噴射量補正係数α#1〜α#4の値を利用して、上記(1)式に従って前記補正前基本燃料噴射量Fbasebを気筒毎に補正するとともに上記(2)式に従って気筒毎に最終燃料噴射量Fi#injを補正し、この補正した最終燃料噴射量Fi#injの燃料の噴射指示を燃料噴射気筒のインジェクタ39に与える。この結果、気筒間における空燃比のばらつきが消滅する。このようにして、気筒毎に最終燃料噴射量Fi#injを補正する手段が気筒別噴射量補正手段に相当する。
(十分に安定した定常運転状態でのフィードバック補正量DFiall,DFi#elseの取得)
上記の内容から理解できるように、この方法によって基本燃料噴射量補正係数α#1〜α#4をそれぞれ精度良く算出するためには、前記全気筒稼動時フィードバック補正量DFiall、及び前記一部気筒休止時フィードバック補正量DFi#elseが共に、稼動している気筒についてのインジェクタ39の誤差の平均値を精度良く表す値となっている必要がある。このためには、前記全気筒稼動時フィードバック補正量DFiall、及び前記一部気筒休止時フィードバック補正量DFi#elseを取得する際、前記平均的な空燃比が正確に上流側目標空燃比abyfrに一致している必要がある。換言すれば、機関10が十分に安定した定常運転状態にある必要がある。
そこで、本装置は、全気筒稼動状態、或いは、一部気筒休止状態において、機関10が第1所定時間T1の間、及びその後の第2所定時間T2の間に渡り継続して所定の定常運転状態にある場合に、同第1所定時間T1経過後の同第2所定時間T2内にてCPU71の演算周期毎に取得される多数のフィードバック補正量DFiの時間的平均値DFiaveを計算する。そして、本装置は、全気筒稼動状態において前記計算される時間的平均値DFiaveを全気筒稼動時フィードバック補正量DFiallとして使用するとともに、一部気筒休止状態において計算される同時間的平均値DFiaveを一部気筒休止時フィードバック補正量DFi#elseとして使用する。
(ガス当たり状態の良否に基づくフィードバック補正量DFiall,DFi#elseの取得防止)
また、上記の内容から理解できるように、この方法によって基本燃料噴射量補正係数α#1〜α#4をそれぞれ精度良く算出するためには、上流側空燃比センサ66の出力vabyfsが、稼動している全ての気筒からそれぞれ排出された排ガスの平均的な空燃比を精度良く表す値となっている必要がある。
一方、先に説明したように、一般に、内燃機関10のエンジン回転速度NE、筒内吸入空気量Mc等によって、上流側空燃比センサ66(の検出部)への排ガスの「ガス当たり状態」が変化し、稼動している気筒から排出された排ガスの各状態(空燃比)が同センサ出力vabyfsに反映される程度における均一度合が変化する。前記均一度合が悪くなる(即ち、ガス当たり状態が悪くなる)と、上流側空燃比センサ出力vabyfsが、稼動している全ての気筒からそれぞれ排出された排ガスの平均的な空燃比を精度良く表す値となり得なくなる。
そこで、本装置は、エンジン回転速度NE、及び筒内吸入空気量Mcに相当する吸入空気量相当値KLと、ガス当たり状態との関係を予め実験等により調査した結果に基づく図5に示したマップをROM72に記憶している。そして、本装置は、エンジン回転速度NE、吸入空気量相当値KL、及び同マップに基づいてガス当たり状態の良否を判定し、機関10の運転状態が図5に示した「ガス当たり状態が良」となる運転状態になっている場合にのみ上記全気筒稼動時フィードバック補正量DFiall、及び上記一部気筒休止時フィードバック補正量DFi#elseを取得する。以上が、基本燃料噴射量補正係数α#1〜α#4に基づく補正前基本燃料噴射量Fbasebの補正(従って、最終燃料噴射量Fi#injの補正)の概要である。
(実際の作動)
次に、上記空燃比制御装置の実際の作動について、電機制御装置70のCPU71が実行するルーチンをフローチャートにより示した図6〜図11を参照しながら説明する。
CPU71は、図6に示した気筒休止制御を行うルーチンを所定時間の経過毎に繰り返し実行している。従って、所定のタイミングになると、CPU71はステップ600から処理を開始し、ステップ605に進んで、クランクポジションセンサ64の出力に基づいて取得されるエンジン回転速度NEと、エアフローメータ61により計測される吸入空気流量Gaと、ステップ605内に記載したテーブルとに基づいて全気筒稼動フラグALLの値を「0」、又は「1」のいずれか一方に設定する。ここで、全気筒稼動フラグALLは、その値が「1」のとき機関10が全気筒稼動状態にあることを示し、その値が「0」のとき機関10が一部気筒休止状態にあることを示す。
次に、CPU71はステップ610に進み、全気筒稼動フラグALLの値が「1」であるか否かを判定し、「Yes」と判定する場合には、ステップ615に進んで4つの全ての気筒が稼動状態となるように全ての気筒についての吸気弁駆動装置33、排気弁駆動装置36、イグナイタ38、及びインジェクタ39に所定の駆動指示を付与した後、ステップ695に進んで本ルーチンを一旦終了する。
一方、ステップ610の判定において「No」と判定する場合には、CPU71はステップ620に進んで、#n気筒のみが休止状態(休止気筒)となるように#n気筒についての吸気弁駆動装置33、及び排気弁駆動装置36のそれぞれに吸気弁32、及び排気弁35が共に閉弁状態に維持されるように駆動指示を付与するとともに、#n気筒についてのイグナイタ38、及びインジェクタ39を非駆動状態に維持する。また、CPU71は、#n気筒を除いた他の3つの気筒についての吸気弁駆動装置33、排気弁駆動装置36、イグナイタ38、及びインジェクタ39には全気筒稼動フラグALLの値が「1」である場合と同様の前記所定の駆動指示を付与する。
これにより、機関10の運転状態に応じて、機関10(吸気弁駆動装置33、及び排気弁駆動装置36)が全気筒稼動状態、或いは、#n気筒が休止気筒となる一部気筒休止状態の何れか一方になるように制御される。なお、「n」の値は、後述するルーチンにより設定・変更されるようになっているが、現段階では「1」になっているものとする。また、現段階では機関10は全気筒稼動状態にあって全気筒稼動フラグALLの値が「1」になっているものとして説明を続ける。
また、CPU71は、図7にフローチャートにより示した燃料噴射量Fi#injの計算、及び燃料噴射の指示を行うルーチンを、稼動している気筒のクランク角が各吸気上死点前の所定クランク角度(例えば、BTDC90°CA)となる毎に、繰り返し実行するようになっている。従って、稼動している任意の気筒のクランク角度が前記所定クランク角度になると、CPU71はステップ700から処理を開始してステップ705に進み、エアフローメータ61により計測された吸入空気流量Ga、エンジン回転速度NE、及び上記上流側目標空燃比abyfr(k)に基づいて、各気筒に供給される混合気の空燃比を同上流側目標空燃比abyfr(k)とするための補正前基本燃料噴射量Fbasebを求める。
次に、CPU71はステップ710に進み、学習完了フラグFINの値が「1」になっているか否かを判定する。ここで、学習完了フラグFINは、その値が「1」のとき前記基本燃料噴射量補正係数α#1〜α#4の全てが取得されていることを示し、その値が「0」のとき同基本燃料噴射量補正係数α#1〜α#4の全てが取得されていないことを示す。
いま、学習完了フラグFINの値が「0」になっているものとして説明を続けると、CPU71はステップ710にて「No」と判定してステップ715に進んで、前記補正前基本燃料噴射量Fbasebの値そのものを燃料噴射気筒についての補正後基本燃料噴射量Fbase#injとして設定する。
次いで、CPU71はステップ720に進み、上記(2)式に従って、前記補正後基本燃料噴射量Fbase#injに後述するフィードバック補正量DFiを乗じた値を燃料噴射気筒についての最終燃料噴射量Fi#injとして設定する。
次に、CPU71はステップ725に進み、最終燃料噴射量Fi#injの燃料を噴射するための指示を燃料噴射気筒についてのインジェクタ39に対して行う。そして、CPU71はステップ795に進み、本ルーチンを一旦終了する。以上により、学習完了フラグFINの値が「0」である限りにおいて、燃料噴射気筒についての基本燃料噴射量補正係数α#injによる補正がなされない補正前基本燃料噴射量Fbasebがフィードバック補正量DFiによりフィードバック補正された後の最終燃料噴射量Fi#injの燃料の噴射指示が吸気行程を迎える燃料噴射気筒に対してなされる。
次に、上記フィードバック補正量DFiを算出する際の作動について説明すると、CPU71は図8に示したルーチンを所定時間の経過毎に繰り返し実行している。従って、所定のタイミングになると、CPU71はステップ800から処理を開始し、ステップ805に進んでフィードバック制御条件が成立しているか否かを判定する。このフィードバック制御条件は、例えば、機関の冷却水温THWが第1所定温度以上であって、機関の一回転当りの吸入空気量(負荷、筒内吸入空気量Mc)が所定値以下であり、上流側空燃比センサ66が正常(活性状態であることを含む。)であるときに成立する。
いま、フィードバック制御条件が成立しているものとして説明を続けると、CPU71はステップ805にて「Yes」と判定してステップ810に進み、現時点の上流側空燃比センサ66の出力値vabyfsを図3に示したテーブルに基づいて変換することにより、現時点における検出空燃比abyfsを求める。
次に、CPU71はステップ815に進み、現時点からNストローク前に吸気行程を迎えた気筒の吸入空気量である筒内吸入空気量Mc(k−N)を前記求めた検出空燃比abyfsで除することにより、現時点からNストローク前の実際の筒内燃料供給量Fc(k−N)を求める。次いで、CPU71はステップ820に進み、現時点からNストローク前の筒内吸入空気量Mc(k−N)を現時点からNストローク前の時点における上流側目標空燃比abyfr(k−N)で除することにより、現時点からNストローク前の目標筒内燃料供給量Fcr(k−N)を求める。
続いて、CPU71はステップ825に進んで、上記(3)式に従って前記現時点からNストローク前の目標筒内燃料供給量Fcr(k−N)から前記実際の筒内燃料供給量Fc(k−N)を減じた値を筒内燃料供給量偏差DFcとして設定する。つまり、筒内燃料供給量偏差DFcは、Nストローク前の時点で筒内に供給された燃料の過不足分を表す量となる。次に、CPU71はステップ830に進み、その時点における筒内燃料供給量偏差DFcの積分値SDFcに前記ステップ825にて求めた筒内燃料供給量偏差DFcを加えて新たな筒内燃料供給量偏差の積分値SDFcを求め、続くステップ835にて上記(4)式に基づくステップ835内に示した式に従ってフィードバック補正量DFiを求めた後、ステップ895に進んで本ルーチンを一旦終了する。
このように、フィードバック補正量DFiが求められ、このフィードバック補正量DFiが前述した図7のステップ720により最終燃料噴射量Fi#injに反映されるから、Nストローク前の燃料供給量の過不足が補償され、稼動している各気筒に供給される混合気の平均的な空燃比が上流側目標空燃比abyfrに一致せしめられるようにフィードバック制御される。
一方、ステップ805の判定時において、フィードバック制御条件が不成立であると、CPU71は同ステップ805にて「No」と判定してステップ840に進んでフィードバック補正量DFiの値を「1」に設定し、その後、ステップ895に進んで本ルーチンを一旦終了する。このように、フィードバック制御条件が不成立であるときは、フィードバック補正量DFiが「1」に維持されて前記フィードバック制御が実行されない。
また、CPU71は、全気筒稼動時フィードバック補正量DFiall、及び一部気筒休止時フィードバック制御量DFi#elseの時間的平均値をそれぞれ取得するための図9に示したルーチンを所定時間の経過毎に繰り返し実行している。従って、所定のタイミングになると、CPU71はステップ900から処理を開始してステップ905に進んで、学習完了フラグFINの値が「0」になっているか否かを判定する。
現時点では学習完了フラグFINの値が「0」になっているから、CPU71はステップ905にて「Yes」と判定してステップ910に進み、全気筒稼動フラグALLの値が「1」であって、且つ全気筒稼動時学習フラグLEARNallの値が「0」になっているか、或いは、全気筒稼動フラグALLの値が「0」であって、且つ一部気筒休止時学習フラグLEARN#nの値が「0」になっているかを判定する。
ここで、全気筒稼動時学習フラグLEARNallは、その値が「1」のとき全気筒稼動時フィードバック補正量DFiallが取得された状態であることを示し、その値が「0」のとき全気筒稼動時フィードバック補正量DFiallが取得されていない状態であることを示す。また、一部気筒休止時学習フラグLEARN#nは、その値が「1」のとき休止気筒が#n気筒である場合の一部気筒休止時フィードバック補正量DFi#elseが取得された状態であることを示し、その値が「0」のとき休止気筒が#n気筒である場合の一部気筒休止時フィードバック補正量DFi#elseが取得されていない状態であることを示す。
いま、全気筒稼動時学習フラグLEARNallの値、及び一部気筒休止時学習フラグLEARN#nの各値が全て「0」になっているものとして説明を続けると、現段階では全気筒稼動フラグALLの値が「1」であって、且つ全気筒稼動時学習フラグLEARNallの値が「0」になっている。従って、CPU71はステップ910の判定にて「Yes」と判定してステップ915に進んで、基本燃料噴射量補正係数の算出条件が成立しているか否かを判定する。ここで、基本燃料噴射量補正係数の算出条件は、機関10が所定の定常運転状態(例えば、上流側空燃比センサ出力vabyfsの変動幅が所定値以下であって、且つ吸入空気流量Gaの変動幅が所定値以下である状態)を前記第1所定時間に渡って既に継続していて、且つ現時点まで引き続いて継続していること、機関10の運転状態が図5に示した「ガス当たり状態が良」となる運転状態になっていること、及び前記フィードバック制御条件が成立していること、の全てが成立している場合に成立する。
いま、機関10が上記所定の定常運転状態を前記第1所定時間に渡って継続しておらず、基本燃料噴射量補正係数の算出条件が成立していないものとすると、CPU71はステップ915にて「No」と判定してステップ920に進んで、カウンタMの値を「0」にクリアした後、ステップ995に直ちに進んで本ルーチンを一旦終了する。ここで、カウンタMの値は、前記第1所定時間経過後における機関10の上記所定の定常運転状態の継続時間を表す。以降、CPU71は、上記基本燃料噴射量補正係数の算出条件が成立しない限りにおいて、ステップ900〜920、995の処理を繰り返し実行する。
一方、この状態から、機関10の上記定常運転状態が前記第1所定時間に渡って継続することで基本燃料噴射量補正係数の算出条件が成立したものとすると、CPU71はステップ915に進んだとき「Yes」と判定してステップ925に進み、その時点でのカウンタMの値(現時点では「0」である。)を「1」だけ増大し、続くステップ930にて図8のステップ830にて算出されている全気筒稼動状態における最新のフィードバック補正量DFiの値をサンプル値DFi(M)(従って、DFi(1))として格納する。
次いで、CPU71はステップ935に進んで、現時点でのカウンタMの値が前記第2所定時間に相当するDFi平均値算出用必要サンプル数Mrefに達したか否かを判定する。現段階ではカウンタMの値は「1」であるから、CPU71はステップ935の判定にて「No」と判定してステップ995に直ちに進んで本ルーチンを一旦終了する。
以降、機関10が上記所定の定常運転状態を維持することによりステップ925の繰り返し実行によりカウンタMの値が前記Mrefに達するまで(従って、前記第2所定時間が経過するまで)の間、CPU71はステップ900〜915、925〜935、995の処理を繰り返し実行してサンプル値DFi(M)の値を順次格納していく。なお、この間において、機関10が上記定常運転状態を維持しなくなった場合、その時点で基本燃料噴射量補正係数の算出条件が不成立になるから、CPU71はステップ915に進んだとき「No」と判定してステップ920にてカウンタMの値を再び「0」にクリアする。
そして、機関10が前記第2所定時間に渡って上記所定の定常運転状態を継続すると、カウンタMの値が前記Mrefに達するから、CPU71はステップ935に進んだとき「Yes」と判定してステップ940に進み、Mref個のサンプル値DFi(1)〜DFi(Mref)の平均値を平均値DFiaveとして格納する。
次いで、CPU71はステップ945に進み、全気筒稼動フラグALLの値が「1」であるか否かを判定する。現段階は全気筒稼動状態になっていて全気筒稼動フラグALLの値が「1」になっているから、CPU71はステップ945にて「Yes」と判定してステップ950に進んで、前記平均値DFiaveを全気筒稼動時フィードバック補正量DFiallとして格納し、続くステップ955にて全気筒稼動時学習フラグLEARNallの値を「1」に設定した後、ステップ995に進んで本ルーチンを一旦終了する。
これにより、全気筒稼動時フィードバック補正量DFiall(の時間的平均値)が取得される。以降、全気筒稼動時学習フラグLEARNallの値が「1」になり、且つ、全気筒稼動フラグALLの値が「1」のままであるから、CPU71はステップ910に進んだとき「No」と判定するようになる。
次に、この状態から、機関10の運転状態が変化し、CPU71が図6のステップ605に進んだときに全気筒稼動フラグALLの値を「0」に設定した場合について説明する。この場合、CPU71はステップ620に進んで機関10を休止気筒が#1気筒である一部気筒休止状態に設定する。これにより、全気筒稼動フラグALLの値が「0」になり、休止気筒が#1気筒である場合の一部気筒休止時学習フラグLEARN#1の値が「0」のままであるから、CPU71は図9のステップ910に進んだとき再び「Yes」と判定して前述したステップ915以降の処理を再び行う。
そして、前記基本燃料噴射量補正係数の算出条件が前記第2所定時間に渡って成立し続けたとき、CPU71は一部気筒休止状態におけるフィードバック補正量DFiについてステップ930にて取得したMref個のサンプル値DFi(1)〜DFi(Mref)に基づいてステップ940にて一部気筒休止状態における前記平均値DFiaveを取得する。
次いで、CPU71はステップ945にて「No」と判定してステップ960に進み、前記平均値DFiaveを一部気筒休止時フィードバック補正量DFi#else(即ち、DFi#234)として格納し、続くステップ965にて一部気筒休止時学習フラグLEARN#1の値を「1」に設定した後、ステップ995に進んで本ルーチンを一旦終了する。
これにより、休止気筒が#1気筒である場合の一部気筒休止時フィードバック補正量DFi#234(の時間的平均値)が取得される。この結果、全気筒稼動時フィードバック補正量DFiall、及び一部気筒休止時フィードバック補正量DFi#234が取得されたことになる。即ち、全気筒稼動時学習フラグLEARNallの値、及び一部気筒休止時学習フラグLEARN#1の値は共に「1」になっている。以降、一部気筒休止時学習フラグLEARN#1の値が「1」になり、且つ、全気筒稼動フラグALLの値が「0」のままであるから、CPU71はステップ910に進んだとき「No」と判定するようになる。なお、この時点では、一部気筒休止時学習フラグLEARN#2〜LEARN#4の値は「0」のままである。
一方、CPU71は、基本燃料噴射量補正係数の算出・更新を行うための図10に示したルーチンを所定時間の経過毎に繰り返し実行している。従って、所定のタイミングになると、CPU71はステップ1000から処理を開始してステップ1005に進んで、学習完了フラグFINの値が「0」になっているか否かを判定する。
現時点では学習完了フラグFINの値が「0」になっているから、CPU71はステップ1005にて「Yes」と判定してステップ1010に進み、全気筒稼動時学習フラグLEARNallの値、及び一部気筒休止時学習フラグLEARN#nの値(即ち、LEARN#1の値)が共に「1」になっているか否かを判定する。
いま、先の図9のステップ965の処理が実行された直後であるものとすると、全気筒稼動時学習フラグLEARNallの値、及び一部気筒休止時学習フラグLEARN#1の値が共に「1」になっているから、CPU71はステップ1010にて「Yes」と判定してステップ1015に進み、上記(13)式に相当するステップ1015内に記載の式に従って#1気筒についての基本燃料噴射量補正係数α#1の値を算出するとともに、同値をバックアップRAM74に格納する。
次いで、CPU71はステップ1020に進み、nの値が「4」以外であるか否かを判定する。現時点ではnの値は「1」であるから、CPU71はステップ1020にて「Yes」と判定してステップ1025に進み、全気筒稼動時学習フラグLEARNallの値を再び「0」に設定し、続くステップ1030にてnの値を「1」だけ増大して「2」とした後、ステップ1095に進んで本ルーチンを一旦終了する。このようにして、全気筒稼動時学習フラグLEARNallの値、及び一部気筒休止時学習フラグLEARN#1の値が共に「1」になった段階で基本燃料噴射量補正係数α#1が算出される。
以降、全気筒稼動時学習フラグLEARNallの値は「0」になり、また、一部気筒休止時学習フラグLEARN#nの値(即ち、LEARN#2の値)は「0」のままであるから、CPU71はステップ1010に進んだとき「No」と判定してステップ1095に直ちに進んで本ルーチンを一旦終了するようになる。また、nの値が「2」になったことに伴い、以降、CPU71は図6のステップ620にて休止気筒となる気筒を#1気筒から#2気筒に変更する。
また、これ以降、全気筒稼動時学習フラグLEARNallの値、及び一部気筒休止時学習フラグLEARN#2の値は共に「0」になっているから、機関10が全気筒稼動状態(ALL=1)、及び休止気筒が#2気筒となる一部気筒休止状態(ALL=0)の何れにあるかにかかわらず、CPU71は図9のステップ910にて「Yes」と判定してステップ915以降の処理を再び行う。
そして、機関10が全気筒稼動状態にある場合において前記基本燃料噴射量補正係数の算出条件が前記第2所定時間に渡って成立し続けたとき、前述の#1気筒の場合と同様、ステップ940にて前記平均値DFiaveを求め、ステップ950にて同平均値DFiaveを全気筒稼動時フィードバック補正量DFiallとして再び格納し、ステップ955にて全気筒稼動時学習フラグLEARNallの値を「1」に設定する。
同様に、機関10が一部気筒休止状態にある場合において前記基本燃料噴射量補正係数の算出条件が前記第2所定時間に渡って成立し続けたとき、前述の#1気筒の場合と同様、ステップ940にて前記平均値DFiaveを求め、ステップ960にて同平均値DFiaveを一部気筒休止時フィードバック補正量DFi#else(従って、DFi#134)として格納し、ステップ965にて一部気筒休止時学習フラグLEARN#2の値を「1」に設定する。
これにより、全気筒稼動時学習フラグLEARNallの値、及び一部気筒休止時学習フラグLEARN#2の値が共に「1」になるから、CPU71は図10のステップ1010にて再び「Yes」と判定し、続くステップ1015にて上記(14)式に従って#2気筒についての基本燃料噴射量補正係数α#2の値を算出するとともに、同値をバックアップRAM74に格納する。そして、CPU71はステップ1020にて「No」と判定した後、ステップ1025にて全気筒稼動時学習フラグLEARNallの値を再び「0」に設定し、続くステップ1030にてnの値を「3」に更新する。
このようにして、全気筒稼動時学習フラグLEARNallの値、及び一部気筒休止時学習フラグLEARN#2の値が共に「1」になった段階で基本燃料噴射量補正係数α#2が算出される。また、nの値が「3」になったことに伴い、以降、CPU71は図6のステップ620にて休止気筒となる気筒を#2気筒から#3気筒に変更する。
以降、同様にして、全気筒稼動時学習フラグLEARNallの値、及び一部気筒休止時学習フラグLEARN#3の値が共に「1」になった段階で図10のステップ1015にて上記(15)式に従って#3気筒についての基本燃料噴射量補正係数α#3の値が算出され、同値がバックアップRAM74に格納される。そして、nの値が「4」となって休止気筒となる気筒が#3気筒から#4気筒に変更された後、全気筒稼動時学習フラグLEARNallの値、及び一部気筒休止時学習フラグLEARN#4の値が共に「1」になった段階でステップ1015にて上記(16)式に従って#4気筒についての基本燃料噴射量補正係数α#4の値が算出され、同値がバックアップRAM74に格納される。これにより、基本燃料噴射量補正係数α#1〜α#4の全てが算出・格納されたことになる。
この段階ではnの値は「4」になっているから、CPU71はステップ1020に進んだとき「No」と判定してステップ1035に進み、学習完了フラグFINの値を「0」から「1」に変更する。この結果、CPU71は図10のステップ1005、或いは図9のステップ905に進んだとき「No」と判定するようになり、基本燃料噴射量補正係数αの算出処理、及び前記平均値DFiaveの取得処理を実行しないようになる。
また、学習完了フラグFINの値が「1」になるから、CPU71は図7のステップ710に進んだとき「Yes」と判定してステップ730に進むようになる。ステップ730に進むとCPU71は、バックアップRAM74に格納されている前記基本燃料噴射量補正係数α#1〜α#4の各値のうちから燃料噴射気筒についての基本燃料噴射量補正係数α#injを選択し、上記(1)式に従ってステップ705にて計算した補正前基本燃料噴射量Fbasebの値に同基本燃料噴射量補正係数α#injを乗じた値を燃料噴射気筒についての補正後基本燃料噴射量Fbase#injとして設定するようになる。
これにより、学習完了フラグFINの値が「1」である限りにおいて、燃料噴射気筒についての基本燃料噴射量補正係数α#injによる補正がなされた補正前基本燃料噴射量Fbaseb(即ち、補正後基本燃料噴射量Fbase#inj)がフィードバック補正量DFiによりフィードバック補正された後の最終燃料噴射量Fi#injの燃料の噴射指示が吸気行程を迎える燃料噴射気筒に対してなされるようになる。
また、CPU71は、基本燃料噴射量補正係数の更新判定を行うための図11に示したルーチンを所定時間の経過毎に繰り返し実行している。従って、所定のタイミングになると、CPU71はステップ1100から処理を開始してステップ1105に進んで、学習完了フラグFINの値が「1」になっているか否かを判定し、「No」と判定するときはステップ1195に直ちに進んで本ルーチンを一旦終了する。
いま、先の図10のステップ1035の処理が実行された直後であるものとすると、学習完了フラグFINの値が「1」になっているから、CPU71はステップ1105にて「Yes」と判定してステップ1110に進み、基本燃料噴射量補正係数の更新条件が成立しているか否かを判定する。ここで、基本燃料噴射量補正係数の更新条件は、例えば、前回、基本燃料噴射量補正係数α#1〜α#4の全てが算出・格納された時点(即ち、学習完了フラグFINの値が「0」から「1」に変更された時点)から所定の更新基準時間が経過しているときに成立する。
現時点は学習完了フラグFINの値が「0」から「1」に変更された直後であるから基本燃料噴射量補正係数の更新条件は成立していない。従って、CPU71はステップ1110にて「No」と判定してステップ1195に直ちに進んで本ルーチンを一旦終了する。
そして、前記更新基準時間が経過すると、前記基本燃料噴射量補正係数の更新条件が成立するから、CPU71はステップ1110にて「Yes」と判定してステップ1115に進み、全気筒稼動時学習フラグLEARNallの値を「1」から「0」に変更し、続くステップ1120にて一部気筒休止時学習フラグLEARN#1〜LEARN#4の値を全て「1」から「0」に変更するとともに、続くステップ1125にてnの値を「1」に設定し、続くステップ1130にて学習完了フラグFINの値を「1」から「0」に変更した後、ステップ1195に進んで本ルーチンを一旦終了する。これにより、学習完了フラグFINの値が「0」になっているから、CPU71はステップ1105にて「No」と判定してステップ1195に直ちに進むようになる。
また、学習完了フラグFINの値が「0」になるから、CPU71は図7のステップ710に進んだとき再び「No」と判定して再びステップ715に進むようになる。これにより、燃料噴射気筒についての基本燃料噴射量補正係数α#injによる補正がなされない補正前基本燃料噴射量Fbasebがフィードバック補正量DFiによりフィードバック補正された後の最終燃料噴射量Fi#injの燃料の噴射指示が吸気行程を迎える燃料噴射気筒に対して再びなされるようになる。
また、学習完了フラグFINの値が「0」になるから、CPU71は図9のステップ905、或いは図10のステップ1005に進んだとき「Yes」と判定するようになり、前述した前記平均値DFiaveの取得処理、及び基本燃料噴射量補正係数α#1〜#4の算出(更新)処理が順次実行されることで、新たな基本燃料噴射量補正係数α#1〜#4が算出(更新)・格納されて、その結果、学習完了フラグFINの値が再び「1」になる。
これにより、再びステップ730の処理が実行されるようになり、この結果、燃料噴射気筒についての新たな(更新された)基本燃料噴射量補正係数α#injによる補正がなされた補正前基本燃料噴射量Fbaseb(従って、補正後基本燃料噴射量Fbase#inj)がフィードバック補正量DFiによりフィードバック補正された後の最終燃料噴射量Fi#injの燃料の噴射指示が吸気行程を迎える燃料噴射気筒に対して再びなされるようになる。
以上、説明したように、本発明による内燃機関の空燃比制御装置の実施形態によれば、補正前基本燃料噴射量Fbasebの値そのものにフィードバック補正量DFiを乗じた値(Fbaseb・DFi)である最終燃料噴射量Fi#injの燃料の噴射指示を燃料噴射気筒のインジェクタ39に与えた状態で、一部気筒休止状態における休止気筒を#1気筒から#4気筒まで順次変更していき、対応する一部気筒休止時フィードバック補正量DFi#elseの値と全気筒稼動状態における全気筒稼動時フィードバック補正量DFiallの値とが共に取得された各段階で、上記(13)式〜(16)式に従って順次、基本燃料噴射量補正係数α#1〜α#4を算出する。そして、基本燃料噴射量補正係数α#1〜α#4の全てが取得されると、これ以降、本実施形態は、基本燃料噴射量補正係数α#1〜α#4の値を利用して、上記(1)式に従って前記補正前基本燃料噴射量Fbasebを気筒毎に補正するとともに上記(2)式に従って気筒毎に最終燃料噴射量Fi#injを補正し、この補正した最終燃料噴射量Fi#injの燃料の噴射指示を燃料噴射気筒のインジェクタ39に与える。
この結果、全ての気筒についてのインジェクタ39の誤差がそれぞれ確実に補償され得、気筒間における空燃比のばらつきが確実に消滅した。従って、機関の出力(トルク)変動が小さくなってドライバビリティの低下が抑制され、また、暖気運転中におけるエミッションの排出量が少なくなるとともに、燃費の悪化を防止できた。
本発明は上記実施形態に限定されることはなく、本発明の範囲内において種々の変形例を採用することができる。例えば、上記実施形態においては、基本燃料噴射量補正係数α#1〜#4が順次取得される毎に全気筒稼動時フィードバック補正量DFiallを新たに取得し直すように構成されているが、一旦、全気筒稼動時フィードバック補正量DFiallが取得されたら、同取得された一つの値そのものを使用して基本燃料噴射量補正係数α#1〜#4の全てを取得するように構成してもよい。
また、上記実施形態においては、基本燃料噴射量補正係数α#1〜#4の各値を取得する処理が実行されている間(従って、学習完了フラグFINの値が「0」になっている間)において、一部気筒休止状態での休止気筒となる気筒が#1気筒から#4気筒まで順次変更されていくように構成されているが、機関の運転状態に応じて一部気筒休止状態での休止気筒となる気筒を選択するように構成してもよい。
また、上記実施形態においては、フィードバック補正量DFiの値そのものについての前記第2所定時間内における時間的平均値を全気筒稼動時フィードバック補正量DFiall、或いは一部気筒休止時フィードバック補正量DFi#elseとして使用するように構成されているが、フィードバック補正量DFiの値を所定のローパスフィルタにて処理した後の値、若しくは、同処理した後の値についての前記第2所定時間内における時間的平均値を全気筒稼動時フィードバック補正量DFiall、或いは一部気筒休止時フィードバック補正量DFi#elseとして使用するように構成してもよい。
また、上記実施形態においては、上記ローパスフィルタを使用することと同様の効果を発揮させるため、フィードバック補正量DFiを算出する際に使用される積分ゲインGiの値を小さい値に設定することが好ましい。
また、上記実施形態においては、燃料噴射気筒についての最終燃料噴射量Fi#injが「Fi#inj=Fbaseb・α#inj・DFi」にて計算されるように構成されているが、燃料噴射気筒についての最終燃料噴射量Fi#injが「Fi#inj=Fbaseb+α#inj+DFi」にて計算されるように構成してもよい。この場合においても、基本燃料噴射量補正係数α#1〜#4の各値は、上記(13)〜上記(16)式に従ってそれぞれ計算され得る。
また、上記実施形態においては、一部気筒休止状態での休止気筒となる気筒が#1気筒から#4気筒まで一気筒ずつ順次変更されていくように構成されているが、例えば、2つの部分気筒群(バンクA、及びバンクB)を有する機関(例えば、V型8気筒エンジン)においては、一部気筒休止状態での休止気筒となる気筒が部分気筒群ずつ(V型8気筒エンジンの場合には4気筒ずつ)交互に変更されていくように構成してもよい。この場合、バンクA、及びバンクBについての基本燃料噴射量補正係数の平均値α#A,α#Bはそれぞれ、下記(17)式、下記(18)式に従って計算され得る。下記(17)式において、DFi#Bは休止気筒がバンクAに属する全ての気筒である場合の一部気筒休止時フィードバック補正量であり、下記(18)式において、DFi#Aは休止気筒がバンクBに属する全ての気筒である場合の一部気筒休止時フィードバック補正量である。
α#A=2・DFiall−DFi#B ・・・(17)
α#B=2・DFiall−DFi#A ・・・(18)
そして、バンクAに属する気筒の何れかが燃料噴射気筒である場合には、燃料噴射気筒についての最終燃料噴射量Fi#injが「Fi#inj=Fbaseb・α#A・DFi」にて計算され、バンクBに属する気筒の何れかが燃料噴射気筒である場合には、燃料噴射気筒についての最終燃料噴射量Fi#injが「Fi#inj=Fbaseb・α#B・DFi」にて計算される。
また、一部気筒休止状態での休止気筒となる気筒が常に2つの部分気筒群のうち特定の何れか一方のみ(例えば、常にバンクAに属する全ての気筒)になるように構成されていてもよい。この場合、上記(17)式、(18)式のうち(17)式のみが使用され得、バンクAに属する気筒の何れかが燃料噴射気筒である場合には、燃料噴射気筒についての最終燃料噴射量Fi#injが「Fi#inj=Fbaseb・α#A・DFi」にて計算される一方、バンクBに属する気筒の何れかが燃料噴射気筒である場合には、基本燃料噴射量Fbasebを補正することなく、燃料噴射気筒についての最終燃料噴射量Fi#injが「Fi#inj=Fbaseb・DFi」にて計算される。
また、上記実施形態においては、機関10の運転状態が図5に示した「ガス当たり状態が良」となる運転状態になっている場合にのみ、全気筒稼動時フィードバック補正量DFiall、及び一部気筒休止時フィードバック補正量DFi#elseを取得することで基本燃料噴射量補正係数α#1〜α#4を算出するように構成されているが、「ガス当たり状態」の良否にかかわらず全気筒稼動時フィードバック補正量DFiall、及び一部気筒休止時フィードバック補正量DFi#elseを共に取得することで基本燃料噴射量補正係数α#1〜α#4を算出するとともに、その時点でのエンジン回転速度NE、及び吸入空気量相当値KLと、基本燃料噴射量Fbasebを補正する際の反映率Kc(例えば、Kc=0.2〜1.0)を求めるための図12に示したテーブルとに基づいて反映率Kcを求め、前記算出した基本燃料噴射量補正係数α#1〜α#4の各々に同反映率Kcを乗じた各値を最終的な基本燃料噴射量補正係数α#1〜α#4として使用するように構成してもよい。この場合、反映率Kcの値は、「ガス当たり状態」が良好になるほどより大きい値に設定されることが望ましい。
10…内燃機関、25…燃焼室、33…吸気弁駆動装置、36…排気弁駆動装置、39…インジェクタ、52…エキゾーストパイプ(排気管)、66…上流側空燃比センサ、70…電気制御装置、71…CPU