본문 바로가기
3D프린팅 관련 정보

E3D-v6 풀메탈 핫엔드 조립기 - 3 : firmware와의 사투

by MadeInNeverland 2015. 4. 26.
반응형

E3D-V6 풀메탈 핫엔드를 제 3D프린터인 프린터봇 메탈 플러스(printrbot metal plus)에 장착하는데 가장 어려웠던 점은 바로 firmware 수정이었습니다.


E3D-V6 공식 조립 메뉴얼 : http://wiki.e3d-online.com/wiki/E3D-v6_Assembly


위 메뉴얼을 보면 매우 간단하게 firmware를 수정한 뒤 E3D-V6 핫엔드를 사용할 수 있다고 안내하고 있습니다. 물론 firmware를 E3D-V6 핫엔드에 맞게 수정하는 것 자체는 매우 간단합니다.


source code에서 configuration.h 파일에서 #define TEMP_SENSOR_0 1에서 #define TEMP_SENSOR_0 5로만 고치면 되니까요.


#define TEMP_SENSOR_0 1에서 맨 끝의 1은 100k thermistor를 뜻하며 이는 Ubis hotend에 쓰인 서미스터입니다. E3D-V6 핫엔드의 서미스터(thermister)는 Semitec 100kOhm NTC Thermistor(104GT-2)로, 이를 제대로 사용하기 위해서는 #define TEMP_SENSOR_0 5로 바꿔야 합니다. 여기서 맨 끝의 5는 100K thermistor(ATC Semitec 104GT-2)를 뜻합니다.


하지만, 정말 뜻밖의 요소에서 장애물을 만났습니다. 프린터봇 메탈 플러스의 소스코드를 구할 수가 없었던 것이지요;;


프린터봇 Support에 메일을 보내서 물어봤더니 다음의 링크에 있는 소스코드를 사용하라고 하더군요.


Printrbot Rev F4 source code : https://github.com/Printrbot/Marlin/releases/tag/RevF-Version-1


이 소스코드는 프린터봇의 3D 프린터에는 모두 적용할 수 있는 범용 소스코드였습니다. 하지만, 이를 이용하여 펌웨어 업데이트를 하니, 프린터봇 메탈 플러스의 프린팅 헤드가 프린팅 베드의 범위를 넘어서 나가버리는 에러가 발생하더군요;; 아무리 소스코드를 고쳐봐도 해결되지가 않아서 다시 프린터봇 support에 메일을 보냈습니다. 프린터봇 메탈 플러스 전용 소스코드를 보내달라고 말이죠.


하지만.. 공식 답변은 부정적이었습니다.


Printrbot : Please let me be clear. This is the source code. You are free to experiment with it as other users do. But we do not provide support for it as you are asking. It is in the open source domain for people to experiment with. The forums you list are the places to get information from on using the open source code. You might try emailing the people on the github system who posted the source files and circuit schematics for printrbot related submittals.


그래서.. 방법은 하나뿐이었습니다. 제가 직접 만드는 것이었지요ㅠ_ㅠ 참고로 저는 프로그래밍에 대해서는 거의 문외한입니다. 대학 때 자바를 배운 적이 있으나 그것도 전혀 이해를 하지 못해 완전 삽질했지요. 최근 들어 파이썬이라는 언어를 공부를 해보고싶다는 생각만 했지, 전혀 프로그래밍에 대해서는 모르는 사람입니다.


그런 제가.. 얼마나 삽질했을지는 말씀드리지 않아도 느낌이 오시지요?ㅠ


일단 위의 소스코드 링크를 뒤지다보니 다음의 링크를 찾을 수 있었습니다.


https://github.com/MarlinFirmware/Marlin/issues/732
https://github.com/Printrbot/Marlin/issues/6


Printrbot Rev F4 source code를 이용했을 때 de-centering되는 문제에 대해 토론한 게시물이었지요. 이를 이용하여 제 나름대로 수많은 실험과 삽질을 한 결과, 지금은 어느정도 출력이 가능한 소스코드를 보유하게 되었습니다. 그 과정 및 E3D-V6 핫엔드 셋업에 대해서 알려드리겠습니다.


최종적인 firmware만을 원하시는 분들은 맨 아래에서 다운받으시면 되겠습니다.

(If you want final result of firmware and source code for printrbot metal plus, you can download it at bottom of this posting)


