Marlin For OpenPNP固件参数配置

本文最后更新于:2025年4月18日 凌晨

前言

Smoothieboard固件项目的README概述里说该项目适用于LPC17xx微控制器,但将固件烧录到BTT SKR V1.4(LPC1768)主板后,连最基础的移动都无法执行,串口会返回答复:printe pause,使用OpenPNP软件检测固件时也会打印已弃用的警告信息:WARNING:deprecated_MCU

如果烧录到BTT SKR V1.4 Turbo(LPC1769)主板则是可以正常使用,暂不清楚导致该情况的具体原因,而且该项目已经多年未维护,很多功能也不支持;所以尝试使用Marlin固件配置编译OpenPNP固件烧录到BTT SKR V1.4(LPC1768)/ BTT SKR V1.4(LPC1768)主板中进行使用。

这2款主板均可搭配BTT EXP-MOT扩展板使用,扩展之后相当于有8个电机驱动位,这样可以在OpenPNP里配置为2个吸嘴单元,4个吸嘴;本次使用Marlin-2.1.3-b测试版本进行OpenPNP配置(当前稳定版Marlin-2.0.9.7不能定义8个轴,编译时会有报错,尝试了各种方法也没解决😅),以下只列出部分参数,仅供参考;更多详细参数配置请查看 Marlin官方参数配置文档

如果主板的Bootloader为Smoothieware固件的DFU-Bootloader,只要将主板通过USB线连接上电脑后,就会将插入板载TF卡接口的TF卡模拟成一个U盘,这样Marlin每次重新编译生成firmware.bin文件时,可以将新固件复制到U盘中,然后弹出U盘并给主板断电重启,就能直接刷写新固件了。🎉
这两款主板出厂均自带DFU-Bootloader。😀

pins_BTT_SKR_V1_4.h

定义I、J、K、U、V轴限位引脚

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
//#define E0_DIAG_PIN                        P1_26  // E0DET
//#define E1_DIAG_PIN P1_25 // E1DET
#define I_DIAG_PIN P1_26 // I-STOP
#define J_DIAG_PIN P1_25 // J-STOP
#define K_DIAG_PIN P1_21 // K-STOP
#define U_DIAG_PIN P1_19 // U-STOP
#define V_DIAG_PIN P0_28 // V-STOP

#ifdef I_STALL_SENSITIVITY
#define I_STOP_PIN I_DIAG_PIN
#if I_HOME_TO_MIN
#define I_MAX_PIN P1_26
#else
#define I_MIN_PIN P1_26
#endif
#elif ENABLED(I_DUAL_ENDSTOPS)
#ifndef I_MIN_PIN
#define I_MIN_PIN P1_26
#endif
#ifndef I_MAX_PIN
#define I_MAX_PIN P1_26
#endif
#else
#define I_STOP_PIN P1_26 // I-STOP
#endif

#ifdef J_STALL_SENSITIVITY
#define J_STOP_PIN J_DIAG_PIN
#if J_HOME_TO_MIN
#define J_MAX_PIN P1_25
#else
#define J_MIN_PIN P1_25
#endif
#elif ENABLED(J_DUAL_ENDSTOPS)
#ifndef J_MIN_PIN
#define J_MIN_PIN P1_25
#endif
#ifndef J_MAX_PIN
#define J_MAX_PIN P1_25
#endif
#else
#define J_STOP_PIN P1_25 // J-STOP
#endif

#ifdef K_STALL_SENSITIVITY
#define K_STOP_PIN K_DIAG_PIN
#if K_HOME_TO_MIN
#define K_MAX_PIN P1_25
#else
#define K_MIN_PIN P1_25
#endif
#elif ENABLED(K_DUAL_ENDSTOPS)
#ifndef K_MIN_PIN
#define K_MIN_PIN P1_25
#endif
#ifndef K_MAX_PIN
#define K_MAX_PIN P1_25
#endif
#else
#define K_STOP_PIN P1_00 // K-STOP
#endif

#ifdef U_STALL_SENSITIVITY
#define U_STOP_PIN U_DIAG_PIN
#if U_HOME_TO_MIN
#define U_MAX_PIN P1_00
#else
#define U_MIN_PIN P1_00
#endif
#else
#ifndef U_STOP_PIN
#define U_STOP_PIN P1_19 // U-STOP
#endif
#endif

