<C7A5C1A6C1F62E687770>

Similar documents
Motor Control Solution

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

OCW_C언어 기초

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

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

(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)

슬라이드 1

ISP and CodeVisionAVR C Compiler.hwp

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

<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D>

Microsoft Word - PEB08_USER_GUIDE.doc

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

Microsoft PowerPoint - chap04-연산자.pptx

MPLAB C18 C

슬라이드 1

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

untitled

슬라이드 1

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

2. Step 2 : Select Device Step 2 에서는 Device 드롭 - 다운리스트에서사용자가자신의프로젝트에서사용할디바이스를선택할수있다. 선택가능한디바이스의범위를줄이려면디바이스의제품군 (Family) 를먼저선택하는편이좋다. < 그림 > 프로젝트마법사 Se

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - ch07 - 포인터 pm0415

슬라이드 1

목차 다운로드및설치 1. 다운로드 2. 설치 3. MPLAB TM X IDE 데스크탑 기본사용법 1. 새프로젝트만들기 2. 프로젝트속성 (Properties) 조정 3. 디버거, 프로그램, 프로그램언어옵션설정 4. 프로그램언어위치설정 5. 기타툴옵션설정 6. 새파일만들

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

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

OCW_C언어 기초

Install stm32cubemx and st-link utility

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

Microsoft Word - ICD2PLUS_2003.doc

1. 자바프로그램기초 및개발환경 2 장 & 3 장. 자바개발도구 충남대학교 컴퓨터공학과

PowerPoint 프레젠테이션

4S 1차년도 평가 발표자료

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

C# Programming Guide - Types

PowerPoint Presentation

Microsoft Word - Armjtag_문서1.doc

11장 포인터

PowerPoint 프레젠테이션

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

윈도우시스템프로그래밍

11장 포인터

DE1-SoC Board

Microsoft PowerPoint - Chapter_04.pptx

표제지용

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

이도경, 최덕재 Dokyeong Lee, Deokjai Choi 1. 서론

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

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

Windows 8에서 BioStar 1 설치하기

Studuino소프트웨어 설치

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

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

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

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

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

Infinity(∞) Strategy

Microsoft PowerPoint SDK설치.HelloAndroid(1.5h).pptx

<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>

Microsoft Word doc

PowerPoint Template

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

Microsoft PowerPoint - chap-03.pptx

슬라이드 1

Microsoft PowerPoint - es-arduino-lecture-03

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

Microsoft PowerPoint - [2009] 02.pptx

Microsoft Word - windows server 2003 수동설치_non pro support_.doc

JDK이클립스

SQL Developer Connect to TimesTen 유니원아이앤씨 DB 기술지원팀 2010 년 07 월 28 일 문서정보 프로젝트명 SQL Developer Connect to TimesTen 서브시스템명 버전 1.0 문서명 작성일 작성자

윤성우의 열혈 TCP/IP 소켓 프로그래밍

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

슬라이드 1

<4D F736F F D D31312D30312D53572D30312DBBE7BFEBC0DABCB3B8EDBCAD5FBFDCBACEB9E8C6F7BFEB2E646F63>

(SW3704) Gingerbread Source Build & Working Guide

tut_modelsim(student).hwp

C++ Programming

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

untitled

윈도우시스템프로그래밍

BY-FDP-4-70.hwp

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

Microsoft PowerPoint - Lesson2.pptx

Microsoft PowerPoint - chap-02.pptx

Microsoft PowerPoint - e pptx

1. 제품소개및설명 제품특징 그림. 개발장비사진 - AVR FLASH READ/WRITE 가능 - AVR ISP 프로그래밍방식을지원하는 ATmega8, ATmega16, ATmega32, ATmega64, ATmega128, ATmega 등다수의 AVR MC

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

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

<C7A5C1A6C1F62E687770>

PowerPoint Presentation

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

목차 1. 시스템요구사항 암호및힌트설정 ( 윈도우 ) JetFlash Vault 시작하기 ( 윈도우 ) JetFlash Vault 옵션 ( 윈도우 )... 9 JetFlash Vault 설정... 9 JetFlash Vault

Microsoft PowerPoint - Perpect C 02.ppt [호환 모드]

Microsoft PowerPoint - chap05-제어문.pptx

Stepper Motors

Transcription:

마이크로칩마이크로컨트롤러응용모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤모터컨트롤한국마이크로칩기술지원부 (CAE) 서한석 ( ) 徐漢碩최영섭 ( ) 崔永燮

PREFACE PREFACE 연 일신기록을갱신하며유가의고공행진이계속되고있는요즘, 신문과 TV 등의언론매체에서는에너지관련뉴스가주목을끌고있습니다. 이 런이유로산업계에서는고효율기술을절실히필요로하고있으며, 결 과적으로모터제어관련분야가핫이슈로떠오르고있는것이현실입니다. 필자가 모터제어분야에한참매력을느끼고한창공부하던수년전, 시중서점에서임베 디드모터제어관련서적을구하기가쉽지않았습니다. 그후로꽤오랜시간이 흘렀지만최근상황도 크게달라지지않은것같습니다. 이책은임베디드모터제어분야의입문자를대상으로모터에대한기본적인지식이없어도단계별실습을꾸준히따라오면모터제어라는숲을볼수있도록눈높이를맞추는데 1 차적인목표를두었습니다. 이러한상황을고려하여브러시 DC 모터, 스텝퍼모터및브러시리스 DC 모터를그대상으로하였으며마이크로컨트롤러관련내용도모터제어와관련된주변장치로한정하여다루고자하였습니다. 특히 8비트 PIC16F887과 16비트 dspic30f3010을제어용마이크로컨트롤러로선정한이유는본서적을통해독자들에게 8비트및 16비트모두에대한경험과선택을드리기위함이며, 특히마이크로칩 8비트 PIC 마이크로컨트롤러를위한 C 컴파일러로널리알려져있는 HI-TECH PICC 컴파일러를다루고있는서적이국내에출간되지않아서불편해하고있는고객들에게조금이나마도움을드리기위함이었습니다. 본서적에첨부된데모 PCB는 8 비트용메카트로닉스(Mechatronics) 보드와 16 비트용 MCLV 보드를보완하여제작되었으며, 마이크로칩샘플디바이스들(PIC, Analog products) 도함께부록으로첨부하였습니다. PCB 보드상에자세한부품, 핀이름등을빠짐없이실크로처리하였습니다. 손수제작시에는필히지사홈페이지기술서적자료실에서회로도및기타부품리스트등을꼭확인하시기바랍니다. A/S 및서적가격등의문제로완제품으로지원하지못하는것에안타까운마음뿐입니다. 3

PREFACE 마이크로칩은현재약 500여종의 8, 16, 32비트마이크로컨트롤러를출시하고있으며, 모터제어관련분야에많은관심을두고투자를하고있으며그결과업계에서가장다양한모터제어전용제품군을출시하고있습니다. 이에부응하여한국지사에서는모터제어분야의전문엔지니어로구성된팀을운영하고있고, 최근업계에서대두되고있는최신센서리스제어및벡터제어등과같은고급기술에관한임베디드모터제어전문서적을출시할계획에있습니다. 본서적이출간되기까지가장많은지원과아낌없는격려를보내주신한국마이크로칩한병돈사장님께지면을빌려깊은감사의말씀드립니다. 본서적의내용및실습을위해아낌없는조언과도움을주신모터제어팀과, 그리고한국지사의모든임직원에게감사드리며, 서적과함께무상으로제공되는실습보드및마이크로칩제품을무상으로제공해준본사관계자여러분께도감사의말씀드립니다. 끝으로지난 16비트기술서적출간을계기로인연을맺은이후지속적인후원과격려를보내주시는지앤북송민호사장님께도감사의말씀드립니다. 20년전후발주자로시작한마이크로칩의 8비트 PIC 마이크로컨트롤러가업계 1위를달성하기까지보여주었던눈부신성과를머지않은미래에 16비트 PIC 마이크로컨트롤러가달성할수있기를바라며부족하지만본서적이작은보탬이될수있기를바랍니다. 본서적에서부족했던점이나기타문의사항과관련한기술지원은한국마이크로칩홈페이지 (www.microchipkorea.com) 를통해지속적으로지원할계획이며, 실습에사용한소스코드및회로도, 기타보충자료또한지속적으로업데이트할예정이므로독자여러분의따뜻한질책과조언을부탁드립니다. 2008년 5월 9일한국마이크로칩 CAE부, 최영섭올림 서한석 4

CONTENTS CONTENTS Chapter 1 1.1 마이크로칩회사소개 11 1.2 마이크로칩제품군 14 1.2.1 32비트 PIC 마이크로프로세서 15 1.2.2 8비트 PIC 마이크로프로세서 16 1.2.3 16비트 PIC 마이크로프로세서 16 1.2.4 16비트 dspic Digital Signal Controllers(DSC) 16 1.2.5 아날로그및인터페이스제품 18 1.2.6 직렬 EEPROM 20 1.2.7 보안데이터제품 21 1.3 마이크로칩개발툴 21 1.3.1 8/16비트소프트웨어개발툴 21 1.3.1.1 MPLAB C30 C 컴파일러(16 비트용) 21 1.3.1.2 Assembler / Linker / Librarian 21 1.3.1.3 MPLAB SIM Software Simulator 21 1.3.1.4 MPLAB VDI(Visual Device Initializer) 22 1.3.1.5 주변장치드라이버라이브러리 23 1.3.1.6 수학(Math) 라이브러리 23 1.3.1.7 DSP 알고리즘라이브러리 23 1.3.2 8/16비트하드웨어개발툴 24 1.3.2.1 MPLAB ICD2 (In Circuit Debugger / Programmer) 24 1.3.2.2 MPLAB REAL ICE (In Circuit Emulation System) 24 1.3.2.3 MPLAB PM3 (Device Programmer) 25 1.3.2.4 Explorer 16 Development Board 26 1.3.2.5 dspicdem 80 pin Starter Development Board 26 1.3.2.6 dspicdem 1.1 General Purpose Development Board 27 1.3.2.7 모터컨트럴개발시스템 28 1.3.2.8 PICDEM MC LV Motor Control Development Board 29 1.3.2.9 dspicdem SMPS Buck Development Board 30 5

CONTENTS 1.3.2.10 dspicdem.net Connectivity Development Board 30 1.3.2.11 dspicdem 2 Development Board 31 1.3.2.12 dspicdem 28 pin Starter Development Board 32 2 Chapter 마이크로칩개발툴및 C 언어프로그래밍 2.1 MPLAB IDE 통합개발툴셋업하기 34 2.1.1 MPLAB IDE 통합개발툴소개 34 2.1.2 MPLAB IDE 통합개발툴다운로드방법 35 2.1.3 MPLAB IDE 통합개발툴설치하기 36 2.2 MPLAB ICD2 디버거개발장비 42 2.2.1 MPLAB ICD2 인써킷(In-Circuit) 디버거(Debugger) 툴소개 42 2.2.2 MPLAB ICD2 소프트웨어설치및하드웨어연결하기 42 2.2.3 MPLAB ICD2 사용하기 48 2.2.4 MPLAB ICD2 사용환경(Settings) 설정하기 50 2.3 마이크로칩 16비트용 MPLAB C30 C 언어프로그래밍 53 2.3.1 MPLAB C30 컴파일러소개 53 2.3.2 MPLAB C30 컴파일러다운로드방법 54 2.3.3 MPLAB C30 컴파일러설치 55 2.3.4 MPLAB C30 컴파일러기초 57 2.3.4.1 C30 컴파일러변수기초 57 2.3.4.2 C30 컴파일러데이터형 61 2.3.4.3 전처리문 72 2.3.4.4 연산자(Operators) 85 2.3.4.5 제어문(Control Statement) 96 2.3.4.6 함수 105 2.3.4.7 배열(Array) 112 2.3.4.8 포인터(Pointer) 116 2.3.4.9 구조체(Structure) 와공용체(Union) 127 2.3.4.10 나열형(Enumerated) 변수 142 2.3.4.11 C30 컴파일러의속성(Attribute) 143 2.3.4.12 C30 컴파일러의 I/O 포트액세스 150 2.3.4.13 인터럽트함수(Interrupt Service Routine) 154 6

CONTENTS 2.4 PIC 용하이텍(HI-TECH) PICC C언어프로그래밍 160 2.4.1 하이텍(HI-TECH) C 컴파일러소개 160 2.4.2 하이텍(HI_TECT) C 컴파일러설치하기 161 2.4.2.1 하이텍(HI-TECH) PICC-Lite v9.60pl2 컴파일러설치하기 161 2.4.3 하이텍(HI-TECH) PICC 컴파일러시작하기 167 2.4.4 MPLAB IDE 와개발툴을이용한프로그램(Firmware) 개발하기 180 2.4.4.1 MPLAB IDE 시뮬레이터사용하기 180 2.4.4.2 MPLAB ICD2 디버거사용하기 185 2.4.4.3 MPLAB ICD2 디버거를프로그래머로사용하기 190 Chapter 3 DC 모터(Brushed DC Motor) 3.1 DC 모터의개요 194 3.1.1 DC 모터의개요 194 3.1.2 DC 모터의구조및원리 194 3.1.2.1 고정자(Stator) 195 3.1.2.2 회전자(Rotor) 195 3.1.2.3 브러시(Brush) 와정류자(Commutator) 195 3.2 DC 모터의종류 196 3.2.1 영구자석형 DC 모터(Permanent Magnet Brushed DC Motor) 196 3.2.2 분권형 DC 모터 (Shunt-Wound Brushed DC Motor) 197 3.2.3 직권형 DC 모터 (Series-Wound Brushed DC Motor) 197 3.2.4 복권형 DC 모터 (Compound-Wound Brushed DC Motor) 198 3.2.5 DC 모터의종류별속도 vs 토크특성 198 3.3 DC 모터의구동회로 199 3.3.1 초퍼구동회로 (Chopper Drive Circuit) 199 3.3.2 하프- 브리지구동회로 (Half Bridge Drive Circuit) 201 3.3.2.1 Half Bridge 구동회로 ( 정회전구동시) 201 3.3.2.2 Half Bridge 구동회로 ( 제동시, Braking) 201 3.3.2.3 Half Bridge 구동회로 ( 암- 쇼트, Arm Short) 203 3.3.3 풀- 브리지구동회로 (Full Bridge Drive Circuit) 204 3.3.3.1 Full Bridge 구동회로 ( 정회전구동시, Forward Driving) 204 3.3.3.2 Full Bridge 구동회로 ( 역회전구동시, Reverse Driving) 205 3.3.3.3 Full Bridge 구동회로 ( 제동시, Braking) 205 7

