Updated 10/09/23 with new build infomation to suit the 1.1.6 parts we fitted.
The Mercury ZeroG is a Voron inspired core xy modification/upgrade for Creality’s Ender 5 3D Printer. There are two parts to the Zero G project, the Mercury1 core XY system, and the Hydra bed system. Here we aren’t going to document on how to preform the upgrade, but simply list what we used, our Klipper config and slicer profiles to help others doing this mod. We will also list useful links to get you through.
The Mercury1 is completely open source and still a growing project with a large selection of mods to suit you and your needs. Soon they will be releasing a full custom frame build which will make the build area enclosed. Mods we’ve done from the standard build on ours is the E34M1 to change from the eva 2 to eva 3 toolhead. The electronics enclosure by Turtlecrawler. We have also used a custom screen mount to use the TFT 35 SPI by Bigtreetech. Designed mounts for our 5015 cooling fans in the electronic enclosure. And a din mount to suit the CPAP/ws7040 driver board and blower fan.
Special thanks to the ZeroG community discord & Klipper subreddit for their help. I thoroughly enjoyed doing this build!
These are the parts we decided to use. The great thing about open source 3d printers is the choice is yours and what works best for you.
Please note, this klipper config is made to use with the BIGTREETECH Manta m8p v1.1 and they other parts listed above. Using a different board will completely change everything. Even with all the exact same parts you will have to pay attention to your end stop locations & the mcu serial. You will still have to tune your esteps and PID tune your heated bed and hotend. Ive tuned this to a reasonably fast speed. Though it could go faster, I found these speeds to be reliable.
MCU serial can be found by following the directions found on the klipper docs.
Our config certain files included, namely for input shaper, the obiter filament sensor and the test speed macro by ellis3dp.
To PID tune your hotend in klipper use the following code pasted into your console via mainsail.
PID_CALIBRATE HEATER=extruder TARGET=215
To PID tune your heated bed in klipper use the following code pasted into your mainsail console.
PID_CALIBRATE HEATER=heater_bed TARGET=60
Guide for tuning your esteps has been listed above. TeachingTeach and Ellis3dp touch on the subject.
** PLEASE READ THROUGH AND USE AT YOUR OWN RISK **
[include mainsail.cfg]
[virtual_sdcard]
path: /home/biqu/printer_data/gcodes
on_error_gcode: CANCEL_PRINT
[include OrbiterSensor.cfg]
#[include PIS.cfg]
[include TEST_SPEED.cfg]
[mcu]
serial: /dev/serial/by-id/usb-Klipper_stm32g0b1xx_31000B0011504B4633373520-if00
[printer]
kinematics: corexy
max_velocity: 360
max_accel: 30000
max_accel_to_decel: 15000
max_z_velocity: 15
max_z_accel: 350
square_corner_velocity: 7
[temperature_sensor MCU]
sensor_type: temperature_mcu
[temperature_sensor SoC]
sensor_type: temperature_host
#####################################################################
# X/Y Stepper Settings
#####################################################################
## X Stepper on Motor1(B Motor)
[stepper_x]
step_pin: PE2
dir_pin: PB4
enable_pin: !PC11
microsteps: 64
full_steps_per_rotation: 200
rotation_distance: 40
endstop_pin: PF3
position_min: 0
position_endstop: 235
position_max: 235
homing_speed: 25
[tmc5160 stepper_x]
cs_pin: PC10
spi_software_miso_pin: PA6
spi_software_mosi_pin: PA7
spi_software_sclk_pin: PA5
run_current: 1.2
stealthchop_threshold: 0
diag1_pin: PF3
## Y Stepper on Motor2 (A Motor)
[stepper_y]
step_pin: PF12
dir_pin: PF11
enable_pin: !PB3
microsteps: 64
full_steps_per_rotation: 200
rotation_distance: 40
endstop_pin: !PF4
position_min: 0
position_endstop: 230
position_max: 235
homing_speed: 25 #Max 100
[tmc5160 stepper_y]
cs_pin: PF13
spi_software_miso_pin: PA6
spi_software_mosi_pin: PA7
spi_software_sclk_pin: PA5
run_current: 1.2
stealthchop_threshold: 0
diag1_pin: PF4
#####################################################################
# Z Stepper Settings
#####################################################################
## Z0 Stepper - Front Left on MOTOR3_A
[stepper_z]
step_pin: PD7
dir_pin: !PD6
enable_pin: !PF10
microsteps: 64
rotation_distance: 4
endstop_pin: probe:z_virtual_endstop
position_max: 300
homing_speed: 8
second_homing_speed: 3
homing_retract_dist: 10
Position_min: -15
[tmc2209 stepper_z]
uart_pin: PF9
run_current: 0.580
stealthchop_threshold: 999999
#####################################################################
# Extruder
#####################################################################
# E0 on Motor5
[extruder]
step_pin: PC9
dir_pin: PC8
enable_pin: !PD1
rotation_distance: 4.668
microsteps: 16
full_steps_per_rotation: 200
nozzle_diameter: 0.400
filament_diameter: 1.75
heater_pin: PE3
sensor_type: ATC Semitec 104NT-4-R025H42G
sensor_pin: PA1
min_temp: 10
max_temp: 280
min_extrude_temp: 210
#control: pid
#pid_Kp: 30.128
#pid_Ki: 1.777
#pid_Kd: 127.666
pressure_advance: 0.035
max_extrude_only_distance: 201
max_extrude_cross_section: 50.0
[tmc2209 extruder]
uart_pin: PD0
interpolate: true
run_current: 0.75 #**
sense_resistor: 0.11 #**
stealthchop_threshold: 0
driver_TBL: 0
driver_HEND: 6
driver_HSTRT: 7
driver_TOFF: 4
stealthchop_threshold: 0
[firmware_retraction]
retract_length: 0.5
retract_speed: 30
#[input_shaper]
#shaper_type_x = mzv
#shaper_freq_x = 80.4
#shaper_type_y = mzv
#shaper_freq_y = 54.8
#####################################################################
# Bed Heater
#####################################################################
[heater_bed]
## SSR Pin - BED_OUT
heater_pin: PB7
sensor_type: Generic 3950
sensor_pin: PA0
min_temp: 0
max_temp: 130
#control: pid
#pid_Kp: 44.166
#pid_Ki: 0.744
#pid_Kd: 655.858
[verify_heater heater_bed]
check_gain_time: 90
#####################################################################
# Probe
#####################################################################
[bltouch]
stow_on_each_sample: True
probe_with_touch_mode: True
sensor_pin: PB2
control_pin: PB1
pin_move_time: 0.5
pin_up_touch_mode_reports_triggered: False
x_offset: -35
y_offset: 14
#z_offset: 2.660
speed: 10
lift_speed: 20
samples: 1
sample_retract_dist: 5
samples_tolerance_retries: 3
#####################################################################
# Fan Control
#####################################################################
[fan]
pin: !PE6
max_power: 1
off_below: 0.7
hardware_pwm: False
cycle_time: 0.002
shutdown_speed: 0
[heater_fan hotend]
pin: PE0
[heater_fan side-fan-1]
pin: PC12
[heater_fan side-fan-2]
pin: PE5
[heater_fan front-fan]
pin: PE4
#[heater_fan fan5]
#pin: PB8
#tachometer_pin: PC14
#[heater_fan fan6]
#pin: PB9
#tachometer_pin: PC15
#[heater_fan SoC_fan]
#pin: CB1:gpio79
#pin: RPI:gpio26
#####################################################################
# Homing and Gantry Adjustment Routines
#####################################################################
[idle_timeout]
timeout: 1800
[screws_tilt_adjust]
horizontal_move_z: 10
screw1: 64,215
screw1_name: Back Left
screw2: 235,215
screw2_name: Back Right
screw3: 235,45
screw3_name: Front Right
screw4: 64,45
screw4_name: Front Left
[force_move]
enable_force_move: True
[safe_z_home]
home_xy_position: 155,125
speed: 150
z_hop: 15
z_hop_speed: 20
[bed_mesh]
speed: 150
horizontal_move_z: 10
mesh_min: 10,40
mesh_max: 200,235
probe_count: 10,10
algorithm: bicubic
fade_start: 0.6
fade_end: 10.0
[exclude_object]
[board_pins]
aliases:
# EXP1 header
EXP1_1=PE9, EXP1_2=PE10,
EXP1_3=PE11, EXP1_4=PE12,
EXP1_5=PE13, EXP1_6=PE14, # Slot in the socket on this side
EXP1_7=PE15, EXP1_8=PB10,
EXP1_9=, EXP1_10=<5V>,
# EXP2 header
EXP2_1=PB14, EXP2_2=PB13,
EXP2_3=PF7, EXP2_4=PB12,
EXP2_5=PE7, EXP2_6=PB11, # Slot in the socket on this side
EXP2_7=PE8, EXP2_8=,
EXP2_9=, EXP2_10=PC5
#####################################################################
# Macros
#####################################################################
[gcode_macro M600]
gcode:
{% set X = params.X|default(50)|float %}
{% set Y = params.Y|default(0)|float %}
{% set Z = params.Z|default(10)|float %}
SAVE_GCODE_STATE NAME=M600_state
PAUSE
G91
G1 E-.8 F2700
G1 Z{Z}
G90
G1 X{X} Y{Y} F3000
G91
G1 E-50 F1000
RESTORE_GCODE_STATE NAME=M600_state
[gcode_macro M117]
rename_existing: M117.1
gcode:
{% if rawparams %}
{% set escaped_msg = rawparams.split(';', 1)[0].split('\x23', 1)[0]|replace('"', '\\"') %}
SET_DISPLAY_TEXT MSG="{escaped_msg}"
RESPOND TYPE=command MSG="{escaped_msg}"
{% else %}
SET_DISPLAY_TEXT
{% endif %}
#*# <---------------------- SAVE_CONFIG ---------------------->
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
#*#
#*# [bltouch]
#*# z_offset = 3.965
#*#
#*# [extruder]
#*# control = pid
#*# pid_kp = 24.417
#*# pid_ki = 2.543
#*# pid_kd = 58.601
#*#
#*# [heater_bed]
#*# control = pid
#*# pid_kp = 50.941
#*# pid_ki = 2.046
#*# pid_kd = 317.109
#*#
#*# [bed_mesh default]
#*# version = 1
#*# points =
#*# 0.095000, 0.122500, 0.126875, 0.025625, 0.057500, 0.064375, 0.042500, 0.039375, 0.013125, -0.034375
#*# 0.111250, 0.118125, 0.069375, 0.048750, 0.043750, 0.050000, 0.028125, 0.034375, -0.023750, -0.056250
#*# 0.106250, 0.111875, 0.093125, 0.054375, 0.021875, 0.030000, 0.025625, -0.007500, -0.015000, -0.025625
#*# 0.099375, 0.082500, 0.052500, 0.045625, 0.037500, 0.011250, 0.002500, -0.017500, 0.009375, -0.015625
#*# 0.074375, 0.101875, 0.067500, 0.058125, 0.026875, 0.018125, 0.022500, -0.002500, -0.003125, -0.001875
#*# 0.080625, 0.087500, 0.066250, 0.043750, 0.043125, 0.043125, 0.030625, 0.017500, 0.036250, 0.030000
#*# 0.087500, 0.100000, 0.070000, 0.066250, 0.066250, 0.046875, 0.009375, 0.046875, 0.053750, -0.001875
#*# 0.058125, 0.096250, 0.066875, 0.060000, 0.081875, 0.044375, 0.066875, 0.066875, 0.036250, 0.003750
#*# 0.105625, 0.084375, 0.105000, 0.078750, 0.090000, 0.078750, 0.073750, 0.071250, 0.038750, 0.037500
#*# 0.112500, 0.113750, 0.102500, 0.085000, 0.100625, 0.098125, 0.076250, 0.070625, 0.048125, 0.060000
#*# x_count = 10
#*# y_count = 10
#*# mesh_x_pps = 2
#*# mesh_y_pps = 2
#*# algo = bicubic
#*# tension = 0.2
#*# min_x = 10.0
#*# max_x = 199.99
#*# min_y = 40.0
#*# max_y = 234.94
The below slicer settings are far from the fastest we can push our Mercury1 but a great starting point.
!