컴퓨터를 이용한 계측/제어 자동화...

227
컴퓨터를 이용한 계측/제어 자동화 실험

Upload: danganh

Post on 09-Sep-2018

230 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

컴퓨터를 이용한

계측/제어 자동화 실험

Page 2: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍
Page 3: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

저작권자 : 커미조아

Copyright (c) by COMIZOA CO.,LTD. All right reserved.

2002 년 12 월 26 일 초판 인쇄

이 사용자 설명서는 저작권법에 의해 보호되고 있습니다.

커미조아의 사전 서면 동의 없이 사용자설명서의 일부 또는 전체를 어떤 형태로든

복사, 전재할 수 없습니다.

Hardware Support : [email protected]

Software Support : [email protected]

커미조아

www.comizoa.co.kr

www.comizoa.com

Tel) 042 – 861 – 3301~3

Fax) 042 – 861 – 3304

Page 4: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍
Page 5: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

차 례

제 1 장 컴퓨터 인터페이스 개요 2

1.1 컴퓨터 인터페이스 기초 이론 ......................................................................................... 3

1.2 COMI-SD104 다기능(MULTI-FUNCTION) 보드 ................................................................ 6

1.3 COMI-EDKIT1 교육용 센서 키트 ................................................................................. 14

1.4 윈도우 프로그래밍 기초 ................................................................................................ 17

1.5 실험결과 및 과제 보고서 ............................................................................................... 38

제 2 장 디지털 입력을 이용한 센서 계측 40

2.1 COMI-SD104 의 디지털 입력 관련 라이브러리 함수.............................................. 41

실험 2.1 근접 스위치를 이용한 시스템 감시 .................................................................... 43

실험 2.2 광전센서를 이용한 시스템 감시 ......................................................................... 63

제 3 장 디지털 출력을 이용한 시스템 제어 84

3.1 COMI-SD104 의 디지털 출력 관련 라이브러리 함수 ................................................ 85

실험 3.1 디지털 출력을 이용한 LED 구동 실험 .............................................................. 86

실험 3.2 디지털 출력을 이용한 7-세그먼트 구동 실험 ................................................... 96

실험 3.3 디지털 출력을 이용한 릴레이 스위치 구동 실험 ........................................... 108

실험 3.4 디지털 출력을 이용한 스텝모터 구동 실험 .................................................... 112

제 4 장 카운터를 이용한 펄스 계수 131

4.1 플립플롭(FF, FLIP-FLOP) ................................................................................................ 131

4.2 카운터 ............................................................................................................................. 135

4.3 COMI-SD104 보드의 카운터 관련 라이브러리 함수............................................... 137

실험 4.1 카운터를 이용한 엔코더 펄스 계수 실험 .......................................................... 139

제 5 장 아날로그 출력을 이용한 시스템 제어 152

Page 6: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 5.1 DC 모터 속도 제어 ............................................................................................. 155

제 6 장 아날로그 입력을 이용한 물리량 계측 170

6.1 동시형 A/D 변환 회로 ................................................................................................. 170

6.2 계수형 A/D 변환 회로 ................................................................................................. 171

실험 6.1 백금측온센서를 이용한 온도 계측 ................................................................... 175

실험 6.2 포텐셔미터를 이용한 각도 측정 ....................................................................... 187

APPENDIX A 도스용 예제 198

A.1 디지털 입력을 이용한 근접센서 또는 광전센서 상태 계측 .................................. 198

A.2 1 채널 디지털 출력 제어하기..................................................................................... 198

A.3 다채널 디지털 출력 제어하기.................................................................................... 199

A.4 아날로그 출력 ............................................................................................................... 200

A.5 아날로그 입력 ............................................................................................................... 201

APPENDIX B 센서 매뉴얼 204

A.1 근접스위치 .................................................................................................................... 204

A.2 광전 센서....................................................................................................................... 209

A.3 L297 - STEP MOTOR CONTROLLER IC .................................................................... 214

A.4 엔코더 ............................................................................................................................ 217

Page 7: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 1 장

컴퓨터 인터페이스 개요

제 1 장에서는 컴퓨터를 이용한 계측/제어를 위한 인터페이스의 원리를 이해하고 인

터페이스 장치인 COMI-SD104 의 사용법 및 윈도우 프로그래밍 기법에 대한 기초지

식을 습득한다.

-1-

Page 8: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 1 장. 컴퓨터 인터페이스 개요

제 1 장 컴퓨터 인터페이스 개요

제 1 장에서는 컴퓨터를 이용한 계측/제어를 위한 인터페이스의 원리를 이해하고 인

터페이스 장치인 COMI-SD104 의 사용법 및 윈도우 프로그래밍 기법에 대한 기초지

식을 습득한다.

실험 예비 사항 -. 컴퓨터의 구성요소에 대하여 조사하라.

-. 산업현장에서 많이 사용되고 있는 센서의 종류 및 원리에 대하여 조사하라.

-. 산업현장에서 사용되고 있는 계측/제어 자동화의 예를 조사하라.

-. 아날로그 신호와 디지털 신호의 차이점에 대하여 조사하라.

-. Visual C++을 이용한 프로그램 제작 방법에 대한 기초지식을 준비하라.

실험 목적 -. 컴퓨터를 이용한 전자ㆍ기계 자동제어 시스템의 구성 및 컴퓨터와 외부기기간

의 정보 전송의 원리를 이해하고 윈도우 프로그래밍의 기초 지식을 습득한다.

실험 내용 -. 컴퓨터의 구성을 이해한다.

-. 컴퓨터와 외부기기간의 인터페이스를 이해한다.

-. 대화상자 기반의 윈도우 프로그래밍 기초지식을 습득한다.

실험 장비 -. 컴퓨터 및 주변기기

-. COMI-SD104 Multi-function DAQ Board

-. Visual C++

-2-

Page 9: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

컴퓨터 인터페이스 기초이론

1.1 컴퓨터 인터페이스 기초 이론

컴퓨터 인터페이스는 CPU 와 외부 기기의 사이에 위치하여 데이터 표현 형식의

차이와 동작 타이밍을 조정하고 CPU 와 외부 기기 사이에서 정확한 데이터가 전

달될 수 있게 하는 회로를 지칭한다. 다시 말해 컴퓨터 인터페이스는 컴퓨터와 외

부 기기 사이의 서로 다른 정보 형태를 변환하여 통일시키는 역할을 한다. 이를

위해 컴퓨터 내부의 정보 통로인 어드레스 버스, 데이터 버스 및 컨트롤 버스 중

필요한 버스 선을 외부 기기의 필요한 신호선과 연결될 수 있도록 제작하여야 한

다.

컴퓨터를 사용하여 계측/제어하기 위한 시스템의 구성은 [그림 1.1]과 같이 이루

어진다.

컴퓨터

A/D, D/I,

D/A, D/O

리밋스위치

온도센서

퍼텐쇼미터

M 모터

릴레이스위치

램프

계측/제어 대상물

센서

구동기인터페이스 장치

[그림 1.1] 컴퓨터를 이용한 계측/제어 시스템 구성도

컴퓨터는 시스템의 상태를 계측하기 위해서 계측 대상물에 센서를 부착하여 계

측 대상의 상태를 계측할 수 있다. 그러나 센서의 출력이 대부분 아날로그 신호로

이루어지기 때문에 컴퓨터가 센서의 값을 직접 읽어들일 수가 없다. 센서의 출력

이 디지털 신호로 출력되더라도 신호의 크기나 형태가 다르기 때문에 이 또한 컴

퓨터가 직접 값을 읽어들일 수는 없다. 그리고 컴퓨터가 시스템을 제어하기 위해

-3-

Page 10: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 1 장. 컴퓨터 인터페이스 개요

서는 제어 대상 구동기에 맞는 전기적 신호를 출력할 수 있어야 하는데 컴퓨터

자체는 이러한 신호를 직접 출력할 수 없다. 따라서 컴퓨터를 이용하여 시스템을

계측/제어하기 위해서는 일반적으로 DAQ(Data Acquisition) 보드라고 일컬어지는

인터페이스 장치를 매개로 하여 센서의 상태를 계측하거나 구동기에 적절한 신호

를 공급한다.

DAQ 보드로써 대표적인 것으로는 아날로그 입력(Analog Input) 보드, 아날로그

출력(Analog Output) 보드, 디지털 입력(Digital Input) 보드, 디지털 출력(Digital

Output) 보드, 카운터(Counter) 보드등이 있다. 그리고 최근에는 모션을 제어하기

위한 모션제어전용(Motion Controller) 보드도 DAQ 보드로서 많이 사용된다.

아날로그 입력 보드는 일반적으로 A/D(Analog to Digital) 변환기라고도 불리우며

아날로그 신호를 계측하여 컴퓨터가 인식할 수 있는 디지털 데이터로 변환해주는

장치이다. [그림 1.1]에서와 같이 아날로그 입력 보드를 이용하면 PC 에서 온도 센

서, 로드셀, 포텐셔미터 등과 같이 아날로그 형식으로 신호를 출력하는 센서의 출

력을 계측할 수 있어서 물리량을 계측하는데 많이 사용된다. 아날로그 출력 보드

는 일반적으로 D/A(Digital to Analog) 변환기라고도 불리우며 컴퓨터의 디지털 데

이터를 아날로그 신호로 출력하여 DC 모터와 같이 아날로그 신호에 의해 구동되

는 구동기(Actuator)를 제어할 수 있도록 해주는 장치이다. 디지털 입력 보드는 광

센서, 근접센서 등과 같이 전기적 디지털 신호를 출력하는 센서들의 신호를 컴퓨

터가 인식할 수 있는 디지털 데이터로 변환해주는 장치이며 주로 ON/OFF 상태를

감시하는 용도로 많이 사용된다. 디지털 출력 보드는 주로 스위치를 제어하는데

많이 사용되며 컴퓨터의 ON/OFF 로직을 전기적인 디지털 신호로 변환해주는 역

할을 한다.

컴퓨터와 외부기기는 컴퓨터 인터페이스 카드를 컴퓨터 주기판(Mainboard)의 슬

롯(Slot)에 꽂으면 바로 접속된다. 컴퓨터의 주요 구성은 [그림 1.2]와 같다. 컴퓨터

는 전자회로 및 각종장치로 이루어진 기계적인 부분인 하드웨어(Hardware)와 하드

웨어를 활용하여 필요한 정보를 얻기위해 작성하는 프로그램인 소프트웨어

(Software)로 구성되어 있다. [그림 1.2]에서 도시된 하드웨어의 구성을 살표보면 중

앙처리장치인 CPU, 기억장치, 입출력 장치의 3 가지 요소로 구성된다. 먼저 CPU

는 연산을 수행하는 부분으로 컴퓨터에서 가장 중심이 되는 부분이며 동시에 컴

퓨터 전체를 능동적으로 제어하는 기능도 갖고 있다. 기억장치는 컴퓨터에서 처리

하기 위한 데이터나 프로그램을 기억하기 위한 장치로 주기억장치나 보조기억장

-4-

Page 11: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

컴퓨터 인터페이스 기초이론

치로 구분되는데 그림에 나타낸 RAM 과 ROM 은 주기억장치에 해당하며 보조기

억장치로는 플로피디스크 장치(Floppy disk driver)와 하드디스크 장치, CD-ROM 등

이 있다. 입출력 장치는 컴퓨터와 주변장치 또는 외부 장치와의 정보를 교환하기

위한 장치이다. 주변장치로는 처리하고자 하는 자료 및 정보를 외부에서 읽어 기

억장치에 저장시켜주는 입력장치와 CPU 에서 처리된 결과를 명령에 의해 외부로

보내는 출력장치가 있다. 입력장치로는 키보드, 마우스, 조이스틱 등이 있고 출력

장치로는 모니터, 프린터 등이 있다. 마지막으로 버스는 CPU 와 주기억장치, 입출

력 장치의 각 구성요소 및 외부시스템 사이의 정보 전달을 위한 통로이다. 이러한

버스는 크게 데이터를 전송하거나 전송받을 주소를 지정하여주는 어드레스 버스

(Address Bus), CPU 와 메모리 및 I/O 장치 사이의 데이터 교환을 위한 전송로인 데

이터 버스(Data Bus) 그리고 제어 신호의 전송로인 제어버스(Control Bus)로 구성된

다.

CPU

레지스터

연 산 기

제 어 기

기억장치

RAM

ROM

입출력장치

입력포트

출력포트

DATA BUS

ADDRESS BUS

CONTROL BUS

[그림 1.2] 컴퓨터의 기본 구성 개념도

-5-

Page 12: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 1 장. 컴퓨터 인터페이스 개요

1.2 COMI-SD104 다기능(Multi-Function) 보드

COMI-SD104 는 Single Ended 16 채널 또는 Differential 8 채널 아날로그 입력, 2 채널

아날로그 출력 , 각각 8 채널의 디지털 입출력, 그리고 2 채널 카운터를 내장하고 있

는 다기능(Multi-function) DAQ 보드이다. 따라서 COMI-SD104 보드 하나만으로도 웬

만한 시스템의 계측 및 제어를 모두 수행할 수 있다. 이 제품은 32Bits PCI 구조로 설

계되어 Windows Plug and Play 를 지원하여 사용자가 쉽게 장착가능하며 특히 모든 상

태를 프로그램으로 제어가 가능하도록 설계되었다. 또한 Windows 95/98/2000 에서 보

다 좋은 성능을 낼 수 있도록 제작되었다.

특히 아날로그 입력부는 14Bits Resolution 으로 최대 샘플링 속도가 370KHz 이며,

16 채널 Single-Ended 또는 Differential 8 채널의 아날로그 입력신호를 처리할 수 있다.

그리고 각 채널의 Gain (Voltage Range)설정이 ±1V, ±2V, ±5V, ±10V, 0~1V, 0~2V,

0~5V, 0~10V 으로 사용자 설정이 가능하여 Data Resolution 을 높였다. 아날로그 출력

부는 12Bits Resolution 으로 2 채널이 사용 가능하다.

1.2.1 COMI-SD104 사양

[그림 1.3] COMI-SD104

-6-

Page 13: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

SD104 다기능(Multi-Function) 보드

▷ Bus IBM PC Bus (32Bits PCI)

▷ 크기 195 * 107 mm

▷ PNP (Plug &Play)

입출력 채널

▷ 아날로그 입력 Single-Ended 16 채널

또는 Differential 8 채널

▷ 아날로그 출력 2 채널

▷ 디지털 입력 8 채널

▷ 디지털 출력 8 채널

▷ 타이머 2 채널

아날로그 입력

▷ Complete 14 Bit A/D Conversion

▷ A/D Converter Burr Brown ADS7899

▷ Type of ADC Successive approximation

▷ A/D Channel Single-Ended 16 or Differential 8

▷ Input Voltage Range ±10V, ±5V, ±2, ±1V, 0~10V,0~5V, 0~2V, 0~1V

▷ Resolution 14 Bits, 1 in 16384

▷ Maximum Sampling Rate 375KHz

▷ Streaming to Disk Rate 375KHz (Tested on PentiumⅢ 700MHz )

▷ Input Impedance 10M Ohm

▷ A/D Trigger Mode Programmable Timer, Software, External

▷ Data Transfer Programmed I/O, Interrupt

▷ Channel Configuration Gain, Channel No

아날로그 출력

▷ D/A Converter Burr Brown DAC7545

▷ D/A Channel 2 Channels (for single DC Output)

▷ Resolution 12 Bits, 1 in 4096

-7-

Page 14: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 1 장. 컴퓨터 인터페이스 개요

▷ Setting Time 2µsec

▷ Output Voltage Range ±10V

▷ Data Transfer Programmed I/O

디지털 입력

▷ TTL Compatible Input

▷ Channel 8 Channels

▷ Voltage Level Low(0 ~ 0.8V), High(2V ~ )

▷ Input Load Low 0.5V(0.2mA), High 2.7V(20mA)

▷ Data Transfer Programmed I/O

디지털 출력

▷ TTL Compatible Output

▷ Channel 8 Channels

▷ Voltage Level Low(0 ~ 0.4V), High(2.4V ~ )

▷ Input Load Low 0.5V(0.2mA), High 2.7V(0.4mA)

▷ Data Transfer Programmed I/O

카운터

▷ COMI-SD Counter

▷ Clock Input Channel 2 Channels

▷ Resolution 32Bits

▷ Gate Input

▷ Software Reset

▷ Real Time Clock

-8-

Page 15: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

SD104 다기능(Multi-Function) 보드

1.2.2 COMI-SD104 구조

PCICONTROLLER

I/O C

ON

NEC

TOR

Analog InputSE-16CHDIFF-8CH

PCI B

US

AnalogMUX

GainController(1,2,5,10)

A/DConvertor

(12bit)

Buffer &FIFO(2048x16)

Data

Address

Control

FPGA Control

Address

DigitalOutput

8Channels

8ChannelsDigitalInput

AnalogAmplifier

2ChannelsD/A

Convertor

Data

Data

2Channels Counter(32bit ) Decoder

Data

A/D ScanControl

InterruptCountrol

Data

[그림 1.4] COMI-SD104 Hardware 개념도

-9-

Page 16: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 1 장. 컴퓨터 인터페이스 개요

1.2.3 COMI-SDT1 터미널 보드

[그림 1.5] COMI-SDT1 터미널 보드

COMI-SDT1 은 신호선을 손쉽게 연결할 수 있도록 하는 COMI-SD104 보드를 위한

터미널 단자대이다. 사용자는 센서 또는 구동기와의 신호선 연결을 이 터미널 보드

를 통하여 수행하면 된다. COMI-SD104 보드와 COMI-SDT1 터미널 보드는 커미조아

에서 제공하는 68 Pin SCSI 케이블로 연결하면 된다.

-10-

Page 17: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

SD104 다기능(Multi-Function) 보드

Signal Name Reference I/O Description

AI<0..15> AGND 입력 아날로그 입력 채널 (single ended 0 부터 15번)

AI<0..7>- AI<0..7>+ AGND 입력 아날로그 입력 채널 (Differential 0 부터 7 번)

AGND 아날로그 그라운드 - 이 핀들은 아날로그

신호의 기준점

DAOUT0 AGND 출력 아날로그 출력 채널 0

DAOUT1 AGND 출력 아날로그 출력 채널 1

GATE0 DGND 입력 COMI-SD Counter0 GATE0 번

CLK0 DGND 입력 COMI-SD Counter0 Clock0 번

GATE1 DGND 입력 COMI-SD Counter1 GATE1 번

CLK1 DGND 입력 COMI-SD Counter1 Clock1 번

E_TRG DGND 입력 A/D 변환 외부 트리거. 사용자가 별도의 외부신호를 입력 받아 A/D 변환

DGND 디지털 그라운드

VCC DGND 출력 5V 출력

DI<0..7> DGND 입력 디지털 입력 채널(0 부터 7 번)

D0<0..7> DGND 출력 디지털 출력 채널(0 부터 7 번)

[표 1.1] COMI-SDT1 터미널 구성

-11-

Page 18: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 1 장. 컴퓨터 인터페이스 개요

1.2.3 공통적으로 사용되는 COMI-SD104 라이브러리 함수

COMI-SD104 라이브러리는 아날로그 입/출력, 디지털 입/출력 등 각 기능에 따라 다

양한 함수들을 지원한다. 각 기능에 대한 함수들은 각 기능을 응용하는 단원에서 따

로 설명하고 있다. 그러나 다음과 같이 모든 기능을 사용할 때 공통적으로 사용해야

하는 함수들이 있는데, 이러한 함수들은 라이브러리를 로드(Load)/언로드(Unload)하고

장치를 로드(Load)/언로드(Unload)하는 함수들이다.

BOOL COMI_LoadDll (void)

이 함수는 COMIDAS DLL(Dynamic Link Library)을 로드(load)한다.

- Return : 1 => 성공

0 => 실패

- Remarks :

1. 이 함수는 그 어떤 다른 COMIDAS Library 함수들 보다도 먼저 수행

되어져야 한다. 보통 프로그램 시작 시에 수행하면 된다.

2. 여러 개의 디바이스를 제어하더라도 이 함수는 한번만 실행 되어야

한다.

void COMI_UnloadDll (void)

이 함수는 COMIDAS DLL(Dynamic Link Library)을 언로드(unload)한다.

- Remarks : 이 함수는 보통 프로그램 종료 시에 수행하면 된다.

HANDLE COMI_LoadDevice (COMIDAS_DEVID deviceID, ULONG instance)

이 함수는 하나의 COMIDAS 디바이스를 로드(load)한다. 각 디바이스를 제어

하기 위해서는 먼저 이 함수를 이용하여 해당 디바이스에 대한 핸들을 얻어

와야 한다.

- deviceID : 각 디바이스의 고유한 아이디값이다. 이 값은 COMI_SD104 라고

적어주면 된다.

- instance : 동일 deviceID 를 가진 여러 개의 디바이스를 구분하기 위한 값입

니다. 본 실험에서는 하나의 장치만 사용하므로 이 값은 0 으로 적어주

어야 한다.

- Return : 이 함수는 디바이스 핸들을 반환한다. 이 값은 디바이스를 제어하

-12-

Page 19: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

SD104 다기능(Multi-Function) 보드

는 각 함수의 첫번째 파라미터로 사용된다. 만일 이 값이

INVALID_HANDLE_VALUE 이면 디바이스 로딩이 실패한 것이다.

- Remarks : 이 함수는 제어하고자 하는 디바이스 수만큼 수행되어야 한다.

void COMI_UnloadDevice (HANDLE hDevice)

이 함수는 하나의 COMIDAS 디바이스를 언로드(unload)한다.

- hDevice : 디바이스 핸들값. 이 값은 COMI_LoadDevice()함수에 의해 얻어진

값이어야 한다.

-13-

Page 20: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 1 장. 컴퓨터 인터페이스 개요

1.3 COMI-EDKIT1 교육용 센서 키트

[그림 1.6] COMI-EDKIT1 교육용 센서 키트

COMI-EDKIT1 은 다양한 센서 및 구동기를 패키지화하고 그에 필요한 인터페이

스 회로를 제공하여 컴퓨터를 이용한 계측/제어 자동화 실습을 편리하게 할 수 있도

록 하기 위하여 고안된 실습 장비이다.

1.3.1 COMI-EDKIT1 구성

근접 스위치

▷ Autonics 사의 PS17-5DNU 고주파 발진형 근접스위치 사용

▷ 검출거리 5mm

▷ 출력방식 DC 3 선식, NPN normal open

-14-

Page 21: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

COMI-EDKIT1 교육용 센서 키트

▷ 수량 1 EA

▷ 인터페이스 회로 포토커플러 절연 회로

광전 스위치

▷ Autonics 사의 BY500-TD1(발광부) & BY500-TDT2(수광부)

▷ 검출거리 500mm

▷ 출력방식 NPN open collector output

▷ 수량 발광부, 수광부 각 1 EA

▷ 인터페이스 회로 포토커플러 절연 회로

토글 스위치

▷ 디지털 입력의 기본적인 실습을 위한 8 개의 토글스위치 인터페이스

▷ 수량 8 EA

LED

▷ 크기 3mm

▷ 수량 8 EA

▷ 인터페이스 회로 LED 구동 회로

7-SEGMENT

▷ Anode common type 7-SEGMENT

▷ 수량 1 EA

▷ 인터페이스 회로 7SEGMENT 구동 회로

릴레이 스위치

▷ 접점 A 접점 방식

▷ 입력 신호 TTL 레벨

▷ ON/OFF 확인 LED 포함

▷ 인터페이스 회로 릴레이 구동 회로

-15-

Page 22: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 1 장. 컴퓨터 인터페이스 개요

스텝모터

▷ 2 Phase 스텝 모터

▷ 구동 전원 DC 12V

▷ 스텝각 1.8°

▷ 수량 1 EA

▷ 인터페이스 회로 스텝모터 구동 회로

DC 모터

▷ 구동 전원 DC12, 24V

▷ 회전 방향 CW, CCW

▷ 속도 범위 1 ~ 1,900 RPM

▷ 수량 1 EA

▷ 인터페이스 회로 DC 모터 구동 회로

백금 측온 센서

▷ PT100 온도 센서

▷ 수량 1 EA

▷ 인터페이스 회로 정전압 브리지 및 증폭 회로

POTENTIO

▷ ROTARY POTENTIO

▷ 수량 1 EA

POWER

▷ POWER SUPPLY AC 220V 입력, DC 12 V 출력

▷ 정전압 REGULATOR DC 5, 12, 15, -15V 출력

▷ 과전류 차단 회로 2A

▷ ON/OFF 스위치

-16-

Page 23: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

1.4 윈도우 프로그래밍 기초

이 단원은 윈도우 프로그램 제작툴로 널리 사용되고 있는 Microsoft 사의 Visual

C++를 이용하여 본 실험에서 목표로하는 기초적인 계측/제어 프로그램에 필요한 내

용들을 다루게 된다. 윈도우 프로그래밍 기법에 대한 자세한 내용은 너무도 방대하

여 이 교재에서 전부 다 다룰 수는 없다. 따라서 본 단원에서는 대화상자 기반

(Dialog based)의 윈도우 프로그램을 만드는 방법만을 다루기로 하며 COMI-SD104

DAQ 보드를 사용하여 프로그램을 작성하는데 있어서 기본적으로 수행해야할 사항들

에 대하여 소개하기로 한다. 다음에 설명되는 내용들은 COMI-SD104 보드를 이용하

여 디지털입력 CH0 의 값을 읽어들여 화면에 표시하고 또한 디지털출력 CH0 에 출

력을 내보내는 간단한 프로그램을 작성하는 예를 수록하여 COMI-SD104 보드를 이용

한 대화상자 기반의 윈도우 프로그램을 작성하는 방법에 대한 전반적인 기초지식을

설명하고자 한다. 본 단원에서 제공하는 예제 작성방법은 다른 단원의 예제를 작성

함에 있어서도 거의 공통적으로 사용되는 절차이므로 이후의 단원에서는 본 단원에

서 설명한 절차와 중복되는 것은 설명을 생략한다.

1.4.1 AppWizard 를 이용한 프로젝트 생성하기

AppWizard 는 Visual C++가 제공하는 자동화 기능으로써 응용 프로그램을 제작하기

위한 기본적인 틀을 자동적으로 생성해주는 마법사 기능이다. AppWizard 를 사용하면

기본적인 윈도우를 생성하기 위한 소스코드 및 리소스(Resource)를 자동으로 생성해

준다. 그리고 프로젝트(Project)란 하나의 응용프로그램을 만들기 위해서 필요한 여러

가지 파일들을 하나의 그룹으로 관리해주는 것을 의미한다. 따라서 하나의 프로젝트

에는 기본적으로 하나 또는 그 이상의 소스파일, 헤더파일 그리고 리소스 파일등이

포함된다.

AppWizard 를 이용하여 프로젝트를 자동으로 생성하려면 [그림 1.7]과 같이 Visual

C++의 File 메뉴에서 New 명령을 선택한다.

-17-

Page 24: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 1 장. 컴퓨터 인터페이스 개요

[그림 1.7] File/New 메뉴를 선택하는 화면

그러면 [그림 1.8]과 같이 프로젝트의 형태 및 프로젝트의 이름 등을 선태하는 화

면이 나타난다. [그림 1.8]의 좌측에서 프로젝트의 형태를 그림과 같이 “MFC

AppWizard(exe)”메뉴를 선택하여야 한다. 그리고 ‘Project name’ 항목에 사용자가 원하

는 프로그램의 이름을 지정하고, ‘Location’ 항목에 생성되는 프로젝트가 위치될 Path

를 지정하고 ‘OK’버튼을 클릭한다.

[그림 1.8] 프로젝트 선택 화면

-18-

Page 25: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

프로젝트를 선택하면 [그림 1.9]와 같이 응용프로그램의 형식을 선택하는 화면이

나타난다. 응용프로그램의 형식에는 단일 도큐먼트(Single document), 다중 도큐먼트

(Multiple document), 그리고 대화상자 기반(Dialog based)이 있다. 본 교재에서 제시하

는 모든 예제들은 교재의 목적상 세가지 형식 중에서 초심자들이 가장 이해하기 쉬

운 대화상자 기반의 프로그램으로 구성되었다. 대화상자 기반의 프로그램을 생성하

기 위해서는 [그림 1.9]와 같이 “Dialog based”옵션을 선택한 후 ‘Next’버튼을 클릭한

다.

[그림 1.9] 응용프로그램 형식 선택 화면

[그림 1.10] 화면에서는 그림과 같이 옵션을 선택한 후 ‘Next’버튼을 클릭한다. [그

림 1.10]화면은 AppWizard 가 자동으로 생성되는 지원 코드를 선택하는 화면이다.

“About box”와 “Context-sensitive Help”옵션은 도움말 지원 코드를 자동 생성하도록 하

는 옵션이다. 본 교재에서는 도움말에 관해서는 취급하지 않기 때문에 이 옵션은 생

략한다. “3D controls”옵션은 컨트롤드의 외형이 3 차원 형식으로 표시할 것인지 2 차

원 형식으로 표시할 것인지를 결정한다. 이 것은 체크하는 것이 보기에 좋다.

“ActiveX Control”항목은 본 교재에서는 사용하지 않는다. 그러나 나중에 고급 응용프

로그램을 제작할 때에는 ActiveX Control 을 사용해야할 때도 있는데 이 때에는 이 옵

-19-

Page 26: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 1 장. 컴퓨터 인터페이스 개요

션을 선택하여야 한다. “Windows Sockets”항목은 TCP/IP 통신을 지원하기 위한 옵션이

다.

[그림 1.10] 자동 코드 생성 옵션 선택 화면

[그림 1.11]화면에서 그림과 같이 옵션을 선택한 후 ‘Finish’버튼을 클릭한다. 그러

면 [그림 1.12]와 같은 화면이 나타나고 ‘OK’버튼을 클릭하면 프로젝트 생성이 완료

된다.

-20-

Page 27: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

[그림 1.11] 프로젝트 스타일 선택 화면

[그림 1.12] AppWizard 를 이용한 프로젝트 생성 마지막 확인 화면

-21-

Page 28: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 1 장. 컴퓨터 인터페이스 개요

1.4.2 리소스 편집기를 이용한 화면 구성

리소스 편집기는 VC++에서 소스 코딩없이 기본적인 화면 구성을 설계할 수 있도

록 도와주는 기능이다. 리소스 편집기에서는 윈도우의 크기나 형태 그리고 메뉴, Edit

Box, Static text, 버튼, 체크박스, 슬라이더(Slider) 등의 윈도우 공통 컨트롤을 생성할

