(57)【要約】      （修正有）【課題】複数のＣＰＵのそれぞれで実行される、同軸二輪移動体の制御に関する処理の同期の精度を向上すること。【解決手段】クロック信号を生成する第１クロック生成部２７及び第２クロック生成部２８と、第１のクロック信号に基づいて時間を計測する第１のタイマ１１１と、第２のクロック信号に基づいて時間を計測する第２のタイマ１２１と、第１のタイマ１１１が計測する時間に基づいて同軸二輪移動体を制御する第１のＣＰＵ１１０と、第２のタイマ１２１が計測する時間に基づいて同軸二輪移動体を制御する第２のＣＰＵ１２０を備える。第２のＣＰＵ１２０は、第１の所定事象の検出時から第２の所定事象の検出時までの第１のタイマ１１１の経過時間と、第１の所定事象の検出時から第２の所定事象の検出時までの第２のタイマ１２１の経過時間の比率に基づいて、第２のタイマ１２１が計測する時間を第１のタイマ１１１で計測した場合における時間に補正する。【選択図】図３
2014104928.tif 000002
【特許請求の範囲】
【請求項１】
制御に応じて移動する同軸二輪移動体であって、
第１のクロック信号を生成する第１のクロック生成部と、
第２のクロック信号を生成する第２のクロック生成部と、
前記第１のクロック信号に基づいて時間を計測する第１のタイマと、
前記第２のクロック信号に基づいて時間を計測する第２のタイマと、
前記第１のタイマが計測する時間に基づいて、前記同軸二輪移動体を制御する第１のＣＰＵと、
前記第２のタイマが計測する時間に基づいて、前記同軸二輪移動体を制御する第２のＣＰＵと、を備え、
前記第１のＣＰＵは、第１の所定事象の検出時における前記第１のタイマの時間と、前記第１の所定事象よりも後に発生する第２の所定事象の検出時における前記第１のタイマの時間とに関する時間情報を前記第２のＣＰＵに送信し、
前記第２のＣＰＵは、前記第１のＣＰＵから送信された時間情報から得られる前記第１の所定事象の検出時から前記第２の所定事象の検出時までの前記第１のタイマにおける経過時間と、前記第１の所定事象の検出時から前記第２の所定事象の検出時までの前記第２のタイマにおける経過時間との比率に基づいて、前記第２のタイマが計測する時間を前記第１のタイマで計測した場合における時間に補正する、
同軸二輪移動体。
【請求項２】
前記第１のタイマは、第１のカウンタを有し、前記時間の計測として、前記第１のクロック信号に基づいて前記第１のカウンタを初期値からの所定値までカウントダウンして割り込みを発生する動作を繰り返し、
前記第２のタイマは、第２のカウンタを有し、前記時間の計測として、前記第２のクロック信号に基づいて前記第２のカウンタを初期値からの所定値までカウントダウンして割り込みを発生する動作を繰り返し、
前記第１のＣＰＵは、前記第１のタイマからの割り込みの発生に応じて動作して、前記同軸二輪移動体を制御し、
前記第２のＣＰＵは、前記第２のタイマからの割り込みの発生に応じて動作して、前記同軸二輪移動体を制御し、
前記第１のタイマにおける経過時間は、前記第１のカウンタのカウント数であり、
前記第２のタイマにおける経過時間は、前記第２のカウンタのカウント数であり、
前記第２のＣＰＵは、前記第２のタイマが計測する時間の補正として、前記第１のカウンタのカウント数と、前記第２のカウンタのカウント数との比率に基づいて、前記第１のカウンタを初期値から所定値までカウントダウンするまでの時間と、前記第２のカウンタを初期値から所定値までカウントダウンするまでの時間とが同一となるように、前記第２のカウンタの初期値を補正する、
請求項１に記載の同軸二輪移動体。
【請求項３】
前記第２のＣＰＵは、さらに、前記第１のＣＰＵから送信された時間情報の受信に応じて、前記第１のカウンタのカウント数と、前記第２のカウンタのカウント数との比率に基づいて、前記第２の所定事象の検出時から前記時間情報の受信時までの前記第２のカウンタのカウント数から、前記時間情報の受信時における前記第１のカウンタのカウンタ値を推定し、推定した前記第１のカウンタのカウンタ値に基づいたカウンタ値を、前記第２のカウンタに設定する、
請求項２に記載の同軸二輪移動体。
【請求項４】
前記第２のＣＰＵは、所定の回数、前記第２のカウンタが前記補正後の初期値からの所定値までカウントダウンする毎に、前記第２のカウンタの補正後の初期値の実演算値と、前記第２のカウンタの補正後の初期値の実設定値との誤差の蓄積をカウント数として算出し、算出したカウント数で前記誤差の蓄積を打ち消すように前記実設定値を補正する、
請求項２又は３に記載の同軸二輪移動体。
【請求項５】
前記同軸二輪移動体は、さらに、
搭乗者の一方の足が載置される第１のステップ部と、
前記搭乗者の他方の足が載置される第２のステップ部と、
前記第１のステップ部に対する足の載置を検出している場合に、当該足の載置を通知する第１のＯＮ信号を前記第１のＣＰＵ及び前記第２のＣＰＵに出力する第１の検出部と、
前記第２のステップ部に対する足の載置を検出している場合に、当該足の載置を通知する第２のＯＮ信号を前記第１のＣＰＵ及び前記第２のＣＰＵに出力する第２の検出部と、を備え、
前記第１のＣＰＵ及び前記第２のＣＰＵは、前記第１の所定事象及び前記第２の所定事象のそれぞれとして、前記第１の検出部からの第１のＯＮ信号及び前記第２の検出部からの第２のＯＮ信号の出力の有無に基づいて、前記搭乗者の一方の足が載置されたこと、前記搭乗者の両方の足が載置されたこと、前記搭乗者の一方の足が載置されなくなったこと、及び、前記搭乗者の両方の足が載置されなくなったことのうち、いずれかの相互に異なる事象を検出する、
請求項１乃至４のいずれか１項に記載の同軸二輪移動体。
【請求項６】
前記第１のＣＰＵ及び前記第２のＣＰＵは、前記第１の所定事象として、前記搭乗者の一方の足が載置されたことを検出し、
前記第１のＣＰＵ及び前記第２のＣＰＵは、前記第２の所定事象として、前記搭乗者の両方の足が載置されたことを検出し、
前記第１のＣＰＵ及び前記第２のＣＰＵは、前記第１の検出部からの第１のＯＮ信号及び前記第２の検出部からの第２のＯＮ信号の出力の有無に基づいて、前記搭乗者の両方の足が載置されていること判定しているときに、前記同軸二輪移動体の制御を行う、
請求項５に記載の同軸二輪移動体。
【請求項７】
前記第１のＣＰＵ及び前記第２のＣＰＵは、前記第１の所定事象として、前記搭乗者の一方の足が載置されなくなったことを検出し、
前記第１のＣＰＵ及び前記第２のＣＰＵは、前記第２の所定事象として、前記搭乗者の両方の足が載置されなくなったことを検出し、
前記同軸二輪移動体は、前記搭乗者が搭乗していない場合に、前記同軸二輪移動体に対する操作に応じて、前記第１のＣＰＵ及び前記第２のＣＰＵが前記同軸二輪移動体を制御する牽引モードを有する、
請求項５に記載の同軸二輪移動体。
【請求項８】
第１のクロック信号によって第１のタイマが計測する時間に基づいて動作する第１のＣＰＵと、第２のクロック信号によって第２のタイマが計測する時間に基づいて動作する第２のＣＰＵとよって同軸二輪移動体を制御する制御方法あって、
前記第１のＣＰＵが、第１の所定事象の検出時における前記第１のタイマの時間と、前記第１の所定事象よりも後に発生する第２の所定事象の検出時における前記第１のタイマの時間とに関する時間情報を前記第２のＣＰＵに送信するステップと、
前記第２のＣＰＵが、前記第１のＣＰＵから送信された時間情報から得られる前記第１の所定事象の検出時から前記第２の所定事象の検出時までの前記第１のタイマにおける経過時間と、前記第１の所定事象の検出時から前記第２の所定事象の検出時までの前記第２のタイマにおける経過時間との比率に基づいて、前記第２のタイマが計測する時間を前記第１のタイマで計測した場合における時間に補正するステップと、
を備えた制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、同軸二輪移動体及びその制御方法に関し、特に、複数のＣＰＵで同軸二輪移動体を制御する技術に関する。
【背景技術】
【０００２】
特許文献１〜３には、多重化されたＣＰＵによって制御される車両が開示されている。例えば、特許文献１に開示の個人輸送車は、ＡグループとＢグループの冗長コンポーネントのそれぞれに属するＡプロセッサとＢプロセッサによって、２つの車輪のそれぞれと連結された２つのモータを制御する。
【０００３】
しかしながら、多重化されたＣＰＵのそれぞれで実行する処理のタイミングは、それぞれのＣＰＵに供給されるクロックに依存する。したがって、別々のクロックで動作するＣＰＵは、クロックの精度及びクロックの供給開始タイミングのズレ等によって、それぞれのＣＰＵで実行する処理を完全に同期することは困難である。同軸二輪移動体の安定性を向上する上で、複数のＣＰＵのそれぞれで実行される、同軸二輪移動体の制御に関する処理を同期して実行することは非常に重要である。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許出願公開第２００３／０１４６０２５号公報
【特許文献２】国際公開第２０１１／０８９６５６号
【特許文献３】特開２００９−１８７５６１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明は、上述した知見に基づいてなされたものであって、複数のＣＰＵのそれぞれで実行される、同軸二輪移動体の制御に関する処理の同期の精度を向上することができる同軸二輪移動体及びその制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の第１の態様にかかる同軸二輪移動体は、制御に応じて移動する同軸二輪移動体であって、第１のクロック信号を生成する第１のクロック生成部と、第２のクロック信号を生成する第２のクロック生成部と、前記第１のクロック信号に基づいて時間を計測する第１のタイマと、前記第２のクロック信号に基づいて時間を計測する第２のタイマと、前記第１のタイマが計測する時間に基づいて、前記同軸二輪移動体を制御する第１のＣＰＵと、前記第２のタイマが計測する時間に基づいて、前記同軸二輪移動体を制御する第２のＣＰＵと、を備え、前記第１のＣＰＵは、第１の所定事象の検出時における前記第１のタイマの時間と、前記第１の所定事象よりも後に発生する第２の所定事象の検出時における前記第１のタイマの時間とに関する時間情報を前記第２のＣＰＵに送信し、前記第２のＣＰＵは、前記第１のＣＰＵから送信された時間情報から得られる前記第１の所定事象の検出時から前記第２の所定事象の検出時までの前記第１のタイマにおける経過時間と、前記第１の所定事象の検出時から前記第２の所定事象の検出時までの前記第２のタイマにおける経過時間との比率に基づいて、前記第２のタイマが計測する時間を前記第１のタイマで計測した場合における時間に補正するものである。
【０００７】
本発明の第２の態様にかかる制御方法は、第１のクロック信号によって第１のタイマが計測する時間に基づいて動作する第１のＣＰＵと、第２のクロック信号によって第２のタイマが計測する時間に基づいて動作する第２のＣＰＵとよって同軸二輪移動体を制御する制御方法あって、前記第１のＣＰＵが、第１の所定事象の検出時における前記第１のタイマの時間と、前記第１の所定事象よりも後に発生する第２の所定事象の検出時における前記第１のタイマの時間とに関する時間情報を前記第２のＣＰＵに送信するステップと、前記第２のＣＰＵが、前記第１のＣＰＵから送信された時間情報から得られる前記第１の所定事象の検出時から前記第２の所定事象の検出時までの前記第１のタイマにおける経過時間と、前記第１の所定事象の検出時から前記第２の所定事象の検出時までの前記第２のタイマにおける経過時間との比率に基づいて、前記第２のタイマが計測する時間を前記第１のタイマで計測した場合における時間に補正するステップと、を備えたものである。
【発明の効果】
【０００８】
上述した本発明の各態様によれば、複数のＣＰＵのそれぞれで実行される、同軸二輪移動体の制御に関する処理の同期の精度を向上することができる同軸二輪移動体及びその制御方法を提供することができる。
【図面の簡単な説明】
【０００９】
【図１】実施の形態に係る倒立二輪車の概要構成を示す図である。
【図２】実施の形態に係る制御装置の構成を示すブロック図である。
【図３】実施の形態に係るマイコンの詳細構成を示す図である。
【図４】クロック信号のズレを説明するための図である。
【図５】実施の形態に係る時間同期方法の概要を説明するための図である。
【図６】実施の形態に係る倒立二輪車の時間同期処理を示すフローチャートである。
【図７】実施の形態に係る時間同期方法の詳細を説明するための図である。
【図８Ａ】実施の形態の効果を説明するための図である。
【図８Ｂ】実施の形態の効果を説明するための図である。
【図９】傾き補正における問題点を説明するための図である。
【図１０】実施の形態に係る傾き補正の微調整を示す図である。
【発明を実施するための形態】
【００１０】
以下に図面を参照しながら、本発明の好適な実施の形態について説明する。以下の実施の形態に示す具体的な数値等は、発明の理解を容易とするための例示にすぎず、特に断る場合を除き、それに限定されるものではない。また、以下の記載及び図面では、説明の明確化のため、当業者にとって自明な事項等については、適宜、省略及び簡略化がなされている。
【００１１】
＜発明の実施の形態＞
図１を参照して、実施の形態にかかる倒立二輪車１の概要構成について説明する。図１は、実施の形態にかかる倒立二輪車１の概要構成を示す図である。
【００１２】
倒立二輪車１は、ハンドル４を把持してステップカバー３に搭乗した搭乗者（ユーザ）が、倒立二輪車１の前後方向に荷重を作用させた際における、前後方向への倒立二輪車１の姿勢角（ピッチ角）をセンサを利用して検出し、この検出結果に基づいて、倒立二輪車１の倒立状態を維持するように左右の車輪２を駆動するモータを制御する。すなわち、倒立二輪車１は、ステップカバー３に搭乗した搭乗者が前方に荷重を作用させて倒立二輪車１を前方に傾斜させると、倒立二輪車１の倒立状態を維持するように前方に加速し、搭乗者が後方に荷重を作用させて倒立二輪車１を後方に傾斜させると、倒立二輪車１の倒立状態を維持するように後方に加速するように、左右の車輪２を駆動するモータを制御する。倒立二輪車１は、制御の安定性を確保するために、モータを制御する制御系が２重化されている。
【００１３】
また、倒立二輪車１は、ユーザによる倒立二輪車１の牽引を容易にするために、上記制御を行う乗車モードから牽引モードへの切り替えが可能となっている。倒立二輪車１は、走行停止して搭乗者が降車した後に、倒立二輪車１に備え付けられた牽引モード切り替えボタン（図示せず）がユーザから押下されたときに、牽引モードに切り替わる。牽引モード時には、倒立二輪車１は、ユーザがハンドル４を把持して倒立二輪車１を前方に傾斜させると、前方に加速し、ユーザがハンドル４を把持して倒立二輪車１を後方に傾斜させると、後方に加速するように、左右の車輪２を駆動するモータを制御する。すなわち、前後方向への倒立二輪車１の姿勢角（ピッチ角）をセンサを利用して検出し、この検出結果に基づいて、左右の車輪２を駆動するモータを制御する点は、乗車モードと同様である。
【００１４】
しかし、牽引モードでは、あまり倒立状態を維持しようとすると、かえってユーザが倒立二輪車１を牽引しづらくなってしまう。そのため、倒立二輪車１は、乗車モードにおいて、ある姿勢角に傾斜した場合よりも、牽引モードにおいて、それと同じ姿勢角に傾斜した場合の方が加速度が低くなるように、左右の車輪２を駆動するモータを制御する。
【００１５】
なお、これらのモータの制御は、倒立二輪車１に搭載された制御装置１０によって行われる。
【００１６】
続いて、図２を参照して、実施の形態にかかる制御装置１０の構成について説明する。図２を参照して、実施の形態にかかる制御装置１０の構成を示すブロック図である。
【００１７】
制御装置１０は、マイクロコントローラ１１、１２（以下、「マイコン」とも呼ぶ）、インバータ１３〜１６、モータ１７、１８、回転角センサ１９〜２２、及びジャイロセンサセンサ２３、２４、クロック生成回路２５、２６、及びステップスイッチ（以下、「ステップＳＷ」とも呼ぶ）２７、２８を有する。
【００１８】
制御装置１０は、倒立二輪車１の制御の安定性を確保するために、その制御系を、０系の制御系と１系の制御系とに二重化させた二重系システムとなっている。０系の制御系は、マイコン１１、インバータ１３、１４、回転角センサ１９、２０、ジャイロセンサ２３、及びクロック生成回路２５を含む。１系の制御系は、マイコン１２、インバータ１５、１６、回転角センサ２１、２２、ジャイロセンサ２４、及びクロック生成回路２６を含む。
【００１９】
マイコン１１、１２のそれぞれは、ジャイロセンサセンサ２３、２４のそれぞれから出力される角速度信号に基づいて、上述したように、倒立二輪車１の倒立状態を維持するようにモータ１７、１８を制御するＥＣＵ（Electronic Control Unit）である。マイコン１１、１２のそれぞれは、ＣＰＵ（Central Processing Unit）及び記憶部を有し、記憶部に格納されたプログラムを実行することによって、本実施の形態におけるマイコン１１、１２のそれぞれとしての処理を実行する。すなわち、マイコン１１、１２のそれぞれの記憶部に格納されるプログラムは、本実施の形態におけるマイコン１１、１２のそれぞれにおける処理を、ＣＰＵに実行させるためのコードを含む。なお、記憶部は、例えば、このプログラムや、ＣＰＵにおける処理に利用される各種情報を格納することができる任意の記憶装置を含んで構成される。記憶装置は、例えば、メモリ等である。
【００２０】
マイコン１１は、モータ１７を制御する指令値をインバータ１３に出力する。また、マイコン１１は、モータ１８を制御する指令値をインバータ１４に出力する。マイコン１２は、モータ１７を制御する指令値をインバータ１５に出力する。また、マイコン１２は、モータ１８を制御する指令値をインバータ１６に出力する。具体的には、マイコン１１、１２のそれぞれは、ジャイロセンサ２３、２４のそれぞれから出力される角速度信号が示す倒立二輪車１のピッチ軸周りの角速度（ピッチ角速度）を積分することで倒立二輪車１の前後方向の姿勢角（ピッチ角）を算出し、算出した姿勢角に基づいて倒立二輪車１の倒立状態を維持するようにモータ１７、１８を制御する指令値を生成する。
【００２１】
ここで、制御装置１０は、ジャイロセンサ２３、２４に代えて、倒立二輪車１の前後方向の姿勢角（ピッチ角）を検出し、検出した姿勢角を示す姿勢角信号をマイコン１１、１２のそれぞれ出力する姿勢角センサを有するようにしてもよい。姿勢角センサは、例えば、加速度センサ及びジャイロセンサによって、倒立二輪車１の姿勢角を検出するように構成される。そして、マイコン１１、１２のそれぞれは、姿勢角センサから出力された姿勢角信号が示す姿勢角に基づいて、倒立状態を維持するようにモータ１７、１８を制御する指令値を生成するようにしてもよい。
【００２２】
また、マイコン１１、１２のそれぞれは、回転角センサ１９、２１のそれぞれから出力される、モータ１７の回転角を示す回転角信号に基づいて、モータ１７をフィードバック制御するように、インバータ１３、１５のそれぞれに対する指令値を生成する。また、マイコン１１、１２のそれぞれは、回転角センサ２０、２２のそれぞれから出力される、モータ１８の回転角を示す回転角信号に基づいて、モータ１８をフィードバック制御するように、インバータ１４、１６のそれぞれに対する指令値を生成する。
【００２３】
インバータ１３は、マイコン１１から出力された指令値に基づいて、ＰＷＭ（Pulse Width Modulation）制御を行うことで、モータ１７を駆動する駆動電流を生成してモータ１７に供給する。インバータ１４は、マイコン１１から出力された指令値に基づいて、ＰＷＭ制御を行うことで、モータ１８を駆動する駆動電流を生成してモータ１８に供給する。インバータ１５は、マイコン１２から出力された指令値に基づいて、ＰＷＭ制御を行うことで、モータ１７を駆動する駆動電流を生成してモータ１７に供給する。インバータ１６は、マイコン１２から出力された指令値に基づいて、ＰＷＭ制御を行うことで、モータ１８を駆動する駆動電流を生成してモータ１８に供給する。
【００２４】
モータ１７、１８のそれぞれは、二重巻線のモータである。モータ１７は、インバータ１３から供給される駆動電流と、インバータ１５から供給される駆動電流とに基づいて駆動される。モータ１７を駆動することによって、倒立二輪車１の左側の車輪２が回転する。モータ１８は、インバータ１４から供給される駆動電流と、インバータ１６から供給される駆動電流とに基づいて駆動される。モータ１８を駆動することによって、倒立二輪車１の右側の車輪２が回転する。
【００２５】
回転角センサ１９は、モータ１７の回転角を検出し、検出した回転角を示す回転角信号を生成してマイコン１１に出力する。回転角センサ２０は、モータ１８の回転角を検出し、検出した回転角を示す回転角信号を生成してマイコン１１に出力する。回転角センサ２１は、モータ１７の回転角を検出し、検出した回転角を示す回転角信号を生成してマイコン１２に出力する。回転角センサ２２は、モータ１８の回転角を検出し、検出した回転角を示す回転角信号を生成してマイコン１２に出力する。
【００２６】
ジャイロセンサ２３、２４のそれぞれは、搭乗者がステップカバー３に対して、倒立二輪車１の前後方向に荷重を作用させた際における、倒立二輪車１の前後方向に対する角速度（ピッチ軸周りの角速度、ピッチ角速度）を検出し、検出した角速度を示す角速度信号をマイコン１１、１２のそれぞれに出力する。
【００２７】
クロック生成回路（クロック生成部）２５、２６のそれぞれは、クロック信号を生成して、マイコン１１、１２のそれぞれに供給する。マイコン１１、１２のそれぞれは、クロック生成回路２５、２６のそれぞれから供給されたクロック信号に基づいたタイミングで各種処理を実行する。
【００２８】
ステップＳＷ（検出部）２７、２８のそれぞれは、搭乗者が倒立二輪車１に搭乗したことを検出する装置である。ステップＳＷ２７、２８のぞれぞれは、左右のステップカバー（ステップ部）３のそれぞれの下方に配置される。ステップＳＷ２７、２８は、搭乗者がステップカバー３に乗ることによって搭乗者から加えられた荷重によってステップカバー３が押し下げられた際に、ステップカバー３の下面から加えられる押圧によって押下される。ステップＳＷ２７、２８のそれぞれは、ステップカバー３から押下されている間、押下されていることを通知するＯＮ信号をマイコン１１、１２に出力する。すなわち、ステップＳＷ２７が出力するＯＮ信号は、左のステップカバー３に搭乗者が左足を乗せていることを通知する信号として機能し、ステップＳＷ２８が出力するＯＮ信号は、右のステップカバー３に搭乗者が右足を乗せていることを通知する信号として機能する。
【００２９】
マイコン１１、１２のそれぞれは、ステップＳＷ２７、２８からＯＮ信号の出力を受けている間、倒立二輪車１の倒立制御を実施する。これによって、搭乗者がステップカバー３に乗って倒立二輪車１に搭乗している間だけ、倒立二輪車１が倒立制御されて走行することになる。マイコン１１、１２は、ステップＳＷ２７、２８のうち、少なくともいずれか１つからＯＮ信号の出力を受けているときに、倒立二輪車１の倒立制御を実施するようにしてもよい。しかしながら、好ましくは、搭乗者が搭乗中に倒立二輪車１が走行を開始してしまうことを防止するために、両方のステップＳＷ２７、２８からＯＮ信号の出力を受けているときに、倒立二輪車１の倒立制御を実施するとよい。これによれば、搭乗者が倒立二輪車１に搭乗する際の安全性を、より向上することができる。
【００３０】
また、マイコン１１、１２のそれぞれは、ステップＳＷ２７、２８の両方からＯＮ信号の出力を受けていないときに、牽引モード切り替えボタンがユーザから押下された場合に、牽引モードに切り替わり、モータ１７、１８を制御する。
【００３１】
続いて、図３を参照して、実施の形態にかかるマイコン１１、１２の詳細構成について説明する。図３は、実施の形態にかかるマイコン１１、１２の詳細構成を示す図である。
【００３２】
マイコン１１、１２のそれぞれは、上述したように、倒立二輪車１の制御に関する各種処理を実行するＣＰＵ１１０、１２０のそれぞれを有する。ＣＰＵ１１０、１２０のそれぞれは、所定の一定時間（処理インターバル時間）経過する毎に所定の処理を実行する。例えば、ＣＰＵ１１０、１２０のそれぞれは、所定の処理として、センサ（ジャイロセンサ２３、２４及び回転角センサ１９〜２２）のそれぞれからセンサ値（角速度信号及び回転角信号）を取得するセンサ取得処理、取得したセンサ値（角速度信号及び回転角信号のそれぞれが示すピッチ角速度及びモータ１７、１８の回転角）に基づいて指令値を算出する姿勢制御処理、及び、算出した指令値をインバータ１３〜１６のそれぞれに出力するモータ出力処理等を実行する。なお、これらの処理は、それぞれ同一タイミングで一定時間間隔毎に実施されるようにしてもよく、それぞれ異なるタイミングで一定時間間隔毎に実施されるようにしてもよい。また、これらの処理の実行間隔は、それぞれ同一時間間隔であってもよく、異なる時間間隔であってもよい。
【００３３】
ここで、ＣＰＵ１１０、１２０のそれぞれは、ＣＰＵ１１０、１２０のそれぞれにおける処理のタイミングを生成するタイマ１１１、１２１を有する。タイマ１１１、１２１のそれぞれは、カウンタ値として時間を計測するカウンタ（図示せず）を内蔵する。タイマ１１１は、クロック生成回路２５からのクロック信号ＣｌｋＡに基づいて、カウンタのカウンタ値を更新する。タイマ１２１は、クロック生成回路２６のそれぞれからのクロック信号ＣｌｋＢに基づいて、カウンタのカウンタ値を更新する。タイマ１１１、１２１のそれぞれは、例えば、クロック信号の立ち上がりエッジの入力タイミングで、カウンタのカウンタ値を更新する。なお、タイマ１１１、１２１のそれぞれは、例えば、クロック信号の立ち下がりエッジの入力タイミングで、カウンタのカウンタ値を更新するものであってもよい。
【００３４】
ＣＰＵ１１０、１２０のそれぞれは、タイマ１１１、１２１のそれぞれが計測する時間に基づいて、上述した一定時間間隔毎の処理を実行する。具体的には、ＣＰＵ１１０、１２０のそれぞれは、タイマ１１１、１２１のそれぞれのカウンタに対して、カウンタ値の初期値を設定する。タイマ１１１、１２１のそれぞれは、クロック信号に基づいてカウンタのカウンタ値を初期値からカウントダウンしていき、カウンタ値がアンダーフローしたとき（０からさらに−１した値となったとき）に割り込み信号をＣＰＵ１１０、１２０のそれぞれの内部で発生させる。これにより、割り込み信号が、カウンタ値の初期値に応じた一定時間間隔毎に発生する。すなわち、ＣＰＵ１１０、１２０のそれぞれが設定するカウンタ値の初期値は、所望の一定時間を計測するように予め定められている。ＣＰＵ１１０、１２０のそれぞれは、タイマ１１１、１２１のそれぞれからの割り込み信号に基づいて、一定時間間隔毎に処理を実行する。例えば、割り込み信号が１ｍｓ毎に発生し、１０ｍｓ毎に実行する必要がある処理がある場合、ＣＰＵ１１０、１２０のそれぞれは、割り込み信号の発生に応じて動作して割り込み信号の発生回数をカウントすることで、１０回の割り込み信号の発生をカウントする毎に、その処理を実行するようにする。また、タイマ１１１、１２１のそれぞれは、カウンタ値がアンダーフローしたときに、カウンタのカウンタ値を初期値に初期化するとともに、初期値からのカウントダウンを再開する。
【００３５】
ここで、クロック生成回路２５、２６のそれぞれから出力されるクロック信号ＣｌｋＡ、ＣｌｋＢの間でズレがある場合、タイマ１１１、１２１のそれぞれで計測する時間（カウンタ値）にもズレが生じてしまい、ＣＰＵ１１０とＣＰＵ１２０が同期して処理を実行することができなくなってしまう。
【００３６】
ここで、図４に示すように、クロック信号のズレを決める要素として、「オフセット」と「傾き」がある。オフセットは、同一の時間を刻むべきクロック信号の立ち上がりエッジのズレである。傾きは、クロック信号のパルス幅のズレである。すなわち、タイマ１１１、１２１のそれぞれに対するクロック信号ＣｌｋＡ、ＣｌｋＢでオフセットがある場合、タイマ１１１、１２１のそれぞれで同一時間を計測するタイミング（同一のカウンタ値にカウントダウンするタイミング）にズレが生じていることになる。また、タイマ１１１、１２１のそれぞれに対するクロック信号ＣｌｋＡ、ＣｌｋＢ間で傾きがある場合、パルス幅が大きいクロック信号によって計測されるタイマの方が、パルス幅の小さいクロック信号によって計測されるタイマよりも、遅く時間を計測する（遅くカウンタ値をカウントダウンする）ことになる。
【００３７】
本実施の形態では、ステップＳＷ２７、２８のそれぞれから出力されるＯＮ信号が、ＣＰＵ１１０、１２０のそれぞれに同時に入力されることを利用して、クロック信号ＣｌｋＡ、ＣｌｋＢ間のズレを検出し、検出したズレの分、タイマ１１１、１２１の時間（カウンタ値）を補正する。これによって、ＣＰＵ１１０、１２０のそれぞれにおける処理を同期して実行することを可能とする。
【００３８】
続いて、図５を参照して、実施の形態にかかる時間同期方法の概要について説明する。図５は、実施の形態にかかる時間同期方法の概要を説明するための図である。
【００３９】
図５において、「ＣｌｋＡ」は、上述と同様にクロック生成回路２５からＣＰＵ１１０に供給されるクロック信号を示しており、「ＣｌｋＢ」は、上述と同様にクロック生成回路２６からＣＰＵ１２０に供給されるクロック信号を示している。「Ｔ１」は、あるタイミングを示しており、「Ｔ２」は、Ｔ１よりも後のタイミングを示しており、「Ｔ３」は、Ｔ２よりも後のタイミングを示している。なお、「Ｔ２」と「Ｔ３」は、同一タイミングであってもよい。
【００４０】
本実施の形態では、次式（１）及び（２）に示す思想に基づいてタイマ１１１とタイマ１２１の現在の時間を同期する。
【００４１】
Ｔｃ０(ｔ)＝Ｔ０(ｔ)−Ｔ０３  ・・・  (１)
Ｔｃ１(ｔ)＝(Ｔ１(ｔ)−Ｔ１３)×(Ｔ０２−Ｔ０１)／(Ｔ１２−Ｔ１１)  ・・・  (２)
【００４２】
ここで、式（１）及び（２）で示す各値は、以下の内容となる。
Ｔ０(ｔ)  ：０系のタイマ１１１の現在の時間
Ｔ１(ｔ)  ：１系のタイマ１２１の現在の時間
Ｔｃ０(ｔ)：０系のタイマ１１１の補正後の現在の時間
Ｔｃ１(ｔ)：１系のタイマ１２１の補正後の現在の時間
Ｔ０１    ：タイミングＴ１における０系のタイマ１１１の時間
Ｔ０２    ：タイミングＴ２における０系のタイマ１１１の時間
Ｔ０３    ：タイミングＴ３における０系のタイマ１１１の時間
Ｔ１１    ：タイミングＴ１における１系のタイマ１２１の時間
Ｔ１２    ：タイミングＴ２における１系のタイマ１２１の時間
Ｔ１３    ：タイミングＴ３における１系のタイマ１２１の時間
【００４３】
式（１）の「Ｔ０(ｔ)−Ｔ０３」及び式（２）の「Ｔ１(ｔ)−Ｔ１３」は、タイマ１１１、１２１の現在の時間Ｔ０(ｔ)、Ｔ１(ｔ)のそれぞれを、同一のタイミングＴ３を基準とした時間に補正することになる。これによれば、Ｔ３において、タイマ１１１の時間とタイマ１２１の時間とが同一の時間とすることができる。すなわち、本補正によれば、オフセットによる時間のズレを無くすことができる。
【００４４】
また、式（２）の「(Ｔ０２−Ｔ０１)／(Ｔ１２−Ｔ１１)」において、「Ｔ０２−Ｔ０１」は、クロック信号ＣｌｋＡに基づいてタイマ１１１が計測したＴ１からＴ２までの時間であり、「Ｔ１２−Ｔ１１」は、クロック信号ＣｌｋＢに基づいてタイマ１２１が計測したＴ１からＴ２までの時間である。したがって、「(Ｔ０２−Ｔ０１)／(Ｔ１２−Ｔ１１)」は、タイマ１２１の時間計測速度に対するタイマ１１１の時間計測速度の割合となる。よって、タイマ１２１の現在の時間に対して、「(Ｔ０２−Ｔ０１)／(Ｔ１２−Ｔ１１)」を乗じることで、タイマ１２１の現在の時間を、タイマ１１１で計測した場合における現在の時間に補正することができる。すなわち、本補正によれば、傾きによる時間のズレを無くすことができる。
【００４５】
以上より、上記の思想によれば、タイマ１２１の現在の時間Ｔ１(ｔ)のオフセットを補正した上で、そのオフセットを補正したタイマ１２１の現在の時間「Ｔ１(ｔ)−Ｔ１３」を、タイマ１１１と同じ時間計測速度で計測した場合における時間に補正するようにしているため、タイマ１２１の現在の時間Ｔ１(ｔ)を、タイマ１１１の現在の時間Ｔｃ０(ｔ)に一致させた時間Ｔｃ１(ｔ)に補正することができる。
【００４６】
このように、本実施の形態では、Ｔ３でタイマ１１１とタイマ１２１の時間をリセットして一致させ、Ｔ１からＴ２までをタイマ１１１で計測した時間と、Ｔ１からＴ２までをタイマ１２１で計測した時間との比率に基づいて、その後にタイマ１２１で計測される時間（カウンタ値）を適宜補正することで、タイマ１１１とタイマ１２１の時間を同期する。
【００４７】
続いて、図６を参照して、実施の形態にかかる倒立二輪車１の時間同期処理について説明する。図６は、実施の形態にかかる倒立二輪車１の時間同期処理を示すフローチャートである。図７は、実施の形態に係る時間同期方法の詳細を説明するための図である。
【００４８】
ここで、図７に示す各値は、以下の内容となる。
Ｃ００    ：０系のタイマ１１１のカウンタの初期値
Ｃ０１    ：１系のタイマ１２１のカウンタの初期値（Ｃ０１＝Ｃ００）
Ｃ０＿１２：Ｔ１からＴ２までの０系のタイマ１１１のカウンタのカウント数
Ｃ１＿１２：Ｔ１からＴ２までの１系のタイマ１２１のカウンタのカウント数
Ｃ０＿Ｆ  ：Ｔ２における０系のタイマ１１１のカウンタ値（Ｔ２から直後の割り込み
時までの０系のタイマ１１１のカウンタのカウント数に相当）
Ｃ１＿Ｆ  ：Ｔ２における１系のタイマ１２１のカウンタ値（Ｔ２から直後の割り込み
時までの１系のタイマ１２１のカウンタのカウント数に相当）
Ｃ０＿２３予想値：Ｔ２からＴ３までの０系のタイマ１１１のカウンタのカウント数
（１系のＣＰＵ１２０が予想した値）
Ｃ１＿２３      ：Ｔ２からＴ３までの１系のタイマ１２１のカウンタのカウント数
Ｃ０＿Ｏ予想値  ：Ｔ３の直前の割り込み時からＴ３までの０系のタイマ１１１のカウ
ンタのカウント数（１系のＣＰＵ１２０が予想した値）
Ｃ０＿Ｃ予想値  ：Ｔ３におけるカウンタ値（Ｔ３から直後の割り込み時までの０系の
タイマ１１１のカウンタのカウント数（１系のＣＰＵ１２０が予想
した値）
【００４９】
ＣＰＵ１１０、１２０のそれぞれは、所定の一定周期毎に、以降に説明する処理を実行する。例えば、ＣＰＵ１１０、１２０のそれぞれは、タイマ１１１、１２１のそれぞれからの割り込み信号の発生に応じて、本処理を実行する。まず、ＣＰＵ１１０、１２０のそれぞれは、ステップカバー３に搭乗者の片足が乗せられたか否かを判定する（Ｓ１）。具体的には、ＣＰＵ１１０、１２０のそれぞれは、ステップＳＷ２７、２８の両方からＯＮ信号の出力を受けていない状態から、ステップＳＷ２７、２８のいずれか一方からＯＮ信号の出力を受けている状態となったか否かを判定する。ＣＰＵ１１０、１２０のそれぞれは、ステップＳＷ２７、２８の両方からＯＮ信号の出力を受けていない状態から、ステップＳＷ２７、２８のいずれか一方からＯＮ信号の出力を受けている状態となった場合、搭乗者の片足が乗せられたと判定し、それ以外の場合、搭乗者の片足が乗せられていないと判定する。
【００５０】
ステップカバー３に搭乗者の片足が乗せられたと判定した場合（Ｓ１：Ｙｅｓ）、ＣＰＵ１１０、１２０のそれぞれは、そのタイミングＴ１における時間（０系の時間は「Ｔ０１」とし、１系の時間は「Ｔ１１」とする）を記録する（Ｓ２）。具体的には、ＣＰＵ１１０、１２０のそれぞれは、Ｔ１における時間として、Ｔ１でタイマ１１１、１２１のそれぞれから取得したカウンタ値を記憶部に格納する。
【００５１】
ステップカバー３に搭乗者の片足が乗せられていないと判定した場合（Ｓ１：Ｎｏ）、ＣＰＵ１１０、１２０のそれぞれは、ステップカバー３に搭乗者の両足が乗せられたか否かを判定する（Ｓ３）。具体的には、ＣＰＵ１１０、１２０のそれぞれは、ステップＳＷ２７、２８のいずれか一方からＯＮ信号の出力を受けている状態から、ステップＳＷ２７、２８の両方からＯＮ信号の出力を受けている状態となったか否かを判定する。ＣＰＵ１１０、１２０のそれぞれは、ステップＳＷ２７、２８のいずれか一方からＯＮ信号の出力を受けている状態から、ステップＳＷ２７、２８の両方からＯＮ信号の出力を受けている状態となった場合、搭乗者の両足が乗せられたと判定し、それ以外の場合、搭乗者の両足が乗せられていないと判定する。
【００５２】
ステップカバー３に搭乗者の両足が乗せられたと判定した場合（Ｓ３：Ｙｅｓ）、ＣＰＵ１１０、１２０のそれぞれは、そのタイミングＴ２における時間（０系の時間は「Ｔ０２」とし、１系の時間は「Ｔ１２」とする）を記録する（Ｓ４）。具体的には、ＣＰＵ１１０、１２０のそれぞれは、Ｔ２における時間として、Ｔ２でタイマ１１１、１２１のそれぞれから取得したカウンタ値Ｃ０＿Ｆ、Ｃ１＿Ｆと、Ｔ１からＴ２までにカウンタ値がアンダーフローした回数とを記憶部に格納する。なお、ＣＰＵ１１０、１２０のそれぞれは、Ｔ１からＴ２までにカウンタ値がアンダーフローした回数として、Ｔ１からＴ２までに割り込み信号が発生した回数をカウントすればよい。
【００５３】
ＣＰＵ１１０は、Ｔ１、Ｔ２のそれぞれで記録した時間に関する情報（時間情報）を他方のＣＰＵ１２０に送信する（Ｓ５）。具体的には、時間情報は、（１）タイマ１１１のカウンタの初期値Ｃ００、（２）Ｔ１からＴ２までのタイマ１１１のカウント数Ｃ０＿１２、（３）Ｔ２におけるタイマ１１１のカウンタ値（Ｔ２から直後の割り込み時までのタイマ１１１のカウント数）Ｃ０＿Ｆ、が含まれる。
【００５４】
（１）初期値Ｃ００は、マイコン１１の記憶部に予め格納されている。ＣＰＵ１１０は、制御装置１０が電源ＯＮとなって動作を開始したときに、記憶部から初期値Ｃ００を取得して、タイマ１１１のカウンタに設定する。なお、この動作については、マイコン１２、ＣＰＵ１２０、及びタイマ１２１に関しても同様である。すなわち、タイマ１２１のカウンタの初期値Ｃ０１も、マイコン１２の記憶部に予め格納されている。したがって、ＣＰＵ１１０は、タイマ１１１のカウンタの初期値Ｃ００を記憶部から取得して、ＣＰＵ１２０に送信する。
【００５５】
（２）カウント数Ｃ０＿１２は、Ｔ１からＴ２までをクロック信号ＣｌｋＡに基づいてタイマ１１１で計測した時間「Ｔ０２−Ｔ０１」に相当する。カウント数Ｃ０＿１２は、ＣＰＵ１１０がステップＳ２、４のそれぞれで記録した時間Ｔ０１、Ｔ０２に基づいて算出される。ＣＰＵ１１０は、カウント数Ｃ０＿１２を算出して、ＣＰＵ１２０に送信する。カウント数「Ｃ０＿１２」は、例えば、次式（３）によって算出すればよいが、これに限られない。なお、ＣＰＵ１１０は、「Ｔ１からＴ２までのタイマ１１１のアンダーフロー回数」として、Ｔ１からＴ２までに割り込み信号が発生した回数をカウントすればよい。また、ＣＰＵ１１０は、「Ｔ１におけるタイマ１１１のカウンタ値」として、ステップＳ２で記録したカウンタ値を記憶部から取得する。また、ＣＰＵ１１０は、「Ｔ２におけるタイマ１１１のカウンタ値」として、ステップＳ３で記録したカウンタ値を記憶部から取得する。
【００５６】
Ｃ０＿１２  ＝
Ｃ００×(Ｔ１からＴ２までのタイマ１１１のアンダーフロー回数−１)
＋Ｔ１におけるタイマ１１１のカウンタ値
＋Ｃ００−Ｔ２におけるタイマ１１１のカウンタ値Ｃ０＿Ｆ  ・・・  (３)
【００５７】
（３）カウンタ値Ｃ０＿Ｆは、ステップＳ３で時間Ｔ０２として記録されている。したがって、ＣＰＵ１１０は、ステップＳ３で記録したカウンタ値Ｃ０＿Ｆを記憶部から取得して、ＣＰＵ１２０に送信する。
【００５８】
ＣＰＵ１２０は、ＣＰＵ１１０から送信された時間情報の受信に応じて、受信した時間情報を利用して、タイマ１１１とタイマ１２１の時間が同期するようにタイマ１２１の時間を補正する（Ｓ６）。ここで、ＣＰＵ１２０がＣＰＵ１１０から時間情報を受信したタイミングをＴ３（０系の時間は「Ｔ０３」とし、１系の時間は「Ｔ１３」とする）とする。具体的には、ＣＰＵ１２０は、次式（４）〜（７）によって、Ｔ３でタイマ１２１のカウンタに設定する補正後のカウンタ値「Ｃ１＿Ｃ補正後」を算出する。また、ＣＰＵ１２０は、式（８）によって、それ以降のタイマ１２１のカウンタの補正後の初期値「Ｃ０１補正後」を算出する。
【００５９】
Ｃ０＿２３予想値  ＝  Ｃ１＿２３×(Ｃ０＿１２／Ｃ１＿１２)  ・・・  (４)
Ｃ０＿Ｏ予想値  ＝  (Ｃ０＿２３予想値−Ｃ０＿Ｆ) ｍｏｄ Ｃ００  ・・・  (５)
Ｃ０＿Ｃ予想値  ＝  Ｃ００−Ｃ０＿Ｏ予想値  ・・・  (６)
Ｃ１＿Ｃ補正後  ＝  Ｃ０＿Ｃ予想値×(Ｃ１＿１２／Ｃ０＿１２)  ・・・  (７)
Ｃ０１補正後  ＝  Ｃ００×(Ｃ１＿１２／Ｃ０＿１２)  ・・・  (８)
【００６０】
まず、式（４）について説明する。式（４）によって算出されるカウント数「Ｃ０＿２３予想値」は、Ｔ２からＴ３までをクロック信号ＣｌｋＡに基づいてタイマ１１１で計測した時間に相当する。カウント数「Ｃ＿０１２」は、上述した通り、Ｔ１からＴ２までをクロック信号ＣｌｋＡに基づいてタイマ１１１で計測した時間に相当する。カウント数「Ｃ１＿１２」は、Ｔ１からＴ２までをクロック信号ＣｌｋＢに基づいてタイマ１２１で計測した時間「Ｔ１２−Ｔ１１」に相当する。したがって、「(Ｃ０＿１２／Ｃ１＿１２)」は、タイマ１２１の時間計測速度（カウンタのカウントダウン速度）に対するタイマ１１１の時間計測速度（カウンタのカウントダウン速度）の割合となる。
【００６１】
また、カウント数「Ｃ１＿２３」は、Ｔ２からＴ３までをクロック信号ＣｌｋＢに基づいてタイマ１２１で計測した時間「Ｔ１３−Ｔ１２」に相当する。よって、式（４）に示すように、Ｔ２からＴ３までのタイマ１２１のカウント数「Ｃ１＿２３」に、「(Ｃ０＿１２／Ｃ１＿１２)」を乗じることで、Ｔ２からＴ３までのタイマ１１１のカウント数「Ｃ０＿２３予想値」を算出することができる。なお、カウント数「Ｃ１＿１２」、「Ｃ１＿２３」のそれぞれは、例えば、次式（９）、（１０）によって算出すればよいが、これに限られない。なお、ＣＰＵ１２０は、「Ｔ１からＴ２までのタイマ１２１のアンダーフロー回数」として、Ｔ１からＴ２までに割り込み信号が発生した回数をカウントすればよく、「Ｔ２からＴ３までのタイマ１２１のアンダーフロー回数」として、Ｔ２からＴ３までに割り込み信号が発生した回数をカウントすればよい。また、ＣＰＵ１２０は、「Ｔ１におけるタイマ１２１のカウンタ値」として、ステップＳ２で記録したカウンタ値を記憶部から取得し、「Ｔ２におけるタイマ１２１のカウンタ値」として、ステップＳ３で記録したカウンタ値を記憶部から取得する。また、ＣＰＵ１２０は、「Ｔ２におけるタイマ１２１のカウンタ値」として、現在（Ｔ３）のタイマ１２１のカウンタ値を、タイマ１２１から取得する。
【００６２】
Ｃ１＿１２  ＝
Ｃ１１×(Ｔ１からＴ２までのタイマ１２１のアンダーフロー回数−１)
＋Ｔ１におけるタイマ１２１のカウンタ値
＋Ｃ１１−Ｔ２におけるタイマ１２１のカウンタ値Ｃ１＿Ｆ  ・・・  (９)
Ｃ１＿２３  ＝
Ｃ１１×(Ｔ２からＴ３までのタイマ１２１のアンダーフロー回数−１)
−Ｔ２におけるタイマ１２１のカウンタ値Ｃ１＿Ｆ
＋Ｃ１１−Ｔ３におけるタイマ１２１のカウンタ値  ・・・  (１０)
【００６３】
次に、式（５）について説明する。式（５）によって算出される「Ｃ０＿Ｏ予想値」は、Ｔ３の直前の割り込み時からＴ３までをクロック信号ＣｌｋＡに基づいてタイマ１１１で計測した時間に相当する。カウント数「Ｃ０＿２３予想値」からカウンタ値「Ｃ０＿Ｆ」を減算することで、カウント数「Ｃ０＿２３予想値」から、Ｔ２から直後の割り込み時までの時間（カウント数）を減算することができる。よって、式（５）に示すように、「(Ｃ０＿２３予想値−Ｃ０＿Ｆ)」から「Ｃ００」を除算することで、その余りとして、Ｔ３の直前の割り込み時からＴ３までのカウント数「Ｃ０＿Ｏ予想値」を算出することができる。
【００６４】
次に、式（６）について説明する。式（６）によって算出される「Ｃ０＿Ｃ予想値」は、Ｔ３から直後の割り込み発生時までの時間に相当する。よって、式（６）に示すように、割り込み発生間隔に相当するカウント数「Ｃ００」から、Ｔ３の直前の割り込み時からＴ３までのカウント数「Ｃ０＿Ｏ予想値」を減算することで、Ｔ３から直後の割り込み発生時までのカウント数「Ｃ０＿Ｃ予想値」を算出することができる。
【００６５】
以上の式（４）〜（６）によって、「Ｃ０＿Ｃ予想値」として、Ｔ３における０系のタイマ１１１のカウンタ値を推定することができる。よって、ＣＰＵ１２０は、Ｔ３において、「Ｃ０＿Ｃ予想値」をタイマ１２１のカウンタにカウンタ値として設定することで、タイマ１２１の時間(カウンタ値)をタイマ１１１の時間（カウンタ値）と同期して、同一の時間とすることができる。すなわち、オフセットによる時間のズレを無くすことができる。
【００６６】
しかし、カウンタ値「Ｃ０＿Ｃ予想値」をタイマ１２１のカウンタにそのまま設定しただけでは、傾きによって、次にタイマ１１１、１２１のそれぞれのカウンタ値がアンダーフローするタイミング（ＣＰＵ１１０、１２０のそれぞれの割り込み発生タイミング）にズレが生じてしまう。そのため、式（７）に示すように、カウンタ値「Ｃ０＿Ｃ予想値」に対して、タイマ１１１の時間計測速度（カウンタのカウントダウン速度）に対するタイマ１２１の時間計測速度（カウンタのカウントダウン速度）の割合「(Ｃ１＿１２／Ｃ０＿１２)」を乗じることで、タイマ１１１がカウンタ値「Ｃ０＿Ｃ予想値」からカウントダウンを開始してアンダーフローするタイミングと、タイマ１２１がアンダーフローするタイミングとが同一となるタイマ１２１のカウンタ値「Ｃ１＿Ｃ補正後」を算出する。
【００６７】
このように、ＣＰＵ１２０は、Ｔ３において、ＣＰＵ１１０から受信した時間情報に基づいて、式（４）〜（７）によって算出したカウント値「Ｃ１＿Ｃ補正後」を、タイマ１２１のカウンタ値に設定する。これによれば、タイマ１１１、１２１間のオフセット及び傾きによる時間のズレを無くして、タイマ１１１とタイマ１２１の時間を同期することができる。すなわち、ＣＰＵ１１０とＣＰＵ１２０で、Ｔ３の次の割り込みが同期して発生させることができる。
【００６８】
また、ＣＰＵ１２０は、式（８）によって、タイマ１２１のカウンタの補正後の初期値「Ｃ０１補正後」を算出する。式（８）に示すように、タイマ１１１のカウンタの初期値「Ｃ００」に上記の割合「(Ｃ１＿１２／Ｃ０＿１２)」を乗じることで、タイマ１１１がカウンタ値「Ｃ００」からカウントダウンを開始してアンダーフローするタイミングと、タイマ１２１がアンダーフローするタイミングとが同一となるカウンタの初期値「Ｃ０１補正後」を算出することができる。そして、ＣＰＵ１２０は、式（８）によって算出した「Ｃ０１補正後」を、タイマ１２１のカウンタの初期値として設定する。これによれば、以降も傾きによる時間のズレを無くして、タイマ１１１とタイマ１２１の時間を同期することができる。すなわち、ＣＰＵ１１０とＣＰＵ１２０で、Ｔ３よりも後の割り込みも同期して発生させることができる。
【００６９】
そして、ＣＰＵ１１０、１２０のそれぞれは、倒立二輪車１の制御に関する処理を実行する（Ｓ７）。具体的には、ＣＰＵ１１０、１２０のそれぞれは、タイマ１１１、１２１の計測する時間に基づいて、前回のセンサ取得処理、姿勢制御処理、及びモータ出力処理等の実行タイミングとなっている場合には、その処理を実行する。
【００７０】
以上に説明した時間同期処理によれば、ＣＵ１２０がＣＰＵ１１０から送信された時間情報に基づいて、ＣＰＵ１２０が利用するタイマ１２１が計測する時間を、ＣＰＵ１１０が利用するタイマ１１１が計測した場合における時間に補正することができる。そのため、ＣＰＵ１１０とＣＰＵ１２０のそれぞれで実行する処理の同期の精度を向上することができる。
【００７１】
ここで、センサ取得処理において、ジャイロセンサ２３が検出したピッチ角速度と、ジャイロセンサ２４が検出したピッチ角速度とを比較して、比較したピッチ角速度が一致するか否かによってジャイロセンサ２３又は２４の故障を診断する処理を実施する場合を例に挙げて、本実施の形態の効果について説明する。
【００７２】
具体的には、ＣＰＵ１２０は、ジャイロセンサ１２０から出力された角速度信号で示されるピッチ角速度を示す角速度情報を生成してＣＰＵ１１０に出力する。ＣＰＵ１１０は、ジャイロセンサ２３から出力された角速度信号が示すピッチ角速度と、ＣＰＵ１２０から出力された角速度情報が示すピッチ角速度とを比較する。ＣＰＵ１１０は、比較したピッチ角速度が一致する場合、ジャイロセンサ２３、２４が正常に動作していると判定し、比較したピッチ角速度が一致しない場合、ジャイロセンサ２３、２４のいずれかが故障していると判定する。ここで、ＣＰＵ１１０は、微量な検出誤差又は取得タイミングのズレによって、ピッチ角速度が一致しないと判定してしまうことを防止するために、ピッチ角速度に所定閾値以上のズレがない場合に、一致していると判定し、ピッチ角速度に所定閾値以上のズレがある場合に、一致しないと判定するようにする。
【００７３】
例えば、図８Ａに示すように、ＣＰＵ１１０とＣＰＵ１２０が同期して処理を実行することができていない場合には、ＣＰＵ１１０が判断するセンサ取得処理の実行タイミングＡＴ０１〜ＡＴ０９と、ＣＰＵ１２０が判断するセンサ取得処理の実行タイミングＡＴ１１〜ＡＴ１９とがズレてしまう。この場合、ＣＰＵ１１０がジャイロセンサ２３から取得するピッチ角速度と、ＣＰＵ１２０がジャイロセンサ２４から取得するピッチ角速度との差が大きくなってしまう。そのため、ピッチ角速度が一致しないと誤判定してしまうことを防止するために、上述の閾値を大きくとる必要がある。しかしながら、そのように閾値を大きくとってしまうと、故障を検出する精度が低下してしまう。
【００７４】
それに対して、本実施の形態によれば、図８Ｂに示すように、ＣＰＵ１１０とＣＰＵ１２０が同期して処理を実行することができるため、ＣＰＵ１１０が判断するセンサ取得処理の実行タイミングＡＴ０１〜ＡＴ０９と、ＣＰＵ１２０が判断するセンサ取得処理の実行タイミングＡＴ１１〜ＡＴ１９とを同期することができる。よって、ＣＰＵ１１０がジャイロセンサ２３から取得するピッチ角速度と、ＣＰＵ１２０がジャイロセンサ２４から取得するピッチ角速度との差を低減することができる。これによれば、上述の閾値を大きくとる必要がないため、故障を検出する精度を向上することができる。
【００７５】
続いて、図９、１０を参照して、実施の形態に係る傾き補正の微調整方法について説明する。図９は、傾き補正における問題点を説明するための図である。図１０は、実施の形態に係る傾き補正の微調整の一例を示す図である。
【００７６】
まず、図９を参照して、傾き補正における問題点について説明する。本実施の形態では、上述したように、タイマ１２１の初期値に、式（８）によって算出したカウンタの初期値「Ｃ０１補正後」を設定することで傾きを補正して、タイマ１１１とタイマ１２１を同期する。
【００７７】
しかし、カウンタの初期値「Ｃ０１補正後」の算出において、図９に示すように、カウンタの初期値「Ｃ０１補正後」の実演算値が整数とならない場合がある。それに対して、一般的にＣＰＵのタイマのカウンタの初期値には整数しか設定をすることができない。例えば、図９に示すように、カウンタの初期値「Ｃ０１補正後」の実演算値として「４９９６．８６６２１０９４・・・」が算出された場合、タイマ１２１の初期値「Ｃ０１補正後」の実設定値は、「４９９７」となる。すなわち、タイマ１２１のカウンタの初期値の実演算値と、タイマ１２１のカウンタの初期値の実設定値との間に誤差が生じてしまうことになる。
【００７８】
この場合、例えば、数秒間、動作を継続すると、誤差が蓄積していき、タイマ１１１のカウンタ値がアンダーフローして割り込みが発生するタイミングと、タイマ１２１のカウンタ値がアンダーフローして割り込みが発生するタイミングとにズレが生じてしまう。すなわち、０系のＣＰＵ１１０と１系のＣＰＵ１２０とで処理を同期することができなくなってしまう。
【００７９】
そこで、本実施の形態では、所定の回数、タイマ１２１のカウンタのアンダーフローが発生する毎に、その回数での誤差の蓄積をカウント数として算出し、算出したカウント数で誤差のするカウンタ値の誤差の蓄積を打ち消すように、タイマ１２１のカウンタの初期値を補正する。これによって、タイマ１２１のカウンタの補正後の初期値における実演算値と実設定値との誤差の蓄積を無くして、タイマ１１０の時間とタイマ１２１の時間を同期して、タイマ１１０がアンダーフローするタイミングと、タイマ１２１がアンダーフローするタイミングとを同期することができる。
【００８０】
次に、図１０を参照して、その処理となる、実施の形態に係る傾き補正の微調整処理について説明する。なお、図１０では、上述と同様に、カウンタの補正後の初期値「Ｃ０１補正後」の実演算値が「４９９６．８６６２１０９４・・・」であり、タイマ１２１の補正後の初期値「Ｃ０１補正後」の実設定値は、「４９９７」である場合について説明する。なお、この場合、カウンタの補正後の初期値「Ｃ０１補正後」における実演算値と実設定値の誤差は、「０．１３３７８９０６・・・」となる。
【００８１】
この場合、１０回のタイマ１２１の初期化（１０回のアンダーフロー、１０回の割り込み）毎に、「１．３３７８９０６（０．１３３７８９０６×１０）」カウント分、タイマ１２１のカウントダウンが遅れることになる。すなわち、約１カウント分、タイマ１２１のカウントダウンの遅れが蓄積することになる。よって、ＣＰＵ１２０は、１０回のタイマ１２１の初期化毎に、タイマ１２１のカウンタの補正後の初期値「Ｃ０１補正後」の実設定値「４９９７」を「１」を減算して補正する。具体的には、ＣＰＵ１２０は、１０回のタイマ１２１の初期化毎に、カウンタの補正後の初期値の実設定値「４９９７」を、実設定値から実演算値を減算した値「０．１３３７８９０６」に補正間隔「１０（１０回）」を乗じた値「１．３３７８９０６」の整数部の値「１」を減算して補正する。
【００８２】
例えば、（ｎ×１０）回目のタイマ１２１の初期化時に、タイマ１２１のカウンタの補正後の初期値「Ｃ０１補正後」の実設定値を補正する場合には、ＣＰＵ１２０は、（ｎ×１０−１）回目のタイマ１２１からの割り込みに応じて、タイマ１２１のカウンタの初期値を「４９９６（４９９７−１）」に変更し、（ｎ×１０）回目のタイマ１２１からの割り込みに応じてタイマ１２１のカウンタの初期値を「４９９７」に戻すようにすればよい（ここで、ｎは、正整数）。
【００８３】
また、１００回のタイマ１２１の初期化（１００回のアンダーフロー、１００回の割り込み）毎に、「１３．３７８９０６（０．１３３７８９０６×１００）」カウント分、タイマ１２１のカウントダウンが遅れることになる。すなわち、約１３カウント分、タイマ１２１のカウントダウンの遅れが蓄積することになる。ここで、上述した１０回のタイマ１２１の初期化毎の初期値の補正が行われている場合には、１００回のタイマ１２１の初期化におけるカウントダウンの遅れ「１３カウント」のうち、１０の位の遅れは補正されているため、１の位の遅れ「３カウント」を補正すればよい。よって、ＣＰＵ１２０は、１００回のタイマ１２１の初期化毎に、タイマ１２１のカウンタの補正後の初期値「Ｃ０１補正後」の実設定値「４９９７」を「３」を減算して補正する。具体的には、ＣＰＵ１２０は、１００回のタイマ１２１の初期化毎に、カウンタの補正後の初期値の実設定値「４９９７」を、実設定値から実演算値を減算した値「０．１３３７８９０６」に補正間隔「１００（１０回）」を乗じた値「１３．３７８９０６」の整数部の１の位の値「３」を減算して補正する。
【００８４】
よって、ＣＰＵ１２０は、上記の１０回のタイマ１２１の初期化毎の補正と合わせると、１００回のタイマ１２１の初期化毎に、タイマ１２１のカウンタの補正後の初期値として「４９９３（４９９７−１−３）」を設定することになる。
【００８５】
例えば、上記の（ｎ×１０）回目のタイマ１２１の初期化時に加えて、（ｎ×１００）回目のタイマ１２１の初期化時にも、タイマ１２１のカウンタの補正後の初期値「Ｃ０１補正後」の実設定値を補正する場合には、ＣＰＵ１２０は、（ｎ×１００−１）回目のタイマ１２１からの割り込みに応じて、タイマ１２１のカウンタの初期値を「４９９３（４９９７−１−３）」に変更し、（ｎ×１００）回目のタイマ１２１からの割り込みに応じてタイマ１２１のカウンタの初期値を「４９９７」に戻すようにすればよい（ここで、ｎは、正整数）。すなわち、１０回のタイマ１２１の初期化毎の補正に加えて、１００回のタイマ１２１の初期化毎の補正も実施する場合には、（ｎ×１０）回目のタイマ１２１の初期化時であっても、（ｎ×１００）回目のタイマ１２１の初期化時には、タイマ１２１のカウンタの初期値が「４９９６」ではなく、「４９９３」に変更される。
【００８６】
このように、１０のｎ乗回のタイマ１２１の初期化毎の補正に関する補正値は、実設定値と実演算値の誤差「０．１３３７８９０６」の小数点第ｎ位の値に１０のｎ乗を乗算した値とすればよい（ｎは、正整数）。
【００８７】
これによれば、例えば、１０回、１００回、１０００回、１００００回、及び１０００００回のそれぞれのタイマ１２１の初期化毎に、タイマ１２１のカウンタの補正後の初期値「Ｃ０１補正後」を補正する場合、図１０に示すように、１０００００回のタイマ１２１の初期化毎の補正では、カウンタの補正後の初期値を「４９７５（４９９７−１−３−３−７−８）」とすればよい。
【００８８】
なお、１０の何乗回までタイマ１２１の初期化毎の補正を行うかは、上記の例に限られず、任意に定めるようにしてよい。例えば、１０の１乗（１０）回のタイマ１２１の初期化毎の補正と、１０の２乗（１００）回のタイマ１２１の初期化毎の補正だけを実施するようにしてもよい。
【００８９】
また、タイマ１２１のカウンタの初期値の補正を行う間隔は、上記の例のように、１０のｎ乗回のそれぞれのタイマ１２１の初期化毎の間隔に限られず、任意に定めるようにしてよい。例えば、８回のタイマ１２１の初期化毎にタイマ１２１のカウンタの初期値の補正を行うようにしてもよい。この場合、８回のタイマ１２１の初期化毎に、１カウント分（１．０７０３１２４８（０．１３３７８９０６×８））、タイマ１２１のカウンタの初期値を補正するようにすればよい。また、例えば、１０回のタイマ１２１の初期化毎の補正は行わず、１００回のタイマ１２１の初期化毎の補正を行うようにしてもよい。この場合、１００回のタイマ１２１の初期化毎に、１３カウント分（１３．３７８９０６（０．１３３７８９０６×１０）、タイマ１２１のカウンタの初期値を補正するようにすればよい。
【００９０】
以上に説明したように、本実施の形態では、ＣＰＵ１２０は、ＣＰＵ１１０から送信された時間情報から得られるＴ１（第１の所定事象の検出時）からＴ２（第２の所定事象の検出時）までのタイマ１１１における経過時間と、Ｔ１からＴ２までのタイマ１２１における経過時間との比率に基づいて、タイマ１２１が計測する時間をタイマ１１１で計測した場合における時間に補正するようにしている。これによれば、タイマ１１１、タイマ１２１のそれぞれの時間に基づいてＣＰＵ１１０、１２０のそれぞれで実行される、倒立二輪車１（同軸二輪移動体）の制御に関する処理の同期の精度を向上することができる。
【００９１】
また、本実施の形態では、ＣＰＵ１１０及びＣＰＵ１２０は、ステップＳＷ２７、２８からＣＰＵ１１０及びＣＰＵ１２０のそれぞれに同時に入力される信号の変化に基づいて、時間同期に用いる時間を記録するタイミングＴ１、Ｔ２を検出するようにしている。これによれば、ＣＰＵ１１０とＣＰＵ１２０とで、Ｔ１、Ｔ２として時間を記録するタイミングのズレを無くすことができるため、記録した時間に基づいて算出されるタイマ１２１の補正後の時間を、より高い精度でタイマ１１１の時間と同期するように算出することができる。
【００９２】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【００９３】
上記の実施の形態では、一例として、搭乗者の一方の足が載置されたことの検出時と、搭乗者の両方の足が載置されたことの検出時に、時間同期に用いる時間を記録するようにしているが、時間同期に用いる時間を記録するトリガとなる事象は、これに限られない。予め任意に定めた２つの所定事象（第１の所定事象及び第２の所定事象）を、時間同期に用いる時間を記録するトリガとして定めるようにしてよい。例えば、補正に用いる時間を記録するトリガとなる２つの事象として、ステップＳＷ２７、２８からのＯＮ信号の有無に基づいて、搭乗者の一方の足が載置されたこと、搭乗者の両方の足が載置されたこと、搭乗者の一方の足が載置されなくなったこと、搭乗者の両方の足が載置されなくなったことのうち、いずれかの相互に異なる事象を検出するようにしてよい。
【００９４】
例えば、倒立二輪車１を牽引モードで利用することを考慮すると、好ましくは、Ｔ１の事象として搭乗者の一方の足が載置されなくなったことを検出し、Ｔ２の事象として搭乗者の両方の足が載置されなくなったことを検出するようにするとよい。具体的には、ＣＰＵ１１０、１２０のそれぞれは、ステップＳＷ２７、２８のいずれか両方からＯＮ信号の出力を受けている状態から、ステップＳＷ２７、２８の一方からＯＮ信号の出力を受けている状態となった場合、搭乗者の一方の足が載置されなくなったと判定する。また、ＣＰＵ１１０、１２０のそれぞれは、ステップＳＷ２７、２８のいずれか一方からＯＮ信号の出力を受けている状態から、ステップＳＷ２７、２８の両方からＯＮ信号の出力を受けていない状態となった場合、搭乗者の両方の足が載置されなくなったと判定する。そのようにすることで、牽引モードで利用するときに、より近い時間帯のクロック信号の状態に基づいて、時間同期処理を実施することになるため、牽引モードで倒立二輪車１の制御に関する処理を、より高い精度で同期することができる。しかしながら、倒立二輪車１を乗車モードで利用することを考慮すると、好ましくは、上記の実施の形態のように、Ｔ１の事象として搭乗者の一方の足が載置されたことを検出し、Ｔ２の事象として搭乗者の両方の足が載置されたことを検出するようにするとよい。
【００９５】
また、補正に用いる時間を記録するトリガとなる事象として、ステップＳＷ２７、２８以外のデバイス（降車スイッチ又はリーン角センサ等）からの信号に基づいて判断される事象を用いるようにしてもよい。例えば、降車スイッチは、搭乗者が倒立二輪車１を降車可能な状態へ移行させることを倒立二輪車１に指示するためのスイッチである。降車スイッチは、搭乗者から押下された場合、降車可能な状態への移行を指示する信号をＣＰＵ１１０、１２０に出力する。ＣＰＵ１１０、１２０のそれぞれは、降車スイッチからの信号の出力に応じて、倒立二輪車１の走行を停止させるように、左右の車輪２を駆動するモータを制御する。そして、ＣＰＵ１１０、１２０のそれぞれは、降車スイッチから信号が出力されたことを、補正に用いる時間を記録するトリガとなる事象として扱うようにしてもよい。また、例えば、リーン角（ロール角）センサは、倒立二輪車１のリーン角を検出し、検出したリーン角を示すリーン角信号をＣＰＵ１１０、１２０に通知する信号である。そして、ＣＰＵ１１０、１２０は、リーン角信号が示すリーン角が所定角度となったことを、補正に用いる時間を記録するトリガとなる事象として扱うようにしてもよい。
【００９６】
また、ＣＰＵ１２０は、補正後のカウンタ値「Ｃ１＿Ｃ補正後」を算出して設定することによるタイマ１２１の時間補正と、補正後のカウンタの初期値「Ｃ０１補正後」を算出して設定することによるタイマ１２１の時間補正のうち、いずれかのみを実施するようにしてもよい。しかしながら、好ましくは、上記の実施の形態のように、上記２つの時間補正の両方を実施するようにすることで、より高い精度でタイマ１１１とタイマ１２１の時間を同期することができる。
【００９７】
また、ＣＰＵ１２０は、式（７）によって補正後のカウンタ値「Ｃ１＿Ｃ補正後」を算出するようにしているが、補正後のカウンタ値「Ｃ１＿Ｃ補正後」を「Ｃ０＿Ｃ予想値」として算出するようにしてもよい。これによっても、オフセットの補正は行うことができるからである。しかしながら、好ましくは、上記の実施の形態のように、式（７）によって補正後のカウンタ値「Ｃ１＿Ｃ補正後」を算出するようにすることで、傾きも補正し、より高い精度でタイマ１１１とタイマ１２１の時間を同期することができる。
【００９８】
また、上記の実施の形態では、ＣＰＵ１２０が、タイマ１１１のカウンタの初期値「Ｃ００」をＣＰＵ１１０から取得するようにしているが、これに限られない。例えば、タイマ１１１のカウンタの初期値「Ｃ００」は、マイコン１２の記憶部に予め格納しておくようにし、ＣＰＵ１２０が記憶部から取得するようにしてもよい。
【００９９】
また、上記の実施の形態では、ＣＰＵ１１０が、カウント数「Ｃ０＿１２」を算出するようにしているが、これに限られない。ＣＰＵ１１１が、「Ｔ１からＴ２までのタイマ１１１のアンダーフロー回数」と「Ｔ１におけるタイマ１１１のカウンタ値」を時間情報に含めてＣＰＵ１２０に送信するようにし、ＣＰＵ１２０が、その時間情報に基づいて、カウント数「Ｃ０＿１２」を算出するようにしてもよい。
【０１００】
また、上記の実施の形態では、タイマ１１１、１２１は、カウンタ値がアンダーフローしたとき（０からさらに−１した値となったとき）に、割り込みを発生するとともにカウンタ値を初期化するものであるが、所定値までカウントダウンされたときに、割り込みを発生するとともにカウンタ値を初期化するものであれば、これに限られない。例えば、タイマ１１１、１２１は、カウンタ値が０となったときに、割り込みを発生するとともにカウンタ値を初期化するものであってもよい。
【０１０１】
上記の実施の形態では、制御系（ＣＰＵ）を２重化した２重系システムについて説明したが、３重系又は４重系等の２重化以外の多重系システムについても適用可能である。
【符号の説明】
【０１０２】
１  倒立二輪車
２  車輪
３  ステップカバー
４  ハンドル
１０  制御装置
１１、１２  マイクロコントローラ
１３、１４、１５、１６  インバータ
１７、１８  モータ
１９、２０、２１、２２  回転角センサ
２３、２４  ジャイロセンサ
２５、２６  クロック生成回路
２７、２８  ステップＳＷ
１１０、１２０  ＣＰＵ
１１１、１２１  タイマ
【図１】
2014104928.tif 000003
【図２】
2014104928.tif 000004
【図３】
2014104928.tif 000005
【図４】
2014104928.tif 000006
【図５】
2014104928.tif 000007
【図６】
2014104928.tif 000008
【図７】
2014104928.tif 000009
【図８Ａ】
2014104928.tif 000010
【図８Ｂ】
2014104928.tif 000011
【図９】
2014104928.tif 000012
【図１０】
2014104928.tif 000013