Металл2024 Реклама
Метобр2024 Реклама

Настройка BLTouch/3DTouch в Klipper, RURAMPS4D + Due

Andrico
Идет загрузка
Загрузка
18.11.2018
15912
14
Техничка

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

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

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

13
Статья относится к принтерам:
RepRap
После приключений, описанных в посте, дошли руки до настройки автоуровня. Датчик 3DTouch от DForce/TriangleLab лежал и ждал своей очереди давно, но на Marlin руки так и не дошли.

Коммутацию подробно описывать не буду, поскольку у каждой платы она своя, но вкратце - для RuRAMPS4D диаграмма приведена здесь, ей я и руководствовался - подключил к разъёму SERVO0 и к отдельно выделенному разъёму Z_Probe. Вместо Z_Probe можно использовать разъём концевика Zmin, но для плат с 3.3V потребуется доп. резистор - в примере ниже будет описано подключение именно к Z_Probe.

Физически датчик должен монтироваться в определённом положении относительно сопла: если по X/Y тут есть некоторая свобода фантазии - лишь бы не ближе 15 мм к хотенду, то по Z условие в документации описано жёсткое:
  • щуп датчика в закрытом положении должен выглядывать из корпуса на длину от 6 до 7 мм (см. регулировочный винт на торце датчика, между крепёжными отверстиями).
  • нижний край пластикового корпуса датчика должен быть приподнят по Z на 8 мм относительно сопла.

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

Мой датчик от продавца пришёл со щупом 8,1 мм - пришлось обращаться к регулировочному винту, чтобы загнать щуп поглубже в корпус - до 6,5 мм.

Итак, датчик смонтирован, время обратиться к конфигу Klipper. Пример конфига есть здесь.

Для начала прописываем серву, pin берёте согласно вашему конкретному железу. Для Arduino Due с RuRAMPS4D сигнальный контакт SERVO0 приходит на пин PC25 (digital pin 5 в нумерации Arduino).

Добавляем в произвольное место конфига секцию servo, название (в данном случае у меня 'bltouch') роли не играет - просто текстовая метка для конкретной сервы.

[servo bltouch]

pin: PC25 #здесь проставьте свой пин, к которому подключена серва

maximum_servo_angle: 180

minimum_pulse_width: 0.0006

maximum_pulse_width: 0.0024

Далее нужно прописать секцию probe, описывающую параметры самого датчика - смещение относительно сопла, команды активации и деактивации. Здесь название сервы должно совпадать с прописанным в секции servo. Пин - это разъём, к которому вы подключили двухконтактный штекер от датчика: для Arduino Due с RuRAMPS4D сигнальный пин Z_Probe подведён к PC14 (digital pin 49 в нумерации Arduino).

[probe]

pin: ^PC14 #здесь проставьте свой пин, куда подключён датчик, ^ - pull-up. Если сигнал нужно инвертировать - ! перед номером.

x_offset: 0.0

y_offset: 37.5

z_offset: 2.16 #см. процесс поиска z_offset ниже по шагам

activate_gcode:

SET_SERVO SERVO=bltouch ANGLE=10

SET_SERVO SERVO=bltouch ANGLE=60

G4 P200

deactivate_gcode:

SET_SERVO SERVO=bltouch ANGLE=90

G4 P100

