~適当な工作情報を投げるブログ

ゲーム、音楽なども作ってるよ~



低分解能ロータリーエンコーダを用いた場合の, モータ回転角度推定と補間

 ACサーボモータなどで電動機の回転子角度を検出したいとき, 最近のモータであれば高分解能ロータリエンコーダが接続されているため, 困らないだろうと思う。

しかし, 古い電動機を使用するとロータリエンコーダが極端に低分解能であったり, そもそもロータリエンコーダがついてなくて磁極位置検知用のホールセンサが3つだけついてるということもある。

このような場合, 最大トルク制御を目的にしてベクトル制御をするにしても, 回転子角度の検出分解能が低すぎて高効率駆動が見込めない。(実際には, 多少検出角度の分解能が低くてもベクトル制御はできはする)

 

 そこで, 現在所有している同期電動機(IPMSM)をプラントとし, 3相ホールセンサのみで実用に堪える回転子角度の検出制御を考える。

 

f:id:Kamomesan:20200108125255j:plain

4極 IPMSM

画像出典: SPMモータ(ブラシレスDCモータ) - haratkhr技報

 

所有しているモータは4極のIPMSMで, ホールセンサが 60度 ごとに配置されている。

ホールセンサはラッチタイプのもので. 回転子磁極によりハイかローが出力される。

A B Cのホールセンサの状態により, 4極モータの場合は 30度 間隔で回転角度が把握できる。

30 度間隔ということは, 1回転あたり 12 回しか角度が取得できない。

ここでは簡単のために半回転で角度が 0~2π [rad] であるとし, それ以上は値はループすることとして, 一回転 6回 ということで話を進める。

つまり分解能は 60度 (1.08 [rad]) であり, お世辞にも高いとは言えない。

 

f:id:Kamomesan:20200108130739p:plain

ホールセンサから取得できる角度

 

 今回は, テスト条件としてモータ回転子は 0[s] から角加速を開始し, 3 [s] のタイミングで負荷が接続され回転数が急峻に低下する上図のようなモデルをMATLAB Simulink上に用意した。

実際にはこののこぎり山が2回で回転子が1回転するが, 先述したとおりのこぎり山1回で回転子が一回転することとする。

図を見ると, ベクトル制御のプロであればまともな制御は厳しいということが何となくわかると思う。(現象としては, d q軸電流にのこぎり波状のリップルが重畳する)

このようなモータをちゃんと制御するため, 角度検出を滑らかにするアルゴリズムの考案を急いだ。

 

f:id:Kamomesan:20200108131942p:plain

理想的な検出角度 (点線)

 理想的には, 上図点線のような角度が検出される。

理想的な角度(点線)と低分解能センサから得られる角度(実線)の差異を補完する制御系が必要となる。

 

 低スペックなMCUを使用することを想定するため, 複雑なアルゴリズムを用いず補間を行う必要がある。

いろいろ考えたところ, 簡易なアルゴリズムで補間が実現できた。

ホールセンサからの角度情報が変更される度にMCUでは割込みが走るようにし, ある時刻 t でかかった割込みからタイマをカウントアップ開始し, 次の割込みでカウンタ値の読み取りとリセットを行い 角度が 1回 切り替わる時間 Δt を計測する。

Δt の逆数をとることで回転子の回転速度モデルと等価になる。

この回転速度を比例定数としてセンサ値に1次時間関数 もしくは 2次時間関数を加算する。

つまり, 回転速度モデルを 1/Δt とすると, センサ値のステップ状の関数に割込み毎にセンサ値を初期値として初期化し,  それ以降は x(t)/\Delta{}tx^2(t)/\Delta{}t を加算する。

このような単純なオブザーバを用いて補間を試みた。

 

このようにして予測補間を行った波形は下図 赤線 のようになる。

 

f:id:Kamomesan:20200108134339p:plain

補間を行った結果 (赤線)

 t = 0 ~ 0.5 [s] の期間では, センサの値は不変であるためどちらに回転するのかわからず, 予測は行えていない。しかし, 一度 60度 が検出されるとそれ以降は補間がかかり, ほぼ理想的な回転角度 (点線) に一致していることがわかる。

外乱により速度が急峻に低下した 3 [s] のタイミングでも予測に大したズレは無く, 補間できていることがうかがえる。

理想角度とセンサ角度, 補間角度の差から誤差をプロットしたものが下図である。

 

f:id:Kamomesan:20200108134944p:plain

回転角度誤差

 黒線はオブザーバなしの, センサ値と理想値の誤差である。

常に ±1 [rad] ほどののこぎり波が重畳していることがわかる。

この状態でベクトル制御を行うと, モロに dq軸電流にこれが乗ってしまう。

赤線はオブザーバにより補間した値と理想値の誤差である。

0~0.5 [s] の期間では補間が行われず黒線と一致しているが, 一度角度が検出されるとそれ以降の誤差は黒線より小さくなっていることがわかる。

回転が安定した状態で, 誤差が大きいところでもオブザーバ無しの場合にくらべておよそ 1/10 の誤差に留められている。

3 [s] の外乱のタイミングでもそれほど推定がずれておらず, すぐに理想値付近に復帰している。

 

 全体のブロックダイアグラムは下図。

 

f:id:Kamomesan:20200108140051p:plain

ブロックダイアグラム

 

 すみません, 見やすいように整形するのはめんどくさくてやってません。<(_ _)>

 

 つい昨日 MATLAB ライセンスを購入しました。

学校の MATLAB とバージョン違いでちょっと使い心地が違いますね。

しかし, いろいろな部分のバグは取れてる模様。いいですね!

 

ではでは。