Ошибка «Probe triggered prior to movement» в Klipper: причины и пошаговое решение

Ошибка probe triggered prior to movement в Klipper означает, что прошивка обнаружила сработанное состояние датчика (probe) ещё до начала движения оси Z — то есть сигнал с зонда уже активен в момент, когда печатающая голова только должна начать опускаться для измерения. Проще говоря, Klipper «видит», что датчик якобы касается стола, хотя до стола ещё далеко, и прерывает команду PROBE, QUAD_GANTRY_LEVEL, Z_TILT_ADJUST или BED_MESH_CALIBRATE.

Проблема почти всегда связана с логикой сигнала датчика, состоянием его контактов или конфигурацией секции [probe] в printer.cfg. Хорошая новость: в подавляющем большинстве случаев ошибка устраняется без замены оборудования — достаточно правильно продиагностировать состояние пина и поправить конфигурацию. Ниже разберём пошагово, от простых проверок к более тонким нюансам.

Как Klipper определяет срабатывание датчика

Перед началом измерения Klipper опрашивает пин, к которому подключён зонд, и ожидает увидеть его в состоянии «не сработал». Если пин уже возвращает активный уровень, прошивка делает вывод, что датчик находится в состоянии касания, и останавливает операцию с сообщением !! Probe triggered prior to movement. Это защитный механизм: без него голова могла бы вдавить сопло в стол.

Состояние пина можно проверить вручную через консоль терминала (в Mainsail или Fluidd):

QUERY_PROBE

Команда вернёт probe: open (датчик не сработал) или probe: TRIGGERED (сработал). Если при поднятой голове и свободном датчике вы видите TRIGGERED — причина ошибки найдена: сигнал инвертирован, цепь замкнута или датчик физически активен.

Причина 1: неверная инверсия пина в конфигурации

Самая частая причина — неправильный префикс ! или ^ перед именем пина в секции [probe]. Знак ! инвертирует логику сигнала, а ^ включает подтяжку (pull-up). Если датчик типа BLTouch, CR Touch или индуктивный зонд выдаёт активный низкий уровень, а в конфиге инверсия не указана (или указана лишняя), Klipper постоянно видит ложное срабатывание.

Типичная строка выглядит так:

[probe]

pin: ^PA7

Проверьте документацию именно вашего датчика и платы: у разных моделей логика различается. Универсального значения «для всех» не существует — ориентируйтесь на результат команды QUERY_PROBE. Если при свободном датчике статус TRIGGERED, попробуйте добавить или убрать ! в определении пина, сохранить конфиг и перезапустить Klipper.

Причина 2: неисправная проводка и плохой контакт

Если инверсия настроена верно, а статус всё равно TRIGGERED, проверьте физическую цепь. Обрыв сигнального провода или плавающий контакт в разъёме часто даёт постоянный активный уровень на входе — для Klipper это выглядит как вечно нажатый датчик.

  • 🔌 Осмотрите разъёмы на датчике и на плате: подгоревшие или расшатанные пины дают нестабильный сигнал.
  • 🧵 Прозвоните сигнальный провод мультиметром от платы до зонда — обрыв в жгуте у подвижной головы встречается часто из-за постоянных изгибов кабеля.
  • ⚡ Убедитесь, что датчик получает питание: светодиод на BLTouch или индуктивном датчике должен гореть согласно его документации.
  • 🔩 Проверьте, что сигнальный провод подключён именно к тому пину, который указан в printer.cfg — на платах с несколькими разъёмами перепутать легко.
⚠️ Внимание: все работы с проводкой выполняйте при выключенном питании принтера. Замыкание сигнальной линии на питание может повредить вход микроконтроллера платы.

Причина 3: датчик физически сработан или застрял

Иногда электроника исправна, а виновата механика. У BLTouch шток может остаться в опущенном положении после неудачного деплоя, у механических концевиков — залипнуть контакт, у индуктивных датчиков — рядом может оказаться металлический предмет, который держит датчик в активном состоянии.

Для серводатчиков типа BLTouch выполните сброс и тест:

BLTOUCH_DEBUG COMMAND=reset

BLTOUCH_DEBUG COMMAND=pin_down

BLTOUCH_DEBUG COMMAND=pin_up

После каждой команды проверяйте QUERY_PROBE. Если шток не выходит или не убирается — вероятна механическая проблема самого датчика или его крепления. Для индуктивных и емкостных зондов уберите из зоны чувствительности посторонние предметы и проверьте расстояние до стола: слишком близко установленный датчик может быть срабатывает постоянно.

📊 Что стало причиной ошибки probe triggered prior to movement у вас?
Неверная инверсия пина в конфиге
Обрыв или плохой контакт проводки
Застрявший шток BLTouch
До сих пор ищу причину

Причина 4: конфликт виртуального концевика и настроек