CONTENTS 3.3.3.4 Full Bridge 구동회로 ( 암- 쇼트, Arm Short) 206 3.4 DC 모터제어 207 3.4.1 DC 모터 On/Off 제어실습 208 3.4.2 DC 모터 PWM 속도제어 (No Feedback) 213 3.4.3 DC 모터 PWM 속도제어 (Optical Encoder Feedback) 224 3.4.4 DC 모터 PWM 속도제어 ( 역기전력피드백) 233 3.4.5 DC 모터 PWM 양방향속도제어 (Full-Bridge) 237 3.5 결론 248 Chapter 4 스텝모터 (Stepper Motor) 4.1 스텝모터의개요 250 4.1.1 스텝모터의특징 250 4.1.2 스텝모터의구조및원리 251 4.1.2.1 스텝모터의구조 251 4.1.2.2 스텝모터의원리 253 4.2 스텝모터의종류 255 4.2.1 영구자석스텝모터 (Permanent Magnet Stepping Motor) 255 4.2.1.1 영구자석스텝모터의동작원리 256 4.2.2 가변릴럭턴스스텝모터(Variable Reluctance Stepping Motor) 257 4.2.2.1 가변릴럭턴스스텝모터의동작원리 258 4.2.3 하이브리드스텝모터 (Hybrid Stepping Motor) 260 4.2.3.1 하이브리드형스텝모터의동작원리 261 4.2.4 스텝모터의종류별비교 263 4.3 스텝모터의구동 264 4.3.1 바이폴라(Bipolar) 와유니폴라(Unipolar) 이해 264 4.3.1.1 바이폴라(Bipolar) 스텝모터구동원리 265 4.3.1.2 유니폴라(Unipolar) 스텝모터 266 4.4 스텝모터의제어 267 4.4.1 풀스텝핑 (Full Stepping) 268 4.4.1.1 풀스테핑(Full Stepping) - 1 상( 相, Phase) 통전( 여자) 방식이해 268 4.4.1.2 풀스테핑(Full Stepping) - 1 상( 相, Phase) 통전( 여자) 방식실습 271 4.4.1.3 풀스테핑(Full Stepping) - 2 상( 相, Phase) 통전( 여자) 이해 278 8

CONTENTS 4.4.1.4 풀스테핑(Full Stepping) - 2 상( 相, Phase) 통전( 여자) 방식실습 280 4.4.2 하프스텝핑 (Half Stepping) 283 4.4.2.1 하프스테핑(Half Stepping) - 1-2 상( 相, Phase) 통전( 여자) 이해 283 4.4.2.2 하프스테핑(Half Stepping) - 1-2 상( 相, Phase) 통전( 여자) 실습 285 4.4.3 마이크로스텝핑 (Micro Stepping) 288 4.4.3.1 마이크로스테핑(Micro Stepping) 이해 288 4.4.3.2 마이크로스테핑(Micro Stepping) 실습 292 4.5 결론 301 Chapter 5 브러시리스모터 (Brushless Motor) 5.1 브러시리스모터소개 304 5.1.1 브러시리스모터의개요 304 5.1.2 브러시리스모터의구조 305 5.1.2.1 고정자(Stator) 305 5.1.2.2 회전자(Rotor) 307 5.1.3 홀센서 - (Hall Sensor) 307 5.1.4 BLDC 모터의특성 309 5.1.4.1 토크(Torque)- 속도(Speed) 특성 309 5.1.4.2 BLDC 모터특성비교 309 5.2 브러시리스 DC 모터의 6-스텝제어 311 5.2.1 dspic30f의모터컨트롤 PWM 모듈개요 312 5.2.1.1 PWM 출력오버라이드(Override) 실습 - Lab1 314 5.2.2 6- 스텝커뮤테이션 (Six Step Commutation) 323 5.2.2.1 6-스텝커뮤테이션의이해 323 5.2.2.2 6-스텝커뮤테이션실습 - Lab2 (No PWM : 100% Duty Cycle) 327 5.2.2.3 홀-센서피드백 6-스텝커뮤테이션의개요 332 5.2.2.4 홀-센서피드백 6-스텝커뮤테이션실습- Lab 3 (No PWM : 100% Duty Cycle) 334 5.2.2.5 모터컨트롤 PWM 모듈소개 338 5.2.2.6 PWM 듀티사이클실습 - Lab 4 ( 듀티사이클가변) 355 5.2.3 BLDC 모터의 6-스텝 PID 제어 373 5.2.3.1 PID 제어라이브러리실습 : DSP Library Example 373 5.2.3.2 BLDC 모터의 6-스텝 PID 속도제어실습 : LAB 5 380 5.3 브러시리스모터의정현파제어 395 9

CONTENTS 5.3.1 브러시리스모터의정현파구동개요 395 5.3.2 브러시리스모터의정현파전압 PID 제어 : Lab 6 400 5.4 결론 409 A 부록 부록 1. 마이크로칩모터컨트롤데모보드회로도 412 1.1 DC 모터( 스텝모터) 구동회로도 412 1.2 BLDC(Brushless DC) 모터구동회로도 418 1.3 모터컨트롤데모보드전원회로도및기타회로도 422 1.4 모터컨트롤데모보드부품리스트 425 부록 2. 마이크로칩모터컨트롤데모보드조립및세팅 427 2.1 PIC16F887 DC( 스텝) 모터용보드조립및세팅 427 2.2 dspic30f3010 BLDC 모터용보드조립및세팅 434 10

CHAPTER 마이크로칩회사소개 1.1 마이크로칩제품군 1.2 마이크로칩개발툴 1.3

Motor Control 1.1 마이크로칩회사소개 과거마이크로컨트롤러는시스템에설계해넣기가쉽지않았다. 이러한제품들은어느정도의통합기능을제공했지만적절한규모의경제를달성하기위해서제조중에디바이스에프로그램코드를마스킹해야했다. 마스크프로그램(mask programmed) 디바이스 는높은 NRE(Non Recurring Engineering) 비용이요구되며, 이로인해많은수의디바 이스로비용을상쇄할수있도록디바이스를대량으로생산해야했다. 이러한마스크프 로그램방식은소량애플리케이션에서사용할수없었을뿐만아니라새로운마스크를 만들지않으면코드업데이트와버그수정도불가능했다. 많은엔지니어들이여러접근방식을도입했는데, 이중가장인기있던방식은범용 마이크로컨트롤러와외부 EPROM 및 I/O 를함께사용하는방법이었다. 이방법은설계 유연성과함께소형설계에있어현실적인비용구조를제공했다. 하지만이와동시에 훨씬더많은설계노력이필요했으며보드공간을많이차지했고, 이는비용상승으로 이어졌다. 마이크로컨트롤러에 대한 엔지니어들의 인식은 1988년 마이크로칩이 PIC16C5X 의 CMOS 버전을발표하면서일대전환을맞이했다. 이디바이스는이해하기쉽고프로그 래밍이용이했으며가격도저렴했다. 무엇보다중요한점은필드프로그래밍이가능했다 는것이다. 이러한표준 1회프로그램(OTP) 마이크로컨트롤러를사용하면단순하고저렴 한프로그래머를사용해생산라인에서코드를넣을수있다. PIC16C5X제품군을 통해 기업들의제품출시가더용이해졌고, 생산에서버그수정과업그레이드를거의즉각적 으로구현할수있게되었으며, 다양한애플리케이션에서하나의범용디바이스를사용 함으로써비축해야하는부품의수를줄일수있었다. 이러한개념은곧엔지니어링커 뮤니티에널리도입됐으며 1989년마이크로칩 OTP PIC 마이크로컨트롤러출하량은 100 만개를돌파했다. 마이크로컨트롤러개발툴의비용과복잡성이화두였던 1980년대후반과 1990년대초 반, 마이크로칩은 PIC16C5X 제품군출시를통해단순하고안정적인저가용소프트웨어 개발툴을선보였다. 이어 1991년마이크로칩은세계최초의 Windows 3.0 기반개발 시스템인 MPLAB IDE(Integrated Development Environment) 를선보였다. 강력한 RISC 아키텍처, 단순한프로그래밍모델, 그리고통합 I/O를갖춘 PIC 마이크로컨트롤러는유닛당비용이낮은마스크프로그램마이크로컨트롤러의주영역이었던대량애플리케이션에서사용되기시작했다. 1992년마이크로칩은첫번째 ROM(Read 12

Chapter 1. Only Memory) 기반 CMOS PIC 마이크로컨트롤러를발표했다. 이로써기업들은최초생산가동에서 OTP 디바이스를사용, 비용절감을위해공장에서프로그래밍되는 ROM 마이크로컨트롤러로옮겨가기전에제품의완전한현장테스트와버그수정, 기능강화를구현할수있게됐다. 1993 년마이크로칩이업계최초로인헨스드플래시(Enhanced Flash) 마이크로컨트롤러를출시하면서유연성은한층높아졌다. 이디바이스는인쇄회로기판에납땜한후플래시메모리를통해손쉽게프로그래밍이가능했기때문에프로그래밍단계를생산공정의후반으로옮기고, 하나의보드에여러다른디바이스를함께프로그래밍하는것이가능해졌다. 또한플래시메모리덕분에 PIC 마이크로컨트롤러를현장에서재프로그래밍할수있었기때문에제품이고객에게인도된이후에도업데이트가가능했다. 1990 년대에는보드면적의중요성이갈수록커졌다. 1996년등장한더작은크기의새로운패키지를통해마이크로칩은 8핀패키지로마이크로컨트롤러를제공하는최초의기업이됐다.PIC 마이크로컨트롤러의사용은계속해서빠른속도로확장됐으며,1999년마이크로칩은 PIC 마이크로컨트롤러출하량 10 억개돌파를발표하기에이르렀다. 2001 년까지마이크로칩에서 20만개이상의 PIC 마이크로컨트롤러개발키트가판매됐다. PIC 마이크로컨트롤러제품군의개발은초기 PIC 마이크로컨트롤러아키텍처의장기간에걸친성공으로특징지을수있다. RISC 아키텍처, 별도의명령어및데이터버스 ( 하버드아키텍처) 와짧은 2단계파이프라인을통해 PIC 마이크로컨트롤러는거의매주기마다명령어를실행할수있다. 1999년에는향상된아키텍처를제시한 PIC18CXXX 제품군이출시됐다. 이전까지, 그리고이후개발된모든 PIC 마이크로컨트롤러와마찬가지로 PIC18CXXX는최초의 PIC16CXXX 제품군과완전한하위호환성을제공했다. 시장조사기관인가트너데이터퀘스트에따르면 PIC 마이크로컨트롤러의여세에힘입어마이크로칩은세계 1위의 8 비트마이크로컨트롤러공급업체로부상했다. 1996년만해도 5 위공급업체였던마이크로칩의이러한성과는불과몇년만에이뤄진것이다. 현재애널리스트들은 8비트마이크로컨트롤러애플리케이션의지속적인확장을예상하고있으며, 마이크로칩은혁신을통해다양한애플리케이션에계속해서 PIC 마이크로컨트롤러를제공하고있다. 2004년마이크로칩은세계최소형마이크로컨트롤러인 PIC10F를발표했다.6핀 SOT23 패키지로제공되는이제품은플래시메모리를탑재했고 1회용에가 까울정도로경제적인새로운지능형전자애플리케이션의개념을구현할수있게해준다. 또다른한쪽에서는 DSP와 16비트마이크로컨트롤러의장점만단일디바이스에결합한 dspic 디지털신호컨트롤러제품군이출시됐다. 13

Motor Control 오늘날 30억개이상의 PIC 마이크로컨트롤러가사용되고있으며, 이탁월한마이크로컨트롤러는사실상거의모든제품에내장되어있다고할수있다. 마이크로칩연역 1989 세계최초로필드프로그래머블마이컴인 OTP 출시 1990 일백만개의 PICmicro 마이컴판매달성 1994 FLASH PICmicro 마이컴출시 1996 세계최초로 8핀마이컴출시 1997 8비트마이컴시장점유율세계 2위달성 1999 고성능 8비트마이컴인 PIC18FXXX 출시 2001 세계적으로인증된 Telcom사인수및아날로그제품군확장 2002 PowerSmart 인수및 Fuel Guaging 솔루션제공 (Duracell 반도체설계회사) 2003 8비트마이컴시장점유율세계 1위달성 2004 16비트마이컴인 dspic 출시 / 6핀의 8비트마이컴출시 2005 40억개의 PICmicro 마이컴판매달성 2007 2.4GHz IEEE 802.15.4 트랜시버/ 네트워크분석툴및 ZigBee 플랫폼출시 2007 PIC 마이크로컨트롤러터치센싱애플리케이션 mtouch 솔루션발표 2007 PIC 마이크로컨트롤러제품라인을 32 비트 PIC32 제품군으로확장 2008 임베디드애플리케이션용 USB OTG 내장 32비트 PIC32 MCU 제품군출시 2008 60억번째 PIC 마이크로컨트롤러출하 현재하루 170 만개이상의마이크로컨트롤러를출하하고있다. 1.2 마이크로칩제품군 아래그림은전형적인임베디드제어보드및신호의흐름을보여주고있다. 온도센서, 압력센서, 모션센서등의아날로그센서신호들이증폭및필터링되어디지털신호로변환되어마이크로컨트롤러로의입력신호가된다. 이외에도전원관리블럭, 파워드라이버, 다양한버스구조, 주변장치및통신프로토콜등의아날로그신호등이마이크로컨트롤러와인터페이스를이루고있다. 각각의블럭들은마이크로칩에의해제공되고있는제품및기능들을개괄적으로보여주고있다. 14

