SimpleFOC ライブラリの勉強1

Home > 電子工作 > SimpleFOC ライブラリの勉強1
すき 0
うんこ 0

趣味のAliExpressサーフィンをしていましたら面白いものを見つけたので購入してみました。

ESP32ベースのブラシレスモータコントローラとエンコーダ付きモータを購入していじってみましたので報告させていただきます。

購入品

 

Makerbase esp32デュアルSimpleFOCシールド

2個のブラシレスモータを制御できるESP32ベースのコントローラ

 

モータ2個分の駆動ドライバはもちろんのこと電流センサも搭載されておりこのコントローラでブラシレスモータ駆動の勉強ができそうと考えすぐに購入しました。

以前、ディスクリート部品を組み合わせて自身でもESP32ベースのブラシレスモータ駆動システムは構築したのですが、このコンパクトなコントローラで改めて勉強してみようと思います。

ESP32でベクトル制御 ーブラシレスモータ駆動への道9ー

参考資料

Makerbase社製のコントローラでマニュアル等ドキュメントも充実しております。

マニュアル

回路図
 NMOSゲートドライバ  EG2133

サンプルコード
 SimpleFOC Arduinoライブラリをベースに本コントローラ向けに各種制御用サンプルコードが用意されている。

YouTubeチャンネル

Makerbaseジンバルモーター2808,エンコーダ付き

磁気エンコーダ AS5600 が搭載

 

 

AudiostockでBGM・効果音を販売中!

SimpleFOCライブラリ

コントローラのサンプルコードには SimpleFOC Arduino ライブラリ が採用されておりました。

せっかくなのでここでは購入したコントローラを通してSimpleFOCライブラリの勉強をしちゃおうと思います。

SimpleFOCライブラリの理解と同時にあらためてベクトル制御の理解も深め、最終的には自作のドライバにもSimpleFOCライブラリを活用し制作活動に寄与させたいと思っています。

ここでは SimpleFOC library ver. 2.3.4を導入した。

オープンループ回転速度制御

早速サンプルコードの1個目を試してみました。
1_open_loop_velocity_example.ino

モータのペア極数とドライバを駆動するPWM出力ピン、動作モードを指定して、回転速度を制御するコードです。
Arduinoのシリアルモニタから回転速度を入力指定。

整えられたSimpleFOCライブラリによって設定やリミット指定などが容易に可能となっております。便利!!

購入したモータはコントローラで駆動できなかったので(おそらくパワトラの能力不足)、手持ちの小さいブラシレスモータを使用しました (ペア極数:7)。

 

3相のPWM出力の周期を変えて回転スピードをオープンに変えているだけなのでモータがかなり熱くなるので要注意。
motor.voltage_limitでモータ印可電圧を下げるといいかも。ここでは3Vにした。

参考動画:Example 1 Dual Motor Open Loop

オープンループ回転角度制御

2_open_loop_position_example.ino

Arduinoのシリアルモニタから回転角度を入力指定。

参考動画:Example 2 Dual Motor Open Loop

磁気エンコーダテスト

3_dual_as5600_test.ino

磁気エンコーダAS5600とI2C通信して回転位置を角度[ラジアン]で得るコードです。

エンコーダについても関数が充実していて簡単な設定で使用できております。本当に楽ですね。

 

購入したエンコーダ付きのモータがでかくてコントローラで駆動できなかったので、手持ちのエンコーダ交換できそうなカワイイ ブラシレスモータに載せ替えました。

交換したブラシレスモータ(ペア極数:7)は以下

 

参考動画:Example 3 I2C Dual Encoder Test

クローズドループ回転速度制御

4_close_loop_velocity_example.ino

指定した回転速度に対してエンコーダで検出した速度とのPID制御がなされています。
PIDパラメータはサンプルのまま変更しませんでした。

あっというまに磁気エンコーダによるクローズドループ制御ができてしまいました。
SimpleFOCライブラリ まじハンパないね。卍

参考動画:Example 4 Dual Motor Closed Loop

クローズドループ回転角度制御

5_close_loop_position_example.ino

回転角度[ラジアン]をシリアルモニタで指定して回転。
サンプルではP制御によって角度追従がなされていました。

参考動画:Example 5 Dual Motor Closed Loop

クローズドループ追従動作

6_two_motors_control_each_other.ino

コードではトルクモードで駆動されている。
2つのモータの角度差からトルク制御(ここでは電圧印可)して、それぞれ追従させている。

面白いこれ他方のモータエンコーダをIMUにしてすぐにSHISEIGYOに応用できそうだなぁ。

参考動画:Example 6 Dual Motor Position

おわりに

ここではAliExpressで購入したコントローラを用いてSimpleFOCライブラリの学習を開始してみました。

まだ初歩の初歩ですが既にSimpleFOCの有用性をビシビシ感じております。
過去にESP32を用いてブラシレスモータの駆動システムを手組して1からプログラミングして駆動を勉強した経験からも、このありがたさはひとしおに感じるわけです。

引き続き勉強していきます。

また報告いたしますね。

次の記事

SimpleFOC ライブラリの勉強2

「SimpleFOC ライブラリの勉強1」への2件のフィードバック

  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”
    との記述があり、現バージョンではコメントを外す必要があるとのことのようです。

    1. ありがとうございます!
      確認の上こちらのコメントを引用させていただきます。

コメントはこちらから

メールアドレスが公開されることはありません。コメントのみでもOKです。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください