Setting the best configuration for Sapphire Plus

Basic Information:

Printer Model: TwoTrees Sapphire Plus
MCU / Printerboard: Bigtreetech SKR 1.4 Turbo with Fysetc TMC2209 drivers
Host / SBC: Raspberry Pi 3B+

This is my setup:

  • CoreXY motion system with full MGN12 linear rails
  • Gates GT2 belts and pulleys
  • Dual Z-axis setup
  • BMG direct drive extruder with filament runout sensor
  • Motors (X and Y axes): NEMA 17, 48mm, model 17HS19-2004S1
  • Heated bed: precision-machined 6mm aluminum plate
  • Magnetic stainless steel sheet with PEI surface
  • Silicone heater: Kenovo 230V / 750W with thermal insulation
  • Hotend: Trianglelab V6 (TCHC TD6 ceramic heating core, 24V) + TUN nozzles (interchangeable 0.25, two 0.4, and 0.6 mm nozzles)
  • BLTouch for bed leveling
  • NEOPIXEL LED lighting
  • Bigtreetech PITFT70 v2.0 touchscreen
  • Mini 12864 RGB LCD
  • Raspberry Pi 3B+
  • Raspberry Pi Camera Module
  • Bigtreetech SKR 1.4 Turbo mainboard
  • Fysetc TMC2209 drivers on all axes
  • Bigtreetech Relay V1.2
  • Bigtreetech UPS 24V

Describe your issue:

I bought this printer from guy. It has relatively low print hours, but I’m interested in whether the printer.cfg is tuned for the best possible balance between print quality and speed. I mostly print with PLA. Could you please guys help what should I change to get better results?

[mcu]
serial: /dev/serial/by-id/usb-Klipper_lpc1768_1210000763A447AFDD1D1B5DC12000F5-if00

[printer]
kinematics: corexy
max_velocity: 400
max_accel: 8000
max_z_velocity: 20
max_z_accel: 100
square_corner_velocity: 5
max_accel_to_decel: 5000

[virtual_sdcard]
path: /home/pi/printer_data/gcodes

[mcu rpi]
serial: /tmp/klipper_host_mcu

[input_shaper]

[resonance_tester]
accel_chip: adxl345
probe_points: 150, 150, 50

[stable_z_home]
retry_tolerance: 0.005

[temperature_sensor raspberry_pi]
sensor_type: temperature_host
min_temp: 10
max_temp: 100

[stepper_x]
step_pin: P2.2
dir_pin: !P2.6
enable_pin: !P2.1
microsteps: 128
rotation_distance: 40
endstop_pin: P1.29
position_endstop: -7
position_min: -7
position_max: 300
homing_speed: 100
second_homing_speed: 5
homing_retract_dist: 0

[tmc2209 stepper_x]
uart_pin: P1.10
interpolate: False
run_current: 1.1
hold_current: 0.7
stealthchop_threshold: 0

[stepper_y]
step_pin: P0.19
dir_pin: !P0.20
enable_pin: !P2.8
microsteps: 128
rotation_distance: 40
endstop_pin: P1.28
position_endstop: 300
position_min: 0
position_max: 300
homing_speed: 100
second_homing_speed: 5
homing_retract_dist: 0

[tmc2209 stepper_y]
uart_pin: P1.9
interpolate: False
run_current: 1.1
hold_current: 0.7
stealthchop_threshold: 0

[stepper_z]
step_pin: P0.22
dir_pin: P2.11
enable_pin: !P0.21
endstop_pin: probe:z_virtual_endstop
microsteps: 128
rotation_distance: 4
position_min: -0.25
position_max: 300
homing_speed: 15
homing_retract_speed: 15
homing_retract_dist: 3
second_homing_speed: 3

[tmc2209 stepper_z]
uart_pin: P1.8
diag_pin: P1.27
interpolate: True
run_current: 0.7
hold_current: 0.7
stealthchop_threshold: 30

[stepper_z1]
step_pin: P1.15
dir_pin: P1.14
enable_pin: !P1.16
microsteps: 32
rotation_distance: 4

[tmc2209 stepper_z1]
uart_pin: P1.1
interpolate: True
run_current: 0.7
hold_current: 0.7
stealthchop_threshold: 30

[extruder]
step_pin: P2.13
dir_pin: !P0.11
enable_pin: !P2.12
heater_pin: P2.7
sensor_pin: P0.24
sensor_type: ATC Semitec 104NT-4-R025H42G
microsteps: 32
rotation_distance: 7.78
nozzle_diameter: 0.4
filament_diameter: 1.75
min_extrude_temp: 180
max_extrude_only_distance: 1000
max_extrude_cross_section: 50
min_temp: 0
max_temp: 280
pressure_advance: 0.095

[tmc2208 extruder]
uart_pin: P1.4
interpolate: false
run_current: 0.35
hold_current: 0.15
stealthchop_threshold: 0

