forked from zellneralex/klipper_config
-
Notifications
You must be signed in to change notification settings - Fork 0
/
printer.cfg
465 lines (432 loc) · 24.2 KB
/
printer.cfg
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
##===================== SKR 1.4 Pin Definitions ===================
# +--------------+------+------+------+------+------+ +----+------+------+------+
# | | X | Y | Z | E0 | E1 | | | 0 | 1 | BED |
# +--------------+------+------+------+------+------+ +----+------+------+------+
# | STEP | 2.2 | 0.19 | 0.22 | 2.13 | 1.15 | | HE | 2.7 | 2.4 | 2.5 |
# +--------------+------+------+------+------+------+ +----+------+------+------+
# | DIR | 2.6 | 0.20 | 2.11 | 0.11 | 1.14 | | TH | 0.24 | 0.23 | 0.25 |
# +--------------+------+------+------+------+------+ +----+------+------+------+
# | ENABLE | 2.1 | 2.8 | 0.21 | 2.12 | 1.16 |
# +--------------+------+------+------+------+------+ +------+-------+-------+---------+
# | DIAG/ENDSTOP | 1.29 | 1.28 | 1.27 | 1.26 | 1.25 | | FAN0 | SERVO | PROBE | PWR_DET |
# +--------------+------+------+------+------+------+ +------+-------+-------+---------+
# | UART | 1.10 | 1.9 | 1.8 | 1.4 | 1.1 | | 2.3 | 2.0 | 0.10 | 1.0 |
# +--------------+------+------+------+------+------+ +------+-------+-------+---------+
# MCU definition
## MCU for X/Y/E steppers main MCU
## [X in X] - B Motor
## [Y in Y] - A Motor
## [E in E0] - Extruder
[mcu]
serial: /dev/serial/by-id/usb-Klipper_lpc1769_1840010F871C4AAF863E7C5DC32000F5-if00
restart_method: command
## MCU for Z steppers
## [Z in X] - Front Left
## [Z1 in Y] - Rear Left
## [Z2 in Z] - Rear Right
## [Z3 in E0] - Front Right
[mcu z]
serial: /dev/serial/by-id/usb-Klipper_lpc1769_07300110871C4AAFBF427C5DC72000F5-if00
restart_method: command
## MCU for adxl345 acelometer
[mcu rpi]
serial: /tmp/klipper_host_mcu
# General Printer definition
[printer]
kinematics: corexy
max_velocity: 450
max_accel: 7000
max_accel_to_decel: 4000
max_z_velocity: 30
max_z_accel: 700
square_corner_velocity: 5.0
# Stepper Settings
[include stepper.cfg]
[include tmc.cfg]
# Extruder & Bed; Heater Verification (default values)
[include heater.cfg]
#[include heater_verify.cfg]
# Probe and Gantry Adjustment Routines
[include probe_qgl.cfg]
# Fan Control & Extra Thermistor
[include fan.cfg]
# Caselight Control
[include caselight.cfg]
# Homing Routines
[include homing.cfg]
# Bed Mesh
[include bed_mesh.cfg]
# Resonance compensation
[include input_shaper.cfg]
# Display & Custom Menu
[include lcd.cfg]
# Macros
[include basic_macro.cfg]
[include macro.cfg]
[include park_macro.cfg]
[include debug_macro.cfg]
# moonraker/mainsail
[include webclient.cfg]
# Power relays
[include power.cfg]
# print and service time storage
[include printtime.cfg]
# probe accuracy test
#[include test_probe_accuracy.cfg]
# flexplate select menu
[include flexplate.cfg]
# filament and pressure advance
[include filament.cfg]
[include pressure_advance.cfg]
# filament runout sensor
[include runout.cfg]
# force move used only if gantry is at z max
[include force_move.cfg]
# MagProbe instead of Sensor
[include magprobe.cfg]
# Z_calibration needs <https://github.com/protoloft/klipper_z_calibration>
[include z_calibration.cfg]
# timelaps needs <https://github.com/mainsail-crew/moonraker-timelapse.git>
[include timelapse.cfg]
# Enable Execute Object (beta) use https://github.com/troy-jacobson/klipper/tree/exclude-object-pr
[exclude_object]
# File location of stored varibales
[save_variables]
filename: /home/pi/klipper_config/.variables.stb
# Virtual SD Card
[virtual_sdcard]
path: /home/pi/sdcard
# macro that run at klipper start
[delayed_gcode _INIT]
initial_duration: 1
gcode:
_USER_VARIABLE
_CHECK_CONSITENT
_EXECUTE_AT_INIT
[gcode_macro _EXECUTE_AT_INIT]
description: Helper: Everything that should run at klipper start
gcode:
{% set user = printer['gcode_macro _USER_VARIABLE'] %}
{% if 'gcode_macro _MENU_LIMITS' is in printer %} _MENU_LIMITS INDEX=4 {% endif %}
{% if printer.save_variables.variables.filament_sensor %} _RESTORE_FILAMENT_SENSOR {% endif %}
{% if user.hw.filter.ena %} _CHECK_FILTER {% endif %}
{% if user.hw.relay.ena %} _HEATER_ON {% endif %}
{% if user.hw.display.ena %} UPDATE_DELAYED_GCODE ID=_DISPLAY_INIT DURATION=2 {% endif %}
_PRINT_AR T="Klipper INIT done"
[gcode_macro _CHECK_CONSITENT]
description: Helper: Check that some criterias are meet in the printer.cfg
gcode:
{% set user = printer['gcode_macro _USER_VARIABLE'] %}
{% set text = ["CONFIG: ERROR"] %}
{% if user.run is not defined %}
{% set _dummy = text.append("_USER_VARIABLE macro missing") %}
{% elif not user.run %}
{% set _dummy = text.append("_USER_VARIABLE macro not executed") %}
{% endif %}
{% if user.hw.auto_z_offset.auto and not user.hw.mag_probe.ena %}
{% set _dummy = text.append("[z_calibration] defined but no MagProbe\n") %}
{% endif %}
{% if 'save_variables' not in printer %}
{% set _dummy = text.append("[save_variables] missing") %}
{% endif %}
{% if 'virtual_sdcard' not in printer %}
{% set _dummy = text.append("[virtual_sdcard] missing") %}
{% endif %}
{% if text|length > 1 %}
{action_respond_info(text|join("\n"))}
{% endif %}
[gcode_macro _USER_VARIABLE]
description: Helper: Contains User defined printer variables
##### see the readme for the variable definition #####
variable_hw: {}
variable_homing: {}
variable_z_hop: 0
variable_speed: {}
variable_probe: {}
variable_park: {}
variable_filament: {}
variable_purge: {}
variable_print_start: {}
variable_unload_sd: False
variable_prime: {}
variable_respond: {}
variable_peripheral: {}
variable_run: False
gcode:
###################################################################
## start of user defines ##
## this needs to be changed for your printer ##
###################################################################
#{% set user_z_endstop_xy = [232.0,355.0] %} ; z Endstop position insight right profil
{% set user_z_endstop_xy = [123.0,355.0] %} ; z Endstop position insight left profil
{% set user_z_endstop_hop = 7.5 %} ; z hop for moves e.g homimg
{% set user_z_home_current = 0.3 %} ; reduced homing curent for z
{% set user_home_accel = 1200 %} ; reduced ACCEL for homing
{% set user_bed_y_offset = 5 %} ; Endstop offset to bed max y
##### all user defined speeds [mm/sec] #####
{% set user_z_hop_speed = 15 %} ; default z_hop speed
{% set user_retract_speed = 30 %} ; default retract/extrude speed
{% set user_travel_speed = 300 %} ; travel speed e.g park, dock ...
{% set user_probe_dock_speed = 50 %} ; dock speed for attach/dock
{% set user_filament_load_speed = 50 %} ; load/unload speed
{% set user_wipe_speed = 60 %} ; wipe move speed
{% set user_prime_speed = 25 %} ; prime line speed
##### Mag Probe #####
{% set user_probe_dock_pos = [0,355] %} ; position of the dock
{% set user_probe_delta_x = 30 %} ; x offset for position before dock
{% set user_probe_delta_y = -30 %} ; y offset to move probe out of dock
{% set user_z_probe_hop = 15.5 %} ; z minimum heigh to avoid crash
##### Park Position #####
{% set user_park_xy_delta = 25 %} ; distance for x or y from the edge
{% set user_park_z_max_delta = 40 %} ; insure to do not hit cam in front
{% set user_park_z_min = 30 %} ; minimal z from bed
{% set user_park_pause_z_delta = 2.0 %} ; distance to increase head while PAUSE/CANCEL_PRINT
{% set user_park_at_cancel = False %} ; park head at CANCEL_PRINT if not paused [False/True]
##### Filament #####
{% set user_extruder_min_add = 30 %} ; Temperature add to min Extruder temp
{% set user_load_distance = 90 %} ; load distance while load filament
{% set user_load_extrude = 50 %} ; extrude distance while load filament
{% set user_unload_distance = 75 %} ; unload distance while unload filament
{% set user_retract_end = 2 %} ; retract distance at PRINT_END or CANCEL_PRINT
{% set user_retract_pause = 1 %} ; retract/extrude distance while PAUSE or RESUME
##### Purge & Brush #####
{% set user_brush_pos = 'right' %} ; left/right profile used
#{% set user_brush_x_middle = 100 %} ; mid point of brush at left profile
{% set user_brush_x_middle = 250 %} ; mid point of brush at right profil
{% set user_brush_x_width = 40 %} ; width of brush
{% set user_brush_y_start = 351 %} ; start point at y
{% set user_wipe_z = 1.0 %} ; z for wipe moves
{% set user_wipe_cnt = 5 %} ; number of full wipes
{% set user_z_purge = 2.5 %} ; z above purge bucket
##### PRINT_START/STOP #####
{% set user_print_start_bed_up = 10 %} ; bed temp raise for faster heat soak
{% set user_print_start_ival = 1 %} ; wait time per call in sec
{% set user_print_start_extruder_time = 3 %} ; time in minutes before soak end to start extruder heating
{% set user_print_start_bed_time = 3 %} ; time in minutes before soak end to set bed target temp
{% set user_print_start_prime_mult = 2 %} ; multiplier for prime line hight
{% set user_unload_sd = True %} ; unload sd file at PRINT_END or CANCEL_PRINT [True,False]
##### Prime Line #####
{% set user_prime_start_xy = [5.0,30.0] %} ; x&y start coordinates of prime line
{% set user_prime_z = 0.34 %} ; default prime layer hight
{% set user_prime_dir = 'Y+' %} ; direction of prime line (X+, X-, Y+, Y-)
{% set user_prime_spacing = 0.4 %} ; distance between line, move will allways positive
{% set user_prime_lenght = 220 %} ; length of prime line
{% set user_prime_seg = 11 %} ; segments in that the prime line is splitted
{% set user_prime_extrude_per_seg = 2 %} ; amount of filament extruded per segment
##### Respond defaults #####
# Default behaivior for output messages of the macro 0: no output 1: console output
{% set user_respond_set_z_current = 0 %} ; Macro: _SET_Z_CURRENT
{% set user_respond_set_acc = 0 %} ; Macro: _SET_ACC
{% set user_respond_probe_action = 1 %} ; Macro: _PROBE_ACTION
{% set user_respond_layer = 0 %} ; Macro: _LAYER
##### Peripheral #####
{% set user_filter_on = 0.5 %} ; filter on value
{% set user_filter_use_time = 80 %} ; Nevermore change warning limit
{% set user_vent_on = 15 %} ; chamber fan on temperature
{% set user_caselight_on = 0.4 %} ; caselight on value
{% set user_fan_run_after_print = 30 %} ; time in min to run filter and chamber exhaust after print finsih
###################################################################
## end of user defines ##
###################################################################
# get printer limits & cfg value
{% set min = printer.toolhead.axis_minimum %}
{% set max = printer.toolhead.axis_maximum %}
{% set cfg_endstop_z_offset = printer.configfile.settings.stepper_z.position_endstop|default(0.0)|float %}
# detect additional hardware
{% set hw_dic = {'display' : {'ena' : True if 'neopixel neo_display' in printer.configfile.settings
else False},
'chamber' : {'type': 'sensor' if 'temperature_sensor chamber' in printer.configfile.settings
else 'fan' if 'temperature_fan chamber' in printer.configfile.settings
else 'none'},
'caselight' : {'ena' : True if 'output_pin caselight' in printer.configfile.settings
else False},
'filter' : {'ena' : True if 'fan_generic filter' in printer.configfile.settings
else False},
'runout' : {'type': 'switch' if 'filament_switch_sensor runout' in printer.configfile.settings
else 'motion' if 'filament_motion_sensor runout' in printer.configfile.settings
else 'file' if 'save_variables' in printer and filament_loaded in printer.save_variables.variables
else 'none'},
'relay' : {'ena' : True if 'output_pin extruder_relay' in printer.configfile.settings and
'output_pin heater_bed_relay' in printer.configfile.settings
else False},
'auto_z_offset' : {'type': 'z_calib+flexplate' if 'z_calibration' in printer and 'save_variables' in printer and 'plates' in printer.save_variables.variables
else 'z_calib' if 'z_calibration' in printer
else 'flexplate' if 'save_variables' in printer and 'plates' in printer.save_variables.variables
else 'none'},
'mag_probe' : {'ena' : True if printer['gcode_macro _MAG_PROBE'] is defined or 'dockable_probe' in printer
else False},
'endstop_temp' : {'ena' : True if 'temperature_sensor endstop' in printer.configfile.settings
else False}}%}
{% set _dummy = hw_dic.chamber.update({'ena': True if hw_dic.chamber.type != 'none' else False}) %}
{% set _dummy = hw_dic.chamber.update({'fan': True if hw_dic.chamber.type == 'fan' else False}) %}
{% set _dummy = hw_dic.runout.update({'ena': True if hw_dic.runout.type != 'none' else False}) %}
{% set _dummy = hw_dic.runout.update({'sensor': True if hw_dic.runout.type == 'switch' or hw_dic.runout.type == 'motion'
else False}) %}
{% set _dummy = hw_dic.auto_z_offset.update({'ena': True if hw_dic.auto_z_offset.type != 'none' else False}) %}
{% set _dummy = hw_dic.auto_z_offset.update({'auto': True if hw_dic.auto_z_offset.type == 'z_calib+flexplate' or
hw_dic.auto_z_offset.type == 'z_calib'
else False}) %}
{% set _dummy = hw_dic.auto_z_offset.update({'manu': True if hw_dic.auto_z_offset.type == 'z_calib+flexplate' or
hw_dic.auto_z_offset.type == 'flexplate'
else False}) %}
# calc needed values
{% set bed = {'min': {'x': min.x, 'y': min.y , 'z': 0 },
'max': {'x': max.x, 'y': max.y - user_bed_y_offset, 'z': max.z}} %}
{% set calc_center = {'x': (bed.max.x - bed.min.x) / 2,
'y': (bed.max.y - bed.min.y) / 2,
'z': (bed.max.z - bed.min.z) / 2} %}
{% set calc_park = {'min': {'x': bed.min.x + user_park_xy_delta,
'y': bed.min.y + user_park_xy_delta,
'z': bed.min.z + user_park_z_min},
'max': {'x': bed.max.x - user_park_xy_delta,
'y': bed.max.y - user_park_xy_delta,
'z': bed.max.z - user_park_z_max_delta}} %}
{% set calc_z_endstop_z = cfg_endstop_z_offset|round(0, 'ceil') + 1.0 if cfg_endstop_z_offset > 0 else 1.0 %}
{% set calc_z_hop = user_z_probe_hop if hw_dic.mag_probe.ena and user_z_probe_hop > user_z_endstop_hop
else user_z_endstop_hop %}
{% set calc_brush = {'start': user_brush_x_middle - user_brush_x_width / 2,
'end' : user_brush_x_middle + user_brush_x_width / 2} %}
{% set calc_purge = {'x': (min.x + calc_brush.start) / 2 if user_brush_pos|lower == 'left'
else max.x - (max.x - calc_brush.end) / 2,
'y': max.y} %}
{% set calc_wipe = {'start': {'x': calc_brush.start if user_brush_pos|lower == 'left'
else calc_brush.end,
'y': user_brush_y_start},
'end' : {'x': calc_brush.end if user_brush_pos|lower == 'left'
else calc_brush.start,
'y': max.y}} %}
# prepare dictonaries
{% set homing_dic = {'z_endstop': {'x':user_z_endstop_xy[0], 'y':user_z_endstop_xy[1], 'z':calc_z_endstop_z, 'hop':user_z_endstop_hop},
'z_current': user_z_home_current,
'accel' : user_home_accel} %}
{% set purge_dic = {'purge' : {'x':calc_purge.x, 'y':calc_purge.y, 'z':user_z_purge},
'wipe' : {'start' : {'x': calc_wipe.start.x, 'y': calc_wipe.start.y, 'z':user_wipe_z},
'end' : {'x': calc_wipe.end.x, 'y': calc_wipe.end.y, 'z':user_wipe_z},
'offset' : (calc_wipe.end.y - calc_wipe.start.y) / user_wipe_cnt,
'cnt' : user_wipe_cnt}} %}
{% set probe_dic = {'dock' : {'x' : user_probe_dock_pos[0],
'y' : user_probe_dock_pos[1] + user_probe_delta_y},
'store' : {'x' : user_probe_dock_pos[0] + user_probe_delta_x,
'y' : user_probe_dock_pos[1]}} %}
{% set speed_dic = {'z_hop' : (user_z_hop_speed * 60),
'retract' : (user_retract_speed * 60),
'travel' : (user_travel_speed * 60),
'dock' : (user_probe_dock_speed * 60),
'load' : (user_filament_load_speed * 60),
'wipe' : (user_wipe_speed * 60),
'prime' : (user_prime_speed * 60)} %}
{% set park_dic = {'bed' : {'x': calc_center.x, 'y': calc_center.y, 'z': calc_park.min.z},
'center' : {'x': calc_center.x, 'y': calc_center.y, 'z': calc_center.z},
'front' : {'x': calc_center.x, 'y': calc_park.min.y, 'z': calc_park.max.z},
'frontlow' : {'x': calc_center.x, 'y': calc_park.min.y, 'z': calc_park.min.z},
'rear' : {'x': calc_park.min.x, 'y': calc_park.max.y, 'z': calc_park.max.z},
'pause' : {'x': calc_purge.x, 'y': calc_purge.y, 'dz': user_park_pause_z_delta},
'park_at_cancel': user_park_at_cancel} %}
{% set filament_dic = {'load_distance' : user_load_distance,
'load_extrude' : user_load_extrude,
'unload_distance' : user_unload_distance,
'retract' : {'end' : user_retract_end,
'pause' : user_retract_pause,
'cancel': user_retract_end - user_retract_pause}} %}
{% set prime_dic = {'pos' : {'x':user_prime_start_xy[0], 'y':user_prime_start_xy[1], 'z':user_prime_z},
'dir' : user_prime_dir,
'spacing' : user_prime_spacing,
'length_per_seg' : user_prime_lenght / user_prime_seg,
'seg' : user_prime_seg,
'extrude_per_seg' : user_prime_extrude_per_seg} %}
{% set print_start_dic = {'bed_up' : user_print_start_bed_up|float|round(1),
'ival' : user_print_start_ival|int,
'time' : {'extruder' : (user_print_start_extruder_time * 60)|int,
'bed' : (user_print_start_bed_time * 60)|int},
'prime_mult' : user_print_start_prime_mult|float} %}
{% set respond_dic = {'z_current' : user_respond_set_z_current,
'acc' : user_respond_set_acc,
'probe_action' : user_respond_probe_action,
'layer' : user_respond_layer} %}
{% set peripheral_dic = {'filter' : {'on_val' : user_filter_on,
'warning' : user_filter_use_time,
'run_after_print' : (user_fan_run_after_print * 60)},
'vent' : {'on_val' : user_vent_on,
'run_after_print' : ((user_fan_run_after_print * 60) + 5)},
'caselight' : {'on_val' : user_caselight_on}} %}
# store results in variable
SET_GCODE_VARIABLE MACRO=_USER_VARIABLE VARIABLE=hw VALUE="{hw_dic}"
SET_GCODE_VARIABLE MACRO=_USER_VARIABLE VARIABLE=homing VALUE="{homing_dic}"
SET_GCODE_VARIABLE MACRO=_USER_VARIABLE VARIABLE=z_hop VALUE={calc_z_hop}
SET_GCODE_VARIABLE MACRO=_USER_VARIABLE VARIABLE=speed VALUE="{speed_dic}"
SET_GCODE_VARIABLE MACRO=_USER_VARIABLE VARIABLE=probe VALUE="{probe_dic}"
SET_GCODE_VARIABLE MACRO=_USER_VARIABLE VARIABLE=park VALUE="{park_dic}"
SET_GCODE_VARIABLE MACRO=_USER_VARIABLE VARIABLE=filament VALUE="{filament_dic}"
SET_GCODE_VARIABLE MACRO=_USER_VARIABLE VARIABLE=purge VALUE="{purge_dic}"
SET_GCODE_VARIABLE MACRO=_USER_VARIABLE VARIABLE=print_start VALUE="{print_start_dic}"
SET_GCODE_VARIABLE MACRO=_USER_VARIABLE VARIABLE=unload_sd VALUE={user_unload_sd}
SET_GCODE_VARIABLE MACRO=_USER_VARIABLE VARIABLE=prime VALUE="{prime_dic}"
SET_GCODE_VARIABLE MACRO=_USER_VARIABLE VARIABLE=respond VALUE="{respond_dic}"
SET_GCODE_VARIABLE MACRO=_USER_VARIABLE VARIABLE=peripheral VALUE="{peripheral_dic}"
SET_GCODE_VARIABLE MACRO=_USER_VARIABLE VARIABLE=run VALUE=True
#*# <---------------------- SAVE_CONFIG ---------------------->
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
#*#
#*# [extruder]
#*# control = pid
#*# pid_kp = 23.886
#*# pid_ki = 1.254
#*# pid_kd = 113.757
#*#
#*# [heater_bed]
#*# control = pid
#*# pid_kp = 42.778
#*# pid_ki = 1.501
#*# pid_kd = 304.788
#*#
#*# [stepper_z]
#*# position_endstop = 2.177
#*#
#*# [probe]
#*# z_offset = 0
#*#
#*# [bed_mesh En_Thick-Bed_Temp-0C]
#*# version = 1
#*# points =
#*# -0.055625, -0.001562, 0.030000, 0.019375, 0.009063, 0.029375, 0.026875, 0.062500, 0.096875
#*# -0.040625, 0.008125, 0.039375, 0.035313, 0.021250, 0.048125, 0.048750, 0.079375, 0.122813
#*# -0.043437, -0.005625, 0.017500, 0.014063, 0.004063, 0.023438, 0.040938, 0.070313, 0.101250
#*# -0.036250, -0.004062, 0.016563, 0.014688, 0.007188, 0.025625, 0.032813, 0.065000, 0.093750
#*# -0.025312, -0.003750, 0.013438, 0.008438, 0.000000, 0.017500, 0.029375, 0.065000, 0.090312
#*# -0.005313, 0.007812, 0.026250, 0.021875, 0.011875, 0.029375, 0.035625, 0.069062, 0.090000
#*# 0.001562, 0.014375, 0.028125, 0.013125, 0.003750, 0.018125, 0.024687, 0.050000, 0.073125
#*# 0.020625, 0.029375, 0.033125, 0.014062, 0.007187, 0.027187, 0.028125, 0.049375, 0.056250
#*# 0.050937, 0.044375, 0.040000, 0.021875, 0.011875, 0.030937, 0.037812, 0.047500, 0.050625
#*# tension = 0.2
#*# min_x = 30.0
#*# algo = bicubic
#*# y_count = 9
#*# mesh_y_pps = 2
#*# min_y = 30.0
#*# x_count = 9
#*# max_y = 320.0
#*# mesh_x_pps = 2
#*# max_x = 320.0
#*#
#*# [bed_mesh Mueller-Bed_Temp-0C]
#*# version = 1
#*# points =
#*# -0.015000, 0.021875, 0.030000, 0.021250, 0.016875, 0.028125, 0.031250, 0.030625, 0.032500
#*# -0.017500, 0.021875, 0.036250, 0.031875, 0.026250, 0.046875, 0.048750, 0.034375, 0.045625
#*# -0.016875, 0.011875, 0.015000, 0.003750, 0.006250, 0.025625, 0.030625, 0.026250, 0.022500
#*# -0.008750, 0.018125, 0.029375, 0.005000, 0.010625, 0.021250, 0.030625, 0.030625, 0.026875
#*# -0.003125, 0.005000, 0.013125, 0.000000, 0.000000, 0.015000, 0.028750, 0.036875, 0.032500
#*# -0.001875, 0.008750, 0.015000, 0.001875, 0.005625, 0.018125, 0.030000, 0.031250, 0.037500
#*# 0.003750, 0.016875, 0.028750, 0.006875, 0.006250, 0.026250, 0.030000, 0.035000, 0.028750
#*# 0.023125, 0.036250, 0.036250, 0.013125, 0.018750, 0.032500, 0.041875, 0.036875, 0.034375
#*# 0.062500, 0.062500, 0.061875, 0.031875, 0.031875, 0.054375, 0.070625, 0.061250, 0.044375
#*# x_count = 9
#*# y_count = 9
#*# mesh_x_pps = 2
#*# mesh_y_pps = 2
#*# algo = bicubic
#*# tension = 0.2
#*# min_x = 30.0
#*# max_x = 320.0
#*# min_y = 30.0
#*# max_y = 320.0