Установка Marlin 2.0

Недавно собрал новый блок управления для своего 3D принтера на базе платы SKR-V1.4-Turbo. Теперь пришло время залить в него прошивку Marlin.

Все настройки и действия я решил оформить в виде статьи на моем сайте. Это будет вроде моей шпаргалки на будущее. Надеюсь, собранные мной материалы будут еще кому-нибудь полезны.

 

Краткая инструкция по установке прошивки Marlin для 32-битной платы SKR-V1.4-Turbo.

  • Устанавливаем редактор исходного кода VSCode – ссылка (https://code.visualstudio.com/download).
  • В VSCode устанавливаю плагин  PlatformIO (Он позволит скомпилировать прошивку Marlin для 32-битных плат).
  • Скачиваю проект BIGTREETECH-SKR-V1.3 с github: https://github.com/bigtreetech/BIGTREETECH-SKR-V1.3.
  • В проекте нахожу нужную прошивку для моей платы BIGTREETECH-SKR-V1.3-master.zip\BIGTREETECH-SKR-V1.3-master\BTT SKR V1.4\Firmware\ Marlin-2.0.x-SKR-V1.4-Turbo.
  • Разархивирую и копирую прошивку на жесткий диск. По старой традиции, в пути не должно быть пробелов и кириллических символов.
  • Открываю прошивку в Visual Studio Code (File>Open Folder), затем выбираю папку с прошивкой.
  • Файл platformio.ini править не нужно, т.к. я скачал прошивку для конкретной платы.
  • Открываем файл Marlin-2.0.x-SKR-V1.4-Turbo\Marlin\Configuration.h и начинаю его конфигурирование.

Конфигурирование файла Configuration.h

#define CUSTOM_MACHINE_NAME "name"

Вместо «name» можно написать что угодно.  Эта информация будет отображена на мониторе принтера в главном меню. Обычно здесь я вношу номер сборки своей прошивки, чтобы потом было проще в них разбираться.


#ifndef MOTHERBOARD

  #define MOTHERBOARD BOARD_BTT_SKR_V1_4_TURBO

#endif

В этом блоке должно быть указано имя материнской платы. Весь список поддерживаемых плат можно посмотреть в файле boards.h.


#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75

Проверяем, чтобы был правильно выбран диаметр прутка. У меня – 1,75 мм.


#define TEMP_SENSOR_BED 11

В этой строке указывается тип датчика температуры, который установлен на вашем нагревательном столе. Выше по коду указанно, какому датчику, какой номер соответствует. У меня установлен датчик «100k Hisens 3950  1% up to 300°C».


#define TEMP_SENSOR_0 13

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


#define PIDTEMPBED

Раскомментировал эту строку. Включаю PID регулировку температуры стола. Многие советуют этого не делать, т.к.частыми переключениями увеличивается нагрузка на реле .


#define BED_MAXTEMP      100

Этот параметр поможет ограничить максимальную температуру стола. По умолчанию – 150 градусов, но для моих нужд вполне хватит ста градусов.


#define HEATER_0_MAXTEMP 275

Максимальная температура на нагревателе. 


#define PID_EDIT_MENU

#define PID_AUTOTUNE_MENU

Первая строке этого блока добавляет в меню пункты для редактирования PID регулятора. Вторая строка добавляет пункт меню «Автокалибровка PID».

Подробнее: Калибровка PID регулятора 3D принтера на прошивке Marlin


#define THERMAL_PROTECTION_HOTENDS // Enable thermal protection for all extruders

#define THERMAL_PROTECTION_BED     // Enable thermal protection for the heated bed

Эти строки включают защиту принтера от перегрева хотэнда и стола, а если быть проще, то от пожара.


  #define DEFAULT_Kp 20.7

  #define DEFAULT_Ki 1.54

  #define DEFAULT_Kd 70

Эти три строки настраивают PID регулятор нагревателя хотэнда. Прежде чем вписать значение нужно провести калибровку принтера.


#define X_DRIVER_TYPE  TMC2209

#define Y_DRIVER_TYPE  TMC2209

#define Z_DRIVER_TYPE  TMC2209

//#define X2_DRIVER_TYPE A4988

//#define Y2_DRIVER_TYPE A4988

//#define Z2_DRIVER_TYPE A4988

//#define Z3_DRIVER_TYPE A4988

//#define Z4_DRIVER_TYPE A4988

#define E0_DRIVER_TYPE TMC2209

//#define E1_DRIVER_TYPE TMC5160

//#define E2_DRIVER_TYPE TMC5160

//#define E3_DRIVER_TYPE A4988

//#define E4_DRIVER_TYPE A4988

//#define E5_DRIVER_TYPE A4988

//#define E6_DRIVER_TYPE A4988

//#define E7_DRIVER_TYPE A4988

 Указываю установленные драйвера на каждую ось и экструдер.


#define TMC_DEBUG

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


#define DEFAULT_AXIS_STEPS_PER_UNIT   {80, 80, 400, 932}

Устанавливает количество шагов шагового двигателя на единицу измерения (шаг/мм). Числа зависят от передаточных отношений на приводах вашей системы. Для экструдера у меня установлено 932 шага/мм. Эту цифру я взял из паспортных данных. 


#define DEFAULT_MAX_FEEDRATE          {500, 500, 5, 25}

Ограничиваю максимальную скорость по осям. 


#define DEFAULT_MAX_ACCELERATION      {500, 500, 100, 5000}

Ограничиваю максимальные ускорения по осям.


#define DEFAULT_ACCELERATION          500   

#define DEFAULT_RETRACT_ACCELERATION  500   

#define DEFAULT_TRAVEL_ACCELERATION   500   

Устанавливаю величину ускорений по умолчанию. 


#define INVERT_X_DIR false

#define INVERT_Y_DIR false

#define INVERT_Z_DIR true

#define INVERT_E0_DIR true

Задаю направление движения шаговых двигателей. Если двигатели вращаются не в нужную сторону, можно просто перекинуть провода, а иногда проще сделать изменения в прошивке.


#define Z_HOMING_HEIGHT  4

Теперь при автопарковке голова экструдера будет подниматься на 4 мм.


#define X_BED_SIZE 300

#define Y_BED_SIZE 300

#define Z_MAX_POS 400

Устанавливаю размер печатной зоны.


//#define FILAMENT_RUNOUT_SENSOR

Активирует работу датчика наличия филамента. Очень долго у меня стоял этот элемент на 3D принтере. Пользовался им крайне редко. Отключил его, когда он начал сбоить.


#define Z_SAFE_HOMING

Безопасная парковка по оси Z при использовании зонда. Парковка будет происходить по центру стола, это исключит ситуацию, когда зонд может оказаться за его пределами.


#define PREHEAT_1_LABEL       "PETG"

#define PREHEAT_1_TEMP_HOTEND 235

#define PREHEAT_1_TEMP_BED     90

#define PREHEAT_1_FAN_SPEED     0

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


#define NOZZLE_PARK_FEATURE

Включаю настройки парковки.


#define LCD_LANGUAGE ru

#define DISPLAY_CHARSET_HD44780 CYRILLIC

Включаю русский язык.


#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER

Выбираю свой LCD экран. Смотрите документацию, чтобы сделать правильный выбор.


Конфигурирование файла configuration_adv.h

#define STEALTHCHOP_XY

#define STEALTHCHOP_Z

#define STEALTHCHOP_E

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


#define HYBRID_THRESHOLD

Включаю настройки гибридного использования тихого и мощного режима (STEALTHCHOP). 


#define X_CURRENT       1100

#define Y_CURRENT       1100

#define Z_CURRENT       1000

#define E0_CURRENT      800

Устанавливаю ток на драйверах. 


#define CHOPPER_TIMING CHOPPER_DEFAULT_24V

Задаю режим работы чоппера SpreadCycle.


#define MONITOR_DRIVER_STATUS

Снижается ток на ШД в случае нагрева драйвера (#define TMC_DEBUG должен быть включен).


#define BABYSTEPPING

#define DOUBLECLICK_FOR_Z_BABYSTEPPING

Эти две строки делают доступной функцию «BABYSTEPPING». Как я ей пользуюсь? Сразу после начала печати, я кликаю два раза кнопку настройки. Появляется меню, в котором можно в режиме реального времени подстроить начальную высоту сопла над столом. Потом это значение можно занести в пункт меню «Смещение Z».


#define LIN_ADVANCE

#define LIN_ADVANCE_K 0

Включаю функцию Linear Advance. И по умолчанию ставлю коэффициент – 0.


#define ADVANCED_PAUSE_FEATURE

Включаю.


#if BOTH(SDSUPPORT, DIRECT_STEPPING)

  #define BLOCK_BUFFER_SIZE  32

#elif ENABLED(SDSUPPORT)

  #define BLOCK_BUFFER_SIZE 64

#else

  #define BLOCK_BUFFER_SIZE 64

#endif

У моей 32-х битной платы большой объемом памяти. Поэтому, она  может загружать больше движений в нее. Вычитал, что это поможет улучшить качество печати при движении сопла по кривым траекториям.


Подключение зонда для автоматического выравнивания стола - BLTouch

Файл configuration.h:

//#define AUTO_BED_LEVELING_3POINT

//#define AUTO_BED_LEVELING_LINEAR

#define AUTO_BED_LEVELING_BILINEAR

//#define AUTO_BED_LEVELING_UBL

//#define MESH_BED_LEVELING

Выбор способа калибровки. Убираю комментирование напротив нужного мне способа.


#define USE_PROBE_FOR_Z_HOMING

#define BLTOUCH

Включаю калибровку стола с помощью датчика BLTOUCH.


#define RESTORE_LEVELING_AFTER_G28

Включите эту опцию, чтобы G28 восстановил предыдущее состояние выравнивания.


#define NOZZLE_TO_PROBE_OFFSET { -41, 2, -1.2 } // для Biqu

Настройка положения датчика относительно сопла.


#define PROBING_MARGIN 45

Зона от краев стола, на которой щуп не работает.


#define GRID_MAX_POINTS_X 3

#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X

Определяю число точек для проверки уровня. Три множить на три – 9 точек для калибровки стола.


Файл configuration_adv.h:

#define BLTOUCH_HS_MODE

Увеличивает скорость калибровки стола. Если возникнет ошибка, то ваша система не подходит для этой функции.


Переназначение ПИНов на датчик температуры хотэнда

Числил металлической щеткой хотэнд и случайно замкнул выводы датчика температуры. Результат – вышел из строя отвечающий за это вход на плате.

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

Файл, в котором можно конфигурировать пины на моей плате — pins_BTT_SKR_V1_4.h.

Было:

//#define TEMP_1_PIN P0_23_A0   // A2 (T2) - (69) - TEMP_1_PIN

//#define TEMP_BED_PIN P0_25_A2  // A0 (T0) - (67) - TEMP_BED_PIN

Стало:

#define TEMP_0_PIN P0_23_A0

#define TEMP_1_PIN P0_24_A1

#define TEMP_BED_PIN P0_25_A2