(57)【要約】【課題】  クランクカウンタを正確にカウントアップさせる処理や構成を簡素化する。【解決手段】  クランク軸の回転に対応した所定角度間隔毎のパルス列のクランク信号から、周期が該クランク信号の周期の「１／逓倍数」である逓倍クロックを生成し、該逓倍クロックにより、クランク軸の回転角度を表すクランクカウンタをカウントアップさせるエンジンＥＣＵにおいて、クランクカウンタは、上位カウンタ１１ａと下位カウンタ１１ｂからなっている。そして、上位カウンタ１１ａは、クランク信号の有効エッジでカウントアップされ、下位カウンタ１１ｂは、上記逓倍クロックでカウントアップされると共に、クランク信号の有効エッジでクリアされる。この構成によれば、加減速でクランク信号のパルス間隔が変化しても、そのパルス間隔の切れ目である有効エッジタイミングでクランクカウンタのカウント値は自然に、そのタイミングでとるべき正しい値となる。【選択図】  図４
2005133614.tif 000002
【特許請求の範囲】
【請求項１】
エンジンのクランク軸の回転に対応した所定角度間隔毎のパルス列のクランク信号を入力し、そのクランク信号から周期が該クランク信号の周期の「１／逓倍数」である逓倍クロックを生成して、該逓倍クロックにより前記クランク軸の回転角度を表すクランクカウンタをカウントアップさせるエンジン制御装置において、
前記クランクカウンタは、上位カウンタと下位カウンタとからなり、
前記上位カウンタは、前記クランク信号の有効エッジでカウントアップされ、
前記下位カウンタは、前記逓倍クロックでカウントアップされると共に、前記クランク信号の有効エッジでクリアされるように構成されていること、
を特徴とするエンジン制御装置。
【請求項２】
請求項１に記載のエンジン制御装置において、
前記下位カウンタのビット数は、前記逓倍数が２のｎ乗（ｎは正の整数）であるとすると、ｎビットであること、
を特徴とするエンジン制御装置。
【請求項３】
請求項１に記載のエンジン制御装置において、
前記下位カウンタは、前記逓倍数に応じて、該逓倍数が２のｎ乗（ｎは正の整数）であるとすると、当該下位カウンタの最上位ビットから数えてｎビット目が、前記逓倍クロックに応じたカウントアップ動作の最下位ビットとなるように構成されていること、
を特徴とするエンジン制御装置。
【請求項４】
請求項１ないし請求項３の何れか１項に記載のエンジン制御装置において、
前記上位カウンタと前記下位カウンタとのうち、前記上位カウンタのみカウント値を補正するように構成されていること、
を特徴とするエンジン制御装置。
【請求項５】
請求項１ないし請求項４の何れか１項に記載のエンジン制御装置において、
前記上位カウンタは、そのカウント値が予め設定された上限値になると次に０へ戻るように構成されていること、
を特徴とするエンジン制御装置。
【請求項６】
請求項１ないし請求項５の何れか１項に記載のエンジン制御装置において、
前記クランク信号の有効エッジ同士の間隔であるパルス間隔のうち、前記所定角度間隔毎のパルスが所定数だけ故意に抜かれたパルス間隔である欠歯部を特定する欠歯部特定手段を備え、
前記欠歯部特定手段により前記欠歯部であると特定されているパルス間隔の期間では、前記下位カウンタのラップラウンドが許可されて、前記上位カウンタが前記下位カウンタからのキャリーによってカウントアップされること、
を特徴とするエンジン制御装置。
【請求項７】
請求項６に記載のエンジン制御装置において、
前記欠歯部特定手段により前記欠歯部であると特定されているパルス間隔以外の期間では、前記下位カウンタのラップラウンドが禁止されて、該下位カウンタのカウント値が最大値で止まるようになっていること、
を特徴とするエンジン制御装置。
【請求項８】
請求項６又は請求項７に記載のエンジン制御装置において、
キャリー許可後上位設定レジスタを備え、
前記欠歯部特定手段により前記欠歯部であると特定されているパルス間隔の終了タイミングにて、前記上位カウンタのカウント値を前記キャリー許可後上位設定レジスタの値に変更すること、
を特徴とするエンジン制御装置。
【請求項９】
請求項６ないし請求項８の何れか１項に記載のエンジン制御装置において、
前記欠歯部特定手段は、前記欠歯部であると特定しているパルス間隔の期間だけ、キャリー許可フラグをオンすること、
を特徴とするエンジン制御装置。
【請求項１０】
請求項９に記載のエンジン制御装置において、
前記クランク信号には、前記欠歯部が１つだけ発生する場合と２つ連続して発生する場合とがあり、
前記欠歯部特定手段は、２つ連続して発生する欠歯部については、前記キャリー許可フラグをオンしてから前記クランク信号の２回目の有効エッジで該キャリー許可フラグをオフさせること、
を特徴とするエンジン制御装置。
【請求項１１】
請求項１０に記載のエンジン制御装置において、
前記欠歯部特定手段は、
前記クランク信号の今回のパルス間隔が前記欠歯部であることを検知すると、その今回のパルス間隔の計測値Ｔａと次のパルス間隔の計測値Ｔｂとを周期レジスタにそれぞれ格納し、
更に、前記周期レジスタに格納された計測値Ｔａ，Ｔｂを用いて「Ｔｂ≧Ｔａ×Ｃ（但し、Ｃは定数）」の関係が成立しているか否かを判定し、その判定結果により、次に欠歯部が２つ連続して発生するか否かを判別すること、
を特徴とするエンジン制御装置。
【請求項１２】
請求項１ないし請求項１１の何れか１項に記載のエンジン制御装置において、
前記逓倍クロックを、前記クランク信号のＮ個（Ｎは２以上の整数）の周期を使用して生成するように構成されていること、
を特徴とするエンジン制御装置。
【請求項１３】
請求項１２に記載のエンジン制御装置において、
前記Ｎ個の周期は、前記クランク信号の最新のＮ個の周期であること、
を特徴とするエンジン制御装置。
【請求項１４】
請求項１ないし請求項１３の何れか１項に記載のエンジン制御装置において、
前記クランク信号の有効エッジ同士の間隔であるパルス間隔のうち、前記所定角度間隔毎のパルスが所定数だけ故意に抜かれたパルス間隔である欠歯部が発生した直後では、前記欠歯部が前記パルスをＭ個（Ｍは正の整数）抜いたものであるとすると、前記逓倍クロックの周期を、前記欠歯部のパルス間隔Ｔｋを用いて「Ｔｋ／（Ｍ＋１）／逓倍数」の値にすること、
を特徴とするエンジン制御装置。
【請求項１５】
請求項１ないし請求項１４の何れか１項に記載のエンジン制御装置において、
制御信号の出力開始タイミングを示す値がセットされるオンタイミング設定レジスタと、
前記制御信号の出力停止タイミングを示す値がセットされるオフタイミング設定レジスタと、
前記制御信号の出力を強制的に停止するタイミングを示す値がセットされる出力ガードタイミング設定レジスタと、
一定時間毎にアップカウントする出力ガード用アップカウンタとを備え、
前記クランクカウンタのカウント値が前記オンタイミング設定レジスタの値以上になると前記制御信号の出力を開始し、前記クランクカウンタのカウント値が前記オフタイミング設定レジスタの値以上になると前記制御信号の出力を停止し、更に、前記出力ガード用アップカウンタのカウント値が前記出力ガードタイミング設定レジスタの値と一致すると、前記クランクカウンタのカウント値に拘わらず前記制御信号の出力を強制的に停止するように構成されていること、
を特徴とするエンジン制御装置。
【請求項１６】
請求項１ないし請求項１５の何れか１項に記載のエンジン制御装置において、
指令信号の出力開始タイミングを示す値がセットされる第１設定レジスタと、
前記指令信号の出力停止タイミングを示す値がセットされる第２設定レジスタと、
一定時間毎にアップカウントする出力停止用アップカウンタとを備え、
前記クランクカウンタのカウント値が前記第１設定レジスタの値以上になると前記指令信号の出力を開始し、前記出力停止用アップカウンタのカウント値が前記第２設定レジスタの値と一致すると、前記指令信号の出力を停止するように構成されていること、
を特徴とするエンジン制御装置。
【請求項１７】
請求項１ないし請求項１６の何れか１項に記載のエンジン制御装置において、
基準位置信号の出力タイミングを示す値がセットされる基準設定レジスタを備え、
前記上位カウンタのカウント値又は前記上位カウンタを分周した分周カウンタのカウント値が、前記基準設定レジスタの値と一致している間、前記基準位置信号をハイレベルとローレベルとの何れかである特定レベルで出力し、前記上位カウンタのカウント値又は前記分周カウンタのカウント値が、前記基準設定レジスタの値と一致していない場合には、前記基準位置信号を前記特定レベルとは反対のレベルで出力すること、
を特徴とするエンジン制御装置。
【請求項１８】
請求項１ないし請求項１７の何れか１項に記載のエンジン制御装置において、
出力信号の反転タイミングを示す値がそれぞれセットされる第１のタイミング設定レジスタと第２のタイミング設定レジスタとを備え、
前記上位カウンタのカウント値又は前記上位カウンタを分周した分周カウンタのカウント値が、前記第１のタイミング設定レジスタの値と一致したら、前記出力信号の出力レベルをハイレベルとローレベルとの何れかである特定レベルにし、前記上位カウンタのカウント値又は前記分周カウンタのカウント値が、前記第２のタイミング設定レジスタの値と一致したら、前記出力信号の出力レベルを前記特定レベルとは反対のレベルにすること、
を特徴とするエンジン制御装置。
【請求項１９】
請求項１ないし請求項１８の何れか１項に記載のエンジン制御装置において、
ＡＤ変換器と、
該ＡＤ変換器の起動タイミングを示す値がセットされるＡＤ設定レジスタとを備え、
前記クランクカウンタのカウント値が前記ＡＤ設定レジスタの値に達すると、前記ＡＤ変換器が起動されるように構成されていること、
を特徴とするエンジン制御装置。
【請求項２０】
請求項１ないし請求項１９の何れか１項に記載のエンジン制御装置において、
前記クランク信号の有効エッジ同士の間隔であるパルス間隔を計測し、そのパルス間隔が、前記所定角度間隔毎のパルスが所定数だけ故意に抜かれたパルス間隔である欠歯部であるか否かを判定する欠歯判定手段を備えると共に、
前記欠歯判定手段により前記欠歯部であると判定されたパルス間隔の終了タイミングでクリアされ、以降、前記クランク信号の有効エッジでカウントアップされる第２カウンタを備えていること、
を特徴とするエンジン制御装置。
【請求項２１】
請求項２０に記載のエンジン制御装置において、
補正位置設定レジスタと、補正値設定レジスタとを備え、
前記第２カウンタのカウント値が前記補正位置設定レジスタの値と一致すると、前記上位カウンタのカウント値を前記補正値設定レジスタの値に変更すること、
を特徴とするエンジン制御装置。
【請求項２２】
請求項２０又は請求項２１に記載のエンジン制御装置において、
前記第２カウンタはラップラウンドせず、該第２カウンタのカウント値は所定の最大値で止まるようになっていること、
を特徴とするエンジン制御装置。
【請求項２３】
請求項２０ないし請求項２２の何れか１項に記載のエンジン制御装置において、
当該装置には、前記エンジンのカム軸の回転位置が特定位置のときにカム軸センサから発生される気筒判別用信号が入力されると共に、
前記気筒判別用信号の発生タイミングで前記第２カウンタのカウント値を記憶するキャプチャレジスタを備え、
前記キャプチャレジスタの値から、前記気筒判別用信号が気筒判別区間内に発生したか否かを判定すること、
を特徴とするエンジン制御装置。
【請求項２４】
請求項２０ないし請求項２３の何れか１項に記載のエンジン制御装置において、
前記欠歯判定手段は、
今回計測中の前記クランク信号のパルス間隔が、前回計測したパルス間隔を所定の判定比倍した長さ以上であれば、そのパルス間隔が前記欠歯部であると判定すると共に、
前記判定比として使用される値がそれぞれ格納される第１判定比設定レジスタと第２判定比設定レジスタとを備え、
更に、前記第２カウンタのカウント値により、前記クランク信号の欠歯部付近の期間が、前記第１判定比設定レジスタの値が前記判定比として使用される第１期間として設定され、それ以外の期間が、前記第２判定比設定レジスタの値が前記判定比として使用される第２期間として設定されるように構成されていると共に、
前記第２判定比設定レジスタには、前記第１判定比設定レジスタに格納される値よりも大きい値が格納されていること、
を特徴とするエンジン制御装置。
【請求項２５】
請求項２４に記載のエンジン制御装置において、
前記欠歯判定手段は、
前記第２期間の開始タイミングを示す値がセットされる開始位置指定レジスタと、
前記第２期間の開始タイミングから該第２期間が終了するまでの前記クランク信号のパルス数を示す値がセットされるオフセット指定レジスタとを備え、
前記第２カウンタのカウント値が前記開始位置指定レジスタの値と一致した時点から前記クランク信号の有効エッジが前記オフセット指定レジスタの値だけ発生するまでの期間が、前記第２期間となり、それ以外の期間が前記第１期間となるように構成されていること、
を特徴とするエンジン制御装置。
【請求項２６】
請求項２４又は請求項２５に記載のエンジン制御装置において、
前記第２期間では、前記第２判定比設定レジスタの値が前記判定比として使用されることに代えて、前記欠歯判定手段の判定動作が禁止されること、
を特徴とするエンジン制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、エンジン制御装置に関するものである。
【背景技術】
【０００２】
従来より、エンジン制御装置では、クランク軸センサ，水温センサ，空気温センサ等の各種センサからの信号を入力して最適な燃料噴射制御や点火時期制御を行っている。
ここで、クランク軸センサからの信号であるクランク信号は、エンジンのクランク軸の回転に対応した所定角度間隔毎のパルス列をなしている。
【０００３】
そして、エンジン制御装置としては、そのクランク信号を逓倍した逓倍クロック（詳しくは、周期がクランク信号の周期の逓倍数分の１であるクロック）を生成すると共に、その逓倍クロックにより、クランク軸の回転角度（いわゆるクランク角）を表すクランクカウンタをカウントアップさせ、そのクランクカウンタの値に基づきエンジン回転に同期した制御を行うようにしたものがある（例えば、特許文献１参照）。このようにすることで、元のクランク信号よりも細かい分解能でクランク角を把握できるようにしているのである。
【０００４】
そして更に、この種のエンジン制御装置では、クランク信号の有効エッジ毎に、次の有効エッジのタイミングでクランクカウンタがとるべき値をガード値として設定し、エンジンが急に加減速した場合でも、クランク信号の次の有効エッジでクランクカウンタの値が正しい値になるようにしている。
【０００５】
例えば、クランク信号を３２逓倍した逓倍クロックでクランクカウンタをカウントアップする場合（逓倍数が３２である場合）を例に挙げると、図２８において、クランク信号の今回のパルス間隔「Ｔｎ」では、前回のパルス間隔「Ｔｎ-1」を３２分の１にした時間毎にクランクカウンタが１ずつカウントアップされることとなる。
【０００６】
よって、エンジン回転が一定ならば、クランク信号のどのパルス間でも、クランクカウンタは一定の時間間隔でカウントアップされることとなる。例えば、クランク信号の有効エッジ（この例では立ち上がりエッジ）が１０°ＣＡ毎に発生する場合、３２逓倍しているため、クランクカウンタは０．３１２５°ＣＡを分解能（ＬＳＢ）としてカウントアップされることになる。尚、「ＣＡ」とは、クランク角（クランクアングル）を意味している。
【０００７】
ここで、エンジンが急に加速してクランク信号のパルス間隔が短くなった場合には、クランクカウンタが３２カウントする前（カウント値が３２だけ増加する前）に、クランク信号の次の有効エッジが発生してしまうため、何も処置をしないとカウント値が小さめにずれてしまう。また、エンジンが急に減速してクランク信号のパルス間隔が長くなった場合においても、何ら処置をしないと、カウント値が大きめにずれてしまう。
【０００８】
そこで、従来のエンジン制御装置では、図２９に示す如く、クランク信号の有効エッジ毎に、クランクカウンタのカウント値に対するガード値を設定し、「Ｔｎ」の期間のような急加速時には、次の有効エッジタイミング（「Ｔｎ+1」の開始タイミング）で、クランクカウンタを逓倍クロックよりも短い周期の内部クロックである最速クロックで強制的にカウントアップさせることにより、そのクランクカウンタの値を正しいガード値に到達させるようにしている。また、「Ｔｎ-1」の期間のような急減速時には、クランクカウンタが３２カウントしてガード値に到達すると、クランク信号に次の有効エッジが発生するまでカウントアップを止めるようにしている。
【特許文献１】特開２００１−２７１７００号公報
【発明の開示】
【発明が解決しようとする課題】
【０００９】
上記従来のエンジン制御装置では、エンジンの加減速によってクランクカウンタのカウント値がずれないようにするために、クランク信号の有効エッジ毎のタイミングでガード値を設定する必要があるため、クランクカウンタを正確にカウントアップさせるための処理や構成が複雑になってしまうという問題があった。特に、ガード値をソフト処理で設定するようにした場合には、クランク信号の有効エッジ毎に割込み処理を起動してガード値を設定することとなるため、その割込み処理と他の処理とを確実に行うために、処理速度の早い高性能なＣＰＵが必要となってしまう。
【００１０】
本発明は、こうした問題に鑑みなされたものであり、エンジン制御装置において、クランクカウンタを正確にカウントアップさせるための処理や構成を簡素化することを目的としている。
【課題を解決するための手段】
【００１１】
上記目的を達成するためになされた請求項１に記載のエンジン制御装置は、エンジンのクランク軸の回転に対応した所定角度間隔毎のパルス列のクランク信号を入力し、そのクランク信号から周期が該クランク信号の周期の「１／逓倍数」である逓倍クロックを生成して、該逓倍クロックによりクランク軸の回転角度を表すクランクカウンタをカウントアップさせるが、特に、クランクカウンタは、上位カウンタと下位カウンタとからなっている。
【００１２】
そして、このエンジン制御装置において、上位カウンタは、クランク信号の有効エッジでカウントアップされ、下位カウンタは、逓倍クロックでカウントアップされると共に、クランク信号の有効エッジでクリアされるようになっている。
【００１３】
このような請求項１のエンジン制御装置によれば、エンジンの加減速によってクランク信号の有効エッジ同士の間隔であるパルス間隔が変化しても、そのパルス間隔の切れ目である有効エッジタイミングでクランクカウンタのカウント値は正しい値（そのタイミングでクランクカウンタがとるべき値）となるため、従来装置のようにクランク信号の有効エッジ毎のタイミングでガード値を設定する必要がなくなる。よって、クランクカウンタを正確にカウントアップさせるための処理や構成を簡素化することができる。
【００１４】
尚、上位カウンタと下位カウンタとの連続性を確保するためには、下位カウンタのビット数は、請求項２に記載の如く、逓倍数が２のｎ乗（ｎは正の整数）であるとすると、ｎビットに設定しておけば良い。つまり、このように設定すれば、上位カウンタのビット数をｍとすると、クランクカウンタは合計で「ｍ＋ｎ」ビットのカウンタとなる。
【００１５】
次に、請求項３に記載のエンジン制御装置では、請求項１のエンジン制御装置において、下位カウンタは、逓倍数に応じて、該逓倍数が２のｎ乗（ｎは正の整数）であるとすると、当該下位カウンタの最上位ビットから数えてｎビット目が、逓倍クロックに応じたカウントアップ動作の最下位ビットとなるように構成されている。
【００１６】
尚、「下位カウンタの最上位ビットから数えてｎビット目が逓倍クロックに応じたカウントアップ動作の最下位ビットとなる」とは、下位カウンタにおいて、そのｎビット目よりも下位のビットは変化せずに、そのｎビット目と該ｎビット目よりも上位のビットからなる部分が、逓倍クロックに応じてカウントアップ動作することを意味している。また、下位カウンタの最上位ビットから数えてｎビット目とは、最上位ビットを１ビット目として数えたものである。一方、以下の説明において、特に「最上位ビットから数えて」と明記していなければ、ビットの順番位置は、最下位ビットから数えたもの（即ち、最下位ビットを１ビット目としたもの）である。
【００１７】
このような請求項３のエンジン制御装置によれば、動作中に逓倍数が変更されても、クランクカウンタのＬＳＢ（下位カウンタの１ビット目）の重みは常に同じとなり、上位カウンタと下位カウンタとの連続性、及びクランクカウンタのカウント値の連続性を確保することができる。
【００１８】
次に、請求項４に記載のエンジン制御装置は、請求項１〜３のエンジン制御装置において、クランクカウンタを成す上位カウンタと下位カウンタとのうち、上位カウンタのみカウント値を補正するように構成されている。尚、補正とは、カウント値を正しい値に変更する（書き換える）動作のことである。
【００１９】
このような請求項４のエンジン制御装置によれば、クランクカウンタのカウント値を補正しようとしてから、実際に補正する（書き換える）までに遅れがあっても、その遅れの影響が少なくて済む。
【００２０】
例えば、上位カウンタと下位カウンタとの両方の値を補正するように構成すると、その補正実施タイミングがずれたならば、クランクカウンタの値は次のクランク信号の有効エッジタイミングまで正常値に戻らない。これに対して、上位カウンタのみ補正するように構成すれば、補正実施タイミングが遅れて上位カウンタをクランク信号のパルス間隔中の何れかのタイミングで補正したとしても、もともと下位カウンタはクランク信号の有効エッジ毎にクリアされて正常値化されているため、上位カウンタの補正を行った時点でクランクカウンタのカウント値は正常値となり、補正実施遅れの影響を少なくすることができる。
【００２１】
次に、請求項５に記載のエンジン制御装置では、請求項１〜４のエンジン制御装置において、上位カウンタは、そのカウント値が予め設定された上限値になると次に０へ戻るように構成されている。
【００２２】
このような請求項５のエンジン制御装置によれば、クランクカウンタを、ある値でラップラウンドさせることができる。例えば、４サイクルエンジンの場合、上記上限値をエンジンの１行程である７２０°ＣＡ分に相当する値に設定すれば、クランクカウンタを７２０°ＣＡ毎にラップラウンドさせることができる。
【００２３】
ところで、一般に、クランク信号には、有効エッジ同士の間隔であるパルス間隔のうち、所定角度間隔毎のパルスが所定数Ｍ（Ｍは正の整数）だけ故意に抜かれたパルス間隔である欠歯部が発生するようになっている。
【００２４】
そこで、請求項６に記載のエンジン制御装置では、その欠歯部を特定する欠歯部特定手段を備え、該欠歯部特定手段によって欠歯部であると特定されているパルス間隔の期間では、下位カウンタのラップラウンドが許可されて、上位カウンタが下位カウンタからのキャリー（即ち、下位カウンタからの桁上げ）によってカウントアップされるようにしている。そして、このような請求項６のエンジン制御装置によれば、クランク信号の欠歯部の期間中でも、クランクカウンタをカウントアップさせることができる。
【００２５】
尚、この請求項６のエンジン制御装置において、勿論、欠歯部特定手段によって欠歯部であると特定されているパルス間隔以外の期間では、請求項７に記載の如く、下位カウンタのラップラウンドが禁止されて、その下位カウンタのカウント値が最大値で止まるようになっていれば良い。この構成によれば、欠歯部以外の期間において、エンジンの減速に伴いクランク信号の今回のパルス間隔が前回のパルス間隔より長くなっても、下位カウンタはラップラウンドしないため、クランクカウンタのカウント値を、次のクランク信号の有効エッジタイミングまで、その有効エッジタイミングでとるべき値の直前の値で止めておくことができる。つまり、欠歯部の期間についてのみ、下位カウンタのラップラウンドが許可されて、上位カウンタが下位カウンタからのキャリーによってカウントアップされるように構成すれば良い。
【００２６】
次に、請求項８に記載のエンジン制御装置は、請求項６，７のエンジン制御装置において、キャリー許可後上位設定レジスタを備えており、欠歯部特定手段によって欠歯部であると特定されているパルス間隔の終了タイミング（つまり、そのパルス間隔の終わりに該当する有効エッジのタイミングであり、換言すれば、次のパルス間隔の開始に該当する有効エッジのタイミング）にて、上位カウンタのカウント値を、そのキャリー許可後上位設定レジスタの値に変更する（書き換える）ようになっている。
【００２７】
このような請求項８のエンジン制御装置によれば、クランク信号の欠歯部の期間中にエンジンが加速して、上位カウンタが下位カウンタからのキャリーによりＭ回（Ｍは、欠歯部で抜かれているパルス数）だけカウントアップされる前に、次のクランク信号の有効エッジが発生した場合でも、その上位カウンタのカウント値を正しい値に補正することができる。つまり、欠歯部の終了タイミングで遷移すべき上位カウンタの値を、キャリー許可後上位設定レジスタにセットしておけば良いのである。
【００２８】
次に、請求項９に記載のエンジン制御装置では、請求項６〜８のエンジン制御装置において、欠歯部特定手段は、欠歯部であると特定しているパルス間隔の期間だけ、キャリー許可フラグをオンするようになっている。
【００２９】
そして、このようにキャリー許可フラグをオンするようにすれば、請求項６のエンジン制御装置については、そのキャリー許可フラグがオンされている期間だけ、下位カウンタのラップラウンドが許可されて、上位カウンタが下位カウンタからのキャリーによりカウントアップされるように構成することができ、請求項７のエンジン制御装置については、キャリー許可フラグがオンされていない（オフされている）期間では、下位カウンタのラップラウンドが禁止されて、その下位カウンタのカウント値が最大値で止まるように構成することができる。また、請求項８のエンジン制御装置については、キャリー許可フラグがオンからオフに転じる時（例えば、キャリー許可フラグがオンで且つクランク信号に有効エッジが発生した時）に、上位カウンタのカウント値をキャリー許可後上位設定レジスタの値に変更するように構成することができる。
【００３０】
ところで、クランク軸センサの中には、例えば特許第３３７９２６１号公報に記載されているように、あるクランク角ではクランク信号に欠歯部が１つだけ発生し、他のクランク角ではクランク信号に欠歯部が２つ連続して発生する、といったタイプのものもある。
【００３１】
そこで、請求項９のエンジン制御装置において、クランク信号に欠歯部が１つだけ発生する場合と２つ連続して発生する場合とがあるのであれば、請求項１０に記載の如く、欠歯部特定手段は、２つ連続して発生する欠歯部については、キャリー許可フラグをオンしてからクランク信号の２回目の有効エッジで該キャリー許可フラグをオフさせるように構成すれば良い。このように構成すれば、キャリー許可フラグを２つ連続の欠歯部の期間に渡り継続してオンさせることができる。
【００３２】
また、この場合、欠歯部特定手段は、少なくともキャリー許可フラグをオンさせる時点（つまり、欠歯部の開始タイミング）において、今回の欠歯部が１つ単独のもの（以下、単一欠歯という）か２つ連続のもの（以下、連続欠歯という）かを認識している必要がある。
【００３３】
そこで、請求項１１に記載のエンジン制御装置では、請求項１０のエンジン制御装置において、欠歯部特定手段は、クランク信号の今回のパルス間隔が欠歯部であることを検知すると、その今回のパルス間隔の計測値Ｔａと次のパルス間隔の計測値Ｔｂとを周期レジスタにそれぞれ格納するようになっている。そして更に、欠歯部特定手段は、その周期レジスタに格納された２つの計測値Ｔａ，Ｔｂを用いて「Ｔｂ≧Ｔａ×Ｃ（但し、Ｃは定数）」の関係が成立しているか否かを判定し、その判定結果により、次に欠歯部が２つ連続して発生するか否か（即ち、次に発生する欠歯部が連続欠歯か単一欠歯か）を判別するようになっている。
【００３４】
つまり、「Ｔｂ≧Ｔａ×Ｃ（但し、Ｃは定数）」の関係が成立していれば、今回は欠歯部が連続して発生した（連続欠歯であった）と判断することができ、上記関係が成立していなければ、今回は欠歯部が１回だけ発生した（単一欠歯であった）と判断することができる。よって、例えば、単一欠歯と連続欠歯とが交互に発生するのであれば、上記関係が成立していたならば、次に発生するのは単一欠歯であると判別することができ、上記関係が成立していなければ、次に発生するのは連続欠歯であると判別することができる。
【００３５】
そして、このような請求項１１の構成によれば、例えばクランク信号の有効エッジ毎に今回のパルス間隔と前回のパルス間隔とを比較するといった処理を行わなくても、次に発生する欠歯部が連続欠歯か単一欠歯かを効率的に判別することができる。
【００３６】
一方、請求項１〜１１のエンジン制御装置において、逓倍クロックは、クランク信号の前回の１つのパルス間隔だけを用いて生成するようにしても良いが、請求項１２に記載のように、逓倍クロックを、クランク信号のＮ個（Ｎは２以上の整数）の周期を使用して生成するように構成しても良い。
【００３７】
そして、このように構成すれば、何らかの原因でクランク信号の１つのパルス間隔だけが異常に短くなったり長くなったりしても、その影響を抑制することができる。
また、この場合、前記Ｎ個の周期を、請求項１３に記載の如く、クランク信号の最新のＮ個の周期とすれば、常に最新のクランク信号の周期に基づいて逓倍クロックを生成することができる。
【００３８】
次に、請求項１４に記載のエンジン制御装置は、請求項１〜１３のエンジン制御装置において、クランク信号に欠歯部が発生した直後では、その欠歯部がパルスをＭ個抜いたものであるとすると、逓倍クロックの周期を、その欠歯部のパルス間隔Ｔｋを用いて「Ｔｋ／（Ｍ＋１）／逓倍数」の値にするようになっている。
【００３９】
そして、このような請求項１４のエンジン制御装置によれば、クランク信号に欠歯部が発生した直後においても、最新のクランク信号に基づく逓倍クロックによって下位カウンタをカウントアップさせることができる。
【００４０】
次に、請求項１５に記載のエンジン制御装置は、請求項１〜１４のエンジン制御装置において、制御信号の出力開始タイミングを示す値がセットされるオンタイミング設定レジスタと、前記制御信号の出力停止タイミングを示す値がセットされるオフタイミング設定レジスタと、前記制御信号の出力を強制的に停止するタイミングを示す値がセットされる出力ガードタイミング設定レジスタと、一定時間毎にアップカウントする出力ガード用アップカウンタとを備えている。そして、このエンジン制御装置では、クランクカウンタのカウント値がオンタイミング設定レジスタの値以上になると制御信号の出力を開始し、クランクカウンタのカウント値がオフタイミング設定レジスタの値以上になると制御信号の出力を停止するが、特に、出力ガード用アップカウンタのカウント値が出力ガードタイミング設定レジスタの値と一致すると、クランクカウンタのカウント値に拘わらず（つまり、クランクカウンタのカウント値がオフタイミング設定レジスタの値以上にならなくても）、制御信号の出力を強制的に停止するようになっている。
【００４１】
このような請求項１５のエンジン制御装置によれば、クランクカウンタのカウント値がオンタイミング設定レジスタの値以上になって制御信号の出力が開始されてから、クランクカウンタのカウント値がオフタイミング設定レジスタの値以上になる前に、エンジン停止などでクランク信号の変化が停止してしまっても、出力ガード用アップカウンタのカウント値が出力ガードタイミング設定レジスタの値と一致した時点で、制御信号の出力を強制的に停止させることができる。つまり、制御信号が出力されたままになってしまうことを防ぐことができる。
【００４２】
尚、制御信号の出力を開始してから該制御信号の出力を強制的に停止させるまでのガード時間をＴｉｍ１とすると、出力ガード用アップカウンタがフリーランのカウンタであるならば、出力ガードタイミング設定レジスタには、制御信号の出力が開始された時点での出力ガード用アップカウンタの値にＴｉｍ１に相当する値を加えた値をセットすれば良い。また、出力ガード用アップカウンタが制御信号の出力開始時にリセットされるカウンタであるならば、出力ガードタイミング設定レジスタには、Ｔｉｍ１に相当する値をそのままセットすれば良い。
【００４３】
しかも、この請求項１５のエンジン制御装置によれば、アップカウントするカウンタ（出力ガード用アップカウンタ）のカウント値と出力ガードタイミング設定レジスタの値とが一致すると制御信号の出力を強制停止する構成であるため、制御信号の出力が開始されてからでもガード時間を再設定すること（設定し直すこと）が可能である。
【００４４】
つまり、もしガード時間をダウンカウンタで計時する場合には、制御信号の出力開始時にてダウンカウンタにガード時間に相当する値をセットして該ダウンカウンタを起動し、そのダウンカウンタのカウント値が０になったら制御信号の出力を強制停止する、といった構成を採ることとなるが、その場合には、ダウンカウンタを一度起動した後、該ダウンカウンタに他のガード時間に相当する値をセットし直すと、実際のガード時間が再度セットしたものよりも長い時間になってしまうため、ガード時間の再設定はできないが、請求項１５の構成ならば、そのような不具合はない。
【００４５】
次に、請求項１６に記載のエンジン制御装置は、請求項１〜１５のエンジン制御装置において、指令信号の出力開始タイミングを示す値がセットされる第１設定レジスタと、前記指令信号の出力停止タイミングを示す値がセットされる第２設定レジスタと、一定時間毎にアップカウントする出力停止用アップカウンタとを備えている。
【００４６】
そして、このエンジン制御装置では、クランクカウンタのカウント値が第１設定レジスタの値以上になると指令信号の出力を開始し、出力停止用アップカウンタのカウント値が第２設定レジスタの値と一致すると、その指令信号の出力を停止するようになっている。
【００４７】
このような請求項１６のエンジン制御装置によれば、クランクカウンタのカウント値が第１設定レジスタの値以上になって指令信号の出力が開始されてから、出力停止用アップカウンタのカウント値が第２設定レジスタの値と一致した時点で、指令信号の出力を停止させることができる。つまり、指令信号の出力開始タイミングだけをクランク角に同期したタイミングに設定することができる。
【００４８】
尚、指令信号の出力を開始してから該指令信号の出力を停止させるまでの出力停止時間をＴｉｍ２とすると、出力停止用アップカウンタがフリーランのカウンタであるならば、第２設定レジスタには、指令信号の出力が開始された時点での出力停止用アップカウンタの値にＴｉｍ２に相当する値を加えた値をセットすれば良い。また、出力停止用アップカウンタが指令信号の出力開始時にリセットされるカウンタであるならば、第２設定レジスタには、Ｔｉｍ２に相当する値をそのままセットすれば良い。
【００４９】
そして更に、この請求項１６のエンジン制御装置においても、アップカウントするカウンタ（出力停止用アップカウンタ）のカウント値と第２設定レジスタの値とが一致すると指令信号の出力を停止する構成であるため、指令信号の出力が開始されてからでも出力停止時間を再設定すること（設定し直すこと）が可能である。
【００５０】
次に、請求項１７に記載のエンジン制御装置は、請求項１〜１６のエンジン制御装置において、基準位置信号の出力タイミングを示す値がセットされる基準設定レジスタを備えている。更に、このエンジン制御装置では、クランクカウンタにおける上位カウンタのカウント値又はその上位カウンタを分周した分周カウンタのカウント値が、基準設定レジスタの値と一致している間、基準位置信号をハイレベルとローレベルとの何れかである特定レベルで出力し、逆に、上位カウンタのカウント値又は分周カウンタのカウント値が基準設定レジスタの値と一致していない場合には、基準位置信号を特定レベルとは反対のレベルで出力するようになっている。この構成によれば、クランクカウンタを利用して、基準位置信号を、あるクランク角の期間だけ特定レベルで出力することができる。また、この基準位置信号は、クランク角が特定の基準角度であること（換言すれば、クランク軸の回転位置が特定の基準位置であること）を示す信号として使用することができる。
【００５１】
次に、請求項１８に記載のエンジン制御装置は、請求項１〜１７のエンジン制御装置において、出力信号の反転タイミングを示す値がそれぞれセットされる第１のタイミング設定レジスタと第２のタイミング設定レジスタとを備えている。更に、このエンジン制御装置では、クランクカウンタにおける上位カウンタのカウント値又はその上位カウンタを分周した分周カウンタのカウント値が、第１のタイミング設定レジスタの値と一致したら、出力信号の出力レベルをハイレベルとローレベルとの何れかである特定レベルにし、上位カウンタのカウント値又は分周カウンタのカウント値が第２のタイミング設定レジスタの値と一致したら、出力信号の出力レベルを特定レベルとは反対のレベルにするようになっている。この構成によれば、クランクカウンタを利用して、出力信号を、任意のクランク角から他の任意のクランク角までの期間だけ特定レベルで出力することができる。また、この出力信号は、例えば３６０°ＣＡ毎に反対のレベルになる気筒判別用の表裏信号として使用することができる。
【００５２】
次に、請求項１９に記載のエンジン制御装置は、請求項１〜１８のエンジン制御装置において、ＡＤ変換器と、該ＡＤ変換器の起動タイミングを示す値がセットされるＡＤ設定レジスタとを備えており、クランクカウンタのカウント値がＡＤ設定レジスタの値に達すると、前記ＡＤ変換器を起動するようになっている。この構成によれば、ＡＤ設定レジスタにセットする値により、任意のクランク角のタイミングでＡＤ変換器を起動することができる。
【００５３】
次に、請求項２０に記載のエンジン制御装置は、請求項１〜１９のエンジン制御装置において、クランク信号のパルス間隔を計測して、そのパルス間隔が欠歯部であるか否かを判定する欠歯判定手段と、第２カウンタとを備えている。そして、第２カウンタは、欠歯判定手段により欠歯部であると判定されたパルス間隔の終了タイミングでクリアされ、以降、クランク信号の有効エッジでカウントアップされる。
【００５４】
このような第２カウンタを備えた請求項２０のエンジン制御装置によれば、クランクカウンタの補正を、第２カウンタのカウント値に基づき任意のタイミングで行うことができる。
【００５５】
つまり、第２カウンタを備えていない装置では、欠歯判定手段によって欠歯部であると判定されたパルス間隔の終了タイミングでしかクランクカウンタの補正を行うことができないが、第２カウンタを備えていれば、その第２カウンタのカウント値が所望の値になったタイミングでクランクカウンタの補正を行うことができる。
【００５６】
具体的構成例としては、請求項２１に記載のように、補正位置設定レジスタと補正値設定レジスタとを設け、第２カウンタのカウント値が補正位置設定レジスタの値と一致すると、クランクカウンタにおける上位カウンタのカウント値を補正値設定レジスタの値に変更する（書き換える）ように構成すれば良い。つまり、この構成によれば、補正位置設定レジスタにセットする値によって、補正の実施タイミングを任意に設定することができ、また、補正値設定レジスタには、その補正実施タイミングでとるべき上位カウンタの正しい値をセットすれば良い。
【００５７】
次に、請求項２２に記載のエンジン制御装置では、請求項２０，２１のエンジン制御装置において、第２カウンタはラップラウンドせず、該第２カウンタのカウント値は所定の最大値で止まるようになっている。
【００５８】
この構成によれば、欠歯判定手段による欠歯部の判定抜け（本当は欠歯部であるのに欠歯部と判定し損ねること）が起こっても、第２カウンタのカウント値は最大値で止まって０には戻らないため、前述のクランクカウンタの補正が誤ったクランク角の位置で実施されてしまうことがなく有利である。つまり、第２カウンタがラップラウンドするようになっていると、欠歯部の判定抜けが起こった場合、その第２カウンタのカウント値が欠歯部の終了タイミング以外のタイミングで０に戻ってしまい、その結果、クランクカウンタの補正が誤った位置で実施されてしまう可能性が生じるが、請求項２２の構成によれば、そのような心配がない。
【００５９】
次に、請求項２３に記載のエンジン制御装置では、請求項２０〜２２のエンジン制御装置において、当該装置には、エンジンのカム軸の回転位置が特定位置のときにカム軸センサから発生される気筒判別用信号が入力されると共に、その気筒判別用信号の発生タイミングで第２カウンタのカウント値を記憶するキャプチャレジスタが備えられている。そして更に、この請求項２３のエンジン制御装置では、前記キャプチャレジスタの値（即ち、気筒判別用信号が発生した時の第２カウンタのカウント値）から、気筒判別用信号が気筒判別区間内に発生したか否かを判定するようになっている。
【００６０】
この構成によれば、気筒判別用信号が気筒判別区間内に発生したか否かを簡単且つ正確に判定することができる。つまり、従来の手法としては、クランク信号に同期したあるタイミングからあるタイミングまでを気筒判別区間として設定すると共に、その気筒判別区間の開始タイミングから、気筒判別用信号が発生したことを検知して記憶する記憶回路を有効にし、更に、気筒判別区間の終了タイミングで上記記憶回路の記憶内容を読み取って、その記憶回路に気筒判別用信号の発生したことが記憶されていたならば、気筒判別用信号が気筒判別区間内に発生したと判定するようにしていた。しかし、この手法では、上記記憶回路の記憶内容を読み取るタイミングが少しでもずれてしまうと、気筒判別用信号が本当に気筒判別区間内に発生したか否かを判定することができない。これに対して請求項２３の構成によれば、そのようなタイミングのシビアさが無く、キャプチャレジスタの値をいつ読み取っても（実際の気筒判別区間が過ぎてから読み取っても）、その値から、気筒判別用信号が気筒判別区間内に発生したか否かを正確に判定することができる。
【００６１】
次に、請求項２４に記載のエンジン制御装置では、請求項２０〜２３のエンジン制御装置において、欠歯判定手段は、今回計測中のクランク信号のパルス間隔が、前回計測したパルス間隔を所定の判定比倍した長さ以上であれば、そのパルス間隔が欠歯部であると判定するようになっているが、特に、前記判定比（以下、欠歯判定比という）として使用される値がそれぞれ格納される第１判定比設定レジスタと第２判定比設定レジスタとを備えている。
【００６２】
そして更に、欠歯判定手段は、第２カウンタのカウント値により、クランク信号の欠歯部付近の期間が、第１判定比設定レジスタの値が欠歯判定比として使用される第１期間として設定され、それ以外の期間が、第２判定比設定レジスタの値が欠歯判定比として使用される第２期間として設定されるように構成されている。そして、第２判定比設定レジスタには、第１判定比設定レジスタに格納される値よりも大きい値（即ち、欠歯部と判定し難くなる値）が格納されている。
【００６３】
このような請求項２４のエンジン制御装置によれば、クランク信号の欠歯部付近の期間（第１期間）よりも、それ以外の期間（第２期間）の方が、欠歯判定比が大きい値になるため、クランク信号の欠歯部ではない通常のパルス間隔を欠歯部であると誤判定してしまうこと（以下、欠歯誤判定という）を効果的に防止することができる。
【００６４】
次に、請求項２５に記載のエンジン制御装置では、請求項２４のエンジン制御装置において、欠歯判定手段は、前記第２期間の開始タイミングを示す値がセットされる開始位置指定レジスタと、前記第２期間の開始タイミングから該第２期間が終了するまでのクランク信号のパルス数を示す値がセットされるオフセット指定レジスタとを備えている。そして更に、欠歯判定手段は、第２カウンタのカウント値が開始位置指定レジスタの値と一致した時点からクランク信号の有効エッジがオフセット指定レジスタの値だけ発生するまでの期間が、前記第２期間となり、それ以外の期間が前記第１期間となるように構成されている。
【００６５】
このような請求項２５のエンジン制御装置によれば、第１期間と第２期間とを自由に設定することができる上に、第２期間の幅を、その第２期間の開始タイミングからのオフセットで指定する構成であるため、例えば、万一、第２期間中に（つまり、第２カウンタのカウント値が開始位置指定レジスタの値と一致した後に）欠歯誤判定が起こって第２カウンタのカウント値が０に戻ってしまったとしても、それには影響されずに第２期間を適切なタイミングで終了させることができる。
【００６６】
一方、請求項２４，２５のエンジン制御装置において、第２期間では、請求項２６に記載のように、第２判定比設定レジスタの値が判定比として使用されることに代えて、欠歯判定手段の判定動作が禁止されるように構成しても良い。このように構成すれば、欠歯誤判定を一層確実に防止することができる。
【００６７】
また、開始位置指定レジスタとオフセット指定レジスタには、クランク信号の欠歯部を含む複数パルス間隔分の期間が第１期間となるような値をセットしておくことが望ましい。例えば、万一、ノイズによってクランク信号の有効エッジが幾つか潰されてしまった場合でも、本当の欠歯部が到来する前に第２期間を終了させることができ、その本当の欠歯部の期間において第１判定比設定レジスタの値（即ち、欠歯部と判定し易くなる値）を欠歯判定比として使用することができるからである。
【発明を実施するための最良の形態】
【００６８】
以下に、本発明が適用された実施形態のエンジン制御装置について説明する。尚、本実施形態のエンジン制御装置は、車両に搭載された４サイクルの内燃機関型エンジンを制御するものである。
【００６９】
まず、図１は、実施形態のエンジン制御装置（以下、エンジンＥＣＵという）１の構成を表す構成図であり、図２は、このエンジンＥＣＵ１でのクランク信号に関する全体動作を表すタイムチャートである。
【００７０】
図１に示すように、本実施形態のエンジンＥＣＵ１には、マイコン（マイクロコンピュータ）３と、入力回路５と、出力回路６とが備えられている。そして、マイコン３は、クランク軸センサ７からのクランク信号，カム軸センサ９からの気筒判別用信号（以下、Ｇ信号という），水温センサやスロットル開度センサ等からの他の各種センサ信号，及びトランスミッションのシフトポジションスイッチやエアコンスイッチ等からの各種スイッチ信号を入力回路５を介して取り込み、それら各種信号に基づいて、インジェクタへ出力回路６を介して駆動信号（噴射指令信号）を出力する燃料噴射制御や、点火装置へ出力回路６を介して駆動信号（点火指令信号）を出力する点火時期制御等のエンジン回転に同期した制御を実施しているが、特に、クランク角（クランク軸の回転角度）を表すクランクカウンタ１１をクランク信号に基づきカウントアップさせ、そのカウント値をエンジン回転に同期した制御に使用している。例えば、クランクカウンタ１１の値（カウント値）がある値から他のある値になるまで駆動信号を出力するとか、クランクカウンタ１１の値がある値になってから一定時間が経過するまで駆動信号を出力するといった具合に、クランクカウンタ１１の値を使用する。
【００７１】
尚、クランク軸センサ７からマイコン３に入力されるクランク信号は、図２に示すように、エンジンのクランク軸の回転位置が予め定められた基準位置に来ていない場合には、クランク軸が１０°回転する毎（１０°ＣＡ毎）にロー→ハイ→ローといった具合にパルス状に変化し、クランク軸の回転位置が基準位置に来たときには、立ち上がりの間隔が整数倍（本実施形態では３倍）長くなる。つまり、クランク信号は、クランク軸の回転位置が基準位置に来ていない場合には、１０°ＣＡ毎のパルス列となり、クランク軸の回転位置が基準位置に来たときには、１０°ＣＡ毎のパルスが所定数（本実施形態では２個）抜けることで立ち上がり間隔が３０°ＣＡ分の長さになった欠歯部Ｋとなる。また、カム軸センサ９からマイコン３に入力されるＧ信号は、図２に示すように、クランク軸の回転に対し１／２の比率で回転するエンジンのカム軸の回転位置が特定位置に来たときに、ロー→ハイ→ローといった具合にパルス状に変化する信号である。このため、Ｇ信号の立ち上がりエッジは７２０°ＣＡ毎に発生することとなる。
【００７２】
ここで、マイコン３には、クランク信号とＧ信号とを入力してクランクカウンタ１１に関する信号処理を行う信号処理部１３が備えられている。そして、その信号処理部１３は、クランク信号に基づいてクランクカウンタ１１をカウントアップさせる処理を主に行うカウンタ処理部１５と、クランク信号の各パルス間隔（本実施形態では、立ち上がりエッジ同士の間隔であり、以下、クランクパルスともいう）について、そのパルス間隔が欠歯部Ｋであるか否かを判定する欠歯判定部１７（欠歯判定手段に相当）と、クランクカウンタ１１のカウント値に基づき信号を出力するための信号出力部１９と、クランクカウンタ１１とは別にクランク信号によってカウントアップされる第２カウンタ２１とを有している。
【００７３】
更に、マイコン３には、エンジンを制御するための各種処理を実行するＣＰＵ２３と、ＣＰＵ２３によって実行されるプログラムなどが格納されたＲＯＭ２５と、ＣＰＵ２３による演算結果を一時記憶するＲＡＭ２７と、入力回路５を介して入力されるアナログの信号をデジタルデータに変換して取り込むためのＡＤ変換器２９と、入力回路５を介して入力されるデジタルの信号（ハイ又はローの二値信号）を取り込むと共に、本マイコン３の外部へ信号を出力するためのＩ／Ｏポート３１とが備えられている。
【００７４】
次に、マイコン３の信号処理部１３について説明する。
まず、欠歯判定部１７は、クランク信号のパルス間隔を計測すると共に、今回計測中のパルス間隔が、前回計測したパルス間隔を所定の欠歯判定比倍した長さ以上になると、その今回計測中のパルス間隔が欠歯部Ｋであると判定して、図２に示す如く、その判定時点から次のクランク信号の立ち上がりエッジ（つまり、欠歯部Ｋの終了タイミングに相当するクランク信号の立ち上がりエッジ）までの間、ハイレベルの欠歯検出信号を出力する、といった判定動作（以下、欠歯検出動作という）を行う。
【００７５】
次に、カウンタ処理部１５は、クランクカウンタ１１の他に、図３に示す如く、クランク信号の各パルス間隔を計測するパルス間隔計測部３３と、クランク信号に立ち上がりエッジが発生する毎に、パルス間隔計測部３３で今回計測されたパルス間隔計測値を所定の逓倍数で割った値を求め、その値に相当する長さを１周期とした逓倍クロック（即ち、周期がクランク信号の周期の「１／逓倍数」であるクロック）を生成して出力する逓倍クロック生成部３５とを備えている。
【００７６】
そして、クランクカウンタ１１は、図３及び図４に示す如く、上位カウンタ１１ａと下位カウンタ１１ｂとからなっている。そして更に、上位カウンタ１１ａは、クランク信号の立ち上がりエッジ（有効エッジに相当）でカウントアップされ、下位カウンタ１１ｂは、逓倍クロック生成部３５で生成される上記逓倍クロックの立ち上がりエッジでカウントアップされると共に、クランク信号の立ち上がりエッジでクリアされる（値が０に初期化される）ようになっている。尚、図２や後述する図５（Ｂ）及び図６（Ｂ）では、クランク信号の欠歯部Ｋにおいても、上位カウンタ１１ａがカウントアップされることが示されているが、この点については後で図７〜図１３を用い詳しく述べる。
【００７７】
ここで、上位カウンタ１１ａと下位カウンタ１１ｂは、図４（Ａ）に示すように、両方共に８ビットのカウンタであるが、本実施形態では、逓倍数を可変にすることを想定しており、このため、下位カウンタ１１ｂの方は、設定された逓倍数に応じて、その逓倍数が２のｎ乗であるとすると、当該下位カウンタ１１ｂの最上位ビットから数えてｎビット目が、逓倍クロックに応じたカウントアップ動作の最下位ビットとなって、そのｎビット目を含む上位のビットが使用可能範囲になり、そのｎビット目よりも下位のビットは０のままになるように構成されている。
【００７８】
例えば、逓倍数が３２（＝２の５乗）であれば、下位カウンタ１１ｂの最上位ビットから数えて５ビット目が、逓倍クロックに応じたカウントアップ動作の最下位ビットとなり、その５ビット目よりも下位のビット（下位３ビット）は０のまま変化しない。また、逓倍数が１２８（＝２の７乗）であれば、下位カウンタ１１ｂの最上位ビットから数えて７ビット目が、逓倍クロックに応じたカウントアップ動作の最下位ビットとなり、その７ビット目よりも下位のビット（下位１ビット）は０のまま変化しない。そして、逓倍数が設定可能な最大値である２５６（＝２の８乗）であれば、下位カウンタ１１ｂの最上位ビットから数えて８ビット目であって、当該下位カウンタ１１ｂの最下位ビットが、逓倍クロックに応じたカウントアップ動作の最下位ビットとなる。
【００７９】
つまり、上位カウンタ１１ａは右詰めとし、下位カウンタ１１ｂは左詰めとすることで、クランクカウンタ１１を固定小数点のカウンタにしている。
尚、もし逓倍数を変えずに固定値とするのであれば、下位カウンタ１１ｂのビット数は、余分に設けておく必要はなく、逓倍数が２のｎ乗であるとすると、ｎビットとすれば良い。例えば、逓倍数が３２であれば、下位カウンタ１１ｂは５ビットにすれば良い。
【００８０】
また、本実施形態のエンジンＥＣＵ１においては、後述するようにクランク信号の欠歯部Ｋの期間中はキャリー許可フラグが図２の如くオンされるが、下位カウンタ１１ｂは、そのキャリー許可フラグがオフされている間（即ち、欠歯部Ｋ以外の期間）は、ラップラウンドが禁止され、その値は使用可能範囲の最大値（つまり、使用可能範囲の全ビットが１になった状態）で止まるようになっている。このため、図４（Ｂ）にて「減速」と記したクランク信号のパルス間隔に示すように、クランク信号が立ち上がってから次に立ち上がるまでに下位カウンタ１１ｂの値が最大値に達したならば、その下位カウンタ１１ｂの値は、次にクランク信号が立ち上がってクリアされるまで、最大値のままとなる。
【００８１】
このようなエンジンＥＣＵ１では、クランクカウンタ１１を上位カウンタ１１ａと下位カウンタ１１ｂに分けて前述の如くカウントアップさせているため、図４（Ｂ）に示すように、エンジンの加減速によってクランク信号のパルス間隔が変化しても、そのパルス間隔の切れ目である立ち上がりエッジのタイミングでクランクカウンタ１１の値は自然に正しい値（そのタイミングでとるべき値）となり、従来装置の如くクランク信号の立ち上がりタイミング毎にガード値を設定する必要がなくなる。
【００８２】
例えば、図４（Ｂ）にて「加速」と記したクランク信号のパルス間隔に示すように、エンジンの加速によってクランク信号のパルス間隔が短くなった場合でも、そのパルス間隔の終了タイミング（換言すれば、次のパルス間隔の開始タイミング）にて、クランクカウンタ１１の値は自然にそのタイミングでとるべき正しい値となる。また、図４（Ｂ）にて「減速」と記したクランク信号のパルス間隔に示すように、エンジンの減速によってクランク信号のパルス間隔が長くなった場合でも、そのパルス間隔の終了タイミングにて、クランクカウンタ１１の値は自然にそのタイミングでとるべき正しい値となる。
【００８３】
よって、クランクカウンタ１１を正確にカウントアップさせるための処理や構成を簡素化することができる。
更に、本実施形態のエンジンＥＣＵ１では、前述したように、上位カウンタ１１ａを右詰めとし、下位カウンタ１１ｂを左詰めとすることで、クランクカウンタ１１を固定小数点のカウンタにしている。このため、動作中に逓倍数を変更しても、クランクカウンタ１１のＬＳＢ（下位カウンタ１１ｂの本当の１ビット目）の重みは常に同じとなり、上位カウンタ１１ａと下位カウンタ１１ｂとの連続性、及びクランクカウンタ１１のカウント値の連続性を確保することができ、効率的に計算することができる。
【００８４】
また、本実施形態において、カウンタ処理部１５は、図３に示すように、上限値設定レジスタ３８を備えている。そして、カウンタ処理部１５は、図５（Ａ）に示す上位カウンタの上限値補正動作を行うことで、上位カウンタ１１ａを、８ビットの最大値である２５５までカウントするフリーランのカウンタではなく、図５（Ｂ）に示すように、カウント値が上限値設定レジスタ３８に予め設定された上限値（本実施形態では、７２０°ＣＡに相当する７１）になると次に０へ戻るカウンタにしている。
【００８５】
即ち、図５（Ａ）に示すように、カウンタ処理部１５は、上位カウンタ１１ａのカウントアップタイミングになると（Ｓ１１０：ＹＥＳ）、上位カウンタ１１ａの値が上限値設定レジスタ３８にセットされている値と同じであるか否かを判断し（Ｓ１２０）、両値が同じでなければ（Ｓ１２０：ＮＯ）、上位カウンタ１１ａの値を１つカウントアップさせるが、上記両値が同じであれば（Ｓ１２０：ＹＥＳ）、上位カウンタ１１ａの値を０にする（Ｓ１４０）。
【００８６】
この構成によれば、クランクカウンタ１１を任意の値でラップラウンドさせることができる。特に、クランク信号のパルスが発生するクランク角の間隔が１０°ＣＡから変わったとしても、上限値設定レジスタ３８に７２０°ＣＡ分に相当する値をセットしておけば、クランクカウンタ１１をエンジンの１行程毎（７２０°ＣＡ毎）にラップラウンドさせることができる。
【００８７】
また更に、カウンタ処理部１５には、図３に示すように、クランクカウンタ１１の値をソフト処理で正しい値に補正するために用いられる補正値設定レジスタ３７ａが備えられている。
【００８８】
そして、マイコン３では、ＣＰＵ２３が、図６（Ａ）に示すように、欠歯判定部１７からの欠歯検出信号が立ち上がったタイミングで上位カウンタ１１ａの値が正しい値か否かを判定し（Ｓ１７０）、正しい値でないと否定判定したならば（Ｓ１７０：ＮＯ）、その時点からクランク信号が４回立ち上がった時点（つまり、欠歯部Ｋから３０°ＣＡ後のタイミング）で上位カウンタ１１ａがとるべき値を、正しいカウント値として補正値設定レジスタ３７ａにセットする（Ｓ１８０）。
【００８９】
そして更に、ＣＰＵ２３は、図６（Ｂ）に示すように、欠歯検出信号が立ち上がってからクランク信号が４回立ち上がった時に、図６（Ａ）のＳ１７０で否定判定されてＳ１８０の処理が実行されたか否かを判定し、肯定判定したならば、上位カウンタ１１ａの値を補正値設定レジスタ３７ａにセットされている正しい値に書き換える補正処理を行う。尚、図６（Ｂ）では、上位カウンタ１１ａの値が「１０」から「３」に書き換えられた場合が例示されている。
【００９０】
つまり、本実施形態では、上位カウンタ１１ａと下位カウンタ１１ｂとのうち、上位カウンタ１１ａのみソフト処理でカウント値を補正するようにしている。
このため、カウント値を補正しようとしてから、実際にカウント値を補正する（書き換える）までに遅れがあっても、その遅れの影響が少なくて済むという利点がある。
【００９１】
つまり、図６（Ｂ）において、欠歯検出信号が立ち上がってからクランク信号が４回立ち上がったタイミングは、時刻ｔ１となるが、もし上位カウンタ１１ａと下位カウンタ１１ｂとの両方の値を補正するように構成すると、その補正実施タイミングが時刻ｔ１から遅れて時刻ｔ２にずれたならば、図６（Ｂ）における（）内に示すように、クランクカウンタ１１の値は次のクランク信号の立ち上がりタイミングである時刻ｔ３まで正常値に戻らない。これに対して、上位カウンタ１１ａのみ補正するように構成すれば、補正実施タイミングが遅れて時刻ｔ２になったとしても、もともと下位カウンタ１１ｂはクランク信号の立ち上がりエッジ毎にクリアされて正常値化されているため、上位カウンタ１１ａの補正を行った時刻ｔ２でクランクカウンタ１１のカウント値は正常値となり、補正実施遅れの影響を少なくすることができるのである。
【００９２】
一方、図３に示すように、カウンタ処理部１５には、前述した補正値設定レジスタ３７ａ及び上限値設定レジスタ３８等の他にも、分周カウンタ３６と、補正値設定レジスタ３７ｂと、第１周期レジスタ３９と、第２周期レジスタ４０と、キャリー許可開始位置レジスタ４１と、第１のキャリー許可後上位設定レジスタ４２と、第２のキャリー許可後上位設定レジスタ４３と、補正位置設定レジスタ４４と、キャプチャレジスタ４５と、基準設定レジスタ４６と、第１のタイミング設定レジスタ４７と、第２のタイミング設定レジスタ４８とが設けられている。
【００９３】
尚、分周カウンタ３６は、上位カウンタ１１ａを分周するカウンタであって、図２に示されているように、上位カウンタ１１ａの値が所定数（本実施形態では３）増加する毎に値が１つ増加すると共に、上位カウンタ１１ａの値が０になると、その値も０になるカウンタである。また、補正値設定レジスタ３７ｂは、クランクカウンタ１１の値をハードウェアで正しい値に補正するために用いられるものであるが、この補正値設定レジスタ３７ｂや他のレジスタ３９〜４８の詳しい役割については後で述べる。
【００９４】
次に、クランク信号の欠歯部Ｋでクランクカウンタ１１（上位カウンタ１１ａ及び下位カウンタ１１ｂ）をカウントアップさせる動作について説明する。
まず、マイコン３では、クランク信号のパルス間隔のうちの欠歯部Ｋを特定し、その欠歯部Ｋであると特定しているパルス間隔の期間だけ、図２及び図７に示すように、キャリー許可フラグをオンするようになっている。
【００９５】
そして、図７に示すように、キャリー許可フラグがオンされているパルス間隔の期間（「Ｔｎ-1」の期間）では、下位カウンタ１１ｂのラップラウンドが欠歯数Ｍと同じ回数だけ許可されて、その下位カウンタ１１ｂの値は使用可能範囲の最大値の次に０へ戻ると共に、その０へ戻った際に発生する下位カウンタ１１ｂからのキャリー（桁上げ）によって、上位カウンタ１１ａがカウントアップされるようになっている。尚、欠歯数Ｍとは、欠歯部Ｋで抜かれているパルス数であり、本実施形態では２である。
【００９６】
具体的には、キャリー許可フラグのオン中において、下位カウンタ１１ｂは、キャリー許可フラグがオンされる直前のクランク信号のパルス間隔（欠歯部Ｋ直前のパルス間隔であり、図７における「Ｔｎ-2」）から生成された逓倍クロック（つまり、周期が「Ｔｎ-2」／逓倍数であるクロック）でカウントアップされる。そして、下位カウンタ１１ｂは、欠歯数Ｍだけラップラウンド（オーバーフロー）可能であると共に、上位カウンタ１１ａは、下位カウンタ１１ｂがラップラウンドして該下位カウンタ１１ｂからキャリーが発生する毎にカウントアップされる。よって、上位カウンタ１１ａは、キャリー許可フラグがオンされているパルス間隔の期間では、下位カウンタ１１ｂからのキャリーにより最大で欠歯数Ｍだけカウントアップされることとなり、その結果、上位カウンタ１１ａの値は、欠歯部Ｋにおいて、最大で“欠歯数Ｍ＋１”だけ進むこととなる。
【００９７】
更に、下位カウンタ１１ｂは、図８に示すように、キャリー許可フラグがオンされているパルス間隔の期間において、欠歯数Ｍだけラップラウンドし、その後、カウント値が再び使用可能範囲の最大値に達したならば、その最大値でカウント値が停止するようになっている。
【００９８】
このため、図８に示すように、欠歯部Ｋの期間中にエンジンが減速したとしても、クランクカウンタ１１の値は、その欠歯部Ｋの終了タイミング（＝欠歯部Ｋの次のパルスの開始タイミング）でとるべき値を超えてしまうことなく、その値で保持されることとなる。
【００９９】
また、図７に示すように、欠歯判定部１７から欠歯検出信号が出力された直後のクランク信号のパルス間隔期間（即ち、欠歯部Ｋが発生した直後であり、図７における「Ｔｎ」の期間）では、逓倍クロック生成部３５は、欠歯検出信号が出力された際にパルス間隔計測部３３で計測されたパルス間隔（即ち、欠歯部Ｋのパルス間隔）Ｔｋを用いて、「Ｔｋ／（欠歯数Ｍ＋１）／逓倍数」の周期の逓倍クロックを生成するようになっている。このため、図７の例において、欠歯部Ｋ直後のパルス期間Ｔｎでは、下位カウンタ１１ｂは、「（Ｔｎ-1）／３／逓倍数」の時間毎にカウントアップされることとなる。そして、この構成により、クランク信号に欠歯部Ｋが発生した直後においても、最新のクランク信号に基づく逓倍クロックによって下位カウンタ１１ｂをカウントアップさせることができる。
【０１００】
一方、キャリー許可フラグのオン中にエンジンが加速した場合には、上位カウンタ１１ａが下位カウンタ１１ｂからのキャリーによって欠歯数Ｍだけカウントアップされる前に、クランク信号の立ち上がりエッジが発生してキャリー許可フラグがオフされてしまい、上位カウンタ１１ａの値が正しい値よりも小さくなってしまう可能性があるため、本実施形態のマイコン３には、以下の補正機能が設けられている。
【０１０１】
即ち、ＣＰＵ２３のソフト処理によってキャリー許可後上位設定レジスタ４２又は４３に、欠歯部Ｋの終了タイミングで上位カウンタ１１ａがとるべき値（そのタイミングで遷移すべき値）をセットしておくと、カウンタ処理部１５は、キャリー許可フラグがオンで且つクランク信号に立ち上がりエッジが発生した時に、上位カウンタ１１ａの値を、そのキャリー許可後上位設定レジスタ４２又は４３にセットされている正しい値に書き換えるようになっている。
【０１０２】
また、カウンタ処理部１５は、上位カウンタ１１ａの値がキャリー許可開始位置レジスタ４１の値と一致すると、キャリー許可フラグをハード的にオンさせるようになっている。そして、欠歯部Ｋは上位カウンタ１１ａの値がある値の時に発生するため、ＣＰＵ２３がソフト処理により、欠歯部Ｋが発生する前に、その欠歯部Ｋの開始タイミングでキャリー許可フラグがオンされるように、キャリー許可開始位置レジスタ４１に値をセットし、これにより、欠歯部Ｋの開始タイミングに相当するクランク信号の立ち上がりエッジにて、キャリー許可フラグがオンされるようにしている。
【０１０３】
また更に、カウンタ処理部１５は、基本的には、キャリー許可フラグのオン中にクランク信号の立ち上がりエッジが生じると、そのキャリー許可フラグをオンからオフにするが、本実施形態のマイコン３では、図２に示したように欠歯部Ｋが常に１つ単独で発生するシステム（以下、単一欠歯システムという）だけでなく、図１０（Ａ）に示すように、欠歯部Ｋが１つ単独で発生する場合と２つ連続して発生する場合とがあるシステム（以下、連単欠歯システムという）にも対応可能になっており、欠歯部Ｋが２回連続する場合には、キャリー許可フラグをオンしてからクランク信号の２回目の立ち上がりエッジで該キャリー許可フラグをオフさせるようになっている。尚、本実施形態において、連単欠歯システムとしては、図１０（Ａ）に示すように、３６０°ＣＡ毎の単一欠歯（１つ単独の欠歯部Ｋ）と３６０°ＣＡ毎の連続欠歯（２つ連続の欠歯部Ｋ）とが交互に発生するシステムを想定している。
【０１０４】
そこで次に、本マイコン３において、キャリー許可フラグがどの様にしてオン／オフされるかと、キャリー許可後上位設定レジスタ４２，４３に関する上記補正機能がどの様にして実現されているかについて、図９〜図１３に基づき具体的に説明する。尚、ここでは、本マイコン３の動作モードが、連単欠歯システムに適合するモードに設定されている場合について説明する。
【０１０５】
まず、ＣＰＵ２３は、欠歯判定部１７から欠歯検出信号が出力されると（詳しくは、欠歯検出信号がローからハイに立ち上がると）、図９の処理を実行する。
そして、ＣＰＵ２３が図９の処理を開始すると、まずＳ２１０にて、クランク信号に有効エッジとしての立ち上がりエッジが生じるまで待ち、クランク信号に立ち上がりエッジが生じたならば、次のＳ２１５にて、パルス間隔計測部３３により今回計測されたクランク信号のパルス間隔計測値「Ｔｉ」を第１周期レジスタ３９に格納する。
【０１０６】
そして、続くＳ２２０にて、クランク信号に再び立ち上がりエッジが生じるまで待ち、クランク信号に立ち上がりエッジが生じたならば、次のＳ２２５にて、パルス間隔計測部３３により今回計測されたクランク信号のパルス間隔計測値「Ｔｉ+1」を第２周期レジスタ４０に格納する。
【０１０７】
次にＳ２３０にて、第１周期レジスタ３９と第２周期レジスタ４０とに格納された２つのパルス間隔計測値「Ｔｉ」「Ｔｉ+1」を読み出して、『「Ｔｉ+1」≧「Ｔｉ」×Ｃ』の関係が成立しているか否かを判定する。尚、Ｃは定数であり、本実施形態では例えば０．８に設定されている。尚、本実施形態では、上記「Ｔｉ」が、請求項１１記載のＴａに該当し、上記「Ｔｉ+1」が、請求項１１記載のＴｂに該当している。
【０１０８】
ここで、上記『』内の関係が成立していれば、今回は欠歯部Ｋが連続して発生した（連続欠歯であった）と判断することができ、上記『』内の関係が成立していなければ、今回は欠歯部Ｋが１回だけ発生した（単一欠歯であった）と判断することができる。
【０１０９】
そこで、Ｓ２３０にて、上記『』内の関係が成立していると判定した場合には、次に発生する欠歯部Ｋが単一欠歯であると判断して、Ｓ２４０に進み、次に発生する欠歯部Ｋが単一欠歯か連続欠歯かを示す連／単欠設定フラグに、次に発生するのが単一欠歯であることを示す０をセットする。
【０１１０】
そして、続くＳ２５０にて、キャリー許可開始位置レジスタ４１に、次の欠歯部Ｋの開始タイミングでの上位カウンタ１１ａの値をセットし、更に続くＳ２６０にて、第１のキャリー許可後上位設定レジスタ４２に、次の欠歯部Ｋの終了タイミングで上位カウンタ１１ａがとるべき値をセットして、その後、当該図９の処理を終了する。
【０１１１】
尚、欠歯部Ｋの各発生タイミングとその各タイミングでの上位カウンタ１１ａの値との対応関係は予め決まっているため、Ｓ２５０では、現在の上位カウンタ１１ａの値から、次の欠歯部Ｋの開始タイミングで上位カウンタ１１ａがとるはずの値を求め、その値をキャリー許可開始位置レジスタ４１にセットする。また、Ｓ２６０では、Ｓ２５０でキャリー許可開始位置レジスタ４１にセットした値よりも「欠歯数Ｍ＋１」だけカウントが進んだ値を、第１のキャリー許可後上位設定レジスタ４２にセットすることとなる。
【０１１２】
一方、Ｓ２３０で上記『』内の関係が成立していないと判定した場合には、次に発生する欠歯部Ｋが連続欠歯であると判断して、Ｓ２７０に移行する。
そして、Ｓ２７０にて、連／単欠設定フラグに、次に発生するのが連続欠歯であることを示す１をセットする。
【０１１３】
次に、Ｓ２８０にて、キャリー許可開始位置レジスタ４１に、次の欠歯部Ｋの開始タイミング（詳しくは、次に発生する連続欠歯の最初の欠歯部Ｋの開始タイミング）での上位カウンタ１１ａの値をセットする。更に続くＳ２９０にて、第２のキャリー許可後上位設定レジスタ４３に、次に発生する連続欠歯の最初の欠歯部Ｋの終了タイミングで上位カウンタ１１ａがとるべき値をセットし、また、第１のキャリー許可後上位設定レジスタ４２に、次に発生する連続欠歯の２つ目の欠歯部Ｋの終了タイミングで上位カウンタ１１ａがとるべき値をセットする。そして、その後、当該図９の処理を終了する。
【０１１４】
尚、Ｓ２８０においても、Ｓ２５０と同様に、現在の上位カウンタ１１ａの値から、次の欠歯部Ｋの開始タイミングで上位カウンタ１１ａがとるはずの値を求め、その値をキャリー許可開始位置レジスタ４１にセットする。また、Ｓ２９０では、Ｓ２８０でキャリー許可開始位置レジスタ４１にセットした値よりも「欠歯数Ｍ＋１」だけカウントが進んだ値を、第２のキャリー許可後上位設定レジスタ４３にセットし、その第２のキャリー許可後上位設定レジスタ４３にセットした値よりも「欠歯数Ｍ＋１」だけカウントが進んだ値を、第１のキャリー許可後上位設定レジスタ４２にセットすることとなる。
【０１１５】
よって、例えば図１０（Ｂ）の時刻ｔａで欠歯検出信号が立ち上がったとすると、次にクランク信号が立ち上がったタイミングで、Ｓ２１５の処理により、第１周期レジスタ３９に、欠歯判定部１７によって欠歯部Ｋであると判定されたクランクパルスの計測値「Ｔｉ」が格納され、更にクランク信号の次の立ち上がりタイミングで、Ｓ２２５の処理により、第２周期レジスタ４０に、欠歯判定部１７によって欠歯部Ｋであると判定されたクランクパルスの次のクランクパルスの計測値「Ｔｉ+1」が格納されることとなる。
【０１１６】
そして、図１０（Ｂ）の例では、今回が連続欠歯であった場合を表しているため、この場合には、Ｓ２３０の処理で上記『』内の関係が成立していると肯定判定されることとなり、その結果、Ｓ２４０の処理により、図１０（Ａ）にて連続欠歯が発生した直後に示されているように、連／単欠設定フラグに０がセットされる。そして更に、この場合には、Ｓ２５０の処理により、キャリー許可開始位置レジスタ４１に、次の欠歯部Ｋの開始タイミングでの上位カウンタ１１ａの値がセットされ、また、Ｓ２６０の処理により、第１のキャリー許可後上位設定レジスタ４２に、次の欠歯部Ｋの終了タイミングで上位カウンタ１１ａがとるべき値がセットされることとなる。
【０１１７】
また、今回が単一欠歯であった場合には、「Ｔｉ+1」が「Ｔｉ」の１／３程度になり、その「Ｔｉ」よりも格段に小さくなるため、Ｓ２３０の処理で上記『』内の関係が成立していないと否定判定されることとなる。よって、この場合には、Ｓ２７０の処理により、図１０（Ａ）にて単一欠歯が発生した直後に示されているように、連／単欠設定フラグに１がセットされる。そして更に、この場合には、Ｓ２８０の処理により、キャリー許可開始位置レジスタ４１に、次に発生する連続欠歯の最初の欠歯部Ｋの開始タイミングでの上位カウンタ１１ａの値がセットされ、また、Ｓ２９０の処理により、第２のキャリー許可後上位設定レジスタ４３に、次に発生する連続欠歯の最初の欠歯部Ｋの終了タイミングで上位カウンタ１１ａがとるべき値がセットされると共に、第１のキャリー許可後上位設定レジスタ４２に、次に発生する連続欠歯の２つ目の欠歯部Ｋの終了タイミングで上位カウンタ１１ａがとるべき値がセットされることとなる。
【０１１８】
一方、カウンタ処理部１５は、上位カウンタ１１ａの値がキャリー許可開始位置レジスタ４１の値と一致すると、図１１（Ａ）に示す動作を行う。
即ち、まず、キャリー許可フラグをオンする（Ｓ３１０）。そして、連／単欠設定フラグが０であれば（Ｓ３２０：ＹＥＳ）、連／単欠カウンタに１をセットし（Ｓ３３０）、逆に、連／単欠設定フラグが１であれば（Ｓ３２０：ＮＯ）、連／単欠カウンタに２をセットする（Ｓ３４０）。尚、図３では図示を省略しているが、この連／単欠カウンタは、カウンタ処理部１５に設けられているダウンカウンタである。
【０１１９】
また更に、カウンタ処理部１５は、図１１（Ｂ）に示す動作を行っている。
即ち、キャリー許可フラグのオン中に（Ｓ４１０：ＹＥＳ）、クランク信号に立ち上がりエッジが生じると（Ｓ４２０：ＹＥＳ）、その時に連／単欠カウンタの値が２であれば（Ｓ４３０：カウンタ＝２）、上位カウンタ１１ａの値を、第２のキャリー許可後上位設定レジスタ４３にセットされている値に書き換える（Ｓ４４０）と共に、連／単欠カウンタを１つカウントダウンさせる（Ｓ４５０）。
【０１２０】
また、キャリー許可フラグのオン中に（Ｓ４１０：ＹＥＳ）、クランク信号に立ち上がりエッジが生じた時に（Ｓ４２０：ＹＥＳ）、連／単欠カウンタの値が１であれば（Ｓ４３０：カウンタ＝１）、上位カウンタ１１ａの値を、第１のキャリー許可後上位設定レジスタ４２にセットされている値に書き換える（Ｓ４６０）と共に、連／単欠カウンタを１つカウントダウンさせ（Ｓ４７０）、更に、キャリー許可フラグをオフさせる（Ｓ４８０）。
【０１２１】
一方、キャリー許可フラグがオンで（Ｓ４１０：ＹＥＳ）、クランク信号に立ち上がりエッジが生じていないときには（Ｓ４２０：ＮＯ）、図７及び図８を用いて説明したように、上位カウンタ１１ａを下位カウンタ１１ｂからのキャリーによってカウントアップさせる動作を行う（Ｓ４２５）。
【０１２２】
そして、このようなカウンタ処理部１５の図１１の動作と、ＣＰＵ２３による図９の処理とにより、単一欠歯が発生する際には、図１２に示すように、クランク信号の立ち上がりに伴い上位カウンタ１１ａがカウントアップされて、その上位カウンタ１１ａの値がキャリー許可開始位置レジスタ４１の値と一致すると（１）、Ｓ３１０の動作により、キャリー許可フラグがオンされる（２）。また、この場合には、連／単欠設定フラグが事前に図９のＳ２４０で０にセットされているため、Ｓ３３０の動作により、連／単欠カウンタに１がセットされる（３）。尚、図１２は、前回欠歯部Ｋが発生した際に、図９のＳ２５０によって、キャリー許可開始位置レジスタ４１に６９がセットされ、図９のＳ２６０によって、第１のキャリー許可後上位設定レジスタ４２に０（つまり、６９よりも３つカウントが進んだ値）がセットされていた場合を表している。
【０１２３】
そして、その後、キャリー許可フラグのオン中にクランク信号が立ち上がると、この時点で連／単欠カウンタの値は１であるため、Ｓ４６０の動作により、上位カウンタ１１ａの値が第１のキャリー許可後上位設定レジスタ４２にセットされている正しい値（この例では０）に書き換えられる（４）。そして更に、Ｓ４７０の動作により、連／単欠カウンタの値が１から０にダウンされる（５）と共に、Ｓ４８０の動作により、キャリー許可フラグがオフされることとなる（６）。
【０１２４】
また、連続欠歯が発生する際にも、図１３に示すように、クランク信号の立ち上がりに伴い上位カウンタ１１ａがカウントアップされて、その上位カウンタ１１ａの値がキャリー許可開始位置レジスタ４１の値と一致すると（１）、Ｓ３１０の動作により、キャリー許可フラグがオンされる（２）。尚、図１３は、前回欠歯部Ｋが発生した際に、図９のＳ２８０によって、キャリー許可開始位置レジスタ４１に６６がセットされ、図９のＳ２９０によって、第２のキャリー許可後上位設定レジスタ４３に６９（つまり、６６よりも３つカウントが進んだ値）がセットされると共に、第１のキャリー許可後上位設定レジスタ４２に０（つまり、６９よりも３つカウントが進んだ値）がセットされていた場合を表している。
【０１２５】
そして、この場合には、連／単欠設定フラグが事前に図９のＳ２７０で１にセットされているため、Ｓ３４０の動作により、連／単欠カウンタには２がセットされることとなる（３）。
【０１２６】
このため、その後、キャリー許可フラグのオン中にクランク信号が最初に立ち上がると、この時点で連／単欠カウンタの値は２であるため、Ｓ４４０の動作により、上位カウンタ１１ａの値が第２のキャリー許可後上位設定レジスタ４３にセットされている正しい値（この例では６９）に書き換えられる（４）。そして更に、Ｓ４５０の動作により、連／単欠カウンタの値が２から１にダウンされることとなる（５）。
【０１２７】
また更に、その後、キャリー許可フラグのオン中にクランク信号が２回目に立ち上がると、この時点で連／単欠カウンタの値は１であるため、Ｓ４６０の動作により、上位カウンタ１１ａの値が第１のキャリー許可後上位設定レジスタ４２にセットされている正しい値（この例では０）に書き換えられる（６）。そして更に、Ｓ４７０の動作により、連／単欠カウンタの値が１から０にダウンされる（７）と共に、Ｓ４８０の動作により、キャリー許可フラグがオフされることとなる（８）。
【０１２８】
そして、本マイコン３では、以上のようなカウンタ処理部１５の動作（図１１）とＣＰＵ２３の処理（図９）とにより、キャリー許可フラグを欠歯部Ｋの期間中オンさせることと、該キャリー許可フラグがオンで且つクランク信号に立ち上がりエッジが発生したタイミング（即ち、欠歯部Ｋであると特定しているクランクパルスの終了タイミング）で、上位カウンタ１１ａの値を正しい値に書き換える補正とを行うようになっている。
【０１２９】
また、マイコン３の動作モードが、単一欠歯システムに適合するモードに設定されている場合には、ＣＰＵ２３が、図９の処理においてＳ２４０〜Ｓ２６０の処理だけを実施する。よって、この場合には、図１３に例示した動作は行われず、各欠歯部Ｋ毎に、図１２に例示したような動作が毎回行われることとなる。
【０１３０】
尚、本実施形態では、ＣＰＵ２３による図９のＳ２１０〜Ｓ２５０，Ｓ２７０，及びＳ２８０の処理と、カウンタ処理部１５の図１１（Ａ）の動作と、カウンタ処理部１５の図１１（Ｂ）の動作のうちでＳ４１０，Ｓ４２０，Ｓ４３０，Ｓ４５０，Ｓ４７０，及びＳ４８０の動作とが、欠歯部特定手段に相当している。
【０１３１】
一方、ここまでは、逓倍クロック生成部３５がクランク信号の１つのパルス間隔を使って逓倍クロックを生成することを示したが、２以上のＮ個のクランクパルスの時間（つまり、クランク信号のＮ個の周期）を平均して１パルス間隔とし、その平均した時間から逓倍クロックを生成するようにしても良い。
【０１３２】
例えば図１４における（１）や（２）の部分に示すように、逓倍クロック生成部３５が「３パルス分の時間／３」の時間を求め、その時間を逓倍数分の１にした周期（＝３パルス分の時間／３／逓倍数）の逓倍クロックを生成するように構成すれば、何らかの原因で１つのクランクパルスだけが異常に短くなったり長くなったりしても、その影響を抑制することができる。
【０１３３】
また更に、この場合、図１５に示すように、常に最新の３パルス分の時間を平均して１パルス間隔とし、その平均した時間から逓倍クロックを生成するように構成すれば、常に最新のクランク信号の周期に基づいて逓倍クロックを生成することができる。
【０１３４】
尚、図１４及び図１５の何れの例においても、欠歯部Ｋが発生した直後では、図７を参照して既述したように、欠歯部Ｋのパルス間隔（図１４及び図１５ではＴｎ-1）を用いて、「Ｔｎ-1／３／逓倍数」の周期の逓倍クロックを生成するようにしている。つまり、欠歯部Ｋが発生した直後では、欠歯部Ｋのパルス間隔をそのまま３分の１し、その時間から逓倍クロックを生成している。また、このことから、上記Ｎは「欠歯数Ｍ＋１」に設定することが好ましい。欠歯部Ｋ直後とそうでない場合とで、逓倍クロックを生成する際の演算を同様のものにすることができるからである。
【０１３５】
次に、クランクカウンタ１１を使用した本マイコン３における機能について、図１６〜図２１を用い説明する。
まず、信号処理部１３に備えられた信号出力部１９の第１の機能について説明する。
【０１３６】
図１６（Ａ）に示すように、信号出力部１９は、信号ＯＵＴ１の出力開始タイミングを示す値がセットされるオンタイミング設定レジスタ５１と、信号ＯＵＴ１の出力停止タイミングを示す値がセットされるオフタイミング設定レジスタ５２と、信号ＯＵＴ１の出力を強制的に停止するタイミングを示す値がセットされる出力ガードタイミング設定レジスタ５３と、一定周波数の内部クロックＣＫでアップカウントする出力ガード用アップカウンタ５４と、３つの比較部５５，５６，５７と、比較部５６，５７の各出力を入力としたオア回路５８と、信号ＯＵＴ１を出力する出力部５９とを備えている。
【０１３７】
尚、本実施形態では、信号ＯＵＴ１が、請求項１５の制御信号に相当している。また、信号ＯＵＴ１は、マイコン３の内部のみで使用される信号であっても良いし、Ｉ／Ｏポート３１を介してマイコン３の外へ出力されるものであっても良い。
【０１３８】
そして、比較部５５は、オンタイミング設定レジスタ５１の値とクランクカウンタ１１のカウント値とを比較して、カウント値が設定レジスタ５１の値以上になるとアクティブレベル（本実施形態ではハイレベル）の信号を出力する。
【０１３９】
また、比較部５６は、オフタイミング設定レジスタ５２の値とクランクカウンタ１１のカウント値とを比較して、カウント値が設定レジスタ５２の値以上になるとハイレベルの信号を出力する。
【０１４０】
一方、出力ガード用アップカウンタ５４は、オンタイミングがアクティブになった時点でカウント値が０からカウントＵＰするカウンタであり、内部クロックＣＫの周期毎に１ずつカウントアップしていくこととなる。
【０１４１】
また、比較部５７は、出力ガードタイミング設定レジスタ５３の値と出力ガード用アップカウンタ５４の値とを比較して、両値が一致すると、ハイレベルの信号を出力する。
そして、出力部５９は、セット端子（Ｓ）にハイレベルの信号が入力されると、信号ＯＵＴ１の出力を開始し（つまり、信号ＯＵＴ１の出力レベルをハイにし）、リセット端子（Ｒ）にハイレベルの信号が入力されると、信号ＯＵＴ１の出力を停止する（つまり、信号ＯＵＴ１の出力レベルをローにする）。そして更に、出力部５９のセット端子には、比較部５５の出力が入力され、出力部５９のリセット端子には、オア回路５８の出力（即ち、比較部５６の出力と比較部５７の出力との論理和信号）が入力されるようになっている。
【０１４２】
以上の構成により、信号出力部１９では、クランクカウンタ１１のカウント値がオンタイミング設定レジスタ５１の値以上になると、比較部５５から出力部５９のセット端子にハイレベルの信号が入力されるため、信号ＯＵＴ１の出力を開始し、クランクカウンタ１１のカウント値がオフタイミング設定レジスタ５２の値以上になると、比較部５６からオア回路５８を介して出力部５９のリセット端子にハイレベルの信号が入力されるため、信号ＯＵＴ１の出力を停止するが、特に、出力ガード用アップカウンタ５４のカウント値が出力ガードタイミング設定レジスタ５３の値と一致すると、クランクカウンタ１１のカウント値がオフタイミング設定レジスタ５２の値以上にならなくても、比較部５７からオア回路５８を介して出力部５９のリセット端子にハイレベルの信号が入力されるため、信号ＯＵＴ１の出力を強制的に停止することとなる。
【０１４３】
そして、このような信号出力部１９によれば、オンタイミング設定レジスタ５１とオフタイミング設定レジスタ５２とに、ＣＰＵ２３によるソフト処理で任意の値をセットすれば、その各値に対応するクランク角の範囲で信号ＯＵＴ１を出力させることができる。
【０１４４】
そして更に、図１６（Ｂ）に示すように、クランクカウンタ１１のカウント値がオンタイミング設定レジスタ５１の値以上になって信号ＯＵＴ１の出力が開始されてから、クランクカウンタ１１のカウント値がオフタイミング設定レジスタ５２の値以上になる前に、エンジン停止などでクランク信号の変化が停止してしまっても、出力ガード用アップカウンタ５４のカウント値が出力ガードタイミング設定レジスタ５３の値と一致した時点で、信号ＯＵＴ１の出力を強制的に停止させることができる。つまり、信号ＯＵＴ１が出力されたままになってしまうことを防ぐことができる。
【０１４５】
尚、出力ガードタイミング設定レジスタ５３には、信号ＯＵＴ１の出力を開始してから該信号ＯＵＴ１の出力を強制的に停止させるまでのガード時間Ｔｉｍ１に相当する値（詳しくは、Ｔｉｍ１を内部クロックＣＫの周期で割った値）を、ＣＰＵ２３によるソフト処理でセットしておけば良い。また、図１６（Ｂ）においては、内部に“１”を付した逆三角印（▽）のタイミングが、信号ＯＵＴ１の出力開始タイミングであり、内部に“２”を付した逆三角印のタイミングが、クランクカウンタ１１のカウント値とオフタイミング設定レジスタ５２の値との比較により信号ＯＵＴ１の出力が停止されるはずであったタイミングであり、内部に“３”を付した逆三角印のタイミングが、出力ガード用アップカウンタ５４のカウント値と出力ガードタイミング設定レジスタ５３の値とが一致して信号ＯＵＴ１の出力が強制的に停止されたタイミングである。
【０１４６】
しかも、この信号出力部１９によれば、アップカウントする出力ガード用アップカウンタ５４のカウント値と出力ガードタイミング設定レジスタ５３の値とが一致すると信号ＯＵＴ１の出力を強制停止する構成であるため、信号ＯＵＴ１の出力が開始されてからでもガード時間Ｔｉｍ１を再設定すること（設定し直すこと）が可能である。
【０１４７】
つまり、もしガード時間Ｔｉｍ１をダウンカウンタで計時する場合には、信号ＯＵＴ１の出力開始時にてダウンカウンタにガード時間Ｔｉｍ１に相当する値をセットして該ダウンカウンタを起動し、そのダウンカウンタのカウント値が０になったら信号ＯＵＴ１の出力を強制停止する、といった構成を採ることとなるが、その場合には、ダウンカウンタを一度起動した後、該ダウンカウンタに他のガード時間に相当する値をセットし直すと、実際のガード時間が再度セットしたものよりも長い時間になってしまうため、ガード時間の再設定はできないが、図１６の構成ならば、そのような不具合はない。
【０１４８】
次に、信号出力部１９の第２の機能について説明する。
信号出力部１９は、図１６（Ａ）の構成に加えて、更に図１７（Ａ）に示す如く、信号ＯＵＴ２の出力開始タイミングを示す値がセットされる第１設定レジスタ６１と、信号ＯＵＴ２の出力停止タイミングを示す値がセットされる第２設定レジスタ６２と、一定周波数の内部クロックＣＫでアップカウントする出力停止用アップカウンタ６３と、２つの比較部６４，６５と、信号ＯＵＴ２を出力する出力部６６とを備えている。
【０１４９】
尚、本実施形態では、信号ＯＵＴ２が、請求項１６の指令信号に相当している。また、信号ＯＵＴ２は、マイコン３の内部のみで使用される信号であっても良いし、Ｉ／Ｏポート３１を介してマイコン３の外へ出力されるものであっても良い。
【０１５０】
そして、比較部６４は、第１設定レジスタ６１の値とクランクカウンタ１１のカウント値とを比較して、カウント値が設定レジスタ６１の値以上になるとハイレベルの信号を出力する。
【０１５１】
一方、出力停止用アップカウンタ６３は、オンタイミングがアクティブになった時点でカウント値が０からカウントＵＰするカウンタであり、内部クロックＣＫの周期毎に１ずつカウントアップしていくこととなる。
【０１５２】
また、比較部６５は、第２設定レジスタ６２の値と出力停止用アップカウンタ６３の値とを比較して、両値が一致すると、ハイレベルの信号を出力する。
そして、出力部６６は、セット端子（Ｓ）にハイレベルの信号が入力されると、信号ＯＵＴ２の出力を開始し（つまり、信号ＯＵＴ１の出力レベルをハイにし）、リセット端子（Ｒ）にハイレベルの信号が入力されると、信号ＯＵＴ２の出力を停止する（つまり、信号ＯＵＴ１の出力レベルをローにする）。そして更に、出力部６６のセット端子には、比較部６４の出力が入力され、出力部６６のリセット端子には、比較部６５の出力が入力されるようになっている。
【０１５３】
以上の構成により、信号出力部１９では、クランクカウンタ１１のカウント値が第１設定レジスタ６１の値以上になると、比較部６４から出力部６６のセット端子にハイレベルの信号が入力されるため、図１７（Ｂ）に示すように、信号ＯＵＴ２の出力を開始する。そして、その時点から、第２設定レジスタ６２にセットされた値に対応した時間（詳しくは、第２設定レジスタ６２にセットされた値に内部クロックＣＫの周期を乗じた時間）Ｔｉｍ２が経過すると、出力停止用アップカウンタ６３のカウント値が第２設定レジスタ６２の値と一致して、比較部６５から出力部６６のリセット端子にハイレベルの信号が入力されるため、信号ＯＵＴ２の出力を停止することとなる。尚、図１７（Ｂ）においては、内部に“１”を付した逆三角印（▽）のタイミングが、信号ＯＵＴ２の出力開始タイミングであり、内部に“２”を付した逆三角印のタイミングが、信号ＯＵＴ２の出力停止タイミングである。
【０１５４】
そして、このような信号出力部１９によれば、第１設定レジスタ６１に、ＣＰＵ２３によるソフト処理で任意の値をセットすれば、その値に対応するクランク角のタイミングで信号ＯＵＴ２の出力を開始させることができる。また、ソフト処理で第２設定レジスタ６２にセットする値により、信号ＯＵＴ２の出力を開始してから該信号ＯＵＴ２の出力を停止するまでの時間Ｔｉｍ２を任意に変えることができる。
【０１５５】
そして更に、図１７（Ａ）の構成においても、アップカウントする出力停止用アップカウンタ６３のカウント値と第２設定レジスタ６２の値とが一致すると信号ＯＵＴ２の出力を停止するものであるため、信号ＯＵＴ２の出力が開始されてからでも出力停止時間ＴｉＭ２を再設定すること（設定し直すこと）が可能である。
【０１５６】
次に、カウンタ処理部１５がクランクカウンタ１１を使用して、基準位置信号ＴＤＣと表裏信号Ｇ２（請求項１８の出力信号に相当）とを出力する機能について、図１８〜図２０に基づき説明する。
【０１５７】
尚、基準位置信号ＴＤＣは、クランク角が特定の基準角度であることをＣＰＵ２３等に示すための信号であり、本実施形態では、図２に示すように、３６０°ＣＡ毎に且つ３０°ＣＡ分の期間だけローレベルとなる。また、表裏信号Ｇ２は、図２に示すように、例えば３６０°ＣＡ毎に反対のレベルになる気筒判別用の信号である。そして、ＣＰＵ２３は、この表裏信号Ｇ２と基準位置信号ＴＤＣとの組み合わせによって（例えば、基準位置信号ＴＤＣがローレベルになったときの表裏信号Ｇ２のレベルによって）、エンジンのどの気筒がどの行程になっているかを判別するようになっている。また、このような気筒判別の技術は周知であり、例えば特開２００１−９０６００号公報等に記載されている。
【０１５８】
まず図１８に示すように、  カウンタ処理部１５は、基準位置信号ＴＤＣを出力するために、図３に示した分周カウンタ３６及び基準設定レジスタ４６に加えて、更に基準位置信号出力部７１を備えている。
【０１５９】
そして、基準設定レジスタ４６には、基準位置信号ＴＤＣの出力タイミングを示す値がセットされるようになっている。
そして更に、基準位置信号出力部７１は、分周カウンタ３６の値（カウント値）と基準設定レジスタ４６の値とを比較して、図２０に例示するように、その両値が一致している間は、基準位置信号ＴＤＣをローレベルで出力し、逆に、分周カウンタ３６のカウント値と基準設定レジスタ４６の値とが一致していない場合には、基準位置信号ＴＤＣをハイレベルで出力する。尚、図２０は、基準設定レジスタ４６に「１」がセットされた場合の動作を表している。
【０１６０】
このような構成によれば、基準設定レジスタ４６にセットしておく値により、基準位置信号ＴＤＣがローレベルとなるクランク角の期間を任意に設定することができる。よって、本マイコン３を様々なシステムに適用することができるようになる。
【０１６１】
尚、基準設定レジスタ４６には、例えばＣＰＵ２３が動作開始直後に実行する初期化処理によって値をセットするように構成すれば良い。また、図１８の基準位置信号出力部７１には、分周カウンタ３６のカウント値に代えて、上位カウンタ１１ａのカウント値を入力するようにしても良い。そして、このように変形すれば、上位カウンタ１１ａの値と基準設定レジスタ４６の値とが一致している間、基準位置信号ＴＤＣがローレベルとなり、逆に、上位カウンタ１１ａの値と基準設定レジスタ４６の値とが一致していない場合には、基準位置信号ＴＤＣがハイレベルとなる。また更に、基準位置信号出力部７１が出力する基準位置信号ＴＤＣのレベルは、前述したものと逆であっても良い。
【０１６２】
次に図１９に示すように、カウンタ処理部１５は、表裏信号Ｇ２を出力するために、図３に示した分周カウンタ３６，第１のタイミング設定レジスタ４７，及び第２のタイミング設定レジスタ４８に加えて、更に、２つの比較部７２，７３と、表裏信号Ｇ２を出力する出力部７４とを備えている。
【０１６３】
そして、第１のタイミング設定レジスタ４７と第２のタイミング設定レジスタ４８との各々には、表裏信号Ｇ２の反転タイミングを示す値がそれぞれセットされるようになっている。
【０１６４】
また、比較部７２は、第１のタイミング設定レジスタ４７の値と分周カウンタ３６の値とを比較して、両値が一致するとハイレベルの信号を出力し、比較部７３は、第２のタイミング設定レジスタ４８の値と分周カウンタ３６の値とを比較して、両値が一致するとハイレベルの信号を出力する。
【０１６５】
そして、出力部７４は、セット端子（Ｓ）にハイレベルの信号が入力されると、表裏信号Ｇ２の出力レベルをローにし、リセット端子（Ｒ）にハイレベルの信号が入力されると、表裏信号Ｇ２の出力レベルをハイにする。そして更に、出力部７４のセット端子には、比較部７２の出力が入力され、出力部７４のリセット端子には、比較部７３の出力が入力されるようになっている。
【０１６６】
このため、分周カウンタ３６の値が第１のタイミング設定レジスタ４７の値と一致すると、比較部７２から出力部７４のセット端子にハイレベルの信号が入力されて、出力部７４から出力される表裏信号Ｇ２がローレベルになり、また、分周カウンタ３６の値が第２のタイミング設定レジスタ４８の値と一致すると、比較部７３から出力部７４のリセット端子にハイレベルの信号が入力されて、出力部７４から出力される表裏信号Ｇ２がハイレベルになる。
【０１６７】
よって、第１のタイミング設定レジスタ４７と第２のタイミング設定レジスタ４８とに異なる値をセットしておけば、図２０に示すように、分周カウンタ３６の値が第１のタイミング設定レジスタ４７の値と一致したタイミングで、表裏信号Ｇ２の出力レベルがローレベルとなり、その後、分周カウンタ３６の値が第２のタイミング設定レジスタ４８の値と一致したタイミングで、表裏信号Ｇ２の出力レベルがハイレベルとなる。尚、図２０は、第１のタイミング設定レジスタ４７に「１」がセットされ、第２のタイミング設定レジスタ４８に「３」がセットされた場合の動作を表している。
【０１６８】
そして、この構成によれば、第１のタイミング設定レジスタ４７と第２のタイミング設定レジスタ４８とにセットしておく各値により、表裏信号Ｇ２の反転タイミングを任意のクランク角に設定することができる。よって、本マイコン３を様々なシステムに適用することができるようになる。
【０１６９】
尚、第１及び第２のタイミング設定レジスタ４７，４８には、前述した基準設定レジスタ４６と同様に、ＣＰＵ２３が動作開始直後に実行する初期化処理によって値をセットするように構成すれば良い。また、図１９の両比較部７２，７３には、分周カウンタ３６のカウント値に代えて、上位カウンタ１１ａのカウント値を入力するようにしても良い。そして、このように変形すれば、上位カウンタ１１ａの値が第１のタイミング設定レジスタ４７の値と一致したタイミングで、表裏信号Ｇ２の出力レベルがローレベルとなり、上位カウンタ１１ａの値が第２のタイミング設定レジスタ４８の値と一致したタイミングで、表裏信号Ｇ２の出力レベルがハイレベルとなる。また更に、出力部７４が出力する表裏信号Ｇ２のレベルは、前述したものと逆であっても良い。
【０１７０】
次に、図１では図示を省略しているが、信号処理部１３には、クランクカウンタ１１を使用してＡＤ変換器２９を起動するために、図２１に示す如く、ＡＤ設定レジスタ７６とＡＤ起動部７７とが備えられている。
【０１７１】
そして、ＡＤ設定レジスタ７６には、ＡＤ変換器２９の起動タイミングを示す値がセットされる。
そして更に、ＡＤ起動部７７は、クランクカウンタ１１の値とＡＤ設定レジスタ７６の値とを比較して、クランクカウンタ１１の値がＡＤ設定レジスタ７６の値に達すると（本実施形態では、クランクカウンタ１１の値がＡＤ設定レジスタ７６の値以上になると）、ＡＤ変換器２９を起動する。
【０１７２】
このため、ＣＰＵ２３のソフト処理でＡＤ設定レジスタ７６にセットする値により、任意のクランク角のタイミングでＡＤ変換器２９を起動することができる。
次に、信号処理部１３に備えられた第２カウンタ２１について説明する。
【０１７３】
図２２に示すように、第２カウンタ２１は、欠歯判定部１７から欠歯検出信号が出力された直後のクランク信号の立ち上がりタイミング（即ち、欠歯部Ｋであると判定されたパルス間隔の終了タイミング）でカウント値が０にクリアされ、以降、クランク信号の立ち上がりエッジでカウントアップされる。
【０１７４】
また更に、第２カウンタ２１は、図２３に示すように、ラップラウンドはせず、該第２カウンタ２１のカウント値は、所定の最大値（ＭＡＸ値）までカウントアップすると、その最大値で止まるようになっている。このため、図２３における点線の楕円内に示すように、もし、欠歯判定部１７による欠歯部Ｋの判定抜け（本当は欠歯部Ｋであるのに欠歯部Ｋと判定し損ねること）が起こっても、第２カウンタ２１のカウント値は最大値で止まり、その次の欠歯部Ｋが欠歯判定部１７により検出されると、その欠歯部Ｋの終了タイミングに相当するクランク信号の立ち上がりエッジで０にクリアされることとなる。
【０１７５】
次に、第２カウンタ２１を使用したマイコン３における機能について、図２４〜図２７を用い説明する。
まず、本マイコン３では、上記のような第２カウンタ２１を備えているため、クランクカウンタ１１の補正（尚、本マイコン３では、クランクカウンタ１１のうちの上位カウンタ１１ａの補正）を、その第２カウンタ２１のカウント値に基づき任意のタイミングで行うことができる。つまり、第２カウンタ２１を備えていれば、その第２カウンタ２１のカウント値から、クランクカウンタ１１のとるべき正しい値を特定できるため、第２カウンタ２１が所望の値になったタイミングでクランクカウンタ１１の補正を行うことができる。
【０１７６】
そこで、図２４に示すように、カウンタ処理部１５には、クランクカウンタ１１の上位カウンタ１１ａをハード的に補正するために、図３に示した補正値設定レジスタ３７ｂ及び補正位置設定レジスタ４４に加えて、更に書き換え部７９が備えられている。
【０１７７】
そして、書き換え部７９は、第２カウンタ２１のカウント値が補正位置設定レジスタ４４の値と一致すると、クランクカウンタ１１のうちの上位カウンタ１１ａのカウント値を補正値設定レジスタ３７ｂにセットされている値に変更する（書き換える）。尚、第２カウンタ２１と補正位置設定レジスタ４４とのビット数は、例えば６ビットである。
【０１７８】
この構成によれば、補正位置設定レジスタ４４にセットする値によって、補正の実施タイミングを任意に設定することができる。そして、補正値設定レジスタ３７ｂには、その補正実施タイミングでとるべき上位カウンタ１１ａの正しい値をセットすれば良い。また、各レジスタ３７ｂ，４４には、ＣＰＵ２３によるソフト処理で所望の値をセットすれば良い。
【０１７９】
また更に、もし、欠歯判定部１７による欠歯部Ｋの判定抜けが起こったとしても、図２３を参照して説明したように、第２カウンタ２１のカウント値は最大値で止まって０には戻らないため、図２４のハード構成による上位カウンタ１１ａの補正が誤ったクランク角の位置で実施されてしまうことを防止できる。
【０１８０】
次に、図２５（Ａ）に示すように、カウンタ処理部１５は、図３に示したキャプチャレジスタ４５に加えて、更に、キャプチャ制御部８１とキャプチャ有無フラグ８２とを備えている。
【０１８１】
そして、キャプチャ制御部８１は、図２５（Ｂ）に示すように、カム軸センサ９からのＧ信号の発生タイミング（本実施形態では、Ｇ信号の立ち上がりタイミング）で、第２カウンタ２１のカウント値をキャプチャレジスタ４５に転送して記憶させる（キャプチャする）と共に、キャプチャ有無フラグ８２にキャプチャ有りを示す１をセットする。
【０１８２】
また、ＣＰＵ２３によるソフト処理では、キャプチャ有無フラグ８２を読み込んで、そのフラグ８２が立っていれば（１であれば）、キャプチャレジスタ４５の値を読み込み、その値（即ち、Ｇ信号が発生した時の第２カウンタ２１のカウント値）から、Ｇ信号が所定の気筒判別区間内に発生したか否かを判定するようになっている。つまり、Ｇ信号は、図２に例示しているように、クランク信号の何れかの欠歯部Ｋから、あるクランク角の範囲内で発生するため、キャプチャレジスタ４５に記憶されていた値が、そのクランク角の範囲内に相当する数値範囲内ならば、Ｇ信号が気筒判別区間内に発生したと判定する。
【０１８３】
そして、この構成によれば、Ｇ信号が気筒判別区間内に発生したか否かを簡単且つ正確に判定することができる。キャプチャレジスタ４５の値を、実際の気筒判別区間が過ぎてから読み取っても、その読み取った値から、Ｇ信号が気筒判別区間内に発生したか否かを正確に判定できるからである。尚、Ｇ信号が気筒判別区間内に発生しなかったと判定した場合には、何らかの異常が生じていると考えられることから、ＣＰＵ２３は、車両を安全に走行させるためのフェイルセーフ処理を行う。また、キャプチャ有無フラグ８２は、ＣＰＵ２３がキャプチャレジスタ４５から値を読み出した際に、キャプチャ無しを示す０にクリアすれば良い。
【０１８４】
次に、図２６に示すように、欠歯判定部１７には、欠歯判定比として使用される値（即ち、欠歯判定比の候補値）がそれぞれ格納される第１判定比設定レジスタ８５及び第２判定比設定レジスタ８６が設けられている。また、欠歯判定部１７には、第１判定比設定レジスタ８５の値が欠歯判定比として使用される第１期間と、第２判定比設定レジスタ８６の値が欠歯判定比として使用される第２期間とを設定するための開始位置指定レジスタ８７及びオフセット指定レジスタ８８が設けられている。更に、欠歯判定部１７には、当該欠歯判定部１７の動作パターン（欠歯検出パターン）を設定するための欠歯検出パターン選択レジスタ８９が設けられている。
【０１８５】
ここで、欠歯検出パターン選択レジスタ８９は、図２６及び図２７に示すように、２ビットからなり、その上位ビット（図における左側のビット）は、指定期間としての第２期間を設けるか否かを決めるための指定区間有効／無効フラグになっている。そして、欠歯検出パターン選択レジスタ８９の下位ビット（図における右側のビット）は、第２期間での欠歯検出を禁止するか否かを決めるための指定区間検出禁止フラグになっている。
【０１８６】
また、開始位置指定レジスタ８７には、上記第２期間の開始タイミング（つまり、第１期間から第２期間に変化するタイミング）となるべき第２カウンタ２１の値がセットされ、オフセット指定レジスタ８８には、第２期間の開始タイミングから該第２期間が終了するまで（つまり、第２期間が開始されてから第１期間に移るまで）のクランク信号のパルス数がセットされる。
【０１８７】
そして、欠歯判定部１７は、図２７における（１）に示すように、欠歯検出パターン選択レジスタ８９の上位ビットである指定区間有効／無効フラグが無効を示す０に設定されている場合には、常に第１判定比設定レジスタ８５の値Ｒ１を欠歯判定比として、前述した欠歯検出動作を行うようになっている。つまり、第２期間が設けられず、常に第１期間となる。
【０１８８】
また、欠歯判定部１７は、図２７における（２）に示すように、欠歯検出パターン選択レジスタ８９の指定区間有効／無効フラグが有効を示す１に設定され、且つ、欠歯検出パターン選択レジスタ８９の下位ビットである指定区間検出禁止フラグが非禁止を示す０に設定されている場合には、第２カウンタ２１のカウント値が開始位置指定レジスタ８７の値Ｒａと一致した時点から、クランク信号の立ち上がりエッジがオフセット指定レジスタ８８の値Ｒｂだけ発生するまでの間、第２判定比設定レジスタ８６の値Ｒ２を欠歯判定比として欠歯検出動作を行い、その後、再び第２カウンタ２１のカウント値が開始位置指定レジスタ８７の値Ｒａと一致するまでは、第１判定比設定レジスタ８５の値Ｒ１を欠歯判定比として欠歯検出動作を行うようになっている。つまり、第２カウンタ２１のカウント値が開始位置指定レジスタ８７の値Ｒａと一致した時点からクランク信号の立ち上がりエッジがオフセット指定レジスタ８８の値Ｒｂだけ発生するまでの期間が第２期間となり、それ以外の期間が第１期間となる。
【０１８９】
一方、欠歯判定部１７は、図２７における（３）に示すように、欠歯検出パターン選択レジスタ８９の指定区間有効／無効フラグが有効を示す１に設定され、且つ、欠歯検出パターン選択レジスタ８９の指定区間検出禁止フラグが禁止を示す１に設定されている場合には、第２カウンタ２１のカウント値が開始位置指定レジスタ８７の値Ｒａと一致した時点から、クランク信号の立ち上がりエッジがオフセット指定レジスタ８８の値Ｒｂだけ発生するまでの間、欠歯検出動作を行わず、その後、再び第２カウンタ２１のカウント値が開始位置指定レジスタ８７の値Ｒａと一致するまでは、第１判定比設定レジスタ８５の値Ｒ１を欠歯判定比として欠歯検出動作を行うようになっている。つまり、図２７における（２）の場合と比較すると、第２カウンタ２１のカウント値が開始位置指定レジスタ８７の値Ｒａと一致した時点からクランク信号の立ち上がりエッジがオフセット指定レジスタ８８の値Ｒｂだけ発生するまでの第２期間において、当該（３）の場合では、欠歯検出動作が禁止されるようになっている。
【０１９０】
そして、本実施形態のエンジンＥＣＵ１では、第２判定比設定レジスタ８６にセットする値Ｒ２を、第１判定比設定レジスタ８５にセットする値Ｒ１よりも大きい値（即ち、欠歯判定部１７が欠歯部Ｋと判定し難くなる値）にすると共に、欠歯検出パターン選択レジスタ８９を、図２７（２）に示す如く、指定区間有効／無効フラグ＝１且つ指定区間検出禁止フラグ＝０の状態にセットし、更に、開始位置指定レジスタ８７とオフセット指定レジスタ８８には、クランク信号の欠歯部Ｋを含む該欠歯部Ｋ付近の期間が第１期間となり、それ以外の期間が第２期間となるような値をそれぞれセットしている。例えば、図２７に示すように、開始位置指定レジスタ８７の値Ｒａを“１”にし、オフセット指定レジスタ８８の値Ｒｂを“３２”にしている。
【０１９１】
このため、図２７（２）に示すように、クランク信号の欠歯部Ｋ付近の期間（第１期間）での欠歯判定比Ｒ１よりも、それ以外の期間（第２期間）での欠歯判定比Ｒ２の方が大きい値になる。よって、エンジンの急な加減速が生じても、クランク信号の通常のパルス間隔を欠歯部Ｋであると誤判定（欠歯誤判定）してしまうことを効果的に防止することができる。尚、上記各レジスタ８５〜８９には、例えばＣＰＵ２３が動作開始直後に実行する初期化処理によって値をセットすれば良い。
【０１９２】
そして更に、本実施形態では、開始位置指定レジスタ８７とオフセット指定レジスタ８８とによって、第１期間と第２期間とを自由に設定することができる上に、第２期間の幅を、その第２期間の開始タイミングからのオフセットで指定する構成であるため、例えば、万一、第２期間中に（つまり、第２カウンタ２１のカウント値が開始位置指定レジスタ８７の値Ｒａと一致した後に）欠歯誤判定が起こって第２カウンタ２１のカウント値が０に戻ってしまったとしても、それには影響されずに第２期間を適切なタイミングで終了させることができる。また、仮に第２期間の終了タイミングの方も、そのタイミングに該当する第２カウンタ２１の値で設定するように構成した場合、第２期間の開始と終了の設定値が逆転した場合の保護策を講じる必要が生じるが、本実施形態では、そのような保護策が不要なため、回路構成を簡素化することができる。
【０１９３】
一方、欠歯検出パターン選択レジスタ８９を、図２７（３）に示す如く、指定区間有効／無効フラグ＝１且つ指定区間検出禁止フラグ＝１の状態にセットして、第２カウンタ２１のカウント値が開始位置指定レジスタ８７の値Ｒａと一致した時点からクランク信号の立ち上がりエッジがオフセット指定レジスタ８８の値Ｒｂだけ発生するまでの期間は、欠歯判定部１７の欠歯検出動作が禁止されるように設定することも可能であり、このように設定すれば、欠歯誤判定を一層確実に防止することができる。
【０１９４】
また、欠歯判定比を切り換えないのであれば、図２７（１）のように、欠歯検出パターン選択レジスタ８９の指定区間有効／無効フラグを０に設定しておけば良い。
ところで、欠歯判定部１７の欠歯検出パターンを図２７（２）のパターンに設定した場合、開始位置指定レジスタ８７とオフセット指定レジスタ８８には、クランク信号の欠歯部Ｋを含む複数パルス間隔分の期間が第１期間となるような値をセットしておくことが望ましい。例えば、万一、ノイズによってクランク信号の立ち上がりエッジが幾つか潰されてしまった場合でも、本当の欠歯部Ｋが到来する前に第２期間を終了させることができ、その本当の欠歯部Ｋの期間において第１判定比設定レジスタ８５の値（即ち、欠歯部と判定し易くなる値）Ｒ１を欠歯判定比として使用することができるからである。
【０１９５】
また、本エンジンＥＣＵ１が起動してから１回目の欠歯検出が行われるまでは、欠歯判定比の変更を実施せず、第１判定比設定レジスタ８５の値Ｒ１のみを欠歯判定比として使用するように構成することが好ましい。１回目の欠歯検出が行われるまでは、どのタイミングで欠歯部Ｋが発生するのか予想できず、欠歯判定比の変更タイミングを適切なものにすることができないからである。
【０１９６】
以上、本発明の一実施形態について説明したが、本発明はこうした実施形態に何等限定されるものではなく、本発明の要旨を逸脱しない範囲において、種々なる態様で実施し得ることは勿論である。
【０１９７】
例えば、上記実施形態では、ＡＤ変換器２９を、入力回路５を介して入力される外部からのアナログ信号をマイコン３内に取り込んで処理するためのものとしたが、ＡＤ変換器２９は、エンジンＥＣＵ１内で発生する電源電圧等のアナログ信号をマイコン３内に取り込むために用いても良い。
【図面の簡単な説明】
【０１９８】
【図１】実施形態のエンジンＥＣＵ（エンジン制御装置）の構成を表す構成図である。
【図２】エンジンＥＣＵでのクランク信号に関する全体動作を表すタイムチャートである。
【図３】カウンタ処理部の主要部を表す構成図である。
【図４】クランクカウンタのカウント動作を表す説明図である。
【図５】カウンタ処理部が行う上位カウンタの上限値補正動作を説明する説明図である。
【図６】カウンタ処理部が行う上位カウンタの補正動作を説明する説明図である。
【図７】クランク信号の欠歯部でクランクカウンタ（上位カウンタ及び下位カウンタ）をカウントアップさせる動作を表す第１のタイムチャートである。
【図８】クランク信号の欠歯部でクランクカウンタ（上位カウンタ及び下位カウンタ）をカウントアップさせる動作を表す第２のタイムチャートである。
【図９】ＣＰＵが、欠歯判定部によってクランク信号の欠歯部が検出されると実行する処理の内容を表すフローチャートである。
【図１０】図９の処理の作用を表すタイムチャートである。
【図１１】カウンタ処理部の動作内容を表すフローチャートである。
【図１２】単一欠歯が発生する際のカウンタ処理部の動作を説明するタイムチャートである。
【図１３】連続欠歯が発生する際のカウンタ処理部の動作を説明するタイムチャートである。
【図１４】クランク信号の複数個の周期から逓倍クロックを生成する動作を説明する第１のタイムチャートである。
【図１５】クランク信号の複数個の周期から逓倍クロックを生成する動作を説明する第２のタイムチャートである。
【図１６】信号出力部の第１の機能を説明する説明図である。
【図１７】信号出力部の第２の機能を説明する説明図である。
【図１８】カウンタ処理部のうち、基準位置信号を出力するための構成を表すブロック図である。
【図１９】カウンタ処理部のうち、表裏信号を出力するための構成を表すブロック図である。
【図２０】図１８及び図１９の構成の作用を表すタイムチャートである。
【図２１】クランクカウンタを使用してＡＤ変換器を起動するための構成を表すブロック図である。
【図２２】第２カウンタのカウント動作を表すタイムチャートである。
【図２３】第２カウンタの最大値ガード機能を説明するタイムチャートである。
【図２４】カウンタ処理部のうち、クランクカウンタの上位カウンタをハード的に補正するための構成を表すブロック図である。
【図２５】カウンタ処理部のうち、第２カウンタのカウント値をキャプチャするための構成を表すブロック図である。
【図２６】欠歯判定部に設けられたレジスタを表す説明図である。
【図２７】図２６のレジスタの役割及び欠歯判定部の作用を説明する説明図である。
【図２８】従来技術を説明する第１の説明図である。
【図２９】従来技術を説明する第２の説明図である。
【符号の説明】
【０１９９】
１…エンジンＥＣＵ（エンジン制御装置）、３…マイコン、５…入力回路、６…出力回路、７…クランク軸センサ、９…カム軸センサ、１１…クランクカウンタ、１１ａ…上位カウンタ、１１ｂ…下位カウンタ、１３…信号処理部、１５…カウンタ処理部、１７…欠歯判定部、１９…信号出力部、２１…第２カウンタ、２３…ＣＰＵ、２５…ＲＯＭ、２７…ＲＡＭ、２９…ＡＤ変換器、３１…Ｉ／Ｏポート、３３…パルス間隔計測部、３５…逓倍クロック生成部、３６…分周カウンタ、３７ａ，３７ｂ…補正値設定レジスタ、３８…上限値設定レジスタ、３９…第１周期レジスタ、４０…第２周期レジスタ、４１…キャリー許可開始位置レジスタ、４２…第１のキャリー許可後上位設定レジスタ、４３…第２のキャリー許可後上位設定レジスタ、４４…補正位置設定レジスタ、４５…キャプチャレジスタ、４６…基準設定レジスタ、４７…第１のタイミング設定レジスタ、４８…第２のタイミング設定レジスタ、５１…オンタイミング設定レジスタ、５２…オフタイミング設定レジスタ、５３…出力ガードタイミング設定レジスタ、５４…出力ガード用アップカウンタ、５５〜５７，６４，６５，７２，７３…比較部、５８…オア回路、５９，６６，７４…出力部、６１…第１設定レジスタ、６２…第２設定レジスタ、６３…出力停止用アップカウンタ、７１…基準位置信号出力部、７６…ＡＤ設定レジスタ、７７…ＡＤ起動部、７９…書き換え部、８１…キャプチャ制御部、８２…キャプチャ有無フラグ、８５…第１判定比設定レジスタ、８６…第２判定比設定レジスタ、８７…開始位置指定レジスタ、８８…オフセット指定レジスタ、８９…欠歯検出パターン選択レジスタ
【図１】
2005133614.tif 000003
【図２】
2005133614.tif 000004
【図３】
2005133614.tif 000005
【図４】
2005133614.tif 000006
【図５】
2005133614.tif 000007
【図６】
2005133614.tif 000008
【図７】
2005133614.tif 000009
【図８】
2005133614.tif 000010
【図９】
2005133614.tif 000011
【図１０】
2005133614.tif 000012
【図１１】
2005133614.tif 000013
【図１２】
2005133614.tif 000014
【図１３】
2005133614.tif 000015
【図１４】
2005133614.tif 000016
【図１５】
2005133614.tif 000017
【図１６】
2005133614.tif 000018
【図１７】
2005133614.tif 000019
【図１８】
2005133614.tif 000020
【図１９】
2005133614.tif 000021
【図２０】
2005133614.tif 000022
【図２１】
2005133614.tif 000023
【図２２】
2005133614.tif 000024
【図２３】
2005133614.tif 000025
【図２４】
2005133614.tif 000026
【図２５】
2005133614.tif 000027
【図２６】
2005133614.tif 000028
【図２７】
2005133614.tif 000029
【図２８】
2005133614.tif 000030
【図２９】
2005133614.tif 000031