일단 Printrbot에 맞추어서 소스코드를 수정할 수 있는 pre-configured Arduino를 다음 링크에서 다운받습니다.


pre-configured Arduino build environment that contains the compilers for the AT90USB1286 chip : http://www.reprap-usa.com/download/arduino0022.zip



그다음 메뉴 [tools]의 Board 선택에서 '[BootloaderCDC]Teensylu/printrboard'를 선택합니다.

 


그 다음 이 아두이노로 Printrbot Rev F4 source code에서 Marlin.pde를 오픈합니다.



그럼 위와 같은 화면이 뜨는데, 여러 탭에서 configuration.h를 선택하고 다음 항목들을 바꾸어줍니다. 아래 수정내용은 프린터봇 메탈 플러스에 맞춘 것입니다.


줄(line) 수는 대략적인 것이므로 참고만 하시기 바랍니다.


1. 125 line


#define TEMP_SENSOR_0 1 → #define TEMP_SENSOR_0 5


2. 311~316 lines


#define X_MAX_POS_DEFAULT 205
#define X_MIN_POS_DEFAULT 0
#define Y_MAX_POS_DEFAULT 205
#define Y_MIN_POS_DEFAULT 0
#define Z_MAX_POS_DEFAULT 200
#define Z_MIN_POS_DEFAULT 0

     ↓

#define X_MAX_POS_DEFAULT 254
#define X_MIN_POS_DEFAULT 0
#define Y_MAX_POS_DEFAULT 254
#define Y_MIN_POS_DEFAULT 0
#define Z_MAX_POS_DEFAULT 254
#define Z_MIN_POS_DEFAULT 0


3. 318~320 lines


#define X_MAX_LENGTH (base_max_pos[0] - base_min_pos[0])
#define Y_MAX_LENGTH (base_max_pos[1] - base_min_pos[1])
#define Z_MAX_LENGTH (base_max_pos[2] - base_min_pos[2])

     ↓

#define X_MAX_LENGTH (254)
#define Y_MAX_LENGTH (254)
#define Z_MAX_LENGTH (254)


4. 328~336 lines

  #define LEFT_PROBE_BED_POSITION 10
  #define RIGHT_PROBE_BED_POSITION X_MAX_LENGTH-10
  #define BACK_PROBE_BED_POSITION Y_MAX_LENGTH-10
  #define FRONT_PROBE_BED_POSITION 10

  // these are the offsets to the prob relative to the extruder tip (Hotend - Probe)
  #define X_PROBE_OFFSET_FROM_EXTRUDER_DEFAULT 5
  #define Y_PROBE_OFFSET_FROM_EXTRUDER_DEFAULT 0
  #define Z_PROBE_OFFSET_FROM_EXTRUDER_DEFAULT -4

     ↓

  #define LEFT_PROBE_BED_POSITION 10
  #define RIGHT_PROBE_BED_POSITION 215
  #define BACK_PROBE_BED_POSITION 215
  #define FRONT_PROBE_BED_POSITION 10

  // these are the offsets to the prob relative to the extruder tip (Hotend - Probe)
  #define X_PROBE_OFFSET_FROM_EXTRUDER_DEFAULT 20
  #define Y_PROBE_OFFSET_FROM_EXTRUDER_DEFAULT 0
  #define Z_PROBE_OFFSET_FROM_EXTRUDER_DEFAULT -4


5. 399 lines


check #define DEFAULT_AXIS_STEPS_PER_UNIT   {80,80,2020,96}

80, 80, 2020, 96이 맞는지 확인합니다.


이렇게 소스코드를 고친 뒤 아두이노의 왼쪽 상단에 있는 Verify 버튼(재생버튼 같이 생긴 것)을 눌러 컴파일합니다. 이때 아래 화면과 같이 아래쪽에 컴파일되는 과정이 떠야하는데, 안뜨는 경우에는 shift키를 누르고 verify 버튼을 클릭하면 output 과정을 상세히 볼 수 있습니다.



여기서 우측 하단 부위가 중요합니다.



여기보시면 소스코드를 컴파일했을 때 생성되는 hex 파일의 위치가 적혀있습니다. 이 위치를 윈도우창에 복사해서 붙여넣으면 이 hex 파일을 얻을 수 있습니다.


제가 수정한 프린터봇 메탈 플러스의 소스코드 압축파일과 hex파일입니다.


Printrbot metal plus source code for E3D-v6 hotend :

