1
0

はじめに

前回のの続きです。

SimpleFOCStudioについてになります。

std1.png

SimpleFOCStudioについて

これまでモーターの動作確認やPID等の調整は、スケッチを直接書き換えてビルド・アップロードをするか、SimpleFOCのCommanderを使ってシリアルモニターからコマンドを入力して調整するかでした。グラフはTeleplotを使って表示していました。

SimpleFOCStudioは、すべての操作をGUIから操作でき同時にグラフ表示が可能で、とてもユーザーフレンドリーです。調整が終わったらスケッチを生成してくれます。

インストール

GitHubにプロジェクトがあります。インストール方法が書いてあります。ここでは私が実施した手順を記載していきます。

メインブランチのヘッドをクローンしました。リリースバージョンはちょっと時間が経っているようです。

ソースコードをダウンロードするかgitコマンドを使います。

% git clone https://github.com/JorgeMaker/SimpleFOCStudio.git
% cd SimpleFOCStudio

Pythonで作成されているのでインストールしておきます。ドキュメントにはPython 3.9を要求していますが、3.10と3.11でも動作しました。3.12はパッケージのインストールでエラーになったので避けたほうがよさそうです。私は3.11を使うことにしました。

% python3.11 -V
Python 3.11.9

venvでSimpleFOCStudio専用の環境を作成し、pipでパッケージをインストールします。

% python3.11 -m venv .venv
% source .venv/bin/activate
% pip install -r requirements.txt

アプリを実行します。

% python simpleFOCStudio.py

SimpleFOCStudioを終了したときは、deactivateコマンドで専用環境から抜けます。ターミナルを閉じてもよいです。

% deactivate

スケッチ

コールバック関数を定義します。メンバ関数motor()によって、SimpleFOCのすべてのパラメータの操作が可能となります。motion()は使わないので注意しましょう。

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

セットアップ関数で初期化します。monitor_downsampleは0にしておきます。0ですとシリアルポートには表示されないですが、Commanderを通してGUIで指定できるため問題ありません。

add()でコールバック関数を登録します。最初の引数Mの文字は何でもよいですが、アプリ側で設定で合わせることになります。

void setup() {
  ...
  motor.useMonitoring(Serial);
  motor.monitor_downsample = 0;

  ...

  command.add('M', doMotor, "motor");
  ...
}

ループ関数でmonitor()をコールします。

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

アプリの使い方

ウインドウが表示されたら、左上のモーターのアイコンをクリックします。ポップアップメニューが表示されます。Tree ViewForm View が選べます。 Tree View のほうが細かい設定ができるようになってます。 Tree View の操作について説明しますが、 Form View もそれほど違いはないので、使い方に迷うことはないと思います。

std2.png

Arduino Uno R4とはUSBで接続しておいてください。矢印のところの Configure をクリックします。

std3.png

シリアルポートを指定します。大抵は Port NameBit rate を設定するくらいだと思います。

std4.png

①のところにスケッチadd()関数の最初の引数で指定した文字を入力します。

②のConnectをクリックすると、Arduino Uno R4と接続開始します。

Pull Params ボタンは押さなくても、接続の最初に自動的にパラメータを取得してくれます。もし Command Line interface で手動設定したあとにGUIのほうを反映させるのに使えます。

std5.png

間違いがなければArduinoと接続開始します。グラフは Real time motor variablesStart ボタンをクリックします。

std6.png

Angle は今の角度(ラジアン)、 Velocity は速度、 Voltage は電圧です。

Target は現在のモードでの目標値です。 Motion Control Type によって意味が変わるので注意が必要です。モードごとに目標値を持っているようです。

std12.png

Disable Device はモーターへの電力供給を切ります。トグル操作なので Disable DeviceEnable Device と表示が切り替わります。

Sensor Zero は、いまの値を0として絶対値の値をオフセットになります。図のように Angle が13.796...のときにボタンをクリックすると、Angle が0になり Zero Angle Offset は13.796...になります。磁気センサーの場合、モーターに取り付けた磁石の極と磁気センサーを頑張って合わせるより、オフセット値を調整したほうが楽かなと思います。

Zero Target は、ターゲットにゼロをセットします。Angleモードのときは角度0になるまでモーターは回転します。

std13.png

ターゲットを変更します。 Increment の数値だけターゲットをプラス・マイナスします。>>はIncrementの二倍です。

std14.png

スケッチを生成するボタンは左上の矢印の位置になります。

std10.png

ダイアログボックスが表示されるので、必要と思う項目にチェックをいれてOKを押すとスケッチが表示されます。テキストボックスを選択してコピペしましょう。

std7.png

std8.png

コマンドライン・インターフェースはDevice画面に表示されていますが、大きな画面で表示したいときは画面左上の矢印の位置になります。

std11.png

std9.png

さいごに

ツリーに表示されたPID・フィルター・リミットを編集できるので、根気でチューニングしましょう。頑張ってください!

次回、モーターを2個つなげて動かします。

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