ドローン制御の勉強をしてみようー4回目

4回目は「Arduino で ESC(Electronic Speed Controller)を使ってブラシレスモーターを制御する」の話です。

今回使用したパーツはこれ。

【ESC】メーカー不明(OPTO 30A 11.1V~14.8V)

【ブラシレスモーター】DJI 2212/920KV

【CPUボード】Arduino UNO R3

【その他】回転数コントロール用アナログボリューム

ESCとブラシレスモーターの接続はuvwの3本の線で接続します。適当に3本をつなげても問題ありません。意図している回転方向と違う場合は線を差し替えれば反転します。モーター内の3つの磁極をスムーズに変化させることにより軸を回転させていると私は認識しています。(私の知識はこんなものです。)

ESCにはモーターを回転させるための電源(ここではDC12Vを使用)と回転数をコントロールするためのPWM制御用の3つの入力ピン(GND, 5V, PWM信号)でArduinoと接続します。

回転数をコントロールするPWM信号は、20ms 程度の間隔で 幅1ms~2msのパルスをかけることによって行います。

1ms(1000us)が回転数0で2ms(2000us)が最大回転数となるようです。

ここで使用したESCは電源(ここではDC12V)を加えるときにだいたい1msのPWMパルスがかかっている状態でないとESCが正常に起動しませんでした。

正常に起動できた場合はリズムかるな音が1回だけしてなって止まりますが、正常に起動できない場合は耳障りな音が繰り返しなり続けました。音の鳴り方でエラーの種類がいくつかあるようです。

今回の接続はこんな感じです。

アナログボリュームはESCに出力するPWMのパルス幅を1ms~2msに調節するために使用しています。つまりそれはモーターの回転数の調整することになります。

次の動画ではPWM信号のピンにオシロスコープを接続してパルスを表示してみました。


ESCがあるおかげでサーボを扱う感覚でブラシレスモーターを扱えるようになる感じです。

そのため、ArduinoでESCを扱う最も簡単な方法は標準ライブラリのServo.hを使う方法です。

そのほか原始的な方法としてはPWM出力ピンにタイマー処理で20ms間隔で1ms~2msのパルスをI/O出力でHi/Lowすることでも行えます。

サンプルプログラムはネット上ですぐに見つけることができると思います。