Почему не работает автоуровень стола marlin 2 skr mini e3

roboforum.ru

Технический форум по робототехнике.

  • Список форумов‹Мастерская‹3D печать
  • Изменить размер шрифта
  • Версия для печати
  • Магазин
  • Правила
  • Wiki
  • FAQ
  • Регистрация
  • Вход

Калибровка стола Marlin UBL

Калибровка стола Marlin UBL

setar » 28 фев 2019, 13:21

Приветствую начинающих печатников и профессионалов.

Этот небольшой пост я решил выложить, чтобы на многочисленные вопросы о методике калибровки стола, отвечать ссылкой.
Речь идет о новой методике программного выравнивания стола unified bed leveling (UBL) реализованной в прошивке MARLIN.
Оригинальная документация http://marlinfw.org/docs/features/unifi . eling.html

Суть выравнивания заключается в том, что изначально со стола снимается (при использовании датчика уровня, например Bltouch) матрица реальных высот, и по всем этим точкам строится сглаженная криволинейная поверхность.
Далее эта виртуальная поверхность используется как ноль модели при печати (есть опция постепенного выравнивания к физическим координатам).
После активации UBL сопло начинает двигаться в виртуальной координатной системе, с учетом кривизны стола. Например при горизонтальном движении на высоте 0.1 мм над уровнем стола, координата Z будет плавно подкручиваться для огибания всех неровностей.

Этот механизм особенно востребован на системах со значительной областью печати ( 300+ мм) поскольку поверхность стола обычно имеет форму пропеллера и механически не выравнивается.

Для большего эффекта, я испытывал реальный принтер, но с поверхностью стола имеющей подкладки с одной стороны создающими перепад в 5 мм. При такой сильно измененной геометрии использовать постепенное выведение к реальной координатной сетке (Fade Height) не рационально, и эта опция отключена Fade Height = 0

0. подготовка
Прогреваем стол и сопло до рабочей температуры
M109 S230
M190 S120
— ожидаем стабилизации 10-15 мин —

1. калибровка датчика
1.1. проверка текущей конфигурации EEPROM
M503
— skip—
Unified Bed Leveling System v1.01 active.
Active Mesh Slot: 1
EEPROM can hold 16 meshes.
— skip —
echo: M851 Z-1.55
— skip —
1.2. выключаем выравнивание
SENDING:G29 D
Unified Bed Leveling System v1.01 inactive.

1.3. обнуляем смещение сенсора относительно сопла
M851 Z0
1.4. сохраняем текущее состояние
M500

1.5. перемещаемся в точку тестирования
G1 z20 x200 y200

1.6. тестируем точность сенсора и среднюю координату срабатывания
SENDING:M48 P10 V2
M48 Z-Probe Repeatability Test
1 of 10: z: 5.077
2 of 10: z: 4.919
3 of 10: z: 5.104
4 of 10: z: 5.009
5 of 10: z: 5.138
6 of 10: z: 5.188
7 of 10: z: 5.088
8 of 10: z: 5.015
9 of 10: z: 5.018
10 of 10: z: 5.174
Finished!
Mean: 5.072989 Min: 4.919 Max: 5.188 Range: 0.269
Standard Deviation: 0.079403

1.7. перемещаемся на место в котором был замер стола
g1 z20 x200 y226 ; датчик смещен на 26мм позади сопла, сопло должно встать на место где был датчик

1.8. производим тест на зажим бумажки (обычной A4), постепенно вручную уменьшая коордирату Z по 0.1 мм , первый прижим к столу покажет искомую координату
тест на зажим листа бумаги Z=3.6

1.9. вычитая из реальной высоты из теста на зажим бумаги , среднюю высоту замерянную датчиком, получаем смещение датчика
3.6-5.07=-1.47мм

1.10. сохраняем смещение датчика в EEPROM
M851 Z-1.47
M500

2. калибровка стола

2.1. основная калибровка
G29 P1 T
SENDING:G29 T
Bed Topography Report:
( 0,390) (390,390)
0 1 2 3 4 5 6
6 | +6.956 +7.033 +7.083 +6.979 +6.704 +6.494 +6.654
|
5 | +7.520 +7.345 +7.208 +7.136 +7.113 +6.832 +7.002
|
4 | +8.227 +8.117 +8.064 +7.840 +7.787 +7.808 +7.756
|
3 | +8.703 +8.681 +8.267 [+8.606] +8.363 +8.305 +8.288
|
2 | +9.517 +9.098 +9.087 +9.123 +9.001 +9.005 +8.960
|
1 | +10.072 +9.788 +9.895 +9.869 +9.759 +9.471 +9.396
|
0 | . . . . . . .
0 1 2 3 4 5 6
( 0, 0) (390, 0)

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

