(57)【要約】【課題】  クランク信号が異常時のリンプホームを、少ないソフト、ハードの追加で実現する。【解決手段】  端子２０への入力信号に生じる立ち上がりエッジの間隔を計測すると共に、その計測値を所定の逓倍数で割った時間を１周期とするクロックを生成して、そのクロックにより、クランク位置を表すアングルカウンタを動作させる回路１９を備え、上記アングルカウンタの値に基づきエンジンの制御を実施する装置では、マイコン１３が、クランク信号が異常と判定すると、入力制御回路１７から上記回路１９へクランク信号に代えてカム信号を入力させ、更に、そのカム信号に基づいて、アングルカウンタの値を初期化すると共に、上記逓倍数をカム信号の波形パターンに応じた規則で変化させることで、アングルカウンタの値を、クランク信号が正常な場合と同様に変移させる。このため、正常時と同じ制御プログラムでエンジンを制御できる。【選択図】  図１
2006200484.tif 000002
【特許請求の範囲】
【請求項１】
入力端子からの入力信号に特定方向のパルスエッジ（以下、特定エッジという）が発生してから該特定エッジが次に発生するまでの間隔（以下、パルスエッジ間隔という）毎に、そのパルスエッジ間隔を計測する計測手段と、
エンジンのクランク軸の回転に応じて所定角度毎にパルスエッジが発生するクランク信号を、前記計測手段の入力端子へ、前記所定角度毎のパルスエッジが発生したときに前記特定エッジが発生する信号として入力させる入力手段と、
前記計測手段による前記パルスエッジ間隔の計測値を所定の逓倍数で割った時間毎に、その時間を１周期とする逓倍クロックを出力する逓倍クロック出力手段と、
前記逓倍クロックによりカウント動作し、そのカウント値が、前記エンジンの１サイクルにおける前記クランク軸の回転位置であるクランク位置を前記所定角度よりも小さい分解能で表す角度カウンタと、
を備え、前記角度カウンタのカウント値に基づいてエンジンの制御を実施するエンジン制御装置において、
前記入力手段は、前記クランク信号に代えて、前記エンジンのカム軸の回転に応じてハイレベルとローレベルとに変化するカム信号を、前記計測手段の入力端子へ入力させることが可能に構成されており、
更に、前記クランク信号が異常であるか否かを判定する異常判定手段と、
前記異常判定手段により前記クランク信号が異常であると判定されると、前記入力手段に、前記クランク信号に代えて、前記カム信号を前記計測手段の入力端子へ入力させる入力切替制御手段と、
前記カム信号が前記計測手段の入力端子に入力された場合に、前記カム信号に基づいてクランク位置を特定し、その特定したクランク位置に基づいて、前記角度カウンタのカウント値を初期化すると共に、前記逓倍クロック出力手段での前記逓倍数を前記カム信号の波形パターンに応じて定められた規則で変化させることにより、前記角度カウンタのカウント値を、前記入力端子に前記クランク信号が入力される場合と同様に変移させる異常時カウント制御手段と、
を備えていることを特徴とするエンジン制御装置。
【請求項２】
請求項１に記載のエンジン制御装置において、
前記入力手段は、前記カム信号に立ち上がりエッジと立ち下がりエッジとのそれぞれが発生したときに前記特定エッジが発生する信号を生成し、その信号を、前記カム信号として前記計測手段の入力端子へ入力するように構成されていること、
を特徴とするエンジン制御装置。
【請求項３】
請求項１に記載のエンジン制御装置において、
前記エンジンは少なくとも２本のカム軸を有しており、
前記入力手段は、前記２本のカム軸のうちの一方のカム軸の回転に応じてハイレベルとローレベルとに変化する第１カム信号と、他方のカム軸の回転に応じてハイレベルとローレベルとに変化する第２カム信号とのオア信号を、前記クランク信号に代わるカム信号として前記計測手段の入力端子へ入力するように構成されていること、
を特徴とするエンジン制御装置。
【請求項４】
請求項３に記載のエンジン制御装置において、
前記入力手段は、前記第１カム信号に立ち上がりエッジと立ち下がりエッジとのそれぞれが発生したときに前記特定エッジが発生する第１エッジ化信号と、前記第２カム信号に立ち上がりエッジと立ち下がりエッジとのそれぞれが発生したときに前記特定エッジが発生する第２エッジ化信号とを生成すると共に、その両エッジ化信号のオア信号を、前記第１カム信号と前記第２カム信号とのオア信号として、前記計測手段の入力端子へ入力するように構成されていること、
を特徴とするエンジン制御装置。
【請求項５】
請求項３に記載のエンジン制御装置において、
前記入力手段は、前記クランク信号に代わる信号として、前記第１カム信号と、前記第２カム信号と、その両カム信号のオア信号とを、切り替えて前記計測手段の入力端子へ入力させることが可能に構成されており、
前記異常判定手段は、前記第１カム信号と前記第２カム信号とのそれぞれについても、異常であるか否かを判定するように構成されており、
更に、前記入力切替制御手段は、
前記異常判定手段により前記クランク信号が異常であり前記第１カム信号と前記第２カム信号とが正常であると判定された場合には、前記入力手段に、前記クランク信号に代えて、前記オア信号を前記計測手段の入力端子へ入力させ、前記異常判定手段により前記クランク信号と前記第２カム信号とが異常であり前記第１カム信号が正常であると判定された場合には、前記入力手段に、前記クランク信号に代えて、前記第１カム信号を前記計測手段の入力端子へ入力させ、前記異常判定手段により前記クランク信号と前記第１カム信号とが異常であり前記第２カム信号が正常であると判定された場合には、前記入力手段に、前記クランク信号に代えて、前記第２カム信号を前記計測手段の入力端子へ入力させるように構成されており、
前記異常時カウント制御手段は、
前記オア信号が前記計測手段の入力端子に入力された場合には、前記第１カム信号と前記第２カム信号との少なくとも一方に基づいてクランク位置を特定し、その特定したクランク位置に基づいて、前記角度カウンタのカウント値を初期化すると共に、前記逓倍クロック出力手段での前記逓倍数を前記オア信号の波形パターンに応じて定められた規則で変化させることにより、前記角度カウンタのカウント値を、前記入力端子に前記クランク信号が入力される場合と同様に変移させ、前記第１カム信号が前記計測手段の入力端子に入力された場合には、前記第１カム信号に基づいてクランク位置を特定し、その特定したクランク位置に基づいて、前記角度カウンタのカウント値を初期化すると共に、前記逓倍クロック出力手段での前記逓倍数を前記第１カム信号の波形パターンに応じて定められた規則で変化させることにより、前記角度カウンタのカウント値を、前記入力端子に前記クランク信号が入力される場合と同様に変移させ、前記第２カム信号が前記計測手段の入力端子に入力された場合には、前記第２カム信号に基づいてクランク位置を特定し、その特定したクランク位置に基づいて、前記角度カウンタのカウント値を初期化すると共に、前記逓倍クロック出力手段での前記逓倍数を前記第２カム信号の波形パターンに応じて定められた規則で変化させることにより、前記角度カウンタのカウント値を、前記入力端子に前記クランク信号が入力される場合と同様に変移させるように構成されていること、
を特徴とするエンジン制御装置。
【請求項６】
請求項５に記載のエンジン制御装置において、
前記入力手段は、前記第１カム信号に立ち上がりエッジと立ち下がりエッジとのそれぞれが発生したときに前記特定エッジが発生する第１エッジ化信号と、前記第２カム信号に立ち上がりエッジと立ち下がりエッジとのそれぞれが発生したときに前記特定エッジが発生する第２エッジ化信号とを生成すると共に、その両エッジ化信号のオア信号を、前記第１カム信号と前記第２カム信号とのオア信号として前記計測手段の入力端子へ入力し、前記第１エッジ化信号を、前記第１カム信号として前記計測手段の入力端子へ入力し、前記第２エッジ化信号を、前記２カム信号として前記計測手段の入力端子へ入力するように構成されていること、
を特徴とするエンジン制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、エンジン制御装置に関するものである。
【背景技術】
【０００２】
従来より、車両のエンジン制御装置では、エンジンのクランク軸の回転に同期して、燃料噴射や点火などを実施している。具体的には、クランク軸の回転に応じて所定角度毎にパルスエッジが発生するクランク信号をクランク軸センサから入力して、そのクランク信号を逓倍した逓倍クロック（詳しくは、周期がクランク信号の周期の逓倍数分の１であるクロック）を生成すると共に、エンジンの１サイクルにおけるクランク軸の回転位置であるクランク位置（いわゆるクランクアングル）を表す角度カウンタを、上記逓倍クロックによりカウント動作させることで、クランク信号にパルスエッジが発生する上記所定角度よりも小さい分解能（詳しくは、上記所定角度／逓倍数の分解能）でクランク位置を把握し、その角度カウンタのカウント値が、あるクランク位置に該当する設定値と一致したら、燃料噴射や点火の出力を行うようにしている（例えば、特許文献１，２参照）。
【０００３】
また、この種のエンジン制御装置では、上記逓倍クロックを生成するための手段として、入力端子からの入力信号に特定方向のパルスエッジ（以下、特定エッジという）が発生してから該特定エッジが次に発生するまでの間隔（以下、パルスエッジ間隔という）毎に、そのパルスエッジ間隔を計測する計測カウンタと、その計測カウンタによるパルスエッジ間隔の計測値を逓倍数で割った時間毎に、その時間を１周期とする逓倍クロックを出力する逓倍カウンタとを備えており、計測カウンタには、クランク信号が、上記所定角度毎のパルスエッジが発生したときに上記特定エッジが発生する信号として入力される。よって、計測カウンタは、クランク信号に所定角度毎のパルスエッジが発生する時間間隔を測定することとなり、逓倍カウンタからは、上記所定角度を逓倍数で割ったクランク角度分に相当する時間毎に逓倍クロックが出力されることとなる。尚、特許文献１，２では、クランク信号における所定角度毎のパルスエッジと、計測カウンタの有効エッジである上記特定エッジとが、同じ方向のエッジであるため、計測カウンタへはクランク信号がそのまま入力されているが、例えば、クランク信号における所定角度毎のパルスエッジと上記特定エッジとが逆方向のエッジであれば、計測カウンタへはクランク信号がレベル反転されて入力されることとなる。
【０００４】
ところで、この種のエンジン制御装置においては、クランク信号が信号線の断線などによって正常に入力されなくなると、逓倍クロックが生成されずに角度カウンタのカウント動作が停止してしまうため、クランク軸の回転に同期した制御を実施することができなくなる。
【０００５】
このため、従来より、エンジン制御装置においては、エンジンのカム軸の回転に応じてハイレベルとローレベルとに変化するカム軸センサからのカム信号を時間基準として燃料噴射や点火を実施するフェイルセーフ用の制御プログラムを予め備えておき、クランク信号の異常を検知した場合には、角度カウンタを参照するクランク角度同期の制御プログラムに代えて、上記フェイルセーフ用の制御プログラムを実行することにより、リンプホーム（退避走行）が可能となるようにしていた。
【０００６】
一方、特許文献３には、クランク軸センサの故障時に、カム信号からクランク信号を模擬した模擬クランク信号を生成し、その模擬クランク信号によりエンジンを制御することが記載されている。
【特許文献１】特開２００１−２００７４７号公報
【特許文献２】特開２００１−２１４７９０号公報
【特許文献３】特開平７−３１０５８２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、カム信号を時間基準としてエンジンの制御を実施するフェイルセーフ用の制御プログラムを別途用意しておく構成では、プログラムを格納するＲＯＭの使用量やソフトウェアの開発工数が増加するという問題がある。
【０００８】
また、特許文献３には、カム信号から模擬クランク信号を生成することは記載されているものの、その模擬クランク信号を生成するための具体的な構成や処理については言及されていない。そして、特許文献３の技術では、カム信号から模擬クランク信号を生成するための専用回路を別途設ける必要があり、ハードウェアの大幅な増加が予想される。
【０００９】
本発明は、こうした問題に鑑みなされたものであり、クランク信号に異常が生じた場合のリンプホームを、より少ないソフトウェア及びハードウェアの追加で実現することを目的としている。
【課題を解決するための手段】
【００１０】
上記目的を達成するためになされた請求項１に記載のエンジン制御装置では、計測手段が、入力端子からの入力信号に特定方向のパルスエッジ（以下、特定エッジという）が発生してから該特定エッジが次に発生するまでの間隔（以下、パルスエッジ間隔という）毎に、そのパルスエッジ間隔を計測し、逓倍クロック出力手段が、計測手段によるパルスエッジ間隔の計測値を所定の逓倍数で割った時間毎に、その時間を１周期とする逓倍クロックを出力する。そして、入力手段が、エンジンのクランク軸の回転に応じて所定角度毎にパルスエッジが発生するクランク信号を、計測手段の入力端子へ、前記所定角度毎のパルスエッジが発生したときに前記特定エッジが発生する信号として入力させる。
【００１１】
このため、計測手段は、クランク信号に所定角度毎のパルスエッジが発生する時間間隔をパルスエッジ間隔として計測することとなり、逓倍クロック出力手段からは、上記所定角度を逓倍数で割ったクランク角度分の時間毎に逓倍クロックが出力されることとなる。
【００１２】
そして、カウント値がクランク位置（エンジンの１サイクルにおけるクランク軸の回転位置）を前記所定角度よりも小さい分解能で表す角度カウンタが、上記逓倍クロック出力手段から出力される逓倍クロックによりカウント動作することとなり、このエンジン制御装置では、その角度カウンタのカウント値に基づいてエンジンの制御を実施する。
【００１３】
ここで特に、請求項１のエンジン制御装置において、入力手段は、クランク信号に代えて、エンジンのカム軸の回転に応じてハイレベルとローレベルとに変化するカム信号を、計測手段の入力端子へ入力させることが可能に構成されている。
【００１４】
そして、請求項１のエンジン制御装置では、異常判定手段が、クランク信号が異常であるか否かを判定し、その異常判定手段によりクランク信号が異常であると判定されると、入力切替制御手段が、入力手段に指令して、クランク信号に代えて、カム信号を計測手段の入力端子へ入力させる。
【００１５】
そして更に、このようにしてカム信号が計測手段の入力端子に入力された場合（つまり、クランク信号が異常の場合）には、異常時カウント制御手段が、カム信号に基づいてクランク位置を特定し、その特定したクランク位置に基づいて、角度カウンタのカウント値を初期化すると共に、逓倍クロック出力手段での逓倍数をカム信号の波形パターンに応じて定められた規則で変化させることにより、角度カウンタのカウント値を、入力端子にクランク信号が入力される場合と同様に変移させる。
【００１６】
このような請求項１のエンジン制御装置によれば、クランク信号に異常が生じても、角度カウンタのカウント値は、クランク信号が正常に入力される場合と同様に変移することとなるため、クランク信号に異常が生じた場合にも、エンジンを正常時と同じ制御プログラム（つまり、角度カウンタを参照するクランク角度同期の制御プログラム）で制御することができる。このため、カム信号を時間基準としてエンジンの制御を実施するフェイルセーフ用の制御プログラムを別途用意しなくても、クランク信号に異常が生じた場合のリンプホームを実現することができる。
【００１７】
その上、クランク信号に異常が生じた場合にも、計測手段、逓倍クロック出力手段、及び角度カウンタを利用しており、追加のハードウェアとしては、入力手段の機能拡張分（即ち、クランク信号とカム信号とを計測手段の入力端子へ切り替えて入力させる構成）だけで済む。
【００１８】
よって、このような請求項１のエンジン制御装置によれば、クランク信号に異常が生じた場合のリンプホームを、より少ないソフトウェア及びハードウェアの追加で実現するこができる。
【００１９】
次に、請求項２のエンジン制御装置では、請求項１のエンジン制御装置において、入力手段は、カム信号に立ち上がりエッジと立ち下がりエッジとのそれぞれが発生したときに前記特定エッジが発生する信号を生成し、その信号を、クランク信号に代わるカム信号として計測手段の入力端子へ入力するように構成されている。
【００２０】
このようなエンジン制御装置によれば、クランク信号が異常になった場合において、クランク軸の回転に同期したエンジンの制御を、より高い精度で実施することができるようになる。
【００２１】
つまり、計測手段の入力端子へカム信号をそのまま入力させる構成と比べると、その入力端子への入力信号に特定エッジが発生する頻度を２倍にすることができ、その特定エッジが発生するクランク角度間隔を小さくすることができる。このため、逓倍クロックの発生間隔（即ち、角度カウンタのカウント間隔）が目標のクランク角度間隔からずれてしまい難くなり、角度カウンタのカウント値と実際のクランク位置とのずれを小さく抑えることができるからである。
【００２２】
次に、請求項３のエンジン制御装置では、請求項１のエンジン制御装置において、エンジンは少なくとも２本のカム軸を有している。そして、入力手段は、その２本のカム軸のうちの一方のカム軸の回転に応じてハイレベルとローレベルとに変化する第１カム信号と、他方のカム軸の回転に応じてハイレベルとローレベルとに変化する第２カム信号とのオア信号を、クランク信号に代わるカム信号として計測手段の入力端子へ入力するように構成されている。
【００２３】
このようなエンジン制御装置によっても、クランク信号が異常になった場合において、クランク軸の回転に同期したエンジンの制御を、より高い精度で実施することができるようになる。
【００２４】
つまり、計測手段の入力端子へ１つのカム信号をそのまま入力させる構成と比べると、その入力端子への入力信号に特定エッジが発生する頻度を増やすことができ、その特定エッジが発生するクランク角度間隔を小さくすることができる。このため、請求項２のエンジン制御装置と同様に、逓倍クロックの発生間隔（即ち、角度カウンタのカウント間隔）が目標のクランク角度間隔からずれてしまい難くなり、角度カウンタのカウント値と実際のクランク位置とのずれを小さく抑えることができるからである。
【００２５】
次に、請求項４のエンジン制御装置では、請求項３のエンジン制御装置において、入力手段は、第１カム信号に立ち上がりエッジと立ち下がりエッジとのそれぞれが発生したときに前記特定エッジが発生する第１エッジ化信号と、第２カム信号に立ち上がりエッジと立ち下がりエッジとのそれぞれが発生したときに前記特定エッジが発生する第２エッジ化信号とを生成すると共に、その両エッジ化信号のオア信号を、第１カム信号と第２カム信号とのオア信号として計測手段の入力端子へ入力するように構成されている。
【００２６】
このようなエンジン制御装置によれば、クランク信号が異常になった場合において、クランク軸の回転に同期したエンジンの制御を、より一層高い精度で実施することができるようになる。これは、請求項２のエンジン制御装置について述べたのと同じ理由による。
【００２７】
次に、請求項５のエンジン制御装置では、請求項３のエンジン制御装置において、入力手段は、クランク信号に代わる信号として、第１カム信号と、第２カム信号と、その両カム信号のオア信号とを、切り替えて計測手段の入力端子へ入力させることが可能に構成されている。また、異常判定手段は、第１カム信号と第２カム信号とのそれぞれについても、異常であるか否かを判定するように構成されている。
【００２８】
そして、入力切替制御手段は、異常判定手段によりクランク信号が異常であり第１カム信号と第２カム信号とが正常であると判定された場合には、入力手段に、クランク信号に代えて、両カム信号のオア信号を計測手段の入力端子へ入力させる。
【００２９】
また、入力切替制御手段は、異常判定手段によりクランク信号と第２カム信号とが異常であり第１カム信号が正常であると判定された場合には、入力手段に、クランク信号に代えて、第１カム信号を計測手段の入力端子へ入力させる。
【００３０】
また、入力切替制御手段は、異常判定手段によりクランク信号と第１カム信号とが異常であり第２カム信号が正常であると判定された場合には、入力手段に、クランク信号に代えて、第２カム信号を計測手段の入力端子へ入力させる。
【００３１】
そして更に、異常時カウント制御手段は、両カム信号のオア信号が計測手段の入力端子に入力された場合には、第１カム信号と第２カム信号との少なくとも一方に基づいてクランク位置を特定し、その特定したクランク位置に基づいて、角度カウンタのカウント値を初期化すると共に、逓倍クロック出力手段での逓倍数を両カム信号のオア信号の波形パターンに応じて定められた規則で変化させることにより、角度カウンタのカウント値を、計測手段の入力端子にクランク信号が入力される場合と同様に変移させる。
【００３２】
また、異常時カウント制御手段は、第１カム信号が計測手段の入力端子に入力された場合には、その第１カム信号に基づいてクランク位置を特定し、その特定したクランク位置に基づいて、角度カウンタのカウント値を初期化すると共に、逓倍クロック出力手段での逓倍数を第１カム信号の波形パターンに応じて定められた規則で変化させることにより、角度カウンタのカウント値を、計測手段の入力端子にクランク信号が入力される場合と同様に変移させる。
【００３３】
また、異常時カウント制御手段は、第２カム信号が計測手段の入力端子に入力された場合には、その第２カム信号に基づいてクランク位置を特定し、その特定したクランク位置に基づいて、角度カウンタのカウント値を初期化すると共に、逓倍クロック出力手段での逓倍数を第２カム信号の波形パターンに応じて定められた規則で変化させることにより、角度カウンタのカウント値を、計測手段の入力端子にクランク信号が入力される場合と同様に変移させる。
【００３４】
このような請求項５のエンジン制御装置によれば、請求項３のエンジン制御装置による効果に加えて、更に、第１カム信号と第２カム信号との何れか一方が異常になった場合でも、エンジンを正常時と同じ制御プログラム（角度カウンタを参照するクランク角度同期の制御プログラム）で制御して、リンプホームを実現することができる。
【００３５】
次に、請求項６のエンジン制御装置では、請求項５のエンジン制御装置において、入力手段は、第１カム信号に立ち上がりエッジと立ち下がりエッジとのそれぞれが発生したときに前記特定エッジが発生する第１エッジ化信号と、第２カム信号に立ち上がりエッジと立ち下がりエッジとのそれぞれが発生したときに前記特定エッジが発生する第２エッジ化信号とを生成すると共に、その両エッジ化信号のオア信号を、第１カム信号と第２カム信号とのオア信号として計測手段の入力端子へ入力し、また、上記第１エッジ化信号を、第１カム信号として計測手段の入力端子へ入力し、また、上記第２エッジ化信号を、第２カム信号として計測手段の入力端子へ入力するように構成されている。
【００３６】
このようなエンジン制御装置によれば、クランク信号が異常で２つのカム信号が正常の場合と、クランク信号及び一方のカム信号が異常になった場合との何れにおいても、クランク軸の回転に同期したエンジン制御の精度を向上させることができる。これは、請求項２のエンジン制御装置について述べたのと同様の理由による。
【発明を実施するための最良の形態】
【００３７】
以下に、本発明が適用された実施形態のエンジン制御装置について説明する。尚、本実施形態のエンジン制御装置は、車両に搭載される例えばＶ型の内燃機関型エンジンを制御するものである。
【００３８】
まず、図１は、実施形態のエンジン制御装置（以下、ＥＣＵという）１１の概略構成を表す構成図である。
図１に示すように、本実施形態のＥＣＵ１１には、マイコン（マイクロコンピュータ）１３と、入力回路１５と、入力制御回路１７と、アングルクロック生成回路１９とが備えられている。
【００３９】
入力回路１５は、クランク軸センサ２１からエンジンのクランク軸の回転に応じて出力されるクランク信号と、第１カム軸センサ２３からエンジンの第１カム軸の回転に応じて出力される第１カム信号（以下、カム信号１という）と、第２カム軸センサ２５からエンジンの第２カム軸の回転に応じて出力される第２カム信号（以下、カム信号２という）とを、それぞれ入力し二値の矩形波に波形整形して出力する。そして、その波形整形後のクランク信号、カム信号１及びカム信号２は、マイコン１３と入力制御回路１７とにそれぞれ入力される。
【００４０】
ここで、クランク軸センサ２１から入力回路１５を介してマイコン１３及び入力制御回路１７に入力されるクランク信号は、図４に示すように、クランク軸の回転位置が３６０°ＣＡ毎（つまり１回転毎）の特定位置に来ていない場合には、クランク軸が１０°回転する毎（１０°ＣＡ毎）にロー→ハイ→ローといった具合にパルス状に変化し、クランク軸の回転位置が上記特定位置に来たときには、有効な立ち下がりエッジの間隔が整数倍（本実施形態では３倍）長くなる。
【００４１】
つまり、クランク信号には、クランク軸の回転位置が３６０°ＣＡ毎の特定位置に来ていない場合には、１０°ＣＡ毎に有効な立ち下がりエッジが発生し、クランク軸の回転位置が３６０°ＣＡ毎の特定位置に来たときには、１０°ＣＡ毎のパルスが所定数（本実施形態では２個）抜けることで立ち下がりエッジの間隔が３０°ＣＡ分の長さになった欠け歯部（以下、欠け歯という）が生じる。
【００４２】
また、本実施形態においては、エンジンの第１気筒の上死点（ＴＤＣ）よりも所定のクランク角度（例えば１０°ＣＡ）だけ前のクランク位置（以下、このクランク位置を＃１ＢＴＤＣと記す）と、その♯１ＢＴＤＣから３６０°ＣＡ後のクランク位置とで、クランク信号に欠け歯の終了に該当する立ち下がりエッジが生じるようになっている。そして、♯１ＢＴＤＣのクランク位置が、クランク信号の基準位置となっている。尚、図４及び以下の説明では、３６０°ＣＡ毎の欠け歯のうち、♯１ＢＴＤＣのクランク位置で終了する欠け歯を「表欠け歯」と言い、その♯１ＢＴＤＣから３６０°ＣＡ後のクランク位置で終了する欠け歯を「裏欠け歯」と言うことにする。
【００４３】
一方、第１カム軸センサ２３と第２カム軸センサ２５との各々から入力回路１５を介してマイコン１３及び入力制御回路１７に入力されるカム信号１とカム信号２は、クランク信号に対して図４に示すような関係にある。
【００４４】
つまり、カム信号１は、＃１ＢＴＤＣよりも９０°ＣＡだけ前のクランク位置（図４にて「Ｐ１」と記したクランク位置）でハイからローに立ち下がると共に、そのＰ１のクランク位置から、９０°ＣＡ分だけロー→３０°ＣＡ分だけハイ→３０°ＣＡ分だけロー→３０°ＣＡ分だけハイ→３０°ＣＡ分だけロー→３０°ＣＡ分だけハイ→３９０°ＣＡ分だけロー→３０°ＣＡ分だけハイ→３０°ＣＡ分だけロー→３０°ＣＡ分だけハイ、というパターンでレベル変化する。そして、カム信号２は、カム信号１に対して位相が３６０°ＣＡ分だけずれた信号となっている。また、本実施形態では、上記Ｐ１のクランク位置が、カム信号１の基準位置となっており、そのＰ１よりも３６０°ＣＡだけずれたクランク位置（図４にて「Ｐ２」と記したクランク位置）が、カム信号２の基準位置となっている。
【００４５】
次に、入力制御回路１７は、概念的には、クランク信号と、カム信号１と、カム信号２と、カム信号１とカム信号２とのオア信号とを、マイコン１３からの制御信号に応じて、アングルクロック生成回路１９の入力端子２０に切り替えて入力させるための回路であり、詳しくは図２のように構成されている。
【００４６】
即ち、入力制御回路１７は、エッジ化部３１と、セレクタ部３３とから構成されているる。
そして、エッジ化部３１は、クランク信号に有効な立ち下がりエッジが発生したときに立ち上がりエッジが発生する信号を生成するための回路として、クランク信号をレベル反転させて出力するインバータ（反転回路）３５と、インバータ３５の出力信号をシステムクロックの１周期分だけ遅らせて出力するシフトレジスタ３６と、シフトレジスタ３６の出力信号をレベル反転させて出力するインバータ３７と、インバータ３５の出力信号とインバータ３７の出力信号とのアンド信号（論理積信号）を出力するアンド回路（論理積回路）３８とを備えている。このため、アンド回路３８からは、クランク信号に立ち下がりエッジが発生すると立ち上がると共に、ハイの時間がシステムクロックの１周期分である信号（以下、クランクエッジ化信号という）が出力されることとなる。
【００４７】
また、エッジ化部３１は、カム信号１に立ち上がりエッジと立ち下がりエッジとのそれぞれが発生したとき（即ち、カム信号１がレベル変化したとき）に立ち上がりエッジが発生する信号を生成するための回路として、カム信号１をシステムクロックの１周期分だけ遅らせて出力するシフトレジスタ３９と、シフトレジスタ３９の出力信号とカム信号１との排他的論理和信号を出力する排他的論理和回路４０とを備えている。このため、排他的論理和回路４０からは、カム信号１に立ち上がりエッジと立ち下がりエッジとのそれぞれが発生すると立ち上がると共に、ハイの時間がシステムクロックの１周期分である信号（第１エッジ化信号に相当し、以下、第１カムエッジ化信号という）が出力されることとなる。
【００４８】
更に、エッジ化部３１は、カム信号２に立ち上がりエッジと立ち下がりエッジとのそれぞれが発生したとき（即ち、カム信号２がレベル変化したとき）に立ち上がりエッジが発生する信号を生成するための回路として、カム信号２をシステムクロックの１周期分だけ遅らせて出力するシフトレジスタ４１と、シフトレジスタ４１の出力信号とカム信号２との排他的論理和信号を出力する排他的論理和回路４２とを備えている。このため、排他的論理和回路４２からは、カム信号２に立ち上がりエッジと立ち下がりエッジとのそれぞれが発生すると立ち上がると共に、ハイの時間がシステムクロックの１周期分である信号（第２エッジ化信号に相当し、以下、第２カムエッジ化信号という）が出力されることとなる。
【００４９】
尚、システムクロックは、ＥＣＵ１１の内部（例えばマイコン１３内）で生成されるクロックである。そして、そのシステムクロックの１周期は、クランク信号の１周期の最小値（つまり、エンジンが最高回転数で運転された場合における１０°ＣＡ分の時間）よりも十分に小さい時間に設定されている。
【００５０】
また、セレクタ部３３は、３入力のオア回路（論理和回路）４３と、アンド回路３８から出力されるクランクエッジ化信号をオア回路４３に入力させるか否かを、マイコン１３からの制御信号に応じて切り替えるスイッチ回路４４と、排他的論理和回路４０から出力される第１カムエッジ化信号をオア回路４３に入力させるか否かを、マイコン１３からの制御信号に応じて切り替えるスイッチ回路４５と、排他的論理和回路４２から出力される第２カムエッジ化信号をオア回路４３に入力させるか否かを、マイコン１３からの制御信号に応じて切り替えるスイッチ回路４６とを備えている。そして、オア回路４３の出力信号が、入力制御回路１７の出力信号として、アングルクロック生成回路１９の入力端子２０に入力される。
【００５１】
このような入力制御回路１７では、マイコン１３からの制御信号により、スイッチ回路４４〜４６のうち、スイッチ回路４４だけがオンされた場合には、図４の下から３段目に示すように、アンド回路３８からのクランクエッジ化信号が、当該入力制御回路１７の出力信号として、アングルクロック生成回路１９の入力端子２０に入力されることとなる。つまり、この場合には、クランク信号とカム信号１とカム信号２とのうち、クランク信号が選択されて、そのクランク信号に立ち下がりエッジが発生するタイミング情報が、アングルクロック生成回路１９に入力されることとなる。
【００５２】
また、マイコン１３からの制御信号により、スイッチ回路４４〜４６のうち、スイッチ回路４６だけがオンされた場合には、図４の最下段に示すように、排他的論理和回路４２からの第２カムエッジ化信号が、当該入力制御回路１７の出力信号として、アングルクロック生成回路１９の入力端子２０に入力されることとなる。つまり、この場合には、クランク信号とカム信号１とカム信号２とのうち、カム信号２が選択されて、そのカム信号２に立ち上がりエッジと立ち下がりエッジとのそれぞれが発生するタイミング情報が、アングルクロック生成回路１９に入力されることとなる。
【００５３】
また、図４には示されていないが、マイコン１３からの制御信号により、スイッチ回路４４〜４６のうち、スイッチ回路４５だけがオンされた場合には、排他的論理和回路４０からの第１カムエッジ化信号が、当該入力制御回路１７の出力信号として、アングルクロック生成回路１９の入力端子２０に入力されることとなる。つまり、この場合には、クランク信号とカム信号１とカム信号２とのうち、カム信号１が選択されて、そのカム信号１に立ち上がりエッジと立ち下がりエッジとのそれぞれが発生するタイミング情報が、アングルクロック生成回路１９に入力されることとなる。
【００５４】
また、マイコン１３からの制御信号により、スイッチ回路４４〜４６のうち、スイッチ回路４５とスイッチ回路４６との２つがオンされた場合には、図４の下から２段目に示すように、排他的論理和回路４０からの第１カムエッジ化信号と排他的論理和回路４２からの第２カムエッジ化信号とのオア回路４３によるオア信号（論理和信号）が、当該入力制御回路１７の出力信号として、アングルクロック生成回路１９の入力端子２０に入力されることとなる。つまり、この場合には、クランク信号とカム信号１とカム信号２とのうち、カム信号１とカム信号２との２つが選択され、その２つのカム信号の何れかに立ち上がりエッジと立ち下がりエッジとのそれぞれが発生するタイミング情報が、アングルクロック生成回路１９に入力されることとなる。
【００５５】
尚、入力制御回路１７の出力信号がハイレベルになる時間は、システムクロックの１周期分であり、前述したように、クランク信号の１周期時間よりも十分に小さいが、図４では、その時間を実際よりも長く示している。これは、クランク信号、カム信号１及びカム信号２と、入力制御回路１７の出力信号との関係を、分かり易く図示するためである。また、入力制御回路１７において、カム信号１をシステムクロック幅でエッジ化した第１カム信号と、カム信号２をシステムクロック幅でエッジ化した第２カム信号とのオア信号を出力するようにしているのは、単に、カム信号１とカム信号２とのオア信号を出力するようにしたのでは、両カム信号のハイレベル期間が重なった場合に、エッジ情報の一部が消失してしまうので、これを防止するためである。
【００５６】
一方、マイコン１３は、ソフトウェアにより、クランク信号とカム信号１とカム信号２とのそれぞれについて、ＥＣＵ１１へ正常に入力されているか否かを診断すると共に、その診断結果に応じて、上記スイッチ回路４４〜４６のオン／オフ状態を切り替える。
【００５７】
即ち、マイコン１３は、クランク信号が正常に入力されていると判定している場合には、スイッチ回路４４〜４６のうち、スイッチ回路４４だけをオンさせて、入力制御回路１７からアングルクロック生成回路１９の入力端子２０へ、クランクエッジ化信号が入力されるようにする。
【００５８】
また、クランク信号が正常に入力されていないが、カム信号１とカム信号２は正常に入力されていると判定している場合には、スイッチ回路４４〜４６のうち、スイッチ回路４５とスイッチ回路４６との２つをオンさせて、入力制御回路１７からアングルクロック生成回路１９の入力端子２０へ、第１カムエッジ化信号と第２カムエッジ化信号とのオア信号が入力されるようにする。
【００５９】
また、クランク信号とカム信号２が正常に入力されていないが、カム信号１は正常に入力されていると判定している場合には、スイッチ回路４４〜４６のうち、スイッチ回路４５だけをオンさせて、入力制御回路１７からアングルクロック生成回路１９の入力端子２０へ、第１カムエッジ化信号が入力されるようにする。
【００６０】
また、クランク信号とカム信号１が正常に入力されていないが、カム信号２は正常に入力されていると判定している場合には、スイッチ回路４４〜４６のうち、スイッチ回路４６だけをオンさせて、入力制御回路１７からアングルクロック生成回路１９の入力端子２０へ、第２カムエッジ化信号が入力されるようにする。
【００６１】
尚、このようなマイコン１３による切替処理については、後で図５及び図６に基づき詳しく説明する。
次に、アングルクロック生成回路１９は、入力制御回路１７から入力端子２０に入力される信号を入力信号とし、その入力信号から、クランク信号に立ち下がりエッジが生じるクランク角度（本実施形態では１０°ＣＡ）よりも小さい一定のクランク角度（本実施形態では１°ＣＡ）分の時間を１周期としたクロックを生成すると共に、そのクロックに応じて、１°ＣＡの分解能でクランク位置を表すアングルカウンタをカウント動作させる回路である。
【００６２】
そして、図３に示すように、アングルクロック生成回路１９は、入力端子２０からの入力信号に特定方向のパルスエッジ（本実施形態では、立ち上がりエッジ）が発生してから該立ち上がりエッジが次に発生するまでの間隔（以下、パルスエッジ間隔という）毎に、そのパルスエッジ間隔を計測するパルスエッジ間隔計測部５１と、マイコン１３により（換言すれば、ソフトウェアにより）決定されるアングルクロック生成倍率（逓倍数に相当）を記憶する生成倍率記憶部５２と、パルスエッジ間隔計測部５１によるパルスエッジ間隔の計測値を生成倍率記憶部５２に記憶されたアングルクロック生成倍率で割った時間を、１アングルクロック時間として記憶する１アングルクロック時間記憶部５３と、その１アングルクロック時間記憶部５３に記憶された時間毎に、その時間を１周期とするクロック（逓倍クロックに相当）を出力する補正前アングルクロック出力部５４とを備えている。
【００６３】
パルスエッジ間隔計測部５１は、入力信号のパルスエッジ間隔をシステムクロックによって計測する。つまり、パルスエッジ間隔計測部５１は、入力信号が立ち上がってから次に立ち上がるまでの間に発生したシステムクロックの数を、入力信号のパルスエッジ間隔として計測する。
【００６４】
補正前アングルクロック出力部５４も、１アングルクロック時間記憶部５３に記憶された時間（即ち、クロックの出力周期）をシステムクロックによって計測する。つまり、補正前アングルクロック出力部５４は、システムクロックが１アングルクロック時間記憶部５３内の記憶値に該当する数だけ発生する毎に、クロックを出力する。
【００６５】
また、１アングルクロック時間記憶部５３内の記憶値は、入力端子２０からの入力信号が立ち上がる毎に自動更新されるが、その自動更新の許可と禁止がマイコン１３により（ソフトウェアにより）切替可能となっている。
【００６６】
更に、アングルクロック生成回路１９には、補正前アングルクロック出力部５４から出力されるクロック（以下、補正前アングルクロックという）をクロックソースとしてカウントアップする基準アングルカウンタ５５と、その基準アングルカウンタ５５の値を上限ガードするためのガード用イベントカウンタ５６と、システムクロックによりカウント値が基準アングルカウンタ５５の値に自動追従するアングルカウンタ５７（角度カウンタに相当）と、そのアングルカウンタ５７のカウントアップ時にアングルクロックを出力するアングルクロック出力部５８とが備えられている。
【００６７】
ガード用イベントカウンタ５６は、入力端子２０からの入力信号が立ち上がる毎にカウントアップする。そして、基準アングルカウンタ５５の上限値は、「ガード用イベントカウンタ５６の値×生成倍率記憶部５２に記憶されたアングルクロック生成倍率」の値（以下、ガード値という）にガードされる。
【００６８】
また、アングルカウンタ５７は、そのカウント値がクランク位置を１°ＣＡの分解能で表すカウンタであり、そのカウント値が基準アングルカウンタ５５の値よりも小さい場合にシステムクロックでカウントアップし、そのカウント値が基準アングルカウンタ５５の値と一致したら自動停止する。このため、アングルカウンタ５７も、基本的には、補正前アングルクロック出力部５４から出力される補正前アングルクロックに応じてカウント動作することとなるが、そのカウントアップタイミングは、補正前アングルクロックにより基準アングルカウンタ５５の値が変化してから次のシステムクロックの出力タイミングとなる。つまり、アングルカウンタ５７は、基準アングルカウンタ５５に対して、カウント値の変化タイミングをシステムクロックに同期させたものである。そして、そのアングルカウンタ５７のカウントアップ時に、アングルクロック出力部５８からアングルクロックが出力される。
【００６９】
更に、アングルクロック生成回路１９には、入力端子２０からの入力信号が立ち上がる毎にカウント値が０にクリアされ、補正前アングルクロックでフリーランニング動作するフリーランニングカウンタ５９と、そのフリーランニングカウンタ５９の値と比較される割り込み発生カウンタ値がマイコン１３によってセットされる割り込み発生カウンタ値記憶部６０とが備えられている。そして、フリーランニングカウンタ５９の値が割り込み発生カウンタ値記憶部６０にセットされた割り込み発生カウンタ値と一致すると、マイコン１３に対するコンペアマッチ割り込み要求が発生するようになっている。
【００７０】
一方、マイコン１３は、アングルカウンタ５７のカウント値によってクランク位置を把握し、そのカウント値をエンジン回転に同期したインジェクタ制御（燃料噴射制御）、点火制御及びポンプ制御等に使用している。例えば、アングルカウンタ５７のカウント値が、ある値から他のある値になるまでアクチュエータに対する駆動信号を出力するとか、アングルカウンタ５７のカウント値が、ある値になってから一定時間が経過するまで駆動信号を出力するといった具合に、アングルカウンタ５７の値を使用する。
【００７１】
尚、上記アングルクロック生成回路１９の構成により、エンジンの減速時には、アングルカウンタ５７をガード用イベントカウンタ５６による上記ガード値で停止させることが可能となり、加速時には、システムクロックの速度でアングルカウンタ５７の値を補正する（つまり、足りない分の値を加える）ことができ、アングルカウンタ５７のカウント値に同期する処理の抜けを防止できる。また、こうしたアングルクロック生成回路１９の構成や作用については、例えば特許文献１，２等にも記載されている。
【００７２】
次に、マイコン１３が実行する処理について説明する。
まず図５は、入力信号診断処理を表すフローチャートである。この入力信号診断処理は、時間同期タスクとして一定時間Ｔｃ毎に実行される。
【００７３】
そして、マイコン１３が入力信号診断処理の実行を開始すると、まずＳ１１０にて、エンジン回転数が所定値Ｎａ以上か否かを判定し、エンジン回転数が所定値Ｎａ以上でなければ、そのまま当該入力信号診断処理を終了する。尚、エンジン回転数は、他のエンジン回転数算出用処理（図示省略）により、クランク信号に基づき計測される所定クランク角度分の時間から算出される。例えば、クランク信号に欠け歯が発生する３６０°ＣＡ分の時間間隔を計測し、その計測値からエンジン回転数が算出される。また、欠け歯は、クランク信号の立ち下がりエッジ間隔を計測すると共に、今回の計測値が前回の計測値を所定の欠歯判定比倍（例えば２倍）した値以上であれば、今回の立ち下がりエッジ間隔が欠け歯であると判定する、といった周知の方法で検出される。
【００７４】
一方、上記Ｓ１１０でエンジン回転数が所定値Ｎａ以上であると判定した場合には、Ｓ１２０に進み、当該入力信号診断処理の前回の実行開始時から今回の実行開始時までの一定時間Ｔｃの間に、クランク信号に立ち下がりエッジがあったか否かを判定する。そして、クランク信号に立ち下がりエッジがあった場合（クランクエッジ有りの場合）には、Ｓ１３０に進んで、クランク信号の診断結果として正常を記憶し、続くＳ１４０にて、無エッジ期間計測カウンタの値を０にクリアする。そして、その後、当該入力信号診断処理を終了する。
【００７５】
また、上記Ｓ１２０でクランク信号に立ち下がりエッジがなかったと判定した場合には、Ｓ１５０に移行して、無エッジ期間計測カウンタの値が所定値Ｎｂよりも大きくなったか否かを判定する。
【００７６】
そして、無エッジ期間計測カウンタの値が所定値Ｎｂよりも大きくなければ、Ｓ１６０に進んで、無エッジ期間計測カウンタの値を１インクリメント（１加算）し、その後、当該入力信号診断処理を終了する。
【００７７】
また、上記Ｓ１５０にて、無エッジ期間計測カウンタの値が所定値Ｎｂよりも大きいと判定した場合には、Ｓ１７０に移行する。そして、そのＳ１７０にて、クランク信号の診断結果として異常を記憶し、その後、当該入力信号診断処理を終了する。
【００７８】
つまり、図５の入力信号診断処理では、エンジン回転数が所定値Ｎａ以上の場合において（Ｓ１１０：ＹＥＳ）、クランク信号に本来ならば少なくとも１回は立ち下がりエッジが発生するはずの一定期間（＝「Ｔｃ×Ｎｂ」の期間）が経過しても、クランク信号に立ち下がりエッジが１回も発生しなければ、クランク信号が異常（正常に入力されていない）と判断するようになっている（Ｓ１２０：ＮＯ→Ｓ１５０：ＹＥＳ→Ｓ１７０）。
【００７９】
一方、マイコン１３は、カム信号１とカム信号２とのそれぞれについても、図５と同様の入力信号診断処理（図示省略）を実行して異常の有無を判定している。
次に、図６は、入力制御回路１７からアングルクロック生成回路１９への入力信号を切り替えるための時間同期タスクを表すフローチャートである。この時間同期タスクは、上記各信号毎の入力信号診断処理と並行して一定時間毎に実行される。
【００８０】
そして、マイコン１３が図６の時間同期タスクの実行を開始すると、まずＳ２１０にて、クランク信号用の入力信号診断処理（図５）による診断結果を参照して、クランク信号が異常か否かを判定し、クランク信号が異常でなければ（即ち正常であれば）、Ｓ２２０に進んで、アングルクロック生成回路１９への入力信号としてクランク信号を選択する。つまり、入力制御回路１７におけるスイッチ回路４４〜４６のうち、スイッチ回路４４だけをオンさせて、アングルクロック生成回路１９の入力端子２０へ、クランクエッジ化信号が入力されるようにする。そして、その後、当該時間同期タスクを終了する。
【００８１】
一方、上記Ｓ２１０でクランク信号が異常であると判定した場合には、Ｓ２３０に移行する。そして、カム信号１用の入力信号診断処理による診断結果を参照して、カム信号１が正常か否かを判定し、カム信号１が正常であれば、次のＳ２４０にて、カム信号２用の入力信号診断処理による診断結果を参照して、カム信号２が正常か否かを判定する。
【００８２】
このＳ２４０でカム信号２が正常であると判定した場合には、Ｓ２５０に進んで、アングルクロック生成回路１９への入力信号として両カム信号を選択する。つまり、入力制御回路１７におけるスイッチ回路４４〜４６のうち、スイッチ回路４５とスイッチ回路４６をオンさせて、アングルクロック生成回路１９の入力端子２０へ、第１カムエッジ化信号と第２カムエッジ化信号とのオア信号が入力されるようにする。そして、その後、Ｓ２９０へ移行する。
【００８３】
また、上記Ｓ２４０でカム信号２が正常ではないと判定した場合には、Ｓ２６０に移行し、アングルクロック生成回路１９への入力信号として正常な方のカム信号１を選択する。つまり、入力制御回路１７におけるスイッチ回路４４〜４６のうち、スイッチ回路４５だけをオンさせて、アングルクロック生成回路１９の入力端子２０へ、第１カムエッジ化信号が入力されるようにする。そして、その後、Ｓ２９０へ移行する。
【００８４】
また、上記Ｓ２３０でカム信号１が正常ではないと判定した場合には、Ｓ２７０に移行し、Ｓ２４０と同様に、カム信号２用の入力信号診断処理による診断結果を参照して、カム信号２が正常か否かを判定する。そして、カム信号２が正常であれば、Ｓ２８０に進み、アングルクロック生成回路１９への入力信号として正常な方のカム信号２を選択する。つまり、入力制御回路１７におけるスイッチ回路４４〜４６のうち、スイッチ回路４６だけをオンさせて、アングルクロック生成回路１９の入力端子２０へ、第２カムエッジ化信号が入力されるようにする。そして、その後、Ｓ２９０へ移行する。
【００８５】
また、上記Ｓ２７０でカム信号２が正常ではないと判定した場合には、クランク信号とカム信号１とカム信号２との全てが異常であるため、そのまま当該時間同期タスクを終了する。
【００８６】
次に、上記Ｓ２５０、Ｓ２６０及びＳ２８０のそれぞれから移行するＳ２９０では、上記Ｓ２１０でクランク信号が異常であると判定したのが１回目であるか否かを判定し、１回目でなければ、そのまま当該時間同期タスクを終了するが、１回目であれば、次のＳ２９５に進んで、アングルクロック生成回路１９における生成倍率記憶部５２内のアングルクロック生成倍率（以下単に、生成倍率ともいう）を３０に設定すると共に、アングルクロック生成回路１９におけるガード用イベントカウンタ５６の値を０に設定し、その後、当該時間同期タスクを終了する。尚、クランク信号が正常な場合において、生成倍率記憶部５２に記憶される生成倍率の初期値は１０である。
【００８７】
次に、図７は、クランク信号に基づいてアングルカウンタ５７の値を１°ＣＡ分ずつ変移させるためのクランク信号用アングルカウンタ制御処理を表すフローチャートである。そして、この処理は、クランク信号に立ち下がりエッジが生じる毎に起動されるクランク割り込み処理である。
【００８８】
マイコン１３がクランク信号用アングルカウンタ制御処理の実行を開始すると、まずＳ３１０にて、現在のクランク位置（即ち、今回のクランク信号の立ち下がりエッジに該当するクランク位置）がクランク信号の基準位置（♯１ＢＴＤＣ）であるか否かを判定する。尚、クランク信号の基準位置であるか否かは、図示しない他の基準位置判定処理により、例えば以下のように判定される。即ち、クランク信号に欠け歯が発生したことを検出すると、その欠け歯検出タイミングよりも１２０°ＣＡだけ前の時点から現在までの間に、カム信号１にエッジが生じていたか否かを判定し、カム信号１にエッジが発生していたならば、今回発生した欠け歯が「表欠け歯」と「裏欠け歯」とのうちの「表欠け歯」であるため、現在のクランク位置がクランク信号の基準位置に該当する♯１ＢＴＤＣであると判定される。そして、Ｓ３１０では、その基準位置判定処理の判定結果を参照して、現在のクランク位置がクランク信号の基準位置であるか否かを判定する。
【００８９】
このＳ３１０にて、現在のクランク位置がクランク信号の基準位置であると判定した場合には、次のＳ３１５にて、アングルクロック生成回路１９における基準アングルカウンタ５５とアングルカウンタ５７との各値を、クランク信号の基準位置（♯１ＢＴＤＣ）に該当する値（本実施形態では１）に初期化し、続くＳ３２０にて、クランク位置カウンタの値を♯１ＢＴＤＣに該当する１に初期化した後、Ｓ３３０に移行する。尚、クランク位置カウンタは、図８の６段目に示すように、クランク位置を１０°ＣＡの分解能で表すソフトウェア上のカウンタである。
【００９０】
また、上記Ｓ３１０で現在のクランク位置がクランク信号の基準位置ではないと判定した場合には、Ｓ３２５に移行して、クランク位置カウンタの値を１インクリメントし、その後、Ｓ３３０に進む。
【００９１】
Ｓ３３０では、クランク位置カウンタの値が欠け歯の開始位置に該当する３４又は７０であるか否かを判定し、クランク位置カウンタの値が３４又は７０でなければ、Ｓ３３５に進んで、アングルクロック生成回路１９における生成倍率記憶部５２内の生成倍率を通常値としての１０に設定する。
【００９２】
次にＳ３４０にて、クランク位置カウンタの値が３７であるか否かを判定し、３７でなければ、Ｓ３４５に進んで、クランク位置カウンタの値が１であるか否かを判定する。そして、クランク位置カウンタの値が１でなければ（Ｓ３４５：ＮＯ）、そのまま当該クランク信号用アングルカウンタ制御処理を終了するが、クランク位置カウンタの値が１であれば（Ｓ３４５：ＹＥＳ）、Ｓ３５０に進んで、アングルクロック生成回路１９におけるガード用イベントカウンタ５６の値を１に設定し、その後、当該クランク信号用アングルカウンタ制御処理を終了する。
【００９３】
また、上記Ｓ３４０でクランク位置カウンタの値が３７であると判定した場合には、Ｓ３５５に移行して、ガード用イベントカウンタ５６の値を３７に設定し、その後、当該クランク信号用アングルカウンタ制御処理を終了する。
【００９４】
一方、上記Ｓ３３０でクランク位置カウンタの値が３４又は７０であると判定した場合には、Ｓ３６０に移行して、生成倍率記憶部５２内の生成倍率を、通常値の３倍である３０に設定する。
【００９５】
そして、次のＳ３６５にて、クランク位置カウンタの値が３４であるか否かを判定し、３４であれば、Ｓ３７０に進んで、ガード用イベントカウンタ５６の値を１２に設定すると共に、クランク位置カウンタの値を３６に設定し、その後、当該クランク信号用アングルカウンタ制御処理を終了する。
【００９６】
また、上記Ｓ３６５でクランク位置カウンタの値が３４ではないと判定した場合（即ち、クランク位置カウンタの値が７０である場合）には、Ｓ３７５に移行して、ガード用イベントカウンタ５６の値を２４に設定すると共に、クランク位置カウンタの値を７２に設定し、その後、当該クランク信号用アングルカウンタ制御処理を終了する。
【００９７】
そして、ＥＣＵ１１へクランク信号が正常に入力されている場合には、図６の時間同期タスクにより、入力制御回路１７からアングルクロック生成回路１９へクランクエッジ化信号が入力され、図７の処理により、アングルカウンタ５７の値が図８のように変移することとなる。
【００９８】
即ち、図８に示すように、クランク位置がエンジンの１サイクル（７２０°ＣＡ分）における基準位置としての＃１ＢＴＤＣになると、Ｓ３１５及びＳ３２０の処理により、基準アングルカウンタ５５及びアングルカウンタ５７とクランク位置カウンタの各値とが１に初期化され、また、Ｓ３３５の処理により、生成倍率記憶部５２内の生成倍率が１０に設定されると共に、Ｓ３５０の処理により、ガード用イベントカウンタ５６の値が１に初期化される。
【００９９】
そして、その後は、クランク信号が立ち下がる毎に、クランク位置カウンタの値が、Ｓ３２５の処理により１ずつカウントアップされることとなる。
また、その＃１ＢＴＤＣのタイミングから次にクランク信号が立ち下がるまでの間（つまり、クランク位置カウンタが１から２になるまでの間）の動作については後で述べるが、クランク位置カウンタの値が２になった後は、パルスエッジ間隔計測部５１によりパルスエッジ間隔として計測されたクランク信号の１０°ＣＡ毎の立ち下がりエッジ間隔Ｔｐを生成倍率である１０で割った「Ｔｐ／１０」の時間（つまり、１°ＣＡ分の時間）毎に、補正前アングルクロック出力部５４から補正前アングルクロックが出力されて、基準アングルカウンタ５５が１ずつカウントアップされていく。そして、その基準アングルカウンタ５５の値に追従してアングルカウンタ５７もカウントアップしていき、そのアングルカウンタ５７がカウントアップする１°ＣＡ分の時間毎に、アングルクロック出力部５８からアングルクロックが出力される。
【０１００】
更に、ガード用イベントカウンタ５６が、クランク信号が立ち下がる毎（つまり、入力制御回路１７からアングルクロック生成回路１９へ出力されるクランクエッジ化信号が立ち上がる毎）にカウントアップされるため、基準アングルカウンタ５５及びアングルカウンタ５７の値は、常に、次のクランク信号の立ち下がりタイミングでなるべき値にガードされることとなる。
【０１０１】
そして、クランク位置カウンタの値が、♯１ＢＴＤＣから３３０°ＣＡ後のクランク位置（つまり、裏欠け歯の開始位置）に該当する３４になると、Ｓ３６０の処理により、生成倍率記憶部５２内の生成倍率が３０に設定され、Ｓ３７０の処理により、クランク位置カウンタの値が、欠け歯で欠落する２だけ増加されて３６に補正される。更に、Ｓ３７０の処理により、ガード用イベントカウンタ５６の値が１２に補正される。これは、生成倍率記憶部５２内の生成倍率を３０に変更したためであり、裏欠け歯の期間におけるガード値を３６０にするためである。
【０１０２】
尚、Ｓ３６０の処理によって生成倍率記憶部５２内の生成倍率が３０に変更されても、１アングルクロック時間記憶部５３の記憶値は、次のクランク信号の立ち下がりタイミングでしか変更されないため、裏欠け歯の期間中は、その直前のパルスエッジ間隔Ｔｐを１０で割った時間（＝Ｔｐ／１０）毎に、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップと、アングルクロックの出力とが行われることとなる。
【０１０３】
その後、次にクランク信号が立ち下がって、クランク位置カウンタがＳ３２５の処理によりカウントアップされ、その値が、裏欠け歯の終了位置（♯１ＢＴＤＣから３６０°ＣＡ後のクランク位置）に該当する３７になると、Ｓ３３５の処理により、生成倍率記憶部５２内の生成倍率が１０に戻されると共に、Ｓ３５５の処理により、次のクランク信号の立ち下がりタイミングまでのガード値を３７０にするために、ガード用イベントカウンタ５６の値が３７に設定される。
【０１０４】
そして、クランク位置カウンタの値が３７になる裏欠け歯の終了位置から次にクランク信号が立ち下がるまでの間は、１アングルクロック時間記憶部５３に、１°ＣＡ分の時間である１アングルクロック時間として、パルスエッジ間隔計測部５１により計測された裏欠け歯の時間を３０で割った時間が記憶されることとなり、その時間毎に、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップと、アングルクロックの出力とが行われることとなる。
【０１０５】
そして、次にクランク信号が立ち下がって、Ｓ３２５の処理によりクランク位置カウンタの値が３８になった後は、再び、クランク信号の１０°ＣＡ毎の立ち下がりエッジ間隔を１０で割った時間毎に、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップと、アングルクロックの出力とが行われ、また、ガード用イベントカウンタ５６が、クランク信号が立ち下がる毎にカウントアップされて、基準アングルカウンタ５５及びアングルカウンタ５７の値が、常に、次のクランク信号の立ち下がりタイミングでなるべき値にガードされることとなる。そして更に、クランク位置カウンタの値も、Ｓ３２５の処理により、クランク信号が立ち下がる毎に１ずつカウントアップされることとなる。
【０１０６】
そして、クランク位置カウンタの値が、♯１ＢＴＤＣよりも３０°ＣＡだけ前のクランク位置（つまり、表欠け歯の開始位置）に該当する７０になると、Ｓ３６０の処理により、生成倍率記憶部５２内の生成倍率が３０に設定され、Ｓ３７５の処理により、クランク位置カウンタの値が、欠け歯で欠落する２だけ増加されて７２に補正される。更に、Ｓ３７５の処理により、ガード用イベントカウンタ５６の値が２４に補正される。これは、生成倍率記憶部５２内の生成倍率を３０に変更したためであり、表欠け歯の期間におけるガード値を７２０にするためである。
【０１０７】
尚、表欠け歯の期間中は、前述した裏欠け歯の期間中と同様に、Ｓ３６０の処理によって生成倍率記憶部５２内の生成倍率が３０に変更されても、１アングルクロック時間記憶部５３の記憶値が次のクランク信号の立ち下がりタイミングでしか変更されないため、直前のパルスエッジ間隔Ｔｐを１０で割った時間毎に、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップと、アングルクロックの出力とが行われることとなる。
【０１０８】
その後、次にクランク信号が立ち下がると、そのタイミングでのクランク位置は、表欠け歯の終了位置であって、基準位置としての＃１ＢＴＤＣである。よって、前述したように、Ｓ３１５及びＳ３２０の処理により、基準アングルカウンタ５５及びアングルカウンタ５７とクランク位置カウンタの各値とが１に初期化され、また、Ｓ３３５の処理により、生成倍率記憶部５２内の生成倍率が１０に設定されると共に、Ｓ３５０の処理により、ガード用イベントカウンタ５６の値が１に初期化される。
【０１０９】
そして、そのタイミングから次にクランク信号が立ち下がるまでの間（つまり、クランク位置カウンタが２になるまでの間）は、１アングルクロック時間記憶部５３に、１°ＣＡ分の時間である１アングルクロック時間として、パルスエッジ間隔計測部５１により計測された表欠け歯の時間（図８におけるＴ）を３０で割った時間（図８におけるＴａ）が記憶されることとなり、その時間毎に、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップと、アングルクロックの出力とが行われることとなる。
【０１１０】
そして、次にクランク信号が立ち下がって、Ｓ３２５の処理によりクランク位置カウンタの値が２になった後は、再び、クランク信号の１０°ＣＡ毎の立ち下がりエッジ間隔を１０で割った時間毎に、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップと、アングルクロックの出力とが行われ、また、ガード用イベントカウンタ５６が、クランク信号が立ち下がる毎にカウントアップされて、基準アングルカウンタ５５及びアングルカウンタ５７の値が、常に、次のクランク信号の立ち下がりタイミングでなるべき値にガードされることとなる。そして更に、クランク位置カウンタの値も、Ｓ３２５の処理により、クランク信号が立ち下がる毎に１ずつカウントアップされることとなる。
【０１１１】
以上のような動作により、基準アングルカウンタ５５及びアングルカウンタ５７の値が、１°ＣＡ分の時間毎にカウントアップされると共に、１〜７２０の範囲でラップラウンドすることとなり、その値は、クランク位置を＃１ＢＴＤＣを基準として１°ＣＡの分解能で表すこととなる。
【０１１２】
尚、図７におけるＳ３７０とＳ３７５との各処理にて、クランク位置カウンタの値を、欠け歯で欠落する２だけ増加補正しているのは、クランク位置カウンタの値を１〜７２の範囲でラップラウンドさせるためであり、例えば等しいクランク角度間隔にイベントを発生したい場合に、クランク位置カウンタの値がある数の自然数倍だったらイベント発生、というようにソフトを簡単に作れるようにと考慮したものである。また、図８において、その最下段に示したアングルクロックの出力間隔は、実際よりもかなり大きく表されている。そして、このことは、後述する図１１、図１３及び図１６に関しても同様である。
【０１１３】
次に、図９は、カム信号１とカム信号２との何れか一方にエッジ（立ち上がりエッジと立ち下がりエッジ）が生じる毎に起動されるカム割り込み処理を表すフローチャートである。
【０１１４】
マイコン１３がカム割り込み処理の実行を開始すると、まずＳ４１０にて、図６の処理結果を参照し、アングルクロック生成回路１９への入力信号として両カム信号を選択しているか否か、つまり、アングルクロック生成回路１９の入力端子２０へ第１カムエッジ化信号と第２カムエッジ化信号とのオア信号を入力させているか否かを判定する。
【０１１５】
そして、入力信号として両カム信号を選択していると判定した場合には、Ｓ４２０に進み、後述する図１０のカム信号１とカム信号２のオア信号用アングルカウンタ制御処理を実行し、その後、当該カム割り込み処理を終了する。
【０１１６】
また、上記Ｓ４１０にて、両カム信号を選択していないと判定した場合には、Ｓ４３０に移行して、図６の処理結果を参照し、アングルクロック生成回路１９への入力信号としてカム信号１を選択しているか否か、つまり、アングルクロック生成回路１９の入力端子２０へ第１カムエッジ化信号を入力させているか否かを判定する。
【０１１７】
そして、カム信号１を選択していると判定した場合には（Ｓ４３０：ＹＥＳ）、Ｓ４４０に進み、後述する図１２のカム信号１用アングルカウンタ制御処理を実行し、その後、当該カム割り込み処理を終了する。
【０１１８】
また、上記Ｓ４３０にて、カム信号１を選択していないと判定した場合には、Ｓ４５０に移行して、図６の処理結果を参照し、アングルクロック生成回路１９への入力信号としてカム信号２を選択しているか否か、つまり、アングルクロック生成回路１９の入力端子２０へ第２カムエッジ化信号を入力させているか否かを判定する。
【０１１９】
そして、カム信号２を選択していないと判定した場合には（Ｓ４５０：ＮＯ）、入力信号としてカム信号は選択されていないため、そのまま当該カム割り込み処理を終了するが、入力信号としてカム信号２を選択していると判定した場合には（Ｓ４５０：ＹＥＳ）、Ｓ４６０に進んで、後述する図１４のカム信号２用アングルカウンタ制御処理を実行し、その後、当該カム割り込み処理を終了する。
【０１２０】
次に、図１０は、図９のＳ４２０で実行されるカム信号１とカム信号２のオア信号用アングルカウンタ制御処理を表すフローチャートである。
マイコン１３がカム信号１とカム信号２のオア信号用アングルカウンタ制御処理を開始すると、まずＳ５１０にて、現在のクランク位置（即ち、今回のカム信号１又はカム信号２のエッジに該当するクランク位置）がカム信号１の基準位置Ｐ１（♯１ＢＴＤＣよりも９０°ＣＡだけ前のクランク位置）であるか否かを判定する。
【０１２１】
尚、カム信号１の基準位置Ｐ１であるか否かは、図示しない他の第１カム信号判定処理により、例えば以下のように判定される。即ち、第１カム信号判定処理では、カム信号１の立ち下がりエッジ間隔を計測すると共に、カム信号１が立ち下がる毎に、図４に示すように、今回の計測値Ｔ１１と前回の計測値Ｔ１２との比（＝Ｔ１１／Ｔ１２）が所定値（例えば、１／５）よりも小さいか否かを判定して、その比が所定値よりも小さければ、今回のカム信号１の立ち下がりに該当するクランク位置がカム信号１の基準位置Ｐ１であると判定する。そして、Ｓ５１０では、その第１カム信号判定処理の判定結果を参照して、現在のクランク位置がカム信号１の基準位置Ｐ１であるか否かを判定する。
【０１２２】
このＳ５１０にて、現在のクランク位置がカム信号１の基準位置Ｐ１であると判定した場合には、次のＳ５１５にて、基準アングルカウンタ５５の値を、カム信号１の基準位置Ｐ１に該当する基準値である６３０に設定し、続くＳ５２０にて、カム位置カウンタの値を最終値である２４に設定した後、Ｓ５４０に移行する。尚、カム位置カウンタは、図１１の６段目に示すように、カム軸の回転位置を３０°ＣＡの分解能で表すソフトウェア上のカウンタであるが、結局、カム信号（カム信号１又はカム信号２）によって特定されるクランク位置を３０°ＣＡの分解能で表すカウンタである。また、クランク信号がＥＣＵ１１へ正常に入力されている場合、そのカム位置カウンタの値は０に固定されている。
【０１２３】
一方、上記Ｓ５１０で現在のクランク位置がカム信号１の基準位置Ｐ１ではないと判定した場合には、Ｓ５２５に移行して、カム信号１の基準位置Ｐ１を検出済みであるか否か、即ち、図９のＳ４１０で肯定判定（ＹＥＳと判定）されてから、上記Ｓ５１０で既に１回以上肯定判定されているか否かを判定する。そして、カム信号１の基準位置Ｐ１を検出済みではないと判定した場合には（Ｓ５２５：ＮＯ）、Ｓ５３０に進んで、ガード用イベントカウンタ５６の値を０に設定することにより、基準アングルカウンタ５５及びアングルカウンタ５７の値が進まないようにし、その後、当該オア信号用アングルカウンタ制御処理を終了する。
【０１２４】
また、上記Ｓ５２５にて、カム信号１の基準位置Ｐ１を検出済みであると判定した場合には、Ｓ５３５に移行して、カム位置カウンタの値を１インクリメントし、その後、Ｓ５４０に進む。
【０１２５】
Ｓ５４０では、カム位置カウンタの値が１０又は２４であるか否かを判定し、１０又は２４であれば、Ｓ５４５に進んで、生成倍率記憶部５２内の生成倍率を９０に設定する。
次にＳ５５０にて、カム位置カウンタの値が１０であるか否かを判定し、１０でなければ（つまり、カム位置カウンタの値が２４である場合には）、Ｓ５５５に進んで、ガード用イベントカウンタ５６の値を８に設定し、その後、当該オア信号用アングルカウンタ制御処理を終了する。
【０１２６】
また、上記Ｓ５５０でカム位置カウンタの値が１０であると判定した場合には、Ｓ５６０に移行して、ガード用イベントカウンタ５６の値を４に設定すると共に、カム位置カウンタの値を１２に設定し、その後、当該オア信号用アングルカウンタ制御処理を終了する。
【０１２７】
一方、上記Ｓ５４０でカム位置カウンタの値が１０又は２４ではないと判定した場合には、Ｓ５６５に移行して、生成倍率記憶部５２内の生成倍率を３０に設定する。
そして、次のＳ５７０にて、カム位置カウンタの値が１３であるか否かを判定し、１３であれば、Ｓ５７５に進んで、ガード用イベントカウンタ５６の値を１３に設定した後、当該オア信号用アングルカウンタ制御処理を終了する。
【０１２８】
また、上記Ｓ５７０にて、カム位置カウンタの値が１３ではないと判定した場合には、Ｓ５８０に移行して、カム位置カウンタの値が２５であるか否かを判定する。そして、カム位置カウンタの値が２５でなければ（Ｓ５８０：ＮＯ）、そのまま当該オア信号用アングルカウンタ制御処理を終了するが、カム位置カウンタの値が２５であれば（Ｓ５８０：ＹＥＳ）、Ｓ５８５に進んで、ガード用イベントカウンタ５６、基準アングルカウンタ５５、アングルカウンタ５７及びカム位置カウンタの各値を１に設定し、その後、当該オア信号用アングルカウンタ制御処理を終了する。
【０１２９】
そして、ＥＣＵ１１へクランク信号が正常に入力されなくなったが、カム信号１とカム信号２は正常に入力されている場合には、図６の時間同期タスクにより、入力制御回路１７からアングルクロック生成回路１９へ第１カムエッジ化信号と第２カムエッジ化信号とのオア信号（以下単に、オア信号ともいう）が入力され、図７の処理が実行されなくなる代わりに、図１０の処理により、アングルカウンタ５７の値が図１１のように変移することとなる。
【０１３０】
即ち、図１１に示すように、まず、クランク信号のレベル変化が止まると、図６のＳ２９５の処理により、ガード用イベントカウンタ５６の値が０に設定されて、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップが禁止され、また、生成倍率記憶部５２内の生成倍率がカム信号用の３０に設定される。そして、クランク位置がカム信号１の基準位置Ｐ１になるまでは、図１０のＳ５３０の処理により、ガード用イベントカウンタ５６の値が０に維持される。
【０１３１】
その後、クランク位置がカム信号１の基準位置Ｐ１になると、図１０のＳ５１５及びＳ５２０の処理により、基準アングルカウンタ５５の値が、その基準位置Ｐ１に該当する６３０に設定され、カム位置カウンタの値が２４に設定される。そして更に、Ｓ５４５の処理により、生成倍率記憶部５２内の生成倍率が９０に設定されると共に、Ｓ５５５の処理により、ガード用イベントカウンタ５６の値が８に設定され、その結果、基準アングルカウンタ５５及びアングルカウンタ５７のガード値が７２０（＝８×９０）に設定されることとなる。また、基準アングルカウンタ５５の値が６３０に設定されると、アングルカウンタ５７の値が、それまで停止していた値（図１１の例では５２０）から６３０まで、システムクロックにより１ずつ速やかにカウントアップされることとなる。このため、アングルカウンタ５７のカウント値に同期した噴射や点火といった制御の処理抜けは生じない。
【０１３２】
そして、その後、クランク位置が＃１ＢＴＤＣとなるまでは、１アングルクロック時間記憶部５３に、１°ＣＡ分の時間である１アングルクロック時間として、入力制御回路１７からの上記オア信号がカム信号１の基準位置Ｐ１の１回前に立ち上がってからカム信号１の基準位置Ｐ１で立ち上がるまでの３０°ＣＡ分の時間を３０で割った時間が記憶されることとなり、その時間毎に、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップと、アングルクロックの出力とが行われることとなる。
【０１３３】
次に、上記オア信号が立ち上がると、そのタイミングでのクランク位置は＃１ＢＴＤＣである。そして、その＃１ＢＴＤＣのタイミングにて、カム位置カウンタの値は、Ｓ５３５の処理により、一時的に２４から２５となるが、結局、Ｓ５８０で肯定判定されて、Ｓ５８５の処理により、１に初期化されることとなる。そして更に、そのＳ５８５の処理により、基準アングルカウンタ５５、アングルカウンタ５７及びガード用イベントカウンタ５６の各値も１に初期化される。また、Ｓ５６５の処理により、生成倍率記憶部５２内の生成倍率が３０に戻される。
【０１３４】
そして、その＃１ＢＴＤＣのタイミングから上記オア信号が次に立ち上がるまでの間（つまり、カム位置カウンタが２になるまでの間）は、１アングルクロック時間記憶部５３に、１アングルクロック時間として、カム信号１の基準位置Ｐ１から＃１ＢＴＤＣまでの時間（図１１におけるＴ）を９０で割った時間（図１１におけるＴａ）が記憶されることとなり、その時間毎に、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップと、アングルクロックの出力とが行われることとなる。
【０１３５】
また、クランク位置が＃１ＢＴＤＣとなった後は、上記オア信号が立ち上がる毎（つまり、カム信号１又はカム信号２にエッジが生じる毎）に、カム位置カウンタの値が、Ｓ５３５の処理により１ずつカウントアップされることとなる。
【０１３６】
そして、＃１ＢＴＤＣの次に上記オア信号が立ち上がって、カム位置カウンタの値が２になった後は、上記オア信号の３０°ＣＡ毎の立ち上がりエッジ間隔を３０で割った時間毎に、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップと、アングルクロックの出力とが行われ、また、ガード用イベントカウンタ５６が、上記オア信号が立ち上がる毎にカウントアップされて、基準アングルカウンタ５５及びアングルカウンタ５７の値が、常に、次のオア信号の立ち上がりタイミングでなるべき値にガードされることとなる。
【０１３７】
そして、カム位置カウンタの値が９から１０になると、Ｓ５４５の処理により、生成倍率記憶部５２内の生成倍率が９０に設定され、Ｓ５６０の処理により、カム位置カウンタの値が、２だけ増加されて１２に補正される。更に、Ｓ５６０の処理により、ガード用イベントカウンタ５６の値が４に補正される。これは、生成倍率記憶部５２内の生成倍率を９０に変更したためであり、＃１ＢＴＤＣから２７０°ＣＡ後のクランク位置から９０°ＣＡ分の期間におけるガード値を３６０にするためである。
【０１３８】
尚、Ｓ５４５の処理によって生成倍率記憶部５２内の生成倍率が９０に変更されても、１アングルクロック時間記憶部５３の記憶値は、次のオア信号の立ち上がりタイミングでしか変更されないため、＃１ＢＴＤＣから２７０°ＣＡ後のクランク位置から９０°ＣＡ分の期間中は、その直前のオア信号の立ち上がり間隔を３０で割った時間毎に、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップと、アングルクロックの出力とが行われることとなる。
【０１３９】
その後、次にオア信号が立ち上がって、カム位置カウンタがＳ５３５の処理によりカウントアップされ、その値が１３になると、Ｓ５６５の処理により、生成倍率記憶部５２内の生成倍率が３０に戻されると共に、Ｓ５７５の処理により、次のオア信号の立ち上がりタイミングまでのガード値を３９０にするために、ガード用イベントカウンタ５６の値が１３に設定される。
【０１４０】
そして、カム位置カウンタの値が１３になってから次にオア信号が立ち上がるまでの間（つまり、カム位置カウンタが１４になるまでの間）は、その直前のオア信号の立ち上がり間隔（つまり、カム位置カウンタが１２になっていた９０°ＣＡ分の時間）を９０で割った時間が、１アングルクロック時間として１アングルクロック時間記憶部５３に記憶されることとなり、その時間毎に、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップと、アングルクロックの出力とが行われることとなる。
【０１４１】
そして、次に上記オア信号が立ち上がって、Ｓ５３５の処理によりカム位置カウンタの値が１４になった後は、再び、上記オア信号の３０°ＣＡ毎の立ち上がりエッジ間隔を３０で割った時間毎に、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップと、アングルクロックの出力とが行われ、また、ガード用イベントカウンタ５６が、上記オア信号が立ち上がる毎にカウントアップされて、基準アングルカウンタ５５及びアングルカウンタ５７の値が、常に、上記オア信号の次の立ち上がりタイミングでなるべき値にガードされることとなる。そして更に、カム位置カウンタの値も、Ｓ５３５の処理により、上記オア信号が立ち上がる毎に１ずつカウントアップされることとなる。
【０１４２】
そして、その後、クランク位置がカム信号１の基準位置Ｐ１になると、再び、Ｓ５１５、Ｓ５２０、Ｓ５４５及びＳ５５５の処理により、基準アングルカウンタ５５の値が６３０に設定され、カム位置カウンタの値が２４に設定され、生成倍率記憶部５２内の生成倍率が９０に設定され、ガード用イベントカウンタ５６の値が８に設定されることとなる。
【０１４３】
以上のような動作により、基準アングルカウンタ５５及びアングルカウンタ５７の値は、ＥＣＵ１１へクランク信号が正常に入力される場合と全く同様に、１°ＣＡ分の時間毎にカウントアップされると共に、１〜７２０の範囲でラップラウンドすることとなる。
【０１４４】
尚、図１０の処理では、カム信号１の基準位置Ｐ１を検出した時に、クランク位置を確定して、基準アングルカウンタ５５やカム位置カウンタへの値のセットを行うようにしたが、クランク位置の確定及び基準アングルカウンタ５５やカム位置カウンタへの値のセットは、カム信号２の基準位置Ｐ２を検出した時に行うようにしても良い。
【０１４５】
次に、図１２は、図９のＳ４４０で実行されるカム信号１用アングルカウンタ制御処理を表すフローチャートである。
マイコン１３がカム信号１用アングルカウンタ制御処理を開始すると、まずＳ６１０にて、現在のクランク位置（即ち、今回のカム信号１のエッジに該当するクランク位置）がカム信号１の基準位置Ｐ１であるか否かを、前述した図１０のＳ５１０と同様に判定する。
【０１４６】
そして、このＳ６１０にて、現在のクランク位置がカム信号１の基準位置Ｐ１であると判定した場合には、次のＳ６１５にて、基準アングルカウンタ５５の値を、カム信号１の基準位置Ｐ１に該当する基準値である６３０に設定し、続くＳ６２０にて、カム位置カウンタの値を最終値である２４に設定した後、Ｓ６４０に移行する。
【０１４７】
一方、上記Ｓ６１０で現在のクランク位置がカム信号１の基準位置Ｐ１ではないと判定した場合には、Ｓ６２５に移行して、カム信号１の基準位置Ｐ１を検出済みであるか否か、即ち、図９のＳ４３０で肯定判定（ＹＥＳと判定）されてから、上記Ｓ６１０で既に１回以上肯定判定されているか否かを判定する。そして、カム信号１の基準位置Ｐ１を検出済みではないと判定した場合には（Ｓ６２５：ＮＯ）、Ｓ６３０に進んで、ガード用イベントカウンタ５６の値を０に設定することにより、基準アングルカウンタ５５及びアングルカウンタ５７の値が進まないようにし、その後、当該カム信号１用アングルカウンタ制御処理を終了する。
【０１４８】
また、上記Ｓ６２５にて、カム信号１の基準位置Ｐ１を検出済みであると判定した場合には、Ｓ６３５に移行して、カム位置カウンタの値を１インクリメントし、その後、Ｓ６４０に進む。
【０１４９】
Ｓ６４０では、カム位置カウンタの値が２４であるか否かを判定し、２４であれば、Ｓ６４５に進んで、生成倍率記憶部５２内の生成倍率を９０に設定する。そして、次にＳ６５０にて、ガード用イベントカウンタ５６の値を８に設定し、その後、当該カム信号１用アングルカウンタ制御処理を終了する。
【０１５０】
一方、上記Ｓ６４０でカム位置カウンタの値が２４ではないと判定した場合には、Ｓ６５５に移行して、生成倍率記憶部５２内の生成倍率を３０に設定する。
そして、次のＳ６６０にて、カム位置カウンタの値が２５であるか否かを判定し、２５であれば、Ｓ６６５に進んで、ガード用イベントカウンタ５６、基準アングルカウンタ５５、アングルカウンタ５７及びカム位置カウンタの各値を１に設定し、その後、当該カム信号１用アングルカウンタ制御処理を終了する。
【０１５１】
また、上記Ｓ６６０にて、カム位置カウンタの値が２５ではないと判定した場合には、Ｓ６７０に移行して、カム位置カウンタの値が６であるか否かを判定する。
そして、カム位置カウンタの値が６であれば（Ｓ６７０：ＹＥＳ）、Ｓ６７５に進み、ガード用イベントカウンタ５６とカム位置カウンタの各値を１８に設定すると共に、１アングルクロック時間記憶部５３内の記憶値（１アングルクロック時間）が更新されるのを禁止し、その後、当該カム信号１用アングルカウンタ制御処理を終了する。
【０１５２】
また、上記Ｓ６７０にて、カム位置カウンタの値が６ではないと判定した場合には、Ｓ６８０に移行して、カム位置カウンタの値が１９であるか否かを判定し、カム位置カウンタの値が１９でなければ、そのまま当該カム信号１用アングルカウンタ制御処理を終了する。
【０１５３】
一方、上記Ｓ６８０でカム位置カウンタの値が１９であると判定した場合には、Ｓ６８５に進んで、１アングルクロック時間記憶部５３内の記憶値（１アングルクロック時間）が更新されるのを許可し、その後、当該カム信号１用アングルカウンタ制御処理を終了する。
【０１５４】
そして、ＥＣＵ１１へクランク信号とカム信号２が正常に入力されなくなったが、カム信号１は正常に入力されている場合には、図６の時間同期タスクにより、入力制御回路１７からアングルクロック生成回路１９へ第１カムエッジ化信号が入力され、図７の処理が実行されなくなる代わりに、図１２の処理により、アングルカウンタ５７の値が図１３のように変移することとなる。
【０１５５】
即ち、図１３に示すように、まず、クランク信号のレベル変化が止まると、図６のＳ２９５の処理により、ガード用イベントカウンタ５６の値が０に設定されて、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップが禁止され、また、生成倍率記憶部５２内の生成倍率がカム信号用の３０に設定される。そして、クランク位置がカム信号１の基準位置Ｐ１になるまでは、図１２のＳ６３０の処理により、ガード用イベントカウンタ５６の値が０に維持される。
【０１５６】
その後、クランク位置がカム信号１の基準位置Ｐ１になると、図１２のＳ６１５及びＳ６２０の処理により、基準アングルカウンタ５５の値が、基準位置Ｐ１に該当する６３０に設定され、カム位置カウンタの値が２４に設定される。そして更に、Ｓ６４５の処理により、生成倍率記憶部５２内の生成倍率が９０に設定されると共に、Ｓ６５０の処理により、ガード用イベントカウンタ５６の値が８に設定され、その結果、基準アングルカウンタ５５及びアングルカウンタ５７のガード値が７２０（＝８×９０）に設定されることとなる。また、前述した図１１の場合と同様に、基準アングルカウンタ５５の値が６３０に設定されると、アングルカウンタ５７の値が、それまで停止していた値（図１３の例でも５２０）から６３０まで、システムクロックにより１ずつ速やかにカウントアップされることとなる。
【０１５７】
そして、その後、クランク位置が＃１ＢＴＤＣとなるまでは、１アングルクロック時間記憶部５３に、１アングルクロック時間として、入力制御回路１７からの第１カムエッジ化信号がカム信号１の基準位置Ｐ１よりも１回前に立ち上がってからカム信号１の基準位置Ｐ１で立ち上がるまでの３０°ＣＡ分の時間を３０で割った時間が記憶されることとなり、その時間毎に、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップと、アングルクロックの出力とが行われることとなる。
【０１５８】
次に、第１カムエッジ化信号が立ち上がると、そのタイミングでのクランク位置は＃１ＢＴＤＣである。そして、その＃１ＢＴＤＣのタイミングにて、カム位置カウンタの値は、Ｓ６３５の処理により、一時的に２４から２５となるが、結局、Ｓ６６０で肯定判定されて、Ｓ６６５の処理により、１に初期化されることとなる。そして更に、そのＳ６６５の処理により、基準アングルカウンタ５５、アングルカウンタ５７及びガード用イベントカウンタ５６の各値も１に初期化される。また、Ｓ６５５の処理により、生成倍率記憶部５２内の生成倍率が３０に戻される。尚、生成倍率記憶部５２内の生成倍率は、カム位置カウンタの値が２４でない場合には、上記Ｓ６５５の処理により３０に設定される。
【０１５９】
そして、その＃１ＢＴＤＣのタイミングから第１カムエッジ化信号が次に立ち上がるまでの間（つまり、カム位置カウンタが２になるまでの間）は、１アングルクロック時間記憶部５３に、１アングルクロック時間として、カム信号１の基準位置Ｐ１から＃１ＢＴＤＣまでの時間（図１３におけるＴ）を９０で割った時間（図１３におけるＴａ）が記憶されることとなり、その時間毎に、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップと、アングルクロックの出力とが行われることとなる。
【０１６０】
また、クランク位置が＃１ＢＴＤＣとなった後は、第１カムエッジ化信号が立ち上がる毎（つまり、カム信号１にエッジが生じる毎）に、カム位置カウンタの値が、Ｓ６３５の処理により１ずつカウントアップされることとなる。
【０１６１】
そして、＃１ＢＴＤＣの次に第１カムエッジ化信号が立ち上がって、カム位置カウンタの値が２になった後は、第１カムエッジ化信号の直前の３０°ＣＡ毎の立ち上がりエッジ間隔を３０で割った時間毎に、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップと、アングルクロックの出力とが行われ、また、ガード用イベントカウンタ５６が、第１カムエッジ化信号が立ち上がる毎にカウントアップされて、基準アングルカウンタ５５及びアングルカウンタ５７の値が、常に、次の第１カムエッジ化信号の立ち上がりタイミングでなるべき値にガードされることとなる。
【０１６２】
その後、カム位置カウンタの値が５から６になるクランク位置（即ち、＃１ＢＴＤＣから１５０°ＣＡ後のクランク位置）にて、Ｓ６７５の処理により、ガード用イベントカウンタ５６とカム位置カウンタとの各値が１８に設定されると共に、１アングルクロック時間記憶部５３に記憶される１アングルクロック時間の更新が禁止される。
【０１６３】
そして、次に第１カムエッジ化信号が立ち上がるクランク位置（即ち、＃１ＢＴＤＣから５４０°ＣＡ後のクランク位置）にて、カム位置カウンタがＳ６３５の処理によりカウントアップされ、その値が１９になると、Ｓ６８５の処理により、１アングルクロック時間記憶部５３に記憶される１アングルクロック時間の更新が許可される。よって、次に第１カムエッジ化信号が立ち上がったタイミング（つまり、カム位置カウンタの値が２０になるタイミング）で、１アングルクロック時間記憶部５３内の１アングルクロック時間が、直前の第１カムエッジ化信号の立ち上がり間隔（つまり、カム位置カウンタの値が１９になっていた３０°ＣＡ分の時間）を３０で割った時間に更新されることとなる。
【０１６４】
このため、＃１ＢＴＤＣから１５０°ＣＡ後のクランク位置から、カム位置カウンタの値が２０になるまでの４２０°ＣＡ分の期間中は、１アングルクロック時間記憶部５３内の記憶値が変化せず、その１アングルクロック時間記憶部５３には、カム位置カウンタの値が５になっていた３０°ＣＡ分の時間を３０で割った時間が、１アングルクロック時間として継続記憶され、その時間毎に、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップと、アングルクロックの出力とが行われることとなる。
【０１６５】
そして、カム位置カウンタの値が２０になった後は、再び、第１カムエッジ化信号の直前の３０°ＣＡ毎の立ち上がりエッジ間隔を３０で割った時間毎に、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップと、アングルクロックの出力とが行われ、また、ガード用イベントカウンタ５６が、第１カムエッジ化信号が立ち上がる毎にカウントアップされて、基準アングルカウンタ５５及びアングルカウンタ５７の値が、常に、次の第１カムエッジ化信号の立ち上がりタイミングでなるべき値にガードされることとなる。
【０１６６】
そして、その後、クランク位置がカム信号１の基準位置Ｐ１になると、再び、Ｓ６１５、Ｓ６２０、Ｓ６４５及びＳ６５０の処理により、基準アングルカウンタ５５の値が６３０に設定され、カム位置カウンタの値が２４に設定され、生成倍率記憶部５２内の生成倍率が９０に設定され、ガード用イベントカウンタ５６の値が８に設定されることとなる。
【０１６７】
以上のような動作により、クランク信号とカム信号２が異常になった場合でも、基準アングルカウンタ５５及びアングルカウンタ５７の値は、ＥＣＵ１１へクランク信号が正常に入力される場合と全く同様に、１°ＣＡ分の時間毎にカウントアップされると共に、１〜７２０の範囲でラップラウンドすることとなる。
【０１６８】
尚、図１２の処理では、カム位置カウンタの値が１８である場合に、１アングルクロック時間記憶部５３内の１アングルクロック時間の更新を禁止するようにしているが、それは以下の理由による。
【０１６９】
まず、カム位置カウンタの値が１８となる３９０°ＣＡ分の期間では、基準アングルカウンタ５５及びアングルカウンタ５７のガード値を５４０に設定したい。
また、その３９０°ＣＡ分の期間のパルスエッジ間隔計測部５１による計測値を、カム位置カウンタの値が１９となる区間での補正前アングルクロックの生成に用いようとすると、カム位置カウンタの値を１８に設定した際の処理中（具体的には、例えば図１２のＳ６７５）で、生成倍率記憶部５２内の生成倍率を３９０に設定しておく必要がある。
【０１７０】
ところが、既述したように、ガード値＝「ガード用イベントカウンタ５６の値×生成倍率記憶部５２内の生成倍率」であるため、生成倍率を３９０に設定すると、カム位置カウンタの値が１８となる３９０°ＣＡ分の期間におけるガード値を５４０に設定することができない。
【０１７１】
そこで、上記例では、ガード値の方を優先しており、カム位置カウンタの値が１８となる３９０°ＣＡ分の期間では、生成倍率を３０のままにすると共に、ガード用イベントカウンタ５６の値を１８とすることで、その期間でのガード値を５４０（＝１８×３０）にしている。そして、カム位置カウンタの値が１９の区間で使用される１アングルクロック時間が長くならないように、１アングルクロック時間の更新を一時的に禁止する処置を施すようにしているのである。
【０１７２】
次に、図１４は、図９のＳ４６０で実行されるカム信号２用アングルカウンタ制御処理を表すフローチャートである。
マイコン１３がカム信号２用アングルカウンタ制御処理を開始すると、まずＳ７１０にて、現在のクランク位置（即ち、今回のカム信号２のエッジに該当するクランク位置）がカム信号２の基準位置Ｐ２（♯１ＢＴＤＣよりも２７０°ＣＡだけ後のクランク位置）であるか否かを判定する。
【０１７３】
尚、カム信号２の基準位置Ｐ２であるか否かは、図示しない他の第２カム信号判定処理により、前述した第１カム信号判定処理と同様の手法で判定される。即ち、第２カム信号判定処理では、カム信号２の立ち下がりエッジ間隔を計測すると共に、カム信号２が立ち下がる毎に、図４に示すように、今回の計測値Ｔ２１と前回の計測値Ｔ２２との比（＝Ｔ２１／Ｔ２２）が所定値（例えば、１／５）よりも小さいか否かを判定して、その比が所定値よりも小さければ、今回のカム信号２の立ち下がりに該当するクランク位置がカム信号２の基準位置Ｐ２であると判定する。そして、Ｓ７１０では、その第２カム信号判定処理の判定結果を参照して、現在のクランク位置がカム信号２の基準位置Ｐ２であるか否かを判定する。
【０１７４】
このＳ７１０にて、現在のクランク位置がカム信号２の基準位置Ｐ２であると判定した場合には、次のＳ７１５にて、基準アングルカウンタ５５の値を、カム信号２の基準位置Ｐ２に該当する基準値である２７０に設定し、続くＳ７２０にて、カム位置カウンタの値を１２に設定した後、Ｓ７４０に移行する。
【０１７５】
一方、上記Ｓ７１０で現在のクランク位置がカム信号２の基準位置Ｐ２ではないと判定した場合には、Ｓ７２５に移行して、カム信号２の基準位置Ｐ２を検出済みであるか否か、即ち、図９のＳ４５０で肯定判定（ＹＥＳと判定）されてから、上記Ｓ７１０で既に１回以上肯定判定されているか否かを判定する。そして、カム信号２の基準位置Ｐ２を検出済みではないと判定した場合には（Ｓ７２５：ＮＯ）、Ｓ７３０に進んで、ガード用イベントカウンタ５６の値を０に設定することにより、基準アングルカウンタ５５及びアングルカウンタ５７の値が進まないようにし、その後、当該カム信号２用アングルカウンタ制御処理を終了する。
【０１７６】
また、上記Ｓ７２５にて、カム信号２の基準位置Ｐ２を検出済みであると判定した場合には、Ｓ７３５に移行して、カム位置カウンタの値を１インクリメントし、その後、Ｓ７４０に進む。
【０１７７】
Ｓ７４０では、カム位置カウンタの値が１２であるか否かを判定し、１２であれば、Ｓ７４５に進んで、生成倍率記憶部５２内の生成倍率を９０に設定する。そして、次にＳ７５０にて、ガード用イベントカウンタ５６の値を４に設定し、その後、当該カム信号２用アングルカウンタ制御処理を終了する。
【０１７８】
一方、上記Ｓ７４０でカム位置カウンタの値が１２ではないと判定した場合には、Ｓ７５５に移行して、生成倍率記憶部５２内の生成倍率を３０に設定する。
そして、次のＳ７６０にて、カム位置カウンタの値が７であるか否かを判定し、７でなければ、Ｓ７６５に進んで、カム位置カウンタの値が１８であるか否かを判定する。そして、カム位置カウンタの値が１８でなければ、Ｓ７７０に進んで、カム位置カウンタの値が１３であるか否かを判定し、１３でなければ、そのまま当該カム信号２用アングルカウンタ制御処理を終了するが、カム位置カウンタの値が１３であれば、Ｓ７７５に進んで、ガード用イベントカウンタ５６の値を１３に設定した後、当該カム信号２用アングルカウンタ制御処理を終了する。
【０１７９】
また、上記Ｓ７６５にて、カム位置カウンタの値が１８であると判定した場合には、Ｓ７８０に移行して、ガード用イベントカウンタ５６とカム位置カウンタの各値を２４に設定すると共に、１アングルクロック時間記憶部５３内の記憶値（１アングルクロック時間）が更新されるのを禁止する。そして、続くＳ７８５にて、現在のクランク位置から２１０°ＣＡ後にコンペアマッチ割り込み要求を発生させるための設定処理を行う。具体的には、割り込み発生カウンタ値記憶部６０に割り込み発生カウンタ値として２１０°ＣＡ後に該当する２１０をセットすると共に、コンペアマッチ割り込みを許可する。そして、その後、当該カム信号２用アングルカウンタ制御処理を終了する。
【０１８０】
また、上記Ｓ７６０にて、カム位置カウンタの値が７であると判定した場合には、Ｓ７９０に移行して、１アングルクロック時間記憶部５３内の記憶値（１アングルクロック時間）が更新されるのを許可し、その後、当該カム信号２用アングルカウンタ制御処理を終了する。
【０１８１】
次に、図１５は、フリーランニングカウンタ５９の値が割り込み発生カウンタ値記憶部６０にセットされた値と一致してコンペアマッチ割り込み要求が発生すると起動されるコンペアマッチ割り込み処理を表すフローチャートである。
【０１８２】
図１５に示すように、マイコン１３がコンペアマッチ割り込み処理を開始すると、Ｓ８００にて、ガード用イベントカウンタ５６とカム位置カウンタの各値を６に設定すると共に、基準アングルカウンタ５５とアングルカウンタ５７の各値を１に設定する。そして、その後、当該割り込み処理を終了する。
【０１８３】
そして、ＥＣＵ１１へクランク信号とカム信号１が正常に入力されなくなったが、カム信号２は正常に入力されている場合には、図６の時間同期タスクにより、入力制御回路１７からアングルクロック生成回路１９へ第２カムエッジ化信号が入力され、図７の処理が実行されなくなる代わりに、図１４及び図１５の処理により、アングルカウンタ５７の値が図１６のように変移することとなる。
【０１８４】
即ち、図１６に示すように、まず、クランク信号のレベル変化が止まると、図６のＳ２９５の処理により、ガード用イベントカウンタ５６の値が０に設定されて、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップが禁止され、また、生成倍率記憶部５２内の生成倍率がカム信号用の３０に設定される。そして、クランク位置がカム信号２の基準位置Ｐ２になるまでは、図１４のＳ７３０の処理により、ガード用イベントカウンタ５６の値が０に維持される。
【０１８５】
その後、クランク位置がカム信号２の基準位置Ｐ２になると、図１４のＳ７１５及びＳ７２０の処理により、基準アングルカウンタ５５の値が、基準位置Ｐ２に該当する２７０に設定され、カム位置カウンタの値が１２に設定される。そして更に、Ｓ７４５の処理により、生成倍率記憶部５２内の生成倍率が９０に設定されると共に、Ｓ７５０の処理により、ガード用イベントカウンタ５６の値が４に設定され、その結果、基準アングルカウンタ５５及びアングルカウンタ５７のガード値が３６０（＝４×９０）に設定されることとなる。また、基準アングルカウンタ５５の値が２７０に設定されると、前述した図１１、図１３の場合と同様に、アングルカウンタ５７の値が、それまで停止していた値（図１６の例では１６０）から２７０まで、システムクロックにより１ずつ速やかにカウントアップされることとなる
そして、その後、クランク位置が基準位置Ｐ２から９０°ＣＡ後の位置となるまでは、１アングルクロック時間記憶部５３に、１アングルクロック時間として、入力制御回路１７からの第２カムエッジ化信号が基準位置Ｐ２よりも１回前に立ち上がってから基準位置Ｐ２で立ち上がるまでの３０°ＣＡ分の時間を３０で割った時間が記憶されることとなり、その時間毎に、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップと、アングルクロックの出力とが行われることとなる。
【０１８６】
次に、第２カムエッジ化信号が立ち上がると、そのタイミングでのクランク位置は基準位置Ｐ２から９０°ＣＡ後の位置である。そして、そのタイミングにて、カム位置カウンタの値は、Ｓ７３５の処理により１２から１３となる。そして更に、Ｓ７７５の処理により、ガード用イベントカウンタ５６の値も１３に設定される。また、Ｓ７５５の処理により、生成倍率記憶部５２内の生成倍率が３０に戻される。尚、生成倍率記憶部５２内の生成倍率は、カム位置カウンタの値が１２でない場合には、上記Ｓ７５５の処理により３０に設定される。
【０１８７】
そして、そのタイミングから第２カムエッジ化信号が次に立ち上がるまでの間（つまり、カム位置カウンタが１４になるまでの間）は、１アングルクロック時間記憶部５３に、１アングルクロック時間として、基準位置Ｐ２から９０°ＣＡ分の時間（図１６におけるＴ）を９０で割った時間（図１６におけるＴａ）が記憶されることとなり、その時間毎に、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップと、アングルクロックの出力とが行われることとなる。
【０１８８】
また、カム位置カウンタの値が１３になった後は、第２カムエッジ化信号が立ち上がる毎（つまり、カム信号２にエッジが生じる毎）に、そのカム位置カウンタの値が、Ｓ７３５の処理により１ずつカウントアップされることとなる。
【０１８９】
そして、カム位置カウンタの値が１４になった後は、第２カムエッジ化信号の直前の３０°ＣＡ毎の立ち上がりエッジ間隔を３０で割った時間毎に、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップと、アングルクロックの出力とが行われ、また、ガード用イベントカウンタ５６が、第２カムエッジ化信号が立ち上がる毎にカウントアップされて、基準アングルカウンタ５５及びアングルカウンタ５７の値が、常に、次の第２カムエッジ化信号の立ち上がりタイミングでなるべき値にガードされることとなる。
【０１９０】
その後、カム位置カウンタの値が１７から１８になるクランク位置（即ち、基準位置Ｐ２から２４０°ＣＡ後で、＃１ＢＴＤＣよりも２１０°ＣＡ前のクランク位置）にて、Ｓ７８０の処理により、ガード用イベントカウンタ５６とカム位置カウンタとの各値が２４に設定されると共に、１アングルクロック時間記憶部５３に記憶される１アングルクロック時間の更新が禁止される。そして更に、Ｓ７８５の処理により、その時点から２１０°ＣＡ後のタイミング（つまり、＃１ＢＴＤＣのタイミング）で図１５のコンペアマッチ割り込み処理を起動させるための設定が行われる。
【０１９１】
そして、その後、カム位置カウンタの値が１７になっていた３０°ＣＡ分の時間を３０で割った時間に２１０を乗じた時間が経過すると、図１５のコンペアマッチ割り込み処理が起動されて、カム位置カウンタとガード用イベントカウンタ５６の各値が６に設定されると共に、基準アングルカウンタ５５とアングルカウンタ５７の各値が＃１ＢＴＤＣに該当する１に初期化されることとなる。
【０１９２】
つまり、本実施形態では、基準アングルカウンタ５５及びアングルカウンタ５７のカウント値を初期化すべき＃１ＢＴＤＣのタイミングでカム信号２にエッジが発生しないため、その＃１ＢＴＤＣよりも２１０°ＣＡ前のタイミングにて、コンペアマッチ割り込み処理が＃１ＢＴＤＣのタイミングで起動されるように設定しておき、そのコンペアマッチ割り込み処理により、カウンタ値の初期化（詳しくは、＃１ＢＴＤＣに該当する値のセット）を実施するようにしている。そして、このことが、前述した図１３の場合と主に異なっている点である。
【０１９３】
尚、クランク信号、カム信号１及びカム信号２の変化パターンによっては、カウンタ値の初期化を実施すべきクランク位置で、必ずアングルクロック生成回路１９への入力信号に有効なエッジを発生させることができる場合もある。そして、そのような場合には、コンペアマッチ割り込みの機能を利用する必要は無く、また、その機能用のハードウェアであるフリーランニングカウンタ５９及び割り込み発生カウンタ値記憶部６０は不要となる。
【０１９４】
そして、第２カムエッジ化信号が次に立ち上がるクランク位置（即ち、＃１ＢＴＤＣから１８０°ＣＡ後のクランク位置）にて、カム位置カウンタがＳ７３５の処理によりカウントアップされ、その値が７になると、Ｓ７９０の処理により、１アングルクロック時間記憶部５３に記憶される１アングルクロック時間の更新が許可される。よって、次に第２カムエッジ化信号が立ち上がったタイミング（つまり、カム位置カウンタの値が８になるタイミング）で、１アングルクロック時間記憶部５３内の１アングルクロック時間が、直前の第２カムエッジ化信号の立ち上がり間隔（つまり、カム位置カウンタの値が７になっていた３０°ＣＡ分の時間）を３０で割った時間に更新されることとなる。
【０１９５】
このため、＃１ＢＴＤＣよりも２１０°ＣＡ前のクランク位置から、カム位置カウンタの値が８になるまでの４２０°ＣＡ分の期間中は、１アングルクロック時間記憶部５３内の記憶値が変化せず、その１アングルクロック時間記憶部５３には、カム位置カウンタの値が１７になっていた３０°ＣＡ分の時間を３０で割った時間が、１アングルクロック時間として継続記憶され、その時間毎に、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップと、アングルクロックの出力とが行われることとなる。
【０１９６】
そして、カム位置カウンタの値が８になった後は、再び、第２カムエッジ化信号の直前の３０°ＣＡ毎の立ち上がりエッジ間隔を３０で割った時間毎に、基準アングルカウンタ５５及びアングルカウンタ５７のカウントアップと、アングルクロックの出力とが行われ、また、ガード用イベントカウンタ５６が、第２カムエッジ化信号が立ち上がる毎にカウントアップされて、基準アングルカウンタ５５及びアングルカウンタ５７の値が、常に、次の第２カムエッジ化信号の立ち上がりタイミングでなるべき値にガードされることとなる。
【０１９７】
そして、その後、クランク位置がカム信号２の基準位置Ｐ２になると、再び、Ｓ７１５、Ｓ７２０、Ｓ７４５及びＳ７５０の処理により、基準アングルカウンタ５５の値が２７０に設定され、カム位置カウンタの値が１２に設定され、生成倍率記憶部５２内の生成倍率が９０に設定され、ガード用イベントカウンタ５６の値が４に設定されることとなる。
【０１９８】
以上のような動作により、クランク信号とカム信号１が異常になった場合でも、基準アングルカウンタ５５及びアングルカウンタ５７の値は、ＥＣＵ１１へクランク信号が正常に入力される場合と全く同様に、１°ＣＡ分の時間毎にカウントアップされると共に、１〜７２０の範囲でラップラウンドすることとなる。
【０１９９】
以上のように本実施形態のＥＣＵ１１では、クランク信号に異常が生じても、カム信号１とカム信号２との少なくとも一方が正常でありさえすれば、アングルカウンタ５７の値は、クランク信号が正常に入力される場合と全く同様に変移することとなる。
【０２００】
よって、本実施形態のＥＣＵ１１によれば、クランク信号に異常が生じた場合にも、エンジンを正常時と同じ制御プログラム（つまり、アングルカウンタ５７を参照するクランク角度同期の制御プログラム）で制御することができる。このため、カム信号を時間基準としてエンジンの制御を実施するフェイルセーフ用の制御プログラムを別途用意しなくても、クランク信号に異常が生じた場合のリンプホームを実現することができる。
【０２０１】
そして更に、クランク信号に異常が生じた場合にも、アングルクロック生成回路１９を利用しており、追加のハードウェアとしては、入力制御回路１７にて、クランク信号の立ち下がりエッジをアングルクロック生成回路１９の入力端子２０へ立ち上がりエッジとして入力させる部分（具体的には、インバータ３５）以外の部分だけで済む。よって、クランク信号に異常が生じた場合のリンプホームを、より少ないソフトウェア及びハードウェアの追加で実現するこができる。
【０２０２】
尚、上記実施形態では、パルスエッジ間隔計測部５１が計測手段に相当し、入力端子２０が計測手段の入力端子に相当し、入力制御回路１７が入力手段に相当している。また、生成倍率記憶部５２と、１アングルクロック時間記憶部５３と、補正前アングルクロック出力部５４とが、逓倍クロック出力手段に相当している。そして、クランク信号用の入力信号診断処理（図５）と、カム信号１用の入力信号診断処理と、カム信号２用の入力信号診断処理とが、異常判定手段に相当し、図６の時間同期タスクが、入力切替制御手段に相当し、図９のカム割り込み処理（図１０、図１２、図１４の各処理を含む）が、異常時カウント制御手段に相当している。
【０２０３】
以上、本発明の一実施形態について説明したが、本発明は上記実施形態に何等限定されるものではなく、本発明の要旨を逸脱しない範囲において、種々なる態様で実施し得ることは勿論である。
【０２０４】
例えば、変形例として、カム信号が１つしかないならば、クランク信号が異常になった場合に、その１つのカム信号がレベル変化する毎に立ち上がるエッジ化信号が入力制御回路１７からアングルクロック生成回路１９へ入力されるようにし、図１２又は図１４と同様の処理を実施することで、アングルカウンタ５７の値を、クランク信号が正常な場合と同様に変移させるようにすれば良い。
【０２０５】
また、上記実施形態では、カム信号１とカム信号２とのそれぞれについて、そのカム信号がレベル変化する毎に立ち上がるエッジ化信号を生成し、クランク信号が異常になった場合に、その各エッジ化信号と、その両エッジ化信号のオア信号との何れかを、アングルクロック生成回路１９へ入力するようにしたが、エッジ化信号を生成せずに、クランク信号が異常になった場合には、カム信号１と、カム信号２と、その両カム信号のオア信号との何れかを、アングルクロック生成回路１９へ入力するようにして、アングルカウンタ５７の値をクランク信号が正常な場合と同様に変移させるようにしても良い。そして、このことは、上記変形例についても同様である。
【０２０６】
但し、エッジ化信号を生成してアングルクロック生成回路１９へ入力するように構成した方が、アングルクロック生成回路１９への入力信号に有効なエッジ（上記例では立ち上がりエッジ）が発生するクランク角度間隔を小さくすることができるため、補正前アングルクロックの発生間隔を実際の１°ＣＡ分の時間からずれ難くすることができる、という点で有利である。
【図面の簡単な説明】
【０２０７】
【図１】実施形態のＥＣＵ（エンジン制御装置）の概略構成を表す構成図である。
【図２】入力制御回路を表す構成図である。
【図３】アングルクロック生成回路の構成を表すブロック図である。
【図４】入力制御回路に入力される３つの信号と、その入力制御回路の出力信号を表すタイムチャートである。
【図５】入力信号診断処理を表すフローチャートである。
【図６】時間同期タスクを表すフローチャートである。
【図７】クランク信号用アングルカウンタ制御処理を表すフローチャートである。
【図８】図７の処理の作用を表すタイムチャートである。
【図９】カム割り込み処理を表すフローチャートである。
【図１０】図９のＳ４２０で実行されるカム信号１とカム信号２のオア信号用アングルカウンタ制御処理を表すフローチャートである。
【図１１】図１０の処理の作用を表すタイムチャートである。
【図１２】図９のＳ４４０で実行されるカム信号１用アングルカウンタ制御処理を表すフローチャートである。
【図１３】図１２の処理の作用を表すタイムチャートである。
【図１４】図９のＳ４６０で実行されるカム信号２用アングルカウンタ制御処理を表すフローチャートである。
【図１５】コンペアマッチ割り込み処理を表すフローチャートである。
【図１６】図１４及び図１５の処理の作用を表すタイムチャートである。
【符号の説明】
【０２０８】
１１…ＥＣＵ（エンジン制御装置）、１３…マイコン、１５…入力回路、１７…入力制御回路、１９…アングルクロック生成回路、２０…入力端子、２１…クランク軸センサ、２３…第１カム軸センサ、２５…第２カム軸センサ、３１…エッジ化部、３３…セレクタ部、３５，３７…インバータ、３６，３９，４１…シフトレジスタ、３８…アンド回路、４０，４２…排他的論理和回路、４３…オア回路、４４，４５，４６…スイッチ回路、５１…パルスエッジ間隔計測部、５２…生成倍率記憶部、５３…１アングルクロック時間記憶部、５４…補正前アングルクロック出力部、５５…基準アングルカウンタ、５６…ガード用イベントカウンタ、５７…アングルカウンタ、５８…アングルクロック出力部、５９…フリーランニングカウンタ、６０…割り込み発生カウンタ値記憶部
【図１】
2006200484.tif 000003
【図２】
2006200484.tif 000004
【図３】
2006200484.tif 000005
【図４】
2006200484.tif 000006
【図５】
2006200484.tif 000007
【図６】
2006200484.tif 000008
【図７】
2006200484.tif 000009
【図８】
2006200484.tif 000010
【図９】
2006200484.tif 000011
【図１０】
2006200484.tif 000012
【図１１】
2006200484.tif 000013
【図１２】
2006200484.tif 000014
【図１３】
2006200484.tif 000015
【図１４】
2006200484.tif 000016
【図１５】
2006200484.tif 000017
【図１６】
2006200484.tif 000018