본문 바로가기

▶3D 프린팅/범블비 자작기

[범블비 델타 15] 캘리브레이션 실패를 잡아내다

[범블비 델타 15 - 캘리브레이션 실패 원인을 찾다]


지난 포스팅에서 캘리브레이션 진행시 실패했다고 했는데 오늘은 그 성공담을 적어보도록 하겠다. 


델타에 있어서 캘리브레이션은 무척 중요하다. 

직교 방식에서는 베드면을 따라 노즐이 일정한 높이로 이동하게 하는 것을 '레벨링' 이라는 단어 하나로 표현한다면, 델타에서는 '캘리브레이션'과 '레벨링' 이라는 두가지가 서로 다른 쓰임새로 기능을 한다. 둘 중에 뭐가 더 중요한가 하면 '캘리브레이션' 이다.  캘리브레이션을 통해 델타 특유의 값인 Delta Radius 를 결정하고 end stop 의 상대적 위치를 결정하며, Z height, tower angle 이라는 것도 값을 조정해야만 델타는 베드 표면을 거의 동일한 간격을 가지고 움직일 수 있다. 

그중 delta radius 에 어떤 값을 넣었느냐에 따라 원형 베드 표면을 가운데가 움푹 들어가게 레벨링이 될 수도, 가운데가 볼록하게 레벨링이 될 수도 있게 한다. endstop 의 거리에 의해서는 한쪽으로 치우친 높이 조절이 되기도 한다.  가만히 내용을 살펴보면 델타의 calibration 이라고 하는 것이야 말로 직교에서 말하던 bed leveling 과 같은 것임을 알 수가 있다. 

여기서 살짝 짚고 넘어가보자면 bed leveling 과 auto bed leveling 이다.  언젠가 한번 자세히 정리할 기회가 있겠지만 퉁쳐서 이야기해본다면 auto bed leveling 은 사기라고 할 수 있다.  실제로 auto bed leveling 으로는 베드의 수평을 잡을 수 없다.  auto bed leveling 이 하는 것은 베드의 기울어짐이나 움푹 꺼짐등을 체크해서 노즐이 그 굴곡을 따라 높이를 달리하며 출력되게 하는 것이다. 3 point leveling 이나 linear leveling 의 경우는 그나마 베드 자체를 평평하다가 가정하에 각도만 바꾸지만 우리가 흔히 쓰는 bilinear 나 ABL 같은 경우는 베드의 굴곡을 따라 위 아래로 노즐 위치를 바꾸는 방식이므로 평평한 바닥면을 얻고자 하는 사람이라면 절대 오토베드레벨링을 써서는 안된다고 보는것이 나의 생각이다. 

델타에 있어서도 오토베드레벨링을 해주기보다는 델타 캘리브레이션을 해주는 것이 좋다고 본다. 델타의 캘리브레이션은 직교에 있어서 베드와 노즐 간격을 사방으로 동일하게 해주는 작업과 같기 때문이다.  즉, 델타의 캘리브레이션은 직교에서 레벨링이라 불려도 된다고 여겨진다. 


따라서 프린터의 조립이 완성되고 가장 먼저 해줘야 할 것은 Calibration 이고, 지난시간에 나는 그것을 하다가 진행이 안되었던 것이다. 그럴 수 밖에 없는 이유는 캘리브레이션을 진행할 때 자꾸만 실패를 반복했기 때문이다. 델타 펌웨어에 있는 기능 중 auto calibration 을 실행시키면 첫번째 캘리브레이션을 하고 다시한번 반복진행 (iteration)을 하게 될때 노즐이 베드 바깥으로 가버리거나 외곽으로 가면서 마그네틱 로드암이 빠져버리거나 하는 현상이 반복했다.  그리고 이상하게 생각했던 것 중에 하나가 이렇게 실패를 하더라도 G33 코드에 의한 캘리브레이션 결과로 end stop 의 상대적 위치가 자동으로 업데이트가 되는데 이 값에 의하면 end stop 이 10mm 이상 차이가 나는 것으로 나왔기 때문이다.   아무리 내가 눈대중으로 endstop block 의 위치를 잡았다고 해도 1mm 도 아닌 10mm 나 차이가 나는 것은 제대로 된 결과가 아닐거라는 생각이 들었다. 그리고 iteration 진행시 자꾸만 바깥으로 노즐이 벗어나는 것이 뭔가 문제가 있다고 여겼던 것이다. 


그래서 퇴근 후 집에가서 의심했던 것을 테스트해보게 되었다. 델타 프로브 센서의 반복성 테스트를 위해 마를린에서는 M48 명령어를 지원해주고 있었다. 이 명령어는 동일한 곳을 여러번 반복해서 측정함으로써 센서 자체를 얼마나 믿을 수 있는지를 보여주는 기능이다.  이걸 측정해보았더니 이런 값이 나왔다. 