SENDING:G29 P3 T
Bed Topography Report:
( 0,390) (390,390)
0 1 2 3 4 5 6
6 | +6.956 +7.033 +7.083 +6.979 +6.704 +6.494 +6.654
|
5 | +7.520 +7.345 +7.208 +7.136 +7.113 +6.832 +7.002
|
4 | +8.227 +8.117 +8.064 +7.840 +7.787 +7.808 +7.756
|
3 | +8.703 +8.681 +8.267 [+8.606] +8.363 +8.305 +8.288
|
2 | +9.517 +9.098 +9.087 +9.123 +9.001 +9.005 +8.960
|
1 | +10.072 +9.788 +9.895 +9.869 +9.759 +9.471 +9.396
|
0 | +10.627 +10.477 +10.703 +10.615 +10.518 +9.938 +9.832
0 1 2 3 4 5 6
( 0, 0) (390, 0)

2.3. сохранение матрицы поправок
G29 S1

2.4. Активация и сохранение автоуровня
G29 F0
G29 A
M500

3.2.
Прогреваем стол и сопло до рабочей температуры
M109 S230
M190 S120

Читайте также:  Duo mobile не работает пароль

3.3. контроль состояния EEPROM
SENDING:M503
—
echo:Unified Bed Leveling:
echo: M420 S1 Z0.00
Unified Bed Leveling System v1.01 active.
Active Mesh Slot: 1
EEPROM can hold 16 meshes.
—
echo:Z-Probe Offset (mm):
echo: M851 Z-1.00

3.4. загрузка и активация системы автоуровня
G29 L1
G29 J
G29A

3.5. проверка встроенным тестом
G26 B120 H250 L0.4 O0.5 S0.6 X200 Y200 U100

Ну и в завершение приведу пример стартового кода для использования UBL.
При этом происходит загрузка матрицы , ее «подтягивание» на актуальную высоту по 4 контрольным точкам (по углам).

Re: Калибровка стола Marlin UBL

setar » 09 июл 2019, 12:07

включение UBL в прошивке Marlin 2.0

// датчик стола блтач
#define BLTOUCH
#define MIN_PROBE_EDGE 0
#define MULTIPLE_PROBING 2
#define Z_PROBE_SPEED_FAST (HOMING_FEEDRATE_Z / 1.5)
//тут свои циферки по смещениям
#define X_PROBE_OFFSET_FROM_EXTRUDER 0 // X offset: -left +right [of the nozzle]
#define Y_PROBE_OFFSET_FROM_EXTRUDER 25 // Y offset: -front +behind [the nozzle]
#define Z_PROBE_OFFSET_FROM_EXTRUDER -0.7 // (больше минус — сильнее вдавливаем в стекло)

#define AUTO_BED_LEVELING_UBL
#define RESTORE_LEVELING_AFTER_G28
#define G26_MESH_VALIDATION
#define MESH_INSET 0 // Set Mesh bounds as an inset region of the bed
#define GRID_MAX_POINTS_X 7 // тут свое пожелание по матрице , я использую 7×7 на столе 400×400 Don’t use more than 15 points per axis, implementation limited.

Re: Калибровка стола Marlin UBL

whoim » 05 фев 2020, 00:23

Re: Калибровка стола Marlin UBL

setar » 07 фев 2020, 16:29

прошивке все равно какого типа у вас датчик, главное чтобы сигнал Z_PROBE отрабатывал

Если у вас проба на Z_MIN_PIN должно быть определение #define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
Можно вообще любой контакт назначить
//#define Z_MIN_PROBE_PIN 32 // Pin 32 is the RAMPS default

концвик должен быть объявлен в максимуме (и использоваться по факту для хоминга ) #define USE_ZMAX_PLUG

Re: Калибровка стола Marlin UBL

whoim » 07 фев 2020, 16:38

Re: Калибровка стола Marlin UBL

Myp » 06 окт 2020, 00:20

Re: Калибровка стола Marlin UBL

setar » 06 окт 2020, 11:50

ну да, оно заполняет лишь одну строку/столбец
хотя лучше бы в идеале эти пустоты не появлялись.

P.S.
тут еще новый удобный функционал появился не так давно — опишу тут, потом в инструкцию добавлю.

