diff --git a/calibration.html b/calibration.html index 5198445..638d74b 100644 --- a/calibration.html +++ b/calibration.html @@ -1,189 +1,196 @@ - - - - - - -
- -
-

Introduction

-

This page serves as a companion for this video: 3D printer calibration revolutionised - Step by step to better print quality

- -

It aims to make calibrating your 3D printer as easy as possible. If you find it helps you and you would like to say thank you, here is a donation link: PayPal.me

-

Special thanks to my Patrons for suggesting this video, helping define the contents and testing/proofing.

-

Watch the video and then work through each tab. I have created a custom gcode generator to assist in making testing towers. This used to be a laborious process and beyond the skills of many users. Other times pre-sliced gcode was used from the internet, but it is impossible to have gcode available for every printer configuration. Until now!

-
-

Warning - Read carefully!

-

Every attempt has been made to ensure this is safe but ultimately there always is risk in running pre-sliced gcode from the internet. Preview the gcode in your slicer or Gcode.ws and print at your own risk.

-

Only print this gcode when you are present, alert and capable of stopping the printer in case of emergency.

-

Validation has been built into the forms to only allow sensible min and max values, however this is not foolproof.

-

The gcode generated by this page has the following general characteristics:

-
    -
  • Sliced for Marlin firmware, although in most cases will still be compatible with other firmwares.
  • -
  • 1.75mm filament (However M221 S38 for 2.85 mm filament and M221 S34 for 3.0 mm filament can be appiled in the custom start gcode field as compensation)
  • -
  • 0.2mm layer height
  • -
  • 0.4mm nozzle
  • -
  • Base feedrate of 60mm/sec
  • -
  • 0.2 - 0.4mm of Z hop
  • -
  • Nozzle priming has been turned off to avoid bed clips or problems with deltas
  • -
  • A single layer skirt (except on the acceleration test)
  • -
-

To be compatible, your printer should have a miniumum bed size of 100 x 100mm. The largest print is 85 x 95 x 30mm.

-
-
+ + + + -
-
-

Frame Check

-
Aim:
-

To ensure there are no underlying problems with the frame or mechanical components of the 3D printer.

-
When required:
-

Any time the frame or mechanical components have been disassembled or replaced.

-
Tools:
-

Basic spanners, Allen keys, etc.

-
-

It would be easy to use the techniques elsewhere on this page to try and fix problems that were actually caused by a problem with the physical components, so we will eliminate this possibility first.

-

Many of these procedures are covered in this video: Complete beginner's guide to 3D printing - Assembly, tour, slicing, levelling and first prints

- -

Loose nuts and bolts

-

Move around the machine and check all fasteners. Crucial ones include those on the print head gantry such as those that hold the hot end on.

-

V-roller tension

-

If your printer has a motion system based on V-roller wheels riding on V-slot extrusions, check they are properly tensioned. Each location will have one eccentric nut. This can be twisted to either add or remove tension on the wheels.

-

If the wheels are too loose: Wobble will be present in the assembly, which will show in the print as surface artefacts.

-

If the wheels are too tight: The assembly will be too tense, which will wear the V-rollers prematurely.

-

Lubrication

-

Lubrication is an important maintenance task to perform regularly. Components that are not adequately lubricated may bind and affect print quality. Use SuperLube Synthetic Grease. Lubrication needs to be performed regularly on any hardened rods, linear rails and lead screws.

-

Bed Levelling

-

Probably the most essential part of setting up your 3D printer. Most new users will trip up on this. If you have ABL, this includes making sure your Z offset has been set and saved. Dialing in the first layer has now been moved to its own tab.

-

PTFE Tube

-

If your printer has PTFE tube, such as a bowden tube setup for the extruder/hot end, it is essential to make the tube is fully inserted and seated in the coupler. Also ensure the coupler is properly tightened. You may wish to use a small retaining clip on the coupler to prevent the tube working loose: Creality PTFE clip by morfidesign.

-

Nozzle

-

It is worth heating up the nozzle and pushing some filament through to see if it is exiting the nozzle properly. If the diameter is inconsistent or the extruded plastic shoots to one side, it may indicate a partial blockage in the nozzle that will be a pain in the future. It is also worth checking if the nozzle is properly tightened. Only do this when it is hot, or you may break it.

-

Belts

-

Ensure all belts are properly aligned and tensioned sufficiently. Also check the grub screws are tight on the pulleys that connect the belts to the stepper motors.

-

Fans

-

Check all fans are spinning freely. This includes but is not limited to: mainboard cooling fan, heat sink fan, part cooling fan, PSU fan. It can be hard to diagose if a fan is performing at less than full capacity. It may be easier to simply replace than repair if you suspect a fan is failing.

-

Another suitable video for seeing some of these procedures is here:

- -
+ + + + -
-
-

PID Autotune

-
Aim:
-

To ensure the heating of the 3D printer nozzle and bed are safe, stable and consistent.

-
When required:
-

Any time the hot end is changed, including adding/removing a silicone sock or altering part cooling fan/ducts. Any time the bed is changed, such as adding a glass/mirror plate, magnetic spring steel sheet and/or under bed insulation.

-
Tools:
-

Terminal software such as Pronterface or Octoprint.

-
-

PID autotuning is quick and easy, and relates to the most potentially dangerous components of your 3D printer: the heaters. It makes sense to do it as a first step. This procedure is covered in this video: Two easy fixes for 3D printer temperature swings

- -

In Marlin, this is a very straightforward process using M303.

-

It is not essential, but you may prefer to start this process with the hot end at room temperature. In a terminal, enter the following to tune the hot end:

-
M303 E0 S200 U1
-

This will tune the hot end at 200 degrees. The S value can be altered to suit your most common printing temperature. The U1 means the result is stored to RAM and we can save it immediately to EEPROM by sending:

-
M500
-

For the bed, PIDTEMPBED must be enabled in the firmware, then the command is quite similar:

-
M303 E-1 S60 U1
-

The bed is selected with E-1, and the temp set to 60 degrees. Substitute as necessary for your normal printing bed temperature. Once again save to EEPROM afterwards with:

-
M500
-

It may be preferable to have the printer as close to printing conditions as possible during these tuning procedures. That means having filament loaded and the part cooling fan on for PLA temperatures. If there is no UI button available to turn on the part cooling fan, you can do it manually via gcode with M106 S255.

-
+ + -
-
-

First Layer

-
Aim:
-

To ensure the printer bed is both level and an appropriate distance from the nozzle. In the case of using ABL, to check if compensation is working and the Z offset is correctly set. This will result in a first layer with the correct amount of 'squish', meaning good adhesion, and greatly increasing the chances of the print being successful.

-
When required:
-

Initial setup of the printer, regular maintainence, if first layer quality diminishes, any time the frame or mechanical components have been disassembled or replaced, any change of bed surface or nozzle, a change in filament that has significantly difference bed/hot end temperatures. There is a lot that can throw the bed level off, but careful use of your printer without any hardware changes should see it remain consistent for an extended period of time.

-
Tools:
-

The gcode generator on this page. A standard sheet of office paper.

-
-

General Principles

-

Getting a good first layer is an essential part of 3D printing successfully and is probably the number one cause of failed prints for new users.

-

Firstly, the bed needs to be parallel to the plane the nozzle traverses when moving in X and Y. This is achieved by moving the corners of the bed up and down relative to each other. With manual bed levelling this is achieved by turning the levelling knobs in each corner.

-

Secondly, the vertical distance between the bed and the nozzle needs to be correct for the first layer to print correctly. In a manual system, this is achieved by turning the levelling knobs in unison to lift or lower each corner the same amount.

-

If this distance is too far, the filament will not be squished into the bed enough, potentially even printing in mid air, and the print will detach from the bed and fail.

-

If the nozzle is too close, there will not be enough room for the extruded filament to take the correct shape, and it will be forced to squeeze outwards. In minor cases, the extruded line will be wider than necessary and produce elephant's foot. Prints like this may be quite hard to remove from the bed.

-

In extreme cases, there will be no way for the filament to exit the nozzle, at best causing extruder stepper motor skipping, and even potentially even jamming the extruder/hot end.

-

The contents of this page are shown in detail in the following video:

- -

Manual Levelling Procedure

-

There are many techniques available, but a common one is to move the nozzle to the various corners of the bed, turning the levelling knobs until a standard piece of office paper can just fit between the bed and nozzle. A 0.1mm feeler gauge can be used, but make sure it doesn't have any oil on it that will contaminate the bed surface. Typically, this procedure is done with the bed at printing temperature (essential), and the nozzle close to printing temperature - just cool enough to prevent filament oozing out (optional).

-

It is common to follow up with a first layer calibration print, and 'live level' the bed by continuing to adjust the knobs when the print is under way.

-

This process is depicted in detail in the video above, and a gcode generator is provided at the bottom of the page to generate a suitable test print.

-

Auto Bed Levelling and Z offset

-

Auto bed levelling automates the procedure to some extent. A sensor such as a BLtouch, EZABL, strain gauge or peizo transducer is used to probe the bed in a grid formation. At each location, it measures the vertical height, building up an array of stored values, called a mesh. Manual mesh bed levelling can also be used to probe such a grid, but is still a manual process and hence not considered 'automatic'. Here is a visual representation of a probed mesh, shown with the Bed level visualizer Octprint plugin:

- -

During printing, the firmware will reference the mesh and compensate for an angled and/or warped bed by raising and lowering the nozzle using Z axis movement. This means the nozzle can travel up and down to match the contours of the bed, ensuring a good first layer.

-

In the printer's bed is perfectly flat, it is reasonable to claim ABL is not needed. Some users may still prefer it for the added convenience. In the event that the bed is warped (very common), it can be impossible to get a good first layer without ABL or manual mesh bed levelling. An example of this situation is shown in the video above.

-

It's worth noting that you can compensate for a warped bed in other ways, such as shimming the lower portions with a thin and flexible material. You can also use a glass/mirror plate over the top, which are typically quite flat. The downside of this is a longer time required to reach printing tempratures and additional load on the Y stepper (on an i3/'bed slinger' style printer) that may require lower print speed/acceleration.

-

The bed can be probed at the start of the print with a G29 command, with the resulting mesh immediately used to compensate as the initial layers are produced. Alternatively, the bed can also be probed some other time (while not printing), the mesh stored in the EEPROM and then restored with M420 S1 at the start of a print. In this case the print will start sooner, since we do not need to wait for a new mesh to be probed, although it may not be as accurate if anything has changed since probing. Either of these gcode commands should come after the G28 home command in the start gcode.

-

Although ABL can compensate for a crooked/non-levelled bed, it is still better to attempt to level manually first and get everything in the ballpark.

-

Probing the bed and building a mesh only accounts for an uneven or warped bed. Like manual levelling, we still need to set the distance between the nozzle and bed to get a good first layer. This is where the Z offset comes in, which is simply the vertical distance between where the probe triggers vs the nozzle tip. Here are some examples:

+ + + +
-

The following picture shows Z offset for a BLtouch. You can clearly see the vertical difference between the probing point (tip of BLtouch) and the tip of the nozzle.

- -

If BABYSTEP_ZPROBE_OFFSET is enabled in Marlin, setting the Z offset can easily be done as the first layer goes down. Don't forget to save to EEPROM afterwards. This process is also depicted in the video at the top of the page.

-

Another advantage of some ABL systems is that once the Z offset is set, you can interchange build surfaces of various thicknesses, with no changes needed for a successful first layer. Assuming the probe is triggered the same way on the bed surface, the Z offset is applied to this trigger point and the first layer height should be the same. On a manually levelled bed, the four corner knobs would need to be turned in unison to raise or lower the bed in accounting for thickness of the new build surface.

-

First layer gcode generator

-

The following form will create a series of five squares that you can use to live level your bed or set the Z offset. It is quick to print and features one square in the middle of the bed, with four others in the corners. You can use these to turn the levelling knobs in each corner until they are consistent, or ensure your ABL system is working if you have one in place.

-

This test uses a 0.2mm first layer height.

- -
-

Additional start gcode

-

If you have additional start commands, tick the box and enter the gcode. This can be used for an extruder prime sequence, overwriting the standard flow rate, compensating for 2.85/3.00 mm filament, setting K factor and more. Tick the box for more details.

- - - -
-

For the majority of users, you can skip this section. Any gcode entered here will be inserted after temperatures are set and homing is complete. Start gcode is saved by the browser, you should only have to enter it once. Example uses include:

+
+

Introduction

+

This page serves as a companion for this video: 3D printer calibration revolutionised - Step by step to better print quality

+ +

It aims to make calibrating your 3D printer as easy as possible. If you find it helps you and you would like to say thank you, here is a donation link: PayPal.me

+

Special thanks to my Patrons for suggesting this video, helping define the contents and testing/proofing.

+

Watch the video and then work through each tab. I have created a custom gcode generator to assist in making testing towers. This used to be a laborious process and beyond the skills of many users. Other times pre-sliced gcode was used from the internet, but it is impossible to have gcode available for every printer configuration. Until now!

+
+

Warning - Read carefully!

+

Every attempt has been made to ensure this is safe but ultimately there always is risk in running pre-sliced gcode from the internet. Preview the gcode in your slicer or Gcode.ws and print at your own risk.

+

Only print this gcode when you are present, alert and capable of stopping the printer in case of emergency.

+

Validation has been built into the forms to only allow sensible min and max values, however this is not foolproof.

+

The gcode generated by this page has the following general characteristics:

    -
  • Copying gcode commands from your slicer to draw an intro/prime/purge line. By default this is left out to accommodate delta printers.
  • -
  • Telling the firmware to alter the flow rate of the gcode to follow. This does not mean the exact flow rate you have set in your own slicer. For example, using M221 S120 would set the flow rate to 120% of what it was originally sliced as in Simpilfy3D. Use this to compensate for obvious over or under extrusion you may encounter with these tests. Additional information available at the base of the Flow Rate tab.
  • -
  • M221 S38 can also be used to compensate for 2.85 mm filament and M221 S34 for 3.00 mm filament instead of the default 1.75 mm.
  • -
  • Setting the K factor for linear advance. For example, M900 K0.11
  • -
  • Custom ABL sequence. By default, only G28 is present. This gcode will be inserted immediately afer that so custom commands can be used here.
  • -
  • Anythng else you have in your start gcode, such as setting acceleration values, E-steps, etc.
  • +
  • Sliced for Marlin firmware, although in most cases will still be compatible with other firmwares.
  • +
  • 1.75mm filament (However M221 S38 for 2.85 mm filament and M221 S34 for 3.0 mm filament can be appiled in the custom start gcode field as compensation)
  • +
  • 0.2mm layer height
  • +
  • 0.4mm nozzle
  • +
  • Base feedrate of 60mm/sec
  • +
  • 0.2 - 0.4mm of Z hop
  • +
  • Nozzle priming has been turned off to avoid bed clips or problems with deltas
  • +
  • A single layer skirt (except on the acceleration test)
- +

To be compatible, your printer should have a miniumum bed size of 100 x 100mm. The largest print is 85 x 95 x 30mm.

+
+
+
+
+

Frame Check

+
Aim:
+

To ensure there are no underlying problems with the frame or mechanical components of the 3D printer.

+
When required:
+

Any time the frame or mechanical components have been disassembled or replaced.

+
Tools:
+

Basic spanners, Allen keys, etc.

+
+

It would be easy to use the techniques elsewhere on this page to try and fix problems that were actually caused by a problem with the physical components, so we will eliminate this possibility first.

+

Many of these procedures are covered in this video: Complete beginner's guide to 3D printing - Assembly, tour, slicing, levelling and first prints

+ +

Loose nuts and bolts

+

Move around the machine and check all fasteners. Crucial ones include those on the print head gantry such as those that hold the hot end on.

+

V-roller tension

+

If your printer has a motion system based on V-roller wheels riding on V-slot extrusions, check they are properly tensioned. Each location will have one eccentric nut. This can be twisted to either add or remove tension on the wheels.

+

If the wheels are too loose: Wobble will be present in the assembly, which will show in the print as surface artefacts.

+

If the wheels are too tight: The assembly will be too tense, which will wear the V-rollers prematurely.

+

Lubrication

+

Lubrication is an important maintenance task to perform regularly. Components that are not adequately lubricated may bind and affect print quality. Use SuperLube Synthetic Grease. Lubrication needs to be performed regularly on any hardened rods, linear rails and lead screws.

+

Bed Levelling

+

Probably the most essential part of setting up your 3D printer. Most new users will trip up on this. If you have ABL, this includes making sure your Z offset has been set and saved. Dialing in the first layer has now been moved to its own tab.

+

PTFE Tube

+

If your printer has PTFE tube, such as a bowden tube setup for the extruder/hot end, it is essential to make the tube is fully inserted and seated in the coupler. Also ensure the coupler is properly tightened. You may wish to use a small retaining clip on the coupler to prevent the tube working loose: Creality PTFE clip by morfidesign.

+

Nozzle

+

It is worth heating up the nozzle and pushing some filament through to see if it is exiting the nozzle properly. If the diameter is inconsistent or the extruded plastic shoots to one side, it may indicate a partial blockage in the nozzle that will be a pain in the future. It is also worth checking if the nozzle is properly tightened. Only do this when it is hot, or you may break it.

+

Belts

+

Ensure all belts are properly aligned and tensioned sufficiently. Also check the grub screws are tight on the pulleys that connect the belts to the stepper motors.

+

Fans

+

Check all fans are spinning freely. This includes but is not limited to: mainboard cooling fan, heat sink fan, part cooling fan, PSU fan. It can be hard to diagose if a fan is performing at less than full capacity. It may be easier to simply replace than repair if you suspect a fan is failing.

+

Another suitable video for seeing some of these procedures is here:

+ +
+
+
+

PID Autotune

+
Aim:
+

To ensure the heating of the 3D printer nozzle and bed are safe, stable and consistent.

+
When required:
+

Any time the hot end is changed, including adding/removing a silicone sock or altering part cooling fan/ducts. Any time the bed is changed, such as adding a glass/mirror plate, magnetic spring steel sheet and/or under bed insulation.

+
Tools:
+

Terminal software such as Pronterface or Octoprint.

- -

Bed dimensions

-

Inputting the correct number will attempt to move the print into the centre of the bed. If the 0,0 at centre button is checked for a delta, also enter your bed diameter. Please check the gcode to ensure it will fit on your bed.

- - -
- - -

You may add extra margin for clearing bed clips, etc. Caution! If this is too large on small printers the squares will overlap.

- -

Temperatures

-

For the hot end and bed respectively, typical PLA temperatures are 200 and 60, PETG 235 and 80, ABS 250 and 100, TPU 230 and 5 (effectively off).

- -
-

Part Cooling Fan

-

Part cooling fans typically don't activate until layer 2. Since this print is only one layer thick, part cooling is not applicable.

-

Auto Bed Levelling

- - -

Retraction

-

If you don't know what to enter here, you can leave the retraction speed at 40 mm/sec. For a bowden tube printer, 6mm is a likely retraction distance. For direct drive, a starting value of 1mm may be suitable. If you are not sure about extra restart distance, leave this as 0.

- - - - -

-

- -

Interpreting Results:

-

The following diagram and reference picture can be useful in determing if your first layer is too close or too far away from the nozzle. The reference image is quite large to aid clarity, you may wish to open it in a new tab to view it at maximum size.

-

If one side looks too close, but the other too far, adjust the levellng knobs to correct this. It is worth printing this gcode more than once after making adjustments to make sure the result is accurate and repeatable.

- -
- -
-
-

Baseline Print

-
Aim:
-

To establish a baseline for comparison with later tests or before modifications.

-
When required:
-

Before general calibration or before a significant modification is to be fitted.

-
Tools:
-

Gcode generator on this page.

+

You may add extra margin for clearing bed clips, etc. Caution! If this is too large on small printers the squares will overlap.

+ +

Temperatures

+

For the hot end and bed respectively, typical PLA temperatures are 200 and 60, PETG 235 and 80, ABS 250 and 100, TPU 230 and 5 (effectively off).

+ +
+

Part Cooling Fan

+

Part cooling fans typically don't activate until layer 2. Since this print is only one layer thick, part cooling is not applicable.

+

Auto Bed Levelling

+ + +

Retraction

+

If you don't know what to enter here, you can leave the retraction speed at 40 mm/sec. For a bowden tube printer, 6mm is a likely retraction distance. For direct drive, a starting value of 1mm may be suitable. If you are not sure about extra restart distance, leave this as 0.

+ + + +

+

+ +

Interpreting Results:

+

The following diagram and reference picture can be useful in determing if your first layer is too close or too far away from the nozzle. The reference image is quite large to aid clarity, you may wish to open it in a new tab to view it at maximum size.

+

If one side looks too close, but the other too far, adjust the levellng knobs to correct this. It is worth printing this gcode more than once after making adjustments to make sure the result is accurate and repeatable.

+
-

The form below will create a customised version of the XYZ 20mm calibration cube by iDig3Dprinting. It is fast to print and gives a good indication if there is any fundamental problem with the printer.

- -
-

Additional start gcode

-

If you have additional start commands, tick the box and enter the gcode. This can be used for an extruder prime sequence, overwriting the standard flow rate, compensating for 2.85/3.00 mm filament, setting K factor and more. Tick the box for more details.

- - - -
-

For the majority of users, you can skip this section. Any gcode entered here will be inserted after temperatures are set and homing is complete. Start gcode is saved by the browser, you should only have to enter it once. Example uses include:

-
    -
  • Copying gcode commands from your slicer to draw an intro/prime/purge line. By default this is left out to accommodate delta printers.
  • -
  • Telling the firmware to alter the flow rate of the gcode to follow. This does not mean the exact flow rate you have set in your own slicer. For example, using M221 S120 would set the flow rate to 120% of what it was originally sliced as in Simpilfy3D. Use this to compensate for obvious over or under extrusion you may encounter with these tests. Additional information available at the base of the Flow Rate tab.
  • -
  • M221 S38 can also be used to compensate for 2.85 mm filament and M221 S34 for 3.00 mm filament instead of the default 1.75 mm.
  • -
  • Setting the K factor for linear advance. For example, M900 K0.11
  • -
  • Custom ABL sequence. By default, only G28 is present. This gcode will be inserted immediately afer that so custom commands can be used here.
  • -
  • Anythng else you have in your start gcode, such as setting acceleration values, E-steps, etc.
  • -
- +
+
+

Baseline Print

+
Aim:
+

To establish a baseline for comparison with later tests or before modifications.

+
When required:
+

Before general calibration or before a significant modification is to be fitted.

+
Tools:
+

Gcode generator on this page.

- -

Bed dimensions

-

Inputting the correct number will attempt to move the print into the centre of the bed. If the 0,0 at centre button is checked, the bed size is irrelevant. Please check the gcode to ensure it will fit on your bed.

- - -
-

Temperatures

-

For the hot end and bed respectively, typical PLA temperatures are 200 and 60, PETG 235 and 80, ABS 250 and 100, TPU 230 and 5 (effectively off).

- -
-

Part Cooling Fan

-

Printing with PLA typically has the part cooling fan come on from layer 2. Alter this default behaviour here:

- - -

Auto Bed Levelling

- - -

Retraction

-

If you don't know what to enter here, you can leave the retraction speed at 40 mm/sec. For a bowden tube printer, 6mm is a likely retraction distance. For direct drive, a starting value of 1mm may be suitable. If you are not sure about extra restart distance, leave this as 0.

- - - - -

-

- -

Interpreting Results:

-

The cube should look similar to those at the top of this page. If there are no major issues, please continue to the next step. If there is a significant defect, the culprit will likely be found by working through the frame page.

-
- -
-
-

Extruder E-steps Calibration

