G-code
Команды, которые набираешь руками в консоли принтера.
- Как читать строку
- Движение и координаты
- Нагрев и обдув
- Настройки
- Диагностика
- Команды Klipper
- G92, M84, M600
- Управление обдувом
- Макросы Klipper
- Пауза и отвод сопла
- Температура на паузе
- Готовые последовательности
Как читать строку G-code
Одна строка — одна команда. Сначала буква и номер (G1,M104), дальше параметры: снова буква и число. Порядок параметров значения не имеет, не указанный параметр не меняется —G1 X10 двигает только X, остальные оси остаются на месте.
| Буква | Что значит | Пример |
|---|---|---|
| G / M | Сама команда. G — движение и координаты, M — всё остальное | G1, M104 |
| X Y Z | Координаты, мм | X10.5 Y20 |
| E | Подача прутка, мм | E1.5 |
| F | Скорость подачи, мм/мин — не мм/с | F1800 = 30 мм/с |
| S | Значение: температура, обдув 0–255, номер | S210 |
| P | Время в миллисекундах или номер | P1000 |
| T | Номер инструмента (экструдера) | T0 |
| ; | Комментарий до конца строки, прошивка его не исполняет | ;LAYER:5 |
F задаётся в миллиметрах в минуту, а скорости в слайсере и в командах Klipper вроде SET_VELOCITY_LIMIT — в миллиметрах в секунду. Разница в шестьдесят раз: F1800 — это 30 мм/с.
G90 и G91 переключают оси между абсолютными и относительными координатами, M82 и M83 делают то же с подачей прутка. Одна и та же строка G1 E5 в одном режиме выдавит 5 мм, в другом — отмотает пруток назад на разницу.G91 и M83 перед серией команд, и всё считается от текущей точки. Абсолютные значения в консоли — источник половины ошибок.X10.5. Запятую прошивка не разберёт.Движение и координаты
| Команда | Что делает | В Klipper |
|---|---|---|
| G0 / G1 | Перемещение. В прошивке это одна команда: G0 тоже выдавит пруток, если задан E. Слайсер по соглашению ставит G0 на переезды | так же |
| G28 | Парковка. Без аргументов — все оси, G28 X — только X | так же |
| G29 | Построить карту стола | BED_MESH_CALIBRATE |
| G90 | Абсолютные координаты | так же |
| G91 | Относительные координаты | так же |
| M82 / M83 | Абсолютная и относительная подача филамента | так же |
| G92 | Назначить текущей позиции значение | так же |
| G10 / G11 | Ретракт и возврат по настройкам прошивки | нужна секция [firmware_retraction] |
| G4 P1000 | Пауза, значение в миллисекундах | так же |
Нагрев и обдув
| Команда | Что делает | В Klipper |
|---|---|---|
| M104 S210 | Задать температуру сопла и продолжить | так же |
| M109 S210 | Задать и ждать нагрева сопла | так же |
| M140 S60 | Задать температуру стола и продолжить | так же |
| M190 S60 | Задать и ждать нагрева стола | так же |
| M105 | Показать текущие температуры | так же |
| M106 S255 | Обдув детали, 0–255 | так же, но только для секции [fan] |
| M107 | Выключить обдув | так же |
| M303 E0 S210 C8 | Автонастройка PID сопла. Результат надо вписать командой M301 и сохранить M500, иначе он потеряется при перезагрузке. Как калибровать | PID_CALIBRATE HEATER=extruder TARGET=210, дальше SAVE_CONFIG |
Настройки
| Команда | Что делает | В Klipper |
|---|---|---|
| M92 E93 | Шаги на миллиметр для экструдера | rotation_distance в printer.cfg |
| M201 / M203 | Предельные ускорения и скорости по осям | нет — max_accel и max_velocity в секции [printer], на лету SET_VELOCITY_LIMIT |
| M204 S3000 | Ускорение печати | так же |
| M220 S100 | Множитель скорости печати, % | так же |
| M221 S100 | Множитель подачи филамента, % | так же |
| M500 | Сохранить настройки в память | самой M500 нет; близкое по смыслу — SAVE_CONFIG (перезапускает управляющую программу на хосте) |
| M501 | Загрузить сохранённые настройки | нет — конфиг читается при старте |
| M502 | Сбросить к заводским | нет — править printer.cfg |
| M503 | Показать текущие настройки | нет — смотреть printer.cfg |
Диагностика и управление
| Команда | Что делает | В Klipper |
|---|---|---|
| M114 | Текущие координаты | так же. GET_POSITION печатает то же подробнее — низкоуровневые координаты для отладки |
| M115 | Версия прошивки и возможности | так же |
| M117 Текст | Строка на дисплей и в интерфейс | нужна секция [display_status] |
| M119 | Состояние концевиков | так же, синоним QUERY_ENDSTOPS |
| M84 | Отключить моторы | так же |
| M112 | Аварийная остановка | так же, дальше нужен FIRMWARE_RESTART |
| M600 | Смена филамента | макрос, в ядре нет |
Команды Klipper: что набирать в консоли
У Klipper, кроме обычного G-code, есть свои команды — длинные, словами, с параметрами вида ИМЯ=значение. Их набирают в консоли Mainsail или Fluidd и вставляют в макросы. Часть из них появляется только вместе с секцией конфига: нет секции — нет команды, и Klipper ответит, что команда неизвестна.
Прошивка и конфиг
| Команда | Что делает | Как пишется |
|---|---|---|
| RESTART | Перечитать printer.cfg и перезапустить хост | После правки конфига. Печать при этом обрывается |
| FIRMWARE_RESTART | То же плюс перезапуск микроконтроллера | Нужен после ошибки MCU и после M112 |
| SAVE_CONFIG | Дописать вычисленные значения в конец printer.cfg и перезапустить управляющую программу на хосте | Так закрепляются PID, карта стола, z-offset. Во время печати не выполнять: перезапуск её обрывает |
| STATUS | Состояние прошивки | Первое, что спрашивают при непонятной ошибке |
| HELP | Список доступных команд | Твои макросы попадают в этот же список |
| SET_IDLE_TIMEOUT | Таймаут простоя на лету, секунды | TIMEOUT=3600. Постоянное значение — в секции [idle_timeout] |
Нагрев, стол и Z
| Команда | Что делает | Как пишется |
|---|---|---|
| TURN_OFF_HEATERS | Выключить все нагреватели разом | |
| SET_HEATER_TEMPERATURE | Задать температуру без ожидания | HEATER=extruder TARGET=200. Стол — heater_bed |
| TEMPERATURE_WAIT | Ждать, пока датчик выйдет на температуру | SENSOR=extruder MINIMUM=200 |
| PID_CALIBRATE | Автонастройка PID нагревателя. Как калибровать | HEATER=extruder TARGET=210, дальше SAVE_CONFIG. Стол — HEATER=heater_bed |
| BED_MESH_CALIBRATE | Построить карту стола | Аналог G29. Чтобы карта пережила перезапуск — SAVE_CONFIG, но не во время печати: он перезапускает управляющую программу и обрывает её |
| BED_MESH_PROFILE | Загрузить, сохранить или удалить профиль карты | LOAD=default, SAVE=имя, REMOVE=имя |
| BED_MESH_CLEAR | Снять карту с текущей печати | |
| SET_GCODE_OFFSET | Сдвинуть координаты, не трогая конфиг | Z_ADJUST=-0.02 MOVE=1 — подстройка зазора на первом слое |
| Z_OFFSET_APPLY_PROBE | Перенести накрученный на лету Z-офсет в настройку датчика | Дальше SAVE_CONFIG. Без датчика — Z_OFFSET_APPLY_ENDSTOP |
| PROBE_ACCURACY | Серия замеров датчиком в одной точке | Разброс показывает, стоит ли верить датчику |
| QUERY_PROBE | Сработал датчик или нет | Проверка проводки, пока каретка стоит |
На лету, во время печати
| Команда | Что делает | Как пишется |
|---|---|---|
| SET_PRESSURE_ADVANCE | Поменять Pressure Advance без перезапуска | ADVANCE=0.045. SAVE_CONFIG его не сохраняет — значение вписывают в [extruder] руками |
| SET_VELOCITY_LIMIT | Скорость, ускорение и рывок на лету | VELOCITY=200 ACCEL=3000 SQUARE_CORNER_VELOCITY=5 |
| SET_INPUT_SHAPER | Параметры компенсатора резонанса | SHAPER_TYPE_X=mzv SHAPER_FREQ_X=48.5 |
| SET_RETRACTION | Длина и скорость firmware retraction | Нужна секция [firmware_retraction], сам ретракт — G10 и G11 |
| SET_FAN_SPEED | Скорость именованного вентилятора | FAN=имя SPEED=0.5, шкала 0–1 |
| SET_STEPPER_ENABLE | Питание отдельного мотора | STEPPER=stepper_x ENABLE=0. После этого положение оси недостоверно |
| STEPPER_BUZZ | Дёрнуть один мотор туда-обратно | STEPPER=stepper_x — проверка проводки и направления |
| SAVE_GCODE_STATE | Запомнить координаты, режимы и скорость | NAME=метка |
| RESTORE_GCODE_STATE | Вернуть запомненное | NAME=метка MOVE=1 MOVE_SPEED=60 — со скоростью в мм/с |
| SET_GCODE_VARIABLE | Записать значение в переменную макроса | MACRO=PAUSE VARIABLE=saved_temp VALUE=210 |
| RESPOND | Сообщение в консоль из макроса | MSG="текст". Нужна секция [respond], тогда работает и M118 |
HELP перечисляет всё, что понимает конкретно твоя сборка, вместе с твоими макросами. Справочник на сайте — про общее, конфиг у каждого свой.SET_VELOCITY_LIMIT, SET_PRESSURE_ADVANCE, SET_GCODE_OFFSET ничего не пишут в конфиг. Подобрал — впиши руками в printer.cfg.Что делают G92, M84 и M600
G92 — назначить координату, не двигаясь
Команда не двигает ничего. Она объявляет, что текущая точка теперь называется так, как ты сказал: G92 E0 обнуляет счётчик выдавленного прутка, G92 X0 объявляет текущее положение каретки нулём по X. Слайсер вставляет G92 E0 в начало файла, а иногда и перед каждым слоем, чтобы значение Eне росло до десятков тысяч.
M82 число в G1 E100 — не «выдави 100 мм», а «доведи счётчик до 100». Если печать уже намотала 350, эта строка не выдавит ничего: экструдер отмотает 250 мм назад. В Klipper до отмотки даже не дойдёт — движение только по E длиннее max_extrude_only_distance (по умолчанию 50 мм) прошивка отклоняет. Поэтому ручную выдавку делают только через M83.G92 Z0 на весу заставит прошивку считать нулём ту высоту, где сопло стоит сейчас. Дальше печать либо повиснет в воздухе, либо каретка поедет в стол — по координатам всё будет правильно, по факту нет.SET_KINEMATIC_POSITION, и она работает лишь при enable_force_move: True в секции [force_move]. Это отладочный инструмент: ограничители при таком движении не работают.M84 — снять питание с моторов
Синоним M18. Ток с обмоток снимается, вал можно крутить рукой. В Marlin можно перечислить оси и задать таймаут простоя параметром S в секундах. Klipper гасит все моторы разом, отдельный мотор выключает SET_STEPPER_ENABLE, а таймаут простоя живёт в секции [idle_timeout].
G28. Набирать M84 во время печати — значит её оборвать.[idle_timeout] по умолчанию ждёт 600 секунд простоя и выполняет TURN_OFF_HEATERS и M84. Это же правило ловит длинную паузу — см. раздел про температуру ниже.M600 — смена филамента посреди печати
Слайсер вставляет её туда, где ты попросил сменить цвет или материал. В Marlin команда работает, только если при сборке прошивки включён ADVANCED_PAUSE_FEATURE: в стоковой сборке его может не быть, и тогда команда не распознаётся. Координаты парковки и длины выгрузки-загрузки задаются параметрами, а по умолчанию берутся из настроек прошивки.
В ядре Klipper команды M600 нет — её заводят макросом. Самый безопасный вариант: не писать отвод второй раз, а переслать вызов в PAUSE, где отвод и втягивание уже описаны.
[gcode_macro M600]
description: Смена филамента посреди печати
gcode:
PAUSEДальше пруток меняют руками или кнопками интерфейса, а печать продолжает RESUME. Если в PAUSE у тебя стоит сброс сопла до дежурной температуры, для смены филамента её придётся держать выше порога экструзии — иначе кнопки прутка на этой паузе откажут, см. раздел ниже.
M1006 — из тех, о которых спрашивают чаще всего: в списке команд Marlin и Klipper его нет, на них строка получит ответ, что команда неизвестна. Что он делает, зависит от прошивки, из которой пришёл файл, — смотри документацию своей модели, общего ответа тут нет.Как управлять обдувом и какой вентилятор за что отвечает
Вентиляторов на принтере минимум два, и путать их дорого. Обдув детали дует на только что уложенную линию — им управляет слайсер командойM106. Обдув хотэнда дует на термобарьер и не даёт пластику размягчаться выше зоны расплава; он включается по температуре нагревателя и командой из файла не управляется. Выключишь его — пруток раздуется в термобарьере и встанет пробкой.
| Что нужно | Marlin | Klipper |
|---|---|---|
| Обдув детали на полную | M106 S255 | M106 S255 |
| Обдув детали вполсилы | M106 S128 | M106 S128 |
| Выключить обдув детали | M107 | M107 |
| Второй вентилятор обдува | M106 P1 S255 — номер задаётся при сборке прошивки | SET_FAN_SPEED FAN=имя SPEED=1 для секции [fan_generic имя] |
| Обдув хотэнда | Автоматический вентилятор, командой не задаётся | Секция [heater_fan], включается по температуре нагревателя |
| Обдув платы | Настройка прошивки, не команда | Секция [controller_fan], включается по работе моторов и нагревателей |
| Вентилятор по датчику | — | Секция [temperature_fan], цель — SET_TEMPERATURE_FAN_TARGET |
Шкала M106 — 0–255 в обеих прошивках: S128это примерно половина. У SET_FAN_SPEED в Klipper шкала другая, от 0 до 1.
P выбирает номер, нумерация с нуля, и какой разъём получил какой номер, решает сборка конкретной прошивки. В Klipper номеров нет вообще: секция [fan] одна, M106 управляет только ею, а всё остальное — именованные секции [fan_generic] и команда SET_FAN_SPEED.[heater_fan]: вентилятор включается, когда его нагреватель горячее порога, и выключается сам. В Marlin ту же роль играет автоматический вентилятор с порогом из конфигурации прошивки. По умолчанию порог в обеих около 50 °C.S25, у других заметно выше или ниже. При этом уже раскрученная крыльчатка на том же значении держится. Свой порог ищут на слух — M106 с шагом вверх с остановленного вентилятора. В Klipper на это есть kick_start_time — короткий импульс на полную при старте, и off_below — порог, ниже которого скорость считается нулём. В Marlin те же роли у FAN_KICKSTART_TIME и FAN_MIN_PWM.Чем макрос Klipper отличается от команды
Команда G-code — часть языка, её понимает сама прошивка. Макрос — имя, за которым стоит список команд, объявленный в конфиге секцией[gcode_macro ИМЯ]. Для файла печати и для интерфейса разницы нет: макрос вызывается так же, как обычная команда, и вHELP стоит в одном списке с ней.
Внутри макроса работают шаблоны Jinja2: условия и вычисления считаются в момент вызова, а в прошивку уходит уже готовый текст. Отсюда и берутся макросы, которые смотрят на состояние машины — координаты, заданную температуру, габарит осей.
printer.toolhead.position, printer.extruder.target, printer.toolhead.axis_maximum подставляет значение на момент выполнения. Так макрос узнаёт, где сопло и до какой температуры его грели.variable_park_x: 10 заводит переменную, которую правят в одном месте. Поменять её из другого макроса можно командой SET_GCODE_VARIABLE — так одно действие передаёт значение другому.rename_existing: BASE_PAUSE. Без этой строки Klipper не запустится: имя уже занято, и запуск падает с gcode command PAUSE already registered. Обратная ошибка — Existing command 'PAUSE' not found in gcode_macro rename: переименовывать нечего, команды с именем самого макроса в конфиге нет.RESTART перечитывает printer.cfg. FIRMWARE_RESTART вдобавок перезапускает микроконтроллер — он нужен после ошибки MCU и после M112.Как поставить печать на паузу и отвести сопло
Команды PAUSE и RESUME появляются в Klipper вместе с секцией [pause_resume] в конфиге. Сама по себе пауза только останавливает подачу файла и запоминает состояние — сопло остаётся стоять над деталью и подтекает в одну точку. Отвод, подъём по Z и втягивание прутка добавляет макрос поверх базовой команды.
Сначала проверь, нет ли такого макроса у тебя. Mainsail и Fluidd приносят свои: в подключаемом конфиге интерфейса (mainsail.cfg, fluidd.cfg — строка[include …] в начале printer.cfg) уже переопределены PAUSE, RESUME иCANCEL_PRINT. Вторая секция [gcode_macro PAUSE]рядом с ними ошибки не вызовет — и это хуже ошибки. Повтор секции Klipper проблемой не считает: две одинаковые секции сливаются в одну, и по каждой строке побеждает прочитанное последним. Твоя секция ниже строки[include mainsail.cfg] молча заменит клиентский макрос, унаследовав его переменные variable_, которых у тебя нет; поставленная выше — так же молча останется без действия. В логе ни того, ни другого не видно.
_CLIENT_VARIABLE: там задают, парковаться ли по своим координатам, на сколько поднимать сопло и сколько втягивать. Точный набор переменных сверь с документацией своего интерфейса, он отличается по версиям.Макрос паузы
[gcode_macro PAUSE]
description: Пауза с отводом сопла
rename_existing: BASE_PAUSE
# Значения ниже — пример. Подставь свои: координаты в пределах стола,
# подъём — сколько влезает над деталью, втягивание — как у твоего профиля.
variable_park_x: 10
variable_park_y: 10
variable_lift_z: 10
variable_retract: 1.5
gcode:
{% set p = printer["gcode_macro PAUSE"] %}
{% set max_z = printer.toolhead.axis_maximum.z|float %}
{% set act_z = printer.toolhead.position.z|float %}
{% set lift = [p.lift_z|float, max_z - act_z]|min %}
BASE_PAUSE
G91
M83
G1 E-{p.retract} F2100
G1 Z{lift} F900
G90
G1 X{p.park_x} Y{p.park_y} F6000gcode command PAUSE already registered. Если же секции [pause_resume] в конфиге нет, переименовывать нечего, и запуск падает с Existing command 'PAUSE' not found in gcode_macro rename — именно так ломается конфиг у того, кто скопировал макрос, а секцию завести забыл.[pause_resume] сама сохраняет состояние под меткой PAUSE_STATE, а BASE_RESUME сам возвращает сопло в точку остановки со скоростью recover_velocity. Свой SAVE_GCODE_STATE здесь — второе такое же сохранение и второй возврат по тому же пути.[idle_timeout] по умолчанию через 600 секунд гасит нагрев и обесточивает моторы — вместе с паузой. Пока в макросе нет SET_IDLE_TIMEOUT, пауза живёт десять минут, а дальше возвращаться некуда: положение осей потеряно. Строка добавляется ниже, в разделе про температуру.G90 перед парковкой возвращает абсолютные — координаты стола задаются в них.F2100 — это 35 мм/с на втягивании, F900 — 15 мм/с на подъёме, F6000 — 100 мм/с на перегоне. Медленнее не нужно, быстрее — по возможностям машины.Возобновление
[gcode_macro RESUME]
description: Возврат в точку остановки и продолжение печати
rename_existing: BASE_RESUME
gcode:
{% set p = printer["gcode_macro PAUSE"] %}
G91
M83
G1 E{p.retract} F2100
BASE_RESUMEПруток возвращают, пока сопло стоит в стороне: капля упадёт мимо детали. BASE_RESUME сам отвезёт сопло в точку остановки, вернёт режимы координат и продолжит печать; скорость возврата задаёт параметр recover_velocity секции[pause_resume].
Как понизить температуру сопла на паузе
Смысл в том, что горячее сопло на долгой паузе течёт, а пруток внутри деградирует: PLA карамелизуется, PETG вспенивается, и первые сантиметры после возобновления идут с пузырями. Сброс до дежурной температуры это останавливает. Для короткой паузы на минуту-другую сбрасывать нагрев не нужно — обратный выход на температуру займёт дольше, чем сама пауза.
Заданную температуру перед сбросом надо запомнить: её берут из состояния экструдера и кладут в переменную макроса командойSET_GCODE_VARIABLE. Строки ниже дописываются к макросу паузы из предыдущего раздела.
# К переменным PAUSE добавляются две.
# 160 — пример: температура ниже порога экструзии, чтобы пруток
# перестал течь, но сопло не остыло до комнатного.
variable_standby: 160
variable_saved_temp: 0
# Эти три строки идут в конец gcode: у PAUSE, после парковки.
SET_GCODE_VARIABLE MACRO=PAUSE VARIABLE=saved_temp VALUE={printer.extruder.target}
SET_HEATER_TEMPERATURE HEATER=extruder TARGET={p.standby}
SET_IDLE_TIMEOUT TIMEOUT=3600На возобновлении нагрев обязан идти первым, до возврата прутка.M109 ждёт выхода на температуру, и только после этого экструдеру разрешено двигаться.
# Эти строки идут в начало gcode: у RESUME, до возврата прутка.
# Таймаут возвращается не к жёсткому числу, а к тому, что стоит
# в твоей секции [idle_timeout]: значение берётся из конфига.
{% set t = printer["gcode_macro PAUSE"].saved_temp|float %}
{% if t > 0 %}
M109 S{t}
{% endif %}
SET_IDLE_TIMEOUT TIMEOUT={printer.configfile.settings.idle_timeout.timeout}min_extrude_temp, по умолчанию это 170 °C. Дежурные 160 в порог не проходят намеренно: на паузе пруток шевелить незачем, а вот в макросе возобновления нагрев обязан стоять раньше любой команды с E, иначе Klipper остановится с ошибкой.E, и на дежурных 160 °C Klipper его отклонит: «Extrude below minimum temp». Пруток руками тоже не вытянуть — он застынет в сопле. Если пауза нужна как раз для смены филамента (M600), дежурную температуру не сбрасывают вовсе либо держат её выше min_extrude_temp — например 180 для PLA, — а сброс до 160 оставляют для пауз, на которых пруток не трогают.t > 0 нужно на случай, если паузы не было и запомненная температура пустая: без него M109 S0 оказался бы в начале возобновления.[idle_timeout] по умолчанию ждёт 600 секунд и выполняет TURN_OFF_HEATERS и M84: нагрев выключен, моторы обесточены, возвращаться в точку не с чего. Поэтому в макросе стоит SET_IDLE_TIMEOUT. На возобновлении таймаут возвращают не числом 600, а значением из своей же секции: макросу оно доступно через printer.configfile.settings, как в примере выше. Жёсткая цифра затрёт настройку тому, у кого в конфиге стоит не 600. У клиентских макросов Mainsail для этого есть отдельная переменная.Готовые последовательности
Выдавить 100 мм для калибровки экструдера
M109 S210
G91
M83
G1 E50 F50
G1 E50 F50Сто миллиметров разбиты на две команды по 50 не для удобства счёта: Klipper отклоняет движение только по E, если оно длиннееmax_extrude_only_distance — а это по умолчанию 50 мм. Строка G1 E100 там оборвётся с «Extrude only move too long», и запущенная из файла оборвёт печать. Два движения по 50 проходят и в Klipper, и в Marlin. Скорость 50 мм/мин — намеренно медленно, иначе экструдер проскользнёт и результат будет про сцепление, а не про шаги. Калькулятор E-steps.
Прочистить сопло холодной протяжкой
M109 S240
G91
M83
G1 E20 F100Дальше сопло остужают до 90 °C и ждут не по таймеру, а по датчику. В Marlin это одна строка:
M109 R90В Klipper — две:
M104 S90
TEMPERATURE_WAIT SENSOR=extruder MAXIMUM=90Остывание с 240 до 90 занимает две-четыре минуты — сколько именно, зависит от хотэнда и обдува. Пауза G4 P60000 отсчитает ровно минуту и отпустит тебя к ещё горячему соплу, поэтому её тут и нет. Перед протяжкой отпусти прижим экструдера — иначе будешь тянуть пруток через сжатую шестерню и сточишь на нём лыску вместо того, чтобы вытащить. Тянуть рукой одним движением, вверх; на конце останется слепок сопла вместе с нагаром.
Проверить геометрию без печати
G28
G90
G1 Z5 F600
G1 X10 Y10 F3000
G1 X200 Y10
G1 X200 Y200
G1 X10 Y200
G1 X10 Y10Подъём на 5 мм стоит первым не зря: после G28 сопло на нуле, и обход периметра пошёл бы по столу. Опускать обратно не надо. Дальше каретка обходит периметр: слышны стуки или клины — проблема механическая, настройками не лечится. Координаты рассчитаны на стол 220 × 220; на другом габарите подставь свои.
Ни один из рецептов не заканчивается на M84. Моторы после них выключают руками и только на машине с винтовой осью Z: на ремённой портал без тока опускается под своим весом — сопло уедет в стол или в деталь.
Дальше
- PID-калибровкаЧто писать в M303 и M301, что — в PID_CALIBRATE
- Калибровка экструдераE-steps в Marlin и rotation_distance в Klipper
- Pressure AdvanceЧто подставлять в SET_PRESSURE_ADVANCE и как снять значение
- Скорости печатиЧто задавать в SET_VELOCITY_LIMIT и чем ограничена скорость
- Дефекты печатиСимптом, причина и что крутить — от подтёков до расслоения