【必須設定】ステッピングモーターとエンドストップの設定項目を徹底解説

Klipperを使っている(または使い始めたばかりの)方に向けて、ステッピングモーターとエンドストップの設定について、できるだけわかりやすく解説していきますね。

この記事を読むと、こんなことがわかります:

  • モーターがどうやって動いているのか
  • 設定ファイルの数字が何を意味しているのか
  • 印刷したモノの大きさがズレる原因と直し方
  • エンドストップの配線と設定方法
  • トラブルが起きた時の対処法

初心者の多くは、「サイトに書かれてる設定をそのまま写して動いたらいい」と思いがちですが、機械構造(モーター・ベルト・ネジなど)や使うドライバ・エンドストップ方式(物理スイッチ/センサーレス)で“最適な設定値”は変わります。

設定がズレていると、こんな困ったことが起きます:

  • せっかく作ったモデルのサイズが合わない…
  • ホーミングで軸が変なところまで行っちゃう
  • 動きがガタガタで音もうるさい

だからこそ、「なぜその設定が必要なのか」を理解しておくと、トラブルが起きても自分で直せるようになります。

  1. まず知っておきたい!よく出てくる言葉の意味
  2. モーターってどうやって動いてるの?基本を理解しよう
    1. ステップ角って何?
    2. マイクロステップで動きを滑らかに
  3. ベルトやネジの構造で移動距離が決まる
    1. ベルト駆動の計算方法
    2. リードスクリュー(ネジ)の計算方法
    3. エクストルーダーは実測が必須
  4. Klipperの設定ファイルを理解しよう
    1. ピン番号の調べ方
  5. エンドストップって何?どう設定するの?
    1. なぜエンドストップが必要なの?
    2. エンドストップの種類
    3. 設定の記号(^と!)の意味
    4. エンドストップが正しく動いているか確認する方法
  6. 実際に設定してみよう!軸ごとの設定例
    1. X軸の設定例(ベルト駆動)
    2. Y軸の設定例(ベルト駆動)
    3. Z軸の設定例(リードスクリュー)
    4. Extruderの設定例
  7. 設定したら必ずテストしよう
    1. ステップ1:モーターが動くか確認
    2. ステップ2:エンドストップが反応するか確認
    3. ステップ3:ホーミングをテスト
  8. rotation_distanceをキャリブレーションしよう
    1. X/Y/Z軸のキャリブレーション方法
    2. Extruderのキャリブレーション(超重要!)
  9. よくある疑問に答えます(FAQ)
    1. Q1:ベルト軸とネジ軸、どちらを測定で調整すべき?
    2. Q2:position_endstopにマイナスの値って入れていいの?
    3. Q3:センサーレスホーミングって物理スイッチより信頼できる?
    4. Q4:microstepsを高くしすぎると何が悪いの?
    5. Q5:rotation_distanceとsteps_per_mmの違いは?
  10. トラブルが起きた時の対処法
    1. 問題1:モーターが全く動かない
    2. 問題2:モーターが逆方向に動く
    3. 問題3:ホーミングで反対方向に行っちゃう
    4. 問題4:エンドストップが反応しない
    5. 問題5:印刷物の寸法がズレる
    6. 問題6:Z軸がベッドに衝突する
    7. 問題7:センサーレスホーミングが誤動作する
    8. 問題8:Extruderが詰まる/出すぎる
  11. まとめ

まず知っておきたい!よく出てくる言葉の意味

記事を読み進める前に、よく出てくる専門用語を先に確認しておきましょう。これを知っておくだけで、設定がグッと理解しやすくなりますよ。

GPIO(ジーピーアイオー): マイコンの入出力ピンのこと。モーターやセンサーを動かすための「電気信号の出入り口」だと思ってください。配線を間違えると動かないので、ピン番号は要チェックです。

pull-up(プルアップ)/pull-down(プルダウン): スイッチが押されていない時の電気信号を安定させる仕組みです。pull-upは「電圧を高い方に引っ張る」、pull-downは「低い方に引っ張る」という意味。設定で^というマークを使います。

アクティブLow(ロー): スイッチが押された時に電圧が0Vになる回路のこと。逆に、押されていない時は電圧が高い状態です。設定で!というマークを使って反転させることがあります。

バックラッシュ:ギアやネジの「遊び」のこと。方向を変える時に少しだけズレが生じる現象です。精度に影響するので、できるだけ少ない方がいいですね。

pinout diagram(ピンアウト図): マザーボードの「どのピンが何の役割か」を示した設計図。配線するときは必ずこれを見て確認します。ボードのメーカーサイトや、Klipperの公式GitHubで見つけられますよ。

モーターってどうやって動いてるの?基本を理解しよう

さて、ここからが本題です。まずはステッピングモーターの仕組みから見ていきましょう。

ステップ角って何?

モーターは「カチ、カチ、カチ」って小刻みに動いているんです。この「カチ」1回分の角度をステップ角といいます。

一般的なモーターは1.8°のステップ角を持っています。計算してみると、360° ÷ 1.8° = 200回「カチ」と動いて、ようやく1回転するわけですね。

もっと細かく動くモーターもあって、それが0.9°のもの。これだと400回動いて1回転します。

どっちを選べばいいの?

迷ったら1.8°を選んでおけば間違いないです。理由は簡単で、部品が手に入りやすいし、ネットに情報もたくさんあるから。それに、パワーやスピードも出しやすいんです。

一方、0.9°のモーターは動きが細かい分、Z軸(上下)に使うと層の段差が目立ちにくくなります。「もうちょっと品質を上げたいな」って思ったら、Z軸だけ0.9°に変えてみるのもアリですよ。

こんな感じで使い分けるといいかもしれません:

  • X/Y軸(左右・前後):1.8°で十分
  • Z軸(上下):こだわるなら0.9°
  • 高速で動かしたい:1.8°が安定

