ブラシレスモータをAruduinoで動かす①使い方を把握

2021/05/23

Arduino ブラシレスモータ

t f B! P L

ブラシレスモータを動かす試みです。

※ネット情報かき集めて動かしたものの、充分な制御には至りませんでした(少なくともこの記事を書いている時点では)。

以下はわかったところまでの記事ですのであしからず。


 目次:

経緯

以前DCサーボモータ(DC(Direct Current:直流))を調べていたところ、最近DC整流子モータは産業用に(特に新規には)あまり使われず、模型・ホビー用途が主流だとの情報に触れました。

(DCサーボモータの記事 →DCサーボモータをArduinoで動かす①とにかく動かす


ところが模型・ホビー用途ですらも、整流子モータに替わってブラシレスモータ(ブラシレスモータをDCモータと呼ぶかどうかは意見が分かれるようですが)も使われるようです。

少なくとも産業用でモータを扱うわたしは整流子ではないモータについても経験値を積まなくてはこの先不味いかもしれません。

ネットで動かしている例をいくつか見かけので、できるところまで動かしてどのように使うものかを把握します(部材も手ごろに入手できそうです)。


ブラシレスモータとは

DC整流子モータはブラシ+整流子によるメカニカルな電流切り替え機構を使うモータです。モータ外部から直流を与えながらも、内部で回転に連動して電流切り替えを行います。

ブラシレスモータは電流切り替えをセンサの回転検知+外部制御で実現してます。モータ外部からの直流を外部で切り替えして与える(つまり交流)ことになるので、原理的にAC(Alternating Current:交流)モータとも言えそうです。


そんな原理上、直流を繋げば動くDC整流子モータに対して、ブラシレスモータには周辺回路が必要です。

それでもブラシ+整流子は使えば使うほど摩耗することが嫌われるため(産業用の例では分解・粉塵の清掃・部品交換など定期メンテナンスを要します)、最近ではACモータやブラシレスモータが普及しているようです。


使用する器材

ネットで動かしている例を見かけ、意外とお手軽な価格だったのでAmazonで買い求めました。
内容物のプロペラからして模型飛行機(ドローン?)用に使う品のようです。
モータを動かしてみるだけならこれ一式と手持ちのArduinoおよび部材を加えて実現できそうです。

データシートはネットを探しても見つけられませんでしたが、恐らく模型飛行機?として暗黙の了解的な方法で動かすものなのでしょう。

図1.Amazon購入品のブラシレスモータ一式

図2.ブラシレスモータとESC

ブラシレスモータは一般的にESC(Electronic Speed Controller)なるモジュール(黄色。「30A」のラベルが貼られている)で駆動するようです。
このESCをArduinoで制御します。

器材接続

ブラシレスモータ(配線∶赤、黒、黄)↔ESC(配線∶青×3本)・・・区別なし
ESC(電源線:赤、黒)←安定化電源(DC12V、GND)・・・モータ駆動回路の電源
ESC(信号線:赤、橙、茶)↔OPEN、Arduino(D9)、Arduino(GND)・・・ESCを制御する。赤にArduino(5V)をつなぐ情報もありましたが、つながなくても動きます
可変抵抗10kΩ(3端子)↔Arduino(5V、GND、A0)・・・可変抵抗の抵抗分圧により、A0に入る電圧(5Vまで)で回転速度を調整するようにします
Arduino(USB)↔モバイルバッテリー(USB)・・・Arduinoの電源(パソコンで良い)
図3.全体を繋ぎました

モータは固定のため厚紙に穴開けてねじ止めしました(除湿剤のフタです)。
このモータは底部に対して周囲が回転しますので、固定せずに床に寝かせていると勢いよく転がり出します。

動かし方と注意

ESCについてデータシートも使い方情報もないので確証ありませんが、以下ネット情報漁りつつ動かした方法です。

  1. Arduinoをモバイルバッテリー(パソコン可)に繋ぐことで電源ON
  2. 安定化電源(DC12V)ON。可変抵抗でA0入力は5V(最大)とする
  3. キャリブレーション開始される(モータから電子音が響く)
  4. 適切なタイミング(電子音で判別)で可変抵抗を最小に絞る(A0入力最小)
  5. 適切なタイミング(電子音で判別)で可変抵抗を中間に絞る(A0入力中間)?
  6. 適切なタイミング(電子音が消えた後)で可変抵抗を最大方向に捻る
  7. モータが可変抵抗(A0入力の大きさ)に応じた回転速度で回転する

最初、可変抵抗による回転速度調整を省略して組みました。が、それではキャリブレーションを通せずにモータは動きませんでした。キャリブレーションを通すにはESCへの回転速度の最大、最小(、中間?)の入力が必要であるようです。

ただし、これで百発百中でキャリブレーションできて動き出すかというとそうでもなく、何となくうまくいかなかった時には安定化電源を入れ直して"2"からやり直しです。

キャリブレーションのどのタイミングで最大・最小を入力するのか(勘によるキャリブレーションです)、中間の入力というものが本当に必要なのか(一応、キャリブレーション後にモータが動きはするのですが、中間が最小に認識されている節があります)、色々と不明なままです。

Arduinoスケッチ

色々と不明なままではありますが、スケッチです。


#include<Servo.h> //ライブラリ「Servo.h」を呼び出します
int vrmpin = 0; // 変数「vrmpin」に”0”を代入
Servo motor; //「motor」なるオブジェクトを作成

void setup() {
  Serial.begin(9600); //9,600bpmでシリアルポートを開く
  motor.attach(9); //Digital 9番ピンをオブジェクト「motor」の出力に設定
  }

void loop() {
  int vrm = analogRead(vrmpin); //「vrmpin」(0番ピン(Analog))を「vrm」に読み込む
  vrm = map(vrm, 0, 1023, 0, 179); //「vrm」読み込み値を0~
  Serial.println(vrm); //「vrm」をシリアルで伝送
  motor.write(vrm); //オブジェクト「motor」に「vrm」を入力
}


このブログを検索

ブログ アーカイブ

自己紹介

にほんブログ村

QooQ