図1は、本発明の実施例としてのエンジン装置21を搭載するハイブリッド自動車20の構成の概略を示す構成図であり、図2は、エンジン装置21の構成の概略を示す構成図である。実施例のハイブリッド自動車20は、図1に示すように、エンジン22と、プラネタリギヤ30と、モータMG1,MG2と、インバータ41,42と、バッテリ50と、ハイブリッド用電子制御ユニット(以下、「HVECU」という)70とを備える。
エンジン22は、ガソリンや軽油などを燃料として動力を出力する内燃機関として構成されている。図2に示すように、エンジン22は、エアクリーナ122により清浄された空気を吸気管123に吸入してスロットルバルブ124やサージタンク125を通過させると共に、吸気管123のサージタンク125よりも下流側で燃料噴射弁126から燃料を噴射し、空気と燃料とを混合する。そして、エンジン22は、この混合気を吸気バルブ128を介して燃焼室129に吸入し、吸入した混合気を点火プラグ130による電気火花により爆発燃焼させる。この爆発燃焼のエネルギにより押し下げられるピストン132の往復運動がクランクシャフト26の回転運動に変換される。燃焼室129から排気バルブ133を介して排気管134に排出される排気は、浄化装置136,138を介して外気に排出される。浄化装置136,138は、それぞれ、排気中の一酸化炭素(CO)や炭化水素(HC)、窒素酸化物(NOx)の有害成分を浄化する浄化触媒(三元触媒)136a,138aを有する。浄化触媒136a,138aは、それぞれ酸素を吸蔵可能に構成されている。
エンジン22は、エンジン用電子制御ユニット(以下、「エンジンECU」という)24により運転制御されている。エンジンECU24は、図示しないが、CPUを中心とするマイクロプロセッサとして構成されており、CPUの他に、処理プログラムを記憶するROMや、データを一時的に記憶するRAM、入出力ポート、通信ポートを備える。
エンジンECU24には、エンジン22を運転制御するのに必要な各種センサからの信号が入力ポートを介して入力される。エンジンECU24に入力される信号としては、例えば、エンジン22のクランクシャフト26の回転位置を検出するクランクポジションセンサ140からのクランク角θcrや、エンジン22の冷却水の温度を検出する水温センサ142からの冷却水温Twを挙げることができる。また、吸気バルブ128を開閉するインテークカムシャフトや排気バルブ133を開閉するエキゾーストカムシャフトの回転位置を検出するカムポジションセンサ144からのカムポジションθcaも挙げることができる。さらに、スロットルバルブ124のポジションを検出するスロットルバルブポジションセンサ124aからのスロットル開度THや、吸気管123に取り付けられたエアフローメータ148からの吸入空気量Qa、吸気管123に取り付けられた温度センサ149からの吸気温Ta、サージタンク125に取り付けられた圧力センサ150からのサージ圧Psも挙げることができる。加えて、排気管134の浄化装置136よりも上流側に取り付けられた上流側空燃比センサ152からの検出空燃比AFuや、排気管134の浄化装置136よりも下流側で且つ浄化装置138の上流側に取り付けられた下流側空燃比センサ154からの検出空燃比AFdも挙げることができる。
エンジンECU24からは、エンジン22を運転制御するための各種制御信号が出力ポートを介して出力される。エンジンECU24から出力される信号としては、例えば、スロットルバルブ124のポジションを調節するスロットルモータ124bへの駆動制御信号、燃料噴射弁126への駆動制御信号や、点火プラグ130への制御信号を挙げることができる。
エンジンECU24は、HVECU70と通信ポートを介して接続されている。エンジンECU24は、クランクポジションセンサ140からのエンジン22のクランク角θcrに基づいてエンジン22の回転数Neを演算する。また、エアフローメータ148からの吸入空気量Qaとエンジン22の回転数Neとに基づいて体積効率(エンジン22の1サイクルあたりの行程容積に対する1サイクルで実際に吸入される空気の容積の比)KLを演算する。
図1に示すように、プラネタリギヤ30は、シングルピニオンタイプの遊星歯車機構として構成されている。プラネタリギヤ30のサンギヤには、モータMG1の回転子が接続されている。プラネタリギヤ30のリングギヤには、駆動輪39a,39bにデファレンシャルギヤ38を介して連結された駆動軸36が接続されている。プラネタリギヤ30のキャリヤには、ダンパ28を介してエンジン22のクランクシャフト26が接続されている。
モータMG1は、例えば同期発電電動機として構成されており、上述したように、回転子がプラネタリギヤ30のサンギヤに接続されている。モータMG2は、例えば同期発電電動機として構成されており、回転子が駆動軸36に接続されている。インバータ41,42は、モータMG1,MG2の駆動に用いられると共に電力ライン54を介してバッテリ50に接続されている。モータMG1,MG2は、モータ用電子制御ユニット(以下、「モータECU」という)40によって、インバータ41,42の図示しない複数のスイッチング素子がスイッチング制御されることにより、回転駆動される。
モータECU40は、図示しないが、CPUを中心とするマイクロプロセッサとして構成されており、CPUの他に、処理プログラムを記憶するROMや、データを一時的に記憶するRAM、入出力ポート、通信ポートを備える。モータECU40には、モータMG1,MG2を駆動制御するのに必要な各種センサからの信号が入力ポートを介して入力される。モータECU40に入力される信号としては、例えば、モータMG1,MG2の回転子の回転位置を検出する回転位置センサ43,44からのモータMG1,MG2の回転子の回転位置θm1,θm2や、モータMG1,MG2の各相に流れる相電流を検出する電流センサからのモータMG1,MG2の各相の相電流Iu1,Iv1,Iu2,Iv2を挙げることができる。モータECU40からは、インバータ41,42の図示しない複数のスイッチング素子へのスイッチング制御信号などが出力ポートを介して出力される。モータECU40は、HVECU70と通信ポートを介して接続されている。モータECU40は、回転位置センサ43,44からのモータMG1,MG2の回転子の回転位置θm1,θm2に基づいてモータMG1,MG2の電気角θe1,θe2や回転数Nm1,Nm2を演算する。
バッテリ50は、例えばリチウムイオン二次電池やニッケル水素二次電池として構成されており、上述したように、電力ライン54を介してインバータ41,42に接続されている。このバッテリ50は、バッテリ用電子制御ユニット(以下、「バッテリECU」という)52により管理されている。
バッテリECU52は、図示しないが、CPUを中心とするマイクロプロセッサとして構成されており、CPUの他に、処理プログラムを記憶するROMや、データを一時的に記憶するRAM、入出力ポート、通信ポートを備える。バッテリECU52には、バッテリ50を管理するのに必要な各種センサからの信号が入力ポートを介して入力される。バッテリECU52に入力される信号としては、例えば、バッテリ50の端子間に取り付けられた電圧センサ51aからのバッテリ50の電圧Vbや、バッテリ50の出力端子に取り付けられた電流センサ51bからのバッテリ50の電流Ib、バッテリ50に取り付けられた温度センサ51cからのバッテリ50の温度Tbを挙げることができる。バッテリECU52は、HVECU70と通信ポートを介して接続されている。バッテリECU52は、電流センサ51bからの電池電流Ibの積算値に基づいて蓄電割合SOCを演算する。蓄電割合SOCは、バッテリ50の全容量に対するバッテリ50から放電可能な電力の容量の割合である。
HVECU70は、図示しないが、CPUを中心とするマイクロプロセッサとして構成されており、CPUの他に、処理プログラムを記憶するROMや、データを一時的に記憶するRAM、入出力ポート、通信ポートを備える。HVECU70には、各種センサからの信号が入力ポートを介して入力される。HVECU70に入力される信号としては、例えば、イグニッションスイッチ80からのイグニッション信号や、シフトレバー81の操作位置を検出するシフトポジションセンサ82からのシフトポジションSPを挙げることができる。また、アクセルペダル83の踏み込み量を検出するアクセルペダルポジションセンサ84からのアクセル開度Accや、ブレーキペダル85の踏み込み量を検出するブレーキペダルポジションセンサ86からのブレーキペダルポジションBP、車速センサ88からの車速V、外気温センサ89からの外気温度Toutも挙げることができる。HVECU70は、上述したように、エンジンECU24やモータECU40、バッテリECU52と通信ポートを介して接続されている。
こうして構成された実施例のハイブリッド自動車20は、エンジン22の運転を伴わずに走行する電動走行モード(EV走行モード)や、エンジン22の運転を伴って走行するハイブリッド走行モード(HV走行モード)で走行する。
EV走行モードでは、HVECU70は、最初に、アクセル開度Accと車速Vとに基づいて走行に要求される(駆動軸36に要求される)要求トルクTd*を設定する。続いて、モータMG1のトルク指令Tm1*に値0を設定すると共に要求トルクTd*が駆動軸36に出力されるようにモータMG2のトルク指令Tm2*を設定し、設定したモータMG1,MG2のトルク指令Tm1*,Tm2*をモータECU40に送信する。モータECU40は、モータMG1,MG2がトルク指令Tm1*,Tm2*で駆動されるようにインバータ41,42の複数のスイッチング素子のスイッチング制御を行なう。
HV走行モードでは、HVECU70は、最初に、EV走行モードと同様に、要求トルクTd*を設定する。続いて、要求トルクTd*に駆動軸36の回転数Ndを乗じて走行に要求される要求パワーPd*を演算し、要求パワーPd*からバッテリ50の充放電要求パワーPb*(バッテリ50から放電するときが正の値)を減じてエンジン22に要求される要求パワーPe*を演算する。ここで、駆動軸36の回転数Ndとしては、例えば、モータMG2の回転数Nm2や、車速Vに換算係数を乗じて得られる回転数が用いられる。そして、エンジン22から要求パワーPe*が出力されると共に要求トルクTd*が駆動軸36に出力されるようにエンジン22の目標回転数Ne*や目標トルクTe*、モータMG1,MG2のトルク指令Tm1*,Tm2*を設定し、エンジン22の目標回転数Ne*および目標トルクTe*を24に送信すると共にモータMG1,MG2のトルク指令Tm1*,Tm2*をモータECU40に送信する。エンジンECU24は、エンジン22が目標回転数Ne*および目標トルクTe*に基づいて運転されるようにエンジン22の吸入空気量制御や燃料噴射制御、点火制御などを行なう。モータECU40によるモータMG1,MG2(インバータ41,42)の制御については上述した。
ここで、エンジンECU24によるエンジン22の燃料噴射制御について説明する。図3は、エンジンECU24によりエンジン22の燃料噴射制御を行なう際の制御ブロックの一例を示す制御ブロック図である。図示するように、エンジンECU24は、エンジン22の燃料噴射制御についての制御ブロックとして、ベース噴射量設定部90と、メインフィードバック部91と、サブフィードバック部92と、目標噴射量設定部93と、噴射弁制御部94と、ずれ量関連学習部95と、酸素吸蔵量推定部96とを有する。
ベース噴射量設定部90は、体積効率KLに基づいて、燃焼室129内の混合気の空燃比を目標空燃比とするための燃料噴射弁126の目標噴射量Qf*のベース値であるベース噴射量Qfbを設定する。ここで、目標空燃比としては、実施例では、理論空燃比(ストイキ)が用いられる。ベース噴射量Qfbは、例えば、燃焼室129内の混合気の空燃比を目標空燃比とするための単位噴射量(体積効率KLの1%当たりの噴射量)Qfpuに体積効率KLを乗じて演算される。体積効率KLは、上述したように、エアフローメータ148からの吸入空気量Qaと、クランクポジションセンサ140からのエンジン22のクランク角θcrに基づいて演算されるエンジン22の回転数Neと、に基づいて演算される。
メインフィードバック部91は、上流側空燃比センサ152からの検出空燃比AFuを制御用空燃比AFu*にするためのフィードバック制御により補正値δafを演算し、演算した補正値δafに値(-1)を乗じてから値1を加えた値を補正係数Kafに設定する。ここで、制御用空燃比AFu*は、サブフィードバック部92により設定される。補正値δafは、式(1)に示すように、検出空燃比AFuと制御用空燃比AFu*と比例項のゲインKpと積分項のゲインKiとを用いたフィードバック制御の関係式を用いて演算される。補正値δafに値(-1)を乗じてから値1を加えた値を補正係数Kafに設定する理由については後述する。
δaf=Kp・(AFu*-AFu)+Ki・∫(AFu*-AFu)dt (1)
サブフィードバック部92は、下流側空燃比センサ154からの検出空燃比AFdに基づいて、制御用空燃比AFu*にリッチ側の値を設定するリッチ補正と、制御用空燃比AFu*にリーン側の値を設定するリーン補正と、を交互に行なう。以下、この処理を「サブフィードバック補正」という。リッチ補正やリーン補正は、浄化触媒136aの酸素吸蔵量を調節するために行なわれる。サブフィードバック部92の詳細については後述する。
目標噴射量設定部93は、ベース噴射量Qfbに補正係数Kafを乗じた値を燃料噴射弁126の目標噴射量Qf*に設定する。噴射弁制御部94は、燃料噴射弁126から目標噴射量Qf*の燃料噴射が行なわれるように燃料噴射弁126を制御する。
ここで、メインフィードバック部91において、補正値δafに値(-1)を乗じてから値1を加えた値を補正係数Kafに設定する理由について説明する。リーン補正の実行中には、検出空燃比AFuが制御用空燃比AFu*よりも小さく(リッチ側であり)、式(1)により、基本的に、補正値δafが正の値になる。このため、補正係数Kafを値1よりも小さくして目標噴射量Qf*をベース噴射量Qfbよりも少なくし、検出空燃比AFuを現在値よりも大きくする(リーン側にする)必要がある。これに対して、リッチ補正の実行中には、検出空燃比AFuが制御用空燃比AFu*よりも大きく(リーン側であり)、式(1)により、基本的に、補正値δafが負の値になる。このため、補正係数Kafを値1よりも大きくして目標噴射量Qf*をベース噴射量Qfbよりも多くし、検出空燃比AFuを現在値よりも小さくする(リッチ側にする)必要がある。こうした理由により、補正値δafに値(-1)を乗じてから値1を加えた値を補正係数Kafに設定するのである。
ずれ量関連学習部95は、下流側空燃比センサ154からの検出空燃比AFdのずれ量(以下、「センサずれ量」という)に関するずれ量関連学習値を更新する。実施例では、ずれ量関連学習値として、ストイキ学習値AFdstを用いるものとした。ストイキ学習値AFdstは、検出空燃比AFdがストイキ基準値AFs付近のときの検出空燃比AFdに関する学習値である。ストイキ基準値AFsは、燃焼室129内の混合気の空燃比が理論空燃比のときの検出空燃比AFdの基準値(予め設定された値)である。ストイキ学習値AFdstからストイキ基準値AFsを減じた値(AFdst-AFs)は、センサずれ量を反映した値となる。ずれ量関連学習部95の詳細については後述する。
酸素吸蔵量推定部96は、上流側空燃比センサ152からの検出空燃比AFuと下流側空燃比センサ154からの検出空燃比AFdとエアフローメータ148からの吸入空気量Qaとに基づいて、浄化触媒136aの酸素吸蔵量OSを推定すると共に、その最大値である最大酸素吸蔵量OSmaxを推定する。一般に、最大酸素吸蔵量OSmaxは、浄化触媒136aの劣化が進行するにつれて減少する。
次に、サブフィードバック部92の詳細について説明する。図4は、サブフィードバック部92により実行されるサブフィードバック補正ルーチンの一例を示すフローチャートである。このルーチンは、繰り返し実行される。なお、実施例では、本ルーチンの繰り返しの実行が開始されるとき(初回の実行が開始されるとき)に、後述のリッチ補正フラグFrに値1が設定される。
図4のサブフィードバック補正ルーチンでは、サブフィードバック部92は、最初に、下流側空燃比センサ154からの検出空燃比AFdを入力すると共に(ステップS100)、リッチ補正フラグFrの値を調べる(ステップS110)。ここで、リッチ補正フラグFrは、リッチ補正およびリーン補正のうちの何れの実行中であるかを示すフラグである。
ステップS110でリッチ補正フラグFrが値1のときには、リッチ補正の実行中であると判断し、検出空燃比AFdを、ストイキ基準値AFsからサブオフセット量εRを減じたリッチ側閾値(AFs-εR)と比較する(ステップS120)。この処理は、検出空燃比AFdがある程度リッチ側の値になったか否か、即ち、浄化触媒136aの下流側の排気中の未燃焼燃料量がある程度増加したか否かを判定する処理である。
ステップS120で検出空燃比AFdがリッチ側閾値(AFs-εR)よりも大きいときには、未だ検出空燃比AFdがある程度リッチ側の値になっていないと判断し、ストイキ基準値AFsからメインオフセット量δRを減じた値(AFs-δR)を制御用空燃比AFu*に設定して(ステップS170)、本ルーチンを終了する。ここで、メインオフセット量δRは、サブオフセット量εR以上の範囲内で設定される。例えば、メインオフセット量δRには、サブオフセット量εRにマージンを加えた値が設定される。この場合、リッチ補正の実行を継続することになる。
ステップS120で検出空燃比AFdがリッチ側閾値(AFs-εR)以下のときには、検出空燃比AFdがある程度リッチ側の値になったと判断し、リッチ補正フラグFrに値0を設定し(ステップS130)、ストイキ基準値AFsにメインオフセット量δLを加えた値(AFs+δL)を制御用空燃比AFu*に設定して(ステップS140)、本ルーチンを終了する。ここで、メインオフセット量δLは、後述のサブオフセット量εL以上の範囲内で設定される。例えば、メインオフセット量δLには、サブオフセット量εLにマージンを加えた値が設定される。このようにして、リッチ補正の実行からリーン補正の実行に切り替えるのである。
ステップS110でリッチ補正フラグFrが値0のときには、リーン補正の実行中であると判断し、検出空燃比AFdを、ストイキ基準値AFsにサブオフセット量εLを加えたリーン側閾値(AFs+εL)と比較する(ステップS150)。この処理は、検出空燃比AFdがある程度リーン側の値になったか否か、即ち、浄化触媒136aの下流側の排気中の酸素量がある程度増加したか否かを判定する処理である。
ステップS150で検出空燃比AFdがリーン側閾値(AFs+εL)未満のときには、未だ検出空燃比AFdがある程度リーン側の値になっていないと判断し、上述のステップS140の処理により、値(AFs+δL)を制御用空燃比AFu*に設定して、本ルーチンを終了する。この場合、リーン補正の実行を継続することになる。
ステップS150で検出空燃比AFdがリーン側閾値(AFs+εL)以上のときには、検出空燃比AFdがある程度リーン側の値になったと判断し、リッチ補正フラグFrに値1を設定し(ステップS160)、上述のステップS170の処理により、値(AFs-δR)を制御用空燃比AFu*に設定して、本ルーチンを終了する。このようにして、リーン補正の実行からリッチ補正の実行に切り替えるのである。
図5は、検出空燃比AFdや、サブフィードバック補正の様子の一例を示す説明図である。図示するように、リーン補正の実行中に検出空燃比AFdがリーン側閾値(AFs+εL)以上に至ると(時刻t1,t3)、リッチ補正の実行に切り替える。また、リッチ補正の実行中に検出空燃比AFdがリッチ側閾値(AFs-εR)以下に至ると(時刻t2)、リーン補正の実行に切り替える。以下、リーン補正およびリッチ補正のうちの一方の開始から他方の終了まで(例えば、時刻t1~t3)を「サブフィードバック補正の1周期」という。
なお、リッチ補正の実行中には、ベース噴射量Qfbよりも多い値を目標噴射量Qf*に設定して燃料噴射弁126を制御するから、浄化触媒136aに流入する排気には、その排気中の酸素と過不足なく反応する未燃焼燃料量よりも多量の未燃焼燃料が含まれる。この多量の未燃焼燃料は、排気中の酸素や浄化触媒136aに吸蔵されている酸素により酸化されるから、浄化触媒136aの下流側の排気中の酸素量や未燃焼燃料量は十分に少なくなる。これにより、図示するように、検出空燃比AFdがストイキ基準値AFs付近のときに、検出空燃比AFdの単位時間当たりの変化量である検出空燃比変化率ΔAFdの絶対値が小さくなっている。
次に、ずれ量関連学習部95の詳細について説明する。図6は、ずれ量関連学習部95により実行されるずれ量関連学習ルーチンの一例を示すフローチャートである。このルーチンは、繰り返し実行される。なお、実施例では、本ルーチンの繰り返しの実行が開始される(初回の実行が開始される)ときに、後述の積算空燃比AFdsumや積算回数Nad、積算許可フラグFadに初期値としての値0が設定される。
図6のずれ量関連学習ルーチンでは、ずれ量関連学習部95は、最初に、検出空燃比AFdや検出空燃比変化率ΔAFd、リッチ補正フラグFr、定常運転フラグFstなどのデータを入力する(ステップS200)。
ここで、検出空燃比AFdとしては、下流側空燃比センサ154により検出された値が入力される。検出空燃比変化率ΔAFdとしては、検出空燃比AFdの単位時間(例えば、本ルーチンの実行間隔)当たりの変化量として演算された値が入力される。リッチ補正フラグFrは、サブフィードバック部92により設定された値が入力される。
定常運転フラグFstは、定常運転フラグ設定ルーチン(図示省略)により設定された値が入力される。定常運転フラグ設定ルーチンでは、エンジン22の運転状態が定常運転状態であるときには、定常運転フラグFstに値1が設定され、エンジン22の運転状態が定常運転状態でないときには、定常運転フラグFstに値0が設定される。
エンジン22の運転状態が定常運転状態である条件としては、例えば、吸入空気量Qaの単位時間当たりの変化量である吸入空気量変化率ΔQaが所定範囲Rqa内である条件や、体積効率KLの単位時間当たりの変化量である体積効率変化率ΔKLが所定範囲Rkl内である条件、エンジン22の目標トルクTe*の単位時間当たりの変化量である目標トルク変化率ΔTe*が所定範囲Rte内である条件などのうちの少なくとも1つが用いられる。所定範囲Rqaは、吸入空気量変化率ΔQaが値0付近である(絶対値が十分に小さい)とみなすことができる範囲として設定される。所定範囲Rklは、体積効率変化率ΔKLが値0付近である(絶対値が十分に小さい)とみなすことができる範囲として設定される。所定範囲Rteは、目標トルク変化率ΔTe*が値0付近である(絶対値が十分に小さい)とみなすことができる範囲として設定される。
こうしてデータが入力されると、積算許可フラグFadの値を調べる(ステップS210)。ここで、積算許可フラグFadは、検出空燃比AFdの積算(後述の積算空燃比AFdsumの演算)を許可するか否かを示すフラグである。
積算許可フラグFadが値0のときには、検出空燃比AFdの積算を許可していないと判断し、検知条件が成立したか否かを判定する(ステップS220,S230)。ここで、検知条件は、リーン補正の実行中に浄化触媒136aよりも下流側の排気のリーンを検知した条件である。実施例では、検知条件として、リッチ補正フラグFrが値0である条件、即ち、サブフィードバック部92によりリーン補正の実行中である条件(ステップS220)、検出空燃比変化率ΔAFdが正の閾値ΔAFdref以上である条件(ステップS230)、の論理積を用いるものとした。ここで、閾値ΔAFdrefは、検出空燃比AFdがリーン側に大きく変化したか否かを判定するために用いられる閾値である。
ステップS220でリッチ補正フラグFrが値1のときや、ステップS230で検出空燃比変化率ΔAFdが閾値ΔAFdref未満のときには、検知条件が成立していないと判断し、積算許可フラグFadを変更することなく、本ルーチンを終了する。
ステップS220でリッチ補正フラグFrが値0であり、且つ、ステップS230で検出空燃比変化率ΔAFdが閾値ΔAFdref以上のときには、検知条件が成立したと判断し、積算許可フラグFadに値1を設定して(ステップS240)、本ルーチンを終了する。
ステップS210で積算許可フラグFadが値1のときには、検出空燃比AFdの積算を許可していると判断し、検出空燃比AFdの積算条件が成立しているか否かを判定する(ステップS250~S280)。実施例では、検出空燃比AFdの積算条件として、リッチ補正フラグFrが値1である条件、即ち、サブフィードバック部92によりリッチ補正の実行中である条件(ステップS250)、定常運転フラグFstが値1である条件、即ち、エンジン22の運転状態が定常運転状態である条件(ステップS260)、検出空燃比AFdが所定範囲Raf1内である条件(ステップS270)、検出空燃比変化率ΔAFdが所定範囲Raf2内である条件(ステップS280)、の論理積を用いるものとした。
ここで、所定範囲Raf1は、検出空燃比AFdがストイキ基準値AFs付近である(両者の差分が十分に小さい)とみなすことができる範囲として設定される。所定範囲Raf2は、検出空燃比変化率ΔAFdが値0付近である(絶対値が十分に小さい)とみなすことができる範囲として設定される。
ステップS250でリッチ補正フラグFrが値0のときには、検出空燃比AFdの積算条件が成立していないと判断し、本ルーチンを終了する。上述したように、リーン補正の実行中に積算許可フラグFadを値0から値1に切り替えるから、ステップS210で積算許可フラグFadが値1で且つステップS250でリッチ補正フラグFrが値0のときとしては、積算許可フラグFadを値0から値1に切り替えてからリーン補正の実行からリッチ補正の実行に切り替えるまでの間を挙げることができる。
ステップS250でリッチ補正フラグFrが値1であり、且つ、ステップS260で定常運転フラグFstが値1であり、且つ、ステップS270で検出空燃比AFdが所定範囲Raf1内であり、且つ、ステップS280で検出空燃比変化率ΔAFdが所定範囲Raf2内であるときには、検出空燃比AFdの積算条件が成立していると判断する。そして、現在の積算空燃比(現在AFdsum)に検出空燃比AFdを加えた値を新たな積算空燃比AFdsumに設定すると共に(ステップS290)、現在の積算回数(現在Nad)を値1だけインクリメントした値を新たな積算回数Nadに設定する(ステップS300)。
続いて、積算回数Nadを学習許可回数Nadlrnと比較する(ステップS310)。ここで、学習許可回数Nadlrnは、ストイキ学習値AFdstの更新に適した回数として設定される。積算回数Nadが学習許可回数Nadlrn未満のときには、ストイキ学習値AFdstの更新に適していないと判断し、本ルーチンを終了する。
ステップS310で積算回数Nadが学習許可回数Nadlrn以上のときには、ストイキ学習値AFdstの更新に適していると判断し、積算空燃比AFdsumを積算回数Nadで除した値を平均空燃比AFdaveとして更新し(ステップS320)、この平均空燃比AFdaveになまし処理を施した値をストイキ学習値AFdstとして更新する(ステップS330)。
ステップS330の処理は、実施例では、式(2)に示すように、平均空燃比AFdaveと現在のストイキ点(現在AFdst)と時定数τとを用いたなまし処理によりストイキ学習値AFdstを更新することにより行なわれる。なお、実施例では、本ルーチンの繰り返しの実行が開始される(初回の実行が開始される)ときに、ストイキ学習値AFdstに、初期値としてのストイキ基準値AFsが設定される。
AFdst=現在AFdst・τ+AFdave・(1-τ) (2)
こうしてストイキ学習値AFdstを更新すると、更新した学習したストイキ学習値AFdstを用いてサブオフセット量εRおよびサブオフセット量εLを更新する(ステップS340)。実施例では、式(3)に示すように、ストイキ学習値AFdstからストイキ基準値AFsを減じた値(AFdst-AFs)をサブオフセット量εRの初期値εRiniから減じてサブオフセット量εRを更新する。また、式(4)に示すように、値(AFdst-AFs)をサブオフセット量εLの初期値δ1iniに加えてサブオフセット量εLを更新する。したがって、ストイキ学習値AFdstに初期値としてのストイキ基準値AFsを設定しているときには、サブオフセット量εRおよびサブオフセット量εLに初期値εRiniおよび初期値εLiniを設定し、ストイキ学習値AFdstを更新してストイキ学習値AFdstがストイキ基準値AFsからずれると、サブオフセット量εRおよびサブオフセット量εLに式(3)および式(4)により得られる値を設定することになる。
εR=εRini-(AFdst-AFs) (3)
εL=εLini+(AFdst-AFs) (4)
上述したように、ストイキ学習値AFdstからストイキ基準値AFsを減じた値(AFdst-AFs)は、センサずれ量を反映した値となる。そして、ステップS340の処理により、ストイキ学習値AFdstからストイキ基準値AFsを減じた値(AFdst-AFs)を用いてサブオフセット量εRおよびサブオフセット量εLを更新する。これにより、サブフィードバック補正の1周期において、浄化触媒136aに流入する酸素および未燃焼燃料のうちの一方が他方と互いに過不足なく反応する量よりも過剰になることを抑制することができる。
以下、この効果の詳細について説明する。なお、前提として、実施例では、値(AFdst-AFs)の絶対値が十分に小さい場合、サブフィードバック補正の1周期における浄化触媒136aの酸素吸蔵量OSの変動量の上限が最大酸素吸蔵量OSmaxの数%~数十%程度になるように、サブオフセット量εRの初期値εRiniおよびサブオフセット量εLの初期値εLiniを設定するものとした。
値(AFdst-AFs)の絶対値がある程度大きい場合、燃焼室129内の混合気の空燃比が理論空燃比に対してある程度ずれたときに、検出空燃比AFdがストイキ基準値AFsに等しくなる。このため、サブオフセット量εRおよびサブオフセット量εLを初期値εRiniおよび初期値εLiniで保持する、即ち、リッチ側閾値(AFs-εR)およびリーン側閾値(AFs+εL)を値(AFs-εRini)および値(AFs+εL)で保持すると、サブフィードバック補正の1周期において、リッチ補正およびリーン補正のうちの一方が他方に比してある程度長くなる可能性がある。このとき、浄化触媒136aに流入する酸素および未燃焼燃料のうちの一方が他方と互いに過不足なく反応する量よりも過剰になり、浄化触媒136aの酸素吸蔵量OSが、ゼロに近づいたり最大酸素吸蔵量OSmaxに近づいたりして、浄化触媒136aの排気の浄化性能が低下する懸念がある。これに対して、実施例では、ストイキ学習値AFdstからストイキ基準値AFsを減じた値(AFdst-AFs)を用いてサブオフセット量εRおよびサブオフセット量εLを更新する、即ち、リッチ側閾値(AFs-εR)およびリーン側閾値(AFs+εL)を更新することにより、こうした不都合が生じるのを抑制することができる。
ステップS340でサブオフセット量εRおよびサブオフセット量εLを更新すると、積算空燃比AFdsumおよび積算回数Nadを値0にリセットすると共に(ステップS350)、積算許可フラグFadに値0を設定して(ステップS360)、本ルーチンを終了する。
こうして積算許可フラグFadに値0を設定すると、次回に検知条件が成立するまで(ステップS220,S230)、積算許可フラグFadを値0で保持する。したがって、次回に検知条件が成立するまで、積算空燃比AFdsumや積算回数Nadの逐次更新や(ステップS290,S300)、平均空燃比AFdaveやストイキ学習値AFdst、サブオフセット量εRおよびサブオフセット量εLの更新(ステップS320~S340)を禁止することになる。
検出空燃比AFdの積算条件が成立しているときにおいて、検出空燃比AFdが所定範囲Raf1内の上限値側のときと下限値側のときとでは、積算空燃比AFdsumや平均空燃比AFdaveが異なり、ストイキ学習値AFdstに影響を与える。このため、1回のリッチ補正の実行開始から実行終了までの間に、検出空燃比AFdが所定範囲Raf1内の上限値側のときと下限値側のときとでストイキ学習値AFdstを複数回更新すると、ストイキ学習値AFdstの信頼性が低くなる可能性がある。これを踏まえて、実施例では、1回のリッチ補正の実行開始から実行終了までの間に、ストイキ学習値AFdstを1回だけ更新するものとした。これにより、ストイキ学習値AFdstの信頼性が低くなるのを抑制することができる。
ステップS250でリッチ補正フラグFrが値1のときにおいて、ステップS260で定常運転フラグFstが値0のときには、積算条件が成立していないと判断し、積算空燃比AFdsumおよび積算回数Nadを値0にリセットすると共に(ステップS350)、積算許可フラグFadに値0を設定して(ステップS360)、本ルーチンを終了する。
リッチ補正の実行中に、エンジン22の運転状態が定常運転状態でなくなってからその後に定常運転状態に戻った場合、検出空燃比AFdの積算条件が成立しているときの検出空燃比AFdが所定範囲Raf1内の上限値側のときと下限値側のときとが生じる。上述したように、検出空燃比AFdが所定範囲Raf1内の上限値側のときと下限値側のときとでは、積算空燃比AFdsumや平均空燃比AFdaveが異なり、ストイキ学習値AFdstに影響を与える。これを踏まえて、実施例では、リッチ補正の実行中にエンジン22の運転状態が定常運転状態でなくなると、今回のリッチ補正の実行中でのストイキ学習値AFdstの更新を中止するものとした。これにより、ストイキ学習値AFdstの信頼性が低くなるのを抑制することができる。
ステップS250でリッチ補正フラグFrが値1であり、且つ、ステップS260で定常運転フラグFstが値0のときにおいて、ステップS270で検出空燃比AFdが所定範囲Raf1外のときや、ステップS280で検出空燃比変化率ΔAFdが所定範囲Raf2外のときには、積算条件が成立していないと判断する。そして、積算回数Nadを学習許可回数Nadlrnよりも小さい閾値Nadrefと比較する(ステップS370)。ここで、閾値Nadrefは、検出空燃比AFdの積算条件の成立開始後に、検出空燃比AFdや検出空燃比変化率ΔAFdの乱れにより積算条件が一時的に不成立になり、その後に積算条件が再成立する可能性のある時間やそれよりも若干長い時間に対応する値として設定される。
ステップS370で積算回数Nadが閾値Nadref未満のときには、積算空燃比AFdsumや積算回数Nad、積算許可フラグFadを保持して、本ルーチンを終了する。これにより、検出空燃比AFdの積算条件の成立の開始直後などに、検出空燃比AFdや検出空燃比変化率ΔAFdの乱れにより積算条件が一時的に不成立になったときに、ストイキ学習値AFdstの更新の中止を回避することができる。この結果、ストイキ学習値AFdstの更新機会が少なくなるのを抑制することができる。
ステップS370で積算回数Nadが閾値Nadref以上のときには、積算空燃比AFdsumおよび積算回数Nadを値0にリセットすると共に(ステップS350)、積算許可フラグFadに値0を設定して(ステップS360)、本ルーチンを終了する。この場合、今回のリッチ補正の実行中の、積算空燃比AFdsumや積算回数Nadの逐次更新、平均空燃比AFdaveやストイキ学習値AFdst、サブオフセット量εRおよびサブオフセット量εLの更新を中止することになる。
積算回数Nadが閾値Nadref以上のときには、通常であれば、検出空燃比AFdや検出空燃比変化率ΔAFdの乱れにより積算条件が不成立になる可能性が低いと想定される。これを踏まえて、実施例では、積算回数Nadが閾値Nadref以上のときに、検出空燃比AFdが所定範囲Raf1外になったときや検出空燃比変化率ΔAFdが所定範囲Raf2外になったときには、今回のリッチ補正の実行中でのストイキ学習値AFdstの更新を中止するものとした。これにより、ストイキ学習値AFdstの信頼性が低くなるのを抑制することができる。
図7は、検出空燃比AFdやリッチ補正フラグFr、定常運転フラグFst、積算許可フラグFad、積算空燃比AFdsum、積算回数Nad、平均空燃比AFdave、ストイキ学習値AFdstの様子の一例を示す説明図である。図中、積算許可フラグFadや積算空燃比AFdsum、積算回数Nad、平均空燃比AFdave、ストイキ学習値AFdstについて、実線は実施例の様子を示し、一点鎖線は第1比較例の様子を示す。第1比較例としては、検知条件がリッチ補正フラグFrが値0である(リーン補正の実行中である)条件を含まない場合を考えるものとした。なお、図7では、定常運転フラグFstが値1で保持されている場合とした。
図示するように、リッチ補正フラグFrが値0で、検出空燃比AFdがリーン側閾値(AFs+εL)以上に至ると(時刻t12,t22)、リッチ補正フラグFrを値1に切り替える。また、リッチ補正フラグFrが値1で、検出空燃比AFdがリッチ側閾値(AFs-εR)以下に至ると(時刻t15,t25)、リッチ補正フラグFrを値0に切り替える。
また、リッチ補正フラグFrが値0のときに検知条件が成立すると(時刻t11,t21)、積算許可フラグFadを値0から値1に切り替える。そして、積算許可フラグFadが値1のときに、検出空燃比AFdの積算条件が成立すると(時刻t13,t23)、積算空燃比AFdsumや積算回数Nadの逐次更新を開始し、その後に積算回数Nadが学習許可回数Nadlrn以上に至ると(時刻t14,t24)、平均空燃比AFdaveやストイキ学習値AFdstの更新を実行し、積算空燃比AFdsumおよび積算回数Nadを値0にリセットすると共に積算許可フラグFadを値1から値0に切り替える。このようにしてストイキ学習値AFdstを更新することができる。
第1比較例では、リッチ補正フラグFrが値1のときにおいて(時刻t22~t25)、ストイキ学習値AFdstを更新して積算許可フラグFadを値1から値0に切り替えた後に(時刻t24)、検出空燃比AFdが急増すると(時刻t31)、検知条件が再成立して積算許可フラグFadを値0から値1に切り替える。そして、その後に検出空燃比AFdの積算条件が成立すると(時刻t32)、積算空燃比AFdsumや積算回数Nadの逐次更新を開始し、積算回数Nadが学習許可回数Nadlrn以上に至ると(時刻t33)、平均空燃比AFdaveやストイキ学習値AFdstの更新を実行する。したがって、1回のリッチ補正の実行開始から実行終了までの間に、検出空燃比AFdが所定範囲Raf1内の上限値側のときと下限値側のときとでストイキ学習値AFdstを2回更新することになる。このため、ストイキ学習値AFdstの信頼性が低くなる可能性がある。
これに対して、実施例では、リッチ補正フラグFrが値1のときにおいて(時刻t22~t25)、ストイキ学習値AFdstを更新して積算許可フラグFadを値1から値0に切り替えた後に(時刻t24)、検出空燃比AFdが急増しても(時刻t31)、リッチ補正フラグFrが値1であるために、検知条件が成立せずに積算許可フラグFadを値0で保持する。このようにして、時刻t32~t33で、積算空燃比AFdsumや積算回数Nadの逐次更新、検出空燃比AFdやストイキ学習値AFdstの更新を実行するのを回避している。したがって、1回のリッチ補正の実行開始から実行終了までの間に、ストイキ学習値AFdstを1回だけ更新することになる。これにより、ストイキ学習値AFdstの信頼性が低くなるのを抑制することができる。
図8は、図7と同様に、検出空燃比AFdやリッチ補正フラグFr、定常運転フラグFst、積算許可フラグFad、積算空燃比AFdsum、積算回数Nad、平均空燃比AFdave、ストイキ学習値AFdstの様子の一例を示す説明図である。図中、積算許可フラグFadや積算空燃比AFdsum、積算回数Nad、平均空燃比AFdave、ストイキ学習値AFdstについて、実線は実施例の様子を示し、一点鎖線は第2比較例の様子を示す。第2比較例としては、積算許可フラグFadが値1でリッチ補正フラグFrが値1のときに、定常運転フラグFstが値0になっても積算許可フラグFadを値1で保持する場合を考えるものとした。また、図中、時刻t11~t15,t21~t23,t25は、図7と同様である。
第2比較例では、リッチ補正フラグFrが値1のときにおいて(時刻t22~t25)、定常運転フラグFstが値0になっても(時刻t41)、積算許可フラグFadを値1で保持する。したがって、その後に定常運転フラグFstが値1になって検出空燃比AFdの積算条件が成立すると(時刻t42)、積算空燃比AFdsumや積算回数Nadの逐次更新を開始し、積算回数Nadが学習許可回数Nadlrn以上に至ると(時刻t43)、平均空燃比AFdaveやストイキ学習値AFdstの更新を実行する。図8では、検出空燃比AFdが所定範囲Raf1内の中央から下限値の間で、積算空燃比AFdsumや積算回数Nadの逐次更新、平均空燃比AFdaveやストイキ学習値AFdstの更新を実行している。エンジン22の運転状態が定常運転状態に戻って検出空燃比AFdの積算条件が成立している場合としては、検出空燃比AFdが所定範囲Raf1内の上限値側のときと下限値側のときとが生じる。このため、ストイキ学習値AFdstの更新を実行すると、ストイキ学習値AFdstの信頼性が低くなる可能性がある。
これに対して、実施例では、リッチ補正フラグFrが値1のときにおいて(時刻t22~t25)、定常運転フラグFstが値0になると(時刻t41)、積算許可フラグFadを値1から値0に切り替える。すると、その後に定常運転フラグFstが値1になっても(時刻t42)、リッチ補正フラグFrが値1であるために、検知条件が成立せずに積算許可フラグFadを値0で保持する。このようにして、時刻t42~t43で、積算空燃比AFdsumや積算回数Nadの逐次更新、検出空燃比AFdやストイキ学習値AFdstの更新を実行するのを回避している。これにより、ストイキ学習値AFdstの信頼性が低くなるのを抑制することができる。
図9は、図7と同様に、検出空燃比AFdやリッチ補正フラグFr、定常運転フラグFst、積算許可フラグFad、積算空燃比AFdsum、積算回数Nad、平均空燃比AFdave、ストイキ学習値AFdstの様子の一例を示す説明図である。図中、積算許可フラグFadや積算空燃比AFdsum、積算回数Nad、平均空燃比AFdave、ストイキ学習値AFdstについて、実線は実施例の様子を示し、一点鎖線は第3比較例の様子を示す。第3比較例としては、積算空燃比AFdsumや積算回数Nadの逐次更新中に、検出空燃比AFdや検出空燃比変化率ΔAFdの条件が不成立になったことにより検出空燃比AFdの積算条件が不成立になったときに、積算回数Nadと閾値Nadrefとの大小関係に拘わらずに、積算空燃比AFdsumや積算回数Nadを値0にリセットすると共に積算許可フラグFadを値1から値0に切り替える場合を考えるものとした。また、図中、時刻t11~t15,t21~t25は、図7と同様である。なお、図9では、定常運転フラグFstが値1で保持されている場合とした。
第3比較例では、積算空燃比AFdsumや積算回数Nadの逐次更新中に検出空燃比変化率ΔAFdが急減し始めて検出空燃比AFdの積算条件が不成立になると(時刻t51)、積算回数Nadと閾値Nadrefとの大小関係に拘わらずに、積算空燃比AFdsumや積算回数Nadを値0にリセットすると共に積算許可フラグFadを値1から値0に切り替える。このため、ストイキ学習値AFdstの更新機会が少なくなる。
これに対して、実施例では、積算空燃比AFdsumや積算回数Nadの逐次更新中に検出空燃比変化率ΔAFdが急減し始めて検出空燃比AFdの積算条件が不成立になったときに(時刻t51)、積算回数Nadが閾値Nadref未満の場合、積算空燃比AFdsumや積算回数Nad、積算許可フラグFadを保持する。そして、その後に検出空燃比AFdの積算条件が再成立すると(時刻t52)、積算空燃比AFdsumや積算回数Nadの逐次更新を再開し、積算回数Nadが学習許可回数Nadlrn以上に至ると(時刻t24)、平均空燃比AFdaveやストイキ学習値AFdstの更新を実行する。これにより、ストイキ学習値AFdstの更新機会が少なくなるのを抑制することができる。
以上説明した実施例のハイブリッド自動車20に搭載されるエンジン装置21では、リーン補正の実行中である条件、検出空燃比変化率ΔAFdが閾値ΔAFdref以上である条件、の論理積である検知条件が成立すると、検出空燃比AFdの積算を許可する。続いて、検出空燃比AFdの積算を許可しており、且つ、リッチ補正の実行中である条件、エンジン22の運転状態が定常運転状態である条件、検出空燃比AFdが所定範囲Raf1内である条件、検出空燃比変化率ΔAFdが所定範囲Raf2内である条件、の論理積である検出空燃比AFdの積算条件が成立しているときに、検出空燃比AFdを積算して積算空燃比AFdsumを演算する。そして、積算回数Nadが学習許可回数Nadlrn以上に至ると、積算空燃比AFdsumを用いて平均空燃比AFdaveを更新すると共にこの検出空燃比AFdを用いてストイキ学習値AFdstを更新する。このようにして、ストイキ学習値AFdstを更新することができる。
さらに、検出空燃比AFdの積算を許可しており且つリッチ補正の実行中に、ストイキ学習値AFdstを更新したときや、エンジン22の運転状態が定常運転状態でなくなったとき、積算回数Nadが閾値Nadref以上であり且つ検出空燃比AFdが所定範囲Raf1外になったり検出空燃比変化率ΔAFdが所定範囲Raf2外になったりしたときには、検出空燃比AFdの積算の許可を解除する。したがって、これらのときには、次回に検知条件が成立するまで、検出空燃比AFdや積算回数Nadの逐次更新、平均空燃比AFdaveやストイキ学習値AFdstの更新を禁止することになる。これにより、ストイキ学習値AFdstの信頼性が低くなるのを抑制することができる。即ち、ストイキ学習値AFdstをより適切な値とすることができる。
実施例のハイブリッド自動車20に搭載されるエンジン装置21では、ずれ量関連学習部95は、検知条件として、リッチ補正フラグFrが値0である条件、検出空燃比変化率ΔAFdが閾値ΔAFdref以上である条件、の論理積を用いるものとした。しかし、検出空燃比変化率ΔAFdが閾値ΔAFdref以上である条件に代えてまたは加えて、検出空燃比AFdが閾値AFdref以上である条件や、酸素吸蔵量OSが閾値OSref以上である条件を用いるものとしてもよい。ここで、閾値AFdrefとしては、ストイキ基準値AFsよりも大きく且つリーン側閾値(AFs+εL)よりも小さい値が用いられる。閾値OSrefとしては、燃焼室129内の混合気の空燃比が理論空燃比のときの酸素吸蔵量OSよりも多い値が用いられる。
実施例のハイブリッド自動車20に搭載されるエンジン装置21では、ずれ量関連学習部95は、検出空燃比AFdの積算条件として、リッチ補正フラグFrが値1である条件、定常運転フラグFstが値1である条件、検出空燃比AFdが所定範囲Raf1内である条件、検出空燃比変化率ΔAFdが所定範囲Raf2内である条件、の論理積を用いるものとした。しかし、定常運転フラグFstが値1である条件、検出空燃比変化率ΔAFdが所定範囲Raf2内である条件、のうちの少なくとも1つを用いないものとしてもよい。
実施例のハイブリッド自動車20に搭載されるエンジン装置21では、ずれ量関連学習部95は、図6のずれ量関連学習ルーチンのステップS270,S280の処理で用いる所定範囲Raf1,Raf2として、それぞれ固定値を用いるものとした。しかし、吸入空気量Qaおよび最大酸素吸蔵量OSmaxのうちの少なくとも1つに基づいて所定範囲Raf1,Raf2を設定するものとしてもよい。吸入空気量Qaおよび最大酸素吸蔵量OSmaxに基づいて所定範囲Raf1,Raf2を設定する場合、図10の第1所定範囲設定用マップを用いて所定範囲Raf1を設定すると共に、図11の第2所定範囲設定用マップを用いて所定範囲Raf1を設定するものとしてもよい。
図10の第1所定範囲設定用マップは、吸入空気量Qaおよび最大酸素吸蔵量OSmaxと所定範囲Raf1との関係として予め設定され、図示しないROMに記憶されている。図11の第2所定範囲設定用マップは、吸入空気量Qaおよび最大酸素吸蔵量OSmaxと所定範囲Raf2との関係として予め設定され、ROMに記憶されている。図10および図11に示すように、所定範囲Raf1,Raf2は、何れも、吸入空気量Qaが多いほどほど広くなり(上限値が大きくなると共に下限値が小さくなり)、且つ、最大酸素吸蔵量OSmaxが少ないほど広くなるように設定される。これは、以下の理由による。
リッチ補正の実行中に、吸入空気量Qaが多いほど即ち浄化触媒136aに流入する排気量が多いほど、且つ、最大酸素吸蔵量OSmaxが少ない即ち浄化触媒136aの劣化程度が大きいほど、浄化触媒136aの酸素吸蔵量OSの単位時間当たりの減少量が大きくなりやすく、検出空燃比AFdが所定範囲Raf1内である条件や検出空燃比変化率ΔAFdが所定範囲Raf2内である条件の成立時間が短くなりやすい。したがって、吸入空気量Qaが多いほど広くなり且つ最大酸素吸蔵量OSmaxが少ないほど広くなるように所定範囲Raf1,Raf2を設定することにより、吸入空気量Qaが多いときや最大酸素吸蔵量OSmaxが少ないときに、検出空燃比AFdの検出回数を確保しやすくすることができる。これにより、積算回数Nadが学習許可回数Nadlrn以上に至りやすくすることがでる。この結果、ストイキ学習値AFdstの更新機会が少なくなるのを抑制することができる。
実施例のハイブリッド自動車20に搭載されるエンジン装置21では、ずれ量関連学習部95は、図6のずれ量関連学習ルーチンのステップS310の処理で用いる学習許可回数Nadlrnとして、固定値を用いるものとした。しかし、吸入空気量Qaおよび最大酸素吸蔵量OSmaxのうちの少なくとも1つに基づいて学習許可回数Nadlrnを設定するものとしてもよい。吸入空気量Qaおよび最大酸素吸蔵量OSmaxに基づいて学習許可回数Nadlrnを設定する場合、図12の学習許可回数設定用マップを用いて学習許可回数Nadlrnを設定するものとしてもよい。
図12の学習許可回数設定用マップは、吸入空気量Qaおよび最大酸素吸蔵量OSmaxと学習許可回数Nadlrnとの関係として予め設定され、図示しないROMに記憶されている。図12に示すように、学習許可回数Nadlrnは、吸入空気量Qaが多いほど少なくなり、且つ、最大酸素吸蔵量OSmaxが少ないほど少なくなるように設定される。これは、以下の理由による。
上述したように、リッチ補正の実行中に、吸入空気量Qaが多いほど即ち浄化触媒136aに流入する排気量が多いほど、且つ、最大酸素吸蔵量OSmaxが少ない即ち浄化触媒136aの劣化程度が大きいほど、浄化触媒136aの酸素吸蔵量OSの減少速度が大きくなりやすい。したがって、吸入空気量Qaが多いほどほど少なくなり且つ最大酸素吸蔵量OSmaxが少ないほど少なくなるように学習許可回数Nadlrnを設定することにより、吸入空気量Qaが多いときや最大酸素吸蔵量OSmaxが少ないときに、積算回数Nadが学習許可回数Nadlrn以上に至りやすくすることができ、ストイキ学習値AFdstの更新機会が少なくなるのを抑制することができる。
実施例のハイブリッド自動車20に搭載されるエンジン装置21では、ずれ量関連学習部95は、図6のずれ量関連学習ルーチンのステップS370の処理で用いる閾値Nadrefとして、固定値を用いるものとした。しかし、吸入空気量Qaおよび最大酸素吸蔵量OSmaxのうちの少なくとも1つに基づいて閾値Nadrefを設定するものとしてもよい。吸入空気量Qaおよび最大酸素吸蔵量OSmaxに基づいて閾値Nadrefを設定する場合、図13の閾値設定用マップを用いて閾値Nadrefを設定するものとしてもよい。
図13の閾値設定用マップは、吸入空気量Qaおよび最大酸素吸蔵量OSmaxと閾値Nadrefとの関係として予め設定され、図示しないROMに記憶されている。図13に示すように、閾値Nadrefは、吸入空気量Qaが少ないほど多くなり、且つ、最大酸素吸蔵量OSmaxが多いほど多くなるように設定される。これは、以下の理由による。
上述したように、リッチ補正の実行中に、吸入空気量Qaが多いほど即ち浄化触媒136aに流入する排気量が多いほど、且つ、最大酸素吸蔵量OSmaxが少ない即ち浄化触媒136aの劣化程度が大きいほど、浄化触媒136aの酸素吸蔵量OSの減少速度が大きくなりやすい。そして、浄化触媒136aの酸素吸蔵量OSの減少速度が小さいと、検出空燃比AFdの積算条件の成立開始後に、検出空燃比AFdや検出空燃比変化率ΔAFdの乱れにより積算条件が一時的に不成立になったときに、その後に積算条件が再成立するまでの時間が長くなりやすい。発明者らは、このことを実験や解析により確認した。したがって、吸入空気量Qaが少ないほど多くなり且つ最大酸素吸蔵量OSmaxが多いほど多くなるように閾値Nadrefを設定することにより、吸入空気量Qaが少ないときや最大酸素吸蔵量OSmaxが多いときに、ストイキ学習値AFdstの更新機会が少なくなるのを抑制することができる。
実施例のハイブリッド自動車20に搭載されるエンジン装置21では、ずれ量関連学習部95は、検出空燃比AFdの積算を許可しており且つリッチ補正の実行中に、ストイキ学習値AFdstを更新したときや、エンジン22の運転状態が定常運転状態でなくなったとき、積算回数Nadが閾値Nadref以上であり且つ検出空燃比AFdが所定範囲Raf1外になったり検出空燃比変化率ΔAFdが所定範囲Raf2外になったりしたときには、検出空燃比AFdの積算の許可を解除するものとした。しかし、ストイキ学習値AFdstを更新したとき、エンジン22の運転状態が定常運転状態でなくなったとき、積算回数Nadが閾値Nadref以上であり且つ検出空燃比AFdが所定範囲Raf1外になったり検出空燃比変化率ΔAFdが所定範囲Raf2外になったりしたときのうちの一部だけを用いるものとしてもよい。また、検出空燃比AFdが所定範囲Raf1外になったり検出空燃比変化率ΔAFdが所定範囲Raf2外になったりしたときには、積算回数Nadと閾値Nadrefとの大小関係に拘わらずに、検出空燃比AFdの積算の許可を解除するものとしてもよい。
実施例のハイブリッド自動車20に搭載されるエンジン装置21では、ずれ量関連学習部95は、図6のずれ量関連学習ルーチンを実行するものとした。しかし、これに代えて、図14のずれ量関連学習ルーチンを実行するものとしてもよい。図14のずれ量関連学習ルーチンは、ステップS370の処理がステップS400,S410の処理に置き換えられた点、ステップS420の処理が追加された点や、ステップS350の処理がステップS430の処理に置き換えられた点を除いて、図6のずれ量関連学習ルーチンと同一である。したがって、図14のずれ量関連学習ルーチンのうち図6のずれ量関連学習ルーチンと同一の処理については、同一のステップ番号を付し、詳細な説明を省略する。なお、この変形例では、本ルーチンの繰り返しの実行が開始される(初回の実行が開始される)ときに、積算空燃比AFdsumや積算回数Nad、積算許可フラグFadに加えて後述の外れ回数Noutに初期値としての値0が設定される。
図14のずれ量関連学習ルーチンでは、ずれ量関連学習部95は、ステップS250でリッチ補正フラグFrが値1であり、且つ、ステップS260で定常運転フラグFstが値0のときにおいて、ステップS270で検出空燃比AFdが所定範囲Raf1外のときや、ステップS280で検出空燃比変化率ΔAFdが所定範囲Raf2外のときには、積算条件が成立していないと判断する。そして、積算回数Nadが値0よりも大きいか否かを判定する(ステップS400)。この処理は、検出空燃比AFdの積算条件の成立開始前であるか成立開始後であるかを判定する処理である。
ステップS400で積算回数Nadが値0のときには、検出空燃比AFdの積算条件の成立開始前であると判断し、本ルーチンを終了する。一方、積算回数Nadが値0よりも大きいときには、検出空燃比AFdの積算条件の成立開始後であると判断し、現在の外れ回数(現在Nout)を値1だけインクリメントした値を新たな外れ回数Noutに設定して(ステップS410)、本ルーチンを終了する。
ステップS320で平均空燃比AFdaveを更新すると、外れ回数Noutと図15の時定数設定用マップとを用いて時定数τを設定し(ステップS420)、平均空燃比AFdaveと時定数τとを用いた上述の式(2)のなまし処理によりストイキ学習値AFdstを更新する(ステップS330)。そして、ストイキ学習値AFdstを用いてサブオフセット量εRおよびサブオフセット量εLを更新し(ステップS340)、積算空燃比AFdsumや積算回数Nad、外れ回数Noutを値0にリセットし(ステップS430)、積算許可フラグFadに値0を設定して(ステップS360)、本ルーチンを終了する。
図15の時定数設定用マップは、外れ回数Noutと時定数τとのの関係として予め設定され、図示しないROMに記憶されている。図15に示すように、時定数τは、外れ回数Noutが多いほど大きくなるように設定される。これにより、外れ回数Noutが多いほど平均空燃比AFdaveのストイキ学習値AFdstに与える影響を小さくすることができる。
ここで、図6のずれ量関連学習ルーチンと図14のずれ量関連学習ルーチンとの相違点の意義について説明する。図6のずれ量関連学習ルーチンでは、検出空燃比AFdの積算条件の成立開始後に、積算回数Nadが閾値Nadref以上であり且つ検出空燃比AFdが所定範囲Raf1外になったり検出空燃比変化率ΔAFdが所定範囲Raf2外になったりしたときには、ストイキ学習値AFdstの更新を中止し、積算空燃比AFdsumや積算回数Nadを値0にリセットすると共に積算許可フラグFadを値0に切り替える。
これに対して、図14のずれ量関連学習ルーチンでは、検出空燃比AFdの積算条件の成立開始後に、検出空燃比AFdが所定範囲Raf1外になったり検出空燃比変化率ΔAFdが所定範囲Raf2外になったりしたときには、積算回数Nadと閾値Nadrefとの大小関係に拘わらずに、外れ回数Noutを更新すると共に積算空燃比AFdsumや積算回数Nad、積算許可フラグFadを保持する。そして、その後に積算条件が再成立し、積算空燃比AFdsumや積算回数Nadを逐次更新して積算回数Nadが学習許可回数Nadlrn以上に至ると、平均空燃比AFdaveを更新すると共に平均空燃比AFdavetに外れ回数Noutに基づく時定数τとを用いたなまし処理を施した値をストイキ学習値AFdstとして更新する。これにより、外れ回数Noutが多いときに、平均空燃比AFdaveのストイキ学習値AFdstに与える影響を小さくしつつ、ストイキ学習値AFdstの更新機会が少なくなるのを抑制することができる。
実施例のハイブリッド自動車20に搭載されるエンジン装置21では、ずれ量関連学習部95は、平均空燃比AFdaveになまし処理を施した値をストイキ学習値AFdstとして更新するものとした。しかし、平均空燃比AFdaveにレート処理を施した値をストイキ学習値AFdstとして更新するものとしてもよい。
実施例のハイブリッド自動車20に搭載されるエンジン装置21では、ずれ量関連学習部95は、平均空燃比AFdaveになまし処理を施した値をストイキ学習値AFdstとして更新するものとした。しかし、平均空燃比AFdaveをストイキ学習値AFdstとして更新するものとしてもよい。この場合、式(5)および式(6)に示すように、ストイキ学習値AFdstからストイキ基準値AFsを減じた値(AFdst-AFs)と、値1よりも小さいゲインαR,αLと、の積を用いてサブオフセット量εRおよびサブオフセット量εLを更新するのが好ましい。
εR=εRini-(AFdst-AFs)・αR (5)
εL=εLini+(AFdst-AFs)・αL (6)
実施例のハイブリッド自動車20に搭載されるエンジン装置21では、ずれ量関連学習部95は、平均空燃比AFdaveに基づいてストイキ学習値AFdstを更新し、式(3)および式(4)に示したように、ストイキ学習値AFdstからストイキ基準値AFsを減じた値(AFdst-AFs)を用いてサブオフセット量εRおよびサブオフセット量εLを更新するものとした。しかし、ストイキ学習値AFdstからストイキ基準値AFsを減じた値(AFdst-AFs)をストイキずれ量ΔAFdstとして更新するものとしてもよい。また、ストイキ学習値AFdstからストイキ基準値AFsを減じた値(AFdst-AFs)に緩変化処理(なまし処理やレート処理)を施して得られる値をストイキずれ量ΔAFdstとして更新するものとしてもよい。さらに、平均空燃比AFdaveからストイキ基準値AFsを減じた値(AFdave-AFs)をストイキずれ量ΔAFdstとして更新するものとしてもよい。加えて、平均空燃比AFdaveからストイキ基準値AFsを減じた値(AFdave-AFs)に緩変化処理を施して得られる値をストイキずれ量ΔAFdstとして更新するものとしてもよい。これらの場合、ストイキずれ量ΔAFdstが「ずれ量関連学習値」に該当する。また、これらの場合、式(7)および式(8)に示すように、ストイキずれ量ΔAFdstを用いてサブオフセット量εRおよびサブオフセット量εLを更新するものとしてもよい。
εR=εRini-ΔAFdst (7)
εL=εLini+ΔAFdst (8)
実施例では、エンジン22とプラネタリギヤ30とモータMG1,MG2とを備えるハイブリッド自動車20に搭載されるエンジン装置21の形態とした。しかし、エンジンと1つのモータとを備えるいわゆる1モータハイブリッド自動車に搭載されるエンジン装置の形態としてもよい。また、エンジンからの動力だけを用いて走行する自動車に搭載されるエンジン装置の形態としてもよい。さらに、建設設備などの移動しない設備に搭載されるエンジン装置の形態としてもよい。
実施例の主要な要素と課題を解決するための手段の欄に記載した発明の主要な要素との対応関係について説明する。実施例では、エンジン22が「エンジン」に相当し、浄化触媒136aが「浄化触媒」に相当し、下流側空燃比センサ154が「排気センサ」に相当し、エンジンECU24が「制御装置」に相当する。
なお、実施例の主要な要素と課題を解決するための手段の欄に記載した発明の主要な要素との対応関係は、実施例が課題を解決するための手段の欄に記載した発明を実施するための形態を具体的に説明するための一例であることから、課題を解決するための手段の欄に記載した発明の要素を限定するものではない。即ち、課題を解決するための手段の欄に記載した発明についての解釈はその欄の記載に基づいて行なわれるべきものであり、実施例は課題を解決するための手段の欄に記載した発明の具体的な一例に過ぎないものである。
以上、本発明を実施するための形態について実施例を用いて説明したが、本発明はこうした実施例に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において、種々なる形態で実施し得ることは勿論である。