수 있고 각 컨트롤들의 Layout 을 설정할 수 있다. 즉, 리소스 편집기는 기본적인 윈

도우의 외관을 설정하는 기능을 제공한다.

윈도우 공통 컨트롤 선택 툴바

리소스편집기 선택탭 리소스편집기 창

[그림 1.13] 리소스 편집기 창 화면

리소스 편집기는 [그림 1.13]과 같이 구성된다. 다른 창에서 리소스 편집기로 이동

하려면 [그림 1.13]화면의 좌측 하단에 있는 리소스 편집기 선택탭을 클릭하면 된다.

-22-

Page 29: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

윈도우에 원하는 컨트롤을 추가하려면 우측에 있는 컨트롤 선택 툴바에서 원하는 컨

트롤을 선택하여 윈도우의 원하는 위치에 배치하면 된다. [그림 1.13]화면은 자동생성

된 대화상자 윈도우에 Static Text, Edit Box, Button 의 세가지 컨트롤을 추가한 화면이

다.

생성한 컨트롤의 속성을 변경하려면 [그림 1.14]와 같이 해당 컨트롤을 선택한 후

마우스 오른쪽 클릭을 하여 그림과 같은 팝업 메뉴가 나타나면 ‘Properties’ 메뉴를

선택하여 해당 컨트롤의 속성을 변경할 수 있다. [그림 1.15]는 Static text 컨트롤의 캡

션 텍스트를 변경하는 예이다.

[그림 1.14] 컨트롤 속성 변경 메뉴 선택 화면

[그림 1.15] 컨트롤 속성 변경 대화상자 화면

1.4.3 COMI-SD104 라이브러리 포함하기

COMI-SD104 DAQ 보드를 이용하여 프로그램을 작성하기 위해서는 커미조아에

-23-

Page 30: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 1 장. 컴퓨터 인터페이스 개요

서 제공하는 라이브러리 관련 파일들을 프로젝트에 포함하여야 한다. 커미조아에

서 제공하는 설치 CD 에서 프로그램을 설치하였다면 C:\Program

Files\COMIZOA\COMIDAS-CPSD\Window\C_CPP\Lib 폴더에 Comidas.cpp, Comidas.h 그

리고 ComidasCommon.h 의 파일들이 위치해 있을 것이다. 이 세가지 파일을 프로젝

트 폴더에 복사한 후 프로젝트에 이 파일들을 추가한다. 프로젝트에 파일을 포함하

기 위해서는 [그림 1.16]과 같이 VC++의 Project => Add To Project => Files 메뉴를 선

택하여 [그림 1.17]과 같이 파일 선택 대화상자가 나타나면 그림과 같이 세개의 파일

을 선택한 후 ‘OK’버튼을 클릭한다.

[그림 1.16] 파일을 프로젝트에 추가하는 메뉴

[그림 1.17] 프로젝트에 추가할 파일들 선택 화면

-24-

Page 31: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

COMI-SD104 라이브러리 관련 파일들을 프로젝트에 추가 했으면 Comidas.cpp 파일

을 Open 하여 가장 첫번째 라인에 있는 #include “stdafx.h”구문의 주석을 해제하여야

한다. Stdafx.h 헤더 파일은 Visual C++에서만 사용하는 헤더파일로써 Precompiled

Header 를 사용하는 경우에 사용되는 헤더파일인데 특별한 경우가 아니면 대부분

Precompiled Header 를 사용하므로 Stdafx.h 헤더 파일은 포함되어야 한다. 이 구문의

주석을 해제하지 않고 컴파일하게 되면 다음과 같은 컴파일 에러 메시지가 나타나게

된다.

“fatal error C1010: unexpected end of file while looking for precompiled header…”

그리고 COMI-SD104 라이브러리 함수를 사용하기 위해서는 #include “Comidas.h”

구문을 소스파일의 처음 부분에 추가하여 헤더 파일을 인클루드하여야 한다.

-25-

Page 32: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 1 장. 컴퓨터 인터페이스 개요

1.4.4 소스코드 편집하기

AppWizard 를 이용하여 프로젝트를 생성하였다면 별도의 소스코드 추가 없이도 가

장 기본적인 윈도우 프로그램을 만들 수 있다. 생성된 프로젝트를 ‘F7’단축키를 이용

하여 컴파일 및 링크를 하면 EXE 파일이 생성되고 ‘F5’단축키를 이용하여 프로그램

을 실행하면 가장 기본적인 윈도우 프로그램이 실행되어 화면에 나타나게 된다. 그

러나 추가적인 기능을 제공하기 위해서는 소스코드를 변경하여야 한다.

Dialog based 응용프로그램의 소스는 기본적으로 두개의 클래스로 구성된다. 하나는

CXxxApp 클래스이며 다른 하나는 CXxxDlg 클래스인데 이 두 클래스는 AppWizard 가

자동으로 생성해준다. 여기서 Xxx 는 여러분이 지정한 프로젝트명이 된다. Dialog

based 응용프로그램에서 CXxxApp 클래스는 프로그램이 생성하거나 생성되는 과정을

관리하는 역할을 하는 클래스이다. 간단한 Dialog based 응용프로그램에서는 CXxxApp

클래스는 거의 수정할 일이 없다. Dialog based 응용프로그램에서 중요한 클래스는

CXxxDlg 클래스이다. 이 클래스는 여러분이 만든 대화상자의 모든 것을 관리하는 클

래스이다. 본 교재에서 특별한 일이 없는한 거의 모든 작업은 이 클래스에서 구성된

-26-

Page 33: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

다.

[그림 1.18] AppWizard 에 의해 자동생성된 클래스 및 소스코드

1) 디바이스 핸들 변수 선언하기

COMI-SD104 라이브러리 함수의 거의 대부분이 디바이스 핸들을 파라미터로 사

용한다. 디바이스 핸들은 COMI_LoadDevice 함수에 의해 얻어지는 것으로써

COMI-SD104 DAQ 보드를 가리키는 핸들값이다. 따라서 사용자는

COMI_LoadDevice 디바이스 함수에 의해 반환되는 디바이스 핸들을 전역변수에

저장하여 다른 함수들을 사용할 때 파라미터로 사용하여야 한다. C++에서 전역변

수로 사용하기 위해서는 클래스 멤버변수로 선언하는 방법과 외부변수로 선언하는

방법이 있을 수 있는데 본 교재에서는 쓰레드 사용시 편리하게 사용하기 위하여

디바이스 핸들 변수를 외부변수로 선언하였다. 디바이스 핸들 변수를 외부변수로

선언하기 위해서는 다음과 같이 XxxDlg.cpp 소스파일의 처음부분에 선언하면 된다.

-27-

Page 34: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 1 장. 컴퓨터 인터페이스 개요

COMI_LoadDevice 함수를 이용하여 디바이스 핸들을 얻어오는 것은 다음에

OnInitDialog 이벤트핸들러를 설명하는 단원에서 다루어진다.

// VCProgramDlg.cpp : implementation file // #include "stdafx.h" #include "VCProgram.h" #include "VCProgramDlg.h" #include "Comidas.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif HANDLE ghDevice; // 디바이스 핸들 변수 ///////////////////////////////////////////////////////////////////////////// // CVCProgramDlg dialog CVCProgramDlg::CVCProgramDlg(CWnd* pParent /*=NULL*/) : CDialog(CVCProgramDlg::IDD, pParent) //AFX_DATA_INIT(CVCProgramDlg) // NOTE: the ClassWizard will add member initialization here //AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); ……… ………

2) 이벤트 핸들러 정의하기

이벤트 핸들러는 어떠한 사건이 발생되었을 때 자동으로 호출되는 콜백 함수를 의

미한다. 여기서 사건이라함은 윈도우의 생성 및 종료, 윈도우의 위치 이동 및 크기

변경, 마우스클릭, 버튼 클릭, 키보드입력 등 수없이 많다. Visual C++는 이러한 모든

이벤트에 대하여 이벤트 핸들러를 생성할 수 있으며 이벤트핸들러의 내부 코드를 사

용자가 정의하므로써 각각의 이벤트에 대하여 프로그램이 적절한 대응을 할 수 있도

록 한다.

이벤트 핸들러를 생성할 때에는 클래스위저드(Class Wizard)를 사용한다. 클래스위저

드는 각 클래스의 많은 부분들을 자동으로 관리해주는 기능을 제공하는데 예를 들면

-28-

Page 35: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

각 클래스에 이벤트핸들러를 생성한다든지, 각 클래스의 멤버 변수들을 자동으로 생

성 또는 변경하는 등의 작업을 자동으로 수행해준다. Visual C++의 ‘View’메뉴에서

‘Class Wizard’메뉴를 선택하면 [그림 1.19]와 같이 클래스위저드 대화상자가 나타난다.

그림에서 ‘Message Maps’탭 창에서 이벤트핸들러를 정의한다. 화면의 좌측의 ‘Object

IDs’리스트박스는 이벤트핸들러를 정의할 객체(Object)를 리스트한다. 이 리스트에서

원하는 객체를 선택하면 오른쪽 ‘Messages’리스트박스에 해당 객체로부터 정의될 수

있는 이벤트들이 리스트된다. 원하는 이벤트를 선택하여 더블클릭하면 원하는 이벤

트핸들러를 소스코드에 추가할 수 있다. 화면의 하단에 있는 ‘Member functions’리스

트박스는 이미 정의된 이벤트핸들러들을 보여주고 있다.

[그림 1.19] 클래스위저드(Class Wizard) 대화상자

OnInitDialog 이벤트핸들러 OnInitDialog 이벤트핸들러는 Dialog based 프로젝트를 생성한 경우 자동적으로 생

성되는 이벤트핸들러이다. 이 함수는 대화상자가 처음 화면에 나타날 때 호출되는

함수로써 대부분의 프로그램 초기화 루틴(Routine)을 이곳에서 정의해주면 된다.

COMI-SD104 보드를 사용하는 경우 이 함수에서 라이브러리 초기화 함수인

-29-

Page 36: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 1 장. 컴퓨터 인터페이스 개요

COMI_LoadDll() 함수와 디바이스 초기화 함수인 COMI_LoadDevice() 함수를 수행하

여야 한다. 다음은 자동 생성된 OnInitDialog 이벤트핸들러의 작성예이다. BOOL CVCProgramDlg::OnInitDialog() CDialog::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here if(!COMI_LoadDll()) MessageBox ("COMIDAS 라이브러리를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE; ghDevice = COMI_LoadDevice(COMI_SD104, 0); if(ghDevice==INVALID_HANDLE_VALUE) MessageBox ("COMI-SD104 장치를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE; return TRUE; // return TRUE unless you set the focus to a control

OnClose 이벤트핸들러 OnClose 이벤트핸들러는 대화상자가 종료될 때 호출되는 함수이다. Dialog based 에

서는 대화상자가 종료되면 곧 응용프로그램이 종료되는것이므로 사실상 프로그램 종

료시에 호출되는 함수로 간주할 수 있다. 따라서 프로그램이 종료될 때 처리해야할

루틴(Routine)들을 이 함수에서 수행하면 된다. COMI-SD104 보드를 사용하는 경우에

는 이 함수에서 COMI_UnloadDevice() 함수 및 COMI_UnloadDll() 함수를 이 함수내

에서 수행하여야 한다. OnClose() 함수를 추가하려면 [그림 1.20]과 같이 Object IDs’

리스트박스에서 CXxxDlg 객체를 선택하고 ‘Messages’리스트박스에서 WM_CLOSE

이벤트를 선택하여 더블클릭하면 OnClose()함수가 생성된다.

-30-

Page 37: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

[그림 1.20] 클래스위저드를 이용한 OnClose 이벤트핸들러 생성

다음은 자동 생성된 OnClose() 이벤트핸들러에 COMI_UnloadDevice()와

COMI_UnloadDll()함수를 추가한 예이다. void CVCProgramDlg::OnClose() // TODO: Add your message handler code here and/or call default COMI_UnloadDevice(ghDevice); COMI_UnloadDll(); CDialog::OnClose();

OnTimer 이벤트핸들러 OnTimer 이벤트핸들러는 CXxxDlg 객체의 WM_TIMER 메시지에 대한 이벤트핸들

러이다. WM_TIMER 는 사용자가 지정한 주기에 따라 주기적으로 발생되는 이벤트로

써 주기적으로 어떠한 작업을 수행하기 위해서 많은 응용프로그램에서 이 이벤트 핸

들러를 사용하고 있다. 예를 들어 주기적으로 디지털 입력 채널의 상태를 체크하고

자할 때 이 이벤트 핸들러를 이용하여 이러한 작업을 수행할 수 있다. OnTimer 이벤

-31-

Page 38: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 1 장. 컴퓨터 인터페이스 개요

트핸들러를 생성하기 위해서는 [그림 1.21]과 같이 Object IDs’리스트박스에서

CXxxDlg 객체를 선택하고 ‘Messages’리스트박스에서 WM_TIMER 이벤트를 선택하

여 더블클릭하면 OnTimer()함수가 생성된다.

[그림 1.21] 클래스위저드를 이용한 OnTimer 이벤트핸들러 생성

다음의 소스코드는 OnTimer() 이벤트핸들러의 예이다. 이 함수에서는 주기적으로

A/D Channel0 의 값을 읽어들여 화면에 표시한다. void CVCProgramDlg::OnTimer(UINT nIDEvent) // TODO: Add your message handler code here and/or call default m_fAdValue = COMI_AD_GetVolt(ghDevice, 0); // Read A/D CH0 UpdateData(FALSE); // A/D 값을 화면에 표시 CDialog::OnTimer(nIDEvent);

한가지 알아두어야 할 것은 OnTimer() 이벤트함수는 프로그램 시작과 동시에 이벤

트가 활성화 되는 것은 아니다. SetTimer()함수를 이용하여 Timer 를 시작시켜야 한다.

-32-

Page 39: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

SetTimer()함수는 MFC 의 함수이며 다음과 같이 정의되어 있다.

UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT*

lpfnTimer)(HWND, UINT, UINT, DWORD) )

-. nIDEvent : 타이머이벤트의 아이디이다. 여러분은 하나의 윈도우에서 여러 개의

타이머를 동작시켜야할 필요가 있을 수 있다. 그러한 때에 이 아이디 값을

구분해주므로써 여러 개의 타이머를 동작시킬 수 있다. 하나의 타이머만을

사용한다면 이 값은 0 으로 해주면 된다.

-. nIDEvent : 타이머의 주기를 milli-second 단위로 지정한다.

-. lpfnTimer : 사용자가 직접 정의하는 타이머 콜백함수의 주소값을 입력하는 파

라미터이다. 그러나 일반적으로는 이 값을 NULL 로 설정하므로써

WM_TIMER 이벤트핸들러인 OnTimer()가 호출되도록한다.

예를 들어서 0.1 초마다 타이머 이벤트가 발생하도록 하려면 다음과 같이 SetTimer

함수를 수행하면 된다.

SetTimer(0, 100, NULL);

그러면 0.1 초마다 OnTimer 함수가 호출되게 된다. 그리고 타이머를 종료시키기 위

해서는 KillTimer 함수를 사용한다. KillTimer 의 파라미터에는 SetTimer 의 첫번째 파

라미터로 지정했던 타이머 아이디를 지정하면된다. KillTimer 함수는 MFC 함수이며

다음과 같이 정의되어 있다.

BOOL KillTimer( int nIDEvent )

사용자 정의 컨트롤 이벤트핸들러 리소스 편집기에서 사용자가 생성한 각 컨트롤에서도 이벤트 핸들러를 정의할 수

있다. 예를 들면 버튼 컨트롤의 경우 버튼이 클릭되었을 때 호출되는 함수나 체크박

스(Check Box)의 경우 체크 또는 언체크(Uncheck)되었을 때 호출되는 함수등을 사용

자가 지정할 수 있다. 대부분의 컨트롤의 이벤트핸들러를 정의하는 것은 이벤트(메

시지) 종류만 다를 뿐이지 그 방법은 동일하기 때문에 본 예제에서 사용한 체크박스

이벤트핸들러를 정의하는 것을 예로 들어 일반적인 사용자 정의 컨트롤에 이벤트핸

들러를 정의하는 방법을 소개하고자 한다. 본 예제에서는 [그림 1.13]의 리소스 편집

기 화면에서와 같이 A/D 변환을 Enable/Disable 하는 체크박스를 사용하였다. 사용자

-33-

Page 40: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 1 장. 컴퓨터 인터페이스 개요

가 체크박스를 클릭한 경우에 체크박스의 체크 상태에 따라 A/D 변환을

Enable/Disable(실제로는 A/D 변환을 수행하는 타이머 이벤트를 Enable/Dsiable 시킨다)

시켜주는 이벤트핸들러를 정의하여 사용하였다. 체크박스의 이벤트를 정의하기 위해

서는 먼저 Visual C++의 ‘View’메뉴에서 ‘Class Wizard’메뉴를 선택하고 [그림 1.22]와

같이 ‘Object IDs’ 리스트에서 체크박스(IDC_CHECK1)를 선택한 후 ‘Message’ 리스트

에서 BN_CLICKED 메시지를 더블 클릭한다. 그러면 그림과 같이 함수의 이름을 지

정하는 대화상자가 나타나는데 적당한 함수 이름을 지정한 후 OK 버튼을 클릭한다.

[그림 1.22] 체크박스의 BN_CLICKED 이벤트핸들러를 정의하는 화면

그러면 다음과 같이 CXxxDlg 클래스에 지정한 함수 이름으로 새로운 함수가 생성

된다. void CVCProgramDlg::OnEnableTimer() // TODO: Add your control notification handler code here

이 함수내에 다음과 같이 A/D 변환을 수행하는 타이머 이벤트를 Enable/Disable 하

는 코드를 삽입한다.

-34-

Page 41: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

void CVCProgramDlg::OnEnableTimer() // TODO: Add your control notification handler code here if(IsDlgButtonChecked(IDC_CHECK1)) SetTimer(0, 100, NULL); else KillTimer(0);

3) 멤버변수를 통한 컨트롤 데이터 ACCESS

리소스 편집기에서 생성한 컨트롤에서 데이터를 얻어오거나 반대로 컨트롤에 데이

터를 출력하고자할 때 일반적으로 사용하는 방법이 멤버변수를 통해서 이를 수행하

는 방법이다. 예를 들면 에디트박스(Edit box)에서 데이터를 얻어오거나 반대로 데이

터를 에디트 박스에 출력하고자 할 때 Visual C++에서 가장 일반적으로 사용하는 방

법이 에디트박스와 맵핑(Mapping)되는 클래스 멤버 변수를 선언하고 UpdateData()함

수를 이용하여 데이터를 얻어오거나 데이터를 출력하는 방법이다. 컨트롤과 맵핑되

는 멤버 변수를 선언하기 위해서는 다음과 같이 클래스위저드를 실행하여 ‘Member

Variables’탭을 선택한 후 ‘Control IDs’리스트에서 원하는 컨트롤(여기서는

IDC_EDIT1)을 더블클릭하면 그림과 같이 멤버변수를 선언하는 대화상자가 나타난다.

여기서 ‘Member variable name’항목에는 원하는 변수이름을 기입하고 ‘Variable type’항

목에서 변수의 데이터형(본 예제에서는 float 형)을 선택한다. ‘Category’항목에서는 변

수가 컨트롤을 직접 가리킬 것인지 아니면 컨트롤의 데이터를 가리킬 것인지를 결정

한다. 본 예제에서는 에디트박스의 데이터만을 엑세스할 것이므로 이 항목은 “Value”

값으로 선택한다. 그리고 ‘OK’버튼을 누르면 멤버변수가 자동으로 생성된다.

-35-

Page 42: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 1 장. 컴퓨터 인터페이스 개요

[그림 1.23] 컨트롤 멤버 변수 등록 화면

에디트박스에서 값을 얻어오거나 에디트박스에 값을 출력하기 위해서는

UpdateData() 함수를 사용한다. UpdateData 함수는 MFC 함수이며 다음과 같이 정의되

어 있다.

BOOL UpdateData( BOOL bSaveAndValidate = TRUE )

여기서 bSaveAndValidate 파라미터를 TRUE 로 하면 화면(컨트롤)에서 데이터를 얻어

와서 멤버변수에 저장하는 작업을 수행하고 FALSE 로하면 멤버변수의 값을 화면(컨

트롤)에 출력하는 작업을 수행한다. 앞의 OnTimer 이벤트핸들러에서 다음과 같이

코드를 작성하였는데 이 것은 A/D 변환을 수행하여 그 결과를 멤버변수에 저장하고

UpdateData() 함수를 통하여 화면에 출력하는 작업을 수행한다. void CVCProgramDlg::OnTimer(UINT nIDEvent) // TODO: Add your message handler code here and/or call default m_fAdValue = COMI_AD_GetVolt(ghDevice, 0); // Read A/D CH0 UpdateData(FALSE); // A/D 값을 화면에 표시 CDialog::OnTimer(nIDEvent);

-36-

Page 43: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

1.4.5 컴파일 및 실행하기

위의 절차를 모두 수행하여 프로그램을 작성하였다면 프로젝트를 컴파일하여 응용

프로그램(EXE 프로그램)을 생성한 후 실행해보는 것만 남았다. 프로젝트를 컴파일하

기 위해서는 Visual C++ 메뉴에서 Build => Build Xxxx.exe 메뉴를 실행하거나 F7 단

축키를 사용하면 된다. 그러면 프로젝트 폴더의 하위 폴더인 Debug 또는 Release 폴

더(이는 Build 옵션에 따라 달라짐)에 실행프로그램이 생성된다. 컴파일이 완료된 후

에는 F5 단축키를 이용하여 프로그램을 실행해볼 수 있다.

-37-

Page 44: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 1 장. 컴퓨터 인터페이스 개요

1.5 실험결과 및 과제 보고서

실험제목 : 컴퓨터 인터페이스 개요

실험일자 : ______년 ___월 ___일

실 험 자 : 제 ___조 _________________________

학 번 : ____________________

1) 산업 현장에서 컴퓨터를 이용한 제어/계측 자동화의 적용 예를 조사하라.

2) 아날로그 신호와 디지털 신호에 대하여 그 차이점을 중심으로 설명하라.

3) DAQ 보드의 아날로그 입력 기능과 디지털 입력 기능으로 계측할 수 있는

센서들 각각에 대하여 조사하라.

4) 두 개의 수를 입력 받아 덧셈, 뺄셈, 곱셈, 나눗셈 의 결과를 각각 출력하는

프로그램을 작성하라.

-38-

Page 45: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장

디지털 입력을 이용한 센서 계측

제 2 장에서는 COMI-SD104 DAQ 보드의 디지털 입력 기능에 대한 전반적인 원리를

소개하고 디지털 입력 기능을 이용하여 스위치류와 같이 출력이 디지털 형태로 나타

나는 센서의 상태를 계측하는 방법을 소개한다.

실험 2.1 근접 스위치를 이용한 시스템 감시 ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ 43

실험 2.2 광전 센서를 이용한 시스템 감시 ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ 63

-39-

Page 46: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장. 디지털 입력을 이용한 센서 계측

제 2 장 디지털 입력을 이용한 센서 계측

제 2 장에서는 COMI-SD104 DAQ 보드의 디지털 입력 기능에 대한 전반적인 원리

를 소개하고 디지털 입력 기능을 이용하여 스위치류와 같이 출력이 디지털 형태로

나타나는 센서의 상태를 계측하는 방법을 소개한다.

일반적인 스위치는 전기적으로 Low 와 High, 예를 들면 0Volt 와 5Volt 의 두 가지

상태만을 가지게 된다. 이 두 가지의 상태를 ON 과 OFF 또는 0 과 1 의 디지털 개념

으로 대치할 수 있으며 이렇게 두 가지의 상태만을 출력하는 것을 디지털 출력이라

고 한다. 이러한 센서들을 계측하기 위해서는 디지털입력 인터페이스 기능을 사용하

여야 한다. 센서의 출력이 디지털이라고는 하지만 이 것은 논리적인 개념이고 실제

로 컴퓨터에서 받아들일 수 있는 디지털 신호와는 많은 차이가 있으며 따라서 컴퓨

터에서 이러한 센서들의 출력 상태를 계측하기 위해서는 컴퓨터가 받아들일 수 있는

디지털 데이터로 변환해주는 장치가 필요한데 이러한 장치를 디지털 인터페이스 장

치라 한다.

디지털 입력 인터페이스의 기본 원리를 설명하기 위해 [그림 2.1]과 같은 1 개의

스위치 상태를 입력하는 인터페이스를 생각해보자. [그림 2.1]은 스위치가 열려 있으

면 OFF 상태가 되어 데이터 버스의 LSB 선으로 ‘0’이 입력되고 닫혀 있으면 ON 상

태가 되어 ‘1’이 입력되도록 하는 인터페이스 회로를 나타낸다. 버스 드라이버(Bus

driver : buffer)의 역할은 보통 때는 이 인터페이스가 데이터 버스와 단절(High

impedance)되어 있다가, SELECT=1, IN=1 일 때만 데이터 버스의 LSB 선과 인터페이

스가 연결되도록 하는 것으로, 이러한 소자를 3 상 버퍼(3-State buffer)라고 한다. 3 상

버퍼가 연결될 때 입력단자의 스위치가 열려 있으면 1 이 감지되고 인버터 출력은 0

이 되어 데이터 버스의 LSB 에 실려서 누산기(Accumulator)의 LSB 에 0 이 읽혀 들여

진다. 읽기 명령이 끝나면 IN=0 으로 되어 버스 드라이버는 단절상태로 된다. 스위치

대신에 리미트 스위치나 광센서(Photo sensor)를 사용하면 접촉식 또는 비접촉식 위치

검출이 가능하다.

-40-

Page 47: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

INSELECT

+5V

InverterPush-button LSB

Data Bus

[그림 2.1] 디지털 입력 인터페이스 개요

2.1 COMI-SD104 의 디지털 입력 관련 라이브러리 함수

int COMI_DI_GetOne (HANDLE hDevice, int ch) 이 함수는 파라미터로 지정한 채널의 Digital Input 채널의 Status 를 반환한다.

- hDevice : 디바이스 핸들 값이다. 이 값은 COMI_LoadDevice()함수에 의해 얻어진

값이어야 한다.

- ch : Digital Input 채널번호. 채널번호는 0 부터 시작한다.

- Return : 지정한 디지털입력 채널의 Status. 0 - OFF, 1 - ON.

DWORD COMI_DI_GetAll (HANDLE hDevice)

이 함수는 모든 디지털 입력채널의 상태를 한번에 읽어들인다. COMI-SD104 보드

는 8 개의 디지털 입력 채널을 제공하는데 이 함수가 반환하는 32 비트의 정수중에

서 BIT0 ~ BIT7 의 각 비트값이 각 채널의 ON/OFF 상태를 의미하게 된다.

- hDevice : 디바이스 핸들 값이다. 이 값은 COMI_LoadDevice()함수에 의해 얻어진

값이어야 한다.

- Return : 모든 Digital Input 채널의 Status 를 나타내는 32 bit 값. 이 값의 각 비트의

값이 각 채널의 Status 를 나타낸다.

-41-

Page 48: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장. 디지털 입력을 이용한 센서 계측

-42-

Page 49: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 2.1 근접 스위치를 이용한 시스템 감시

실험 2.1 근접 스위치를 이용한 시스템 감시

실험 예비 사항

-. 근접스위치의 종류와 원리에 대하여 조사하라

-. 근접스위치의 사용예에 대하여 조사하라

-. 정전용량에 대하여 조사하라.

실험 목적 산업현장에서 많이 사용되는 근접스위치의 원리 및 용도에 대하여 이해하고 디지

털 입력을 이용하여 근접스위치의 상태를 자동계측하는 방법을 익힌다.

실험 장비 -. 컴퓨터 및 주변기기

-. Visual C++

-. COMI-SD104 보드 및 주변기기

-. COMI-EDKIT1 교육용 키트

-. 근접스위치

1 기초 이론 근접 스위치는 일정거리내에 물체가 있을 때와 없을 때를 서로 다른 상태

(ON/OFF)로 출력하므로써 산업 현장에서 물체의 유무를 판단하기 위해 많이 사용되

는 스위치이다. 예를 들어 [그림 2.2]와 같이 근접스위치를 설치하여 제품이 근접스

위치에 위치하면 근접스위치는 ON 신호를 출력하고 제품이 위치하지 않은 경우에는

OFF 출력하도록하고 이를 컴퓨터에서 계측하여 ON/OFF 의 수를 카운트하여 제품의

생산수량을 자동 감시하거나 제품이 근접 스위치에 위치했을 때 취해야할 작업(예를

들면 마킹(Marking)을 하거나 포장을 하는 등의 작업)을 자동으로 수행하도록 할수

있다. [그림 2.3]은 실제 산업현장에서 근접센서를 다양하게 응용하여 사용하는 예를

보여주는 것이다.

-43-

Page 50: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장. 디지털 입력을 이용한 센서 계측

컨베이어

계측 대상물

근접스위치

컴퓨터

[그림 2.2] 근접스위치의 산업현장 사용예 1

근접센서는 여러가지 종류가 있어서 각 센서의 특성을 파악하고 검출물체의 특징을

분석하여 최적인 센서를 올바르게 선택할 필요가 있다.

-44-

Page 51: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 2.1 근접 스위치를 이용한 시스템 감시

[그림 2.3] 근접스위치의 다양한 사용예

-45-

Page 52: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장. 디지털 입력을 이용한 센서 계측

고주파발진형 근접 스위치

원리

검출코일에서 발생되는 고주파 자계중에 검출물체(금속)가 접근하면 전자유도 현

상에 의하여 검출물체(금속)에 와전류가 발생한다. 이 와전류는 검출코일에서 발생하

는 자속의 변화를 방해하는 방향으로 발생하게 되어 발진지폭이 감쇠 또는 정지하는

것을 이용하여 검출물체의 유,무를 검출한다.

동작설명

초기 전원투입 후 약 80msec 이내에 전압의 진동 폭이 일정한 주파수대로 올라가

며 이때 전기적인 자장이 형성됩니다. 이후 검출 물체가 접근하면 검출물체에 와전

류가 증가함에 따라 전압의 진동 폭이 작아지게 되고 완전히 검출된 상태가 되면

0V 에 가깝게 됩니다. 이 미소한 전압의 진동 폭을 증폭시켜 출력부를 동작시킵니다.

[그림 2.4] 고주파발진형 근접스위치의 동작원리

-46-