Как я искал z_offset... :)
  • Выравниваете стол (не сильно критично конечно, поскольку измерять вы будете в одной и той же точке, но желательно чтобы ровный был на стадии измерения). Определяете координаты X/Y- где будете измерять разницу. Например X150 Y100 (центр, у меня стол 300x200).
  • Хоумите Z: G28 Z или в GUI/меню.
  • Перемещаете X/Y в X150 Y100. Поднимаете стол Z0 (то бишь к соплу) - у меня Z0 чётко до касания соплом стола, без зазора вообще. Далее до конца измерений никаких регулировок уровня стола не трогаете.
  • Хоумите Z: G28 Z или в GUI/меню.
  • Перемещаете X/Y в положение с учётом смещения датчика относительно сопла. В моём случае это X150 Y62.5 (100-37.5 мм) - щуп датчика окажется точно в положении сопла на шаге 3.
  • Даёте команду 'SET_SERVO SERVO=bltouch ANGLE=10' - щуп выдвинется на полную длину, затем следом 'SET_SERVO SERVO=bltouch ANGLE=60' - датчик перейдёт в рабочий режим.
  • Исходя из того, что по Z разница между соплом и щупом около 2 мм поднимаете стол в Z3 - смотрите, сработал ли датчик (при срабатывании сразу же загорится светодиод на нём). Если не сработал - хоумите Z снова и поднимаете до меньших значений с небольшим шагом: 2.9, 2.8, 2.7 и т.д. Задача - максимально точно найти ту высоту, при которой датчик стабильно будет срабатывать. Между попытками измерениями обязательно повторять хоуминг Z - поскольку в дальнейшем все измерения у вас будут делаться после хоуминга.
  • Если датчик сработал, хоумите Z - уменьшаете последнее значение на небольшую величину (я шагами по 0,005 мм возился). Даёте команду 'SET_SERVO SERVO=bltouch ANGLE=160', чтобы сбросить ошибку датчика (а 99% что он у вас останется моргать диодом, уперевшись щупом в стол), далее шаг 6. Вот здесь как раз я нашёл нужную величину - стол останавливается ровно в момент, когда срабатывает датчик - ни раньше, ни позже: так и должно быть у вас.
  • Долго и муторно находите искомую дельту: в моём случае Z2.16 - это гарантированное срабатывание датчика. На всякий случай убеждаетесь, что в процессе измерений стол у вас никуда не убежал - X150 Y100 Z0 должен привести сопло в ту же точку с соприкосновением со столом (см. шаг 3).
  • Прописываете найденный z_offset в секции probe. Настройка самого датчика на этом закончена.

Далее в конфиге нужно добавить соответствующую секцию для настройки автолевелинга. Я использую Mesh Bed Leveling, поэтому добавил 'bed_mesh' и в неё всего 2 параметра для начала - координаты прямоугольника, в пределах которого делать замеры. Важно: координаты указываются для сопла, не для датчика! Т.е. никакие offset'ы здесь не учитываются - вы должны сами проверить границы, в которых датчик будет касаться стола. Offset'ы прописанные вами будут учтены только в расчётах кривизны стола, но не при движениях в процессе замера.

После того, как убедились, что механизм работает и риска зафигачить соплом в стол нет - в секции своего stepper_z меняете position_min на отрицательную величину: в рамках этой величины датчик будет поднимать стол до срабатывания. Важно: position_min не должен превышать разницу между соплом и датчиком по высоте!!! т.е. в моём случае не более 2.19 - я выбрал 1.5 мм для безопасности (position_min = -1.5), чаще всего этого хватает (если не хватает - имхо вам предстоит серьёзный разговор со своим столом, разберитесь - почему он настолько кривой :))

[bed_mesh]

min_point = 35,35

max_point = 278,148

#параметры ниже не трогал, добавил на будущее и закомментировал

#probe_count: 3,3

#fade_start: 1.0

#fade_end: 5.0

Вот собственно и всё: сохраняете конфиг, перезапускаете службу klipper и можно пользоваться.

При подаче команды BED_MESH_CALIBRATE должен запуститься процесс замера - проще показать на видео. После замеров будет сформирована таблица для дальнейших поправок в процессе печати, её можно посмотреть командой BED_MESH_OUTPUT. Чтобы сохранить текущие замеры в конфиге - можно дать команду SAVE_CONFIG, но у себя в силу хлипкости фанерного стола я предпочитаю замерять всё непосредственно перед печатью. BED_MESH_CLEAR очищает таблицу измерений.

В слайсере я добавил следующие команды в starting script:

SET_SERVO SERVO=bltouch ANGLE=160 ;сбрасываем ошибку на датчике, если она есть

G28 ; стандартно - хоуминг

BED_MESH_CALIBRATE ; выполняем замеры

G0 X150 Y100 Z10 F1000 ; переводим сопло в центр, тут по желанию

а в ending script добавил:

SET_SERVO SERVO=bltouch ANGLE=160 ;сбрасываем ошибку на датчике, если она есть

Профит.

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

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

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

13
Комментарии к статье
Кремень КБ Реклама
Кремень КМ Реклама