Marlin против Klipper: выбираем прошивку для 3D-принтера

28 апреля 2023
0 комментариев

Для того чтобы оживить 3D-принтер, требуется прошивка, управляющая всеми активными компонентами, и в этой статье мы рассмотрим два распространенных варианта с несколько разным устройством и функционалом — Marlin и Klipper.

Marlin против Klipper: выбираем прошивку для 3D-принтера

Marlin появился в 2011 году и с тех пор остается самой распространенной прошивкой FDM 3D-принтеров. Первая версия Marlin разработана нидерландским инженером-программистом Эриком ван дер Залмом для аддитивных систем от Ultimaker и различных ЧПУ-станков, но быстро получила широчайшее распространение в 3D-принтерах от других производителей. Изначально прошивка была рассчитана на работу в связке с недорогими 8-разрядными микроконтроллерами Arduino, но в текущем виде поддерживает и 32-битные платы.

Klipper появился пять лет спустя, в 2016 году. Разработкой этой прошивки занимался Кевин O’Коннор, решивший, что производительность пора повышать. Так как вычислительных мощностей бортовых микроконтроллеров в то время не хватало для имплементации продвинутого функционала, Кевин решил задействовать дополнительные, внешние процессоры. Как правило, в этой роли используются микрокомпьютеры Raspberry Pi, хотя подойдет любая аналогичная плата на Linux.

В Klipper дополнительный компьютер отвечает за основную массу вычислений, а разгруженному бортовому микроконтроллеру остается лишь выполнять роль интерфейса — непосредственно управлять работой двигателей, нагревателей, вентиляторов и так далее.

В 2019 году текущая команда разработчиков Marlin решила отыграться и выпустила прошивку второго поколения. Этот вариант поддерживает новые, более мощные 32-разрядные платы, позволяющие конкурировать с Klipper в плане производительности и продвинутого функционала.

Архитектура

Marlin против Klipper: выбираем прошивку для 3D-принтера

Marlin написан на языке C++ и совместим с широким спектром плат и 3D-принтеров. После компиляции и загрузки в контроллер для управления достаточно клавиатуры или энкодера, а машинный код (G-код) считывается с карт памяти — обычно SD или Micro SD.

Прошивка Klipper написана на языке С и загружается в бортовой контроллер, а контроллер подключается к внешнему компьютеру, например Raspberry Pi, через USB. На Raspberry Pi, в свою очередь, устанавливается программа Klippy, по большей части написанная на языке Python. Эта программа считывает подготовленный в слайсере G-код и проводит необходимые вычисления на Raspberry Pi, затем посылает синхронизированный поток команд на бортовой контроллер, а тот уже управляет электрическими и электромеханическими компонентами 3D-принтера.

Из-за такой схемы при использовании Klipper бортовой дисплей 3D-принтера обычно оказывается лишним: как правило, графические интерфейсы подключаются к внешнему компьютеру.

Конфигурация

Marlin против Klipper: выбираем прошивку для 3D-принтера

Для того чтобы изменить конфигурацию Marlin, необходимо внести изменения в один или два специальных файла — configuration.h и configuration-adv.h. Эти файлы содержат директивы компилятора, то есть сообщают компилятору, что необходимо сделать для сборки прошивки.

Внесение изменений в эти файлы может быть сложной задачей для новичков. К счастью, для большинства 3D-принтеров доступны готовые сборки, а также различные онлайн-руководства по установке и настройке. Важный момент в том, что любые изменения конфигурации требуют перепрошивки, к чему мы еще вернемся.

Конфигурация Klipper хранится в редактируемых текстовых файлах, считываемых при каждой загрузке. Изменять эти файлы относительно легко, а необходимость в последующей перепрошивке отсутствует, что весьма удобно. С другой стороны, онлайн-поддержка пользователей Klipper не так развита, как сообщество пользователей Marlin.

Установка

Marlin против Klipper: выбираем прошивку для 3D-принтера

Установка или обновление настроенной и скомпилированной прошивки Marlin на целевой контроллер обычно осуществляется с помощью USB-кабеля или SD-карты. Традиционно процесс выполнялся через среду Arduino IDE, но для 32-битных плат это обычно делается с помощью платформы PlatformIO с привязкой к VSCode. Разработчики Marlin подготовили удобные пошаговые инструкции.

В случае с Klipper прошивку также необходимо загрузить в контроллер, но в некоторых случаях может потребоваться отключение дисплея 3D-принтера. Как упоминалось выше, при внесении изменений в конфигурацию повторная установка прошивки не требуется.


Установка компонентов Klipper на Raspberry Pi или другие хост-устройства на базе Linux может быть более сложной задачей. Ранние версии пользовались репутацией сложных и не очень понятных неопытным пользователям, но ситуация заметно улучшилась после появления улучшенной документации и вспомогательной программы KIAUH, созданной специально для установки и обновления компонентов Klipper.

Еще один популярный вариант — использование образов Raspberry Pi с предварительно установленной операционной системой и вспомогательными утилитами. Наиболее распространенные — MainsailOS и FluiddPi для наиболее популярных пользовательских интерфейсов Klipper (описанных ниже). Также существуют предварительно настроенные образы для разных семейств 3D-принтеров. Установка в этом случае сводится к переносу образа на SD-карту и выполнению нескольких простых шагов настройки.

