静かで、パワフルで、制御が簡単、そんな都合のいいモーター「DDT M0601C_111ダイレクトドライブモーター」。発売開始は2年前なので、まあ今更ですけどお手軽にプログラムを書かずに動かしてみました。
この記事に記載した方法は、型番は違うけどWaveShareのDDSM115ドキュメントページに詳しく書かれています。(ほとんど差がないので、どちらかがOEM品?)
環境
Windows PC
DDT M0601C_111
Serial Debug Assistant (シリアル通信ソフト)
配線
線の色の説明はミクミンPさんの画像がわかりやすかったです。
その内容を元に配線。
配線メモ
モーターとのやりとり
このモーターは物理層はRS485接続、プロトコルはシリアル半二重通信で制御できます。
ホストから送信するデータは10バイトで1セット。
ID設定、モード設定を除いて、10バイト目はデータチェック用のCRC8(CRC-8/MAXIM)の値。
ID設定、モード設定を除いて、ホストからデータを送るとモーターからフィードバックデータ10バイトが送られてくる。
CRC8(CRC-8/MAXIM)の確認方法
- https://crccalc.com/ にアクセスする
- InputをHEXに変更する
- 9バイト分入力する 。例:「02 64 00 20 00 00 00 00 00」
- 「CRC-8」ボタンを押す
- 「CRC-8/MAXIM」のResult値を確認する。この値が10バイト目に入れるべきデータ
シリアル通信の手順
Serial Debug Assistantというシリアル通信ソフトを使いました。
16進数で読み書きできるシリアル通信ソフトが欲しかったので、ちょうど良かった。
- Serial Debug Assistantを立ち上げる。
- 必要な設定(画像参照)を行い「開ける」(Open)ボタンを押す。
- 「拡張コマンド」を押す
- 送信設定の拡張コマンドに送信したいデータをセット。
- 送信ボタン(数字)を押す。
送信データ内容(モーターのID確認)
注:モーターのIDを確認する場合は、モーターを1台だけ接続すること。
送信するべきデータ:C8 64 00 00 00 00 00 00 00 DE
受信するデータの例:01 02 FF FE 00 00 76 3B 00 75
1バイト目がID、2バイト目がモード(2=速度ループ)
送信データ内容(ID1のモーターへの指示)
モーターを操作するための送信データ(速度ループ時)
速度 | 送信するべきデータ |
---|---|
-200rpm | 01 64 FF 38 00 00 00 00 00 1A |
-115rpm | 01 64 FF 8D 00 00 00 00 00 F6 |
-100rpm | 01 64 FF 9C 00 00 00 00 00 9A |
-50rpm | 01 64 FF CE 00 00 00 00 00 DA |
0rpm | 01 64 00 00 00 00 00 00 00 50 |
50rpm | 01 64 00 32 00 00 00 00 00 D3 |
100rpm | 01 64 00 64 00 00 00 00 00 4F |
115rpm | 01 64 00 73 00 00 00 00 00 91 |
200rpm | 01 64 00 C8 00 00 00 00 00 6E |
送信データ内容(ID2のモーターへの指示)
モーターを操作するための送信データ(速度ループ時)
速度 | 送信するべきデータ |
---|---|
-200rpm | 02 64 FF 38 00 00 00 00 00 EF |
-115rpm | 02 64 FF 8D 00 00 00 00 00 03 |
-100rpm | 02 64 FF 9C 00 00 00 00 00 6F |
-50rpm | 02 64 FF CE 00 00 00 00 00 2F |
0rpm | 02 64 00 00 00 00 00 00 00 A5 |
50rpm | 02 64 00 32 00 00 00 00 00 26 |
100rpm | 02 64 00 64 00 00 00 00 00 BA |
115rpm | 02 64 00 73 00 00 00 00 00 64 |
200rpm | 02 64 00 C8 00 00 00 00 00 9B |
モーターIDの書き換え
電源を入れてから1回のみ設定可能
設定するID | 送信するべきデータ |
---|---|
1 | AA 55 53 01 00 00 00 00 00 00 を5回送る |
2 | AA 55 53 02 00 00 00 00 00 00 を5回送る |
リンク
スイッチサイエンスの製品ページ
データシートやマニュアルのリンクなど
Direct Drive Tech社製DDT M06/M15ダイレクトドライブモーターを使う
M5Stack DDT Motor M06/M15 Library
Pythonでダイレクトドライブモーターを回してみた!
DDT-M0601C-112-U2D2
ROS2 driver for DDT M06xx
公式のサンプルソース(c)
DDSM115 - Arduino Reference
Waveshare DDSM115 motor wheel driver for ROS
ddsm115_python
Arduino Uno R3とCAN-BUS Shieldを使って、DDT M15モータをテストしたときのコード