Chapter 1. 1.2.1 32비트 PIC 마이크로프로세서 [ 성능] - MIPS M4K 코어(1.5 DMIPS/MHz) - 72 MHz 동작클럭 - 4 채널 DMA 지원.CRC 기능내장. 아이들모드동작기능강화 [ 메모리] - 32~512 Kbytes 플래시롬메모리 - 프리패치(Prefetch) 버퍼/ 캐쉬 - 8~32 Kbytes 데이터램 [ 인터럽트] - 하드웨어벡터인터럽트컨트롤러.63개인터럽트벡터지원 - 풀 32 레지스터쉐도우셋 자세한사항은본사웹사이트 www.microchip.com/pic32 방문해본다. 15

Motor Control 1.2.2 8비트 PIC 마이크로프로세서 마이크로칩의풍부한주변장치를갖추고있는 8비트 PIC 마이크로프로세서는플래시, OTP(One-Time Programmable) 및 ROM 프로그램메모리옵션등을통해다양한제품을제공하고있다.RISC코어를기본으로설계된이들제품군은거의코드변경없이 6 핀에서 100 핀으로손쉽게마이그레이션할수있도록공통의아키텍처를채용하고있다. 1.2.3 16비트 PIC 마이크로프로세서 16비트 PIC24 마이크로프로세서는 8비트 PIC18 제품군의성능, 주변장치및기능을토대로설계되었으며최대 40MIPS 의성능을발휘한다. 16비트제품개발언어인 MPLAB C30 컴파일러를통해높은처리성능과 C 코드집적도를제공한다. PIC24F/PIC24H 시리즈는소프트웨어및 MPLAB IDE와완벽하게호환되기때문에요구사항의변화에따라손쉽게마이그레이션할수있는것은물론, 기존의리소스를그대로활용하면서애플리케이션에성능및기능을추가할수있다. 1.2.4 16비트 dspic DigitalSignalControllers(DSC) 16비트고성능 dspic DSC는마이크로프로세서가가진강점과 DSP의강점을단일코어로통합한디바이스다. 최대 40MIPS의속도를제공하는이제품은 C 프로그래밍작업의효율성을높이도록설계되었으며플래시프로그램메모리, 데이터 EEPROM, 강력한주변장치및다양한소프트웨어라이브러리를갖추고있다. 툴및디자인환경에서친숙한마이크로컨트롤러의느낌을그대로제공하고있는 dspic DSC는모터컨트롤및전력변환, 음성/ 오디오, 인터넷/ 모뎀연결, 통신, 암호화, 고속감지및자동차애플리케이션을위해개발되었다고말할수있다. 다음그림은마이크로칩의 8/16비트 MCU 및 DSC(Digital Signal Controller) 제품군요약및응용분야에따른구분을보여주고있다. 16

Chapter 1. [8/16비트 MCU 및 DSC 제품군요약] [ 응용분야에따른 8/16비트 MCU 및 DSC 제품군분류] 17

Motor Control 1.2.5 아날로그및인터페이스제품 마이크로칩은마이크로컨트롤러외에도임베디드시스템을위한아날로그및인터페이스제품군으로써선형, 복합신호, 전원관리, 온도관리, 배터리관리및인터페이스장비등을포함해포괄적인포트폴리오를제공하고있다. 특정유형의제품과수천개에달하는제품사양에대한보다자세한정보는마이크로칩웹사이트를통해제공받을수 있으므로, 여기에서는주요사양만소개하기로하겠다. 18

Chapter 1. 19

Motor Control 1.2.6 직렬 EEPROM 마이크로칩은 128비트에서 1M 비트에이르는집적도, 1.8V 까지가능한작동전압, 다양한버스프로토콜 (I 2 C, Microwire 및 SPI) 등을비롯한광범위한시리얼 EEPROM 옵션을제공하고있다. 이들제품은 40 C~ 125 C에이르는모든표준온도범위에서작동 가능하다. 20

Chapter 1. 1.2.7 보안데이터제품 마이크로칩의 KEELOQ 코드호핑(code hopping) 기술은단어길이가긴코드와함께암호화및동기화기법을사용해고도의보안성을실현해준다. 자세한내용은마이크로칩웹사이트를통해확인할수있다. 1.3 마이크로칩개발툴 마이크로칩의 8/16비트제품을이용한개발시유용하게사용될수있는소프트웨어및하드웨어개발툴에대해살펴보자. 1.3.1 8/16 비트소프트웨어개발툴 1.3.1.1 MPLAB C30 C 컴파일러 (16 비트용 ) MPLAB C30 C Compiler는모든기능을완벽하게갖춘 ANSI 규격최적화컴파일러로써문자열조작, 동적메모리할당, 데이터변환, 타임 키핑(timekeeping) 및수학라이브 러리(math libraries) 등전체 ANSI C 표준라이브러리를포함하고있다. 1.3.1.2 Assembler / Linker / Librarian MPLAB ASM30 은모든기능을갖춘매크로어셈블러로써, 사용자정의매크로, 조건부어셈블리및다양한어셈블러지시어등의강력한코드생성툴이며, 무료로제공되고 있다. MPLAB LINK30 및 MPLAB LIB30 은효율적인연결, 라이브러리생성및유지관리를지원하는 Linker 및 Librarian 모듈이다. MPLAB ASM30은무료통합개발환경툴인 MPLAB IDE 설치시해당디렉토리에자동으로설치된다. 1.3.1.3 MPLAB SIM Software Simulator MPLAB SIM 소프트웨어시뮬레이터는 CPU와명령어를완벽히시뮬레이션할수있을뿐만아니라 I/O, 인터럽트, UART, A/D 모듈등과같은주요주변장치의시뮬레이션또한지원해주는이상적인알고리즘개발툴이다. 21

Motor Control 1.3.1.4 MPLAB VDI(Visual Device Initializer) MPLAB VDI를통해전체 DSC 를도식적으로구성할수있으며, 구성이완성되면한번의마우스클릭으로어셈블리또는 C 프로그램에서사용가능한초기화코드를생성한다. MPLAB VDI 는일련의작동조건뿐만아니라핀, 메모리및인터럽트의할당및충돌에대한광범위한오류검사를실행한다. 생성된코드파일은 MPLAB Project Manager 를통해나머지애플리케이션코드와쉽게통합할수있다. 또한리소스할당및구성에대한상세한보고서를통해프로젝트문서화를단순화한다. MPLAB VDI 의주요기능: 드래그앤드롭기능선택 원클릭구성 포괄적인오류검사 초기화코드생성 MPLAB Project Manager를통해손쉽게통합 출력보고서를통해프로젝트문서화요건완화 22

Chapter 1. 1.3.1.5 주변장치드라이버라이브러리 270개이상의 C 유틸리티기능으로구성된이라이브러리는하드웨어주변장치모듈을다양한모드로설정및작동할수있도록지원한다. 주변장치드라이버라이브러리에포함된기능은다음과같다. 10비트및 12비트 A/D 컨버터 UART, SPI, I²C 및코덱인터페이스 모터컨트롤 PWM 및 QEI 범용타이머 IC(Input Capture) 및 OC(Output Compare) 1.3.1.6 수학(Math) 라이브러리 이 IEEE 754 호환라이브러리는단일/ 이중정밀부동소수점 ANSI C 표준수학함수 를제공한다. 이들루틴은코드크기를최소화할수있도록최적화되었다. 수학라이브러리는어셈블리나 C 에서사용할수있으며주요함수는다음과같다. sin, cos, tan asin, acos, atan ln, log10, sqrt, power ceil, floor, mod, frexp 1.3.1.7 DSP 알고리즘라이브러리 포괄적인 DSP 빌딩블록라이브러리는실행속도에맞게어셈블리코드에서완벽하게최적화되었다.DSP함수는어셈블리나 C 에서사용할수있으며,DSP알고리즘라이브러리에서지원되는주요알고리즘은다음과같다. 연속적 IIR 필터 FIR 필터및 LMS 필터 상관관계, 회귀선 FFT 및윈도우함수 행렬및벡터연산 23

Motor Control 1.3.2 8/16 비트하드웨어개발툴 1.3.2.1 MPLAB ICD2 (In Circuit Debugger / Programmer) MPLAB ICD 2 디버거및프로그래머로써강력한성능의저가형개발툴이다. MPLAB ICD 2는 MPLAB IDE에서작동하기때문에어셈블리또는 C 소스코드를디버그하고단일단계모드에서변수를확인및수정하며브레이크포인트를설정할수있다. 주요기능 : 고속동작 USB 또는시리얼포트를통해 PC 연결 플래시메모리프로그래머 지능형 watch 변수윈도우 고급브레이크포인트기능 1.3.2.2 MPLAB REAL ICE TM (In Circuit Emulation System) MPLAB REAL ICE In Circuit Emulator 는마이크로칩의차세대에뮬레이션및디버깅 시스템이다. PIC16 일부, PIC18, dspic33f, PIC24H, PIC24F 및 dspic30f 16비트디바이스등을지원하는이시스템은손쉽고신속한애플리케이션개발및디버깅을위해강력한회로내에뮬레이션플랫폼을제공한다. 타깃마이크로컨트롤러자체의특수하드웨어로직을통해에뮬레이션이수행되기때문에별도의에뮬레이션장비가필요하지않다. 24

Chapter 1. 주요기능 : 최대 최대 6개의하드웨어브레이크포인트 1,000개의소프트웨어브레이크포인트 사용자제어방식의프로그램메모리추적/ 데이터메모리로그 고속 USB 2.0 PC 인터페이스 기존의 ICSP(In-Circuit Serial Programming ) 인터페이스나 LVDS( 추가옵션) 실행(Run), 정지(Halt) 및단일단계(Single-step) 모드 로직프로브 (logic probe) 스톱워치 1.3.2.3 MPLAB PM3 (Device Programmer) MPLAB PM3 Device Programmer는양산환경을지원할수있을정도로완벽한기능을갖춘범용장비프로그래밍솔루션으로서, 상호호환되는소켓모듈을사용해프로그래밍이가능한마이크로칩의거의모든장비를지원한다.MPLABPM3는많은장비에서프로그래밍시간을단축하고강력한 ICSP 를위해내장인터페이스를제공한다. 25

Motor Control 1.3.2.4 Explorer 16 Development Board PIC24 마이크로컨트롤러및 dspic33f 디지털신호컨트롤러제품군의기능및성능을평가하는데사용되는저가개발보드로서, 주요설계요구를신속하게개발및검증할수있도록지원하는데모보드이다. 주요기능 : PIC24F, PIC24H 및 dspic33f General Purpose 및 Motor Control 제품지원 상호호환되는 2개의 PIM(Plug In Module) : PIC24F 및 dspic33f용 PICtail Plus 애플리케이션별도터(daughter) 카드를위한모듈식설계: - SD(Secure Digital)/MMC(Multimedia Card) -SPI 인터페이스(AC164122) - Ethernet(AC164123) - 컴팩트플래시, IEEE 802.15.4 WPAN, IrDA 프로토콜, 음성재생도터카드 1.3.2.5 dspicdem TM 80 pin Starter Development Board 이개발보드는 dspic33f 디바이스를비롯해 80핀 dspic30f General Purpose 및 Motor Control 제품군을평가할수있는개발보드이다. 26

Chapter 1. 주요기능 : 80핀dsPIC30F6014A General Purpose PIM(MA300014) 포함 80핀dsPIC30F6010 Motor Control PIM(MA300013) 및 80핀~100핀dsPIC33F General Purpose PIM(MA330012) 지원 9V 전원공급 LED, 스위치, 전위차계, UART 인터페이스 음성대역신호입력을위한 A/D 입력필터회로 음성대역출력을위한온보드 DAC 및필터 회로프로토타이핑영역 어셈블리언어데모프로그램및사용자가이드 3.3V로의 5개출력에대한선택형전압레귤레이터포함 1.3.2.6 dspicdem 1.1 General Purpose Development Board 이보드는음성및오디오관련애플리케이션에대한개발을지원한다. 주요기능 : dspic30f6014a PIM(MA300014) 포함 직렬통신채널(2개의 UART, SPI, CAN) Si3000 코덱(MIC IN/ 스피커 OUT 상태) 범용프로토타이핑영역및확장헤더 디지털전위차계,LED, 스위치등 27

Motor Control 1.3.2.7 모터컨트럴개발시스템 BLDC, ACIM, PMSM, SR 모터및 UPS 애플리케이션의신속한프로토타이핑및검증을지원하는시스템으로, dspicdem MC1 Motor Control Development Board와 2개의전원모듈옵션가운데하나로구성되어있다. dspicdem MC1H 3 Phase High Voltage Power Module(DM300021) 은 AC 전원애플리케이션을지원하는반면, dspicdem MC1L 3 Phase Low Voltage Power Module(DM300022) 은최대 48V까지 DC 전원애플리케이 션을지원한다. 주요기능 : 전원부냉각을위한열발산판 (heat sink) 완전자동화된전원회로보호 전원회로에서의절연 모터피드백신호를위한다양한옵션 28

