elsa in mac

8bit 컨트롤러 vs. 32bit 컨트롤러 본문

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

8bit 컨트롤러 vs. 32bit 컨트롤러

elsa in mac 2019. 1. 4. 23:14

atmega2560 CPU 이미지

사실은 32bit 컨트롤러인 Duet3D의 DuetWiFi보드에 대한 리뷰를 작성하려고 계획을 했었는데, 그 보다 앞서 8bit 컨트롤러와 32bit 컨트롤러에 대한 이야기를 해야 할 것 같아 먼저 포스팅을 해 봅니다. 조금은 긴 포스트가 될 것 같은데.. 가 볼까요 ?

3D 프린터 컨트롤러
3D 프린터의 두뇌 역활을 하는 컨트롤러의 가장 주된 역활은 간단히 말하자면, 3D 모델을 출력하기 위해 Slicer로 부터 생성된 GCode를 해석(Parsing)하고 그 결과에 따라 각 축의 모션을 담당하는 Stepper Motor를 구동시키기 위해 필요한 Step Pulse를 생성하여 각 Motor에 전달하는 것입니다. 한마디로 모터 구동 혹은 모터 제어라고 할 수 있습니다. 이 일을 처리하고도 남는 시간에 3D 프린팅을 위해 필요한 나머지 일들, 예컨데, 히팅 요소들에 대한 온도제어, 사용자 인터페이스(UI) 처리, Active Cooling을 위한 Fan 제어 등등의 일들을 처리하는 것이죠.

초창기 컨트롤러들은 8bit프로세서들을 탑재 했는데, 보드의 수급, 개발환경/접근성 등등 모든 조건이 8Bit MCU(Micro Contoller Unit)를 사용하는 것이 자연스러웠기 때문입니다. 그것이 90년대 중반이니 지금까지 꽤 오랜시간 동안 여전히 8Bit 컨트롤러가 사용되어 오고 있는 셈입니다. 여전히 사용되고 있다는 것은 트렌드를 바꾸면 안 될 정도로 처리속도나 용량이 뒤떨어지지는 않다는 것을 반증하는 것이기도 하지만, 사실은 단지 현재 시장에 판매되는 대부분의 3D프린터들이 8Bit 컨트롤러를 사용하고 있는 것이 이유이기도 합니다. 

arduino ramps 이미지3D프린터의 컨트롤러의 전형으로 사용되었던, ATMEGA2560 Arduino 보드와 CNC Shield인 RAMPS 보드

3D 프린터 컨트롤러의 두뇌로 8bit MCU면 충분하다는 의견과 32bit MCU로 넘어가야 한다는 논쟁은 예전부터 시작되었고, 오늘날에도 여전히 계속되고 있습니다. 지금 다시 이 주제를 끄집어 내는 이유는 최근들어 시장에 나온 32bit 컨트롤러이 부쩍 많아졌기 때문입니다. 32bit 컨트롤러가 대거 등장한 이유는 대륙의 3D프린터 관련 부품 메이커들 간의 경쟁 떄문이기도 하지만, 32Bit 컨트롤러를 운용하기 위한 펌웨어(Firmware)들의 기능 및 성능이 일정 수준에 올라셨고, 반대로 8bit 컨트롤러를 지원하던 Firmware들의 용량이 점점 커저 이를 담을 그릇이 거의 한계에 도달했기 때문이기도 합니다. 

3D프린터의 Open Souce Firmware의 대표격인 Marlin도 1.1.x 대를 마무리하고 32bit 컨트롤러를 지원하기 위한 2.x 버전 구현에 박차를 가하고 있죠.

32bit 컨트롤러 이미지들32bit Controller 들

처리속도
8bit 프로세서 대비 32bit프로세서의 장점을 기술적으로 논하는 것은 꽤 방대하고 전문적인 지식을 요구 합니다. 마이컴 개론을 여기서 전부 다 논 할 수는 없겠지요..  간단히 말하면, 8Bit프로세서 보다 32Bit프로세서가 집적도가 높고, 상대적으로 최신기술이며 무엇보다 동작속도가 매우 빠르다는 점 입니다. 집적도가 높고 최신기술이 적용되어 동일한 칩 공간 안에 보다 복잡한 연산을 단일 명령어로 처리할 수 있는 부가회로를 넣을 수 있게 되었고, 이러한 덕분에 8bit프로세서에서 여러 단계를 거쳐야 계산할 수 있었던 연산을 보다 적은 단계로 게다가 매우 빠르게 처리할 수 있게 되었습니다. 더욱이 8Bit프로세서 보다 훨씬 많은 Register와 메모리, 그리고 다양한 인터페이스를 지원한다는 점도 장점이라고 할 수 있습니다. 