#ifdef V_STALL_SENSITIVITY
#define V_STOP_PIN V_DIAG_PIN
#if V_HOME_TO_MIN
#define V_MAX_PIN P1_00
#else
#define V_MIN_PIN P1_00
#endif
#else
#ifndef V_STOP_PIN
#define V_STOP_PIN P0_28 // V-STOP
#endif
#endif

新增I、J、K、U、V轴限位引脚定义;对于线性轴,必须有对应轴的限位引脚定义,实际归位时需要检测对应引脚逻辑信号,而对于旋转轴,实际使用时无需限位进行检测,但是不定义对应旋转轴的限位引脚时编译时会报错,所以这里给旋转轴也定义了引脚。

配置I、J、K、U、V轴步进控制引脚

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#define I_STEP_PIN                        P2_13
#define I_DIR_PIN P0_11
#define I_ENABLE_PIN P2_12
#ifndef I_CS_PIN
#define I_CS_PIN P1_04
#endif

#define J_STEP_PIN P1_15
#define J_DIR_PIN P1_14
#define J_ENABLE_PIN P1_16
#ifndef J_CS_PIN
#define J_CS_PIN P1_01
#endif

#define K_STEP_PIN P3_25
#define K_DIR_PIN P0_18
#define K_ENABLE_PIN P1_31
#ifndef K_CS_PIN
#define K_CS_PIN P1_20
#endif

#define U_STEP_PIN P0_16
#define U_DIR_PIN P3_26
#define U_ENABLE_PIN P1_22
#ifndef U_CS_PIN
#define U_CS_PIN P1_18
#endif

#define V_STEP_PIN P0_15
#define V_DIR_PIN P0_17
#define V_ENABLE_PIN P1_23
#ifndef V_CS_PIN
#define V_CS_PIN P1_30
#endif

将E0、E1的步进控制引脚都注释掉,然后新增I、J、K、U、V轴的步进控制引脚定义;虽然不修改Marlin会自动配置,但是我测试时发现电机只能朝一个方向,无法换向,暂不清楚是不是Marlin的BUG。💦

Configuration.h

配置信息

1
#define STRING_CONFIG_H_AUTHOR "(dongxunz, openpnp config)"

固件配置作者名及当前配置的类型,可视情况进行修改。

主板型号

1
2
#define MOTHERBOARD BOARD_BTT_SKR_V1_4            //BTT SKR V1.4(LPC1768)
//#define MOTHERBOARD BOARD_BTT_SKR_V1_4_TURBO //BTT SKR V1.4 Turbo(LPC1769)

其他主板型号请查看Marlin固件根目录下的 Marlin/src/core/boards.h,根据自己的主板型号进行修改成对应的即可。

设置串口

BTT SKR V1.4(LPC1768)和BTT SKR V1.4 Turbo(LPC1769)主板都有3个串口,除第一串口必须开启外,其他串口请按需启用。

第一串口

1
2
#define SERIAL_PORT -1
#define BAUDRATE 115200

第二串口

1
2
#define SERIAL_PORT_2 0
#define BAUDRATE_2 115200

第三串口

1
2
//#define SERIAL_PORT_3 1
//#define BAUDRATE_3 250000

第一串口为板载USB,需配置为-1,代表使用USB模拟串行端口。
第二串口为TX0/RX0,需配置为0,官方分配给了TFT屏幕接口。
第三串口为TX3/RX3,需配置为1,官方分配给了WIFI接口。

过高的波特率可能会增加通讯失败的概率(受到环境干扰)。

可选波特率:
2400, 9600, 19200, 38400, 57600, 115200, 250000, 500000, 1000000

机器类型

1
#define CUSTOM_MACHINE_NAME "Pick and Place Machine"

在OpenPNP检测固件时可以显示机器类型。

UUID设置

1
#define MACHINE_UUID "6a9922cf-9c52-4f8e-ae01-a0cb7f963f31"

机器唯一ID,在某些应用程序中用于区分不同的机器。

