HomeMadeGarbage Loading

センサレス クローズドループ矩形波制御 その1 ーブラシレスモータ駆動への道2ー

ホーム
電子工作
Raspberry Pi
IOT
音楽
Home > 電子工作 > センサレス クローズドループ矩形波制御 その1 ーブラシレスモータ駆動への道2ー
すき 1
うんこ 0

前回はブラシレスモータをいじくりつつ、駆動ドライバ基板を製作して矩形波駆動でいわゆるオープンループ制御でのモータ回転を楽しみました。

ブラシレスモータ駆動への道 爆誕

 

ここではモータの回転をセンサレスでフィードバックするクローズドループ矩形波制御での駆動を目指します。

 

参考書籍

ここからは以下の電子書籍を参考に進めます。Kindle Unlimitedメンバーでしたら無料で読むことができます。

ブラシレスレスモータの制御方法が各種紹介されPICマイコンでの実例が記載されております。
原理説明も明確になされているのでかなり理解が深まりました。

書籍のChapter8 センサレス 制御(120 °通電方式) を参考に回転制御の実現を目指します。

 

モータ誘起電圧

ここではエンコーダなどの外部センサを用いずに回転位置を把握しながらの矩形波回転制御を目指します。

モータは前回に引き続き以下のセンサのないものを使用します。

 

センサレスの場合はブラシレスモータが回転したときに発生する端子の誘起電圧から回転位置を読み取る必要があります。

参考書籍のブラシレスモータ誘起電圧観測回路を製作し、実際の回転時の発生する電圧を観てみます。
以下が製作した誘起電圧観測用フィルタ回路です。

$v_u, v_v, v_w$でモータ端子の誘起電圧を観測します。

実動作時にはドライバによるPWMオン電圧がモータ端子には印可されますので、誘起電圧はフィルタを介して観測します。
参考書籍にならってフィルタのカットオフ周波数は1.78kHzとしました。
モータ回転制御時のPWM周波数は20kHzとしますので十分スイッチングの影響はカットされるはずです。

$v_n$は各端子間を抵抗で分圧してモータコイルの中間の電圧(中性点電圧)を観測します。

 

モータを電動ドライバで回してフィルタ回路を介して誘起電圧を観測してみました。

以下が観測波形。それぞれ120°位相が異なる電圧が観られました。

 

回転位置検出

次にモータに前回製作した駆動ドライバを接続した状態(電源はOFF)で電動ドライバでモータを回して、
誘起電圧$v_u$と中性点電圧$v_n$を観ました。

誘起電圧$v_u$と中性点電圧$v_n$と一致する点がコイルが永久磁石による磁束と直行せずに電磁誘導が起きない位置にあることを示しており、更にモータ端子の誘起電圧が$v_n$より大きいか小さいかでモータの位置を分類することができます。

 

フィルタ回路の出力をESP32のアナログ入力ピンに接続して、各誘起電圧と中性点電圧$v_n$を比較することでモータの回転位置を1周6分割で把握することができました。

 

各誘起電圧が中性点電圧$v_n$より大きければ1を出力し、各状態を分類することで6つの位置ステートに分けれました。

中性点との比較にはヒステリシスのあるコンパレータなどは用いず、ESP32アナログピンによるanalogReadで実施しました。
若干ノイズ的な比較出力もありますが$v_u > v_n、v_v < v_n、v_w > v_n$ならモータ位置①などと明確な場合分けによって6分割できました。
ステートの時間を観測すれば回転速度も把握できることになります。

以上、誘起電圧と中性点電圧比較によってモータの位置と回転速度を把握できるようになりました!

センサレス クローズドループ矩形波制御

いよいよモータ位置と回転速度に基づいて制御を実施します。

構成

ここでの駆動システムの構成は以下の通りです。

スイッチでモータの正転・逆転を変えれるようにしました。
またここではモータの回転速度ではなくドライバのハイサイドON時の20kHz PWMデューティを可変抵抗で指定するようにいたしました。

動作

制御の詳細説明の前に動作をご覧ください。

無事に回転制御できました!

可変抵抗による速度制御やスイッチによる正転・逆転切り替えも動作しました。

 

以下は動作時の誘起電圧$v_u$と中性点電圧$v_n$です。
スイッチングノイズの影響を受けておりますが、電動ドライバでモータを動かしたときと同様の波形で制御出来ております。

Arduinoコード

ESP32用に制作したプログラムを元に制御方法説明します。

 

モータ回転時の誘起電圧を検出できないと回転位置の把握ができないため、
コントローラ起動時にモータを少し回して誘起電圧を発生させています (L. 185-201)。

デュアルコアのcore0でモータの位置と速度を算出しています (L. 43-141)。
モータの位置ステートの切り替わり時にIO14をHIGHに立ち上げてIO12でそれを受けて割り込みでドライバを駆動するようにいたしました (L. 159)。

駆動するためのドライバのトランジスタON/OFFステートはスイッチ(IO39)のH/Lで正転用・逆転用に切り替えています (L. 80-116)。

回転速度rotTimeAve は各位置ステートの時間の平均で割り出しています (L. 128-136)。

ステートの切り替えの割り込みでドライバ駆動関数rot() (L. 210-263)が呼ばれます。
rotTimeAveの半分待った後 (L. 216) に位置ステートと正転/逆転に基づいたトランジスタON/OFF設定が実行されます。
位置ステートの時間の真ん中でモータが駆動して次の位置ステートに移行し回転が継続されます。

トランジスタのハイサイドONはledcWriteを用いて20kHz PWMで印可します。分解能は10ビット(0~1023)でオンデューティ設定します (L. 161-171)。
オンデューティは可変抵抗(IO13)で設定するようにしました (L. 224)。

 

おわりに

センサレス クローズドループ矩形波制御が実現できました。
モータの誘導起電力で回転位置や速度を判定しているため、低速では起電力が小さくモータを駆動できませんでした。

 

またここではモータを駆動するドライバのハイサイドトランジスタのPWMオンデューティを指定して制御しましたが、この場合モータの負荷によって速度は変わってしまいます。

次回は回転速度を指定するようにして、実回転速度からPWMオンデューティをコントロールするようにしたいと思います。

次の記事

センサレス クローズドループ矩形波制御 その2 ーブラシレスモータ駆動への道3ー

コメントはこちらから

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

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