Chapter 1. 1.3.2.8 PICDEM TM MC LV Motor Control Development Board Sensored 및 senserless BLDC 모터컨트롤애플리케이션을효율적으로평가및개발할수있도록지원하는개발보드로서 28핀 dspic30f3010 가사용된다. 주요기능 : I²C 인터페이스에서과전류보호및온도센서지원 3-phase 전압소스인버터브리지 9개의 LED - 3 개는상태표시용, 나머지 6개는 PWM 표시용 모터전류및역기전력(Back EMF) 감지를위한테스트지점 속도제어전위차계 48V 및 2.2A의최대모터정격지원 28핀PIC18 MCU 지원( 특히 PIC18F2431) 즉각적인사용이가능한전원공급장치및모터제공( 옵션) 29

Motor Control 1.3.2.9 dspicdem SMPS Buck Development Board 단순한 DC/DC SMPS(Switch Mode Power Supply) 를구현하는개발보드로서, 디지털루프제어설계가처음인초보설계자들을위한데모보드이다. 주요기능 : 이중의독립형강압용컨버터 (buck converter) 강압용컨버터는동기또는비동기모드에서작동가능 입력전압의범위는 7V~15V( 공칭전압 9V) 출력전압은 0V를시작으로입력전압 - 1.5V로설정가능 사용자는동적출력로드가과도응답을조사할수있도록지원 1.3.2.10 dspicdem.net TM Connectivity Development Board 소프트모뎀및접속기반애플리케이션에대한개발을지원하는개발보드이다. 주요기능 : dspicdem.net 1 (DM300004-1) 은 FCC/JATE PSTN 국가를지원 dspicdem.net 2 (DM300004-2) 은 CTR 21 PSTN 국가지원 dspic30f6014 PIM(MA300011) 포함 DAA/AFE 칩셋을연결하는 10Base-T Ethernet MAC 및 PHY 인터페이스와 PSTN 인터페이스 직렬통신채널(UART 및 CAN) 상시저장을위한외장 EEPROM 및 RAM 메모리 범용프로토타이핑영역및확장헤더 LED, 스위치, 전위차계및 LCD 디스플레이 30

Chapter 1. 1.3.2.11 dspicdem 2 Development Board 18 핀, 28핀및 40핀 DIP 패키지 dspic DSC 장비모두를위한솔루션을효율적으로설계할수있는설계보드이다. 주요기능 : 모터컨트롤, 센서및범용제품군을포함해 18 핀, 28핀및 40핀 DIP 패키지로 11개의 dspic DSC 장비를위한개발플랫폼제공 온보드 CAN 및 UART 지원 다양한오실레이터옵션을온보드지원 모든 11개장비에서애플리케이션개발을신속하게시작할수있도록소스코드예와사용자가이드가제공 31

Motor Control 1.3.2.12 dspicdem 28 pin Starter Development Board 모터컨트롤, 센서및전력변환제품군을포함해 28핀 dspic30f MCU에서효율적으로개발에착수할수있도록하는개발보드이다. 주요기능 : 28핀dsPIC30F2010 MCU포함 9V 전원공급장치로부터의전원입력 UART 인터페이스 MCU의모든 I/O 핀에액세스하기위한헤더 회로프로토타이핑영역 어셈블리언어데모프로그램및설명서 모든 dspic30f 28핀 DIP 또는 SOIC 장비수용 32

CHAPTER 마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발개발툴및마이크로칩개발툴및 C 언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어 C 언어프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍 2.1 MPLAB IDE 통합개발툴셋업하기 2.2 MPLAB ICD2 디버거개발장비 2.3 2.3 2.3 2.3 2.3 2.3 2.3 2.3 2.3 2.3 2.3 2.3 2.3 2.3 2.3 2.3 2.3 2.3 2.3 2.3 2.3 2.3 마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩마이크로칩 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 16 비트용비트용비트용비트용비트용비트용비트용비트용비트용비트용비트용비트용비트용비트용비트용비트용비트용비트용비트용비트용비트용비트용 MPLAB MPLAB MPLAB MPLAB MPLAB MPLAB MPLAB MPLAB MPLAB MPLAB MPLAB MPLAB MPLAB MPLAB MPLAB MPLAB MPLAB MPLAB MPLAB MPLAB MPLAB MPLAB C30 C30 C30 C30 C30 C30 C30 C30 C30 C30 C30 C30 C30 C30 C30 C30 C30 C30 C30 C30 C30 C30 C 언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어언어프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍프로그래밍 2.3 마이크로칩 16 비트용 MPLAB C30 C 언어프로그래밍 2.4 2.4 2.4 2.4 2.4 2.4 2.4 2.4 2.4 2.4 2.4 2.4 2.4 2.4 2.4 2.4 2.4 2.4 2.4 2.4 2.4 2.4 PIC PIC PIC PIC PIC PIC PIC PIC PIC PIC PIC PIC PIC PIC PIC PIC PIC PIC PIC PIC PIC PIC 용하이하이하이하이하이하이하이하이하이하이하이하이하이하이하이하이하이하이하이하이하이하이 2.4 PIC 용하이텍 (HI-TECH) PICC C 언어프로그래밍

Motor Control 2.1 MPLAB IDE 통합개발툴셋업하기 2.1.1 MPLAB IDE 통합개발툴소개 MPLAB IDE(Integrated Development Environment, 마이크로칩통합개발환경 ) 는 MPASM, MPLAB C18/30등의 Language Tool과 MPLAB ICD2, Real ICE, Pickit2, ICE2000 및 ICE4000, PM3 등의디버깅및프로그래밍툴등을하나의통합환경인 MPLAB IDE라는소프트웨어안에서이루어질수있도록지원해주는통합개발환경소프트웨어이다. 이소프트웨어는개발자 PC에서코드의편집, 컴파일, 링크및다양한하드웨어개발툴과인터페이스해주는개발 Workstation 이다. 즉, 마이크로칩 MPLAB IDE를이용하여 PIC MCU 및 dspic Digital Signal Controller 개발이가능하며마이크로칩웹사이트를통해무료로제공되고있다. 따라서 MPLAB IDE에익숙해지게되면마이크로칩의 8비트및 16비트모든디바이스를개발함에있어서디바이스의변환이쉽고, 자유로워지게된다. MPLAB IDE에는툴바와다양한윈도우즈를가지고있는윈도우어플리케이션프로그램으로써현재 (2008년 3월 ) Version 8.02가제공되고있으며향후보다나은서비스를 34

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 위해지속적인업데이트가이루어지고있다. 프로젝트관리를위한툴인프로젝트매니저는개발자가작업중인프로젝트와연관된다양한파일들즉, 소스파일및헤더파일, 링크파일등을한눈에볼수있도록지원함으로써프로젝트관리가용이하도록지원해주는유익한툴이다. Embedded System 개발자들에게있어가장많이사용하게되는텍스트에디터는일반적으로코드를편집하는툴로써 C언어및 Assembly 코드에따라다양한색상을지원해줌으로써코딩을효과적으로할수있도록지원해주고있다. 각레지스터및데이터메모리, 프로그램메모리, Disassembly의내용확인을위한윈도우, 그리고메모리사용현황을한눈에알아볼수있도록지원하는메모리게이지기능등은개발업무에많은편의와도움을제공해주고있다. 2.1.2 MPLAB IDE 통합개발툴다운로드방법 MPLAB IDE는마이크로칩공식홈페이지 (www.microchip.com) 를통해무료로다운로드할수있으며, 새로운디바이스출시에따른지원및개선등을위해지속적인업데이트가이루어지고있으므로최신버전으로업데이트하는습관을갖기를추천한다. 다운로드위치 : www.microchip.com Design MPLAB IDE 35

Motor Control 2.1.3 MPLAB IDE 통합개발툴설치하기 그럼이제 MPLAB IDE 설치에대해알아보도록하자. 먼저마이크로칩공식홈페이지를통해 MPLAB IDE를다운로드받은후압축을해제하여생성된파일중인스톨파일 (setup.exe) 을실행한다. 설치과정중 MPLAB ICD2 등을위한설치옵션을물어보는창이뜨게되는데이때가능한모든옵션을선택할것을권장한다. <STEP1> 인스톨파일실행 (setup.exe) <STEP 2> 인스톨마법사실행과정 <STEP 3> 설치시작 (Next 버튼클릭 ) 36

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 <STEP 4> 라이센스동의 (Accept Agreement 선택후 Next 버튼클릭 ) <STEP 5> 설치타입선택 (Complete 선택후 Next 버튼클릭 ) <STEP 6> 폴더위치선택 ( 권장하는기본폴더에설치 ) 주의 : Microchip 관련어플리케이션의기본폴더인 C:\Program Files\Microchip 에설치할것을적극권장한다. 37

Motor Control <STEP 7> 애플리케이션마에스트로프로그램라이센스동의 (Agree 선택후 Next 버튼클릭 ) <STEP 8> 파일복사시작 (Next 버튼클릭 ) 38

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 <STEP 9> 설치과정 ( 실행중인응용프로그램이있으면, 아래와같이종료하라는경고를보여준다. 이때응용프로그램을종료할것을권장한다.) <STEP 10> 하이텍 (HI-TECH) C 컴파일러 LITE 버전설치시작 (Next 버튼클릭 ) MPLAB IDE 설치시에하이텍 (HI-TECH) C 컴파일러라이트버전을설치할것인지를물어본다. 만약, 이번 PIC16F887 모터실습시에, 정품또는구입한하이텍 C 컴파일러가없다면, 이후설치과정을진행하기를권장한다. 39

Motor Control <STEP 11> 하이텍 C 컴파일러 LITE 버전라이센스동의 ( 동의체크박스에체크 ) <STEP 12> 하이텍 C 컴파일러 LITE 버전설치위치설정 (Next 버튼클릭 ) 디폴트폴더설치권장 : C:\Program Files\HI-TECH Software\PICC\LITE\9.60 <STEP 13> 하이텍 C 컴파일러 LITE 버전설치언어 (English 권장 ) 및환경 Path 추가설정 ( 체크권장 ) 후 Next 버튼클릭 40

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 <STEP 14> 하이텍 C 컴파일러 LITE 버전설치완료 (Finish 버튼클릭 ) <STEP 15> MPLAB IDE 통합개발툴설치완료및시스템재시작후, 바탕화면의실행아이콘클릭하면, MPLAB IDE 통합개발프로그램이실행된다. (Finish 버튼클릭 ) 이제 MPLAB IDE의설치과정이끝났다. 끝으로 MPLAB IDE 실행에앞서컴퓨터를재시작하면 MPLAB IDE를정상적으로사용할수있게된다. MPLAB IDE 사용법은 MPLAB C30 컴파일러를다루는장에서함께설명하도록하겠다. 41

Motor Control 2.2 MPLAB ICD2 디버거개발장비 2.2.1 MPLAB ICD2 인써킷 (In-Circuit) 디버거 (Debugger) 툴소개 MPLAB ICD2 는 PIC MCU 및 dspic DSC를위한저가형실시간디버거및프로그래머이다. MPLAB ICD2를이용하여프로그램을다운로드및실시간실행이가능하며, MPLAB의디버그기능을이용하여변수등의상세한확인이가능해진다. C 또는어셈블리소스코드의심볼릭레이블로부터변수값확인및브레이크포인트설정이가능하며 C 소스라인이나어셈블리코드라인을통해싱글스텝실행이가능해진다. 뿐만아니라 MPLAB ICD2는 MCU의프로그래머툴로도사용이가능하다. ICD2는디바이스의 ICSP(In Circuit Serial Programming) 을제어하는 2개의하드웨어라인을이용하며, 온칩펌웨어를통해디버깅한다. ICD2의디버그기능은마이크로컨트롤러에내장되어있으며, 디버그코드를타켓프로세서에프로그래밍함으로써실행된다. 따라서디버그모드에서는프로그램메모리의일부영역과일부범용파일레지스터및스택레벨을점유하게된다. 2.2.2 MPLAB ICD2 소프트웨어설치및하드웨어연결하기 MPLAB ICD2 드라이버설치방법에대해알아보자. MPLAB ICD2 이용을위해서는 PC에 USB 드라이버를설치하여야하는데이는앞서 MPLAB IDE 설치시해당 PC에이미설치되었을것이다. 그럼, 이제 MPLAB ICD2를설치해보자. 42

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 <STEP 1> MPLAB IDE 설치먼저 MPLAB IDE를설치하기전에 ICD2를 USB 케이블또는 Serial Cable을통해 PC 와연결해서는안된다. 즉, MPLAB IDE 설치시 ICD2를위한드라이버를 PC에설치하므로, 이과정을먼저수행한후 ICD2를 PC와연결하면자동으로해당드라이버를검색하여설치할수있게된다. <STEP 2> ICD2와 PC연결 USB 케이블또는 RS 232 케이블을통해 ICD2와 PC를연결한다. 가능하면, 통신속도향상을위해 USB 연결을사용할것을권장한다. 43

