Настройка прошивки Marlin

Перед началом работы с непрофессиональным или полу профессиональным 3D принтером, а также Kit-набором для самостоятельной сборки часто необходимо «залить» и настроить прошивку. Прошивка представляет собой программный код, основными задачами которого являются: считывание и воспроизведение G-code, управление принтером через различные интерфейсы, вывод информации о процессе печати. Другими словами, прошивка необходима, чтобы железо и набор электроники «ожили» и можно было ими управлять. Заливается прошивка на плату управления. У разных 3D принтеров различные платы управления, соответственно, прошивки тоже разные.

В наших 3D принтерах Prusa i3 Steel используется связка плат Arduino Mega 2560 и Ramps 1.4, поэтому в данной статье мы подробно рассмотрим и разберем настройки подходящей для них прошивки, Marlin.


Если вы еще не собрали электронику, то ознакомьтесь со статьей: Подключение Ramps 1.4 к 3D принтеру


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


Где взять?

Последняя версия прошивки Marlin выложена на официальном сайте разработчика https://github.com/MarlinFirmware/Marlin. Скачать более ранее версии прошивки можно по ссылке. Также на сайте присутствуют много различных версий, но мы рекомендуем скачивать  самую последнюю версию, помеченную как Latest release. На момент написания статьи, данной версией была 1.0.2-2

Последняя версия Marlin

Под Downdloads нажмите на Source code (zip) и скачайте архив прошивки себе на компьютер. Далее извлеките содержимое архива в папку.


Установка Arduino IDE

После того, как вы скачали прошивку, нужно ее отредактировать и в дальнейшем записать на микроконтроллер платы управления (Arduino mega 2560 ). Для этих целей понадобиться программа Arduino IDE, скачать которую можно бесплатно с официального сайта Arduino.

Обратите внимание! Данная программа Arduino IDE регулярно обновляется и возможен такой вариант, что при заливки прошивки на плату, с новыми версиями Arduino IDE могут возникнуть проблемы, а именно будут вылазить ошибки, и вы не сможете записать прошивку в микроконтроллер. Поэтому, при возникновении проблем, попробуйте скачать более старую версию программы, например версию 1.6.0 )

Для надежности можете сразу скачать проверенную версию 1.6.0

Версия Arduino IDE 1.6x

Нажмите на Windows Installer, и вас перекинут на другую страницу, где необходимо нажать на кнопку JUST DOWNLOAD, далее начнется скачивание файла. Установите программу и приступите к следующему шагу.


Редактирование прошивки Marlin

Вы скачали непосредственно саму прошивку Marlin и программу Arduino IDE, с помощью которой можно редактировать. Откройте папку с прошивкой «Marlin», найдите файл «Marlin» с расширением .ino

Файл Marlin

Откройте этот файл, откроется программа Arduino IDE

Arduino marlin 1

Вверху окна программы находиться много вкладок, в каждой из которых располагаются куски кода, от которых и зависит работа 3D принтера. Вам потребуется только несколько основных вкладок. Первая и основная вкладка это «Configuration.h»

Вкладка Configuration marlin

Этот конфигурационный файл, который содержит основные настройки. Именно в этой вкладке необходимо произвести основные изменения.

Обратите внимание! Все изменения в прошивке проведите по порядку сверху вниз. Эти изменения затронут основные участки кода, и они необходимы для начального запуска вашего 3D принтера. 


Устанавливаем необходимую скорость в бодах

Первое, что необходимо поменять — скорость в бодах. По умолчанию скорость стоит 250000 ( 47 строчка кода)

// This determines the communication speed of the printer
#define BAUDRATE 250000

Скорость в бодах 250000

Для каждой платы производитель рекомендует свои скорости, поэтому для связки Arduino mega 2560 и Ramps 1.4 необходимо поставить 115200, то есть участок кода у нас должен принять следующий вид:

// This determines the communication speed of the printer #define BAUDRATE 115200

Если вы используете плату Gen V1.4, то скорость должна быть 250000.


Выбираем управляющую плату

После установки скорости в бодах, необходимо указать используемую плату управления ( 55 строчка кода).

#ifndef MOTHERBOARD
#define MOTHERBOARD BOARD_ULTIMAKER
#endif

