Цветная печать в каждый дом
Бюджетный вариант MMU для Marlin.
Несколько недель назад мне на глаза попался интересный DIY проект системы многоцветной печати - PicoMMU. Фишкой этого MMU является его минималистичность - всю работу по замене филамента делают один шаговый двигатель Nema17 и одна сервомашинка es3004.
В моём KP3s скучали неиспользуемые разъёмы под серву и пятый драйвер шагового двигателя, а отсутствие поддержки PicoMMU в Marlin воспринималось как личный вызов. Вишенкой на торте стали вплавляемые гайки M3 на которых держится вся конструкция PicoMMU - неделей ранее мне приехал набор таких гаек и руки прямо-таки чесались что-нибудь куда-нибудь вплавить дабы посмотреть, что же из этого выйдет.
Процесс сборки описывать не буду, на сайте разработчика есть и фото важных моментов и ссылка на видео всего процесса сборки. Мне пришлось слегка модифицировать MMU и использовать более крупную серву mg996r и другие фитинги для тефлоновой трубки - доставку задержали и пришлось изобразить им замену из подручных материалов.
Стойку для катушек собрал из профиля от моего первого 3D принтера.
Хаб для филамента закрепил хомутом прямо на двигателе экструдера.
Итоговый вариант выглядел так.
Анализ макросов для klipper показал, что шаговый двигатель PicoMMU используется только для смены филамента, после чего вся работа по протяжке филамента от катушки до сопла ложится на двигатель экструдера. Решение, на мой взгляд, странное, мне больше нравится вариант командной работы.
Управление сервоприводом в Marlin реализовано давным-давно, поэтому переключение между катушками никаких сложностей не вызывает, нужно только вручную отправить несколько команд M280 и подобрать оптимальные углы для каждой из катушек.
А вот с подачей филамента всё не так радужно - одновременная работа двух шаговых двигателей для подачи филамента возможна, но только при одинаковом количестве шагов на миллиметр. Импульсы step посылаются одновременно на оба двигателя, а планировщик при этом даже не подозревает, что двигателей экструдера два.
В планировщике двигатель экструдера только один. При наличии нескольких экструдеров между ними можно переключаться, но активным в каждый момент времени будет только один из них. Теоретически можно обозвать двигатель MMU ещё одной осью и в коде добавить синхронизацию вращения этой оси и движения экструдера, но это плохой вариант. Во-первых такая модификация кода делает это решение недоступным большинству пользователей, а во-вторых, если уж всё равно лезть в код, то можно придумать вариант и поизящнее, чтобы его потом не стыдно было в официальный репозиторий отправить.
К счастью есть и другой путь решения этой проблемы. В те далёкие времена, когда дельты ещё даже и не собирались вымирать, для них был придуман “алмазный” хотенд - безумная помесь сопла с нагревательным блоком и тремя входами для филамента. Для принтеров с менее замысловатой кинематикой китайцы делают циклопов - хотенды с двумя входами под филамент, гораздо более компактные и удобные в установке.
В Marlin для таких хотендов есть специальный режим работы, когда несколько филаментов смешиваются в заданной пропорции непосредственно в хотенде. При некоторой доле воображения и при поддержке могучего математического аппарата средней школы вполне можно заставить два двигателя подавать филамент с одинаковой скоростью, что как раз и требуется для их совместной работы.
Настройка прошивки и слайсера
Теперь перейдём к практической части.
Для начала настроим сервопривод, это почти просто.
В Configuration.h заявим о наличии сервы в количестве одной штуки
#define NUM_SERVOS 1
времени её переключения в пол секунды
#define SERVO_DELAY { 500 }и использовании режима “не жужжи”, a.k.a отключение после перемещения.
#define DEACTIVATE_SERVOS_AFTER_MOVE
Такой смелый набор параметров вызывает у Marlin некоторые сомнения в здравомыслии пользователя, но эти сомнения легко развеять, если закомментировать в файле SanityCheck.h строку, вызывающую ошибку. По какой-то причине функция “не жужжи” обязательно требует, чтобы сервопривод использовался для одной из пяти конкретных ролей, а не просто так. Но требование это, несмотря на всю свою строгость, совершенно не обязательное и функционал работает и для вольнонаёмной сервы.
Сервопривод в PicoMMU работает под довольно большой нагрузкой и может немного недоворачивать ось. Для подачи филамента это не критично, но мотор сервопривода при этом сам не отключится и будет продолжать жужжать, вызывая раздражение у всех причастных и сильно сокращая срок службы самой сервы. Функция “не жужжи” эту проблему и решает, поэтому её использование крайне желательно.
Теперь можно собрать прошивку, покрутить сервой и подобрать углы поворота, на которых она оптимально зажимает филамент от каждой катушки. В моём случае углы оказались 28, 61, 90 и 115 градусов.
Миксующий экструдер включается ещё проще.
В Configuration.h включаем соответствующий режим
#define MIXING_EXTRUDER
По-умолчанию там уже указано два двигателя экструдеров.
#define MIXING_STEPPERS 2
Перфекционисты так же могут уменьшить количество виртуальных голов до числа катушек в MMU, но если дефицита памяти нет, это можно и не делать.
#define MIXING_VIRTUAL_TOOLS 4
Тут могут вылезти заботливо прикопанные грабли - LIN_ADVANCE вместе с MIXING_EXTRUDER не поддерживается. Можно ли эту ошибку игнорировать я не проверял, начать можно и без LA.
Микс по-умолчанию идёт в соотношении 100 к 0, что означает, что двигатель экструдера работает в гордом одиночестве и принтер может использоваться и без MMU.
На KP3S штатно стоит титан, у моего 794.56 шага на мм при микрошаге 1/16. Для шаговика MMU из тихих драйверов нашлись только древние LV8729 с микрошагом 1/128, количество шагов на мм с ними получилось 1463.46.
Получается, что для подачи филамента двумя шаговиками на 1 мм нужно 2258.02 шагов, из которых 794.56 должно прийтись на двигатель экструдера, а 1463.46 - на двигатель MMU.
В слайсере в стартовом коде прописываем рецепт полученной смеси, добавив заодно и перевод сервы в нейтральное положение
Команды M163 задают пропорции, в которых шаги экструдера будут делиться между шаговыми двигателями. В моём случае это 794.56 к 1463.46.
Результат нормируется на единицу и в меню Marlin соотношение отображается как 35% и 65%. В меню его менять не стоит, т.к. при этом потеряется полпроцента точности, а для синхронной подачи филамента это много.
Команды M164 сохраняют заданное соотношение шагов для четырех виртуальных инструментов. Это нужно, чтобы команды T0-T3, добавляемые слайсером при смене филамента, не ломали синхронное движение двигателей экструдера и MMU.
Где именно в интерфейсе Cura настраивается совместное использование разными экструдерами одного сопла и нагревателя я не нашёл, поэтому прописал нужные строчки непосредственно в json файл с описанием принтера.
"machine_extruders_share_heater": { "default_value": true },"machine_extruders_share_nozzle": { "default_value": true },Без этих параметров Cura пытается динамически управлять нагревом и снижает температуру первого (и единственного) сопла при переключении с первого экструдера на любой другой.
Для каждого из 4-х “экструдеров” (это Cura, она так видит) прописываем код начала и конца работы, т.е. загрузку и выгрузку филамента. Код для всех четырёх почти одинаковый, различаются только углы поворота сервы.
Тут есть два важных нюанса.
Первый - это переключение между катушками. Производится оно поворотом сервопривода и при тестировании в ручном режиме отрабатывало идеально. А при печати тот же G-код вёл себя, мягко говоря странно - переключение на новую катушку происходило до начала выгрузки филамента, после чего мотор MMU вытягивал филамент новой катушки, а мотор экструдера выталкивал филамент старой. Причина в особенности управления сервоприводом в Marlin - планировщик используется только для управления шаговыми двигателями и все команды на перемещение шаговых двигателей ложатся в буфер и выполняются, когда до них дойдет очередь. Команда M280 (управление сервоприводом) исполняется сразу, как только парсер до неё доберётся. В сумме это приводит к тому, что серва поворачивалась не дожидаясь окончания выгрузки филамента. В ручном режиме команды я вводил построчно, поэтому проблем с выгрузкой и загрузкой не возникало. На такой случай в Marlin есть специальная команда M400, останавливающая выполнение всех последующих команд до окончания движения (опустошения буфера планировщика). Добавление M400 перед вызовом M280 решает проблему рассинхронизации и выгрузка и загрузка проходят корректно.
Второй важный нюанс - это переключение между режимами движения в абсолютных и относительных координатах. Cura сбрасывает положение экструдера в 0 перед окончанием работы одного экструдера (кодом выгрузки филамента) и началом работы следующего (кодом загрузки филамента). Загрузка и выгрузка филамента происходят в относительных координатах, но эти перемещения учитываются и меняют текущее положение экструдера. Если после загрузки не сделать сброс положения экструдера ещё раз (G92 E0), то невинная команда G1 E-1, исполненная в абсолютных координатах, из “откатись на миллиметр назад, что бы сопло не сопливило” превращается в “выгрузи немедленно всё, что ты сейчас загрузил”.
Поскольку это мой первый опыт с MMU, то код загрузки и выгрузки оставлен на уровне “работает и ладно”.
Загрузка происходит в четыре действия - переключение на новую катушку, быстрая подача филамента до экструдера, медленная подача до хотенда (в этой части мотор экструдер должен зацепить филамент и направить его в хотенд) и ещё более медленная подача до сопла. Мастера цветной печати наверняка знают, как последнюю часть убрать в печать переходной башни, но я с этой премудростью пока не разобрался.
Выгрузка происходит в три действия - короткий рывок назад внутри термобарьера, пауза в виде очень медленного движения вперёд и быстрое движение до выхода филамента из хаба и освобождения места для следующего. Эта занимательная гимнастика нужна для формирования заостренного кончика филамента, который позволит вытащить пруток через экструдер и хаб и потом загрузить его обратно.
Установка ножа для филамента позволяет упростить процесс выгрузки, но это совсем другая история.
Параметры движения сильно зависят от типа используемого пластика и расстояний от хаба до экструдера и сопла, поэтому ни на какую универсальность не претендуют.
Я использовал PLA, поскольку это единственный тип пластика, четыре катушки которого у меня нашлось.
Сочетание цветов так себе, но технически результат оказался вполне приличным. Так же очень порадовал штатный экструдер Titan, он весьма уверенно справлялся с автоматической загрузкой филамента, подаваемого MMU.
BOM a.k.a за чей счёт этот банкет
Шаговый двигатель Nema17 у меня уже был, его покупать не пришлось. Обрезок ремня GT2 длиной 23 см тоже в закромах нашелся. Остальное было заказано в китае.
Оси на четырёхцветную модель нужны длиной 90мм, но я таких не нашёл и взял по 164мм.
Подшипники нужны по 4 штуки двух размеров, продаются они по 10, т.е. по два с половиной комплекта.
Серву можно использовать 996-ю, она дешевле. Я в итоге на ней и собрал, т.к. доставка 3004-й задержалась, а 996-я уже была.
Сушилки для филамента у меня нет, поэтому я стараюсь лишний раз принтер в воду не погружать. В таком щадящем режиме эксплуатации винты из нержавейки вполне можно заменить винтами из обычной оцинкованной стали из ближайшего строительного магазина.
К дополнительным расходам можно отнести замену термобарьера на биметалл, так как родной с тонкой тефлоновой трубкой вышел из чата ещё процессе отладки.
Итого за небольшую, по меркам 3D печати, сумму получилась рабочая система для цветной печати.
Модификации и альтернативы
На printables.com есть несколько модификаций для PicoMMU.
Наиболее полезные из них - это вариант под 5 цветов и варианты под сервоприводы других размеров MG996 и MG90. Последний, правда, вызывает некоторые опасения, ввиду миниатюрности данной сервы.
Там же можно найти ра разнообразные модели буферов для филамента, в том числе и устанавливаемые непосредственно на PicoMMU.
Ещё там представлен альтернативный вариант PicoMMU под названием MMX.
Разработчики MMX вдохновились минималистичностью PicoMMU, но полностью переработали конструкцию. Управление по-прежнему осуществляется сервоприводом и одним шаговым двигателем, но для подачи филамента используются обе BMG шестерни, а не одна и ролик, как это сделано в PicoMMU. Также для более надёжного отключения подачи в MMX добавлены миниатюрные магниты, поднимающие прижимной рычаг, когда черва перестаёт на него давить. В PicoMMU это происходит за счёт упругости самого филамента.
Эпилог
Результат использования PicoMMU, для меня лично, оказался несколько противоречивым. Несомненным достоинствам этого проекта является возможность его повторить без использования каких-то специальных знаний (умение собрать прошивку под свой принтер я к таковым не отношу).
С другой стороны за те же деньги можно купить 4 BMG экструдера с шаговыми двигателями и TMC драйверами. А поскольку одновременно работать они не будут, то все 4 драйвера (можно больше) могут использовать общие линии step и dir. Сервопривод при этом можно задействовать для отрезания филамента при смене катушки.
Вариант с раздельными драйверами потребует доработки кода Marlin, но по-хорошему планировщик всё равно стоит доработать, чтобы снизить нагрузку от большого числа шагов на миллиметр и вернуть возможность использовать LA.
Полезные ссылки
Проект PicoMMU
https://github.com/lhndo/LH-Stinger/wiki/Pico-MMU
Модификация под 5 катушек филамента
https://www.printables.com/model/1279307-pico-mmu-5-lanes-belt-drive
MMX Multi-Material Extruder
https://www.printables.com/model/1181017-mmx-multi-material-extruder-exclusive-final-releas
Еще больше интересных статей
Первый год знакомства с Picaso XL PRO S2, впечатления, проблемы, решения и заметки.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Решил написать эту статью как памятку для пользователей 3Д...
Кто-то искал распиновку разъема головки ANYCUBIC Kobra2
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Я планирую применить эту...
Blue Pill & SSD1306, ну очень маленькие.., но 32 бит!
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Решил я тут попробовать перейти с 8 бит на 32.
Готовы...





Комментарии и вопросы
Ничего страшного, как нибудь п...
Классная работа! Подарок с душ...
Топовый коммент от прошаренног...
Здравствуйте. Прошу помочь сов...
в Configuration_adv.h #de...
Видел статьи и видосы на ютубе...
Добрый день, уважаемые почитат...