2020-08-29 21:22 by 仁伯爵

Marlinファームウェアの設定

前回までにReplicator2XのメインボードをSKR Pro 1.1に載せ替え、主要なケーブルの接続作業を済ませ、LEDをどこに接続するか問題や、エンドストップの設定で座標が前後しちゃう問題を解決した。そしてMarlinで思ったスケールで動作するように数値を設定したところで前回の記事は終了している。この記事では引き続きMarlinの設定で変えたところをメモしておこうと思う。

シリアルポートの選択

SKR Pro 1.1ではESP-01sのWi-Fiモジュールと、LCDディスプレイと、USBポートでシリアル接続が可能となっているが、Marlinはシリアルポートを2つまでしかサポートしない。なので、Marlinのconfigure.hでどのポートを使うのか設定してあげる必要がある。SERIAL_PORTに-1を設定し、USBでのシリアルポートエミュレートを指定して、USB接続でRaspberryPi上のOctPrintを使用するようにした。SERIAL_PORT_2に1を設定し、LCDディスプレイからSKR Pro 1.1をあれこれ操作できるようにする。これでWi-fiモジュール接続はできなくなっているものの、OctPrintでネットワークに接続するのでそれで代替できる。6を設定するとESP-01s用のポートが使用できるようになる。


/**
 * Select the serial port on the board to use for communication with the host.
 * This allows the connection of wireless adapters (for instance) to non-default port pins.
 * Serial port -1 is the USB emulated serial port, if available.
 * Note: The first serial port (-1 or 0) will always be used by the Arduino bootloader.
 *
 * :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
 */
#define SERIAL_PORT -1

/**
 * Select a secondary serial port on the board to use for communication with the host.
 * :[-1, 0, 1, 2, 3, 4, 5, 6, 7]
 */
#define SERIAL_PORT_2 1

またシリアル接続時の通信速度を設定する。今回は115200にした。


/**
 * This setting determines the communication speed of the printer.
 *
 * 250000 works in most cases, but you might try a lower speed if
 * you commonly experience drop-outs during host printing.
 * You may try up to 1000000 to speed up SD file transfer.
 *
 * :[2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000]
 */
#define BAUDRATE 115200

Boardの選択

boards.hのなかから自分が使っているボードを選んで、MOTHERBOARDで指定する。今回はBOARD_BTT_SKR_PRO_V1_1とする。v1.2を使っている場合はBOARD_BTT_SKR_PRO_V1_2となる。


// Choose the name from boards.h that matches your setup
#ifndef MOTHERBOARD
  #define MOTHERBOARD BOARD_BTT_SKR_PRO_V1_1
#endif

プリンタの命名

自分の3Dプリンターに好きな名前を付ける。ここでつけた名前は、電源投入後、LCDディスプレイに”○○ Ready.”と表示されるところで使われる。素直にReplicator2Xとしてみた。


// Name displayed in the LCD "Ready" message and Info menu
#define CUSTOM_MACHINE_NAME "Replicator2X"

UUIDを無意味につける

マシンにUUID(ユニバーサリーユニークID)を付けることができる。ほかの機体と区別する必要がある場合便利だが、1台しか作らない今回は必要ない。なんかカッコいいのでここのサイトでIDを生成して入れてみる。version4で生成する。


// Printer's unique ID, used by some programs to differentiate between machines.
// Choose your own or use a service like https://www.uuidgenerator.net/version4
#define MACHINE_UUID "12cd3d99-76a5-45d8-b28d-23b1e79f25d7"

エクストルーダー数の設定

EXTRUDERSでエクストルーダーの数を指定する。replicator2Xはデュアルヘッドでの2色刷りが売りの一つなので2を指定する。


// This defines the number of extruders
// :[0, 1, 2, 3, 4, 5, 6, 7, 8]
#define EXTRUDERS 2

フィラメント径の指定

DEFAULT_NOMINAL_FILAMENT_DIAで使用するフィラメントの直径を指定する。Replicator2Xでは太さ1.75mm径のフィラメントを使う。


// Generally expected filament diameter (1.75, 2.85, 3.0, ...). Used for Volumetric, Filament Width Sensor, etc.
#define DEFAULT_NOMINAL_FILAMENT_DIA 1.75

複数ホットエンドのオフセット

エクストルーダーが複数あり、ホットエンドが複数ある場合、エクストルーダー0のホットエンドから、他のホットエンドの距離をHOTEND_OFFSETで指定しておく。これがズレてると2色刷りしたときにそれぞれのホットエンドでの出力がズレてしまう。Replicator2Xでは2つのホットエンドのオフセットは、Makerbot純正のファームウェアの設定値を参照したところ、X軸方向に-35mm、Y軸方向に-0.1mmとされていた。しかし実際は組み立ての具合で微妙にずれており、ここの数値は実際に出力しながら調整する必要があったのだが、それはまた別のお話。


// Offset of the extruders (uncomment if using more than one and relying on firmware to position when changing).
// The offset has to be X=0, Y=0 for the extruder 0 hotend (default extruder).
// For the other hotends it is their distance from the extruder 0 hotend.
#define HOTEND_OFFSET_X { 0.0, -35.00 } // (mm) relative X-offset for each nozzle
#define HOTEND_OFFSET_Y { 0.0, -0.10 }  // (mm) relative Y-offset for each nozzle
//#define HOTEND_OFFSET_Z { 0.0, 0.00 }  // (mm) relative Z-offset for each nozzle

温度センサーの選択

TEMP_SENSORでは、温度センサーの種類を指定する。Replicator2Xではホットエンド2つと、ヒートベッド1つの計3つの温度センサーがついている。コメントアウトに書かれている一覧の中から自分の環境にあったものを選んで指定するのだが、今回は3つとも1の100k thermistorを選んでおいた。外から温度を計測する機器を持っていないので取れた温度が正しいか判断できなかったが、室温とだいたい同じくらいの値を取っていたので多分これでいい気がする。


