Контроллеры 3D-принтеров должны делать много всего очень быстро. Выполнение расчетов кинематики и динамики при отправке многих тысяч точно синхронизированных шаговых импульсов в секунду действительно, очень сложно . 8-битная линейка микроконтроллеров AVR, используемая в старых контроллерах 3D-принтеров, в основном относится к процессорам Mr Coffee, выпущенным в конце 1990-х. Они полностью, полностью загружены процессором, просто выполняя основные функции печати на простых (например, декартовых) принтерах, и добавление дополнительной вычислительной нагрузки приведет к их замедлению и вызовет замедление, заикание, паузу и т. Д.
«Но мой 8-битный принтер работает нормально», - говорите вы. Нет, это не так. Ваша производительность печати ограничена этим, понимаете ли вы это или нет. Слайсеры теперь автоматически скрывают от вас множество недостатков производительности прошивки. Например, стандартная практика значительного замедления скорости печати по периметру в значительной степени является результатом того, что 8-битные процессоры имеют недостаточные ресурсы для двух вещей:
- Выполнение вычислений центростремительного ускорения для кривых на нескольких сегментах gcode
- В ногу с передачей / обработкой gcode и планированием движения для gcode с множеством очень маленьких сегментов, таких как в органических моделях или гладких дугах
При представлении серии очень маленьких сегментов в виде гладкой дуги или сложной кривой 8-битное микропрограммное обеспечение, вероятно, захлебнется необходимой скоростью обработки команд и вызовет заикание в отпечатке. Эти невероятно короткие паузы позволяют остаточному давлению в экструдере вытолкнуть немного дополнительного пластика, сделав небольшой след на отпечатке. Таким образом, большинство слайсеров автоматически искажают кривые и выводят gcode с уменьшенным разрешением, чтобы облегчить нагрузку на прошивку. Проблема решена, верно?
Но есть и другая проблема - алгоритмы управления движением GRBL, лежащие в основе всех основных контроллеров 3D-принтеров с открытым исходным кодом, были разработаны с множеством ярлыков и хаков, позволяющих 8-битным процессорам работать достаточно быстро. Например, базовый алгоритм рассматривает только скорость или изменение скорости в углу между двумя сегментами и использует его, чтобы решить, когда следует замедлять / ускорять вдоль направления движения. Он не рассчитывает и не учитывает центростремительное / радиальное ускорение. Это действительно эффективный хак при печати прямоугольных моделей с низким разрешением, но он с треском проваливается на гладких кривых с большим количеством маленьких сегментов. Микропрограмма не обнаруживает заметного изменения скорости в углу любых двух почти линейных сегментов внутри фасеточной кривой и, следовательно, не замедляет ее.
Печать сложных периметров без ускорения означает, что заданная скорость подачи должна быть очень низкой, чтобы получить хорошее качество. Большинство принтеров ограничены до 40 мм / с или менее по сложным периметрам, несмотря на то, что они могут работать, возможно, 80-120 мм / с на заполнении низкой сложности, прежде чем перейти к другим ограничениям скорости.
Между пределами скорости обработки команд и недостатками планировщика движения, которые требуются процессорам с низким энергопотреблением, скорость печати на практике должна быть намного ниже, чем строго требуется для физики и аппаратного обеспечения принтера. Это все происходит от 8-битных процессоров. Обходные пути и лучшие практики для решения этой проблемы настолько глубоко внедрены в наборы инструментов и экосистему, что очень немногие осознают, что существует даже проблема. Но это реальный предел, который можно преодолеть: высокоскоростной процессор с более строгим планировщиком движения может генерировать более высокие средние скорости печати с лучшим качеством печати.
Тем не менее, микропрограммы на основе ARM только медленно продвигаются к более продвинутым планировщикам движения. Сейчас это большая область разработки, которая фактически движет грядущий переход от низкоуровневых ARM, таких как Cortex M3, к еще более быстрым процессорам. На самом деле, не так уж и сложно добиться максимального эффекта 84-мегагерцовой шины Arduino Due, используя множество встроенных функций.
Использование 8-битных процессоров также делает принтеры громче. Самый большой потребитель процессорного времени в типичном 8-битном принтере - это шаговое прерывание, которое запускает импульсы шага, чтобы заставить двигатели двигаться. Для> 60% всех тактовых циклов на AVR Atmega характерно переход к шаговым импульсам запуска. Поскольку это происходит как прерывание, другие задачи обработки, которые должен выполнять принтер, такие как вычисления ускорения и управление нагревателем, оказываются зажатыми в короткие промежутки между событиями прерывания шагового двигателя.
Без тщательного проектирования микропрограммы шаговые импульсы полностью вытеснят другие функции, такие как обновления ЖК-дисплея и расчеты ускорения. Чтобы обеспечить более высокую скорость движения без использования всех ресурсов процессора, 8-битные прошивки имеют режим, называемый «удвоение шага», при котором два (или четыре, или восемь) импульсов шага на одно шаговое прерывание превращаются в половину (или четверть, или восьмую). ) можно использовать столько же шаговых прерываний для получения одинаковой скорости движения. Эта практика устраняет узкие места процессора, но вызывает более грубое и более громкое движение двигателя, потому что импульсы шага запускаются пачками, а не постоянной частотой. Фактически, уровень микропереключения двигателя функционально понижается до более грубого режима, когда прерывание шагового двигателя запускает двойной или четырехступенчатый шаг. Таким образом, двигатели становятся громче, менее точными,
Интересным побочным эффектом является то, что если вы переключите принтер на основе Marlin с 1/16 микрошагов на 1/32 микрошагов и сохраните те же скорости печати, микропрограмма просто начнет удваивать шаг, снижая эффективный уровень микрошагов до уровня 1/16.
Микропрограммы на основе ARM также используют удвоение шага, но допустимые скорости шага, как правило, в ~ 8 раз выше, прежде чем использовать двойной / четырехшаговый степпинг. Это может означать более высокие скорости и / или более плавное движение.
Еще одна проблема с 8-битными AVR заключается в отсутствии аппаратной плавающей запятой и необходимости тратить много тактов на высокоточные вычисления или обработку очень больших чисел. Дельта-кинематика, функции автоматического выравнивания, вычисления перемещений с чрезвычайно большим числом шагов для больших принтеров и другие расширенные функциональные возможности занимают много тактов на 8-битном процессоре. Плохой дизайн прошивки или небрежное добавление функции, требующей нескольких дополнительных квадратных корней и функций триггера, могут полностью погасить процессор. Этот вид ползучести и раздувания кода со временем серьезно повлиял на производительность Марлина, так как люди все больше и больше спрашивают о старом AVR.
Для сравнения, 32-битный процессор имеет не только более быстрые тактовые частоты и больше тактовых циклов, он также способен выполнять гораздо более сложную математику за меньшее количество тактовых циклов, потому что он имеет выделенную аппаратную функциональность, которая выполняет многие из этапов 8-битных. процессор должен делать в софте.
Работают ли 8-битные процессоры? Несомненно, они работают на удивление хорошо для того, что они есть и что мы просим от них. Но они, безусловно, ограничивают производительность и возможности современных 3D-принтеров. Даже нынешнее поколение 32-битных процессоров уже превосходит по производительности высокоскоростные принтеры и математически сложные функции. 8-битный процессор уже на два поколения отстает от того, что можно квалифицировать как «современный» контроллер 3D-принтера.