elsa in mac

Marlin Bugfix 2.0.x - 2018년 10월 주요 변경 사항 요약 본문

3D 프린터/3D 프린터 관련 정보

Marlin Bugfix 2.0.x - 2018년 10월 주요 변경 사항 요약

elsa in mac 2018. 10. 27. 09:58

marlin 아이콘

어느덧, 나뭇잎이 노랗게 빨갛게 물들어가면서 가을이 깊어가고 있네요.. ^^ 

이번 포스트는 지난 10월 1달 동안 Marlin Firmware의 주요 변경사항에 대한 요약 내용 입니다.


- Controller Display에 한국어 지원 추가.
   - marlin/src/lcd/language.h
gouache님이 수고를 해 주셨구여, 다행히 Marlin Team에서 Aceept를 했습니다. 네이버의 나눔고딕 폰트를 사용하는 것으로 했는데요, 자세한 내용은 이 곳을 참조하시기 바랍니다.  소소한 것일지도 모르겠지만, 굉장히 중요한 첫 걸음일 수도 있다는 점에서 박수를 보내 드립니다. 

- TMC Library 변경
   - TMCStepper library
기존에 TMC 계열 Driver를 사용하려면, TMC2130Stepper Library를 사용해야 했었는데요, TMC Chip의 인기가 나날히 높아져 가고, Controller Manufacture들이 다양한 TMC 계열 드라이버를 많이 사용하면서 기존의 TMC2130Stepper, TMC2208Stepper Library 대신 통합된 TMCStepper Library 계발로 확장하고 있습니다. 따라서, 10월 이후의 Marlin-Bugfix 2.x.x를 사용하면서, TMC Driver를 사용하려면, TMCStepper Library를  추가해야 합니다. 아래 스샷과 같이 arduino의 Sketch > Include Library >Manage Libraries..에서 TMCStepper를 검색하고 Install 해 주면 됩니다. 

Arduino 업데이트 창 이미지

USB Stick 인터페이스 지원
   - Configuration_adv.h
   - #define USB_FLASH_DRIVE_SUPPORT
기존의 SD카드 인터페이스에 추가적으로 USB Stick을 저장장치로 사용할 수 있는 인터페이스를 새롭게 지원하게 되었습니다.  Arduino USB Shield나 MAX3421E Breakout board를 Controller에 연결할 경우, SD Card 대신에 USB Stick을 사용할 수 있습니다. 

SDisplay 창에 총 4개의 Hotend를 표시할 수 있도록 Status 창 그래픽 배치 업데이트
   - 128x64 full graphic display(dogm)에만 적용
기존 3개에서 4개까지 표시할 수 있도록 graphic display 디자인 변경

Extensible User Interface API 지원
   - Configuration_adv.h
   - #define EXTENSIBLE_UI
marlin이 제공하는 몇 가지 제한적인 범주의 UI 대신, Vendor에서 자체적으로 구현한 UI요소를 Marlin에 추가할 수 있는 User Interface API를 지원합니다. EXTENSIBLE_UI 옵션을 활성화 하고, vendor가 구현한 source code를 src/lcd/extensible_ui/lib 밑에 추가하면 됩니다. src/lcd/extensible_ui/lib/example.cpp 참조. 

- RGB LED/ NEOPIXEL LED 등 사용 시, Printer 상태 변경에 따른 LED 색상 변경 기능 추가
   - Configuration.h
   - #define PRINTER_EVENT_LEDS
hotend/bed/의 온도가 사용자가 지정한 온도로 상승함에 따라, blue에서 violet 색상으로 점진적을 변경. 
hotend의 온도가 사용자가 지정한 온도를 초과할 경우 RED로 변경.
Printing이 시작되면 WHITE 색상으로 변경.
출력이 완료되면, GREEN으로 변경.
출력이 완료된 후, 사용자가 Controller의 DIal Button을 Push(누름)하면 LED가 꺼짐

SD카드를 이용한 Firmware Update 기능 추가
   - Configuration_adv.h
   - #define SD_FIRMWARE_UPDATE
SD카드에 Arduino에서 빌드한 hex Firmware 파일을 SD Card에 넣고 재 부팅을 하면, 자동으로 Firmware를 업데이트 시키는 기능이 새롭게 추가되었습니다. 평상 시에는 별 효용성이 없을 수도 있겠지만, USB Cable이 없거나 고장난 경우... 업데이트가 필요한 경우에는 유용할 수 있을 것 같구요.. Marlin을 적용한 Vendor들이 Source File 대신에, Pre-Build한 Firmware를 배포할 때 좋을 것 같습니다.  단 이 기능은 Arduino ATMEGA 2560 CPU를 사용하는 Controller로 제한 되며, 반드시 SD Card의 Root에 firmware.bin 이라는 이름으로 저장을 해야 합니다. 

firmware.bin 파일을 만드는 방법은 다음 포스트에서 자세히 알아보도록 하겠습니다. 

Booting Custom screen에 animation 도입 
   - 
Marlin/src/config/examples/AnimationExample/_Bootscreen.h 참조

Configuration.h의 #define SHOW_CUSTOM_BOOTSCREEN 옵션을 활성화 시키고, Marlin/_Bootscreen.h가 Multipage bootscreen array code를 내장하고 있으면, page by page로 animation을 수행합니다.  당연히, 사용하는 DIsplay가 Full Graphic을 지원해야만, Custom BootScreen을 지원할 수 있습니다.  

- PRUSA MK2/MK3 스타일 상태표시 선택 옵션 추가
   - Configuration.h
   - #define LCD_INFO_SCREEN_STYPE
REPRAP 2004 DISCOUNT SMART Controller 사용 시, 해당 옵션을 0(Default)으로 설정하면 기존 Classic Marlin 상태창으로, 1로 설정하면, PRUSA MK2/MK3 Style로 상태 표시를 하게 됩니다. 

- PREHEAT Label 옴션 추가
   - Configuration.h
   - #define PREHEAT_1_LABEL / PREHEAT_2_LABEL
Preheat 관련 옵션에 Controller Display에 표시될 Label을 사용자가 Custom 할 수 있도록 옵션이 추가되었습니다. 자신이 주로 사용하는 FIlament의 종류에 따라 Labeling을 할 수 있게 되어, UI 직관성이 높아 졌습니다. 

- Custom Microstepping 옵션 추가
   - Configuration_adv.h
   - #define MICROSTEP1 / MICROSTEP2 / MICROSTEP4 / MICROSTEP8 / MICROSTEP16
일반적인 polulu stpper driver 보드를 Controller 보드에 장착하고, Jumper를 이용하여 MS(Microstep)1 ~ MS3 핀으로 해당 Axis의 Microstep을 설정하는 것이 일반적 이죠. 기존 Marlin의 경우 Configuration_adv.h에 #define MICROSTEP_MODES 옵션을 지원하고 있었는데, 이는 언급한 일반적인 polulu 보드를 사용하는 경우가 아닌, Board에 Stepper Driver Chip이 자체적으로 실장(납땜)되어 있고, Microstep 모드를 MCU로 설정할 수 있는 보드들을 위한 설정 옵션 입니다.  하지만, 보드에 실장된 Stepper Driver Chip에 따라 Microstep을 설정하기 위한 조건이 틀릴 수 있기 때문에, 이를 일반화하기 위한 옵션이 추가 된 것입니다. 사용자는 자신의 보드에 맞게 각 Step의 상태를 새롭게 추가된 옵션을 이용하여 정의할 수 있습니다. 

 - Wilson II Rack & Pinion 스타일의 Z Probing 지원
   - Configuration.h
   - #define RACK_AND_PINION_PROBE
Wilson II RepRap 3D printer에서 제안된 Rack and Pinion 기법을 이용한 Z Probing Sensor를 지원하기 위한 motion 옵션이 새롭게 추가되었습니다. 일반적으로 Z Probing을 위해서는 BLTouch, Piezo, Capacitive, Inductive Sensor등을 이용하고 있는데, 일반 Endstop Switch를 사용하기도 하죠. Endstop Switch를 사용할 경우 Probing 시점에 Endstop Switch을 아래로 내리고, Printing 시점에는 다시 올리고 해야 합니다. 기존의 많은 User들은 이를 위해 Micro servo Motor를 사용하죠.. Wilson II의 경우에는 Servo를 사용하지 않고, Rack & Pinion 설계 방식을 도입하여 이를 구현하고 있습니다. (대단히 멋진 아이디어~!) Rack & Pinion 방식에서 Endstop Switch를 올리고, 내릴려면 Rack을 특정 방향으로 밀어 주어야 하는데, 이를 위해 X축으로 움직여야 하는 이동 거리를 설정할 수 있도록 이번에 옵션이 추가 되었습니다. 아래의 영상은 Wilson II 의 Rack & Pision Z Probing 방식의 동작 예 입니다. 


- G29 Code에 H 옵션 추가
Marlin이 제공하는 Auto Bed Leveling 중 Linear 모드와 Bilinear 모드에서 G29 Gcode에 H 옵션이 새롭게 추가되었습니다. 기존까지는 G29 Code로 Leveling Bed 영역을 설정할 때, L(왼쪽), R(오른쪽), F(앞쪽), B(뒷쪽)을 정의했는데, H 옵션이 추가되어 보다 간단하게 영역을 정의할 수 있게 되었습니다.  
예를들어, Bed Size가 200x200mm 일 경우, G29 L50 R150 F50 B150 으로 명령을 내리면, 가장자리 50mm영역을 제외한 100x100 영역을 대상으로 Leveling을 하게 됩니다.  하지만. H 옵션을 사용하면 보다 간단히 위와 동일한 명령을 수행할 수 있습니다. H 옵션은 Bed의 Center를 중심으로 4방향으로 Xmm 만큼을 영역으로 정의할 수 있는 것으로 G29 H100 명령을 내리면, Center를 중심으로 좌/우로 50, 앞/뒤로 50 영역 즉, 위와 동일하게 100x100 영역을 대상으로 Leveling을 하게 됩니다. 

- Multi stepper Z축 자동 Align 관련 G34 코드 확장
   - Configuration_adv.h
   - #defineZ_STEPPER_AUTO_ALIGN
