takashiskiのブログ

覚書の殴り書き

klipperでレベリングを簡単にする

ベッドとノズルの水平を確保するのは非常に大変です。 0.1のシックネスゲージやコピー用紙を動かしながら前後させるのは、姿勢も含めて非常につらかったです。 何より辛かったのが、marlinでノズル位置を変更することでした。

klipperでは、ある程度事前に仕込みをすることでこれらを簡便化することができます。 bed_screwsという設定項目とBED_SCREWS_ADJUSTコマンド、そしてACCEPT/ADJUSTEDでコーナーレベリング相当のものを簡便化することができます。

www.klipper3d.org

レベリングセンサーを使ったベッドレベリング

しかし、bed screwsをあえて使う必要はないでしょう。 いまどき、klipperを入れる人であればBLTouchなどのレベリングセンサーを取り付けた構成が当たり前です。 人間の感覚という不確かなものではなく、レベリングセンサーを使ってある程度精度よくレベリングを自動化する機能がklipperにはあります。

www.klipper3d.org

screws_tilt_adjust

[screws_tilt_adjust]は以下の情報を与える必要があります。

  • ねじの座標(レベリングセンサ位置)
  • 移動時にどれくらい持ち上げてから移動するか
  • 移動速度
  • ねじの種類

これらを適切に設定したあとに以下のコマンドを実行します。

SCREWS_TILT_CALCULATE

すると、指定したねじの座標に対して測定を実施し、その結果を返してきます。 その際に、合わせて基準高さにそろえるにはねじをどう回せばいいかを教えてくれます。 ねじ1が基準高さです。

  • CW/CCWは時計回り/反時計回り
  • nn:mmは時計読み。nn周と、mm/60周させろということ

調整後に再度コマンドを実行して再測定し、基準の高低差に収められていれば完了です。

基準高さはコマンドのオプションとして設定可能です。

SCREWS_TILT_CALCUILATE MAX_DEVIATION=0.01

ねじ位置の決定

これが思いのほかめんどくさかったので私は計算機組みました。エクセルなんかでやってもいいでしょう。

  1. probe offsetが適切に設定されている必要がある
  2. ベッドの原点が適切に設定されている必要がある
  3. できれば設計情報から正確なネジ位置を知る必要がある
  4. 1,2,3を加味した座標を用意する必要がある

理想的な条件は以下です。

  • ベッドの原点と原点からの最遠点がベッドの対角と一致している
  • ヘッドの実可動域が十分に広く、probe offsetだけずらしても原点と最遠点に収まる

実際はそうではないことが多いと思います。

  • 原点は角から何mmか余裕を持たせた内側である
  • リミットスイッチがトリガーされる位置は原点よりも外側である
  • probe位置がノズルから大きくずれているため、いずれかの辺に対してprobeが大きく内側にいることになる

このため、以下の情報を基にベッド座標上でどこであるかを計算する必要があります。

  • 設計情報から読み取れる情報
    • ベッドの実寸
    • ベッドの実寸に対するネジ位置
  • ファームウェア情報から読み取れる情報
    • リミット位置からベッド原点までの距離
    • リミット位置から仮想ベッド原点までの距離
    • 仮想ベッドの寸法
    • probe offset

適切に値を設定・計算できれば、ねじの真上にプローブが来ます。

実際にはprobeの最小位置と最大位置で座標を挟み込んで制限をする必要があります。 余白大きめに設計したcorexyなんかでなければ、だいたいいずれかの辺からはみ出し防止で内側に収めることになるかと思います。

今まで苦労していたのが何だったのか不思議なくらい一瞬でレベリングが終わります。是非試してみてください。