Categories: 工作・開発

BLDCモーター用FOCドライバーを個人が自作、電流検出を作り直して公開

ロボットアームやジンバルのように、モーターを狙った角度で静かに止めたい場面がある。ブラシレスモーターをそこまで細かく操るには、回転子の位置を測りながら電流の向きを合わせ続けるFOC(磁界方向制御)という手法が要る。市販のFOCドライバーは手に入るが、中身を作り替えられるものは多くない。Sirojudin Munir氏は自作のドライバー基板を一から設計し直し、回路図から基板データ、ファームウェア、制御用のソフトウェアまでMITライセンスでGitHubに公開した。

「SF-Motion」と名付けたこの一式は、前作のドライバーを土台にしたものではなく、完全な新設計だ。本人は改良した箇所として、ハードウェア、電流検出、ファームウェア、通信の4つを挙げている。前作は何度も試行錯誤を重ねてようやく動いたと振り返る。

基板の中心にはSTMicroelectronicsのSTM32F405RGTを据える。TIのゲートドライバーDRV8323RHとMOSFETを6個並べてインバーターを組み、回転子の角度はams OSRAMの磁気エンコーダーAS5047Dで読む。モーター軸に取り付けた磁石の向きを基板の裏側から検出する仕組みだ。電流検出には0.01Ωのシャント抵抗と専用アンプINA240A1を3相それぞれに置く。ほかにCANトランシーバー、USB Type-C、電源用のXT30コネクターを2つ備える。電源は6〜24Vの直流に対応する。

使い始めの手順もリポジトリに書いてある。ファームウェアはSTM32CubeMXで周辺回路を設定し、VS CodeとPlatformIOで書き込む。基板をつないだらPythonのプログラムを走らせ、モーターの極対数を入力してから自動調整をかける。自動調整の工程で巻線の抵抗とインダクタンスを測り、磁気エンコーダーの位置合わせまで済ませる。ここで注意が要るのは回転方向で、校正中は反時計回りに回っていなければならない。逆に回るときはモーターの線を2本入れ替える。自動判別は今後の課題だとしている。

動かし方は電流制御、速度制御、位置制御、オープンループの4種類から選ぶ。監視用にPyQtで書いたGUIも付き、波形を見ながら調整できる。本人はまだ開発中で、版によってハードウェアもファームウェアも変わりうると断ったうえで、最初の試験では電源の電流制限を1Aに絞るよう繰り返し注意している。基板とエンコーダーとモーターが正しく動くと確認できるまでは、電圧も電流も上げるなという書き方だ。

関連情報

SF-Motion(GitHub)

I Built My Own BLDC FOC Driver From Scratch(YouTube)

FabScene編集部

FabScene編集部