2015년 12월 22일

스캐너를 이용한 레이저 가공 기법 (laser processing method by controlling galvanometers)

밤 문화를 좋아하신다면 현란한 레이져 쑈(laser show)를 생각할수도 있고, 철판을 자르거나, 반도체 칩 위에 순식간에 글자를 새기는 것을 보신적이 있나요?





이 원리는 레이저라는 매우 순도높은(?) 빛을 발생시키고, 이 빛을 반사시키는 정교한 기계장치및 제어 S/W에 의해 동작한답니다. 일명 스캐너(scanner) 혹은 갈바노메터(galvanometer or galvo) 라고 부르는 장치인데, 반사용 거울을 달고 이걸 아주 미세하고 빠르게 움직여 멀리 떨어진 곳에 그림을 그리기도 하고, 구멍을 뚫기도 하고, 용접이나  철판을 자르기도 합니다.


이번 시간에는 이 스캐너라는 H/W를 이용하는 방법을 소개시켜드리겠습니다. 준비물은 독일 스캔랩(www.scanlab.de) 혹은 XY2-100 통신방식과 호환되는 스캐너 (그림 참고)를 준비해 주시고, 이를 제어해주는 컨트롤러(여기에서는 RTC를 사용함) 도 필요하답니다. 물론 레이저 발생장치가 있으면 좋겠지만 만약 없다면 레이저 포인터라도 준비해야 최소한의 준비가 됩니다.

정교한 제어 S/W를 개발하기 위해서는 다양한 역학(dynamics)을 수식으로 계산하는등의 복잡한 사전준비가 필요하지만 이런것은 H/W가 알아서 처리해준다는 믿음을 갖고 쉬운것 부터 해보는게 좋습니다.

컴파일 가능한 개발 환경 설정은 www.scanlab.de 에서 배포하는 예제 프로그램을 참고하여 준비하여 주시고,

  1. RTC4open() 함수를 호출 : rtc4dll 이 명시적으로 load 되고 함수들의 진입주소가 설정됨)
  2. load_program_file("rtc4d2.hex") 호출 : 펌웨어가 로드됨
  3. load_correction_file("cor_1to1.ctb", 1, 1,1, 0,0,0) 호출 : 무 보정파일(1:1 보정파일) 을 로드함
  4. select_cor_table(1, 0) 호출 : 보정파일을 선택함
  5. set_start_list(1) : 명령을 넣을 버퍼 준비
  6. mark_abs(), jump_abs() 함수 : x, y 가공 좌표를 입력 (move to / line to 와 유사)
  7. set_end_of_list() : 버퍼 닫기
  8. execute_list(1) : 명령 버퍼를 모두 실행(flush)
  9. get_status() : 호출하여 명령이 실행완료될때까지 지속적인 polling 실시
  10. RTC4close() : 호출하여 자원받납 후 프로그램 종료
위의 절차가 가장 간단한 사용법이 되겠습니다. 실제 mark/jump 에 입력하는 좌표를 외부 캐드등의 벡터 데이타를 가져와 입력해주면 가공이 수행되게 됩니다. 3D 프린터등에도 사용이 가능하답니다.

자, 이제 간단한 사용법을 알았으니 좀더 볼까요? 위의 초기화 과정에서 load_correction_file 의 역할을 설명해 보도록 하겠습니다.




스캐너라는 것은 위와 같이 두개의 모터를 서로 떨어뜨려 배치해 놓고 반사거울을 각각 달아 2차원 영역에 대한 위치를 제어하는 것입니다. 그러나 위 그림에서도 볼수있듯이 반사거울의 이동(각도 변화)에 따라 두 반사거울 사이의 거리가 조금씩 변하는데 이로인해 실제 레이저의 위치는 정사각형이 아닌 왜곡(distortion)되는 문제가 있습니다. 별로 믿음이 않가지요?


또한 레이저는 아시겠지만 유도된 빛이기 때문에 볼록렌즈와 같이 집광(focusing)이 가능한 광학장치를 사용해 에너지 밀도를 높혀 가공이 가능한 빛으로 만들수있습니다. 이 또한 렌즈를 통과하기 때문에 굴절(스넬의 법칙)등이 발생하고 결국 내가 가공하고자 하는 위치가 왜곡될수 밖에 없습니다.

정리하면, 2개의 반사거울을 사용하는 스캐너의 구조상 배게모양(pillow-shaped)의 왜곡과 렌즈를 사용하여 생기는 술통 모양(barrel-shaped)의 왜곡이 겹쳐 결국 위 그림에서 오른쪽과 같이 괴이한 왜곡이 발생하게 됩니다.

이런 왜곡을 해결(혹은 보상)해 주기 위해 결국 위치보정을 해주는기능을 제공하는데, 이 파일이 바로 load_correction_file 에 의해 설정됩니다. 물론 사용자가 2차원영역에 대한 측정을 마치고 이 파일을 생성시켜야 한답니다.

* 관심있는 분들이 있으면 덧글 달아주시기 바랍니다. 좀더 세부적인 설명을 해드리겠습니다.