电机驱动芯片型号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#define X_DRIVER_TYPE  TMC2209
#define Y_DRIVER_TYPE TMC2209
#define Z_DRIVER_TYPE TMC2209
//#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 I_DRIVER_TYPE TMC2209
#define J_DRIVER_TYPE TMC2209
#define K_DRIVER_TYPE TMC2209
#define U_DRIVER_TYPE TMC2209
#define V_DRIVER_TYPE TMC2209
//#define W_DRIVER_TYPE A4988
//#define E0_DRIVER_TYPE A4988
//#define E1_DRIVER_TYPE A4988
//#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

请按照实际使用到的轴数量进行相应启用,本次DIY的贴片机为2个吸嘴单元,4个吸嘴,所以需要8个轴;不同的芯片型号可以混合使用。[1]

可选电机驱动芯片型号:
'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'

注意:
_STANDALONE 后缀表示不启用UART模式,使用STEP模式。

轴配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#ifdef I_DRIVER_TYPE
#define AXIS4_NAME 'A' // :['A', 'B', 'C', 'U', 'V', 'W']
#define AXIS4_ROTATES
#endif
#ifdef J_DRIVER_TYPE
#define AXIS5_NAME 'B' // :['B', 'C', 'U', 'V', 'W']
#define AXIS5_ROTATES
#endif
#ifdef K_DRIVER_TYPE
#define AXIS6_NAME 'C' // :['C', 'U', 'V', 'W']
#define AXIS6_ROTATES
#endif
#ifdef U_DRIVER_TYPE
#define AXIS7_NAME 'U' // :['U', 'V', 'W']
#define AXIS7_ROTATES
#endif
#ifdef V_DRIVER_TYPE
#define AXIS8_NAME 'V' // :['V', 'W']
//#define AXIS8_ROTATES
#endif
#ifdef W_DRIVER_TYPE
#define AXIS9_NAME 'W' // :['W']
//#define AXIS9_ROTATES
#endif

对于额外的轴,需要配置对应的轴名称及是否为旋转轴,名称不能修改,保持默认即可,而是否为旋转轴请按实际情况配置。

挤出机数量

1
#define EXTRUDERS 0

贴片机无需使用挤出机。

温度传感器

1
2
3
4
#define TEMP_SENSOR_0 998
#define TEMP_SENSOR_1 998

#define TEMP_SENSOR_BED 998

将板载的3个温度传感器接口都定义为998,即表示让温度恒定为25°C(不使用温度功能,可视情况修改)。

关闭挤出机PID加热控制

1
//#define PIDTEMP           // See the PID Tuning Guide at https://reprap.org/wiki/PID_Tuning

关闭挤出机的PID加热控制功能。

运动学

1
2
3
4
5
6
#define COREXY
//#define COREXZ
//#define COREYZ
//#define COREYX
//#define COREZX
//#define COREZY

不启用任何运动学即为默认的笛卡尔运动学,请根据实际机器启用对应的运动学。

硬限位

启用上拉

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#define ENDSTOPPULLUPS
#if DISABLED(ENDSTOPPULLUPS)
// Disable ENDSTOPPULLUPS to set pullups individually
#define ENDSTOPPULLUP_XMIN
#define ENDSTOPPULLUP_YMIN
#define ENDSTOPPULLUP_ZMIN
//#define ENDSTOPPULLUP_IMIN
//#define ENDSTOPPULLUP_JMIN
//#define ENDSTOPPULLUP_KMIN
//#define ENDSTOPPULLUP_UMIN
#define ENDSTOPPULLUP_VMIN
//#define ENDSTOPPULLUP_WMIN
//#define ENDSTOPPULLUP_XMAX
//#define ENDSTOPPULLUP_YMAX
//#define ENDSTOPPULLUP_ZMAX
//#define ENDSTOPPULLUP_IMAX
//#define ENDSTOPPULLUP_JMAX
//#define ENDSTOPPULLUP_KMAX
//#define ENDSTOPPULLUP_UMAX
//#define ENDSTOPPULLUP_VMAX
//#define ENDSTOPPULLUP_WMAX
//#define ENDSTOPPULLUP_ZMIN_PROBE
#endif

启用对应轴的硬限位引脚上拉功能,防止引脚信号浮动造成的异常情况。

