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

Home > Advent Calendar > ESP32でベクトル制御 ーブラシレスモータ駆動への道9ー
すき 2
うんこ 0

HomeMadeGarbage Advent Calendar 2022 |12日目

50日後にセンサレスベクトル制御してみたい俺” と銘打って毎日少しずつモータの勉強を進めていたことを先日ブログにて報告させていただきました。

50日後にセンサレスベクトル制御してみたい俺 (前編)

50日後にセンサレスベクトル制御してみたい俺 (後編)

残念ながらセンサレスベクトル制御は達成できませんでしたが、磁気エンコーダで回転をセンシングしたベクトル制御による回転は実現できましたので報告させていただきます。

 

 

システム構成

回路構成は以下の通りです。

クローズドループ正弦波駆動の時の構成に電流センサを追加したのみです。
変数調整用にと可変抵抗を繋げていますがここでは使用せず、BlynkレガシーアプリでBLEで変数調整しました。

部品

 

センサありベクトル制御

システムの概要図は以下の通りです。

回転速度を指定してモータを制御します。
磁気エンコーダで回転速度とロータ位置を観測して、3相-2相変換や逆park変換時に使用します。

各PI制御のパラメータをBLEを介してBlynkレガシーアプリで調整して回転速度の応答性を改善しました。

 

コントローラのESP32はデュアルコアで使用し、以下のようにセンシングと回転制御を分担しました。

  • core0:電流センシング、磁気エンコーダからロータ位置と回転速度検出とPI制御、シリアル出力
  • core1:3相-2相変換、逆Park-Clarke変換、3次調波加算、PWM出力

 

 

動作

指定した回転速度に対して実速度がいい感じで追従しています。
負荷をかけて復帰する際にオーバーシュートが観られますのでパラメータはもう少し改善の余地があるかもしれません。

Arduinoコード

 

最新版のBlynkではBLEが使用できないので、以前のバージョンのBlynkレガシーを使用してBLE通信しています。

疑似正弦波を生成するためにドライバ駆動ピン(IO25~27)はledcWriteを用いて20kHz PWM出力します。分解能は10ビット(0~1023) (L. 194-202)。

起動の冒頭で電流センサの電圧を測ってオフセット値を取得します (L. 182-192)。
またモータをオープンループ正弦波駆動で一周させてモータの初期位置を設定します (L. 215-238)。

モータの回転位置・回転速度検出と電流センシングをデュアルコアのcore0で実施しています。
1周の分解能を14bitから9bit (512)にしています (L. 67)。
電流センサの電圧値から電流を算出します (L. 78-81)。
PI制御で回転速度の誤差からIqのターゲット値を算出 (L. 98-101)。

電流センサとエンコーダ位相のオフセット導出後はベクトル制御で回転し続けます (L. 244-337)。
3相-2相変換、逆Park-Clarke変換、3次調波加算、PWM出力を実施します。

ロータ位置から電気角を算出(使用しているブラシレスモータのロータの極数は14 [7ペア]) (L. 251)。

Blynkアプリで、モータ回転速度rotSpeedTarget、PI制御の各種係数をBLEで受信します (L. 140-172) 。

参考

おわりに

ここではESP32を用いたブラシレスモータのセンサありベクトル制御を楽しみました。

電流を管理して回転が制御できるようになったのは今後の人生において非常に有用であると考えます。

いつかセンサレスベクトル制御にも挑戦したいです。

次の記事

クローズドループ正弦波駆動 リベンジ ーブラシレスモータ駆動への道10ー

コメントはこちらから

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

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