3D 프린터의 컨트롤러가 보다 빠른 처리속도를 갖는다는 의미는 바꾸어 말하면 동일한 시간에 보다 많은 일을 처리를 할 수 있다는 의미가 됩니다. 초창기 X/Y/Z 직교방식의 FFF(Fused Filament Fabrication) 3D프린터가 등장했을 때는 빠른 출력을 기대하지 않았고, 온전히 3D 프린팅이 가능한가에 몰입되어 있었습니다. 지금도 소위 Prusa Style로 대표되는 Classic Cartesian Style의 3D 프린터들은 최초의 그것과 구조면에서는 크게 다를 바가 없습니다 만, 3D프린터의 진화와 함깨 점차 개선된 구조의 프린터들이 등장을 하게 되는데요, CoreXY, H-Bot, Delta, Scara 방식등의 프린터들이 그것들 입니다. 이들 프린터들은 구조 상 2개 혹은 3개의 모터가 반드시 동시에 구동을 해야 하는 구조여서 X/Y/Z축 구동과 관련된 수학적 계산 또한 Classic Style의 3D프린터보다 복잡 합니다. 즉, 동일한 시간에 동일한 속도로 3D프린팅을 한다고 가정을 해 보면, 보다 복잡한 연산은 그 만큼 높은 처리속도를 요구하게 됩니다. 더군다나 초창기 보다 복잡해진 Motion Planer 때문에 처리속도에 대한 요구도는 더 높아지게 되었죠.  

Step Rate
Step Rate란 1초당 Step수로 단위는 steps/sec 입니다. 3D프린터의 출력속도는 Step Rate에 의해 결정이 됩니다. 앞서 3d프린터 컨트롤러의 가장 주된 기능이 Step Pulse를 생성하고 이를 통해 모터를 구동하는 것이라고 말씀을 드렸는데요. Stepper Motor는 Step이라는 단위로 회전을 하는데, 일반적으로 1.8도 혹은 0.9도의 Step을 지원합니다. 이는 자전거에서 패달을 밟는 것과 비유될 수 있습니다. 자전거가 앞으로 나아가려면 사람이 패달을 밟아줘야 하는 것 처럼 Stepper Motor는 Step pulse를 받아야 합니다. 마이크로컨트롤로부터 발생된 이 신호는 곧바로 Stepper Motor로 들어가는 것은 아닙니다. Step Pulse는 소신호이고, 실제 Stepper Motor를 구동하기 위해 필요한 전기신호를 만들어주기 위해 Stepper Motor Driver라는 회로가 필요 하죠. 즉, MCU -> Stepper Driver -> Stepper Motor의 과정을 거쳐야 합니다. 

모터 축(Shaft)의 1회전은 360도 이므로 만일 1.8도 step의 stepper motor를 예로 들자면, 360/1.8 = 200 step이 됩니다. 즉, 모터 축을 한 바퀴 회전 시키려면 200 step을 진행해야 한다는 말이 됩니다. 여기까지는 속도라는 개념은 없습니다. 1초마다 1step, 1step씩을 회전할 수도 있고 불규칙적으로 회전시킬 수도  있을 것 입니다.  한 가지 분명한 것은 1.8도 stepper motor를 1 바퀴 회전 시키려면 200 step이 필요하다는 것이죠.  0.9도 모터는? 네 400 step이 필요 합니다. 

3D프린터의 Hotend를 한 지점에서 다른 한 지점으로 이동 시키려면 Stepper Motor의 회전 운동을 직선운동으로 바꿔 주어야 하는데요. 일반적으로 Timing Belt를 사용합니다. 널리 사용되는 GT2 벨트는 한 홈의 간격이 2mm 입니다.  이 밸트를 이용하기 위해서는 동일하게 2mm 간격으로 홈이 나 있는 Gear(기어)가 필요 한데, 이를 Stepper Motor Pulley(폴리)라고 합니다. 일반적으로 20개의 홈을 갖고 있는 Pulley를 사용하고 이 각각의 홈을 Tooth라고 표현 합니다. Pulley에 GT2 벨트를 걸고 회전을 시킴으로써, Stepper Motor의 회전 운동을 직선운동으로 변환되게 됩니다. 

