2023-07-18 14:13:27

Marlin для Anet ET4 Pro

Железо 3D STM32 Marlin Anet

Marlin в работе

Когда я решил отказаться от емкостного датчика на голове принтера, то сделал это не просто так. Сначала был поиск всяческих решений проблем с ним, который привел к статье от производителя принтера по его отключению и замене на микровыключатель.


Производитель предлагает распечатать пару деталей и с их помощью добавить концевик на ось Z. А потом прошить специальную прошивку, которая вместо емкостного датчика будет использовать концевик. Выглядит все примерно так

Так же набор всех необходимых деталей можно купить за 25$, но это не наш метод. А теперь то, о чем производитель забыл упомянуть 

Размеры концевика 20х10 мм., например, подойдет вот такой. Однако, заявленные винты М3х10 слишком толстые для концевика и его держателя, нужно что-то поменьше и лучше саморезы, например, подойдут М1.7х12 по размеру отверстий в держателе или М2.5х16 по размеру отверстий в концевике.

Распечатанная деталь под концевик будет упираться в ножки на плате, ее придется доработать напильником или взять мою подправленную.

Limit Switch Adapter for Z Axis Mod

Разъема на плате вполне может не оказаться, его придется припаивать, хорошо хоть разводка под него есть. Тут может пригодится вот такой набор разъемов JST XH 2.54 mm.

Родные винты крепления платы после установки крепления концевика окажутся слишком короткими, их придется заменить на более длинные М3х10 или М3х12 мм.

Винты крепления упора на направляющей не должны превышать М4х8 мм., иначе упрутся в железо и упор будет болтаться. Если коротких нет, то под упор можно что-то подложить или использовать мой подправленный для винтов М4х10.

Ну и самое главное, если у вас установлена прошивка версии 3.0, то так просто сменить ее у вас не получится. Дело в том, что с этой прошивкой принтер перестает считать себя ET4 Pro, пишет, что он обычный ET4. При этом переименование файлов из et4p.* в et4n.* не спасает: с переименованными файлами принтер показывает что прошивается, но никаких изменений это не приносит, прошивка так и остается старая 3.0.

Справедливости ради надо заметить, что есть альтернативное решение от индусов, как подключить концевик в разъем емкостного датчика и не перепрошивать принтер

Но я счел этот способ недостаточно элегантным и решил все же прошить принтер нормальной прошивкой, чтоб не оставаться в тупике с непрошиваемым принтером.

В основе принтера лежит микроконтроллер STM32, а значит для его прошивки потребуется программатор ST-Link. Хорошо, что на плате есть выводы для его подключения.

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

Производитель предлагает готовый образ Marlin для прошивки, но настораживает, что ссылка там идентичная с ET5X, и учитывая неприятный опыт с прошивкой 3.0, я буду собирать образ сам. Тем более нужно научится конфигурировать для того, чтоб заменить емкостной датчик на концевик, а потом еще и настроить параметры для нового экструдера.

Сама прошивка Marlin состоит из 2 частей: непосредственно прошивки и кучи конфигураций под всевозможные принтеры, включая Anet ET4 Pro. Для упрощения жизни обывателя есть также расширение Auto Build Marlin для Visual Studio Code. Ну а чтоб всем этим воспользоваться понадобится либо фирменная ST-Link utility под Windows, либо открытая STlink Tools под нормальные ОС. Под MacOS ставится через brew, на всякий случай инструкция, которая даст понимание процесса в общих чертах.

Перед тем, как что-то делать с принтером, а заодно, и чтоб проверить, что все работает, стоит сделать резервную копию того, что сейчас прошито в принтере. Нужно подключить программатор к пинам на плате принтера:

  SWD Header on ET Series motherboard
     ___
  U | o |  (not connected)
    |---|
    | o |  SWDIO
    |---|
    | o |  SWCLCK
    |---|
  G | o |  GND
     ---

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

st-flash read backup.bin 0x08000000 0x100000

В результате создастся файл backup.bin в текущей папке. Если же в процессе будут ошибки, то с 90% вероятностью неверно подключены провода от программатора к принтеру.

Теперь можно приступать к прошивке. Распаковываем скаченную прошивку в любое место, потом в ней в папке Marlin заменяем файлы Configuration.h и Configuration_adv.h на те, что скачали из репозитория конфигурация для своего принтера. Важно, чтоб версия прошивки и версия конфигурации совпадали (в репозитории конфигов есть ветки для каждой версии).

Запускам VS Code и ставим расширение Auto Build Marlin. Оно затянет за собой PlatfomIO. Теперь в студии открываем папку, куда распаковали прошивку (не ту куда положили конфиги, а на уровень выше). Если все сделали правильно, то запустив расширение, увидите примерно вот такой экран:

