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

Home > 電子工作 > クローズドループ正弦波駆動 その2 ーブラシレスモータ駆動への道6ー
すき 1
うんこ 0

前回は磁気エンコーダを用いたクローズドループ正弦波駆動で位置指定による回転追従動作を確認いたしました。

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

 

ここではクローズドループ正弦波駆動による回転速度を指定した回転動作を目指します。

 

クローズドループ正弦波による回転

以下が理解しやすい図でした。

 

正弦波の振幅を上げて回転トルクをあげて回転位置をフィードバックして正弦波の周期を制御します。

矩形波駆動の時にも参考した書籍も上図と同じフローでの正弦波駆動が紹介されていました。

 

コレを参考に磁気エンコーダでロータ位置を検知しつつ正弦波の振幅を調整してみたのですがうまく回転できませんでした。

エンコーダから回転スピード算出して正弦波周期を変えたり、エンコーダ値を正弦波の位相に対応させてフィードバックなどいろいろ試しましたがダメでした。

 

勉強

どうしてもうまくできないのでリフレッシュと理解を深めるために書籍を購入しました。

こちらの書籍の正弦波駆動も正弦波の振幅調整で回転速度制御が紹介されていましたが、正弦波の印可が半波のみで実施されていました。

全波 vs 半波

正弦波の印可方法は全波が良いのか半波が良いのか比較してみました。
全波と半波の正弦波をブラシレスモータの3相に120°位相をずらして印可します。

 

全波印可の方が明らかにスムーズにまわっています。半波は矩形波駆動とあまり変わっていない印象を受けました。

ここでは全波印可を採用します。

 

検討

書籍の方法がうまくいかないため別手法を考えます。
書籍によって使用しているモータやエンコーダの仕様が異なるので仕方のないことかもしれませんが
今さらモータ学習用キットを購入するのもシャクなので、独自に方法を探ります。

前回の位置指定を応用して、位置の指定を周期的に可変させて回転動作を保つ方法を検討しました。

 

可変抵抗で回転速度指定し、コントローラで回転位置をループで制御して回転させています。

正弦波の振幅は所望回転位置とエンコードの値の差でのP制御で自動で決定します。
高速になると差が大きくなるので必然的に振幅が上昇します。

起動時にオープンループで回転させてエンコーダのオフセット検出して、後のクローズドループ制御に利用しています。

上の動画ではエンコーダ1周の値を7分割して正弦波を生成している(使用しているブラシレスモータの極数が14 [7ペア])ため、負荷かかって周期がずれてもそのまま回転してエンコーダとの差で振幅上昇して過電流が流れる問題がありました。こちらは改善が必要です。

 

クローズドループ正弦波駆動による回転

先ほどの機構を改善してさらにBlynkアプリでBLEで回転を制御できるようにしました。

構成

構成は前回と同様です。

 

Arduinoコード

 

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

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

モータの回転位置rotData をデュアルコアのcore0で検出しています。
1周の分解能を14bitから9bit (512)にしています (L. 46)。

可変抵抗でモータの位置period を0~511で指定します  (L. 67)。

起動時に1周期分オープンループで回転させて位相のオフセットを導出します (L. 97-120)。
正弦波1周期はエンコーダの1周の分解能 512/7≒73としています(使用しているブラシレスモータのロータの極数は14 [7ペア])。

位相のオフセット導出後はクローズドループで回転し続けます (L. 122-158)。
オフセットを加味した指定の回転位置 iとエンコーダによる実際の位置の差diff を導出し (L. 123-126)、正弦波の振幅を係数Kをかけて算出します(L. 128, 129)。

エンコーダの値は7分割して使用しています(512/7≒73)。
これによって正弦波の周期からモータ回転がずれても過電流が流れることを回避しています。

U相はオフセットを加味した指定の回転位置 iとして、
V相とW相はそれぞれ120°づつ位相をずらします (L. 131-137)。

位相と振幅に従って正弦波を生成します (L. 140-146)。

ループのディレイ時間periodによって回転速度を制御します (L. 148)。

BottunStateによって正転/逆転を判断し。指定する回転位置 iのインクリメント/デクリメントを判断します (L. 150-157)。

Blynkアプリで、モータ回転方向BottunStateと回転速度period、正弦波振幅のPs制御係数KをBLEで受信します (L. 51-62) 。

 

おわりに

ついに若干変則的ではありますがクローズドループ正弦波駆動による回転制御を実現できました。

いろいろやってみた結論としては回転位置の検出及びフィードバックにはロータの磁極自体をセンスするホール素子の使用がベストと気づかされた。

しかしロータの磁極数や位置はモータによって異なるので、磁気エンコーダと後付け磁気センサによる方法は汎用性は高くなるとも言えます。

正弦波駆動によって低速回転をマスターできたので今後応用を考えたいと思います。

次の記事

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

コメントはこちらから

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

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