-
Aim:
-

To determine the correct amount of steps Marlin firmware needs to send to the extruder stepper motor for accurate movement. -

When required:
-

Base calibration, as well as any time there has been a change to the extruder/hot end.

-
Tools:
-

Ruler, permanent marker, terminal software such as Pronterface or Octoprint.

+

Bed dimensions

+

Inputting the correct number will attempt to move the print into the centre of the bed. If the 0,0 at centre button is checked, the bed size is irrelevant. Please check the gcode to ensure it will fit on your bed.

+ + +
+

Temperatures

+

For the hot end and bed respectively, typical PLA temperatures are 200 and 60, PETG 235 and 80, ABS 250 and 100, TPU 230 and 5 (effectively off).

+ +
+

Part Cooling Fan

+

Printing with PLA typically has the part cooling fan come on from layer 2. Alter this default behaviour here:

+ + +

Auto Bed Levelling

+ + +

Retraction

+

If you don't know what to enter here, you can leave the retraction speed at 40 mm/sec. For a bowden tube printer, 6mm is a likely retraction distance. For direct drive, a starting value of 1mm may be suitable. If you are not sure about extra restart distance, leave this as 0.

+ + + +

+

+ +

Interpreting Results:

+

The cube should look similar to those at the top of this page. If there are no major issues, please continue to the next step. If there is a significant defect, the culprit will likely be found by working through the frame page.

-

For the X, Y, and Z axes, the steps per mm is usually consistent between printers and rarely changes with modifications. As long as belts are tight and true, it rarely needs to be tuned.

-

For the extruder however, variations in extruder hardware and filament means it is worth properly calibrating the extruder steps per mm, or E-steps.

-

This can be done by sending simple gcode commands via terminal to extrude a set amount of filament, then measuring how much filament actually went through the system.

-
-
Special Note:
-

This calibration is best done with the extruder detached from the hot end, so no restriction is present on the movement. If it is convenient, you can partially disassemble the printer so the output of the extruder is open and the filament exits in free air. If this is inconvenient, the process below aims to minimise restrictions by extruding very slowly and with a slightly higher temperature. The results from this should still be reliable.

-
-

Firstly, we need to know the existing E-steps value. To find this, enter:

-
M92
-

If you only receive an ok message from this, alternatively you can look for the M92 line after entering:

-
M503
-

M92 is used to report or set the steps per mm for each axis. M92 by itself will report the current parameters. We want to make note of the number after E, in the example below, 93.00:

- -

Now heat up your hot end to whatever temperature you usually print with plus 10 degrees. Once the temperature is stable, enter:

-
G91
-

G91 puts the printer in relative movement mode. This means requesting 100mm of filament adds 100mm to the current position, instead of moving to the specific position of 100mm.

-

Now we take a permanent marker and put a mark 120mm from the entry to the extruder:

- -

Next, we enter:

-
G1 E100 F50
-

G1 sends a move command to the printer, in this case asking the extruder to advance 100mm at a speed of 50mm/min.

-

The filament will then very slowly go through the extruder (and hot end). Once the extrusion finishes, we measure the distance between the mark and the entry to the extruder.

- -

Ideally, 20mm remains, which means exactly 100mm was extruded. If your distance is anything other than this, complete the form below to calculate the correct E-steps:

-
-

-

- - -
-

There was mm of filament remaining, which means you extruded mm of filament. Your new E-steps should be
- Enter the following in the terminal:

-
M92 E
-

Followed by M500 to save to EEPROM.

-
M500
-

You may wish to repeat this test with the new E-steps value to verify.

+
+
+

Extruder E-steps Calibration

+
Aim:
+

To determine the correct amount of steps Marlin firmware needs to send to the extruder stepper motor for accurate movement. +

When required:
+

Base calibration, as well as any time there has been a change to the extruder/hot end.

+
Tools:
+

Ruler, permanent marker, terminal software such as Pronterface or Octoprint.

- -

Although starting a new print or power cycling will achieve this, it may be safer to put the printer back into absolute position mode after completing this calibration by sending:

-
G90
-

Storing the updated E-steps

-

Once you have determined the correct value, it must be saved to the firmware to take effect on subsequent prints. Although it can be hard coded into the firmware by recompiling Marlin, it is far easier to use gcode to achieve this.

-

In a terminal, enter:

-
M92 E[your new value]
-

Obviously, you would substitute in your E-steps value after the E. Save to EEPROM with:

-
M500
-

You can also use the Configuration menu on the LCD to make this change, but with a large change (eg. switch to geared extruder) it may take considerable time to turn the knob enough to reach the desired value. Don't forget to Store Settings to save to EEPROM.

-
- -
-
-

Slicer Flow Calibration

-
Aim:
-

To determine the correct amount filament to be extruded by the 3D printer as directed by the slicer. -

When required:
-

Base calibration, as well as any time there has been a change to the extruder/hot end.

-
Tools:
-

Your favourite slicer. Accurate digital/vernier callipers (two decimal places is much more preferable to a set with only one).

-
-

Our E-steps are now correct in the firmware, so we will move on to calibrating the slicer. Each slicer has a setting to control the overall amount of filament extruded by the printer. If the flow rate is increased, more filament will be extruded. If the flow rate is decreased, less filament will be extruded.

-

In Simplify3D and PrusaSlicer, this is called Extrusion Multiplier. Cura calls it Flow.

-

My method of determining the correct flow rate is to print a hollow, single wall cube with a specified wall thickness, then measure the actual thickness of the wall and adjust the flow rate in the slicer to suit.

-

Some people prefer to have multiple walls and measure them together. For example, if the extrusion width was 0.4mm with two perimeters, then you would be hoping to measure 0.8mm for the cube wall. This does introduce more variables, such as the amount of perimeter overlap, and therefore a risk of the process failing. This is why I personally prefer a single wall cube, but each to their own.

-

Unfortunately, I can't provide pre-sliced gcode for this process. It is vital to use gcode generated by YOUR slicer. Setting up your slicer to print the cube in the right way should be simple by following these steps:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
StepCuraSimplify3DPrusaSlicer
1. Import STLcube.stl
2. Turn off infillInfill > Infill density: 0%General settings > Infill percentage: 0%Print settings > Infill > Fill density: 0%
Also set infill to 0% on main panel
3. Turn off top layersShell > Top/bottom thickness > Top layers: 0Layer > Top solid layers: 0Print settings > Layers and perimeters > Horizontal layers > Top: 0
4. Ensure wall thickness is a known value.
Substitute whatever values you like here. This example uses 0.4, which is common for a 0.4mm nozzle and 0.2mm layer height.
Shell > Wall thickness: 0.4Extruder > Extrusion width > tick manual > 0.4Print settings > Advanced > Extrusion width > Default extrusion width: 0.4
- and
- Print settings > Advanced > Extrusion width > Perimeters: 0.4 - and
- Print settings > Advanced > Extrusion width > External perimeters: 0.4 -
5. Set outer wall thickness to single extrusionShell > Wall line count: 1Layer > Outline/Perimeter shells: 1Print settings > Layers and perimeters > Vertical shells > Perimeters: 1
6. Set flow rate to default: 1.0 / 100%Material > Flow: 100Extruder > Extrusion multiplier: 1.0Filament settings > Filament > Extrusion multiplier: 1
7. Enable vase/spiral mode (optional)Special modes > Spiralize outer contourLayer > Single outline corkscrew printing mode (vase mode)Print settings > Layers and perimeters > Vertical shells > Spiral vase
8. Expected result:
-
-
Special note:
-

Some other factors may affect the accuracy of the result.

-

Some slicers have a minimum layer time, which on a fast print like this, may slow down the feedrate significantly and alter the wall thickness. You may disable this in the slicer, but if your part cooling system is insufficient, the walls may become very hot and deform.

-

To overcome this, you may scale up the X and Y dimensions of the cube. As long as the file is sliced as described above, the wall thickness will not alter from this change in scale and the test will be valid.

-
-

Now slice and print!

-

Interpreting Results:

-

Use digital/vernier callipers to measure the outer wall thickness of the hollow cube. Take measurements in multiple places/sides and average them.

- -

If your measurement is significantly off, the following calculator can then be used to calculate the new flow rate:

- - - - - - - - - - - - - -
CuraSimplify3D / PrusaSlicer
-
-

-

-

- - -
-

Your new flow rate should be

-
-
-
-
-

-

-

- - -
-

Your new flow rate should be

-
-
-
-
-

Important note!

-

What you see with your eyes is more important than a theoretical calculation. After you have performed this calibration, please adjust the flow rate higher or lower based on what you actually see.

-

For example, the cube shown in the thumbnail of the XYZ 20mm calibration cube by iDig3Dprinting:

- -

This print shows clear signs of under extrusion. There are gaps in the top infill as well as gaps between the perimeters and infill. Despite what any calibration procedure determined, the flow rate for this slicer/printer combination needs to be increased.

-

This article on all3DP has examples of what over extrusion looks like.

-
-

Can I use this flow value in the other tests on this site?

-

The short answer is: not really.

-

The gcode generators on this site work by using javacsript to modify source gcode originally created by Simplify3D. However, when you completed the calibration test above, you sliced your own gcode, making your own baseline and then making a flow adjustment relative to that. Therefore, this test is unique from the others on this site which is why the flow rate doesn't necessarily translate.

-

Let's say your old flow rate was 100% and you have tested and corrected this to 96%. The gcode on this site originally had a flow rate of 90% when sliced, so applying your 96% to that gives a final result of 86.4%, not 96%. Your slicer profile settings will also be different in other ways, which further complicates matters. Therefore, there is not a straightforward correlation between your slicer and my gcode generators.

-

The aim of the site is to discover ideal settings you can apply to your own slicer profile, not to optimise the gcode created by the generators. Keep this in mind and focus on the aim of each test, rather than the general print quality.

-

If you are experiencing significant over or under extrusion that prevents you from using the tests properly, by using the custom start gcode function on this site you can optionally issue an M221 to override the values in the generatored gcode. For example, using M221 S90 would tell the firmware to only extrude 90% of what the gcode asks for. This is an easy method for making a quick correction that will alow the tests to complete successfully.

-
- -
-
-

Stepper Motor Current Tuning

-
Aim:
-

To set the correct amount of current supplied to the stepper motors of the printer. This is set with the stepper motor drivers, located on the mainboard.

-
When required:
-

If steps are being skipped/missed. If the stepper motors are too hot to touch. When significant changes are made to the motion system (e.g. heavier bed, conversion to direct drive from bowden tube).

-

If your 3D printer is running fine without hot stepper motors, you may skip this step.

-
Tools:
-

For newer, 'smart' stepper motor drivers: terminal software such as Pronterface or Octoprint.

-

For older stepper motor drivers: a multimeter, small screwdriver and a spare wire with alligator clips (optional but recommended).

-
-

Setting the stepper driver current is an important step in calibrating a 3D printer, although typically the value does not need to be exact. There is a window within which the printer will operate without issue.

-

General methods are used on this page, but if you are after more detail on a specific driver, my stepper motor driver guide playlist may be of use.

-

Although we target a specific current, the following rule of thumb is the most important factor:

-
-
Rule of thumb:
-

If the stepper motor is missing steps or you are experiencing layer shifts, the stepper current needs to be increased. This will supply more torque to the motor but also make it (and the driver) run hotter.

-

If the stepper motor is too hot to touch, the stepper current needs to be decreased. This will remove torque and make the motor (and the driver) run cooler.

-
-

Unfortunately, sometimes a stepper motor may be running hot and still missing steps. The following may apply in these cases:

-
    -
  • In the case of the extruder stepper motor, there may be an obstruction such as a partially blocked nozzle, PTFE tube unseated, hot end temperature too low (increased resistance to melting/flow) and/or first layer too close (nozzle jammed against bed, nowhere for plastic to exit).
  • -
  • For X, Y and Z, the stepper motor may be undersized for the mass it is pushing. This can occur when increasing the size of the printer (e.g. Ender Extender kit), adding something heavier to the bed (e.g. glass/mirror plate), and/or converting from bowden tube to a heavy direct drive extruder.
  • -
  • If there is some sort of mechanical misalignment that makes movement a lot harder. This may be a V-roller that is far too tight or a misaligned Z axis leadscrew causing the Z axis to bind.
  • -
  • The acceleration/jerk and printing speeds are too aggressive for the stepper motors.
  • -
  • Each stepper motor driver has a rated current, if this is too high it will run very hot and potentially cause missed steps. Active cooling can help this, but the current should still be still within the safe specifications for that driver.
  • -
-

If tuning the stepper driver current is unable to find a sweet spot, the good news is you can upgrade to a larger stepper motor easily in most cases. Nema17 steppers have the same mounting pattern and output shaft diameter, however you should still check your machine to ensure there is enough room for a longer stepper before any purchase. With all else being equal, a longer stepper motor will be capable of more torque and handling higher current.

- -
-

Depending on the stepper motor driver, there are two ways of setting the current:

-
1. Physical:
-

For older stepper motor drivers or TMC drivers running in legacy mode, the current is set by turning a trim pot screw on the top of the driver to raise or lower VREF, which in turns sets the driver current.

-
2. Gcode:
-

On TMC drivers, the current is set directly with gcode commands. This can be set in the firmware, via a terminal or by using the printer's LCD. This value should then be saved to EEPROM to stay persistent.

-

We will cover these one at a time below.

-
-

Peak Current and Sense Resistor Value

-

Setting stepper driver current accurately relies on knowing two values: the peak current that the stepper motor is rated for and the sense resistor value on the stepper motor driver.

-

For newer TMC drivers, the sense resistor value is already known. For older drivers, methods for determining this are seen in the following snippet. Methods for determining the stepper motor peak current are shown too:

- -

1. Physical

-

I have covered this in detail before, so please use the embedded video below (queued to the correct time) to see how to set the VREF. The process is essentially the same for any driver.

-

The VREF is just a reference voltage to assist us in setting the driver current. It is used because it is much simpler to measure voltage rather than current with a multimeter. Typically these drivers have the peak/max current set.

-

The general steps for setting current via VREF are the same between drivers, only the VREF formula changes:

-
    -
  1. Power up mainboard via 12/24V normal power supply, NOT just USB 5V.
  2. -
  3. Set multimeter to DC voltage, max 2V range.
  4. -
  5. Connect black/negative multimeter probe to ground. This can be a negative terminal or the top of the USB connector.
  6. -
  7. Connect the red/positive probe to the trim pot on top of the driver to measure VREF.
  8. -
  9. Turn the trim pot SLOWLY with a screwdriver, then remeasure.
  10. -
  11. Repeat for each stepper motor driver.
  12. -
-

Alternatively, you can use an alligator clip wire between the red probe and the metal shaft of the screwdriver, so that a VREF reading is available as you turn the screwdriver. This procedure is shown in this snippet:

- -

The VREF formulas for drivers I have tested are as follows:

-

A4988

-

The typical sense resistor value is 0.1. Please check your drivers to be sure.

-
VREF = 8 x max current x sense resistor value
-

Then use the video above as a guide to the process.

-

DRV8825

-

The sense resistor value should be 0.1. If it is:

-
VREF = max current / 2
-

The process is then the same as for A4988s as shown in the video above.

-

TMC2100

-

Like the TMC drivers covered in the gcode section, the current for the TMC2100 is set not as a peak, but instead as RMS. To determine RMS, divide the peak current by 1.41.

-
VREF = (RMS current * 2.5) / 1.77
-

The process is then the same as for A4988s as shown in the video above.

-

TMC2208 - Legacy/standalone mode (as found in Creality silent boards)

-

Like the TMC drivers covered in the gcode section, the current for the TMC2208 (legacy mode) is set not as a peak, but instead as RMS. To determine RMS, divide the peak current by 1.41.

-
VREF = (RMS current * 2.5) / 1.77
-

The process is then the same as for A4988s as shown in the video above.

-

LV8729

-

There are mainly two kinds of stepper driver boards with this driver.

-

One has a resistor labelled R100 on the bottom, and on the other the resistor is labelled R220. Which formula you use is based off of this resistor

-

The process is then mostly the same as for A4988s as shown in the video above, but with the correct formula for your driver board.

-

R100:

-
VREF = max current / 2
-

R220:

-
VREF = max current * 1.1
-

2. Gcode

-

TMC drivers connected via UART or SPI serial can easily have their current set via gcode. This is not peak current, but rather RMS (root mean square) current. Rather than the maximum, think of this as more a typical/average current, where the driver will be operating mostly. To convert the peak current from stepper motor specs to RMS, divide it by 1.41.

-

The current can be set in a few different ways for each driver:

-

TMC2208, TMC2209, TMC2130, etc

-

These drivers should have a sense resistor value of 0.11. This is the default in Marlin, so when compiling it should already be set (X_RSENSE for the X axis, Y_SENSE for Y and so forth):

- -

Therefore, you can set your RMS current directly in the firmware when compiling. This is X_CURRENT for the X axis, Y_CURRENT for the Y and so forth. After flashing firmware, remember that the previous value may still be stored in the EEPROM. Check your values by entering M503 in a terminal.

-

You can also set the RMS current via terminal with M906. Please follow the link to see the reference. An example of setting the X axis current to 680 would be:

-
M906 X680
-

Don't forget to save the value to EEPROM afterwards with:

M500
-

Finally, the LCD Configuration menu can be used to set the RMS current. Don't forget to save afterwards by clicking on Store Settings.

-

TMC5160

-

The TMC5160 is the same as the other TMC drivers apart from one important difference: the sense resistor value needs to be changed from 0.11 to 0.075 when compiling the firmware.

- -

After this change is made, the same procedures apply:

-

You can set your RMS current directly in the firmware when compiling. This is X_CURRENT for the X axis, Y_CURRENT for the Y and so forth. After flashing firmware, remember that the previous value may still be stored in the EEPROM. Check your values by entering M503 in a terminal.

-

You can also set the RMS current via terminal with M906. Please follow the link to see the reference. An example of setting the X axis current to 680 would be:

-
M906 X680
-

Don't forget to save the value to EEPROM afterwards with:

M500
-

Finally, the LCD Configuration menu can be used to set the RMS current. Don't forget to save afterwards by clicking on Store Settings.

-
- -
-
-

Retraction Tuning

-
Aim:
-

To set the correct parameters concerning retraction during 3D printing, including retraction distance, speed, extra restart distance, prime speed and z hop.

-
When required:
-

Initial calibration, any time the hot end or extruder is changed, when trying a new type/brand of filament.

-
Tools:
-

Gcode generator on this page.

-
-

FDM works by melting plastic filament and extruding it accurately one layer at a time to build up 3D geometry. By its nature, the plastic will continue to ooze and drip out of the nozzle even when not pushed by the extruder. To combat this, our slicers use retraction, where the filament is withdrawn from the hot end, alleviating pressure and minimising ooze. When properly tuned, this has the effect of removing stringing, the unwanted oozing of plastic between two points of the model.

-

An example of fine stringing can be seen in the following image. It appears like cobwebs:

- -
-
Special note:
-

Temperature tuning and retraction tuning are related to each other. You could do them in either order, and it may be necessary to tune back and forth to reach an ideal result. A higher nozzle temperature will promote more oozing and stringing, whereas a lower temperature will reduce oozing and stringing.

+

For the X, Y, and Z axes, the steps per mm is usually consistent between printers and rarely changes with modifications. As long as belts are tight and true, it rarely needs to be tuned.

+

For the extruder however, variations in extruder hardware and filament means it is worth properly calibrating the extruder steps per mm, or E-steps.

+

This can be done by sending simple gcode commands via terminal to extrude a set amount of filament, then measuring how much filament actually went through the system.

+
+
Special Note:
+

This calibration is best done with the extruder detached from the hot end, so no restriction is present on the movement. If it is convenient, you can partially disassemble the printer so the output of the extruder is open and the filament exits in free air. If this is inconvenient, the process below aims to minimise restrictions by extruding very slowly and with a slightly higher temperature. The results from this should still be reliable.

+
+

Firstly, we need to know the existing E-steps value. To find this, enter:

+
M92
+

If you only receive an ok message from this, alternatively you can look for the M92 line after entering:

+
M503
+

M92 is used to report or set the steps per mm for each axis. M92 by itself will report the current parameters. We want to make note of the number after E, in the example below, 93.00:

+ +

Now heat up your hot end to whatever temperature you usually print with plus 10 degrees. Once the temperature is stable, enter:

+
G91
+

G91 puts the printer in relative movement mode. This means requesting 100mm of filament adds 100mm to the current position, instead of moving to the specific position of 100mm.

+

Now we take a permanent marker and put a mark 120mm from the entry to the extruder:

+ +

Next, we enter:

+
G1 E100 F50
+

G1 sends a move command to the printer, in this case asking the extruder to advance 100mm at a speed of 50mm/min.

+

The filament will then very slowly go through the extruder (and hot end). Once the extrusion finishes, we measure the distance between the mark and the entry to the extruder.

+ +

Ideally, 20mm remains, which means exactly 100mm was extruded. If your distance is anything other than this, complete the form below to calculate the correct E-steps:

+
+

+

+ + +
+

There was mm of filament remaining, which means you extruded mm of filament. Your new E-steps should be
+ Enter the following in the terminal:

+
M92 E
+

Followed by M500 to save to EEPROM.

+
M500
+

You may wish to repeat this test with the new E-steps value to verify.

+
+
+

Although starting a new print or power cycling will achieve this, it may be safer to put the printer back into absolute position mode after completing this calibration by sending:

+
G90
+

Storing the updated E-steps

+

Once you have determined the correct value, it must be saved to the firmware to take effect on subsequent prints. Although it can be hard coded into the firmware by recompiling Marlin, it is far easier to use gcode to achieve this.

+

In a terminal, enter:

+
M92 E[your new value]
+

Obviously, you would substitute in your E-steps value after the E. Save to EEPROM with:

+
M500
+

You can also use the Configuration menu on the LCD to make this change, but with a large change (eg. switch to geared extruder) it may take considerable time to turn the knob enough to reach the desired value. Don't forget to Store Settings to save to EEPROM.

-

Besides hot end temperature, there are five parameters we will be tuning relating to retraction. In the table is a description of each as well as where the setting is found in the most popular slicers. By far the most important is retraction distance.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Retraction ParameterCuraSimplify3DPrusaSlicer
Retraction distance: The length the filament is pulled away from the nozzle in mm.Travel > Retraction distanceExtruder > Retraction distancePrinter settings > Extruder 1 > Retraction > Length
Retraction speed: The speed at which this filament is withdrawn in mm/sec.Travel > Retraction speedExtruder > Retraction speedPrinter settings > Extruder 1 > Retraction > Retraction Speed
Extra restart distance: The retraction distance will be reversed when the travel (non-extruding) movement is over. This is typically zero, but you can opt for extra filament to be extruded (a positive value) or less than what was retracted (a negative value). Also measured in mm.Travel > Retraction extra prime amountExtruder > Extra restart distancePrinter settings > Extruder 1 > Retraction > Extra length on restart
Prime (unretract) speed: The speed at which this filament is reintroduced to the nozzle in mm/sec.Travel > Retraction prime speedNot supported. S3D will use retraction speed as prime speed.Printer settings > Extruder 1 > Retraction > Deretraction speed
Z hop: The amount the nozzle lifts vertically in mm during a travel (non-extruding) movement. After this movement, the correct Z value is then restored before the filament is unretracted/primed again ready for printing.Travel > Z hop when retractedExtruder > Retraction vertical liftPrinter settings > Extruder 1 > Retraction > Lift z
-
-
Other factors beyond the scope of this test - Important!
-
    -
  • Retraction acceleration: This will affect whether the retraction speed can actually be reached. The gcode generator below does not include any changes to what is set on your printer. You can change this with M204 and the R argument.
  • -
  • Slicer settings such as coast and wipe: Coast stops extrusion slightly early to assist retraction. It effectively lets the hot end 'run dry' at the end of the printing movement to reduce ooze. This varies from slicer to slicer and isn't always necessary to tune. -
    Wipe moves the nozzle back towards the recently printed geometry to wipe ooze off. If you are having trouble reducing stringing, it may be a good option. -
    Both coast and wipe are turned off in the gcode generator below.
  • -
  • Travel feedrate and acceleration: A travel move is one where the printer moves to a new location without extruding. The slower this move is, the more time filament will have to ooze from the nozzle and add to stringing. The feedrate is set to 100mm/sec in the gcode generator below, and does not include any changes to what is set on your printer for acceleration. You can change travel acceleration with M204 and the T argument.
  • -
  • Linear advance: Linear advance, covered later in this guide, can drastically improve the accuracy of our extrusion. It has a significant impact of retraction (reducing the need), so after configuring linear advance you may need to revisit retraction.
  • -
  • Slicer differences: The gcode generated below was originally sliced by Simplify3D. The settings you establish should translate to your slicer quite well but there may be idiosyncrasies. For instance, Cura measures extra restart distance in volume rather than length.
  • -
