elsa in mac

Marlin 1.1.9 정식버전 릴리즈 본문

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

Marlin 1.1.9 정식버전 릴리즈

elsa in mac 2018. 8. 3. 09:32

드디어 marlin 1.1 버전의 마지막을 알리는 1.1.9 버전이 정식으로 릴리즈 되었습니다. 1.1.8 정식버전이 지난 2017년 12월 26일에 릴리즈 되었으니까 대략 7개월 만의 공식 업데이트 입니다 

적용할 3D 프린터의 유형에 따라, 1.1.9에 적용된 버그 픽스와 새로운 기능들이 많은 도움이 될 수도 그렇치 않을 수도 있겠죠..  자 그럼 1.1.8 대비 1.1.9에 어떠한 기능들이 새롭게 추가되고, 개선되었는지를 간단히 알아 보도록 하겠습니다.


Configuration.h...

Stepper Driver 유형 설정

Configuration.h에 추가된 옵션들로, X/Y/Z/E... 등 각 Motor에 적용된 Stepper Driver의 종류를 설정하는 옵션 입니다.  Default는 위에서 보는 바와 같이 A4988 드라이버로 정의 되어 있기 때문에, "반드시" 각자 자신이 사용하는 Stepper Driver로 바꿔 주어여 합니다.  옵션은 아래와 같습니다. 

#define X_DRIVER_TYPE  A4988

#define Y_DRIVER_TYPE  A4988

#define Z_DRIVER_TYPE  A4988

#define X2_DRIVER_TYPE A4988

#define Y2_DRIVER_TYPE A4988

#define Z2_DRIVER_TYPE A4988

#define E0_DRIVER_TYPE A4988

#define E1_DRIVER_TYPE A4988

#define E2_DRIVER_TYPE A4988

#define E3_DRIVER_TYPE A4988

#define E4_DRIVER_TYPE A4988


 * Options: A4988, DRV8825, LV8729, L6470, TB6560, TB6600, TMC2100,

 *          TMC2130, TMC2130_STANDALONE, TMC2208, TMC2208_STANDALONE,

 *          TMC26X,  TMC26X_STANDALONE,  TMC2660, TMC2660_STANDALONE,

 *          TMC5130, TMC5130_STANDALONE


TMC2130/TMC2260의 경우 SPI 를 사용하는 경우에는 TMC2130 또는 TMC2260을 사용해야 하며, SPI를 사용하지 않는 경우에는 TMC2130_STANDALONE 혹은 TMC2260_STANDALONE을 적용해야 합니다. 같은 논리로 TMC2208의 경우, UART 를 사용하는 경우에는 TMC2208, 그렇치 않는 경우에는 TMC2208_STANDALONE을 사용하면 됩니다. 

기존의 1.1.x Bugfix에서는 사용하는 Stepper Driver가 무엇이냐에 따라 Configuration_adv.h에서 몇 가지 추가적인 옵션들(MINIMUM_STEPPER_DIR_DELAY, MINIMUM_STEPPER_PULSE, MAXIMUM_STEPPER_RATE)을 설정해 줘야 했는데, 1.1.9 정식 버전에서는 Configuration.h에서 위와 같이 Stepper Driver를 지정하기만 하면, Configuration_adv.h에서 추가적인 설정을 하지 않아도, 해당 Stepper Driver의 세부 설정이 자동으로 적용되게 됩니다. 


S Curve Acceleration

/**

* S-Curve Acceleration

 *

 * This option eliminates vibration during printing by fitting a Bézier

 * curve to move acceleration, producing much smoother direction changes.

 *

 * See https://github.com/synthetos/TinyG/wiki/Jerk-Controlled-Motion-Explained

 */

//#define S_CURVE_ACCELERATION


S Curve Acceleration은 직선 구간에서의 가속/감속과 관련된 Motion Planner 입니다. 기존에는 Trapezoidal accleration을 적용했었는데요,  Trapezoidal(사다리 꼴) acceleation은 목표 속도까지 선형으로 가속하고, 목표 속도로 유지하다가 감속 구간에서 역시 선형적으로 감속이 이뤄지는 방식 입니다. S curve 방식은 가속 과 감속이 S자 형태로 비 선 가/감속을 합니다. (아래 그림 참조)

목표 속도에 이르는 시간이 Trapezoidal 방식과 비교시 큰 차이가 없으면서, 방향 전환 시 충격이 적어 Ringing 감소등 출력 품질 측면에서 이론적으로 보다 좋은 planner 로 평가되고 있습니다.  다만, 3D Printer의 경우 단순히 Carrier의 가/감속만 고려되는 것이 아니라, Carrier 가/감속에 따라 Filament 압출도 non-Linear(비 선형)를 따라야 하기 때문에, 단순한 문제는 아닙니다.  직선구간에도 비 선형적으로 가/감속을 하기 때문에 Extruder가 정확하지 않으면 선형 구간에서도 압출 불량 같은 결과가 초래될 수 있기 때문입니다. 물론, Marlin Team에서 충분히 문제가 없게 끔 검토가 되었겠지요.. ^^ 

