今回はブラシレスDCモータ(以降BLDCモータ)をArduinoを使って制御するための回路を自作して行きたいと思います。
今回、回してみるBLDCモータは下記のものです。
結論から言うと実用レベルでBLDCモータを動かすことはできませんでした。
しかし、BLDCモータの動作原理は理解することができましたので、忘れないようにまとめておきたいと思い、当記事を作成しました。
当記事が皆さんの参考になればと思います。
- BLDCモータの動作原理
- インバータの製作
- ゲートドライバの製作
- Arduinoのプログラム
- 結果
❶BLDCモータの動作原理
BLDCモータを回すためにはインバータ回路と呼ばれるMOSFET(等のパワー半導体)6個を組み合わせた回路が必要となります。
下記の図は
- MOSFET6個からなるインバータ回路
- BLDCモータの固定子として使用されているコイル3個
- 回転子として使用される永久磁石1個
の各ステップの動きと電流の向きを表しています。
この図から回転子(モータの軸)を一周回すにはインバータ内でONするMOSFETの組み合わせによって6ステップ必要ということがわかります。
(実際のBLDCモータは固定子のコイルを増やすことで1ステップでの回転角度を減らして滑らかに回転するようにしている。)
これらのインバータ内にあるMOSFET6個をゲートドライバを介してマイコンで適切にONすることでBLDCモータをコントロールできます。
➋インバータの製作
インバータ回路はBLDCモータを回すうえで重要な回路ですが構造はMOSFET等のパワー半導体6個で構成される簡単な回路になります。
製作の際にはMOSFETを取り換えられるようにしたり、オシロスコープ等を容易に繋げられるようにピンヘッダを付けたりしております。
また、MOSFETをヒートシンクに付けやすくするため1列に並ぶようにレイアウトしました。
取りついているMOSFETは家に落ちていた「K100E10N1」になります。
❸ゲートドライバの製作
以前、作成した汎用ゲートドライバを使用します。
作成時のブログ記事は下記のリンクから飛べますので気になる方は閲覧してみてください。
❹Arduinoのプログラム
下記にArduinoのプログラムを記述します。
プログラム自体は指定したMOSFETを順番にONできればいいだけなので非常に簡単です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
int UPput_pin1=3; int UPput_pin2=5; int UPput_pin3=6; int Loput_pin1=9; int Loput_pin2=10; int Loput_pin3=11; int Time = 10000; void setup() { pinMode(UPput_pin1,OUTPUT); pinMode(UPput_pin2,OUTPUT); pinMode(UPput_pin3,OUTPUT); pinMode(Loput_pin1,OUTPUT); pinMode(Loput_pin2,OUTPUT); pinMode(Loput_pin3,OUTPUT); } void loop() { digitalWrite(UPput_pin3,LOW); digitalWrite(UPput_pin1,HIGH); delayMicroseconds(Time); digitalWrite(Loput_pin2,LOW); digitalWrite(Loput_pin3,HIGH); delayMicroseconds(Time); digitalWrite(UPput_pin1,LOW); digitalWrite(UPput_pin2,HIGH); delayMicroseconds(Time); digitalWrite(Loput_pin3,LOW); digitalWrite(Loput_pin1,HIGH); delayMicroseconds(Time); digitalWrite(UPput_pin2,LOW); digitalWrite(UPput_pin3,HIGH); delayMicroseconds(Time); digitalWrite(Loput_pin1,LOW); digitalWrite(Loput_pin2,HIGH); delayMicroseconds(Time); } |
プログラムを少し改良して1周回転したら1秒止まるプログラムを作成しました。使用したBLDCモータは6ステップ×8回で1周回転することがわかりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
int UPput_pin1=3; int UPput_pin2=5; int UPput_pin3=6; int Loput_pin1=9; int Loput_pin2=10; int Loput_pin3=11; int Time = 10000; void setup() { pinMode(UPput_pin1,OUTPUT); pinMode(UPput_pin2,OUTPUT); pinMode(UPput_pin3,OUTPUT); pinMode(Loput_pin1,OUTPUT); pinMode(Loput_pin2,OUTPUT); pinMode(Loput_pin3,OUTPUT); } void loop() { for(int i=0; i<7; i++) { digitalWrite(UPput_pin3,LOW); digitalWrite(UPput_pin1,HIGH); delayMicroseconds(Time); digitalWrite(Loput_pin2,LOW); digitalWrite(Loput_pin3,HIGH); delayMicroseconds(Time); digitalWrite(UPput_pin1,LOW); digitalWrite(UPput_pin2,HIGH); delayMicroseconds(Time); digitalWrite(Loput_pin3,LOW); digitalWrite(Loput_pin1,HIGH); delayMicroseconds(Time); digitalWrite(UPput_pin2,LOW); digitalWrite(UPput_pin3,HIGH); delayMicroseconds(Time); digitalWrite(Loput_pin1,LOW); digitalWrite(Loput_pin2,HIGH); delayMicroseconds(Time); } delay(1000); } |
紹介したプログラムは変数「time」の値で回転速度を決定しています。
下記に紹介するプログラムにて変数「time」の値を可変抵抗器で変更し、BLDCモータの回転速度をコントロールすることができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
const int UPput_Pin1=3; const int UPput_Pin2=5; const int UPput_Pin3=6; const int Loput_Pin1=9; const int Loput_Pin2=10; const int Loput_Pin3=11; const int InPin = A0; void setup() { Serial.begin(9600);//シリアルモニターを使うための設定 pinMode(UPput_Pin1,OUTPUT); pinMode(UPput_Pin2,OUTPUT); pinMode(UPput_Pin3,OUTPUT); pinMode(Loput_Pin1,OUTPUT); pinMode(Loput_Pin2,OUTPUT); pinMode(Loput_Pin3,OUTPUT); } void loop() { int time = analogRead(InPin); time = map(time, 0, 1023, 500, 16000); Serial.println(time); digitalWrite(UPput_Pin3,LOW); digitalWrite(UPput_Pin1,HIGH); delayMicroseconds(time); digitalWrite(Loput_Pin2,LOW); digitalWrite(Loput_Pin3,HIGH); delayMicroseconds(time); digitalWrite(UPput_Pin1,LOW); digitalWrite(UPput_Pin2,HIGH); delayMicroseconds(time); digitalWrite(Loput_Pin3,LOW); digitalWrite(Loput_Pin1,HIGH); delayMicroseconds(time); digitalWrite(UPput_Pin2,LOW); digitalWrite(UPput_Pin3,HIGH); delayMicroseconds(time); digitalWrite(Loput_Pin1,LOW); digitalWrite(Loput_Pin2,HIGH); delayMicroseconds(time); } |
❺結果
BLDCモータを回転させることはできましたが、電流消費量が多すぎるため実用性に欠ける結果となりました。
インバータ及びBLDCモータに電源を接続し作動させると、大きい電流が流れすぎるため1.5V以上の電圧をかけることを断念しました。
1.5Vを入力時の電流量は5.2Aで7.8W消費しておりました。
原因としてはスイッチングスピードが遅いことやインバータからBLDCモータに入力される電力が完全な三相交流波形になっていないことが上げられるかと思います。
次回は三相交流波形でのBLDCモータのコントロールに挑戦してみたいと思います。