레이져 제어를 위한 마를린 펌웨어 변경

Posted by jhlee98y
2015. 6. 24. 12:04 Arduino

레이져 제어를 위한 Marlin firmware 변경 


  

이번 포스트에서는 레이져 제어를 위한 Marlin 펌웨어 변경사항에 대한 내용입니다. 

본격적인 펌웨어 변경 사항을 말씀드리기 전에 변경이 적용되는 7개 파일들에 대해서 

간략히 말씀드리도록 하겠습니다. 


1) configurations.h 

  - 잘 아시는 파일이라 생각됩니다. 여기에 레이져 제어를 위한 #define 문을 추가합니다. 

2) marlin_main.h

  - 이 헤더에는 레이져 제어에 사용되는 변수들의 extern 선언을 포함합니다. 

3) marlin_main.cpp 

  - 마를린 펌웨어의 핵심인 main cpp파일입니다. 이 파일에는 레이져 제어에 사용되는 

변수들의 초기화와 함께 레이져를 제어하기 위한 새로운 M-code를 추가합니다. 

추가되는 M-code에 대해서는 앞의 블로그를 참고해 주시기 바랍니다. 

4)  planner.h

 - 이 헤더에서 레이져 제어에 사용되는 변수들을 선언합니다. 

5) planner.cpp 

  - 모션 제어의 가장 핵심 code파일로 여기서 각축의 동작과 함께 레이져의 출력을

제어하는 code가 추가됩니다. 

6) pins.h

  - 이 파일은 레이져 제어에 사용되는 아두이노 메가 2560의 CPU pin을 할당합니다. 

7) ultralcd.cpp

  - LCD 메뉴에 레이져 제어를 위한 항목을 추가했습니다. 


1. configurations.h 

- 우선 레이져 제어를 사용할 때와 하지 않을때의 구분하기 위해서 마를린 개발자들이 

권장하듯이 #define으로 컴파일을 제어하도록 적용했습니다. 


잘 아시듯이 LASER_CTRL 에 대한 // 를 삭제하면 레이져 제어가 적용됩니다. 


2. marlin_main.h 

- 먼저 레이져 제어 즉, On/Off 제어 및 레이져의 강도를 조절하는 PWM 제어를 

위한 변수에 대한 extern 선언입니다.  실제 변수 선언은 "planner.h"파일에 있습니다. 

참고로,

. laser_ttl_modulation" : 레이져의 PWM 출력제어를 위한 변수이며

. laser_drv_pwr" : 레이져 on/off 용도 입니다.  


- 상기 내용의 추가는 파일의 어디에든 무관합니다. 


3. marlin_main.cpp 

- 이 main 파일에서는 초기화 루틴에 변수 초기화를 포함시키는 것과 g-code 파싱

 함수에 사용할  M-code를 추가하는 것이 주된 사항입니다. 


먼저 변수 초기화를 위해 파일 초기 부분과 "setup()"에 아래와 같이 추가해

주었습니다. 



- 위의 Setp 함수에서는 초기 구동시 레이져 출력을 OFF하고  있으며, 

output 변수들은 아래 설명할 pins.h에서 포함되어 있습니다. 


- 이제 레이져 제어를 위한 새로운 M-code를  G-code를 분석하는 function인 

process_commands()함수에  추가하도록 합니다. 

먼저, "G1" 명령 끝부분에 아래 내용을 추가합니다. 

이제  새로운 명령어 M160, M161, M162 를 추가하기 위해 아래와 같이 case문을 

이용해 아래 내용을 추가했습니다.

내용 위치는 나중에 찾기 편하게 하기 위해서 "case 200" 즉 M200 명령 앞에 추가했습니다.  


4. planner.h 

- 앞서 설명한 것처럼 레이져 제어를 위한 변수를 선언하는 부분입니다. 

이 변수들은 일반적인 변수선언과는 달리 아래 보시는 것처럼 

"block_t" 구조체 변수의 일부로 포함되어야 합니다. 



5. planner.cpp 

- 이제 변수 선언이 되었으니 이를 이용해 출력을 제어하기 위한 code를 

추가하면 됩니다.  이 내용은 본 변경중에  가장 복잡한 부분중의 하나입니다. 

이 파일에서 변경에 적용되는 함수는  

. check_axes_activity()

. plan_buffer_line()

이와 같이 2개입니다. 이에 대한 변경 사항으로 설명하도록 하겠습니다.


먼저, check_axes_activity() 함수의 변경 내용입니다. 

