Кремень FMZ Реклама
Kremen FMHM Реклама

UBL ...или как получить идеальный первый слой

otumanov
Идет загрузка
Загрузка
11.09.2017
52681
111
3D-печать

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

92
Здравствуй, дорогой друг!

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

Многие из вас пользуются при печати на своих принтерах разного рода датчиками для 'выравнивания' уровня стола: микро-выключатели на сервоприводах, индукционные, емкостные, более продвинутые BLTouch с датчиком холла. Но, все, что до этого нам могла предложить прошивка Marlin'а -- это было билинейное сканирование поверхности или сканирование по трем точкам. Все, что это давало -- определение самой верхней точки и самой нижней точки по оси Z в углах стола, чтобы построить себе виртуальную ЛИНЕЙНУЮ поверхность (читай ПЛОСКОСТЬ), по которой во время печати поднималась и опускалась голова по оси Z.

Как мы знаем -- идеальных ЛИНЕЙНЫХ поверхностей не бывает) Любое стекло или зеркало, на которых проходит печать имеет кривизну. На стекле могут быть впадины и бугры. Пусть еле заметные, но они есть всегда. И такие вот 'буераки' не дают получить идеальный первый слой.

Как же с этим бороться? (далее речь пойдет исключительно о прошивке Marlin и версии не ниже 1.1.2)

С удивлением для себя обнаружил, что на данном ресурсе (да, и на многих других русскоязычных) обошли стороной освещение очень полезной и относительно свежей фишки в Marlin'e -- UBL (Unified Bed Leveling)

Вот что нам говорит мануал об этом --

The Unified Bed Leveling (UBL) system is a superset of the previous leveling systems.

The main improvements over the previous systems are:
  • Optimized line-splitting algorithm. For all mesh-based leveling methods, on Cartesians each linear move is split on grid line boundaries, respecting the best-known measured heights on the bed. UBL highly optimizes this boundary-splitting with pre-calculation, optimized handling of special cases, and avoiding recursion.
  • The user is able to fill in the portions of the mesh that can’t be reached by automated probing. This allows the entire bed to be compensated.
  • It allows the user to fine tune the system. The user is able to modify the mesh based on print results. Really good first layer adhesion and height can be achieved over the entire bed.

Т.е мы имеем дело с новой надстройкой унифицированной системы выравнивания стола, в основу которой были положены все предыдущие версии автовыравнивания. Замеряя уровень стола в разных точка прошивка создает полигональную модель (mesh) стола. Где для каждой границы пересечения вычисляется разница по оси Z, чтобы потом линейной интерполяцией вычислять необходимый уровень головы над столом в конкретной точке. При этом система позволяет вносить вручную точки, до которых не смог дотянуться ваш датчик. Так же, дает возможность редактировать точки, которые уже были просканированы ранее

Для успешной работы UBL требуется:

- хорошо отстроенная механика вашего принтера

- датчик уровня стола (емкостный, индукционный, BLTouch или микровыключатель на приводе сервы)

- изначально известный и настроенный offset по оси Z

- версия прошивки Marlin не ниже 1.1.2

- дисплей с энкодером

Настраиваем прошивку

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

Первым делом будет лучше разгрузить процессор вашей Меги, путем включения прерываний для обработки концевых выключателей, что даст нам более точную работу концевиков. Находим в конфиге прошивки --



// Enable this feature if all enabled endstop pins are interrupt-capable.

// This will remove the need to poll the interrupt pins, saving many CPU cycles.

//#define ENDSTOP_INTERRUPTS_FEATURE



и убираем комментарий для последней строки. Ок, прерывания включены, но для их правильной работы теперь концевик Ymax или Ymin (который у вас используется) необходимо перенести на Xmax. Для этого идем в конфигурацию портов вводавывода (у меня pins_RAMPS.h) и переназначаем вашему концевику новую ногу

//

// Limit Switches

//

#define X_MIN_PIN 3

#ifndef X_MAX_PIN

#define X_MAX_PIN 15

#endif

#define Y_MIN_PIN 14

#define Y_MAX_PIN 2

#define Z_MIN_PIN 18

#define Z_MAX_PIN 19


После этого заливаем прошивку и меняем ФИЗИЧЕСКИ на плате место подключения вашего Y-концевика в Xmax

(Отдельное спасибо за данную подсказку Саше, ака @Ressi)

Проверяем работу всех концевиков. Достаточно просто сделать AutoHome по всем осям. Получилось? Значит продолжаем дальше)

Теперь идем в конфигурацию прошивки и находим вот этом место --

//#define AUTO_BED_LEVELING_3POINT

//#define AUTO_BED_LEVELING_LINEAR

//#define AUTO_BED_LEVELING_BILINEAR

//#define AUTO_BED_LEVELING_UBL

//#define MESH_BED_LEVELING


и убираем комментарий с #define AUTO_BED_LEVELING_UBL

Если вы конфигурируете прошивку, ранее использовавшую какой-то иной метод автоуровня -- его нужно закомментировать (!)

Далее идем сюда --

//===========================================================================

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

//===========================================================================

