Кремень FMZ Реклама
Kremen FMHM Реклама

Авто калибровка дельта принтера, на примере Prism Mini

3DQuality
Идет загрузка
Загрузка
01.08.2015
28615
11
Техничка

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

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

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

24
Статья относится к принтерам:
Prism Mini Prism Pro
В предыдущей статье было показано как произвести калибровку дельта принтера в ручном режиме. Но из за сложности и трудоемкости настройки решено было сделать авто калибровку. Так как финальная версия находится на этапе тестирования и изготовления, мы все же хотим облегчить жизнь нашим клиентам, и всем, кто сделал себе принтеры по этой схеме. Далее будет рассмотрен один из способов реализации авто калибровки.

Существует множество подходов, установка выдвижного щупа на эфектор с микропереключателем, FSR датчики, датчик Холла, и т.п. Но у этих систем имеется существенный недостаток — они измеряют расстояние не до сопла, а непосредственно до датчика, плюс ко всему в отдельных случаях может сбиться соосность (если датчик расположен не вместо сопла, то расчет геометрии может быть нарушен. Не говоря уже о точности).

Идеальный вариант — это фиксировать касание самого сопла о стол. И здесь можно пойти двумя путями:
  • Создать электрический контакт между HotEnd’ ом и эфектором, таким образом, что бы HotEnd был подвижен, и размыкал (или замыкал) контакт при нажиме на него .
  • Создать электрический контакт между металлическим соплом и столом.

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

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

О втором методе мы и расскажем:
Авто калибровка дельта принтера, на примере Prism Mini
Из инструмента нам понадобится:
  • Алюминиевый скотч (по сути это алюминиевая фольга на клейкой основе, а не всякие там армирующие ленты)
  • “Крокодил” — для подключения одного из контактов на металический корпус hot-end, в принципе можно обойтись любой скрепкой, либо закрепить конец провода подав его винтом или припаяв (сурово но эффективно)
  • Канцелярская прищепка
  • Штырьевая колодка 2.54 для подключения нашего импровизированного датчика к плате RAMPS 1.4 (либо в соответствующий разъем EndStop на вашей плате). Мало у кого есть обжимка для монтажа таких колодок, но можно подобную колодку найти в блоке компьютера, сняв с “пищалки” или кнопок.
  • Паяльные принадлежности, желательно иметь активный флюс и более менее мощный паяльник.
  • Провода, примерно метр.

Самым простым способом нанести токо проводящий слой на нашу рабочую плоскость (стекло) оказался наклейка алюминиевого скотча, но важно его ровно наклеить и разгладить, что бы между полосками скотча был электро контакт, проверяется элементарно мультиметром на «прозвон».
Авто калибровка дельта принтера, на примере Prism Mini
Так же для коммутации следует изготовить провод, как писалось ранее, один из концов обжать в колодку 2.54 (или припаятся к ней), два других конца будут закреплены на радиаторе HotEnd’а и на столе с алюминиевым скотчем. Дабы подлезть к радиатору берем обычный крокодильчик и припаеваем один из концов провода к нему, для простоты пайки советую использовать кислоту, хотя с хорошим прогревом и обычной канифолью справлялся, второй же конец можно так же припаять к крокодилу, но в данном случае существует вероятность повредить скотч при закреплении, да и крокодил должен быть достаточно большим. Мы поступили следующим образом: возьмем канцелярскую прищепку и зачистим ее от краски (желательно со всех сторон). Здесь важным моментом является то, что мы будем припаивать к металлической прищепке медный провод обычным припоем (ПОС 61) и для удачной спайки как раз таки и нужен активный флюс, мы использовали обычную ортофосфорную кислоту (паяльная кислота).
Авто калибровка дельта принтера, на примере Prism Mini
Авто калибровка дельта принтера, на примере Prism Mini
Далее представлены фотографии подключения на плату и на сам принтер. Концы провода на нашем принтере подключаем к Z-max., а в прошивке необходимо указать какое нормальное состояние концевого выключателя (нашего датчика, замкнутый или разомнкутый). При данном подходе в нормальном состоянии датчик разомкнут.
Авто калибровка дельта принтера, на примере Prism Mini
Авто калибровка дельта принтера, на примере Prism Mini
Авто калибровка дельта принтера, на примере Prism Mini
Авто калибровка дельта принтера, на примере Prism Mini
Прошивка с авто калибровкой для дельта принтеров можно взять отсюда: Marlin Delta firmware with autocalibration updates. RichCattell Настройки прошивки:

