Мар 122017
 

Настройка прошивки для 3D принтера Marlin ver.1.02 (январь 2015)

  • 13 фев, 2015 в 19:08


Последний раз редактировал 27.08.15

Многие 3D принтеры работают под управлением популярной прошивки Marlin. Для некоторых 3D принтеров существуют уже стандартно сконфигурированные прошивки:

  • Bq Hephestos
  • Bq Witbox
  • Версия Development

Рассмотрим основные настройки релиз версии 1.02 (январь 2015)

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

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

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

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

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

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

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

Melzi

Sanguinololu

RAMPS 1.4

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

Указываем в configuration.h свой контроллер.

#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К

У Ultimaker Original в хотэнде стоит термопара. При подключении термопары важно соблюдать полярность. Тип сенсора «-1».

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

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

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

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

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

Если сработал концевик, то мотор не должен дальше двигать каретку. Концевики нужны для ограничения перемещения кареток и инициализации начальной точки HOME. При сработанном концевике каретка может двигаться только от него.

Нам нужно узнать где они расположены. Как это узнать? Начало координат находится в ближнем левом углу на поверхности стола, если сопло вывести в эту точку, то сработали бы концевики 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

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

Так должно быть:

В положении HOME

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

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

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

Установка габаритов перемещения, после инициализации в положении 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. Обычно занижают скорость по оси Z, если стоят кривые шпильки.

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

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

#define DEFAULT_AXIS_STEPS_PER_UNIT {(200*16)/(2.0*20),(200*16)/(2.0*20),200*16/1.25,(3200 * 39.0)/(11.0 * 6.75 * 3.45)}

Теперь посмотрим, как я их получил. По всем осям стоят шаговые двигатели 200 шагов на оборот, 16 микрошагов на шаг (устанавливается перемычками на плате), приводной ремень 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». Теперь экструдер будет работать при холодном сопле, что нам и нужно. Пока не меняем настройки экструдера. Для настройки я использую программу Pronterface. Для начала ставим 50 мм и скорость 100 мм/сек. 50 мм — это длина прутка, проходящего через экструдер. Измеряем длину прутка прошедшего через экструдер линейкой или штангенциркулем.

Подбирая настройку экструдера добиваемся точной цифры на разумной длине прутка, например 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.

Раскомментируем следующие строки. То есть убрать двойные слэши. Строка за «//» не используется и является только комментарием. Когда убираем слэши строка принимает участие в компиляции прошивки и задействует её функции.

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

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

#define ULTIMAKERCONTROLLER

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

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

RAMPS

MELZI, Sanguinololu

Ещё одна инструкция для появления выбора Sanguino в меню Arduino IDE (на старых версиях Arduino IDE не работает):

Заходим в меню Файл -> Настройки

В поле ввода Additional Boards manager URLs: вставляем адрес https://raw.githubusercontent.com/Lauszus/Sanguino/master/package_lauszus_sanguino_index.json
и нажимаем OK

Идём в меню Инструменты -> Плата и нажимаем на Boards Manager…

Открывается окно Boards Manager, в котором нужно найти Sanguino, кликнуть по нему и появится кнопка Install, которую нужно нажать для установки поддержки Melzi

После установки появится надпись INSTALLED

Теперь можно выбрать Плату, Процессор и Порт

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

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

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

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

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

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

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

В последних прошивках не настраивается автоПИД на реле. Реле переключается очень быстро. Это сильно разогревает твердотельное реле и обычное реле видимо долго не проживёт. Предлагаю использовать пока мою старую настройку
#ifdef PIDTEMPBED
#define DEFAULT_bedKp 234.18
#define DEFAULT_bedKi 31.62
#define DEFAULT_bedKd 433.56
#endif // PIDTEMPBED
или эту
#ifdef PIDTEMPBED
#define DEFAULT_bedKp 105.94
#define DEFAULT_bedKi 4.97
#define DEFAULT_bedKd 564.11
#endif // PIDTEMPBED

Вместо PID регулировки можно включить режим гистерезиса bang-bang. PID комментируем, режим bang-bang раскомментируем:
Configuration.h
//#define PIDTEMPBED
#define BED_LIMIT_SWITCHING
время и температура контроля переключения
Configuration_adv.h
#ifdef BED_LIMIT_SWITCHING
#define BED_HYSTERESIS 2 //only disable heating if T>target+BED_HYSTERESIS and enable heating if T>target-BED_HYSTERESIS
#endif
#define BED_CHECK_INTERVAL 5000 //ms between checks in bang-bang control

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

M501 читает параметры прошивки и их можно сохранить в текстовом файле

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

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

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

Вопрос — ответ
настроил ПИД, температуру держит на ура, но при нагреве с 20 до 240 улетает за 270. какой из коэфициентов руками подкрутить?
решил проблему снижением тока в прошивке и руками уменьшил Кр относительно автопид на несколько едииниц
#define BANG_MAX 255 // limits current to nozzle while in bang-bang mode; 255=full current
#define PID_MAX BANG_MAX // limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
Теперь температура + — 3градуса

Возможные ошибки

На экране надпись:
Err MINTEMP — Неподключен термистор (термопара) или обрыв провода к нему.
Err MAXTEMP — Короткое замыкание контактов термистора (термопары).

Описание G-кодов http://reprap.org/wiki/G-code

Понравилось? Поделитесь:

:

Sorry, the comment form is closed at this time.