#define UBL_MESH_INSET 20 // Mesh inset margin on print area

#define GRID_MAX_POINTS_X 5 // Don't use more than 15 points per axis, implementation limited.

#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X

#define UBL_PROBE_PT_1_X 40 // Probing points for 3-Point leveling of the mesh

#define UBL_PROBE_PT_1_Y 250

#define UBL_PROBE_PT_2_X 40

#define UBL_PROBE_PT_2_Y 40

#define UBL_PROBE_PT_3_X 300

#define UBL_PROBE_PT_3_Y 0


#define UBL_MESH_INSET 20 -- расстояние, которое необходимо отступить от края стола при построении сетки.

#define GRID_MAX_POINTS_X 5 -- количество точек (разрешение) сетки. Тут настоятельно рекомендую начать с трех точек, а когда будет понятна механика работы системы -- сможете добавить.

В строках #define UBL_PROBE_PT_x необходимо указать точки (координаты точек) для 3х-точечного измерения уровня (не обязательно, лишь бы вписывались координаты в ваш стол с учетом положения установки датчика уровня относительно оси хотенда)

Теперь ищем вот это --

// Enable the M48 repeatability test to test probe accuracy

//#define Z_MIN_PROBE_REPEATABILITY_TEST


и убираем комментарий. Этим мы разрешаем тестирование 'повторяемости' показаний вашего датчика уровня

Вроде, всё) Заливаем прошивку в принтер

Теперь запускаем вашу любимую софтину, которая может работать с принтером через консоль. Первым делом мы говорим принтеру --

M502

M500

M501

Это сделать необходимо для того, чтобы прошивка переинициировала EEprom, т.к данные о полигональной сетке стола будут теперь храниться именно там. Далее отправляем все оси домой --

G28

Теперь надо проверить работу нашего датчика уровня на 'повторяемость' показаний. Говорим мы ему --

M48 P4 V2 E L2

Принтер радостно начинает подскакивать на месте и выводить в консоль показания датчика уровня.
UBL ...или как получить идеальный первый слой
Тут нас интересует строчка Standard Deviation

Чем меньше показания в этой строчке -- тем меньше разброс показаний датчика. В моем случае показывает 5 микрон. Что очень даже гуд )) Если у вас показания будут разнится в десятые доли миллиметра или больше -- такой датчик не годится для дальнейшего использования.

Выяснили, что с датчиком уровня все в порядке и приступаем к обучению системы унифицированного выравнивания стола. Для этого надо дать команду --

G29 P1 T

Теперь необходимо ОЧЕНЬ (!!!) внимательно следить за работой головы, чтобы она не воткнулась куда-нибудь (в профиль или не зацепила прищепку, которая держит стекло. Если зацепляется или ударяется -- снова заходим в конфигурацию прошивки и выставляем другое расстояние от края стола -- #define UBL_MESH_INSET x)

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

G29 P2

Голова отъезжает в первую точку, которую самостоятельно замерить не смогла. Тут требуется лист бумаги или калиброванный щуп. Подставляете его под сопло и начинаете вращать энкодер. При этом голова будет опускаться или подниматься. Щуп или лист бумаги под головой должен слегка прижаться к столу. Тут все так же, как вы руками стол свой крутите. Только крутим не болты крепления стола, а энкодер )) По окончании настройки энкодер необходимо нажать. Голова поедет на следующую точку и так до конца. Когда все точки будут заданы -- можно попробовать провести тестовую печать. И эту печать мы будем делать прямо из прошивки. Говорим нашему принтеру --

G29 S

этим мы внесли (сохранили) все наши точки в EEprom. Далее

G28

G26 Bxx Hyy F1.75 L0.2 S0.4


где B -- это температура нагрева стола, H -- температура нагрева экструдера, F -- диаметр филамента, L -- высота слоя и S -- диаметр сопла

Предположим, что у нас PLA, сопло 0.4 мм в диаметре, пластик 1.75мм, значит говорим --

G26 B60 H190 F1.75 L0.2 S0.4

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

Если на печати были точки, которые утоплены в стол или наоборот печатались над столом --

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

G29 P4 T

голова сама встанет на нужную точку и вращением энкодера, глядя на экран, можно регулировать высоту этой точки

Не забываем сохранять то, что мы уже настроили командой

G29 S

После всех регулировок снова повторяем печать через команду G26 Bxx Hyy Fzz Laa Sbb

Таким образом доводите до идеальной печати всю рабочую поверхность стола.

Т.к наш mesh хранится в EEprom'е -- нет нужны перед каждой новой печатью запускать сканирование поверхности. Начальный g-код будет выглядеть довольно просто

G28

G29 A

PS^ возможно, в данной статье я раскрыл не все нюансы работы с новым автоуровнем. Тем не менее -- даже подобных статей в рунете я не нашел) Пришлось разбираться самостоятельно.

Если в последующем будут выявлены какие-то недочеты -- попрошу администратора или модераторов дать возможность внесите коррективы

Всем удачной печати и отличных первых слоев с UBL

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых статьях.

Отписаться от уведомлений вы всегда сможете в профиле автора.

92
Комментарии к статье