4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

DJI GM6020 をPWMで速度制御する方法 RoboMaster Assistant

Last updated at Posted at 2024-02-19

GM6020

GM6020のユーザーガイド(ドキュメント)

DJI RoboMaster GM6020 ブラシレスDCモーターをESP32から出すPWMで速度制御する。
GM6020では、CANまたは、PWMで制御できる。

CANとPWMの比較

外部のセンサはなしで、それぞれのできること

CAN PWM
設定 位置、速度、電流、電圧 速度、位置
取得 位置、速度、電流、温度 なし

速度制御のみする場合、CANでもできるが、PWMの方が楽なのでPWMで行った。

PWM制御するときの注意点
PWM制御のデフォルトでは、位置制御モードで、速度制御モードではない

RoboMaster Assistantで設定することで、速度制御モードと位置制御モード(デフォルト)を切り替えることができる。
PWMで位置制御したい場合は、RoboMaster Asssitantで設定を変える必要はない。

RoboMaster Assistantの使い方

ユーザーガイドには、USBシリアルコンバーターを繋ぐと書いてあり、DJI公式が別売りで販売しているものかと思ったが、そいういうわけではなく、市販品を使えばよい。マイコンで自作することも多分できる。今回、どのUSBシリアルコンバーターを使ったのかわからないので、入ってた箱の画像も載せておく。
配線は3本繋ぐだけ。

GM6020 シリアルコンバーター
GND(黒) GND
TX(灰) TX
RX(白) RX
USBシリアルコンバーターの箱 USBシリアルコンバーター
USBシリアルコンバーターの箱 USBシリアルコンバーター

USBをパソコンに挿す。

RoboMaster Assistantをインストールして、起動する。
RoboMaster Assistantのダウンロードリンク
起動直後の画面
赤い文字が点滅するがそれはクリックしない。

24V電源入れる、USBシリアルコンバーターをパソコンに指す。ESCとモーターは繋がれた状態で、CANケーブルはつなぐ必要ない。
1回認識したら、別のESCに変えても認識を待たずにパラメーターを書き込める。

USBシリアルコンバーターをパソコンのUSBに挿す。数秒後に自動的に認識されて、デバイスを選択画面になる。
デバイスマネージャー COMポートに認識される

認識後の画面

ESC GM6020 をクリックする。

左下で言語を選択できる。
スクリーンショット 2024-02-19 145028.png

ファームウェアのアップデートがあれば、アップデートする。
アップデート後の画面1
アップデート後の画面2
アップデート後の画面3
ESC GM6020 を選択後の画面

初期状態の設定
スクリーンショット 2024-02-19 145218.png

速度閉ループ周波数の設定
スクリーンショット 2024-02-19 145139.png

最大?角の設定
スクリーンショット 2024-02-19 145054.png

PWMモードの設定

速度制御・位置制御を変える時はこの項目を変える

スクリーンショット

最後に右下の「設定」を押して保存する。

パソコンとモタドラがどのようにシリアル通信しているか、ロジックアナライザで見たかった

実験

用意したもの

  • GM6020
  • PWMケーブル(GM6020付属)
  • XT30電源ケーブル(GM6020付属)
  • パソコン
  • マイコン(ESP32)
  • ジャンパー
  • 安定化電源
    24Vの電源がすぐ近くなかったので、18Vの安定化電源に繋いで実験した。
    部室に転がってる今にも壊れそうな安定化電源

コード

GM6020_control.ino
#include <ESP32Servo.h>

#define ESC_PIN 15  //ESCへの出力ピン

Servo esc;  //Servoオブジェクトを作成する.今回はESCにPWM信号を送るので,`esc`と命名している.

void setup() {
  Serial.begin(115200);
  Serial.println("Program begin...");

  esc.attach(ESC_PIN);  //ESCへの出力ピンをアタッチする
  Serial.println("最大値2000にする");
  esc.writeMicroseconds(2000);  //最小のパルス幅を指示する
  delay(2000);
  Serial.println("最小値2000にする");
  esc.writeMicroseconds(1000);  //最小のパルス幅を指示する
  delay(2000);
}

void loop() {
  esc.writeMicroseconds(2000); //正転 MAX
  delay(2000);
  esc.writeMicroseconds(1000); //逆転 MAX
  delay(2000);
  esc.writeMicroseconds(1500); //止まる
  delay(2000);
}

解説

ユーザーガイド p.8

Arduinoで動かすときはインクルードするライブラリをServo.hにすれば多分動く
ESP32Servo.hはライブラリマネージャーからesp32 servoで検索して、見つけた

キャリブレーションは、一般的なESCでブラシレスモーターと同じプログラムで、最大(2000)→最小(1000)の順に設定する。
正転逆転の指定は特殊で、1000~1500までは逆転で、1500で停止、1500~2000までは正転である。

起動すると、ステータスLEDが動画のように、緑色にゆっくり点滅する。これは、PWM通信は正常であることを意味する。

位置制御した結果

ボールを射出する競技で筒の仰角調整にGM6020を使いました。PIDゲインを細かく調整しましたが、振動してしまって、まともに動きませんでした。
GM6020を位置制御するために購入するのはおすすめしません。
そもそもロボコンだと使い道がほぼ0です。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?