Page 53: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 2.1 근접 스위치를 이용한 시스템 감시

구성도

[그림 2.5] 고주파발진형 근접스위치의 구성도

특징

부하구동방식에 따라 [그림 2.6]에 나타낸 바와 같이 2 선식과 3 선식이 있다. 2 선

식은 배선이 편리하지만, 반드시 부하를 직렬로 접속하여 사용하지 않으면 파괴되기

때문에 주의가 필요하다. 또한 근접 스위치의 하우징내에는 수지를 충진하고 있기

때문에 방수, 내진성이 우수하고 티끌이나 먼지, 다습한 장소에서의 사용도 가능하다.

이와 같은 발진형 센서는 일반적으로는 수 mm ~ 25mm 정도로 설정되며 최고 120mm

정도가 한계이다. 고주파형 근접 스위치를 이용하는 경우에 특히 주의할 점은 근접

체의 크기나 재질에 의한 동작 거리가 크게 변화한다는 것이다. 또 발진 코일로부터

방사되는 자력선은 넓은 범위를 가지기 때문에, 검출체 이외의 금속체가 헤드의 부

근에 있을 때나 그 밖의 근접 스위치에 접근하여 설치하면 상호유도 때문에 오동작

이 발생할 수 있어 주의가 필요하다.

-47-

Page 54: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장. 디지털 입력을 이용한 센서 계측

(a) 2선식 근접스위치의 접속방법 (b) 3선식 근접스위치의 접속방법

[그림 2.6] 직류형 근접스위치의 접속방법

정전용량형 근접 스위치

원리

일반적으로 근접 스위치라 부르는 검출스위치(검출센세)는 보통 검출코일로부터

자계를 발생시켜 검출물체에 와전류를 생성시켜 그 변화를 검출하는 것으로 검출물

체는 도체(금속)에 한정되어있다. 그렇지만 정전용량형 근접스위치(근접센서)의경우

는 전계를 발생하는 전계중에 존재하는 물체내의 전하의 이동, 분리에 따른 정전용

량의 변화를 검출하는 것으로 플라스틱, 유리, 도자기, 목재와 같은 절연물(유전체)

그리고 물, 기름, 약물과 같은 액체도 검출이 가능하다. 정전용량형 근접스위치의 원

리는 다음과 같다.

1) [그림 2.7 (a)]와 같이 공간에 극판을 설치한 후 극판에 +전압을 인가하면 극

판면에는 +전하가 대지에는 –전하가 발생되면서 극판면과 대지사이에는 전기

력선이 존재하게 된다.

2) [그림 2.7 (b)]와 같이 전계중에 검출물체가 존재하게 되면 검출물체는 정전유

도를 받아 극판쪽에는 –전하가 대지쪽에는 +전하가 발생하게 되는데 이 것을

분극현상이라 한다.

3) 검출물체가 극판과 멀어지면 정전용량이 작아지고, 반대로 극판에 접근하면

정전용량이 커지게 되는데 이 변화량을 이용하여 검출물체의 유, 무를 검출

-48-

Page 55: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 2.1 근접 스위치를 이용한 시스템 감시

한다.

(a)

(b)

[그림 2.7] 정전용량형 근접스위치의 원리

동작설명

정전용량형 근접스위치는 앞서 설명한 고주파형 근접스위치와는 반대로 동작한다.

초기 전원투입 후 검출물체가 없으면 전압의 진동폭은 0V 에 가까우며, 검출물체가

접근하게 되면 전압의 진동폭이 커지게 된다.

[그림 2.8] 고주파발진형 근접스위치의 동작원리

-49-

Page 56: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장. 디지털 입력을 이용한 센서 계측

구성도

[그림 2.9] 정전용량형 근접스위치의 구성도

2 실험 방법

2.1 하드웨어 인터페이스

커미조아의 교육용키트인 COMI-EDKIT1 에서 사용한 근접스위치는 Autonics 사의

PS17-5DNU 고주파 발진형 근접스위치로써 검출거리는 약 5mm 이고, DC 3 선식이며

NPN normal open 출력을 내보낸다. 이 근접 스위치의 회로구성은 [그림 2.10]과 같이

되어있으며 자세한 센서의 사양은 부록에 수록하였다.

-50-

Page 57: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 2.1 근접 스위치를 이용한 시스템 감시

[그림 2.10] PS17-5DNU 근접센서의 출력회로도

근접스위치PS17-5DN

포토 커플러PC817

A

K

C

E

DI0

GND

4.7kΩ

4.7kΩ갈색

흑색

청색

+12V +5V

COMI-SDT1 터미널보드

[그림 2.11] 절연(Isolation) 입력회로

PS17-5DN 근접센서는 DC 12~24V 구동형이므로 COMI-SD104 디지털 입력단자에

직접 연결하기는 적절치 않고, [그림 2.11]과 같이 포토커플러(Photo-coupler)를 이용한

절연회로를 거쳐서 COMI-SD104 디지털 입력 단자에 입력되어야 한다. 참고로, 포토

커플러(Photo-coupler)는 발광소자의 LED 와 수광소자의 포토트랜지스터(Photo-

transistor)가 1 개의 패키지 안에 격납된 것이며, 입출력간의 전기적인 절연(Isolation)

-51-

Page 58: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장. 디지털 입력을 이용한 센서 계측

을 취하기 위해 사용된다. COMI-EDKIT1 은 모델명 PC817 이라는 포토커플러를 사용

하였으며, [그림 2.12]와 같이 터미널 단자대 옆에 위치하여 있다.

COMI-SD104 보드를 이용하여 COMI-EDKIT1 에 장착된 근접스위치를 계측하기 위

해서는 [그림 2.12]와 같이 연결하면 된다.

COMI-EDKIT1의 근접센서 부분

근접센서(PS17-5DUN)

PC

817

GN

D

COMI-SDT1 터미널 보드

DI0

[그림 2.12] 근접센서 실험을 위한 COMI-EDKIT1 과 COMI-SDT1 의 연결도

2.2 프로그램 제작

2.2.1 프로그램 개요

본 예제는 근접 스위치의 상태(ON/OFF)를 주기적으로 계측하여 화면에 “ON” 또

는 “OFF” 텍스트로 디스플레이하는 프로그램 예제이다. 프로그램을 실행하면 [그림

2.13]과 같은 화면이 나타난다.

-52-

Page 59: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 2.1 근접 스위치를 이용한 시스템 감시

[그림 2.13] 예제 프로그램 실행화면

2.2.2 프로젝트 생성

Visual C++를 이용하여 프로그램을 작성하기 위해서는 먼저 AppWizard 를 이용하여

프로젝트를 생성하여야 한다.

Visual C++의 File 메뉴에서 New 명령을 선택하여 대화상자 기반(Dialog based) 응용

프로그램 프로젝트를 생성한다. 본 교재에서 제시한 근접스위치 계측용 예제의 프로

젝트명은 “Exp2_1”로 하였다.

[그림 2.14] 프로젝트 선택 화면

-53-

Page 60: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장. 디지털 입력을 이용한 센서 계측

[그림 2.15] 응용프로그램 형식 선택 화면

프로젝트를 생성하는 자세한 내용은 제 1 장의 [1.4.1 AppWizard 를 이용한 프로젝

트 생성하기]에서 다루었으며, 프로젝트를 생성하는 절차는 제 1 장에서 설명한 절차

와 동일하므로 자세한 프로젝트 생성 절차는 제 1 장을 참조하기 바란다.

2.2.3 화면 구성

본 예제는 근접센서의 상태를 체크하여 에디트박스(Edit box)로 화면에 그 상태를

“ON” 또는 “OFF”의 텍스트로 표시하게 된다. 따라서 다음 그림과 같이 리소스 편집

기에서 Static text 및 에디트박스로 화면을 구성한다. 리소스 편집기를 사용하는 방법

은 제 1 장을 참조하기 바란다.

에디트박스의 ID 는 그림과 같이 IDC_EDIT1 으로 하였으며 이 것은 기본(Default)

값이다.

-54-

Page 61: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 2.1 근접 스위치를 이용한 시스템 감시

[그림 2.16] 화면 구성 및 등록정보 설정

2.2.4 COMI-SD104 라이브러리 포함하기

COMI-SD104 DAQ 보드의 라이브러리를 포함하기 위해서 다음과 같은 절차를 수

행한다.

① C:\Program Files\COMIZOA\COMIDAS-CPSD\Window\C_CPP\Lib 폴더에서

Comidas.cpp, Comidas.h 그리고 ComidasCommon.h 의 파일을 새로 생성된 프

로젝트 폴더에 복사한다.

② VC++의 Project => Add To Project => Files 메뉴를 선택하여 다음 그림과 같

이 3 개의 파일을 프로젝트에 추가한다.

-55-

Page 62: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장. 디지털 입력을 이용한 센서 계측

[그림 2.17] COMI-SD104 라이브러리 관련 파일 추가

③ 다음 그림과 같이 Comidas.cpp 파일의 첫 줄에 있는 주석문을 해제한다.

④ 아래의 코드예와 같이 Exp2_1Dlg.cpp 의 처음 부분에 #include “Comidas.h” 구

문을 추가하고 디바이스 핸들 전역 변수 “ghDevice”를 선언한다..

#include "stdafx.h" #include "Exp2_1.h" #include "Exp2_1Dlg.h" #include "Comidas.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CExp2_1Dlg dialog

-56-

Page 63: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 2.1 근접 스위치를 이용한 시스템 감시

HANDLE ghDevice; CExp2_1Dlg::CExp2_1Dlg(CWnd* pParent /*=NULL*/) : CDialog(CExp2_1Dlg::IDD, pParent) //AFX_DATA_INIT(CExp2_1Dlg) m_sValue = _T(""); //AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); …… ……

2.2.5 OnInitDialog 이벤트 핸들러

Exp2_1Dlg.cpp 의 OnInitDialog 이벤트핸들러에서 프로그램 초기화 및 COMI-SD104

보드 초기화 루틴을 작성한다. BOOL CExp2_1Dlg::OnInitDialog() CDialog::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here if(!COMI_LoadDll()) MessageBox ("COMIDAS 라이브러리를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE; ghDevice = COMI_LoadDevice(COMI_SD104, 0); if(ghDevice==INVALID_HANDLE_VALUE) MessageBox ("COMI-SD104 장치를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE; SetTimer(0, 10, NULL); // 10ms 의 주기로 타이머 이벤트를 동작시킨다. return TRUE; // return TRUE unless you set the focus to a control

2.2.6 OnClose 이벤트 핸들러

[그림 2.18]과 같이 OnClose 이벤트핸들러를 생성하여 COMI-SD104 언로드(Unload)

-57-

Page 64: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장. 디지털 입력을 이용한 센서 계측

및 기타 프로그램 종료시에 수행해주어야할 루틴을 작성한다.

[그림 2.18] 클래스위저드를 이용한 OnClose 이벤트핸들러 생성

OnClose 이벤트핸들러는 다음과 같이 작성한다.

void CExp2_1Dlg::OnClose() // TODO: Add your message handler code here and/or call default KillTimer(0); COMI_UnloadDevice(ghDevice); COMI_UnloadDll(); CDialog::OnClose();

2.2.7 화면디스플레이를 위한 멤버변수 할당

먼저 근접센서의 상태를 화면에 출력할 수 있도록 다음 그림과 같이 에디트 박스

콘트롤에 “m_sValue” 라는 데이터 멤버 변수(Member variable)를 할당한다. 이는 나중

에 근접센서의 상태를 “ON” 또는 “OFF”의 텍스트로 화면에 표시하는데 사용된다.

-58-

Page 65: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 2.1 근접 스위치를 이용한 시스템 감시

[그림 2.19] 에디트박스 데이터 멤버변수 할당

2.2.8 타이머 이벤트를 이용한 근접센서 계측

타이머 이벤트핸들러를 생성하여 주기(10ms 단위)적으로 COMI-SD104 의 디지털

입력을 읽어들여 근접센서의 상태를 계측하면서 그 결과를 화면에 출력한다.

우선 먼저 [그림 2.20]을 참조하여 타이머 이벤트 핸들러를 생성한다. 그림과 같이

OnTimer 이벤트핸들러를 생성하면 Exp2_1Dlg.cpp 소스파일에에 OnTimer() 함수가 자

동으로 생성된다. 자동 생성된 OnTimer 이벤트핸들러에 다음과 같은 코드를 삽입한

다. void CExp2_1Dlg::OnTimer(UINT nIDEvent) // TODO: Add your message handler code here and/or call default int nState; nState = COMI_DI_GetOne(ghDevice, 0); // DI CH0 의 값을 읽어들인다. m_sValue = (nState) ? “ON”: “OFF”; // DI 값이 1 이면 “ON” 0 이면 “OFF” 텍스트를 화면

에 표시 UpdateData(FALSE); // 텍스트를 화면에 표시 CDialog::OnTimer(nIDEvent);

-59-

Page 66: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장. 디지털 입력을 이용한 센서 계측

[그림 2.20] OnTimer 이벤트핸들러 생성하기

타이머 이벤트핸들러를 구성하였으면 타이머 이벤트를 시작시켜주는 구문을 작성

하여야 한다. 타이머 이벤트핸들러는 처음에는 동작하지 않다가 SetTimer() 함수를

이용하여 타이머 이벤트를 시작시켜준 이후부터 이벤트가 발생하게 된다.

다음과 같이 OnInitDialog() 이벤트핸들러에 SetTimer() 함수 호출 구문을 추가한다.

SetTimer 함수에 대한 설명은 제 1 장에서 수록하였으니 1 장을 참조하기 바란다. BOOL CExp2_1Dlg::OnInitDialog() CDialog::OnInitDialog(); if(!COMI_LoadDll()) MessageBox ("COMIDAS 라이브러리를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE; ghDevice = COMI_LoadDevice(COMI_SD104, 0); if(ghDevice==INVALID_HANDLE_VALUE) MessageBox ("COMI-SD104 장치를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE; SetTimer(0, 10, NULL); // 10ms 의 주기로 타이머 이벤트를 동작시킨다. return TRUE; // return TRUE unless you set the focus to a control

-60-

Page 67: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 2.1 근접 스위치를 이용한 시스템 감시

3 실험결과 및 과제 보고서

실험제목 : 근접 스위치를 이용한 시스템 감시

실험일자 : ______년 ___월 ___일

실 험 자 : 제 ___조 _________________________

학 번 : ____________________

1) 근접 스위치의 종류 및 각각의 특징에 대하여 정리하라

2) 본 실험에서 근접 스위치가 검출하지 못하는 물질이 있었는가? 있다면 그

예를 기술하고 그 이유를 설명하라.

3) PNP 형 출력을 내보내는 근접 센서의 출력을 COMI-SD104 보드의 디지털

입력으로 계측하기 위한 회로도를 작성하라.

4) 근접 센서를 이용하여 물체를 감지할 수 있도록 하여 감지됨을 화면에 표시

하고 근접 센서의 상태가 OFF 상태에서 ON 상태로 변한 회수를 감시하는

프로그램을 작성하라.

-61-

Page 68: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장. 디지털 입력을 이용한 센서 계측

-62-

Page 69: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 2.1 광전센서를 이용한 시스템 감시

실험 2.2 광전센서를 이용한 시스템 감시

실험 예비 사항

-. 광전센서의 종류와 원리에 대하여 조사하라

-. 광전센서의 사용예에 대하여 조사하라

실험 목적 산업현장에서 많이 사용되는 광전센서의 원리 및 용도에 대하여 이해하고 디지털

입력을 이용하여 광전센서의 상태를 자동계측하는 방법을 익힌다.

실험 장비 -. 컴퓨터 및 주변기기

-. Visual C++

-. COMI-SD104 보드 및 주변기기

-. COMI-EDKIT1 교육용 키트

-. 광전 센서(수광부, 발광부 포함)

1. 기초 이론 검출용 센서에는 응용하는 매체에 따라 여러가지로 구분되는데, 특히 광(光)을 매

체로서 응용한 것을 포토센서(광전센서)라고 부른다. 포토센서는 빛을 발산하는 발광

소자와 빛을 받아들이는 수광소자가 있으며 대부분은 이 두가지가 함께 쓰인다.

광전센서는 무접촉식 검출방식으로 물체의 유· 무, 통과 여부뿐만 아니라, 물체의

대ㆍ소, 색상, 명암 등을 검출할 수 있다는 것이 대표적인 용도로 되어 있다. 다음은

산업현장에서 광전센서를 응용하여 사용하는 예를 그림으로 나타낸 것이다.

-63-

Page 70: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장. 디지털 입력을 이용한 센서 계측

[그림 2.21] 광전센서의 사용예

-64-

Page 71: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 2.1 광전센서를 이용한 시스템 감시

발광소자 – 발광 다이오드 ( LED : Light Emitting Diode)

반도체의 PN 접합에 순방향전류(P 측에서 N 측으로)가 흐르는 것에 발광하는 것이

있다.이 작용(주입형 Elector-luminescence 라고 함)을 이용한 것이 발광 diode 이다. 반

도체 결정의 재료, PN 접합을 형성하는 불순물의 종류와 농도, 구조에 의해 가시광에

서 적외광까지 각종 파장의 제품이 시판되고 있다. 가시발광 diode 는 주로 표시용으

로 이용되고 있다. 적외발광 diode 는 인간의 시각으로는 감지되지 않지만 수광소자

인 Photo Diode, Photo Transistor 과 조합되어 신호처리용으로 이용되고있다 광전자에

서는 주로 적외발광 diode 를 생산하고 있다.

[그림 2.22] PN 접합의 발광현상

발광 diode 의 구조는 여러가지 있지만 대표적인 것을 하기에 표시한다. [그림

2.23(a)]는 갈륨비소(GaAs)의 home 접합으로 가장 일반적인 Peak 발광파장이 940 의

것이다. N 형 기판위에 액상 Epitaxial 로 하여 P 층,N 층의 갈륨비소를 형성하여 계속

한다. 불순물로는 실리콘을 사용하고, P 층, N 층은 Epitaxial 성장온도의 차이에 의해

한번에 이루어진다. [그림 2.23 (b)] 의 GaAlAs 는 AlAs 와 GaAs 의 혼전비 를 변화시

킨것으로 (예를 들면 G ao.65Alo.35As) 여러 종류의 파장을 가진 발광 diode 가 제작되

고 있다. 이 경우 각 조별 조성이 다른것으로 PN 접합을 형성하고 있기 때문에

Single Hetero 접합이라고 한다. 또한 (a), (b)에서는 극성이 반대가 된다.

-65-

Page 72: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장. 디지털 입력을 이용한 센서 계측

[그림 2.23] 발광다이오드의 구조

발광 diode 에 외부로부터 압력을 인가하지 않을 경우는 P 층과 N 층의 페루미

level 은 일치해 있어 확장전위(VD)에 의한 전자와 정공(hole)의 이동은 거의 없다. 순

전압(VF)을 인가하면 확장전위의 높이는 순전압분(純電壓分) 만큼 내려가 N 층보다

P 층에 전자가, P 층보다 N 층에 정공(hole)이 주입된다. 이렇게 해서 주입된 캐리어

(Carrier)는 초과 상태가 되고, 안정된 상태로 돌아오려고 PN 접합 부근에서 전자와

정공은 재결합한다. 이 재결합과정에서 잃어버리는 에너지를 광으로써 방출한다. 이

현상을 발광재결합 이라고 말하고, 그 광을 자연방출광이라고 말한다. 전자쪽이 정공

보다 이동도가 훨씬 크기 때문에 발광영역폭은 P 형 영역쪽이 수배 넓게 된다. 발광

재결합은 반도체결정의 주기율표 Ⅲ족(族) 원소와 Ⅴ족(族) 원소로부터된 Ⅲ-Ⅴ족(族)

의 반도체에서 발생하기 쉬운 현상이다. 재결합시 에너지 gap 에 의해 광 파장이 결

정된다. 그 때문에 적외발광 diode 에는 GaAs 등이 사용된다.

수광소자 – 포토 다이오드(Photo Diode)

수광소자 중에서 포토 다이오드는 광 Energy 를 전기 Energy 로 변환시키는 소자로

써 반도체의 PN 접합에 그 반도체의 Energy 보다 큰 Energy 를 갖는 광이 입사하면

광은 흡수되고 전류, 전압이 발생된다.

포토 다이오드는 고속 응답성과 주파수가 높은 변화의 광 신호를 캐치하는 수광

소자로 많이 사용되고 있다. 예를 들면, 포토센서의 수광 소자, 공 통신의 PCM 전송

또는 TV 나 VTR 의 적외선 리모콘의 수광용으로 활용되고 있다.

-66-

Page 73: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 2.1 광전센서를 이용한 시스템 감시

[그림 2.24] 포토 다이오드의 동작 원리

수광소자 – 포토 트랜지스터(Photo Transister)

광기전력 효과를 이용한 것으로 포토 다이오드와 비교해서 단른점은 트랜지스터에

의한 증폭작용을 지닌 소자라는 것이다. 수광 감도가 높아 발광 다이오드의 광에 대

한 감도 특성이 좋으므로 적당한 베이스(Base) 전류로서 이 소자를 제어하기가 대단

히 쉬운 특징을 지니고 있다. 따라서 이 소자는 포토 센서의 수광소자로써 포토다이

오드와 마찬가지로 폭넓게 이용되고 있다.

포토트랜지스터의 동작 원리는 반도체의 PN 접합에 광이 입사하여 광은 흡수되고

전류, 전압이 발생함을 이용한 수광 소자로 Photo Diode 에 Bipolar Transistor 를 조합

시킨것이라 말할 수 있다.

-67-

Page 74: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장. 디지털 입력을 이용한 센서 계측

[그림 2.25] 포토 트랜지스터의 동작 원리

광전센서의 검출형태에 따른 분류

투과형 광전센서

투광기와 수광기를 동일 광축선 상에 서로 마주보게 설치해 두고, 그 사이를 통과

하는 검출물체에 의해 광량(光量)의 변화가 발생하는 것을 검출하여 출력하는 광전

센서를 말한다.

[그림 2.26] 투과형 광전센서

-68-

Page 75: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 2.1 광전센서를 이용한 시스템 감시

미러반사형 광전센서

투광부와 수광부가 일체로 된 포토센서와 미러반사경 사이를 통과하는 검출물체에

의해 반사광량의 변화가 발생하는 것을 검출하여 출력하는 포토센서를 말한다. 이러

한 형식의 센서는 반사율이 높은 물체에는 사용상에 제한이 따르게 된다.

[그림 2.27] 미러반사형 광전센서

직접반사형 광전센서

투광부와 수광부가 일체로 되어 있으며, 투광부로부터 투사된 광이 검출물체에 부

딪혀서 반사된 광을 수광부가 직접 검출하여 출력하는 포토센서를 말한다. 된 포토

센서와 미러반사경 사이를 통과하는 검출물체에 의해 반사광량의 변화가 발생하는

것을 검출하여 출력하는 포토센서를 말한다.

[그림 2.28] 직접반사형 광전센서

-69-

Page 76: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장. 디지털 입력을 이용한 센서 계측

2. 실험 방법

2.1 하드웨어 인터페이스

커미조아의 교육용키트인 COMI-EDKIT1 에서 사용한 광전센서는 Autonics 사의

BY500 시리즈 제품으로써 신호 연결은 [그림 2.29]과 같이 하도록 되어 있다. 기타

센서의 자세한 사양은 부록을 참조하기 바란다.

[그림 2.29] 오토닉스사의 BY500 센서의 신호 연결도

COMI-EDKIT1 에서는 [그림 2.30]과 같은 회로를 이용하여 센서 인터페이스를 구현

하였다. 근접 스위치에서와 마찬가지로 광전센서(수광부)의 출력은 PC817 포토커플

러(Photo-coupler)를 이용한 절연회로를 거쳐서 COMI-SD104 디지털 입력 단자에 입

력되도록 하였다.

-70-

Page 77: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 2.1 광전센서를 이용한 시스템 감시

[그림 2.30] 광전센서 인터페이스 회로도

COMI-SD104 보드를 이용하여 COMI-EDKIT1 에 장착된 광전 센서를 계측하기 위

해서는 [그림 31]과 같이 연결하면 된다.

-71-

Page 78: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장. 디지털 입력을 이용한 센서 계측

COMI-EDKIT1의 포토센서 부분

GN

D

COMI-SDT1 터미널 보드

DI0

PHOTO SENSOR PHOTO SENSOR

[그림 2.31] 포토센서 실험을 위한 COMI-EDKIT1 과 COMI-SDT1 의 연결도

2.2 프로그램 제작

2.2.1 프로그램 개요

본 예제는 광전 센서가 물체를 감지한 회수를 카운트하여 화면에 디스플레이하는

프로그램 예제이다. 이 프로그램은 타이머 이벤트를 사용하여 광전 센서의 상태

(ON/OFF)를 감시하여 센서의 상태가 OFF 에서 ON 으로 변한 회수를 카운트하여 화

면을 갱신한다. 카운트값을 0 으로 초기화하고자 할때는 ‘Reset’ 버튼을 클릭하여 초

기화한다. 프로그램을 실행하면 [그림 2.32]과 같은 화면이 나타난다.

-72-

Page 79: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 2.1 광전센서를 이용한 시스템 감시

[그림 2.32] 예제 2.2 프로그램 실행화면

2.2.2 프로젝트 생성

다음 그림과 같이 Visual C++의 File 메뉴에서 New 명령을 선택하여 대화상자 기반

(Dialog based) 응용프로그램 프로젝트를 생성한다. 본 교재에서 제시한 광전 센서 계

측용 예제의 프로젝트명은 “Exp2_2”로 하였다.

[그림 2.33] 프로젝트 선택 화면

-73-

Page 80: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장. 디지털 입력을 이용한 센서 계측

[그림 2.34] 응용프로그램 형식 선택 화면

2.2.3 화면 구성

본 예제의 화면은 다음과 같이 3 개의 컨트롤로 구성된다.

[그림 2.35] 예제 2.2 의 화면 구성

컨트롤 ID 컨트롤 종류 비 고

IDC_STATIC Static text “센서 감지 회수” 타이틀(Title)

IDC_EDIT1 EDIT BOX 센서감지 회수를 화면에 디스플레이한다.

IDC_Reset Button 카운트값을 리셋시킨다.

[표 2.1] 예제 2.2 의 컨트롤 구성

-74-

Page 81: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 2.1 광전센서를 이용한 시스템 감시

2.2.4 COMI-SD104 라이브러리 포함하기

COMI-SD104 DAQ 보드의 라이브러리를 포함하기 위해서 다음과 같은 절차를 수

행한다.

① C:\Program Files\COMIZOA\COMIDAS-CPSD\Window\C_CPP\Lib 폴더에서

Comidas.cpp, Comidas.h 그리고 ComidasCommon.h 의 파일을 새로 생성된 프

로젝트 폴더에 복사한다.

② VC++의 Project => Add To Project => Files 메뉴를 선택하여 다음 그림과 같

이 3 개의 파일을 프로젝트에 추가한다.

[그림 2.36] COMI-SD104 라이브러리 관련 파일 추가

③ 다음 그림과 같이 Comidas.cpp 파일의 첫 줄에 있는 주석문을 해제한다.

-75-

Page 82: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장. 디지털 입력을 이용한 센서 계측

④ 아래의 코드예와 같이 Exp2_2Dlg.cpp 의 처음 부분에 #include “Comidas.h” 구

문을 추가하고 디바이스 핸들 전역 변수 “ghDevice”를 선언한다.

#include "stdafx.h" #include "Exp2_2.h" #include "Exp2_2Dlg.h" #include "Comidas.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CExp2_2Dlg dialog HANDLE ghDevice; CExp2_2Dlg::CExp2_2Dlg(CWnd* pParent /*=NULL*/) : CDialog(CExp2_2Dlg::IDD, pParent) //AFX_DATA_INIT(CExp2_2Dlg) m_sValue = _T(""); //AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); …… ……

2.2.5 사용자 정의 멤버 변수 선언

본 예제에서 필요한 변수들을 다음과 같이 Exp2_2Dlg.h 파일에 선언한다. 이러한

변수들은 클래스 전역에서 사용할 수 있도록 클래스 멤버 변수로 선언한다.

class CExp2_2Dlg : public CDialog private: BOOL m_bStatePrv; // Construction public: CExp2_2Dlg(CWnd* pParent = NULL); // standard constructor …… ……

-76-

Page 83: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 2.1 광전센서를 이용한 시스템 감시

변수명 데이터형 변수 사용 용도

m_bStatePrv BOOL

센서의 이전 상태를 저장하여 놓기 위한 변수 현재 센서의 상태가 ON 이고 이 변수값이

OFF 일때만 카운트를 증가한다. [표 2.2] 예제 2.2 에서 사용되는 사용자 정의 멤버 변수

2.2.6 OnInitDialog 이벤트 핸들러

Exp2_2Dlg.cpp 의 OnInitDialog 이벤트핸들러에서 프로그램 초기화 및 COMI-SD104

