雑食エンジニアの気まぐれレシピ

日ごろ身に着けた技術や見知った知識などの備忘録的なまとめ.主にRaspberry Piやマイコンを使った電子工作について綴っていく予定.機械学習についても書けるといいな.

Flsun i3のファームをMarlin v1.1.9に上げる

前回の記事 shikky-lab.hatenablog.com もそうですが,先日のつくばminiMakerFaireにて3Dプリンタを酷使した際にいろいろ不具合が起こった甲斐あって,3Dプリンタに大分詳しくなりました.
今なら色々改造できそう!ということで,思いついたところから手を加えていこうと思います.まずはファームウェアから.
Flsun i3の初期状態ではMarlin v1.1.2が入っていましたが今回はこれをv1.1.9に上げていきます.別にv1.1.9で何か欲しい機能が追加されたというわけではないですが,Configuration.hへの理解を深めるのも兼ねてやってみます.
(Marlinとしてはv2.Xがリリースされたっぽいのですが,Configuration.hの形式がv2.0で大きく変わったため移植が少し面倒そうでした.というわけで今回はv1.1.9で留めておきます.)

Marlinのソースコードを自分の筐体用に合わせるためには,Configuration.hというものを編集する必要があります.ここには非常に膨大な設定項目があり,どれが必須の変更項目で,どれが手を加えなくてよいところなのかがわかりません.というわけでFlusnに付属されていたソースのConfiguration.hと,v1.1.2のオリジナルソースとの差分をとってみました.以下になります.

Section Original Flsun i3 必須(Y/N) Memo
Extruder
//#define MIXING_EXTRUDER アンコメントアウト N マルチエクストルーダの場合必要
tempreture
#define TEMP_SENSOR_BED 0 1 Y ヒートベッドセンサの有効化
#define HEATER_0_MINTEMP 5 -5 N
#define HEATER_1_MINTEMP 5 -5 N
#define BED_MINTEMP 5 -5 N この値以下になった場合,接続エラーと判定するらしい.意図的に変える必要はなさそう.
ホットエンドのKPI設定 なし ? PIDのKPI設定にI3用のやつが増えているが,コメントアウトされている.Flsun側のミス?
#define DEFAULT_bedKp 10.00 250.0 Y
#define DEFAULT_bedKi .023 18.0 Y
#define DEFAULT_bedKd 305.4 950.0 Y 全体的にパラメータでかくない?
#define THERMAL_PROTECTION_BED コメントアウト N ヒートベッドの温度保護.デフォルトでは無効化しているらしい.まじか.
homing
#define Z_MIN_ENDSTOP_INVERTING false true Y Z軸のリミット検知に近接センサを使う際に必要.近接センサは論理が反転する.
#define Z_MIN_PROBE_ENDSTOP_INVERTING false true Y 同上
motion
#define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 4000, 500 } {100,100,400,150} Y 各軸の実移動距離と,ステッピングモータのパルス比の関係を定義.
#define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } { 250, 250, 2, 17 } Y 最大送り率を指定.
#define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } {1000,1000,4,750} Y 各軸の加速度設定.全体的に小さめになっている.特にZ軸に顕著.
#define DEFAULT_XJERK 20.0 17.0 Y
#define DEFAULT_YJERK 20.0 17.0 Y
#define DEFAULT_EJERK 5.0 4.0 Y JERKの設定.この値以下の速度の場合は加速度設定を無視して一気にこの速度まで上げるらしい.
probes
//#define Z_ENDSTOP_SERVO_NR 0 #define Z_ENDSTOP_SERVO_NR 1 Y?
//#define Z_SERVO_ANGLES {70,0} #define Z_SERVO_ANGLES {40,85} Y? この二つの設定はサーボによるレベリングを行う際に必要な設定と思われる.ただ,これがないとコンパイルエラーが起こったので必要なのかもしれない?
#define X_PROBE_OFFSET_FROM_EXTRUDER 10 15 Y エクストルーダとセンサの間のギャップを指定する.
#define Y_PROBE_OFFSET_FROM_EXTRUDER 10 -11 Y X,Yはさておき,Zが最重要.レベリングの基準になる.
#define Z_PROBE_OFFSET_FROM_EXTRUDER 0 -2 Y Flsun i3に付属のセンサは5mmを検出し,ノズルから3mm離れた場所についているので,0点は-2mmということらしい.
#define XY_PROBE_SPEED 8000 7500 Y Probe時のXとYの移動速度.
#define Z_CLEARANCE_DEPLOY_PROBE 10 3 N Deploy時にベッドから離す距離らしい.Deploy時ってどこを指しているんだろう?
#define Z_CLEARANCE_BETWEEN_PROBES 5 3 N Probe時にベッドから離す距離らしい.これらは別に変えなくていいとは思うが,必要以上に大きくとることも無さそう.
#define Z_PROBE_OFFSET_RANGE_MIN -20 コメントアウト N M851コマンド時の調整幅を指定するらしい.なおこのコメントアウトはおそらくFlsun側のミス.
//#define Z_MIN_PROBE_REPEATABILITY_TEST アンコメントアウト N M48の近接センサの繰り返しテストの有効化.どちらでも.
#define INVERT_Z_DIR false true Y モータの進行方向の設定.セクションおかしくね?
//#define Z_HOMING_HEIGHT 4 アンコメントアウト Y ホーミングを行う際にZ軸から離す距離.
#define Z_MAX_POS 200 220 Y Flsun i3のサイズに合わせる.果たして本当に220mmの造形なんてできるんだろうか.
#define AUTO_BED_LEVELING_BILINEAR アンコメントアウト N この辺りは自分のやりたいレベリング方法に合わせるべき
レベリングの測定位置とかもろもろ 割愛.
//#define Z_SAFE_HOMING アンコメントアウト Y 上の方で設定した近接センサとホットエンドの位置関係をもとに,センサが範囲外に出ないようにする設定らしい.
#define HOMING_FEEDRATE_XY (50*60) (40*60) Y? ホーミング時の速度
#define HOMING_FEEDRATE_Z (4*60) (55) Y? えらい慎重だけど,ミスか?
extras
//#define EEPROM_SETTINGS アンコメントアウト Y EEPROMの有効化
#define HOST_KEEPALIVE_FEATURE コメントアウト N? PC接続時のKeepAliveの有無らしい
//#define M100_FREE_MEMORY_WATCHER アンコメントアウト N デバッグ用の設定らしい.
tempreture
#define PREHEAT_1_TEMP_HOTEND 180 205 N デフォルトのPLA用温度設定.印刷時はどうせGコードで指定するから関係ない.
#define PREHEAT_2_TEMP_BED 110 100 N ABSのベッド温度設定.これも印刷時には大抵関係ない.ただ110℃はこの子のキャパ的に苦しい.
lcd
//#define SDSUPPORT アンコメントアウト Y SDカードの有効化
//#define SD_CHECK_AND_RETRY アンコメントアウト Y CRCの有効化
//#define REPRAP_DISCOUNT_SMART_CONTROLLER アンコメントアウト Y これがFlsun i3のLCDらしい
//#define NUM_SERVOS 3 #define NUM_SERVOS 2 Y? これもサーボによるレベリングに必要な設定なはずだが,ここを変更しないとコンパイル失敗する可能性あり?
#define SERVO_DELAY 300 500 Y? 一応こっちも必要なのかも?
//#define DEACTIVATE_SERVOS_AFTER_MOVE アンコメントアウト Y? これもサーボ関連
#define DEFAULT_NOMINAL_FILAMENT_DIA 3.00 1.75 Y デフォルトのフィラメント径.むしろデフォルトは3.00なことに驚き.

