産業用ロボットにはACサーボモータと呼ばれる高価なモータとドライバ(駆動回路)が使われています。実は、同期型と呼ばれるACサーボモータは、模型飛行機やドローンに使われているブラシレスDC(BLDC)モータとほぼ同じものです。ちがいは、サイズと、回転センサがついているかどうかと、ドライバの機能です。
ブラシレスDCモータでRCカーの車輪やドローンのプロペラを一方向に高速回転させるだけなら、スピードコントローラ(ESC)と呼ばれる簡易的なドライバで十分です。一方、ブラシレスDCモータでロボットの関節を駆動するには、モータの回転角度や回転速度を細かくコントロールできるモータドライバを用意する必要があります。
よいモータドライバがあれば、安価なBLDCモータでロボットが作れるんです!
モータ本体と比べてBLDC用の安価で信頼できるモータドライバを探すのは大変なのですが、MAB Roboticsが良さそうなモータドライバを開発・販売しているので使ってみましょう。
目次
BLDCモータドライバMD80
MD80とは?
ブラシレスDC(BLDC)モータ専用のモータドライバMD80は、MAB Robotics というポーランドの企業が開発したモータドライバです。最大で48V・80Aという大きな電圧・電流を扱えます。基板は円形で薄く、BLDCモータと一体化して使うときに便利です。一番の特徴はインターフェースにCAN FD (CAN with Flexible Data rate) を採用していることで、 最大8Mbpsという高速通信が可能な点です。
MD80は2022年2月頃に発売され、2023年2月にV2.0、2023年5月にV2.1、2024年7月にV3.0が発表されました。搭載マイコンやMOSFETについては別記事をご覧ください。
ちなみに、MD80は基板の直径が∅55mmですが、2024年7月には小型モータ用に∅35mmのMD20も発売されました。
なぜ高速通信がうれしいか?
ロボットの制御では、複数のモータの状態をコンピュータで読み取って、それに対してメインコンピュータから新たな角度やトルクの指令を各モータに送ることを高速に行います。ロボットはモータをたくさん備えているので、モータとの相互通信は速い方が助かります。とはいえ、どれくらいの通信速度が必要かは、モータの個数と制御の難しさで変わってきます。
例えば4脚ロボットであれば標準的には12個(3個×4脚)のモータを同時に制御します。ちゃんとしたモータドライバは単体でも角度や速度のフィードバック制御を実行しているので、普通はコンピュータと各モータがそんなに速く通信する必要はありません。ロボットの姿勢(各関節の角度)を制御するだけなら、コンピュータからの指令は数十Hz(1秒に数十回)から100Hz(1秒に100回)くらいでも大丈夫でしょう。
モータの角度・速度・トルクを合わせた制御用データは、映像データに比べたらずっと小さいものですが、ロボットの全身のモータを1kHz(1秒に1000回)の頻度で制御したいとなると、通信速度は1Mbpsでは間に合わなくなってきます。非常に安定した姿勢制御を行いたい場合や、複数モータの協調で力制御を行いたい場合などには、1kHzを超える制御がしたくなり、より高速な通信速度が必要となってきます。
CAN FDとは?
CAN FDは車載機器によく使用されるCAN通信をより高速に通信できるようにした通信規格です。CAN 2.0では1回に送信できるデータは8バイトまで、最大通信速度は1 Mbpsでした。CAN FDでは データフレームは64バイトまで拡張でき、最大8Mbpsで通信できます。
なお、MAB Roboticsからは、産業機器によく使われるCAN Open プロトコルに対応したバージョンのドライバも販売されています。
MD80を試すには
MAB Roboticsのネットショップで日本からもMD80を買うことができます。CAN通信が必要なので同ショップの、USB-to-CANドングルCANdleまたはRaspberry Piに載せて使えるCANdle HATを使うのが簡単です。どちらも最大16台のMDドライバを制御できますが、通信速度を考えるとモータが多いときは複数のドングルを使って並列化するのがよさそうです。
MD80をモータと組み合わせて使ってみるには下記のようにいくつかのやり方があります。
T-motor/CubeMarsのAKモータ純正モータドライバをMD80に換装する
今回はこちらの方法で使っています。T-motorのAKシリーズは、大径のBLDCモータと遊星ギアとモータドライバを一体化した使いやすいモータモジュールです。MD80はAKシリーズのドライバ基板と互換性があり、比較的簡単に換装できます。
好みのBLDCモータに自作フレームで取り付ける
安く済んで好きなモータを制御できるやり方です。使いたいBLDCモータを選んで、MD80と組み合わせます。ただし、モータ軸にエンコーダ(回転センサ)のための永久磁石を取り付ける必要があります。MD80の基板裏面の中央には磁気エンコーダICが搭載されています。BLDCモータの出力軸と反対の軸端に小さい永久磁石を接着し、その上にMD80を取り付けるのが簡単です。MD80をモータの背面に浮かせて取り付けるために、適当なフレームを3Dプリンタなどで製作しましょう。
MD80とBLDCモータを一体化せず、離したい場合は、オンボードの磁気エンコーダICが使えないので、MAB Roboticsの外付けの磁気エンコーダME absolute encoderと永久磁石を使います。
実際に動かしてみる
公式がYoutubeにチュートリアル動画MD80×CANdle – Getting Started Tutorialを上げており、これに従えばできます。より詳細な情報についてはMAB Roboticsの公式ドキュメントがあります。
動作環境
今回はCANdle HATをRaspberry Pi 4Bに載せて、専用ケーブルでMD80を搭載したモータ1個をつなぎました。CANの通信線と電源は1つのコネクタにまとめられており、3.0mmピッチのMOLEX Micro-Fit 3.0、2列6ピンのコネクタが使われています。CANdle HATの2つのコネクタのうち1つを電源供給に使いました。MD80にもコネクタが2つあるのは、複数のモータを数珠つなぎにできるデイジーチェーン接続のためです。
今回はソフトウェアなどについて以下のバージョンのものを使います。CANdle HATやmdtool等のバージョン対応については公式ドキュメントを見ましょう。
ホストPC | Raspberry Pi 4B |
OS | Ubuntu Server 22.04.4 LTS 64bit |
CANdle HAT ファームウェア | version 3.5.0 |
mdtool | version 1.5.0 |
MD80 ファームウェア | version 2.4.0 |
電源 | 実験用直流電源 24V |
mdtoolのインストール
mdtoolは、MD80をTerminalのコマンドで操作するためのツールです。簡単に設定やキャリブレーション、動作確認などができて便利です。以下のようにコマンドをTerminalで叩いてインストールします。mdtoolの最新バージョンについては公式のリリースノートを見ます。
まずgithubからパッケージをダウンロードします。バージョンの部分は適宜変更のこと。
wget https://github.com/mabrobotics/mdtool/releases/download/v1.5.0/mdtool-arm64-1.5.0-Linux.deb
ダウンロードした.debパッケージをaptでインストールします。
sudo apt install ./mdtool-arm64-1.5.0-Linux.deb
sudo apt update
sudo apt install setserial
自分(ユーザー名:$USER)をdialoutグループに追加して、シリアルポートへのアクセス権限の付与などを行います。
sudo adduser $USER dialout
再起動して設定を反映させます。
reboot
mdtool実行時にディレクトリがないとmdtoolコマンド実行時にエラーが出るので作成しておきます。
mkdir -p ~/.config/mdtool/
通信方法の選択
今回はSPI通信を使用します。
mdtool bus SPI
代わりにCANdle HATとUSB接続して通信する場合は以下のようにすれば良いです。
mdtool bus USB
CANdle HATでは、SPI通信での最大制御周期は2.8kHz、USB通信での最大制御周期は1kHzとなっています。
通信速度とCAN IDの設定
まず、モータの(モータドライバの)CAN IDを調べます。次のコマンドにより、CANバスにつながっているモーターのIDがすべての通信速度において走査されます。
mdtool ping all
現在のCAN IDさえ分かれば、CAN IDと通信速度の設定は以下のコマンドで実行できます。モータが1つのときは終端抵抗(ターミネータ)をONにします。また、複数のモータを数珠つなぎにしたときは、CANdle HATから一番遠いモータだけ終端抵抗をONします。
mdtool config can [現在のCAN ID] [新しいCAN ID] [通信速度 1M/2M/5M/8M] 100 [終端抵抗のON/OFF ONなら1、OFFなら0にする]
モータドライバのハードウェアやファームウェアのバージョン確認は下記のコマンドで可能です。
mdtool setup info <ID>
設定の読み出し・書き込み
モーターの情報を.cfgファイルの形式でドライバに教えてあげる必要があります。AKモーターの場合はMAB Roboticsのgithubに上がっているので、対応したものをダウンロードすればOKですが、必要があればモーターの仕様書を見ながら各値を調整します。
以下のコマンドで設定ファイルをMD80に書き込みます。
mdtool setup motor [CAN ID] [xxx.cfg]
キャリブレーション
初回にはモータドライバのキャリブレーションが必要です。以下のコマンドでは、モーターの極数の確認や抵抗値・インダクタの測定、磁気式エンコーダの偏心量の測定などが実施されます。
これらのコマンドは実行するとモーターの出力軸が回転するので気をつけましょう。また、電源電圧は24Vに設定し、正確なキャリブレーションのために出力軸にはなにも取り付けられていない無負荷状態にしましょう。
mdtool setup calibration [CAN ID]
また、出力エンコーダのキャリブレーションコマンドが別にあります。
mdtool setup calibration_out [CAN ID]
ゼロ点(基準点)の設定
現在の回転角でエンコーダの基準点を設定します。
mdtool config zero [CAN ID]
ゼロ点の情報を不揮発性のFlash ROMに保存する場合は、以下のコマンドを使います。保存したゼロ点は電源オフしても保持されるので、電源再投入時に再度ゼロ点を合わせる手間を省けます。
mdtool config save [CAN ID]
回してみる
ここまででモーターの設定は完了です。動作確認してみましょう。当たり前ですがモータの軸が回転するので、モータはしっかり固定して、出力軸に取り付けたものがあればその動きに注意します。
絶対角度を指定して回す
mdtool test move absolute [CAN ID] [角度(rad)]
回転角度を指定して回す
mdtool test move [CAN ID] [角度(rad)]
これで回れば動作チェックは完了です。うまくいかないときは公式のFAQを見ます。
おわりに
ブラシレスDCモータを使って、素早く力強いロボットを作ってみたいですね。モータドライバを使いこなすのがその第一歩です。
この技術記事は、明治大学理工学部 複雑ロボットシステム研究室(新山研)大学院生の阿部さんが主に執筆し、ロボット博士の新山が加筆修正したものです。