Настройка автоуровня UBL

Добавлено в закладки: 1

После сборки собственного принтера, я долгое время печатал на обычном оконном стекле. В принципе все устраивало. НО! Как всегда бывает, захотелось чего-то лучшего. Надоела возня с клеем, постоянная возня с подстройкой стола, постоянные “отлипы” углов и прочее прочее. В общем, решился я на приобретение такого магнитного коврика

Магнитный коврик для стола 3D принтера

Ну и памятуя о том, что стол все таки кривой, заказал такой датчик уровня

Датчик UBL автоуровня стола

Я заказал два одинаковых датчика от разных продавцов. Имейте ввиду! Необходимо сразу проверить, как подключается датчик в разъем! В моем случае датчик садился в разъем на контакты V и G! Это приведет к короткому замыканию питания на плате при срабатывании датчика! Не откладывайте в долгий ящик, проверьте и при необходимости перекиньте пины разъема на контакты S(сигнал) и G(земля) выбранного разъема.

При заказе особо не задумывался, как все это будет работать, а зря. Надо было :D В моем случае, на принтере установлена MKS sBase v1.3 и TFT 2.8 тоже от MKS. Если с материнкой все нормально, Марлин на нее ставится без особых проблем (как это сделать я уже писал здесь). То с этим индикатором не все так просто. С ним возможности автоуровня, в том числе и UBL, сильно ограничены. Например, вы не сможете вручную создать сетку. НИКАК, вообще никак. Также не сработает тестовая печать, т.к. требуется подтверждение с экрана. Надеюсь разработчики со временем это исправят.

Забегая немного вперед, скажу, что все мои попытки запустить печать с данным ковриком без датчика автоуровня не увенчались успехом. Стол кривой, а коврик почти в точности повторяет всю кривизну. Немного погуглив по настройке автоуровня UBL, толкового описания на русском я так и не нашел (может плохо искал или гугл санкции объявил? :D ). Пришлось разбираться практически самостоятельно по официальной англоязычной документации.

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

Размеры стола

Особое внимание обратите на выставленные в прошивке размеры стола! Они должны быть не более фактического рабочего поля, а также, если машинный ноль, то есть, если после обнуления сопло выходит за рабочее поле, эти смещения тоже должны быть учтены в прошивке. Все это повлияет на калибровку. Т.е. при подаче G0 X0 Y0 сопло должно быть четко над нулем рабочего поля, т.е. та точка, где уже можно начинать печатать (обычно это левый ближний угол).

// The size of the printable area
#define X_BED_SIZE 340
#define Y_BED_SIZE 300
// Travel limits (mm) after homing, corresponding to endstop positions.
#define X_MIN_POS 0
#define Y_MIN_POS 0

Настройка датчика

Итак… В первую очередь у меня в голове не “срастались файлы”, как будет работать нулевой (homing) концевик по Z, вместе с датчиком автоуровня (ведь обычно, в качестве датчика автоуровня используется именно концевик Z. У нас принципиально другая история, т.к. этот датчик мы будем использовать не часто, а подгружать сетку из EEPROM. По крайней мере так написано в документации). Немного покопавшись в прошивке “файлы срослись”. Все оказалось куда проще. Они прекрасно уживаются вместе. Судя по комментариям достаточно оставить настройку датчика “по умолчанию” и настроить UBL. Тогда прошивка подключит Z_MIN_PROBE_PIN по умолчанию. В моем случае это P4_28 и расположен он не очень удобно (НО! Лично не проверял!) Поэтому из-за расположения этого пина пошел своим путем, он более универсален и проверен. Поэтому открываем Configuration.h и просто комментируем эту строку:

#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN

убираем комментарий

//#define Z_MIN_PROBE_PIN 32 // Pin 32 is the RAMPS default

Здесь вместо 32 пина рампса мы можем указать другой свободный пин на плате. Лично мне очень приглянулся X_MAX_PIN

#define Z_MIN_PROBE_PIN X_MAX_PIN

Ииии! Прошивка не собралась  =-O . Судя по ошибкам в прошивке есть проверка на эти дефайны. Значит делаем проще, идем в описание пинов для своей платы, в моем случае сюда Marlin\src\pins\lpc1768\pins_MKS_SBASE.h и выбираем СВОБОДНЫЙ понравившийся пин

