Техничка. Настраиваем прошивку Marlin и заливаем её в 3D принтер

Многие 3D принтеры работают под управлением популярной прошивки Marlin. Прошивка изначально сконфигурирована для Ultimaker Original. Разберём основные настройки для других 3D принтеров.
Marlin01.png

Теперь скачиваем Arduino IDE для исправления и загрузки прошивки в 3D принтерСсылка. Давим на Windows Installer. Скачивается установщик arduino-1.6.0-windows.exe. Запускаем его и устанавливаем среду Arduino IDE.Arduino - Software

Переходим в папку с прошивкой и запускаем файл Marlin.ino.Marlin

Открывается среда Arduino IDE с прошивкой. Нам нужна вкладка Configuration.h.Marlin _ Arduino 1.0.6

В начале мы видим ссылки на калибровку 3D принтера. Пролистываем дальше и читаем: "Это конфигурационный файл с основными настройками. Выберите тип контроллера, тип температурного датчика, откалибруйте перемещения по осям и сконфигурируйте концевые выключатели."

Начнём с выбора контроллера (MOTHERBOARD). Список контроллеров находится во вкладке boards.h. Давим на треугольник в правом верхнем углу и выбираем boards.h.Marlin _ Arduino 1.0.6

Теперь посмотрим на установленную электронику. Вот некоторые типы плат:

MelziRepRapMelziRAMPS 1.4RAMPS 1.4

У меня стоит RAMPS 1.4

.Marlin _ Arduino 1.0.6

Заменяю в configuration.h "MOTHERBOARD BOARD_ULTIMAKER" на "MOTHERBOARD BOARD_RAMPS_13_EFB".

#ifndef MOTHERBOARD
#define MOTHERBOARD BOARD_RAMPS_13_EFB
#endif

Следующим выбираем датчик температуры - термистор. Видим большой список "//// Temperature sensor settings:". У меня стоит хотэнд E3D-v5 и китайский термистор на столе. Для E3D-v5 я выбираю "// 5 is 100K thermistor - ATC Semitec 104GT-2", для стола "// 1 is 100k thermistor - best choice for EPCOS 100k". Если тип термистора неизвестен можно выбрать 1, а если температура не понравится можно выбирать любой и тестировать. Меняю.

100K thermistor - ATC Semitec 104GT-2E3D

Обычный китайский термистор 100К

100KMarlin _ Arduino 1.0.6

Ограничение максимальной температуры хотэнда "#define HEATER_0_MAXTEMP 275".

Ограничение минимальной температуры хотэнда "#define EXTRUDE_MINTEMP 170".

Если концевой выключатель подключен не стандартно и его состояние нужно инвертировать, то это можно сделать в прошивке, не перепаивая провода. Значения false или true. Команда M119 (например в Pronterface) показывает состояние концевых выключателей. У меня концевые выключатели стоят только в позиции HOME на MAX.
В положении HOME

Pronterface

В положении отличном от HOME по всем осям

Pronterface

Мне ничего менять не потребовалось.


const bool X_MIN_ENDSTOP_INVERTING = true;
const bool Y_MIN_ENDSTOP_INVERTING = true;
const bool Z_MIN_ENDSTOP_INVERTING = true;
const bool X_MAX_ENDSTOP_INVERTING = true;
const bool Y_MAX_ENDSTOP_INVERTING = true;
const bool Z_MAX_ENDSTOP_INVERTING = true;

Изменение направления вращения шаговых двигателей, значения false или true. Правильные перемещения сопла относительно стола:

- По оси X - влево "-", вправо "+".
- По Y - вперёд "+", назад "-".
- По оси Z - сближение "-", удаление "+".
- Экструдер. Extrude - выдавливание нити, Reverse (retract) - откат, втягивание нити.

#define INVERT_X_DIR false
#define INVERT_Y_DIR false
#define INVERT_Z_DIR false
#define INVERT_E0_DIR true

