관리 메뉴

elsa in mac

Marlin Bugfix 1.1.x - 2018.6월 24일 현재 시점에 살펴본 추가 사항 정리 본문

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

Marlin Bugfix 1.1.x - 2018.6월 24일 현재 시점에 살펴본 추가 사항 정리

elsa in mac 2018.06.24 19:09

Marlin 1.1.8이 나온지도 어느덧 7개월이 자나가고 있는데요, 

오늘 자 Marlin Bugfix 1.1.x 버전에서 새롭게 추가된 부분들을 살펴 보도록 하겠습니다. 

내부적으로는  지속적으로 Bug가  Fix되고 있는 한편, 새로운 기능들이 하나 둘씩 추가되고 있습니다. 

지난 포스트에서도 언급했듯이, Cartesian 방식의 3D printer에서 적용할 수 있는 Linear Advance 가 버전 1.5 로 업데이트 되였죠..

Configuration.h를 보면, 우선 Thermal Setting 부분에 Chamber에 대한 온도 센서 선언 부분이 추가 되었습니다. 만..


#define TEMP_SENSOR_CHAMBER 0

Active Chamber의 온도센서와 Fan Control에 대한 설명이나 LCD 표시등은 아직 어디에도 없습니다. marlin kimbra에서는 꽤 오래 전 부터 Active Chamber의 온도 제어 기능이 추가되었었는데, Marlin에서도 이 기능을 추가하려는 것으로 점처 집니다. 

다음으로 추가된 것은 endstop noise filter 설정 옵션 입니다. 

#define ENDSTOP_NOISE_FILTER

ENDSTOP 혹은 Limit Switch는 3D printer에서 2가지 기능을 수행하는데, 첫 번째는 X,Y,Z 각 방향의 Reference(기준)점을 알려 주는 역활을 합니다. 해당 축의 End Stop / Limit Switch가 눌렸다는 것은 그 지점이 해당 축이 기준(0)점이 됩니다.

두번 째 역활은 Safety(안전대책)로 각 축 방향으로 Carrier가 무한히 이동하는 것을 방지해 주는 역활을 하죠. 계속 진행하면 기구물에 부딧치거나 구동영역을 벗어나 구동함으로써, 기구물이 변형되거나 틀어질 수도 있겠죠. EndStop이 눌리게 되면, Motor 그동을 멈추게 하는 자동차의 Break와 같은 역활이라고 할 수 있을 것 같습니다. 

Limit Switch는 다양한 타입이 있는데요, BLTouch나 Micro Switch 처럼 물리적인 스위치도 있고, Optical Senser나 Magnetic 을 이용하는 스위치등 다양한 형태들이 존재 합니다. 

이들 스위치들에는 물리적인 접점을 전기적 신호로 바꿔 주는 작은 전자회로들을 포함하게 되는데, 이들 전자히로들이 EMI(ElecttoMagnetic Interference : 전자파 간섭)으로 측정 오차가 발생할 수 있습니다..

EMI 영향을 줄 수 있는 환경요소에는 가열된 Bed의 열, 센서 가까이 위치한 Hotend의 열, Stepper Motor의 자성, PWM Modulation 등을 꼽을 수 있습니다.  

위의 두 그래프는 센서 스위치의 On/Off 상태를 보여주는 데, 위의 이미지가 이상적인(Ideal) 센서 스위치의 동작 그래프 이며, 아래는 실제 센서 스위치의 동작 그래프 입니다. 신호에 Noise들이 끼어 있는 것을 볼 수 있죠..

5V면 ON, 0V면 OFF 이므로, 자잘한 Noise가 끼어 있더라도 ON을 OFF로 OFF를 ON으로 착각할 정도는 아니지만, 노란색 파형 부분은 그 노이즈의 영향이 커서 충분이 On/Off를 잘못 인지할 가능성을 내포하고 있습니다.

