Всегда честно признавай свои ошибки – это притупит бдительность начальства и позволит тебе натворить новые.
Марк Твен

Меню навигации для мобильных

Установка датчика автоуровня стола BLTouch/3DTouch на 3D принтер

Автор Shaman, 16 Окт., 2022, 15:55

« предыдущая - следующая »

Shaman

Дабы не разводить воду с длинным вступлением обойдусь коротким.  :)

У меня есть 3D принтер Infitary M508 (дрыгостол) и я решил прикрутить к нему датчик автоуровня стола BLTouch.


Задача оказалась не тривиальной, поскольку даже на сайте производителя датчика нет инструкции на актуальную версию прошивки Marlin, а та что есть устарела. Поэтому решил поделиться опытом.
Скажу сразу результат меня порадовал и потраченное время того стоило.
Пример печати без автовыравнивания
Поскольку я печатаю на стекле приходилось использовать много клея и он весь пропечатывался на первом слое.
09.jpg
[свернуть]
Пример печати с автовыравниванием
Клей теперь необходимо наносить в следовых количествах (намазать в центре стола и растереть влажной салфеткой повсей поверхности). Слой получается идеальным.
10.jpg
[свернуть]

Основной материал взят из этой статьи, а также официальной документации на Marlin

Начнём.

Установка датчика

1. Датчик необходимо установить  как можно ближе к экструдеру дабы зоны которые он не сможет просканировать были как можно меньше. И если смещение по осям X и Y не критичны то по оси Z оно должно быть минимально и укладываться в диапазон от 2,3-4,3 мм.
На картинке из даташита представленной ниже указанны размеры и дпуски необходимые для изготовления своего крепления.



У меня получилось вот так
01.jpg 02.jpg
[свернуть]

2. Далее необходимо подключить датчик к плате. Коннектор с черно-белым (может быть зелёно-оранжевым) проводом подключается вместо концевика Z, черный (зелёный) масса. Коннектор с трехцветным проводом подключается либо к специальному разъёму для датчика, либо к любому свободному выводу для подключения сервопривода доступного на вашей плате. Поскольку плат очень много описать все не представляется возможным. Здесь есть описания на некоторые из них. Не забываем проверять распиновку:
Коричневый, Зелёный или Черный это общий.
Красный - питание.
Оранжевый, Желтый или Белый - управление.
На моей плате я задействовал вывод D11
03.jpg
[свернуть]

По физической установке всё.

Активация датчика в прошивке

Все изменения буду проводиться в файлах Configuration.h и Configuration_adv.h. Поскольку вышеуказанная статья является циклом статей по конфигурации прошивки Marlin в ней приводятся варианты настроек под различные конфигурации. Я, дабы опытным путём не вычислять какие настройки мне подходят, скачал файлы конфигурации для своего принтера с Гитхаба и сравнивая её со статьёй стал настраивать параметры.

1. Открываем файл Configuration.h в любом удобном для вас редакторе.

2. Раскоментируем строку:
#define BLTOUCH
Этот параметр активирует датчик. Также производитель рекомендует включить #define PROBING_HEATERS_OFF, если возникают помехи от нагревателя экструдера, но я просто не включал нагрев во время калибровки.

3. Настраиваем отступы датчика от экструдера.
Находим строку:
#define NOZZLE_TO_PROBE_OFFSET
и меняем значения в скобках. Они соотносятся с осями следующим образом { X, Y, Z }, отрицательные значения это вперёд и влево, положительные: назад и в право.
Пример моих настроек
#define NOZZLE_TO_PROBE_OFFSET { -31, 3, 0 }

04.jpg
[свернуть]

4. Если вы, как и я используете стекло на зажимах, то необходимо выставить запас безопасности, дабы датчик в них не попал. Это значение, в мм, меняется в строке:
#define PROBING_MARGIN

5. Также для безопасности определение Z_HOME лучше делать в центре стола. Для этого нужно включить опцию:
#define Z_SAFE_HOMING

6. Включаем экранное меню для теста датчика (если экрана нет пропускаем, но принтеры без экрана сейчас редкость)
#define LCD_BED_LEVELING
и для индивидуального хоминга по осям
#define INDIVIDUAL_AXIS_HOMING_MENU

7. Для предварительного выравнивания стола по углам (если они есть  ;)  ), через меню, активируем опцию:
#define LCD_BED_TRAMMING

Дальше интереснее.  :)
Датчики бывают оригинальные и не очень. На плате может быть специальный разъём для установки датчика, а может нет.
Если ваш датчик оригинальный и разъём есть переходите к 10-му пункту, если какой-то ответ нет, то смотрим пункты 8, 9.

