(57)【要約】【課題】モータ制御のソフトウェアおよびＯＳの各々を、同一のプロセッサ上で周期的に実行させる。【解決手段】モータ駆動システムのプロセッサは、閾値に到達すると第１および第２割込信号をそれぞれ出力する第１および第２タイマーと、プロセッサコアとを備えている。第１タイマーは第２タイマーと等倍または整数倍の速くカウントする。プロセッサコアは、第１割込信号に応答してモータ制御ソフトウェアを実行し、第２割込信号に応答してＯＳのタスクを実行する。プロセッサコアは、モータ制御ソフトウェアの実行中に第２割込信号が発生すると、第２タイマーのカウント開始値を、第２閾値を基準としてカウント値Ｄだけ早くカウントされる値、または、第２閾値をカウント値Ｄだけ長くカウントされる値に設定する。カウント値Ｄは、第２割込信号の発生時刻とモータ制御ソフトウェアの処理完了時刻との差分に相当するカウント値以上である。【選択図】図９
2019133206.tif 000002
【特許請求の範囲】
【請求項１】
モータと、
クロック信号を出力する発振回路と、
前記クロック信号に基づいて動作して、前記モータを制御するプロセッサと
を有するモータ駆動システムであって、
前記プロセッサは、
設定された第１カウント開始値からカウント値を変化させ、前記カウント値が第１閾値に到達した時刻に第１割込信号を出力する第１タイマーと、
設定された第２カウント開始値からカウント値を変化させ、前記カウント値が第２閾値に到達した時刻に第２割込信号を出力する第２タイマーと、
前記第１割込信号および前記第２割込信号に応答して、前記モータを制御するためのモータ制御ソフトウェアおよびオペレーティングシステムを切り換えて実行するプロセッサコアと
を備えており、
前記クロック信号に基づいて、前記第１タイマーは、前記第２タイマーと同じ周波数またはＮ倍（Ｎ：２以上の整数）の周波数でカウント値を変化させ、
前記プロセッサコアは、
前記第１割込信号に応答して前記モータ制御ソフトウェアを実行し、前記第２割込信号に応答して前記オペレーティングシステムのタスクを実行し、
前記モータ制御ソフトウェアの実行中に前記第２割込信号が発生したときは、前記第２タイマーの前記カウント開始値を、前記第２閾値を基準としてカウント値Ｄだけ早くカウントされる値に設定し、または、前記第２閾値をカウント値Ｄだけ長くカウントされる値に設定し、
前記カウント値Ｄは、前記第２割込信号が発生した時刻Ｔａと前記モータ制御ソフトウェアの処理が完了した時刻Ｔｂとの差分に相当するカウント値以上である、モータ駆動システム。
【請求項２】
前記プロセッサコアは、前記カウント値Ｄとして、前記モータ制御ソフトウェアの最悪実行時間に相当するカウント値を設定する、請求項１に記載のモータ駆動システム。
【請求項３】
前記第１タイマーは、前記カウント値が前記第１閾値に到達した後は予め設定された第１初期値から前記カウント値を変化させ、
前記第２タイマーは、前記カウント値が前記第２閾値に到達した後は、予め設定された、前記カウント開始値と異なる第２初期値から前記カウント値を変化させる、請求項１または２に記載のモータ駆動システム。
【請求項４】
前記第２タイマーが、前記クロック信号に基づいて前記カウント値を増加させるときにおいて、
前記モータ制御ソフトウェアの実行終了時の前記第２タイマーのカウント値Ａ２が、前記モータ制御ソフトウェアの実行開始時の前記第２タイマーのカウント値Ａ１以下であれば、前記プロセッサコアは、前記モータ制御ソフトウェアの実行中に前記第２割込信号が発生したことを検出する、請求項１から３のいずれかに記載のモータ駆動システム。
【請求項５】
前記第２タイマーが、前記クロック信号に基づいて前記カウント値を減少させるときにおいて、
前記モータ制御ソフトウェアの実行終了時の前記第２タイマーのカウント値Ａ２が、前記モータ制御ソフトウェアの実行開始時の前記第２タイマーのカウント値Ａ１以上であれば、前記プロセッサコアは、前記モータ制御ソフトウェアの実行中に前記第２割込信号が発生したことを検出する、請求項１から３のいずれかに記載のモータ駆動システム。
【請求項６】
前記プロセッサコアは、前記オペレーティングシステムのタスクの実行中であっても、前記第２割込信号が発生したときは、前記モータ制御ソフトウェアを優先して実行する、請求項１から５のいずれかに記載のモータ駆動システム。
【請求項７】
前記第１タイマーが、前記第２タイマーと同じ周波数でカウント値を変化させるときにおいて、前記第１タイマーのカウント値の変化量は、前記第２タイマーのカウント値の変化量よりもＮ倍大きい、請求項１から６のいずれかに記載のモータ駆動システム。
【請求項８】
前記第１タイマーが、前記第２タイマーと同じ周波数でカウント値を変化させるときにおいて、前記プロセッサコアは、前記第２割込信号がＮ回発生する度に１回、第２割込信号に応答して前記オペレーティングシステムのタスクを実行する、請求項１から６のいずれかに記載のモータ駆動システム。
【請求項９】
前記第１タイマーは、前記第２タイマーが受け取るクロック信号よりもＮ倍高い周波数のクロック信号を受け取る、請求項１から６のいずれかに記載のモータ駆動システム。
【請求項１０】
請求項１から９のいずれかに記載のモータ駆動システムと、
前記モータ駆動システムのモータの駆動を制御する制御信号を出力するシステムコントローラと
を備えたモータ制御システム。
【請求項１１】
請求項１０に記載のモータ制御システムと、
複数の車輪であって、前記モータによって駆動される車輪を含む複数の車輪と、
物を載置する搬送テーブルと
を備えた自走ロボット。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、１つの信号処理回路（プロセッサ）が、複数のタスクを開始するタイミングを調整する技術に関する。
【背景技術】
【０００２】
近年のモータ制御器には、モータの回転を制御する機能だけでなく、他の多くの機能が搭載されるようになりつつある。たとえば、モータ制御器をインターネットに接続させ、または他の機器と相互に通信させるための通信機能である。そのため、ユーザまたはアプリケーションソフトウェアが、モータ制御器の各機能を容易に利用できるよう、オペレーティングシステム（ＯＳ）が導入されるようになってきた。
【０００３】
モータ制御器を有するモータ駆動システムに導入されるＯＳとして、リアルタイムＯＳが知られている。リアルタイムＯＳは、プロセッサの時間（ＣＰＵ時間）を管理し、ソフトウェア処理の指定された時間に正確に呼び出すリアルタイム性を持つ。リアルタイムＯＳは、システムタイマーからの割り込み信号に基づいて動作する。リアルタイムＯＳは、割り込み信号が発生する度に時間の経過を検知し、実行すべき処理をタスクとして、ＣＰＵ時間、メモリ空間等の資源を割り当てる。
【０００４】
システムタイマーに割り込みを発生させる時間間隔を短くすると、ＯＳはより細かく時間を管理することができる。ただしそうすると、単位時間におけるＯＳの呼び出し回数が増える。一般的には、呼び出しの度に、スタックへのデータの退避、スタックからのデータの復旧等を行わなければならないため、ＯＳの導入によるオーバーヘッドが大きくなる。結果的に、ＯＳによって占有されるＣＰＵ時間が増える。システムタイマー割り込みの時間間隔を無限に小さくできるわけではなく、現在では、１ミリ秒以上に設定するのが現実的である。
【０００５】
一方、制御ソフトウェアもまた、制御対象を制御するために一定時間ごとに繰り返し実行される。制御ソフトウェアを繰り返し実行する時間間隔は制御周期と呼ばれている。制御周期は制御対象の性質によって異なり、制御対象の時定数によって決定されることが多い。たとえば、モータの動作を制御する制御ソフトウェアは、１ミリ秒よりもはるかに短い周期で実行される必要がある。
【０００６】
たとえば特開平１０−１６１８９０号公報は、プログラムに一定の実行時間を割り当てるスケジューラを開示する。所与の周期で複数のプログラムを実行するにあたり、各プログラムの実行時間の合計値が当該周期を超える場合、つまり周期制約を満たせない場合がある。すると、スケジューラは、あるプログラムの処理を分割して、分割された処理が複数の周期にわたって実行されるよう割り当てる。それにより、当該周期で複数のプログラムの実行を実現している。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平１０−１６１８９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
相対的に短い制御周期の制御ソフトウェアと、相対的に長い時間間隔でシステムタイマー割り込みを発生させてタスクを実行するＯＳとを同じプロセッサ上で動作させることが求められている。各々に設定された周期で制御ソフトウェアおよびＯＳを確実に実行することが必要とされる。
【０００９】
本開示は、モータ制御のソフトウェアおよびＯＳの各々を、同一のプロセッサ上で周期的に実行する技術を提供する。
【課題を解決するための手段】
【００１０】
本開示の例示的なモータ駆動システムによれば、モータ制御ソフトウェアの実行中に、オペレーティングシステムを動作させるための第２割込信号が発生したときは、第２タイマーのカウント開始値を、第２閾値を基準としてカウント値Ｄだけ早くカウントされる値に設定し、または、第２閾値をカウント値Ｄだけ長くカウントされる値に設定する。当該カウント値Ｄは、第２割込信号が発生した時刻Ｔａとモータ制御ソフトウェアの処理が完了した時刻Ｔｂとの差分に相当するカウント値以上である。第１タイマーおよび第２タイマーは、クロック信号に基づいて、各カウント値を同じ周期で変化させ、または、一方のカウント値を他方のカウント値のＮ倍（Ｎ：２以上の整数）の周期で変化させる。これにより、各割り込みが干渉しないよう調整され、タスクを開始するタイミングを調整することができる。よって、モータ制御ソフトウェアの実行タイミングとオペレーティングシステムのタスクの実行タイミングとの重複を避けることができる。
【００１１】
本開示の例示的なモータ制御システムは、上述のモータ駆動システムと、前記モータ駆動システムのモータの駆動を制御する制御信号を出力するシステムコントローラとを備えている。
【００１２】
本開示の例示的な自走ロボットは、上述のモータ制御システムと、複数の車輪であって、前記モータによって駆動される車輪を含む複数の車輪と、物を載置する搬送テーブルとを備えている。
【発明の効果】
【００１３】
本発明の例示的な実施形態によれば、モータ制御ソフトウェアおよびオペレーティングシステムのタスクの実行タイミングを調整するため、それぞれの実行タイミングの重複を避けることができる。
【図面の簡単な説明】
【００１４】
【図１】図１は、フィードバック型モータ制御モデルに含まれる、三種類の制御に関するループ構造を示す図である。
【図２】図２は、モータ制御のソフトウェアの処理ループの関係を示す図である。
【図３】図３は、モータ駆動システム１の構成を示す図である。
【図４】図４は、モータ制御ソフトウェア２０の実行タイミングとリアルタイムＯＳ３０のタスク実行タイミングとが干渉している様子を示す図である。
【図５】図５は、本開示によるモータ駆動システム１のハードウェア構成の例を示す図である。
【図６】図６は、プロセッサ１０の内部構造を示す図である。
【図７】図７は、システムタイマー１２２の内部構成を示す図である。
【図８】図８は、プロセッサ１０の初期動作の手順を示すフローチャートである。
【図９】図９は、プロセッサ１０のタスク起動タイミング調整処理の手順を示すフローチャートである。
【図１０】図１０は、主として、図９の処理を実行したときのシステムタイマー１２２のカウンタ値の変化を示す図である。
【図１１】図１１は、変形例によるプロセッサ１０のタスク起動タイミング調整処理の手順を示すフローチャートである。
【図１２】図１２は、主として、図９の処理を実行したときのシステムタイマー１２２のカウンタ値の変化を示す図である。
【図１３】図１３は、自走ロボット２００の構成を示す図である。
【図１４】図１４は、自走ロボット２００のハードウェア構造を示す図である。
【発明を実施するための形態】
【００１５】
まず、図１〜図３を参照しながら、モータ制御器の信号処理回路（プロセッサ）によって実行されるモータ制御のソフトウェアおよびオペレーティングシステムを説明し、続いて図４を参照しながら本願発明者が見出した課題を説明する。その後、図５以降の図面を参照しながら、本開示に係るモータ制御システムを説明する。以下の説明では、「オペレーティングシステム」を「ＯＳ」と略記する。
【００１６】
図１は、フィードバック型モータ制御モデルに含まれる、三種類の制御に関するループ構造を示す。本モデルに従って設計されたモータ制御のソフトウェアは、主として通常電流制御処理ａ、速度制御処理ｂおよび位置制御処理ｃをプロセッサに実行させる。これら三つの制御処理はそれぞれ異なる制御周期で実行させることが可能である。なお、各処理ａ〜ｃの具体的な内容の説明は省略する。
【００１７】
電流制御処理ａおよび速度制御処理ｂの各制御周期は、モータのインダクタンスおよび回転慣性モーメントによって決定される。電流制御処理ａおよび速度制御処理ｂは、それぞれ１ミリ秒未満、たとえば５０ナノ秒の制御周期で実行することが求められ得る。
【００１８】
１ミリ秒以上間隔で時間を管理するＯＳは、当然に、１ミリ秒未満の制御周期を必要とするモータ制御のソフトウェアを管理することはできない。そこで、たとえばプロセッサのペリフェラルであるハードウェアタイマーを用いて１ミリ秒未満の時間間隔で割込信号を発生させ、割込信号に基づいてプロセッサ上でモータ制御ソフトウェアを実行させることが考えられる。
【００１９】
図２は、モータ制御のソフトウェアの処理ループの関係を示す。ハードウェアタイマーが５０ナノ秒の時間間隔で割込信号を発生させると、割込信号の受信に応答して、モータ制御のソフトウェアはプロセッサに都度電流制御処理ａを実行させる。プロセッサは、割込信号が１０回発生する毎に速度制御を実行し、１０００回発生する毎に位置制御を実行する。これにより、電流制御処理ａは５０ナノ秒毎に実行され、速度制御処理ｂは５００ナノ秒毎に実行される。電流制御処理ａおよび速度制御処理ｂは１ミリ秒未満の時間間隔で実行される。
【００２０】
一方、同一プロセッサ上で実行されるリアルタイムＯＳに関しては、異なるタイマー、たとえばシステムタイマーを利用して、１ミリ秒ごとに割込信号を発生させればよい。これにより、１ミリ秒以上の制御周期を必要とする種々のソフトウェアをリアルタイムＯＳ管理下のタスクとして実行することができる。
【００２１】
図３は、モータ駆動システム１の構成を示す。
【００２２】
モータ駆動システム１は、プロセッサ１０と、モータＭとを有している。モータＭの回転は、プロセッサ１０がそれぞれ実行するモータ制御ソフトウェア２０およびリアルタイムＯＳ３０のタスクによって制御される。
【００２３】
図３では、理解の便宜のため、ハードウェアとしてのプロセッサ１０およびモータＭと、ソフトウェア（コンピュータプログラム）であるモータ制御ソフトウェア２０およびリアルタイムＯＳ３０とを併記している。モータ制御ソフトウェア２０およびリアルタイムＯＳ３０は、いずれもコンピュータプログラムに過ぎず、実際の処理の主体となるのはプロセッサ１０である。しかしながら実際には、各コンピュータプログラムとプロセッサ１０とが協働して見かけ上１つの具体的な装置として動作し、それにより各プログラムによって提供される機能が実現されている。そこで本明細書では、コンピュータプログラムが動作の主体であるかのように記載することがある。たとえば、モータ制御ソフトウェア２０がモータを制御する、と記載したり、リアルタイムＯＳ３０が種々の命令をプロセッサ１０に実行させる、などと記載することがある。ここでいうコンピュータプログラムは、モータ制御ソフトウェア２０およびリアルタイムＯＳ３０に限られず、各ソフトウェアによって管理され実行されるプログラム（処理）である「タスク」も含まれる。
【００２４】
プロセッサ１０は、複数のタイマーを有している。図３には、２つのタイマー、すなわちシステムタイマー１２２およびハードウェアタイマー１２３が示されている。
【００２５】
システムタイマー１２２およびハードウェアタイマー１２３は独立して動作する。いずれのタイマーもタイマーカウンタを有しており、クロック信号を受け取るとタイマーカウンタをカウントアップまたはカウントダウンする。タイマーカウンタ値が予め定められた値になると、オーバーフローまたはアンダーフローが発生したとして、タイマーは割込信号を出力する。
【００２６】
本開示では、システムタイマー１２２は１ミリ秒ごとに割込信号を出力し、ハードウェアタイマー１２３は５０マイクロ秒ごとに割込信号を出力するとして説明する。
【００２７】
モータ制御ソフトウェア２０は、ハードウェアタイマー１２３からの割込信号によって実行される。  図１を参照しながら説明したように、モータ制御ソフトウェア２０は、電流制御処理ａ、速度制御処理ｂおよび位置制御処理ｃを含む。本開示では、少なくとも電流制御処理ａは５０マイクロ秒ごとに実行される。
【００２８】
リアルタイムＯＳ３０は、システムタイマー１２２からの割込信号によって実行される。リアルタイムＯＳ３０では、スケジューラ３２と、２つの待ち行列３４ａおよび３４ｂとが管理されている。
【００２９】
スケジューラ３２は、リアルタイムＯＳ３０上で動作する処理（タスク）を、実行可能処理の待ち行列１２ａ、ブロック処理の待ち行列１２ｂ、またはプロセッサ上に割り当てる。また、スケジューラ３２は、システムタイマーから割込信号を受け取り、その都度、管理下のどのタスクをプロセッサ１０に実行させるか判断する。その判断の結果、スケジューラ３２は、たとえば実行可能な最高優先度を持つタスクをプロセッサ１０に実行させる。また、スケジューラ３２は、プロセッサ１０からのイベント待ち処理を中断する信号に応答して、所定のタスクをプロセッサ１０に実行させる。
【００３０】
本開示では、リアルタイムＯＳ３０のスケジューラ３２によって、１ミリ秒ごとに何らかのタスクが実行されることになる。
【００３１】
次に、図４を参照しながら、本願発明者が見出した、モータ駆動システム１の動作上の課題を説明する。なお、以下の説明では、システムタイマー１２２およびハードウェアタイマー１２３は、各タイマーカウンタがオーバーフローしたときに割込信号を発生させるとする。ただし、これまでは、システムタイマー１２２は１ミリ秒ごとに、ハードウェアタイマー１２３は５０マイクロ秒ごとにオーバーフローが発生する例を挙げていた。つまり、ハードウェアタイマー１２３はシステムタイマー１２２より２０倍速くオーバーフローが発生する例を挙げていた。しかしながら、図面上煩雑になるため、以下では、ハードウェアタイマー１２３はシステムタイマー１２２より２倍速くオーバーフローが発生するとして説明する。
【００３２】
図４は、モータ制御ソフトウェア２０の実行タイミングとリアルタイムＯＳ３０のタスク実行タイミングとが干渉している様子を示す。図４（ａ）および（ｂ）はモータ制御ソフトウェア２０の動作に関するタイミングを示し、図４（ｃ）および（ｄ）は、リアルタイムＯＳ３０の動作に関するタイミングを示す。
【００３３】
システムタイマー１２２（図４（ｄ））およびハードウェアタイマー１２３（図４（ｂ））の各々は、異なる周期で割り込み信号を出力するため、いずれ、両者の割込信号が同じタイミングもしくは近いタイミングで発生することになる。「近い」とは、先に発生した割り込み信号に基づいて実行されたタスクが終了する前に、後の割り込み信号が発生することを言う。図４は、両者の割込信号が近いタイミングで発生したときの状況を示している。
【００３４】
モータ制御ソフトウェア２０について見ると、図４（ｂ）に示すハードウェアタイマー１２３のカウント値がオーバーフローした時刻Ｔ０で、ハードウェアタイマー１２３は割り込み信号を出力する。その結果、プロセッサ１０は、時刻Ｔ０からモータ制御ソフトウェア２０の処理を実行する。処理は時刻Ｔ２まで継続する。時刻Ｔ０からＴ２までの時間帯では、プロセッサ１０はモータ制御ソフトウェア２０の処理に占有される。
【００３５】
一方、リアルタイムＯＳ３０について見ると、図４（ｄ）に示すシステムタイマー１２２のカウント値がオーバーフローした時刻Ｔ１で、システムタイマー１２２は割り込み信号を出力する。しかしながら、図示されるように、時刻Ｔ１は、時刻Ｔ０からＴ２までの時間帯に含まれている。プロセッサ１０は、リアルタイムＯＳ３０のタスクを実行することができない。
【００３６】
そのため、リアルタイムＯＳ３０のタスクの実行は時刻Ｔ２まで保留され、時刻Ｔ２から開始される。本来、時刻Ｔ１から実行されるべきタスクが、時刻Ｔ２から実行されるため、（Ｔ２−Ｔ１）の時間Ｅ１だけタスクの実行開始が遅延する。この遅延時間Ｅ１を、「プリエンプションによる開始遅延」と言う。図４（ｃ）には、時刻Ｔ３から時刻Ｔ４までの期間もプリエンプションによる遅延時間Ｅ２も示されている。
【００３７】
図４（ｄ）に示すように、システムタイマー１２２によるオーバーフロー割り込みは周期Ｔａで発生している。本来、制御周期Ｔａで実行されるべきリアルタイムＯＳ３０のタスクは、プリエンプションによる開始遅延が発生すると、制御周期Ｔｂで実行されることになり、想定された周期によるタスクの実行が阻害される。
【００３８】
一般的には、制御周期が相対的に短い割り込み信号には高い優先度を与え、制御周期が相対的に長い割り込み信号には低い優先度を与える、という規則を採用する。同じ規則をモータ制御ソフトウェアとリアルタイムシステムが共存するシステムに適用する場合、リアルタイムシステムを駆動するタイマーの割り込みに低い優先度を与え、モータ制御ソフトウェアを駆動するタイマーの割り込みに高い優先度を与えることになる。そのため、図４では、モータ制御ソフトウェア２０が先に実行されている場合には、システムタイマー１２２からの割り込み信号が発生しても、優先度が低いため、リアルタイムＯＳ３０のタスクにプリエンプションによる開始遅延が発生していた。
【００３９】
ただし、上述の規則を適用しない場合には、リアルタイムＯＳ３０のタスクが先に実行されていることにより、モータ制御ソフトウェア２０にプリエンプションによる開始遅延が発生する状況も想定され得る。高速に回転するモータＭを正確に制御するために、モータ制御ソフトウェア２０の制御周期は相対的に短く設定されている。したがって、プリエンプションによる開始遅延が発生すると、モータ駆動システム１の動作に影響を与え得る。影響の程度は、リアルタイムＯＳ３０に発生したプリエンプションによる開始遅延の影響よりも大きいと考えられる。
【００４０】
本願発明者は、モータ制御ソフトウェア２０およびリアルタイムＯＳ３０の各々が、予め設定された制御周期で実行されるようにするために、本開示にかかる技術をなすに至った。以下、図５から１３を参照しながら本開示の構成および動作を説明する。
【００４１】
まず、図５〜７を参照しながら、本開示の処理を実現するためのモータ駆動システム１の具体的な構成を説明する。その後図８〜１３を参照しながら、プロセッサ１０の具体的な処理を説明する。
【００４２】
図５は、本開示によるモータ駆動システム１のハードウェア構成の例を示す図である。
【００４３】
モータ駆動システム１は、モータＭと、互いにバス８によって接続された、ＲＯＭ（リードオンリーメモリ）２、ＲＡＭ（ランダムアクセスメモリ）４、Ｉ／Ｆ（入出力インタフェース）６およびプロセッサ１０を有している。図示されていない他の回路またはデバイス（ＡＤ変換器など）が付加的にバス１１に接続されていても良い。
【００４４】
モータＭは、便宜上、モータ本体だけではなく、モータ本体を駆動するモータ駆動回路も含む。モータＭは、ＰＷＭ信号を受け取り、当該ＰＷＭ信号に基づいて回転する。
【００４５】
ＲＯＭ２は、リアルタイムＯＳ３０のデータを格納する不揮発性メモリである。ＲＯＭ２は、さらに、モータ制御ソフトウェア２０を格納していてもよい。ただしモータ制御ソフトウェア２０は、後述するプロセッサ１０のプログラム用フラッシュメモリに格納されていてもよい。ＲＡＭ４は、ワークメモリとして使用される揮発性メモリである。
【００４６】
Ｉ／Ｆ６は、データ入出力端子であり、モータ駆動システム１が外部装置とデータを授受する際に利用される。Ｉ／Ｆ６は種々の接続端子であり得る。Ｉ／Ｆ６は、リアルタイムＯＳ３０のタスクによって生成されたデータを送信するための通信端子であってもよい。または、ＲＯＭ２が書換可能であるときにおいて、Ｉ／Ｆ６は、新たなバージョンのリアルタイムＯＳ３０を受け取るデータ入力端子であってもよい。またはＩ／Ｆ６は、無線による通信を行う無線通信回路であってもよい。
【００４７】
プロセッサ１０は、ＲＡＭ４に格納されたリアルタイムＯＳ３０を実行し、またはプロセッサ１０内部のＳＲＡＭに格納されたモータ制御ソフトウェア２０を実行する。
【００４８】
モータ駆動システム１に電源が投入されると、プロセッサ１０はＲＯＭ２からリアルタイムＯＳ３０のデータを読み出し、ＲＡＭ４に展開する。これにより、プロセッサ１０はリアルタイムＯＳ３０を実行することができる。また、プロセッサ１０は、ＲＯＭ２からモータ制御ソフトウェア２０を読み出し、プロセッサ１０内部のＳＲＡＭに展開する。これにより、プロセッサ１０はモータ制御ソフトウェア２０を実行することができる。
【００４９】
プロセッサ１０が、後述する本開示の処理を実行することにより、モータ制御ソフトウェア２０およびリアルタイムＯＳ３０のタスクをそれぞれ周期的に実行する。プロセッサ１０は、モータ制御ソフトウェア２０を実行することによって生成したPWM信号をモータＭに送り、モータＭの回転を制御する。また、プロセッサ１０は、リアルタイムＯＳ３０を動作させることによって生成したデータを、Ｉ／Ｆ６を介して外部に送信する。
【００５０】
モータ駆動システム１は、たとえば３２ビットの汎用的なマイクロコントローラによって実現され得る。そのようなマイクロコントローラは、１個または複数の集積回路チップから構成され得る。
【００５１】
次に、プロセッサ１０の内部構造を説明する。
【００５２】
図６は、プロセッサ１０の内部構造を示す。
【００５３】
プロセッサ１０は、内部データバス１１９で互いに接続された、プロセッサコア１２０と、分周器１２１と、システムタイマー１２２と、ハードウェアタイマー１２３と、ＳＲＡＭ１２４と、プログラム用フラッシュメモリ１２５と、ＥＥＰＲＯＭ１２６と、定周期／可変周期タイマー群１２７と、周辺回路群１２８と、レジスタ１２９とを有する。
【００５４】
プロセッサコア１２０は、内部にさらに種々の構成を有する演算回路である。プロセッサコア１２０の内部には、たとえば、プログラムカウンタ、命令レジスタ、命令デコーダ、スタックポインタ、汎用レジスタ、タイマー割り込み制御回路を有している。これらはいずれも一般的であり、詳細な説明は省略する。
【００５５】
分周器１２１は、プロセッサ１０の外部に設けられた、水晶またはシリコンを用いる発振子１１８から外部クロック信号を受け取り、外部クロック信号を分周して所定の周波数のクロック信号を出力する。
【００５６】
システムタイマー１２２は、分周器１２１から受け取ったクロック信号に基づいて、プロセッサ１０を動作させるための所定周波数の内部クロック信号を生成する。
【００５７】
またシステムタイマー１２２およびハードウェアタイマー１２３は、それぞれ、分周器１２１から受け取ったクロック信号を利用してタイマーカウンタ（後述）をカウントアップし、カウンタ値が予め定められた値になると割込信号をプロセッサコア１２０に出力する。なお、ハードウェアタイマーの数は任意である。複数個設けられていてもよい。また、タイマーカウンタは、カウントダウンを行ってもよい。本開示ではカウントアップの例を挙げて説明する。
【００５８】
なお、分周器１２１から、どの周波数のクロック信号をシステムタイマー１２２およびハードウェアタイマー１２３に入力するかは、プロセッサコア１２０が選択することができる。
【００５９】
ＳＲＡＭ１２４は、プロセッサコア１２０が動作する際に利用されるワークメモリであり、書き換え頻度が高いデータを格納する。
【００６０】
プログラム用フラッシュメモリ１２５は、プログラムおよび書き換え頻度が低いデータを格納するメモリである。
【００６１】
ＥＥＰＲＯＭ１２６は、電源が遮断されても記録内容が消えない不揮発メモリの一種であり、電気的に内容を書き換えることが可能なメモリである。以下で説明する、予め設定された各種の値は、ＥＥＰＲＯＭ１２６に格納されている。
【００６２】
定周期／可変周期タイマー群１２７は、ＰＷＭ信号を生成するための複数のタイマーが組み合わされた回路である。定周期タイマーと可変周期タイマーとを組み合わせることにより、パルス幅変調された信号を生成することができる。
【００６３】
周辺回路群１２８は、上述した回路以外の回路の集合である。周辺回路群１２８は、たとえば、高精度アナログ回路（ＡＤコンバータ、ＤＡコンバータ）、モータ制御回路、シリアル信号とパラレル信号とを相互に変換するＵＡＲＴ(Universal Asynchronous Receiver Transmitter)、通信インタフェース装置を含む。
【００６４】
レジスタ１２９は、システムタイマー１２２およびハードウェアタイマー１２３の各々の優先度を指定するデータを保持する。本開示では、ハードウェアタイマー１２３の優先度の方がシステムタイマー１２２の優先度よりも高く設定される。たとえば小さい値ほど優先度が高いという規則を採用した場合には、ハードウェアタイマー１２３の優先度の方が、システムタイマー１２２の優先度よりも小さい値が設定される。優先度が相対的に高いタイマーからの割込信号は、優先度が相対的に低いタイマーからの割込信号よりも優先して処理される。たとえば、プロセッサコア１２０は、リアルタイムＯＳ３０のタスクの実行中であっても、ハードウェアタイマー１２３から割込信号を受けたときは、モータ制御ソフトウェア２０を優先して実行する。本開示において、上述の優先度を「割り込み優先度」と呼ぶことがある。
【００６５】
本開示においては、ハードウェアタイマー１２３のオーバーフロー割り込みに応答してプロセッサコア１２０がモータ制御ソフトウェア２０を実行している時間帯に、システムタイマー１２２のオーバーフロー割り込みが発生したとしても、プロセッサコア１２０はシステムタイマー１２２の割り込みの処理を行わない。したがって、リアルタイムＯＳ３０の実行は保留される。
【００６６】
次に、システムタイマー１２２の構成を説明する。
【００６７】
図７は、システムタイマー１２２の内部構成を示す。
【００６８】
システムタイマー１２２は、タイマーカウンタ１３０および自動再ロードレジスタ（ＡＲＲ：Auto Reload Register）１３２を有している。ＡＲＲ１３２は、上限カウント値Ｃｆを示すデータ１３６を保持している。タイマーカウンタ１３０は、分周器１２１から供給されるクロック信号に基づいてカウンタ値を、カウント初期値Ｃ０からカウントアップする。そしてタイマーカウンタ１３０は、カウンタ値がＡＲＲ１３２に保持された上限カウント値Ｃｆに到達するとカウントを停止し、プロセッサコア１２０に、タイマーカウンタ１３０にオーバーフローが発生したことを通知するオーバーフロー割込信号を出力する。その後、タイマーカウンタ１３０は、カウント値をカウント初期値Ｃ０にリセットする。
【００６９】
本開示では、カウント初期値Ｃ０から上限カウント値Ｃｆに到達するまでの時間は、１ミリ秒である。ただし後述の処理により、その値を変更して、オーバーフローが発生するまでの時間を一時的に変更することにより、その後、オーバーフローが発生するタイミングをずらすことができる。
【００７０】
発振子１１８および分周器１２１は十分な精度のクロック信号を出力する。当該クロック信号を受けてカウントアップするシステムタイマー１２２およびハードウェアタイマー１２３もまた、十分な精度でカウントアップし、周期Ｐごとにオーバーフローを発生させ得る。
【００７１】
タイマーカウンタ１３０は、通常は、カウント初期値Ｃ０から上限カウント値Ｃｆまでカウントする。しかしながら、プロセッサコア１２０からカウント設定値Ｃｓを指定する信号を受け取ると、当該カウント設定値Ｃｓからカウントを開始する。カウント設定値Ｃｓを適宜設定することにより、タイマーカウンタ１３０がオーバーフローするまでの時間を調整することができる。
【００７２】
本実施形態では、タイマーカウンタ１３０は指定されたカウント設定値Ｃｓからカウントアップし、上限カウント値Ｃｆに到達すると、カウント値をカウント初期値Ｃ０にリセットする。したがって、タイマーカウンタ１３０は、カウント設定値Ｃｓが指定された時だけ、カウントを開始する値を変更する。
【００７３】
なお、タイマーカウンタ１３０がオーバーフローするまでの時間を調整する他の方法として、カウント初期値Ｃ０を変更するのではなく、上限カウント値Ｃｆを変更する方法が考えられる。上限カウント値Ｃｆをより小さく設定すれば、タイマーカウンタ１３０がオーバーフローするまでの時間は短くなり、上限カウント値Ｃｆをより大きく設定すれば、タイマーカウンタ１３０がオーバーフローするまでの時間は長くなる。上限カウント値Ｃｆを変更した後は、変更後の値が引き続き採用されてもよいし、タイマーカウンタ１３０が一旦リセットされた後は所定値に戻してもよい。
【００７４】
ハードウェアタイマー１２３（図６）の構成もまた、図７に示すシステムタイマー１２２の構成と同じであり得る。ただしハードウェアタイマー１２３においては、カウント初期値Ｃ０から上限カウント値Ｃｆに到達するまでの時間は、５００マイクロ秒である。システムタイマー１２２よりも２倍速い理由は、ハードウェアタイマー１２３のタイマーカウンタ１３０は、システムタイマー１２２のタイマーカウンタ１３０よりも、１クロック信号あたり２倍の大きさでカウント値を変化させるからである。この結果、同じクロック信号を用い、同じ上限カウント値が設定されていたとしても、ハードウェアタイマー１２３はシステムタイマー１２２よりも常に２倍速くオーバーフロー割込信号を発生させることができる。
【００７５】
上述の説明から理解されるように、プロセッサコア１２０は、システムタイマー１２２およびハードウェアタイマー１２３の各々について、タイマーカウンタ１３０を読み出すことも可能であるし、タイマーカウンタ１３０のカウント初期値Ｃ０および／または上限カウント値Ｃｆを書き換えることが可能である。
【００７６】
次に、図８〜図１１を参照しながら、本開示によるプロセッサ１０の動作を説明する。
【００７７】
図８は、プロセッサ１０の初期動作の手順を示すフローチャートである。
【００７８】
ステップＳ１１において、プロセッサ１０は、システムタイマーおよびハードウェアタイマーに同一のカウントアップ周期を設定する。具体的には、プロセッサ１０のプロセッサコア１２０は、システムタイマー１２２およびハードウェアタイマー１２３に、分周器１２１から同じ周波数のクロック信号を入力する。これにより、システムタイマー１２２およびハードウェアタイマー１２３は、等しい周期でカウントアップを行う。
【００７９】
ステップＳ１２において、プロセッサコア１２０は、通常動作を行う。通常動作とは、プロセッサコア１２０が、システムタイマー１２２からオーバーフロー割込信号およびハードウェアタイマー１２３からのオーバーフロー割込信号に応答して、モータ制御ソフトウェア２０およびリアルタイムＯＳ３０を切り換えて実行する動作である。
【００８０】
図８の処理により、モータ駆動システム１の動作が開始される。
【００８１】
次に、図９および図１０を参照する。
【００８２】
図９は、プロセッサ１０のタスク起動タイミング調整処理の手順を示すフローチャートである。図９の処理は、図８の開始後から、通常処理と平行して実行される。また図１０は、主として、図９の処理を実行したときのシステムタイマー１２２のカウンタ値の変化を示す。図１０（ａ）および（ｂ）はハードウェアタイマー１２３に基づくモータ制御ソフトウェア２０の動作に関するタイミングを示す。図１０（ｃ）および（ｄ）は、システムタイマー１２２に基づくリアルタイムＯＳ３０の動作に関するタイミングを示す。また図１０（ｅ）は図１０（ｄ）の部分拡大図である。
【００８３】
図９のステップＳ２１において、プロセッサコア１２０は、割り込み優先度の高いタイマーから割込信号を受信するまで、通常処理を実行する。ここでいう「割り込み優先度の高いタイマー」とは、ハードウェアタイマー１２３である。なお、割り込み優先度はレジスタ１２９（図６）に予め設定されている。プロセッサコア１２０は、ハードウェアタイマー１２３から割込信号を受け取ると、続くステップＳ２２を実行する。図１０（ｂ）に示されるように、時刻Ｔ０において、ハードウェアタイマー１２３から割込信号が出力されている。
【００８４】
ステップＳ２２において、プロセッサコア１２０は、割り込み優先度の低いタイマーのカウンタ値Ａ１を取得する。ここでいう「割り込み優先度の低いタイマー」とはシステムタイマー１２２である。プロセッサコア１２０は、取得したカウンタ値Ａ１をＳＲＡＭ１２４に格納する。図１０（ｄ）に示されるように、時刻Ｔ０において、システムタイマー１２２のカウンタ値Ａ１が取得されている。
【００８５】
ステップＳ２３において、プロセッサコア１２０は、通常動作を行う。すなわちプロセッサコア１２０は、ハードウェアタイマー１２３から割込信号を受け取っているため（ステップＳ２１）、モータ制御ソフトウェア２０を実行する（図１０（ａ））。モータ制御ソフトウェア２０の実行が完了した後、プロセッサコア１２０は次のステップＳ２４を実行する。
【００８６】
ステップＳ２４において、プロセッサコア１２０は、割り込み優先度の低いタイマーのカウント値Ａ２を取得する。プロセッサコア１２０は、取得したカウンタ値Ａ２をＳＲＡＭ１２４に格納する。図１０（ｄ）に示されるように、時刻Ｔ１０において、システムタイマー１２２のカウンタ値Ａ２が取得されている。
【００８７】
ステップＳ２５において、プロセッサコア１２０は、取得した各カウンタ値Ａ１およびＡ２が、Ａ２＜＝Ａ１であるか否かを判定する。Ａ２＜＝Ａ１である場合には処理はステップＳ２６に進み、Ａ２＞Ａ１である場合には処理はステップＳ２６に進む。ステップＳ２５の処理の意味は、モータ制御ソフトウェア２０の実行中に、割り込み優先度の低いシステムタイマー１２２がオーバーフローしたか否かを判定することにある。システムタイマー１２２はカウントアップしているため、後に取得した値Ａ２が、先に取得した値Ａ１以下の場合には、システムタイマー１２２がオーバーフローして一旦リセットされたことを意味する。ステップＳ２６の判定処理を実行することにより、プロセッサコア１２０は、システムタイマー１２２およびハードウェアタイマー１２３の割込信号が同じタイミングもしくは近いタイミングで発生したことを知ることができる。
【００８８】
なお、図１０（ｄ）は、Ａ２＜＝Ａ１が成り立つ場合の例である。時刻Ｔ０と時刻１０の間で、システムタイマー１２２はオーバーフロー割り込みを出力していることが理解される。
【００８９】
ステップＳ２６において、プロセッサコア１２０は、割り込み優先度の低いシステムタイマー１２２のカウント初期値Ｃｓを、カウント上限値ＣｆからＤだけ前の値、つまり、カウント上限値Ｃｆから見てＤだけ早くカウントされる値（Cｆ-Ｄ）に変更してシステムタイマー１２２をリセットする。これにより、システムタイマー１２２はカウント初期値Cｆ-Ｄからカウントを開始する。
【００９０】
ここで、カウント値Ｄは、優先度の高いモータ制御ソフトウェア２０の処理が終了した後にすぐに優先度の低い割り込みが発生するように設定する値である。より具体的には、図１０（ｄ）に示すように、システムタイマー１２２のオーバーフローが発生し割り込み信号が発生する時刻Ｔ１１と、モータ制御ソフトウェア２０の処理が完了した時刻Ｔ１０との差に相当するカウント値以上の値である。カウント値Ｄを（Ｔ１１―Ｔ１０）に設定すると、優先度の高いモータ制御ソフトウェア２０の処理が終了した後の次のカウントで優先度の低い割り込みが発生する。カウント値Ｄを（Ｔ１１―Ｔ１０）より長く設定して若干の余裕を持たせてもよい。たとえば、モータ制御ソフトウェア２０の最悪実行時間に相当するカウント値をカウント値Ｄとして設定することができる。図１０（ｅ）は、（Ｔ１１―Ｔ１０）より長い時間に相当するカウント値Ｄを設定したときの例である。システムタイマー１２２は、Ｔ１０よりも前の時刻Ｔｘにリセットされ、カウント値Ｃｓ（＝Ｃｆ―Ｄ）からカウントが開始されている。
【００９１】
上述の図９のステップＳ２５の説明は、カウントアップするシステムタイマー１２２に適用される処理である。システムタイマー１２２がカウントダウンを行う場合には、先に取得されたカウント値Ａ１と、後に取得されたカウント値Ａ２との関係は、Ａ１＜＝Ａ２に読み替えればよい。Ａ１＜＝Ａ２が成り立つとき、プロセッサコア１２０は、モータ制御ソフトウェア２０の実行中にシステムタイマー１２２からのアンダーフロー割込信号が発生したことを検出する。
【００９２】
次に、図１１および図１２を参照しながら、変形例を説明する。図９および図１０の例では、システムタイマー１２２に設けられたタイマーカウンタ１３０のカウント初期値を変更した。本変形例では、タイマーカウンタ１３０の上限カウント値を変更する。
【００９３】
図１１は、変形例によるプロセッサ１０のタスク起動タイミング調整処理の手順を示すフローチャートである。また図１２は、主として、図９の処理を実行したときのシステムタイマー１２２のカウンタ値の変化を示す。
【００９４】
図１１の処理のうち、ステップＳ２１からＳ２５までは図９と同じであるため説明を省略する。
【００９５】
ステップＳ３１において、プロセッサコア１２０は、割り込み優先度の低いシステムタイマー１２２の上限カウント値Ｃｆを、これまでの値からカウントＤだけ遅くカウントされる値に変更する。変更前の上限カウント値ＣｆをＣｆａとおくと、変更後の上限カウント値Ｃｆは、Ｃｆａ＋Ｄと表現される。これにより、システムタイマー１２２はこれまでの上限カウント値よりもカウントＤだけ遅い時間にオーバーフローする。つまり、システムタイマー１２２からのオーバーフロー割込信号の発生を、カウント値Ｄに相当する時間だけ遅らせることができる。
【００９６】
図１２（ｄ）には、カウント上限値Ｃｆが（Cｆａ＋Ｄ）に設定された結果、モータ制御ソフトウェア２０の処理が完了した時刻以後の時刻Ｔ１２においてシステムタイマー１２２がオーバーフロー割込信号を発生させていることが示されている。
【００９７】
ステップＳ３２において、プロセッサコア１２０は、システムタイマー１２２のカウント値リセット後に、システムタイマー１２２の上限カウント値Ｃｆ（＝Cｆａ＋Ｄ）を、再びＤだけ小さい値に設定する。つまり、ステップＳ３１において変更される前の上限カウント値Ｃｆａに戻す。これにより、上限カウント値変更後のシステムタイマー１２２は、変更前のシステムタイマー１２２と比較すると、カウント値Ｄに相当する時間だけ遅くカウントを開始し、オーバーフローを発生させることになる。よって、ハードウェアタイマー１２３のオーバーフロー割込信号に応答して実行されるモータ制御ソフトウェア２０の処理後に、システムタイマー１２２がオーバーフローを発生し、リアルタイムＯＳ３０のタスクを実行させることができる。
【００９８】
なお、上述の説明では、ハードウェアタイマー１２３はシステムタイマー１２２よりも２倍または２０倍速くオーバーフロー割込信号を発生させる例を挙げた。しかしながらこれらの値は一例に過ぎない。ハードウェアタイマー１２３はシステムタイマー１２２よりもＮ倍（Ｎ：正の整数）高い周波数でカウント値を変化させればよい。そのために、プロセッサコア１２０は、分周器１２１からハードウェアタイマー１２３に入力されるクロック信号の周波数を、システムタイマー１２２に入力されるクロック信号よりもＮ倍高周波にすればよい。なお、Ｎは１であってもよい。このときは、ハードウェアタイマー１２３の仕様が優先されるため、ハードウェアタイマー１２３も１ミリ秒未満でオーバーフローを発生させることになる。その場合には、プロセッサコア１２０は、システムタイマー１２２からの割込信号がＮ回発生する度に１回、割込信号に応答してリアルタイムＯＳ３０のタスクを実行すればよい。
【００９９】
あるいは、システムタイマー１２２のカウント値の変化量を１としたとき、ハードウェアタイマー１２３はカウント値の変化量をＮ（Ｎ：正の整数）に設定して、カウント値を変化させればよい。
【０１００】
また、上述の説明では、モータ制御ソフトウェア２０およびリアルタイムＯＳ３０の２つのソフトウェアを動作させる例を挙げた。しかしながら、リアルタイムＯＳ３０の制御周期よりも速い他のソフトウェアをさらに同時に動作させることも可能である。その場合には、複数のハードウェアタイマー１２３が用いられる。プロセッサコア１２０は、全てのソフトウェアの実行タイミング終了後にリアルタイムＯＳ３０のタスクが実行されるよう、システムタイマー１２２のカウント開始値または上限カウント値を調整する。たとえばプロセッサコア１２０は、上述の処理により、各ハードウェアタイマー１２３のオーバーフロータイミングおよびソフトウェアの実行終了時刻に基づいて、システムタイマー１２２のカウント開始値または上限カウント値をそれぞれ決定し、重複が生じないカウント開始値または上限カウント値を一つ決定すればよい。
【０１０１】
具体例として、５０マイクロ秒の実行周期を持つモータ制御ソフトウェアと、１００マイクロ秒周期の実行周期を持つレゾルバーリーダソフトウェアと、１ミリ秒または１ミリ秒より遅い周期で動作する複数のタスクを管理するリアルタイムＯＳ３０とを、プリエンプションによる開始遅延を生じさせることなくそれぞれ動作させることができる。
【０１０２】
（応用例）
以下、上述のモータ駆動システムを搭載した応用例を説明する。
【０１０３】
図１３は、自走ロボット２００の構成を示す。自走ロボット２００は、搬送テーブル２０１と、システムコントローラ２０２と、モータ駆動システム２０３Ａおよび２０３Ｂと、２つの駆動輪２０４Ａおよび２０４Ｂとを有する。
【０１０４】
搬送テーブル２０１は運搬物を載置するテーブルである。
【０１０５】
システムコントローラ２０２は、上位装置２５０からの有線または無線による指示に基づいて、自走ロボット２００の進行方向および走行速度を制御する。具体的には、システムコントローラ２０２は、２つの駆動輪である左輪２０４Ａおよび右輪２０４Ｂの回転速度および回転方向を決定し、モータ駆動システム２０３Ａおよび２０３Ｂへ制御信号を送信する。
【０１０６】
モータ駆動システム２０３Ａおよび２０３Ｂは、システムコントローラ１０２からの制御信号に基づいて、それぞれ、駆動輪２０４Ａおよび２０４Ｂの回転速度および回転方向を独立して制御する。
【０１０７】
図１４は、自走ロボット２００のハードウェア構造を示す。参考のため、自走ロボット２００を構成しない上位装置１５０を破線で示す。
【０１０８】
システムコントローラ２０２は、プロセッサ１０Ｃを有している。プロセッサ１０Ｃは、図６で示すハードウェア構造を有している。そのため、プロセッサ１０Ｃの詳細な説明は省略する。
【０１０９】
モータ駆動システム２０３Ａは、プロセッサ１０Ａと、モータＭ−Ａとを有する。モータ駆動システム２０３Ｂは、プロセッサ１０Ｂと、モータＭ−Ｂとを有する。モータ駆動システム２０３Ａおよび２０３Ｂは、それぞれ、図５に示すモータ駆動システム１に相当する。システムコントローラ２０２は、モータの駆動を制御する種々の制御信号、たとえば、モータの回転を開始させる制御信号、モータの回転速度を指示する制御信号、モータの回転を停止させる制御信号を、モータ駆動システム２０３Ａおよび２０３Ｂの各々に出力する。モータ駆動システム２０３Ａおよび２０３Ｂは、システムコントローラ２０２からの制御信号に基づいて、それぞれ上述の処理を行って、モータ制御ソフトウェア２０およびリアルタイムＯＳ３０を実行する。さらに、システムコントローラ２０２のプロセッサ１０Ｃもまた、モータ制御ソフトウェアおよびリアルタイムＯＳを実行し、上述の同期処理を行ってもよいし、モータ制御ソフトウェアに代えて、リアルタイムＯＳよりも速い制御周期の他のソフトウェアを実行してもよい。
【０１１０】
なお、プロセッサ１０Ａおよび１０Ｂとプロセッサ１１２Ｂとは、必ずしも同じメーカの同じ型番の製品である必要はない。モータＭ−ＡおよびＭ−Ｂについても同様である。自走ロボット２００として必要とされる性能を有していればよい。モータ駆動システム２０３Ａおよび２０３Ｂは、それぞれインテリジェントモータと呼ばれることもある。
【０１１１】
なお、システムコントローラ２０２、  モータ制御システム２０３Ａおよび２０３Ｂをまとめて、モータ制御システムと呼ぶことがある。
【０１１２】
上述の例は、２つの後輪が駆動輪であるとして説明したが、これは一例である。たとえば前輪および後輪を別個のモータで駆動する二輪車、複数の車輪を別個のモータで駆動する三輪車、四輪車などにも、本開示は適用可能である。さらに、本開示は、システムコントローラが１つのモータを有するモータ駆動システムの動作を制御するモータ制御システムにも適用可能である。
【０１１３】
本開示によれば、異なる周期を持つ互いに無関係な複数の制御プログラムを同一プロセッサ上で並列的に実行させる場合であっても、互いの実行が干渉せず、プリエンプションによる開始遅延を生じない。従来はセマフォーなどによってプログラム間の同期を行っていた。しかしながら本開示の方法によれば、セマフォーを使うことなく、オーバーヘッドなしに実行順序を保証することができる。
【産業上の利用可能性】
【０１１４】
本開示の例示的なモータ駆動システムは、相対的に短い制御周期の制御ソフトウェアと、相対的に長い時間間隔でシステムタイマー割り込みを発生させてタスクを実行するＯＳとを同じプロセッサ上で動作させる際に有用である。
【符号の説明】
【０１１５】
１    モータ駆動システム１
１０  プロセッサ
１２０  プロセッサコア
１２１  分周器
１２２  システムタイマー
１２３  ハードウェアタイマー
１２４  ＳＲＡＭ
１２５  プログラム用フラッシュメモリ
１２６  ＥＥＰＲＯＭ
１２７  定周期／可変周期タイマー群
１２８  周辺回路群
１２９  レジスタ
１３０  タイマーカウンタ
１３２  自動再ロードレジスタ
Ｃｓ  カウント設定値
Ｃｆ  上限カウント値
【図１】
2019133206.tif 000003
【図２】
2019133206.tif 000004
【図３】
2019133206.tif 000005
【図４】
2019133206.tif 000006
【図５】
2019133206.tif 000007
【図６】
2019133206.tif 000008
【図７】
2019133206.tif 000009
【図８】
2019133206.tif 000010
【図９】
2019133206.tif 000011
【図１０】
2019133206.tif 000012
【図１１】
2019133206.tif 000013
【図１２】
2019133206.tif 000014
【図１３】
2019133206.tif 000015
【図１４】
2019133206.tif 000016