/**
 * --NORMAL IS 4.7kohm PULLUP!-- 1kohm pullup can be used on hotend sensor, using correct resistor and table
 *
 * Temperature sensors available:
 *
 *    -5 : PT100 / PT1000 with MAX31865 (only for sensors 0-1)
 *    -3 : thermocouple with MAX31855 (only for sensors 0-1)
 *    -2 : thermocouple with MAX6675 (only for sensors 0-1)
 *    -4 : thermocouple with AD8495
 *    -1 : thermocouple with AD595
 *     0 : not used
 *     1 : 100k thermistor - best choice for EPCOS 100k (4.7k pullup)
 *   331 : (3.3V scaled thermistor 1 table for MEGA)
 *   332 : (3.3V scaled thermistor 1 table for DUE)
 *     2 : 200k thermistor - ATC Semitec 204GT-2 (4.7k pullup)
 *   202 : 200k thermistor - Copymaster 3D
 *     3 : Mendel-parts thermistor (4.7k pullup)
 *     4 : 10k thermistor !! do not use it for a hotend. It gives bad resolution at high temp. !!
 *     5 : 100K thermistor - ATC Semitec 104GT-2/104NT-4-R025H42G (Used in ParCan, J-Head, and E3D) (4.7k pullup)
 *   501 : 100K Zonestar (Tronxy X3A) Thermistor
 *   502 : 100K Zonestar Thermistor used by hot bed in Zonestar Prusa P802M
 *   512 : 100k RPW-Ultra hotend thermistor (4.7k pullup)
 *     6 : 100k EPCOS - Not as accurate as table 1 (created using a fluke thermocouple) (4.7k pullup)
 *     7 : 100k Honeywell thermistor 135-104LAG-J01 (4.7k pullup)
 *    71 : 100k Honeywell thermistor 135-104LAF-J01 (4.7k pullup)
 *     8 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup)
 *     9 : 100k GE Sensing AL03006-58.2K-97-G1 (4.7k pullup)
 *    10 : 100k RS thermistor 198-961 (4.7k pullup)
 *    11 : 100k beta 3950 1% thermistor (Used in Keenovo AC silicone mats and most Wanhao i3 machines) (4.7k pullup)
 *    12 : 100k 0603 SMD Vishay NTCS0603E3104FXT (4.7k pullup) (calibrated for Makibox hot bed)
 *    13 : 100k Hisens 3950  1% up to 300°C for hotend "Simple ONE " & "Hotend "All In ONE"
 *    15 : 100k thermistor calibration for JGAurora A5 hotend
 *    18 : ATC Semitec 204GT-2 (4.7k pullup) Dagoma.Fr - MKS_Base_DKU001327
 *    20 : Pt100 with circuit in the Ultimainboard V2.x with 5v excitation (AVR)
 *    21 : Pt100 with circuit in the Ultimainboard V2.x with 3.3v excitation (STM32 \ LPC176x....)
 *    22 : 100k (hotend) with 4.7k pullup to 3.3V and 220R to analog input (as in GTM32 Pro vB)
 *    23 : 100k (bed) with 4.7k pullup to 3.3v and 220R to analog input (as in GTM32 Pro vB)
 *   201 : Pt100 with circuit in Overlord, similar to Ultimainboard V2.x
 *    60 : 100k Maker's Tool Works Kapton Bed Thermistor beta=3950
 *    61 : 100k Formbot / Vivedino 3950 350C thermistor 4.7k pullup
 *    66 : 4.7M High Temperature thermistor from Dyze Design
 *    67 : 450C thermistor from SliceEngineering
 *    70 : the 100K thermistor found in the bq Hephestos 2
 *    75 : 100k Generic Silicon Heat Pad with NTC 100K MGB18-104F39050L32 thermistor
 *    99 : 100k thermistor with a 10K pull-up resistor (found on some Wanhao i3 machines)
 *
 *       1k ohm pullup tables - This is atypical, and requires changing out the 4.7k pullup for 1k.
 *                              (but gives greater accuracy and more stable PID)
 *    51 : 100k thermistor - EPCOS (1k pullup)
 *    52 : 200k thermistor - ATC Semitec 204GT-2 (1k pullup)
 *    55 : 100k thermistor - ATC Semitec 104GT-2 (Used in ParCan & J-Head) (1k pullup)
 *
 *  1047 : Pt1000 with 4k7 pullup (E3D)
 *  1010 : Pt1000 with 1k pullup (non standard)
 *   147 : Pt100 with 4k7 pullup
 *   110 : Pt100 with 1k pullup (non standard)
 *
 *  1000 : Custom - Specify parameters in Configuration_adv.h
 *
 *         Use these for Testing or Development purposes. NEVER for production machine.
 *   998 : Dummy Table that ALWAYS reads 25°C or the temperature defined below.
 *   999 : Dummy Table that ALWAYS reads 100°C or the temperature defined below.
 */
#define TEMP_SENSOR_0 1
#define TEMP_SENSOR_1 1
#define TEMP_SENSOR_2 0
#define TEMP_SENSOR_3 0
#define TEMP_SENSOR_4 0
#define TEMP_SENSOR_5 0
#define TEMP_SENSOR_6 0
#define TEMP_SENSOR_7 0
#define TEMP_SENSOR_BED 1
#define TEMP_SENSOR_PROBE 0
#define TEMP_SENSOR_CHAMBER 0

各種ヒーターのPID設定

DEFAULT_Kp、DEFAULT_Ki、DEFAULT_KdでホットエンドのPIDの値を設定する。ここの値をチューニングするとあったまり過ぎやあったまらなさすぎを回避し、効率よく目標の温度に達することができるようになる。g-codeのM303を使用すると自動で適切な値を探ってくれる。初回のビルドでは適当な値にしておいて、M303で適切な値を探ってから再度設定すると良い。PID_EDIT_MENUをアンコメントしておくと、ディスプレイのメニューからPIDの値を編集できるようになるので、EEPROMが有効で設定が保存できる環境ではいちいちビルドしなくてもいいかもしれない。今回改造したReplicator2XでM303を流してみたところ以下の値になった。


//===========================================================================
//============================= PID Settings ================================
//===========================================================================
// PID Tuning Guide here: https://reprap.org/wiki/PID_Tuning

// Comment the following line to disable PID and enable bang-bang.
#define PIDTEMP
#define BANG_MAX 255     // Limits current to nozzle while in bang-bang mode; 255=full current
#define PID_MAX BANG_MAX // Limits current to nozzle while PID is active (see PID_FUNCTIONAL_RANGE below); 255=full current
#define PID_K1 0.95      // Smoothing factor within any PID loop

#if ENABLED(PIDTEMP)
  #define PID_EDIT_MENU         // Add PID editing to the "Advanced Settings" menu. (~700 bytes of PROGMEM)
  #define PID_AUTOTUNE_MENU     // Add PID auto-tuning to the "Advanced Settings" menu. (~250 bytes of PROGMEM)
  //#define PID_PARAMS_PER_HOTEND // Uses separate PID parameters for each extruder (useful for mismatched extruders)
                                  // Set/get with gcode: M301 E[extruder number, 0-2]

  // If you are using a pre-configured hotend then you can use one of the value sets by uncommenting it

  // Rep2X
  #define DEFAULT_Kp 11.20
  #define DEFAULT_Ki 0.44
  #define DEFAULT_Kd 75.76

  // Ultimaker
  //#define DEFAULT_Kp 22.2
  //#define DEFAULT_Ki 1.08
  //#define DEFAULT_Kd 114