NEMA17 Pulley GT2 belt 이미지

Pulley가 20개의 홈을 가지고 있고, 이를 1회전 시킨다는 것은 GT2 벨트의 20홈을 직선 운동시키는 것과 같고, GT2 벨트의 홈이 2mm 간격이므로, 총 40mm를 직선운동하게 되는 셈 입니다. 앞서 1.8도의 Stepper Motor를 1회전 시키는데 200 step이 필요하다고 했으니까. 이 경우, 1회전 = 200 step = 40mm가 되고, 따라서 1 mm를 직선 운동하는데 필요한 step은 5 step이 됩니다.  이 값은 절대적이지 않으며 Pulley의 규격 혹은 타이밍 벨트의 규격에 따라 달라질 것 입니다. 

자 이젠 속도의 개념을 넣어, 1.8도 Stepper Motor로 1초에 10Cm를 이동하는 경우를 생각해 봅니다. 
10Cm 면 100mm 입니다.  1.8도 모터, GT2 벨트 그리고 20T pulley를 사용하는 환경에서 1초에 10Cm를 이동하려면 1초에 필요한 step 수는 얼마일까 ?
1mm 이동에 5 step이 필요하므로 100mm를 이동하려면 100배 즉, 1초에 500 step이 필요 합니다. 이 경우 step rate는 500 step/sec 이(가) 되는 것이죠. 이것을 컨트롤러 입장에서 생각해 보면, 1초에 500번의 Step Pulse를 생성해서 Motor쪽으로 보내줘야 한다는 의미가 됩니다. 

하지만, 이것은 어디까지나 Full Step 즉, 모터 설계 상의 Step일 경우에 500 step이 필요한 것 이고, 실제로는 이를 좀 더 세분화 시킨 Micro stepping이라는 것을 사용합니다. Full step을 보다 세밀하게 나누어 step당 이동거리를 보다 정밀하게 제어하기 위함이지요. 위의 경우에서 1mm = 5 step 이므로, 1 step 당 해상도는 0.2mm 가 됩니다.  0.2mm 도 그 값이 꽤 작지만, 정밀도라는 측면으로 보면 낮은 수준 입니다. 

3D 프린터에서는 보통 1/16 Micro Stepping(이하 MS)을 사용하는데, 모터의 1 step을 다시 1/16로 세밀하게 stepping 한다는 의미 입니다. 따라서, 1/16 micro stepping을 사용한다면, Step Rate는 500*16 = 8000 Step(micro-step)이 필요하게 될 것 입니다. 즉, 100mm/s의 속도를 내려면 컨트롤러의 MCU는 1초에 8000번 Step Pulse를 생성하여 Motor쪽으로 보내 주어야 합니다. 한 번의 Pulse를 1Hz라고 표현 한다면 8000Hz 즉, 컨트롤러가 8KHz의 Pulse를 생성해 낼 수 있어야 하는 것이죠. 

만일, 32 Micro Stepping을 할 경우를 가정하면, 위의 계산식의 2배가 되어야 하므로, 16KHz의 Stepping Pulse를 생성할 수 있어야 하고, 만약 256 MS라면, 16 MS보다 16배 많은 128KHz의 Step Pulse를 1초 안에 생성해 낼 수 있어야 합니다. 

그럼, 보다 높은 Micro Stepping을 사용한다는 것은 무슨 의미인가 ? 

