今回は、ブラシレスモーターを動かしてみたいと思います。
ブラシレスモーターは、ブラシと整流子を持たないため、長寿命、高効率、高精度な制御、静音性、メンテナンス性の高さなどが特徴です。ただし、ESC(Electric Speed Controller)
という専用の制御装置が必要で、モーターとESCでそれなりの費用がかかります。
ブラシレスDCモーター
今回は、タミヤの「TBLM-02S」というブラシレスモーターをAmazonで購入しました。
6,000円弱します。結構、高価な買い物でした。


ブラシレスモーターは、ローター(回転子)に永久磁石、ステーター(固定子)にコイルが配置されています。ローターの位置を検出し、その位置に合わせてステーターのコイルに流れる電流を切り替えることで、回転を実現します。この電流の切り替えは、電子回路(インバーター回路)によって行われます。
下図のブラシレスモーターの場合は、外周のコイルに電流を流します。この時の電流の向きによりN極、またはS極の磁力が発生します。N極とS極は引き合い、同じ極同士(N極とN極、S極とS極)は反発します。これをインバーター回路により順番に切り替えることで、中心のローターが回転するという仕組みになっています。


ESC(Electric Speed Controller)
ESCもタミヤの「TBLE-04S」を購入しました。ブラシレスモーターと合わせて11,400円です。
安いものを探せばあると思いますが、今回はタミヤで揃えました。


ESCの信号線にPWM信号を流すことで接続したモーターを回転させることが出来ます。
ちなみに受信機コネクタの端子には、黒、赤、白のケーブルが繋がっており、黒はGNDですが、赤にVCCを繋ぐ必要はありません。これは受信機等への5V出力になっています。白が信号線でスピード制御のためのPWM信号の入力線になっています。

バッテリー
ここまできたらバッテリーもタミヤで揃えます。高い…


うーん。このコネクタは、直接接続できない…
バッテリーはT型コネクタ、ESCはタミヤコネクタになっている。


旧仕様だと変換コネクタ付きだったようですが、新仕様(2024年8月28日以降)は、変換コネクタが別売りになっておりカスタマーサービスで買わないといけないようです。
タミヤの純正品ではないですが、同じ用途の変換コネクタがあったのでこちらを購入しました。
あと 6.6V 2200mAhというのも少し独特ですね。(よくあるのは、3.7V、7.4V…)
DC充電器
通常の充電器は持っているのですが、タミヤのバッテリーに適合するものは持っていなかったので、新しく購入しました。タミヤ純正の充電器は、Amazonには無かったためハイテックの充電器を購入しました。



バッテリーのメインケーブル(T型コネクタ)とバランスコネクタケーブルをバッテリーと充電器間で繋ぎます。液晶の表示は、正直よく分かりませんでした。(充電中ということだけは分かる)
ESCテスターでブラシレスモーターを動かしてみる
とりあえずブラシレスモーターを動かしてみるということでテスターを使って駆動確認してみます。
以下のテスターを使いました。

モーターに取り付けたファンが勢いよく回転しました。
ただ、使い方が良くわからない・・・800μSよりも下は指定できないようです。
ここからは、Arduino UNO R3 を使って動かすように実験装置を作っていきたいと思います。
Arduino UNO R3 でブラシレスモーターを動かしてみる
さて、ここからは実際にArduino UNO R3 から ESC に信号を送ってブラシレスモーターを動かしてみたいと思います。
ブラシレスモーターにファンを取り付ける
まずは、モーターのブランケットを作成します。
※↑のテスターでも使用済みですが…

ブランケットを取り付けて、次にモーター軸にファンを取り付けます。
今回は、実験なのでイモネジなどでの固定はしていません。


最後にカバーを取り付けます。

Arduino UNO R3 にポテンショメータを繋ぐ
操作用のボリュームつまみタイプのポテンショメータを使います。
実際にはミニブレッドボードを使っていますが、ポテンショメータの真ん中の端子をArduinoのA0と繋ぎます。間には220Ωの抵抗を入れています。

これでポテンショメーターのつまみを回転させて、0 ~ 1023 のアナログ値に変換されて入力されます。

Arduino UNO R3 と ESC を繋ぐ
Arduino UNO R3 の D3(PD3)ピンとESCの信号線、GNDとESCのGNDを繋ぎます。

