TMC2209交換後エラーで動かない?原因はDiagピン【解決法あり】

TMC2208ステッピングモータードライバーからTMC2209への換装は、プリンターの静音性や性能を向上させる一般的なアップグレードなんですが、TMC2208からTMC2209へ交換した時に、Klipperがエラーを吐いてシャットダウンしてしまいました。

この記事では、通信エラーの根本的な原因エラーメッセージの意味からの具体的な対処法まで、順を追ってわかりやすく解説していきます。

Klipperが教えてくれたエラーメッセージ

TMC2209に交換した後、Klipperの画面にこんなメッセージが出ました。

Klipper reports: SHUTDOWN Unable to read tmc uart 'stepper_z' register IFCNT

日本語訳

Klipperからの報告:シャットダウン TMC UART ‘stepper_z'(Z軸ステッピングモーター)のレジスタ IFCNT を読み取ることができません。

Once the underlying issue is corrected, use the "FIRMWARE_RESTART" command to reset the firmware, reload the config, and restart the host software. Printer is shutdown

日本語訳

根本的な問題が修正されたら、”FIRMWARE_RESTART”コマンドを使用してファームウェアをリセットし、設定をリロードし、ホストソフトウェアを再起動してください。 プリンターはシャットダウンしています。

このメッセージ、一見すると難しそうですが、要はKlipperが「Z軸のドライバーと話せないよ!」と言っているだけなんです。

Klipperは起動する時、各モーターのドライバーに「ちゃんと動く準備できてる?」って確認するんですね。その時に使うのが「UART通信」という方法。これは、ドライバーに電流値や動作モードを指示したり、今の状態を読み取ったりするための”会話”のようなものです。

ところがこのエラーが出ているということは、Klipperがドライバーに話しかけても返事が返ってこない状態。日常でいうと電話をかけたのに相手が出ない感じでしょうか。たまに電波が悪くて「もしもーし」を連発したりしませんか?

今回はレジスタ IFCNTと出ましたが他のにもGCONFというのがあります。これはドライバー内部の情報が書いてある場所の名前ですね。ここが読み取れないということは、そもそもドライバーの存在すら確認できていないということなんです。

なぜKlipperはシャットダウンするの?

「読み取れないだけなら、とりあえず動かしてみればいいじゃない?」と思うかもしれません。でもKlipperは安全第一。ドライバーが制御できない状態でモーターを動かしたら、プリンターが暴走して危険です。だからKlipperは「これ以上は危ない!」と判断して、システム全体を止めてしまうんですよね。

設定ファイル(printer.cfg)をちゃんと書いたのにエラーが出る場合、問題は設定の書き方ではありません。通信の道筋そのものに何か障害が起きている可能性が高いんです。

原因は「Diagピン」!

TMC2209のような賢いドライバーは、UART通信という方法でメインボードやKlipperとおしゃべりしています。

Klipperはプリンターが動き出す前に、「ねえ、君の電流はいくつ?」「動きはスムーズにする設定になってる?」といった設定情報(レジスタ)をドライバーに聞きに行きます。

今回のエラーが出たということは、この「おしゃべり」が途中でブチッと切れてしまった、ということなんです。

Diagピンって何者?

通信エラーの最大の原因、それはTMC2209についている「Diagピン」という小さなピンなんです。このピン、実は悪者ではありません。ちゃんと役割があって付いているんですよ。

原因をズバリ!役割起こったこと
犯人Diagピン(診断ピン)モーターが物にぶつかった(失速した)ことを知らせるためのピン
あなたのプリンター物理スイッチを使用モーターがぶつかったことは、すでに別の物理スイッチで検知している
結果信号のケンカ!本来使わないはずのDiagピンが、ボード上で別の信号線と触れてしまい、UART通信の全体をメチャクチャにしてしまった!

Diagピンの仕事は、モーターが「あれ、動けない!」って失速した時にそれを検知して、メインボードに知らせること。これを使うと、物理的なリミットスイッチなしでホーミングができる「センサーレスホーミング」という機能が使えるようになります。

本来ならセンサーレスホーミングを使いたいからTMC2209に変えるというのが一般的だと思うんですが、私はEnder3にTMC2209を導入しようとしたので、かなりの変態だったかもしれません。

でも、使わない機能なら邪魔になる

ここがポイント。私みたいに物理的なリミットスイッチを使ってホーミングしている3Dプリンターなら、このDiagピンの機能は全く使わないんです。使わないのに付いているから、問題が起きてしまいます。