Full Step의 경우에는 앞서 살펴봤듯이, 1 step = 1/5mm = 0.2mm 이므로, 16 MS를 사용하면, 1/16배 즉 0.0125mm = 12.5um(마이크로미터, 미크론), 256MS를 사용하면, 1/256 이므로 0.00078125mm = 대략 0.8um 가 됩니다.  정리하면 보다 높은 Micro Stepping을 사용한다는 것은 1 step당 이동할 수 있는 간격이 보다 세밀해 진다는 것이고, 이는 바꿔 말하면 이론 상 MS가 높을 수록 더 정밀한 출력을 할 수 있다는 의미가 됩니다.  대신 Trade-Off도 있어 Full Step 대비 Torque가 떨어지는 부작용이 있는데, 대략 30%정도 토크가 떨어지는 것으로 알려져 있습니다.  단, 잘못 알려진 것 중에 Micro Stepping을 높이면 토크가 상대적으로 더 많이 떨어진다고 알려저 있는데, 1/16이나 1/256이나 토크는 차이가 없습니다.  

Step Doubling.. Multi-Stepping
자.. 이제 Step Doubling이라는 것을 살펴볼 차례 입니다.
동일한 시간 동안에 많은 Step Pulse를 생성한다는 것은 동일한 시간 안에서 더 많이 자전거의 패달을 밟는 것과 같습니다. 같은 시간 동안에 자전거의 패달을 더 많이 밟으면 그 만큼 자전거의 속도는 빨라지죠. 만일 패달을 밟는 간격이 일정하다면 자전거의 속도는 그에 비래하여 일정하게 높아집니다. 반대로 패달을 불규칙하게 밟으면 어떻게 될까? 속도가 올라가거나 유지되기는 하지만 자전거는 매우 불 안정해 질 것입니다. 

3D프린터의 MCU도 속도를 제어하기 위해 Step Pulse를 생성할 때, Step Pulse를 일정한 간격으로 발생시키는 것이 매우 중요합니다. 그래야 안정적으로 보다 높은 출력품질을 얻을 수 있습니다. 컨트롤러는 Motor를 구동하는 이 외에도 다양한 처리를 하는데, 이러한 처리가 Step Pulse 발생 주기에 영향을 미치는 것을 방지하기 위해 Interrupt 처리라는 것을 하게 됩니다.  Interrupt는 System Clock의 따라 정확히 동일한 간격으로 이벤트가 발생하는데, 특정 Interrupt 발생 주기 때 마다 step pulse를 발생 시킴으로써, 일정한 간격을 유지할 수 있게 됩니다. 당연히 System Clock이 빠르면 빠를수록 더 많은 Interrupt를 발생시킬 수 있고, 따라서 Step Pulse 생성 주기도 짧아지게 됩니다.  

현재 3D프린터 컨트롤러에 널리 사용되는 MCU는 ATMEGA2560이라는 8bit 프로세서 인데요, 이 프로세서도 1초에 매우 많은 Interrupt를 발생시킬수 있지만, Step Pulse 생성과 관련해서는 대략 1초에 10,000번 즉, 10kHz의 ISR(Interrupt Service Routine)을 사용할 수 있습니다. 위의 설명에서 1.8도 Stepper Motor와 GT2 벨트 , 20T Pulley를 사용하고 1/16 MS에서 100mm/s의 속도를 낼 경우 8kHz의 Step Pulse를 생성해 낼 수 있어야 한다고 했으므로, ATMEGA2560 칩을 사용한 8bit컨트롤러는 이론적으로 1/16 MS에서 100mm/s의 속도를 처리할 수 있습니다.  하지만, 32MS를 적용할 경우에는 16KHz가 필요하므로, 이론 상 처리를 할 수 없습니다. 능력을 초과하는 것이죠.

그렇다면 ATMEGA2560을 사용한 컨트롤러는 32MS를 사용할 수 없다는 말인가?
아닙니다. 이는 어디까지나 최대속도를 100mm/s의 속도를 가정할 경우에 그렇다는 것이므로, 속도를 반인 50mm/s으로 줄이면 1초당 필요한 step pulse도 반으로 줄어들기 때문에 8KHz가 되고. 따라서, 최고속도를 50mm/s로 제한한다면 32MS도 사용할 수 있는 셈 입니다. 같은 방식으로 속도를 25mm/s로 제한하면, 64MS, 12.5mm/s으로 제한하면 128MS, 다시 1/2을 해서 6.25mm/s으로 제한하면 256 Micro stepping으로 설정해도 처리를 해 낼 수 있습니다. 결론적으로 속도를 저속으로 구동한다면 높은 MS를 사용할 수 있므므로 이론적으로는 보다 정밀한 출력을 할 수 있다는 말이 됩니다. 

