以下に、本発明が適用された実施形態のエンジン制御装置について説明する。尚、本実施形態のエンジン制御装置は、車両に搭載される例えばV型の内燃機関型エンジンを制御するものである。
まず、図1は、実施形態のエンジン制御装置(以下、ECUという)11の概略構成を表す構成図である。
図1に示すように、本実施形態のECU11には、マイコン(マイクロコンピュータ)13と、入力回路15と、入力制御回路17と、アングルクロック生成回路19とが備えられている。
入力回路15は、クランク軸センサ21からエンジンのクランク軸の回転に応じて出力されるクランク信号と、第1カム軸センサ23からエンジンの第1カム軸の回転に応じて出力される第1カム信号(以下、カム信号1という)と、第2カム軸センサ25からエンジンの第2カム軸の回転に応じて出力される第2カム信号(以下、カム信号2という)とを、それぞれ入力し二値の矩形波に波形整形して出力する。そして、その波形整形後のクランク信号、カム信号1及びカム信号2は、マイコン13と入力制御回路17とにそれぞれ入力される。
ここで、クランク軸センサ21から入力回路15を介してマイコン13及び入力制御回路17に入力されるクランク信号は、図4に示すように、クランク軸の回転位置が360°CA毎(つまり1回転毎)の特定位置に来ていない場合には、クランク軸が10°回転する毎(10°CA毎)にロー→ハイ→ローといった具合にパルス状に変化し、クランク軸の回転位置が上記特定位置に来たときには、有効な立ち下がりエッジの間隔が整数倍(本実施形態では3倍)長くなる。
つまり、クランク信号には、クランク軸の回転位置が360°CA毎の特定位置に来ていない場合には、10°CA毎に有効な立ち下がりエッジが発生し、クランク軸の回転位置が360°CA毎の特定位置に来たときには、10°CA毎のパルスが所定数(本実施形態では2個)抜けることで立ち下がりエッジの間隔が30°CA分の長さになった欠け歯部(以下、欠け歯という)が生じる。
また、本実施形態においては、エンジンの第1気筒の上死点(TDC)よりも所定のクランク角度(例えば10°CA)だけ前のクランク位置(以下、このクランク位置を#1BTDCと記す)と、その♯1BTDCから360°CA後のクランク位置とで、クランク信号に欠け歯の終了に該当する立ち下がりエッジが生じるようになっている。そして、♯1BTDCのクランク位置が、クランク信号の基準位置となっている。尚、図4及び以下の説明では、360°CA毎の欠け歯のうち、♯1BTDCのクランク位置で終了する欠け歯を「表欠け歯」と言い、その♯1BTDCから360°CA後のクランク位置で終了する欠け歯を「裏欠け歯」と言うことにする。
一方、第1カム軸センサ23と第2カム軸センサ25との各々から入力回路15を介してマイコン13及び入力制御回路17に入力されるカム信号1とカム信号2は、クランク信号に対して図4に示すような関係にある。
つまり、カム信号1は、#1BTDCよりも90°CAだけ前のクランク位置(図4にて「P1」と記したクランク位置)でハイからローに立ち下がると共に、そのP1のクランク位置から、90°CA分だけロー→30°CA分だけハイ→30°CA分だけロー→30°CA分だけハイ→30°CA分だけロー→30°CA分だけハイ→390°CA分だけロー→30°CA分だけハイ→30°CA分だけロー→30°CA分だけハイ、というパターンでレベル変化する。そして、カム信号2は、カム信号1に対して位相が360°CA分だけずれた信号となっている。また、本実施形態では、上記P1のクランク位置が、カム信号1の基準位置となっており、そのP1よりも360°CAだけずれたクランク位置(図4にて「P2」と記したクランク位置)が、カム信号2の基準位置となっている。
次に、入力制御回路17は、概念的には、クランク信号と、カム信号1と、カム信号2と、カム信号1とカム信号2とのオア信号とを、マイコン13からの制御信号に応じて、アングルクロック生成回路19の入力端子20に切り替えて入力させるための回路であり、詳しくは図2のように構成されている。
即ち、入力制御回路17は、エッジ化部31と、セレクタ部33とから構成されているる。
そして、エッジ化部31は、クランク信号に有効な立ち下がりエッジが発生したときに立ち上がりエッジが発生する信号を生成するための回路として、クランク信号をレベル反転させて出力するインバータ(反転回路)35と、インバータ35の出力信号をシステムクロックの1周期分だけ遅らせて出力するシフトレジスタ36と、シフトレジスタ36の出力信号をレベル反転させて出力するインバータ37と、インバータ35の出力信号とインバータ37の出力信号とのアンド信号(論理積信号)を出力するアンド回路(論理積回路)38とを備えている。このため、アンド回路38からは、クランク信号に立ち下がりエッジが発生すると立ち上がると共に、ハイの時間がシステムクロックの1周期分である信号(以下、クランクエッジ化信号という)が出力されることとなる。
また、エッジ化部31は、カム信号1に立ち上がりエッジと立ち下がりエッジとのそれぞれが発生したとき(即ち、カム信号1がレベル変化したとき)に立ち上がりエッジが発生する信号を生成するための回路として、カム信号1をシステムクロックの1周期分だけ遅らせて出力するシフトレジスタ39と、シフトレジスタ39の出力信号とカム信号1との排他的論理和信号を出力する排他的論理和回路40とを備えている。このため、排他的論理和回路40からは、カム信号1に立ち上がりエッジと立ち下がりエッジとのそれぞれが発生すると立ち上がると共に、ハイの時間がシステムクロックの1周期分である信号(第1エッジ化信号に相当し、以下、第1カムエッジ化信号という)が出力されることとなる。
更に、エッジ化部31は、カム信号2に立ち上がりエッジと立ち下がりエッジとのそれぞれが発生したとき(即ち、カム信号2がレベル変化したとき)に立ち上がりエッジが発生する信号を生成するための回路として、カム信号2をシステムクロックの1周期分だけ遅らせて出力するシフトレジスタ41と、シフトレジスタ41の出力信号とカム信号2との排他的論理和信号を出力する排他的論理和回路42とを備えている。このため、排他的論理和回路42からは、カム信号2に立ち上がりエッジと立ち下がりエッジとのそれぞれが発生すると立ち上がると共に、ハイの時間がシステムクロックの1周期分である信号(第2エッジ化信号に相当し、以下、第2カムエッジ化信号という)が出力されることとなる。
尚、システムクロックは、ECU11の内部(例えばマイコン13内)で生成されるクロックである。そして、そのシステムクロックの1周期は、クランク信号の1周期の最小値(つまり、エンジンが最高回転数で運転された場合における10°CA分の時間)よりも十分に小さい時間に設定されている。
また、セレクタ部33は、3入力のオア回路(論理和回路)43と、アンド回路38から出力されるクランクエッジ化信号をオア回路43に入力させるか否かを、マイコン13からの制御信号に応じて切り替えるスイッチ回路44と、排他的論理和回路40から出力される第1カムエッジ化信号をオア回路43に入力させるか否かを、マイコン13からの制御信号に応じて切り替えるスイッチ回路45と、排他的論理和回路42から出力される第2カムエッジ化信号をオア回路43に入力させるか否かを、マイコン13からの制御信号に応じて切り替えるスイッチ回路46とを備えている。そして、オア回路43の出力信号が、入力制御回路17の出力信号として、アングルクロック生成回路19の入力端子20に入力される。
このような入力制御回路17では、マイコン13からの制御信号により、スイッチ回路44〜46のうち、スイッチ回路44だけがオンされた場合には、図4の下から3段目に示すように、アンド回路38からのクランクエッジ化信号が、当該入力制御回路17の出力信号として、アングルクロック生成回路19の入力端子20に入力されることとなる。つまり、この場合には、クランク信号とカム信号1とカム信号2とのうち、クランク信号が選択されて、そのクランク信号に立ち下がりエッジが発生するタイミング情報が、アングルクロック生成回路19に入力されることとなる。
また、マイコン13からの制御信号により、スイッチ回路44〜46のうち、スイッチ回路46だけがオンされた場合には、図4の最下段に示すように、排他的論理和回路42からの第2カムエッジ化信号が、当該入力制御回路17の出力信号として、アングルクロック生成回路19の入力端子20に入力されることとなる。つまり、この場合には、クランク信号とカム信号1とカム信号2とのうち、カム信号2が選択されて、そのカム信号2に立ち上がりエッジと立ち下がりエッジとのそれぞれが発生するタイミング情報が、アングルクロック生成回路19に入力されることとなる。
また、図4には示されていないが、マイコン13からの制御信号により、スイッチ回路44〜46のうち、スイッチ回路45だけがオンされた場合には、排他的論理和回路40からの第1カムエッジ化信号が、当該入力制御回路17の出力信号として、アングルクロック生成回路19の入力端子20に入力されることとなる。つまり、この場合には、クランク信号とカム信号1とカム信号2とのうち、カム信号1が選択されて、そのカム信号1に立ち上がりエッジと立ち下がりエッジとのそれぞれが発生するタイミング情報が、アングルクロック生成回路19に入力されることとなる。
また、マイコン13からの制御信号により、スイッチ回路44〜46のうち、スイッチ回路45とスイッチ回路46との2つがオンされた場合には、図4の下から2段目に示すように、排他的論理和回路40からの第1カムエッジ化信号と排他的論理和回路42からの第2カムエッジ化信号とのオア回路43によるオア信号(論理和信号)が、当該入力制御回路17の出力信号として、アングルクロック生成回路19の入力端子20に入力されることとなる。つまり、この場合には、クランク信号とカム信号1とカム信号2とのうち、カム信号1とカム信号2との2つが選択され、その2つのカム信号の何れかに立ち上がりエッジと立ち下がりエッジとのそれぞれが発生するタイミング情報が、アングルクロック生成回路19に入力されることとなる。
尚、入力制御回路17の出力信号がハイレベルになる時間は、システムクロックの1周期分であり、前述したように、クランク信号の1周期時間よりも十分に小さいが、図4では、その時間を実際よりも長く示している。これは、クランク信号、カム信号1及びカム信号2と、入力制御回路17の出力信号との関係を、分かり易く図示するためである。また、入力制御回路17において、カム信号1をシステムクロック幅でエッジ化した第1カム信号と、カム信号2をシステムクロック幅でエッジ化した第2カム信号とのオア信号を出力するようにしているのは、単に、カム信号1とカム信号2とのオア信号を出力するようにしたのでは、両カム信号のハイレベル期間が重なった場合に、エッジ情報の一部が消失してしまうので、これを防止するためである。
一方、マイコン13は、ソフトウェアにより、クランク信号とカム信号1とカム信号2とのそれぞれについて、ECU11へ正常に入力されているか否かを診断すると共に、その診断結果に応じて、上記スイッチ回路44〜46のオン/オフ状態を切り替える。
即ち、マイコン13は、クランク信号が正常に入力されていると判定している場合には、スイッチ回路44〜46のうち、スイッチ回路44だけをオンさせて、入力制御回路17からアングルクロック生成回路19の入力端子20へ、クランクエッジ化信号が入力されるようにする。
また、クランク信号が正常に入力されていないが、カム信号1とカム信号2は正常に入力されていると判定している場合には、スイッチ回路44〜46のうち、スイッチ回路45とスイッチ回路46との2つをオンさせて、入力制御回路17からアングルクロック生成回路19の入力端子20へ、第1カムエッジ化信号と第2カムエッジ化信号とのオア信号が入力されるようにする。
また、クランク信号とカム信号2が正常に入力されていないが、カム信号1は正常に入力されていると判定している場合には、スイッチ回路44〜46のうち、スイッチ回路45だけをオンさせて、入力制御回路17からアングルクロック生成回路19の入力端子20へ、第1カムエッジ化信号が入力されるようにする。
また、クランク信号とカム信号1が正常に入力されていないが、カム信号2は正常に入力されていると判定している場合には、スイッチ回路44〜46のうち、スイッチ回路46だけをオンさせて、入力制御回路17からアングルクロック生成回路19の入力端子20へ、第2カムエッジ化信号が入力されるようにする。
尚、このようなマイコン13による切替処理については、後で図5及び図6に基づき詳しく説明する。
次に、アングルクロック生成回路19は、入力制御回路17から入力端子20に入力される信号を入力信号とし、その入力信号から、クランク信号に立ち下がりエッジが生じるクランク角度(本実施形態では10°CA)よりも小さい一定のクランク角度(本実施形態では1°CA)分の時間を1周期としたクロックを生成すると共に、そのクロックに応じて、1°CAの分解能でクランク位置を表すアングルカウンタをカウント動作させる回路である。
そして、図3に示すように、アングルクロック生成回路19は、入力端子20からの入力信号に特定方向のパルスエッジ(本実施形態では、立ち上がりエッジ)が発生してから該立ち上がりエッジが次に発生するまでの間隔(以下、パルスエッジ間隔という)毎に、そのパルスエッジ間隔を計測するパルスエッジ間隔計測部51と、マイコン13により(換言すれば、ソフトウェアにより)決定されるアングルクロック生成倍率(逓倍数に相当)を記憶する生成倍率記憶部52と、パルスエッジ間隔計測部51によるパルスエッジ間隔の計測値を生成倍率記憶部52に記憶されたアングルクロック生成倍率で割った時間を、1アングルクロック時間として記憶する1アングルクロック時間記憶部53と、その1アングルクロック時間記憶部53に記憶された時間毎に、その時間を1周期とするクロック(逓倍クロックに相当)を出力する補正前アングルクロック出力部54とを備えている。
パルスエッジ間隔計測部51は、入力信号のパルスエッジ間隔をシステムクロックによって計測する。つまり、パルスエッジ間隔計測部51は、入力信号が立ち上がってから次に立ち上がるまでの間に発生したシステムクロックの数を、入力信号のパルスエッジ間隔として計測する。
補正前アングルクロック出力部54も、1アングルクロック時間記憶部53に記憶された時間(即ち、クロックの出力周期)をシステムクロックによって計測する。つまり、補正前アングルクロック出力部54は、システムクロックが1アングルクロック時間記憶部53内の記憶値に該当する数だけ発生する毎に、クロックを出力する。
また、1アングルクロック時間記憶部53内の記憶値は、入力端子20からの入力信号が立ち上がる毎に自動更新されるが、その自動更新の許可と禁止がマイコン13により(ソフトウェアにより)切替可能となっている。
更に、アングルクロック生成回路19には、補正前アングルクロック出力部54から出力されるクロック(以下、補正前アングルクロックという)をクロックソースとしてカウントアップする基準アングルカウンタ55と、その基準アングルカウンタ55の値を上限ガードするためのガード用イベントカウンタ56と、システムクロックによりカウント値が基準アングルカウンタ55の値に自動追従するアングルカウンタ57(角度カウンタに相当)と、そのアングルカウンタ57のカウントアップ時にアングルクロックを出力するアングルクロック出力部58とが備えられている。
ガード用イベントカウンタ56は、入力端子20からの入力信号が立ち上がる毎にカウントアップする。そして、基準アングルカウンタ55の上限値は、「ガード用イベントカウンタ56の値×生成倍率記憶部52に記憶されたアングルクロック生成倍率」の値(以下、ガード値という)にガードされる。
また、アングルカウンタ57は、そのカウント値がクランク位置を1°CAの分解能で表すカウンタであり、そのカウント値が基準アングルカウンタ55の値よりも小さい場合にシステムクロックでカウントアップし、そのカウント値が基準アングルカウンタ55の値と一致したら自動停止する。このため、アングルカウンタ57も、基本的には、補正前アングルクロック出力部54から出力される補正前アングルクロックに応じてカウント動作することとなるが、そのカウントアップタイミングは、補正前アングルクロックにより基準アングルカウンタ55の値が変化してから次のシステムクロックの出力タイミングとなる。つまり、アングルカウンタ57は、基準アングルカウンタ55に対して、カウント値の変化タイミングをシステムクロックに同期させたものである。そして、そのアングルカウンタ57のカウントアップ時に、アングルクロック出力部58からアングルクロックが出力される。
更に、アングルクロック生成回路19には、入力端子20からの入力信号が立ち上がる毎にカウント値が0にクリアされ、補正前アングルクロックでフリーランニング動作するフリーランニングカウンタ59と、そのフリーランニングカウンタ59の値と比較される割り込み発生カウンタ値がマイコン13によってセットされる割り込み発生カウンタ値記憶部60とが備えられている。そして、フリーランニングカウンタ59の値が割り込み発生カウンタ値記憶部60にセットされた割り込み発生カウンタ値と一致すると、マイコン13に対するコンペアマッチ割り込み要求が発生するようになっている。
一方、マイコン13は、アングルカウンタ57のカウント値によってクランク位置を把握し、そのカウント値をエンジン回転に同期したインジェクタ制御(燃料噴射制御)、点火制御及びポンプ制御等に使用している。例えば、アングルカウンタ57のカウント値が、ある値から他のある値になるまでアクチュエータに対する駆動信号を出力するとか、アングルカウンタ57のカウント値が、ある値になってから一定時間が経過するまで駆動信号を出力するといった具合に、アングルカウンタ57の値を使用する。
尚、上記アングルクロック生成回路19の構成により、エンジンの減速時には、アングルカウンタ57をガード用イベントカウンタ56による上記ガード値で停止させることが可能となり、加速時には、システムクロックの速度でアングルカウンタ57の値を補正する(つまり、足りない分の値を加える)ことができ、アングルカウンタ57のカウント値に同期する処理の抜けを防止できる。また、こうしたアングルクロック生成回路19の構成や作用については、例えば特許文献1,2等にも記載されている。
次に、マイコン13が実行する処理について説明する。
まず図5は、入力信号診断処理を表すフローチャートである。この入力信号診断処理は、時間同期タスクとして一定時間Tc毎に実行される。
そして、マイコン13が入力信号診断処理の実行を開始すると、まずS110にて、エンジン回転数が所定値Na以上か否かを判定し、エンジン回転数が所定値Na以上でなければ、そのまま当該入力信号診断処理を終了する。尚、エンジン回転数は、他のエンジン回転数算出用処理(図示省略)により、クランク信号に基づき計測される所定クランク角度分の時間から算出される。例えば、クランク信号に欠け歯が発生する360°CA分の時間間隔を計測し、その計測値からエンジン回転数が算出される。また、欠け歯は、クランク信号の立ち下がりエッジ間隔を計測すると共に、今回の計測値が前回の計測値を所定の欠歯判定比倍(例えば2倍)した値以上であれば、今回の立ち下がりエッジ間隔が欠け歯であると判定する、といった周知の方法で検出される。
一方、上記S110でエンジン回転数が所定値Na以上であると判定した場合には、S120に進み、当該入力信号診断処理の前回の実行開始時から今回の実行開始時までの一定時間Tcの間に、クランク信号に立ち下がりエッジがあったか否かを判定する。そして、クランク信号に立ち下がりエッジがあった場合(クランクエッジ有りの場合)には、S130に進んで、クランク信号の診断結果として正常を記憶し、続くS140にて、無エッジ期間計測カウンタの値を0にクリアする。そして、その後、当該入力信号診断処理を終了する。
また、上記S120でクランク信号に立ち下がりエッジがなかったと判定した場合には、S150に移行して、無エッジ期間計測カウンタの値が所定値Nbよりも大きくなったか否かを判定する。
そして、無エッジ期間計測カウンタの値が所定値Nbよりも大きくなければ、S160に進んで、無エッジ期間計測カウンタの値を1インクリメント(1加算)し、その後、当該入力信号診断処理を終了する。
また、上記S150にて、無エッジ期間計測カウンタの値が所定値Nbよりも大きいと判定した場合には、S170に移行する。そして、そのS170にて、クランク信号の診断結果として異常を記憶し、その後、当該入力信号診断処理を終了する。
つまり、図5の入力信号診断処理では、エンジン回転数が所定値Na以上の場合において(S110:YES)、クランク信号に本来ならば少なくとも1回は立ち下がりエッジが発生するはずの一定期間(=「Tc×Nb」の期間)が経過しても、クランク信号に立ち下がりエッジが1回も発生しなければ、クランク信号が異常(正常に入力されていない)と判断するようになっている(S120:NO→S150:YES→S170)。
一方、マイコン13は、カム信号1とカム信号2とのそれぞれについても、図5と同様の入力信号診断処理(図示省略)を実行して異常の有無を判定している。
次に、図6は、入力制御回路17からアングルクロック生成回路19への入力信号を切り替えるための時間同期タスクを表すフローチャートである。この時間同期タスクは、上記各信号毎の入力信号診断処理と並行して一定時間毎に実行される。
そして、マイコン13が図6の時間同期タスクの実行を開始すると、まずS210にて、クランク信号用の入力信号診断処理(図5)による診断結果を参照して、クランク信号が異常か否かを判定し、クランク信号が異常でなければ(即ち正常であれば)、S220に進んで、アングルクロック生成回路19への入力信号としてクランク信号を選択する。つまり、入力制御回路17におけるスイッチ回路44〜46のうち、スイッチ回路44だけをオンさせて、アングルクロック生成回路19の入力端子20へ、クランクエッジ化信号が入力されるようにする。そして、その後、当該時間同期タスクを終了する。
一方、上記S210でクランク信号が異常であると判定した場合には、S230に移行する。そして、カム信号1用の入力信号診断処理による診断結果を参照して、カム信号1が正常か否かを判定し、カム信号1が正常であれば、次のS240にて、カム信号2用の入力信号診断処理による診断結果を参照して、カム信号2が正常か否かを判定する。
このS240でカム信号2が正常であると判定した場合には、S250に進んで、アングルクロック生成回路19への入力信号として両カム信号を選択する。つまり、入力制御回路17におけるスイッチ回路44〜46のうち、スイッチ回路45とスイッチ回路46をオンさせて、アングルクロック生成回路19の入力端子20へ、第1カムエッジ化信号と第2カムエッジ化信号とのオア信号が入力されるようにする。そして、その後、S290へ移行する。
また、上記S240でカム信号2が正常ではないと判定した場合には、S260に移行し、アングルクロック生成回路19への入力信号として正常な方のカム信号1を選択する。つまり、入力制御回路17におけるスイッチ回路44〜46のうち、スイッチ回路45だけをオンさせて、アングルクロック生成回路19の入力端子20へ、第1カムエッジ化信号が入力されるようにする。そして、その後、S290へ移行する。
また、上記S230でカム信号1が正常ではないと判定した場合には、S270に移行し、S240と同様に、カム信号2用の入力信号診断処理による診断結果を参照して、カム信号2が正常か否かを判定する。そして、カム信号2が正常であれば、S280に進み、アングルクロック生成回路19への入力信号として正常な方のカム信号2を選択する。つまり、入力制御回路17におけるスイッチ回路44〜46のうち、スイッチ回路46だけをオンさせて、アングルクロック生成回路19の入力端子20へ、第2カムエッジ化信号が入力されるようにする。そして、その後、S290へ移行する。
また、上記S270でカム信号2が正常ではないと判定した場合には、クランク信号とカム信号1とカム信号2との全てが異常であるため、そのまま当該時間同期タスクを終了する。
次に、上記S250、S260及びS280のそれぞれから移行するS290では、上記S210でクランク信号が異常であると判定したのが1回目であるか否かを判定し、1回目でなければ、そのまま当該時間同期タスクを終了するが、1回目であれば、次のS295に進んで、アングルクロック生成回路19における生成倍率記憶部52内のアングルクロック生成倍率(以下単に、生成倍率ともいう)を30に設定すると共に、アングルクロック生成回路19におけるガード用イベントカウンタ56の値を0に設定し、その後、当該時間同期タスクを終了する。尚、クランク信号が正常な場合において、生成倍率記憶部52に記憶される生成倍率の初期値は10である。
次に、図7は、クランク信号に基づいてアングルカウンタ57の値を1°CA分ずつ変移させるためのクランク信号用アングルカウンタ制御処理を表すフローチャートである。そして、この処理は、クランク信号に立ち下がりエッジが生じる毎に起動されるクランク割り込み処理である。
マイコン13がクランク信号用アングルカウンタ制御処理の実行を開始すると、まずS310にて、現在のクランク位置(即ち、今回のクランク信号の立ち下がりエッジに該当するクランク位置)がクランク信号の基準位置(♯1BTDC)であるか否かを判定する。尚、クランク信号の基準位置であるか否かは、図示しない他の基準位置判定処理により、例えば以下のように判定される。即ち、クランク信号に欠け歯が発生したことを検出すると、その欠け歯検出タイミングよりも120°CAだけ前の時点から現在までの間に、カム信号1にエッジが生じていたか否かを判定し、カム信号1にエッジが発生していたならば、今回発生した欠け歯が「表欠け歯」と「裏欠け歯」とのうちの「表欠け歯」であるため、現在のクランク位置がクランク信号の基準位置に該当する♯1BTDCであると判定される。そして、S310では、その基準位置判定処理の判定結果を参照して、現在のクランク位置がクランク信号の基準位置であるか否かを判定する。
このS310にて、現在のクランク位置がクランク信号の基準位置であると判定した場合には、次のS315にて、アングルクロック生成回路19における基準アングルカウンタ55とアングルカウンタ57との各値を、クランク信号の基準位置(♯1BTDC)に該当する値(本実施形態では1)に初期化し、続くS320にて、クランク位置カウンタの値を♯1BTDCに該当する1に初期化した後、S330に移行する。尚、クランク位置カウンタは、図8の6段目に示すように、クランク位置を10°CAの分解能で表すソフトウェア上のカウンタである。
また、上記S310で現在のクランク位置がクランク信号の基準位置ではないと判定した場合には、S325に移行して、クランク位置カウンタの値を1インクリメントし、その後、S330に進む。
S330では、クランク位置カウンタの値が欠け歯の開始位置に該当する34又は70であるか否かを判定し、クランク位置カウンタの値が34又は70でなければ、S335に進んで、アングルクロック生成回路19における生成倍率記憶部52内の生成倍率を通常値としての10に設定する。
次にS340にて、クランク位置カウンタの値が37であるか否かを判定し、37でなければ、S345に進んで、クランク位置カウンタの値が1であるか否かを判定する。そして、クランク位置カウンタの値が1でなければ(S345:NO)、そのまま当該クランク信号用アングルカウンタ制御処理を終了するが、クランク位置カウンタの値が1であれば(S345:YES)、S350に進んで、アングルクロック生成回路19におけるガード用イベントカウンタ56の値を1に設定し、その後、当該クランク信号用アングルカウンタ制御処理を終了する。
また、上記S340でクランク位置カウンタの値が37であると判定した場合には、S355に移行して、ガード用イベントカウンタ56の値を37に設定し、その後、当該クランク信号用アングルカウンタ制御処理を終了する。
一方、上記S330でクランク位置カウンタの値が34又は70であると判定した場合には、S360に移行して、生成倍率記憶部52内の生成倍率を、通常値の3倍である30に設定する。
そして、次のS365にて、クランク位置カウンタの値が34であるか否かを判定し、34であれば、S370に進んで、ガード用イベントカウンタ56の値を12に設定すると共に、クランク位置カウンタの値を36に設定し、その後、当該クランク信号用アングルカウンタ制御処理を終了する。
また、上記S365でクランク位置カウンタの値が34ではないと判定した場合(即ち、クランク位置カウンタの値が70である場合)には、S375に移行して、ガード用イベントカウンタ56の値を24に設定すると共に、クランク位置カウンタの値を72に設定し、その後、当該クランク信号用アングルカウンタ制御処理を終了する。
そして、ECU11へクランク信号が正常に入力されている場合には、図6の時間同期タスクにより、入力制御回路17からアングルクロック生成回路19へクランクエッジ化信号が入力され、図7の処理により、アングルカウンタ57の値が図8のように変移することとなる。
即ち、図8に示すように、クランク位置がエンジンの1サイクル(720°CA分)における基準位置としての#1BTDCになると、S315及びS320の処理により、基準アングルカウンタ55及びアングルカウンタ57とクランク位置カウンタの各値とが1に初期化され、また、S335の処理により、生成倍率記憶部52内の生成倍率が10に設定されると共に、S350の処理により、ガード用イベントカウンタ56の値が1に初期化される。
そして、その後は、クランク信号が立ち下がる毎に、クランク位置カウンタの値が、S325の処理により1ずつカウントアップされることとなる。
また、その#1BTDCのタイミングから次にクランク信号が立ち下がるまでの間(つまり、クランク位置カウンタが1から2になるまでの間)の動作については後で述べるが、クランク位置カウンタの値が2になった後は、パルスエッジ間隔計測部51によりパルスエッジ間隔として計測されたクランク信号の10°CA毎の立ち下がりエッジ間隔Tpを生成倍率である10で割った「Tp/10」の時間(つまり、1°CA分の時間)毎に、補正前アングルクロック出力部54から補正前アングルクロックが出力されて、基準アングルカウンタ55が1ずつカウントアップされていく。そして、その基準アングルカウンタ55の値に追従してアングルカウンタ57もカウントアップしていき、そのアングルカウンタ57がカウントアップする1°CA分の時間毎に、アングルクロック出力部58からアングルクロックが出力される。
更に、ガード用イベントカウンタ56が、クランク信号が立ち下がる毎(つまり、入力制御回路17からアングルクロック生成回路19へ出力されるクランクエッジ化信号が立ち上がる毎)にカウントアップされるため、基準アングルカウンタ55及びアングルカウンタ57の値は、常に、次のクランク信号の立ち下がりタイミングでなるべき値にガードされることとなる。
そして、クランク位置カウンタの値が、♯1BTDCから330°CA後のクランク位置(つまり、裏欠け歯の開始位置)に該当する34になると、S360の処理により、生成倍率記憶部52内の生成倍率が30に設定され、S370の処理により、クランク位置カウンタの値が、欠け歯で欠落する2だけ増加されて36に補正される。更に、S370の処理により、ガード用イベントカウンタ56の値が12に補正される。これは、生成倍率記憶部52内の生成倍率を30に変更したためであり、裏欠け歯の期間におけるガード値を360にするためである。
尚、S360の処理によって生成倍率記憶部52内の生成倍率が30に変更されても、1アングルクロック時間記憶部53の記憶値は、次のクランク信号の立ち下がりタイミングでしか変更されないため、裏欠け歯の期間中は、その直前のパルスエッジ間隔Tpを10で割った時間(=Tp/10)毎に、基準アングルカウンタ55及びアングルカウンタ57のカウントアップと、アングルクロックの出力とが行われることとなる。
その後、次にクランク信号が立ち下がって、クランク位置カウンタがS325の処理によりカウントアップされ、その値が、裏欠け歯の終了位置(♯1BTDCから360°CA後のクランク位置)に該当する37になると、S335の処理により、生成倍率記憶部52内の生成倍率が10に戻されると共に、S355の処理により、次のクランク信号の立ち下がりタイミングまでのガード値を370にするために、ガード用イベントカウンタ56の値が37に設定される。
そして、クランク位置カウンタの値が37になる裏欠け歯の終了位置から次にクランク信号が立ち下がるまでの間は、1アングルクロック時間記憶部53に、1°CA分の時間である1アングルクロック時間として、パルスエッジ間隔計測部51により計測された裏欠け歯の時間を30で割った時間が記憶されることとなり、その時間毎に、基準アングルカウンタ55及びアングルカウンタ57のカウントアップと、アングルクロックの出力とが行われることとなる。
そして、次にクランク信号が立ち下がって、S325の処理によりクランク位置カウンタの値が38になった後は、再び、クランク信号の10°CA毎の立ち下がりエッジ間隔を10で割った時間毎に、基準アングルカウンタ55及びアングルカウンタ57のカウントアップと、アングルクロックの出力とが行われ、また、ガード用イベントカウンタ56が、クランク信号が立ち下がる毎にカウントアップされて、基準アングルカウンタ55及びアングルカウンタ57の値が、常に、次のクランク信号の立ち下がりタイミングでなるべき値にガードされることとなる。そして更に、クランク位置カウンタの値も、S325の処理により、クランク信号が立ち下がる毎に1ずつカウントアップされることとなる。
そして、クランク位置カウンタの値が、♯1BTDCよりも30°CAだけ前のクランク位置(つまり、表欠け歯の開始位置)に該当する70になると、S360の処理により、生成倍率記憶部52内の生成倍率が30に設定され、S375の処理により、クランク位置カウンタの値が、欠け歯で欠落する2だけ増加されて72に補正される。更に、S375の処理により、ガード用イベントカウンタ56の値が24に補正される。これは、生成倍率記憶部52内の生成倍率を30に変更したためであり、表欠け歯の期間におけるガード値を720にするためである。
尚、表欠け歯の期間中は、前述した裏欠け歯の期間中と同様に、S360の処理によって生成倍率記憶部52内の生成倍率が30に変更されても、1アングルクロック時間記憶部53の記憶値が次のクランク信号の立ち下がりタイミングでしか変更されないため、直前のパルスエッジ間隔Tpを10で割った時間毎に、基準アングルカウンタ55及びアングルカウンタ57のカウントアップと、アングルクロックの出力とが行われることとなる。
その後、次にクランク信号が立ち下がると、そのタイミングでのクランク位置は、表欠け歯の終了位置であって、基準位置としての#1BTDCである。よって、前述したように、S315及びS320の処理により、基準アングルカウンタ55及びアングルカウンタ57とクランク位置カウンタの各値とが1に初期化され、また、S335の処理により、生成倍率記憶部52内の生成倍率が10に設定されると共に、S350の処理により、ガード用イベントカウンタ56の値が1に初期化される。
そして、そのタイミングから次にクランク信号が立ち下がるまでの間(つまり、クランク位置カウンタが2になるまでの間)は、1アングルクロック時間記憶部53に、1°CA分の時間である1アングルクロック時間として、パルスエッジ間隔計測部51により計測された表欠け歯の時間(図8におけるT)を30で割った時間(図8におけるTa)が記憶されることとなり、その時間毎に、基準アングルカウンタ55及びアングルカウンタ57のカウントアップと、アングルクロックの出力とが行われることとなる。
そして、次にクランク信号が立ち下がって、S325の処理によりクランク位置カウンタの値が2になった後は、再び、クランク信号の10°CA毎の立ち下がりエッジ間隔を10で割った時間毎に、基準アングルカウンタ55及びアングルカウンタ57のカウントアップと、アングルクロックの出力とが行われ、また、ガード用イベントカウンタ56が、クランク信号が立ち下がる毎にカウントアップされて、基準アングルカウンタ55及びアングルカウンタ57の値が、常に、次のクランク信号の立ち下がりタイミングでなるべき値にガードされることとなる。そして更に、クランク位置カウンタの値も、S325の処理により、クランク信号が立ち下がる毎に1ずつカウントアップされることとなる。
以上のような動作により、基準アングルカウンタ55及びアングルカウンタ57の値が、1°CA分の時間毎にカウントアップされると共に、1〜720の範囲でラップラウンドすることとなり、その値は、クランク位置を#1BTDCを基準として1°CAの分解能で表すこととなる。
尚、図7におけるS370とS375との各処理にて、クランク位置カウンタの値を、欠け歯で欠落する2だけ増加補正しているのは、クランク位置カウンタの値を1〜72の範囲でラップラウンドさせるためであり、例えば等しいクランク角度間隔にイベントを発生したい場合に、クランク位置カウンタの値がある数の自然数倍だったらイベント発生、というようにソフトを簡単に作れるようにと考慮したものである。また、図8において、その最下段に示したアングルクロックの出力間隔は、実際よりもかなり大きく表されている。そして、このことは、後述する図11、図13及び図16に関しても同様である。
次に、図9は、カム信号1とカム信号2との何れか一方にエッジ(立ち上がりエッジと立ち下がりエッジ)が生じる毎に起動されるカム割り込み処理を表すフローチャートである。
マイコン13がカム割り込み処理の実行を開始すると、まずS410にて、図6の処理結果を参照し、アングルクロック生成回路19への入力信号として両カム信号を選択しているか否か、つまり、アングルクロック生成回路19の入力端子20へ第1カムエッジ化信号と第2カムエッジ化信号とのオア信号を入力させているか否かを判定する。
そして、入力信号として両カム信号を選択していると判定した場合には、S420に進み、後述する図10のカム信号1とカム信号2のオア信号用アングルカウンタ制御処理を実行し、その後、当該カム割り込み処理を終了する。
また、上記S410にて、両カム信号を選択していないと判定した場合には、S430に移行して、図6の処理結果を参照し、アングルクロック生成回路19への入力信号としてカム信号1を選択しているか否か、つまり、アングルクロック生成回路19の入力端子20へ第1カムエッジ化信号を入力させているか否かを判定する。
そして、カム信号1を選択していると判定した場合には(S430:YES)、S440に進み、後述する図12のカム信号1用アングルカウンタ制御処理を実行し、その後、当該カム割り込み処理を終了する。
また、上記S430にて、カム信号1を選択していないと判定した場合には、S450に移行して、図6の処理結果を参照し、アングルクロック生成回路19への入力信号としてカム信号2を選択しているか否か、つまり、アングルクロック生成回路19の入力端子20へ第2カムエッジ化信号を入力させているか否かを判定する。
そして、カム信号2を選択していないと判定した場合には(S450:NO)、入力信号としてカム信号は選択されていないため、そのまま当該カム割り込み処理を終了するが、入力信号としてカム信号2を選択していると判定した場合には(S450:YES)、S460に進んで、後述する図14のカム信号2用アングルカウンタ制御処理を実行し、その後、当該カム割り込み処理を終了する。
次に、図10は、図9のS420で実行されるカム信号1とカム信号2のオア信号用アングルカウンタ制御処理を表すフローチャートである。
マイコン13がカム信号1とカム信号2のオア信号用アングルカウンタ制御処理を開始すると、まずS510にて、現在のクランク位置(即ち、今回のカム信号1又はカム信号2のエッジに該当するクランク位置)がカム信号1の基準位置P1(♯1BTDCよりも90°CAだけ前のクランク位置)であるか否かを判定する。
尚、カム信号1の基準位置P1であるか否かは、図示しない他の第1カム信号判定処理により、例えば以下のように判定される。即ち、第1カム信号判定処理では、カム信号1の立ち下がりエッジ間隔を計測すると共に、カム信号1が立ち下がる毎に、図4に示すように、今回の計測値T11と前回の計測値T12との比(=T11/T12)が所定値(例えば、1/5)よりも小さいか否かを判定して、その比が所定値よりも小さければ、今回のカム信号1の立ち下がりに該当するクランク位置がカム信号1の基準位置P1であると判定する。そして、S510では、その第1カム信号判定処理の判定結果を参照して、現在のクランク位置がカム信号1の基準位置P1であるか否かを判定する。
このS510にて、現在のクランク位置がカム信号1の基準位置P1であると判定した場合には、次のS515にて、基準アングルカウンタ55の値を、カム信号1の基準位置P1に該当する基準値である630に設定し、続くS520にて、カム位置カウンタの値を最終値である24に設定した後、S540に移行する。尚、カム位置カウンタは、図11の6段目に示すように、カム軸の回転位置を30°CAの分解能で表すソフトウェア上のカウンタであるが、結局、カム信号(カム信号1又はカム信号2)によって特定されるクランク位置を30°CAの分解能で表すカウンタである。また、クランク信号がECU11へ正常に入力されている場合、そのカム位置カウンタの値は0に固定されている。
一方、上記S510で現在のクランク位置がカム信号1の基準位置P1ではないと判定した場合には、S525に移行して、カム信号1の基準位置P1を検出済みであるか否か、即ち、図9のS410で肯定判定(YESと判定)されてから、上記S510で既に1回以上肯定判定されているか否かを判定する。そして、カム信号1の基準位置P1を検出済みではないと判定した場合には(S525:NO)、S530に進んで、ガード用イベントカウンタ56の値を0に設定することにより、基準アングルカウンタ55及びアングルカウンタ57の値が進まないようにし、その後、当該オア信号用アングルカウンタ制御処理を終了する。
また、上記S525にて、カム信号1の基準位置P1を検出済みであると判定した場合には、S535に移行して、カム位置カウンタの値を1インクリメントし、その後、S540に進む。
S540では、カム位置カウンタの値が10又は24であるか否かを判定し、10又は24であれば、S545に進んで、生成倍率記憶部52内の生成倍率を90に設定する。
次にS550にて、カム位置カウンタの値が10であるか否かを判定し、10でなければ(つまり、カム位置カウンタの値が24である場合には)、S555に進んで、ガード用イベントカウンタ56の値を8に設定し、その後、当該オア信号用アングルカウンタ制御処理を終了する。
また、上記S550でカム位置カウンタの値が10であると判定した場合には、S560に移行して、ガード用イベントカウンタ56の値を4に設定すると共に、カム位置カウンタの値を12に設定し、その後、当該オア信号用アングルカウンタ制御処理を終了する。
一方、上記S540でカム位置カウンタの値が10又は24ではないと判定した場合には、S565に移行して、生成倍率記憶部52内の生成倍率を30に設定する。
そして、次のS570にて、カム位置カウンタの値が13であるか否かを判定し、13であれば、S575に進んで、ガード用イベントカウンタ56の値を13に設定した後、当該オア信号用アングルカウンタ制御処理を終了する。
また、上記S570にて、カム位置カウンタの値が13ではないと判定した場合には、S580に移行して、カム位置カウンタの値が25であるか否かを判定する。そして、カム位置カウンタの値が25でなければ(S580:NO)、そのまま当該オア信号用アングルカウンタ制御処理を終了するが、カム位置カウンタの値が25であれば(S580:YES)、S585に進んで、ガード用イベントカウンタ56、基準アングルカウンタ55、アングルカウンタ57及びカム位置カウンタの各値を1に設定し、その後、当該オア信号用アングルカウンタ制御処理を終了する。
そして、ECU11へクランク信号が正常に入力されなくなったが、カム信号1とカム信号2は正常に入力されている場合には、図6の時間同期タスクにより、入力制御回路17からアングルクロック生成回路19へ第1カムエッジ化信号と第2カムエッジ化信号とのオア信号(以下単に、オア信号ともいう)が入力され、図7の処理が実行されなくなる代わりに、図10の処理により、アングルカウンタ57の値が図11のように変移することとなる。
即ち、図11に示すように、まず、クランク信号のレベル変化が止まると、図6のS295の処理により、ガード用イベントカウンタ56の値が0に設定されて、基準アングルカウンタ55及びアングルカウンタ57のカウントアップが禁止され、また、生成倍率記憶部52内の生成倍率がカム信号用の30に設定される。そして、クランク位置がカム信号1の基準位置P1になるまでは、図10のS530の処理により、ガード用イベントカウンタ56の値が0に維持される。
その後、クランク位置がカム信号1の基準位置P1になると、図10のS515及びS520の処理により、基準アングルカウンタ55の値が、その基準位置P1に該当する630に設定され、カム位置カウンタの値が24に設定される。そして更に、S545の処理により、生成倍率記憶部52内の生成倍率が90に設定されると共に、S555の処理により、ガード用イベントカウンタ56の値が8に設定され、その結果、基準アングルカウンタ55及びアングルカウンタ57のガード値が720(=8×90)に設定されることとなる。また、基準アングルカウンタ55の値が630に設定されると、アングルカウンタ57の値が、それまで停止していた値(図11の例では520)から630まで、システムクロックにより1ずつ速やかにカウントアップされることとなる。このため、アングルカウンタ57のカウント値に同期した噴射や点火といった制御の処理抜けは生じない。
そして、その後、クランク位置が#1BTDCとなるまでは、1アングルクロック時間記憶部53に、1°CA分の時間である1アングルクロック時間として、入力制御回路17からの上記オア信号がカム信号1の基準位置P1の1回前に立ち上がってからカム信号1の基準位置P1で立ち上がるまでの30°CA分の時間を30で割った時間が記憶されることとなり、その時間毎に、基準アングルカウンタ55及びアングルカウンタ57のカウントアップと、アングルクロックの出力とが行われることとなる。
次に、上記オア信号が立ち上がると、そのタイミングでのクランク位置は#1BTDCである。そして、その#1BTDCのタイミングにて、カム位置カウンタの値は、S535の処理により、一時的に24から25となるが、結局、S580で肯定判定されて、S585の処理により、1に初期化されることとなる。そして更に、そのS585の処理により、基準アングルカウンタ55、アングルカウンタ57及びガード用イベントカウンタ56の各値も1に初期化される。また、S565の処理により、生成倍率記憶部52内の生成倍率が30に戻される。
そして、その#1BTDCのタイミングから上記オア信号が次に立ち上がるまでの間(つまり、カム位置カウンタが2になるまでの間)は、1アングルクロック時間記憶部53に、1アングルクロック時間として、カム信号1の基準位置P1から#1BTDCまでの時間(図11におけるT)を90で割った時間(図11におけるTa)が記憶されることとなり、その時間毎に、基準アングルカウンタ55及びアングルカウンタ57のカウントアップと、アングルクロックの出力とが行われることとなる。
また、クランク位置が#1BTDCとなった後は、上記オア信号が立ち上がる毎(つまり、カム信号1又はカム信号2にエッジが生じる毎)に、カム位置カウンタの値が、S535の処理により1ずつカウントアップされることとなる。
そして、#1BTDCの次に上記オア信号が立ち上がって、カム位置カウンタの値が2になった後は、上記オア信号の30°CA毎の立ち上がりエッジ間隔を30で割った時間毎に、基準アングルカウンタ55及びアングルカウンタ57のカウントアップと、アングルクロックの出力とが行われ、また、ガード用イベントカウンタ56が、上記オア信号が立ち上がる毎にカウントアップされて、基準アングルカウンタ55及びアングルカウンタ57の値が、常に、次のオア信号の立ち上がりタイミングでなるべき値にガードされることとなる。
そして、カム位置カウンタの値が9から10になると、S545の処理により、生成倍率記憶部52内の生成倍率が90に設定され、S560の処理により、カム位置カウンタの値が、2だけ増加されて12に補正される。更に、S560の処理により、ガード用イベントカウンタ56の値が4に補正される。これは、生成倍率記憶部52内の生成倍率を90に変更したためであり、#1BTDCから270°CA後のクランク位置から90°CA分の期間におけるガード値を360にするためである。
尚、S545の処理によって生成倍率記憶部52内の生成倍率が90に変更されても、1アングルクロック時間記憶部53の記憶値は、次のオア信号の立ち上がりタイミングでしか変更されないため、#1BTDCから270°CA後のクランク位置から90°CA分の期間中は、その直前のオア信号の立ち上がり間隔を30で割った時間毎に、基準アングルカウンタ55及びアングルカウンタ57のカウントアップと、アングルクロックの出力とが行われることとなる。
その後、次にオア信号が立ち上がって、カム位置カウンタがS535の処理によりカウントアップされ、その値が13になると、S565の処理により、生成倍率記憶部52内の生成倍率が30に戻されると共に、S575の処理により、次のオア信号の立ち上がりタイミングまでのガード値を390にするために、ガード用イベントカウンタ56の値が13に設定される。
そして、カム位置カウンタの値が13になってから次にオア信号が立ち上がるまでの間(つまり、カム位置カウンタが14になるまでの間)は、その直前のオア信号の立ち上がり間隔(つまり、カム位置カウンタが12になっていた90°CA分の時間)を90で割った時間が、1アングルクロック時間として1アングルクロック時間記憶部53に記憶されることとなり、その時間毎に、基準アングルカウンタ55及びアングルカウンタ57のカウントアップと、アングルクロックの出力とが行われることとなる。
そして、次に上記オア信号が立ち上がって、S535の処理によりカム位置カウンタの値が14になった後は、再び、上記オア信号の30°CA毎の立ち上がりエッジ間隔を30で割った時間毎に、基準アングルカウンタ55及びアングルカウンタ57のカウントアップと、アングルクロックの出力とが行われ、また、ガード用イベントカウンタ56が、上記オア信号が立ち上がる毎にカウントアップされて、基準アングルカウンタ55及びアングルカウンタ57の値が、常に、上記オア信号の次の立ち上がりタイミングでなるべき値にガードされることとなる。そして更に、カム位置カウンタの値も、S535の処理により、上記オア信号が立ち上がる毎に1ずつカウントアップされることとなる。
そして、その後、クランク位置がカム信号1の基準位置P1になると、再び、S515、S520、S545及びS555の処理により、基準アングルカウンタ55の値が630に設定され、カム位置カウンタの値が24に設定され、生成倍率記憶部52内の生成倍率が90に設定され、ガード用イベントカウンタ56の値が8に設定されることとなる。
以上のような動作により、基準アングルカウンタ55及びアングルカウンタ57の値は、ECU11へクランク信号が正常に入力される場合と全く同様に、1°CA分の時間毎にカウントアップされると共に、1〜720の範囲でラップラウンドすることとなる。
尚、図10の処理では、カム信号1の基準位置P1を検出した時に、クランク位置を確定して、基準アングルカウンタ55やカム位置カウンタへの値のセットを行うようにしたが、クランク位置の確定及び基準アングルカウンタ55やカム位置カウンタへの値のセットは、カム信号2の基準位置P2を検出した時に行うようにしても良い。
次に、図12は、図9のS440で実行されるカム信号1用アングルカウンタ制御処理を表すフローチャートである。
マイコン13がカム信号1用アングルカウンタ制御処理を開始すると、まずS610にて、現在のクランク位置(即ち、今回のカム信号1のエッジに該当するクランク位置)がカム信号1の基準位置P1であるか否かを、前述した図10のS510と同様に判定する。
そして、このS610にて、現在のクランク位置がカム信号1の基準位置P1であると判定した場合には、次のS615にて、基準アングルカウンタ55の値を、カム信号1の基準位置P1に該当する基準値である630に設定し、続くS620にて、カム位置カウンタの値を最終値である24に設定した後、S640に移行する。
一方、上記S610で現在のクランク位置がカム信号1の基準位置P1ではないと判定した場合には、S625に移行して、カム信号1の基準位置P1を検出済みであるか否か、即ち、図9のS430で肯定判定(YESと判定)されてから、上記S610で既に1回以上肯定判定されているか否かを判定する。そして、カム信号1の基準位置P1を検出済みではないと判定した場合には(S625:NO)、S630に進んで、ガード用イベントカウンタ56の値を0に設定することにより、基準アングルカウンタ55及びアングルカウンタ57の値が進まないようにし、その後、当該カム信号1用アングルカウンタ制御処理を終了する。
また、上記S625にて、カム信号1の基準位置P1を検出済みであると判定した場合には、S635に移行して、カム位置カウンタの値を1インクリメントし、その後、S640に進む。
S640では、カム位置カウンタの値が24であるか否かを判定し、24であれば、S645に進んで、生成倍率記憶部52内の生成倍率を90に設定する。そして、次にS650にて、ガード用イベントカウンタ56の値を8に設定し、その後、当該カム信号1用アングルカウンタ制御処理を終了する。
一方、上記S640でカム位置カウンタの値が24ではないと判定した場合には、S655に移行して、生成倍率記憶部52内の生成倍率を30に設定する。
そして、次のS660にて、カム位置カウンタの値が25であるか否かを判定し、25であれば、S665に進んで、ガード用イベントカウンタ56、基準アングルカウンタ55、アングルカウンタ57及びカム位置カウンタの各値を1に設定し、その後、当該カム信号1用アングルカウンタ制御処理を終了する。
また、上記S660にて、カム位置カウンタの値が25ではないと判定した場合には、S670に移行して、カム位置カウンタの値が6であるか否かを判定する。
そして、カム位置カウンタの値が6であれば(S670:YES)、S675に進み、ガード用イベントカウンタ56とカム位置カウンタの各値を18に設定すると共に、1アングルクロック時間記憶部53内の記憶値(1アングルクロック時間)が更新されるのを禁止し、その後、当該カム信号1用アングルカウンタ制御処理を終了する。
また、上記S670にて、カム位置カウンタの値が6ではないと判定した場合には、S680に移行して、カム位置カウンタの値が19であるか否かを判定し、カム位置カウンタの値が19でなければ、そのまま当該カム信号1用アングルカウンタ制御処理を終了する。
一方、上記S680でカム位置カウンタの値が19であると判定した場合には、S685に進んで、1アングルクロック時間記憶部53内の記憶値(1アングルクロック時間)が更新されるのを許可し、その後、当該カム信号1用アングルカウンタ制御処理を終了する。
そして、ECU11へクランク信号とカム信号2が正常に入力されなくなったが、カム信号1は正常に入力されている場合には、図6の時間同期タスクにより、入力制御回路17からアングルクロック生成回路19へ第1カムエッジ化信号が入力され、図7の処理が実行されなくなる代わりに、図12の処理により、アングルカウンタ57の値が図13のように変移することとなる。
即ち、図13に示すように、まず、クランク信号のレベル変化が止まると、図6のS295の処理により、ガード用イベントカウンタ56の値が0に設定されて、基準アングルカウンタ55及びアングルカウンタ57のカウントアップが禁止され、また、生成倍率記憶部52内の生成倍率がカム信号用の30に設定される。そして、クランク位置がカム信号1の基準位置P1になるまでは、図12のS630の処理により、ガード用イベントカウンタ56の値が0に維持される。
その後、クランク位置がカム信号1の基準位置P1になると、図12のS615及びS620の処理により、基準アングルカウンタ55の値が、基準位置P1に該当する630に設定され、カム位置カウンタの値が24に設定される。そして更に、S645の処理により、生成倍率記憶部52内の生成倍率が90に設定されると共に、S650の処理により、ガード用イベントカウンタ56の値が8に設定され、その結果、基準アングルカウンタ55及びアングルカウンタ57のガード値が720(=8×90)に設定されることとなる。また、前述した図11の場合と同様に、基準アングルカウンタ55の値が630に設定されると、アングルカウンタ57の値が、それまで停止していた値(図13の例でも520)から630まで、システムクロックにより1ずつ速やかにカウントアップされることとなる。
そして、その後、クランク位置が#1BTDCとなるまでは、1アングルクロック時間記憶部53に、1アングルクロック時間として、入力制御回路17からの第1カムエッジ化信号がカム信号1の基準位置P1よりも1回前に立ち上がってからカム信号1の基準位置P1で立ち上がるまでの30°CA分の時間を30で割った時間が記憶されることとなり、その時間毎に、基準アングルカウンタ55及びアングルカウンタ57のカウントアップと、アングルクロックの出力とが行われることとなる。
次に、第1カムエッジ化信号が立ち上がると、そのタイミングでのクランク位置は#1BTDCである。そして、その#1BTDCのタイミングにて、カム位置カウンタの値は、S635の処理により、一時的に24から25となるが、結局、S660で肯定判定されて、S665の処理により、1に初期化されることとなる。そして更に、そのS665の処理により、基準アングルカウンタ55、アングルカウンタ57及びガード用イベントカウンタ56の各値も1に初期化される。また、S655の処理により、生成倍率記憶部52内の生成倍率が30に戻される。尚、生成倍率記憶部52内の生成倍率は、カム位置カウンタの値が24でない場合には、上記S655の処理により30に設定される。
そして、その#1BTDCのタイミングから第1カムエッジ化信号が次に立ち上がるまでの間(つまり、カム位置カウンタが2になるまでの間)は、1アングルクロック時間記憶部53に、1アングルクロック時間として、カム信号1の基準位置P1から#1BTDCまでの時間(図13におけるT)を90で割った時間(図13におけるTa)が記憶されることとなり、その時間毎に、基準アングルカウンタ55及びアングルカウンタ57のカウントアップと、アングルクロックの出力とが行われることとなる。
また、クランク位置が#1BTDCとなった後は、第1カムエッジ化信号が立ち上がる毎(つまり、カム信号1にエッジが生じる毎)に、カム位置カウンタの値が、S635の処理により1ずつカウントアップされることとなる。
そして、#1BTDCの次に第1カムエッジ化信号が立ち上がって、カム位置カウンタの値が2になった後は、第1カムエッジ化信号の直前の30°CA毎の立ち上がりエッジ間隔を30で割った時間毎に、基準アングルカウンタ55及びアングルカウンタ57のカウントアップと、アングルクロックの出力とが行われ、また、ガード用イベントカウンタ56が、第1カムエッジ化信号が立ち上がる毎にカウントアップされて、基準アングルカウンタ55及びアングルカウンタ57の値が、常に、次の第1カムエッジ化信号の立ち上がりタイミングでなるべき値にガードされることとなる。
その後、カム位置カウンタの値が5から6になるクランク位置(即ち、#1BTDCから150°CA後のクランク位置)にて、S675の処理により、ガード用イベントカウンタ56とカム位置カウンタとの各値が18に設定されると共に、1アングルクロック時間記憶部53に記憶される1アングルクロック時間の更新が禁止される。
そして、次に第1カムエッジ化信号が立ち上がるクランク位置(即ち、#1BTDCから540°CA後のクランク位置)にて、カム位置カウンタがS635の処理によりカウントアップされ、その値が19になると、S685の処理により、1アングルクロック時間記憶部53に記憶される1アングルクロック時間の更新が許可される。よって、次に第1カムエッジ化信号が立ち上がったタイミング(つまり、カム位置カウンタの値が20になるタイミング)で、1アングルクロック時間記憶部53内の1アングルクロック時間が、直前の第1カムエッジ化信号の立ち上がり間隔(つまり、カム位置カウンタの値が19になっていた30°CA分の時間)を30で割った時間に更新されることとなる。
このため、#1BTDCから150°CA後のクランク位置から、カム位置カウンタの値が20になるまでの420°CA分の期間中は、1アングルクロック時間記憶部53内の記憶値が変化せず、その1アングルクロック時間記憶部53には、カム位置カウンタの値が5になっていた30°CA分の時間を30で割った時間が、1アングルクロック時間として継続記憶され、その時間毎に、基準アングルカウンタ55及びアングルカウンタ57のカウントアップと、アングルクロックの出力とが行われることとなる。
そして、カム位置カウンタの値が20になった後は、再び、第1カムエッジ化信号の直前の30°CA毎の立ち上がりエッジ間隔を30で割った時間毎に、基準アングルカウンタ55及びアングルカウンタ57のカウントアップと、アングルクロックの出力とが行われ、また、ガード用イベントカウンタ56が、第1カムエッジ化信号が立ち上がる毎にカウントアップされて、基準アングルカウンタ55及びアングルカウンタ57の値が、常に、次の第1カムエッジ化信号の立ち上がりタイミングでなるべき値にガードされることとなる。
そして、その後、クランク位置がカム信号1の基準位置P1になると、再び、S615、S620、S645及びS650の処理により、基準アングルカウンタ55の値が630に設定され、カム位置カウンタの値が24に設定され、生成倍率記憶部52内の生成倍率が90に設定され、ガード用イベントカウンタ56の値が8に設定されることとなる。
以上のような動作により、クランク信号とカム信号2が異常になった場合でも、基準アングルカウンタ55及びアングルカウンタ57の値は、ECU11へクランク信号が正常に入力される場合と全く同様に、1°CA分の時間毎にカウントアップされると共に、1〜720の範囲でラップラウンドすることとなる。
尚、図12の処理では、カム位置カウンタの値が18である場合に、1アングルクロック時間記憶部53内の1アングルクロック時間の更新を禁止するようにしているが、それは以下の理由による。
まず、カム位置カウンタの値が18となる390°CA分の期間では、基準アングルカウンタ55及びアングルカウンタ57のガード値を540に設定したい。
また、その390°CA分の期間のパルスエッジ間隔計測部51による計測値を、カム位置カウンタの値が19となる区間での補正前アングルクロックの生成に用いようとすると、カム位置カウンタの値を18に設定した際の処理中(具体的には、例えば図12のS675)で、生成倍率記憶部52内の生成倍率を390に設定しておく必要がある。
ところが、既述したように、ガード値=「ガード用イベントカウンタ56の値×生成倍率記憶部52内の生成倍率」であるため、生成倍率を390に設定すると、カム位置カウンタの値が18となる390°CA分の期間におけるガード値を540に設定することができない。
そこで、上記例では、ガード値の方を優先しており、カム位置カウンタの値が18となる390°CA分の期間では、生成倍率を30のままにすると共に、ガード用イベントカウンタ56の値を18とすることで、その期間でのガード値を540(=18×30)にしている。そして、カム位置カウンタの値が19の区間で使用される1アングルクロック時間が長くならないように、1アングルクロック時間の更新を一時的に禁止する処置を施すようにしているのである。
次に、図14は、図9のS460で実行されるカム信号2用アングルカウンタ制御処理を表すフローチャートである。
マイコン13がカム信号2用アングルカウンタ制御処理を開始すると、まずS710にて、現在のクランク位置(即ち、今回のカム信号2のエッジに該当するクランク位置)がカム信号2の基準位置P2(♯1BTDCよりも270°CAだけ後のクランク位置)であるか否かを判定する。
尚、カム信号2の基準位置P2であるか否かは、図示しない他の第2カム信号判定処理により、前述した第1カム信号判定処理と同様の手法で判定される。即ち、第2カム信号判定処理では、カム信号2の立ち下がりエッジ間隔を計測すると共に、カム信号2が立ち下がる毎に、図4に示すように、今回の計測値T21と前回の計測値T22との比(=T21/T22)が所定値(例えば、1/5)よりも小さいか否かを判定して、その比が所定値よりも小さければ、今回のカム信号2の立ち下がりに該当するクランク位置がカム信号2の基準位置P2であると判定する。そして、S710では、その第2カム信号判定処理の判定結果を参照して、現在のクランク位置がカム信号2の基準位置P2であるか否かを判定する。
このS710にて、現在のクランク位置がカム信号2の基準位置P2であると判定した場合には、次のS715にて、基準アングルカウンタ55の値を、カム信号2の基準位置P2に該当する基準値である270に設定し、続くS720にて、カム位置カウンタの値を12に設定した後、S740に移行する。
一方、上記S710で現在のクランク位置がカム信号2の基準位置P2ではないと判定した場合には、S725に移行して、カム信号2の基準位置P2を検出済みであるか否か、即ち、図9のS450で肯定判定(YESと判定)されてから、上記S710で既に1回以上肯定判定されているか否かを判定する。そして、カム信号2の基準位置P2を検出済みではないと判定した場合には(S725:NO)、S730に進んで、ガード用イベントカウンタ56の値を0に設定することにより、基準アングルカウンタ55及びアングルカウンタ57の値が進まないようにし、その後、当該カム信号2用アングルカウンタ制御処理を終了する。
また、上記S725にて、カム信号2の基準位置P2を検出済みであると判定した場合には、S735に移行して、カム位置カウンタの値を1インクリメントし、その後、S740に進む。
S740では、カム位置カウンタの値が12であるか否かを判定し、12であれば、S745に進んで、生成倍率記憶部52内の生成倍率を90に設定する。そして、次にS750にて、ガード用イベントカウンタ56の値を4に設定し、その後、当該カム信号2用アングルカウンタ制御処理を終了する。
一方、上記S740でカム位置カウンタの値が12ではないと判定した場合には、S755に移行して、生成倍率記憶部52内の生成倍率を30に設定する。
そして、次のS760にて、カム位置カウンタの値が7であるか否かを判定し、7でなければ、S765に進んで、カム位置カウンタの値が18であるか否かを判定する。そして、カム位置カウンタの値が18でなければ、S770に進んで、カム位置カウンタの値が13であるか否かを判定し、13でなければ、そのまま当該カム信号2用アングルカウンタ制御処理を終了するが、カム位置カウンタの値が13であれば、S775に進んで、ガード用イベントカウンタ56の値を13に設定した後、当該カム信号2用アングルカウンタ制御処理を終了する。
また、上記S765にて、カム位置カウンタの値が18であると判定した場合には、S780に移行して、ガード用イベントカウンタ56とカム位置カウンタの各値を24に設定すると共に、1アングルクロック時間記憶部53内の記憶値(1アングルクロック時間)が更新されるのを禁止する。そして、続くS785にて、現在のクランク位置から210°CA後にコンペアマッチ割り込み要求を発生させるための設定処理を行う。具体的には、割り込み発生カウンタ値記憶部60に割り込み発生カウンタ値として210°CA後に該当する210をセットすると共に、コンペアマッチ割り込みを許可する。そして、その後、当該カム信号2用アングルカウンタ制御処理を終了する。
また、上記S760にて、カム位置カウンタの値が7であると判定した場合には、S790に移行して、1アングルクロック時間記憶部53内の記憶値(1アングルクロック時間)が更新されるのを許可し、その後、当該カム信号2用アングルカウンタ制御処理を終了する。
次に、図15は、フリーランニングカウンタ59の値が割り込み発生カウンタ値記憶部60にセットされた値と一致してコンペアマッチ割り込み要求が発生すると起動されるコンペアマッチ割り込み処理を表すフローチャートである。
図15に示すように、マイコン13がコンペアマッチ割り込み処理を開始すると、S800にて、ガード用イベントカウンタ56とカム位置カウンタの各値を6に設定すると共に、基準アングルカウンタ55とアングルカウンタ57の各値を1に設定する。そして、その後、当該割り込み処理を終了する。
そして、ECU11へクランク信号とカム信号1が正常に入力されなくなったが、カム信号2は正常に入力されている場合には、図6の時間同期タスクにより、入力制御回路17からアングルクロック生成回路19へ第2カムエッジ化信号が入力され、図7の処理が実行されなくなる代わりに、図14及び図15の処理により、アングルカウンタ57の値が図16のように変移することとなる。
即ち、図16に示すように、まず、クランク信号のレベル変化が止まると、図6のS295の処理により、ガード用イベントカウンタ56の値が0に設定されて、基準アングルカウンタ55及びアングルカウンタ57のカウントアップが禁止され、また、生成倍率記憶部52内の生成倍率がカム信号用の30に設定される。そして、クランク位置がカム信号2の基準位置P2になるまでは、図14のS730の処理により、ガード用イベントカウンタ56の値が0に維持される。
その後、クランク位置がカム信号2の基準位置P2になると、図14のS715及びS720の処理により、基準アングルカウンタ55の値が、基準位置P2に該当する270に設定され、カム位置カウンタの値が12に設定される。そして更に、S745の処理により、生成倍率記憶部52内の生成倍率が90に設定されると共に、S750の処理により、ガード用イベントカウンタ56の値が4に設定され、その結果、基準アングルカウンタ55及びアングルカウンタ57のガード値が360(=4×90)に設定されることとなる。また、基準アングルカウンタ55の値が270に設定されると、前述した図11、図13の場合と同様に、アングルカウンタ57の値が、それまで停止していた値(図16の例では160)から270まで、システムクロックにより1ずつ速やかにカウントアップされることとなる
そして、その後、クランク位置が基準位置P2から90°CA後の位置となるまでは、1アングルクロック時間記憶部53に、1アングルクロック時間として、入力制御回路17からの第2カムエッジ化信号が基準位置P2よりも1回前に立ち上がってから基準位置P2で立ち上がるまでの30°CA分の時間を30で割った時間が記憶されることとなり、その時間毎に、基準アングルカウンタ55及びアングルカウンタ57のカウントアップと、アングルクロックの出力とが行われることとなる。
次に、第2カムエッジ化信号が立ち上がると、そのタイミングでのクランク位置は基準位置P2から90°CA後の位置である。そして、そのタイミングにて、カム位置カウンタの値は、S735の処理により12から13となる。そして更に、S775の処理により、ガード用イベントカウンタ56の値も13に設定される。また、S755の処理により、生成倍率記憶部52内の生成倍率が30に戻される。尚、生成倍率記憶部52内の生成倍率は、カム位置カウンタの値が12でない場合には、上記S755の処理により30に設定される。
そして、そのタイミングから第2カムエッジ化信号が次に立ち上がるまでの間(つまり、カム位置カウンタが14になるまでの間)は、1アングルクロック時間記憶部53に、1アングルクロック時間として、基準位置P2から90°CA分の時間(図16におけるT)を90で割った時間(図16におけるTa)が記憶されることとなり、その時間毎に、基準アングルカウンタ55及びアングルカウンタ57のカウントアップと、アングルクロックの出力とが行われることとなる。
また、カム位置カウンタの値が13になった後は、第2カムエッジ化信号が立ち上がる毎(つまり、カム信号2にエッジが生じる毎)に、そのカム位置カウンタの値が、S735の処理により1ずつカウントアップされることとなる。
そして、カム位置カウンタの値が14になった後は、第2カムエッジ化信号の直前の30°CA毎の立ち上がりエッジ間隔を30で割った時間毎に、基準アングルカウンタ55及びアングルカウンタ57のカウントアップと、アングルクロックの出力とが行われ、また、ガード用イベントカウンタ56が、第2カムエッジ化信号が立ち上がる毎にカウントアップされて、基準アングルカウンタ55及びアングルカウンタ57の値が、常に、次の第2カムエッジ化信号の立ち上がりタイミングでなるべき値にガードされることとなる。
その後、カム位置カウンタの値が17から18になるクランク位置(即ち、基準位置P2から240°CA後で、#1BTDCよりも210°CA前のクランク位置)にて、S780の処理により、ガード用イベントカウンタ56とカム位置カウンタとの各値が24に設定されると共に、1アングルクロック時間記憶部53に記憶される1アングルクロック時間の更新が禁止される。そして更に、S785の処理により、その時点から210°CA後のタイミング(つまり、#1BTDCのタイミング)で図15のコンペアマッチ割り込み処理を起動させるための設定が行われる。
そして、その後、カム位置カウンタの値が17になっていた30°CA分の時間を30で割った時間に210を乗じた時間が経過すると、図15のコンペアマッチ割り込み処理が起動されて、カム位置カウンタとガード用イベントカウンタ56の各値が6に設定されると共に、基準アングルカウンタ55とアングルカウンタ57の各値が#1BTDCに該当する1に初期化されることとなる。
つまり、本実施形態では、基準アングルカウンタ55及びアングルカウンタ57のカウント値を初期化すべき#1BTDCのタイミングでカム信号2にエッジが発生しないため、その#1BTDCよりも210°CA前のタイミングにて、コンペアマッチ割り込み処理が#1BTDCのタイミングで起動されるように設定しておき、そのコンペアマッチ割り込み処理により、カウンタ値の初期化(詳しくは、#1BTDCに該当する値のセット)を実施するようにしている。そして、このことが、前述した図13の場合と主に異なっている点である。
尚、クランク信号、カム信号1及びカム信号2の変化パターンによっては、カウンタ値の初期化を実施すべきクランク位置で、必ずアングルクロック生成回路19への入力信号に有効なエッジを発生させることができる場合もある。そして、そのような場合には、コンペアマッチ割り込みの機能を利用する必要は無く、また、その機能用のハードウェアであるフリーランニングカウンタ59及び割り込み発生カウンタ値記憶部60は不要となる。
そして、第2カムエッジ化信号が次に立ち上がるクランク位置(即ち、#1BTDCから180°CA後のクランク位置)にて、カム位置カウンタがS735の処理によりカウントアップされ、その値が7になると、S790の処理により、1アングルクロック時間記憶部53に記憶される1アングルクロック時間の更新が許可される。よって、次に第2カムエッジ化信号が立ち上がったタイミング(つまり、カム位置カウンタの値が8になるタイミング)で、1アングルクロック時間記憶部53内の1アングルクロック時間が、直前の第2カムエッジ化信号の立ち上がり間隔(つまり、カム位置カウンタの値が7になっていた30°CA分の時間)を30で割った時間に更新されることとなる。
このため、#1BTDCよりも210°CA前のクランク位置から、カム位置カウンタの値が8になるまでの420°CA分の期間中は、1アングルクロック時間記憶部53内の記憶値が変化せず、その1アングルクロック時間記憶部53には、カム位置カウンタの値が17になっていた30°CA分の時間を30で割った時間が、1アングルクロック時間として継続記憶され、その時間毎に、基準アングルカウンタ55及びアングルカウンタ57のカウントアップと、アングルクロックの出力とが行われることとなる。
そして、カム位置カウンタの値が8になった後は、再び、第2カムエッジ化信号の直前の30°CA毎の立ち上がりエッジ間隔を30で割った時間毎に、基準アングルカウンタ55及びアングルカウンタ57のカウントアップと、アングルクロックの出力とが行われ、また、ガード用イベントカウンタ56が、第2カムエッジ化信号が立ち上がる毎にカウントアップされて、基準アングルカウンタ55及びアングルカウンタ57の値が、常に、次の第2カムエッジ化信号の立ち上がりタイミングでなるべき値にガードされることとなる。
そして、その後、クランク位置がカム信号2の基準位置P2になると、再び、S715、S720、S745及びS750の処理により、基準アングルカウンタ55の値が270に設定され、カム位置カウンタの値が12に設定され、生成倍率記憶部52内の生成倍率が90に設定され、ガード用イベントカウンタ56の値が4に設定されることとなる。
以上のような動作により、クランク信号とカム信号1が異常になった場合でも、基準アングルカウンタ55及びアングルカウンタ57の値は、ECU11へクランク信号が正常に入力される場合と全く同様に、1°CA分の時間毎にカウントアップされると共に、1〜720の範囲でラップラウンドすることとなる。
以上のように本実施形態のECU11では、クランク信号に異常が生じても、カム信号1とカム信号2との少なくとも一方が正常でありさえすれば、アングルカウンタ57の値は、クランク信号が正常に入力される場合と全く同様に変移することとなる。
よって、本実施形態のECU11によれば、クランク信号に異常が生じた場合にも、エンジンを正常時と同じ制御プログラム(つまり、アングルカウンタ57を参照するクランク角度同期の制御プログラム)で制御することができる。このため、カム信号を時間基準としてエンジンの制御を実施するフェイルセーフ用の制御プログラムを別途用意しなくても、クランク信号に異常が生じた場合のリンプホームを実現することができる。
そして更に、クランク信号に異常が生じた場合にも、アングルクロック生成回路19を利用しており、追加のハードウェアとしては、入力制御回路17にて、クランク信号の立ち下がりエッジをアングルクロック生成回路19の入力端子20へ立ち上がりエッジとして入力させる部分(具体的には、インバータ35)以外の部分だけで済む。よって、クランク信号に異常が生じた場合のリンプホームを、より少ないソフトウェア及びハードウェアの追加で実現するこができる。
尚、上記実施形態では、パルスエッジ間隔計測部51が計測手段に相当し、入力端子20が計測手段の入力端子に相当し、入力制御回路17が入力手段に相当している。また、生成倍率記憶部52と、1アングルクロック時間記憶部53と、補正前アングルクロック出力部54とが、逓倍クロック出力手段に相当している。そして、クランク信号用の入力信号診断処理(図5)と、カム信号1用の入力信号診断処理と、カム信号2用の入力信号診断処理とが、異常判定手段に相当し、図6の時間同期タスクが、入力切替制御手段に相当し、図9のカム割り込み処理(図10、図12、図14の各処理を含む)が、異常時カウント制御手段に相当している。
以上、本発明の一実施形態について説明したが、本発明は上記実施形態に何等限定されるものではなく、本発明の要旨を逸脱しない範囲において、種々なる態様で実施し得ることは勿論である。
例えば、変形例として、カム信号が1つしかないならば、クランク信号が異常になった場合に、その1つのカム信号がレベル変化する毎に立ち上がるエッジ化信号が入力制御回路17からアングルクロック生成回路19へ入力されるようにし、図12又は図14と同様の処理を実施することで、アングルカウンタ57の値を、クランク信号が正常な場合と同様に変移させるようにすれば良い。
また、上記実施形態では、カム信号1とカム信号2とのそれぞれについて、そのカム信号がレベル変化する毎に立ち上がるエッジ化信号を生成し、クランク信号が異常になった場合に、その各エッジ化信号と、その両エッジ化信号のオア信号との何れかを、アングルクロック生成回路19へ入力するようにしたが、エッジ化信号を生成せずに、クランク信号が異常になった場合には、カム信号1と、カム信号2と、その両カム信号のオア信号との何れかを、アングルクロック生成回路19へ入力するようにして、アングルカウンタ57の値をクランク信号が正常な場合と同様に変移させるようにしても良い。そして、このことは、上記変形例についても同様である。
但し、エッジ化信号を生成してアングルクロック生成回路19へ入力するように構成した方が、アングルクロック生成回路19への入力信号に有効なエッジ(上記例では立ち上がりエッジ)が発生するクランク角度間隔を小さくすることができるため、補正前アングルクロックの発生間隔を実際の1°CA分の時間からずれ難くすることができる、という点で有利である。
11…ECU(エンジン制御装置)、13…マイコン、15…入力回路、17…入力制御回路、19…アングルクロック生成回路、20…入力端子、21…クランク軸センサ、23…第1カム軸センサ、25…第2カム軸センサ、31…エッジ化部、33…セレクタ部、35,37…インバータ、36,39,41…シフトレジスタ、38…アンド回路、40,42…排他的論理和回路、43…オア回路、44,45,46…スイッチ回路、51…パルスエッジ間隔計測部、52…生成倍率記憶部、53…1アングルクロック時間記憶部、54…補正前アングルクロック出力部、55…基準アングルカウンタ、56…ガード用イベントカウンタ、57…アングルカウンタ、58…アングルクロック出力部、59…フリーランニングカウンタ、60…割り込み発生カウンタ値記憶部