ヒートベッドのPIDも設定しておく。これもM303でチューニングする。パラメータでEを-1にすると、ヒートベッドのチューニングができる。Replicator2Xの改造したヒートベッドでM303を流してみたところ下の値になった。


  //120V 250W silicone heater into 4mm borosilicate (MendelMax 1.5+)
  //from FOPDT model - kp=.39 Tp=405 Tdead=66, Tc set to 79.2, aggressive factor of .15 (vs .1, 1, 10)
  #define DEFAULT_bedKp 48.56
  #define DEFAULT_bedKi 5.28
  #define DEFAULT_bedKd 297.84
  //#define DEFAULT_bedKp 10.00
  //#define DEFAULT_bedKi .023
  //#define DEFAULT_bedKd 305.4

エンドストップ設定のおさらい

前回行ったエンドストップの設定をおさらいしておく。X軸、Y軸はMAX、Z軸はMINを設定する。


//===========================================================================
//============================== Endstop Settings ===========================
//===========================================================================

// @section homing

// Specify here all the endstop connectors that are connected to any endstop or probe.
// Almost all printers will be using one per axis. Probes will use one or more of the
// extra connectors. Leave undefined any used for non-endstop and non-probe purposes.
//#define USE_XMIN_PLUG
//#define USE_YMIN_PLUG
#define USE_ZMIN_PLUG
#define USE_XMAX_PLUG
#define USE_YMAX_PLUG
//#define USE_ZMAX_PLUG

INVERTINGはX軸Y軸Z軸ともにtrueにした。


// Mechanical endstop with COM to ground and NC to Signal uses "false" here (most common setup).
#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 true  // 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 false // 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.

あわせてpins_BTT_SKR_PRO_common.hの編集が必要なのだがそれは前回の記事をご参照願いたい。

ステッパードライバーの設定

使用しているステッパーモータードライバーを選択する。今回は全軸でTMC5160を使っている。


/**
 * Stepper Drivers
 *
 * These settings allow Marlin to tune stepper driver timing and enable advanced options for
 * stepper drivers that support them. You may also override timing options in Configuration_adv.h.
 *
 * A4988 is assumed for unspecified drivers.
 *
 * Options: A4988, A5984, DRV8825, LV8729, L6470, L6474, POWERSTEP01,
 *          TB6560, TB6600, TMC2100,
 *          TMC2130, TMC2130_STANDALONE, TMC2160, TMC2160_STANDALONE,
 *          TMC2208, TMC2208_STANDALONE, TMC2209, TMC2209_STANDALONE,
 *          TMC26X,  TMC26X_STANDALONE,  TMC2660, TMC2660_STANDALONE,
 *          TMC5130, TMC5130_STANDALONE, TMC5160, TMC5160_STANDALONE
 * :['A4988', 'A5984', 'DRV8825', 'LV8729', 'L6470', 'L6474', 'POWERSTEP01', 'TB6560', 'TB6600', 'TMC2100', 'TMC2130', 'TMC2130_STANDALONE', 'TMC2160', 'TMC2160_STANDALONE', 'TMC2208', 'TMC2208_STANDALONE', 'TMC2209', 'TMC2209_STANDALONE', 'TMC26X', 'TMC26X_STANDALONE', 'TMC2660', 'TMC2660_STANDALONE', 'TMC5130', 'TMC5130_STANDALONE', 'TMC5160', 'TMC5160_STANDALONE']
 */
#define X_DRIVER_TYPE  TMC5160
#define Y_DRIVER_TYPE  TMC5160
#define Z_DRIVER_TYPE  TMC5160
//#define X2_DRIVER_TYPE A4988
//#define Y2_DRIVER_TYPE A4988
//#define Z2_DRIVER_TYPE A4988
//#define Z3_DRIVER_TYPE A4988
//#define Z4_DRIVER_TYPE A4988
#define E0_DRIVER_TYPE TMC5160
#define E1_DRIVER_TYPE TMC5160
//#define E2_DRIVER_TYPE A4988
//#define E3_DRIVER_TYPE A4988
//#define E4_DRIVER_TYPE A4988
//#define E5_DRIVER_TYPE A4988
//#define E6_DRIVER_TYPE A4988
//#define E7_DRIVER_TYPE A4988

移動距離の設定

1mm当たりの必要ステップ数を指定する。これも前回の記事の最後の方を参照していただきたい。この設定に関してもやはり実際に動かして調節する必要があったがこれもまた別のお話。


/**
 * Default Axis Steps Per Unit (steps/mm)
 * Override with M92
 *                                      X, Y, Z, E0 [, E1[, E2...]]
 */
#define DEFAULT_AXIS_STEPS_PER_UNIT   { 99, 99, 400, 96 }

移動速度の設定

デフォルトの移動速度をmm/秒で設定する。Replicator2Xはダイレクトエクストルーダーでモーターが移動する部分に載っており、デュアルエクストルーダーでさらに倍してドンなのでヘッドが重い。速い速度を設定しすぎると各所に負担がかかって脱調したり、モーターのプーリーの固定が緩んだり、樹脂パーツが耐えきれずに割れたりする。ゆっくりにすると印刷品質も上がって各所の負担が軽くなるので各所を締めなおしたりするメンテナンスの手間も少なくなるが、造形にかかる時間が長くなる。今回のReplicator2Xは樹脂パーツのほとんどがアルミ部品に置き換えられており、純正よりはいくらか頑丈なはずだが、Makerbot純正のファームウェアで設定されていたよりちょっと早いか同じくらいで設定してみる。


/**
 * Default Max Feed Rate (mm/s)
 * Override with M203
 *                                      X, Y, Z, E0 [, E1[, E2...]]
 */
#define DEFAULT_MAX_FEEDRATE          { 300, 300, 19, 30 }

加速度の設定は、X軸とY軸だけ純正ファームより早くしてみた。Z軸とエクストルーダーは純正の値と同じにした。


/**
 * Default Max Acceleration (change/s) change = mm/s
 * (Maximum start speed for accelerated moves)
 * Override with M201
 *                                      X, Y, Z, E0 [, E1[, E2...]]
 */
#define DEFAULT_MAX_ACCELERATION      { 2000, 2000, 150, 4000 }

同じく、プリント時の加速度、エクストルーダーのリトラクト時の加速度、プリントしてないトラベル時の加速度を設定する。


/**
 * Default Acceleration (change/s) change = mm/s
 * Override with M204
 *
 *   M204 P    Acceleration
 *   M204 R    Retract Acceleration
 *   M204 T    Travel Acceleration
 */
#define DEFAULT_ACCELERATION          2000    // X, Y, Z and E acceleration for printing moves
#define DEFAULT_RETRACT_ACCELERATION  4000    // E acceleration for retracts
#define DEFAULT_TRAVEL_ACCELERATION   2000    // X, Y, Z acceleration for travel (non printing) moves