이제 좀 더 현실적으로 접근을 해 봅니다.
ATMEGA2560에서 32MS로 설정을 하고 최고속도를 100mm/s으로 설정을 하면 안되는가? 답은 될 수도 있고 안될 수도 있습니다.
실제 우리가 출력할 3D모델은 4각형의 상자일 수도 있고, 엄청나게 다양한 곡선들로 이루어진 캐릭터일 수도 있습니다. 4각형 상자로도 크기가 20mmx20mm인 작은 사각형일 수도 있고, 20Cm x 20Cm인 큰 사각형일 수도 있습니다.  X라는 최고속도에 도달하려면 가속을 해야 합니다.  정지상태에서 갑자기 100mm/s의 속도를 낼 수는 없는 것이죠. 예를 들어 가속도(Acceleration)를 100mm/s^2 으로 설정했다고 가정을 해 보면, 정지 상태에서 1초가 지나야 100mm/s가 됩니다. 가속도를 100mm/s^2으로 설정하고 20mm x 20mm의 상자를 출력한다고 가정을 해 보면, 한쪽 모서리에서 다른 한쪽 모서리까지 이동할 경우, 도착 시의 속도는 얼마일까 ? 100mm까지 가야 100mm/s의 속도가 날 수 있으므로, 그 1/5인 20mm까지만 진행했을 때는 역시 1/5인 20mm/s 의 속도밖에는 낼 수 없습니다. 20mm/s라면 필요한 step pulse는 역시 1/5이므로 16/5 = 3.2KHz 가 되므로 32MS를 사용할 수 있습니다. 다군다나 사각형 모양이기 때문에 20mm 거리를 진행하기 전에 이미 속도를 줄이는 감속을 해야 하거나 더는 속도를 올리지 않는 정속을 유지해야 합니다. 이유는 20mm에 도달하면 90도 방향 턴을 해야 하기 때문이죠.. 

곡선 구간도 마찬가지 입니다. 곡선 구간에 들어가는 시점에서는 감속 혹은 정속을 해야하고, 곡선 구간을 빠져나올 때 다시 가속 혹은 정속을 유지해야 합니다. 이러한 곡선 구간이 연이어 이어져 있다면 가속을 할래야 할 기회는 없을 것입니다. 즉, 속도와 가속도를 어떻게 설정했는가 와는 무관하게 실제 속도는 설정 치 보다 활씬 못 미칠 수 있습니다. 

그럼 항상 저속으로 출력해야만 한단 말인가 ?
역시 그렇치 않습니다. 가속도의 값을 매우 크게 하면 됩니다. 가속도의 값을 크게 한다는 것은 보다 짧은 시간에 높은 속도에 빠르게 도달할 수 있다는 말이 됩니다. 물론 최고속도가 정해져 있기 때문에 그 수준을 넘어서서는 안됩니다. 즉, 가속도를 높게 설정하여 짧은 순간에 최고속도인 100mm/s에 도달해 버린다면 32MS를 사용할 수 없습니다. 능력 초과이기 떄문입니다. 

여기까지만, 이 글을 읽으면 이래저래 32MS를 사용할 수 없는 것처럼 느껴지실 것 입니다. 하지만, 이렇게 능력을 초과할 경우에도 높은 Micro-Stepping을 사용할 수 있도록 Firmware 개발자들은 아이디어를 냈습니다. 그것이 바로 Step Doubling 혹은 Multi-Stepping이라는 기법 입니다. 

