Anet A8. Автоуровень стола на пьезодатчиках

852

Если очень кратко:

Купил у китайцев комплект для автоуровня стола. Установил на самодельные крепления стола.
Датчик очень чувствительный.
Повторяемость определения: максимальный разброс 0,016 мм на 10 проб.
Ниже описаны проблемы при реализации решения, модель, настройка прошивки и результаты замеров.

А если длинно, то:

Все приключения начинаются с того, что в начале мы что-то покупаем, а потом начинаем думать…

Сильно хотел автоуровень, так как стёкол несколько и их перестановка сбивает настройку стола. Так что начал читать, понравилась точность пьезодатчика, тут же заказал его. В описании лота была ссылка на схему: https://reprap.org/wiki/Piezo-electric_sensors, Версия 1.1. В основе: с пьезодатчиков снимается сигнал, дифференцируется и компаратором выдается сигнал. Настройка всего в двух подстроечных резисторах: коэффициент дифференцирования и уровень срабатывания компаратора. Вроде всё просто и понятно. Наивный…

Удручало, что схема трёхканальная, а для крепления на стол лучше бы 4 канала. В результате первое, что сделал – вместо одного из резисторов запаял перемычку, а на разъёме собрал два резистора на 10к и к ним подсоединил два датчика. На остальных каналах по одному датчику.

1f4b336762fd060e3804371b01996a7f.jpg

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

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

Пришлось думать в первый раз. В результате сложилась примерная схема, но для неё датчики, которые шли в комплекте, были слишком крупными. Поехали с сыном в Промэлектронику и взяли там датчики MFT-12T-9.2A1 всего 12 мм в диаметре. Нарисовал модель для верхнего и нижнего блока крепления с учётом того, что провода припаяны прямо на диск и сильно утолщают сегмент диска. Модель тут — http://3dtoday.ru/3d-models/detali-dlya-3d-printerov/raznoe/kreplenie_stola_printera_dlya_pezodatchika_mft_12t_9_2a1/.

Спаял и собрал достаточно быстро: провода из комплекта выкинул, так как есть хороший запас провода МГТФ.

PREVIEW
dd74aa677cf7085918ff4abaca171d10.jpg

Подключение сделал такое, чтобы дублирующим оставить родной концевик.

После сборки и подключения пришлось думать второй раз.
В анете датчики срабатывая замыкаются на землю. Так что я выкрутил настройку компаратора так, чтобы на выходе было +5в. Прикосновение к столу вызывало срабатывание датчика. А вот печатающая головка делала странное: стол продавливался, срабатывал родной концевик и только тут срабатывал пьезодатчик.
Долго крутил настройки – бесполезно. Бросил, ушел спать.
На утро проснувшись хлопнул себя по лбу: если компаратор выкручен на зону срабатывания, то логично, что переключение будет происходить как раз на обратном ходе.
Пришлось переделывать родной датчик на замыкание на +5 при срабатывании. Для этого переставил клеммы на родном датчике и поставил сопротивление на 1к в разъём, чтобы он прибивал сигнал на землю.

f7a229d4f4d77038c566c7c3cddd7342.jpg

И вот тут датчик заработал почти как надо. 3 точки – идеально, одна как-то не стабильно.
Пришлось думать в третий раз. Но тут уже опыт есть – быстро понял, что пьезодатчик подсоединён неправильно. Просто поменял полярность – и всё заработало.

Прошивку взял Марлин 1.1.8. Дифф от стандартного конфига:
Задаём имя и UUID:
#define CUSTOM_MACHINE_NAME «Anet A8»
#define MACHINE_UUID «5e44eefc-6293-11e8-adc0-fa7ae01bbebc»
После калибровки экструдера записываем коэффициенты:
#define DEFAULT_Kp 31.35
#define DEFAULT_Ki 2.73
#define DEFAULT_Kd 89.87
Так как инвертировали датчик, то:
#define Z_MIN_ENDSTOP_INVERTING false // set to true to invert the logic of the endstop.
#define Z_MIN_PROBE_ENDSTOP_INVERTING false // set to true to invert the logic of the probe.

Ограничим ускорения, а то стол ходуном ходит:
#define DEFAULT_MAX_ACCELERATION { 1000, 1000, 100, 10000 }
Включаем автоуровень, датчик экструдер, так что делаем вид, что он жестко закреплён:
#define FIX_MOUNTED_PROBE
Так как датчик жутко чувствителен, то увеличим задержку между перемещениями и стартом определения уровня:
#define DELAY_BEFORE_PROBING 1000 // (ms) To prevent vibrations from triggering piezo sensors
#define XY_PROBE_SPEED 2000

