ALUNAR-M508オートレベリング化まとめ:後編

最終更新日

オートベッドレベリング(以下ABL)の設定・調整、Configuration.hの全般的な書換についての覚書後編です1)以下の手順についてはChris Rileyさんの動画が参考になりました。。前提として、2つ前の記事1つ前の記事にもとづいたABL対応M508用Marlinファームウエア(Marlin version 1.1.8)がアップロード済み、とします。

はじめに

長々と記事を連ねて、「ABL化にこだわって、いったい何がお得なの?」という疑問が出ます。

あれこれやっていて、3つのお得感をアピールできるのではないか、考えるようになりました(ホントはやりたかったからやっただけでありますが。)。

(A)ベッドの水平調整をセンサーの測定値をもとにして行うことができる。

(B)3Dプリンタユーザの関心の一つである「ベッドとノズルの隙間設定」が楽になる。

(C)そして、ABLができる。

つまり、近接センサーをつけたお陰でデジタル測定が可能になりABL用のデバック情報を得られ、結果、各種設定が楽になるということになります。(C)のようなABLをつかったプリントアウトをしないとしても2)2018/06/08追記注:実際、ABLを使って幸せになるのは、(1)制作上かなり広い面積を使う必要があり、(2)ベッドの水平がかなりの精度で確保されており、(3)計測点がかなり多い、という「かなり」なケースの気がしています。(3)などはUnified Bed Levelingでないとあんまり使い物にならないのではないだろうかと思いますし、Z軸移動精度が追い込まれていないと効果のほどは??。などと疑問がでてきます。ABL環境を確保すること自体に効用があるわけです。別言すれば、オフセット値をセンサーを装着したままその都度確認、設定できる近接センサー環境の確保こそが、(すくなくともわたしにとっては)一義的な気がします。

プリンタ初期化とデバッグモード

プリンタ電源を入れます。コントロールソフトウエアを立ち上げます。

おもむろにM111 S32 コードを発行しABLデバッグをONにします。

なお前の記事で書き忘れましたが、このデバッグを有効にするためにはConfiguration.hの

//#define DEBUG_LEVELING_FEATURE

をコメントアウトしておく必要があります。

物理調整

センサーの物理位置決め

センサーの物理位置を器械的に調節します。

G28コマンドを発行してホームポジション(XY軸的にはベッドの真ん中)にノズルを持っていきます。

次にノズル先をベッドに接触させます。といってもベッドにあたるのはいやなので、接触してないテキトーなところで折り合いをつけます。

Z軸のボルトを手でぐるぐる回してもいいですけど、Z軸の両端水平を手動で歪ませることもないでしょうから、ソフト的にモータまかせで移動したほうがいいと思います。

次にセンサーのボルトを緩めてベッドを感知する位置に持っていきます。下図でいえば、感知が開始する地点をAとします。

さらにベッドを確実に感知するだろうと確信できる場所をBとします。身体感覚的なものです。

そしてセンサーをこのBで固定します。Bは1mm以上は確保しておきたいところです。ベッドに定着したフィラメントに絶対に当たらないだろうという間隔です。

使っているのは8mmが公称値のセンサーです。前の記事で書いたように素でのテストだと7mmぐらいで感知しましたが、実装した場合は4ミリ(A位置)ぐらいが最大幅でした。4mm規格のセンサーでやった場合はもうちょっとシビアに考えなければいけなかったところかもしれません。

ベッドの水平調整

つぎにベッドの水平を出します。目視・ダイヤルゲージ・水準器を使ってもいいでしょう。

でも、センサー感知がすでに出来ていますので、Gコードによる数値計測に頼るのが楽です。

G28を発行した後、G29(オートレベリング)命令を与えます。

G29処理が終了すると、下のように9点の場所でのセンサー・ベッド間の距離情報が表示されます。

 

0 1 2
0 +0.500 +0.512 +0.452
1 +0.125 +0.148 +0.137
2 -1.050 +1.003 +0.020