Step Doubling이란, interrupt 이벤트가 발생했을 때, 한 번의 Step Pulse를 발생시키는 원칙을 깨고 2번(double) 혹은 4번(quad) 혹은 8번(octa).... Step Pulse를 연속해서 발생시키는 기법 입니다. 원래는 1초마다 1번씩 자전거 패달을 밟는 것이 원칙인데, 1초에 2번 혹은 4번, 그리고 그 다음 1초 후에 또 2번 혹은 4번 이렇게 패달을 밟는 것이죠. 패달을 많이 밟기 때문에 자전거의 속도는 올라갈 수 있지만, 불규칙적으로 패달을 밟기 때문에 매우 불안정한 상태가 될 수 있습니다. 3D프린트의 실제 출력 중에는 저속/감속 구간들이 매우 많기 때문에 높은 MS를 설정해도 사용할 수는 있는데, 몇몇 구간에서는 능력을 초과할 수 있기 때문에 이 경우에만 Step Doubling 처리를 하는 것 입니다. 하지만, 이러한 기법은 자전거 패달의 예 처럼 non-uniform stepping 즉, 불규칙적인 Step Pulse 생성이라는 부작용을 만들어 냅니다. 이것은 Step motor의 동작을 미세하게 불안하게 만드는 요인이 되며, 각 축을 당당하는 Stepper Motor들 간의 동기화(Sync)가 불안해질 수 있고, 경우에 따라서는 step이 꼬여 버려 건너뛰는 Step Lost / Step Skip 현상이 발생하는 등, 부분적인 출력 문제를 발생시키는 요인이 될 수 있습니다. 높은 MS을 사용할 수는 있지만 혹은 특정 MS에서 높은 속도를 낼 수는 있지만 완전한 해법은 아닌 셈 입니다. 8bit 컨트롤러에서 Micro-Stepping을 16으로 하나 32로 하나 혹은 그 보다 높은 MS로 설정을 하나 출력 결과물에서 별 차이를 못느끼는 이유가 바로 위와 같은 메카니즘이 동작하기 때문인 것입니다.  

따라서, 현실적인 대안은 그냥 보다 빠른 처리를 할 수 있는 MCU를 사용하는 것입니다. 그리고 여기에 "이론적인" 32bit 컨트롤러의 정점이 있습니다. 물론 32bit 컨트롤러의 경우에도 Step Doubling 로직은 여전히 존재 하고 동작합니다. 사용자가 얼마나 높은 속도와 가속도를 설정할 지를 개발자는 알 수 없기도 하거니와 어떤 규격의 모터를 사용할지, 어떤 규격의 Timing Belt를 사용할지 모르기 때문입니다. 

정리를 해보면, 8Bit컨트롤러 보다 32bit컨트롤러의 처리속도와 관련된 잇점은 명백합니다 만, 이러한 32bit컨트롤러의 장점이 절대적일 수 없는 이유는 사용자가 설정한 속도, 가속도, Jerk, Micro-Stepping 등에 따라 8Bit 컨트로러로도 충분할 수 있기 때문이며, 현실적인 측면에서 고속 출력이 비단 컨트롤러의 처리속도에 좌우되는 것은 아니라는 점 때문입니다. 오히려 어떤 필라멘트를 사용하는 가가 출력속도를 결정하는데 더 큰 요소로 작동하게 됩니다. 굳이 높은 능력을 사용하지도 않을 건데, 32bit컨트롤러로 바꿀 이유는 없는 것이죠. 32bit 컨트롤러를 사용하고, 1/256 MS를 설정해도 여전히 안정적인 출력을 위해서는 50mm/s 이하의 속도로 출력을 해야 하는 것이 현실입니다. ^^. 설사 100mm/s에서 안정적인 출력이 가능한 필라멘트를 사용한다 하더라도 Extruder의 Heating Block에서 팔리멘트를 100mm/s 속도로 출력할 수 있을 만큼 충분히 빠르게 가열할 수 없다면 역시 고속출력은 무의미 할 수 있습니다.   

이번 포스트에서는 다루지 않게지만 사용하는 Stepper Motor의 규격에도 제한요소가 있습니다. Stepper Motor는 구조적인 특성 상, 소위 Back EMF라는 특성이 있어, 특정 속도 이상에서는 BEMF 때문에 torque가 떨어지는 문제가 발생합니다. 암튼 이래저래 3D프린터에서 고속으로 출력하기 위해서는 매우 다양하고 많은 요소들을 고려 해야 합니다. 단순히 컨트롤러만 빠르다고 해서 고속출력을 할 수 있는 것은 아닙니다. 

하지만, 사용하는 프린트 구성이 충분히 사용자가 원하는 고속에서 문제가 없다면 32bit컨트롤러의 빠른 출력은 분명 8bit컨트롤러의 한계 뛰어넘는 것입니다. 


정밀도
자 다음은 정밀도를 봅니다.  
32bit 컨트롤러의 또 다른 장점은 높은 MS를 사용함으로써, 동일한 조건에서 8bit 컨트롤러보다 정밀한 출력을 할 수 있다는 점을 들 수 있는데요. 현실은 그 차이가 기대 이하입니다. 가장 큰 이유는 Slicer에 있습니다. 