Marlin Auto Build Visual Studio Code

На этом экране нужно выбрать Build напротив Anet_ET4_OpenBLT. Это запустит процесс сборки прошивки, в результате которого откроется папка, содержащая файл firmware.srec. Этот файл нужно скопировать на пустую microSD-карту. Затем нажимаем Upload, это запишет загрузчик OpenBLT в память принтера, это нужно сделать один раз, больше не понадобится.

Или можно просто скачать свежий OpenBLT bootloader for Anet ET4/ET5 series printers и прошить его командой

st-flash write openblt_et4.bin 0x08000000

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

OpenBLT в действии

А вот теперь начинается самое интересное  Нужно накрутить конфигурацию прошивки так, чтоб принтер более не пытался использовать емкостной датчик, а пользовался концевиком на оси Z, плюс еще много чего можно покрутить в процессе, как говорится, "аппетит приходит во время еды". Не просто так в принтер на предыдущем шаге был зашит загрузчик, умеющий обновлять прошивку с карточки. В процессе подгонки прошивки под новые нужды, скорее всего, придется много раз обновлять ее в принтере, конечно, можно держать принтер подключенный через программатор к компьютеру и загружать собранную прошивку непосредственно в него через пункт Anet_ET4_no_bootloader, но схема с карточкой в такой ситуации выглядит более удобной.

Если вкратце, то суть изменений сводится к тому, чтоб отключить автоматическую пробу положения по оси Z и заменить ее на ручную, плюс подкрутить параметры ручной пробы, чтоб головка не выезжала за стол в процессе. В качестве бонуса, мне пришлось так же подправить параметры подогрева, чтоб принтер на сваливался в красный экран "heating failed printer halted" в процессе подготовки к печати, возможно это проблема только моего конкретного принтера или связана с массивным стеклом ультрабазы, которое сложнее прогреть, но тем не менее.

Конфиги, которые у меня получились, можно посмотреть на моем гитхабе. Для особо интересующихся ниже дифф оригинального конфига ET4 Pro и того, что сделал я для работы без емкостного сенсора.

Marlin config Anet ET4 Pro Z-stop diff

После смены прошивки стала более раздражающей проблема вытекающего из сопла филамента перед печатью, для этого пришлось немного освоить G-код и дописать кусочек для очистки сопла перед началом печати. За основу взял вот эту статью. Идем в Cura, меню "Настройки" -> "Принтер" -> "Управление принтерами" -> выбираем свой принтер и кнопка "Параметры принтера". Далее в поле стартовый G-код надо вставить вот это:

G28 ;Home
G0 X5 Y0 F9000 ; Go to front
G0 Z0.15 ; Drop to bed
G92 E0 ; zero the extruded length
G1 Y40 E20 F500 ; Extrude 20mm of filament in a 4cm line
G92 E0 ; zero the extruded length
G1 E-1 F500 ; Retract a little
G1 Y100 F4000 ; Quickly wipe away from the filament line
G1 Z15.0 F2000 ;Move the platform

В отличие от оригинала из статьи выше, в моем случае головка при нулевых значениях выходит за пределы стола, поэтому пришлось сменить направление очистки (у меня вдоль оси Y, чтоб сопло не цепляло о крепежи ультрабазы), а выход головки за пределы стола используется для улучшения эффективности очистки. И это сработало, детали стали печататься без мусора на первых слоях.

В результате всех этих манипуляций удалось получить приемлемое, а главное предсказуемое качество печати. Теперь стала очевидна кривизна ультрабазы, купленной в фирменном магазине на али, по сравнению с родным стеклом. На некоторое время мне показалось, что вот теперь все стало хорошо и можно больше ничего не делать, но примерно через 2 часа печати эти мысли развеялись от до боли знакомых звуков образования пробки из пластика... все же голову надо менять!

P.S.

Немножко впечатлений об использовании марлина после родной прошивки. Те, кто говорят, что марлин более функционален, немого лукавят. Да, там можно много чего накрутить, но через конфиги и сборку прошивки, а интерфейс же оставляет желать. Он подкупает красочностью основного экрана, но за ним стоит неудобное меню, которое гораздо меньше ориентировано на тачскрин и пальцы, нежели родная прошивка Anet. Хотя, для принтеров с LCD-экраном и крутилкой меню марлин вполне будет удобным. Очень понравилась возможность настроить параметры предварительного подогрева для разных типов пластика и сохранить их в памяти. Но очень не хватает кнопки прерывания текущей операции, например, при перемещении головки "домой" или загрузке филамента, принтер  показывает экран с описанием того, что он делает и отменить это никак нельзя.