Интеграция с надстройками

Marlin против Klipper: выбираем прошивку для 3D-принтера

Для многих пользователей надстройка Marlin дополнительным программным обеспечением, таким как OctoPrint, стала обязательной. Marlin и OctoPrint — мощная комбинация, обеспечивающая возможность удаленного управления 3D-принтером и наблюдения в режиме реального времени с помощью камеры.

Подключаемые модули OctoPrint обеспечивают и другой интересный функционал. Например, утилита Obico, ранее известная как Spaghetti Detective, автоматически отслеживает появление «вермишели» и останавливает 3D-печать, чтобы филамент не тратился впустую.

OctoPrint связывается с прошивкой Marlin через USB, используя строки команд G-кода. Также предоставляется богатый браузерный интерфейс: его можно установить либо вручную, как любую другую программу, работающую на Raspberry Pi, либо как часть полного образа Raspberry Pi под названием OctoPi.

Klipper изначально разработан с учетом возможности использования OctoPrint в качестве пользовательского интерфейса. Модуль OctoKlipper также предлагает различные специальные функции, совместимые с Klipper, но следует иметь в виду, что OctoPrint тоже потребляет ресурсы Raspberry Pi, отбирая вычислительные мощности у Klipper, и может вызывать сбои при перехвате G-кода. По этим причинам разработаны специальные, зачастую более предпочтительные пользовательские интерфейсы для Klipper, такие как Fluidd и Mainsail — тоже с управлением через браузер, подробной информацией о параметрах печати, богатым выбором настроек и поддержкой веб-камер.

Пользовательские интерфейсы подключаются через Moonraker — интерфейс программирования (API), позволяющий взаимодействовать с Klipper и работающий на той же аппаратной платформе, например Raspberry Pi. Все это можно установить вручную с помощью KIAUH или как часть образов Raspberry Pi, упомянутых в предыдущем разделе.

Moonraker также предоставляет средства интеграции других надстроек с Klipper. Вышеупомянутая Obico — это один из вариантов. Еще одна полезная программа — KlipperScreen для взаимодействия с Klipper напрямую через интерфейс с сенсорным экраном, а не через браузер. Поддерживаются практически любые сенсорные экраны, которые можно подключить к Raspberry Pi.

Функциональность

Marlin против Klipper: выбираем прошивку для 3D-принтера

Результат использования функции гашения вибраций (справа)

На базовом уровне Marlin и Klipper предлагают аналогичный функционал, но Klipper обладает несколькими уникальными, продвинутыми способностями.

Кинематика и разрешение. Klipper использует более сложные алгоритмы позиционирования и позволяет добиваться более высокой детализации. Он может выполнять больше шагов в секунду, чем Marlin, что может благоприятно отражаться на качестве и скорости печати.

Линейное продвижение/подача под давлением. Marlin имеет функцию линейного продвижения (Linear Advance), обеспечивающую более точный контроль подачи расплава, что позволяет выстраивать более четкие углы. Версия этой функции в Klipper называется плавным повышением давления (Smooth Pressure Advance). В Klipper используется более простой и точный метод настройки этой функции, а продвинутые алгоритмы повышают производительность. Минус в том, что функция Pressure Advance несовместима с некоторыми другими, например укладкой расплава по инерции.

Гашение вибраций. В Klipper есть функция Input Shaping, позволяющая компенсировать вибрации при позиционировании головки, вызывающие «звон» на поверхностях изделий. Делается это автоматически с помощью акселерометра, установленного на каретку 3D-принтера. Эта функция позволяет печатать на более высоких скоростях без потери качества.

Поддержка нескольких контроллеров. Klipper способен работать сразу с несколькими контроллерами, что может быть полезно в тех случаях, когда необходима установка дополнительных шаговых двигателей или периферийных устройств за пределами возможностей одной платы. Klipper даже может использовать в качестве контролера сам Raspberry Pi с поддержкой дополнительных устройств через контакты интерфейса ввода/вывода общего назначения (GPIO).

Существуют и другие функциональные различия между двумя Marlin и Klipper. Например, Marlin поддерживает большой набор разновидностей G-кода. Klipper поддерживает ключевые параметры G-кода, но чаще ошибается при использовании макросов. Обе прошивки активно развиваются, но подходы разработчиков разнятся.

Что мы имеем в итоге

Marlin 2.1 и последующие версии на 32-разрядных платах обеспечивают достаточную вычислительную мощность для подавляющего большинства 3D-принтеров. Пользователи могут рассчитывать на огромную накопленную базу знаний, простую установку и настройку и достаточную функциональность, особенно при использовании в связке с OctoPrint. Большинство производителей по-прежнему предпочитают устанавливать на свое оборудование Marlin, так как это проверенное временем решение.

Klipper сложнее установить и настроить, зато потом это компенсируется простотой изменения конфигурации. Klipper также поддерживает ряд уникальных функций, в том числе позволяющих сохранять качество при высоких скоростях печати. Совместимость с разным аппаратным обеспечением относительно ограничена, если сравнивать с Marlin, но постоянно растет.