3D모델은 Polygon Mesh라는 구조로 되어 있으며, 수 많은 다양한 모양의 삼격형 Mesh Face라는 단위로 구성됩니다. 

3D 모델 구조 이미지

즉, Slicer가 3D모델을 분석하여 GCode를 생성할 때, 얼마나 세밀한 Mesh Face로 결과를 낼 것인가에 정밀도와 복잡도가 1차적으로 결정되게 됩니다.  만약 Slicer가 복잡한 3D모델을 매우 간략한 구조로 결과를 내 놓는다면 정밀도는 떨어질 것이고, 반대로 매우 세밀하게 분석해 낸다면 정밀도는 높아질 것입니다. 물론 용량은 엄청나게 커지게 되고, 처리시간도 매우 오래 걸리게 되겠죠.

자 그럼 한 가지 예를 보도록 하겠습니다.
아래 보시면,  지름 10mm 원 모양의 모델을 만들고. 이 녀석을 STL로 저장을 할 때, 기본 해상도와 높은 해상도로 각각 생성을 했습니다. 그리고, 이 Mesh 파일을 다시, 불러 들여서 Mesh구조을 보면 아래와 같습니다. 

3D 모델링 예1

보시면, 원시 모델이 가운데 있고, 그 오른쪽에는 저 해상도의 Mesh가 반대로 왼쪽에는 고해상도의 Mesh가 놓여 있습니다. 고해상도 Mesh는 너무 세밀해서 Mesh Face가 잘 보이지도 않을 정도 이죠. 저해상도 Mesh의 파일용량은 12KB, 고해상도 Mesh의 파일용량은 84KB 정도가 됩니다. 

이제 이 둘을 Slicer(Slic3r PE)에 넣고 Slicing을 해 봅니다. 

slicing 예

보시면, 윗쪽이 고해상도 Mesh, 그리고 아래쪽이 저해상도 Mesh 입니다.  아제 생성된 GCode에서 저해상도 Mesh와 고해상도 Mesh의 첫 번째 최 외각 Circle에 해당하는 Gcode Sequence만 뜯어내어 비교를 하면 아래와 같습니다. 

Gcode 분석 스샷1

결과를 보고 확인할 수 있는 첫 번째 사실은 원을 그리기 위한 GCode Sequence는 실제로는 원을 그리는 것이 아니고, 63각형 혹은 65각형을 그린다는 점 입니다. 두 번째 사실은 저해상도 Mesh를 Slicing 하나 고 해상도 Mesh를 Slicing하나 단 두 줄의 차이 밖에는 없다는 점 입니다. 

다각형과 실제원 비교

위에 3개의 원이 있습니다. 왼쪽의 녹색원은 63각형 입니다. 가운데 파란색 원은 진짜 원이고, 오른쪽 빨강색 원은 65각형 입니다. 육안으로는 셋 모두 원으로 보일 뿐 차이가 있어 보이지 않습니다. 

원을 그리기 위해 63개의 직선을 사용하고 있고, 그 하나의 직선은 매우 작은 직선입니다. 하나의 그 작은 직선을 100 step으로 출력하나, 16배인 1600 step으로 출력하나 의미는 없습니다. 둘 다 그저 직선일 뿐이죠.. 더욱이 고해상도 Mesh로 Slicing을 한다고 해서 더 짧고 많은 직선으로 촘촘히 원을 그리는 것도 아닙니다. 이러니, 8bit 컨트롤러를 사용하나 32bit 컨트롤러를 사용하나 정밀도에서 큰 차이가 날리가 없습니다.  

Slicer S/W를 만드는 개발자들 또한, 현재 8bit 컨트롤러들이 주류를 이루고 있으며, 그들의 처리 능력의 한계를 충분히 이해하고 있습니다. 따라서, 딱 그 수준에 맞는 결과를 내 놓고 있는 것이죠. 바꿔 말해 32bit 컨트롤러들이 이론적으로는 8bit 컨트롤러 보다 같은 시간에 더 미세하게 구동할 수 있는것은 분명하지만, 실제로는 8bit 컨트롤러가 처리할 수 있는 수준의 GCode Sequence를 그대로 사용할 수 밖에 없기 때문에, 8bit 컨트롤러와 32bit 컨트롤러의 출력품질 차이는 거의 없습니다. 설사 더 세밀한 GCode Sequence를 생성해 낸다 하더라도 육안으로는 그 차이가 도드라 지지 않습니다. 따라서, 빠른 출력이 요구되는 매우 특별한 몇몇 경우를 제외하고는 일반적으로는 아주 미미할 뿐 차이가 거의 없다고 볼 수 있습니다.   