아래의 #define LASER_CTRL 부분을 보시고 내용 삽입 위치에 주의해서 삽입해 

주시면 됩니다. 



다음은 plan_buffer_line() 함수의 변경 내역입니다. 함수의 내용이 상당히 길기 때문에 

변경 내역을 2개 그림으로 분리되어 있습니다. 내용 참고하셔서 변경해 주시면 됩니다.



아래 내용도 plan_buffer_line() 함수내 변경 내역입니다. 



이제 마지막으로 아두이노 CPU의 핀 할당을 위한 변경과 LCD 메뉴의 변경이 남았습니다.

 

6. pins.h 

- 이 파일에서는 RAMPS 1.4의 AUX2 출력을 사용하기 위한 아두이노 CPU의 핀 할당을 

위한 변경입니다. 

내용에서 보시는 것처럼 아두이노 메가의 디지탈 출력 #42번과 #44를 사용하도록 할당합니다.


7. ultralcd.cpp 

- 마지막으로 LCD메뉴에 사용자가 임의로 레이져 출력을 제어할 수 있도록 메뉴를 추가했습니다.  



이것으로 마를린 펌웨어에 대한 레이져 적용을 위한 변경 사항 설명을 마치도록 하겠습니다. 

그리고 펌웨어 Download를 원하시면 아래 사아트에서 down받으실 수 있습니다. 


https://github.com/jhlee98y/Marlin_Laser


감사합니다.

'Arduino' 카테고리의 다른 글

Image2Gcode Software  (0) 2015.06.24
마를린 펌웨어로 레이져 제어  (4) 2015.06.15
아두이노 IDE CPU Pin 할당  (0) 2015.06.08

Image2Gcode Software

Posted by jhlee98y
2015. 6. 24. 10:20 Arduino

Image2Gcode Software


이번 포스트에서는 레이져를 적용하여 그림을 조각하고자 하는 방법 중의 첫번째 

단계인 원하는 그림을 적절한 형식의 G-code로 변경해 주기 위한 프로그램에 

대해서 말씀드리겠습니다.


이 프로그램은 마치 3D 프린터를 사용하고자 할 경우에 slic3r 이나 kslicer를 

사용하여  STL 모델을 슬라이싱하고 G-code를 만드는 과정과 유사한 

단계입니다. 


하기에서 말씀드리는 프로그램은 이전 포스트에서도 말씀드린바와 같이 

Scorch의 "dmap2gcode" 프로그램을 기본으로 Marlin firmware에 맞도록 

수정한 사항입니다.

http://www.scorchworks.com/Dmap2gcode/dmap2gcode.html  )


수정 이유는 원래 프로그램은 CNC 2D 조각용 G-code생성을 위한 

프로그램이며  Linux CNC 등의 CNC 제어기에 적합한 G-code를 생성하기 
때문에 Marlin firmware에 적절한 G-code로 생성해야하기 때문입니다. 


1> Image2Gcode 프로그램

- 이 프로그램은 JPG 또는  PNG 파일 형식의 이미지 파일을 읽어  

G-code를 생성합니다. 참고로 이 프로그램은 Python을 이용하여 

개발되었습니다. 



상기 그림은 이 Image2Gcode 프로그램의 전체적인 모양입니다.

왼쪽 상단에는 읽어들인 이미지(target image) 파일의 정보를 표시합니다.  

상단의 setting 메뉴에서 출력하고자 원하는 크기와 DPI(출력 해상도)를 

조절할 수 있습니다 . 또한 조각하는 속도(feedrare) 및 레이져 강도 및 

threshold를 설정할 수 있도록 했습니다. 

 


- G-code 변환은 흑백 이미지로 변환되며  변환된 이미지는 PNG 파일

형식의 동일이름으로 저장되고 메일 화면에 이의 결과를 보여줍니다. 

 



2> 레이져 제어용 G-code 

- 아래 그림은 생성된 G-code 파일의 일부입니다.  이 그림상에서 볼 수 있듯이 

레이져 제어를 위해 추가된 m-code를 볼 수 있습니다. 아래는 레이져 제어를 위해

추가된 M-code 내역입니다. 


  > M161 - Laser Power On
  > M162 - Laser Power Off
  > M160 Sxxx - 레이져 강도 조절 
      
