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

Щуп (Аналог BLTouch) из оптического концевика.

Hy6yk
Идет загрузка
Загрузка
11.04.2019
6190
27
Личные дневники

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

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

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

21
Статья относится к принтерам:
Ender 3 Pro

Добрый день, уважаемая публика!

В прошлый раз, в конце повествования, анонсировал изготовление щупа (эдакий аналог BLTouch) для своего Ender 3 Pro. Собственно, на тот момент модель щупа была готова, оставалось распечатать детали, подготовить прошивку, перепрошиться и пробовать в работе. В этот раз, хочу поделиться результатами. Ну и щуп — это не единственное изменение, еще есть LIN_ADVANCE и незаконченная попытка реализации автоотключения. О чём ниже по порядку и постараюсь изложить.

Первым делом я взялся за подготовку прошивки, без неё никуда. Частенько можно услышать, что процессор, это «мозги». Если и дальше проводить подобные аналогии, то получается, что прошивка — это «характер», т.е. именно она определяет, как принтер (или другой прибор/механизм) будет реагировать на «внешние раздражители». Именно в прошивке мы закладываем всю логику работы нашего принтера.

Базовую прошивку я выбрал Marlin 1.1.9. Почему именно Марлин? – потому что это родная прошивка Эндера. Почему 1.1.9? – потому что на текущий момент это финальная, рабочая версия. И у неё есть подготовленный, рабочий конфиг под третий Эндер, что для меня было большим плюсом, так как опыта «ковыряния» прошивок у меня не было. Все описанные ниже изменения прошивки сделаны как раз в эндеровском конфиге от Марлин. Если здесь не отражены какие-то важные для работы переменные/параметры, то значит они остались такими, какими были по умолчанию.

Техзадание для новой прошивки было такое:

- чтобы принтер умел работать с новоиспечённым щупом, а именно, выполнял с его помощью поиск точки отсчёта по Z при «хоуминге» (G28) и выполнял автоматическую калибровку плоскости стола (Automatic Bed Leveling) при необходимости.

- чтобы можно было поиграться с функцией LIN_ADVANCE – для устранения такого дефекта как «кровоточащие углы». J

- чтобы можно было реализовать функцию автоотключения принтера.

Дабы не утяжелять повествование, я не буду подробно описывать начальные шаги (скачать Arduino IDE, какие библиотеки установить, какие файлы Марлина заменить и т.д.), об этом много информации, в том числе на Ютубе (например я, в числе прочих, смотрел видео от Sergey Irbis – Creality Ender-3: - Установка чистого Marlin и настройка BLTouch). Я лишь расскажу об изменениях, которые я внёс в прошивку, для того чтобы она соответствовала техзаданию. Хотя нет, я вроде решил, что писать всё это буду, не только для того чтобы самому не забыть что и как сделано, но и для того чтобы возможно мой текс помог кому-то при своих первых шагах в этом «не простом» деле перепрошивки собственного принтера. Поэтому я расскажу сейчас про то, что такое «закомментировать/раскомментировать» строку ;-)

