(57)【要約】【課題】  エンジン停止位置の推定誤りによって始動性又は始動時のエミッションが悪化するのを防止する。【解決手段】  エンジンが停止する際に、クランク軸の停止位置を推定してメモリに記憶する停止位置推定処理（Ｓ３３０）を実行し、エンジンの始動時に、カム軸の回転に応じてセンサから出力されるカム信号にエッジが発生すると、上記メモリ内の停止位置推定値に基づいて、そのエッジ発生時のクランク位置を特定し（Ｓ４００）、その時点からエンジンの制御を開始するエンジン制御装置において、エンジンが停止する際に、上記停止位置推定処理によって停止位置を正しく推定することができない可能性のある条件が成立していると判定した場合には（Ｓ２８０〜Ｓ３２０の何れかでＮＯ）、上記Ｓ３３０の停止位置推定処理が実行されるのを禁止する。このため、停止位置の推定誤りによって始動性や始動時のエミッションが悪化するのを防止できる。【選択図】  図４
2005351209.tif 000002
【特許請求の範囲】
【請求項１】
エンジンのクランク軸の回転に応じてクランク軸センサから出力されるクランク軸回転信号と、前記エンジンのカム軸の回転に応じてカム軸センサから出力されるカム軸回転信号との双方、又は前記カム軸回転信号に基づいて、前記エンジンの１サイクルにおける前記クランク軸の回転位置であるクランク位置を特定するクランク位置特定手段と、
前記エンジンが停止する際に、前記クランク軸回転信号と前記カム軸回転信号とのうちの少なくとも１つに基づいて、前記クランク軸の停止位置を推定する停止位置推定手段とを備え、
前記エンジンの始動時に、前記停止位置推定手段により推定されている停止位置に基づいて前記エンジンの制御を開始するエンジン制御装置において、
前記エンジンが停止する際に、前記停止位置推定手段が前記クランク軸の停止位置を正しく推定することができない可能性のある特定条件が成立しているか否かを判定し、該特定条件が成立していると判定した場合には、前記停止位置推定手段が作動するのを禁止する判定手段を備え、
前記エンジンの始動時に、前記クランク軸の停止位置が前記停止位置推定手段により推定されていない場合には、前記クランク位置特定手段によってクランク位置が特定されてから、前記エンジンの制御を開始するように構成されていること、
を特徴とするエンジン制御装置。
【請求項２】
請求項１に記載のエンジン制御装置において、
前記特定条件は、前記エンジンが回転しにくくなる条件であること、
を特徴とするエンジン制御装置。
【請求項３】
請求項２に記載のエンジン制御装置において、
前記特定条件は、前記エンジンの冷却水温が所定値より低いという条件であること、
を特徴とするエンジン制御装置。
【請求項４】
請求項１に記載のエンジン制御装置において、
前記エンジンは車両に搭載されたものであり、
前記特定条件は、前記車両のバッテリの電圧が所定値より低いという条件であること、
を特徴とするエンジン制御装置。
【請求項５】
請求項１に記載のエンジン制御装置において、
前記特定条件は、前記停止位置推定手段が前記クランク軸の停止位置を推定するのに用いる信号が当該エンジン制御装置に正常に入力されない異常が発生しているという条件であること、
を特徴とするエンジン制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、エンジンを制御するエンジン制御装置に関し、特に、エンジンの停止時にクランク軸の停止位置を推定しておき、その推定した停止位置を次のエンジン始動時に利用するようにしたエンジン制御装置に関するものである。
【背景技術】
【０００２】
従来より、エンジン制御装置では、エンジンのクランク軸の回転に応じてクランク軸センサから出力されるクランク軸回転信号と、クランク軸の回転に対し１／２の比率で回転するエンジンのカム軸の回転に応じてカム軸センサから出力されるカム軸回転信号とから、クランク位置（エンジンの１サイクルにおけるクランク軸の回転位置）を特定し、その特定後に、エンジンに対する点火や燃料噴射を開始している（例えば、特許文献１参照）。
【０００３】
具体例を挙げて説明すると、まず、クランク軸センサから出力されるクランク軸回転信号には、クランク軸が所定角度回転する毎にパルスエッジが発生すると共に、クランク軸の回転位置が予め設定された基準位置に来た時には、そのパルスエッジが所定数（例えば２個）欠落した欠歯部が現れるようになっている。また例えば、カム軸センサから出力されるカム軸回転信号は、カム軸の回転に応じてハイレベルとローレベルとに変化すると共に、クランク軸回転信号に欠歯部が現れるタイミングでは、その各タイミング毎に交互に異なったレベルとなる。尚、この例では、カム軸センサが、磁気抵抗素子（ＭＲＥ）式のセンサであるものとしている。
【０００４】
そして、エンジン制御装置では、クランク軸回転信号に欠歯部が現れたか否かを判定する欠歯判定を行い、その欠歯判定で欠歯部が現れたと判定したときのカム軸回転信号のレベルから、クランク位置を特定する。例えば、カム軸回転信号がハイレベルならば、現在のクランク位置が特定のクランク位置（ここではＸ°ＣＡとする）であると特定し、カム軸回転信号がローレベルならば、現在のクランク位置がＸ°ＣＡから３６０°ＣＡだけ進んだクランク位置であると特定する。尚、「ＣＡ」はクランクアングル（クランク角度）を意味している。また、この種のエンジン制御装置では、クランク軸回転信号のパルス間隔（即ち、クランク軸回転信号に上記所定角度毎のパルスエッジが発生する間隔）を計測すると共に、今回測定したパルス間隔Ｔ１と前回計測したパルス間隔Ｔ０とを比較して、例えば、Ｔ１とＴ０との比（＝Ｔ１／Ｔ０）が所定の判定比以上である、といった欠歯判定条件が成立したならば、クランク軸回転信号に欠歯部が現れたと判定する。
【０００５】
一方、クランク軸センサを備えずに、カム軸センサからの回転信号のみを用いてクランク位置の特定及び機関回転速度の検出を行うようにしたクランク軸センサレスの構成もある（例えば、特許文献２参照）。
【０００６】
しかし、上記技術では、エンジンの始動時において、スタータによるクランキングが開始されてからクランク軸回転信号における欠歯部等の基準位置が検出されてクランク位置が最初に特定されるまでには、一般にクランク軸の数回転分が必要となる。
【０００７】
このため、エンジンに対する点火及び噴射の制御を速やかに開始することができず、始動までに時間がかかったり、始動前にインジェクタ（燃料噴射弁）から漏れ落ちた燃料や吸気管内に残っていた未燃焼ガスがそのまま排気されてエミッションの悪化を招くといった問題がある。特に、近年益々強化される排気ガスの規制を満足させるためには、スタータ始動とほぼ同時に燃料を燃やしきり、未燃焼ガスや生ガスが排気管へ送られないようにすることが重要となってくる。
【０００８】
そこで、始動性とエミッションを向上させるために、エンジンが停止する際に、クランク軸回転信号やカム軸回転信号を評価してエンジンの停止位置（詳しくは、クランク軸の停止位置）を推定し、次のエンジン始動時に、その推定した停止位置に基づいてエンジンの制御を開始することが考えられている（例えば、特許文献３参照）。
【特許文献１】特開２００１−９０６００号公報
【特許文献２】特開平５−１８７２９１号公報
【特許文献３】特表平８−５０６３９７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
ところで、上記のようなエンジン停止位置の推定機能を備えたエンジン制御装置において、エンジンの停止位置は、クランク軸回転信号やカム軸回転信号に基づいて、予め設定されたロジックにより推定されることとなるが、そのような推定ロジックで推定した停止位置は、常に正しいとは限らず、エンジンの状態や環境等によっては、実際の停止位置からずれてしまう可能性がある。
【００１０】
例えば、エンジンが十分に暖気できていない場合には、エンジンオイルの粘度が上がる（硬くなる）ので、十分に暖気できている場合に比べるとエンジンが回転しにくくなる。そして、エンジンが回転しにくくなると、クランク軸が停止寸前で何れかの気筒の上死点位置を越えられずに逆回転する可能性が高くなり、そのような逆回転が生じるとエンジンの停止位置を正しく推定することできない可能性がある。また更に、エンジンが回転しにくくなると、停止位置を推定するために用いる回転信号の形状、エッジ間隔、エッジの発生タイミングなどが想定したものとは異なってしまい、エンジンの停止位置を正しく推定することできない可能性がある。
【００１１】
また例えば、停止位置を推定するのに用いる回転信号がセンサや配線の異常によって正常に入力されなくなっている場合には、当然、正しい停止位置を推定することはできない。また例えば、車両のバッテリが劣化していたりしてバッテリ電圧（バッテリの電圧）が低い場合には、停止位置を推定するために用いる回転信号を出力するセンサやその回転信号を波形整形する回路などの特性が変わる可能性があるため、その場合にも、エンジンの停止位置を正しく推定することができなくなる可能性がある。
【００１２】
そして、エンジンの始動時において、正しい停止位置を推定できていないのに、そのような誤った推定位置に基づいて点火や燃料噴射の制御を開始した場合には、エンジンが始動できなかったり、始動時のエミッションが逆に悪くなってしまうという問題がある。
【００１３】
そこで本発明は、エンジン停止位置の推定誤りによって始動性又は始動時のエミッションが悪化するのを防止することのできるエンジン制御装置の提供を目的としている。
【課題を解決するための手段】
【００１４】
本発明のエンジン制御装置は、エンジンのクランク軸の回転に応じてクランク軸センサから出力されるクランク軸回転信号と、エンジンのカム軸の回転に応じてカム軸センサから出力されるカム軸回転信号との双方、又はカム軸回転信号に基づいて、クランク位置を特定するクランク位置特定手段と、エンジンが停止する際に、クランク軸回転信号とカム軸回転信号とのうちの少なくとも１つに基づいて、クランク軸の停止位置を推定する停止位置推定手段とを備えており、エンジンの始動時に、停止位置推定手段により推定されている停止位置に基づいてエンジンの制御を開始するが、特に、判定手段を備えている。
【００１５】
この判定手段は、エンジンが停止する際に、停止位置推定手段がクランク軸の停止位置を正しく推定することができない可能性のある特定条件が成立しているか否かを判定し、その特定条件が成立していると判定した場合には、停止位置推定手段が作動するのを禁止する。
【００１６】
そして、本発明のエンジン制御装置では、エンジンの始動時に、クランク軸の停止位置が停止位置推定手段により推定されていない場合（即ち、前回のエンジン停止時に判定手段によって停止位置推定手段の作動が禁止された場合）には、クランク位置特定手段によってクランク位置が特定されてから、エンジンの制御を開始する。
【００１７】
このような本発明のエンジン制御装置によれば、停止位置推定手段がクランク軸の停止位置を正しく推定することができない可能性のある場合には、その停止位置推定手段による停止位置の推定が禁止され、その次のエンジン始動時には、クランク位置特定手段によりクランク位置が特定されてからエンジンの制御を開始することとなるため、エンジンの始動時に、誤った推定位置に基づいて点火や燃料噴射の制御（始動制御）を行ってしまうことを防止することができる。よって、エンジン停止位置の推定誤りによって始動性又は始動時のエミッションが悪化するのを防止できる。
【００１８】
ところで、前述したように、エンジンが回転しにくくなると、停止位置を正しく推定することできない可能性があるため、判定手段が判定する特定条件としては、エンジンが回転しにくくなる条件とすることが考えられる。
【００１９】
そして、この場合、判定手段が判定する特定条件としての「エンジンが回転しにくくなる条件」としては、「エンジンの冷却水温が所定値より低い」という条件にすることが好ましい。
【００２０】
つまり、冷却水温が低いということは、エンジンが十分に暖気できていない状態であると考えられる。そして、前述したように、エンジンが十分に暖気できていない状態だと、エンジンオイルの粘度が上がり、エンジンが回転しにくくなるからである。また、判定手段が判定する特定条件としては、他にも例えば、「外気温が所定値より低い」とか、「エンジンオイルの温度（いわゆる油温）が所定値より低い」とか、「エンジンオイルの粘度又は量が所定値以上」、といった条件にしても良いが、通常、エンジンには冷却水温を検出するための水温センサが必ず取り付けられているため、「エンジンの冷却水温が所定値より低い」という条件であれば、どのようなエンジンであっても、センサを追加すること無しに判定することができ有利である。
【００２１】
また、制御対象のエンジンが車両のエンジンである場合、判定手段が判定する特定条件としては、「車両のバッテリの電圧が所定値より低い」という条件にしても良い。つまり、前述したように、バッテリ電圧が低い場合には、停止位置を推定するために用いる回転信号を出力するセンサやその回転信号を波形整形する回路などの特性が変わってしまい、停止位置を正しく推定することができない可能性があるからである。
【００２２】
一方、判定手段が判定する特定条件としては、停止位置推定手段がクランク軸の停止位置を推定するのに用いる信号が当該エンジン制御装置に正常に入力されない異常が発生している、という条件にしても良い。つまり、そのような信号入力異常が発生している場合には、当然、停止位置を正しく推定することはできないからである。
【００２３】
尚、もし、上記信号入力異常が発生すると、クランク位置特定手段もクランク位置を特定することができない構成の場合には、エンジンを始動させることができなくなるが、誤った推定位置に基づいて点火や燃料噴射の制御を開始してしまうことは防止できる。つまり、エンジン停止位置の推定誤りによってエミッションを悪化させてしまうことは最低限防止することができる。
【００２４】
また、判定手段が判定する特定条件としては、上述の各条件に限るものではなく、以下の実施形態で述べる条件など、様々なものが考えられる。
【発明を実施するための最良の形態】
【００２５】
以下に、本発明が適用された実施形態のエンジン制御装置について説明する。尚、本実施形態のエンジン制御装置は、ＤＯＨＣ型直列５気筒の４ストローク１サイクルエンジン（いわゆる４サイクルエンジン）を制御するものである。
【００２６】
図１に示すように、本実施形態のエンジン制御装置１は、エンジン３を制御するための処理を実行するマイコン（マイクロコンピュータ）５と、マイコン５からの制御信号に従って各種アクチュエータを作動させる駆動回路７と、各種信号をマイコン５に入力させる入力回路９とを備えている。
【００２７】
具体的には、マイコン５には、エンジン３の吸気管１１に設けられた吸入空気量センサ１３からの信号、吸気管１１に設けられたスロットル弁１５の開度を検出するスロットル開度センサ１７からの信号、吸気管１１内の圧力を検出する吸気管圧力センサ１９からの信号、運転者によって操作されるアクセルペダル２１の操作位置を検出するペダル位置センサ２３からの信号、エンジン３の冷却水温を検出する水温センサ２５からの信号、エンジン３のノッキングを検出するためのノックセンサ２７からの信号、エンジン３の排気管２９に設けられた酸素濃度センサ３１からの信号、クランク軸３３の回転に応じてクランク軸センサ３５から出力されるクランク軸回転信号（以下、クランク信号という）、吸気バルブを作動させるカム軸（以下、吸気カム軸という）３７の回転に応じて吸気カム軸センサ３９から出力される吸気カム軸回転信号（以下、吸気カム信号という）、排気バルブを作動させるカム軸（以下、排気カム軸という）４１の回転に応じて排気カム軸センサ４３から出力される排気カム軸回転信号（以下、排気カム信号という）、及び車両のイグニッションスイッチ４５やスタータスイッチ（図示省略）といった各種スイッチのオン／オフ状態を表すスイッチ信号などが、入力回路９を介して入力される。
【００２８】
そして、マイコン５は、入力回路９を介して入力される上記各信号に基づいてエンジン３や車両の状態を検出すると共に、その検出結果に基づいて駆動回路７に制御信号を出力することにより、スロットル弁１５の開度を変えるスロットルモータ４９、クランク軸３３に対する吸気カム軸３７の回転位相差（即ち、吸気バルブの開閉タイミング）や吸気バルブのリフト量を変化させる吸気側可変バルブタイミング機構５１を油圧によって作動させるための吸気側オイルコントロールバルブ５３、クランク軸３３に対する排気カム軸４１の回転位相差（即ち、排気バルブの開閉タイミング）や排気バルブのリフト量を変化させる排気側可変バルブタイミング機構５５を油圧によって作動させるための排気側オイルコントロールバルブ５７、各気筒の点火プラグに通電して着火させるための点火コイル５９、及び各気筒のインジェクタ６１、といった各種アクチュエータを制御してエンジン３を作動させる。
【００２９】
また、エンジン制御装置１の外部には、給電用のメインリレー６３が設けられており、イグニッションスイッチ４５がオンされると、そのメインリレー６３がオンして、当該エンジン制御装置１の電源ライン６５にバッテリ電圧（車載バッテリ６７のプラス端子の電圧）ＶＢが供給される。そして、エンジン制御装置１では、その電源ライン６５に供給されるバッテリ電圧ＶＢをもとにして、マイコン５や駆動回路７及び入力回路９等の各部が動作するようになっている。更に、上記メインリレー６３は、マイコン５が駆動回路７を介してオン／オフさせることもできるようになっている。そして、マイコン５は、イグニッションスイッチ４５のオンに伴いメインリレー６３がオンして動作を開始すると、自らもメインリレー６３をオンさせることで、その後、イグニッションスイッチ４５がオフされても動作を継続し、必要な処理を全て終了したならば、上記メインリレー６３をオフさせて、動作を停止するようになっている。尚、こうしたメインリレー６３による給電技術は、例えば特開平１１−２５９３７５号公報等に記載されているように周知である。
【００３０】
また更に、図示は省略しているが、マイコン５は、上記電源ライン６５或いは別のラインを介して供給されるバッテリ電圧ＶＢを、内部のＡ／Ｄ変換器などによってモニタできるようになっている。
【００３１】
ここで、クランク軸センサ３５は、クランク軸３３に固定されたロータ６９の外周に対向して設けられ、該ロータ６９の外周に所定角度（本実施形態では６°）毎の間隔で形成された歯７１を検出して、該歯７１が通過する毎に立ち下がるパルスを出力する電磁ピックアップ式やホールＩＣ式等の回転センサである。そして、そのクランク軸センサ３５からのパルス列であるクランク信号は、入力回路９によりハイとローとの矩形波に波形整形されてマイコン５に入力される。また、上記ロータ６９の外周には、歯７１が２個欠損した歯欠損部が１つ設けられている。
【００３２】
このため、クランク軸センサ３５から入力回路９を介してマイコン５に入力されるクランク信号には、図２に示すように、６°ＣＡ毎（クランク軸３３が６°回転する毎）に有効エッジとしての立ち下がりエッジが発生すると共に、クランク軸３３の回転位置が、上記ロータ６９の歯欠損部が当該クランク軸センサ３５に対向することとなる基準位置に来ると、立ち下がりエッジの間隔が３倍の長さ（即ち、１８°ＣＡ分の長さ）になった欠歯部Ｋが現れることとなる。尚、ロータ６９の歯欠損部も“欠歯部”或いは単に“欠歯”と呼ばれることがあり、クランク信号の欠歯部Ｋも単に“欠歯”と呼ばれることがある。
【００３３】
また、本実施形態では、図２に示すように、エンジン３の各気筒が第１気筒＃１→第２気筒＃２→第４気筒＃４→第５気筒＃５→第３気筒＃３の順にＴＤＣ（上死点）となり、クランク信号の欠歯部Ｋは、第４気筒＃４のＢＴＤＣ３０°ＣＡ〜ＢＴＤＣ１２°ＣＡの期間と、第３気筒＃３のＡＴＤＣ４２°ＣＡ〜ＡＴＤＣ６０°ＣＡの期間とに、現れるようになっている。尚、「ＢＴＤＣ」は「上死点前」を意味し、「ＡＴＤＣ」は「上死点後」を意味している。
【００３４】
一方、吸気カム軸センサ３９は、吸気カム軸３７に固定されたロータ（図示省略）の外周に対向して設けられ、そのロータの外周に形成された凹凸に応じて、出力信号のレベルがハイとローとに変化する磁気抵抗素子（ＭＲＥ）式の回転センサであり、この吸気カム軸センサ３９から出力される吸気カム信号も、入力回路９により波形整形されてマイコン５に入力される。
【００３５】
そして、吸気カム軸センサ３９から入力回路９を介してマイコン５に入力される吸気カム信号の１サイクル分（吸気カム軸３７の１回転分であり、クランク軸３３の２回転分）のレベル変化パターンは、図２に示すように、例えば第４気筒＃４のＴＤＣ直前の立ち下がりエッジを起点にして述べると、「１２０°ＣＡ分：ロー→２４°ＣＡ分：ハイ→９０°ＣＡ分：ロー→５４°ＣＡ分：ハイ→６０°ＣＡ分：ロー→８４°ＣＡ分：ハイ→４８°ＣＡ分：ロー→９６°ＣＡ分：ハイ→１８°ＣＡ分：ロー→１２６°ＣＡ分：ハイ」というように、同じクランク角度分の幅を持つ部分が複数存在しないパターンになっている。また、吸気カム信号の各立ち下がりエッジは、各気筒のＢＴＤＣ３３°ＣＡのタイミングで生じるようになっている。そして更に、吸気カム信号は、クランク信号における欠歯部Ｋの終了タイミングでは、その各タイミング毎に交互に異なったレベルとなる。具体的には、第４気筒＃４のＢＴＤＣ１２°ＣＡのタイミングではローレベルとなり、第３気筒＃３のＡＴＤＣ６０°ＣＡのタイミングではハイレベルとなる。
【００３６】
また同様に、排気カム軸センサ４３も、排気カム軸４１に固定されたロータ（図示省略）の外周に対向して設けられ、そのロータの外周に形成された凹凸に応じて、出力信号のレベルがハイとローとに変化する磁気抵抗素子式の回転センサであり、この排気カム軸センサ４３から出力される排気カム信号も、入力回路９により波形整形されてマイコン５に入力される。
【００３７】
そして、排気カム軸センサ４３から入力回路９を介してマイコン５に入力される排気カム信号の１サイクル分（排気カム軸４１の１回転分であり、クランク軸３３の２回転分）のレベル変化パターンは、図２に示すように、例えば第４気筒＃４のＴＤＣ直前の立ち上がりエッジを起点にして述べると、「１０２°ＣＡ分：ハイ→１８°ＣＡ分：ロー→１４４°ＣＡ分：ハイ→１２０°ＣＡ分：ロー→１８°ＣＡ分：ハイ→６０°ＣＡ分：ロー→７２°ＣＡ分：ハイ→７２°ＣＡ分：ロー→１０２°ＣＡ分：ハイ→４２°ＣＡ分：ロー」というパターンになっている。また、排気カム信号の各エッジのうち、第４気筒＃４のＴＤＣ直前の立ち上がりエッジ（「４２°ＣＡ分：ロー」から「１０２°ＣＡ分：ハイ」へ遷移する立ち上がりエッジ）は、第４気筒＃４のＢＴＤＣ７８°ＣＡのタイミングで生じるようになっている。
【００３８】
尚、図２において、吸気カム信号と排気カム信号との各波形に付された各矢印の上部に記載されている数字は、その矢印の期間のクランク角度を示している。また、図１では、入力回路９を１つにまとめて記載しているが、入力回路９は、実際には、マイコン５に入力させる入力信号毎に存在しており、その各入力信号の種類に応じた信号処理を行う。例えば、入力信号が、クランク信号、吸気カム信号、排気カム信号や、スイッチ信号であれば、その信号を波形整形してマイコン５に入力させ、吸入空気量センサ１３からの信号や水温センサ２５からの信号といったアナログ信号であれば、その信号から高周波ノイズを除去してマイコン５のＡ／Ｄ変換器用の入力ポートに入力させる。また同様に、駆動回路７も、実際には各アクチュエータ毎に存在している。
【００３９】
以上のようなハードウェア構成のエンジン制御装置１において、マイコン５は、上記のクランク信号、吸気カム信号、及び排気カム信号に基づいて、クランク位置を特定すると共に、当該マイコン５内でクランク位置を認識するために参照するクランクカウンタの値を図２の如く更新する。尚、クランクカウンタの値は、図２における実線では、分解能が３６°ＣＡで且つ０〜１９の範囲でラップラウンドするように示しているが、実際には、点線の楕円内に示すように、クランクカウンタの分解能は６°ＣＡである。つまり、クランクカウンタの値は、分解能が６°ＣＡで且つ０〜１１９の範囲でラップラウンドされる。また、クランクカウンタの値が最大の１１９から最小の０へ戻るタイミングのクランク位置は、第４気筒＃４のＢＴＤＣ６°ＣＡとなっている。そして、マイコン５は、そのクランクカウンタの値に基づいて、エンジン３に対する点火や燃料噴射のタイミングを設定している。
【００４０】
そこで次に、マイコン５がクランク位置を特定するために実行する処理について、図３及び図４を用い説明する。尚、マイコン５は、データを記憶するためのメモリとして、通常のＲＡＭ以外に、上記電源ライン６５にバッテリ電圧ＶＢが供給されない本エンジン制御装置１の動作停止時にもデータを継続的に保持可能なメモリ６（本実施形態では電源バックアップされたＲＡＭであるが、例えば、フラッシュＲＯＭやＥＥＰＲＯＭ等のデータ書き換え可能な不揮発性メモリでも良い）を備えているが、以下の各処理に関する説明において、特に明記していなければ、情報の記憶先は通常のＲＡＭである。また、その通常のＲＡＭに記憶された情報は、イグニッションスイッチ４５のオンに伴い当該マイコン５が動作を開始する際のＲＡＭに対する初期化処理によってクリアされるか或いは他の初期値に設定される。
【００４１】
まず図３は、クランク信号に有効エッジとしての立ち下がりエッジが発生する毎に実行されるクランク信号割り込み処理を表すフローチャートである。但し、このクランク信号割り込み処理は、スタータスイッチがオンされてスタータによるエンジン３のクランキングが開始されてから一定時間が経過するまでのスタータマスク期間は、クランク信号にスタータの作動による大きなノイズが乗っている可能性が高いため、実行が禁止されるようになっている。
【００４２】
図３に示すように、マイコン５がクランク信号割り込み処理を開始すると、まずＳ１０５にて、当該クランク信号割り込み処理を前回開始した時刻から今回開始した時刻までの時間を算出し、その算出した時間をクランク信号のパルス間隔として記憶する。尚、イグニッションスイッチ４５がオンされてマイコン５が動作を開始してから始めて本処理を実行した場合、パルス間隔としては、初期値としての最大値が記憶される。
【００４３】
次にＳ１１０にて、今回のＳ１０５で記憶したパルス間隔（即ち、クランク信号の今回のパルス間隔）Ｔ１と、前回のＳ１０５で記憶したパルス間隔（即ち、クランク信号の前回のパルス間隔）Ｔ０とを比較して、Ｔ１とＴ０との比（＝Ｔ１／Ｔ０）が所定の判定比Ｈ（例えばＨ＝２．４）以上である、という欠歯判定条件が成立しているか否かを判定し、その欠歯判定条件が成立していれば、クランク信号に欠歯部Ｋが現れた（詳しくは、今回のクランク信号の立ち下がりエッジが欠歯部Ｋの終了タイミングである）と判定する。尚、イグニッションスイッチ４５がオンされてマイコン５が動作を開始してから始めて本処理を実行した場合、Ｔ０は初期値としての最大値に設定されている。よって、その場合、Ｓ１１０では、必ず上記欠歯判定条件が成立していないと判定することとなる。
【００４４】
そして、このＳ１１０にて、クランク信号に欠歯部Ｋが現れたと判定しなかった場合には（Ｓ１１０：ＮＯ）、そのままＳ１４０に移行するが、クランク信号に欠歯部Ｋが現れたと判定した場合には（Ｓ１１０：ＹＥＳ）、Ｓ１２０に進んで、現在の吸気カム信号のレベルをチェックし、続くＳ１３０にて、クランクカウンタに、上記Ｓ１２０でチェックした吸気カム信号のレベルに応じた値をセットする。具体的には、吸気カム信号がローレベルであれば、現在のクランク位置が第４気筒＃４のＢＴＤＣ１２°ＣＡであると判断できることから、クランクカウンタに１１９（即ち、０に戻る１つ前の値）をセットし、吸気カム信号がハイレベルであれば、現在のクランク位置が第３気筒＃３のＡＴＤＣ６０°ＣＡであると判断できることから、クランクカウンタに５９（即ち、１１９から３６０°ＣＡ分である６０だけずれた値）をセットする。そして、その後、Ｓ１４０に進む。
【００４５】
Ｓ１４０では、クランク位置を特定済みか否かを判定する。尚、クランク位置を特定済みとは、イグニッションスイッチ４５のオンに伴い当該マイコン５が動作を開始してから既にクランク位置を特定しているということであり、更に詳しくは、その特定したクランク位置に該当する値をクランクカウンタにセットできており、既にクランクカウンタの値がクランク位置を示す値になっているということである。そして、本実施形態では、マイコン５が動作を開始してから、上記Ｓ１３０か、後述する図４のＳ４００或いはＳ４３０でクランクカウンタに値がセットされれば、その時点でクランク位置を特定済みとなる。
【００４６】
そして、このＳ１４０にて、クランク位置を特定済みではないと判定した場合には、そのまま当該クランク信号割り込み処理を終了するが、クランク位置を特定済みであると肯定判定した場合には、Ｓ１５０に進む。
【００４７】
Ｓ１５０では、今回のＳ１１０での判定結果を参照して、クランク信号に欠歯部Ｋが現れたと今回判定した場合には（Ｓ１５０：ＹＥＳ）、そのままＳ１７０に移行するが、クランク信号に欠歯部Ｋが現れたと判定しなかった場合には（Ｓ１５０：ＮＯ）、Ｓ１６０に進んで、クランクカウンタのカウント処理を行った後、Ｓ１７０に進む。尚、Ｓ１６０では、基本的には、クランクカウンタの値を１増加させるインクリメント処理を行うが、増加前の値が１１９である場合には、値を０に戻すラップラウンドの処理を行う。
【００４８】
Ｓ１７０では、現在のクランク位置が、第４気筒＃４のＢＴＤＣ６°ＣＡを基準にした３６°ＣＡ毎のクランク位置であるか否か（即ち、現在のクランクカウンタの値が６の整数倍の値（＝０，６，１２，…，１０８，１１４）であるか否か）を判定し、３６°ＣＡ毎のクランク位置でなければ、そのまま当該クランク信号割り込み処理を終了するが、３６°ＣＡ毎のクランク位置であれば、Ｓ１８０に進む。
【００４９】
そして、Ｓ１８０にて、各気筒の点火と燃料噴射を制御するための制御処理を起動する。すると、点火時期と燃料噴射量及び噴射時期の演算や、点火及び燃料噴射を実施するためのタイマセット等が行われることとなる。
【００５０】
次にＳ１９０にて、３６°ＣＡ毎に実行すべき他の角度同期制御処理を起動する。そして、その後、当該クランク信号割り込み処理を終了する。
次に、図４は、吸気カム信号と排気カム信号との何れかにエッジが発生する毎に実行されるカム信号割り込み処理を表すフローチャートである。
【００５１】
図４に示すように、マイコン５がカム信号割り込み処理を開始すると、まずＳ２１０にて、イグニッションスイッチ（ＩＧＳＷ）４５がオンされているか否かを判定し、イグニッションスイッチ４５がオンされていると判定した場合には、次のＳ２２０にて、エンジン回転数が所定値ＴＨ１以上であるか否かを判定する。この所定値ＴＨ１は、エンジン３が本エンジン制御装置１の制御によって作動していると見なされる回転数であり、本実施形態では、アイドル回転数よりも若干低い例えば５００ｒｐｍに設定されている。また、エンジン回転数は、図３のＳ１０５で逐次更新記憶されるクランク信号のパルス間隔に基づいて算出される。
【００５２】
上記Ｓ２２０にて、エンジン回転数が所定値ＴＨ１以上であると判定した場合には、Ｓ２３０に進んで、クランク軸３３の停止位置の推定値である停止位置推定値をメモリ６から消去する初期化を行い、続くＳ２４０にて、エンジン回転数が所定値ＴＨ１以上になったことを示す作動履歴を記憶した後、Ｓ２５０に進む。尚、停止位置推定値は、後述するＳ３３０の処理によって算出されると共に、メモリ６に記憶されるデータである。
【００５３】
Ｓ２５０では、吸気カム信号と排気カム信号とのうち、今回エッジが発生した方のカム信号について、その発生したエッジの方向又は該カム信号の現在のレベルを記憶し、その後、当該カム信号割り込み処理を終了する。
【００５４】
一方、上記Ｓ２１０にて、イグニッションスイッチ４５がオンされていない（即ち、オフされている）と判定した場合には、今からエンジン３が停止するであろうエンジン停止時と判断して、Ｓ２７０に移行する。
【００５５】
Ｓ２７０では、エンジン回転数が所定範囲内（本実施形態では、上記所定値ＴＨ１から０ｒｐｍまでの範囲内）であるか否かを判定し、その所定範囲内であると肯定判定した場合には、Ｓ２８０に進む。
【００５６】
Ｓ２８０では、水温センサ２５からの信号に基づき検出されるエンジン３の冷却水温が所定値ＴＨ２（例えば−２°Ｃ）以上であるか否かを判定し、冷却水温が所定値ＴＨ２以上であると肯定判定した場合には、Ｓ２９０に進む。
【００５７】
Ｓ２９０では、バッテリ電圧ＶＢが所定値ＴＨ３（例えば８Ｖ）以上であるか否かを判定し、バッテリ電圧ＶＢが所定値ＴＨ３以上であると肯定判定した場合には、Ｓ３００に進む。
【００５８】
Ｓ３００では、クランク信号と吸気カム信号と排気カム信号とが本エンジン制御装置１に正常に入力されているか否かを判定し、それら３つの信号が全て正常に入力されていると肯定判定した場合には、Ｓ３１０に進む。尚、マイコン５は、クランク信号と吸気カム信号と排気カム信号との３つの信号が正常に入力されているか否かを監視する監視処理（図示省略）を実行しており、その監視処理にて、何れかの信号がレベル変化するのに他の信号が一定時間以上レベル変化しない、といった矛盾を検知すると、そのレベル変化しない信号が異常であることを示す異常検出履歴をＲＡＭ及びメモリ６に記憶するようになっている。そして、Ｓ３００では、上記異常検出履歴に基づいて上記３つ信号が正常に入力されているか否かを判定する。
【００５９】
Ｓ３１０では、上記Ｓ２４０で作動履歴が記憶されているか否か（即ち、イグニッションスイッチ４５のオン中にエンジン回転数が所定値ＴＨ１以上になったか否か）を判定し、作動履歴が記憶されていると肯定判定した場合には、Ｓ３２０に進む。
【００６０】
Ｓ３２０では、始動後経過時間が所定値ＴＨ４（例えば２０秒）以上であるか否かを判定し、始動後経過時間が所定値ＴＨ４以上であると肯定判定した場合には、Ｓ３３０に進む。尚、始動後経過時間とは、エンジン３が通常の運転状態になっていた継続時間である。そして、本実施形態では、エンジン回転数が上記所定値ＴＨ１以上になっていた継続時間を計測しており、その継続時間を始動後経過時間としている。
【００６１】
Ｓ３３０では、クランク軸３３の停止位置を推定する停止位置推定処理を実行する。
この停止位置推定処理は、概念的には、停止直前のクランク位置を記憶していく、というものである。そして、本実施形態では、例えば、吸気カム信号と排気カム信号との何れかに今回発生したエッジが、図２にてＥ１〜Ｅ２０までの２０通りの番号を付したエッジのうちの何れであるかを判別し、その判別したエッジ番号を、停止位置推定値としてメモリ６に記憶する処理を行う。また、吸気カム信号と排気カム信号との何れかに今回発生したエッジは、基本的にはクランクカウンタの現在値から判別するが、クランク軸３３が停止寸前で何れかの気筒のＴＤＣ位置を越えられずに逆回転する可能性もあり、そのような逆回転時には吸気カム信号と排気カム信号とがそれまでのレベル変化パターンを逆戻ししたパターンで変化することとなるため、吸気カム信号と排気カム信号とのそれまでの入力状態（特にレベル変化パターンとエッジ間隔）に基づいてクランク軸３３が逆回転したか否かの判定も行うと共に、逆回転を検出した時には、記憶する停止位置推定値を修正する（戻す）処理も行う。このような停止位置推定処理により、エンジン３が停止（クランク軸３３の回転が停止）した時点でメモリ６には、停止位置推定値として、吸気カム信号と排気カム信号との何れかに最後に発生したエッジの番号（換言すれば、次回のエンジン３の始動時に、吸気カム信号と排気カム信号との何れかに最初に発生するエッジの１つ前のエッジの番号）が記憶されることとなる。
【００６２】
そして、このＳ３３０の処理を終了した後、前述したＳ２５０に進み、その後、当該カム信号割り込み処理を終了する。
尚、マイコン５は、クランク信号と吸気カム信号と排気カム信号との全てが一定時間以上継続してレベル変化しない、という状態を検出すると、エンジン３が停止したと判断し、イグニッションスイッチ４５がオフされていれば、その後、メインリレー６３をオフさせて動作を停止する。また、上記Ｓ３３０の停止位置推定処理では、停止位置推定値を通常のＲＡＭに記憶するようにし、メインリレー６３をオフさせる直前に、その通常のＲＡＭ内の停止位置推定値をメモリ６にコピーするようにしても良い。
【００６３】
一方、上記Ｓ２７０〜Ｓ３２０の何れかで否定判定した場合、即ち、エンジン回転数が所定範囲内でないと判定した場合（Ｓ２７０：ＮＯ）、又はエンジン３の冷却水温が所定値ＴＨ２より低いと判定した場合（Ｓ２８０：ＮＯ）、又はバッテリ電圧ＶＢが所定値ＴＨ３より低いと判定した場合（Ｓ２９０：ＮＯ）、又はクランク信号と吸気カム信号と排気カム信号との少なくとも１つが本エンジン制御装置１に正常に入力されていないと判定した場合（Ｓ３００：ＮＯ）、又はイグニッションスイッチ４５のオン中にエンジン回転数が所定値ＴＨ１以上になっていないと判定した場合（Ｓ３１０：ＮＯ）、又は始動後経過時間が所定値ＴＨ４以上でないと判定した場合（Ｓ３２０：ＮＯ）には、Ｓ３３０の停止位置推定処理を行うことなく、そのままＳ２５０に移行する。
【００６４】
また、上記Ｓ２２０にて、エンジン回転数が所定値ＴＨ１以上ではないと判定した場合には、Ｓ３４０に移行する。よって、エンジン３の始動時にはＳ３４０に移行することとなる。
【００６５】
そして、Ｓ３４０では、クランク位置を特定済みか否かを判定し、クランク位置を特定済みであると判定した場合には（Ｓ３４０：ＹＥＳ）、そのままＳ２５０に移行するが、クランク位置を特定済みではないと判定した場合には（Ｓ３４０：ＮＯ）、Ｓ３５０に進む。
【００６６】
Ｓ３５０では、Ｓ２８０と同様に、エンジン３の冷却水温が所定値ＴＨ２以上であるか否かを判定し、冷却水温が所定値ＴＨ２以上であると肯定判定した場合には、Ｓ３６０に進む。
【００６７】
Ｓ３６０では、Ｓ２９０と同様に、バッテリ電圧ＶＢが所定値ＴＨ３以上であるか否かを判定し、バッテリ電圧ＶＢが所定値ＴＨ３以上であると肯定判定した場合には、Ｓ３７０に進む。
【００６８】
Ｓ３７０では、Ｓ３００と同様に、クランク信号と吸気カム信号と排気カム信号とが本エンジン制御装置１に正常に入力されているか否かを判定し、それら３つの信号が全て正常に入力されていると肯定判定した場合には、Ｓ３８０に進む。
【００６９】
Ｓ３８０では、メモリ６に停止位置推定値が記憶されているか否か（即ち、前回のエンジン３の停止時に、Ｓ３３０の停止位置推定処理が実行されたか否か）を判定し、停止位置推定値が記憶されていたら、Ｓ３９０に進む。
【００７０】
Ｓ３９０では、前述のスタータマスク期間が過ぎた（以下、「スタータマスクが解除された」という）か否かを判定し、スタータマスクが解除されていれば、Ｓ４００に進む。
Ｓ４００では、メモリ６に記憶されている停止位置推定値に基づいて現在のクランク位置（即ち、吸気カム信号又は排気カム信号に今回のエッジが発生したクランク位置）を特定し、その特定したクランク位置に該当する値をクランクカウンタにセットする。本実施形態では、停止位置推定値として、吸気カム信号又は排気カム信号に今回発生したエッジの１つ前のエッジの番号が記憶されているはずであるため、このＳ４００では、メモリ６に停止位置推定値として記憶されている番号の次の番号のエッジが吸気カム信号又は排気カム信号に発生するクランク位置が、現在のクランク位置であると特定し、そのクランク位置でクランクカウンタがとるべき値を、クランクカウンタにセットする。
【００７１】
例えば、クランク軸３３が、図２におけるＥ２０のエッジ位置からＥ１のエッジ位置までの間で停止していたとする。この場合、メモリ６には、エンジン３の停止時に、Ｓ３３０の処理により、停止位置推定値として、Ｅ２０が記憶されていることとなる。そして、次のエンジン３の始動時において、吸気カム信号にＥ１のエッジが発生する前にスタータマスクが解除されていたならば、Ｓ４００の処理により、クランクカウンタには、Ｅ２０の次であるＥ１のエッジが吸気カム信号に発生するクランク位置でクランクカウンタがとるべき値（＝６７）がセットされることとなり、これにより、始動時最初のクランク位置特定が完了する。
【００７２】
そして、このようなＳ４００の処理を行った後、Ｓ４２０に移行する。
また、上記Ｓ３９０にて、スタータマスクが解除されていないと判定した場合には、Ｓ４１０に移行して、メモリ６に記憶されている停止位置推定値としてのエッジ番号を、図２におけるＥ１〜Ｅ２０のうち、その停止位置推定値の次のエッジ番号に更新する。つまり、本実施形態では、スタータマスクが解除されてから吸気カム信号と排気カム信号との何れかに最初にエッジが発生したタイミングで、上記Ｓ４００により、そのエッジ発生タイミングでのクランク位置に応じた値がクランクカウンタにセットされるようにしており、このため、スタータマスクが未だ解除されていない場合のＳ４１０では、メモリ６に記憶されている停止位置推定値を、次のエッジ番号に進めておくようにしている。そして、その後、Ｓ４２０に移行する。
【００７３】
一方、上記Ｓ３５０〜Ｓ３８０の何れかで否定判定した場合、即ち、冷却水温が所定値ＴＨ２より低いと判定した場合（Ｓ３５０：ＮＯ）、又はバッテリ電圧ＶＢが所定値ＴＨ３より低いと判定した場合（Ｓ３６０：ＮＯ）、又はクランク信号と吸気カム信号と排気カム信号との少なくとも１つが本エンジン制御装置１に正常に入力されていないと判定した場合（Ｓ３７０：ＮＯ）、又はメモリ６に停止位置推定値が記憶されていないと判定した場合（Ｓ３８０：ＮＯ）には、そのままＳ４２０に移行する。
【００７４】
Ｓ４２０では、クランク位置を特定済みか否かを判定し、クランク位置を特定済みであると判定した場合には、そのままＳ２５０に移行するが、クランク位置を特定済みではないと判定した場合には、Ｓ４３０に進む。よって、上記Ｓ３４０でクランク位置を特定済みではないと判定しても、上記Ｓ４００の処理が実行されたならば、Ｓ４２０でクランク位置を特定済みであると判定されて、そのままＳ２５０へ移行することとなり、また、上記Ｓ４００の処理が実行されなければ、Ｓ４２０からＳ４３０へ進むこととなる。
【００７５】
Ｓ４３０では、カム信号による気筒判別処理を概ね以下の手順で行う。
まず、マイコン５は、吸気カム信号にエッジが発生してから次にエッジが発生するまでの１パルス幅期間中にクランク信号に発生した立ち下がりエッジの数を計数する計数処理を、クランク位置を特定できるまで別途実行している。
【００７６】
そこで、Ｓ４３０では、スタータマスクが解除されてから吸気カム信号に２回以上エッジが発生しており、且つ、今回エッジが発生したのが吸気カム信号であれば、上記計数処理により計数されている数（即ち、吸気カム信号に前回エッジが発生してから今回エッジが発生するまでの間にクランク信号に発生した立ち下がりエッジの数）Ｎｐを読み込む。そして更に、その数Ｎｐからクランク位置を特定して、該特定したクランク位置に応じた値をクランクカウンタにセットする。つまり、前述したように、吸気カム信号は、同じクランク角度分の幅を持つ部分が複数存在しないパターンになっているため、Ｎｐの値から、吸気カム信号に今回発生したエッジが図２におけるＥ１，Ｅ３，Ｅ５，Ｅ６，Ｅ９，Ｅ１２，Ｅ１３，Ｅ１５，Ｅ１６，Ｅ１９のうちの何れであるかを判別することができ、その判別したエッジが発生するクランク位置でクランクカウンタがとるべき値を、クランクカウンタにセットするのである。また、スタータマスクが解除されてから吸気カム信号に２回以上エッジが発生していない場合、或いは、今回エッジが発生したのが排気カム信号であった場合には、Ｓ４３０では何もしない。
【００７７】
そして、このようなＳ４３０の次に、前述したＳ２５０へ移行する。
以上のようなクランク信号割り込み処理（図３）とカム信号割り込み処理（図４）とが行われるエンジン制御装置１では、イグニッションスイッチ４５がオフされてエンジン３が停止し始め、エンジン回転数が所定値ＴＨ１より低くなると（Ｓ２７０：ＹＥＳ）、Ｓ３３０の停止位置推定処理が実行される。そして、エンジン３が停止した時点で、メモリ６には、停止位置推定値として、吸気カム信号と排気カム信号との何れかに最後に発生したエッジの番号が記憶されることとなる。
【００７８】
そして、次にイグニッションスイッチ４５がオンされて、エンジン３が始動された際には、図４のＳ３９０〜Ｓ４１０の処理により、スタータマスクが解除されてから吸気カム信号と排気カム信号との何れかに最初にエッジが発生したタイミングで、メモリ６内の停止位置推定値に基づき、そのエッジが発生したタイミングでのクランク位置に該当する値がクランクカウンタにセットされ、この時点で、クランク位置の特定が完了して、図３のＳ１８０によりエンジン３の制御が開始されることとなる。
【００７９】
このため、エンジン３の始動時において、スタータによるクランキングの開始とほぼ同時にクランク位置を特定してエンジン３の制御を開始することができる。尚、本実施形態では、実際には、図３のＳ１７０により、クランク位置が、第４気筒＃４のＢＴＤＣ６°ＣＡを基準にした３６°ＣＡ毎のクランク位置になったと判定された時点で、始動時最初の制御処理が実行されることとなる。
【００８０】
ところで、エンジン３が十分に暖気できていない場合には、エンジンオイルの粘度が上がるので、十分に暖気できている場合に比べるとエンジン３（詳しくは、クランク軸３３）が回転しにくくなる。そして、エンジン３が回転しにくくなると、図４におけるＳ３３０の停止位置推定処理によって停止位置を正しく推定することができなくなる可能性がある。
【００８１】
例えば、エンジン３が回転しにくくなると、吸気カム軸３７と排気カム軸４１とをクランク軸３３に連動して回転させるタイミングベルト（又はタイミングチェーン）のテンションが通常時と変わるため、吸気カム軸３７と排気カム軸４１とのクランク軸３３に対する回転位相差が変わり、延いては、停止位置を推定するために用いる吸気カム信号と排気カム信号の形状、エッジ間隔、エッジの発生タイミング及び発生順序などが想定したものとは異なってしまう可能性があるからである。また、クランク軸３３が停止寸前で何れかの気筒の上死点位置を越えられずにゆっくりと逆回転する可能性が高くなり、そのような逆回転を検知できない可能性もある。
【００８２】
そこで、本実施形態では、エンジン３が停止する際において、図４のＳ２８０により、エンジン３の冷却水温が所定値ＴＨ２より低いと判定した場合（Ｓ２８０：ＮＯ）には、十分に暖気ができていなくてエンジン３が回転しにくい状況であり、Ｓ３３０の停止位置推定処理によってクランク軸３３の停止位置を正しく推定することができない可能性があるとして、そのＳ３３０の停止位置推定処理が実行されるのを禁止（Ｓ３３０をスキップ）している。
【００８３】
また、バッテリ電圧ＶＢが低い場合には、停止位置を推定するために用いる信号を出力するクランク軸センサ３５、吸気カム軸センサ３９、及び排気カム軸センサ４３や、それらセンサ３５，３９，４３からの信号を波形整形する入力回路９の特性が変わる可能性があるため、その場合にも、Ｓ３３０の停止位置推定処理によってクランク軸３３の停止位置を正しく推定することができない可能性がある。更に、クランク信号と吸気カム信号と排気カム信号との少なくとも１つが、センサや配線の異常によって本エンジン制御装置１に正常に入力されなくなっている場合には、当然、Ｓ３３０の停止位置推定処理によってクランク軸３３の停止位置を正しく推定することができない。
【００８４】
そこで、本実施形態では、エンジン３が停止する際において、図４のＳ２９０により、バッテリ電圧ＶＢが所定値ＴＨ３より低いと判定した場合（Ｓ２９０：ＮＯ）、又は、クランク信号と吸気カム信号と排気カム信号との少なくとも１つが本エンジン制御装置１に正常に入力されていないと判定した場合（Ｓ３００：ＮＯ）にも、Ｓ３３０の停止位置推定処理が実行されるのを禁止している。
【００８５】
また更に、通常走行状態からエンジン停止に至る通常のエンジン停止ではなく、始動に失敗してすぐエンストした場合や、エンジン３が作動を開始する前にスタータスイッチをオフしてクランキングを止める、といった操作（いわゆる「ちょんがけ」）が行われた場合にも、エンジン３の回転の落ち方が通常とはかけ離れたものになることが多いため、Ｓ３３０の停止位置推定処理によってクランク軸３３の停止位置を正しく推定することができない可能性がある。
【００８６】
そこで更に、本実施形態では、エンジン３が停止する際において、図４のＳ３１０により、イグニッションスイッチ４５のオン中にエンジン回転数が所定値ＴＨ１以上になっていないと判定した場合（Ｓ３１０：ＮＯ）、又は、図４のＳ３２０により、始動後経過時間が所定値ＴＨ４以上でないと判定した場合（Ｓ３２０：ＮＯ）にも、Ｓ３３０の停止位置推定処理が実行されるのを禁止している。つまり、Ｓ３３０の停止位置推定処理を実行する条件として、エンジン回転数が一旦所定値ＴＨ１以上となり（換言すれば、エンジン３が一旦完全に始動し）、且つ、始動後経過時間が所定値ＴＨ４以上であった、という条件を追加することにより、始動に失敗してすぐエンストした場合や上記の「ちょんがけ」が行われた場合など、通常のエンジン停止時以外には、Ｓ３３０の停止位置推定処理が実行されないようにしている。尚、通常のエンジン停止時か否かを判別する方法としては、Ｓ３１０及びＳ３２０の判定に限らず、例えば、前回のイグニッションスイッチ４５のオン／オフ前後のエンジン状態など、過去のエンジン３の運転状態を記憶しておくことで、今回どうゆう状態から停止位置検出領域（即ち、エンジン回転数が所定値ＴＨ１以下の領域）に入ったのかを判定して、Ｓ３３０の停止位置推定処理を実行するか禁止するかを切り替えるようにしても良い。
【００８７】
そして、本実施形態のエンジン制御装置１において、エンジン３が停止する際にＳ３３０の停止位置推定処理の実行が禁止された場合、次のエンジン始動時には、図４のＳ３８０でメモリ６に停止位置推定値が記憶されていないと判定されて、Ｓ３９０〜Ｓ４１０の処理がスキップされるため、この場合には、図３のＳ１１０〜Ｓ１３０の処理と図４のＳ４３０の処理との何れかによってクランク位置の特定（換言すれば、クランクカウンタへの値のセット）が行われてから、図３のＳ１８０によりエンジン３の制御が開始されることとなる。
【００８８】
尚、本実施形態では、図３のＳ１１０〜Ｓ１３０の処理又は図４のＳ４３０の処理が、クランク位置特定手段に相当しており、図４のＳ３３０の処理が、停止位置推定手段に相当している。そして、図４のＳ２８０〜Ｓ３２０の処理が、判定手段に相当している。つまり、本実施形態では、Ｓ２８０〜Ｓ３２０の何れかで否定判定した場合が、特定条件が成立していると判定した場合に相当する。
【００８９】
このような本実施形態のエンジン制御装置１によれば、図４におけるＳ３３０の停止位置推定処理によってクランク軸３３の停止位置を正しく推定することができない可能性のある場合には、その停止位置推定処理の実行が禁止され、エンジン３の始動時に、誤った停止位置推定値に基づいて点火や燃料噴射の制御（始動制御）を行ってしまうことを防止することができる。よって、エンジン停止位置の推定誤りによって始動性又は始動時のエミッションが悪化するのを防止できる。
【００９０】
尚、前述した図３と図４の処理では、クランク信号と吸気カム信号と排気カム信号とのうち、クランク信号又は吸気カム信号が正常に入力されない異常が発生した場合、エンジン３の始動時に、図４におけるＳ３９０〜Ｓ４１０の処理がスキップされるだけでなく、図３のＳ１１０〜Ｓ１３０の処理と図４のＳ４３０の処理との何れによってもクランク位置を特定できないため、エンジン３を作動させることできなくなるが、誤った停止位置推定に基づいて点火や燃料噴射の制御を開始してしまうことによるエミッションの悪化は防止することができる。
【００９１】
また、クランク信号又は吸気カム信号が正常に入力されない異常が発生した場合に、クランク信号と吸気カム信号と排気カム信号とのうち、正常に入力される信号に基づきクランク位置を特定してエンジンを制御するためのフェイルセーフ処理を適宜実行するように構成すれば、エンジン３を作動させることも可能となる。
【００９２】
例えば、上記実施形態において、クランク信号が正常に入力されない異常が発生したことを検知した場合、吸気カム信号のみに基づいてクランク位置の特定とエンジン回転数の検出とを行ってエンジン３を制御するように構成することができる。
【００９３】
つまり、吸気カム信号にエッジが発生する毎に、その吸気カム信号のエッジ間隔を計測すると共に、その各エッジ間隔を比較検証することにより、特徴的な波形部分（ここでは例えば、図２における「９６°ＣＡ分：ハイ→１８°ＣＡ分：ロー→１２６°ＣＡ分：ハイ」の部分とする）を検知すれば、その「１２６°ＣＡ分：ハイ」の終了に該当するエッジ発生タイミングを、第４気筒＃４のＢＴＤＣ３３°ＣＡであると特定することができる。また、前述したように、吸気カム信号の各立ち下がりエッジは、各気筒のＢＴＤＣ３３°ＣＡのタイミングで生じるようになっており、その立ち下がりエッジの間隔は全て１４４°ＣＡであるため、その立ち下がりエッジの間隔を計測することでエンジン回転数や例えば１°ＣＡ分の時間を算出することができ、それらの情報から点火や燃料噴射のタイミングを設定して、点火及び燃料噴射を実施すれば良い。
【００９４】
また例えば、上記実施形態において、排気カム信号についても、吸気カム信号と同様に、クランク信号における欠歯部Ｋの終了タイミングでは、その各タイミング毎に交互に異なったレベルとなるようにしておけば、吸気カム信号が正常に入力されない異常が発生したことを検知した場合、図３のＳ１２０及びＳ１３０にて、吸気カム信号の代わりに、排気カム信号のレベルからクランク位置を特定し、クランクカウンタに、その特定したクランク位置に応じた値をセットするように構成することができる。そして、このように構成すれば、吸気カム信号が正常に入力されなくなっても、クランク信号に欠歯部Ｋが発生したことを検知したタイミングでクランク位置を特定し、エンジン３の制御を開始することができる。
【００９５】
一方、上記実施形態では、エンジン回転数が所定値ＴＨ１よりも低い場合にのみ（Ｓ２７０：ＹＥＳ）、Ｓ３３０の停止位置推定処理の実行を許可するようにしているため、マイコン５での処理負荷を不要に増加させることが無い。
【００９６】
また、上記実施形態において、図４におけるＳ４００とＳ４３０の処理は、クランク位置を既に特定できていれば実行しないが、図３におけるＳ１１０〜Ｓ１３０の処理（即ち、クランク信号の欠歯部Ｋを検出してクランク位置を特定する気筒判別処理）は、クランク位置を特定できた後も継続して行うようにしている。これは、クランク信号にノイズが乗るなどしてクランクカウンタの値がずれたとしても、クランク信号に欠歯部Ｋが発生したタイミングでクランクカウンタの値を正しい値に戻すことができるようにするためである。
【００９７】
また、上記実施形態では、エンジン３の始動時においても、図４のＳ３５０〜Ｓ３７０にて、エンジン停止時におけるＳ２８０〜Ｓ３００と全く同じ内容の判定を行うようにしている。つまり、エンジン３の始動時においても、判定手段が判定するのと同じ特定条件が成立しているか否かを判定する第２の判定手段としての処理をＳ３５０〜Ｓ３７０で行い、その条件が成立していたならば（Ｓ３５０〜Ｓ３７０の何れかでＮＯ）、たとえ停止位置推定値がメモリ６に記憶されていても、その停止位置推定値を用いてはエンジン３の制御を開始しない（詳しくは、その停止位置推定値に基づいてクランク位置を特定しない）ようにしている。これは、Ｓ３３０の停止位置推定処理で停止位置推定値が算出された際の条件と同じ条件下で、その停止位置推定値を用いるようにするためであり、このようにすることで、停止位置推定値を用いたクランク位置の特定精度を確保するようにしている。また、Ｓ３５０での所定値ＴＨ２は、Ｓ２８０での所定値ＴＨ２と異なる値にしても良く、同様に、Ｓ３６０での所定値ＴＨ３は、Ｓ２９０での所定値ＴＨ３と異なる値にしても良い。エンジン停止時とエンジン始動時では回転しやすさの条件が異なっていることも考えられるからである。一方、Ｓ３５０〜Ｓ３７０の処理は、Ｓ３３０の停止位置推定処理における停止位置の推定ロジックや、その停止位置推定処理で推定された停止位置をＳ４００でどの様に使うかのクランク位置特定ロジックによっては、削除することも可能である。
【００９８】
以上、本発明の一実施形態について説明したが、本発明はこうした実施形態に何等限定されるものではなく、本発明の要旨を逸脱しない範囲において、種々なる態様で実施し得ることは勿論である。
【００９９】
例えば、上記実施形態では、図４のＳ２８０にて、エンジン３が回転しにくい状況であることを、「冷却水温が所定値ＴＨ２より低い」ということで判定していたが、エンジン３が回転しにくい状況であることは、「外気温が所定値より低い」とか、「エンジン３の吸気温が所定値より低い」とか、「燃料温度が所定値より低い」とか、「オイルコントロールバルブ５３，５７が制御するオイル（以下、ＯＣＶオイルという）の温度が所定値より低い」とか、「エンジンオイルの温度が所定値より低い」とか、「エンジンオイルの粘度又は量が所定値以上」とか、「ＯＣＶオイルの粘度が所定値以上」といった内容を判定するようにしても良い。
【０１００】
また、図４のＳ２９０で判定するバッテリ電圧ＶＢの閾値である上記所定値ＴＨ３は、固定値であっても良いが、その時にバッテリ電圧ＶＢを消費している負荷状況に応じて、負荷が大きい場合ほど大きい値となるように設定するように構成しても良い。この場合、バッテリ電圧ＶＢの値と負荷と閾値との関係を定めたデータマップを用意しておき、そのマップに現在の電圧ＶＢと負荷とを当てはめて、閾値である所定値ＴＨ３を決定するように構成することができる。
【０１０１】
また更に、上記実施形態では述べなかったが、もし、図４のＳ２７０からＳ２８０へ移行する状況下で可変バルブタイミング機構５１，５５が作動される可能性があるのであれば、吸気カム信号と排気カム信号とにおけるエッジの発生タイミング及び発生順序などが想定したものから変わってしまい、Ｓ３３０の停止位置推定処理で正しい停止位置推定値を求めることができない可能性が発生する。よって、その場合には、可変バルブタイミング機構５１，５５の作動状況を判定して、例えば吸気カム軸３７又は排気カム軸４１のクランク軸３３に対する回転位相差が所定値以上ずらされている場合には、Ｓ３３０の停止位置推定処理が実行されるのを禁止する、というように構成しても良い。
【０１０２】
また例えば、図４のＳ３３０では、吸気カム信号と排気カム信号との何れかに今回発生したと判別したエッジの次に発生するエッジの番号を、停止位置推定値としてメモリ６に記憶するようにしても良い。この場合、Ｓ４００では、メモリ６に記憶されている番号のエッジが吸気カム信号又は排気カム信号に発生するクランク位置でクランクカウンタがとるべき値を、クランクカウンタにセットすれば良い。
【０１０３】
また更に、図４のＳ３３０では、吸気カム信号と排気カム信号との何れかに今回発生したエッジが図２のＥ１〜Ｅ２０の何れであるかを、吸気カム信号と排気カム信号とのそれまでの入力状態（レベル変化パターンやエッジ間隔など）からのみ判別するように構成することも可能である。この場合、停止位置の推定を、クランク信号を用いずに２つのカム信号に基づいてのみ行うこととなる。
【０１０４】
一方、停止位置の推定をクランク信号のみを用いて行うように構成しても良い。
例えば図３のクランク割り込み処理でＳ１５０とＳ１６０との何れかからＳ１７０へ移行するまでの間に、図４のＳ２１０及び２７０〜Ｓ３２０と同じ判定を行うと共に、そのＳ２１０と同じ判定でイグニッションスイッチ４５がオフと判定し、且つ、その２７０〜Ｓ３２０と同じ判定で全て肯定判定した場合に、以下のような停止位置推定処理を行う。即ち、この場合の停止位置推定処理としては、基本的には、その時点でのクランクカウンタの値を停止位置推定値としてメモリ６に記憶するものであれば良く、更に例えば、クランク信号に欠歯部Ｋが発生するクランク位置でないのにクランク信号のパルス間隔が前回値の所定数倍以上になった、という状態を検知した場合に、クランク軸３３が逆回転したと判断して、クランクカウンタの値、及び停止位置推定値としてメモリ６に記憶する値を補正する（戻す）処理を行うことで、停止位置の推定精度を上げることができる。尚、この場合、エンジン３の始動時においては、吸気カム信号と排気カム信号との何れかにエッジが発生した時に、現在のクランク位置が、図２におけるＥ１〜Ｅ２０の各エッジのうち、メモリ６に記憶されている停止位置推定値が表すクランク位置の直後のエッジが発生したクランク位置であると特定することができる。
【０１０５】
また、上記実施形態では、クランク信号にノイズが乗ると予想されるスタータマスク期間が過ぎるまではエンジンの制御を開始しないようにしていたが、そのスタータマスク期間中は時間タイマで燃料噴射などを実施するように構成すれば、スタータマスク期間中でも、吸気カム信号又は排気カム信号にエッジが発生した時点からエンジンの制御を始動することができる。
【０１０６】
また、上記実施形態のエンジン制御装置１は、カム軸回転信号として、吸気カム信号と排気カム信号との２つが入力されるものであったが、本発明は、クランク信号の他にカム軸回転信号が１つだけ入力されるものであっても適用することができる。
【０１０７】
また、上記実施形態では、クランク軸３３のロータ６９に欠歯（歯欠損部）を設けることで基準位置を検出しているが、基準位置を検出するためのロータ６９の構成としては、そのような欠歯を設ける構成に限定されるものではなく、他の歯形状構成（例えば、いわゆる足し歯や余分歯を設ける構成、欠歯の逆で１箇所だけ突起部（歯）が他より長い等の不連続部を設ける構成など）でも良い。
【０１０８】
また、本発明は、クランク軸センサを備えずに、カム軸センサからの回転信号のみを用いてクランク位置の特定とエンジン回転数の検出とを行うクランク軸センサレスのエンジン制御装置にも同様に適用することができる。
【図面の簡単な説明】
【０１０９】
【図１】実施形態のエンジン制御装置の構成図である。
【図２】クランク信号と吸気カム信号と排気カム信号とクランクカウンタとの関係を表すタイムチャートである。
【図３】クランク信号割り込み処理を表すフローチャートである。
【図４】カム信号割り込み処理を表すフローチャートである。
【符号の説明】
【０１１０】
１…エンジン制御装置、３…エンジン、５…マイコン、６…メモリ、７…駆動回路、９…入力回路、１１…吸気管、１３…吸入空気量センサ、１５…スロットル弁、１７…スロットル開度センサ、１９…吸気管圧力センサ、２１…アクセルペダル、２３…ペダル位置センサ、２５…水温センサ、２７…ノックセンサ、２９…排気管、３１…酸素濃度センサ、３３…クランク軸、３５…クランク軸センサ、３７…吸気カム軸、３９…吸気カム軸センサ、４１…排気カム軸、４３…排気カム軸センサ、４５…イグニッションスイッチ、４９…スロットルモータ、５１…吸気側可変バルブタイミング機構、５３…吸気側オイルコントロールバルブ、５５…排気側可変バルブタイミング機構、５７…排気側オイルコントロールバルブ、５９…点火コイル、６１…インジェクタ、６３…メインリレー、６５…電源ライン、６７…車載バッテリ、６９…ロータ、７１…歯、Ｋ…欠歯部
【図１】
2005351209.tif 000003
【図２】
2005351209.tif 000004
【図３】
2005351209.tif 000005
【図４】
2005351209.tif 000006