Контролери 3D-принтерів повинні робити дуже багато матеріалів дуже, дуже швидко. Виконання кінематичних та динамічних обчислень при одночасному відправленні багатьох тисяч точно синхронізованих крокових імпульсів за секунду - це дуже, дуже важко . 8-бітна лінія мікроконтролерів AVR, використовувана в старих контролерах 3D-принтерів, це, в основному, епоха процесора Mr Coffee. Вони повністю, абсолютно вивірені на час процесора, просто виконуючи основні функції друку на простих (наприклад, декартових) принтерах, а додавання додаткового розрахункового навантаження призведе до їх уповільнення і спричинить уповільнення, заїкання, паузу тощо.
"Але мій 8-бітовий принтер працює добре", - кажете ви. Ні, це не так. Ваша продуктивність друку обмежена нею, усвідомлюєте ви це чи ні. Тепер слайсери автоматично приховують від вас багато недоліків у роботі прошивки. Наприклад, стандартна практика значного уповільнення швидкості друку по периметру значною мірою є результатом того, що 8-бітні процесори мають недостатні ресурси для двох речей:
- Виконання розрахунків відцентрових прискорень для кривих на декількох сегментах gcode
- Слідкуйте за передачею / обробкою та плануванням руху gcode для gcode з безліччю дуже малих сегментів, наприклад, в органічних моделях або гладких дугах
Якщо представлена серія дуже маленьких сегментів в гладкій дузі або складної кривої, 8-бітне програмне забезпечення, ймовірно, задихнеться від необхідної швидкості обробки команд і введе заїкання в друк. Ці неймовірно короткі паузи дозволяють залишковому тиску в екструдері виштовхувати зайву пластику, роблячи невеликий замах на друк. Тому більшість зрізів автоматично зменшують криві та виводять gcode із зменшеною роздільною здатністю, щоб полегшити навантаження на мікропрограмне забезпечення. Проблема вирішена, правда?
Але є ще одне питання - алгоритми управління рухом GRBL, що лежать в основі всіх основних контролерів 3D-принтера з відкритим кодом, були розроблені з великою кількістю ярликів і злому, щоб 8-бітові процесори могли виконувати досить швидко. Наприклад, основний алгоритм розглядає лише зміну швидкості або швидкості на куті між двома сегментами і використовує це, щоб вирішити, коли уповільнитись / прискорити рух по напрямку руху. Він не обчислює і не враховує центральне / радіальне прискорення. Це дійсно ефективний злом під час друку боксерських моделей з низькою роздільною здатністю, але він виходить з ладу на гладких кривих з великою кількістю маленьких сегментів. Прошивка не виявляє помітної зміни швидкості на куті будь-яких двох майже лінійних сегментів в грані кривої, і, таким чином, не сповільнюється для кривої.
Друк складних периметрів неприскореним означає, що командна подача повинна бути дуже низькою, щоб отримати хорошу якість. Більшість принтерів обмежені приблизно 40 мм / с або менше на складних периметрах, незважаючи на те, що вони можуть працювати, можливо, 80-120 мм / с на заливці низької складності, перш ніж потрапляти на інші обмеження швидкості.
Між обмеженнями швидкості обробки команд та недоліками планувальника руху, що вимагаються процесорами з низькою потужністю, швидкість друку на практиці повинна бути набагато нижчою, ніж це суворо вимагає фізика та принтер. Все це відбувається від 8-бітових процесорів. Обхідні шляхи та найкращі практики для вирішення цієї проблеми настільки глибоко закладені в інструментальні ланцюги та екосистему, що мало хто розуміє, що існує навіть проблема. Але це реальна межа, яку можна подолати: швидкісний процесор із більш жорстким планувальником руху може генерувати більш високі середні швидкості друку з кращою якістю друку.
Однак, прошивки на базі АРМ лише повільно рухаються до більш просунутих планувальників руху. Зараз це велика область розвитку, яка насправді рухає майбутній перехід від низькокласних ARM, таких як Cortex M3, до ще швидших процесорів. Насправді не все так важко збільшити 84 МГц Arduino завдяки, накопичивши купу функцій прошивки.
Використання 8-бітових процесорів також робить принтери НАУЧНІшими. Найбільшим споживачем часу на процесорі в типовому 8-бітовому принтері є крокове переривання, яке спрацьовує крокові імпульси, щоб змусити двигуни рухатися. Цілком типово для> 60% всіх тактових циклів на Атмега-AVR переходити до крокових імпульсів. Оскільки це відбувається як переривання, інші завдання з обробки, які повинен виконувати принтер - як розрахунки прискорення та управління нагрівачем, - стискаються у короткі проміжки між подіями крокового переривання.
Без ретельного проектування прошивки крок імпульси повністю "витіснить" інші функціональні можливості, такі як оновлення РК-дисплея та розрахунки прискорення. Щоб дозволити більш високу швидкість руху без використання всіх ресурсів процесора, 8-бітові прошивки мають режим під назвою "подвоєння кроків", який спрацьовує два (або чотири, або вісім) крокових імпульсів на крокові переривання, щоб половина (або чверть, або восьма частина) ) стільки крокових переривань можна використовувати для отримання однакової швидкості руху. Ця практика скасовує вузькі місця процесора, але це спричиняє більш чіткі та гучні рухи двигуна, оскільки ступінчасті імпульси спрацьовують у спалах, а не постійній частоті. Фактично, рівень мікроступінгового двигуна функціонально знижується до більш грубого режиму, коли кроковий переривник спрацьовує подвійними або чотирма кроками. Тож мотори стають гучнішими, менш точними,
Цікавим побічним ефектом є те, що якщо ви переключите принтер на основі Марліна з 1/16 мікроступінгового на 1/32 мікроскопічного та зберігаєте однакові швидкості друку, прошивка просто почне подвоювати крок, знижуючи ефективний рівень мікроскопії прямо назад до 1/16.
Прошивки на основі ARM також використовують подвоєння кроків, але дозволені швидкості кроків, як правило, ~ 8 разів вище, перш ніж використовувати подвійний / чотирифазний крок. Це може означати більш високі швидкості та / або плавніший рух.
Інша проблема з 8-бітовими AVR - це відсутність апаратної плаваючої точки і необхідність витрачати багато тактових циклів на високоточні обчислення або обробку дуже великої кількості. Кінематика Delta, функції автоматичного вирівнювання, обчислення кроків із надзвичайно високим підрахунком кроків для великих принтерів та інші розширені функціональні функції займають багато тактових циклів на 8-бітовому процесорі. Поганий дизайн мікропрограмного забезпечення або необережне додавання функції, яка вимагає декількох додаткових квадратних коренів і функцій триггеру, можуть повністю зірвати процесор. Цей вид повзучості та коду функцій серйозно вплинув на ефективність Марліна з часом, коли люди просять все більше старого AVR.
Для порівняння, 32-бітний процесор не просто має більш швидкий та більше тактовий цикл, він також може робити набагато складнішу математику за меншу кількість тактових циклів, тому що має спеціалізовану апаратну функціональність, яка забезпечує багато кроків 8 біт процесор повинен робити в програмному забезпеченні.
Чи працюють 8-бітні процесори? Звичайно, вони дивно працюють добре, що вони є, і що ми просимо від них. Але вони безперечно обмежують продуктивність та особливості сучасних 3D-принтерів. Навіть нинішнє покоління 32-бітових процесорів вже поглинається високошвидкісними принтерами та математичними можливостями. 8-бітовий процесор вже на два покоління відстає від того, що було б кваліфіковано як "сучасний" контролер 3D-принтера.