Download - Sensorless BLDC모터를 구동해보자!! 27 Sensorless BLDC모터를 구동해 보자! 을 보시면 에서 봤던 것처럼 코일에 전류가

Transcript

26 Devicemart Magazine

PROJECTS TO BUILD

1 BLDC(Brushless DC electric motor)란?

BLDC란무엇일까요??약자를풀어서읽어보면,

Brush가없는DC모터인것이분명합니다.그렇다면일반DC

모터와는무슨차이가있길래Brush를왜없앴을까요?다시

옛날에가지고놀던미니카의DC모터를떠올려보겠습니다.

<한참달리고나면모터가엄청뜨겁습니다.약간의탄내도올

라옵니다.모터를뜯어보니Brush가탄게분명한것같습니

다.이걸갈아줘야다시달릴수있을것같습니다.>다들미니

카를한번쯤다뤄봤다면이와같은일을겪었을것입니다.

그렇습니다.DC 모터의 단점은 Brush입니다.소음이많고,

일정시간이되면갈아줘야하기때문입니다.이와같은단점

을 없앤 것이 BLDC(Brushless DC electric motor)인것입

니다.그렇다면구조는어떻게다른지살펴보겠습니다.

<그림1-1>에서볼수있듯이,DC모터의경우회전체가코일

인반면,BLDC모터는자석자체가회전하는회전체의모습입

니다.그러므로구조상Brush가필요없어지게된것입니다.

그렇다면실제BLDC의모습은어떻게생겼을까요?

안녕하세요!필자는엔지니어로써막발을들여놓은지

얼마되지않아,많은것을배우고있는‘왕초보’입니다!!

이번에처음으로SensorlessBLDC모터구동에대한글을쓰게

되었습니다.아주간단하게SensorlessBLDC모터를구동하는방

법에대해글을써볼까합니다.부족한점이많겠지만,같이열심

히배워보도록합시다.

처음SensorlessBLDC모터를손에쥐고.구동하려하니막막

할따름입니다.이녀석을어떻게구동시켜야할까?과연구동시

킬수있을까...?하는걱정도들었습니다.

사실왕초보인필자는어릴때가지고놀던미니카에들어가는

DC모터를뜯어본기억이전부인데말입니다.

학교앞문구점앞에설치된미니카용트랙(Track)에서미니카를

친구들것보다빠르게달리게하기위해모터를구입하던기억이

떠오르네요.BLDC모터라...무언가DC와는이름부터다르니다

른점이한,두가지가아닐것같은느낌이매우많이듭니다.

얼마나많이다른걸까요?

자!그럼SensorlessBLDC모터를구동하기에앞서,BLDC와

SensorlessBLDC에대해서알아봐야하겠죠??

그럼간단하게알아보도록합시다

<그림1-2>실제 BLDC모터 실제모습

<그림1-1> DC와 BLDC의 구조

current current

회전방향

DC Motor의 구조

semiconductor switch

BLDC Motor의 구조

rotor magnetstator coil

hall sensor

rotor coil

commutator brush

rotor stator magnet

Sensorless BLDC모터를 구동해보자!!

작성자:허홍강

www.devicemart.co.kr 27

SensorlessBLDC모터를구동해보자!

<그림1-2>을보시면<그림1-1>에서봤던것처럼코일에

전류가흐르면자석이회전하게끔만들어져있습니다.

그리고3개의극성터미널이존재합니다U,V,W(A,B,C)가

바로그것이지요.

그리고모터회전체인자석의위치를알려주는홀센서가

장착되어있습니다.이홀센서를통해모터자석의위치를

판단할수있고,모터의회전속도및회전각등을알수있

는것입니다.

여기서궁금한점이있을것입니다.DC모터와BLDC가

구조적인차이점이있으니,구동하는데도각각의차이점

이있지않을까요?물론그렇습니다.일반DC모터의경우

Brush의양터미널에(+,-)를입력하면간단하게구동이

되지만,BLDC모터의경우홀센서의출력에따라각각의

터미널에전류를흘려주어야하므로반드시구동용드라이

버가필요합니다.

<그림1-3>은일반적인BLDC모터의내부구조입니다.

BLDC모터는영구자석으로이루어진회전자와권선으로이

루어진스테이터들로이루어져있으며,전류가흐르는권

선으로부터자기장관계에의해회전자를회전시켜전기적

에너지를기계적인에너지로변환되게됩니다.

<그림1-3>의오른쪽에나타낸화살표의방향은각각의

전류흐름방향이고이를좀더자세히표현한것은아래

<그림1-4>와같습니다.

