SimpleFOC ライブラリの勉強1
趣味のAliExpressサーフィンをしていましたら面白いものを見つけたので購入してみました。
ESP32ベースのブラシレスモータコントローラとエンコーダ付きモータを購入していじってみましたので報告させていただきます。
目次
購入品
コメはなくとも… pic.twitter.com/qZxaykGt2h
— HomeMadeGarbage (@H0meMadeGarbage) September 2, 2024
Makerbase esp32デュアルSimpleFOCシールド
2個のブラシレスモータを制御できるESP32ベースのコントローラ
モータ2個分の駆動ドライバはもちろんのこと電流センサも搭載されておりこのコントローラでブラシレスモータ駆動の勉強ができそうと考えすぐに購入しました。
以前、ディスクリート部品を組み合わせて自身でもESP32ベースのブラシレスモータ駆動システムは構築したのですが、このコンパクトなコントローラで改めて勉強してみようと思います。
参考資料
Makerbase社製のコントローラでマニュアル等ドキュメントも充実しております。
・サンプルコード
SimpleFOC Arduinoライブラリをベースに本コントローラ向けに各種制御用サンプルコードが用意されている。
Makerbaseジンバルモーター2808,エンコーダ付き
磁気エンコーダ AS5600 が搭載
SimpleFOCライブラリ
コントローラのサンプルコードには SimpleFOC Arduino ライブラリ が採用されておりました。
せっかくなのでここでは購入したコントローラを通してSimpleFOCライブラリの勉強をしちゃおうと思います。
SimpleFOCライブラリの理解と同時にあらためてベクトル制御の理解も深め、最終的には自作のドライバにもSimpleFOCライブラリを活用し制作活動に寄与させたいと思っています。
ここでは SimpleFOC library ver. 2.3.4を導入した。
オープンループ回転速度制御
早速サンプルコードの1個目を試してみました。
1_open_loop_velocity_example.ino
これでArduino-FOCライブラリ勉強するわ
まずは基本のキ オープンループで回転を堪能 pic.twitter.com/WmjYhugGHL— HomeMadeGarbage (@H0meMadeGarbage) September 10, 2024
モータのペア極数とドライバを駆動するPWM出力ピン、動作モードを指定して、回転速度を制御するコードです。
Arduinoのシリアルモニタから回転速度を入力指定。
整えられたSimpleFOCライブラリによって設定やリミット指定などが容易に可能となっております。便利!!
購入したモータはコントローラで駆動できなかったので(おそらくパワトラの能力不足)、手持ちの小さいブラシレスモータを使用しました (ペア極数:7)。
3相のPWM出力の周期を変えて回転スピードをオープンに変えているだけなのでモータがかなり熱くなるので要注意。
motor.voltage_limitでモータ印可電圧を下げるといいかも。ここでは3Vにした。
参考動画:Example 1 Dual Motor Open Loop
オープンループ回転角度制御
2_open_loop_position_example.ino
Arduino-FOC
オープンループ 回転位置指定モード pic.twitter.com/Zxsa9ypvhX— HomeMadeGarbage (@H0meMadeGarbage) September 10, 2024
Arduinoのシリアルモニタから回転角度を入力指定。
参考動画:Example 2 Dual Motor Open Loop
磁気エンコーダテスト
モータ載せ替えても磁気エンコーダ AS5600無事動作
I2C設定も回転位置角度(ラジアン)変換も簡単な関数で出来た。
SimpleFOCライブラリ凄く便利かもしれない pic.twitter.com/4HUyP3M8U0— HomeMadeGarbage (@H0meMadeGarbage) September 10, 2024
磁気エンコーダAS5600とI2C通信して回転位置を角度[ラジアン]で得るコードです。
エンコーダについても関数が充実していて簡単な設定で使用できております。本当に楽ですね。
購入したエンコーダ付きのモータがでかくてコントローラで駆動できなかったので、手持ちのエンコーダ交換できそうなカワイイ ブラシレスモータに載せ替えました。
交換したブラシレスモータ(ペア極数:7)は以下
参考動画:Example 3 I2C Dual Encoder Test
クローズドループ回転速度制御
4_close_loop_velocity_example.ino
磁気エンコーダによるクローズドループ制御
PIDパラメータはサンプルコードのまま
いや簡単に出来てしまった。 pic.twitter.com/UGdLndzVQD— HomeMadeGarbage (@H0meMadeGarbage) September 10, 2024
指定した回転速度に対してエンコーダで検出した速度とのPID制御がなされています。
PIDパラメータはサンプルのまま変更しませんでした。
あっというまに磁気エンコーダによるクローズドループ制御ができてしまいました。
SimpleFOCライブラリ まじハンパないね。卍
参考動画:Example 4 Dual Motor Closed Loop
クローズドループ回転角度制御
5_close_loop_position_example.ino
クローズドループ 回転角度指定 pic.twitter.com/xXj3U9FoYX
— HomeMadeGarbage (@H0meMadeGarbage) September 10, 2024
回転角度[ラジアン]をシリアルモニタで指定して回転。
サンプルではP制御によって角度追従がなされていました。
参考動画:Example 5 Dual Motor Closed Loop
クローズドループ追従動作
6_two_motors_control_each_other.ino
クローズドループ
オシャレな追従駆動 pic.twitter.com/DyWLSJoxw1— HomeMadeGarbage (@H0meMadeGarbage) September 10, 2024
コードではトルクモードで駆動されている。
2つのモータの角度差からトルク制御(ここでは電圧印可)して、それぞれ追従させている。
面白いこれ他方のモータエンコーダをIMUにしてすぐにSHISEIGYOに応用できそうだなぁ。
参考動画:Example 6 Dual Motor Position
おわりに
ここではAliExpressで購入したコントローラを用いてSimpleFOCライブラリの学習を開始してみました。
まだ初歩の初歩ですが既にSimpleFOCの有用性をビシビシ感じております。
過去にESP32を用いてブラシレスモータの駆動システムを手組して1からプログラミングして駆動を勉強した経験からも、このありがたさはひとしおに感じるわけです。
引き続き勉強していきます。
また報告いたしますね。
情報をご提供いただきありがとうございます。
1点、サンプルを実行していく中で「6_two_motors_control_each_other.ino」の一部コメントを外す必要があることがわかりました。
この先に参照される方のためにも注記いただくのが良いかと思います。ご検討ください。
対象行:31-32行
対応:コメント指定(//)を削除する。
理由:31行目に”If the simplefoc library version is 2.20 and above, uncomment these two lines”
との記述があり、現バージョンではコメントを外す必要があるとのことのようです。
ありがとうございます!
確認の上こちらのコメントを引用させていただきます。