Выбор управляющей платы

По умолчанию стоит плата 3D принтера Ultimaker — BOARD_ULTIMAKER, поэтому необходимо поменять плату. Весь список плат находится во вкладке «BOARDS_H»

Выбираем вкладку board

Там предоставлен огромный список различных плат, но вам необходимы только следующие:

#define BOARD_RAMPS_13_EFB 33 // RAMPS 1.3 / 1.4 (Power outputs: Extruder, Fan, Bed)

#define BOARD_RAMPS_13_EEB 34 // RAMPS 1.3 / 1.4 (Power outputs: Extruder0, Extruder1, Bed)

#define BOARD_RAMPS_13_EFF 35 // RAMPS 1.3 / 1.4 (Power outputs: Extruder, Fan, Fan)

#define BOARD_RAMPS_13_EEF 36 // RAMPS 1.3 / 1.4 (Power outputs: Extruder0, Extruder1, Fan)

Эти платы относятся к Arduino mega 2560 и Ramps 1.4. В зависимости от модификации вашего 3D принтера, необходимо выбрать соответствующую плату. Например, стандартная связка 1 экструдер + обдув рабочей области + нагревательный стол соответствует плате BOARD_RAMPS_13_EFB 

Название платы необходимо скопировать и заменить на вкладке «Configuration.h», меняем следующие строчки:

Выбор платы Ramps


Меняем название 3D принтера

При настройке обязательно придумайте название своему 3D принтеру и укажите это в прошивке. Зачем? Название принтера отображается на его LCD дисплее, такая возможность точно предусмотрена на таком дисплее.

Найдите строчки: (59  строчка)

// #define CUSTOM_MENDEL_NAME "This Mendel"

Перед #define стоят «//» — это означает, что данные строчки не используются в коде, а служат в качестве пояснений. Чтобы активировать данную строчку, необходимо раскомментировать строку,  уберите // перед строчкой.

Измените название по умолчанию «This Mendel» на ваше название 3D принтера, например,  «P3Steel». Получаем следующие:

Меняем название 3D принтера


Выбираем датчик температуры стола и экструдера

Выше были указаны настройки прошивки для 1 экструдера и нагревательного стола, то есть в 3D принтере присутствуют два нагревательных элемента, температуры которых необходимо регулировать. Контроль температуры производится с помощью датчиков температуры — термисторов.

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

 
//// Temperature sensor settings:
// -2 is thermocouple with MAX6675 (only for sensor 0)
// -1 is thermocouple with AD595
// 0 is not used
// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
// 2 is 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
// 3 is Mendel-parts thermistor (4.7k pullup)
// 4 is 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
// 5 is 100K thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (4.7k pullup)
// 6 is 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
// 7 is 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
// 71 is 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
// 8 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
// 9 is 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
// 10 is 100k RS thermistor 198-961 (4.7k pullup)
// 11 is 100k beta 3950 1% thermistor (4.7k pullup)
// 12 is 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
// 13 is 100k Hisens 3950 1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
// 20 is the PT100 circuit found in the Ultimainboard V2.x
// 60 is 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
//
// 1k ohm pullup tables - This is not normal, you would have to have changed out your 4.7k for 1k
// (but gives greater accuracy and more stable PID)
// 51 is 100k thermistor - EPCOS (1k pullup)
// 52 is 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
// 55 is 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
//
// 1047 is Pt1000 with 4k7 pullup
// 1010 is Pt1000 with 1k pullup (non standard)
// 147 is Pt100 with 4k7 pullup
// 110 is Pt100 with 1k pullup (non standard)

В списке найдите свой, запомните цифру слева. Как правило, многие используют китайский термистор 100 кОм, для него подходит термистор под номером «1».

// 1 is 100k thermistor - best choice for EPCOS 100k (4.7k pullup)

Внесите изменения в нужном месте (строчки 115-118)

#define TEMP_SENSOR_0 -1
#define TEMP_SENSOR_1 -1
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_BED 0

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

TEMP_SENSOR_0 — отвечает за термистор первого экструдера

TEMP_SENSOR_1 — отвечает за термистор второго экструдера

