はじめに
こんにちは!
豊橋技術科学大学 学ロボ2025世代のじゃにです!
学ロボ2025では、RC(背が高い方のロボット)の全体・ローラ機構の設計とピットクルーを担当していました.
今回は、TwitterでRoboMaster M2006(以下M2006)の互換品(大嘘)として話題になったDAMIAOのDM2325を回してみたことについて書きます!
結論から言うと、M2006の互換モータとして考えたら微妙ですが、制御性がよく趣味や制御が主目的でない研究などに非常に使いやすいモータだと思います!
WARNING
筆者はロボコン時代は機械設計を担当しており、制御関係に関しては素人です.記事内のコードもデータシートを読み、生成AIと相談しながら生成したものです.
記事内の回路構成や、コードを用いて同様のモータを動かして発生した損害について、筆者は一切の責任を負いません.
DM2325について
冒頭にも書きましたが、TwitterでM2006の互換として紹介されたものの、寸法がかなり異なり代替できないと話題になりました.同社製のDM3519がRoboMaster M3508と比較して直径や取付穴が共通化されており、本体の長さが異なるだけであったのに対し、このDM2325はモータ本体の直径・取付穴などが異なりそのまま置換できる製品ではありません.
上記の画像は信号線をオシロで見るために追加ではやしているので一本多いですが、モータから生えている線はM2006と同様の電源線とGH4ピンケーブルです.
データシートは以下のGiteeという中国版GitHub(?)からダウンロードすることができます.リンク先のリポジトリには3Dデータなどもあります.
DAMIAOのGitee
DM2325のデータシートなど
DM2325の購入について
今回は、中国の通販サイトTaoBaoで購入しました。
9/30に注文して約2週間後の10/12に到着しました.
TaoBaoで購入する際は上記画像の選択肢(下は翻訳したもの)から商品の組み合わせを選んで購入することができます.
私が今回購入したのは、「モーターキット(USB to CAN + ドライバーを含む)」です.商品名の通り、ギヤヘッド付きのモータとESC、USB to CANの書き込み機がセットになったものです.
購入金額は488元で、日本円で11,658円でした(2025年9月30日時点).
その後、なぜか国際送料のような名目で追加で1,406円を支払いました.この存在に2日くらい気づかなかったので、もっと早く払ってたら早く手に入っていた説はあります.
各商品の価格は以下の通りです(2025年10月17日時点).
商品 | 人民元 | 日本円 |
---|---|---|
ギヤヘッド付きモータとESCのセット | 448元 | 約9,458円 |
ギヤヘッドなしモータ | 149元 | 約3,146円 |
ギヤヘッド付きモータ | 249元 | 約5,257円 |
ギヤヘッド付きモータ + ESC + USB to CAN | 488元 | 約10,303円 |
ギヤヘッド付きモータ + ESC + USB to CAN FD | 528元 | 約11,147円 |
ESC単体 | 199元 | 約4,201円 |
他に方法があるorほかの製品で代替可能かもしれませんが、GUIツールを用いてESCのCAN IDを変更する際に必要なので、USB to CANを1つは購入することをお勧めします.
詳細
ギヤヘッド付きモータ本体
M2006との比較
M2006との大きな違いは以下に挙げるような点だと思います.
- 軸にピンを通せる穴がない
- 軸の先端にタップ穴がない
- 取付用の穴が3点じゃなくて4点である
- 本体のサイズが直径・長さともに大きい
特に最初の2つがないことで固定する方法がクランプ系のものしかなくとても不便だと思いました.
また、画像を見たらわかるのですがDカットの加工が雑いです.
制御的なところでいうと
- 自身のESCのIDにメッセージが送られた時のみフィードバックを返す
- 起動時にenableのメッセージを送る必要がある
- モードごとにCANのIDが異なる
- CANのIDが、MASTER_IDとSLAVE_IDがある
- CANのデータ構造が大きく違う
- ロボマスが4個のモータで1メッセージなのに対して、DMシリーズは1個のモータに1メッセージ
- ESC単体でCANのIDを変更することができない
- CANでできるという説もある
- エンコーダがアブソリュートでなくインクリメンタル
分☆解
モータを分解してみました.
ギヤヘッドとモータの固定はM2006と同じタイプでした.
データシートで重量は172.2gとなっているのでほぼそれ通りです.
ギヤヘッドだけで100gもあります.
なぜか合計の重量が一致してない
M2006単体が90gなので、DM2325はギヤヘッドだけでそれより重たいです.
ESC
DM3519に付属するESCと型番が同じなので全く同じものかと思いましたが、2325というシールが貼られているので内部のファームウェアが違ったりするのかもしれません.
RoboMasterのC620と似たような形状をしていますが、持った感じが軽いです.
ESC自体からケーブルが生えていないのが個人的にいいなと思いました.
USB to CAN
伸びている信号線は、CANとUARTです.
後述するGUIツールで設定を書き込む際に使用します.
M2006との比較
GUIツール
DM2325(というよりDAMIAOのモータ?)には、GUIで設定を読み出し・書き込み、テスト動作できるGUIツールがあります.
導入方法や詳しい使い方を省略しますが、以下のリンク先の"dm_tools"がDAMIAOのモータに使用できるGUIツールです.
dm_tools
パラメータを設定して各動作モードで動かしてみたりできます.
画面の一番上の赤いグラフが位置のグラフですが、エンコーダの範囲が-4π~4πであることがわかります.
GUIツールのTips
- ESCのファームウェアを更新しないと通信できない
- リンク先からダウンロードして書き込んだらいけました
- ファームウェアのリンク
- キャリブレーションを行おうとすると、データ転送エラーで行えない
- データシートによると通常キャリブレーションは不要なので今回は行わずにモータを回しました.
- 画面下の設定スイッチで中国語と英語を切り替えできる
- テスト動作画面では画面右下のsendを押さないとCANのフィードバックが送られてこない
RP2040で回す
構成
偉大な先輩方のライブラリと知見により簡単にモータを回すことができました.
基本的には以下のブログと同様な回路の構成でモータを回しました.
以下のライブラリにより、CANコントローラのないRP2040のPIOを用いてCANトランシーバを接続するだけでCAN通信を行うことができます.
動かしている様子
速度制御を行っている様子
位置制御を行っている様子
RoboMasterモータの起動音を再現しようとした
プログラム
ライブラリとサンプルプログラムを公開しました.
動作モードを切り替えることで、以下の3モードで動かすことができます.
- MITモード
- 位置制御モード
- 速度制御モード
enableメッセージ送信時に起動音が鳴ります.
ソースコードを表示(折りたたみ)
動かしたプログラム
#include <RP2040PIO_CAN.h>
#include <DMMotorController.h>
// 1: MITモード
// 2: 位置制御モード
// 3: 速度制御モード
const int CONTROL_MODE = 3;
const int DELAY_AFTER_STARTUP_MS = 2000;
// --- CAN設定 ---
const uint8_t CAN_TX_PIN = 0;
const uint8_t CAN_RX_PIN = 1;
// --- モーター設定 ---
const byte MOTOR_ID = 0x01;
DMMotorController motor(MOTOR_ID, CAN);
// --- 制御パラメータ ---
const float VELOCITY_LIMIT_RPM = 50.0f;
const float MIT_KP = 2.0f;
const float MIT_KD = 0.8f;
// --- 状態管理用の変数 ---
int motionStep = 0;
unsigned long stepTimer = 0;
void setup() {
Serial.begin(115200);
while (!Serial);
Serial.println("--- DMMotorController Library Demo ---");
CAN.setTX(CAN_TX_PIN);
CAN.setRX(CAN_RX_PIN);
if (CAN.begin(CanBitRate::BR_1000k)) {
Serial.println("CAN bus initialized.");
} else {
Serial.println("CAN bus initialization failed!");
while (1);
}
// --- 起動処理 ---
Serial.print("Waiting for motor to be enabled...");
while (!motor.isEnabled()) {
motor.enableMotor();
motor.update();
Serial.print(".");
delay(100);
}
Serial.println("\nMotor enabled. Playing startup sound.");
motor.playStartupBeep(2000, 100);
Serial.print("Waiting for ");
Serial.print(DELAY_AFTER_STARTUP_MS);
Serial.println(" ms before starting operation...");
delay(DELAY_AFTER_STARTUP_MS);
motor.setMode((DMMotorController::ControlMode)CONTROL_MODE);
Serial.print("Initial mode set to: ");
Serial.println(CONTROL_MODE);
Serial.println("Operation started.");
stepTimer = millis();
motionStep = 1;
}
void loop() {
motor.update();
if (motor.isEnabled()) {
switch (CONTROL_MODE) {
case 1:
if (motionStep == 1) {
motor.setMIT(0.0f, 0.0f, MIT_KP, MIT_KD, 0.0f);
if (millis() - stepTimer > 2000) {
motionStep = 2;
stepTimer = millis();
}
} else if (motionStep == 2) {
motor.setMIT(1.57f, 0.0f, MIT_KP, MIT_KD, 0.0f);
if (millis() - stepTimer > 2000) {
motionStep = 3;
stepTimer = millis();
}
} else if (motionStep == 3) {
motor.setMIT(-1.57f, 0.0f, MIT_KP, MIT_KD, 0.0f);
}
break;
case 2:
if (motionStep == 1) {
motor.goToPosition(0.0f, VELOCITY_LIMIT_RPM); // 0度
if (millis() - stepTimer > 2000) {
motionStep = 2;
stepTimer = millis();
}
} else if (motionStep == 2) {
motor.goToPosition(1.57f, VELOCITY_LIMIT_RPM); // 90度
if (millis() - stepTimer > 2000) {
motionStep = 3;
stepTimer = millis();
}
} else if (motionStep == 3) {
motor.goToPosition(1.57f, VELOCITY_LIMIT_RPM); // 90度で停止
}
break;
case 3:
motor.setVelocityRPM(60.0f);
break;
}
MotorFeedback feedback;
if (motor.readFeedback(feedback)) {
Serial.print("Step: ");
Serial.print(motionStep);
Serial.print(", Pos: ");
Serial.print(feedback.position_deg, 2);
Serial.print(" deg, Vel: ");
Serial.print(feedback.velocity_rpm, 2);
Serial.print(" RPM, Torque: ");
Serial.print(feedback.torque_nm, 3);
Serial.println(" Nm");
}
} else {
motor.enableMotor();
}
delay(1);
}
詳しい関数の説明とかはいつか書きます.
結論
「はじめに」でも書きましたが、M2006の互換品として考えると微妙な点が多いですが、制御性がよく趣味や制御が目的でない研究の機械にはすごく向いたモータだと思います.
また、信号線を引き出してオシロで見ましたが、M2006の4ピンケーブルが、[電源・GND・ホールセンサ2本]の構成であるのに対して、DM2325は、[電源・GND・デジタル通信2本]という構成のようでした(要検証).
なので、同じGH4ピンのケーブルではありますが、DM2325のESCでM2006を回すことは不可能であり、その逆もまた不可能である思われます.
個人的には、趣味用であと数個買おうと思ってます!