マトリクスの0,1,2は左右・手前奥を表しています。

この絶対値には意味がありません(たまたま上の例では0近辺に数値があつまってますが、+2.4とかでも問題なしです

目標は各点の相対差をなくすことです。G29を繰り返し発行しながらベッド四隅のボルトを動かしたり、Z軸ボルトのガタツキを直したりします。何度か調整すると

0 1 2
0 -0.120 -0.080 -0.075
1 -0.140 -0.110 -0.085
2 -0.133 -0.115 -0.033

程度にはなってくれます。

ベッドが一番低い0.1座標が-0.140で、一番高い2.2座標が-0.033です。

最大0.1mm強の差に収まっているのでOKとします。

調整中の動作事故、あるいはオートレベリングが効かない(あるいは効かせない)状態でノズルがベッドと干渉したりフィラメントの空中浮遊を見つめ続けるような事態を避けるために、ここは少し頑張っておきます。

以上、ネジ回しが必要な器械的調整はこれで終わりです。以後はソフト的調整だけで対処します。

というわけで、禊のためにプリンタのリセットボタンを押します。

ソフト調整

Z_PROBE_OFFSET_FROM_EXTRUDERについて

センサーとノズル位置の関係

ABLでは、「ノズル先端とZ軸センサー(プローブ)の距離」が、正確にわかっていなければなりません。Configuration.hのZ_PROBE_OFFSET_FROM_EXTRUDER定数の値はその距離のことです。

その距離をイメージする場合、リミットスイッチをセンサーとして採用した場合を考えると、直感的に理解できます。

ノズルより先に筐体に物理接触するのがユーザに見えるタイプのセンサーなので、下図のように矢印両端がそのオフセット値となります。

今回使用した近接センサーの場合は、リミットスイッチのような物理接触を視認できません

頭ではわかっていても、物理的な意味でのセンサー先端が接触先端とわたしなどは勘違いしてしまうのです。

この勘違いをしないように、最初の図を書き換えてみます。

センサーを調整固定した時の先端とノズルの先端との距離をBとします。

固定調整済みセンサーが最初にベッドに感知する場所をAとした場合、A-B=Xがオフセットの絶対値となります。センサー先端がノズル先端よりもZ軸の下に行っているので、オフセットはマイナス値となります。つまりB-Aがオフセット値となります。


いずれにせよ、センサーの種類を問わず、この値を正確に得るために、G28 (オートホーム命令)と G29 (ABL命令)に頼ることになります。

センサー(プローブ)オフセット値とABL機能時のホームポジションの関係

手順を記す前に、Z_PROBE_OFFSET_FROM_EXTRUDERの機能について覚書しておきます。わかった気になっている今のうちにメモしておかないと忘れちゃうので・・。

さて、デフォルトではZ軸ノズルとベッドの距離は、Z軸センサーとノズルの間の距離(クリアランス)を示すZ_CLEARANCE_DEPLOY_PROBEの値に左右されて一意的に決まります。値は10mmで、今回もその部分は変更はありません。

ALUNAR-M508のような機種の場合、Z軸のリミットスイッチが入る場所がノズル先端が止まる座標ですから、それをベッドから0.1mmだけ離れた部分でスイッチが入るようにスイッチ・ノズル間距離を手動調整してネジで固定しましょう、というだけなので、なにも気にする必要はありません。つまりソフトウエア的には変更せず器械的に調整しましょうというだけです。

一方、近接センサーを使った場合、センサー位置を器械的に微調整するのが厄介だし、ABLを使うとベッドとセンサーの隙間距離が場所によって変化するわけなので、それをソフトウエア的に対応するための補助数値がZ_PROBE_OFFSET_FROM_EXTRUDERの値(オフセット値)というわけです。

ABLが実際動作すると、最初のZ座標を基準(前提)として、さらに測定点に対する修正値を割り出します。そして、プリンタは再修正値に基づいてフィラメントを撒き散らすわけです。ああ、ややこしい。

Z_PROBE_OFFSET_FROM_EXTRUDER値の取得

物理的にベッドの(なんちゃって)水平が出ている、という前提で以下書きます。

G28,G29の発行

まずM502を発行しておきます。これはアップロードされているファームウエアの設定を読み込むコマンドです。これ以前にEEPROMに別の設定をしている場合、その設定が自動に読み込まれているはずなので、間違いがないようにします。初期設定近辺の作業では、M502を発行したあとM500(書き込み)をする癖を付けておくのがいいと思います。

G28でホームポジションにヘッダを動かします。なおM114コマンドをこまめに発行してXYZ座標を確認するようにしてください。この時点では、Z軸が10になっているはずです。というのも、この時のConfiguration.hの定義ではZ_PROBE_OFFSET_FROM_EXTRUDERの値は0でZ_CLEARANCE_DEPLOY_PROBE(10mm)の定義がそのままZ軸のホームポジション位置になっているからです。

G29でABLします。動作が終わると、Z軸オフセット値が修正されてZ軸の位置が変わっているはずです。

 

G1 X 115 Y100 F1500の発行

さて、XY軸をホーム位置(センター)に戻します3)ここでいうセンターはG29測定時の中央座標のことです。現在のわたしの設定ではX115 Y100となっています。。位置をM114で再確認します。

