[5호]왕초보 전자회로 강좌특집 5부 – 1
왕초보 전자회로 강좌특집 5부 – 1
글 |스네일앤 스네이크 ※ 상기 내용은 디바이스마트와 스네일앤 스네이크의 협의를 |
데이터 로거(data logger) 개념+ 저렴한 “나의 로거” 설계
▶ 회로도 (The circuit diagram) : 인터페이스란 물리세계와 컴퓨터 세계의 국경에 세워진 검문소
▶ 회로설명 (circuit description)
필자는 (누구나) 어떤 새로운 일을 배울 때면, (반드시) 목적이 있거나 또는 있어야 한다고 생각합니다. 예를 들면 새로운 게임을 습득하려고 할 때 화려한 그래픽, 현란한 사운드, 탄탄한 스토리, 친구들과의 협동 또는 경쟁, 승리의 기쁨 등을 마음속에 그리고 있다고 할 수 있습니다. 영화나 만화, 소설책에서는 새롭고 특이한 모험과 악의 응징, 지순하고 열렬한 사랑, 인간애 또는 무지막지한 공포와 반전을 기대합니다. 음악에서는 정열적이거나 차분하게 정리되는 마음을 월드컵 축구와 같은 운동경기에서는 (각본없는 드라마에서 느낄 수 있는) 예기치 않은 감동을 마음속에 두고 있습니다. 그렇다면 전자회로에서는 (이들과는 다른) 감동적이고 가슴 벅찬 새로운 어떤 것을 기대할 수 있을까요? 한 마디로 어떤 목적이 있기에(보통 사람들이) 전자회로를 공부할 만한 가치가 있는 것인가요?
답은 자연세계 안에서 여러분을 관객이 아닌 주인공으로 만들어 준다는 것입니다. 다시 설명하면 (우리가 살아가는) 물리세계의 변화나 기계의 동작을 관측하고 해석해서 그들을 (원하는 대로) 움직일 재주와 능력이 있는 주연(not 관객)이자 창작자의 반열로 여러분을 초대하는 것입니다.
즉 영화의 감독, 연극 무대나 드라마의 PD, 책의 작가, 만화가, 팝이나 가요, 교향곡의 작곡가, 그림의 화가, 게임의 제작자나 스토리 메이커와 같은 수준이라고 보시면 이해하기 쉽겠지요.
살아가는 인생이란 연극 가운데서 주인공의 역활을 맡고자 하는 마음은 누구에게나 공통적인 욕망입니다. 문제는 나의 재능(talent)에 적합한 어떤 역활의 주인공을 선택하느냐 하는 것이지요.
인생의 주인공은 인간세계와 자연세계의 크게 두 부류로 나누어 집니다. 물론 두 세계를 총괄하는 신(神)이라는 총 감독이 있기는 하지만 복잡하게 분화되어 있는 세상에서 나만의 (작은) 역활을 찾아내는 것이 그렇게 어렵지만은 않을 것입니다.
“전자회로를 이해”한다는 뜻은 (자연세계 안에서) 나를 주인공으로 하여 씌여진 대본을 읽을 수 있는, 아이템(기술) 중 하나를 찾았다는 점을 의미합니다. 또 하나의 아이템은 “컴퓨터 언어”이며 마지막 아이템은 “센서와 엑튜에이터”입니다.
※ PC 자체와 Basic, C, C++와 갈은 컴퓨터 언어는 이미 널리 보급되어 있습니다. (필요하다면 쉽게 배울 수 있는 책과 자료도 많이 있고요.) 센서는 처음부터 끝까지 (다 배우고 나서) 사용할 수 있는 것이 아닙니다.
내가 관심있는 분야가 나타나면, 그 때 집중적으로 탐구하는 형식으로 공부하는 방법이 유효합니다. (종류가 워낙 다양하기 때문이죠.) 모터와 솔레노이드로 대표되는 엑튜에이터는 몇몇만 이해하면 충분합니다. 그러므로 전자회로만 활용할 수 있으면, 여행준비의 50%는 완료되는 셈이지요.
우리의 자연세계 이해와 통제(제어)를 위한 여행에서 전자회로의 습득은 “인터페이스 영역”을 담당하는 회로를 제작하는데 목적이 있습니다. “인터페이스 영역”이란 컴퓨터”세계와 물리세계의 국경선에 세워진 검문소(초소)와 같은 것으로, 그림에서 ②, ③번을 합한 부분입니다. 이 부분을 거쳐서 컴퓨터 명령은 전압과 전류로 변환되어 물리세계로 전달되며, (센서에 의해 전압/전류로 바뀐) 물리세계의 신호는 컴퓨터의 언어가 이해할 수 있는 디지털 데이터로 전환되는 것입니다.
“인터페이스 영역”은 데이터 수집/제어 보드와 시그널 컨디셔너라는 고가의 장치로 판매되고 있습니다. 전용 소프트웨어도 마찬가지입니다. 이 이야기는 우리에게 들어가고 싶어도 (입장권이 비싸서) 문 앞에 서 있을 수 밖에 없는, 테마동산 앞의 어린이를 연상시킵니다. 이 어린이는 우리의 호기심을 의미합니다.
오늘날 보통 사람들까지도 PC를 보유하고 있습니다. 교육에 의해 컴퓨터 언어를 구사할 수 있는 사람도 많아졌습니다. 더구나 우리나라는 세계최고의 인터넷 환경을 자랑합니다. 인터넷의 발달로 (과거에는 꿈도 꿀 수 없었던) 자료의 공유와 고급정보의 습득이 용이해졌습니다. 기술의 발달로 전자부품과 각종 센서, 모터의 종류는 나날이 풍부해지고 가격은 이미 저렴합니다. 어떻게든 인터페이스라는 (최후의) 장벽을 부수고, 새로운 공기를 맛 보고 싶지 않으십니까? 필자는 이와같은 강한 욕구와 충동을 느낍니다.
위의 그림에서처럼, 지금까지 소개한 전자회로와 마이컴의 지식만으로 ②, ③번 “인터페이스 영역”의 기술적 내용을 충분히 이해할 수 있습니다.
필자의 전략을 말씀드리지요. ②번의 로거/콘트롤러는 (반복해서) 사용되며, 반드시 마이컴을 사용해서 개발해야 합니다. 마이컴은 초보자가 단시간에 습득하기 힘듭니다. (동작의 이해는 가능합니다) 그러므로 ②번은 전문가가 개발합니다. 단 사양 (즉 성능)을 크게 낮춰서 개발합니다. 걱정하지 마십시요. 성능을 낮춰도 80~90%의 대상에는 적용 가능합니다. 그렇게 되면 개발시간이 단축되고 개발비가 적게 들 뿐만 아니라, 만들어진 로거/컨트롤러의 가격도 함께 저렴해집니다.
※ ②번의 로거/콘트롤러부의 정식명칭은 A/D를 중시한 DAQ (Data Acqusition) 보드와 D/A, I/O, Counter/Timer 보드입니다. 대부분의 보드(board)는 PC 슬롯에 장착되는 구조를 채택하고 있습니다.
로거(Logger)란, 본래 PC와 분리되어 독자적으로 데이터를 수집/저장하는 장치를 일컫는 용어입니다.
③번 “시그날 컨디셔닝” 부분은 ④, ⑤번의 대상에 따라 달라집니다.
이 부분에 (지금까지 공부해 온) 전자회로로 직접 제작합니다. 브레드보드에 만들어도 좋고, 만능기판에 납땜해 만들어도 좋습니다. 어차피 ③번 부분은 전자회로로 구성되는 부분이니까요.
※ ④, ⑤번 (물리세계의) 대상 선정과 측정/제어방법은, 본 홈페이지의 프로젝트 테마로 꾸분히 개발되어 나갈 것입니다. (개발된 테마의 개선과 확장에는 많은 분들의 도움이 필요하게 되겠지요.)
①번 PC 부분은 프로그래밍만 남습니다. ②번을 (표준 포트를 사용하도록 설계하면) 따로 프로그램을 작성하지 않고, (응용 프로그램 만으로) 간단히 동작을 확인할 수 있습니다. 그러나 기본 동작의 확인만으로는 성에 차지 않게 될 것입니다. 내 생각대로 동작시켜 보려면, 프로그램을 확장해서 작성하면 됩니다. 표준 통신포트를 이용하므로, 현존하는 모든 프로그램 언어를 활용할 수 있습니다. 도전 하십시요.
▶ 회로도 (The circuit diagram) : : 나의 로거 설계전략 (MY Logger Design Strategy)
지금까지 제시한 데이터 인터페이싱의 핵심을 이루는 로거/콘트롤러 (Logger/Controller)의 설계전략을 설명 하겠습니다.
설계전략의 기본은,
1. 간단한 사용
2. A/D, D/A, I/O 통합기능
3. 샘플링 레이트로 수 회 samples/sec 정도를 목표 (1초에 2~3 회 자료수집과 명령수행이 가능)
4. 펌 웨어 업그레이드 기능
5. 저가형 설계 (안정화 전원회로를 내장한) 등으로 요약할 수 있습니다.
이 정도 성능이면 필요한 (초급 수준의) 신호처리 회로를 제작하고, PC에서 작성한 간단한 프로그램만으로 대다수의 (기초) 실험을 수행하면서 자료 수집과 해석 및 제어 실험을 만끽해 볼 수 있습니다.
1번 목표를 위해 PC의 표준 I/O 포트인 RS-232 통신방식으로 명령을 받고, (수집한) 자료와 (명령)수행 결과를 PC로 전송하도록 설계합니다.
명령과 데이터 형식은 ASCII 방식을 사용 (문자교환방식)
2번 목표를 위해 5 ch A/D 컨버터가 내장된 PIC16F873A 마이크로 콘트롤러를 채택하였습니다.
3번 목표를 위해 RS-232 통신/문자명령 처리등을 위한 임베디드 프로그램을, C 언어로 개발합니다.
4번 목표를 위해 부트로더(boot Loader) 프로그램을 내장합니다. PIC용 부트로더는 사용법과 자료가 인터넷에 공개되어 있습니다. 부트로더를 채택함으로써 언제라도 새로운 버젼의 펌웨어를 업그레이드 할 수 있게되어 로거/콘트롤러의 활용도가 높아지고 기능변경과 개선이 용이하게 됩니다.
5번 목표를 위해 다소 투박하더라도 표준형태의 부품을 사용합니다. 또 (자신에게 맞는 형태의) 로거/콘트롤러를 제작하고 싶은 사람들을 위해 부품만도 따로 공급합니다(PCB 형태의 완제품도 판매).
마이컴에 익숙한 사람이라면, 자신만의 로거/콘트롤러를 설계하고 만들 수 있으리라고 생각됩니다. 왜냐하면 로거/콘트롤러 프로그래밍에 특별히 어려운 부분은 없기 때문입니다(회로도는 다음 페이지에).
그러나 필자의 의견으로는 굳이 로거/콘트롤러를 따로 설계해서 제작하지 않기를 권합니다. 그 이유는 (앞으로 프로젝트를 진행하면서 점차 밝혀 지겠지만) 이제부터 진행하려는 프로젝트에서, 로거/콘트롤러는 일종의 (부분적인) 부품에 불과하다는 점을 이해하게 될 것이기 때문입니다.
정말 재미있고 흥미를 자아내는 주제는 실제 세상에서 데이터를 수집하고 해석해서 의미를 알아내고, 모터를 제어해서 원하는 동작을 만드는 등의 문제를 해결해 나가는 것입니다.
이 과정에서 로거/콘트롤러가 중요한 부품이기는 하지만, 한 편으로는 사용할 수 있으면 충분하다고 볼 수도 있는 것입니다. 왜냐하면 로거/콘트롤러 그 자체만으로는 어떤 문제가 해결되지 않으며, 반드시 다른 부분들과 조합되어 사용되어야 하기 때문입니다. 이런 이유로 대학과 연구소에서도 고가의 DAQ 보드를, (설계하지 않고) 구입해서 사용하는 것입니다. 결론적으로 로거/콘트롤러는 (최종)목적에 도달하기 위한 하나의 필요품일 뿐입니다.
제작한 “원격로거(remote logger) = MY 로거” 명칭 및 회로도
▶ 회로설명 (circuit description)
전 지금까지 제시한 (우리의) 목적과 사양에 맞는 원격로거를 설계/제작/테스트 하였으며, 이름은 “MY 로거”라고 붙였습니다.
※ 브레드보드에서 테스트한 “MY 로거”는 1.0 버젼, PCB에 제작하도록 설계한 타입은 2.0 버젼
설계/제작한 “MY 로거”의 사용법, 펌웨어 업그레이드, 통신 프로그램, 실험예 등등을 설명하기에 앞서 필요한 각부의 명칭과 회로도를 먼저 소개합니다.
▶ 회로도 (The circuit diagram) “MY 로거”각부의 명칭과 기능
“MY 로거”는 PC나 노트북 컴퓨터의 COM 포트와 연결되어 사용됩니다 (펌웨어 업그레이드도 동일).
“MY 로거”는 4개의 A/D 채널과 2개의 디지털 입력(DI), 2개의 디지털 출력(DO)을 제공합니다. 그러나 펌웨어를 교체하면 디지털 입/출력 단자의 수를 조정할 수 있어 편리합니다(최대 8 단자).
※ 2 단자의 PWM 출력을 제공합니다. (PWM 출력을 RC 필터링하여 간이 D/A로 사용할 수 있습니다. ) 단 “MY 로거” PCB내부에서 (외부로) 선을 연결해야 합니다. (납땜필요)
“MY 로거”는 4개의 LED로 동작상태를 쉽게 모니터할 수 있습니다. 또 항상 입력 전압을 감시하도록 설계되어 있으므로, 원격사용에 적합합니다.
“MY 로거”는 견고한 커넥터, 잭, 터미널을 사용하여, 다루기 편리하고 튼튼합니다.
“MY 로거”는 일반부품으로 설계하였으므로 부품조달이 용이하고 제작비가 저렴합니다.
※ “5V 출력 핀”에서 제공되는 전류는, 내부의 7805에서 공급되므로 100mA를 넘기지 않도록 주의해야 합니다. (7805 정전압 IC의 최고 정격은 1A 이지만, 방렬판이 없으므로 큰 전류의 공급은 무리)
▶ 회로도 (The circuit diagram) : : 원격 로거/콘트롤러 회로도 (Ver 2.0)
“MY 로거”회로는 평범한 마이컴회로 범주이므로 일반적인 설명은 생략합니다.
전원잭에서 공급되는 전원의 +/_ 방향에 영향을 받지 않도록, 브릿지 회로(D1~D4)를 이용하였습니다.
마이컴 단자에 직렬 연결된 330Ω 저항은, 실수로 출력단자가 GND에 연결되였을 때 마이컴 파손을 막기 위한 목적입니다.
회로도의 점퍼(Jumper)는 “MY 로거”의 A/D 4단자를 전부 DI 입력로 사용할 때, 마이컴 단자에 100k 풀업저항을 연결하기 위한 용도입니다. 이 때 (삽입되어 있지않은) R16~19, 100K저항도 추가로 연결하여야 합니다. (“MY 로거”를 “콘트롤러” 입력전용으로 사용할 때 변경하면 O.K)
※ R16~19 저항은 “MY 로거” 제작시에 조립되지 않으며, 따로 공급됨.
“MY 로거”의 외부전원을 전지나 배터리, 태양전지로 연결할 경우를 대비해서 (가급적 소비전력이 적도록) LED 전류제한 저항을 10k로 설계하였습니다. 그 결과 LED 밝기가 희미하나 고장은 아닙니다.
“MY 로거”의 간단한 사용법
▶ 회로설명 (circuit description)
이전 시간의 설명들에서 PC에 RS232 (통신)방식으로 연결해서 원격으로 조종할 수 있는, 원격 로거/콘트롤러의 필요과 사양등의 전체 윤곽을 이해하셨을 것입니다.
이번 시간에는 (설명한 개념으로 설계/제작된) “MY 로거”의 사용법을 설명합니다. 옛 속담에 “구슬이 서 말이라도 꿰어야 보배” 라는 말이 있습니다. 그러므로 만들어진 “MY 로거”가 진가를 발휘하려면 적절한 성능에 더해서, 쉽게 사용할 수 있으며 깔끔한 동작이 보증되어야 할 것입니다.
(설계/제작한) “MY 로거”는 RS232C 통신을 이용한 원격조정이 목적이므로, 가장 간단하면서도 보편적으로 널리 사용되는 애스키 코드(ASCII code) 형식을 명령과 데이터 전달에 사용합니다.
※ 애스키 코드(ASCII code) : ASCII는 American Standard Code for Information Interchange의 약자로 1963년에 미국에서 제정된 (정보교류용) 표준코드 입니다. 그 목적은 각 시스템간에 정보를 교류한다는 것이었지만, 이것이 자리잡는데에는 무려 15년이라는 시간이 소요 되었습니다. ASCII code는 컴퓨터 코드체계를 선점하여, 가장 큰 영향력을 발휘하였으며 현재까지도 호환성이 좋으며 나중에는 확장판(Latin-1, Extended ASCII)이 발표 되기도 하였습니다.
애스키 코드의 형식은 영문 알파벳을 컴퓨터가 인식하도록 하기 위해, (각 문자마다 정해진) 8비트 이진법 숫자 체계를 약속한 것으로, 현재 영문 텍스트포맷의 표준으로 되어 있습니다.
▶ 회로도 (The circuit diagram) : : “MY 로거”의 초 간단 사용법 (MY Logger Command)
“MY 로거”사용법은 간단합니다. 먼저 준비작업으로 PC COM 포트와 “MY 로거”를 (RS232C 통신) 케이블로 연결하고, “MY 로거”에 전원을 연결하면 O.K 입니다(케이블 길이는 10m 까지 허용).
준비가 끝나면 PC에서 정해진 문자열을 (케이블이 연결된) COM 포트로 보내면, “MY 로거”가 수신하고 명령을 해독해서 수행하고, 신속하게 결과를 보내 줍니다.
예로 “MY 로거”의 1번 디지털 입력핀의 상태를 알고 싶으면(“MY 로거”로) “i1” 문자열을 보냅니다. 그러면 “MY 로거”는 1번 디지털핀의 전압을 검사해서 High면 T, Low면 F 문자를 보내옵니다. 만일 1번 디지털 출력핀을 High 상태로 셋팅하고 싶으면, “o11” 문자열을 보내면 끝입니다. (간단하지 않나요?) “MY 로거” 명령어는 2개 또는 3개의 문자들로 이루어집니다. 첫 번째는 명령의 종류를, 두 번째는 포트번호를, 세 번째 문자는 데이터를 의미합니다. (그림참조)
※ 주1 : T는 입력단자가 High 상태 (약 5 V), F는 입력단자가 Low 상태 (약 0 V) 임을 의미합니다.
※ 주2 : “MY 로거”는 0~5V 입력전압을 10 bit A/D로 변환한 후상위, 하위의 두 문자로 나누어 보내줍니다. 측정된 전압값은 (보내진 상위, 하위) 두 문자를 애스키 (10진 값에 해당하는) 숫자로 변환하고 약간의 수정을 거치고, 계산하여 구합니다. (전압값 계산과정은 PC에서 이루어집니다)
※ 주3 : “a5”명령으로 “MY 로거”의 입력 잭에 공급되는 전압의 1/4 값을 측정합니다. 전압을 다운하여 측정하는 이유는 공급전압이 5V 보다 훨씬 높을 수 있기 때문입니다.
※ 주4 : 테이터로 0~127 값에 대응하는 ASCII 문자를 (“MY 로거”로) 보냅니다. “MY 로거”에서는 데이터 문자의 애스키 숫자에 비례하는 PWM 듀티비를 계산한 후, 지정된 포트에 펄스열을 출력합니다. 0~5V 범위의 아날로그 전압은 PWM 출력펄스를, 한 번 더 (RC 로우패스)필터를 거쳐 만들어집니다.
※ 명령은 아니지만 리셋버튼이 눌렸다 떼어지거나 전원이 새로 투입되면, “MY 로거”는 (정해진) “초기 문자열”을 보내옵니다. (Ex : Logger! Ver 2.0)
※ ‘rr’리셋 명령은 잘못된 명령을 보냈거나 또는 (노이즈와 같은) 이유로 “MY 로거”가 응답하지 않을 때 사용합니다. 리셋 명령은 “MY 로거”의 명령 해석루틴을 초기화시켜 새로 시작하도록 합니다.
※ 명령 문자열은 필요에 의해 추가/삭제될 수 있습니다. (임베디드 프로그램 변경이 필요함)
※ “MY 로거”RS232 통신사양 : 19200 bps (bit per second), 8 bit data, 1 stop bit, No parity
▶ 회로설명 (circuit description)
PC와 “MY 로거”의 통신에서 명령어와 데이터에 사용되는 애스키 코드(ASCII code)에 대해 설명하겠습니다.
아래에 위치한 그림의 표를 보면, (128개의) 애스키 코드는 키보드에서 표현여부에 따라 특수문자와 보통문자로 나누어집니다. 그리고 각 문자에는 0에서 127사이의 고유번호가 부여되어 있습니다.
PC나 마이컴은 모두 디지털 로직을 바탕으로 동작하므로, 모든 데이터는 High와 Low의 이진 데이터로 표현됩니다. 그러므로 0~127의 10진 숫자는, 7비트의 2진 숫자로 바뀌어 사용됩니다. (2^7=128)
※ 마이컴의 자료이동에 사용되는 최소 데이터 단위는 관례적으로 “8 비트”이므로, 부득이 여분의 최상위 비트는 표준 애스키 코드에 사용되지 않습니다.
애스키 코드(ASCII code)에 의하면 ‘A’라는 문자는 10진수 65로, ‘A’= 65라는 식이 성립됩니다. 즉 숫자가 문자로 대치되는 것이며, 반대로 문자도 숫자로 표현될 수 있습니다. 명백히 이런 변환이 필요한 이유는 인간(人間)은 문자로 표현해야 이해가 가능하지만, 컴퓨터는 (문자를 다룰 수 없으며) 오직 숫자로만 의사전달과 계산이 가능하기 때문입니다.
그러므로 컴퓨터와 인간, 서로간의 차이를 극복하기 위해서 문자와 숫자 사이의 관계를 약속한 문서가 필요해 집니다. 바로 애스키 코드(ASCII code)입니다.
애스키 코드(ASCII code)에 의해 “문자 = 숫자”가 되므로 혼란스러운 일이 많이 발생합니다. 예를들면 문자끼리 더하기를 할 수 있습니다.
‘A’ + ‘*’= 65 + 42 = 107 = ‘k’ 가 됩니다. 문자 ‘0’은 10진 숫자로 48 입니다. 따라서 ‘0’ + ‘1’ = 48 + 49 = 97 = ‘a’ 가 되고 맙니다. 원래 문자끼리 더할 수는 없는 것이므로, 내용을 모르는 사람에게는 이해할 수 없는 수수께끼로 되는 것입니다. 세상에는 이와 같은 일이 많습니다.
또 하나의 중요한 점은 이제 한 쪽에서 문자를 보내도, 받는 쪽에서 숫자로 사용할 수도 있다는 것입니다. 반대의 경우도 발생합니다. 이제 컴퓨터 (논리) 세계에서, 숫자와 문자는 같은 의미를 같는다는 점을 반드시 마음속에 새겨 두어야 혼란을 피할 수 있습니다.
※ 키보드로 표현되지 않는 특수문자는, 오로지 숫자로 표현하여야 합니다. “MY 로거”에서는 숫자 데이터를 전송하기 위해 애스키 문자를 이용하므로, 0~127 사이의 모든 문자를 사용하고 있습니다. 따라서 특수문자를 표현에는 (해당하는 애스키) 숫자를 기입합니다.
“MY 로거” 사용법을 설명하면서 간단하게 사용한다는 것과, 기술 의미를 설명한다는 것은 다르다는 것을 느꼈습니다. 성능이 약하다고는 하나, 고가의 DAQ 보드를 대체하려는 로거가 간단하기만 하다면, 이 또한 앞 뒤가 맞지 않습니다. 그러나 사용자의 입장에서 보면 (굳이 어려운 내부기술을 모르더라도) 재미있고 유용하게 사용할 수 있으면 충분하다고 생각합니다.
다만 설계자의 입장에서, 자세한 내부 구조를 설명해 두는 것이 여러모로 유용하리라고 믿고 있습니다. 특히 PC측 소프트웨어를 작성하려면 이 정도의 예비 지식은 반드시 필요하리라고 생각하므로, 초보자께서는 이해하여 주시기 부탁 드립니다.
▶ 회로도 (The circuit diagram) : 애스키 코드 (ASCII code)와 RS-232C 통신의 테이터 구
다음편에서 계속 됩니다.