BMCU к принтеру на Klipper. Часть 4.
Дошли руки продолжить.
BMCU-Klipper снова обновился, до версии 1.1.1. Обновилась и прошивка BMCU, до версии 1.0.4.
Обновился. Обновление аналогично установке. После чего на главной панели появилось приглашение прошить саму BMCU. Прошил через Download latest... Снова при калибровке все сенсоры филамента отмечаются сработавшими. Скомпилировал без флага поддержки dual mircoswitch, прошил - все заработало, откалибровалось.
Третий модуль починить пока не смог. Разобрал, заметил, что провода на двигатель плюс и минус поменяны, не как на других модулях. Перепаял. Модуль откалибровался, но работал нестабильно. После обновления прошивки появилась прежняя ошибка калибровки.
Итого имеем подключенную, откалиброванную и работающую BMCU на 3 модуля.
Инструкция по дальнейшей настройке есть в Settings -> System -> Setup and OrcaSlicer settings. Опишу своими словами.
Заранее извиняюсь за простыню текста, спойлер не нашел в редакторе, а стиль кода напрочь вырезает из текста кода все переносы строки, структурировал текст, как смог.
Настраиваем экструдер и макросы
Settings -> Generic toolhead integration
Указал экструдер, к которому у меня подключена MMU, у меня экструдер один - extruder.
Дальше для одноэкструдерного принтера надо настроить 2 макроса:
- Toolhead preparation macro, его вызывает BMCU в конце процесса загрузки филамента, в нем принтер должен затянуть филамент в экструдер, по окончанию голова должна быть готова к продолжению печати.
- Before pullback macro, его вызывает BMCU перед выгрузкой филамента, в нем принтер должен вытянуть филамент, сформировать кончик с минимумом наплывов и соплей, и выгрузить его из экструдера, по окончанию филамент должен быть полностью свободен, чтобы BMCU мог выгрузить его.
Свои макросы привел в конце статьи, чтобы не загромождать текст.
Видно, что второй макрос писал мне AI-ассистент, а первый это модернизированный LOAD для KlipperScreen. Макросы корявые, закоментировал все, что напрямую не относится к загрузке, выгрузке, нет контроля температуры, парковки над коробочкой для комков и т.д., просто чтобы работало, для теста. У меня они работают.
Указываем макросы в соответствующих полях. Нажать Save endpoint.
Настраиваем routing
Dashboard -> Routing
Нужно указать, к какому экструдеру подключен BMCU. У меня экструдер один, поэтому указываю его.
Проверка
Если теперь вставить в канал филамент до срабатывания датчика филамента, то в Dashboard -> Channels должна стать активна кнопка Load, по нажатию на нее филамент загружается до упора в шестерни фидера, затем срабатывает макрос и филамент загружается в экструдер. Если затем нажать кнопку Unload, то сработает макрос, который освободит нить из экструдера, затем BMCU выгрузит ее на расстояние Retraction length, указанное в настройках канала (кнопка Edit). Я оставил 20 см, которые были по дефолту.
Как в BMCU выбирается филамент
BMCU-Klipper создает несколько инструментов T(номер). Сначала идут инструменты с ручным управлением филамента - по старинке. У меня это T0, т.к. один экструдер. Если я при печати выбираю T0, BMCU выгружает из экструдера все нити филамента и я должен загрузить его вручную. Они создаются по числу экструдеров. Т.е. на Snapmaker U1 будет T0-T3, т.к. у него 4 головы.
Далее идут инструменты с автоматическим управлением филаментом, у меня это T1, T2, T3, т.к. 3 подключенных канала на BMCU.
Если я при печати выбираю инструмент T1, то BMCU делает выгрузку предыдущего активного филамента, затем загрузку филамента из 1 канала BMCU, т.к. с T1 связан 1 канал. Что BMCU будет делать, если предыдущий инструмент T0, не знаю, надо будет протестировать.
Настройка слайсера Prusa Slicer 2.9.6
В инструкции указаны настройки OrcaSlicer, но я перенес их полностью без изменения, и все заработало.
Настройки принтера -> Характеристики принтера
Количество экструдеров поставил 4 (T0 с ручным управлением + 3 канала BMCU).
Поставил галочку "Одноэкструдерный мультиматериальный принтер".
Настройки принтера -> Пользовательский G-код -> Стартовый G-код
Нужно добавить конструкцию
BMCU_PRINT_BEGIN SCHEMA=1 RESET=1
{if is_extruder_used[0]}BMCU_PRINT_MAP TOOL=0{endif}
{if is_extruder_used[1]}BMCU_PRINT_MAP TOOL=1 MATERIAL="{filament_type[1]}" COLOR="{filament_colour[1]}"{endif}
{if is_extruder_used[2]}BMCU_PRINT_MAP TOOL=2 MATERIAL="{filament_type[2]}" COLOR="{filament_colour[2]}"{endif}
{if is_extruder_used[3]}BMCU_PRINT_MAP TOOL=3 MATERIAL="{filament_type[3]}" COLOR="{filament_colour[3]}"{endif}
{if is_extruder_used[4]}BMCU_PRINT_MAP TOOL=4 MATERIAL="{filament_type[4]}" COLOR="{filament_colour[4]}"{endif}
куда-нибудь в начало, и конструкцию
BMCU_TOOL_CHANGE TOOL={initial_extruder}
в место, где хотэнд уже горячий и готов к экcтрузии.
Настройки принтера -> Пользовательский G-код -> G-код смены цвета/прутка
Нужно ввести значение
{
"BMCU_TOOL_CHANGE TOOL=" + next_extruder + "\n";
}
Настройки принтера -> Пользовательский G-код -> Завершающий G-код
Нужно ввести значение
BMCU_PRINT_END MODE=AUTO CLEAR=1
Ввести лучше после отвода головы принтера от модели, иначе остаются прыщи на модели от остановившейся горячей головы, но до отключения моторов и полного остывания хотенда, т.к. BMCU выгружает филамент после окончания печати.
Свои G-коды привел в конце статьи, чтобы не загромождать текст.
Сохранить профиль принтера.
Как указать, каким инструментом печатать
После загрузки модели в правой панели в таблице напротив каждой модели можно выбрать, каким ее экструдером печатать. При выборе экструдера с автоматическим управлением, т.е. у меня T1 и выше, после прогрева хотенда BMCU загружает филамент, а по окончанию печати его выгружает.
Также появился инструмент раскрашивания, но именно истинно мультиматериальную печать еще не пробовал, т.к. появились проблемы.
Проблемы
- Во-первых, надо соединить 4 трубки с одной и затем эту одну с фидером. Фидер у меня Minifeeder, он не предполагает надежной фиксации тефлоновой трубки, по крайней мере в моем исполнении. Пришлось сделать вплавляемую втулку M6, вплавить ее в фидер и вкрутить фитинг из комплекта.
- Во-вторых, соединитель 4 трубок в один оказалось на удивление сложно сделать. Сейчас четвертая итерация - при вставлении филамент упирается в край нижней трубки и застревает. Хотя без фитингов и трубок проходит очень легко.
- В-третьих, при печати иногда перестает реагировать на буфер, буфер упирается в ограничитель, но мотор BMCU не подает филамент и филамент начинает проскакивать. Также пару раз BMCU просто теряла контакт - светодиод на главной плате начинал светиться красным, после перетыкания usb контакт восстанавливался. Еще заметил, что в вкладке Diagnostics в строке Transport socket постоянно сменяется статус ready на missing и обратно, а в строке BMCU link - online и offline. Скорее всего проблема связи. Заказал другой ubs-ttl адаптер. Также померяю напряжение на текущем адаптере, может имеет смысл запитать его от BMCU, а не от USB, как указано в инструкции. Если не поможет, подключу USB кабель напрямую в плату OrangePi, сейчас подключен в разъем на корпусе принтера через короткий удлиннитель. В перспективе хотелось бы вообще подключить BMCU штатным кабелем по RS-485, благо, один человек, который форкнул репозиторий, так уже делал (описано в issue).
- В-четвертых, tip forming - формирование кончика филамента при выгрузке, часто остаются сопли и нити, в итоге при заправке застревает и не доходит до шестерен.
Может у кого есть опыт использования подобных MMU? Прошу поделиться опытом, может быть, макросами, способом формирования кончика, конструкцией сплиттера. Также интересует, нормальное ли это поведение BMCU когда постоянно меняется статус, и как это влияет на печать.
Мои макросы и G-коды
Мои макросы на текущий момент
[gcode_macro BMCU_TOOLHEAD_PREPARE]
gcode:
SET_FILAMENT_SENSOR SENSOR=extr0_filament_sensor ENABLE=0 ; выключить датчик движения филамента
#{% set speed = params.SPEED|default(300) %}
#{% set max_velocity = printer.configfile.settings['extruder'].max_extrude_only_velocity %}
M300 P500 ;beep
# SAVE_GCODE_STATE NAME=load_state
G91
G92 E0
G1 E50 F{25 * 60}
G1 E10 F{5 * 60}
# RESTORE_GCODE_STATE NAME=load_state
M300 P500 ;beep
[gcode_macro BMCU_BEFORE_PULLBACK]
description: Tip forming без ножа; вызывается BMCU перед длинной выборкой филамента
# --- Температуры формирования кончика по материалам (C) ---
variable_tip_temp_default = 230 # если материал не найден в таблице
# --- Ретракты: ---
# продувка перед срывом (0 = отключить)
variable_pre_purge_mm = 3
# мм/с
variable_pre_purge_speed: 5
# резкий срыв -> формование кончика
variable_tip_retract_mm: 15
# мм/с; 20-30 обычно оптимально
variable_tip_retract_speed: 25
# пауза на затвердевание кончика (с)
variable_cool_time: 1.0
# медленный выход из зоны плавления
variable_unload_retract_mm: 50
# мм/с
variable_unload_speed: 8
# --- Парковка (0 = не двигаться, использовать текущую позицию) ---
variable_park_x: 235
variable_park_y: 0
variable_park_z: 0
variable_use_park: 1
gcode:
SET_FILAMENT_SENSOR SENSOR=extr0_filament_sensor ENABLE=0 ; выключить датчик движения филамента
{% set material = (params.MATERIAL|default("PETG"))|upper %}
{% set M = printer['gcode_macro BMCU_BEFORE_PULLBACK'] %}
# {% set tip_temp = M.tip_temps.get(material, M.tip_temp_default) %}
{% set tip_temp = M.tip_temp_default %}
M300 P500 ;beep
# 1. Встаём в позицию смены филамента
# {% if M.use_park %}
# G90
# G1 X{M.park_x} Y{M.park_y} F12000
# G1 Z{M.park_z} F3000
# {% endif %}
# 2. Греем хотенд до температуры формирования кончика
# M104 S{tip_temp}
# M109 S{tip_temp} # ждём; если конец (молоток) подоткнут к блокировке — убери M109
# 3. Небольшая продувка, чтобы сопло было заполнено
{% if M.pre_purge_mm > 0 %}
G91
G1 E{M.pre_purge_mm} F{M.pre_purge_speed * 60}
G90
{% endif %}
# 4. РЕЗКИЙ срыв: быстро тянем филамент назад — формируем кончик
G91
G1 E-{M.tip_retract_mm} F{M.tip_retract_speed * 60}
G90
# 5. Даём кончику затвердеть
G4 P{M.cool_time * 1000|int}
# 6. Медленно выводим остаток из зоны плавления
G91
G1 E-{M.unload_retract_mm} F{M.unload_speed * 60}
G90
# 7. Здесь филамент уже вне хотенда. BMCU сам дотянет его через PTFE.
# Если у экструдера есть привод освобождения шестерён (серво/игла),
# вызови его здесь, напр. IDLER_OPEN
M300 P500 ;beep
Мои G-коды:
Стартовый
SET_PRINT_STATS_INFO TOTAL_LAYER=[total_layer_count]
; BMCU
BMCU_PRINT_BEGIN SCHEMA=1 RESET=1
{if is_extruder_used[0]}BMCU_PRINT_MAP TOOL=0{endif}
{if is_extruder_used[1]}BMCU_PRINT_MAP TOOL=1 MATERIAL="{filament_type[1]}" COLOR="{filament_colour[1]}"{endif}
{if is_extruder_used[2]}BMCU_PRINT_MAP TOOL=2 MATERIAL="{filament_type[2]}" COLOR="{filament_colour[2]}"{endif}
{if is_extruder_used[3]}BMCU_PRINT_MAP TOOL=3 MATERIAL="{filament_type[3]}" COLOR="{filament_colour[3]}"{endif}
{if is_extruder_used[4]}BMCU_PRINT_MAP TOOL=4 MATERIAL="{filament_type[4]}" COLOR="{filament_colour[4]}"{endif}
BMCU_PRINT_COMMIT
; END BMCU
CLEAR_PAUSE
M207 S[filament_retract_length] F{filament_retract_speed[0]*60} ; firmware retract settings
M208 S0 F0 ; firmware recover settings
M140 S[first_layer_bed_temperature] ; table temp, no wait
G21 ; mm
G90 ; abs. coord
M82 ; extruder abs. coord
G28 ; парковка
LED_ON
M190 S[first_layer_bed_temperature] ; table temp, wait
M109 S[first_layer_temperature] ; hotend temp, wait
G92 E0
M300 P2000 ;beep
G4 P10000 ;pause
SET_FILAMENT_SENSOR SENSOR=extr0_filament_sensor ENABLE=0 ; выключить датчик движения филамента
; BMCU FIRST TOOLCHANGE
BMCU_TOOL_CHANGE TOOL={initial_extruder}
Смены прутка
{
"BMCU_TOOL_CHANGE TOOL=" + next_extruder + "\n";
}
Конечный
M140 S0 ; выключить стол
M106 S0 ; выключить обдув
G91 ; относительные координаты
G1 E-5 F1800 ; ретракт 5 мм
M104 S0 ; выключить хотенд
G1 Z0.2 F2400 ; поднять голову
G90 ; абсолютные координаты
G1 X5 Y210 ; выдвинуть стол с моделью
BMCU_PRINT_END MODE=AUTO CLEAR=1
M84 X Y E ; выключить моторы
LED_OFF ; выключить подсветку
ACTIVATE_POWER_OFF ; запустить автовыключение
; total layers count = [total_layer_count]
Еще больше интересных статей
33 несчастья с Anycubic Kobra 3
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Фильтр фотополимерной смолы для ленивых.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Тонкости 3D-печати. Часть 2. Теория и практика.
Подпишитесь на автора
Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.
Отписаться от уведомлений вы всегда сможете в профиле автора.
Данная часть будет посвящена...








Комментарии и вопросы
Думаете, не поплывет? У PETG 7...
Делал модельки генерацией 4 пр...
она 600м напечатана. Вики ну е...
Бамбу Лаб А1 работал где-то 2...
Хочу поточечтно как в рироцеро...
err. mintemp: e1 printer halte...
Ситуация следующая: сканер раб...