#define X_MIN_PIN                          P1_24  // 10k pullup to 3.3V, 1K series
#define X_MAX_PIN                          P1_25  // 10k pullup to 3.3V, 1K series
#define Y_MIN_PIN                          P1_26  // 10k pullup to 3.3V, 1K series
#define Y_MAX_PIN                          P1_27  // 10k pullup to 3.3V, 1K series
#define Z_MIN_PIN                          P1_28  // The original Mks Sbase DIO19 has a 10k pullup to 3.3V or 5V
#define Z_MAX_PIN                          P1_29  // 10k pullup to 3.3V, 1K series

Прописываем таким образом :-|

#define Z_MIN_PROBE_PIN P1_25

В принципе, по началу я боялся словить “глюки” во время печати, но тест показал стабильную работу принтера. Так что… Зато штатный разъем датчика прекрасно подходит в разъем концевика :D Не забудьте, если все еще не проверили, проверьте сейчас разъем датчика и при необходимости пересадите контакты на правильные места. Иначе возможно короткое замыкание на плате.

Инвертирование датчика

Так как у нас датчик с NO контактами, то необходимо его инвертировать

// Mechanical endstop with COM to ground and NC to Signal uses “false” here (most common setup).
#define X_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Y_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Z_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define I_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define J_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define K_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define X_MAX_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop.
#define Y_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Z_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define I_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define J_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define K_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop.
#define Z_MIN_PROBE_ENDSTOP_INVERTING false // Set to true to invert the logic of the probe.

Настройка датчика автоуровня

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

//#define FIX_MOUNTED_PROBE

Также необходимо указать прошивке на нулевое смещение датчика, т.к. наш датчик одевается прямо на сопло

#define NOZZLE_TO_PROBE_OFFSET { 0, 0, 0 }

Чтобы протестировать точность датчика, убираем комментарий

//#define Z_MIN_PROBE_REPEATABILITY_TEST

Теперь командой М48 прошивка сможет протестировать точность датчика и выведет результаты в консоль. В нашем случае не вижу большого смысла в этом, но пусть будет. Для срабатывания команды, сопло нужно переместить в зону точек автоуровня. Причем обязательно либо с экрана, либо подачей в консоль G0 Xxx Yyy, где xx и yy координаты.

Теперь включаем UBL

//#define AUTO_BED_LEVELING_UBL

просто убрав комментарий.

Включаем в прошивке тестовую печать по G26

//#define G26_MESH_VALIDATION

и следующими строками можно настроить параметры для пластика по умолчанию. Можно оставить как есть, у нее есть параметры, которыми задаются необходимые температуры, диаметры и прочее…

Настройка сетки