Cohfiguration.h

// Precision for G30 delta autocalibration function #define AUTOCALIBRATION_PRECISION 0.03 // mm. Точность калибровки, используемая нами была равна 0.1мм. // Diameter of print bed - this is used to set the distance that autocalibration probes the bed at. Диаметр печатного стола, параметр используется для задания размера для авто калибровке, чем дальше расположены точки (больше диаметр), тем лучше, но при касании (в нашем случае, т.к. эфектор на магнитах) может отвалится эффектор. #define BED_DIAMETER 170 // mm // The pullups are needed if you directly connect a mechanical endswitch between the signal and ground pins. const bool X_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop. const bool Y_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop. const bool Z_MIN_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop. const bool X_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop. const bool Y_MAX_ENDSTOP_INVERTING = false; // set to true to invert the logic of the endstop. const bool Z_MAX_ENDSTOP_INVERTING = true; // set to true to invert the logic of the endstop. Нас интересует именно этот параметр

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

Так же, одной из особенностей авто калибровки является то, что алгоритм последовательно подбирает параметры геометрии, что может занять значительное время, особенно если геометрия сильно нарушена или не правильно выставлены начальные параметры (к примеру задана длинна диагоналей 150 мм, а по факту 200 мм, и алгоритм с заданным шагом будет каждую итерацию повторять калибровку заново, в конце концов он откалибруется, но займет это не мыслимое количество времени)

Для запуска авто калибровки подключимся к принтеру по USB, и воспользуемся программой pronterface. Существует три вида калибровки:
  • Команда G30 — калибрует offset’s — по сути выставляет высоту до концевых выключателей.
  • Команда G30A — калибрует всю геометрию принтера, длину диагоналей, отступы концевых выключателей (высоту) и кривизну геометрии по “Tower” — башням( скорее всего имеется в виду разная высота опор принтера)
  • Команда G29 — так называемый AutoBedLevel — автоматическая калибровка кривизны стола. На дельта принтерах она работает наиболее корректно, и запускается непосредственно перед стартом печати в начальном g-code.



Соответственно наиболее актуальны последние два.

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

Краткий принцип калибровки:
  • Проверка / регулировка смещения endstop'ов
  • Проверка / регулировка дельта радиуса
  • Проверка ошибок геометрии башен
  • Подбор длины диагоналей> проверка геометрии башен> сверка смещений EndStop'ов. Когда первые два параметра меняются, подбирается третий и цикл повторяется до тех пор, пока не удовлетворятся все три параметра.



Листинг первоначальной калибровки - урезаны итерации с 4 по 17 т.к. там повторяется действия

