<C7A5C1A6C1F62E687770>

Size: px
Start display at page:

Download "<C7A5C1A6C1F62E687770>"

Transcription

1 Motor Control a 회전자 45 위치 (A A', B' B ) b 회전자 90 위치 ( 전류방향:A A') c 회전자 135 위치(A A', B B') d 회전자 180 위치( 전류방향 :B B') e 회전자 225 위치 (B B', A' A) f 회전자 315 위치(A' A, B' B) g 회전자 270 위치 ( 전류방향:A' A) h 회전자 360 위치( 전류방향:B' B) < 그림4-28> 1-2 상( 相 ) 통전회로구동원리 바이폴라스텝모터의 1-2 상통전방식은위의 < 그림 4-28> 에서보는바와같이 1상 통전및 2 상통전의경우와동일하다. 차이점은마이크로컨트롤러의출력포트로 < 그림 284

2 Chapter4. 스텝모터(StepperMotor) 4-28> 과같이 1개및 2개의상에전류가순차적으로흐를수있도록일정시퀀스로출력신호를출력한다는점이다. 따라서회전자가 1회전하는데필요한스텝의수는모두 8 스텝이된다. 즉, 1상및 2상구동방식과동일한주기로스텝펄스를출력한다면 2배의스텝이소요되므로회전속도(RPM) 는상대적으로 1/2 로줄게될것이다. < 그림 4-28> 의경우회전방향은시계방향이지만반대방향으로의회전을원한다면전압시퀀스만반대로해주면된다. a 소프트웨어개략도 b 타이머인터럽트서비스루틴순서도 < 그림4-29> 1-2 상( 相 ) 통전방식제어알고리즘 하프- 스테핑(Half Stepping) : 1-2 상( 相, Phase) 통전( 여자) 실습 그러면이제실습보드에서하프-스테핑을위한 1-2상통전방식을직접구현해보도록하자. 회로의구성은앞의 1상및 2 상통전방식과동일하게구성을한다. 또한프로그램소스코드도동일하게사용할수있으며다만스텝모터를구동하기위한펄스출력의시퀀스만아래와같이변경하여주고펄스출력을제어하는함수에서아래의 1-2상통전을위한배열을이용하여포트로출력하면되며, 배열이총 8개의인자로구성되어있음에주의하도록하자. 285

3 Motor Control const unsigned char half_step_12ph_ccw[8] = { 0x10, 0x30, 0x20, 0x60, 0x40, 0xC0, 0x80, 0x90 }; const unsigned char half_step_12ph_cw[8] = { 0x90, 0x80, 0xC0, 0x40, 0x60, 0x20, 0x30, 0x10 }; 여러번강조하였지만하프-스테핑제어에서가장주의할점은동일한펄스의주기 (PPS) 에서모터의회전속도가풀스테핑대비 1/2 로감소하므로동일한회전속도(RPM) 을위해서는풀-스테핑대비 2 배의펄스주기를필요로한다. 따라서원활한스텝모터의제어를위해서는프로그램코드에서아래와같이일부수정하여야하며이는어디까지나스텝모터의제조스펙에따라서결정이되어져야한다. 참고로필자가사용하는저가의스텝모터는스펙을확보할수없는관계로실험적으로그값을찾아내어사용하였다. #define ADC_CENTER 512 // 10비트 ADC 결과값의절반 #define MIN_PPS 80*2 // 스텝모터최소 PPS #define MAX_PPS 600*2 // 스텝모터최대 PPS //********************************************************************// //*** Half Stepping Function ***// //*** PPS 제어및 Step 펄스출력/ Timer0 인터럽트에서호출됨 ***// //********************************************************************// void fcn_half_step(void) { // 방향전환에따른 Pulse 증/ 감보상 if(flag_motor_forward!= flag_dir_prev) { if(flag_motor_forward == CW) { pulse_cnt++; } else { pulse_cnt--; } } 286

4 Chapter4. 스텝모터(StepperMotor) // 시계방향회전 if(flag_motor_forward == CW) { if(pulse_cnt >= HALF_STEP_MAX) pulse_cnt=0; // Half Stepping : 8 PORTD = half_step_12ph_cw[pulse_cnt]; pulse_cnt++; } // 반시계방향회전 else { if(pulse_cnt < 0) pulse_cnt = HALF_STEP_MAX-1; // Half Stepping : 8 } PORTD = half_step_12ph_cw[pulse_cnt]; pulse_cnt--; } flag_dir_prev = flag_motor_forward; // 회전방향저장 < 그림 4-30> 은 400[pps] 의속도로정회전및역회전으로스텝모터를구동한경우의펄스출력이다. 그림에서보면각각의펄스는 3 스텝구간동안온( 온) 상태를유지하므로펄스의폭은 7.5ms(=3/400pps) 가된다. a 정회전 (CW) b 역회전 (CCW) < 그림4-30> 1-2 상통전여자 ( ) 제어펄스파형(400pps) 287

5 Motor Control 모터에인가되는전압파형인 < 그림 4-31> 은역기전력전압이추가되어측정되었기때문에 4 스텝구간에서펄스폭측정되기때문에 10ms(4/400pps) 로측정되었다. a 정회전 (CW) b 역회전 (CCW) < 그림4-31> 1-2 상통전여자 ( ) 제어모터전압파형(400pps) 마이크로스텝핑 (Micro Stepping) 마이크로스테핑(Micro Stepping) 이해 스텝모터의구동방법을보다정밀하게제어하기위한방법으로사용되는마이크로스텝핑은풀-스텝에해당하는회전각도를다수의서브스텝으로나누어제어하는방식이라볼수있다. 즉, < 그림 4-32> 와같이풀-스텝각도가 90 인경우이를 1/4, 1/8, 1/16, 1/32등과같이다수개의스텝으로분해하여보다정밀한스텝각도로회전할수있도록제어하는방식이라말할수있다. 결과적으로보다정밀한스텝제어와함께풀-스텝핑및하프-스텝핑을이용했을경우대비소음및진동특성향상과함께고속및저속에서도최대토크를얻을수있다. 본장에서는마이크로스텝핑의기본적인구동원리및간단한응용실습을통해앞에서경험했던풀-스텝핑및하프-스텝핑과의차이점을직접경험하고고민할수있는기회를제공하고자한다. 참고로마이크로스텝핑에대한보다전문화된기술지식을원하는독자는참고문헌의마이크로칩애플리케이션노트를참조하길바란다. 288

6 Chapter4. 스텝모터(StepperMotor) < 그림 4-32> 풀-스텝핑및마이크로- 스텝핑의스텝각도(Angle) 비교 이상적인마이크로스텝핑의기본원리는 < 그림 4-33> 과같이스텝모터의권선 A 와권선 B에각각 90 의위상차를갖는정현파전류(Sine-Cosine Wave) 가흐르도록함으로써두개의모터권선에흐르는전류의합이정현파가되도록하는것이다. 결과적으로두개의모터권선에 90 위상차의전류가흐르게되면각권선에의해서발생하는토크의합은일정한값을얻을수있게될것이다. 이와같은원리를이용하기때문에이방법을사인- 코사인마이크로스텝핑이라부르기도한다. < 사인- 코사인마이크로스텝핑의전류파형> 289

7 Motor Control < 최대토크구현을위한A,B 상의전류관계> < 그림 4-33> 마이크로-스텝핑의전류관계 마이크로스텝핑의또다른방식으로서본장에서실습하게될바이폴라스텝핑모터의토크를최대화하기위한구동방법이있으며. 모터의회전시토크가일정하게유지되지는않지만최대한의토크를발휘할수있다는특징을가지고있다. 이구동방법은 < 그림 4-33> 과같이하나의모터권선에는일정한전류를흘려주는동안에나머지다른하나의권선에흐르는전류는사인함수로감소시켜주고, 다시전류의방향을반대로하여사인함수로증가시켜주는일정한순서로반복하는방식이다. 전류의증가/ 감소패턴을사인파로유지한다면앞서설명한사인-코사인마이크로스텝핑처럼유연한회전뿐만아니라보다큰토크를얻을수있다. 이와같은마이크로스텝핑구동을위해서는 2개의 PWM 출력이요구되며, < 그림 4-34> 와같이총 8개의구간으로나누어두개의모터권선 A, B에흐르는전류의패턴을제어해야한다. 그러면가장고민을해야할정현파전류를구현하는방법에대해살펴보도록하자. 정현파전류는 PWM 의듀티사이클을이용하여구현할수있다. 즉, 모터의권선에인가되는전압의형태를 PWM 파형으로인가하고듀티사이클을점진적으로증가또는감소시킴으로써모터의권선에흐르는전류의모양이정현파에유사하게되도록할수있을것이다. < 표 4-2> 는모터권선 A의전류를일정하게유지하기위해 PWM1은 100% 듀티사이클 을유지하면서, 모터권선 B의전류를사인파형태로증가시키기위해 PWM2의듀티사 290

8 Chapter4. 스텝모터(StepperMotor) 이클의변화패턴을룩- 업테이블(Lookup Table) 로작성한것이다. 스텝모터의풀-스텝각도에해당하는전기적각도(90 도위상) 에대해총 16 구간으로나누어각구간에대한 PWM 듀티사이클을계산하고있으므로마이크로스텝핑을구현하기위한마이크로스텝수는 16 스텝이된다. < 표 4-2> 사인함수-PWM 듀티사이클관계 a PWM1: 100%, PWM2: 0% 100% bpwm1: 100% 0%, PWM2: 100% 291

9 Motor Control cpwm1: 0% 100%, PWM2 100% dpwm1: 100%, PWM2: 100% 0% e PWM1: 100%, PWM2: 0% 100% fpwm1: 100% 0%, PWM2: 100% g PWM1: 0% 100%, PWM2: 100% hpwm1: 100%, PWM2: 100% 0% < 그림 4-34> 마이크로-스텝핑회로의구동원리 마이크로스테핑(Micro Stepping) 실습 < 그림 4-35> 와같이기존의회로에두개의 PWM 출력신호가추가되었다. 이들 PWM 출력신호는정현파전류를만들어내기위해각각의풀-브리지회로의하단스위치소자와연결되고듀티사이클을반영한 On/Off 신호는결국전류의양을제어하게되며, 4 개의포트(RD4 ~ RD7) 는각각모터권선 A, B에흐르는전류의방향을제어하기위한목적으로사용된다고볼수있다. 직접경험해보면알겠지만사실마이크로스텝핑의구현은 < 그림 4-35> 의회로도를 바탕으로 < 그림 4-34> 의총 8가지시퀀스에대한알고리즘을코딩으로구현하기만하 292

10 Chapter4. 스텝모터(StepperMotor) 면된다. 필자도사실마이크로스텝핑에대한경험은이번이처음이었지만언제나그렇듯이기본개념만확실히이해를한다면단순구현자체는어려운일은아닌것같다. 엔지니어에게남은과제는습득하고경함한기본개념을어떻게응용및확장해나갈것인지에대한많은고민과노력이라생각된다. < 그림 4-35> 마이크로스텝핑구동회로 < 그림 4-34> 의 8 개의시퀀스를반영하여 < 그림 4-35> 의회로에적합하게마이크로스텝핑알고리즘을위한코딩을작성해보자. 먼저 8개의시퀀스는두개의모터권선에흐르는전류의방향제어로구분되어져있으며이를순서대로스위칭소자의게이트제어용포트출력으로표현하면아래와같은출력시퀀스를얻을수있다. const unsigned char micro_step_2ph_ccw[8] = { 0xC0, 0xC0, 0x90, 0x90, 0x30, 0x30, 0x60, 0x60 }; // CCW 회전을위한플-브리지제어시퀀스 293

11 Motor Control 이제각각의제어시퀀스에서 PWM1 또는 PWM2 펄스의듀티사이클이사인파형으로증가또는감소시키기위한사인파- 듀티사이클테이블을만들어보자. 마이크로스텝의수는총 32 스텝으로하였으며일반적으로이보다정밀한스텝으로제어하는것은그효과가미미한것으로알려져있다. 아래배열의값은 < 표 4-2> 를참조하여마이크로소프트사의엑셀을이용하여계산하였으며 100% 듀티사이클을 PWM의주기를설정하는 PR2 레지스터의값과같게하고나머지는사인함수의계산값을반영하면된다. 지면관계상사인테이블계산을위한계산식은한국마이크로칩웹사이트를통해액셀문서로제공하도록하겠다. unsigned char sine_angle[32] = { 12, 24, 36, 48, 60, 72, 84, 95, 106, 117, 128, 138, 148, 158, 167, 176, 185, 193, 200,207,214,220,225,230,235,239,242,245,247,248,249,250}; 이제스텝모터의회전속도(PPS) 에따라 PWM1 및 PWM2의듀티사이클을가변할수있도록듀티사이클가변( 증가또는감소) 주기를아래와같이계산해야한다. 변경주기 [ 예제] 200pps, 32 microsteps 으로제어하는경우, D.C 변경주기 = 1/200/32 = 25 [us] Number of Micro-steps: 풀-스텝당마이크로스텝수 이제남은것은타이머인터럽트를이용하여계산된모터의속도에의해계산된시간마다듀티사이클을변경해주는함수를호출한다. 294

12 Chapter4. 스텝모터(StepperMotor) //********************************************************************// //*** Interrupt Service Routine ***// //*******************************************************************// void interrupt Interrupt_Service_Routine(void) { if(t0if) { TMR0 = duty_chg_period; // Timer0는 Prescaler에따라 X*Tcy [us] 마다증가 fcn_micro_step(); // 마이크로스텝핑듀티제어루틴 } } T0IF = 0; 위의예에서볼수있듯이 fcn_micro_step() 이라는함수는인터럽트서비스루틴에서호출되기때문에정확한제어를위해서는이후타이머인터럽트가발생하기전까지수행을마쳐야한다. 즉, 마이크로스텝핑제어를위해서는상대적으로빠른연산처리능력을발휘할수있는마이크로프로세서를필요로한다. 우리가사용하고있는 PIC16F887 디바이스는최대 5 MIPS(Mega Instruction Per Second) 의연산속도를가지고있으므로어셈블리명령어한개를수행하는데 0.2 [us] 가소요된다. 만약타이머인터럽트가 25[us] 로설정되었고인터럽트서비스루틴내에서호출하는 fcn_micro_step() 가 100 개의어셈블리명령어를수행해야한다고가정한다면, 이프로세서는 25[us] 시간중 20[us] 를마이크로스텝핑제어에사용되고 5[us] 의시간만남게되므로마이크로프로세서의연산수행능력범위내에서제어가이루어질수있도록주의를해야한다. 마이크로스텝핑제어알고리즘은크게두가지, 풀-스텝구간에따른전류의방향을제어하는부분과각각의풀-스텝구간내에서두개의 PWM 펄스출력을 32개의구간으로나누어제어하는부분으로구분할수있다. 이에대한코딩은다음을참조하길바라며독자여러분들에의한개선된알고리즘이제시되기를기대해본다. 295

13 Motor Control //********************************************************************// //*** Micro Stepping Function ***// //*** PPS 제어및 Step 펄스출력/ Timer0 인터럽트에서호출됨 ***// //********************************************************************// void fcn_micro_step(void) { if(sine_tbl_index == 0 sine_tbl_index == MICRO_STEP_MAX) { PORTD = micro_step_2ph_ccw[sector_cnt]; switch (sector_cnt) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: if(flag_motor_ccw) fcn_setup_ccp2_up_mode(); else fcn_setup_ccp2_down_mode(); break; if(flag_motor_ccw) fcn_setup_ccp1_down_mode(); else fcn_setup_ccp1_up_mode(); if(flag_motor_ccw) fcn_setup_ccp1_up_mode(); else fcn_setup_ccp1_down_mode(); break; if(flag_motor_ccw) fcn_setup_ccp2_down_mode(); else fcn_setup_ccp2_up_mode(); break; if(flag_motor_ccw) fcn_setup_ccp2_up_mode(); else fcn_setup_ccp2_down_mode(); break; if(flag_motor_ccw) fcn_setup_ccp1_down_mode(); else fcn_setup_ccp1_up_mode(); break; if(flag_motor_ccw) fcn_setup_ccp1_up_mode(); else fcn_setup_ccp1_down_mode(); break; if(flag_motor_ccw) fcn_setup_ccp2_down_mode(); else fcn_setup_ccp2_up_mode(); 296

14 Chapter4. 스텝모터(StepperMotor) } default: break; break; if(flag_motor_ccw) else sector_cnt++; sector_cnt--; } if(sector_cnt > 7) sector_cnt = 0; if(sector_cnt < 0) sector_cnt = 7; } // Change the PWM Duty with Sine Table switch (ccp12_mode) { case CCP1_UP_MODE : CCPR1L = sine_angle[sine_tbl_index++]; //CCP1CON<5:4> = xx 는편의상생략 break; case CCP2_DOWN_MODE : CCPR2L = sine_angle[--sine_tbl_index]; //CCP2CON<5:4> = xx 는편의상생략 break; case CCP2_UP_MODE : CCPR2L = sine_angle[sine_tbl_index++]; //CCP2CON<5:4> = xx 는편의상생략 break; case CCP1_DOWN_MODE : CCPR1L = sine_angle[--sine_tbl_index]; //CCP1CON<5:4> = xx 는편의상생략 break; default : break; } 풀-스텝구간에따른두개의 PWM 펄스출력을 32개의구간으로나누어사인파형의 전류가흐를수있도록제어하는부분은크게다음의 4 가지로구분할수있다. 297

15 Motor Control //********************************************************************// //*** Setup CCP2 as PWM Duty Increase Mode ***// //*** CCP1 : Duty 100% ***// //*** CCP2 : Duty Increase ***// //********************************************************************// void fcn_setup_ccp2_up_mode(void) { ccp12_mode = CCP2_UP_MODE; sine_tbl_index = 0; TRISC2 = 0; CCPR1L = PR2; TRISC1 = 0; CCPR2L = 0; //CCP2 Up //CCP1CON<5:4> 와 <CCP2CON<5:4> 레지스터설정은계산편의상생략 } //********************************************************************// //*** Setup CCP1 as PWM Duty Decrease Mode ***// //*** CCP1 : Duty Decrease ***// //*** CCP2 : Duty 100% ***// //********************************************************************// void fcn_setup_ccp1_down_mode(void) { ccp12_mode = CCP1_DOWN_MODE; sine_tbl_index = MICRO_STEP_MAX; TRISC2 = 0; CCPR1L = PR2; //CCP1 Down TRISC1 = 0; CCPR2L = PR2; //CCP1CON<5:4> 와 <CCP2CON<5:4> 레지스터설정은계산편의상생략 } 298

16 Chapter4. 스텝모터(StepperMotor) //*******************************************************************// //*** Setup CCP1 as PWM Duty Increase Mode ***// //*** CCP1 : Duty Increase ***// //*** CCP2 : Duty 100% ***// //*******************************************************************// void fcn_setup_ccp1_up_mode(void) { ccp12_mode = CCP1_UP_MODE; sine_tbl_index = 0; TRISC2 = 0; CCPR1L = 0; TRISC1 = 0; CCPR2L = PR2; //CCP1CON<5:4> 와 <CCP2CON<5:4> //CCP1 Up 레지스터설정은계산편의상생략 } //********************************************************************// //*** Setup CCP2 as PWM Duty Decrease Mode ***// //*** CCP1 : Duty 100% ***// //*** CCP2 : Duty Decrease ***// //********************************************************************// void fcn_setup_ccp2_down_mode(void) { ccp12_mode = CCP2_DOWN_MODE; sine_tbl_index = MICRO_STEP_MAX; TRISC2 = 0; CCPR1L = PR2; TRISC1 = 0; CCPR2L = PR2; //CCP2 Down //CCP1CON<5:4> 와 <CCP2CON<5:4> 레지스터설정은계산편의상생략 } < 그림 4-36> 은 250[pps] 의속도로마이크로스테핑제어시스위칭소자의게이트신호인 RD4, RD5, RD6, RD7 포트의출력신호이다. 풀-스텝구간은 40ms 이며, 이구간을기준으로번갈아가면한번에모터권선하나만전류방향을변경하기위한스위칭변경이이루어지는것을확인할수있다. 299

17 Motor Control 프로브연결 : CH1 (RD4) / CH2 RD5 / CH3 RD6 / CH4 RD7 < 그림 4-36> 마이크로스텝핑전류방향제어용게이트신호 (250 pps / CCW) < 그림 4-37> 은 250pps 속도로반시계방향회전시두개의 PWM 출력파형을측정비교한결과이다. 오실로스코프로측정한결과를주의깊게들여다보면하나의풀- 스텝구간(40ms) 에대해서 PWM1 과 PWM2 의듀티사이클이각각번갈아서증가또는감소하는것을확인할수있다. 프로브연결 : CH1 (RD4) / CH2 RD5 / CH3 PWM1(CCP1) / CH4 PWM2(CCP2) 300 < 그림 4-37> 마이크로스텝핑게이트파형및 PWM 파형비교 (250pps / CCW)

