51,227 total views, 4 views today
モータードライバのTMC2130やTMC2209では、センサーレスホーミングに対応しているということなので、試してみた。
ホーミング(原点復帰)
3DプリンターのX軸キャリッジとY軸キャリッジはそれぞれの原点を基準として、あらかじめ定められた範囲内(ベッドの各辺の長さ)を移動することになる。
これらの原点は、その位置に取り付けた何らかのセンサー(機械式スイッチ、光電センサなど)により検出される。
原点を検出するために、各軸を原点位置まで移動させるのがホーミング(原点復帰)である。
センサーレスホーミング
TMC2130では、StallGuardいうモーターの負荷検出機能を用いることで、センサーなしに原点位置の検出を行うことができるようになっている。
例えば、X軸キャリッジを移動させた際、原点位置まで到達すると、それ以上移動することができないため、モーターには移動時に掛かっていた負荷よりも高い負荷が掛かることになる。
センサーレスホーミングでは、StallGuardによりモーターの負荷の変化が検出された時点でモーターの動作を停止させることで、センサーなしのホーミングを実現している。
センサーレスホーミングの実際
動画を見てもらえばわかる通り、X軸・Y軸ともにリミットスイッチからボード上のエンドストップピンへの配線がない状態で、ホーミングできている。
なお、もともとのエンドストップ用リミットスイッチを取り外さずにそのまま取り付ているが、これはホーミング時の衝撃緩衝用として残しているものである。
センサーが原点位置にある場合と異なり、センサーレスホーミングの場合、障害を検知するごとにモーターが停止する。
まだベータ機能ではあるが、Marlin-bugfix-2.0.xではTMC2130に限り、モータードライバからエンドストップ用のピンへの配線なしにセンサーレスホーミングが有効となる「SPI ENDSTOPS」の機能が用意されている。
このモードのメリットは、配線が多少すっきりすることである。
TMC2130の配線
私が使用したTMC2130はBIGTREETECHのV3.0(SPIバージョン)である。
Smarter Shopping, Better Living! Aliexpress.com
また、メインボードには、同じくBIGTREETECHのSKR V1.3を使用した。
Smarter Shopping, Better Living! Aliexpress.com
配線は、ジャンパーワイヤーをTMC2130の DIAG1ピンから、
メインボードのエンドストップのピンのうちSピンへと繋げる。
※SPI ENDSTOPSを有効にする場合、TMC2130のDIAG1ピンとメインボードのエンドストップピンをつなぐ必要はない。
なお、ボードにBigtreetechのSKR1.3を使用する場合、TMC2130のSPIモードでは、ジャンパーピンを画像の通りに取り付ける。
Marlin-bugfix-2.0.xの設定
Marlin-bugfix-2.0.xセンサーレスホーミングを有効にするための設定について書いておく。
Configuration.hの設定
ENDSTOPPULLUPS
- //#define ENDSTOPPULLUP_XMIN → #define ENDSTOPPULLUP_XMIN
- //#define ENDSTOPPULLUP_YMIN → #define ENDSTOPPULLUP_YMIN
ENDSTOP_INVERTING
- #define X_MIN_ENDSTOP_INVERTING false → #define X_MIN_ENDSTOP_INVERTING true
- #define Y_MIN_ENDSTOP_INVERTING false → #define Y_MIN_ENDSTOP_INVERTING true
Configuration_adv.hの設定
HOME_BUMP
エンドストップ到達後の再ホーミングをなくす。
- #define X_HOME_BUMP 5 → #define X_HOME_BUMP 0
- #define Y_HOME_BUMP 5 → #define Y_HOME_BUMP 0
SENSORLESS_HOMING
センサーレスホーミングを有効にする。
- //#define SENSORLESS_HOMING → #define SENSORLESS_HOMING
STALL_SENSITIVITY
X軸とY軸のセンサーレスホーミングの感度を設定する。
感度が低すぎると、原点到達時にモーターが停止せず、感度が高すぎると、原点到達前にモーターが停止してしまう。
- #define X_STALL_SENSITIVITY 8 → #define X_STALL_SENSITIVITY 20
- #define Y_STALL_SENSITIVITY 8 → #define Y_STALL_SENSITIVITY 18
センサーレスホーミングの感度調整
LCDメニューによる感度調整
Marlinファームウェアでセンサーレスホーミングを有効にすると、LCDメニューにセンサーレスホーミングの感度設定の項目が追加されるので、そこから感度の調整を行うことができる。
「Configuration」→ 「Advanced Settings」→ 「TMC Drivers」→ 「Sensorless Homing」
ターミナルによる感度調整
LCDメニューからでも調整することはできるが、この方法では値を変更するごとに、ホーミングの項目と感度調整の項目とをいちいち行ったり来たりしなければならない。
これはあまりにも面倒なので、ターミナルから直接G-codeを指定して調整するほうが効率的である。
ターミナルに接続して、次の手順により感度調整を行う(X軸の場合)。
- M914 X? (感度の入力※)
- G1 X0(Xホーミング)
- 最適な感度になるまで値を変えながら手順1と手順2を繰り返す
- M500(感度の設定を保存)
※?には-64~63の間の任意の整数が入り値が小さいほど高感度となる
Y軸についても同様の手順で感度調整を行う。
SPI_ENDSTOPS
配線を極力減らしたいというような場合に有効にする。
なお、この機能はTMC2130限定のものでTMC2209やTMC5160などでは有効にできない。
- //#define SPI_ENDSTOPS → #define SPI_ENDSTOPS
まとめ
- TMC2130でセンサーレスホーミングを試した。
- センサーレスホーミングを有効にすると配線が多少すっきりする。
- さらに配線が少なくなるSPI ENDSTOPSも試してみた。
コメントを見る (2)
質問させてください
https://terutakke.com/wp-content/uploads/2019/09/P1060164.jpg
このパターンの配線だと感度の設定はできなくてもファームの設定無くエンドストップを無くすことができるのでしょうか?
当方Lerdgeボードを使用しているのでSPIモードの設定ができないのです。
ファームウェアで感度の設定をしないことにはエンドストップとしてまともに機能しないので、配線だけつないでも意味がないと思います。
LerdgeのボードはモーターのSPIモードやUARTモードに対応していないのが残念ですが、タッチパネルからステップ数など様々な項目を直接設定できるのはいいですよね。