Z軸を慎重に下ろす。

ここからZ軸をベッドの方に下ろしていくわけです。ソフトの矢印ボタン、コントロールダイヤル、GコードいずれでもOKです。

例えばG0 Z0を発行すると、ノズルとベッド間がオフセット分空いた場所でZ軸が止まるはずです。

ここから目標とする位置までZ軸を0.1mm以下の単位で下ろしていきます。通常の目標位置といえば、ベッドに紙を一枚置いた近傍にノズルが接する位置ということになります。

当然、Z軸は0.00以下のマイナス値になりますが、もしZ軸がそれ以上降りないという場合は、Configuration.hのMIN_SOFTWARE_ENDSTOPSがコメントアウトされているかどうか角煮、もとい確認してください。これがデフォルトのままだと不慮の事故を避ける為にZ軸は0以下には移動しません。

ただし次の方法を使えば、MIN_SOFTWARE_ENDSTOPSを有効にしないでも測定できます。

ノズルとベッドの隙間の確保のしかた

ノズルとベッドの間が0.1mm空くのが新たなZ軸のホームということになります。

0.1mmの隙間をあけるために紙を挟んだり、テーパーゲージを噛ませたりするのはなかなかつらく大変ですし、すでにセンサーでの測定値を取得可能なのですから、もっと幅のある素材を使っていいわけです。

たとえば2mm直径のドリル軸を使ったり、

3mmのアクリル板を使ったりします。

3mmアクリル板で測定した場合は、次のような位置でノズルがつっかえます。

上で、「つっかえる」と書きましたが、0.1mmのような紙なんかよりは、一定の幅のあるドリル軸やアクリル板をスペーサーとして使ったほうが、身体的感覚として、ギャップや引っかかりを感じやすいので、こちらの方をわたしは好みますし、なによりも、ノズルがベッドに絡むことが少ないので安心です。

上のログは3mmのアクリル板を使ってZ軸を密着させたものです。Z軸座標が1.83mmとなっているので1.83mm  – 3mm = -1.17mmが実際のZ軸オフセット値となります。

これに0.1mmの隙間が必要ですから、-1.07mmがオフセット値となります4)だたし、ABLでの再修正値がない場合。

Configuration.hにZ_PROBE_OFFSET_FROM_EXTRUDER値を設定する

あとは上で得られた-1.07をZ_PROBE_OFFSET_FROM_EXTRUDERに加え、Marlinをコンパイルしなおしアップロードします。