TEMP_SENSOR_BED — отвечает за термистор стола

Поменяйте строчки и получите следующее:

Установка термисторов

TEMP_SENSOR_1 и TEMP_SENSOR_2 не используются, поэтому напротив них ставим «0» нули.


Ограничение максимальной температуры

Для ограничения максимальной температуры необходимы следующие строчки (140-143)

#define HEATER_0_MAXTEMP 275
#define HEATER_1_MAXTEMP 275
#define HEATER_2_MAXTEMP 275
#define BED_MAXTEMP 150

Числа стоящие справа, а именно 275 и 150 — это максимальные температуры экструдера и нагревательного стола соответственно.

Когда температура превышает максимальный Temp, ваш нагреватель будет выключен. Эта функция существует для того, чтобы защитить ваш экструдер от случайного перегрева. Если вы используете хотенд с тефлоном внутри, то рекомендуем ограничить температурой 260 градусов.


Ограничение минимальной температуры

Также в прошивке по умолчанию стоит ограничение минимальной температуры экструдера в 170 градусов. Это означает что, если температура экструдера будет ниже 170 градусов, то двигатель экструдера не будет вращаться и пластик не будет подаваться. Защита от проталкивания не прогретого пластика (строчка 230).

#define EXTRUDE_MINTEMP 170

Если хотите отключить данную функцию, то перед строчкой поставьте «//»


Настройка концевых выключателей

Настройка логики работы концевиков

В первую очередь на что нужно обратить внимание — это какие концевики вы используете и какой у них принцип работы. В прошивке необходимо правильно указать логику работы концевиков. Найдите следующие строчки (301-306)

const bool X_MIN_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
const bool Y_MIN_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
const bool Z_MIN_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
const bool X_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
const bool Y_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.
const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop.

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

По умолчанию в прошивке напротив каждого концевика стоят значения «true», что соответствуют механическим концевикам.

После настройки работу концевиков можно проверить командой M119 в консоли.
В ответ должен прийти текст:
x_min: open – концевик не сработал;
x_min: TRIGGERED – концевик сработал.

Установка положения «HOME» — дом

В прошивке поддерживаются 3 пары концевиков: для каждой оси X, Y и Z  по два концевика min и max. Как правило, ставятся концевики только для минимального положения каждой оси, а максимальное задается в прошивке.

Положение дом (начальное положение), будет находиться в минимальных положениях концевиков и это задается в прошивке: (строчки 337-339)

#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1

1=MAX, -1=MIN

Изменения направления вращения двигателей

При сборке 3D принтера, а именно при подключение шаговых двигателей к плате, возможна такая ситуация: когда вы все настроили и подключили, при нажатии «home» (дом), каретка одной из осей едет в другую сторону (не к концевику), тогда необходимо перевернуть коннектор шагового двигателя на 180 градусов или поменять значения в прошивке:

#define INVERT_X_DIR true // for Mendel set to false, for Orca set to true
#define INVERT_Y_DIR false // for Mendel set to true, for Orca set to false
#define INVERT_Z_DIR true // for Mendel set to false, for Orca set to true
#define INVERT_E0_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false
#define INVERT_E1_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false
#define INVERT_E2_DIR false // for direct drive extruder v9 set to true, for geared extruder set to false

Например, если у вас каретка оси Y в другую сторону, то необходимо найти строчку

#define INVERT_Y_DIR false // for Mendel set to true, for Orca set to false

и поменять «false» на «true». И так с каждой осью и экструдером.


Установка габаритов перемещения

Чтобы 3D принтер определял рабочую область, необходимо указать ее размеры в прошивке: (строчки 345-350)

#define X_MAX_POS 205
#define X_MIN_POS 0
#define Y_MAX_POS 205
#define Y_MIN_POS 0
#define Z_MAX_POS 200
#define Z_MIN_POS 0

Напротив каждой строчки укажите соответствующие габариты, по умолчанию рабочая область задана 205x205x200 мм


Настройка шагов перемещения по осям

Указание количества шагов шаговых двигателей — одна из главных настроек прошивки (строчка 490):

#define DEFAULT_AXIS_STEPS_PER_UNIT   {78.7402,78.7402,200.0*8/3,760*1.1}  // default steps per unit for Ultimaker

