<C7A5C1A6C1F62E687770>
|
|
- 기윤 순
- 6 years ago
- Views:
Transcription
1 Motor Control 일반구조체의사용법구조체의사용법에대해알아보자. 다음예와같이 complex라는구조체는 4바이트의실수형데이터 re( 실수부변수 ) 와 im( 허수부변수 ) 즉, 8바이트로구성이되며구조체 a라는이름으로메모리영역에할당하게된다. 또한, main() 함수에서상기 complex라는구조체의형태로 8바이트로구성된구조체 b를메모리영역에할당하게된다. 여기에서는구조체의각구성요소는동일한데이터형으로선언하였다 typedef 구조체의사용법 typedef으로구조체를선언하게되면, 앞절의일반구조체선언과는달리단순히구조체사용을위한프로토타입으로만사용된다. 즉, 자체만으로는메모리에데이터할당을하지않는다는뜻이다. 128
2 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 다중구조체사용법다음예와같이구조체는다른구조체를포함해서선언될수있다. 이경우다중구조체인구조체 line의사용은다음과같이할수있다. 사용법 struct line myline; // Declare variable myline.a.x = 2.0; myline.a.y = 3.3; 구조체에서의배열과포인터사용법데이터집합및문자의집합인문자열을액세스할때매우유용하게사용될수있는배열및포인터를다음예에서와같이구조체의멤버로사용하면편리하고강력한기능을발휘할수있게된다. 아래예에서문자형포인터변수 B는구조체생성시문자열이저장된어드레스를가리키는용도로사용이되며, 실제문자열을선언할때생성되는메모리의시작어드레스를가리키게되는것이다. 따라서이문자열은구조체내에존재하는것이아니고메모리의어딘가에할당될것이며, 할당된문자열의시작주소를참조하는포인터변수가구조체의포인터변수인 B가되는것이다. 129
3 Motor Control 그러면, 포인터를이용하여구조체를액세할수있을까? 물론가능한다. 다음예에서와같이포인터의데이터형을구조체로선언하게되면포인터를이용하여구조체는물론, 구조체의각멤버들을참조할수있다. 참고로, 구조체를참조하는연산자는 이다 구조체실습앞절에서수행했던것과동일한방법으로 Demo11라는프로젝트를만들어보자. 130
4 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 절차 1. MPLAB IDE 실행 2. 디바이스선택 - Menu Configure Select Device 클릭 - Select Device 윈도우 : Device PIC24FJ128GA010 선택 - OK 버튼클릭 3. 프로젝트생성 - Menu Project New 클릭 - Project Name : Demo11 입력 - Project Directory : C:\Temp\Demo11 입력 - OK 버튼클릭 4. C30 컴파일러선택 - Menu Project Select Language Toolsuit : MPLAB C30 선택 5. 디바이스링커스크립트파일추가 - 프로젝트매니저윈도우의 Linker Scripts 폴더에서마우스우측버튼클릭 Add Files... 항목선택 - p24fj128ga010.gld 파일클릭후열기 (Open) 버튼클릭 * 링커스크립트파일위치 : C:\Program Files\Microchip\MPLAB C30\Support\gld 6. C 소스코드생성하기 - Menu File New 클릭 - Menu File Save As 클릭 - 파일이름 : Demo11.c 입력후저장버튼클릭 7. 프로젝트에 C 소스코드추가 - 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 131
5 Motor Control - C:\Temp\Demo11\Demo11.c 선택후열기 (Open) 버튼클릭 8. C 소스코드입력이제에디터윈도우의 Demo11.c 파일에다음과같이실습할 C 소스코드를입력하자. //#include <p24fj128ga010.h> #include <stdio.h> typedef struct int re; int im; } complex; //Data types within a structure do NOT need to be the same complex x; complex *p; int main(void) x.re = 2; x.im = 5; printf("x = %d + j%d\n", x.re, x.im); p = &x; p re = 7; p im = 3; //Pointer to a structure //Accessing structure members via a pointer printf("x = %d + j%d\n", x.re, x.im); } while(1); 9. Build Option 설정 - Menu Project Build Options Project 선택 - Menu Project Build Options Project General : Library Path 설정 : C:\Program Files\Microchip\MPLAB C30\lib 132
6 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 - Menu Project Build Options Project MPLAB LINK 30 : Heap Size : 256 입력 10. MPLAB SIM 설정 EE. Menu Debugger Select Tool MPLAB SIM 클릭 FF. Menu Debugger Settings 클릭 GG. Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 11. Build All HH. Menu Project Build All 클릭 (Ctrl + F10) II. Output Window Build 탭에서메시지확인 : BUILD SUCCEEDED 확인 12. MPLAB SIM 실행 A. Menu Debugger Run (F9) 클릭 B. Output Window에서출력값확인 133
7 Motor Control 공용체 (Union) 실습공용체 (Union) 의가장큰특징은동일한특정데이터공간을서로다른데이터형으로사용할수있다는점에서구조체와구분된다. 공용체에서는사용된멤버의데이터형중에서가장큰사이즈의데이터형이공용체의데이터사이즈가된다. 다음실습을통해서공용체에대해알아보자. 절차 1. MPLAB IDE 실행 2. 디바이스선택 - Menu Configure Select Device 클릭 - Select Device 윈도우 : Device PIC24FJ128GA010 선택 - OK 버튼클릭 3. 프로젝트생성 - Menu Project New 클릭 - Project Name : Demo12 입력 - Project Directory : C:\Temp\Demo12 입력 - OK 버튼클릭 4. C30 컴파일러선택 - Menu Project Select Language Toolsuit : MPLAB C30 선택 5. 디바이스링커스크립트파일추가 - 프로젝트매니저윈도우의 Linker Scripts 폴더에서마우스우측버튼클릭 Add Files... 항목선택 - p24fj128ga010.gld 파일클릭후열기 (Open) 버튼클릭 * 링커스크립트파일위치 : C:\Program Files\Microchip\MPLAB C30\Support\gld 6. C 소스코드생성하기 - Menu File New 클릭 - Menu File Save As 클릭 - 파일이름 : Demo12.c 입력후저장버튼클릭 134
8 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 7. 프로젝트에 C 소스코드추가 - 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 - C:\Temp\Demo12\Demo12.c 선택후열기 (Open) 버튼클릭 8. C 소스코드입력이제에디터윈도우의 Demo12.c 파일에다음과같이실습할 C 소스코드를입력하자. //#include <p24fj128ga010.h> #include <stdio.h> typedef union char a; int b; float c; } jampack; jampack x; int main(void) x.a = 0xFF; x.b = 0x55AA; x.c = ; } while(1); 9. Build Option 설정 - Menu Project Build Options Project 선택 - Menu Project Build Options Project General : Library Path 설정 : C:\Program Files\Microchip\MPLAB C30\lib - Menu Project Build Options Project MPLAB LINK 30 : Heap Size : 256 입력 135
9 Motor Control 10. MPLAB SIM 설정 JJ. Menu Debugger Select Tool MPLAB SIM 클릭 KK. Menu Debugger Settings 클릭 LL. Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 11. Build All MM. Menu Project Build All 클릭 (Ctrl + F10) NN. Output Window Build 탭에서메시지확인 : BUILD SUCCEEDED 확인 12. Watch 변수설정 - Menu View Watch 클릭 - Symbol Name에변수 x 추가 13. MPLAB SIM 실행 A. Menu Debugger Run (F9) 클릭 B. Menu Debugger Halt(F5) 클릭 C. Watch 윈도우의공용체 x의각멤버들의주소및값확인 136
10 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 비트필드 (Bit Fields) 비트필드는구조체의특수한형태로써구조체의멤버를비트단위로메모리할당을하기위해사용하며이방법은임베디드프로그래밍에서매우유용한기능을발휘하게된다. 마이크로컨트롤러의데이터시트를보면, 8비트또는 16비트 SFR(Special Function Register) 은각비트마다특정명칭과함께그기능이명시되어있다. C언어에서가장작은데이터형은 8비트 (1바이트) 메모리사이즈를갖는문자형 (char) 변수이므로, 비트단위로변수를할당할수없게된다. 이러한경우비트필드를이용하게되면 1바이트의메모리에비트단위로최대 8개의멤버를선언할수있게된다. 137
11 Motor Control 비트필드사용예 typedef struct tagmybitfield BitfieldA: 1; BitfieldB: 1; BitfieldC: 3; BitfieldD: 1; BitfieldE: 2; } MyBitField; 절차 1. MPLAB IDE 실행 2. 디바이스선택 - Menu Configure Select Device 클릭 - Select Device 윈도우 : Device PIC24FJ128GA010 선택 - OK 버튼클릭 3. 프로젝트생성 - Menu Project New 클릭 - Project Name : Demo13 입력 - Project Directory : C:\Temp\Demo13 입력 - OK 버튼클릭 4. C30 컴파일러선택 - Menu Project Select Language Toolsuit : MPLAB C30 선택 5. 디바이스링커스크립트파일추가 - 프로젝트매니저윈도우의 Linker Scripts 폴더에서마우스우측버튼클릭 Add Files... 항목선택 - p24fj128ga010.gld 파일클릭후열기 (Open) 버튼클릭 * 링커스크립트파일위치 : C:\Program Files\Microchip\MPLAB C30\Support\gld 138
12 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 6. C 소스코드생성하기 - Menu File New 클릭 - Menu File Save As 클릭 - 파일이름 : Demo13.c 입력후저장버튼클릭 7. 프로젝트에 C 소스코드추가 - 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 - C:\Temp\Demo13\Demo13.c 선택후열기 (Open) 버튼클릭 8. C 소스코드입력이제에디터윈도우의 Demo13.c 파일에다음과같이실습할 C 소스코드를입력하자. //#include <p24fj128ga010.h> #include <stdio.h> typedef struct char bit0: 1; char bit1: 1; char bit2: 1; char bit3: 1; char bit4: 1; char bit5: 1; char bit6: 1; char bit7: 1; } bitfield; bitfield x; char y = 0; bitfield z; int main(void) x.bit0 = 1; 139
13 Motor Control x.bit6 = 1; x.bit7 = 5; //x = 0xAA; //No error here only LSb used //This cannot be done with a bit field //y = (char)x; //This doesn't work either z = x; } while(1); 9. Build Option 설정 - Menu Project Build Options Project 선택 - Menu Project Build Options Project General : Library Path 설정 : C:\Program Files\Microchip\MPLAB C30\lib - Menu Project Build Options Project MPLAB LINK 30 : Heap Size : 256 입력 10. MPLAB SIM 설정 OO. Menu Debugger Select Tool MPLAB SIM 클릭 PP. Menu Debugger Settings 클릭 QQ. Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 11. Build All RR. Menu Project Build All 클릭 (Ctrl + F10) SS. Output Window Build 탭에서메시지확인 : BUILD SUCCEEDED 확인 12. Watch 변수설정 - Menu View Watch 클릭 - Symbol Name에변수 x, y, z 추가 140
14 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 13. MPLAB SIM 실행 A. Menu Debugger Run (F9) 클릭 B. Menu Debugger Halt(F5) 클릭 C. Watch 윈도우의공용체 x, y, z의각비트필드주소및값확인 141
15 Motor Control 나열형 (Enumerated) 변수나열형변수는나열된정수형상수를저장하기위한변수로취급되며, 데이터사이즈는 2 바이트이다. 또한나열된상수는놓여진순서에의해 1씩증가된값으로자동할당된다. 다음예를살펴보자. 위의예제에서보듯이나열된정수형상수 RED는 1 로할당을했기때문에 GREEN과 BLUE라는상수는각각 2, 3 의정수값을갖는상수로취급된다. 하지만컴파일러는이들상수에대해서는메모리할당을하지않고, 단지 RED, GREEN, BLUE라는상수값을참조만할뿐이다. 다음은나열형상수값을갖는나열형변수 pixel을만드는두가지표현이다. 아래예에서는위와는달리 pixel이라는 2바이트정수형변수를메모리에할당하게되며, 할당된메모리에상수를저장하는예이다. 궁금하신분은 MPLAB IDE에서 watch 윈도우를통해확인을해보길권한다. 142
16 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 C30 컴파일러의속성 (Attribute) MPLAB C30는 attribute 키워드를이용하여컴파일러로하여금특정변수또는함수에대해특정속성을갖도록할수있다. 사용법은 attribute 키워드후에이중괄호즉, (( )) 안에속성을삽입하면된다. 그럼 C30 컴파일러의속성에대해살펴보자 변수선언속성매크로다음매크로는 C30 컴파일러에서특정메모리를특정메모리영역에할당하도록선언하기위한옵션을매크로를이용하여간략히표현할수있다. 참고로인자 N는 2의제곱값즉, 2, 4, 6,... 값중하나를이용해서표현해야한다 변수선언속성매크로사용예매크로선언을이용하여특정메모리에변수를할당하기위한예를살펴보자. 정수형데이터 16 개를갖는배열을 32 바이트어드레스에정렬되도록하기위한선언 int _XBSS(32) xbuf[16]; 특별한정렬옵션없이 EEPROM 에정수형배열을할당하기위한선언 int _EEDATA(2) table1[] = 0, 1, 1, 2, 3, 5, 8, 13, 21}; 디바이스가리셋될때변수의값을초기화하지않고기존값을유지하기위한선언 int _PERSISTENT var1, var2; 143
17 Motor Control 특정어드레스에변수를할당하기위한선언 [C30 사용시 ] int attribute ((address(0x900))) buf1[128]; [Assembly 사용시 ].section *,address(0x900),bss,near.global _buf1.align 2 _buf1:.space 함수선언속성 C30 컴파일러에서다음예와같이변수와유사하게특정함수도특정어드레스에할당할수있다. [ C30 사용시 ] void attribute ((address(0x2000))) func() } [ Assembly 사용시 ].section _func: return *,address(0x2000),code.global _func.align 프로그램메모리에상수할당옵션 (space(psv)) 프로그램메모리의특정영역에상수를할당하기위해서는다음과같이 space(psv) 속성을사용하여상수값들이 PSV 영역에할당되도록선언해야한다. [ C 언어사용시 ] const unsigned attribute ((space(psv), address(0x2000))) table[10] = 0,1,2,3,4,5,6,7,8,9}; 144
18 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 [ Assembly 사용시 ].section _table: *,address(0x2000),psv.global _table.align 2.word 0,1,2,3,4,5,6,7,8, 데이터메모리에상수할당옵션데이터메모리의특정영역에상수를할당하기위해서는다음과같이 space(data) 속성을사용하여상수값들이데이터메모리영역에할당되도록선언해야한다. [ C 언어사용시 ] const unsigned attribute ((space(data), address(0x900))) table[10] = 0,1,2,3,4,5,6,7,8,9}; [ Assembly 사용시 ].section _table: *,address(0x900),data.global _table.align 2.word 0,1,2,3,4,5,6,7,8, EEPROM 에데이터할당처음에설명한매크로를이용하여 EEPROM 매모리에변수를할당하기위해서는 EEDATA(align) 매크로를이용하여다음과같이사용할수있다. unsigned int _EEDATA(2) Table2[4] = 0x1234, 0x5678, 0x9ABC, 0xDEF0}; 여기에서정렬 (alignment) 옵션으로사용한 _EEDATA(2) 는워드 (2바이트) 단위로데이터를쓰고지우기를하겠다는것을의미한다. 다음과같이선언했을경우를살펴보자. 145
19 Motor Control unsigned int _EEDATA(32) Table1[16] = 0}; 이경우, 정수형데이터 16 개를초기값 0 로총 32 바이트를할당하기위해 _EEDATA(32) 를이용하였으며, 이경우프로그래밍알고리즘을이용하여 32바이트를쓰고지울수있게된다 메모리할당실습 절차 1. MPLAB IDE 실행 2. 디바이스선택 - Menu Configure Select Device 클릭 - Select Device 윈도우 : Device PIC24FJ128GA010 선택 - OK 버튼클릭 3. 프로젝트생성 - Menu Project New 클릭 - Project Name : Demo14 입력 - Project Directory : C:\Temp\Demo14 입력 - OK 버튼클릭 4. C30 컴파일러선택 - Menu Project Select Language Toolsuit : MPLAB C30 선택 5. 디바이스링커스크립트파일추가 - 프로젝트매니저윈도우의 Linker Scripts 폴더에서마우스우측버튼클릭 Add Files... 항목선택 - p24fj128ga010.gld 파일클릭후열기 (Open) 버튼클릭 * 링커스크립트파일위치 : C:\Program Files\Microchip\MPLAB C30\Support\gld 146
20 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 6. C 소스코드생성하기 - Menu File New 클릭 - Menu File Save As 클릭 - 파일이름 : Demo14.c 입력후저장버튼클릭 7. 프로젝트에 C 소스코드추가 - 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 - C:\Temp\Demo14\Demo14.c 선택후열기 (Open) 버튼클릭 8. C 소스코드입력이제에디터윈도우의 Demo14.c 파일에다음과같이실습할 C 소스코드를입력하자. #include <p24fj128ga010.h> #include <stdio.h> // Locate a constant in program memory const unsigned attribute ((space(psv), address (0x2000))) table[10] = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; // Locate a variable in data memory int attribute ((address(0x900))) x = 5; // Locate a function in program memory // Attribute must be included in function prototype at a minimum to // locate the functionat a specific address int attribute ((address(0x2100))) square(int a); int main(void) int y, i; y = square(x); for (i = 0; i < 10; i++) printf("table[%d] = %d\n", i, table[i]); } 147
21 Motor Control } while(1); // Attribute need not be included here as long as it is present in the function prototype // int attribute ((address(0x2100))) square(int a) int square(int a) return (a * a); } 9. Build Option 설정 - Menu Project Build Options Project 선택 - Menu Project Build Options Project General : Library Path 설정 : C:\Program Files\Microchip\MPLAB C30\lib - Menu Project Build Options Project MPLAB LINK 30 : Heap Size : 256 입력 10. MPLAB SIM 설정 TT. Menu Debugger Select Tool MPLAB SIM 클릭 UU. Menu Debugger Settings 클릭 VV. Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 11. Build All WW. Menu Project Build All 클릭 (Ctrl + F10) XX. Output Window Build 탭에서메시지확인 : BUILD SUCCEEDED 확인 12. Watch 변수설정 - Menu View Watch 클릭 - Symbol Name에변수 x, y, table 추가 148
22 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 13. MPLAB SIM 실행 A. Menu Debugger Run (F9) 클릭 B. Menu Debugger Halt(F5) 클릭 C. Output Window에서출력값확인 D. Watch 윈도우의변수 x, y, table의메모리어드레스및값확인 * Watch 윈도우에서배열 table 의어드레스에표시된마크 P 는프로그램메모리의어드레스임을말해주는것이다. 149
23 Motor Control C30 컴파일러의 I/O 포트액세스 C30 컴파일러에서는 I/O 포트의이름을이용하여포트전체를액세스할수있으며, 또한구조체를이용하여 I/O 포트의특정비트도액세스할수있다. 이들 I/O 포트변수들은헤더파일에서각각정의되어있으며, 링커가각각의메모리영역에맵핑해주고있다. 디바이스헤더파일중 P24FJ128GA010.h 파일을열어보면다음과같이 PORTD에대해서구조체를이용하여각비트를선언한것을볼수있을것이다. 또한링커스크립트파일인 P24FJ128GA010.gld 파일을열어보면다음과같이 I/O 포트변수들의어드레스를선언한것을볼수있을것이다. 이들어드레스는데이터시트의 PORTD 어드레스와동일한값을가지고있다. 따라서이들 I/O 포트변수를이용하여프로그래밍이가능하게되고, 또한이들값들은실제디바이스의해당포트의입 / 출력값과매칭될수있게되는것이다. 150
24 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 [ I/O 포트변수예 ] PORTA PORTD [ I/O 포트의비트예 ] PORTDbits.RD0 _RD I/O 포트프로그래밍실습 절차 1. MPLAB IDE 실행 2. 디바이스선택 - Menu Configure Select Device 클릭 - Select Device 윈도우 : Device PIC24FJ128GA010 선택 - OK 버튼클릭 3. 프로젝트생성 - Menu Project New 클릭 - Project Name : Demo15 입력 - Project Directory : C:\Temp\Demo15 입력 - OK 버튼클릭 151
25 Motor Control 4. C30 컴파일러선택 - Menu Project Select Language Toolsuit : MPLAB C30 선택 5. 디바이스링커스크립트파일추가 - 프로젝트매니저윈도우의 Linker Scripts 폴더에서마우스우측버튼클릭 Add Files... 항목선택 - p24fj128ga010.gld 파일클릭후열기 (Open) 버튼클릭 * 링커스크립트파일위치 : C:\Program Files\Microchip\MPLAB C30\Support\gld 6. C 소스코드생성하기 - Menu File New 클릭 - Menu File Save As 클릭 - 파일이름 : Demo15.c 입력후저장버튼클릭 7. 프로젝트에 C 소스코드추가 - 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 - C:\Temp\Demo15\Demo15.c 선택후열기 (Open) 버튼클릭 8. C 소스코드입력이제에디터윈도우의 Demo15.c 파일에다음과같이실습할 C 소스코드를입력하자. #include <p24fj128ga010.h> #include <stdio.h> int main(void) TRISD = 0x0000; PORTDbits.RD0 = 1; } while(1); 152
26 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 9. Build Option 설정 - Menu Project Build Options Project 선택 - Menu Project Build Options Project General : Library Path 설정 : C:\Program Files\Microchip\MPLAB C30\lib - Menu Project Build Options Project MPLAB LINK 30 : Heap Size : 256 입력 10. MPLAB SIM 설정 YY. Menu Debugger Select Tool MPLAB SIM 클릭 ZZ. Menu Debugger Settings 클릭 AAA. Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 11. Build All BBB. Menu Project Build All 클릭 (Ctrl + F10) CCC. Output Window Build 탭에서메시지확인 : BUILD SUCCEEDED 확인 12. Watch 변수설정 - Menu View Watch 클릭 - Symbol Name에변수 TRISD, PORTD 추가 13. MPLAB SIM 실행 A. Menu Debugger Run (F9) 클릭 B. Menu Debugger Halt(F5) 클릭 C. Watch 윈도우의변수 PORTD, TRISD의메모리어드레스및값확인 153
27 Motor Control 인터럽트함수 (Interrupt Service Routine) 인터럽트함수의프로토타입및선언 C30 컴파일러에서인터럽트함수는다음과같이인터럽트속성을이용하여함수의이름을미리선언해주어야한다. 이선언문은컴파일러를통해자동으로해당인터럽트함수의어드레스를인터럽트벡터테이블에할당하게된다. void attribute ((interrupt)) _INT0Interrupt(void); 인터럽트함수로들어갈때스택저장 (PUSH.S) 및인터럽트로부터빠져나올때스택복귀 (POP.S) 를사용하기위해서는인터럽트함수의선언을다음과같이 shadow 속성을이용해서컴파일러에게알려주어야한다. void attribute ((interrupt, shadow)) _INT0Interrupt(void); 변수및레지스터의저장이컴파일러에의해자동으로처리되지않도록하기위해서는인터럽트속성에다음과같이 save 속성을추가해야한다. 이경우, 인터럽트함수로들어갈때및나올때특졍변수 (var1, var2) 를자동으로저장및복귀할수있도록컴파일러가지원하게된다. void attribute ((interrupt(save(var1, var2)))) _INT0Interrupt(void); 인터럽트함수의매크로인터럽트함수의속성인 attribute 사용이불편하다면다음과같이매크로를이용하여간단한표현으로대체할수있다. 이들매크로는디바이스헤더파일에이미선언되어있으므로바로사용이가능하다. [ 매크로선언예 ] #define _ISR attribute ((interrupt)) #define _ISRFAST attribute ((interrupt, shadow)) 154
28 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 [ 매크로사용예 ] void _ISR _INT0Interrupt(void); 위에서매크로 _ISR은 attribute ((interrupt)) 와동일한표현이며축약형이라말할수있다 인터럽트실습외부인터럽트 INT0를사용한예제를보여주고있다. 인터럽트함수가호출되기위해서는인터럽트플래그비트인 IFS0bits.INT0IF 가 1 로세트 (set) 되어야한다. #include <p24fj128ga010.h> #include <stdio.h> void attribute ((interrupt)) _INT0Interrupt(void) static int count = 0; // Count number of times interrupt has occurred // Static variable retains its value across function calls } IFS0bits.INT0IF = 0; // Clear interrupt flag count++; // Increment interrupt count printf("int0 interrupt has occurred. (%d)\n", count); int main(void) // Setup Interrupts INTCON1bits.NSTDIS = 1; INTCON2bits.INT0EP = 0; IPC0bits.INT0IP = 7; IFS0bits.INT0IF = 0; IEC0bits.INT0IE = 1; // Disable nested interrupts // Interrupt on positive edge // Set interrupt priority (3 bit field) // Clear interrupt flag // Enable INT0 interrupt } // Wait for interrupt event while(1); 155
29 Motor Control 절차 1. MPLAB IDE 실행 2. 디바이스선택 - Menu Configure Select Device 클릭 - Select Device 윈도우 : Device PIC24FJ128GA010 선택 - OK 버튼클릭 3. 프로젝트생성 - Menu Project New 클릭 - Project Name : Demo16 입력 - Project Directory : C:\Temp\Demo16 입력 - OK 버튼클릭 4. C30 컴파일러선택 - Menu Project Select Language Toolsuit : MPLAB C30 선택 5. 디바이스링커스크립트파일추가 - 프로젝트매니저윈도우의 Linker Scripts 폴더에서마우스우측버튼클릭 Add Files... 항목선택 - p24fj128ga010.gld 파일클릭후열기 (Open) 버튼클릭 * 링커스크립트파일위치 : C:\Program Files\Microchip\MPLAB C30\Support\gld 6. C 소스코드생성하기 - Menu File New 클릭 - Menu File Save As 클릭 - 파일이름 : Demo16.c 입력후저장버튼클릭 7. 프로젝트에 C 소스코드추가 - 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 - C:\Temp\Demo16\Demo16.c 선택후열기 (Open) 버튼클릭 156
30 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 8. C 소스코드입력이제에디터윈도우의 Demo16.c 파일에다음과같이실습할 C 소스코드를입력하자. #include <p24fj128ga010.h> #include <stdio.h> void attribute ((interrupt)) _INT0Interrupt(void) static int count = 0; // Count number of times interrupt has occurred // Static variable retains its value across function calls } IFS0bits.INT0IF = 0; // Clear interrupt flag count++; // Increment interrupt count printf("int0 interrupt has occurred. (%d)\n", count); int main(void) // Setup Interrupts INTCON1bits.NSTDIS = 1; INTCON2bits.INT0EP = 0; IPC0bits.INT0IP = 7; IFS0bits.INT0IF = 0; IEC0bits.INT0IE = 1; // Disable nested interrupts // Interrupt on positive edge // Set interrupt priority (3 bit field) // Clear interrupt flag // Enable INT0 interrupt } // Wait for interrupt event while(1); 9. Build Option 설정 - Menu Project Build Options Project 선택 - Menu Project Build Options Project General : Library Path 설정 : C:\Program Files\Microchip\MPLAB C30\lib - Menu Project Build Options Project MPLAB LINK 30 : Heap Size : 256 입력 10. MPLAB SIM 설정 DDD. Menu Debugger Select Tool MPLAB SIM 클릭 157
31 Motor Control EEE. Menu Debugger Settings 클릭 FFF. Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 11. Build All GGG. Menu Project Build All 클릭 (Ctrl + F10) HHH. Output Window Build 탭에서메시지확인 : BUILD SUCCEEDED 확인 12. Watch 변수설정 III. Menu View Watch 클릭 JJJ. Symbol Name에 IPC0, IFS0, count 추가 13. Build Configuration 설정 - Debug로설정 14. Break Point 설정 A. MPLAB IDE Editor 윈도우 main.c 파일활성화 B. IFS0bits.INT0IF = 0 코드라인에브레이크포인트설정 ( 마우스좌측버튼더블클릭 ) 158
32 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 15. MPLAB SIM 실행 A. Menu Debugger Run (F9) 클릭 B. Menu Debugger Halt(F5) 클릭 16. 레지스터값입력 - Watch 윈도우의레지스터 IFS0의값에 1 입력 17. MPLAB SIM 재실행 - 방법1 : Menu Debugger Run(F9) 클릭 - 방법2 : Menu Debugger Step Into(F7) 클릭 : 한라인씩실행명령 - 방법3 : Debugger Toolbar 이용 18. Watch 윈도우확인 - Watch 윈도우의변수 count 값변화확인 19. 반복 - 14~17번과정반복실행 - Watch 윈도우의변수 count 값변화확인 159
33 Motor Control 2.4 PIC 용하이텍 (HI-TECH) PICC C 언어프로그래밍 하이텍 (HI-TECH) C 컴파일러소개 마이크로칩에서는 8비트, 16비트, 32비트용 C 컴파일러를다른컴파일러개발회사와공동으로개발하여더많은리소스들을확보하고있다. 마이크로칩본사에서지원하는 C 컴파일러는 PIC18용인 C18 컴파일러와 16비트용인 C30, 32비트용인 C32등을개발하였다. 그러나 PIC10/12/16 등의 8비트디바이스들은마이크로칩에서는지원하지않는다. 그로인해, PIC10/12/16 등의 8비트디바이스를지원하는 C 컴파일러는지금소개하는하이텍 (HI-TECH) C 컴파일러나 CCS-C 컴파일러, 그리고 IAR C 컴파일러등이있다. ( 본사웹사이트참조 : Design [Development Tools] -> Software [PIC10/12/16 Compilers] ) 하이텍 (HI-TECH) C 컴파일러는다음과같은기능을가지고있다. - ANSI C 표준컴파일러 ( 다른 ANSI 표준 C 컴파일러로쉽게포팅가능 ) - 신뢰성높은컴파일링및빌드 - 다양한 C 컴파일링최적화레벨제공 - C 컴파일러에최적화된에셈블러내장 - 최소 RAM 사용을위한지역변수중첩기능이포함된풀링커 (Linker) - 소스코드와함께제공되는 C 라이브러리제공 - 24-bit and 32-bit IEEE 플로우팅포인트연산기능및 32-bit long 데이터지원 - C 언어와어셈블러혼용사용가능 - 무제한소스파일개수빌드가능 - 어셈블러리스트파일보기기능지원 - 마이크로칩개발툴과완벽한호환및통합개발가능 - 다양한 OS 지원 (Windows (up to Vista64), Linux, Mac OS X) 에가면하이텍 C 컴파일러에대한여러정보를더자세히알수있다. 또한, 아래그림과같이하이텍 C 컴파일러는 PIC 디바이스별여러버전으로지원하고있다. 160
34 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 이교재에서는 3 장과 4 장에서실습할 PIC 디바이스가 PIC16F887 이기때문에 PIC10/12/16 MCU Family STD Compiler를선택한다. 정품라이센스버전은 45일간데모판으로사용가능하다 하이텍 (HI_TECT) C 컴파일러설치하기 하이텍 (HI-TECH) PICC-Lite v9.60pl2 컴파일러설치하기 이버전은무상으로설치되는컴파일러로아래와같은버전이있다. 161
35 Motor Control 그리고, 이프리버전컴파일러는무상인만큼아래표와같은제약사항이있다. 지원하는디바이스는 12F629/675, 16C84, 16F627/684/690/84A/877/887/917 등이있다. 이번교재에서실습할 PIC 디바이스가 PIC16F887 이므로이디바이스에대한제한사항 (Limitations) 를보면두개의램뱅크를사용가능하고, 프로그램사이즈는 2K바이트를못넘게되어있다. 2 RAM 뱅크제한의의미는, 뱅크당보통 256바이트공간이므로, 최대변수크기가 512바이트를못넘는다는의미이다. 이번실습에서는 2K바이트롬영역과 512바이트램영역이면충분하므로 3, 4장실습에서는이프리버전인 Lite 버전을사용한다. 1. 하이텍 (HI-TECH) PICC-Lite 버전다운로드하기 이하이텍 PICC-Lite 프리버전을다운로드하는방법은두가지가있다. 1) MPLAB IDE 8.02( 최신버전 ) 을설치하면자동으로설치된다. ( Design [MPLAB IDE] 에서다운로드받는다 ) MPLAB IDE 통합개발툴설치하기 를참조하여순서대로설치한다. MPLAB IDE를설치하면끝이므로이다음과정은무시한다. 2) 하이텍 C 컴파일러회사웹사이트에서다운로드받아설치한다. ( 웹주소는 회사 162
36 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 사정상웹주소가바뀔수도있다 ) 라이센스정품과프리버전과의차이점은다음표와같다. 2. 하이텍 PICC-Lite 또는 PICC STD(v9.60PL2) 컴파일러설치하기 163
37 Motor Control <Step 1> 다운로드받은 PICC V9.xxPLx setup.exe 또는 PICC-Lite xxx.exe 실행파일을클릭한다. (PICC-Lite 버전은 MPLAB IDE 최신버전을설치할때이미설치가되므로이후순서는 PICC STD 정품라이센스버전을설치한다. 라이센스가없을시에는 45일간데모버전으로사용이가능하다.) <Step 2> 설치시작화면이나오면 Next 버튼을클릭한다. <Step 3> - 정품라이센스 STD 버전을구입하였으면, Activate Serial Number를체크하고 Off-Line은체크하지않는다. - 데모버전을 45일간사용시에는 Activate demo with xx day evaluation license를체크하고, Off-Line도체크한다. Next 버튼클릭한다. 164
38 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 <Step 4> 라이센스체크박스에클릭하여동의한다. Next 버튼클릭한다. <Step 5> MPLAB IDE와연동하는체크박스와 HI-TIDE 환경설정체크박스및설치폴더를지정한다. ( 디폴트폴트위치를권장 ) <Step 6> 설치언어 English 설정과 Add to environment path 체크박스에체크한다. Next 버튼클릭한다. 165
39 Motor Control <Step 7> 설치과정 <Step 8> HI-TIDE 툴설치및설치과정. Next 버튼클릭한다. <Step 9> 설치완료 Finish 버튼클릭한다. 166
40 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 하이텍 (HI-TECH) PICC 컴파일러시작하기 하이텍 C 컴파일러를설치하면, C:\Program Files\HI-TECH Software\PICC\9.xx ( 디폴트디렉토리 ) 또는 C:\Program Files\HI-TECH Software\PICC\LITE\9.xx ( 디폴트디렉토리 ) 안에 \docs 라는하위폴더안에 manual.pdf 파일이있다. 이파일이하이텍 C 컴파일러유저가이드이므로필히참고하기를바란다. 1. MPLAB IDE 새프로젝트만들기 <Step 1> - MPLAB IDE 프로그램을실행한다. ( 바탕화면 MPLAB IDE 아이콘또는시작-> 모든프로그램 -> Microchip -> MPLAB IDE v8.xx ->MPLAB IDE 를클릭한다.) <Step 2> - 우측메인윈도우화면에서 Project 메뉴를선택한뒤 Project Wizard( 프로젝트만들기마법사 ) 하위메뉴를클릭한다. <Step 3> 프로젝트시작윈도우화면나타남. Next 버튼클릭한다. 167
41 Motor Control <Step 4> 프로젝트에사용할디바이스선정화면 PIC16F887로선정한다. 다음 (Next) 버튼클릭한다. 이책에서실습할 PIC 마이컴이 PIC16F887이므로이렇게설정되었다. 다른 PIC을사용시에는사용할 PIC 디바이스명으로설정하면된다. <Step 5> 하이텍 PICC 또는 PICC-Lite 컴파일러툴설정한후, 다음 (Next) 버튼클릭한다. ( 만약, 다른디렉토리에설치하였다면, Location 란의 Browse 버튼을클릭하여설치한다른디렉토리로설정한다 ) <Step 6> 새프로젝트디렉토리 ( 폴더 ) 만들기 Create New Project File 란에 Browse 버튼클릭하여원하는폴더만들거나지정한다.( 단, 한글이나특수문자로된폴더로만들기또는지정하는것이금지한다 ) 다음 (Next) 버튼을클릭한다. 168
42 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 <Step 7> 기존에이미있는파일등을추가하기. ( 추가할파일등이없으면그냥통과 ) 다음 (Next) 버튼을클릭한다. <Step 8> 마지막으로만들어진새프로젝트에대한요약내용보여주기마침 (Finish) 버튼을클릭한다. 자, 이제아래그림과같이새프로젝트가만들어진 MPLAB IDE 통합개발환경윈도우가나타난다. 이윈도우안에아무런창이안보일경우에는 View 메뉴를클릭하면 Project 와 Output 하위메뉴를둘다클릭한다. 169
43 Motor Control 이제새프로젝트만들기가우측그림과같이완료되었다. <Sub-Step 1> 만약 PIC 디바이스명을다른디바이스로바꾸고싶다면, 메뉴바에서 Configure를클릭하여, 팝다운메뉴에서 Select Device를클릭한다. Select Device 윈도우에서 Device와 Device Family에서원하는 PIC을재선정한다. 또한, 원하는디바이스를선택하면, 그아래에있는신호등색깔이해당개발툴이지원하는지안하는지알수있다. ( 초록색 : 지원가능, 노란색 : 개발중이거나부분지원가능, 빨간색 : 지원불가 ) 170
44 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 <Sub-Step 2> PIC의컨피그레이션비트설정을소스코드파일안에서설정하지않고 MPLAB IDE 프로젝트윈도우에서설정하려고하면, 메뉴바에서 Configure 클릭하여, 팝다운 Configuration Bits 메뉴를클릭한다. Configuration Bits 창에서검은색원표시에있는체크박스에체크하면 Configuration Bits 설정을코드안에컨피그레이션매크로로설정하고, 체크하지않으면현재설정창에서설정한다. 만약체크하지않고사용하다가디바이스가바뀔경우에는이설정이재설정됨으로기존설정을잃어버리는문제가발생한다. 또한, 프로그래머 ( 라이터 ) 로프로그래밍 ( 굽기 ) 시에도이컨피그레이션비트설정이되지않는다. 따라서다음에나올새프로그램코딩하기에매크로설정부분을코드에삽입하는방법에대해설명하였으므로항상습관처럼컨피그레이션비트설정을매크로로코드에같이프로그래밍하길추천한다. 2. 새프로그램코딩하기 ( 하이텍 PICC 컴파일러 : C 언어프로그래밍 ) 이제새프로젝트안에 PIC 마이컴 ( 디바이스,MCU) 용프로그램인펌웨어를하이텍 C 컴파일러가지원하는 C 언어로작성한다. 프로그래머에따라여러가지형식으로 C 언어를사용할수있고, 다른에디터로프로그램코딩을할수도있다. 여기서는가장기본적인방법으로진행한다. 새프로젝트만들기가완료가된후, 171
45 Motor Control <Step 1> 새에디터창열기 File 메뉴에서 New를클릭하거나, New File 버튼클릭 ( 원으로표시된아이콘클릭 ) 한다. <Step 2> 아래와같이에디터창안에서 C 코딩하기 ( 프로그램만들기 ) #include <pic.h> CONFIG(INTIO & DEBUGEN & MCLREN & WDTDIS); unsigned char a; void main(void) unsigned int b; a=0; b +=(unsigned int) a; while(1); } [ 코드설명 ] #include <pic.h> 위의선언은 PIC디바이스설정에관한 include문이다. #include "pic16f877.h" 라고해도되지만, MPLAB IDE에서새프로젝트만들기에서이 미디바이스를 PIC16F877로설정하였기때문에, 하이텍 PICC 컴파일러폴더에 C:\Program Files\HI-TECH Software\PICC\LITE\9.60\include에보면 pic.h 파일 이있다. 이파일을열어보면, 아래와같이선정된각디바이스마다 include문에 #if defined(_16f882) defined(_16f883) defined(_16f884) \ defined(_16f886) defined(_16f887) #include <pic16f887.h> #endif 172
46 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 #if defined(_ 디바이스명 ) ~ (#elif ~) #endif으로정의되어있어서굳이 #include "pic16f877.h" 하지않아도된다. 또한, 장점은 #include "pic16f877.h" 으로 include 해버리면나중에디바이스가 PIC16F84로바뀌었을때일일이 #include "pic16f84.h" 로수정해야한다. 이런번거로움이사라진다. 또한, #include <htc.h> 로가능하다. 하이텍 PICC 컴파일러폴더에 C:\Program Files\HI-TECH Software\PICC\LITE\9.60\include\ htc.h 파일을열어보면, 아래와같이각하이텍컴파일러 ( 디바이스지원 ) 버전별로구분하고, PIC16 계열은 pic.h 파일이 include 된다. /* HI-TECH PICC / PICC-Lite compiler */ #if defined( PICC ) defined( PICCLITE ) #include <pic.h> #endif /* HI-TECH PICC-18 compiler */ #if defined( PICC18 ) #include <pic18.h> #endif /* HI-TECH dspicc compiler */ #if defined( DSPICC ) #include <dspic.h> #endif... CONFIG(INTIO & DEBUGEN & MCLREN & WDTDIS); 위선언은 PIC의컨피그레이션비트설정매크로이다. 기본매크로형은 CONFIG(@@@ &... ); 이다. 매크로입력인자들은각 PIC의데이터쉬트 Special Features of the CPU라는장에나오는설정부분과매칭이되어있다. 주로 PIC의동작환경설정으로정확한설정이이 173
47 Motor Control 루어지지않으면클럭발진도안할수도있다. 매크로입력인자값들은각디바이스의헤더파일끝부분에자세히나와있다. 예를들어, PIC16F887 경우에 C:\Program Files\HI-TECH Software\PICC\LITE\9.60\include 폴더에서 pic16f887.h 파일을열어보면, 아래와같은컨피그레이션비트설정매크로입력인자들이있다. 디자인한하드웨어특성에맞게설정해야한다. // Configuration Mask Definitions #define CONFIG_ADDR 0x2007 // Oscillator #define EXTCLK 0x3FFF // 외부 RC 클럭사용및클럭출력핀으로클럭출력 #define EXTIO 0x3FFE // 외부 RC 클럭사용및클럭출력핀으로출력안함 #define INTCLK 0x3FFD // 내부 RC 클럭사용및클럭출력 #define INTIO 0x3FFC // 내부 RC 클럭사용및클럭출력안함 #define EC 0x3FFB // 오실레이터클럭입력 (EC모드) #define HS 0x3FFA // 외부 10MHz이상크리스탈발진모드 (HS모드) #define XT 0x3FF9 // 외부 10MHz 이사크리스탈발진모드 (XT모드) #define LP 0x3FF8 // LP // Watchdog Timer #define WDTEN 0x3FFF // 와치독타이머사용 (On) #define WDTDIS 0x3FF7 // 와치독타이머사용중지 (Disabled/SWDTEN control) // Power Up Timer #define PWRTDIS 0x3FFF // 파워업타이머중지 (Off) #define PWRTEN 0x3FEF // 파워업타이머사용 (On) // Master Clear Enable #define MCLREN 0x3FFF // 리셋 (MCLR) 기능사용 #define MCLRDIS 0x3FDF // 내부리셋사용, MCLR 핀 IO핀으로사용 // Code Protect #define UNPROTECT 0x3FFF // 프로그램롬코드복제방지안함 #define CP 0x3FBF // 프로그램롬코드복제방지사용 // Data EE Read Protect 174
48 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 #define DUNPROTECT 0x3FFF // EEPROM 데이터읽기방지안함 #define CPD 0x3F7F // EEPROM 데이터읽기방지사용 // Brown Out Detect #define BORDIS 0x3CFF // BOD and SBOREN disabled #define SWBOREN 0x3DFF // SBOREN controls BOR function (Software control) #define BORXSLP 0x3EFF // BOD enabled in run, disabled in sleep, SBOREN disabled #define BOREN 0x3FFF // BOD Enabled, SBOREN Disabled // Internal External Switch Over Mode #define IESOEN 0x3FFF // Enabled #define IESODIS 0x3BFF // Disabled // Monitor Clock Fail-safe #define FCMEN 0x3FFF // Enabled #define FCMDIS 0x37FF // Disabled // Low Voltage Programming #define LVPDIS 0x2FFF // Disabled #define LVPEN 0x3FFF // Enabled // In-Circuit Debugger Mode #define DEBUGEN 0x1FFF // Enable ICD2 debugging #define DEBUGDIS 0x3FFF // Disable ICD2 debugging #define CONFIG_ADDR2 0x2008 // Brown-out Reset Voltage #define BORV21 0x3EFF // 2.1 Volts #define BORV40 0x3FFF // 4.0 Volts // Flash Memory Write Protection #if defined(_16f882) #define WP0 0x3BFF // Protect 0h-0FFh #define WP1 0x39FF // Protect lower half of flash #else #define WP0 0x3DFF // Protect 0h-0FFh #define WP1 0x3BFF // Protect lower half of flash #define WP2 0x39FF // Protect all of flash 175
49 Motor Control 영문주석이옆에있으므로데이터시트와함께비교하면서설정하면된다. INTIO : 내부클럭사용 4MHz 설정 ( 내부 8MHz 클럭발진 / 2 : 디폴트 ) DEBUGEN : ICD2 디버깅사용설정 MCLREN : MCLR 핀리셋핀동작설정 WDTDIS : 와치독사용중지위와같이설정이가능하다. unsigned char a; 전역변수 1 바이트로 a 선언하기 void main(void) 메인함수시작하기 unsigned int b; 2 바이트메인함수지역변수 b 선언하기 a=0; 전역변수 a를 0으로초기화하기 b +=(unsigned int) a; 지역변수 b에 b+a 값을저장하기, (insigned int) 는 a 변수와 b 변수의크기가틀리기때문에캐스팅연산자를사용하여변환한다. while(1); } 모든함수를수행한후, 제자리뛰기로처리함.( 또는 for(;;); 이렇게도표현함 ) 176
50 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 <Step 3> 기본적인프로그램을완료한소스를파일로저장하기. File 메뉴에서 Save 또는 Save As 를클릭한다. 현재이파일이름은 Untitled* 로표시된다. 이파일이름을원하는이름으로저장한다. 형식은파일이름.c 로확장자는.c로한다. <Step 4> 코딩한소스파일을새프로젝트 Source Files에넣기 오른쪽그림과같이프로젝트창에있는 Source Files 폴더위에오른쪽마우스클릭하면, Add Files 서브메뉴를클릭하면, 소스파일추가창이나온다. 177
51 Motor Control 오른쪽그림은 Hi_Tech_PICC_Start.c 소스코드가새프로젝트 Source Files로추가되어완료된상태를보여준다. <Step 5> Project 메뉴에팝다운 Build All 메뉴를클릭하거나위그림에서검정색원으로표시된 Build All 아이콘을클릭한다. 아래그림과같이 Output 창에 Build Succeeded가나온다. ( 위그림은 STD 버전이고, 아래그림은 PICC-Lite 버전, 검정색원이 Build All 표시 ) 만약 Error가발생하는경우에는 Output 창메시지를잘확인하여보길바란다. C언어적인문법에러인지아니면개발환경이나툴문제인지를확인한다. C 문법적인문제는 Output 창에해당되는그에러를클릭하면해당발생코드라인으로이동한다. 178
52 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 또한, 하이텍 PICC-Lite 버전또는 STD 버전등의컴파일러설치위치가잘되었는지아래그림과같이 Project 메뉴에 Select Language Toolsuite 를클릭한다. 아래그림과같이현재이프로젝트가사용할컴파일러는어떤것인지그리고, 설치위치와실행할파일들이정확한지체크한다. - 하이텍 PICC-Lite 프리버전을선택한경우, Ative Toolsuite은 HI-TECH Universal Toolsuite이고, Location은 C:\Program Files \HI-TECH Software\PICC\LITE\9.60\ bin\picl.exe이다. - 하이텍 PICC STD 버전인경우, Active Toolsuite은 HI-TECH PICC Toolsuite이고, Location은 C:\Program Files\HI-TECH Software\PICC\9.50\bin\picc.exe이다. 179
53 Motor Control 끝으로하이텍 C 컴파일러는 ANSI 표준이므로, 어느정도임베디드 C 언어환경을경험이있다면충분히 C언어자체적인문제는해결할수있다. 또한, 하이텍 C 컴파일러를설치하면설치된폴더안에영문매뉴얼과여러가지소스코드등을제공한다. - 매뉴얼있는곳 : C:\Program Files\HI-TECH Software\PICC\LITE\9.60\docs - 참고소스코드있는곳 : C:\Program Files\HI-TECH Software\PICC\LITE\9.60 \samples ( 참고소스에는 AD컨버터, UART, I2C 등의여러가지응용가능한소스들이있다 ) MPLAB IDE 와개발툴을이용한프로그램 (Firmware) 개발하기 2.4.3장에서하이텍 C 컴파일러를사용하여테스트코드를빌드올하여소스코드상의문제가없을경우에는 Succeeded라는메시지와함께 hex 파일이만들어진다. 이번순서는이소스코드가하드웨어상에올리기전에어떻게시뮬레이터등을통하여간단한검증을하며, 또 PIC 내부플래시롬 (ROM) 메모리에직접디버깅코드나프로그램코드 (Hex 파일 ) 등을프로그래밍 ( 굽기 ) 하여하드웨어가얼마나안정적으로프로그래머가원하는동작을하는지를검증하고디버깅하는방법등을배우게된다 MPLAB IDE 시뮬레이터사용하기 MPLAB IDE 통합개발환경프로그램은시뮬레이터를내장하고있어, 소스코드에대한간단한시뮬레이팅을통해사전에소스코드의루틴등을검증할수있다. 1. 새프로젝트만들기또는기존프로젝트열기새프로젝트만들기는이미 2.4.3장에서실습하였다. 여기서는 2.4.3장에서만들어진기존프로젝트를열기로한다. <Step 1> - MPLAB IDE 프로그램을실행한다. ( 바탕화면 MPLAB IDE 아이콘또는시작 모든프로그램 Microchip MPLAB IDE v8.xx MPLAB IDE를클릭한다.) 180
54 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 <Step 2> 프로젝트열기창이나타나면, 해당프로젝트가있는폴더를찾고, 프로젝트명.mcp 파일을열기한다. <Step 3> 기존프로젝트열기한후에, 프로젝트창에있는 Source Files 폴더에있는소스파일을클릭하면, 소스에디터창이열리면서소스도같이보여준다. < 다른방법 > 탐색기창에서해당프로젝트 mcw 파일을클릭하면 MPLAB IDE 개발환경툴의메인화면에프로젝트 (<Step 3>) 까지동시에열린다. 2. MPLAB SIM(Simulator) 로프로그램 (Firmware) 디버깅하기 MPLAB IDE 통합개발환경툴에는 MPLAB SIM이라는마이크로칩 MCU 전용시뮬레이터모듈이내장되어있다. 따라서하드웨어없이도어느정도기본적인기능들을시뮬레이션이가능하다. 여기서는가장기본적인디버깅동작에대해설명한다. 181
55 Motor Control <Step 1> 현재열려있는프로젝트 MPLAB IDE 통합개발환경프로그램창에서, Debugger 메뉴 Select Tool 팝다운메뉴 MPLAB SIM 을클릭한다. - MPLAB SIM이로딩이되면, 아래와같은아이콘이메인화면아이콘창에나타난다. Play, Pause, Animate, Step Into, Step Over, Step Out, Reset 순의아이콘버튼이생긴다. <Step 2> Debugger 메뉴 Settings 팝다운메뉴를클릭하면, MPLAB SIM의기본적인설정을할수있다. (Simulator Settings 창에각탭을클릭하면 MCU 동작설정및시뮬레이터설정등을할수있다 ) - MPLAB IDE 메인화면에서 Help 메뉴 Topics 를클릭하여 MPLAB Help Topics Debuggers MPLAB SIM 을클릭하면 MPLAB SIM 관련설명자료가자세히나와있으므로참고한다. <Step 3> 2.4.3장의기존프로젝트 (\Motor_Guide_Book\Lab\Hi_Tech_PICC_Lab) 소스코드를디버깅하기 182
56 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 #include <pic.h> CONFIG(XT & DEBUGEN & MCLREN & WDTDIS); // 컨피그레이션비트설정 unsigned char a; // 전역변수 a 선언 void main(void) unsigned int b; //main 함수지역변수 b 선언 a=0; b +=(unsigned int) a; while(1); } <Step 4> Watch 기능으로변수또는레지스터 (SFR) 값확인하기 View 메뉴 -> Watch 팝다운메뉴클릭, 아래와같은 Watch 창이나타난다. - 레지스터값을디버깅하면서확인하고싶다면, Add SFR 버튼과 ADCON0옆아래화살표를클릭하면, 이 MCU가가지고있는거의모든레지스터가아래로펼쳐진다. 또한, 소스코드상의변수등을확인하고싶다면, Add Symbol 버튼과 a 옆의아래화살표를클릭하면, 소스코드에있는변수들이아래로나열된다. 183
57 Motor Control <Step 5> 소스코드에있는변수 a와 b의값을확인하기위해, 아래그림의원표시된아래화살표를클릭하여, 각각 a, b 변수들을선택하여 Add Symbol 버튼을클릭한다. <Step 6> 현재프로젝트를 Build All( 빌드올 ) 하고, 아래그림과같이에디터위의각라인마다더블클릭하면각라인맨앞에빨간색 B 글자인브레이크포인트를지정한다. Build All 아이콘 해당라인에서더블클릭하면빨간색 B 글자가나옴 <Step 7> MPLAB SIM 리셋아이콘클릭한다. 그리고 Play 버튼클릭한다. Play 리셋 <Step 8> 아래그림과같이첫번째빨간색 B 글자가있는위치에화살표가나타난다. 현재이상태는이라인을 MCU가실행하기바로전이다. 여기에서다시 Play 버튼을누르거나, Step Into 버튼을누르면다음빨간색 B가있는위치로간다. 184
58 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 화살표가바로 PC( 프로그램카운터 ) 의위치가된다. a++; 문장을실행하기바로직전이다. Watch창에는 a 변수가초기화되어 0이되었다. - 다시 Play 버튼을누르면, 우측그림과같이 a 변수값이 0에서 1로변하고, PC 화살표도두번째 B로위치한다. - 이와같이 MPLAB SIM을이용하여소스코드를어느정도검증할수있다. 또한, 이후실습에서사용할 MPLAB ICD2 디버거를이용하는방법도하드웨어연결만다를뿐 MPLAB SIM을사용하는방법과같다 MPLAB ICD2 디버거사용하기 2.2장에서소개한 MPLAB ICD2 디버거개발장비를가지고 USB 케이블로 PC와연결하고, 6핀케이블로개발보드와연결하여하드웨어상에서직접디버깅또는실행시키면서소스코드안에브레이크포인트설정이나 View 메뉴의 EEPROM, File Register, Program Memory, Watch 창등의소스위치및데이터, 레지스터상태등을디버깅하는 185
59 Motor Control 방법을실습한다. 또한, MPLAB ICD2를프로그래머장비 (Programmer) 로사용하는법도실습한다. 0. MPLAB ICD2 디버거연결하기아래그림과같이 MPLAB ICD2와하드웨어 ( 그림에는 PICDEM 2 PLUS 데모보드 ) 와전원을연결한다. 주의사항은 ICD2에전원잭이있는데, 여기에전원을인가하여 ICD2 가전원을공급하는형태는하드웨어가소량의전류 ( 수백mA이하 ) 까지는괜찮을지모르지만, 대용량전류를소비한다면 ICD2가망실될수도있다. 따라서가급적이면전원공급은하드에어에바로연결하도록하자. ICD2 연결시아래그림과같은메시지가나오면 ICD2 펌웨어업데이트중이므로업데이트가다끝날때까지기다리면된다. 이때 ICD2 를분리하는것은좋지않다. 1. MPLAB ICD2 디버거로사용하기 장 MPLAB SIM 사용하기순서와거의흡사하므로 장을참조바란다. <Step 1> - MPLAB IDE 프로그램을실행한다. ( 바탕화면 MPLAB IDE 아이콘또는시작 모든프로그램 Microchip MPLAB IDE v8.xx MPLAB IDE를클릭한다.) 186
60 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 <Step 2> 프로젝트열기창이나타나면, 해당프로젝트가있는폴더를찾고, 프로젝트명.mcp 파일을열기한다. ( 여기실습에서는 \Motor_Guide_Book\Lab\Hi_Tech_PICC_Lab 실습소스로한다 ) <Step 3> 기존프로젝트열기한후에, 프로젝트창에있는 Source Files 폴더에있는소스파일을클릭하면, 소스에디터창이열리면서소스도같이보여준다. <Step 4> 현재열려있는프로젝트 MPLAB IDE 통합개발환경프로그램창에서, Debugger 메뉴 Select Tool 팝다운메뉴 MPLAB ICD2을클릭한다. - MPLAB ICD2가디버거로로딩이되면, 아래와같은아이콘이메인화면아이콘창에나타난다. Play, Pause, Animate, Step Into, Step Over, Step Out, Reset Program, Read Rom, Read EEPROM, Reset&Connect 순의아이콘버튼이생긴다. <Step 5> Debugger 메뉴 Settings 팝다운메뉴를클릭하면, MPLAB ICD2 디버거의기본적인설정을할수있다. (MPLAB ICD2 Settings 창에서가장중요한탭은중간그림의 Status 탭과맨우측그림의 Power 탭이다. 원으로표시된부분이하드웨어와잘연결이되면 Status탭에있는 Run Self Test 버튼을누르면모두가 Pass 라고표시된다. 또한, Power 탭에있는 Update 버튼을누르면, 하드웨어 VDD 전압과 VPP 전압등이표시된다. PIC16F887 경우 VDD :5V, Vpp : 10~14V이면정상이다.) 187
61 Motor Control - MPLAB IDE 메인화면에서 Help 메뉴 Topics 를클릭하여 MPLAB Help Topics Debuggers MPLAB ICD2을클릭하면관련설명자료가자세히나와있으므로참고한다. <Step 6> 2.4.3장의기존프로젝트 ( 실습소스폴더 \Motor_Guide_Book\Lab\Hi_Tech_PICC_Lab) 소스코드를디버깅한후, 빌드올 (Build All) 버튼눌러서빌드하기 <Step 7> 아래그림의프로그래밍아이콘을클릭하면, ICD2를통해디버깅코드를하드웨어로프로그래밍이된다. ( 이후과정은 장 <Step 4> 이후과정과똑같다 ) 188
62 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 <Step 8> Watch 기능으로변수또는레지스터 (SFR) 값확인하기 View 메뉴 Watch 팝다운메뉴클릭, Watch 창이나타난다. -Add Symbol 버튼과 a 옆의아래화살표를클릭하면, 소스코드에있는변수들이아래로나열된다. - 소스코드에있는변수 a와 b의값을확인하기위해, 아래그림의원표시된아래화살표를클릭하여, 각각 a, b 변수들을선택하여 Add Symbol 버튼을클릭한다. <Step 9> 현재프로젝트를 Build All( 빌드올 ) 하고, 에디터위의각라인마다더블클릭하면각라인맨앞에빨간색 B 글자인브레이크포인트를지정한다. 해당라인에서더블클릭하면빨간색 B 글자가나옴 <Step 10> MPLAB ICD2 디버거리셋아이콘클릭한다. 그리고 Play 버튼클릭한다. <Step 11> 우측그림과같이첫번째빨간색 B 글자가있는위치에화살표가나타난다. 현재이상태는이라인을 MCU가실행하기바로전이다. 여기에서다시 Play 버튼을누르거나, Step Into 버튼을누르면다음빨간색 B가있는위치로간다. Play 리셋 - 다시 Play 버튼을누르면, 우측그림과같이 a 변수값이 0에서 1로변하고, PC 화살표도두번째 B로위치한다. 189
63 Motor Control - 이와같이 MPLAB ICD2 디버거을이용하여하드웨어와연결된상태로직접소스코드를디버깅하여검증할수있다. 이후, 디버깅작업이완료되면 ICD2나프로그래밍장비를통해 Programmer 모드로 PIC 플래쉬롬에 Hex 파일을프로그래밍하여개발제품의완성단계의검증을하게된다 MPLAB ICD2 디버거를프로그래머로사용하기 2.2장에서소개한 MPLAB ICD2 디버거개발장비를가지고 USB 케이블로 PC와연결하고, 6핀케이블로개발보드와연결하여하드웨어에있는 PIC MCU 플래시롬과 EPROM과기타영역을프로그래밍 ( 일명굽기 ) 하는실습이다. 즉, MPLAB ICD2 디버거장비를프로그래머장비 (Programmer) 로사용하는실습이다. 0. MPLAB ICD2 디버거연결하기 (2.2장 ICD2 사용하기와 장 ICD2 디버거연결하기등을참조바란다.) 1. MPLAB ICD2 디버거를프로그래머 (Programmer) 로사용하기 <Step 1> - MPLAB IDE 프로그램을실행한다. ( 바탕화면 MPLAB IDE 아이콘또는시작 모든프로그램 Microchip MPLAB IDE v8.xx MPLAB IDE를클릭한다.) <Step 2> 프로젝트열기창이나타나면, 해당프로젝트가있는폴더를찾고, 프로젝트명.mcp 파일을열기한다. ( 여기실습에서는 \Motor_Guide_Book\Lab\Hi_Tech_PICC_Lab 실습소스로한다 ) <Step 3> 기존프로젝트열기한후에, 프로젝트창에있는 Source Files 폴더에있는소스파일을클릭하면, 소스에디터창이열리면서소스도같이보여준다. 또는탐색기창에서해당프로젝트 mcw 파일을클릭하면 MPLAB IDE 개발환경툴의메인화면에프로젝트까지동시에열린다. 190
64 Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 <Step 4> 현재열려있는프로젝트 MPLAB IDE 통합개발환경프로그램창에서, Programmer 메뉴 Select Tool 팝다운메뉴 MPLAB ICD2 을클릭한다. - MPLAB ICD2가프로그래머로로딩이되면, 아래와같은아이콘이메인화면아이콘창에나타난다. Verify Erase, Reset Release, Connect to HW Hold Reset Programming Device, Read Device, Read EEPROM, Verify Memory, Erase Device 순의아이콘버튼이생긴다. <Step 5> Programmer 메뉴 Settings 팝다운메뉴를클릭하면, MPLAB ICD2 프로그래머의기본적인설정을할수있다. 191
65 Motor Control - MPLAB ICD2 Settings 창에서가장중요한탭은위중간그림의 Status 탭과맨우측그림의 Power 탭이다. 원으로표시된부분이하드웨어와잘연결이되면 Status탭에있는 Run Self Test 버튼을누르면모두가 Pass 라고표시된다. 또한, Power 탭에있는 Update 버튼을누르면, 하드웨어 VDD 전압과 VPP 전압등이표시된다. PIC16F887 경우 VDD :5V, Vpp : 10~14V이면정상이다. - MPLAB ICD2 Programmer Settings 창에서 Power 탭에있는 Power target circuit from ICD2 체크박스는 ICD2 에있는전원어댑터커넥터에전원을인가하고, ICD2 6핀라인을통해전원을공급하겠다는체크박스이다. 그러나하드웨어상태가쇼트상태나전류를많이소비하는상태라면, ICD2 내부전원라인에망실을가져올수있다. 물론하드웨어에직접전원을공급하지않아도되는편리한점이있지만, 함부로이기능을사용하면약간의위험도있으니, 가급적사용 ( 체크 ) 하지말것을추천한다. 물론간단한회로에서디바이스를디버깅내지프로그래밍하는것에사용하는것은괜찮다. <Step 6> 2.4.3장의기존프로젝트 ( 실습소스폴더 \Motor_Guide_Book\Lab\Hi_Tech_PICC _Lab) 소스코드를디버깅한후, 빌드올 (Build All) 버튼눌러서빌드하기 <Step 7> MPLAB ICD2가하드웨어와연결이잘되었다면, Programming Device 버튼을누른다. - 프로그래밍이정상적으로완료되면우측그림과같이 Output 창에메시지가뜬다. 192
66 CHAPTER DC 모터 (Brushed DC Motor) 3.1 DC 모터의개요 3.2 DC 모터의종류 3.3 DC 모터의구동회로 3.4 DC 모터의제어 3.5 결론
67 Motor Control 3.1 DC 모터의개요 DC 모터의개요 DC(Direct Current, 직류) 모터는브러시의유/ 무에따라서일반적으로 Brushed DC 모터와 Brushless DC (BLDC) 모터로구분할수있으며, 본장에서는브러시가있는형태의 DC 모터에대해서만언급하며, 브러시리스 DC 모터는이후의장에서언급하도록하겠다. 우리가일반적으로부르는 DC 모터는브러시가있는형태의 DC 모터를말하며편의상브러시라는용어를생략하여부르곤한다. DC 모터는구동이쉽고, 상대적으로저렴하며, 소형으로제작이가능한이유등으로인해완구류에서부터자동차의부품등에이르기까지우리주변의다양한분야에응용되고있다 DC 모터의구조및원리 < 그림 3-1> DC 모터의구성 DC 모터는 < 그림 3-1> 에서와같이고정자(Stator), 회전자(Rotor), 브러시(Brush) 및정류자(Commutator) 로구성되어있으며, 모터의외부로유출된신호선즉, 터미널은 2개이다. 따라서모터의사이즈가비교적작고, 모터의신호선이 2가닥이라면 DC 모터일가능성이크다. 194
68 Chapter 3. DC 모터(Brushed DC Motor) 고정자 (Stator) 고정자(Stator) 는모터의외부에위치하며, 고정자계(Stationary Magnetic Field) 를발생시켜준다. 이러한자계는영구자석또는전자석에의해서발생되어지는데, 일반적으로영구자석형태의고정자를가장흔히볼수있다. DC 모터의종류는이러한고정자의형태에따라서분류할수있으며이는이후에언급하도록하겠다. 여기서주의할점은고정자에서발생되는자계는그극성이바뀌지않는영구자석이라는점에유의하길바란다. a. 영구자석형고정자 b. 전자석형고정자 < 그림 3-2> 고정자형태 회전자 (Rotor) 회전자(Rotor) 는전기자(Armature) 라고불리기도하며, 하나또는그이상의권선으로구성되어져있으며, 고정자의내부에즉, 모터의중심부에위치하고있다. 모터에전압이인가되면회전자의권선에전류가흐르게되며이로인해자계를발생시키게된다. 이들자계에서발생시킨자극(Magnetic Pole : N 극, S 극) 들이반대편즉, 고정자의자극(N 극, S 극) 과서로인력과척력이발생하여반대극성을갖는위치에정렬하고자하는성질로인하여회전자는회전을하게된다. 따라서회전자가지속적으로회전하기위해서는회전자의자극이고정자의자극과반대가되도록지속적으로변경되어야한다. 이것을정류(Commutation) 이라부르며, 다음에소개할브러시와정류자에의해서가능해진다 브러시 (Brush) 와정류자 (Commutator) DC 모터는다른여타의모터(BLDC, 유도기, 스텝모터등) 와달리모터권선에단순히직류를흘려줌으로써회전하게되는데이것이가능한이유는바로브러시와정류자가 195
69 Motor Control 기계적으로모터권선에흐르는전류의방향을바꾸어주는역할을하기때문이다. 구리재질로형성된정류자(Commutator) 는모터권선과각각연결되어있으며모터의회전축을감싸고있다. 탄소(Carbon) 재질의브러시(Brush) 는정류자와기계적으로접촉하며그반대편은모터의신호선과연결되어있다. 따라서브러시의양단에직류전압이인가되면전류는신호선을통해브러시및정류자를통과하는폐-루프를형성하게되며이로인해회전자(Rotor) 에자계가발생하게되는것이다. < 그림 3-1> 을다시한번확인하여브러시및정류자에대해충분히이해할수있기를바란다. 3.2 DC 모터의종류 DC 모터는고정자에서고정자계(Stationary Magnetic Field) 를형성하는방법에따라서영구자석형, 분권형(Shunt-Wound), 직권형(Series-Wound), 복권형(Compound -Wound) 등으로분류할수있다. 참고로우리가주위에서흔히보는 DC 모터는대부분영구자석형 DC 모터라고생각하면된다 영구자석형 DC 모터(Permanent Magnet Brushed DC Motor) 영구자석형 DC 모터는가장일반적인으로사용되는 DC 모터로써, 영구자석으로형성된고정자에의해자계를발생시킨다. 이러한영구자석형 DC 모터는보통소형출력을필요로하는응용분야에사용이되고있는데이는이후설명할권선형 DC 모터에비해상대적으로사이즈가작아서영구자석을사용하는것이효과적이기때문이다. 우리가주위에서흔히볼수있는완구류에적용되는모터가여기에속한다. < 그림 3-3> 영구자석형 DC 모터 196
70 Chapter 3. DC 모터(Brushed DC Motor) 영구자석형 DC 모터의가장큰특징은속도와전압, 토크와전류의관계가선형성을갖는다는것이다. 즉, 속도및토크의제어가용이하다는장점을가지고있다. 반면에영구자석의자화특성이시간이지남에따라상쇄될수있다는특성으로인해수명이지날수록모터의특성이변할수있다는단점을지니고있다 분권형 DC 모터 (Shunt-Wound Brushed DC Motor) 분권형 DC 모터는회전자( 전기자, Armature) 와병렬로고정자코일을배치하게된다. 분권형 DC 모터의경우고정자코일및회전자코일에흐르는전류가상호독립적이기때문에매우뛰어난속도제어특성을갖고있으며, 일반적으로 5 마력(Horse Power) 이상의큰출력을요구하는응용분야에사용된다. 분권형 DC 모터의경우영구자석을사용하지않기때문에영구자석형 DC 모터와같이사용기간에따라발생하는자력의상실을걱정하지않아도된다. < 그림 3-4> 분권형 DC 모터회로 직권형 DC 모터 (Series-Wound Brushed DC Motor) 직권형 DC 모터는회전자( 전기자, Armature) 와직렬로고정자코일을구성한다. 이모터는부하가증가하게되면고정자와회전자의전류가증가하기때문에토크가증가하게되므로높은토크를필요로하는응용분야에적합하다. 이모터의단점은영구자석형및분권형에비해정밀속도제어가어렵다는단점을가지고있다. 197
71 Motor Control < 그림 3-5> 직권형 DC 모터 복권형 DC 모터 (Compound-Wound Brushed DC Motor) 복권형 DC 모터는분권형과직권형의조합으로구성되어진모터이다. 즉, 회전자( 전기자, Armature) 와직렬및병렬로고정자코일을각각추가하여구성되어있다. 따라서복권형전동기는분권형과직권형의장점인속도제어및토크제어특성을최대한활용할수있다는장점을가지고있다. < 그림 3-6> 복권형 DC 모터 DC 모터의종류별속도 vs 토크특성 지금까지설명한각종류별 DC 모터의속도에따른토크특성을비교해보면 < 그림 3-7> 과같다. 만약특정응용분야를위한액츄에이터로써 DC 모터를고려한다면, 아래 198
72 Chapter 3. DC 모터(Brushed DC Motor) 특성곡선을참조하여 DC 모터의종류를먼저선별한후해당 DC 모터의스펙을참조하면도움을될것이다. 참고로여기에서는가장일반적으로사용되는영구자석형 DC모터에대해서만다루고자한다. < 그림 3-7> DC 모터의종류별속도 vs 토크특성 3.3 DC 모터의구동회로 DC 모터의제어에앞서모터를구동하기위한회로에대해살펴보자. 일반적으로 DC 모터의구동회로는 Chopper 구동회로, Half Bridge 구동회로, Full Bridge (H-Bridge) 구동회로의크게세가지로분류할수있다. 이들구동회로에서가장중요한소자는스위칭역할을해주는트랜지스터로써고속스위칭에이용되는 MOSFET( 금속산화막반도체전계효과트랜지스터) 가널리사용되고있다 초퍼구동회로 (ChopperDriveCircuit) Chopper 회로는 DC 모터를한쪽방향으로만구동하는경우에적용할수있는가장간단한회로이며, 스위칭역할을하는 FET(Field Effect Transistor, 전계효과트랜지스터) 소자를모터의상단에연결하는상단(High-Side) 구동회로및모터의하단에 FET 소자를연결하는하단(Low-Side) 구동회로가있다. 199
73 Motor Control < 그림 3-8> Low-Side DC 모터구동회로 위의그림에서유의할사항은모터의양단에연결된다이오드의역할이다. 여기에사용된다이오드는 DC 모터가회전할때발생하는 Back EMF(Electromotive Force) 전압이 MOSFET 을손상시키는것을방지하기위해사용되었다. 모터가회전하는동안에 MOSFET이 Turn Off 되면, 모터의권선은여전히충전되어있기때문에역전류를발생시킬것이다. 따라서다이오드 D1은 MOSFET이 Turn Off 되었을때모터에남아있는전류를소비하기위해사용되기때문에그정격을충분히고려해주어야한다. 또한저항 R1과 R2 는회로의동작에있어서중요한역할을한다. 저항 R1은마이크로컨트롤러의 I/O 핀으로전류스파크가유입되어손실되는것을방지해주며, 저항 R2는마이크로컨트롤러의 I/O 핀이트라이스테이트(Tri-State) 상태에있을경우 FET가확실히 Turn Off 될수있는역할을해준다. 끝으로, 모터가회전하는상태에서스위치를끄게되면(FET Turn Off 시) 회전하던 DC 모터는회전관성에의해서짧은시간동안회전을지속하게되며부하및모터의스펙에따라그회전속도가점차줄어들며서서히정지하게될것이다. 즉, 외부에기구적인브레이크장치를추가하지않는다면급정지와같은브레이크기능을발휘할수없게된다는점에주의하자. 그렇다면모터의급정지를위한브레이크는어떻게구현할수있을까? 이에대해서는이후에소개될구동회로에서언급이될것이다. 200
74 Chapter 3. DC 모터(Brushed DC Motor) 하프- 브리지구동회로 (Half Bridge Drive Circuit) 하프- 브리지(Half Bridge) 구동회로는 Chopper 회로에 DC 모터와병렬로스위치소자즉, FET 를한개추가한회로를말하며, 추가된 FET는 Chopper 회로에서는없었던브레이크역할을해주기위해서이다. 하프-브리지구동회로또한 Chopper 회로와마찬가지로오직단방향제어를할수있다는점에유의하도록하자 하프- 브리지구동회로 ( 정회전구동시) DC 모터의구동을위한하프- 브리지구동회로에는 < 그림 3-9> 와같이상단(High Side) 및하단(Low Side) 구동회로가있으며, 한가지주의할점은모터의구동을위해서는상단또는하단 FET를 Turn On 하여주고, 이때모터와병렬로위치한 FET는반드시 Turn Off 상태를유지하고있어야한다. 이때모터구동전류의흐름은아래 < 그림 3-9> 를참조하길바란다. < 그림 3-9> 하프-브리지 DC 모터구동회로 ( 구동시) 하프- 브리지구동회로 ( 제동시, Braking) 앞서언급했듯이이제하프-브리지구동회로에추가된브레이크기능에대해살펴보 자. < 그림 3-10> 과같이상단(High Side) 및하단(Low Side) 구동회로에있어서모터 201
75 Motor Control 와병렬로위치한스위치소자(FET) 를 Turn On 하고, 나머지는 Turn Off 할경우를생각해보자. 모터의회전에의해서모터에유기되었던역기전력은이제모터와병렬로위치한스위치소자가켜짐에따라서그라운드(GND) 또는공급전원측(Vbus) 과패스 (Path) 가형성되면서급속히제로(0) 로감소하게될것이다. 따라서역기전력전압과비례하는 DC 모터의속도또한급속히제로(0) 로감소하게되어제동효과를발휘하게되는것이다. 직관적인이해를돕기위한간단한실험을위해 DC 모터를하나준비해보자. 이미알고있듯이모터의회전은역기전력을발생시키며이는발전기의원리가된다. 첫번째실험으로써먼저 DC 모터의회전축을손으로재빨리돌려보자. 이때가지고있는모터의스펙에따라서다소차이는있겠지만일정량의회전을하는것을볼수있을것이다. 여건이된다면이를오실로스코프를이용하여모터의양단에유기되는역기전력전압을측정해보는것도좋은경험이될것이다. 두번째실험에앞서모터의양쪽단자의라인을서로묶어놓은후다시한번손을이용하여모터의회전축을재빨리돌려보자. 첫번째실험과달리모터의회전이현저히감소하게됨을체험할수있을것이다. 이는발전기측면에서보았을때무한대의부하가인가된것과같은증상을보이는것으로생각할수있으며모터측면에서는제동효과로볼수있다. < 그림 3-10> Half-Bridge DC 모터구동회로 ( 브레이크발생시) 202
76 Chapter 3. DC 모터(Brushed DC Motor) 하프- 브리지구동회로 ( 암- 쇼트, Arm Short) 하프- 브리지구동회로와같이스위칭소자(FET) 가상단및하단에직렬로연결된회로를응용할경우, 반드시기억해야할사항이있다. < 그림 3-11> 과같이상단및하단스위치소자(FET) 들이모두 Turn On 되었을경우를생각해보자. 모터권선이감겨져있는모든모터는일정량의저항(R) 과인덕턴스(L) 를가지고있기때문에 < 그림 3-11> 에서와같이대부분의전류는스위치소자 1과 2 를통해흐르게될것이다. 이경우모터에비해상대적으로저항값이작은스위치소자를흐르는전류의값은어떻게될까? 옴의법칙(I = V/R) 에따라서전류는전압에비례하고저항에반비례하게되므로그값은스위치소자의저항값에의해서결정이될것이며, 이전류값이스위치소자의허용전류보다크다면스위치소자는손상될것이다. 심할경우스위치소자의플라스틱케이스가금이가거나파편이튀는현상까지도발생할수있을것이다. 이러한현상을흔히들암- 쇼트(Arm Short) 라부르기도한다. 이는마치사람의팔(Arm) 또는다리(Leg) 와유사한형상을하고있는하프-브리지회로의상단및하단스위치의모습에서유래한것으로알려져있다. 암- 쇼트(Arm Short) 에대해서는이후에보다자세히다루게될것이며, 미리언급하자면이러한치명적인암-쇼트현상의방지를위해서는스위치소자를일정시간모두턴 - 오프상태로유지하는데드타임(Dead Time) 이라는기술이소개될것이다. < 그림 3-11> Half-Bridge DC 모터구동회로 ( 단락발생시) 203
77 Motor Control 풀- 브리지구동회로 (Full Bridge Drive Circuit) 풀- 브리지(Full Bridge) 구동회로는하프- 브리지(Half Bridge) 회로를모터의양단에각각배치한형태를이루고있으며, 가장큰특징은모터의양방향제어가가능하다는점이며이를위해총 4 개의스위치소자를필요로하고있다. 풀-브리지구동회로는그형상이영문자 "H" 와유사하게생겼다고해서 H-Bridge 라부르기도한다 풀- 브리지구동회로 ( 정회전구동시, Forward Driving) 풀- 브리지(Full Bridge) 구동회로는 < 그림 3-12> 와같이두개의하프- 브리지(Half Bridge) 구동회로의중간에모터를연결한형태로구현할수있다. < 그림 3-12> 와같이스위치소자 SW1과 SW4를 On 하고, SW2과 SW3를 Off 할경우전류의경로는스위치소자 SW1을통해모터의양단을흐른후스위치소자 SW4 를통해형성된다. 즉, DC 모터의왼쪽단자는구동전원의양(+) 단자에연결되고오른쪽단자는구동전원의음(-) 단자에연결되는결과가되며이경우 DC 모터는정방향(Forward) 으로회전하게될것이다. < 그림 3-12> 풀-브리지 DC 모터구동회로 ( 정회전구동시) 204
78 Chapter 3. DC 모터(Brushed DC Motor) 풀- 브리지구동회로 ( 역회전구동시, Reverse Driving) 이제 DC 모터의역회전구동에대해살펴보자. < 그림 3-13> 과같이스위치소자 SW3과 SW2를 On 하고, SW1과 SW4를 Off할경우전류의경로는스위치소자 SW3을통해모터의양단을흐른후스위치소자 SW2를통해형성된다. 즉, DC 모터의오른쪽단자는구동전원의양(+) 단자에연결되고왼쪽단자는구동전원의음(-) 단자에연결되는결과가되며이경우 DC 모터는역방향 (Reverse) 으로회전하게될것이다. 따라서풀-브리지회로는 DC 모터의정회전및역회전제어를가능하게해주는회로라말할수있다. < 그림 3-13> Full-Bridge DC 모터구동회로 ( 역회전구동시) Full Bridge 구동회로 ( 제동시, Braking) 풀- 브리지(Full Bridge) 구동회로에서모터의제동을위해서는 < 그림 3-14> 와같이두개의하단스위치 SW2과 SW4를 On 하고, 두개의상단스위치 SW1과 SW3를 Off 상태로유지한다. 이경우모터의회전에의해서유기되었던역기전력은스위치소자 SW2과 SW4 에의해서그라운드(GND) 측과폐- 경로(Path) 가형성되면서급속히제로(0) 로감소하게될것이며역기전력전압과비례하는 DC 모터의속도또한급속히제로(0) 로감소하게되어제동효과를발휘하게되는것이다. 205
79 Motor Control < 그림 3-14> Full-Bridge DC 모터구동회로 ( 브레이크발생시) 풀- 브리지구동회로 ( 암- 쇼트, Arm Short) 풀- 브리지(Full Bridge) 구동회로에서도하프-브리지회로에서와마찬가지로암-쇼트현상이발생하지않도록주의해야한다. < 그림 3-15> 와같이모터의좌측또는우측의스위치소자들이모두동시에 On 된다면, 과도하게큰전류가스위치소자 SW1, SW2 또는 SW3, SW4 를통해흐르게되므로스위치소자의손실을초래할수있기때문이다. < 그림 3-15> Full-Bridge DC 모터구동회로 ( 단락시) 206
80 Chapter 3. DC 모터(Brushed DC Motor) 3.4 DC 모터제어 본장에서는마이크로칩의 8비트마이크로컨트롤러중하나인 PIC16F887 디바이스와하이텍소프트사의 C 컴파일러인 HITECH PICC Lite 컴파일러를사용하도록하겠다. 특히고가의 C 컴파일러의비용부담을덜고자 PIC16F887 디바이스로선정하였으며여기에서사용할 HITECH PICC Lite 버전은상기디바이스에대해프로그램메모리 2KB 및데이터메모리 256 바이트의일부제한으로무료사용이가능하다. 또한 PIC16F887 디바이스는모터제어전용 PWM(Pulse Width Modulation) 모듈을내장하고있기때문에하프-브리지및풀- 브리지구동을손쉽게구현할수있다. 참고로 HITECH PICC 컴파일러의 Lite 버전은무료버전의 C 컴파일러로로써별도의다운로드없이 MPLAB IDE 인스톨시인스톨이가능하다. < 그림 3-16> PIC16F887 디바이스요약 207
81 Motor Control DC 모터 On/Off 제어실습 DC 모터는기본적으로임의의 DC 전압을모터의양단에인가하면회전하는특성을 가지고있다. 이때모터의회전속도(RPM, Revolution Per Minute) 는모터에인가된전 압에의해결정되며, 일반적으로그크기에비례하는특성을가지고있다. 그러면, 이제 모터를돌려보자. 실습보드의설정을 < 그림 3-17> 과같이구성하여보자. 우리가사용할회로는하프- 브리지(Half Bridge) 회로와매우흡사한초퍼(Chopper) 회로이며, 편의상상단스위치 소자 SW1은항상 On 시키고하단스위치소자 SW2를 On/Off 하여모터를구동하고자 한다. 그림에서상단스위치소자 SW1은 P채널 MOSFET을사용하였고이소자는게이트단 의전압이 "Low" 일때 Turn On 되며, 하단스위치소자 SW2는 N채널 MOSFET을사용 하였으며이소자는 P채널 MOSFET 과는달리게이트단의전압이 "High" 일때 Turn On 된다. 따라서 PIC16F887의 RD7 핀은항상 "High" 로출력하여스위치소자 SW1을 항상 Turn On 시켜놓고 RC1 핀을이용하여하단스위치소자 SW2를 On/Off 함으로써 모터의 On/Off 제어가가능해진다. 참고로, Tact 스위치입력은 RA4 핀을통해받게되며, Pull Up 저항이연결되어있 으므로기본상태에서 "High" 가입력되며, 스위치를누를경우 "Low" 가입력될것이다. 208 < 그림 3-17> 모터 On/Off 제어실습회로
82 Chapter 3. DC 모터(Brushed DC Motor) 실습을위한순서도를그려보면다음 < 그림 3-18> 과같다. < 그림 3-18> 모터 On/Off 제어실습순서도 코드작성에앞서우리가사용할마이크로컨트롤러의처리속도에대해먼저살펴보자. PIC16F887 디바이스는최대 20 MHz 클럭주파수에서동작이가능하며 1초당처리하는명령어의개수를의미하는명령어처리주파수는오실레이터주파수의 4 분주(Fosc/4) 이므로최대 5 MHz 또는 5 MIPS(Mega Instruction Per Second) 이다. 오실레이터주파수(Fosc) 및명령어처리주파수(Fcy) 는타이머, PWM 및 UART 등의통신용모듈에이르기까지모든시간과관련된마이크로컨트롤러의주변장치설정을위한기본이되므로주의를필요로한다. 20 MHz 오실레이터를사용할경우, 오실레이터주파수와명령어사이클과의관계는다음과같다. 209
83 Motor Control 오실레이터주파수 (Fosc) >Fosc = 20[MHz] 명령어처리주파수 (Fcy) > Fcy = Fosc / 4 = 20 x 10 6 /4=5[MIPS] 1초당 500만개명령어처리 오실레이터주기 (Tosc) > Tosc =1/Fosc=50[ns] 명령어사이클 (Instruction Cycle) > Tcy =1/Fcy=4/Fosc=200[ns] 1 개의명령어처리하기위한소요시간 : 200 [ns] 이제실습코드를작성해보자. 1. 헤더파일참조 : #include <pic.h> HITECH PICC 컴파일러이용시각디바이스에대한헤더파일명을별도로지정하지않아도된다. 단지 "pic.h" 라는헤더파일을추가하기만하면 MPLAB IDE의디바이스정보를이용하여컴파일러가자동으로해당디바이스의헤더파일을참조하게된다. 2. 선처리문선언 : #define Modified_Name Original_Name 이부분은사용자의취향에따라사용여부를판단하면된다. 아래선처리선언문은코딩의해독성을돕기위해필자가임의로사용하였다. 선처리라는말은컴파일러가각각의선처리문을참조하여컴파일수행시이를반영한다는의미로받아들이면무난할것으로보인다. 3. Configuration Memory 설정 : CONFIG(x) 사실이부분이처음사용자에게는가장이해하기어려운부분일것이다. Configuration Memory 는 Program Memory 영역에위치하고있으며특정기능의설정을위해사용되고있다. 이영역의메모리는코드실행중에는어떠한명령어로도액세스가불가능하며오직프로그래머(MPLAB ICD2 등) 를이용하여프로그래밍할때만그값의 210
84 Chapter 3. DC 모터(Brushed DC Motor) 변경이가능하다. HITECH PICC 컴파일러에서는 "CONFIG(X);" 라는매크로함수를이용하여그값의설정이가능하며여기에서 "X" 값은해당디바이스의헤더파일(pic16f887.h) 의마지막부분에선언되어있다. Configuration Memory 에대한보다자세한내용은데이터시트 Chapter 14. Special Features 를참조하길바란다. //******************************************************************// //*** 헤더파일선언 ***// //*** 컴파일러 : HITECH PICC Lite V9.60 ***// //******************************************************************** // #include <pic.h> // MPLAB IDE의 Device 정보에의해헤더파일자동으로설정됨 //******************************************************************// //*** 선처리문 ***// //******************************************************************// #define Fosc // Oscillator Clock : 20Mhz #define Fcy Fosc/4 // Instruction Clock : 5MIPS (Fcy = Fosc/4) #define SW2 RA4 // SW2 포트설정 --> RA4 #define HIGH_SIDE_SW RD7 // High Side SW --> RD7 #define LOW_SIDE_SW RC2 // High Side SW --> RC2 #define ON 1 // High --> Motor Start #define OFF 0 // Low --> Motor Stop //******************************************************************// //*** << Configuration Bits 설정 >> ***// //*** 1. 사용법 : CONFIG(X1 & X2 & X3... ) ***// //*** 2. X1,X2,X3 --> 헤더파일에서 Define 되어있음 ***// //******************************************************************// CONFIG(HS & WDTDIS & PWRTEN & MCLREN & UNPROTECT & BORDIS & LVPDIS ); 다음은 < 그림 3-17> 의회로도에대한 I/O 포트입/ 출력에대한초기화를위한코드이다. 211
85 Motor Control // 1. RA4 핀을입력으로설정 ANSEL = 0x00; // AN0 ~ AN7 : I/O Port 로설정 (Analog Disable) TRISA4 = 1; // RB4 : 입력설정 // 2. RD7 핀을출력으로설정 RD7 = 0; // RD7(High Side SW) : Turn Off ( 초기값 ) TRISD7 = 0; // RD7 출력설정 // 3. RC1 핀을출력으로설정 RC1 = 0; // RC1(Low Side SW) : Turn Off ( 초기값 ) TRISC1 = 0; // RC1 : 출력설정 다음은 < 그림 3-18> 의순서도에대한알고리즘에해당하는코드이다. HIGH_SIDE_SW = 1; // High Side SW : Turn On (Chopper 회로구성) //*=====================================================*// //*== 무한루프 ==*// //*=====================================================*// while(1) if(sw2) // 스위치누르지않으면 LOW_SIDE_SW = OFF; // 모터정지 } else // 스위치누르면 LOW_SIDE_SW = ON; // 모터구동 } } 지금까지설명한부분별코드는한국마이크로칩웹사이트 ( 를통해풀버전으로제공될예정이며, 고객들의요청이있을시이를반영하여지속적인소스코드의업데이트가이루어질예정이다. 실습보드의설정및사용법은소스코드의머리말부분에설명된회로결선방법및본서적의부록에수록된회로도설명부분을참조 212
86 Chapter 3. DC 모터(Brushed DC Motor) 하길바란다. 설명이부족하였거나의문점발생시상기웹사이트의 Q&A 게시판을통해추가적인설명을보충하도록하겠다. 실습에앞서한가지주의할사항은전력에민감한스위칭소자의파손을방지하기위해서 DC 모터의스펙을사전에꼭확인하고이에맞는구동전압이설정되도록점퍼설정에주의해주길당부한다. 만약실습에사용하고자하는 DC 모터스펙의확보가곤란하다면 DC 모터는물론스위칭소자의보호를위하여낮은전압인 5V 또는 9V의낮은전압을이용하여실습할것을권장한다. 이번실습은 DC 모터의온- 오프(On/Off) 실습으로써스위치를누르면모터에인가되는전압의크기에의해서결정된일정한속도로회전을하게될것이며모터구동중다시스위치를누르면정지를하게될것이다 DC 모터 PWM 속도제어 (No Feedback) 실습보드의설정을 < 그림 3-19> 와같이구성하여보자. 우리가사용할회로는이전실습과동일하게하프- 브리지(Half Bridge) 회로와유사하지만 Chopper 회로처럼구현하기위해상단스위치소자 SW1은항상 On 시키고하단스위치소자 SW2를 PWM(Pulse Width Modulation) 을이용하여모터의속도를제어하고자한다. < 그림 3-19> 모터속도제어실습회로 213
87 Motor Control 먼저위의실습회로를가지고수행하고자하는메인알고리즘을공개하고이를위한세부적인것들에대해살펴보도록하자. 다음은 RA4 핀을입력, RD7 을출력으로설정하는부분이다. //*========================================================*// //*== 1. I/O PORT 설정 ==*// //*== --> RA4 : 입력설정 ==*// //*== --> RD7 : 출력설정 ==*// //*========================================================*// void Config_PORT_IO(void) TRISA4 = 1; // RA4 : 입력설정 (SW2) ANS4 = 0; // AN4 : I/O 포트로설정 (Disable Analog Port) } TRISD7 = 0; // RD7 : 출력설정 (High Side TR) RD7 = 0; // HIGH_SIDE_TR = 0; DC 모터의목표속도를가변저항값을이용하여설정하고자한다. 따라서가변저항의저항값을마이크로컨트롤러의 A/D 컨버터를이용하여읽고, 이값을펄스폭으로반영하고자한다. PIC16F887 디바이스의 A/D 컨버터는 10 비트분해능을갖고있다. 즉, A/D 컨버터의결과값이총 10비트데이터가된다는말이며이를십진수로표현하면 0~1023 이된다. 일례로가변저항의기준전압으로써 5V를인가하고그가변전압을 A/D 컨버터를이용하여읽게되면최대입력전압(5V) 를총 1024 스텝으로구분한전압으로컨버전이가능하다는말이된다. PIC16F887 디바이스의 A/D 컨버터블록다이어그램인 < 그림 3-20> 을이해한다면여러분은 A/D 컨버터를이미사용할수있다는말이된다. 이제 A/D 컨버터사용을위해기본적으로설정해야할사항에대해살펴보도록하자. 214
88 Chapter 3. DC 모터(Brushed DC Motor) < 그림 3-20> A/D 컨버터블록다이어그램 1. 사용할 A/D 입력핀설정 - 해당핀을입력으로설정 : [ 예] TRISA0 = 1; // TRISA 레지스터참조 - 해당핀을아날로그로설정 : [ 예] ANS0 = 1; // ANSEL 레지스터참조 2. ADC 모듈설정 -ADC 컨버젼클럭 (Tad) 설정 : [ 예] ADCS1=1;ADCS0=0; // ADCON0 참조 - 레퍼런스전압설정 : VCFG1 = 0; VCFG0 = 0; -ADC 입력채널설정 : CHS<3:0> 설정 - ADC 결과값포맷설정: ADFM = 0; 215
89 Motor Control 3. ADC 인터럽트설정 (ADC 인터럽트사용시) : 데이터시트의 Fig 참조 - ADC 인터럽트플래그클리어 : ADIF = 0; - ADC 인터럽트사용설정 : ADIE = 1; - 주변장치인터럽트사용설정 : PEIE = 1; - 글로벌인터럽트사용설정 : GEIE = 1; 4. Acquisition 시간동안기다림 : Tacq = 11.5us ( 데이터시트의 Table 참조) 5. ADC 컨버젼시작 - GODONE = 1; 6. ADC 컨버젼완료될때까지기다림 - 폴링(Polling) 방식 : while(godone); - 인터럽트(Interrupt) 방식 : ADIF 가 "set(1)" 되면인터럽트발생 7. ADC 결과값읽어오기 -ADRESH,ADRESL 읽어오기 8. ADC 인터럽트플래그클리어 (ADC 인터럽트사용시) -ADIF=0; A/D 컨버전후그결과값은 <ADFM> 비트의설정에따라서아래와같이 2가지형태의포맷으로데이터가정렬된다. 사용자의편의에따라서결정을하면되지만일반적으로가장많이사용하는경우는좌측정렬(Left Justified Format) 이다. 이렇게얻은 A/D 컨버젼결과값을이제 PWM 펄스폭으로업데이트만시켜주면되며이를위해서몇가지비트연산을수행해야할필요가있다. ADRESH 레지스터값은 8비트데이터이기때문에 CCPRxL 레지스터에그대로옮기면되지만 ADRESL 레지스터의 2비트값은 CCPxCON 레지스터의 5번째및 4번째비트에옮겨야하기때문에 ADRESL 레지스터의값을오른쪽으로 2비트를시프트한후 CCPxCON 레지스터에 2개의비트만옮겨야하는번거로움을감수하여야한다. 여기에서 CCPxCON 레지스터의총 8 비트데이터중 <5:4> 비트만변경시킬때나머지 6개의비트의값은기존값을유지하고바뀌지않도록반드시주의해야한다. 216
90 Chapter 3. DC 모터(Brushed DC Motor) < 그림3-21> A/D 컨버젼결과값포맷 다음은 ADC 모듈을설정하는부분이다. //*========================================================*// //*== 2. ADC 모듈설정 ==*// //*== --> AN0 : 아날로그입력 ==*// //*========================================================*// void Config_ADC(void) TRISA0 = 1; // RA0 : 입력설정 ANS0 = 1; // AN0 아날로그입력으로사용 (VR) ADCS0 = 0; // AD Clock = Fosc/32 = 20M/32 = 0.625Mhz // Tad = 1.6us CHS3 = 0; CHS2 = 0; CHS1 = 0; CHS0 = 0; // ADC Channel Select : AN0핀으로설정 } VCFG0 = 0; // ADC 의 + Ref 전압 : AVDD 핀의전압으로설정(Vdd) VCFG1=0; // ADC의 - Ref 전압: AVSS 핀의전압으로설정(Vss) ADFM = 0; // ADC 결과값: Left Justify (ADRESH/L:xxxxxxxx xx------) ADON = 1; // ADC 모듈 : ON GODONE = 0; // ADC Converstion : STOP 필자는 ADC 컨버터의컨버젼결과의신뢰도를높이기위해 A/D 변환을총 8회수행후그평균값을취하도록하였다. 217
91 Motor Control //******************************************************************// //*** A/D Conversion Routine ***// //*** AN0 ( 가변저항) 을 8회 ADC 수행후평균값(10 비트) 적용 ***// //******************************************************************// void fcn_ad_conv(void) unsigned int ad_10bit_temp; GODONE = 1; // ADC 컨버전시작 while(ad_cnt < 8) while(godone); // ADC 컨버전 End 체크 ad_10bit_temp = (ADRESH<<2) + (ADRESL>>6); ad_sum += ad_10bit_temp; ad_cnt++; GODONE = 1; // ADC 컨버전시작 } ad_avg = ad_sum >> 3; // ADC 컨버전누적값/ 평균회수 (2^3 = 8) } ad_sum = 0; ad_cnt = 0; PWM( 펄스폭변조) 에대해먼저살펴보자. 기본적으로 DC 모터는모터의양단에인가되는전압에따라서속도가결정된다. 따라서모터의속도제어를위해서는모터에인가되는전압을제어할수있으면되는것이다. 만약모터에인가되는전압이아래 < 그림 3-22> 와같은 Vpeak 크기의전압이 Tperiod의주기마다 Tpulse_width 시간동안만켜지는형태이었다면, 모터에인가되는전압의평균값 ((Vavg) 은듀티사이클(Duty Cycle) 즉, Tpulse_width/Tperiod 값에비례하게될것이다. 218
92 Chapter 3. DC 모터(Brushed DC Motor) < 그림 3-22> PWM 파형및용어 따라서듀티사이클의정의는다음과같다. 이제 PIC16F887 마이크로컨트롤러를이용하여 PWM 파형을구현해보자. PWM 파형은일반 I/O 포트를이용하여소프트웨어적인방법으로구현할수도있지만 PIC16F887 디바이스에는 2개의 CCP(Capture/Compare/PWM) 모듈이내장되어있기때문에간단한설정만으로손쉽게 PWM 파형을구현할수있다. 이러한 CCP 모듈의장점은주기(Period) 와펄스폭(Pulse Width) 설정만으로마이크로컨트롤러내부에탑재되어있는 PWM 컨트롤러가정확한파형을손쉽게발생시켜준다는것이다. < 그림 3-23> 의그림 a와같이 CCPx 핀을이용하여 PWM 파형을출력하기위해 PIC16F887 마이크로컨트롤러의 PWM 모듈의동작원리를이해할필요가있다. < 그림 3-23> 에서와같이 PWM의주기는타이머2 의주기(Period) 레지스터인 PR2 레지스터를이용하여최대 8 비트값으로설정할수있으며, PWM의펄스폭은 CCPRxL 레지스터의 8비트값과 CCPxCON 레지스터에서 2개의비트를합한총 10비트로설정할수있다. 즉, 타이머2의동작에의해서자동으로증가하는 TMR2 레지스터의값이 CCPRxH 값과같아지면 CCPx 핀은 High에서 Low 로토글되며, TMR2 레지스터값이이후계속증가하여 PR2 레지스터의값과같아지면 CCPx 핀은다시 Low에서 High 로토글된다. 또한이때 TMR2 레지스터값은 0 으로초기화되며, 새로운듀티사이클값인 CCPRxL + CCPxCON<5:4> 의값을 CCPRxH 레지스터에저장한다. 219
93 Motor Control 한가지주의할점은펄스폭은 10비트값인데반해주기값은 8비트라는주기사실에의문을가질것이다. 이는주기를비교할때는 TMR2와 PR2의 8비트데이터만을비교하지만펄스폭을비교할때는 CCPRxL + CCPxCON<5:4> 레지스터의 10비트데이터와 TMR2 + 하위 2비트데이터값을비교하기때문에상대적으로는동일한시간폭을가지며, 단지펄스폭비교기의분해능이 2 비트(2 2 =4 배) 증가하게되는효과를얻을수있다. 참고로데이터시트의 PWM 주파수에따른 PR2 레지스터값및최대분해능 (Resolution) 비교표를참조하면이해를도울수있을것으로보인다. < 표 3-1> PWM 주파수및분해능비교 220
94 Chapter 3. DC 모터(Brushed DC Motor) a CCP 모듈의 PWM 출력 b CCP 모듈의 PWM 사용시다이어그램 < 그림 3-23> PWM 발생기블록다이어그램 이제 < 그림 3-19> 의회로도에서주어진것과같이 CCP2 핀을 PWM 출력으로사용하기위해서는타이머2와 CCP2 모듈과관련된레지스터들을설정해주면된다. 1. 타이머 2 설정 2. PR2 설정 221
95 Motor Control 3. CCP2CON 레지스터설정 4. CCPR2L 레지스터설정 PWM 주파수를설정을위해서타이머2와관련된아래의식을참조하여 PR2 이머2 의프리스케일러값을설정한다. 값과타 값 의프리스케일러값 < 참조> ( 오실레이터클럭의주기) 펄스폭설정은아래의식을참조하여 CCPR2L 및 CCP2CON<5:4> 레지스터에설정한다. 값 예 사용시펄스폭 값 예 사용시듀티사이클비 지금까지과정을통해얻은레지스터설정값을이용하여아래와같이소스코드를작성한다. 222
96 Chapter 3. DC 모터(Brushed DC Motor) //*=========================================================*// //*== 3. PWM 설정 ( CCP2) ==*// //*== --> PWM Freq. = 20kHz 설정 (TMR2 주기이용) ==*// //*== --> RC1 : CCP2를 PWM 으로설정 ==*// //*== --> Datasheet <11.5 참조> ==*// //*=========================================================*// void Config_CCP2_PWM(void) RC1 = 0; TRISC1=1; // RC1 입력설정(CCP2 출력중지) T2CKPS1=0; T2CKPS0 = 0; //1:1Prescaler // T_tmr2 = ( Tosc * 4 ) x (# of Prescaler)= 0.2 us PR2 = 249; // Period of PWM(T_pwm) = (PR2+1) x T_tmr2 = 50 us // Freq. of PWM(F_pwm) = 1/T_pwm = 20 khz CCP2CON = 0b ; // CCP2를 PWM 모드로사용 // CP2M3=1; CCP2M2=1; CCP2M1=x; CCP2M0=x; CCPR2L = 0; // Duty Cycle 0 으로초기화 ( 상위 8 비트) DC2B1 = 0; DC2B0 = 0; // Duty Cycle 0 으로초기화 ( 하위 2 비트) } TMR2ON = 0; TRISC1 = 0; // Timer2 Stop // CCP2 --> output 설정 이제 A/D 컨버전을 8 회수행한후그평균값(10 비트) 을펄스폭으로이용하여 CCPR2L 및 CCP2CON 레지스터에옮겨넣기위한코드를작성해보자. //********************************************************************// //*** CCP2 모듈의 PWM Duty Cycle 업데이트 ***// //*** CCPR2L : ADC 결과값중상위8비트값적용 ***// //*** CCP2CON<5:4> : ADC 결과값중하위 8비트값적용 ***// //********************************************************************// void fcn_ccp2_duty_update(void) HIGH_SIDE_TR = ON; // Motor Run temp_byte = (unsigned char) ((ad_avg & 0x03)<<4); CCP2CON = temp_byte 0x0F; // 00xx CCPR2L = ad_avg >> 2; TMR2ON = 1; } 223
97 Motor Control 모터를정지하고자할경우에는 CCP2 모듈을오프(OFF) 모드로설정하여불필요한프로세서의낭비를방지하여야한다. 다음은 CCP2 모듈을미사용모드로설정하는코드이다. //********************************************************************// //*** CCP2 모듈사용중지 ***// //*** High/Low Side TR : Turn Off ***// //*** TMR2중지및 CCP2CON 레지스터 Clear ***// //********************************************************************// void fcn_ccp2_off(void) HIGH_SIDE_TR = OFF; // Motor Stop LOW_SIDE_TR = OFF; // Motor Stop CCP2CON &= 0x00; TMR2ON = 0; } 지금까지설명한코드를이용하여 DC 모터의속도를변화시키는실습을수행해보도록하자. 이번실습은이전에수행한실습 1과달리가변저항을이용하여 PWM의듀티비를가변함으로써 DC 모터에인가되는평균전압을제어하고이를이용하여모터의속도를제어하는데목적이있다. 비록간단한실습이지만이번실습을통해 A/D 컨버터, 타이머및 PWM 모듈에대한이해를충분히이해할수있기를당부한다 DC 모터 PWM 속도제어 (Optical Encoder Feedback) 옵티컬엔코더또는포토인터럽터를이용하여모터의회전속도를측정해보도록하자. 이실험에앞서여러분이사용하고있는 DC 모터의회전축에는디스크모양의회전판또는이에상응하는장치를제작또는구매하여사용해보기를권장한다. 포토인터럽터는발광부로부터송신되는신호를수광부의포토트랜지스터를통해수신받게되면전압이발생하는원리를이용하여장애물의존재유무를판단할수있는유용한디바이스이다. 이러한원리를이용하여포토다이오드와포토트랜지스터사이에 < 그림 3-24> 와같이 DC 모터의회전축에부착된일정한홈이있는디스크모양의휠을삽입함으로써모터의회전속도를측정할수있게된다. 이번실습을수행하기위해서는실습보드의점퍼(J23, J24) 에포토인터럽터를사용해 야하며발광부(J23) 에는포토다이오드(LTE-302) 와수광부(J24) 에는포토트랜지스터 224
98 Chapter 3. DC 모터(Brushed DC Motor) (LTR-301) 를연결할것을추천한다. 만약이들부품을구입하기가쉽지않다면, 전자부품상가또는인터넷쇼핑몰의광센서류에서적외선다이오드및적외선트랜지스터제품으로선정하여사용해도무난하다. 실습을위해보드의회로구성을 < 그림 3-24> 와같이구성하여보자. < 그림 3-24> Optical Encoder를이용한속도 Feedback 실습회로 이번실습의전체적인프로그램의구성은다음과같다. //******************************************************************// //*** Main Routine : main(void) ***// //******************************************************************// void main(void) Config_PORT_IO(); // I/O 포트설정 Config_ADC(); // ADC 모듈설정 Config_CCP2_PWM(); // CCP2 모듈설정 ( PWM 모드) Config_CCP1_CAPTURE(); // CCP1 모듈설정 (Compare 모드) Config_UART(); // UART 모듈설정 //*================ The Start of Algorithm =================*// while(1) 225
99 Motor Control fcn_sw_input(); fcn_ad_conv(); } if(flag_motor_on) fcn_ccp2_duty_update(); } else fcn_ccp2_off(); } } //*================ The End of Algorithm =================*// 이번실습에서는 CCP1 모듈을펄스의폭또는주기를측정하기위해캡쳐(Capture) 모드로사용하고자한다. 다음 < 그림 3-25> 와같이 CCPx 모듈을캡쳐모드사용시 CCPx 핀을통해입력되는신호의상승또는하강에지(Edge) 를감지하고그시간을타이머1(16 비트) 을이용하여측정하는방법이다. 이때의결과값은두개의 8비트레지스터 CCPRxH 및 CCPRxL에각각저장되어 16 비트결과값을얻을수있다. CCP 모듈을캡쳐모드로사용시다음 4 가지경우에대한시간측정이가능하다. Every falling edge : 첫번째하강에지 Every rising edge : 첫번째상승에지 Every 4th rising edge :4번째상승에지 Every 16th rising edge :16번째상승에지 주의할점은 16비트타이머는 0~65535(0~0xFFFF) 범위내에서만카운팅이가능하므로입력되는펄스의주기및마이크로컨트롤러의동작주파수를고려하여타이머카운터레지스터가오버플로우(Overflow) 되지않도록프리스케일러설정에주의해야한다. 226
100 Chapter 3. DC 모터(Brushed DC Motor) < 그림 3-25> CCP모듈의 Capture 모드블록다이어그램 이제 CCPx 모듈의캡쳐(Capture) 모드사용시기본적으로설정해야할사항에대해살펴보도록하자. 1. CCPx 핀을디지털입력으로설정 (TRISx 비트설정): TRISC2 = 1; // CCP1 사용 2. 타이머1 설정 - 소스클럭설정 : TMR1CS = 0 // Fosc/4 - 프리스케일러설정 : T1CKPS<1:0> = 11; // 1:8 3. CCPx 인터럽터설정 ( 인터럽트사용시) - CCP 인터럽트플래그클리어 : CCP1IF = 0; - CCP 인터럽트사용설정 : CCP1IE = 1; - 주변장치인터럽트사용설정 : PEIE = 1; - 글로벌인터럽트사용설정 : GIE = 1; 4. CCPx 모듈을캡쳐모드로설정 (CCPxCON 레지스터설정) - 캡쳐가발생할에지설정 : CCP1M<3:0> = 0101; //every rising edge 5. 캡쳐데이터초기화 - 캡쳐레지스터클리어 : CCPR1H=0; CCPR1L=0; -타이머1 레지스터클리어 :TMR1H=0;TMR1L=0; 6. 캡쳐시작 - 타이머1 시작설정 : TMR1ON = 1; 227
101 Motor Control 다음은 CCP1 모듈을캡쳐모드로설정하고인터럽트를사용하기위한코드이다. //*===========================================================*// //*== 4. Capture Module 설정 ( CCP1) ==*// //*== --> Timer1 설정 (TMR1 이용펄스카운팅) ==*// //*== --> RC2 : CCP1를 Capture 모드로설정 ==*// //*== --> Datasheet <11.3 참조> ==*// //*==========================================================*// void Config_CCP1_CAPTURE(void) RC2 = 0; TRISC2=1; // RC2 입력설정(CCP1 입력설정) T1CON = 0; // T1CON 레지스터클리어 TMR1ON = 0; // 타이머 1 Stop TMR1CS = 0; // 타이머 1 소스 = Fosc/4 = 20Mhz/4 = 5Mhz T1CKPS1 = 1; T1CKPS0 = 1; // 1:8 Prescaler // TMR1H:TMR1L 레지스터는 1.6us 마다증가 CCP1IF = 0; CCP1IE = 1; PEIE = 1; GIE=1; CCP1CON = 0b ; // Cpature Mode, Every Falling Edge ; 0100 // Capture Mode, Every rising edge : 0101 // Capture Mode, Every 4th rising edge : 0110 // capture Mode, Every 16th rising edge : 0111 CCPR1H = 0; CCPR1L = 0; // Capture 레지스터클리어 TMR1H = 0; TMR1L = 0; // TMR1 레지스터클리어 } TMR1ON = 1; // 타이머 1 Start 이제모터의회전에의해포토센서로부터 CCP1 핀으로펄스가인가되면상승에지마다인터럽트가발생할것이며이때인터럽트처리루틴에서모터의회전속도(RPM) 을계산하면된다. 여기에서유의할점은캡쳐레지스터(CCPR1H:CCPR1L) 에저장된값은타 이머1에의해카운팅된값이므로이를시간으로환산하여모터의속도로계산하여야한 228
102 Chapter 3. DC 모터(Brushed DC Motor) 다. 아래는모터에부착된휠이반바퀴회전하는데소요된타이머1의카운터값을이용하여 1초및 1 분당회전수로계산한코드이다. void interrupt Interrupt_Service_Routine(void) if(ccp1if) TMR1H = 0; TMR1L = 0; pulse_period_cnt = (unsigned int)(ccpr1h<<8) + CCPR1L; // 반바퀴회전카운터값 pulse_freq = ( (Fcy/T1_PRESCALE) / pulse_period_cnt ) / 2; // 초당회전수(RPS) current_rpm = pulse_freq * 60; // 분당회전수 (RPM) } } CCP1IF = 0; < 그림 3-26> 은듀티사이클을최대로설정하였을경우옵티컬엔코더의신호를측정한파형이다. 아래측정된파형의주기(17.10 ms) 는모터에부착된휠이반바퀴회전하는데소요된시간이므로한바퀴를회전하는데소요된시간은 2개의펄스에대한주기값인 ms 가된다. 따라서 1초에약 30번회전하고 1분에는 1800번회전하게됨을알수있다. 이것이우리가측정하고자하는모터의회전속도(RPM) 에해당한다. 위의예제코드와같이인터럽트서비스루틴내에서회전속도를계산하고자할때는꼭필요한연산만을사용하고가능한불필요한계산식을배제함으로써가급적최단시간내에연산이수행될수있도록주의해야한다. 또한 C 컴파일러에따라연산을처리하는최적화수준이다르기때문에이점도주의하길바란다. 지금은알고리즘도단순하고코드라인이얼마되지않기때문에크게지장이없겠지만보다다양한주변장치를사용하고알고리즘도복잡해지게될경우에는상황에따라서심각한문제에봉착할수도있게될것이다. 229
103 Motor Control \ 1 분당회전수(RPM) =(1 초당회전수)x60 =( 주파수/2)x60 =[(1/ 주기 )/2]x60=1774.5[rpm] < 그림 3-26> 옵티컬엔코더(Optical Encoder) 파형측정결과 RS-232 통신은임베디드시스템과 PC간의다양한인터페이스방법중가장쉽고널리사용되는통신프로토콜로써마이크로컨트롤러의 UART 모듈을이용하면손쉽게 RS-232 통신을구현할수있다. 따라서, UART 모듈을이용하면임베디드시스템의정보를 PC에서확인하고더나아가서는 PC 에서임베디드시스템의제어도가능하다. 비주얼 C++ 또는비주얼베이직에관심이있는독자라면이부분에대한노력을좀더기울인다면엔지니어로써좀더좋은경쟁력을확보할수있게될것이다. 이번실습에서는펄스폭변경을위해사용한가변저항의 A/D 컨버터의결과값및 CCP 모듈을이용하여측정한모터의회전속도(RPM) 를 UART(Universal Asynchronous Receiver Transmitter) 를이용하여컴퓨터의하이퍼터미널에데이터를디스플레이하고자하였다. 참고로, UART 모듈은 9600bps / Data 8bit / 1 Stop Bit / No Parity로설정하였으므로하이퍼터미널도이와동일하게설정해야정상적인통신이이루어질것이다. 230
104 Chapter 3. DC 모터(Brushed DC Motor) //*======================================================*// //*== 5. UART 설정 ==*// //*== --> Datasheet <12.1 참조> ==*// //*======================================================*// void Config_UART(void) TXSTA = 0b ; //CSCR=0; TX9=0; TXEN=1; SYNC=0; SENDB=0; BRGH=1; TRMT=1; TX9D=0; RCSTA = 0b ; //SPEN=1; RX9=0; SREN=0; CREN=1; ADDEN=0; FERR=0; OERR=0; RX9D=0; SPBRG = Fosc/16/BAURATE-1; // 9600bps See Table 12-3 at Datasheet } RCIF = 0; RCIE = 1; TXIE = 0; 이제 UART 모듈을이용하여한글자를출력하는사용자함수와문자열을출력하는사용자함수를직접만들어보자. void fcn_uart_put_char(char ascii_data) TXREG = ascii_data; while(!trmt); } void fcn_uart_put_string(const char *ptr_string) while(*ptr_string!= 0 ) TXREG = *ptr_string++; while(!trmt); } } 231
105 Motor Control 이제특정정수형데이터를 PC의화면상에네자리의십진수로표현하기위해네자리의아스키(ASCII) 코드로변경해주는사용자함수를작성해보자. void fcn_uart_send_data(unsigned int digit_4_num) TXREG = digit_4_num/ '0'; while(!trmt); TXREG = (digit_4_num/100)%10 + '0'; while(!trmt); TXREG = (digit_4_num/10)%10 + '0'; while(!trmt); TXREG = (digit_4_num)%10 + '0'; while(!trmt); } 마지막으로인터럽트서비스루틴안에아래의 UART 수신인터럽트발생시데이터를출력하는부분을추가하면된다. 즉, PC에서아무키나누를경우이에상응하는 1바이트의아스키값이 UART 의수신핀으로전송될것이며이때수신인터럽트(RCIF) 가발생하게될것이다. if(rcif) if(rcreg!= 0) fcn_uart_put_string(tx_msg); fcn_uart_put_string("\n\r"); fcn_uart_put_string(" >>ADC Result -->"); fcn_uart_send_data(ad_avg); fcn_uart_put_string(" Motor RPM --> "); fcn_uart_send_data(current_rpm); } } RCIF = 0; 232
106 Chapter 3. DC 모터(Brushed DC Motor) DC 모터의 PWM 속도제어 ( 역기전력피드백) 이번장에서는 DC 모터의특징중역기전력(Back EMF) 은속도에비례한다는원리를이용하여모터의회전속도를측정해보자. 이와같이역기전력을이용하는방법은상대적으로저렴한 1~2개의저항만을이용하여모터의회전속도를측정할수있다는장점이있는반면옵티컬엔코더를사용할때와비교했을때측정정밀도가상대적으로낮다는단점을지니고있다. 참고로역기전력은모터가회전할때에만발생하고, 정지해있을경우는영전위가된다는점에유의하자. 실습을위해 < 그림 3-27> 과같이회로를구성하여보자. DC 모터가회전을하는중에상단스위치(SW1) 를끄고(Off), 하단스위치(SW2) 를켠다면(On) 모터의속도에비례하는역기전력전압을저항 R1, R2를이용하여측정할수가있게된다. 만약상단스위치(SW1) 가켜진상태라면 R1과 R2에는항상 VBUS 전압이측정되므로역기전력측정시이점에유의해야한다. < 그림 3-27> BACK EMF 실습회로구성도 이전실험에서 ADC를이용하여역기전력을측정하는것외에는알고리즘이특별히 추가되는부분은없다. 다음순서도를참조하여코딩을해보자. 233
107 Motor Control < 그림 3-28> BACK EMF 실습을위한순서도 위의순서도에근거하여작성한아래의메인함수코드를참조바란다. //********************************************************************// //*** Main Routine : main(void) ***// //********************************************************************// void main(void) Config_PORT_IO(); // I/O 포트설정 Config_ADC(); // ADC 모듈설정 Config_CCP2_PWM(); // CCP2 모듈설정 ( PWM 모드) Config_CCP1_CAPTURE(); // CCP1 모듈설정 (Compare 모드) Config_UART(); // UART 모듈설정 while(1) fcn_sw_input(); fcn_ad_conv(0); if(flag_motor_on) 234
108 Chapter 3. DC 모터(Brushed DC Motor) fcn_ccp2_duty_update(); } if(!sw3) // Press SW3 for measuring BEMF. fcn_bemf_measuring(); } } else fcn_ccp2_off(); } } 다음은 PWM을통해 Duty Cycle을변경하면서 Optical Encoder로측정한 RPM과함게 Back EMF 측정결과(ADC 값) 를보여주고있다. < 그림 3-29> BEMF 실험디스플레이결과 Back EMF의장점은단순히비용이저렴한저항만가지고도모터의회전속도를측정할수있다는점이다. 반면에 Optical Encoder를사용하여측정한경우와비교하면그 측정오차가매우심하다는것을알수있다. 이는 ADC 의정밀도때문이아니라, 실제 235
109 Motor Control 로 Back EMF 측정시그편차가상대적으로크다는것을오실로스코프를이용하여측정해보면확인할수있다. 다음은 Optical Encoder와 Back EMF를이용했을때상대적인정밀도를확인할수있는실험결과이다. 실험방법은 Duty Cycle을최대로하여모터의회전속도를일정하게유지한상태에서측정한결과이다.OpticalEncoder로측정한회전속도는실제로오실로스코프를이용하였을때와거의오차가없다고볼수있다. 다만실험하고있는모터가정밀제어를위한모터가아닌관계로회전속도의오차를가지고있는것으로판단된다. < 그림 3-30> BEMF 실험디스플레이결과 a 이상적인파형(1800 rpm) b 노이즈가섞인파형(1800 rpm) < 그림 3-31> 역기전력(Back EMF) 파형측정결과 236
110 Chapter 3. DC 모터(Brushed DC Motor) DC 모터 PWM 양방향속도제어 (Full-Bridge) 지금까지 DC 모터를이용하여단일방향속도제어에대해살펴보았다. 이제양방향속도제어로써유일한방법인풀- 브리지(Full Bridge) 회로를이용한속도제어및방향제어에대해살펴보도록하자. PIC16F887 디바이스의특징중하나는 ECCP(Enhanced Capture/Compare/PWM) 모듈을내장하고있다는것이다. 이는기존의 CCP(Capture/Compare/PWM) 모듈의기능뿐만아니라개선된기능으로서하프-브리지및풀-브리지구동회로를위한구동신호를손쉽게구현할수있도록 P1A, P1B, P1C, P1D등의최대 4개의 PWM 출력포트를제공하고있다. 이들포트를이용하여먼저풀- 브리지회로를구성하면 < 그림 3-32> 와같다. <1> 상기회로와같이구성하면, 상단의 P채널 FET 및하단의 N채널 FET 는모두 "High" 출력시동작(Active High) < 그림 3-32> 풀- 브리지(Full Bridge) 회로구성 그러면이제 ECCP 모듈에대해하나씩살펴보도록하자. ECCP 모듈의고급 (Enhanced) PWM 모드설정은 8비트 CCP1CON 레지스터의 P1M<1:0> 및 CCP1M<3:0> 비트를이용한다. 237
111 Motor Control 1. P1M<1:0> :PWM출력설정비트 1) CCP1M<3:2> = "00", "01", "10" 중하나로설정되었을경우 -xx: P1A핀은 Capture/Compare 입력으로할당, P1B, P1C, P1D핀은 I/O 포트로할당 2) CCP1M<3:2> = 11로설정되었을경우 -00: 단일출력설정 P1A : PWM 출력 P1B, P1C, P1D : I/O 포트로할당 -01: 풀- 브리지출력 ( 정회전) P1D : PWM 출력 P1A : Active 출력 (High or Low) P1B, P1C : Inactive 출력 (Low or High) -10: 하프-브리지출력 P1A, P1B : PWM 출력 (Dead Band Control 적용) P1C, P1D : I/O 포트로할당 -11: 풀- 브리지출력 ( 역회전) P1B : PWM 출력 P1C : Active 출력 (High or Low) P1A, P1D : Inactive 출력 (Low or High) 2. CCP1M<3:0> :ECCP모드선택비트 : Capture/Compare/PWM off (ECCP 모듈리셋) - 0xxx : Capture 또는 Compare 모드설정 ( 데이터시트참조) -1100:PWM 모드 P1A, P1C : Active High 출력설정 P1B, P1D : Active High 출력설정 -1101:PWM 모드 P1A, P1C : Active High 출력설정 P1B, P1D : Active Low 출력설정 : PWM 모드 P1A, P1C : Active Low 출력설정 P1B, P1D : Active High 출력설정 : PWM 모드 P1A, P1C : Active Low 출력설정 P1B, P1D : Active Low 출력설정 < 그림 3-33> ECCP 모듈설정을위한 CCP1CON 레지스터설명 238
112 Chapter 3. DC 모터(Brushed DC Motor) < 그림 3-34> 는고급(Enhanced) PWM 모드의동작을이해하기위한블록다이어그램이다. 기본적인동작은이전에설명했던단일 PWM과동일하게타이머2에의해주기및펄스폭이제어된다. 다만 4가지모드중선택된모드에따라서 4 개의포트(P1A, P1B, P1C, P1D) 로사용자설정에의해정해진패턴의펄스가출력된다는점이다. <1> PWM 출력으로사용하는핀은 TRISx 레지스터를출력("0") 으로설정 <2> CCP1CON 레지스터를클리어하면, PWM 출력핀으로사용안됨 ( 동작중지) <3> PWM 출력으로사용하지않는핀은 I/O핀등다른기능으로사용가능 < 그림 3-34> ECCP 모듈의고급(Enhanced) PWM 모드블록다이어그램 우리가실습할회로는 4개의 FET가모두 Active High 에서동작하도록구성되어있다. 따라서 CCP1M<3:0> 비트는 "1100" 으로설정하고, P1M<1:0> 비트를 "01" 또는 "11" 로설정함에따라서정회전및역회전펄스출력을얻을수있게된다. 즉, < 그림 3-35> 와같이 P1M<1:0> 비트를 "01" 로설정하면, P1A 핀은 "High" 를출력하고 P1D 핀은 PWM 신호 (Active High) 를출력하며이때 P1B, P1C 핀은모두 "Low" 를출력하게되며풀-브리지에연결된모터는결과적으로정회전을하게될것이다. 반면 P1M<1:0> 비트를 "11" 로설정하면, P1C 핀은 "High" 를출력하고 P1B 핀은 PWM 신호(Active High) 를출력하며이때 P1A, P1D 핀은모두 "Low" 를출력하게되며풀-브리지에연결된모터에흐르는전류의방향이반대로바뀌고결과적으로반대방향으로회전하게될것이다. 239
113 Motor Control < 그림 3-35> Active High 설정시고급(Enhanced) PWM 출력 우리가사용할회로에서는편의상구동회로를 Active High로구성하였지만상황에따라서 Active High 및 Active Low 회로를구성하게된다면이에맞게 CCP1M<3:0> 비트를설정해주면된다. DC 모터의정/ 역회전을위해실습에서사용할풀-브리지를위한 PWM 출력유형은 < 그림 3-36> 과같다. 그림에서주기의역수인 PWM 주파수는타이머2 및 PR2 레지스터 에의해결정되며, 펄스의폭은 CCPR1H:CCP1CON<5:4> 의 10비트값에의해결정되어 진다. < 그림 3-35> 에서는 P1B 및 P1D핀의신호가 100% 듀티사이클의신호로되었지만실제로는 PWM 형태의변조된신호가출력된다고생각하면된다. 이제풀- 브리지모드에서정/ 역회전의방향전환에대해살펴보도록하자. DC 모터의양방향제어를위한풀-브리지모드에서방향전환은 P1M<1:0> 비트값의설정을변경하면다음 PWM 사이클에서변경된방향에해당하는펄스가출력된다. 이때발생하는펄스의출력변화는 < 그림 3-36> 과같다. PWM 출력(P1B, P1D) 은 Inactive 상태로전환 Inactive 출력(P1A, P1C) 는반대방향으로구동하기위한출력으로전환 새로운 PWM 출력은다음사이클에서부터재현 240
114 Chapter 3. DC 모터(Brushed DC Motor) < 그림 3-36> 풀-브리지모드에서방향전환발생시출력변화 < 그림3-37> Active High 설정시정역회전출력 / 241
115 Motor Control 이외에도신뢰성있는제어를보장하기위한기능으로써자동정지모드 (Auto Shutdown Mode), 자동재기동모드(Auto Restart Mode), 데드타임추가모드 (Programmable Dead Band Delay Mode), 펄스스티어링모드(Pulse Steering Mode) 등이제공되고있으며이에대한자세한설명은데이터시트로대체하고자한다. 만약 DC 모터를적용하여제품을개발하고자한다면상기내용을필히숙지하여고급기능들이반영된보다신뢰성있는제품을개발할수있기를권장한다. 실습에앞서전체적인프로그램구성을살펴보면 < 그림 3-38> 과같다. 이전실습에서추가된부분은모터의정/ 역회전을위해 ECCP 모듈을사용한다는것과방향및속도의지령치는가변저항의중심값즉, 10비트 ADC 변환값의절반인 512를기준으로이보다작을경우에는정회전, 클경우에는역회전의목표속도( 듀티사이클) 로사용하고자한다. 한가지회로구성상모터의역기전력(Back EMF) 은정회전시에만측정이가능하다는점을참조하길바란다. < 그림 3-38> 정/ 역회전실습을위한순서도 다음은 ECCP 모듈을초기화하기위한코드이다. ECCP 모듈을풀-브리지 PWM 모드로사용하기위해 PWM 주파수는타이머2 를이용하여설정하고 CCP1CON 레지스터 에서풀-브리지및 Active High 설정을해주었다. 우리가실습하게될회로에서사용된 242
116 Chapter 3. DC 모터(Brushed DC Motor) 4 개의스위치소자(MOSFET) 는드라이버소자와의구성에의해 Active High로구성되어있음에유의하길바란다. /*===========================================================*// //*== 3. Full Bridge 설정 ( CCP1) ==*// //*== --> PWM Freq. = 20kHz 설정 ==*// //*==========================================================*// void Config_CCP1_FULL_BRIDGE(void) RC2 = 0; RD5 = 0; RD6 = 0; RD7 = 0; TRISC2 = 0; TRISD5 = 0; TRISD6 = 0; TRISD7 = 0; TMR2IF = 0; T2CKPS1=0; T2CKPS0 = 0; // P1A : output 설정 // P1B : output 설정 // P1C : output 설정 // P1D : output 설정 // TMR2 Interrupt Flag 초기화 //1:1Prescaler // T_tmr2 = ( Tosc * 4 ) x (# of Prescaler)= 0.2 us PR2 = 250-1; // Period of PWM(T_pwm) = (PR2+1) x T_tmr2 = 50 us // Freq. of PWM(F_pwm) = 1/T_pwm = 20 khz CCP1CON = 0b ; //P1M1 P1M0 =?? // 01 = Full-Bridge output forward; P1D modulated; P1A active; P1B, P1C inactive // 10 = Half-Bridge output; P1A, P1B modulated with dead-band control; // P1C, P1D assigned as port pins // 11 = Full-Bridge output reverse; P1B modulated; P1C active; P1A, P1D inactive // CCP1M3=1; CCP1M2 = 1; CCP1M1 = 0; CCP1M0 = 0; // P1A,P1C - Active High, P1B,P1D - Active High CCPR1L = 0; DC1B1 = 0; DC1B0 = 0; // 비트값만 '0' 으로초기화 TMR2ON = 1; // Timer2 start // while(!tmr2if); // Timer2 동작후새로운PWM cycle 이시작확인후, CCPx 핀출력으로설정 }; 243
117 Motor Control 다음은 CCP2 모듈을캡쳐(Capture) 모드로사용하기위한설정코드이며, 참고로이전실습에서는 CCP1 모듈을이용하여캡쳐를하였으나 ECCP 모듈이 CCP1에서지원하고있는관계로 CCP2 모듈로변경하였으며타이머1등의설정은모두이전과동일하다고볼수있다. 한가지주의할점은실습코드에서 CCP2 인터럽트를사용하였으며이때사용되는인터럽트플래그인 CCP2IF 비트가헤더파일에는선언되어있으나 HITECH C PICC 컴파일러의 V9.60 Lite 버전에서참조할수없다는에러가발생하고있다. 이는컴파일러의버그로보이며현재 HITECH 사에확인중에있으며이후버전업그레이드시반영될것으로예상된다. 현재로서는 PIR2 레지스터를이용하여 CCP2IF 비트가위치한 PIR2 레지스터의 0 번째비트를직접액세스하는방법이해결책으로보인다. //*===========================================================*// //*== 4. Capture Module 설정 ( CCP2) ==*// //*== --> Timer1 설정 (TMR1 이용펄스카운팅) ==*// //*== --> RC1 : CCP2를 Capture 모드로설정 ==*// //*== --> Datasheet <11.3 참조> ==*// //*==========================================================*// void Config_CCP2_CAPTURE(void) RC1 = 0; TRISC1=1; // RC1 입력설정(CCP2 입력설정) T1CON = 0; // T1CON 레지스터클리어 TMR1ON = 0; // 타이머 1 Stop TMR1CS = 0; // 타이머 1 소스 = Fosc/4 = 20Mhz/4 = 5Mhz T1CKPS1 = 1;T1CKPS0 = 1; // 1:8 Prescaler // TMR1H:TMR1L 레지스터는 1.6us 마다증가 //CCP2IF = 0; CCP2IE = 1; PEIE=1; GIE = 0; // CCP2 Interrupt Flag 클리어 // CCP2 Ineterrupt 사용 // Peripheral Interrupt 사용 // Global Interrupt 미사용 CCP2CON = 0b ; // Cpature Mode, Every Falling Edge ; 0100 // Capture Mode, Every rising edge : 0101 // Capture Mode, Every 4th rising edge : 0110 // capture Mode, Every 16th rising edge : 0111 CCPR2H = 0; CCPR2L = 0; TMR1H = 0; TMR1L = 0; // Capture 레지스터클리어 // TMR1 레지스터클리어 } TMR1ON = 1; // 타이머 1 Start 244
118 Chapter 3. DC 모터(Brushed DC Motor) 다음은모터의정/ 역회전및듀티사이클을처리하는루틴이다. 이전에도설명했듯이 풀- 브리지모드에서모터의정/ 역회전은 P1M<1:0> 비트를 "01( 정회전)" 또는 "11( 역회전)" 으로설정만해주면된다. //********************************************************************// //*** DC모터정회전 ***// //*** CCP1CON 모드변경 ***// //********************************************************************// void Motor_Forward(void) // Set forward Motor Speed CCP1CON = 0b ; // P1M1 = 0; // P1M0 = 1; // 01 = Full-Bridge output forward // CCP1M3=1; CCP1M2 = 1; CCP1M1 = 0; CCP1M0 = 0; fcn_eccp_duty_update(); TMR2ON = 1; } flag_motor_running = 1; //********************************************************************// //*** DC모터역회전 ***// //*** CCP1CON 모드변경 ***// //********************************************************************// void Motor_Backward(void) // Set Backward Motor Speed CCP1CON = 0b ; // P1M1 = 1; // P1M0 = 1; // 11 = Full-Bridge output reverse // CCP1M3=1; CCP1M2 = 1; CCP1M1 = 0; CCP1M0 = 0; fcn_eccp_duty_update(); TMR2ON = 1; } flag_motor_running = 1; 245
119 Motor Control 다음은모터의급제동을위한브레이크기능및모터정지시 ECCP 모듈을미사용모드로설정하기위한코드이다. 풀-브리지회로에서모터의급제동을위한방법은상단에위치한 2 개의스위치소자(MOSFET) 를끄고, 하단에위치한 2개스위치소자 (MOSFET) 를켜는것만으로놀라운제동효과를확인할수있을것이다. 참고로상대적으로대용량의모터를사용할수록더큰제동효과를눈으로확인할수있을것이다. //********************************************************************// //*** DC모터정지 ***// //*** No Brake ***// //********************************************************************// void Motor_Stop(void) CCP1CON = 0; RC2 = 0; RD5 = 0; RD6 = 0; RD7 = 0; TMR2ON = 0; } flag_motor_running = 0; //********************************************************************// //*** DC모터 Braking ***// //*** With Brake ***// //********************************************************************// void Motor_Brake(void) if(flag_motor_running) CCP1CON = 0; RC2 = 0; RD5 = 1; RD6 = 0; RD7 = 1; delay(50000); } } 246
120 Chapter 3. DC 모터(Brushed DC Motor) 다음은사용자함수들로구성된메인알고리즘이다. //********************************************************************// //*** Main Routine : main(void) ***// //********************************************************************// void main(void) Config_PORT_IO(); // I/O 포트설정 Config_ADC(); // ADC 모듈설정 Config_CCP1_FULL_BRIDGE(); // CCP1 모듈설정 ( Full Bridge 모드) Config_CCP2_CAPTURE(); // CCP2 모듈설정 (Capture 모드) Config_UART(); // UART 모듈설정 while(1) fcn_sw_input(); fcn_ad_conv(0); } } if(flag_motor_on==1) if(sw3) if(flag_motor_forward) Motor_Forward(); else Motor_Backward(); } else fcn_bemf_measuring(); fcn_data_display(); } } else if(flag_motor_running) Motor_Brake(); else Motor_Stop(); } 247
121 Motor Control 3.5 결론 우리의일상에서가장보편적으로사용되고있는 DC 모터는구동및제어가용이하다는점뿐만아니라가격이상대적으로저렴하기때문에모터제어입문자들을위한최상의실습대상이라판단된다. 비록깊이있게다루지는못하였지만지금까지의실습과정으로만족하지말고고급응용기술로발전할수있도록호기심과도전정신을발휘하여주기를바란다. 참고로,DC 모터의실습은본서적에포함된데모보드를이용하여수행하였으며, 실습에사용된 DC 모터(NT-720R) 는온라인쇼핑몰에서저가에쉽게구매할수있는제품으로선정하였다. 프로그래밍및디버거를위한툴은마이크로칩의저가형 PICkit2 Debug Express(DV164121) 또는중저가형 MPLAB ICD2(DV164007) 을사용할것을권장한다. 본교재에서다루지못한사항이나부족했던점들은한국마이크로칩웹사이트 ( 를통해지원할예정이며, 관련자료및전체실습코드또한웹사이트를통해지속적으로업데이트하도록노력하겠다. 참고및추천문헌 1. AN905: Brushed DC Motor Fundamentals (DS00905A, Microchip) 2. AN893: Low-Cost Bidirectional Brushed DC Motor Control Using the PIC16F684 (DS00893A, Microchip) 3. AN696: PIC18CXXX/PIC16CXXX DC Servomotor Application (DS00696A, Microchip) 4. AN847: RC Model Aircraft Motor control (DS00847A, Microchip) 5. DC Motor Control Tips & Tricks (DS41233B, Microchip) 6. PIC MCU CCP and ECCP Tips & Tricks (DS41214B, Microchip) 7. AN898: Determining MOSFET Driver Needs for Motor Drive Applications (DS00898A, Microchip) 8. PICDEM Mechatronics Demonstration Board User's Guide (DS51557B, Microchip) 248
122 CHAPTER 스텝모터 (Stepper Motor) 스텝모터의개요스텝모터의종류스텝모터의구동스텝모터의제어 4.5 결론
123 Motor Control 4.1 스텝모터의개요 스텝모터의특징 우리가흔히스텝모터라부르는모터는영어권지역에서는스텝퍼(Stepper) 모터또는스테핑(Stepping) 모터라불리고있다. 국내에서는대부분의엔지니어들이스텝모터라부르고있는점을감안하여본서적에서도스텝모터로명칭을하겠다. 스텝핑(Stepping) 의사전적인의미에서알수있듯이스텝모터는회전자(Rotor) 의움직임( 회전) 이한스텝씩또박또박움직이는모터를말한다. 따라서스텝모터는다른종류의모터에비해상대적으로낮은토크를갖지만위치제어및구동방법에있어서상대적으로용이하다는장점으로인해 CD-ROM 드라이버, 잉크젯프린터, 공작기계및일부가전제품등과같은응용분야에주로사용되고있다. 스텝모터의주요특징들에대해살펴보도록하자. 1. 브러시(Brushless) 가없다. 스텝모터는 DC 모터와는달리브러시(Brush) 가없다. 따라서흔히브러시가부착된모터에서발생하는소음, 전기적아크발생, 짧은수명등의단점을극복할수있다는장점을갖고있다. 2. 부하와독립적이다. 스텝모터는부하가모터의정격토크를초과하지않는범위내에서모터에인가되는부하의양과상관없이설정속도로일정하게회전할수있다. 3. 오픈루프제어가가능하다. 스텝모터는일정한변위즉, 스텝(Step) 으로움직인다. 따라서스텝모터는토크스펙 범위내에서동작하는한별도의센서즉, 피드백(Feedback) 장치없이그위치를알 수있다. 4. 홀딩토크(Holding Torque) 특성을갖는다. 스텝모터는특정위치에서모터의회전축을움직이지않고정지하게할수있는홀딩토크(Holding Torque) 를가지고있어서, 별도의기계적인브레이크장치가필요하지않다. 250
124 Chapter4. 스텝모터(StepperMotor) 5. 뛰어난응답특성을갖는다. 스텝모터는모터의기동(Start-Up), 정지, 역회전을위한뛰어난응답특성을발휘할 수있다. 6. 저속에서 DC 모터보다상대적으로토크특성이좋다. 스텝모터는낮은속도로회전시에도수있다. DC모터대비상대적으로높은토크를발휘할 스텝모터의구조및원리 스텝모터의구조 < 그림 4-1> 스텝모터와 DC모터의단면도 스텝모터는 < 그림 4-1> 에서와같이외부케이스와근접한움직이지않고고정되어있는고정자(Stator) 가되며, 모터의중심부에서회전하는회전축을모터의내부에서감싸고있는부분이회전자(Rotor) 가된다. 스텝모터는아래그림에서와같이고정자는코일권선이감겨져있어서전자석의역할을하게되고, 회전자는영구자석의역할을하게된다. 즉, 고정자에감겨진코일권선에흐르는전류의방향에따라서 N극또는 S극의극성을갖는전기자석이되고, 이들전류의방향을제어함으로써마치전자계 (Electro -Magnetic Field) 가회전하는것처럼만들어주면( 이를회전자계라부름) 회전자(Rotor) 의영구자석이회전자계를따라서회전할수있게된다. 251
125 Motor Control 참고로이러한측면에서보았을때스텝모터는 DC모터와정반대의구조를갖고있다고볼수도있다. 즉, DC 모터는고정자(Stator) 가영구자석으로되어있으며, 회전자 (Rotor) 에코일권선이감겨져있는구조로되어있다. 스텝모터의구조의이해를돕기위해서 < 그림 4-2> 를살펴보자. < 그림 4-2> 스텝모터의분해도 DC모터는모터의외부로인출된신호선이 2 가닥인반면, 스텝모터는최소 4개이상의신호선이모터의외부로인출되어있으며그색상도서로다르게구분되어있다. 이들신호선들은고정자(Stator) 의코일권선과연결되어있으며, 이들신호선에전류를흘려줌으로써고정자에회전자계를형성할수있게된다. 따라서스텝모터의정확한구동을위해서는스텝모터의스펙을사전에확인함으로써각색상의신호선이고정자의코일권선의어느부위에연결되어있으며어떠한역할을하게되는지반드시확인할필요가있다. < 그림4-2> 의두번째와세번째그림을보면독자들은스텝모터의구조를보다확실하게이해할수있으리라짐작한다. 모터의정중앙에위치하고있는톱니바퀴( 기어) 모양을하고있는부분이회전자(Rotor) 이다. 여기에서소개한스텝모터는회전자(Rotor) 가영구자석으로착자되어있음을세번째그림에서확인할수있다. 세번째그림은베어링을회전자의근처로가져갔더니자석에붙듯이착달라붙는모습을설명해주고있는것이다. 그림이컬러로인쇄되지않아서잘구분은되지않겠지만회전자(Rotor) 의바깥쪽주위에서로대칭으로배치된부분이고정자(Stator) 이며, 고정자에감겨진코일권선의일부분을그림에서확인할수있다. 이코일권선은총 4개의묶음으로되어있으며각각의묶음에연결된신호선이모터의외부로인출되어신호선으로사용될수있는것이다. 252
126 Chapter4. 스텝모터(StepperMotor) 스텝모터의원리 스텝모터에대한이해를위해서고정자(Stator) 에대해좀더살펴보자. 앞에서설명하였듯이모터의중심에위치한회전자(Rotor) 를기준으로주위를감싸는형태로대칭으로배치된철심에코일권선이감겨져있다고상상해보도록하자. 이미감을잡은독자도있겠지만이코일이감긴철심이스텝모터의고정자(Stator) 역할을하게되는것이다. 고정자와회전자와의관계를좀더깊이있게이해하기위해 < 그림 4-3> 을살펴보자. 회전자 0도 b. 회전자 90도 c. 회전자 180도 d. 회전자 270도 a. < 그림4-3> 고정자권선의전류방향에따른회전자의회전시계방향회전 ( ) < 그림 4-3> 은스텝모터의회전자(Rotor) 를시계방향으로회전시키기위한원리및방법에대해설명하기위한그림이다. 스텝모터에는보통 4 선(4 Wires) 의신호선이있다고언급하였는데이들신호선들은위그림에서철심에감겨져있는코일의양단에각각연결되었다고생각하면된다. 따라서이신호선에전압을인가함으로써모터권선에흐르는전류의양과방향을제어하는것이스텝모터제어의기본이된다고볼수있다. 각각의그림에대한자세한설명은다음설명을참조하기바란다. (1) 회전자 0/360도위치 먼저상하로배치된철심에감겨져있는코일에전류를흘려서위쪽에 S 극, 아래쪽에 N 극이형성이된다면자석성분의회전자(Rotor) 는서로반대극성끼리끌어당기는힘에의해서첫번째그림과같이회전자의 N극의위치가 12 시방향에정렬될것이다. (2) 회전자 90도위치 이제좌우로배치된철심에감겨져있는코일에전류를흘려서좌측에극이형성되게한다면철심의한가운데위치하고있는회전자는시계방향으로 N 극, 우측에 S 90도회 전하여결과적으로두번째그림과같이정회전자의 N극은 3 시방향에정렬될것이다. 253
127 Motor Control (3) 회전자 180도위치 상하로배치된철심에감겨져있는코일의전류방향을앞의 (1) 번과정과정반대로흘려서위쪽에 N 극, 아래쪽에 S극이형성되게하면회전자는시계방향으로 90도회전하여세번째그림과같이 6시방향에회전자의 N 극이정렬되게된다. (4) 회전자 270도위치 좌우로배치된철심에감겨져있는코일의전류방향을앞의 (2) 번과정과정반대로흘려서좌측에 S 극, 우측에 N극이형성되게하면회전자는시계방향으로 90도회전하여네번째그림과같이 9시방향에회전자의 N 극이위치하게된다. 지금까지설명한 (1)~(4) 의과정을반복하게되면스텝모터의회전자(Rotor) 는시계방향으로지속적인회전을하게될것이며, 그반복속도를변화시키면이에따른회전자의회전속도또한비례적으로변화할것이다. 다만회전자가회전할수있는속도의범위에는기계적또는물리적으로한계가있으므로이는해당스텝모터의스펙을참조하여야할것이다. 지금까지는스텝모터의시계방향구동에대해설명을드렸다. 그렇다면역회전즉, 시계반대방향으로구동하고자한다면어떻게해야할지생각해보자. 엔지니어링센스가있는독자라면이미그해답을알고있을것으로예상된다. 이미설명했듯이모터의회전방향은회전자(Rotor) 를감싸고있는고정자(Stator) 의회전자계에의해서결정되므로고정자의회전자계를 < 그림 4-4> 와같이역순이되도록코일에흐르는전류를제어해주면된다. 각각의그림에대한자세한설명은 < 그림 4-3> 에서했던설명으로대체하며독자여러분의몫으로돌리고자한다. a. 회전자 0 b. 회전자 -90 c. 회전자 -180 d. 회전자 -270 < 그림 4-4> 고정자권선의전류방향에따른회전자의회전( 반시계방향회전) 254
128 Chapter4. 스텝모터(StepperMotor) 4.2 스텝모터의종류 스텝모터는영구자석(Permanent Magnet), 가변릴럭턴스(Variable Reluctance) 및하이브리드(Hybrid) 타입의크게 3가지종류로구분하며이들스텝모터의구분은회전자의특성에따라서결정되어진다. 회전자가영구자석으로자화(magnetized) 되어있는형태의모터를영구자석형스텝모터라하며, 가변릴럭턴스형스텝모터의회전자는자석의성분은갖지않지만마치기어의톱니와같이회전자의표면에홈이새겨져있다. 끝으로하이브리드형스텝모터는이들 2가지특성의모두가지는형태의스텝모터를말한다. 이제각각의스텝모터에대해좀더자세히살펴보도록하자 영구자석스텝모터 (PermanentMagnetSteppingMotor) 영구자석형스텝모터는앞서설명했듯이모터의중심에위치한회전자(Rotor) 가 N/S 극성을갖는영구자석으로자화되어있으며고정자(Stator) 에는일정방향으로코일권선이감겨져있는형태로이루어져있다. 따라서그회전원리는고정자(Stator) 에감겨져있는코일권선에전류를흘려주게되면코일의감긴방향과전류의방향에의해서고정자주위에전자기력이발생하게될것이다. 따라서영구자석의특성을갖는회전자는고정자에서발생한전자기력(Electro-Magnetic Force) 의극성과상호작용하는인력과척력에의하여그위치가변화하게될것이며, 이러한과정을일정한패턴으로반복하게되면회전자를우리가원하는방향과속도로지속적으로회전시킬수있는원리가된다. a 회전자(2 극)/ 고정자(2 상) b 회전자(6 극)/ 고정자(4 상) < 그림4-5> 영구자석형스텝모터단면도 255
129 Motor Control < 그림 4-5> 는영구자석형스텝모터의내부단면을설명하는그림이다. 그림 a의스 텝모터는회전자의자석이 2 개의극(N 극, S 극), 고정자권선이 4 개의상( 권선) 으로구 성된경우이다. 그림 b는회전자에 4개의극을추가하여총 6 개의극, 고정자에 4개의 상을추가하여총 8 개의상( 권선) 으로구성되어있는경우이다. 위두개의스텝모터의 가장큰차이점은그림 a의회전자(2 극) 는궁극적으로 90 도간격( 스텝) 으로회전을제어 할수있는반면, 그림 b의회전자(6 극) 는 45 도간격( 스텝) 으로회전할수가있게된다. 그이유에대해서는다음에설명할영구자석형스텝모터의회전원리에대해고찰해보고독자스스로고민해보기를바란다 영구자석스텝모터의동작원리 영구자석형스텝모터의회전원리를이해하기위해필요한기초지식은이미우리머릿속에자리잡고있을것이다. 기억이날지는모르겠지만어릴적초등학교교과목에서자석과전자석등의원리에대해서배웠기때문이다. 이러한지식은중고등학생시절물리과목에서, 대학생시절전자기학등과같은교과목을통해서이미배우고터득했으리라짐작한다. 그래도기억이나지않는독자는이번기회에먼지쌓인학창시절의교과서를다시꺼내보기를바란다. 이해를돕고자가장간단한영구자석형스텝모터인회전자가 2 극(pole), 고정자가 4 상(phase) 인경우에대해그림을통해설명하고자한다. < 그림 4-6> 의경우, 회전자를한바퀴회전시키기위해필요한고정자권선의전류통전방법은 4 가지만존재한다. 즉, 이 4가지고정자권선의통전상태에의해회전자는 90 /180 /270 /360 간격으로정렬될수있으며, 이러한변화를빠른시간에연속적으로발생할수있도록제어하는것이스텝모터회전의원리이다. 아래그림에서 45 /135 /225 /315 의위치에회전자가정렬된그림은회전자의회전관성에의해서회전자의위치가변이되는과정을보여주기위한그림이다. 이와같은영구자석형스텝모터의원리를제대로이해하고있으면이후에소개될풀- 스텝핑, 하프-스텝핑및마이크로-스텝핑등의제어방법을적용하여스텝모터의구동및제어를어렵지않게수행할수있게될것이다. 256
130 Chapter4. 스텝모터(StepperMotor) a 회전자 0 위치 b 회전자 45 위치 c 회전자 90 위치 d 회전자 135 위치 e 회전자 180 위치 f 회전자 225 위치 g 회전자 270 위치 h 회전자 315 위치 i 회전자 360 위치 < 그림 4-6> 영구자석형스텝모터의회전원리 가변릴럭턴스스텝모터 (Variable Reluctance Stepping Motor) 가변릴럭턴스모터(Variable Reluctance Motor) 는가변스위치드릴럭터스모터 (Variable Switched Reluctance Motor) 또는줄여서 SR 모터라고부르기도한다. 이모 257
131 Motor Control 터는자기저항(Magnetic Reluctance) 의원리를이용하는데여기에서자기저항이란자기회로에서자기력선속( 자속,Magnetic Flux) 에대하여생기는자기저항력으로, 전기회로에서의저항과대응되는개념이며그값은자기회로의길이에비례하고, 그단면적과투자율에반비례한다. 이들모터는고정자에보통 3~5 개의쌍으로이루어진권선( 맞은편권선과서로연결되어있음) 이공통단자(Common Terminal) 에연결되어있으며, 회전자는자석성분은없으며연철(Soft-Iron) 재질의톱니(Teeth) 모양으로되어있다 가변릴럭턴스스텝모터의동작원리 < 그림 4-7> 의그림-a 와같이가변릴럭턴스모터의고정자권선중 1번에전류를흘려주면, 서로대칭으로배치된 1번권선의방향과나란하게자속이형성되며회전자는이자속에대한자기저항즉, 릴럭턴스값을최소화하기위한위치즉, 공극(Air Gap) 이최단거리가되는위치로이동하게된다. 즉고정자의 1 번폴(pole) 과연철(Soft Iron) 성분의회전자톱니(Teeth) 가최단거리를유지하고자하는힘이발생하게되며이로인해그림 b와같은상태를유지하게될것이다. 따라서 4 쌍(Pair) 의고정자권선중어느것에전류를흘려주느냐에따라서이후의회전자의움직임즉, 회전방향이결정되게된다. a 모터등가회로 b 가변릴럭턴스모터의단면도 < 그림 4-7> 가변릴럭턴스모터 이와같은원리로인해회전자가한바퀴(360 ) 를회전하기위해서는고정자권선이 4쌍이므로그 2배에해당하는총 8 스텝(Step) 이필요하게되며회전자는한스텝당 45 회전하게됨을알수있다. 따라서고정자권선의쌍이많을수록한스텝당회전각도는감소하게되므로보다정밀한제어가가능하게됨을짐작할수있다. 258
132 Chapter4. 스텝모터(StepperMotor) a고정자권선1 통전(0 ) b고정자권선2 통전(45 ) c고정자권선3 통전(90 ) d고정자권선4 통전(135 ) e고정자권선1 통전(180 ) f고정자권선2 통전(225 ) g고정자권선3 통전(270 ) h고정자권선4 통전(315 ) i고정자권선1 통전(360 ) < 그림 4-8> 가변릴럭턴스모터의각스텝(Step) 별회전자위치 259
133 Motor Control 하이브리드스텝모터 (HybridSteppingMotor) 하이브리드형스텝모터는앞에서설명한영구자석형스텝모터와가변릴럭턴스스텝모터의조합으로구성되었다고볼수있다. 하이브리드형스텝모터의회전자(Rotor) 는 < 그림 4-9> 와같이많은가변릴럭턴스스텝모터와유사한형태의톱니를매우많이가지고있으며, 이들톱니바퀴들은 N극과 S 극으로자화( 磁化 ) 되어있기때문에영구자석모터의특성을가지게된다. 또한, 회전자의톱니는자기력선속( 자속,Magnetic Flux) 이고정자와회전자사이의공극(Air Gap) 을최소화할수있는경로(Path) 를제공해줌으로써회전자의움직임을발생시키는요소를제공해준다. 따라서하이브리드스텝모터는그복잡한구조에서알수있듯이영구자석타입및가변릴럭턴스타입의스텝모터와비교했을때상대적으로정지(Holding) 토크및구동(Dynamic) 토크특성등이상당히개선될수있다는장점을가지는반면비용이증가하게된다는단점을가지고있다. a하이브리드스텝모터 b고정자 c회전자 d회전자홈( 확대) < 그림 4-9> 하이브리드스텝모터의구성 하이브리드스텝모터의동작원리에대한설명에앞서고정자권선및회전자의배치에대한이해가필요하다. 이들코일로구성된고정자권선과영구자석으로된회전자의배치는 < 그림 4-9> 와같다. 고정자권선배치에서의가장큰특징으로써각각의모터권선쌍(A, A', B, B') 이상호대칭으로배치되어있으며, A와 A', B와 B' 는서로수직으로연결되어있음에유의하자. 이제모터구동전류의경로에대해살펴보자. 만약권선 A를통해흘러들어간다면그전류는권선 A' 를통해전류가빠져나올것이며반대로권선 A' 를통해전류가유입된다면권선 A 를통해빠져나올것이다. 물론권선 B와 B' 에서도동일한경우에해당한다. 하이브리드스텝모터의동작원리에대한설명에앞서 < 그림 4-10> 의모터권선의 260
134 Chapter4. 스텝모터(StepperMotor) 배치및회전자의극성배치에대해다시한번확인해주기를바란다. 고정자및회전자각각의톱니의정렬기준에있어서회전자의기어를기준으로각각 1/2 간격차이가있도록배치가되어있음에유의하기바란다. a 모터권선배치 b 회전자및고정자상세설명 < 그림 4-10> 하이브리드스텝모터의고정자권선및회전자 하이브리드형스텝모터의동작원리 이제하이브리드스텝모터의회전자를시계방향으로구동하기위해 < 그림 4-11> 의 각각의스텝에대해살펴보도록하자. (1) 스텝 1 ( 전류방향 : A A', B B') 하이브리드스텝모터의 4개의권선중 A 및 B 에 " 양(+)" 전압, A' 및 B' 에 " 음(-)" 전압을인가하여전류의방향을 A A', B B' 가되도록하는과정이다. 회전자는회전자톱니사이즈를기준으로 1/2 스텝을회전하게되며, 그결과고정자의톱니중 PHASE B, B' 확대그림을통해회전자의 N 극/S극톱니와각각 1/2 씩마주보는위치에있는것을확인할수있다. 즉회전자는 1/2 스텝을시계방향으로회전한결과가된다. (2) 스텝 2 ( 전류방향 : A' A, B B') 하이브리드스텝모터의 4개의권선중 A 및 A' 권선의전압극성을바꿔주어전류의방향을반대로해준다. 즉, A' 및 B 에 " 양(+)" 전압, A 및 B' 에 " 음(-)" 전압을인가하여전류의방향을 A' A, B B' 가되도록하는과정이다. 회전자는회전자톱니사이즈를기준으로 1/2 스텝을회전하게되며, 그결과고정자의톱니중 PHASE A, A' 확대그림을통해회전자의 N 극/S극톱니와각각 1/2 씩마주보는위치에있는것을확인할수있다. 즉회전자는 1/2 스텝을시계방향으로회전한결과가된다. 261
135 Motor Control a 스텝 1 (A A', B B') b 스텝 2 (A' A, B B') c 스텝 3 (A' A, B' B) d 스텝 4 (A A', B' B) < 그림 4-11> 하이브리드스텝모터의고정자권선및회전자 (3) 스텝 3 ( 전류방향 : A' A, B' B) 하이브리드스텝모터의 4개의권선중 A 및 B' 권선의전압극성을바꿔주어전류의방향을반대로해준다. 즉, A' 및 B' 에 " 양(+)" 전압, A 및 B 에 " 음(-)" 전압을인가하여전류의방향을 A' A, B' B 가되도록하는과정이다. 회전자는회전자톱니사이즈를기준으로 1/2 스텝을회전하게되며, 그결과고정자의톱니중 PHASE B, B' 확대그림을통해회전자의 N 극/S극톱니와각각 1/2 씩마주보는위치에있는것을확인할수있다. 즉회전자는 1/2 스텝을시계방향으로회전한결과가된다. (4) 스텝 4 ( 전류방향 : A A', B' B') 하이브리드스텝모터의 4개의권선중 A 및 A' 권선의전압극성을바꿔주어전류의방향을반대로해준다. 즉, A 및 B' 에 " 양(+)" 전압, A' 및 B 에 " 음(-)" 전압을인가하여전류의방향을 A A', B' B 가되도록하는과정이다. 회전자는회전자톱니사이즈를 262
136 Chapter4. 스텝모터(StepperMotor) 기준으로 1/2 스텝을회전하게되며, 그결과고정자의톱니중 PHASE A, A' 확대그림을통해회전자의 N 극/S극톱니와각각 1/2 씩마주보는위치에있는것을확인할수있다. 즉회전자는 1/2 스텝을시계방향으로회전한결과가된다. 위와같은 4개의스텝을순차적으로반복함으로써회전자는시계방향으로회전을하게되며, 위 4가지스텝의순서를역순으로수행하게되면회전자의방향은반대가될것이며회전자가반시계방향으로회전하는결과를얻게될것이다. 또한하이브리드스텝모터의 1 스텝당회전자의이동각도는회전자및고정자의기어의개수에의해서결정되어질것이다 스텝모터의종류별비교 < 표 4-1> 은지금까지설명한 3 가지종류의스텝모터의특성을비교한것이다. 비용측면에서는제조공정에따라서차이가있으며, 영구자석및가변릴럭턴스의혼합형인하이브리드스텝모터의비용이가장높게발생한다. 모터의정밀도측면에서는가변릴럭턴스및하이브리드타입의스텝모터가 1 스텝당 1.8 이하의제어가가능하기때문에일반적으로정밀제어분야에많이응용되고있다고볼수있다. 모터를구동시켜야하는엔지니어관점에서는구동방법에대해서도관심을갖고확인해야할것이다. 표에서보는바와같이가변릴럭턴스스텝모터는일반적으로 "Full Step" 방법만을사용할수있지만, 영구자석및하이브리드타입의스텝모터에대해서는제조스펙에따라서 "Full Step", "Half Step", "Micro-Stepping" 과같이모든스텝모터구동방법을적용할수있다. 스텝모터의구동방법에대해서는이후자세히설명을하도록하겠다. < 표4-1> 스텝모터종류별특성비교 영구자석스텝모터 가변릴럭턴스스텝모터 하이브리드스텝모터 비용 낮음 중간 높음 설계성 보통 간단 복잡 정밀도 1 스텝당 3~30 1 스텝당 1.8 이하 토크 vs 속도 - 고속에서낮은토크손실 - 소음낮음높음낮음 구동방법 Full, Half, Micro-stepping Full Step Full, Half, Micro-stepping 263
137 Motor Control 4.3 스텝모터의구동 바이폴라(Bipolar) 와유니폴라(Unipolar) 이해 스텝모터의구동에앞서꼭기억해야할사항이있다. 본장을시작하면서스텝모터의신호라인에대해잠깐언급한적이있는데, 스텝모터의고정자측에감겨져있는코일즉, 모터권선의외부로인출된리드선이모터제어를위한신호라인이되며유형에따라바이폴라(Bipolar, 양극성) 와유니폴라(Unipolar, 단극성) 스텝모터로구분할수있다. 바이폴라스텝모터와유니폴라스텝모터의구분을위해 < 그림 4-12> 를살펴보자. a 바이폴라(Bipolar) < 그림 4-12> b 유니폴라(Unipolar) 바이폴라및유니폴라비교 바이폴라스텝모터는 < 그림 4-12 a> 에서와같이고정자에감겨진코일의각끝단에리드선이연결되어있기때문에리드선즉, 모터의외부로유출된신호선은 4선인경우가많다. 바이폴라스텝모터의가장큰특징은코일에연결된리드선 1-2 및 3-4 를통해전류의양방향흐름이가능하며, 유입된전류는모터권선의전체를흐르게되는점이특징이다. " 바이폴라(Bipolar, 양극성)" 라는이름은이와같은전류의양방향특성으로인해붙여졌다고볼수있다. 유니폴라스텝모터는바이폴라스텝모터의리드선 4개외에도각각의코일권선의중간에추가적인리드선이각각인출되어있다. 즉, 2 개의센터탭(Center Tap) 이추가되어일반적으로총 6 선의리드선이모터의외부로유출되어있다. 이들 2개의센터탭에 는스텝모터의구동전압원(Supply Voltage) 이공급된다. 또한나머지각코일의끝단 264
138 Chapter4. 스텝모터(StepperMotor) 4 개는상황에따라순차적으로그라운드(Groud) 로연결하게된다. 따라서유니폴라스 텝모터의경우전류방향은센터탭(3, 6 번) 에서리드선(1, 2, 4, 5 번) 을통해서단방향 으로만흐르게된다. 또한바이폴라스텝모터와는달리유니폴라스텝모터의전류는코 일권선의절반(1/2 구간) 만을통과하게된다. 따라서 " 유니폴라(Unipolar, 단극성)" 라는 이름은전류가한쪽방향으로만흐르게되는특성으로인해붙여졌다고볼수있다. 유 니폴라스텝모터의신호선은 5개또는 6개가모터의외부로유출되어있는데그구분 은센터탭에연결된리드선이서로공통으로묶여서인출될경우는 5 개가되며, 각각 인출될경우는 6 개가된다고볼수있다. 유니폴라와바이폴라는구동방법및모터스펙, 구동회로등에있어서상호차이점 이있지만여기에서는굳이언급하지않겠다. 앞으로이어질프로그램실습등을통해 다양한구동회로, 알고리즘등을직접체험하면서그차이점을고민해보고느껴볼수 있기를바란다 바이폴라(Bipolar) 스텝모터구동원리 바이폴라스텝모터는 < 그림 4-13> 과같이고정자권선의 4 개의코일탭(Tap) A, A',B,B' 에전압을순차적으로인가함으로써전류의방향을양방향으로제어할수있다. 결과적으로고정자에회전자기장을순차적으로발생시킴으로써회전자가시계방향으로 회전하게되는원리를보여주고있다. 자세한설명은 < 그림 4-13> 으로대체하며, 이후 프로그램실습을통해대신하고자한다. a 회전자 0 위치 ( 전류방향:B B') b 회전자 90 위치( 전류방향:A' A) 265
139 Motor Control c 회전자 180 위치 ( 전류방향:B' B) d 회전자 270 위치( 전류방향:A A') < 그림 4-13> 바이폴라스텝모터구동원리 유니폴라(Unipolar) 스텝모터 유니폴라스텝모터는 < 그림 4-14> 와같이고정자권선의 4 개의코일탭(Tap) 외에각코일의중간에연결된센터탭(Center Tap) 이있으며, 이센터탭에모터의구동전압을인가하고나머지코일의끝단탭은순차적으로그라운드(Ground) 에연결함으로써고정자에순차적으로회전자기장을발생시키고이로인해회전자가시계방향으로회전하게되는원리를보여주고있다. 참고로센터탭에그라운드(0 V) 를인가하고나머지코일의끝단탭에순차적으로양(+) 전원을연결할수도있다. a 회전자 0 위치 ( 전류방향:V+ B') b 회전자 90 위치( 전류방향:V+ A)) 266
140 Chapter4. 스텝모터(StepperMotor) c 회전자180 위치 ( 전류방향:V+ B) d 회전자 270 위치( 전류방향:V+ A') < 그림 4-14> 유니폴라스텝모터구동원리 4.4 스텝모터의제어 스텝모터의회전각도즉, 스텝각도(Step Angle) 는 < 그림 4-15> 에서보는바와같이한번의스텝에의해회전자가회전( 이동) 한각도로정의하며그제어방식은풀스텝(Full Step), 하프스텝(Half Step), 마이크로스텝(Micro Step) 과같이크게 3가지로구분할수있다. 또한각각의스텝을변화시키는시간즉, 주기에따라서회전속도즉, RPM(Revolution Per Minute) 가결정되며, 회전자가 1회전하기위해필요한총스텝과여기에소요된시간을이용해서계산할수가있다. < 그림 4-15> 스텝핑방법에따른스텝각도 267
141 Motor Control 풀- 스텝핑 (Full Stepping) 스텝핑모터의풀- 스테핑구동방식은회전자가고정자의특정상(Phase) 에서다음상으로완전히(Fully) 회전( 이동) 하도록하는방식의스텝핑기술을말하며 < 그림 4-15> 와같이회전자는 90 회전하게된다. 풀-스텝핑방법에는회전자권선의전류통전방식에따라서 1상통전방식과 2상통전방식또는 1상여자방식과 2상여자방식으로구분하여부르기도한다. 필자는개인적으로의미전달이쉽다고느껴지는통전방식이라는용어를앞으로사용하도록하겠다 풀스테핑(Full Stepping) - 1 상( 相, Phase) 통전여자 ( ) 방식이해 1 상통전방식은 < 그림 4-16> 에서보는바와같이각각의스텝구간에서오직 1개 의고정자권선에전압이인가되고, 이로인해 1 상의권선에만전류가흐르게된다. 1상 통전방식은여기에서기인한용어로생각하면된다. 아래그림의경우각스텝당회전 자의회전각도즉, 스텝각도는 90 이며, 4스텝을 1주기로회전자는 1회회전하게된 다. 일반적으로 90 각도로제어되는스텝모터는볼수가없으며주위에서흔히보게되 는스텝모터의경우정밀도를높이기위해내부적으로감속기어등을이용하여 1.8, 7.2 등의스텝각도특성을가지고있는경우가대부분이다. 참고로필자가실습에사 용한스텝모터는인터넷쇼핑몰에서저가에쉽게구입할수있는제품을선택하였으며 스텝각도는 7.2 의제품을사용하였다. 이러한종류의스텝모터적용사례는우리주 변에서쉽게발견할수있는데일례로에어컨제품의경우실내기로부터배출되는바람 의방향제어를목적으로사용되며, 실외기의경우냉매의팽창밸브의제어를위해스텝 모터가사용되고있다. a 1 상통전방식의전압시퀀스 b 스텝각도(Angle) < 그림 4-16> 1 상( 相 ) 통전방식전압시퀀스및스텝각도(Angle) 268
142 Chapter4. 스텝모터(StepperMotor) < 그림 4-16> 과같이스텝각도가 90 인경우에대해서스텝모터의회전속도결정및이를위한제어방법에대해살펴보도록하자. 1 회전당총스텝수 (Steps Per Revolution) : N [steps/revolution] < 예제> 풀(Full) 스텝이 90 인경우, 즉, 회전자가 1회전하기위해필요한총스텝수는 4 회이다. 정확히표현하면 4 [steps/revolution] 이된다. 1 초당펄스수(Pulses Per Second) : P [pps] < 예제> 회전속도 1200[rpm] 을얻기위한초당펄스수? 목표회전속도(RPM) 가 1200[rpm] 인경우, 스텝모터를응용하는분야에서는주로위치제어및속도제어를요구한다. 1상통전방식을사용해서스텝모터를 1200[rpm] 의속도로구동하기위해서는 1초당 80펄스의신호가필요하다는얘기이다. 따라서우리는 1/80[ 초] 인 12.5[ms] 주기로 1상통전제어펄스를스텝모터에입력해주면된다는결론을얻을수있다. 회전각도는스텝각도와펄스수의곱으로계산할수있으므로수식으로표현하지않아도누구나계산할수있을것으로믿는다. 269
143 Motor Control 그러면, 이제 1 상통전제어의원리에대해살펴보자. 바이폴라스텝모터의 1 상통전방식은 < 그림 4-17> 에서보는바와같이모터의리드선 4개를모터드라이버 IC의출력단에각각연결한후그입력단에마이크로컨트롤러의출력포트(RD4 RD7) 를연결하여구성된다. 이제남은것은마이크로컨트롤러의출력포트로 < 그림 4-17> 과같이출력신호를일정한시간간격으로정해진시퀀스에따라순차적으로출력하면스텝모터는회전하게된다. 아래그림은회전자가시계방향으로회전하는경우를예로들었으며, 반시계방향으로회전시키고자할경우출력펄스의시퀀스를역순으로변경해주면된다. 여기에서주목할점은출력펄스의시간간격에의해서모터의회전속도(rpm) 가결정된다는것이다. a 회전자 90 위치 ( 전류방향:A A') b 회전자 180 위치( 전류방향:B B') c 회전자 270 위치 ( 전류방향:A' A) b 회전자 360 위치( 전류방향:B' B) < 그림4-17> 1 상( 相 ) 통전회로구동원리 즉, 앞의계산식과같이출력펄스를 12.5[ms] 로결정할경우스텝모터의회전속도는 1200[rpm] 이된다. 마이크로컨트롤러에익숙하지않은독자라면 " 딜레이함수(delay()) 를이용하면되겠네!" 라고생각하겠지만마이크로프로세서를효율적으로활용하고자한다 270
144 Chapter4. 스텝모터(StepperMotor) 면다소어렵고귀찮더라도타이머인터럽트를이용하여제어시간을자유자재로조절할수있는실력을발휘해주기를당부한다. 그러면지금까지언급한사전지식을바탕으로마이크로컨트롤러를이용하여스텝모터를직접구동해보자. 한가지부탁하고싶은점은 " 어라? 모터가진짜도네!" 라는사실만으로만족하지말고, 직접회전속도변경도시도해보고모터의회전축에인가되는부하를변경할때의결과도재현해봄으로써다양한경험들을피부로직접체험해보고고민할수있는기회로활용할것을간절히바란다. 참고로의미전달을집중하고자모든실습은바이폴라스텝모터에대해서만수행할것이며가능하면유니폴라스텝모터에대한실습은독자들의몫으로돌리고자하며유니폴라에대한지원은웹사이트를통해제공하도록하겠다. a 소프트웨어개략도 b 타이머인터럽트서비스루틴순서도 < 그림4-18> 1 상( 相 ) 통전방식제어알고리즘 풀스테핑(Full Stepping) - 1 상( 相, Phase) 통전여자 ( ) 방식실습 그러면이제실습보드에서 1 상통전방식을직접구현해보도록하자. 스텝모터의구동에앞서서먼저현재가지고있는스텝모터의외부로유출된신호선의상(A,A',B,B') 을스펙(Specification Sheet) 을확인하여구분할수있어야한다. 만약해당 모터의스펙을확인할방법이없다고해도 < 그림 4-12> 를제대로이해하고있다면저항 271
145 Motor Control 을측정할수있는멀티미터만가지고도얼마든지구분할수있다. 멀티미터를이용하여측정한모터권선의저항값이모터에표기된고유권선저항값( 보통 10 Ω 내외) 과일치하면두A권선쌍또는 B 권선쌍이된다. 나머지극성은멀티미터를이용하여확인할방법이없으므로풀-스텝핑실습을이용하여정상적인구동이이루어질때의결선으로부터유추해낼수있을것이다. 필자가실습에사용한스텝모터는권선저항이 7.1Ω 이었으며, 사실이와같은실험적인방법을이용하여권선을구분하였다. 이제유니폴라스텝모터의각신호선을마이크로컨트롤러의 PORTD의 4핀을이용하여 < 그림 4-19> 와같이연결하자. 그림에서모터가정/ 역회전을하기위해서는 RD4, RD5, RD6, RD7 또는이의역순으로동신에단하나의핀만을 "High" 로출력하고나머지는 "Low" 를유지하는시퀀스로 PORTD 의출력을제어하기만하면된다. 이때정상적인회전이이루어지려면포트의출력시퀀스의변화주기(Pulse Per Second) 가모터의스펙에서명시된범위를벗어나지않아야하며, 모터의파손을방지하기위해서는공급전원(Vsupply) 또한모터의정격전압을초과하지않도록주의하여야한다. 참고로대부분의스텝모터는 5V, 12V, 24V의세가지중하나의정격전압을가지고있는경우가대부분이다. < 그림4-19> 1 상통전여자 ( ) 실습회로도 272
146 Chapter4. 스텝모터(StepperMotor) 이제실전으로코드를작성해보도록하자. 다음은 I/O 포트, ADC, 타이머 0 를초기화하는코드이다. 여기에서타이머 0는스텝모터의펄스출력주기(PPS) 를제어하기위한기준타이머로써 1ms 로설정되었다. //********************************************************************// //*** I/O PORT 입출력설정 ***// //*** RA4 : 입력(SW2) ***// //*** RD4~7 : 출력( 스텝모터) ***// //********************************************************************// void Config_PORT_IO(void) TRISA4 = 1; // RA4 : 입력설정 } PORTD = 0x00; // RD0~RD7 : 초기값 "Low" 설정 TRISD = 0x00; // RD0~RD7 : 출력설정 //*============================================================*// //*== 2. ADC 모듈설정 ==*// //*== --> AN0, : 아날로그입력 ==*// //*============================================================*// void Config_ADC(void) TRISA0 = 1; // RA0 : 입력설정 ANS0 = 1; // AN0 아날로그입력으로사용 (VR) ADCS1 = 1; ADCS0 = 0; // AD Clock = Fosc/32 = 20M/32 = 0.625Mhz // Tad = 1.6us CHS3 = 0;CHS2 = 0;CHS1 = 0;CHS0 = 0; // ADC Channel Select : AN0 핀으로설정 } VCFG0=0; // ADC 의+ Ref 전압: AVDD 핀의전압으로설정(Vdd) VCFG1 = 0; // ADC의 - Ref 전압 : AVSS 핀의전압으로설정(Vss) ADON = 1; // ADC 모듈 : ON ADFM = 0; // ADC 결과값 : Left Justify (ADRESH/L:xxxxxxxx xx------) GODONE = 0; // ADC Converstion : STOP 273
147 Motor Control //********************************************************************// //*** TIMER0 및인터럽트설정 ***// //*** 스텝모터의속도제어용(RPM --> PPS 환산 : 인터럽트) ***// //*** Timer0 인터럽트발생주기1ms 설정(TMR0=?) ***// //********************************************************************// void Config_TIMER0(void) T0CS = 0; // Internal Instruction Cycle Clock 이용 // --> Timer0 기준 Clock : Fcy(=Fosc/4) PSA = 0; // Prescaler를 Timer0 모듈에이용 PS2 = 1; // Prescaler --> 1:64 PS1 = 0; // TMR0는 64*(1/Fcy)= 64*Tcy 마다 1 씩증가한다. PS0 = 1; // Fosc=20Mhz 일경우, Fcy = 5Mhz, // ---> 64*Tcy = 64*0.2us = 12.8 [us] TMR0 = 178; // ( ) * 12.8[us] = 1000[us] = 1[ms] } // Datasheet <Fig.14-7> Interrupt Logic 참조 T0IF = 0; // Timer0 Interrupt Flag : Clear 설정 T0IE = 1; // Timer0 Interrupt : Disable 설정 GIE = 1; // Global Interrupt : Enable 설정 //( 보충설명) TMR0 레지스터가 Overflow 발생시 T0IF 가 "Set(1)" 되며, // GIE=1 & T0IE=1 조건에서인터럽트서비스루틴으로분기한다 다음은가장중요한풀- 스텝구동제어를위한코드이다. 먼저가장중요한부분은스텝모터를구동하기위한펄스출력의시퀀스를찾아내는것이다. 필자가사용한스텝모터는 < 그림 4-19> 와같이구동회로를구성하였을경우다음과같은펄스출력의시퀀스를갖고있음을직접실험을통해서찾아내었다. const unsigned char full_step_1ph_ccw[4] = 0x10, 0x20, 0x40, 0x80 }; // 정회전 const unsigned char full_step_1ph_cw[4] = 0x80, 0x40, 0x20, 0x10 }; // 역회전 위의펄스를일정한시간마다출력해주기위해아래와같이펄스출력시퀀스의순서를변경해주는코드를작성한다. 274
148 Chapter4. 스텝모터(StepperMotor) //********************************************************************// //*** Full Stepping Function ***// //*** PPS 제어및 Step 펄스출력/ Timer0 인터럽트에서호출됨 ***// //********************************************************************// void fcn_full_step(void) if(timer_1ms < (1000/target_pps)) return; timer_1ms = 0; // 방향전환에따른 Pulse 증/ 감보상 if(flag_motor_forward!= flag_dir_prev) if(flag_motor_forward == CW) pulse_cnt++; } else pulse_cnt--; } } // 시계방향회전 if(flag_motor_forward == CW) if(pulse_cnt >= FULL_STEP_MAX) pulse_cnt=0; // Full Stepping : 4 PORTD = full_step_1ph_cw[pulse_cnt]; pulse_cnt++; } // 반시계방향회전 else if(pulse_cnt < 0) pulse_cnt = FULL_STEP_MAX-1; // Full Stepping : 4 } PORTD = full_step_1ph_cw[pulse_cnt]; pulse_cnt--; } flag_dir_prev = flag_motor_forward; // 회전방향저장 275
149 Motor Control 위의펄스시퀀스제어함수는타이머 0 인터럽트서비스루틴에의해서호출이되어진다. 따라서모터제어루틴은다음과같이타이머 0 인터럽트를사용(Enable) 또는미사용(Disable) 으로설정함으로써스텝모터의제어여부를결정할수있다. //********************************************************************// //*** Step Motor Control Disable ***// //*** 모든 Pulse 출력을 Off로하고 Timer0 동작중지 ***// //********************************************************************// void fcn_motor_off(void) PORTD = 0; // Pulse Ouput : cleared T0IE = 0; } //********************************************************************// //*** Step Motor Control Enable ***// //*** Timer0 인터럽트 Enable ***// //********************************************************************// void fcn_motor_on(void) T0IE = 1; // Timer0 인터럽트 : Enabled } 이제가변저항의위치에따른스텝모터가회전할방향및속도를결정하기위한 A/D 컨버젼을위한코드에대해살펴보자.10비트 A/D컨버전에서그중간값은 512가될것이다. 따라서중간값인 512 를기준으로이보다작을때는시계방향(CW) 으로회전하고, 이보다클경우에는반시계방향(CCW) 으로회전을시키고자하며, 중심값으로부터의변위를스텝모터의속도지령치로사용하고자하였다. 지금까지작성한사용자함수를이용하여다음과같이메인알고리즘을구성하면된다. 276
150 Chapter4. 스텝모터(StepperMotor) //*************************************************************// //*** Main Routine : main(void) ***// //*************************************************************// void main(void) Config_PORT_IO(); Config_ADC(); Config_TIMER0(); while(1) fcn_ad_conv(); } if(target_pps) else fcn_motor_on(); fcn_motor_off(); } < 그림 4-20> 은 250[pps] 의속도로정회전및역회전으로스텝모터를구동한경우의펄스출력이다. 그림에서보면하나의펄스의폭은 4ms(=1/250pps) 가되며, 펄스의출력시퀀스가서로반대가됨을확인할수있다. 또한, 전체 4개의각구간에대해서항상단한개의펄스만온(ON) 으로출력이되고나머지3 개의펄스는오프(OFF) 로출력되므로전기자의한상만통전이된다는것도확인할수있을것이다. < 그림 4-21> 에서일그러져보이는파형은모터의회전에의해발생하는역기전력전압에해당한다. a 정회전 (CW) b 역회전 (CCW) < 그림4-20> 1 상통전여자 ( ) 제어펄스파형(250pps) 277
151 Motor Control a 정회전 (CW) b 역회전 (CCW) < 그림4-21> 1 상통전여자 ( ) 제어모터전압파형(250pps) 풀스테핑(Full Stepping) - 2 상( 相, Phase) 통전여자 ( ) 이해 2 상통전방식은 < 그림 4-22> 에서보는바와같이각각의스텝구간에서동시에 2 개의권선에전압이인가되기때문에결과적으로 2상의권선에모두전류가흐르게된다. 따라서 2상통전방식은 1상에만전류가흐르던방식인 1상통전방식에비해산술적으로약 2 배의토크출력이가능해진다. 각스텝당회전자의회전각도즉, 스텝각도는 90 이며, 4스텝을 1주기로회전자는 1 회회전하게된다. 따라서 2상통전방식을이용할경우에도각스텝에따른회전은 1 상통전방식과동일하다. a 1 상통전방식의전압시퀀스 b 스텝각도(Angle) < 그림4-22> 2 상통전여자 ( ) 전압시퀀스및스텝각도 그러면, 이제 2 상통전제어의원리에대해살펴보자. 278
152 Chapter4. 스텝모터(StepperMotor) a 회전자 45 위치 (A A', B' B ) b 회전자 135 위치(A A', B B') c 회전자 225 위치 (B B', A' A) b 회전자 315 위치(A' A, B' B) < 그림4-23> 2 상( 相 ) 통전회로구동원리 바이폴라스텝모터의 2 상통전방식은위의 < 그림 4-23> 에서보는바와같이모터의 리드선 4개를모터드라이버 IC의출력단에각각연결한후그입력단에마이크로컨트 롤러의출력포트(RD4 RD7) 를연결하여구성한다. 결국, 이전에소개한 1상통전의경 우와동일하다는얘기이다. 차이점은마이크로컨트롤러의출력포트로 < 그림 4-23> 과같 이동시에 2개의상에각각전류가흐를수있도록일정시퀀스로출력신호를출력한다 는점이다. 따라서일정한시간간격으로펄스를출력해주면스텝모터의회전자는그림에 서와같이시계방향으로회전하는경우를예로들었으며, 반시계방향으로회전시키고자 할경우출력펄스의시퀀스를역순으로변경해주면된다. 가장주목해야할점은고정자의 2상이동시에통전되기때문에고정자의자기장에의 한 회전자의정렬위치가 1상통전의경우와는달리항상대각선으로정렬된다는점이 다. 이러한특성은이어지는세번째실습에소개될하프- 스텝핑(1-2 상통전방식) 의 기본원리가된다. 279
153 Motor Control a 소프트웨어개략도 b 타이머인터럽트서비스루틴순서도 < 그림4-24> 2 상( 相 ) 통전방식제어알고리즘 풀스테핑(Full Stepping) - 2 상( 相, Phase) 통전여자 ( ) 방식실습 그러면이제실습보드에서 2 상통전방식을직접구현해보도록하자. 회로의구성은앞의 1 상통전방식과동일하게구성을한다. 또한프로그램소스코드도동일하게사용할수있으며다만스텝모터를구동하기위한펄스출력의시퀀스만아래와같이변경하여주면된다. const unsigned char full_step_2ph_ccw[4] = 0x30, 0x60, 0xC0, 0x90 }; const unsigned char full_step_2ph_cw[4] = 0x90, 0xC0, 0x60, 0x30 }; 끝으로펄스출력을제어하는함수에서위의포트로출력하면된다. 2상통전방식을위한배열을이용하여 280
154 Chapter4. 스텝모터(StepperMotor) void fcn_full_step(void) // 방향전환에따른 Pulse 증/ 감보상 if(flag_motor_forward!= flag_dir_prev) if(flag_motor_forward == CW) pulse_cnt++; } else pulse_cnt--; } } // 시계방향회전 if(flag_motor_forward == CW) if(pulse_cnt >= FULL_STEP_MAX) pulse_cnt=0; // Full Stepping : 4 PORTD = full_step_2ph_cw[pulse_cnt]; pulse_cnt++; } // 반시계방향회전 else if(pulse_cnt < 0) pulse_cnt = FULL_STEP_MAX-1; // Full Stepping : 4 } PORTD = full_step_2ph_cw[pulse_cnt]; pulse_cnt--; } flag_dir_prev = flag_motor_forward; // 회전방향저장 281
155 Motor Control < 그림 4-25> 는 250[pps] 의속도로정회전및역회전으로스텝모터를구동한경우의펄스출력이다. 그림에서보면두스텝에해당하는펄스의폭은 8ms(=2/250pps) 가되며, 펄스의출력시퀀스가서로반대가됨을확인할수있다. 또한, 전체 4개의각구간에대해서항상두개의펄스출력이 ON 상태이고나머지두개의펄스출력은 OFF 상태이므로전기자의두상이동시에통전이된다는것도짐작할수있을것이다. 따라서 1 상통전방식에비해산술적으로약 2 배의모터토크를얻을수있게될것이다. a 정회전 (CW) b 역회전 (CCW) < 그림4-25> 2 상통전여자 ( ) 제어펄스파형(250pps) a 정회전 (CW) b 역회전 (CCW) < 그림4-26> 2 상통전여자 ( ) 제어모터전압파형(250pps) 282
156 Chapter4. 스텝모터(StepperMotor) 하프- 스텝핑 (Half Stepping) 하프- 스테핑(Half Stepping) : 1-2 상( 相, Phase) 통전( 여자) 이해 스텝핑모터의하프스테핑구동방식은회전자가고정자의특정상(Phase) 에서다음상으로이동시풀-스텝각도의 1/2(Half) 각도만회전( 이동) 하도록하는스텝핑기술을말하며 < 그림 4-27> 의경우와같이회전자는 45 회전하게된다. 따라서하프스테핑구동방식은스텝각도가풀스테핑구동방식에비해 1/2 로감소하기때문에스텝해상도(Step Resolution) 가 2 배좋아진다고말할수있다. 즉, 회전각도의정밀제어에유리하고회전자의회전특성이상대적으로유연해질수있다. 하프스테핑은 < 그림 4-27> 과같이 1상및 2상여자방식의혼합형으로구성된구동펄스의특성때문에 1-2 상통전( 여자) 방식이라부르기도한다. a 1 상통전방식의전압시퀀스 b 스텝각도(Angle) < 그림4-27> 1-2 상통전여자 ( ) 전압시퀀스및스텝각도 그러면, 이제하프-스텝핑을위한 1-2 상통전제어의원리에대해살펴보자. 283
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(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 informationISP 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
CCS v4 사용자안내서 CCSv4 사용자용예제따라하기안내 0. CCS v4.x 사용자 - 준비사항 예제에사용된 CCS 버전은 V4..3 버전이며, CCS 버전에따라메뉴화면이조금다를수있습니다. 예제실습전준비하기 처음시작하기예제모음집 CD 를 PC 의 CD-ROM 드라이브에삽입합니다. 아래안내에따라, 예제소스와헤더파일들을 PC 에설치합니다. CD 드라이브 \SW\TIDCS\TIDCS_DSP80x.exe
More information<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슬라이드 1
마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***
More information슬라이드 1
Delino EVM 용처음시작하기 - 프로젝트만들기 (85) Delfino EVM 처음시작하기앞서 이예제는타겟보드와개발홖경이반드시갖추어져있어야실습이가능합니다. 타겟보드 : Delfino EVM + TMS0F85 초소형모듈 개발소프트웨어 : Code Composer Studio 4 ( 이자료에서사용된버전은 v4..입니다. ) 하드웨어장비 : TI 정식 JTAG
More informationMicrosoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx
To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 Eclipse (IDE) JDK Android SDK with ADT IDE: Integrated Development Environment JDK: Java Development Kit (Java SDK) ADT: Android Development Tools 2 JDK 설치 Eclipse
More informationMicrosoft Word - ntasFrameBuilderInstallGuide2.5.doc
NTAS and FRAME BUILDER Install Guide NTAS and FRAME BUILDER Version 2.5 Copyright 2003 Ari System, Inc. All Rights reserved. NTAS and FRAME BUILDER are trademarks or registered trademarks of Ari System,
More informationMicrosoft 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 informationMicrosoft PowerPoint - chap06-2pointer.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.
More informationMicrosoft 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 informationMicrosoft 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 informationiii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.
Eclipse 개발환경에서 WindowBuilder 를이용한 Java 프로그램개발 이예는 Java 프로그램의기초를이해하고있는사람을대상으로 Embedded Microcomputer 를이용한제어시스템을 PC 에서 Serial 통신으로제어 (Graphical User Interface (GUI) 환경에서 ) 하는프로그램개발예를설명한다. WindowBuilder:
More information[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi
2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,
More information슬라이드 1
-Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역
More information2. Step 2 : Select Device Step 2 에서는 Device 드롭 - 다운리스트에서사용자가자신의프로젝트에서사용할디바이스를선택할수있다. 선택가능한디바이스의범위를줄이려면디바이스의제품군 (Family) 를먼저선택하는편이좋다. < 그림 > 프로젝트마법사 Se
MPLAB X IDE User Guide 새프로젝트만들기 MPLAB X IDE 는프로젝트를기반으로모든동작이이루어진다. 따라서 MPLAB X IDE 의사용자는프로젝트를생성및설정할수있어야한다. 새프로젝트는아래의방법들중에서한가지를선택함으로해서만들어진다. Start Page 의 Learn and Discover tab 에서생성하는방법 : Dive In Create
More informationMicrosoft Word - Armjtag_문서1.doc
ARM JTAG (wiggler 호환 ) 사용방법 ( IAR EWARM 에서 ARM-JTAG 로 Debugging 하기 ) Test Board : AT91SAM7S256 IAR EWARM : Kickstart for ARM ARM-JTAG : ver 1.0 ( 씨링크테크 ) 1. IAR EWARM (Kickstart for ARM) 설치 2. Macraigor
More information<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 informationPowerPoint 프레젠테이션
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 informationMotor Control Solution
Motor Control Solution 마이크로칩에서는 Stepper, Brushed-DC, AC Induction, Switched Reluctance Brushless-DC 등모터종류별특성및동작방식에맞는 MCU가준비되어있어, User가 Motor를이용한 Application을개발하려할때에가장적절한 Solution을제시해줄수있다. 이중 FFT나 PID연산등정밀한모터제어를실행하기위해꼭해주어야하는빠른
More information<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실험 5
실험. OP Amp 의기초회로 Inverting Amplifier OP amp 를이용한아래와같은 inverting amplifier 회로를고려해본다. ( 그림 ) Inverting amplifier 위의회로에서 OP amp의 입력단자는 + 입력단자와동일한그라운드전압, 즉 0V를유지한다. 또한 OP amp 입력단자로흘러들어가는전류는 0 이므로, 저항에흐르는전류는다음과같다.
More information<4D F736F F D D31312D30312D53572D30312DBBE7BFEBC0DABCB3B8EDBCAD5FBFDCBACEB9E8C6F7BFEB2E646F63>
SAM4S Printer Driver Installer 달리명시하지않은한, 인쇄또는복사된문서는통제하지않는문서임 목 차 1. 1. WINDOWS DRIVER INSTALLER 설치 설치...... 2 2. 프린터추가...... 5 3. 프린터제거...... 19 4. 프린터추가 / 제거선택...... 21 5. 프로그램추가 / 제거...... 21 SHC- 11-01-
More informationJDK이클립스
JDK 와이클립스설치 A. JDK 다운로드, 설치및환경설정 지금부터 JDK를다운로드받아설치하고 JDK를윈도우에서활용할수있도록환경을설정하는전과정을소개한다. 다운로드 www.oracle.com 사이트에접속하여 Downloads 메뉴를선택한후 [ 그림 1] 과같이 "Java for Developers" 를클릭한다. [ 그림 1] www.oracle.com 사이트
More information<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 informationMicrosoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx
To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 개발환경구조및설치순서 JDK 설치 Eclipse 설치 안드로이드 SDK 설치 ADT(Androd Development Tools) 설치 AVD(Android Virtual Device) 생성 Hello Android! 2 Eclipse (IDE) JDK Android SDK with
More informationMicrosoft 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목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.
소프트웨어매뉴얼 윈도우드라이버 Rev. 3.03 SLP-TX220 / TX223 SLP-TX420 / TX423 SLP-TX400 / TX403 SLP-DX220 / DX223 SLP-DX420 / DX423 SLP-DL410 / DL413 SLP-T400 / T403 SLP-T400R / T403R SLP-D220 / D223 SLP-D420 / D423
More informationInstall stm32cubemx and st-link utility
STM32CubeMX and ST-LINK Utility for STM32 Development 본문서는 ST Microelectronics 의 ARM Cortex-M 시리즈 Microcontroller 개발을위해제공되는 STM32CubeMX 와 STM32 ST-LINK Utility 프로그램의설치과정을설명합니다. 본문서는 Microsoft Windows 7
More information<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D>
VHDL 프로그래밍 D. 논리합성및 Xilinx ISE 툴사용법 학습목표 Xilinx ISE Tool 을이용하여 Xilinx 사에서지원하는해당 FPGA Board 에맞는논리합성과정을숙지 논리합성이가능한코드와그렇지않은코드를구분 Xilinx Block Memory Generator를이용한 RAM/ ROM 생성하는과정을숙지 2/31 Content Xilinx ISE
More informationStuduino소프트웨어 설치
Studuino 프로그래밍환경 Studuino 소프트웨어설치 본자료는 Studuino 프로그래밍환경설치안내서입니다. Studuino 프로그래밍 환경의갱신에따라추가 / 수정될수있습니다. 목차 1. 소개... 1 2. Windows... 2 2.1. 프로그래밍환경설치... 2 2.1.1. 웹설치버전설치방법... 2 2.2. Studuino 프로그래밍환경실행...
More informationMicrosoft 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<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<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>
연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.
More information목차 다운로드및설치 1. 다운로드 2. 설치 3. MPLAB TM X IDE 데스크탑 기본사용법 1. 새프로젝트만들기 2. 프로젝트속성 (Properties) 조정 3. 디버거, 프로그램, 프로그램언어옵션설정 4. 프로그램언어위치설정 5. 기타툴옵션설정 6. 새파일만들
MPLAB TM X IDE 한글사용설명서 본문서에서사용되는이미지는 MPLAB X IDE 의버전에따라다소상이할수 있습니다. 목차 다운로드및설치 1. 다운로드 2. 설치 3. MPLAB TM X IDE 데스크탑 기본사용법 1. 새프로젝트만들기 2. 프로젝트속성 (Properties) 조정 3. 디버거, 프로그램, 프로그램언어옵션설정 4. 프로그램언어위치설정 5.
More information구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을
(structures) 구조체정의 구조체선언및초기화 구조체배열 구조체포인터 구조체배열과포인터 구조체와함수 중첩된구조체 구조체동적할당 공용체 (union) 1 구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined
More informationMicrosoft Word doc
2. 디바이스드라이버 [ DIO ] 2.1. 개요 타겟보드의데이터버스를이용하여 LED 및스위치동작을제어하는방법을설명하겠다. 2.2. 회로도 2.3. 준비조건 ARM 용크로스컴파일러가설치되어있어야한다. 하드웨어적인점검을하여정상적인동작을한다고가정한다. NFS(Network File System) 를사용할경우에는 NFS가마운트되어있어야한다. 여기서는소스전문을포함하지않았다.
More informationC. KHU-EE xmega Board 에서는 Button 을 2 개만사용하기때문에 GPIO_PUSH_BUTTON_2 과 GPIO_PUSH_BUTTON_3 define 을 Comment 처리 한다. D. AT45DBX 도사용하지않기때문에 Comment 처리한다. E.
ASF(Atmel Software Framework) 환경을이용한프로그램개발 1. New Project Template 만들기 A. STK600 Board Template를이용한 Project 만들기 i. New Project -> Installed(C/C++) -> GCC C ASF Board Project를선택하고, 1. Name: 창에 Project Name(
More informationDE1-SoC Board
실습 1 개발환경 DE1-SoC Board Design Tools - Installation Download & Install Quartus Prime Lite Edition http://www.altera.com/ Quartus Prime (includes Nios II EDS) Nios II Embedded Design Suite (EDS) is automatically
More information슬라이드 제목 없음
ETOS-DPS-X Guide AC&T SYSTEM 1 ETOS-DPS-X 개요 ETOS-DPS-X Field Bus Network 중 Profibus-DP Network 에연결되는장비. ProfiBus-DP Network 시스템에 DP 통신을지원하지않는현장장비에대한통신서버기능구현. Profibus-DP Slave 동작하기때문에반드시 DP-Master 모듈이있는시스템에서적용가능.
More informationKEY 디바이스 드라이버
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 informationMicrosoft 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(b) 미분기 (c) 적분기 그림 6.1. 연산증폭기연산응용회로
Lab. 1. I-V Characteristics of a Diode Lab. 6. 연산증폭기가산기, 미분기, 적분기회로 1. 실험목표 연산증폭기를이용한가산기, 미분기및적분기회로를구성, 측정및 평가해서연산증폭기연산응용회로를이해 2. 실험회로 A. 연산증폭기연산응용회로 (a) 가산기 (b) 미분기 (c) 적분기 그림 6.1. 연산증폭기연산응용회로 3. 실험장비및부품리스트
More information1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과
1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과 학습내용 1. Java Development Kit(JDK) 2. Java API 3. 자바프로그래밍개발도구 (Eclipse) 4. 자바프로그래밍기초 2 자바를사용하려면무엇이필요한가? 자바프로그래밍개발도구 JDK (Java Development Kit) 다운로드위치 : http://www.oracle.com/technetwork/java/javas
More informationMAX+plus II Getting Started - 무작정따라하기
무작정 따라하기 2001 10 4 / Version 20-2 0 MAX+plus II Digital, Schematic Capture MAX+plus II, IC, CPLD FPGA (Logic) ALTERA PLD FLEX10K Series EPF10K10QC208-4 MAX+plus II Project, Schematic, Design Compilation,
More informationMicrosoft 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< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>
Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법
More informationK&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 informationPowerPoint 프레젠테이션
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<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 informationPowerPoint 프레젠테이션
Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi
More informationMango-IMX6Q mfgtool을 이용한 이미지 Write하기
Mango-IMX6Q mfgtool 을 이용한이미지 Write 하기 http://www.mangoboard.com/ http://cafe.naver.com/embeddedcrazyboys Crazy Embedded Laboratory www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 1 Document
More informationMicrosoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]
Chapter 03 변수와자료형 2009 한국항공대학교항공우주기계공학부 (http://mercury.kau.ac.kr/sjkwon) 1 변수와자료유형 변수 프로그램에서자료값을임시로기억할수있는저장공간을변수 (variables) 변수 (Variables) 는컴퓨터의메모리인 RAM(Random Access Memory) 에저장 물건을담는박스라고생각한다면박스의크기에따라담을물건이제한됨
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include
More information4S 1차년도 평가 발표자료
모바일 S/W 프로그래밍 안드로이드개발환경설치 2012.09.05. 오병우 모바일공학과 JDK (Java Development Kit) SE (Standard Edition) 설치순서 Eclipse ADT (Android Development Tool) Plug-in Android SDK (Software Development Kit) SDK Components
More informationPowerPoint 프레젠테이션
Chapter 15 고급프로그램을 만들기위한 C... 1. main( ) 함수의숨겨진이야기 2. 헤더파일 3. 전처리문과예약어 1. main( ) 함수의숨겨진이야기 main( ) 함수의매개변수 [ 기본 14-1] main( ) 함수에매개변수를사용한예 1 01 #include 02 03 int main(int argc, char* argv[])
More informationMicrosoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt
변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short
More informationChapter #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윤성우의 열혈 TCP/IP 소켓 프로그래밍
C 프로그래밍프로젝트 Chap 22. 구조체와사용자정의자료형 1 2013.10.10. 오병우 컴퓨터공학과 구조체의정의 (Structure) 구조체 하나이상의기본자료형을기반으로사용자정의자료형 (User Defined Data Type) 을만들수있는문법요소 배열 vs. 구조체 배열 : 한가지자료형의집합 구조체 : 여러가지자료형의집합 사용자정의자료형 struct
More informationMicrosoft Word - ICD2PLUS_2003.doc
제품요약 USB ICD2 PLUS 는다음과같은특성을가지고있습니다. 1. In-Circuit Debugger (ICD) 및 In-Circuit Serial Programmer (ICSP) 기능 2. USB (Fullspeed 2Mbits/s) 를통한 PC Interface 3. MPLAB IDE GUI 지원 4. PC 를통한펌웨어업그레이드 5. 실시간또는단계별코드실행기능
More information_USB JTAG Ver1.0 User's Manual.hwp
Table of Contents 1. Size... 1 2. 주요구성품... 2 3. Target Interface Connectors... 3 4. Install... 4 5. 동작설명... 7 1. Size 1.1 W H : 118mm 75mm 1.2 D : 25.2mm http://cafe.naver.com/seogarae 1 2. 주요구성품 2.1 USB
More informationMicrosoft PowerPoint - chap10-함수의활용.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 informationC# Programming Guide - Types
C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든
More informationMicrosoft 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 informationPoison 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 informationPowerPoint Presentation
신호조절 (Signal Conditioning) 메카트로닉스 시스템의 구성 ECU 인터페이스 회로 (시그널 컨디셔닝) 마이컴 Model of 기계 시스템 인터페이스 회로 (드라이빙 회로) 센서 액츄에이터 (구동기) 기계 시스템 PN 접합 다이오드 [1] 다이오드의 DC 해석과 등가모델 [1] 다이오드의 DC 해석과 등가모델 [1] 다이오드 응용회로 [1] 다이오드
More information강의10
Computer Programming gdb and awk 12 th Lecture 김현철컴퓨터공학부서울대학교 순서 C Compiler and Linker 보충 Static vs Shared Libraries ( 계속 ) gdb awk Q&A Shared vs Static Libraries ( 계속 ) Advantage of Using Libraries Reduced
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음
More informationMicrosoft Word - codevision사용법_pdf버전.docx
CodevisionAVR 설치와 기본사용법 민경학 ( hak@anycalluser.net) 인하대학교 IT 공과대학전자공학과멀티미디어연구실 ( 하이테크센터 916 호 ) 2008.9.7.001 들어가며 AVR 에서쓸수있는컴파일러종류에는 CodeVisionAVR, AVR Edit, IAR, AVRStudio 등이있습니다. CodeVisionAVR 과 IAR 은상용이고
More informationRev V0. Date 0 /0/ PICF 확장형개발보드매뉴얼. 제품소개및특징. 제품소개 < 그림.> PICF 확장형개발보드사진 Microchip사의 비트프로세서인 PICF MCU를이용하여학습및개발을할수있는 PIC 확장형개발보드입니다. 초보자를세심하게배려하기위하여모든부
Rev V0. Date 0 /0/ PICF 확장형개발보드매뉴얼 PICF 확장형개발보드매뉴얼 (Model: LK-PICF-DB) 이경남 L K 임베디드 0 LK EMBEDDED LK-PICF-DB Manual version.0 페이지 Rev V0. Date 0 /0/ PICF 확장형개발보드매뉴얼. 제품소개및특징. 제품소개 < 그림.> PICF 확장형개발보드사진
More information<C7A5C1A6C1F62E687770>
마이크로칩마이크로컨트롤러응용모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤한국마이크로칩기술지원부
More informationRealDSP UT 프로그램 메뉴얼
Motorola Programmer ( 모델명 : MDProg16) 사용설명서 UUU 리얼시스 (RealSYS) Web: www.realsys.co.kr Tel: 031-420-4326 Fax: 031-420-4329-1 - 1. Motorola Programmer 프로그램특징 A. JTAG & OnCE 기능을이용한 Motorola 의내부플래시메모리 Writing
More informationRev V0. Date 0 /0/ PICFA 확장형개발보드매뉴얼. 제품소개및특징. 제품소개 < 그림.> PICFA 확장형개발보드사진 Microchip사의 비트프로세서인 PICFA MCU를이용하여학습및개발을할수있는 PIC 확장형개발보드입니다. 초보자를세심하게배려하기위하여
Rev V0. Date 0 /0/ PICFA 확장형개발보드매뉴얼 PICFA 확장형개발보드매뉴얼 (Model: LK-PICF-DB) 이경남 L K 임베디드 0 LK EMBEDDED LK-PICF-DB Manual version.0 페이지 Rev V0. Date 0 /0/ PICFA 확장형개발보드매뉴얼. 제품소개및특징. 제품소개 < 그림.> PICFA 확장형개발보드사진
More informationtut_modelsim(student).hwp
ModelSim 사용법 1. ModelSim-Altera 를이용한 Function/RTL 시뮬레이션 1.1. 테스트벤치를사용하지않는명령어기반시뮬레이션 1.1.1. 시뮬레이션을위한하드웨어 A B S C 그림 1. 반가산기 1.1.2. 작업디렉토리 - File - Change Directory 를클릭하여작업디렉토리지정. 1.1.3. 소스파일작성 - 모델심편집기나기타편집기가능
More information<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>
리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1
More information기존에 Windchill Program 이 설치된 Home Directory 를 선택해준다. 프로그램설치후설치내역을확인해보면 Adobe Acrobat 6.0 Support 내역을확인할수 있다.
PDMLink 에등록된 Office 문서들의 PDF 문서변환기능및 Viewer 기능을알아보자 PDM Link에서지원하는 [Product View Document Support] 기능은 Windows-Base 기반의 Microsoft Office 문서들을 PDMLink용 Viewer인 Product View를통한읽기가가능한 PDF Format 으로변환하는기능이다.
More informationATmega128
ATmega128 외부인터럽트실습 Prof. Jae Young Choi ( 최재영교수 ) (2015 Spring) Prof. Jae Young Choi 외부인터럽트실험 외부인터럽트를사용하기위해관렦레지스터를설정 일반적으로 I/O 포트에대한설정이끝난후에외부인터럽트나타이머 / 카운터설정 PE4~7 번까지 4 개의외부인터럽트 INT4~INT7 까지사용 외부인터럽트사용법요약
More informationuntitled
시스템소프트웨어 : 운영체제, 컴파일러, 어셈블러, 링커, 로더, 프로그래밍도구등 소프트웨어 응용소프트웨어 : 워드프로세서, 스프레드쉬트, 그래픽프로그램, 미디어재생기등 1 n ( x + x +... + ) 1 2 x n 00001111 10111111 01000101 11111000 00001111 10111111 01001101 11111000
More informationBY-FDP-4-70.hwp
RS-232, RS485 FND Display Module BY-FDP-4-70-XX (Rev 1.0) - 1 - 1. 개요. 본 Display Module은 RS-232, RS-485 겸용입니다. Power : DC24V, DC12V( 주문사양). Max Current : 0.6A 숫자크기 : 58mm(FND Size : 70x47mm 4 개) RS-232,
More information11장 포인터
누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리
More informationPRO1_09E [읽기 전용]
Siemens AG 1999 All rights reserved File: PRO1_09E1 Information and - ( ) 2 3 4 5 Monitor/Modify Variables" 6 7 8 9 10 11 CPU 12 Stop 13 (Forcing) 14 (1) 15 (2) 16 : 17 : Stop 18 : 19 : (Forcing) 20 :
More informationBMP 파일 처리
BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)
More information01장
뇌를자극하는 Windows Server 2012 R2 부록 NAS4Free 의설치와환경설정 네트워크상에서저장공간이제공되는 NAS(Network Attached Storage) 환경을 VMware에서구성해야한다. 이책에서는그중 Unix 계열의운영체제이며무료로사용할수있는 NAS4Free 운영체제를설치하고사용할것이다. 결국지금설치하는 NAS4Free는쿼럼디스크와클러스터디스크를제공하는것이목적이다.
More informationMicrosoft 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(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슬라이드 1
Pairwise Tool & Pairwise Test NuSRS 200511305 김성규 200511306 김성훈 200614164 김효석 200611124 유성배 200518036 곡진화 2 PICT Pairwise Tool - PICT Microsoft 의 Command-line 기반의 Free Software www.pairwise.org 에서다운로드후설치
More information슬라이드 1
Qt Creator 1. 도구개요 2. 설치및실행 3. 주요기능 4. 활용예제 1. 도구개요 도구명 소개 Qt Creator (http://qt-project.org/wiki/category:tools::qtcreator) 라이선스 LGPL v2.1 GUI 프로그램을쉽게만들수있는 Cross-platform 프레임워크인 Qt 를통해애플리케이션을개발할수있게해주는
More information목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2
제 8 장. 포인터 목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2 포인터의개요 포인터란? 주소를변수로다루기위한주소변수 메모리의기억공간을변수로써사용하는것 포인터변수란데이터변수가저장되는주소의값을 변수로취급하기위한변수 C 3 포인터의개요 포인터변수및초기화 * 변수데이터의데이터형과같은데이터형을포인터 변수의데이터형으로선언 일반변수와포인터변수를구별하기위해
More informationMicrosoft Word - AVRISP mkII 장비 운용.doc
AVRISP mkii 장비운용 기술연구소이진용대리 ( jylee@mamiel.com ) 1. AVRISP mkⅡ 개요 AVRISP mkⅡ 장비운용 1) AVRISP mkⅡ란? 기존의 AVRISP의단점을보충해서 Atmel에서새롭게출시된 ISP 장비이다기존에 AVRISP는전원을 Target System에서공급을받아야했기에사용하기에불편한점이많았지만이번에새롭게출시된
More information을풀면된다. 2. JDK 설치 JDK 는 Sun Developer Network 의 Java( 혹은 에서 Download > JavaSE 에서 JDK 6 Update xx 를선택하면설치파일을
안드로이드설치및첫번째예제 안드로이드설치 안드로이드개발킷은안드로이드개발자사이트 (http://developer.android.com/) 에서다운로드받을수있으며현재 1.5 버전으로윈도우즈, 맥 OS X( 인텔 ), 리눅스플랫폼패키지가링크되어져있다. 안드로이드개발킷을설치하기위해서는다음과같은시스템환경이갖추어져있어야한다. 플랫폼 Windows Mac Linux 지원환경
More informationMicrosoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100
2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack
More informationADP-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임베디드시스템설계강의자료 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윈도우시스템프로그래밍
데이터베이스및설계 MySQL 을위한 MFC 를사용한 ODBC 프로그래밍 2012.05.10. 오병우 컴퓨터공학과금오공과대학교 http://www.apmsetup.com 또는 http://www.mysql.com APM Setup 설치발표자료참조 Department of Computer Engineering 2 DB 에속한테이블보기 show tables; 에러발생
More informationMicrosoft Word - FunctionCall
Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack
More informationMicrosoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers
C Programming 포인터 (Pointers) Seo, Doo-Ok Clickseo.com clickseo@gmail.com 목 차 포인터의이해 다양한포인터 2 포인터의이해 포인터의이해 포인터변수선언및초기화 포인터연산 다양한포인터 3 주소연산자 ( & ) 포인터의이해 (1/4) 변수와배열원소에만적용한다. 산술식이나상수에는주소연산자를사용할수없다. 레지스터변수또한주소연산자를사용할수없다.
More information11장 포인터
Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함
More information아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상
Android 용 Brother Image Viewer 설명서 버전 0 KOR 아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상표입니다. Android는
More information1. 제품소개및특징 1.1 제품소개 < 그림 1.1> AVRISP MK2 USB 개발장비 AVR ISP(In System Programmer)MK2 USB 란 Atmel 사의 AVR 마이크로컨트롤러의내부플래쉬와 EEPROM 에프로그램메모리및데이터를써 (Write, Re
매뉴얼 (P/N: LK-AVRISP mkii USB) 이경남 L K 임베디드 2017 LK EMBEDDED User Guide Version 0.3 페이지 1 1. 제품소개및특징 1.1 제품소개 < 그림 1.1> AVRISP MK2 USB 개발장비 AVR ISP(In System Programmer)MK2 USB 란 Atmel 사의 AVR 마이크로컨트롤러의내부플래쉬와
More information