[heater_bed]
heater_pin: P2.5
sensor_pin: P0.25
sensor_type: EPCOS 100K B57560G104F
min_temp: 0
max_temp: 130
max_power: 0.8

[fan]
pin: P2.3
kick_start_time: 0.75
off_below: 0.10

[heater_fan extruder_fan]
pin: P2.4
heater_temp: 50

[bltouch]
sensor_pin: ^P0.10
control_pin: P2.0
stow_on_each_sample: False
probe_with_touch_mode: True
x_offset: 0
y_offset: -25
speed: 10
samples: 4
sample_retract_dist: 5

[safe_z_home]
home_xy_position: 150,175
speed: 150
z_hop: 10
z_hop_speed: 10

[bed_mesh]
speed: 150
horizontal_move_z: 8
mesh_min: 15, 15
mesh_max: 285, 275
probe_count: 8,8
fade_start: 1
fade_end: 300
fade_target: 0
mesh_pps: 2,2
algorithm: bicubic

[z_tilt]
z_positions:
    15,175
    285,175
points:
    15,175
    285,175
speed: 150
horizontal_move_z: 10
retries: 5
retry_tolerance: 0.005

[screws_tilt_adjust]
horizontal_move_z: 10
screw1: 30,50
screw1_name: Front Left
screw2: 270,50
screw2_name: Front Right
screw3: 30,290
screw3_name: Back Left
screw4: 270,290
screw4_name: Back Right

[bed_screws]
horizontal_move_z: 10
screw1: 30,20
screw1_name: Front Left
screw2: 270,20
screw2_name: Front Right
screw3: 30,265
screw3_name: Back Left
screw4: 270,265
screw4_name: Back Right

[gcode_arcs]
resolution: 0.02

[display]
lcd_type: uc1701
cs_pin: P1.18
a0_pin: P1.19
encoder_pins: ^P3.26, ^P3.25
click_pin: ^!P0.28
contrast: 63

[output_pin beeper]
pin: EXP1_1

[neopixel fysetc_mini12864]
pin: P1.21
chain_count: 3
initial_RED: 0.0
initial_GREEN: 1.0
initial_BLUE: 1.0
color_order: RGB

[neopixel LED_light]
pin: P1.24
chain_count: 25
color_order: GRB
initial_RED: 1.0
initial_GREEN: 0.9
initial_BLUE: 0.8

[filament_switch_sensor RunoutSensor]
switch_pin: P1.26
pause_on_runout: true

[gcode_macro M600]
gcode:
    SAVE_GCODE_STATE NAME=M600_state
    PAUSE
    G91
    G1 E-5 F4000
    G1 Z{params.Z|default(10)}
    G90
    G1 X{params.X|default(300)} Y{params.Y|default(300)} F3000
    G0 E10 F500
    G0 E{params.E|default(-20)} F600
    G92 E0
    SET_FILAMENT_SENSOR SENSOR=e0_runout ENABLE=0

[gcode_macro SWAP_RESUME]
gcode:
    RESTORE_GCODE_STATE NAME=M600_state
    SET_FILAMENT_SENSOR SENSOR=e0_runout ENABLE=1
    resume

[exclude_object

Hello @tomhala !

Every printer is somehow unique. So it’s difficult to make a statement on this.

You can find out by following this guide: Welcome! | Ellis’ Print Tuning Guide

1 Like

As EddyMI3d said you’ll have to go through and calibrate if you want it pretty well optimized. After that it becomes a rabbit hole. Sounds like the previous owner was into it and may have calibrated it pretty well. The config looks very close to what I have my modded SP5 V3 at.
Are you having issues? Run some test prints and see where your problem areas might be and address them. As the old saying goes “If it ain’t broke don’t fix it”.

Thanks, and how should I set my printing speeds in Slicer(for example in Orca Slicer) like perimeter/infill/… speed

YMMV, this should be a close starting point but you may wish to turn down some of the speeds to start out. Run a bunch of test prints to fine tune.

It will depend on the filament. For PLA+ I have
First layer speed 50/80
Other layers 85/150
Sparse infill 180
Solid infill 150
Travel 350
Infill - will depend on how strong you need the print. For most 15-20% is a good start.
Perimeters - Again, depends. I find 3 works 99% of the time.

thanks again and these settings are for the printer without input shaping? I’m planning to buy Adxl345 but now I don’t have one.
And one more thing: when you have for example at first layer speed the values, it means from 50 to 80 mm/s?

Your welcome,
Yes, they’re without input shaping but from my understanding it shouldn’t make a much of a difference. Input shaping compensates for vibrations in the physical structure of the printer to reduce artifacts and improve print quality. It might allow you to print a bit faster with higher quality. I think these settings are bit conservative, take them as a starting point and explore.
The 50/80 means 50 for the perimeter, 80 for the infill. Again YMMV.