サーボモータのプログラミングのうち基本部分の設計です。サーボモータの部品としての仕様からプログラミングに必要な条件をまとめます。
◀ この記事の前に: サーボモータ(回路)
▶ この記事の次に: サーボモータ( 設計・全体像 )
プログラミングに必要な仕様
組込みシステムのプログラミングは、ハードウエアを意識する必要があります。個々のセンサからの入力処理やアクチュエータの出力処理は、個々のセンサやアクチュエータの仕様を理解する必要があります。ここが十分でなかったり誤った情報の場合は必ず問題が生じます。プログラミングや試験中で問題が発生しなくても、稀な条件下で問題が発生する場合も少なくありません。製品の設計の場合、それは市場に出てからの不具合になりますので大きな影響を生じます。
Qumcum Lab. はヒューマノイドです。7つの関節があります。その関節にはそれぞれサーボモータがあります。個々のサーボモータを適切に制御するとともに、連携した動作を行うことも必要となります。
最初にプログラミングに必要なサーボモータの仕様をまとめます。サーボモータの仕様には寸法や重量などの仕様をはじめ、何Vで動かすかという電気的な仕様、軸の動作角度などの制御的な仕様など、多くの仕様があります。その中でプログラミングと関係する仕様は、信号線に関する制御仕様になります。以下のとおりです。
サーボモータの制御仕様
使用しているサーボモータは DCサーボモータです。制御は PWM( Pulse Width Modulation / パルス幅変調 )で行います。
角度制御の仕様
PWM制御はサーボモータの信号線に一定の周波数の矩形波(ここでは 50Hz)を送ります。その波形の中の ON時間を変化(ここでは 0.5 ~ 2.4 ms )させることによりサーボモータの軸の角度を指示します。軸の角度を指示すればその角度になります。
ONになっている部分( 上図では 0.5~2.4 ms )をONデュティ、OFFになっている部分を OFFデューティを呼びます。この比率を デューティ比といいます。( デューティ:duty )
取り付け位置による仕様
Qumcum Lab. に搭載している7つのサーボモータはすべて同じものです。サーボモータを単体として見ると、0°の位置や回転方向はすべて同じです。Qumcum Lab. に取り付けるときに部位によりサーボモータの方向(上下左右や裏表)が異なります。同じ腕でも左腕と右腕では取り付け方向は裏表となります。これは 0°の方向が異なるということになります。例えば万歳(両腕とも上方向)の角度にしても、右腕は 0°で左腕は 180°の角度になります。
同じサーボモータでも部位により可動範囲が異なります。頭や腕は 0°から 180°まで動かせます。足は構造的に60°から 120°までの可動範囲になります。このように部位により Qumcum Lab. として見た場合の動作方向や可動範囲、初期の位置が異なります。これも事前に明確にして仕様としておくことが必要です。
詳細は以下の通りです。
サーボモータの部位ごとの回転方向と可動範囲
No. | 略 称 | 部 位 | CW | CCW | 上限角度 | 下限角度 | 基準角度 |
---|---|---|---|---|---|---|---|
① | HD | 頭部 / Head | 右 | 左 | 0 | 180 | 90 |
② | AR | 右腕 / Arm Right | 下 | 上 | 0 | 180 | 0 |
③ | AL | 左腕 / Arm Left | 上 | 下 | 180 | 180 | 180 |
④ | FR | 右足 / Foot Right | 外 | 内 | 60 | 120 | 90 |
⑤ | FL | 左足 / Foot Left | 内 | 外 | 60 | 120 | 90 |
⑥ | LR | 右脚 / Leg Right | 開く | 閉じる | 50 | 120 | 90 |
⑦ | LL | 左脚 / Leg Left | 閉じる | 開く | 50 | 120 | 90 |
足と脚の違い
足 / foot: 足首(ankle)より下の部分、足裏や足首から下の部分を指します。
脚 / leg: 足首(ankle)より上の部分、腿(もも)の付け根から足首までの部分を指します。
Design Considerations 使用する用語を決める
足と脚のように間違えやすい言葉があります。仕様を決める段階で言葉の定義を明確にしておくことも大切です。特に複数人でプログラミングしているときは、言葉の解釈の違いがバグを生む素地になります。
データシートで確認する
組込みシステムはハードウエアを意識する必要があります。前記のサーボモータのように使用するサーボモータそのものの仕様がわからないとプログラミングを始めることはできません。
センサやアクチュエータ、通信するICなどの仕様は、それぞれを製造している会社が出しているデータシートで確認することが望ましいです。Webサイトで検索すると多くの情報がありますが、最も信用できるのはオリジナルの情報です。Webサイトの検索で誤った情報を取ってきてそれを使うことにより、バグが生じる可能性があります。バグを減らすためにもオリジナルのデータシートを確認することをお勧めします。
希望する動作に基づく仕様
この仕様は製作者の気持ちが出発点になります。
どのように動かしたいのか、何をさせたいのか、製作者の想いから動作に求められるものが変わってきます。
Qumcum Lab. はヒューマノイドです。「人らしさ」を実現したいと思いました。そのためには何が必要なのでしょうか。下記が必要だと考えました。
- なめらかな動き、しなやかな動き
- 各部位が適切に連携した動き
- 十分な早さと遅さ
これらの動きはサーボモータの制御に直結します。サーボモータの持つ特性を最大限に生かすことが必要です。複数のサーボモータの連携も必要で制御やその制御のための操作も複雑になりそうです。そこで以下の仕様を考えました。
- 速度(角速度)を可変として 0からサーボモータの最大速度までの速度範囲とする。
- 加速度(角加速度)を取り入れて速度の変化による表現力を高める。
- 複数のサーボモータの連携と動作順序をデータで実現する。
仕様書として書くと以下のとおりです。
- 角速度: 0 ~ サーボモータの最大値
- 角加速度: 動作の前後に可変の加減速区間を設定( 台形制御 )
- 協調運動制御: データによる協調運動
ハードウエアの制限による仕様
Qumcum Lab. は電池で動きます。急に大きな電流が流れると電池の充電残容量によっては電圧降下を起こしてしまい問題が発生します。 MCUの仕様によっても制御の範囲が変わります。具体的には MCUのシステムクロックにより制御の精度(分解能)が変わります。ここで言う精度とは、例えば角度指定をする場合に 1°ごとなのか、0.1°ごとに指定できるのかということです。プログラムの処理の側面からは処理時間の検討が必要になります。リアルタイム制御ですので処理に時間のかかる部分があるとサーボモータの制御が追い付かなくなり問題を起こします。
負荷分散に関する仕様
電流、処理とも同時に負荷が高くなった場合に問題を起こします。それを未然に防ぐために処理の分散化を行います。7つのサーボモータを同時に制御するのではなく、時分割により各サーボモータの制御を処理して出力も分散させます。
制御精度に関する仕様
サーボモータの制御は PWMであり時間の管理による制御が必要です。そのため、タイマ割込みが必要になります。タイマ割込みは MCU内部のタイマによる割り込みです。タイマは供給されるクロックによりカウントします。そのクロックは最終的にはシステムクロックに依存します。( 実際は MCU内部のプリスケーラなどの設定で変わります。 )
サーボモータの制御は Body MCU( Leafony Block の MCU Leaf )で行います。MCUは STM32L4ですので、このMCUのシステムクロック( 80 MHz )が上限となります。80 MHzは周期で 12.5 nsですので、最小で 12.5 nsの精度で制御することができます。ここで大切なのはこの最小値です。これ以上であれば問題ありませんので設計時に検討を行います。
これらから仕様は以下のとおりです。
- 個々のサーボモータに対して分散処理を行う
- サーボモータの制御の精度は最小 12.5 ns
これらの、サーボモータの制御仕様、希望する動作に基づく仕様、ハードウエアの制限による仕様から、サーボモータ制御のプログラミングを行います。
参考情報
参考になる情報は以下のとおりです。
このホームページ内
- 複数のMCUをつなぐ: このロボットには複数の MCUが搭載されています。その MCU間の接続の概要です。
他のWebサイト
- SN74LVC1G3157 SPDT アナログスイッチ Datasheet