判定逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#define X_MIN_ENDSTOP_HIT_STATE HIGH
#define X_MAX_ENDSTOP_HIT_STATE HIGH
#define Y_MIN_ENDSTOP_HIT_STATE HIGH
#define Y_MAX_ENDSTOP_HIT_STATE HIGH
#define Z_MIN_ENDSTOP_HIT_STATE HIGH
#define Z_MAX_ENDSTOP_HIT_STATE HIGH
#define I_MIN_ENDSTOP_HIT_STATE LOW
#define I_MAX_ENDSTOP_HIT_STATE LOW
#define J_MIN_ENDSTOP_HIT_STATE LOW
#define J_MAX_ENDSTOP_HIT_STATE LOW
#define K_MIN_ENDSTOP_HIT_STATE LOW
#define K_MAX_ENDSTOP_HIT_STATE LOW
#define U_MIN_ENDSTOP_HIT_STATE LOW
#define U_MAX_ENDSTOP_HIT_STATE LOW
#define V_MIN_ENDSTOP_HIT_STATE HIGH
#define V_MAX_ENDSTOP_HIT_STATE HIGH
#define W_MIN_ENDSTOP_HIT_STATE HIGH
#define W_MAX_ENDSTOP_HIT_STATE HIGH
#define Z_MIN_PROBE_ENDSTOP_HIT_STATE HIGH

各轴对应的硬限位逻辑电平判定,根据实际限位接线及触发信号进行修改。

检查归位限位信号

1
#define DETECT_BROKEN_ENDSTOP

检查归位移动时限位开关是否卡住或断开。

每移动1mm所需脉冲数

1
#define DEFAULT_AXIS_STEPS_PER_UNIT   { 160, 160, 160, 407.43666, 407.43666, 407.43666, 407.43666, 160 }

分别代表X、Y、Z、I、J、K、U、V轴每移动1mm需要多少脉冲,计算公式:

1
2
3
4
5
6
7
8
同步带传动(通常是X,Y轴):
(360°/步距角*细分数)/(齿间距*齿数)=(360/1.8*32)/(2*20)=160

丝杆传动(通常是Z轴):
(360°/步距角*细分数)/丝杆导程=(360/1.8*16)/8=400

齿轮传动(通常是E轴):
(360°/步距角*细分数)/挤出轮周长=(360/1.8*16)/(7.2Π)=141.542817

启用M92功能

1
#define EDITABLE_STEPS_PER_UNIT

M92可以设置对应轴每移动1mm所需脉冲数,调试时可启用,后续调试好后可以关闭该功能。

默认最大进给率

1
#define DEFAULT_MAX_FEEDRATE          { 200, 200, 5, 50, 50, 50, 50, 5 }

分别代表X、Y、Z、I、J、K、U、V轴的默认最大进给率;对于皮带传动,单位为:linear=mm/s,对于旋转运动,单位为:rotational=°/s。

默认最大加速度

1
#define DEFAULT_MAX_ACCELERATION      { 3000, 3000, 100, 10000, 10000, 10000, 10000, 100 }

分别代表X、Y、Z、I、J、K、U、V轴的默认最大加速度;对于皮带传动,单位为:linear=mm/(s^2),对于旋转运动,单位为:rotational=°/(s^2)。

默认加速度

1
2
3
#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 5000 // X, Y, Z acceleration for travel (non printing) moves

分别代表打印时默认加速度,默认回抽加速度,默认空驶加速度(速度随时间变化);对于皮带传动,单位为:linear=mm/(s^2),对于旋转运动,单位为:rotational=°/(s^2)。

S曲线加速度

1
#define S_CURVE_ACCELERATION

控制加速度曲线(S曲线),可以减少机器震动和共振,电机运动更安静平稳。[2]

Z探针

1
//#define Z_MIN_PROBE_USES_Z_MIN_ENDSTOP_PIN

关闭Z探针功能。

喷嘴偏移

1
#define NOZZLE_TO_PROBE_OFFSET { 0, 0, 0 }

喷嘴偏移都改为0即可。

电机使能