<그림1-4>와같이BLDC모터는총6-STEP으로이루어

져있으며,홀센서의신호에따라각각다른방향으로전압

을인가해주어야합니다.위와같이전류를흘려주게되면,

모터는회전체(영구자석)가순서대로각전자석에게밀리고

당겨져회전체가회전하게되는것입니다.

<그림1-5>는3상전류제어용인버터로,위와같은회로조

합을통해BLDC모터를제어하게됩니다.

여기까지매우간단하게BLDC에대해알아보았습니다.

다음장에서는SensorlessBLDC에대해알아보도록하겠

습니다.

2 Sensorless BLDC란?

드디어SensorlessBLDC모터에대해알아보는시간

이되었습니다!SensorlessBLDC모터란무엇인가?단순히해석하

고자하면,BLDC모터에Sensor가없는것이므로,홀센서가없는

것일까?그렇습니다.홀 센서가 장착되지 않은 BLDC모터입니

다.그렇다면왜홀센서를장착하지않은것일까요?필자의생각

으로는,소형BLDC모터를개발하다보니홀센서까지제거하여크

기를줄이다가개발된것이아닐까생각이듭니다.

즉,기존의BLDC모터에비해크기를줄이기위한것이아닐까

조심스럽게추측해봅니다.본론으로넘어와서,SensorlessBLDC

<그림1-3> BLDC모터의 내부모습

100N

AA

a

a

a

com

com

com

com

b

b

b

BB

c

c

cc

C

S N

S

S

NS

N

011

001

101N

S

110

010

13

25

46

<그림1-4> 홀 센서 신호에 따른 전압인가 방법

+VBUS

-VBUS 60°

Red Winding

Green Winding

Blue Winding

+VBUS

-VBUS

+VBUS

-VBUS

1 2 3 4

sector

5 6

<그림1-5> 3상 전류 제어용 인버터

a+

a+ a- b+ b- c+ c-

a-

b+

b-

c+

c-

Ha

N

S

HbHcLogic회로

트랜지스터

영구자석

자기센서

요크

전기자(스테이터)

A

C

B

Ha

Hc

Hb

28 Devicemart Magazine

PROJECTS TO BUILD

모터를구동하기위해서는무엇을알아야할까요?기존BLDC모

터와구동하는데있어서차이점은무엇일까요?그럼앞시간에다

룬BLDC모터에대해다시한번떠올려볼까요?기존BLDC모터의

경우에는,각홀센서의출력신호를가지고,모터의회전자(영구자

석)의위치를파악하여3개의터미널에순서대로각기다른전압을

인가하여회전자와전자석사이의밀고당기는힘을이용하여회전

하였습니다.그렇다면,“SensorlessBLDC모터의경우홀센서가

없으면,모터의회전체의위치는어떻게알고전압을순서대로인

가하지?홀센서가없는데회전체의위치를알고모터에정확한신

호를준다?어떤방법일까?”하는의문이생길것입니다.

일단결론부터얘기하면,역기전력(BACKEMF)을이용하는방법

입니다.BLDC모터가회전할때,각권선은렌츠의법칙(Lenz’s

Law)에따라서각권선은인가되는주전압과반대의극성을갖는

역기전력(BEMF)을발생시키게됩니다.이들역기전력의극성은인

가전압의방향과반대가되며,주로3개의큰모터파라미터에의

해결정됩니다.

·고정자권선의턴수

·회전자의각속도

·회전자자석에의해발생되는자계

(더많은내용이있지만,간단하게구동하는방법만을소개하므로,

복잡한내용은생략하도록하겠습니다.)

<그림2-1>은각각의U,V,W(이하A,B,C)에순서대로전압을인

가했을때발생되는Back-EMFZeroCrossing의위치를나타

낸것입니다.그렇다면역기전력은어떻게이용하느냐가문제인데,

보통SensorlessBLDC모터를접하면,중성점(NeutralPoint)이

나와있는것과그렇지않은것들두가지를접하게됩니다.

<그림2-2>에나와있는것같이왼쪽의중성점이있는경우와,오른

쪽처럼중성점이없는경우두가지의방법이있습니다.

왼쪽과같은경우에는중성점을이용하여,직접Back-EMF를검

출할수있는반면,오른쪽과같이중성점이나와있지않은경우,

가상의중성점을구성하여간접적으로검출하여야합니다.그리고

간접적으로검출한Back-EMF와각각의U,V,W(이하A,B,C)와

의비교기를통해홀센서와유사한출력을얻고,그출력에따라

o

o

o

SECTOR 5 0 1 2 3 4 5 0 1

