简单人肉校正

忘了哪个人的博客里面曾经提到,Delta 系的打印机最重要的是对称,自认为我的这台 Kossel XL, 每个环节都力图精准,对称的问题应该不大。

简单调平可以这样做:

  • 用皮尺测量一下 XYZ 三轴的限位器是不是一样高,尽量使得三个限位器在同一高度上。

  • 首先看看 Z 轴的最大值是多少:G28 让打印机Home, 记住 LCD 上 Z 的取值, 我的是 258 (mm),然后 G1 Z200, G1 Z100, G1 50, … 直到喷头碰到玻璃板,限位器开关触发(可以用 M119 来检测限位器的状态,这里 z_min 应该 Triggered.) 再一次记下 Z 的值(这次是 11 mm). 说明 Z-Max 应该是 258-11 = 247mm.

  • 然后将打印头移到玻璃板上方 1~2 mm 处, 例如用: G1 Z12 或 G1 Z13. 然后前后左右移动打印头,用 G1 X10, X20, X30 … G1 X-10, X-20,… G1 Y10, Y-10, …. 看看喷头是否会撞到玻璃板。

  • 我这里的情况是四个方向都撞到了,说明打印头 X Y 方向不是水平的,而是一个向上凸的曲面。

如果是我这种情况,这个网站:builda3dprinter

校正办法

  • 中间向上凸的时候:增加 DELTA_RADIUS 的值以变平。增加的办法是 M666 R设定值(参考下文中表格)然后 M500 保存,M501 检查新值。根据我的经验,增加的量和边缘的 Z 高度成正比。作者用 DELTA_SMOOTH_ROD_OFFSET 的值也是等效的。
  • 中间向下凸的时候:减少 DELTA_RADIUS 的值以变平。

人肉校正的结果是不错的!DELTA_RADIUS 设置为 146mm, Z_HEIGHT 设为 245mm。整体中心与最靠近三柱的 ABC 三点的高度差可以控制在 ± 1mm 之内!【更新:实际上我们可以手动调平到四周三点和中心点的误差不超过 0.3mm】

打印件误差校正

  • 可以打印一个 100x2x2 mm 的长方形,用 OpenSCAD 很容易实现(cube([100,2,2]) 即可)。然后打印出来,测量打印件的长度,修正 Diagonal_Rod 的长度:

测量值/100 * 原长度就是杆子的新长度。

自动校正

我用的是 RichCattell 的 Marlin 固件。自动调平号称这个固件的强项。今天我们来谈谈 RichCattell 的自动校正设置。

这里的自动校正可以自动纠正如下设置:

  • Delta Radius
  • Delta Rod Length
  • Software Endstop Offsets
  • Z-Height correction
  • Tower Position Error Correction (独立于半径和每个柱的径向位置调节)

上述这些变量都可以通过 M666 手动调节。

下面这些命令是这个版本新增的:

  • G30: G30 会检测 指定点,或者默认情况下检测圆心以及圆周上点的 Z 高度,

    G30 Probe bed and produce a report of the current state of the printer, e.g.:

    Z-Tower Endstop Offsets -0.0125 X:-3.05 Y:-1.83 Z:-2.69 -0.0000 -0.0000

    Tower Position Adjust -0.0625 A:-0.04 B:0.05 C:-0.01 -0.0375 -0.0250 I:0.25 J:-1.25 K:-0.37 -0.0250 Delta Radius: 109.5965 X-Tower Y-Tower Diag Rod: 224.5935

    This option does not change any settings, but is useful when manually calibrating a printer, using the M666 command to change values.

    G30 Xnn Ynn Probe bed at specified X,Y point and show z-height and delta carriage positions, e.g.: Bed Z-Height at X:30.00 Y:30.00 = 0.0000 Carriage Positions: [176.40, 207.77, 209.52]

    G30 A 会开始自动校正所有参数,最好之前用 M502 导入默认值,M500 保存之,然后再 G30 A. 自动校正之后,用 M500 保存。

命令 意义 结果
M666 L 列出当前设置 M666 L
Current Delta geometry values:
X (Endstop Adj): -3.05
Y (Endstop Adj): -1.83
Z (Endstop Adj): -2.69
P (Z-Probe Offset): X0.00 Y10.00 Z-5.60
A (Tower A Position Correction): -0.04
B (Tower B Position Correction): 0.05
C (Tower C Position Correction): -0.02
I (Tower A Radius Correction): 0.25
J (Tower B Radius Correction): -1.25
K (Tower C Radius Correction): -0.37
R (Delta Radius): 109.60
D (Diagonal Rod Length): 224.59
H (Z-Height): 255.73
M666 R200 设置 delta radius 至 200mm
M666 H350.0 设置 Z-Height 为 350.0mm

要设置那条命令,只需要加参数名:见上表,以及参数值(和参数名连在一起书写)即可。

所有参数值都可以通过 M501 从 EEPROM 中读取;或通过 M500 保存到 EEPROM 中。

#define Z_PROBE_DEPLOY_START_LOCATION {20, 96, 30, 0}
#define Z_PROBE_DEPLOY_END_LOCATION {5, 96, 30, 0}
#define Z_PROBE_RETRACT_START_LOCATION {49, 84, 20, 0}
#define Z_PROBE_RETRACT_END_LOCATION {49, 84, 1, 0}

Set precision for autocalibration G30 function – calibration will complete when this value is reached – all probed point have to be at 0 +/- 0.015mm (for 0.03 setting below)

#define AUTOCALIBRATION_PRECISION 0.03 // mm

Set distance to probe bed at for G30 function

#define BED_DIAMETER 170 // mm