4Max Pro 2.0 Marlin Firmware Changes

結局動いていないので、今後参考用として公開している。トップページにある標準ファームウェアを使用中。20210915 Ender-3ではSKR Mini E3に換装していた。制御基板を32bitボードに換装する事で得られる恩恵は語りつくせないが、その1つに安定動作がある。 Atmega2560を使ったRAMPS互換の8bitボードの場合、Cura 4.xが出力するGcodeでは、印刷中、特に理由もなく加熱を止めたりHaltしたりする。 Gcodeを2度実施すると2度同じところで止まるので、ソフトウェアの不具合だと考えられる。 Curaは印刷品質を高めるための更新が頻繁にあり、最新版を使えない影響は計り知れない。

久しくそれを忘れていたけど、4Max Proはそれを思い出させてくれた。そう、これは制御基板がTrigorillaだった。 まさか2021年にもなって、この不具合に悩まされるとは思わなかった。時代遅れにもほどがあるだろう。 まずは最新のMarlin Firmwareに変更して様子を見たいと思う。望み薄だが。

標準仕様のAnycubic 4Max Pro 2.0搭載しているTrigorillaボードのファームウェアを最新のMarlin 2.xシリーズで作製する際に、必要な変更箇所一覧を記録として残す。 下記のNESTOR氏の設定を参考に変更している。NESTOR氏のFirmwareをそのまま使うと、2mmほど宙を浮いて印刷開始する。旧式はGlassplate無しが原点？ 追記：確認するとPROBE_MANUALLYが有効になっていた。なので、予め手動でMesh Bed Leveringを実行して各ポイントごと計測して保管する必要がある。 個人的には恩恵無いので、無効にした。 Marlin 2.0.2 & 2.0.1 for Anycubic 4MAX pro by nestor75 - Thingiverse

Pratformio.ini

変更不要

Configuration.h

// #define MOTHERBOARD BOARD_RAMPS_14_EFB #define MOTHERBOARD BOARD_TRIGORILLA_14 // #define PSU_ACTIVE_STATE LOW // Set 'LOW' for ATX, 'HIGH' for X-Box #define PSU_ACTIVE_STATE HIGH // Set 'LOW' for ATX, 'HIGH' for X-Box
// #define TEMP_SENSOR_0 1 #define TEMP_SENSOR_0 11 // #define TEMP_SENSOR_BED 0 #define TEMP_SENSOR_BED 11 // #define HEATER_0_MAXTEMP 275 #define HEATER_0_MAXTEMP 265 // #define BED_MAXTEMP 150 #define BED_MAXTEMP 120
// #define PID_K1 0.95 // Smoothing factor within any PID loop #define PID_K1 0.8 // Smoothing factor within any PID loop // #if ENABLED(PID_PARAMS_PER_HOTEND) // // Specify between 1 and HOTENDS values per array. // // If fewer than EXTRUDER values are provided, the last element will be repeated. // #define DEFAULT_Kp_LIST { 22.20, 22.20 } // #define DEFAULT_Ki_LIST { 1.08, 1.08 } // #define DEFAULT_Kd_LIST { 114.00, 114.00 } // #else // #define DEFAULT_Kp 22.20 // #define DEFAULT_Ki 1.08 // #define DEFAULT_Kd 114.00 #if ENABLED(PID_PARAMS_PER_HOTEND) // Specify between 1 and HOTENDS values per array. // If fewer than EXTRUDER values are provided, the last element will be repeated. #define DEFAULT_Kp_LIST { 12.05, 12.05 } #define DEFAULT_Ki_LIST { 0.63, 0.63 } #define DEFAULT_Kd_LIST { 57.77, 57.77 } #else #define DEFAULT_Kp 12.05 #define DEFAULT_Ki 0.63 #define DEFAULT_Kd 57.77

注：ExtruderのPID値は私の個体の実測値。Stock Firmwareの値はKp:15.11 Ki:0.94 Kd:60.97だった。

