Инструкции по подключению и настройке системы многоцветной печати ERCF v2
На самом деле прошивка платы MMU ничем не отличается от прошивки платы CAN в голове, процедуру которой мы подробно описали в статье Прошивка Fly SB-2040V3. Изменяются только параметры, которые необходимо указать во время сборки прошивки.
Для перевода платы в режим DFU вам нужно зажать кнопку Boot (на схеме ниже) и не отпуская её подключить плату к хост-комьютеру. После подключения кнопку можно отпустить.
Ну что же, надеюсь вы справились с прошивкой и получили UUID платы MMU. Настало время добавить соответствующие модули в ваш klipper.
Подключаемся по SSH и запускаем команды:
cd ~
git clone https://github.com/moggieuk/Happy-Hare.git
Система скачает репозиторий HappyHare и сохранит на локальный диск. Переходим в каталог HappyHare:
cd Happy-Hare
Если предыдущие шаги увенчались успехом, вы будете видеть следующий вывод:
Запускаем программу установки:
cd ~/Happy-Hare
./install.sh -i
Система спросит, какой тип ERCF мы планируем использовать?
Так как мы устанавливаем и настраиваем ERCF v2, то нажимаем кнопку 2
.
Следующим шагом система спрашивает, сколько шлюзов мы имеем. Тут всё просто - указываете то количество, сколько у вас в системе ERCF.
Далее скрипт установки просит уточнить, какую плату управления для нашего ERCF мы используем. Выбираете номер платы, которая используется в вашей ERCF.
Теперь скрипт спрашивает, хотим ли мы использовать для селектора технологию TMC Stallguard (безсенсорное наведение, то есть поиск дома без использования концевых выключателей). Отказываемся, мы используем стандартные концевики. Нажимаем кнопку N
.
Скрипт предлагает включить поддержку светодиодов для подсветки выбранного шлюза и другой индикации. Если вы используете LED подсветку, введите Y
.
Выбираем тип сервопривода, у нас стоит MG-90S, поэтому выбираем 1
.
Скрипт уточняет, хотим ли мы использовать механизм отслеживания движения пластика с помощью встроенного в ERCF энкодера, для предотвращения ошибок, когда пластик по той или иной причине не движется к голове во время печати. Соглашаемся, вводим Y
.
Так как мы решили включить отслеживание движения пластика, система уточняет, хотим ли мы разрешить системе автоматически настраивать длину срабатывания. Соглашаемся, нажимаем Y
.
Нужно ли включать механизм бесконечной катушки, при котором в случае окончания пластика на одной катушке, система автоматически заменит пластик и продолжит печать. Соглашаемся, Y
.
Скрипт спрашивает, разрешаем ли мы добавить в ваш printer.cfg все файлы конфигураций для работы ERCF. Соглашаемся, вводим Y
.
Добавлять ли возможность управления MMU в ваш цифро-буквенный экран Mini 12864. Так как у нас используется цветной сенсорный экран, то отказываемся. Позже мы поставим специальное расширение для Klipper Screen. Вводим N
.
Нужна ли нам поддержка старых команд ERCF, по сути от первых версий. Если вы используете старую версию ERCF и у вас множество конфигов, заточенных под неё - то соглашаемся и добавляем. Если нет (а судя по тому, что вы читаете эту инструкцию, вы настраиваете ERCF в первый раз, а значит и старых макросов у вас нет), то вводим N
.
Добавить набор макросов для паузы/продолжения печати, специфических для ERCF. Реккомендуем добавить, при этом не забудьте заккоментировать соответствующие макросы, которые у вас уже установлены, иначе будет путаница, какой макрос используется. Соглашаемся, нажимаем Y
.
Добавить ли поддержку проекта EREC filament cutter - проект мода для ERCF, при котором используется не нож в голове, а нож, который устанавливается непосредственно на селектор ERCF и обрезает пластик перед затягиванием его в энкодер. Если вы не используете этот мод, то отвечаем N
.
Нужна ли поддержка макросов очистки для системы Blobifier. Если вы решили использовать эту систему, нажмите Y
. Если не планируете использовать данную систему, нажмите N
.
Это был финальный вопрос. После него скрипт выполнит установку и если всё прошло хорошо, мы получим следующий вывод:
Поздравляю, мы установили Happy Hare!
Ну что же, пришло время поставить расширения для KlipperScreen, позволяющее работать с ERCF непосредственно с сенсорного экрана.
Подключитесь к принтеру по SSH и выполните команды, предварительно заменив <num_gates>
на цифру, равную количеству цветов вашей системы ERCF :
cd ~
mv KlipperScreen KlipperScreen.orig
git clone https://github.com/moggieuk/KlipperScreen-Happy-Hare-Edition.git KlipperScreen
cd ~/KlipperScreen/happy_hare
./install_ks.sh -g <num_gates>
Поздравляю, расширение для KlipperScreen установлено! :)
Так как мы решили использовать светодиоды подсветки статуса для нашей системы ERCF, то нам необходимо поставить данный модуль.
Подключаемся к нашему принтеру по SSH и выполняем команды:
cd ~
git clone https://github.com/julianschill/klipper-led_effect.git
cd klipper-led_effect
./install-led_effect.sh
Если все сделано верно, мы получим следующий вывод:
Откройте вэб интерфейс вашего принтера в браузере и перейдите в раздел “Система”.
В нем нас интересует папка mmu.
Далее переходим в раздел base
:
В mmu.cfg
нам необходимо указать UUID вашей CAN платы MMU. Для этого комментируем строку serial: /dev/ttyACM1
и вместо неё добавляем строку canbus_uuid: 2b48cf429b2a
, где вместо 2b48cf429b2a подставляем UUID вашей платы MMU. Результат должен выглядеть вот так:
Нажимаем “сохранить и перезагрузить”, после чего принтер запуститься и мы сможем увидеть, что наш MMU подключен.
Не смотря на то, что при установке мы указали, какое количество шлюзов у нас используется, Happy Hare ставит 10 штук, это можно легко заметить через вэб интерфейс:
Давайте удалим те, которые не используются.
Далее я буду просто указывать названия файлов, благо я надеюсь вы уже освоили структуру папок и сможете самостоятельно найти нужны каталоги :)
Откроем файл mmu/base/mmu_hardware.cfg
и удалим лишние шлюзы в секции [mmu_sensors]:
Наши принтеры штатно поставляются с датчиком наличия пластика, но так как мы установили ERCF, данный датчик уже не будет использоваться. Необходимо убрать его из конфигурационных файлов, иначе он будет всё время вызывать ошибку.
Откроем файл printer.cfg и удалим строчку [include filament_sensor.cfg]
:
На наших принтерах имеются дополнительные, расширенные макросы паузы, отмены и так далее. Это штатные макросы, которые реккомендуются проектом Mainsail. Но так как мы решили добавить аналогичные макросы от проекта Happy Hare, то нам нужно удалить старые, что бы не было путаницы.
Открываем файл start_end.cfg
и удаляем следующие секции:
Так же необходимо выключить датчик пластика, который у нас прописан в стартовом макросе. Для этого удаляем из секции [gcode_macro PRINT_START]
следующие записи:
SET_FILAMENT_SENSOR SENSOR=Пластик ENABLE=0 # Выключаем датчик пластика
SET_FILAMENT_SENSOR SENSOR=Пластик ENABLE=1 # Включаем датчик пластика
Открываем файл start_end.cfg, находим секцию [gcode_macro PRINT_START] и меняем её содержимое на указанное ниже:
[gcode_macro PRINT_START]
gcode:
CLEAR_PAUSE
{% set bedtemp=params.BED |int%} # Получаем температуру стола из слайсера
{% set hotendtemp=params.EXTRUDER |int%} # Получаем температуру хотэнда из слайсера
{% set chambertemp=params.CHAMBER |default |int %} # Получаем температуру внутри печатной камеры из слайсера
M109 S{hotendtemp} # Запускаем нагрев хотэнда и не ждём окончания нагрева
M190 S {bedtemp} # Включаем нагрев стола на температуру из слайсера и ждём нагрева
G92 E0 # Обнуляем значение шагов экструдера
G32 # Запускаем поиск дома, потом выравнивание портала и поиск z-offcet
BED_MESH_PROFILE LOAD=default # Загружаем сохраненную карту стола
SET_LED LED=sb_leds GREEN=1 RED=1 BLUE=1 WHITE=1 # Включаем подсветку SB
SET_PIN PIN=beeper VALUE=1 # Начинаем пищать бипером
G4 P3000 # Пищим бипером 3000 миллисекунд
SET_PIN PIN=beeper VALUE=0 # Прекращаем пищать бипером
Открываем файл start_end.cfg, находим секцию [gcode_macro PRINT_END] и меняем её содержимое на указанное ниже:
[gcode_macro PRINT_END] # Макрос необходимо запускать после окончания печати. Добавьте его в конечный G-Code слайсера
gcode:
M400 # Ожидаем окончания текущего движения
G92 E0 # Обнуляем значение шагов экструдера
G91 # Переходим в относительные координаты
G0 Z1.00 X20.0 Y20.0 F6000 # Поднимаем сопло на 1 мм по Z и сдвигаем его на 20 мм вправо и 20 мм назад
G90 # Возвращаемся в абсолютные координаты
MMU_EJECT # Извлекаем прукток
MMU_END # Завершаем работу MMU
TURN_OFF_HEATERS # Отключаем все нагреватели
M107 # Выключаем вентиляторы обдува модели
BED_MESH_CLEAR # Очищаем карту стола
SET_PIN PIN=beeper VALUE=1 # Начинаем пищать бипером
G4 P3000 # Пищим бипером 3000 миллисекунд
SET_PIN PIN=beeper VALUE=0 # Прекращаем пищать бипером
G4 P3000 # Ждём 3000 миллисекунд между писками
SET_PIN PIN=beeper VALUE=1 # Начинаем пищать бипером
G4 P3000 # Пищим бипером 3000 миллисекунд
SET_PIN PIN=beeper VALUE=0 # Прекращаем пищать бипером
UPDATE_DELAYED_GCODE ID=powerOFF DURATION=300 # Ожидаем выключения 300 секунд.
Открываем файл mmu_hardware.cfg и находим секцию [mmu_sensors], в ней нас интересует две записи:
Нам нужно указать соответствующие пины на нашей голове. Если данных датчиков у вас нет или есть только один - просто оставьте соответствующий параметр пустым. У меня используется 2 датчика, поэтому я указываю их в следующем виде:
Если вы всё сделали правильно, то в вэб интерфейсе мы увидим следующую информацию:
У нас есть целый набор концевых выключателей, 2 в голове, а так же сколько то (в соответствии с количеством ваших шлюзов) на ERCF. Пришло время остановиться и тщательно проверить их работу.
Возьмите кусок пластика и пропихните его в голову до момента, как вы почувствуете срабатывание верхнего сенсора. Перегрузите информацию о концевых выключателях. Концевик Extruder должен стать красным:
Теперь протолкните пластик дальше (скорее всего вам прийдётся отщёлкнуть прижимной рычаг) и вы почувтсвуете и услышите срабатывание второго датчика, снова проверьте, отобразилось ли это в интерфейсе.
Обратите внимание на последовательность датчиков. То есть в начале должен сработать Extruder, только потом Toolhead
Теперь зажмём датчик дома для селектора:
На экране должно отобразиться срабатывание:
Теперь проверим таким же образом, корректно ли у нас срабатывают датчики пластика в шлюзах.
Возьмём кусок пластика и вставим в шлюз 0. Проверим, отобразилось ли наличие пластика в интерфейсе:
Таким же образом проверьте остальные датчики.
В консоли вэб интерфейса принтера вводим команду:
MMU_TEST_MOVE MOVE=100 SPEED=50
Принтер должен подать пластик и начать его выдавливать в сторону энкодера и принтера. Понятно, что пока мы не установили рычаг на сервопривод, можно временно прижать лапку рукой. Наша задача сейчас только убедиться, что мотор вращается в нужном нам направлении.
Если мотор вращается в неправильную сторону, вам нужно зайти в файл mmu_hardware.cfg
, найти секцию [stepper_mmu_gear]
и в параметре dir_pin
добавить или удалить восклицательный знак.
Теперь нужно проверить, что двигатель селектора вращается в нужную сторону. Выполним команду:
MMU_HOME
Селектор должен поехать в сторону концевого выключателя, сработает датчик и селектор остановиться. Если селектор поехал в противоположную сторону, снова откройте файл mmu_hardware.cfg,
в нем найдите секцию [stepper_mmu_selector]
и так же или добавьте или удалите восклицательный знак в параметре dir_pin.
Выполните команду:
MMU_ENCODER
Система выдаст текущее состояние энкодера:
Encoder position: 0.0
Runout detection: Disabled
Clog/Runout mode: Automatic (Detection length: 15.0)
Trigger headroom: 20.0 (Minimum observed: 15.0)
Flowrate: 0 %
Возьмите пластик и протолкните его спереди в энкодер. Снова выполните команду
MMU_ENCODER
Система должна выдать другое значение в параметре Encoder Position:
Encoder position: 44.0
Runout detection: Disabled
Clog/Runout mode: Automatic (Detection length: 15.0)
Trigger headroom: 20.0 (Minimum observed: 15.0)
Flowrate: 0 %
Если это так - то ваш энкодер работает корректно.
Если значение не изменилось, попробуйте добавить или убрать галочку в файле mmu_hardware.cfg,
в секции [mmu_encoder mmu_encoder]
в параметре encoder_pin.
На предыдущих шагах мы убедились, что наша система ERCF полностью работает с точки зрения аппаратной части. Моторы крутятся, концевые выключатели срабатывают. Пришло время калибровки.
В начале нам надо перевести сервопривод в поднятое положение, для этого вводим команду:
mmu_servo ANGLE=30
Так же вы можете сделать это с экрана Klipper Screen Happy Hare Editions, там имеется кнопка “Up servo”.
Обратите внимание, что если вы выполняете команду
mmu_servo ANGLE=30
, то вы принудительно задаёте угол подъёма сервопривода. Когда же вы поднимаете сервопривод через интерфейс Klipper Screen или командойMMUSERVOPOS=up
, то серва поднимается на угол, который задан в mmuparameters.cfg.
Теперь можно надеть рычаг сервопривода. Одевайте его так - что бы он был в максимально верхней позиции, которую возможно.
Закрутите болт крепления рычага.
Теперь введите команду:
mmu_servo ANGLE=125
Сервопривод опустит рычаг в нижнее положение:
Если всё так, то необходимо ввести новое значение 125 градусов в параметры ERCF. Переходим в файл mmu_parameters.cfg
и меняем параметр servo_down_angle
:
Обратите внимание, что значения, которые мы привели, в вашем случае могут отличаться. По сути, вы должны просто понять, как рычаг должен выглядеть и куда смотреть в поднятом и опущенном состоянии и добиться этого положения с помощью переменных
servo_down_angle
иservo_up_angle
Начиная с версии Happy Hare 2.4 вы можете сохранять значение угла сервопривода без изменения файла конфигурации и без перезагрузки klipper:
MMU_SERVO POS=up
# Поднять серву в верхнее положение
MMU_SERVO
Current servo angle: 125, Positions: {'down': 110, 'up': 125, 'move': 110}
# Если отправить запрос без аргументов, вы увидите базовые настройки
MMU_SERVO ANGLE=128
# Поднять серву на заданный угол (тут 128 градусов)
MMU_SERVO POS=up SAVE=1
# Сохранить текущее значение угла (128) для позиции "up"
Нам нужно задать, где именно находится каждый из шлюзов. Делается это довольно просто.
MMU_CALIBRATE_SELECTOR GATE=0
, где в параметре GATE
указываем номер шлюза, который мы калибруем в данный момент.Готово. Селектор ERCF поедет в дом и измерит расстояние, после чего автоматически его сохранит.
Повторяем операцию для всех шлюзов.
Последним шагом нам нужно откалибровать положение BYPASS (прямая подача пластика без ERCF). Повторяем для BYPASS те же шаги, только команду вводим следующую:
MMU_CALIBRATE_SELECTOR BYPASS=1
Поздравляю! Вы откалибровали положение шлюзов!
Заправляем пластик и подводим его к выходу из энкодера. Номер шлюза не имеет значения.
Выполните команду:
MMU_TEST_MOVE MOVE=100
Принтер опустит рычаг сервопривода селектора и выдавит 100 мм.
Измерьте получившийся конец. Если расхождение слишком велико (более 0,5мм), то введите команду:
MMU_CALIBRATE_GEAR MEASURED=102.5
Где в параметре MEASURED
укажите измеренную вами величину. Система автоматически пересчитает и сохранит новые значения передаточного числа.
Повторите тест, что бы убедиться, что калибровка прошла удачно.
Поместите пластик в шлюз 0. Пластика должно быть достаточно много, желательно метр.
Выполните команду:
MMU_CALIBRATE_ENCODER
Система автоматически выдавит и втянет длинный кусок пластика, повторит операцию 5 раз и рассчитает правильное разрешение энкодера, после чего сохранит новое значение:
Подключите вашу трубку подачи пластика к ERCF, убедитесь, что у вас нигде ничего не цепляет и трубка не перегибается.
Снимите трубку и измерьте её длину
Вычтите из длины трубки 40 мм.
Установите пластик в шлюз номер 0. Длина пластика должна быть на 20 см больше длины трубки подачи.
Полученное значение введите в параметре BOWDEN_LENGTH=745 при вызове команды:
MMU_CALIBRATE_BOWDEN BOWDEN_LENGTH=705
Система запустит автоматическую калибровку длины в 3 прохода. По окончании произойдёт автоматическое сохранение параметров.
Вставьте пластик в шлюз 1. Введите команду:
MMU_CALIBRATE_GATES GATE=1
Система автоматически втянет пластик, измерит его длину с помощью энкодера, повторит действие 3 раза и сохранит значения передаточного числа для шлюза 1.
Повторите процедуру для шлюзов 2,3 и так далее.
Шлюз 0 калибровать не нужно, мы уже откалибровали его на предыдущих шагах!!!
Депрессором (depressor) мы будем называть специальный рычаг, который размещён на портале и при нажатии на который происходит обрезка пластика.
Обычно я реккомендую настроить длину депрессора таким образом, что бы когда голова находилась в координате по X = 1, рычаг был почти полностью нажат, свободный ход его должен составлять около 1-2 мм.
На данном шаге нам нужно задать координаты начального положения головы (перед тем, как начнётся движение для обрезки) и конечного положения (когда нож полностью выдвинут и филамент обрезан).
Выполните команду G32
Передвиньте голову к вашему депрессору таким образом, что бы депрессор слегка касался ручки ножа.
Запишите координаты X и Y.
Передвиньте голову в такое положение, в котором депрессор полностью вдавил ручку и произошло полное обрезание пластика.
Запишите координаты X и У.
Теперь нам нужно указать эти координаты в файле mmu_macro_vars.cfg:
variable_pin_loc_xy
- координаты положения головы когда депрессор только слегка касается ручки ножа
variable_pin_loc_x_compressed
- координата положения головы по X, когда депрессор полностью вдавил ручку ножа.
По умолчанию в Happy Hare включен макрос формирования кончика, что бы включить макрос для обрезки пластика внутри головы, нам необходимо открыть файл mmu_parameters.cfg
и изменить значение в параметре form_tip_macro. По умолчанию в нём стоит _MMU_FORM_TIP
, нам нужно поставить _MMU_CUT_TIP
:
Так же необходимо изменить параметр force_form_tip_standalone
и поставить в нем значение 1, что бы мы всегда использовали алгоритм извлечения пластика, настроенный в ERCF, а не в слайсере:
Все приведённые ниже параметры вам нужно указывать с учётом вашего хотэнда, за исключением отключения сервопривода
(variable_gantry_servo_enabled : False)
Cнова открываем файл mmu_macro_vars.cfg
и изменяем в секции [gcode_macro _MMU_CUT_TIP_VARS]
следующие параметры:
Параметр | Старое значение | Новое значение |
variable_restore_position | True | False |
variable_blade_pos | 37,5 | 40 |
variable_retract_length | 32.5 | 34 |
variable_gantry_servo_enabled | True | False |
Сохраняемся, перезагружаемся и пробуем в начале заправить пластик, а потом его извлечь. Это всё можно сделать с экрана Klipper Screen или с помощью команд:
MMU_LOAD
- загрузка пластика в текущий инструмент
MMU_EJECT
- извлечение пластика
Поздравляю, если вы дошли до этого этапа и всё сработало, то значит вы настроили ERCF.
Если вы не планируете использовать систему очистки Blobifier, то переходите сразу к настройкам OrcaSlicer.
Если вы планируете использовать Blobifier, то переходите к следующему пункту.
Happy Hare позволяет синхронизировать редуктор ERCF с шаговым двигателем экструдера во время печати. Эта дополнительная функция увеличивает крутящий момент, с которым вытягивается нить, потенциально устраняя проблемы, связанные с трением. Однако очень важно поддерживать точное расстояние между шаговым двигателем основного экструдера и шаговым двигателем редуктора. Несоответствие скоростей перемещения нити между этими компонентами может привести к чрезмерному напряжению, истиранию нити или артефактам печати. Для устранения этой потенциальной проблемы можно использовать синхронизацию с обратной связью.
Синхронизация во время печати контролируется с помощью sync_to_extruder
в mmu_parameters.cfg.
Для включения нужно выставить в данном параметре значение 1.
Blobifier - это мод, позволяющий очищать сопло и продувать пластик в виде пластиковых трубочек или шариков. Это сильно уменьшает их размер и позволяет полноценно работать даже в принтерах с небольшим свободным местом, как Voron 2.4.
Инструкция по печати и сборке мода Blobifier не входит в рамки данного руководства. Мы исходим из того, что вы напечатали, собрали и подключили все компоненты, вам осталось только установить качалку сервопривода.
Набор скриптов Blobifier храниться по адресу /mmu/addons/ и состоит всего из 2 файлов. Сейчас нас интересует файл blobifier_hw.cfg
. Открываем его и вносим айди PIN для управления сервоприводом и для конецвого выключателя.
Сохраняемся, перезагружаемся.
Вводим команду:
BLOBIFIER_SERVO POS=out
Сервопривод должен стать в крайнее положение, при котором он будет полностью выдвинут.
Одеваем рычаг и фиксируем его болтом. Далее одеваем выдвижную лапку и так же фиксируем её болтом.
Вводим команду:
BLOBIFIER_SERVO POS=in
Выдвижная лапка должна полностью убраться. Вводим команды несколько раз, что бы убедиться, что у нас ничего нигде не заклинивает.
Открываем файл blobifier.cfg
Выполняем g32
С помощью кнопок подводим сопло к началу щётки и опускаем так, что бы сопло было погружено в щётку, но не слишком глубоко:
Записываем эти координаты и указываем в blobifier.cfg:
variable_brush_top - высота по z, при котором сопло погружено в щётку.
variable_clearance_z - расстояние, при котором сопло ходит над щёткой, но не задевает его.
variable_brush_start - координата начала щётки по оси X
Так же переводим сопло и устанавливаем его над выдвинутой лапкой, записываем координаты по x и z и добавляем в blobifier.cfg:
variable_purge_x - координата по x, при которой сопло находится над выдвинутой лапкой.
variable_tray_top - высота по z над выдвинутой лапкой
Нажимаем сохранить и перезагрузить.
Включение механизма достаточно просто. Открываем макрос mmu_macro_vars.cfg
и добавляем в секцию [gcode_macro _MMU_SEQUENCE_VARS]
в параметр variable_user_post_load_extension
значение 'BLOBIFIER'
:
Для начала нам нужно проверить, что светодиоды подключены именно на тот PIN платы MMU, который нам нужен.
Для этого открываем файл mmu.cfg и сверяем прописанный PIN с тем, что указан на схеме распиновки платы:
Далее нам нужно включить подсветку, для этого переходим в файл mmu_hardware.cfg
и проверить, правильный ли тип подсветки выбран. В наших комплектах используется светодиодная лента GRB:
После этого светодиодная лента должна начать работать.
Обычно такие проблемы решаются изменением параметров работы двигателя и драйвера.
Открываем файл mmu_hardware.cfg
, находим секцию [tmc2209 stepper_mmu_gear]
, в ней меняем в параметре interpolate
значение на False
:
В этой же секции добавляем ещё несколько параметров:
driver_TBL: 2
driver_HSTRT: 5
driver_TOFF: 2
driver_HEND: 3
driver_IHOLDDELAY: 6
Выглядеть это будет вот так:
В этом же файле находим секцию [stepper_mmu_gear]
, в ней находим параметр microsteps
и меняем его на 8
:
Часто ошибка timer_to_close возникает при продувке пластика с использованием Blobifier, нам помогло уменьшение мощности обдува. Открываем файл blobifier.cfg
и находим в нём параметр variable_part_cooling_fan
и ставим в нем значение 0.5
.