Connecting... start Printer is now online. echo:Marlin 1.0.0 echo: Last Updated: Jul 31 2015 11:09:21 | Author: (RichCattell, Prism Mini) Compiled: Jul 31 2015 echo: Free Memory: 1753 PlannerBufferBytes: 1232 echo:Hardcoded Default Settings Loaded echo:Steps per unit: echo: M92 X100.00 Y100.00 Z100.00 E156.00 echo:Maximum feedrates (mm/s): echo: M203 X200.00 Y200.00 Z200.00 E200.00 echo:Maximum Acceleration (mm/s2): echo: M201 X9000 Y9000 Z9000 E9000 echo:Acceleration: S=acceleration, T=retract acceleration echo: M204 S3000.00 T3000.00 echo:Advanced variables: S=Min feedrate (mm/s), T=Min travel feedrate (mm/s), B=minimum segment time (ms), X=maximum XY jerk (mm/s), Z=maximum Z jerk (mm/s), E=maximum E jerk (mm/s) echo: M205 S0.00 T0.00 B20000 X20.00 Z20.00 E20.00 echo:Home offset (mm): echo: M206 X0.00 Y0.00 Z0.00 echo:Delta Geometry adjustment: echo: M666 A0.000 B0.000 C0.000 I0.000 J0.000 K0.000 U0.000 V0.000 W0.000 R66.00 D154.00 H230.00 echo:Endstop Offsets: echo: M666 X0.00 Y0.00 Z0.00 echo:Z-Probe Offset: echo: M666 P X0.00 Y0.00 Z0.00 echo:PID settings: echo: M301 P15.09 I0.75 D76.13 echo:SD init fail Setting hotend temperature to 190.000000 degrees Celsius. Setting bed temperature to 70.000000 degrees Celsius. >>> g30 a SENDING:G30 A Starting Auto Calibration.. Calibration precision: +/-0.100mm | Z-Tower Endstop Offsets | -7.8500 X:0.00 Y:0.00 Z:0.00 | -5.2400 -8.5900 Tower Offsets | -6.8400 A:0.00 b:0.00 C:0.00 | -3.7200 -8.0400 I:0.00 J:0.00 K:0.00 | -5.6900 Delta Radius: 66.0000 | X-Tower Y-Tower Diagonal Rod: 154.0000 Iteration: 1 Checking/Adjusting endstop offsets // Проверка / регулировка смещения endstop'ов x:-3.6800 (adj:-3.6800) y:-7.9600 (adj:-7.9600) z:-7.7700 (adj:-7.7700) X=ERROR Y=ERROR Z=ERROR x:0.7500 (adj:-2.9300) y:-0.1900 (adj:-8.1500) z:-0.2200 (adj:-7.9900) X=ERROR Y=ERROR Z=ERROR x:0.1600 (adj:-2.7700) y:-0.0800 (adj:-8.2300) z:0.0500 (adj:-7.9400) X=ERROR Y=OK Z=OK x:0.0300 (adj:-2.7400) y:-0.0200 (adj:-8.2500) z:0.0100 (adj:-7.9300) X=OK Y=OK Z=OK | Z-Tower Endstop Offsets | -0.0300 X:-2.74 Y:-8.25 Z:-7.93 | -0.0200 0.1500 Tower Offsets | -0.2800 A:0.00 b:0.00 C:0.00 | -0.0300 -0.0300 I:0.00 J:0.00 K:0.00 | -0.1900 Delta Radius: 66.0000 | X-Tower Y-Tower Diagonal Rod: 154.0000 Checking delta radius //Проверка дельта радиуса Adjusting Delta Radius //Регулировка дельта радиуса x:-0.0600 (adj:-2.8000) y:-0.0300 (adj:-8.2800) z:-0.0500 (adj:-7.9800) X=OK Y=OK Z=OK c: -0.2000 delta radius:66.0000 prec:0.010 tries:0 done:false x:0.0700 (adj:-2.7300) y:0.0900 (adj:-8.1900) z:0.0300 (adj:-7.9500) X=OK Y=OK Z=OK c: -0.2100 delta radius:66.2000 prec:0.010 tries:0 done:false x:0.0600 (adj:-2.6700) y:0.0300 (adj:-8.1600) z:0.0600 (adj:-7.8900) X=OK Y=OK Z=OK c: -0.1500 delta radius:66.4000 prec:0.010 tries:0 done:false x:0.0400 (adj:-2.6300) y:-0.0100 (adj:-8.1700) z:0.0300 (adj:-7.8600) X=OK Y=OK Z=OK c: -0.0800 delta radius:66.6000 prec:0.010 tries:1 done:false x:0.0300 (adj:-2.6000) y:0.0400 (adj:-8.1300) z:0.0600 (adj:-7.8000) X=OK Y=OK Z=OK c: 0.0200 delta radius:66.8000 prec:0.010 tries:2 done:false x:-0.0100 (adj:-2.6100) y:0.0200 (adj:-8.1100) z:-0.0200 (adj:-7.8200) X=OK Y=OK Z=OK c: -0.0900 delta radius:66.7000 prec:0.010 tries:3 done:false x:-0.0000 (adj:-2.6100) y:-0.0000 (adj:-8.1100) z:-0.0000 (adj:-7.8200) X=OK Y=OK Z=OK c: -0.0500 delta radius:66.7500 prec:0.020 tries:0 done:false x:0.0500 (adj:-2.5600) y:0.0100 (adj:-8.1000) z:0.0300 (adj:-7.7900) X=OK Y=OK Z=OK c: -0.0400 delta radius:66.8000 prec:0.020 tries:1 done:false x:-0.0100 (adj:-2.5700) y:-0.0500 (adj:-8.1500) z:-0.0400 (adj:-7.8300) X=OK Y=OK Z=OK c: 0.0100 delta radius:66.8500 prec:0.020 tries:1 done:true Iteration: 2 Checking/Adjusting endstop offsets // Проверка / регулировка смещения endstop'ов x:-0.0000 (adj:-2.5700) y:0.0300 (adj:-8.1200) z:0.0300 (adj:-7.8000) X=OK Y=OK Z=OK | Z-Tower Endstop Offsets | 0.0100 X:-2.57 Y:-8.12 Z:-7.80 | 0.0100 0.1700 Tower Offsets | 0.0000 A:0.00 b:0.00 C:0.00 | 0.0200 -0.0200 I:0.00 J:0.00 K:0.00 | -0.1900 Delta Radius: 66.8500 | X-Tower Y-Tower Diagonal Rod: 154.0000 Checking for tower geometry errors.. //Проверка ошибок геометрии башен x_diff = 0.15000 y_diff = 0.03000 z_diff = 0.20000 high_diff = 0.20000 xy_equal = false xz_equal = true yz_equal = false Opp Range = 0.36000 t1:Err t2:oK t3:Err Tower geometry OK Checking DiagRod Length //Проверка длины диагоналей target:0.0033 c:0.0000 adj:0.00000 | Z-Tower Endstop Offsets | -0.0000 X:-2.57 Y:-8.12 Z:-7.80 | 0.0400 0.2000 Tower Offsets | -0.0000 A:0.00 b:0.00 C:0.00 | -0.0100 -0.0000 I:0.00 J:0.00 K:0.00 | -0.2000 Delta Radius: 66.8500 | X-Tower Y-Tower Diagonal Rod: 154.0000 Iteration: 3 Checking/Adjusting endstop offsets // Проверка / регулировка смещения endstop'ов x:-0.0100 (adj:-2.5800) y:0.0300 (adj:-8.0900) z:0.0300 (adj:-7.7700) X=OK Y=OK Z=OK | Z-Tower Endstop Offsets | -0.0300 X:-2.58 Y:-8.09 Z:-7.77 | 0.0300 0.1400 Tower Offsets | -0.0200 A:0.00 b:0.00 C:0.00 | 0.0100 -0.0400 I:0.00 J:0.00 K:0.00 | -0.2200 Delta Radius: 66.8500 | X-Tower Y-Tower Diagonal Rod: 154.0000 Checking for tower geometry errors.. //Проверка ошибок геометрии башен x_diff = 0.13000 y_diff = 0.07000 z_diff = 0.19000 high_diff = 0.19000 xy_equal = true xz_equal = true yz_equal = false Opp Range = 0.36000 t1:Err t2:oK t3:Err Tower geometry OK Checking DiagRod Length //Проверка длины диагоналей target:-0.0033 c:-0.0200 adj:-0.20000 target:0.2133 c:0.2000 adj:-0.20000 target:0.4267 c:0.4000 adj:-0.20000 target:0.6233 c:0.6200 adj:0.00000 Diag Rod Length changed .. Homing Endstops //Длина диагоналей изменилась... 'хоумимся' - едем в нулевое положение по Endstop | Z-Tower Endstop Offsets | -0.4600 X:-2.58 Y:-8.09 Z:-7.77 | -0.4000 -0.2900 Tower Offsets | -0.4600 A:0.00 b:0.00 C:0.00 | -0.4500 -0.5200 I:0.00 J:0.00 K:0.00 | -0.6900 Delta Radius: 66.8500 | X-Tower Y-Tower Diagonal Rod: 153.4000 Iteration: 17 Checking/Adjusting endstop offsets x:0.0100 (adj:-3.0300) y:0.0300 (adj:-8.5000) z:0.0100 (adj:-8.2300) X=OK Y=OK Z=OK | Z-Tower Endstop Offsets | -0.0300 X:-3.03 Y:-8.50 Z:-8.23 | 0.0400 0.1200 Tower Offsets | -0.0300 A:0.00 b:0.00 C:0.00 | 0.0100 -0.0600 I:0.00 J:0.00 K:0.00 | -0.2600 Delta Radius: 66.8500 | X-Tower Y-Tower Diagonal Rod: 153.3453 Checking for tower geometry errors.. x_diff = 0.11000 y_diff = 0.10000 z_diff = 0.23000 high_diff = 0.23000 xy_equal = true xz_equal = false yz_equal = false Opp Range = 0.38000 Tower 3 has largest error t1:Err t2:Err t3:Err Tower3 Error: Adjusting tower: -0.0400 opptower:-0.2700 tower radius adj:0.0000 done:false x:0.0000 (adj:-3.0300) y:0.0000 (adj:-8.5000) z:-0.0600 (adj:-8.2900) X=OK Y=OK Z=OK tower: -0.0700 opptower:-0.1300 tower radius adj:-1.0000 done:false x:-0.0600 (adj:-3.0900) y:-0.0900 (adj:-8.5900) z:-0.0900 (adj:-8.3800) X=OK Y=OK Z=OK tower: -0.0900 opptower:0.0900 tower radius adj:-2.0000 done:false x:-0.0500 (adj:-3.1400) y:-0.0400 (adj:-8.6300) z:-0.0700 (adj:-8.4500) X=OK Y=OK Z=OK tower: 0.0400 opptower:0.0500 tower radius adj:-1.5000 done:true Tower Postions changed .. Homing Endstops | Z-Tower Endstop Offsets | 0.6400 X:-3.14 Y:-8.63 Z:-8.45 | 0.3300 0.4500 Tower Offsets | 0.0900 A:0.00 b:0.00 C:0.00 | 0.0900 0.0100 I:0.00 J:0.00 K:-1.50 | -0.0200 Delta Radius: 66.8500 | X-Tower Y-Tower Diagonal Rod: 153.3453 Iteration: 18 Checking/Adjusting endstop offsets x:0.1000 (adj:-3.0400) y:0.0600 (adj:-8.5700) z:0.6500 (adj:-7.8000) X=OK Y=OK Z=ERROR x:-0.0500 (adj:-3.0900) y:-0.0400 (adj:-8.6100) z:0.0600 (adj:-7.7400) X=OK Y=OK Z=OK | Z-Tower Endstop Offsets | -0.0000 X:-3.09 Y:-8.61 Z:-7.74 | -0.0600 0.0200 Tower Offsets | -0.1100 A:0.00 b:0.00 C:0.00 | -0.0000 -0.0700 I:0.00 J:0.00 K:-1.50 | 0.0200 Delta Radius: 66.8500 | X-Tower Y-Tower Diagonal Rod: 153.3453 Checking delta radius Adjusting Delta Radius x:-0.0200 (adj:-3.1100) y:-0.0300 (adj:-8.6400) z:0.0200 (adj:-7.7200) X=OK Y=OK Z=OK c: -0.1100 delta radius:66.8500 prec:0.010 tries:0 done:false x:0.0500 (adj:-3.0600) y:0.0400 (adj:-8.6000) z:0.0100 (adj:-7.7100) X=OK Y=OK Z=OK c: -0.0400 delta radius:67.0500 prec:0.010 tries:1 done:false x:0.0400 (adj:-3.0200) y:0.0800 (adj:-8.5200) z:0.0600 (adj:-7.6500) X=OK Y=OK Z=OK c: -0.0000 delta radius:67.2500 prec:0.010 tries:1 done:true Iteration: 19 Checking/Adjusting endstop offsets x:-0.0000 (adj:-3.0200) y:-0.0200 (adj:-8.5400) z:0.0100 (adj:-7.6400) X=OK Y=OK Z=OK | Z-Tower Endstop Offsets | -0.0200 X:-3.02 Y:-8.54 Z:-7.64 | -0.0600 0.0200 Tower Offsets | 0.0000 A:0.00 b:0.00 C:0.00 | -0.0100 -0.0300 I:0.00 J:0.00 K:-1.50 | 0.0200 Delta Radius: 67.2500 | X-Tower Y-Tower Diagonal Rod: 153.3453 Autocalibration Complete SENDING:M500 echo:Settings Stored

