(57)【要約】【課題】二つの処理装置間でのカウントズレを、３６０°ＣＡよりも細かい間隔で検出することができる電子制御装置を提供すること。【解決手段】協調制御を行う第１マイコン１０と第２マイコン４０とを備え、第１マイコン１０は、３０°ＣＡ毎にクランクカウンタ３１のカウント値を送信し、第２マイコン４０は、ＴＤＣタイミングで、クランクカウンタ６１のカウント値と、取得したクランクカウンタ３１のカウント値とを比較することで、カウントズレが発生しているか否かを監視する。【選択図】図１
2014047752.tif 000002
【特許請求の範囲】
【請求項１】
協調制御を行う第１処理装置（１０）と第２処理装置（４０）とを備え、クランクセンサ（２２０）からクランクシャフトの回転に応じたクランク角信号が入力される電子制御装置であって、
前記第２処理装置は、
前記第１処理装置と通信を行う第２通信手段（Ｓ３４，Ｓ３０５）と、
前記クランクセンサから出力されたクランク角信号をカウントする第２クランクカウンタ（６１，Ｓ２５，Ｓ３０３）と、
前記第２クランクカウンタのカウント値に同期して処理を実行するものであり、前記第１処理装置が実行する処理に必要な処理用信号を生成し、前記第２通信手段にて前記処理用信号を送信する第２処理部（５０）と、を含み、
前記第１処理装置は、
前記第２処理装置と通信を行う第１通信手段（Ｓ５４，Ｓ３１０）と、
前記クランクセンサから出力されたクランク角信号をカウントする第１クランクカウンタ（３１，Ｓ５３，Ｓ３０９）と、
前記第１クランクカウンタのカウント値に同期して処理を実行するものであり、前記第１通信手段を介して取得した前記処理用信号に基づいて処理を実行する第１処理部（２０）と、を含み、
前記第１通信手段は、予め設定された３６０°ＣＡ間隔よりも短い間隔で前記第１クランクカウンタのカウント値を送信するものであり、
前記第２処理装置は、予め設定された３６０°ＣＡ間隔よりも短い間隔で、前記第２クランクカウンタのカウント値と、前記第２通信手段にて取得した前記第１クランクカウンタのカウント値とを比較することで、前記第２クランクカウンタのカウント値と前記第１クランクカウンタのカウント値とにズレが発生しているか否かを監視する監視手段（Ｓ３０４）と、を備えていることを特徴とする電子制御装置。
【請求項２】
前記第２通信手段は、前記監視手段にてズレが発生していることが検出された場合、前記第２クランクカウンタのカウント値を補正値として送信する送信手段（Ｓ３０５，Ｓ３４）を含み、
前記第１通信手段は、前記第２通信手段から送信された補正値を受信する受信手段（Ｓ３０７）を含むものであり、
前記第１処理装置は、前記第１クランクカウンタのカウント値を、前記受信手段にて受信した補正値で補正する補正手段（Ｓ３０８，Ｓ５１）を備えていることを特徴とする請求項１に記載の電子制御装置。
【請求項３】
前記第１通信手段は、前記第１クランクカウンタのカウント値に同期して通信を行なうものであり、
前記第２通信手段は、前記第２クランクカウンタのカウント値に同期して通信を行うことを特徴とする請求項１又は２に記載の電子制御装置。
【請求項４】
前記監視手段は、内燃機関の各気筒における上死点で比較を行うことを特徴とする請求項１乃至３のいずれか一項に記載の電子制御装置。
【請求項５】
前記第２処理装置は、
前記第２通信手段にて取得した前記第１クランクカウンタのカウント値を記憶する第１記憶手段（６３）と、
前記第２クランクカウンタのカウント値を記憶する第２記憶手段（６４）と、を備え、
前記監視手段は、前記第１記憶手段に記憶されたカウント値と、前記第２記憶手段に記憶されたカウント値とを比較することを特徴とする請求項１乃至４のいずれか一項に記載の電子制御装置。
【請求項６】
前記第２処理装置は、前記第１処理装置よりも協調制御における処理負荷が軽くなるように設定されていることを特徴とする請求項１乃至５のいずれか一項に記載の電子制御装置。
【請求項７】
前記第１処理装置は、前記第２クランクカウンタのカウント値と前記第１クランクカウンタのカウント値とにズレが発生した場合、ズレが発生したことを記憶する第１ズレ記憶手段（３４，Ｓ４３）を備え、
第２処理装置は、前記第２クランクカウンタのカウント値と前記第１クランクカウンタのカウント値とにズレが発生した場合、ズレが発生したことを記憶する第２ズレ記憶手段（６６，Ｓ３５）を備えていることを特徴とする請求項１乃至請求項６のいずれか一項に記載の電子制御装置。
【請求項８】
前記第１処理装置と前記第２処理装置とは、内燃機関の各気筒における圧力を検出する気筒内圧センサからの検出信号に基づいて、前記内燃機関を協調制御することを特徴とする請求項１乃至請求項７のいずれか一項に記載の電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、二つの処理装置を有する電子制御装置に関するものである。
【背景技術】
【０００２】
従来、エンジン側に気筒内の圧力を検出する気筒内圧センサ（Cylinder Pressure Sensor、以降、略してＣＰＳとも称する）を設け、ＣＰＳの検出結果（ＣＰＳ信号）をもとに燃料噴射制御や点火時期制御等など（以下、総称してＣＰＳ制御と称する）を行う燃料噴射制御装置が知られている（例えば、引用文献１）。
【０００３】
また、特許文献２に開示されたエンジン制御装置のように、二つの処理装置（マイクロコンピュータ、以下マイコンと称する）を有する電子制御装置がある。このエンジン制御装置は、互いに通信可能な複数の二つのマイコンを内蔵したＥＣＵを中心として、各種のエンジン制御を行うものである。また、この第１マイコンと第２マイコンには、一つのクランクセンサからのクランク角信号が入力される構成になっている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−１００５５９号公報
【特許文献２】特開２０００−２４８９９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、ＣＰＳ制御を実行する際には、クランクカウンタでクランク角信号をカウントし、このカウント値に同期して処理を行うことが考えられる。つまり、カウント値に同期してＣＰＳ信号を取得して噴射量・噴射時期・点火時期の演算を行う。そして、この演算後に、カウント値に同期してイグナイタ、インジェクタ等のアクチュエータ駆動を行う。このように、クランクカウンタの精度が非常に重要となってくる。
【０００６】
また、特許文献２のように二つのマイコンを用いて、ＣＰＳ制御を行うことも考えられる。つまり、二つのマイコンで協調制御することでＣＰＳ制御を行う。この場合、例えば、第２マイコンにＣＰＳ信号取得から筒内状態量算出までの機能を配置し、第１マイコンに筒内状態量から噴射量・噴射時期・点火時期の演算からアクチュエータ駆動までの機能を配置する。また、第１マイコンと第２マイコンの夫々に設けられたクランクカウンタで、クランク角信号をカウントする。そして、第２マイコンは、自身のクランクカウンタのカウント値に同期してＣＰＳ信号を取得すると共に、そのカウント値に同期して筒内状態量を算出し、算出した筒内状態量を第１マイコンに送信する。一方、第１マイコンは、受信した筒内状態量に基づいて、自身のクランクカウンタのカウント値に同期して演算、アクチュエータ駆動を行う。
【０００７】
しかしながら、第１マイコンと第２マイコンのいずれか一方で、クランクカウンタが意図したタイミングでカウントアップできなかったり、クランクカウンタが意図しないタイミングでカウントアップしたりすることがある。このような場合、第１マイコンでのカウント値と第２マイコンでのカウント値にズレ（カウントズレ）が発生することもありうる。よって、カウント値に同期してＣＰＳ制御を行う場合、カウントズレが発生すると、適切に制御を行うことができない可能性がある。
【０００８】
従って、カウントズレが発生した場合は、カウントズレを補正（修正）する必要がある。なお、クランクカウンタのカウント値を補正する技術としては、クランクセンサの特異な入力信号により、クランクカウンタを補正する技術（例えば、クランク信号欠歯判定技術）が知られている。しかしながら、クランク信号欠歯判定の場合、欠歯部の数にもよるが、カウントズレが発生していたとしても、通常３６０°ＣＡ（Crank Angle）毎にしかカウントズレを検出しない。
【０００９】
本発明は、上記問題点に鑑みなされたものであり、二つの処理装置間でのカウントズレを、３６０°ＣＡよりも細かい間隔で検出することができる電子制御装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するために本発明は、協調制御を行う第１処理装置（１０）と第２処理装置（４０）とを備え、クランクセンサ（２２０）からクランクシャフトの回転に応じたクランク角信号が入力される電子制御装置であって、
第２処理装置は、
第１処理装置と通信を行う第２通信手段（Ｓ３４，Ｓ３０５）と、
クランクセンサから出力されたクランク角信号をカウントする第２クランクカウンタ（６１，Ｓ２５，Ｓ３０３）と、
第２クランクカウンタのカウント値に同期して処理を実行するものであり、第１処理装置が実行する処理に必要な処理用信号を生成し、第２通信手段にて処理用信号を送信する第２処理部（５０）と、を含み、
第１処理装置は、
第２処理装置と通信を行う第１通信手段（Ｓ５４，Ｓ３１０）と、
クランクセンサから出力されたクランク角信号をカウントする第１クランクカウンタ（３１，Ｓ５３，Ｓ３０９）と、
第１クランクカウンタのカウント値に同期して処理を実行するものであり、第１通信手段を介して取得した処理用信号に基づいて処理を実行する第１処理部（２０）と、を含み、
第１通信手段は、予め設定された３６０°ＣＡ間隔よりも短い間隔で第１クランクカウンタのカウント値を送信するものであり、
第２処理装置は、予め設定された３６０°ＣＡ間隔よりも短い間隔で、第２クランクカウンタのカウント値と、第２通信手段にて取得した第１クランクカウンタのカウント値とを比較することで、第２クランクカウンタのカウント値と第１クランクカウンタのカウント値とにズレが発生しているか否かを監視する監視手段（Ｓ３０４）と、を備えていることを特徴とする。
【００１１】
このように、第１処理装置は、予め設定された３６０°ＣＡ間隔よりも短い間隔で第１クランクカウンタのカウント値を送信する（第１通信手段）。一方、監視手段（第２処理装置）は、第２クランクカウンタのカウント値と、第２通信手段を介して取得した第１クランクカウンタのカウント値とを比較することで、第１クランクカウンタのカウント値と第２クランクカウンタのカウント値とにズレ（カウントズレ）が発生しているか否かを監視する。つまり、本発明は、第２通信手段を介して取得した第１クランクカウンタのカウント値を用いて、カウントズレが発生しているか否かを監視するので、従来技術のように欠歯部の個数に関係なく、３６０°ＣＡ間隔よりも短い間隔（細かい間隔）で監視することができる。
【図面の簡単な説明】
【００１２】
【図１】ＥＣＵの概略構成を示すブロック図である。
【図２】ＥＣＵにおけるＣＰＳ制御の処理タイミング例（４気筒の場合）を示す図面である。
【図３】ＥＣＵにおける全体の処理動作を示すフローチャートである。
【図４】ＥＣＵにおける各マイコンの処理動作を説明する説明図であり、ズレが発生していない正常時の図面である。
【図５】第２マイコンの受信トリガ処理を示すフローチャートである。
【図６】第２マイコンの３０ＣＡ処理を示すフローチャートである。
【図７】第２マイコンのメモリ配列比較処理を示すフローチャートである。
【図８】第１マイコンの受信トリガ処理を示すフローチャートである。
【図９】第１マイコンの３０ＣＡ処理を示すフローチャートである。
【図１０】ＥＣＵにおける各マイコンの処理動作を説明する説明図であり、第１マイコンでの処理抜けによるズレ発生時の図面である。
【図１１】ＥＣＵにおける各マイコンの処理動作を説明する説明図であり、第１マイコンでのノイズ発生時の図面である。
【図１２】ＥＣＵにおける各マイコンの処理動作を説明する説明図であり、第２マイコンでのノイズ発生時の図面である。
【発明を実施するための形態】
【００１３】
以下、本発明の実施形態を図に基づいて説明する。
【００１４】
まず、図１に基づいて、ＥＣＵ１００（electronic control unit：電子制御装置）の構成に関して説明する。ＥＣＵ１００は、車両に搭載されるものであり、主に、第１マイコン（第１処理装置）１０と第２マイコン（第２処理装置）４０とを備えて構成されている。本実施形態では、一例として、４気筒エンジン（内燃機関）の制御を行うパワートレイン制御ＥＣＵに適用したＥＣＵ１００を採用する。
【００１５】
ＥＣＵ１００は、内燃機関の各気筒における圧力を検出して、ＣＰＳ信号（検出信号）を出力する気筒内圧センサ２１０や、クランクシャフトの回転に応じたクランク角信号を出力するクランクセンサ２２０などが接続されている。よって、ＥＣＵ１００は、ＣＰＳ信号やクランク角信号などが入力される。また、ＥＣＵ１００は、イグナイタ３１０、インジェクタ３２０、異常警告部３３０などへ制御信号を出力するものである。なお、気筒内圧センサ２１０、クランクセンサ２２０、イグナイタ３１０、インジェクタ３２０、異常警告部３３０に関しては、周知技術であるため詳しい説明は省略する。
【００１６】
第１マイコン１０は、主に、処理部（第１処理部）２０とメモリ空間３０とを備えて構成されている。
【００１７】
処理部２０は、後ほど説明するクランクカウンタ（第１クランクカウンタ）３１のカウント値に同期して処理を実行するものであり、第２マイコン４０から受信した情報（筒内状態量など）を基に各種処理（例えば内燃機関の制御などの各種制御）を行う。本実施形態においては、一例として、イグナイタ３１０に制御信号を出力することで点火時期制御を行う点火制御部２１、インジェクタ３２０に制御信号を出力することで燃料噴射制御を行う噴射制御部２２、失火検出を行う失火検出部２３を備えた処理部２０を採用している。つまり、第１マイコン１０は、ＣＰＳ制御を行うものである。なお、ＣＰＳ制御として失火検出を含むようにしてもよい。
【００１８】
より詳細には、処理部２０は、後ほど説明するクランクカウンタ３１に同期して各種処理を実施する。点火制御部２１は、クランクカウンタ３１に同期して、第２マイコン４０から筒内状態量を取得し、取得した筒内状態量を基に点火補正演算を行う（点火制御）。そして、点火制御部２１は、点火補正演算後に、クランクカウンタ３１に同期して、イグナイタ３１０に制御信号を出力することでイグナイタ３１０を駆動する（点火時期制御）。
【００１９】
また、噴射制御部２２は、クランクカウンタ３１に同期して、第２マイコン４０から筒内状態量を取得し、取得した筒内状態量を基に噴射補正演算を行う（噴射制御）。そして、噴射制御部２２は、噴射補正演算後に、クランクカウンタ３１に同期して、インジェクタ３２０に制御信号を出力することでインジェクタ３２０を駆動する（燃料噴射制御）。
【００２０】
また、失火検出部２３は、クランクカウンタ３１に同期して、第２マイコン４０から筒内状態量を取得し、取得した筒内状態量を基に失火検出を行う。そして、失火検出部２３は、異常（失火）を検出した場合、異常警報部３３０に制御信号を出力することで、異常警報部３３０に異常警報を発生させる。
【００２１】
なお、クランクカウンタ３１に同期とは、クランクカウンタ３１のカウントアップに同期や、クランクカウンタ３１のカウント値のインクリメントに同期や、クランク角に同期と言い換えることもできる。クランクカウンタ６１の場合も同様である。
【００２２】
また、メモリ空間３０には、クランクカウンタ３１、クランクカウンタ補正値メモリ（以下、補正値メモリとも称する）３２、通信異常メモリ３３、ズレ発生メモリ（第１ズレ記憶手段）３４が設けられている。
【００２３】
クランクカウンタ３１は、車両のエンジンの回転に伴うクランク角度に対応してカウントアップされるものである。このクランクカウンタ３１は、クランクセンサ２２０からの信号（入力信号、クランク角信号、クランクセンサ入力信号と言い換えることもできる）が入力される毎に、カウント値をインクリメントするものである。言い換えると、第１マイコン１０は、クランクセンサ２２０からの入力信号をカウントして、そのカウント値を記憶（格納とも称する）している。本実施形態では、一例として、クランクセンサ２２０からの信号に基づいて（つまり、クランク角が３０°ＣＡ増大する毎）に、「０→１→２→・・→２２→２３→０」とカウント値をインクリメントするクランクカウンタ３１を採用している。よって、例えば、カウント値「０」は０°ＣＡ、カウント値「１」は３０°ＣＡを示すものである。
【００２４】
補正値メモリ３２は、第２マイコン４０から送信されたクランクカウンタ６１のカウント値を格納するものである。この第２マイコン４０から送信されたカウント値は、第１マイコン１０のクランクカウンタ３１のカウント値を補正するためのものであるため、補正値とも言い換えることができる。補正値メモリ３２は、例えば、メモリ空間３０（メモリ）に設けられた複数の記憶領域の一つを採用することができる。
【００２５】
通信異常メモリ３３は、第２マイコン４０から受信したキーワード「ＡＡ」を格納するものである。このキーワード「ＡＡ」は、第１マイコン１０と第２マイコン４０との間における通信に異常が生じていることを示すものである。よって、キーワード「ＡＡ」は、通信異常のキーワード、又は、異常通知のキーワードと言い換えることもできる。この異常通知のキーワードとしては、一例として、本実施形態で採用している「ＡＡ」などの特異な値を採用することができる。しかしながら、本発明はこれに限定されるものではない。なお、通信異常メモリ３３は、例えば、メモリ空間３０（メモリ）に設けられた複数の記憶領域の一つを採用することができる。
【００２６】
ズレ発生メモリ３４は、ズレ発生を示す値（ズレが発生したこと）を格納するものである。このズレ発生を示す値とは、カウントズレが発生したことを示す値である。ズレ発生メモリ３４は、例えば、メモリ空間３０（メモリ）に設けられた複数の記憶領域の一つを採用することができる。なお、カウントズレが発生したことを、単にズレ発生とも称する。
【００２７】
第２マイコン４０は、主に、処理部（第２処理部）５０とメモリ空間６０とを備えて構成されている。処理部５０は、後ほど説明するクランクカウンタ（第２クランクカウンタ）６１に同期して処理を実行するものであり、第１マイコン１０が実行する処理に必要な処理用信号を生成し、この処理用信号を送信する。本実施形態においては、一例として、気筒内圧センサ２１０よりＣＰＳ信号を取り込み、このＣＰＳ信号を基に筒内状態量（処理用信号）を算出する筒内状態量算出部５１、気筒内圧センサ２１０の異常判定を実施するセンサ異常判定部５２を備えた処理部５０を採用している。ただし、処理部５０は、これに限定されるものではない。なお、上述のように、燃料噴射制御や点火時期制御は、筒内状態量を元に実行されるものである。よって、ＣＰＳ制御の実行に必要な筒内状態量を算出する第２マイコンは、ＣＰＳ制御を行うものということができる。
【００２８】
より詳細には、処理部５０は、後ほど説明するクランクカウンタ６１に同期して、気筒毎に設けられた気筒内圧センサ２１０からＣＰＳ信号（各気筒のＣＰＳ信号）を取り込む。そして、処理部５０（筒内状態量算出部５１）は、クランクカウンタ３１に同期して、筒内状態量を算出する。更に、処理部５０は、クランクカウンタ３１に同期して、筒内状態量を第１マイコン１０に送信する。また、処理部５０（センサ異常判定部５２）は、クランクカウンタ３１に同期して、気筒内圧センサ２１０の異常判定を実施する。そして、処理部５０は、クランクカウンタ３１に同期して、異常判定結果を第１マイコン１０に送信する。このように、第２マイコン４０は、第１マイコン１０と同様に、クランクカウンタ６１のカウント値に従って各種処理を実施する。
【００２９】
さらに、処理部５０は、予め設定された３６０°ＣＡ間隔よりも短い間隔で、クランクカウンタ６１のカウント値と、クランクカウンタ３１のカウント値とを比較することで、カウントズレが発生しているか否かを監視する（監視手段）。なお、本実施形態では一例として、ＴＤＣ毎にカウントズレを監視する例を採用している。つまり、本実施形態においては、予め設定された３６０°ＣＡ間隔よりも短い間隔として、ＴＤＣ間隔を採用している。また、ＴＤＣは、top dead centre（上死点）を示すものである。このカウントズレの監視に関しては、後ほど詳しく説明する。
【００３０】
また、メモリ空間６０には、クランクカウンタ６１、クランクカウンタ受信値メモリ（以下、受信値メモリとも称する）６２、第１メモリ配列（第１記憶手段）６３、第２メモリ配列（第２記憶手段）６４、通信異常メモリ６５、ズレ発生メモリ（第２ズレ記憶手段）６６が設けられている。なお、クランクカウンタ６１は、上述のクランクカウンタ３１と同様であるため詳しい説明は省略する。
【００３１】
受信値メモリ６２は、第１マイコン１０から送信されたクランクカウンタ３１のカウント値を格納するものである。受信値メモリ６２に格納されるカウント値は、第２マイコン４０が受信したカウント値であるため、受信値とも言い換えることができる。受信値メモリ６２は、例えば、メモリ空間６０（メモリ）に設けられた複数の記憶領域の一つを採用することができる。
【００３２】
第１メモリ配列６３は、第１マイコン１０から異なる複数のタイミング（ここでは、一例として三回を採用している）で送信された、クランクカウンタ３１のカウント値を格納するものである。このため、この第１メモリ配列６３は、第１要素６３１、第２要素６３２、第３要素６３３を含むものである。この第１要素６３１、第２要素６３２、第３要素６３３の夫々には、第１マイコン１０から送信され、一旦受信値メモリ６２に格納された受信値が格納される。より詳細には、第１要素６３１には、受信値メモリ６２に一旦格納された受信値が格納される。第２要素６３２には、受信値メモリ６２及び第１要素６３１の夫々に一旦格納された受信値が格納される。第３要素６３３には、受信値メモリ６２、第１要素６３１及び第２要素６３２の夫々に一旦格納された受信値が格納される。なお、第１要素６３１、第２要素６３２、第３要素６３３の夫々に格納されている受信値を単に「値」とも称する。
【００３３】
第２メモリ配列６４は、異なる複数のタイミング（ここでは、一例として三回を採用している）におけるクランクカウンタ６１のカウント値を格納するものである。このため、この第２メモリ配列６４は、第１要素６４１、第２要素６４２、第３要素６４３を含むものである。この第１要素６４１には、クランクカウンタ６１のカウント値が格納される。また、第２要素６４２には、第１要素６４１に一旦格納されたカウント値が格納される。そして、第３要素６４３には、第１要素６４１及び第２要素６４２の夫々に一旦格納されたカウント値が格納される。なお、第１要素６４１、第２要素６４２、第３要素６４３の夫々に格納されている受信値を単に「値」とも称する。
【００３４】
なお、ＥＣＵ１００が正常に動作している場合、第１要素６３１と第１要素６４１には、同じ値が格納されることになる。同様に、第２要素６３２と第２要素６４２には、同じ値が格納されることになる。また、第３要素６３３と第３要素６４３には、同じ値が格納されることになる。
【００３５】
なお、ＥＣＵ１００が正常に動作している場合とは、クランクカウンタ３１，６１が正常にインクリメントしている状態である。例えば、第１マイコン１０に処理抜けが発生した場合、クランクカウンタ３１は、正常にインクリメントできない。また、第１マイコン１０にノイズが発生した場合、クランクカウンタ３１は、正常にインクリメントできない。同様に、第２マイコン４０にノイズが発生した場合、クランクカウンタ６１は、正常にインクリメントできない。なお、ＥＣＵ１００が正常に動作している場合とは、カウントズレが生じていない状態とも言い換えることができる。
【００３６】
この第１要素６３１、第２要素６３２、第３要素６３３の夫々は、例えば、メモリ空間３０（メモリ）に設けられた複数の記憶領域の一つを採用することができる。同様に、第１要素６４１、第２要素６４２、第３要素６４３の夫々は、例えば、メモリ空間３０（メモリ）に設けられた複数の記憶領域の一つを採用することができる。
【００３７】
通信異常メモリ６５は、上述のキーワード「ＡＡ」を格納するものである。つまり、第２マイコン４０は、通信異常メモリ３３にキーワード「ＡＡ」を格納するとともに、このキーワード「ＡＡ」を第１マイコン１０に送信する。通信異常メモリ６５は、例えば、メモリ空間６０（メモリ）に設けられた複数の記憶領域の一つを採用することができる。
【００３８】
ズレ発生メモリ６６は、上述のズレ発生を示す値（ズレが発生したこと）を格納するものである。ズレ発生メモリ６６は、例えば、メモリ空間３０（メモリ）に設けられた複数の記憶領域の一つを採用することができる。
【００３９】
この第１マイコン１０と第２マイコン４０とは、通信（データの送受信）が可能に構成されている。本実施形態においては、一例として、第１マイコン１０と第２マイコン４０との通信にクランク角度同期ＤＭＡ通信を採用している。このクランク角度同期ＤＭＡ通信は、クランク角に同期したＤＭＡ通信であり、例えば３０°ＣＡ毎や１８０°ＣＡ毎の角度タイミングで行なわれるものである。つまり、第１マイコン１０は、クランクカウンタ３１のカウント値に同期して通信を行なう（第１通信手段）。同様に、第２マイコン４０は、クランクカウンタ６１のカウント値に同期して通信を行う（第２通信手段）。
【００４０】
上述のように点火時期制御や燃料噴射制御は、クランク角に同期して行っている。つまり、噴射タイミングや点火タイミングは、クランク角に同期している。よって、このように、第１マイコン１０と第２マイコン４０がクランク角に同期して通信することによって、点火時期制御や燃料噴射制御に応じた補正を行うことが可能となる。
【００４１】
図１における符号１０１は、第１マイコン１０がマスタとなるクランク角度同期ＤＭＡ通信（第１通信とも称する）である。第１マイコン１０は、クランクカウンタ３１のカウント値をクランク角度同期ＤＭＡ通信１０１で第２マイコン４０へ送信する（第１通信手段）。第１マイコン１０は、予め設定された３６０°ＣＡ間隔よりも短い間隔（ここでは３０°ＣＡ毎）に、クランクカウンタ３１のカウント値を送信する。このように、第１マイコン１０がクランクカウンタ３１のカウント値を、第２マイコン４０に対して送信するのは、カウントズレが発生しているか否かを監視するためである。これは、本発明の技術的特徴の一部である。
【００４２】
また、図１における符号１０２は、第２マイコン４０がマスタとなるクランク角度同期ＤＭＡ通信（第２通信とも称する）である。第２マイコン４０は、自身が算出した筒内状態量や異常判定結果などをクランク角度同期ＤＭＡ通信１０２で第１マイコン１０へ送信する。カウントズレが発生していた場合には、第２マイコン４０がクランクカウンタ６１のカウント値を、第１マイコン１０に対して送信する。なお、ＤＭＡはDirect Memory Accessである。
【００４３】
なお、本実施形態においては、第１マイコン１０と第２マイコン４０との通信の一例として、ＤＭＡ通信を採用している。しかしながら、本発明はこれに限定されるものではない。第１マイコン１０と第２マイコン４０との通信は、クランク角に同期したシリアル通信であれば採用することができる。例えば、ＥＣＵ１００の内部ＣＡＮ通信やＵＡＲＴ通信を採用することができる。なお、ＣＡＮはController Area Networkである。一方、ＵＡＲＴは、Universal Asynchronous Receiver Transmitterである。
【００４４】
このように、ＥＣＵ１００は、第１マイコン１０と第２マイコン４０とが通信するものであり、自身で行う処理（搭載された機能）が第１マイコン１０と第２マイコン４０とに分散されている。言い換えると、ＥＣＵ１００は、第１マイコン１０と第２マイコン４０とが通信することで、ＣＰＳ制御を第１マイコン１０と第２マイコン４０とで協調制御するものである。つまり、ＥＣＵ１００は、ＣＰＳ制御を２マイコン１０，４０で協調制御させる為に、第１マイコン１０と第２マイコン４０とが通信するとともに、第２マイコン４０がＣＰＳ信号の取得から筒内状態量の算出までを行い、第１マイコン１０が点火制御、噴射制御などを行う。また、第１マイコン１０と第２マイコン４０とは、ＣＰＳ信号に基づいて、内燃機関を協調制御すると言い換えることができる。
【００４５】
なお、上述のように、第２マイコン４０は、主に、ＣＰＳ信号の取得から筒内状態量の算出までを行う。一方、上述のように、第１マイコン１０は、主に点火制御、噴射制御などを行う。言い換えると、第１マイコン１０は、ＥＣＵ１００の主機能が設けられている。よって、第１マイコン１０の処理負荷は、第２マイコン４０の処理負荷よりも高くなる。このように、第２マイコン４０は、第１マイコン１０よりも協調制御（ＣＰＳ制御）における処理負荷が軽くなるように設定されている。よって、カウントズレの監視は、協調制御における処理負荷が軽い第２マイコン４０に行わせると好ましい。このようにすることによって、第１マイコン１０の処理負荷と、第２マイコン４０の処理負荷とを近づけることができる（均等化することができる）。
【００４６】
ここで、図２を用いて、ＥＣＵ１００におけるＣＰＳ制御に関して説明する。なお、図２における「BXX（XXは数字）」は、BeforeTDC  XX°CA=ＴＤＣタイミングの前XX°を示すものである。よって、例えば「B60」は、BeforeTDC  60°CA=ＴＤＣタイミングの前６０°を示すものである。一方、「AXX」は、AfterTDC  XX°CA  =ＴＤＣタイミングの後XX°を示すものである。よって、例えば「A60」は、AfterTDC  60°CA  =ＴＤＣタイミングの後６０°を示すものである。
【００４７】
まず、第２マイコン４０は、気筒毎の計測角度区間（例えばB60〜A60）でＣＰＳ信号を取得する（第１気筒の場合Ｓ２０１)。また、第２マイコン４０は、ある角度タイミング（例えばA120）までに筒内状態量を算出する。そして、第２マイコン４０は、算出した筒内状態量を第２通信１０２で第１マイコン１０へ送信する（第１気筒の場合はＳ２０２）。
【００４８】
一方、第１マイコン１０は、受信した気筒毎の筒内状態量を元に、各制御に合わせたタイミングで失火検出を行うと共に、噴射補正演算及び点火補正演算（噴射量、噴射時期、点火時期などの補正量の算出）を開始する（第１気筒の場合はＳ２０３)。
【００４９】
第１マイコン１０と第２マイコン４０は、夫々のクランクカウンタ３１，６１のカウント値に応じて各種処理を行うものである。しかしながら、第１マイコン１０のカウント値と第２マイコン４０のカウント値がずれることもありうる。
【００５０】
このようにズレが発生した場合、第２マイコン４０は、意図しない角度区間や別気筒のＣＰＳ信号を取得し筒内状態量の算出を行う可能性がある。一方、第１マイコン１０は、ズレが発生した場合、意図しないタイミングに従って噴射制御、点火制御、及び失火検出を実施してしまう可能性がある。この結果、ＥＣＵ１００は、正常にＣＰＳ制御を行うことができない可能性がある。
【００５１】
そこで、ＥＣＵ１００は、各マイコン１０，４０が保持するカウント値を監視し、補正を行うものである。ここで、図３を用いて、ＥＣＵ１００における、カウント値の監視処理，補正処理を含む全体の処理動作の概略を説明する。
【００５２】
上述のように、第１マイコン１０と第２マイコン４０は、協調制御する。第２マイコン４０は、クランク角度同期ＤＭＡ受信トリガ処理で、受信値を受信値メモリに格納するクランクカウンタ受信値メモリ格納処理Ｓ３０１を実行する。また、第２マイコン４０は、３０°ＣＡ毎にメモリ配列への格納処理Ｓ３０２、クランクカウンタの更新処理Ｓ３０３、及びその他の３０°ＣＡ処理Ｓ３０６を実施する。
【００５３】
更に、第２マイコン４０は、ＴＤＣタイミングでは、メモリ配列比較処理Ｓ３０４を実施する。また、第２マイコン４０は、メモリ配列比較処理Ｓ３０４によって、ズレ発生を検出した際には、第２通信１０２によって第１マイコン１０にクランクカウンタ３１の補正値を送信するクランクカウンタＤＭＡ送信処理Ｓ３０５を実行する。
【００５４】
一方、第１マイコン１０は、３０°ＣＡ毎にクランクカウンタ更新処理Ｓ３０９、クランクカウンタ３１の値を第２マイコン４０に送信するクランクカウンタＤＭＡ送信処理Ｓ３１０、及びその他の３０°ＣＡ処理Ｓ３１１を実施する。
【００５５】
更に、第１マイコン１０は、第２マイコン４０がズレ発生を検出した場合には、補正処理Ｓ３０８を実施する。また、第１マイコン１０は、第２マイコン４０がズレ発生を検出した場合には、クランク角度同期ＤＭＡ受信トリガ処理で、補正値を補正値メモリに格納するクランクカウンタ補正値メモリ格納処理Ｓ３０７を実行する。この図３に示す処理の繰り返しによって、第１マイコン１０及び第２マイコン４０のカウント値を監視し、カウントズレが発生した場合はカウントズレの補正（修正）を行うフローとなる。
【００５６】
ここで、図４〜図９を用いて、第１マイコン１０及び第２マイコン４０における各処理の詳細な説明を行う。まず、図４〜図７を用いて、第２マイコン４０の処理動作に関して説明する。
【００５７】
第２マイコン４０は、図５のフローチャートで示すように、クランク角度同期ＤＭＡ受信トリガ処理を実行する。ステップＳ１０では、受信した値が正常であるか否かを判定する。第２マイコン４０は、第１マイコン１０からの第１通信受信時に、受信した値（カウント値）が正常な値であるか否かを判定する。そして、正常であると判定した場合はステップＳ１１へ進み、正常でないと判定した場合はステップＳ１２へ進む。なお、この判定は、例えば、ＤＭＡ通信異常や通信データの合計値によって判定することができる。
【００５８】
ステップＳ１１では、受信した値を受信値メモリ６２に格納する。一方、ステップＳ１２では、受信異常のキーワードを受信値メモリ６２に格納する。なお、受信異常のキーワードとしては、一例として、本実施形態で採用している「ＥＥ」などの特異な値を採用することができる。しかしながら、本発明はこれに限定されるものではない。
【００５９】
例えば、図４のタイミングｔ１に示すように、第１マイコン１０は、カウント値（ここでは「２」）を第１通信１０１で第２マイコン４０に送信する。そして、図４のタイミングｔ２に示すように、第２マイコン４０は、受信した値が正常であると判定した場合は、受信した値（ここでは「２」）を受信値メモリ６２に格納する。なお、ステップＳ１１，１２は、上述のクランクカウンタ受信値メモリ格納処理Ｓ３０１に相当するものである。
【００６０】
このように、「ＥＥ」を格納することによって、受信したクランクカウンタの値と通信異常とを差別化することができる。よって、後ほど説明するメモリ配列比較処理において、正常な値を使用することができる。
【００６１】
また、第２マイコン４０は、図６のフローチャートで示すように、３０°ＣＡ処理を実行する。この３０°ＣＡ処理は、クランク角が３０°ＣＡ増大する毎に実行する処理である。つまり、第２マイコン４０は、クランクセンサ入力信号が入力されるたびに、３０°ＣＡ処理を実行する。
【００６２】
ステップＳ２０では、第１メモリ配列６３の第２要素６３２に第１要素６３１の値、第３要素６３３に第２要素６３２の値を格納する。つまり、第１メモリ配列６３の第２要素６３２、第３要素６３３を、夫々第１要素６３１の値、第２要素６３２の値で更新する。
【００６３】
ステップＳ２１では、第２メモリ配列６４の第２要素６４２に第１要素６４１の値、第３要素６４３に第２要素６４２の値を格納する。つまり、第２メモリ配列６４の第２要素６４２、第３要素６４３を、夫々第１要素６４１の値、第２要素６４２の値で更新する。
【００６４】
ステップＳ２２では、受信値メモリ６２の値を第１メモリ配列６３の第１要素６３１に格納する。つまり、第１メモリ配列６３の第１要素６３１を、受信値メモリ６２の値で更新する。
【００６５】
ステップＳ２３では、クランクカウンタ６１のカウント値を第２メモリ配列６４の第１要素６４１に格納する。つまり、第２メモリ配列６４の第１要素６４１を、クランクカウンタ６１のカウント値で更新する。このステップＳ２０〜Ｓ２３は、上述の格納処理Ｓ３０２に相当するものである。
【００６６】
ステップＳ２４では、受信値メモリ６２に初期値「ＦＦ」を格納する。つまり、受信値メモリ６２の値をメモリ配列へ格納した後は、受信値メモリ６２を初期値「ＦＦ」で初期化しておく。なお、初期値としては、一例として、本実施形態で採用している「ＦＦ」などの値を採用することができる。しかしながら、本発明はこれに限定されるものではない。このようにすることで、受信値メモリ６２の初期値が更新されていないことで、第１マイコン１０からの受信なしや、受信遅れを検出することも可能である。
【００６７】
例えば、図４に示すように、受信値メモリ６２に「２」を格納した直後の３０°ＣＡタイミングであるタイミングｔ３（クランクカウンタ６１のカウント値「３」）で、ステップＳ２０〜Ｓ２４の処理を行う。
【００６８】
具体的には、第１メモリ配列６３に関しては、クランクカウンタ６１のカウント値「３」のときの第２要素６３２に、クランクカウンタ６１のカウント値「２」のときの第１要素６３１の値「１」を格納する（Ｓ２０）。また、クランクカウンタ６１のカウント値「３」のときの第３要素６３３に、クランクカウンタ６１のカウント値「２」のときの第２要素６３２の値「０」を格納する（Ｓ２０）。さらに、クランクカウンタ６１のカウント値「３」のときの第１要素６３１に、受信値メモリ６２の値「２」を格納する（Ｓ２２）。なお、受信値メモリ６２の値を使用した後は、受信値メモリ６２に初期値「ＦＦ」を格納する（Ｓ２４）。
【００６９】
同様に、第２メモリ配列６４に関して、クランクカウンタ６１のカウント値「３」のときの第２要素６４２に、クランクカウンタ６１のカウント値「２」のときの第１要素６４１の値「１」を格納する（Ｓ２１）。また、クランクカウンタ６１のカウント値「３」のときの第３要素６４３に、クランクカウンタ６１のカウント値「２」のときの第２要素６４２の値「０」を格納する（Ｓ２１）。更に、クランクカウンタ６１のカウント値「３」のときの第１要素６４１に、クランクカウンタ６１の前回のカウント値「２」を格納する（Ｓ２３）。
【００７０】
ステップＳ２５では、通常のクランクカウンタ６１の更新処理を行う。ここでは、クランクカウンタ６１のカウント値をインクリメント（カウントアップ）する。このように、ステップＳ２０〜Ｓ２４は、クランクカウンタ６１の更新処理実施前に行われる。このステップＳ２５は、上述のクランクカウンタ更新処理Ｓ３０３に相当するものである。例えば、図４に示すように、クランクカウンタ６１のカウント値が「２」である場合、直後の３０°ＣＡタイミングでは、クランクカウンタ３１のカウント値を「３」にインクリメントする。
【００７１】
ステップＳ２６では、ＴＤＣタイミングであるか否かを判定する。そして、ＴＤＣタイミングであると判定した場合はステップＳ２７へ進み、ＴＤＣタイミングではないと判定した場合はステップＳ２８へ進む。
【００７２】
ステップＳ２７では、メモリ配列比較処理を行う。このメモリ配列比較処理は、格納処理後に行うものであり、第１メモリ配列６３と第２メモリ配列６４の各要素の比較を行い、クランクカウンタ３１のカウント値と、クランクカウンタ６１のカウント値とにズレが発生しているかをチェック（監視）する処理である。例えば、図４においては、クランクカウンタ６１のカウント値「６」のときがＴＤＣタイミングである。よって、ここでメモリ配列比較処理を行う。ステップＳ２７は、上述のメモリ配列比較処理Ｓ３０４に相当するものである。このメモリ配列比較処理に関しては、後ほど詳しく説明する。なお、ステップＳ２８では、その他の３０°ＣＡ処理を行う（上述のＳ３０６に相当する）。
【００７３】
このように、本実施形態では、本実施携帯においては、第２マイコン４０は、ＴＤＣ毎にメモリ配列比較処理を行う例を採用している。しかしながら、このメモリ配列比較処理は、３０°ＣＡ毎に行うようにしてもよい。
【００７４】
なお、後ほど説明するが、カウントズレが発生していた場合、このカウントズレを補正する。また、このカウントズレは、各気筒のＣＰＳ信号の取得開始時期までに補正できればよい。よって、メモリ配列比較処理は、本実施形態で採用しているように、ＴＤＣ毎に実施すれば十分である。更に、ＴＤＣ毎にメモリ配列比較処理を行うことによって、３０°ＣＡ毎にメモリ配列比較処理を行うよりも処理負荷を軽減することができ好適である。
【００７５】
また、図２で示したように、第１マイコン１０としては、各気筒共通でクランクカウンタ３１のカウント値を使用している。各気筒は、前回のＴＤＣタイミング前後の一定角度区間におけるＣＰＳ信号を使用しフィードバックするが、その間にも別気筒のＴＤＣタイミングが存在している（図２のＳ２０４）。よって、第１マイコン１０において対象気筒の処理開始前にズレ補正が可能である。なお、気筒数が増えた場合には、３６０°ＣＡ内のＴＤＣタイミングも比例して増える。このため、気筒数が増えても影響範囲を抑えることが可能となる。
【００７６】
また、メモリ配列比較処理は、第２マイコン４０での各気筒のＣＰＳ出力電圧値の取得開始時期までに補正できるマージンを持ったタイミングで実行すれば、第１マイコン１０での処理で使用される制御への影響は１気筒分に抑えることができる。
【００７７】
さらに、クランク角に同期してメモリ配列比較処理を行うことにより、噴射、点火回数に応じた補正を行うことが可能となる。つまり、メモリ配列比較処理間どうしで噴射、点火回数がバラつくことを抑制することができる。よって、エンジン回転数が高い場合であっても影響範囲が広がるのを抑制することができる。しかしながら、時間同期でメモリ配列比較処理を行うようにしてもよい。
【００７８】
ここで、図７のフローチャートを用いて、メモリ配列比較処理に関して説明する。まず、ステップＳ３０では、第１メモリ配列６３の第１要素６３１〜第３要素６３３に「ＥＥ」が２つ以上あるか否かを判定する。このように、「ＥＥ」が２つ以上あるか否かを判定するのは、通信異常が多発したか否かを判定するためである。なお、通信異常が多発した場合は、第１マイコン１０のクランクカウンタ３１のカウント値を監視できない。よって、通信異常が多発した場合は、カウントズレの発生をチェックすることができない。従って、ステップＳ３０は、カウントズレの発生のチェックを行うことが可能であるか否かの判定と言い換えることができる。
【００７９】
そして、ステップＳ３０において、「ＥＥ」が２つ以上あると判定した場合は通信異常が多発しているとみなしてステップＳ３６へ進み、「ＥＥ」が２つ以上あると判定しなかった場合は通信異常が多発していないとみなしてステップＳ３１へ進む。
【００８０】
ステップＳ３６では、異常通知のキーワード「ＡＡ」を第１マイコン１０に送信する。つまり、第２マイコン４０は、「ＡＡ」を第２通信１０２で第１マイコン１０に送信する。
【００８１】
また、ステップＳ３７では、通信異常メモリ６５に「ＡＡ」を格納する。なお、異常通知のキーワード（ここでは「ＡＡ」）は、第２マイコン４０でのメモリ配列比較処理が実施不可である異常発生を示す値とも言い換えることができる。
【００８２】
このように、通信異常が多発した場合は、異常を第１マイコン１０に知らせると共に、自身でも記憶しておく。言い換えると、通信異常が多発した場合は、カウントズレが発生しているかを検出できないことを第１マイコン１０に知らせると共に、自身でも記憶しておく。
【００８３】
パワトレＥＣＵでは、上記のような異常の場合、異常発生を記憶し、システムの故障判定に用いることがあるので異常発生を記憶するようにしてもよい。また、「ＡＡ」を記憶することで、ＣＰＳ制御の有無切り替えを行い、間違って異常値を使用してしまうことが回避可能となる。つまり、「ＡＡ」が記憶されていない場合はＣＰＳ制御を行うようにし、「ＡＡ」が記憶されている場合はＣＰＳ制御を行わないようにしてもよい。これによって、間違って異常値を使用してしまうことが回避可能となる。
【００８４】
一方、ステップＳ３１では、第１メモリ配列６３の第１要素６３１〜第３要素６３３に「ＦＦ」があるか否かを判定する。「ＦＦ」があると判定しなかった場合はステップＳ３２へ進み、「ＦＦ」があると判定した場合はステップＳ３４へ進む。
【００８５】
ステップＳ３２では、第１メモリ配列６３と第２メモリ配列６４の各要素を比較する。このステップＳ３２での処理は、カウントズレが発生しているか否かを確認するために行う。具体的には、第１メモリ配列６３の第１要素６３１と第２メモリ配列６４の第１要素６４１とを比較する。また、第１メモリ配列６３の第２要素６３２と第２メモリ配列６４の第２要素６４２とを比較する。そして、第１メモリ配列６３の第３要素６３３と第２メモリ配列６４の第３要素６４３とを比較する。
【００８６】
ステップＳ３３では、第１メモリ配列６３と第２メモリ配列６４の「ＥＥ」を除く全ての要素が一致しているかを判定する。そして、一致していないと判定した場合は、カウントズレが発生しているとみなしてステップＳ３４へ進む。一方、一致していると判定した場合は、ズレは発生していないとみなして図７のフローチャートで示す処理を終了する。
【００８７】
例えば、図４のタイミングｔ４に示すように、第１要素６３１と第１要素６４１には「５」、第２要素６３２と第２要素６４２には「４」、第３要素６３３と第３要素６４３には「３」が格納されている。よって、この例の場合は、一致していると判定されることになる。なお、一致しない場合の例に関しては、後ほど説明する。
【００８８】
ステップＳ３４では、第２マイコン４０は、クランクカウンタ６１のカウント値を第２通信１０２によって第１マイコン１０に送信する。このステップＳ３４での処理は、ステップＳ３１でＹＥＳと判定された場合、又は、ステップＳ３３でＮＯと判定された場合に実行される。
【００８９】
ステップＳ３１でＹＥＳと判定された場合（つまり、第１要素６３１〜第３要素６３３に「ＦＦ」が存在する場合）、第１マイコン１０側の３０°ＣＡ処理抜けによってクランクカウンタ３１のカウントアップが実施されていないことになる。又は、クランクカウンタ６１が、第２マイコン４０側のノイズによってカウントアップを実施してしまったことになる。
【００９０】
一方、ステップＳ３３でＮＯと判定された場合（つまり、一致していなかった場合）、カウントズレが発生していることになる。よって、ステップＳ３４では、第１マイコン１０と第２マイコン４０とのカウント値を一致させるために、クランクカウンタ６１のカウント値を補正値として第１マイコン１０に送信する（第２通信手段、送信手段）。
【００９１】
なお、ＣＰＳ制御においては、第２マイコン４０で算出した値を使用して第１マイコン１０は制御を行う。このことから、本実施形態においては、クランクカウンタ３１のカウント値よりも、クランクカウンタ６１のカウント値の方がより信用できる値として扱う。よって、カウントズレが発生した場合は、クランクカウンタ６１のカウント値で、クランクカウンタ３１のカウント値を補正する。
【００９２】
ステップＳ３５では、ズレ発生を記憶する。つまり、第２マイコン４０は、カウントズレが発生した場合、ズレ発生を示す値をズレ発生メモリ６６に記憶する（第２ズレ記憶手段）。このようにズレ発生を示す値をズレ発生メモリ６６に記憶することによって、制御によってはズレ発生が記憶されていた場合に、前回の制御値を用いるなど影響範囲を限定することができる。
【００９３】
なお、「ＡＡ」やズレ発生を示す値は、解析用データに使用することや、異常発生状況に応じて制御を切り替えるために用いることを想定して記憶することもある。しかしながら、「ＡＡ」を記憶しておかなくても本願発明の目的は達成できる。同様に、ズレ発生を示す値を記憶しておかなくても本願発明の目的は達成できる。
【００９４】
なお、ステップＳ３０〜Ｓ３３は、上述のメモリ配列比較処理Ｓ３０４に相当するものである。また、ステップＳ３４は、上述のクランクカウンタＤＭＡ送信処理Ｓ３０５に相当するものである。
【００９５】
このように、第２マイコン４０は、第１メモリ配列６３に記憶されたカウント値と、第２メモリ配列６４に記憶されたカウント値とを比較する（監視手段）。クランク角信号は、各マイコン１０，４０に同時に入力される。しかしながら、第１マイコン１０と第２マイコン４０では、処理タイミングに時間差が生じる。そこで、カウント値をメモリ空間に一次記憶しておき、次回（以降）タイミングにて使用することで、通信完了までの無駄な待ち時間を作らないようにすることができる。
【００９６】
また、本実施形態では、一例として、通信異常などによって比較ができない状態を回避するために、クランクカウンタ３１，６１のカウント値を記憶するメモリ領域をメモリ配列（過去、数回分のカウント値を記憶できる形式）としている。
【００９７】
ここで、図８，図９を用いて、第１マイコン１０の処理動作に関して説明する。
【００９８】
第１マイコン１０は、図８のフローチャートで示すように、クランク角度同期ＤＭＡ受信トリガ処理を実行する。ステップＳ４０では、受信した値が正常であるか否かを判定する。第１マイコン１０は、第２マイコン４０からの第２通信受信時に、受信した値（カウント値）が正常な値であるか否かを判定する。そして、正常であると判定した場合はステップＳ４１へ進み、正常でないと判定した場合は図８のフローチャートで示す処理を終了する。なお、この判定は、例えば、ＤＭＡ通信異常や通信データの合計値によって判定することができる。
【００９９】
ステップＳ４１では、「ＡＡ」を受信したか否かを判定する。そして、「ＡＡ」を受信したと判定した場合はステップＳ４４へ進み、「ＡＡ」を受信したと判定してない場合はステップＳ４２へ進む。
【０１００】
ステップＳ４４では、異常を記憶する。つまり、通信異常メモリ３３に「ＡＡ」を記憶する。上述のように「ＡＡ」は、第２マイコン４０でのメモリ配列比較処理が実施不可である異常発生を示すものである。よって、第１マイコン１０は、第２マイコン４０から「ＡＡ」を受信した場合には、自身においても異常発生を記憶しておく。なお、この処理は、上述のステップＳ３７と同様であるため詳しい説明は省略する。
【０１０１】
一方、ステップＳ４２では、受信した値を補正値メモリ３２に格納する。上述のように、第２マイコン４０は、「ＡＡ」又はクランクカウンタ６１のカウント値（補正値）を第１マイコン１０に対して送信する（送信手段）。よって、第１マイコン１０は、第２マイコン４０から「ＡＡ」以外を受信した場合は、カウントズレが発生したことによって第２マイコン４０から送信されたクランクカウンタ６１のカウント値を受信していることになる。このように、第１マイコン１０は、第２マイコン４０から送信された補正値を受信する（第１通信手段、受信手段）。よって、第１マイコン１０は、受信した値を補正値として補正値メモリ３２に格納する。なお、ステップＳ４２は、上述のクランクカウンタ補正値メモリ格納処理Ｓ３０７に相当するものである。
【０１０２】
ステップＳ４３では、ズレ発生を記憶する（第１ズレ記憶手段）。つまり、第１マイコン１０は、カウントズレが発生した場合、ズレ発生を示す値をズレ発生メモリ３４に記憶する（第１ズレ記憶手段）。なお、カウンタズレを補正する状況においても、クランクカウンタ３１のカウント値は、他制御にも使用される重要な値であることがある。しかしながら、ステップＳ４２の処理を行うことによって、クランクカウンタ３１のカウント値が急変（例えば「１」→「３」になる）することになる。そこで、このように、ズレ発生を示す値をズレ発生メモリ３４に記憶することによって制御によってはズレ発生が記憶されていた場合に、前回の制御値を用いるなど影響範囲を限定することができる。
【０１０３】
なお、「ＡＡ」やズレ発生を示す値は、解析用データに使用することや、異常発生状況に応じて制御を切り替えるために用いることを想定して記憶する。しかしながら、「ＡＡ」を記憶しておかなくても本願発明の目的は達成できる。同様に、ズレ発生を示す値を記憶しておかなくても本願発明の目的は達成できる。
【０１０４】
ところで、後ほど説明するように、第１マイコン１０は、第２マイコン４０から受信した補正値で、クランクカウンタ３１のカウント値を補正するものである。ところが、本実施形態では、ステップＳ４２に示すように、第２マイコン４０から受信した補正値ですぐにクランクカウンタ３１のカウント値を変更せずに、一旦補正値メモリ３２に格納している。これは、クランクカウンタ３１は噴射制御や点火制御以外の他の制御でも参照されるため、補正値を受信したタイミングでクランクカウンタ３１のカウント値を変更した場合、制御間で同時性を保つ必要があるにも関わらず変更前後の異なるクランクカウンタ３１の値を参照してしまう可能性や、補正値を受信するまでの待ち時間によってクランクカウンタ３１の更新が遅れる可能性があるので、直後の３０°ＣＡ処理におけるクランクカウンタ更新処理Ｓ２０９の実施前に補正処理を行うためである。
【０１０５】
また、第１マイコン１０は、図９のフローチャートで示すように、３０°ＣＡ処理を実行する。この３０°ＣＡ処理は、クランク角が３０°ＣＡ増大する毎に実行する処理である。つまり、第１マイコン１０は、クランクセンサ入力信号が入力されるたびに、３０°ＣＡ処理を実行する。
【０１０６】
ステップＳ５０では、補正値メモリ３２に格納されている値が「ＦＦ」であるか否かを判定する。つまり、補正値メモリ３２が「ＦＦ」から更新されているか否かを判定する。そして、「ＦＦ」であると判定した場合は更新されていないとみなしてステップＳ５３へ進み、「ＦＦ」でないと判定した場合は更新されているとみなしてステップＳ５１へ進む。このようにすることで、補正値メモリ３２の初期値が更新されていることで、第２マイコン４０から補正値を受信したと検出することも可能である。
【０１０７】
補正値メモリ３２に格納されている値が「ＦＦ」でない場合、上述のように第２マイコン４０から送信された補正値が格納されていることになる。よって、ステップＳ５１では、クランクカウンタ３１のカウント値を補正値メモリ３２に格納されている値である補正値（受信した補正値）に変更する（補正手段）。つまり、第１マイコン１０は、補正値メモリ３２に格納されている値が「ＦＦ」ではなく補正値であった場合、カウントズレが発生したとみなして、クランクカウンタ３１の値を補正値に補正（修正）する。なお、このステップＳ５１は、上述の補正処理Ｓ３０８に相当するものである。
【０１０８】
このようにすることによって、カウントズレが発生していた場合であっても、クランクカウンタ３１のカウント値と、クランクカウンタ６１のカウント値とを一致させることができる。
【０１０９】
ステップＳ５２では、クランクカウンタ３１の値を変更後、補正値メモリを「ＦＦ」を格納することで初期化する。
【０１１０】
ステップＳ５３では、通常のクランクカウンタ３１の更新処理を行う。ここでは、クランクカウンタ３１のカウント値をインクリメント（カウントアップ）する。このステップＳ５３は、上述のクランクカウンタ更新処理Ｓ３０９に相当するものである。例えば、図４に示すように、クランクカウンタ３１のカウント値が「２」である場合、直後の３０°ＣＡタイミングでは、クランクカウンタ３１のカウント値を「３」にインクリメントする。
【０１１１】
このようにすることによって、カウントズレが発生していた場合であっても、第１マイコン１０（クランクカウンタ３１）と第２マイコン４０（クランクカウンタ６１）のカウント値を一致させることができる。また、このように補正することによって、第１マイコン１０において、カウントズレによる異常燃焼など意図せぬ問題を解消できる。なお、カウントズレが発生した場合、一定期間（３６０°ＣＡ期間）、ＣＰＳ制御をやめることも考えられる。
【０１１２】
その後、ステップＳ５４では、クランクカウンタ３１のカウント値を第１通信１０１で第２マイコン４０に送信する。このように、クランクカウンタ３１のカウント値を第２マイコン４０に送信するのは、クランクカウンタ３１のカウント値を第２マイコン４０で監視するためである。このステップＳ５４は、上述のクランクカウンタＤＭＡ送信処理Ｓ３１０に相当するものである。なお、ステップＳ５５では、その他の３０°ＣＡ処理を行う（上述のＳ３１１に相当する）。
【０１１３】
ここで、上述のようにフローチャートを用いて説明したカウント値の監視、カウントズレが発生した場合の処理に関して、図１０〜図１２を用いて説明する。
【０１１４】
上述のように、第１マイコン１０は、ＣＰＳ制御における主機能を備えている。よって、第１マイコン１０は、第２マイコン４０よりも処理負荷が高い傾向がある。よって、第１マイコン１０は、処理抜けや処理遅れの発生によりクランクカウンタ３１が意図したタイミングでカウントアップしないことがある。
【０１１５】
図１０は、このように第１マイコン１０での処理抜けによるズレ発生時の図面である。図１０におけるタイミングｔ８で処理抜けが発生した場合、クランクカウンタ３１は、カウントアップすべきタイミングであるにもかかわらずカウントアップしない。よって、クランクカウンタ６１のカウント値は「２」から「３」にカウントアップされているのに対して、クランクカウンタ３１のカウント値は「２」のままである。このようにして、カウントズレが発生する。
【０１１６】
なお、タイミングｔ８で処理抜けが発生した場合、図１０におけるクランクカウンタ６１のカウント値が「３」になる３０°ＣＡ処理では、受信値メモリ６２の値が「２」→「ＦＦ」に更新された後、「３」に更新されること無く「ＦＦ」のままになる。これは、第２マイコン４０は、図５に示すように、受信した値を受信値メモリ６２に格納すると共に、図６に示すように、第１メモリ配列６３と第２メモリ配列６４の各要素を更新した後に、受信値メモリ６２を初期化するものである。そして、タイミングｔ８で処理抜けが発生すると、第１マイコン１０は、クランクカウンタ３１のカウントアップ、第２マイコン４０へのカウント値の送信を行わないためである。
【０１１７】
これに伴って、図１０におけるクランクカウンタ６１のカウント値が「４」になる３０°ＣＡ処理では、第１要素６４１に「３」、第２要素６４２に「２」、第３要素６４３に「１」が格納される。しかしながら、第１メモリ配列６３では、第１要素６３１に「ＦＦ」、第２要素６３２に「２」、第３要素６３３に「１」が格納される。
【０１１８】
同様に、図１０におけるクランクカウンタ６１のカウント値が「５」になる３０°ＣＡ処理では、第１要素６４１に「４」、第２要素６４２に「３」、第３要素６４３に「２」が格納される。しかしながら、第１メモリ配列６３では、第１要素６３１に「３」、第２要素６３２に「ＦＦ」、第３要素６３３に「２」が格納される。この図１０からも明らかなように、処理抜けが発生すると、第１メモリ配列６３の各要素と、第２メモリ配列６４の各要素にズレが生じることになる。
【０１１９】
その後、第２マイコン４０は、ＴＤＣタイミングにおいて、図７のフローチャートで説明したメモリ配列比較処理を実行する。図１０におけるＴＤＣタイミングでは、第１メモリ配列６３の第３要素６３３に「ＦＦ」が格納されている。よって、図７のＳ３１でＹＥＳ判定がなされることになる。つまり、第２マイコン４０は、メモリ配列比較処理によって、カウントズレを検出することができる。
【０１２０】
このように、第２マイコン４０は、カウントズレを検出すると、タイミングｔ５で示すように、クランクカウンタ６１のカウント値（補正値）を第２通信１０２で第１マイコン１０に送信する（図７のＳ３４）。一方、第１マイコン１０は、第２マイコン４０からカウント値を受信すると、タイミングｔ６で示すように補正値メモリ３２に第２マイコン４０から受信したカウント値を格納する。
【０１２１】
そして、第１マイコン１０は、直後の３０°ＣＡ処理にて、図９に示す処理を実行する。つまり、補正処理Ｓ３０８を行い、その後に通常のクランクカウンタ３１の更新処理Ｓ３０９を行う。これによって、第１マイコン１０のカウント値と第２マイコン４０のカウント値とを一致させることができる。
【０１２２】
なお、このように、ＴＤＣタイミングの直後の３０°ＣＡタイミングにて補正するため、次の気筒の噴射制御や点火制御、失火検出の開始前に補正完了できる。従って、カウントズレによる意図せぬ問題の影響範囲を抑えることが可能である。
【０１２３】
また、ＥＣＵ１００は、ノイズを受けやすい環境に搭載されることもある。クランクカウンタ３１，６１は、ノイズを受けると意図しないタイミングでカウントアップしてしまうこともある。
【０１２４】
図１１は、クランクカウンタ３１が意図しないタイミングでカウントアップした時の図面である。図１１におけるタイミングｔ９でノイズを受けた場合、クランクカウンタ３１は、カウントアップすべきタイミングでないにもかかわらずカウントアップする。より詳細には、第１マイコン１０は、ノイズ信号が入力された場合、このノイズ信号をクランクセンサ２２０のクランクセンサ入力信号と誤検出して３０°ＣＡ処理をスタートする。これによって、クランクカウンタ３１は、クランクセンサ入力信号が入力されていないのにカウントアップすることになる。よって、図１１に示すように、クランクカウンタ６１のカウント値は「３」のままであるのに対して、クランクカウンタ３１のカウント値は「３」から「４」にカウントアップしている。このようにして、カウントズレが発生する。
【０１２５】
なお、タイミングｔ９でクランクカウンタ３１が意図しないタイミングでカウントアップをした場合、図１１におけるクランクカウンタ６１のカウント値が「３」になる３０°ＣＡ処理では、受信値メモリ６２の値が「２」→「ＦＦ」→「３」に更新された後、更に「４」に更新されることになる。これは、第２マイコン４０は、図５に示すように、受信した値を受信値メモリ６２に格納するものである。そして、第１マイコン１０は、図９に示すように、３０°ＣＡ処理でクランクカウンタ３１がカウントアップし、カウントアップしたカウント値を第２マイコン４０に送信するためである。
【０１２６】
これに伴って、図１１におけるクランクカウンタ６１のカウント値が「４」になる３０°ＣＡ処理では、第１要素６４１に「３」、第２要素６４２に「２」、第３要素６４３に「１」が格納される。しかしながら、第１メモリ配列６３では、第１要素６３１に「４」、第２要素６３２に「２」、第３要素６３３に「１」が格納される。
【０１２７】
同様に、図１１におけるクランクカウンタ６１のカウント値が「５」になる３０°ＣＡ処理では、第１要素６４１に「４」、第２要素６４２に「３」、第３要素６４３に「２」が格納される。しかしながら、第１メモリ配列６３では、第１要素６３１に「５」、第２要素６３２に「４」、第３要素６３３に「２」が格納される。この図１１からも明らかなように、意図しないタイミングでカウントアップをした場合、第１メモリ配列６３の各要素と、第２メモリ配列６４の各要素にズレが生じることになる。
【０１２８】
その後、第２マイコン４０は、ＴＤＣタイミングにおいて、図７のフローチャートで説明したメモリ配列比較処理を実行する。図１１におけるＴＤＣタイミングでは、第１要素６４１に「５」、第２要素６４２に「４」、第３要素６４３に「３」が格納されており、第１要素６３１に「６」、第２要素６３２に「５」、第３要素６３３に「４」が格納されている。この各要素同士を比較すると、図７のＳ３３でＮＯ判定がなされることになる。つまり、第２マイコン４０は、メモリ配列比較処理によって、カウントズレを検出することができる。なお、第１マイコン１０及び第２マイコン４０におけるメモリ配列比較処理後の処理は、図１０の例の場合と同様であるため説明を省略する。
【０１２９】
図１２は、クランクカウンタ６１が意図しないタイミングでカウントアップした時の図面である。図１２におけるタイミングｔ１０でノイズを受けた場合、クランクカウンタ６１は、カウントアップすべきタイミングでないにもかかわらずカウントアップする。より詳細には、第２マイコン４０は、ノイズ信号が入力された場合、このノイズ信号をクランクセンサ２２０のクランクセンサ入力信号と誤検出して３０°ＣＡ処理をスタートする。これによって、クランクカウンタ６１は、クランクセンサ入力信号が入力されていないのにカウントアップすることになる。よって、図１２に示すように、クランクカウンタ３１のカウント値は「３」のままであるのに対して、クランクカウンタ６１のカウント値は「３」から「４」にカウントアップしている。このようにして、カウントズレが発生する。
【０１３０】
なお、第２マイコン４０は、ノイズ信号を誤検出した場合、タイミングｔ１０でスタートする３０°ＣＡ処理において、メモリ配列への格納処理Ｓ３０２、及びクランクカウンタ６１の更新処理Ｓ３０３を行う。
また、クランクカウンタ６１のカウント値が「４」になる３０°ＣＡ処理中は、第１マイコン１０は、３０°ＣＡ処理をスタートせず、カウント値の送信も行わない。よって、図１２におけるクランクカウンタ６１のカウント値が「４」になる３０°ＣＡ処理では、受信値メモリ６２の値が「３」→「ＦＦ」に更新されることになる。
【０１３１】
これに伴って、図１２におけるクランクカウンタ６１のカウント値が「５」になる３０°ＣＡ処理では、第１要素６４１に「４」、第２要素６４２に「３」、第３要素６４３に「２」が格納される。しかしながら、第１メモリ配列６３では、第１要素６３１に「ＦＦ」、第２要素６３２に「３」、第３要素６３３に「２」が格納される。この図１２からも明らかなように、意図しないタイミングでカウントアップをした場合、第１メモリ配列６３の各要素と、第２メモリ配列６４の各要素にズレが生じることになる。
【０１３２】
なお、第２マイコン４０におけるＴＤＣタイミングでのメモリ配列比較処理、及び第１マイコン１０及び第２マイコン４０におけるメモリ配列比較処理後の処理は、図１０の例の場合と同様であるため説明を省略する。
【０１３３】
ところで、ＥＣＵ１００は、同一のクランクセンサ２２０の入力信号を使用しているため、第１マイコン１０と第２マイコン４０の同様にノイズ信号が入力されることも想定できる。しかしながら、本実施形態におけるＥＣＵ１００は、第１マイコン１０と第２マイコン４０のカウント値を一致させることが目的である。よって、第１マイコン１０と第２マイコン４０のカウント値が一致していれば、ズレ発生を検出する必要はない。
【０１３４】
ここまで説明したように、第１マイコン１０は、３０°ＣＡ間隔（予め設定された３６０°ＣＡ間隔よりも短い間隔）でクランクカウンタ３１のカウント値を送信する。そして、一方、第２マイコン４０は、クランクカウンタ６１のカウント値と、取得したクランクカウンタ３１のカウント値とを比較することで、カウントズレが発生しているか否かを監視する。つまり、ＥＣＵ１００は、取得したクランクカウンタ３１のカウント値を用いて、カウントズレが発生しているか否かを監視するので、従来技術のように欠歯部の個数に関係なく、３６０°ＣＡ間隔よりも短い間隔（細かい間隔）で監視することができる。
【０１３５】
なお、上述のように、ＣＰＳ制御においては、クランクカウンタ３１，６１によるタイミングによって制御されている。よって、カウントズレが発生した場合、第１マイコン１０は、自身での点火補正演算や噴射補正演算までに、第２マイコン４０における最新の筒内状態量の算出や筒内状態量の送信が間に合わず、本来使用すべき筒内状態量が取得できない可能性がある。また、第１マイコン１０は、クランクカウンタ３１のカウント値とクランクカウンタ６１のカウント値とが大きくズレた場合、別気筒の筒内状態量を使用してしまうこともありうる。これにより、第１マイコン１０は、結果的に最適な目標空燃比からはずれた噴射量や点火時期を算出しアクチュエータを駆動することとなり、異常燃焼など意図せぬ問題が生じる可能性がある。
【０１３６】
しかしながら、ＥＣＵ１００は、ＴＤＣ毎のタイミングで各マイコンでのクランクカウンタ３１，６１のカウント値を比較し、カウントズレが発生していれば、カウントズレを補正するので、新たに高機能なマイコンや監視用のマイコンを用いることなく、カウントズレに伴う異常燃焼などの意図せぬ問題を早急に解消することができる。
【０１３７】
以上、本発明の好ましい実施形態について説明したが、本発明は上述した実施形態に何ら制限されることはなく、本発明の趣旨を逸脱しない範囲において、種々の変形が可能である。
【０１３８】
なお、本実施形態では、ＣＰＳ制御を２マイコン１０，４０で協調制御するＥＣＵ１００を採用した。しかしながら、本発明はこれに限定されるものではない。本発明は、二つのマイコンで協調制御する構成であれば適用することができる。
【符号の説明】
【０１３９】
１０  第１マイコン、２０  処理部、２１  点火制御部、２２  噴射制御部、２３  失火検出部、３０  メモリ空間、３１  クランクカウンタ、３２  クランクカウンタ補正値メモリ、３３  通信異常メモリ、３４  ズレ発生メモリ、４０  第２マイコン、５０  処理部、５１  筒内状態量算出部、５２  センサ異常判定部、６０  メモリ空間、６１  クランクカウンタ、６２  クランクカウンタ受信値メモリ、６３  第１メモリ配列、６３１  第１要素、６３２  第２要素、６３３  第３要素、６４  第２メモリ配列、６４１  第１要素、６４２  第２要素、６４３  第３要素、６５  通信異常メモリ、６６  ズレ発生メモリ、１００  ＥＣＵ、２１０  気筒内圧センサ、２２０  クランクセンサ、３１０  イグナイタ、３２０  インジェクタ、３３０  異常警告部
【図１】
2014047752.tif 000003
【図２】
2014047752.tif 000004
【図３】
2014047752.tif 000005
【図４】
2014047752.tif 000006
【図５】
2014047752.tif 000007
【図６】
2014047752.tif 000008
【図７】
2014047752.tif 000009
【図８】
2014047752.tif 000010
【図９】
2014047752.tif 000011
【図１０】
2014047752.tif 000012
【図１１】
2014047752.tif 000013
【図１２】
2014047752.tif 000014