各軸のモーターの回転方向を設定する。Y軸だけ逆回転にしておく。


// Invert the stepper direction. Change (or reverse the motor connector) if an axis goes the wrong way.
#define INVERT_X_DIR false
#define INVERT_Y_DIR true
#define INVERT_Z_DIR false

原点復帰のためのHOMINGの方向を設定する。X軸とY軸がMAXなので1、Z軸はMINなので-1を設定する。


// @section homing

//#define NO_MOTION_BEFORE_HOMING // Inhibit movement until all axes have been homed

//#define UNKNOWN_Z_NO_RAISE      // Don't raise Z (lower the bed) if Z is "unknown." For beds that fall when Z is powered off.

//#define Z_HOMING_HEIGHT  4      // (mm) Minimal Z height before homing (G28) for Z clearance above the bed, clamps, ...
                                  // Be sure to have this much clearance over your Z_MAX_POS to prevent grinding.

//#define Z_AFTER_HOMING  10      // (mm) Height to move to after homing Z

// Direction of endstops when homing; 1=MAX, -1=MIN
// :[-1,1]
#define X_HOME_DIR 1
#define Y_HOME_DIR 1
#define Z_HOME_DIR -1

印刷可能域と可動域

純正状態のReplicator2Xのスペック上の印刷可能範囲は、幅11.2インチ、奥行き6.0インチ、高さ6.1インチだった。メートル法に直すと、幅285mm、奥行き153mm、高さ155mmとなる。しかし、我がReplicator2Xは各部をアルミパーツに置き換えた結果、樹脂パーツよりも大きくなってしまっているので可動域が若干狭くなっている。具体的に測ると、幅277mm、奥行き140mm、高さ155mmだった。

だが、実のところこれは印刷可能範囲ではない。X軸の可動域は277mmだがビルドプレートの横幅は260mmしかない。最大まで動かすとホットエンドがビルドプレートの外まで動くのだ。逆にY軸の可動域は140mmしかないがビルドプレートの奥行きは160mmある。限界まで動かしてもホットエンドがビルドプレートの恥に到達する前にヘッドが枠にぶつかる。それぞれの短い方を採用した結果、印刷可能域は、横幅260mm、奥行き140mmという事になる。

とはいえ、Marlin上でベッドサイズには、本当のベッドサイズを入力するのではなく、ヘッドの移動できる範囲の距離を入力しておく。


// @section machine

// The size of the print bed
#define X_BED_SIZE 277
#define Y_BED_SIZE 140

// Travel limits (mm) after homing, corresponding to endstop positions.
#define X_MIN_POS 0
#define Y_MIN_POS 0
#define Z_MIN_POS 0
#define X_MAX_POS X_BED_SIZE
#define Y_MAX_POS Y_BED_SIZE
#define Z_MAX_POS 155

SOFTWARE_ENDSTOPを有効にしておくと、一度HOMINGして位置を初期化したあとならばBED_SIZEで指定した範囲の外に出るような動きをソフトウェアでストップしてくれる。とっても安心。


// Min software endstops constrain movement within minimum coordinate bounds
#define MIN_SOFTWARE_ENDSTOPS
#if ENABLED(MIN_SOFTWARE_ENDSTOPS)
  #define MIN_SOFTWARE_ENDSTOP_X
  #define MIN_SOFTWARE_ENDSTOP_Y
  #define MIN_SOFTWARE_ENDSTOP_Z
#endif

// Max software endstops constrain movement within maximum coordinate bounds
#define MAX_SOFTWARE_ENDSTOPS
#if ENABLED(MAX_SOFTWARE_ENDSTOPS)
  #define MAX_SOFTWARE_ENDSTOP_X
  #define MAX_SOFTWARE_ENDSTOP_Y
  #define MAX_SOFTWARE_ENDSTOP_Z
#endif

#if EITHER(MIN_SOFTWARE_ENDSTOPS, MAX_SOFTWARE_ENDSTOPS)
  #define SOFT_ENDSTOPS_MENU_ITEM  // Enable/Disable software endstops from the LCD
#endif

手動レベリングを行うメニューをLCDディスプレイから選択できるようにしておく。LEVEL_CORNERS_INSET_LFRBで左、前、右、後ろの順でどれだけBED_SIZEで指定した領域の内側を検査するかを指定する。LCDのサブメニューbed levelingからここで指定された領域の4コーナーを一発で順繰りに動かすメニューが使えてとっても便利。


/**
 * Add a bed leveling sub-menu for ABL or MBL.
 * Include a guided procedure if manual probing is enabled.
 */
#define LCD_BED_LEVELING

#if ENABLED(LCD_BED_LEVELING)
  #define MESH_EDIT_Z_STEP  0.025 // (mm) Step size while manually probing Z axis.
  #define LCD_PROBE_Z_RANGE 4     // (mm) Z Range centered on Z_MIN_POS for LCD Z adjustment
  //#define MESH_EDIT_MENU        // Add a menu to edit mesh points
#endif

// Add a menu item to move between bed corners for manual bed adjustment
#define LEVEL_BED_CORNERS

#if ENABLED(LEVEL_BED_CORNERS)
  #define LEVEL_CORNERS_INSET_LFRB { 45, 10, 55, 50 } // (mm) Left, Front, Right, Back insets
  #define LEVEL_CORNERS_HEIGHT      0.0   // (mm) Z height of nozzle at leveling points
  #define LEVEL_CORNERS_Z_HOP       4.0   // (mm) Z height of nozzle between leveling points
  #define LEVEL_CENTER_TOO              // Move to the center after the last corner
#endif

EEPROMでの設定の保存

EEPROMを有効にしておくと、各種設定をボード上の記憶領域に保持しておくことができるので設定値を変えるのにいちいちMarlinをビルドする必要がなくなる。SKR Pro 1.1は、ボード上にEEPROM用の記憶チップが用意されていないので、SDカード上にEEPROMデータを保存してエミュレートする機能を使う。

そのため、SKR Pro 1.1ではPRINTCOUNTERが使用できない。PRINTCOUNTERを有効にすると、それまでの累積プリント時間や成功したプリントの数、失敗したプリントの数などをカウントしてくれる。これらのデータはEEPROMに保存されるが、SKR Pro 1.1はこれらのデータをSDカードに書き込むのに1秒近くかかってしまい、プリント中に読み書きが発生するとプリントによからぬ事態を巻き起こすという理由で、SKR Pro 1.1でEEPROMとPRINTCOUNTERを同時に設定しているとMarlinのビルド時にエラーで弾かれてしまうので注意が必要だ。