18 Chapter4. 스텝모터(StepperMotor) 4.5 결론 스텝모터는제어의편리함때문에 DC 모터처럼주변가전제품등에서어렵지않게발견할수있다. 본장에서는스텝모터의기본개념및구동알고리즘에대해입문자를대상으로비교적이해하기쉽게다루고자하였으며부족한점은참고문헌을참조해주길바란다. 특히기본적인개념이해를바탕으로직접실습을통해모터의구동을확인하고다시문헌을찾아부족한지식을습득하고이를실제응용을통해개선된결과물을확인하는과정을반복하는노력을통해좋은결실을맺기를바란다. 참고로, 스텝모터의실습은교재에포함된데모보드를이용하여수행하였으며, 실습에서사용한스텝모터는온라인쇼핑몰을통해저렴한가격에쉽게구입할수있는바이폴라스텝모터(PM42SIA24D) 와유니폴라스텝모터(LA82468-M1T) 를사용하였다. 프로그래밍및디버거를위한툴은마이크로칩의저가형 PICkit2 Debug Express (DV164121) 또는중저가형 MPLAB ICD2(DV164007) 을사용할것을권장한다. 본교재에서다루지못한사항이나부족했던점들은한국마이크로칩웹사이트 ( 를통해지원할예정이며, 관련자료및전체실습코드또한웹사이트를통해지속적으로업데이트하도록노력하겠다. 참고및추천문헌 1. AN907: Stepping Motors Fundamentals (DS00907A, Microchip) 2. AN822: Stepper Motor Microstepping with PIC18C452 (DS00822A, Microchip) 3. AN906 : Stepper Motor Control Using the PIC16F684 (DS00906A, Microchip) STP : Stepping into Stepper Motors (2007 MASTERs, Microchip) 5. PIC MCU CCP and ECCP Tips & Tricks (DS41214B, Microchip) 6. AN898: Determining MOSFET Driver Needs for Motor Drive Applications (DS00898A, Microchip) 7. PICDEM Mechatronics Demonstration Board User's Guide (DS51557B, Microchip) 301

19

20 CHAPTER 브러시리스모터 (Brushless Motor) 5.1 브러시리스모터의소개 5.2 브러시리스모터의 6-스텝커뮤테이션제어 5.3 브러시리스모터의정현파제어 5.4 결론

21 Motor Control 5.1 브러시리스모터소개 본장에서는역기전력파형이사다리꼴형태의직류파형을갖는 BLDC(Brushless DC) 모터와정현파모양의교류파형을갖는 PMSM( 영구자석형동기전동기, Permanent Magenet Motor) 에대해다루고자하며, 이들모터를편의상브러시리스모터또는 BLDC 모터로혼용하여부르기로하겠다 브러시리스모터의개요 흔히 BLDC 모터라불리는브러시리스(Brushless) DC 모터는그이름에서알수있듯 3장에서다루었던브러시타입의 DC 모터와는달리모터의내부에기구적인브러시장치를가지고있지않은모터를말한다. 따라서 BLDC 모터는내부에기구적인브러시를가지고있지않기때문에전기적인방법으로정류(Commutation) 를수행해주어야한다. BLDC 모터는다른종류의모터와비교했을때다양한장점을가지고있어서최근에가전제품, 자동차, 산업자동화등의다양한분야에적용되면서기존의브러시타입의 DC 모터및유도전동기등의대안으로급속히성장하고있다. 불과수년전만해도 BLDC 모터가적용된제품은극히일부의프리미엄제품군에한정되어있었지만현재는프리미엄제품군은물론일반제품군에까지적용될정도로모터응용분야에서는대세를이루고있다고감히말할수있다. a영구자석형 DC모터 b영구자석형 BLDC 모터 304 < 그림 5-1> DC모터와 BLDC 모터비교

22 Chapter 5. 브러시리스모터(Brushless Motor) 그렇다면도대체무엇때문에산업전반에서 BLDC 모터의인기가급상승하고있을까? 많은이유중에도몇가지장점을들자면다음과같다. 광범위한동작속도범위 ( 수십 ~ 수만 RPM) 속도-토크특성우수 뛰어난동적특성 고효율 ( 낮은소비전력) 저소음 내구성 ( 상대적으로긴수명) 사실 BLDC 모터의이러한우수한특성에도불구하고모터자체의비용및전력용반도체소자등으로인해전체적인비용상승을가져오는어려움을겪어왔다. 하지만반도체부품및마이크로컨트롤러관련분야의기술발전과함께제어관련기술의진보가시너지효과를발휘하며그영역을넓히고있다 브러시리스모터의구조 BLDC 모터는회전자의권선구조에의해서 1- 상(Phase), 2- 상, 3-상 BLDC 모터로분류될수있다. 일반적으로전자제품의냉각팬에주로사용되는소형의냉각팬모터가단상 BLDC 모터에해당하며, 일정출력이상을요구하는분야에서는 3 개(U,V,W) 의터미널이있는 3 상모터가주류를이루고잇다. 단상 BLDC 모터는한상의 DC 전압만가지고제어하기때문에 3장에서언급한 DC 모터와제어방법이유사한반면본장에서다루게될 3상 BLDC 모터는그원리및제어가상대적으로어렵다. BLDC 모터는고정자의권선에의해발생하는회전자계와회전자의영구자석에의해발생하는자계가동기화되도록제어한다는관점에서동기모터(Synchronous Motor) 로분류할수있다 고정자(Stator) BLDC 모터의고정자는 < 그림 5-1> 에서보이는바와같이다수의철심을코일이감싸고있는구조로 3 개의권선을가지고있다. DC 모터의역기전력(Back EMF) 은직선형의 DC 전압형태를가지고있는반면 BLDC 모터의역기전력은회전자의코일을감는구조에따라서사다리꼴(Trapezoidal) 파형및정현파(Sinusoidal) 파형으로분류할수있다. 일반적으로 BLDC 모터는사다리꼴파형의역기전력을갖으며, 상대적으로토크출력특성이좋은정현파파형의역기전력을갖기위한 BLDC 모터는코일분포를보완하기위해추가적인모터권선을감아주어야하는이유로비용상승의원인이된다. 305

23 Motor Control < 그림 5-2> BLDC 모터의구조 특정 BLDC 모터의역기전력파형을확인하기위해서는 3 선의모터터미널(U/V/W 또는 A/B/C) 중 2개를오실로스코프의프로브를연결한후손으로모터의회전축을빠른속도로회전시켜보면 < 그림 5-3> 과같은역기전력파형을측정할수있다. 엄밀히말하면역기전력파형이그림 a와같이사다리꼴모양의직류파형이측정되는모터를 BLDC 모터라하고, 그림 b와같이정현파모양의교류파형이측정될때 PMSM(Permanent Magnet Synchronous Motor) 또는영구자석형동기전동기라부르기도하지만특별한구분없이 BLDC 로통칭하기도한다. a사다리꼴(trapezoidal) 역기전력 b정현파(sinusoidal) 역기전력 < 그림 5-3> 브러시리스모터의역기전력(BEMF) 비교 306

24 Chapter 5. 브러시리스모터(Brushless Motor) 회전자(Rotor) BLDC 모터의회전자는영구자석을이용하여만들어졌으며몇쌍의 N 극/S극으로이루어졌는지에따라서 2 극, 4 극, 6 극, 8 극등으로불린다. 참고로 1 쌍의자석즉, 1개의 N극과 1개의 S극으로구성되어져있으면 2 극(pole) 모터라불린다. BLDC 모터에서극의수(# of Poles) 는모터의회전속도를계산하기위한아주중요한개념이되므로제어하고자하는모터의극수를반드시확인하고있어야한다. 회전자에사용되는영구자석은페라이트자석(Ferrite Magnet) 이사용되어왔지만, 최근에는상대적으로높은비용에도불구하고높은자속밀도를가지고있어소형화에유리한희토류자석(Rare Earth Alloy Magnet) 을많이채택하고있다. a 표면부착형태 b 표면매립형태 c 삽입형태 < 그림 5-4> 회전자의자석취부형태 홀- 센서 (Hall Sensor) DC 모터는브러시에의해서정류(Commutation) 가이루어졌지만브러시가없는 BLDC 모터는전기적인방법으로정류를수행해야한다. 따라서고정자에전류를흘려주기에앞서회전자에부착또는삽입된영구자석의 N 극/S 극위치를반드시알고있어야한다. 홀센서는바로이와같은회전자의자석의위치를구분하기위해사용되는센서로써주로 3개의홀센서를고정자또는모터의하단부등에부착된작은회로기판에장착함으로써자석의위치를감지할수있도록사용되고있다. 모터의회전시회전자의자석(N극 /S 극) 이이들홀센서와근접하여지나가게되면홀효과(Hall Effect) 에의하여홀센서는양(+) 또는음(-) 의전압을발생시키고이를통해우리는회전자의위치를감지할수있게되는것이다. 홀센서는그부착방법에따라서회전자의위치검출의정밀도가결정되기때문에홀센서가부착된 BLDC 모터는상대적으로비용이상승하게되며, 만약 307

25 Motor Control 부착된홀센서의위치가잘못되었다면, 회전자의위치검출신호또한잘못된정보를주게된다.BLDC모터의제작시홀센서는 60 또는 120 등의위치로고정되어있으며이에따른홀센서의출력신호가해당모터의스펙에명시되어있다. 참고로홀센서는동작을위한별도의전원공급을필요로하므로스펙을통해확인할수있기바란다. < 그림 5-5> 홀센서와역기전력비교예( 출처:Hurst Motor 스펙) 308

26 Chapter 5. 브러시리스모터(Brushless Motor) BLDC 모터의특성 토크(Torque)- 속도(Speed) 특성 BLDC 모터의토크는크게피크토크(TP) 와정격토크(TR) 의두가지로표현할수있으며, 정격토크의일정한출력으로정격속도까지발휘하는구간을연속토크구간이라부르며, 정격속도이후약 150% 속도까지는속도증가에반비례하여모터의출력토크가감소하게된다. 특별히빈번한기동과정지또는회전전환을반복하기위해서는부하의회전관성등을극복하고급가속등을위해서정격토크이상의큰토크를필요로하게되는데이구간이모터가순간적으로발휘할수있는구간인순간토크구간으로써모터의최대피크출력인피크토크 (TP) 를기준으로속도에반비례하여감소한다. < 그림 5-6> BLDC 모터의토크-속도특성 BLDC 모터특성비교 BLDC 모터의특성을 DC 모터및교류유도전동기(ACIM) 와비교하면 < 표 5-1> 과같다. 표에서알수있듯이 BLDC 모터는대부분의특성이모두우수한반면비용및제어측면에서는불리한점이대부분프리미엄제품과같이고가의제품에주로적용되고있는원인이된다. 309

27 Motor Control 특성 정류(Commutation) 방법 BLDC 모터 홀센서/ 역기전력등을이용 / 전기적으로정류 수명길다짧다 DC 모터 브러시이용 / 기계적정류 토크/ 속도특성 정격속도구간에서토크일정 높은 속도에서는 브러시의 마찰력증가로토크감소 효율 높음 보통 출력/ 사이즈 좋음- 전기자 ( 고정자) 의 발열 보통- 전기자( 회전자) 의발열 이케이스를통해방열 이공극(Air Gap) 에서방열 회전자관성 낮음-회전자가 영구자석이므 로동적특성좋음 속도범위 높음-브러시와 정류자가 필 요없음 높음-높은관성으로제한된동적특성낮음-브러시에의한기계적제한 - EMI 발생 소음낮음높음브러시의아크발생이 비용 높음-영구자석 낮음 제어 어렵다 쉽다 제어기특성 제어기필수 고정속도-제어기불필요가변제어- 제어기필요 < 표5-1> BLDC 모터와 DC 모터의특성비교 특성 BLDC 모터 교류유도전동기 (ACIM) 토크/ 속도특성 정격속도구간에서토크일정 비선형성- 낮은속도에서낮 은토크 출력/ 사이즈 좋음- 전기자( 고정자) 의 발열이 케 이스를통해방열 회전자관성 기동전류 낮음-회전자가영구자석이므로동적특성좋음 보통-회전자 및 고정자에 모터권선필요 높음- 동적특성나쁨 정격-특별한기동회로필요없음정격전류의약 7배 -Y등의기동회로필요 제어기특성 제어기필수 고정속도-제어기불필요 가변제어- 제어기필요 슬립 (Slip) 없다회전자는고정자보다슬립주파수만큼늦게회전 < 표 5-2> BLDC 모터와교류유도전동기와의특성비교 310

28 Chapter 5. 브러시리스모터(Brushless Motor) 5.2 브러시리스 DC 모터의 6- 스텝제어 이제마이크로칩의모터컨트롤전용 16비트마이크로컨트롤러를이용하여 BLDC 모터를제어해보도록하자. dspic30f 제품군중모터컨트롤 PWM 모듈을가지고있는제품군은다음 < 표 5-3> 과같다. 이중에서우리가사용할디바이스는 28핀 DIP 타입의 dspic30f3010 디바이스이며컴파일러는마이크로칩의 MPLAB C30 컴파일러를사용하도록하겠다. 참고로 MPLAB C30 컴파일러의 Student Version은마이크로칩홈페이지 ( 를통해무료다운로드가가능하며, 일정기간풀버전과동일한기능으로무료사용이가능할뿐만아니라, 제한기간이지난후에도코드최적화레벨이하향조정된상태로무제한사용이가능하다. 따라서제품양산이아닌개발단계에서는특별한제한없이얼마든지사용할수있다고생각해도좋다. < 표 5-3> dspic30f 모터컨트롤제품군 디바이스에대한보다자세한사항을참조하고자한다면해당디바이스의데이터시트뿐만아니라각각의주변장치에대한모든기능을상세히설명해주고있는 "dspic30f Family Reference Manual( 관련사이트 : 을꼭참조하길바 란다. 참고로상대적으로성능이우수한 dspic33f Family에는보다다양한모터컨트롤제품군이제공되고있으며마이크로칩은전세계반도체기업중에서현재가장다양한모터컨트롤제품군을출시하고있다. 여기에서소개될소프트웨어알고리즘은마이크로칩의어플리케이션노트및기술교육자료에소개된응용코드를사용하도록하겠다. 311

29 Motor Control < 그림 5-7> dspic30f3010 디바이스의핀배치 dspic30f 의모터컨트롤 PWM 모듈개요 dspic30f 제품군의모터컨트롤 PWM 모듈은 < 그림 5-8> 과같이모터컨트롤전용레지스터들을이용하여 < 그림 5-8> 과구성되어있다. 십여개에달하는모든레지스터를외우고있을필요는없으며각레지스터의주요역할과이름을서로연결시켜이해를한다면도움이될것으로보인다. 앞으로 BLDC의기본원리및응용을위한실습을단계적으로수행하면서각각의레지스터의기능을이해하고사용하게될것이므로그때마다그역할과원리를충실히이해할수있기를바란다. PTCON: PWM Time Base Control Register 312 -PWM타이머의모드및클럭설정 PTMR: PWM Time Base Register -PWM타임카운터값및방향 PTPER: PWM Time Base Period Register -PWM주기설 SEVTCMP: PWM Special Event Compare Register - 특수이벤트설정 (PTMR 과비교) PWMCON1: PWM Control Register 1 -PWM출력용 I/O포트의설정 PWMCON2: PWM Control Register 2 - 특수이벤트, 동기설정등 DTCON1: Dead Time Control Register 1 - 데드타임시간설정

30 Chapter 5. 브러시리스모터(Brushless Motor) DTCON2: Dead Time Control Register 2 - 각 PWM 채널에대한데드타임모드설정 FLTACON: Fault A Control Register -Fault입력 A설정 FLTBCON: Fault B Control Register -Fault입력 B설정 PDCx: PWM Duty Cycle Register x, x=1,2,3,4 -PWMx 채널의듀티사이클설정 < 그림 5-8> dspic30f 모터컨트롤제품군 313

31 Motor Control PWM 출력오버라이드(Override) 실습 - Lab1 dspic30f 디바이스의 PWM 출력오버라이드 (PWM Output Override) 기능을활용한 6-스텝커뮤테이션을실습에앞서준비과정으로써오버라이드기능에대해이해하도록하자. 본장에서는 dspic30f에대한이해를충분히하고 BLDC 모터의기본구동원리인 6- 스텝커뮤테이션에대해서는이후소개하도록하겠다. 앞서소개한마이크로칩의 MPLAB C30 컴파일러를이용하여다음순서에따라코드를작성해보도록하자. 필자는모터컨트롤과관련된부분에대해서만주로소개하고자하므로상세한설명이부족할수있음을양해바라며부족한내용은참고문헌을참조해주길바란다. 1. 헤더파일포함 MPLAB C30 컴파일러의디바이스헤더파일은디폴트로 "C:\Program Files\ Microchip\MPLAB C30\support\h" 폴더에위치하고있으며, 우리가사용할디바이스인 dspic30f3010 의헤더파일인 "p30f3010.h" 파일을다음과같이삽입하면된다. < 사용예> #include "p30f3010.h" 2. Configuration Bits 설정 Configuration Bits는마이크로컨트롤러디바이스에서제공하는특별한기능들을프로그램메모리영역에위치하고있는컨피그레이션(Configuration) 메모리의각비트들을의미하며간단한비트설정만으로특수기능들을편리하게설정및사용할수있다. 설정방법은 MPLAB IDE에서 Configuration Bits 윈도우를이용하여설정하는방법과소스코드내에 C30 매크로함수를이용하여설정하는방법이있다. 매크로함수를이용하여소스코드에설정하게되면컴파일수행후 HEX 파일에그설정값이최우선반영되며, 이값들은 MPLAB IDE의 Configuration Bits 윈도우를통하여확인이가능하다. 또한 Configuration Bits 윈도우를이용하여설정값들을추가변경하여디바이스에최종프로그래밍할수도있다. 가급적이면 Configuration Bits 설정은매크로함수를이용하여소스코드에추가하는방법을습관화할것을권장한다. 314

32 Chapter 5. 브러시리스모터(Brushless Motor) < 그림 5-9> Configuration Bits 설정화면 Configuration Bits 설정을위한매크로함수는해당디바이스의헤더파일인 "p30f3010.h" 파일의마지막부분에예제와함께선언되어있으므로굳이이함수를외울필요는없으며원하는설정에맞는매크로함수를선택하여소스코드에복사하여붙여넣으면된다. 아래 Configuration Bits 설정예에서가장중요한부분은오실레이터설정부분이다. 입문자들이흔히하는실수가바로오실레이터의설정을정확히하지못하여디바이스가동작하지않는경우이므로, 데이터시트의오실레이터부분을참조하여정확히설정하도록주의해야한다. // Configuration Bits 설정매크로함수 (p30f3010.h 파일참조) _FOSC(CSW_FSCM_OFF & XT_PLL8); // Clock Switching : Disabled, Clock Monitor : Disabled // Oscillator : XT w/pll 8x _FWDT(WDT_OFF); // Watchdog Timer Disabled _FBORPOR(PBOR_ON & BORV_20 & PWRT_64 & MCLR_EN); // PBOR : Enabled, BOR Voltage:2.0V, // POR Timer:64ms, MCLR : Enabled 우리가실습할보드에는 5MHz 의크리스탈오실레이터가연결되어있으므로, 이것을 PLL을이용하여 8 체배하여사용하게되면시스템의클럭(Fosc) 는 5MHz x 8 = 40MHz 315

33 Motor Control 가된다. 그리고 dspic30f 의명령어사이클(Instruction Cycle, Fcy) 은시스템클럭을 4 분주하여사용하기때문에이경우인스트럭션사이클(Fcy) 은 Fosc/4 인 10[MHz] 또는 10[MIPS] 가된다. 참고로 dspic30f는최대 30MIPS 처리속도까지설정하여활용할 수있다. 명령어사이클(Fcy) 은마이크로컨트롤러의명령어처리주파수를의미하며위의경우 1초에 10,000,000 개의명령어를수행한다는말이된다. 이미알고있겠지만여기에서 말하는명령어는어셈블리명령어를의미한다. 따라서 Fcy는마이크로컨트롤러의명령어 처리속도를판단할수있는매우중요한개념으로사용되며단위표기로써 MHz 뿐만 아니라 MIPS(Mega Instructions Per Second) 가주로사용된다. 참고로여기에서말하 는명령어는분기명령어등을제외한기본어셈블리명령어를의미한다. < 예> XTAL = 5MHz, PLL 8x 사용시 시스템클럭주파수(Fosc) = 오실레이터주파수 x N(PLL) =5MHzx8=40MHz 명령어사이클 (Fcy) = Fosc / 4 = 10 Mhz *** Fosc : 마이크로컨트롤러동작을위한오실레이터모듈의최종출력주파수 *** Fcy : 마이크로컨트롤러의명령어(Instruction) 처리주파수 3. 모터컨트롤 PWM 출력핀설정 dspic30f3010 디바이스의 I/O 핀중 "RE0~RE5" 는일반입/ 출력또는 3채널 PWM 출력으로사용할수있다. 이들 6개의 I/O 핀을모터컨트롤 PWM으로사용하기위해서 PWMCON1 레지스터의각비트를이용하여 PWM 출력으로설정한다. 참고로 dspic30f5015, 6010 등의일부모터컨트롤제품은 4채널 PWM 출력을제공하고있다. 예개의핀을출력핀으로설정독립모드 < > PWM1,2,3H/L 6 PWM ( ) PWMCON1 = 0x0777; // Enable PWM Pins 316

34 Chapter 5. 브러시리스모터(Brushless Motor) PMODx :PWM출력핀의모드설정 1=PWMI/O핀을개별독립출력모드로설정 0 = PWM I/O 핀을상호보완(Complementary) 출력모드로설정 PENxH : PWMxH I/O 핀동작설정 1=PWMxH핀을 PWM출력으로사용 0=PWMxH 핀을일반 I/O핀으로사용 PENxL :PWMxLI/O 핀동작설정 1=PWMxL핀을 PWM출력으로사용 0=PWMxL 핀을일반 I/O핀으로사용 < 그림 5-10> PWMCON1 레지스터 4. PWM 출력오버라이드기능설정 OVDCON 레지스터는각각의 PWM 출력핀을사용자임의로출력을제어할수있는오버라이드(Override) 기능을설정하기위해사용되는레지스터이다. OVDCON 레지스터는상위 8비트와하위 8비트가쌍으로이루어져있으며각 8비트들은 4채널 PWM 출력핀인 PWMxL 및 PWMxH 핀들의동작모드를설정하기위해사용되며, dspic30f3010 디바이스는 3채널 PWM 출력만을제공한다. 317

35 Motor Control bit 15-8 bit 7-0 POVD4H-POVD1L: PWM Output Override bits 1 = PWMxx 핀의출력은 PWM 발생기에의해제어 0 = PWMxx 핀의출력은POUTxx 비트값에의해제어 POUT4H-POUT1L: PWM Manual Output bits 1 = PWMxx 핀은 POVDxx 비트가 "0" 일때 Active 상태 0 = PWMxx 핀은 POVDxx 비트가 "0" 일때 Inactive 상태 < 그림 5-11> OVDCON 레지스터설명 < 그림 5-11> 에서보는바와같이 OVDCON 레지스터의 <POVDx> 비트를 "1" 로설정하면해당 PWM 핀들의출력은 PWM 모듈의듀티사이클설정에의해서 PWM 파형이출력되며, "0" 로설정하면해당 PWM 핀들의출력은 <POUTx> 비트들의설정값이마치 I/O 포트의출력처럼 Active 또는 Inactive 상태로출력된다. < 예1> 모든PWM 출력핀을 "Inactive" 로출력 (No PWM) OVDCON = 0x0000; // Turn OFF all LEDs < 예2> PWM1L, PWM2L, PWM3L 핀을 "Active" 로출력 (No PWM) OVDCON = 0x0015; // PWM1L, PWM2L, PWM3L : Active 318

36 Chapter 5. 브러시리스모터(Brushless Motor) 5. 타이머 1 설정 dspic30f의타이머의동작은 TxCON 레지스터의설정조건에따라자동으로증가하는타이머레지스터 TMRx 와주기설정레지스터인 PRx 의값이같아지면인터럽트플래그 (TxIF) 가 "1" 로 Set 되며이후마이크로컨트롤러의인터럽트컨트롤러에의해서처리된다. < 그림 5-12> 타이머1 모듈의블록다이어그램 319

37 Motor Control bit 15 TON: Timer On Control bit 1 = 타이머시작(Start) 0 = 타이머정지(Stop) bit 14 bit 13 Unimplemented: Read as '0 ' TSIDL: Stop in Idle Mode bit 1 = 아이들(Idle) 모드에서타이머동작안함(Stop) 0 = 아이들(Idle) 모드에서타이머동작유지 bit 12-7 bit 6 Unimplemented: Read as '0 ' TGATE: Timer Gated Time Accumulation Enable bit 1 = Gated time accumulation 사용(Enabled) 0 = Gated time accumulation 사용안함(disabled) (TGATE=1 일때,TCS=0 으로설정되어야함, 만약 TCS=1 이면, 항상 "0" 으로읽어짐) bit 5-4 TCKPS<1:0>: Timer Input Clock Prescale Select bits 11 =1:256프리스케일 10 =1:64프리스케일 01 =1:8프리스케일 00 =1:1프리스케일 bit 3 bit 2 Unimplemented: Read as '0 ' TSYNC: Timer External Clock Input Synchronization Select bit When TCS = 1: 1 = 외부클럭입력에동기 0 = 외부클럭입력에비동기 When TCS = 0: TSYNC 설정무시됨.("0" 로읽어짐), TCS = 0 이면, 타이머 1은내부클럭이용 bit 1 TCS: Timer Clock Source Select bit 1 =TxCK 핀의외부클럭(Externalclock) 을타이머1 클럭소스로이용 0 = 내부클럭(Internal clock) 이용, (Fcy = FOSC/4), bit 0 Unimplemented: Read as '0 ' 타이머-1 모듈을이용하여 500 msec마다타이머-1 인터럽트가발생할수있도록설정해보자. 먼저타이머-1 인터럽트의주기는 PR1 레지스터와타이머-1의프리스케일값에의해서다음과같이결정되어진다. 320

38 Chapter 5. 브러시리스모터(Brushless Motor) <PRx 레지스터값구하기> 타이머-1 주기 =(Timer1 프리스케일값 xpr1)/fcy = (256 x PR1) / PR1 = 타이머1 주기[s] x Fcy[Hz] / Timer1 프리스케일 = 0.5[s] x [Hz] / 256 = Timer1 프리스케일 : 1:256으로설정 Fcy=Fosc/4=40MHz/4=10MHz 이제계산된타이머-1 모듈의 PR1 값과프리스케일값을이용하여 0.5s 마다인터럽트가발생하도록코드를작성해보자. void InitTMR1(void) { TMR1 = 0x0000; // TMR1 레지스터초기화 PR1 = 19531; // PR1 = 0.5 * 10,000,000 / 256 T1CON = 0x0030; // 프리스케일 = 1:256 IFS0bits.T1IF = 0; // clear interrupt flag IEC0bits.T1IE = 1; // enable T1 interrutp return; } 이제 0.5초마다타이머-1 인터럽트가발생하면 OVDCON 레지스터를이용하여 PWM 출력을변경하는타이머-1 인터럽트서비스루틴을작성해보자. void attribute (( interrupt,auto_psv)) _T1Interrupt(void) { IFS0bits.T1IF = 0; // Clear Timer Flag OVDCON ^= 0x0015; // Toggle Pins PWM1L, PWM2L, PWM3L return; } 321

39 Motor Control < 주의사항> 타이머-1 인터럽트서비스루틴에서는위의소스코드에서처럼반드시타이머-1 인터럽트플래그(T1IF) 를소프트웨어에서 "0" 으로클리어해야한다. 그렇지않으면타이머-1 인터럽트서비스루틴을빠져나갔을때타이머-1 인터럽트플래그(T1IF) 가여전히 "1" 로셋(Set) 되어있기때문에 CPU는기존에수행했던 main() 함수의루틴으로복귀하지못하고타이머-1 인터럽트서비스루틴을반복하는오류를범하게되기때문이다. 이와같은현상은모든인터럽트에대해서동일하게적용되므로인터럽트서비스루틴내에서는반드시해당인터럽트플래그를클리어("0") 하는명령어를사용해야한다는점에주의해야한다. 다음은 main() 함수루틴에서스위치를누르면타이머-1을동작시킴으로써 LED의토글명령을일정간격으로반복하고, 다시스위치를누르면타이머1의동작을멈추게하기위한코드이다. int main(void) { ADPCFG = 0xFFF8; // all PORTB = Digital;RB0 to RB2 = analog PWMCON1 = 0x0F77; // Enable PWM Pins InitTMR1(); // Initialize Timer 1 for periodic ISRs while(1) { OVDCON = 0x0000; // Turn OFF all LEDs while (S2); // wait till S2 is pressed DelayNmSec(30); // 스위치채터링방지 while (!S2); // if pressed wait till S2 is released DelayNmSec(30); // 스위치채터링방지 T1CONbits.TON = 1; // 타이머-1 동작시작 while (S2); // wait till S2 is pressed DelayNmSec(30); // 스위치채터링방지 while (!S2); // if pressed wait till S2 is released DelayNmSec(30); // 스위치채터링방지 T1CONbits.TON = 0; // 타이머-1 정지 } return; } 322

40 Chapter 5. 브러시리스모터(Brushless Motor) 지금까지작성한코드를프로그래밍후실행해보면그림과같이 PWM1L, PWM2L, PWM3L 핀으로 500ms 주기의펄스출력을얻게된다. < 그림 5-13> PWM 핀의출력파형 이번실습은오버라이드기능을이용하여 6-스텝커뮤테이션을수행하기위한사전준비과정으로생각해주길바라며본서적에서소개된실습코드는한국마이크로칩웹사이트( 의자료실을통해제공하도록하겠다 스텝커뮤테이션 (Six Step Commutation) 스텝커뮤테이션의이해 앞서언급했듯이 BLDC 모터는 DC 모터와달리정류용브러시가없기때문에전기적인방식으로정류를수행해야한다. < 그림 5-14> 와같이 BLDC 모터의고정자권선으로부터인출된 3 개의터미널(A/B/C 또는 U/V/W) 중 2개의터미널에그림과같이정해진순서대로전류를흘려주게되면고정자권선에서발생한회전자계에의해서영구자석 (2 극) 이부착된회전자는시계반대방향으로회전하게될것이다. 이러한전류흐름의변환과정을전기적커뮤테이션또는정류라부른다. 323

41 Motor Control 1 전류방향: G선 B 선 ( 회전자:90 ) 2 전류방향: G선 R 선 ( 회전자:30 ) 3전류방향:B선 R 선 ( 회전자:330 ) 4전류방향:B선 G 선( 회전자:270 ) 5전류방향:R선 G 선 ( 회전자:210 ) 6전류방향:R선 B 선( 회전자:150 ) < 그림 5-14> BLDC 모터의정류(Commutation) 시퀀스 따라서그림과같이 3개의고정자권선중 2개의권선에전류를흘려주는방법은총 6 가지가되며, 이를정해진순서대로수행해주면영구자석의회전자가회전하게되는결과를얻을수있게된다. 그림에서모터의회전자는한쌍의 N 극/S극으로구성된 2극 (pole) 모터에해당되므로, 한스텝의정류시퀀스마다회전자는 60 (=360 /6) 각도의회전이발생하게되며총 6-스텝의정류시퀀스를수행하게되면회전자는 1회전 (360 ) 하게되는결과를얻을수있게된다. 이와같이브러시를대신하여 BLDC의정류를수행하는방법을 6- 스텝커뮤테이션(Six Step Commutation) 이라부른다. 그러면이제 6- 스텝커뮤테이션을구현하기위한방법에대해살펴보도록하자. 3상 BLDC 모터의 6-스텝커뮤테이션을위해서는총 6개의스위칭소자로이루어진 3 상인버터회로가필요하다. 이들 6 개의스위칭소자는 < 그림 5-15> 와같이각각위/ 아 324

42 Chapter 5. 브러시리스모터(Brushless Motor) 래 2쌍의스위칭소자로이루어진 3개의하프-브리지회로로구성되며각각의하프-브리지회로의중심탭은 BLDC 모터의각각의모터권선과연결되어있다. 또한각스위칭소자의게이트는드라이버 IC를통해마이크로컨트롤러의 6개의모터컨트롤 PWM 핀들과연결되어있다. < 그림 5-15> 3상인버터및 BLDC 모터의연결 이제위회로를이용하여 6- 스텝커뮤테이션을수행하는방법에대해살펴보자. < 그림 5-16> 과같이 3개의상단스위칭소자중전류를인입시키고자하는모터권선에연결된 1 개의스위치소자를온(On) 상태로, 이와동시에 3개의하단스위칭소자중전류를인출시키고자하는모터의권선에연결된 1 개의하단스위칭소자를온(On) 상태로유지하고나머지 4 개의스위칭소자는모두오프(Off) 상태로유지함으로써모터권선에흐르는전류의방향을제어할수있게된다. 이러한과정을총 6 단계로구분할수있으며일련의과정으로수행함으로써 6-스텝커뮤테이션을전기적으로수행할수있게되는것이다. < 그림 5-16> 은 6-스텝커뮤테이션을통해 3상의모터권선에흐르는전압과전류를표현한것이며, 각각 120 위상차를각각유지하고있으며, 60 구간마다스위칭시퀀스가변경되며이를총 6 개의섹터(0~5) 로구분하였음에주목하길바란다. 참고로여기에서말하는각도는전기적인각도이며, 모터의회전자의회전각도인기계적인각도는영구자석의극수에따라서결정되어지며,2극모터의경우 1-스텝당전기각과기계각은 60 로일치하며, 회전자의극수가 p이면될수록 1-스텝당기계각은 120 /p 가된다. 325

43 Motor Control 1 섹터0 / 전류(G B) / 회전자:90 2 섹터1 / 전류(G R) / 회전자:30 3섹터2/ 전류(B R)/ 회전자:330 4섹터3/ 전류(B G)/ 회전자:270 5섹터4/ 전류(R G)/ 회전자 :210 6섹터5/ 전류(R B)/ 회전자:150 < 그림 5-16> 6-스텝정류를위한스위칭시퀀스 326

44 Chapter 5. 브러시리스모터(Brushless Motor) 스텝커뮤테이션실습 - Lab2 (No PWM : 100% Duty Cycle) < 그림 5-17> 6-스텝실습회로구성 6- 스텝커뮤테이션실습을위한회로구성개념도이다. 실습보드의스위치를누르면 < 그림 5-16> 과같이 6-스텝커뮤테이션을위한전압시퀀스가 6개의 PWM 출력핀을통해출력하고자한다. 이때해당 BLDC 모터의동작상태을직접경험해보고그원리를이해할수있기를바란다. 1. 타이머1 초기화 먼저실험을위해타이머-1 인터럽트의주기를 2[ms]( 모터스펙에따라결정) 로설정하기위해아래와같이타이머-1 모듈을설정한다. 여기에서타이머-1 인터럽트주기인 2[ms] 은 6-스텝중 1-스텝에해당하는시간을의미하며그크기에의해서모터의회전 RPM 이결정되어진다. 또한 1-스텝에해당하는시간인타이머-1 인터럽트의주기는모터의스펙의속도특성을참조하여결정해야되며, 적절한수준으로설정하지않는다면모터의정상적인구동결과를얻을수없게되므로주의를필요로한다. <PR1 레지스터값구하기> 타이머1 주기 = ( 타이머 1 프리스케일값 x PR1) / Fcy = (1 x PR1) / PR1 = 타이머1 주기[s] x Fcy[Hz] / Timer1 프리스케일 = 0.002[s] x 10,000,000[Hz] / 1 = 20,000 Fcy = Fosc/4 = 40MHz/4 = 10MHz 327

45 Motor Control // Timer1 모듈초기화 :. TMR1 ISR 주기 = 2ms (Hurst Motor 의경우) void InitTMR1(void) { TMR1 = 0x0000; // TMR1 초기화 T1CON = 0x0000; // 1:1 Prescale Value PR1 = 20000; // TMR1 주기설정, PR1 = * 10,000,000 / 1 IFS0bits.T1IF = 0; // clear interrupt flag IEC0bits.T1IE = 1; // enable T1 interrutps return; } 2. 6-스텝커뮤테이션룩- 업테이블(Look Up Table) 작성 그림 < 그림 5-16> 을참조하여 6개의스텝각각에해당하는 OVDCON 레지스터설정값및이에따른 PWM 출력핀의출력상태를그림 < 그림 5-18> 과같이작성한다. < 그림 5-18> OVDCON 레지스터및 6-스텝커뮤테이션시퀀스 이와같이작성한 6-스텝커뮤테이션을위한룩-업테이블을배열로선언하면다음과같다. 참고로배열의내용은변경할필요가없는상수값을가지므로프로그램메모리에할당하기위해서 "const" 로선언하였다. 328

46 Chapter 5. 브러시리스모터(Brushless Motor) const unsigned int SixStepTable[] = { 0x0006, // Sector 0 /* PWM1H PWM2L */ 0x0012, // Sector 1 /* PWM1H PWM3L */ 0x0018, // Sector 2 /* PWM2H PWM3L */ 0x0009, // Sector3 /* PWM2H PWM1L */ 0x0021, //Sector 4 /* PWM3H PWM1L */ 0x0024}; // Sector 5 /* PWM3H PWM2L */ 3. OVDCON 레지스터업데이트 ( 타이머-1 인터럽트서비스루틴) 이제작성한테이블을일정시간간격(2[ms]) 으로호출되는타이머-1 인터럽트서비스루틴에서 OVDCON 레지스터에업데이트하는코드를작성한다. // Timer 1 Interrupt Service Routine void attribute (( interrupt,auto_psv)) _T1Interrupt(void) { IFS0bits.T1IF = 0; OVDCON = (int)sixsteptable[sstindex++]; if (SSTIndex == 6) SSTIndex = 0; return; } 329

47 Motor Control 4. main() 함수작성 이제다음과같이스위치입력처리를위한 main() 함수의알고리즘을코딩한다. int main(void) { ADPCFG = 0xFFF8; PWMCON1 = 0x0777; InitTMR1(); // all PORTB = Digital;RB0 to RB2 = analog // Enable PWM outputs // Initialize 2 ms ISR } while(1) { OVDCON = 0x0000; // Turn OFF all LEDs while (S2); // wait till S2 is pressed DelayNmSec(30); // 스위치채터링방지 while (!S2); // if pressed wait till S2 is released DelayNmSec(30); // 스위치채터링방지 T1CONbits.TON = 1; // 타이머-1 동작시작 while (S2); // wait till S2 is pressed DelayNmSec(30); // 스위치채터링방지 while (!S2); // if pressed wait till S2 is released DelayNmSec(30); // 스위치채터링방지 T1CONbits.TON = 0; // 타이머-1 정지 } return; 5. 프로그래밍및실행 이제스위치를누르면 2[ms] 간격으로 6-스텝커뮤테이션전압시퀀스가 3상인버터를통해 BLDC 모터에인가될것이며이에따른전류가 3개의모터권선중시퀀스에따라 2 개의권선에전류의경로가형성될것이다. 마이크로컨트롤러의 PWM 채널의출력및이때의홀센서출력을오실로스코프를통해측정한파형은 < 그림 5-19> 와같다. 6-스텝커뮤테이션의주기는 12[ms] (= 6 x 2[ms]) 이며, 홀센서의출력신호도 6- 스텝커뮤테이션의주기인 12[ms] 로동일하다. 이들홀센서신호는이번실습에서는사용하지않았지만피드백제어를위한이후실습에서사용하게될것이므로주의깊게관찰해주길바란다. 330

48 Chapter 5. 브러시리스모터(Brushless Motor) 1 PWMx 핀출력파형 2 Hall 센서출력파형 < 그림 5-19> 6-스텝커뮤테이션의전압시퀀스및홀센서신호 여기에서잠깐모터의회전속도(RPM) 에대해생각해자. 실습에서사용한 BLDC 모터는회전자가 10 극인모터이다. 모터의극수만알고있다면위의전압시퀀스를이용하여이모터의회전속도(RPM) 를다음과같이계산할수있다. 전기적주파수 동기속도 모터의극수 f : 전기적주파수 P: 회전자의극수 (10 극) 다음그림에보이는파형은이번실습을수행함에따른마이크로컨트롤러의 PWM 출 력포트의신호및 U 상에흐르는전류를측정한결과이다. 아직까지는듀티사이클이적 용하고있지않았기때문에 PWM 포트의출력신호의파형은 100% 듀티사이클의신호 라고생각해도무난하다. 331

49 Motor Control < 그림 5-20> 6-스텝커뮤테이션수행시 PWM 출력및 U상전류 홀-센서피드백 6-스텝커뮤테이션의개요 지금까지는홀- 센서신호의피드백없이정해진시간간격(6 x 2[ms]) 으로 6-스텝커뮤테이션수행을통해모터를구동하였다. 이와같이구동하게되면회전자의위치검출없이모터를강제로구동하는방식이기때문에회전자의회전속도는고정자에인가되는전기적인 6- 스텝전압시퀀스의주파수에의해서결정이되어진다. 또한회전자의위치검출없이임의로 6-스텝시퀀스를수행하기때문에경우에따라서는정상적인모터의구동특성을얻을수없게될뿐아니라토크특성도이상적인결과를얻을수없게된다. 홀-센서의신호를통해회전자의위치를정확하게검출하고이를통해회전자의위치에맞는 6- 스텝커뮤테이션신호를고정자권선에인가하는방식을실습해보도록하자. 본실습은 Hurst 모터에부착된 3개의홀- 센서출력을 < 그림 5-20> 과같이피드백받아서마이크로컨트롤러의 I/O 포트입력을통해 <Hall C : Hall B : Hall A> 의신호를읽고이값으로부터 6- 스텝커뮤테이션의시퀀스를결정하고자한다. 그렇다면, 홀-센서신호와 6-스텝시퀀스사이에는어떠한관계가있는지먼저살펴보도록하자. 332

50 Chapter 5. 브러시리스모터(Brushless Motor) < 그림 5-21> 홀-센서를이용한 6-스텝커뮤테이션실습회로 본실습에서사용하는 Hurst 모터의홀-센서신호는상호 120도위상차를갖기때문에 < 그림 5-22> 와같이총 6 개의상태가존재한다. 이들홀-센서의신호를 2진수로환산하여다시읽어보면 1 에서 6 사이의값을갖고있기때문에이들값을이용하여 6- 스텝커뮤테이션의전압시퀀스를역으로찾을수있게된다. 따라서홀-센서의피드백신호를이용하여회전자의현재의위치를검출하고이로부터회전자를다음위치로회전시키기위한스위칭시퀀스를찾는방법이다. < 그림 5-22> 6-스텝커뮤테이션과홀- 센서신호관계 (CW 회전) 333

51 Motor Control < 그림 5-23> 6-스텝커뮤테이션과홀- 센서신호관계 (CCW 회전) 먼저 BLDC 모터의제품사양서또는오실로스코프를이용한측정파형을기준으로 < 그림 5-22, 23> 과같이역기전력과홀- 센서신호와의상관관계를찾는다. 여기에서소개한것은사다리꼴파형의역기전력을갖는특정 BLDC 모터를예로든경우이며, BLDC 모터의제조사양에따라서홀센서와 6-스텝커뮤테이션과의관계는차이가있으므로오실로스코프를이용하여정확한특성을측정해기를권장한다. 실습에서사용하고있는 Hurst 모터는정현파형태의역기전력특성을갖는영구자석형동기전동기(PMSM) 이기때문에위의그림과분명히다른특성을갖지만독자들의이해를돕고자본장에서는위의그림을이용하고이책의마지막실습에서는정현파구동실습을통해서 Hurst 모터의실제홀-센서및역기전력과의상관관계에대해설명하도록하겠다 홀-센서피드백 6-스텝커뮤테이션실습- Lab 3 (No PWM : 100% Duty Cycle) 이제홀-센서피드백을이용한 6- 스텝커뮤테이션실습을수행해보자 스텝테이블작성( 홀- 센서신호를배열의인자로이용) 위의 < 그림 5-22, 23> 을이용하여 6가지의홀-센서신호에대한 PWM 출력을 OVDCON 레지스터에출력하기위한배열을작성한다. 이때배열의순서는홀-센서신호의값으로한다. 334

52 Chapter 5. 브러시리스모터(Brushless Motor) const unsigned int SixStepTable[] = { 0x0000, /* Invalid! */ // 홀- 센서입력 : 000 0x0021, /* PWM3H PWM1L */ // 홀- 센서입력 : 001 0x0006, /* PWM1H PWM2L */ // 홀- 센서입력 : 010 0x0024, /* PWM3H PWM2L */ // 홀- 센서입력 : 011 0x0018, /* PWM2H PWM3L */ // 홀- 센서입력 : 100 0x0009, /* PWM2H PWM1L */ // 홀- 센서입력 : 101 0x0012, /* PWM1H PWM3L */ // 홀- 센서입력 : 110 0x0000};/* Invalid! */ // 홀- 센서입력 : 홀-센서입력값에따른PWM 출력설정 우리가사용하는회로에서는 3개의홀- 센서입력 <Hall C : Hall B : Hall A> 값을 PORTB 의 <RB5:RB4:RB3> 핀을이용하여읽고있다. 따라서이들 3개의비트값을 10진수로환산하기위해오른쪽으로 3비트쉬프트명령을수행한후이값을이용하여이미작성한룩-업테이블로부터알맞은전압시퀀스를찾아 OVDCON 레지스터에로딩만해주면된다. int main(void) { ADPCFG = 0xFFF8; PWMCON1 = 0x0777; // all PORTB = Digital;RB0 to RB2 = analog // Enable PWM outputs while (1) { OVDCON = 0x0000; while (S2); DelayNmSec(30); while (!S2); DelayNmSec(30); while (S2) { HallValue = PORTB & 0x0038; // RB5,4,3 읽음 HallValue = HallValue >> 3; // 오른쪽 3비트 shift OVDCON = (int)sixsteptable[hallvalue]; // 6-스텝업테이트 } 335

53 Motor Control OVDCON = 0x0000; DelayNmSec(30); while (!S2); DelayNmSec(30); // Turn off all FET } } return; 3. 프로그래밍및실행 이제스위치를누르면홀-센서신호의출력값에따른 6-스텝커뮤테이션전압시퀀스가자동으로적용되어 BLDC 모터가회전하게될것이다. 이때모터의회전이이전실험에비해훨씬부드럽고빠르며, 소음또한현저히감소한것을피부로느낄수있을것이다. 어떠한일이발생했는지확인해보도록하자. 오실로스코프를이용하여 PWM 출력핀과홀- 센서출력파형을측정한결과인 < 그림 5-24> 를살펴보자. 그림에서 6-스텝전압시퀀스및홀-센서출력신호의주기는 3.68ms 이며주파수는 271Hz 이다. 그렇다면이때 BLDC 모터의회전속도(RPM) 은얼마나되는지계산해보도록하자. < 계산식> 회전속도(RPM) =(120x 전기주파수)/ 극수 = (120 x 271) / 10 = 3,250 [rpm] 현재 BLDC 모터의회전속도(RPM) 는분당 3,250 바퀴를회전하고있다. 이전실습-2 에서수행한실험에서는 12ms를주기로강제로 6-스텝커뮤테이션을수행했기때문에분당 1,000 바퀴를회전하는것으로계산이되었었다. 이번실습-3 에서는 6-스텝커뮤테이션의주기를임의로결정하지않고홀-센서신호가입력되는대로그에상응하는 6- 스텝커뮤테이션신호를출력하였다. 그결과약 3,250 rpm의회전속도를얻었다는것으로부터우리는현재사용하고있는 Hurst 모터는 DC 24V, 무부하상태에서 3,250 rpm 의회전속도특성을갖는다는것을예상할수있는것이다. 336

54 Chapter 5. 브러시리스모터(Brushless Motor) 1 PWMx 핀출력파형 2 Hall 센서출력파형 < 그림 5-24> 6- 스텝커뮤테이션의전압시퀀스 (CW 회전) 그렇다면필자의말이사실인지 Hurt 모터의데이터시트를확인해보자. < 그림 5-25> 는 Hurt 모터의토크대속도특성그래프이다. 그림에서무부하시의모터속도(RPM) 을확인해보면약 3,150 RPM 정도표시된것을확인할수있다. 이표시가현재사용하는모터의무부하정격조건에서의모터속도를의미하는것이다. < 그림 5-25> Husrt 모터의특성그래프 337

55 Motor Control 다음은이번실습을수행시 PWM 포트의출력및 U 상의전류측정결과이다. < 그림5-26> PWM 포트의출력및전류파형 모터컨트롤 PWM 모듈소개 지금까지수행한 3가지실습은 100% 듀티사이클을이용하였지만모터컨트롤 PWM 모듈을이용한듀티사이클을활용하기위해서는타이머와유사한원리로동작하는모터컨트롤 PWM 타임베이스에대해먼저이해하고있어야한다. 모터컨트롤 PWM 발생을위해사용되는전용타이머인 PWM 타임베이스의기본원리는 PWM의주기설정값인 PTPER의 15 비트값( 최상위 1 비트는사용안함) 과자동증가카운터인 PTMR 의값( 최상위 1비트는 Up/Down 카운팅상태를표시) 을비교기를통해서로비교하여그값이일치하는순간새로운듀티사이클을업데이트하는방식으로동작을한다. 따라서 PTPER 레지스터는사용자에의해계산된 PWM 주기에해당하는값을설정값으로확정이되며,PTMR레지스터는타이머레지스터와마찬가지로시스템클럭및프리스케일값에의해설정된기준클럭으로자동카운팅동작을하게된다. 338

56 Chapter 5. 브러시리스모터(Brushless Motor) < 그림 5-27> PWM Time Base 블록다이어그램 PWM 타임베이스는 PTEN 비트(PTCON<15>) 에의해서동작/ 정지되며, PTEN 비트를소프트웨어에의해 "0" 으로클리어시키면 PTMR 레지스터는 "0" 으로클리어된다. 참고로,PWM타임베이스는다음 4 가지모드를제공해준다. Free Running Mode : PTMOD<1:0> = 00 - PTMR 레지스터는 PTPER 의값과일치할때까지증가. 두값이일치하면 PTMR은 "0" 으로클리어후다시증가 (PTEN = 1 유지시) - 포스트스케일러설정(PTOPS<3:0>) 에의해인터럽트발생 339

57 Motor Control Single Event Mode : PTMOD<1:0> = 01 - PTMR 레지스터는 PTPER 의값과일치할때까지증가. 두값이일치하면 PTMR은 "0" 으로클리어후카운팅중지. 이때 PTEN 은자동으로 "0" 으로클리어된다. 즉, 한번만동작한다. - 포스트스케일러설정(PTOPS<3:0>) 에의해인터럽트발생 Continuous Up/Down Count Mode : PTMOD<1:0> = 10 - PTMR 레지스터는 PTPER 의값과일치할때까지증가. 두값이일치하면 PTMR은다시 "0" 이될때까지감소. PTDIR 비트는 PTMR 증가시 "1", 감소시 "0" 이되며 PTMR 의카운팅방향을의미한다. - 포스트스케일러설정(PTOPS<3:0>) 에의해인터럽트발생 Continuous Up/Down Count Mode with double-updates : PTMOD<1:0> = 11 - PTMR 레지스터는 PTPER 의값과일치할때까지증가. 두값이일치하면 PTMR은다시 "0" 이될때까지감소. PTDIR 비트는 PTMR 증가시 "1", 감소시 "0" 이되며 PTMR 의카운팅방향을의미한다. - 인터럽트발생은포스트스케일러의설정과무관하며 PTMR 레지스터가 PTPER과일치할때와"0" 가될때모두발생한다. 즉, 매 PWM 주기에 2번의듀티사이클업데이트가가능하므로제어주기를 2 배빠르게할수있다. 지금까지 PWM 주파수( 또는주기) 를결정하기위해사용되는중요한역할을담당하는 PTMR 레지스터와 PTPER 레지스터의관계에대해좀더살펴보도록하자. 우리가소프트웨어에서 PWM 주파수를결정하는 PTPER 의값을변경할경우, 이값은언제반영이될지생각해보자. 아리 < 그림 5-28> 과같이 PTMR 레지스터는 PTPER과일치할때까지지속적으로증가하고다시 0 부터카운팅을시작하게된다. 만약이과정중에 PTPER 값을변경시킨다면이값은 PTMR 값이 0부터다시카운팅을시작하는시점즉, 다음주기부터반영이되며이러한동작을위해이전 PTPER 레지스터값을저장하기위한버퍼가존재한다. 340

58 Chapter 5. 브러시리스모터(Brushless Motor) < 그림 5-28> Free Running 모드에서의 PWM 주기업데이트 Free Running 및 Single Event 모드는기본적으로동일한원리로동작을하며이때 PWM 주파수를위한 PTPER 값의계산은다음과같다. [ Free Running/Single Event 모드의 PTPER 계산 ] : PTMOD = 00 or 01 Continuous Up/Down Counting 모드는 < 그림 5-29> 와같이 PTMR 레지스터값이증가및감소를반복한다는점에서 Free Running 모드와차이가있으며, 새로변경된 PTPER 값은 Free Running 모드와마찬가지로 PTMR 값이 "0" 가될때반영된다. 341

59 Motor Control < 그림 5-29> Continuous Up/Down Counting 모드에서의 PWM 주기업데이트 Continuous Up/Down Counting 모드는 PTMR의증가및감소가완전히이루어졌을때가 1주기를이루기때문에 Free Running 모드와동일한 PWM 주파수를얻기위해서는 PTPER 값이 1/2 로감소한다는점이특징이다. 참고로필자는 Free Running과 Continuous Up/Down Counting 모드의개념을제대로이해하지못하여혼동을겪는경우를종종보아왔다. 이제모터컨트롤 PWM 모듈에서 PWM 주파수( 또는주기) 와함께중요한개념인듀티사이클비교로직에대해살펴보자. PTPER 레지스터와함께가장중요한개념인듀티사이클레지스터인 PDC 레지스터는 PWM 타임베이스의타이머레지스터인 PTMR 레지스터(15 비트) 와비교기를통해비교가수행되며그결과가일치하는시점에 PWM 에지이벤트(PWM 출력핀의상태변화) 를발생시킨다. 이때, 아래 < 그림 5-30> 과같이이때 PDC 레지스터의총 16비트중상위 15비트인 PDCx<15:1> 값과 PTMR의 15비트값인 PTMR<14:0> 이서로비교기를통해비교된다는점에유의해야한다. 즉, PDC 레지스터는 PTMR 레지스터의 2 배가되기때문에 Edge Event가발생하는시간을 PWM 타임베이스대비 2배로정밀도를높일수있게된다. 342

60 Chapter 5. 브러시리스모터(Brushless Motor) < 그림 5-30> 듀티사이클비교로직 예를들어 PWM 타임베이스가 1:1 프리스케일로설정되어있다면 PTMR은 1 Tcy 마다 증가하게되며 PDC<15:1> 과일치할때 PWM 신호의에지( 상승또는하강) 가발생하게되지만이때 PDC 레지스터의최하위비트인 PDC<0> 값에의해서 < 그림 5-31> 과같이 0 Tcy 또는 1/2 Tcy 이후에 PWM 신호의에지가발생되는지여부가결정된다. 즉, PWM 듀티의분해능이 PTMR 대비 2 배향상되는결과를얻을수있다. < 그림 5-31> PTMR 과 PDC 타이밍도 (1:1 프리스케일적용예) 이러한설명이혼동이된다면이렇게이해하도록하자. PWM 타임베이스의프리스케일러가 1:1인경우 PTMR은 1 Tcy 마다 1 씩증가/ 감소하며, 이때 PDC 레지스터는 1/2 Tcy 343

61 Motor Control 시간에대한카운팅개수를의미한다. 참고로 PTPER은 PTMR과동일한스케일을갖는다. 즉, 100% 듀티사이클을위한 PDC 값은 PTPER 값의 2배인 2*PTPER이된다이와같은관계로부터듀티사이클의계산식은다음과같이표현할수있다. Free Running 모드의듀티사이클계산식: Continuous Up/Down 모드 : DT(Dead Time) : DTA<5:0> 및 DTB<5:0> PDC 의범위: 0 PDC 2*PTPER 설정값 지금까지설명한 PWM의주기와듀티사이클원리를바탕으로 Edge Aligned PWM 과 Center Aligned PWM 신호발생에대해살펴보도록하자. Edge Aligned PWM 신호는 PWM 타임베이스를 Free Running 모드로설정시 < 그림 5-32> 와같이 PWM의듀티사이클변화가 PWM 주기의 Edge 부분에서발생하게되며이때새로운듀티사이클인 PDCx 값이반영된다. 이때 PWM 1,2,3H 핀은 PTMR 값이 PDCx 의 1/2 보다작을때는 Active 상태(Active High 설정시 "High" 상태) 를유지하고, PDCx 의 1/2 보다큰구간에서는 Inactive 상태(Active High 설정시 "Low" 상태) 를유지하게된다. 만약듀티사이클을즉시업데이트시키고자한다면 IUE 비트 (PWMCON2<2>) 를 "1" 로 변경하는순간 PDCx 레지스터에새로운값이업데이트된다. 344

62 Chapter 5. 브러시리스모터(Brushless Motor) < 그림 5-32> Edge Aligned PWM 신호발생원리 Center Aligned PWM 신호는 Continuous Up/Down Counting Mode 설정 (PTMOD<1:0> = 1x) 시발생되며, PTMR이 PDCx의 1/2 보다작을때는 Active 상태를유지하고, PDCx의 1/2 보다큰구간에서는 Inactive 상태를유지한다는점에서는 Edge Aligned PWM 과동일하다. 하지만 PWM 주기동안 PTMR이 0부터 PTPER까지증가하고 PTPER부터 0까지다시감소하기때문에 PWM 신호의에지변화는중심(Center) 점을기준으로발생하게된다는점에서가장큰차이를가지고있다. Center Aligned PWM의경우듀티사이클의업데이트는 PTMOD<1:0> = 10 인경우, PTMR이 0가되는시점에서만업데이트가발생하며, PTMOD<1:0> = 11 인경우, PTMR이 PTPER과일치하는센터지점과 0이되는마지막부분에서각각업데이트되는 Double Update 방식이있다. < 그림 5-33> Center Aligned PWM 신호발생원리 345

63 Motor Control 끝으로데드타임 (Dead Time) 발생기에대해살펴보자. 데드타임발생기는 PWM 채널을상호보완적모드 (Complementary Mode) 사용시 < 그림 5-34> 와같이 PWMxH 및 PWMxL 핀이일정시간동시에 Inactive 상태를유지하도록함으로써스위칭소자의손실을방지하기위해사용된다. 모든스위칭소자는턴-온및턴- 오프에따른고유시간지연 (Ton 및 Toff) 특성을가지고있기때문에이러한점을고려하여상단및하단스위치소자가의도하지않게모두턴-온되는현상을방지하기위해일정시간모두턴- 오프되도록하기위해필요하다. < 그림5-34> Dead Time 삽입에따른PWM 출력파형 데드타임은 DTCON2 레지스터의 DTSxA와 DTSxI 비트설정에의해서 PWMxH 및 PWMxL 핀에각각추가될수있으며그시간은다음계산식에의해서결정된다. DT : DTA<5:0> 또는DTB<5:0> 의값 346

64 Chapter 5. 브러시리스모터(Brushless Motor) PWM 모듈에대한설명은관련레지스터에대한설명을끝으로마무리하고자하며, 부족한부분은 Family Reference Manual의 Motor Control PWM 부분을참조해주길바란다. PWM 타임베이스 : PWM 발생기를위한기준타이머로생각하면된다. bit 15 PTEN: PWMTimeBaseTimerEnablebit 1 =PWM 타임베이스온(ON) 0 = PWM 타임베이스오프(OFF) bit 14 Unimplemented: Read as '0 ' bit 13 PTSIDL: PWMTimeBaseStopinIdleModebit 1 = CPU가 IDLE 상태에서 PWM 타임베이스정지 0 = CPU가 IDLE 상태에서 PWM 타임베이스동작 bit 12-8 Unimplemented: Read as '0 ' bit 7-4 PTOPS<3:0>: PWM Time Base Output Postscale Select bits 1111 = 1:16 Postscale 0001 = 1:2 Postscale 0000 = 1:1 Postscale bit 3-2 PTCKPS<1:0>: PWM Time Base Input Clock Prescale Select bits 11 =PWM 타임베이스입력클럭주기 :64TCY(1:64prescale) 10 =PWM 타임베이스입력클럭주기 :16TCY(1:16prescale) 01 =PWM 타임베이스입력클럭주기 :4TCY(1:4prescale) 00 =PWM 타임베이스입력클럭주기 :TCY(1:1prescale) 347

65 Motor Control bit 1-0 PTMOD<1:0>: PWMTimeBaseModeSelectbits 11 = 더블 PWM 업데이트인터럽트로연속 Up/Down 카운팅모드로 PWM 타임베이스동작 10 = 연속 Up/Down 카운팅모드로 PWM 타임베이스동작 01 = 단일이벤트모드로 PWM 타임베이스동작 00 = 프리(Free) 동작모드로 PWM 타임베이스동작 bit 15 PTDIR: PWM Time Base Count Direction Status bit (Read Only) 1 =PWM 타임베이스카운팅다운(Down) 상태 0 =PWM 타임베이스카운팅업(Up) 상태 bit 14-0 PTMR <14:0>: PWM Timebase Register Count Value (PWM 기준카운터값) bit 15 Unimplemented: Read as '0 ' bit 14-0 PTPER<14:0>: PWMTimeBasePeriodValuebits(PWM 펄스의주기) 348

66 Chapter 5. 브러시리스모터(Brushless Motor) bit 15 SEVTDIR: Special Event Trigger Time Base Direction bit(1) 1 =PWM타임베이스가감소할때스페셜이벤트트리거발생 0 =PWM타임베이스가증가할때스페셜이벤트트리거발생 bit 14-0 SEVTCMP <14:0>: Special Event Compare Value bit(2) < 참고> 1: SEVTDIR 은 PTDIR (PTMR<15>) 와비교하여스페셜이벤트트리거를발생시킨다 2: SEVTCMP<14:0> 은 PTMR<14:0> 와비교하여스페셜이벤트트리거를발생시킨다. bit Unimplemented: Read as '0 ' bit 11-8 PMOD4:PMOD1: PWM I/O Pair Mode bits 1 =PWMI/O 핀을독립(Independent) 출력모드로설정 0 = PWM I/O 핀을상보(complementary) 출력모드로설정 : PWMxH/L 핀이서로반대신호출력 bit 7-4 PEN4H-PEN1H: PWMxH I/O Enable bits(1) 1 =PWMxH핀을 PWM출력모드로설정 349

67 Motor Control 0 =PWMxH핀을일반 I/O 포트모트로설정 (PWM 출력디스에이블) bit 3-0 PEN4L-PEN1L: PWMxL I/O Enable bits(1) 1 =PWMxL 핀을 PWM출력모드로설정 0 =PWMxL 핀을일반 I/O 포트모트로설정 (PWM 출력디스에이블) bit Unimplemented: Read as '0 ' bit 11-8 SEVOPS<3:0>: PWM Special Event Trigger Output Postscale Select bits 1111 = 1:16 Postscale 0001 = 1:2 Postscale 0000 = 1:1 Postscale bit 7-2 Unimplemented: Read as '0 ' bit 2 IUE: Immediate Update Enable bit(1) 1 = PDC 레지스터의업데이트를즉시수행 (PDC 값변경즉시반영) 0 = PDC 레지스터의업데이트를 PWM 타임베이스와동기화 (PWM 타임베이스새로 시작시반영 ) bit 1 OSYNC: Output Override Synchronization bit 1 = OVDCON 레지스터값의반영을 PWM 타임베이스에동기화 0 = OVDCON 레지스터값의반영을다음 Tcy에수행 bit 0 UDIS: PWM Update Disable bit 1 = PDC, PTPER 업데이트안함(Disabled) 0 = PDC, PTPER 업데이트수행(Enabled) 350

68 Chapter 5. 브러시리스모터(Brushless Motor) bit DTBPS<1:0>: Dead Time Unit B Prescale Select bits 11 =DeadTimeUnitB 의클럭주기:8TCY 10 =DeadTimeUnitB 의클럭주기: 4TCY 01 =DeadTimeUnitB 의클럭주기:2TCY 00 =DeadTimeUnitB 의클럭주기:TCY bit 13-8 DTB<5:0>: Unsigned 6-bit Dead Time Value bits for Dead Time Unit B bit 7-6 DTAPS<1:0>: Dead Time Unit A Prescale Select bits 11 =DeadTimeUnitA 의클럭주기:8TCY 10 =DeadTimeUnitA 의클럭주기:4TCY 01 =DeadTimeUnitA 의클럭주기: 2TCY 00 = Dead Time Unit A 의클럭주기: TCY bit 5-0 DTA<5:0>: Unsigned 6-bit Dead Time Value bits for Dead Time Unit A bit 15-8 Unimplemented: Read as '0 ' bit 7 DTS4A: Dead Time Select bit for PWM4 Signal Going Active 1 = Unit B 로부터 Dead Time 제공 0 = Unit A 로부터 Dead Time 제공 351

69 Motor Control bit 6 DTS4I: Dead Time Select bit for PWM4 Signal Going Inactive 1 =UnitB로부터 DeadTime 제공 0 =UnitA로부터 DeadTime 제공 bit 5 DTS3A: Dead Time Select bit for PWM3 Signal Going Active 1 =UnitB로부터 DeadTime 제공 0 =UnitA로부터 DeadTime 제공 bit 4 DTS3I: Dead Time Select bit for PWM3 Signal Going Inactive 1 =UnitB로부터 DeadTime 제공 0 =UnitA로부터 DeadTime 제공 bit 3 DTS2A: Dead Time Select bit for PWM2 Signal Going Active 1 =UnitB로부터 DeadTime 제공 0 =UnitA로부터 DeadTime 제공 bit 2 DTS2I: Dead Time Select bit for PWM2 Signal Going Inactive 1 =UnitB로부터 DeadTime 제공 0 =UnitA로부터 DeadTime 제공 bit 1 DTS1A: Dead Time Select bit for PWM1 Signal Going Active 1 =UnitB로부터 DeadTime 제공 0 =UnitA로부터 DeadTime 제공 bit 0 DTS1I: Dead Time Select bit for PWM1 Signal Going Inactive 1 =UnitB로부터 DeadTime 제공 0 =UnitA로부터 DeadTime 제공 352

70 Chapter 5. 브러시리스모터(Brushless Motor) bit 15-8 FAOV4H-FAOV1L: Fault Input A PWM Override Value bits 1 =FaultA입력이벤트입력시 PWM출력핀을 ACTIVE상태로유지 0 =FaultA입력이벤트입력시 PWM출력핀을 INACTIVE상태로유지 bit 7 FLTAM: Fault A Mode bit 1 = Fault A 입력핀의기능을 cycle-by-cycle 모드로설정 0 = Fault A 입력핀은 FLTACON<15:8> 설정값으로모든제어핀을래치(Latch) bit 6-4 Unimplemented: Read as '0 ' bit 3 FAEN4: Fault Input A Enable bit 1 = PWM4H/PWM4L 핀: Fault A 입력핀에의해제어됨 0 = PWM4H/PWM4L 핀 : Fault A 입력핀에의해제어되지않음 ( 무관함) bit 2 FAEN3: Fault Input A Enable bit 1 = PWM3H/PWM3L : Fault A 입력핀에의해제어됨 0 = PWM3H/PWM3L : Fault A 입력핀에의해제어되지않음 ( 무관함) bit 1 FAEN2: Fault Input A Enable bit 1 = PWM2H/PWM2L : Fault A 입력핀에의해제어됨 0 = PWM2H/PWM2L : Fault A 입력핀에의해제어되지않음 ( 무관함) bit 0 FAEN1: Fault Input A Enable bit 1 = PWM1H/PWM1L : Fault A 입력핀에의해제어됨 0 = PWM1H/PWM1L : Fault A 입력핀에의해제어되지않음 ( 무관함) bit 15-8 FBOV4H:FBOV1L: Fault Input B PWM Override Value bits 1 =FaultB입력이벤트입력시 PWM출력핀을 ACTIVE상태로유지 0 =FaultB입력이벤트입력시 PWM출력핀을 INACTIVE상태로유지 353

71 Motor Control bit 7 FLTBM: Fault B Mode bit 1 = The Fault B 입력핀의기능을 cycle-by-cycle 모드로설정 0 = The Fault B 입력핀은 FLTBCON<15:8> 설정값으로모든제어핀을래치(Latch) bit 6-4 Unimplemented: Read as '0 ' bit 3 FAEN4: Fault Input B Enable bit(1) 1 = PWM4H/PWM4L 핀: Fault A 입력핀에의해제어됨 0 = PWM4H/PWM4L 핀 : Fault A 입력핀에의해제어되지않음 ( 무관함) bit 2 FAEN3: Fault Input B Enable bit(1) 1 = PWM3H/PWM3L : Fault A 입력핀에의해제어됨 0 = PWM3H/PWM3L : Fault A 입력핀에의해제어되지않음 ( 무관함) bit 1 FAEN2: Fault Input B Enable bit(1) 1 = PWM2H/PWM2L : Fault A 입력핀에의해제어됨 0 = PWM2H/PWM2L : Fault A 입력핀에의해제어되지않음 ( 무관함) bit 0 FAEN1: Fault Input B Enable bit(1) 1 = PWM1H/PWM1L : Fault A 입력핀에의해제어됨 0 = PWM1H/PWM1L : Fault A 입력핀에의해제어되지않음 ( 무관함) < 참고> 1: Fault A 입력핀은 Fault B 입력핀보다우선반영됨 bit 15-0 PDC1<15:0>: PWM Duty Cycle #1 Value bits < 참고> PDC2, PDC3, PDC4 모두 PDC1 레지스터와동일함 354

72 Chapter 5. 브러시리스모터(Brushless Motor) bit 10 PWMPIN: MPWM Drivers Initialization bit 1=(PWMCON1<7:0>= 0x00 일때) 리셋시핀의상태는 I/O 포트에의해제어됨 0=(PWMCON1<7:0>= 0xFF 일때) 리셋시핀의상태는PWM 모듈에의해제어됨 bit 9 HPOL: MCPWM High Side Drivers (PWMxH) Polarity bit 1 = PWMxH 핀의출력을 Active High 로설정 0 = PWMxH 핀의출력을 Active Low 로설정 bit 8 LPOL: MCPWM Low Side Drivers (PWMxL) Polarity bit 1 = PWMxL 핀의출력을 Active High 로설정 0 = PWMxL 핀의출력을 Active Low 로설정 PWM 듀티사이클실습- Lab 4 ( 듀티사이클가변) 지금까지의실습은모터컨트롤 PWM 출력핀을듀티사이클이반영되지않은순수한 100% 펄스폭으로제어했기때문에모터의속도의제어가이루어지지않았다. 이제듀티사이클을반영한 PWM 출력으로 BLDC 모터의속도제어를수행해보도록하자. 이번실습은 < 그림 5-32> 와같이구성이되며, 가변저항의전위차를 A/D 컨버터를이용하여읽은후이값을 6- 스텝출력신호의펄스폭에반영하고자한다. 또한이전실습과달라진하나는 3개의홀- 센서신호를지속적으로읽는것이아니라, 입력변화감지 (Input Change Notification) 모듈을이용하여홀-센서신호의변화가발생하는 6개의구간을감지하여인터럽트방식으로처리하고자한다. 이렇게인터럽트방식을사용하게되면마이크로프로세서의불필요한 CPU 연산부하를방지할수있기때문에훨씬효율적인관리가가능하다. 355

73 Motor Control < 그림 5-35> PWM 듀티사이클을이용한속도제어실험구성도 1. 입력변화감지(Input Change Notification) 모듈설정 처음으로소개되는입력변화감지(Input Change Notification) 모듈에대해살펴보도록하자. 입력변화감지모듈은 8비트 PIC 마이크로컨트롤러의 PORTB 변화(Change) 인터럽트과거의유사한방식이며,dsPIC30F 제품군에서는해당핀을 CNx핀으로표기하고편의상 "CN 입력" 이라부르기로하겠다. 우리가사용하는 dspic30f3010 디바이스에는 CN 입력핀이총 8개가있으며이들 8 개의입력핀중 CNENx 레지스터의 <CNxIE> 비트가인에이블로설정된핀들중입력상태가 "H L" 또는 "L H" 로바뀔때인터럽트가발생하며 CN 인터럽트플래그(CNIF) 가 "1" 로셋된다. CN 모듈의블록다이어그램인 < 그림 5-36> 을통해알수있듯이 CN 모듈의입력은디바이스에따라서최대 24개까지확장이가능하지만인터럽트는오직하나밖에없다는점에주의하자. 즉, 인에이블로설정된 CNx 핀들중하나이상의핀에서입력값의변화가발생하면인터럽트가발생하게되는것이다. 어느핀에서에지변화가발생했는지는포트의값을읽어서이전값과비교하는방법을이용하여확인가능하다. 356

74 Chapter 5. 브러시리스모터(Brushless Motor) < 그림 5-36> CN 모듈의블록다이어그램 bit 15-0 CNxIE: Input Change Notification Interrupt Enable bits 1 = 입력변화인터럽트사용 (Enable) 0 = 입력변화인터럽트사용안함 (Disable) < 그림 5-37> CN 모듈설정레지스터 3개의홀-센서신호를 CN 인터럽트를이용하기위해서 < 그림 5-38> 과같이연결하고이들 3개의입력값의변화가발생하는순간이홀-센서값의변화가발생한순간이므로 이때 6-스텝전압시퀀스를홀- 센서의값에따라변화시키는원리를이용하고자한다. 357

75 Motor Control < 그림 5-38> CN 인터럽트를이용한홀-센서입력 CN 모듈의초기화설정은다음과같이한다. CN5,6,7 핀에홀-센서가연결되므로해당핀의 CN 기능을인에이블(Enable) 로설정하고, CN 모듈의인터럽트또한인에이블로설정한다. void InitCN(void) { CNEN1 = 0x00E0; IFS0bits.CNIF = 0; IEC0bits.CNIE = 1; return; } // Enable CN5, CN6 and CN7 // clear CNIF // enable CN interrupt 이제홀-센서의값이변화되면 CN 인터럽트플래그(CNIF) 가 "1" 로셋되면서아래의 인터럽트서비스루틴이호출되며, 이때홀-센서의값을이용하여 6-스텝시퀀스를제 어하면된다. void attribute (( interrupt,auto_psv)) _CNInterrupt (void) { IFS0bits.CNIF = 0; // clear flag HallValue = PORTB & 0x0038; // RB3,4,5 값읽기 HallValue = HallValue >> 3; // 데이터정렬 OVDCON = StateLoTable[HallValue]; // 6-스텝업테이트 return; } 358

76 Chapter 5. 브러시리스모터(Brushless Motor) 2. A/D 컨버터모듈설정 본서적에서는 A/D 컨버터에관한필요한부분만을다루고자하며, 보다자세한내용은 "dspic30f Family Reference Manual(DS70064)" 에 A/D 컨버터의각사용모드별자세한설명및예제코드까지제시되고있으므로이를참조하거나한국마이크로칩에서출간한 " 마이크로칩 16 비트마이크로컨트롤러의이해와응용" 을참조해도무난할것으로판단된다. < 그림 5-39> dspic30f 제품군의 A/D 컨버터모듈블록다이어그램 359

77 Motor Control dspic30f 제품군의 A/D 컨버터 모듈은 초당 1 메가 샘플링(10비트 컨버전시 1 MSPS) 또는 200 킬로샘플링(12비트컨버전시 200 KSPS) 의변환속도를지원하며, < 그 림 5-39> 와같이샘플앤홀더(S/H) 4개를가지고있기때문에동시에 4채널의입력에 대한샘플링이가능하다. 모터컨트롤또는 SMPS와같은응용분야에서는효과적은제어 를위해특정시점에복수개의 A/D 입력을변환( 전압, 전류등) 하여이를제어알고리즘 에적용을할필요가있기때문에유용하게사용될수있는기능이다. 참고로 A/D 컨버터에대한이해를돕기위해아날로그입력전압에대한 A/D 변환 소요시간을계산해보도록하자. A/D 변환은아날로그입력핀이샘플앤홀드(S/H) 회로에서연결이끊기면서샘플링 과커버전의두가지과정을통해수행된다. 이때소요되는시간을샘플링시간(Tsamp) 과컨버전시간(Tconv) 로표기하고두과정의시간을합산한결과가전체 A/D 컨버전 시간( Tad_total) 이된다. 전체 A/D 컨버전시간 = 샘플링시간(Tsamp) + 컨버전시간(Tconv) = 샘플링시간(Tsamp) + 12 * Tac -Tsamp ( 샘플링시간) : ADCON3 레지스터의 SAMC<4:0> 설정시간 -Tconv ( 컨버전시간): 12 Tad 소요 (10 비트컨버전수행시) -Tad (A/D 클럭): ADCON3 레지스터의 ADCS<5:0> 설정시간 ADC 모듈에대한보다자세한사양은데이터시트참조 < 그림 5-40> A/D 변환시간계산 360

78 Chapter 5. 브러시리스모터(Brushless Motor) A/D 4채널동시샘플링과각각의채널을순차적으로샘플링하는것과의차이점을생각해보자. 제어시스템에서특정신호의피드백을위해서는동일한시점에서의센서측정값을필요로한다. 만약 < 그림 5-41> 의두번째그림과같이빠른속도로변화하는신호에대해서순차적인샘플링이이루어진다면 4개의 A/D 변환결과값이동시샘플링하였을때와서로다른결과를초래하게될것이다. 만약이러한신호를제어시스템의피드백신호로반영한다면시스템의응답에원치않는결과가초래될수있으므로시스템의특성에따라서어느방식을선택할지신중히판단해야한다. < 그림 5-41> 4채널동시샘플링및순차적샘플링비교 dspic 제품군은매우다양한 A/D 변환모드를제공하고있기때문에수많은모드및각각에대한설정법모두에대해알고있을필요는없다. 필요시해당어플리케이션에적합한모드를선정하고, Family Reference Manual 을참조하여설정및사용할것을권장한다. 이책에서는독자들의이해를돕고자주요레지스터들의설명및기능에대한소개만하고자한다. 361

79 Motor Control bit 15 ADON: A/D Operating Mode bit 1 =A/Dconverter 모듈사용 0 =A/Dconverter 모듈사용안함 bit 14 Unimplemented: Read as '0 ' bit 13 ADSIDL: Stop in Idle Mode bit 1 =IDLE모드에서동작안함 0 =IDLE모드에서동작함 bit Unimplemented: Read as '0 ' bit 9-8 FORM<1:0>: Data Output Format bits 11 = Signed Fractional (DOUT = sddd dddd dd ) 10 = Fractional (DOUT = dddd dddd dd ) 01 = Signed Integer (DOUT = ssss sssd dddd dddd) 00 = Integer (DOUT = dd dddd dddd) bit 7-5 SSRC<2:0>: Conversion Trigger Source Select bits 111 =autoconvert( 내부카운터가제어) 110 = Reserved 101 = Reserved 100 = Reserved 011 = Motor Control PWM 주기가 Sampling 을끝내고, Conversion 시작 010 = GP Timer3 비교기가 Sampling을끝내고 Conversion 시작 001 = INT0핀이Active로변할때Sampling을끝내고Conversion 시작 000 = <SAMP>=0 으로하면, Sampling을끝내고 Conversion 시작 bit 4 Unimplemented: Read as '0 ' 362

80 Chapter 5. 브러시리스모터(Brushless Motor) bit 3 SIMSAM: Simultaneous Sample Select bit (only applicable when CHPS = 01 or 1x) 1=(CHPS= 1x 일때)CH0,CH1,CH2,CH3를동시에샘플링수행 (CHPS = 01 일때) CH0, CH1를동시에샘플링수행 0 = 순서대로각각샘플링 bit 2 ASAM: A/D Sample Auto-Start bit 1 = 마지막 Conversion 이완료되면즉시샘플링시작 (SAMP 비트는자동으로 "1") 0 =<SAMP>=1설정되면샘플링시작 bit 1 SAMP: A/D Sample Enable bit 1 = 최소하나이상의 A/D sample/hold amplifier가샘플링중임 0 = A/D sample/hold amplifiers가홀딩중임 (ASAM = 0 일때) SAMP=1 설정하면, 샘플링시작됨 (SSRC = 000 일때) SAMP=0 설정하면샘플링을끝내고 Conversion 시작함 bit 0 DONE: A/D Conversion Status bit (Rev. B silicon or later) 1 = A/D conversion 완료상태 0 = A/D conversion 수행중 ( 미완료상태) - 소프트웨어또는새로운 Conversion 시작시클리어("0") 됨 - 강제로클리어("0") 해도진행상태에어떠한영향도미치지못함 ( 의미없슴) bit VCFG<2:0>: Voltage Reference Configuration bits 363

81 Motor Control bit 12 Reserved: User should write '0 ' to this location bit 10 CSCNA: Scan Input Selections for CH0+ S/H Input for MUX A Input Multiplexer Setting bit 1 = 입력에대한스캔수행 0 = 입력에대한스캔수행안함 bit 9-8 CHPS<1:0>: Selects Channels Utilized bits 1x = Converts CH0, CH1, CH2 and CH3 01 = Converts CH0 and CH1 00 = Converts CH0 - SIMSAM bit (ADCON1<3>) = 0 일때, 각채널은순차적으로샘플됨 - SMSAM bit (ADCON1<3>) = 1 일때, CHPS<1:0> 설정값에따라멀티채널이동시샘플됨 bit 7 BUFS: Buffer Fill Status bit BUFM = 1 일때만유효함 (ADRES split into 2 x 8-word buffers). 1= A/D 버퍼 0x8-0xF 가현재꽉찼음, 사용자는버퍼 0x0-0x7의데이터를액세스해야함 0= A/D 버퍼0x0-0x7 가현재꽉찼음, 사용자는버퍼 0x8-0xF의데이터를액세스해야함 bit 5-2 SMPI<3:0>: Sample/Convert Sequences Per Interrupt Selection bits 1111 = 16번째 sample/convert 순서의컨버전이완료될때인터럽트발생 1110 = 15번째 sample/convert 순서의컨버전이완료될때인터럽트발생 =2번째 sample/convert 순서의컨버전이완료될때인터럽트발생 0000 = 매 sample/convert 의컨버전이완료될때인터럽트발생 bit 1 BUFM: Buffer Mode Select bit 1 = 버퍼를 2개의 8-워드버퍼 ADCBUF(15...8), ADCBUF(7...0) 로설정 0 = 버퍼를 1개의 16-워드버퍼 ADCBUF( ) 로설정 bit 0 ALTS: Alternate Input Sample Mode Select bit 1= MUX A의입력설정으로샘플링수행후 MUX B와 MUX A이입력설정을교대로사용 0 =MUXA의입력설정으로사용 364

82 Chapter 5. 브러시리스모터(Brushless Motor) bit Unimplemented: Read as '0 ' bit 12-8 SAMC<4:0>: Auto-Sample Time bits = 31 TAD = 1 TAD = 0 TAD (1개이상의 S/H 증폭기를사용한순차적컨버전수행시만사용가능) bit 7 ADRC: A/D Conversion Clock Source bit 1 = 내부 A/D RC 클럭사용 0 = 시스템클럭(Fcy) 을사용 bit 6 Unimplemented: Read as '0 ' bit 5-0 ADCS<5:0>: A/D Conversion Clock Select bits = TCY/2 (ADCS<5:0> + 1) = 32 TCY = TCY/2 (ADCS<5:0> + 1) = TCY = TCY/2 (ADCS<5:0> + 1) = TCY/2 365

83 Motor Control bit CH123NB<1:0>: Channel 1, 2, 3 Negative Input Select for MUX B Multiplexer Setting bits -bit 7-6의정의와동일 bit 13 CH123SB: Channel 1, 2, 3 Positive Input Select for MUX B Multiplexer Setting bit -bit 5의정의와동일 bit 12 CH0NB: Channel 0 Negative Input Select for MUX B Multiplexer Setting bit -bit 4의정의와동일 bit 11-8 CH0SB<3:0>: Channel 0 Positive Input Select for MUX B Multiplexer Setting bits -bit 3-0의정의와동일 bit 7-6 CH123NA<1:0>: Channel 1, 2, 3 Negative Input Select for MUX A Multiplexer Setting bits 11 = CH1 "-" 입력 : AN9, CH2 "-" 입력 : AN10, CH3 "-" 입력 : AN11 10 = CH1 "-" 입력 : AN6, CH2 "-" 입력 : AN7, CH3 "-" 입력 : AN8 0x = CH1, CH2, CH3 "-" 입력 : VREFbit 5 CH123SA: Channel 1, 2, 3 Positive Input Select for MUX A Multiplexer Setting bit 1 = CH1 "+" 입력 : AN3, CH2 "+" 입력 : AN4, CH3 "+" 입력 : AN5 0 = CH1 "+" 입력 : AN0, CH2 "+" 입력 : AN1, CH3 "+" 입력 : AN2 bit 4 CH0NA: Channel 0 Negative Input Select for MUX A Multiplexer Setting bit 1 = Channel 0 "-" 입력 : AN1 0 = Channel 0 "-" 입력 : VREFbit 3-0 CH0SA<3:0>: Channel 0 Positive Input Select for MUX A Multiplexer Setting bits 1111 = Channel 0 "+" 입력 : AN = Channel 0 "+" 입력 : AN14 366

84 Chapter 5. 브러시리스모터(Brushless Motor) 1101 = Channel 0 "+" 입력 : AN = Channel 0 "+" 입력 : AN = Channel 0 "+" 입력 : AN0 < 주의> 아날로그입력멀티플렉서는 MUX A 와 MUX B 의설정에의해서지원된다. < 주의> ADCHS<15:8> : MUX B 설정, ADCHS<7:0> : MUX A 설정 ADCHS 레지스터는해당디바이스의지원되는 A/D 입력수에의해서결정된다. bit 15-0 PCFG<15:0>: Analog Input Pin Configuration Control bits 1 = 아날로그입력핀을 Digital I/O 로사용. A/D 입력멀티플렉서는 AVss 에연결됨 0= 아날로그입력핀을아날로그모드로사용.I/O 기능은사용못함.ADC는해당핀전압을샘플 367

85 Motor Control bit 15-0 CSSL<15:0>: A/D Input Pin Scan Selection bits 1= ANx 핀을스캔입력으로설정 0= ANx 핀스캔입력스킵 그러면이제 BLDC 모터의속도지령으로사용할가변저항의전위차를측정하기위해 A/D 컨버터를설정해보도록하자. 가변저항(POT) 은 AN2/RB2 핀에연결되어있으며수동으로 A/D 변환시작, 정지및결과값읽기를수행하도록하겠다. A/D 변환은인터럽트방식을사용하였으며 AN2 핀에대한 A/D 변환이완료되면 A/D 인터럽트플래그(ADIF) 가 "1" 로셋되면서 ADC 인터럽트서비스루틴이호출될것이다. void InitADC10(void) { ADPCFG = 0xFFF8; ADCON1 = 0x0064; ADCON2 = 0x0200; ADCHS = 0x0002; ADCON3=0x0005; IFS0bits.ADIF = 0; IEC0bits.ADIE=1; // PORTB = Digital, RB0,1,2 = Analog // PWM starts conversion // 결과값 : Integer Format( dd dddd dddd) // MC PWM 주기마다 Sampling 종료 & Conversion 시작 // Conversion 종료즉시 Sampling 시작 // 4채널순차적으로샘플 // RB2/AN2 --> CH0 //Tad=3Tcy ADCON1bits.ADON = 1; // turn ADC ON } return; 다음은 ADC 인터럽트의서비스루틴이호출되면모터컨트롤 PWM의듀티사이클레지스터인 PDCx에 A/D 변환결과값(10 비트) 을로딩함으로써 PWM 듀티를변경하기위한코드이다. 여기에서 PDCx 레지스터는 PIC16F 디바이스의 CCPRxL 레지스터와동일한역할을하고있는레지스터이다. 368

86 Chapter 5. 브러시리스모터(Brushless Motor) /********************************************************************* The ADC interrupt loads the PDCx registers with the demand pot value. This is only done when the motor is running. *********************************************************************/ void attribute (( interrupt,auto_psv)) _ADCInterrupt (void) { IFS0bits.ADIF = 0; // Clear Interrupt Flag PDC1 = ADCBUF0; // ADC 결과값을 PDCx에로딩 PDC2 = PDC1; // 즉, ADCBUF0 = 듀티사이클.. 을의미한다. PDC3 = PDC1; // } 3. 모터컨트롤 PWM 모듈설정 이번실습에서는 OVDCON 레지스터의오버라이드기능을이용하여 PWM1,2,3 채널의상단핀은듀티사이클이반영된 PWM 펄스신호를출력하고, 하단핀은 H/L 신호로출력하고자한다. 이를위해 < 그림 5-42> 와같이각홀-센서신호에대한 OVDCON 값을테이블로작성한다. < 그림 5-42> 홀-센서신호에따른 OVDCON 레지스터설정 이렇게작성한테이블을이용하여다음과같이소스코드에룩- 업테이블로반영한다. 369

87 Motor Control unsigned int StateLoTable[] = {0x0000, /* all PWM OFF */ 0x2001, /* PWM1L -> 1, PWM3H -> PWM*/ 0x0204, /* PWM2L -> 1, PWM1H -> PWM*/ 0x2004, /* PWM2L -> 1, PWM3H -> PWM*/ 0x0810, /* PWM3L -> 1, PWM2H -> PWM*/ 0x0801, /* PWM1L -> 1, PWM2H -> PWM*/ 0x0210, /* PWM3L -> 1, PWM1H -> PWM*/ 0x0000}; /* all PWM OFF */ PWM 주파수는 PTPER 값을 10비트 ADC 최대결과값(=2^10-1 = 1023) 의 1/2인 511 이되도록계산의편의를위하여 Khz 로결정하였다. 그이유는 ADC 결과값을 PDC 레지스터에로딩할예정이며 16비트 PDC 레지스터는 PTPER 레지스터의 2배가될때듀티사이클은 100% 가되기때문이다. PTPER = Fcy/Fpwm -1 = 10,000,000/19,531-1 = 511 (Free Running 모드에서) PDC = ADC 결과값 (10 비트) A/D 컨버터의동작은 PWM 타임베이스주기의 16번째에서스페셜이벤트트리거가발생하고이때 A/D 샘플링및컨버전이수행된다. void InitMCPWM(void) { PTPER = FCY/FPWM - 1; // Fcy=10Mhz, Fpwm = Khz PWMCON1 = 0x0700; // PWM1,2,3 를 Independent 모드로사용 OVDCON = 0x0000; // PWM 핀모두 I/O 로설정 ( 임시) PDC1 = 0; // PWM1,2,3 의듀티 --> 0% 설정 PDC2 = 0; PDC3 = 0; SEVTCMP = PTPER; // 스페셜이벤트주기 --> PWM 주기와동일 PWMCON2 = 0x0F00; // 1:16 postscale 설정 // (PWM 주기 16 번마다스페셜이벤트발생) PTCON = 0x8000; // PWM 시작, PWM Time Base : Free Running mode return; } 370

88 Chapter 5. 브러시리스모터(Brushless Motor) 스위치를누르면주변장치를초기화하고, 홀-센서값을읽은후이에맞는 6-스텝스위칭신호를출력하는코드이다. 참고로이과정은스위치를눌렀을때단 1회만수행하며이후의 BLDC 모터제어에관한부분은 CN 인터럽트와 ADC 인터럽트에의해서모든것이수행되어진다. int main(void) { InitCN(); // Change Notification InitMCPWM(); // MC PWM 초기화 InitADC10(); // ADC 초기화 while(1) { while (S2); DelayNmSec(30); while (!S2); DelayNmSec(30); 초기하 HallValue = PORTB & 0x0038; // 홀-센서값읽기 HallValue = HallValue >> 3; // 10진수값으로변환 OVDCON = StateLoTable[HallValue]; // 6스텝시퀀스업데이트 PWMCON1 = 0x0777; // PWM 출력 : Enable } while(s2); DelayNmSec(30); while(!s2); DelayNmSec(30); PWMCON1 = 0x0700; OVDCON = 0x0000; // } return; // PWM 출력 : Disable 이번실습은처음으로듀티사이클을반영하여 6- 스텝커뮤테이션을적용하였다. 실습을통해 BLDC 모터의회전속도는듀티사이클즉, 인가전압에비례한다는것을확인할수있을것이다. 371

89 Motor Control 1 PWM 출력및홀-센서신호파형 2 PWM 출력파형확대 (Fpwm = 19.5 khz, Duty Cycle = 60 %) < 그림 5-43> PWM 출력및홀-센서신호파형 372

90 Chapter 5. 브러시리스모터(Brushless Motor) 다음은이번실습에대한 PWM 출력및 U 상전류를측정한결과이다. < 그림 5-44> PWM 출력및 U상전류측정파형 BLDC 모터의 6-스텝 PID 제어 PID 제어라이브러리실습 : DSP Library Example 모터의 PID 속도제어기실습에앞서 dspic에서제공하는 PID 라이브러리에대해살펴보도록하자.PID 속도제어시스템의기본블록다이어그램은다음과같다. < 그림 5-45> BLDC 모터의 PID 제어시스템구성도 373

91 Motor Control < 그림 5-45> 의 PID 제어기를비례(Proportion) 제어기, 적분(Integral) 제어기, 미분 (Differential) 제어기에대해다시표현하면 < 그림 5-46> 과같다. < 그림 5-46> PID 제어기의구성 위의 PID 제어기에대해디지털각각에대해디지털제어기관점에서 Z-Transform 을이용하면다음과같이표현할수있다. Up(T) : 시간 T에서의 P제어기출력 Ui(T) : 시간 T에서의 I제어기출력 Ud(T) : 시간 T에서의 D제어기출력 PID 제어기의각각의제어출력값의합인제어출력함수를다시정리하여표현하면다음식과같이표현할수있다. 374

92 Chapter 5. 브러시리스모터(Brushless Motor) 위의식을간소화하기위해제어기출력과에러의항목으로다시정리하면다음과같다. 는 PID 제어기의비례기, 적분기, 미분기의게인상수값 375

93 Motor Control 결과적으로 PID 제어기연산을위해서는상수값인 Kp, Ki, Kd 값과지속적으로변화하는에러의값만알고있으면곱셈과덧셈연산만으로손쉽게제어출력을계산할수있다는것을알수있다. 다만, 위의수식을일반마이크로컨트롤러의연산명령을이용하여계산할경우상수 K 및에러항목들은모두실수형데이터이기때문에실수형곱셈연산을 3 차례나수행해야하며이로인해상당히많은연산시간을필요로한다. DSP 엔진을탑재하고있는마이크로칩의 dspic 제품군은 PID 연산을손쉽게구현할수있도록 PID 라이브러리를제공하고있으며, PID 라이브러리는위의실수형연산을 DSP 엔진의 40 비트어큐뮬레이터(Accumulator) 곱셈연산자인 MAC 연산을이용하여매우빠르게연산하여그결과값을반환하여준다. 참고로 DSP 라이브러리함수는 MPLAB C30 컴파일러에서제공하고있으며, 보다자세한사항은 16-bit Language Tools Library의 Chapter2. DSP Library 를참조하길바라며, 자세히다루기에는내용이방대하기때문에여기에서는그사용법에대해서만소개하도록하겠다. MPLAB C30 컴파일러에서제공하는 DSP 라이브러리중 PID 라이브러리함수를사용하기위해서는다음과같은설정을필요로한다. 1. 라이브러리압축파일추가(C:\Program Files\Microchip\MPLAB C30\lib 폴더) < 그림 5-47> 과같이 MPLAB IDE 프로젝트윈도우상의 Library Files 폴더에서마우스우측버튼클릭후다음 3 가지라이브러리압축파일을추가한다. libc-coff.a : 표준 ANSI C 함수라이브러리 libm-coff.a : 표준 ANSI C Math 함수라이브러리 libdsp-coff.a : DSP 함수라이브러리 < 그림 5-47> 라이브러리압축파일추가설정법 376

94 Chapter 5. 브러시리스모터(Brushless Motor) 2. PID 라이브러리를이용한소스코드작성 #include <dsp.h> // PID 함수에서사용될 4 개의변수( 구조체및배열) 을다음과같이선언 tpid foopid; fractional abccoefficient[3] attribute ((section (".xbss, bss, xmemory"))); fractional controlhistory[3] attribute ((section (".ybss, bss, ymemory"))); fractional kcoeffs[] = {0,0,0}; //Q15() 함수는 "dsp.h" 에다음과같이선언되어있슴 //#define Q15(X) ((X < 0.0)? (int)(32768*(x) - 0.5) : (int)(32767*(x) + 0.5)) int main (void) { /* Step 1: PID 구조체인 foopid 초기화 */ foopid.abccoefficients = &abccoefficient[0]; foopid.controlhistory = &controlhistory[0]; PIDInit(&fooPID); /* Step 2 : 제어게인상수초기화 */ kcoeffs[0] = Q15(0.7); // Kp = 0.7 을Q.15 포맷으로변환후저장 kcoeffs[1] = Q15(0.2); // Ki = 0.2 을Q.15 포맷으로변환후저장 kcoeffs[2] = Q15(0.07); // Kd = 0.07 을Q.15 포맷으로변환후저장 /* Step 3 : Kp, Ki, Kd 상수로부터새로운상수 K1, K2, K3 PIDCoeffCalc(&kCoeffs[0], &foopid); 계산 while (1) { // 목표제어값설정 : ( 예) 목표속도 foopid.controlreference = Q15(0.74) ; // Q.15 포맷데이터 // 측정된출력값반영 : ( 예) 측정된속도 foopid.measuredoutput = Q15(0.453) ; // Q.15 포맷데이터 } // PID 제어기출력값계산 : ( 예) 제어기출력전압 PID(&fooPID); // foopid.controloutput에결과값저장됨 } 377

95 Motor Control 3. MPLAB Simulator 를이용하여확인 (Debug Select Tools MPLAB SIM 선택) MPLAB SIM 모드로설정후위의코드를실행과함께 Watch 윈도우및 Stopwatch (Debug Stopwatch 메뉴) 윈도우를이용하여 PID 라이브러리함수의연산결과및소요시간을확인해보자. PID 제어기의주요연산을수행하는함수는 PID(&fooPID) 함수이며, 이함수를통해 PID 제어기의 출력 값이 계산되어진다. 또한 계산된 결과 값은 구조체(fooPID) 의 controloutput 멤버에저장된다. 따라서이값을전압등의물리적인제어값에반영하면 된다. 참고로, PID(&fooPID) 함수를수행하는데 33개의명령어사이클이소요되었으며 이것을 30MIPS의속도로동작하는 dspic의경우로환산하면약 1.01 [us] 의시간이소 요된다. PID 라이브러리를사용하는데있어서주의할사항은 DSP 연산시속도를최적화하고 자모든변수들을프랙셔널(Fractional) 데이터형으로사용해야한다는점이다. 프랙셔널 데이터형의사이즈는 2 바이트(16 비트) 이며그크기는 -1 보다크고 +1 보다작은범위 를갖는데이터를의미하는특수한데이터형을말한다. 프랙셔널데이터형은 1비트의 부호(sign) 와 15 비트의프랙셔널(fractional) 비트로구성되어있기때문에 "1.15" 또는 "Q.15" 포맷이라한다. DSP 엔진을이용하면내장된두개의 40 비트의어큐뮬레이터(Accumulator A, B) 를 이용하여단 1 에곱셈연산을수행하며그결과 값은기본적으로 "9.31" 포맷( 총 40 비트) 으로제공된다. 또한데이터의크기가 ~ +1.00인경우 1.15 포맷의데이터형으로변환되어결과값을제공하게된다. 독자여러분에게는생소한개념인 "1.15"(Q.15) 데이터형에대한이해를위해좀더 자세히살펴보도록하자. < 그림 5-48> 과같이 1.15 포맷은 1비트의부호와 15 비트의데이터로구성되며, 그값은 -1 보다크고 +1 보다는작은범위의데이터가될것이다. 따라서 1.15 데이터형끼리의곱 셈을생각해보면, 그결과값은항상 -1 ~ +1 범위의값이되기때문에 2바이트데이터 의곱셈결과가 2바이트의데이터만으로표현이가능해진다는흥미로운사실을발견할수 있다. 이와같이실수형데이터를 2바이트로표현할수있고또한그곱셈연산결과를 2 바이트의결과값으로표현할수있다는것이 1.15 데이터포맷의가장큰장점이며이 러한연산을 DSP 엔진을이용하게되면 1 개의명령어사이클(1*Tcy) 만에수행할수 있게되는것이다. 378

96 Chapter 5. 브러시리스모터(Brushless Motor) 1 "1.15" 포맷의양수표현 2 "1.15" 포맷의음수표현예 < 그림 5-48> Q.15(1.15) 데이터형 379

97 Motor Control 실습에서사용한 Q15(X) 함수는 -1 ~ +1 범위의실수형의상수(X) 데이터를 2바이트의 Q.15 포맷데이터로변환해주는매크로함수이며, 헤더파일 "dsp.h" 내에선처리문을이용하여다음과같이선언되어있다. #define Q15(X) ((X < 0.0)? (int)(32768*(x) - 0.5) : (int)(32767*(x) + 0.5)) [ 예제1] : 의 Q.15 포맷변환 >> Q(0.453) = int(32767* ) = int( ) = = 0x39FB [ 예제2] : 의 Q.15 포맷변환 >> Q(-0.453) = int(32768* ) = int( ) = = 0xC604 끝으로실습에서사용된모든 PID 라이브러리함수의소스코드를확인하고싶다면 MPLAB C30 이인스톨된폴더(C:\Program Files\Microchip\MPLAB C30\src\dsp\asm) 의 "pid.s" 파일을참조하길바란다 BLDC 모터의 6-스텝 PID 속도제어실습 : LAB 5 이제 BLDC 모터의속도제어의한방법으로써 < 그림 5-49> 와같이홀-센서피드백신 호를이용하여모터의속도를측정하고 PID 제어방법을이용하여폐-루프속도제어 시스템을구현하고자한다. 이번실습에서는입력캡쳐를이용하여 RB4/IC7 핀으로입력되는홀-센서 B의신호 에대해입력캡쳐를이용하여펄스의폭을측정하고자하며, 이값을이용하여모터의 회전속도를계산하고또한홀-센서 B의에지가변경됨에따른 6-스텝커뮤테이션을 수행하고자한다. 또한 RB5/IC8 핀은홀-센서 C의신호를입력캡쳐로받으며에지검 출시발생하는입력캡쳐 8(IC8) 인터럽트를이용하여홀-센서 B의에지가변경되는구 간에대한 6- 스텝커뮤테이션을반영하고자한다. 끝으로홀-센서 A의신호는 CN 인 터럽트를이용하여마찬가지로홀-센서 A의에지가변경되는구간에대한 6-스텝커뮤 테이션을반영한다. 380

98 Chapter 5. 브러시리스모터(Brushless Motor) < 그림 5-49> BLDC 모터의 PID 제어실습회로 입력캡쳐(Input Capture) 모듈은 ICx 로표기된핀에대해서그기능을지원하며, PIC16F의 CCP 모듈을캡쳐모드로사용하는것과동일한원리로동작한다. 기준타이머는타이머-2 또는타이머-3 중하나를설정하여사용가능하며, 설정된타이머레지스터 TMRx의값이 4개의입력캡쳐의버퍼인 ICxBUF 에캡쳐된순서대로저장된다. ICxBUF 는그림과같이차례로읽기명령어를수행하게되면, 저장된순서대로데이터값이반환되는 FIFO(First In First Out) 구조라고생각하면된다. < 그림 5-50> 입력캡쳐(Input Capture) 모듈블록다이어그램 381

99 Motor Control bit Unimplemented: Read as '0 ' bit 13 ICSIDL: Input Capture Module Stop in Idle Control bit 1 =CPU가IDLE 모드에서입력캡쳐모듈정지 0 =CPU가IDLE 모드에서입력캡쳐모듈동자 bit 12-8 Unimplemented: Read as '0 ' bit 7 ICTMR: Input Capture Timer Select bits 1 =TMR2레지스터값이캡쳐이벤트에서캡쳐됨 0 =TMR3레지스터값이캡쳐이벤트에서캡쳐됨 Note: Timer selections may vary. Refer to the device data sheet for details. bit 6-5 ICI<1:0>: Select Number of Captures per Interrupt bits 11 =4번째캡쳐이벤트에서인터럽트발생 10 =3번째캡쳐이벤트에서인터럽트발생 01 =2번째캡쳐이벤트에서인터럽트발생 00 =1번째캡쳐이벤트에서인터럽트발생 bit 4 ICOV: Input Capture Overflow Status Flag (Read Only) bit 1 = 입력캡쳐오버플로우발생 0 = 입력캡쳐오버플로우발생안하 bit 3 ICBNE: Input Capture Buffer Empty Status (Read Only) bit 1 = 입력캡쳐버퍼에내용있음, 최소 1개이상의캡쳐값이저장되어있음 0 = 입력캡쳐버퍼비었음 ( 모두읽어짐) bit 2-0 ICM<2:0>: Input Capture Mode Select bits 111 = 슬립(Sleep) 및아이들(Idle) 모드일때, 입력캡쳐함수는인터럽트핀기능으로만동작 382

100 Chapter 5. 브러시리스모터(Brushless Motor) ( 상승에지만감지) 110 = Unused (module disabled) 101 =16번째상승에지에서캡쳐 100 =4번째상승에지에서캡쳐 011 =1번째상승에지에서캡쳐 010 =1번째하강에지에서캡쳐 001 = 모든에지( 상승및하강) 에서캡쳐 ( 이모드에서는 ICI<1:0> 비트설정반영안됨) 000 = 입력캡쳐모듈정지 (Turn Off) 이제실습을위한코딩을수행해보자. 여기에서는코딩의양이다소많은관계로주요부분에대해서만소개를하고자하며, 전체실습코드는한국마이크로칩홈페이지 ( 의자료실을참조해주길바란다. < 그림 5-51> 주요알고리즘구성 1. 홀-센서신호검지를위한 ICx, CNx 모듈설정 - 홀-센서 A의입력 :CN5핀을입력및인터럽트설정 - 홀-센서 B, C의입력 :IC7,8핀을입력및인터럽트설정 383

101 Motor Control :Timer3이용 :EveryEdgeCapturing 모드로설정 ( 모든상승/ 하강에지에서캡쳐) 전기적신호의 1/2 주기측정 -InputCaputure 모듈의기준타이머설정 : 타이머 3 설정 : Tcy/64 클럭카운팅설정 20MIPS 의경우: 3.2us 마다TMR3 자동증가 void Init_IC_and_CN(void) { // CN5 설정 : Hall A TRISB = 0x38; // RB3,4,5 : Input CNPU1 = 0; // CNx Pull UP : Disabled CNEN1 = 0x20; // Enable CN5 IFS0bits.CNIF = 0; // Clear interrupt flag // IC7 설정 : Hall B IC7CON = 0x0001; IFS1bits.IC7IF = 0; // IC8 설정 : Hall C IC8CON = 0x0001; IFS1bits.IC8IF = 0; // Capturing at Every Edge( 상/ 하강에지), TMR3 // Clear interrupt flag // Capturing at Every Edge( 상/ 하강에지), TMR3 // Clear interrupt flag } return; 입력캡쳐의기준타이머로사용할타이머-3 를설정해보자. void InitTMR3(void) { T3CON = 0x0020; // internal Tcy/64 clock = 20MHz/64 = Khz } TMR3 = 0; PR3 = 0xFFFF; T3CONbits.TON = 1; // turn on timer 3 return; 384

102 Chapter 5. 브러시리스모터(Brushless Motor) 2. 홀-센서 A 신호검지 (CN5) 인터럽트서비스루틴코딩 - 현재 Sector 확인 - 회전방향구분 : CW or CCW -6- 스텝커뮤테이션및듀티사이클업데이트 void attribute (( interrupt,auto_psv)) _CNInterrupt (void) { IFS0bits.CNIF = 0; // Clear interrupt flag HallValue = (unsigned int)((portb >> 3) & 0x0007); // 홀신호읽음 Sector = SectorTable[HallValue]; // 섹터구분 if (Sector!= LastSector) { MotorStalledCounter = 0; // 모터회전방향판단 if ((Sector == 5) (Sector == 2)) Current_Direction = CCW; else Current_Direction = CW; // CCW 방향회전중 // CW 방향회전중 } // 6-스텝및 PDC 값업데이트 SixStepComm(Sector, ControlOutput); // ControlOutput > 0 CW // ControlOutput < 0 CCW LastSector = Sector; // LastSector 업데이트 } return; 3. 홀-센서 B 신호검지 (IC7) 인터럽트서비스루틴코딩 - 현재 Sector 확인 - 모터의회전속도측정 (Hall B 신호의 1/2 주기측정) - 회전방향구분 : CW or CCW -6- 스텝커뮤테이션및듀티사이클업데이트 385

103 Motor Control void attribute (( interrupt,auto_psv)) _IC7Interrupt (void) { IFS1bits.IC7IF = 0; // Cleat interrupt flag HallValue = (unsigned int)((portb >> 3) & 0x0007); Sector = SectorTable[HallValue]; if (Sector!= LastSector) // Sector 변경? { // 홀센서신호의 1/2 주기측정 ( 전기사이클의 1/2 주기에해당) PastCapture = ActualCapture; ActualCapture = IC7BUF; IC7BUF; // 사용하지않는3 개의버퍼(FIFO) 는비우기 IC7BUF; IC7BUF; MotorStalledCounter = 0; // 모터회전중임... ^^ // 모터의회전방향판단 if ((Sector == 3) (Sector == 0)) Current_Direction = CCW; else Current_Direction = CW; // 6-스텝및 PDC 값업데이트 SixStepComm(Sector, ControlOutput); } LastSector = Sector; } return; 4. 홀-센서 C 신호검지 (IC8) 인터럽트서비스루틴코딩 - 현재 Sector 확인 - 회전방향구분 : CW or CCW -6- 스텝커뮤테이션및듀티사이클업데이트 386

104 Chapter 5. 브러시리스모터(Brushless Motor) void attribute (( interrupt,auto_psv)) _IC8Interrupt (void) { IFS1bits.IC8IF = 0; HallValue = (unsigned int)((portb >> 3) & 0x0007); Sector = SectorTable[HallValue]; if (Sector!= LastSector) { MotorStalledCounter = 0; // 회전방향판단 if ((Sector == 1) (Sector == 4)) Current_Direction = CCW; else Current_Direction = CW; SixStepComm(Sector, ControlOutput); } LastSector = Sector; } return; 5. 목표( 설정) 속도지정을위한 ADC 설정및인터럽트서비스루틴작성 void InitADC10(void) { ADPCFG = 0xFFF8; ADCON1 = 0x026E; ADCON2 = 0x0000; ADCHS = 0x0002; ADCON3 = 0x0003; // RB3, RB4, and RB5 are digital // MCPWM ends sampling & starts conversion // Fractional Format(dddd dddd dd ) // Auto Sampling // AN2(Pot.) Connected // Tad = 2*Tcy } IFS0bits.ADIF = 0; IEC0bits.ADIE = 1; ADCON1bits.ADON = 1; return; // Clear ISR flag // Enable interrupts // turn ADC ON 387

105 Motor Control 위에서주의할점은 A/D 컨버젼의결과포맷을 16 비트부호없는분수(Fractional) 포맷으로설정하였다. 10비트 A/D 변환값(0~1023) 을 0에서 1사이의값으로단위변환을하기위하여최소값(0) 은 0 으로, 최대값(1023) 은 값으로표기하는방법이다. 이것의목적은제어기의연산시모든파라미터및상수값을프랙셔널(Fractional) 로표기하고계산하기위해서이다. 이방법을이용하면실수형을사용하지않고정수형만으로계산을수행하기때문에빠른연산결과를얻을수있게된다. < 그림 5-52> ADC 결과값 Format 비교 ADC 컨버터의인터럽트는모터컨트롤모듈의스페셜이벤트트리거를이용하여 PWM 주기및포스트스케일러의곱에해당하는시간마다발생하도록설정하였다. 이번실습에서 Fpwm이 20KHz 로설정되었고, 포스트스케일러가 16으로설정되었기때문에 PWM 주기가시작되는 16*50[us] 마다 ADC 인터럽트가발생하게된다. (initmcpwm() 함수의 "SEVTCMP = PTPER;" "PWMCON2 = 0x0F00;" 에의해서) void attribute (( interrupt,auto_psv)) _ADCInterrupt (void) { IFS0bits.ADIF = 0; RefSpeed = (int)(((unsigned int)adcbuf0) / 2); // 양수값(Max ) 으로만취하기위함 : Q.15 Format // ADCBUF0 : Unsigned Fractional Data if (RefSpeed < 2000) RefSpeed = 2000; // 최소값 = 2000/32767 = 0.061*6000 rpm return; } 388

106 Chapter 5. 브러시리스모터(Brushless Motor) 목표속도변수 RefSpeed 는 Singed Fractional Format 으로써 -1.0 ~ +1 의범위값을가지며다음표와같이이값은 CW 회전의최대속도와 CCW 회전의최대속도를의미한다. 6. 모터컨트롤 PWM 모듈설정 -Fpwm=20kHz설정 - PWM Output : Complementary Mode 설정 -SpecialEventTrigger:PWM주기및포스트스케일러 16으로설정 - 주기및듀티사이클 : Edge Aligned Mode 로설정 void InitMCPWM(void) { TRISE = 0x0100; // PWM pins : outputs, FLTA : input PTPER = FCY/FPWM - 1; // FCY=20Mhz, FPWM = 20Khz OVDCON = 0x0000; // Disable all PWM outputs. PWMCON1 = 0x0777; // Enable PWM, Complementary mode PDC1 = 0; // PWM1 Duty = 0 PDC2 = 0; // PWM2 Duty = 0 PDC3 = 0; // PWM3 Duty = 0 SEVTCMP = PTPER; // Special Event Trigger for ADC (Fpwm 주기로 ADC 수행) PWMCON2 = 0x0F00; // 16 postscale values, Tpwm(1/20Khz = 50us) x 16 마다 ADC PTCON = 0x8000; // Edge Aligned mode (Free Running Mode) : Ch 참조 return; } 수행 389

107 Motor Control 7. Timer1 모듈을 1[ms] 인터럽트로설정 : PID 제어주기로사용 -Fcy=20MHz(Fosc=5MHzx16=80MHz) void InitTMR1(void) { T1CON = 0x0020; // internal Tcy/64 clock TMR1 = 0; PR1 = 313; // 1 ms interrupts for 20 MIPS T1CONbits.TON = 1; // turn on timer 1 return; } 8. Timer1 인터럽트서비스루틴작성 : 1[ms] 마다호출되며 PID 제어수행 1) 현재모터속도계산 - 홀센서 B 신호의 1/2 주기계산 Period = ActualCapture - PastCapture - 속도계산 (Fractional 값으로계산) : 6000 rpm 대비비율 Speed = MINPERIOD / Period 2) PID Library 이용제어출력값계산 - 목표속도, 측정속도지정 - 제어출력값계산 : PID(&fooPID) 3) Hall 센서오류보상알고리즘 -10[ms] 동안섹터변화없으면강제 6-스텝수행 -100[ms] 동안섹터변화없으면모터정지 모터제어에있어서속도를계산하기위해서는물리적개념을완전히이해하고있어야하기때문에초보자에게는조금어렵게느껴질수도있다. 하지만기본지식을바탕으로하나씩단계를밟아간다면쉽게해결할수있을것이다. <step 1> 10극모터가 6,000 rpm 회전시홀-센서 B 신호의주기는? 6000 RPM = (120/p) * f f = (6000 * p) / 120 = 500 Hz T=1/f=2ms 390

108 Chapter 5. 브러시리스모터(Brushless Motor) <step 2> 10극모터가6,000rpm 회전시Input Caputure 7 에의해측정된결과값은? IC7은 every edge로설정되었으므로홀센서 B 신호의 1/2 주기인 1 [ms] 마다펄스폭 capture 됨 IC7은 TMR3 사용 (20MIPS, 1:64 프리스케일러) TMR3는3.2[us] 마다증가(64*1/20M = 3.2us) 1[ms] 펄스에대한 Input Capture 값 = 1ms/3.2us = MINPERIOD = 312 로설정 <step 3> 10극모터가 60rpm 회전시 Input Caputure 7 에의해측정된결과값은? MAXPERIOD = 100 * MINPERIOD = 31,250 (step 2 이용계산) MAXPERIOD = 31,250 로설정 < 그림 5-53> 모터회전에따른홀-센서 B 신호및 Input Capture 7의동작예 391

109 Motor Control void attribute (( interrupt, auto_psv)) _T1Interrupt (void) { IFS0bits.T1IF = 0; Period = ActualCapture - PastCapture; // UNsigned 뺄셈 // Period 의상/ 하한값설정 if (Period < (unsigned int)minperiod) Period = MINPERIOD; // MINPERIOD 6000 rpm의주기 else if (Period > (unsigned int)maxperiod) // MAXPERIOD 60 rpm의주기 Period = MAXPERIOD; // Speed = MINPERIOD / Period (Speed 변수는 Fractional) // 연산속도를최적화하고자사용 asm("mov MINPERIOD, W8"); // Programmer's Reference Manual asm("mov _Period, W9"); asm("repeat #17"); asm("divf W8, W9"); asm("mov W0, _Speed"); 참조 // CCW면 Speed 는음수, CW면 Speed 는양수값 ( 부호가방향을의미) if (Current_Direction == CCW) Speed = -Speed; // PID 함수를이용한제어값계산 foopid.controlreference = RefSpeed; // 목표속도 foopid.measuredoutput = Speed; // 현재속도 PID(&fooPID); // PID 함수를이용한연산 ControlOutput = foopid.controloutput; // 최종제어출력값 MotorStalledCounter++; // 1ms 카운터로써 CNx, ICx ISR에서 Clear 된다. // Motor 의 Stall을방지하기위함 if ((MotorStalledCounter % _10MILLISEC) == 0) { ForceCommutation(); // 10ms 동안홀센서변화없으면임의로 6-스텝수행 } else if (MotorStalledCounter >= _100MILLISEC) { StopMotor(); // 100ms 동안홀-센서변화없으면모터정지 } return; } 392

110 Chapter 5. 브러시리스모터(Brushless Motor) < 연습 > Input Caputure 7 에의해측정된결과값(Period) 이 3,000일때현재 RPM 은? Speed = MINPERIOD / Period = 312 / 3,000 = (Fractional) 실제 RPM 으로환산 : 6,000rpm * = 624 [rpm] 이와같이최대속도와최소속도에대한펄스폭값을이용하면특정펄스폭에대한속도(RPM) 을계산할수있다는것을알수있다. 이러한계산이다소힘들더라도 dspic 의효율적인연산처리를위해서프랙셔널연산에익숙해지기바란다 스텝커뮤테이션코딩 - SixStepComm() 함수는섹터및전압제어용듀티사이클을인자로갖는함수 - 현재 Sector에맞는 6스텝-커뮤테이션을 OVDCON에업데이트 - PID 제어기출력값(ControlOutput) 을 PDCx 레지스터에업데이트 Edge Aligned Mode 이며, PTPER = 999로설정되어있음 PDCx >= 2*PTPER 일때 100% Duty Cycle 출력됨 Fractional 데이터인 ControlOutput의최대크기는 이므로, 스케일을맞추기위해 ControlOutput/16 을 PDCx에업데이트 void SixStepComm (int _Sector, int _Voltage) { // PDCx 레지스터에 PID 제어기를통해계산된듀티값로딩 PDC1 = PDC2 = PDC3 = (unsigned int)_voltage / 16; } if (_Sector == -1) OVDCON = 0x0000; // 잘못된 Sector else OVDCON = StateLoTable[_Sector]; // Sector에맞는 6-스텝출력 return; 10. 프로그래밍및실행 실습의편의상모터의 CW 방향에대해서실습을수행하였으며, 방향전환까지고려한실습은독자의몫으로돌리고자한다.6- 스텝커뮤테이션방식의구동에대해정/ 역회전을구현할수있다면이후이어질정현파구동을무난히구현할수있을것으로판단된 다. 참고로이후의실습인정현파구동은정/ 역회전실습으로구성하였다. 393

111 Motor Control 11. PID 게인상수튜닝시주의사항 PID 컨트롤러의게인상수 Kp, Ki, Kd 값을튜닝할때주의할사항이있다. 우리가사용한 PID 라이브러리함수는내부적으로세개의게인상수를이용하여다음과같이새로운게인 K1, K2, K3를만든다는것을이전에설명했었다. 는 PID 제어기의비례기, 적분기, 미분기의게인상수값 따라서이들 3개의새로운게인상수 K1, K2, K3을이용한곱셈연산인 DSP의 MAC 연산수행시포화상태(Saturation) 가발생하는것을방지하기위해다음조건을만족하도록 PID 제어기의게인 Kp, Ki, Kd 설정에주의하여한다. 는 PID 제어기의비례기, 적분기, 미분기의게인상수값 394

112 Chapter 5. 브러시리스모터(Brushless Motor) 다음은이번실습의 PWM 출력및 U 상전류를측정한결과이다. PID 제어기의성능을시험하기위해서는모터의회전축에인가되는부하를가변시켜야하며이때듀티사이클의변화와모터회전속도의변화를관찰해보기를바란다. 참고로회전축을손으로쥐는방법을이용하고자한다면안전에유의해주길바란다. < 그림5-54> PWM 출력파형및전류파형측정결과 5.3 브러시리스모터의정현파제어 브러시리스모터의정현파구동개요 우리가흔히말하는 BLDC 모터는역기전력파형이사다리꼴(Trapezoidal) 모양으로관측이된다. 실습에서사용하고있는 Hurst 모터의경우역기전력파형이정현파 (Sinusoidal) 모양으로관측이되며이러한모터를영구자석형동기전동기(PMSM) 이라부르며경우에따라서는 BLAC 로분류하기도한다. 지금까지사다리꼴모양의역기전력을특성을갖는 BLDC 모터의구동에대해살펴보 395

113 Motor Control 았으며이를위해회전자의위치에동기시켜 6-스텝커뮤테이션이라불리는구형파 (Square Wave) 전압구동방식을실습하였다. 각모터권선에흐르는전류의파형도구형파와유사한형태가되기때문에모터의토크리플(Ripple) 이상당량발생하고이로인해적은양이지만회전속도의오실레이션및소음발생을유발하게된다. 반면에정현파형태의역기전력특성을갖는 PMSM은정현파의전압으로구동을하게되면전류의형태도정현파를얻을수있으며 3상의균형으로인해결과적으로토크리플과소음을최소화할수있게된다. < 그림 5-55> 정현파전압 PID 제어블록다이어그램 실습에사용중인 Hurst 모터의홀신호및역기전력과의관계를확인해보고자모터의회전축을손을이용하여회전시킨후오실로스코프를이용하여홀-센서신호와역기전력파형을직접측정하였으며회전방향에따른결과는 < 그림 5-56> 과 < 그림 5-57> 을참조하기바란다. 그림의파형으로부터알수있듯이 Hurst 모터는정현파역기전력특성을갖는 PMSM 이라는것을알수있으며, 정현파전압제어를적용하면모터의특성을최대한활용하여보다효율적인구동결과를얻을수있음을확인할수있게되었다. 396

114 Chapter 5. 브러시리스모터(Brushless Motor) 1 정회전시역기전력측정파형(CW 회전) 2 정회전시역기전력패턴도식화(CW 회전) < 그림 5-56> 구형파( 사다리꼴) 역기전력과정현파역기전력비교 397

115 Motor Control 1 역회전시역기전력측정파형(CCW 회전) 2 역회전시역기전력패턴도식화 (CCW 회전) < 그림 5-57> 구형파( 사다리꼴) 역기전력과정현파역기전력비교 이번실습을위한블록다이어그램은 < 그림 5-55> 를참조해주기바라며, 이전에실습했던 Lab 5와가장큰차이점은 6-스텝커뮤테이션블록이정현파구현블록으로변경되었다는점이다. 정현파구현의핵심포인트는홀-센서의신호변화가전기적각도로 60 마다발생하며이로부터 3 상의정현파전압의위상을이미알고있다는것이다. 따라서정현파전압발생의주요파라미터는 PID 제어기에의해결정되는전압의크기와홀 398

116 Chapter 5. 브러시리스모터(Brushless Motor) - 센서의주기에의해결정되는정현파의위상이된다. 전압의크기는듀티사이클에반영되며결과적으로모터의속도및토크에영향을미치게되며, 정현파의위상은회전자의위치검출에따라서결정이될것이며이위상차의조절을통해모터의속도를최대한활용할수도있게된다. 그렇다면, PWM 듀티사이클을이용하여정현파전압을만들어내는방법에대해살펴보자. 다음은 SPWM(Sinusoidal PWM) 방식의예로써삼각캐리어파와정현파를서로중첩및비교시켜스위칭소자의 On/Off 시간을결정하는원리를이용한다. < 그림 5-58> SPWM 방식을이용한정현파전압구현 399

117 Motor Control 우리는이미 dspic의모터컨트롤 PWM 모듈을 Center Aligned 모드로설정하게되면, Fpwm 주파수( 예: 20kHz) 의가상의삼각파와 PDCx 값의비교를통해 PWMx 핀들의펄스폭을제어할수있다는것을알고있다. 만약 PWM 주기(1/Fpwm = 50us) 마다 PDCx 값을정현파와비례하는크기로설정해준다면, < 그림 5-58> 의정현파모양과유사한전압이모터의권선에인가될것이다. 참고로 < 그림 5-58> 의경우 Center Align 모드를사용하게때문에 PDCx = PTPER 이면 50%, PDCx = 2*PTPER이면 100%, PDCx = 0이면 0% 듀티사이클의 PWM 펄스가출력되므로 PDCx의값은 PTPER 값을옵셋(Offset) 으로 -PTPER ~ +PTPER까지정현파스케일로변경해주면정현파의전압을모터에인가할수있게된다 브러시리스모터의정현파전압 PID 제어 : Lab 6 이번실습에서는 PWM 인터럽트를이용하여 PWM 주기(1/Fpwm = 50us) 마다 PDCx 값이새롭게계산되며이값은속도제어 PID 연산이반영된정현파구현을위한새로운듀티사이클이된다. 또한홀- 센서신호로부터새로운섹터를찾을때( 전기각 60 ) 마다이에맞는정현파의위상을회전자의위치와일치하도록보정해주는알고리즘이추가되었다. < 그림 5-59> 주요알고리즘구성 400

118 Chapter 5. 브러시리스모터(Brushless Motor) 알고리즘설명은기존 6-스텝커뮤테이션알고리즘에서변경및새롭게추가된사항을위주로설명하도록하겠다. 1. 정현파룩-업테이블작성 - 정수형값을갖는정현파테이블작성 ( 소스파일폴더의 Excel 파일참조) int sinetable[128] = { 0,1608,3212,4808,6393,7962,9512,11039,12539,14010, 15446,16846,18204,19519,20787,22005,23170,24279,25329,26319, 27245,28105,28898,29621,30273,30852,31356,31785,32137,32412, 32609,32728,32767,32728,32609,32412,32137,31785,31356,30852, 30273,29621,28898,28105,27245,26319,25329,24279,23170,22005, 20787,19519,18204,16846,15446,14010,12539,11039,9512,7962, 6393,4808,3212,1608,0,-1608,-3212,-4808,-6393,-7962, -9512, ,-12539,-14010,-15446,-16846,-18204,-19519,-20787,-22005, ,-24279,-25329,-26319,-27245,-28105,-28898,-29621,-30273,-30852, ,-31785,-32137,-32412,-32609,-32728,-32767,-32728,-32609,-32412, ,-31785,-31356,-30852,-30273,-29621,-28898,-28105,-27245,-26319, ,-24279,-23170,-22005,-20787,-19519,-18204,-16846,-15446,-14010, ,-11039,-9512, -7962, -6393, -4808, -3212, -1608, }; 2. 정현파생성을위한함수코딩 -U(A) 상의정현파위상(Phase) 에해당하는정현파룩-업테이블값로딩 -ScaleSineData() 함수 PTPER * PID의 ControlOutput * 정현파룩-업테이블데이터계산 계산결과값을 Result 변수에저장 (Result = 0 ~ PTPER 범위의값) - PDC1 = PTPER + Result; // U상의전압을위한듀티사이클로딩 V(B), W(C) 상에대해서도위와동일하게수행하며, 다만정현파룩-업테이블값로딩시회전방향에따른 +/- 120 위상차를반영해야함. < 그림 5-56, 57> 참조 다음은정현파생성을위한듀티사이클계산함수이다. 이함수에서 PID 제어출력 값및정현파룩- 업테이블값이계산에사용된다. 401

119 Motor Control ScaleSineData(void) { asm(" MOV _Multiplier, W4"); // Multplier --> W4 (Faractional) asm(" MOV _PTPER, W5 "); // PTPER --> W5 (Integer) asm(" MOV #_Result, W0 "); // Result의주소 --> W0 (Fractional) asm(" MPY W4*W5, A "); // Multiplier * PTPER --> Accumulator A asm(" SAC A, W4 "); // Accum. A --> W4 asm(" MOV _Mod_Index, W5 "); // Mod_index --> W5 asm(" MPY W4*W5, A "); // W4 * W5 --> Accum. A asm(" SAC A, [W0] "); // Accum. A --> Result; // Result 의범위= 0 ~ PTPER return; } 듀티사이클계산결과를 PDCx 레지스터에반영하기위한알고리즘작성에앞서 < 그림 5-60> 의모터의회전방향에따른홀-센서신호및전압시퀀스의상호관계를완전히숙지하기를바라며비교그림을다시한번주의깊게관찰해주기를바란다. 1 CW 회전시홀신호및상전압 2 CCW 회전시홀신호및상전압 < 그림 5-60> 회전방향에따른상전압및홀-센서신호비교 다음은계산된듀티사이클값을듀티사이클레지스터 PDCx에반영하기위한 SineGen() 함수이다. 402

120 Chapter 5. 브러시리스모터(Brushless Motor) void SineGen(int _volts, unsigned int _angle) { PWMCON2bits.UDIS = 1; // Duty Cycle 업데이트중지 Mod_Index = _volts; // PID 함수에의해계산된제어출력값 if(required_direction == CW) // CW 회전시 { // Phase A Phase_Offset = _0_DEGREES; // Phase A 의옵셋: Multiplier = sinetable[(_angle + Phase_Offset) >>9]; ScaleSineData(); // Multiplier 의 Fractional Scaling 값을 Result 로 Return PDC1 = Result + PTPER; // Phase A의듀티업데이트 Phase_Offset = -(_120_DEGREES); // Phase A 대비 120도위상느림 Multiplier = sinetable[(_angle + Phase_Offset) >> 9]; ScaleSineData(); PDC2 = Result + PTPER; // Phase B의듀티업데이트 Phase_Offset = -(_240_DEGREES); // Phase A 대비240도위상느림 Multiplier = sinetable[(_angle + Phase_Offset) >> 9]; ScaleSineData(); PDC3 = Result + PTPER; // Phase C의듀티업데이트 } else { Phase_Offset = _0_DEGREES; // Phase A 의옵셋: Multiplier = sinetable[(_angle + Phase_Offset) >>9]; ScaleSineData(); // Multiplier 의 Fractional Scaling 값을 Result 로 Return PDC1 = Result + PTPER; // Phase A의듀티업데이트 Phase_Offset = +(_120_DEGREES); // Phase A 대비 120도위상빠름 Multiplier = sinetable[(_angle + Phase_Offset) >> 9]; ScaleSineData(); PDC2 = Result + PTPER; // Phase B의듀티업데이트 } Phase_Offset = +(_240_DEGREES); // Phase A 대비240도위상빠름 Multiplier = sinetable[(_angle + Phase_Offset) >> 9]; ScaleSineData(); PDC3 = Result + PTPER; // Phase C의듀티업데이트 } PWMCON2bits.UDIS = 0; // Duty Cycle 업데이트가능 return; 403

121 Motor Control 3. 홀- 센서신호변화에따른정현파위상(Phase) 보정및속도측정 1) < 그림 5-61> 과같이 Hall A,B, C 의변화발생시는변경된섹터에알맞은정현파의위상(Phase) 을 60 씩보정해준다. ( 홀신호변화는전기각 60 마다발생) -( 예1) 섹터-0 감지시 :Phase=30 -( 예2) 섹터-3 감지시 :Phase=30 +4*60 =270 회전속도변화로인한 Phase 의오차를방지하기위해사용한다. if (Required_Direction == CW) // 가변저항의위치에의해서결정 Phase = PhaseValues[Sector]; else // CCW 회전시홀신호에따른섹터계산 Phase = PhaseValues[(7 - Sector) % 6] + PhaseOffset; // CW-CCW 사이의 Phase Offset 보상 참고로, PhaseOffset 은정/ 역회전에대한위상오차에대한보상이며실험적으로구하여사용해야한다. 2) 홀-센서 B 의변화시는추가적으로펄스폭측정한다. - 회전속도계산을위한펄스폭측정 : Input Capture 7 이용 < 그림 5-61> SPWM 구현알고리즘 404

122 Chapter 5. 브러시리스모터(Brushless Motor) 4. ADC 이용목표속도및회전방향판단 - ADC 값(Unsigned Fractional Format) 을정수형으로변환한다. ( ~ ) - 부호에따라회전방향을결정한다. - 절대값은목표속도를의미한다. void attribute (( interrupt,auto_psv)) _ADCInterrupt (void) { int adc_temp; IFS0bits.ADIF = 0; adc_temp = (int)adcbuf0; if(adc_temp < 0) RefSpeed = adc_temp; else RefSpeed = adc_temp; // RefSpeed < 0 --> CCW 회전 //RefSpeed>0-->CW회전 if(refspeed > && RefSpeed < 2000) // 최소 RefSpeed 제한 RefSpeed = 0; } return; 5. PWM 모듈설정 1) Fpwm = 20kHz 로설정 - Continuous Up/Down Counting Mode 사용 -PTPER=(Fcy/Fpwm)/2-1=499 주의 : 동일조건에서 Center Aligned 모드의 PTPER은 Edge Aligned 대비 1/2 2) Center Aligned Mode (Continuous Up/Down Counting) 으로설정 405

123 Motor Control void InitMCPWM(void) { TRISE = 0x0100; // PWM pins : outputs, FLTA : input PTPER = FCY/FPWM/2-1; // FCY=20Mhz, FPWM = 20Khz, PTPER = 499 OVDCON = 0x0000; // Disable all PWM outputs. DTCON1 = 0x0010; // ~500 ns of dead time PWMCON1 = 0x0077; // Enable PWM output pins, Complementary mode } PDC1 = PTPER; // PWM1 Duty = 50% : 0V PDC2 = PTPER; // PWM2 Duty = 50% : 0V PDC3 = PTPER; // PWM3 Duty = 50% : 0V SEVTCMP = 1; // ADC를위한 Special Trigger를즉시 Enable PWMCON2 = 0x0F02; // 16 postscale Special Event Trigger PTCON = 0x8002; // Sine Wave는 Center Align 모드이용 // Postscale 1:1 (PWM 주기마다인터럽트발생) // 6-스텝커뮤테이션은 Edge Align 모드이용 return; 6. PWM 인터럽트서비스루틴작성 1) PWM 주기마다호출됨 (1/Fpwm = 50 us 주기) 2) 모터의현재회전속도를고려하여정현파의위상증가분(PhaseInc) 반영 - Phase = Phase + PhaseInc; 3) PID 제어출력(ControlOutput) 과정현파위상증가분(PhaseInc) 을가지고정현파생성함수호출 - SineGen(ControlOutput, Phase); void attribute (( interrupt,auto_psv)) _PWMInterrupt (void) { IFS2bits.PWMIF = 0; // PWM 인터럽트플래그클리어 if (Required_Direction == CW) { if (Current_Direction == CW) Phase += PhaseInc; // Sine Wave 발생을위한 Phase 증가 SineGen(ControlOutput, Phase); // 방향이 CW 면, ControlOutput은양수 } 406

124 Chapter 5. 브러시리스모터(Brushless Motor) else { if (Current_Direction == CCW) Phase += PhaseInc; // Sine Wave 발생을위한 Phase 증가 SineGen(-(ControlOutput+1), Phase); // 방향이 CCW면 ControlOutput은음수 } } return; 7. 정현파위상증가분(PhaseInc) 계산 1) PWM 주기마다호출됨 (1/Fpwm = 50 us 주기) - 정현파의주파수및위상을기준으로 50us 이전의위상에증가되어야할위상을반영해야한다. - 즉, 정현파의위상은 PWM 주기마다주파수에따라계산된일정량의위상을증가시켜현재회전속도에맞는정현파전압을형성한다. 위상증가분은타이머-1 인터럽트서비스루틴에서계산된다. PhaseInc = builtin_divud(phase_count, Period); 8. 프로그래밍및실행 1) 지금까지설명한알고리즘을이용하여전체프로그램코드를작성후실행한다. 2) 이번실습을통해정현파역기전력을갖는 PMSM을정현파전압으로구동하여그특성을확인하는데목적이있다. 다음 < 그림 5-62> 는무부하시 PWM 출력및 U 상전류를측정한결과이며, < 그림 5-63> 은손을이용하여모터의회전축에부하를인가하였을때 PWM 출력및 U상전류를측정한결과이다. 무부하시상전류의파형이일그러지는형태를가지지만, 부하가인가되었을때전류파형이정현파가되는것을확인할수있다.3상모터의각상의전류파형이정현파가되면,3상평형전류에의한토크리플이최소화된다고말할수있으며이상적인모터구동조건이된다. 따라서모터에인가되는다양한부하조건에따른제어기설계및튜닝이필요하게된다. 407

125 Motor Control < 그림 5-62> 무부하시 PWM 출력및 U상전류측정결과 < 그림 5-63> 부하시 PWM 출력및 U상전류측정결과 408

126 Chapter 5. 브러시리스모터(Brushless Motor) 5.4 결론 지금까지브러시리스모터의구동방법을단계별실습을통해어느정도정리가되었 을것으로믿는다. 여기에서소개된구동방법은홀-센서피드백을이용한기본적인제 어방법에대해서만소개하고자하였다. 요즘브리시리스모터제어분야에서는 DC 링 크전압을최대한활용할수있는공간벡터변조(Space Vector Modulation) 방식을포 함하여실제산업분야에서대두되고있는홀-센서없이역기전력및상전류를이용한 제어방식인센서리스(Sensorless) 및 FOC(Field Oriented Control) 와같은벡터제어기 술이주요이슈가되고있다. 참고로, 브러시리스 모터의 실습은 마이크로칩의 PICDEM MC LV 개발 보드 (DM183021) 를이용하여수행하였으며, 저렴한가격에판매되는브러시리스모터제품을 선정하기가쉽지가않은관계로실습에사용된브러시리스모터는마이크로칩의어플리 케이션노트에서공통적으로사용하고있는 Hurst 사의제품(AC300020) 을사용하였다. 프로그래밍 및 디버거를 위한 툴은 마이크로칩의 저가형 PICkit2 Debug Express (DV164121), 중저가형 MPLAB ICD2(DV164007), 또는 MPLAB REAL ICE(DV244005) 을 사용할것을권장한다. 참고및추천문헌 1. AN885 : Brushless DC (BLDC) Motor Fundamentals (DS00885A, Microchip) 2. AN901 : Using the dspic30f for sensorless BLDC Control (DS00901A, Microchip) 3. AN957 : Sensored BLDC Motor Control Using dspic30f2010 (DS00957A, Microchip) 4. AN1083 : Sensorless BLDC Control With Back-EMF Filering (DS01083A, Microchip) 5. AN1017 : Sinusoidal Control of PMSM Motors with dspic30f DSC (DS01017A, Microchip) 6. AN1078 : Sensorless Field Oriented Control of PMSM Motors (DS01078A, Microchip) 7. AN894 : Motor Control Sensor Feedback Circuits (DS00894A, Microchip) 409

127 Motor Control 맺음말 이책은임베디드모터제어입문자를대상으로전문적인지식이없어도단계별실습을통해관련분야의기본적인지식과경험을얻을수있도록하는데목적을두었습니다. 이책에서소개된내용과관련한부연설명, 소스코드및회로도등의자료및기타기술지원은한국마이크로칩홈페이지( 를통해지원할계획이므로많은이용바랍니다. 끝으로한국마이크로칩의모터제어팀에서는최근업계에서대두되고있는최신임베디드모터제어기술에대한기술서적집필을계획중에있습니다. 기술적인난이도가있기때문에전문가를대상으로하는기술서적이될것으로보이지만모터제어분야에대한노력을지금부터꾸준히한다면상당한성과를얻을수있을것으로판단됩니다. 감사합니다. 410

128 부록 (Appendix) 부록 1.1 PIC16F887 DC( 스텝 ) 모터구동회로도부록 1.2 dspic30f3010 BLDC(Brushless DC) 모터구동회로도부록 1.3 모터컨트롤데모보드전원회로도및기타회로도부록 1.4 모터컨트롤데모보드부품리스트부록 2.1 PIC16F887 DC( 스텝 ) 모터용보드조립및세팅부록 2.2 dspic30f3010 BLDC(Brushless DC) 모터용보드조립및세팅

129 Motor Control 부록 1. 마이크로칩모터컨트롤데모보드회로도 1.1 DC 모터 ( 스텝모터 ) 구동회로도 PIC16F887 주변회로도 412

130 Appendix : 부록 PIC16F887 주변점퍼헤더회로도 413

131 Motor Control PIC16F887 SW1, SW2( 스위치 ), POT1( 가변저항 ), LED 주변회로도 414

132 Appendix : 부록 PIC16F887 DC 모터 ( 스텝모터 ) 드라이브단회로도 415

133 Motor Control PIC16F887 DC 모터 ( 스텝모터 ) 구동주변회로도 ( 옵티컬센서, 전류센싱부 ) 416

134 Appendix : 부록 [ 참고회로도 ] 417

135 Motor Control 1.2 BLDC(Brushless DC) 모터구동회로도 dspic30f3010 주변회로도 418

136 Appendix : 부록 dspic30f3010 BLDC 모터드라이브단회로도 419

137 Motor Control dspic30f3010 BLDC 모터전류센싱부회로도 420

138 Appendix : 부록 dspic30f3010 BLDC 모터홀센서부회로도 421

139 Motor Control dspic30f3010 BLDC 모터연결커넥터부회로도 1.3 모터컨트롤데모보드전원회로도및기타회로도 모터컨트롤데모보드전원회로도 422

140 Appendix : 부록 모터컨트롤데모보드모터구동전원점퍼선택회로도 423

141 Motor Control 모터컨트롤데모보드 ICD2(Real ICE) 또는 PICKIT2(ICD2LE) 개발장비연결회로도 모터컨트롤데모보드 UART 통신회로도 424

142 Appendix : 부록 1.4 모터컨트롤데모보드부품리스트 Bill Of Materials May 28, :02:37 Page1 Item Quantity Reference Part 1 19 BC1,BC2,BC3,C4,BC4,BC5, 0.1UF C11,C15,C22,C33,C35,C37, C39,C40,C42,C44,C46,C48, C C1,C2,C6,C14 33PF 3 3 C3,C7,C9 3.3UF50V 4 5 C5,C8,C10,C12,C13 47NF 5 4 C16,C17,C18,C19 1UF/50V 6 2 C20,C21 20PF 7 8 C23,C24,C25,C26,C28,C29, 10PF C30,C C27 1NF 9 1 C32 10UF/16V 10 1 C36 220UF/50V 11 2 C38,C43 100UF35VSHL 12 3 C41,C45,C49 100UF/50V 13 1 C47 100UF/25V 14 1 C51 100UF/16V 15 3 D1,D2,D3 US1K D4,D5,D6,D7,D8,D9,D16, LED D17,D18,D19,D20,D21,D22, D23,D24,D D10,D11,D12,D13 BAT54S 18 2 D14,D15 1N4148WS 19 4 J1,J3,J6,J10 HEAD J2,J4,J5,J7,J9,J22,J23, HEAD2 J J8 BR762C J11 RJ45/MICROCHIP 23 2 J12,J17 HEAD8X J J14 HEAD J15,J16 HEAD20X J18 HEADER 17X J19,J21 HEAD3X J20 BR762C J25 POWERJACK 425

143 Motor Control 31 1 J26 HEAD6X J27 BLDC_MOTOR_VOLTAGE 33 1 POT1 2KRG06P 34 1 P1 DB9SOCKETANGLE 35 6 Q1,Q2,Q3,Q4,Q5,Q6 IRF540NL 36 4 Q7,Q8,Q9,Q10 IRF Q11 N-ch TR R1,R20,R25,R40,R55,R57, 10K R58,R69,R70,R72,R73,R74, R76,R78,R79,R80,R81,R82, R83,R87,R R2,R4,R6,R7,R14,R17,R18, 300 R19,R26,R27,R28,R30,R35, R R3,R16,R32,R56 22K 41 4 R5,R11,R13,R24 100K 42 6 R8,R9,R15,R21,R29,R31 33R 43 5 R10,R22,R33,R39,R60 2.4K 44 5 R12,R23,R34,R36,R68 1M 45 1 R37 R5W R38,R41,R42,R45,R48,R51, 1K R52,R53,R54,R59,R61,R63, R71,R88,R93,R95,R R44 5KRG06P 48 4 R46,R47,R49,R50 4.7K 49 2 R62,R R64,R65 2K 51 1 R R R75,R77 R(?) 54 2 R84,R R85 36K 56 1 R86 3.6K 57 1 R R R92,R96 20K 60 1 R R98,R100,R102,R103,R104, 330 R105,R107,R108,R110,R SW1,SW2,SW4,SW5 DT-1-2D 63 1 SW3 SW DIP TP1 HA 65 1 TP2 HB 66 1 TP3 HC 426

144 Appendix : 부록 67 1 TP4 IMOTOR 68 1 TP5 PWM TP6 PWM TP7 PWM TP8 PWM TP9 PWM TP10 PWM U1 DSPIC30F3010-I/P 75 3 U2,U5,U6 IR2101S 76 1 U4 MCP U7 MCP6002-I/SN 78 1 U9 MAX232CSE 79 1 U10 PIC16F887-I/P 80 1 U11 20MHZOSC 81 1 U12 SN74HC U13 TC U15 SN74HC U16 TC U22 MCP6022-I/SN 86 1 U23 74LVC02A 87 1 U24 MC78T U25 MC U26 MC U27 MC Y1 5MHZSX Y2 20MHZSX-1 더자세한내용은한국마이크로칩지사홈페이지자료실 기술서적자료실을참조하세요 부록 2. 마이크로칩모터컨트롤데모보드조립및세팅 2.1 PIC16F887 DC( 스텝 ) 모터용보드조립및세팅 보드조립시에는꼭마이크로칩한국지사홈페이지 ( 의기술서적자료실에서전체회로도를다운로드받아충분히검토한후에조립한다. 또한, 부록 1에있는회로도에있는부품은모두조립하여야한다.( 필히조립검토할것 ) 427

145 Motor Control 보드 PCB 전체블록도 ( 타원표시는 PIC18, dspic30f 공용 ) 보드 PCB 그림은 1,2 차수정으로인해약간의차이가있을수있다 보드 PCB 실크도면 ( 최종수정 ) 428

146 Appendix : 부록 DC( 스텝 ) 모터용전원부조립및세팅 [DC 모터구동전원설정설명 ] 1) DC 입력 JACK(J25) 에 9~24V DC 전원을입력한다. 이때 DC 전원은 24V BLDC 모터를구동할경우를고려하여가급적 24V DC 전원을사용할것을권장한다. 2) 사용중인 DC모터의정격전압을확인하여 J26의 5V, 9V, 12V 등에서한가지만골라점퍼를연결하여 Short 시킨다. 이때주의할점은 DC 모터구동용 FET인 IRF7309 의정격용량이 1.8A 이므로, 안정성을고려하여 DC 모터선정시정격용량이약 1A 이내가되도록주의해야한다 전원부조립및설정 DC( 스텝 ) 모터의스펙에따라전원입력을몇볼트로할것인지정한다. 예를들어, DC 모터가 12V용이고, 전원어댑터가 24V가있다고하면,( 물론 12V 어댑터를사용하고 DC잭전원 + 단을직접보드상에서 MC7805 입력단과 MC7812 출력단으로연결하면간단하다 ) PIC16F887 마이컴을꼭 +5V가필요하므로, MC7805는반드시조립한다.( 전원입력이높은경우 (~ +24V) 인경우에는 MC7805에서열이많이발생하므로보다낮은전압으로입력을유도하거나, 뜨거운방열판을주의한다.) 아래그림과같이조립을한다. 429

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D> 뻔뻔한 AVR 프로그래밍 The 4 th Lecture 유명환 ( yoo@netplug.co.kr) 1 시간 (Time) 에대한정의 INDEX 2 왜타이머 (Timer) 와카운터 (Counter) 인가? 3 ATmega128 타이머 / 카운터동작구조 4 ATmega128 타이머 / 카운터관련레지스터 5 뻔뻔한노하우 : 레지스터비트설정방법 6 ATmega128

More information

Stepper Motors

Stepper Motors tepper Motor 제어 28 Microchip Technology Incorporated. All Rights Reserved. tepper Motor Control lide 1 Agenda 1. 스텝모터기초 2. Full tep 제어 (1상/2 상제어 ) 3. Half tep 제어 (1-2 상제어 ) 4. Micro tepping 제어 28 Microchip

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729> 8주차중간고사 ( 인터럽트및 A/D 변환기문제및풀이 ) Next-Generation Networks Lab. 외부입력인터럽트예제 문제 1 포트 A 의 7-segment 에초시계를구현한다. Tact 스위치 SW3 을 CPU 보드의 PE4 에연결한다. 그리고, SW3 을누르면하강 에지에서초시계가 00 으로초기화된다. 동시에 Tact 스위치 SW4 를 CPU 보드의

More information

실험 5

실험 5 실험. OP Amp 의기초회로 Inverting Amplifier OP amp 를이용한아래와같은 inverting amplifier 회로를고려해본다. ( 그림 ) Inverting amplifier 위의회로에서 OP amp의 입력단자는 + 입력단자와동일한그라운드전압, 즉 0V를유지한다. 또한 OP amp 입력단자로흘러들어가는전류는 0 이므로, 저항에흐르는전류는다음과같다.

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729> 7주차 AVR의 A/D 변환기제어레지스터및관련실습 Next-Generation Networks Lab. 3. 관련레지스터 표 9-4 레지스터 ADMUX ADCSRA ADCH ADCL 설명 ADC Multiplexer Selection Register ADC 의입력채널선택및기준전압선택외 ADC Control and Status Register A ADC 의동작을설정하거나동작상태를표시함

More information

슬라이드 1

슬라이드 1 마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***

More information

API 매뉴얼

API 매뉴얼 PCI-TC03 API Programming (Rev 1.0) Windows, Windows2000, Windows NT, Windows XP and Windows 7 are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations

More information

실험 5

실험 5 실험. apacitor 및 Inductor 의특성 교류회로 apacitor 의 apacitance 측정 본실험에서는 capacitor를포함하는회로에교류 (A) 전원이연결되어있을때, 정상상태 (steady state) 에서 capacitor의전압과전류의관계를알아본다. apacitance의값이 인 capacitor의전류와전압의관계는다음식과같다. i dv = dt

More information

Microsoft PowerPoint - es-arduino-lecture-03

Microsoft PowerPoint - es-arduino-lecture-03 임베디드시스템개론 : Arduino 활용 Lecture #3: Button Input & FND Control 2012. 3. 25 by 김영주 강의목차 디지털입력 Button switch 입력 Button Debounce 7-Segment FND : 직접제어 7-Segment FND : IC 제어 2 디지털입력 : Switch 입력 (1) 실습목표 아두이노디지털입력처리실습

More information

Motor Control Solution

Motor Control Solution Motor Control Solution 마이크로칩에서는 Stepper, Brushed-DC, AC Induction, Switched Reluctance Brushless-DC 등모터종류별특성및동작방식에맞는 MCU가준비되어있어, User가 Motor를이용한 Application을개발하려할때에가장적절한 Solution을제시해줄수있다. 이중 FFT나 PID연산등정밀한모터제어를실행하기위해꼭해주어야하는빠른

More information

Microsoft Word - Lab.4

Microsoft Word - Lab.4 Lab. 1. I-V Lab. 4. 연산증폭기 Characterist 비 tics of a Dio 비교기 ode 응용 회로 1. 실험목표 연산증폭기를이용한비교기비교기응용회로를이해 응용회로를구성, 측정및평가해서연산증폭기 2. 실험회로 A. 연산증폭기비교기응용회로 (a) 기본비교기 (b) 출력제한 비교기 (c) 슈미트트리거 (d) 포화반파정류회로그림 4.1. 연산증폭기비교기응용회로

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F > 10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절

More information

(b) 미분기 (c) 적분기 그림 6.1. 연산증폭기연산응용회로

(b) 미분기 (c) 적분기 그림 6.1. 연산증폭기연산응용회로 Lab. 1. I-V Characteristics of a Diode Lab. 6. 연산증폭기가산기, 미분기, 적분기회로 1. 실험목표 연산증폭기를이용한가산기, 미분기및적분기회로를구성, 측정및 평가해서연산증폭기연산응용회로를이해 2. 실험회로 A. 연산증폭기연산응용회로 (a) 가산기 (b) 미분기 (c) 적분기 그림 6.1. 연산증폭기연산응용회로 3. 실험장비및부품리스트

More information

Microsoft Word - PEB08_USER_GUIDE.doc

Microsoft Word - PEB08_USER_GUIDE.doc 0. PEB08 이란? PEB08(PIC EVALUATION BOARD 8bits) 은 Microchip 8bit Device 개발을쉽고편리하게할수있는보드입니다. 1. 다양한 8bit Device 지원 기존대부분의 8bit 보드의경우일부 Pin-Count만지원을하였지만, PEB08은 PIC10, PIC12, PIC16, PIC18의 DIP Type Package의모든

More information

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D> 뻔뻔한 AVR 프로그래밍 The Last(8 th ) Lecture 유명환 ( yoo@netplug.co.kr) INDEX 1 I 2 C 통신이야기 2 ATmega128 TWI(I 2 C) 구조분석 4 ATmega128 TWI(I 2 C) 실습 : AT24C16 1 I 2 C 통신이야기 I 2 C Inter IC Bus 어떤 IC들간에도공통적으로통할수있는 ex)

More information

(b) 연산증폭기슬루율측정회로 (c) 연산증폭기공통모드제거비측정회로 그림 1.1. 연산증폭기성능파라미터측정회로

(b) 연산증폭기슬루율측정회로 (c) 연산증폭기공통모드제거비측정회로 그림 1.1. 연산증폭기성능파라미터측정회로 Lab. 1. I-V Characteristics of a Diode Lab. 1. 연산증폭기특성실험 1. 실험목표 연산증폭기의전압이득 (Gain), 입력저항, 출력저항, 대역폭 (Bandwidth), 오프셋전압 (Offset Voltage), 공통모드제거비 (Common-mode Rejection Ratio; CMRR) 및슬루율 (Slew Rate) 등의기본적인성능파라미터에대해서실험을통해서이해

More information

Chapter. 14 DAC 를이용한 LED 밝기제어 HBE-MCU-Multi AVR Jaeheung, Lee

Chapter. 14 DAC 를이용한 LED 밝기제어 HBE-MCU-Multi AVR Jaeheung, Lee Chapter. 14 DAC 를이용한 LED 밝기제어 HBE-MCU-Multi AVR Jaeheung, Lee 목차 1. D/A 변환기 2. 병렬 D/A 변환기로 LED 밝기제어하기 3. 직렬 D/A 변환기로 LED 밝기제어하기 D/A 변환기 D/A 변환기 (Digital to Analog Converter) 디지털데이터를아날로그전압으로변환하는소자 A/D변환기와함께마이크로프로세서응용회로에서널리사용됨.

More information

ATmega128

ATmega128 ATmega128 외부인터럽트실습 Prof. Jae Young Choi ( 최재영교수 ) (2015 Spring) Prof. Jae Young Choi 외부인터럽트실험 외부인터럽트를사용하기위해관렦레지스터를설정 일반적으로 I/O 포트에대한설정이끝난후에외부인터럽트나타이머 / 카운터설정 PE4~7 번까지 4 개의외부인터럽트 INT4~INT7 까지사용 외부인터럽트사용법요약

More information

Microsoft PowerPoint - chap01-C언어개요.pptx

Microsoft PowerPoint - chap01-C언어개요.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을

More information

Section 03 인터럽트활성화와인터럽트서비스루틴연결 34/82 장치에대한인터럽트설정과활성화 내부장치에대한특수레지스터존재 장치의특성을반영한동작설정용또는상태관찰용비트로구성 인터럽트사건의발생패턴을설정해야함 인터럽트활성화비트를 1 로셋하여, 인터럽트발생을허락» 전제, 전역

Section 03 인터럽트활성화와인터럽트서비스루틴연결 34/82 장치에대한인터럽트설정과활성화 내부장치에대한특수레지스터존재 장치의특성을반영한동작설정용또는상태관찰용비트로구성 인터럽트사건의발생패턴을설정해야함 인터럽트활성화비트를 1 로셋하여, 인터럽트발생을허락» 전제, 전역 Section 03 인터럽트활성화와인터럽트서비스루틴연결 33/82 Section 03 인터럽트활성화와인터럽트서비스루틴연결 34/82 장치에대한인터럽트설정과활성화 내부장치에대한특수레지스터존재 장치의특성을반영한동작설정용또는상태관찰용비트로구성 인터럽트사건의발생패턴을설정해야함 인터럽트활성화비트를 1 로셋하여, 인터럽트발생을허락» 전제, 전역인터럽트활성화비트가 1 로셋되었을때

More information

Microsoft Word doc

Microsoft Word doc 2. 디바이스드라이버 [ DIO ] 2.1. 개요 타겟보드의데이터버스를이용하여 LED 및스위치동작을제어하는방법을설명하겠다. 2.2. 회로도 2.3. 준비조건 ARM 용크로스컴파일러가설치되어있어야한다. 하드웨어적인점검을하여정상적인동작을한다고가정한다. NFS(Network File System) 를사용할경우에는 NFS가마운트되어있어야한다. 여기서는소스전문을포함하지않았다.

More information

Microsoft PowerPoint - additional01.ppt [호환 모드]

Microsoft PowerPoint - additional01.ppt [호환 모드] 1.C 기반의 C++ part 1 함수 오버로딩 (overloading) 디폴트매개변수 (default parameter) 인-라인함수 (in-line function) 이름공간 (namespace) Jong Hyuk Park 함수 Jong Hyuk Park 함수오버로딩 (overloading) 함수오버로딩 (function overloading) C++ 언어에서는같은이름을가진여러개의함수를정의가능

More information

API 매뉴얼

API 매뉴얼 PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된

More information

RVC Robot Vaccum Cleaner

RVC Robot Vaccum Cleaner RVC Robot Vacuum 200810048 정재근 200811445 이성현 200811414 김연준 200812423 김준식 Statement of purpose Robot Vacuum (RVC) - An RVC automatically cleans and mops household surface. - It goes straight forward while

More information

À̵¿·Îº¿ÀÇ ÀÎÅͳݱâ¹Ý ¿ø°ÝÁ¦¾î½Ã ½Ã°£Áö¿¬¿¡_.hwp

À̵¿·Îº¿ÀÇ ÀÎÅͳݱâ¹Ý ¿ø°ÝÁ¦¾î½Ã ½Ã°£Áö¿¬¿¡_.hwp l Y ( X g, Y g ) r v L v v R L θ X ( X c, Yc) W (a) (b) DC 12V 9A Battery 전원부 DC-DC Converter +12V, -12V DC-DC Converter 5V DC-AC Inverter AC 220V DC-DC Converter 3.3V Motor Driver 80196kc,PWM Main

More information

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,

More information

KEY 디바이스 드라이버

KEY 디바이스 드라이버 KEY 디바이스드라이버 임베디드시스템소프트웨어 I (http://et.smu.ac.kr et.smu.ac.kr) 차례 GPIO 및 Control Registers KEY 하드웨어구성 KEY Driver 프로그램 key-driver.c 시험응용프로그램 key-app.c KEY 디바이스드라이버 11-2 GPIO(General-Purpose Purpose I/O)

More information

실험 5

실험 5 실험. OP Amp 의기본특성 이상적 (ideal) OP Amp OP amp는연산증폭기 (operational amp) 라고도불리며, 여러개의트랜지스터로구성이된차동선형증폭기 (differential linear amplifier) 이다. OP amp는가산, 적분, 미분과같은수학적연산을수행하는회로에사용될수있으며, 비디오, 오디오증폭기, 발진기등에널리사용되고있다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 A 반 T2 - 김우빈 (201011321) 임국현 (201011358) 박대규 (201011329) Robot Vacuum Cleaner 1 Motor Sensor RVC Control Cleaner Robot Vaccum Cleaner 2 / Event Format/ Type Front Sensor RVC 앞의장애물의유무를감지한다. True / False,

More information

Microsoft Word - PLC제어응용-2차시.doc

Microsoft Word - PLC제어응용-2차시.doc 과정명 PLC 제어응용차시명 2 차시. 접점명령 학습목표 1. 연산개시명령 (LOAD, LOAD NOT) 에대하여설명할수있다. 2. 직렬접속명령 (AND, AND NOT) 에대하여설명할수있다. 3. 병렬접속명령 (OR, OR NOT) 에대하여설명할수있다. 4.PLC의접점명령을가지고간단한프로그램을작성할수있다. 학습내용 1. 연산개시명령 1) 연산개시명령 (LOAD,

More information

정보보안 개론과 실습:네트워크

정보보안 개론과 실습:네트워크 ` 마이크로프로세서설계및실습 12-13 주차강의자료 학습목표 A/D 변환기의제어방법을이해한다 능숙하게 A/D 변환기를제어할수있도록반복실습한다 2/28 아날로그 - 디지털변환회로 아날로그 - 디지털변환회로 (A/D 변환회로 ) 는, 아날로그전기신호를디지털전기신호로변환하는전자회로이다 A/D 컨버터 (ADC: Analog-to-digital converter) 라고도불린다

More information

Microsoft Word - logic2005.doc

Microsoft Word - logic2005.doc 제 8 장 Counters 실험의목표 - Catalog counter 의동작원리에대하여익힌다. - 임의의 counter를통하여 FSM 구현방법을익힌다. - 7-segment display 의동작원리를이해한다. 실험도움자료 1. 7-segment display 7-segment는디지털회로에서숫자를표시하기위하여가장많이사용하는소자이다. 이름에서알수있듯이 7개의 LED(

More information

2009년2학기 임베디드시스템 응용

2009년2학기 임베디드시스템 응용 임베디드시스템기초 (#514115 ) #5. Timer A 한림대학교전자공학과이선우 MSP430x4xx 타이머종류 MSP430x4xx series 는다음과같은 3 종의타이머내장 Basic Timer1 Two independent, cascadable 8-bit timers Selectable clock source Interrupt capability LCD

More information

<BFACBDC0B9AEC1A6C7AEC0CC5F F E687770>

<BFACBDC0B9AEC1A6C7AEC0CC5F F E687770> I COOKBOOK 87 이론, 실습, 시뮬레이션 디지털논리회로 ( 개정 3 판 ) (Problem Solutions of Chapter ) . JK 플립플롭을사용한비동기식 6진상향카운터설계 6진카운터를구성하기위해출력이목표로하는최고카운트에 을더한 6에도달한순간을포착하여모든플립플롭의출력을 Clear 한다. 6진카운터는비동기입력 (Clear, Preset) 이있는

More information

Microsoft PowerPoint - polling.pptx

Microsoft PowerPoint - polling.pptx 지현석 (binish@home.cnu.ac.kr) http://binish.or.kr Index 이슈화된키보드해킹 최근키보드해킹이슈의배경지식 Interrupt VS polling What is polling? Polling pseudo code Polling 을이용한키로거분석 방어기법연구 이슈화된키보드해킹 키보드해킹은연일상한가! 주식, 펀드투자의시기?! 최근키보드해킹이슈의배경지식

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 Verilog: Finite State Machines CSED311 Lab03 Joonsung Kim, joonsung90@postech.ac.kr Finite State Machines Digital system design 시간에배운것과같습니다. Moore / Mealy machines Verilog 를이용해서어떻게구현할까? 2 Finite State

More information

Microsoft PowerPoint - Ch13

Microsoft PowerPoint - Ch13 Ch. 13 Basic OP-AMP Circuits 비교기 (Comparator) 하나의전압을다른전압 ( 기준전압, reference) 와비교하기위한비선형장치 영전위검출 in > 기준전압 out = out(max) in < 기준전압 out = out(min) 비교기 영이아닌전위검출 기준배터리 기준전압분배기 기준전압제너다이오드 비교기 예제 13-1: out(max)

More information

Microsoft Word - LAB_OPamp_Application.doc

Microsoft Word - LAB_OPamp_Application.doc 실험. OP Amp 의기본응용회로 Voltage Follower/Impedance Buffer 위의 OP amp 회로에서출력전압신호는입력전압신호와항상같으므로, voltage follower라고불린다. 이회로는어떤기능을가지는회로에부하저항을연결하였을때, 부하저항이미치는영향을최소화하기위해서사용될수있다. 예를들면 low-pass filter 회로에부하저항이연결된다음과같은회로를고려해본다.

More information

인터럽트 (Interrupt) 범용입출력포트에서입출력의내용을처리하기위해매번입출력을요구하는플래그를검사하는일 (Pollong) 에대하여마이크로컨트롤러에게는상당한시간을소비하게만든다. 인터럽트란 CPU가현재처리하고있는일보다급하게처리해야할사건이발생했을때, 현재수행중인일을중단하고

인터럽트 (Interrupt) 범용입출력포트에서입출력의내용을처리하기위해매번입출력을요구하는플래그를검사하는일 (Pollong) 에대하여마이크로컨트롤러에게는상당한시간을소비하게만든다. 인터럽트란 CPU가현재처리하고있는일보다급하게처리해야할사건이발생했을때, 현재수행중인일을중단하고 CHAPTER 7 인터럽트 가. 레지스터구조이해하기 나. 엔코더제어하기 인터럽트 (Interrupt) 범용입출력포트에서입출력의내용을처리하기위해매번입출력을요구하는플래그를검사하는일 (Pollong) 에대하여마이크로컨트롤러에게는상당한시간을소비하게만든다. 인터럽트란 CPU가현재처리하고있는일보다급하게처리해야할사건이발생했을때, 현재수행중인일을중단하고급한일을처리한후에본래의일을다시수행하는것을말한다.

More information

S O L U T I O N I N N O V A T I O N T P C M E C H A T R O N I C S TPC TPC SERVO & STEP MOTOR, DRIVER Series TDB2000 (일체형/분리형,

S O L U T I O N I N N O V A T I O N T P C M E C H A T R O N I C S TPC TPC SERVO & STEP MOTOR, DRIVER Series TDB2000 (일체형/분리형, S O L U T I O N I N N O V A T I O N T P C M E C H A T R O N I C S TPC-1606-1 www.tpcpage.co.kr TPC SERVO & STEP MOTOR, DRIVER Series TDB2000 (일체형/분리형, 제어기능 내장) TDB3000 (EtherCAT) TDCI (일체형, 제어기능 내장) TDB/TDU

More information

Section 03 트랜지스터를이용한스위칭동작 16/45 트랜지스터의직류특성 활성 직류상황에서전류 I C 는전류 I B 보다 h FE 배만큼더많은전류가흐름» 베이스와이미터가순방향으로바이어스» 컬렉터와베이스가역방향으로바이어스 차단 만일 I B 가 0[A] 이면컬렉터전류

Section 03 트랜지스터를이용한스위칭동작 16/45 트랜지스터의직류특성 활성 직류상황에서전류 I C 는전류 I B 보다 h FE 배만큼더많은전류가흐름» 베이스와이미터가순방향으로바이어스» 컬렉터와베이스가역방향으로바이어스 차단 만일 I B 가 0[A] 이면컬렉터전류 Section 03 트랜지스터를이용한스위칭동작 15/45 스위치 ON/OFF 의전기적특성 트랜지스터와기계적인스위치를이용한 LED ON/OFF 동작비교 LED 를켜기위한회로 ([ 그림 5-6]) Section 03 트랜지스터를이용한스위칭동작 16/45 트랜지스터의직류특성 활성 직류상황에서전류 I C 는전류 I B 보다 h FE 배만큼더많은전류가흐름» 베이스와이미터가순방향으로바이어스»

More information

Chapter #01 Subject

Chapter #01  Subject Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned

More information

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - ch07 - 포인터 pm0415 2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자

More information

Microsoft Word - PIC16x_Section20_Comparator_31020a.doc

Microsoft Word - PIC16x_Section20_Comparator_31020a.doc Section 20. 비교기 (Comparator) 하이라이트 (HIGHLIGHTS) 메뉴얼의이번섹션은다음의주요주제를다룹니다 : 20.1 소개... 20-2 20.2 제어 (Control) 레지스터. 20-3 20.3 비교기설정... 20-4 20.4 비교기운영... 20-6 20.5 비교기레퍼런스... 20-6 20.6 비교기응답시간... 20-8 20.7

More information

<BFACBDC0B9AEC1A6C7AEC0CC5F F E687770>

<BFACBDC0B9AEC1A6C7AEC0CC5F F E687770> IT OOKOOK 87 이론, 실습, 시뮬레이션 디지털논리회로 ( 개정 3 판 ) (Problem Solutions of hapter 9) . T 플립플롭으로구성된순서논리회로의해석 () 변수명칭부여 F-F 플립플롭의입력 :, F-F 플립플롭의출력 :, (2) 불대수식유도 플립플롭의입력 : F-F 플립플롭의입력 : F-F 플립플롭의출력 : (3) 상태표작성 이면,

More information

인터럽트 * 인터럽트처리메커니즘 ATmega128 인터럽트 2

인터럽트 * 인터럽트처리메커니즘 ATmega128 인터럽트 2 ATmega128 인터럽트 1 제 04 강 인터럽트 (Interrupt) 인터럽트개요외부인터럽트참고 ) FND 회로실습및과제 인터럽트 * 인터럽트처리메커니즘 ATmega128 인터럽트 2 인터럽트 ( 계속 ) ATmega128 인터럽트 3 * 인터럽트벡터 (P.104 표 7.1 참조 ) : 35 개 인터럽트 ( 계속 ) * 인터럽트허용 / 금지메커니즘 ATmega128

More information

Microsoft PowerPoint - 30.ppt [호환 모드]

Microsoft PowerPoint - 30.ppt [호환 모드] 이중포트메모리의실제적인고장을고려한 Programmable Memory BIST 2010. 06. 29. 연세대학교전기전자공학과박영규, 박재석, 한태우, 강성호 hipyk@soc.yonsei.ac.kr Contents Introduction Proposed Programmable Memory BIST(PMBIST) Algorithm Instruction PMBIST

More information

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A636C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A636C0CFC2F72E BC8A3C8AF20B8F0B5E55D> 뻔뻔한 AVR 프로그래밍 The 6 th Lecture 유명환 ( yoo@netplug.co.kr) 1 2 통신 관련이야기 시리얼통신 관련이야기 INDEX 3 ATmega128 시리얼통신회로도분석 4 ATmega128 시리얼통신컨트롤러 (USART) 분석 5 ATmega128 시리얼통신관련레지스터분석 6 ATmega128 시리얼통신실습 1 통신 관련이야기 동기

More information

2009년2학기 임베디드시스템 응용

2009년2학기 임베디드시스템 응용 임베디드시스템기초 (#514115 ) #2. GPIO & Matrix Keypad 한림대학교전자공학과이선우 Short Review #1 General Purpose Input Output (GPIO) Output port Input port Switch 사용방법 2 General Purpose Input Output(GPIO) port 모든 MCU의가장기본적이고중요한주변장치

More information

온습도 판넬미터(JTH-05) 사양서V1.0

온습도 판넬미터(JTH-05)  사양서V1.0 온습도 조절기 Model:JTH-05 1. 제품 사양. [제품 구분] JTH-05A(입력 전원 AC), JTH-05D(입력 전원 DC) [전원 사양] JTH-05A 입력 전압 출력 전원 소비 전력 JTH-05D AC 90~240V DC 10~36V 12Vdc / Max.170mA Max.2W [본체 사이즈] ~ 온/습도 범위(본체): 사용 [0 ~ 50, 85%RH

More information

그룹웨어와 XXXXX 제목 예제

그룹웨어와 XXXXX 제목 예제 데이터통신 부호화 (encoding) 부호화 (Encoding) 의개념 정보 Encoder 신호 1 Digital - to - Digital 2 Analog - to - Digital 3 Digital - to - Analog 4 Analog - to - Analog 2 1 Digital-to-Digital Encoding Digital 정보를 Digital

More information

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074> SIMATIC S7 Siemens AG 2004. All rights reserved. Date: 22.03.2006 File: PRO1_17E.1 차례... 2 심벌리스트... 3 Ch3 Ex2: 프로젝트생성...... 4 Ch3 Ex3: S7 프로그램삽입... 5 Ch3 Ex4: 표준라이브러리에서블록복사... 6 Ch4 Ex1: 실제구성을 PG 로업로드하고이름변경......

More information

6_5상 스테핑 모터_ _OK.indd

6_5상 스테핑 모터_ _OK.indd 모델구성 적용모델 : 표준축형,, A 8K M 5 6 6 B Autonics motor 1: 은편축형만제공합니다. 2: Standard 결선방식은주문사양입니다. ( 단, 24각, A4K-G564(W), A8K-G566(W) 은제외입니다.) 모델구성 Q-42 모터형식 적용모델 : 기어드일체형,, 로터리액츄에이터형, 로터리액츄에이터 + A M 5 최대허용토크 모터상수

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074> Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법

More information

ISP and CodeVisionAVR C Compiler.hwp

ISP and CodeVisionAVR C Compiler.hwp USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler http://www.avrmall.com/ November 12, 2007 Copyright (c) 2003-2008 All Rights Reserved. USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler

More information

1. 제품소개 그림. 1.1 이란? DC 모터구동시하드웨어제작에소요되는시간을단축시켜프로그래밍연구개발및학습효과를극대화시켜주는 입니다. 또한당사 DEV 보드와 1P 점퍼클립케이블을이용하여연동이가능하며, 산업용 DC 모터의정회전, 역회전구동및속도제어시유용하게사용되는 입니다.

1. 제품소개 그림. 1.1 이란? DC 모터구동시하드웨어제작에소요되는시간을단축시켜프로그래밍연구개발및학습효과를극대화시켜주는 입니다. 또한당사 DEV 보드와 1P 점퍼클립케이블을이용하여연동이가능하며, 산업용 DC 모터의정회전, 역회전구동및속도제어시유용하게사용되는 입니다. 매뉴얼 (Model: ET-DCM) 이경남 L K 임베디드 서울북부기술인재학원 2013 LK EMBEDDED ET-DCM version 1.0 페이지 1 1. 제품소개 그림. 1.1 이란? DC 모터구동시하드웨어제작에소요되는시간을단축시켜프로그래밍연구개발및학습효과를극대화시켜주는 입니다. 또한당사 DEV 보드와 1P 점퍼클립케이블을이용하여연동이가능하며, 산업용

More information

CAN-fly Quick Manual

CAN-fly Quick Manual adc-171 Manual Ver.1.0 2011.07.01 www.adc.co.kr 2 contents Contents 1. adc-171(rn-171 Pack) 개요 2. RN-171 Feature 3. adc-171 Connector 4. adc-171 Dimension 5. Schematic 6. Bill Of Materials 7. References

More information

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Example 3.1 Files 3.2 Source code 3.3 Exploit flow

More information

(6)

(6) 5-6. EV 모듈의 PWM 출력예제목표 : 본예제에서는 EV(Event Manager) 모듈의 PWM 출력에대해학습한다. DSP8x에는 3상 AC 모터를구동할수있는 조의 PWM과엔코더입력회로가있다. 본예제에서는이 PWM 출력을사용하여 DC 모터의속도를조절해보고, RC 회로로 PWM 를필터링하여사인파형을출력시켜본다. 사용회로고찰 : 3.3V AR Kx4 3

More information

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt 변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short

More information

Microsoft Word - Lab.7

Microsoft Word - Lab.7 Lab. 1. I-V C Lab. 7. Characterist tics of a Dio 능동필터 ode 1. 실험목표 연산증폭기를이용한저역통과필터 (low-pass filter), filter), 대역통과필터 (band-pass filter) 회로를구성, 연산증폭기능동필터회로를이해 고역통과필터 (high-pass 측정및평가해서 2. 실험회로 A. 연산증폭기능동필터

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED Controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include

More information

1_12-53(김동희)_.hwp

1_12-53(김동희)_.hwp 본논문은 2012년전력전자학술대회우수추천논문임 Cascaded BuckBoost 컨버터를 이용한 태양광 모듈 집적형 저전압 배터리 충전 장치 개발 472 강압이 가능한 토폴로지를 이용한 연구도 진행되었지만 제어 알고리즘의 용의성과 구조의 간단함 때문에 BuckBoost 컨버터 또는 Sepic 컨버터를 이용하여 연구 가 진행되었다[10][13]. 태양광 발전

More information

TDB 3000 Series Full Closed Loop STEP DRIVER의특징 Feedback-Loop로인한진동이없음 감속기없이높은토크구현 높은정밀도 정확한속도제어 SERVO DRIVER의특징 위치유지력 탈조가없음 토크제어가능 STEP DRIVER 와 SERVO

TDB 3000 Series Full Closed Loop STEP DRIVER의특징 Feedback-Loop로인한진동이없음 감속기없이높은토크구현 높은정밀도 정확한속도제어 SERVO DRIVER의특징 위치유지력 탈조가없음 토크제어가능 STEP DRIVER 와 SERVO Full Closed Loop STEP DRIVER의특징 Feedback-Loop로인한진동이없음 감속기없이높은토크구현 높은정밀도 정확한속도제어 SERVO DRIVER의특징 위치유지력 탈조가없음 토크제어가능 STEP DRIVER 와 SERVO DRIVER 의장점을일체화저발열및토크특성우수 TDB 000 V 48 바이폴라 (Bipolar) Closed-Loop 스텝모터드라이버

More information

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 제 8 장. 포인터 목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 포인터의개요 포인터란? 주소를변수로다루기위한주소변수 메모리의기억공간을변수로써사용하는것 포인터변수란데이터변수가저장되는주소의값을 변수로취급하기위한변수 C 3 포인터의개요 포인터변수및초기화 * 변수데이터의데이터형과같은데이터형을포인터 변수의데이터형으로선언 일반변수와포인터변수를구별하기위해

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

TEL: 042-863-8301~3 FAX: 042-863-8304 5 6 6 6 6 7 7 8 8 9 9 10 10 10 10 10 11 12 12 12 13 14 15 14 16 17 17 18 1 8 9 15 1 8 9 15 9. REMOTE 9.1 Remote Mode 1) CH Remote Flow Set 0 2) GMate2000A

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 7-SEGMENT DEVICE CONTROL - DEVICE DRIVER Jo, Heeseung 디바이스드라이버구현 : 7-SEGMENT HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 디바이스드라이버구현 : 7-SEGMENT 6-Digit 7-Segment LED

More information

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수

More information

Microsoft PowerPoint - ccs33_bios_PRD.ppt [호환 모드]

Microsoft PowerPoint - ccs33_bios_PRD.ppt [호환 모드] 1. CCS3.3 DSP/BIOS PRD(periodic fuction manager) 생성 1. 디렉토리구성.. cmd..dsp2833x_headers.. include.. testprj_2.. testsrc_2 : Linker 컴맨드파일 : Chip관련헤더파일및헤더용 Linker 컴맨드파일 : 사용자인쿠르드파일 : 사용자프로젝트파일및실행파일 (.HEX)

More information

1. 제품규격및특징 구분 규격및특징 입력전압 DC 12~30V 모터구동방식 Bipolar 방식 최대모터전류 Max 3.0A 초기설정정지전류 :4(0.46A), 구동전류 :18(1.75A) 분주비 0(x256), 1(x128), 2(x64), 3(x32), 4(x16),

1. 제품규격및특징 구분 규격및특징 입력전압 DC 12~30V 모터구동방식 Bipolar 방식 최대모터전류 Max 3.0A 초기설정정지전류 :4(0.46A), 구동전류 :18(1.75A) 분주비 0(x256), 1(x128), 2(x64), 3(x32), 4(x16), All In OneSTEP MBCD-13A ( 스텝모터용 1 축컨트롤러 / 드라이버일체형 ) 사용설명서 MotionBank 1. 제품규격및특징 구분 규격및특징 입력전압 DC 12~30V 모터구동방식 Bipolar 방식 최대모터전류 Max 3.0A 초기설정정지전류 :4(0.46A), 구동전류 :18(1.75A) 분주비 0(x256), 1(x128), 2(x64),

More information

K&R2 Reference Manual 번역본

K&R2 Reference Manual 번역본 typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct

More information

AVR Atmega128

AVR Atmega128 AVR Atmega128 외부인터럽트 중원대학교최재영 인터럽트와폴링 MCU 에서입력을받아들이는방법은폴링방식과인터럽트방식이있음 - 폴링 (Polling) 방식 : 사용자의명령어에의해서하드웨어의변경사항을주기적으로읽어들이는방식 주기적으로하드웨어의변화를체크하기때문에사용자의프로그래밍에따라다양핚변화에대응이가능하지만 CPU 의점유율이높기때문에반응속도가느리다. 인터럽트 (Interrupt)

More information

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 - (Asynchronous Mode) - - - ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 - UART (Univ ers al As y nchronous Receiver / T rans mitter) 8250A 8250A { COM1(3F8H). - Line Control Register

More information

제목을 입력하십시오

제목을 입력하십시오 위상제어정류기 Prf. ByungKuk Lee, Ph.D. Energy Mechatrnics Lab. Schl f Infrmatin and Cmmunicatin Eng. Sungkyunkwan University Tel: 8212994581 Fax: 8212994612 http://seml.skku.ac.kr EML: bkleeskku@skku.edu 위상제어정류회로

More information

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음 프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음 CHAPTER 9 둘중하나선택하기 관계연산자 두개의피연산자를비교하는연산자 결과값은참 (1) 아니면거짓 (0) x == y x 와 y 의값이같은지비교한다. 관계연산자 연산자 의미 x == y x와 y가같은가? x!= y

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

<4D F736F F F696E74202D2037C0E55FC0CEC5CDB7B4C6AEC0C720B5BFC0DB2E707074>

<4D F736F F F696E74202D2037C0E55FC0CEC5CDB7B4C6AEC0C720B5BFC0DB2E707074> 7 장. 인터럽트의동작 한국산업기술대학교 이응혁교수 WWW.ROBOTICSLAB.CO.KR 1 7.1 인터럽트 (Interrupt) 개요 인터럽트개념 프로그램이수행되고있는동안에어떤조건이발생하여수행중인프로그램을일시적으로중지시키게만드는조건이나사건의발생 비동기적으로처리 다른프로그램이수행되는동안여러개의사건을처리할수있는메커니즘 인터럽트가발생하면마이크로컨트롤러는현재수행중인프로그램을일시중단하고,

More information

HBE-MCU-Multi 로배우는 마이크로컨트롤러 (AVR 편 ) 마이크로컨트롤러기능 제 6 장타이머와카운터

HBE-MCU-Multi 로배우는 마이크로컨트롤러 (AVR 편 ) 마이크로컨트롤러기능 제 6 장타이머와카운터 HBE-MCU-Multi 로배우는 마이크로컨트롤러 (AVR 편 ) 마이크로컨트롤러기능 제 6 장타이머와카운터 타이머와카운터 1. 클럭과카운터 2. ATMega128 의타이머 / 카운터 3. 8 비트타이머 / 카운터의일반동작모드 4. 타이머로 LED 점멸시키기 5. 타이머로디지털시계만들기 타이머 / 카운터 타이머와카운터 정확한시간의측정이필요하다.( 자명종과스톱워치

More information

[8051] 강의자료.PDF

[8051] 강의자료.PDF CY AC F0 RS1 RS0 OV - P 0xFF 0x80 0x7F 0x30 0x2F 0x20 0x1F 0x18 0x17 0x10 0x0F 0x08 0x07 0x00 0x0000 0x0FFF 0x1000 0xFFFF 0x0000 0xFFFF RAM SFR SMOD - - - GF1 GF0 PD IDL 31 19 18 9 12 13 14 15 1 2 3 4

More information

(Microsoft PowerPoint - \270\266\300\314\305\251\267\316\304\250USB_Host_Device_\272\316\306\256\267\316\264\365\275\307\275\300_Philip.ppt)

(Microsoft PowerPoint - \270\266\300\314\305\251\267\316\304\250USB_Host_Device_\272\316\306\256\267\316\264\365\275\307\275\300_Philip.ppt) 마이크로칩 USB Host & Device 부트로더기능실습 한국마이크로칩서한석부장 (CAE) 2009-09-07 마이크로칩 16 비트 USB 데모보드세팅 Explorer 16 + USB PICtail Plus Daughter Board + USB PIMs Part #: DM240001 Part #: AC164131 Part #: MA240014(PIC24FJ256GB11)

More information

Microsoft PowerPoint - 제5장 인터럽트 (HBE-MCU-Multi AVR).ppt [호환 모드]

Microsoft PowerPoint - 제5장 인터럽트 (HBE-MCU-Multi AVR).ppt [호환 모드] Chapter. 5 인터럽트 HBE-MCU-Multi AVR Jaeheung, Lee 목차 1. 폴링과인터럽트그리고인터럽트서비스루틴 2. ATMega128 인터럽트 3. 인터럽트로 LED 점멸시키기 4. 인터럽트로스톱워치만들기 인터럽트 1. 폴링과인터럽트그리고인터럽트서비스루틴 2. ATMega128 인터럽트 3. 인터럽트로 LED 점멸시키기 4. 인터럽트로스톱워치만들기

More information

Microsoft PowerPoint - T1 ERS (Elevator Reservation System)SASD2.pptx

Microsoft PowerPoint - T1 ERS (Elevator Reservation System)SASD2.pptx Team : T1 Member : 김영훈, 남장우, 황규원 Presenter : 김영훈 Statement of Purpose System Context Diagram Event List Data Flow Diagram Process Specification i Structured Charts Elevator Reservation System(ERS) -ERS는입력이들어오면입력을스케줄에저장한다.

More information

AN2629

AN2629 Tech Note STM32 ADC 펌웨어가이드 ( 타이머로 ADC 주파수설정 ) Introduction STM32 ADC 는다양하고복잡한기능을제공하기때문에사용자요구에맞는최선의방법을선택하기위해서는 ADC 의모드와특성에대한이해를필요로한다. 또한하드웨어트리거와 DMA 를함께운용하면소프트웨어로처리할때생기는복잡함과타이밍문제를간단하게해결할수있다. ADC 의특징을다음순서로설명한다.

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소

More information

ADP-2480

ADP-2480 Mitsubishi PLC 접속 GP 는 Mitsubishi FX Series 와통신이가능합니다. 시스템구성 6 7 8 GP-80 RS- Cable RS-C Cable FXN--BD FXN--BD 6 FX Series(FXS,FXN,FXN,FXNC, FXU) 7 FXS, FXN 8 FXN FX Series 는기본적으로 RS- 통신을하며, RS-/ converter

More information

MicrocontrollerAcademy_Lab_ST_040709

MicrocontrollerAcademy_Lab_ST_040709 Micro-Controller Academy Program Lab Materials STMicroelectronics ST72F324J6B5 Seung Jun Sang Sa Ltd. Seung Jun Sang Sa Ltd. Seung Jun Sang Sa Ltd. Seung Jun Sang Sa Ltd. Seung Jun Sang Sa Ltd. Seung Jun

More information

슬라이드 1

슬라이드 1 CHAP 2: 순환 (Recursion) 순환 (recursion) 이란? 알고리즘이나함수가수행도중에자기자신을다시호출하여문제를해결하는기법 정의자체가순환적으로 되어있는경우에적합한방법 순환 (recursion) 의예 팩토리얼값구하기 피보나치수열 1 n! n*( n 1)! fib( n) 0 1 fib( n 2) n n 0 ` 1 fib( n 1) if n 0 if

More information

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070> #include "stdafx.h" #include "Huffman.h" 1 /* 비트의부분을뽑아내는함수 */ unsigned HF::bits(unsigned x, int k, int j) return (x >> k) & ~(~0

More information

중간고사

중간고사 중간고사 예제 1 사용자로부터받은두개의숫자 x, y 중에서큰수를찾는알고리즘을의사코드로작성하시오. Step 1: Input x, y Step 2: if (x > y) then MAX

More information

MPLAB C18 C

MPLAB C18 C MPLAB C18 C MPLAB C18 MPLAB C18 C MPLAB C18 C #define START, c:\mcc18 errorlevel{0 1} char isascii(char ch); list[list_optioin,list_option] OK, Cancel , MPLAB IDE User s Guide MPLAB C18 C

More information

(SW3704) Gingerbread Source Build & Working Guide

(SW3704) Gingerbread Source Build & Working Guide (Mango-M32F4) Test Guide http://www.mangoboard.com/ http://cafe.naver.com/embeddedcrazyboys Crazy Embedded Laboratory www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 1 Document History

More information

금오공대 컴퓨터공학전공 강의자료

금오공대 컴퓨터공학전공 강의자료 C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음

More information

2주차: 입출력 제어 복습

2주차: 입출력 제어 복습 마이크로프로세서 응용및실습 ` 13-14 주차 : 직렬통신 (2) 한철수 전자공학과 2/35 직렬통신과병렬통신 직렬통신 한가닥의선으로송수신할데이터를차례대로전송하는방식 장점 : 통신선로가적기때문에경제적임 단점 : 전송속도가느림. 송수신약속이복잡해짐 병렬통신 여러가닥의선으로동시에여러개의데이터를전송하는방식 장점 : 전송속도가빠름 단점 : 직렬통신보다비쌈 3/35

More information

Microsoft PowerPoint - chap03-변수와데이터형.pptx

Microsoft PowerPoint - chap03-변수와데이터형.pptx #include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.

More information