思ったほど差分あって引きましたが,"必須"欄にYを書いたところだけ変更すればとりあえず動くと思います.
Memo欄に各項目の意味も書いてみましたが,間違いがいくつか含まれるかもしれません.よくわからない項目が多すぎて...

Marlin v1.1.9に移植する

上記のものをベースにMarlin v1.1.9のconfiguration.hを編集していきます.
一部項目名が増えていたり変わっていたり色々あったので,そこは適宜調整が必要です.大抵はちゃんとコンパイルエラー出してくれるので,エラーメッセージ見ながら修正していけば大丈夫です.
上の表でも書いてますが,サーボ関連の設定は不要のはずなんですが,無いとエラーが出るので追加しています.

  • #define Z_ENDSTOP_SERVO_NR 1
  • #define Z_SERVO_ANGLES {40,85}
  • #define NUM_SERVOS 2
  • #define SERVO_DELAY {300,300}
    • v1.1.9ではサーボの数だけ指定できるので,配列形式になったらしい
  • #define DEACTIVATE_SERVOS_AFTER_MOVE

v1.1.9の感想について

まだあまり使えてないですが,Manualレベリングの機能が地味に便利です.
指定したコーナーのZ=0の位置に順繰りに移動してくれるので,それぞれでねじ調整すればレベリングが完了します.
あとはS字加速なる機能が追加されたので有効化してみましたが,こちらの魅力はまだよくわかってないです.何か変わったかな...

v1.1.9の魅力はまだ全然わかっていませんが,それはこれから分かり次第書いていこうと思います.
今のところはこれまでブラックボックスとなっていたConfiguration.hの中身が細かく理解できたところが収穫でしょうか.色々気になる設定値も出てきたので,少しずつ試していければと思います.
今回はこれくらいで.それでは.