Проблема тайм-аута при хоминге в Klipper
Описание проблемы
Во время процесса хоминга возникает ошибка тайм-аута связи:
Error during homing z: Communication timeout during homing
Эта проблема часто встречается при хоминге по оси Z с несколькими MCU. Если во время хоминга нагрузка на хост-компьютер высока или связь с несколькими MCU нестабильна, может сработать тайм-аут.
- Убедитесь, что Klipper установлен корректно и может быть запущен.
- Убедитесь, что текущий пользователь — тот, от имени которого устанавливался Klipper.
- Убедитесь, что пути в командах ниже соответствуют вашей системе.
- Перед изменением исходного кода Klipper или добавлением скриптов рекомендуется сделать резервную копию соответствующих файлов.
- Настройка времени ожидания
- Управление KlipperScreen
- Поиск электромагнитных помех
Метод 1: Настройка времени ожидания
Этот метод напрямую изменяет файл исходного кода Klipper mcu.py. Рекомендуется использовать только для подтверждения проблемы тайм-аута при хоминге. После обновления Klipper это изменение может быть перезаписано; после решения или проверки проблемы рекомендуется вернуть значения по умолчанию.
Сначала сделайте резервную копию исходного файла:
cp ~/klipper/klippy/mcu.py ~/klipper/klippy/mcu.py.bak
Измените TRSYNC_TIMEOUT в Klipper:
sed -i 's/TRSYNC_TIMEOUT = [0-9.]*$/TRSYNC_TIMEOUT = 0.05/' ~/klipper/klippy/mcu.py
Перезапустите службу Klipper:
sudo systemctl restart klipper
Проверьте текущую настройку:
grep "TRSYNC_TIMEOUT =" ~/klipper/klippy/mcu.py
Чтобы восстановить значение по умолчанию:
sed -i 's/TRSYNC_TIMEOUT = [0-9.]*$/TRSYNC_TIMEOUT = 0.025/' ~/klipper/klippy/mcu.py
sudo systemctl restart klipper
Если необходимо восстановить из резервной копии:
cp ~/klipper/klippy/mcu.py.bak ~/klipper/klippy/mcu.py
sudo systemctl restart klipper
Метод 2: Управление KlipperScreen
Временно отключите KlipperScreen, чтобы освободить системные ресурсы и снизить вероятность тайм-аута связи во время хоминга.
Этот метод добавляет gcode_shell_command.py, каталог скриптов и конфигурацию макросов. Убедитесь, что ваша система позволяет использовать shell-команды, и проверьте, что пути к скриптам соответствуют фактическому пути установки.
Загрузка необходимых файлов
Стандартная система:
git clone https://cnb.cool/3dmellow/public/klipper-klipperscreen-manager
curl -# -L --retry 3 --retry-delay 2 -o ~/klipper/klippy/extras/gcode_shell_command.py https://raw.githubusercontent.com/dw-0/kiauh/master/kiauh/extensions/gcode_shell_cmd/assets/gcode_shell_command.py
Система FlyOS-FAST:
cd /data
git clone https://cnb.cool/3dmellow/public/klipper-klipperscreen-manager
curl -# -L --retry 3 --retry-delay 2 -o /data/klipper/klippy/extras/gcode_shell_command.py https://raw.githubusercontent.com/dw-0/kiauh/master/kiauh/extensions/gcode_shell_cmd/assets/gcode_shell_command.py
Установка прав на выполнение скриптов
Стандартная система:
cd ~/klipper-klipperscreen-manager
chmod +x ~/klipper-klipperscreen-manager/scripts/*.sh
Система FlyOS-FAST:
cd /data/klipper-klipperscreen-manager
chmod +x /data/klipper-klipperscreen-manager/scripts/*.sh
Создание конфигурационного файла
- Создайте файл
klipper_macros.cfgв каталоге конфигурации Klipper. - Добавьте в начало файла
printer.cfg:
[include klipper_macros.cfg]
Настройка макрокоманд
Добавьте следующее содержимое в klipper_macros.cfg. Замените /data/klipper-klipperscreen-manager/scripts/ на фактический путь к скриптам.
[gcode_shell_command disable_klipperscreen]
command: sh /data/klipper-klipperscreen-manager/scripts/disable_klipperscreen.sh
timeout: 5.0
verbose: True
[gcode_shell_command enable_klipperscreen]
command: sh /data/klipper-klipperscreen-manager/scripts/enable_klipperscreen.sh
timeout: 5.0
verbose: True
[gcode_macro RESTART_KlipperScreen]
variable_time: 60
gcode:
{% set wait_time = params.TIME|default(printer["gcode_macro RESTART_KlipperScreen"].time)|int %}
{action_respond_info("Время ожидания: %s секунд" % wait_time)}
RUN_SHELL_COMMAND CMD=disable_klipperscreen PARAMS={wait_time}
[gcode_macro ENABLE_KlipperScreen]
gcode:
{action_respond_info("Немедленный запуск KlipperScreen")}
RUN_SHELL_COMMAND CMD=enable_klipperscreen
Использование
Временное отключение KlipperScreen:
RESTART_KlipperScreen
Укажите время отключения, например, 120 секунд:
RESTART_KlipperScreen TIME=120
Ручной немедленный запуск KlipperScreen:
ENABLE_KlipperScreen
Этот метод временно отключает интерфейс KlipperScreen, освобождая системные ресурсы и снижая нагрузку на ЦП, тем самым уменьшая вероятность тайм-аута связи во время хоминга.
Метод отката
Если вы больше не используете этот метод, выполните откат в указанном порядке:
- Удалите или закомментируйте
[include klipper_macros.cfg]вprinter.cfg. - Удалите конфигурации, связанные с
disable_klipperscreen,enable_klipperscreen,RESTART_KlipperScreen,ENABLE_KlipperScreenвklipper_macros.cfg. - Удалите загруженный каталог скриптов.
Стандартная система:
rm -rf ~/klipper-klipperscreen-manager
Система FlyOS-FAST:
rm -rf /data/klipper-klipperscreen-manager
Если в системе нет других функций, зависящих от gcode_shell_command.py, его также можно удалить. Перед удалением убедитесь, что RUN_SHELL_COMMAND не используется в других макросах.
Метод 3: Поиск электромагнитных помех
Наиболее распространенной аппаратной причиной тайм-аута при хоминге является электромагнитная помеха (EMI). Во время хоминга несколько двигателей движутся одновременно, а сигналы ШИМ-драйверов с большим током создают сильное электромагнитное поле. Если линии связи CAN или USB проложены близко к проводам двигателей или нагревателей, помеховый сигнал наводится на линии связи, что может привести к задержкам связи или, в тяжелых случаях, к разрыву соединения и тайм-ауту.
Характеристики тайм-аута при хоминге, вызванного EMI:
- Прерывистость: Тайм-аут происходит не каждый раз, то появляется, то исчезает.
- Связано с движением: Обычно срабатывает при хоминге или быстром перемещении, в состоянии покоя все нормально.
- Восстанавливается после перезагрузки: После повторного включения питания соединение восстанавливается, но проблема повторяется при печати или хоминге.
Ключевые моменты поиска
Перед тем как прокладывать провода CAN/USB, регулировать экран, включать терминальный резистор или измерять сопротивление между CANH-CANL, полностью выключите принтер и отключите его от источника питания. Не вставляйте и не извлекайте линии связи, не меняйте проводку, не измеряйте сопротивление и не прикасайтесь к клеммам питания под напряжением.
1. Прокладка линий
Разделите линии связи CAN/USB и провода двигателей, нагревателей, стола:
- В кабель-канале выдерживайте расстояние не менее 2-3 см
- Избегайте параллельной прокладки с силовыми линиями, старайтесь прокладывать их пересекаясь
- Для линий CAN используйте витую пару (шаг скрутки не более нескольких сантиметров)
2. Экранирование и заземление
Если используется экранированный кабель:
- Заземляйте экран только на стороне хост-компьютера, со стороны инструментальной платы/MCU оставьте экран неподключенным
- Не заземляйте с обоих концов — это создаст контур заземления, что, наоборот, внесет помехи
- Точка заземления экрана должна быть подключена к контакту GND, обозначенному на шелкографии материнской платы или инструментальной платы; если четкой маркировки нет, обратитесь в службу поддержки. Не разбирайте блок питания самостоятельно и не изменяйте заземление электросети.
3. Терминальные резисторы
- На обоих концах шины CAN должно быть установлено ровно два терминальных резистора по 120 Ом.
- Терминальные резисторы должны быть установлены на физических концах шины, обычно с помощью джамперов на плате, DIP-переключателей или готовых терминальных интерфейсов. Не устанавливайте их самостоятельно на кабель посередине.
- Сначала отключите питание. Мультиметром измерьте сопротивление между CANH-CANL, нормальное значение составляет около 60 Ом (два резистора по 120 Ом параллельно).
4. Заземление машины
- Убедитесь, что принтер использует стандартную трехконтактную розетку, и предпочтительно используйте точку заземления, предоставленную производителем.
- Не разбирайте блок питания, не изменяйте заземление электросети и не прикасайтесь к оголенным клеммам питания самостоятельно; если требуется работа с заземлением, обратитесь в службу поддержки или к квалифицированному электрику.
- Незаземленная металлическая рама принтера действует как большая антенна, усиливая помехи, улавливая шум окружающей среды.
5. Метод проверки
Временная проверка, является ли помеха корневой причиной:
# Снижение скорости печати и тока двигателей
SET_VELOCITY_LIMIT VELOCITY=50
# или временное снижение тока драйвера на 30% для теста
SET_TMC_CURRENT STEPPER=stepper_x CURRENT=0.5
Если после снижения скорости/тока тайм-аут при хоминге исчезает, можно с высокой вероятностью утверждать, что проблема в электромагнитных помехах, и необходимо оптимизировать прокладку проводки и заземление в соответствии с вышеуказанными пунктами.
Более подробную информацию о поиске помех см. в разделе Устранение ошибок CAN - Узел CAN-шины не отвечает.