Укажем автоуровню сколько отступить от краев области печати (#define MESH_INSET 20), я выбрал 20 мм. Я уже обращал внимание на размеры стола и смещения сопла за рабочую область. Это должно быть настроено правильно.

//===========================================================================
//========================= Unified Bed Leveling ============================
//===========================================================================

//#define MESH_EDIT_GFX_OVERLAY // Display a graphics overlay while editing the mesh

#define MESH_INSET 20 // Set Mesh bounds as an inset region of the bed
#define GRID_MAX_POINTS_X 10 // Don’t use more than 15 points per axis, implementation limited.

Обратите внимание на раздел, параметры надо менять именно здесь. Следующей строкой указываем количество точек измерения на ось

#define GRID_MAX_POINTS_X 10

Максимум для прошивки 2.0.9.3 это 15 точек на ось. Т.е. будет 15 точек по X и 15 точек по Y. Итого 225. Поэтому не советую сразу “дурить” и выставлять максимальное число. Для начала 3 хватит. Когда освоитесь и все настроите, вот тогда… Для стола 320х280 я лично выставил 10. Без EEPROM нам, кстати, не обойтись, так что разрешаем

#define EEPROM_SETTINGS

Настройка дисплея

С этим файлом завершили. Дальше остается только дисплей. Тут уже кто во что горазд. В моем случае TFT 2.8, поэтому настроек не требует. Но и с автоуровнем из-за него есть некоторые ограничения.

Коврик

Принципиально у нас все готово для проверки работы автоуровня. Настало время подключить сам датчик (не забывайте про разъем! Обязательно перед подключением проверьте датчик, при его сдавливании пальцами руки он должен замкнуться, а при отпускании разомкнуться!) и наклеить коврик. Если у вас стол в центре ниже, чем по краям, вам придется оставить место по вертикали для сопла в месте, где оно паркуется сразу после HOMING. Это необходимо, чтобы опустить сопло ниже уровня стола. Иначе сработает концевик по Z и результаты измерения поверхности будут недостоверными! Если есть запас хотя бы пару миллиметров, вам повезло. Иначе придется подрезать коврик в этом месте. Если есть место в другом углу, то можно перенести концевик и в прошивке организовать парковку именно там. В любом случае, концевик Z придется отрегулировать чуть ниже, чем самая нижняя точка на столе.

Наладка

Теперь просто подключаем материнку по USB шнурку к компьютеру, открываем любую программу оболочку, лишь бы умела отправлять команды в принтер и выводить в консоль. Я пользуюсь Repetier Host. Честно говоря я не тестировал UBL с “правильным экраном”, поэтому будем делать все через консоль.

Во время наладки (проб и ошибок) настоятельно рекомендую держать руку на пульсе кнопке RESET (или выбрать любой другой способ) материнской платы, чтобы иметь возможность быстро отключить все движения осей если что то пойдет не так. 

Сам датчик не терпит нагрева, поэтому температура сопла и стола не должна быть выше 40 градусов цельсия. Чтобы результаты были достоверными, сопло должно быть чистым! Плотно ставим датчик на сопло, можно слегка подогреть стол до 40 градусов (я рискнул и нагрел стол до 60 градусов, у меня датчик выжил, как у вас будет не знаю. Продавцы, кстати, в описании пишут об этом).

Если есть желание проверить датчик на точность, то вот описание кода с параметрами. У меня такого желания не возникло :-|

Отправляем в консоль

М502  ; Сбрасываем настройки на “по умолчанию”
М500  ; Сохраняем в еепром
М501  ; Читаем настройки “по умолчанию” из еепром
G28     ; Оси в ноль

Теперь держим палец на кнопке ресет материнской платы (или любым другим способом приготовиться к экстренному отключению движений осей). Держим до окончания процесса зондирования и внимательно следим чтобы ничего не поломать.

G29 P1 T ; здесь Р1 это автоматическое зондирование, Т выдача результатов каждого зондирования в консоль

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

Вот теперь, если здесь все нормально, вместо сетки 3х3 точек можно установить желаемое количество, перепрошить и начать калибровку заново.

Далее заносим все измеренные параметры в еепром

G29 S ; Здесь S номер слота в ЕЕПРОМ, если не указан, будет выбран последний активированный слот.

Кстати, судя по описанию параметров, по G29 S-1 должен создаться и куда то вывестись G-code(полагаю в консоль, откуда его надо скопировать и перекинуть в текстовый файл с нужным расширением), по которому можно восстановить сетку в любое время.

Теперь остается только проверить точность созданной сетки

G26 B80 H230 F1.75 L0.2 S0.3 ; Где, температура стола, сопла, диаметр филамента, высота слоя, диаметр сопла соответственно. Если у вас нет “правильного” экрана, запустить команду вы не сможете.

Сетка уже готова, записана в еепром, НО! Перед тем как печатать необходимо ее активировать. Делается это так

G28
G29 A

Рекомендую добавить эти строки в стартовый код в слайсере. Обычно G28 там уже есть, так что сразу после нее прописываем G29 A(именно после, т.к. G28 отменяет G29 A). Вот теперь сетка будет подгружаться каждый раз в начале печати. Поэтому каждый раз при запуске печати калиброваться нет необходимости.

Т.к. у меня нет “правильного” экрана и я не смог сразу запустить тестовую печать, то я в CAD системе начертил сетку 10х10(по количеству точек) с высотой 0.2 мм и шириной линии по диаметру сопла и запустил на печать. Высота сетки гуляла примерно на 2-3 сотки в плюс. При первом запуске печати после калибровки лучше держите палец на кнопке ресет. Мало вдруг что-то пойдет не так…

Выводы

В принципе, UBL лично меня порадовала результатами. Теперь при печати сразу видно как двигается ось Z. Первый слой ложится идеально. Да, коврик не слишком пригоден для печати больших деталей, деталь на углах из-за усадки все равно задирает коврик вверх, хотя и не отлипает от него.

Ко всему прочему был вопрос, по всей ли детали пойдет эта кривизна? Как оказалось нет, первыми слоями до 10 мм постепенно выводится кривизна стола до нуля в плоскости X Y, а оставшиеся слои печатаются ровно. 10 мм это значение по умолчанию, в прошивке его можно изменить здесь

#define DEFAULT_LEVELING_FADE_HEIGHT 10.0<

А также можно задать с помощью кода M420 Z<высота> ничего не меняя в прошивке. Ее также можно добавить в стартовый код.

Здесь я раскрыл не все возможности UBL, только азы. Интересующимся всеми возможностями тыц, клац. Так что прошу в комментарии, делитесь, пишите. Возможно кто то уже пользовался и двумя слотами памяти…

P.S.

Буквально только что наткнулся на подводный камень. Весь описанный процесс в принципе работает… НО! В моем случае на очередной печати с активированным UBL не сработал автоуровень. Почему, не разобрался… Скорее всего подгрузилась не та сетка. Поэтому пришлось внести небольшие изменения.

Когда сохраняем сетку в EEPROM, обязательно указываем слот памяти

G29 S1 ; в данном случае пишем в слот 1.

А G-code дополняем так

G28 ; Обнуляем оси. Обычно уже есть, добавляем сразу после нее и следим чтобы ниже по тексту больше не было G28, т.к. она отменяет UBL в любом виде.

M420 L1 ; загружаем нужный слот. Автоуровень при этом не активируется.

G29 A ; активируем автоуровень.

Таким образом можно печатать на разных покрытиях. Например в моем случае есть магнитный коврик для мелких деталей, для больших я использую стекло. Сетку для стекла я записал в 1 слот, сетку для коврика во 2. Создал два профиля принтера с нужной сеткой и все…

10

Метки: , ,    2022-06-19      Раздел: Новичку, Прошивка, Секреты и лайфхаки 3D печати, Электроника  
Автор: Просмотров: 3 384   8 комментариев



8 комментариев на «Настройка автоуровня UBL»

  1. Время печати намного увеличиться при постоянной отработки по оси z?

    0
    1. Да вроде вообще не увеличивается. Z работает сама по себе, на скорости XY никак не сказывается. По крайней мере я не заметил.

      0
      1. Спасибо, будут пробовать.

        0
  2. Хорошая статья, однозначно лайк за труд, но мне кажется что это все как-то не практично, конечно если у вас не огромный промышленный принтер. Не понимаю в чем у вас заключается возня с клеем? Одно нанесение клея “играет” довольно долго. Я конечно не знаю каким вы клеем пользуетесь, если крутой 3D клей-карандаш, я по простенькому, пакет энтеродеза на бутылку водки развел и нормально. Про стол, я один раз в пол года наверное мою стекло и делаю выравнивание, а прям калибрую ну раз в месяц. Ну и стол у меня ровный.
    Так, нафига я это написал. Меня смутил датчик, какая-то шляпа, ну что я листиком калибрую стоя у принтера, что мне с датчиком, эти стоять. Автоуровень хотелось замутить себе, но не такой, я видел как-то в продаже сенсорный датчик, правда он в разы дороже, но опять же, мне не составляет труда проверить стол. Можно в принципе сделать. у меня не все так заморочено на LERDGE-Z, но как это решить технически я ни где не нашел.

    0
    1. У вас стол 300х400 мм? С пробигом посередине? Вы печатаете большие детали на кривом столе? Нет? Ну хотя бы магнитный коврик на кривой стол 300х400 наклеивали? Тоже нет? А так мне бы очень хотелось поглядеть как калибруется стол по 100 точкам вручную по бумажке, пусть даже раз в год :D

      0
  3. Дык не спорю, у меня стол поменьше, хотел 400х400, но меня дружно отговорили, у меня 250х250 и ровный.
    Коврики магнитные я тоже не клеил, у меня стол алюминиевый.
    В вашем случае, ну лично я бы занялся столом, вернее решением проблемы с кривизной стола, заменил бы стол на ровный (толстый лист алюминия, наварить ребра жесткости, пройтись фрезером по столу до состояния е**ть 3,14здец как ровно), да, это бы встало в копеечку, но результатом я был бы доволен. Стекло тоже не идеально, у меня “пузо” в центре, но разница в микроны.

    0
    1. А зачем(дюраль варить придется аргоном, к тому же от нагрева дюраль уведет так, ни один фрезер не поможет :D ), когда есть UBL???
      Когда сделал стол 300х400 понял, что такой стол нафиг не нужен, 250х250 выше крыши.

      0
  4. Ну если взять амг5 толстый, то и варить не придется, можно выбрать для уменьшения веса, что за алюминий использован в моем столе, я хз, не ведет, про размеры мне так же говорили, что даже 200х200 достаточно, ну я потянул чуть на себя :) и заказал не серийник на чуть больше, мне хватает.

    0

Добавить комментарий




     
Авторизация
*
*
Генерация пароля
Яндекс.Метрика