以下に図面を参照しながら、本発明の好適な実施の形態について説明する。以下の実施の形態に示す具体的な数値等は、発明の理解を容易とするための例示にすぎず、特に断る場合を除き、それに限定されるものではない。また、以下の記載及び図面では、説明の明確化のため、当業者にとって自明な事項等については、適宜、省略及び簡略化がなされている。
<発明の実施の形態1>
図1を参照して、実施の形態1にかかる倒立二輪車1の概要構成について説明する。図1は、実施の形態1にかかる倒立二輪車1の概要構成を示す図である。
倒立二輪車1は、ステップカバー3に搭乗した搭乗者が、倒立二輪車1の前後方向に荷重を作用させた際における、前後方向への倒立二輪車1の姿勢角(ピッチ角)をセンサを利用して検出し、この検出結果に基づいて、倒立二輪車1の倒立状態を維持するように左右の車輪2を駆動するモータを制御する。すなわち、倒立二輪車1は、ステップカバー3に搭乗した搭乗者が前方に荷重を作用させて倒立二輪車1を前方に傾斜させると、倒立二輪車1の倒立状態を維持するように前方に加速し、搭乗者が後方に荷重を作用させて倒立二輪車1を後方に傾斜させると、倒立二輪車1の倒立状態を維持するように後方に加速するように、左右の車輪2を駆動するモータを制御する。倒立二輪車1は、制御の安定性を確保するために、モータを制御する制御系が2重化されている。
なお、これらのモータの制御は、倒立二輪車1に搭載された制御装置10によって行われる。
続いて、図2を参照して、実施の形態1にかかる制御装置10の構成について説明する。図2を参照して、実施の形態1にかかる制御装置10の構成を示すブロック図である。
制御装置10は、マイクロコントローラ11、12(以下、「マイコン」とも呼ぶ)、インバータ13〜16、モータ17、18、回転角センサ19〜22、及びジャイロセンサセンサ23、24、及びクロック生成回路25、26を有する。
制御装置10は、倒立二輪車1の制御の安定性を確保するために、その制御系を、0系の制御系と1系の制御系とに二重化させた二重系システムとなっている。0系の制御系は、マイコン11、インバータ13、14、回転角センサ19、20、及びジャイロセンサ23を含む。1系の制御系は、マイコン12、インバータ15、16、回転角センサ21、22、及びジャイロセンサ24を含む。
マイコン11、12のそれぞれは、ジャイロセンサセンサ23、24のそれぞれから出力される角速度信号に基づいて、上述したように、倒立二輪車1の倒立状態を維持するようにモータ17、18を制御するECU(Electronic Control Unit)である。マイコン11、12のそれぞれは、CPU(Central Processing Unit)及び記憶部を有し、記憶部に格納されたプログラムを実行することによって、本実施の形態におけるマイコン11、12のそれぞれとしての処理を実行する。すなわち、マイコン11、12のそれぞれの記憶部に格納されるプログラムは、本実施の形態におけるマイコン11、12のそれぞれにおける処理を、CPUに実行させるためのコードを含む。なお、記憶部は、例えば、このプログラムや、CPUにおける処理に利用される各種情報を格納することができる任意の記憶装置を含んで構成される。記憶装置は、例えば、メモリ等である。
マイコン11は、モータ17を制御する指令値をインバータ13に出力する。また、マイコン11は、モータ18を制御する指令値をインバータ14に出力する。マイコン12は、モータ17を制御する指令値をインバータ15に出力する。また、マイコン12は、モータ18を制御する指令値をインバータ16に出力する。具体的には、マイコン11、12のそれぞれは、ジャイロセンサ23、24のそれぞれから出力される角速度信号が示す倒立二輪車1のピッチ軸周りの角速度(ピッチ角速度)を積分することで倒立二輪車1の前後方向の姿勢角(ピッチ角)を算出し、算出した姿勢角に基づいて倒立二輪車1の倒立状態を維持するようにモータ17、18を制御する指令値を生成する。
ここで、制御装置10は、ジャイロセンサ23、24に代えて、倒立二輪車1の前後方向の姿勢角(ピッチ角)を検出し、検出した姿勢角を示す姿勢角信号をマイコン11、12のそれぞれ出力する姿勢角センサを有するようにしてもよい。姿勢角センサは、例えば、加速度センサ及びジャイロセンサによって、倒立二輪車1の姿勢角を検出するように構成される。そして、マイコン11、12のそれぞれは、姿勢角センサから出力された姿勢角信号が示す姿勢角に基づいて、倒立状態を維持するようにモータ17、18を制御する指令値を生成するようにしてもよい。
また、マイコン11、12のそれぞれは、回転角センサ19、21のそれぞれから出力される、モータ17の回転角を示す回転角信号に基づいて、モータ17をフィードバック制御するように、インバータ13、15のそれぞれに対する指令値を生成する。また、マイコン11、12のそれぞれは、回転角センサ20、22のそれぞれから出力される、モータ18の回転角を示す回転角信号に基づいて、モータ18をフィードバック制御するように、インバータ14、16のそれぞれに対する指令値を生成する。
インバータ13は、マイコン11から出力された指令値に基づいて、PWM(Pulse Width Modulation)制御を行うことで、モータ17を駆動する駆動電流を生成してモータ17に供給する。インバータ14は、マイコン11から出力された指令値に基づいて、PWM制御を行うことで、モータ18を駆動する駆動電流を生成してモータ18に供給する。インバータ15は、マイコン12から出力された指令値に基づいて、PWM制御を行うことで、モータ17を駆動する駆動電流を生成してモータ17に供給する。インバータ16は、マイコン12から出力された指令値に基づいて、PWM制御を行うことで、モータ18を駆動する駆動電流を生成してモータ18に供給する。
モータ17、18のそれぞれは、二重巻線のモータである。モータ17は、インバータ13から供給される駆動電流と、インバータ15から供給される駆動電流とに基づいて駆動される。モータ17を駆動することによって、倒立二輪車1の左側の車輪2が回転する。モータ18は、インバータ14から供給される駆動電流と、インバータ16から供給される駆動電流とに基づいて駆動される。モータ18を駆動することによって、倒立二輪車1の右側の車輪2が回転する。
回転角センサ19は、モータ17の回転角を検出し、検出した回転角を示す回転角信号を生成してマイコン11に出力する。回転角センサ20は、モータ18の回転角を検出し、検出した回転角を示す回転角信号を生成してマイコン11に出力する。回転角センサ21は、モータ17の回転角を検出し、検出した回転角を示す回転角信号を生成してマイコン12に出力する。回転角センサ22は、モータ18の回転角を検出し、検出した回転角を示す回転角信号を生成してマイコン12に出力する。
ジャイロセンサ23、24のそれぞれは、搭乗者がステップカバー3に対して、倒立二輪車1の前後方向に荷重を作用させた際における、倒立二輪車1の前後方向に対する角速度(ピッチ軸周りの角速度、ピッチ角速度)を検出し、検出した角速度を示す角速度信号をマイコン11、12のそれぞれに出力する。このように、制御装置10は、倒立二輪車1の動作に関する物理量として、倒立二輪車1のピッチ角速度又はモータ17、18の回転角等を検出する各種センサ19〜24を有する。
クロック生成回路25、26のそれぞれは、クロック信号を生成して、マイコン11及びマイコン12の両方に供給する。クロック生成回路25は、通常利用される現用のクロック生成回路として動作する。クロック生成回路26は、クロック生成回路25が故障した場合における予備用(故障診断用、代替用)のクロック生成回路として動作する。マイコン11、12のそれぞれは、クロック生成回路25から供給されるクロック信号に基づいて動作し、各種処理を実行する。マイコン11、12のそれぞれは、クロック生成回路25が故障した場合には、クロック生成回路25に代えて、クロック生成回路26から供給されるクロック信号に基づいて動作し、各種処理を実行する。
例えば、クロック生成回路26は、一般的な発信器とし、クロック生成回路25は、外部発信器として、2つのクロック生成回路25、26からマイコン11、12のそれぞれにクロック信号を供給する。具体的には、クロック生成回路26が生成したクロック信号は、マイコン11、12のそれぞれのクロック信号入力ポートを介してマイコン11、12のそれぞれに入力されるようにする。また、クロック生成回路25が生成したクロック信号は、マイコン11、12のそれぞれの割り込み信号入力ポートをクロック信号入力ポートとして流用することで、それぞれの割り込み信号入力ポートを介してマイコン11、12のそれぞれに入力されるようにする。なお、クロック生成回路25を、一般的な発信器とし、クロック生成回路26を、外部発信器とするようにしてもよい。
続いて、図3を参照して、実施の形態1にかかるマイコン11、12における処理同期方法の概要について説明する。図3は、実施の形態1にかかるクロック生成回路25、26とCPU110、120の接続関係を示す図である。
マイコン11、12のそれぞれは、上述したように、倒立二輪車1の制御に関する各種処理を実行するCPU110、120のそれぞれを有する。CPU110、120のそれぞれは、所定の一定時間(処理インターバル時間)経過する毎に所定の処理を実行する。例えば、CPU110、120のそれぞれは、所定の処理として、センサ(ジャイロセンサ23、24及び回転角センサ19〜22)のそれぞれからセンサ値(角速度信号及び回転角信号)を取得するセンサ取得処理、取得したセンサ値(角速度信号及び回転角信号のそれぞれが示すピッチ角速度及びモータ17、18の回転角)に基づいて指令値を算出する姿勢制御(モータ出力計算)処理、及び、算出した指令値をインバータ13〜16のそれぞれに出力するモータ出力処理等を実行する。なお、これらの処理は、それぞれ同一タイミングで一定時間間隔毎に実施されるようにしてもよく、それぞれ異なるタイミングで一定時間間隔毎に実施されるようにしてもよい。また、これらの処理の実行間隔は、それぞれ同一時間間隔であってもよく、異なる時間間隔であってもよい。
ここで、CPU110は、CPU110における処理のタイミングを生成するタイマ111、112を有する。また、CPU120は、CPU120における処理のタイミングを生成するタイマ121、122を有する。タイマ111、112、121、122のそれぞれは、カウンタ値として時間を計測するカウンタ(図示せず)を内蔵する。
タイマ111、121のそれぞれは、クロック生成回路25からのクロック信号Clkに基づいて、カウンタのカウンタ値を更新する。タイマ121、122のそれぞれは、クロック生成回路26からのクロック信号Clkに基づいて、カウンタのカウンタ値を更新する。タイマ111、112、121、122のそれぞれは、例えば、クロック信号の立ち上がりエッジの入力タイミングで、カウンタのカウンタ値を更新する。なお、タイマ111、112、121、122のそれぞれは、例えば、クロック信号の立ち下がりエッジの入力タイミングで、カウンタのカウンタ値を更新するものであってもよい。
CPU110、120のそれぞれは、クロック生成回路25が正常に動作している場合には、そのクロック信号が供給されるタイマ111、121のそれぞれが計測する時間に基づいて、上述した一定時間間隔毎の処理を実行する。具体的には、CPU110、120のそれぞれは、タイマ111、121のそれぞれのカウンタに対して、カウンタ値の初期値を設定する。タイマ111、121のそれぞれは、クロック信号に基づいてカウンタのカウンタ値を初期値からカウントダウンしていき、カウンタ値がアンダーフローしたとき(0からさらに−1した値となったとき)に割り込み信号をCPU110、120のそれぞれの内部で発生させる。これにより、割り込み信号が、カウンタ値の初期値に応じた一定時間間隔毎に発生する。すなわち、CPU110、120のそれぞれが設定するカウンタ値の初期値は、所望の一定時間を計測するように予め定められている。CPU110、120のそれぞれは、タイマ111、121のそれぞれからの割り込み信号に基づいて、一定時間間隔毎に処理を実行する。例えば、割り込み信号が1ms毎に発生し、10ms毎に実行する必要がある処理がある場合、CPU110、120のそれぞれは、割り込み信号の発生に応じて動作して割り込み信号の発生回数をカウントすることで、10回の割り込み信号の発生をカウントする毎に、その処理を実行するようにする。また、タイマ111、121のそれぞれは、カウンタ値がアンダーフローしたときに、カウンタのカウンタ値を初期値に初期化するとともに、初期値からのカウントダウンを再開する。
CPU110、120のそれぞれは、クロック生成回路25に関する故障が検出された場合には、予備用のクロック生成回路26からのクロック信号が供給されるタイマ121、122のそれぞれが計測する時間に基づいて、上述した一定時間間隔毎の処理を実行する。すなわち、CPU110、120のそれぞれは、タイマ112、122のそれぞれからの割り込み信号に基づいて、一定時間間隔毎に処理を実行する。なお、具体的な動作は、上述したCPU110、120とタイマ111、121とによって行われる動作と同様となるため、詳細な説明は省略する。
また、制御装置10は、CPU110とCPU120とを接続するCPU間通信路200を有する。CPU110とCPU120とは、CPU間通信路200を介して相互に情報を送受信しつつ、倒立二輪車1の倒立制御を実施する。
ここで、クロック生成回路25とCPU110、120のそれぞれとは、クロック生成回路25から延び、CPU110、120のそれぞれに向かって分岐するクロック信号線によって相互に接続される。これにより、クロック生成回路25から出力されたクロック信号は、このクロック信号線を介して分配されてCPU110、120のそれぞれに供給される。また、クロック生成回路26と、CPU110、120のそれぞれとは、クロック生成回路26から延び、CPU110、120のそれぞれに向かって分岐する信号線によって相互に接続される。これにより、クロック生成回路26から出力されたクロック信号は、このクロック信号線を介して分配されてCPU110、120のそれぞれに供給される。
ここで、好ましくは、クロック生成回路25から出力されたクロック信号が同一タイミングでCPU110、120のそれぞれに到達するように、クロック生成回路25とCPU110、120のそれぞれとを接続するクロック信号線は、クロック生成回路25からCPU110までの長さと、クロック生成回路25からCPU120までの長さとが同一となるように構成される。同様に、好ましくは、クロック生成回路26から出力されたクロック信号が同一タイミングでCPU110、120のそれぞれに到達するように、クロック生成回路26とCPU110、120のそれぞれとを接続するクロック信号線は、クロック生成回路26からCPU110までの長さと、クロック生成回路26からCPU120までの長さとが同一となるように構成される。
このような構成によって、CPU110、120のそれぞれは、クロック生成回路25又は26から供給される、同一のクロック信号に基づいて動作する。すなわち、CPU110、120のそれぞれは、同一のクロック信号によって計測した時間に基づいて、上述の処理を実行する。したがって、本実施の形態によれば、CPU110、120のそれぞれが、倒立二輪車1の制御に関する処理を同期して実行することが可能となる。
続いて、図4を参照して、実施の形態1にかかる制御装置10の故障診断処理について説明する。図4は、実施の形態1にかかる制御装置10の故障診断処理を示すフローチャートである。以下、CPU110が処理を実行する場合について説明するが、CPU120においても同様の処理が実行される。
CPU110は、タイマ111(CPU120の場合はタイマ121)のそれぞれで計測される時間が、センサ取得処理及びモータ出力計算処理タイミングとなったとき、それらの処理を開始し(S1)、センサからのセンサ値の取得、及びモータに出力する指令値の計算を行う(S2)。上述したように、CPU110、120のそれぞれは、同一のクロック信号に基づいて動作するため、CPU110、120のそれぞれで実行されるセンサ取得処理及びモータ出力計算処理は、同じタイミングで実行される。
具体的には、CPU110は、センサ取得処理として、回転角センサ19、20のそれぞれから出力される回転角信号と、ジャイロセンサ23から出力される角速度信号を取得する。そして、CPU110は、モータ出力計算処理として、回転角センサ19から取得した回転角信号が示すモータ17の回転角と、ジャイロセンサ23から取得した角速度信号が示すピッチ角速度に基づいて、インバータ13に出力する指令値を計算する。また、CPU110は、モータ出力計算処理として、回転角センサ20から取得した回転角信号が示すモータ18の回転角と、ジャイロセンサ23から取得した角速度信号が示すピッチ角速度に基づいて、インバータ14に出力する指令値を計算する。
また、CPU120が実行する場合、CPU120は、センサ取得処理として、回転角センサ21、22のそれぞれから出力される回転角信号と、ジャイロセンサ24から出力される角速度信号を取得する。そして、CPU120は、モータ出力計算処理として、回転角センサ21から取得した回転角信号が示すモータ17の回転角と、ジャイロセンサ24から取得した角速度信号が示すピッチ角速度に基づいて、インバータ15に出力する指令値を計算する。また、CPU120は、モータ出力計算処理として、回転角センサ22から取得した回転角信号が示すモータ18の回転角と、ジャイロセンサ24から取得した角速度信号が示すピッチ角速度に基づいて、インバータ16に出力する指令値を計算する。
CPU110は、モータ出力処理の前に通信を行う(S3)。具体的には、CPU110は、計算した指令値を他方のCPU120に送信する。CPU110は、他方のCPU120から送信された指令値と、自身が計算した指令値とを比較する(S4)。CPU110は、比較した指令値の差が所定の閾値未満である場合、指令値が一致すると判定し、比較した指令値の差が所定の閾値以上である場合、指令値が一致しないと判定する。例えば、指令値の差を絶対値で扱う場合、閾値は0以上の任意の実数である。
ここで、CPU110、120のそれぞれが他方のCPU110又は120に送信して比較する情報は、指令値のようにセンサ値から算出した情報に限られず、センサ値であってもよい。例えば、CPU110、120のそれぞれは、センサ取得処理において、ジャイロセンサ23、24のそれぞれから取得した角速度信号が示すピッチ角速度を示すピッチ角速度情報を他方のCPU110又は120に送信するようにしてもよい。そして、CPU110は、ジャイロセンサ23から取得した角速度信号が示すピッチ角速度と、他方のCPU120から送信されたピッチ角速度情報が示すピッチ角速度(ジャイロセンサ24で検出したピッチ角速度)とを比較する。これによれば、ジャイロセンサ23又はジャイロセンサ24が故障していることを検出することができる。すなわち、比較したピッチ角速度が一致しいと判定した場合、ジャイロセンサ23又はジャイロセンサ24が故障していることになる。CPU110は、上述と同様に、比較したピッチ角速度の差が所定の閾値以上である場合、ピッチ角速度が一致しないと判定する。
また、センサ19、21のそれぞれから取得した回転角信号と、センサ20、22のそれぞれから取得した回転角信号について同様の処理を実施するようにしてもよい。これによれば、センサ19又はセンサ21、もしくは、センサ20又はセンサ22が故障していることを検出することができる。
しかしながら、好ましくは、上述したようにモータ出力処理のタイミングで指令値を送受信して比較することで、センサ以外にも、CPU及びその周辺装置の動作確認もすることができる。例えば、本実施の形態では、CPU110、120のそれぞれが、同一のクロック信号に基づいて同一タイミングでセンサ値を取得するため、センサに故障がなければ、CPU110、120のそれぞれで、同一のセンサ値が取得される。しかし、マイコン11、12のRAM(Random Access Memory)及びROM(Read Only Memory)等が故障している場合、CPU110、120のそれぞれが、同一のセンサ値に基づいて指令値を計算したとしても、指令値が一致しないことがある。それに対して、モータ出力処理のタイミングで指令値を比較することで、それを検出することができる。なお、RAMは、指令値を計算する際に、その演算内容が格納されるメモリを想定しており、ROMは、指令値を計算する際に、それに用いるパラメータが予め格納されているメモリを想定している。
比較した指令値が一致すると判定した場合(S5:Yes)、CPU110は、処理を継続する(S6)。例えば、CPU110は、モータ出力処理として、計算した指令値をインバータ13、14及びインバータ15、16のそれぞれに出力する。
比較した指令値が一致しないと判定した場合(S5:No)、何らかの故障が発生していることになる(S7)。この場合は、指令値の算出に用いるセンサ値を提供する回転角センサ19〜22及びジャイロセンサ23、24等のいずれかが故障しており、CPU110、120のそれぞれで算出された指令値が不一致となっていることになる。そのため、CPU110は、倒立二輪車1を倒立制御しつつ停止させる安全制御(制動制御)を実施する。また、安全制御を実施する場合は、さらに、CPU110が、安全制御の実施を指示する指示情報をCPU120に送信するようにし、CPU120も、その指示情報の受信に応じて安全制御を実施するようにしてもよい。
以上に説明したように、本実施の形態では、CPU110が利用する時間(タイマ111又は112のカウンタ値)と、CPU120が利用する時間(タイマ121又は122のカウンタ値)を同期することができる。そのため、CPU110とCPU120のそれぞれで実行される、倒立二輪車1の制御に関する処理の同期の精度を向上することができる。ここで、上述した故障診断処理を例に挙げて、その効果について説明する。
例えば、図5Aに示すように、CPU110とCPU120が同期して処理を実行することができていない場合には、CPU110が判断するセンサ取得処理の実行タイミングAT01〜AT09と、CPU120が判断するセンサ取得処理の実行タイミングAT11〜AT19とがズレてしまう。この場合、上述の故障診断処理において、CPU110がセンサから取得するセンサ値と、CPU120がセンサからセンサ値と差が大きくなってしまう。そのため、CPU110、120のそれぞれでセンサ値から算出する指令値の差も大きくなってしまう。この場合、ステップS5において指令値が一致しないと誤判定してしまうことを防止するために、上述の閾値を大きくとる必要がある。しかしながら、その閾値を大きくとってしまうと、故障を検出する精度が低下してしまう。また、CPU110、120のそれぞれは、それぞれの差の大きい指令値に基づいて、ズレたタイミングでモータ出力処理を行うため、倒立二輪車1がぎくしゃくした動きとなってしまい、制御の効率が悪くなってしまう。
それに対して、本実施の形態によれば、図5Bに示すように、CPU110とCPU120が同期して処理を実行することができるため、CPU110が判断するセンサ取得処理の実行タイミングAT01〜AT09と、CPU120が判断するセンサ取得処理の実行タイミングAT11〜AT19とを同期することができる。よって、上述の故障診断処理において、CPU110がセンサから取得するセンサ値と、CPU120がセンサからセンサ値と差を低減することができる。そのため、CPU110、120のそれぞれでセンサ値から算出する指令値の差も低減することができる。これによれば、ステップS6において、上述の閾値を大きくとる必要がないため、故障を検出する精度を向上することができる。また、CPU110、120のそれぞれは、それぞれの差を低減した指令値に基づいて、同一のタイミングでモータ出力処理を行うことができるため、倒立二輪車1の制御の安定性を向上することができ、制御の効率も向上することができる。
このように、制御系が多重化された倒立二輪車1では、倒立二輪車1を安定して倒立制御するためには、それぞれの制御系が同時に、センサ取得処理、モータ出力計算処理、及びモータ出力処理を実施する必要があるというシビアな要求がある。これに対して、本実施の形態によれば、倒立二輪車1(同軸二輪移動体)を倒立制御する複数の制御系(CPU)間において処理の同期を可能にすることで、このシビアな要求を満足することができる。すなわち、本実施の形態によれば、倒立二輪車1の制御の安定性の向上という点で顕著な効果を奏することができる。
続いて、図6を参照して、実施の形態1にかかるクロック生成回路25の故障診断処理について説明する。図6は、実施の形態1にかかるクロック生成回路25の故障診断処理を示すフローチャートである。CPU110、120のそれぞれは、以下に説明する動作を、例えば、所定の一定時間間隔毎に実施する。以下、CPU110が処理を実行する場合について説明するが、CPU120においても同様の処理が実行される。
CPU110は、クロック生成回路25から供給されるクロック信号Clkに基づいた割り込みが定期的に発生しているか否かを確認する(S11)。
具体的には、CPU110は、タイマ111のカウンタ値と、タイマ112のカウンタ値とを比較する。CPU110は、比較したカウンタ値の差が所定の閾値未満である場合、カウンタ値が一致すると判定し、比較したカウンタ値の差が所定の閾値以上である場合、カウンタ値が一致しないと判定する。例えば、カウンタ値の差を絶対値で扱う場合、閾値は0以上の任意の整数である。CPU110は、カウンタ値が一致しないと判定した場合、割り込みが定期的に発生していないと判定する。CPU110は、カウンタ値が一致すると判定した場合、割り込みが定期的に発生していると判定する。
ここで、好ましくは、CPU110は、タイマ111のカウンタ値のカウントダウンが、タイマ112のカウンタ値よりも遅れる形で、カウンタ値が一致しないと判定した場合に、割り込みが定期的に発生していないと判定するようにするとよい。すなわち、CPU110は、カウンタ値が一致しない場合であっても、タイマ111のカウンタ値のカウントダウンが、タイマ112のカウンタ値よりも進んでいるときには、割り込みが定期的に発生していると判定するとよい。タイマ111のカウンタ値のカウントダウンが、タイマ112のカウンタ値よりも遅れているときの方が、タイマ111のカウンタ値のカウントダウンが正常に行われておらず、所望の一定時間間隔で定期的に割り込み信号を発生することができていない蓋然性が高いからである。
また、CPU120が実行する場合、CPU120は、タイマ121のカウンタ値と、タイマ122のカウンタ値とを比較する。なお、具体的な判定方法については、上述したCPU110が実行する場合と同様であるため、詳細な説明は省略する。
CPU110は、通信時に、CPU110、120の両方が動作しているか否かと、CPU110、120のそれぞれの動作タイミングが一致しているか否かを確認する(S12)。
具体的には、CPU110は、他方のCPU120との通信において、他方のCPU1120からの通信の途絶を検出した場合、他方のCPU120が動作しておらず、CPU110、120の両方が動作していないと判定する。CPU110は、他方のCPU120との通信において、他方のCPU120からの通信の途絶を検出していない場合、他方のCPU120が動作しており、CPU110、120の両方が動作していると判定する。
この通信として、例えば、図4のステップS3における通信を利用してもよく、その他の任意の通信を利用してもよい。例えば、図4のステップS3において、CPU110は、他方のCPU120から指令値が送信されなかった場合に、他方のCPU120からの通信が途絶したと判定するようにしてもよい。また、例えば、CPU110、120のそれぞれが、他方のCPU110又は120に所定の一定時間(ハートビートインターバル時間)間隔毎にハートビート信号を送信するようにし、CPU110は、他方のCPU120から、所定の規定時間(ハートビートインターバル時間よりも長い時間)の間、ハートビート信号が送信されなかった場合に、他方のCPU120からの通信が途絶したと判定するようにしてもよい。
また、CPU110は、図4のステップS5において、比較した指令値が一致しないと判定した場合、CPU110、120のそれぞれの動作タイミングが一致していないと判定し、比較した指令値が一致すると判定した場合、CPU110、120のそれぞれの動作タイミングが一致していると判定する。ここで、センサ等が故障しており、指令値が一致しなくなっていることも考えられる。したがって、好ましくは、CPU110は、自CPU110に含まれるタイマ111、タイマ112のそれぞれのカウンタ値が一致せず、かつ、比較した指令値が一致しないと判定した場合に、CPU110、120のそれぞれの動作タイミングが一致していないと判定するようにするとよい。なお、CPU110は、比較したカウンタ値の差が所定の閾値未満である場合、カウンタ値が一致すると判定し、比較したカウンタ値の差が所定の閾値以上である場合、カウンタ値が一致しないと判定する。例えば、カウンタ値の差を絶対値で扱う場合、閾値は0以上の任意の整数である。
CPU110は、クロック生成回路25に関する故障が発生しているか否かを判定する(S13)。具体的には、上述したステップS11、S12の確認結果に基づいた、以下の(1)〜(3)の少なくとも1つの判定基準によって、クロック生成回路25に関する故障が発生しているか否かを判定するようにする。
(1)CPU110は、ステップS11において、割り込みが定期的に発生していないと判定した場合には、クロック生成回路25に関する故障が発生していると判定する。この場合、クロック生成回路25、又は、クロック生成回路25とCPU110を接続するクロック信号線が故障しており、正常にクロック信号が供給されていない可能性があるからである。また、CPU110は、ステップS11において、割り込みが定期的に発生していると判定した場合には、クロック生成回路25に関する故障が発生していないと判定する。
(2)CPU110は、ステップS12において、CPU110、120の両方が動作していないと判定した場合、クロック生成回路25に関する故障が発生していると判定する。この場合、クロック生成回路25と、他方のCPU120とを接続するクロック信号線が故障しており、他方のCPU120に正常にクロック信号が供給されていない可能性があるからである。また、CPU110は、ステップS12において、CPU110、120の両方が動作していると判定した場合、クロック生成回路25に関する故障が発生していないと判定する。
(3)CPU110は、ステップS12において、CPU110、120のそれぞれの動作タイミングが一致していないと判定した場合、クロック生成回路25に関する故障が発生していると判定する。この場合、クロック生成回路25と、CPU110又は120とを接続するクロック信号線が故障しており、CPU110又は120にクロック信号が供給されていない可能性があるからである。また、CPU110は、ステップS12において、CPU110、120のそれぞれの動作タイミングが一致していると判定した場合、クロック生成回路25に関する故障が発生していないと判定する。
なお、上記の(1)〜(3)の2つ以上の判定基準を利用する場合は、それらうちのいずれかの判定基準において、クロック生成回路25に関する故障が発生していると判定される場合、クロック生成回路25に関する故障が発生している(S13:Yes)と判定するようにすればよい。
クロック生成回路25に関する故障が発生していると判定した場合(S13:Yes)、CPU110は、その動作に用いるクロック生成回路を、クロック生成回路25から代替用のクロック生成回路26に切り替える(S14)。これは、例えば、CPU110が、その動作に用いるクロック信号を、クロック生成回路25からのクロック信号から、代替用のクロック生成回路26からのクロック信号に切り替えるとともに、クロック信号の切り替えを指示する切替指示信号を他方のCPU120に出力するようにする。そして、CPU120は、CPU110からの切替指示信号の出力に応じて、その動作に用いるクロック信号を、クロック生成回路25からのクロック信号から、代替用のクロック生成回路26からのクロック信号に切り替えるようにすればよい。これにより、CPU110、120のそれぞれで利用するクロック生成回路を同時に切り替える。また、このときに、CPU110、120のそれぞれで、処理のタイミングの計測(割り込み回数のカウント)をリセットすることで、処理の同期タイミングのズレも防止するようにしてもよい。
これにより、CPU110、120のそれぞれは、代替用のクロック生成回路26から供給されるクロック信号に基づいて動作するタイマ112、122のそれぞれが計測する時間に基づいての処理を継続する。また、この場合、クロック生成回路25に関する故障が発生していることになるため、CPU110、120のそれぞれは、クロック生成回路26から供給されるクロック信号に基づいて、倒立二輪車1の安全制御を行うようにしてもよい。
クロック生成回路25に関する故障が発生していないと判定した場合(S13:No)、現用のクロック生成回路25での処理を継続する(S15)。
ここで、ステップS11における割り込みが定期的に発生しているか否かの確認は、ウォッチドックタイマを利用して確認するようにしてもよい。具体的には、制御装置10がCPU110、120を監視するウォッチドックタイマを有するようにする。CPU110、120のそれぞれは、割り込み信号の発生に応じて動作する毎に、動作していることを通知する通知信号をウォッチドックタイマに送信するようにする。そして、ウォッチドックタイマは、CPU110又はCPU120の動作停止を検出した場合、割り込みが定期的に発生していないと判定する。この場合、ステップS14では、ウォッチドックタイマが、割り込みが定期的に発生していないと判定した場合に、切替指示信号をCPU110、120のそれぞれに出力するようにすればよい。なお、ウォッチドックタイマは、所定の規定時間(割り込み信号が発生する間隔よりも長い時間)の間、CPU110又は120からの通知信号が送信されなかった場合、そのCPUが動作停止していると判定する。ここで、ウォッチドックタイマは、CPU110、120のうち、いずれか1つを監視するようにしてもよいが、好ましくは、上述したようにCPU110、120の両方を監視することで、クロック生成回路25に関する故障の検出精度を向上することができる。また、制御装置10は、CPU110、120のそれぞれに対応するように、2つのウォッチドックタイマを有するようにしてもよい。
以上に説明したように、本実施の形態では、CPU110及びCPU120は、クロック生成回路25又は26が生成したクロック信号が分配されて、それぞれに供給される。これによれば、CPU110及びCPU120は、同一のクロック信号に基づいて動作することになるため、CPU110、120のそれぞれで実行される、倒立二輪車1(同軸二輪移動体)の制御に関する処理の同期の精度を向上することができる。
<発明の実施の形態2>
続いて、本発明の実施の形態2について説明する。本実施の形態2にかかる倒立二輪車1の概要構成については、図1を参照して説明した実施の形態1にかかる倒立二輪車1の概要構成と同様であるため、その説明を省略する。
続いて、図7を参照して、実施の形態2にかかる制御装置10の構成について説明する。図7を参照して、実施の形態2にかかる制御装置10の構成を示すブロック図である。
本実施の形態2に係る制御装置10は、実施の形態1に係る制御装置10と比較して、さらに、外部通信CPU27及び通信モジュール28を有する。
外部通信CPU27は、外部端末(図示せず)と無線通信又は有線通信を行うゲートウェイとなるCPUである。外部通信CPU27は、マイコン11、12のそれぞれと通信可能に接続されている。外部通信CPU27は、マイコン11、12から倒立二輪車1の状態を示す状態情報の出力を受ける。外部通信CPU27は、受け取った状態情報を、通信モジュール28を介して外部端末に送信する。また、外部通信CPU27は、外部端末から通信モジュール28を介して受信した情報を、マイコン11、12に転送することも可能である。倒立二輪車1の状態は、例えば、センサ値、故障の検出状況、及び、マイコン11、12がセンサ値に基づいて算出した走行距離又は走行速度等である。
ここで、外部端末は、制御装置10と無線通信又は有線通信によって通信可能な情報処理装置である。また、外部端末は、例えば、液晶パネル等の表示装置を有しており、倒立二輪車1から受信した状態情報が示す倒立二輪車1の状態を表示装置に表示する。外部端末は、例えば、パーソナルコンピュータ、タブレット端末、又はスマートフォン等である。制御装置10と外部端末との間の通信には、無線通信及び有線通信のいずれを採用してもよい。無線通信を採用した場合には、その通信方式として、無線通信における任意の通信方式を採用するようにしてよい。有線通信を採用した場合にも、その通信方式として、有線通信における任意の通信方式を採用するようにしてよい。
通信モジュール28は、外部通信CPU27から出力された情報を、採用された通信方式に従った形式に変換して外部端末に送信する。通信モジュール28は、外部端末から受信した情報を、制御装置10において処理可能な形式に変換して外部通信CPU27に出力する。
続いて、図8を参照して、実施の形態2にかかる故障箇所特定方法の概要について説明する。図8は、実施の形態2にかかるCPU110、120と外部通信CPU27の接続関係を示す図である。
マイコン11、12のそれぞれは、上述したように、倒立二輪車1の制御に関する各種処理を実行するCPU110、120のそれぞれを有する。CPU110、120のそれぞれは、他方のCPU110又は120による自CPU110又は120の故障を検出可能とさせるために、所定の一定時間(ハートビートインターバル時間)経過する毎に、CPU間通信路200を介してハートビート信号を他方のCPU110又は120に送信する。そして、CPU110、120のそれぞれは、所定の規定時間(ハートビートインターバル時間よりも長い時間)の間、CPU間通信路200を介して他方のCPU110又は120からハートビート信号を受信しなかった場合、CPU間通信路200における通信断が発生したと判定する。
また、本実施の形態2にかかる制御装置10は、CPU110、120のそれぞれと、外部通信CPU27とを接続する外部通信路210を有する。すなわち、CPU110、120のそれぞれと、外部通信CPU27とは、外部通信路210を介して相互に情報を送受信することができる。
ここで、外部通信路210の接続形態として、例えば、以下の(1)〜(3)のうち、いずれかの接続形態をとることができる。
(1)外部通信CPU27、CPU110、及びCPU120を相互にバス結合
(2)外部通信CPU27とCPU110をリンク結合、外部通信CPU27とCPU120をリンク結合
(3)外部通信CPU27とCPU110をリンク結合、外部通信CPU27とCPU120をリンク結合、CPU110とCPU120とをリンク結合
(1)の接続形態では、外部通信CPU27、CPU110、及びCPU120がバス結合される。この接続形態の場合、外部通信CPU27、CPU110、及びCPU120は、相互に通信することができる。また、あるCPUが送信した情報は、他の全てのCPUによって取得される。すなわち、CPUが送信した情報は、ブロードキャストで送信される。具体的には、CPU110が送信した情報は、外部通信CPU27及びCPU120によって受信される。CPU120が送信した情報は、外部通信CPU27及びCPU110によって受信される。外部通信CPU27が送信した情報は、CPU110及びCPU120によって受信される。
(2)の接続形態では、外部通信CPU27とCPU110がリンク接続され、外部通信CPU27とCPU120がリンク接続される。この接続形態の場合、外部通信CPU27は、CPU110、120のそれぞれと通信することができるが、CPU110とCPU120は、通信することができない。具体的には、CPU110は、外部通信CPU27及びCPU120のうち、外部通信CPU27のみに情報を送信することができる。CPU120は、外部通信CPU27及びCPU110のうち、外部通信CPU27のみに情報を送信することができる。外部通信CPU27は、CPU110とCPU120の両方に情報を送信することができる。なお、この接続形態の場合は、外部通信CPU27がCPU110、120のそれぞれから送信された情報を他方のCPU110又は120に転送することで、CPU110とCPU120との間で通信を行うことが可能である。
(3)の接続形態では、外部通信CPU27とCPU110がリンク接続され、外部通信CPU27とCPU120がリンク接続され、CPU110とCPU120がリンク接続される。この接続形態の場合、外部通信CPU27、CPU110、及びCPU120は、相互に通信することができる。具体的には、CPU110は、外部通信CPU27とCPU120の両方に情報を送信することができる。CPU120は、外部通信CPU27とCPU110の両方に情報を送信することができる。外部通信CPU27は、CPU110とCPU120の両方に情報を送信することができる。すなわち、この接続形態の構成は、CPU110とCPU120とが2本の通信路(CPU間通信路200と、外部通信路210におけるリンク接続)で接続されている構成と等価となる。
以上に説明した(1)〜(3)の接続形態によれば、CPU110とCPU120は、CPU間通信路200の他に、外部通信路210を介しても相互に通信を行うことが可能である。本実施の形態2では、CPU110、120のそれぞれは、ハートビート信号を他方のCPU110又は120に外部通信路210にも送受信する。これによって、CPU間通信路200におけるハートビート信号の通信断を検出した場合に、それがCPU間通信路200の故障によって発生しているのか、他方のCPU110、120の故障によって発生しているのかを切り分け可能となる。
続いて、図9を参照して、実施の形態2にかかる制御装置10の故障診断処理について説明する。図9は、実施の形態2にかかる制御装置10の故障診断処理を示すフローチャートである。以下、CPU110が処理を実行する場合について説明するが、CPU120においても同様の処理が実行される。
CPU110は、CPU間通信路200の通信断が発生しているか否かを判定する(S21)。具体的には、CPU110は、上述した所定の規定時間以上、他方のCPU120からCPU間通信路200を介したハートビート信号を受信していない場合、CPU間通信路200の通信断が発生していると判定する。また、CPU110は、所定の規定時間内に、他方のCPU120からCPU間通信路200を介したハートビート信号を受信している場合、CPU間通信路200の通信断が発生していないと判定する。また、他の通信を利用して、CPU間通信路200の通信断を検出するようにしてもよい。例えば、図4のステップS3において、CPU110は、他方のCPU120から指令値が送信されなかった場合に、CPU間通信路200の通信断が発生していると判定するようにしてもよい。
CPU間通信路200の通信断が発生していると判定した場合(S21:Yes)、CPU110は、外部通信路210の通信断が発生しているか否かを判定する(S22)。具体的には、CPU110は、所定の規定時間以上、他方のCPU120から外部通信路210を介したハートビート信号を受信していない場合、外部通信路210の通信断が発生していると判定する。また、CPU110は、所定の規定時間内に、他方のCPU120から外部通信路210を介したハートビート信号を受信している場合、外部通信路210の通信断が発生していないと判定する。また、他の通信を利用して、CPU間通信路200の通信断を検出するようにしてもよい。
外部通信路210の通信断が発生していると判定した場合(S22:Yes)、CPU間通信路200及び外部通信路210の両方で他方のCPU110又は120との通信が途絶していることになるため、他方のCPU120が動作していないことになる。この場合、CPU110は、自CPU110のみで倒立二輪車1を倒立制御しつつ走行させる制御を継続する、又は、安全制御を実施する(S23)。なお、これらの制御のうち、いずれを実施するかは、予め任意に定めるようにしてよい。
外部通信路210の通信断が発生していないと判定した場合(S22:No)、CPU間通信路200及び外部通信路210のうち、CPU間通信路200のみで通信断が発生していることになるため、CPU間通信路200が故障していることになる。この場合、CPU110は、外部通信路210を利用して他方のCPU110、120と通信をしつつ、倒立二輪車1を倒立制御しつつ走行させる制御を継続する、又は、安全制御を実施する(S24)。なお、これらの制御のうち、いずれを実施するかは、予め任意に定めるようにしてよい。例えば、CPU110は、倒立二輪車1を倒立制御しつつ走行させる制御を継続する場合は、さらに、外部通信路210の通信断が発生したときに、安全制御を実施するようにしてもよい。また、安全制御を実施する場合は、さらに、CPU110が、安全制御の実施を指示する指示情報を、外部通信路210を介してCPU120に送信するようにし、CPU120も、その指示情報の受信に応じて安全制御を実施するようにしてもよい。
CPU間通信路200の通信断が発生していないと判定した場合(S21:No)、他方のCPU110、120が正常に動作していることになる。すなわち、2つのCPU110、120は、正常に動作していることになる(S25)。この場合、CPU110は、外部通信路210の通信断が発生しているか否かを判定する(S26)。
外部通信路210の通信断が発生していると判定した場合(S26:Yes)、CPU間通信路200及び外部通信路210のうち、外部通信路210のみで通信断が発生していることになるため、外部通信路210が故障していることになる。この場合、倒立二輪車1は、正常動作することができ、外部端末との通信ができないだけの状態である。そのため、CPU110は、倒立二輪車1を倒立制御しつつ走行させる制御を継続する(S27)。また、CPU110は、安全制御(制動制御)を実施するようにしてもよく、倒立二輪車1を倒立制御しつつ走行させる制御を継続しつつ、光及び音等の少なくとも1つを利用して、外部端末との通信ができない旨をユーザに通知するようにしてもよい。
ここで、ユーザへの通知に関しては、例えば、光を出力する発光装置、及び、音を出力する出音装置のうち、少なくとも1つを倒立二輪車1に有するようにする。そして、CPU110、120のそれぞれが、ユーザへの通知を指示する指示信号を発光装置及び出音装置の少なくとも1つに出力し、発光装置及び出音装置が、指示信号の出力に応じて光及び音の少なくとも1つを出力するようにすればよい。発光装置は、例えば、ライトであり、出音装置は、例えば、スピーカーである。発光装置及び出音装置は、通知部として機能する。また、CPU110は、倒立二輪車1を倒立制御しつつ走行させる制御を継続する場合は、さらに、CPU間通信路200の通信断が発生したときに、安全制御を実施するようにしてもよい。また、安全制御を実施する場合は、さらに、CPU110が、安全制御の実施を指示する指示情報を、CPU間通信路200を介してCPU120に送信するようにし、CPU120も、その指示情報の受信に応じて安全制御を実施するようにしてもよい。
外部通信路210の通信断が発生していないと判定した場合(S26:No)、外部端末との通信機能が正常に動作していることになる(S28)。すなわち、2つのCPU110、120、CPU間通信路200、及び外部通信路210は、いずれも正常である。そのため、CPU110は、倒立二輪車1を倒立制御しつつ走行させる制御を継続する。
以上に説明したように、本実施の形態2では、CPU110、120のそれぞれは、CPU間通信路200における他方のCPU110又は120からの通信の途絶と、外部通信路210における他方のCPU110又は120からの通信の途絶とを判定し、判定結果に対応する倒立二輪車1(同軸二輪移動体)の制御を実施するようにしている。
これによれば、他方のCPU110又は120、CPU間通信路200、及び外部通信路210のうち、いずれが故障しているのかを特定し、特定した故障箇所に適した倒立二輪車1の制御を実施することができる。
また、本実施の形態2では、外部に情報を送信するために設けられている外部通信路210を流用して、外部通信路210を介したCPU110及びCPU120間の通信も確認することで故障箇所を特定可能としている。したがって、新たな通信路を設けることなく、故障箇所を特定可能としているため、コストの増大を抑制することができる。
<発明の実施の形態3>
続いて、本発明の実施の形態3について説明する。本実施の形態3にかかる倒立二輪車1の概要構成については、図1を参照して説明した実施の形態1にかかる倒立二輪車1の概要構成と同様であるため、その説明を省略する。また、実施の形態3にかかる制御装置10の構成についても、図2を参照して説明した実施の形態1にかかる倒立二輪車1の概要構成と同様であるため、その説明を省略する。
続いて、図10を参照して、実施の形態3にかかる故障箇所特定方法の概要について説明する。図10は、実施の形態3にかかるCPU110、120間の接続関係を示す図である。
マイコン11、12のそれぞれは、上述したように、倒立二輪車1の制御に関する各種処理を実行するCPU110、120のそれぞれを有する。CPU110、120のそれぞれは、他方のCPU110又は120による自CPU110又は120の故障を検出可能とさせるために、所定の一定時間(ハートビートインターバル時間)経過する毎に、CPU間通信路200を介してハートビート信号を他方のCPU110又は120に送信する。そして、CPU110、120のそれぞれは、所定の規定時間(ハートビートインターバル時間よりも長い時間)の間、CPU間通信路200を介して他方のCPU110又は120からハートビート信号を受信しなかった場合、CPU間通信路200における通信断が発生したと判定する。
また、本実施の形態3にかかる制御装置10は、CPU110とCPU120を接続する信号通信路220、221を有する。信号通信路220、221は、CPU間通信路200よりも少ない所定数の信号線により構成される。信号通信路221は、CPU120からCPU110への一方向に電気信号(情報)を送信可能な通信路である。信号通信路220は、CPU110からCPU120への一方向に電気信号(情報)を送信可能な通信路である。
ここで、信号通信路220、221の構成として、例えば、以下の(1)及び(2)のうち、いずれかの構成をとることができる。
(1)Hi又はLoの値を表現可能な1本の信号線
(2)第1の電圧と第2の電圧をアナログ値で表現可能な数本(例えば3本)の信号線
(1)の構成では、CPU110、120のそれぞれは、所定の一定時間(信号切替時間)経過することに、信号通信路220又は221を介して他方のCPU110又は120に送信する電気信号の値をHi及びLoの間で相互に切り替える。
(2)の構成では、CPU110、120のそれぞれは、所定の一定時間(信号切替時間)経過する毎に、信号通信路220又は221を介して他方のCPU110又は120に通知する電気信号(アナログ値)を第1の電圧(例えば3V)と第2の電圧(例えば5V)との間で相互に切り替える。また、厳密には、制御装置10は、信号通信路220のCPU110側にDA変換器(図示せず)を有し、信号通信路220のCPU120側にAD変換器(図示せず)を有している。CPU110からCPU120に送信される情報は、DA変換器を介してアナログ値に変換されてCPU110から送信され、AD変換器を介してデジタル値に変換されたCPU120で受信される。また、制御装置10は、信号通信路221のCPU120側にDA変換器(図示せず)を有し、信号通信路221のCPU110側にAD変換器(図示せず)を有している。CPU120からCPU110に送信される情報は、DA変換器を介してアナログ値に変換されてCPU120から送信され、AD変換器を介してデジタル値に変換されたCPU110で受信される。
以上に説明したように、CPU110、120それぞれは、CPU110とCPU120間通信路200の他に、信号通信路220、221によっても他方のCPU110又は120に対して通信を行うことが可能である。これによって、CPU間通信路200におけるハートビート信号の通信断を検出した場合に、それがCPU間通信路200の故障によって発生しているのか、他方のCPU110、120の故障によって発生しているのかを切り分け可能となる。
続いて、図11を参照して、実施の形態にかかる制御装置10の故障診断処理について説明する。図11は、実施の形態にかかる制御装置10の故障診断処理を示すフローチャートである。以下、CPU110が処理を実行する場合について説明するが、CPU120においても同様の処理が実行される。
CPU110は、CPU間通信路200の通信断が発生しているか否かを判定する(S31)。ここでの判定方法については、図9のステップS21で説明した方法と同様であるため、説明を省略する。
CPU間通信路200の通信断が発生していると判定した場合(S31:Yes)、CPU110は、信号通信路221(CPU120の場合は信号通信路220)の電気信号が停止しているか否かを判定する(S32)。具体的には、CPU110は、所定の規定時間(信号切替時間よりも長い時間)以上、他方のCPU120によって信号通信路221の電気信号の値が切り替えられていない場合、信号通信路221の電気信号が停止していると判定する。また、CPU110は、所定の規定時間(信号切替時間よりも長い時間)内に、他方のCPU120によって信号通信路221の電気信号の値が切り替えられている場合、信号通信路221の電気信号が停止していないと判定する。
信号通信路221の電気信号が停止していると判定した場合(S32:Yes)、CPU間通信路200及び信号通信路221の両方で他方のCPU120からの通信が途絶していることになるため、他方のCPU120が動作していないことになる。この場合、CPU110は、自CPU110のみで倒立二輪車1を倒立制御しつつ走行させる制御を継続する、又は、安全制御(制動制御)を実施する(S33)。なお、これらの制御のうち、いずれを実施するかは、予め任意に定めるようにしてよい。
信号通信路221の電気信号が停止していないと判定した場合(S32:No)、CPU間通信路200及び信号通信路221のうち、CPU間通信路200のみで通信断が発生していることになるため、CPU間通信路200が故障していることになる。この場合、CPU110は、倒立二輪車1を倒立制御しつつ走行させる制御を継続する、又は、安全制御(制動制御)を実施する(S34)。なお、これらの制御のうち、いずれを実施するかは、予め任意に定めるようにしてよい。例えば、CPU110は、倒立二輪車1を倒立制御しつつ走行させる制御を継続する場合は、さらに、信号通信路221(CPU120の場合は信号通信路220)の通信断が発生したときに、安全制御(制動制御)を実施するようにしてもよい。また、安全制御を実施する場合は、さらに、CPU110が、安全制御の実施を指示する指示情報として上述の第1の電圧及び第2の電圧とは異なる電圧値を、信号通信路220を介してCPU120に送信するようにし、CPU120も、その指示情報の受信に応じて安全制御を実施するようにしてもよい。
CPU間通信路200の通信断が発生していないと判定した場合(S31:No)、他方のCPU120が正常に動作していることになる。すなわち、2つのCPU110、120は、正常に動作していることになる(S35)。この場合、信号通信路221(CPU120の場合は信号通信路220)の電気信号が停止しているか否かを判定する(S36)。
信号通信路221の電気信号が停止していると判定した場合(S36:Yes)、CPU間通信路200及び信号通信路221のうち、信号通信路221のみで通信断が発生していることになるため、信号通信路221が故障していることになる。この場合、倒立二輪車1は、正常動作することができ、CPU110、120間の電気信号が動作していないだけの状態である。そのため、CPU110は、倒立二輪車1を倒立制御しつつ走行させる制御を継続する(S37)。また、CPU110は、安全制御(制動制御)を実施するようにしてもよく、倒立二輪車1を倒立制御しつつ走行させる制御を継続しつつ、光及び音等の少なくとも1つを利用して、電気信号が動作していない旨をユーザに通知するようにしてもよい。なお、ユーザへの通知の具体的な通知方法については、図9のステップS37で説明した方法と同様であるため、詳細な説明は省略する。また、CPU110は、倒立二輪車1を倒立制御しつつ走行させる制御を継続する場合は、さらに、CPU間通信路200の通信断が発生したときに、安全制御(制動制御)を実施するようにしてもよい。また、安全制御を実施する場合は、さらに、CPU110が、安全制御の実施を指示する指示情報を、CPU間通信路200を介してCPU120に送信するようにし、CPU120も、その指示情報の受信に応じて安全制御を実施するようにしてもよい。
信号通信路221の電気信号が停止していないと判定した場合(S36:No)、CPU110、120間の電気信号が正常に動作していることになる(S38)。すなわち、2つのCPU110、120、CPU間通信路200、及び信号通信路220、221は、いずれも正常である。そのため、CPU110は、倒立二輪車1を倒立制御しつつ走行させる制御を継続する。
以上に説明したように、本実施の形態3では、CPU110、120のそれぞれは、CPU間通信路200における他方のCPU110又は120からの通信の途絶と、信号通信路220又は221における他方のCPU110又は120からの通信の途絶とを判定し、判定結果に対応する倒立二輪車1(同軸二輪移動体)の制御を実施するようにしている。
これによれば、他方のCPU110又は120、CPU間通信路200、及び信号通信路220、221のうち、いずれが故障しているのかを特定し、特定した故障箇所に適した倒立二輪車1の制御を実施することができる。
また、本実施の形態3では、CPU間通信路200よりも少ない信号線数で構成される信号通信路220、221によって、CPU110及びCPU120間の通信も確認することで故障箇所を特定可能としている。したがって、新たにCPU間通信路200と同等の通信路を設ける場合と比較して、コストの増大を抑制することができる。
<発明の他の実施の形態>
以上に説明した本実施の形態1〜3では、本発明を制御系が2重化された2重系システムに適用した場合について例示したが、3重系又は4重系等の多重系システムに適用することも可能である。ここで、3重系システムに適用した場合に、クロック生成回路とCPUとを以下に説明するような接続関係とした構成とすることで、処理の同期を実現しつつ、共通原因故障を回避して、堅牢性を向上したシステムを構築することもできる。
すなわち、図12に示すように、3重系システムを構成してもよい。この場合、制御装置10は、実施の形態1に係る制御装置10と比較して、さらに、マイコン90及びクロック生成回路91を有する。この場合、制御装置10は、マイコン90の制御系に対応するジャイロセンサ、インバータ、及び回転角センサを同様に有するようにする必要があることは自明であるため、詳細な説明は省略する。
マイコン90は、マイコン11、12と同様に、センサ(ジャイロセンサ及び回転角センサ)からのセンサ値に基づいて、倒立二輪車1の倒立状態を維持するようにモータ17、18を制御するECUである。
クロック生成回路91は、クロック信号を生成して、マイコン90に供給する。クロック生成回路91は、通常利用される現用のクロック生成回路として動作する。マイコン90は、クロック生成回路91から供給されるクロック信号に基づいて動作し、各種処理を実行する。マイコン90は、クロック生成回路91が故障した場合には、クロック生成回路91に代えて、クロック生成回路26から供給されるクロック信号に基づいて動作し、各種処理を実行する。例えば、クロック生成回路91は、外部発信器として、マイコン90にクロック信号を供給する。
マイコン90は、倒立二輪車1の制御に関する各種処理を実行するCPU900を有する。CPU900は、CPU900における処理のタイミングを生成するタイマ901、902を有する。タイマ901は、クロック生成回路91からのクロック信号Clkに基づいて、カウンタのカウンタ値を更新する。タイマ902は、クロック生成回路91からのクロック信号Clkに基づいて、カウンタのカウンタ値を更新する。CPU900は、タイマ901又は902からの割り込み信号に基づいて、一定時間間隔毎に処理を実行する。なお、具体的な動作は、上述したCPU110、120とタイマ111、112、121、122とによって行われる動作と同様となるため、詳細な説明は省略する。
また、制御装置10は、CPU120とCPU900とを接続するCPU間通信路201を有する。CPU間通信路201は、例えば、所定数の信号線により構成される。CPU120とCPU900は、CPU間通信路201を介して相互に情報を送受信しつつ、倒立二輪車1の倒立制御を実施する。
クロック生成回路91とCPU900とは、クロック信号線によって相互に接続される。これにより、クロック生成回路91から出力されたクロック信号は、このクロック信号線を介してCPU900のそれぞれに供給される。また、図12に示す構成では、クロック生成回路26と、CPU110、120、900のそれぞれとは、クロック生成回路26から延び、CPU110、120、900のそれぞれに向かって分岐する信号線によって相互に接続される。これにより、クロック生成回路26から出力されたクロック信号は、このクロック信号線を介して分配されてCPU110、120、900のそれぞれに供給される。
ここで、好ましくは、クロック生成回路26から出力されたクロック信号が同一タイミングでCPU110、120、900のそれぞれに到達するように、クロック生成回路26とCPU110、120、900のそれぞれとを接続するクロック信号線は、クロック生成回路26からCPU110までの長さと、クロック生成回路26からCPU120までの長さと、クロック生成回路26からCPU900までの長さが同一となるように構成される。
以下、説明の明確化のため、CPU11は「CPU−A」とも呼び、CPU12は「CPU−B」とも呼び、CPU90は「CPU−C」とも呼び、クロック生成回路25は「CLK1」とも呼び、クロック生成回路91は「CLK2」とも呼び、クロック生成回路26は「CLK(代替用)」とも呼ぶ。
続いて、図13を参照して、他の実施の形態にかかる制御装置10の第1の故障診断処理について説明する。図13は、他の実施の形態にかかる制御装置10の第1の故障診断処理を示すフローチャートである。
CPU−A、CPU−B、及びCPU−Cのそれぞれは、所定の一定時間間隔毎にCLK(代替用)を利用して故障診断をしつつ、倒立二輪車1の制御に関する処理を同期して実行する(S41)。具体的には、故障診断として、CPU−Aは、タイマ111のカウンタ値とタイマ112のカウンタ値を比較し、CPU−Bは、タイマ121のカウンタ値とタイマ122のカウンタ値を比較し、CPU−Cは、タイマ901のカウンタ値とタイマ902のカウンタ値を比較する。
CPU−A、CPU−B、及びCPU−Cのそれぞれは、CLK1とCLK(代替用)との間の故障診断結果が正常であり、CLK2とCLK(代替用)との間の故障診断結果が異常であると判定した場合、CLK2が故障したと判断する(S42)。具体的には、CPU−Aが、タイマ111のカウンタ値とタイマ112のカウンタ値が一致していると判定し(又は、CPU−Bが、タイマ121のカウンタ値とタイマ122のカウンタ値が一致していると判定し)、かつ、CPU−Cが、タイマ901のカウンタ値とタイマ902のカウンタ値が一致していないと判定した場合がこれに該当する。この場合、CLK2によって更新されるタイマ901のカウンタ値のみが他のカウンタ値と一致していないことになるからである。なお、この判定は、CPU−A、CPU−B、及びCPU−Cのそれぞれが、それぞれのカウンタ値の比較結果をCPU間通信路200、201を介して相互に送受信して、それぞれのCPUで行うようにしてもよく、いずれか1つのCPUが、他のCPUからカウンタ値の比較結果をCPU間通信路200、201を介して受信して、そのCPUのみで判定するようにしてもよい。
このように判定した場合、CPU−A、CPU−B、及びCPU−Cのそれぞれは、その動作に用いるクロック生成回路を、CLK1又はCLK2からCLK(代替用)に切り替えて、倒立二輪車1の制御に関する処理の同期実行を継続する(S43)。これは、例えば、上記の判定したCPU−A、CPU−B、又はCPU−Cが、その動作に用いるクロック信号を、CLK1又はCLK2からのクロック信号から、CLK(代替用)からのクロック信号に切り替えるとともに、クロック信号の切り替えを指示する切替指示信号をCPU間通信路200、201を介して他の2つのCPUに出力するようにする。そして、他のCPUのそれぞれは、切替指示信号の出力に応じて、その動作に用いるクロック信号を、CLK1又はCLK2からのクロック信号から、CLK(代替用)からのクロック信号に切り替えるようにすればよい。これにより、CPU110、900のそれぞれで利用するクロック生成回路を同時に切り替える。また、このときに、CPU110、120、900のそれぞれで、処理のタイミングの計測(割り込み回数のカウント)をリセットすることで、処理の同期タイミングのズレも防止するようにしてもよい。
また、この場合、CLK2の故障が発生していることになるため、CPU110、120、900のそれぞれは、CLK(代替用)から供給されるクロック信号に基づいて、倒立二輪車1の安全制御を行うようにしてもよい(S44)。
なお、CPU−A、CPU−B、及びCPU−Cのそれぞれは、CLK1とCLK(代替用)との間の故障診断結果が異常であり、CLK2とCLK(代替用)との間の故障診断結果が正常であると判定した場合、CLK1が故障したと判断することになる。具体的には、CPU−Aが、タイマ111のカウンタ値とタイマ112のカウンタ値が一致していないと判定し(又は、CPU−Bが、タイマ121のカウンタ値とタイマ122のカウンタ値が一致していないと判定し)、かつ、CPU−Cが、タイマ901のカウンタ値とタイマ902のカウンタ値が一致していると判定した場合がこれに該当する。
このように判定した場合も、上述と同様の処理(代替用のクロック生成回路26に切り替え)を行うため、詳細な説明は省略する。
続いて、図14を参照して、他の実施の形態にかかる制御装置10の第2の故障診断処理について説明する。図14は、他の実施の形態にかかる制御装置10の第2の故障診断処理を示すフローチャートである。
CPU−A、CPU−B、及びCPU−Cのそれぞれは、所定の一定時間間隔毎にCLK(代替用)を利用して故障診断をしつつ、倒立二輪車1の制御に関する処理を同期して実行する(S51)。具体的な故障診断方法については、図13のステップS41と同様であるため、説明を省略する。
CPU−A、CPU−B、及びCPU−Cのそれぞれは、CLK1とCLK(代替用)との間の故障診断結果が異常であり、CLK2とCLK(代替用)との間の故障診断結果が異常であると判定した場合、CLK(代替用)が故障したと判断する(S52)。具体的には、CPU−Aが、タイマ111のカウンタ値とタイマ112のカウンタ値が一致していないと判定し(又は、CPU−Bが、タイマ121のカウンタ値とタイマ122のカウンタ値が一致していないと判定し)、かつ、CPU−Cが、タイマ901のカウンタ値とタイマ902のカウンタ値が一致していないと判定した場合がこれに該当する。この場合、CLK(代替用)によって更新される全てのカウンタ値(タイマ112のカウンタ値、タイマ122のカウンタ値、及びタイマ902のカウンタ値)が他のカウンタ値と一致していないことになるからである。具体的な判定方法については、図13のステップS42と同様であるため、説明を省略する。
このように判定した場合、CPU−A、CPU−B、及びCPU−Cのそれぞれは、CLK(代替用)を利用した故障診断を中断して、倒立二輪車1の制御に関する処理の同期実行を継続する(S53)。また、この場合、CLK(代替用)の故障が発生していることになるため、CPU110、120、900のそれぞれは、上述と同様に、CLK1、CLK2のそれぞれから供給されるクロック信号に基づいて、倒立二輪車1の安全制御を行うようにしてもよい(S44)。
なお、CPU−A、CPU−B、及びCPU−Cのそれぞれは、上述した各カウンタ値の比較において、比較したカウンタ値の差が所定の閾値未満である場合、カウンタ値が一致すると判定し、比較したカウンタ値の差が所定の閾値以上である場合、カウンタ値が一致しないと判定する。例えば、カウンタ値の差を絶対値で扱う場合、閾値は0以上の任意の整数である。
以上に説明したように、他の実施の形態では、CLK1、CLK2、及びCLK(代替用)によって更新されるタイマのカウンタ値のそれぞれを相互に比較するようにしているため、故障しているクロック生成回路を正確に特定することが可能である。
例えば、上記処理では、クロック生成回路25に関する異常として、クロック生成回路91に対応するタイマ901が計測する時間(カウンタ値)と、クロック生成回路26に対応するタイマ901が計測する時間(カウンタ値)との差が所定の閾値未満である場合に、クロック生成回路25に対応するタイマ111又は121が計測する時間(カウンタ値)と、クロック生成回路26に対応するタイマ112又は122が計測する時間(カウンタ値)との差が所定の閾値以上となったことを検出するようにしている。これによれば、クロック生成回路25に対応するタイマ111又は121が計測する時間(カウンタ値)のみが不一致となっていることもって判定をしているため、クロック生成回路25に関する異常が発生しているとの判定結果の正確性が保障される。
また、他の実施の形態に係る構成によれば、共通原因故障を回避することができる。例えば、実施の形態1では、クロック生成回路25が故障し、突然、全くクロック信号が出力されなくなってしまった場合には、CPU110、120の両方が動作することができず、クロック生成回路の切り替えも行うことができなくなってしまう。それに対して、他の実施の形態によれば、CPU900によってCPU110、120の両方の停止(クロック生成回路25からクロック信号が全く供給されなくなってしまう故障)を検出して、クロック生成回路の切り替えを実施することが可能となる。
これは、例えば、CPU110、120のそれぞれが、CPU間通信路200、201を介してCPU900にハートビート信号を送信するようにし、CPU900が、CPU110、120の両方から、所定の規定時間(ハートビートインターバル時間よりも長い時間)の間、ハートビート信号が送信されなかった場合に、CPU110、120の両方が停止していると判定するようにする。そして、CPU900は、CPU110、120の両方の停止を検出した場合に、上述の処理と同様に、CPU110、120、及び900のそれぞれで動作するクロック生成回路をクロック生成回路26に切り替えるようにすればよい。なお、異常に説明した処理では、CPU110とCPU900の間で信号又は情報を送受信する場合には、CPU120が転送を行うことで、CPU110とCPU900が相互に信号又は情報をCPU間通信路200、201を介して送受信することができるようにすればよい。
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
上記実施の形態では、本発明の適用対象とする同軸二輪移動体が、2つの車輪を有する倒立二輪車1である場合について例示したが、車輪の数は、これに限られない。本発明の適用対象とする同軸二輪移動体は、例えば、車輪の数が1つ又は3つ以上の同軸二輪移動体であってもよい。
上記実施の形態では、CPU110及びCPU120の両方が故障診断処理を実施するようにしているが、いずれか一方のみが実施するようにしてもよい。しかしながら、好ましくは、本実施の形態で説明したようにCPU110及びCPU120の両方で故障診断処理を実施するようにすることで、故障の検出精度を向上することができる。
上記実施の形態2、3では、先にCPU間通信路200の通信断が発生しているか否かを判定する場合について例示しているが、先に外部通信路210又は信号通信路220、
221の通信断が発生しているか否かを判定するようにしてもよい。すなわち、CPU間通信路200と外部通信路210(又は信号通信路220、221)の両方で通信断が発生している場合には、他方のCPUが故障していると判断し、CPU間通信路200のみで通信断が発生している場合には、CPU間通信路200が故障していると判断し、外部通信路210(又は信号通信路220、221)のみで通信断が発生している場合には、外部通信路210(又は信号通信路220、221)が故障していると判断するようにしていれば、通信路の判定順序は特に制限されるものではない。