-
-

The following form will create a retraction tower to conveniently test back to back parameters in the same print. Of the three available parameters, it is best to change only one per test print. For example, keep the retraction speed and extra restart distance the same, but vary the retraction distance over each segment. Changing more than one parameter makes is hard to tell what made the difference. The print is quick, so repeat the test varying other parameters until you are happy with them all.

-

Here is the STL if you would like to slice a similar test yourself: retractiontest.stl

-
-

Additional start gcode

-

If you have additional start commands, tick the box and enter the gcode. This can be used for an extruder prime sequence, overwriting the standard flow rate, compensating for 2.85/3.00 mm filament, setting K factor and more. Tick the box for more details.

- - - -
-

For the majority of users, you can skip this section. Any gcode entered here will be inserted after temperatures are set and homing is complete. Start gcode is saved by the browser, you should only have to enter it once. Example uses include:

-
    -
  • Copying gcode commands from your slicer to draw an intro/prime/purge line. By default this is left out to accommodate delta printers.
  • -
  • Telling the firmware to alter the flow rate of the gcode to follow. This does not mean the exact flow rate you have set in your own slicer. For example, using M221 S120 would set the flow rate to 120% of what it was originally sliced as in Simpilfy3D. Use this to compensate for obvious over or under extrusion you may encounter with these tests. Additional information available at the base of the Flow Rate tab.
  • -
  • M221 S38 can also be used to compensate for 2.85 mm filament and M221 S34 for 3.00 mm filament instead of the default 1.75 mm.
  • -
  • Setting the K factor for linear advance. For example, M900 K0.11
  • -
  • Custom ABL sequence. By default, only G28 is present. This gcode will be inserted immediately afer that so custom commands can be used here.
  • -
  • Anythng else you have in your start gcode, such as setting acceleration values, E-steps, etc.
  • -
- +
+
+

Slicer Flow Calibration

+
Aim:
+

To determine the correct amount filament to be extruded by the 3D printer as directed by the slicer. +

When required:
+

Base calibration, as well as any time there has been a change to the extruder/hot end.

+
Tools:
+

Your favourite slicer. Accurate digital/vernier callipers (two decimal places is much more preferable to a set with only one).

- -

Bed dimensions

-

Inputting the correct number will attempt to move the print into the centre of the bed. If the centre button is checked, the bed size is irrelevant. Please check the gcode to ensure it will fit on your bed.

- - -
-

Temperatures

-

For the hot end and bed respectively, typical PLA temperatures are 200 and 60, PETG 235 and 80, ABS 250 and 100, TPU 230 and 5 (effectively off).

- -
-

Part Cooling Fan

-

PLA typically has the part cooling fan come on from layer 2. Alter this default behaviour here:

- - -

Auto Bed Levelling

- - -

Retraction

-

For initial tests, you can leave the retraction speed at 40 mm/sec. For a bowden tube printer, 6mm is a likely retraction distance. For direct drive, a starting value of 1mm may be suitable. Vary either side of this for each segment.

+

Our E-steps are now correct in the firmware, so we will move on to calibrating the slicer. Each slicer has a setting to control the overall amount of filament extruded by the printer. If the flow rate is increased, more filament will be extruded. If the flow rate is decreased, less filament will be extruded.

+

In Simplify3D and PrusaSlicer, this is called Extrusion Multiplier. Cura calls it Flow.

+

My method of determining the correct flow rate is to print a hollow, single wall cube with a specified wall thickness, then measure the actual thickness of the wall and adjust the flow rate in the slicer to suit.

+

Some people prefer to have multiple walls and measure them together. For example, if the extrusion width was 0.4mm with two perimeters, then you would be hoping to measure 0.8mm for the cube wall. This does introduce more variables, such as the amount of perimeter overlap, and therefore a risk of the process failing. This is why I personally prefer a single wall cube, but each to their own.

+

Unfortunately, I can't provide pre-sliced gcode for this process. It is vital to use gcode generated by YOUR slicer. Setting up your slicer to print the cube in the right way should be simple by following these steps:

- + + - - - - - - - + + + + - + - - - - - - - - - - - - - - - + + - - - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - -
Reference DiagramSegmentRetraction distance (mm)Retraction speed (mm/sec)Extra restart distance (mm)Prime (unretract) speed (mm/sec)Z hop (mm)StepCuraSimplify3DPrusaSlicer
- - F
E1. Import STLcube.stl
D2. Turn off infillInfill > Infill density: 0%General settings > Infill percentage: 0%Print settings > Infill > Fill density: 0%
Also set infill to 0% on main panel
C
B
A
-

-

- -

Interpreting Results:

-

Inspect your finished print. Hopefully, there will be a clear difference between the segments that reflect the settings you entered. In the example below (Ender 3 direct drive, PLA, linear advance enabled), the retraction distance varied from 0.4 up to 1.4mm in 0.2mm increments. Segments A and B have the least stringing. Based on this, I would assume that a retraction distance of 0.4 - 0.6 is best for this printer. this is consistent with linear advance being enabled.

-

I would then repeat the test, setting the same retraction distance for each segment and instead altering the retraction speed to dial that in. A third test could then take place to test extra restart distance.

- -

If you would like to be able to customise additional parameters for a retraction test, Prahjister has made a great tool: Retraction Calibration Tool. It has a higher degree of difficulty due to needing more parameters but is ultimately more powerful. Warning! This is an external website and beyond my control. Some users have reported success and others have had issues with the gcode generated. As with the gcode made by this website, monitor your printer during printing with a view to cutting the power if needed.

-
- -
-
-

Temperature Tuning

-
Aim:
-

To set the ideal printing temperature for the hot end for a given filament.

-
When required:
-

Initial calibration, any time the hot end is changed, when trying a new type/brand of filament.

-
Tools:
-

Gcode generator on this page.

-
-

For this calibration, we are only concerned with the temperature of the hot end, not the bed. The bed temperature will need to be matched to any given filament, and once a good value is found, you will generally stick with it.

-

Instead here we are tuning the temperature at which the filament is extruded. There is no universal temperature for a given filament. Variations in heater blocks and thermistor placement dictate this.

-
-
Rule of thumb and special note:
-

A higher nozzle temperature should result in stronger parts, particularly interlayer adhesion. Part surface may be shinier. The filament will be softer so ooze and stringing may be increased, and some surface detail potentially lost, especially on overhangs. A hot end temperature too high may damage parts of the assembly such as the internal PTFE tube.

-

A lower nozzle temperature should result in weaker parts, particularly interlayer adhesion. Part surface may be duller. The filament will be firmer so ooze and stringing may be reduced, with good surface detail, especially on overhangs. A hot end temperature too low can cause the hot end to jam.

-

Temperature tuning and retraction tuning are related to each other. You could do them in either order, and it may be necessary to tune back and forth to reach an ideal result.

-
-

The following form will create a temperature tower to conveniently test back to back parameters in the same print. There are five segments to vary the temperature. Generally the lowest temperatures would be at the start of the print (segment A) and the increase up to the highest by the top of the print (segment E).

-

Your 3D printer firmware will have a minimum hot end temperature extrusion is allowed and a maximum hot end temperature for safety. Make sure to keep within these boundaries to avoid errors.

-

Here is the STL if you would like to slice a similar test yourself: temperaturetower.stl

-
-

Additional start gcode

-

If you have additional start commands, tick the box and enter the gcode. This can be used for an extruder prime sequence, overwriting the standard flow rate, compensating for 2.85/3.00 mm filament, setting K factor and more. Tick the box for more details.

- - - -
-

For the majority of users, you can skip this section. Any gcode entered here will be inserted after temperatures are set and homing is complete. Start gcode is saved by the browser, you should only have to enter it once. Example uses include:

-
    -
  • Copying gcode commands from your slicer to draw an intro/prime/purge line. By default this is left out to accommodate delta printers.
  • -
  • Telling the firmware to alter the flow rate of the gcode to follow. This does not mean the exact flow rate you have set in your own slicer. For example, using M221 S120 would set the flow rate to 120% of what it was originally sliced as in Simpilfy3D. Use this to compensate for obvious over or under extrusion you may encounter with these tests. Additional information available at the base of the Flow Rate tab.
  • -
  • M221 S38 can also be used to compensate for 2.85 mm filament and M221 S34 for 3.00 mm filament instead of the default 1.75 mm.
  • -
  • Setting the K factor for linear advance. For example, M900 K0.11
  • -
  • Custom ABL sequence. By default, only G28 is present. This gcode will be inserted immediately afer that so custom commands can be used here.
  • -
  • Anythng else you have in your start gcode, such as setting acceleration values, E-steps, etc.
  • -
- -
- -

Bed dimensions

-

Inputting the correct number will attempt to move the print into the centre of the bed. If the centre button is checked, the bed size is irrelevant. Please check the gcode to ensure it will fit on your bed.

- - -
-

Bed Temperature

-

For the bed, typical PLA temperature is 60, PETG 80, ABS 100, and TPU 5 (effectively off).

-
-

Part Cooling Fan

-

PLA typically has the part cooling fan come on from layer 2. Alter this default behaviour here.

-

Regardless of which part cooling fan behaviour you select here, the five bridge sections at the top of each segment will always print with 100% part cooling. Once the bridge is printed, the fan will then return to the speed set in the dropdown.

- - -

Auto Bed Levelling

- - -

Retraction

-

For initial tests, you can leave the retraction speed at 40 mm/sec. For a bowden tube printer, 6mm is a likely retraction distance. For direct drive, a starting value of 1mm may be suitable. If you are following this guide in order, you should already know your ideal retraction values.

- - - -

Hot end temperature

-

Typically, filament comes with a recommended hot end temperature. It is recommended to use values either side of this. For instance, if a PLA filament asked for 200 degrees, you may vary the temperature from 190, 195, 200, 205, 210 (the default values of the form). Typically, the first layer temperature will be elevated to increase adhesion with the bed, especially if a lower than usual temperature is being trialled for segment A.

- - - - - - + + + + - - - + + + - - - - - - - - + + + + - - + + + + - - + + + + - - + + + +
Reference DiagramSegmentHot end temperature3. Turn off top layersShell > Top/bottom thickness > Top layers: 0Layer > Top solid layers: 0Print settings > Layers and perimeters > Horizontal layers > Top: 0
- + 4. Ensure wall thickness is a known value.
Substitute whatever values you like here. This example uses 0.4, which is common for a 0.4mm nozzle and 0.2mm layer height.
Shell > Wall thickness: 0.4Extruder > Extrusion width > tick manual > 0.4Print settings > Advanced > Extrusion width > Default extrusion width: 0.4
+ and
+ Print settings > Advanced > Extrusion width > Perimeters: 0.4 + and
+ Print settings > Advanced > Extrusion width > External perimeters: 0.4
E
D
C5. Set outer wall thickness to single extrusionShell > Wall line count: 1Layer > Outline/Perimeter shells: 1Print settings > Layers and perimeters > Vertical shells > Perimeters: 1
B6. Set flow rate to default: 1.0 / 100%Material > Flow: 100Extruder > Extrusion multiplier: 1.0Filament settings > Filament > Extrusion multiplier: 1
A7. Enable vase/spiral mode (optional)Special modes > Spiralize outer contourLayer > Single outline corkscrew printing mode (vase mode)Print settings > Layers and perimeters > Vertical shells > Spiral vase
First layer8. Expected result:
-

-

-
-

Interpreting Results:

-

Inspect your finished print. Hopefully, there will be a clear difference between the segments that reflect the temperatures you entered. In the example below (Ender 3 direct drive, PLA, linear advance enabled), the hot end temperature varied from 185 to 225 in 10 degree increments"

- -

For the first layer, there was some extruder clicking as the extruder struggled to push the filament through the cooler nozzle. As expected, surface becomes more glossy as the temperature increases. What was unexpected, was surface rippling either being more prominent or at least more obvious as the temperature went up. Underhangs and bridges all look good on this test.

-

My previous hot end temperature was 200 degrees for this printer, but I will consider lowering it to 190 degrees after this test.

-

You may also wish to conduct some destructive testing to evaluate part strength. In many cases this is more important than the appearance of the part.

-
- -
-
-

Acceleration Tuning

-
Aim:
-

To find the right compromise between printing speed and quality, specifically related to surface artefacts such as ghosting.

-
When required:
-

Initial calibration, when significant changes are made to the motion system (e.g. heavier bed, conversion to direct drive from bowden tube).

-
Tools:
-

Terminal software such as Pronterface or Octoprint.

-

Gcode generator on this page.

-
-

We set a feedrate or movement speed in our slicer, but the printer does not instantly reach these speeds. Like a motor vehicle, it needs time to accelerate. If the distance of the movement is short, it may not even have time to reach the specified speed. This can determined with the handy acceleration calculator, available on the Prusa website.

-

Complementary to acceleration we have jerk, replaced by junction deviation in newer versions of Marlin. These settings have differences, but both are essentially responsible for making sure the printer does not come to a complete stop between each movement, but rather decelerates an appropriate amount depending on the angle of the next 'corner'.

-

We will be tuning both of these parameters with another tower. The aim is to have a reasonably fast print time without inducing excessive ringing/ghosting. An example of bad ghosting is seen below. The features of the model are repeated across the surfaces due to vibration of the printer components:

- -

I have previously made a detailed video guide on this subject, complete with many diagrams explaining the concepts. The tuning process depicted will be improved upon here with an easier to use calculator and custom gcode generator below.

- -
-
Rule of thumb:
-

Higher acceleration and jerk will result in a faster print time, as the printer reaches top speed faster and maintains a higher speed when corning. This is harder on the printer, and may result in reduced lifespan of components and the need for more regular maintenance. It also introduces more surface defects such as ringing/ghosting.

-

Lower acceleration and jerk will result in a slower print time, as the printer reaches top speed more gradually and corners at a lower velocity. This is easier on the printer, with potentially increased component lifespan and less need for regular maintenance. It reduces surface artefacts such as ringing/ghosting, unless it is far too conservative, in which case it may introduce bulging in corners.

-
-

Calculating maximum feedrate - optional

-

One strategy is to calculate the fastest your 3D printer can move while extruding cleanly, set this feedrate in the slicer, and then tune acceleration to meet this speed. If you are not interested in printing as fast as possible, skip to the next section.

-

This part of the guide and calculator is adapted from Martin Pirringer's tutorial. Please consider supporting him and his robotics team through paypal or you can also donate to team 1989 through their Team 1989 Web Site

-

The following calculator will assist you in determining the maximum feedrate your printer/extruder/hot end is capable of.

-
-
    -
  1. Clear debris from hobbed gear, bring nozzle up to normal printing temp and load filament.
  2. -
  3. Enter the following into pronterface. This will set movement to relative and then extrude 50mm of filament at a feedrate of 2mm/sec:
  4. -
    G91
    -
    G1 E50 F120
    -
  5. Inspect extruded filament for consistency. If all is well, keep repeating with higher feedrate F, until extrusion is inconsistent, extruder stepper skips steps and/or hobbed gear starts eating into filament.
    - The following are examples of increasing the extruder feed rate by 1mm/sec each time, although you should stop when the extrusion becomes problematic. You may have more or less steps than this:
  6. -
    G1 E50 F180
    -
    G1 E50 F240
    -
    G1 E50 F300
    -
    G1 E50 F360
    -
    ...
    -
  7. After you find the limiting speed, back off and repeat the test at a lower feedrate several times in a row until you are confident of reliable and repeatable extrusion.
    Don't forget to put the printer back into absolute movement mode:
  8. -
    G90
    -
  9. Enter your reliable feedrate and filament diameter below:
  10. - - -

    Your maximum reliable extrusion speed is 7.22 mm/3 per second.

    -
  11. Enter the following settings from your slicer:
  12. +
    +
    Special note:
    +

    Some other factors may affect the accuracy of the result.

    +

    Some slicers have a minimum layer time, which on a fast print like this, may slow down the feedrate significantly and alter the wall thickness. You may disable this in the slicer, but if your part cooling system is insufficient, the walls may become very hot and deform.

    +

    To overcome this, you may scale up the X and Y dimensions of the cube. As long as the file is sliced as described above, the wall thickness will not alter from this change in scale and the test will be valid.

    +
    +

    Now slice and print!

    +

    Interpreting Results:

    +

    Use digital/vernier callipers to measure the outer wall thickness of the hollow cube. Take measurements in multiple places/sides and average them.

    + +

    If your measurement is significantly off, the following calculator can then be used to calculate the new flow rate:

    - - - + - - - - - - - - - - + +
    Input setting: CuraSimplify3DPrusaSlicerSimplify3D / PrusaSlicer
    Quality > Layer heightLayer > Primary layer heightPrint settings > Layer height
    Quality > Line widthExtruder > Extrusion widthPrint settings > Advanced > Extrusion width > Default extrusion width + +

    +

    +

    + + +
    +

    Your new flow rate should be

    +
    + +
    +
    +

    +

    +

    + + +
    +

    Your new flow rate should be

    +
    +
    +
    -

    Your maximum reliable XY feedrate is 90 mm per second.

    -

    Warning: This value is dependent on a number of variables such as filament type, brand, colour, ambient temperature, etc. Be conservative to ensure success.

    -
-

- -

Acceleration Tuning

-

We will now produce an acceleration tower to conveniently test back to back settings in a single print. If you would like to slice the model yourself, here is the STL: accelerationtower.stl. It should be sliced with a normal base, but hollow, no top layers and only 2 perimeters.

-

The only thing you need to know before this test is whether your firmware is set up for jerk (older) or junction deviation (newer). Entering M503 via terminal will give a list of printer variables:

-
    -
  • If the M205 line contains the letters X, Y & Z, your printer is running jerk. The numbers after the X,Y & Z are your current jerk values for each axis.
  • -
  • If the M205 contains the letter J, your printer is running junction deviation. The number after the J is your current junction deviation value.
  • -
-

The image below shows an example of each of these scenarios:

- -

Use the following form to customise the gcode to your liking:

-
-

Additional start gcode

-

If you have additional start commands, tick the box and enter the gcode. This can be used for an extruder prime sequence, overwriting the standard flow rate, compensating for 2.85/3.00 mm filament, setting K factor and more. Tick the box for more details.

- - - -
-

For the majority of users, you can skip this section. Any gcode entered here will be inserted after temperatures are set and homing is complete. Start gcode is saved by the browser, you should only have to enter it once. Example uses include:

-
    -
  • Copying gcode commands from your slicer to draw an intro/prime/purge line. By default this is left out to accommodate delta printers.
  • -
  • Telling the firmware to alter the flow rate of the gcode to follow. This does not mean the exact flow rate you have set in your own slicer. For example, using M221 S120 would set the flow rate to 120% of what it was originally sliced as in Simpilfy3D. Use this to compensate for obvious over or under extrusion you may encounter with these tests. Additional information available at the base of the Flow Rate tab.
  • -
  • M221 S38 can also be used to compensate for 2.85 mm filament and M221 S34 for 3.00 mm filament instead of the default 1.75 mm.
  • -
  • Setting the K factor for linear advance. For example, M900 K0.11
  • -
  • Custom ABL sequence. By default, only G28 is present. This gcode will be inserted immediately afer that so custom commands can be used here.
  • -
  • Anythng else you have in your start gcode, such as setting acceleration values, E-steps, etc.
  • -
- +
+

Important note!

+

What you see with your eyes is more important than a theoretical calculation. After you have performed this calibration, please adjust the flow rate higher or lower based on what you actually see.

+

For example, the cube shown in the thumbnail of the XYZ 20mm calibration cube by iDig3Dprinting:

+ +

This print shows clear signs of under extrusion. There are gaps in the top infill as well as gaps between the perimeters and infill. Despite what any calibration procedure determined, the flow rate for this slicer/printer combination needs to be increased.

+

This article on all3DP has examples of what over extrusion looks like.

- -

Bed dimensions

-

Inputting the correct number will attempt to move the print into the centre of the bed. If the centre button is checked, the bed size is irrelevant. Please check the gcode to ensure it will fit on your bed.

- - -
-

Temperatures

-

For the hot end and bed respectively, typical PLA temperatures are 200 and 60, PETG 235 and 80, ABS 250 and 100, TPU 230 and 5 (effectively off).

- -
-

Part Cooling Fan

-

PLA typically has the part cooling fan come on from layer 2. Alter the default behaviour here:

- - -

Auto Bed Levelling

- - -

Retraction

-

For initial tests, you can leave the retraction speed at 40 mm/sec. For a bowden tube printer, 6mm is a likely retraction distance. For direct drive, a starting value of 1mm may be suitable. If you are following this guide in order, you should already know your ideal retraction values.

- -
- -

Base feedrate/speed

-

You can specify the feedrate for X and Y movements. The inner perimeter will be set to this speed and the outer perimeter 50% of this speed.

- -

Acceleration and jerk/junction deviation

-

After entering M503, I have determined my 3D printer firmware uses:

- - -

Based on the values you saw from M503, enter variables around this below.

-

Junction deviation requires a single value, whereas jerk has separate values for X and Y. You can leave them the same or enter independent values.

-

You should only change either acceleration or jerk/junction deviation for each test print, otherwise it will be impossible to know which parameter is responsible for any changes.

+

Can I use this flow value in the other tests on this site?

+

The short answer is: not really.

+

The gcode generators on this site work by using javacsript to modify source gcode originally created by Simplify3D. However, when you completed the calibration test above, you sliced your own gcode, making your own baseline and then making a flow adjustment relative to that. Therefore, this test is unique from the others on this site which is why the flow rate doesn't necessarily translate.

+

Let's say your old flow rate was 100% and you have tested and corrected this to 96%. The gcode on this site originally had a flow rate of 90% when sliced, so applying your 96% to that gives a final result of 86.4%, not 96%. Your slicer profile settings will also be different in other ways, which further complicates matters. Therefore, there is not a straightforward correlation between your slicer and my gcode generators.

+

The aim of the site is to discover ideal settings you can apply to your own slicer profile, not to optimise the gcode created by the generators. Keep this in mind and focus on the aim of each test, rather than the general print quality.

+

If you are experiencing significant over or under extrusion that prevents you from using the tests properly, by using the custom start gcode function on this site you can optionally issue an M221 to override the values in the generatored gcode. For example, using M221 S90 would tell the firmware to only extrude 90% of what the gcode asks for. This is an easy method for making a quick correction that will alow the tests to complete successfully.

+
+
+
+

Stepper Motor Current Tuning

+
Aim:
+

