特許第5662181号(P5662181)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社ケーヒンの特許一覧

<>
  • 特許5662181-移動体の電子制御装置 図000002
  • 特許5662181-移動体の電子制御装置 図000003
  • 特許5662181-移動体の電子制御装置 図000004
  • 特許5662181-移動体の電子制御装置 図000005
  • 特許5662181-移動体の電子制御装置 図000006
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5662181
(24)【登録日】2014年12月12日
(45)【発行日】2015年1月28日
(54)【発明の名称】移動体の電子制御装置
(51)【国際特許分類】
   G06F 11/30 20060101AFI20150108BHJP
【FI】
   G06F11/30 F
【請求項の数】4
【全頁数】19
(21)【出願番号】特願2011-19405(P2011-19405)
(22)【出願日】2011年2月1日
(65)【公開番号】特開2012-160033(P2012-160033A)
(43)【公開日】2012年8月23日
【審査請求日】2013年10月9日
(73)【特許権者】
【識別番号】000141901
【氏名又は名称】株式会社ケーヒン
(74)【代理人】
【識別番号】100153349
【弁理士】
【氏名又は名称】武山 茂
(74)【代理人】
【識別番号】100145023
【弁理士】
【氏名又は名称】川本 学
(72)【発明者】
【氏名】亀卦川 優
(72)【発明者】
【氏名】青柳 理
(72)【発明者】
【氏名】渡邉 英樹
(72)【発明者】
【氏名】秋元 豊
【審査官】 大塚 俊範
(56)【参考文献】
【文献】 特開2007−293524(JP,A)
【文献】 特開2003−097344(JP,A)
【文献】 特開2000−029734(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 11/28−11/34
G05B 23/02
(57)【特許請求の範囲】
【請求項1】
第1のCPUと第2のCPUとを有し、前記第1のCPUと前記第2のCPUの一方のCPUが他方のCPUの動作を監視する移動体の電子制御装置において、
テスト値を取得するテスト値取得部と、
前記テスト値と共通値を用いて演算処理を行って演算値を算出するテスト用演算部と、
前記第1のCPUと前記第2のCPUの一方のCPUで算出した前記演算値を、他方のCPUにおいて前記共通値を用いて前記演算処理の逆演算を行い、その演算結果と前記他方のCPUが有する前記一方のCPUの前記テスト値を比較することで一方のCPUの動作を判定する比較部と、
を前記第1のCPUと前記第2のCPUのそれぞれに設け
前記第1のCPUの前記テスト値は、前記第1のCPUのコアに対して自己診断した結果を表すコードを前記テスト値として取得し、
前記第2のCPUの前記テスト値は、前記第2のCPUのコアに対して自己診断した結果を表すコードを前記テスト値として取得するように構成したことを特徴とする移動体の電子制御装置。
【請求項2】
前記テスト値取得部は、所定値を前記CPUの汎用レジスタに書き込んだ後に読み出し、その読み出し値と前記所定値を比較した結果のコードを前記テスト値として取得する請求項に記載の移動体の電子制御装置。
【請求項3】
前記テスト用演算部は、複数種類の前記演算処理を順番に選択して前記演算値を算出する請求項1又は請求項2に記載の移動体の電子制御装置。
【請求項4】
前記共通値は、前記2つのCPUのそれぞれに予め記憶されている請求項1から請求項のいずれか一項に記載の移動体の電子制御装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、移動体の電子制御装置に関する。
【背景技術】
【0002】
移動体の電子制御装置には、CPU(Central Processing Unit)を2つ備えるものが
あり、2つのCPUで互いの動作を監視しながら、アクチュエータの制御を行うことがある。
【0003】
このような電子制御装置の従来例としては、例えば、車両の電子スロットルバルブの制御を行うものが知られている。メインCPUとサブCPUの2つCPUは、その各々で電子スロットルバルブを制御するための演算処理を行う。さらに、その演算結果を2つのCPUの間で通信し、2つのCPUのそれぞれで演算した値が予め設定されている異常判定用の所定値以上になったら、電子制御装置はメインCPUが異常動作をしていると判定する。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開平5−302541号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、従来の電子制御装置は、電子スロットルバルブを制御するための演算処理をサブCPUでも行うので、メインCPUと同様な演算処理を行える能力がサブCPUにも必要であった。このことは、電子制御装置のコストアップの原因になっていた。
さらに、電子スロットルバルブを制御するためのパラーメータは、時々刻々と変化する。このため、2つのCPUの間の通信で演算結果を比較する場合には、2つのCPUが演算処理をしたタイミングを明確にしなければならない。このため、従来の電子制御装置では、演算処理のタイミングを同期させるための複雑な処理が必要であった。
【0006】
また、車種が異なると電子スロットルバルブの制御の仕方が異なることがある。このような場合には、車種ごとにCPUで異常監視を行うためのプログラムを変更しなければならなかった。
本発明は、このような事情を鑑みてなされたものであり、複数のCPUの間での相互監視を効率良く行わせることを目的とする。
【課題を解決するための手段】
【0007】
本発明の一観点によれば、第1のCPUと第2のCPUとを有し、前記第1のCPUと前記第2のCPUの一方のCPUが他方のCPUの動作を監視する移動体の電子制御装置において、テスト値を取得するテスト値取得部と、前記テスト値と共通値を用いて演算処理を行って演算値を算出するテスト用演算部と、前記第1のCPUと前記第2のCPUの一方のCPUで算出した前記演算値を、他方のCPUにおいて前記共通値を用いて前記演算処理の逆演算を行い、その演算結果と前記他方のCPUが有する前記一方のCPUの前記テスト値を比較することで一方のCPUの動作を判定する比較部と、を前記第1のCP
Uと前記第2のCPUのそれぞれに設け、前記第1のCPUの前記テスト値は、前記第1のCPUのコアに対して自己診断した結果を表すコードを前記テスト値として取得し、前記第2のCPUの前記テスト値は、前記第2のCPUのコアに対して自己診断した結果を表すコードを前記テスト値として取得するように構成したことを特徴とする移動体の電子制御装置が提供される。
【0008】
また、本発明の別の観点によれば、前記テスト値取得部は、所定値を前記CPUの汎用レジスタに書き込んだ後に読み出し、その読み出し値と前記所定値を比較した結果のコードを前記テスト値として取得する請求項に記載の移動体の電子制御装置が提供される。
【0009】
また、本発明の別の観点によれば、前記テスト用演算部は、複数種類の演算を順番に選択して前記演算値を算出する請求項1又は請求項2に記載の移動体の電子制御装置が提供される。
【0010】
また、本発明の別の観点によれば、前記共通値は、前記2つのCPUのそれぞれに予め記憶されている請求項1から請求項のいずれか一項に記載の移動体の電子制御装置が提供される。
【発明の効果】
【0011】
本発明によれば、制御対象の制御に必要な演算処理の代わりに、テスト値と共通値を用いた演算処理を行い、その演算結果を使ってCPUの相互監視を行うようにしたので、CPUの処理負担を低減できる。また、テスト値を使用することで、CPU間で相互監視のための演算処理を開始するタイミングの同期させる必要がなくなるので、装置構成を簡略化できる。
【図面の簡単な説明】
【0012】
図1図1は、本発明の実施形態に係る移動体の電子制御装置のブロック図である。
図2図2は、本発明の実施の形態に係る相互監視方法のフローチャートである。
図3図3は、本発明の実施の形態に係るテスト値を取得する処理のフローチャートである。
図4図4は、本発明の実施の形態に係る(a)テスト値を算出するフローチャート、(b)各演算処理における演算コードと演算値を示す図である。
図5図5は、本発明の実施の形態に係る相互監視方法のタイミングチャートである。
【発明を実施するための最良の形態】
【0013】
本発明を実施するための形態について以下に詳細に説明する。
図1に本実施の形態に係る移動体の電子制御装置のブロック図を示す。
動体の電子制御装置(以下、電子制御装置という)1は、バッテリ2からの電力がシステムリレー3を介して入力され、アクチュエータであるモータ4の回転制御を行うように構成されている。具体的には、電子制御装置1は、第1のCPUであるメインCPU11と、第2のCPUであるサブCPU12とを有する。これらCPU11,12には、バッテリ2からの電力がシステムリレー回路13を介して電力が供給される。さらに、2つのCPU11,12は、通信可能に接続されている。そして、2つのCPU11,12か
ら出力される信号は、リレー駆動回路15と、モータドライバ16とに接続されている。モータドライバ16は、モータ4のコイルに通電する電流を制御するように構成されている。
【0014】
メインCPU11は、図示を省略するROM(Read Only Memory)やRAM(Random A
ccess Memory)、その他の回路を有し、モータ制御部21と、第1の相互監視部であるメイン相互監視部22とに機能分割できる。ここで、モータ制御部21は、外部からの信号を受けて制御対象であるモータの回転制御を行うための演算を行う。また、メイン相互監視部22は、テスト値を取得するMTEST取得部31(テスト値取得部)と、テスト値を用いた演算処理及び演算値の送信を行うMTESTn演算部32(テスト用演算部)と、サブCPU12を診断するメイン比較部33とに機能分割される。なお、メインCPU11は、これ以外の機能を実現するための制御部や演算部を備えても良い。例えば、制御対象がモータ以外のアクチュエータである場合、そのようなアクチュエータの制御部がモータ制御部の代わりに設けられる。また、アクチュエータ以外の他の装置の制御も行う場合には、その装置のための制御部が設けられる。
【0015】
サブCPU12は、図示を省略するROMやRAM、その他の回路を有し、第2の相互監視部であるサブ相互監視部23を有する。サブ相互監視部23は、テスト値を取得するSTEST取得部41(テスト値取得部)と、テスト値を用いた演算処理及び演算値の送信を行うSTESTn演算部42(テスト用演算部)と、メインCPU11を診断するサブ比較部43とに機能分割される。なお、サブCPU12は、これ以外の機能を実現するための制御部や演算部を備えても良い。
【0016】
次に、図2を主に参照して、各CPU11,12が互いの動作の診断する相互監視方法について説明する。このCPU11,12の相互監視方法では、テスト値に演算処理を行った結果を2つのCPU11,12の間で通信し合うことで相互監視を行うことを特徴とする。
【0017】
まず、最初に、ステップS101でメインCPU11がサブCPU12に診断させる演算値を算出する。具体的には、最初に、メインCPU11のMTEST取得部31が、テスト値MTESTを取得する。テスト値MTESTは、メインCPU11とサブCPU12の両方が知り得る値であって、モータ4の駆動制御に影響を及ぼさない程度の負荷で取得できる値が用いられる。このようなテスト値MTESTとしては、例えば、CPU11,12のコア診断の結果や、CPU11,12のROMの所定領域にあるデータがあげられる。
【0018】
続いて、メインCPU11のMTESTn演算部32は、共通値Nを用いて、テスト値MTESTに対して予め定められた演算処理、例えば、減算処理を行い、演算値MTEST1を算出する。共通値Nは、メインCPU11とサブCPU12の両方が知り得る値、例えば、それぞれのROMに予め記憶されている値が用いられる。
そして、演算値MTEST1は、通信によって、サブCPU12に送信される。
【0019】
次に、ステップS102で、サブCPU12がメインCPU11を診断する。
サブCPU12は、演算値MTEST1を取得したら、サブ比較部43が演算値MTEST1に対して予め定められた逆演算処理、例えば、演算値MTEST1から共通値Nを加算する処理を行い、テスト値MTESTを算出する。ここで、逆演算処理とは、メインCPU11でテスト値MTESTに対して行われた演算処理の効果を打ち消し、演算値MTEST1からテスト値MTESTを復元するような処理をいう。
【0020】
さらに、サブ比較部43は、STEST取得部41で取得したテスト値MTESTと、逆演算により算出したテスト値MTESTとを比較する。STEST取得部41は、サブCPU12のROMの所定領域にあるデータの読み出し処理を行ってテスト値MTESTを取得する。なお、テスト値METSTは、2つのCPU11,12が正常動作している場合には、同じ値が得られる。
【0021】
つまり、2つのメインCPU11,12が正常動作していれば、サブCPU12は、メインCPU11が取得したテスト値MTESTを復元することができる。しかも、そのテスト値MTESTは、サブCPU12が自身で取得したテスト値MTESTと一致するはずである。
【0022】
したがって、サブ比較部43は、算出したテスト値MTESTと、自身が取得したテスト値MTESTとが一致する場合には、メインCPU11が正常動作(OK)していると判定する。一方、算出したテスト値MTESTとテスト値MTESTとが一致しない場合には、メインCPU11が異常動作(NG)していると判定する。
【0023】
そして、サブCPU12は、メインCPU11を診断したら、ステップS103に進む。ステップS103では、サブCPU12が、自身の動作をメインCPU11に診断させるための演算値を計算する。すなわち、サブCPU12のSTESTn演算部42は、テスト値STESTに対して共通値Nを用いて予め定められた演算処理、例えば、減算処理を行い、演算値STEST1を算出する。
そして、演算値STEST1は、通信によって、メインCPU11に送信される。
【0024】
次に、ステップS104で、メインサブCPU11がサブCPU12を診断する。
メインCPU11が演算値STEST1を取得したら、メイン比較部33が演算値STEST1に対して予め定められた逆演算処理、例えば、演算値STEST1から共通値を加算する処理を実行し、テスト値STESTを算出する。逆演算処理は、サブCPU12でテスト値STESTに対して行われた演算処理の効果を打ち消し、演算値STEST1からテスト値STESTを復元するような処理をいう。
【0025】
ここで、2つのメインCPU11,12が正常動作していれば、メインCPU11は、サブCPU12が取得したテスト値STESTを復元することができる。しかも、そのテスト値STESTは、メインCPU11が自身で取得したテスト値STESTと一致するはずである。
【0026】
したがって、メイン比較部33は、算出されたテスト値STESTと、自身が取得したテスト値STESTとを比較する。両者が一致する場合には、サブCPU12が正常動作(OK)していると判定する。一方、算出したテスト値STESTとテスト値STESTとが一致しない場合、メイン比較部33は、サブCPU12が異常動作(NG)していると判定する。
【0027】
そして、続くステップS105からステップS108では、上記の処理と同様の処理が演算処理の種類を変更して繰り返される。
まず、ステップS105では、メインCPU11がサブCPU12に診断させる演算値を作成する。メインCPU11のMTEST取得部31が、テスト値MTESTを取得し、MTESTn演算部32が、テスト値MTESTに対して共通値Nを用いて予め定められた演算処理、例えば、加算処理を行い、演算値MTEST2を算出する。この際の演算処理は、ステップS101で実施した減算処理とは異なる処理であって、予め決められた複数の演算処理から順番に選択される1つ演算処理である。
そして、演算値MTEST2は、通信によって、サブCPU12に送信される。
【0028】
ステップS106では、サブCPU12がメインCPU11に対する2回目の診断を行う。サブ比較部43は、演算値MTEST2に対して予め定められた逆演算処理として演算値MTEST2から共通値Nを減算する処理を行い、テスト値MTESTを算出する。
【0029】
さらに、サブ比較部43は、算出されたテスト値MTESTと、自己が取得したテスト
値MTESTとを比較し、両者が一致する場合には、メインCPU11が正常動作(OK)していると判定する。一方、算出したテスト値MTESTとテスト値MTESTとが一致しない場合には、メインCPU11が異常動作(NG)していると判定する。
【0030】
続いて、ステップS107で、サブCPU12がメインCPU11に診断させるための演算値を算出する。サブCPU12のSTEST取得部41が、テスト値STESTを取得し、STESTn演算部42がテスト値STESTに対して共通値Nを用いて予め定められた演算処理、例えば、加算処理を行い、演算値STEST2を算出する。
そして、演算値STEST2は、通信によって、メインCPU11に送信される。
【0031】
ステップS108では、メインCPU11がサブCPU12に対する2回目の診断を行う。メインCPU11では、メイン比較部33が演算値STEST2に対して予め定められた逆演算処理として、演算値STEST2から共通値Nを減算する処理を行い、テスト値STESTを算出する。
【0032】
さらに、メイン比較部33は、算出されたテスト値STESTと、自己が取得したテスト値MTESTとを比較し、両者が一致する場合には、サブCPU12が正常動作(OK)していると判定する。一方、算出したテスト値STESTとテスト値MTESTとが一致しない場合には、サブCPU12が異常動作(NG)していると判定する。
【0033】
以降は、所定時間ごとに、メインCPU11とサブCPU12との間で、演算処理を順番に変えながら、同様の処理を実行する。演算処理は、例えば、テスト値MTEST,STESTから演算値MTESTn,STESTn(nは共に正の整数)を算出するときは、減算(第1の演算処理)→加算(第2の演算処理)→乗算(第3の演算処理)→除算(第4の演算処理)→余り演算(第5の演算処理)を順番に使う。これに対し、演算値MTESTnや演算値STESTnからテスト値MTEST,STESTから算出するときは、加算(第1の逆演算処理)→減算(第2の逆演算処理)→除算(第3の演算処理)→乗算(第4の逆演算処理)→四則混合演算(第5の逆演算処理)を順番に使う。ここで、四則混合演算とは、余り演算の逆演算に対応するものである。例えば、余り演算が、テスト値40を7で割ったときの余り、つまり40÷7=5、余り5という計算であった場合、ここでの四則混合演算は5+7×5を計算して、40を得るような演算である。なお、メインCPU11側とサブCPU12側では、演算値MTESTn,STESTnの算出に同じ種類の演算処理を採用することが好ましい。また、演算処理の種類や順番は、これに限定されない。例えば、同じ演算処理を2回以上連続して実施しても良い。
【0034】
また、共通値Nは、演算の種類に依らずに常に一つの値を使用している。しかしながら、共通値Nは、複数の値を循環させて用いても良い。複数の値を循環させる場合は、各CPU11,12のROMには、複数の共通値Nと、それら共通値Nを使う順番とが予め登録される。さらに、MTESTn演算部32及びSTESTn演算部42は、予め登録された順番に共通値Nを読み込んで演算処理を行うように構成される。
【0035】
ここで、図3を参照して、テスト値MTEST,STESTを取得する処理の一例として、それぞれのCPU11,12のコアの診断結果を用いる場合について説明する。なお、以下においては、メインCPU11における処理について説明するが、サブCPU12においても同様の処理が行われる。
【0036】
最初に、ステップS201で、MTEST取得部31は、テスト値MTESTの初期値にゼロを代入する。続いて、ステップS202で、MTEST取得部31は、CPU11の汎用レジスタに所定値、例えば0x55を書き込む。
この後、ステップS203で、MTEST取得部31は、同じ汎用レジスタの値を読み込
んで、最初に汎用レジスタに書き込んだ値と比較する。
【0037】
汎用レジスタの読み込み値が、書き込み値と同じ値、即ち0x55であれば、ステップS204に進んで、今度は汎用レジスタに別の所定値、例えば0xAAを書き込む。
この後、ステップS205で、MTEST取得部31が同じ汎用レジスタの値を読み込む。汎用レジスタの読み込み値が、書き込み値と同じ値、即ち0xAAであれば、ステップS206に進む。この場合、MTEST取得部31は、メインCPU11のコアが正常に動作していることを示すコード、例えば「40」をテスト値MTESTに代入する。
【0038】
一方、ステップS203とステップS205のいずれか一方でも汎用レジスタの読み込み値と書き込み値とが一致しない場合には、ステップS207に進む。これらの場合は、汎用レジスタへの書き込み、又は汎用レジスタからの書き込みが正常に実行できなかったことになるので、テスト値MTESTに、メインCPU11のコアの動作が異常であることを示すコード、例えば「50」を代入する。
【0039】
また、図4(a)に、CPU11,12のコアの診断結果をテスト値として使用した場合に、MTESTn演算部32又はSTESTn演算部42が演算値MTESTn、STESTnを演算処理で算出する場合のフローチャートを示す。なお、以下においては、メインCPU11における処理について説明するが、サブCPU12においても同様の処理が行われる。
【0040】
最初に、ステップS301で、演算値MTEST1を算出する。演算値MTEST1は、例えば、テスト値TESTから演算テストコードの値を引いた結果を代入する。続いて、ステップS302で、演算値MTEST1は、送信レジスタに書き込まれる。
【0041】
さらに、図4(b)に各演算処理における演算コードと演算値MTEST1を示す。なお、テスト値は、CPU11,12のコアが正常に動作している場合のコード、「40」を用いた場合を例にして示している。
【0042】
減算処理の共通値Nのコードを「10」に設定した場合、演算値MTEST1は、40−10=30になる。加算処理の共通値Nのコードを「20」にした場合、演算値MTEST1は、40+20=60になる。乗算処理の共通値Nのコードを「2」にした場合、演算値MTEST1は、40×2=80になる。除算処理の共通値Nのコードを「4」にした場合、演算値MTEST1は、40÷4=10になる。余り演算処理の共通値Nのコードを「7」にした場合、演算値MTEST1は、40を7で除算したときの余りである「5」になる。
【0043】
これらの演算値MTEST1は、CPU11,12が正しく機能している場合に得られる値である。すなわち、演算値MTEST1として正しい値が得られた場合には、CPU11,12のコア機能としての汎用レジスタの読み込み及び書き込み、分岐命令、比較命令のそれぞれの機能と、CPU11,12の演算回路が共に正しく機能していることを確認できる。
【0044】
ここで、図2のフローチャートに示すメインCPU11とサブCPU12による相互監視にエラーが生じたときの処理について、図5のタイミングチャートを参照して説明する。
なお、図5は、横軸が時間を示し、縦軸がメインCPU11及びサブCPU12のそれぞれの動作を示す。そして、図5は、相互監視が所定の間隔で継続して実施され、かつ各CPU11,12でエラーが発生していない場合を示している。すなわち、時間T0でメインCPU11及びサブCPU12にリセットがかけられ、時間T1でサブCPU12の
初期化が完了する。メインCPU11の初期化は、時間T2までかかっている。
【0045】
2つのCPU11,12が通常の動作を開始したら、時間T3でメインCPU11が最初に演算値MTEST1を出力する。演算値MTEST1を受け取ったサブCPU12は、時間T4で、演算値STEST1を出力する。以降、時間T5、T7、T9、T11のそれぞれにメインCPU11が演算値MTEST2、演算値MTEST3、演算値MTEST4、演算値MTEST5を出力する。これに対し、時間T6、T8、T10、T12のそれぞれにサブCPU12が演算値STEST2、演算値STEST3、演算値STEST4、演算値STEST5を出力する。
【0046】
このCPU11,12の相互監視方法では、四則演算と余り演算の合計5種類の演算を順番に実施するので、時間T13では、メインCPU11が時間T3と同様の演算を行って演算値MTEST1を出力する。同様に、時間T14では、サブCPU12が時間T4と同様の演算を行って演算値STEST1を出力する。以降は、同様の処理を繰り替えし、メインCPU11とサブCPU12の一方のCPUが他方のCPUを監視する処理を交互に繰り返す。
【0047】
この場合は、メインCPU11はサブCPU12の異常を検出せず、サブCPU12はメインCPU11の異常を検出していない。このため、2つCPU11,12からの指令を受けてモータ4の回転制御が行われる。
【0048】
続いて、いずれかのCPU11,12に異常が発生した場合の処理について、以下に場合分けして説明する。
【0049】
(A)起動時のメインCPU11の異常と、異常からの復帰
起動時にメインCPU11から最初に送信された演算値MTEST1がサブCPU12で異常と判定された場合の処理について説明する。このような場合としては、以下のケースが想定される。
(A1)T3→T4 :メインCPU→サブCPU 異常(サブ側通信NG)
(A2)T4→T5 :サブCPU →メインCPU 異常(メイン側通信NG)
(A3)T5→T6 :メインCPU→サブCPU 異常
(A4)T6→T7 :サブCPU →メインCPU 異常
(A5)T7→T8 :メインCPU→サブCPU 正常
(A6)T8→T9 :サブCPU →メインCPU 正常
(A7)T9→T10 :メインCPU→サブCPU 正常(サブ側通信OK)
(A8)T10→T11:サブCPU →メインCPU 正常(メイン側通信OK)
【0050】
時間T3においてメインCPU11で計算された演算値MTEST1に基づいて、サブCPU12がメインCPU11を診断する。この場合、演算値MTEST1は正常な値でない、つまり異常値なので、サブCPU12は、メインCPU11に対して異常判定(サブ側通信NG)をする。この場合、サブCPU12のSTESTn演算部42は、メインCPU11から送信された値、つまり異常値である演算値MTEST1を演算値STEST1に代入してメインCPU11に送信する。
【0051】
さらに、時間T4においてサブCPU12で計算された演算値STEST1に基づいて、メインCPU11がサブCPU12を診断する。この場合、演算値STEST1として異常な値が送信されているので、メインCPU11は、サブCPU12に対して異常判定(サブ側通信NG)をする。
【0052】
続く時間T5においてメインCPU11で計算された演算値MTEST2と、時間T6
においてサブCPU12で計算された演算値STEST2は、共に異常値なので、各CPU11,12は、異常判定を維持する。
【0053】
ここで、時間T5でメインCPU11が2回目の診断結果をサブCPU12に送信した後に、メインCPU11が異常状態から正常状態に復帰したので、時間T7で計算される3回目の演算値MTEST3は、正常値になる。
このため、時間T7においてメインCPU11で計算された演算値MTEST3に基づいて、サブCPU12がメインCPU11を正常と判定する。この際、サブCPU12のサブ比較部43は、異常判定後に正常判定を行ったので、正常な演算値MTESTnを2回連続して受信するまで、通信OKと判定しない。このため、モータ4の駆動は許可されない。
【0054】
また、時間T8においてサブCPU12で計算された演算値STEST3に基づいて、メインCPU11がサブCPU12を正常と判定する。この際、メインCPU11のメイン比較部33は、異常判定後に正常判定を行ったので、正常な演算値STESTnを2回連続して受信するまで、通信OKと判定しない。このため、モータ4の駆動は許可されない。
【0055】
さらに、時間T9にメインCPU11で計算された正常な演算値MTEST4に基づいて、サブCPU12がメインCPU11に対して正常判定する。これにより、サブCPU12側で正常判定が2回連続したので、サブCPU12は通信OKと判定する。サブCPU12のサブ比較部43は、許可信号をモータドライバ16に出力する。
そして、時間T10にサブCPU12で計算された正常な演算値STEST4に基づいて、メインCPU11がサブCPU12に対して正常判定する。これにより、メインCPU11側で正常判定が2回連続したので、メインCPU11は通信OKと判定する。メインCPU11のメイン比較部33が許可信号をモータドライバ16に出力する。その結果、時間T11で2つのCPU11,12からの許可信号が揃って、モータ4の回転制御が開始される。
【0056】
(B)起動時のサブCPU12の異常と、異常からの復帰
起動時にサブCPU12から最初に送信された演算値STEST1がメインCPU11で異常と判定された場合の処理について説明する。このような場合としては、以下のケースが想定される。
(B1)T3→T4 :メインCPU→サブCPU 正常(サブ側通信OK)
(B2)T4→T5 :サブCPU →メインCPU 異常(メイン側通信NG)
(B3)T5→T6 :メインCPU→サブCPU 正常
(B4)T6→T7 :サブCPU →メインCPU 異常
(B5)T7→T8 :メインCPU→サブCPU 正常
(B6)T8→T9 :サブCPU →メインCPU 正常
(B7)T9→T10 :メインCPU→サブCPU 正常
(B8)T10→T11:サブCPU →メインCPU 正常(メイン側通信OK)
【0057】
時間T3においてメインCPU11で計算された演算値MTEST1に基づいて、サブCPU12がメインCPU11を診断する。この場合、演算値MTEST1は正常な値なので、サブCPU12は、メインCPU11に対して正常判定(サブ側通信OK)をする。
一方、時間T4においてサブCPU12で計算された演算値STEST1は異常値であったので、メインCPU11がサブCPU12を異常判定(サブ側通信NG)する。
【0058】
時間T5で、メインCPU11は、サブCPU12の動作状態に拘らず、演算値MTE
ST2を作成してサブCPU12に送信する。このため、時間T6で、サブCPU12は、メインCPU11を正常判定する。
一方、時間T6においてサブCPU12で計算された演算値STEST2は異常値なので、時間T7においてメインCPU11はサブCPU12の異常判定を維持する。
【0059】
そして、時間T8までにサブCPU12が正常状態になったら、時間T8でメインCPU11に送信される演算値STEST3は正常値になる。メインCPU11は、異常判定を一回しているので、正常判定が2回連続したとき、すなわち、時間T11で通信がOKになったと判定する。そして、メインCPU11は、モータドライバ16に許可信号を送信する。
【0060】
(C)起動時にサブCPU12からの応答がない場合
起動時にメインCPU11は演算値MTESTnを送信するが、サブCPU12からは演算値MESTnが送信されない場合について説明する。
時間T3でメインCPU11が演算値MTEST1をサブCPU12に送信した後、サブCPU12から信号がメインCPU11に送られてこない場合、メインCPU11は、所定の時間tが経過するごとに、演算値MTESTnをサブCPU12に送信する。サブCPU12からの応答がない場合、メインCPU11は、予め定められた時間、例えば255m秒が経過するまで、演算値MTESTnを送信し続ける。予め定められた時間が経過したら、メインCPU11のメイン比較部33はサブCPU12の通信異常と判定し、処理を終了する。以降、電子制御装置1のシステムがリセットされるまでメインCPU11は通信を停止する。
【0061】
(D)動作判定した後に、メインCPU11の異常が連続して発生した場合
このような場合としては、以下のケースが想定される。
(D1)T3→T4 :メインCPU→サブCPU 正常(サブ側通信OK)
(D2)T4→T5 :サブCPU →メインCPU 正常(メイン側通信NG)
(D3)T5→T6 :メインCPU→サブCPU 正常
(D4)T6→T7 :サブCPU →メインCPU 正常
(D5)T7→T8 :メインCPU→サブCPU 異常
(D6)T8→T9 :サブCPU →メインCPU 異常
(D7)T9→T10 :メインCPU→サブCPU 異常
(D8)T10→T11:サブCPU →メインCPU 異常
(D9)T11→T12:メインCPU→サブCPU 異常(サブ側通信NG)
【0062】
時間T3から時間T7までは、各CPU11,12が正常判定をしていた。この後、時間T7においてメインCPU11で計算された演算値MTEST3が異常値であった場合、サブCPU12がメインCPU11を異常と判定する。また、これに伴って、メインCPU11もサブCPU12に対して異常判定を行う。
【0063】
そして、時間T11でサブCPU12に送信される演算値MTEST5が異常値であると、サブCPU12が3回目の異常判定を行う。ここで、サブCPU12側で異常判定が3回連続したので、サブ比較部43は通信NGと判定し、モータ駆動を停止させる。以降、電子制御装置1のシステムがリセットされるまでサブCPU12は通信を停止する。
【0064】
(E)メインCPUからの通信が途絶した場合
メインCPU11、サブCPU12ともに起動から2回目までの通信は正常だったが、3回目のメインCPU11からの通信が途絶した場合、サブCPU12は通信途絶が3回連続した場合に、通信NGとして、モータ駆動を停止させる。以降、システムがリセットされるまでサブCPU12は通信を停止する。
【0065】
(F)メインCPUからの通信が途絶した後、通信が正常に復帰した場合
このような場合としては、以下のケースが想定される。
(F1)T3→T4 :メインCPU→サブCPU 正常(サブ側通信OK)
(F2)T4→T5 :サブCPU →メインCPU 正常(メイン側通信OK)
(F3)T5→T6 :メインCPU→サブCPU 正常
(F4)T6→T7 :サブCPU →メインCPU 正常
(F5)T7→T8 :メインCPU→サブCPU 通信途絶
(F6)T8→T9 :サブCPU →メインCPU 通信途絶
(F7)T9→T10 :メインCPU→サブCPU 通信途絶
(F8)T10→T11 :サブCPU →メインCPU 通信途絶
(F9)T11→T12 :メインCPU→サブCPU 正常
(F10)T12→T13:サブCPU →メインCPU 正常
(F11)T13→T14:メインCPU→サブCPU 正常
(F12)T14→T15:サブCPU →メインCPU 正常(サブ側通信OK)
【0066】
時間T3から時間T7までは、各CPU11,12が正常判定をしていた。この後、時間T7の3回目のメインCPU11からの通信が途絶した。この後、2回の通信途絶を経て、時間T11でメインCPU11からの通信が復活した。
時間T11でメインCPU11が送信した演算値MTEST5がサブCPU12で正常値と判定された場合、サブCPU12は、演算値MTEST5の演算パターンに合わせて演算値STEST5を算出する。メインCPU11が正常に動作しているので、演算値MTEST5は、余り演算で算出されているので、サブCPU12は余り演算の逆演算処理である四則混合演算で演算値STEST5を算出する。
【0067】
そして、時間T13で、メインCPU11が演算値MTEST6を余り演算の次の順番の演算、例えば減算を用いて算出し、サブCPU12に送信する。サブCPU12では、前回実施した余り演算の次の演算、例えば、除算を用いて異常判定を行う。そして、演算値MTEST6が正常値であると判定した場合には、通信OKと判定する。
【0068】
(G)メインCPU11からの通信が途絶した後、通信は復帰したが正しい演算値が得られなかった場合
このような場合としては、以下のケースが想定される。
(G1)T3→T4 :メインCPU→サブCPU 正常(サブ側通信OK)
(G2)T4→T5 :サブCPU →メインCPU 正常(メイン側通信OK)
(G3)T5→T6 :メインCPU→サブCPU 正常
(G4)T6→T7 :サブCPU →メインCPU 正常
(G5)T7→T8 :メインCPU→サブCPU 通信途絶
(G6)T8→T9 :サブCPU →メインCPU 通信途絶
(G7)T9→T10 :メインCPU→サブCPU 通信途絶
(G8)T10→T11 :サブCPU →メインCPU 通信途絶
(G9)T11→T12 :メインCPU→サブCPU 正常
(G10)T12→T13:サブCPU →メインCPU 正常
(G11)T13→T14:メインCPU→サブCPU 異常(サブ側通信NG)
【0069】
時間T3から時間T7までは、各CPU11,12が正常判定をしていた。この後、時間T7の3回目のメインCPU11からの通信が途絶した。この後、2回の通信途絶を経て、時間T11でメインCPU11からの通信が復活した。
時間T11でメインCPU11が送信した演算値MTEST5がサブCPU12で正常値と判定された場合、サブCPU12は、演算値MTEST5の演算パターンに合わせて
演算値STEST5を算出する。このとき、メインCPU11が異常動作をしており、演算値MTEST5が本来の順番である余り演算ではなく、除算で算出されていた場合、これに合わせてサブCPU12は除算で演算値STEST5を算出する。
【0070】
そして、時間T13でメインCPU11は、除算の次の演算である加算を用いずに、他の演算、例えば除算で演算値MTEST6を算出し、サブCPU12に送信した。
時間T14において、サブCPU12は、前回実施した除算の次の演算、例えば、加算を用いて異常判定を行う。このため、テスト値MTEST、STESTが一致しなくなる。したがって、メインCPU11は、演算値MTEST6が異常値であると判定し、通信NGとする。
【0071】
(H)動作判定した後に、サブCPU側で異常判定が連続して生じた場合
このような場合としては、以下のケースが想定される。
(H1)T3→T4 :メインCPU→サブCPU 正常(サブ側通信OK)
(H2)T4→T5 :サブCPU →メインCPU 正常(メイン側通信OK)
(H3)T5→T6 :メインCPU→サブCPU 正常
(H4)T6→T7 :サブCPU →メインCPU 正常
(H5)T7→T8 :メインCPU→サブCPU 正常
(H6)T8→T9 :サブCPU →メインCPU 異常
(H7)T9→T10 :メインCPU→サブCPU 正常
(H8)T10→T11 :サブCPU →メインCPU 異常
(H9)T11→T12 :メインCPU→サブCPU 正常
(H10)T12→T13:サブCPU →メインCPU 異常(メイン側通信NG)
【0072】
時間T3から時間T8までは、各CPU11,12が正常判定をしている。この後、この後、時間T8においてサブCPU12で計算された演算値STEST3が異常値であった場合、メインCPU11がサブCPU12を異常と判定する。
一方、メインCPU11は正常動作しているので、時間T9においてメインCPU11で計算した演算値MTEST4に基づいて、サブCPU12は正常判定する。
【0073】
さらに、時間T10においてサブCPU12が計算した演算値MTEST4に基づいて、メインCPU11は、2回目の異常判定を行う。そして、時間T12においてサブCPU12が計算した演算値MTEST5に基づいて、メインCPU11は、3回目の異常判定を行う。異常判定が3回連続したので、メインCPU11のメイン比較部33は通信NGと判定する。これにより、モータ駆動が停止させられる。以降、電子制御装置1のシステムがリセットされるまでメインCPU11は通信を停止する。
【0074】
(I)サブCPUからの通信が途絶した場合
メインCPU11、サブCPU12ともに起動から2回目までの通信は正常だったが、3回目のサブCPU12からの通信が途絶した場合、メインCPU11は所定の時間間隔で演算値MTESTnを送信し続ける。そして、メインCPU11は通信途絶が3回連続した場合に、通信NGとして、モータ駆動を停止させる。以降、システムがリセットされるまでメインCPU11は通信を停止する。
【0075】
(J)サブCPU12側にリセットがかけられた場合
サブCPU12にリセットがかけられると、サブCPU12が再起動するまでの間、サブCPU12からの通信が途絶する。メインCPU11のメイン比較部33は、サブCPU12からの通信が途絶したときの待機時間として、サブCPU12の再起動時間より短い時間が設定されているので、サブCPU12がリセットされたときには通信NGになる。
【0076】
(K)メインCPU11側にリセットがかけられた場合
メインCPU11にリセットがかけられると、メインCPU11が再起動するまでの間、メインCPU11からの通信が途絶する。サブCPU12のサブ比較部43は、メインCPU11からの通信が途絶したときの待機時間として、メインCPU11の再起動時間より短い時間が設定されているので、メインCPU11がリセットされたときには通信NGになる。
【0077】
なお、通信異常と判定するまでに要する動作の異常の回数や通信途絶の回数は、以上の(A)から(K)に限定されず、任意の回数にすることが可能である。
【0078】
次に、電子制御装置1におけるモータ制御の概略について説明する。
移動体が自動二輪車で、モータ4が車両のエンジンのスロットルバルブの開度を制御するモータである場合、電子制御装置1のメインCPU11には、アクセルグリップの開度の情報が入力される。メインCPU11のモータ制御部21は、エンジンの吸気管の吸気圧などの情報を取得し、スロットルバルブの開度を算出する。
【0079】
一方、メインCPU11とサブCPU12は、それぞれが所定のタイミングで、互いの診断を図2から図4を参照して説明したように実施する。メインCPU11がサブCPU12の正常動作を確認したら、リレー駆動装置15と、モータドライバ16のそれぞれに許可信号を出力する。同様に、サブCPU12がメインCPU11の正常動作を確認したら、リレー駆動装置15と、モータドライバ16のそれぞれに許可信号を出力する。リレー駆動回路15に2つのCPU11,12からの許可信号が入力されると、リレーがオンになって、モータドライバ16がバッテリ2に電気的に接続される。
【0080】
また、メインCPU11は、サブCPU12が通信NGと判定した場合には、モータドライバ16にモータ駆動を停止する指令信号を出力する。一方、サブCPU12は、メインCPU11が通信NGと判定した場合には、モータドライバ16にモータ駆動を停止する指令信号を出力する。ここで、通信NGとは、前記の(A)から(K)で説明した場合に各CPU11,12で判定された結果であり、CPU11,12から取得したデータに異常があった場合に加え、CPU11,12からデータが送信されない場合も含まれる。
【0081】
なお、モータ4がスロットルバルブの開度を制御するアクチュエータである場合、各CPU11,12はスロットルバルブが閉状態になる位置でモータ4を停止させる。さらに、メインCPU11は、サブCPU12が異常状態にあるときに、燃料の点火と噴射を停止させる処理を実施させても良い。
【0082】
以上、説明したように、この実施の形態では、メインCPU11とサブCPU12の相互監視をするに当たり、モータ4の制御処理に依存しないテスト値MTEST,STESTと共通値Nとを使用するようにした。これにより、テスト値MTEST,STESTと共通値Nを用いた簡単な計算で相互監視ができるようになる。
さらに、モータ4の制御処理に依存しないテスト値MTEST,STESTと共通値Nとを使用したので、モータ4の制御処理の値を使用する場合に比べて、相互監視を行うタイミングを考慮する必要がなくなる。
これらのことから、相互監視のためのプログラムを簡略化でき、モータ4の制御処理に影響を及ぼすことはない。また、相互監視のための処理の負担を小さくできるので、処理能力の高いCPUを選択する必要がなくなる。特に、サブCPU12をメインCPU11より低スペックの装置を用いることが可能になる。
【0083】
さらに、モータ4の制御処理の依存しないテスト値MTEST,STESTと共通値N
とを使用するので、機種ごとに相互監視のプログラムを変更する必要がない。製造工程における作業効率を向上できる。
【0084】
また、この相互監視方法では、テスト値MTEST,STESTの取得プロセスや、演算値MTESTn,STESTnの算出処理や、データの送受信処理などのいずれかに不具合が生じた場合でも異常動作と判定されることになる。このため、複数の処理の動作チェックを効率良く行うことができる。
特に、テスト値MTEST,STESTに、CPU11,12のコア機能の診断結果を用いた場合には、相互監視の際に、CPU11,12のコア機能の異常を検知できるようになる。CPU11,12のコア機能は、簡単な処理であれば良く、CPU11,12に最初から搭載されているプログラムを使用しても良いし、実施の形態以外の方法であっても良い。なお、図3のフローチャートを参照して説明したコア機能の診断処理を実施すると、CPU11,12の汎用レジスタ、比較命令、分岐命令を一括して診断でき、診断処理を効率化できる。
【0085】
また、メインCPU11とサブCPU12のそれぞれで、演算処理の種類と順番を予め決定したので、2つのCPU11,12の間で送信するデータ量を減少できる。また、演算に用いる共通値Nを予め決定しておくことも2つのCPU11,12の間で送信するデータ量を減少できる。
また、例えば、1種類の演算処理では、計算結果が偶然一致する可能性があるが、複数の演算処理を順番に実施するようにしたので、相互監視の精度を向上させることができる。
【0086】
算は、ソフトウェア的に実施しても良いし、論理回路を用いて計算しても良い。
第1のCPUをサブCPUとして使用し、第2のCPUをアクチュエータの制御を実施するメインCPUとしても良い。
相互監視を行うCPUの数は、3つ以上でも良い。一方のCPUで他方のCPUの異常判定を行う。
電子制御装置1は、移動体のアクチュエータを駆動させる制御装置であれば良く、自動車や電気自動車、船外機など、その他の移動体の電子制御装置でも良い。
【符号の説明】
【0087】
1 電子制御装置(移動体の電子制御装置)
2 バッテリ
3 モータ(アクチュエータ)
11 メインCPU
12 サブCPU
31 MTEST取得部(テスト値取得部)
32 MTESTn演算部(テスト用演算部)
33 メイン比較部
41 STEST取得部(テスト値取得部)
42 STESTn演算部(テスト用演算部)
43 サブ比較部
図1
図2
図3
図4
図5