( Sxxx is PWM duty for Laser control board's TTL modulation signal
                       "xxx" has 0 ~ 255 value, 0 means power off and 255 means max 

- 여기서 Sxxx는 레이져 강도 제어를 위한 PWM 듀티를 의미하며, 0~255의 값을 가집니다.  

"255"의 경우 최대 강도를 의미합니다 .





- 이 Image2Gcode 프로그램에 관심이 있으시거나 사용하기를 원하시면

아래 사이트에서 down 받으실 수 있습니다. 


https://github.com/jhlee98y/Image2Gcode


- 다음 포스트에서는  레이져 적용을 위한 Marlin firmware 수정 사항에 대해서 포스트하도록

하겠습니다.  

'Arduino' 카테고리의 다른 글

레이져 제어를 위한 마를린 펌웨어 변경  (1) 2015.06.24
마를린 펌웨어로 레이져 제어  (4) 2015.06.15
아두이노 IDE CPU Pin 할당  (0) 2015.06.08

마를린 펌웨어로 레이져 제어

Posted by jhlee98y
2015. 6. 15. 11:03 Arduino

마를린 펌웨어(Marlin Firmware)에 레이저 제어 적용하기


3D 프린터에 플라스틱 익스루더외에 레이져를 적용하여 그림을 조각하고자 하시는 분들이 많이 계십니다. 

이에 대해서 제가  구현한 내용을 정리해 올립니다.


우선 해야할 내용에 대해서 알아야 하기에 아래처럼 전체적인 큰 그림을 구성해 봤습니다. 

각 단계별로 간략히 설명한 이후에 다음번에 좀 더 자세히 설명드리도록 하겠습니다.  



전체적인 구성은 2단계입니다. 

먼저, 그림(칼라이미지 또는 흑백 이미지)을  마를린 펌웨어가 이해할 수 있도록 G-gode로 변환하기 

위한 단계가 있습니다. 이는 3D프린터에서 모델링을하고 이를 슬라이서를 이용해 G-code를 생성하는

것과 같은 단계입니다. 


이를 위해서는 3D 프린터의 slic3r이나 키슬라이서와 같은 이미지를 G-code로 변환하기 위한 

프로그램이 필요하며 구성한 Image2Gcode 프로그램은  Scorch Work의 "dmap2gcode" 

프로그램을 마를린 펌웨어에 맞도록 일부 수정해서 간략히 구성했습니다. 

Scorch Work의 관련 사이트는 아래와 같습니다.  

http://www.scorchworks.com/Dmap2gcode/dmap2gcode.html 


아래는 간략히 구성한 Image2Gcode 프로그램으로 가장 핵심은 마를린 펌웨어에 적합하도록 

즉, 3D 프린터에서 사용하는 형식으로 G-code를 생성하는 부분입니다. 

이 프로그램에 대한 좀 더 자세한 사항이 미리 알고싶으시면 이전에 정리해 놓은  아래의 

영문 사이트 설명을 먼저 봐주시면 도움이 될 수 있습니다.


 http://dreammakercnc.blogspot.kr/2014/08/currently-my-micro-cnc-uses-arduino.html 




두번째는 마를린 펌웨어가 레이져를 적절히 제어할 수 있도록 펌웨어의 일부를 수정하는 것과 

하드웨어적인 구성이 있습니다. 

펌웨어의 수정은 기존 마를린 펌웨어에 레이져 제어 즉, 레이져의 On/Off와 레이져 제어의 

강도를 제어하기 위한 PWM 신호를 생성하는 것을 의미합니다. 


하드웨어 적으로는 RAMPS 1.4 AUX2 단자의 를 이용해 레이져 제어 보드를 제어하는 것을 

의미합니다.  여기서는 AUX2의 D42를 On/Off 용으로 D44를 PWM 제어용도로 사용했습니다. 




RAMPS1.4와 레이져 제어 보드의 연결에 대해서 먼저 알아 보고자 하시는 분은 아래 영문 페이지를 

보시면 좀 더 빠른 정보를 보실 수 있습니다. 

http://dreammakercnc.blogspot.kr/2014/09/control-wiring-connection-for-laser.html


전체적인 사항은 이와 같습니다만 이를 보시고 구현하시기는 힘들거라 생각됩니다. 

실제적인 구현을 위한 좀 더 구체적인 사항은 다음 포스트에서 설명드리도록 하겠습니다.

(이전 영문 정리사항은 국문으로 올리도록 히겠습니다.)


감사합니다.

   


'Arduino' 카테고리의 다른 글

레이져 제어를 위한 마를린 펌웨어 변경  (1) 2015.06.24
Image2Gcode Software  (0) 2015.06.24
아두이노 IDE CPU Pin 할당  (0) 2015.06.08