To set the correct amount of current supplied to the stepper motors of the printer. This is set with the stepper motor drivers, located on the mainboard.

+
When required:
+

If steps are being skipped/missed. If the stepper motors are too hot to touch. When significant changes are made to the motion system (e.g. heavier bed, conversion to direct drive from bowden tube).

+

If your 3D printer is running fine without hot stepper motors, you may skip this step.

+
Tools:
+

For newer, 'smart' stepper motor drivers: terminal software such as Pronterface or Octoprint.

+

For older stepper motor drivers: a multimeter, small screwdriver and a spare wire with alligator clips (optional but recommended).

+
+

Setting the stepper driver current is an important step in calibrating a 3D printer, although typically the value does not need to be exact. There is a window within which the printer will operate without issue.

+

General methods are used on this page, but if you are after more detail on a specific driver, my stepper motor driver guide playlist may be of use.

+

Although we target a specific current, the following rule of thumb is the most important factor:

+
+
Rule of thumb:
+

If the stepper motor is missing steps or you are experiencing layer shifts, the stepper current needs to be increased. This will supply more torque to the motor but also make it (and the driver) run hotter.

+

If the stepper motor is too hot to touch, the stepper current needs to be decreased. This will remove torque and make the motor (and the driver) run cooler.

+
+

Unfortunately, sometimes a stepper motor may be running hot and still missing steps. The following may apply in these cases:

+
    +
  • In the case of the extruder stepper motor, there may be an obstruction such as a partially blocked nozzle, PTFE tube unseated, hot end temperature too low (increased resistance to melting/flow) and/or first layer too close (nozzle jammed against bed, nowhere for plastic to exit).
  • +
  • For X, Y and Z, the stepper motor may be undersized for the mass it is pushing. This can occur when increasing the size of the printer (e.g. Ender Extender kit), adding something heavier to the bed (e.g. glass/mirror plate), and/or converting from bowden tube to a heavy direct drive extruder.
  • +
  • If there is some sort of mechanical misalignment that makes movement a lot harder. This may be a V-roller that is far too tight or a misaligned Z axis leadscrew causing the Z axis to bind.
  • +
  • The acceleration/jerk and printing speeds are too aggressive for the stepper motors.
  • +
  • Each stepper motor driver has a rated current, if this is too high it will run very hot and potentially cause missed steps. Active cooling can help this, but the current should still be still within the safe specifications for that driver.
  • +
+

If tuning the stepper driver current is unable to find a sweet spot, the good news is you can upgrade to a larger stepper motor easily in most cases. Nema17 steppers have the same mounting pattern and output shaft diameter, however you should still check your machine to ensure there is enough room for a longer stepper before any purchase. With all else being equal, a longer stepper motor will be capable of more torque and handling higher current.

+
+

Depending on the stepper motor driver, there are two ways of setting the current:

+
1. Physical:
+

For older stepper motor drivers or TMC drivers running in legacy mode, the current is set by turning a trim pot screw on the top of the driver to raise or lower VREF, which in turns sets the driver current.

+
2. Gcode:
+

On TMC drivers, the current is set directly with gcode commands. This can be set in the firmware, via a terminal or by using the printer's LCD. This value should then be saved to EEPROM to stay persistent.

+

We will cover these one at a time below.

+
+

Peak Current and Sense Resistor Value

+

Setting stepper driver current accurately relies on knowing two values: the peak current that the stepper motor is rated for and the sense resistor value on the stepper motor driver.

+

For newer TMC drivers, the sense resistor value is already known. For older drivers, methods for determining this are seen in the following snippet. Methods for determining the stepper motor peak current are shown too:

+ +

1. Physical

+

I have covered this in detail before, so please use the embedded video below (queued to the correct time) to see how to set the VREF. The process is essentially the same for any driver.

+

The VREF is just a reference voltage to assist us in setting the driver current. It is used because it is much simpler to measure voltage rather than current with a multimeter. Typically these drivers have the peak/max current set.

+

The general steps for setting current via VREF are the same between drivers, only the VREF formula changes:

+
    +
  1. Power up mainboard via 12/24V normal power supply, NOT just USB 5V.
  2. +
  3. Set multimeter to DC voltage, max 2V range.
  4. +
  5. Connect black/negative multimeter probe to ground. This can be a negative terminal or the top of the USB connector.
  6. +
  7. Connect the red/positive probe to the trim pot on top of the driver to measure VREF.
  8. +
  9. Turn the trim pot SLOWLY with a screwdriver, then remeasure.
  10. +
  11. Repeat for each stepper motor driver.
  12. +
+

Alternatively, you can use an alligator clip wire between the red probe and the metal shaft of the screwdriver, so that a VREF reading is available as you turn the screwdriver. This procedure is shown in this snippet:

+ +

The VREF formulas for drivers I have tested are as follows:

+

A4988

+

The typical sense resistor value is 0.1. Please check your drivers to be sure.

+
VREF = 8 x max current x sense resistor value
+

Then use the video above as a guide to the process.

+

DRV8825

+

The sense resistor value should be 0.1. If it is:

+
VREF = max current / 2
+

The process is then the same as for A4988s as shown in the video above.

+

TMC2100

+

Like the TMC drivers covered in the gcode section, the current for the TMC2100 is set not as a peak, but instead as RMS. To determine RMS, divide the peak current by 1.41.

+
VREF = (RMS current * 2.5) / 1.77
+

The process is then the same as for A4988s as shown in the video above.

+

TMC2208 - Legacy/standalone mode (as found in Creality silent boards)

+

Like the TMC drivers covered in the gcode section, the current for the TMC2208 (legacy mode) is set not as a peak, but instead as RMS. To determine RMS, divide the peak current by 1.41.

+
VREF = (RMS current * 2.5) / 1.77
+

The process is then the same as for A4988s as shown in the video above.

+

LV8729

+

There are mainly two kinds of stepper driver boards with this driver.

+

One has a resistor labelled R100 on the bottom, and on the other the resistor is labelled R220. Which formula you use is based off of this resistor

+

The process is then mostly the same as for A4988s as shown in the video above, but with the correct formula for your driver board.

+

R100:

+
VREF = max current / 2
+

R220:

+
VREF = max current * 1.1
+

2. Gcode

+

TMC drivers connected via UART or SPI serial can easily have their current set via gcode. This is not peak current, but rather RMS (root mean square) current. Rather than the maximum, think of this as more a typical/average current, where the driver will be operating mostly. To convert the peak current from stepper motor specs to RMS, divide it by 1.41.

+

The current can be set in a few different ways for each driver:

+

TMC2208, TMC2209, TMC2130, etc

+

These drivers should have a sense resistor value of 0.11. This is the default in Marlin, so when compiling it should already be set (X_RSENSE for the X axis, Y_SENSE for Y and so forth):

+ +

Therefore, you can set your RMS current directly in the firmware when compiling. This is X_CURRENT for the X axis, Y_CURRENT for the Y and so forth. After flashing firmware, remember that the previous value may still be stored in the EEPROM. Check your values by entering M503 in a terminal.

+

You can also set the RMS current via terminal with M906. Please follow the link to see the reference. An example of setting the X axis current to 680 would be:

+
M906 X680
+

Don't forget to save the value to EEPROM afterwards with:

+
M500
+

Finally, the LCD Configuration menu can be used to set the RMS current. Don't forget to save afterwards by clicking on Store Settings.

+

TMC5160

+

The TMC5160 is the same as the other TMC drivers apart from one important difference: the sense resistor value needs to be changed from 0.11 to 0.075 when compiling the firmware.

+ +

After this change is made, the same procedures apply:

+

You can set your RMS current directly in the firmware when compiling. This is X_CURRENT for the X axis, Y_CURRENT for the Y and so forth. After flashing firmware, remember that the previous value may still be stored in the EEPROM. Check your values by entering M503 in a terminal.

+

You can also set the RMS current via terminal with M906. Please follow the link to see the reference. An example of setting the X axis current to 680 would be:

+
M906 X680
+

Don't forget to save the value to EEPROM afterwards with:

+
M500
+

Finally, the LCD Configuration menu can be used to set the RMS current. Don't forget to save afterwards by clicking on Store Settings.

+
+
+
+

Retraction Tuning

+
Aim:
+

To set the correct parameters concerning retraction during 3D printing, including retraction distance, speed, extra restart distance, prime speed and z hop.

+
When required:
+

Initial calibration, any time the hot end or extruder is changed, when trying a new type/brand of filament.

+
Tools:
+

Gcode generator on this page.

+
+

FDM works by melting plastic filament and extruding it accurately one layer at a time to build up 3D geometry. By its nature, the plastic will continue to ooze and drip out of the nozzle even when not pushed by the extruder. To combat this, our slicers use retraction, where the filament is withdrawn from the hot end, alleviating pressure and minimising ooze. When properly tuned, this has the effect of removing stringing, the unwanted oozing of plastic between two points of the model.

+

An example of fine stringing can be seen in the following image. It appears like cobwebs:

+ +
+
Special note:
+

Temperature tuning and retraction tuning are related to each other. You could do them in either order, and it may be necessary to tune back and forth to reach an ideal result. A higher nozzle temperature will promote more oozing and stringing, whereas a lower temperature will reduce oozing and stringing.

+
+

Besides hot end temperature, there are five parameters we will be tuning relating to retraction. In the table is a description of each as well as where the setting is found in the most popular slicers. By far the most important is retraction distance.

- + + - - - - - - + + + + - + - - - - - - - - - - - - - + + + + - - - - - + + + + - - - - - + + + + - - - - - > + + + + - - - - - + + + +
Reference diagramSegmentAccelerationJerk XJerk YJunction deviationRetraction ParameterCuraSimplify3DPrusaSlicer
F
ERetraction distance: The length the filament is pulled away from the nozzle in mm.Travel > Retraction distanceExtruder > Retraction distancePrinter settings > Extruder 1 > Retraction > Length
DRetraction speed: The speed at which this filament is withdrawn in mm/sec.Travel > Retraction speedExtruder > Retraction speedPrinter settings > Extruder 1 > Retraction > Retraction Speed
CExtra restart distance: The retraction distance will be reversed when the travel (non-extruding) movement is over. This is typically zero, but you can opt for extra filament to be extruded (a positive value) or less than what was retracted (a negative value). Also measured in mm.Travel > Retraction extra prime amountExtruder > Extra restart distancePrinter settings > Extruder 1 > Retraction > Extra length on restart
BPrime (unretract) speed: The speed at which this filament is reintroduced to the nozzle in mm/sec.Travel > Retraction prime speedNot supported. S3D will use retraction speed as prime speed.Printer settings > Extruder 1 > Retraction > Deretraction speed
AZ hop: The amount the nozzle lifts vertically in mm during a travel (non-extruding) movement. After this movement, the correct Z value is then restored before the filament is unretracted/primed again ready for printing.Travel > Z hop when retractedExtruder > Retraction vertical liftPrinter settings > Extruder 1 > Retraction > Lift z
-

-

- -

Interpreting Results:

-

Inspect your finished print. Hopefully, there will be a clear difference between the segments that reflect the acceleration values you entered. In the example below (Ender 3 direct drive, PLA, linear advance enabled), acceleration varied from 300 to 800 in 100 mm/sec/sec increments. Junction deviation was left at the default 0.08. The difference between each segment is subtle, but there is increased ghosting around the letter Y on the higher segments. The previous value was 500, but a small increase in quality may be achieved from lowering the value to 400.

- -

-

Once you have a value you are happy with, you can update with:

-
M204 P400
-

where 400 is the value of the acceleration with the best compromise based on the tower test print. We can store the value to EEPROM by sending:

-
M500
-

You would then repeat the test with all of the acceleration values locked at your preferred value for each segment, but this time varying jerk/junction deviation.

-

To save for a printer with jerk (with a determined best compromise of 8 for this example), we would enter:

-
M205 X8 Y8
-

To save for a printer with junction deviation (with a determined best compromise of 0.05 for this example), we would enter:

-
M205 J0.05
-

Either way, we save to EEPROM afterwards with:

-
M500
-

Each of these parameters can also be entered and stored from the configuration menu of the Marlin LCD.

-
-
Special note for Cura and PrusaSlicer:
-

Cura and PrusaSlicer both have the capability to control these parameters from the slicer by inserting appropriate gcode. If you are finding that your new acceleration values are not taking effect, you may need to also set them in the slicer. This is actually a desirable feature, as it allows more aggressive settings for infill and features that can't be seen in the final print, yet be more conservative for outer walls where aesthetics are paramount.

- +
+
Other factors beyond the scope of this test - Important!
+
    +
  • Retraction acceleration: This will affect whether the retraction speed can actually be reached. The gcode generator below does not include any changes to what is set on your printer. You can change this with M204 and the R argument.
  • +
  • Slicer settings such as coast and wipe: Coast stops extrusion slightly early to assist retraction. It effectively lets the hot end 'run dry' at the end of the printing movement to reduce ooze. This varies from slicer to slicer and isn't always necessary to tune. +
    Wipe moves the nozzle back towards the recently printed geometry to wipe ooze off. If you are having trouble reducing stringing, it may be a good option. +
    Both coast and wipe are turned off in the gcode generator below.
  • +
  • Travel feedrate and acceleration: A travel move is one where the printer moves to a new location without extruding. The slower this move is, the more time filament will have to ooze from the nozzle and add to stringing. The feedrate is set to 100mm/sec in the gcode generator below, and does not include any changes to what is set on your printer for acceleration. You can change travel acceleration with M204 and the T argument.
  • +
  • Linear advance: Linear advance, covered later in this guide, can drastically improve the accuracy of our extrusion. It has a significant impact of retraction (reducing the need), so after configuring linear advance you may need to revisit retraction.
  • +
  • Slicer differences: The gcode generated below was originally sliced by Simplify3D. The settings you establish should translate to your slicer quite well but there may be idiosyncrasies. For instance, Cura measures extra restart distance in volume rather than length.
  • +
+
+

The following form will create a retraction tower to conveniently test back to back parameters in the same print. Of the three available parameters, it is best to change only one per test print. For example, keep the retraction speed and extra restart distance the same, but vary the retraction distance over each segment. Changing more than one parameter makes is hard to tell what made the difference. The print is quick, so repeat the test varying other parameters until you are happy with them all.

+

Here is the STL if you would like to slice a similar test yourself: retractiontest.stl

+
+

Additional start gcode

+

If you have additional start commands, tick the box and enter the gcode. This can be used for an extruder prime sequence, overwriting the standard flow rate, compensating for 2.85/3.00 mm filament, setting K factor and more. Tick the box for more details.

+ + + +
+

For the majority of users, you can skip this section. Any gcode entered here will be inserted after temperatures are set and homing is complete. Start gcode is saved by the browser, you should only have to enter it once. Example uses include:

+
    +
  • Copying gcode commands from your slicer to draw an intro/prime/purge line. By default this is left out to accommodate delta printers.
  • +
  • Telling the firmware to alter the flow rate of the gcode to follow. This does not mean the exact flow rate you have set in your own slicer. For example, using M221 S120 would set the flow rate to 120% of what it was originally sliced as in Simpilfy3D. Use this to compensate for obvious over or under extrusion you may encounter with these tests. Additional information available at the base of the Flow Rate tab.
  • +
  • M221 S38 can also be used to compensate for 2.85 mm filament and M221 S34 for 3.00 mm filament instead of the default 1.75 mm.
  • +
  • Setting the K factor for linear advance. For example, M900 K0.11
  • +
  • Custom ABL sequence. By default, only G28 is present. This gcode will be inserted immediately afer that so custom commands can be used here.
  • +
  • Anythng else you have in your start gcode, such as setting acceleration values, E-steps, etc.
  • +
+ +
+ +

Bed dimensions

+

Inputting the correct number will attempt to move the print into the centre of the bed. If the centre button is checked, the bed size is irrelevant. Please check the gcode to ensure it will fit on your bed.

+ + +
+

Temperatures

+

For the hot end and bed respectively, typical PLA temperatures are 200 and 60, PETG 235 and 80, ABS 250 and 100, TPU 230 and 5 (effectively off).

+ +
+

Part Cooling Fan

+

PLA typically has the part cooling fan come on from layer 2. Alter this default behaviour here:

+ + +

Auto Bed Levelling

+ + +

Retraction

+

For initial tests, you can leave the retraction speed at 40 mm/sec. For a bowden tube printer, 6mm is a likely retraction distance. For direct drive, a starting value of 1mm may be suitable. Vary either side of this for each segment.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Reference DiagramSegmentRetraction distance (mm)Retraction speed (mm/sec)Extra restart distance (mm)Prime (unretract) speed (mm/sec)Z hop (mm)
+ + F
E
D
C
B
A
+

+

+
+

Interpreting Results:

+

Inspect your finished print. Hopefully, there will be a clear difference between the segments that reflect the settings you entered. In the example below (Ender 3 direct drive, PLA, linear advance enabled), the retraction distance varied from 0.4 up to 1.4mm in 0.2mm increments. Segments A and B have the least stringing. Based on this, I would assume that a retraction distance of 0.4 - 0.6 is best for this printer. this is consistent with linear advance being enabled.

+

I would then repeat the test, setting the same retraction distance for each segment and instead altering the retraction speed to dial that in. A third test could then take place to test extra restart distance.

+ +

If you would like to be able to customise additional parameters for a retraction test, Prahjister has made a great tool: Retraction Calibration Tool. It has a higher degree of difficulty due to needing more parameters but is ultimately more powerful. Warning! This is an external website and beyond my control. Some users have reported success and others have had issues with the gcode generated. As with the gcode made by this website, monitor your printer during printing with a view to cutting the power if needed.

-
- -
-
-

Linear Advance Tuning

-
Aim:
-

To tune the timing of the extrusion with the aim of reducing swollen corners and thinner walls. This results in a more consistent extrusion and a reduction in surface artefacts.

-
When required:
-

Initial calibration, when changing the extruder/hot end (especially if changing from bowden tube to direct drive), when trying new filaments.

-
Tools:
-

Marlin Linear Advance Pattern Generator

+
+
+

Temperature Tuning

+
Aim:
+

To set the ideal printing temperature for the hot end for a given filament.

+
When required:
+

Initial calibration, any time the hot end is changed, when trying a new type/brand of filament.

+
Tools:
+

Gcode generator on this page.

+
+

For this calibration, we are only concerned with the temperature of the hot end, not the bed. The bed temperature will need to be matched to any given filament, and once a good value is found, you will generally stick with it.

+

Instead here we are tuning the temperature at which the filament is extruded. There is no universal temperature for a given filament. Variations in heater blocks and thermistor placement dictate this.

+
+
Rule of thumb and special note:
+

A higher nozzle temperature should result in stronger parts, particularly interlayer adhesion. Part surface may be shinier. The filament will be softer so ooze and stringing may be increased, and some surface detail potentially lost, especially on overhangs. A hot end temperature too high may damage parts of the assembly such as the internal PTFE tube.

+

A lower nozzle temperature should result in weaker parts, particularly interlayer adhesion. Part surface may be duller. The filament will be firmer so ooze and stringing may be reduced, with good surface detail, especially on overhangs. A hot end temperature too low can cause the hot end to jam.

+

Temperature tuning and retraction tuning are related to each other. You could do them in either order, and it may be necessary to tune back and forth to reach an ideal result.

+
+

The following form will create a temperature tower to conveniently test back to back parameters in the same print. There are five segments to vary the temperature. Generally the lowest temperatures would be at the start of the print (segment A) and the increase up to the highest by the top of the print (segment E).

+

Your 3D printer firmware will have a minimum hot end temperature extrusion is allowed and a maximum hot end temperature for safety. Make sure to keep within these boundaries to avoid errors.

+

Here is the STL if you would like to slice a similar test yourself: temperaturetower.stl

+
+

Additional start gcode

+

If you have additional start commands, tick the box and enter the gcode. This can be used for an extruder prime sequence, overwriting the standard flow rate, compensating for 2.85/3.00 mm filament, setting K factor and more. Tick the box for more details.

+ + + +
+

For the majority of users, you can skip this section. Any gcode entered here will be inserted after temperatures are set and homing is complete. Start gcode is saved by the browser, you should only have to enter it once. Example uses include:

+
    +
  • Copying gcode commands from your slicer to draw an intro/prime/purge line. By default this is left out to accommodate delta printers.
  • +
  • Telling the firmware to alter the flow rate of the gcode to follow. This does not mean the exact flow rate you have set in your own slicer. For example, using M221 S120 would set the flow rate to 120% of what it was originally sliced as in Simpilfy3D. Use this to compensate for obvious over or under extrusion you may encounter with these tests. Additional information available at the base of the Flow Rate tab.
  • +
  • M221 S38 can also be used to compensate for 2.85 mm filament and M221 S34 for 3.00 mm filament instead of the default 1.75 mm.
  • +
  • Setting the K factor for linear advance. For example, M900 K0.11
  • +
  • Custom ABL sequence. By default, only G28 is present. This gcode will be inserted immediately afer that so custom commands can be used here.
  • +
  • Anythng else you have in your start gcode, such as setting acceleration values, E-steps, etc.
  • +
+ +
+ +

Bed dimensions

+

Inputting the correct number will attempt to move the print into the centre of the bed. If the centre button is checked, the bed size is irrelevant. Please check the gcode to ensure it will fit on your bed.

+ + +
+

Bed Temperature

+

For the bed, typical PLA temperature is 60, PETG 80, ABS 100, and TPU 5 (effectively off).

+
+

Part Cooling Fan

+

PLA typically has the part cooling fan come on from layer 2. Alter this default behaviour here.

+

Regardless of which part cooling fan behaviour you select here, the five bridge sections at the top of each segment will always print with 100% part cooling. Once the bridge is printed, the fan will then return to the speed set in the dropdown.

+ + +

Auto Bed Levelling

+ + +

Retraction

+

For initial tests, you can leave the retraction speed at 40 mm/sec. For a bowden tube printer, 6mm is a likely retraction distance. For direct drive, a starting value of 1mm may be suitable. If you are following this guide in order, you should already know your ideal retraction values.

+ + + +

Hot end temperature

+

Typically, filament comes with a recommended hot end temperature. It is recommended to use values either side of this. For instance, if a PLA filament asked for 200 degrees, you may vary the temperature from 190, 195, 200, 205, 210 (the default values of the form). Typically, the first layer temperature will be elevated to increase adhesion with the bed, especially if a lower than usual temperature is being trialled for segment A.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Reference DiagramSegmentHot end temperature
+ + E
D
C
B
A
First layer
+

+

+
+

Interpreting Results:

+

Inspect your finished print. Hopefully, there will be a clear difference between the segments that reflect the temperatures you entered. In the example below (Ender 3 direct drive, PLA, linear advance enabled), the hot end temperature varied from 185 to 225 in 10 degree increments"

+ +

For the first layer, there was some extruder clicking as the extruder struggled to push the filament through the cooler nozzle. As expected, surface becomes more glossy as the temperature increases. What was unexpected, was surface rippling either being more prominent or at least more obvious as the temperature went up. Underhangs and bridges all look good on this test.

+

My previous hot end temperature was 200 degrees for this printer, but I will consider lowering it to 190 degrees after this test.

+

You may also wish to conduct some destructive testing to evaluate part strength. In many cases this is more important than the appearance of the part.

+
+
+
+

Acceleration Tuning

+
Aim:
+

To find the right compromise between printing speed and quality, specifically related to surface artefacts such as ghosting.

+
When required:
+

Initial calibration, when significant changes are made to the motion system (e.g. heavier bed, conversion to direct drive from bowden tube).

+
Tools:
+

Terminal software such as Pronterface or Octoprint.

+

Gcode generator on this page.

+
+

