3Dプリンターを使っている時の音や振動を抑えて、もっとスムーズな動きでプリントをしたかったので、色々と調べてファームウェアのMarlinを変更・調整しました。変更後は動きがかなりニュルニュルとスムーズな動きになり満足しいます。
3Dプリンターで気になっていた音と振動
3dプリンターを使っていて一番気になっていたのが、その騒音と振動。ノズルがまっすぐに進んでいる時は良いのですが、細かく方向転換する時やInfillのプリントをしている時のガタッガタッと、音と振動が結構するんですね。それがマンションの下階に響いているんじゃ無いかと心配で、プリントしている時は気になるし夜中はプリントしてませんでした。
そこで、この音と振動の心配事をなんとかしようと思い立ったのです。
Marlinの動きに関する部分
僕が使っているファームウェアは”Marlin”です。バージョンは”1.0.5-r2″。その中でノズルの動きに関する部分は”Configuration.h”の437行目から459行目にある「MOVEMENT SETTINGS」の箇所です。
//// MOVEMENT SETTINGS
// default settings
#define DEFAULT_AXIS_STEPS_PER_UNIT {80,80,2560,146}
#define DEFAULT_MAX_FEEDRATE {500, 500, 5, 25}
#define DEFAULT_MAX_ACCELERATION {9000,9000,100,10000}
#define DEFAULT_ACCELERATION 3000
#define DEFAULT_RETRACT_ACCELERATION 3000
#define DEFAULT_XYJERK 20.0
#define DEFAULT_ZJERK 0.4
#define DEFAULT_EJERK 5.0
今回その中の、DEFAULT_ACCELERATIONとDEFAULT_RETRACT_ACCELERATIONの加速度に関する部分と、DEFAULT_XYJERKのジャークに関する部分をデフォルト値から変更することでノズルの動きをスムーズにすることが出来ました。
JERKの設定が音と振動の発生を左右する
加速度(Acceleration)と減速のマイナス加速度(Retract Acceleration)については、そんなに難しく無いと思います。加速度を大きくすれば早く目標速度まで達し、小さくすると遅くなる。急激な速度変化を抑えることで音と振動の発生も多少は少なくなると思い、デフォルト値の3000mm/s^2から1000mm/s^2に下げました。
問題はXYJERKの設定。これ、初めは何のことかさっぱり分かりませんでした。”jerk”の英単語の意味を調べてみると「引き上げ」とのこと。重量挙げのジャークです。そこで色々と調べてみるとMarlinの開発者の一人であるErik Zalmが”Can somebody explain these?“の質問に応える形で説明していました。
Jerk is the max. instantaneous speed change allowed. If the jerk is 20 the a speed change from 0 -20 mm/s will be instantaneous. (No acceleration part)
But also for speeds changes from 60-80 and 50-30 etc.
Speed changes > jerk will have an acceleration part.
A speed change of 10 – 80 will start at 30 and accelerate to 80.
要するに、設定したJERKの速度に加速度無しで引き上げますということ。減速時も同じです。速度が0mm/sから20mm/sにする時は、加速無しでいきなり20mm/sからスタートします。また0mm/sから50mm/sにする時は、加速開始が20mm/sから始まります。逆に50mm/sから0mm/sにする時は、20mm/sまでマイナスの加速度で減速してその後はストンと0mm/sになります。
したがってこのJERKによってノズルが急に動いたり、急に止まったりするので、その時に音と振動が発生してるのです。
加速度AccelerateとジャークJerkの関係
例えば速度を50mm/s、加速度を一定に設定し[図1]のように(A)点から(B)点へ移動するのに、XYのJERKが無い時(XYJERK = 0mm/s)と、ある時(XYJERK = 20mm/s)を比較してみます。
(1)XYJERK=0mm/s の時[図2]
グラフの縦軸は速度、横軸は時間です。XYJERKが0mm/sなので、加速は速度0mm/sから始まり、速度が50mm/sになると加速は無くなり定速になります。減速の時も同じで、マイナスの加速が50mm/sから始まり、速度が0mm/sになると終わります。
(2)XYJERK=20mm/s の時[図3]
今度はXYJERKを20mm/sに設定したので、速度はJERKによって引き上げられるので20mm/sから加速が始まります。減速時は50mm/sから20mm/sに減速した時点でJERKによって速度は0mm/sに引き下げられます。
XYJERKがどの様に働くか分かっていただけたでしょうか。JERKによってパスの最初と最後に急制動が発生しているのです。
JERKの設定によって影響すること
MarlinのXYJERKの値を大きくした時と小さくした時のメリットが、Repetierの説明”Repetier-Firmware Documentation“に書いてあります。
■XYJERKの値を大きくした時
・プリント時間を短縮する。
・溶けたフィラメントの塊を減少させる。
■XYJERKの値を小さくした時
・機械的なストレスを減少させる。
・動きをスムーズにする。
・方向転換時のフィラメント接着の向上。
・ノイズの低減。
と書いてあり、XYのJERKを小さくした方がいろいろとメリットが多い様な気がしますが、問題点がありました。
方向転換時の動きを考えてみる
どんな問題点が出てくるのか、ノズルが方向転換をする場合の動きを考えてみます。
[図4]のように(A)から(B)にX方向に動き、そこで方向を90度変えて(B)から(C)へとY方向へ動くとします。速度は50mm/s、加速度は一定、XYJERKは20mm/sです。
こちらも縦軸を速度、横軸を時間にして、X、Y方向をそれぞれ[図5][図6]にしてみます。
このX方向とY方向の図を基にしてノズルの絶対的な速度のグラフを書いてみると[図7]のようになります。
方向転換点の(B)で20mm/sまで一旦減速して、また再び加速しています。JERKの設定値によってどこまで減速するのかが変わってくるということですね。
上の様に大きな角度の方向転換をする時はJERKを小さくすれば、X、Y軸方向での急制動が少なくなってそれだけスムーズに動いて振動も少なくなります。加速する時間が伸びますがそれほど気になる長さでは無いと思います。インフィルをプリントする時や四角形をプリントする時はとてもスムーズになります。
しかし、JERKを小さくすると小さな角度の方向転換でも減速→加速をすることになり、多角形のパスに分解されている円形部分などをプリントする時に、パス毎にいちいち減速→加速をするので動きがぎこちなてくシームレスではなくなり、逆にスムーズな動きとならなくなってしまいます。
スムーズなACCELERATIONとXYJERKの設定値は?
それじゃあ加速度とジャークをどのくらいの値にするのが良いのかということですよね。 方向転換の角度をいろいろと変えて速度のグラフを書いて見ようと思ったのですが、斜めに進む時の速度をXとY方向に分解してそれぞれ加速度とジャークを考慮して、さらに直線的に進む為にX、Yどちらかの速度変化に合わせてとかいろいろ考えてみたのですが、結局分からなくなってしまいました。
そこで速度を50mm/sに設定してXYJERKの値を幾つか変えてプリントしてみたところ、XYJERK=5mm/sではちょっと小さすぎました。パス毎に減速→加速を頻繁に繰り返してしまいます。その後、XYJERKを15mm/s、10mm/sと変えて試して見ましたが、今のところ10mm/sが良いです。もちろん最適なJERK値はノズルの速度によって変わってきますね。
XYJERKを変更したのでエクストルーダーのジャークEJERKの値も同じ割合で変更してみたのですが、見た目には全く変化が分かりませんでした。
これで3Dプリンターの動きはスムーズになり気兼ね無く夜でも3Dプリントすることが出来るようになりました。(いや、振動が全て無くなった訳ではないので多少は気兼ねするのですが…。)
今回のブログどうでしたか?文章の下書きやグラフを何度も何度も書き直してやっとアップ出来ました。下手な文章や、間違った理解をしている所も多々あると思いますが、少しでも3Dプリント・ライフの参考になれば嬉しいです。
yama4ta says
2015年1月24日 at 8:46 AM昨年暮れからプリンターを製作してます。
当初はネジ駆動でしたが、6mm/s以上で脱調するため、ベルト駆動に改良したところです。
今回の記事内容は参考になりました。”いいね”
AKIRA says
2015年1月24日 at 10:53 AMyama4taさん
コメント&”いいね”をありがとうございます。
このブログが参考になりとても嬉しいです。
どんな3Dプリンターを作っているのでしょうか?
これからもこのブログを宜しくお願いします。
yama4ta says
2015年1月24日 at 1:43 PM返信ありがとうございます。参考にMarlinをいじったら、動きが満足できる状態になりました。
FACE BOOKの”山下 栄一”で情報発信してます。
AKIRA says
2015年1月24日 at 11:39 PM山下さん。Facebookを大変楽しく見させていただきました。ノズルの速度とステッピングモーターが脱調しない回転速度を考えるとベルトの方が良いと思います。CNCをやっていらっしゃるようですが、ベルトでもほとんどバックラッシュも無いと感じています。
ホットエンドに付けるM6のネジですが、メタル製の物を僕も一時期使っていましたが、どうやら熱でフィラメントが穴の中に焦げ付いてしまい、その結果フィラメントが送り出せなくなってしまいました。なのでテフロンチューブが入っているのに戻しています。
それと今、Slic3rの日本語マニュアルを作成しています。まだ途中ですがよければご覧になってください。少しずつ増やしていってます。→http://3dp0.com/slic3r/
yama4ta says
2015年1月25日 at 10:16 AMありがとうございます。
ご指摘のとうり、M6のネジには苦労しました。M6のネジをφ4で貫通させ(手持ちの旋盤は無理なので会社で)テフロンチューブで事なきを得ています。また、当初、CNCフライスを考えていました。
偶然にも、長男が同じ内容の翻訳に着手してます。
拝見が楽しみです。
Genie says
2015年2月13日 at 12:59 AMこんにちは!
詳細な内容の解説記事をアップしてくださってどうもありがとうございます。このテーマで書かれた日本語の記事は今まで存在しなかったのではないでしょうか。多大な時間を割いて判りやすいイメージを描かれ、また理解しやすい文章で説明されていることに敬服いたします。
AKIRA says
2015年2月13日 at 12:46 PMGenieさん、コメントありがとうございます。
Genieさんのブログをいつも見ています。また3Dプリンターを自作した際には大変参考にさせて頂きました。ありがとうございます。
JERKに付いては日本語以外の情報も少なく、自分で理解するのに時間がかかりました。実は方向転換時にJERKが適用されるかされないかの分岐速度についても書こうと思ったのですが、計算が難しいことと理解不足なので断念しました。
これからもこのブログをよろしくお願いします。
Nippy says
2018年7月22日 at 1:01 PMJerkは躍度(加加速度)のことですので,この記事での説明は間違っていると思います.
Jerkは初期速度(m/s)ではなく,加速度の時間微分(m/s^3)のことを指していると思います.
https://ja.wikipedia.org/wiki/%E8%BA%8D%E5%BA%A6
https://car.watch.impress.co.jp/img/car/docs/1099/891/html/109_o.jpg.html
AKIRA says
2018年7月22日 at 3:49 PMNippyさん、コメントありがとうございます。
Nippyさんが言うように本当の”Jerk”の意味としては違いますね。
本文中でも引用したCan somebody explain these?(https://github.com/MarlinFirmware/Marlin/issues/367)でErikZalm氏が説明していますが、Marlinで使っている”Jerrk”は本来の”Jerk”では無いと言っています。
ですので、ここではあくまでMarlinで使っている”Jerk”がどういうものなのかについて書いたものです。
匿名 says
2022年9月25日 at 5:27 AM静音設定を探していたらここにたどり着きました。
先人に学ばせていただきます。