<그림2-1> Zero Crossing 검출

30°

= BEMF Zero Crossing

<그림2-2> 중성점이 나와있는 경우 (우), 중성점이 없는 가상의 중섬점인 경우(좌)

BUS

POWER GND POWER GND

N N

BUS

N'

www.devicemart.co.kr 29

SensorlessBLDC모터를구동해보자!

순서대로전압을인가하게되는것입니다.

드디어BLDC모터와SensorlessBLDC모터에대해간단하게알아

본것같군요!!

다음장에서는제가수행한방법을소개하도록하겠습니다.

3 Sensorless BLDC 모터 구동

1장과2장을통해간략히BLDC모터와Sensorless

BLDC모터에대해알아보았습니다.1장과2장을통해제설명이

잘전달되었는지궁금하군요!!

이제BLDC모터를구동할시간입니다.그럼저와함께Sensorless

BLDC모터구동을해보도록할까요??

우선SensorlessBLDC모터를

구동하기에앞서모터를선정해

볼까요??필자는HDDSpindle

SensorlessBLDC모터를선택

하겠습니다.종종각포탈게시판

에하드드라이버를분해한뒤모

터돌리는동영상을보고,한번해

봐야지했었는데,드디어해보게

되는군요!!모터의배선을보니,4선으로써3선은모터의각상인

U,V,W(A,B,C)임에틀림없고,나머지한선은중성점일것입니다.

이모터의데이터시트를찾아봤지만인터넷에는데이터시트가존

재하지않는군요!어떤터미널이중성점인지어떻게알아낼까?

생각끝에멀티메터로찍어보았습니다.

각각의터미널끼리저항값을재보니,한터미널에서2.9Ω이나

왔습니다.만약중성점일경우,각각의터미널선가운데있으므로,

저항성분이절반밖에되지않을것입니다.그러므로분명이녀석

이중성점일것입니다.이제중성점의위치를알았으므로,모터를

구동시킬모터구동부가있어야할것입니다.이모터를만능기판

에놓고테스트해본결과,큰전류량을필요로하는모터는아니

므로,간단하게범용npn트랜지스터인2N2222을사용하여브릿

지회로를구성하였습니다.그리고,Back-EMF를검출하기위해

LM2904를사용하여비교기회로를구성하였습니다.

(필자는메인MCU로ATmega8을사용하였습니다.)

<그림2-3> 각각의 터미널의 전압인가 순서

<그림3-1> 브릿지 회로

<그림3-2> Back-EMF 검출용 비교기 회로

<그림3-3> 모터 연결 회로

30 Devicemart Magazine

PROJECTS TO BUILD