여전히 FFF / Cartesian 방식이 3D Prnter의 주류를 형성하고 있으며, 따라서 8-bit MCU(Micro Controller Unit)가 명맥을 유지하고 있지만, 기능적인 측면에서는 지속적으로 발전을 하고 있죠. 3축 Cartesian 방식에서는 8-bit 프로세서로도 충분히 차고 넘치는 처리 능력을 갖고 있지만, 트렌드는 점차 Multi-Color, Multi-Steeper Axis 방식으로 천천히 진화하고 있습니다. 단순히 높은 Microstepping을 지원하는 것을 떠나  실-시간으로 동시에 처리해야할 이벤트들이 점점 많아지고 복잡해지는 것이죠. 이에 따라 점차 32-bit MCU의 필요성이 부각되고 있습니다. 

과거 Klipper의 등장이 깜짝 반향을 일으킨 후, 기존과는 다른 환경과 Display Controller를 사용할 수 없다는 불편함 때문에 붐업이 되지 못했었지만, 최근 일부 Display Controller를 지원하고 작지만 몇 가지 제어기능을 추가하면서 다시 관심을 받고 있는 이유 이기도 합니다. Klipper는 이미 Multi-MCU 지원을 하고 있죠.. 

이미 Marlin bugfix-2.0.x도 기본 X/Y/Z/E stepper에 더불어 Dual-X, Dual-Y, Tripple-Z, 그리고 총 6개의 Extruder를 지원할 수 있을 정도로 확장성을 제공하고 있습니다. 전체적으로 보면 총 13개의 Stepper를 지원하는 셈 입니다. 

이번 10월 업데이트에는 2축 이상 Z Axis Auto Align 기능이 새롭게 추가되었는데요.. 이에 따라 G34 Code도 새롭게 추가되었습니다.  이론적으로 3축 Z Stepper는 Prusa i3와 같은 방식에서는 의미가 없고, Bed가 상/하로만 기동하는 CoreXY 방식에서 의미를 갖는다고 할 수 있습니다. Classical한 디자인에서는 2개의 Z-Rod와 1개의 Lead Screw로 구성하는 방식이 있고, 3개 또는 4개의 Z-Rod로 Build Plate의 수직 운동에 대한 Linear Guide를 구성하고, 2개의 Lead Screw를 구동 축으로 구성하는 방식이 있습니다. 하지만, 최근 CoreXY 3D printer 디자인 컨셉에서는 3개 혹은 4개의 Lead Screw를 이용하는 방식들을 반영하고 있습니다 .이 경우, 각 Z Stpper를 제어할 수 있게 되면, 자동으로 Build Plate의 기울임을 미세하게 조정할 수 있기 때문에 진정한 Auto Leveling을 실현할 수 있습니다.  개념은 이미 오래전에 나온 것이지만, 실제적인 적용은 대중적이지 않았죠. 새부 설정 옵션은 아래와 같습니다. 

Z_STEPPER_ALIGN_X와 Z_STEPPER_ALING_Y는 Leveling을 위해 측정할 (X/Y) 포인트를 정의하는 옵션이고, Z_STEPPER_ALIGN_ITERATIONS는 해당 지점에서 Leveling Probling을 몇 차례 반복해서 수행할 것인가 그리고, Z_STEPPER_ALIGN_AMP는 Align을 위한 Z축 stepper의 증/삼 배율, Z_STEPPER_ALIGN_ACC는 Leveling의 정확도를 설정하게 되어 있습니다. 

이는 G34 Code와 관련이 되어 있는데요, 위의 기본 설정을 G34 Code로 표현하면, G34 I3 T0.02 A1.0 가 됩니다. I(Z_STEPPER_ALINE_ITERRATIONS), T(Z_STEPPER_ALIGN_ACC), A(Z_STEPPER_ALIGN_AMP).

실제 사용시에는 간단히
G28  ; homing
G34  ; Z Align
G29  ; Auto Bed Leveling

이렇게 적용하시거나, Display Controller에서 Motion > Auto Z-Align 을 실행하시면 됩니다. 

실제, 적용에서는 Bed Leveling Sensor의 오차, 각 Lead Screw의 backlash 등 고려해야할 파라미터들이 멏멏 있겠지만, 자동화할 수 있다는 점 많으로도 꽤 매력적인 것 같습니다.  


이 밖에도 많은 요소들과 관련하여 Bug 및 성능과 관련된 부분들이 수정/보안되었지만, 이 들 부분들은 수시로 변경 업데이트 되고 있고, 완전체가 아닌 만큼 설명에서 제외 했습니다.  또한, 특정 Controller와 관련된 부분들도 많이 있는데, 이 부분들의 경우에도 검증/확인하는데 한계가 있기 때문에 제외를 했다는 점을 이해해 주시기 바랍니다. 

아울러, 아직 2.x.x 정식버전이 나오지 않은 만큼, 위의 새롭게 추가/변경된 부분이 원할히 동작하지 않을 수 있으며, 기존 대비 문제를 일으킬 수도 있다는 점을 염두하시고 검토하시기 바랍니다.  


공유하기 링크
Comments