
前項で、一つのサーボモータをコントロールする方法を紹介してみた。今回はサーボモータを複数扱う為の方法を紹介したいと思う。
0.55msから2.55msの間で設定されるON時間が重要である事は述べたとおりである。複数のサーボモータをコントロールするという事は、それぞれ独立したON時間を複数用意する事である。人型ロボットには20数個のサーボモータが搭載されている事が多い。しかしこの、20数個という信号を、同時に生成する事は大変である。この説明では、信号をONにしてからOFFにするまでの時間を「ON時間」と呼んでいる。信号をONにするタイミングを20数個合わせる事は難しくない。だが、ロボットの各関節が欲している位置は違い、ON時間もそれぞれ異なる。信号をONにするタイミングを全てあわせたとしても、信号をOFFにするタイミングはそれぞれのサーボモータにより異なる。高い性能をもつCPUであったり、頼る事の出来る拡張機能が搭載されている場合、またはCPUを複数用いているならば、比較的容易に可能になるだろう。しかしEMMA-U0Aに限って言えば、高い性能でもなく、拡張機能もそこまで頼れず、複数用いるわけでもない。信号をOFFにする時間をそれぞれ変化させる事は困難を極めるだろう。
ではどうすれば良いのか。一つのON時間をつくる事は簡単である。それならば、一つのON時間が終わった後に二つ目のON時間を生成。二つ目の後は三つ目・・・という具合にすれば大変簡単になる。だが、欠点もある。この方法では、EMMA-U0Aの制御信号数、25個のサーボモータをコントロールするとすれば、最低13.75ms最大63.75msもの時間が必要となってしまう。上図はその様子をあらわしている。非常に単純な理由である。これではサーボモータの位置更新が一秒間に最悪15.7回しか出来ない事になってしまう。実際に動作させたならば、相当ガタガタするに違いない。
上図の方法では、25個の信号を生成する事に必要な時間は、それぞれのサーボモータの目標位置によって異なる。この原因は、一つのON時間を生成し、次のON時間を生成する際に、間を調節しないON時間をつなげてしまうからである。これもこの方法の大きな欠点といえるだろう。
![]()