Мой переход с Lerdge на Marlin

Zloyuzver
Идет загрузка
Загрузка
28.08.2021
9830
21
Личные дневники

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

28
Статья относится к принтерам:
ZAV-MAX-PRO

Мой переход  с Lerdge на Marlin

Вместо предисловия

В виду неопределённости, в плане будущего развития плат от Lerdge, я решил поменять на своём тестовом принтере плату Lerdge-K на SKR 2 ревизии «B», дабы посмотреть, что из себя представляет эта плата. Кроме того, мне многие расхваливали Марлин, говоря, что он лучше, чем закрытая прошивка от Лердж. Вот я и решил заодно глянуть, что же это за зверь такой, и с чем его едят. Поэтому, не долго думая, я оформил и оплатил заказ на комплект из платы SKR 2, пяти драйверов TMS2209 и экрана TFT43. А также заказал ещё несколько дополнительных компонентов из Китая. А на момент написания этой статьи, еще и компания Lerdge подсуетилась и прекратила выпуск плат серии «К» из-за (как было сказано) нехватки микроконтроллеров. При этом она пообещала в скором времени выпустить некую промежуточную серию «Z» в виде чего-то среднего, между сериями «К» и «Х». В общем, всё сложилось одно к одному.

Примерно через 3 недели ко мне пришли все заказанные комплектующие:

  1. Сама плата SKR 2 ревизии «B» от Bigtreetech;
  2. Пять драйверов TMC2209 от Bigtreetech;
  3. Экран TFT43 от Bigtreetech;
  4. Блок автоматического выключения от всё той же Bigtreetech;
  5. Удлинитель для micro SD-карты;
  6. Модуль Wi-Fi ESP-01S для экрана;
  7. Модуль Wi-Fi ESP-07S с внешней антенной для SKR 2;
  8. Mini UPS на 12 вольт;
  9. Датчик окончания филамента (шёл в нагрузку с одним из заказов).

– Вручить шашку Игорю Владимировичу, а? Любо?

– Простите, а Люба - это кто?

((с) к/ф «День выборов»)

Что понравилось при ознакомлении с ТТХ и беглом осмотре полученного комплекта:

  1. Поддержка платой управления не только micro SD-карт, но и USB-флешек.
  2. Наличие у драйверов достаточно большой не окрашенной металлизированной площадки для установки на неё радиатора.Мой переход  с Lerdge на Marlin
  3. Возможность работы экрана в двух режимах, один из которых – режим эмуляции дисплея 12864.
  4. Автоматическое уменьшение яркости экрана при его простое. При этом уровень, до которого уменьшается яркость, также как и интервал, через который она будет уменьшена, настраивается достаточно гибко.
  5. Возможность непосредственно с экрана отправлять на плату управления команды в виде G-кода, и выводить ответ на них на всё тот же экран.

Ну, с Богом, Параска.

Т.к. раньше с Марлином я знаком не был, и даже не знал с какого бока к нему подступиться, я сделал некое подобие стенда.

Мой переход  с Lerdge на Marlin