Дальше идёт настройка концевых выключателей. Нам нужно узнать где они расположены. Как это узнать? Начало координат находится в ближнем левом углу на поверхности стола, если сопло вывести в эту точку, то сработали бы концевики MIN, если в правую дальнюю верхнюю - сработают MAX. У меня в положении HOME находятся три концевых выключателя MAX, поэтому мои установки

// Sets direction of endstops when homing; 1=MAX, -1=MIN
#define X_HOME_DIR 1
#define Y_HOME_DIR 1
#define Z_HOME_DIR 1

Установка габаритов перемещения, после инициализации в положении HOME. Здесь мы задаём габариты рабочей зоны по X и Y, а также настройку сопла относительно стола.
Если при касании стола соплом срабатывает концевой выключатель (MIN), как у Ultimaker Original, то поднастройка сопла относительно стола выполняется перемещением концевого выключателя, а в "#define Z_MAX_POS" записываем значение координаты при максимальном удалении сопла от стола. Координату можно узнать по команде М114 или посмотрев на экран дисплея.
Если концевой выключатель по Z срабатывает при максимальном удалении сопла от стола (MAX), то нужно найти габарит по Z самостоятельно. Устанавливаем значение "#define Z_MAX_POS" изначально больше нормы, например 250 при габарите 200 мм. Опускаем сопло до касания стола и на дисплее (или по команде M114) видим координату больше нуля, теперь вычтем из установленного большого значения полученную координату и получим габарит по Z, который теперь запишем в "#define Z_MAX_POS". По итогам печати первого слоя можно будет подкорректировать это значение.

// Travel limits after homing
#define X_MAX_POS 215
#define X_MIN_POS 0
#define Y_MAX_POS 215
#define Y_MIN_POS 0
#define Z_MAX_POS 200
#define Z_MIN_POS 0

Можно подкорректировать скорость перемещения в положение HOME.

#define HOMING_FEEDRATE {50*60, 50*60, 4*60, 0} // set the homing speeds (mm/min)

Переходим к самому важному. Настройка шагов перемещения по осям. Экструдер тоже ось. Мои настройки.Marlin _ Arduino 1.0.6

Теперь посмотрим, как я их получил. По всем осям стоят шаговые двигатели 200 шагов на оборот, 16 микрошагов на шаг (устанавливается перемычками на плате). По осям X и Y стоит приводной ремень GT2 с шагом 2 мм и 20-ти зубые шкивы, итого получаем формулу (200*16)/(2.0*20). По оси Z стоят шпильки М8 с шагом резьбы 1,25 мм, итого формула 200*16/1.25.

Находим спецификации (даташит) на установленные шаговые двигатели. Видим, что за один шаг вал поворачивается на 1,8 градуса, а это значит 360/1,8=200 шагов на полный оборот. Этот параметр одинаковый у большинства шаговых двигателей устанавливаемых в домашние 3D принтеры.42BYGHW609-Stepper-Motor-Datasheet

Профили ремней, обычно используемых на 3D принтерах и их шаг. Оригинал здесь, страница 61.TimingBeltDatasheet_GT2

Шкив

Puley

Как померить шаг винта? Замеряем участок винта и считаем на нём витки, затем длину участка в миллиметрах делим на количество витков 20/16=1.25 мм. Для более точного результата замеряем участок максимальной длины.Замер

Настройка экструдера зависит от коэффициента редукции и диаметра подающей шестерни. Подберём экспериментально, после первой заливки прошивки в 3D принтер. Откручиваем сопло и уменьшаем ограничения минимальной температуры сопла до 5 градусов "#define EXTRUDE_MINTEMP 5". Теперь экструдер будет работать при холодном сопле, что нам и нужно. Пока не меняем настройки экструдера. Для настройки я использую программу Pronterface. Для начала ставим 50 мм и скорость 100 мм/сек. 50 мм - это длина прутка, проходящего через экструдер. Измеряем длину прутка прошедшего через экструдер линейкой или штангенциркулем.

Pronterface