보드 초기화 루틴을 작성한다. BOOL CExp2_2Dlg::OnInitDialog() CDialog::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here m_bStatePrv = 0; if(!COMI_LoadDll()) MessageBox ("COMIDAS 라이브러리를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE; ghDevice = COMI_LoadDevice(COMI_SD104, 0); if(ghDevice==INVALID_HANDLE_VALUE) MessageBox ("COMI-SD104 장치를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE; SetTimer(0, 10, NULL); // 10ms 의 주기로 타이머 이벤트를 동작시킨다. return TRUE; // return TRUE unless you set the focus to a control

2.2.7 OnClose 이벤트 핸들러

[그림 2.37]과 같이 OnClose 이벤트핸들러를 생성하여 COMI-SD104 언로드(Unload)

및 기타 프로그램 종료시에 수행해주어야할 루틴을 작성한다.

-77-

Page 84: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장. 디지털 입력을 이용한 센서 계측

[그림 2.37] 클래스위저드를 이용한 OnClose 이벤트핸들러 생성

OnClose 이벤트핸들러는 다음과 같이 작성한다.

void CExp2_2Dlg::OnClose() // TODO: Add your message handler code here and/or call default KillTimer(0); COMI_UnloadDevice(ghDevice); COMI_UnloadDll(); CDialog::OnClose();

2.2.8 화면디스플레이를 위한 멤버변수 할당

광전 센서의 물체 감지 회수를 화면에 출력할 수 있도록 다음 그림과 같이 에디트

박스 콘트롤에 “m_dwCount” 라는 UINT 형 멤버 변수(Member variable)를 할당한다

-78-

Page 85: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 2.1 광전센서를 이용한 시스템 감시

[그림 2.38] 에디트박스 데이터 멤버변수 할당

2.2.9 타이머 이벤트를 이용한 광전센서 계측

타이머 이벤트핸들러를 생성하여 주기(10ms 단위)적으로 COMI-SD104 의 디지털

입력을 읽어들여 광전센서의 상태를 계측하고, 디지털 입력의 상태가 OFF 에서 ON

변하면 카운트값을 증가시키고 카운트값을 화면에 표시한다.

[그림 2.39] OnTimer 이벤트핸들러 생성하기

우선 먼저 [그림 2.39]을 참조하여 타이머 이벤트 핸들러를 생성한다. 그림과 같이

-79-

Page 86: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장. 디지털 입력을 이용한 센서 계측

OnTimer 이벤트핸들러를 생성하면 Exp2_2Dlg.cpp 소스파일에에 OnTimer() 함수가 자

동으로 생성된다. 자동 생성된 OnTimer 이벤트핸들러에 다음과 같은 코드를 삽입한

다. void CExp2_2Dlg::OnTimer(UINT nIDEvent) // TODO: Add your message handler code here and/or call default BOOL bState; bState = COMI_DI_GetOne(ghDevice, 0); // DI CH0 의 값을 읽어들인다. if(bState && !m_bStatePrv) // 센서가 OFF 에서 ON 으로 변하면 카운트를 증가시키고 카운트를 화면에 갱신한다. m_dwCount++; UpdateData(FALSE); m_bStatePrv = bState; CDialog::OnTimer(nIDEvent);

타이머 이벤트핸들러를 구성하였으면 타이머 이벤트를 시작시켜주는 구문을 작성

하여야 한다. 타이머 이벤트핸들러는 처음에는 동작하지 않다가 SetTimer() 함수를

이용하여 타이머 이벤트를 시작시켜준 이후부터 이벤트가 발생하게 된다.

다음과 같이 OnInitDialog() 이벤트핸들러에 SetTimer() 함수 호출 구문을 추가한다.

SetTimer 함수에 대한 설명은 제 1 장에서 수록하였으니 1 장을 참조하기 바란다. BOOL CExp2_2Dlg::OnInitDialog() CDialog::OnInitDialog(); m_bStatePrv = 0; if(!COMI_LoadDll()) MessageBox ("COMIDAS 라이브러리를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE; ghDevice = COMI_LoadDevice(COMI_SD104, 0); if(ghDevice==INVALID_HANDLE_VALUE) MessageBox ("COMI-SD104 장치를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE; SetTimer(0, 10, NULL); // 10ms 의 주기로 타이머 이벤트를 동작시킨다. return TRUE; // return TRUE unless you set the focus to a control

-80-

Page 87: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 2.1 광전센서를 이용한 시스템 감시

3. 실험결과 및 과제 보고서

실험제목 : 광전 센서를 이용한 시스템 감시

실험일자 : ______년 ___월 ___일

실 험 자 : 제 ___조 _________________________

학 번 : ____________________

1) 광전 센서의 종류 및 그 특징에 대하여 설명하라.

2) 광전 센서에 유리를 통과시켰을 때 유리를 검출해내는지 실험하고 그 결과

에 대하여 기술하라.

3) 사람이 들어오면 “어서오십시오”, 사람이 나가면 “안녕히 가십시오” 라는 사

운드를 내는 시스템을 설계하고 프로그램을 작성하라.

-81-

Page 88: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 2 장. 디지털 입력을 이용한 센서 계측

-82-

Page 89: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장

디지털 출력을 이용한 시스템 제어

제 3 장에서는 COMI-SD104 DAQ 보드의 디지털 출력 기능에 대한 전반적인 원리를

소개하고 디지털 출력 기능을 이용하여 LED, 7-SEGMENT, 릴레이 스위치, 스테핑 모

터등을 구동하는 방법을 소개한다.

실험 3.1 디지털 출력을 이용한 LED 구동 실험 ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ 87

실험 3.2 디지털 출력을 이용한 7-SEGMENT 구동 실험 ∙ ∙ ∙ ∙ ∙ ∙ ∙ 97

실험 3.3 디지털 출력을 이용한 릴레이 스위치 구동 실험 ∙ ∙ ∙ ∙ ∙ ∙ 109

실험 3.4 디지털 출력을 이용한 스텝모터 구동 실험 ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ 113

-83-

Page 90: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

제 3 장 디지털 출력을 이용한 시스템 제어

제 3 장에서는 COMI-SD104 DAQ 보드의 디지털 출력 기능에 대한 전반적인 원리

를 소개하고 디지털 출력 기능을 이용하여 LED, 7-SEGMENT, 릴레이 스위치, 스테핑

모터등을 구동하는 방법을 소개한다.

디지털 출력은 앞 장에서 공부한 디지털 입력과 반대의 개념이다. 디지털 입력 인

터페이스는 외부의 디지털 신호를 컴퓨터가 인식할 수 있는 디지털 데이터로 변환하

여 주는 것임에 반하여 디지털 출력은 컴퓨터의 디지털 데이터값을 전기적인 디지털

신호로 출력해주는 기능을 의미한다.

디지털 출력의 원리를 이해하기 위해 1 개의 LED(Light Emitting Diode)의 ON/OFF

상태를 제어하는 인터페이스를 생각해보자. [그림 3.1]은 이를 위한 인터페이스 회로

의 간단한 예로써 데이터 버스중의 LSB 로 1 개의 LED 를 제어하는 인터페이스를

나타낸다.

OUTSELECT

D

C

Q

Q

+5V

Inverting driver LED

Logic 0 = 0VLogic 1 = 5V

D Flip-Flop

I/O DATA BUS

I/O D0

[그림 3.1] 1 개의 LED 출력 인터페이스

LED 를 제어하는 출력명령이 주어지려면 먼저 CPU 레지스터의 하나인 누산기

(Accumulator)의 LSB 에 0 또는 1 을 넣고, 누산기의 데이터는 데이터 버스에, LED 출

력주소는 어드레스 버스에, 컨트롤 버스의 OUT 선에는 1 이 각각 실린다. 어드레스

-84-

Page 91: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

정보가 번지선택회로를 통하면 SELECT 선이 1 로 되어 SELECT=1, OUT=1 로 되기

때문에 D 플립플롭이 작동상태로 된다. D 플립플롭은 D 단자에서 데이터 버스의 LSB

값을 읽어들여 그 값을 Q 단자로 출력하고 다른 값이 들어올 때까지 그 상태를 유지

한다. Q 가 1 이면 인버터 출력은 0 이므로 LED 로 전류가 흘러 불이 켜지고, Q 가 0

이면 인버터 출력은 1 이므로 LED 로 전류는 흐르지 않아 불이 꺼진다.

3.1 COMI-SD104 의 디지털 출력 관련 라이브러리 함수

BOOL COMI_DO_PutOne (HANDLE hDevice, int ch, int status)

이 함수는 지정한 Digital Output 채널에 지정한 Status 로 출력을 내보낸다.

- hDevice : 디바이스 핸들 값이다. 이 값은 COMI_LoadDevice()함수에 의해 얻어진

값이어야 한다.

- ch : Digital Output 채널번호. 채널 번호는 0 부터 시작한다.

- status : 출력 Status. 0 - OFF, 1 - ON.

- Return : 1 => 성공

0 => 실패

BOOL COMI_DO_PutAll (HANDLE hDevice, DWORD dwStatuses)

모든 Digital Output 채널에 출력을 내보낸다. COMI-SD104 보드는 8 채널의 디지털

출력을 제공하며 dwStatuses 파라미터의 BIT0 ~ BIT7 에 D/O CH0 ~ CH7 의 출력값을

설정하여 이 함수를 수행한다.

- hDevice : 디바이스 핸들 값이다. 이 값은 COMI_LoadDevice()함수에 의해 얻어진

값이어야 한다.

- dwStatuses : 모든 Digital Output 채널의 출력 Status 를 나타내는 32 bit 값. COMI-

SD104 보드는 8 채널의 디지털 출력을 제공하며 dwStatuses 파라미터의 BIT0

~ BIT7 에 D/O CH0 ~ CH7 의 출력값을 설정한다.

- Return : 1 => 성공

0 => 실패

-85-

Page 92: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

실험 3.1 디지털 출력을 이용한 LED 구동 실험

실험 예비 사항

-. LED 의 구동 원리에 대하여 조사하라

-. 디지털 출력의 기능에 대하여 조사하라

실험 목적 LED 의 원리 및 작동 방법에 대하여 이해하고, 디지털 출력의 기능을 이용하여

LED 를 제어하는 방법을 익힌다.

실험 장비 -. 컴퓨터 및 주변기기

-. Visual C++

-. COMI-SD104 보드 및 주변기기

-. COMI-EDKIT1 교육용 키트

-. LED

1. 기초 이론 GaAs, GaP, GaAsP 등의 PN 접합 다이오드에 순방향 전류를 흘려 해당 재료의 컨

덕션 밴드와 발랜스 밴드로의 전자 천이로 발생되는 빛을 이용하는 것이 발광 다

이오드이다.

발광 다이오드의 원리를 간단히 설명하면 PN 접합에 순방향전압을 인가하면 밸

런스 밴드에 있던 전자들이 자극을 받아 금지대역(Energy Gap)을 넘어 열평형상태

치 이상의 컨덕션 밴드로 이동한다. 이후 컨덕션 밴드에 있던 과잉캐리어 (Excess

carrier)는 다시 밸런스 밴드로 천이하면서 에너지를 방출하는데 이 때의 에너지는

금지대역의 폭만큼이다.

LED 는 사람의 특성상 가시영역파장의 빛을 방출하는 소자만 사용되지만 용어

자체는 빛의 파장이 가시영역과 적외선 영역을 모두 포함 시킨다. LED 는 대략 2V

-86-

Page 93: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 3.1 디지털 출력을 이용한 LED 구동 실험

와 20mA 정도의 저전압, 저전류에서 동작하고 LED 는 기본적으로 전압구동소자가

아니고 전류구동소자이고 발광하는 광의 강도는 전류에 비례한다.

I

P

N

I

R

-

+Light energy

[그림 3.2] LED 에서의 전계발광

2. 실험 방법

2.1 하드웨어 인터페이스

LED 는 COMI-SD104 보드의 디지털 출력을 이용하여 직접 구동이 가능하다. 즉,

COMI-SD104 보드의 디지털 그라운드(Ground)와 디지털 출력을 LED 에 직접 연결하여

LED 를 제어할 수 있다

COMI-SD104 보드를 이용하여 COMI-EDKIT1 에 장착된 LED 를 제어하기 위해서

는 [그림 3.3]과 같이 연결하면 된다.

. 주의 : LED 구동 실험을 하기 위해서는 LED 밑에 있는 스위치를 “LED”로 표기

된 쪽으로 선택하여야 한다

-87-

Page 94: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

COMI-EDKIT1의 LED & 7SEGEMT 부분

GN

D

COMI-SDT1 터미널 보드D

O0

DO

1D

O2

DO

3D

O4

DO

5D

O6

DO

7

[그림 3.3] LED 구동 실험을 위한 COMI-EDKIT1 과 COMI-SDT1 의 연결도

2.2 프로그램 제작

2.2.1 프로그램 개요

본 예제는 [그림 3.4]와 같이 8 개의 버튼을 이용하여 8 개의 LED 의 ON/OF 상태

에 대한 명령을 내리고 이를 디지털 출력을 이용하여 LED 를 제어하는 예제이다. 사

용자는 제어하고자하는 LED 에 해당하는 버튼을 클릭하여 LED 의 상태를 제어하도

록 한다.

-88-

Page 95: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 3.1 디지털 출력을 이용한 LED 구동 실험

[그림 3.4] 예제 3.1 프로그램 실행화면

2.2.2 프로젝트 생성

다음 그림과 같이 Visual C++의 File 메뉴에서 New 명령을 선택하여 대화상자 기반

(Dialog based) 응용프로그램 프로젝트를 생성한다. 본 교재에서 제시한 LED 제어용

예제의 프로젝트명은 “Exp3_1”로 하였다.

[그림 3.5] 프로젝트 선택 화면

-89-

Page 96: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

[그림 3.6] 응용프로그램 형식 선택 화면

2.2.3 화면 구성

본 예제의 화면은 다음과 같이 8 개의 푸시버튼(Push button) 컨트롤로 구성된다. 푸

시버튼은 체크박스(Check box)에서 옵션을 변경하여 만든다.

[그림 3.7] 예제 3.1 의 화면 구성

-90-

Page 97: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 3.1 디지털 출력을 이용한 LED 구동 실험

컨트롤 ID 컨트롤 종류 CAPTION 비 고

IDC_CHECK1 Check Box “DO0” 푸쉬 버튼(Push button) 형식

IDC_CHECK2 Check Box “DO1” 푸쉬 버튼(Push button) 형식

IDC_CHECK3 Check Box “DO2” 푸쉬 버튼(Push button) 형식

IDC_CHECK4 Check Box “DO3” 푸쉬 버튼(Push button) 형식

IDC_CHECK5 Check Box “DO4” 푸쉬 버튼(Push button) 형식

IDC_CHECK6 Check Box “DO5” 푸쉬 버튼(Push button) 형식

IDC_CHECK7 Check Box “DO6” 푸쉬 버튼(Push button) 형식

IDC_CHECK8 Check Box “DO7” 푸쉬 버튼(Push button) 형식

[표 3.1] 예제 2.2 의 컨트롤 구성

Check Box 를 푸쉬버튼(Push button)형식으로 만들기 위해서는 Check Box 의 등록정

보에서 아래그림과 같이 ‘Push like’ 옵션을 선택하여야 한다.

[그림 3.8] Push-like 옵션 선택

2.2.4 COMI-SD104 라이브러리 포함하기

COMI-SD104 DAQ 보드의 라이브러리를 포함하기 위해서 다음과 같은 절차를 수

행한다.

-91-

Page 98: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

① C:\Program Files\COMIZOA\COMIDAS-CPSD\Window\C_CPP\Lib 폴더에서

Comidas.cpp, Comidas.h 그리고 ComidasCommon.h 의 파일을 새로 생성된 프

로젝트 폴더에 복사한다.

② VC++의 Project => Add To Project => Files 메뉴를 선택하여 다음 그림과 같

이 3 개의 파일을 프로젝트에 추가한다.

[그림 3.9] COMI-SD104 라이브러리 관련 파일 추가

③ 다음 그림과 같이 Comidas.cpp 파일의 첫 줄에 있는 주석문을 해제한다.

④ 아래의 코드예와 같이 Exp3_1Dlg.cpp 의 처음 부분에 #include “Comidas.h” 구

문을 추가하고 디바이스 핸들 전역 변수 “ghDevice”를 선언한다.

#include "stdafx.h"

-92-

Page 99: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 3.1 디지털 출력을 이용한 LED 구동 실험

#include "Exp3_1.h" #include "Exp3_1Dlg.h" #include "Comidas.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // Cexp3_1Dlg dialog HANDLE ghDevice; Cexp3_1Dlg::Cexp3_1Dlg(CWnd* pParent /*=NULL*/) : CDialog(Cexp3_1Dlg::IDD, pParent) //AFX_DATA_INIT(Cexp3_1Dlg) m_sValue = _T(""); //AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); …… ……

2.2.6 OnInitDialog 이벤트 핸들러

Exp2_2Dlg.cpp 의 OnInitDialog 이벤트핸들러에서 프로그램 초기화 및 COMI-SD104

보드 초기화 루틴을 작성한다. BOOL CExp2_2Dlg::OnInitDialog() CDialog::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here if(!COMI_LoadDll()) MessageBox ("COMIDAS 라이브러리를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE; ghDevice = COMI_LoadDevice(COMI_SD104, 0); if(ghDevice==INVALID_HANDLE_VALUE) MessageBox ("COMI-SD104 장치를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE;

-93-

Page 100: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

COMI_DO_PutAll(ghDevice, 0x00); // 디지털출력을 모두 OFF 초기화한다. return TRUE; // return TRUE unless you set the focus to a control

2.2.7 OnClose 이벤트 핸들러

OnClose 이벤트핸들러는 다음과 같이 작성한다.

void Cexp3_1Dlg::OnClose() // TODO: Add your message handler code here and/or call default COMI_UnloadDevice(ghDevice); COMI_UnloadDll(); CDialog::OnClose();

2.2.7 푸쉬버튼(Push button) 이벤트 핸들러

8 개의 푸쉬버튼 각각에 BN_CLICKED 이벤트핸들러를 할당한다. 이 함수들에서는

각 버튼의 눌림상태를 얻어와서 그에 해당하는 디지털 출력을 내보내어 LED 를 제

어하도록 한다. 아래는 IDC_CHECK1 체크박스의 이벤트핸들러 작성예이다.

void CExp3_1Dlg::OnCheck1() // 버튼의 눌림 상태를 얻어온다 // BOOL bState = ((CButton *)GetDlgItem(IDC_CHECK1))->GetCheck(); // D/O CH0 에 출력을 내보낸다. // COMI_DO_PutOne(ghDevice, 0, bState);

위의 코드와 같은 방식으로 IDC_CHECK2 ~ IDC_CHECK8 의 컨트롤의 이벤트핸들러

를 작성한다.

-94-

Page 101: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 3.1 디지털 출력을 이용한 LED 구동 실험

3. 실험결과 및 과제 보고서

실험제목 : 디지털 출력을 이용한 LED 구동 실험

실험일자 : ______년 ___월 ___일

실 험 자 : 제 ___조 _________________________

학 번 : ____________________

1) LED 의 밝기를 조절하기 위해서는 어떻게 해야 하는가?

2) 근접 센서로 물체를 감지하고 물체의 감지여부를 화면 및 LED 로 출력하는

프로그램을 작성하라.

3) 8 개의 LED 를 0.1 초 간격으로 순차 점등하고 8 번째 LED 가 점등된 후에는

전체가 2 회 점등되도록 하는 프로그램을 작성하라.

-95-

Page 102: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

실험 3.2 디지털 출력을 이용한 7-세그먼트 구동 실험

실험 예비 사항

-. 7-SEGMENT 의 구성에 대하여 조사하라

-. 비트 연산 방법에 대하여 조사하라

실험 목적 7-SEGMENT 의 원리 및 작동 방법에 대하여 이해하고, 디지털 출력의 기능을 이

용하여 7-SEGMENT 를 제어하는 방법을 익힌다.

실험 장비 -. 컴퓨터 및 주변기기

-. Visual C++

-. COMI-SD104 보드 및 주변기기

-. COMI-EDKIT1 교육용 키트

-. 7-SEGMENT

1. 기초 이론 전자기기의 출력을 사람의 시각에 적용하여 문자로 표시하는것 중 가장 간단한 소

자가 7 세그먼트이다. 7 세그먼트는 LED 와 마찬가지로 발광하므로 LCD 의 Back

Light 와 같은 기능이 별도로 필요없다. 7 세그먼트는 입력에 따라 알파벳 a 에서 g

까지, 숫자 0 에서 9 까지 표시가 가능하다. 7 세그먼트는 크게 두 종류가 사용되

는데 그 중 하나는 외부에서 캐소드가 공통으로 되어있는 캐소드 타입과 애노드가

공통으로 되어있는 애노드 타입이 있다. 7 세그먼트는 이의 구동을 위한 별도의

IC 칩을 사용하면 쉽게 구동할 수 있다.

그림 2-3 은 7 세그먼트의 외관과 타입을 보여준다.

-96-

Page 103: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 3.2 디지털 출력을 이용한 7-세그먼트 구동 실험

a

b

c

d

e

fg

a b c d e f g Dp

a b c d e f g Dp

Cathod Anode

[그림 3.10] 세그먼트의 외관과 종류

2. 실험 방법

2.1 하드웨어 인터페이스

7-SEGMENT 는 특별한 부가적인 회로없이 COMI-SD104 보드의 디지털 출력을 이용하

여 직접 구동이 가능합니다. 즉, COMI-SD104 보드의 디지털 그라운드(Ground)와 7

개의 디지털 출력을 7-SEGMENT 에 직접 연결하여 7-SEGMENT 를 제어할 수 있습니다.

COMI-SD104 보드를 이용하여 COMI-EDKIT1 에 장착된 LED 를 제어하기 위해서

는 [그림 3.11]과 같이 연결하면 된다.

. 주의 : 7-SEGMENT 구동 실험을 하기 위해서는 LED 밑에 있는 스위치를

“7SEGMENT”로 표기된 쪽으로 선택하여야 합니다.

-97-

Page 104: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

GN

D

COMI-SDT1 터미널 보드D

O0

DO

1

DO

2

DO

3

DO

4

DO

5

DO

6

DO

7

[그림 3.11] COMI-EDKIT1의 LED&7SEGMENT 부분

2.2 프로그램 제작

2.2.1 프로그램 개요

본 예제는 COMI-SD104 보드의 디지털 출력 기능을 이용하여 7-SEGMENT 를 제

어하는 예이다. [그림 3.12]와 같이 7 개의 푸쉬버튼을 이용하여 7-SEGMENT 형상을

만들고 주기적으로 각 버튼들의 눌림 상태를 체크하여 각 버튼에 해당하는 7-

SEGMENT 의 각 SEGMENT 의 ON/OFF 를 제어한다. 화면 오른쪽에 “16 진 데이터”

는 현재 7-SEGMENT 에 표시되는 숫자(또는 문자)를 출력하기 위한 7 비트 디지털

출력값을 나타낸다.

-98-

Page 105: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 3.2 디지털 출력을 이용한 7-세그먼트 구동 실험

[그림 3.12] 예제 3.1 프로그램 실행화면

2.2.2 프로젝트 생성

다음 그림과 같이 Visual C++의 File 메뉴에서 New 명령을 선택하여 대화상자 기반

(Dialog based) 응용프로그램 프로젝트를 생성한다. 본 교재에서 제시한 LED 제어용

예제의 프로젝트명은 “Exp3_2”로 하였다.

[그림 3.13] 프로젝트 선택 화면

-99-

Page 106: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

[그림 3.14] 응용프로그램 형식 선택 화면

2.2.3 화면 구성

본 예제의 화면은 다음과 같이 7 개의 푸쉬버튼(Push button) 컨트롤과 에디트박스

등으로 구성된다.

[그림 3.15] 예제 3.2 의 화면 구성

-100-

Page 107: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 3.2 디지털 출력을 이용한 7-세그먼트 구동 실험

컨트롤 ID 컨트롤 종류 CAPTION 비 고

IDC_CHECK1 Check Box “A” 푸쉬 버튼(Push button) 형식

IDC_CHECK2 Check Box “B” 푸쉬 버튼(Push button) 형식

IDC_CHECK3 Check Box “C” 푸쉬 버튼(Push button) 형식

IDC_CHECK4 Check Box “D” 푸쉬 버튼(Push button) 형식

IDC_CHECK5 Check Box “E” 푸쉬 버튼(Push button) 형식

IDC_CHECK6 Check Box “F” 푸쉬 버튼(Push button) 형식

IDC_CHECK7 Check Box “G” 푸쉬 버튼(Push button) 형식

IDC_EDIT1 Edit Box 7 채널 디지털 출력값을 16 진수로 화면에 표시

[표 3.2] 예제 3.2 의 컨트롤 구성

그림에서 7-SEGMENT 를 구성하는 푸쉬버튼들은 Check Box 를 다음 그림과 같이

옵션을 변경하여 만든 것이다. Check Box 의 등록정보에서 아래그림과 같이 ‘Push

like’ 옵션과 ‘Flat’옵션을 선택한다.

[그림 3.16] Push-like 옵션 선택

2.2.4 COMI-SD104 라이브러리 포함하기

COMI-SD104 DAQ 보드의 라이브러리를 포함하기 위해서 다음과 같은 절차를 수

행한다.

-101-

Page 108: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

① C:\Program Files\COMIZOA\COMIDAS-CPSD\Window\C_CPP\Lib 폴더에서

Comidas.cpp, Comidas.h 그리고 ComidasCommon.h 의 파일을 새로 생성된 프

로젝트 폴더에 복사한다.

② VC++의 Project => Add To Project => Files 메뉴를 선택하여 다음 그림과 같

이 3 개의 파일을 프로젝트에 추가한다.

[그림 3.17] COMI-SD104 라이브러리 관련 파일 추가

③ 다음 그림과 같이 Comidas.cpp 파일의 첫 줄에 있는 주석문을 해제한다.

④ 아래의 코드예와 같이 Exp3_2Dlg.cpp 의 처음 부분에 #include “Comidas.h” 구

문을 추가하고 디바이스 핸들 전역 변수 “ghDevice”를 선언한다.

#include "stdafx.h" #include "Exp3_2.h" #include "Exp3_2Dlg.h"

-102-

Page 109: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 3.2 디지털 출력을 이용한 7-세그먼트 구동 실험

#include "Comidas.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // Cexp3_2Dlg dialog HANDLE ghDevice; Cexp3_2Dlg::Cexp3_2Dlg(CWnd* pParent /*=NULL*/) : CDialog(Cexp3_2Dlg::IDD, pParent) //AFX_DATA_INIT(Cexp3_2Dlg) m_sValue = _T(""); //AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); …… ……

2.2.6 OnInitDialog 이벤트 핸들러

Exp3_2Dlg.cpp 의 OnInitDialog 이벤트핸들러에서 프로그램 초기화 및 COMI-SD104

보드 초기화 루틴을 작성한다. BOOL Cexp3_2Dlg::OnInitDialog() CDialog::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here if(!COMI_LoadDll()) MessageBox ("COMIDAS 라이브러리를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE; ghDevice = COMI_LoadDevice(COMI_SD104, 0); if(ghDevice==INVALID_HANDLE_VALUE) MessageBox ("COMI-SD104 장치를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE;

-103-

Page 110: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

COMI_DO_PutAll(ghDevice, 0x00); // 디지털출력을 모두 OFF 초기화한다. SetTimer(0, 10, NULL); return TRUE; // return TRUE unless you set the focus to a control

2.2.7 OnClose 이벤트 핸들러

OnClose 이벤트핸들러는 다음과 같이 작성한다.

void Cexp3_2Dlg::OnClose() // TODO: Add your message handler code here and/or call default COMI_UnloadDevice(ghDevice); COMI_UnloadDll(); CDialog::OnClose();

2.2.8 화면디스플레이를 위한 멤버변수 할당

7-SEGMENT 를 제어하기 위해 출력되는 7 비트(7 채널)의 디지털 출력 데이터값을

16 진수값으로 화면에 표시하기 위해서 다음 그림과 같이 에디트 박스 콘트롤에

“m_sHexaVal” 이라는 CString 형 멤버 변수(Member variable)를 할당한다..

[그림 3.18] 에디트박스 데이터 멤버변수 할당

2.2.9 타이머 이벤트를 이용한 7-SEGMENT 제어

타이머 이벤트핸들러를 생성하여 주기(10ms 단위)적으로 사용자가 화면에서 지정

-104-

Page 111: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 3.2 디지털 출력을 이용한 7-세그먼트 구동 실험

한대로 디지털 출력을 내보내어 7-SEGMENT 를 제어한다. void CExp3_2Dlg::OnTimer(UINT nIDEvent) ULONG dwDoStates=0x00; BOOL bStates; int nIDs[7]=IDC_CHECK1, IDC_CHECK2, IDC_CHECK3, IDC_CHECK4, IDC_CHECK5, IDC_CHECK6, IDC_CHECK7; for(int i=0; i<7; i++) // 푸시 버튼의 눌림상태를 얻어온다 // bStates = ((CButton*)GetDlgItem(nIDs[i]))->GetCheck(); // 32 비트중에서 해당 비트를 1 또는 0 으로 만들어준다. // dwDoStates = (bStates) ? dwDoStates | (1<<i): dwDoStates & ~(1<<i); // 모든 디지털 출력 채널을 동시에 제어한다 // COMI_DO_PutAll(ghDevice, dwDoStates); // 출력되는 7 채널의 값을 16 진(Hexa decimal)값으로 화면에 표시 // m_sHexaVal.Format("0x%x", dwDoStates); UpdateData(FALSE); CDialog::OnTimer(nIDEvent);

타이머 이벤트핸들러를 구성하였으면 다음과 같이 OnInitDialog 함수에서 타이머

이벤트를 시작시켜주는 구문을 작성하여야 한다. BOOL Cexp3_2Dlg::OnInitDialog() CDialog::OnInitDialog(); …… …… if(!COMI_LoadDll()) MessageBox ("COMIDAS 라이브러리를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE; ghDevice = COMI_LoadDevice(COMI_SD104, 0); if(ghDevice==INVALID_HANDLE_VALUE) MessageBox ("COMI-SD104 장치를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); //return TRUE; COMI_DO_PutAll(ghDevice, 0x00); // 디지털출력을 모두 OFF 초기화한다. SetTimer(0, 10, NULL); return TRUE; // return TRUE unless you set the focus to a control

-105-

Page 112: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

3. 실험결과 및 과제 보고서

실험제목 : 디지털 출력을 이용한 7-SEGMENT 구동 실험

실험일자 : ______년 ___월 ___일

실 험 자 : 제 ___조 _________________________

학 번 : ____________________

1) 캐소드 타입과 애노드 타입을 디지털 출력으로 제어시에 각각에 대하여 방법

상의 차이점이 있겠는가? 있다면 차이점을 설명하라

2) 광전 센서로 물체가 감지되는 횟수를 화면 및 7-SEGMENT 에 표시하는 프

로그램을 작성하라

-106-

Page 113: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 3.2 디지털 출력을 이용한 7-세그먼트 구동 실험

-107-

Page 114: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

실험 3.3 디지털 출력을 이용한 릴레이 스위치 구동 실험

실험 예비 사항

-. 릴레이 스위치의 종류 및 원리에 대하여 조사하라

실험 목적 릴레이 스위치의 원리 및 작동 방법에 대하여 이해하고, 디지털 출력의 기능을 이

용하여 릴레이 스위치를 제어하는 방법을 익힌다.

실험 장비 -. 컴퓨터 및 주변기기

-. Visual C++

-. COMI-SD104 보드 및 주변기기

-. COMI-EDKIT1 교육용 키트

-. 릴레이 스위치

1. 기초 이론 외부기기와 기계식 접점을 이용하여 인터페이스 하는것 중 대표적인 것이 릴레이

이다.

릴레이를 전자회로에 사용하는 경우 접점의 부하전류가 너무 작으면 개폐가 정확

하게 안 된다. 메이커에 따라 최소부하의 표준을 카탈로그에 기재하고 있는데 일