マイクロステップで動きを滑らかに

次に「マイクロステップ」という設定について説明しますね。

さっきの「カチ、カチ」という動きを、もっと細かく分割できるんです。例えば16マイクロステップに設定すると、1回の「カチ」を16個の小さな動きに分けて動かせます。

何が良くなるの?

動きがなめらかになって、振動や音が減ります。印刷物の表面もキレイになりやすいですよ。特に低速で動かす時のカクカクした感じが減るので、見た目の品質が上がるんです。

でも注意点もあります

「じゃあいっぱい分割すればいいじゃん!」って思うかもしれませんが、ちょっと待ってください!分割しすぎると、こんなことが起きます:

実は分割数を上げても、機械的な精度がそのまま何倍にも良くなるわけじゃありません。ベルトやネジの誤差、フレームの剛性なんかが関係してくるので、ある程度のところで頭打ちになるんです。

それに、分割数を上げるとマイコンの処理が増えて、ドライバ(モーターを動かすチップ)の発熱も増えます。

おすすめの設定は?

ほとんどの場合、16マイクロステップで十分です。バランスが一番良いんですよ。Z軸だけ品質を上げたいなら32にしてもいいですが、それ以上は正直あまり意味がないかな。

ベルトやネジの構造で移動距離が決まる

次は、モーターの回転が「どれだけの距離」に変わるかを見ていきましょう。これは軸の構造によって変わってきます。

ベルト駆動の計算方法

X軸やY軸でよく使われるのがベルト駆動です。プーリー(歯車みたいなもの)にベルトがかかっていて、モーターが回るとベルトが動く仕組みですね。

計算はシンプルで、プーリーの歯数 × ベルトのピッチ(歯と歯の間隔)です。

例えば、20歯のプーリーに2mmピッチのベルトを使っているなら、20 × 2 = 40mm。つまり、モーターが1回転すると、軸が40mm動くということです。

なぜこの計算式なの?

プーリーが1回転すると、20個の歯が順番に通過していきます。各歯がベルトを2mmずつ進めるので、合計で20 × 2 = 40mmになるわけですね。理屈がわかると覚えやすいでしょ?

リードスクリュー(ネジ)の計算方法

Z軸でよく使われるのがリードスクリュー。ネジを回して上下に動かす仕組みです。

計算式は、リード(1回転で進む距離) × スレッド数(ネジ山の本数)です。

例えば、T8という規格のネジだと、リードが8mmです。スレッド数が1本なら、8mm ÷ 1 = 8mmなので、1回転で8mm進みます。

もしスレッド数が4本(T8×4)なら、8mm ÷ 4 = 2mmになります。スレッド数が多いと、1回転あたりの移動距離は短くなるけど、より細かく動かせるんですね。

エクストルーダーは実測が必須

フィラメントを押し出すエクストルーダーは、計算だけだと正確な値が出ません。理由は、フィラメントが滑ったり、ギアが摩耗したりするから。

だから、エクストルーダーは必ず実測してキャリブレーションする必要があります。これは後で詳しく説明しますね。

Klipperの設定ファイルを理解しよう

下記は Klipperのprinter.cfgの中で、ステッピングモーターやエンドストップに関する「必須またはほぼ必須」の設定項目と、その意味、なぜその値を使うかを初心者にもわかるように説明します。

必須パラメータの意味

パラメータ名説明なぜ必要か/どう決めるか
step_pinモーターを「ステップ」命令するGPIOピンモーターを動かす信号線。間違えると動かない/ノイズの原因になる。
dir_pin動く方向(正転/逆転)を指示するピン方向が逆だと全ての動きが反対になるので、! を付けて反転設定することも。
enable_pinモーターを「オン/オフ」する制御ピン節電やモーターの熱、ノイズ抑制のために動かさないときに切ることがある。通常は「アクティブLow」など論理を理解して設定。
microstepsマイクロステップ設定滑らかな動きとリソース(ドライバや回路の能力)のトレードオフ。多すぎるとトルクが落ちたり遅くなる。
rotation_distanceモーター1回転で進む距離(mm)上記構造×マイクロステップ×モーター全ステップによって決まる。誤差が印刷の精度に直結。公式ドキュメントで計算・校正方法あり。 klipper3d.org+1
endstop_pin原点を検知するスイッチやセンサーのピンプリンターは“どこからスタートか(原点)”を知らないので、ホーミング時にこれが必須。物理スイッチか、センサーレス方式(TMC の診断ピンなど仮想エンドストップ)かで書き方が変わる。公式参照。 klipper3d.org+2Klipper+2
position_endstopホーミングしたときに“ゼロ”として扱う座標値エンドストップが機械の構造上ゼロの位置とは限らない。たとえばノズルがベッドに届くまで一定のギャップが必要な場合などにオフセットをとる。 Voron Documentation+1
position_min / position_maxコマンド可能な移動範囲機械の大きさに応じてこれを設定しないと、スライサーや G-code が機械の可動範囲外を指示してクラッシュする可能性あり。公式ドキュメントでもこれらは必須/推奨とされている。 klipper3d.org+1
homing_speedホーミング動作時の速度遅すぎると時間がかかりすぎ、速すぎるとエンドストップを飛び越えるなど危険。構造によって適切な値を選ぶ。

ピン番号の調べ方

「ピン番号って何?どこで調べるの?」って思いますよね。これ、めっちゃ大事なので説明します。

ピン番号(例:PB13、PC0みたいな)は、マザーボードによって全然違います。だから、「他の人の設定をそのままコピー」すると動かないことが多いんです。

調べる手順:

まず、自分のプリンターに付いているマザーボードの型番を確認してください。例えば「SKR Mini E3 V2.0」とか「Creality 4.2.7」とか。

次に、その型番と「pinout」で検索します。「SKR Mini E3 V2.0 pinout」みたいな感じですね。すると、ピン配置図が見つかります。