Motor Control USB 연결시드라이버의위치를물어보게되는데자동설치옵션을선택하거나수동으로드라이버위치를설정할수있다. 해당드라이버의위치는 MPLAB IDE가설치된폴더를참조하여아래와같이지정하면된다. ICD2 용 USB 드라이버위치 : C:\Program Files\Microchip\MPLAB IDE\ICD2\Drivers 44

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 [ 장치관리자에서확인가능 ] 시작 제어판 시스템 하드웨어 장치관리자 <STEP 3> 전원및타깃보드연결다음그림과같이전원연결을 ICD2 모듈또는타깃보드에연결하여준다. 이전원은타깃보드의디바이스에공급될전원을의미하므로가능하면타깃보드에전원을직접공급해주는방식을사용할것을권장한다. 만약, ICD2 전원공급소켓에전원을공급할경우, 타깃보드에과전류가발생할때, ICD2 내부가망실될수도있으므로가급적타깃보드에전원을공급하는것을권장한다. 45

Motor Control <STEP 4> 이제 MPLAB IDE를실행하고 Debugger 또는 Programmer 메뉴에서 MPLAB ICD2를선택하면사용할준비가끝났다. 참고사항 MPLAB ICD2와타깃보드의연결은기본적으로 5핀커넥션을이용하며, 기본적으로사용되는잭은 RJ-12 6핀잭이사용되며이와관련된사항은다음그림을참조하거나, ICD2 사용자설명서를참조하면보다자세한사항을확인할수있다. 46

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 - ICD2 RJ-12 잭핀설명 - 타깃보드상의 ICD2 연결커넥터핀설명 - ICD2 와타깃보드의 Device(PIC) 연결도 47

Motor Control - ICD2 와타깃보드의 Device 와연결시주의사항 ( 필히검토요망 ) 2.2.3 MPLAB ICD2 사용하기 이제 MPLAB IDE 프로그램을실행해보자. <STEP 1> 디버거로사용설정할때 Debugger Select Tool MPLAB ICD2 선택 프로그래머로사용설정할때 Programmer Select Programmer MPLAB ICD2 선택 48

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 <STEP 2> Output Windows 확인 (View 메뉴에서 Output 팝 - 다운메뉴클릭 ) - 연결이정상일때 - 연결이비정상일때 ( 예 ) 타깃보드에전원공급이없는상태 49

Motor Control 2.2.4 MPLAB ICD2 사용환경 (Settings) 설정하기 MPLAB ICD2 디버거의설정에대해알아보자. 먼저 MPLAB IDE 메뉴바에서다음과같이 Debugger Settings 또는 Programmer Settings을선택하면사용환경설정윈도우가나타난다. 이윈도우의각설정 Tab 메뉴를누르고해당옵션을선택할수있다. <Status> 현재 ICD2의연결옵션및연결상태를확인할수있다. ICD2와타깃보드가정상적으로연결되었을때 Run Selft Test 버튼을누르면모두 Pass 라는결과를얻을수있다. 50

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 <Communication> PC와 ICD2의연결을 USB 및시리얼통신중선택할수있는옵션을제공해준다. 빠른통신속도를위해서 USB 통신으로선택할것을권장한다. <Power> 타깃보드에공급되는전원을모니터링할수있는옵션이며, 디바이스전압인 와프로그래밍전압인 를확인할수있다. 51

Motor Control <Versions> MPLAB ICD2의 Firmware 버전및타깃디바이스의버전을확인할수있다. <Program> MPLAB ICD2를이용해타깃디바이스를프로그래밍옵션을선택할수있으며, 일반적으로그림과같이자동옵션을선택하여사용하면특별한문제가없다. 52

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 <Warnings> 특정경고메시지를활성또는비활성화할수있는옵션을제공해준다. 참고사항 MPLAB ICD2의디버거사용법에대한자세한사항은 MPLAB ICD2 사용자설명서를참조하기바란다.(DS51331B MPLAB ICD2 In-Circuit Debugger User s guide) 2.3 마이크로칩 16 비트용 MPLAB C30 C 언어프로그래밍 2.3.1 MPLAB C30 컴파일러소개 MPLAB C30 컴파일러는마이크로칩의 16비트 MCU인 PIC24, dspic30f 및 dspic33f 임베디드소프트웨어개발을위한 ANSI 호환 C 컴파일러로써 MPLAB IDE와완벽하게호환이됨으로써, MPLAB ICE(In-Circuit Emulator), MPLAB ICD2(In-Circuit Debugger) 및 MPLAB SIM(Simulator) 와함께소스레벨디버깅을지원해준다. C30 컴파일러는 C 소스파일을컴파일하여어셈블리언어파일을생성한다. 이렇게생성된파일은다른오브젝트파일및라이브러리와함께링크되어실행가능한 COFF 또는 ELF 파일포맷으로최종어플리케이션프로그램을생성한다. COFF 또는 ELF 파일 53

Motor Control 은 MPLAB IDE에로링되어테스트또는디버그될수있으며, 시뮬레이터나디바이스프로그래머에로딩가능한 Intel Hex 포맷으로변환될수있다. 2.3.2 MPLAB C30 컴파일러다운로드방법 MPLAB C30 컴파일러를설치해보자. 마이크로칩공식홈페이지 (www.microchip.com) 을통해제공되고있는 MPLAB C30 컴파일러 Student Edition은 60일간모든기능을무료로이용할수있으며, 이후사용시는최적화레벨 1에한해무제한사용할수있다. 즉, 코드사이즈가다소증가하게되는것을감수하여야하므로, 필요시정품을구입하여사용할것을권장한다. 54

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 또한신규디바이스출시및성능향상등을목적으로지속적으로업그레이드되고있으므로최신버전으로유지하는습관을갖도록하자. 참고로, C30 컴파일러의다운로드를위해서는로그인을필수로요구하고있다. 다운로드위치 : www.microchip.com Design Development Tools Software MPLAB C30 dspic30/33 and PIC24 2.3.3 MPLAB C30 컴파일러설치 앞에서설명한다운로드파일을실행하여다음절차에따라 C30 컴파일러를설치해보자. <STEP 1> 파일실행 <STEP 2> 라이센스동의 55

Motor Control <STEP 3> 해당폴더설정 ( 기본폴더사용권장 ) 폴더위치 ; C:\Program Files\Microchip\MPLAB C30 <STEP 4> 사용자지정 ( 사용 PC의상황에따라설정 ) <STEP 5> 파일복사 56

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 <STEP 6> 환경설정자동경로설정을위해 Yes를클릭한다. <STEP 7> 설치완료 이제 MPLAB C30 컴파일러를사용할준비가완료되었다. 참고로 MPLAB C30 컴파일러는 MPLAB IDE에서사용이지원되므로, 특별한컴파일러명령어를익힐필요는없다. 2.3.4 MPLAB C30 컴파일러기초 2.3.4.1 C30 컴파일러변수기초 2.3.4.1.1 C30 컴파일러식별자다음예제에서와같이 C프로그램의구성요소들의이름을식별자라하며, 여기에서는변수 a, c, 상수 b, 함수명 main이식별자에해당한다. 57

Motor Control 이러한모든식별자의이름을지정하기위해서는특별한규칙을갖고있다. 첫글자는반드시밑줄 (_) 및알파벳대문자 (A~Z) 또는알파벳소문자 (a~z) 만가능하며, 숫자는위치할수없지만이후나머지글자는숫자 (0~9) 도가능하다. 2.3.4.1.2 C30 컴파일러키워드 MPLAB C30 컴파일러는 GCC 컴파일러를기반으로하고있으며, 다음그림과같이 32개의 ANSI C 키워드뿐만아니라 12개의추가적인키워드를갖고있다. 이들키워드는다음에소개하도록하겠다. 58

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 2.3.4.1.3 C30컴파일러코멘트사용법코멘트는컴파일러에의해코드가아닌일반텍스트로인식되는부분을말한다. 흔히훌륭한프로그램밍은코드가의도하고자하는바를코멘트를이용해잘설명한것을말하기도한다. 따라서코드작성시다소귀찮더라도코멘트를잘이용하는습관을갖도록하자. 코멘트사용에는단 1줄을코멘트로처리하도록하는싱글라인코멘트와특정부분을코멘트로처리할수있는블록코멘트로분류할수있다. 싱글라인코멘트사용법 : // This is a single line comment 블록코멘트사용법 : /* This is a block comment */ 59

Motor Control 2.3.4.1.4 C30컴파일러변수 C 프로그램에서의변수선언및사용예를보여주고있다. 변수선언은메모리의저장위치를할당하는것이라말할수있다. 즉, 아래예는데이터메모리에워드 (2바이트) 메모리 2개를할당하고, 그이름을각각 a, b라부르기로하자는일종의명령이라고볼수있다. 또다른예를살펴보자. 정수형 (2바이트) 변수, 캐릭터형 (1바이트) 변수, 실수형 (4바이트) 변수를각각하나씩선언하고그이름을 warp_factor, first_letter, length라정했을때컴파일러에의해실제데이터메모리에는다음그림과같이각변수들에대한메모리를할당한다. 다시말해서, 변수는메모리에저장되는위치를가리키는이름이며, 고유의식별자 ( 이름 ) 로선언되어야하며, 또한데이터형을통해사이즈를할당받게된다. 60

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 2.3.4.2 C30 컴파일러데이터형 C 프로그래밍언어에는다음과같이 4개의기본데이터형을갖고있으며, char 및 int 데이터형을정수형데이터라부르며, float 및 double을실수형데이터라부르기도한다. 각각의데이터형이의미하는데이터사이즈가다르므로임베디드프로그래밍에서는사용하는컴파일러의데이터형을반드시숙지하고있어야한다. 참고로, CCS C 컴파일러를사용했던경험이있는독자라면다소생소한것을발견했을것이다. CCS C 컴파일러에서는 int가 8비트즉, 1바이트의데이터사이즈를갖기때문에여타의 C 컴파일러와는차이가있었다. 이는 CCS C 컴파일러가주로 8비트 PIC 마이크로컨트롤러를위한기본데이터형으로 int를사용했기때문으로생각된다. 하지만, ANSI C 뿐만아니라, MPLAB C30, C18 컴파일러및 Hi Tech PICC 컴파일러는 int 데이터형은 16비트즉, 2바이트의데이터사이즈를갖고있으므로기존의 CCS C 컴파일러사용자는이점에주의하길당부한다. C30 컴파일러에서사용하는데이터형의한정어 (Qualifier) 에는 unsigned, signed, short, long이있으며, 이들은특정데이터형의범위및양수또는음수여부등을한정하기위해사용된다. 따라서변수선언시해당변수가갖는데이터사이즈및범위에따라서아래수식어를이용할수있다. 다음그림의한정어가붙은데이터형에서회색의이탤릭체로표기된 int는생략하여사용할수있다. 즉 long과 long int는 32비트의동일한데이터형을갖게된다. 61

Motor Control 참고로, MPLAB C30 컴파일러는 IEEE 754 실수형포맷 (Floating Point Format) 을사용한다. 또한, 컴파일러옵션 fno short double 를사용할경우 double과 long double은동일하게 32비트데이터형을갖게된다. 변수선언에따라데이터가메모리에할당되는예를살펴보자. 일반적으로컴파일러에정렬 (Aligne) 옵션을주지않으면, 첫번째의예와같이선언된순서대로메모리가할당되며이로인해메모리에갭 (Gap) 이발생할수있다. 이경우, 두번째의예와같이같은데이터형의변수를함께선언해주면, 위에서발생했던메모리갭을최소화할수있다. 2.3.4.2.1 C30 컴파일러변수및데이터형실습 MPLAB IDE를이용하여실습을해보도록하자. 절차 1.MPLAB IDE 실행 2. 디바이스선택 1 Menu Configure Select Device 클릭 2 Select Device 윈도우 : Device PIC24FJ128GA010 선택 3 OK 버튼클릭 62

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 3. 프로젝트생성 1 - Menu Project New 클릭 2 - Project Name : Demo1 입력 3 - Project Directory : C:\Temp\Demo1 입력 4 - OK 버튼클릭 63

Motor Control 4. C30 컴파일러선택 1 Menu Project Select Language Toolsuit : MPLAB C30 선택 5. 디바이스링커스크립트파일추가 1 프로젝트매니저윈도우의 Linker Scripts 폴더에서마우스우측버튼클릭 Add Files... 항목선택 2 p24fj128ga010.gld 파일클릭후열기 (Open) 버튼클릭 3 링커스크립트파일위치 : C:\Program Files\Microchip\MPLAB C30\Support\gld 64

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 6. C 소스코드생성하기 1 Menu File New 클릭 2 Menu File Save As 클릭 3 파일이름 : Demo1.c 입력후저장버튼클릭 65

Motor Control 7. 프로젝트에 C 소스코드추가 1 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 2 C:\Temp\Demo1\Demo1.c 선택후열기 (Open) 버튼클릭 66

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 8. C 소스코드입력 이제에디터윈도우의 Demo1.c 파일에다음과같이 C 소스코드를입력하자. //#include <p24fj128ga010.h> #include <stdio.h> #define CONSTANT1 0x50 // decimal 80 char charvariable; short shortvariable; int intvariable; long longvariable; float floatvariable; double doublevariable; // short int // long int int main(void) { charvariable = CONSTANT1; shortvariable = CONSTANT1; intvariable = CONSTANT1; 67

Motor Control longvariable = CONSTANT1; floatvariable = CONSTANT1; doublevariable = CONSTANT1; printf("a char variable requires %d byte.\n", sizeof(char)); printf("a short variable requires %d bytes.\n", sizeof(short)); printf("an int variable requires %d bytes.\n", sizeof(int)); printf("a long variable requires %d bytes.\n", sizeof(long)); printf("a float variable requires %d bytes.\n", sizeof(float)); printf("a double variable requires %d bytes.\n", sizeof(double)); } while(1); 68

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 9. Build Option 설정 1 Menu Project Build Options Project 선택 2 Menu Project Build Options Project General Library Path 설정 : C:\Program Files\Microchip\MPLAB C30\lib 3 Menu Project Build Options Project MPLAB LINK 30 Heap Size : 256 입력 69

