1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

前回のの続きです。

Commanderについての紹介をします。

Commanderとは

シリアルモニターを通じて、モーターを操作したりパラメータを変更する機能となります。

公式のドキュメントはこちらになります。

コード説明

前記事のソースコードから抜粋します。いちばん基本的なところを説明しようと思います。

Commanderのインスタンスを作成します。

onTarget関数はコールバック用です。

とりあえず、お決まりのパターンだと思ってコーディングしましょう。

Commander command = Commander(Serial);
void onTarget(char* cmd){ command.motion(&motor, cmd); }

setup関数でmotorオブジェクトの設定と初期化のあと、Commanderのメンバ関数addを使って登録します。シリアルモニターを通じてキーボード入力で操作できるようになります。

第1引数はコマンドの最初に入力する文字です。なんでもいいです。大文字・小文字は区別されます。モーターが複数あるときは、違う文字を使ってモーターの数だけaddします。onTarget関数側でswitchなどを使って個別に制御できます。もちろんまとめて動かすことだってできますね。

第2引数はコールバック関数です。

第3引数はラベルです。シリアルモニターで受信した文字列にラベルが入るのでわかりやすくなります。必要なければNULLにします。

void setup()
{

  ...

  command.add('T', onTarget, "motion control");

  ...

}

loop関数ではメンバ関数runをコールするだけです。

void loop()
{
  motor.loopFOC();
  motor.move();
  motor.monitor();
  command.run();
}

使い方

詳しい使い方は公式ドキュメントを見てください。

ここではCommander::motion()の使い方を紹介します。

まず前提として、Visual Studio Code拡張機能のSerial Monitorを使っています。インストールされているものとします。自動再接続が便利で、PlatformIOでArduinoへUploadのときに接続が一度切れても、マイコン側がリブートしたあとに何もしなくてもポートが開きます。再接続できるかポーリングしているようで、Arduino側はシリアルポートを開いてから文字出力するまえに1秒くらいディレイを入れてあげると、文字が欠けることがなくなると思います。

シリアルモニターのタブはこんな感じです。一番下の行に送信したいコマンドを入れます。

serialmon.png

前回のソースコードは、初期状態で角度制御モードにしています。それではコマンドを入れてモーターを動かしてみましょう。

最初にTとし2文字目から角度を入れます。ラジアンですので、例のように3.14なら180度回転します。マイナスをつければ反対に回ります。どちらに回るかはモーターの3ピンコネクタの刺した向きによるので、自分で決めておいたほうが良いと思います。わたしは時計回り(CW)を+、反時計回り(CCW)をーにしています。

一周の$2π=6.28$を超えた場合は、超えた分だけ回ります。T100だと16回転くらいします。

T3.14

コマンドを受け付けると、以下のようなメッセージを受信します。

Target: 3.14

モード変更するためにはコマンドCを使います。TC1を送信すると速度指定モードになります。数値を入れないと現在のモードがなにか教えてくれます。

TC1

コマンドは6個あります。Dだけサブコマンドとなっていて、ダウンサンプリング数を変更できます。初期値は0でダウンサンプリングなしです。

3と4はオープンループです。角度センサーを付ける前に、とりあえずモーターだけ確認するとか使ってもいいと思います。

  • D - downsample motion loop
  • 0 - トルク
  • 1 - 速度
  • 2 - 角度
  • 3 - 速度(オープンループ)
  • 4 - 角度(オープンループ)

モードを変更すると、以降のコマンドでTに続く数値の意味は変わります。そのままですが、速度とトルクの指定値になります。制御モードによってはスペース区切りで数値を複数渡せます。

# トルク指定
TC0
T2.0

# 速度指定(オープンループも同一)
TC1
# オプションの2番目の数値はトルク制限を変更、省略可能
T3.0 2.0

# 角度指定(オープンループも同一)
TC2
# オプションの2番目の数値は速度制限を変更、省略可能
# オプションの3番目の数値はトルク制限を変更、省略可能
T3.14 3.0 2.0

Tはトルク制御方法の表示または設定できます。

  • 0 - 電圧
  • 1 - 電流
  • 2 - FOCアルゴリズムで計算した推定の電流

Eはモーターへ電力供給をオンオフします。使わないときはオフにすることでバッテリーを節約できます。

  • 0 - 無効
  • 1 - 有効

おわりに

次回、Teleplotでテレメトリをグラフ表示します。

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?