不要なDiagピンがドライバーソケットの奥で、ボード側の他のピン(特に物理エンドストップの入力ピン)と接触してしまうことがあるんです。すると電気的なノイズが発生して、信号が乱れてしまいます。

この干渉が厄介なのは、複数のドライバーが共有しているUART通信全体に影響を与えてしまうこと。Z軸だけじゃなく、Y軸やX軸のドライバーも巻き込まれて、Klipperはどのドライバーとも話せなくなってしまうんです。

なので、今回私が遭遇したエラーはZ軸についてでしたが、X軸かもしれませんし、Y軸でエラーが出たかもしれません。

調べる方法は

DUMP_TMC STEPPER=stepper_x
DUMP_TMC STEPPER=stepper_y
DUMP_TMC STEPPER=stepper_z

これをコマンドで入力すると、こんな感じで出てくると思います。いろいろ表示されますが、見るべきポイントはこれです。

IFCNT:      0000000a ifcnt=10
GCONF:      000001c0 pdn_disable=1 mstep_reg_select=1 multistep_filt=1
DUMP_TMC STEPPER=stepper_x
=========================================================================
Unable to read tmc uart 'stepper_y' register GCONF
DUMP_TMC STEPPER=stepper_y
=========================================================================
Unable to read tmc uart 'stepper_z' register GCONF
DUMP_TMC STEPPER=stepper_z

正常な出力 (stepper_x の例)

正常に通信が確立できている場合、KlipperはTMCドライバーにアクセスし、すべてのレジスタを正常に読み取ることができます。

  • エラーメッセージがない: 特定のレジスタを読み取れないというエラー(例: Unable to read tmc uart...)が表示されません
  • GCONFレジスタが表示される: ログの最後の方に、GCONF: という行を含め、すべてのレジスタ名と値が正常に表示されます。これは、Klipperとドライバーの間で双方向の「会話」が完全に成立したことを意味します。
正常を示すログの例説明
GCONF: 000001c0 pdn_disable=1...汎用コンフィグ(GCONF)が正常に読み取れています。(最重要)
IFCNT: 0000000a ifcnt=10インターフェースカウンタが読み取れています。
DRV_STATUS: c0190000...ドライバーの状態が読み取れています。

異常な出力 (stepper_y と stepper_z の例)

通信不良やドライバーの物理的な問題がある場合、Klipperは重要なレジスタを読み取れずにエラーを出します。

  • エラーメッセージが表示される: Unable to read tmc uart 'stepper_y' register GCONF のようなエラーが明確に出ます。
  • GCONFレジスタが読み取れない: ログの最後に GCONF: などの行が表示されず、代わりにエラーメッセージが表示されるか、またはQueried registers(読み取りを試みたレジスタ)の一部しか表示されません。
  • Klipperがドライバーの存在を確認できておらず、システムのシャットダウンにつながります。
エラーの有無GCONFの読み取り判断
X軸なし読み取り成功正常
Y軸あり (Unable to read... GCONF)読み取り失敗異常 (通信不良)
Z軸あり (Unable to read... GCONF)読み取り失敗異常 (通信不良、シャットダウン原因)

この部分を見るだけで、X軸はOKY軸とZ軸はNGという状態がすぐに判断できます。この通信エラーが、Diagピンの干渉やソケットの接触不良という物理的な原因によって引き起こされています。

解決策は意外と簡単! Diagピンを切っちゃおう

物理エンドストップを使う構成なら、解決方法はとってもシンプル。邪魔なDiagピンを切り取ってしまえばいいんです。「ドライバーのピンを切るなんて怖い!」と思うかもしれませんが、使わない機能のピンなので全く問題ありません。用意するものはニッパーだけです。

【Diagピン切断の確認】

ドライバーのピンを切り落とす前に、「本当に切っていいの?」という心配がありますよね。それは3Dプリンターが何を使って原点復帰(ホーミング)をしているかで決まります。

ホーミング方法Diagピンの扱い
X軸・Y軸物理スイッチを使う切り落とす
X軸・Y軸センサーレスホーミングを使う残しておく
Z軸・E軸必ず切り落とす

※E軸(Extruder)

手順は次の3ステップ

1. ドライバーを抜く メインボードからTMC2209ドライバーを全部抜き取ります。ドライバーは小さいので、落とさないように気をつけてくださいね。