Скорость пробы ограничим:
#define Z_PROBE_SPEED_FAST (HOMING_FEEDRATE_Z*2/3)
#define Z_PROBE_SPEED_SLOW (Z_PROBE_SPEED_FAST/3)

Определение уровня за два раза:
#define MULTIPLE_PROBING 2
Включим возможность тестировать повторяемость автоуровня по M48:
#define Z_MIN_PROBE_REPEATABILITY_TEST
Включим линейную коррекцию (пока в других смысла не вижу)
#define AUTO_BED_LEVELING_LINEAR
Поменяем точки определения автоуровня:
#define LEFT_PROBE_BED_POSITION 20
#define FRONT_PROBE_BED_POSITION 20
#define BACK_PROBE_BED_POSITION 190

Включаем безопасную парковку головы:
#define Z_SAFE_HOMING
Скорость ухода домой по Z поставим максимальной:
#define HOMING_FEEDRATE_Z (8*60)

Первая проверка показала сильный перекос в оси Х. Замер между направляющими показал, что перекос в самой оси. Быстро набросал скрипт в Pronterface:
G28
G0 X20 Y105 F3000
M48 P4 V4
G0 X190 Y105 F3000
M48 P4 V4
M18

За несколько итераций вывел ось вровень со столом. Легкий наклон по оси Y пока не буду исправлять – надо найти тонкие шайбы.

Вот результат автоуровня (к сожалению не нашел как выбрать моноширинный шрифт, а BBCode code на сайте не работает):
G29 Auto Bed Leveling
Bed X: 20.000 Y: 20.000 Z: 0.023
Bed X: 105.000 Y: 20.000 Z: 0.102
Bed X: 190.000 Y: 20.000 Z: 0.104
Bed X: 190.000 Y: 105.000 Z: 0.083
Bed X: 105.000 Y: 105.000 Z: 0.070
Bed X: 20.000 Y: 105.000 Z: -0.026
Bed X: 20.000 Y: 190.000 Z: -0.204
Bed X: 105.000 Y: 190.000 Z: -0.076
Bed X: 190.000 Y: 190.000 Z: 0.005
Eqn coefficients: a: 0.00078235 b: -0.00099118 d: 0.03081536
Mean of sampled points: 0.00888889
Bed Height Topography:
+— BACK —+
| |
L | (+) | R
E | | I
F | (-) N (+) | G
T | | H
| (-) | T
| |
O— FRONT —+
(0,0)
-0.21339 -0.08539 -0.00389
-0.03539 +0.06161 +0.07361
+0.01461 +0.09311 +0.09511
Corrected Bed Height vs. Bed Topology:
+0.00000 +0.06150 +0.07650
+0.09375 +0.12425 +0.06975
+0.05950 +0.07150 +0.00700
Bed Level Correction Matrix:
+1.000000 +0.000000 +0.000782
+0.000001 +1.000000 -0.000991
-0.000782 +0.000991 +0.999999

Результаты тестов повторного определения уровня на 10 проб по координатам:
Coord: 20,20 Mean: 0.011050 Min: 0.007 Max: 0.014 Range: 0.00
Coord: 20,190 Mean: -0.233600 Min: -0.237 Max: -0.229 Range: 0.008
Coord: 190,190 Mean: -0.026500 Min: -0.033 Max: -0.018 Range: 0.016
Coord: 190,20 Mean: 0.066550 Min: 0.065 Max: 0.068 Range: 0.003
Coord: 105,20 Mean: 0.053950 Min: 0.045 Max: 0.058 Range: 0.012
Coord: 20,105 Mean: -0.102400 Min: -0.107 Max: -0.100 Range: 0.007
Coord: 105,190 Mean: -0.153800 Min: -0.156 Max: -0.150 Range: 0.006
Coord: 190,105 Mean: 0.002850 Min: 0.001 Max: 0.006 Range: 0.005
Coord: 105,105 Mean: -0.005950 Min: -0.009 Max: -0.003 Range: 0.006

Видео калибровки – достаточно скучное: ничем не отличается от всех похожих.

Итого:
Датчик работает. Перестал тратить по несколько минут на ручную калибровку.
Датчик достаточно чувствительный. Надо ещё его подрегулировать, но и сейчас уже ложных срабатываний нет.

Чтобы сейчас сделал по другому: не стоило припаивать датчики к проводам и закатывать в термоусадку. Надо было датчик припаять к PLS-2, а провода зажать в BLS-2. Это бы позволило легко менять датчики и их полярность.

Источник публикации

Читайте также

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here
Перетащите ползунок, чтобы вставить комментарий