반적으로 접점의 전류용량이 클수록 미소전하의 개폐에는 부적당하다.

-108-

Page 115: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 3.3 디지털 출력을 이용한 릴레이 스위치 구동 실험

[그림 3.19] 릴레이 기본회로

기계식 접점을 이용하진 않지만 입출력간의 전기적으로 절연되어있는 소자로 포토

커플러가 있다. 포토커플러는 발광소자와 수광소자를 조합해서 하나의 소자를 구

성한 것으로 빛에 의하여 신호를 전달할 수 있는 특성을 갖춘 소자이다.

포토커플러의 특징으로는 입출력간이 전기적으로 절연되어있고 신호전달이 한쪽

방향이며 논리소자와 접속이 용이하며 응답속도가 빠르다는 것이다.

-109-

Page 116: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

3. 실험결과 및 과제 보고서

실험제목 : 디지털 출력을 이용한 릴레이 스위치 구동 실험

실험일자 : ______년 ___월 ___일

실 험 자 : 제 ___조 _________________________

학 번 : ____________________

1) 릴레이 스위치의 접점 방식에 대하여 조사하라

2) 자동 세척 소변기의 제어 시스템을 설계하고 구동 프로그램을 작성하라

-110-

Page 117: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 3.3 디지털 출력을 이용한 릴레이 스위치 구동 실험

-111-

Page 118: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

실험 3.4 디지털 출력을 이용한 스텝모터 구동 실험

실험 예비 사항

-. 모터의 종류에 대하여 조사하라

-. 전자석의 원리에 대하여 조사하라

실험 목적 스텝모터의 원리 및 작동 방법에 대하여 이해하고, 디지털 출력을 이용하여 펄스

를 발생하고 이를 이용하여 스텝모터를 구동하는 방법을 익힌다.

실험 장비 -. 컴퓨터 및 주변기기

-. Visual C++

-. COMI-SD104 보드 및 주변기기

-. COMI-EDKIT1 교육용 키트

-. 스텝모터

1) 기초 이론 최근에 stepping motor(pulse motor, stepper motor)가 가지는 독특한 특성과 정확한 위

치 제어 때문에 OA, FA 등에 많이 사용되고있다. stepping motor 는 AC servo, DC servo

motor 에 비하여 값이 싸고 정확한 각도 제어에 유리하여 우리 주위에서 쉽게 접할

수가 있다. 일반적으로 기계적인 이동량을 정밀하게 제어하는 일에 DC servo motor 나

stepping motor 가 많이 사용되고 있으며, 특히 stepping motor 는 pulse 에 의해 digital 적

으로 제어하는 것이 가능하므로 micom 에서 사용하기에 적합한 motor 이다. stepping

motor 가 DC motor 나 AC motor 와 크게다른 점은 모터의 shaft 의 위치를 검출하기 위

한 feedback 없이, 정해진 각도를 회전하고, 상당히높은 정확도로 정지할 수 있는 것

이다. 그리고, system 에 짜여진 뒤에도 초기 성능이 만족되어있으면, 갱년 변화가 적

고, 보수가 용이하며, 매우 신뢰성이 높은 system 을 구성할 수 있다. 또 다른 motor

-112-

Page 119: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 3.4 디지털 출력을 이용한 스텝모터 구동 실험

에 비해 정지시 매우 큰 유지 토크(정지 토크)가 있기 때문에 전자 브레이크 등의

유지 기구를 필요로 하지 않는다. 회전 속도에 있어서도 stepping motor 에 부여하는

pulse rate 에 비례하므로 임으로 제어할 수 있다. stepping motor 는 serial print 의 종이

보내기 제어,printer head 의 인자 위치 제어, XY Plotter 의 펜위치 제어나 floppy disk 의

head 위치 제어,지폐 계수기, 봉재기기, 전동 타자기, 팩시밀리 등에도 사용되고 있다.

스텝모터의 장점 스텝모터의 단점

1) 1 step 당 각도 오차가 5%이내이며

회전각 오차는 step 마다 누적되지 않는다.

2) 2) 회전각 검출을 위한 feedback 이

불필요하여, 제어계가 간단해서 가격

이 상대적으로 저렴하다.

3) DC motor 등과 같이 brush 교환 등과

같은 보수를 필요로 하지 않고 신뢰

성이 높다.

4) 모터축에 직결하므로써 초저속 동기

회전이 가능하다.

5) 기동및 정지 응답성이 양호하므로

servo motor 로써 사용가능하다.

1) 어느 주파수에서는 진동, 공진 현상

이 발생하기 쉽고, 관성이 있는 부하

에 약하다.

2) 고속 운전시에 탈조하기 쉽다.

3) 보통의 driver 로 구동시에는 권선의

인덕턴스 영향으로 인하여 권선에

충분한 전류를 흘리게 할 수 없으므

로 pulse 비가 상승함에따라 torque 가

저하하며 DC motor 에 비해 효율이

떨어진다.

[표 3.3] 스텝모터의 장단점

스테핑 모터는 3 상, 4 상, 5 상 권선형, VR 형, PM 형 및 하이브리드형으로 크게 나

눌 수 있다. 4 상 PM 형을 예로 들면 동작원리는 [그림 3.20]과 같으며 [그림 3.21]은

기본적인 스테핑 모터의 구동회로를 나타낸다. 처음에 스위치 S1 을 ON 으로 하면

권선 Ψ1 이 여자되고 이 때 고정자가 S 극으로 되었다고 하면 회전자 N 극이 와서

정지한다. 다음에 S1 을 OFF, S2 를 ON 하면 Ψ2 가 여자되어 회전자는 90 도 회전하

고 정지한다. 이와 같이 S1 에서 S4 까지 순번에 따라 반복하여 스위치를 전환함으로

써 회전자는 90 도씩 회전한다. 이것은 기본원리로써 실제로는 스위치 전환에 대한

스텝각은 아주 작다.

-113-

Page 120: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

N S

N S

NS

N

S

NS

N

SS

NS

N

(a) (b)

(c) (d)

[그림 3.20] 4 상 PM(영구자석)형 스테핑 모터의 동작원리

-114-

Page 121: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 3.4 디지털 출력을 이용한 스텝모터 구동 실험

S1

S2

S3

S4

Ψ2

Ψ3Ψ4

Ψ1

[그림 3.21] 기본적인 스테핑 모터의 구동회로

2. 실험 방법

2.1 하드웨어 인터페이스

COMI-SD104 보드의 디지털 출력은 스텝모터를 구동할 수 있는 충분한 전류를 공

급할 수 없기 때문에 스텝모터에 디지털 출력을 직접 연결하여 모터를 제어할 수는

없다. 이러한 이유로 일반적으로는 스텝모터 드라이버를 매개로 하여 스텝모터를 제

어하게 된다. 스텝모터 드라이버는 명령 신호(여기서는 디지털 출력 신호)에 동기를

맞추어 충분한 전류를 모터에 공급하는 역할을 한다.

COMI-EDKIT1 에서는 SLA7024M 이라는 IC 칩을 이용하여 스텝모터 드라이버 회로

를 직접 구성하였으며, 그 회로는 [그림 3.22]와 같다. SLA7024M 스텝모터 드라이버

칩의 자세한 사양은 부록에 수록하였으므로 부록을 참조하기 바란다.

-115-

Page 122: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

[그림 3.22] COMI-EDKIT1 에 구성된 스텝모터 드라이버 회로도

COMI-SD104 보드의 디지털 출력 기능과 COMI-EDKIT1 에 구성된 스텝모터 구동

회로를 이용하여 스텝모터를 구동하기 위해서는 [그림 3.23]과 같이 신호선을 연결하

면 된다.

-116-

Page 123: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 3.4 디지털 출력을 이용한 스텝모터 구동 실험

스텝모터

CO

MI-

ED

KIT

1의

STEP M

OTO

R 부

GN

D

COMI-SDT1 터미널 보드

DO

0D

O1

DO

2D

O3

DO

4D

O5

DO

6D

O7

[그림 3.23] 스텝모터 구동 실험을 위한 COMI-EDKIT1 과 COMI-SDT1 의 연결도

2.2 프로그램 제작

2.2.1 프로그램 개요

본 예제는 COMI-SD104 보드의 디지털 출력 기능을 이용하여 스텝모터를 구동하

는 예제 프로그램이다. 프로그램을 실행하면 [그림 3.24]와 같은 화면이 나타난다.

-117-

Page 124: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

[그림 3.24] 예제 3.1 프로그램 실행화면

화면에서 각 설정 항목 및 버튼의 역할은 다음과 같다.

-. 모터구동모드 : 모터의 구동 모드 즉, 여자 방식을 결정한다.

-. 스텝주기 : 스텝주기 즉, 모터를 구동하기 위해 출력되는 펄스의 주기를 결정한

다. 단위는 msec 단위이다.

-. 스텝수 : 모터를 구동하기 위한 펄스의 수를 설정한다. 이 것은 곧, 모터의 회전

각도를 결정한다.

-. CCW-구동 : 각 설정값에 따라 모터를 반시계 방향으로 구동한다.

-. CW-구동 : 각 설정값에 따라 모터를 시계 방향으로 구동한다.

2.2.2 화면 구성

리소스 편집기에서 다음과 같이 화면을 구성한다.

-118-

Page 125: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 3.4 디지털 출력을 이용한 스텝모터 구동 실험

[그림 3.25] 예제 3.4 의 화면 구성

컨트롤 ID 컨트롤 종류 CAPTION 비 고

IDC_Mode0 Radio button “HALF STEP MODE”

‘Group’ 옵션을 선택하여야

한다.

IDC_Mode1 Radio button “NORMAL MODE”

IDC_Mode2 Radio button “WAVE DRIVE MODE”

IDC_Interval Edit Box “스텝주기” 에디트박스

IDC_NumStep Edit Box “스텝수” 에디트박스

IDC_DriveCCW Button “<< CCW-구동” 반시계 방향 구동 명령 버튼

IDC_DriveCW Button “<< CW-구동” 시계 방향 구동 명령 버튼

[표 3.4] 예제 3.4 의 컨트롤 구성

Radio button 의 그룹 사용

화면에서 모터 구동 모드를 선택하는 3 개의 라디오 버튼(Radio button)은 그룹으

로 사용된다. 라디오 버트을 그룹으로 사용하게 되면 같은 그룹으로 지정된 라디

오 버튼들 중에서 하나의 라디오 버튼만 선택되게 된다. 즉, 화면의 3 개의 라디

-119-

Page 126: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

오 버튼 중에서 하나를 클릭하게 되면 클릭된 것만 선택되게 되고 나머지는 모두

OFF 가 되는 것이다. 이것은 여러 개의 선택사항 중에서 하나의 선택만 되도록하

는 작업을 자동화하는 것이다.

이와 같이 라디오 버튼을 그룹으로 사용하기 위해서는 탭순서(Tab order)가 가장

빠른 라디오 버튼(본 예제에서는 IDC_Mode0)의 등록정보에서 아래 그림과 같이

‘Group’옵션을 선택하면 된다. 단, 나머지 라디오 버튼들은 ‘Group’옵션을 선택하면

않된다.

[그림 3.26] ‘Group’ 옵션 선택화면

2.2.3 COMI-SD104 라이브러리 포함하기

COMI-SD104 DAQ 보드의 라이브러리를 포함하는 방법은 앞서의 실험들과 동일하

므로 설명은 생략하며 1 장이나 2 장의 실험 방법을 참조하기 바란다.

2.2.4 OnInitDialog 이벤트 핸들러

Exp3_4Dlg.cpp 의 OnInitDialog 이벤트핸들러에서 프로그램 초기화 및 COMI-SD104

보드 초기화 루틴을 작성한다. BOOL Cexp3_4Dlg::OnInitDialog() CDialog::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here // SPIN Control 의 값 범위를 지정한다. // ((CSpinButtonCtrl *)GetDlgItem(IDC_SPIN1))->SetRange(1, 1000); ((CSpinButtonCtrl *)GetDlgItem(IDC_SPIN1))->SetRange(1, 10000); if(!COMI_LoadDll())

-120-

Page 127: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 3.4 디지털 출력을 이용한 스텝모터 구동 실험

MessageBox ("COMIDAS 라이브러리를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE; ghDevice = COMI_LoadDevice(COMI_SD104, 0); if(ghDevice==INVALID_HANDLE_VALUE) MessageBox ("COMI-SD104 장치를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE; COMI_DO_PutAll(ghDevice, 0x00); // 디지털출력을 모두 OFF 초기화한다. return TRUE; // return TRUE unless you set the focus to a control

2.2.5 OnClose 이벤트 핸들러

OnClose 이벤트핸들러는 다음과 같이 작성한다.

void Cexp3_4Dlg::OnClose() // TODO: Add your message handler code here and/or call default COMI_UnloadDevice(ghDevice); COMI_UnloadDll(); CDialog::OnClose();

2.2.6 컨트롤과 관련된 멤버변수 할당

화면에서 사용자가 설정하는 선택사항들을 변수로 저장하기 위해서 각 컨트롤과

맵핑되는 멤버 변수들을 할당하여야 한다. 각 컨트롤과 관련된 멤버 변수들은 다음

의 표와 같이 할당한다.

CONTROL ID Variable name CATEGORY Variable type 비고

IDC_Mode0 m_nMode VALUE INT ‘모터구동모드’ 설정값

IDC_Interval m_nInterval Value UINT ‘스텝주기’ 설정값

IDC_NumStep m_nNumStep Value UINT ‘스텝수’ 설정값

[표 3.5] 각 컨트롤과 관련된 멤버 변수

여기서 m_nMode 변수는 3 개의 Radio 버튼을 대표하는 값으로써 첫 번째 Radio 버

-121-

Page 128: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

튼이 선택되면 이 값이 0 이고, 두 번째 Radio 버튼이 선택되면 1, 세 번째가 선택되

면 2 값이 저장된다. 라디오 버튼을 그룹으로 사용하게 되면 이렇게 첫번째 라디오

버튼에만 변수를 할당하면 된다.

2.2.6 AccurateTimer 클래스 포함하기

본 예제에서는 AccurateTimer 클래스를 사용하였다. 이 클래스는 1msec 의 정밀도

를 가지는 아주 정확한 지연(Delay) 작업을 수행해주는 클래스이다. 본 예제에서는

펄스의 주기를 정확하게 제어하기 위하여 이 클래스를 사용하였으며 사용한 곳은 실

제 모드 구동 함수인 Mode0Drive(), Mode1Drive(), 그리고 Mode2Drive() 함수 내부

에서 사용하였다. 사용예는 다음에 이 세 가지의 함수를 설명할 때 다시 언급하기로

한다.

여러분이 AccurateTimer 클래스를 사용하기 위해서는 본 예제와 함께 제공되는

AccurateTimer.cpp 와 AccurateTimer.h 파일을 여러분의 프로젝트 폴더에 복사한 후 여

러분의 프로젝트에 추가하여야 한다.

그리고 CExp3_4Dlg.CPP 파일의 처음 부분에 다음과 같이 #include “AccurateTimer.h”

구문을 추가한다.

#include "stdafx.h" #include "Exp3_4.h" #include "Exp3_4Dlg.h" #include "Comidas.h" #include "AccurateTimer.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif …… ……

2.2.7 각 여자 방식별 모터 구동 함수

실제로 모터를 구동하는 함수는 각 여자 방식에 따라 다음과 같이 같이 작성한다.

. MODE0 (HALF STEP MODE)

HALF STEP MODE 는 [그림 3.27]과 같이 하나의 사이클이 8 단계로 구성된다.

-122-

Page 129: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 3.4 디지털 출력을 이용한 스텝모터 구동 실험

[그림 3.27] HALF STEP MODE 구동 방식 제어 사이클

HALF STEP MODE 로 제어하기 위해서는 구동함수를 다음과 같이 작성하면 된다. void Mode0Drive(int nDir, UINT nInterval, UINT nNumStep) WORD wCommand[2][8] = 0x5, 0x1, 0x9, 0x8, 0xa, 0x2, 0x6, 0x4, /*정방향 command */ 0x4, 0x6, 0x2, 0xa, 0x8, 0x9, 0x1, 0x5 /*역방향 command */ ; int nCommIdx; AccurateTimer AccTimer; for(UINT i=0; i<nNumStep; i++) // COMMAND 배열에서 COMMAND 값을 순차적으로 빼내서 // // 디지털 출력값으로 순차적 출력을 수행한다. // nCommIdx = i%8; // COMMAND 배열에서 추출해내야하는 COMMAND 값의 배열 인덱스 COMI_DO_PutAll(ghDevice, wCommand[nDir][nCommIdx]); AccTimer.Wait(nInterval); // 사용자가 지정한 Interval 만큼 지연 //

. MODE1 (NORMAL DRIVE MODE)

NORMAL DRIVE MODE 는 2-Phase-On 구동 방식이라 불리기도 하며, [그림 3.28]과

같이 하나의 사이클이 4 단계로 구성된다. 단, CH0 과 CH2, CH1 과 CH3 의 디지털 출

력이 짝을 이루어 동시에 ON 또는 OFF 된다.

-123-

Page 130: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

[그림 3.28] NORMAL DRIVE MODE 구동 방식 제어 사이클

NORMAL DRIVE MODE 로 제어하기 위해서는 구동함수를 다음과 같이 작성하면 된

다. void Mode1Drive(int nDir, UINT nInterval, UINT nNumStep) WORD wCommand[2][4] = 0x5, 0x9, 0xa, 0x6, /*정방향 command */ 0x6, 0xa, 0x9, 0x5 /*역방향 command */ ; int nCommIdx; AccurateTimer AccTimer; for(UINT i=0; i<nNumStep; i++) // COMMAND 배열에서 COMMAND 값을 순차적으로 빼내서 // // 디지털 출력값으로 순차적 출력을 수행한다. // nCommIdx = i%4; // COMMAND 배열에서 추출해내야하는 COMMAND 값의 배열 인덱스 COMI_DO_PutAll(ghDevice, wCommand[nDir][nCommIdx]); AccTimer.Wait(nInterval); // 사용자가 지정한 Interval 만큼 지연 //

. MODE2 (WAVE DRIVE MODE)

WAVE DRIVE MODE 는 1-Phase-On 구동 방식이라 불리기도 하며, [그림 3.29]와 같이

하나의 사이클이 4 단계로 구성된다. 단, 하나의 채널만 ON 이 되고 나머지 채널은

OFF 가 된다.

-124-

Page 131: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 3.4 디지털 출력을 이용한 스텝모터 구동 실험

[그림 3.29] WAVE DRIVE MODE 구동 방식 제어 사이클

WAVE DRIVE MODE 로 제어하기 위해서는 구동함수를 다음과 같이 작성하면 된다. void Mode2Drive(int nDir, UINT nInterval, UINT nNumStep) WORD wCommand[2][4] = 0x1, 0x8, 0x2, 0x4, /*정방향 command */ 0x4, 0x2, 0x8, 0x1 /*역방향 command */ ; int nCommIdx; AccurateTimer AccTimer; for(UINT i=0; i<nNumStep; i++) // COMMAND 배열에서 COMMAND 값을 순차적으로 빼내서 // // 디지털 출력값으로 순차적 출력을 수행한다. // nCommIdx = i%4; // COMMAND 배열에서 추출해내야하는 COMMAND 값의 배열 인덱스 COMI_DO_PutAll(ghDevice, wCommand[nDir][nCommIdx]); AccTimer.Wait(nInterval); // 사용자가 지정한 Interval 만큼 지연 //

2.2.8 시계방향(CW) 모터 구동

IDC_DriveCW 버튼의 이벤트 핸들러를 생성하여 다음과 같이 구성한다. 단, 이 함수

정의 이전에 #define DIR_CW 0 이라는 구문이 선행되어야 한다.

#define DIR_CW 0 void CExp3_4Dlg::OnDriveCW() // 구동 버튼을 비활성화 시킨다. // GetDlgItem(IDC_DriveCW)->EnableWindow(FALSE);

-125-

Page 132: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

GetDlgItem(IDC_DriveCCW)->EnableWindow(FALSE); // 화면에서 사용자의 설정값을 얻어온다. // UpdateData(); switch(m_nMode) case 0: // HALF STEP MODE Mode0Drive(DIR_CW, m_nInterval, m_nNumStep); break; case 1: // NORMAL DRIVEP MODE Mode1Drive(DIR_CW, m_nInterval, m_nNumStep); break; case 2: // WAVE DRIVE MODE Mode2Drive(DIR_CW, m_nInterval, m_nNumStep); break; // 구동 버튼을 활성화 시킨다. // GetDlgItem(IDC_DriveCW)->EnableWindow(TRUE); GetDlgItem(IDC_DriveCCW)->EnableWindow(TRUE);

2.2.8 반시계방향(CCW) 모터 구동

IDC_DriveCCW 버튼의 이벤트 핸들러를 생성하여 다음과 같이 구성한다. 단, 이 함

수 정의 이전에 #define DIR_CCW 0 이라는 구문이 선행되어야 한다.

#define DIR_CW 0 void CExp3_4Dlg::OnDriveCW() // 구동 버튼을 비활성화 시킨다. // GetDlgItem(IDC_DriveCW)->EnableWindow(FALSE); GetDlgItem(IDC_DriveCCW)->EnableWindow(FALSE); // 화면에서 사용자의 설정값을 얻어온다. // UpdateData(); switch(m_nMode) case 0: // HALF STEP MODE Mode0Drive(DIR_CCW, m_nInterval, m_nNumStep); break; case 1: // NORMAL DRIVEP MODE Mode1Drive(DIR_CCW, m_nInterval, m_nNumStep); break; case 2: // WAVE DRIVE MODE Mode2Drive(DIR_CCW, m_nInterval, m_nNumStep); break; // 구동 버튼을 활성화 시킨다. // GetDlgItem(IDC_DriveCW)->EnableWindow(TRUE); GetDlgItem(IDC_DriveCCW)->EnableWindow(TRUE);

-126-

Page 133: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 3.4 디지털 출력을 이용한 스텝모터 구동 실험

-127-

Page 134: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

3. 실험결과 및 과제 보고서

실험제목 : 디지털 출력을 이용한 스텝모터 구동 실험

실험일자 : ______년 ___월 ___일

실 험 자 : 제 ___조 _________________________

학 번 : ____________________

1) 스텝모터의 여자 방식에서 HALF STEP MODE, NORMAL DRIVE MODE, WAVE

DRIVE MODE 각각에 대하여 그 특징 및 장∙단점을 조사하라.

2) 근접스위치와 광전센서를 계측하여 각 센서가 ON 이 되면 스텝모터를 일정

양만큼 회전하는 프로그램을 작성하라. 한번에 회전하는 양과 회전속도는 사용

자로부터 입력받도록 하고, 근접 스위치와 광전센서는 각각 서로 다른 방향의

회전을 지시하도록 하라.

-128-

Page 135: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 3.4 디지털 출력을 이용한 스텝모터 구동 실험

-129-

Page 136: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 3 장. 디지털 출력을 이용한 시스템 제어

제 4 장

카운터를 이용한 펄스 계수

카운터는 일반적으로 펄스의 수를 계수하는 용도로 사용하는 회로이다. 카운터의 종

류는 여러가지가 있으나 본 장에서는 간단한 카운터 회로의 구성 원리와 카운터를

이용하여 펄스를 계수하거나 펄스의 주파수를 계측하는 방법에 대하여 알아본다.

실험 4.1 카운터를 이용한 엔코더 펄스 계수 실험 ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ 139

-130-

Page 137: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 4 장 카운터를 이용한 펄스 계수

카운터는 일반적으로 펄스의 수를 계수하는 용도로 사용하는 회로이다. 카운터의

종류는 여러가지가 있으나 본 장에서는 간단한 카운터 회로의 구성 원리와 카운터를

이용하여 펄스를 계수하거나 펄스의 주파수를 계측하는 방법에 대하여 알아본다.

카운터는 순차논리회로의 가장 단순한 형태로써 새로운 입력 조건이 주어질 때까

지 그 상태를 기억유지하는 플립플롭이 가장 기본이 되는 회로이므로 먼저 플립플롭

의 종류와 각각의 특징을 알아본 후 이들을 이용한 카운터를 구성하는 방법에 대하

여 설명하고자 한다.

4.1 플립플롭(FF, Flip-Flop)

1) RS 플립플롭(RS-FF)

RS 플립플롭(약자로 RS-FF)은 세트(Set) 입력 S, 리셋(Reset) 입력 R 에 의해서 상

태가 결정되며, 그 상태를 유지한다. [그림 4.1]은 NAND 게이트를 2 개 사용한 RS-FF

회로를 나타낸 것이다. 회로도에서 입력 S=0, R=1 의 경우에는 출력 Q 가 세트(Q=1)

되고, 입력 S=1, R=0 의 경우에는 출력 Q 가 리셋(Q=0)됨을 알 수 있다. 여기서 입력

S, R 는 로우레벨(Low level)신호 의미를 가진 액티브 로우(Active low)의 부논리 동작

때문에 각각 신호명 밑에 “ “표시가 붙는다.

[그림 4.1 (b)]는 RS-FF(엄밀하게는 RS-FF 이다)의 논리 기호이며, 부논리 입력의 단

자에 상태 표시 기호 “ ”를 붙인다. 플립플롭에서 출력 Q 는 항상 출력 Q 와 반대

의 레벨을 출력하므로 입력 S, R 를 동시에 “0”으로 하는 것은 금지된다.

-131-

Page 138: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 4 장. 카운터를 이용한 펄스 계수

NAND

NAND

S

Q

Q

R

입력 출력

Q

QSET

CLR

S

R

S

R

Q

Q

(a) NAND 게이트에 의한 RS-FF (b) RS-FF 의 논리기호

[그림 4.1] RS 플립플롭

1

0

1

0

1

0

1

0

S

R

Q

Q

[그림 4.2] RS 플립플롭의 타이밍 차트

S R Q Q 동작

0 0 * * 금지

0 1 1 0 세트

1 0 0 1 리셋

1 1 Q Q 변화없음

[표 4.1] RS 플립플롭의 진리표

-132-

Page 139: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

2) D 플립플롭(D-FF)

S

R

Q

Q

D

CK

클럭 D Q 0

1 0 1

[그림 4.3] D 플립플롭 회로의 개념도

Q

QSET

CLR

D

CK

입력D

클럭

[그림 4.4] D 플립플롭의 논리기호

[그림 4.4]와 같이 RS-FF 의 S 에는 클럭(CK)과 입력 데이터(D)를 AND 연결하여 입

력하고, R 에는 입력 데이터(D)가 NOT 를 거쳐서 나온신호와 클럭(CK)을 AND 연결

하여 입력하는 회로이다. 따라서 Q 의 출력값은 D 의 출력값과 동일한 출력값을 가

지게 되나 CK 신호가 0 인 경우에는 D 의 값이 변하여도 출력값은 변화가 없게된다.

즉 CK 신호의 상승에지(Rising Edge)에 동기되어 D 의 입력값이 출력 Q 에 출력(기억)

되게 된다. 입력의 데이터가 클럭(CK)에 따라서 늦게 출력된다는 의미로 D(Delay)

플립플롭이라 한다.

3) JK 플립플롭(JK-FF)

J-K FF 은 가장 일반적으로 사용되는 형으로 [그림 4.5]와 같이 RS 플립플롭과

AND Gate 에 의해 구성된다. 진리표를 보면 RS-FF 과 비슷하나 입력이 모두 1 인

경우 현 상태를 반전(toggle) 시킨다. 즉 J 와 K 가 모두 1 이고, 현재의 Q 가 0 인

경우 클럭(CK)이 입력되면 Q 는 1 이 되고, 또 다음 클럭이 입력되면 0, 또 그다음

에는 1, 이와 같이 클럭이 계속 인가되면 출력은 0 과 1 이 교대로 나타난다.

-133-

Page 140: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 4 장. 카운터를 이용한 펄스 계수

S

R

Q

Q

AND

AND

J

CK

K

클럭 J K Q 동작 0

011

0101

Q01Q

변화없음 리셋 세트 반전

[그림 4.5] JK 플립플롭 회로의 개념도

J

Q

Q

K

SET

CLR

CK클럭

[그림 4.6] JK 플립플롭의 논리기호

4) T 플립플롭(T-FF)

J

Q

Q

K

SET

CLR

CK클럭CK

Vcc

Q

QSET

CLR

D

L

TCK

[그림 4.7] JK-FF 에 의한 T-FF 으로의 변환

CK

Q

[그림 4.8] T-FF 의 동작 타이밍 차트

-134-

Page 141: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

T 플립플롭은 클럭이 입력될 때마다 출력이 반전하는 에지 트리거형의 플립플롭을

T 플립플롭(T-FF)이라 한다. T 는 토글(Toggle)을 의미한다. 이것은 [그림 4.7]과 같이

JK-FF 의 J, K 입력을 모두 “1”로 함으로써 얻어지며, 클럭 CK 의 상승에지가 발생할

때마다 출력 Q 는 반전한다. [그림 4.8]의 타이밍 차트에서 알 수 있는 바와 같이 클

럭 펄스 2 개로 1 개의 펄스를 출력하므로 입력 펄스의 수를 2 진수로 변환하는 카운

터로 동작한다.

4.2 카운터

카운터는 여러 개의 플립플롭(FF)으로 구성되며, 입력 펄스의 개수를 세어 기억하

는 회로를 말한다. 카운터는 디지털 회로의 대표적인 소자이며, 주파수의 분주, 타이

머 등에도 사용되어 대단히 응용 범위가 넓다.

본 교재에서는 3 비트 비동기 카운터를 예로하여 타이머 회로의 구성원리를 간단

히 설명하고자 한다. 비동기 카운터는 각각의 FF 의 동작에 시간적 지연이 발생하기

때문에 FF 의 후단으로 갈수록 처음 FF 의 클럭 입력에 비하여 시간 지연이 커지는

단점이 있다. 따라서 COMI-SD104 에서 사용한 카운터 회로는 본교재에서 설명하는

방법보다 복잡하게 구성되게 된다. 하지만 카운트를 수행하는 기본 원리는 비슷하므

로 비교적 회로 구성이 간단한 3 비트 비동기 카운터를 예로하여 카운터 회로 구성

의 원리를 이해할 수 있도록 하고자 한다.

[그림 4.9]와 같이 앞 단의 플립플롭 출력을 다음 단의 입력 신호로 하여 각 플립

플롭이 차례차례 동작하는 방식의 카운터를 비동기 카운터(Asynchronous couter)라 한