На нём я и оттачивал настройку прошивки под свои нужды. Увы, легко и без проблем Марлин мне не дался. После Лерджа несколько сложновато давался алгоритм настройки. Не зря говорят, что переучиваться сложнее, чем учиться с нуля. Нужно привыкать и приспосабливаться к немного другой логике работы. Взять хотя бы, например, управляемые разъёмы вентиляторов на плате SKR 2 – Fan0, Fan1 и Fan2. Что за что отвечает? На плате присутствует поддержка двух экструдеров E0 и E1. Соответственно, в эти разъёмы должны подключаться вентиляторы обдува детали, и обдува радиаторов этих двух экструдеров. Если следовать некой логике, то Fan0 – это разъём для вентилятора обдува радиатора экструдера E0, Fan 1 – для вентилятора обдува радиатора экструдера E1, ну и оставшийся Fan2 – для обдува детали. Так думал я, а Марлин думал иначе. Для обдува детали в прошивке где-то глубоко в коде прописан Fan0, а вот для обдува радиаторов экструдеров вентиляторы не прописаны вообще. Вероятно, предполагается, что они подключаются к неуправляемым разъёмам для вентиляторов, которые на плате тоже есть (Fan3, Fan4). Поэтому, если вы хотите иметь управляемые вентиляторы обдува радиатора, то их нужно прописать вручную. Ещё момент – если у Лердж не имеет значения, какой датчик автоуровня подключён к плате (плёночный, BL-Touch, индукционный), и его можно поменять без перепрошивки, то в Марлине нужно чётко указать, какой тип датчика подключён к плате. И без изменения этой информации в прошивке (с последующей перекомпиляцией оной и перепрошивкой платы управления) его не поменять. Ну и волшебный Z-offcet. Если у Лердж он работает сразу и всегда – внесли в него изменения (как в соответствующем меню, так и при печати с помощью подстройки), и они применяются ко всем печатям, которые вы будете проводить после этих изменений, без лишних телодвижений, то у Марлина это не так. После того, как вы внесли изменения в Z-offcet и сохранили их в EEPROM, вам, при каждой печати после автоматической парковки по G28, надо вызывать их из памяти командой M420 S1, иначе значения Z-offcet не будут использоваться. Это же верно и для карты стола. Вот этот маленький нюанс знатно попил моей крови. Но, вроде как у Марлина датчик автоуровня BL-Touch работает стабильнее и адекватнее, чем у Лердж. Сам же я работу BL-Touch не проверял, не смотря на то, что его клон (3D-Touch) от Trianglelab у меня есть. Мне просто лень его ставить, т.к. я один раз снял карту стола плёночным датчиком и печатаю дальше без перекалибровки, вызывая карту всё той же командой M420 S1, упомянутой выше. Вместе с тем сама автокалибровка стола со снятием карты с помощью BL-Touch или любого иного датчика в Марлине проходит более предсказуемо, особенно если сравнивать с работой Lerdge с прошивкой версии 4.3.3 beta 1-3. Про финальную версию прошивки Lerdge 4.3.3 я ничего сказать не могу, т.к. подзабросил наблюдение за ней. Опытные марлиноводы и марлиноведы скажут, что упомянутые выше проблемы – это пустяки, и не стоит из-за них нервничать. Но как новичок отвечу – что для вас пустяк, для новичка проблема, и, к сожалению, её не всегда получается быстро решить. Однако продолжу рассказывать дальше.

Итак, используя сделанный стенд, я произвёл в марлине настройку основных параметров принтера, таких как габариты печатного поля, управление блоком автоматического выключения питания, настройку отключения вентиляторов обдува радиатора хотенда, при охлаждении его ниже 40 градусов и т.п. И при этой настройке я был очень рад, что экран может выступать как хост по отправке команд на плату и получать от неё ответы. Это знатно экономит время и позволяет не подключать плату к компьютеру только для того, чтобы, например, опросить состояние концевиков командой M119, или проверить, адекватно ли работает блок автоматического выключения питания, отправив команду M81 на плату. Но более подробно к некоторым настройкам Марлина я вернусь немного позже.

А сейчас коротко пробегусь по подключению электронной части принтера к новой плате. Тут проблем не возникло от слова совсем. У Bigtreetech, как и у Лердж, есть достаточно подробная инструкция о том, что, как и куда подключать, а также есть полная карта распиновки разъёмов. Ну и на обратной стороне платы также есть подписи ко всем пинам.

Мой переход  с Lerdge на MarlinЕдинственное что пришлось сделать, так это удлинить некоторые провода, т.к. они были рассчитаны под расположение разъёмов на Lerdge-K. Также пришлось смоделировать и напечатать новый корпус для экрана TFT43. На этот корпус я, помимо родных разъёмов для USB-флешки и SD-карты, расположенных на плате экрана, вывел с помощью удлинителей разъёмы для подключения micro SD-карты и USB-флешки с самой платы SKR (у неё он есть, помимо разъёма USB-B для подключения к компьютеру).Мой переход  с Lerdge на MarlinДабы не сверлить в корпусе принтера новые отверстия, я смоделировал подложку для SKR 2 с учётом уже имевшихся отверстий для крепления подложки Лердж-K.Мой переход  с Lerdge на MarlinВ общем, плата заняла положенное ей место, и можно было приступать к более тонкой настройке прошивки с учётом особенностей механики принтера. Были настроены рывки, ускорения, скорости движения осей.Ещё на стенде я протестировал работу блока автоматического выключения питания от Bigtreetech и его алгоритм работы мне не понравился. Суть его в том, что он включает плату сразу, как только на него подаётся питание 220 вольт. Я понимаю, что это сделано для возобновления печати после внезапного отключения электричества. Но у этой медали есть и обратная сторона, которая меня не устраивает от слова «Совсем». Приведу пример. Вы, по завершению печати, автоматически или через меню, выключили принтер, и ушли из дома на работу. А за время вашего отсутствия, у вас дома кратковременно отключили и включили обратно электричество. И вот вы пришли домой после работы, а принтер у вас оказался включен. А всё потому, что после отключения электричества в вашем доме и его последующего включения, плата автоматического выключения, следуя своей логике работы, включила принтер. Вот именно поэтому я и решил оставить блок автоматического выключения питания от Лердж, подключив его к SKR 2.