We set a feedrate or movement speed in our slicer, but the printer does not instantly reach these speeds. Like a motor vehicle, it needs time to accelerate. If the distance of the movement is short, it may not even have time to reach the specified speed. This can determined with the handy acceleration calculator, available on the Prusa website.

+

Complementary to acceleration we have jerk, replaced by junction deviation in newer versions of Marlin. These settings have differences, but both are essentially responsible for making sure the printer does not come to a complete stop between each movement, but rather decelerates an appropriate amount depending on the angle of the next 'corner'.

+

We will be tuning both of these parameters with another tower. The aim is to have a reasonably fast print time without inducing excessive ringing/ghosting. An example of bad ghosting is seen below. The features of the model are repeated across the surfaces due to vibration of the printer components:

+ +

I have previously made a detailed video guide on this subject, complete with many diagrams explaining the concepts. The tuning process depicted will be improved upon here with an easier to use calculator and custom gcode generator below.

+ +
+
Rule of thumb:
+

Higher acceleration and jerk will result in a faster print time, as the printer reaches top speed faster and maintains a higher speed when corning. This is harder on the printer, and may result in reduced lifespan of components and the need for more regular maintenance. It also introduces more surface defects such as ringing/ghosting.

+

Lower acceleration and jerk will result in a slower print time, as the printer reaches top speed more gradually and corners at a lower velocity. This is easier on the printer, with potentially increased component lifespan and less need for regular maintenance. It reduces surface artefacts such as ringing/ghosting, unless it is far too conservative, in which case it may introduce bulging in corners.

+
+

Calculating maximum feedrate - optional

+

One strategy is to calculate the fastest your 3D printer can move while extruding cleanly, set this feedrate in the slicer, and then tune acceleration to meet this speed. If you are not interested in printing as fast as possible, skip to the next section.

+

This part of the guide and calculator is adapted from Martin Pirringer's tutorial. Please consider supporting him and his robotics team through paypal or you can also donate to team 1989 through their Team 1989 Web Site

+

The following calculator will assist you in determining the maximum feedrate your printer/extruder/hot end is capable of.

+
+
    +
  1. Clear debris from hobbed gear, bring nozzle up to normal printing temp and load filament.
  2. +
  3. Enter the following into pronterface. This will set movement to relative and then extrude 50mm of filament at a feedrate of 2mm/sec:
  4. +
    G91
    +
    G1 E50 F120
    +
  5. Inspect extruded filament for consistency. If all is well, keep repeating with higher feedrate F, until extrusion is inconsistent, extruder stepper skips steps and/or hobbed gear starts eating into filament.
    + The following are examples of increasing the extruder feed rate by 1mm/sec each time, although you should stop when the extrusion becomes problematic. You may have more or less steps than this:
  6. +
    G1 E50 F180
    +
    G1 E50 F240
    +
    G1 E50 F300
    +
    G1 E50 F360
    +
    ...
    +
  7. After you find the limiting speed, back off and repeat the test at a lower feedrate several times in a row until you are confident of reliable and repeatable extrusion.
    Don't forget to put the printer back into absolute movement mode:
  8. +
    G90
    +
  9. Enter your reliable feedrate and filament diameter below:
  10. + + +

    Your maximum reliable extrusion speed is 7.22 mm/3 per second.

    +
  11. Enter the following settings from your slicer:
  12. + + + + + + + + + + + + + + + + + + + + + + + +
    Input setting:CuraSimplify3DPrusaSlicer
    Quality > Layer heightLayer > Primary layer heightPrint settings > Layer height
    Quality > Line widthExtruder > Extrusion widthPrint settings > Advanced > Extrusion width > Default extrusion width
    +

    Your maximum reliable XY feedrate is 90 mm per second.

    +

    Warning: This value is dependent on a number of variables such as filament type, brand, colour, ambient temperature, etc. Be conservative to ensure success.

    +
+

+
+

Acceleration Tuning

+

We will now produce an acceleration tower to conveniently test back to back settings in a single print. If you would like to slice the model yourself, here is the STL: accelerationtower.stl. It should be sliced with a normal base, but hollow, no top layers and only 2 perimeters.

+

The only thing you need to know before this test is whether your firmware is set up for jerk (older) or junction deviation (newer). Entering M503 via terminal will give a list of printer variables:

+
    +
  • If the M205 line contains the letters X, Y & Z, your printer is running jerk. The numbers after the X,Y & Z are your current jerk values for each axis.
  • +
  • If the M205 contains the letter J, your printer is running junction deviation. The number after the J is your current junction deviation value.
  • +
+

The image below shows an example of each of these scenarios:

+ +

Use the following form to customise the gcode to your liking:

+
+

Additional start gcode

+

If you have additional start commands, tick the box and enter the gcode. This can be used for an extruder prime sequence, overwriting the standard flow rate, compensating for 2.85/3.00 mm filament, setting K factor and more. Tick the box for more details.

+ + + +
+

For the majority of users, you can skip this section. Any gcode entered here will be inserted after temperatures are set and homing is complete. Start gcode is saved by the browser, you should only have to enter it once. Example uses include:

+
    +
  • Copying gcode commands from your slicer to draw an intro/prime/purge line. By default this is left out to accommodate delta printers.
  • +
  • Telling the firmware to alter the flow rate of the gcode to follow. This does not mean the exact flow rate you have set in your own slicer. For example, using M221 S120 would set the flow rate to 120% of what it was originally sliced as in Simpilfy3D. Use this to compensate for obvious over or under extrusion you may encounter with these tests. Additional information available at the base of the Flow Rate tab.
  • +
  • M221 S38 can also be used to compensate for 2.85 mm filament and M221 S34 for 3.00 mm filament instead of the default 1.75 mm.
  • +
  • Setting the K factor for linear advance. For example, M900 K0.11
  • +
  • Custom ABL sequence. By default, only G28 is present. This gcode will be inserted immediately afer that so custom commands can be used here.
  • +
  • Anythng else you have in your start gcode, such as setting acceleration values, E-steps, etc.
  • +
+ +
+ +

Bed dimensions

+

Inputting the correct number will attempt to move the print into the centre of the bed. If the centre button is checked, the bed size is irrelevant. Please check the gcode to ensure it will fit on your bed.

+ + +
+

Temperatures

+

For the hot end and bed respectively, typical PLA temperatures are 200 and 60, PETG 235 and 80, ABS 250 and 100, TPU 230 and 5 (effectively off).

+ +
+

Part Cooling Fan

+

PLA typically has the part cooling fan come on from layer 2. Alter the default behaviour here:

+ + +

Auto Bed Levelling

+ + +

Retraction

+

For initial tests, you can leave the retraction speed at 40 mm/sec. For a bowden tube printer, 6mm is a likely retraction distance. For direct drive, a starting value of 1mm may be suitable. If you are following this guide in order, you should already know your ideal retraction values.

+ +
+ +

Base feedrate/speed

+

You can specify the feedrate for X and Y movements. The inner perimeter will be set to this speed and the outer perimeter 50% of this speed.

+ +

Acceleration and jerk/junction deviation

+

After entering M503, I have determined my 3D printer firmware uses:

+ + +

Based on the values you saw from M503, enter variables around this below.

+

Junction deviation requires a single value, whereas jerk has separate values for X and Y. You can leave them the same or enter independent values.

+

You should only change either acceleration or jerk/junction deviation for each test print, otherwise it will be impossible to know which parameter is responsible for any changes.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > + + + + + + + + + +
Reference diagramSegmentAccelerationJerk XJerk YJunction deviation
F
E
D
C
B
A
+

+

+
+

Interpreting Results:

+

Inspect your finished print. Hopefully, there will be a clear difference between the segments that reflect the acceleration values you entered. In the example below (Ender 3 direct drive, PLA, linear advance enabled), acceleration varied from 300 to 800 in 100 mm/sec/sec increments. Junction deviation was left at the default 0.08. The difference between each segment is subtle, but there is increased ghosting around the letter Y on the higher segments. The previous value was 500, but a small increase in quality may be achieved from lowering the value to 400.

+ +

+

Once you have a value you are happy with, you can update with:

+
M204 P400
+

where 400 is the value of the acceleration with the best compromise based on the tower test print. We can store the value to EEPROM by sending:

+
M500
+

You would then repeat the test with all of the acceleration values locked at your preferred value for each segment, but this time varying jerk/junction deviation.

+

To save for a printer with jerk (with a determined best compromise of 8 for this example), we would enter:

+
M205 X8 Y8
+

To save for a printer with junction deviation (with a determined best compromise of 0.05 for this example), we would enter:

+
M205 J0.05
+

Either way, we save to EEPROM afterwards with:

+
M500
+

Each of these parameters can also be entered and stored from the configuration menu of the Marlin LCD.

+
+
Special note for Cura and PrusaSlicer:
+

Cura and PrusaSlicer both have the capability to control these parameters from the slicer by inserting appropriate gcode. If you are finding that your new acceleration values are not taking effect, you may need to also set them in the slicer. This is actually a desirable feature, as it allows more aggressive settings for infill and features that can't be seen in the final print, yet be more conservative for outer walls where aesthetics are paramount.

+ +
+
+
+
+

Linear Advance Tuning

+
Aim:
+

To tune the timing of the extrusion with the aim of reducing swollen corners and thinner walls. This results in a more consistent extrusion and a reduction in surface artefacts.

+
When required:
+

Initial calibration, when changing the extruder/hot end (especially if changing from bowden tube to direct drive), when trying new filaments.

+
Tools:
+

Marlin Linear Advance Pattern Generator

+
+

In a 3D printer, due to the pressure required to push the molten filament through the small opening of the nozzle, there is a small time delay from when the extruder pushes the filament to when it actually comes out the nozzle. Traditionally the movement of the extruder is matched to XY movements of the printer, so this means the start of a line will be under-extruded and the end of the line will be over-extruded. Linear advance unsynchronises the extruder movements from the XY movements, changing the timing of the extruder so the thin and thick sections are significantly reduced.

+

The concept and how to tune linear advance is explained in much more detail here:

+ +
+
Special notes:
+

Linear advance often goes by the name pressure advance. They are the same thing.

+

Linear advance is often not enabled by default in Marlin firmware. Therefore, the firmware must be recompiled with linear advance included. This is covered in the video above.

+

Linear advance is incompatible with certain stepper motor drivers. A prominent one is the TMC2208 when connected in legacy mode (as found on Creality silent boards). When connected in 'smart' mode via UART, this is not a problem.

+

Linear advance is not currently compatible with S curve acceleration (another Marlin feature), although it is possible to uncomment #define EXPERIMENTAL_SCURVE when adding linear advance as a work around.

+

Linear advance requires aggressive acceleration for the extruder and will work the motor harder. Higher current maybe required for the E driver, which will make it run hotter.

+

Linear advance is filament dependent. A different value is required for each filament to get the best results.

+

Testing for linear advance relies on the visual inspection of a single layer, therefore it is important to have your bed levelling/first layer reliable and repeatable.

+
+

Linear Advance Pattern Generator

+

Marlin has excellent linear advance documentation and a test gcode generator already made, so there is no point recreating a competitor here. An example of how to use it is shown in the video above, and it can be found here: Marlin Linear Advance Pattern Generator

+

The parameter we tune for linear advance is called the K factor. The K factor relates to the amount of flex or compression in the filament and the length of the path between the extruder and hot end.

+

A higher K value suits a bowden tube and/or flexible filaments. This is because the filament can flex sideways in the tube in between the extruder and hot end, adding to the extrusion time delay. A good starting point for a bowden extruder is a K value of 1.0.

+

A lower K value suits a direct drive extruder and more rigid filaments. With these characteristics, the transfer of filament between extruder and hot end is more direct with less time delay. A good starting point for a direct drive extruder is 0.2.

+

The above video takes you through how to use the pattern generator, which basically involves inputting printer and slicer parameters, before clicking to download the gcode file.

+

Using the suggested starting K values above, you would then pick an upper and lower limit either side of this for a preliminary test.

+ +

Interpreting results:

+

Printing the gcode generated by the pattern generator with yield a result like this:

+ +

Some of the horizontal lines should have obvious thick and thin portions, and some may even have large gaps. You are looking for the line with the most consistent extrusion width from left to right. The K value for this line will be printed to the right of the line. At this point, as shown in the video, you may wish to repeat the test with a narrower range of values either side of this best K value. This will help determine the best value by using a 'higher resolution'.

+

Saving the K Factor

+

With many of the parameters we have tuned so far, we can permanently save them to either the firmware or EEPROM. As the linear advance K factor is filament dependent, this may not be the best solution if you print with varied filaments, and instead you may prefer to save using your slicer profile. All methods are covered below.

+

The K factor can be set by using the M900 gcode:

+
M900 K0.11
+

It can be permanently stored EEPROM by following up with:

+
M500
+

Both the setting and saving of the K factor can also be achieved using the LCD menu.

+

You may prefer to use the M900 gcode command in your start gcode instead, particularly if your slicer supports different start gcodes for different materials. In the event that you use start gcode, unless an M500 follows, the setting of the K factor will be temporary. When the printer is next restarted the value stored in the EEPROM will be restored. When new print starts the value given it its start gcode will overwrite the previously set value.

+

Linear advance can be temporarily be disabled by setting the K factor to 0:

+
M900 K0
-

In a 3D printer, due to the pressure required to push the molten filament through the small opening of the nozzle, there is a small time delay from when the extruder pushes the filament to when it actually comes out the nozzle. Traditionally the movement of the extruder is matched to XY movements of the printer, so this means the start of a line will be under-extruded and the end of the line will be over-extruded. Linear advance unsynchronises the extruder movements from the XY movements, changing the timing of the extruder so the thin and thick sections are significantly reduced.

-

The concept and how to tune linear advance is explained in much more detail here:

- -
-
Special notes:
-

Linear advance often goes by the name pressure advance. They are the same thing.

-

Linear advance is often not enabled by default in Marlin firmware. Therefore, the firmware must be recompiled with linear advance included. This is covered in the video above.

-

Linear advance is incompatible with certain stepper motor drivers. A prominent one is the TMC2208 when connected in legacy mode (as found on Creality silent boards). When connected in 'smart' mode via UART, this is not a problem.

-

Linear advance is not currently compatible with S curve acceleration (another Marlin feature), although it is possible to uncomment #define EXPERIMENTAL_SCURVE when adding linear advance as a work around.

-

Linear advance requires aggressive acceleration for the extruder and will work the motor harder. Higher current maybe required for the E driver, which will make it run hotter.

-

Linear advance is filament dependent. A different value is required for each filament to get the best results.

-

Testing for linear advance relies on the visual inspection of a single layer, therefore it is important to have your bed levelling/first layer reliable and repeatable.

-
-

Linear Advance Pattern Generator

-

Marlin has excellent linear advance documentation and a test gcode generator already made, so there is no point recreating a competitor here. An example of how to use it is shown in the video above, and it can be found here: Marlin Linear Advance Pattern Generator

-

The parameter we tune for linear advance is called the K factor. The K factor relates to the amount of flex or compression in the filament and the length of the path between the extruder and hot end.

-

A higher K value suits a bowden tube and/or flexible filaments. This is because the filament can flex sideways in the tube in between the extruder and hot end, adding to the extrusion time delay. A good starting point for a bowden extruder is a K value of 1.0.

-

A lower K value suits a direct drive extruder and more rigid filaments. With these characteristics, the transfer of filament between extruder and hot end is more direct with less time delay. A good starting point for a direct drive extruder is 0.2.

-

The above video takes you through how to use the pattern generator, which basically involves inputting printer and slicer parameters, before clicking to download the gcode file.

-

Using the suggested starting K values above, you would then pick an upper and lower limit either side of this for a preliminary test.

- -

Interpreting results:

-

Printing the gcode generated by the pattern generator with yield a result like this:

- -

Some of the horizontal lines should have obvious thick and thin portions, and some may even have large gaps. You are looking for the line with the most consistent extrusion width from left to right. The K value for this line will be printed to the right of the line. At this point, as shown in the video, you may wish to repeat the test with a narrower range of values either side of this best K value. This will help determine the best value by using a 'higher resolution'.

-

Saving the K Factor

-

With many of the parameters we have tuned so far, we can permanently save them to either the firmware or EEPROM. As the linear advance K factor is filament dependent, this may not be the best solution if you print with varied filaments, and instead you may prefer to save using your slicer profile. All methods are covered below.

-

The K factor can be set by using the M900 gcode:

-
M900 K0.11
-

It can be permanently stored EEPROM by following up with:

-
M500
-

Both the setting and saving of the K factor can also be achieved using the LCD menu.

-

You may prefer to use the M900 gcode command in your start gcode instead, particularly if your slicer supports different start gcodes for different materials. In the event that you use start gcode, unless an M500 follows, the setting of the K factor will be temporary. When the printer is next restarted the value stored in the EEPROM will be restored. When new print starts the value given it its start gcode will overwrite the previously set value.

-

Linear advance can be temporarily be disabled by setting the K factor to 0:

-
M900 K0
-
- + - + + \ No newline at end of file diff --git a/contact.html b/contact.html index d181697..c6303f4 100644 --- a/contact.html +++ b/contact.html @@ -1,8 +1,19 @@ - - - + + + + + + + + + + + + + + @@ -24,10 +35,10 @@

Contact Form

Nature of enquiry: + + + + Company: @@ -56,17 +67,17 @@

Contact Form

\ No newline at end of file diff --git a/index.html b/index.html index 1749bf9..fc405f3 100644 --- a/index.html +++ b/index.html @@ -1,8 +1,19 @@ - - - + + + + + + + + + + + + + + @@ -19,8 +30,8 @@ \ No newline at end of file diff --git a/reviewpolicy.html b/reviewpolicy.html index 2857dcf..9692191 100644 --- a/reviewpolicy.html +++ b/reviewpolicy.html @@ -1,8 +1,19 @@ - - - + + + + + + + + + + + + + + @@ -13,8 +24,9 @@ + \ No newline at end of file diff --git a/sponsors.html b/sponsors.html index e220fa8..dac6407 100644 --- a/sponsors.html +++ b/sponsors.html @@ -1,13 +1,23 @@ - - - + + + + + + + + + + + + + +
-

Consider supporting the companies who support Teaching Tech. Both of these companies supply me with free consumables in return for moderate exposure on my channel. I was a happy customer of each before entering sponsorship agreements. Full details are below for transparency.

@@ -40,15 +50,12 @@

3D PRINTERS ONLINE - RESIN SUPPLIER

- - -
\ No newline at end of file diff --git a/troubleshooting.html b/troubleshooting.html index 2832937..c6df748 100644 --- a/troubleshooting.html +++ b/troubleshooting.html @@ -1,442 +1,442 @@ - - - - - - -
- - -
-

General Principles

-

This page serves as a companion for this video: 3D printer troubleshooting - Free step by step help website

- -

It aims to provide a methodology for identifying and solving common problems that occur with hobby 3D printers. If you find it helps you and you would like to say thank you, here is a donation link: PayPal.me

-

Special thanks to my Patrons for helping define the contents.

-

Watch the video, read this tab, prepare yourself with the appropriate tools and then work through relevant tabs.

-

Understand your machine before attempting modification

-

Perhaps you have arrived at this page with a standard printer that has broken down. In this case, ignore this heading. Many people, however, will arrive at this page after performing modifications to their machine. When they try to turn it back on, something doesn't work as expected.

-

Often people fall into the trap of modifying a 3D printer as a beginner, immediately after purchase. This can be quite risky. Firstly, they do not have a good working knowlegde of how their printer functions. They have not seen it in action long enough to what the purpose of each component is, which increases the chance of components being reinstalled incorrectly.

-

Another potential problem is that the user will not appreciate the benefits of the upgrade because they have not worked with the printer in its 'inferior' standard state. In some cases something like an ABL probe will be fitted immediately, before the user understands how to manually level the bed. The rush to upgrade deprives the user of learning the fundamentals necessary for efficient and effective long term operation. I am a fan of using ABL for the added convenience and the ability to compensate for a warped bed, but this is because I spent many years without ABL on a less than precise printer.

-

Be methodical: only test/change/modify one aspect at a time

-

Beginners often tear down a printer and upgrade multiple things at once, which means when it goes back together and doesn't work they have no idea which new component is the problem.

-

Therefore, it is smartest to upgrade one component at a time when the printer is working, or if it has broken down, test one aspect at a time. If we change two aspects and the problem goes away, which of the two changes was responsible? Maybe only one was needed and the additional, uneccessary change will cause problems down the line.

-

This guide works on the methodology of a scientific test, where only one variable is tested to ensure accurate results and conclusions are forthcoming.

-

When asking for help, be specific

-

If all else fails and you approach a community group for assistance, try to help them help you. Specify your printer, mainboard, stepper drivers, firmware, modifications, slicer, etc. Anything that is relevant to the situation. Tuning the current delivered to the stepper motors differs significantly depending on these variables.

-

Use free services like:

-
    -
  • Filebin to upload gcode files for others to examine and preview.
  • -
  • Pastebin to provide firmware configuration information or other relevant data. Forums will often garble sensitive data like gcode or firmware configs that needs to be read accurately.
  • -
  • Imgur to upload images of your problem. A picture paints a thousand words and is quite often the most efficient way to communicate a problem.
  • -
  • Streamable to upload a video of the problem. This again can be incredibly useful in helping others diagnose your problem.
  • -
-

All of the sites above are free to use and do not require an account for the core functionality.

-

Use the search feature

-

On the internet, with something as popular as 3D printing, there is a fair chance someone has had your particular problem before. Sometimes everything feels overwhelmning and you really want a human to advise you but you should always start by searching. This can be in community groups or the GitHub issue section (eg. Marlin) for your hardware or firmware. People understandably get annoyed if you don't undertake this basic step. Why should you expect them to invest time in helping you when you can't even be bothered to type a few words in a search box?

-

Be patient and appreciative

-

Unless you are accessing paid technical support, everyone involved is assisting for free in their spare time. It may take them a long time to get back to you if at all. Even paid technical support may not have quick answers. Their efficacy depends a lot on your ability to accurately convey the problem.

-

Pay it forward

-

Once you do find the solution to your problem, make it public so it may benefit future searchers. If using a community group message board, mark the issue as solved, post the solution and thank those who helped you. In time, as you become more experienced and confident, consider helping the beginners who are in the same situation you were in when you started out.

-
- -
-

Tools

-

I have a video on useful tools for 3D printing: Essential (and obscure) 3D printing tools and spares

- -

However, here we are focused on specific tools to collect information, because when troubleshooting a 3D printer: knowledge is power.

-

Calipers

-

Digital calipers are a cheap and easy to use tool for measuring various dimensions. This may include printed objects, probe offsets, and measuring the movement of the machine. A ruler is a useful backup but will not be as accurate as digital calipers. Calipers are also excellent for measuring objects when 3D modelling.

-

Digital calipers on Amazon

-

Multimeter

-

A digital multimeter is a versatile tool for measuring various electrical signals. On a 3D printer they are handy for measuring the VREF for tuning stepper motor current, measuring voltage to ensure components are turning on and off as expected, but perhaps most importantly, testing continuity to trace and find broken connections. Spending more means you will also gain the ability to measure temperature.

-

Budget multimeter on Amazon

-

Multimeter with temperature reading on Amazon

-

Terminal/console software

-

This is perhaps the most important tool: the ability to connect directly to your 3D printer to read and send information. Options include:

-
    -
  1. Pronterface - Free and available for Windows, Mac and Linux.
  2. -
  3. Octoprint - Free host software that typically runs on a Raspberry Pi. Has a 'terminal' tab. Octoprint setup video guide
  4. -
  5. Arduino IDE - Free and available for Windows, Mac and Linux. Less intuitive but the Tools > Serial Monitor option will provide a terminal.
  6. -
  7. Simplify3D - Paid slicing software that also has a terminal feature.
  8. -
