this post was submitted on 25 Feb 2024
40 points (97.6% liked)

3DPrinting

15541 readers
200 users here now

3DPrinting is a place where makers of all skill levels and walks of life can learn about and discuss 3D printing and development of 3D printed parts and devices.

The r/functionalprint community is now located at: [email protected] or [email protected]

There are CAD communities available at: [email protected] or [email protected]

Rules

If you need an easy way to host pictures, https://catbox.moe may be an option. Be ethical about what you post and donate if you are able or use this a lot. It is just an individual hosting content, not a company. The image embedding syntax for Lemmy is ![](URL)

Moderation policy: Light, mostly invisible

founded 1 year ago
MODERATORS
 

I am finally reaching out as I am at my wits end and need experienced people to help me resolve my printing issue.

I have a Voxelabs Aquila (Ender 3 v2) formerly running marlin with small but manageable annoyances like overhang and manual bed leveling and thus began my journey after a year of using Aquila to start modding/upgrading the thing.

First thing i did was upgrade the fans and shroud, this improved prints slightly but was still not satisfied.

Moved to Klipper and added BLTouch and this is where all my problems started. After hours of following guides and troubleshooting of setting them both up, i still get very little bed adhesion and layers are not smooth together (gaps) with the same 3d slicing software i have been using before the switch (yes changed it to Klipper firmware in slicer)

As you can see in the picture this is after a manual bed level. Where do i go from here?

Edit 2: fully cleaned nozzle, hotend, and bed without any other changes with same results.

Edit 1: forgot to add my printer.cfg

[include mainsail.cfg]

[stepper_x]
step_pin: PC2
dir_pin: PB9
enable_pin: !PC3
microsteps: 16
rotation_distance: 40
endstop_pin: ^PA5
position_endstop: 3
position_max: 235
homing_speed: 50

[stepper_y]
step_pin: PB8
dir_pin: PB7
enable_pin: !PC3
microsteps: 16
rotation_distance: 40
endstop_pin: ^PA6
position_endstop: -17
position_max: 228
position_min: -17
homing_speed: 50

[stepper_z]
step_pin: PB6
dir_pin: !PB5
enable_pin: !PC3
microsteps: 16
rotation_distance: 8
endstop_pin: probe:z_virtual_endstop
#position_endstop: 0.0
position_max: 250
position_min: -6

[extruder]
max_extrude_only_distance: 100.0
step_pin: PB4
dir_pin: PB3
enable_pin: !PC3
microsteps: 16
rotation_distance: 34.406
nozzle_diameter: 0.400
filament_diameter: 1.750
heater_pin: PA1
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PC5
#control: pid
# tuned for stock hardware with 200 degree Celsius target
#pid_Kp: 21.527
#pid_Ki: 1.063
#pid_Kd: 108.982
min_temp: 0
max_temp: 250

[bltouch]
# Can't move this configuration to include because of z-offset adjustment
sensor_pin: ^PB1
control_pin: PB0
x_offset: -28
y_offset: -15
#z_offset = 0
samples: 2
speed: 2
#pin_move_time: 0.500
#probe_with_touch_mode: False
#pin_up_reports_not_triggered: True
#pin_up_touch_mode_reports_triggered: True
#stow_on_each_sample: False

[safe_z_home]
home_xy_position: 125,125 #this should be the center of your bed
speed: 50 
z_hop: 10
z_hop_speed: 5

[bed_mesh]
speed: 80
horizontal_move_z: 5
mesh_min: 3, 33       #!!min and max co-ords are based on the probes location not the nozzle!!
mesh_max: 207, 213  #needs to be calibrated for your individual printer
probe_count: 5,5 #this is the number of probing points on X then Y axis
mesh_pps: 2,2
fade_start: 1
fade_end: 10
fade_target: 0

[bed_screws]
screw1: 25, 25
screw2: 195, 25
screw3: 195, 195
screw4: 25, 195

