(57)【要約】【課題】エンジン回転数に応じて発生する空燃比のズレを、エンジン回転数のゾーン毎に補正できるようにする。【解決手段】所定のエンジン回転数域にあるときに内燃機関の運転状態と記憶部に記憶されている学習値とに基づいて、空燃比を目標空燃比に制御するオープンループ制御手段と、前記オープンループ制御手段により目標空燃比を所定の希薄側の空燃比に制御している状態から、前記内燃機関の一部の気筒において、目標空燃比を理論空燃比に移行させ、前記Ｏ2センサの出力に基づいて決定されるフィードバック補正係数を用いて空燃比を理論空燃比にフィードバック制御するフィードバック制御手段と、前記フィードバック補正係数に基づいて学習値を算出し、前記記憶部を書き換える学習値算出手段と、を有し、前記所定のエンジン回転数域を複数のゾーンに分けて、各ゾーンで学習値を設定している。【選択図】図１１
2011252400.tif 000002
【特許請求の範囲】
【請求項１】
内燃機関の排気系に配置され理論空燃比近傍で出力特性が変化するＯ2センサを備えた船外機用内燃機関における複数気筒の空燃比を制御する空燃比制御装置であって、
所定のエンジン回転数域にあるときに前記内燃機関の運転状態と記憶部に記憶されている学習値とに基づいて、空燃比を目標空燃比に制御するオープンループ制御手段と、
前記オープンループ制御手段により目標空燃比を所定の希薄側の空燃比に制御している状態から、前記内燃機関の一部の気筒において、目標空燃比を理論空燃比に移行させ、前記Ｏ2センサの出力に基づいて決定されるフィードバック補正係数を用いて空燃比を理論空燃比にフィードバック制御するフィードバック制御手段と、
前記フィードバック補正係数に基づいて学習値を算出し、前記記憶部を書き換える学習値算出手段と、を有し、
前記所定のエンジン回転数域を複数のゾーンに分けて、前記各ゾーンで学習値を設定したことを特徴とする船外機用内燃機関の空燃比制御装置。
【請求項２】
前記学習値算出手段は、前記フィードバック補正係数に基づいて算出した学習値を、前記記憶部の全ゾーンの学習値に書き換えることと、前記記憶部の現在のエンジン回転数が属するゾーンの学習値にのみ書き換えることとを選択的に実行することを特徴とする請求項１に記載の船外機用内燃機関の空燃比制御装置。
【請求項３】
前記学習値算出手段は、前記フィードバック補正係数に基づいて算出した学習値と、前記記憶部の前回の学習値との差が所定の閾値を超えて大きい場合、前記フィードバック補正係数に基づいて算出した学習値を、前記記憶部の全ゾーンの学習値に書き換えることを特徴とする請求項２に記載の船外機用内燃機関の空燃比制御装置。
【請求項４】
前記学習値算出手段は、前記フィードバック補正係数に基づいて学習値を算出する際に、前回の学習値α´から新たな学習値α´への変化分を少なくするような補正を行うことを特徴とする請求項１乃至３のいずれか１項に記載の船外機用内燃機関の空燃比制御装置。
【請求項５】
学習値を書き換えるときに、前回の学習値から新たな学習値へと滑らかに変化するように処理を施すことを特徴とする請求項１乃至４のいずれか１項に記載の船外機用内燃機関の空燃比制御装置。
【請求項６】
エンジン回転数があるゾーンから他のゾーンに移るときの学習値の切替時に、前記あるゾーンの学習値から前記他のゾーンの学習値へと滑らかに変化するように処理を施すことを特徴とする請求項１乃至４のいずれか１項に記載の船外機用内燃機関の空燃比制御装置。
【請求項７】
内燃機関の排気系に配置され理論空燃比近傍で出力特性が変化するＯ2センサを備えた船外機用内燃機関における複数気筒の空燃比を制御する空燃比制御方法であって、
所定のエンジン回転数域にあるときに前記内燃機関の運転状態と記憶部に記憶されている学習値とに基づいて、空燃比を目標空燃比に制御するオープンループ制御ステップと、
前記オープンループ制御ステップにより目標空燃比を所定の希薄側の空燃比に制御している状態から、前記内燃機関の一部の気筒において、目標空燃比を理論空燃比に移行させ、前記Ｏ2センサの出力に基づいて決定されるフィードバック補正係数を用いて空燃比を理論空燃比にフィードバック制御するフィードバック制御ステップと、
前記フィードバック補正係数に基づいて学習値を算出し、前記記憶部を書き換える学習値算出ステップと、を有し、
前記所定のエンジン回転数域を複数のゾーンに分けて、前記各ゾーンで学習値を設定したことを特徴とする船外機用内燃機関の空燃比制御方法。
【請求項８】
内燃機関の排気系に配置され理論空燃比近傍で出力特性が変化するＯ2センサを備えた船外機用内燃機関における複数気筒の空燃比を制御するためのプログラムであって、
所定のエンジン回転数域にあるときに前記内燃機関の運転状態と記憶部に記憶されている学習値とに基づいて、空燃比を目標空燃比に制御するオープンループ制御手段と、
前記オープンループ制御手段により目標空燃比を所定の希薄側の空燃比に制御している状態から、前記内燃機関の一部の気筒において、目標空燃比を理論空燃比に移行させ、前記Ｏ2センサの出力に基づいて決定されるフィードバック補正係数を用いて空燃比を理論空燃比にフィードバック制御するフィードバック制御手段と、
前記フィードバック補正係数に基づいて学習値を算出し、前記記憶部を書き換える学習値算出手段と、してコンピュータを機能させ、
前記所定のエンジン回転数域を複数のゾーンに分けて、前記各ゾーンで学習値を設定したことを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、船外機用内燃機関の空燃比制御装置、空燃比制御方法およびプログラムに関するものである。特に、船外機用内燃機関の空燃比を所定の希薄側の空燃比に制御する場合に用いられて好適である。
【背景技術】
【０００２】
従来から内燃機関の空燃比を制御しようとする場合、内燃機関の排気系に配置される空燃比センサやＯ2センサが用いられている。空燃比センサは、Ｏ2センサよりも広い範囲で空燃比を精度よく検出することができるものの、Ｏ2センサよりも高価であり内燃機関のコストアップの要因になってしまう。一方、Ｏ2センサは、空燃比センサよりも安価であるものの、空燃比が理論空燃比近傍でしか検出することができない。具体的には、Ｏ2センサは、内燃機関の実際の空燃比が理論空燃比に対してリーン側（希薄側）であるかリッチ側であるかを検出することしかできない。
【０００３】
一方、燃費を向上させるために、空燃比を理論空燃比よりも所定の希薄側の空燃比にして運転する場合がある。このような場合、実際の空燃比が所定の希薄側の空燃比になっていれば、燃費を向上させることができるが、例えばインジェクタ等の部品のばらつきにより、実際の空燃比が、所定の希薄側の空燃比に対してズレた空燃比になっている場合がある。しかしながら、Ｏ2センサでは、上述したように実際の空燃比が理論空燃比に対してリーン側であるかリッチ側であるかを検出するのみであり、実際の空燃比が所定の希薄側の空燃比になっているか否かは検出できない。
【０００４】
このような問題に対して特許文献１では、まず理論空燃比を目標の空燃比にして運転させ、Ｏ2センサを用いて実際の空燃比とのズレをフィードバック制御によりフィードバック補正係数を算出しながら補正する。次に、フィードバック補正係数から学習補正係数を算出して、算出した学習補正係数を適用してオープンループ制御することで、実際の空燃比を所定の希薄側の空燃比に制御するようにしている。したがって、特許文献１に記載の内燃機関の空燃比制御によれば、Ｏ2センサを用いても、内燃機関の実際の空燃比を所定の希薄側の空燃比に制御することができ、燃費の向上を図ることができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開昭５７−１０５５３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
船外機は、自動二輪車や自動車等の車両と異なり、様々な種類の船体に搭載することが可能である。例えば高速船や重量船に取り付けたり、あるいは１つの船体に複数の船外機が搭載されたりする場合がある。このように使用環境が異なる場合、内燃機関では目標の空燃比に対する実際の空燃比のズレが生じてしまう。
【０００７】
また、諸外国を中心に内燃機関の燃料としてアルコール混合ガソリンが使用されるようになっている。純正ガソリンとアルコール混合ガソリンとでは、理論空燃費が異なるので、内燃機関についての燃料噴射量等も異なる。したがって、純正ガソリンからアルコール混合ガソリンに燃料を変更したときにも、内燃機関では目標の空燃比に対する実際の空燃比のズレが生じてしまう。
【０００８】
一方、内燃機関で生じる目標空燃比に対する実際の空燃比のズレは、上述したようなインジェクタ等の部品のばらつき、使用環境や燃料の変更に起因して発生する場合だけでなく、運転領域（エンジン回転数）に応じて発生する場合がある。この場合、あるエンジン回転数域での空燃比のズレを基準にして空燃比のズレを補正すると、逆にそれが他のエンジン回転数域での空燃比のズレとなってしまうおそれもある。
【０００９】
本発明は、上述したような問題点に鑑みてなされたものであり、エンジン回転数に応じて発生する空燃比のズレを、エンジン回転数のゾーン毎に補正できるようにすることを目的とする。
【課題を解決するための手段】
【００１０】
本発明に係る船外機用内燃機関の空燃比制御装置は、内燃機関の排気系に配置され理論空燃比近傍で出力特性が変化するＯ2センサを備えた船外機用内燃機関における複数気筒の空燃比を制御する空燃比制御装置であって、所定のエンジン回転数域にあるときに前記内燃機関の運転状態と記憶部に記憶されている学習値とに基づいて、空燃比を目標空燃比に制御するオープンループ制御手段と、前記オープンループ制御手段により目標空燃比を所定の希薄側の空燃比に制御している状態から、前記内燃機関の一部の気筒において、目標空燃比を理論空燃比に移行させ、前記Ｏ2センサの出力に基づいて決定されるフィードバック補正係数を用いて空燃比を理論空燃比にフィードバック制御するフィードバック制御手段と、前記フィードバック補正係数に基づいて学習値を算出し、前記記憶部を書き換える学習値算出手段と、を有し、前記所定のエンジン回転数域を複数のゾーンに分けて、前記各ゾーンで学習値を設定したことを特徴とする。
また、本発明の船外機用内燃機関の空燃比制御装置の他の特徴とするところは、前記学習値算出手段は、前記フィードバック補正係数に基づいて算出した学習値を、前記記憶部の全ゾーンの学習値に書き換えることと、前記記憶部の現在のエンジン回転数が属するゾーンの学習値にのみ書き換えることとを選択的に実行する点にある。
また、本発明の船外機用内燃機関の空燃比制御装置の他の特徴とするところは、前記学習値算出手段は、前記フィードバック補正係数に基づいて算出した学習値と、前記記憶部の前回の学習値との差が所定の閾値を超えて大きい場合、前記フィードバック補正係数に基づいて算出した学習値を、前記記憶部の全ゾーンの学習値に書き換える点にある。
また、本発明の船外機用内燃機関の空燃比制御装置の他の特徴とするところは、前記学習値算出手段は、前記フィードバック補正係数に基づいて学習値を算出する際に、前回の学習値α´から新たな学習値α´への変化分を少なくするような補正を行う点にある。
また、本発明の船外機用内燃機関の空燃比制御装置の他の特徴とするところは、学習値を書き換えるときに、前回の学習値から新たな学習値へと滑らかに変化するように処理を施す点にある。
また、本発明の船外機用内燃機関の空燃比制御装置の他の特徴とするところは、エンジン回転数があるゾーンから他のゾーンに移るときの学習値の切替時に、前記あるゾーンの学習値から前記他のゾーンの学習値へと滑らかに変化するように処理を施す点にある。
本発明の船外機用内燃機関の空燃比制御方法は、内燃機関の排気系に配置され理論空燃比近傍で出力特性が変化するＯ2センサを備えた船外機用内燃機関における複数気筒の空燃比を制御する空燃比制御方法であって、所定のエンジン回転数域にあるときに前記内燃機関の運転状態と記憶部に記憶されている学習値とに基づいて、空燃比を目標空燃比に制御するオープンループ制御ステップと、前記オープンループ制御ステップにより目標空燃比を所定の希薄側の空燃比に制御している状態から、前記内燃機関の一部の気筒において、目標空燃比を理論空燃比に移行させ、前記Ｏ2センサの出力に基づいて決定されるフィードバック補正係数を用いて空燃比を理論空燃比にフィードバック制御するフィードバック制御ステップと、前記フィードバック補正係数に基づいて学習値を算出し、前記記憶部を書き換える学習値算出ステップと、を有し、前記所定のエンジン回転数域を複数のゾーンに分けて、前記各ゾーンで学習値を設定したことを特徴とする。
本発明のプログラムは、内燃機関の排気系に配置され理論空燃比近傍で出力特性が変化するＯ2センサを備えた船外機用内燃機関における複数気筒の空燃比を制御するためのプログラムであって、所定のエンジン回転数域にあるときに前記内燃機関の運転状態と記憶部に記憶されている学習値とに基づいて、空燃比を目標空燃比に制御するオープンループ制御手段と、前記オープンループ制御手段により目標空燃比を所定の希薄側の空燃比に制御している状態から、前記内燃機関の一部の気筒において、目標空燃比を理論空燃比に移行させ、前記Ｏ2センサの出力に基づいて決定されるフィードバック補正係数を用いて空燃比を理論空燃比にフィードバック制御するフィードバック制御手段と、前記フィードバック補正係数に基づいて学習値を算出し、前記記憶部を書き換える学習値算出手段と、してコンピュータを機能させ、前記所定のエンジン回転数域を複数のゾーンに分けて、前記各ゾーンで学習値を設定したことを特徴とする。
【発明の効果】
【００１１】
本発明によれば、オープンループ制御を行うエンジン回転数域を複数のゾーンに分けて、各ゾーンで学習値を設定したので、エンジン回転数に応じて発生する空燃比のズレを、エンジン回転数のゾーン毎に補正することができる。更に、フィードバック補正係数に基づいて算出した学習値を、全ゾーンの学習値に書き換え可能にしておくことにより、部品のばらつき、使用環境や燃料の変更に起因して発生する空燃比のズレを、効率よく補正することができる。
【図面の簡単な説明】
【００１２】
【図１】船外機の外観図である。
【図２】船外機の内部構成を示すブロック図である。
【図３】Ｏ2センサが配置されている位置を示す船外機の模式図である。
【図４】空燃比制御の処理を示すメインフローチャートである。
【図５】フィードバック制御の処理を示すフローチャートである。
【図６】フィードバック制御において次の処理に進む条件を判定するためのフローチャートである。
【図７】フィードバック制御の内容をグラフで示した図である。
【図８】フィードバック制御の内容をグラフで示した図である。
【図９】エンジン回転数と負荷との関係の例を示す特性図である。
【図１０】第２の実施形態におけるフィードバック制御の処理を示すフローチャートである。
【図１１】第２の実施形態におけるフィードバック制御の内容をグラフで示した図である。
【発明を実施するための形態】
【００１３】
以下、本発明に係る実施形態について図面を参照して説明する。以下では、本発明を適用した実施形態を第２の実施形態で説明し、第２の実施形態の前提となる技術を第１の実施形態で説明する。
（第１の実施形態）
図１は、船外機の外観図である。図１に示すように、船外機１０は船体１のトランサムボード２に取り付けられる。船外機１０は全体がカバー１１によって覆われることで、形状が整えられて構成されている。このカバー１１の内部には、船外機用内燃機関としてのエンジン１２が収容されている。また、船外機１０の下方には、エンジン１２を動力とし船体１を推進させるためのスクリュー１３が配設されている。なお、本実施形態に係るエンジン１２は、水冷４サイクルＶ型６気筒が採用されている。
【００１４】
図２は、船外機の内部構成を示すブロック図である。船外機１０は、各種の構成機器を制御するコンピュータとしてのエンジンコントロールユニット２０を有している。エンジンコントロールユニット２０は、本実施形態に係る空燃比制御装置であって、ＣＰＵ２１、ＲＯＭ２２、ＲＡＭ２３、ＥＥＰＲＯＭ２４、入力インタフェース２５、出力インタフェース２６を含んで構成されている。
ＣＰＵ２１は、ＲＯＭ２２に格納されたプログラムを実行して、各種センサ等から出力される信号に基づいて、インジェクタ３０を介して空燃比を制御する。ＲＯＭ２２は、不揮発性メモリであって、ＣＰＵ２１が実行するプログラムやＣＰＵ２１が各機器を制御するときの初期値や閾値等を格納している。ＲＡＭ２３は、揮発性メモリであって、ＣＰＵ２１が各機器を制御するときに算出した情報等を一時的に記憶している。ＥＥＰＲＯＭ２４は、書き換え可能な記憶部としての不揮発性メモリであって、ＣＰＵ２１が各機器を制御する場合の情報等、例えば空燃比を制御するための学習値を記憶している。
【００１５】
入力インタフェース２５は、図２に示すように、クランク角センサ４１、スロットル開度センサ４２、吸気管圧力センサ４３、シリンダ壁温センサ４４、冷却水温度センサ４５、イグニッションスイッチ４６、チルト＆トリム角センサ４７、Ｏ2センサ４８、姿勢計４９等から出力される信号を受信する入力回路である。
クランク角センサ４１は、各気筒のクランクシャフト（不図示）に近接して配置され、所定のクランク角度で信号を出力する。なお、ＣＰＵ２１は、クランク角センサ４１から出力された信号をカウントすることで、エンジン回転数を検出することができる。
【００１６】
また、操船者によるスロットルレバーの操作に応じて、吸気管（不図示）に配置されたスロットバルブ（不図示）が閉閉し、エンジン１２に供給される空気量が調整される。このとき、スロットル開度センサ４２は、スロットバルブの開度に応じた信号を出力する。
吸気管圧力センサ４３は、吸気管に配置され、吸気管内圧力の信号を出力する。
シリンダ壁温センサ４４は、エンジン１２のシリンダブロック（不図示）の温度の信号を出力する。
冷却水温度センサ４５は、冷却水の温度の信号を出力する。
イグニッションスイッチ４６は、操船者によりオンとオフとが選択できるように構成され、オンされることにより各機器に電力が供給され、オフされることにより各機器への電力が遮断される。
チルト＆トリム角センサ４７は、図１に示すように船体１に対する船外機１０のトリム角βを検出し信号を出力する。
【００１７】
Ｏ2センサ４８は、エンジン１２の排気系に配置され、理論空燃比近傍で特性が変化する出力を生じる。具体的には、Ｏ2センサ４８は、エンジン１２の実際の空燃比が理論空燃比に対してリーン側であるかリッチ側であるかを示す信号を出力する。
図３は、Ｏ2センサ４８が配置されている位置を示す船外機の模式図であり、船外機を後方から見た図である。本実施形態では上述したようにＶ型６気筒のエンジン１２が用い
られている。Ｖ型エンジンは、複数の気筒がシリンダ内であって、クランクシャフト（不図示）を中心に所定のバンク角でＶ字型に配置される。本実施形態のエンジン１２では、６気筒のうち右側バンク１４に３つの気筒（♯１、♯３、♯５）が配置され、左側バンク１５に３つの気筒（♯２、♯４、♯６）が配置されている。
【００１８】
右側の各気筒（♯１、♯３、♯５）には排気管１６が接続され、左側の各気筒（♯２、♯４、♯６）には排気管１７が接続されている。排気管１６と排気管１７とは、船外機１０の下方に向かって延出され、船外機１０の略中央で結合され、さらに下方に向かうように延設されている。各気筒から排気された排気ガスは、各排気管１６、１７を通って、水中に排気される。
【００１９】
本実施形態に係るエンジン１２では、Ｏ2センサ４８は、排気管１７であって気筒♯２に近接した位置に配設されている。したがって、Ｏ2センサ４８は、主に気筒♯２によって排気された排気ガスの空燃比が理論空燃比に対してリーン側であるかリッチ側であるかを検出している。ただし、本実施形態では、左側バンク１５の３つの気筒（♯２、♯４、♯６）の排気ガスは共通の排気管１７によって排気される。したがって、Ｏ2センサ４８は、気筒♯２よりも影響は少ないものの、気筒（♯４、♯６）の排気ガスを含んだ排気ガスの空燃比を検出している。このようにＯ2センサ４８は、一方のバンクに配置されている気筒の排気系のみに設置されている。すなわち、Ｏ2センサ４８は、エンジン１２に配置された複数気筒のうち、一部の気筒の排気ガスの空燃比を検出できるように構成されている。
姿勢計４９は、例えばジャイロセンサであって、船外機１０の姿勢を検出し信号を出力する。
また、出力インタフェース２６は、インジェクタ３０やイグニッションコイル３１を制御するための信号を送信する出力回路である。
【００２０】
エンジンコントロールユニット２０は、各種センサ等が出力する信号に基づいてインジェクタ３０の燃料噴射量を制御し空燃比の制御を行う。
特に、燃費を向上させるために、空燃比を理論空燃比よりも所定の希薄側の空燃比にして運転（希薄燃焼運転）させたい場合がある。しかし、例えばインジェクタ等の部品のばらつきにより、実際の空燃比が所定の希薄側の空燃比よりズレた空燃比になっている場合があり、この場合、Ｏ2センサ４８は実際の空燃比が所定の希薄側の空燃比よりもどのくらいズレているかを検出することができない。したがって、例えば、実際の空燃比が所定の希薄側の空燃比よりもリッチ側にズレて運転されている場合、燃費を向上させることは困難である。
【００２１】
したがって、本実施形態では、まず目標空燃比を理論空燃比にして、Ｏ2センサ４８を用いてフィードバック制御を実行し、フィードバック補正係数を算出しながら、実際の空燃比を目標空燃比に補正するための後述する学習値を算出する。次に、算出した学習値を適用させてオープンループ制御することで、実際の空燃比を所定の希薄側の空燃比に精度よく制御することができ、燃費を向上させた運転を行うことができる。
また、例えば学習値が算出された後に、船外機１０が異なる船体に取り付けたり、純正ガソリンに代えてアルコール混合ガソリンが使用されたりする場合がある。この場合、前回学習した学習値で空燃比を制御しても、実際の空燃比は、所定の希薄側の空燃比よりズレた空燃比になってしまう。通常、船外機１０の取り付けや燃料の給油はエンジン１２を停止した状態で行うので、本実施形態では、エンジン始動後に初めて所定の条件を満たしたときに、再び学習値を算出し、算出した学習値を適用させてオープンループ制御することで、実際の空燃比を異なる使用環境や燃料に応じた所定の希薄側の空燃比に制御することができる。
【００２２】
以下、上述した空燃比制御について具体的に説明する。
まず、本実施形態では、空燃比制御をするときの燃料噴射量を、次式（１）によって算出する。
燃料噴射量Ｔｉ＝基本燃料噴射量ＴＰ×
（１＋フィードバック補正係数α＋学習値α´＋各種補正係数Ｃｏｅｆ）・・・式（１）
ここで、基本燃料噴射量ＴＰは、吸気管圧力センサ４３により検出された吸気管圧力に基づいて算出され、吸気温度や大気圧等により補正される値である。すなわち、現在の運転状態に応じた値が適用される。
フィードバック補正係数αは、フィードバック制御時にＯ2センサ４８の出力に基づいて算出される値（％）であり、オープンループ制御時にはα＝０になる。
学習値α´は、フィードバック制御時に算出されたフィードバック補正係数αの出力に基づいて算出される値（％）であり、フィードバック制御時およびオープンループ制御時にそれぞれ代入される。
各種補正係数Ｃｏｅｆは、エンジン１２の始動時、暖機時、加減速時等の条件で補正される係数（％）である。
【００２３】
以下、エンジンコントロールユニット２０が行う処理について図４〜図７を参照して説明する。図４は、空燃比制御の処理を示すメインフローチャートである。図５は、フィードバック制御の処理を示すフローチャートである。図６は、フィードバック制御において次の処理に進む条件を判定するためのフローチャートである。図７は、フィードバック制御の内容をグラフで示した図である。なお、図４〜図６に示すフローチャートは、エンジンコントロールユニット２０のＣＰＵ２１がＲＯＭ２２に格納されたプログラムを実行することにより実現される。
【００２４】
まず、ステップＳ１０では、操船者によりイグニッションスイッチ４６がオンされることで、ＣＰＵ２１は各機器に電力を供給するように制御し、エンジン１２が始動される。ＣＰＵ２１は、ＲＯＭ２２に格納されたプログラムをＲＡＭ２３に読み出し、プログラムに基づいて空燃比制御の処理を開始する。
【００２５】
ステップＳ１１において、エンジン始動後、初めて本処理を行うとき、ＣＰＵ２１は前回の運転でエンジン１２をオフしたときにＥＥＰＲＯＭ２４に記憶した学習値α´を読み出し、ＲＡＭ２３に記憶する。ＣＰＵ２１は、ＲＡＭ２３に記憶した学習値α´を上述した式（１）に代入すると共に、フィードバック補正係数α＝０を式（１）に代入して燃料噴射量を算出し、オープンループ制御にて空燃比を制御する。このとき、基本噴射量ＴＰは、上述したように吸気管圧力センサ４３により検出された吸気管圧力やエンジン回転数等に基づいて算出される。吸気管圧力は運転状態に応じて変動するので、ＣＰＵ２１は、運転状態とＲＡＭ２３に記憶された学習値α´とに応じて燃料噴射量Ｔｉが算出され、オープンループ制御にて空燃比を制御することとなる。なお、エンジン１２を購入して初めて運転する場合、ＥＥＰＲＯＭ２４に記憶された初期値の学習値α´を適用することができる。
【００２６】
ステップＳ１２では、ＣＰＵ２１は、今回エンジン１２を始動してから学習値α´を前回の学習値から書き換えたか否か、すなわち再び学習値を学習したか否かを判定する。具体的には、ＣＰＵ２１は、ＲＡＭ２３に記憶されている学習完了フラグＦｆを読み出して判定する。学習が既に完了し学習完了フラグＦｆが１の場合、ステップＳ１４に処理を進め、学習が完了しておらず学習完了フラグＦｆが０の場合、ステップＳ１３に処理を進める。
【００２７】
ステップＳ１３では、ＣＰＵ２１は、後述するフィードバック制御を行い、ＲＡＭ２３から読み出した学習値α´を今回学習した学習値に書き換えて更新する。すなわち、ＣＰＵ２１は、現時点におけるエンジン１２の使用環境や燃料に応じた学習値α´を再学習する。このように、学習値α´を再学習するのは、イグニッションスイッチ４６がオンされる前に、船外機１０が前回とは異なる船体１に取り付けられたり、燃料にアルコール混合ガソリンが給油されたりするためである。ステップＳ１３の処理については、図５のフローチャートを参照して後述する。
【００２８】
ステップＳ１４では、ＣＰＵ２１は、操船者によりイグニッションスイッチ４６がオフされたか否かを判定する。オフされた場合、ＣＰＵ２１は、ＲＡＭ２３に記憶されている学習値α´をＥＥＰＲＯＭ２４に記憶して、各機器に電力の供給を停止すると共に、エンジン１２を停止する。ここで、学習値α´をＥＥＰＲＯＭ２４に記憶することで、ＣＰＵ２１は、電力の供給が停止されても次回のエンジン１２の始動時にステップＳ１１においてＥＥＰＲＯＭ２４から学習値α´を読み出すことができる。
イグニッションスイッチ４６がオフされない場合、ＣＰＵ２１は、ステップＳ１１に処理を戻し、ＲＡＭ２３に記憶されている学習値α´を用いて、オープンループ制御を行うことで、空燃比を目標空燃比に制御することができる。
【００２９】
次に、上述したステップＳ１３におけるフィードバック制御について、図５に示すフローチャートおよび図７に示す空燃比の制御方法を示すグラフを参照して説明する。
まず、ステップＳ２０では、ＣＰＵ２１は、全ての気筒（♯１〜♯６）について、目標空燃比を所定の希薄側の空燃比にして運転（希薄燃焼運転）する。なお、本実施形態では、所定の希薄側の空燃比として１８を適用するものとする。
具体的に、ステップＳ２０では、ＣＰＵ２１は、ＲＡＭ２３に記憶された学習値α´を上述した式（１）に代入すると共に、フィードバック補正係数α＝０を式（１）に代入して燃料噴射量を算出し、オープンループ制御にて目標空燃比が１８になるように制御する。ここで、ＲＡＭ２３に記憶されている学習値α´は、前回のエンジン始動時において記憶した学習値であるため、今回、異なる船体に取り付けられていたり、アルコール混合ガソリンが給油されたりして、使用環境や燃料が異なっている場合には、目標空燃比に対して実際の空燃比がズレてしまう。
図７（ａ）は目標空燃比に対して実際の空燃比の変動を示すグラフであり、図７（ｂ）はフィードバック補正係数の変位を示すグラフである。ここでは、図７（ａ）に示すように、目標空燃比に対して実際の空燃比がＳだけズレているものとする。
【００３０】
上述したようにＯ2センサ４８は、実際の空燃比が理論空燃比のリーン側かリッチ側かしか検出することしかできず、所定の希薄側の空燃比に対してどのくらいズレているか、すなわち図７（ａ）に示すＳの値を検出することができない。そこで、ＣＰＵ２１は、目標空燃比を理論空燃比にして、実際の空燃比をＯ2センサ４８で検出して、目標空燃比に対する実際の空燃比のズレを補正するフィードバック制御を実行する。
【００３１】
ステップＳ２１では、ＣＰＵ２１は、目標空燃比を理論空燃比に移行させる前に、以下で説明する所定の条件が成立しているか否かを判定する。具体的には、ＣＰＵ２１は、ＲＡＭ２３に記憶されている移行条件成立フラグＦａを読み出して判定する。移行条件が成立し移行条件成立フラグＦａが１の場合、ステップＳ２２に処理を進め、移行条件が成立せず移行条件成立フラグＦａが０の場合、移行条件が成立するのを待機する。
【００３２】
次に、上述したステップＳ２１における条件成立の判定方法について、図６に示すフローチャートを参照して説明する。
まず、ステップＳ４１では、ＣＰＵ２１は、現在のエンジン回転数が、空燃比が安定するエンジン回転数であるか否かを判定する。空燃比が安定するエンジン回転数の場合ステップ４２に処理を進め、条件を満たさない場合ステップＳ４８に処理を進める。ステップＳ４８では、移行条件成立フラグＦａを０にしてＲＡＭ２３に記憶し、目標空燃比を理論空燃比に移行させないようにする。ステップＳ４１のような判定を行うのは、エンジン回転数が高回転である場合、あるいは低回転である場合、空燃比が安定せず正確なフィードバック制御を行うことができないためである。ステップＳ４１では、エンジン回転数が、例えば２０００ｒｐｍ以上４０００ｒｐｍ以下であるか否か等、ＲＯＭ２２に記憶された閾値に基づいて判定される。
【００３３】
ステップＳ４２では、ＣＰＵ２１は、船外機１０が安定した姿勢で所定時間が経過しているか否かを判定する。具体的には、ＣＰＵ２１は、姿勢計４９が出力する信号に基づいて船外機１０が安定した姿勢で所定時間が経過しているか否かを判定する。船外機１０が安定した姿勢で所定時間が経過している場合ステップＳ４３に処理を進め、条件を満たさない場合ステップＳ４８に処理を進め移行条件成立フラグＦａを０にしてＲＡＭ２３に記憶する。ステップＳ４２のような判定を行うのは、例えば滑走状態になる前のように船体１がプレーニングしていて、船体１の姿勢が変化している場合、エンジン回転数および空燃比が変化してしまい、正確なフィードバック制御を行うことができないためである。なお、船体１の姿勢は姿勢計で検出する場合に限られず、スロットル開度およびエンジン回転数が一定で所定時間が経過しているか否かを判定してもよい。
【００３４】
ステップＳ４３では、ＣＰＵ２１は、操船者により船外機１０のトリム角βを変更する操作がされた後、所定時間が経過しているか否かを判定する。具体的には、ＣＰＵ２１は、チルト＆トリム角センサ４７が出力する信号に基づいて船外機１０のトリム角βが変更されたかを判定する。船外機１０のトリム角βを変更する操作がされた後、所定時間が経過している場合ステップＳ４４に処理を進め、条件を満たさない場合ステップＳ４８に処理を進め移行条件成立フラグＦａを０にしてＲＡＭ２３に記憶する。ステップＳ４３のような判定を行うのは、トリム角βを変更する操作をしている場合船外機１０の姿勢が変化し、エンジン回転数および空燃比が変化してしまい、正確なフィードバック制御を行うことができないためである。
【００３５】
ステップＳ４４では、ＣＰＵ２１は、エンジン１２が暖機運転中ではないか否かを判定する。具体的には、ＣＰＵ２１は、シリンダ壁温センサ４４が出力する信号に基づいて例えばＲＯＭ２２に記憶されている閾値以上の温度であるか否かを判定する。暖機運転中でない場合ステップＳ４５に処理を進め、暖機運転中である場合ステップＳ４８に処理を進め移行条件成立フラグＦａを０にしてＲＡＭ２３に記憶する。ステップＳ４４のような判定を行うのは、暖機運転中の場合空燃比が変化してしまい、正確なフィードバック制御を行うことができないためである。
【００３６】
なお、本実施形態のように、水冷エンジンの場合、上述した閾値の温度をサーモスタット（不図示）の開温度に応じた値に設定することができる。したがって、寒冷地仕様のエンジン１２では開温度が高いサーモスタットが用いられることがあるため、この場合、閾値の温度をサーモスタットの開温度に応じて高く設定する。このように、閾値の温度を設定することで、より安定した空燃比でのフィードバック制御ができる。
【００３７】
ステップＳ４５では、ＣＰＵ２１は、エンジン回転数の変化が少ない状態で、所定時間が経過したか否かを判定する。具体的には、ＣＰＵ２１は、クランク角センサ４１が出力する信号をカウントすることでエンジン回転数を検出し、エンジン回転数の変化が少ないか否かを判定する。エンジン回転数の変化が少ない状態で、所定時間が経過した場合ステップＳ４６に処理を進め、条件を満たさない場合ステップＳ４８に処理を進め移行条件成立フラグＦａを０にしてＲＡＭ２３に記憶する。ステップＳ４５のような判定を行うのは、加速時や減速時のようなエンジン回転数の変化が大きい間は、空燃比が変化してしまい、正確なフィードバック制御を行うことができないためである。
【００３８】
ステップＳ４６では、ＣＰＵ２１は、スロットル開度の変化が少ない状態で、所定時間が経過したか否かを判定する。具体的には、ＣＰＵ２１は、スロットル開度センサ４２が出力する信号に基づいて単位時間当たりのスロットル開度の変化が少ないか否かを判定する。スロットル開度の変化が少ない状態で、所定時間が経過している場合ステップＳ４７に処理を進め、条件を満たさない場合ステップＳ４８に処理を進め移行条件成立フラグＦａを０にしてＲＡＭ２３に記憶する。ステップＳ４６のような判定を行うのは、スロットル開度の変化が大きい場合、空燃比が変化してしまい、正確なフィードバック制御を行うことができないためである。
【００３９】
ステップＳ４７では、上述した各ステップの所定の条件を満たしエンジン１２が正確なフィードバック制御を行うことができる状態であるため、ＣＰＵ２１は、移行条件成立フラグＦａを１にしてＲＡＭ２３に記憶し、図５に示すステップＳ２１の処理に戻る。
【００４０】
上述したように、ステップＳ２１では、ＣＰＵ２１は、移行条件成立フラグＦａが１の場合、ステップＳ２２に処理を進める。
ステップＳ２２では、ＣＰＵ２１は、目標空燃比を所定の希薄側の空燃比１８にして運転している状態から、目標空燃比を理論空燃比１４．７に移行させる。本実施形態では、ＣＰＵ２１は、６つの気筒（♯１〜♯６）のうち一部の気筒であって、Ｏ2センサ４８が配置された左側バンク１５の気筒（♯２、♯４、♯６）についてのみ理論空燃比に移行させる。このとき、ＣＰＵ２１は、フィードバック補正係数α＝０にしたまま、基本噴射量ＴＰを増加させ、目標空燃比が理論空燃比１４．７になるように運転する。なお、このとき、ＣＰＵ２１は式（１）の学習値α´には、前回の学習値を代入したまま、基本噴射量ＴＰを変動させる。
【００４１】
ステップＳ２３では、ＣＰＵ２１は、そのまま目標空燃比を理論空燃比にした状態で運転を継続させる。なお、図７（ａ）に示すように、目標空燃比を理論空燃比にしたとしても、学習値α´の値が前回のエンジン１２の始動時において記憶した学習値で運転しているため、実際の空燃比は理論空燃比に対してズレてしまっている。
ステップＳ２４では、ＣＰＵ２１は、目標空燃比を理論空燃比に移行してから、所定時間が経過したか否かを判定する。所定時間が経過した場合ステップＳ２５に処理を進め、所定時間が経過していない場合ステップＳ２３に処理を戻し、所定時間が経過するのを待機する。ステップＳ２４のような処理を行うのは、図７（ａ）に示すように、移行条件が成立した後、目標空燃比を理論空燃比にしてから実際の空燃比が一定の空燃比になるまでにタイムラグがあるためである。なお、ここでの所定時間は、現在のエンジン回転数に応じた時間が適用される。
【００４２】
ステップＳ２５では、ＣＰＵ２１は、フィードバック制御に移行する前に、所定の条件が成立しているか否かを判定する。具体的には、ＣＰＵ２１は、ＲＡＭ２３に記憶されている実行条件成立フラグＦｂを読み出して判定する。実行条件が成立し実行条件成立フラグＦｂが１の場合ステップＳ２６に処理を進め、実行条件が成立せず実行条件成立フラグＦｂが０の場合実行条件が成立するのを待機する。
【００４３】
ステップＳ２５における条件成立の判定方法は、上述した図６に示すフローチャートと同様であり、詳細な説明は省略する。ここでは、上述したステップＳ４１からステップＳ４６までの処理で説明したように、所定の条件を満たし、現在のエンジン１２の運転状態が正確なフィードバック制御を行うことができる場合、ステップＳ４７に処理を進め、ＣＰＵ２１は、実行条件成立フラグＦｂに１を代入し、ＲＡＭ２３に記憶する。一方、正確なフィードバック制御を行うことができない場合、ステップＳ４８に処理を進め、ＣＰＵ２１は、実行条件成立フラグＦｂに０を代入し、ＲＡＭ２３に記憶する。その後、ステップＳ２５に処理を戻す。このように、実行条件が成立する場合にのみフィードバック制御を実行することにより、正確なフィードバック制御を行うことができる。
【００４４】
上述したように、ステップＳ２５では、ＣＰＵ２１は、実行条件が成立し実行条件成立フラグＦｂが１の場合、ステップＳ２６に処理を進める。
ステップＳ２６では、ＣＰＵ２１は、フィードバック制御を実行する。本実施形態では、ＣＰＵ２１は、６つの気筒（♯１〜♯６）のうち一部の気筒であって、Ｏ2センサ４８が配置された左側バンク１５の気筒（♯２、♯４、♯６）についてのみフィードバック制御を行う。
具体的には、図７（ａ）および（ｂ）に示すように、現在の空燃比を検出しているＯ2センサ４８が理論空燃比よりもリッチ側の信号を出力している場合、ＣＰＵ２１はフィードバック補正係数αを減少させて、空燃比をリーン側に制御する。逆に、Ｏ2センサ４８が理論空燃比よりもリーン側の信号を出力している場合、ＣＰＵ２１はフィードバック補正係数αを増加させて、空燃比をリッチ側に制御する。このような処理を繰り返すことで、図７（ｂ）に示すように、フィードバック補正係数αの値が減少と増加とが交互に繰り返される。また、図７（ａ）に示すように、実際の空燃比が理論空燃比を中心としてリッチ側とリーン側とを交互に反転が繰り返され、フィードバック制御が行われる。なお、このとき、ＣＰＵ２１は式（１）の学習値α´には、前回の学習値を代入したまま、フィードバック補正係数αを変動させる。このように、前回の学習値を適用させた状態でフィードバック補正係数αを変動させることで、前回の学習を利用することができるので、フィードバック補正係数αの変動を少なくすることができる。すなわち、フィードバック補正係数αの変動を少なくすることは、燃料噴射量Ｔｉの変動も少なくなることであり、結果としてエンジン１２の挙動の変動を少なくすることができる。
【００４５】
なお、燃料にアルコール混合ガソリンが給油された場合、アルコールの濃度が濃くなるにしたがって、理論空燃比は１４．７から小さい値になってしまう。しかしながら、Ｏ2センサ４８は、アルコールの濃度に応じた理論空燃比に対して、実際の空燃比がリッチ側であるかリーン側であるかを出力することができるために、図７（ａ）に示すグラフと同じように、実際の空燃比がアルコールの濃度に応じた理論空燃比を中心としてリッチ側とリーン側とを交互に反転が繰り返され、フィードバック制御が行われる。すなわち、燃料にアルコール混合ガソリンが給油された場合、異なる使用環境と燃料との両方による実際の空燃比と目標理論空燃とのズレを補正するようにフィードバック制御が行われる。
【００４６】
次に、ステップＳ２７では、ＣＰＵ２１は、実際の空燃比がリッチ側およびリーン側の反転を所定回数繰り返したか否かを判定する。リッチ側とリーン側との反転を所定回数繰り返した場合ステップＳ２８に処理を進め、所定回数に満たない場合ステップＳ２６に処理を戻して、所定回数になるまで待機する。ステップＳ２７のような判定を行うのは、フィードバック制御を実行した直後は、リッチ側とリーン側との反転が安定しないためである。なお、エンジン回転数により、リッチ側とリーン側との反転が安定する回数が異なるため、ここでの所定回数とは、エンジン回転数に応じて適用される。また、実際の空燃比がリッチ側とリーン側との反転を所定回数繰り返したか否かを判定する場合に限られず、リッチ側とリーン側との反転が安定するような所定時間が経過したか否かを判定してもよい。
【００４７】
ステップＳ２８では、ＣＰＵ２１は、フィードバック補正係数から学習値を実際に算出する前に、所定の条件が成立しているか否かを判定する。具体的には、ＣＰＵ２１は、ＲＡＭ２３に記憶されている学習条件成立フラグＦｃを読み出して判定する。学習条件が成立し学習条件成立フラグＦｃが１の場合、ステップＳ２９に処理を進め、学習条件が成立せず学習条件成立フラグＦｃが０の場合、学習条件が成立するのを待機する。
【００４８】
ステップＳ２８における条件成立の判定方法は、上述した図６に示すフローチャートと同様であり、詳細な説明は省略する。ここでは、上述したステップＳ４１からステップＳ４６までの処理で説明したように、所定の条件を満たし、現在のエンジン１２の運転状態が精度の高い学習値を学習できる場合、ステップＳ４７に処理を進め、ＣＰＵ２１は、学習条件成立フラグＦｃに１を代入し、ＲＡＭ２３に記憶する。一方、精度の高い学習値を学習ができない場合、ステップＳ４８に処理を進め、ＣＰＵ２１は、学習条件成立フラグＦｃに０を代入し、ＲＡＭ２３に記憶する。その後、ステップＳ２８に処理を戻す。
【００４９】
上述したように、ステップＳ２８では、ＣＰＵ２１は、学習条件が成立し学習条件成立フラグＦｃが１の場合、ステップＳ２９に処理を進める。
ステップＳ２９では、ＣＰＵ２１は、学習条件が成立した後、空燃比がリーン側からリッチ側に反転するときのフィードバック補正係数およびリッチ側からリーン側に反転するときのフィードバック補正係数をサンプリングして、ＲＡＭ２３に記憶する。具体的には、図７（ｂ）に示すように、例えば、リッチ側の反転時のフィードバック係数をそれぞれＲ１、Ｒ２・・・Ｒｎとし、リーン側の反転時のフィードバック係数をそれぞれＬ１、Ｌ２・・・Ｌｎとする。この場合、ＣＰＵ２１は、各フィードバック補正係数（Ｒ１、Ｒ２・・・ＲｎおよびＬ１、Ｌ２・・・Ｌｎ）をＲＡＭ２３に記憶する。本実施形態では、例えばｎ＝６として、Ｒ１〜Ｒ６、Ｌ１〜Ｌ６の合計１２のフィードバック補正係数をサンプリングする。
【００５０】
ステップＳ３０では、ＣＰＵ２１は、ステップＳ２９でサンプリングした複数のフィードバック補正係数に基づいて、学習値を算出し、ＲＡＭ２３に記憶する。具体的には、ＣＰＵ２１は、まず、次式（２）のようにサンプリングしたフィードバック補正係数の平均値Ａを算出する。
平均値Ａ＝（Ｒ１＋Ｒ２＋・・＋Ｒｎ＋Ｌ１＋Ｌ２＋・・＋Ｌｎ）／２×ｎ・・式（２）
なお、図７（ｂ）では、平均値Ａを一点鎖線で示している。
次に、ＣＰＵは、式（３）のように、前回の学習値α´に平均値Ａを加算して、新たな学習値α´を算出する。
新たな学習値α´＝（前回の学習値α´＋平均値Ａ）・・式（３）
この時点で、学習値が再学習され、前回の学習値α´が今回、式（３）で算出された新たな学習値α´に書き換えられ更新される。すなわち、ＣＰＵ２１は、ＲＡＭ２３に新たな学習値α´を記憶する。また、ＣＰＵ２１は、学習完了フラグＦｆに１を代入し、ＲＡＭ２３に記憶する。
ＲＡＭ２３に記憶された新たな学習値α´を用いて、燃料噴射量Ｔｉを算出することで、現在の使用環境および燃料に応じた目標空燃比と実際の空燃比とのズレを補正することができる。
【００５１】
ステップＳ３１では、ＣＰＵ２１は、更新された新たな学習値α´を全気筒、すなわち６つの気筒（♯１〜♯６）に適用して、目標空燃比を所定の希薄側の空燃比にしてオープンループ制御に移行する。具体的には、ＣＰＵ２１は、上述した式（１）に、フィードバック補正係数α＝０を代入すると共に、式（１）に再学習した学習値α´を代入し、目標空燃比が所定の希薄側の空燃比になるように、燃料噴射量Ｔｉを算出して運転する。
図７（ａ）に示すように、再学習した学習値α´を適用することで、実際の空燃比を目標とする所定の希薄側の空燃比に一致させることができる。
したがって、部品のばらつきに限られず、異なる使用環境や燃料による実際の空燃比と目標理論空燃とのズレを補正でき、実際の空燃比を目標とする所定の希薄側の空燃比に一致させることができる。
【００５２】
ステップＳ３２では、ＣＰＵ２１は以降、ステップＳ３１で説明した学習値α´を適用し、所定の希薄側の空燃比での運転を継続して行う。
その後、上述した図４に示すメインフローチャートに戻り、ステップＳ１４において、ＣＰＵ２１は、イグニッションスイッチ４６がオフされた場合、ＣＰＵ２１は、ステップＳ３０にてＲＡＭ２３に記憶されている再学習された学習値α´を次回のエンジン１２の始動時に適用できるようにＥＥＰＲＯＭ２４に記憶する。
なお、上述した説明では、図７のフィードバック制御の内容を示すグラフのように、実際の空燃比が目標空燃比に対してリッチ側にズレている場合を例にして説明した。しかし、この場合に限られず、図８のフィードバック制御の内容を示すグラフのように、実際の空燃比が目標空燃比に対してリーン側にズレている場合（例えば純正ガソリンからアルコール混合ガソリンに燃料が変更されたとき等）がある。図８（ａ）は目標空燃比に対して実際の空燃比の変動を示すグラフであり、図８（ｂ）はフィードバック補正係数の変位を示すグラフである。この場合であっても、同様に異なる使用環境や燃料による実際の空燃比と目標理論空燃とのズレを補正でき、実際の空燃比を目標とする所定の希薄側の空燃比に一致させることができる。
【００５３】
このように、本実施形態によれば、目標空燃比を理論空燃比にしてＯ2センサを用いてフィードバック制御し、目標空燃比に対する実際の空燃比のズレを学習することで、機器のコストを削減させることができる。
また、エンジン始動後に初めて所定の条件を満たしたときに、目標空燃比に対する実際の空燃比のズレを学習することで、部品のばらつきに限られず使用環境や燃料に応じた学習値を算出でき、結果として、実際の空燃比を目標とする所定の希薄側の空燃比に一致させることができる。
また、目標空燃比を所定の希薄側の空燃比に制御している状態から目標空燃比を理論空燃比にしてフィードバック制御を行うので、従来のように空燃比が所定の希薄側の空燃比で運転され続けてしまうと学習値を再学習できないおそれがあるという問題を解消することができる。
【００５４】
また、本実施形態では、Ｖ型エンジンにおける一方のバンクである一部の気筒にて学習値を算出した後、その学習値を全気筒に反映するので、ＣＰＵ２１は、学習値を算出するときの処理を削減することができ、迅速に学習値を算出することができる。
また、本実施形態では、目標空燃比を理論空燃比に移行したり、フィードバック制御を実行したり、フィードバック補正係数をサンプリングしたりするとき、所定の条件を満たしたときに初めて次の処理に移行するので、正確な学習値を算出することができる。
【００５５】
以上、本発明を種々の実施形態と共に説明したが、本発明はこれらの実施形態にのみ限定されるものではなく、本発明の範囲内で変更等が可能である。
例えば、上述では図５のフローチャートに示すステップＳ２１の移行条件、ステップＳ２５の実行条件およびステップＳ２８の学習条件は、全て図６に示す条件成立の判定方法のフローチャートと同一であるものとして説明した。しかしながら、この場合に限られず、ステップＳ２１の移行条件、ステップＳ２５の実行条件、ステップＳ２８の学習条件に進むにしたがい、条件が厳しくなるように設定してもよい。
【００５６】
すなわち、例えばステップＳ４２において、船外機１０が安定して姿勢で所定時間が経過しているかを判定するとき、ステップＳ２１の移行条件、ステップＳ２５の実行条件、ステップＳ２８の学習条件に進むにしたがい、所定時間が長くなるように設定してもよい。
また、例えば、ステップＳ２８の学習条件では、図６に示すフローチャートのステップＳ４１からステップＳ４６の全てを判定し、ステップＳ２１の移行条件およびステップＳ２５の実行条件では、図６に示すフローチャートのステップＳ４１からステップＳ４６のうち、一部のステップの処理を省略するようにしてもよい。
【００５７】
また、本実施形態では、Ｖ型６気筒のエンジンを適用する場合について説明したが、この場合に限られず、直列型気筒のエンジンであってもよく、６気筒以外の複数気筒のエンジンであってもよい。
また、本実施形態では、Ｏ2センサ４８が配置されている排気管に対応する３つの気筒をフィードバック制御する場合について説明したが、この場合に限られない。例えば、Ｏ2センサ４８に最も近接した気筒♯２のみをフィードバック制御し、フィードバック制御した結果を全気筒に反映させてもよい。このように、１つの気筒のみをフィードバック制御することで、ＣＰＵ２１は、迅速に学習値を算出することができる。
【００５８】
（第２の実施形態）
内燃機関で生じる目標空燃比に対する実際の空燃比のズレは、インジェクタ等の部品のばらつき、使用環境や燃料の変更に起因して発生する場合だけでなく、運転領域（エンジン回転数）に応じて発生する場合がある。そこで、本実施形態では、オープンループ制御を行うエンジン回転数域を複数のゾーンに分けて、各ゾーンで学習値α´を設定するようにしている。なお、船外機の構成や基本的な空燃比制御は第１の実施形態と同様であり、以下、第１の実施形態との相違点を中心に説明する。
【００５９】
本実施形態では、図９に示すように、所定のエンジン回転数域Ｒmin〜Ｒmaxにあるときにオープンループ制御による希薄燃焼運転を実行するものとする。そして、このエンジン回転数域Ｒmin〜Ｒmaxを例えばゾーン１（低回転域）、ゾーン２（中回転域）、ゾーン３（高回転域）に分けて、各ゾーンで学習値α´を設定している。ゾーン分けの際には、例えば各ゾーンでの負荷変動の差が一定の範囲内に収まるようにする。なお、ゾーン数は限定されるものでなく、例えばゾーンを細かく分けて学習値を設定すれば、それだけエンジン回転数に応じて発生する空燃比のズレを高精度に補正することができる。
【００６０】
空燃比制御の処理を示すメインフローチャートは、第１の実施形態で述べた図４と同様であるが、本実施形態では、ステップＳ１２での判定に用いる学習完了フラグＦｆがゾーン毎に設定されている。すなわち、ステップＳ１２で、ＣＰＵ２１は、現在のエンジン回転数が属するゾーンｍ（ｍ：ゾーン番号）において、今回エンジン１２を始動してから学習値α´（ｍ）を学習したか否かを判定し、当該ゾーンｍで学習が完了しておらず学習完了フラグＦｆ（ｍ）が０の場合、ステップＳ１３に処理を進める。
【００６１】
次に、上述したステップＳ１３におけるフィードバック制御について、図１０に示すフローチャートおよび図１１に示す空燃比の制御方法を示すグラフを参照して説明する。図１０において、第１の実施形態で説明した図５と同じ処理には同一の符号を付し、その詳細な説明は省略する。なお、以下では、エンジン回転数域Ｒmin〜Ｒmaxをゾーン１〜Ｍに分けており、現在のエンジン回転数がゾーンｍに属しているとする。
【００６２】
まず、ステップＳ２０では、ＣＰＵ２１は、全ての気筒（♯１〜♯６）について、目標空燃比を所定の希薄側の空燃比にして運転（希薄燃焼運転）する。すなわち、ステップＳ２０では、ＣＰＵ２１は、ＲＡＭ２３に記憶された学習値α´（ｍ）を上述した式（１）に代入すると共に、フィードバック補正係数α＝０を式（１）に代入して燃料噴射量を算出し、オープンループ制御にて目標空燃比が１８になるように制御する。
【００６３】
ステップＳ２１では、ＣＰＵ２１は、目標空燃比を理論空燃比に移行させる前に、移行条件が成立しているか否かを判定する。その結果、移行条件が成立している場合、ステップＳ２２に処理を進める。ステップＳ２２では、ＣＰＵ２１は、目標空燃比を所定の希薄側の空燃比１８にして運転している状態から、一部の気筒（♯２、♯４、♯６）について目標空燃比を理論空燃比１４．７に移行させる。
【００６４】
ステップＳ２３では、ＣＰＵ２１は、そのまま目標空燃比を理論空燃比にした状態で運転を継続させる。ステップＳ２４では、ＣＰＵ２１は、目標空燃比を理論空燃比に移行してから、所定時間が経過したか否かを判定する。所定時間が経過した場合ステップＳ２５に処理を進め、所定時間が経過していない場合ステップＳ２３に処理を戻し、所定時間が経過するのを待機する。
【００６５】
ステップＳ２５では、ＣＰＵ２１は、フィードバック制御に移行する前に、実行条件が成立しているか否かを判定する。その結果、実行条件が成立している場合、ステップＳ２６に処理を進める。ステップＳ２６では、ＣＰＵ２１は、一部の気筒（♯２、♯４、♯６）についてフィードバック制御を実行する。すなわち、図７、８に示したように、現在の空燃比を検出しているＯ2センサ４８が理論空燃比よりもリッチ側の信号を出力している場合、ＣＰＵ２１はフィードバック補正係数αを減少させて、空燃比をリーン側に制御する。逆に、Ｏ2センサ４８が理論空燃比よりもリーン側の信号を出力している場合、ＣＰＵ２１はフィードバック補正係数αを増加させて、空燃比をリッチ側に制御する。
【００６６】
次に、ステップＳ２７では、ＣＰＵ２１は、実際の空燃比がリッチ側およびリーン側の反転を所定回数繰り返したか否かを判定する。リッチ側とリーン側との反転を所定回数繰り返した場合ステップＳ２８に処理を進め、所定回数に満たない場合ステップＳ２６に処理を戻して、所定回数になるまで待機する。
【００６７】
ステップＳ２８では、ＣＰＵ２１は、フィードバック補正係数から学習値を実際に算出する前に、学習条件が成立しているか否かを判定する。その結果、学習条件が成立している場合、ステップＳ２９に処理を進める。ステップＳ２９では、ＣＰＵ２１は、学習条件が成立した後、空燃比がリーン側からリッチ側に反転するときのフィードバック補正係数およびリッチ側からリーン側に反転するときのフィードバック補正係数をサンプリングして、ＲＡＭ２３に記憶する。
【００６８】
ステップＳ５０では、ＣＰＵ２１は、ステップＳ２９でサンプリングした複数のフィードバック補正係数に基づいて、上述した式（２）のようにサンプリングしたフィードバック補正係数の平均値Ａを算出する。
【００６９】
次に、ステップＳ５１では、ＣＰＵ２１は、ステップＳ５０で算出した平均値Ａが所定の閾値を超えて大きいか否かを判定する。上述した式（３）を参照すれば、平均値Ａは、新たな学習値α´（ｍ）と前回の学習値α´（ｍ）との差となるものである。平均値Ａが所定の閾値を超えて大きい場合、ステップＳ５２に処理を進め、所定の閾値を超えていない場合、ステップＳ５４に処理を進める。
【００７０】
ここで、平均値Ａが所定の閾値を超えて大きい場合を具体例を挙げて説明する。当該ゾーンｍでの学習が、今回エンジン１２を始動してから全ゾーン１〜Ｍにおいて初めての学習であるとする。そして、前回エンジン１２を始動したときと比較して、部品が大きくばらついている、あるいは、船外機１０が異なる船体に取り付けられたり、純正ガソリンに代えてアルコール混合ガソリンが使用されたりしているとする。この場合、ステップＳ５０で算出した平均値Ａは大きくなり、所定の閾値を超えるので、ステップＳ５２に処理が進むことになる。
【００７１】
このように部品のばらつき、使用環境や燃料の変更に起因して空燃比のズレが発生している場合、エンジン回転数域Ｒmin〜Ｒmaxの全ゾーン１〜Ｍで空燃比がズレているといえる。したがって、エンジン回転数域Ｒmin〜Ｒmaxの一部のゾーンだけで新たな学習値を反映させるよりも、いち早く全ゾーン１〜Ｍで新たな学習値を反映させるのが効率的で好ましい。
【００７２】
そこで、ステップＳ５２で、ＣＰＵ２１は、式（４）のように、前回の学習値α´に、所定のフィルタ値（０〜１の値）（全ゾーンフィルタ値と称する）を乗算して補正した平均値Ａを加算して、新たな学習値α´を算出する。
新たな学習値α´＝（前回の学習値α´＋平均値Ａ×全ゾーンフィルタ値）・・式（４）
そして、ステップＳ５３で、エンジン回転数域Ｒmin〜Ｒmaxの全ゾーン１〜Ｍに新たな学習値α´を反映させる。すなわち、ＲＡＭ２３上の前回の学習値α´（１）〜α´（Ｍ）の全てが式（４）で算出した新たな学習値α´に書き換えられ更新される。その後、ステップＳ２７に処理を戻す。
【００７３】
本実施形態では、ステップＳ５２で新たな学習値α´を算出するに際して、平均値Ａそのものを用いるのではなく、平均値Ａを全ゾーンフィルタ値で補正している。これは、ステップＳ５２で算出した新たな学習値α´がフィードバック制御を行っていない気筒（♯１、♯３、♯５）にも適用されることから、エンジントルクの変動による急激な回転変動を抑えるためである。すなわち、理論空燃比付近での運転時に比べて、希薄燃焼運転時では、空燃比の変化に対するエンジントルクの変動の度合いが高いことが知られている。そのため、学習値α´を急に変えると、特に希薄燃焼運転を続けている気筒（♯１、♯３、♯５）でエンジントルクの変動による急激な回転変動が発生するおそれがあることから、、前回の学習値α´から新たな学習値α´への変化分を少なくするように平均値Ａを全ゾーンフィルタ値で補正して学習値α´を算出するようにしたものである。
【００７４】
このように平均値Ａを全ゾーンフィルタ値で補正することから、ステップＳ２７に処理を戻した後、ステップＳ５０、Ｓ５１を経て算出される平均値Ａが再度所定の閾値を超えて大きくなることもある。この場合、ステップＳ５２で、ＣＰＵ２１は、上述した式（４）のように、前回の学習値α´に、全ゾーンフィルタ値（０〜１の値）を乗算して補正した平均値Ａを加算して、新たな学習値α´を算出する。いうまでもないが、この場合の「前回の学習値α´」は１回前のループで式（４）で算出された「新たな学習値α´」となる。
【００７５】
次に、平均値Ａが所定の閾値を超えていない場合を具体例を挙げて説明する。既にステップＳ２７〜Ｓ２９、Ｓ５０〜Ｓ５３のループを経ている、あるいは、当該ゾーンｍでの学習が、今回エンジン１２を始動してから全ゾーン１〜Ｍにおいて初めての学習であるが、前回エンジン１２を始動したときと比較して部品のばらつきがなく、使用環境や燃料が変更されていないとする。この場合、空燃比のズレが発生していたとしても、それはエンジン回転数に応じて発生するものといえる。したがって、ステップＳ５０で算出した平均値Ａは小さく、所定の閾値を超えないので、ステップＳ５４に処理が進むことになる。
【００７６】
そこで、ステップＳ５４で、ＣＰＵ２１は、式（５）のように、前回の学習値α´に、所定のフィルタ値（０〜１の値）（ゾーンフィルタ値と称する）を乗算して補正した平均値Ａを加算して、新たな学習値α´を算出する。
新たな学習値α´＝（前回の学習値α´＋平均値Ａ×ゾーンフィルタ値）・・式（５）
そして、ステップＳ５５で、エンジン回転数域Ｒmin〜Ｒmaxの当該ゾーンｍに新たな学習値α´を反映させる。すなわち、ＲＡＭ２３上の前回の学習値α´（ｍ）が式（５）で算出された新たな学習値α´に書き換えられ更新される。
【００７７】
ステップＳ５４で新たな学習値α´を算出するに際しても、平均値Ａをゾーンフィルタ値で補正することにより、エンジントルクの変動による急激な回転変動を抑えるようにしている。ステップＳ５４、Ｓ５５の場合の平均値Ａは小さいが、それでもなお特に希薄燃焼運転を続けている気筒（♯１、♯３、♯５）でのエンジントルクの変動は発生することから、それを抑えるようにしている。
【００７８】
その後、ステップＳ５６では、ＣＰＵ２１は、目標空燃比を所定の希薄側の空燃比にしてオープンループ制御に移行する。
【００７９】
図１１に示す例では、目標空燃比に対して実際の空燃比がリーン側にズレている。また、エンジン回転数域Ｒmin〜Ｒmaxをゾーン１〜３に分けており、現在のエンジン回転数がゾーン２に属している。
【００８０】
移行条件、実行条件が成立して（ステップＳ２１、Ｓ２５）、最初に学習条件が成立した後（ステップＳ２８）、フィードバック補正係数をサンプリングして（ステップＳ２９）、その平均値Ａを算出する（ステップＳ５０）。図１１の例では、このとき平均値Ａが大きいので（ステップＳ５１）、上述した式（４）により新たな学習値α´を算出し、エンジン回転数域Ｒmin〜Ｒmaxの全ゾーン１〜３に反映させている（ステップＳ５２、Ｓ５３）（１回目学習（全ゾーン））。その後、ステップＳ２７に処理を戻す。
【００８１】
そして、２回目に学習条件が成立した後（ステップＳ２８）、フィードバック補正係数をサンプリングして（ステップＳ２９）、その平均値Ａを算出する（ステップＳ５０）。図１１の例では、このとき平均値Ａもまだ大きいので（ステップＳ５１）、上述した式（４）により新たな学習値α´を算出し、エンジン回転数域Ｒmin〜Ｒmaxの全ゾーン１〜３に反映させている（ステップＳ５２、Ｓ５３）（２回目学習（全ゾーン））。その後、ステップＳ２７に処理を戻す。
【００８２】
そして、３回目に学習条件が成立した後（ステップＳ２８）、フィードバック補正係数をサンプリングして（ステップＳ２９）、その平均値Ａを算出する（ステップＳ５０）。図１１の例では、このとき平均値Ａは所定の閾値を超えないので（ステップＳ５１）、上述した式（５）により新たな学習値α´を算出し、エンジン回転数域Ｒmin〜Ｒmaxの当該ゾーン２にのみ反映させている（ステップＳ５４、Ｓ５５）（３回目学習（ゾーン））。その後、目標空燃比を所定の希薄側の空燃比にしてオープンループ制御に移行する。
【００８３】
この結果、図１１（ｃ）に示すように、１回目学習、２回目学習の時点ではゾーン１〜３の学習値α´（１）〜α´（３）は同じ値となっているが、３回目学習の時点ではゾーン２の学習値α´（２）が学習結果を独自に反映させたかたちとなる。
【００８４】
ところで、本実施形態では、図１１の符号１１０で示すように、学習値α´を更新する（書き換える）ときに、所謂テーリング処理を施して滑らかに変化するようにしている。ここで、テーリング処理を施している間の学習値α´を補正学習値と称すると、式（６）で表わされ、これをｉを１、２、・・・と変えながら一定周期で更新していく。なお、補正学習値(０)は前回の学習値α´である。
補正学習値(ｉ)＝ａ×補正学習値(ｉ−１)＋（１−ａ）×新たな補正値α´・・式（６）
ａ：定数
【００８５】
なお、テーリング処理を施す考え方は、例えば現在のエンジン回転数があるゾーンから他のゾーンに移るときの学習値α´の切替時に適用して、あるゾーンの学習値α´から他のゾーンの学習値α´へと滑らかに変化するようにしてもよい。
【符号の説明】
【００８６】
１０：船外機  １２：エンジン  ２０：エンジンコントロールユニット  ２１：ＣＰＵ  ２２：ＲＯＭ  ２３：ＲＡＭ  ２４：ＥＥＰＲＯＭ  ２５：入力インタフェース  ２６：出力インタフェース  ３０：インジェクタ  ３１：イグニッションコイル  ４１３：クランク角センサ  ４２：スロットル開度センサ  ４３：吸気管圧力センサ  ４４：シリンダ壁温センサ  ４５：冷却水温度センサ  ４６：イグニッションスイッチ  ４７：チルト＆トリム角センサ  ４８：Ｏ2センサ  ４９：姿勢計
【図１】
2011252400.tif 000003
【図２】
2011252400.tif 000004
【図３】
2011252400.tif 000005
【図４】
2011252400.tif 000006
【図５】
2011252400.tif 000007
【図６】
2011252400.tif 000008
【図７】
2011252400.tif 000009
【図８】
2011252400.tif 000010
【図９】
2011252400.tif 000011
【図１０】
2011252400.tif 000012
【図１１】
2011252400.tif 000013