-

There are many other options but these are the most popular. If you already have a favourite piece of terminal software, you don't really need this list.

-

Connecting to the printer is covered in the next tab.

-

Firmware Gcode References

-

Once you have a working connection, you need to know what to send. A great place to start is by having the gcode reference for your firmware handy:

- -

GitHub Resources

-

Many manufacturers of 3D printers and upgrade parts provide GitHub repositories with detailed manuals, dimensions and wiring diagrams. Here are some popular examples:

- -
-
-

Frame Check

-

Before going down the rabbit hole diagnosing problems, it is probably best to confirm they actually exist by making sure your 3D printer is in good condition.

-

The following is a guide to 3D printer maintenance that should serve you well:

- -

Additionally, I have a list of items to check around the printer on the Frame tab of my Calibration page that should serve as a handy guide to work through.

-
+ + + + + + + + + -
-

Connecting via terminal

-

Typically, connecting to the printer with any of these software options involves using a USB cable, selecting a port and a baud rate.

-

USB cable

-

This one seems clear cut: just plug in the cable between the computer/Raspberry Pi and the mainboard. It is still worth mentioning that not all USB cables are created equal. If you are having trouble connecting, try another cable.

-

Port

-

On a Windows machine, after a driver is installed, the name of the port can be found in Device Manager:

- -

As you can see, the name of the port will be COM followed by a number. In the example above: COM6.

-

On a Mac, Linux or with Octoprint on a Raspberry Pi, the name of the port will typically start with ttyUSB, followed by a number. For example /dev/ttyUSB0.

-

On any system, there may be more than one device listed, so trial and error may be required to find the right port.

-

Baud

-

Baud is the speed of the serial connection between the host device and mainboard. 99% of the time the baud should be either 115200 or 250000. This is set in the firmware but even if you don't access to the firmware source to check, just try one and if needed, the other.

-

Connecting

-

In Pronterface, select the port and baud in the top left and then click connect.

- -

If this is successful, you will receive a confirmation message in the terminal output. If not, try a different combination.

-

With Octoprint, we have the same options, but Octoprint will automatically cycle between them until it finds the right combination.

- -

What to send to get started

-

To test your serial connection, send M115 which will report on your firmware, including when it was compiled and uploaded.

-

Another useful command is M503, which will return all of the firmware variables currently in place. This output is worth copying and pasting in a document before performing major modifications. This list of variables also represents everything that can be changed and stored in the EEPROM without the need for firmware compilation.

-

If you still can't connect

-

Sometimes it just won't work. Some additional areas to check:

-
    -
  • Close Simplify3D/Cura/other 3D printing software - These may connect automaticlly to available machines, hogging the serial port and preventing your terminal software from connecting.
  • -
  • Double check you serial port settings in the firmware - 8 bit mainboard generally had the same settings but 32 bit boards vary. Consult the documentation to ensure you have the right values in configuration.h. The examle below is from a Creality V4 32 bit mainboard:
    -
  • -
  • Turn the printer on - Some mainboards will come to life solely from a 5V USB cable, where as others need the main power switch turned on.
  • -
-
+ + -
-

First layer problems

-

In my experience, the number one problem new 3D printer users will have is getting the bed levelled correctly and therefore an adequate first layer on a 3D print.

-
    -
  • If the nozzle is the correct distance from the bed, the extruded plastic will squish into the surface of the bed, gaining a good grip that will keep the printed object secure until printing is complete.
  • -
  • If the nozzle is too close to the bed, the filament will be squished too much into the bed. This could damage some more delicate bed surfaces. It can also have the effect of blocking the exit of the nozzle and leading to a jam.
  • -
  • If the nozzle is too far from the bed, the first layer effectively prints in mid air, with the filament not squishing into the bed surface and therefore not adhering properly. Such a print will likely be dislodged sooner rather than later.
  • -
  • If the bed is not levelled correctly, you may have a combination of the above across different parts of the bed.
  • -
  • If the bed is warped, it may be impossible to achieve the correct distance between the nozzle and bed across the whole bed surface.
  • -
-

First Layer Calibration

-

I have already created a First Layer Calibration page to address this need. It features a companion video:

- -

It also features a gcode generator to created a first layer test print to suit your 3D printer.

- -

Finally, there are reference diagrams to help you deterine your results.

- -

Other Factors

-

Apart from the levelling and physical distance between the nozzle and bed surface, there are a few other factors you can investigate if you are still having trouble with your first layer:

+ + + +
    -
  • Slow it down - The first layer really benefits from a much slower feedrate to help the filament stick. Most slicers have a speed setting just for layer one, so you can ensure good adhesion without slowing down the subsequent layers.
  • -
  • Bed temperature - The bed temperature and nozzle temperature should match those stipulated by the filament manufacturer. If you attempt to print ABS with a heated bed temperature usually used for PLA (eg. 60 degrees C), the filament will probably look fine for the first layer but soon after will likely detach. It is also worth noting that some surfaces like Wham Bam PEX might need 10 degrees C hotter bed temperature over regular PEI to gain max adhesion (eg. 70 degrees for PLA instad of 60 degrees). -
  • -
  • Dirty bed - Dust, debris and greasy fingerprints will inhibit the adhesion between bed and filament. Most bed surfaces benefit from cleaning using Isopropyl alcohol and paper towel every few prints. Please check if IPA is safe for your bed to avoid damaging the surface.
  • -
  • Adhesion aids - Substances like glue stick, hairspray or even purpose made products like Dimifix may be used to increase adhesion. Again, read the instructions carefully and ensure the product will not damage your bed surface.
  • -
  • Environmental factors - A draft blowing over the printer from an open window might affect print adhesion. Ensuring a controlled environment will help 3D print quality overall. This may be as simple as closing doors and windows or providing a simple enclosure.
  • +
  • General Principles
  • +
  • Tools
  • +
  • Frame Check
  • +
  • Connecting via Terminal
  • +
  • First Layer
  • +
  • Filament Jams
  • +
  • Motor Direction
  • +
  • Endstops/Filament Runout/Probes
  • +
  • BLtouch / ABL Probes
  • +
  • Pin debugging/Direct Pin control
  • +
  • Z wall artefacts
-
- -
-

Filament Jams

-

When everything is working perfectly, the filament will be pushed through the heater block, melted and then exit the nozzle to be deposited as part of the printed object. It is possible, however, for the filament to jam somewhere in the system and cause the print to fail. The following is a list of areas to check if your 3D printer is jamming.

-

Hot end temperature

-

Thermoplastics require a certain temperature to melt and flow freely. Generally, the hotter the nozzle, the lower the viscosity of the filament and the more freely it flows. Upping the hot end temperature by 5 to 10 degrees is a viable method to try and stop filament jamming. If the nozzle temperature is too high, it may make the filament too 'oozy' which negatively impacts aspects like retraction. The faster you print, the higher the nozzle temperature will need to be allow the filament to melt and flow in time.

-

First layer squish

-

As mentioned in the previous tab, if the nozzle is too close to the bed for the first layer, the bed blocks the exit of the nozzle which can jam the filament. Quite often you will notice the extruder stepper motor 'clicking'/missing steps only on the first layer. A first layer with too much squish is illustrated in the previous tab. If you experience jams primarily at the start of prints, try increasing the distance between the nozzle and bed for the first layer.

-

'Baked' filament from sitting in an idle hot nozzle

-

Try to avoid leaving your nozzle at printing temperatures when the printer is idle. This can be easy to do, perhaps you heat up the nozzle for a filament swap and then get distracted. Over time, the filament in the nozzle can degrade, harden and then block the tip. This will likely require removal and cleaning.

-

PTFE tube not correctly seated

-

Hot ends can either be lined or 'all metal'. In a lined hot end, the PTFE tube runs through the heat break and either into the inside of the nozzle or is jammed hard against the back/top of it. This design is popular on Creality and other budget machines.

-

If there are any gaps in the system between the PTFE tube and the metal components, filament is free to expand into the wider cavity and prevent the filament from moving through the whole system. This is illustrated in the diagram below with the resulting filament bulge which causes the jam:

- -

To stop this problem, it is essential to have a good quality tube fitting that wll hold the PTFE tube firmly in place. As these fittings can degrade over time, Luke Hatfield has developed a simple but effective fix to modify Creality lined hot ends so the tube remains seated. CHEP has made a great video on testing this solution:

- -

Stripped filament in hobbed gear

-

This problem is illustrated below:

- -

The hobbed gear has tiny teeth to grab the filament and push it through the hot end. This problem often comes from an obstruction further along the system - a blockage in the nozzle for instance. The filament has no where to go, the hobbed gear cuts a trench in the filament and the debris clog the hobbed gear(s). Quite often this problem must be checked and cleared after solving a jam elsewhere. After disassembly to gain access, a spare toothbrush is an excellent tool for cleaning the hobbed gear(s).

-

Heat creep

-

Heat creep is when areas of the printer that are meant to stay cool slowly heat up to problematic temperatures. It is vital that only a specific section of the hot end assembly remains hot enough to fully melt the filament. To achieve this, a heat sink is typically fitted above a heat break that is actively cooled by a fan. This prevents the filament path above the melt zone from heating up and softening or melting the filament prematurely. This is illustrated well by Slice Engineering on their Copperhead hot end page, where we can see the heater block is hot but everything above it is cool:

- -

If the heat sink cooling fan is starting to degrade, heat creep may soften the filament and cause a jam. As it is hard to diagnose a faulty fan, it may be easier to swap it to a good unit for peace of mind.

-

Some printers like the Monoprice Mini Delta have weak heat sink cooling systems from factory. I have found with this particular printer, I have to print 5-10 degrees below what I normally use to prevent heat creep and jams.

-

Changing to a quiter heat sink fan can be risky, as they typically produce less air flow and therefore less heat sink cooling. Despite this, I have successfully run a 40x10mm Noctua fan on my Ender 3 hot end for years now. I have ever had a jam, but it is worth noting that I've also had Hero Me upgraded fan shrouds, that direct the air directly onto the heat sink compared to the standard Ender 3 hot end metal box/cover which simply blows in the general direction.

-

Finally, it is possible for heat creep to affect a bowden tube design printer. If the extruder stepper motor gets too hot, the heat may creep up and cause the hobbed gear to also get hot. This will soften the filament and possibly lead to stripped filament as illustrated previously.

-

Heat creep jams normally occur a set amount of time into the print. If you notice that the printer jams approximately the same amount of time into the print regardless of the object, this may be the amount of time it takes the heat to creep up and saturate the system.

-

Filament path obstruction/tangle

-

This one can be easy to overlook. In the case of a clear tangle of the filament on the spool, the cause of the jam will be obvious:

- -

It is also worth checking the filament can pull freely from the spool if you have some sort of guide system like a reverse bowden tube. Also check the filament spool can rotate freely.

-

Physical obstruction in nozzle

-

After printing a higher temperature filament, it is important to ensure that the old filament has been completely purged from the nozzle when switching back to a lower temperature filament like PLA. Failing to do this or perhaps leaving filament to degrade in a hot nozzle might leave harder chunks of filament obstructing the path through the nozzle. An acupuncture needle, cleaning filament pushed through at high temp or performing a cold pull will clean the inside the inside of the nozzle in many cases. Sometimes, however, it is necessary to remove the nozzle and use a solvent or my favourite: a blow torch, to clean the nozzle more aggressively.

-

This problem can often be identified by abnormal extrusion in free air. The filament exiting the nozzle may be undersized and coming out at a strange angle.

-

Part cooling fan blowing on nozzle

-

This cause is unlikely, but if the part cooling fan duct is aimed at the nozzle instead of below it, it is possible for the nozzle to be cooled to the point where the filament no longer flows through the nozzle properly. If you notice a big reduction in nozzle temperature (possibly even triggering a thermal runaway error) when the part cooling fan turns on then this is an area to investigate further.

-

Excessive retraction

-

This one is very rare, but if retraction distance is set too high in the slicer, the filament may be pulled so far out of the nozzle that a molten section pulls into the cool zone, solidifying as it sticks to the walls, jamming the system.

-

Seasoning the hot end

-

This is something I've never personally done, but it has been the correct solution for patrons when all else had failed. The process involves introducing a small amount of oil to lubricate the internals of the hot end and assist filament in moving through freely. This process is demonstrated below by Nillabean:

- -

Extruder stepper current too low

-

This should only be examined after checking and eliminating the more common causes above. Increasing the current to the extruder stepper motor and therefore the torque available will increase the system's ability to push filament out of the nozzle. If all else is well this may be just what is needed to make the printer reliable. If there is a blockage or problem elsewhere, however, this step will at best mask the problem or at worst enflame it. Stepper motor current tuning is covered on this calibration page.

-

Linear advance with incompatible drivers

-

Some stepper motor drivers don't play well with linear/pressure advance. If you enable linear advance and find your extruder stepper motor just stops turning early in the print with no error messages, this may be your problem and you will have to disable the feature.

-
- -
-

Motor Direction

-

Let's say we have completed an extruder upgrade, changed stepper motor drivers, swapped the mainboard or built a custom machine and one or more axes are reversed. In this tab we will deal with testing and fixing this problem.

-

Testing

-

Generally you would use the 3D printer's LCD menu or manual controls from a touchscreen, Octoprint or Pronterface to manually move each axis to see if the axis moves as expected. Keep in mind:

-
    -
  • Some printers won't move some axes until the printer is homed. If an axis is reversed, be handy on the power switch to potentially avoid a damaging collision when trying to home.
  • -
  • Most firmwares will not allow an axis to move to a value smaller than zero due to software endstops.
  • -
  • Each of these manual movement methods puts the printers in relative relative move mode, sends the movement command, then *should* put the printer back in absolute mode. The sequence should look lke this (eg. Move the axis 20mm to the right): -
    G91
    +        
    +

    General Principles

    +

    This page serves as a companion for this video: 3D printer troubleshooting - Free step by step help website

    + +

    It aims to provide a methodology for identifying and solving common problems that occur with hobby 3D printers. If you find it helps you and you would like to say thank you, here is a donation link: PayPal.me

    +

    Special thanks to my Patrons for helping define the contents.

    +

    Watch the video, read this tab, prepare yourself with the appropriate tools and then work through relevant tabs.

    +

    Understand your machine before attempting modification

    +

    Perhaps you have arrived at this page with a standard printer that has broken down. In this case, ignore this heading. Many people, however, will arrive at this page after performing modifications to their machine. When they try to turn it back on, something doesn't work as expected.

    +

    Often people fall into the trap of modifying a 3D printer as a beginner, immediately after purchase. This can be quite risky. Firstly, they do not have a good working knowlegde of how their printer functions. They have not seen it in action long enough to what the purpose of each component is, which increases the chance of components being reinstalled incorrectly.

    +

    Another potential problem is that the user will not appreciate the benefits of the upgrade because they have not worked with the printer in its 'inferior' standard state. In some cases something like an ABL probe will be fitted immediately, before the user understands how to manually level the bed. The rush to upgrade deprives the user of learning the fundamentals necessary for efficient and effective long term operation. I am a fan of using ABL for the added convenience and the ability to compensate for a warped bed, but this is because I spent many years without ABL on a less than precise printer.

    +

    Be methodical: only test/change/modify one aspect at a time

    +

    Beginners often tear down a printer and upgrade multiple things at once, which means when it goes back together and doesn't work they have no idea which new component is the problem.

    +

    Therefore, it is smartest to upgrade one component at a time when the printer is working, or if it has broken down, test one aspect at a time. If we change two aspects and the problem goes away, which of the two changes was responsible? Maybe only one was needed and the additional, uneccessary change will cause problems down the line.

    +

    This guide works on the methodology of a scientific test, where only one variable is tested to ensure accurate results and conclusions are forthcoming.

    +

    When asking for help, be specific

    +

    If all else fails and you approach a community group for assistance, try to help them help you. Specify your printer, mainboard, stepper drivers, firmware, modifications, slicer, etc. Anything that is relevant to the situation. Tuning the current delivered to the stepper motors differs significantly depending on these variables.

    +

    Use free services like:

    +
      +
    • Filebin to upload gcode files for others to examine and preview.
    • +
    • Pastebin to provide firmware configuration information or other relevant data. Forums will often garble sensitive data like gcode or firmware configs that needs to be read accurately.
    • +
    • Imgur to upload images of your problem. A picture paints a thousand words and is quite often the most efficient way to communicate a problem.
    • +
    • Streamable to upload a video of the problem. This again can be incredibly useful in helping others diagnose your problem.
    • +
    +

    All of the sites above are free to use and do not require an account for the core functionality.

    +

    Use the search feature

    +

    On the internet, with something as popular as 3D printing, there is a fair chance someone has had your particular problem before. Sometimes everything feels overwhelmning and you really want a human to advise you but you should always start by searching. This can be in community groups or the GitHub issue section (eg. Marlin) for your hardware or firmware. People understandably get annoyed if you don't undertake this basic step. Why should you expect them to invest time in helping you when you can't even be bothered to type a few words in a search box?

    +

    Be patient and appreciative

    +

    Unless you are accessing paid technical support, everyone involved is assisting for free in their spare time. It may take them a long time to get back to you if at all. Even paid technical support may not have quick answers. Their efficacy depends a lot on your ability to accurately convey the problem.

    +

    Pay it forward

    +

    Once you do find the solution to your problem, make it public so it may benefit future searchers. If using a community group message board, mark the issue as solved, post the solution and thank those who helped you. In time, as you become more experienced and confident, consider helping the beginners who are in the same situation you were in when you started out.

    +
    +
    +

    Tools

    +

    I have a video on useful tools for 3D printing: Essential (and obscure) 3D printing tools and spares

    + +

    However, here we are focused on specific tools to collect information, because when troubleshooting a 3D printer: knowledge is power.

    +

    Calipers

    +

    Digital calipers are a cheap and easy to use tool for measuring various dimensions. This may include printed objects, probe offsets, and measuring the movement of the machine. A ruler is a useful backup but will not be as accurate as digital calipers. Calipers are also excellent for measuring objects when 3D modelling.

    +

    Digital calipers on Amazon

    +

    Multimeter

    +

    A digital multimeter is a versatile tool for measuring various electrical signals. On a 3D printer they are handy for measuring the VREF for tuning stepper motor current, measuring voltage to ensure components are turning on and off as expected, but perhaps most importantly, testing continuity to trace and find broken connections. Spending more means you will also gain the ability to measure temperature.

    +

    Budget multimeter on Amazon

    +

    Multimeter with temperature reading on Amazon

    +

    Terminal/console software

    +

    This is perhaps the most important tool: the ability to connect directly to your 3D printer to read and send information. Options include:

    +
      +
    1. Pronterface - Free and available for Windows, Mac and Linux.
    2. +
    3. Octoprint - Free host software that typically runs on a Raspberry Pi. Has a 'terminal' tab. Octoprint setup video guide
    4. +
    5. Arduino IDE - Free and available for Windows, Mac and Linux. Less intuitive but the Tools > Serial Monitor option will provide a terminal.
    6. +
    7. Simplify3D - Paid slicing software that also has a terminal feature.
    8. +
    +

    There are many other options but these are the most popular. If you already have a favourite piece of terminal software, you don't really need this list.

    +

    Connecting to the printer is covered in the next tab.

    +

    Firmware Gcode References

    +

    Once you have a working connection, you need to know what to send. A great place to start is by having the gcode reference for your firmware handy:

    + +

    GitHub Resources

    +

    Many manufacturers of 3D printers and upgrade parts provide GitHub repositories with detailed manuals, dimensions and wiring diagrams. Here are some popular examples:

    + +
    +
    +

    Frame Check

    +

    Before going down the rabbit hole diagnosing problems, it is probably best to confirm they actually exist by making sure your 3D printer is in good condition.

    +

    The following is a guide to 3D printer maintenance that should serve you well:

    + +

    Additionally, I have a list of items to check around the printer on the Frame tab of my Calibration page that should serve as a handy guide to work through.

    +
    +
    +

    Connecting via terminal

    +

    Typically, connecting to the printer with any of these software options involves using a USB cable, selecting a port and a baud rate.

    +

    USB cable

    +

    This one seems clear cut: just plug in the cable between the computer/Raspberry Pi and the mainboard. It is still worth mentioning that not all USB cables are created equal. If you are having trouble connecting, try another cable.

    +

    Port

    +

    On a Windows machine, after a driver is installed, the name of the port can be found in Device Manager:

    + +

    As you can see, the name of the port will be COM followed by a number. In the example above: COM6.

    +

    On a Mac, Linux or with Octoprint on a Raspberry Pi, the name of the port will typically start with ttyUSB, followed by a number. For example /dev/ttyUSB0.

    +

    On any system, there may be more than one device listed, so trial and error may be required to find the right port.

    +

    Baud

    +

    Baud is the speed of the serial connection between the host device and mainboard. 99% of the time the baud should be either 115200 or 250000. This is set in the firmware but even if you don't access to the firmware source to check, just try one and if needed, the other.

    +

    Connecting

    +

    In Pronterface, select the port and baud in the top left and then click connect.

    + +

    If this is successful, you will receive a confirmation message in the terminal output. If not, try a different combination.

    +

    With Octoprint, we have the same options, but Octoprint will automatically cycle between them until it finds the right combination.

    + +

    What to send to get started

    +

    To test your serial connection, send M115 which will report on your firmware, including when it was compiled and uploaded.

    +

    Another useful command is M503, which will return all of the firmware variables currently in place. This output is worth copying and pasting in a document before performing major modifications. This list of variables also represents everything that can be changed and stored in the EEPROM without the need for firmware compilation.

    +

    If you still can't connect

    +

    Sometimes it just won't work. Some additional areas to check:

    +
      +
    • Close Simplify3D/Cura/other 3D printing software - These may connect automaticlly to available machines, hogging the serial port and preventing your terminal software from connecting.
    • +
    • Double check you serial port settings in the firmware - 8 bit mainboard generally had the same settings but 32 bit boards vary. Consult the documentation to ensure you have the right values in configuration.h. The examle below is from a Creality V4 32 bit mainboard:
      +
    • +
    • Turn the printer on - Some mainboards will come to life solely from a 5V USB cable, where as others need the main power switch turned on.
    • +
    +
    +
    +

    First layer problems

    +

    In my experience, the number one problem new 3D printer users will have is getting the bed levelled correctly and therefore an adequate first layer on a 3D print.

    +
      +
    • If the nozzle is the correct distance from the bed, the extruded plastic will squish into the surface of the bed, gaining a good grip that will keep the printed object secure until printing is complete.
    • +
    • If the nozzle is too close to the bed, the filament will be squished too much into the bed. This could damage some more delicate bed surfaces. It can also have the effect of blocking the exit of the nozzle and leading to a jam.
    • +
    • If the nozzle is too far from the bed, the first layer effectively prints in mid air, with the filament not squishing into the bed surface and therefore not adhering properly. Such a print will likely be dislodged sooner rather than later.
    • +
    • If the bed is not levelled correctly, you may have a combination of the above across different parts of the bed.
    • +
    • If the bed is warped, it may be impossible to achieve the correct distance between the nozzle and bed across the whole bed surface.
    • +
    +

    First Layer Calibration

    +

    I have already created a First Layer Calibration page to address this need. It features a companion video:

    + +

    It also features a gcode generator to created a first layer test print to suit your 3D printer.

    + +

    Finally, there are reference diagrams to help you deterine your results.

    + +

    Other Factors

    +

    Apart from the levelling and physical distance between the nozzle and bed surface, there are a few other factors you can investigate if you are still having trouble with your first layer:

    +
      +
    • Slow it down - The first layer really benefits from a much slower feedrate to help the filament stick. Most slicers have a speed setting just for layer one, so you can ensure good adhesion without slowing down the subsequent layers.
    • +
    • Bed temperature - The bed temperature and nozzle temperature should match those stipulated by the filament manufacturer. If you attempt to print ABS with a heated bed temperature usually used for PLA (eg. 60 degrees C), the filament will probably look fine for the first layer but soon after will likely detach. It is also worth noting that some surfaces like Wham Bam PEX might need 10 degrees C hotter bed temperature over regular PEI to gain max adhesion (eg. 70 degrees for PLA instad of 60 degrees). +
    • +
    • Dirty bed - Dust, debris and greasy fingerprints will inhibit the adhesion between bed and filament. Most bed surfaces benefit from cleaning using Isopropyl alcohol and paper towel every few prints. Please check if IPA is safe for your bed to avoid damaging the surface.
    • +
    • Adhesion aids - Substances like glue stick, hairspray or even purpose made products like Dimifix may be used to increase adhesion. Again, read the instructions carefully and ensure the product will not damage your bed surface.
    • +
    • Environmental factors - A draft blowing over the printer from an open window might affect print adhesion. Ensuring a controlled environment will help 3D print quality overall. This may be as simple as closing doors and windows or providing a simple enclosure.
    • +
    +
    +
    +

    Filament Jams

    +

    When everything is working perfectly, the filament will be pushed through the heater block, melted and then exit the nozzle to be deposited as part of the printed object. It is possible, however, for the filament to jam somewhere in the system and cause the print to fail. The following is a list of areas to check if your 3D printer is jamming.

    +

    Hot end temperature

    +

    Thermoplastics require a certain temperature to melt and flow freely. Generally, the hotter the nozzle, the lower the viscosity of the filament and the more freely it flows. Upping the hot end temperature by 5 to 10 degrees is a viable method to try and stop filament jamming. If the nozzle temperature is too high, it may make the filament too 'oozy' which negatively impacts aspects like retraction. The faster you print, the higher the nozzle temperature will need to be allow the filament to melt and flow in time.

    +

    First layer squish

    +

    As mentioned in the previous tab, if the nozzle is too close to the bed for the first layer, the bed blocks the exit of the nozzle which can jam the filament. Quite often you will notice the extruder stepper motor 'clicking'/missing steps only on the first layer. A first layer with too much squish is illustrated in the previous tab. If you experience jams primarily at the start of prints, try increasing the distance between the nozzle and bed for the first layer.

    +

    'Baked' filament from sitting in an idle hot nozzle

    +

    Try to avoid leaving your nozzle at printing temperatures when the printer is idle. This can be easy to do, perhaps you heat up the nozzle for a filament swap and then get distracted. Over time, the filament in the nozzle can degrade, harden and then block the tip. This will likely require removal and cleaning.

    +

    PTFE tube not correctly seated

    +

    Hot ends can either be lined or 'all metal'. In a lined hot end, the PTFE tube runs through the heat break and either into the inside of the nozzle or is jammed hard against the back/top of it. This design is popular on Creality and other budget machines.

    +

    If there are any gaps in the system between the PTFE tube and the metal components, filament is free to expand into the wider cavity and prevent the filament from moving through the whole system. This is illustrated in the diagram below with the resulting filament bulge which causes the jam:

    + +

    To stop this problem, it is essential to have a good quality tube fitting that wll hold the PTFE tube firmly in place. As these fittings can degrade over time, Luke Hatfield has developed a simple but effective fix to modify Creality lined hot ends so the tube remains seated. CHEP has made a great video on testing this solution:

    + +

    Stripped filament in hobbed gear

    +

    This problem is illustrated below:

    + +

    The hobbed gear has tiny teeth to grab the filament and push it through the hot end. This problem often comes from an obstruction further along the system - a blockage in the nozzle for instance. The filament has no where to go, the hobbed gear cuts a trench in the filament and the debris clog the hobbed gear(s). Quite often this problem must be checked and cleared after solving a jam elsewhere. After disassembly to gain access, a spare toothbrush is an excellent tool for cleaning the hobbed gear(s).

    +

    Heat creep

    +

    Heat creep is when areas of the printer that are meant to stay cool slowly heat up to problematic temperatures. It is vital that only a specific section of the hot end assembly remains hot enough to fully melt the filament. To achieve this, a heat sink is typically fitted above a heat break that is actively cooled by a fan. This prevents the filament path above the melt zone from heating up and softening or melting the filament prematurely. This is illustrated well by Slice Engineering on their Copperhead hot end page, where we can see the heater block is hot but everything above it is cool:

    + +

    If the heat sink cooling fan is starting to degrade, heat creep may soften the filament and cause a jam. As it is hard to diagnose a faulty fan, it may be easier to swap it to a good unit for peace of mind.

    +

    Some printers like the Monoprice Mini Delta have weak heat sink cooling systems from factory. I have found with this particular printer, I have to print 5-10 degrees below what I normally use to prevent heat creep and jams.

    +

    Changing to a quiter heat sink fan can be risky, as they typically produce less air flow and therefore less heat sink cooling. Despite this, I have successfully run a 40x10mm Noctua fan on my Ender 3 hot end for years now. I have ever had a jam, but it is worth noting that I've also had Hero Me upgraded fan shrouds, that direct the air directly onto the heat sink compared to the standard Ender 3 hot end metal box/cover which simply blows in the general direction.

    +

    Finally, it is possible for heat creep to affect a bowden tube design printer. If the extruder stepper motor gets too hot, the heat may creep up and cause the hobbed gear to also get hot. This will soften the filament and possibly lead to stripped filament as illustrated previously.

    +

    Heat creep jams normally occur a set amount of time into the print. If you notice that the printer jams approximately the same amount of time into the print regardless of the object, this may be the amount of time it takes the heat to creep up and saturate the system.

    +

    Filament path obstruction/tangle

    +

    This one can be easy to overlook. In the case of a clear tangle of the filament on the spool, the cause of the jam will be obvious:

    + +

    It is also worth checking the filament can pull freely from the spool if you have some sort of guide system like a reverse bowden tube. Also check the filament spool can rotate freely.

    +

    Physical obstruction in nozzle

    +

    After printing a higher temperature filament, it is important to ensure that the old filament has been completely purged from the nozzle when switching back to a lower temperature filament like PLA. Failing to do this or perhaps leaving filament to degrade in a hot nozzle might leave harder chunks of filament obstructing the path through the nozzle. An acupuncture needle, cleaning filament pushed through at high temp or performing a cold pull will clean the inside the inside of the nozzle in many cases. Sometimes, however, it is necessary to remove the nozzle and use a solvent or my favourite: a blow torch, to clean the nozzle more aggressively.

    +

    This problem can often be identified by abnormal extrusion in free air. The filament exiting the nozzle may be undersized and coming out at a strange angle.

    +

    Part cooling fan blowing on nozzle

    +

    This cause is unlikely, but if the part cooling fan duct is aimed at the nozzle instead of below it, it is possible for the nozzle to be cooled to the point where the filament no longer flows through the nozzle properly. If you notice a big reduction in nozzle temperature (possibly even triggering a thermal runaway error) when the part cooling fan turns on then this is an area to investigate further.

    +

    Excessive retraction

    +

    This one is very rare, but if retraction distance is set too high in the slicer, the filament may be pulled so far out of the nozzle that a molten section pulls into the cool zone, solidifying as it sticks to the walls, jamming the system.

    +

    Seasoning the hot end

    +

    This is something I've never personally done, but it has been the correct solution for patrons when all else had failed. The process involves introducing a small amount of oil to lubricate the internals of the hot end and assist filament in moving through freely. This process is demonstrated below by Nillabean:

    + +

    Extruder stepper current too low

    +

    This should only be examined after checking and eliminating the more common causes above. Increasing the current to the extruder stepper motor and therefore the torque available will increase the system's ability to push filament out of the nozzle. If all else is well this may be just what is needed to make the printer reliable. If there is a blockage or problem elsewhere, however, this step will at best mask the problem or at worst enflame it. Stepper motor current tuning is covered on this calibration page.

    +

    Linear advance with incompatible drivers

    +

    Some stepper motor drivers don't play well with linear/pressure advance. If you enable linear advance and find your extruder stepper motor just stops turning early in the print with no error messages, this may be your problem and you will have to disable the feature.

    +
    +
    +

    Motor Direction

    +

    Let's say we have completed an extruder upgrade, changed stepper motor drivers, swapped the mainboard or built a custom machine and one or more axes are reversed. In this tab we will deal with testing and fixing this problem.

    +

    Testing

    +

    Generally you would use the 3D printer's LCD menu or manual controls from a touchscreen, Octoprint or Pronterface to manually move each axis to see if the axis moves as expected. Keep in mind:

    +
      +
    • Some printers won't move some axes until the printer is homed. If an axis is reversed, be handy on the power switch to potentially avoid a damaging collision when trying to home.
    • +
    • Most firmwares will not allow an axis to move to a value smaller than zero due to software endstops.
    • +
    • Each of these manual movement methods puts the printers in relative relative move mode, sends the movement command, then *should* put the printer back in absolute mode. The sequence should look lke this (eg. Move the axis 20mm to the right): +
      G91
       G1 X20 F360
       G90
      - If sending your own G1 commands to manually test movement, be careful to check if the printer is in relative or absolute mode as this may skew the results if you have this backwards.
    • -
    • Manual movements may not always be intuitive. On a machine where the bed moves vertically instead of the X axis gantry lifting, a downward bed movement represents an increase in Z axis value. i3 'bed slinger' designs also confuse people. Mark where you think min and max are on the bed with masking tape to make sure the nozle is moving in the right direction when testing.
    • -
    • The hot end will need to be up to temp before you can manually move the extruder, due to cold extrusion protection built into the firmware.
    • -
    -

    We'll now assume you have at least one axis that is travelling in reverse and needs fixing.

    -

    Reversing direction in the firmware

    -

    For Marlin firmware, in configuration.h, search for the term INVERT_X to be taken to the section shown below:

    - -

    Simply toggle the value from true to false or vice versa for any axes that are reversed. Recompile and flash the changes.

    -

    Reversal through wiring changes

    -

    If you don't have access to the firmware source, there is the option of altering the wiring. The simplest solution is to just plug in the stepper motor in reverse, however much to the time the connectors will make this difficult. Rather than using a blade to modify the connector and mangle it, a better solution is to lift the plastic connector housing off the mainboard PCB and then replace it facing the other way. This is illustrated in the picture below, where the E stepper port has been reversed:

    - -

    Stepper motor stutters from incorrect wiring

    -

    Sometimes you may complete an upgrade of stepper motors to another brand which has different wiring. If connected without remedy the stepper motor will stutter back and forth rather than turning smoothly in either direction. In these cases, the most common fix is to remove the centre two pins from the connector and swap them. This can be fiddly but is doable with a pick or tiny screwdriver.

    - -

    If your stepper motor current was set far too low, the same stutters could occur. Proceed with caution in either switching wires or increasing the current.

    -
    - -
    -

    Endstops/Filament Runout/Probes

    -

    Correctly configuring endstops, filament runout sensors and probes to trigger correctly can be very frustrating unless we know a good sequence to follow. That is what this tab will attempt to provide. Endstops, filament runout sensors and probes are grouped together here because the operation of each is tested with the M119 gcode.

    -

    M119 is simple but powerful. It reports back the status of the end stops filament runout sensor(s) and probes.

    -

    Note: These procedures only apply to endstop switches that can be manually triggered. A mechanical microswitch, optical switch or magnetic switch all fit into this category. It will not work for sensorless homing or when using a BLtouch for Z homing instead of an endstop.

    -

    Check each axis is moving in the correct direction

    -

    It is impossible to diagnose homing unless you have ensured each axis is moving in the correction direction. Follow the steps on the previous tab before attempting the procedures below.

    -

    Testing via terminal - Correct behaviour

    -

    Connect to your printer and make sure it is not in a homed position for any axis. This means none of the endstops are pressed. Send M119, to which you would expect the response to be:

    -
    SENDING:M119
    +                    If sending your own G1 commands to manually test movement, be careful to check if the printer is in relative or absolute mode as this may skew the results if you have this backwards.
  • +
  • Manual movements may not always be intuitive. On a machine where the bed moves vertically instead of the X axis gantry lifting, a downward bed movement represents an increase in Z axis value. i3 'bed slinger' designs also confuse people. Mark where you think min and max are on the bed with masking tape to make sure the nozle is moving in the right direction when testing.
  • +
  • The hot end will need to be up to temp before you can manually move the extruder, due to cold extrusion protection built into the firmware.
  • +
+

We'll now assume you have at least one axis that is travelling in reverse and needs fixing.

+

Reversing direction in the firmware

+

For Marlin firmware, in configuration.h, search for the term INVERT_X to be taken to the section shown below:

+ +

Simply toggle the value from true to false or vice versa for any axes that are reversed. Recompile and flash the changes.

+

Reversal through wiring changes

+

If you don't have access to the firmware source, there is the option of altering the wiring. The simplest solution is to just plug in the stepper motor in reverse, however much to the time the connectors will make this difficult. Rather than using a blade to modify the connector and mangle it, a better solution is to lift the plastic connector housing off the mainboard PCB and then replace it facing the other way. This is illustrated in the picture below, where the E stepper port has been reversed:

+ +

Stepper motor stutters from incorrect wiring

+

Sometimes you may complete an upgrade of stepper motors to another brand which has different wiring. If connected without remedy the stepper motor will stutter back and forth rather than turning smoothly in either direction. In these cases, the most common fix is to remove the centre two pins from the connector and swap them. This can be fiddly but is doable with a pick or tiny screwdriver.

+ +

If your stepper motor current was set far too low, the same stutters could occur. Proceed with caution in either switching wires or increasing the current.

+
+
+

Endstops/Filament Runout/Probes

+

Correctly configuring endstops, filament runout sensors and probes to trigger correctly can be very frustrating unless we know a good sequence to follow. That is what this tab will attempt to provide. Endstops, filament runout sensors and probes are grouped together here because the operation of each is tested with the M119 gcode.

+

M119 is simple but powerful. It reports back the status of the end stops filament runout sensor(s) and probes.

+

Note: These procedures only apply to endstop switches that can be manually triggered. A mechanical microswitch, optical switch or magnetic switch all fit into this category. It will not work for sensorless homing or when using a BLtouch for Z homing instead of an endstop.

+

Check each axis is moving in the correct direction

+

It is impossible to diagnose homing unless you have ensured each axis is moving in the correction direction. Follow the steps on the previous tab before attempting the procedures below.

+

Testing via terminal - Correct behaviour

+

Connect to your printer and make sure it is not in a homed position for any axis. This means none of the endstops are pressed. Send M119, to which you would expect the response to be:

+
SENDING:M119
 Reporting endstop status
 x_min: open
 y_min: open
 z_min: open
-

Now we will manually move the X axis to depress the endstop, or alternatively hold down the endstop switch with our finger, and send M119 again. We would expect the output to be:

-
SENDING:M119
+            

Now we will manually move the X axis to depress the endstop, or alternatively hold down the endstop switch with our finger, and send M119 again. We would expect the output to be:

+
SENDING:M119
 Reporting endstop status
 x_min: TRIGGERED
 y_min: open
 z_min: open
-

Repeating for each axis should show TRIGGERED for that axis as you press the endstop. This is the normal behaviour and your machine should home correctly as the endstops are setup correctly.

-

Axes swapped/incorrect

-

Let's say we press the X axis endstop but the Y reports as triggered. In this case we know that the endstops are plugged into the wrong port on the mainboard and the fix is a simple case of switching the plugs.

-

Endstops report in reverse

-

If the endstops report TRIGGERED when not pressed, and then open when pressed, you need to invert your endstop logic in the firmware. In configuration.h, search for X_MIN to be taken to the section below, where you can toggle between true/false for any axis working in reverse.

- -

In the case that the firmware source is not available, you can change which pins are connected on the microswitch. The common pin will always be connected, so you can change whether NO (normally open) or NC (normally closed) is the other pin connected to back to the mainboard.

-

Endstop status never changes - always reports open or TRIGGERED

-