//#define PIDTEMPBED #define PIDTEMPBED // #define DEFAULT_bedKp 10.00 // #define DEFAULT_bedKi .023 // #define DEFAULT_bedKd 305.4 #define DEFAULT_bedKp 60.50 #define DEFAULT_bedKi 7.31 #define DEFAULT_bedKd 333.71

注：HeatBedのPID値は私の個体の実測値。Stock Firmwareの値はKp:439.45 Ki:73.49 Kd:656.97だった。

#define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber // #define THERMAL_PROTECTION_CHAMBER // Enable thermal protection for the heated chamber //Disable
// #define X_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. // #define Y_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. // #define Z_MIN_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. #define X_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop. #define Y_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop. #define Z_MIN_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop. // #define X_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. // #define Y_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. // #define Z_MAX_ENDSTOP_INVERTING false // Set to true to invert the logic of the endstop. #define X_MAX_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop. #define Y_MAX_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop. #define Z_MAX_ENDSTOP_INVERTING true // Set to true to invert the logic of the endstop. // #define Z_MIN_PROBE_ENDSTOP_INVERTING false // Set to true to invert the logic of the probe. #define Z_MIN_PROBE_ENDSTOP_INVERTING true // Set to true to invert the logic of the probe.
// #define X_DRIVER_TYPE A4988 // #define Y_DRIVER_TYPE A4988 #define X_DRIVER_TYPE A4988 #define Y_DRIVER_TYPE A4988 // #define ENDSTOP_NOISE_THRESHOLD 2 #define ENDSTOP_NOISE_THRESHOLD 2
// #define DEFAULT_AXIS_STEPS_PER_UNIT { 80, 80, 400, 500 } #define DEFAULT_AXIS_STEPS_PER_UNIT { 100.06, 80.06, 800, 392.16 } // #define DEFAULT_MAX_FEEDRATE { 300, 300, 5, 25 } #define DEFAULT_MAX_FEEDRATE { 150, 150, 20, 80 } // #define DEFAULT_MAX_ACCELERATION { 3000, 3000, 100, 10000 } #define DEFAULT_MAX_ACCELERATION { 700, 700, 70, 15000 } // #define MAX_ACCEL_EDIT_VALUES { 6000, 6000, 200, 20000 } // ...or, set your own edit limits #define MAX_ACCEL_EDIT_VALUES { 700, 700, 70, 15000 } // ...or, set your own edit limits // #define DEFAULT_ACCELERATION 3000 // X, Y, Z and E acceleration for printing moves // #define DEFAULT_RETRACT_ACCELERATION 3000 // E acceleration for retracts // #define DEFAULT_TRAVEL_ACCELERATION 3000 // X, Y, Z acceleration for travel (non printing) moves #define DEFAULT_ACCELERATION 700 // X, Y, Z and E acceleration for printing moves #define DEFAULT_RETRACT_ACCELERATION 700 // E acceleration for retracts #define DEFAULT_TRAVEL_ACCELERATION 700 // X, Y, Z acceleration for travel (non printing) moves // #define DEFAULT_XJERK 10.0 // #define DEFAULT_YJERK 10.0 // #define DEFAULT_ZJERK 0.3 #define DEFAULT_XJERK 8.2 #define DEFAULT_YJERK 8.2 #define DEFAULT_ZJERK 0.2 // #define JUNCTION_DEVIATION_MM 0.013 // (mm) Distance from real junction edge #define JUNCTION_DEVIATION_MM 0.022 // (mm) Distance from real junction edge

注：Stock FirmwareのE-steps値はX100.06 Y80.06 Z800.00 E392.16で同じだった。

// #define INVERT_E0_DIR false #define INVERT_E0_DIR true // #define X_BED_SIZE 200 // #define Y_BED_SIZE 200 #define X_BED_SIZE 273 #define Y_BED_SIZE 205 // #define X_MIN_POS 0 #define X_MIN_POS -8 // #define Z_MAX_POS 200 #define Z_MAX_POS 205