もっと確実なのは、KlipperのGitHubにあるサンプル設定を見ること。https://github.com/Klipper3d/klipper/tree/master/config にアクセスすると、いろんなボード用の設定例があります。自分のボードを探してみてください。

エンドストップって何?どう設定するの?

エンドストップは、プリンターにとっての「原点」を教えるための仕組みです。ここをしっかり理解しておくと、トラブルが減りますよ。

なぜエンドストップが必要なの?

プリンターは電源を入れた直後、「今どこにいるか」を知りません。人間で言うと、目隠しされて知らない部屋に立っている感じですね。

だから、ホーミング(G28コマンド)で「原点探し」をするんです。軸がゆっくり動いて、エンドストップのスイッチを押す。「カチッ」って反応したら「ここが原点だ!」って認識するわけです。

原点がわかれば、そこを基準にして座標を計算できるようになります。だからエンドストップは超重要なんですよ。

エンドストップの種類

エンドストップには大きく分けて2種類あります。

物理エンドストップ(メカニカルスイッチ)

小さなスイッチがカチッと押されることで検知する、昔ながらの方式です。メリットは、動作が確実で信頼性が高いこと。設定も比較的簡単です。

デメリットは、各軸ごとに配線が必要なことと、設置スペースを取ることですね。でも初心者には一番おすすめです。

センサーレスホーミング

最近のTMCドライバ(TMC2209など)には、物理スイッチを使わずに原点を検知できる機能があります。モーターの電流変化を見て「ここが端だな」って判断するんです。

メリットは配線がスッキリすることと、見た目がクリーンなこと。デメリットは設定が複雑で、温度や負荷によって誤動作することがある点です。

初心者はまず物理スイッチから始めて、慣れてきたらセンサーレスに挑戦するのがいいと思います。

設定の記号(^と!)の意味

設定ファイルでよく見る^!の記号。これ、最初は「何これ?」ってなりますよね。説明します。

^(キャレット)= pull-up有効

スイッチが開いている時(押されていない時)に電圧を高く保つ設定です。多くのスイッチはこのタイプなので、endstop_pin: ^PC0みたいに書きます。

!(エクスクラメーション)= 信号反転

信号を逆にする設定です。例えば、dir_pin: !PB12って書くと、モーターの回転方向が逆になります。

いつ使うの?

モーターが逆方向に動いちゃった時、dir_pin!を付けたり外したりして調整します。エンドストップの反応が逆の場合も、endstop_pin: ^!PC0みたいに!を追加します。

エンドストップが正しく動いているか確認する方法

設定したら、ちゃんと動いているか確認しましょう。Klipperのコンソールで

QUERY_ENDSTOPS

って打ってみてください。

正常なら、こんな感じで表示されます:

x:open y:open z:open

次に、X軸のスイッチを手で押しながら、もう一度QUERY_ENDSTOPSを実行。すると:

x:TRIGGERED y:open z:open

ちゃんとx:TRIGGEREDに変わりましたか?これなら正常です。

もし押しても変わらなかったり、逆の反応をしたら、設定に!を付けたり外したりして調整してください。

実際に設定してみよう!軸ごとの設定例

では、実際に設定ファイルを書いていきましょう。X、Y、Z、Extruderの順番で見ていきますね。

X軸の設定例(ベルト駆動)

まずはX軸から。横方向に動く軸ですね。

[stepper_x]
# このセクションは、X軸(左右方向)を動かすステッピングモーターの設定です。

step_pin: PB13          # 【必須】モーターに「動け」というステップパルスを送るための信号ピン(GPIOピン)
dir_pin: !PB12          # 【必須】モーターの回転方向を決める信号ピン。
                        #        「!」が付いているため、信号を反転させている(配線やボード側の仕様で逆になったため)
enable_pin: !PB14       # 【必須】モータードライバーの有効/無効を切り替えるピン。
                        #        「!」はアクティブLow(電源オフ)設定を意味し、未使用時のモーターの発熱を抑えます。
microsteps: 16          # 【推奨】1フルステップを16分割して動かす設定。動きが滑らかになり、静音性も向上します。
rotation_distance: 40.0 # 【重要】モーターが1回転したときに、X軸が何mm移動するか(単位: mm)。
                        #        この例では、20歯プーリー x 2mmピッチベルト = 40mmとして計算されています。
                        #        印刷物の寸法精度に直結するため、キャリブレーションで微調整が必要です。
endstop_pin: ^PC0       # 【必須】X軸の原点を検知するエンドストップスイッチの信号ピン。
                        #        「^」はプルアップ抵抗(pull-up)を有効にしていることを示します。
position_endstop: 0     # 【重要】エンドストップが反応した位置を、X座標のゼロ(0)として扱う設定。
                        #        通常、X/Y軸は0ですが、構造によってはオフセットが必要です。
position_min: 0         # 【推奨】X軸が移動できる最小座標(mm)。通常は0です。
position_max: 235       # 【必須】X軸が移動できる最大座標(mm)。この値はプリンターの可動域に合わせて設定します。
                        #        これを超えるとフレームに衝突する危険があります。
homing_speed: 50        # 【推奨】原点復帰(ホーミング)を行う際の移動速度(mm/秒)。
                        #        速すぎるとエンドストップを飛び越えるため、安全な値を設定します。

なぜこの設定なの?

rotation_distance: 40.0は、20歯のプーリーに2mmピッチのベルトを使っているからです(20 × 2 = 40)。

dir_pin: !PB12!は、私のプリンターだと配線の関係で方向が逆になってたので反転させています。ご自身のプリンターでは!が必要ないかもしれません。実際に動かして確認してくださいね。

endstop_pin: ^PC0^は、pull-upを有効にしています。スイッチが開いた状態が普通で、押すとGNDにつながる配線だからです。

