はじめに
前回のの続きです。
SimpleFOCStudioについてになります。
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 View と Form View が選べます。 Tree View のほうが細かい設定ができるようになってます。 Tree View の操作について説明しますが、 Form View もそれほど違いはないので、使い方に迷うことはないと思います。
Arduino Uno R4とはUSBで接続しておいてください。矢印のところの Configure をクリックします。
シリアルポートを指定します。大抵は Port Name と Bit rate を設定するくらいだと思います。
①のところにスケッチadd()
関数の最初の引数で指定した文字を入力します。
②のConnectをクリックすると、Arduino Uno R4と接続開始します。
Pull Params ボタンは押さなくても、接続の最初に自動的にパラメータを取得してくれます。もし Command Line interface で手動設定したあとにGUIのほうを反映させるのに使えます。
間違いがなければArduinoと接続開始します。グラフは Real time motor variables の Start ボタンをクリックします。
Angle は今の角度(ラジアン)、 Velocity は速度、 Voltage は電圧です。
Target は現在のモードでの目標値です。 Motion Control Type によって意味が変わるので注意が必要です。モードごとに目標値を持っているようです。
Disable Device はモーターへの電力供給を切ります。トグル操作なので Disable Device と Enable Device と表示が切り替わります。
Sensor Zero は、いまの値を0として絶対値の値をオフセットになります。図のように Angle が13.796...のときにボタンをクリックすると、Angle が0になり Zero Angle Offset は13.796...になります。磁気センサーの場合、モーターに取り付けた磁石の極と磁気センサーを頑張って合わせるより、オフセット値を調整したほうが楽かなと思います。
Zero Target は、ターゲットにゼロをセットします。Angleモードのときは角度0になるまでモーターは回転します。
ターゲットを変更します。 Increment の数値だけターゲットをプラス・マイナスします。>>はIncrementの二倍です。
スケッチを生成するボタンは左上の矢印の位置になります。
ダイアログボックスが表示されるので、必要と思う項目にチェックをいれてOKを押すとスケッチが表示されます。テキストボックスを選択してコピペしましょう。
コマンドライン・インターフェースはDevice画面に表示されていますが、大きな画面で表示したいときは画面左上の矢印の位置になります。
さいごに
ツリーに表示されたPID・フィルター・リミットを編集できるので、根気でチューニングしましょう。頑張ってください!
次回、モーターを2個つなげて動かします。