8. Теперь нужно указать программе на каком, пине у нас подключен датчик. За это отвечает параметр
#define SERVOх_PIN Y
где вместо х выставляется порядковый номер сервопривода если он не один (да датчик управляется как сервопривод), если один то ставим 0. Y пин к которому подключен датчик.
Если параметра нет вписываем его самостоятельно.Можно где угодно, но для удобства чтения лучше делать это в секции SERVO в конце файла.
Если датчик оригинальный переходим в пункт 10

9. Если датчик не оригинальный, здесь подробнее, придётся поиграться с настройками.
В моём случае пришлось явно указать, что подключен сервопривод с такими-то параметрами. Для этого раскоментируем строку
#define NUM_SERVOS
и ставим после неё 1-цу (кол-во сервоприводов в системе). Если у вас он не один, то увеличиваем этот параметр на 1-цу и в параметре
#define SERVO_DELAY
(который отвечает за задержку перед началом следующего движения, чтобы дать сервоприводу время достичь целевого угла), устанавливаем, в скобках, через запятую,  количество значений равное количеству сервоприводов. Т.е. если он 1 то { X }, если 2 то: {X, X}, если 3 то: {X, X, X} и т.д
Включаем параметры:
#define Z_PROBE_SERVO_NR 0     
#define Z_SERVO_ANGLES { 70, 0 }

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


10. Пробуем залить прошивку и проверить работоспособность датчика через меню либо отправляя команды:
M280 P0 S10 - опустить щуп,
M280 P0 S90 - поднять щуп,
M280 P0 S60 - циклическое поднятие и опускание щупа
Параметр P0 указывает на номер сервы.
Важно!!!
До того как вы не убедитесь, что датчик работает не возвращайте ось Z в домашнюю позицию, можно сломать принтер.

Если датчик работает переходим к дальнейшим настройкам, если нет пробуем менять параметры из пункта 9.
а. Проверяем правильно ли выбран номер пина вместо датчика можно подключит сервопривод и если он вращается при включении принтера, то пин выбран верно, если нет меняем настройку.
б. Если с пином всё в порядке, но датчик не работает пробуем менять углы с  { 70, 0 } на { 10, 90 }.
в. После положительного выполнения  п.п. а и б необходимо проверить срабатывание концевика для этого поднимаем ось Z  как можно выше (дабы у вас было больше времени на реакцию если датчик не сработает) и производим авто возвращение Z в домашнюю позицию. В процессе датчик должен выдвинуть шток, а принтер начать возвращение. Нам же необходимо сымитировать касание датчиком стола просто подставив палец на пути движения штока. Когда шток западёт принтер должен остановить движение (пример правильного срабатывания под спойлером ниже).
Пример
[свернуть]
Если реакции нет немедленно выключаем принтер, меняем в строках:
#define Z_MIN_ENDSTOP_INVERTING
#define Z_MIN_PROBE_ENDSTOP_INVERTING

значение true или false на противоположное и проверяем снова.
Немного подробнее описано в этой статье (если она пропадёт из интернета, то я прикрепил её в аттачах).

Всё заработало? Поздравляю вы завершили настройку датчика, пора переходить к настройке метода выравнивания. ;D


Настройка метода выравнивания

Во всех инструкциях которые попадались мне был использован билинейный метод выравнивания тогда как создатели Marlin рекомендуют использовать UBL (Unified Bed Leveling) метод т.к. он объединяет в себе преимущества 3-х точечного и билинейного методов. Вот ссылка на описание и мануал от создателей, на английском.

1. Активируем метод и сопутствующие параметры.
#define AUTO_BED_LEVELING_UBL - включает сам метод
#define G26_MESH_VALIDATION - включает тестовую печать
#define EEPROM_SETTINGS - включает возможность сохранения настроек в EEPROM

2. Установим количество точек по которым будет рисоваться карта поверхности изменив  значение в строке
#define GRID_MAX_POINTS_X.
По умолчанию точки по Y равны X, но если вы хотите иначе, закомментируйте строку:
#define GRID_MAX_POINTS_Y GRID_MAX_POINTS_X
и добавьте рядом новую:
#define GRID_MAX_POINTS_Y где после Y, через пробел укажите необходимое вам число.
Поскольку на хранение точек выделен байт то максимальное число точек в сетке не может превышать 255. Также ещё момент, UBL при сканировании добавляет по единице к указанным числам.
Количество подбирается эмперическим путем, исходя из размеров стола и разумной необходимости. Не нужно проверять каждые милиметр, оптимальное расстояние 2-3 см меду точкаи. В моём случае это число 9 по обоим осям.

