見出し画像

Klipperでのセンサーレスホーミング

Klipperでのセンサーレスホーミングについて書きました。
また、マニアックな記事になってしまった。。。
間違っている点や不足している部分、誤字脱字などあれば、是非、こっそりご連絡ください。記事をアップデートしていきたいと思います。


センサーレスホーミングとは?

通常は、3DプリンターのXY(AB)モーターの原点検知には、物理的なスイッチを使って検出しますが、端に衝突したときのモーターの負荷を検知(ストール検知)することで原点検知を行う動作のこと。
配線や物理スイッチが減るので、3Dプリンターの組み立てしやすくなるとともに故障箇所が減るメリットがあります。

センサーレスホーミングの条件

  • モータードライバーが、StallGuard 対応の TMC ステッパー ドライバー であること(tmc2130、tmc2209、tmc2660、または tmc5160)

  • MCUとモータードライバのインタフェースがSPI/UARTであること(スタンドアロンモードは不可)

  • MCUと「DIAG」または「SG_TST」ピンの接続が可能なこと
    (MCUボードがジャンパ等でサポートしている必要があります)

センサーレスホーミングの注意事項

機械部品が、繰り返し端に衝突する負荷に耐えられる構造であることが必要です。
Z軸(特にリードスクリュー) は大きな力を発生する可能性があると同時に、精度の問題もあるので推奨しません。
センサーレスホーミングは、中程度のモーター速度で最適に機能するとのことです。非常に低速 (10 RPM 未満) の場合、モーターは大きな逆起電力を生成せず、TMC はモーターのストールを確実に検出できません。さらに、非常に高速では、モーターの逆起電力がモーターの電源電圧に近づくため、TMC はストールを検出できなくなります。

今回使用したボード

今回は、下記の2種類のボードで設定してみました。
Bigtreetech SKR Pico (TMC2209 UART)
Bigtreetech SKR MINI E3 V2.0 (TMC2209 UART)

設定

設定は、X,Y軸同時設定ではなく、一つの軸づつ設定することを推奨します。

ボード側設定

・Bigtreetech SKR MINI E3 V2.0
 ・X -STOPとY-STOPのコネクタを外し、X,Y Endstopスイッチを切る
 ・X-DIAGとY-DIAGのジャンパーをする
  (drag_pin: X軸 ^PC0、Y軸 ^PC1となります)

SKR MINI E3 V2.0

・Bigtreetech SKR Pico
 ・X -STOPとY-STOPのコネクタを外し、X,Y Endstopスイッチを切る
 ・X-DIAGとY-DIAGのジャンパーをする
   (drag_pin: X軸 ^gpio4、Y軸 ^gpio3となります)

Bigtreetech SKR Pico

Klipper側設定

■printer.cfgのステッパーセクション
・endstop_pin:について、virtual_endstopとしてTMCドライバーの設定を指定する必要があります。
・homing_retract_distの値をゼロに設定し、繰り返し連続してホーミング動作を行わないようにします。
・センサレスホーミングを実行する場合、ホーミング速度は重要です。
キャリッジがレールの端に衝突するときにフレームに過度の力がかからないように、ホーミング速度を遅くすることをお勧めします。ただし、TMC ドライバーは、非常に遅い速度でストールを確実に検出することはできません。
ホーミング速度の初期値は、ステッピング モーターが 2 秒ごとに 1 回転するくらいとのことなので、多くのパターンでは、rotation_distance÷2となります。
rotation_distance: 40の場合、下記のような感じになります(以降X軸を例に記載します)

[stepper_x]
rotation_distance: 40
homing_speed: 20
endstop_pin: tmc2209_stepper_x:virtual_endstop
homing_retract_dist: 0
...

■printer.cfgのTMCドライバーのセクション
・hold_currentが設定されていないことを確認する( hold_current が設定されている場合、衝突後モーターが停止し電流を減らすとキャリッジがずれてしまう恐れがあります)
・センサーレス ホーミングのPinをdiag_pin:に設定し、センサー感度の初期値(最大感度255)を設定します。
X 軸の tmc2209 の設定例は次のようになります

[tmc2209 stepper_x]
diag_pin: ^PA1      # Set to MCU pin connected to TMC DIAG pin
driver_SGTHRS: 255  # 255 is most sensitive value, 0 is least sensitive
...

[stepper_x]
endstop_pin: tmc2209_stepper_x:virtual_endstop
homing_retract_dist: 0
...

動作テスト

まずは、ヘッドを中央に移動してから、コンソールから最高感度で設定した状態で、G28 X0してみて、ほとんど動かずに停止してしまうことを確認します。
ここで停止せずに端にぶつかっても動き続けるようであれば、配線か設定が誤っている可能性があります。

SET_TMC_FIELD STEPPER=stepper_x FIELD=SGTHRS VALUE=255
G28 X0

適切なセンサー感度を見つける

VALUE設定の感度を継続的に下げて、ヘッドを中央に移動してG28 X0しながら、正常に動作する最高の感度を見つけます。

SET_TMC_FIELD STEPPER=stepper_x FIELD=SGTHRS VALUE=255
G28 X0

少々手間ですがKlipperのチューニング設定としては、下記のような記載があります。
まず、2つの感度を見つけます。
 maximum_sensitivity:確実にホーミングする最高の感度
 minimum_sensitivity:端に衝突したときにブレる動作のしない最低の感度
推奨される感度を下記計算式で算出します。
 minimum_sensitivity + (maximum_sensitivity - minimum_sensitivity)/3