Закомментировать – это сделать так, чтобы при компиляции (прошивки) строка или её часть не читалась компилятором – для этого необходимо поставить двойной слэш («//» без кавычек). Двойной слэш можно ставить в любом месте строки. Всё, что после двойного слэша не будет записано в прошивку – будет считаться комментарием. Действует только на одну строку, отсюда и название – строчный комментарий.

Раскомментировать это обратный процесс – удаление двойного слэша. Соответственно, после его удаления строка или её часть будет читаться компилятором как основной код.

Есть ещё многострочный комментарий – это когда в начале комментария ставится слэш и звёдочка («/*» без кавычек), а в конце комментария звёздочка и слэш («*/» без кавычек). Между началом и концом комментария можно хоть «Войну и мир» написать.

Ниже на картинке пример:

Щуп (Аналог BLTouch) из оптического концевика.

Рис.1 Комментарии

Строка 93 закомментирована изначально – это комментарий разработчика. Строка 94 закомментирована мной - для уменьшения размера прошивки (вообще конечно красиво, когда при загрузке дракон высвечивается на экране, но я обойдусь и без него). В этой же строке можно увидеть ещё комментарий – это уже мой комментарий о том, что строку я редактировал и что она изначально не была закомментирована. Я везде где менял значения оставлял такие комментарии, чтобы не запутаться где и на что менял. Также можно заметить, что сам комментарий выделен символами «*/*/*» для большей заметности (звёздочки и слэши не лучшее сочетание символов – в некоторых случаях компилятор может принять их за многострочный комментарий). Со строки 101 по 107 многострочный комментарий – звёздочки в начале каждой строки комментария даны исключительно для выделения и обязательными не являются. И только две строки из всего этого текста (97 и 108) будут учитываться компилятором в прошивке.

Я надеюсь, что более опытные товарищи простят меня за то, что я расписываю такую простую, казалось бы, вещь как комментирование. Просто человек, не обладающий знаниями в этой области (владельцев 3Д принтеров всё больше и далеко не все знакомы с программированием С++ и проч.), даже на таких простых вещах набивает шишки))

Ну вернёмся непосредственно к самой прошивке. И начнём с самого простого в реализации пункта техзадания – Включение функции LIN_ADVANCE (если уж совсем быть дотошным, то в Марлине эта функция называется - Linear Pressure Control).

Для того чтобы включить эту функцию, необходимо в файле Configuration_adv.h, через ArduinoIDE или просто текстовым редактором (но не виндовым блокнотом) или любым другим удобным способом, найти строку #define LIN_ADVANCE и раскомментировать её. Чуть ниже видим другую строку #define LIN_ADVANCE_K здесь необходимо будет заменить дефолтное значение коэффициента на ноль. Т.е. пишем #define LIN_ADVANCE_K 0. Если здесь поставить отличное от нуля значение, то при печати, по умолчанию, будет использоваться именно это значение коэффициента. Оперативно менять значение коэффициента можно командой M900 в G-коде. Например, в стартовом коде прописать M900 K0.22.

Подбор значений коэффициента для конкретного пластика и конкретных скоростей печати необходимо производить по методичкам, которые здесь же на 3DTooday ищутся по тэгу LIN_ADVANCE.

Ну собственно говоря с этим всё – один пункт техзадания выполнен. Ставим себе галочку.

Переходим к щупу.

Вообще, как я понял, в контексте 3Д принтеров прижилось название «датчик». Можно часто услышать «датчик BLTouch» (даже когда речь идёт о клоне), «датчик автоуровня BLTouch», или просто «датчик автоуровня». Но мне опыт работы со «взрослыми» ЧПУ станками настойчиво говорит, что устройство, которым я выполняю поиск плоскости отсчёта по Z, у которого рабочий орган выдвигается/торчит и срабатывание происходит после касания этого самого органа с чем-либо, называется «Щуп» J (иногда «Зонд»). Поэтому своё устройство, я буду называть «Щуп». При этом никого не призываю делать также)) и уж тем более так называть биэлтачи и их клоны – само название «датчик автоуровня» звучит вполне лаконично.

Но это я отвлёкся. Моделировал я щуп под распечатанный ранее обдув http://www.thingiverse.com/thing:2879538 и под имеющиеся в наличии детали. Задачу сделать его универсальным, для возможности установить на разные принтеры я себе не ставил, также не ставилась в задачу и эстетическая сторона. Единственная задача – это чтобы щуп работал, рабочий прототип, так сказать. В дальнейшем планирую другой обдув, т.к. этот хоть и немного, но задувает на деталь вентилятором хотэнда (хотя и гораздо меньше чем стандартный эндеровски, но ведь нет предела совершенству). Тогда возможно и переделаю немного корпус щупа под новые реалии. Итак, щуп был смоделирован, отпечатан из SBS и как выяснилось несколько деталей этого щупа были лишними. Вернее, я даже понимал, что это скорее всего лишние детали и они не внесут никакого вклада в функциональность щупа, но мне хотелось их сделать и посмотреть, как они будут работать и будут ли. Это же интересно – задумал какой-то механизм, изготовил его и смотришь как в нём что-то двигается, крутится, отщёлкивается))). О каких лишних деталях речь? – это фиксатор ножки щупа, его пружина и элемент корпуса куда эта пружина вставляется с крышкой. Сейчас, пожалуй, самое время рассказать о принципе работы щупа, а там дальше и увидим «ненужность» этих деталей.

Щуп (Аналог BLTouch) из оптического концевика.

Рис.2 Контактный щуп.

Как видим, щуп устанавливается на корпус системы обдува слева. Для возможности установки щупа на систему обдува был изготовлен вклеиваемый вкладыш (приклеивается на систему обдува), по форме соответствующий углублению в корпусе. В этом вкладыше установлены закладные гайки для крепления щупа винтами М3.

На Рис. 3 изображён щуп в рабочем положении (два ракурса, без крышки), т.е. именно в этом положении будет происходить поиск нулевой точки по Z.

Щуп (Аналог BLTouch) из оптического концевика.

Рис.3 Рабочее положение.

Принцип работы щупа: При выполнении поиска нулевой точки по Z, печатная головка движется вниз. После контакта со столом, ножка щупа, имея свободный ход около 5-6 мм, движется вверх и приблизительно через 2-3 мм перекрывает щель оптического концевика заставляя тем самым его сработать. Оптический концевик – остался от старого нерабочего принтера, в самом верху Рис. 3 изображён черным с коричневой платой, к которой он штатно был припаян. Момент срабатывания оптического концевика определяется системой управления как нулевая точка. После выполнения всех необходимых измерений, поворотом рычага сервомашинки SG90 (изображена голубым цветом) на 30 градусов по Ч.С., ножка щупа переводится в нерабочее положение.

Щуп (Аналог BLTouch) из оптического концевика.

Рис.4 Нерабочее положение.

И вот сейчас про «лишние» детали: в процессе перевода ножки щупа в нерабочее положение рычаг сервомашинки, перемещаясь вверх, освобождает стопор (жёлтенький). Он, повинуясь действию пружины (пружину условно нарисовал красным, она у меня не смоделирована) встаёт в положение как указано на Рис 4 (назовём это положение стопора исходным). При дальнейшем движении рычага и ножки в крайнее верхнее положение, ножка скошенным выступом упирается в стопор и начинает его поворачивать против Ч.С. Так как сила сопротивления пружины меньше чем сила, развиваемая сервомашинкой, то ножка продолжает движение вверх. После преодоления скошенного выступа ножки, стопор под действием пружины встаёт в исходное положение. Вроде понятно, что если изъять этот стопорящий механизм, то щуп также продолжит работать и это не повлияет на его работу в худшую сторону, т.к. самопроизвольному перемещению ножки вниз препятствует рычаг сервомашинки. Но я оставил)) Правда пришлось ножичком доработать форму стопора, для лучшего срабатывания – моделил-то на глаз.

Для перевода щупа в рабочее положение сервомашинка поворачивает рычаг против Ч.С. на 30 градусов. В процессе движения в крайнее нижнее положение упирается в стопор и начинает его поворачивать, преодолевая действие пружины. Близко к крайнему нижнему положению рычага, стопор занимает такое положение, что освобождает ножку щупа и она под действием гравитации занимает рабочее положение.

Перейдём к электрической части: подключено всё вот по такой схеме.

Щуп (Аналог BLTouch) из оптического концевика.

Рис. 5 Контактный щуп, электрическая часть

Сразу оговорюсь – по электрике/электронике у меня туго, весьма поверхностное представление. Еще диоды понимаю хоть как-то понимаю, а вот транзисторы уже нет))

Питание 5 вольт организовал от DC-DC преобразователя (LM2596S), решил перестраховаться и не брать питание с платы управления, тем более, что преобразователь был в наличии (как-то заказывал на али, уж даже не помню для чего – лежал запакованный). Сам преобразователь решил поместить ближе к блоку питания – в штатный чёрный пластиковый корпус, который крепится к блоку питания (туда подходит сетевой провод 220В и кнопка включения ещё на нём). Туда же, кстати, планирую поместить реле для автоотключения (но она гадина всё доехать с Китая не может).

По схеме могу пояснить следующее:

1. резистор в 680 Ом подобрал исходя из следующего – «Падение напряжение на светодиоде оптического концевика около 2,5В, ток около 5 мА» - информация с просторов бескрайнего интернета, сам, как уже говорил, в этих делах тугой. Онлайн калькулятор светодиодов говорит, что резистор при таких вводных (и при питании 5В) должен быть 510 Ом, у меня было только на 680 поэтому встал он.

2. Z-min pin – подключается к гнезду штатного механического концевика Z-min. На штатный концевик идёт два провода, нам же необходим один – тот на котором мультиметр показывает 5 вольт относительно корпуса. Ну или если нет мультиметра – тот провод при закорачивании которого на корпус меняется статус концевика Z-min (статус смотрим командой M119)

3. Pin 27 – это красный провод со шлейфа экрана. Штатно на Эндере по нему идёт сигнал на пищалку. Чтобы можно было им управлять сервой, необходимо выполнить ряд незамысловатых действий:

- Перекусить этот провод на шлейфе экрана и подключиться к нему;

- Закомментировать строки:

#define SPEAKER в файле Configuration.h

#define BEEPER_PIN 27 в файле pins_SANGUINOLOLU_11.h

- Добавить строку

#define SERVO0_PIN 27 в файл pins_SANGUINOLOLU_11.h (можно конечно и в Configuration.h добавить – работать будет, но для порядка, лучше туда где прописываются все пины, для эндера это pins_SANGUINOLOLU_11.h)

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

Итак, помимо тех корректировок прошивки, о которых написано выше, в файл Configuration.h я внёс следующие изменения (если строка указана раскомментированной, то значит я её раскомментировал или изменил значение, если закомментирована – значит по умолчанию она была активна):

//#define SHOW_BOOTSCREEN – закомментировал для уменьшения размера прошивки, если честно не стал разбираться, что это за загрузочный экран и что на нём отображается.

//#define SHOW_CUSTOM_BOOTSCREEN – для уменьшения размера прошивки, это тот самый дракон, что высвечивается во время загрузки принтера.

#define Z_PROBE_SERVO_NR 0 – номер сервы используемой для щупа, нумерация, как видим с нуля. (Вообще я думаю, что можно раскомментировать #define BLTouch и работать тоже будет, возможно углы сервы надо будет в другом месте поправить, может ради спортивного интереса потом как-нибудь попробую.)

#define Z_SERVO_ANGLES {3,33} – значение углов сервы соответствующие конечным положениям ножки щупа (рабочее, не рабочее).

#define X_PROBE_OFFSET_FROM_EXTRUDER -39 – расстояние от ножки до сопла по Х

#define Y_PROBE_OFFSET_FROM_EXTRUDER -9 – расстояние от ножки до сопла по Х

#define Z_PROBE_OFFSET_FROM_EXTRUDER -1.82 – расстояние от точки срабатывания щупа до сопла по Z (эта группа параметров настраивается аналогично BLTouch - см. например у того же Irbisa)

#define Z_MIN_PROBE_REPEATABILITY_TEST – включение теста повторяемости срабатывания щупа по M48

//#define MAX_SOFTWARE_ENDSTOPS – убрал т.к. думаю, что при печати за пределы рабочей зоны уйти не даст слайсер, плюс уменьшение размера прошивки (скорее на мизер, но всё же). Почему стоит обязательно включить придумать не смог.

#define AUTO_BED_LEVELING_BILINEAR – решил начать с него, хотя думаю, что с моими стёклами достаточно и LINEAR-а

#define RESTORE_LEVELING_AFTER_G28 – восстановление автоуровня после G28 – подумалось мне, что не буду выполнять автоуровень каждый раз перед печатью, но об этом чуть позже

#define GRID_MAX_POINTS_X 4 – по скольким точкам производить замер автоуровня (по умолчанию 3)

#define X_BED_SIZE 230 – по умолчанию задано 220 (реальный размер стола 235)

#define Y_BED_SIZE 230 – по умолчанию задано 220 (реальный размер стола 235)

#define LEFT_PROBE_BED_POSITION MIN_PROBE_EDGE – левая крайняя позиция (по Х) при измерении равна отступу, задаваемому в переменной MIN_PROBE_EDGE (по умолчанию 10)

#define RIGHT_PROBE_BED_POSITION (X_BED_SIZE - MIN_PROBE_EDGE - 30) – правая крайняя позиция (по Х) равна (230-10-30) 190

#define FRONT_PROBE_BED_POSITION MIN_PROBE_EDGE – передняя крайняя позиция (по Y) равна 10

#define BACK_PROBE_BED_POSITION (Y_BED_SIZE - MIN_PROBE_EDGE - 10) – задняя крайняя позиция (по Y) равна (230-10-10) 210

#define Z_SAFE_HOMING – поиск нулевой точки по G28 производить в центре стола

#define SLIM_LCD_MENUS – урезать стандартное меню для уменьшения размера прошивки

#define NUM_SERVOS 1 – количество серв в системе (по умолчанию их 3)

#define SERVO_DELAY { 500 } – задержка перед выполнением следующей команды серве в 0,5 сек (по умолчанию 300)

#define DEACTIVATE_SERVOS_AFTER_MOVE – если оставить закомментированным, то серва после перемещения в заданное положение будет пытаться его удерживать, сопротивляясь внешним воздействиям. Не особо качественные сервы (к коим относится моя SG90) могут немного покачиваться в процессе удержания. Ну и вообще, удержание сервы лишнее в данной конструкции.

Далее, изменения, которые внёс в Configuration_adv.h

//#define BABYSTEPPING – отключил для уменьшения размера прошивки и т.к. не планирую поднастройку при печати. Иначе зачем же я городил весь этот огород? – для того чтобы запустил печать и автоматом получил хороший первый слой.

//#define ARC_SUPPORT – отключил для уменьшения размера прошивки и вообще, слайсеры все перемещения задают через линейную интерполяцию (G0 и G1)

#define CUSTOM_USER_MENUS – включил для возможности добавить свои пункты меню, а именно:

1 Пункт «нагреть стол до 60 градусов -> произвести поиск нулевой позиции ->произвести автокалибровку уровня стола» Для этого добавил в прошивку

#define USER_DESC_1 'Heat Bed_60 & ABL'

#define USER_GCODE_1 'M190 S60

G28

G29'

2 Пункт «нагреть стол до 100 градусов -> произвести поиск нулевой позиции -> произвести автокалибровку уровня стола» Для этого добавил в прошивку

#define USER_DESC_2 'Heat Bed_100 & ABL'

#define USER_GCODE_2 'M190 S100

G28

G29'

Те пункты, которые были в прошивке по умолчанию (их там было 5), закомментировал в полном составе.

Для чего же мне эти два пункта? Логика такая: у меня в основном печать происходит при температуре стола около 60 градусов (для PLA – 55, PET-G – 70, SBS - 70), ну вот на этой температуре и производить калибровку. Для печати тем же HIPS – стол грею до 100 – 110 градусов – отсюда второй пункт меню. А зачем вообще их вносить в меню? Для того чтобы не производить автокалибровку каждый раз перед печатью, а производить её только при необходимости – например, при смене стекла. Да, решение спорное, можно, например, забыть произвести автокалибровку после смены стекла. Но я поработаю пока так, наберу статистики и вполне возможно изменю что-то в этой части.

Теперь можно прошиваться и не забыть про команды М502, М500, а также про необходимость настройки офсета между соплом и точкой срабатывания. Процедура эта аналогична настройке BLTouch и посмотреть её можно на просторах бескрайнего.

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

22:46:46.694 : M48 Z-Probe Repeatability Test

22:47:04.542 : 1 of 4: z: 0.003

22:47:13.306 : 2 of 4: z: 0.000

22:47:22.071 : 3 of 4: z: 0.000

22:47:30.868 : 4 of 4: z: 0.000

22:47:30.868 : Finished!

22:47:30.869 : Mean: 0.000625 Min: 0.000 Max: 0.003 Range: 0.003

22:47:30.869 : Standard Deviation: 0.001083

22:47:30.869 : X:139.00 Y:109.00 Z:9.98 E:0.00 Count X:11120 Y:8720 Z:4000

22:48:03.221 : M48 Z-Probe Repeatability Test

22:48:14.240 : 1 of 5: z: 0.003

22:48:18.254 : 2 of 5: z: 0.000

22:48:22.268 : 3 of 5: z: 0.000

22:48:26.266 : 4 of 5: z: 0.000

22:48:30.280 : 5 of 5: z: 0.000

22:48:32.189 : Finished!

22:48:32.190 : Mean: 0.000500 Min: 0.000 Max: 0.003 Range: 0.003

22:48:32.190 : Standard Deviation: 0.001000

22:48:32.190 : X:139.00 Y:109.00 Z:9.98 E:0.00 Count X:11120 Y:8720 Z:4000

22:49:33.969 : M48 Z-Probe Repeatability Test

22:49:45.003 : 1 of 5: z: 0.003

22:49:49.002 : 2 of 5: z: 0.003

22:49:53.017 : 3 of 5: z: 0.003

22:49:57.014 : 4 of 5: z: 0.003

22:50:01.012 : 5 of 5: z: 0.000

22:50:02.936 : Finished!

22:50:02.936 : Mean: 0.002000 Min: 0.000 Max: 0.003 Range: 0.003

22:50:02.937 : Standard Deviation: 0.001000

22:50:02.937 : X:139.00 Y:109.00 Z:9.98 E:0.00 Count X:11120 Y:8720 Z:4000

Результаты теста на мой вкус более чем. Надо только побольше попечатать и посмотреть, как он в эксплуатации. На фото ниже, проводка щупа пока в таком виде – заказал разъёмы, придут сделаю поаккуратней.

Щуп (Аналог BLTouch) из оптического концевика.

Щуп (Аналог BLTouch) из оптического концевика.

Щуп (Аналог BLTouch) из оптического концевика.

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

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

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

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