homing_speed: 50は、ホーミング速度を50mm/秒に設定しています。この速度は構造によって調整してください。

Y軸の設定例(ベルト駆動)

Y軸も基本的にX軸と同じです。前後方向に動く軸ですね。

[stepper_y]
# このセクションは、Y軸(前後方向)を動かすステッピングモーターの設定です。

step_pin: PB10          # 【必須】モーターに「動け」というステップパルスを送るための信号ピン(GPIOピン)
dir_pin: !PB2           # 【必須】モーターの回転方向を決める信号ピン。
                        #        「!」が付いているため、信号を反転させています。もし動作方向が逆であれば、「!」を外してください。
enable_pin: !PB11       # 【必須】モータードライバーの有効/無効を切り替えるピン。
                        #        「!」はアクティブLow(電源オフ)設定を意味し、モーターを保持トルクでロックします。
microsteps: 16          # 【推奨】1フルステップを16分割して動かす設定。X軸と同じく、動きを滑らかにするための標準的な値です。
rotation_distance: 40.0 # 【重要】モーターが1回転したときに、Y軸が何mm移動するか(単位: mm)。
                        #        この値は、プーリーの歯数とベルトピッチから計算されます(例: 20歯 x 2mmピッチ = 40mm)。
                        #        実際の印刷寸法に影響するため、キャリブレーションが必要です。
endstop_pin: ^PC1       # 【必須】Y軸の原点を検知するエンドストップスイッチの信号ピン。
                        #        「^」はプルアップ抵抗(pull-up)を有効にしていることを示します。
position_endstop: 0     # 【重要】エンドストップが反応した位置を、Y座標のゼロ(0)として扱う設定。
                        #        ベッドの隅を原点とする場合、通常は0です。
position_min: 0         # 【推奨】Y軸が移動できる最小座標(mm)。通常は0です。
position_max: 235       # 【必須】Y軸が移動できる最大座標(mm)。この値はベッドサイズやフレームの物理的な可動域に合わせて正確に設定してください。
homing_speed: 50        # 【推奨】原点復帰(ホーミング)を行う際の移動速度(mm/秒)。
                        #        速すぎるとエンドストップを飛び越える可能性があるため、安全性を考慮した値を選びます。

ピン番号以外は、X軸とほぼ同じ設定になることが多いです。ただし、dir_pin!は軸によって変わることがあるので、必ず動作確認してくださいね。

Z軸の設定例(リードスクリュー)

Z軸は上下方向に動く軸で、リードスクリュー(ネジ)を使うことが多いです。ちょっと特殊な設定があるので注意しましょう。

[stepper_z]
# このセクションは、Z軸(上下方向、ベッドやノズルの昇降)を動かすステッピングモーターの設定です。
# Z軸は特に精度と安全性が重要になるため、他の軸とは異なる設定が多くあります。

step_pin: PB0            # 【必須】モーターにステップパルスを送る信号ピン。
dir_pin: PC5             # 【必須】モーターの回転方向を決める信号ピン。X/Y軸同様、方向が逆なら「!」を付けます。
enable_pin: !PB1         # 【必須】モータードライバーの有効/無効ピン。!PB1でアクティブLow設定です。
microsteps: 32           # 【重要】マイクロステップ分割数。Z軸は層の段差(レイヤーライン)の低減のため、
                         #        X/Y軸(16)より高い32に設定されることが多くあります。
rotation_distance: 8     # 【重要】モーターが1回転したときに、Z軸が何mm移動するか。
                         #        この例では、T8リードスクリュー(リード8mm、1スレッド)を使用している計算です。
endstop_pin: ^PC2        # 【必須】Z軸の原点を検知するエンドストップ(またはZプローブ)の信号ピン。
                         #        「^」はプルアップ抵抗を有効化。
position_endstop: -0.5   # 【極重要】ホーミングしたとき、「Z=0」として扱うオフセット値。
                         #        エンドストップの物理位置と、ノズルがベッドに触れる位置のズレを調整します。
                         #        マイナス値(-0.5mm)は、ホーミング後にノズルをベッドに近づける必要があることを示します。
position_min: -1.0       # 【推奨】Z軸が移動できる最小座標。通常0ですが、-1.0のようにマイナスを許可することで、
                         #        ベッドレベリングやメッシュ補正のための**微調整の余裕**を持たせます。
position_max: 250        # 【必須】Z軸が移動できる最大座標
homing_speed: 10         # 【推奨】ホーミングの1回目の速度(10 mm/秒)。衝突防止のため、X/Y軸より遅く設定します。
second_homing_speed: 3   # 【重要】ホーミングの2回目の速度(3 mm/秒)。1回目の検知後、超低速で再確認することで、ホーミング精度を高めます。

Z軸の特殊なポイント

microsteps: 32にしているのは、Z軸は品質に影響しやすいので、より細かく動かしたいからです。層の段差が減ってキレイになりますよ。

rotation_distance: 8は、T8ネジ(8mmリード、1スレッド)を使っているからです。1回転で8mm進むわけですね。

position_endstop: -0.5がマイナスになっているのがポイント。これは、スイッチが反応する位置と、ノズルがベッドに接触する位置にズレがあるからです。

例えば、スイッチはノズルより0.5mm上にあるとします。スイッチが反応した時点では、ノズルはまだベッドから0.5mm浮いています。だから、「スイッチ位置を-0.5mmとして扱う」ことで、ノズルがベッドに接触する位置をZ=0にできるんです。

position_min: -1.0もマイナスを許可しています。これは、ベッドレベリングで微調整する余裕を持たせるためです。

homing_speed: 10second_homing_speed: 3で、ホーミングを2段階にしています。最初は速めに動いて、2回目はゆっくり慎重に原点を探すわけですね。Z軸は特に衝突が怖いので、こういう設定にしています。

Extruderの設定例

最後はExtruder、フィラメントを押し出す部分です。