회로도 ( 다

운로드 : h

ttp://forum.ntrex.co.kr/ )

www.devicemart.co.kr 31

SensorlessBLDC모터를구동해보자!

NT - SpindletestKIT Parts List

Part Package Description EA Location 디바이스마트 제품명

IC

ATmega8-16PI DIP MCU 1 U4 ATmega8-16PI

KIA7805 DIP Line driver 1 U39 MAX232N

LM324D DIP OP-AMP 1 U1 LM324N

74HC08D DIP NAND GATE 1 U3 74HC00

X-TALCRYSTAL - 18.432MHz

ATS 18.432MHZ 1 Y1X-TAL 18.432M (49/U Type)

Fundamental

Regulator 7805 TO-220 5V Regulator 1 U2 7805(TO-220) 방열판세트

DIODE1N4148 DIP DIODE 7 D1,D2,D3,D4,D5,D6,D7 1N4148

3파이 LED RED DIP LED 1 D8 3A4SCA-8

SW KLT-1105B DIP SWITCH 2 S1,S3 KLT-1105B

Connector

Molex 53014-02 DIP molex 53014 - 2PIN 1 J4 Molex 53014-02

Molex 5045-02 DIP molex 5045 - 2PIN 1 J1 Molex 5045-02

PINHEADER 2X3 DIP 2.54mm 1 J2 핀헤더

PINHEADER 1X3 DIP 2.54mm 1 J3 핀헤더

MOTORSPINDLE MOTOR Sensorless BLDC 1

HDD Spindle Sensorless BLDC

Molex 5267-04 Motor Con 1 MOT1 Molex 5267-04

Transistor 2N2222A TO-92 NPN TR 9Q1,Q2,Q3,Q4,Q5,

Q6,Q7,Q8,Q92N2222A

Resistor

1/4W Axial Resistor 471J

DIP 470Ω 1 R1 1/4W Axial Resistor 471J

1/4W Axial Resistor 101J

DIP 100Ω 8R20,R21,R22,R24,R25,

R26,R27,R281/4W Axial Resistor 101J

1/4W Axial Resistor 1K

DIP 1KΩ 17R5,R6,R8,R10,R12,R14, R16,R18,R30,R32,R34,

R37,R38,R41,R42,R45, R461/4W Axial Resistor 1K

1/4W Axial Resistor 10K

DIP 10KΩ 19R3,R4,R7,R9,R11,R13,R15,R17,R19,R23,R29,R31,R33,R35,

R36,R39,R40,R43,R441/4W Axial Resistor 10K

1/4W Axial Resistor 0 DIP 0Ω 1 R2 1/4W Axial Resistor 0

CAP

E/C 25V 470uF DIP 470uF E/C 2 C1,C2 E/C 25V 470uF (85℃)

E/C 10V 100uF DIP 100uF E/C 1 C3 E/C 10V 100uF (85℃)

Ceramic 0.1㎌, 50V DIP 14C5,C7,C8,C9,C10,C11, C12,C13,C14,C15,C16,

C17,C18,C19Ceramic 0.1㎌, 50V

Ceramic 22pF, 50V DIP 2 C4,C6 Ceramic 22pF, 50V

1n4148 2n2222a 74hc00 5045-02 5267 xtal atmega8-16PI axial resi

ceramic cap e/c cap klt1105 led lm324 max232

※제품구입은디바이스마트를

이용해주십시오

www.devicemart.co.kr

32 Devicemart Magazine

PROJECTS TO BUILD

개발툴 – AVR GCC

#include <avr/io.h>#include <stdio.h>#include <avr/interrupt.h>#include <util/delay.h>

#define A_H_ON PORTC = ((PORTC | 0x01) & 0xF9)#define B_H_ON PORTC = ((PORTC | 0x02) & 0xFA)#define C_H_ON PORTC = ((PORTC | 0x04) & 0xFC)

#define A_L_ON PORTC = ((PORTC | 0x08) & 0xCF)#define B_L_ON PORTC = ((PORTC | 0x10) & 0xD7)#define C_L_ON PORTC = ((PORTC | 0x20) & 0xE7)

void motor(void);

//mainvolatile unsigned char g_Motor_state;

//pwmvolatile unsigned int g_Spindle_speed;volatile unsigned int g_Spindle_speed_renewal;

int main(void){ //GPIO Initializing DDRC |= (1<<DDC0)|(1<<DDC1)|(1<<DDC2)|(1<<DDC3)|(1<<DDC4)|(1<<DDC5); PORTC &= ((0<<PORTC0)|(0<<PORTC1)|(0<<PORTC1)|(0<<PORTC2)|(0<<PORTC3)|(0<<PORTC4)|(0<<PORTC5)); DDRD &= (0<<DDD2)|(0<<DDD3)|(0<<DDD4); PORTD |= (1<<PORTD2)|(1<<PORTD3)|(1<<PORTD4);

DDRD &= (0<<DDD5); //START Switch PORTD |= (1<<PORTD5); //START Switch

DDRB |= (1<<DDB1); //PWM PORTB |= (1<<PORTB1); //PWM

//PWM Initializing TCCR1A = (1<<COM1A1)|(1<<COM1B1)|(1<<WGM11); //9bit phase correct PWM 15.6KHz TCCR1B = (1<<CS10);//1 prescaler TIMSK |= (1<<OCIE1A); sei();

g_Spindle_speed_renewal = 200;

while(1) { if((PIND&0x20)==0) { g_Spindle_speed = 250;g_start_flag =1; }

if(g_Spindle_speed>510) { g_Spindle_speed = 510; } if(g_Spindle_speed<100) { g_Motor_state = 0; OCR1A = 0; } motor(); } return 0;}

void motor(void)

{ switch(g_Motor_state) { case 0: if(g_Spindle_speed>100) g_Motor_state =1; break; case 1: OCR1A =200; if(((PIND & 0x1C)>>2) == 3)g_Motor_state =2; A_H_ON; C_L_ON; _delay_ms(15); if(((PIND & 0x1C)>>2) == 1)g_Motor_state =2; B_L_ON; _delay_ms(15); if(((PIND & 0x1C)>>2) == 5)g_Motor_state =2; C_H_ON; B_L_ON; _delay_ms(15); if(((PIND & 0x1C)>>2) == 4)g_Motor_state =2; A_L_ON; _delay_ms(15); if(((PIND & 0x1C)>>2) == 6)g_Motor_state =2; B_H_ON; A_L_ON; _delay_ms(15); if(((PIND & 0x1C)>>2) == 2)g_Motor_state =2; C_L_ON; _delay_ms(15); break; case 2: OCR1A = 300; if(((PIND & 0x1C)>>2) == 1) { A_H_ON; B_L_ON; } if(((PIND & 0x1C)>>2) == 2) { B_H_ON; C_L_ON; } if(((PIND & 0x1C)>>2) == 3) { A_H_ON; C_L_ON; } if(((PIND & 0x1C)>>2) == 4) { C_H_ON; A_L_ON; } if(((PIND & 0x1C)>>2) == 5) { C_H_ON; B_L_ON; } if(((PIND & 0x1C)>>2) == 6) { B_H_ON; A_L_ON; } break; }}

ISR(TIMER1_COMPA_vect){

}

·if(((PIND&0x1C)>>2)==3):HA,HB,HC가각각PORTD의2,3,4핀에물려있으므로,각각의상태를확인하기위해서는0x1C와&연산을해주어야한다.또한>>2는오른쪽으로2번쉬프트연산을통해각각의상태가1~6까지의6스텝상태를확인할수있다.

소스코드

www.devicemart.co.kr 33

SensorlessBLDC모터를구동해보자!

우선SensorlessBLDC모터를구동하게되면각각의ABC파형

은<그림3-5>와같이ZeroCrossing과Back-EMF가발생되는

floating구간사이에Conducting구간이존재할것입니다.

<그림3-1,2,3>과같이회로는구성했지만,막상Signal을주려고

하니막막합니다.Back-EMF검출용회로를구성했는데어떻게

써야하나조사해본결과매우다양한방법이있었습니다.

그중가장간단한가정을하나세워보았습니다.

<그림3-5>와같이처음모터를돌리기전에일정방향으로

6-Step의펄스를순서대로넣어준다면,HallSensorType의

BLDC모터처럼Back-EMF검출용비교기회로에서Signal을

발생시킬것이고어느순간6-Step의어느한스텝과정확히일치

하는부분이있을것입니다.그때부터6-Step에맞춰Signal을입

력한다면,모터는제대로회전할것입니다.

그럼테스트결과를보도록할까요?

<그림3-5> 3상의 Back-EMF와 Zero Crossing

<그림3-4> 각 모터 터미널전압과 Back-EMF

34 Devicemart Magazine

PROJECTS TO BUILD

<그림3-6>은Back-EMF검출회로를통해발

생되는출력화면입니다.A,B,C각각의Back-

EMF는60°를간격으로순차적으로발생됨을

확인할수있습니다.그렇다면이Signal에맞

춰서6-Step펄스를입력해준다면,모터는정

상적으로회전할것입니다.

<그림3-6>을살펴보면,A의Highside입력

에따라모터ATerminal에는<그림3-4>과

같이Back-EMF와ZeroCrossing이일어나는

매우유사한펄스를확인할수있었습니다.

<그림3-7>을통해확인한결과,A펄스가입

력될때,A의Back-EMF비교기출력이출력

됨을확인할수있었습니다.

<그림3-8>은제가구동시킨모터가잘돌

아가는사진과,모터를돌리기위해제작한

간단한회로의모터드라이버입니다.간단

하게글을쓰다보니생략하고넘어간부분

이많은것같군요.

하지만독자여러분들모두Sensorless

BLDC모터를구동할수있으리라믿습니

다.여기까지왕초보의“SensorlessBLDC

모터를구동하자”를읽어주신모든분께

감사의인사를올립니다.

감사합니다.

<사진=(c)엔티렉스><저작권자(c)엔티렉스.무단

전재-재배포금지> 허홍강연구원(hhkgkdl@

ntrex.co.kr)

※참고문헌

· Microchip AN1160 (Sensorless BLDC Control with Back-EMF filtering Using a Majority Function)

-2009 Microchip Technology Inc.

· Direct Back EMF Detection Method for Sensorless Brushless DC(BLDC) Motor Drives

- Jianwen Shao (Virginia Polytechnic Institute and the State University -September, 2003)

<그림3-6> 3상의 Back-EMF Signal

A Sense A Sense

B Sense C Sense

<그림3-8> 모터의 구동모습(좌), 테스트를 위해 제작한 모터 드라이버 (우)

<그림3-6> 모터의 A terminal과 브릿지회로의 A high side input

Motor A PIN

A High Side

<그림3-7> 모터의 A terminal, 브릿지회로의 A high side input, Back-EMF 검출기의 A signal

Motor A PIN

A Sense

A High Side

A Sense

※디바이스마트를 통해서 모터구동용 테스트 기판을 판매할 예정입니다.