/**
 * EEPROM
 *
 * Persistent storage to preserve configurable settings across reboots.
 *
 *   M500 - Store settings to EEPROM.
 *   M501 - Read settings from EEPROM. (i.e., Throw away unsaved changes)
 *   M502 - Revert settings to "factory" defaults. (Follow with M500 to init the EEPROM.)
 */
#define EEPROM_SETTINGS     // Persistent storage with M500 and M501
//#define DISABLE_M503        // Saves ~2700 bytes of PROGMEM. Disable for release!
#define EEPROM_CHITCHAT       // Give feedback on EEPROM commands. Disable to save PROGMEM.
#define EEPROM_BOOT_SILENT    // Keep M503 quiet and only give errors during first load
#if ENABLED(EEPROM_SETTINGS)
  #define EEPROM_AUTO_INIT  // Init EEPROM automatically on any errors.
#endif

SDカードも忘れずに有効化しておく。


/**
 * SD CARD
 *
 * SD Card support is disabled by default. If your controller has an SD slot,
 * you must uncomment the following option or it won't work.
 *
 */
#define SDSUPPORT

/**
 * SD CARD: SPI SPEED
 *
 * Enable one of the following items for a slower SPI transfer speed.
 * This may be required to resolve "volume init" errors.
 */
//#define SPI_SPEED SPI_HALF_SPEED
//#define SPI_SPEED SPI_QUARTER_SPEED
//#define SPI_SPEED SPI_EIGHTH_SPEED

/**
 * SD CARD: ENABLE CRC
 *
 * Use CRC checks and retries on the SD communication.
 */
#define SD_CHECK_AND_RETRY

スピーカーをON

スピーカーをONにしておくと、Simplify3Dでは設定次第で造形が終了した時にインディージョーンズのテーマを流すことができる。造形が終了した後にピロピロなるのはとてもかわいい。なのでスピーカーを有効化しておく。


//
// SPEAKER/BUZZER
//
// If you have a speaker that can produce tones, enable it here.
// By default Marlin assumes you have a buzzer with a fixed frequency.
//
#define SPEAKER

ディスプレイの設定

今回は、コントロールパネルとなるディスプレイ装置にメインボードと同じくBigtreeTechのBIGTREE TFT35 V3.0を使う。フルグラフィックのタッチパネルモードと、昔ながらのLCDモードを切り替えながら両方使える。結局のところLCDモードの方ができることが多いのでタッチモードはあんまり使わないが、両方使えるようにMarlinを設定しておく。


//
// RepRapDiscount FULL GRAPHIC Smart Controller
// https://reprap.org/wiki/RepRapDiscount_Full_Graphic_Smart_Controller
//
#define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER

LEDの設定

LEDの設定も前回詳しく書いたので今回はおさらい。詳しくは前回の記事をご参照いただきたい。


// Support for Adafruit Neopixel LED driver
#define NEOPIXEL_LED
#if ENABLED(NEOPIXEL_LED)
  #define NEOPIXEL_TYPE   NEO_GRB // NEO_GRBW / NEO_GRB - four/three channel driver type (defined in Adafruit_NeoPixel.h)
  #define NEOPIXEL_PIN     PD0     // LED driving pin
  //#define NEOPIXEL2_TYPE NEOPIXEL_TYPE
  //#define NEOPIXEL2_PIN    5
  #define NEOPIXEL_PIXELS 20       // Number of LEDs in the strip, larger of 2 strips if 2 neopixel strips are used
  #define NEOPIXEL_IS_SEQUENTIAL   // Sequential display for temperature change - LED by LED. Disable to change all LEDs at once.
  #define NEOPIXEL_BRIGHTNESS 255  // Initial brightness (0-255)
  #define NEOPIXEL_STARTUP_TEST  // Cycle through colors at startup

  // Use a single Neopixel LED for static (background) lighting
  //#define NEOPIXEL_BKGD_LED_INDEX  0               // Index of the LED to use
  //#define NEOPIXEL_BKGD_COLOR { 255, 255, 255, 0 } // R, G, B, W
#endif

/**
 * Printer Event LEDs
 *
 * During printing, the LEDs will reflect the printer status:
 *
 *  - Gradually change from blue to violet as the heated bed gets to target temp
 *  - Gradually change from violet to red as the hotend gets to temperature
 *  - Change to white to illuminate work surface
 *  - Change to green once print has finished
 *  - Turn off after the print has finished and the user has pushed a button
 */
#if ANY(BLINKM, RGB_LED, RGBW_LED, PCA9632, PCA9533, NEOPIXEL_LED)
  #define PRINTER_EVENT_LEDS
#endif

ここまでがconfiguration.hの設定となる。次からは、Configuration_adv.hでさらにアドバンス的な設定を行う。

サーマルプロテクションの緩和

だいぶ後の話だが、全て設定してしばらく印刷していた時、2つのエクストルーダーを同時に加熱していたところ以下のメッセージが出てプリンターがリセットされてしまうことがあった。

“Thermal Runaway”が頻繁に出る場合は、以下のあたりの設定値を増やしてヒーターの異常を検知するまでの条件を緩和してあげるとよい。ただ緩和しすぎると異常を検知できずに火災に繋がる可能性があるため緩和し過ぎは禁物だとのことである。今回はちょっとだけ増やしてみる。


/**
 * Thermal Protection provides additional protection to your printer from damage
 * and fire. Marlin always includes safe min and max temperature ranges which
 * protect against a broken or disconnected thermistor wire.
 *
 * The issue: If a thermistor falls out, it will report the much lower
 * temperature of the air in the room, and the the firmware will keep
 * the heater on.
 *
 * The solution: Once the temperature reaches the target, start observing.
 * If the temperature stays too far below the target (hysteresis) for too
 * long (period), the firmware will halt the machine as a safety precaution.
 *
 * If you get false positives for "Thermal Runaway", increase
 * THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD
 */
#if ENABLED(THERMAL_PROTECTION_HOTENDS)
  //#define THERMAL_PROTECTION_PERIOD 40        // Seconds
  //#define THERMAL_PROTECTION_HYSTERESIS 4     // Degrees Celsius
  #define THERMAL_PROTECTION_PERIOD 60        // Seconds
  #define THERMAL_PROTECTION_HYSTERESIS 6     // Degrees Celsius

エクストルーダーファンとパーツファンの指定

エクストルーダーファンのピンがどれなのかを設定する。Replicator2Xはエクストルーダーが2つなのでFAN1のPE5とFAN2のPE6を設定する。


/**
 * Extruder cooling fans
 *
 * Extruder auto fans automatically turn on when their extruders'
 * temperatures go above EXTRUDER_AUTO_FAN_TEMPERATURE.
 *
 * Your board's pins file specifies the recommended pins. Override those here
 * or set to -1 to disable completely.
 *
 * Multiple extruders can be assigned to the same pin in which case
 * the fan will turn on when any selected extruder is above the threshold.
 */
