ArduinoとESCを使ってセンサーレスBLDCモーターを駆動-その1
◆まえがき
このところブラシレスモーターをArduinoを使ってあれこれ動かしていますが、本格的にやるにはESCを使った方が簡単なことに気付きました。そんなことで、AliExpeessにオーダーしておいたのが先日届いたので早速動かしてみました。
◆購入したESC
容量30AのESCが送料入れて何と600円台でした。パワーFETや制御回路などを自分で集めて作ったら、とてもこんな値段では作れません。それに内蔵しているファームに相当のノウハウがあるのでどう考えても勝ち目はありません。(この商品のAliExpressのページ)
・外観
コネクタは当方で付けた物です。
◆テスト回路
Arduinoを使ってパワーの設定と、回転数の表示が出来るようにしました。
ArduinoはESCから出ている5Vを使って動かしています。こうしておけば、ESCの電源投入と同時にサーボ信号の初期化が自動的に実行されて便利です。
・回転数検出回路の波形
上から順に、モーター電圧波形、コンパレーター入力(U1 Pin3)、コンパレーター出力です。
モーター波形は運転状況により変化し、途中で大きくDC成分がズレたりします。そんな理由から、ESCによってはこの図の回路では回転数信号の取り出しがうまく行かない可能性があります。
あと、この回転数検出回路で取り出しているのはモーターのコイルの駆動波形であって、実際のローターの位置(位相)ではありません。もちろん両者は磁気的にロックされているので1周期以上ずれることはありませんが、瞬間的には進み/遅れがあるはずで、精密なタイミングを議論する時には注意が必要です。
・実際の回路
このモーターはDVD-RWのスピンドルモーターです。
◆プログラム
20230630_BLDCmoterByESC_OLED.txt (BOM付きUTF-8)
回転数の検出にはピン割り込みを使っていますが、それ以外はやることをベタベタと書いただけなので判り易いと思います。
◆表示
・起動時
起動時にESCにサーボのキャリブレーション信号を送っている間の4秒間はこの表示です。
MagRot/Rev.はモーターのシャフトが1回転するのに要する磁気的な回転数。(つまり極数の1/2の値)で、この例では6なので12極のモーターです。この値を使ってrpmの値を換算しています。(値はプログラムの変数 POLE_N で指定)
・定常運転時
運転中はrpmで表した回転数とモーターのパワーの設定値を示します。
◆運転中の様子(ツイッターの動画)
ArduinoからESCを使ってBLDCモーター回すプログラムを作ってみた。パワーの設定値と回転数の表示付きなので使い易いと思う。
— ラジオペンチ (@radiopench1) June 30, 2023
動画は電圧12VでDVDのスピンドルモーターを回している様子、 pic.twitter.com/f7bVicd9H7
電源電圧12Vでモーター電流は0.5A程度でした。消費電力6Wですが、運転に伴い発生する風で冷却されるのでほとんど温度上昇はありませんでした。
◆まとめ
ESCを使うことでとても簡単にセンサレスのBLDCモーターを駆動することが出来ました。ドローンに使われているだけあって加速性能などが素晴らしいです。一方で起動トルクが小さいので、HDDのようにイナーシャが大きな負荷の場合は自力では起動することが出来ませんでした。(手で勢いを付けてやれば起動する)
DVDやHDDのスピンドルモーターはサイズが小さいのでパワーを出すには向いていない印象があります。しかし、ESCを使って運転すると高回転でもトルクに粘りがあり、けっこうな出力が出ている感じでした。モーター制御技術の勝利、って感じなんでしょうね。最近の家電などに多く使われる理由なんでしょう。
- 関連記事
-
- HDDのスピンドルモーターで小さなグラインダーを作る
- ArduinoとESCを使ってセンサーレスBLDCモーターを駆動-その2
- ArduinoとESCを使ってセンサーレスBLDCモーターを駆動-その1
- ArduinoでセンサーレスDCモーターを廻す-その2
- ArduinoでセンサーレスDCモーターを廻す