При использовании зонда как концевика Z (секция [stepper_z] с endstop_pin: probe:z_virtual_endstop) ошибка может возникать и при команде G28 Z — хоуминг прерывается тем же сообщением. Здесь добавляются нюансы конфигурации.

  • ⚙️ Проверьте, что секция [probe] объявлена в конфиге до её использования и не дублируется.
  • 📏 Параметры speed, lift_speed и sample_retract_dist не вызывают эту ошибку напрямую, но некорректный z_offset может маскировать реальную картину при тестах.
  • 🧲 Для Klicky-подобных съёмных зондов убедитесь, что макросы ATTACH_PROBE и DOCK_PROBE отрабатывают корректно: если датчик не пристыкован, а Klipper думает обратное, состояние пина будет непредсказуемым.
  • 🧪 Проверьте, нет ли в конфиге двух секций, использующих один и тот же пин (например, [probe] и [filament_switch_sensor]) — конфликт пинов даёт странное поведение.
Почему ошибка появляется «внезапно», хотя вчера всё работало

Чаще всего виноваты микросдвиги: ослабший разъём от вибрации, трещина в проводе в месте изгиба кабель-канала, съехавшее крепление датчика после смены сопла. Реже — недавно отредактированный printer.cfg с сохранённой, но незамеченной ошибкой. Начните диагностику с того, что менялось в последний раз.

Сводная таблица диагностики

Таблица ниже поможет быстро сопоставить симптом с вероятной причиной и действием.

НаблюдениеВероятная причинаЧто делать
QUERY_PROBE всегда TRIGGEREDИнверсия пина или обрыв цепиПроверить ! в конфиге, прозвонить провод
Статус меняется при шевелении жгутаПлохой контакт в разъёме или надлом проводаОбжать/заменить разъём, заменить участок кабеля
Шток BLTouch не выходитМеханика датчика или питаниеКоманды reset/pin_down, проверить питание
Ошибка только при G28 ZПроблема с z_virtual_endstopПроверить секцию [probe] и порядок конфига
Ошибка с появлением после правок конфигаОпечатка в printer.cfgОткатить последние изменения, проверить синтаксис

Пошаговая инструкция по устранению

Действуйте в указанном порядке — от безопасных проверок к более глубоким. Каждый шаг обратим и не требует разборки принтера.

☑️ Чек-лист устранения ошибки probe triggered prior to movement

Выполнено: 0 / 6

После каждого исправления сохраняйте файл и выполняйте RESTART (или FIRMWARE_RESTART, если менялись параметры, связанные с MCU). Затем запускайте QUERY_PROBE и пробную команду PROBE с головой, поднятой на безопасную высоту — так вы проверите цепочку без риска для стола.

⚠️ Внимание: при первом тесте после исправлений держите руку у кнопки аварийной остановки или выключателя. Если логика датчика всё ещё неверна, голова может не остановиться у стола — команда M112 (экстренная остановка) прервёт движение немедленно.

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

Профилактика повторения ошибки

Чтобы проблема не вернулась, закрепите жгут датчика так, чтобы провод не перегибался в одной точке при движении каретки — именно циклические изгибы чаще всего убивают сигнальные жилы. Разъёмы возле головы можно дополнительно зафиксировать термоусадкой или стяжкой.

Также храните резервную копию рабочего printer.cfg. Если ошибка появится после очередной правки конфигурации, вы сможете за минуту откатиться к заведомо исправной версии и сравнить файлы, вместо того чтобы искать опечатку вслепую.

Часто задаваемые вопросы

Почему QUERY_PROBE показывает TRIGGERED, хотя датчик не касается стола?

Наиболее вероятны три причины: неверная инверсия пина (лишний или отсутствующий ! в конфиге), обрыв/замыкание в сигнальном проводе либо физически активное состояние датчика — застрявший шток у BLTouch или металлический предмет в зоне чувствительности индуктивного зонда.

Может ли эта ошибка появиться из-за неправильного z_offset?

Нет. Параметр z_offset влияет на точность измерения высоты, но не на логику срабатывания пина. Ошибка probe triggered prior to movement возникает до начала движения и связана только с состоянием сигнала датчика.

Ошибка возникает только при QGL или Z_TILT, а PROBE работает. В чём дело?

Такое возможно, если в макросах выравнивания используются свои команды подъёма/опускания зонда (актуально для съёмных датчиков типа Klicky). Проверьте, что макросы стыковки датчика выполняются до начала измерений и что состояние пина соответствует реальному положению зонда.

Поможет ли перепрошивка платы?

Практически никогда: ошибка находится на уровне конфигурации, проводки или самого датчика, а не прошивки MCU. Начинайте с QUERY_PROBE, проверки инверсии пина и целостности кабеля — перепрошивка оправдана лишь при подтверждённой неисправности входа платы.

Как безопасно проверить исправленную настройку?

Поднимите голову командой G91G1 Z50G90, убедитесь, что QUERY_PROBE возвращает open, затем запустите PROBE с готовностью нажать аварийную остановку. Если измерение завершилось корректно, можно переходить к G28 и калибровке стола.