1
2
3
4
5
6
7
8
9
10
#define X_ENABLE_ON LOW
#define Y_ENABLE_ON LOW
#define Z_ENABLE_ON LOW
//#define E_ENABLE_ON LOW // For all extruders
#define I_ENABLE_ON LOW
#define J_ENABLE_ON LOW
#define K_ENABLE_ON LOW
#define U_ENABLE_ON LOW
#define V_ENABLE_ON LOW
//#define W_ENABLE_ON LOW

各轴电机使能的逻辑电平,LOW:低电平,HIGH:高电平。

电机方向

1
2
3
4
5
6
7
8
9
#define INVERT_X_DIR false
#define INVERT_Y_DIR false
#define INVERT_Z_DIR false
#define INVERT_I_DIR true
#define INVERT_J_DIR true
#define INVERT_K_DIR true
#define INVERT_U_DIR true
#define INVERT_V_DIR false
//#define INVERT_W_DIR false

各轴电机旋转方向逻辑电平,当电机旋转方向不对时,反转对应的逻辑电平信号即可。

归位方向

1
2
3
4
5
6
7
8
9
#define X_HOME_DIR -1
#define Y_HOME_DIR -1
#define Z_HOME_DIR -1
#define I_HOME_DIR -1
#define J_HOME_DIR -1
#define K_HOME_DIR -1
#define U_HOME_DIR -1
#define V_HOME_DIR -1
//#define W_HOME_DIR -1

各轴归位时移动的方向,-1:MIN,1:MAX。

机器尺寸

1
2
#define X_BED_SIZE 500
#define Y_BED_SIZE 500

X、Y轴最大移动的距离,请按照实际情况修改。

归位坐标位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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 200
#define I_MIN_POS -9999999
#define I_MAX_POS 9999999
#define J_MIN_POS -9999999
#define J_MAX_POS 9999999
#define K_MIN_POS -9999999
#define K_MAX_POS 9999999
#define U_MIN_POS -9999999
#define U_MAX_POS 9999999
#define V_MIN_POS 0
#define V_MAX_POS 200
//#define W_MIN_POS 0
//#define W_MAX_POS 50

各轴归位后的坐标点,对于线性轴,指机器实际限位开关的位置,对于旋转轴,最小设置为-9999999,最大设置为9999999。

软限位

最小软限位

1
2
3
4
5
6
7
8
9
10
11
12
#define MIN_SOFTWARE_ENDSTOPS
#if ENABLED(MIN_SOFTWARE_ENDSTOPS)
#define MIN_SOFTWARE_ENDSTOP_X
#define MIN_SOFTWARE_ENDSTOP_Y
#define MIN_SOFTWARE_ENDSTOP_Z
//#define MIN_SOFTWARE_ENDSTOP_I
//#define MIN_SOFTWARE_ENDSTOP_J
//#define MIN_SOFTWARE_ENDSTOP_K
//#define MIN_SOFTWARE_ENDSTOP_U
#define MIN_SOFTWARE_ENDSTOP_V
#define MIN_SOFTWARE_ENDSTOP_W
#endif

是否启用各轴最小软限位功能,对于线性轴,建议开启,对于旋转轴,建议关闭。

最大软限位

1
2
3
4
5
6
7
8
9
10
11
12
#define MAX_SOFTWARE_ENDSTOPS
#if ENABLED(MAX_SOFTWARE_ENDSTOPS)
#define MAX_SOFTWARE_ENDSTOP_X
#define MAX_SOFTWARE_ENDSTOP_Y
#define MAX_SOFTWARE_ENDSTOP_Z
//#define MAX_SOFTWARE_ENDSTOP_I
//#define MAX_SOFTWARE_ENDSTOP_J
//#define MAX_SOFTWARE_ENDSTOP_K
//#define MAX_SOFTWARE_ENDSTOP_U
#define MAX_SOFTWARE_ENDSTOP_V
#define MAX_SOFTWARE_ENDSTOP_W
#endif

是否启用各轴最大软限位功能,对于线性轴,建议开启,对于旋转轴,建议关闭。

启用详细记录

1
#define DEBUG_LEVELING_FEATURE

启用执行G28、G29、M48代码的详细记录,需要占用较大的flash空间,请按需考虑是否开启。

手动设置旋转轴起始位置