다. 또는 신호파가 전해지는 현상에 비교하여 리플 카운터(Ripple counter)라고도 한다.

[그림 4.9 (a)]는 3 개의 T-FF 을 이용하여 8 비트 비동기 카운터를 구성하는 예이다.

T-FF 은 클럭 펄스 CK 의 하강이 있을 때마다 출력이 반전하는 플립플롭이다. 따라

서 출력 QA, QB, QC 는 각 FF 의 입력 하강에서 반전하므로 타이밍 차트를 그려보면

[그림 4.9 (b)]와 같이 된다. 각 FF 는 입력 펄스 2 개로 1 개의 펄스를 출력하므로 출

력 QA 를 LSB, 출력 QC 를 MSB 로 하여 논리표를 작성하면 [표 4.2]와 같다. 출력

QC, QB, QA의 비트가 각각 22, 21, 20의 가중값을 갖는 것이므로 2 진수 (000)2 = 0 으로

클럭 펄스 CK 의 카운트를 시작하여 (111)2 = 7 까지 된 후 다음의 펄스를 세면 또

(000)2로 되돌리는 8 진 카운터(3 비트 2 진 카운터)로 됨을 알 수 있다.

-135-

Page 142: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 4 장. 카운터를 이용한 펄스 계수

QA(21)

CK

Q

QSET

CLR

D

L

T

R Q

QSET

CLR

D

L

T

R

QAQ

B QC

Q

QSET

CLR

D

L

T

R

CK

QA(20)

QA(22)

0

0

0

1

0

0

0 1 0 1 0 1

1 1

0 0

0 0 1 1

1 1 1 1

0 1 2 3 4 5 6 7 8

LSB

MSB

(a)

(b) [그림 4.9] 3 비트 2 진 카운터(비동기 8 진 카운터)

출 력 클럭 펄스의

계수 QC (22)

QB (21)

QA (20)

0 1 2 3 4 5 6 7

0 0 0 0 1 1 1 1

0 0 1 1 0 0 1 1

0

1 0 1 0 1 0 1

(8) 0 0 0

[표 4.2] 3 비트 2 진 카운터의 논리표

-136-

Page 143: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

4.3 COMI-SD104 보드의 카운터 관련 라이브러리 함수

void COMI_ClearCounter32 (HANDLE hDevice, int ch)

이 함수는 지정한 카운터 채널의 카운트 값을 0 으로 리셋(reset)하여 준다.

- hDevice : 디바이스 핸들 값이다. 이 값은 COMI_LoadDevice()함수에 의해 얻어진

값이어야 한다.

- ch : Counter 채널번호. 채널 번호는 0 부터 시작한다.

ULONG COMI_ReadCounter32 (HANDLE hDevice, int ch)

이 함수는 지정한 카운터 채널의 카운트 값을 읽어온다.

- hDevice : 디바이스 핸들 값이다. 이 값은 COMI_LoadDevice()함수에 의해 얻어진

값이어야 한다.

- ch : Counter 채널번호. 채널 번호는 0 부터 시작한다.

- Return : 카운트 값(32 비트 정수값)

-137-

Page 144: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 4 장. 카운터를 이용한 펄스 계수

-138-

Page 145: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 4.1 카운터를 이용한 엔코더 펄스 계수 실험

실험 4.1 카운터를 이용한 엔코더 펄스 계수 실험

실험 예비 사항

-. 엔코더의 원리 및 종류에 대하여 조사하라

-. 엔코더의 사용 용도 대하여 조사하라

실험 목적 엔코더의 원리 및 용도에 대하여 이해하고 카운터를 이용하여 엔코더를 계측하여

모터의 위치제어나 속도 제어를 능동적으로 수행할 수 있는 방법을 익힌다.

실험 장비 -. 컴퓨터 및 주변기기

-. Visual C++

-. COMI-SD104 보드 및 주변기기

-. 엔코더

1 기초 이론 로터리 엔코더는 회전축의 회전 각도를 전기적인 신호(펄스)로 변환하여 출력하는

장치를 말하며, 일반적으로 모터에 의해 구동되는 구동부의 위치나 속도를 검출하기

위해 사용되는 센서이다.

1.1 엔코더의 종류

엔코더의 종류에는 그 구분 방식에 따라 여러가지가 있을 수 있으나 신호를 얻는

방법에 따라 3 가지로 분류할 수 있다.

광학식 엔코더

현재 가장 많이 사용되고 있는 엔코더인데, 그 구조를 보면 회전축에 직결한 회전

-139-

Page 146: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 4 장. 카운터를 이용한 펄스 계수

디스크의 위와 아래에 배치한 광원과 포토셀 및 슈미트 트리거(Schimidt trigger) 회로

로 구성되어 있다. 포토셀은 광 신호를 받아 전압신호로 변환하는 광-전기 변환 소

자이며, 회전 디스크를 통과한 광신호를 받아 전압신호를 출력하는데 이 신호를 슈

미트 트리거 회로를 통하여 파형 정형을 하면 샤프트 엔코더의 출력 신호를 얻을 수

있다.

[그림 4.10] 광학식 엔코더의 구조

브러시 엔코더

브러시 엔코더는 입력측에 직결한 회전 디스크와 디스크상을 슬라이드하는 브러시

로 구성되어 있다. 이 디스크는 [그림 4.11]와 같이 도통 부분과 비도통 부분으로 되

어 있는데, 이 위를 브러시가 슬라이딩함으로써 그 부호 구성에 따른 신호를 입력측

의 회전에 따라 브러시에서 꺼낼 수 있도록 되어 있다. 디스크의 재질은 일반적으로

절연기판으로 만들어지고, 그 표면에는 특수한 금속판이 부착되어 있다. 또한 그 금

속판에는 입력측의 위치를 부호화하기 위한 특수한 무늬가 에칭되어 있다. 브러시식

엔코더는 디스크 패턴의 세분화에 한도가 있어서, 고분해능이나 고정밀도를 얻을 수

없을 뿐만 아니라 브러시에 접촉부가 있는 관계로 응답특성이나, 신뢰성, 수명 면에

서도 많은 문제가 있다.

-140-

Page 147: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 4.1 카운터를 이용한 엔코더 펄스 계수 실험

1

2

3 4

5

6

7

B1 B2 B3

브러시

비도통 부분

도통 부분

[그림 4.11] 브러시식 샤프트 엔코더의 구조

자기식 엔코더

브러시식 엔코더는 디스크가 도통/비도통 부분을 만들기 위하여 절연물과 금속을

사용하는 반면 자기식 엔코더의 구성은 브러시에 대응해서 트로이달 코어라고 부르

는 링(해독 헤드)이 배치되고 거기에는 여자 및 출력 권선이 설치되어 있다. 입력측

에 직결된 디스크가 회전할 때 해독 헤드가 디스크의 자계로 포화되어 헤드로부터의

출력을 얻을 수 없을 때 논리 “0”가 된다. 또한, 디스크가 회전하여 헤드가 자극 사

이의 중앙에 오면 디스크로부터의 자계를 받지 않게 되어 트로이달 코어의 포화가

해소된다. 그러면 헤드로부터의 출력 신호를 얻을 수 있게 되는데, 이 때가 논리 “1”

이 된다. 이 방식은 내환경 특성이나 수명 등은 우수하나, 고분해능의 디스크 제작이

곤란한 것이 문제점이다.

1.2 인크리멘탈 엔코더

인크리멘탈 엔코더(Incremental encoder)는 입력축의 회전량을 펄스의 수로 변환하

여 출력하는데 그 대표적인 펄스 출력 파형이 [그림 4.12]에 도시되어 있다. 로터리

-141-

Page 148: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 4 장. 카운터를 이용한 펄스 계수

엔코더는 보통 전진신호(A 상 신호), 지연신호(B 상 신호) 그리고 원점 신호(Z 상 신

호)로 불리우는 3 개의 출력 신호를 가지게 되며, A 상과 B 상 신호간에는 90˚의 위

상차가 나도록 구성된다. 이 위상차는 입력축의 회전 방향에 따라서 전진 패턴이 되

거나 지연 패턴이 되어 출력되므로써 회전 방향을 구분할 수 있도록 하는 것이다.

1 회전이 1000 펄스의 분해능을 가진 샤프트 엔코더는 T=0.36˚(360˚/1000)로서,

입력축을 1 회전시키면 전진 신호 A 및 지연 신호 B 에는 1000 개의 펄스가 회전 방

향의 위상차를 갖고 출력되게 된다.

[그림 4.12] 인크리멘탈 엔코더의 출력파형

1.3 앱솔루트 엔코더

회전축(Shaft)의 0˚지점을 기준으로 360˚를 일정한 비율로 분할하고, 그 분할된

각도마다 인식 가능한 전기적인 디지털 코드(BCD, Binary, Gray 코드 등)를 지정하여,

회전축(Shaft)의 회전위치(각도)에 따라 지정된 디지털 코드가 출력되도록 한 절대 회

전 각도 검출용 장치(센서)이다. 따라서 회전축의 회전각도에 대한 출력값은 어떠한

전기적인 요소에 의해서도 변화되지 않으므로 정전에 대한 원점보상이 필요가 없을

뿐만 아니라 전기적인 노이즈에도 강한 것이 특징이다.

-142-

Page 149: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 4.1 카운터를 이용한 엔코더 펄스 계수 실험

[그림 4.13] 앱솔루트 엔코더의 구조

2. 실험 방법

2.1 하드웨어 인터페이스

앞서 설명한 바와 같이 엔코더는 A 상과 B 상 신호의 위상차에 의해 회전 방향을

알 수 있다. 이는 곧 엔코더의 출력을 카운트하기 위해서는 업(Up)/다운(Down) 카운

트가 가능하여야 함을 의미한다. 그러나 일반적인 카운터는 한쪽방향으로만의 카운

트를 지원한다. 즉, 무조건 증가하던지 무조건 감소하게 된다. 따라서 엔코더를 계측

하기 위해서는 A, B 상의 위상차에 따라 업/다운 카운트를 할 수 있도록 설계된 엔코

더 전용 카운터를 사용하게 된다.

그러나 COMI-SD104 의 카운터가 지원하는 GATE 단자의 특성과 두 개의 카운터

채널을 함께 사용하여 엔코더 카운터와 같이 업/다운 카운터 기능을 구현할 수 있다.

COMI-SD104 의 카운터는 CLK 입력 단자와 함께 GATE 입력 단자를 제공한다.

GATE 입력 단자는 카운터를 활성(Enable) 또는 비활성(Disable)화 하는 역할을 한다.

즉, GATE 입력 단자에 HIGH LEVEL 신호가 입력되면 카운터는 활성화되어 CLK 단

에 입력되는 펄스를 카운트한다. 그러나 GATE 에 LOW LEVEL 신호가 입력되면 카

운터가 비활성화되어 CLK 단에 펄스가 입력되어도 카운트를 하지 않는다.

이러한 특성을 이용하여 [그림 4.14]와 같이 엔코더의 A 상 신호를 CH0 의 클럭단

(CNT0)과 CH1 의 GATE 단(GATE1)에 입력하고, B 상 신호를 CH1 의 클럭단(CNT1)과

CH0 의 GATE 단(GATE0)에 연결하면, 시계방향 회전시에는 카운터 CH1 만 카운트를

-143-

Page 150: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 4 장. 카운터를 이용한 펄스 계수

하게 되고, 반시계 방향 회전시에는 카운터 CH0 만 카운트를 하게 된다. 따라서

CH1 의 카운트값에서 CH0 의 카운트값을 빼면 절대 위치를 계측할 수 있다.

GATE0

GATE1

흑색

백색

A상 A상B상 B상

+5V

GN

D

청색

갈색

엔코더

TR

G

GN

D

CN

T0

GN

D

CN

T1

NC

NC

GN

D

GN

D

NC

[그림 4.14] 엔코더 카운트를 위한 신호선 연결도

2.2 프로그램 제작

2.2.1 프로그램 개요

본 예제는 COMI-SD104 보드의 카운터 두 채널을 이용하여 엔코더 출력을 계수하

는 프로그램이다. 프로그램을 실행하면 [그림 4.15]과 같은 화면이 나타난다.

-144-

Page 151: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 4.1 카운터를 이용한 엔코더 펄스 계수 실험

[그림 4.15] 예제 4.1 프로그램 실행화면

화면에서 각 항목 및 버튼의 역할은 다음과 같다.

-. COUNTER 0 : COUNTER0 는 카운터 CH0 의 카운트값을 나타내며 이는 곧 엔코

더가 시계방향으로 회전할 때 발생하는 펄스 수를 의미한다.

-. COUNTER 1 : COUNTER0 는 카운터 CH1 의 카운트값을 나타내며 이는 곧 엔코

더가 반시계방향으로 회전할 때 발생하는 펄스 수를 의미한다.

-. CNT1-CNT0 : COUNTER1 의 값에서 COUNTER0 의 값을 뺀 값이며 이 값은 엔

코더의 절대 위치값을 나타낸다.

-. Reset : 모든 카운트값을 0 으로 초기화한다.

2.2.2 화면 구성

리소스 편집기에서 다음과 같이 화면을 구성한다.

-145-

Page 152: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 4 장. 카운터를 이용한 펄스 계수

[그림 4.16] 예제 4.1 의 화면 구성

컨트롤 ID 컨트롤 종류 CAPTION 비 고

IDC_Count0 Edit box COUNTER0 의 값을 디스플레이한다.

IDC_Count1 Edit box COUNTER1 의 값을 디스플레이한다.

IDC_Diff Edit box CNT1-CNT0 의 값을 디스플레이한

다.

IDC_Reset Button “RESET” 모든 카운트값을 0 으로 초기화한다.

[표 4.3] 예제 4.1 의 컨트롤 구성

2.2.3 COMI-SD104 라이브러리 포함하기

COMI-SD104 DAQ 보드의 라이브러리를 포함하는 방법은 앞서의 실험들과 동일하

므로 설명은 생략하며 1 장이나 2 장의 실험 방법을 참조하기 바란다.

2.2.4 OnInitDialog 이벤트 핸들러

Exp4_1Dlg.cpp 의 OnInitDialog 이벤트핸들러에서 프로그램 초기화 및 COMI-SD104

보드 초기화 루틴을 작성한다. BOOL Cexp4_1Dlg::OnInitDialog() CDialog::OnInitDialog();

-146-

Page 153: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 4.1 카운터를 이용한 엔코더 펄스 계수 실험

// Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here if(!COMI_LoadDll()) MessageBox ("COMIDAS 라이브러리를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE; ghDevice = COMI_LoadDevice(COMI_SD104, 0); if(ghDevice==INVALID_HANDLE_VALUE) MessageBox ("COMI-SD104 장치를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE; COMI_ClearCounter32(ghDevice, 0); // COUNTER0 Clear COMI_ClearCounter32(ghDevice, 1); // COUNTER1 Clear SetTimer(0, 10, NULL); return TRUE; // return TRUE unless you set the focus to a control

2.2.5 OnClose 이벤트 핸들러

OnClose 이벤트핸들러는 다음과 같이 작성한다.

void Cexp4_1Dlg::OnClose() // TODO: Add your message handler code here and/or call default COMI_UnloadDevice(ghDevice); COMI_UnloadDll(); CDialog::OnClose();

2.2.6 타이머 이벤트를 이용한 엔코더 펄스 계수

타이머 이벤트핸들러를 생성하여 주기(10ms 단위)적으로 COMI-SD104 의 카운터

채널을 읽어들여 화면에 그 값을 표시한다. 타이머 이벤트함수를 생성하거나 시작시

키는 작업에 대한 설명은 1 장과 2 장을 참조하기 바란다. void CExp4_1Dlg::OnTimer(UINT nIDEvent) // COUNTER CH0 의 값을 읽어들인다. // m_nCount0 = COMI_ReadCounter32(ghDevice, 0); // COUNTER CH1 의 값을 읽어들인다. //

-147-

Page 154: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 4 장. 카운터를 이용한 펄스 계수

m_nCount1 = COMI_ReadCounter32(ghDevice, 1); // 두 카운트값의 차를 계산하여 엔코더의 절대 위치를 계산한다. // m_nDiff = m_nCount1 - m_nCount0; UpdateData(FALSE); // 카운트값을 화면에 표시한다. CDialog::OnTimer(nIDEvent);

2.2.6 Reset 버튼 이벤트 핸들러

Reset 버튼의 이벤트 핸들러를 생성하여 다음과 같이 작성한다. void CExp4_1Dlg::OnReset() COMI_ClearCounter32(ghDevice, 0); // COUNTER0 Clear COMI_ClearCounter32(ghDevice, 1); // COUNTER1 Clear m_nCount0 = 0; m_nCount1 = 0; m_nDiff = 0;

-148-

Page 155: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 4.1 카운터를 이용한 엔코더 펄스 계수 실험

3 실험결과 및 과제 보고서

실험제목 : 카운터를 이용한 엔코더 펄스 계수 실험

실험일자 : ______년 ___월 ___일

실 험 자 : 제 ___조 _________________________

학 번 : ____________________

1) 엔코더가 A/B 상 위상차를 가지는 특성을 이용하여 엔코더의 기본 정밀도보

다 2 배 또는 4 배의 정밀도를 가지도록 할 수 있다. 이를 일반적으로 2 채배, 4

채배라 부르는데 이의 원리를 조사하고 설명하라

2) 엔코더의 회전속도를 계측하는 프로그램을 작성하라.

-149-

Page 156: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 4 장. 카운터를 이용한 펄스 계수

-150-

Page 157: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 5 장

아날로그 출력을 이용한 시스템 제어

제 5 장에서는 아날로그 출력 회로의 동작 원리를 이해하고 아날로그 출력을 이용하

여 물리 시스템을 제어하는 방법에 대하여 알아본다.

실험 5.1 DC 모터 속도 제어 ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ 155

-151-

Page 158: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 5 장. 아날로그 출력을 이용한 시스템 제어

제 5 장 아날로그 출력을 이용한 시스템 제어

컴퓨터는 0 또는 1 이란 디지털 신호를 처리한다. 그러나 우리 주위에 일어나는 현상

들은 대부분 연속적으로 변하는 아날로그 신호이다. 따라서, 자연계에서의 현상을 컴

퓨터로 처리하려면 아날로그 신호를 디지털 신호로 변환시킬 필요가 있는데, 이러한

변환 회로를 A/D(Analog to Digital) 변환 회로 또는 아날로그 입력 회로라 한다. 또한,

컴퓨터로 처리한 결과를 출력하기 위해서는 디지털 신호를 아날로그 신호로 변환해

야 하는데, 이러한 변환 회로를 D/A(Digital to Analog) 변환 회로 또는 아날로그 출력

회로라 한다. 예를 들어 전동기, 압력, 유속, 액체 높이 등을 컴퓨터를 이용하여 자동

제어하기 위해서는 컴퓨터가 지시하는 디지털 데이터를 아날로그 신호로 변환하여야

하며 이러한 경우에 아날로그 출력 기능이 사용된다.

D/A 변환회로에는 병렬 디지털양을 아날로그양으로 변환하는 병렬형과, 직렬로 입

력되는 디지털양을 아날로그양으로 변환하는 직렬형이 있다.

I0

2I0

4I0

8I0

ON

OFF

S0

S1

S2

S3

IR

Vout

[그림 5.1] D/A 변환 회로의 원리

-152-

Page 159: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

[그림 5.1]은 병렬형 D/A 변환 회로의 원리도이다. 그림과 같이 2n 의 값을 의미하

는 전류원을 스위치 S0~S3 을 통하여 저항 R 에 접속하고, 스위치 S0~S3 을 디지털양

의 각 비트의 값 1 또는 0 에 따라 ON/OFF 한다.

예를 들어, 디지털양이 11012 일 때에 스위치 S0 ~ S3 은 그림에 나타낸 바와 같이

되며, 이 때에 저항 R 에 흐르는 전류 I 는

00000 13)148(148 IIIIII =++=++=

를 가리키므로, 아날로그 출력은

013RIRIVout ==

로 되어 디지털양 11012(=13) 에 비례한 아날로그양을 얻을 수 있다. 실제로, D/A 변

환회로에서는 2n 의 값을 의미하는 전류를 얻는데 저항 회로망을 쓴다. 이 저항 회로

망에서는 저항 분압 회로(Resistance divider)를 사용하거나, 또는 사다리 D/A 변환 회

로 등을 이용하는 방법이 있다. 또, 스위치로는 트랜지스터나 IC 또는 FET 를 사용

하며, D/A 변환 회로의 기본적인 구성 요소는 연산 증폭기(Operational amplifier)이다.

저항 분압 회로에서는 비트가 작은 D/A 변환 회로는 제작하기가 쉬우나 신뢰성이

떨어지고, 특수 비트 수가 많을 때에는 여러 가지 저항값이 사용되어야 하는 등의

단점이 있다. 저항 분압 회로는 분압 회로의 각 저항값이 다르기 때문에 회로구성에

서 정확성과 안정성이 결여되며, 대략 8 비트의 입력까지 사용할 수 있고, 그 이상의

경우에는 사다리 D/A 변환 회로가 흔히 사용된다.

D/A 변환 회로의 중요한 특성 인자에는 정밀도(Accuracy)와 분해능(Resolution)이

있다. D/A 변환 호로의 정밀도는 실제의 출력 전압이 이론적인 출력 전압에 얼마나

가까운지를 나타내는 척도로, 이 것은 기준 전압의 정밀도와 저항 회로에 사용된 저

항의 정밀도에 의하여 결정된다.

예를 들면, 어떤 디지털 입력에 대한 이론적 출력 전압이 10[V]라 할 때, 10%의 정

밀도를 가진 D/A 변환 회로의 실제 출력 전압을 9 ~ 11[V] 사이에 나타날 수 있음을

의미한다.

한편 분해능이란, D/A 변환 회로가 식별하여 만들 수 있는 가장 작은 전압의 변화

를 의미한다. 분해능은 디지털 입력 신홀의 비트수에 따라 결정되며, 출력 전압의 가

장 작은 변화는 LSB 에 의하여 좌우된다.

예를 들면, 2 진 사다리형 저항 회로를 사용한 4 비트 D/A 변환기에서 LSB 는 1/16

의 무게를 가지고 있다. 따라서, 4 비트 D/A 변환기의 1112 상태가 16[V]라 하면 LSB

에 따라 생기는 출력 저압의 변화는 1[V]가 된다.

-153-

Page 160: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 5 장. 아날로그 출력을 이용한 시스템 제어

최근에는 1 개의 칩으로 된 D/A 변환기가 생산되어 널리 이용되고 있다.

-154-

Page 161: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 5.1 DC 모터 속도 제어

실험 5.1 DC 모터 속도 제어

실험 예비 사항

-. Faraday’s 법칙에 대하여 조사하라

-. 플레밍의 왼손 법칙 및 오른손 법칙에 대하여 조사하라

-. DC 모터의 종류에 대하여 조사하라

실험 목적 우리 주위에서 흔히 사용되는 DC 모터의 원리 및 용도에 대하여 이해하고 그 제

어 방법을 익힌다.

실험 장비 -. 컴퓨터 및 주변기기

-. Visual C++

-. COMI-SD104 보드 및 주변기기

-. COMI-EDKIT1 교육용 키트

-. DC 모터

1 기초 이론 DC MOTOR 란, 고정자로 영구자석을 사용하고, 회전자(전기자)로 코일을 사용하여

구성한 것으로, 전기자에 흐르는 전류의 방향을 전환함으로써 자력의 반발, 흡인력으

로 회전력을 생성시키는 MOTOR 로서 모형 자동차, 무선조정용 장난감 등을 비롯하

여 여러 방면에서 가장 널리 사용되고 있는 MOTOR 이다.

1.1 MOTOR 의 기본원리

1) Faraday'S 법칙

1830 년경 Michael Faraday 와 Joseph Henly 가 거의 동시에 변화하는 자기장과 감긴 도

-155-

Page 162: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 5 장. 아날로그 출력을 이용한 시스템 제어

선내에 유도되는 유도기전력(EMF)사이에 어떠한 상관관계가 있는지를 밝혀내었다.

결과는 자속밀도가 B 인 자기장속을 도선이 V 인 속도로 움직일 때 이 도선에 유도

되는 유도기전력(E)는 Vector 함수로서 아래와 같은 관계식을 갖는다.

E = B x V

또한, 이 도선의 저항을 r 이라고 하면, 이 도선에 유기되는 전류(I)는 I = E/r = B x V/r

가 된다. 이러한 관계를 전기 Mortor 에 응용한 것이 플레밍의 왼손법칙과 오른손법

칙이다. 즉, 길이 L 도선에 전류 I 를 흘렸을 때, 자기장으로부터 받는 이 도선의 자

기력 F 는 F = BLIsinθ( θ: 도선이 자기장의 방향과 이루는 각도 )가 된다.

[그림 5.2] FARADAY’S 법칙

여기서, F 는 항상 B 와 I 의 직각방향으로 발생한다.

이와 같이 Faraday's 법칙과 플레밍의 법칙은 때로는 같은 원리로 간주되기도 하며,

경우에 따라서는 혼용하여 사용하기도 한다.

2) 플레밍의 왼손법칙과 오른손법칙

① 플레밍의 왼손법칙 :

일정한 크기의 자계속에 하나의 도선을 놓아두고, 이 도선에 전류를 흘리면 도선에

힘이 작용하게 된다. 이때, 전류와 힘, 그리고 자계의 방향사이의 관계를 나타낸 것

이 왼손법칙이다. 이 왼손법칙은

F = B x V = B x Ir

의 벡터의 곱으로 표시된다.

-156-

Page 163: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 5.1 DC 모터 속도 제어

② 플레밍의 오른손법칙 :

일정한 자계속에 놓여있는 도선을 외부의 힘으로 움직여주었을 때 움직이는 도선에

유도전류가 흐르게 된다. 이때 움직이는 속도와 자계의 방향, 그리고 전류의 방향사

이의 관계를 나타낸 것이 오른손 법칙으로서, 이를 발전기의 원리라고도 하며

E = F x B 또는 -E = B x F

의 벡터의 곱으로 표시된다.

Faraday 의 법칙과 플레밍의 법칙은 DC Motor 의 기본응용원리이다.

[그림 5.3] DC 모터의 원리와 같이 어떠한 자기장속에 권선된 도선의 양끝에 외부전

류가 연결되어 있다고 하면 [그림 5.2] 에서 보는 바와같이 도선 AB 부분은 아래방

향으로 향하는 자기력을 받게되고 도선 CD 는 윗 방향으로 향하는 자기력을 받게된

다. ( 단, 도선 AB 와 CD 에 작용하는 자기력은 힘의 크기는 같으나 방향만 다를뿐이

다 ) 이 힘은 외부전류가 도선의 양끝에 연결되어 있을때는 자기력의 영향을 받으나,

점차 회전함에 따라 외부전류와 연결되지 못하므로 자기력은 사라지고 남는 것은 관

성운동에너지( Rotational Kinetic Energy ) 만으로 회전운동을 계속하게 된다. 이 도선이

다시 정 반대방향인 180˚의 위치에 오게되면 외부전류와 다시 연결되어 전류가

BACD 로 흐르게되어, 도선 BA 는 윗 방향으로 CD 는 아랫 방향으로 다시 자기력의

영향을 받아 다시 회전력을 얻게되어 도선은 회전을 계속하게 된다.

-157-

Page 164: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 5 장. 아날로그 출력을 이용한 시스템 제어

[그림 5.3] DC 모터의 기본 원리

1.2 DC MOTOR 의 구조

[그림 5.4] DC 모터의 구조

DC 모터의 구조는 크게 로터(전기자), 계자용 마그넷, 브러시, 베어링 모터케이스 등

-158-

Page 165: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 5.1 DC 모터 속도 제어

으로 이루어져 있다.

브러시 : 전기자에 전류를 공급하기 위한 섭동 접점이다.

커뮤테이터(정류자) : 복수의 전기자 권선에 전류를 공급하는 전류 전환 장치.

전기자 : 전기자는 회전력을 발생하기 위한 전자석이고 동시에 모터의 회전체(로터)

를 구성하는 것이다.

베어링 : 베어링은 로터의 회전구조를 형성하는 것인데 볼 베어링이나 오일리스 메

탈이 사용되고 있다.

계자 마그넷 : 전기자 권선에 자력을 주는 것이며 전기자에서 발생하는 전자기력과

함께 회전력을 발생시킨다.

1.3 DC MOTOR 의 특성

T-I 특성(토크 대 전류)

흘린 전류에 대해 직선적으로 토크가 비례한다. 즉, 큰 힘이 필요한 때는 전류를

많이 흘리면 된다.

T-N 특성(토크 대 회전수)

토크에 대하여 회전수는 직선적으로 반비례하므로 무거운 것을 돌릴 때는 천천히

회전시키게 되고, 빨리 회전시키기 위해서는 전류를 많이 흘리게 된다. 그리고, 인

가전압에 대해서도 비례하며, 그림과 같이 평행하게 이동시킨 그래프로 된다.

-159-

Page 166: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 5 장. 아날로그 출력을 이용한 시스템 제어

[그림 5.5] DC 모터의 특성 곡선

2 실험 방법

2.1 하드웨어 인터페이스

앞서 기술한 바와 같이 DC 모터는 입력되는 전류의 양에 의해 회전수 또는 토크

가 제어된다. COMI-SD104 보드의 아날로그 출력은 전압 출력 방식이므로 전압의 변

화를 전류의 변화로 변환하는 회로가 필요하다. 따라서 일반적으로는 스텝모터와 마

찬가지로 DC 모터 또한 DC 모터 드라이버를 매개로 하여 모터를 제어하게 된다.

COMI-EDKIT1 에서는 이러한 DC 모터 드라이버 회로를 [그림 5.6]과 같이 구성하

였다. 따라서 COMI-EDKIT1 을 이용하면 따로 DC 모터 드라이버를 사용하지 않아도

된다. 이 회로에서는 저항(R3)을 이용하여 전압 변화를 전류 변화로 변환하도록 하

였다. 그리고 DC 모터에 충분한 전류를 공급하기 위하여 아날로그 출력으로부터 유

도된 전류는 DC 모터에 직접 공급되지 않고 트랜지스터(TIP31C)와 함께 외부 전원

(DC 12V)에서 공급되는 전류의 양을 조절하는 역할을 하도록 하였다. 즉, COMI-

SD104 의 아날로그 출력은 트랜지스터(TIP31C)의 베이스(Base) 입력으로 사용되어 외

부 전원으로부터 DC 모터로 공급되는 전류의 양을 조절하는 역할을 한다. 또한 아날

-160-