[extruder]
# このセクションは、フィラメントを押し出すエクストルーダーのモーターと加熱部分の設定です。
# 押出量(Eステップ)と温度制御(ヒーター、センサー)の両方が含まれます。

step_pin: PB3          # 【モーター】モーターにステップパルスを送る信号ピン。
dir_pin: !PB4          # 【モーター】モーターの回転方向ピン。フィラメントの「押し出し」方向が正しいか確認し、「!」を調整します。
enable_pin: !PD2       # 【モーター】モータードライバーの有効/無効ピン。
microsteps: 16         # 【モーター】マイクロステップ分割数。標準的な16です。
rotation_distance: 33.5 # 【極重要】モーター1回転あたりのフィラメント押し出し量(mm)。
                       #        エクストルーダーは特に実測値とのズレが大きいため、この値は必ず**キャリブレーションで調整**が必要です。
nozzle_diameter: 0.400 # 【寸法】使用するノズルの直径(mm)。スライサーの設定と一致させます。
filament_diameter: 1.750 # 【寸法】使用するフィラメントの直径(mm)。標準の1.75mmです。

heater_pin: PC8        # 【加熱】ホットエンドのヒーター(抵抗)を制御する信号ピン。
sensor_type: EPCOS 100K B57560G104F # 【温度】ホットエンドで使用しているサーミスタ(温度センサー)の種類。
                       #        正確な温度測定のため、使用するセンサーに合わせて設定します。
sensor_pin: PA0        # 【温度】サーミスタからの温度情報を読み取る信号ピン。
min_temp: 0            # 【安全】設定できる最低温度(摂氏)。この温度以下ではプリントが停止します。
max_temp: 250          # 【安全】設定できる最高温度(摂氏)。この温度を超えるとエラー

control: pid           # 【制御】ホットエンドの温度制御方式を指定しています。
pid_Kp: 22.2           # 【PID】比例ゲイン (Kp)
pid_Ki: 1.08           # 【PID】積分ゲイン (Ki)
pid_Kd: 114            # 【PID】微分ゲイン (Kd)

重要な注意点

rotation_distance: 33.5は初期値です。Extruderは必ず実測してキャリブレーションしないといけません。計算だけじゃダメなんです。

キャリブレーション方法は後で詳しく説明しますね。

設定したら必ずテストしよう

設定を書いただけで終わりじゃありません。ちゃんと動くか、確認が必要です。順番に見ていきましょう。

ステップ1:モーターが動くか確認

まずは各軸のモーターが動くかチェックします。Klipperのコンソールで

STEPPER_BUZZ

コマンドを使います。

STEPPER_BUZZ STEPPER=stepper_x

これを実行すると、X軸のモーターが少しだけ前後に動きます。動いたらOK!

Y軸、Z軸、Extruderも同じようにチェックしてください:

STEPPER_BUZZ STEPPER=stepper_y
STEPPER_BUZZ STEPPER=stepper_z
STEPPER_BUZZ STEPPER=extruder

もし動かなかったら?

まず、step_pinが正しいか確認してください。pinout図と照らし合わせましょう。

次に、enable_pin!が付いているか確認。付いてないと、モーターの電源が入らないことがあります。

それでもダメなら、配線が正しいか、電源供給が十分かをチェックしてください。

もし逆方向に動いたら?

dir_pin!を付けるか、逆に外してみてください。それで方向が正常になるはずです。

ステップ2:エンドストップが反応するか確認

次はエンドストップのチェックです。QUERY_ENDSTOPSコマンドを使います。

QUERY_ENDSTOPS

正常ならx:open y:open z:openって表示されます。

次に、X軸のスイッチを手で押しながら、もう一度実行。x:TRIGGEREDに変わったらOKです。

Y軸、Z軸も同じようにチェックしてくださいね。

もし反応が逆だったら?

例えば、スイッチを押してないのにTRIGGEREDになっちゃうとか、押してもopenのままとか。そういう時は、設定に!を付けたり外したりして調整します。

endstop_pin: ^!PC0  # !を追加

ステップ3:ホーミングをテスト

エンドストップが正常なら、いよいよホーミングです。でも、いきなり全軸ホーミングはしないでください。もし設定が間違ってたら、軸がフレームに激突しちゃいます。

安全な手順:

まず、手で軸を軽く押さえながらX軸だけホーミングしてみましょう。

G28 X

正しい方向(エンドストップがある方向)に動いて、スイッチで止まったらOK。もし逆方向に動いたら、緊急停止ボタンを押して、設定を見直してください。

同じようにY軸、Z軸も一つずつテストします。

G28 Y
G28 Z

全部OKなら、全軸ホーミングを試してみましょう:

G28

これで無事にホーミングできたら、基本設定は完了です!

rotation_distanceをキャリブレーションしよう

設定が動くようになったら、次は精度を上げるためのキャリブレーションです。特に重要なのがrotation_distanceの調整。

なぜキャリブレーションが必要なの?

計算で出した値は、あくまで「理論値」です。実際には、こんな誤差が入り込みます:

  • ベルトが少し伸びてる
  • プーリーの実際のサイズが微妙にズレてる
  • ネジのピッチに誤差がある
  • フィラメントが滑る(Extruderの場合)

だから、実際に動かして測定して、値を補正する必要があるんです。

X/Y/Z軸のキャリブレーション方法

ステップ1:テストキューブを印刷

まず、20mm×20mm×20mmのキャリブレーションキューブを印刷します。これはThingiverseなどで無料でダウンロードできますよ。

印刷できたら、ノギスで各辺の長さを測ります。できれば3回測って、平均を取りましょう。

ステップ2:補正値を計算

例えば、X軸が20.2mmになっちゃったとします。20mmのはずが、0.2mm大きい。これを補正しましょう。

計算式はこれ:

新しいrotation_distance = 現在の値 × (指示した距離 ÷ 実際の距離)

具体的に計算すると:

新しい値 = 40.0 × (20.0 ÷ 20.2) = 39.604

ステップ3:設定ファイルを更新

計算できたら、設定ファイルのrotation_distanceを書き換えます。

[stepper_x]
rotation_distance: 39.604  # 補正後の値

保存して、Klipperをリスタートしてください。

ステップ4:再テスト

もう一度テストキューブを印刷して測定します。誤差が0.1mm以内になるまで、この作業を繰り返しましょう。

Y軸とZ軸も同じようにキャリブレーションしてくださいね。

Extruderのキャリブレーション(超重要!)

Extruderは特に重要なので、詳しく説明します。これをサボると、押出量がズレて印刷品質が悪くなるんです。

ステップ1:準備

まず、ノズルを200℃に加熱してください。フィラメントがロードされている状態にします。

次に、Extruderの入口から上に120mmの位置に、油性ペンでマークを付けます。定規を当てて、正確に120mmの位置にしてくださいね。

ステップ2:100mm押し出しテスト

Klipperのコンソールで、こんなコマンドを実行します:

G91
G1 E100 F100

G91は相対座標モード、G1 E100 F100は「100mm押し出せ、速度は100mm/分で」という意味です。

ステップ3:測定

押し出しが終わったら、さっき付けたマークがどこにあるか測ります。

理想的には、120mm – 100mm = 20mmの位置にマークが来るはずです。でも実際には:

  • 22mmの位置にある → 98mmしか押し出せてない(不足)
  • 18mmの位置にある → 102mm押し出しちゃった(過剰)

みたいなことが起きます。

ステップ4:補正計算

例えば、マークが22mmの位置にあった場合(実際は98mm押し出した):

新しいrotation_distance = 33.5 × (100 ÷ 98) = 34.184

逆に、マークが18mmの位置にあった場合(実際は102mm押し出した):

新しいrotation_distance = 33.5 × (100 ÷ 102) = 32.843

ステップ5:設定更新して再テスト

[extruder]
rotation_distance: 34.184  # 補正後の値

保存してリスタートしたら、もう一度100mm押し出しテストをします。誤差が±1mm以内になるまで繰り返してください。

これでExtruderのキャリブレーションは完了です。めっちゃ大事なので、必ずやってくださいね!

よくある疑問に答えます(FAQ)

ここまで読んで、「あれ?これってどうなの?」って思ったことがあるかもしれません。よくある質問をまとめたので、チェックしてみてください。

Q1:ベルト軸とネジ軸、どちらを測定で調整すべき?

答え:基本は計算値でOK、でもExtruderは必ず測定!

ベルト軸(X/Y)は、プーリーの歯数とベルトピッチがわかれば計算で出せます。ベルトの張り具合でちょっと変わることもあるけど、計算値で十分なことが多いです。

ネジ軸(Z)も、リードがわかれば計算でOK。ただし、ネジが摩耗してたり製造誤差があったりする場合は、測定で補正した方がいいですね。

Extruderは、フィラメントの滑りとかギアの摩耗が影響するので、必ず測定で調整してください。これは絶対です。

ちなみに、Klipperの公式ドキュメントでも「X/Y/Z軸は”測って調整”する方法だと精度が十分じゃないことがある」って書いてあります。計算+テストキューブ確認が確実ですよ。

(日本語訳概要) 「注意: X, Y, Z軸タイプのキャリブレーションに『測って調整』方式を使用しないでください。『測って調整』方式はこれらの軸にとって十分な精度がなく、設定を悪化させる可能性が高いです。その代わりに、必要であれば、ベルト、プーリー、リードスクリューのハードウェア測定によってこれらの軸を決定することができます。」

Q2:position_endstopにマイナスの値って入れていいの?

答え:はい、むしろ必要なケースが多いです!

特にZ軸では、マイナス値を使うことがよくあります。理由は、エンドストップのスイッチが反応する位置と、ノズルがベッドに接触する位置が違うからです。

例えば、こんな構造だとします:

スイッチが反応する位置がノズルより0.5mm上にある。この場合、スイッチが反応した時点では、ノズルはまだベッドから浮いています。

だからposition_endstop: -0.5って設定することで、「スイッチ位置は-0.5mm地点だよ」って教えてあげるんです。こうすることで、ノズルがベッドに接触する位置をZ=0にできます。

Voronプリンターなんかでも、デフォルトで-0.5mmを使ってますよ。Ender3でBLTouchを使う場合も同じような設定が必要になります。

position_min: -1.0みたいにマイナス値を許可しておくと、ベッドレベリングで微調整する余裕ができるので便利です。

Q3:センサーレスホーミングって物理スイッチより信頼できる?

答え:一長一短です。初心者はまず物理スイッチから!

それぞれメリット・デメリットがあるので、表にまとめてみますね。

物理スイッチ

  • 信頼性:とても高い
  • 配線:必要(ちょっと面倒)
  • 精度:高い
  • 調整:簡単
  • 温度の影響:ほぼなし
  • コスト:スイッチ代がかかる

センサーレスホーミング

  • 信頼性:設定次第
  • 配線:不要(スッキリ)
  • 精度:やや低い
  • 調整:難しい
  • 温度の影響:あり
  • コスト:ドライバだけでOK

センサーレスホーミングは、TMC2209みたいな対応ドライバが必要です。設定ではdriver_SGTHRSっていう診断閾値を調整する必要があって、これがけっこう難しい。

温度が変わったり負荷が変わったりすると、検知のタイミングがズレることもあります。

初心者には断然、物理スイッチをおすすめします。慣れてきて「もっとスッキリさせたいな」って思ったら、センサーレスに挑戦してみるといいですよ。

Q4:microstepsを高くしすぎると何が悪いの?

答え:滑らかにはなるけど、負荷が増えるんです