注：Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PINを有効のままとして、PROBE_MANUALLYは有効にしなかった。 注：Z_MIN_POS -1.43としていたが、0のままとした。 注：MESH_BED_LEVELINGは無効のままとした。

// #define EEPROM_SETTINGS #define EEPROM_SETTINGS // #define PREHEAT_2_TEMP_BED 110 #define PREHEAT_2_TEMP_BED 100

注：ABSプリセット値を変更しているが、LCD側が持っているプリセット値が適用されるので、意味は無い。

// #define SDSUPPORT #define SDSUPPORT // #define SPEAKER #define SPEAKER // #define ANYCUBIC_LCD_I3MEGA #define ANYCUBIC_LCD_I3MEGA // #define ANYCUBIC_LCD_DEBUG #define ANYCUBIC_LCD_DEBUG

注：ANYCUBIC_TFT35という設定値があるが、Trigorillaではビルドできないらしい。

// #define FAN_SOFT_PWM #define FAN_SOFT_PWM // #define SOFT_PWM_SCALE 0 #define SOFT_PWM_SCALE 2

注：最終行に、下記2行を追加する。これがいくつかのライブラリを入れる必要があるが、そのうちコア部のファイルは古いバージョンに上書きすることになるので、ソースコードを解析して移植しなければならない。流石に面倒なので止めた。

#define ANYCUBIC_FILAMENT_RUNOUT_SENSOR #define ANYCUBIC_TFT_DEBUG

Configuration_adv.h

// #define THERMAL_PROTECTION_PERIOD 40 // Seconds // #define THERMAL_PROTECTION_HYSTERESIS 4 // Degrees Celsius #define THERMAL_PROTECTION_PERIOD 60 // Seconds #define THERMAL_PROTECTION_HYSTERESIS 20 // Degrees Celsius // #define WATCH_TEMP_PERIOD 20 // Seconds // #define WATCH_TEMP_INCREASE 2 // Degrees Celsius #define WATCH_TEMP_PERIOD 60 // Seconds #define WATCH_TEMP_INCREASE 3 // Degrees Celsius // #define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds // #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius #define THERMAL_PROTECTION_BED_PERIOD 80 // Seconds #define THERMAL_PROTECTION_BED_HYSTERESIS 8 // Degrees Celsius

注：私はStick Glueを使い、加熱して水清掃するから緩く設定している。必要なければTHERMAL_PROTECTION_BED_PERIOD 20, THERMAL_PROTECTION_BED_HYSTERESIS 5にする。

// #define E0_AUTO_FAN_PIN -1 #define E0_AUTO_FAN_PIN FAN2_PIN // #define EXTRUDER_AUTO_FAN_SPEED 255 // 255 == full speed #define EXTRUDER_AUTO_FAN_SPEED 191 // 255 == full speed

注：Stock PartsのExtruderのFAN SPEEDは75%にする必要があるらしい。Detail

// #define CASE_LIGHT_ENABLE #define CASE_LIGHT_ENABLE // #define CASE_LIGHT_PIN 4 // Override the default pin if needed #define CASE_LIGHT_PIN 45 // Override the default pin if needed // #define CASE_LIGHT_DEFAULT_BRIGHTNESS 105 // Set default power-up brightness (0-255, requires PWM pin) #define CASE_LIGHT_DEFAULT_BRIGHTNESS 255 // Set default power-up brightness (0-255, requires PWM pin)

注:Mesh Bed leveling未使用のため、CALIBRATION_PINは無効のまま。

// #define ADAPTIVE_STEP_SMOOTHING #define ADAPTIVE_STEP_SMOOTHING
// #define TX_BUFFER_SIZE 0 #define TX_BUFFER_SIZE 4 // #define RX_BUFFER_SIZE 1024 #define RX_BUFFER_SIZE 256 // #define EMERGENCY_PARSER #define EMERGENCY_PARSER