3. Если вы используете стекло со скобами/зажимами, нужно отрегулировать запас безопасности, чтобы предотвратить столкновение с ними датчика выравнивания. Значение в мм.
Для версий Marlin 2.0.6.x и выше:
#define PROBING_MARGIN 20
для более старых:
#define MIN_PROBE_EDGE 20

Важно!!!
Процесс тестовой печати игнорирует эти параметры. И если домашняя позиция по осям X и Y за зажимами их нужно снять. Я снимал прямо во время печати, по одному.

4. Т.к. процесс поиска домашней позиции по команде G28 проводимый в начале каждой печати отключает автовыравнивание, нужно включить опцию для его автоматического включения.
#define RESTORE_LEVELING_AFTER_G28

5. Чтобы не нагружать двигатели по оси Z постоянной корректировкой уровня активируем опцию:
#define ENABLE_LEVELING_FADE_HEIGHT
Которая постепенно отключает коррекцию. По умолчанию это значение стоит на 10 мм и задаётся строкой
#define DEFAULT_LEVELING_FADE_HEIGHT 10.0
Важно отметить, что для предотващения искажения детали всё же необходимо произвести первичное механическое выравнивание стола.

6. сохраняем файл Configuration.h и открываем Configuration_adv.h

7. Раскоментируем в ранее открытом файле строку:
#define PROBE_OFFSET_WIZARD
которая включит экранное меню для более удобной настройка Z офсета.

8. Раскоментируем строки:
#define BABYSTEPPING
#define INTEGRATED_BABYSTEPPING
#define BABYSTEP_ALWAYS_AVAILABLE
#define DOUBLECLICK_FOR_Z_BABYSTEPPING
#define BABYSTEP_DISPLAY_TOTAL

они позволят нам в процессе печати, двойным нажатием на энкодер вызвать меню подстройки Z офсета. Что позволит на ходу скорректировать высоту по оси Z.

9.  И просто в довесок активируем возможность смены филамента в процессе печати.
#define ADVANCED_PAUSE_FEATURE
Для этого также потребуется вернуться к файлу Configuration.h и включить
#define NOZZLE_PARK_FEATURE
и
#define NOZZLE_CLEAN_FEATURE
Иначе компилятор радостно сообщит нам о неудовлетворённых зависимостях  :)

На этом процесс настройки прошивки закончен.

Процесс калибровки

Расположение нижеуказанных пунктов меню может тличаться в вашей прошивке, но они будут всё равно, нужно только поискать  ;)

1. Предварительно выравниваем стол. Для этого выбираем пункт меню Moution > Bed Tramming и выравниваем стол по углам. Переход на следующий угол: NextT. По окончании выбираем Done.

2. Т.к. расположить датчик по высоте идеально практически невозможно необходимо задать смещение по оси Z. Это можно сделать непосредственно в прошивке изменив последнее значение в скобках в парамете:
#define NOZZLE_TO_PROBE_OFFSET
Но поскольку это значение неизвестно, гораздо удобнее настроить его с помощью Configuration > Advanced Settings > Probe Offsets > Z Probe Wizard. А после активации процедуры необходимо, с помощью пунктов меню, опустить экструдер на необходимую высоту, нажать Done и сохранить настройку Configuration > Store Settings.

3. Наконец переходим непосредственно к калибровке.
а. Идем в пункт меню Motion > Unified Bed Leveling > Step-By-Step UBL.
б. Активируем первый пункт Build Cold Mesh,принтер начнёт процесс составления карты поверхности.
Выглядит он так:
[свернуть]

в. По окончании активируем пунктом Smart Fill-in составленную карту и делаем пробную печать через пункт Validate Mesh.
Тыц
[свернуть]

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

08.jpg
[свернуть]
Сохраняем настроку Motion > Unified Bed Leveling > Mesh Storage. Для сохранения доступны ажно 8 слотов :o.  Можно также сохранить через Motion > Unified Bed Leveling > Step-By-Step UBL > 7. Save Bed Mesh, но он не дает выбрать слот и скорее всего сохраняет в 0-й, не проверял.
Если на печати наблюдаются дефекты идем в пункт Validate Mesh (можно выбрать любой) и пошагово подстраиваем сетку вручную. Поле подстройки спова запускаем тестовую печать и так по кругу до получения удовлетворительного результата.

Собственно на этом всё осталось только добавить в стартовый Г-код две команды после команды G28:
G29 A - активирует автовыравнивание
G29 Lх - загружает катру из выбранного слота (в место х необходимо прописать номер слота).

Благодарю за внимание, хорошей вам печати.