mbedからブラシレスモーターを回すための練習

BLDCmotor_esc1.jpg

最近は子供も外で遊ぶことも少なくなり、もはやラジコンカーとかの業界も廃れているのかと思いきや
久しぶりに見てみると、「外で遊ぶ大きいお友達向け」の商品が充実していました・・・。
中でも地上を走るラジコンカーより、空を飛ぶラジコンヘリやマルチコプター(クラッドコプター、ドローン)が隆盛しており
カメラを搭載して自由に空撮もできるというスグレモノらしい。
技術的には「ブラシレスモーター」をマイコンから制御し、
左右上下の移動と加速度センサーやGPSを使用して水平出しを行っているので
やる気とお金と時間さえあればmbedでも作成は難しくないかと思います。
私は学生時代にあまり「現実世界で動くもの」を作成したことがなかったので、ちょっとだけ触れてみることにしました。


BLDCmotor_motor.jpg
BLDCmotor_omote.jpg

まず購入したのはamazonで売っているそこらへんのマルチコプター用のモーター。
DJI Phantom2とかいうやつにデフォルトでくっついてくるやつだそうです。
(CWとCCWがあったので安いほうを買いました)

次に、マイコンからブラシレスモーターを制御する回路を自作することに。
インターネット上で調べてみると素晴らしい回路図と解説を掲載されているページが見つかりましたので
そちらを参考にさせていただきました。
▽三相ブラシレスモータを回す + VVVFってどんな感じ
http://blogs.yahoo.co.jp/kazu_kazu_souri/37629720.html
しかし、パワーMOSFETの特性値などわかるはずもなく、秋月電子でPch MOSFETとNch MOSFETを
それなりの数それなりの値段で購入し、上記ページで記載されていた回路図に似せて
てきとーに実装!!

使用した部品:

BLDCmotor_ura.jpg

上記だと1個作るのにだいたい600円近くかかります。
おまけにクオリティは・・・。

この通り。(※結果には個人差があります)
おとなしく表面実装パーツが半田付けされている出来合えのものを買ったほうがよさそうですが、
今のところマイコンから簡単にブラシレスモーターを回すような基板は販売されていません。
たとえされていたとしても、
私の目に入らなければそれは販売されていないのと同じです!(暴論)

ルネサスの「動くモノ開発プロジェクト」?に期待しています。


さて、気を取り直して
mbed(Nucleo)に6本(各相High,Low)とGNDを接続し、
作成した基板を5V電源に接続し、
mbedからPWM信号を出力します。
使用したコードは下記の通り。
2000us(2ms)ごとにフェーズを切り替えて、3.3Vの75%の出力を順番に投げているだけです。

#include "mbed.h"
DigitalIn btn(USER_BUTTON);
DigitalOut led(LED1);
PwmOut AH(D2);
PwmOut AL(D3);
PwmOut BH(D4);
PwmOut BL(D5);
PwmOut CH(D6);
PwmOut CL(D7);
#define D 2000
#define W 2000
#define P 2000
void Lall(){
	AH = 0;
	AL = 0;
	BH = 0;
	BL = 0;
	CH = 0;
	CL = 0;
}
void pinH(PwmOut p1, PwmOut p2, PwmOut p3){
	p1 = 0.75f;
	p2 = 0.75f;
	p3 = 0.75f;
}
void phase1A(){
	Lall();
	wait_us(W);
	pinH(AH, BL, CL);
	wait_us(D);
}
void phase2A(){
	Lall();
	wait_us(W);
	pinH(AH, BH, CL);
	wait_us(D);
}
void phase3A(){
	Lall();
	wait_us(W);
	pinH(BH, AL, CL);
	wait_us(D);
}
void phase4A(){
	Lall();
	wait_us(W);
	pinH(BH, CH, AL);
	wait_us(D);
}
void phase5A(){
	Lall();
	wait_us(W);
	pinH(CH, AL, BL);
	wait_us(D);
}
void phase6A(){
	Lall();
	wait_us(W);
	pinH(AH, CH, BL);
	wait_us(D);
}
int main() {
	AH = 0;
	AL = 0;
	BH = 0;
	BL = 0;
	CH = 0;
	CL = 0;
	AH.period_us(P);
	AL.period_us(P);
	BH.period_us(P);
	BL.period_us(P);
	CH.period_us(P);
	CL.period_us(P);
	while(btn);
	led = 1;
	wait(1.5);
	while(btn){
		phase1A();
		phase2A();
		phase3A();
		phase4A();
		phase5A();
		phase6A();
	}
	led = 0;
}

BLDCmotor_esc2_nch_fet.jpg
BLDCmotor_esc2_pch_fet.jpg

結果として、確かにモーターは回りました。
少し駆動がガクガクして脱調気味ですが、このあたりは矩形波駆動というのが関係しているのでしょう・・・。
すごいです。
私でも「てきとーに組んだ回路」でブラシレスモーターを回すことができました!
ただし、MOSFETはもくもくと煙をあげながら、30秒弱でお亡くなりになりました。


Nch MOSFET側は特に問題ありません。
Pch MOSFET側に無理があったようで、ドレインの金属部分に焦げ跡が見られます。
お亡くなりになったPch MOSFETはただの0.2Ωの抵抗に進化したようで、
その後電圧をかけても何の応答もしなくなりました。
貫通電流は流れていないはずですが、MOSFETの特性をそろえずに駆動させたのが仇になったようです。
基本的にMOSFETはゲートにかける電圧が低いと発熱が大きくなるようです。
また、高速で駆動する場合はスイッチのOn時間とOff時間は本来揃えるべきとのこと。
おそらくこの辺りが関係しているのでしょう・・・。
だが私は諦めんぞ・・・単価1500円以下の自作のブラシレスESCを作るまでは!


コメントを残す