Подбирая настройку экструдера добиваемся точной цифры на разумной длине прутка, например 300 мм. После настройки вернём ограничения минимальной температуры "#define EXTRUDE_MINTEMP 170".

Следующие цифры - это ограничение максимальной скорости перемещения по осям. На X и Y я ставлю 200 мм, остальные не трогаю.

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

Настройка ускорения перемещений по осям. При больших ускорениях возможны пропуски шагов. Можно подбирать, гоняя в программе Pronterface по осям на заданной скорости. Вот мои настройки:

#define DEFAULT_MAX_ACCELERATION {1000,1000,100,10000}
#define DEFAULT_ACCELERATION 1500

Осталось активировать LCD дисплей с SD картой. Свой дисплей я нашёл на RepRap.org и идентифицировал как RepRapDiscount Smart Controller.

LCD 2004

Раскомментируем (уберём двойные слэши) следующие строки:

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

Есть ещё один твик для повышения точности срабатывания некоторых концевых выключателей. При настройке нуля по Z столкнулся с тем, что после каждой инициализации HOME положение сопла над столом немного менялось. Порывшись в прошивке нашёл параметр отвечающий за инициализацию концевых выключателей. Переходим во вкладку Configuration_adv.h и ищем строку "#define Z_HOME_RETRACT_MM 2", меняем значение 2 на 5 и больше не вспоминаем про этот параметр.

Пора заливать прошивку в контроллер. Для этого нужно в Arduino IDE правильно выставить тип платы и номер COMпорта. Внизу окна отобразится тип платы и номер порта. Не забываем сохранять изменения (Ctrl+S).

RAMPS

Marlin _ Arduino 1.0.6 2015-02-13 22.19.24.pngMarlin _ Arduino 1.0.6

MELZI
Для выбора нужной платы в Arduino IDE нужно скопировать с заменой всё из папки с прошивкой "Marlin-Development\ArduinoAddons\Arduino_1.5.x\hardware\marlin\avr" в папку Arduino IDE "C:\Program Files (x86)\Arduino\hardware\arduino\avr". После этого появляется возможность выбрать плату Sanguino (базовая плата для Melzi) и нужный тип процессораУ меня нет платы Melzi, поэтому проверить не могу.Marlin _ Arduino 1.6.0Marlin _ Arduino 1.6.0

Для заливки прошивки нажимаем на круг со стрелкой.

Marlin _ Arduino 1.0.6

Прогресс заливки прошивки отображается индикатором

Marlin _ Arduino 1.0.6

После того, как всё заработает нужно откалибровать PID нагрева хотэнда и стола. Для этого я использую Pronterface. Вводим команду "M303 E0 C8 S260". Где M303 - команда калибровки, E0 - хотэнд, C8 - количество циклов нагрева-охлаждения, S260 - типичная температура работы сопла.

Pronterface

Последние результаты записываем в прошивку.

#define DEFAULT_Kp 12.22
#define DEFAULT_Ki 0.58
#define DEFAULT_Kd 64.08

По такой же схеме калибруем PID стола. Команда "M303 E-1 C8 S110". Где E-1 - стол, S110 - типичная температура нагрева стола. Последние результаты записываем в прошивку. У меня стол нагревается очень медленно и поэтому приходится перезапускать команду из-за ошибки Timeout.

Pronterface

#define DEFAULT_bedKp 105.94
#define DEFAULT_bedKi 4.97
#define DEFAULT_bedKd 564.11

Как узнать уже прошитые в 3D принтер параметры чтобы не калибровать повторно?

Параметры установленные в прошивке можно узнать в программе Repetier-Host через меню Конфигурация\Конфигурация EEPROM. Предварительно нужно указать COM порт в настройках и нажать кнопку "Подсоединить".Настройки Marlin EEPROM

При подключении 3D принтера к программе Pronterface в правой части окна выводится список параметров прошивкиPronterface

Также параметры можно увидеть на LCD дисплее. Через меню Control\Motion.

Хотелось бы увидеть подобные инструкции для Delta принтеров, CoreXY и H-Bot 3D принтеров