• Открыт набор модераторов на нашем форуме. Заявку можно подать в разделе "Вопросы и предложения" > "Набор модераторов".

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

Fockus

Fockus

Администратор
Команда форума
Сообщения
581
Симпатии
149
Баллы
745
Веб-сайт
3dnote.ru
Принтер
Flyingbear REBORN
#1
Многие 3D принтеры работают под управлением популярной прошивки Marlin. Прошивка изначально сконфигурирована для Ultimaker Original. Разберём основные настройки для других 3D принтеров.

Прошивка лежит по этому адресу. Качаем. Давим на кнопку Download ZIP. Скачивается архив Marlin-Development.zip. Распаковываем его в выбранную папку.

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

Теперь скачиваем Arduino IDE для исправления и загрузки прошивки в 3D принтер.

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

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

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

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

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

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

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

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

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

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

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

Melzi

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

RAMPS 1.4

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

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

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

Заменяю в 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-2

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

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

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.



Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

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

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

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

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

) показывает состояние концевых выключателей. У меня концевые выключатели стоят только в позиции HOME на MAX.

В положении HOME

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

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

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

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

Код:
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)
Переходим к самому важному. Настройка шагов перемещения по осям. Экструдер тоже ось. Мои настройки.

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

Теперь посмотрим, как я их получил. По всем осям стоят шаговые двигатели 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 принтеры.

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

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

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

, страница 61.

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

Шкив

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

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

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

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

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

. Для начала ставим 50 мм и скорость 100 мм/сек. 50 мм - это длина прутка, проходящего через экструдер. Измеряем длину прутка прошедшего через экструдер линейкой или штангенциркулем.

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

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

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

Код:
#define DEFAULT_MAX_FEEDRATE {200, 200, 5, 25}
Настройка ускорения перемещений по осям. При больших ускорениях возможны пропуски шагов. Можно подбирать, гоняя в программе

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

по осям на заданной скорости. Вот мои настройки:

Код:
#define DEFAULT_MAX_ACCELERATION {1000,1000,100,10000}

#define DEFAULT_ACCELERATION 1500
Осталось активировать LCD дисплей с SD картой. Свой дисплей я нашёл на

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

и идентифицировал как RepRapDiscount Smart Controller.

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

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

Код:
#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

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.



Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

MELZI

Для выбора нужной платы в Arduino IDE нужно скопировать с заменой всё из папки с прошивкой 'Marlin-DevelopmentArduinoAddonsArduino_1.5.xhardwaremarlinavr' в папку Arduino IDE 'C:program Files (x86)Arduinohardwarearduinoavr'. После этого появляется возможность выбрать плату Sanguino (базовая плата для Melzi) и нужный тип процессора. У меня нет платы Melzi, поэтому проверить не могу.

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.



Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

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

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

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

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

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

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

. Вводим команду 'M303 E0 C8 S260'. Где M303 - команда калибровки, E0 - хотэнд, C8 - количество циклов нагрева-охлаждения, S260 - типичная температура работы сопла.

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

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

Код:
#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.

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

Код:
#define DEFAULT_bedKp 105.94

#define DEFAULT_bedKi 4.97

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

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

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

через меню КонфигурацияКонфигурация EEPROM. Предварительно нужно указать COM порт в настройках и нажать кнопку 'Подсоединить'.

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

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

Пожалуйста Войдите или Зарегистрируйтесь для просмотра скрытого текста.

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

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

Критические замечания настоятельно приветствуются, так как впоследствии инструкция будет размещена в 3D-Вики. Также очень важно мнение новичков, так как всё это делается именно для Вас!