Количество шагов MarlinВ скобках через запятую для каждой оси указывается количество шагов, который должен сделать шаговый двигатель, чтобы каретка проехала 1 мм. Откуда взять данные значения? Можно рассчитать или возьмите уже известные.

Расчет осей X и Y (ремни)

По всем осям стоят шаговые двигатели 200 шагов на оборот, 16 микро-шагов на шаг (это устанавливается перемычками на плате).

По осям X и Y стоит приводной ремень GT2 с шагом 2 мм и шкивы с 20 зубьями.

Получается:

(200*16)/(2.0*20)=80

Столько шагов должен сделать шаговый двигатель, чтобы ось X и Y проехала ровно 1 мм.

Если у вас зубчатый шкив Gt2 с шагом 2 мм и с количеством зубьев 20, то формула такая:

(200*16)/(2.0*16)=100

Расчет оси Z (ходовой винт)

По оси Z могут стоять:

  • Шпилька М8 с шагом резьбы 1,25 мм, тогда формула: 200*16/1.25=2560
  • Шпилька M5 с шагом резьбы 0.8 мм, тогда формула: 200*16/0.8=4000
  • Трапецеидальный винт диаметром 8 мм с шагом 1 мм  и заходностью 1, тогда формула: 200*16/1=3200
  • Трапецеидальный винт диаметром 8 мм с шагом 2 мм  и заходностью 1, тогда формула: 200*16/2=1600
  • Трапецеидальный винт диаметром 8 мм с шагом 2 мм  и заходностью 4, тогда формула: 200*16/2*4=400

В Pruse i3 Steel используются шпильки М5 , тогда получается число 4000.

Расчет экструдера

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

Открутите сопло и уменьшите ограничение минимальной температуры сопла до 5 градусов:

#define EXTRUDE_MINTEMP 5

Теперь экструдер будет работать при холодном сопле. Не меняя настроек экструдера, нажмите прогнать пластик на 100 мм. Измерьте длину прутка прошедшего через экструдер линейкой или штангенциркулем.

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

#define EXTRUDE_MINTEMP 170


Ограничение максимальной скорости перемещения по осям

#define DEFAULT_MAX_FEEDRATE          {500, 500, 5, 25}    // (mm/sec)

По умолчанию стоят скорости 500,500,5, 25 мм/c на оси X,Y,Z и экструдер соответственно. Рекомендуем понизить скорость с 500 до 200.


Настройка ускорения перемещений по осям

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

#define DEFAULT_MAX_ACCELERATION {9000,9000,100,10000} // X, Y, Z, E maximum start speed for accelerated moves. E default values are good for Skeinforge 40+, for older versions raise them a lot.

#define DEFAULT_ACCELERATION 3000 // X, Y, Z and E max acceleration in mm/s^2 for printing moves
#define DEFAULT_RETRACT_ACCELERATION 3000 // X, Y, Z and E max acceleration in mm/s^2 for retracts

Для осей X и Y стоят ускорения 9000 мм/c^2 — это очень много.

Для первичной настройки установите не более 1000 и  для DEFAULT_ACCELERATION поставьте 1500, вместо 3000.

Максимальные ускорения


Активация дисплея

Последние, что остается сделать — это активировать нужный вам дисплей. Один из самых популярных дисплеев, это RepRapDiscount Smart Controller.  Найдите и раскомментируйте следующие строчки:

#define ULTRA_LCD
#define SDSUPPORT
#define ULTIPANEL
#define REPRAP_DISCOUNT_SMART_CONTROLLER

Перед этими строчками, не должны стоять «//». Должно получиться следующее:

Активация LCD дисплея


Заливка прошивки

После всех основных изменений прошивки, можно ее заливать. В программе Arduino IDE зайдите во вкладку «Инструменты» -> «Плата» и выберите «Arduino/Genuino Mega or Mega 2560»

Выбор платы

И там же нужно выставить верный COM порт вашего 3D принтера. Для заливки прошивки нажимаем на круг со стрелкой.

Заливка прошивки

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

Дальше можете пробовать запускать ваш 3D принтер. Удачи!