(57)【特許請求の範囲】
【請求項１】
欠落判定装置（３０）とクロック生成装置（５０）とを備えるエンジン制御装置（１０）において、
前記欠落判定装置は、
エンジンのクランク軸が一定の角度回転する毎に発生するパルスを有するパルス列と、前記パルスが欠落しており前記パルスと前記パルスとの角度間隔が前記パルス列よりも大きい欠落部とを有するクランク信号において、今回発生した前記パルスが前記欠落部の開始を示す開始パルスであるか否かをソフトウェアにより判定するように構成された欠落判定部（３２、Ｓ４２０〜Ｓ４３８）を備え、
前記クロック生成装置は、
前記パルスが発生する毎に、ソフトウェアにより、今回発生した前記パルスと前回発生した前記パルスとのパルス周期を前記パルスと前記パルスとの角度間隔に応じて予め設定された逓倍数で除算した値を角度クロックのクロック周期として算出するように構成された周期算出部（５８、Ｓ４００〜Ｓ４０８、Ｓ４８０〜Ｓ４８８）と、
前記角度クロックのクロック数をカウントする角度カウンタ（５４）と、
前記パルスが発生する毎に設定される目標カウント数に前記角度カウンタが達するまで、前記周期算出部が算出する前記クロック周期で前記角度クロックを生成するように構成されたクロック生成部（６０）と、
前記欠落部において前記クロック生成部による前記角度クロックの生成が停止しているか否かを、ハードウェアとソフトウェアとのうち少なくともハードウェアにより判定するように構成された停止判定部（５６、５８、Ｓ５００〜Ｓ５０４）と、
今回発生した前記パルスが前記開始パルスであると前記欠落判定部が判定すると、前記欠落部の終了を示す終了パルスが発生するときに前記角度カウンタが達する前記目標カウント数をソフトウェアにより設定するように構成された目標設定部（５８、Ｓ４５６、Ｓ４５８）と、
を備え、
今回発生した前記パルスが前記開始パルスであると前記欠落判定部が判定しておらず、前記欠落部において前記角度クロックの生成が停止していると前記停止判定部が判定する場合、前記目標設定部（Ｓ４６２、Ｓ４６４、Ｓ５０６、Ｓ５０８）は、前記終了パルスが発生するときに前記角度カウンタが達する前記目標カウント数をソフトウェアにより設定するように構成され、前記周期算出部（Ｓ４６６〜Ｓ４７０、Ｓ５１０〜Ｓ５１４）は、前記終了パルスが発生するまでに前記クロック生成部が生成する前記角度クロックの前記クロック周期を算出する用に構成されている、
エンジン制御装置。
【請求項２】
請求項１に記載のエンジン制御装置において、
前記クロック生成部は、前記パルス列の前記パルスと前記パルスとの角度間隔において前記クロック生成部が生成する前記角度クロックのクロック数を、前記パルスが発生する毎にハードウェアにより前記目標カウント数に加算し、
前記目標設定部（Ｓ４５６、Ｓ４５８）は、今回発生した前記パルスが前記開始パルスであると前記欠落判定部が判定すると、前記終了パルスと前記開始パルスとの角度間隔から前記パルス列の前記パルス間の角度間隔を減算した角度間隔において前記クロック生成部が生成する前記角度クロックのクロック数をソフトウェアにより前記目標カウント数に加算することにより、前記終了パルスが発生するときに前記角度カウンタが達する前記目標カウント数を設定する、
エンジン制御装置。
【請求項３】
請求項１または２に記載のエンジン制御装置において、
前記パルスが発生する毎に前記周期算出部が前記クロック周期を算出すると、前記欠落
判定部は今回発生した前記パルスが前記開始パルスであるか否かを判定する、
エンジン制御装置。
【請求項４】
請求項１から３のいずれか一項に記載のエンジン制御装置において、
前記停止判定部は、今回発生した前記パルスが前記開始パルスであると前記欠落判定部が判定していない状態で、前記欠落部において前記開始パルスからの経過時間が前記角度クロックの停止を判定するための停止判定時間に達すると、前記欠落部において前記角度クロックの生成が停止していると判定する、
エンジン制御装置。
【請求項５】
請求項１から３のいずれか一項に記載のエンジン制御装置において、
前記停止判定部（Ｓ５００〜Ｓ５０４）は、前記欠落部において前記角度カウンタが前記目標カウント数と一致している一致時間が前記角度クロックの停止を判定するための継続時間以上になると、前記欠落部において前記角度クロックの生成が停止していると判定する、
エンジン制御装置。
【請求項６】
請求項４または５に記載のエンジン制御装置において、
前記周期算出部は、前記欠落部において前記角度クロックの生成が停止していると前記停止判定部が判定したタイミングから前記終了パルスが発生するタイミングまでの残り時間を、前記終了パルスにおける前記目標カウント数に前記角度カウンタが達するために前記残り時間の間に前記クロック生成部が生成する前記角度クロックのクロック数で除算した値を前記クロック周期として算出する、
エンジン制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、エンジンのクランク軸の回転に伴って発生するクランク信号よりも周期の短い角度クロックを生成する技術に関する。
【背景技術】
【０００２】
エンジンのクランク軸の回転に伴って発生するクランク信号が表すクランク軸の回転角度位置に基づいて、エンジンを制御する技術が知られている。そして、特許文献１に開示されているように、クランク信号の周期を逓倍数で除算してクランク信号よりも周期の短い角度クロックを生成し、角度クロックに基づいてクランク信号に基づくよりも高精度にエンジン制御を実行する技術が知られている。
【０００３】
クランク信号は、エンジンのクランク軸が一定の角度回転する毎に発生するパルスを有するパルス列と、パルスが欠落しておりパルスとパルスとの角度間隔がパルス列よりも大きい欠落部とを有している。
【０００４】
特許文献１では、ＣＰＵがクランク信号のパルス数をソフトウェアでカウントし、角度クロック生成用の専用のハードウェアが角度クロックを生成している。ＣＰＵがクランク信号のパルス数をカウントする場合、欠落部であるか否かをソフトウェアで判定し、欠落部においてパルス列と同じ角度間隔でパルスが発生するものとして、ソフトウェアでパルス数をカウントしている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１５−１５１９４５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
特許文献１に記載の技術に対し、専用のハードウェアではなく汎用の処理装置で角度クロックを生成することが考えられる。汎用の処理装置は角度クロックを生成する専用のハードウェアを備えていないので、角度クロックはソフトウェアにより生成される。
【０００７】
角度クロッを生成する処理装置は、クランク信号のパルスが発生すると、例えば、今回のパルスと前回のパルスとのパルス周期を逓倍数で除算した値を、今回のパルスと次回のパルスとの間で生成する角度クロックのクロック周期とする。角度クロッを生成する処理装置は、他の処理装置から欠落部であると判定したことを通知されると、欠落部の角度間隔に応じたクロック数の角度クロックを生成する。
【０００８】
ここで、例えば欠落部においてそれぞれの処理装置において他のソフトウェア処理が実行されていると、ソフトウェアによる欠落部の判定処理が遅れ、欠落部における角度クロックの生成処理の実行が遅れることがある。
【０００９】
欠落部における角度クロックの生成が遅れ、角度クロックが生成されない期間が生じると、角度クロックが示す角度位置に基づいて実行されるエンジン制御の開始が遅れ、エンジン制御が適切なタイミングで実行されないという問題がある。
【００１０】
本開示の一側面は、エンジンのクランク軸の回転に伴って発生するクランク信号よりも周期の短い角度クロックの生成が停止している期間を極力短くする技術を提供することに
ある。
【課題を解決するための手段】
【００１１】
本開示の一態様であるエンジン制御装置は、欠落判定装置（３０）とクロック生成装置（５０）とを備えている。
欠落判定装置は、エンジンのクランク軸が一定の角度回転する毎に発生するパルスを有するパルス列と、パルスが欠落しておりパルスとパルスとの角度間隔がパルス列よりも大きい欠落部とを有するクランク信号において、今回発生したパルスが欠落部の開始を示す開始パルスであるか否かをソフトウェアにより判定するように構成された欠落判定部（３２、Ｓ４２０〜Ｓ４３８）を備えている。
【００１２】
クロック生成装置は、周期算出部（５８、Ｓ４００〜Ｓ４０８、Ｓ４６６〜Ｓ４７０、Ｓ４８０〜Ｓ４８８、Ｓ５１０〜Ｓ５１４）と、角度カウンタ（５４）と、クロック生成部（６０）と、停止判定部（５６、５８、Ｓ５００〜Ｓ５０４）と、目標設定部（５８、Ｓ４５６、Ｓ４５８、Ｓ４６２、Ｓ４６４、Ｓ５０６、Ｓ５０８）と、を備えている。
【００１３】
周期算出部は、パルスが発生する毎に、ソフトウェアにより、今回発生したパルスと前回発生したパルスとのパルス周期をパルスとパルスとの角度間隔に応じて予め設定された逓倍数で除算した値を角度クロックのクロック周期として算出するように構成されている。角度カウンタは、角度クロックのクロック数をカウントする。
【００１４】
クロック生成部は、パルスが発生する毎に設定される目標カウント数に角度カウンタが達するまで、周期算出部が算出するクロック周期で角度クロックを生成するように構成されている。停止判定部は、欠落部においてクロック生成部による角度クロックの生成が停止しているか否かを、ハードウェアとソフトウェアとのうち少なくともハードウェアにより判定するように構成されている。
【００１５】
目標設定部は、今回発生したパルスが開始パルスであると欠落判定部が判定すると、欠落部の終了を示す終了パルスが発生するときに角度カウンタが達する目標カウント数をソフトウェアにより設定するように構成されている。
【００１６】
そして、今回発生したパルスが開始パルスであると欠落判定部が判定しておらず、欠落部において角度クロックの生成が停止していると停止判定部が判定する場合、目標設定部は、終了パルスが発生するときに角度カウンタが達する目標カウント数をソフトウェアにより設定するように構成され、周期算出部は、終了パルスが発生するまでにクロック生成部が生成する角度クロックのクロック周期を算出する用に構成されている。
【００１７】
この構成によれば、欠落部において角度クロックの生成が停止していると停止判定部が少なくともハードウェアにより判定すると、目標設定部は、終了パルスが発生するときにクロックカウンタが達する目標カウント数をソフトウェアにより設定する。終了パルスが発生するときにクロックカウンタが達する目標カウント数が設定されることにより、クロック生成部は角度クロックの生成を開始する。
【００１８】
したがって、欠落部において角度クロックの生成が停止していても、極力早く角度クロックの生成を開始し、角度クロックの生成が停止している期間を極力短くすることができる。
【００１９】
尚、この欄および特許請求の範囲に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、本発明の技術的範囲を限定するものではない。
【図面の簡単な説明】
【００２０】
【図１】第１実施形態のエンジン制御装置を示すブロック図。
【図２】タイマ専用プロセッサによるパルス検出処理を示すフローチャート。
【図３】メインＣＰＵによる欠歯判定処理を示すフローチャート。
【図４】タイマ専用プロセッサによる欠歯事前処理を示すフローチャート。
【図５】タイマ専用プロセッサによる異常時処理を示すフローチャート。
【図６】正常時のクロック生成処理を示すタイムチャート。
【図７】異常時のクロック生成処理を示すタイムチャート。
【図８】第２実施形態のタイマ専用プロセッサによるパルス検出処理を示すフローチャート。
【図９】タイマ専用プロセッサによる異常判定処理を示すフローチャート。
【図１０】異常時のクロック生成処理を示すタイムチャート。
【発明を実施するための形態】
【００２１】
以下、本開示の実施形態を図に基づいて説明する。
［１．第１実施形態］
［１−１．構成］
図１に示すＥＣＵ１０は車両に搭載され、入力回路１２と、出力回路１４と、マイコン２０とを備えている。ＥＣＵはElectronic Control Unitの略であり、マイコンはマイクロコンピュータの略である。
【００２２】
入力回路１２は、クランク角センサからクランク信号を入力し、カム角センサからカム信号を入力する。ＥＣＵ１０は、クランク信号とカム信号とに基づいて、エンジンの気筒判別を行う。クランク信号は、クランク軸とともに回転するクランクロータの外周に一定の角度間隔で設置された歯をクランク角センサが検出して発生するパルス信号である。クランクロータには、歯が連続して欠落した欠歯部が存在する。
【００２３】
したがって、クランク信号は、クランク軸が一定の角度回転する毎に発生するパルスを有するパルス列と、パルスが発生しておらずパルスとパルスとの角度間隔がパルス列よりも大きい欠歯部とを有している。欠歯部は、クランク軸の回転方向の基準位置を示している。本実施形態では、２個の歯が欠歯部で欠落している。したがって、欠歯部におけるパルス間の角度間隔は、パルス列におけるパルス間の角度間隔の３倍である。
【００２４】
カム信号は、カム軸とともに回転するカムロータの外周にクランク信号の欠歯部と対応する位置に発生するパルスを有している。
出力回路１４は、タイマ制御モジュール５０のコンペア部５６が出力する信号を、点火モジュール、噴射モジュールに出力する。点火モジュールは点火プラグと点火プラグの駆動回路である。噴射モジュールはインジェクタとインジェクタの駆動回路である。コンペア部５６が出力する信号は、点火モジュールが燃料への点火を実行する角度タイミング、ならびに噴射モジュールが燃料噴射を実行する角度タイミングを指示する。
【００２５】
マイコン２０は、メインＣＰＵ３０と、メインＣＰＵ３０用の専用ＲＡＭ４０と、ＲＯＭ４２と、共有ＲＡＭ４４と、タイマ制御モジュール５０と、を備えている。メインＣＰＵ３０とタイマ制御モジュール５０とは、汎用の処理装置である。
【００２６】
マイコン２０の各機能は、メインＣＰＵ３０とタイマ制御モジュール５０とがＲＯＭまたはフラッシュメモリ等の非遷移的実体的記録媒体に記憶されているプログラムを実行することにより実現される。このプログラムが実行されることにより、プログラムに対応する方法が実行される。
【００２７】
メインＣＰＵ３０は、ＲＯＭ４２に記憶されている制御プログラムを実行することにより、角度クロックの生成を含むエンジン制御を実行する。例えば、メインＣＰＵ３０は、角度クロックの生成以外のエンジン制御として、点火制御と燃料の噴射制御とを次回実行する角度タイミングを、タイマ専用プロセッサ５８を介してコンペア部５６に設定する。
【００２８】
メインＣＰＵ３０の専用ＲＡＭ４０には、メインＣＰＵ３０が角度クロック生成を含むエンジン制御で使用するデータが記憶される。例えば、専用ＲＡＭ４０には、後述するエッジカウンタ、最大エッジ位置、欠歯部の開始パルスのエッジ位置、欠歯部の開始パルスの前に発生するパルスのエッジ位置等が記憶される。
【００２９】
共有ＲＡＭ４４には、メインＣＰＵ３０とタイマ専用プロセッサ５８とが共通に参照するデータが記憶される。例えば、共有ＲＡＭ４４には、後述する欠歯フラグ１、欠歯フラグ２、欠歯数、異常処理フラグ等が記憶される。
【００３０】
タイマ制御モジュール５０は、エッジ検出部５２と、カウンタ部５４と、コンペア部５６と、タイマ専用プロセッサ５８と、クロック生成部６０と、図示しないＲＡＭ、ＲＯＭとを備えている。
【００３１】
エッジ検出部５２は、クランク信号のパルスのエッジを検出する。エッジ検出部５２が検出するパルスのエッジは、立ち上がりまたは立ち下がりのいずれのエッジでもよい。エッジ検出部５２は、クランク信号のパルスのエッジを検出した時刻を記憶している。
【００３２】
カウンタ部５４は、各種カウンタを備えている。カウンタ部５４は、例えば、クロック生成部６０が生成する角度クロックに同期して角度クロックのクロック数をカウントする角度カウンタ、ならびにタイマ専用プロセッサ５８の動作クロックに同期してクロック数をカウントする時間カウンタを備えている。
【００３３】
コンペア部５６は、タイマ専用プロセッサ５８から設定された値と、設定された値に対応するカウンタ部５４の角度カウンタおよび時間カウンタとを比較する。設定された値とカウンタとが一致すると、コンペア部５６は、噴射モジュールと点火モジュールとに対する出力信号を出力回路１４に出力するか、タイマ専用プロセッサ５８に対し、設定された値とカウンタとが一致したことに対応する処理の実行を要求する。
【００３４】
タイマ専用プロセッサ５８は、実行イベントが発生すると、図示しないＲＯＭに記憶されている制御プログラムに基づいて、発生した順番に実行イベントに対応する処理を実行する。
【００３５】
例えば、タイマ専用プロセッサ５８は、メインＣＰＵ３０からの要求により、エンジン制御の実行タイミングを角度タイミングまたは時間タイミングでコンペア部５６に設定する。また、タイマ専用プロセッサ５８は、エッジ検出部５２がクランク信号のパルスのエッジを検出する毎に、前回検出されたパルスと今回検出されたパルスとの間のエッジ間時間を、パルスとパルスとの角度間隔に応じて設定されるエッジ間カウント数で除算する。
【００３６】
前述したように、本実施形態では、欠歯部の開始を示す開始パルスと欠歯部の終了を示す終了パルスとの角度間隔はパルス列のパルス間の角度間隔の３倍である。したがって、欠歯部においてエッジ間時間を除算するエッジ間カウント数は、パルス列においてエッジ間時間を除算するエッジ間カウント数の３倍になる。
【００３７】
タイマ専用プロセッサ５８は、前記と今回とのエッジ間時間をエッジ間カウント数で除
算した結果を、エッジ検出部５２が次回のパルスのエッジを検出するまでにクロック生成部６０が生成する角度クロックのクロック周期とする。
【００３８】
クロック生成部６０は内部に図示しない目標値カウンタを備えている。目標値カウンタは、エッジ検出部５２がクランク信号のエッジを検出する毎に、クランク信号のパルス列のパルス間の角度間隔に対応するエッジ間カウント数をハードウェアにより加算して目標値カウンタに目標カウント数を設定する。エッジ検出部５２が検出したエッジが欠歯部の開始パルスであっても、目標値カウンタは、同じエッジ間カウント数を加算する。
【００３９】
エッジ間カウント数は予め目標値カウンタに設定されている。本実施形態では、エッジ間カウント数として、例えば４が設定されている。クロック生成部６０は、角度カウンタのカウント数が目標値カウンタに設定された目標カウント数に達するまで、タイマ専用プロセッサ５８が算出した周期で角度クロックを生成する。
【００４０】
クロック生成部６０は、クランク信号の次のパルスのエッジをエッジ検出部５２が検出する前に角度カウンタのカウント数が目標値カウンタに達すると、角度クロックの生成を停止する。また、クロック生成部６０は、クランク信号の次のパルスのエッジをエッジ検出部５２が検出するときに角度カウンタのカウント数が目標カウント数に達していない場合、目標カウント数に達するように角度クロックの周期を短くする。
【００４１】
［１−２．処理］
エンジン制御装置として機能するＥＣＵ１０が実行する各種処理について、以下に説明する。
【００４２】
（１）エッジ検出処理
エッジ検出部５２がクランク信号のエッジを検出すると、エッジ検出部５２はタイマ専用プロセッサ５８に図２のフローチャートが示すエッジ検出処理の実行を要求する。タイマ専用プロセッサ５８は、他の処理を実行中でなければ、エッジ検出部５２からの要求にしたがいエッジ検出処理を実行する。
【００４３】
Ｓ４００においてタイマ専用プロセッサ５８は、次式（１）に基づき、今回のエッジ検出時刻と前回のエッジ検出時刻との時間差をエッジとエッジとの間のエッジ間時間として算出する。今回のエッジが欠歯部の終了パルスのエッジの場合、式（１）から算出されるエッジ間時間は、今回のエッジが欠歯部の終了パルス以外のパルスのエッジの場合よりも長くなる。
【００４４】
エッジ間時間＝今回のエッジ検出時刻−前回のエッジ検出時刻・・・（１）
タイマ専用プロセッサ５８は、Ｓ４００の終了後、エッジ検出部５２が今回エッジを検出した時刻を前回のエッジ検出時刻として記憶する。
【００４５】
Ｓ４０２においてタイマ専用プロセッサ５８は、欠歯フラグ１がオフであるか否かを判定する。後述する図３の欠歯判定処理において、メインＣＰＵ３０は、欠歯部の開始パルスのエッジを検出すると欠歯フラグ１をオンに設定し、開始パルス以外のエッジを検出すると欠歯フラグ１をオフに設定する。
【００４６】
エッジとエッジとの間において、図２のエッジ検出処理は図３の欠歯判定処理よりも前に実行される。したがって、メインＣＰＵ３０が欠歯部の開始パルスのエッジを検出して欠歯フラグ１をオンに設定している状態で、エッジ検出部５２が図２のエッジ検出処理の実行をタイマ専用プロセッサ５８に要求するトリガとなるエッジは、欠歯部の終了パルスのエッジである。
【００４７】
これに対し、メインＣＰＵ３０が欠歯部の開始パルス以外のエッジを検出して欠歯フラグ１をオフに設定している状態で、エッジ検出部５２が図２のエッジ検出処理の実行をタイマ専用プロセッサ５８に要求するトリガとなるエッジは、欠歯部の終了パルス以外のエッジである。
【００４８】
Ｓ４０２の判定がＹｅｓであり、欠歯フラグ１がオフの場合、Ｓ４０４においてタイマ専用プロセッサ５８は、次式（２）に基づいて角度クロックの周期を算出する。
角度クロックの周期＝エッジ間時間／４                      ・・・（２）
式（２）のエッジ間時間はＳ４００で算出された値である。また、Ｓ４０４は欠歯フラグ１がオフの場合に実行されるので、今回、図２のエッジ検出処理を実行するトリガとなるエッジは、欠歯部の終了パルス以外のエッジである。
【００４９】
したがって、エッジ間時間の間に角度カウンタが角度クロックのパルス数をカウントするエッジ間カウント数は、本実施形態では４である。そこで、式（２）において、エッジ間時間を４で除算することにより、角度クロックの周期を算出できる。Ｓ４０４の実行後、処理はＳ４０８に移行する。
【００５０】
Ｓ４０２の判定がＮｏであり、欠歯フラグ１がオンの場合、Ｓ４０６においてタイマ専用プロセッサ５８は、次式（３）に基づいて角度クロックの周期を算出する。
角度クロックの周期＝エッジ間時間／１２                    ・・・（３）
式（３）のエッジ間時間はＳ４００で算出された値である。また、Ｓ４０６は欠歯フラグ１がオンの場合に実行されるので、今回、図２のエッジ検出処理を実行するトリガとなるエッジは、欠歯部の終了パルスのエッジである。
【００５１】
したがって、エッジ間時間の間に角度カウンタが角度クロックのパルス数をカウントするエッジ間カウント数は１２＝４×３である。そこで、式（３）において、エッジ間時間を１２で除算することにより、角度クロックの周期を算出できる。Ｓ４０６の実行後、処理はＳ４０８に移行する。
【００５２】
Ｓ４０８においてタイマ専用プロセッサ５８は、Ｓ４０４またはＳ４０６で算出した周期を、今回発生したクランク信号のパルスと次回発生するクランク信号のパルスとの間でクロック生成部６０が生成する角度クロックの周期として設定する。
【００５３】
ここで、図６に示すように、エッジ検出部５２がクランク信号のパルスのエッジを検出すると、クロック生成部６０において、ハードウェアにより目標値カウンタ２００にパルス列のエッジ間カウント数を加算して更新する。これにより、クロック生成部６０は、目標値カウンタ２００の値に達するまで角度クロックを生成する。そして、角度カウンタ２１０は、目標値カウンタ２００まで角度クロックをカウントする。
【００５４】
そして、エッジ検出部５２は、クランク信号のパルのエッジを検出すると、タイマ専用プロセッサ５８にエッジ検出処理３００の実行を要求する。後述するように、エッジ検出処理３００においてタイマ専用プロセッサ５８は、メインＣＰＵ３０に欠歯判定処理３０２の実行を要求する。
【００５５】
後述するように、欠歯判定処理３０２においてメインＣＰＵ３０は、今回エッジ検出部５２が検出したエッジが欠歯部の開始パルスのエッジであるか否かを判定する。欠歯部の開始パルスのエッジであれば、メインＣＰＵ３０は、タイマ専用プロセッサ５８に欠歯事前処理３０４の実行を要求する。
【００５６】
後述するように、欠歯事前処理３０４においてタイマ専用プロセッサ５８は、目標値カウンタにパルス列のエッジ間カウント数の２倍の値をソフトウェアにより加算して更新する。これにより、欠歯部においてパルス列のエッジ間カウント数の３倍の値が目標値カウンタに設定される。これにより、欠歯部において角度クロックは途切れることなく生成される。
【００５７】
しかし、図７に示すように、エッジ検出部５２がエッジを検出してエッジ検出処理３１０の実行をタイマ専用プロセッサ５８に要求したときに、タイマ専用プロセッサ５８が他処理を実行中のためにエッジ検出処理３１０の実行が遅れることがある。
【００５８】
また、エッジ検出処理３１０において欠歯判定処理３１２の実行を要求されたときにメインＣＰＵ３０が他処理を実行中のために、欠歯判定処理３１２の実行が遅れることがある。すると、メインＣＰＵ３０が欠歯判定処理３１２において要求するタイマ専用プロセッサ５８による欠歯事前処理３１４の実行が遅れる。その結果、欠歯部において角度クロックが生成されない期間が生じるおそれがある。
【００５９】
特に、エンジンの回転数が上昇すると欠歯部の時間間隔は短くなる。この場合、欠歯判定処理と欠歯事前処理との実行が遅れると、欠歯部において角度クロックが生成されない期間が生じやすくなる。
【００６０】
そこで、図７に示すように、欠歯部の開始パルスの前に発生するパルスのエッジが検出されることにより実行されるエッジ検出処理３２０において、次式（４）に基づいて異常判定時間を算出する。式（４）のエッジ間時間として、Ｓ４００で算出した時間を使用する。
【００６１】
異常判定時間＝エッジ間時間×２＋最大遅延時間            ・・・（４）
図７に示すように、異常判定時間の間に欠歯事前処理３１４が実行されないと、欠歯部において角度クロックの生成が停止していると判定できる。この場合、後述する異常事処理３２２が実行される。
【００６２】
式（４）でエッジ間時間を２倍しているのは、欠歯部の開始パルスの前に発生するパルスのエッジからのエッジ間時間と、欠歯部の開始パルスのエッジからのエッジ間時間とを加算するためでる。そして、最大遅延時間は、エンジンの減速によりエッジの検出時刻が遅れると考えられる最大値に設定されている。
【００６３】
ここで、欠歯部において実行されるエッジ検出処理３１０において、式（４）から算出される異常判定時間によりエッジ検出処理３２０で算出された異常判定時間が更新されると、図７において異常判定時間が後方にずれる。
【００６４】
したがって、欠歯部において実行されるエッジ検出処理３１０により異常判定時間が算出されないように、Ｓ４１０においてタイマ専用プロセッサ５８は、欠歯フラグ２がオンであるか否かを判定する。
【００６５】
欠歯フラグ２は、メインＣＰＵ３０が後述する欠歯判定処理において欠歯部の開始エッジの前のエッジを検出するとオンに設定する。メインＣＰＵ３０が欠歯部の開始エッジの前のエッジを検出して欠歯フラグ２をオンに設定している状態で、エッジ検出部５２が図２のエッジ検出処理の実行をタイマ専用プロセッサ５８に要求するトリガとなるエッジは、欠歯部の開始パルスのエッジである。
【００６６】
したがって、欠歯フラグ２がオンのときに実行されるエッジ検出処理では、異常判定時
間の算出を回避する必要がある。そこで、Ｓ４１０の判定がＹｅｓであり、欠歯フラグ２がオンの場合、タイマ専用プロセッサ５８は、Ｓ４１２〜Ｓ４１６を実行せずＳ４１８に処理を移行する。Ｓ４１０の判定がＮｏであり、欠歯フラグ２がオフの場合、タイマ専用プロセッサ５８は、Ｓ４１２〜Ｓ４１６を実行する。
【００６７】
Ｓ４１２においてタイマ専用プロセッサ５８は、欠歯部において角度クロックの生成が停止しているか否かを判定するための異常判定時間を、式（４）に基づいて算出する。
Ｓ４１４においてタイマ専用プロセッサ５８は、次式（５）に基づき、Ｓ４１２で算出した異常判定時間を今回のエッジ検出時刻に加算して異常判定時刻を算出する。
【００６８】
異常判定時刻＝今回のエッジ検出時刻＋異常判定時間        ・・・（５）
Ｓ４１６においてタイマ専用プロセッサ５８は、コンペア部５６に異常判定時刻を設定する。後述するように、コンペア部５６は、タイマ専用プロセッサ５８が設定した異常判定時刻に、カウンタ部５４の対応する時間カウンタが達すると、欠歯部で角度クロックの生成が停止している異常に対する異常時処理の実行をタイマ専用プロセッサ５８に要求する。
【００６９】
言い換えると、コンペア部５６は、欠落部において開始パルスからの経過時間が角度クロックの停止を判定するための停止判定時間に達すると、異常時処理の実行をタイマ専用プロセッサ５８に要求する。この場合、停止判定時間は、式（４）の異常判定時間からエッジ間時間を減算した時間である。
【００７０】
尚、欠歯部の開始パルスと開始パルスの前に発生するパルスとを除くパルスのエッジが検出されるときにＳ４１２〜Ｓ４１６が実行されるときも、式（５）において、式（４）で算出した異常判定時間を今回のエッジ検出時刻に加算して異常判定時刻が設定される。しかし、異常判定時刻に時間カウンタが達することは欠歯部以外のパルス間ではないと考えられるので、Ｓ４１２〜Ｓ４１６を実行しても問題はない。
【００７１】
Ｓ４１８においてタイマ専用プロセッサ５８は、メインＣＰＵ３０に欠歯判定処理の実行を要求する。
（２）欠歯判定処理
タイマ専用プロセッサ５８から欠歯判定処理の実行を要求されると、図３のＳ４２０においてメインＣＰＵ３０の欠歯判定部３２は、現在のエッジカウンタの値が３６０°ＣＡの間においてクランク信号のパルスをカウントする最大値であるか否かを判定する。
【００７２】
Ｓ４２０の判定がＮｏであり、エッジカウンタの値が最大値ではない場合、Ｓ４２２において欠歯判定部３２はエッジカウンタを＋１する。Ｓ４２０の判定がＹｅｓであり、エッジカウンタが最大値の場合、Ｓ４２４において欠歯判定部３２は、エッジカウンタを０に設定する。
【００７３】
欠歯判定部３２がＳ４２２またはＳ４２４を実行することにより、エッジカウンタはエッジ検出部５２が今回検出したクランク信号のエッジ位置に対応した値に設定される。
Ｓ４２６において欠歯判定部３２は、エッジカウンタの値が欠歯部の開始パルスのエッジに対応するか否かを判定する。
【００７４】
Ｓ４２６の判定がＹｅｓであり、エッジカウンタの値が欠歯部の開始パルスのエッジに対応する場合、Ｓ４２８において欠歯判定部３２は、欠歯フラグ１をオンに設定する。さらに、Ｓ４３０において欠歯判定部３２は、タイマ専用プロセッサ５８に欠歯事前処理の実行を要求し、Ｓ４４０に処理を移行する。
【００７５】
Ｓ４２６の判定がＮｏであり、エッジカウンタの値が欠歯部の開始パルのエッジに対応しない場合、Ｓ４３２において欠歯判定部３２は、エッジカウンタの値が欠歯部の開始パルスの前に発生するパルスのエッジに対応するか否かを判定する。
【００７６】
Ｓ４３２の判定がＹｅｓであり、エッジカウンタの値が欠歯部の開始パルスの前に発生するパルスのエッジに対応する場合、Ｓ４３４において欠歯判定部３２は、欠歯フラグ２をオンに設定し処理をＳ４３８に移行する。
【００７７】
Ｓ４３２の判定がＮｏであり、エッジカウンタの値が欠歯部の開始パルスの前に発生するパルスのエッジに対応しない場合、Ｓ４３６において欠歯判定部３２は、欠歯フラグ２をオフに設定し、処理をＳ４３８に移行する。
【００７８】
Ｓ４３８において欠歯判定部３２は、欠歯フラグ１をオフに設定する。Ｓ４４０においてメインＣＰＵ３０は、点火制御の実行、噴射制御の実行の角度同期イベントの実行タイミングをコンペア部５６に設定する。コンペア部５６は、対応する角度カウンタが設定された角度同期イベントの実行タイミングになると、噴射モジュール、点火モジュールに実行信号を出力する。
【００７９】
（３）欠歯事前処理
メインＣＰＵ３０から欠歯事前処理の実行を要求されると、図４のＳ４５０においてタイマ専用プロセッサ５８は、異常処理フラグがオンであるか否かを判定する。異常処理フラグは、図２のエッジ検出処理でコンペア部５６に設定された異常判定時刻にカウンタ部５４の対応する時間カウンタが達すると、次の図５で説明する異常時処理においてオンに設定される。
【００８０】
異常処理フラグがオンの場合、図５の異常時処理において、タイマ専用プロセッサ５８が図４の欠歯事前処理の代わりに、欠歯部における目標値カウンタの設定を実行したことを示している。
【００８１】
したがって、Ｓ４５０の判定がＹｅｓであり、異常処理フラグがオンの場合、Ｓ４５２においてタイマ専用プロセッサ５８は、異常処理フラグをオフに設定し、その他の処理は実行せずに本処理を終了する。
【００８２】
異常処理フラグがオフの状態で図４の欠歯事前処理が実行されることは、メインＣＰＵ３０が図３の欠歯判定処理を実行したことにより、図４の欠歯事前処理が実行されていることを表している。したがって、図４の欠歯事前処理において、タイマ専用プロセッサ５８は、欠歯部の終了パルスが発生するときに角度カウンタが達する目標値カウンタの値を設定する必要がある。
【００８３】
そこで、Ｓ４５０の判定がＮｏであり、異常処理フラグがオフの場合、Ｓ４５４においてタイマ専用プロセッサ５８は、コンペア部５６に設定した異常判定時刻をクリアする。これにより、コンペア部５６は、異常判定時刻と対応する時間カウンタとの比較を実行しない。
【００８４】
Ｓ４５６においてタイマ専用プロセッサ５８は、次式（６）に基づいて、欠歯部の開始パルスにおいて、クロック生成部６０の目標値カウンタにハードウェアにより設定したパルス列のエッジ間カウント数に加算する残りのカウント数である欠歯カウント数を算出する。式（６）において、エッジ間カウント数はパルス列のエッジ間カウント数であり、欠歯数は本実施形態では２である。
【００８５】
欠歯カウント数＝エッジ間カウント数×欠歯数              ・・・（６）
そしてＳ４５８においてタイマ専用プロセッサ５８は、次式（７）に基づいて、欠歯部の終了パルスが発生するときに角度カウンタが達する目標値カウンタの値を算出し、目標値カウンタに設定する。
【００８６】
目標値カウンタ＝目標値カウンタ＋欠歯カウント数          ・・・（７）
（４）異常時処理
カウンタ部５４の時間カウンタが図２のエッジ検出処理により設定された異常判定時刻に達すると、タイマ専用プロセッサ５８は、図５の異常事処理の実行をコンペア部５６から要求される。
【００８７】
Ｓ４６０においてタイマ専用プロセッサ５８は、コンペア部５６に設定した異常判定時刻をクリアする。これにより、コンペア部５６は、時間カウンタと異常判定時刻との比較を停止する。図５のＳ４６２、Ｓ４６４は図４のＳ４５６、Ｓ４５８と同一処理であるから説明を省略する。
【００８８】
Ｓ４６６においてタイマ専用プロセッサ５８は、次式（８）に基づいて、時間カウンタが異常判定時刻に達してからエッジ検出部５２が欠歯部の終了パルスのエッジを検出するまでの残り時間を算出する。欠歯部において、開始パルスのエッジ検出時刻から時間カウンタが異常判定時刻に達するまでには、（エッジ間時間＋最大遅延時間）が経過している。
【００８９】
残り時間＝欠歯時間−（エッジ間時間＋最大遅延時間）
＝エッジ間時間×２−最大遅延時間    ・・・（８）
式（８）において使用するエッジ間時間は、最新のエッジ検出処理で算出されたパルス列のエッジ間時間である。そして、欠歯時間は最新のエッジ間時間を３倍した時間である。したがって、エッジ検出部５２が欠歯部の終了パルスのエッジを検出するまでの残り時間は、エッジ間時間の２倍から最大遅延時間を減算した時間になる。
【００９０】
Ｓ４６８においてタイマ専用プロセッサ５８は、式（８）で算出した残り時間の間に、クロック生成部６０が生成する角度クロックの周期を次式（９）に基づいて算出する。
角度クロック周期＝残り時間／欠歯カウント数    ・・・（９）
欠歯部では、エッジ検出部５２がエッジを検出したときにハードウェアにより目標値カウンタに加算されたパルス列のエッジ間カウント数のクロックが発生している。したがって、残り時間をＳ４６２で算出される欠歯カウント数で除算すれば、残り時間でクロック生成部６０が生成する角度クロックの周期が算出できる。
【００９１】
式（８）で算出される残り時間は、欠歯部で異常時処理が実行されない場合よりも短いので、式（９）により算出される周期も短くなる。したがって、図７に示すように、角度カウンタは残り時間の間で目標カウント数まで速やかにカウントアップする。
【００９２】
Ｓ４７０においてタイマ専用プロセッサ５８は、Ｓ４６８で算出した周期を、角度クロックの周期として設定する。Ｓ４７２においてタイマ専用プロセッサ５８は、異常処理フラグをオンにする。
【００９３】
異常処理フラグがオンに設定されることにより、図４の欠歯事前処理において、目標カウント数が再度設定されることを防止できる。
［１−３．効果］
以上説明した第１実施形態では、以下の効果を得ることができる。
【００９４】
（１）欠歯部において角度クロックの生成が停止していることをコンペア部５６がハードウェアにより検出し、コンペア部５６がタイマ専用プロセッサ５８に目標値カウンタの値と、欠歯部の残り時間で生成する角度クロックの周期とを設定する異常時処理の実行を要求する。
【００９５】
これにより、メインＣＰＵ３０のソフトウェアによる欠歯判定処理の実行と、欠歯判定処理から要求されるタイマ専用プロセッサ５８のソフトウェアによる欠歯事前処理の実行とが他のソフトウェア処理のために遅れても、角度クロックの生成が停止している期間を極力短くすることができる。
【００９６】
その結果、図７に示すように、メインＣＰＵ３０が点火制御により設定した角度カウンタの値により設定される点火タイミングが角度クロックが生成されないために遅れても、遅れを極力短くすることができる。
【００９７】
（２）欠歯部において角度クロックの生成が停止していることが検出されると、クランク信号の次のパルスが発生するまでの残り時間を、正常であれば生成される残りの角度クロックのクロック数で除算して角度クロックの周期を算出する。これにより、クランク信号の次のパルスが発生するときに、正しいカウント数の角度クロックが生成されている。
【００９８】
以上説明した第１実施形態において、欠歯部が欠落部に対応し、ＥＣＵ１０がエンジン制御装置に対応し、メインＣＰＵ３０が欠落判定装置に対応し、欠歯判定部３２が欠落判定部に対応する。
【００９９】
また、タイマ制御モジュール５０がクロック生成装置に対応し、カウンタ部５４が角度カウンタに対応し、タイマ専用プロセッサ５８が周期算出部と目標設定部とに対応し、コンペア部５６が停止判定部に対応し、クロック生成部６０がクロック生成部と目標設定部とに対応する。
【０１００】
また、第１実施形態において、Ｓ４００〜Ｓ４０８、Ｓ４６６〜Ｓ４７０が周期算出部としてのタイマ専用プロセッサ５８の処理に対応し、Ｓ４２０〜Ｓ４３８が欠歯判定部３２の処理に対応し、Ｓ４５６、Ｓ４５８、Ｓ４６２、Ｓ４６４が目標設定部としてのタイマ専用プロセッサ５８の処理に対応する。
【０１０１】
［２．第２実施形態］
［２−１．構成］
第２実施形態のエンジン制御装置としてのＥＣＵの構成は、第１実施形態のＥＣＵ１０の構成と実質的に同一であるから、説明を省略する。
【０１０２】
［２−２．処理］
第２実施形態では、欠歯部において角度クロックの生成が停止していることを、目標値カウンタが更新されず目標値カウンタと角度カウンタとが一致している経過時間に基づいて検出する点が第１実施形態と異なっている。
【０１０３】
第２実施形態では、以下に説明するエッジ検出処理と異常判定処理以外に、第１実施形態と同じ欠歯判定処理と欠歯事前処理とを実行する。ただし、第２実施形態では、第１実施形態の欠歯フラグ２は使用しないので、図３に示す欠歯判定処理のＳ４３２〜Ｓ４３６は省略される。
【０１０４】
（１）エッジ検出処理
エッジ検出部５２は、クランク信号のパルスのエッジを検出すると、タイマ専用プロセ
ッサ５８に図８のフローチャートが示すエッジ検出処理の実行を要求する。タイマ専用プロセッサ５８は、他の処理を実行中でなければ、エッジ検出部５２からの要求にしたがいエッジ検出処理を実行する。
【０１０５】
図８のＳ４８０〜Ｓ４８８、Ｓ４９２は図２のＳ４００〜Ｓ４０８、Ｓ４１８と実質的に同一処理であるから説明を省略する。
Ｓ４９０においてタイマ専用プロセッサ５８は、エッジ検出部５２がクランク信号のパルスのエッジを検出したときにクロック生成部６０においてハードウェアにより目標値カウンタに設定した目標カウント数をコンペア部５６に設定する。これにより、コンペア部５６は、目標カウント数に角度カウンタが達すると、角度クロックの生成が停止している時間を計測する異常判定処理の実行をタイマ専用プロセッサ５８に要求する。
【０１０６】
（２）異常判定処理
タイマ専用プロセッサ５８は、目標カウント数に角度カウンタが一致すると、コンペア部５６からのハードウェアによる要求により図９の異常判定処理を実行する。図１０の符号３３０が異常判定処理に対応する。
【０１０７】
Ｓ５００においてタイマ専用プロセッサ５８は、目標値カウンタと角度カウンタとが一致しているか否かを判定する。Ｓ５００の判定がＮｏであり、目標値カウンタと角度カウンタとが不一致になると本処理は終了する。
【０１０８】
Ｓ５００の判定がＹｅｓであり、目標値カウンタと角度カウンタとが一致している場合、Ｓ５０２においてタイマ専用プロセッサ５８は、目標値カウンタと角度カウンタとが一致している時間を計測するために、一致時間を＋１する。
【０１０９】
Ｓ５０４においてタイマ専用プロセッサ５８は、目標値カウンタと角度カウンタとが一致している一致時間が、欠歯部で角度クロックの停止を判定するための継続時間以上であるか否かを判定する。Ｓ５０４の判定がＮｏであり、一致時間が継続時間未満の場合、処理はＳ５００に移行する。継続時間には、例えば、第１実施形態の最大遅延時間が設定される。
【０１１０】
一致時間が継続時間以上になる前に、欠歯判定部３２が欠歯判定処理を実行して今回のパルスが欠歯部の開始パルスであると判定し、タイマ専用プロセッサ５８が欠歯事前処理を実行すると、目標値カウンタに欠歯カウント数が加算されて更新される。すると、Ｓ５００の判定がＮｏになり、Ｓ５０６〜Ｓ５１６の処理は実行されずに本処理は終了する。
【０１１１】
Ｓ５０４の判定がＹｅｓであり、図１０に示すように、一致時間が継続時間以上になると、Ｓ５０６〜Ｓ５１６の処理が実行される。Ｓ５０６〜Ｓ５１６の処理は、図５のＳ４６２〜Ｓ４７２の処理と実質的に同一であるから説明を省略する。
【０１１２】
［２−３．効果］
以上説明した第２実施形態では、第１実施形態の効果（１）、（２）と同じ効果を得ることができる。ただし、第２実施形態では、第１の実施形態の効果（１）における「異常時処理の実行を要求する。」を「異常判定処理の実行を要求する。」と読み替える。
【０１１３】
以上説明した第２実施形態において、Ｓ４８０〜Ｓ４８８、Ｓ５１０〜Ｓ５１４が周期算出部としてのタイマ専用プロセッサ５８の処理に対応し、Ｓ５００〜Ｓ５０４が停止判定部としてのタイマ専用プロセッサ５８の処理に対応し、Ｓ５０６、Ｓ５０８が目標設定部としてのタイマ専用プロセッサ５８の処理に対応する。
【０１１４】
第２実施形態では、目標カウント数に角度カウンタが一致すると、コンペア部５６からのハードウェアによる要求により、タイマ専用プロセッサ５８が図９の異常判定処理を実行する。したがって、コンペア部５６も停止判定部に対応する。
【０１１５】
［３．他の実施形態］
（１）上記実施形態では、クロック信号のパルス間の周期を除算する逓倍数を、基準となるパルス列のパルス間では４に設定した。当然のことながら、逓倍数は４に限るものではなく、パルス列のパルス間の角度間隔の大きさ、ならびに要求される角度クロックの分解能に応じて適宜設定される。
【０１１６】
（２）上記実施形態における一つの構成要素が有する複数の機能を複数の構成要素によって実現したり、一つの構成要素が有する一つの機能を複数の構成要素によって実現したりしてもよい。また、複数の構成要素が有する複数の機能を一つの構成要素によって実現したり、複数の構成要素によって実現される一つの機能を一つの構成要素によって実現したりしてもよい。また、上記実施形態の構成の一部を省略してもよい。また、上記実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加又は置換してもよい。尚、特許請求の範囲に記載した文言のみによって特定される技術思想に含まれるあらゆる態様が本発明の実施形態である。
【０１１７】
（３）上述したエンジン制御装置１０の他、当該エンジン制御装置１０を構成要素とするエンジン制御システム、当該エンジン制御装置１０としてコンピュータを機能させるためのエンジン制御プログラム、このエンジン制御プログラムを記録した記録媒体、エンジン制御方法など、種々の形態で本発明を実現することもできる。
【符号の説明】
【０１１８】
１０：ＥＣＵ（エンジン制御装置）、２０：マイコン、３０：メインＣＰＵ（欠落判定装置）、３２：欠歯判定部（欠落判定部）、５０：タイマ制御モジュール（クロック生成装置）、５４：カウンタ部（クロックカウンタ）、５６コンペ部（停止判定部）、５８：タイマ専用プロセッサ（周期算出部、目標値設定部、停止判定部）、６０：クロック生成部
【図１】
0006583118.tif 000002
【図２】
0006583118.tif 000003
【図３】
0006583118.tif 000004
【図４】
0006583118.tif 000005
【図５】
0006583118.tif 000006
【図６】
0006583118.tif 000007
【図７】
0006583118.tif 000008
【図８】
0006583118.tif 000009
【図９】
0006583118.tif 000010
【図１０】
0006583118.tif 000011