(57)【要約】【課題】アングルクロックの生成源となる信号を切替える場合においても、クランク角のズレを抑制可能な内燃機関制御装置を提供する。【解決手段】エンジンＥＣＵ１は、入力切替部１１２と、取得部１１３と、マスクエッジ算出部１１４とを備える。取得部１１３は、入力切替部１１２によりアングルクロックの生成源となる信号が切替えられる前に、割り込み要求フラグと、クランク信号のエッジ数の変化とを取得する。マスクエッジ算出部１１４は、取得部１１３の取得した割り込み要求フラグと、クランク信号のエッジ数の変化の有無とに従って判断したクランク割り込み処理を実行の要否に従い、エッジ数の増加量を補正してマスクエッジ数を算出する。【選択図】図２
2020112104.tif 000002
【特許請求の範囲】
【請求項１】
入力された内燃機関のクランク信号またはカム信号に基づいてアングルクロックを生成するアングルクロック生成部（１４１）と、
前記内燃機関の現在のクランク角に同期した処理を行うクランク角処理部（１１１）と、
前記アングルクロック生成部への入力を前記クランク信号から前記カム信号に切替えさせる入力切替部（１１２）と、
前記クランク信号のエッジをカウントしたエッジ数を保持するエッジカウンタ（１４２）と、
前記クランク信号のエッジ発生に基づくフラグであって、前記クランク角処理部の起床を要求する割り込み要求フラグを保持するフラグレジスタ（１６１）と、
前記入力切替部による入力切替期間に、前記フラグレジスタの保持状況と、前記エッジ数とを取得する取得部（１１３）と、
前記取得部の取得した前記フラグレジスタの保持状況と、前記エッジ数の変化の有無とに基づいて、マスクエッジ数を算出するマスクエッジ算出部（１１４）と、を備える内燃機関制御装置。
【請求項２】
前記マスクエッジ算出部は、前記フラグレジスタが割り込み要求ありを示している場合、または前記エッジ数の変化が生じていた場合、前記クランク角処理部を起床させ、割り込みを起床させたエッジを差し引いた前記エッジ数に基づいて前記マスクエッジ数を算出する請求項１に記載の内燃機関制御装置。
【請求項３】
前記マスクエッジ算出部は、前記フラグレジスタが割り込み要求なしを示しており、かつ前記エッジ数の変化が生じていない場合、前記クランク角処理部を起床させず、前記エッジ数に基づいて前記マスクエッジ数を算出する請求項１または２に記載の内燃機関制御装置。
【請求項４】
前記クランク角処理部は、前記マスクエッジ算出部により算出された前記マスクエッジ数に従って算出されたクランク角に同期して処理を実行する請求項１〜３のいずれか１項に記載の内燃機関制御装置。
【請求項５】
前記フラグレジスタは、前記クランク信号のエッジの発生ごとに割り込み要求ありを示す状態となるエッジフラグレジスタ（１６１ｂ）と、前記クランク信号のエッジのうち分周エッジの発生ごとに割り込み要求ありを示す状態となる分周フラグレジスタ（１６１ａ）と、を含み、
前記入力切替部は、前記入力切替期間に、前記エッジフラグレジスタの割り込み要求を有効にする有効化処理と、前記エッジフラグレジスタの保持する割り込み要求をクリアするクリア処理と、を行い、
前記取得部は、前記入力切替期間に、前記分周フラグレジスタの割り込み要求フラグを前記保持状況として取得するフラグ取得処理と、前記エッジ数を取得する第一エッジ数取得処理および第二エッジ数取得処理と、を行い、
前記マスクエッジ算出部は、前記エッジ数の変化の有無として、前記第一エッジ数取得処理および前記第二エッジ数取得処理で取得した前記エッジ数の間の変化の有無を判断する請求項１〜４のいずれか１項に記載の内燃機関制御装置。
【請求項６】
前記取得部は、前記第一エッジ数取得処理を、前記フラグ取得処理よりも前かつ前記クリア処理よりも前に実行し、前記第二エッジ数取得処理を、前記フラグ取得処理よりも後かつ前記クリア処理よりも後に実行し、
前記マスクエッジ算出部は、前記エッジフラグレジスタを割り込み要求ありを示す状態に切替えさせることにより、前記クランク角処理部を起床させる請求項５に記載の内燃機関制御装置。
【請求項７】
前記入力切替部は、前記入力切替期間が開始されると、前記有効化処理を行い、
前記取得部は、前記有効化処理の後に前記第一エッジ数取得処理を行い、
前記入力切替部は、前記第一エッジ数取得処理の後に前記クリア処理を行い、
前記取得部は、前記クリア処理の後に前記フラグ取得処理を行い、前記フラグ取得処理の後に前記第二エッジ数取得処理を行う請求項５または６に記載の内燃機関制御装置。
【請求項８】
前記取得部は、前記入力切替期間が開始されると、前記第一エッジ数取得処理を行い、
前記入力切替部は、前記第一エッジ数取得処理の後に前記有効化処理を行い、前記有効化処理の後に前記クリア処理を行い、
前記取得部は、前記クリア処理の後に前記フラグ取得処理を行い、前記フラグ取得処理の後に前記第二エッジ数取得処理を行う請求項５または６に記載の内燃機関制御装置。
【請求項９】
前記入力切替部は、前記入力切替期間が開始されると、前記有効化処理を行い、
前記取得部は、前記有効化処理の後に前記第一エッジ数取得処理を行い、前記第一エッジ数取得処理の後に前記フラグ取得処理を行い、
前記入力切替部は、前記フラグ取得処理の後に前記クリア処理を行い、
前記取得部は、前記クリア処理の後に前記第二エッジ数取得処理を行う請求項５または６に記載の内燃機関制御装置。
【請求項１０】
前記取得部は、前記入力切替期間が開始されると、前記第一エッジ数取得処理を行い、
前記入力切替部は、前記第一エッジ数取得処理の後に前記有効化処理を行い、
前記取得部は、前記有効化処理の後に前記フラグ取得処理を行い、
前記入力切替部は、前記フラグ取得処理の後に前記クリア処理を行い、
前記取得部は、前記クリア処理の後に前記第二エッジ数取得処理を行う請求項５または６に記載の内燃機関制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、アングルクロックを生成する内燃機関制御装置に関する。
【背景技術】
【０００２】
特許文献１には、エンジンの制御に用いられる電子制御装置が開示されている。特許文献１の電子制御装置は、アングルクロック生成回路と、プロセッサとを有する。アングルクロック生成回路は、入力された信号のエッジ間隔を、プロセッサにより設定された生成倍率で逓倍して生成したアングルクロックを出力する。アングルクロック生成回路は、通常時にはクランク信号の入力を受け、クランク信号のエッジ間隔に基づいてアングルクロックを生成する。アングルクロック生成回路は、クランク信号の異常などの所定の状況において、クランク信号に代えてカム信号の入力を受け、カム信号のエッジ間隔に基づきアングルクロックを生成する。
【０００３】
プロセッサにおいて実行されるソフトウェアの処理には、クランク信号のエッジ発生に基づいて起動されるクランク割り込み処理が含まれる。クランク割り込み処理を起動したプロセッサは、エッジ数に基づく現在のクランク角の算出や、算出したクランク角に基づく各種の制御を実施する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−２００４８４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
こうした内燃機関制御装置においては、割り込み処理の実行頻度の抑制により、プロセッサの処理負荷を軽減する構成が採用される場合がある。具体的には、クランク信号を所定の分周比で分周した分周エッジの発生時のみ、プロセッサにクランク割り込み処理を起動させる構成が採用される。こうした構成では、各分周エッジの間に、クランク割り込み処理を起動させていないエッジ（以下、マスクエッジ）が所定数存在する。分周エッジにより起動されたクランク割り込み処理は、前回の分周エッジから今回の分周エッジまでに所定数のマスクエッジが発生していたとみなして、エッジ数に従うクランク角の算出やクランク角に同期した処理を実施する。
【０００６】
上述の処理負荷を軽減する構成において特許文献１のようにアングルクロック生成部への入力をクランク信号からカム信号に切替えた場合、クランク割り込み処理は、分周エッジのみでの実行から、エッジごとの実行に変更される。この結果、切替え時において、クランク割り込み処理を起動したエッジとマスクエッジ数との関係が正しく維持されないおそれがある。従って、算出されるクランク角に、実際のクランク角に対するズレが生じえた。
【０００７】
本開示は、アングルクロックの生成源となる信号を切替える場合においても、クランク角のズレを抑制可能な内燃機関制御装置の提供を目的とする。
【課題を解決するための手段】
【０００８】
上記目的は独立請求項に記載の特徴の組み合わせにより達成され、また、下位請求項は、本開示の更なる有利な具体例を規定する。特許請求の範囲に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、本開示の技術的範囲を限定するものではない。
【０００９】
上記目的を達成するための本開示の内燃機関制御装置は、入力された内燃機関からのクランク信号またはカム信号に基づいてアングルクロックを生成するアングルクロック生成部（１４１）と、内燃機関の現在のクランク角に基づく処理を行うクランク角処理部（１１１）と、アングルクロック生成部への入力をクランク信号からカム信号に切替えさせる入力切替部（１１２）と、クランク信号のエッジをカウントしたエッジ数を保持するエッジカウンタ（１４２）と、クランク信号のエッジに基づくフラグであって、クランク角処理部の起床を要求する割り込み要求フラグを保持するフラグレジスタ（１６１）と、切替部による入力切替期間に、フラグレジスタの保持状況と、エッジ数の変化とを取得する取得部（１１３）と、取得部の取得したフラグレジスタの保持状況と、エッジ数の変化とに基づいて、マスクエッジ数を算出するマスクエッジ算出部（１１４）と、を備える。
【００１０】
以上の構成によれば、エッジカウンタはエッジ数をカウントしており、フラグレジスタはエッジに基づくクランク角処理部を起床させる割り込み要求フラグを保持している。故にマスクエッジ算出部は、フラグレジスタの保持する割り込み要求フラグと、エッジ数の変化の有無とに従って、マスクエッジ数を算出可能となる。従って内燃機関制御装置は、アングルクロックの生成源となる信号を切替える場合においても、クランク角のズレを抑制可能となる。
【図面の簡単な説明】
【００１１】
【図１】エンジンＥＣＵの構成を示す図である。
【図２】マイコンの構成を示す図である。
【図３】信号切替え処理を示すフローチャートである。
【図４】図３のクランク信号設定サブルーチンを示すフローチャートである。
【図５】割り込み処理とマスクエッジ数との対応例を示すタイミングチャートである。
【図６】割り込み処理とマスクエッジ数との別の対応例を示すタイミングチャートである。
【図７】割り込み処理とマスクエッジとの更に別の対応例を示すタイミングチャートである。
【図８】第二実施形態のクランク信号設定サブルーチンを示すフローチャートである。
【図９】第三実施形態のクランク信号設定サブルーチンを示すフローチャートである。
【図１０】第四実施形態のクランク信号設定サブルーチンを示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、本開示の複数の実施形態を図面に基づいて説明する。なお、各実施形態の説明において、対応する構成要素には同一番号の符号を付して重複する説明を省略する場合がある。構成の一部のみを説明している場合、構成の他の部分については先に説明した実施形態を適用できる。また、各実施形態の説明において明示している構成の組み合わせばかりでなく、特に組み合わせに支障が生じなければ、明示していなくても部分的に構成を組み合わせることも可能である。
【００１３】
＜第一実施形態＞
図１に示す本開示の第一実施形態によるエンジンＥＣＵ１は、例えば車両用のガソリンエンジンやディーゼルエンジンなどの内燃機関の制御に用いられる電子制御装置であり、「内燃機関制御装置」に相当する。エンジンＥＣＵ１は、クランク軸センサ２やカム軸センサ３などからの検出信号に基づいてクランク軸の回転角（以下、クランク角）などの内燃機関の状態を逐次把握し、内燃機関を制御する。
【００１４】
クランク軸センサ２は、クランク角に応じて電圧レベルの変動するクランク信号をエンジンＥＣＵ１に出力する。クランク軸センサ２は、例えば磁気センサであり、クランク軸４に設けられたクランクシグナルロータ５によるクランク角に応じた磁界強度の変動を検出する。クランクシグナルロータ５は、外周に所定の角度間隔で突出する歯を設けられた、クランク軸４と一体に回転する略円板状の磁性部材である。
【００１５】
クランク軸センサ２は、クランクシグナルロータ５の歯と対向する位置に設けられ、クランクシグナルロータ５の回転に伴う歯の通過によって生じる磁界強度の変動を検出する。クランクシグナルロータ５の歯は、例えば外周の一部を除いて１０度ごとに設けられている。この結果、クランク信号の立ち上がりのエッジは、外周の一部を除いてクランク軸４の１０度回転ごとの実質的に均等な角度間隔で発生する。
【００１６】
カム軸センサ３は、内燃機関のカム軸６の回転に応じて電圧レベルの変動するカム信号をエンジンＥＣＵ１に出力する。カム軸センサ３は、例えばクランク軸センサ２と同様の磁気センサであり、カム軸６に設けられたカムシグナルロータ７の歯の通過による磁界強度の変動を検出する。カム軸６は、クランク軸４に対して半分の速度で回転しており、クランク軸４の二回転、すなわち内燃機関の一回の燃焼サイクルごとに一回転する。
【００１７】
カムシグナルロータ７の歯は、均等でない角度の幅および間隔で設けられている。この結果、カム信号の立ち上がりおよび立ち下がりのエッジは、カム軸６の回転に従い均等でない角度間隔で発生する。なお、図１にはエンジンＥＣＵ１に対する入力として一つのカム軸センサ３を示しているが、内燃機関のカム軸６の数や制御アルゴリズムなどに応じてカム軸センサ３の数は適宜変更可能である。
【００１８】
エンジンＥＣＵ１は、入力回路１０、出力回路２０、およびマイコン１００を備えた電子制御装置である。入力回路１０は、クランク軸センサ２およびカム軸センサ３から入力されるクランク信号およびカム信号をマイコン１００に取り込むための回路である。入力回路１０は、例えばクランク信号およびカム信号の波形を二値の矩形波状に整形してマイコン１００に入力する。
【００１９】
出力回路２０は、マイコン１００による判断に基づき、インジェクタやイグナイタなどのエンジンＥＣＵ１の制御対象に対して駆動信号を出力する回路である。例えば出力回路は、マイコン１００から制御対象ごとに駆動信号の出力指示を受け、対応する制御対象に駆動信号を出力する。
【００２０】
マイコン１００は、図２に示すように、例えば半導体メモリなどの記憶部１０１と、ＣＰＵなどのプロセッサコア１１０を備えたマイクロコンピュータである。記憶部１０１は、プロセッサコア１１０で実行されるソフトウェアを非一時的に記録した非遷移的かつ実体的な記憶媒体に相当する。マイコン１００は、タイマアレイユニット１２０および割り込みコントローラ１６０をはじめとする各種の周辺機能回路を、上述の記憶部１０１およびプロセッサコア１１０に加えて備えている。各種の周辺機能回路、記憶部１０１、およびプロセッサコア１１０は内部バスを介して相互に接続されている。プロセッサコア１１０は、記憶部１０１に記憶されたソフトウェアに定義されている各種の処理の実行により、周辺機能回路などと協働して内燃機関を制御するための各種の機能を実現する。
【００２１】
タイマアレイユニット１２０は、多数の論理回路などにより構成された、各種のタイマ機能を提供する周辺機能回路である。タイマアレイユニット１２０は、エッジ検出タイマ１３０、アングルクロック生成タイマ１４０、および出力タイマ１５０を含んでいる。
【００２２】
エッジ検出タイマ１３０は、マイコン１００に入力されたクランク信号およびカム信号に生じたエッジを検出し、アングルクロック生成タイマ１４０に入力させるタイマである。エッジ検出タイマ１３０は、クランクエッジ検出部１３１、カムエッジ検出部１３２、およびチャネル選択部１３３を含む。
【００２３】
クランクエッジ検出部１３１は、例えばシフトレジスタなどを含んで構成された、入力回路１０からクランク信号の入力を受け付けるチャネルである。クランクエッジ検出部１３１は、クランク信号のエッジのうち、各立ち上がりエッジ、各立ち下がりエッジ、または各両エッジのいずれかを検出する。本実施形態のクランクエッジ検出部１３１は、立ち上がりエッジを検出し、立ち上がりエッジの検出の有無を示すクランクエッジ信号を出力する。クランクエッジ信号は、立ち上がりエッジが検出された場合に、電圧レベルを一時的に変更するパルス状の信号である。クランクエッジ信号のパルス幅、すなわち電圧レベルを一時的に変更される期間は、マイコン１００の動作クロック一周期に相当する。
【００２４】
ここで、動作クロックの一周期は、内燃機関の最高回転数における立ち上がりエッジの間隔、すなわちクランク軸の１０度回転に要する最短時間よりも十分に短い時間となるように設定されている。例えば一周期は、最短時間の数十分の一以下に設定されている。故に、クランクエッジ信号の各パルスは、クランク信号の立ち上がりエッジと一対一で対応する。従って、クランクエッジ信号のパルスの数は、クランク信号の立ち上がりエッジ数と一致する。クランクエッジ検出部１３１は、立ち上がりエッジを検出するたびに、割り込みコントローラ１６０に立ち上がりエッジの検出を通知する。
【００２５】
カムエッジ検出部１３２は、例えばシフトレジスタなどを含んで構成された、入力回路１０からカム信号の入力を受け付けるチャネルである。カムエッジ検出部１３２は、例えばカム信号の立ち上がりエッジおよび立ち下がりエッジの両方を検出し、検出の有無を示すカムエッジ信号を出力する。カムエッジ信号は、立ち上がりまたは立ち下がりのエッジが検出された場合に電圧レベルを一時的に変更されるパルス状の信号である。カムエッジ信号のパルス幅は、クランク信号と同様に動作クロックの一周期に相当する。
【００２６】
チャネル選択部１３３は、例えばマルチプレクサなどを含んで構成された、アングルクロック生成タイマ１４０に入力する信号のチャネルを選択する回路である。チャネル選択部１３３は、プロセッサコア１１０からの選択信号に従って、選択するチャネルを切替える。すなわちチャネル選択部１３３は、プロセッサコア１１０からの指示に従い、クランクエッジ検出部１３１およびカムエッジ検出部１３２のうち、アングルクロック生成タイマ１４０に接続されて信号を入力させる回路を切替える。チャネル選択部１３３は、クランク信号が正常である場合には、クランク信号のチャネル、すなわちクランクエッジ検出部１３１を、アングルクロック生成タイマ１４０に対する入力として選択している。
【００２７】
アングルクロック生成タイマ１４０は、アングルクロックを生成するためのタイマである。アングルクロックは、クランク信号の立ち上がりエッジ間隔よりも小さい間隔でクランク角の遷移を推定するための信号である。アングルクロックは、例えばクランク角の遷移を１６分の１度の分解能で推定可能となるように設定されている。
【００２８】
具体的には、アングルクロックは、クランク角が一度変動したと推定されるごとに出力されるパルス状の信号であり、動作クロック一周期に相当するパルス幅で出力される。ただし、アングルクロックのパルスは、急加速に伴うパルス間隔の短縮を補正する場合に、前後のパルスと一体となり動作クロックの複数周期に相当するパルス幅となりうる。アングルクロック生成タイマ１４０は、アングルクロック生成部１４１、エッジカウンタ１４２、および分周コンペア部１４３を有する。
【００２９】
アングルクロック生成部１４１は、アングルクロック生成タイマ１４０への入力信号のパルス間隔を所定の生成倍率に従って逓倍することにより、アングルクロックを生成する回路である。生成倍率は、出力するアングルクロックの角度間隔に対する入力信号にパルスの生じる角度間隔の比を示す数値であり、プロセッサコア１１０からの指示に従って設定される。例えばアングルクロック生成部１４１にクランクエッジ信号が入力されている場合には、一部のクランク角範囲を除いて１６０倍が生成倍率として設定される。またアングルクロック生成部１４１にカムエッジ信号が入力されている場合には、パルス間隔ごとに個別の数値が生成倍率として設定される。例えば、あるパルス間隔がカム軸の３０度回転分に相当する場合、すなわちクランク軸の６０度回転分に相当する場合、そのパルス間隔に対して９６０倍が生成倍率として設定される。
【００３０】
アングルクロック生成部１４１は、入力信号のパルス間隔をパルス間に発生した動作クロック数としてカウントすることにより計測する。アングルクロック生成部１４１は、例えば入力信号にパルスが生じるたびに、次のパルス発生までの期間におけるアングルクロックのパルス間隔を更新する。パルス間隔には、直前のパルスからカウントされた動作クロック数を生成倍率で割った数値が設定される。アングルクロック生成部１４１は、例えば動作クロック数をカウントし、設定されたパルス間隔と一致するたびにアングルクロックのパルスを発生させてカウントをリセットする。
【００３１】
エッジカウンタ１４２は、クランク信号のエッジ数を計測するカウンタである。エッジカウンタ１４２は、例えばクランクエッジ信号にパルスが生じる度にカウントアップすることにより、立ち上がりエッジの数を計測する。エッジカウンタ１４２でカウント可能な数の上限は、後述する分周比以上に設定されている。
【００３２】
分周コンペア部１４３は、クランク信号の立ち上がりエッジのうち、一部のエッジを分周エッジとして検出し、割り込みコントローラ１６０に通知するための回路である。換言すれば、分周コンペア部１４３は、分周エッジ以外のエッジを、割り込みコントローラ１６０に通知しないマスクエッジとする機能を発揮する。分周エッジは、例えば３０度間隔となるように立ち上がりエッジの中から選択されている。
【００３３】
分周コンペア部１４３は、例えば次の分周エッジに相当するエッジ数を保持するレジスタを含む。分周コンペア部１４３は、エッジカウンタ１４２でカウントされているパルス数が、レジスタに保持されているエッジ数と一致すると、分周エッジの発生を割り込みコントローラ１６０に通知する。通知により実行された後述のクランク割り込み処理により、その次の分周エッジに相当するエッジ数がレジスタに新たに書き込まれる。新たに書き込まれるエッジ数は、一部のクランク角範囲を除いて、立ち上がりエッジの角度間隔に対する分周エッジの角度間隔の比（以下、分周比）を、書き換え前のエッジ数に加算した値となる。分周エッジの間には、分周比−１個のマスクエッジが存在する。
【００３４】
出力タイマ１５０は、出力回路２０に対して駆動信号の出力を指示する機能を有するタイマである。出力タイマ１５０は、アングルカウンタおよび出力期間レジスタなどを含む。アングルカウンタは、現在のクランク角を推定した数値をカウントするためのカウンタである。アングルカウンタは、例えばアングルクロックのパルス発生ごとにカウントアップする。
【００３５】
出力期間レジスタは、出力期間、すなわち各制御対象に駆動信号を出力するクランク角の範囲を保持するためのレジスタである。出力期間レジスタは、プロセッサコア１１０により設定される駆動信号の出力の開始および終了タイミングを示す数値を保持する領域を制御対象ごとに有している。出力タイマ１５０は、アングルカウンタのカウント値が出力期間レジスタの保持する数値と一致すると、対応する駆動対象への駆動信号について出力の開始または停止を出力回路２０に指示する。
【００３６】
こうしたタイマアレイユニット１２０の制御のため、プロセッサコア１１０の機能には、クランク角処理部１１１としての機能が含まれる。
【００３７】
クランク角処理部１１１は、記憶部１０１に格納されたソフトウェアに含まれる処理のうち、クランク割り込み処理を実行中のプロセッサコア１１０により発揮される機能である。クランク割り込み処理は、割り込みコントローラ１６０からの割り込み要求に従って実施される割り込み処理の一種である。クランク割り込み処理は、クランク角の遷移に同期して、特定のクランク角となるたびに実施される。換言すれば、クランク角処理部１１１は、特定のクランク角となるたびに起床するプロセッサコア１１０の機能である。
【００３８】
クランク割り込み処理は、クランク信号の立ち上がりエッジ発生に従って実行される。より具体的には、通常状態では、分周エッジの発生ごとに実行される。ただし、通常状態は、アングルクロック生成タイマ１４０への入力信号としてクランクエッジ信号が入力されている状態を意味する。アングルクロック生成タイマ１４０への入力信号としてカムエッジ信号が入力されている場合には、立ち上がりエッジの発生ごとに実施される。
【００３９】
クランク割り込み処理は、実行されるたびに、前回の起動で算出したクランク角に、前回の実行からのクランク角の変化量を加算して現在のクランク角を算出する。クランク角の変化量は、前回の実行から今回の実行までにクランク信号に生じたエッジ数に従う。すなわち、前回の実行以降のエッジ数×１０度が、前回の実行からのクランク角の変化量となる。
【００４０】
例えば通常状態では、クランク割り込み処理を実行させた分周エッジに加えて２つのマスクエッジが発生しているため、前回の実行からの３つのエッジが発生している。従ってクランク角処理部１１１は、実行されるたびに前回のクランク角に３０度を加算してクランク角を算出する。
【００４１】
アングルクロック生成タイマ１４０への入力信号がカムエッジ信号である場合には、割り込み処理を実行させたエッジ以外のエッジが発生していないため、前回の実行からのエッジ数が１となる。従ってクランク角処理部１１１は、実行されるたびに前回のクランク角に１０度を加算してクランク角を算出する。
【００４２】
またクランク角処理部１１１は、マスクエッジ数として特定の数値が算出されている場合には、算出されたマスクエッジ数に従って変化量を補正してクランク角を算出する。すなわちクランク角処理部１１１は、マスクエッジ数に１を加算した数×１０度を、前回の実行からの変化量として算出する。従ってマスクエッジ数として特定の数値が算出されている場合の変化量は、大きいマスクエッジ数であるほど大きくなる。
【００４３】
クランク割り込み処理は、現在のクランク角を算出すると、そのクランク角で実行する処理として対応付けられた処理の実行に移る。クランク角に対応付けられた処理、換言すればクランク角に同期して実行される処理には、例えば燃焼サイクルに合わせた燃料噴射処理などが含まれる。またクランク割り込み処理は、次の分周エッジに相当するエッジ数を分周コンペア部１４３のレジスタに書き込むことにより、次にクランク割り込み処理の実行されるクランク角を設定する処理を含む。
【００４４】
割り込みコントローラ１６０は、プロセッサコア１１０で実行されるソフトウェアに設定されている各種の割り込み処理について、実行の可否や優先順などについて管理する機能を有する周辺機能回路である。割り込みコントローラ１６０は、マイコン１００の内部および外部からの送信された割り込み要求を受信し、対応する割り込み処理をプロセッサコア１１０に実行させる。割り込みコントローラ１６０には、割り込み要求を受けた旨を保持するためのレジスタが各割り込み処理ごとに設けられている。
【００４５】
割り込みコントローラ１６０には、クランク割り込み処理を実行させるための割り込みフラグを保持するフラグレジスタ１６１として、分周フラグレジスタ１６１ａおよびエッジフラグレジスタ１６１ｂが設けられている。
【００４６】
分周フラグレジスタ１６１ａのフラグの切替え条件は、クランク信号の立ち上がりエッジのうち、分周エッジの発生ごとにクランク割り込み処理を実行させるように設定されている。分周フラグレジスタ１６１ａは、例えば分周エッジが生じた場合に、割り込み要求があった旨を示すオンに設定される。分周フラグレジスタ１６１ａは、フラグをクランク割り込み処理の実行に用いられた場合に、要求があった旨をクリアされ、オフに設定される。
【００４７】
分周フラグレジスタ１６１ａによる割り込み要求は、アングルクロック生成タイマ１４０への入力信号がカムエッジ信号である場合には、無効な状態に切替えられる。すなわち分周フラグレジスタ１６１ａは、割り込みフラグオンの状態となっている場合であっても、入力信号がカムエッジ信号の状態では、クランク割り込み処理の実行には用いられない。
【００４８】
エッジフラグレジスタ１６１ｂのフラグの切替え条件は、クランク信号における立ち上がりエッジの発生ごとにクランク割り込み処理を実行させるように設定されている。エッジフラグレジスタ１６１ｂは、例えばクランクエッジ信号にパルスが生じた場合に、割り込みの要求があった旨を示すオンに設定される。またエッジフラグレジスタ１６１ｂは、クランク割り込み処理の実行に用いられた場合に、要求があった旨をクリアされ、オフに設定される。
【００４９】
エッジフラグレジスタ１６１ｂの割り込みフラグによる割り込み要求は、通常状態においては無効な状態に設定されている。すなわちエッジフラグレジスタ１６１ｂは、割り込みフラグオンの状態となっている場合であっても、通常状態においてはクランク割り込み処理の実行には用いられない。
【００５０】
アングルクロック生成タイマ１４０への入力信号の切替えに係る機能として、プロセッサコア１１０の機能には、入力切替部１１２、取得部１１３、およびマスクエッジ算出部１１４としての機能が含まれる。
【００５１】
入力切替部１１２は、アングルクロック生成タイマ１４０への入力信号切替えを行う信号切替え処理を実行したプロセッサコア１１０により発揮される機能である。信号切替え処理は、クランク信号の異常が検出されるなどの、所定の入力切替条件が成立していると判断された場合に実行される、アングルクロック生成タイマ１４０への入力信号を切替える処理である。信号切替え処理の実行されている期間が、入力切替期間に相当する。
【００５２】
入力切替条件の成立判断、すなわちクランク信号異常検出は周期的に実行され、クランク信号が異常の場合に信号切替え処理を実行させてプロセッサコア１１０に入力切替部１１２としての機能を発揮させる。信号切替え処理は、例えばクランク割り込み処理よりも優先度を高く設定されており、実行完了までクランク割り込み処理の実行を待機させる。また信号切替え処理の実行中には、マイコン１００の動作クロックの周期がエッジ間隔に対して十分短いため、クランク信号のエッジは一つのみ発生するまたは発生しない状態となる。すなわち、信号切替え処理の実行中には、エッジは複数発生しない。
【００５３】
入力切替部１１２は、チャネル選択部１３３に対して選択チャネルの切替信号を出力し、入力信号をクランクエッジ信号からカムエッジ信号に切替えさせる切替え指示処理を行う。入力切替部１１２は、入力切替条件が成立すると、取得部１１３に各種の情報を取得させてから切替え指示処理を行う。
【００５４】
入力切替部１１２は、切替え指示処理の前に、フラグレジスタ１６１の保持する割り込み要求フラグについて、有効または無効な状態の設定を変更させる処理を行う。より具体的には、入力切替部１１２は、分周フラグレジスタ１６１ａの割り込み要求を、有効な状態から無効な状態に変更させる無効化処理を行う。また入力切替部１１２は、エッジフラグレジスタ１６１ｂの割り込み要求を、無効な状態から有効な状態に変更させる有効化処理を行う。さらに入力切替部１１２は、カムエッジ信号への切替え前に、エッジフラグレジスタ１６１ｂのフラグをクリアさせるクリア処理を行う。
【００５５】
取得部１１３は、取得処理を実行したプロセッサコア１１０により発揮される機能である。取得処理は、信号切替え処理のサブルーチンとして設定されている、信号の切替えに係るクランク信号側の設定処理の一部である。
【００５６】
取得部１１３は、入力切替部１１２による入力信号の切替え前に、フラグレジスタ１６１における割り込みフラグの保持状況と、エッジカウンタ１４２のエッジ数の変化とを取得する。具体的には、今回の信号切替処理の開始から、入力信号の切替えを実施するまでの期間に、上述の情報を取得する。
【００５７】
より具体的には、フラグレジスタ１６１のうち、分周フラグレジスタ１６１ａの保持する割り込みフラグの状態を取得するフラグ取得処理を行う。また取得部１１３は、エッジカウンタ１４２のカウントするエッジ数を二回取得する。取得部１１３は、エッジ数を取得するエッジ数取得処理を、フラグ取得処理の前後にそれぞれ一回ずつ行う。これ以降、第一エッジ数取得処理に相当するフラグ取得処理以前のエッジ数取得処理で取得されたエッジ数を前エッジ数と呼ぶ。前エッジ数の取得は、入力切替部１１２によるフラグのクリア以前に実施される。また、第二エッジ数取得処理に相当するフラグ取得処理以前のエッジ数取得処理で取得されたエッジ数を後エッジ数と呼ぶ。後エッジ数の取得は、入力切替部１１２によるフラグのクリア以降に実施される。
【００５８】
マスクエッジ算出部１１４は、マスクエッジ算出処理を実行したプロセッサコア１１０により発揮される機能である。マスクエッジ算出処理は、信号切替え処理のサブルーチンとして設定されている、信号の切替えに係るクランク信号側の設定処理の一部である。
【００５９】
マスクエッジ算出部１１４は、入力信号の切替えに伴い、マスクエッジ数を算出する。入力信号の切替えにあたって、クランク割り込み処理の実行条件の変更に伴い、マスクエッジ数が一時的に分周比−１とは異なる数となりうる。マスクエッジ算出部１１４は、こうした一時的な変化を補正したマスクエッジ数を算出する。
【００６０】
マスクエッジ算出部１１４は、取得部１１３で取得された、割り込みフラグの保持状況と、エッジ数の変化とに基づいてマスクエッジ数を算出する。上述の通り、マスクエッジは、発生したエッジのうち、割り込みコントローラ１６０に通知されず、クランク割り込み処理に用いられなかったエッジである。従ってマスクエッジ数の算出は、直前のクランク割り込み処理以降におけるエッジ数の増加量の判断と、増加量から処理に用いられたエッジの差し引きの要否の判断とにより実行される。
【００６１】
エッジ数の増加量は、直前のクランク割り込み処理以降に、クランク信号に発生したエッジ数を示す。マスクエッジ算出部１１４は、後エッジ数から、直前のクランク割り込み処理の時点におけるエッジ数を差し引くことにより、エッジ数の増加量を算出する。
【００６２】
マスクエッジの算出にあたって増加量からの差し引くべきエッジは、増加量としてカウントされているエッジのうち、クランク割り込み処理の実行に用いるべきエッジである。すなわち、後エッジ数の取得以前に発生したエッジのうち、入力替え処理の開始以降に発生したため、要求したクランク割り込み処理をまだ実行されていないエッジである。従ってマスクエッジ算出部１１４は、入力替え処理の開始から後エッジ数の取得までの期間について、割り込み処理の実行の要否を判断することにより、差し引きの要否を判断する。
【００６３】
具体的には、マスクエッジ算出部１１４は、取得部１１３により取得された分周フラグレジスタ１６１ａの割り込みフラグがオンである場合、または前エッジ数と後エッジ数とが異なっている場合に、クランク割り込み処理の実行を要すると判断する。マスクエッジ算出部１１４は、割り込みフラグがオフであり、かつ前エッジ数と後エッジ数とが一致している場合に、クランク割り込み処理の実行を要しないと判断する。
【００６４】
マスクエッジ算出部１１４は、クランク割り込み処理の実行を要すると判断した場合には、その分のエッジを差し引いてマスクエッジ数を算出する。すなわち、エッジ数の増加量から１を差し引いた数をマスクエッジ数として決定する。なお、マスクエッジ算出部１１４は、割り込みフラグがオンかつ前エッジ数と後エッジ数が異なっている場合にも、クランク割り込み処理を１回のみ実行させるとして、１を差し引く。マスクエッジ算出部１１４は、クランク割り込み処理の実行を要しないと判断した場合には、エッジを差し引くことなくマスクエッジ数を算出する。すなわち、エッジ数の増加量をマスクエッジ数として決定する。
【００６５】
マスクエッジ算出部１１４は、例えばエッジフラグレジスタ１６１ｂの保持する割り込みフラグの書き換えにより、判断した実行の要否に従ってクランク割り込み処理を実施させる。すなわちマスクエッジ算出部１１４は、実行を要すると判断した場合には、エッジフラグレジスタ１６１ｂをオンに書き換えさせる。オンに書き換えられたエッジフラグレジスタ１６１ｂにより、クランク割り込み処理が切替え処理の完了後に強制的に実行される。
【００６６】
マスクエッジ算出部１１４は、実行を要しないと判断した場合には、エッジフラグレジスタ１６１ｂの割り込みフラグの書き換えを行わない。すなわち、エッジフラグレジスタ１６１ｂを、入力切替部１１２によりクリアされた状態のままとする。書き換えられていないエッジフラグレジスタ１６１ｂは、クリア後に発生したエッジに従いオンとなると、信号切替え処理とは独立してクランク割り込み処理を実行させる。クランク割り込み処理は、信号切替え処理の完了後に最初に実行された場合のみ、マスクエッジ算出部１１４により算出された一時的なマスクエッジ数に従ってクランク角を算出する。
【００６７】
［プロセッサコア１１０の作動］
プロセッサコア１１０の作動を、図３および図４のフローチャートに沿って説明する。プロセッサコア１１０は、内燃機関の制御中に、信号切替え処理として図３に示す処理をＳ１０１から周期的に実行する。
【００６８】
Ｓ１０１では、クランク信号に異常が生じているか否かを判断する。異常が生じていると判断した場合には、アングルクロック生成タイマ１４０への入力信号をカム信号に切替える必要があるとしてＳ１０２に進む。異常が生じていないと判断した場合には、図３に示す処理を終了する。Ｓ１０１から入力切替期間が開始する。
【００６９】
Ｓ１０２では、カム信号への切替えにあたってクランク信号について種々の設定を行うために、図４に示すクランク信号設定サブルーチンを実行する。クランク信号設定サブルーチンでは、図４に示す処理をＳ１１０から実行する。
【００７０】
Ｓ１１０では、割り込みコントローラ１６０に対し、エッジフラグレジスタ１６１ｂによるクランク割り込み処理を有効にさせる。すなわち、有効化処理として、クランク信号のエッジ検出ごとのクランク割り込み処理の実行を有効にする処理を実行する。
【００７１】
Ｓ１１１では、エッジカウンタ１４２から現在のエッジ数を取得する。すなわち、第一エッジ数取得処理として、分周フラグレジスタ１６１ａからのフラグ取得前のエッジ数である前エッジ数を取得する処理を実行する。これ以降に発生したエッジは、分周エッジに相当するか否かに拘わらずエッジ数の変化として検出され、クランク割り込み処理を実行させる。従って、この処理は割り込み要求を発生させるエッジの分周を解除する処理と言える。
【００７２】
Ｓ１１２では、クリア処理として、エッジフラグレジスタ１６１ｂの保持する割り込み要求フラグをクリアする処理を実行する。すなわち、この処理以前のエッジがエッジフラグレジスタ１６１ｂの割り込み要求フラグをオンとしていても、信号切替え処理完了後のクランク割り込み処理の実行に影響を与えない状態とする。
【００７３】
Ｓ１１３では、フラグ取得処理として。分周フラグレジスタ１６１ａの保持する割り込み要求フラグを取得する処理を実行する。すなわち、今回の信号切替え処理開始から、この処理までの期間に分周エッジが発生しているか否かを取得する。
【００７４】
Ｓ１１４では、エッジカウンタ１４２から現在のエッジ数を再度取得する。すなわち、第二エッジ数取得処理として、分周フラグレジスタ１６１ａからのフラグ取得後のエッジ数である後エッジ数を取得する処理を実行する。
【００７５】
Ｓ１１５では、クランク割り込み処理の実行させる必要があるか否かを判断する。すなわち、分周フラグレジスタ１６１ａから取得したフラグがオンであるか、または前エッジ数と後エッジ数との間に差があるかを判断する。フラグがオンであるか、またはエッジ数に差がある場合には、クランク割り込み処理を実行させるエッジが発生している、すなわち実行を要するとしてＳ１１６に進む。フラグがオフであり、かつエッジ数が一致している場合には、クランク割り込み処理の実行を要しないとしてＳ１１８に進む。
【００７６】
Ｓ１１６では、エッジフラグレジスタ１６１ｂの保持する割り込み要求フラグをオンにさせる。すなわち、信号切替え処理の完了時に、発生したエッジ分のクランク割り込み処理を強制的に一回実施させるように予約する。
【００７７】
Ｓ１１７では、エッジ数の増加量から１を差し引いた数を、マスクエッジ数と判断する。すなわち、エッジ数の増加量からＳ１１６でクランク割り込み処理を実施させた分のエッジを差し引いた数を、マスクエッジ数として算出する。
【００７８】
Ｓ１１８では、エッジ数の増加量をマスクエッジ数と判断する。すなわち、クランク割り込み処理の実施を予約しないため、エッジ数の増加量そのものをマスクエッジ数として算出する。
【００７９】
Ｓ１１９では、分周フラグレジスタ１６１ａの割り込みフラグによる割り込み要求を許可されていない状態に変更させ、図４のサブルーチンを終了して図３の処理に戻る。すなわちこの処理以降、分周フラグレジスタ１６１ａは、割り込みフラグオンの状態となっている場合であっても、有効な割り込み要求としては扱われず、クランク割り込み処理の実行には用いられない状態となる。
【００８０】
図３の処理に戻ると、Ｓ１０３の処理に進む。Ｓ１０３の処理では、カム信号への切替えにあたってカム信号について種々の設定を行う。
【００８１】
Ｓ１０４では、チャネル選択部１３３に、アングルクロック生成タイマ１４０への入力信号をカム信号に切替えさせる。Ｓ１０４で入力切替期間が完了する。
【００８２】
Ｓ１０５では、エッジフラグレジスタ１６１ｂの割り込み要求フラグがオンとなっているかを判断する。すなわち、Ｓ１１６でクランク割り込み処理を予約している、または後エッジ数の取得後にエッジが発生しているか否かを判断する。オンの場合、クランク割り込み処理の実行のためＳ１０６に進む。オフの場合、図４に示す処理を終了し、次のエッジ発生までクランク割り込み処理の実施を待つ。
【００８３】
Ｓ１０６では、クランク割り込み処理を実行する。すなわち、Ｓ１１７またはＳ１１８で算出されたマスクエッジ数に基づくクランク角算出などを実施する。
【００８４】
［第一実施形態のまとめ］
以上、説明した第一実施形態によれば、エッジカウンタ１４２はエッジ数をカウントしている。また、フラグレジスタ１６１は、エッジの発生に基づいてオンとなる、クランク角処理部１１１を起床させるための割り込み要求フラグを保持している。故にマスクエッジ算出部１１４は、エッジ数の変化として検出された直前のクランク割り込み処理から発生したエッジ数の変化量と、フラグレジスタ１６１の保持する割り込み要求フラグとに従って、マスクエッジ数を算出可能となる。従ってエンジンＥＣＵ１は、アングルクロックの生成源となる信号を切替える場合においても、算出されるクランク角のズレを抑制可能となる。
【００８５】
すなわち、マスクエッジ算出部１１４は、割り込み要求フラグのオン、またはエッジ数の変化発生に従いクランク割り込み処理を実行させる場合には、そのエッジを変化量から差し引いてマスクエッジ数を算出する。
【００８６】
またマスクエッジ算出部１１４は、割り込み要求フラグのオフかつエッジ数の変化なしのためクランク割り込み処理を実行させない場合には、変化量から実行させた分のエッジを差し引くことなくマスクエッジ数を算出する。このように、マスクエッジ算出部１１４は、クランク割り込み処理の実行の要否に従い、実行させた分のエッジを差し引いてマスクエッジ数を算出する。従って、マスクエッジ算出部１１４は、クランク割り込み処理の実行の有無と同期させてマスクエッジ数を算出しうる。
【００８７】
加えて本実施形態では、マスクエッジ算出部１１４による予約、または信号切替え処理以降のエッジにより起床されたクランク角処理部１１１は、マスクエッジ算出部１１４により算出されたマスクエッジ数に基づいてクランク角を補正する。従ってエンジンＥＣＵ１では、各種の処理に用いられるクランク角のズレが抑制され、制御の精度低下がより抑制される。
【００８８】
さらに本実施形態では、取得部１１３は、分周フラグレジスタ１６１ａの保持する割り込み要求フラグを保持状況として取得し、保持状況の取得前後におけるエッジ数をそれぞれ前エッジ数および後エッジ数として取得する。またマスクエッジ算出部１１４は、分周フラグレジスタ１６１ａの割り込み要求オンの場合、または前エッジ数と後エッジ数とが異なっている場合に、クランク割り込み処理を実行させてその分をエッジ増加量から差し引く。この結果、信号切替え処理の実行期間のいつエッジが発生した場合であっても、マスクエッジ算出部１１４は、クランク割り込み処理の実行の有無と同期させてマスクエッジ数を算出しうる。
【００８９】
クランク割り込み処理の実行の有無と同期させたマスクエッジ数の算出について、図５〜７を用いて詳細に説明する。図５〜７は、信号切替え処理の実行期間にエッジが発生した場合の、クランク割り込み処理を発生させたエッジとマスクエッジ数との対応例を示す。なお、クランク信号のエッジのうち、矢印は分周エッジに相当するクランク角で発生したエッジを示す。また、矢印でない直線は分周エッジに相当しないエッジ（以下、非分周エッジ）を示す。また、各エッジから延びる破線の矢印は、そのエッジが割り込み処理を実行させたエッジである旨を示す。
【００９０】
図５に、分周エッジに相当するエッジが信号切替え処理の実行期間に発生した場合の作動を示す。分周エッジに相当するエッジは、分周フラグレジスタ１６１ａのフラグ取得前に発生した場合にはフラグのオンとして検出可能であり、前エッジ数取得から後エッジ数取得までに発生した場合にはエッジ数の変化として検出可能である。従って分周エッジは、信号切替え処理の開始から、後エッジ数の取得までの期間までのいつ発生した場合においても、割り込み処理を発生させる。従って、マスクエッジ数はこのエッジを含めず算出される。
【００９１】
図６および図７に、非分周エッジが信号切替え処理の実行期間に発生した場合の作動を示す。非分周エッジは、分周フラグレジスタ１６１ａのフラグを用いて検出できず、エッジ数の変化で検出可能である。従って、前エッジ数の取得までの期間に発生した非分周エッジは、割り込み処理を発生させず、マスクエッジ数に含められる。一方、前エッジ数の取得から後エッジ数の取得までの期間に発生した非分周エッジは、分周エッジではないが割り込み処理の発生に用いられる。従って、この期間に発生した非分周エッジは、マスクエッジ数に含められない。
【００９２】
なお、信号切替え処理の実行期間のうち後エッジ数取得以降に発生したエッジは、分周エッジであるか非分周エッジであるかに拘わらず、マスクエッジ算出部１１４の判断するエッジ数の増加量には含まれない。故にこの期間に発生したエッジは、マスクエッジ算出部１１４による増加量から差し引くか否かの判断では参照されず、独立してクランク割り込み処理を実行させる。
【００９３】
さらに、マスクエッジ算出部１１４は、後エッジ数取得以前にクリアされたエッジフラグレジスタ１６１ｂへのオン書き込みにより、クランク割り込み処理の実行を予約する。この結果、マスクエッジ算出部１１４はエッジフラグレジスタ１６１ｂのクリアから後エッジ数取得までのエッジ発生によりオンに書き換わっていても、クランク割り込み処理を１回のみ実行させる。故にマスクエッジ算出部１１４は、エッジの数と実行回数とのズレを抑制しうる。
【００９４】
加えてマスクエッジ算出部１１４は、クリア処理以前に取得した前エッジ数をクリア処理以降の後エッジ数と比較して、割り込み処理実行の要否を判断する。本実施形態の構成に反して、クリア処理以降に前エッジ数を取得して、後エッジ数と比較し要否判断する構成を採用した場合、マスクエッジ算出部１１４による要否判断の結果と、エッジフラグレジスタ１６１ｂの状態とが相違しうる。具体的には、クリア処理から前エッジ数の取得までに非分周エッジが発生した場合、この非分周エッジは分周フラグレジスタ１６１ａをオンにせず、前エッジ数と後エッジ数との差も生じさせない。故にこの非分周エッジは、マスクエッジ算出部１１４ではクランク割り込み処理実行不要と判断されマスクエッジ数に含められるにも拘わらず、エッジフラグレジスタ１６１ｂをオンとし割り込み処理の実行に用いられる。
【００９５】
この懸念に対し本実施形態では、マスクエッジ算出部１１４は、クリア処理から後エッジ数取得までのいつエッジが発生した場合であっても、前エッジ数と後エッジ数との差に基づいてクランク割込み処理の実行を要すると判断しうる。故にマスクエッジ算出部１１４は、そのエッジが非分周エッジであっても検出し、オンに書き換わったエッジフラグレジスタ１６１ｂの状態と、クランク割り込み処理の実行の要否判断の結果とを一致させうる。故にマスクエッジ算出部１１４は、クリア後にエッジフラグレジスタ１６１ｂのフラグが書き換わった場合においても、エッジの数と実行回数とのズレを抑制しうる。
【００９６】
以上のように、マスクエッジ算出部１１４は、どのタイミングにおいてクランク信号にエッジが発生した場合においても、エッジによるクランク割り込み処理の実行と同期させてマスクエッジ数を算出しうる。故にクランク角処理部１１１は、算出されたマスクエッジ数に基づきクランク角のズレを抑制可能となる。
【００９７】
＜第二実施形態＞
第二実施形態は、第一実施形態の変形例である。第二実施形態では、図８に示すクランク信号設定サブルーチンの処理が、図４に示した処理に換えてプロセッサコア１１０により実行される。図８に示す第二実施形態におけるクランク信号設定サブルーチンの処理では、図４のＳ１１０〜Ｓ１１４の処理が、Ｓ２１０〜Ｓ２１４に置き換えられている。
【００９８】
Ｓ２１０は、図４のＳ１１１に相当する処理である。すなわちＳ２１０では、エッジカウンタ１４２から、現在のエッジ数を取得する。Ｓ２１０は、Ｓ２１３での分周フラグレジスタ１６１ａのフラグ取得以前に実施される。従ってＳ２１０で取得されたエッジ数は、前エッジ数に相当する。
【００９９】
Ｓ２１１は、図４のＳ１１０に相当する処理である。すなわちＳ２１１では、割り込みコントローラ１６０に対し、エッジフラグレジスタ１６１ｂによるクランク割り込み処理を有効にさせる。
【０１００】
Ｓ２１２は、図４のＳ１１２に相当する処理である。すなわちＳ２１２では、エッジフラグレジスタ１６１ｂの保持する割り込み要求フラグをクリアする。
【０１０１】
Ｓ２１３は、図４のＳ１１３に相当する処理である。すなわちＳ２１３では、分周フラグレジスタ１６１ａの保持する割り込み要求フラグを取得する。
【０１０２】
Ｓ２１４は、図４のＳ１１４に相当する処理である。すなわちＳ２１４では、エッジカウンタ１４２から、現在のエッジ数を再度取得する。Ｓ２１４は、Ｓ２１３での分周フラグレジスタ１６１ａのフラグ取得以降に実施される。従ってＳ２１４で取得されたエッジ数は、後エッジ数に相当する。Ｓ２１４は、Ｓ２１２でのエッジフラグレジスタ１６１ｂのクリア以降に実施される。
【０１０３】
［第二実施形態のまとめ］
以上、説明した第二実施形態によれば、第一実施形態と同様に、エンジンＥＣＵ１は、マスクエッジ算出部１１４で算出されたマスクエッジ数に基づき、クランク角のズレを抑制して制御を実施しうる。
【０１０４】
また第二実施形態においても、マスクエッジ算出部１１４は分周フラグレジスタ１６１ａのフラグと、前エッジ数と後エッジ数との差の有無と、に基づいてクランク割り込み処理の実行の要否を判断し、実行の要否に従ってマスクエッジ数を補正可能である。加えて第二実施形態においても、マスクエッジ算出部１１４は、前エッジ数の取得と後エッジ数の取得との間にクリアしたエッジフラグレジスタ１６１ｂのへの書き込みにより、クランク割り込み処理の実行を予約する。従って第二実施形態においても、第一実施形態と同様に、マスクエッジ算出部１１４は、どのタイミングにおいてクランク信号にエッジが発生した場合においても、クランク割り込み処理の実行と同期させてマスクエッジ数を算出しうる。
【０１０５】
＜第三実施形態＞
第三実施形態は、第一実施形態の別の変形例である。第三実施形態では、図９に示すクランク信号設定サブルーチンの処理が、図４に示した処理に換えてプロセッサコア１１０により実行される。図９に示す第三実施形態におけるクランク信号設定サブルーチンの処理では、図４のＳ１１０〜Ｓ１１４の処理が、Ｓ３１０〜Ｓ３１４に置き換えられている。
【０１０６】
Ｓ３１０は、図４のＳ１１０に相当する処理である。すなわちＳ３１０では、割り込みコントローラ１６０に対し、エッジフラグレジスタ１６１ｂによるクランク割り込み処理を有効にさせる。
【０１０７】
Ｓ３１１は、図４のＳ１１１に相当する処理である。すなわちＳ３１１では、エッジカウンタ１４２から、現在のエッジ数を取得する。Ｓ３１１は、Ｓ３１２での分周フラグレジスタ１６１ａのフラグ取得以前に実施される。従ってＳ３１１で取得されたエッジ数は、前エッジ数に相当する。またＳ３１１は、Ｓ３１３でのエッジフラグレジスタ１６１ｂのクリア以前に実施される。
【０１０８】
Ｓ３１２は、図４のＳ１１３に相当する処理である。すなわちＳ３１２では、分周フラグレジスタ１６１ａの保持する割り込み要求フラグを取得する。
【０１０９】
Ｓ３１３は、図４のＳ１１２に相当する処理である。すなわちＳ３１３では、エッジフラグレジスタ１６１ｂの保持する割り込み要求フラグをクリアする。
【０１１０】
Ｓ３１４は、図４のＳ１１４に相当する処理である。すなわちＳ３１４では、エッジカウンタ１４２から、現在のエッジ数を再度取得する。Ｓ３１４は、Ｓ３１２での分周フラグレジスタ１６１ａのフラグ取得以降に実施される。従ってＳ３１４で取得されたエッジ数は、後エッジ数に相当する。またＳ３１４は、Ｓ３１３でのエッジフラグレジスタ１６１ｂのクリア以降に実施される。
【０１１１】
［第三実施形態のまとめ］
以上、説明した第三実施形態によれば、第一実施形態と同様に、エンジンＥＣＵ１は、マスクエッジ算出部１１４で算出されたマスクエッジ数に基づき、クランク角のズレを抑制して制御を実施しうる。
【０１１２】
また第三実施形態においても、マスクエッジ算出部１１４は、分周フラグレジスタ１６１ａのフラグと、前エッジ数と後エッジ数との差の有無と、に基づいてクランク割り込み処理の実行の要否を判断し、実行の要否に従ってマスクエッジ数を補正可能である。加えて第三実施形態においても、マスクエッジ算出部１１４は、前エッジ数の取得と後エッジ数の取得との間にクリアしたエッジフラグレジスタ１６１ｂのへの書き込みにより、クランク割り込み処理の実行を予約する。従って第三実施形態においても、第一実施形態と同様に、マスクエッジ算出部１１４は、どのタイミングにおいてクランク信号にエッジが発生した場合においても、クランク割り込み処理の実行と同期させてマスクエッジ数を算出しうる。
【０１１３】
＜第四実施形態＞
第四実施形態は、第一実施形態の別の変形例である。第四実施形態では、図１０に示すクランク信号設定サブルーチンの処理が、図４に示した処理に換えてプロセッサコア１１０により実行される。図１０に示す第四実施形態におけるクランク信号設定サブルーチンの処理では、図４のＳ１１０〜Ｓ１１４の処理が、Ｓ４１０〜Ｓ４１４に置き換えられている。
【０１１４】
Ｓ４１０は、図４のＳ１１１に相当する処理である。すなわちＳ４１０では、エッジカウンタ１４２から、現在のエッジ数を取得する。Ｓ４１０は、Ｓ４１２での分周フラグレジスタ１６１ａのフラグ取得以前に実施される。従ってＳ４１０で取得されたエッジ数は、前エッジ数に相当する。またＳ４１０は、Ｓ４１３でのエッジフラグレジスタ１６１ｂのクリア以前に実施される。
【０１１５】
Ｓ４１１は、図４のＳ１１０に相当する処理である。すなわちＳ４１１では、割り込みコントローラ１６０に対し、エッジフラグレジスタ１６１ｂによるクランク割り込み処理を有効にさせる。
【０１１６】
Ｓ４１２は、図４のＳ１１３に相当する処理である。すなわちＳ４１２では、分周フラグレジスタ１６１ａの保持する割り込み要求フラグを取得する。
【０１１７】
Ｓ４１３は、図４のＳ１１２に相当する処理である。すなわちＳ４１３では、エッジフラグレジスタ１６１ｂの保持する割り込み要求フラグをクリアする。
【０１１８】
Ｓ４１４は、図４のＳ１１４に相当する処理である。すなわちＳ４１４では、エッジカウンタ１４２から、現在のエッジ数を再度取得する。Ｓ４１４は、Ｓ４１２での分周フラグレジスタ１６１ａのフラグ取得以降に実施される。従ってＳ４１４で取得されたエッジ数は、後エッジ数に相当する。またＳ４１４は、Ｓ４１３でのエッジフラグレジスタ１６１ｂのクリア以降に実施される。
【０１１９】
［第四実施形態のまとめ］
以上、説明した第四実施形態によれば、第一実施形態と同様に、エンジンＥＣＵ１は、マスクエッジ算出部１１４で算出されたマスクエッジ数に基づき、クランク角のズレを抑制して制御を実施しうる。
【０１２０】
また第四実施形態においても、マスクエッジ算出部１１４は、分周フラグレジスタ１６１ａのフラグと、前エッジ数と後エッジ数との差の有無と、に基づいてクランク割り込み処理の実行の要否を判断し、実行の要否に従ってマスクエッジ数を補正可能である。加えて第四実施形態においても、マスクエッジ算出部１１４は、前エッジ数の取得と後エッジ数の取得との間にクリアしたエッジフラグレジスタ１６１ｂのへの書き込みにより、クランク割り込み処理の実行を予約する。従って第四実施形態においても、第一実施形態と同様に、マスクエッジ算出部１１４は、どのタイミングにおいてクランク信号にエッジが発生した場合においても、クランク割り込み処理の実行と同期させてマスクエッジ数を算出しうる。
【０１２１】
＜他の実施形態＞
以上、本開示の実施形態を説明したが、本開示は上述の実施形態に限定されるものではなく、次の変形例も本開示の技術的範囲に含まれ、さらに、下記以外にも要旨を逸脱しない範囲内で種々変更して実施できる。なお、以下の説明において、それまでに使用した符号と同一番号の符号を有する要素は、特に言及する場合を除き、それ以前の実施形態における同一符号の要素と同一である。また、構成の一部のみを説明している場合、構成の他の部分については先に説明した実施形態を適用できる。
【０１２２】
上述の実施形態においては、分周フラグレジスタ１６１ａの割り込み要求フラグを無効に切替える処理は、マスクエッジ数の算出以降に行われていた。しかし、分周フラグレジスタ１６１ａの割り込み要求を取得可能であれば、無効に切替える処理のタイミングはこれに限られず適宜変更可能である。
【０１２３】
上述の実施形態においては、クランク信号のエッジは立ち上がりエッジを用いていた。しかし、立ち下がりエッジを用いる構成でもよい。
【符号の説明】
【０１２４】
１  エンジンＥＣＵ（内燃機関制御装置）、  １１１  クランク角処理部、  １１２  入力切替部、  １１３  取得部、  １１４  マスクエッジ算出部、  １４２  エッジカウンタ、  １４１  アングルクロック生成部、  １６１  フラグレジスタ、  １６１ａ  分周フラグレジスタ、  １６１ｂ  エッジフラグレジスタ
【図１】
2020112104.tif 000003
【図２】
2020112104.tif 000004
【図３】
2020112104.tif 000005
【図４】
2020112104.tif 000006
【図５】
2020112104.tif 000007
【図６】
2020112104.tif 000008
【図７】
2020112104.tif 000009
【図８】
2020112104.tif 000010
【図９】
2020112104.tif 000011
【図１０】
2020112104.tif 000012