2. Diagピンをカット ドライバーモジュールの裏側を見てください。ピンが並んでいる端っこの方に、ちょこんと出ているピンがあるはずです。それがDiagピン。これをニッパーで根元からカットします。できるだけ短く切ると、後で邪魔になりません。

3. しっかり挿し直す 全部のドライバーのDiagピンを切ったら、ドライバーをソケットに戻します。ここで大事なのは、真っすぐ垂直に、しっかりと押し込むこと。斜めに入れたり、浮いた状態だと接触不良の原因になります。

これだけで、通信エラーが解決することが多いんです。FIRMWARE_RESTARTを実行して、G28などの簡単な動作チェックをして、Klipperが正常に起動すれば大成功です!

その他の注意点もチェックしておこう

Diagピンの問題を解決できたら終わりではありません。TMC2209を使う上で、つまずきやすいポイントがあといくつかあります。

TMC2209 V1.3を使っている人は要確認

もし使っているのがTMC2209の初期バージョン(V1.3など)なら、Diagピンを切るだけでは不十分かもしれません。

ドライバーモジュールの裏面に「PDN/UART」と書かれた小さなパッド(金属部分)があるはずです。ここが、はんだでショート(つなげる)されているか確認してください。もしつながっていなければ、はんだ付けが必要です。これがないとUART通信自体が有効にならないんですよね。

最近のTMC2209は最初からショートされていることが多いですが、古いバージョンを使う場合は念のため確認しましょう。

たぶんですが、私が買ったTMC2209ドライバーはTMC2209 v1.3でしたが、最初からショートされていたものかもしれません。原因を調べたときに出てきたんですけど、この問題は起きませんでした。

XY軸がガタガタ震える時の対処法

通信エラーが解決しても、Y軸が動く時にカクカクと振動する場合があります。これは「共振」という現象で、モーターの物理的な特性によるもの。TMC2209特有の問題ではないんですが、気になりますよね。

この振動を減らす良い方法があります。Klipperの設定で、Y軸のマイクロステップ数を変更するんです。マイクロステップというのは、モーターの1回転を何分割して制御するかという設定。細かく分割すればするほど滑らかに動きます。

具体的には、printer.cfgの[stepper_x]、[stepper_y]セクションで、マイクロステップを16から32に変更してみてください。

[stepper_x or y]
microsteps: 32
rotation_distance: 40

さらに、[tmc2209 stepper_x]、[tmc2209 stepper_y]セクションでは、interpolateをFalseに設定します。

[tmc2209 stepper_x or y]
interpolate: False

interpolateというのは、ドライバー側でさらに細かく分割する機能なんですが、マイクロステップを32に設定した時は逆効果になることがあるんです。Falseにすることで、より素直な動きになります。

この設定変更で、Y軸の振動がぐっと減って、滑らかに動くようになるはずです。

将来センサーレスホーミングを試すなら

今は物理エンドストップを使っているけれど、将来的にセンサーレスホーミングを試してみたいという人もいるかもしれません。その場合、Diagピンの扱いが変わってきます。

センサーレスホーミングを使う軸(通常はX軸とY軸)では、Diagピンは切らずに残しておきます。このピンがないと、失速検知ができませんからね。

一方、センサーレスホーミングを使わない軸(Z軸やE軸)では、今回説明した通りDiagピンを切断します。Z軸は物理スイッチやプローブでホーミングすることが多いですし、押出機(E軸)はそもそもホーミングしませんから。

まとめると、こんな使い分けになります。

  • X軸・Y軸: センサーレスホーミング用なのでDiagピンは残す
  • Z軸・E軸: 物理スイッチ使用なのでDiagピンは切断する

まとめ

TMC2208からTMC2209へのアップグレードですが、最初はトラブルに見舞われても、Diagピンの問題さえクリアすれば、あとはスムーズです。

今回のポイントをおさらいすると:

  • 通信エラーの原因: 不要なDiagピンによる信号干渉
  • 解決方法: 物理エンドストップを使うならDiagピンを切断
  • 古いバージョン使用時: PDN/UARTパッドのショートを確認
  • Y軸の振動対策: マイクロステップを32に変更
  • センサーレスホーミング: 使う軸はDiagピンを残す

TMC2209は、正しく設定すればTMC2208よりも静かで、より細かな制御ができる優れたドライバーです。この記事で紹介した対策を試せば、きっとプリンターも快適に動き出すはずです。