[heater_bed]
heater_pin: PA2
sensor_type: EPCOS 100K B57560G104F
sensor_pin: PC4
#control: pid
# tuned for stock hardware with 50 degree Celsius target
#pid_Kp: 54.027
#pid_Ki: 0.770
#pid_Kd: 948.182
min_temp: 0
max_temp: 130

[fan]
pin: PA0

[mcu]
serial: /dev/serial/by-id/usb-1a86_USB_Serial-if00-port0
restart_method: command

[printer]
kinematics: cartesian
max_velocity: 300
max_accel: 3000
max_z_velocity: 5
max_z_accel: 100

#*# <---------------------- SAVE_CONFIG ---------------------->
#*# DO NOT EDIT THIS BLOCK OR BELOW. The contents are auto-generated.
#*#
#*# [extruder]
#*# control = pid
#*# pid_kp = 31.251
#*# pid_ki = 2.510
#*# pid_kd = 97.268
#*#
#*# [heater_bed]
#*# control = pid
#*# pid_kp = 69.577
#*# pid_ki = 1.022
#*# pid_kd = 1184.541
#*#
#*# [bltouch]
#*# z_offset = 3.609
you are viewing a single comment's thread
view the rest of the comments
[–] [email protected] 11 points 8 months ago* (last edited 8 months ago) (1 children)
  1. Let’s make sure everything is reliable with the motion system.

Let’s go over the Klipper configuration checks.

https://www.klipper3d.org/Config_checks.html

I’ll assume you’ve already done the emergency stop M112 and thermal ones. If not definitely do them. Always good to be sure that Klipper can safely read temps, and reliably shut things down when it can’t.

Wait for things to cool down if anything’s been heated (such as the bed) and then

  • Use M84 in the console.

Can you move the bed freely (but slowly) back and forth?

Can you rotate the Z Lead screw coupler and move the X gantry up and down!

Can you move the X carriage left and right?

  • Check the end stops

Move the bed back to its switch. Then use QUERY_ENDSTOPS in the console and check what if reports for Y. Triggered, for example.

Now move it away from the switch. And do QUERY_ENDSTOPS again. Is the switch showing the right state now? Not triggered?

Do the same for X and, if you’re still using the Z limit switch then Z. Let’s make sure the endstops are triggering correctly. These are the means that Klipper has to get a sense of the physical world. After homing everything else is just keeping track of how it’s moved relative to what it knows is the home position (like a submarine navigator using charts and known direction and movement to plot a course)

  • Check the steppers.

Home the printer and then move the nozzle so it’s over the center of the bed and move it up to about z100

Then run the following in the console. STEPPER_BUZZ STEPPER=stepper_y

The bed should move 1 mm towards you, then 1 mm towards the back.

Now run

STEPPER_BUZZ STEPPER=stepper_x

The X carriage should move 1mm to the right and then 1mm to the left.

And finally

STEPPER_BUZZ STEPPER=stepper_z

The X gantry should raise 1mm, then lower 1mm

If not then check the configs for changing the pins on the particular stepper. I’d be surprised if this was an issue as I can’t imagine it even homing correctly but we’re doing sanity checks. Assuming nothing so we can rule out things that will affect down stream problem solving.

  • Validate the probe is reliable

Home the printer and then run the following

PROBE_ACCURACY

This should cause the probe to be deployed and tested repeatedly. What we’re looking for is the general same value as noted here

https://www.klipper3d.org/Probe_Calibrate.html

There will be some variation but if the results aren’t reliable then it can’t reliably be used for a mesh or homing, etc. of course sometimes it’s a matter of adjusting the speed. Sometimes it’s physical (for example a very loose X carriage which is why we made sure the V roller wheels are right)

Note the Klipper docs on what you’re looking for. It explains how to find the acceptable range based on your actual Z stepper micro steps). Can’t accurately measure something with a tool that gives results larger than the thing you want. E.g. baseball height with a yard stick.