#define E0_AUTO_FAN_PIN PE5
#define E1_AUTO_FAN_PIN PE6
#define E2_AUTO_FAN_PIN -1
#define E3_AUTO_FAN_PIN -1
#define E4_AUTO_FAN_PIN -1
#define E5_AUTO_FAN_PIN -1
#define E6_AUTO_FAN_PIN -1
#define E7_AUTO_FAN_PIN -1
#define CHAMBER_AUTO_FAN_PIN -1

FAN0のPC8は造形物の冷却用に使う。Marlin上ではパーツファンはエクストルーダーごと複数設定可能だが、SKR Pro 1.1にはPWM制御ができるFAN用の端子は3つしかないのでFANMUX0_PINとFANMUX1_PINの2つにPC8を設定する。


/**
 * Part-Cooling Fan Multiplexer
 *
 * This feature allows you to digitally multiplex the fan output.
 * The multiplexer is automatically switched at tool-change.
 * Set FANMUX[012]_PINs below for up to 2, 4, or 8 multiplexed fans.
 */
#define FANMUX0_PIN PC8
#define FANMUX1_PIN PC8
#define FANMUX2_PIN -1

再びのLED設定

configuration.hではneoPixelの設定をしたのでイベントが起こった時にLEDが光るよう設定した。configration_adv.hでは、同じLEDをケースライトとしても指定しておく。


/**
 * M355 Case Light on-off / brightness
 */
#define CASE_LIGHT_ENABLE
#if ENABLED(CASE_LIGHT_ENABLE)
  #define CASE_LIGHT_PIN PD0                  // Override the default pin if needed
  #define INVERT_CASE_LIGHT false             // Set true if Case Light is ON when pin is LOW
  #define CASE_LIGHT_DEFAULT_ON true          // Set default power-up state on
  #define CASE_LIGHT_DEFAULT_BRIGHTNESS 255   // Set default power-up brightness (0-255, requires PWM pin)
  #define CASE_LIGHT_MAX_PWM 255            // Limit pwm
  #define CASE_LIGHT_MENU                   // Add Case Light options to the LCD menu
  //#define CASE_LIGHT_NO_BRIGHTNESS          // Disable brightness control. Enable for non-PWM lighting.
  #define CASE_LIGHT_USE_NEOPIXEL           // Use Neopixel LED as case light, requires NEOPIXEL_LED.
  #if ENABLED(CASE_LIGHT_USE_NEOPIXEL)
    #define CASE_LIGHT_NEOPIXEL_COLOR { 255, 255, 255, 255 } // { Red, Green, Blue, White }
  #endif
#endif

HOMINGでのクイックホームの指定

ヘッドの位置を初期化するHOMINGをさせた時、X軸、Y軸、Z軸の順でひとつづつHOMINGさせるのではなく、X軸とY軸を同時に動かすクイックホームを指定しておく。これでちょっとだけHOMINGにかかる時間が短縮できる。


#define QUICK_HOME                          // If G28 contains XY do a diagonal move first
//#define HOME_Y_BEFORE_X                     // If G28 contains XY home Y before X
//#define CODEPENDENT_XY_HOMING               // If X/Y can't home without homing Y/X first

アダプティブ・ステップ・スムージング

ADAPTIVE_STEP_SMOOTHINGを設定し、多軸動作の分解能を向上させてみる。


/**
 * Adaptive Step Smoothing increases the resolution of multi-axis moves, particularly at step frequencies
 * below 1kHz (for AVR) or 10kHz (for ARM), where aliasing between axes in multi-axis moves causes audible
 * vibration and surface artifacts. The algorithm adapts to provide the best possible step smoothing at the
 * lowest stepping frequencies.
 */
#define ADAPTIVE_STEP_SMOOTHING

LEDメニューの追加

LEDを付けたのでLCDから制御できるメニューを追加しておく。


 /**
   * LED Control Menu
   * Add LED Control to the LCD menu
   */
  #define LED_CONTROL_MENU
  #if ENABLED(LED_CONTROL_MENU)
    #define LED_COLOR_PRESETS                 // Enable the Preset Color menu option
    #if ENABLED(LED_COLOR_PRESETS)
      #define LED_USER_PRESET_RED        255  // User defined RED value
      #define LED_USER_PRESET_GREEN      128  // User defined GREEN value
      #define LED_USER_PRESET_BLUE         0  // User defined BLUE value
      #define LED_USER_PRESET_WHITE      255  // User defined WHITE value
      #define LED_USER_PRESET_BRIGHTNESS 255  // User defined intensity
      #define LED_USER_PRESET_STARTUP       // Have the printer display the user preset color on startup
    #endif
  #endif

メッセージのスクロール

LCDに表示される長いメッセージをスクロールさせて全文見えるようにする。


// Scroll a longer status message into view
#define STATUS_MESSAGE_SCROLLING

SDカードの設定

SDカード内のファイルを表示するとき、アルファベット順になる様にSDCARD_SORT_ALPHAを有効化する。また、長いファイル名をLONG_FILENAME_HOST_SUPPORTで許可して、長い場合はスクロールして全部見えるようにLONG_FILENAME_HOST_SUPPORTも有効にした。ただ、これらを有効にすると、LCDでSDカード内のファイルを表示させたとき、長いファイル名のファイルがあるとちょっと重い。


/**
   * Sort SD file listings in alphabetical order.
   *
   * With this option enabled, items on SD cards will be sorted
   * by name for easier navigation.
   *
   * By default...
   *
   *  - Use the slowest -but safest- method for sorting.
   *  - Folders are sorted to the top.
   *  - The sort key is statically allocated.
   *  - No added G-code (M34) support.
   *  - 40 item sorting limit. (Items after the first 40 are unsorted.)
   *
   * SD sorting uses static allocation (as set by SDSORT_LIMIT), allowing the
   * compiler to calculate the worst-case usage and throw an error if the SRAM
   * limit is exceeded.
   *
   *  - SDSORT_USES_RAM provides faster sorting via a static directory buffer.
   *  - SDSORT_USES_STACK does the same, but uses a local stack-based buffer.
   *  - SDSORT_CACHE_NAMES will retain the sorted file listing in RAM. (Expensive!)
   *  - SDSORT_DYNAMIC_RAM only uses RAM when the SD menu is visible. (Use with caution!)
   */
  #define SDCARD_SORT_ALPHA

  // SD Card Sorting options
  #if ENABLED(SDCARD_SORT_ALPHA)
    #define SDSORT_LIMIT       40     // Maximum number of sorted items (10-256). Costs 27 bytes each.
    #define FOLDER_SORTING     -1     // -1=above  0=none  1=below
    #define SDSORT_GCODE       false  // Allow turning sorting on/off with LCD and M34 G-code.
    #define SDSORT_USES_RAM    false  // Pre-allocate a static array for faster pre-sorting.
    #define SDSORT_USES_STACK  false  // Prefer the stack for pre-sorting to give back some SRAM. (Negated by next 2 options.)
    #define SDSORT_CACHE_NAMES false  // Keep sorted items in RAM longer for speedy performance. Most expensive option.
    #define SDSORT_DYNAMIC_RAM false  // Use dynamic allocation (within SD menus). Least expensive option. Set SDSORT_LIMIT before use!
    #define SDSORT_CACHE_VFATS 2      // Maximum number of 13-byte VFAT entries to use for sorting.
                                      // Note: Only affects SCROLL_LONG_FILENAMES with SDSORT_CACHE_NAMES but not SDSORT_DYNAMIC_RAM.
  #endif

  // This allows hosts to request long names for files and folders with M33
  #define LONG_FILENAME_HOST_SUPPORT

  // Enable this option to scroll long filenames in the SD card menu
  #define SCROLL_LONG_FILENAMES