Предыстория: UBL задуман классно, но реализация в коде и математике — хреновоя
например, если включена функция автозаписи таблицы поправок при каждом сохранении EEPROM (я всегда отключаю) то со временем таблица в сохраненном слоте портится. Дело в том что на эталонную таблицу обычно наложена поправка получаемая по G29 J.
Ну и при 10-15 сохранениях с поправками — все плывет.

Для себя нашел следующую тему:
не пользуюсь функцией G29 J вообще, предпочитая ручное внесение поправок, так получается гораздо точнее (возможно реализация G29 J кривая).
Для внесения поправок использую функцию параллельного переноса поверхности поправок
например для большего вдавливания в стекло на 0.1мм руками перед печатью делаю так:
G29 L1
G29 P6 C-0.1
G29 S1

для удаления головы от стола и уменьшения «вмазывания» например на 0.05
G29 L1
G29 P6 C0.05
G29 S1

с таким скриптом сделал кнопочки в октопринте вверх и вниз сопло
теперь блтач использую один раз, после механических изменений типа протяжки болтов и тех обслуживания.
причем карту поверхности строю 15×15

Re: Калибровка стола Marlin UBL

Myp » 06 окт 2020, 13:54

у меня по периметру всегда получается 1 пустой столбец + слева дополнительный пустой столбец.
Я так и не понял от чего это зависит.

Как рассчитываются координаты точек для сетки?
Координаты точки матрицы 0:0 не совпадают с нулём координат стола?
на столе 101х101 и матрицей 6х6 точек я получаю вот такую картинку.
Код: Выделить всё • Развернуть
Офсет датчика 27мм по X и 2мм по Y
то есть верхняя строка явно должна смочь тестироваться
и второй ряд слева уже тоже попадает в доступное пространство

Добавлено спустя 26 минут 51 секунду:
для 8 точек такая же петрушка.

если смотреть на принтер то видно что при пробинге столбца номер 3 по факту каретка уезжает в ноль по оси X
то есть первые два ряда вобще где-то в минусе находятся.

Re: Калибровка стола Marlin UBL

setar » 06 окт 2020, 14:03

скорее всего у тебя отступы от края стоят большие, плюс смещение датчика от опла — получается большая мертвая зона
тут даже картинка по мертвым зонам есть.
https://marlinfw.org/docs/features/unif . eling.html

выведи в ноль поля
#define PROBING_MARGIN 0

этот параметр тоже занули
#define MESH_INSET 0

Re: Калибровка стола Marlin UBL

Myp » 06 окт 2020, 14:08

Уже занулены.
По факту точки третьего столбца находятся на нуле координат, а 0 и 1 столбец где-то в минусе по координатам

для 15 точек ещё веселее
4 столбец реально был протыкан когда каретка была в нуле по Y.
0,1,2,3 столбцы это где-то в отрицательных координатах.
Код: Выделить всё • Развернуть
может алгоритму не нравится мой маленький стол 101 мм?

Читайте также:  Контакте не работает ответы

Re: Калибровка стола Marlin UBL

setar » 06 окт 2020, 14:29

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

// The size of the print bed
#define X_BED_SIZE 400
#define Y_BED_SIZE 355

// Travel limits (mm) after homing, corresponding to endstop positions.
#define X_MIN_POS -21
#define Y_MIN_POS -55
#define Z_MIN_POS 0
#define X_MAX_POS (435-21)
#define Y_MAX_POS (410-55)
#define Z_MAX_POS 342

особенность в том что эти значения перемещений, должны соответствовать реальным относительно начала координат (левый ближний угол стола).
Раньше я ставил в MIN_POS всегда ноль, максимум = размеру стола, а выравнивал все посредством manual homing position .
Так НЕ Правильно (хотя и работает везде кроме автоуровня).

желательно переопределения хоминг позиции не использовать
//#define MANUAL_X_HOME_POS 0
//#define MANUAL_Y_HOME_POS 0
//#define MANUAL_Z_HOME_POS 0

Re: Калибровка стола Marlin UBL

Myp » 06 окт 2020, 17:56

такс
очевидно алгоритму не нравится когда задана точка парковки вручную
убрал, стало лучше.
Код: Выделить всё • Развернуть

остальные размеры у меня не заданы жёстко.
#define X_MIN_POS 0
#define Y_MIN_POS 0
#define Z_MIN_POS 0
#define X_MAX_POS X_BED_SIZE
#define Y_MAX_POS Y_BED_SIZE
#define Z_MAX_POS 101

Добавлено спустя 16 минут 32 секунды:

Re: Калибровка стола Marlin UBL

setar » 06 окт 2020, 18:45

что говорит G29 T1 V4 ?
интересны координаты сетки

Добавлено спустя 4 минуты 54 секунды:

Re: Калибровка стола Marlin UBL

Myp » 07 окт 2020, 12:59

мне тоже интересны координаты сетки но.
их нет, тока высоты.
Код: Выделить всё • Развернуть
а можно задавать вручную точки меша?
щас берётся весь стол и на него накладываестя сетка, а потом уже определяется куда проба не может доехать.
по уму бы надо сначало определять доступную для пробинга область и уже на эту область накладывать координаты сетки точек.
Чтобы не было как у меня, из за 2 мм офсета, я теряю всю полосу в 20 мм.

а ежели я поставлю
#define MESH_MIN_Y 2
по идее это сдвинет нижнюю границу для сетки на 2 мм и я смогу пробоваться у самого краешка.

Re: Калибровка стола Marlin UBL

setar » 07 окт 2020, 13:39

вот так сделай, получишь нижнюю строку
#define MESH_INSET 2

Добавлено спустя 18 минут 55 секунд:
Кстати никто тебя не заставляет заполнять пустоты автоматом.
Сделай это вручную:

  1. Берем пластиковую карточку
  2. G29 P2 B T V4 H
  3. Сначала будет произведен замер толщины тестовой карты в центре стола — подкладываем ее под сопло и крутя ручку на LCD экране (для этого режима LCD обязателен) слегка прижимаем карту соплом к столу, степень прижима запоминаем и далее стараемся его повторить. Делаем Click
  4. далее сопло будет приезжать на точки сетки в которых пока нет данных и так же прижимая сопло через карточку кликаем когда получим нужную степень прижима
  5. проверяем сетку G29 T
  6. сохраняем ее например в 1 слот (используется по умолчанию если не указано иное)
    G29 S1

Источник

Anet A8 Plus: как прикрутить автоуровень BLTouch (и прошить принтер на Marlin 2.0)

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

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

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

Статья относится к принтерам:

Решил поставить китайский BLTouch (он же 3D Touch) на свой принтер, но конкретно для Anet A8 Plus мануалов не нашёл. Мне, как новичку, было непросто разобраться, поэтому собрал всё в кучу.

Чтобы заставить работать датчик автоуровня, нужно сделать несколько вещей:

1. Повесить датчик и подключить электрику.

2. Прошить принтер на Marlin, предварительно поправив файлы конфига.

3. Настроить всё это добро.

1. Физическая часть

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

Я распечатал вот это крепление с Thingiverse из ABS, датчик крепится слева от экструдера под вентилятор охлаждения. В сложенном состоянии концевик оказался ниже сопла, пришлось подложить гайки под крепление.

Сам датчик я купил на Али вот здесь с доставкой из России, кстати привезли очень быстро. В описании указана распиновка:

  • Чёрный — земля
  • Белый — Z min
  • Коричневый — земля
  • Красный — +5 Вольт
  • Оранжевый — сигнал

На деле провода оказались другого цвета:

  • Чёрный — земля
  • Белый — Z min
  • Зелёный — земля
  • Красный — +5 Вольт
  • Жёлтый — сигнал

Электрику я подключал, посмотрев вот это видео:

Только на видео простой A8, не Plus. У нас сигнальный провод подключается к седьмому пину дисплея, а не к шестому (в прошивке это будет пин 29). Сделать это можно разными способами, я скрутил конец провода в петлю, залудил и просто накинул на пин, поверх воткнув разъём дисплея. Остальные провода я подключил вместо концевика оси Z по схеме:

Читайте также:  Как настроить фитнес браслет вручную

2. Прошивка и конфиг

Прошивал вот по этому мануалу. Не знаю, как у других, в моей плате уже есть бутлоадер и прошиваться можно просто через USB кабель. Если загрузчика нет, то его можно залить с помощью ардуинки, вот хороший мануал. Короче:

  • Качаем последнюю версию Arduino IDE
  • Качаем Anet A8 board definition
  • Распаковываем board definition, как указано в ридми (Мои документы\Arduino\hardware)
  • Качаем последнюю версию марлина, распаковываем архив в какую-нибудь папку
  • Качаем файлы конфига для Anet A8 Plus, копируем с заменой эти файлы в папку \Marlin
  • Открываем файл \Marlin\Marlin.ino в Arduino IDE