推奨される感度は、最小値に近い数値となります。
なお、maximum_sensitivityとminimum_sensitivityの間の範囲 が小さい場合 (たとえば、5未満)、ホーミングが不安定になる可能性があります。原点復帰速度が速いほど、範囲が広がり操作がより安定する場合があります。

センサー感度の設定

適切な値を見つけたら、printer.cfgのTMCドライバーのセクションに、driver_SGTHRS:として設定します。

[tmc2209 stepper_x]
...
driver_SGTHRS: 255  # 255 is most sensitive value, 0 is least sensitive
...

設定例

・Bigtreetech SKR MINI E3 V2.0(抜粋)

[stepper_x]
step_pin: PB13
dir_pin: !PB12
enable_pin: !PB14
rotation_distance: 40
homing_speed: 20
endstop_pin: tmc2209_stepper_x:virtual_endstop
homing_retract_dist: 0
...

[tmc2209 stepper_x]
uart_pin: PC11
tx_pin: PC10
diag_pin: ^PC0  # Set to MCU pin connected to TMC DIAG pin
uart_address: 0
driver_SGTHRS: 81  # 255 is most sensitive value, 0 is least sensitive
...

[stepper_y]
step_pin: PB10
dir_pin: !PB2
enable_pin: !PB11
rotation_distance: 40
homing_speed: 20
endstop_pin: tmc2209_stepper_y:virtual_endstop
homing_retract_dist: 0
...

[tmc2209 stepper_y]
uart_pin: PC11
tx_pin: PC10
diag_pin: ^PC1  # Set to MCU pin connected to TMC DIAG pin
uart_address: 2
driver_SGTHRS: 81  # 255 is most sensitive value, 0 is least sensitive
...

・Bigtreetech SKR Pico(抜粋)

[stepper_x]
step_pin: gpio11
dir_pin: gpio10
enable_pin: !gpio12
rotation_distance: 40
endstop_pin: tmc2209_stepper_x:virtual_endstop
homing_speed: 20
homing_retract_dist: 0
...

[tmc2209 stepper_x]
uart_pin: gpio9
tx_pin: gpio8
uart_address: 0
diag_pin: ^gpio4
driver_SGTHRS: 100
...

[stepper_y]
step_pin: gpio6
dir_pin: gpio5
enable_pin: !gpio7
rotation_distance: 40
endstop_pin: tmc2209_stepper_y:virtual_endstop
homing_speed: 20
homing_retract_dist: 0
...

[tmc2209 stepper_y]
uart_pin: gpio9
tx_pin: gpio8
uart_address: 2
diag_pin: ^gpio3												 
driver_SGTHRS: 100
...

ホーミング時のマクロ

ホーミング動作のマクロに下記のような手を加えることをお勧めします。
・センサーレスホーミングが行われると、キャリッジがレールの端に押し付けられ他状態になります。マクロを作成してホーミング動作後、すぐにヘッドをレールの端から離すことをお勧めします。端から離すことにより余計な摩擦を減らしセンサーレスホーミングの誤動作も防ぐことができます。
・センサーレス ホーミングを開始する前に、少なくとも 2秒間マクロを一時停止することをお勧めします。この待ち時間がないとドライバの内部に以前の移動の情報が残っている可能性があります。
・ホーミングの前にそのマクロでドライバ電流(run_current)を設定し、ホーミング後に元の電流に戻す設定するのも良いでしょう。
下記にVoron V0でのマクロ例が載っていますので参考にしてみてください。
(このVoronの例では、待ち時間が1秒、ホーミング中にrun_currentは、0.7Aで書かれています)
Voron - Horming macros

参考までに、run_currentを変更しないシンプルなマクロは下記のようになります。
なおこのマクロは、XY原点が左手前、XYのMAXが、右奥を想定しています。 また、endstop位置(衝突検知位置)は、XYのMAX位置を想定しています。
動作としては、XがMAXに移動して衝突検知をし、そこからXを-10移動させてから、Yの衝突検知をする想定です。

[gcode_macro _HOME_X]
gcode:
    # Home
    G28 X
    # Move away
    G91
    G1 X-10 F1200
    # Wait just a second… (give StallGuard registers time to clear)
    G4 P1000

[gcode_macro _HOME_Y]
gcode:
    # Home
    G28 Y
    # Move away
    G91
    G1 Y-10 F1200
    # Wait just a second… (give StallGuard registers time to clear)
    G4 P1000

[homing_override]
axes: xyz
gcode:
  {% set home_all = 'X' not in params and 'Y' not in params and 'Z' not in params %}

  {% if home_all or 'X' in params %}
    _HOME_X
  {% endif %}
  
  {% if home_all or 'Y' in params %}
    _HOME_Y
  {% endif %}
  
  {% if home_all or 'Z' in params %}
    G28 Z
    G1 Z10
  {% endif %}

最後に

センサーレスホーミングは、一長一短があります。
XY(AB)モーターのエンドストップスイッチが不要になり、配線や物理スイッチが減るのでメリットはありますが、 衝突を検知する仕組み上、あまりホーミングスピードがあげられません。
自分は物理構造をシンプルにするとともに、故障箇所を減らす目的で採用しました。

皆様の参考になれば幸いです。
※設定変更・改造は自己責任でお願いします。

参考

Klipper - Sensorless Homing
Voron - Setting Up and Calibrating Sensorless XY Homing

ここから先は

0字

¥ 100

よろしければ、サポートお願いします。今後の活動費に使わせていただきたいと思います!