SDカードは、LCDについているSDカードスロットを使用するように設定した。


/**
   * Set this option to one of the following (or the board's defaults apply):
   *
   *           LCD - Use the SD drive in the external LCD controller.
   *       ONBOARD - Use the SD drive on the control board. (No SD_DETECT_PIN. M21 to init.)
   *  CUSTOM_CABLE - Use a custom cable to access the SD (as defined in a pins file).
   *
   * :[ 'LCD', 'ONBOARD', 'CUSTOM_CABLE' ]
   */
  #define SDCARD_CONNECTION LCD

ゲームの追加

以下のオプションをアンコメントすると、LCDディスプレイでゲームができる。インベーダーゲームとかもできるので久しぶりに名古屋撃ちしたい時などに便利だ。だが、ファームウェアのサイズは小さい方がいいのでいらない人はコメントアウトしておく方がいいかもしれない。


  // Frivolous Game Options
  #define MARLIN_BRICKOUT
  #define MARLIN_INVADERS
  #define MARLIN_SNAKE
  #define GAMES_EASTER_EGG          // Add extra blank lines above the "Games" sub-menu

ベイビーステッピングの設定

Z軸の調節をするために、現在位置を更新せずにちょっとだけ動かすBABYSTEPPINGを有効化しておく。


/**
 * Babystepping enables movement of the axes by tiny increments without changing
 * the current position values. This feature is used primarily to adjust the Z
 * axis in the first layer of a print in real-time.
 *
 * Warning: Does not respect endstops!
 */
#define BABYSTEPPING
#if ENABLED(BABYSTEPPING)
  //#define INTEGRATED_BABYSTEPPING         // EXPERIMENTAL integration of babystepping into the Stepper ISR
  //#define BABYSTEP_WITHOUT_HOMING
  //#define BABYSTEP_XY                     // Also enable X/Y Babystepping. Not supported on DELTA!
  #define BABYSTEP_INVERT_Z false           // Change if Z babysteps should go the other way
  #define BABYSTEP_MILLIMETER_UNITS       // Specify BABYSTEP_MULTIPLICATOR_(XY|Z) in mm instead of micro-steps
  #define BABYSTEP_MULTIPLICATOR_Z  0.1       // (steps or mm) Steps or millimeter distance for each Z babystep
  #define BABYSTEP_MULTIPLICATOR_XY 1       // (steps or mm) Steps or millimeter distance for each XY babystep

  #define DOUBLECLICK_FOR_Z_BABYSTEPPING  // Double-click on the Status Screen for Z Babystepping.
  #if ENABLED(DOUBLECLICK_FOR_Z_BABYSTEPPING)
    #define DOUBLECLICK_MAX_INTERVAL 1250   // Maximum interval between clicks, in milliseconds.
                                            // Note: Extra time may be added to mitigate controller latency.
    //#define BABYSTEP_ALWAYS_AVAILABLE     // Allow babystepping at all times (not just during movement).
    //#define MOVE_Z_WHEN_IDLE              // Jump to the move Z menu on doubleclick when printer is idle.
    #if ENABLED(MOVE_Z_WHEN_IDLE)
      #define MOVE_Z_IDLE_MULTIPLICATOR 1   // Multiply 1mm by this factor for the move step size.
    #endif
  #endif

TMCモータードライバーの設定

ステッパーモータードライバーの設定をする。今回はTMC5160を使っているので以下の部分を編集しておく必要がある。INTERPOLATEでモータードライバー側でXYZの各軸を256マイクロステップに補完するよう設定する。そして各軸に個別の設定でCURRENTを820に、MICROSTEPSを16に、RSENSEを0.075に設定する。


// @section tmc_smart

/**
 * To use TMC2130, TMC2160, TMC2660, TMC5130, TMC5160 stepper drivers in SPI mode
 * connect your SPI pins to the hardware SPI interface on your board and define
 * the required CS pins in your `pins_MYBOARD.h` file. (e.g., RAMPS 1.4 uses AUX3
 * pins `X_CS_PIN 53`, `Y_CS_PIN 49`, etc.).
 * You may also use software SPI if you wish to use general purpose IO pins.
 *
 * To use TMC2208 stepper UART-configurable stepper drivers connect #_SERIAL_TX_PIN
 * to the driver side PDN_UART pin with a 1K resistor.
 * To use the reading capabilities, also connect #_SERIAL_RX_PIN to PDN_UART without
 * a resistor.
 * The drivers can also be used with hardware serial.
 *
 * TMCStepper library is required to use TMC stepper drivers.
 * https://github.com/teemuatlut/TMCStepper
 */