Of course sometimes it’s just a matter of finding the right speed or fixing the carriage (which we covered). Or verifying the connection to the board is good (powered off, obviously) And if that doesn’t work then it may warrant getting a replacement but since it’s worked for you in Marlin it shouldn’t be an issue.

  • Verify the extruder.

Disconnect the filament Bowden before it goes into the extruder. And let’s also make sure that any tensioner for the filament is tightened. Not looking for it to be super tight, again just snug enough that the filament will be engaged by the extruder gear and pushed.

Home the printer, then move the Z up to about 150 or so. And turn the hot end on to the proper temp for your filament. Go to the highest temp recommended for the filament if you can since we want to make sure we have the right rotation for the given extrusion amount and so we want to extrude hot and extrude very slowly so we aren’t “fighting” to push the plastic.

Now take a ruler and place one end against where the Bowden goes into the extruder. Then, keeping the filament in line as straight as possible with the ruler, find a spot that marks 150mm and use a marker or piece of tape.

Once the hot end is up to temp issue the following

G91
G1 E100 F60

What this does is set the movement to relative (G91) and the move G1 the E(extruder)100mm at a F(federate) of 60.

So move the extruder 100mm very slowly.

Wait for it to finish and then use your ruler to measure the distance between your mark or tape and the Bowden connection. We asked it to push 100mm, now we’re seeing how much is left of our 150mm. If it’s spot on it’ll be 50. But if it’s over or under then we can use that to adjust the rotation distance (how much to rotate a stepper to move a distance) for the extruder. E.g. this is the same as figuring out the Esteps in Marlin.

So we do a little math (or use excel or any number of online calculators) to calculate our new rotation distance.

Let’s hypothetically say your current rotation distance is 40

And we had 150mm filament and extruded 100. But we end up with 55mm left over (e.g. we under extruded)

Here’s the formula used in Klipper reference rotation_distance = rotation_distance = previous_rotation_distance * actual_extrude_distance / requested_extrude_distance

And we, hypothetically, had 51 mm left between our mark and the Bowden So that’s actual_extrude_distance =150-51 Or actual_extrude_distance =99

rotation_distance = 40 * (99 / 100)

Or rotation_distance = 39.6

And so you’d set rotation_distance under your extruder to 39.6. Then save and restart Klipper so it uses the new value.

Then repeat the test. If you don’t end up with 50mm left over your calculate the new rotation_distance again being sure to use the value that was used (in the config) as of the time you ran it. E.g. in our hypothetical the second time would be with 39.6 instead of 40

Once it’s right connect your Bowden back

  • Clean the build plate

After we’ve got all the bases covered let’s take the build plate off and give it a good wash in warm soapy water.

Give it a really good scrub and then dry it. Ideally using something like a shop towel to reduce any towel or napkin fibers getting on the plate. So many times this was the one thing causing me issues with first layer adhesion. It just needed a good wash.

Continued next comment (after I get some sleep. Check back in 10 hours or so) where we’ll do our Z offset with the actual filament until it flows right with our fancy overpowered glue gun like plastic extruder

Edit: Added build plate cleaning

[–] [email protected] 9 points 8 months ago (4 children)
  1. Adjustments and corrections.
  • Make sure your probe offset is correct

I’m assuming you’ve done the BLTouch config checks here

https://www.klipper3d.org/BLTouch.html

Take a piece of painters tape and place it in the middle of the bed and using a fine tip pen out a small dot on it.

Now home your printer and then do the following

In the console enter the following

PROBE

Now move the tool head until you have the deployed probe over the dot on the tape. Then slowly baby step it down while adjusting the X and Y to put the probe directly over the dot.

Once you’re sure it’s directly overhead baby step down until the probe triggers and then enter the following in the console.

GET_POSITION

And note the toolhead X and Y

 Recv: // toolhead: X:46.500000 Y:27.000000 Z:15.000000 E:0.000000