다만, 3D 프린터의 구조와 내구성에 따라 S Curve Acceleration, 아래에서 설명할 Junction Deviation, Linear Advance 등 다양한 Planner 옵션들이 조합되는 조건과 설정한 출력 속도 등이 품질 문제를 야기할 기능성도 배제할 수 없습니다. 

이런 보다 고급진(?) Planner들은 Smootieware나 Klipper등과 같은 32bit CPU기반의 펌웨어에서 지원하고 있어, 8 bit CPU를 지원하는 Marlin에서는 8bit AVR 에 적용 시 처리속도의 한계로 부적절하다는 의견도 있습니다.  Marlin team도 이러한 견해를 의식해서 인지, 복잡한 연산이 필요한 planner의 경우 C 보다는 Assembly Code로 구현하고 있습니다.  


Configuration_adv.h

Case Light : NEOPIXEL LED 컬러 설정


/**

 * M355 Case Light on-off / brightness

 */

#define CASE_LIGHT_ENABLE

#if ENABLED(CASE_LIGHT_ENABLE)

  //#define CASE_LIGHT_PIN 4                  // Override the default pin if needed

  #define INVERT_CASE_LIGHT false             // Set true if Case Light is ON when pin is LOW

  #define CASE_LIGHT_DEFAULT_ON true          // Set default power-up state on

  #define CASE_LIGHT_DEFAULT_BRIGHTNESS 105   // Set default power-up brightness (0-255, requires PWM pin)

  //#define MENU_ITEM_CASE_LIGHT              // Add a Case Light option to the LCD main menu

  #define CASE_LIGHT_USE_NEOPIXEL           // Use Neopixel LED as case light, requires NEOPIXEL_LED.

  #if ENABLED(CASE_LIGHT_USE_NEOPIXEL)

    #define CASE_LIGHT_NEOPIXEL_COLOR { 255, 255, 255, 255 } // { Red, Green, Blue, White }

  #endif

#endif

NeoPixel LED에 대한 RGBW 기본 색상을 설정할 수 있는 항목이 추가되었습니다. Case Light를 설정한 경우, M355 Gcode를 사용하여, 밝기와 On/Off를 설정할 수 있습니다.  NeoPixel LED는 Adafruit에서 만튼 LED Array로 Strip/Ring/Stick 등 다양한 형태가 존재합니다.  Neopixel LED는 일반 LED 보다 많은 전류를 소모하므로 별도의 5V Power를 사용해야 하며, marlin 빌드를 위해 Arduino IDE에서 Noepixel Library를 추가해야 합니다. 


Junction Deviation

Bugfix에 최근에 새롭게 추가된 것으로, Jerk 설정을 대신하는 Motion Planner 입니다. Junction Deviation은 코너링시의 감속/가속과 관련된 것으로 소위 Smooth Cornering으로 알려져 있습니다. 일반적으로 코너링 진입 시, 감속을 하고 코너링 완료 시 다시 가속을 하게 되는데요.. 이전까지는 방향 전환에 따른 가속(acceleration) 변화에 따른 충격, 즉 Jerk 값을 제한(줄임)하는 방식을 사용해 왔습니다. Junction Deviation은 코너링을 위해서 얼마나 감속할 것인가를 기존과는 다른 알고리즘으로 지정하는 것으로. 값이 작을 수록 감속 폭이 커서 서서히 코너링을 하고, 값이 커지면 빠르게 코너링을 하게 됩니다.  코너링이 빠를 수록 전체적으로 출력 시간이 줄어들게 되지만, 그 만큼 방형 전환에 따른 충격이 켜지기 때문에 구조가 약한 3D Printer에서는 품질 문제를 유발할 수도 있습니다. 

//

// Use Junction Deviation instead of traditional Jerk Limiting

//

//#define JUNCTION_DEVIATION

#if ENABLED(JUNCTION_DEVIATION)

  #define JUNCTION_DEVIATION_MM 0.02  // (mm) Distance from real junction edge

#endif