This can be caused by several things. The first is that the endstop is not plugged in or plugged into the wrong port (eg. max port instead of min. If all of the axes work except for one, this is likely your culprit.

-

After double checking connections, and we find there is still no response from pressing any of the switches with M119, we have an option in the firmware to toggle between pull down and pull up resistors to prevent a floating state. In configuration.h, search for ENDSTOPPULLUPS to be taken to the section below, where you can comment out ENDSTOPPULLUPS and uncomment ENDSTOPPULLDOWNS. In this area, we have three options: using endstoppullups (default), endstoppulldowns (possible), or neither (very unlikely).

- -

If all of the endstops now come to life, you still may need to tweak the logic as described above. If there is still no response, perhaps you are using powered endstops and they are wired incorrectly.

-

One switch still not responding - Testing for broken wiring

-

If the procedures above do not produce working endstops, we need to consider that a switch or the wiring is damaged. This is particularly relevant if only one endstop is not working as intended.

-

A quick way to identify that wiring or a faulty switch is the issue is to remove the endstop plug from the mainboard and use a jumper to short the signal and ground pins, simulating a closed switch.

-

Warning: If your mainboard endstop ports have pins for 5V, ground and signal, take extra care to avoid connecting 5V to signal or ground. This will likely kill your mainboard! Consult the wiring diagram for your mainboard to avoid disaster.

- -

If the jumper out/in provides correct M119 reporting then we know for sure we have an electrical problem with wiring or the switch.

-

Using a multimeter to test continuity

-

A multimeter is required and we will use the continuity feature. In this case the multimeter will indicate when the two probes are connected by the screen (and a buzz if your multimeter supports this). The image below shows the typical symbol for continuity, and how the screen display changes when the probes are touching or not touching. The exact value doesn't matter when the probes are touching, all we care about is that the display registers something to indicate we have continuity.

- -

Now we can use the multimeter to first test the actual switch. Connecting the probes to the microwitch terminals, We would expect continuity to change when the switch is pressed or not pressed. If it does, the switch is good. If not, the switch needs replacing. The image below shows the switch to be good. It doesn't matter if it reads continuity when it is pressed or open, as the endstop logic can be adjusted in the firmware.

- -

Assuming the switch is good, we can now probe each wire between the switch and the mainboard to check for breaks. Connect the multimeter probes to each end of the wire, and hopefully the continuity should be measured. If one or more of the wires do not, there is an internal break and the wire(s) need to be replaced. The image below shows the red wire to be good but the black wire to be broken. If there is no continuity measured with the multimeter then there is no chance the signal can be transmitted correctly from the switch to the mainboard.

- -

Applying this testing to filament runout sensors

-

Most filament runout sensors are simple microswitches in a fancy housing, the same switches used for endstops. M119 also report filament runout status. If you start a print and find that the machine immediately tries to start a filament swap despite filament being loaded, you can use M119 to diagnose. With filament runout enabled in the firmware, the M119 output should read:

-
SENDING:M119
+            

Repeating for each axis should show TRIGGERED for that axis as you press the endstop. This is the normal behaviour and your machine should home correctly as the endstops are setup correctly.

+

Axes swapped/incorrect

+

Let's say we press the X axis endstop but the Y reports as triggered. In this case we know that the endstops are plugged into the wrong port on the mainboard and the fix is a simple case of switching the plugs.

+

Endstops report in reverse

+

If the endstops report TRIGGERED when not pressed, and then open when pressed, you need to invert your endstop logic in the firmware. In configuration.h, search for X_MIN to be taken to the section below, where you can toggle between true/false for any axis working in reverse.

+ +

In the case that the firmware source is not available, you can change which pins are connected on the microswitch. The common pin will always be connected, so you can change whether NO (normally open) or NC (normally closed) is the other pin connected to back to the mainboard.

+

Endstop status never changes - always reports open or TRIGGERED

+

This can be caused by several things. The first is that the endstop is not plugged in or plugged into the wrong port (eg. max port instead of min. If all of the axes work except for one, this is likely your culprit.

+

After double checking connections, and we find there is still no response from pressing any of the switches with M119, we have an option in the firmware to toggle between pull down and pull up resistors to prevent a floating state. In configuration.h, search for ENDSTOPPULLUPS to be taken to the section below, where you can comment out ENDSTOPPULLUPS and uncomment ENDSTOPPULLDOWNS. In this area, we have three options: using endstoppullups (default), endstoppulldowns (possible), or neither (very unlikely).

+ +

If all of the endstops now come to life, you still may need to tweak the logic as described above. If there is still no response, perhaps you are using powered endstops and they are wired incorrectly.

+

One switch still not responding - Testing for broken wiring

+

If the procedures above do not produce working endstops, we need to consider that a switch or the wiring is damaged. This is particularly relevant if only one endstop is not working as intended.

+

A quick way to identify that wiring or a faulty switch is the issue is to remove the endstop plug from the mainboard and use a jumper to short the signal and ground pins, simulating a closed switch.

+

Warning: If your mainboard endstop ports have pins for 5V, ground and signal, take extra care to avoid connecting 5V to signal or ground. This will likely kill your mainboard! Consult the wiring diagram for your mainboard to avoid disaster.

+ +

If the jumper out/in provides correct M119 reporting then we know for sure we have an electrical problem with wiring or the switch.

+

Using a multimeter to test continuity

+

A multimeter is required and we will use the continuity feature. In this case the multimeter will indicate when the two probes are connected by the screen (and a buzz if your multimeter supports this). The image below shows the typical symbol for continuity, and how the screen display changes when the probes are touching or not touching. The exact value doesn't matter when the probes are touching, all we care about is that the display registers something to indicate we have continuity.

+ +

Now we can use the multimeter to first test the actual switch. Connecting the probes to the microwitch terminals, We would expect continuity to change when the switch is pressed or not pressed. If it does, the switch is good. If not, the switch needs replacing. The image below shows the switch to be good. It doesn't matter if it reads continuity when it is pressed or open, as the endstop logic can be adjusted in the firmware.

+ +

Assuming the switch is good, we can now probe each wire between the switch and the mainboard to check for breaks. Connect the multimeter probes to each end of the wire, and hopefully the continuity should be measured. If one or more of the wires do not, there is an internal break and the wire(s) need to be replaced. The image below shows the red wire to be good but the black wire to be broken. If there is no continuity measured with the multimeter then there is no chance the signal can be transmitted correctly from the switch to the mainboard.

+ +

Applying this testing to filament runout sensors

+

Most filament runout sensors are simple microswitches in a fancy housing, the same switches used for endstops. M119 also report filament runout status. If you start a print and find that the machine immediately tries to start a filament swap despite filament being loaded, you can use M119 to diagnose. With filament runout enabled in the firmware, the M119 output should read:

+
SENDING:M119
 Reporting endstop status
 x_min: open
 y_min: open
 z_min: open
 filament: TRIGGERED
-

If you manually add or remove filament from the sensor, you would expect the report to change from open to TRIGGERED accordingly.

-

For an encoder based runout sensor (eg. BTT smart filament runout sensor), we need to repeatedly pull the filament through around 1mm at a time, sending M119 and read the status. We would expect M119 to report open most of the time and then TRIGGERED on occasion.

-

Like the endstops, we can change the logic and whether pullup or pulldown resistors are used in configuration.h of the firmware:

- -

We can also use a multimeter to test the wiring the same as for endstops.

-

Applying this testing to Z probes

-

With ABL enabled in the firmware, M119 will also report probe status:

-
SENDING:M119
+            

If you manually add or remove filament from the sensor, you would expect the report to change from open to TRIGGERED accordingly.

+

For an encoder based runout sensor (eg. BTT smart filament runout sensor), we need to repeatedly pull the filament through around 1mm at a time, sending M119 and read the status. We would expect M119 to report open most of the time and then TRIGGERED on occasion.

+

Like the endstops, we can change the logic and whether pullup or pulldown resistors are used in configuration.h of the firmware:

+ +

We can also use a multimeter to test the wiring the same as for endstops.

+

Applying this testing to Z probes

+

With ABL enabled in the firmware, M119 will also report probe status:

+
SENDING:M119
 Reporting endstop status
 x_min: open
 y_min: open
 z_min: open
 z_probe: open
-

We can use the above methods to troubleshoot the probe triggering. This works well for probes like the EZabl from TH3D or Prusa PINDA probe. You can expect the M119 status for the probe to change when you add or remove an object beneath the probe. Please remember that some probes only detect metal objects!

-

You may have noticed that the probe can have its logic reversed and pullup or pulldown resistors toggled at the same place as the endstops:

- - -

Note: The testing of a BLtouch is slightly different to other probes. It is covered in its own tab.

-
- -
-

BLtouch / ABL Probes

-

The bulk of this page will deal with specific testing of a BLtouch, but the later sections concerning probing accuracy apply to any ABL probe.

-

When it's working well, a BLtouch adds great functionality to a 3D printer. It adds the convenience of the allowing the bed to be not quite be levelled perfectly. More importantly, it can compensate for a warped bed that no amount of manual levelling can fix. The reference page for the BLtouch we will be using can be found on the Antclabs website.

-

If your BLtouch is not working as intended, this tab maybe able to help you.

-

Understanding the differences between a BLtouch and other probes

-

The BLtouch is unique in that it has actively moving parts. Other probes replace a microswitch for the z axis and function the same way: they are either trigger or not depending on if they sense the bed directly beneath the probe. A BLtouch must be deployed (pin extended) before it can be triggered and report back to the firmware. Whereas other probes only report back to the firmware with one way communication whether they are triggered or not, a BLtouch requires two way communication. The firmware has to be able to send instructions to it, as well as receive a trigger signal back from it. This is why it has extra wiring and special gcodes that can be sent to control it.

-

BLtouch wiring

-

A BLtouch requires 5 wires. Three are used to control it (red, yellow and brown), and the remaing two are used to read the trigger signal from it (black and white). Sometimes extension looms use different colours, such as the Creality loom which substitutes blue for brown.

-

Pay attention to wiring diagrams! The following diagram was created for a video guide for the Creality V4 32 bit mainoards. The comments are littered with people who assumed the Creality extension loom would match the Creality board, connected the BLtouch incorrectly and blew up their mainboard. Never assume the extension loom you are using matches the input to the mainboard (even if they are both Creality).

- -

Here is a break down of the pins:

-
    -
  • Red: 5V power to BLtouch. (Some mainboards supply 3.3V and the BLtouch can be configured to operate with this logic level).
  • -
  • Brown: Ground to BLtouch. In conjuction with the red wire provides power.
  • -
  • Yellow: Control signal from firmware to BLtouch. Uses pulse width modulation (PWM) to control the BLtouch, the same way as a servo is controlled with PWM.
  • -
  • White: Trigger signal from BLtouch to mainboard.
  • -
  • Black: Ground for trigger signal from BLtouch to the mainboard.
  • -
-

For the BLtouch to be work correctly, all of these wires must be connected correctly. When the printer is powered on, the BLtouch will click out and in. Only the red and brown wires are required for this behaviour. Don't assume you wiring is correct just because of this sequence when the printer is turned on.

-

Manual control of a BLtouch

-

Once again, connecting via terminal will provide more control to establish if the BLtouch is working correctly. The following gcode sequence of commands is useful for troubleshooting.

-

If the BLtouch does a self test (probe pin down then up twice) on start up, it means the red and brown wires are connected correctly, and the BLtouch is receiving power.

-

Using a terminal, send M280 P0 S120 for an extended self test. This will deploy and retract the probe pin 10 times. It can be stopped prematurely by sending M280 P0 S160.

-

If the firmware returns an error message that it doesn't know the command, you probably have not configured your firmware for the BLtouch correctly.

-

If these commands send but the BLtouch does not react, it means the yellow wire is not connected correctly. This could be a physical wiring issue or the wrong pin specified in the firmware. Remember that if specifying a custom control pin for the BLtouch, the pin must be capable of supporting PWM.

-

Note that a faint blue LED will be lit inside the BLtouch at all times. A bright red LED will be lit only when the probe is stowed. Therefore, when the probe is deployed, the red LED will turn off. The red LED is bright to the point that you might not notice the blue LED.

-

Once we have manual control of the probe pin, we can test the black and white wires to see if the BLtouch is reporting back to the firmware when it is triggered.

-

With the printer turned on and sitting idle (BLtouch pin retracted), sending M119 should return:

-
z_probe: TRIGGERED
-

If we now manually deploy the probe pin by sending M280 P0 S10 and then issuing M119 again, the status should read:

-
z_probe: open
-

If we now manually stow the probe pin with M280 P0 S160, and again send M119, it should return:

-
z_probe: TRIGGERED
-

If the trigger status does not change, the first thing to try is to reverse the black and white wires into the mainboard. Also note that is possible to connect the black and white wires to the Z min endstop port or a another port of your choosing, but this must be configured in the firmware. You'll notice in the wiring diagram above, the port for the black and white wires is shown and the matching line in the firmware is referenced to suit.

-

According to the Marlin M119 documentation, a BLtouch is in an error state if it reports TRIGGERED to the terminal. Howwver my BLtouch installation works as described above and has been working perfectly for years now without error, so perhaps this varies from mainboard to mainboard. An additional BLtouch testing method is shown on the Pins Debugging / Direct Pin Control tab if the sequence above does not work for you.

-

BLtouch physical mounting

-

It should go without saying that everything should be rigidly mounted. BLtouch kits come with small springs but I have never used them without issue. Check for any loose fasteners in the print head and probe mounting assembly as a first step. If there is play and the BLtouch can pivot or slide from probing point to probing point, accuracy will really suffer.

-

Ideally the BLtouch (or any other ABL probe) will be mounted as closely to the nozzle as possible, but not so close it fails from exposure to heat. What people often forget is that the tip of the retracted probe needs to be a certain distance from the tip of he nozzle, as illustrated in the Antclabs diagram:

- -

If your BLtouch is mounting too far off this target of 2.3 to 4.3mm, the probing results may be inaccurate. For a guide to measuring and inputing the probe X, Y and Z offsets, see this video guide:

- -

What to check if ABL compensation seems non existant or probing is inaccurate

-

Firstly, check the items previously listed on this page:

-
    -
  • BLtouch correctly wired and configured in firmware - passes manual control and trigger tests
  • -
  • Probe is rigidly mounted - no loose fasteners
  • -
  • Probe mounted the correct height relative to the nozzle
  • -
  • X, Y and Z offsets correctly measured and stored in EEPROM (not just compiled into firmware)
  • -
-

In addition to this:

-
    -
  • You should have G29 (probe bed for ABL) AFTER G28 (homing) in your start gcode. By default, G28 clears any saved meshes.
  • -
  • Manually levelling the bed to get it as close to flat as possible. ABL has bounds on how much it can compensate, so providing a reasonable starting point will assist the process.
  • -
  • Probing when the bed is up to printing temp. Most 3D printer beds are prone to distortion when heated. Don't probe and store a mesh when it is cool, but apply that mesh when printing hot.
  • -
  • Temporarily cutting power to the heated bed when probing. Some probes other than the BLtouch are affected by the current going through the heated bed elements. In this case, the bed should be brought up to temp, turned off for probing and then turned back omn before printing.
  • -
  • Slowing down the vertical feedrate during probing. When setting up the firmware for ABL, the vertical speed the probe travels can be set. The slower the descent towards the bed, the greater the accuracy, at the expense of overall mesh generation duration.
  • -
  • Some people have good experiences with clone BLtouch probes and some people hate them. I believe they are both right. By that I mean the quality may be variable.
  • -
-

If all of this is checked and you still want more information on the probing results, by entering G28 and then G29 in the terminal, we can receive detailed information on the probing that takes place. The output will vary depending on whether the printer is setup with a 3x3 grid, 4x4 grid, etc. Here is a sample:

-
Bilinear Leveling Grid:
+            

We can use the above methods to troubleshoot the probe triggering. This works well for probes like the EZabl from TH3D or Prusa PINDA probe. You can expect the M119 status for the probe to change when you add or remove an object beneath the probe. Please remember that some probes only detect metal objects!

+

You may have noticed that the probe can have its logic reversed and pullup or pulldown resistors toggled at the same place as the endstops:

+ + +

Note: The testing of a BLtouch is slightly different to other probes. It is covered in its own tab.

+
+
+

BLtouch / ABL Probes

+

The bulk of this page will deal with specific testing of a BLtouch, but the later sections concerning probing accuracy apply to any ABL probe.

+

When it's working well, a BLtouch adds great functionality to a 3D printer. It adds the convenience of the allowing the bed to be not quite be levelled perfectly. More importantly, it can compensate for a warped bed that no amount of manual levelling can fix. The reference page for the BLtouch we will be using can be found on the Antclabs website.

+

If your BLtouch is not working as intended, this tab maybe able to help you.

+

Understanding the differences between a BLtouch and other probes

+

The BLtouch is unique in that it has actively moving parts. Other probes replace a microswitch for the z axis and function the same way: they are either trigger or not depending on if they sense the bed directly beneath the probe. A BLtouch must be deployed (pin extended) before it can be triggered and report back to the firmware. Whereas other probes only report back to the firmware with one way communication whether they are triggered or not, a BLtouch requires two way communication. The firmware has to be able to send instructions to it, as well as receive a trigger signal back from it. This is why it has extra wiring and special gcodes that can be sent to control it.

+

BLtouch wiring

+

A BLtouch requires 5 wires. Three are used to control it (red, yellow and brown), and the remaing two are used to read the trigger signal from it (black and white). Sometimes extension looms use different colours, such as the Creality loom which substitutes blue for brown.

+

Pay attention to wiring diagrams! The following diagram was created for a video guide for the Creality V4 32 bit mainoards. The comments are littered with people who assumed the Creality extension loom would match the Creality board, connected the BLtouch incorrectly and blew up their mainboard. Never assume the extension loom you are using matches the input to the mainboard (even if they are both Creality).

+ +

Here is a break down of the pins:

+
    +
  • Red: 5V power to BLtouch. (Some mainboards supply 3.3V and the BLtouch can be configured to operate with this logic level).
  • +
  • Brown: Ground to BLtouch. In conjuction with the red wire provides power.
  • +
  • Yellow: Control signal from firmware to BLtouch. Uses pulse width modulation (PWM) to control the BLtouch, the same way as a servo is controlled with PWM.
  • +
  • White: Trigger signal from BLtouch to mainboard.
  • +
  • Black: Ground for trigger signal from BLtouch to the mainboard.
  • +
+

For the BLtouch to be work correctly, all of these wires must be connected correctly. When the printer is powered on, the BLtouch will click out and in. Only the red and brown wires are required for this behaviour. Don't assume you wiring is correct just because of this sequence when the printer is turned on.

+

Manual control of a BLtouch

+

Once again, connecting via terminal will provide more control to establish if the BLtouch is working correctly. The following gcode sequence of commands is useful for troubleshooting.

+

If the BLtouch does a self test (probe pin down then up twice) on start up, it means the red and brown wires are connected correctly, and the BLtouch is receiving power.

+

Using a terminal, send M280 P0 S120 for an extended self test. This will deploy and retract the probe pin 10 times. It can be stopped prematurely by sending M280 P0 S160.

+

If the firmware returns an error message that it doesn't know the command, you probably have not configured your firmware for the BLtouch correctly.

+

If these commands send but the BLtouch does not react, it means the yellow wire is not connected correctly. This could be a physical wiring issue or the wrong pin specified in the firmware. Remember that if specifying a custom control pin for the BLtouch, the pin must be capable of supporting PWM.

+

Note that a faint blue LED will be lit inside the BLtouch at all times. A bright red LED will be lit only when the probe is stowed. Therefore, when the probe is deployed, the red LED will turn off. The red LED is bright to the point that you might not notice the blue LED.

+

Once we have manual control of the probe pin, we can test the black and white wires to see if the BLtouch is reporting back to the firmware when it is triggered.

+

With the printer turned on and sitting idle (BLtouch pin retracted), sending M119 should return:

+
z_probe: TRIGGERED
+

If we now manually deploy the probe pin by sending M280 P0 S10 and then issuing M119 again, the status should read:

+
z_probe: open
+

If we now manually stow the probe pin with M280 P0 S160, and again send M119, it should return:

+
z_probe: TRIGGERED
+

If the trigger status does not change, the first thing to try is to reverse the black and white wires into the mainboard. Also note that is possible to connect the black and white wires to the Z min endstop port or a another port of your choosing, but this must be configured in the firmware. You'll notice in the wiring diagram above, the port for the black and white wires is shown and the matching line in the firmware is referenced to suit.

+

According to the Marlin M119 documentation, a BLtouch is in an error state if it reports TRIGGERED to the terminal. Howwver my BLtouch installation works as described above and has been working perfectly for years now without error, so perhaps this varies from mainboard to mainboard. An additional BLtouch testing method is shown on the Pins Debugging / Direct Pin Control tab if the sequence above does not work for you.

+

BLtouch physical mounting

+

It should go without saying that everything should be rigidly mounted. BLtouch kits come with small springs but I have never used them without issue. Check for any loose fasteners in the print head and probe mounting assembly as a first step. If there is play and the BLtouch can pivot or slide from probing point to probing point, accuracy will really suffer.

+

Ideally the BLtouch (or any other ABL probe) will be mounted as closely to the nozzle as possible, but not so close it fails from exposure to heat. What people often forget is that the tip of the retracted probe needs to be a certain distance from the tip of he nozzle, as illustrated in the Antclabs diagram:

+ +

If your BLtouch is mounting too far off this target of 2.3 to 4.3mm, the probing results may be inaccurate. For a guide to measuring and inputing the probe X, Y and Z offsets, see this video guide:

+ +

What to check if ABL compensation seems non existant or probing is inaccurate

+

Firstly, check the items previously listed on this page:

+
    +
  • BLtouch correctly wired and configured in firmware - passes manual control and trigger tests
  • +
  • Probe is rigidly mounted - no loose fasteners
  • +
  • Probe mounted the correct height relative to the nozzle
  • +
  • X, Y and Z offsets correctly measured and stored in EEPROM (not just compiled into firmware)
  • +
+

In addition to this:

+
    +
  • You should have G29 (probe bed for ABL) AFTER G28 (homing) in your start gcode. By default, G28 clears any saved meshes.
  • +
  • Manually levelling the bed to get it as close to flat as possible. ABL has bounds on how much it can compensate, so providing a reasonable starting point will assist the process.
  • +
  • Probing when the bed is up to printing temp. Most 3D printer beds are prone to distortion when heated. Don't probe and store a mesh when it is cool, but apply that mesh when printing hot.
  • +
  • Temporarily cutting power to the heated bed when probing. Some probes other than the BLtouch are affected by the current going through the heated bed elements. In this case, the bed should be brought up to temp, turned off for probing and then turned back omn before printing.
  • +
  • Slowing down the vertical feedrate during probing. When setting up the firmware for ABL, the vertical speed the probe travels can be set. The slower the descent towards the bed, the greater the accuracy, at the expense of overall mesh generation duration.
  • +
  • Some people have good experiences with clone BLtouch probes and some people hate them. I believe they are both right. By that I mean the quality may be variable.
  • +
+

If all of this is checked and you still want more information on the probing results, by entering G28 and then G29 in the terminal, we can receive detailed information on the probing that takes place. The output will vary depending on whether the printer is setup with a 3x3 grid, 4x4 grid, etc. Here is a sample:

+
Bilinear Leveling Grid:
     0      1      2
 0 +0.352 +0.185 +0.265
 1 +0.465 -0.007 -0.153
 2 +0.915 +0.267 -0.015
-

Firstly, I need to manually adjust my bed to get it closer to flat. The numbers tell another story though. For row zero and column 1, we have a classic high, low, high warped bed. The rest of the bed seems to be more of a general slant. Keep in mind the point 0,0 is likely at the front left of your bed, which may be counter intuitive.

-

For a more visual representation, the Bed Visualizer plugin for Octoprint will provide attractive and informative diagrams:

- -

Repeating either test should give you a good idea of the probe's accuracy. If the results vary wildly it may indicate an underlying problem and more targeted testing is required.

-

M48 Probe Repeatability test

-

Another option we have is to enable a purpose built probing accuracy test built into Marlin firmware. In configuration.h, search for M48 to find the section below and uncomment as shown:

- -

Now when you send M48 via terminal (or via the LCD screen) the probe will test the same point repeatdly and return the results:

-
Finished!
+            

Firstly, I need to manually adjust my bed to get it closer to flat. The numbers tell another story though. For row zero and column 1, we have a classic high, low, high warped bed. The rest of the bed seems to be more of a general slant. Keep in mind the point 0,0 is likely at the front left of your bed, which may be counter intuitive.

+

For a more visual representation, the Bed Visualizer plugin for Octoprint will provide attractive and informative diagrams:

+ +

Repeating either test should give you a good idea of the probe's accuracy. If the results vary wildly it may indicate an underlying problem and more targeted testing is required.

+

M48 Probe Repeatability test

+

Another option we have is to enable a purpose built probing accuracy test built into Marlin firmware. In configuration.h, search for M48 to find the section below and uncomment as shown:

+ +

Now when you send M48 via terminal (or via the LCD screen) the probe will test the same point repeatdly and return the results:

+
Finished!
 Mean: -0.006250 Min: -0.010 Max: 0.000 Range: 0.010
 Standard Deviation: 0.002795
-

The result above is above is from a BLtouch V3.1 on an Ender 3. It is very accurate and as you might expect the ABL performance is reliable and repeatable. As the probe is moving up and down on the same spot, we would expect it to trigger at the same point each time. Further parameters can be input with M48 to customise the accuracy test, click the link above to learn more.

-

There is one more BLtouch test sequence that is covered in the Pin Debugging / Direct Pin Control tab.

-
- -
-

Pin Debugging / Direct Pin Control

-

Marlin firmware provides very powerful low level control of your printer by enabling PINS_DEBUGGING and DIRECT_PIN_CONTROL in configuration_adv.h:

- -

As the firmware comments suggest, after recompiling the firmware and uploading we can use gcode to access this feature.

-

These features are intended for temporary testing only. There is the potential to damage your printer if you don't know what you're doing. Proceed with caution and disable these features after troubleshooting is complete.

-

M43 - Debug Pins

-

M43 offers a way to see exactly what the pins are doing as we have the firmware configured.

-

Sending M43 by itself will list all of the pins and their functions:

- -

As you can see, there is a lot of information and the formatting suffers as a result. There also appears to be some pins missing.

-

To get a slightly cleaner output, we can instead send M43 I, which will omit telling you that some pins are protected:

- -

If a pin is protected, that means the firmware is using it for an important function and it doesn't want you manually change the state.

-

Some pins are still missing, but we can still query a specific pin, by adding the P argument followed by the pin number:

- -

We need to use the integer pin numbers (eg. 0, 1, 2, 3 ,4 , 5...) assigned by M43 rather than the specific pin numbers from the firmware (eg. P2_04).

-

Specific M43 Uses

-

M43 S will actually test the BLtouch for us, by moving the pin in and out several times and then waiting for us to manually trigger the pin.

- -

M43 E1 will begin watching the endstops for activity, and M43 E0 will stop this. I found no output in the terminal from manually pressing the endstops in this state.

- -

M43 P[pin] W will begin watching a specific pin for activity. I couldn't find a way to exit this watching state without resetting the printer.

- -

M43 T - Trigger pins

-

M43 T offers a way to manually control pins with gcode.

-

Sending M43 T is a variant of M43 that allows you to cycle through your mainboard pins, pulsing them for a specific amount of time. I have not tested this personally, but the example linked on the Marlin reference page should illustrate it's use.

-

M42 - Set Pin State

-

M42 can be used to manually control mainboard pins. With the correct parameters, you can override the firmware and manually activate connected hardware. With the right gcode (which I will not include here), I managed to turn on the MOSFET for the hot end which rapidly started to raise the temperature without any target, hence the warning further up this page.

-

Perhaps a better use for M42 is to control hardware that is not supported by Marlin. Where some components are directly supported and have corresponding gcodes, M42 would allow you to still use gcode to trigger pins, even using PWM control.

-
- -
-

Z Wall Artefacts

-

This is one of the hardest problems to diagnose and fix, since there are so many potential culprits. As such, it will receive a dedicated video at a later date.

+

The result above is above is from a BLtouch V3.1 on an Ender 3. It is very accurate and as you might expect the ABL performance is reliable and repeatable. As the probe is moving up and down on the same spot, we would expect it to trigger at the same point each time. Further parameters can be input with M48 to customise the accuracy test, click the link above to learn more.

+

There is one more BLtouch test sequence that is covered in the Pin Debugging / Direct Pin Control tab.

+
+
+

Pin Debugging / Direct Pin Control

+

Marlin firmware provides very powerful low level control of your printer by enabling PINS_DEBUGGING and DIRECT_PIN_CONTROL in configuration_adv.h:

+ +

As the firmware comments suggest, after recompiling the firmware and uploading we can use gcode to access this feature.

+

These features are intended for temporary testing only. There is the potential to damage your printer if you don't know what you're doing. Proceed with caution and disable these features after troubleshooting is complete.

+

M43 - Debug Pins

+

M43 offers a way to see exactly what the pins are doing as we have the firmware configured.

+

Sending M43 by itself will list all of the pins and their functions:

+ +

As you can see, there is a lot of information and the formatting suffers as a result. There also appears to be some pins missing.

+

To get a slightly cleaner output, we can instead send M43 I, which will omit telling you that some pins are protected:

+ +

If a pin is protected, that means the firmware is using it for an important function and it doesn't want you manually change the state.

+

Some pins are still missing, but we can still query a specific pin, by adding the P argument followed by the pin number:

+ +

We need to use the integer pin numbers (eg. 0, 1, 2, 3 ,4 , 5...) assigned by M43 rather than the specific pin numbers from the firmware (eg. P2_04).

+

Specific M43 Uses

+

M43 S will actually test the BLtouch for us, by moving the pin in and out several times and then waiting for us to manually trigger the pin.

+ +

M43 E1 will begin watching the endstops for activity, and M43 E0 will stop this. I found no output in the terminal from manually pressing the endstops in this state.

+ +

M43 P[pin] W will begin watching a specific pin for activity. I couldn't find a way to exit this watching state without resetting the printer.

+ +

M43 T - Trigger pins

+

M43 T offers a way to manually control pins with gcode.

+

Sending M43 T is a variant of M43 that allows you to cycle through your mainboard pins, pulsing them for a specific amount of time. I have not tested this personally, but the example linked on the Marlin reference page should illustrate it's use.

+

M42 - Set Pin State

+

M42 can be used to manually control mainboard pins. With the correct parameters, you can override the firmware and manually activate connected hardware. With the right gcode (which I will not include here), I managed to turn on the MOSFET for the hot end which rapidly started to raise the temperature without any target, hence the warning further up this page.

+

Perhaps a better use for M42 is to control hardware that is not supported by Marlin. Where some components are directly supported and have corresponding gcodes, M42 would allow you to still use gcode to trigger pins, even using PWM control.

+
+
+

Z Wall Artefacts

+

This is one of the hardest problems to diagnose and fix, since there are so many potential culprits. As such, it will receive a dedicated video at a later date.

+
- -
- + + \ No newline at end of file