Marlin-RevF-Version-1_for_metal_plus_and_E3D-v6_hotend_edited_by_madeinneverland.zip


Printrbot metal plus firmware(hex file) for E3D-v6 hotend :


hex_metal_plus_and_E3D-v6_hotend_edited_by_madeinneverland.zip


그 다음은 http://help.printrbot.com/Guide/How+to+Reflash+Firmware/78의 Firmware의 Reflash 과정대로 진행하시면 됩니다.


제 프린터보드(printrboard) Rev F4 버전으로 간략하게 과정을 설명드리면..


먼저 프린터봇의 전원을 끈 뒤,



위 사진의 중앙부분에 보이는 Boot 단자를 jumper를 이용하여 연결시켜줍니다.



위 사진처럼 말이죠. 


그다음에는 printrboard에 펌웨어를 넣을 때 사용하기 위해 아래 링크에서 FLIP 3.4.7 for Windows (Java Runtime Environement included)를 다운 받습니다.


http://www.atmel.com/tools/flip.aspx



그 다음, 프린터봇 메탈 플러스의 전원을 켜고 위 사진에서 보이는 reset 버튼을 한번 누릅니다. 그러면 컴퓨터가 프린터봇 메탈 플러스를 새 하드웨어로 인식하게 됩니다.



위 화면처럼 AT90USB128로서 인식하게 되는데, 여기서 오른쪽 버튼을 눌러서 '드라이버 소프트웨어 업데이트'를 선택하고 아래 화면처럼 하드웨어 드라이버를 실행하기 위해 Program files/Atmel/FLIP 3.4.7 폴더를 선택합니다.




드라이버가 셋업되면 위와 같은 화면을 볼 수 있습니다. 이 과정은 firmware를 reflash할 때마다 하는 것이 아닌, 맨 처음 1번만 진행하면 됩니다.


그 다음 앞에서 설치하였던 Flip 3.4.7 프로그램을 실행하면 아래와 같은 화면을 볼 수 있습니다.



여기서 좌측 상단의 프로세서 모양의 버튼을 클릭하면 device selection 메뉴가 나오고 여기서 AT90USB1286를 선택합니다.



그 다음 USB 모양의 버튼을 누르고 USB를 선택한 후 open하면, 제대로 연결이 되었을 때 아래와 같은 화면으로 넘어갈 수 있습니다.



이 화면에서..



우측 상단 부위의 Load HEX file 버튼을 누르고 hex 파일을 선택합니다. 이때 주의해야할 점은, hex 파일이 들어있는 폴더 및 경로에 한글이 있으면 안된다는 것입니다. 위 화면에는 hex 파일이 한글을 포함한 이름을 가진 폴더에 저장되어있는데, 이러면 hex 파일이 로드가 안되더라구요.



hex 파일을 로드한 후 좌측에 erase, blank check, program, verify의 체크박스에 모두 체크한 뒤 아래의 Run 버튼을 클릭하면 여러가지 상태바들이 뜨면서 작업이 진행되게 되고..



좌측 아래에 Verify PASS가 뜨면서 위 버튼 색깔이 녹색으로 바뀌게되면 펌웨어의 reflash 작업이 완료된 것입니다.


그 다음 printrboard의 reset 버튼을 다시 누르고 프린터봇 메탈 플러스의 전원을 끈 후 아까 Boot 핀에 꽂았었던 jumper를 제거한 후 다시 프린터봇 메탈 플러스의 전원을 켜면 모든 작업이 끝납니다. 


여기까지 하면 E3D-V6 풀메탈 핫엔드가 소프트웨어적으로도 준비가 된 것입니다. 이제 그다음은 PID tuning과정입니다.


큐라를 열고 M303 S200 명령어를 입력하면 autotune 과정이 작동합니다. 여기서 M303 명령어는 PID relay autotune S sets the target temperature, 즉 PID autotune을 시행하라는 명령어이고 S200은 200도에서 시행하라는 명령어입니다.



PID autotune 작업이 끝나면 맨 아래쪽에 3개의 인자값이 나오는데, 이것들이 autotune된 PID 파라메터들의 값입니다. 이 값을 M301 P50.46 I5.46 D116.57로서 입력한 후(이 값은 각각의 경우마다 다름), M500으로 저장하면 autotone 과정이 완료됩니다.


그 다음 노즐에서 용융된 필라멘트가 새는 것을 방지하기 위해, 285도까지 히트블럭의 온도를 올린 후 노즐을 추가로 조여줍니다.