Page 167: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 5.1 DC 모터 속도 제어

로그 출력 회로를 보호하기 위하여 아날로그 버퍼(LM741)가 사용되었다. 이 버퍼는

전류가 역행하지 않도록 하는 역할을 한다.

[그림 5.6] COMI-EDKIT1 에 구성된 DC 모터 드라이버 회로도

COMI-SD104 보드의 아날로그 출력 기능과 COMI-EDKIT1 에 구성된 DC 모터 구

동회로를 이용하여 DC 모터를 구동하기 위해서는 [그림 5.7]과 같이 신호선을 연결

하면 된다.

-161-

Page 168: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 5 장. 아날로그 출력을 이용한 시스템 제어

DC 모터

COMI-SDT1 터미널 보드

AO

0AG

ND

COMI-EDKIT1의 DC모터 부분

[그림 5.7] DC 모터 구동 실험을 위한 COMI-EDKIT1 과 COMI-SDT1 의 연결도

2.2 프로그램 제작

2.2.1 프로그램 개요

본 예제는 COMI-SD104 보드의 아날로그 출력 기능을 이용하여 DC 모터를 구동하

는 예제 프로그램이다. 프로그램을 실행하면 [그림 5.8]과 같은 화면이 나타난다.

-162-

Page 169: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 5.1 DC 모터 속도 제어

[그림 5.8] 예제 5.1 프로그램 실행화면

화면에서 각 설정 항목 및 버튼의 역할은 다음과 같다.

-. 출력전압 : 아날로그 출력 전압을 설정한다. 아날로그 출력전압은 모터의 속도

를 결정한다.

-. UP/DOWN STEP : “UP” 또는 “DOWN” 버튼이 클릭되었을 때 출력전압을 증가

또는 감소시킬 양을 설정한다.

-. DOWN : 아날로그 출력 전압을 감소시킨다. 감소되는 양은 UP/DOWN STEP 에서

설정하는 값에 의해 결정된다.

-. UP : 아날로그 출력 전압을 증가시킨다. 증가되는 양은 UP/DOWN STEP 에서 설

정하는 값에 의해 결정된다.

-. START : “출력전압” 항목에서 설정한 값으로 아날로그 출력값을 내보낸다.

-. STOP : 아날로그 출력값을 0V 로 만든다.

2.2.2 화면 구성

리소스 편집기에서 다음과 같이 화면을 구성한다.

-163-

Page 170: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 5 장. 아날로그 출력을 이용한 시스템 제어

[그림 5.9] 예제 5.1 의 화면 구성

컨트롤 ID 컨트롤 종류 CAPTION 비 고

IDC_Volt Radio button “출력전압” 에디트 박스, 출력을 내

보낼 전압을 설정한다.

IDC_Step Radio button “UP/DOWN STEP” 에디트 박스, 출력 전압 설정의 증/감 단위를 결정한다.

IDC_DOWN Radio button “<<(DOWN)” 출력 전압을 감소시킨다.

IDC_UP Edit Box “>>(UP)” 출력 전압을 증가시킨다.

IDC_START Edit Box “START” 설정된 전압대로 아날로그 출력을 내보낸다.

IDC_STOP Button “STOP” 아날로그 출력을 0[V]로 만들어서 모터를 정지시킨다.

[표 5.1] 예제 3.4 의 컨트롤 구성

2.2.3 COMI-SD104 라이브러리 포함하기

COMI-SD104 DAQ 보드의 라이브러리를 포함하는 방법은 앞서의 실험들과 동일하

므로 설명은 생략하며 1 장이나 2 장의 실험 방법을 참조하기 바란다.

-164-

Page 171: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 5.1 DC 모터 속도 제어

2.2.4 OnInitDialog 이벤트 핸들러

Exp5_1Dlg.cpp 의 OnInitDialog 이벤트핸들러에서 프로그램 초기화 및 COMI-SD104

보드 초기화 루틴을 작성한다. BOOL Cexp5_1Dlg::OnInitDialog() CDialog::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here if(!COMI_LoadDll()) MessageBox ("COMIDAS 라이브러리를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE; ghDevice = COMI_LoadDevice(COMI_SD104, 0); if(ghDevice==INVALID_HANDLE_VALUE) MessageBox ("COMI-SD104 장치를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE; COMI_DA_Out(ghDevice, 0, 0); // 초기에 출력을 0[V]로 만든다. return TRUE; // return TRUE unless you set the focus to a control

2.2.5 OnClose 이벤트 핸들러

OnClose 이벤트핸들러는 다음과 같이 작성한다.

void Cexp5_1Dlg::OnClose() // TODO: Add your message handler code here and/or call default COMI_UnloadDevice(ghDevice); COMI_UnloadDll(); CDialog::OnClose();

2.2.6 컨트롤과 관련된 멤버변수 할당

화면에서 사용자가 설정하는 선택사항들을 변수로 저장하기 위해서 각 컨트롤과

-165-

Page 172: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 5 장. 아날로그 출력을 이용한 시스템 제어

맵핑되는 멤버 변수들을 할당하여야 한다. 각 컨트롤과 관련된 멤버 변수들은 다음

의 표와 같이 할당한다.

CONTROL ID Variable name CATEGORY

Variable type 비고

IDC_Volt m_fOutVolt VALUE FLOAT ‘출력전압’ 설정값

IDC_Step m_fUpDownStep VALUE float ‘UP/DOWN STEP’ 설정값

[표 5.2] 컨트롤과 관련된 멤버 변수

2.2.7 “Start” 버튼 컨트롤 이벤트 핸들러

“Start” 버튼이 클릭 되면 COMI-SD104 아날로그 출력 CH0 에 화면에 설정된 출력

전압값을 출력한다. 그러기 위해서 “Start” 버튼의 이벤트 핸들러를 생성하여 다음과

같이 작성한다. void CExp5_1Dlg::OnStart() UpdateData(); // 화면에서 출력 전압 설정값을 얻어온다. // 모터 기동시에 충분한 전류를 흘리기 위하여 10V 출력을 잠시 내보낸다. // COMI_DA_Out(ghDevice, 0, 10); Sleep(100); // 사용자가 지정한 아날로그 출력값을 내보낸다. // COMI_DA_Out(ghDevice, 0, m_fOutVolt);

. 주의 : 정지 상태에서 DC 모터를 구동하기 위해서는 많은 전류의 유입이 필요하

다. 따라서 처음 기동시에 아날로그 출력을 10V 로 출력하여 모터를 기동시켜준 후

에 원하는 속도에 맞는 출력을 내주어야 한다.

2.2.8 “Stop” 버튼 컨트롤 이벤트 핸들러

“Stop” 버튼이 클릭 되면 모터를 정지하기 위하여 COMI-SD104 아날로그 출력

CH0 에 0[V]를 출력한다. 그러기 위해서 “Start” 버튼의 이벤트 핸들러를 생성하여

다음과 같이 작성한다. void CExp5_1Dlg::OnStop()

-166-

Page 173: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 5.1 DC 모터 속도 제어

COMI_DA_Out(ghDevice, 0, 0);

2.2.9 “>>(UP)”, “<<(DOWN)” 버튼 컨트롤 이벤트 핸들러

UP/DOWN 버튼이 클릭되면 현재 출력되고 있는 전압값에 UP/DOWN STEP 값만큼

증가 또는 감소하여 출력을 내보낸다. void CExp5_1Dlg::OnSpeedDown() UpdateData(); m_fOutVolt -= m_fUpDownStep; COMI_DA_Out(ghDevice, 0, m_fOutVolt); UpdateData(FALSE); void CExp5_1Dlg::OnSpeedUp() UpdateData(); m_fOutVolt += m_fUpDownStep; COMI_DA_Out(ghDevice, 0, m_fOutVolt); UpdateData(FALSE);

-167-

Page 174: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 5 장. 아날로그 출력을 이용한 시스템 제어

3 실험결과 및 과제 보고서

실험제목 : 아날로그 출력을 이용한 DC 모터 구동 실험

실험일자 : ______년 ___월 ___일

실 험 자 : 제 ___조 _________________________

학 번 : ____________________

1) DC 모터의 속도가 삼각파형을 이루도록 제어하는 프로그램을 작성하라.

2) DC 모터의 속도가 사인파형을 이루도록 제어하는 프로그램을 작성하고 엔코

더를 이용하여 그 속도를 계측한 후 텍스트 파일로 저장하는 프로그램을 작성하

-168-

Page 175: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 6 장

아날로그 입력을 이용한 물리량 계측

아날로그 입력 보드는 일반적으로 A/D(Analog to Digital) 변환기라고도 불리우며 아날

로그 신호를 계측하여 컴퓨터가 인식할 수 있는 디지털 데이터로 변환해주는 장치이

다. 본 장에서는 아날로그 입력 회로의 동작 원리를 이해하고 온도센서 등과 같이

아날로그 출력을 내는 센서들을 계측하는 방법을 알아본다.

실험 6.1 백금측온센서를 이용한 온도 계측 ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ 175

실험 6.2 퍼텐쇼미터를 이용한 각도 측정 ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ ∙ 187

-169-

Page 176: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 6 장 아날로그 입력을 이용한 물리량 계측

제 6 장 아날로그 입력을 이용한 물리량 계측

아날로그 입력 보드는 일반적으로 A/D(Analog to Digital) 변환기라고도 불리우며 아

날로그 신호를 계측하여 컴퓨터가 인식할 수 있는 디지털 데이터로 변환해주는 장치

이다. 온도 센서, 로드셀 등과 같은 아날로그 출력형 센서의 물리량을 계측할 수 있

도록해주는 장치이다.

A/D 변환은 D/A 변환의 역과정으로서, 일반적으로 D/A 변환보다 복잡하다. A/D 변

환 방식에는 동시형(Simultaneous type)과 계수형(Counter type) A/D 변환 회로가 있다.

6.1 동시형 A/D 변환 회로

동시형 A/D 변환 회로는 여러 개의 비교 회로(Comparator circuit)를 사용하는 방식으

로, [그림 6.1]은 3 개의 비교 회로를 가지고 있는 동시형 A/D 변환 회로이다.

+3[V]

+2[V]

+1[V]

아날로그입력전압

부호화회로

읽기게이트

Q

QSET

CLR

S

R

Q

QSET

CLR

S

R

21

20

디지털출력

비교회로

C3

비교회로

C2

비교회로

C1

[그림 6.1] 3 개의 비교기를 가지는 동시형 A/D 변환 회로의 예

각 비교 회로에는 2 개의 입력 단자가 있는데, 한쪽 입력 단자에는 모두 아날로그

입력 신호 단자를 접속하고 다른 입력 단자에는 각 비교 회로에서 사용할 기준 전압

을 걸어 준다. [그림 6.1]의 비교 회로는 아날로그 입력이 기준 전압보다 낮으면 차단

상태로 되어 출력이 거의 0[V]인 낮은 전압으로 되고, 기준 전압보다 높으면 통전

상태(ON)로 되어 출력 전압이 +V[V]의 높은 전압으로 된다.

-170-

Page 177: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

[그림 6.1]에서 아날로그 입력 신호에 대한 출력 신호값에 대하여 알아보자.

모든 비교 회로가 차단 상태, 즉 C1=0, C2=0, C3=0 일 때에는 아날로그 입력이 매우

작아 비교 회로가 동작하지 않고, 전압은 0 ~ 1[V] 사이에 있다. 비교 회로의 출력 중

에서 C1 만 출력되고 나머지 C2, C3 의 출력이 없으면 C2, C3 의 기준 전압보다는 작은

전압이다. 즉, 1 ~ 2[V] 사이의 아날로그 입력 신호값을 가진다.

만일, C1과 C2는 높고 C3이 낮은 상태이면 입력 전압은 2 ~ 3 [v] 범위에 있게 된다.

C1 , C2, C3이 모두 높으면 입력 전압은 3 ~ 4[V] 사이에 있다. 이 것을 정리하면 [표

6.1]과 같다.

비교 회로 출력 입력 전압

C1 C2 C3

0 ~ 1 [V]

1 ~ 2 [V]

2 ~ 3 [V]

3 ~ 4 [V]

0

1

1

1

0

0

1

1

0

0

0

1

[표 6.1] 입력 전압과 비교 회로 출력간의 관계

이러한 A/D 변환 회로를 만들려면 [그림 6.1]의 비교 회로 출력단 C1, C2, C3 의 출

력을 받아 2 비트로 된 디지털 신호로 변환시키는 부호화 회로가 추가되어야 한다.

동시형 A/D 변환기는 설계하기 쉬우나, 2 진수의 자릿수 n 이 커지면 비교 회로의

수가 2n-1 에 따라 급격히 증가되고, 부속 회로도 매우 복잡해지는 단점이 있다. 그러

나 변환속도는 비교적 빠른 편이다. 동시형 A/D 변환 회로의 정밀도는 기준 전압의

정확도에 따르고, 분해능은 비교 회로의 수에 따라 달라진다.

6.2 계수형 A/D 변환 회로

비교 회로에 입력되는 기준 전압을 변환시키면 1 개의 비교 회로만 사용하여 A/D

-171-

Page 178: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 6 장 아날로그 입력을 이용한 물리량 계측

변환 회로를 구성할 수 있다. 이 때, 기준 전압은 2 진 계수 회로와 D/A 변환 회로에

사용된 사다리 회로를 사용하여 발생시킬 수 있다.

[그림 6.2]은 1 개의 비교 회로를 사용한 계수형 A/D 변환 회로이다.

디지털출력

Vi

VR

아날로그 입력 전압

비교기

클럭 펄스(CP)

2진 계수 회로

D/A 변환 회로

MSB

LSB

[그림 6.2] 계수형 A/D 변환 회로

먼저, 계수 회로를 0 으로 리셋(Reset)시키고, 그의 입력이 0 으로 되어 있으면

D/A 변환 회로의 출력 VR도 0 이 된다. 이 때, 비교기의 출력은 최대이고, 클럭 펄스

(CP)가 계수 회로에 전달된다. 시간에 따라 계수된 클럭 펄스의 수가 직선적으로 증

가하므로, D/A 변환 회로의 출력은 계단형이 된다. 계단형 전압이 아날로그 입력 전

압을 능가하면 비교기의 출력은 L 이 된다. 즉, 되먹임 전압(VR)과 아날로그 입력 전

압이 같을 때에 계수 회로를 정지시킨다. 이 때에 계수 회로는 아날로그 입력 전압

을 나타내는 디지털 신호를 표시할 수 있다.

디지털출력

Vi

VR

아날로그 입력 전압

비교기

클럭 펄스(CP)

Up/Down계수 회로

D/A 변환 회로

MSB

LSB

CLEAR

UP

DOWN

[그림 6.3] 개선된 계수형 A/D 변환 회로

-172-

Page 179: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

입력신호

Vin

D/A 변환회로의 출력전압 V0

[V]

t

[그림 6.4] 계수형 A/D 변환 회로의 동작 상태

[그림 6.2]의 계수형 A/D 변환 회로는 변환을 시작할 때마다 0 으로 리셋시켜 주어

야 하는 불편이 있으므로, [그림 6.3]과 같이 개선하였다. [그림 6.3]은 아날로그 입력

전압이 되먹임 전압을 능가할 때에 비교기의 출력은 H 가 되며, 클럭 펄스는 업/다운

계수 회로의 업(Up)입력에 전달되고, 그 때 다운(Down) 입력은 H 를 유지한다. 이 때,

계수 회로는 D/A 변환 회로의 출력이 증가하도록 가산하고, 되먹임 전압이 아날로그

입력 전압을 능가할 때에 비교기의 출력 업(Up) 입력은 H 를 유지한다.

이와 같이 연속적인 계수에 의하여 입력 신호를 따르므로 리셋할 필요가 없다. [그

림 6.4]를 보면, 입력의 작은 변화에도 연속적으로 계수를 하면서 매우 빠르게 동작

한다. 왜냐하면, 각 변화마다 0 으로 리셋할 필요가 없기 때문이다. 그러나 계수 회로

는 한 순간에 1 비트씩 연속적으로 증가되어야 하기 때문에 큰 입력 신호의 변화에

대해서는 변환 과정이 느리다.

계수회로는 입력 전압에 따라 나타난 계수값을 다음 변환을 위한 시작 펄스가 들

어올 때까지 보존하며 이 값을 변환하고 바깥으로 보내어 아날로그 입력 전압에 대

한 디지털 신호로 출력시킨다.

A/D 변환 회로는 디지털 전압계나 온도, 압력 등의 여러 가지 아날로그 신호를 측

-173-

Page 180: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 6 장 아날로그 입력을 이용한 물리량 계측

정하여 디지털 신호로 변환하여 컴퓨터에 직접 입력 시킨 다음, 데이터 처리를 하는

데 사용한다.

-174-

Page 181: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 6.1 백금 측온 센서를 이용한 온도 계측

실험 6.1 백금측온센서를 이용한 온도 계측

실험 예비 사항

-. 온도센서의 종류에 대하여 조사하라

-. 브리지회로에 대하여 조사하라.

-. 연산 증폭 회로에 대하여 조사하라

실험 목적 온도를 계측하는 센서의 종류 및 원리에 대하여 이해하고 온도 센서를 이용하여

온도를 계측하는 방법을 습득한다.

실험 장비 -. 컴퓨터 및 주변기기

-. Visual C++

-. COMI-SD104 보드 및 주변기기

-. COMI-EDKIT1 교육용 키트

-. 백금측온센서

1. 기초 이론 백금 측온 저항(RTD) 센서는 온도에 의해 금속의 전기 저항이 변화하는 것을 이

용하고 그 저항치를 측정함으로써 온도를 알아내는 센서이다. 일반적으로 금속은 저

항치가 온도 상승과 함께 높아지는 이른바 양의 온도 계수를 가지고 있다. 실용적인

측온 저항체로는 백금, 니켈, 구리 등이 있다. 각각의 사용 온도 범위 및 특징을 [표

6.2]에 정리하였다.

여기서는 공업용으로 사용되고 있는 백금 측온 저항체에 대해 개략적으로 설명한

다. 백금 측온 저항체는 표준화되어 있으며 0에 있어서의 저항치는 100Ω(공칭 저

항치)이고, 저항치는 온도에 대해서 거의 직선적으로 변화하고 있다. 백금 측온 저항

체의 온도 의존성은 식 (6.1)과 같다.

-175-

Page 182: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 6 장 아날로그 입력을 이용한 물리량 계측

)1()1( 02

0 tRttRR αβα +≅++= (6.1)

여기서, R0는 0에서의 저항치, R 은 t에서의 저항치를 나타내며, α, β는 상수,

이 센서의 100에서의 저항치 R100 과 R0 의 비 R100/R0 는 1.3916 이며 그때의 평균 온

도 계수 α는 0.39%/이다.

백금 측온 저항체에서는 사용 온도에 따라 저온용(L), 중온용(M), 고온용(H)의 3 종

류가 있으며, 각각의 사용 온도범위, 허용차 등을 [표 6.3]에 정리하였다. [표 6.3]의

백금 측온 저항체는 중저온 영역의 표준 온도계의 센서에 사용되는 것이다. 규정 전

류는 저항치 측정을 위해 저항체에 연속해서 흘리는 전류를 말하며 이 저항체에 생

기는 줄열(Joule’s heat)에 의한 자기 가열이 영향을 끼치지 않도록 측정 전류를

2mA(또는 5mA)로 규정하고 있다.

종 류 사용온도범위 평균온도계수*

/1000α

특 징

백금측온 저항체 -200 ~ 640 3.9ⅹ10-3

사용 온도 범위가 넓다.

정밀도, 재현성이 좋다.

표준용으로서 사용할 수 있다.

자계의 영향이 크다.

비싸다.

동측온 저항체 0 ~ 180 4.3ⅹ10-3

사용 온도 범위가 좁다.

값이 싸다.

산화하기 쉽고, 고온에서 불안

정하다.

니켈측온 저항체 -50 ~ 300 6.7ⅹ10-3

온도계수가 크다.

균일한 소선을 얻기가 힘들다.

호환성이 없다.

* 평균 온도 계수는 0와 100의 저항치에 의해 산출한 것.

[표 6.2] 측온 저항체의 종류와 특성

-176-

Page 183: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 6.1 백금 측온 센서를 이용한 온도 계측

백금 측온 저항체를 구조로 분류하면 보호관 첨가형과 시드형이 있고 기계적인 충

격이나 진동에 약한 결점을 보환하는 구조로 되어 있다. 이것에 대해 최근에는 소형

이고 튼튼한 박막 백금 온도 센서가 실용화되어 있다.

기호 공칭 저항치 사용온도범

위 계급

전기저항

의 허용차(Ω)

온도의 허용차

() 규정전류

(mA)

저온용(L) 0.15 ± 0.06 ± (0.15+0.0015T)

중온용(M) 0.2 ± 0.06 ± (0.015+0.02T) 2

Pt100 100Ω(0)

고온용(H) 0.5 ± 0.12 ± (0.3+0.005T) 2 또는 5

(주) 온도의 허용차의 T 는 측정 온도의 절대치이다.

[표 6.3] 백금 측온 저항체의 주요 규격(JIS C 1604)

백금 측온 저항체에서는 그 리드선의 형식에 따라 2 도선식, 3 도선식 및 4 도선식

이 있고 [그림 6.5]는 각 경우의 저항 측정 방법을 보인 것이다. 2 도선식에서는 도선

저항 r 이 측온 저항체에 직렬로 들어가 오차를 발생한다. 예로써 Pt100(0에서 100

Ω)에 대해 1 Ω의 도선 저항은 브리지의 두 변으로 분배되어 상쇄되므로 도선 저항

에 의한 오차는 거의 무시할 수 있다. 4 도선식은 가장 이상적인 방식으로 매우 정확

도가 높은 온도 측정에 사용된다.

검출회로에는 정전압 브리지회로와 연산증폭기(OP AMP)의 귀환에 측온 저항체를

삽입한 정전류 브리지 회로가 있다. 전자는 측온 저항치에 의해 측정 전류가 변화하

기 때문에 출력이 온도에 대해 비선형이 되기 쉽고 후자는 외부 유도 노이즈를 받기

쉬우므로 주의가 필요하다.

-177-

Page 184: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 6 장 아날로그 입력을 이용한 물리량 계측

V0

Rt

r

r

-

+

V0R3

R2

R1

r

Rt

r

R1

R2

(ㄱ) 브리지 회로 (ㄴ) 연산증폭기

(a) 2 도선식

V0

r

r

r

Rt

R1

R2

-

+

V0R3

R2

R1

r rr

(ㄱ) 브리지 회로 (ㄴ) 연산증폭기

(b) 3 도선식

V0

VS

Rt

rr

r

r

RS

비교

Rt : 측온저항체의 저항치

r : 도선의 저항치

(c) 4 도선식

[그림 6.5] 측온 저항체의 저항 측정 방법

-178-

Page 185: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 6.1 백금 측온 센서를 이용한 온도 계측

2. 실험 방법

2.1 하드웨어 인터페이스

앞의 기초 이론에서 기술한 바와 같이 백금측온 센서의 출력을 검출하기 위해서는

브리지회로와 연산증폭 회로가 필요하다. COMI-EDKIT1 에서는 [그림 6.6]과 같이 그

회로를 구성하였다.

회로에서 VR2 가변저항은 증폭비를 조절하는 역할을 하는 것으로써 실제로는

“GAIN”으로 표기된 포텐셔미터에 연결되어 있다. 이 퍼텐셔미터를 반시계방향으로

회전하면 증폭비가 증가된다. 그리고 VR3 가변저항은 전압 오프셋(OFFSET)을 조절

하는 역할을 하는 것으로써 “OFFSET”으로 표기된 포텐셔미터에 연결되어 있다. 사

용자는 이 포텐셔미터를 회전하여 출력 전압의 OFFSET 을 조절할 수 있다.

[그림 6.6] COMI-EDKIT1 에 구성된 PT100 센서 인터페이스 회로도

COMI-SD104 보드와 COMI-EDKIT1 을 이용하여 백금 측온 센서를 계측하기 위해

서는 [그림 6.7]과 같이 신호선을 연결하면 된다.

-179-

Page 186: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 6 장 아날로그 입력을 이용한 물리량 계측

COMI-SDT1 터미널 보드

A0

AG

ND

COMI-EDKIT1의 온도센서 부분

백금측온센서

[그림 6.7] 온도계측 실험을 위한 COMI-EDKIT1 과 COMI-SDT1 의 연결도

2.2 프로그램 제작

2.2.1 프로그램 개요

본 예제는 COMI-SD104 보드의 아날로그 입력 기능을 이용하여 온도센서를 계측

하는 예제 프로그램이다. 본 예제는 사용자가 지정한 A/D 채널을 통하여 A/D 변환

을 수행하고 그 결과를 화면에 나타낸다. A/D 변환은 타이머 이벤트 루틴에서 주기

적으로 수행된다. 사용자는 A/D 를 수행할 채널과 A/D 입력범위를 화면에서 선택할

수 있다.

-180-

Page 187: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 6.1 백금 측온 센서를 이용한 온도 계측

[그림 6.8] 아날로그 입력을 통한 센서계측 예제 화면

-. 채널설정 : 아날로그 입력 채널을 설정한다

-. A/D 범위 설정 : 아날로그 입력 범위를 설정한다

-. A/D 결과값 : A/D 결과값이 디스플레이 된다.

2.2.2 화면 구성

리소스 편집기에서 다음과 같이 화면을 구성한다.

[그림 6.9] 예제 6.1 의 화면 구성

-181-

Page 188: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 6 장 아날로그 입력을 이용한 물리량 계측

컨트롤 ID 컨트롤 종류 CAPTION 비 고

IDC_Channel Edit Box “채널설정” 아날로그 입력 채널을 선택

IDC_AdRange Combo Box “A/D 범위설정” 아날로그 입력 범위 선택

IDC_AdValue Edit Box “A/D 결과값(VOLT)”

계측된 A/D 값을 화면에 Voltage값으로 표시한다.

[표 6.4] 예제 6.1 의 컨트롤 구성

2.2.3 COMI-SD104 라이브러리 포함하기

COMI-SD104 DAQ 보드의 라이브러리를 포함하는 방법은 앞서의 실험들과 동일하

므로 설명은 생략하며 1 장이나 2 장의 실험 방법을 참조하기 바란다.

2.2.4 OnInitDialog 이벤트 핸들러

Exp6_1Dlg.cpp 의 OnInitDialog 이벤트핸들러에서 프로그램 초기화 및 COMI-SD104

보드 초기화 루틴을 작성한다. BOOL Cexp6_1Dlg::OnInitDialog() CDialog::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here

// SPIN Control 의 값 범위를 지정한다. // ((CSpinButtonCtrl *)GetDlgItem(IDC_SPIN1))->SetRange(0, 15); if(!COMI_LoadDll()) MessageBox ("COMIDAS 라이브러리를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE; ghDevice = COMI_LoadDevice(COMI_SD104, 0); if(ghDevice==INVALID_HANDLE_VALUE) MessageBox ("COMI-SD104 장치를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE;

-182-

Page 189: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 6.1 백금 측온 센서를 이용한 온도 계측

// 전채널의 A/D 범위를 기본 범위인 –10V~+10V 범위로 설정한다. // for(int i=0; i<16; i++) COMI_AD_SetRange(ghDevice, 0, -10, 10); SetTimer(0, 100, NULL); // 10ms 의 주기로 타이머 이벤트를 동작시킨다. return TRUE; // return TRUE unless you set the focus to a control

2.2.5 OnClose 이벤트 핸들러

OnClose 이벤트핸들러는 다음과 같이 작성한다.

void Cexp6_1Dlg::OnClose() // TODO: Add your message handler code here and/or call default COMI_UnloadDevice(ghDevice); COMI_UnloadDll(); CDialog::OnClose();

2.2.6 컨트롤과 관련된 멤버변수 할당

화면에서 사용자가 설정하는 선택사항들을 변수로 저장하기 위해서 각 컨트롤과

맵핑되는 멤버 변수들을 할당하여야 한다. 각 컨트롤과 관련된 멤버 변수들은 다음

의 표와 같이 할당한다.

CONTROL ID Variable name CATEGORY

Variable type 비고

IDC_AdRange m_nAdRangeIdx VALUE INT 아날로그 입력범위를 설정

값. 이 값은 콤보박스의 인덱스값이다.

IDC_AdValue m_fAdValue VALUE FLOAT A/D 변환 결과값을 화면에

표시할 때 사용된다.

IDC_Channel m_nChannel VALUE INT A/D 채널 설정값.

[표 6.5] 컨트롤과 관련된 멤버 변수

2.2.7 “A/D 범위 설정” 콤보박스의 이벤트 핸들러

사용자가 “A/D 범위 설정”을 변경하면 변경된 A/D 범위를 COMI-SD104 보드에

적용해야 한다. 그렇게 하기 위해서는 먼저 사용자가 설정값을 변경하였는지를 알아

-183-

Page 190: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 6 장 아날로그 입력을 이용한 물리량 계측

내야 한다. 이 것을 위한 가장 쉬운 방법은 Combo Box 의 CBN_SELCHANGE 이벤

트 핸들러를 사용하는 것이다. [그림 6.10]과 같이 클래스위저드에서 IDC_AdRange 콤

보박스의 CBN_SELCHANGE 이벤트 핸들러를 등록한다.

[그림 6.10] CBN_SELCHANGE 이벤트 핸들러 등록 화면

그리고 생성된 이벤트 핸들러를 다음과 같이 수정한다. void CExp6_1Dlg::OnSelchangeAdRange() float vmin_list[8]=0,0,0,0,-1,-2,-5,-10; float vmax_list[8]=1,2,5,10,1,2,5,10; UpdateData(); COMI_AD_SetRange(ghDevice, m_nChannel, vmin_list[m_nAdRangeIdx], vmax_list[m_nAdRangeIdx]);

2.2.8 타이머 이벤트를 이용한 A/D 변환 수행

타이머 이벤트핸들러를 생성하여 주기(100ms 단위)적으로 COMI-SD104 의 A/D 채

널을 읽어들여 화면에 그 값을 표시한다. 타이머 이벤트함수를 생성하거나 시작시키

는 작업에 대한 설명은 1 장과 2 장을 참조하기 바란다. void CExp6_1Dlg::OnTimer(UINT nIDEvent) // A/D 채널설정값을 얻어온다. // UpdateData(); // COMI-SD104 에서 A/D 값을 읽어온다. //

-184-

Page 191: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 6.1 백금 측온 센서를 이용한 온도 계측

m_fAdValue = COMI_AD_GetVolt(ghDevice, m_nChannel); // A/D 결과값을 화면에 표시한다. // UpdateData(FALSE); CDialog::OnTimer(nIDEvent);

-185-

Page 192: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 6 장 아날로그 입력을 이용한 물리량 계측

3. 실험결과 및 과제 보고서

실험제목 : 백금측온 센서를 이용한 온도계측 실험

실험일자 : ______년 ___월 ___일

실 험 자 : 제 ___조 _________________________

학 번 : ____________________

1) 백금측온센서 이외의 온도센서에 대하여 아는대로 조사하라.