이러한 EMI의 영향을 줄일 수 있는 방법은 몇 가지가 있는데, 쉴드 케이블을 적용하여 EMI 영향을 차단하거나 Cable을 꼬거나 케이블을 큰 Voltage 케이블과 분리하여 멀리 이격시키거나 케페시터 등으로 H/W EMI 를 줄일 수 있습니다.  이 밖에 Software 적이 Filtering을 적용하는 방법이 있는데요, Marlin 1.1.9 / 2.0 부터 이 Software Filtering기능이 추가되는 것 같습니다. 

 위의 멘 마지막 EMI 영향을 받는 그래프를 보면, 알 수 있듯이, 정상적인 스위치 동작에서는 OFF에서 ON이 되고, 다시 OFF가 되는데 까지 걸리는 시간이 꽤 긴 반면, Noise의 영향을 받는 부분들의 경우 On/Off 구간이 매우 짧은 특성이 있는 것을 알 수 있습니다. 따라서, Software 적으로 스위치의 On -> Off -> ON 상태가 짧은 주기로 변경된다면 이를 그대로 받아들이지 않고, 무시해 버리는 일종의 Filtering을 하면 됩니다. 

대신, 이러한 Software Filtering은 일정 시간동안(= 한참 동안) 센서 값을 지켜봐야 하는 단점이 생김니다. 이 말은 바꿔 말하면 실제로 EndStop 포인트에서 센서가 정상적으로 눌렸음에도 Motor를 중지 시키지 못하고 좀 더 지켜봐야 한다는 말과 같습니다. 결론적으로 실제 Motor 구동을 멈추는 Break 반응에 지연이 발생하게 되고, 이는 결국 Accuracy(정확도)의 손실을 초래하게 되는 셈입니다. 주석에는 +/- 0.2mm 정도의 Error를 유발 할 수 있다고 되어 있습니다. 

RAMPS 1.4.2에는 Endstop 커넥터 부분의 회로에 Capacitor가 달려 있어서 이에 대응하고 있고, Markerbot의 PCB endstop에도 Capacitor가 달려 있기 때문에 Software Filtering을 사용할 필요는 없습니다.  (RAMPS 1.4에는 Capacitor가 없음)

일단, 주 타켓이 무엇인지는 잘 모르겠지만... 주석에 보면, 이 기능은 Recommand하지 않는다고 되어 있습니다. 그럼 왜 넣은 걸까?? 갸우뚱..

암튼 다음으로 넘어 갑니다.

다음으로 추가된 것은 S-Curve Acceleration 입니다. 오...

#define S_CURVE_ACCELERATION 

Jerk 기반의 가속과 감속 Motion에 대한 것인데, 기술적인 내용이라 설명이 어렵고, 간단히 아래의 동영상을 보시면 직관적으로 이해가 되실 것 같습니다.

 

구동 시작 시점의 가속과 종료 시점의 감속을 스므스하게 진행시키는 motion 알고리즘인 것이죠..이론적으로는 S-Curve Acceleratoin을 적용하면 구조물에 발생할 수 있는 진동과 공명현상을 줄일 수 있고, 그 결과, 보다 좋은 품질의 출력이 가능하며 Motor에도 무리를 덜 주게 된다는 의미를 부여할 수 있을 것 같습니다.

다음으로, Software Ensstop을 제어할 수 있는 LCD 메뉴가 추가 되었습니다.

#if ENABLED(MIN_SOFTWARE_ENDSTOPS) || ENABLED(MAX_SOFTWARE_ENDSTOPS)

  #define SOFT_ENDSTOPS_MENU_ITEM  // Enable/Disable software endstops from the LCD 

#endif

Software endstop이란 사용자가 정의한 빌드 영역을 초과하지 못하도록 모터 구동을 제한하는 것인데요. 3D 프린터에 Max 위치에 대한 Limit Switch를 달지 않는 이유가 Home 위치를 기준으로 사용자가 정의한 X/Y/Z 각 방향으로 최대 영역 값을 정의 해 놓으면 Software는 Carrier를 구동 시키다가 영역을 초과하지 못하도록 모터 구동을 제한하기 때문입니다. 예를 들어 X/Y를 각각 200mm 로 정의했다면 home 위치를 기준으로 0보다 작은 값 또는 200을 넘어서는 모터 구동이 되지 않는데, 이것이 Software endstop 기능 입니다. 