Note the X and Y values.

Now move the toolhead so that the nozzle is over the dot and then bring it down slowly making sure it’s over the spot. When you’re sure it is do another GET_POSITION in the console.

 Recv: // toolhead: X:41.500000 Y:29.000000 Z:15.000000 E:0.000000

Now you can calculate the new X and Y offset.

Your probe X offset will be nozzle_x_position - probe_x_position

Or in our hypothetical example above

41.5 - 46.5

Or x_offset: -5

And the probe Y offset will be

 nozzle_y_position - probe_y_position

Or in our hypothetical example above

29 - 27

Or y_offset: 2

Remove the tape and then restart Klipper and we should now have a reliable X and Y position. So when you home it Klipper should move the probe over the center of the bed and then move the nozzle over that same spot when asked to move to the same location.

  • Z offset

You don’t have to heat the bed for this since we’re only calculating the distance between when the probe activates and the tip of the nozzle. Well be doing the Z offset as documented here

https://www.klipper3d.org/Probe_Calibrate.html

You can test this with the nozzle heated (that’s more accurate) but you don’t need to. That’s because we’re going to get close and then use a print to get the final detail.

So home your printer and then issue the following

PROBE_CALIBRATE

Then we’ll use the same method as we did for the screws with paper or a feeler gauge.

Follow the prompts and once you have the slightest grab then you have the right spot.

Since we’re using a piece of paper we aren’t actually at 0 and you can adjust it down 0.1 (or whatever the thickness of your feeler gauge is)

Then you’ll enter

ACCEPT
SAVE_CONFIG

Now restart Klipper.

  • Bed Mesh

Let’s warm the bed to your printing temps. Since we know the bed is trammed we don’t have to worry about adjusting the screws with it hot

In the console enter the following

G28
BED_MESH_CALIBRATE

When it’s done look at the bed mesh in the UI. What’s the range? If it’s less than your layer height you should be good. Focus more on the range and less on the visual since the scale can be confusing. It’s incredibly useful for seeing if there’s warping, or the bed is way out of tram but we’ve already physically confirmed that we have the kinematics fixed

Now save the config which will save this mesh SAVE_CONFIG

  • Make sure your start print macro calls it

Here’s what mine looks like with a few things removed to avoid confusion


[gcode_macro START_PRINT]
variable_material_printed: ""
variable_material_retract: 1.2
gcode:
  {% set BED_TEMP = params.BED_TEMP|default(60)|float %}
  {% set EXTRUDER_TEMP = params.EXTRUDER_TEMP|default(180)|float %}
  {% set DO_ABL = params.DO_ABL |default(1)|int %}
  {% set MATERIAL = params.MATERIAL|default('PLA')|string %}

  ;Reset state
  G90 ; Absolute Positioning
  
  CLEAR_PAUSE

  M117 Starting {MATERIAL} Print with Bed Temp of {BED_TEMP} and Extruder Temp of {EXTRUDER_TEMP}, ABL set to {DO_ABL}
  PLAY_START

  # Save material used   
  SET_GCODE_VARIABLE MACRO=START_PRINT VARIABLE=material_printed VALUE="'{MATERIAL}'"
   
  SFS_ENABLE ; Turn on filament runout

  G90 ; use absolute coordinates
  SET_PART_FAN PERCENT=20 ; Fan on approx. 20% to protect cooling ducts

  ;Start heating bed
  M117 Start > Heating Bed
  SET_HEATER_TEMPERATURE HEATER=heater_bed TARGET={ BED_TEMP } ; set bed temp

  G28 ; home all

  ;Move up to keep toolhead away from heating bed
  G1 Z75 F3000 
  TEMPERATURE_WAIT sensor=heater_bed minimum={BED_TEMP} ; wait for bed temp 
    
  {% if DO_ABL == 1 %}
    ;Pre-heat the extruder while we build the mesh so it'll be ready
    SET_HEATER_TEMPERATURE HEATER=extruder TARGET={ EXTRUDER_TEMP-50 } ; set first layer extruder temp

    M117 ABL
    BED_MESH_CALIBRATE PROFILE=default; calibrate bed mesh leveling

  {% else %}
    ; Load the existing mesh
    M117 Loading Default ABL
    BED_MESH_PROFILE LOAD=default ; Use default mesh
  {% endif %}

  ;Turn part fan off unless otherwise requested
  SET_PART_FAN PERCENT=0 

  ;Home z after bed is heated
  G28 Z 

  ;Park the head at the right location
  ;;Smart_Park

  ;Prepare
  M117 $MR$:Preparing to Print

  ;Heat extruder to final temp
  
  SET_HEATER_TEMPERATURE HEATER=extruder TARGET={ EXTRUDER_TEMP } ; set first layer extruder temp

  ;Turn on Nevermore filter
  SET_FAN_SPEED FAN=Nevermore SPEED=.8

  ;Wait for everything to be ready
  TEMPERATURE_WAIT sensor=heater_bed minimum={BED_TEMP} ; wait for bed temp 
  TEMPERATURE_WAIT sensor=extruder minimum={EXTRUDER_TEMP} ; wait for extruder temp 

  M117 Start > Priming
  
  ;Draw Primer Line
  NOZZLE_PRIME_LINE

  G92 E0.0