Motor Control 10. MPLAB SIM 설정 1 Menu Debugger Select Tool MPLAB SIM 클릭 2 Menu Debugger Settings 클릭 3 Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 11. Build All 1 Menu Project Build All 클릭 (Ctrl + F10) 2 Output Window Build 탭에서메시지확인 : BUILD SUCCEEDED 확인 70

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 12. MPLAB SIM 실행 1 Menu Debugger Run (F9) 클릭 2 Output Window SIM Uart1 탭에서메시지확인 71

Motor Control 13. File Register 를통한변수확인 1 Menu View File Register 클릭 2 ctrl+f 클릭후 charvariable 입력후엔터를누르면, File Register 즉, 데이터메모리에변수가할당된것을확인할수있다. 3 변수가할당된어드레스와값을확인해보자. 2.3.4.3 전처리문 2.3.4.3.1 상수선언 C 프로그래밍에서다음과같이선언하면, float PI = 3.141593; 이경우컴파일러는데이터메모리의 32비트 (4바이트) 영역을할당하여 PI라는이름으로지정하게된다. const float PI = 3.141593; 72

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 PI라는변수는 const 라는키워드로인해프로그램메모리에할당이되며그값은읽기만가능한상수값이된다. 하지만, 임베디드프로그래밍에서이들사용법은데이터메모리또는프로그램메모리를불필요하게사용하고있기때문에효율적이지못한방법이될수있다. 이러한경우 #define 을이용하여사용하게된다. [ 선언법 ] #define PI 3.141593 이경우컴파일러는 PI라는텍스트를 3.141593이라는상수값으로대체하게되며, 컴파일시소스코드에서 PI라는텍스트를만나게되면 3.141593이라는상수값으로대체하게된다. 즉, 어떠한메모리영역을사용하지않고사용될수있다는말이된다. 그러면, #define의사용법에대해알아보자. [ 사용법 ] #define name text [ 선언예 ] #define PI 3.141593 #define FOSC 10.0e6 #define BAUDRATE 9600 또한다음과같이파라미터를이용하여매크로로정의할수도있다. [ 선언예 ] #define PI 3.141593 #define area(r) PI * r * r #define multiply(a,b) a * b 73

Motor Control [ 사용예 ] AreaOfCircle = area(5); MyVar3 = multiply(myvar1, MyVar2); 다음과같이한줄이아닌여러줄을통해선언하는것도가능하다. [ 선언예 ] #define loop(n) for(i=1; i<=n; i++) { printf( %d\n,i); } [ 사용예 ] loop(5); loop(myvariable); #define 문사용시주의할점은문장의끝이세미콜론즉, ; 로끝나서는안된다는것이다. 만약아래와같이선언하게되면어떻게되는지살펴보자. #define MyConst 5; c = MyConst + 3; 이경우 MyConst 는 5; 와동일한텍스트로간주하게되므로, 결과적으로다음과같이사용한결과가된다. 즉, 컴파일시에러를발생시키게될것이다. c = 5; + 3 2.3.4.3.2 전처리문사용실습앞절에서수행했던것과동일한방법으로 Demo2라는프로젝트를만들어보자. 74

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 절차 1. MPLAB IDE 실행 2. 디바이스선택 1 Menu Configure Select Device 클릭 2 Select Device 윈도우 : Device PIC24FJ128GA010 선택 3 OK 버튼클릭 3. 프로젝트생성 1 Menu Project New 클릭 2 Project Name : Demo2 입력 3 Project Directory : C:\Temp\Demo2 입력 4 OK 버튼클릭 4. C30 컴파일러선택 1 Menu Project Select Language Toolsuit : MPLAB C30 선택 5. 디바이스링커스크립트파일추가 1 프로젝트매니저윈도우의 Linker Scripts 폴더에서마우스우측버튼클릭 Add Files... 항목선택 2 p24fj128ga010.gld 파일클릭후열기 (Open) 버튼클릭 - 링커스크립트파일위치 : C:\Program Files\Microchip\MPLAB C30\Support\gld 6. C 소스코드생성하기 - Menu File New 클릭 - Menu File Save As 클릭 - 파일이름 : Demo2.c 입력후저장버튼클릭 7. 프로젝트에 C 소스코드추가 - 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 - C:\Temp\Demo2\Demo2.c 선택후열기 (Open) 버튼클릭 75

Motor Control 8. C 소스코드입력 이제에디터윈도우의 Demo2.c 파일에다음과같이실습할 C 소스코드를입력하자. //#include <p24fj128ga010.h> #include <stdio.h> #define CONSTANT1 0x33 const CONSTANT2 = 0xCC; int variable1 = CONSTANT1; int variable2; //int variable2 = CONSTANT2; //This cannot be done with a constant defined with "const" int main(void) { variable2 = CONSTANT2; printf("the first constant is 0x%X\n", CONSTANT1); printf("the second constant is 0x%X\n", CONSTANT2); } 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 설정 1 Menu Debugger Select Tool MPLAB SIM 클릭 2 Menu Debugger Settings 클릭 3 Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 76

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 11. Build All 1 Menu Project Build All 클릭 (Ctrl + F10) 2 Output Window Build 탭에서메시지확인 : BUILD SUCCEEDED 확인 12. MPLAB SIM 실행 - Menu Debugger Run (F9) 클릭 - Output Window SIM Uart1 탭에서메시지확인 13. Watch 윈도우사용하기 - Menu View Watch 클릭 - 그림과같이 Symbol Name 컬럼의하단의빈칸을마우스로클릭한후하나씩입력한다. - variable1, variable2, CONSTANT1, CONSTANT2 - 각각의심벌이름과그값을소스코드와비교하여확인한다. - 각각의심벌이름과 Address 컬럼의내용을확인한다. * variable1, variable2 : 데이터메모리영역의 0x08C2, 0x08C4 에할당되었다. 77

Motor Control * CONSTANT2 : 프로그램메모리영역의 0x011D0에할당되었다. P 라는마크는프로그램메모리를의미함. * CONSTANT1 : 어떠한메모리할당도하지않았다는것을의미한다. 2.3.4.3.3 C30 컴파일러의상수 (literal) C30 컴파일러는정수형, 실수형 (Floating Point), 문자 (Character), 문자열 (String) 총 4 가지기본상수형을갖고있다. 정수형과실수형은콤마 (,) 와빈공간 (space) 를사용할수없으며, 그값은자신의형이가질수있는범위를초과할수없고, 음수부호 (-) 가앞에올수있다. 78

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 2.3.4.3.3.1 정수형상수 <10진수표기 > 0 값을제외한다른값은 0 으로시작해서는안되며사용할수있는문자는 0~9이다. - 올바르게사용한예 : 0 5 127 1021 65535 - 잘못사용한예 : 32,767 25.0 1 024 0552 <16진수표기 > 0x (zero x) 또는 0X 로시작해야하며, 사용할수있는문자는 0~9와 A~F 또는 a~f이다. - 올바르게사용한예 : 0x 0x1 0x1A2B 0xBEEF - 잘못사용한예 : 0x5.3 0EA12 0xEG 53h <8진수표기 > 0 (zero) 로시작해야하며사용할수있는문자는 0~7이다. - 올바르게사용한예 : 0 01 012 073125 - 잘못사용한예 : 05.3 0o12 080 53o * 8진수표기법은 ANSI C 표준이지만, 요즘은거의사용되지않고있다. <2진수표기 > 0b 또는 0B 로시작해야하며사용할수있는문자는 0~1이다. - 올바르게사용한예 : 0b 0b1 0b1101001100001111 - 잘못사용한예 : 0b1.0 01100 0b12 10b * 2진수표기법은 ANSI C 에서명시하고있지않지만, 유용하게사용될수있기때문에 대부분의컴파일러에서지원이되고있다. 79

Motor Control < 한정어 > 변수와유사하게상수값도숫자의끝에첨자를사용하여특정데이터형으로변환할수있다. unsigned ( U 또는 u 사용 ) : 25U long ( L 또는 l 사용 ) : 25L unsigned long( UL 또는 ul 이용 ) : 0xF5UL * 첨자가없는숫자는 signed short 로간주한다. 2.3.4.3.3.2 실수형상수 10진수정수형상수와동일하게표기하며, 소수점 (.) 과급수를표기하기위한 e 를사 용할수있다. - 올바르게사용한예 : 2.56e 5 10.4378 48e8 0.5 - 잘못사용한예 : 0x5Ae 2 02.41 F2.33 2.3.4.3.3.3 문자형상수단일인용부호 ( ) 를사용하여표기해야하며, 한글자의프린트가능한문자또는 \ 을사용한확장문자중단일문자즉, 한글자만사용해야한다. - 올바르게사용한예 : a T \n 5 @ ( 스페이스 ) - 잘못사용한예 : me 23 2.3.4.3.3.4 문자열상수 이중인용부호 ( ) 를사용하여표기해야하며, 프린트가능한문자및 \ 을사용한 확장문자들을이용할수있고, 문자열의끝은널문자 ( \0 ) 가자동으로채워진다. - 올바르게사용한예 : Microchip\0, Hi\n, PIC, 2500, - 잘못사용한예 : He said, Hi 80

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 ex) char color[3] = RED ; color[0] = R color[1] = E color[2] = D ex) char color[] = RED ; color[0] = R color[1] = E color[2] = D color[3] = \0 < 확장문자예 > 2.3.4.3.3.5 printf() 함수 printf() 함수는 C 언어표준라이브러리함수로써일반적으로텍스트를모니터또는프린터에출력하기위해사용하며, 임베디드시스템에서는 UART를통한출력으로사용되기도한다. 이미앞의실습에서사용한바와같이 MPLAB IDE의 MPLAB SIM에서는 Uart1 윈도우를통해그출력값을확인할수있도록지원하고있다. - 사용법 : printf( ControlString, arg_1, arg_2,..., arg_n); 81

