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

Home > Advent Calendar > クローズドループ正弦波駆動 リベンジ ーブラシレスモータ駆動への道10ー
すき 1
うんこ 0

HomeMadeGarbage Advent Calendar 2022 |14日目

前回は “50日後にセンサレスベクトル制御してみたい俺” の時に実施したESP32を用いたブラシレスモータのセンサありベクトル制御について報告しました。

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

ここではクローズドループ正弦波駆動に再挑戦しましたので報告します。

 

 

ドライバ修理

50日後にセンサレスベクトル制御してみたい俺” の際にドライバを破壊してしまいましたので まずは修理しました。

 

やはりプリドライバが壊れており、部品交換で無事に治りました。

 

クローズドループ正弦波駆動

磁気エンコーダによってモータの回転位置を検知するクローズドループ正弦波駆動には以前挑戦しておりました。
しかしエンコーダによる回転位置を直接フィードバックしての回転がどうしてもうまくいかず若干変則的な方法で回転を実現させました。

クローズドループ正弦波駆動 その2 ーブラシレスモータ駆動への道6ー

エンコーダ検知遅延

50日後にセンサレスベクトル制御してみたい俺” の際に磁気エンコーダの値検知動作に50msecのディレイがあることに気づきました。

以前うまくいかなかったのはこのディレイのせいである可能性が高いので、今回はこの遅延をなくして実験を進めます。

構成

構成は以前と同様です。
ここでは可変抵抗は使用せず、BlynkレガシーアプリでBLEを介してスマホで変数調整しました。

 

システム概要

磁気エンコーダでロータの回転位置と回転速度を検知して、指定の回転速度との差分で正弦波電圧値をPI制御で算出します。
また正弦波の位相は検知したロータ位置を電気角にして使用します。

 

Arduinoコード

 

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

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

起動時に1周期分オープンループで回転させてロータ位置のオフセットを導出します (L. 172-199)。

ロータ位置のオフセット導出後はクローズドループで回転し続けます 。

オフセットを加味したモータのロータ位置rotData をデュアルコアのcore0で検出しています。
1周の分解能を14bitから10bit (1024)にしています (L. 60)。
モータ回転速度 rotSpeed を検知して、指定の回転速度 rotSpeedTarget との差分をPI制御して正弦波波高値  amp を算出します (L. 69-95)。

core1でロータ位置からモータの電気角 theta [rad] を算出。使用しているブラシレスモータのロータの極数は14 [7ペア]  (L. 203)。
BottunStateによって正転/逆転を判断してcore0で算出された波高値  ampで正弦波を生成します (L. 205-213)。

導出された正弦波をPWM変換してドライバを駆動します (L. 215-218)。

Blynkアプリで、モータ回転方向BottunStateと回転速度rotSpeedTarget 、PI制御の係数をBLEで受信します (L. 114-138) 。

 

動作

無事に正転反転動作もでき、PI制御の係数を調整して指定の回転速度への制動のとれた追従動作も確認できました。

 

おわりに

ここでは “50日後にセンサレスベクトル制御してみたい俺” によって気づいた磁気エンコーダの遅延を改善してクローズドループ正弦波駆動に再挑戦しました。

無事に回転動作を確認でき、リベンジすることができました。

今回の実験で正弦波駆動でブラシレスモータをかなり自由に動かせることがわかりました。
しばらくはクローズドループ正弦波駆動で色々楽しみたいと考えております。

次の記事

正弦波駆動の応用 ーブラシレスモータ駆動への道11ー

 

コメントはこちらから

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

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