「分割数を増やせば増やすほど良い」って思いがちですが、実はそうでもありません。

高くしすぎると、こんな問題が起きます

まず、マイコン(CPU)の処理が増えます。ステップパルスの周波数が上がるので、高速移動する時に処理が追いつかなくなることも。

ドライバの発熱も増えます。電流制御が複雑になるので、冷却が不足してると故障のリスクが高まります。

それに、トルク(回転力)が低下します。フルステップの時が一番トルクが出るので、256分割とかにすると力が弱くなっちゃうんです。

信号線のノイズにも弱くなります。細かい信号ほど、ノイズで誤動作しやすいですからね。

じゃあ、どれくらいがいいの?

ほとんどの場合、16マイクロステップで十分です。X/Y軸は16、Z軸は品質を上げたいなら32にする、くらいがちょうどいいバランスですよ。

それ以上は、正直あんまり効果がないです。

Q5:rotation_distanceとsteps_per_mmの違いは?

答え:Klipperではrotation_distanceを使います

昔のMarlinファームウェアではsteps_per_mmっていう設定を使ってました。「1mm動かすのに何ステップ必要か」っていう考え方ですね。

Klipperではrotation_distanceを使います。こっちの方が直感的で、「1回転で何mm動くか」っていう考え方です。

もし古いsteps_per_mmの値があったら、変換できますよ:

rotation_distance = (モーターのステップ数 × microsteps) ÷ steps_per_mm

例えば:

  • モーター:200ステップ/回転(1.8°)
  • microsteps:16
  • steps_per_mm:80

なら:

rotation_distance = (200 × 16) ÷ 80 = 40.0

Klipperを使うなら、必ずrotation_distanceで設定してくださいね。

トラブルが起きた時の対処法

設定してても、トラブルは起きるものです。でも大丈夫。よくある問題と解決方法をまとめたので、困った時はここを見てください。

問題1:モーターが全く動かない

症状: STEPPER_BUZZを実行しても、モーターがウンともスンとも言わない。音も振動もない。

考えられる原因と対策:

まず、電源供給を確認してください。電源ランプは点いてますか?3Dプリンターは結構電力を食うので、最低でも15Aの電源が必要です。

次に、enable_pinの設定を見直しましょう。!が付いてるか、または逆に付いてちゃいけないのに付いてるか。これを逆にしてみてください。

step_pinが間違ってる可能性もあります。pinout図を見て、正しいピン番号か確認してください。

それでもダメなら、ドライバが故障してるかも。他の軸のドライバと入れ替えてみて、動くかテストしてみましょう。

配線が断線してることもあります。テスターで導通を確認してみてください。

デバッグのコツ:

こんなコマンドを試してみるのもアリです:

SET_STEPPER_ENABLE STEPPER=stepper_x ENABLE=1
STEPPER_BUZZ STEPPER=stepper_x

これらのコマンドは、特にステッピングモーターの初期設定やトラブルシューティングを行う際に、モータードライバと配線が正しく機能しているかを確認するために使用されます。

1. SET_STEPPER_ENABLE コマンド

これは、特定のステッピングモーターの有効/無効状態(Enable/Disable)を直接制御するコマンドです。

コマンドSET_STEPPER_ENABLE STEPPER=stepper_x ENABLE=1
意味printer.cfgで定義されたstepper_xという名前のモーターを有効(ENABLE)にする。
パラメータSTEPPER=...:制御したいステッピングモーターの名前を指定(例:stepper_x, stepper_y)。
ENABLE=1:モーターを有効にする。ENABLE=0無効にする。
目的モーターのenable_pinへの配線や、ドライバチップが正しく動作しているかを確認します。通常、モーターが有効になると、微かな保持トルクが発生し、手で回しにくくなります

2. STEPPER_BUZZ コマンド

これは、特定のステッピングモーターを小さな距離で前後に往復動作させるコマンドです。

コマンドSTEPPER_BUZZ STEPPER=stepper_x
意味stepper_xという名前のモーターを、わずかなステップ数(デフォルトは1mm相当)だけ動かす
パラメータSTEPPER=...:動作させたいステッピングモーターの名前を指定。
目的step_pindir_pinの配線、モータードライバ、そしてモーター本体が物理的に動作可能かどうかを迅速に確認するために使用されます。モーターがカチッとわずかに振動すれば正常です。

STEPPER_BUZZはモーターが動いているか確認するためのコマンドです。モーターを動かすには、まずモータードライバに電源を入れ(有効にし)ておく必要があります。

したがって、この2つのコマンドをセットで実行する一般的な流れは以下のようになります。

  1. SET_STEPPER_ENABLE STEPPER=stepper_x ENABLE=1 で、まずモータードライバの動作を有効化する。
  2. STEPPER_BUZZ STEPPER=stepper_x で、実際にモーターを動かしてみて動作確認をする。

もしSTEPPER_BUZZを実行してもモーターが動かない場合、配線や設定(step_pindir_pin)に問題がある可能性が高いと判断できます!

問題2:モーターが逆方向に動く

症状: G1 X10って命令したのに、右じゃなくて左に動いちゃう。ホーミングも原点と逆方向に行く。

対策:

これは簡単です。設定ファイルのdir_pin!を付けるか、逆に外してください。

# 元々こうだったら
dir_pin: PB12

# こう変える
dir_pin: !PB12

保存してリスタートしたら、もう一度テストしてみてください。

確認方法:

こういうコマンドで確認できます:

G28 X           # ホーミング方向確認
G1 X10 F1000    # プラス方向に動くか
G1 X-10 F1000   # マイナス方向に動くか

問題3:ホーミングで反対方向に行っちゃう

症状: G28 Xを実行したら、エンドストップと逆の方向に動いて、最終的にフレームに激突しそうになる。

対策:

これはhoming_positive_dirっていう設定を追加します:

[stepper_x]
homing_positive_dir: false  # または true に変更

または、エンドストップが最大側(右端や奥側)にある場合は、position_endstopも変更します:

[stepper_x]
position_endstop: 235  # 最大値に設定

問題4:エンドストップが反応しない

症状: QUERY_ENDSTOPSを実行しても、スイッチを押しても、ずっとopenのまま。または逆にずっとTRIGGEREDのまま。

考えられる原因と対策:

まず配線を確認してください。断線してないか、ショートしてないか。意外とこれが原因のことが多いです。

ピン番号が間違ってる可能性もあります。pinout図を見て、endstop_pinが正しいか確認しましょう。

^(pull-up)の設定が必要なのに付いてないとか、逆に付けちゃいけないのに付いてるとか。スイッチのタイプによって変わるので、データシートを確認してください。

信号が逆になってる場合は、!を付けたり外したりします:

endstop_pin: ^!PC0  # !を追加

スイッチ自体が壊れてることもあります。テスターで導通を確認してみましょう。

デバッグ手順:

QUERY_ENDSTOPS          # まず状態確認
# 手でスイッチを押す
QUERY_ENDSTOPS          # 変化を確認

変化がなかったら、設定を見直してください。

問題5:印刷物の寸法がズレる

症状: 20mmのキューブを印刷したのに、20.2mmになっちゃう(または19.8mmとか)。

対策:

これはrotation_distanceを補正すれば直ります。計算式は:

新rotation_distance = 現在の値 × (目標寸法 ÷ 実測寸法)

例1:20mmが20.2mmになる場合(大きすぎ)

新値 = 40.0 × (20.0 ÷ 20.2) = 39.604

例2:20mmが19.8mmになる場合(小さすぎ)

新値 = 40.0 × (20.0 ÷ 19.8) = 40.404

設定ファイルを更新します:

[stepper_x]
rotation_distance: 39.604  # X軸補正
[stepper_y]
rotation_distance: 39.604 # Y軸補正

保存してリスタート、そしてもう一度テストキューブで確認してください。精度が上がるまで繰り返しましょう。

問題6:Z軸がベッドに衝突する

症状: ホーミングしたら、ノズルがベッドにガンガン押し付けられる。このままだとベッドが壊れそう。

対策:

position_endstopをマイナス値に調整してください:

[stepper_z]
position_endstop: -0.5  # マイナス値に調整
position_min: -2.0      # 余裕を持たせる
homing_speed: 5         # 速度も下げておく

安全な調整方法:

いきなりG28 Zはしないでください。まず手でZ軸を10mmくらい持ち上げてから、G28 Zを実行します。

ノズルとベッドの隙間を確認して、position_endstopを±0.1mmずつ調整していきます。

ちょうどいい隙間(紙が少し抵抗を感じるくらい)になったら、その値を保存してください。

問題7:センサーレスホーミングが誤動作する

症状: ホーミング中に、途中で勝手に止まっちゃう。または、端まで行っても止まらない。

対策:

driver_SGTHRSっていう診断閾値を調整します:

[tmc2209 stepper_x]
driver_SGTHRS: 100  # この値を調整

調整の仕方:

途中で止まっちゃう場合は、値を上げます(120、150…)。 止まらない場合は、値を下げます(80、60…)。

50くらいから始めて、G28 Xを実行しながら、±20ずつ調整していきます。軸が端に当たる直前で検知するのが理想的です。

だいたい60〜150の範囲で落ち着くことが多いですよ。

でも正直、センサーレスは難しいです。初心者は物理スイッチの方が確実なので、そっちをおすすめします。

問題8:Extruderが詰まる/出すぎる

症状: フィラメントが全然出ない。または、逆にドバドバ出すぎる。

対策:

まず、rotation_distanceを再キャリブレーションしてください。さっき説明した100mm押し出しテストをもう一度やりましょう。

温度も確認してください:

[extruder]
min_extrude_temp: 170  # 最低押出温度
max_temp: 250          # 最高温度

温度が低すぎるとフィラメントが柔らかくならないし、高すぎると詰まりやすくなります。

ノズルが詰まってる可能性もあります。コールドプル(冷間引き抜き)をやってみるか、ニードルでノズルを掃除してみてください。それでもダメならノズル交換ですね。

pressure_advanceっていう設定も関係することがあります:

[extruder]
pressure_advance: 0.05  # 開始値

これは別途チューニングが必要ですが、押出の精度が上がりますよ。

まとめ

Klipperで高精度な3Dプリントを実現するには、設定例をそのまま使うのではなく、ご自身のプリンターの物理構造に基づいた調整が必須です。

1. 基礎の理解と計算

  • モーターの動作: ステップ角(1.8°または0.9°)とmicrosteps(推奨16)で、動きの細かさを決める。
  • 移動距離: プーリーやリードスクリューの仕様から、モーター1回転あたりの移動距離であるrotation_distanceを正確に計算する。

2. 必須パラメータの設定と安全確認

  • ピン配置: step_pindir_pinをマザーボードのピン配置図に合わせて設定し、STEPPER_BUZZでモーターが動くか確認する。
  • エンドストップ: QUERY_ENDSTOPSで物理スイッチの反応をチェックし、position_endstop(Z軸はマイナスオフセット推奨)で原点を正確に設定する。
  • 方向調整: ホーミングで逆方向に動いたら、dir_pin!を調整する。

3. 精度を極めるキャリブレーション

  • X/Y/Z軸: テストキューブを印刷し、実測した寸法に基づいてrotation_distanceを補正する。
  • Extruder: 必ず100mm押し出しテストを行い、押出量がズレないようrotation_distanceを実測値で調整する。

トラブルが発生しても、配線、ピン番号、そしてrotation_distanceの再調整を徹底すれば、必ず解決できます。常にテストと測定を繰り返し、理想的な印刷環境を構築しましょう。