이건 뭐 말도 안되는 값이다.  나는 내 눈을 의심했다. 11.170 의 단위가 mm 가 맞는단 말인가?  만약 mm 라면 같은 곳을 측정할 때 1cm 이상의 측정값 오차가 나타난다는 것인데 이건 사용을 못할 센서라고 할 수 있겠다. 지난번 내가 만들었던 60원 스위치 센서가 이정도 밖에 안된다는 것인가?  나는 의문이 들었다. 그리고 센서의 정밀도를 높여보려고 센서조정나사를 이리저리 계속해서 돌려보았다. 



하지만 계속해서 실패하고 나아지질 않았다. 

어쩌다 조금 나아졌나하는 값이 이정도 였다. 



5mm 가 넘는 센서값 차이라면 이런 센서는 쓸 수가 없는 것이다. 

하지만, 좀 석연찮은게 있었다. 센서가 작동하는 모습을 영상촬영해서 보아도 5mm 든 10mm 든 그만큼씩이나 차이나는 것 같지는 않았던 것이다. 



그리고 영상에서 보다시피 뭔가 많이 흔들리는 듯한 느낌이 든다. 그저 노즐이 베드를 찍을 때 나는 진동인가 싶었지만 반복해서 보다보니 노즐의 위치가 자꾸만 이동하는 듯하다는 생각이 들었다.  혹시나?  어쩌면 내가 tmc 드라이버의 전류치를 너무 낮춰서 진행해 그런건 아닐까?  현재 초기 값으로 400mA 를 설정해 놓았으니 이게 문제일 수도 있겠다는 생각이 들었고, 이 값을 조금 극단적으로 1000mA 로 올려서 다시 반복성 측정을 해보았다.  다음 이 결과이다. 



10회 반복 측정에 0.03mm 차이, 

즉, 센서는 문제가 없었던 것이다. 

너무 낮은 드라이버 전류치로 인해서 모터가 탈조를 내면서 밀렸기 때문에 발생한 문제였던 것이다.  

이 힌트를 기반으로 이리저리 조건을 잡은 결과 이런 반복측정 값도 볼 수 있었다.



0.01 ~ 0.05 mm 오차라면 충분히 센서로서 사용할 수 있는 값일 것이다. 전혀 문제가 없다. 


나는 이 결과를 가지고 DeltaAuto Calibration 을 진행해보았더니 이제는 노즐이 전혀 이탈함 없이 제대로 측정을 해주었다.  이게 안되었으면 나는 수동 캘리브레이션으로 진행할까 생각했는데 정말 다행한 일이다. 여러차례 반복 iteration 결과 나의 endstop 위치와 height 등이 캘리브레이션 되어 저장되었다. 


센서문제라고 생각했을 때는 한참을 센서만 붙잡고 있었는데, 자세히 현상을 관찰하다보니 이 문제가 다른것이 원인이 되어 발생했음을 알게 되었고 해결할 수 있었다. 문제는 나타난 것으로 지레짐작 판단하면 이런 삽질을 하게 되는 것 같다는 교훈을 다시한번 얻을 수 있었다. 


그런데, 여기서 끝이 아니다.  캘리브레이션은 되었지만, 노즐을 높이 0 으로 위치시키고 나면 매번 높이가 달라지는 것이었다.  종이 한장을 끼워서 살짝 움직일 정도로 하여 Z height 를 조정할 생각이었는데 이게 전혀 먹질 않았다. 매번 할 때마다 들쭉날쭉 하는데 제대로 Z height 를 맞출 수는 없는 상황이 되었다. 왜?   이미 캘리브레이션을 마쳤기 때문에 센서 문제는 아니었다.  오토홈을 하고 나면 매번 위치가 달라지는 이 문제의 원인을 나는 sensorless homing 이 원인이 아닐까 생각하고 있다. 



end stop 없이 Z max 를 센싱하려고 sensorless homing 을 적용했는데, 매번 auto home 이후의 높이라 1mm 가까이 달라지니 이건 쓸 수가 없는 상태였다. 이렇게 되면 향후에 출력 중지시켜 중간부터 다시 시작하는 이어 출력하기도 불가능하게 된다. 어떻게 이를 해결해야 할까?  다시 숙제가 던져졌다.  센서리스 호밍의 위치정밀도가 한계가 있다면 어쩌면 다시 센서를 달아야 할지도 모르겠다. 하지만 일단 tmc2130 을 적용해 sensorless homing 을 하고 있는 프린터의 사용자들의 글을 통해서 반복 정확도를 높이는 방법을 찾아보도록 하겠다.  현재까지는 단순 tmc2130 메뉴에 있는 정밀도 값을 조정하는 것은 의미가 없었다. 하지만 오리지널 프루사 MK3 에도 적용되어 있는 기능이라 가능하지 않을까 생각을 하고 있다.   


내게 맡겨진 이 숙제, 꼭 답을 제출할 수 있게 되길 기대한다. 




김성민의 북리지 - 함께 성장하는 책 리더십 지혜