하지만, 기본적으로 3D printer의 전원을 넣으면 현재 Carrier가 있는 위치를 일단 0으로 가정하기 때문에 실제로는 구동영역을 넘어서 "구동 될 수"가 있습니다.  예를 들어 전원을 넣기 전에 X Carrier를 190mm 위치에 놓고 전원을 넣으면 현 위치에서 200mm를 구동할 수가 있죠. 이는 실제로는 390mm 영역까지 구동하게 되는 셈 입니다.  이 경우 문제가 생길 수 있습니다.. 이를 방지하기 위해 Marlin에서는 Homing 명령(G28)을 내리기 전에는 원천적으로 구동을 금지하는 옵션(#define NO_MOTION_BEFORE_HOMING)도 있죠.... 

X와 Y는 전원 인가 후 손으로 Carrier를 이동 시키는 것이 비교적 수월하기 때문에 별 문제가 없지만, Z축의 경우에는 손으로 조작해서 Carrier를 이동하는 것이 쉽지 않죠.. 더욱이 Dual Z라면... 만일 Z축으로 Max 근처까지 높여 놓은 상태에서 전원을 새로 인가한 경우, Homing을 하게 되면, 일단 위로 몇 mm를 올린 후에 내리게 되는데, 실제로 Max 에 있기 때문에 Max를 초과할 수도 있게 됩니다. 

위의 SOFT_ENDSTOPS_MENU_ITEM 옵션을 활성화 시키면, 위의 스샷과 같이 수동으로 X/Y/Z 모터를 구동 시킬 수 있는 Prepare 항목에 Soft Endstops 라는 항목이 추가되게 됩니다. 기본 값은 On 이죠.. 하지만, 이를 Off로 바꿀 수 있습니다. Off로 바꾼 경우에는 구동영역을 초과하여 모터를 수동으로 구동 시킬 수 있게 됩니다. 0보다 작은 값은 물론 Max 값을 초과하여 구동 시킬 수 있는 것이죠..

대신 주의할 사항은 예를 즐어 Z축을 Soft Endstops를 OFF 시킨 후, -100까지 내렸다고 가정하고, 이 상태에서 Homing 명령을 내리게 되면, 다시 0이 될 때까지 올리게 됩니다. (실제로는 0에서 몇 미리 더 올라간 후 Z homing을 하게 됨) 따라서, 상황에 따라서는 OFF를 시키고 사용자가 원하는 위치까지 구동 시킨 후에 3D Printer를 Reset을 시키는 것이 필요합니다.  Reset을 시키면 현 위치가 다시 0으로 인식되기 때문이죠.. 


다음으로 configuration_adv.h 를 보면...

#define JUNCTION_DEVIATION

Junction Deviation 옵션이 새롭게 추가되었는데요.. S-Curve Acceration이 Motor 구동의 일반적인 가속/감속에 대한 것이라면 Junction Deviation은 코너링과 관련된 것 입니다. 일반적으로 코너링을 할 때, 감속을 하게 되는데요.. 이전까지는 방향 전환에 따른 가속(acceleration) 변화량의 충격, 즉 Jerk 값을 제한(줄임)하는 방식을 사용했는데, Junction Deviation은 코너링을 위해서 얼마나 감속할 것인가를 다르 알고리즘으로 지정하는 것 입니다. 값이 작을 수록 감속 폭이 커서 서서히 코너링을 하고, 값이 커지면 빠르게 코너링을 하게 됩니다.  코너링이 빠를 수록 전체적으로 출력 시간이 줄어들게 되지만, 그 만큼 방형 전환에 따른 충격이 켜지기 때문에 구조가 약한 3D Printer에서는 품질 문제를 유발할 수도 있을 것 입니다. 

이 옵션을 활성화 시키면 LCD 메뉴의 Control > Motion > Jerk 내부 설정 황목이 변합니다. 원래는 X/Y/Z/E에 대한 Jerk 설정 항목들이 나타나는데, 이 옵션을 활성화 시키면, Junction Deviation 항목 하나로 통합됩니다. 

#define ADAPTIVE_STEP_SMOOTHING

다음은 Adaptive step smoothing 옵션입니다. 스탭모터는 모터 드라이브에서 스탭모터로 인가하는 입력 펄스 주파수에 따라 속도 제어가 되는데, 일반적으로는 저속 회전 시에 진동과 특유의 소음을 발생시킨다는 단점이 있습니다. 이 진동이 프린팅 품질을 저하시키는 원인이 될 수도 있는데, 저속에서의 이러한 단점을 개선시킬 수 있는 알고리즘인 것 같습니다. 

#define POWER_LOSS_RECOVERY 

다음은 Power Loss Recovery 옵션 입니다. 주석에는 CR-10 프린터로 유명한 Creality3D 의 기능으로 되어 있는데요.. 일단 다른 프린터에도 이 옵션을 켜면 강제로 적용이 되긴 되는 것 같습니다.  대신 잘 동작하는지는 보장 할 수 없겠죠. Power Loss Recovery 기능은 SD카드로 프린팅을 하는 경우로 일단 제한이 되는데, 메 Layer를 출력할 때, 현재 시점의 출력 지점, 온도 상태 등 프린팅 환경 정보를 실 시간으로 SD Card의 특정 영역에 저장/업데이트 하는 것 입니다. 만일 특정 시점에 전원이 꺼졌다(정전 혹은 플러그가 빠진 경우.. 등)가 다시 인가 되었을 경우 Marlin은 SD 카드의 특정 영역을 확인하고 실 시간으로 저장된 기록이 있다면, 해당 Gcode 파일을 읽고, 기록된 마지막 상태를 파악한 후, 계속 이어서 프린팅을 할지의 여부를 사용자에게 묻는 기능 입니다.  

잘만 된다면 굉장히 좋은 기능이죠.. 12시간이 걸리는 프린팅을 한 다고 가정하고 11시간을 출력한 시점에서 정전이 일어났다고 생각해 보면(악몽 같은 일이죠...으..), 그동안 사용한 필라멘트와 프린팅에 사용한 시간등등을 고랴할 때, 프린팅을 계속 이어서 할 수 만 있다면 얼마나 좋겠습니까..? ...^^ 

하지만, 이 기능은 그 기본 원리 대로 그리 만만한 것은 아닙니다. 프린트가 정전으로 멈추고 나서 장시간 지났다면  노즐이 출력물에 눌러 붙어 있을 수도 있고, 다시 Stand-By 상태로 가기까지 프린트를 이어가기 위한 완전히 퍼펙트한 상태를 만든다는 것도 그리 쉬운 일이 아닙니다. 순간적으로 전원이 나갔다 들어오는 "깜박 정전" 등의 상황에서는 확실히 도움이 될 수도 있을 것 같기도 하고... 매 순간 실시간으로 현재 상태를 업데이트 한 다는 것도 만만치 않죠..  고려해야 할 것들이 꽤 많을 것 입니다. 

이제 막 도입이 되었으니, marlin 1.1.9 정식 버전이 나왔을 때, 어느 정도 사용할 만한 성능을 보여주기를 바래 보며, 전체 3D 프린터에서 사용할 수 있는 기능으로 배포 되기를 기원합니다. ^^ 제 프린터에서 옵션을 켜면 기능이 동작을 하는 것 같기는 한데, SD File 선택 시 예상치 않게 Rebooting 되는 경우들이 종종 발생을 하더군요... 



이 밖에도 몇 가지 옵션의 명칭이 바뀌거나 설정의 편의를 위한 옵션들이 추가된 것들이 있지만, 일반적인 옵션이 아니라 설명에서는 제외 했습니다. 전체적으로 보면 motion planner와 관련된 기능들이 새로 추가되어 나름 경쟁 상대인 smoothieware나 klipper등과 수준을 맞춰가는 경향으로 진화하는 것 같기는 한데 Linear Advance와의 상관관계는 어떻게 되는 건지는 잘 모르겠네요...

실제로 위에 나열한 옵션들을 다 활성화 하고 테스트를 해 봤지만, 눈에 띌 정도의 차이점은 발견할 수 없습니다. 바꿔 말하면 새로 추가된 옵션을 활성화 시켰다고 프린팅 출력에 문제가 생기거나 하지는 않는 다는 것이죠. ^^

아직은 정식버전이 아니고, 계속 진화하고 있는 상태이므로 최종 릴리즈 에서는 좀 더 좋은 기능과 편의성을 제공하기를 기대해 봅니다. 


0 Comments
댓글쓰기 폼