При подключении блока от Лердж, я исходил как из его распиновки, так и из распиновки платы управления SKR 2.Мой переход  с Lerdge на MarlinМой переход  с Lerdge на Marlin

Сигнальный провод и землю от блока автоматического выключения я подключал в разъём PS-ON на плате SKR 2, в соответствии с распиновкой оного, а провод «+5v» я подключил к пину «+5v» незадействованного у меня разъёма E1DET.

Книжка была очень скучной – в ней было много букв и совсем не было картинок.

А теперь немного о том, что я изменял в Марлине под себя для того, чтобы получить нужную мне функциональность:

  1. Температурная защита как хотенда, так и стола от перегрева в случае выхода из строя нагревательного элемента или термистора.
  2. Включение обдува радиатора хотенда при нагреве хотенда выше 40 градусов и отключение обдува при его остывании ниже 40 градусов.
  3. Включение обдува платы и драйверов при работе шаговых двигателей и выключение обдува при простое больше 1 минуты с неработающими шаговыми двигателями.
  4. Печать с USB-флешек, а не micro SD-карт.
  5. Управление LED подсветкой печатной зоны принтера.
  6. Возможность полуавтоматического выравнивания стола в параллель, относительно портала с печатающей головой принтера. В этом режиме печатающая голова циклически двигается по четырём заданным точкам, позволяя выровнять стол винтами, используя щуп известной толщины или обычную бумажку, которые размещаются между соплом и столом.
  7. Возможность снятия карты стола с помощью имеющегося у меня плёночного датчика, с последующим использованием её при печати.
  8. Возможность автоматического выключения питания после завершения печати.
  9. Игнорирование команд на выключение принтера как из G-кода, так и с экрана, если хотенд не остыл ниже 40 градусов.

    Сразу предупреждаю – дальше будет много скучных букв.

    === configuration.h ===

    Порты подключения, модель материнской платы и количество экструдеров

    Для подключения принтера к компьютеру настроил последовательный порт и указал скорость передачи данных для него. #define SERIAL_PORT 1 #define BAUDRATE 115200

    Дабы прошивка правильно собралась для моей платы, указал её модель. #define MOTHERBOARD BOARD_BTT_SKR_V2_0_REV_B

    Т.к. у меня одноэкструдерный принтер, без всяких смешивающих экструдеров, то указал количество экструдеров равное одному. #define EXTRUDERS 1

    Работа с блоком автоматического выключения питания

    Настроил блок автоматического выключения питания, раскомментировав строку

    #define PSU_CONTROL

    Также указал, что для управления блоком от Лердж нужно использовать алгоритм работы такой же, как для управления блоками питания ATX.

    #define PSU_ACTIVE_STATE LOW

    Раскомментировал диалог подтверждения выключения питания.

    #define PS_OFF_CONFIRM

    Затем активировал автоматический контроль питания.

    #define AUTO_POWER_CONTROL

    И настроил его так, чтобы он не выключался, если работает вентилятор обдува хотенда или если температура экструдера выше 40 градусов.

    #define AUTO_POWER_E_FANS

    #define AUTO_POWER_E_TEMP 40

    Настройки типов термисторов, а также

    минимальной и максимальной температур хотенда и стола

    Чтобы принтер отображал правильную температуру, указал, какие типы термисторов используются в хотенде и столе.

    #define TEMP_SENSOR_0 1

    #define TEMP_SENSOR_BED 1

    Указал минимальную и максимальную температуру для хотенда и стола. При этом обращаю внимание на то, что реально можно выставить температуру только до значения, равного максимальная температура минус 15 градусов (HEATER_0_MAXTEMP - 15). Учитывайте этот нюанс при настройке.

    #define HEATER_0_MINTEMP 5

    #define BED_MINTEMP 5

    #define HEATER_0_MAXTEMP 275

    #define BED_MAXTEMP 150

    Настройки PID хотенда и стола

    Активировал меню настрой PID и меню автокалибровки PID.

    #define PIDTEMP

    #define PID_EDIT_MENU

    #define PID_AUTOTUNE_MENU

    Основываясь на данных, полученных при автокалибровке PID для хотенда, сразу указал оные в прошивке.

    #define DEFAULT_Kp 45.6

    #define DEFAULT_Ki 8.32

    #define DEFAULT_Kd 62.4

    Включил управление нагревом стола с помощью PID.

    #define PIDTEMPBED

    И также сразу указал в прошивке данные, полученные в ходе автокалибровки PID стола.

    #define DEFAULT_bedKp 47.8

    #define DEFAULT_bedKi 9.41

    #define DEFAULT_bedKd 161.9

    Температурная защита

    Обязательно проверил, чтобы была включена температурная защита хотенда и стола.

    #define THERMAL_PROTECTION_HOTENDS

    #define THERMAL_PROTECTION_BED

    Механика принтера, типы концевиков их расположение и алгоритм работы

    Т.к. у моего принтера кинематика H-bot, то указал нужный тип механики (этот тип такой же, как и у кинематики Core-XY).

    #define COREXY

    Прошивка Марлин универсальная, но за эту универсальность есть и «плата». Так, концевики осей «X» и «Y» на моём принтере расположены в минимуме. Исходя из этого, в прошивке надо указать, что эти концевики подключены соответствующе разъёмы Xmin и Ymin. Но, на плате SKR 2 только один вариант разъёмов X-Stop, Y-Stop, Z-Stop, и у неё нет физического разделения разъёмов на Xmin и Xmax (ровно как нет и разделения на Ymin и Ymax, Zmin и Zmax). Но, не смотря на отсутствие физических разъёмов Xmin и Ymin на моей плате, в прошивке всё равно надо указать, что концевики «X» и «Y» подключаются в разъёмы Xmin и Ymin.

    #define USE_XMIN_PLUG

    #define USE_YMIN_PLUG

    А концевик оси «Z» в моём принтере расположен в максимуме, поэтому указываю, что он подключён в соответствующий разъём Zmax.

    #define USE_ZMAX_PLUG

    Также, я указал, что концевики осей «X», «Y» и «Z» являются нормально замкнутыми (в не нажатом состоянии контакты замкнуты, а в нажатом – разомкнуты) и что они соединяют землю и сигнальный пин.

    #define X_MIN_ENDSTOP_INVERTING false

    #define Y_MIN_ENDSTOP_INVERTING false

    #define Z_MAX_ENDSTOP_INVERTING false

    А для плёночного датчика, которым у меня снимается карта стола, я указал, что он является нормально разомкнутым (в не нажатом состоянии контакты разомкнуты, а в нажатом – замкнуты), т.е. указал прошивке, что у него инвертирован алгоритм работы.

    #define Z_MIN_PROBE_ENDSTOP_INVERTING true

    Драйверы и способ их подключения

    На все оси и экструдер я установил драйверы TMC2209. Также в прошивке я указал, что все эти драйверы на моей плате подключёны по UART.

    #define X_DRIVER_TYPE TMC2209

    #define Y_DRIVER_TYPE TMC2209

    #define Z_DRIVER_TYPE TMC2209

    #define Z2_DRIVER_TYPE TMC2209

    #define E0_DRIVER_TYPE TMC2209

    Настройки шагов, скоростей и ускорений

    Дабы принтер правильно печатал, я указал количество шагов на миллиметр для всех осей и экструдера. При этом для оси «Z» я указал 1600 шагов на миллиметр, т.к. на ней стоит не четырёхзаходный, а однозаходный винт, которому для подъёма оси «Z» на ту же высоту, что и четырёхзаходному, надо сделать в четыре раза больше шагов.

    #define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 1600, 415 }

    Кроме того, я указал скорости для осей и экструдера.

    #define DEFAULT_MAX_FEEDRATE { 150, 150, 8, 50 }

    А также задал максимальные ускорения для осей и экструдера.

    #define DEFAULT_MAX_ACCELERATION { 1000, 1000, 5, 1000 }

    Также, безопасности ради, указал ограничения предельных ускорения для осей и экструдера, до которых можно их поднять через G-код.

    #define MAX_ACCEL_EDIT_VALUES { 2000, 2000, 15, 1000 }

    Ну и куда же без настройки ускорений для печати, ретрактов и движений без экструзии (движений без печати)

    #define DEFAULT_ACCELERATION 1000

    #define DEFAULT_RETRACT_ACCELERATION 1000

    #define DEFAULT_TRAVEL_ACCELERATION 1000

    Я решил использовать джерки (рывки). Для этого активировал их и указал значения для осей «X», «Y» и «Z», которые будут использоваться для печати.

    #define CLASSIC_JERK

    #define DEFAULT_XJERK 8.0

    #define DEFAULT_YJERK 8.0

    #define DEFAULT_ZJERK 0.5

    Кроме того, указал джерки для движений без экструзии.

    #define TRAVEL_EXTRA_XYJERK 15.0

    Настройка датчика снятия карты стола и параметров его работы

    Т.к. я использую плёночный датчик для снятия карты стола, а не BL-Touch, то я раскомментировал эту строку

    #define FIX_MOUNTED_PROBE

    И т.к. данный датчик устанавливается непосредственно на сопло, то я указал нулевые офсеты для него.

    #define NOZZLE_TO_PROBE_OFFSET { 0, 0, 0 }

    Для удобства указал отступы от краёв стола (в мм) при взятия проб.

    #define PROBING_MARGIN 10

    Также указал скорости движения по осям «X» и «Y» при взятии пробы.

    #define XY_PROBE_FEEDRATE (80*60)

    И указал скорость взятия первой (быстрой) и второй (медленной) пробы.

    #define Z_PROBE_FEEDRATE_FAST (4*60)

    #define Z_PROBE_FEEDRATE_SLOW (Z_PROBE_FEEDRATE_FAST / 2)

    Работа моторов и направление их вращения

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

    #define DISABLE_X false

    #define DISABLE_Y false

    #define DISABLE_Z false

    #define DISABLE_E false

    А чтобы оси двигались в правильном направлении, настроил направление вращения моторов осей «X», «Y», «Z» и экструдера.

    #define INVERT_X_DIR false

    #define INVERT_Y_DIR false

    #define INVERT_Z_DIR true

    #define INVERT_E0_DIR false

    Настройка парковки печатающей головы и размеров области печати

    Т.к. любая печать начинается с парковки, я указал, где должна парковаться печатающая голова. У моего принтера это происходит в минимуме по «X» и «Y», и максимуме по «Z».

    #define X_HOME_DIR -1

    #define Y_HOME_DIR -1

    #define Z_HOME_DIR 1

    И куда же без физических размеров стола и печатной зоны. Поэтому прописываю размеры стола, а также минимальные и максимальные значений для осей «X», «Y» и «Z».

    #define X_BED_SIZE 292

    #define Y_BED_SIZE 200

    #define X_MIN_POS 0

    #define Y_MIN_POS 0

    #define Z_MIN_POS 0

    #define X_MAX_POS X_BED_SIZE

    #define Y_MAX_POS Y_BED_SIZE

    #define Z_MAX_POS 260

    И дабы не ломать принтер, указал минимальные и максимальные программные ограничения для осей «X», «Y» и «Z», раскомментировав следующие строки:

    #define MIN_SOFTWARE_ENDSTOPS

    #define MAX_SOFTWARE_ENDSTOPS

    Настройка процедуры снятия карты стола

    В качестве способа построения карты стола я выбрал билинейный режим.

    #define AUTO_BED_LEVELING_BILINEAR

    А чтобы построенная карта стола использовалась после парковки по G28, я активировал автоматическую загрузку карты, раскомментировав эту строку

    #define RESTORE_LEVELING_AFTER_G28

    Увы, как потом оказалось, это не сильно помогло.

    Также я указал количество проб, которые будут браться по осям «X» и «Y», равное пяти по каждой оси. Итого получилась сетка из 25 точек.

    #define GRID_MAX_POINTS_X 5

    #define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X

    Кроме этого, я активировал пункт ручного выравнивания стола в полуавтоматическом режиме, когда печатающая голова будет поочередно перемещаться в каждый из 4 углов и в центр стола (здесь параметры для калибровки по эталону 0 мм, толщину эталона можно задать параметром LEVEL_CORNERS_HEIGHT). Сами же точки остановки сопла отстоят от всех краёв стола на 30 мм.

    #define LEVEL_BED_CORNERS

    #define LEVEL_CORNERS_INSET_LFRB { 30, 30, 30, 30 }

    #define LEVEL_CORNERS_HEIGHT 0.0

    #define LEVEL_CORNERS_Z_HOP 4.0

    #define LEVEL_CENTER_TOO

    Настройка скоростей парковки

    Чтобы не мучить механику принтера, я настроил более адекватные скорости парковки.

    #define HOMING_FEEDRATE_MM_M { (40*60), (40*60), (8*60) }

    Настройка работы с EEPROM

    Дабы не терять настройки и корректировки, которые будут сделаны в процессе работы принтера, я активировал правку данных в EEPROM с помощью команд M500, M501.

    #define EEPROM_SETTINGS

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

    #define EEPROM_CHITCHAT

    #define EEPROM_BOOT_SILENT

    #define EEPROM_AUTO_INIT

    Локализация меню принтера

    Ну и куда же без родного русского языка в меню.

    #define LCD_LANGUAGE ru

    А чтобы видеть на экране нормальные буквы, а не крякозяблы, устанавливаю использование кириллической кодовой таблицы символов. Увы, но на русские имена файлов эти настройки не повлияют, и вместо русских букв на экране будут отображаться символы подчёркивания «_» (например, «_____.gcode», вместо «Кубик.gcode»).

    #define DISPLAY_CHARSET_HD44780 CYRILLIC

    Поддержка SD-карты

    Чтобы прошивка могла работать с SD-картами, надо активировать их поддержку.

    #define SDSUPPORT

    Экран принтера

    Т.к. мой экран TFT43 может работать в режиме эмуляции экрана 12864, то выбрал этот тип экрана для отображения меню принтера.

    #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER

    Вентиляторы

    У Марлина есть особенность – из-за его ШИМ, управляемые вентиляторы издают неприятный высокочастотный писк или свист. Убираем этот самый «свист», раскомментировав строку

    #define FAN_SOFT_PWM

    Вроде с изменениями в файле configuration.h закончили. Но это ещё не конец, т.к. есть второй файл, с, так сказать, продвинутыми (или расширенными – кому как удобнее) настройками.

    === configuration_adv.h ===

    Автоподстройка температуры при печати

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

    #define AUTOTEMP

    Обдув платы управления и хотенда и работа с вентиляторами

    Раз на SKR 2 есть аж целых три управляемых разъёма для вентиляторов, то почему бы не использовать один из них для обдува платы управления и драйверов. Для этого я включил функцию обдува материнской платы и драйверов вентилятором, и назначил для него разъём FAN2 .

    #define USE_CONTROLLER_FAN

    #define CONTROLLER_FAN_PIN FAN2_PIN

    Ещё один управляемый разъём вентилятора (FAN1) я использовал для обдува радиатора хотенда.

    #define E0_AUTO_FAN_PIN FAN1_PIN

    И настроил его работу так, чтобы он включался при нагреве хотенда до 40 градусов, и при этом работал на полную мощность. А когда хотенд остынет ниже 40 градусов, то вентилятор выключится.

    #define EXTRUDER_AUTO_FAN_TEMPERATURE 40

    #define EXTRUDER_AUTO_FAN_SPEED 255

    Кстати, возвращаясь к вентилятору обдува модели, подключённого к разъёму FAN0. Если он плохо стартует на низких оборотах, помогаем ему волшебным «пинком».

    #define FAN_KICKSTART_TIME 200

    Подсветка

    У меня в принтере есть подсветка области печати. Дабы её использовать, я в прошивке активировал подсветку и указал, что она подключена к разъёму нагревателя второго хотенда (HEATER_1).

    #define CASE_LIGHT_ENABLE

    #define CASE_LIGHT_PIN HEATER_1_PIN

    Количество моторов оси «Z»

    Одной из особенностей моего принтера, относительно заводского его исполнения, является то, что в нём установлено два мотор-винта для оси «Z», которые подключены к разным драйверам. Поэтому я сделал соответствующую настройку.

    #define NUM_Z_STEPPER_DRIVERS 2

    Скорости парковки

    Чтобы сберечь механику и концевики, я задал более «нежные» делители скоростей для повторной парковки после первого срабатывания концевика.

    #define HOMING_BUMP_DIVISOR { 4, 4, 4 }

    Время удержания шаговых двигателей

    Чтобы шаговые двигатели не были в постоянном режиме удержания, я задал время после последнего движения (в секундах), через которое это самое удержание отключается.

    #define DEFAULT_STEPPER_DEACTIVE_TIME 300

    Скорости движения

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

    #define MANUAL_FEEDRATE { 50*60, 50*60, 4*60, 2*60 }

    Меню

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

    #define TURBO_BACK_MENU_ITEM

    Ну а дабы не беситься из-за быстрого автоматического выхода из меню, я увеличил задержку (в миллисекундах) перед автоматическим выходом из меню на главный экран.

    #define LCD_TIMEOUT_TO_STATUS 60000

    Т.к. экран у меня не безразмерный, а статусные сообщения бываю достаточно длинными, и целиком на нём не помещаются, то я включил прокрутку таких длинных сообщений.

    #define STATUS_MESSAGE_SCROLLING

    А чтобы при печати по USB адекватно отображался прогресс этой самой печати, «чиним» его с помощью раскомментирования этой строки

    #define LCD_SET_PROGRESS_MANUALLY

    Прогресс-бар прогресс-баром, но как-то привычнее видеть процент выполнения печати. Для этого включаем отображение этих самых процентов над прогресс-баром.

    #define DOGM_SD_PERCENT

    Работа с файлами и накопителями

    Чтобы на хосте, подключённом по USB, видеть длинные имена файлов я включил поддержку отправки длинных имен файлов с флешки на хост.

    #define LONG_FILENAME_HOST_SUPPORT

    Помните про длинные статусные сообщения, которые не помещались на экране? Вот то же самое происходит и с длинными именами файлов. Поэтому я также включил прокрутку длинных имен файлов в меню.

    #define SCROLL_LONG_FILENAMES

    Ну не люблю я micro SD-карты – мелкие они, не удобные для меня. А SKR 2 поддерживает USB-флешки (отчасти из-за этого я её и взял). Поэтому включаю поддержку этих самых USB-флешек. Правда при этом, доступ к micro SD-карте для чтения с неё фалов будет не возможен, но для меня это не важно. Однако есть один нюанс – не смотря на то, что видеть файлы на micro SD-карте нельзя, возможность перепрошивки платы с micro SD-карты сохраняется. А вот с USB-флешки перепрошить SKR 2 не получится.

    #define USB_FLASH_DRIVE_SUPPORT

    Т.к. поддержка USB-флешек у SKR 2 реализована именно самой платой, то указываем это, включив нативную поддержку USB-хоста платой (USB OTG).

    #define USE_OTG_USB_HOST

    Хоть в файле configuration.h мы и включили поддержку SD-карт, но надо указать прошивке, что расположен этот самый разъём для SD-карт на плате управления.

    #define SDCARD_CONNECTION ONBOARD

    Тонкая подстройка расстояния от сопла до стола во время печати

    Идеального нет ничего, поэтому включаю возможность тонкой подстройки расстояния от сопла до стола во время печати (Babystepping).

    #define BABYSTEPPING

    А затем настраиваю шаг для babystepping.

    #define BABYSTEP_MULTIPLICATOR_Z 0.01

    Помимо этого, включаю отображение общего значения babystepping с момента последней парковки по G28, чтобы видеть всё, чтоб было «накручено», а не видеть «0» при каждом вызове babystepping в течение одной печати.

    #define BABYSTEP_DISPLAY_TOTAL

    Linear advance

    Для убирания выпирающих углов включаю linear advance, раскомментировав строку

    #define LIN_ADVANCE

    И устанавливаю значение К-фактора равное 0.0. Потом его можно скорректировать или через меню принтера, или через команду M900 Kx.x, где «x.x» - это значение К-фактора.

    #define LIN_ADVANCE_K 0.0

    Экстренная остановка печати

    Чтобы иметь возможность экстренно остановить принтер, а не ждать, пока выполнятся все команды из буфера, включаю Emergency Parser.

    #define EMERGENCY_PARSER

    Настройка драйверов по UART

    Т.к. у меня все драйверы подключены по UART, то для них я настроил токи и дробление шагов.

    #define X_CURRENT 1000

    #define X_CURRENT_HOME X_CURRENT

    #define X_MICROSTEPS 16

    #define Y_CURRENT 1000

    #define Y_CURRENT_HOME Y_CURRENT

    #define Y_MICROSTEPS 16

    #define Z_CURRENT 1500

    #define Z_CURRENT_HOME Z_CURRENT

    #define Z_MICROSTEPS 16

    #define Z2_CURRENT 1500

    #define Z2_CURRENT_HOME Z2_CURRENT

    #define Z2_MICROSTEPS Z_MICROSTEPS

    #define E0_CURRENT 650

    #define E0_MICROSTEPS 16

    Кроме того, для всех драйверов включил тихий режим StealthChop.

    #define STEALTHCHOP_XY

    #define STEALTHCHOP_Z

    #define STEALTHCHOP_E

    Помимо этого я включил защиту драйверов от перегрева, с настройкой снижения тока.

    #define MONITOR_DRIVER_STATUS

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

    #define HYBRID_THRESHOLD

    #define X_HYBRID_THRESHOLD 120

    #define Y_HYBRID_THRESHOLD 120

    #define Z_HYBRID_THRESHOLD 20

    #define Z2_HYBRID_THRESHOLD 20

    #define E0_HYBRID_THRESHOLD 30

    Также включил отладочный режим.

    #define TMC_DEBUG

    Настройка экструзии

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

    #define NO_VOLUMETRICS

    Вроде теперь с изменениями в файле configuration_adv.h закончили. После всего этого я скомпилировал прошивку, прошил ею плату и начал печатать.

    Вместо заключения

    Мой переход  с Lerdge на Marlin

    Уже некоторое время я гоняю принтер, как говорится «и в хвост, и в гриву», печатая на нём нужные мне детали, запчасти, всякую мелочёвку, да и не только мелочёвку. Что я могу сказать по итогу всех этих манипуляций с настройкой прошивки и последующей печати на ней – вау-эффекта от Марлина я не получил. Возможно, это из-за завышенного ожидания, но факт остаётся фактом. Качество печати у Марлина хорошее, но и на Лердже с прошивкой 4.1 оно меня устраивало. Да, справедливости ради отмечу, что в Марлине можно многое гибко настроить под свои нужды и хотелки. Например, взять те же настройки автоматического выключения принтера. Можно банально запретить выключение принтера, если хотенд не остыл до нужной температуры. И всё равно – будет это попытка выключения произведена через команду M81 или через меню принтера – пока хотенд горячий – принтер питание не выключит. Можно также заставить работать капризные вентиляторы, отрегулировав для них частоту ШИМ-сигнала. Можно реализовать работу автоматической смены печатных голов (т.н. Tool changer). Много чего можно в Марлине сделать. У Лерджа таких возможностей не было, нет, и, в ближайшее время (а возможно и не в ближайшее), не будет. Но всегда ли нужна простому 3D-печатнику такая гибкость – вопрос спорный и однозначного ответа на него нет. Касаемо ошибок (багов) – они присутствуют как в Лердже, так и в Марлине. Тут уже всё зависит от того, насколько критичны они для вас, и как часто вы с ними сталкиваетесь при повседневной работе с принтером (если, вообще, сталкиваетесь). Я понимаю людей, которые говорят, что Лердж для них плохой и не подходит, т.к. там есть критичные для них ошибки, или в нём что-то не возможно настроить или реализовать так, как они бы хотели. Да, тут претензии обоснованные. Но я искренне не понимаю тех людей, которые говорят, что «Лердж – это фу» только из-за того, что в нём закрытая прошивка. Если человека устраивают возможности Лерджа, то пусть он пользуется им на здоровье. Если же не устраивает, то и брать его не надо. Что же касается меня – я приобрёл некоторый опыт, который мне пригодится в будущем. Буду ли я переводить второй принтер с Лерджа на Марлин – маловероятно. Буду ли я дальше экспериментировать с платой SKR 2 – да, буду. Со временем хочу установить на неё RepRap Firmware и посмотреть, что это за зверь такой. Не исключаю, что и Klipper протестирую на ней. Но это позже, гораздо позже.

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

    Кергет Руслан

    Минск, август 2021г.

    Подпишитесь на автора

    Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

    Отписаться от уведомлений вы всегда сможете в профиле автора.

    28
    Комментарии к статье