댓글 15개:

  1. 안녕하세요~ RTC4 영문판을 보다 블로그보고 이부분을 이해하게 되었습니다. 혹시 RTC4 영문 pdf파일을 해석되어있는 파일이 있으신지 궁금하네요..^^;

    답글삭제
    답글
    1. 저도 실무하면서 읽어본것이 다입니다 번역본은 없구요 rtc5는 메뉴얼만 500장이 넘네요

      삭제
    2. rtc5 메뉴얼은 구할수 있을까요?

      삭제
  2. 세부적인 설명 듣고 싶습니다

    답글삭제
  3. 세부적인 내용 설명 들을수 있을까요?

    답글삭제
  4. 설명이 필요한 부분을 콕 집어주시면 감사하겠습니다

    답글삭제
  5. 제가 C#으로 스캐너 제어 프로그램을 만드는 중입니다.
    해치 좌표를 스캐너 좌표로 변환하여 가공하려고합니다.
    위에 정리해 주신 내용 순서대로 프로그램을 만들었지만
    현재 스캐너가 없어 테스트 및 확인할 방법이 없습니다.
    스캔랩에서 제공해주는 데모 C언어 내용과 거의 일치하지만
    조금더 정확한 프로그램 내용으로 개발에 도움이되려고 합니다.
    해치 좌표를 판넬에서 그려서 뽑아와 스캐너 좌표로 변환하려할때
    스캐너 좌표는 센터가 0,0이 기준인것으로 알고있습니다만
    이러한 프로그램을 정확하게 하기위해 블로그님에게 도움을 요청드립니다.

    답글삭제
    답글
    1. 우선 아래와 같이 데이타, 뷰, 컨트롤러 를 분리시켜 컨셉을 잡아나아가는것이 좋을듯 합니다.

      1. 데이타를 가지고 있는 녀석이 있어야 하고

      2. 해당 데이타를 가지고 화면에 렌더링하는 녀석
      - 예를 들어 C 기반이라면 GDI,GDI+ 같은것
      - C# 이라면 Graphics 객체
      - 대량/고속의 처리를 요한다면 GPU 가속이 되는 OpenGL, Direct2D 등

      3. 데이타를 전달받아 RTC에서 가공을 하는 녀석


      그후에 C#을 이용한 예제는 스캔랩 홈페이지에서 (http://www.scanlab.de/en/downloads/rtc-drivers) 드라이버를 받으면 예제가 있습니다. Demo3.cs 란 파일을 보시면 많은 도움이 되실것 같네요.

      삭제
  6. 좋은 정보 감사드립니다. 한가지 궁금한게 혹시 보정에 관한 팁이 있을까요??
    관련 특화 프로그램이라던지... 보정 방법이라던지...
    현재 레이저 출력 후 스캔본을 찍어서 교차점 좌표값 수정으로 보정진행중인데... 픽셀단위를 눈대중으로 찍다보니 오차가 너무 심합니다.
    정밀하게 보정할 수 있는 방법이 있는지 궁금합니다.
    답변 꼭 부탁드립니다. 감사합니다.

    답글삭제
    답글
    1. 제가 올린 글중 스캐너 보정툴 에 대한 설명과 실제 데모 프로그램을 첨부해 놓았습니다. 참고해 보시면 되구요.
      스캔본을 찍는다는게 뭔지 잘 모르겠지만, 카메라를 이용해 이미지 프로세싱을 한다면 우선 카메라의 해상도와 FOV를 High resoultion 으로 잡아서 정밀한 이미지 분석이 되게 해야 합니다. 예를 들어 10um/px 정도는 되어야 하겠지요. 그리고 해당 레이저 가공 패턴의 중심을 정교하게 찾는 머신비전 알고리즘도 개발 적용하는것이 일반적입니다. 수고하세요.

      삭제
    2. 핸드폰 카메라 같은 것으로 찍어서 해당 이미지를 분석하여 보정을 해주는 툴이 스캔랩에서 판매하는듯 합니다. CALSheet 라는 것으로 아마 라이센스가 사용회수 제한으로 되어 있는듯 합니다. 계측기가 없는 환경에서 보정을 해야 한다면 도움이 될듯 합니다. (참고 동영상 : https://youtu.be/HC8KUBTokc0)

      삭제
  7. RTC4에 scale이란 값도 있던데 정확히 무슨값인지 이해가 안가서그런데 혹시 설명좀 해주실수있나요...? RTC4 공부중인데 어렵네여 ...

    답글삭제
    답글
    1. load_correction_file 에 해당 기능이 있는데 1.0 기본값으로 사용하시기 바랍니다. scale 값은 마치 행렬의 Sx, Sy 값과 유사하게 동작합니다. 그러나 가급적이면 Kfactor 를 통해 평면의 크기를 조정하시기 바랍니다. 또한 dx, dy 값도 있는데 이 역시도 set_offset 함수를 쓰기를 추천드립니다. (듀얼 헤드 옵션이 아닐경우)

      삭제
    2. 작성자가 댓글을 삭제했습니다.

      삭제
    3. 작성자가 댓글을 삭제했습니다.

      삭제

시리우스 라이브러리 홈페이지 오픈

현재 시리우스(Sirius) 라이브러리라는 제품을 개발하고 이를 소개하는 홈페이지를 오픈 하였습니다. 관심있는 분들의 많은 방문 요청드립니다. 앞으로 업데이트 소식및 변경사항은 스파이럴랩 홈페이지를 통해 진행할 예정입니다. 스파이럴랩 홈페이지 :  h...