Junction Devitation을 활성화 시키면, LCD 메뉴의 Control > Motion > Jerk 메뉴 항목이 변경되게 되는데, 기존에 X/Y/Z/E 각각 Jerk 값을 조정할 수 있는 반면, 활성화 시에는 단일 Junction 값을 조정하게 됩니다. 기본 값은 0.02... 기존이나 변경 후나 값 자체가 갖고 있는 의미가 직관적이지 않기 때문에 Try & Error로 자신의 프린터 환경에 맞는 값을 찾아야 하는 점은 동일 하다고 할 수 있습니다. 다만, 기존의 X/Y/Z/E Jerk 값들을 개별적으로 조정하는 것이 전체적인 프린팅 속도와 품질 개선에 어떤 상관관계로 영향을 미치는지가 매우 복잡했다면, Junction 단일 값으로 조정하는 것이므로 사용자 입장에서는 매우 간소화 될 수 있다는 점은 장점이라고 할 수 있을 것 같습니다.  


Advanced Pause Feature

Advanced Pause Feature는 기존에 Filament Change 기능으로 알려져 있던 기능이죠. load 액션이 Slow/fast로 세분화 되었고, Unload, Load 시 Acceleration 설정 항목 추가 되었으며, 옵션 명칭들이 약간씩 변경되었습니다. 


Stepper Motor 설정

TMC26X Stepper Driver에 대한 설정 지원이 추가되었고,  TMC2130/TMC2208 Stepper Driver 설정에서 Sensorless Homing에 Z Axis에 대한 Homing Senssitivity 설정 항목이 추가 되었습니다, Z축에 Probe(BLTouch, Inductive Sensor, Mechanical Switch 등등...)를 사용하지 않고, TMC2130의 Sensorless 기능을 사용하는 것은 일반적이지 않으며, Bed가 완전히 고정된 Delta 방식 Printer 정도에서 사용할 수 있을 것으로 판단이 됩니다.  Z Axis에 대한 Sensorless Homing 설정이 추가되면서, 부가적으로 Current와 Height 옵션으로 미세 조정할 수 있는 옵션이 추가되었습니다. 

  #if ENABLED(SENSORLESS_HOMING)

    #define X_HOMING_SENSITIVITY  8

    #define Y_HOMING_SENSITIVITY  8

    #define Z_HOMING_SENSITIVITY  8

  #endif


  /**

   * Enable M122 debugging command for TMC stepper drivers.

   * M122 S0/1 will enable continous reporting.

   */

  //#define TMC_DEBUG


  /**

   * M915 Z Axis Calibration

   *

   * - Adjust Z stepper current,

   * - Drive the Z axis to its physical maximum, and

   * - Home Z to account for the lost steps.

   *

   * Use M915 Snn to specify the current.

   * Use M925 Znn to add extra Z height to Z_MAX_POS.

   */

  //#define TMC_Z_CALIBRATION

  #if ENABLED(TMC_Z_CALIBRATION)

    #define CALIBRATION_CURRENT 250

    #define CALIBRATION_EXTRA_HEIGHT 10

  #endif


사실 업데이트된 펌웨어는 표면적으로 들어난 옵션의 추가나 변경 사항보다는 내부적인 버그픽스와 성능 최적화가 더 큰 의미가 있지만, Controller와 3D Printer의 유형이 워낙 다양하기 때문에, 서두에 언급한 것과 같이 사용하는 프린트에 따라서는 예상치 못했던 버그가 나타날 수도 있고, 이전 버전 대비 오히려 불편하거나 성능이 저하될 수도 있다는 점을 간과해서는 안됩니다. 

메이커 프린터를 사용하고, 제조사가 Marlin Firmware 업데이트를 제공한다면, 기다렸다가 제조사에서 제공하는 펌웨어를 받아 적용하는 것도 좋은 방법입니다. 

업데이트를 하실 때는 다시 되돌아갈 수도 있다는 가정에서 기존 소스코드를 잘 보관하시고 신중히 업데이트 해야 하며, LCD에서 변겅한 파라미터 값들이 있다면, 이 값들도 별도로 확인해 놓아야 하며, 업데이트 후 터미널에서 M502 명령으로 Default 설정, M500 명령으로 EEPROM에 저장된 정보를 갱신하고,  파라미터 값들을 추가적으로 설정하시면 됩니다.    

Marlin 역시 트렌드에 맞춰 32bit Controller들에 대한 지원과 동시에 최근에는 RTOS 도입을 검토하는 등, 느린것 같지만 지속적이고 다양한 각도로 업데이트를 추진하고 있고 있는 것 같습니다.  

1.1.9 릴리즈 후에 몇 가지 문제점들이 보고되고 있는데, 이번 버전을 끝으로 1.x 버전을 종료한다고 밝힌 만큼, 1.1.x Bugfix Branch를 통해 Minor Bug fix를 지원할 지, 아니면 2.0 Bugfix를 통해 지원할 지는 좀 더 지켜봐야 할 것 같습니다. 

공유하기 링크
Comments