(When the HotEnd is at tempereature, tighten the nozzle whilst holding the heater block with a spanner. This will tighten the nozzle against the HeatBreak and ensure that your HotEnd does not leak. You want to aim for 3Nm of torque on the hot nozzle - this is about as much pressure as you can apply with one finger on a small spanner. The nozzle does not need to be torqued down incredibly tightly to form a good seal, when at lower tempreatures the aluminium will contract and hold the Nozzle and HeatBreak together.)


저는 대략 260도 정도까지 올려준 후 노즐을 조여주었습니다.


추가적으로 E3D-V6 핫엔드 공식 조립 메뉴얼에 따르면 다음과 같은 사항을 따르는 것이 권고되고 있습니다.


1. Filament must be within acceptable diameter tolerance. For 1.75mm this means 1.70mm - 1.80mm and for 3.00mm/2.85mm the filament must be between 2.80mm and 3.05mm
: 사용하는 필라멘트는 받아들일 수 있는 지름 공차를 가지고 있어야 합니다. 즉, 직경 1.75mm은 1.70mm에서부터 1.80mm까지, 그리고 직경 3.00/2.85mm는 2.80mm에서부터 3.05mm까지입니다.

2. Excessively long retractions will cause issues by dragging soft filament into cold areas. E3D-v6 hotends need less retraction than most hotends. For direct extrusion systems you should use anywhere from 0.5mm-1.0mm, for bowden systems you might want to go up to 2mm. Retraction beyond 2mm is likely to cause issues.
: E3D-V6 핫엔드에서 불필요하게 retraction을 길게 설정하면 노즐이 막히기 쉽습니다. 즉, direct extrusion 시스템인 경우에는 retraction을 0.5mm에서 1.0mm로, 보우덴 시스템인 경우에는 2mm 정도로 설정하는 것이 좋습니다.

3. The heatsink must be cooled! Heated chambers, fan ducts that restrict flow, and not having the fan running at 100% at all times are common causes of issues. The heatsink should be cool to the touch at all times. If your heatsink is warm to the touch then you have a cooling issue that must be addressed.
: 히트싱크는 계속 쿨링되어야 합니다.


자, 이제 모든 과정이 완료되었습니다.



이번 펌웨어 수정에서 가장 문제가 되었던 것이 de-centering 되었던 것과 X축으로의 이동 수치가 잘 맞지 않는다는 것이었기 때문에 추가로 확인을 해 보았습니다. 위 사진은 X축으로 homing한 사진입니다.



위 사진은 G1 X0, 즉, X축 방향 0mm로 프린팅 헤드를 이동하라는 명령어를 입력한 뒤의 사진입니다. 프린팅 베드 좌측 끝부분에서 대략 6.5mm 지점에 노즐이 놓이는 것을 확인할 수 있습니다.



위 사진은 G1 X230, 즉 X축 방향 230mm로 프린팅 헤드를 이동하라는 명령어를 입력한 뒤의 사진입니다. 프린팅 베드 우측 끝에서 대략 23.5mm 지점에 노즐이 놓이는 것을 확인할 수 있습니다.



프린팅 베드의 전체 X축으로의 길이는 약 260mm입니다. 


이를 토대로 계산하면 X0 지점이 X축 방향 6.5mm이고, X230 지점이 X축 방향 (260 - 23.5 = 236.5mm)이므로 X230 지점이 230mm임을 알 수 있습니다. 즉, 수치가 잘 맞군요!


즉, E3D-V6 풀메탈 핫엔드를 프린터봇 메탈 플러스에 성공적으로 장착했을 뿐만 아니라 펌웨어도 나름 잘 적용되고 있습니다.


물론, 완벽한 펌웨어가 아니기 때문에 문제의 소지가 발생할 가능성은 있습니다. 제가 수정한 소스코드와 펌웨어를 사용하시다가 문제를 발견하신 분들이나 더 좋게 개선하신 분들은 댓글로 알려주시면 정말 감사하겠습니다.


이제는 E3D-V6 핫엔드를 이용하여 열심히 출력할 일만 남았습니다. 물론 쿨링팬을 좀 더 손봐야할 것 같긴 하지만, 일단은 완성했다는 것만으로도 나름 뿌듯합니다ㅎ


이제까지 메이드인네버랜드였습니다~!



반응형