Motor Control - 사용예 : printf( LoopCount = %d, i); printf( a = %d \n b = %d\n, a, b); < 출력포맷을위한변환문자 > 디버깅을위한유용한문자열포맷사용예 1) 16진수 4자리값출력 ( 예 : 0x00F8) printf( Address of x = %#06x\n, x_ptr); - # : 16진수값앞에 0x 붙이는옵션 - 06 : 6글자출력옵션 (0 포함 ) - x : 16진수출력옵션 2) 16진수대문자출력 printf( Address of x = 0x%#04X\n, x_ptr); - 04 : 4글자출력옵션 (0 포함 ) - X : 16진수대문자로출력옵션 82

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 2.3.4.3.3.6 printf() 함수실습 전처리문사용실습앞절에서수행했던것과동일한방법으로 Demo3라는프로젝트를만들어보자. 절차 1. MPLAB IDE 실행 2. 디바이스선택 - Menu Configure Select Device 클릭 - Select Device 윈도우 : Device PIC24FJ128GA010 선택 - OK 버튼클릭 3. 프로젝트생성 - Menu Project New 클릭 - Project Name : Demo3 입력 - Project Directory : C:\Temp\Demo3 입력 - 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 클릭 - 파일이름 : Demo3.c 입력후저장버튼클릭 7. 프로젝트에 C 소스코드추가 - 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 - C:\Temp\Demo3\Demo3.c 선택후열기 (Open) 버튼클릭 83

Motor Control 8. C 소스코드입력 이제에디터윈도우의 Demo3.c 파일에다음과같이실습할 C 소스코드를입력하자. //#include <p24fj128ga010.h> #include <stdio.h> int main(void) { printf("25 as decimal (d): %d\n", 25); printf("'a' as character (c): %c\n", 'a'); printf("'a' as decimal (d): %d\n", 'a'); printf("2.55 as float (f): %f\n", 2.55); printf("2.55 as decimal (d): %d\n", 2.55); printf("6.02e23 as exponent (e): %e\n", 6.02e23); printf("6.02e23 as decimal (d): %d\n", 6.02e23); printf("'microchip' as string (s): %s\n", "Microchip"); printf("'microchip' as decimal (d): %d\n", "Microchip"); } 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 설정 3 Menu Debugger Select Tool MPLAB SIM 클릭 4 Menu Debugger Settings 클릭 5 Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 11. Build All 6 Menu Project Build All 클릭 (Ctrl+F10) 7 Output Window Build 탭에서메시지확인 : BUILD SUCCEEDED 확인 84

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 12. MPLAB SIM 실행 1 Menu Debugger Run(F9) 클릭 2 Output Window SIM Uart1 탭에서메시지확인 2.3.4.4 연산자 (Operators) 2.3.4.4.1 산술연산자 C30 컴파일러의산술연산자는다음표와같으며, 산술연산자사용시피연산자의데이터형에따라그결과값이결정되므로주의를필요로한다. 다음예를살펴보자. 85

Motor Control 다음예에서보는바와같이동일한값으로나누기연산을하지만그결과값은다르게되는것을알수있다. 즉, c = a / b; 연산을수행할때우측항부터연산을한후그결과값을좌측항의변수에저장하게되는데두개의피연산자가정수형데이터일때는그결과값이정수형이되고, 하나또는두개의피연산자가실수형일때는그결과값이실수형이되기때문이다. 따라서이러한연산을사용할때는데이터형에주의해서사용하도록해야한다. 2.3.4.4.2 대입연산자대입연산자는특정값을특정저장공간에저장또는대입하는연산자이다. 즉, x += 5; 는 x = x + 5; 와같은표현이되며, 연산순서는우측항을먼저계산한후그결과값을좌측항에대입하게된다. 2.3.4.4.3 증감연산자증감연산자는다음예에서보는바와같이전치 (Postfix) 및후치 (Prefix) 연산자로사용함에따라서그결과값이달라질수있으므로주의해서사용해야한다. 86

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 2.3.4.4.4 관계연산자관계연산자는두개의피연산자를비교하여그결과값이참 (TRUE) 이면 1, 거짓 (FALSE) 이면 0 을발생하게된다. C 프로그래밍에익숙하지않은엔지니어들이흔히범하는오류중한가지가대입연산자 (=) 와관계연산자 (==) 사용에있다. 참고로, 조건문에서 0이아닌값은항상참 (TRUE), 0은거짓 (FALSE) 으로해석된다. 다음예를통해한번살펴보자. 87

Motor Control x = 2; if ( x == 5 ) // x가 5와같은지테스트를한후 False 이므로 printf() 미실행 { printf( OK! x is equal to 5 ); } x = 2; if ( x = 5 ) // x에 5를대입한후 x는 0이아니므로, True 발생, 따라서 printf() 실행 { printf( Oops! ); } 이미설명했듯이조건문에서대입연산자를쓸때는위와같은오류를범하기쉬우며, 수천라인이상되는코딩에서이와같은오류를찾는것은상당히어려운일이아닐수없다. 2.3.4.4.5 논리연산자다음과같이논리연산자에는논리곱 (AND) 및논리합 (OR) 연산자가있으며, 단항연산자로써논리부정 (NOT) 연산자가있다. 이들연산자의결과값은참일때 1(TRUE), 거짓일때 0(FALSE) 를발생시킨다. 2.3.4.4.6 2진논리연산자 2진논리연산자는각각의비트와비트가대응하여연산된결과값을발생하는연산자이다. 88

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 2.3.4.4.7 쉬프트연산자쉬프트연산자는왼쪽및오른쪽으로쉬프트하기위한연산자가있다. 왼쪽쉬프트연산자의경우, 왼쪽으로쉬프트되어밀려난왼쪽최상위비트 (MSB) 는사라지게되며, 오른쪽최하위비트 (LSB) 는 0 로채워진다. 오른쪽쉬프트연산자의경우, 데이터형에따라서그결과값이달라질수있으므로주의를요한다. 최하위비트 (LSB) 는사라지게되고 unsigned로선언된데이터의경우최상위비트는 0 로채워지게되고, sign으로선언된경우는부호 (0/1) 에따라서결정된다. 89

Motor Control 2.3.4.4.8 메모리어드레싱연산자메모리연산자는다음표와같이포인터, 배열, 구조체및공용체사용을위한어드레싱연산자가지원된다. 2.3.4.4.9 기타연산자지금까지설명한연산자외에함수호출, 형변환연산자, 삼항연산자, 콤머연산자등이지원되고있다. 다음예에서보는바와같이특정연산에있어서형변환연산자는유용하게사용될수있는연산자이다. 90

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 2.3.4.4.10 연산자우선순위연산자를여러개사용하였을경우괄호가가장최우선하므로, 아래우선순위를암기하는것보다는괄호연산자를적절히사용하여오류를방지하는것이최선의방법이라할수있다. 91

Motor Control 다음의예는일부연산에대한컴파일러의연산우선순위에의해결정된실제연산순위를보여주고있다. 2.3.4.4.11 연산자실습앞절에서수행했던것과동일한방법으로 Demo4라는프로젝트를만들어보자. 92

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 절차 1. MPLAB IDE 실행 2. 디바이스선택 - Menu Configure Select Device 클릭 - Select Device 윈도우 : Device PIC24FJ128GA010 선택 - OK 버튼클릭 3. 프로젝트생성 - Menu Project New 클릭 - Project Name : Demo4 입력 - Project Directory : C:\Temp\Demo4 입력 - 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 클릭 - 파일이름 : Demo4.c 입력후저장버튼클릭 7. 프로젝트에 C 소스코드추가 - 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 - C:\Temp\Demo4\Demo4.c 선택후열기 (Open) 버튼클릭 93

Motor Control 8. C 소스코드입력 이제에디터윈도우의 Demo4.c 파일에다음과같이실습할 C 소스코드를입력하자. //#include <p24fj128ga010.h> #include <stdio.h> int main(void) { int x = 10; int y, z; float a, b, c, d; int i = 1, j = 0, k = 5; char m, n = 255; a = x + 5; b = x / 4; c = (float)x / 4; d = x + 0.55; y = a + b; z = a + 0.55; j = i++; k += i; m = n + 2; } 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 입력 94

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 10. MPLAB SIM 설정 H. Menu Debugger Select Tool MPLAB SIM 클릭 I. Menu Debugger Settings 클릭 J. Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 11. Build All K. Menu Project Build All 클릭 (Ctrl + F10) L. Output Window Build 탭에서메시지확인 : BUILD SUCCEEDED 확인 12. Watch Window 설정 - Menu View Watch Window 클릭 - Symbol Name에변수추가하기 : 아래그림을참조하여 x, y, z, a, b, c, d, i, j, k, m, n 각각의변수를추가 - 변수들의해당값들은컴파일후에디스플레이되므로, 화면과다를수있음 13. MPLAB SIM 실행 A. Menu Debugger Run (F9) 클릭 14. Watch Window 변수값확인 - 각각의변수값확인 95

Motor Control 2.3.4.5 제어문 (Control Statement) 제어문은흔히알고있는 if~else 문과같이실행순서를제어하기위한문을말한다. 2.3.4.5.1 if 문조건문이참 (True) 면다음문즉, 중괄호 ({}) 안의문을수행하고, 거짓 (False) 이면실행하지않는다. 2.3.4.5.2 if~else문이중조건문을이용하여두가지실행문을선택적으로실행할수있는제어문이다. 2.3.4.5.3 if~else if~else문다중 if문을이용하여실행문을선택적으로실행할수있는제어문이다. 96

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 2.3.4.5.4 switch case 문다중 if 문과유사한효율적인제어문이다. 2.3.4.5.5 for 문특정회수동안블록안의코드를반복하기위한제어문이다. 2.3.4.5.6 while 문조건문이참 (True) 인동안블록안의코드를반복하기위한제어문이며, 조건문에따라서단한번도블록안의코드를실행하지않을수있다. 97

Motor Control 2.3.4.5.7 do while 문블록안의코드를수행한후조건문이참 (True) 인지판단하여반복을수행하는제어문이다. 다만, while 문과는달리블록안의코드를무조건한번은실행하고조건문에따라서단한번도블록안의코드를실행하지않을수있다. 2.3.4.5.8 break 문 break문은루프 (Loop) 문에서즉시빠져나오기위한명령어로사용이되며, break를만나게되면현재의카운팅을중지하고, 루프문을탈출하게된다. 또한앞에서설명한 switch case 에서사용되기도한다. 아래예에서는변수 i는 0~5까지만카운팅을하고, while 문을빠져나가게된다. 2.3.4.5.9 continue 문 continue문은현재의블록안의나머지부분실행을생략하고, break와는달리카운팅을계속적으로수행하기위해다시루프 (loop) 문으로돌아간다. 98

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 2.3.4.5.10 조건문및루프문실습앞절에서수행했던것과동일한방법으로 Demo5라는프로젝트를만들어보자. 절차 1. MPLAB IDE 실행 2. 디바이스선택 - Menu Configure Select Device 클릭 - Select Device 윈도우 : Device PIC24FJ128GA010 선택 - OK 버튼클릭 3. 프로젝트생성 - Menu Project New 클릭 - Project Name : Demo5 입력 - Project Directory : C:\Temp\Demo5 입력 - OK 버튼클릭 4. C30 컴파일러선택 - Menu Project Select Language Toolsuit : MPLAB C30 선택 5. 디바이스링커스크립트파일추가 - 프로젝트매니저윈도우의 Linker Scripts 폴더에서마우스우측버튼클릭 Add Files... 항목선택 - p24fj128ga010.gld 파일클릭후열기 (Open) 버튼클릭 99

Motor Control * 링커스크립트파일위치 : C:\Program Files\Microchip\MPLAB C30\Support\gld 6. C 소스코드생성하기 - Menu File New 클릭 - Menu File Save As 클릭 - 파일이름 : Demo5.c 입력후저장버튼클릭 7. 프로젝트에 C 소스코드추가 - 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 - C:\Temp\Demo5\Demo5.c 선택후열기 (Open) 버튼클릭 8. C 소스코드입력이제에디터윈도우의 Demo5.c 파일에다음과같이실습할 C 소스코드를입력하자. //#include <p24fj128ga010.h> #include <stdio.h> int i; int main(void) { for (i=0; i < 5; i++) { printf("for loop iteration #%d\n", i); } i = 0; //Try i = 0 and i = 5 while(i < 5) { printf("while loop iteration #%d\n", i++); } i = 0; //Try i = 0 and i = 5 100

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 do { printf("do loop iteration #%d\n", i++); } while(i < 5); } //Loop forever 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 설정 A. Menu Debugger Select Tool MPLAB SIM 클릭 B. Menu Debugger Settings 클릭 C. Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 11. Build All D. Menu Project Build All 클릭 (Ctrl + F10) E. Output Window Build 탭에서메시지확인 : BUILD SUCCEEDED 확인 12. MPLAB SIM 실행 A. Menu Debugger Run (F9) 클릭 B. Output Window에서출력값확인 101

Motor Control 2.3.4.5.11 switch 문실습앞절에서수행했던것과동일한방법으로 Demo6라는프로젝트를만들어보자. 절차 1. MPLAB IDE 실행 2. 디바이스선택 - Menu Configure Select Device 클릭 - Select Device 윈도우 : Device PIC24FJ128GA010 선택 - OK 버튼클릭 3. 프로젝트생성 - Menu Project New 클릭 - Project Name : Demo6 입력 - Project Directory : C:\Temp\Demo6 입력 - OK 버튼클릭 102

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 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 클릭 - 파일이름 : Demo6.c 입력후저장버튼클릭 7. 프로젝트에 C 소스코드추가 - 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 - C:\Temp\Demo6\Demo6.c 선택후열기 (Open) 버튼클릭 8. C 소스코드입력이제에디터윈도우의 Demo6.c 파일에다음과같이실습할 C 소스코드를입력하자. //#include <p24fj128ga010.h> #include <stdio.h> int channel; int main(void) { channel = 7; switch(channel) { 103

Motor Control } case 2: printf("wbbm Chicago\n"); break; case 3: printf("dvd Player\n"); break; case 4: printf("wtmj Milwaukee\n"); break; case 5: printf("wmaq Chicago\n"); break; case 6: printf("witi Milwaukee\n"); break; case 7: printf("wls Chicago\n"); break; case 9: printf("wgn Chicago\n"); break; case 10: printf("wmvs Milwaukee\n"); break; case 11: printf("wttw Chicago\n"); break; case 12: printf("wisn Milwaukee\n"); break; case 8: case 13: printf("weak signals from South Bend\n"); break; case 14... 69: printf("uhf Station\n"); break; default: printf("no Signal Available\n"); } while(1); // NOTE: case values must be of an integer type (char, int, short, long) 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 설정 F. Menu Debugger Select Tool MPLAB SIM 클릭 G. Menu Debugger Settings 클릭 H. Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 11. Build All I. Menu Project Build All 클릭 (Ctrl + F10) J. Output Window Build 탭에서메시지확인 104

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 : BUILD SUCCEEDED 확인 12. MPLAB SIM 실행 A. Menu Debugger Run (F9) 클릭 B. Output Window에서출력값확인 2.3.4.6 함수모든 C 프로그램은하나이상의함수들로구성되어있다. 가장흔히볼수있는프로그램의시작부분인 main() 함수를그예로들수있다. 프로그래밍에서코딩을하다보면반복적으로사용되는연산또는명령어들을만나게되는데, 이와같은부분을모듈화하여필요할때마다불러서사용할수있도록지원해주는기능을함수라말할수있다. 이들함수는프로그래밍업무를효율적으로관리할수있도록지원할뿐만아니라모듈화된이들함수를재사용할수있기때문에불필요한시간을경감시켜주기도한다. 일례로우리가실습에서자주사용한표준 C 라이브러리함수인 printf() 함수는컴파일러제조사에의해이미만들어졌기때문에쉽게사용할수있었다. 만약이러한함수가없었다면사용자가직접이함수의기능을프로그래밍해야하는번거로움이있었을것이다. 105

Motor Control 2.3.4.6.1 함수의선언문함수의선언은변수선언문과매우흡사하다. 함수는데이터반환수행시반환될데이터의형과동일한데이터형을갖고있어야하며, 변수와마찬가지로함수의이름을갖고있어야한다. 끝으로호출시함수에전달될파라미터를갖고있어야한다. 또한함수내부에추가적인변수를선언할수있는데이를지역변수라부르며이들지역변수들은함수의내부에서만액세스가가능하며, 함수의블록을벗어나는순간소멸된다. 끝으로함수사용시주의할사항은함수의내부에서는함수를선언할수없다는것이다. 106

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 2.3.4.6.2 함수의반환형함수이름의앞에붙이는함수반환형은함수내의 return문에사용되는반환되는데이터의형과동일하게사용하여야한다. 만약함수에의해반환되는값이없다면, 함수의반환형은 void가된다. 2.3.4.6.3 함수의파라미터함수의헤더에서선언된파라미터의이름은함수에서만사용가능한파라미터이다. 따라서이들이름은메인프로그램및다른함수에서사용되는변수와동일한이름의사용이가능하다. 만약함수가파라미터를필요로하지않는경우, void 키워드로대체되어야한다. 2.3.4.6.4 함수선언및호출예다음예는두수중큰수를반환하는사용자함수로써함수의반환형은반환값인변수 z의데이터형인 int와동일하게사용하였음에주목하자. 107