これで接続は完了です。
ブラシレスモーターを動かしてみる
ポテンショメーターからのインプットをESCへのPWM信号にして出力するようにスケッチを作ります。
/* BLDC_Motor_Ctrl2.ino
* Brushless Motor controll program ver 0.10
* by chikuma <https://chiukma-creative.com>
*
* last modified 5 July 2025 by chikuma
*/
#include <Wire.h>
#define POT_PIN A0 // Connect to the output wire of the Potentiometer.
#define ESC_PIN 3 // Connect to the ESC signal line. (PD3)
int pot_value; // Potentiometer input value. (0 - 1023)
int pwm_value; // ESC output PWM value (us)
#define ESC_MAX_PWM 250 // ESC PWM MAX value (us)
#define ESC_MIN_PWM 125 // ESC PWM MIN value (us)
#define ESC_NTR_PWM 125 // ESC PWM NEUTRAL value (us)
#define SHOW_PWM true // Display PWM on the serial monitor
uint8_t TCCR2A_FORWARD;
uint8_t TCCR2A_REVERSE;
/* setup code:
Initializes the serial port to communicate with the PC and
waits for input of the operating mode.
*/
void setup() {
Serial.begin(9600);
// Create and save a timer register value.
TCCR2A_FORWARD = TCCR2A;
TCCR2A_REVERSE = TCCR2A | 1 << COM2B0;
// Display the start message on the serial monitor.
Serial.println("Start the BLDC motor controll program via ESC...");
// initialize the pin mode etc.
pinMode(POT_PIN, INPUT);
pinMode(ESC_PIN, OUTPUT);
delay(1000);
}
/* main code:
Controls the ESC according to the manual mode.
*/
void loop() {
pot_value = analogRead(POT_PIN) - 511;
if (pot_value >= 0) {
if (TCCR2A != TCCR2A_FORWARD) {
TCCR2A = TCCR2A_FORWARD;
}
pwm_value = map(pot_value, 0, 511, ESC_MIN_PWM, ESC_MAX_PWM);
} else {
if (TCCR2A != TCCR2A_REVERSE) {
TCCR2A = TCCR2A_REVERSE;
}
pwm_value = map(pot_value * -1, 0, 511, ESC_MIN_PWM, ESC_MAX_PWM);
}
if (SHOW_PWM) {
if (TCCR2A == TCCR2A_FORWARD) {
Serial.print("FORWARD: ");
} else {
Serial.print("REVERSE: ");
}
Serial.println(pwm_value);
}
analogWrite(ESC_PIN, pwm_value);
delay(10);
// If an interrupt occurs, the operation mode is changed.
if (Serial.available() > 0) {
Serial.read();
while (Serial.available() > 0) {
Serial.read();
}
Serial.println("Exit the program.");
delay(1000);
exit(0);
}
}
C++少し複雑なことをしているので解説します。
ESCに出力するPWM信号のHIGHとLOWを反転させるためにタイマ2のレジスタを書き換えています。
PWM出力方法 出力ピン:PB3(D11) | PWM出力方法 出力ピン:PD3(D3) | 未使用 | 未使用 | タイマのモード設定 | |||||
---|---|---|---|---|---|---|---|---|---|
ビット | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
名前 | COM2A1 | COM2A0 | COM2B1 | COM2B0 | – | – | WGM01 | WGM00 | |
指定なし | 0 | 0 | 0 | 0 | – | – | 0 | 0 | 標準 |
トグル | 0 | 1 | 0 | 1 | – | – | 1 | 0 | CTC |
LOW | 1 | 0 | 1 | 0 | – | – | 0 | 1 | 通常PWM |
HIGH | 1 | 1 | 1 | 1 | – | – | 1 | 1 | 高速PWM |
今回は、ESCの信号線にD3(PD3)を繋いでいるので、反転させる場合はTCCR2Aの5ビットを1、4ビットを0に設定します。TCCR2A_FORWARD = 0b00000001(2進数)
… 正回転TCCR2A_REVERSE = 0b00100001(2進数)
… 逆回転
ポテンショなるメータの入力を-511~+511の幅に設定し、マイナスなら逆回転、プラスなら正回転にしています。

なお、ピンのPDとかPBとかの呼び方は、上記のようにD0~D7はポートC群として、D8~D13はポートB群に設定されていることからPDx、PBxと表現されています。(分かり難い…)
以上
コメント