기억을 더듬어 보면.. 한 5,6년 전쯤의 일인거 같다.. Daum의 마사모 카페에서 정모 공지가 올라왔는데 장소는
경기대 였는지 경희대 였는지.. 수원쪽에 있는 학교 였었다. 당시 나는 196, 188, 296 을 사용해 장난감을 만들어
본 후 ARM 에 관심을 갖고 3410으로 마우스를 만들어보고 있었을 때였는 듯 싶다. 당시에 학교 소모임에 구축
되어 있는 개발환경은 8051과 196 뿐이었고, 배운게 8bit Micom 밖에 없었던 나는 DSP 의 개념조차 생소하였던
미숙아였다. 마우스에 대한 동경심만을 갖은 채... 주변에서 도움을 받을 수 있는 곳은 거의 전무 했었고
그나마 디동의 고전자료와 다음 마사모 회원님들이 간간히 알려주는 노하우 들은 나에게 있어서 사막의 오아시스
같은 존재였었다. 막상 정모에 참석을 하자니 참으로 뻘쭘하드라. 같이 가겠다는 녀석들은 모두다 빵꾸를
냈었고, 갈까말까 많은 고민 끝에 결국은 수원행 버스를 타게 된다. 어리버리 주삣쭈빗 정모장소에 들어선 나를..
꼭 평소에 알고 지내던 사람처럼 맞아 주셨던게 단국대 최윤근 님이었다. 강의실 문앞에서 회원들을 맞아주시고
악수까지 하며 인사를 건내주시던 윤근이형이 얼마나 고맙던지... ㅠㅠ
사진 및 대회장에서 멀찍이 떨어져서 구경하던 마우스를... 처음으로 코앞에서.. 그것도 풀미로 주행하는 모습을
보면서... 감격, 감격, 또 감격 하였고 몇년안에 저자리에 내가 서리라.. 모질게 마음을 다잡았던 자리였었다..
특히 아주대 아톰의 윤병민님께서 제작하신 '삽질만세' 의 주행은... 엄청난 충격이었다..
마우스의 친선경연이 끝난 후 옆 강의실로 자리를 옮겨 세미나를 진행 하였다. (글을쓰다보니.. 2회 정모와..
3회 정모를 헤깔리고 있는거 같다... -_-;;;;; ) 무튼.. 윤근형이 어렵게 섭외하여 모셔왔다는...
향후 내 마우스 인생에 있어서 은사님이신 단국대 MAZE의 Killer33 제작자이신 이상문님의 강의를 듣게 된다..
이때가 처음으로 DSP 라는 녀석의 존재를 어렴풋이 느끼게 된 순간이었을 것이다.. 상문형은 본인이 직접
코딩중인 소스를 보여주시면서 세미나를 진행 하셨고... 화면에 나와있는.. 소수(Floating Point)들의 향연이란...
놀라움과 동경의 대상이 되어버린 그 순간을 난 잊을 수 없다.
어찌어찌하여 몇달 후 모 집단에 소속하게 되면서 상문형과 인천대 마마의 후까시 제작자이신 김용현님을
사부님으로 모실 수 있는 인생일대 최고의 기회를 맏을 수 있게 되었다. 수십개월을 혼자서 맨딴에 헤딩하며
만들었던 마우스는 이미 오래전부터 한계에 부딛혀 꼼짝을 못하고 있는 상황이었기에 그 순간은... 희열..
그 자체로 받아들여졌다.
그렇게 시작된 나와 TMS320VC33... 단국대 MAZE의 전유물이라고 생각되었던 33 PCB 를 받게 되었고,
개발환경을 구축하고, 프로그래밍을 시작하게 된다.
처음부터 난관이 많았다. 쌩 PCB 에 모든 소자를 직접 박아 넣는 과정을 처음으로 해보게 되었고, 33의 LQFP
패키지와 플래쉬용 PLCC to SMD 소켓.. 피치가 겁나게 좁은 여러 IC 등... 하도 떼었다 붙였다 하여 패턴 떨어진
PCB와, 다 되었다 싶어도 전원만 인가하면 타들어가는 IC 들... 과연 이 장벽을 넘을수 있을 것인가.. 포기 할
것인가 하는 고민속에 용현형은 원칩 DSP 로 가시겠다며 TMS320LF2406 으로 넘어가시고... 내 보드는 살아날
가망성이 없고... 결국 울상인 나를 불쌍히 여기사 상문형께서 완성품 33 보드를 하사해 주셨으니, 이제부터
본젹적인 시작.
TMS320VC33 은 TI 사에서 오래전에 개발한 고성능 부동소수점 연산장치 이다. 150 버젼과 120 버젼이 있는데
최대 동작주파수를 의미한다. 75 MIPS, 150 MFLOPS 의 연산속도를 내는.. 빠른 연산장치이다. VC33 이전에
같은 라인업의 DSP 로써 V31 과 V32 가 있었고, 32는 좀 다르지만 33은 31의 Upgrade 된 버젼이라고 보면 된다.
때문에 처음 시작할 경우 33 관련 자료가 별로 없더라도, 31 같은 경우 국내에 관련 서적이 몇권 있으니 참고하면
많은 도움을 받을 수 있다. 31과 33의 가장 큰 차이점은 동작속도와 매모리 크기 정도라고 보면 되기 때문에
31관련 지식을 습득 후 33의 데이터쉬트 등을 보면서 그 차이점만 이해하면 사용하는데 문제 없다고 본다.
뭐니뭐니 해도 33의 가장큰 장점은 실수연산을 정수연산처럼 겁나게 때려 박아도 정수형 DSP 의 처리 속도만큼
그 연산속도가 나온다는 것이라고 할 수 있겠다. DSP 든 아니든 실수 연산을 정수 연산장치에서 원하는 속도로
수행하기 위하여 우리는 수없는 꽁수를 쥐어짜냈었고, 그 잔마리 굴리는 시간과 시행착오, 삽질 등을 생각해 볼때
33의 실수연산 처리는 너무나 달콤한 유혹이 아닐수 없다.
하지만, 예쁜 여자친구를 사귀려면 수없는 스트레스를 감당해야 하는 것처럼, 실수연산이라는 미인계로 우리를
꼬시는 33을 데리고 살라면 많은 스트레스를 받아야 한다. 이 이쁜 녀석이 IQ는 높아서 두뇌회전은 빠른데
할 줄 아는게 아무것도 없다. 다시 말하면, 가지고 있는 것이라고는 달랑 32bit Timer 두개와, 외부인터럽트 몇개,
메모리 관리 능력정도... 아.. 내부램도 꽤 가지고 있긴 하다.
솔직히 말해서 이정도 스펙이면 로봇에 적용하기는 완전 꽝이다. LED 하나 켜볼수 있는 IO 포트도 하나 없고,
UART 통신조차 못하고... 도대체 무얼 할 수 있단 말인가?
결론은 우리가 필요로 하는 모든 주변장치들을 이 녀석에게 붙여 주어야 한다는 것이다. 보통 아날로그쪽 파트는
전용 IC 를 매모리맵핑 시켜서 사용하고 디지털 파트는 FPGA 나 CPLD 등으로 로직을 구현하여 사용을 할 수 밖에
없다. 그렇다. 상당히 귀찮은 작업이 아닐수 없다. 하다못해 천원짜리 AVR 만 하더라도 LED 하나 켜볼라믄
땜하고 코딩해서 한시간이면 떡을 치는데 VC33.. 이 녀석은 LED 하나 켜볼라고 하려면 회로도 그리고, PCB 뜨고,
PCB 땜빵하고, 프로그래머블 디바이스에 IO 설계하고, 외부 플래쉬에 모니터 굽고, 코딩하고........... 기타 등등..
의 과정을 거쳐야 한다. 정말 토나오는 작업들이다.
나름 맨땅에 헤딩한답시고 VC33 을 이용한 DC 라인트레이서는 만든다는 시나리오로 시뮬레이션을 해보자.
우선 알고 있는 모든 루트와 수단을 이용하여 VC33 및 V31 에 관련된 자료를 모은다. 학교 도서관에 있는 31관련
서적을 두어권 빌려오고, Maze 홈페이지에 있는 33관련 모든 자료를 구해본다. 최근에 정환형님께서 DC카페에
회로도를 공개 해 주셨기 때문에 그것을 참고하면 금상첨화.
개인적으로 부탁하여 모니터 프로그램까지 얻을 수 있다면 더할나위 없겠다.
책과, 데이터 쉬트와, 회로도 등을 보고 개념을 잡는다. 개념이 안서면 개념을 위한 노력을 아낌없이 한다.
어느정도 개념이 섰으면 내가 사용할 주변장치를 계획해 보자. 일단 센서 입력을 위한 ADC 를 선정해야겠다.
우리는 돈없는 학생이니 샘플 잘주고 종류 많은 TI 홈페이지에가서 ADC 를 검색한다. 검색하는 순간 당황스런
상황 발생. 제품이 너무 많다.. 도대체 무엇을 써야할지 감이 안온다. 필터링을 위해 또다시 관련 학습을 시작.
ADC 와 컨트롤러 간의 Interface 방식을 보니 대충 페레럴, SPI, IIC 기타 등등이 눈에 띤다. 관련 용어를
공부하자. 그러면 IC 간의 병렬 및 직렬 연결에 대한 개념을 잡을 수 있을 것이고 각 통신방식에 대한 감을
얻을 수 있을 것이다. VC33 에서 주변장치를 확장하기 위한 방법은 메모리 메핑 방식이다. 따라서 첫번째
필터로 Interface 방식이 병렬인 것을 골라 정렬해보자. 헉.. 하지만 그래도 많다. 이번엔 SAR 방식 변환이니
시그마델타 변환이지 하는 방법을 공부하고 맘에 드는 놈으로 필터링 하자. 그래도 많다. 이번엔 내가 어느정도의
해상도로 변환을 할 것인지 결정하고, 필터링.. 이제 눈으로 대충 훑어볼 수 있을 정도의 컨버터가 보일 것이다.
그럼 내가 하드웨어 트리거 방식으로 쓸 것인지, 소프트웨어 트리거 방식으로 쓸것인지 정도만 결정하면
남는 것은 거의 한두가지... 내가 쓸만한 ADC를 찾은 것이다. 일단 ADC 선정은 여기까지.
다음은 디지털 주변장치를 위한 소자 선정이다. 정환형님 회로도를 보니 CPLD 가 사용되어지고 있다.
프로그래머블 디바이스로 FPGA 와 CPLD 가 있다고 하니 두가지의 차이점을 공부하고 CLPD 면 되겠다 싶어서
디바이스를 선택하는 단계이다. 대표적인 생산 업체를 알아보니 자일링스와 알테라라는 회사가 대세인득 하다.
동전 뒤집기를 해서 선택하던, 주변 지인들에게 개발 Tool 지원을 받을수 있는 쪽으로 선택하던 하나를 선택한다.
고구려에 사용된 CPLD 는 Altera 사의 MAX 계열인 7000 시리즈로써 매크로셀이 512개 들어있는 디바이스다.
주변을 보아하니 알테라 칩을 쉽게 구할 수 있을 것 같기도 하고 맥스플러스나 쿼터스 같은 EDA 도 구할수
있을 것 같으니 같은 모델을 선택하거나, 필자의 경우라면 새로운 라인업인 MAX2 계열의 EPM570 시리즈를
선택한다. 같은 패키지라면 MAX 계열보다 MAX2 계열이 두배 이상의 매크로셀이 들어있고, 가격도 저렴하며
Propagation Delay 도 적기 때문이다. 그럼 CPLD 의 선정도 결정을 하였다.
위와 같은 방법으로 UART IC 와 Regulator, Motor Driver 등등을 선정하여 필요한 아이템을 득 한다.
자, 필요한 사전 준비는 끝났다. 이젠 설계다. 로봇에 장착될 보드이니 PCB 제작이 필요하겠다.
OrCAD 도 좋고 PADS 도 좋고, 내가 편한 CAD 로 회로도를 그린다. 예쁘게 그린다. 그리고 각 CAD 별 관련
서적을 준비하여 Artwork 과정을 익히고 내 보드를 디자인 하고.. 설계가 끝나면 발주를 해보자.
이젠 PCB 도 생겼다. 그럼 땜을 하고, 오실로 스코프로 클럭 아웃을 찍어본다. 정현파 클럭이 나오면 성공이다.
롬라이터로 플레쉬를 굽고, 모니터가 뜨는지 확인이 되면 상당한 진척이다. 이제 디지털 주면장치 설계를 해보자.
필요한 디지털 주변장치를 따져보니, 엔코더 펄스 카운트를 위한 QEP 모듈과, PWM 생성 모듈, 디스플레이
장치 구동을 위한 I/O, 센서 구동을 위한 I/O 및 디코더, 가각의 주변장치 선책을 위한 메모리 디코더 등등이 필요
하겠다. 까마득 하지 않은가? 또 책을 보자. 1학년때 그토록 지겨웠던 디지털 공학 책을 빼들고 씹어먹자.
동기부여가 되었기 때문에 훨씬 재미있고 습득도 빠를 것이다.
기본적인 디코더와 I/O 만 설계 후 테스트를 완료하게 되면 그 기쁨은 처음 LED 구동을 해봤을 때 보다 더 크다.
이제야 쓸만한 제어 및 연산장치 준비가 다 되었다. 진정 VC33 의 위력을 느껴보기 위하여 디지털 필터를 구현해
보자. 또 막막한가? 그럼 신호처리 책을 보자. 필터의 종류를 공부하고 내가 원하는 필터를 구현하여 Matlab으로
돌려보자. 수업시간에는 먼 소린지도 몰랐던 돼지털 필터가 이렇게 쉽게 이해될 줄이야.. 싶을 것이다.
그럼 이제 Matlab 으로 구현한 소스를 C 의 문법에만 맞도록 약간의 수정을 하여 VC33 에 포팅 해보자. 정수형
연산장치에서는 감히 상상도 못할 상황이다. 하지만 원하는 결과는 널널하게 보여주는 VC33.... 감동하자.
뭐.. 일단 위와 같은 진행 사항을 겪어야 할 것이다. 토나온다. 아마도 이 글을 보고 있는 여러분은 VC33 에 대한
정내미가 뚝 떨어져 버렸을지도 모른다. 하지만 다시 생각해 보자. 내가 위 과정을 겪으며 무엇을 얻게 되었는지..
첫째, 이제 어디가서 ADC 에 대한 이야기가 나올때 상식 수준의 이야기라면 절때 꿀리지 않는다.
또한 칩간의 통신방법도 어지간 하면 다 안다.
둘째, 전자공학 전공자임에도 불구 회로도 한번 Artwork 한번 안해본 학생들이 거의 다 인데 벌써 PCB 도 떠봤고
더군다나 CAD도 왠만큼 쓸 줄 알게 되었다.
셋째, PLD 설계를 위한 준비를 하다보니 디지털 공학의 실력가가 되었으며, HDL 에 관한 경험도 생겼다.
쿼터스 같은 EDA 도 쓸줄 안다.
넷째, 디지털 신호처리에서 중요한 필터를 설계해 보았고 Matlab 의 기본적인 사용법도 알게 되었다.
다섯째, DSP 및 주변장치의 구조가 내 머리속에 있다. 각각의 모듈을 테스트 해보겠다고 데이터 쉬트를 뒤적거릴
필요도 없으며 테스트된 모듈별 루틴을 합친다고 코드가 꼬일 일도 절대 없다. 그냥... 생각나는 대로 코딩하면
다............ 된다.
이 얼마나 알흠답지 아니한가.
2편 끝. 3편에 계속....