Теперь надо сразу отредактировать конфиг. Некоторые параметры подбираются опытным путём, мне пришлось заливать прошивку в плату не один десяток раз. На сайте марлина есть подробное описание всех параметров. Старые мануалы не актуальны для второй версии марлина, теперь некоторые параметры называются по-другому. Я читал инструкцию на странице товара на Али, вот этот и этот мануалы, приходилось гуглить и исправлять, вот что у меня получилось. Файл Configuration.h:

  • #define Z_MIN_PROBE_ENDSTOP_INVERTING false
  • #define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN
  • #define BLTOUCH
  • #define SERVO0_PIN 29
  • #define AUTO_BED_LEVELING_BILINEAR
  • #define GRID_MAX_POINTS_X 4 // количество точек, по которым происходит калибровка. Я поставил 4, то есть калибровка будет по 16 точкам, всё-таки стол немаленький. Можно выставить разные значения для X и Y.
  • #define Z_SAFE_HOMING
  • #define REVERSE_ENCODER_DIRECTION // У меня почему-то оказалось инвертированным направление энкодера. Чтобы пофиксить, пришлось раскомментировать эту строчку.
  • #define NOZZLE_TO_PROBE_OFFSET // расстояние по осям X и Y от концевика до сопла
  • #define EEPROM_SETTINGS
  • #define MIN_PROBE_EDGE 15 // отступы от краёв стола до точек, по которым будет проводиться калибровка. Я поставил 15 мм, чтобы сопло не задевало скрепки на стекле, а вот справа нужно оставить 75 мм, иначе каретка упрётся в раму — для этого в файле Configuration_adv.h укажем #define MIN_PROBE_EDGE_RIGHT 75

В таком виде прошивка не лезет в память принтера, я для экономии места выпилил возможность работы с SD-картой и PID-регулятор стола:

Сразу скажу, что у меня после перепрошивки начала плавать температура сопла на 10 градусов вверх и вниз, калибровка PID не дала результатов, в итоге я подсмотрел значения коэффициентов у такого же принтера:

и записал их в прошивку:

  • #define DEFAULT_Kp 22.2
  • #define DEFAULT_Ki 1.08
  • #define DEFAULT_Kd 114.0

Температура держится более-менее стабильно. Также эти коэффициенты можно записать в EEPROM.

Продолжаем процесс перепрошивки:

  • Выбираем «Инструменты -> Плата -> Anet V 1.0 (Optiboot)
  • Устанавливаем библиотеку u8glib: жмём «Скетч -> Подключить библиотеку -> Управлять библиотеками», ищем в поиске «u8glib», ставим
  • Подключаем наш принтер через USB кабель (включать блок питания не обязательно), жмём зелёный круг со стрелкой и ждём, пока скетч скомпилится и загрузится в принтер. В процессе компиляции могут вылезать ворнинги, ничего страшного.

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

После каждой перепрошивки нужно сбрасывать EEPROM, я прямо через меню жму Configure -> Restore Settings, затем Store Settings и перезагружаю принтер. Если всё получилось, главный экран выглядит вот так:

Нужно настроить Z Offset, то есть расстояние от края сопла до края концевика по оси Z. Делать это нужно на заранее выровненном столе. Я сделал просто: поставил через меню Configuration -> Probe Z Offset значение смещения -1.00 мм, чтобы принтер разрешил нам опускать сопло ниже концевика. Сделал Auto Home, потом в меню Motion -> Move Axis — Move Z и начал опускать экстудер по 0.1 мм, просовывая лист бумаги между соплом и столом. Получившееся значение (например, -0.27) вычел из Probe Z Offset, полученный результат (например, 0.73) выставил в Configuration -> Probe Z Offset. Потом повторил процедуру. Короче, наша цель такая: после Auto Home и опускания экстудера до Z=0 между соплом и столом должна пролезать бумажка, как при ручной настройке — это и будет высота первого слоя. Не забываем сохранить настройки в EEPROM: Configuration -> Store Settings. Вот тут чувак показывает с 5:52:

Настраиваем все остальные параметры (ускорения, джерки и т.д.) и можно печатать. Осталось добавить в стартовый G-code команду G29 (автокалибровка стола) после G28 (автохоум), если хотим, чтобы калибровка происходила перед каждой печатью.

Могу сказать, что мне повезло и китайский датчик работает прекрасно, никаких багов не замечено. Вот тут видно, как при печати крутится ось Z, компенсируя кривизну стола:

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

Теперь об этой проблеме можно не думать, первый слой ложится ровно даже на больших деталях:

Источник

Оцените статью