(57)【要約】【課題】リアルタイム分散システムにおいて、通信回線によって接続される複数のプロセッサ間でタスクの実行を同期させる。【解決手段】モータ駆動システムは、通信回線で接続された、第１プロセッサを有する第１モータユニットおよび第２プロセッサを有する第２モータユニットを備える。第１プロセッサは一定の間隔Ｐ１でデータを送信する。第２プロセッサは、第１時刻以後、一定の間隔Ｐ１でデータを受信し、データに基づいて動作するタスクを、第２時刻を起点として一定の間隔Ｐ２で実行する。同期モードにおいて、第２プロセッサは、第２時刻を、第１時刻以後の所定の許容時間内の時刻に更新する。通常動作モードにおいて、第１プロセッサは通信回線を介して一定の間隔Ｐ１でデータを送信し、第２プロセッサは、データに基づいて動作するタスクを、更新された第２時刻を起点として一定の間隔Ｐ２で実行する。【選択図】図１１
2019133205.tif 000002
【特許請求の範囲】
【請求項１】
第１モータ、および、前記第１モータを制御する第１プロセッサを有する第１モータユニットと、
第２モータ、および、前記第２モータを制御する第２プロセッサを有する第２モータユニットと
を備えたモータ駆動システムであって、
前記第１モータユニットおよび前記第２モータユニットは通信回線で接続されており、
前記第１プロセッサは、前記通信回線を介して一定の間隔Ｐ１でデータを送信し、
前記第２プロセッサは、
前記通信回線を介して、第１時刻以後、一定の間隔Ｐ１で前記データを受信し、
前記データに基づいて動作するタスクを、第２時刻を起点として前記一定の間隔Ｐ２で実行し、
同期モードにおいて、前記第２プロセッサは、前記第２時刻を、前記第１時刻以後の所定の許容時間内の時刻に更新し、
前記同期モードの後の通常動作モードにおいて、前記第１プロセッサは前記通信回線を介して前記一定の間隔Ｐ１でデータを送信し、前記第２プロセッサは、前記データに基づいて動作する前記タスクを、更新された第２時刻を起点として前記一定の間隔Ｐ２で実行する、モータ駆動システム。
【請求項２】
前記第２モータユニットは、所定のクロックに基づいてカウント値を増加または減少させるカウンタをさらに有しており、
前記同期モードおよび前記通常動作モードにおいて、前記第２プロセッサは、前記カウンタのカウント値が予め定められた値になった時刻を前記第２時刻として更新し、
前記第２プロセッサは、更新された第２時刻を起点として前記タスクを実行する、請求項１に記載のモータ駆動システム。
【請求項３】
前記カウンタは、設定されたカウント開始値から前記カウント値を増加または減少させ、
前記同期モードにおいて、前記第２プロセッサは、前記第１時刻と前記第２時刻との差分に基づいて、前記カウント開始値を設定する、請求項２に記載のモータ駆動システム。
【請求項４】
前記第２プロセッサは、前記第１時刻と前記第２時刻との差分を示すカウント値を前記予め定められた値から減算し、または前記予め定められた値に加算して得られた値を、前記カウント開始値として設定する、請求項３に記載のモータ駆動システム。
【請求項５】
前記第１プロセッサおよび前記第２プロセッサは、異なるクロック周波数で動作する、請求項１から４のいずれかに記載のモータ駆動システム。
【請求項６】
前記第２プロセッサは、
前記同期モードにおいて、前記更新された第２時刻を起点として、前記第１時刻以後の所定の許容時間内にタスクが起動されているか否かを検証し、前記所定の許容時間内にタスクが起動されている場合には、前記同期モードの終了を前記第１プロセッサに通知を送信して前記通常動作モードに移行する、請求項１から５のいずれかに記載のモータ駆動システム。
【請求項７】
前記第１プロセッサは、前記一定の間隔Ｐ１でタスクを実行し、前記タスクの実行結果として、前記データを生成する、請求項１から６のいずれかに記載のモータ駆動システム。
【請求項８】
前記間隔Ｐ１と前記間隔Ｐ２とは等しい、請求項１から７のいずれかに記載のモータ駆動システム。
【請求項９】
前記第１モータ、および、前記第１モータを制御する第１プロセッサを有する第１モータユニットと、
前記第２モータ、および、前記第２モータを制御する第２プロセッサを有する第２モータユニットと
を備えたモータ駆動システムであって、
前記第１モータユニットおよび前記第２モータユニットは通信回線で接続されており、
同期モードにおいて、
前記第１プロセッサは、前記通信回線を介して第１時刻にデータを送信し、
前記第２プロセッサは、前記通信回線を介して、前記第２プロセッサにおいて前記データを受信した第２時刻、および、前記データに基づいて動作するタスクの実行開始時刻である第３時刻を示す情報を送信し、
前記第１プロセッサは、予め保持されている前記第２プロセッサの動作周波数の情報、前記第２時刻および前記第３時刻を示す情報に基づいて、前記第１時刻を、前記第２時刻および前記第３時刻の差分に相当する時間分だけ遅らせた時刻に更新し、
前記同期モードの後の通常動作モードにおいて、前記第１プロセッサは前記通信回線を介して、更新された第１時刻を起点にした一定の間隔Ｐ１でデータを送信し、前記第２プロセッサは、前記通信回線を介して、前記一定の間隔Ｐ２で前記データを受信し、前記タスクを実行する、モータ駆動システム。
【請求項１０】
請求項１から９のいずれかに記載のモータ駆動システムと、
第３プロセッサを有するシステムコントローラと
を備えたモータ制御システムであって、
前記モータ駆動システムの第１プロセッサおよび前記第３プロセッサは制御用通信回線で接続されており、
前記第１プロセッサおよび前記第２プロセッサの同期モードに先立って、前記第３プロセッサおよび前記第１プロセッサのシステム同期モードおよび通常動作モードが開始され、
前記第３プロセッサは、前記制御用通信回線を介して一定の間隔Ｐ３でデータを送信し、
前記第１プロセッサは、
前記制御用通信回線を介して、第１時刻以後、一定の間隔Ｐ３で前記データを受信し、
前記データに基づいて動作するタスクを、第２時刻を起点として前記一定の間隔Ｐ１で実行し、
前記システム同期モードにおいて、前記第１プロセッサは、前記第２時刻を、前記第１時刻以後の所定の許容時間内の時刻に更新し、
前記システム同期モードの後の通常動作モードにおいて、前記第３プロセッサは前記制御用通信回線を介して前記一定の間隔Ｐ３でデータを送信し、前記第１プロセッサは、前記データに基づいて動作する前記タスクを、更新された第２時刻を起点として前記一定の間隔Ｐ１で実行する、モータ制御システム。
【請求項１１】
請求項１０に記載のモータ制御システムと、
複数の車輪であって、前記第１モータによって駆動される第１車輪、および前記第２モータによって駆動される第２車輪を含む複数の車輪と、
物を載置する搬送テーブルと
を備えた自走ロボット。
【請求項１２】
第１プロセッサを有するシステムコントローラと、
モータ、および、前記モータを制御する第２プロセッサを有するモータユニットと
を備えたモータ制御システムであって、
前記システムコントローラおよび前記モータユニットは通信回線で接続されており、
前記第１プロセッサは、前記通信回線を介して一定の間隔Ｐ１でデータを送信し、
前記第２プロセッサは、
前記通信回線を介して、第１時刻以後、一定の間隔Ｐ１で前記データを受信し、
前記データに基づいて動作するタスクを、第２時刻を起点として前記一定の間隔Ｐ２で実行し、
同期モードにおいて、前記第２プロセッサは、前記第２時刻を、前記第１時刻以後の所定の許容時間内の時刻に更新し、
前記同期モードの後の通常動作モードにおいて、前記第１プロセッサは前記通信回線を介して前記一定の間隔Ｐ１でデータを送信し、前記第２プロセッサは、前記データに基づいて動作する前記タスクを、更新された第２時刻を起点として前記一定の間隔Ｐ２で実行する、モータ制御システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、マルチプロセッサ環境において、各プロセッサがタスクを開始するタイミングを調整する技術に関する。より具体的には、本開示は、互いにデータを送受信する複数のプロセッサの各々が、当該データを用いてタスクを動作させて別個のモータを制御する際の、タスクの開始タイミングを調整する技術に関する。
【背景技術】
【０００２】
リアルタイムシステムでは、あるジョブの実行が命令された時、そのジョブが設定された時間通りに実行され、終了されることが必要とされる。リアルタイムシステムでは、たとえばミリ秒オーダ、またはマイクロ秒オーダの時間管理が要求される。
【０００３】
このようなリアルタイムシステムの一態様として、複数のプロセッサのネットワークによって構成されるリアルタイム分散システムが知られている。近年は、車載分野やロボット分野を中心に、複数のプロセッサが協調しながらそれぞれモータおよび／または機械の制御を行うリアルタイム分散システムの開発が進められている。
【０００４】
リアルタイム分散システムでは、あるプロセッサが他のプロセッサにデータを送信し、当該他のプロセッサは受信したデータを用いてジョブを実行する。たとえば、Vector Corporation，"Time Synchronization to FlexRay in OSEKtime and Autosar OS"は、ＴＤＭＡ通信を行うリアルタイム分散システムを開示する。当該リアルタイム分散システムでは、データの送受信を行うために、全てのプロセッサがＴＤＭＡ通信によって相互に通信する。各プロセッサは、ＴＤＭＡ通信に同期したスケジューリングテーブルを持つ。プロセッサ間の通信遅延および実行時間をすべて考慮した上で、各タスクをスケジューリングテーブル上に正確に配置することにより、システム全体が順序よく動作する。
【０００５】
特表２０１２−５１６０７９号公報は、リアルタイム分散システムにおいて、すべての分散型モジュール（すなわちすべてのプロセッサ）を一つの統一された開始タイミングに同期させる方法を開示する。具体的には、当該リアルタイム分散システムには、すべての分散型モジュールに共通したタイミング情報（たとえばクロック）が与えられる。
【０００６】
特表２００４−５３６５３８号公報は、リアルタイム分散システムに存在する複数の分散型モジュールについて、どの二つのモジュールの間でも通信が起こりうる場合、モジュールクロックの位相および周波数を整合させる方法を開示する。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特表２０１２−５１６０７９号公報
【特許文献２】特表２００４−５３６５３８号公報
【非特許文献】
【０００８】
【非特許文献１】Vector Corporation, "Time Synchronization to FlexRay in OSEKtime and Autosar OS", 2007
【発明の概要】
【発明が解決しようとする課題】
【０００９】
各プロセッサ間にＴＤＭＡ通信を行わせる、または、各プロセッサにタイミング情報を与えるための複雑な機構を導入すると、コストがかかる。さらに、より低いコストで実現されるリアルタイム分散システムが必要とされている。
【００１０】
ただし、安価なシステムでは、各プロセッサが異なるクロックで動作したり、それらのプロセッサを動作させるソフトウェアの構成が相違することにより、プロセッサ間の動作の同期がとれないという状況が発生し得る。
【００１１】
本開示は、リアルタイム分散システムにおいて、通信回線によって接続される複数のプロセッサ間でタスクの実行を同期させ、必要とされるタイミングでリアルタイム分散システムを動作させることである。
【課題を解決するための手段】
【００１２】
本開示による例示的な第１のモータ駆動システムは、第１モータ、および、前記第１モータを制御する第１プロセッサを有する第１モータユニットと、第２モータ、および、前記第２モータを制御する第２プロセッサを有する第２モータユニットとを備えたモータ駆動システムであって、前記第１モータユニットおよび前記第２モータユニットは通信回線で接続されており、前記第１プロセッサは、前記通信回線を介して一定の間隔Ｐ１でデータを送信し、前記第２プロセッサは、前記通信回線を介して、第１時刻以後、一定の間隔Ｐ１で前記データを受信し、前記データに基づいて動作するタスクを、第２時刻を起点として前記一定の間隔Ｐ２で実行し、同期モードにおいて、前記第２プロセッサは、前記第２時刻を、前記第１時刻以後の所定の許容時間内の時刻に更新し、前記同期モードの後の通常動作モードにおいて、前記第１プロセッサは前記通信回線を介して前記一定の間隔Ｐ１でデータを送信し、前記第２プロセッサは、前記データに基づいて動作する前記タスクを、更新された第２時刻を起点として前記一定の間隔Ｐ２で実行する。
【００１３】
本開示による例示的な第２のモータ駆動システムは、前記第１モータ、および、前記第１モータを制御する第１プロセッサを有する第１モータユニットと、前記第２モータ、および、前記第２モータを制御する第２プロセッサを有する第２モータユニットとを備えたモータ駆動システムであって、前記第１モータユニットおよび前記第２モータユニットは通信回線で接続されており、同期モードにおいて、前記第１プロセッサは、前記通信回線を介して第１時刻にデータを送信し、前記第２プロセッサは、前記通信回線を介して、前記第２プロセッサにおいて前記データを受信した第２時刻、および、前記データに基づいて動作するタスクの実行開始時刻である第３時刻を示す情報を送信し、前記第１プロセッサは、予め保持されている前記第２プロセッサの動作周波数の情報、前記第２時刻および前記第３時刻を示す情報に基づいて、前記第１時刻を、前記第２時刻および前記第３時刻の差分に相当する時間分だけ遅らせた時刻に更新し、前記同期モードの後の通常動作モードにおいて、前記第１プロセッサは前記通信回線を介して、更新された第１時刻を起点にした一定の間隔Ｐ１でデータを送信し、前記第２プロセッサは、前記通信回線を介して、前記一定の間隔Ｐ２で前記データを受信し、前記タスクを実行する。
【００１４】
本開示による例示的な第１のモータ制御システムは、上述のいずれかのモータ駆動システムと、第３プロセッサを有するシステムコントローラとを備えたモータ制御システムであって、前記モータ駆動システムの第１プロセッサおよび前記第３プロセッサは制御用通信回線で接続されており、前記第１プロセッサおよび前記第２プロセッサの同期モードに先立って、前記第３プロセッサおよび前記第１プロセッサのシステム同期モードおよび通常動作モードが開始され、前記第３プロセッサは、前記制御用通信回線を介して一定の間隔Ｐ３でデータを送信し、前記第１プロセッサは、前記制御用通信回線を介して、第１時刻以後、一定の間隔Ｐ３で前記データを受信し、前記データに基づいて動作するタスクを、第２時刻を起点として前記一定の間隔Ｐ１で実行し、前記システム同期モードにおいて、前記第１プロセッサは、前記第２時刻を、前記第１時刻以後の所定の許容時間内の時刻に更新し、前記システム同期モードの後の通常動作モードにおいて、前記第３プロセッサは前記制御用通信回線を介して前記一定の間隔Ｐ３でデータを送信し、前記第１プロセッサは、前記データに基づいて動作する前記タスクを、更新された第２時刻を起点として前記一定の間隔Ｐ１で実行する。
【００１５】
本開示による例示的な自走ロボットは、上述の第１のモータ制御システムと、複数の車輪であって、前記第１モータによって駆動される第１車輪、および前記第２モータによって駆動される第２車輪を含む複数の車輪と、物を載置する搬送テーブルとを備えている。
【００１６】
本開示による例示的な第２のモータ制御システムは、第１プロセッサを有するシステムコントローラと、モータ、および、前記モータを制御する第２プロセッサを有するモータユニットとを備えたモータ制御システムであって、前記システムコントローラおよび前記モータユニットは通信回線で接続されており、前記第１プロセッサは、前記通信回線を介して一定の間隔Ｐ１でデータを送信し、前記第２プロセッサは、前記通信回線を介して、第１時刻以後、一定の間隔Ｐ１で前記データを受信し、前記データに基づいて動作するタスクを、第２時刻を起点として前記一定の間隔Ｐ２で実行し、同期モードにおいて、前記第２プロセッサは、前記第２時刻を、前記第１時刻以後の所定の許容時間内の時刻に更新し、前記同期モードの後の通常動作モードにおいて、前記第１プロセッサは前記通信回線を介して前記一定の間隔Ｐ１でデータを送信し、前記第２プロセッサは、前記データに基づいて動作する前記タスクを、更新された第２時刻を起点として前記一定の間隔Ｐ２で実行する。
【発明の効果】
【００１７】
本発明の例示的な実施形態によれば、異なるプロセッサ上で実行する周期タスクを同期させることが可能であり、最小制御周期でリアルタイム分散システムを構築することができる。
【図面の簡単な説明】
【００１８】
【図１】図１は、同期機構が存在しないリアルタイム分散システムにおける、プロセッサ間のデータ送受信および処理のタイミング例を示す図である。
【図２】図２は、データの送信遅延Ｄと、プロセッサＢにおけるデータ保持期間Ｌとを示す図である。
【図３】図３は、制御周期が最長になったときの例を示す図である。
【図４】図４は、制御周期が最短になったときの例を示す図である。
【図５】図５は、本開示によるリアルタイム分散システム１の構成を示す図である。
【図６】図６は、プロセッサ１２Ａおよび１２Ｂの内部構造を示す図である。
【図７】図７は、ハードウェア（Ｈ／Ｗ）タイマー２３ａの内部構成を示す図である。
【図８】図８は、クロック信号、Ｈ／Ｗタイマー２３ａのカウント値およびプロセッサコア２０が実行するタスクＴのタイミング図である。
【図９】図９は、プロセッサ１２Ａおよびプロセッサ１２Ｂ間でタスクの実行を同期させるための動作の流れを示す図である。
【図１０】図１０は、プロセッサ１２Ａの処理の手順を示すフローチャートである。
【図１１】図１１は、プロセッサ１２Ｂの処理の手順を示すフローチャートである。
【図１２】図１２は、プロセッサ１２Ｂのタイマーカウンタ３０のカウンタ値と、プロセッサ１２ＡのタスクＴおよびプロセッサ１２ＢのタスクＫの各実行タイミングを示すタイミング図である。
【図１３】図１３は、自走ロボット１００の構成を示す図である。
【図１４】図１４は、自走ロボット１００のハードウェア構造を示す図である。
【図１５】図１５は、溶接ロボット２００の構成を示す図である。
【図１６】図１６は、溶接ロボット２００のハードウェア構造を示す図である。
【発明を実施するための形態】
【００１９】
まず、図１〜図３を参照しながら、同期機構が存在しないリアルタイム分散システムを説明する。その後、本開示によるモータ駆動システムの実施形態を説明する。以下では、プロセッサによって実行されるタスクを、「プロセッサのタスク」と記述する。また、プロセッサがタスクを実行したことによって生成され、送信されたデータを、「タスクが出力したデータ」または「タスクによって出力されたデータ」と記述する。「タスク」は、プロセッサによって実行されるプログラムの一種であるが、擬人的に、データを生成し、送信する主体として表現する。
【００２０】
図１は、同期機構が存在しないリアルタイム分散システムにおける、プロセッサ間のデータ送受信および処理のタイミング例を示す。図１には、プロセッサＡのタスクＴから出力されたデータが、プロセッサＢによって受信され、プロセッサＢのタスクＫの実行に利用されるタイミングが示されている。図１において、タスクＴおよびＫはそれぞれ同じ周期Ｐで実行される周期タスクである。プロセッサＡのタスクＴから出力されたデータは、所定の通信遅延を経た後、プロセッサＢに受信され、タスクＫの次の実行タイミングまで保持されて、タスクＫの実行に利用される。
【００２１】
ここで、図１の破線の円で囲んだ部分に注目する。当該部分の拡大図が図２に示されている。
【００２２】
図２は、データの送信遅延Ｄと、プロセッサＢにおけるデータ保持期間Ｌとを示す。図示されるように、データ保持期間Ｌが長くなると、それだけタスクＴおよびＫによって構成されるシステムの制御周期が長くなる。ここで、「制御周期」は、プロセッサＡのタスクＴの実行開始から、当該タスクＴが出力したデータを利用する、プロセッサＢのタスクＫの実行が完了するまでの期間を言う。図２には制御周期Ｃも併せて示されている。以下では、タスクＴの実行時間をＥTと表し、タスクＫの実行時間をＥKと表す。
【００２３】
図３は、制御周期が最長になったときの例を示す。プロセッサＢがタスクＫを実行した直後に、プロセッサＡからデータを受信したとき、制御周期Ｃが最長になる。このとき、上述の保持期間ＬはタスクＫの実行周期Ｐよりも僅かに短いだけであり、実質的に等しい。よって最長の制御周期は「ＥT＋Ｄ＋Ｐ＋ＥK」と表現される。制御周期が長くなると、システムが破たんするおそれがある。たとえばプロセッサＢのタスクＫの出力結果を待ち、さらに他のプロセッサまたはタスクが存在する場合には、データの送受信に想定以上の時間がかかり、処理が間に合わなくなるからである。
【００２４】
一方、プロセッサ間の同期が取れ、タスクが順序よく実行する場合には、制御周期は最短になる。図４は、制御周期が最短になったときの例を示す。プロセッサＢがタスクＫを実行する直前に、プロセッサＡからデータを受信したとき、制御周期が最短になる。このとき、上述の保持期間Ｌは実質的に０である。最短の制御周期は「ＥT＋Ｄ＋ＥK」と表現される。図２に示す最長の制御周期と比較すると、タスクＫの周期Ｐに相当する時間だけ短い。
【００２５】
本開示は、プロセッサＡの各周期タスクＴがデータを送信し、他のプロセッサＢがデータを受信した直後に、周期タスクＫの実行を開始できるよう、タスクＴおよび／またはタスクＫの実行タイミングを調整する技術に関する。
【００２６】
以下、図５から図１２を参照しながら、本開示のシステムの処理の考え方を説明する。当該説明の後、リアルタイム分散システムを採用したモータ駆動システムとその変形例および応用例を説明する。
【００２７】
本明細書において、プロセッサＡのタスクとプロセッサＢのタスクとが「同期」している、とは、プロセッサＡの各周期タスクＴがデータを出力し、他のプロセッサＢが当該データを受信した直後に、プロセッサＢが周期タスクＫの実行を開始することをいう。ただし、本開示では、データの送信とデータの受信との間の通信遅延Ｄは含み得るとする。「直後」は予め定められ得る。たとえば、プロセッサＢの動作クロックで１０クロック以内を、「直後」の期間として定義し得る。
【００２８】
図５は、本開示によるリアルタイム分散システム１の構成を示す。以下、単に「システム１」と記述する。システム１は、非同期の通信回線１６で接続された２つの制御システム１０Ａおよび１０Ｂを有している。制御システム１０Ａは、プロセッサ１２Ａと制御対象１４Ａとを有する。また制御システム１０Ｂは、プロセッサ１２Ｂと制御対象１４Ｂとを有する。制御システム１０Ａおよび制御システム１０Ｂは、非同期の通信回線１６を介して互いにデータを送受信することができる。
【００２９】
ここで、「非同期」とは、タイミングを示す特別の信号、たとえばクロック信号、を利用せずに、という意味である。非同期の通信方式は、典型的には、信号の先頭に一意に識別可能なスタートビットを付与し、信号の最後にも一意に識別可能なストップビットを付与することにより、伝送する信号の区切りを示し、これにより送受信側が互いにタイミングを合わせる必要がない通信方式をいう。
【００３０】
ただし、本開示にかかる技術は、非同期の通信を行う回線であるか、同期の通信を行う回線であるかは問わない。以下に説明する動作を行うシステムの動作は、いずれの通信回線を採用していても適用できるからである。
【００３１】
通信回線１６は、有線であってもよいし無線であってもよい。
【００３２】
後に説明するように、システム１の一例は、モータで駆動される２つの駆動輪と２つ以上の従動輪（非駆動輪）とを有する自走ロボットに搭載されるモータ駆動システムである。制御システム１０Ａおよび１０Ｂはそれぞれ、左輪および右輪をそれぞれ制御する制御システムである。プロセッサ１２Ａ、１２Ｂはそれぞれ、制御対象１４Ａ、１４Ｂの一例であるモータ駆動回路に制御信号（ＰＷＭ信号）を送信し、不図示のモータの回転を制御する。
【００３３】
自走ロボットが所望の速度で直進し、所望の速度および回転半径で右旋回または左旋回するためには、双方の駆動輪の回転速度を調整する必要がある。回転速度を調整するため、たとえば制御システム１０Ａのプロセッサ１２Ａは、タスクを実行して制御対象１４Ａであるモータの回転速度を決定し、かつ、左輪の回転速度の情報からさらに決定される右輪の回転速度のデータを、制御システム１０Ｂのプロセッサ１２Ｂに送信する。プロセッサ１２Ｂは当該データを用いて右輪のモータの回転速度を決定し、回転を制御する。
【００３４】
プロセッサＡのタスクとプロセッサＢのタスクとが同期せず、許容される量以上の遅延が生じると、左輪および右輪の起動に差が生じ、回転速度が所望値からずれ、目標とする速度で目標とする方向への移動が困難になる。そのため、プロセッサＡのタスクとプロセッサＢのタスクとを同期させる必要がある。当該同期にあたり、本開示による処理が利用される。
【００３５】
次に、プロセッサ１２Ａおよび１２Ｂの内部構造を説明する。
【００３６】
図６は、プロセッサ１２Ａおよび１２Ｂの内部構造を示す。以下では、プロセッサ１２Ａおよび１２Ｂを包括して「プロセッサ１２」と記述する。ただし、プロセッサ１２Ａおよび１２Ｂの構造は同一である必要はない。便宜的に「プロセッサ１２」と記載するに過ぎない。
【００３７】
プロセッサ１２は、プロセッサコア２０と、分周器２１と、システムタイマー２２と、ハードウェア（Ｈ／Ｗ）タイマー２３ａおよび２３ｂと、ＳＲＡＭ２４と、プログラム用フラッシュメモリ２５と、ＥＥＰＲＯＭ２６と、定周期／可変周期タイマー群２７と、周辺回路群２８と、内部データバス２９とを有する。
【００３８】
プロセッサコア２０は、内部にさらに種々の構成を有する演算回路である。プロセッサコア２０の内部には、たとえば、プログラムカウンタ、命令レジスタ、命令デコーダ、スタックポインタ、汎用レジスタ、タイマー割り込み制御回路を有している。これらはいずれも一般的であり、詳細な説明は省略する。
【００３９】
分周器２１は、プロセッサ１２の外部に設けられた、水晶またはシリコンを用いる発振子１８から外部クロック信号を受け取り、外部クロック信号を分周して所定の周波数のクロック信号を出力する。
【００４０】
システムタイマー２２は、分周器２１から受け取ったクロック信号に基づいて、プロセッサ１２を動作させるための所定周波数の内部クロック信号を生成する。
【００４１】
Ｈ／Ｗタイマー２３ａおよび２３ｂは、それぞれ分周器２１から受け取ったクロック信号を利用してタイマーカウンタ（後述）をカウントアップし、カウンタ値が予め定められた値になると割込信号をプロセッサコア２０に出力する。なお、Ｈ／Ｗタイマーの数は任意である。３つ以上設けられていてもよい。また、タイマーカウンタは、カウントダウンを行ってもよい。
【００４２】
ＳＲＡＭ２４は、プロセッサコア２０が動作する際に利用されるワークメモリであり、書き換え頻度が高いデータを格納する。
【００４３】
プログラム用フラッシュメモリ２５は、プログラムおよび書き換え頻度が低いデータを格納するメモリである。
【００４４】
ＥＥＰＲＯＭ２６は、電源が遮断されても記録内容が消えない不揮発メモリの一種であり、電気的に内容を書き換えることが可能なメモリである。以下で説明する、予め設定された各種の値は、ＥＥＰＲＯＭ２６に格納されている。
【００４５】
定周期／可変周期タイマー群２７は、ＰＷＭ信号を生成するための複数のタイマーが組み合わされた回路である。定周期タイマーと可変周期タイマーとを組み合わせることにより、パルス幅変調された信号を生成することができる。なお、本実施形態では、Ｈ／Ｗタイマーと定周期／可変周期タイマーとを別個に設けているが、この構成は一例である。Ｈ／Ｗタイマーと定周期／可変周期タイマーとを区別する必要はない。たとえば、定周期／可変周期タイマーはＨ／Ｗタイマーの一つとして設けられ得る。
【００４６】
周辺回路群２８は、上述した回路以外の回路の集合である。周辺回路群２８は、たとえば、高精度アナログ回路（ＡＤコンバータ、ＤＡコンバータ）、モータ制御回路、シリアル信号とパラレル信号とを相互に変換するＵＡＲＴ(Universal Asynchronous Receiver Transmitter)、通信インタフェース装置を含む。
【００４７】
次に、Ｈ／Ｗタイマーの構成を説明する。Ｈ／Ｗタイマー２３ａおよび２３ｂは同じ構成を有し得るが、以下では代表例としてＨ／Ｗタイマー２３ａを説明する。
【００４８】
図７は、Ｈ／Ｗタイマー２３ａの内部構成を示す。
【００４９】
Ｈ／Ｗタイマー２３ａは、タイマーカウンタ３０および自動再ロードレジスタ（ＡＲＲ：Auto Reload Register）３２を有している。ＡＲＲ３２は、上限カウント値Ｃｆを示すデータ３６を保持している。タイマーカウンタ３０は、分周器２１から供給されるクロック信号に基づいてカウンタ値を、カウント初期値Ｃ０からカウントアップする。そしてタイマーカウンタ３０は、カウンタ値がＡＲＲ３２に保持された上限カウント値Ｃｆに到達するとカウントを停止し、プロセッサコア２０に対して、タイマーカウンタ３０においてオーバーフローが発生したことを通知するオーバーフロー割込信号を出力する。その後、タイマーカウンタ３０は、カウント値をカウント初期値Ｃ０にリセットする。
【００５０】
発振子１８および分周器２１は十分な精度のクロック信号を出力する。当該クロック信号を受けてカウントアップするＨ／Ｗタイマー２３ａもまた、十分な精度でカウントアップし、周期Ｐごとにオーバーフローを発生させ得る。
【００５１】
図８は、クロック信号、Ｈ／Ｗタイマー２３ａのカウント値およびプロセッサコア２０が実行するタスクＴのタイミング図である。図８の（ａ）は、発振子１８から出力される外部クロック信号の波形を示し、（ｂ）は分周器２１から出力されるクロック信号の波形例を示す。一例として、分周器２１は１／２分周器であるとした。
【００５２】
図８の（ｃ）は、初期値Ｃ０からカウントアップするＨ／Ｗタイマー２３ａのカウンタ値を示す。Ｈ／Ｗタイマー２３ａは、分周器２１から出力されるクロック信号の立ち上がりのタイミングでカウントを開始し、カウンタを増加させる。カウンタ値が上限カウント値Ｃｆに到達すると、Ｈ／Ｗタイマー２３ａはオーバーフロー割込信号をプロセッサコア２０に出力する。
【００５３】
図８の（ｄ）は、オーバーフロー割込信号の受信に応答したプロセッサコア２０が、タスクＴを実行するタイミングを示す。プロセッサコア２０は、オーバーフロー割込信号の受信に応答して、その時点で実行していたプログラムを中断し、割り込みハンドラと呼ばれるプログラムを起動させる。割り込みハンドラは、プログラムであるタスクＴを実行するよう、予めプログラミングされている。
【００５４】
Ｈ／Ｗタイマー２３ａが初期値Ｃ０から上限カウント値Ｃｆまでカウントするために要する時間は「Ｐ」である。つまり、プロセッサコア２０は、Ｈ／Ｗタイマー２３ａからのオーバーフロー割込信号をトリガとして、一定の周期ＰごとにタスクＴを起動することが可能である。
【００５５】
再び図７を参照する。タイマーカウンタ３０は、通常、カウント初期値Ｃ０から上限カウント値Ｃｆまでカウントする。しかしながら、タイマーカウンタ３０は、プロセッサコア２０からカウント設定値Ｃｓを指定する信号を受け取ると、当該カウント設定値Ｃｓからカウントを開始する。カウント設定値Ｃｓを適宜設定することにより、タイマーカウンタ３０がオーバーフローするまでの時間を調整することができる。
【００５６】
なお、本実施形態では、タイマーカウンタ３０は指定されたカウント設定値Ｃｓからカウントアップし、上限カウント値Ｃｆに到達すると、カウント値をカウント初期値Ｃ０にリセットする。したがって、タイマーカウンタ３０は、カウント設定値Ｃｓが指定された時だけ、カウントを開始する値を変更する。
【００５７】
次に、図１に示す、プロセッサ１２ＡのタスクＴおよびプロセッサ１２ＢのタスクＫが同期していない非同期状態を、図４に示す同期状態に調整するための処理を説明する。上述のように、タスクＴおよびタスクＫが同期しないことによって制御周期が長くなると、システム１が破たんするおそれがある。タスクＴおよびタスクＫの間の同期を可能な限り速く取ることが必要されている。
【００５８】
図９は、プロセッサ１２Ａおよびプロセッサ１２Ｂ間でタスクの実行を同期させるための動作の流れを示す。本実施形態では、プロセッサ１２Ｂが自らの動作タイミングを変更することにより、プロセッサ１２Ｂが実行するタスクＫの動作周期を、プロセッサ１２Ａが実行するタスクＴの動作周期に整合させる例を説明する。そのような主従関係を踏まえ、以下では、プロセッサ１２Ａを「マスタプロセッサ」と呼び、プロセッサ１２Ｂを「スレーブプロセッサ」と呼ぶことがある。
【００５９】
プロセッサ１２Ａおよび１２Ｂは、まず「同期モード」で動作する。同期モードでは、プロセッサ１２Ａおよび１２Ｂは、同期していないプロセッサ１２ＡのタスクＴおよびプロセッサ１２ＢのタスクＫを、図４に示すような同期状態に遷移させる。
【００６０】
同期モードが終了すると、プロセッサ１２Ａおよび１２Ｂは、通常動作モードに遷移する。通常動作モードでは、プロセッサ１２Ａおよび１２Ｂが、予定されている通常の動作を行う。ただし同期モードによってタスクＴおよびタスクＫは同期しているため、図４に関連して説明したとおり、タスクＴおよびＫの動作周期は最も短い時間「ＥT＋Ｄ＋ＥK」になる。
【００６１】
同期モードは、たとえばシステム１の動作開始時に自動的に実行される。動作開始時は、たとえば電源投入時である。
【００６２】
同期モードでは、マスタプロセッサであるプロセッサ１２Ａの動作は通常動作モードと概ね同じである。プロセッサ１２Ａは、たとえば図１の「プロセッサＡ」と同様、周期ＰでタスクＴを実行し、その結果、周期Ｐでデータをプロセッサ１２Ｂに送信する。
【００６３】
同期モードにおいて、プロセッサ１２Ｂは、プロセッサ１２Ａから周期Ｐでデータを受信する。プロセッサ１２Ｂは、データを受信した時刻、および、自らが実行するタスクＫが実行される時刻との差分が十分小さくなるよう、タスクＫが実行される時刻を調整する。「十分小さく」とは、予め定められた許容時間内に収まることをいう。タスクＫが実行される時刻の調整は、Ｈ／Ｗタイマー２３ａのタイマーカウンタ３０を調整することによって実現される。
【００６４】
タスクＫの動作タイミングを調整することによってプロセッサ１２ＡのタスクＴおよびプロセッサ１２ＢのタスクＫが同期したと判断すると、プロセッサ１２Ｂは、プロセッサ１２Ａに、同期モードの終了通知を送信する。当該通知の送信および受信をトリガとして、プロセッサ１２Ａおよび１２Ｂの動作は同期モードから通常動作モードへと遷移する。
【００６５】
なお、同期モードが終了した後であっても、プロセッサ１２Ａおよび１２Ｂ内の各Ｈ／Ｗタイマー２３ａは引き続き同じ周期でカウントアップおよびカウンタ値のリセットを継続している。したがって、プロセッサ１２Ａおよび１２Ｂは、同期モードによって調整された動作タイミングを維持しながら、タスクＴおよびＫを実行することができる。
【００６６】
次に、図１０および１１を参照しながら、プロセッサ１２Ａおよびプロセッサ１２Ｂのそれぞれの処理を説明する。
【００６７】
図１０は、プロセッサ１２Ａの処理の手順を示す。以下で説明するステップＳ１１およびＳ１２が同期モードの処理であり、ステップＳ１３からＳ１５までは通常動作モードの処理である。なお、プロセッサ１２Ａの処理は、実質的にはプロセッサコア２０によって実現される。
【００６８】
同期モードのステップＳ１１において、プロセッサ１２Ａは、タスクＴを実行し、実行結果として得られたデータをプロセッサ１２Ｂに送信する。タスクＴの実行、および、データの送信はそれぞれ周期Ｐである。この周期Ｐは、タイマーカウンタ３０（図７）がカウント初期値Ｃ０から上限カウント値Ｃｆまでのカウントアップに要する時間に相当する。
【００６９】
ステップＳ１２において、プロセッサ１２Ａは、ステップＳ１１の実行から所定時間内に、プロセッサ１２Ｂから同期モード終了通知を受信したか否かを判定する。「所定時間」は、タスクＴの実行周期であってもよいし、実行周期を超える期間であってもよい。後者を許容する理由は、プロセッサ１２Ａがプロセッサ１２Ｂから同期モード終了通知を受け取る際、通信遅延が存在するため、必ずしも実行周期内に当該通知を受信できるとは限らないからである。
【００７０】
受信した場合には処理はステップＳ１３に進み、受信していない場合には処理はステップＳ１１に戻る。同期モード終了通知の受信は、プロセッサ１２ＡのタスクＴと、プロセッサ１２ＢのタスクＫとが同期したことを意味する。プロセッサ１２Ａ内では、タイマーカウンタ３０が引き続き同じ周期でアップカウントを行えばよい。
【００７１】
通常動作モードのステップＳ１３において、プロセッサ１２Ａは、タスクＴを実行し、実行結果として得られたデータをプロセッサ１２Ｂに送信する。ステップＳ１３の処理はステップＳ１１の処理と実質的に同じである。
【００７２】
ステップＳ１４において、プロセッサ１２Ａは、タスクＴの終了指令を受信したか否かを判定する。終了指令はユーザから、または不図示の上位装置から送信される。  終了指令を受信した場合には処理はステップＳ１５に進み、終了指令を受信していない場合には、引き続きステップＳ１３に戻り、タスクＴの実行およびデータの送信を周期Ｐで実行する。
【００７３】
ステップＳ１５において、プロセッサ１２Ａは、プロセッサ１２Ｂに終了指令を送信し、処理を終了する。これにより、プロセッサ１２Ａを含む制御システム１０Ａは動作を停止する。
【００７４】
図１１は、プロセッサ１２Ｂの処理の手順を示す。以下で説明するステップＳ２１からＳ２５までが同期モードの処理であり、ステップＳ２６およびＳ２７は通常動作モードの処理である。プロセッサ１２Ｂの処理に関しては、プロセッサコア２０の動作とＨ／Ｗタイマー２３ａの動作とを分けて説明する。
【００７５】
同期モードのステップＳ２１において、プロセッサコア２０は、プロセッサ１２Ａからデータを受信したか否かを判定する。データを受信していなければ引き続きデータの受信を待つ。データを受信した場合には処理はステップＳ２２に進む。なお、データの受信の有無は、周辺回路群２８（図６）として示される通信インタフェース装置からの割り込み信号の有無によって判定することができる。インタフェース装置は、データを受信すると割り込み信号をプロセッサコア２０に送信する。
【００７６】
ステップＳ２２において、プロセッサコア２０は、Ｈ／Ｗタイマー２３ａから、タイマーカウンタ３０の現在のカウンタ値Ｃ１を取得する。カウンタ値Ｃ１は、データの受信時刻を示している。
【００７７】
その後、タイマーカウンタ３０のカウントアップが進み、上限カウント値Ｃｆに到達すると、タイマーカウンタ３０はプロセッサコア２０にオーバーフロー割込信号を送信する。プロセッサコア２０は当該信号の受信に応答して割り込みハンドラを起動する。そして割り込みハンドラの処理により、プロセッサコア２０はタスクＫを実行する。
【００７８】
ステップＳ２３において、プロセッサコア２０は、Ｈ／Ｗタイマー２３ａから、タイマーカウンタ３０の現在のカウンタ値Ｃ２を取得する。カウンタ値Ｃ２は、タスクＫが実行された時刻を示している。
【００７９】
ステップＳ２４において、プロセッサコア２０は、取得した２つのカウンタ値Ｃ１およびＣ２の差分を計算し、当該差分値をカウント初期値Ｃ０に加算した値をＨ／Ｗタイマー２３ａに送信する。Ｈ／Ｗタイマー２３ａは、プロセッサコア２０から受信した値を、カウント設定値Ｃｓとして設定する。これにより、Ｈ／Ｗタイマー２３ａは、タイマーカウンタ３０が次にリセットされるタイミングで、当該カウント設定値Ｃｓからタイマーカウンタ３０によるカウントアップを開始する。
【００８０】
ステップＳ２４の処理は、プロセッサ１２Ａからのデータの受信時刻と、プロセッサ１２ＢにおけるタスクＫが実行される時刻との時間差Ｄに相当する時刻だけ、タイマーカウンタ３０を早めることを意味する。その結果、当該時間差Ｄに相当する時刻だけ早く、タイマーカウンタ３０は上限カウント値Ｃｆに到達する。つまり、タスクＫが起動される時刻が、時間差Ｄに相当する時刻だけ早くなる。そして、当該起動時刻は、プロセッサ１２Ａからデータを受信する時刻に等しい。プロセッサコア２０がデータを受信した直後に、タスクＫは、当該データを利用した処理を実行できる。すなわち、プロセッサ１２ＡのタスクＴと、プロセッサ１２ＢのタスクＫとを同期させることができる。同期信号に基づいて同期通信を行う通信回線を利用する必要はない。
【００８１】
ステップＳ２５において、プロセッサ１２Ｂのプロセッサコア２０は、同期モード終了通知をプロセッサ１２Ａに送信する。これによりプロセッサ１２Ｂの同期モードは終了する。
【００８２】
通常動作モードのステップＳ２６において、プロセッサ１２Ｂのプロセッサコア２０は、タイマーカウンタ３０のカウント値が上限カウント値Ｃｆを取るごとにタスクＫを実行する。同期モードにおいて、データの受信時刻とタスクＫの起動時刻とが一致しているため、プロセッサ１２Ｂは図２に示す例のように受信したデータを保持し続ける必要はない。
【００８３】
ステップＳ２７において、プロセッサ１２Ｂのプロセッサコア２０は、タスクＫの終了指令を受信したか否かを判定する。終了指令は、プロセッサ１２Ａから送信される。終了指令を受信した場合には処理は終了する。これにより、プロセッサ１２Ｂを含む制御システム１０Ｂは動作を停止する。
【００８４】
終了指令を受信していない場合には、処理は引き続きステップＳ２６に戻る。プロセッサ１２ＢはタスクＫの実行およびデータの受信を周期Ｐで実行する。
【００８５】
ここで、図１２を参照しながら、プロセッサ１２ＢのステップＳ２２からＳ２４の処理を具体的に説明する。
【００８６】
図１２は、プロセッサ１２Ｂのタイマーカウンタ３０のカウンタ値と、プロセッサ１２ＡのタスクＴおよびプロセッサ１２ＢのタスクＫの各実行タイミングを示すタイミング図である。なお、理解の便宜のため、カウンタ値の段数は簡略化して記載している。
【００８７】
時刻Ｔ０においてプロセッサ１２ＡのタスクＴがデータを送信し、時刻Ｔ１においてプロセッサ１２Ｂがデータを受信する。図１２には、時刻Ｔ１におけるカウンタ値Ｃ１が示されている。プロセッサ１２Ｂのプロセッサコア２０は、タイマーカウンタ３０の時刻Ｔ１現在のカウンタ値Ｃ１を取得する（図１１のステップＳ２２）。
【００８８】
次に、プロセッサ１２Ｂのカウンタ値が上限カウント値Ｃｆを取る時刻Ｔ２に注目する。プロセッサ１２Ｂのプロセッサコア２０は、時刻Ｔ２が到来すると、Ｈ／Ｗタイマー２３ａからのオーバーフロー割込信号に応答して、タスクＫ実行する。プロセッサコア２０は、時刻Ｔ２におけるカウンタ値Ｃ２を取得する（図１１のステップＳ２３）。
【００８９】
なお、カウンタ値Ｃ２は上限カウント値Ｃｆと同値とすることもできる。プロセッサコア２０は、タイマーカウンタ３０のカウンタ値を取得しなくてもよく、予め定められた値としてＣ２を採用してもよい。
【００９０】
次にプロセッサ１２Ｂのプロセッサコア２０は、時刻Ｔ２からＴ４までの間に、カウント設定値Ｃｓを求める演算を行う。すなわち、プロセッサコア２０は、差分値Ｃ３として、Ｃ３＝Ｃ２−Ｃ１を演算し、さらにＣ０＋Ｃ３を演算する。プロセッサコア２０は、求めた値をカウント設定値Ｃｓとして設定する（図１１のステップＳ２４）。
【００９１】
図１２によれば、時刻Ｔ４から、カウント設定値Ｃｓからカウントが開始されていることが理解される。時刻Ｔ４までは、プロセッサ１２ＢのＨ／Ｗタイマー２３ａは、周期Ｐでオーバーフロー割込信号を出力していたが、時刻Ｔ４からＴ５の間の時区間Ｑは、周期Ｐの時区間よりも短い。時刻Ｔ５において、カウンタ値はＣｆを取る。これにより、時刻Ｔ５において、プロセッサ１２Ｂのプロセッサコア２０はタスクＫを実行する。
【００９２】
時刻Ｔ０からＴ４までは、プロセッサ１２Ａからのデータを受信した後、プロセッサ１２ＢがタスクＫを実行するまでには遅延Ｌが生じていた。しかしながら、時刻Ｔ４におけるカウント設定値Ｃｓの設定以後の時刻Ｔ５からＴ９では、当該遅延は生じない。つまり、プロセッサ１２ＡのタスクＴと、プロセッサ１２ＢのタスクＫとは同期している。
【００９３】
上述の説明で求めたカウント設定値Ｃｓは、プロセッサ１２Ｂがデータを受信してから、タスクＫを実行するまでの時刻を最短にする実装例である。しかしながら、本開示は当該実装例に限定されない。プロセッサ１２Ｂにおける、データの受信時刻からタスク実行時刻までの遅延時間の最大許容可能値αは、設計によって求められ得る。よって、Ｃ３≦（Ｃ２−Ｃ１）＋αとしてもよい。このように求めた値Ｃ３を用いてカウント設定値Ｃｓを求めることにより、データの受信から、所定の許容時間内の時刻にタスクＫが実行される。
【００９４】
プロセッサ１２Ｂのプロセッサコア２０は、時刻Ｔ１を起点として一定の周期Ｐでデータを受信しており、また時刻Ｔ２を起点として、一定の周期ＰでタスクＫを実行していた。しかしながら、上述の手順でカウント設定値Ｃｓを設定することにより、プロセッサコア２０は、タスクＫが実行される時刻を、データの受信時刻から一定の許容時間内の時刻に更新したと言うことができる。
【００９５】
時刻Ｔ０においてプロセッサ１２ＡのタスクＴがデータを送信し、時刻Ｔ１においてプロセッサ１２Ｂがデータを受信する。図１２には、時刻Ｔ１におけるカウンタ値Ｃ１が示されている。プロセッサ１２Ｂのプロセッサコア２０は、タイマーカウンタ３０の時刻Ｔ１現在のカウンタ値Ｃ１を取得する（図１１のステップＳ２２）。
【００９６】
次に、プロセッサ１２Ｂのタイマーカウンタ３０のカウンタ値が上限カウント値Ｃｆを取った時刻Ｔ２ａの後に、プロセッサ１２Ｂのプロセッサコア２０がタスクＫを実行する時刻Ｔ２ｂに注目する。
【００９７】
なお、時刻Ｔ２ａと時刻Ｔ２ｂとを分けた理由は、両者が異なり得るからである。時刻Ｔ２ａにおいて、Ｈ／Ｗタイマー２３ａからオーバーフロー割込信号が出力される。するとプロセッサ１２Ｂのプロセッサコア２０は、それまで他のタスクを実行していた場合には、当該他のタスクのデータを退避させ、タスクＫの読み込みを行う必要がある。それらの一連の処理が完了すると、タスクＫの実行時刻Ｔ２ｂが到来する。時刻Ｔ２ａから時刻Ｔ２ｂまでの間で行われる処理は実時間を要する。その間に、タイマーカウンタ３０のリセット、および、カウント値Ｃ０からのカウント開始が行われる。
【００９８】
プロセッサ１２Ｂのプロセッサコア２０は、時刻Ｔ２ａが到来すると、Ｈ／Ｗタイマー２３ａからのオーバーフロー割込信号に応答して、タスクＫ実行する。プロセッサコア２０は、時刻Ｔ２ｂにおけるカウンタ値Ｃ２を取得する（図１１のステップＳ２３）。
【００９９】
次にプロセッサ１２Ｂのプロセッサコア２０は、時刻Ｔ２ｂからＴ４までの間に、カウント設定値Ｃｓを求める演算を行う。具体的には、プロセッサコア２０は、差分値Ｃ３として、Ｃ３＝（Ｃｆ−Ｃ１）＋（Ｃ２−Ｃ０）を演算し、さらにＣ０＋Ｃ３を演算する。プロセッサコア２０は、求めた値をカウント設定値Ｃｓとして設定する（図１１のステップＳ２４）。結論としてプロセッサコア２０は、Ｃｓ＝（Ｃｆ−Ｃ１）＋Ｃ２を演算すればよい（図１１のステップＳ２４）。
【０１００】
なお、カウンタ値Ｃ２は上限カウント値Ｃｆと同値として取り扱ってもよい。プロセッサコア２０は、タイマーカウンタ３０のカウンタ値を取得しなくてもよく、予め定められた値ＣｆをＣ２として採用してもよい。
【０１０１】
図１２によれば、時刻Ｔ４以後、カウント設定値Ｃｓからカウントが開始されていることが理解される。時刻Ｔ４までは、プロセッサ１２ＢのＨ／Ｗタイマー２３ａは、周期Ｐでオーバーフロー割込信号を出力していたが、時刻Ｔ４からＴ５ａの間の時区間Ｑは、周期Ｐの時区間よりも短い。時刻Ｔ５ａにおいて、カウンタ値はＣｆを取る。その後、時刻Ｔ５ｂにおいて、プロセッサ１２Ｂのプロセッサコア２０はタスクＫを実行する。なお、本例では時刻（Ｔ５ｂ−Ｔ５ａ）＝（Ｔ２ｂ−Ｔ２ａ）であるとしている。
【０１０２】
時刻Ｔ０からＴ４までは、プロセッサ１２Ａからのデータを受信した後、プロセッサ１２ＢがタスクＫを実行するまでには遅延Ｌが生じていた。しかしながら、時刻Ｔ４におけるカウント設定値Ｃｓの設定以後の時刻Ｔ５ｂからＴ９では、当該遅延は生じない。つまり、プロセッサ１２ＡのタスクＴと、プロセッサ１２ＢのタスクＫとは同期している。
【０１０３】
上述の説明で求めたカウント設定値Ｃｓは、プロセッサ１２Ｂがデータを受信してから、タスクＫを実行するまでの時刻を最短にする実装例である。しかしながら、本開示は当該実装例に限定されない。プロセッサ１２Ｂにおける、データの受信時刻からタスク実行時刻までの遅延時間の最大許容可能値αは、設計によって求められ得る。よって、Ｃ３≦（Ｃｆ−Ｃ１）＋（Ｃ２−Ｃ０）＋αとしてもよい。このように求めた値Ｃ３を用いてカウント設定値Ｃｓを求めることにより、データの受信から、所定の許容時間内の時刻にタスクＫが実行される。
【０１０４】
プロセッサ１２Ｂのプロセッサコア２０は、時刻Ｔ１を起点として一定間隔（周期）Ｐでデータを受信しており、また時刻Ｔ２を起点として、一定間隔ＰでタスクＫを実行していた。しかしながら、上述の手順でカウント設定値Ｃｓを設定することにより、プロセッサコア２０は、タスクＫが実行される時刻を、データの受信時刻から一定の許容時間内の時刻に更新したと言うことができる。
【０１０５】
次に、２つの変形例を説明する。
【０１０６】
（変形例１）
上述の例では、プロセッサＡがプロセッサＢに周期Ｐでデータを送信し、プロセッサＢがカウント設定値Ｃｓを調整することにより、プロセッサＡのタスクＴと、プロセッサＢのタスクＫとを同期させた。
【０１０７】
以下に説明する変形例では、プロセッサＡが上限カウント値Ｃｆを調整することにより、プロセッサＡのタスクＴと、プロセッサＢのタスクＫとを同期させる。
【０１０８】
変形例によるリアルタイム分散システムの構成は図５〜９と同じである。また、図１２の時刻Ｔ２までのプロセッサ１２Ａおよび１２Ｂの動作も同じである。
【０１０９】
本変形例では、プロセッサ１２Ａは、予め、プロセッサ１２Ｂの動作周波数ｆｂの情報を予め保持している。動作周波数ｆｂは、プロセッサ１２ＢのＨ／Ｗタイマー２３ａのカウント周期の逆数として定義する。
【０１１０】
プロセッサ１２Ｂは、図１２に示す時刻Ｔ１におけるカウンタ値Ｃ１と、時刻Ｔ２ｂにおけるカウンタ値Ｃ２（または時刻Ｔ２ａにおける上限カウント値Ｃｆ）とを取得する。プロセッサ１２Ｂは、カウンタ値Ｃ１およびＣ２をプロセッサ１２Ａに送信する。
【０１１１】
プロセッサ１２Ａは、Ｃ３＝（Ｃｆ−Ｃ１）＋（Ｃ２−Ｃ０）を演算する。差分値Ｃ３は、プロセッサ１２ＡのタスクＴのデータが、タスクＫが実行される時刻までプロセッサ１２Ｂに保持されていた期間を表す。ただしＣ３の値は、プロセッサ１２ＢのＨ／Ｗタイマー２３ａのカウント周期に基づいてカウントされた値である。
【０１１２】
そこでプロセッサ１２Ａは、予め保持していたプロセッサ１２Ｂの動作周波数ｆｂの情報と、みずからの動作周波数ｆａの情報とを用いて、Ｃ４＝Ｃ３・（ｆａ／ｆｂ）の値を算出する。値Ｃ４は、データがプロセッサ１２Ｂに保持されていた現実の時間を、プロセッサ１２ＡのＨ／Ｗタイマー２３ａのカウント数に変換した値である。
【０１１３】
プロセッサ１２Ａは、値Ｃ４に相当する時刻だけ遅くタスクＴが実行され、データが送信されるよう、上限カウント値Ｃｆを変更する。具体的には以下のとおりである。
【０１１４】
なお、変更前の上限カウント値をＣｆ０と表現する。
【０１１５】
プロセッサ１２Ａは、上限カウント値Ｃｆを、Ｃｆ＝Ｃｆ０＋Ｃ４に変更する。これにより、プロセッサ１２ＡのＨ／Ｗタイマー２３ａは、値Ｃ４に相当する時間だけ長くカウントすることになる。その後、タイマーカウンタ３０が一旦上限カウント値Ｃｆに到達すると、プロセッサ１２Ａは、上限カウント値Ｃｆを、再びＣｆ０に変更する。これにより、タイマーカウンタ３０の上限カウント値Ｃｆを２回変更した後と変更前とを比較すると、変更した後のタイマーカウンタ３０のオーバーフローの発生時刻は変更する前の発生時刻よりも、カウント値Ｃ４に相当する時間だけ遅くなる。当該遅れは、プロセッサ１２Ｂの差分値Ｃ３に相当する。プロセッサ１２Ｂは、差分値Ｃ３に相当する時刻だけ遅れてデータを受信するため、データ受信直後にタスクＴを実行することができる。
【０１１６】
(変形例２)
上述の例において、プロセッサＡのタスクＴおよびプロセッサＢのタスクＫは、同じ周期Ｐにて実行されていた。しかしながら、本開示は、タスクＴの実行周期とタスクＫの実行周期とが異なっていても適用することができる。より具体的には、本開示は、タスクＴの実行間隔Ｐ1と、タスクＫの実行間隔Ｐ2とが倍数の関係である場合でも適用することができる。
【０１１７】
この場合、プロセッサ１２Ｂは、直前にプロセッサ１２Ａからデータを受信した時刻を取得する。
【０１１８】
その後上述した処理と同様の処理により、データ受信時刻と、プロセッサ１２ＢにおけるタスクＫの実行開始時刻との時間差Ｄに相当する時刻だけ、プロセッサ１２Ｂのタイマーカウンタ３０を早める。
【０１１９】
本変形例を適用しない場合、プロセッサ１２Ｂの制御周期は、Ｐ1＋Ｐ2＋Ｄであった。プロセッサ１２Ａの制御周期Ｐが含まれている理由は、プロセッサ１２Ａからのデータを利用するため、プロセッサ１２Ａの制御周期Ｐがプロセッサ１２Ｂに影響を与えるからである。
【０１２０】
一方、本変形例によると、プロセッサＢの制御周期をＰ2＋Ｄにすることができる。なお、プロセッサＢの実行間隔は、間隔Ｐ1の等倍または整数倍の間隔Ｐ2でもよい。間隔Ｐ2は、間隔Ｐ1を包括する概念である。
【０１２１】
（応用例）
以下、上述のリアルタイム分散システム１を搭載した応用例を説明する。応用例では、プロセッサＢがカウント設定値Ｃｓを調整することにより、プロセッサＡのタスクとプロセッサＢのタスクとを同期させてもよいし、上述の変形例１のように、プロセッサＡが上限カウント値Ｃｆを調整することにより、プロセッサＡのタスクとプロセッサＢのタスクとを同期させてもよい。さらに、変形例２のように、プロセッサＡのタスクとプロセッサＢのタスクとが異なる実行周期を有していてもよい。
【０１２２】
図１３は、自走ロボット１００の構成を示す。自走ロボット１００は、搬送テーブル１０１と、システムコントローラ１０２と、モータ駆動システム１０３と、２つの駆動輪１０４Ａおよび１０４Ｂとを有する。
【０１２３】
搬送テーブル１０１は運搬物を載置するテーブルである。
【０１２４】
システムコントローラ１０２は、上位装置１５０からの有線または無線による指示に基づいて、自走ロボット１００の進行方向および走行速度を制御する。具体的には、システムコントローラ１０２は、２つの駆動輪である左輪１０４Ａおよび右輪１０４Ｂの回転速度および回転方向を決定し、モータ駆動システム１０３へ制御信号を送信する。
【０１２５】
モータ駆動システム１０３は、２つのシステム（左輪制御システムおよび右輪制御システム）の総称である。モータ駆動システム１０３は、システムコントローラ１０２からの制御信号に基づいて、２つの駆動輪１０４Ａおよび１０４Ｂの回転速度および回転方向をそれぞれ独立して制御する。なお、システムコントローラ１０２およびモータ駆動システム１０３をあわせて、モータ制御システム１０５と呼ぶことがある。
【０１２６】
図１４は、自走ロボット１００のハードウェア構造を示す。参考のため、自走ロボット１００を構成しない上位装置１５０を破線で示す。
【０１２７】
システムコントローラ１０２は、プロセッサ１１２Ｃを有している。プロセッサ１１２Ｃは、図６で示すハードウェア構造を有している。そのため、プロセッサ１１２Ｃの詳細な説明は省略する。
【０１２８】
モータ駆動システム１０３は、図５に示すリアルタイム分散システム１に相当する。モータ駆動システム１０３は、左輪制御システム１１０Ａおよび右輪制御システム１１０Ｂを有している。左輪制御システム１１０Ａは、プロセッサ１１２Ａと、モータ駆動回路１１４Ａと、モータ１１６Ａとを有する。右輪制御システム１１０Ｂは、プロセッサ１１２Ｂと、モータ駆動回路１１４Ｂと、モータ１１６Ｂとを有する。プロセッサ１１２Ａとプロセッサ１１２Ｂとは、本実施形態では同じメーカの同じ型番の製品であるとするが、必ずしも同じメーカの同じ型番の製品である必要はない。モータ駆動回路１１４Ａとモータ駆動回路１１４Ｂ、およびモータ１１６Ａとモータ１１６Ｂについても同様であり、自走ロボット１００として必要とされる性能を有していればよい。左輪制御システム１１０Ａおよび右輪制御システム１１０Ｂは、それぞれインテリジェントモータと呼ばれることもある。
【０１２９】
システムコントローラ１０２のプロセッサ１１２Ｃとモータ駆動システム１０３のプロセッサ１１２Ａとの間には、無線または有線の制御用通信回線１１８が設けられている。制御信号は当該制御用の通信回線１１８を介してプロセッサ１１２Ｃからプロセッサ１１２Ａに送信される。
【０１３０】
また、プロセッサ１１２Ａとプロセッサ１１２Ｂとの間にも、有線または無線の通信回線１１９が設けられている。右輪制御システム１１０Ｂのための制御信号は、プロセッサ１１２Ｃから、プロセッサ１１２Ａを経由して、プロセッサ１１２Ｂに送信される。
【０１３１】
図５から図１１を参照した説明では、図５に示すプロセッサ１２ＡのタスクＴと、プロセッサ１２Ｂのタスクとを同期させた。
【０１３２】
本応用例では、２つの同期処理（１）および（２）が順次実行される。同期処理（１）として、システムコントローラ１０２のプロセッサ１１２Ｃによって実行されるタスクと、左輪制御システム１１０Ａのプロセッサ１１２Ａのタスクとを同期させる。同期処理（１）による動作モードを、システム同期モードと呼ぶことがある。システム同期モードが完了した後、同期処理（２）として、左輪制御システム１１０Ａのプロセッサ１１２Ａのタスクと右輪制御システム１１０Ｂのプロセッサ１１２Ｂのタスクとを同期させる。自走ロボット１００には、システムコントローラ１０２と右輪制御システム１０Ｂとのタスク間の同期を取るために直接通信を行うための通信回線は設けていなくてもよい。
【０１３３】
上述の同期処理（１）および（２）はいずれも、図５から図１１を参照した説明と同じである。すなわち同期処理（１）では、図１４におけるプロセッサ１１２Ｃおよび１１２Ａが、図５のプロセッサ１２Ａおよびプロセッサ１２Ｂとして動作すればよい。また同期処理（２）では、図１４におけるプロセッサ１１２Ａおよび１１２Ｂが、図５のプロセッサ１２Ａおよびプロセッサ１２Ｂとして動作すればよい。同期処理（１）および（２）の少なくとも１つは、上述した変形例１または２にかかる処理であってもよいし、同期処理（１）が変形例１および２の一方で、同期処理（２）が変形例１および２の他方であってもよい。
【０１３４】
同期処理（１）が完了した後に同期処理（２）を実行することにより、プロセッサ１１２Ｃのタスクとプロセッサ１１２Ａのタスクとが同期し、かつプロセッサ１１２Ａのタスクとプロセッサ１１２Ｂのタスクとが同期する。いずれの同期状態においても、データを受信した後、タスクを実行するまでの期間は許容時間内である。よって、プロセッサ１１２Ａおよび１１２Ｂは、それぞれモータ駆動回路１１４Ａおよび１１４ＢにＰＷＭ信号を出力することにより、システムコントローラ１０２が指示した通りの回転速度および回転方向で、左輪および右輪の回転を制御することができる。これにより、システムコントローラ１０２は、自走ロボット１００を所望の速度で直進させ、所望の速度および回転半径で右旋回または左旋回させることが可能になる。
【０１３５】
なお、上述の例は、２つの後輪が駆動輪であるとして説明したが、これは一例である。たとえば前輪および後輪を別個のモータで駆動する二輪車、複数の車輪を別個のモータで駆動する三輪車、四輪車などにも、本開示は適用可能である。さらに、本開示は、システムコントローラが１つのモータを有するモータ駆動システムの動作を制御するモータ制御システムにも適用可能である。たとえば２輪車の後輪のみをモータで駆動するモータ制御システムの、システムコントローラのプロセッサと、モータ駆動システムのプロセッサとの間で、上述した同期処理を行ってもよい。
【０１３６】
図１５は、溶接ロボット２００の構成を示す。溶接ロボット２００は、システムコントローラ１０２と、第１関節制御システム２１０Ａと、第２関節制御システム２１０Ｂと、第３関節制御システム２１０Ｃと、溶接トーチ２３０とを備えている。
【０１３７】
溶接ロボット２００は、モータによって回転可能な複数の関節を有しており、各関節の動きは第１〜第３関節制御システム２１０Ａ〜２１０Ｃによって別個独立に制御される。システムコントローラ１０２、第１〜第３関節制御システム２１０Ａ〜２１０Ｃは、この順序でカスケード接続されている。
【０１３８】
第１〜第３関節制御システム２１０Ａ〜２１０Ｃの各々は、システムコントローラ１０２から送信される制御信号、および／または、上流側に位置する各関節制御システムから出力されたデータを利用して動作する。すなわち第１〜第３関節制御システム２１０Ａ〜２１０Ｃの各々は、当該データを利用して、各モータを適正な回転速度で回転させ、所望の角度で停止させる。これにより、溶接トーチ２３０を溶接すべき位置に移動させることができる。なお、第１〜第３関節制御システム２１０Ａ〜２１０Ｃの各々には、アーム２２０内に敷設された不図示の通信回線を介して制御データが送信される。
【０１３９】
図１６は、溶接ロボット２００のハードウェア構造を示す。図１４の構造と比較すると、システムコントローラ１０２は同じである。また、第１関節制御システム２１０Ａおよび第２関節制御システム２１０Ｂは、左輪制御システム１１０Ａおよび右輪制御システム１１０Ｂに対応する。溶接ロボット２００では、第３関節制御システム２１０Ｃが新たに追加されている。
【０１４０】
システムコントローラ１０２と第１関節制御システム２１０Ａとの間で行われる同期処理は、図１４のシステムコントローラ１０２と左輪制御システム１１０Ａとの間で行われる同期処理と同じである。また、第１関節制御システム２１０Ａと第２関節制御システム２１０Ｂとの間で行われる同期処理は、図１４の左輪制御システム１１０Ａと右輪制御システム１１０Ｂとの間で行われる同期処理と同じである。さらに、第２関節制御システム２１０Ｂと第３関節制御システム２１０Ｃの間で行われる同期処理の内容も、図１４の左輪制御システム１１０Ａと右輪制御システム１１０Ｂとの間で行われる同期処理と同様である。
【０１４１】
したがって、特にこれ以上の詳細な説明は省略する。なお、図１６においても、システムコントローラ１０２、第１関節制御システム２１０Ａ、第２関節制御システム２１０Ｂおよび第３関節制御システム２１０Ｃを、モータ制御システムと呼ぶことができる。
【０１４２】
上述した、変形例および応用例を含む本開示のいずれの説明についても、タスクの実行周期は、プロセッサが制御しようとする制御対象（図５）に応じて異なる。たとえば、同じモータ制御と言っても、タスクの実行周期は、回転速度を制御する場合にはたとえば１ミリ秒であり、回転角度を制御する場合にはたとえば１０ミリ秒である。ただしこれらの値自体も、個々のモータの特性によって異なり得る。
【０１４３】
そのような相違を端的に表す例として、図１３〜図１６の応用例が挙げられる。たとえば、モータの回転を制御するプロセッサの制御周期をＰとしたとき、システムコントローラのプロセッサの制御周期はＰとは異なり得る。自走ロボット１００を挙げて説明する。
【０１４４】
通常、システムコントローラ１０２のプロセッサ１１２Ｃは、自走ロボット１００の位置を制御する。プロセッサ１１２Ｃは、各時刻における自走ロボット１００の位置を計画し、そこから各時刻における両輪のモータへの速度要求を算出し、各輪の制御システムに与える。つまりこの場合、プロセッサ１１２Ｃは位置制御を行い、各輪の制御システムではモータの回転速度制御を行う。両者の制御周期は制御対象の特性に応じて決定される。一般的に、位置制御は、スピード制御よりも長い周期で実行する。つまり、システムコントローラ１０２のプロセッサ１１２Ｃの制御周期は、モータの回転を制御するプロセッサの制御周期とは異なり得る。このような場合には、上述した変形例２による制御が有効である。
【産業上の利用可能性】
【０１４５】
本開示のモータ駆動システムは、複数のプロセッサが、同期通信の仕組みを有しない一つのリアルタイム分散システムを構成する場合において、各プロセッサのタスクの動作のタイミングを同期させ、システム全体を効率的に動作させるために有用である。
【符号の説明】
【０１４６】
１    リアルタイム分散システム
１０Ａ、１０Ｂ
１２Ａ、１２Ｂ
１４Ａ、１４Ｂ
１６  通信回線
２０  プロセッサコア
２１  分周器
２２  システムタイマー
２３ａ、２３ｂ  Ｈ／Ｗタイマー
２４  ＳＲＡＭ
２５  プログラム用フラッシュメモリ
２６  ＥＥＰＲＯＭ
２７  定周期／可変周期タイマー群
２８  周辺回路群
３０  タイマーカウンタ
３２  自動再ロードレジスタ
Ｃｓ  カウント設定値
Ｃｆ  上限カウント値
【図１】
2019133205.tif 000003
【図２】
2019133205.tif 000004
【図３】
2019133205.tif 000005
【図４】
2019133205.tif 000006
【図５】
2019133205.tif 000007
【図６】
2019133205.tif 000008
【図７】
2019133205.tif 000009
【図８】
2019133205.tif 000010
【図９】
2019133205.tif 000011
【図１０】
2019133205.tif 000012
【図１１】
2019133205.tif 000013
【図１２】
2019133205.tif 000014
【図１３】
2019133205.tif 000015
【図１４】
2019133205.tif 000016
【図１５】
2019133205.tif 000017
【図１６】
2019133205.tif 000018