2) 에어컨과 히터로 방안의 온도제어를 하는 시스템을 설계하고 그 제어 프로그

램을 작성하라. 단, 에어컨과 히터의 세기는 아날로그 출력에 의하여 제어된다고

가정한다.

-186-

Page 193: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 6.2 포텐셔미터를 이용한 각도 측정

실험 6.2 포텐셔미터를 이용한 각도 측정

실험 예비 사항

-. 변위센서의 종류에 대하여 조사하라

-. 포텐셔미터에 대하여 조사하라

실험 목적 변위센서의 일종으로 사용되는 포텐셔미터의 원리를 이해하고 이를 계측하는 방

법을 습득한다.

실험 장비 -. 컴퓨터 및 주변기기

-. Visual C++

-. COMI-SD104 보드 및 주변기기

-. COMI-EDKIT1 교육용 키트

1. 기초 이론 포텐셔미터(Potentio-meter)는 아날로그식 각변위 센서의 대표적인 것으로서 각변위

를 직접 전기저항의 변화로 바꾸고 부가 회로에 의해 이것을 다시 전압 또는 전류로

변화시키는 것이다. 정밀도는 디지털 방식에 비해 떨어지지만 간단한 회로만으로 동

작할 수 있고 염가이므로 널리 사용되고 있다.

동작원리는 [그림 6.11]에 보이는 것처럼 회전축에 부착되어 있는 와이퍼가 저항

소자위의 임의의 점과 접촉하여 와이퍼와 양단자간의 저항값을 변화시키는 매우 간

단한 원리이다. 포텐셔미터를 저항 소자에 따라 분류하면 권선형, 도전성 플라스틱형,

하이브리드형, 자기저항형 등이 있다.

기본적인 사용법으로서는 [그림 6.12]에 보이는 것처럼 각변위를 전압변환하는 방

법과 전류변환하는 방법이 있는데 전압변환하는 방법이 일반적이다.

전압변환의 경우 부하저항은 단자의 하나와 와이퍼간에 접속되어 있다. 따라서 주

-187-

Page 194: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 6 장 아날로그 입력을 이용한 물리량 계측

저항과 병렬 접속되어 있는 포텐셔미터의 저항(R0)은 R0RL/(R0+RL)가 되어 직선도

(Linearity) 또는 함수 정밀도에 영향을 주게 되며 이 것을 로딩 에러(Loading error)라

고 부른다. 로딩 에러 δ는 다음 식으로 나타낼 수 있다.

[%]100)(

)(200

00 ×−+

−=

RRRRRRR

LP

(6.2)

1 2 3

[그림 6.11] 포텐셔미터의 동작 원리

출력

1

2

3

출력

1

2

3

입력

입력

(a) 전압 변환 (b) 전류 변환

[그림 6.12] 포텐셔미터의 사용법

-188-

Page 195: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 6.2 포텐셔미터를 이용한 각도 측정

여기서 RP 는 포텐셔미터의 단자간 저항이다. 이 영향은 원리적으로 피할 수 없으

나 포텐셔미터 저항값의 100 배 가량의 부하저항을 접속하면 사실상 무시할 수 있다.

권선형 이외의 것의 전기적 출력의 평활도를 나타내는 것에 출력 평활성(Smoothness)

이 있다. 이것은 저항 소자의 불균일 등에 의하여 출력이 변화하는 정도를 나타낸다.

또 저항 소자와 와이퍼에 의한 섭동 노이즈는 구조상 피할 수 없으며, 이것은 등가

노이즈 저항으로 그 크기를 나타낸다.

포텐셔미터의 정격 전력이란 저 저항부에 연속 부하할 수 있는 전력의 최대값이며

이것은 주위 온도에 영향을 받는다.

2. 실험 방법

2.1 하드웨어 인터페이스

COMI-SD104 보드의 아날로그 입력 기능을 이용하여 COMI-EDKIT1 에 장착된 포

텐셔미터를 계측하기 위해서는 [그림 6.13]과 같이 신호선을 연결하면 된다.

COMI-SDT1 터미널 보드

A0

AG

ND

COMI-EDKIT1의 포텐셔미터 부분

[그림 6.13] 온도계측 실험을 위한 COMI-EDKIT1 과 COMI-SDT1 의 연결도

-189-

Page 196: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 6 장 아날로그 입력을 이용한 물리량 계측

2.2 프로그램 제작

2.2.1 프로그램 개요

본 예제는 COMI-SD104 보드의 아날로그 입력 기능을 이용하여 온도센서를 계측

하는 예제 프로그램이다. 본 예제는 사용자가 지정한 A/D 채널을 통하여 A/D 변환

을 수행하고 그 결과를 화면에 나타낸다. A/D 변환은 타이머 이벤트 루틴에서 주기

적으로 수행된다. 사용자는 A/D 를 수행할 채널과 A/D 입력범위를 화면에서 선택할

수 있다.

[그림 6.14] 아날로그 입력을 통한 센서계측 예제 화면

-. 채널설정 : 아날로그 입력 채널을 설정한다

-. A/D 범위 설정 : 아날로그 입력 범위를 설정한다

-. A/D 결과값 : A/D 결과값이 디스플레이 된다.

2.2.2 화면 구성

리소스 편집기에서 다음과 같이 화면을 구성한다.

-190-

Page 197: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 6.2 포텐셔미터를 이용한 각도 측정

[그림 6.15] 예제 6.1 의 화면 구성

컨트롤 ID 컨트롤 종류 CAPTION 비 고

IDC_Channel Edit Box “채널설정” 아날로그 입력 채널을 선택

IDC_AdRange Combo Box “A/D 범위설정” 아날로그 입력 범위 선택

IDC_AdValue Edit Box “A/D 결과값(VOLT)”

계측된 A/D 값을 화면에 Voltage값으로 표시한다.

[표 6.6] 예제 6.1 의 컨트롤 구성

2.2.3 COMI-SD104 라이브러리 포함하기

COMI-SD104 DAQ 보드의 라이브러리를 포함하는 방법은 앞서의 실험들과 동일하

므로 설명은 생략하며 1 장이나 2 장의 실험 방법을 참조하기 바란다.

2.2.4 OnInitDialog 이벤트 핸들러

Exp6_1Dlg.cpp 의 OnInitDialog 이벤트핸들러에서 프로그램 초기화 및 COMI-SD104

보드 초기화 루틴을 작성한다. BOOL Cexp6_1Dlg::OnInitDialog() CDialog::OnInitDialog();

-191-

Page 198: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 6 장 아날로그 입력을 이용한 물리량 계측

// Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // TODO: Add extra initialization here

// SPIN Control 의 값 범위를 지정한다. // ((CSpinButtonCtrl *)GetDlgItem(IDC_SPIN1))->SetRange(0, 15); if(!COMI_LoadDll()) MessageBox ("COMIDAS 라이브러리를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE; ghDevice = COMI_LoadDevice(COMI_SD104, 0); if(ghDevice==INVALID_HANDLE_VALUE) MessageBox ("COMI-SD104 장치를 로드할 수 없습니다.", "Error", MB_ICONERROR | MB_OK); return TRUE; // 전채널의 A/D 범위를 기본 범위인 -10~+10 범위로 설정한다. // for(int i=0; i<16; i++) COMI_AD_SetRange(ghDevice, 0, -10, 10); SetTimer(0, 100, NULL); // 10ms 의 주기로 타이머 이벤트를 동작시킨다. return TRUE; // return TRUE unless you set the focus to a control

2.2.5 OnClose 이벤트 핸들러

OnClose 이벤트핸들러는 다음과 같이 작성한다.

void Cexp6_1Dlg::OnClose() // TODO: Add your message handler code here and/or call default COMI_UnloadDevice(ghDevice); COMI_UnloadDll(); CDialog::OnClose();

2.2.6 컨트롤과 관련된 멤버변수 할당

화면에서 사용자가 설정하는 선택사항들을 변수로 저장하기 위해서 각 컨트롤과

맵핑되는 멤버 변수들을 할당하여야 한다. 각 컨트롤과 관련된 멤버 변수들은 다음

의 표와 같이 할당한다.

-192-

Page 199: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 6.2 포텐셔미터를 이용한 각도 측정

CONTROL ID Variable name CATEGORY

Variable type 비고

IDC_AdRange m_nAdRangeIdx VALUE INT 아날로그 입력범위를 설

정값. 이 값은 콤보박스

의 인덱스값이다.

IDC_AdValue m_fAdValue VALUE FLOAT A/D 변환 결과값을 화면

에 표시할 때 사용된다.

IDC_Channel m_nChannel VALUE int A/D 채널 설정값.

[표 6.7] 컨트롤과 관련된 멤버 변수

2.2.7 “A/D 범위 설정” 콤보박스의 이벤트 핸들러

사용자가 “A/D 범위 설정”을 변경하면 변경된 A/D 범위를 COMI-SD104 보드에

적용해야 한다. 그렇게 하기 위해서는 먼저 사용자가 설정값을 변경하였는지를 알아

내야 한다. 이 것을 위한 가장 쉬운 방법은 Combo Box 의 CBN_SELCHANGE 이벤

트 핸들러를 사용하는 것이다. [그림 6.17]과 같이 클래스위저드에서 IDC_AdRange 콤

보박스의 CBN_SELCHANGE 이벤트 핸들러를 등록한다.

[그림 6.17] CBN_SELCHANGE 이벤트 핸들러 등록 화면

-193-

Page 200: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 6 장 아날로그 입력을 이용한 물리량 계측

그리고 생성된 이벤트 핸들러를 다음과 같이 수정한다. void CExp6_1Dlg::OnSelchangeAdRange() float vmin_list[8]=0,0,0,0,-1,-2,-5,-10; float vmax_list[8]=1,2,5,10,1,2,5,10; UpdateData(); COMI_AD_SetRange(ghDevice, m_nChannel, vmin_list[m_nAdRangeIdx], vmax_list[m_nAdRangeIdx]);

2.2.8 타이머 이벤트를 이용한 A/D 변환 수행

타이머 이벤트핸들러를 생성하여 주기(100ms 단위)적으로 COMI-SD104 의 A/D 채

널을 읽어들여 화면에 그 값을 표시한다. 타이머 이벤트함수를 생성하거나 시작시키

는 작업에 대한 설명은 1 장과 2 장을 참조하기 바란다. void CExp6_1Dlg::OnTimer(UINT nIDEvent) // A/D 채널설정값을 얻어온다. // UpdateData(); // COMI-SD104 에서 A/D 값을 읽어온다. // m_fAdValue = COMI_AD_GetVolt(ghDevice, m_nChannel); // A/D 결과값을 화면에 표시한다. // UpdateData(FALSE); CDialog::OnTimer(nIDEvent);

-194-

Page 201: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

실험 6.2 포텐셔미터를 이용한 각도 측정

3. 실험결과 및 과제 보고서

실험제목 : 포텐셔미터를 이용한 각도 측정 실험

실험일자 : ______년 ___월 ___일

실 험 자 : 제 ___조 _________________________

학 번 : ____________________

1) 포텐셔미터의 원리가 사용되고 있거나 사용될 수 있는 것에 대하여 있는대로

조사하라.

2) 포텐셔미터에 의하여 DC 모터의 속도 조절을 하는 프로그램을 작성하라.

3) 포텐셔미터에 의하여 스텝모터의 회전각도를 조절하는 프로그램을 작성하라.

-195-

Page 202: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

제 6 장 아날로그 입력을 이용한 물리량 계측

-196-

Page 203: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

Appendix A

도스용 예제

본 부록에서는 COMI-SD104 DAQ 보드를 이용하여 DOS 운영체제에서 프로그램하는

예제들을 수록하였습니다.

-197-

Page 204: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

Appendix A. 도스용 예제

Appendix A 도스용 예제

A.1 디지털 입력을 이용한 근접센서 또는 광전센서 상태

계측

이 프로그램은 COMI_DI_GetOne(..) 함수를 사용하여 D/I CH0 의 상태를 계속하여 체크하고 그 상태를 화면에 표시한다. #include <stdio.h> #include <conio.h> #include "Comidas.c" #define DI_CH 0 void main (void) HANDLE hDevice; int di_state; hDevice = COMI_LoadDevice (COMI_SD104, 0); if(hDevice == INVALID_HANDLE_VALUE) printf("Can't load specified device!"); exit(0); clrscr(); while(!kbhit()) /* Get D/I and print on screen */ di_state = COMI_DI_GetOne(hDevice, DI_CH); gotoxy (10, 10); printf("Status of D/I CH%d = %d\n", DI_CH, di_state); COMI_UnloadDevice(hDevice);

A.2 1 채널 디지털 출력 제어하기

이 프로그램은 COMI_DO_PutOne(..) 함수를 사용하여 D/O CH0 에 ON/OFF 상태

를 번갈아가면서 출력한다. #include <stdio.h>

-198-

Page 205: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

#include <conio.h> #include "Comidas.c" #define DO_CH 0 void main (void) HANDLE hDevice; int do_state=0; hDevice = COMI_LoadDevice (COMI_SD104, 0); if(hDevice == INVALID_HANDLE_VALUE) printf("Can't load specified device!"); exit(0); clrscr(); while(!kbhit())

do_state = 1; /* toggle the state of D/O channel */ COMI_DO_PutOne (hDevice, DO_CH, do_state); /* Put D/O */

gotoxy (10, 10); Printf(“D/O State = %d”, do_state); delay(500);

COMI_UnloadDevice(hDevice);

A.3 다채널 디지털 출력 제어하기

이 예제는 COMI_DO_PutAll(..) 함수를 사용하여 8 개의 디지털 출력 채널 모두에 ON/OFF 상태를 번갈아가면서 동시에 출력한다. #include <stdio.h> #include <conio.h> #include "Comidas.c" #define DO_CH 0 void main (void) HANDLE hDevice; DWORD do_states=0; hDevice = COMI_LoadDevice (COMI_SD104, 0); if(hDevice == INVALID_HANDLE_VALUE) printf("Can't load specified device!"); exit(0);

-199-

Page 206: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

Appendix A. 도스용 예제

clrscr(); while(!kbhit())

do_states = ~do_states; /* toggle the states of D/O channels */ COMI_DO_PutAll (hDevice, do_states); /* Put D/O for all channels */

gotoxy (10, 10); Printf(“D/O States = %x”, do_states); delay(500);

COMI_UnloadDevice(hDevice);

A.4 아날로그 출력

이 예제는 D/A CH0 에 0V 와 5V 를 번갈아가면서 출력하는 예제이다. #include <stdio.h> #include <conio.h> #include "Comidas.c" #define DA_CH 0 void main (void) HANDLE hDevice; DWORD do_states=0, di_states; int i, di_each[8]; hDevice = COMI_LoadDevice (COMI_SD104, 0); if(hDevice == INVALID_HANDLE_VALUE) printf("Can't load specified device!"); exit(0); clrscr(); while(!kbhit()) printf("D/A Out 5 volt !\n"); COMI_DA_Out (hDevice, DA_CH, 5.f); /* Output 5 volt through D/A channel 0 */ delay(1000); /* 1 sec delay */ printf("D/A Out 0 volt !\n"); COMI_DA_Out (hDevice, DA_CH, 0.f); /* Output 0 volt through D/A channel 0 */ delay(1000); /* 1 sec delay */

-200-

Page 207: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

COMI_UnloadDevice(hDevice);

A.5 아날로그 입력

이 예제는 A/D CH0 에 입력되는 아날날그 신호의 전압을 읽어 들여 화면에 그 값을 표시하는 예제이다. #include <windows.h> #include <stdio.h> #include <conio.h> #include "Comidas.h" #define CHAN 0 #define VMIN -10 #define VMAX 10 void main (void) HANDLE hDevice; float ad_volt; if(!COMI_LoadDll()) printf("Comidas.dll load failure"); exit(0); hDevice = COMI_LoadDevice (COMI_CP101, 0); if(hDevice == INVALID_HANDLE_VALUE) printf("Can't load specified device!"); COMI_UnloadDll(); exit(0); COMI_AD_SetRange (hDevice, CHAN, VMIN, VMAX); while (!_kbhit()) ad_volt = COMI_AD_GetVolt (hDevice, CHAN); printf("%6.2f\n", ad_volt); // 결과를 화면에 보여준다. Sleep(500); // 0.5 초 delay COMI_UnloadDevice(hDevice); COMI_UnloadDll();

-201-

Page 208: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

Appendix A. 도스용 예제

-202-

Page 209: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

Appendix B

센서 매뉴얼

본 부록에서는 COMI-EDKIT1 에 포함되어 있는 각 센서의 사용자 매뉴얼을 수록하

였습니다. 본 부록을 참조하면 각 센서의 자세한 사양을 알아볼 수 있습니다.

-203-

Page 210: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

Appendix B. 센서 매뉴얼

Appendix B 센서 매뉴얼

A.1 근접스위치

특징

- 서어지 보호기능

- 전원 역접속 보호 기능

- 긴 수명과 고 신뢰성

- 적색 표시등 내장으로 동작 유.무 판별이 가능.

- 마이크로 스위치, 리미트 스위치 대응 등의 폭 넓은 용도로 사용

- 전원전압 10~30 VDC 범위에서 200mA 의 부하를 직접 구동 시킬 수 있습니

다. (저항성 부하일 때)

- 방수구종 IP67 (IEC 규격)

종류

- 직류 2 선식 (표준형)

- 직류 2 선식 (상면 검출형)

-204-

Page 211: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

근접 스위치

- 직류 3 선식 (표준형)

-205-

Page 212: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

Appendix B. 센서 매뉴얼

정격 / 성능 ( PS17-5DNU)

검출거리 5mm ± 10% 절연저항 50MΩ 이상

응차거리 검출거리의 10% 이하 내전압 1000 VAC 에서 1 분간

표준검출체 18*18*1mm 내진동 10~55Hz 각방향 2 시간

설정거리 0~3.5mm 내충격 200m/S 각방향 3 회

전원전압 12~24VDC 표시등 동작표시 (적색 LED)

사용전압범위 10~30VDC 사용주위온도 -25~70°C

소비전류 10mA 이하 보존온도 -30~80°C

응답주파수 500Hz 사용주위습도 35~95%RH

전류전압 1.5 이하 보호회로 서어지, 전원 역접속

온도의 영향 -25~70’ 왜곡률 10% 이하 보호구조 IP67

제어출력 200mA 중량 약 71g

외형치수도

-206-

Page 213: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

근접 스위치

출력회로

바르게 사용하여 주십시오.

브리더 저항을 부하에 병렬로 접속하여 근접스위치에 흐르는 전류가 부하의

복귀 전류 이하가 되도록 하여 주십시오.

* 발열에 의하여 문제가 될 경우 브리더 저항의 W 를 더 큰값으로 사용하

여 주십시오.

상호간섭 및 주위금속의 영향

근접스위치 주위에 금속이 있으면 그 영향을 받아 복귀 불량등의 오동작을

-207-

Page 214: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

Appendix B. 센서 매뉴얼

일으키는 요인이 되므로 주위금속에 의한 오동작 방지를 위하여 아래표에

표기된 치수 이상으로 취부하여 주십시오.

-208-

Page 215: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

광전 센서

A.2 광전 센서

모델구성

접속도

-209-

Page 216: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

Appendix B. 센서 매뉴얼

정격성능

종류 투과형

표준형 측면검출형 모델명

BY500-TDT BYS500-TDT 검출거리 500mm

검출물체 Ø 5mm 이상의 불투명체

응답시간 1ms 이하

전원전압 12~24VDC ± 10% (리플 P-P : 10%이하)

소비전류 30mA 이하

사용광원 적외선 발광 다이오드 (변조식)

동작모드 Dark ON

제어출력 NPN 오픈 콜렉터 출력 – 부하전압 : 30VDC 이하, 부하전류 : 100mA 이하, 잔류전압 : 1V 이하

보호회로 전원 역접속 보호회로, 출력단락 과전류 보호회로

표시등 동작 표시등 : 적색 LED

접속방식 배선인출

전연저항 20MΩ 이상(500VDC 메가 기준)

내노이즈 노이즈 시뮬레이터에 의한 방형파 노이즈 ± 240V

내전압 1000VAC 50/60 Hz 에서 1 분간

내진동 10~55Hz(주기 1 분간) 2 시간

내충격 500m/s2 (50G) 3 회

사용주위조도 태양광 : 11000 lx 이하, 백열등 : 3000 lx 이하

사용주위온도 -10 ~ 60, 보존시 : -25 ~ 70

사용주위습도 35 ~ 85 RH, 보존시 : 35 ~ 85 RH

보호구조 IP 50 (IEC 규격)

재질 케이스 : ABS, 렌즈 : 아크릴 중량 약 150g

부속품 고정 브라켓, 볼트/너트류

-210-

Page 217: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

광전 센서

외형치수도

-211-

Page 218: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

Appendix B. 센서 매뉴얼

제어출력 회로도

동작모드와 타이밍도

-212-

Page 219: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

광전 센서

취급시 주의사항

1. 포토센서의 지향각 이내에 강한 광원(태양광, 스포트라이트)이 직접 입사되지 않

도록 차광판, 후드 등으로 가려 주십시오.

2. 포토센서를 형광등 불빛 아래서 사용할 경우 오동작을 할 수 있으므로 차광판으

로 가려 주십시오.

3. 투과형 포토센서를 2 조 이상 근접하게 사용할 경우 다른쪽 투광기의 영향으로 상

호간섭이 일어날 수 있으므로 투광기와 수광기의 위치를 바꾸어 간섭을 받지 않도록

설치하여 주십시오.

4. 포토센서를 바닥면에 완전히 붙혀 설치할 경우 그 반사광에 의한 일정량의 입광

으로 인해 오동작이 발생될 수 있으므로 바닥면으로부터 적당한 높이 만큼 이격시켜

설치하여 주십시오.

5. 포토센서의 배선을 고압선, 동력선과 함께 동일 배관으로 처리하면 오동작 또는

고장의 원인이 되는 경우가 있으므로 별도의 배선 또는 단독 배관을 사용하여 주십

시오.

6. 먼지나 부식이 심한 곳에서의 사용은 오동작의 원인이 되므로 설치시 이러한 장

소를 피하여 주십시오.

7. 출력에 DC 릴레이 등의 유도부하를 접속하는 경우는 다이오드 또는 바리스터 등

을 사용하여 서어지를 제거하여 주십시오.

8. 배선의 길이를 길게하면 서어지 등에 의하여 포토센서가 오동작을 할 수 있으므

로 되도록 이면 짧게 처리하여 주십시오

9. 포토센서의 렌즈면이 이물질 등에 의해 오염되었을 경우에는 마른 헝겊으로 가볍

게 닦아 내도록 하고, 시나계의 우기 용제는 절대 사용하지 말아 주십시오.

10. Switching Power Supply 를 전원공급 장치로 사용할 때는 아래 그림과 같이 Frame

Grount (F.G) 단자를 접지시키고 0V 와 F.G 단자 사이에 노이즈 제거용 콘덴서를 필히

접속하여 주십시오.

-213-

Page 220: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

Appendix B. 센서 매뉴얼

A.3 SLA 7024M - STEP MOTOR CONTROLLER IC

ABSOLUTE MAXIMUM RATINGS

at TA = +25°C

Load Supply Voltage, VBB . . . . . . . . . . . . 46 V

FET Output Voltage, VDS . . . . . . . . . . . 100 V

Control Supply Voltage, VCC . . . . . . . . . . 46 V

Peak Output Current, IOUTM (tw ≤ 100 µs)

SLA7024M . . . . . . . . . . . . . . . . . . . . . 3.0 A

SLA7026M . . . . . . . . . . . . . . . . . . . . . 5.0 A

SMA7029M . . . . . . . . . . . . . . . . . . . . 3.0 A

Continuous Output Current, IOUT

SLA7024M . . . . . . . . . . . . . . . . . . . . . 1.5 A

SLA7026M . . . . . . . . . . . . . . . . . . . . . 3.0 A

SMA7029M . . . . . . . . . . . . . . . . . . . . 1.5 A

Input Voltage Range, VIN . . . . -0.3 V to 7.0 V

Reference Voltage, VREF . . . . . . . . . . . 2.0 V

Package Power Dissipation, PD . See Graph

Junction Temperature, TJ . . . . . . . . . +150°C

Operating Temperature Range,

TA . . . . . . . . . . . . . . . . . . . . -20°C to +85°C

Storage Temperature Range,

Tstg . . . . . . . . . . . . . . . . . . -40°C to +150°C

BENEFITS AND FEATURES

Cost-Effective, Multi-Chip Solution

‘Turn-Key’ Motion-Control Module

Motor Operation to 3 A and 46 V

3rd Generation High-Voltage FETs

100 V, Avalanche-Rated NMOS

Low rDS(on) NMOS Outputs

Advanced, Improved Body Diodes

Single-Supply Motor/Module Operation

Half- or Full-Step Unipolar Drive

High-Efficiency, High-Speed PWM

Dual PWM Current Control (2-Phase)

Programmable PWM Current Control

Low Component Count PWM Drive

Low Internal Power Dissipation

Heat Sinking (Normally) Unnecessary

Electrically Isolated Power Tab

Logic IC- and µP-Compatible Inputs

Machine-Insertable Package

The SLA7024M, SLA7026M, and SMA7029M are designed for high-efficiency and high-

performance operation of 2-phase, unipolar stepper motors. An automated, innovative

packaging technology combined with power FETs and monolithic logic/control circuitry

advances power multi-chip modules (PMCMs™) toward the complete integration of

motion control. Highly automated manufacturing techniques provide low-cost and

-214-

Page 221: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

L297-STEP MOTOR CONTROLLER IC

exceptionally reliable PMCMs suitable for controlling and directly driving a broad range

of 2-phase, unipolar stepper motors. The three stepper motor multi-chip modules differ

primarily in output current ratings (1.5 A or 3.0 A) and package style.

All three PMCMs are rated for an absolute maximum limit of 46 V and utilize advanced

NMOS FETs for the high-current, high-voltage driver outputs. The avalanche-rated (≥100

V) FETs provide excellent ON resistance, improved body diodes, and very-fast switching.

The multi-chip ratings and performance afford significant benefits and advantages for

stepper drives when compared to the higher dissipation and slower switching speeds

associated with bipolar transistors.

Normally, heat sinks are not required for the SLA7024M or SMA7029M. The SLA7026M,

in demanding, higher-current systems designs, necessitates suitable heat transfer

methods for reliable operation. Complete applications information is given on the

following pages.

-215-

Page 222: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

Appendix B. 센서 매뉴얼

FUNCTIONAL BLOCK DIAGRAM

-216-

Page 223: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

A.4 엔코더 (외경 Ø40mm 축형 INCREMENTAL 로타리 엔코더)

특징

- 외경 Ø40mm 축형 INCREMENTAL 로타리 엔코더

- 좁은 공간에 설치가 편리하다.

- 축의 관성 모멘트가 적다

- 5~24VDC ± 5%의 넓은 전원 전압

- 다양한 출력방식

제어출력 회로도

-217-

Page 224: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

정격 / 성능

출력상 A, B, Z 상

출력위상차 A, B 상간의 위상차 : T/4 ± T/8 Totem Ploe

출력 Low:부하전류 30mA 이하 잔류전압 0.4V 이하

High:부하전류 10mA 이하 출력전압 (전원전압-1.5) V 이상 NPN

오픈콜렉터 /전압출력

부하전류:30mA 이하, 잔류전압:0.4V 이하 제어

출력

Line Driver 출력

Low:부하전류 20mA 이하, 잔류전압 0.5V 이하 High:부하전류-20mA 이하, 출력전압 2.5V 이상

Totem Pole 출력 0.5μs 이하(배선길이 1m, I sink=10mA 일 때)

NPN 오픈콜렉터 /전압출력

0.5μs 이하(배선길이 1m, I sink=30mA 일 때)

응답

속도

(상승/하강) Line Driver

출력 0.1μs 이하(배선길이 1m, I sink=20mA 일 때)

최대응답주파수 180Hz

전원전압 5~24VDC, Line Driver 출력의 경우:5VDC, 전압출력의 경우:5VDC, 12VDC, 24VDC (리플 P-P:5%이하)

소비전류 80mA 이하(무 부하시), Line Driver 출력일 경우 100mA 이하

(무 부하시)

전 기 적 사 양

접속방식 배선인출 기동토오크 40gf.cm(3,920μN.m)이하 관성모멘트 40g.cm2(4*10-6kg.m2)이하

축하중 Radial : 2kg.f, Thrust : 1 kg.f 축위치편차 Radial : 0.1kg.f 이내, Thrust : 0.2 kg.f 이내

기 계 적 사 양 최대허용회전수 5000rpm

절연저항 100MΩ 이상

(전단자와 케이스간의 500VDC 메가에 의한 기준) 내전압 750VAC 50/60Hz 에서 1 분간(전단자와 케이스간) 내진동 10~55Hz(주기 1 분간) 2 시간 내충격 50G 이하

사용주위온도 -10~70°C <Line Driver 일경우 0~70°C > 사용주위습도 35~85%RH, 보존시 35~90%RH

보호구조 IP50(IEC 규격) 배선사양 5P, Ø5mm, 길이:1m, 쉴드케이블

중량 약 120g 획득규격 CE

-218-

Page 225: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

출력 파형

- NPN 오픈 콜렉터 출력의 경우는 좌측의 출력파형이 반전되어 나타납니다.

- 시계방향 (CW) : Shaft 에서 볼 때 우회전입니다.

-219-

Page 226: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

접속도

- 사용하지 않는 배선은 절연처리를 하여 주십시오.

- 엔코더의 금속케이스와 쉴드선은 반드시 접지(F.G)시켜 주십시오.

-220-

Page 227: 컴퓨터를 이용한 계측/제어 자동화 실험fadata.co.kr/pdf/%C4%BF%B9%CC%C1%B6%BE%C6%B1%B3%C0... · 1.3 comi-edkit1 교육용 센서 키트.....14 1.4 윈도우 프로그래밍

외형치수도

-221-