1
2
3
4
5
6
7
8
9
//#define MANUAL_X_HOME_POS 0
//#define MANUAL_Y_HOME_POS 0
//#define MANUAL_Z_HOME_POS 0
#define MANUAL_I_HOME_POS 0
#define MANUAL_J_HOME_POS 0
#define MANUAL_K_HOME_POS 0
#define MANUAL_U_HOME_POS 0
//#define MANUAL_V_HOME_POS 0
//#define MANUAL_W_HOME_POS 0

对于旋转轴,需要启用并设置为0。

归位速度

1
#define HOMING_FEEDRATE_MM_M { (50*60), (50*60), (4*60), (30*60), (30*60), (30*60), (30*60), (4*60) }

各轴归位时的速度,对于线性轴,单位为mm/min,对于旋转轴,单位为:°/min。

验证归位

1
#define VALIDATE_HOMING_ENDSTOPS

开启归位移动时是否有限位触发。

EEPROM存储

1
//#define EEPROM_SETTINGS     // Persistent storage with M500 and M501

是否启用EEPROM存储功能,调试阶段建议关闭,等调试完成后开启即可。

打印计数功能

1
//#define PRINTJOB_TIMER_AUTOSTART

贴片机不需要打印计数功能。

无LCD菜单功能

1
#define NO_LCD_MENUS

贴片机不需要LCD菜单功能。

Configuration_adv.h

配置驱动参数

1
2
3
4
5
6
7
8
9
#if AXIS_IS_TMC_CONFIG(X)
#define X_CURRENT 800 // (mA) RMS current. Multiply by 1.414 for peak current.
#define X_CURRENT_HOME X_CURRENT // (mA) RMS current for homing. (Typically lower than *_CURRENT.)
#define X_MICROSTEPS 32 // 0..256
#define X_RSENSE 0.11 // Multiplied x1000 for TMC26X
#define X_CHAIN_POS -1 // -1..0: Not chained. 1: MCU MOSI connected. 2: Next in chain, ...
//#define X_INTERPOLATE true // Enable to override 'INTERPOLATE' for the X axis
//#define X_HOLD_MULTIPLIER 0.5 // Enable to override 'HOLD_MULTIPLIER' for the X axis
#endif

此设置只对TMC驱动才有效,上述配置只列举X轴,其他轴的驱动配置以此类推;

X_CURRENT:电机驱动电流
X_CURRENT_HOME:无限位归位时的电流
X_MICROSTEPS:驱动细分数
X_RSENSE:采样电阻阻值
X_CHAIN_POS:SPI模式的CS
X_INTERPOLATE:TMC驱动插值算法(可降低打印机移动时的噪音,但是会引入少量系统位置误差)
X_HOLD_MULTIPLIER:保持电流

TMC驱动stealthChop模式

1
2
3
4
5
6
7
8
9
10
11
#if HAS_STEALTHCHOP
#define STEALTHCHOP_XY
#define STEALTHCHOP_Z
#define STEALTHCHOP_I
#define STEALTHCHOP_J
#define STEALTHCHOP_K
#define STEALTHCHOP_U
#define STEALTHCHOP_V
#define STEALTHCHOP_W
#define STEALTHCHOP_E
#endif

当Configuration.h -> X_DRIVER_TYPE 驱动器型号配置为支持stealthChop模式的TMC驱动时,会默认启用stealthChop模式,如果不想使用可以注释掉对应的(实测Marlin使用spreadCycle模式时,电机运行时有细微的抖动,且噪音明显,不建议启用)。
stealthChop模式:噪音更小,但是会引入系统误差。
spreadCycle模式:提供更大的扭矩和更高的精度,但是会有明显噪音。

优化斩波器参数

1
#define CHOPPER_TIMING CHOPPER_DEFAULT_24V

使用预定义的参数集优化spreadCycle斩波器参数,请按照驱动供电电压来设置正确的斩波器参数。

可选参数:
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 Průša firmware for MK3 (24V)
CHOPPER_MARLIN_119 // Old defaults from Marlin v1.1.9

特别鸣谢


Marlin For OpenPNP固件参数配置
https://dongxunz.github.io/2025/04/11/贴片机/Marlin For OpenPNP固件参数配置/
作者
dongxunz
发布于
2025年4月11日
许可协议