サーボモータ制御の仕様に基づき、プログラムの基本的な構造や機能を検討します。仕様を実現するための大まかな構成がここで決まります。
◀ この記事の前に: サーボモータ( 設計・仕様 )
▶ この記事の次に: サーボモータのリアルタイム制御( 分散制御 )
仕様に基づく構造と機能
仕様を検討してプログラムで実現するしくみを考えます。必要な構造と機能は以下のとおりです。
- 処理と出力の分散化: リアルタイム制御の処理を可変タイマ割り込みで分散化します
- シーケンスデータによる制御: 複数のサーボモータを連携する協調運動制御をデータで指示するしくみにします
- 制御の階層化: アプリケーションとサーボモータ制御の間を階層化します
処理と出力の分散化
サーボモータは 50 Hzで制御しますので、20 msごとに ONデューティの幅を計算してサーボモータに接続している出力ボートの状態を変える必要があります。サーボモータは7つ(7軸)ありますので、同時に計算すると処理時間が長くなります。同時に出力するとサーボモータに流れる電流が急に増える場合があります。
処理と出力を同時に行わず、分散させることにより1回ごとの処理時間を短くしたり、サーボモータに流れる電流を抑えることができます。
リアルタイム制御ではタイマ割り込みを使用しますが、タイマ割り込みの処理時間を短くするのと同時に分散化して、二重割り込みが発生したり、フォアグランド処理( loop() )の処理時間が不足することを防ぎます。
Technical Considerations サーボモータに流れる電流
止まっているモータを動かしたり、加速する場合にはイナーシャ( 慣性モーメント )があり大きな電流が流れます。モータのコイルを直接制御している場合は、制御に関わる素子( トランジスタやFETなど )に大きな電流が流れます。ここで使用している DCサーボモータは信号線なので直接大きな電流が流れることはありません。( サーボモータ内部に制御回路があります。 )
しかし、同時にサーボモータを動かし始めたり加減速を行うとモータに流れる電流は急激に大きくなります。サーボモータに大きな電流が流れた場合、電池の全充電容量が少ないと十分に電力を供給できずに電源電圧が低下します。この電圧低下により動作が不安定になるなどの問題を起こします。この問題を避けるためには起動や加減速の開始のタイミングを少しずつずらすことにより急激な電流の増加を防ぐことができます。( 同時に多くのモータを動かした場合は、動き始めた後の電流は増えます。 )
シーケンスデータによる制御
複数のサーボモータを動かす順番とタイミングを調整する協調運動制御をここではシーケンスと呼びます。シーケンスはコードで実現する方法もありますが、Qumcum Lab. はデータにより実現する方法にします。このデータをシーケンスデータを呼びます。
シーケンスをデータにすることにより以下のメリットがあります。
- プログラム全体の量を抑えることができる
組み込みシステムは MCUなどのリソースが少ないためメモリ節約できる - シーケンスを柔軟に変更できる
プログラムを変えることなくデータを変えるだけで動作の変更ができる - 通信や外部保存がしやすい
データのため通信の伝文に載せることができる
外部メモリなどに保存できる - データを作成しやすい
データ(文字列)なので文字列を編集することによりシーケンス(制御)を作成することができる - シーケンスをコンテンツとして扱える
ダンスなど動きで表現することはひとつの価値あるコンテンツであり、独立して扱うことができる
制御の階層化
サーボモータをその仕様どおりに動作させるためのハードウエアを意識した制御から、ロボット全体の動きを意識する協調運動制御まで、制御でも多くの種類があります。Qumcum Lab. はヒューマノイドとして多彩なことをプログラミングできます。ロボット全体として目的に合わせた動きを実現する部分をアプリケーションと呼びます。アプリケーションは細かいことを意識せずに作成することが望ましく、そのためにアプリケーションから利用のしやすい構造にします。
前記のとおり、制御でも多くの種類があります。それを階層として分けることによりアプリケーションから使用しやすく、コードの複雑化を避けるようにします。コードが複雑だとバグが発生しやすくなりますのでバグを防ぐことにもつながります。
以下の階層化したモジュールで構成します。
- Motion interpreter / モーションインタプリタ
アプリケーションと連携して一連の制御を実現する最上位層です - Motion sequencer / モーションシーケンサ
あらかじめ設定した一連のうごき(シーケンス)を実行して協調運動を実現します - Servomotor driver / サーボモータドライバ
サーボモータ制御の最下位層でサーボモータそのものの制御を行います。 - Power Saving( 省電力制御 ):
サーボモータの省電力制御を行います。
参考情報
参考になる情報は以下のとおりです。
このホームページ内
- 複数のMCUをつなぐ: このロボットには複数の MCUが搭載されています。その MCU間の接続の概要です。
他のWebサイト
- SN74LVC1G3157 SPDT アナログスイッチ Datasheet