(57)【特許請求の範囲】
【請求項１】
運転状態に対応して所定の制御量に基づき燃料を噴射するとともに、検知された排気ガス中の酸素濃度に基づいて前記制御量を補正する酸素濃度フィードバック運転制御領域内に、所定のリーンセット領域を有し、該リーンセット領域内においては前回のリーンセット領域内における運転時のデータに基づいて更新された学習マップに基づいて燃料噴射制御を行う学習制御によりリーンセット領域運転が実施される電子制御燃料噴射装置の学習制御方法であって、前記リーンセット領域運転中は、前記酸素濃度に基づき補正した前記制御量の算出を実施し、該補正した制御量の算出値により学習マップを更新することなく、該補正した制御量の算出値を一時的にメモリに格納し、前記リーンセット領域運転状態から外れると直ちに前記メモリに格納された最新データに基づいて前記学習マップを更新するようにしたことを特徴とする電子制御燃料噴射装置の学習制御方法。
【請求項２】
所定条件の酸素濃度フィードバック運転制御領域内で、所定のリーンセット領域運転状態になったときに、前回のリーンセット領域運転状態のときのデータに基づいて更新した学習マップに基づいて燃料噴射制御を行う電子制御燃料噴射装置の学習制御方法であって、前記リーンセット領域運転中は、制御量を演算するとともに学習マップを更新することなくこの演算結果を一時的にメモリに格納し、前記リーンセット領域運転状態から外れると直ちに前記メモリに格納された最新データに基づいて前記学習マップを更新することを特徴とする電子制御燃料噴射装置の学習制御方法。
【請求項３】
前記リーンセット領域運転状態の判断は、スロットル開度またはエンジン回転数に基づいて行うことを特徴とする請求項１ないし２に記載の電子制御燃料噴射装置の学習制御方法。
【請求項４】
前記学習マップに書込むべき学習値は、基本噴射量に対する補正係数であって、酸素濃度フィードバック制御が収束した後、リーンからリッチ、またはリッチからリーンへと制御が切換わったときの補正係数を８個取込み、４つの各ペアの最大値および最小値の中央値を平均した値であることを特徴とする請求項１ないし２に記載の電子制御燃料噴射装置の学習制御方法。
【請求項５】
酸素濃度フィードバック制御による燃料噴射の補正量を演算するための補正マップと、所定のリーンセット領域における学習制御を行うための学習マップと、前記リーンセット領域において学習制御条件を判断する判別手段と、酸素濃度フィードバック制御が収束した後、リーンからリッチ、またはリッチからリーンへと制御が切換わったときの所定数の補正係数を取込み、これらの平均値を演算して学習値とするための演算手段と、前記演算手段により求めた学習値を学習マップに書込む前に、一時的にその値を保存するための記憶手段と、リーンセット領域内では酸素濃度フィードバック制御は行わずオープン制御である学習制御を行い所定のプログラムに従って燃料噴射制御を行う制御手段とを具備し、前記プログラムは、酸素濃度フィードバック制御の条件において、一旦前記リーンセット領域に入ったときに、前記学習値を演算してこれを一時的に前記記憶手段に格納し、前記リーンセット領域から外れると直ちに、格納した学習値を読み出してこれを学習マップに書込んで学習マップを更新するように構成したことを特徴とする電子制御燃料噴射装置の学習制御装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、電子制御内燃機関の燃料噴射方法および装置に関し、特に酸素濃度センサ（Ｏ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フィードバック制御の補正係数の演算を行い（ステップＳ２５）、各気筒についての制御量を算出した後（ステップＳ２７）、この演算した制御量をもとに、Ｏ2センサを用いて燃料噴射量のフィードバック制御を行うものである（ステップＳ２５）。このＯ2フィードバック制御は、目標とするＡ／Ｆにするためにマップを用いて補正係数を演算し、Ｏ2センサの出力に応じてこの補正係数を付加した燃料噴射を行う。
【００８６】
図１５は、基準気筒のＯ2フィードバック制御における補正係数の変化の状態を示す図であり、上方が補正係数大、下方が補正係数小となる。Ｏ2フィードバック制御が開始されると、まずリッチ方向の制御パラメータに基づいて噴射量が制御される。Δｔ１は制御開始直後の収束前の制御周期であり、Δｔ２は収束後の制御周期である。収束前は、目標とする空燃比に近づいていない状態であり、短時間で収束させるためにΔｔ１はΔｔ２よりも短く設定されている。Δｔ１の周期で一旦収束した後は空燃比の制御精度を高めるために周期を変えてΔｔ２の周期で制御が行われる。Ｐ１、Ｐ２はそれぞれリッチ側およびリーン側に切り替えたときの比例定数であり、次の切り替え点に速く達するために噴射量をステップ的に変化させる係数の変化分である。Ｉ１，Ｉ２はそれぞれリッチ方向およびリーン方向の積分定数である。これらは前述の周期Δｔ１またはΔｔ２における補正係数の増加量を表す。このように、比例定数Ｐ１、Ｐ２および積分定数Ｉ１，Ｉ２をリッチ方向およびリーン方向にそれぞれ独立してもつのは、Ｏ2センサの応答性が制御方向により異なるためである。図中ｍＳｏは理論空燃比が得られる時の補正係数値である。
【００８７】
図１６は、補正係数を演算する場合の上記各制御パラメータのマップテーブルを示す。これらの図は、上記パラメータ、Ｐ１，Ｐ２，Ｉ１，Ｉ２，Δｔ１，Δｔ２およびリッチからリーンへの切り替え電圧Ｖ１とリーンからリッチへの切り替え電圧Ｖ２のテーブルを示す。Ｖ１およびＶ２は、それぞれ基準気筒＃１をＯ2センサの出力に基づいて制御する場合に、目標とする空燃比を越えた時点でリッチからリーンへおよびその逆の方向へ制御を切り替えるための閾値電圧である。このような８つの図示したテーブルには、エンジン回転数（ｒｐｍ）に対応して各パラメータの値が書込まれている。このように各パラメータをエンジン回転数に応じて変えているのは、エンジン回転数に応じエンジン圧力波が変化し、Ｏ2センサに対する既燃ガスの入替わり速度が異なってくるためである。この場合、片方向側（例えばリッチ側）の比例定数と積分定数のみをエンジン回転数に応じて可変とするマップテーブルを作成し、もう一方（リーン側）は、リッチ側の定数に予め実験等により求めた係数を乗ずることにより演算してもよい。これにより、メモリ量を低下させるとともに演算時間の短縮が図られる。
【００８８】
図１７は、上記マップテーブルのパラメータを用いて演算した補正係数の変化状態を示す。時間ｔ１でＯ2フィードバック制御がスタートすると、まずリッチ方向への燃料噴射が行われる。ここでは、図１５に示したように、Ｐ１による増加後周期Δｔ１での短いステップ状に補正係数が演算されこれに基づきリッチ方向に燃料噴射が行われる。時間ｔ２でＡ／Ｆが目標空燃比を上回ると、Ｏ2センサの出力電圧がＶ１に達し、リッチからリーン方向へ制御方向が切り替わる。ここで補正係数がＰ２（図１５）に対応して減少する。これがリッチ側からリーン側への第１回目の切り替わり点Ａ１である。ここからリーン方向への噴射を行い周期Δｔ２ごとにＩ２に対応して補正係数を減少させ噴射量を減少させると、時間ｔ３で再び目標空燃比を下回り、Ｏ2センサの出力電圧がＶ２になる。この時点で再びリーン方向からリッチ方向へ制御方向を切り替える。ここがリーン方向からリッチ方向への第１回目の切り替え点Ｂ１（切り替え点としては２回目）である。ここで前述の比例定数Ｐ１に対応して噴射量を立上げ、その後周期Δｔ２ごとに積分定数Ｉ１に対応して燃料を増量する。これにより、再びＡ／Ｆが目標空燃比を上回り、時間ｔ４でＯ2センサの出力電圧がＶ１に達する。この時点でリッチからリーンへ制御方向が切り替わり、この方向の２回目の補正係数の方向切り替わり点Ａ２となる。ここで前記切り替え点Ａ１のときと同様に、比例定数Ｐ２に対応して燃料を減量し、さらに周期Δｔ２ごとに積分定数Ｉ２に対応して補正係数を減少させることにより、時間ｔ５で再び切り替え点Ｂ２に達する。以降同様にしてリッチ側およびリーン側への噴射制御が繰り返し行われる。
【００８９】
補正係数を付加した燃料噴射時間ＴINJは以下のようにして演算される。燃料噴射量はこの燃料噴射時間に時間当りの噴射量を掛けたものである。
【００９０】
ＴINJ＝ＴINJB×ＴINJC＋（ＴINJB＋ＴL）×Ｃ＋ＴL＋ＴINV      （１）
ここで、ＴINJBは、図６〜図７のメインルーチンのステップＳ２２またはＳ２４で演算した基本燃料噴射時間、ＴINJCは、ステップＳ２３で演算したエンジン温度補正係数、大気圧補正係数およびトリム角補正係数を乗じた噴射補正係数である。Ｃは本実施例に係るＯ2フィードバック制御により演算した補正係数である（図７のステップＳ２５）。Ｃは０．１５≧Ｃ≧−０．１５を満足するものであり、前記ｍＳｏは０となる。またＴINVは、無効噴射時間である。これはバッテリ電圧によりインジェクタの弁の開閉時間が変るため、これを補正するためのものである。また、ＴLは学習補正噴射時間であり、学習制御領域において、所定の学習マップから求められる。この学習制御は、例えば所定の運転状態で燃料噴射をリーン側にセットした領域において、マップ演算した所定の補正量に基づいて燃料噴射制御を行うとともに、この補正量から所定の学習値を算出してこれを、後述のように、学習マップに書込んで更新し、次回の学習制御領域の運転ではこの学習値に基づいて空燃比を制御するものである。なお、図１７において、時刻ｔ２、ｔ４におけるＡ／Ｆ検知値は目標Ａ／Ｆを僅かに上回り、時刻ｔ３、ｔ５においては僅かに下回る。
【００９１】
以上のようにして、基準気筒＃１に対しては、Ｏ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フィードバック制御におけるＰ１、Ｐ２，Ｉ１，Ｉ２，積分回数及び反転位置の補正係数から算出した代表値に基づいて、図１９のステップＳ２３１において、全気筒＃１〜＃６の補正係数が演算される。  このようにして全気筒の補正係数が計算されたなら、ステップＳ２３２において、全気筒について、前述の燃料噴射時間ＴINJ中の（ＴINJB＋ＴL）×Ｃを計算する。
【０１０３】
図２４は、本発明の実施例に係る学習制御方法の説明図である。図２４のリーンセット領域は所定のスロットル開度範囲およびエンジン回転数範囲内の領域である。本実施例の学習制御を行う条件の１つは、このリーンセット領域内において、スロットル開度の変化ΔＴＨθが所定の判定値より小さいことおよびエンジン回転数の変化Δｒｐｍが所定の判定値より小さいこと、およびこのようにスロットル開度およびエンジン回転数の変化が小さい状態が所定時間以上継続することである。このような条件を含み前述の条件１および条件２の失火制御およびノック制御に関する条件に適合した場合に、学習制御が行われ学習補正係数が演算される。
【０１０４】
本実施例における学習補正係数の演算は以下のように行われる。
【０１０５】
Ｏ2フィードバック制御がスタートして最初のリッチからリーンの反転位置の補正係数γ０’を除き、リッチからリーンへの４つの反転位置の補正係数γ１、γ３、γ５、γ７およびリーンからリッチへの４つの反転位置の補正係数γ０、γ２、γ４、γ６をメモリに格納する。演算時には格納されたこれらの８つのデータを読み出しこれに基づき、以下の学習補正係数▲１▼〜▲４▼をまず算出する。
【０１０６】
学習補正係数▲１▼＝（γ１＋γ０）／２
学習補正係数▲２▼＝（γ３＋γ２）／２
学習補正係数▲３▼＝（γ５＋γ４）／２
学習補正係数▲４▼＝（γ７＋γ６）／２
次にこれらの学習補正係数▲１▼〜▲４▼の平均をとってこれを学習補正係数平均値とする。即ち、
学習補正係数平均値＝（学習補正係数▲１▼＋▲２▼＋▲３▼＋▲４▼）／４
とする。
【０１０７】
さらにこの学習補正係数平均値より学習マップの更新値を計算により求める。このような学習マップの更新値は、上記８つの反転位置のエンジン回転数およびスロットル開度のそれぞれの平均値を座標とするマップ上の位置に学習値として書込まれる。即ち、エンジン回転数ＮＥ（ｒｐｍ）およびスロットル開度ＴＨθ（Ｖ）について、
ＮＥ（ｒｐｍ）＝（REVMAX0＋REVMAX1＋REVMAX2＋REVMAX3＋REVMIN0＋REVMIN1＋REVMIN2＋REVMIN3）／８
ＴＨθ（Ｖ）＝（THθMAX0＋THθMAX1＋THθMAX2＋THθMAX3＋THθMIN0＋THθMIN1＋THθMIN2＋THθMIN3）／８
を算出し、この値と学習マップの軸のデータと比較し、最も近い軸データのマップ上の座標に上記学習値を書込む。
【０１０８】
このように学習値が更新された学習マップを用いて、学習補正噴射時間を求め、さらに燃料噴射時間ＴINJを前述のように（１）式から算出する。
【０１０９】
ＴINJ＝ＴINJB×ＴINJC＋（ＴINJB＋ＴL）×Ｃ＋ＴL＋ＴINV      （１）
（ＴINJ：補正係数を付加した燃料噴射時間、ＴINJB：基本噴射時間、ＴINJC：噴射補正係数、（ＴINJB＋ＴL）×Ｃ：Ｏ2フィードバック制御による補正量、ＴL：学習補正噴射時間（マップ値）、Ｃ：Ｏ2フィードバック制御の補正係数、ＴINV：無効噴射時間）
ここで、学習補正噴射時間ＴLは、前述のように、学習補正係数▲１▼〜▲４▼の平均を求め、さらにそれから学習補正量平均値に変換し、これを前回のマップ値に加えることにより学習値を更新する。即ち、
ＴL（更新値）＝ＴL＋学習補正量平均値
である。ここで学習補正量平均値＝（ＴINJB＋ＴL）×（学習補正係数平均値）である。
【０１１０】
以下図２５〜図３０を参照して、本発明の学習制御方法についてさらに説明する。
【０１１１】
図２５は、本発明の実施例に係るＯ2フィードバック制御における学習制御のメインルーチンでのフローチャートである。このフローは、前述の図１８のフローチャートの一部に対応するものであり、ステップＳ３００１、３００２、３００３はそれぞれ、図１８のステップＳ３１９３、３１９４、３１９５に対応する。即ち、ステップＳ３００１において、Ｏ2フィードバック制御領域内でのリーンセット領域（学習領域）の状態かどうかが判別される。学習領域であれば、ステップＳ３００２において、学習噴射時間および学習マップの演算を行う。その後、学習マップの更新条件になったならば、学習マップの書込みを行う（ステップＳ３００３）。
【０１１２】
図２６は、上記ステップＳ３００１のＯ2フィードバック制御での学習制御実行判定の詳細フローチャートである。
【０１１３】
まず学習制御を行う前提となるＯ2フィードバック制御を行うフラグがセットされているかどうかを判定する（ステップＳ３００４）。これは、Ｏ2フィードバック制御を行うための条件１、条件２の失火制御およびノック制御の各条件に適合しているかどうかを判定するものである。続いて、図２４で説明したように、エンジン回転数がリーンセット領域に対応する所定の範囲内かどうかが判別される（ステップＳ３００５）。ここでエンジン回転数が所定の範囲に入っていないときには、即ち学習領域から外れている場合には、学習マップの更新許可フラグをセットする（ステップＳ３００６）。これは、このルーチンに入る前にリーンセット領域で学習制御を行っていた場合に、その前回の学習値を学習マップに書込むことを許可するフラグである。エンジン回転数が学習領域の範囲内であれば、学習値の更新を許可することなく、次のステップＳ３００７に進む。ここでエンジン回転数の変動が所定の範囲内かどうかが判別される。回転変動が所定値を越えて大きいときには状態が不安定となるためリーンセットは行わない。エンジン回転数の変動が小さく所定の範囲内であれば、次にステップＳ３００８でその状態が所定時間以上継続しているかどうかが判別される。リーンセットを行うためには状態が安定して継続していることが必要だからである。
【０１１４】
このようにエンジン回転数の条件を判別後、次にスロットル開度の条件を判別する。まず、スロットル開度がリーンセット領域に対応する所定の範囲内かどうかが判別される（ステップＳ３００９）。ここでスロットル開度が所定の範囲に入っていないときには、即ち学習領域から外れている場合には、学習マップの更新許可フラグをセットする（ステップＳ３０１０）。これは、このルーチンに入る前にリーンセット領域で学習制御を行っていた場合に、その前回の学習値を学習マップに書込むことを許可するフラグである。スロットル開度が学習領域の範囲内であれば、学習値の更新を許可することなく、次のステップＳ３０１１に進む。ここでスロットル開度の変動が所定の範囲内かどうかが判別される。変動が所定値を越えて大きいときには状態が不安定となるためリーンセットは行わない。スロットル開度の変動が小さく所定の範囲内であれば、次にステップＳ３０１２でその状態が所定時間以上継続しているかどうかが判別される。リーンセットを行うためには状態が安定して継続していることが必要だからである。
【０１１５】
スロットル開度の変動が小さいまま一定時間以上継続していれば、学習値更新の不許可のフラグをセットするとともに（ステップＳ３０１４）、学習制御の許可フラグをセットする（ステップＳ３０１５）。即ち、Ｏ2フィードバック制御条件の判別（ステップＳ３００４）、エンジン回転数条件の判別（ステップＳ３００５、３００７、３００８）およびスロットル開度条件の判別（ステップＳ３００９、３０１１、３０１２）の全てが条件適合（ＹＥＳ）の場合に、所定のリーンセット領域内に入っているとして学習制御を行う（ステップＳ３０１５）。この場合、この学習制御領域内では学習マップの更新は行わない（ステップＳ３０１４）。
【０１１６】
一方、前記Ｏ2フィードバック制御条件、エンジン回転数条件およびスロットル開度条件のいづれかが不適合（ＮＯ）であれば、所定のリーンセット領域外であるため、学習制御の禁止フラグをセットし（ステップＳ３０１３）、学習制御は行わない。この場合、リーンセット領域（学習制御領域）に入っているときに演算した学習値の更新を許可する。
【０１１７】
図２７は、前述の図２５のフローにおける学習噴射時間計算および学習マップ演算（ステップＳ３００２）の詳細フローチャートである。まず、学習制御が許可状態かどうかを判別する（ステップＳ３０１６）。これは前記図２６のステップＳ３０１５でセットした学習許可フラグの有無により判別する。許可フラグが立っていなければ、学習制御を行わないため、学習補正値をゼロにする（ステップＳ３０１７）。即ち、前述の式（１）において、学習補正値ＴL＝０とする。
【０１１８】
一方、学習許可のフラグが立っていれば、前述の式（１）において、（ＴINJB＋ＴL）×Ｃ＝０とする（ステップＳ３０１８）。即ち、Ｏ2フィードバック制御による補正を行わない。この場合、学習制御による補正値ＴLは、学習マップから求めた補間値とする。
【０１１９】
続いて、学習噴射時間を計算し（ステップＳ３０１９）、学習マップ演算を行う（ステップＳ３０２０）。これらのステップのフローについては、以下に詳述する。
【０１２０】
図２８は、上記ステップＳ３０１９の学習噴射時間計算のフローチャートである。まず、ステップＳ３０２１において、リッチからリーンまたはその逆への方向が反転したかどうかを判別する。これは、それぞれの方向反転位置での補正係数（図２４のγ０〜γ７）のＭＡＸ側かＭＩＮ側かを判定するためのものである。リーンからリッチ側に方向が反転した状態（ステップＳ３０２１がＮＯ）であれば、反転直前（反転位置）の補正係数γn-1（ＭＩＮ側）を揮発性メモリに保管し（ステップＳ３０２９）、フラグを立てる。さらにこのときの反転直前のスロットル開度およびエンジン回転数データをメモリに保管する（ステップＳ３０３０）。この状態ではまだ学習値は演算されていないため、学習更新値は無の状態、即ち計算前の状態である（ステップＳ３０３１）。このとき、学習値計算済みのフラグをクリヤしてもよい。
【０１２１】
次に再びこのルーチンに入って、リッチからリーンに方向が反転してステップＳ３０２１がＹＥＳになると、前記補正係数γn-1（ＭＩＮ側）のデータが保管されていることをフラグにより確認し（ステップＳ３０２２）、このリッチからリーンへの反転直前（反転位置）の補正係数γn（ＭＡＸ側）を保管しフラグを立てる（ステップＳ３０２３）。続いて、この反転直前の補正係数γnの演算ベースとなったスロットル開度とエンジン回転数のデータを保管する（ステップＳ３０２４）。
【０１２２】
次に、ステップＳ３０２５で、保管した反転位置の補正係数データから平均補正係数（学習補正係数▲１▼〜▲４▼）（γn＋γn-1）／２を演算する。さらに反転が８回終了した時点でこれに基づいて学習補正係数平均値を求め、これを新学習値として一時的にメモリに保管する（ステップＳ３０２７）。このとき、この新学習値の演算ベースとなったエンジン回転数の平均値およびスロットル開度をメモリから読み出しこれらの平均値を演算して、これも一時的にメモリに保管する。
【０１２３】
このようにして新学習値（学習更新値）が計算され、学習更新値が有の状態となり（ステップＳ３０２８）、ここで新学習値計算済のフラグを立てる。
【０１２４】
図２９は、前述の図２７のステップＳ３０２０の学習マップ演算のフローチャートである。まず、スロットル開度およびエンジン回転数のデータから、学習マップの縦横の各軸のデータに最も近い先頭アドレスをセットする（ステップＳ３０３２）。次に、スロットル開度およびエンジン回転数のそれぞれについて、マップのデータを補間して、３次元マップを補間する（ステップＳ３０３３）。次に、この補間した位置のマップデータを演算することにより、学習補正値を算出する（ステップＳ３０３４）。
【０１２５】
図３０は、前述の図２５のステップＳ３００３の学習マップ書込みのフローチャートである。まず、新学習値の更新許可状態かどうかを判別する（ステップＳ３０３５）。これは、前述の図２６におけるステップＳ３００６または３０１０において、更新許可のフラグが立っているかどうかを判別するものである。次に、ステップＳ３０３６において、学習更新値があるかどうか、即ち学習更新値を計算済かどうかを判別する。これは、前述の図２８におけるステップＳ３０２８での新学習値計算済のフラグにより判別する。次に、学習値演算に用いた８ヵ所の反転位置のスロットル開度平均値をメモリから読み出し、このデータに最も近い学習マップのスロットル軸の値をサーチする（ステップＳ３０３７）。このスロットル開度の平均値データは、前述の図２８のフローのステップＳ３０２７で、メモリに保管されたデータである。次に、同様に、メモリからエンジン回転数平均値のデータを読み出し、これに最も近い学習マップのエンジン回転数軸の値をサーチする（ステップＳ３０３８）。次に、このようにサーチした学習マップの軸データから、学習マップ上の学習値書込みアドレスを計算し（ステップＳ３０３９）、このアドレス位置に前述のように演算した学習値（＝ＴL（更新値））を書込む（ステップＳ３０４０）。
【０１２６】
このようにして、γ０〜γ７の８つの反転位置における補正係数とスロットル開度とエンジン回転数のデータを平均しそれぞれのメモリエリアに保管した後、これらのデータに基づいて、この学習領域を外れたときに、学習マップの所定の演算したアドレスに学習値を書込んで更新する。なお、学習マップには、初期値として、試験運転や実験等により求めた最適な噴射量補正データを予め記録しておき、最初に学習領域に入ったときには、この初期値に基づいて補正演算を行う。
【０１２７】
次に本発明による電子制御燃料噴射装置の学習制御装置を搭載する例えば船外機における、学習補正量の算出状況、さらに学習補正値の更新後のエンジン運転状況を以下に説明する。
【０１２８】
図３１は、船舶用エンジンが工場から出荷後、始めて海上で使用され、学習補正量が算出されるまでの各種運転状態の変化を示す経過図である。
【０１２９】
エンジン始動後ｔ１までの間は、スロットル開度が全閉状態にあり、アイドリング状態を経て、前進へクラッチが接続されて低速航行状態（いわゆるトローリング状態）とされる。時刻ｔ１１からゆっくりスロットル開度ＴｈＯが開かれ、それに連れて第１気筒噴射量第２〜第６噴射量がゆっくり増加される。その後スロットル開度ＴｈＯがＯ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フィードバック制御の状態判定ステップの詳細フローチャートである。
【図２２】  図１９のフローにおける比例定数計算ステップの詳細フローチャートである。
【図２３】  図１９のフローにおける積分定数計算ステップの詳細フローチャートである。
【図２４】  本発明の学習制御の演算データの説明図である。
【図２５】  本発明の実施例に係るメインルーチンにおける学習制御のフローチャートである。
【図２６】  図２５のステップＳ３００１の詳細フローチャートである。
【図２７】  図２５のステップＳ３００２の詳細フローチャートである。
【図２８】  図２７のステップＳ３０１９の詳細フローチャートである。
【図２９】  図２７のステップＳ３０２０の詳細フローチャートである。
【図３０】  図２５のステップＳ３００３の詳細フローチャートである。
【図３１】  学習補正量が算出されるまでの各種運転状態の変化を示す経過図である。
【図３２】  学習補正量算出後トローリング状態から再び学習制御領域に入る時の運転状態の変化を示す経過図である。
【符号の説明】
２５：スロットル弁、２６：インジェクタ、２０１：気筒判別手段、２０３：エンジン回転数算出手段、２０５：トリム角度読み込み手段、２１０：基本点火時期算出手段、２１１：基本燃料噴射量算出手段、２１４：点火時期補正手段、２１５：燃料噴射量補正手段、２１８：点火出力手段、２１９：燃料出力手段。
【図１】
0003939777.tif 000002
【図２】
0003939777.tif 000003
【図３】
0003939777.tif 000004
【図４】
0003939777.tif 000005
【図５】
0003939777.tif 000006
【図６】
0003939777.tif 000007
【図７】
0003939777.tif 000008
【図８】
0003939777.tif 000009
【図９】
0003939777.tif 000010
【図１０】
0003939777.tif 000011
【図１１】
0003939777.tif 000012
【図１２】
0003939777.tif 000013
【図１３】
0003939777.tif 000014
【図１４】
0003939777.tif 000015
【図１５】
0003939777.tif 000016
【図１６】
0003939777.tif 000017
【図１７】
0003939777.tif 000018
【図１８】
0003939777.tif 000019
【図１９】
0003939777.tif 000020
【図２０】
0003939777.tif 000021
【図２１】
0003939777.tif 000022
【図２２】
0003939777.tif 000023
【図２３】
0003939777.tif 000024
【図２４】
0003939777.tif 000025
【図２５】
0003939777.tif 000026
【図２６】
0003939777.tif 000027
【図２７】
0003939777.tif 000028
【図２８】
0003939777.tif 000029
【図２９】
0003939777.tif 000030
【図３０】
0003939777.tif 000031
【図３１】
0003939777.tif 000032
【図３２】
0003939777.tif 000033