Motor Control 이제사용자함수를호출하기위해서는다음그림과같이함수명과함께함수의인자인파라미터값을지정해주면된다. 2.3.4.6.5 함수의저장클래스 (Storage Class) C30에서모든함수는기본적으로전역함수로처리된다. 따라서프로젝트의모든파일에서참조가능한전역함수는키워드 extern이불필요하며해당파일에서만참조할수있는지역함수로사용할때는키워드 static을사용해야한다. 2.3.4.6.6 함수실습앞절에서수행했던것과동일한방법으로 Demo7라는프로젝트를만들어보자. 절차 1. MPLAB IDE 실행 2. 디바이스선택 - Menu Configure Select Device 클릭 - Select Device 윈도우 : Device PIC24FJ128GA010 선택 - OK 버튼클릭 108

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 3. 프로젝트생성 - Menu Project New 클릭 - Project Name : Demo7 입력 - Project Directory : C:\Temp\Demo7 입력 - 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 클릭 - 파일이름 : Demo7.c 입력후저장버튼클릭 7. 프로젝트에 C 소스코드추가 - 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 - C:\Temp\Demo7\Demo7.c 선택후열기 (Open) 버튼클릭 8. C 소스코드입력이제에디터윈도우의 Demo7.c 파일에다음과같이실습할 C 소스코드를입력하자. 109

Motor Control //#include <p24fj128ga010.h> #include <stdio.h> typedef struct { float re; float im; } complex; // Real part // Imaginary part complex a, b, c; int i, j; complex ComplexAdd(complex x, complex y); int IntegerAdd(int v, int w); int main(void) { a.re = 2.5; a.im = 5.0; b.re = 1.5; b.im = 2.0; i = 3; j = 2; c = ComplexAdd(a,b); printf("c = %f + j%f\n", c.re, c.im); } printf("k = %d\n", i + j); while(1); complex ComplexAdd(complex x, complex y) { complex z; z.re = x.re + y.re; z.im = x.im + y.im; return z; } int IntegerAdd(int v, int w) 110

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 { } return (v + w); 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 설정 K. Menu Debugger Select Tool MPLAB SIM 클릭 L. Menu Debugger Settings 클릭 M. Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 11. Build All N. Menu Project Build All 클릭 (Ctrl + F10) O. Output Window Build 탭에서메시지확인 : BUILD SUCCEEDED 확인 12. MPLAB SIM 실행 A. Menu Debugger Run (F9) 클릭 B. Output Window에서출력값확인 111

Motor Control 2.3.4.7 배열 (Array) 배열은동일한데이터형으로된다중데이터의저장소를말한다. 이들다중데이터는배열의인덱스라불리는순차적으로매겨진번호에의해순차적으로저장되며, 배열의인덱스는 0부터매겨진다. 2.3.4.7.1 배열 (Array) 과문자열 (String) C는음수형문자열을가지고있지않기때문에문자열은항상 char 형배열로취급된다. 또한문자열의끝은널문자 ( \0 ) 로끝나야한다. 112

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 배열의시작주소는배열의이름과같으므로이를이용하여문자열전체를참조할수가있다. 일예로 %s 를이용하면 printf() 함수로문자열전체를출력할수있다. 2.3.4.7.2 다중배열배열은얼마든지다중배열즉, 2차원이상으로사용될수있지만, 일반적으로 3차원배열까지만주로사용한다. 다음예를통해다중배열의결과값을직접확인해보기를바란다. 2.3.4.7.3 배열실습앞절에서수행했던것과동일한방법으로 Demo8라는프로젝트를만들어보자. 113

Motor Control 절차 1. MPLAB IDE 실행 2. 디바이스선택 - Menu Configure Select Device 클릭 - Select Device 윈도우 : Device PIC24FJ128GA010 선택 - OK 버튼클릭 3. 프로젝트생성 - Menu Project New 클릭 - Project Name : Demo8 입력 - Project Directory : C:\Temp\Demo8 입력 - 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 클릭 - 파일이름 : Demo8.c 입력후저장버튼클릭 7. 프로젝트에 C 소스코드추가 - 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 114

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 - C:\Temp\Demo8\Demo8.c 선택후열기 (Open) 버튼클릭 8. 소스코드입력이제에디터윈도우의 Demo8.c 파일에다음과같이실습할 C 소스코드를입력하자. //#include <p24fj128ga010.h> #include <stdio.h> char str1[9] = "Microchip"; char str2[] = "Technology"; int main(void) { printf("%s\n", str1); printf("%s\n", str2); //What's wrong with this definition? //Why does this not do what you might expect? } 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 설정 P. Menu Debugger Select Tool MPLAB SIM 클릭 Q. Menu Debugger Settings 클릭 R. Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 11. Build All S. Menu Project Build All 클릭 (Ctrl + F10) 115

Motor Control T. Output Window Build 탭에서메시지확인 : BUILD SUCCEEDED 확인 12. MPLAB SIM 실행 A. Menu Debugger Run (F9) 클릭 B. Output Window에서출력값확인 2.3.4.8 포인터 (Pointer) 포인터는변수또는함수의어드레스를기억하는변수라말할수있다. 포인터변수의선언은일반변수와동일하게사용하지만이름앞에 * 를붙여서해당변수가포인터임을컴파일러에게알려준다. 한가지주의할사항은포인터의데이터형은이것이가리키는변수의데이터형과동일해야한다는것이다. 포인터변수는일반변수의앞에번지연산자인 & 를추가하여그변수의어드레스를가리키게할수도있다. 포인터는매우중요하게사용되지만 C언어초보자에게는이해하기가쉽지가않다. 포인터에대한이해가부족한독자는필히 C언어기초서적등을통해포인터에대한충분한지식을쌓을수있기를당부한다. 2.3.4.8.1 포인터변수의사용예그럼, 포인터변수의사용에대해살펴보자. int *p = &x; printf( The value of x : %d\n, *p); printf( The address of x : %d\n, p); // 포인터변수 p = 변수 x의어드레스 // 변수 x의값을출력 // 변수 x의어드레스를출력 또다른예를살펴보자. 다음예제는두변수 x,y의어드레스및값을포인터변수 p를이용하여알수있는예이다. 116

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 어셈블리에익숙한분들은다음과같이 C언어의포인터사용을이해할수있을것이다. 2.3.4.8.2 포인터변수의연산포인터변수는증 / 감연산자 + 또는 - 연산자를이용하여자신의데이터형에대해어드레스를증가또는감소할수있다. 다음예제를보면좀더이해하기쉬울것으로믿는다. 즉, 실수형포인터변수로선언된 p는 1 증 / 감시어드레스가 1이증 / 감하는것이아니고데이터형만큼, 즉, 4번지씩증 / 감하게된다. 따라서앞에서도말했듯이포인터변수는반드시사용할데이터변수의데이터형과동일하게선언해주어야한다. 117

Motor Control 포인터연산시흔히사용하게되는증 / 감연산자사용시선처리및후처리연산자사용에따라그결과가다르게되므로주의하기를바란다. *p++ : 데이터를가리킨후포인터변수 p를증가한다. [ *(p++) 과동일 ] (*p)++ : 포인터변수 p가가리키는데이터의값을증가시킨다. [ 포인터변수 p는변화없음 ] 잘이해가되지않으면, 다음예를한번살펴보자. 먼저변수 y는포인터변수 p가가리키는주소의데이터즉, x[0] 값이저장되며, 이후포인터변수 p가 1증가하게된다. 즉, 어드레스는 4번지가증가하게되어 x[1] 의어드레스를가리키게된다. 여기서눈치가빠른독자라면포인터변수 p가가리키는배열의값은전혀바뀌지않는다는것을알아냈을것이다. 즉, 포인터를이용해특정메모리의데 118

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 이터를참조할수있다는점이다. 또다른예를한번살펴보자. 다음예에서는포인터변수 p의값을 1 증가한후이값을 y에저장하게된다. 하지만포인터변수 p는증가하지않았다. 즉, 포인터변수 p가가리키는어드레스의데이터값만증가시킬수있다는말이다. 2.3.4.8.3 포인터와배열앞장에서설명했듯이배열의각구성요소즉, 데이터들은연속적으로메모리영역에저장되며이들데이터의최초시작어드레스는배열의이름과같다. 즉, 배열의이름은배열의첫번째데이터가저장되는메모리영역의어드레스와같다는것이다. 따라서아래와같이세가지표현이모두가능하다는말이된다. 2.3.4.8.4 함수인자로써의포인터일반적으로함수의인자는일반적인변수를이용하지만, 다음예와같이포인터를이용하여불필요한메모리사용을제거할수있다. 여기에서사용한 square() 함수는포인터인자가가리키는변수의값을제곱으로변경해주는결과를얻게된다. 119

Motor Control 2.3.4.8.5 포인터의기타사용예포인터변수도필요시다음예와같이배열의형태로이용할수있다. 다음예는시리얼통신또는 LCD 디스플레이등에서문자열을출력하기위해흔히사용하는방법중하나이다. 120

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 2.3.4.8.6 포인터실습앞절에서수행했던것과동일한방법으로 Demo9라는프로젝트를만들어보자. 절차 1. MPLAB IDE 실행 2. 디바이스선택 - Menu Configure Select Device 클릭 - Select Device 윈도우 : Device PIC24FJ128GA010 선택 - OK 버튼클릭 3. 프로젝트생성 - Menu Project New 클릭 - Project Name : Demo9 입력 - Project Directory : C:\Temp\Demo9 입력 - OK 버튼클릭 4. C30 컴파일러선택 - Menu Project Select Language Toolsuit : MPLAB C30 선택 121

Motor Control 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 클릭 - 파일이름 : Demo9.c 입력후저장버튼클릭 7. 프로젝트에 C 소스코드추가 - 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 - C:\Temp\Demo9\Demo9.c 선택후열기 (Open) 버튼클릭 8. C 소스코드입력이제에디터윈도우의 Demo9.c 파일에다음과같이실습할 C 소스코드를입력하자. //#include <p24fj128ga010.h> #include <stdio.h> int x,y; int *p; int main(void) { x = 5; p = &x; printf("the variable x is located at address 0x%X\n", &x); printf("the value of x is %d\n", x); 122

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 printf("the pointer p is located at address 0x%X\n", &p); printf("the value of p is 0x%X\n", p); printf("the value pointed to by *p = %d\n", *p); *p = 10; printf("the variable x is located at address 0x%X\n", &x); printf("the value of x is %d\n", 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 설정 U. Menu Debugger Select Tool MPLAB SIM 클릭 V. Menu Debugger Settings 클릭 W. Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 11. Build All X. Menu Project Build All 클릭 (Ctrl + F10) Y. Output Window Build 탭에서메시지확인 : BUILD SUCCEEDED 확인 12. MPLAB SIM 실행 A. Menu Debugger Run (F9) 클릭 B. Output Window에서출력값확인 123

Motor Control 2.3.4.8.7 배열과포인터실습앞절에서수행했던것과동일한방법으로 Demo10라는프로젝트를만들어보자. 절차 1. MPLAB IDE 실행 2. 디바이스선택 - Menu Configure Select Device 클릭 - Select Device 윈도우 : Device PIC24FJ128GA010 선택 - OK 버튼클릭 3. 프로젝트생성 - Menu Project New 클릭 - Project Name : Demo10 입력 - Project Directory : C:\Temp\Demo10 입력 - OK 버튼클릭 124

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 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 클릭 - 파일이름 : Demo10.c 입력후저장버튼클릭 7. 프로젝트에 C 소스코드추가 - 프로젝트매니저윈도우의 Source Files 폴더에서마우스우측버튼클릭 Add Files 선택 - C:\Temp\Demo10\Demo10.c 선택후열기 (Open) 버튼클릭 8. 소스코드입력이제에디터윈도우의 Demo10.c 파일에다음과같이실습할 C 소스코드를입력하자. //#include <p24fj128ga010.h> #include <stdio.h> char x[7] = {'a', 'b', 'c', 'd', 'e', 'f', '\0'}; char *p; int y[7] = {0, 1, 2, 3, 4, 5, 6}; int *q; int i; 125

Motor Control int main(void) { p = &x; //also p = &x[0] while (*p!= '\0') { printf("%c\n", *p); p++; //Watch the value of p incrementing in the watch window } q = &y; for (i = 0; i < 7; i++) { (*q)++; printf("y[%d] = %d\n", i, *q); q++; //Watch the value of q incrementing in the watch window } /* for (i = 0; i< 7; i++) { printf("y[%d] = %d\n", i, *q); (*q++)++; } */ 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 설정 Z. Menu Debugger Select Tool MPLAB SIM 클릭 AA. Menu Debugger Settings 클릭 126

Chapter 2. 마이크로칩개발툴및 C 언어프로그래밍 BB. Menu Debugger Settings Uart1 IO 클릭 : Enable Uart1 IO, Rewind Input, Window 선택 11. Build All CC. Menu Project Build All 클릭 (Ctrl + F10) DD. Output Window Build 탭에서메시지확인 : BUILD SUCCEEDED 확인 12. MPLAB SIM 실행 A. Menu Debugger Run (F9) 클릭 B. Output Window에서출력값확인 2.3.4.9 구조체 (Structure) 와공용체 (Union) 데이터를일괄적으로관리하는방법에는앞에서배운배열외에도구조체를이용할수있다. 배열은동일한데이터형으로이루어진데이터들의집합인반면, 구조체는동일한자료형은물론서로다른자료형까지도일괄적으로관리할수있다. 127