Don’t copy this but it can be useful to see the order of how I have my mesh and heating, etc.

  • Final adjustment of your Z offset with a print

In your slicer of choice we just need a patch that’s the same height as your layer height (such as .2) you can find one online, create one or even download this one from Andrew Ellis’ GitHub.

https://github.com/AndrewEllis93/Print-Tuning-Guide/tree/main/test_prints

As it’s printing watch it and use the baby step ui to move it .01 up (if it’s over extruding and there’s ridges) or down (if it’s obviously too far and there’s gaps)

Then, when it’s done you hit the save icon or enter this in the console

Z_OFFSET_APPLY_PROBE

Then save_config to save the value.

Run the print again and verify that you have a smooth solid print that matches what you see here in the phenomenal Ellis print tuning guide

https://ellis3dp.com/Print-Tuning-Guide/articles/first_layer_squish.html

Hopefully that helps and if it doesn’t there’s more that can be accounted for and adjusted but it’s always good to make sure we have the fundamentals.

The skewed and twisted X gantry took me a week of frustrating prints and tweaks before I stopped, redid the frame, etc and identified the issue.

[–] [email protected] 8 points 8 months ago* (last edited 8 months ago) (1 children)

Holy shit, you’re an absolute legend for going this far to help someone
Edit: OP is an asshat for not acknowledging you

[–] [email protected] 6 points 8 months ago

I just felt the frustration… and having been there myself I thought I could offer a moment to just step back and establish the basics.

[–] [email protected] 7 points 8 months ago (1 children)

Hey, you're an absolute Chad for putting this much effort into helping someone, whether they acknowledge or not. Thank you!

[–] [email protected] 4 points 8 months ago

It can be frustrating… sometimes we just need to make sure we have a good foundation for everything else.

[–] [email protected] 5 points 8 months ago (1 children)

You're a goddamn legend. I'm new to 3D printing and have had issues of my own trying to learn how to calibrate Klipper, and your comments are more helpful than most of the other forum threads and guides that I've found. Thank you!

[–] [email protected] 4 points 8 months ago

Happy to help. If you have any questions I’ll do my best to answer them.

[–] [email protected] 4 points 8 months ago (1 children)

This needs to be posted somewhere more permanent, serious contribution right there

[–] [email protected] 3 points 8 months ago (1 children)

If I get a chance I can try and clean it up a bit and make it its own post perhaps

[–] [email protected] 2 points 8 months ago

Please do this is great! Fills in gaps I found with other guides I've run into.