밤 문화를 좋아하신다면 현란한 레이져 쑈(laser show)를 생각할수도 있고, 철판을 자르거나, 반도체 칩 위에 순식간에 글자를 새기는 것을 보신적이 있나요?
이번 시간에는 이 스캐너라는 H/W를 이용하는 방법을 소개시켜드리겠습니다. 준비물은 독일 스캔랩(www.scanlab.de) 혹은 XY2-100 통신방식과 호환되는 스캐너 (그림 참고)를 준비해 주시고, 이를 제어해주는 컨트롤러(여기에서는 RTC를 사용함) 도 필요하답니다. 물론 레이저 발생장치가 있으면 좋겠지만 만약 없다면 레이저 포인터라도 준비해야 최소한의 준비가 됩니다.
정교한 제어 S/W를 개발하기 위해서는 다양한 역학(dynamics)을 수식으로 계산하는등의 복잡한 사전준비가 필요하지만 이런것은 H/W가 알아서 처리해준다는 믿음을 갖고 쉬운것 부터 해보는게 좋습니다.
컴파일 가능한 개발 환경 설정은 www.scanlab.de 에서 배포하는 예제 프로그램을 참고하여 준비하여 주시고,
- RTC4open() 함수를 호출 : rtc4dll 이 명시적으로 load 되고 함수들의 진입주소가 설정됨)
- load_program_file("rtc4d2.hex") 호출 : 펌웨어가 로드됨
- load_correction_file("cor_1to1.ctb", 1, 1,1, 0,0,0) 호출 : 무 보정파일(1:1 보정파일) 을 로드함
- select_cor_table(1, 0) 호출 : 보정파일을 선택함
- set_start_list(1) : 명령을 넣을 버퍼 준비
- mark_abs(), jump_abs() 함수 : x, y 가공 좌표를 입력 (move to / line to 와 유사)
- set_end_of_list() : 버퍼 닫기
- execute_list(1) : 명령 버퍼를 모두 실행(flush)
- get_status() : 호출하여 명령이 실행완료될때까지 지속적인 polling 실시
- RTC4close() : 호출하여 자원받납 후 프로그램 종료
위의 절차가 가장 간단한 사용법이 되겠습니다. 실제 mark/jump 에 입력하는 좌표를 외부 캐드등의 벡터 데이타를 가져와 입력해주면 가공이 수행되게 됩니다. 3D 프린터등에도 사용이 가능하답니다.
스캐너라는 것은 위와 같이 두개의 모터를 서로 떨어뜨려 배치해 놓고 반사거울을 각각 달아 2차원 영역에 대한 위치를 제어하는 것입니다. 그러나 위 그림에서도 볼수있듯이 반사거울의 이동(각도 변화)에 따라 두 반사거울 사이의 거리가 조금씩 변하는데 이로인해 실제 레이저의 위치는 정사각형이 아닌 왜곡(distortion)되는 문제가 있습니다. 별로 믿음이 않가지요?
또한 레이저는 아시겠지만 유도된 빛이기 때문에 볼록렌즈와 같이 집광(focusing)이 가능한 광학장치를 사용해 에너지 밀도를 높혀 가공이 가능한 빛으로 만들수있습니다. 이 또한 렌즈를 통과하기 때문에 굴절(스넬의 법칙)등이 발생하고 결국 내가 가공하고자 하는 위치가 왜곡될수 밖에 없습니다.
정리하면, 2개의 반사거울을 사용하는 스캐너의 구조상 배게모양(pillow-shaped)의 왜곡과 렌즈를 사용하여 생기는 술통 모양(barrel-shaped)의 왜곡이 겹쳐 결국 위 그림에서 오른쪽과 같이 괴이한 왜곡이 발생하게 됩니다.
이런 왜곡을 해결(혹은 보상)해 주기 위해 결국 위치보정을 해주는기능을 제공하는데, 이 파일이 바로 load_correction_file 에 의해 설정됩니다. 물론 사용자가 2차원영역에 대한 측정을 마치고 이 파일을 생성시켜야 한답니다.
* 관심있는 분들이 있으면 덧글 달아주시기 바랍니다. 좀더 세부적인 설명을 해드리겠습니다.
또한 레이저는 아시겠지만 유도된 빛이기 때문에 볼록렌즈와 같이 집광(focusing)이 가능한 광학장치를 사용해 에너지 밀도를 높혀 가공이 가능한 빛으로 만들수있습니다. 이 또한 렌즈를 통과하기 때문에 굴절(스넬의 법칙)등이 발생하고 결국 내가 가공하고자 하는 위치가 왜곡될수 밖에 없습니다.
정리하면, 2개의 반사거울을 사용하는 스캐너의 구조상 배게모양(pillow-shaped)의 왜곡과 렌즈를 사용하여 생기는 술통 모양(barrel-shaped)의 왜곡이 겹쳐 결국 위 그림에서 오른쪽과 같이 괴이한 왜곡이 발생하게 됩니다.
이런 왜곡을 해결(혹은 보상)해 주기 위해 결국 위치보정을 해주는기능을 제공하는데, 이 파일이 바로 load_correction_file 에 의해 설정됩니다. 물론 사용자가 2차원영역에 대한 측정을 마치고 이 파일을 생성시켜야 한답니다.
* 관심있는 분들이 있으면 덧글 달아주시기 바랍니다. 좀더 세부적인 설명을 해드리겠습니다.