Klipper ホーミングタイムアウト問題
問題の説明
ホーミング中に通信タイムアウトエラーが発生します:
Error during homing z: Communication timeout during homing
この問題は、複数のMCUを使用したZ軸ホーミングシナリオでよく見られます。ホーミング中にホストの負荷が高い場合や、複数のMCU間の通信応答が不安定な場合にタイムアウトが発生する可能性があります。
- Klipperが正常にインストールされ、起動できることを確認してください。
- 現在のユーザーがKlipperインストールユーザーであることを確認してください。
- 以下のコマンドのパスが実際のシステムと一致することを確認してください。
- Klipperソースコードを修正したりスクリプトを追加する前に、関連ファイルをバックアップすることをお勧めします。
- タイムアウト時間の調整
- KlipperScreenの管理
- 電磁干渉の調査
方法1:タイムアウト時間の調整
この方法はKlipperのソースファイル mcu.py を直接変更します。ホーミングタイムアウト問題の確認のみに推奨されます。Klipperを更新するとこの変更は上書きされる可能性があります。問題が解決または検証された後は、デフォルト値に戻すことを推奨します。
まず元のファイルをバックアップします:
cp ~/klipper/klippy/mcu.py ~/klipper/klippy/mcu.py.bak
Klipperの TRSYNC_TIMEOUT を変更します:
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、スクリプトディレクトリ、およびマクロ設定を追加します。現在のシステムでシェルコマンドの使用が許可されていること、およびスクリプトパスが実際のインストールパスと一致していることを確認してください。
必須ファイルのダウンロード
標準システム:
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設定ディレクトリに
klipper_macros.cfgファイルを作成します。 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インターフェースを一時的に停止してシステムリソースを解放し、CPU負荷を低減することで、ホーミング中の通信タイムアウトを減少させます。
復元方法
この方法が不要になった場合は、以下の順序で復元します:
printer.cfgから[include klipper_macros.cfg]を削除またはコメントアウトします。klipper_macros.cfgからdisable_klipperscreen、enable_klipperscreen、RESTART_KlipperScreen、ENABLE_KlipperScreenに関連する設定を削除します。- ダウンロードしたスクリプトディレクトリを削除します。
標準システム:
rm -rf ~/klipper-klipperscreen-manager
FlyOS-FAST システム:
rm -rf /data/klipper-klipperscreen-manager
システム内に gcode_shell_command.py に依存する他の機能がない場合は、このファイルも削除できます。削除する前に、他のマクロが RUN_SHELL_COMMAND を使用していないことを確認してください。
方法3:電磁干渉の調査
ホーミングタイムアウトの最も一般的なハードウェア原因は、電磁干渉(EMI) です。ホーミング中は複数のモーターが同時に動作し、大電流のPWM駆動信号が強力な電磁界を発生させます。CANやUSBの通信線がモーター線やヒーター線の配線に近接している場合、干渉信号が通信線に結合し、軽度では通信遅延、重度では接続断絶によるタイムアウトを引き起こします。
電磁干渉によるホーミングタイムアウトの特徴:
- 断続的:毎回タイムアウトするわけではなく、良好な時と悪い時がある。
- 動作に関連:通常はホーミングや高速移動時に発生し、静止時は正常。
- 電源再投入で復旧:再起動後は正常に接続できるが、印刷やホーミング時に問題が再現する。
調査のポイント
CAN/USBケーブルの整理、シールド層の調整、終端抵抗の有効化、またはCANH-CANL間の抵抗測定を行う前に、プリンターの電源を完全にオフにし、電源ケーブルを抜いてください。通電状態で通信線の抜き差し、配線変更、抵抗測定、電源端子への接触を行わないでください。
1. 配線レイアウト
CAN/USB通信線をモーター線、ヒーター線、ヒートベッド線から分離して配線します:
- ケーブルキャリア内では少なくとも2~3cmの距離を保つ
- 強電線と平行に配線せず、可能な限り交差配線する
- CAN線はツイストペア線(より対線)を使用する(ピッチは数cm以内)
2. シールド接地
シールド線を使用する場合:
- ホスト側でのみ片端接地し、ツールボード/MCU側のシールド層は浮かせて接続しない
- 両端接地しない – グランドループが形成され、かえって干渉を誘発する
- シールド層の接地点は、マザーボードやツールボード上にシルク印刷で示されたGNDピンに優先的に接続します。明確な表示がない場合は、サポートに問い合わせてください。電源の分解や配電盤のアース線の改造は行わないでください。
3. 終端抵抗
- CANバスの両端には、必ず2つの120Ω終端抵抗のみが存在する必要があります
- 終端抵抗はバスの物理的な末端に取り付ける必要があります。通常は基板上のジャンパーピン、ディップスイッチ、または専用の終端インターフェースを使用して有効化し、ケーブルの中間部分に改造して取り付けないでください
- 電源を切ってから作業してください。マルチメータでCANH-CANL間の抵抗を測定すると、通常は約 60Ω(120Ωの並列)になります
4. プリンターの接地
- プリンターが規格に準拠した3極コンセントを使用していることを確認し、メーカー提供の接地点を優先的に使用してください
- 電源の分解、配電盤のアース線の改造、または露出した電源端子への接触は行わないでください。接地の処理が必要な場合は、サポートまたは専門の電気技師に連絡してください
- 接地されていないプリンターの金属フレームは、あたかも大型アンテナのように機能し、周囲のノイズを拾って干渉を増幅します
5. 検証方法
干渉が根本原因であるかどうかを一時的にテストします:
# 印刷速度とモーター電流を低減
SET_VELOCITY_LIMIT VELOCITY=50
# または駆動電流を30%一時的に下げてテスト
SET_TMC_CURRENT STEPPER=stepper_x CURRENT=0.5
速度/電流を下げた後にホーミングタイムアウトが発生しなくなった場合、基本的に電磁干渉の問題であると確認できます。上記のポイントに従って配線と接地を最適化する必要があります。
干渉に関する詳細な調査は、CAN エラー調査 - CAN バスノードが応答しない を参照してください。