Полный листинг повторной калибровки

SENDING:G30 A Starting Auto Calibration.. Calibration precision: +/-0.100mm | Z-Tower Endstop Offsets | -0.1800 X:-3.02 Y:-8.54 Z:-7.64 | -0.3000 -0.1600 Tower Offsets | -0.2200 A:0.00 b:0.00 C:0.00 | -0.2200 -0.2000 I:0.00 J:0.00 K:-1.50 | -0.1500 Delta Radius: 67.2500 | X-Tower Y-Tower Diagonal Rod: 153.3453 Iteration: 1 Checking/Adjusting endstop offsets x:-0.2100 (adj:-3.2300) y:-0.2000 (adj:-8.7400) z:-0.1700 (adj:-7.8100) X=ERROR Y=ERROR Z=ERROR x:0.0100 (adj:-3.2200) y:0.0100 (adj:-8.7300) z:-0.0200 (adj:-7.8300) X=OK Y=OK Z=OK | Z-Tower Endstop Offsets | 0.0200 X:-3.22 Y:-8.73 Z:-7.83 | -0.1000 0.0300 Tower Offsets | 0.0000 A:0.00 b:0.00 C:0.00 | -0.0200 -0.0300 I:0.00 J:0.00 K:-1.50 | 0.0100 Delta Radius: 67.2500 | X-Tower Y-Tower Diagonal Rod: 153.3453 Autocalibration Complete

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

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

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

24
Комментарии к статье