#if HAS_TRINAMIC_CONFIG

  #define HOLD_MULTIPLIER    0.5  // Scales down the holding current from run current
  #define INTERPOLATE       true  // Interpolate X/Y/Z_MICROSTEPS to 256

  #if AXIS_IS_TMC(X)
    #define X_CURRENT       820        // (mA) RMS current. Multiply by 1.414 for peak current.
    #define X_CURRENT_HOME  X_CURRENT  // (mA) RMS current for sensorless homing
    #define X_MICROSTEPS     16    // 0..256
    #define X_RSENSE          0.075
    #define X_CHAIN_POS      -1    // <=0 : Not chained. 1 : MCU MOSI connected. 2 : Next in chain, ...
  #endif

  #if AXIS_IS_TMC(X2)
    #define X2_CURRENT      800
    #define X2_CURRENT_HOME X2_CURRENT
    #define X2_MICROSTEPS    16
    #define X2_RSENSE         0.11
    #define X2_CHAIN_POS     -1
  #endif

  #if AXIS_IS_TMC(Y)
    #define Y_CURRENT       820
    #define Y_CURRENT_HOME  Y_CURRENT
    #define Y_MICROSTEPS     16
    #define Y_RSENSE          0.075
    #define Y_CHAIN_POS      -1
  #endif

  #if AXIS_IS_TMC(Y2)
    #define Y2_CURRENT      800
    #define Y2_CURRENT_HOME Y2_CURRENT
    #define Y2_MICROSTEPS    16
    #define Y2_RSENSE         0.11
    #define Y2_CHAIN_POS     -1
  #endif

  #if AXIS_IS_TMC(Z)
    #define Z_CURRENT       820
    #define Z_CURRENT_HOME  Z_CURRENT
    #define Z_MICROSTEPS     16
    #define Z_RSENSE          0.075
    #define Z_CHAIN_POS      -1
  #endif

  #if AXIS_IS_TMC(Z2)
    #define Z2_CURRENT      800
    #define Z2_CURRENT_HOME Z2_CURRENT
    #define Z2_MICROSTEPS    16
    #define Z2_RSENSE         0.11
    #define Z2_CHAIN_POS     -1
  #endif

  #if AXIS_IS_TMC(Z3)
    #define Z3_CURRENT      800
    #define Z3_CURRENT_HOME Z3_CURRENT
    #define Z3_MICROSTEPS    16
    #define Z3_RSENSE         0.11
    #define Z3_CHAIN_POS     -1
  #endif

  #if AXIS_IS_TMC(Z4)
    #define Z4_CURRENT      800
    #define Z4_CURRENT_HOME Z4_CURRENT
    #define Z4_MICROSTEPS    16
    #define Z4_RSENSE         0.11
    #define Z4_CHAIN_POS     -1
  #endif

  #if AXIS_IS_TMC(E0)
    #define E0_CURRENT      820
    #define E0_MICROSTEPS    16
    #define E0_RSENSE         0.075
    #define E0_CHAIN_POS     -1
  #endif

  #if AXIS_IS_TMC(E1)
    #define E1_CURRENT      820
    #define E1_MICROSTEPS    16
    #define E1_RSENSE         0.075
    #define E1_CHAIN_POS     -1
  #endif

  #if AXIS_IS_TMC(E2)
    #define E2_CURRENT      800
    #define E2_MICROSTEPS    16
    #define E2_RSENSE         0.11
    #define E2_CHAIN_POS     -1
  #endif

  #if AXIS_IS_TMC(E3)
    #define E3_CURRENT      800
    #define E3_MICROSTEPS    16
    #define E3_RSENSE         0.11
    #define E3_CHAIN_POS     -1
  #endif

  #if AXIS_IS_TMC(E4)
    #define E4_CURRENT      800
    #define E4_MICROSTEPS    16
    #define E4_RSENSE         0.11
    #define E4_CHAIN_POS     -1
  #endif

  #if AXIS_IS_TMC(E5)
    #define E5_CURRENT      800
    #define E5_MICROSTEPS    16
    #define E5_RSENSE         0.11
    #define E5_CHAIN_POS     -1
  #endif

  #if AXIS_IS_TMC(E6)
    #define E6_CURRENT      800
    #define E6_MICROSTEPS    16
    #define E6_RSENSE         0.11
    #define E6_CHAIN_POS     -1
  #endif

  #if AXIS_IS_TMC(E7)
    #define E7_CURRENT      800
    #define E7_MICROSTEPS    16
    #define E7_RSENSE         0.11
    #define E7_CHAIN_POS     -1
  #endif

SPIモードを指定しておく。


/**
   * Software option for SPI driven drivers (TMC2130, TMC2160, TMC2660, TMC5130 and TMC5160).
   * The default SW SPI pins are defined the respective pins files,
   * but you can override or define them here.
   */
  #define TMC_USE_SW_SPI
  //#define TMC_SW_MOSI       -1
  //#define TMC_SW_MISO       -1
  //#define TMC_SW_SCK        -1

TMC特有の謎技術で音が静かになると話題のステルスチョップを有効にしておく。


/**
   * TMC2130, TMC2160, TMC2208, TMC2209, TMC5130 and TMC5160 only
   * Use Trinamic's ultra quiet stepping mode.
   * When disabled, Marlin will use spreadCycle stepping mode.
   */
  #define STEALTHCHOP_XY
  #define STEALTHCHOP_Z
  #define STEALTHCHOP_E

CHOPPER_TIMING CHOPPER_DEFAULT_24Vを指定する。


/**
   * Optimize spreadCycle chopper parameters by using predefined parameter sets
   * or with the help of an example included in the library.
   * Provided parameter sets are
   * CHOPPER_DEFAULT_12V
   * CHOPPER_DEFAULT_19V
   * CHOPPER_DEFAULT_24V
   * CHOPPER_DEFAULT_36V
   * CHOPPER_09STEP_24V   // 0.9 degree steppers (24V)
   * CHOPPER_PRUSAMK3_24V // Imported parameters from the official Prusa firmware for MK3 (24V)
   * CHOPPER_MARLIN_119   // Old defaults from Marlin v1.1.9
   *
   * Define you own with
   * { , , hysteresis_start[1..8] }
   */
  #define CHOPPER_TIMING CHOPPER_DEFAULT_24V

platformio.iniの設定

platformio.iniファイルで以下platoformioの欄で使用するボードを指定しておく。


[platformio]
src_dir      = Marlin
boards_dir   = buildroot/share/PlatformIO/boards
default_envs = BIGTREE_SKR_PRO
include_dir  = Marlin

これでビルドすると、.pio\build\BIGTREE_SKR_PROディレクトリの下にfirmware.binができるので、それをmicroSDカードに入れて、SKR Pro に突っ込んで電源を入れると、ファームウェアがボードに書き込まれる。書き込み中はボードの緑色のLEDランプがチロチロする。

これらの設定でビルドしたmarlinをボードに書き込むとそれなりに動く。でもまだ調整しなきゃいけないところが沢山あった。どこがまずくてどこを設定しなおしたのかはまた次のお話。次回もキリコと地獄に付き合ってもらう。

コメントを残す

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


*


*

投げ銭はこちらへ
bitcoin : 1AFU37YroGt8ohmFz8nG1N2ockL56Z4hfQ

ADA Coin: DdzFFzCqrhskq33AqGL8XkJZ3bb1hpxJYTd2UrJFKVpXphWG8d1RuhQrKymmKU1zzjvGi7oU69PaJ7nXECRG4Kpvg27Pghf3hpRNhRMy
2024年9月
 1
2345678
9101112131415
16171819202122
23242526272829
30  
カテゴリー