Типичная история: человек покупает ADXL345, лепит его на хотэнд, гоняет SHAPER_CALIBRATE, получает красивый график — и печать не становится лучше. Через неделю он протягивает ремень, и весь расчёт можно выбрасывать: частота уехала.
Klipper даёт десяток инструментов калибровки, и почти все они дают правдоподобный результат независимо от того, готова ли машина. Именно в этом ловушка: цифра появляется всегда, но смысл она имеет только если то, что под ней, уже зафиксировано. Ниже — последовательность из семи шагов и объяснение, почему у каждого шага именно такое место.
❗ Главное
Правило одно: калибровка измеряет следствие. Если причина ещё гуляет, измерение придётся повторять. Поэтому порядок идёт снизу вверх — от железа к софтверным компенсациям, а не наоборот.
Официальная документация Klipper начинает не с настроек качества, а со списка проверок безопасности — и правильно делает. Ни одна из них не про печать, но каждая может стоить принтера.
✅ Как правильно
Температуры. Графики сопла и стола показывают комнатную температуру и не растут сами по себе.
M112. Аварийная остановка должна переводить прошивку в состояние shutdown; FIRMWARE_RESTART возвращает её в норму, температуры продолжают обновляться.
Нагреватели. Задайте соплу 50 °C — температура должна расти в течение ~30 секунд. Выключите — за несколько минут вернуться к комнатной.
Enable-пины. После M84 все оси должны двигаться руками. Если моторы заблокированы — в конфиге нужен инвертированный пин: enable_pin: !PA1.
Концевики.QUERY_ENDSTOPS при отведённых осях — open, при нажатом вручную — TRIGGERED. Инверсия — тем же !.
Направление моторов.STEPPER_BUZZ STEPPER=stepper_x дёргает ось на 1 мм десять раз. Проверяем направление, возврат в исходную точку и саму дистанцию.
Экструдер. Прогреть до рабочей температуры, нажать «Extrude», убедиться, что мотор крутит в правильную сторону.
⛔ Так делать нельзя
Пропускать пункт 2 нельзя ни при каких обстоятельствах. Неработающая аварийная остановка — единственный отказ из этого списка, который заканчивается не испорченной деталью, а пожаром.
Шаг 1. Механика: то, что нельзя починить конфигом
Здесь нет команд Klipper, и именно поэтому шаг чаще всего пропускают. Между тем всё, что будет измеряться дальше, — производная от жёсткости конструкции.
Что проверяется: натяжение ремней X и Y (одинаковое, без «струны» и без провисания), затяжка шкивов на валах — винт должен стоять на лыске, а не на круглой части, люфт кареток и эксцентриков, затяжка рамы, отсутствие качания стола.
Почему это первым: собственная частота колебаний рамы и каретки — то, что вы будете измерять на шаге 6. Она напрямую зависит от натяжения ремня и массы каретки. Протянули ремень после калибровки шейпера — получили другую частоту и старые коэффициенты.
📌 Заметка
Есть удобный побочный инструмент: TEST_RESONANCES AXIS=1,1 OUTPUT=raw_data и TEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data (на CoreXY это соответствует движению по одному и по другому ремню). Сравнение двух графиков показывает разницу в натяжении ремней. Но это диагностика механики, а не калибровка шейпера — не путайте эти два применения одной команды.
Шаг 2. rotation_distance: геометрия и подача
rotation_distance — это расстояние, которое проходит ось за один полный оборот шагового двигателя. Для ременных осей оно считается, а не подбирается:
rotation_distance = шаг ремня × число зубьев шкива
Для типового сочетания GT2 (шаг 2 мм) и шкива на 20 зубьев получается ровно 40 мм. Если у вас 16 зубьев — 32 мм, и никакой «калибровки по печати куба» здесь не нужно: значение известно точно.
Если ось всё же ходит не туда, куда просили, коррекция считается по формуле:
С экструдером иначе — там метод «измерить и подрезать» как раз уместен, потому что проскальзывание и деформация филамента не выводятся из геометрии:
G91
G1 E50 F60
Порядок действий: пометить филамент примерно в 70 мм от входа в экструдер, выдавить 50 мм на медленной подаче (F60 — это 1 мм/с, чтобы не считать давление в сопле), замерить штангенциркулем новое положение метки. Фактическое расстояние — разница между исходным и конечным замером; дальше та же формула, результат округляется до трёх знаков.
ℹ️ Справка
Если в экструдере стоит редуктор, не пересчитывайте передаточное число руками — для этого есть gear_ratio. Тогда rotation_distance описывает движение выходной шестерни, а не вала мотора, и конфиг остаётся читаемым.
Метод «измерить и подрезать» документация прямо не рекомендует для X, Y и Z: точности измерения там не хватает, а формула из геометрии даёт точный ответ.
Шаг 3. PID: стабильная температура — стабильная вязкость
Почему до калибровки потока и pressure advance, а не после: вязкость расплава сильно зависит от температуры. Если сопло гуляет на ±5 °C, ширина экструдированной линии тоже гуляет — и вы будете «калибровать поток», измеряя на самом деле разболтанный нагреватель.
SAVE_CONFIG перезапишет секцию [extruder] в конце printer.cfg и перезагрузит прошивку. Калибруйте на температуре, близкой к рабочей для вашего основного филамента, — коэффициенты не универсальны.
Шаг 4. Первый слой и геометрия стола
Z-offset и bed_mesh — единственный шаг, который придётся делать частями и возвращаться к нему при смене поверхности стола или сопла. Здесь важна не столько «правильная цифра», сколько повторяемость: если после прогрева стола зазор уезжает, дальше калибровать нечего.
Практический критерий готовности: одинаковая толщина и одинаковая ширина первого слоя в центре и во всех четырёх углах, без «прозрачных» участков и без выдавленных валиков.
⚠️ Осторожно
Мешь стола компенсирует кривизну, но не компенсирует термическое поведение. Снимайте её на прогретом столе, при той температуре, на которой печатаете, — иначе вы записываете форму холодного стола и применяете её к горячему.
Шаг 5. Pressure advance: ширина стенки на разгонах
Pressure advance компенсирует давление в расплаве: при разгоне сопла нужно подать чуть больше пластика, при торможении — чуть меньше. Без него углы получаются раздутыми, а начала линий — тонкими.
Подготовка — снять с движения всё, что может исказить результат:
Печатается square_tower.stl из комплекта документации: скорость 100 мм/с, заполнение 0 %, высота слоя примерно 75 % диаметра сопла, динамическое управление ускорением и настройки шва — выключить.
Затем находим высоту, на которой стенка выглядит ровнее всего, и считаем:
pressure_advance = <START> + <высота в мм> × <FACTOR>
Пример из документации: 0 + 12.90 × 0.020 = 0.258. Типичные значения лежат в диапазоне 0,050–1,000, причём верхняя часть диапазона — это обычно боуден.
📌 Заметка
Значение зависит от филамента и в меньшей степени от температуры. Разумная практика — держать pressure advance не в printer.cfg, а в профилях слайсера через SET_PRESSURE_ADVANCE в стартовом G-коде: у PETG и PLA он отличается заметно.
Шаг 6. Резонансы: два пути к одной цифре
Ringing (он же ghosting) — это следы затухающих колебаний рамы на стенке детали после резкой смены направления. Input shaper не глушит колебания механически: он разбивает команду на несколько импульсов так, чтобы вторая волна пришла в противофазе к первой и погасила её.
Как input shaper гасит ringing: два импульса в противофазе
Печатается ringing_tower.stl: слой 0,2–0,25 мм, 1–2 периметра или ваза, внешние периметры на 80–100 мм/с, минимальное время слоя не больше 3 секунд, динамическое ускорение выключено. Команда:
Проводку документация советует делать экранированной витой парой (cat5e и лучше), проверять сопротивление подтяжек I²C (ориентир — от 900 Ом до 1,8 кОм) и подключать экран к земле MCU. Перед подачей питания проверьте распиновку дважды: ошибка убивает датчик.
Проверка связи и шума:
ACCELEROMETER_QUERY
MEASURE_AXES_NOISE
ACCELEROMETER_QUERY должен вернуть три числа, где по вертикальной оси видно ускорение свободного падения — примерно так:
// adxl345 values (x, y, z): 470.719200, 941.438400, 9728.196800
MEASURE_AXES_NOISE в норме даёт значения примерно от 1 до 100.
⚠️ Осторожно
Значения выше 1000 в MEASURE_AXES_NOISE — это не «шумный датчик, сойдёт». Это либо проблема с питанием и проводкой, либо разбалансированный вентилятор, который трясёт всю раму. Мерить резонансы в таком состоянии бессмысленно: вы снимете спектр вентилятора.
Сам замер (input shaper на время теста должен быть выключен):
TEST_RESONANCES AXIS=X
TEST_RESONANCES AXIS=Y
CSV попадут в /tmp/resonances_x_*.csv и /tmp/resonances_y_*.csv. Обработка:
Fitted shaper 'mzv' frequency = 34.6 Hz (vibrations = 0.0%, smoothing ~= 0.170)
To avoid too much smoothing with 'mzv', suggested max_accel <= 3500 mm/sec^2
Recommended shaper is mzv @ 34.6 Hz
Автоматический вариант — SHAPER_CALIBRATE (на «качельке» имеет смысл гонять по одной оси: SHAPER_CALIBRATE AXIS=Y), затем SAVE_CONFIG. Результат в конфиге:
Логика простая: чем длиннее шейпер, тем шире полоса частот, которую он гасит, и тем сильнее размывает мелкие детали. Скрипт calibrate_shaper.py уже взвешивает этот компромисс, но если сглаживание не устраивает, его можно ограничить явно:
Документация отдельно предупреждает: гонять автокалибровку шейпера часто — например, перед каждой печатью или ежедневно — не стоит. Тестовые прогоны сильно трясут машину, ускоряя износ и ослабляя крепёж. После калибровки имеет смысл пройтись по винтам.
Шаг 7. max_accel: минимум из двух пределов
Последний шаг — и единственный, где SAVE_CONFIG вам не поможет: значение подбирается глазами по тестовой печати.
Пределов два, и брать надо меньший:
Предел по ringing — максимальное ускорение, при котором следы колебаний ещё приемлемы.
Предел по сглаживанию — максимальное ускорение, при котором не теряются детали. Индикатор в тестовой модели — зазор 0,15 мм в стенке: чем сильнее сглаживание, тем шире он выглядит.
Зазор 0,15 мм в тестовой модели
Тот самый зазор 0,15 мм, по которому оценивают сглаживание. Иллюстрация из документации Klipper
Расширение зазора при росте ускорения
Чем выше ускорение, тем шире выглядит зазор. Иллюстрация из документации Klipper
square_corner_velocity при этом трогать не надо: документация советует оставить значение по умолчанию 5 мм/с, потому что его увеличение добавляет сглаживания ровно там, где мы его только что убирали.
Возвращаться к началу придётся при любом вмешательстве в механику: замена хотэнда меняет массу каретки и частоту, замена ремня — натяжение, новая поверхность стола — Z-offset. Это не повод калибровать всё заново каждую неделю, но повод помнить, какой шаг вы только что обнулили.
💬 Вопрос к сообществу
Интересно сравнить реальные цифры: какая у вас shaper_freq по X и Y, на какой кинематике и с каким max_accel в итоге печатаете? И был ли случай, когда после протяжки ремней частота уезжала настолько, что старый шейпер начинал мешать?
Вы можете написать сейчас и зарегистрироваться позже.
Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.
Типичная история: человек покупает ADXL345, лепит его на хотэнд, гоняет
SHAPER_CALIBRATE, получает красивый график — и печать не становится лучше. Через неделю он протягивает ремень, и весь расчёт можно выбрасывать: частота уехала.Klipper даёт десяток инструментов калибровки, и почти все они дают правдоподобный результат независимо от того, готова ли машина. Именно в этом ловушка: цифра появляется всегда, но смысл она имеет только если то, что под ней, уже зафиксировано. Ниже — последовательность из семи шагов и объяснение, почему у каждого шага именно такое место.
❗ Главное
Правило одно: калибровка измеряет следствие. Если причина ещё гуляет, измерение придётся повторять. Поэтому порядок идёт снизу вверх — от железа к софтверным компенсациям, а не наоборот.
Схема на основе документации klipper3d.org
Шаг 0. То, что делается до любой калибровки
Официальная документация Klipper начинает не с настроек качества, а со списка проверок безопасности — и правильно делает. Ни одна из них не про печать, но каждая может стоить принтера.
✅ Как правильно
M112. Аварийная остановка должна переводить прошивку в состояние shutdown;FIRMWARE_RESTARTвозвращает её в норму, температуры продолжают обновляться.M84все оси должны двигаться руками. Если моторы заблокированы — в конфиге нужен инвертированный пин:enable_pin: !PA1.QUERY_ENDSTOPSпри отведённых осях —open, при нажатом вручную —TRIGGERED. Инверсия — тем же!.STEPPER_BUZZ STEPPER=stepper_xдёргает ось на 1 мм десять раз. Проверяем направление, возврат в исходную точку и саму дистанцию.⛔ Так делать нельзя
Пропускать пункт 2 нельзя ни при каких обстоятельствах. Неработающая аварийная остановка — единственный отказ из этого списка, который заканчивается не испорченной деталью, а пожаром.
Шаг 1. Механика: то, что нельзя починить конфигом
Здесь нет команд Klipper, и именно поэтому шаг чаще всего пропускают. Между тем всё, что будет измеряться дальше, — производная от жёсткости конструкции.
Что проверяется: натяжение ремней X и Y (одинаковое, без «струны» и без провисания), затяжка шкивов на валах — винт должен стоять на лыске, а не на круглой части, люфт кареток и эксцентриков, затяжка рамы, отсутствие качания стола.
Почему это первым: собственная частота колебаний рамы и каретки — то, что вы будете измерять на шаге 6. Она напрямую зависит от натяжения ремня и массы каретки. Протянули ремень после калибровки шейпера — получили другую частоту и старые коэффициенты.
📌 Заметка
Есть удобный побочный инструмент:
TEST_RESONANCES AXIS=1,1 OUTPUT=raw_dataиTEST_RESONANCES AXIS=1,-1 OUTPUT=raw_data(на CoreXY это соответствует движению по одному и по другому ремню). Сравнение двух графиков показывает разницу в натяжении ремней. Но это диагностика механики, а не калибровка шейпера — не путайте эти два применения одной команды.Шаг 2. rotation_distance: геометрия и подача
rotation_distance— это расстояние, которое проходит ось за один полный оборот шагового двигателя. Для ременных осей оно считается, а не подбирается:Для типового сочетания GT2 (шаг 2 мм) и шкива на 20 зубьев получается ровно 40 мм. Если у вас 16 зубьев — 32 мм, и никакой «калибровки по печати куба» здесь не нужно: значение известно точно.
Если ось всё же ходит не туда, куда просили, коррекция считается по формуле:
С экструдером иначе — там метод «измерить и подрезать» как раз уместен, потому что проскальзывание и деформация филамента не выводятся из геометрии:
Порядок действий: пометить филамент примерно в 70 мм от входа в экструдер, выдавить 50 мм на медленной подаче (
F60— это 1 мм/с, чтобы не считать давление в сопле), замерить штангенциркулем новое положение метки. Фактическое расстояние — разница между исходным и конечным замером; дальше та же формула, результат округляется до трёх знаков.ℹ️ Справка
Если в экструдере стоит редуктор, не пересчитывайте передаточное число руками — для этого есть
gear_ratio. Тогдаrotation_distanceописывает движение выходной шестерни, а не вала мотора, и конфиг остаётся читаемым.Метод «измерить и подрезать» документация прямо не рекомендует для X, Y и Z: точности измерения там не хватает, а формула из геометрии даёт точный ответ.
Шаг 3. PID: стабильная температура — стабильная вязкость
Два вызова и сохранение:
Почему до калибровки потока и pressure advance, а не после: вязкость расплава сильно зависит от температуры. Если сопло гуляет на ±5 °C, ширина экструдированной линии тоже гуляет — и вы будете «калибровать поток», измеряя на самом деле разболтанный нагреватель.
SAVE_CONFIGперезапишет секцию[extruder]в концеprinter.cfgи перезагрузит прошивку. Калибруйте на температуре, близкой к рабочей для вашего основного филамента, — коэффициенты не универсальны.Шаг 4. Первый слой и геометрия стола
Z-offset и
bed_mesh— единственный шаг, который придётся делать частями и возвращаться к нему при смене поверхности стола или сопла. Здесь важна не столько «правильная цифра», сколько повторяемость: если после прогрева стола зазор уезжает, дальше калибровать нечего.Практический критерий готовности: одинаковая толщина и одинаковая ширина первого слоя в центре и во всех четырёх углах, без «прозрачных» участков и без выдавленных валиков.
⚠️ Осторожно
Мешь стола компенсирует кривизну, но не компенсирует термическое поведение. Снимайте её на прогретом столе, при той температуре, на которой печатаете, — иначе вы записываете форму холодного стола и применяете её к горячему.
Шаг 5. Pressure advance: ширина стенки на разгонах
Pressure advance компенсирует давление в расплаве: при разгоне сопла нужно подать чуть больше пластика, при торможении — чуть меньше. Без него углы получаются раздутыми, а начала линий — тонкими.
Подготовка — снять с движения всё, что может исказить результат:
Дальше запускается башня. Для директ-драйва и для боудена разный шаг:
Печатается
square_tower.stlиз комплекта документации: скорость 100 мм/с, заполнение 0 %, высота слоя примерно 75 % диаметра сопла, динамическое управление ускорением и настройки шва — выключить.Затем находим высоту, на которой стенка выглядит ровнее всего, и считаем:
Пример из документации:
0 + 12.90 × 0.020 = 0.258. Типичные значения лежат в диапазоне 0,050–1,000, причём верхняя часть диапазона — это обычно боуден.📌 Заметка
Значение зависит от филамента и в меньшей степени от температуры. Разумная практика — держать pressure advance не в
printer.cfg, а в профилях слайсера черезSET_PRESSURE_ADVANCEв стартовом G-коде: у PETG и PLA он отличается заметно.Шаг 6. Резонансы: два пути к одной цифре
Ringing (он же ghosting) — это следы затухающих колебаний рамы на стенке детали после резкой смены направления. Input shaper не глушит колебания механически: он разбивает команду на несколько импульсов так, чтобы вторая волна пришла в противофазе к первой и погасила её.
Схема на основе описания резонансной компенсации в документации Klipper
Тестовая печать с ringing. Иллюстрация из документации Klipper
Путь А. Без акселерометра — башня с ускорениями
Печатается
ringing_tower.stl: слой 0,2–0,25 мм, 1–2 периметра или ваза, внешние периметры на 80–100 мм/с, минимальное время слоя не больше 3 секунд, динамическое ускорение выключено. Команда:Дальше — линейка или штангенциркуль: измеряем расстояние D (мм) между несколькими колебаниями и считаем их количество N на этом отрезке. Частота:
где V — скорость внешнего периметра в мм/с. Считается отдельно для X и Y по меткам на модели.
Замер расстояния D между колебаниями. Иллюстрация из документации Klipper
Путь Б. С акселерометром
Klipper работает с ADXL345, MPU-9250, LIS2DW и LIS3DH-совместимыми датчиками. ADXL345 — только SPI, MPU и LIS умеют и SPI, и I²C.
Пример подключения ADXL345 напрямую к Raspberry Pi:
Тот же датчик через RP2040:
Проводку документация советует делать экранированной витой парой (cat5e и лучше), проверять сопротивление подтяжек I²C (ориентир — от 900 Ом до 1,8 кОм) и подключать экран к земле MCU. Перед подачей питания проверьте распиновку дважды: ошибка убивает датчик.
Проверка связи и шума:
ACCELEROMETER_QUERYдолжен вернуть три числа, где по вертикальной оси видно ускорение свободного падения — примерно так:MEASURE_AXES_NOISEв норме даёт значения примерно от 1 до 100.⚠️ Осторожно
Значения выше 1000 в
MEASURE_AXES_NOISE— это не «шумный датчик, сойдёт». Это либо проблема с питанием и проводкой, либо разбалансированный вентилятор, который трясёт всю раму. Мерить резонансы в таком состоянии бессмысленно: вы снимете спектр вентилятора.Сам замер (input shaper на время теста должен быть выключен):
CSV попадут в
/tmp/resonances_x_*.csvи/tmp/resonances_y_*.csv. Обработка:Вывод выглядит так:
Автоматический вариант —
SHAPER_CALIBRATE(на «качельке» имеет смысл гонять по одной оси:SHAPER_CALIBRATE AXIS=Y), затемSAVE_CONFIG. Результат в конфиге:Если тряска при тесте кажется чрезмерной, снизьте
accel_per_hz(по умолчанию 75):Какой шейпер выбирать
Логика простая: чем длиннее шейпер, тем шире полоса частот, которую он гасит, и тем сильнее размывает мелкие детали. Скрипт
calibrate_shaper.pyуже взвешивает этот компромисс, но если сглаживание не устраивает, его можно ограничить явно:📌 Заметка
Документация отдельно предупреждает: гонять автокалибровку шейпера часто — например, перед каждой печатью или ежедневно — не стоит. Тестовые прогоны сильно трясут машину, ускоряя износ и ослабляя крепёж. После калибровки имеет смысл пройтись по винтам.
Шаг 7. max_accel: минимум из двух пределов
Последний шаг — и единственный, где
SAVE_CONFIGвам не поможет: значение подбирается глазами по тестовой печати.Пределов два, и брать надо меньший:
Тот самый зазор 0,15 мм, по которому оценивают сглаживание. Иллюстрация из документации Klipper
Чем выше ускорение, тем шире выглядит зазор. Иллюстрация из документации Klipper
square_corner_velocityпри этом трогать не надо: документация советует оставить значение по умолчанию 5 мм/с, потому что его увеличение добавляет сглаживания ровно там, где мы его только что убирали.Шпаргалка: полный проход
✅ Как правильно
Возвращаться к началу придётся при любом вмешательстве в механику: замена хотэнда меняет массу каретки и частоту, замена ремня — натяжение, новая поверхность стола — Z-offset. Это не повод калибровать всё заново каждую неделю, но повод помнить, какой шаг вы только что обнулили.
💬 Вопрос к сообществу
Интересно сравнить реальные цифры: какая у вас
shaper_freqпо X и Y, на какой кинематике и с какимmax_accelв итоге печатаете? И был ли случай, когда после протяжки ремней частота уезжала настолько, что старый шейпер начинал мешать?Источники
TOP HOSTERS: KAMATERA (30 дней бесплатного теста!)
Универсальный хостер №1 - 4VPS.su (2Гб\с сервера) - 10% скидка на первый заказ или 15% бонус на первое пополнение