なお、値決めに関しては、ノズルとベッドを加熱して数値を再取得し、非加熱状態の数値と塩梅してZ_PROBE_OFFSET_FROM_EXTRUDER値を決めるというやり方があります5)これはChrisさんの動画で実例を見ることができます

何度かテストしました。結果、加熱・非加熱で確かに差が出ます。ただ、ベッドとノズルの間隔が離れる場合と近くなる場合があって、その規則性をなかなか確認できていません。下手に手を加えると混乱しそうなので、今回は非加熱での測定のみで、値で設定しました。

ABLを動作させる。

ファームを書き換えたら、まずM502を発行し、ファームのセッテングを読み込みます。これは先にも書いたようにEEPROMに以前の設定が残っている場合、プリンタ起動時にEEPROMからの読み込みが優先されるので、誤動作(およびオペレーターの思い込み)を避ける為です。大事なので二度書きました。

M851を発行してZ_OFFSET値がファームで書き換えた値になっていることを確認します。M851というコマンドは、M114とかM500,M502とかとともに、設定作業では頻繁に使うコマンドです。

あとは、G28,G29で動作確認をしつつテストプリントであれこれ悩みながらABL動作を楽しみます。ここまでくれば、ソフトウエア設定というよりは器械的な調整のし直しノウハウやベッド用ヘアスプレーの種類とかそういうところの悩みを抱えることになりますので、その周辺については、経験が蓄積されたらいつか別記事で覚えを書こうと思ってます。

なお最後に注意を一点。

スライサーでつくったGコードファイルはスライサーデフォルトの設定ではG29命令は記されていません。他方G28命令は必ず書き込まれています。

G28命令があるとG29で修正されたオフセット値はリセットされるのが味噌です。

とすれば、プリント前に、いくらG29命令を出していたとしても、G28命令がファイル側に設定されていますと、ABLが無効化されます。

プリント動作でABLを有効にするためには、スライサーの設定でG29(あるいはABLを有効とするM420 S1命令)をG28の後に発行しておくようにするか、コードファイル自体をそのようにエディタで書き換えておくかしておく必要があります。原理的にわかっていながらも、これに気づかないでテストプリントを繰り返すというお馬鹿な人がいます(あ、わたしです)。

ABL対応Configuration.hパッチ

とりあえずMarlin 1.1.8のConfiguration.hを、NPNタイプの近接センサーを装着したAlnuar-M508のABL対応Configuration.hにするためのパッチを掲出しておきます。

温度情報の変更6)PID調整をしたところAlunar配布のConfiguration.hファイルとは異なった結果が出たので、変更したのでした。など余分な変更部分がありますので、参考としてのみお使いください。基本、この記事と前・前々記事に示した定数のみ変更すれば動作すると思います。

alunar-m508-config.patch

(5/19付けで公開された記事は編集中リビジョンのものでした。文章が途中で切れていたり誤記があったりしてます。これは5/20 12:00 付けで訂正された最終稿です。)

References   [ + ]

1. 以下の手順についてはChris Rileyさんの動画が参考になりました。
2. 2018/06/08追記注:実際、ABLを使って幸せになるのは、(1)制作上かなり広い面積を使う必要があり、(2)ベッドの水平がかなりの精度で確保されており、(3)計測点がかなり多い、という「かなり」なケースの気がしています。(3)などはUnified Bed Levelingでないとあんまり使い物にならないのではないだろうかと思いますし、Z軸移動精度が追い込まれていないと効果のほどは??。などと疑問がでてきます。
3. ここでいうセンターはG29測定時の中央座標のことです。現在のわたしの設定ではX115 Y100となっています。
4. だたし、ABLでの再修正値がない場合。
5. これはChrisさんの動画で実例を見ることができます
6. PID調整をしたところAlunar配布のConfiguration.hファイルとは異なった結果が出たので、変更したのでした。

1件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


コメントする