위에서 속도와 정밀도 두 측면을 살펴봤지만, 현실이 이렇다면 굳이 32bit 컨트롤러로 바꾸거나 혹은 구매할 필요성을 크게 느낄 수 없습니다.  오랜시간 32bit 컨트롤러의 무용론에 무게가 실린 이유이기도 합니다.   

그럼 32bit컨트롤러들의 장점이 뭐란 말인가 ?
32bit컨트롤러와 관련된 펌웨어들은 보다 많은 Gcode 버퍼링, 직선과 곡선, 가속과 감속, 보다 정밀하고 부드러운 모션과 필라멘트 압출, 보다 안정적인 출력, 8비트 컨트롤러에 내제된 한계점 개선등을 실현하기 위해 매우 다양한 기능들을 계속 추가해왔고 앞으로도 계속 발전해 나갈 것 입니다.  서두에서도 언급했듯이 이제 8bit MCU로는 이러한 새로운 기능들을 담아내기가 벅찬 지경에 이르렀습니다. 즉, 32bit 컨트롤러는 8bit 컨트롤러 보다 다 빠르고 더 정밀한 출력물을 얻을 수 있는 능력 때문이 아니라 8bit컨트롤러의 한계점을 돌파하기 위한 대안일 뿐 입니다. 

또한, 기존 8bit컨트롤러들이 구 시대적인 인터페이스에 의존적인 것을 탈피하여 보다 현실적이고 미래지향적인 인터페이스를 접목시키기 위한 대안이 32bit 컨트롤러 인 것입니다. 

따라서, 기존 8bit컨트롤러의 구성에 단지 MCU만 32bit로 업그레이드한 32bit 컨트롤러들은 큰 의미가 없습니다. 사용자들로 부터 매우 긍적적인 평가를 받는 몇몇 컨트롤러들은 보다 많은 기능의 펌웨어, WIFI 나 이더넷 인터페이스를 제공하고, 보다 유연한 보드 확정성을 지원하며, 보다 강력한 Stepper Motor Driver를 장착하고 있고, 훨씬 더 멋진 UI 인터페이스를 지원 합니다. 그래서 좀 비쌉니다.. ^^ 

최근까지 32bit컨트롤러들은 8bit컨트롤러들보다 가격이 높았습니다. 하지만, 대륙의 그들 덕분에 가격이 거의 8bit컨트롤러와 같아지는 수준까지 내려왔습니다. 그래서 지금은 과도기 입니다. 검색을 잘 하지 않으면 32bit컨트롤러를 구매할 비용보다 더 큰 비용으로 8bit컨트롤러를 구매하는 어처구니 없는 일을 당할 수 있는 때 입니다. 물론, 같은 값이라면 32bit컨트롤러가 8bit컨트롤러보다 무조건 좋은 것이다라고 말 할 수는 없습니다. 컨트롤러를 구성하는 부품의 수준도 좀 봐야죠..  여하튼, 이런 과도기를 지나고 나면 8bit컨트롤러들은 차츰 시장에서 사라질 것 입니다. 또 그래야 관련 분야의 기술도 더 앞으로 나아갈 수 있고.. 그 해택은 온전히 우리 모두의  것이 될 것이니 말입니다. ^^ 

이 글을 다 읽고 나면 이렇게 질문을 할 수 있을 것 입니다. 
"그래서, 32bit컨트롤러로 바꿔야 합니까 ?"

컨트롤러를 교체하고 싶다면 나름의 이유들이 있을 것입니다. 그 이유를 해소할 만한 녀석을 찾았다면.. 뭘 망설이겠습니까. 바꿔야죠.. ^^ 단 그 이유가 속도나 정밀도라면 아직은 실망하실 수도 있습니다. 


공유하기 링크
Comments