| 
									
										
										
										
											2021-07-22 00:40:40 +02:00
										 |  |  | # Manual leveling
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-02-16 22:19:34 -05:00
										 |  |  | This document describes tools for calibrating a Z endstop and for | 
					
						
							|  |  |  | performing adjustments to bed leveling screws. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-22 00:40:40 +02:00
										 |  |  | ## Calibrating a Z endstop
 | 
					
						
							| 
									
										
										
										
											2019-02-16 22:19:34 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | An accurate Z endstop position is critical to obtaining high quality | 
					
						
							|  |  |  | prints. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Note, though, the accuracy of the Z endstop switch itself can be a | 
					
						
							|  |  |  | limiting factor. If one is using Trinamic stepper motor drivers then | 
					
						
							|  |  |  | consider enabling [endstop phase](Endstop_Phase.md) detection to | 
					
						
							|  |  |  | improve the accuracy of the switch. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-03-22 11:18:31 -04:00
										 |  |  | To perform a Z endstop calibration, home the printer, command the head | 
					
						
							|  |  |  | to move to a Z position that is at least five millimeters above the | 
					
						
							|  |  |  | bed (if it is not already), command the head to move to an XY position | 
					
						
							|  |  |  | near the center of the bed, then navigate to the OctoPrint terminal | 
					
						
							|  |  |  | tab and run: | 
					
						
							| 
									
										
										
										
											2019-02-16 22:19:34 -05:00
										 |  |  | ``` | 
					
						
							|  |  |  | Z_ENDSTOP_CALIBRATE | 
					
						
							|  |  |  | ``` | 
					
						
							| 
									
										
										
										
											2019-05-24 22:34:24 -04:00
										 |  |  | Then follow the steps described at | 
					
						
							|  |  |  | ["the paper test"](Bed_Level.md#the-paper-test) to determine the | 
					
						
							|  |  |  | actual distance between the nozzle and bed at the given location. Once | 
					
						
							|  |  |  | those steps are complete one can `ACCEPT` the position and save the | 
					
						
							|  |  |  | results to the config file with: | 
					
						
							| 
									
										
										
										
											2019-02-16 22:19:34 -05:00
										 |  |  | ``` | 
					
						
							|  |  |  | SAVE_CONFIG | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | It's preferable to use a Z endstop switch on the opposite end of the Z | 
					
						
							|  |  |  | axis from the bed. (Homing away from the bed is more robust as then it | 
					
						
							| 
									
										
										
										
											2019-10-16 16:40:27 -04:00
										 |  |  | is generally always safe to home the Z.) However, if one must home | 
					
						
							| 
									
										
										
										
											2019-02-16 22:19:34 -05:00
										 |  |  | towards the bed it is recommended to adjust the endstop so that it | 
					
						
							|  |  |  | triggers a small distance (eg, .5mm) above the bed. Almost all endstop | 
					
						
							|  |  |  | switches can safely be depressed a small distance beyond their trigger | 
					
						
							|  |  |  | point. When this is done, one should find that the | 
					
						
							|  |  |  | `Z_ENDSTOP_CALIBRATE` command reports a small positive value (eg, | 
					
						
							|  |  |  | .5mm) for the Z position_endstop. Triggering the endstop while it is | 
					
						
							|  |  |  | still some distance from the bed reduces the risk of inadvertent bed | 
					
						
							|  |  |  | crashes. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Some printers have the ability to manually adjust the location of the | 
					
						
							|  |  |  | physical endstop switch. However, it's recommended to perform Z | 
					
						
							|  |  |  | endstop positioning in software with Klipper - once the physical | 
					
						
							|  |  |  | location of the endstop is in a convenient location, one can make any | 
					
						
							|  |  |  | further adjustments by running Z_ENDSTOP_CALIBRATE or by manually | 
					
						
							|  |  |  | updating the Z position_endstop in the configuration file. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-22 00:40:40 +02:00
										 |  |  | ## Adjusting bed leveling screws
 | 
					
						
							| 
									
										
										
										
											2019-02-16 22:19:34 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | The secret to getting good bed leveling with bed leveling screws is to | 
					
						
							|  |  |  | utilize the printer's high precision motion system during the bed | 
					
						
							|  |  |  | leveling process itself. This is done by commanding the nozzle to a | 
					
						
							| 
									
										
										
										
											2019-10-16 16:40:27 -04:00
										 |  |  | position near each bed screw and then adjusting that screw until the | 
					
						
							|  |  |  | bed is a set distance from the nozzle. Klipper has a tool to assist | 
					
						
							|  |  |  | with this. In order to use the tool it is necessary to specify each | 
					
						
							|  |  |  | screw XY location. | 
					
						
							| 
									
										
										
										
											2019-02-16 22:19:34 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | This is done by creating a `[bed_screws]` config section. For example, | 
					
						
							|  |  |  | it might look something similar to: | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | [bed_screws] | 
					
						
							| 
									
										
										
										
											2022-01-09 21:13:53 -05:00
										 |  |  | screw1: 100, 50 | 
					
						
							|  |  |  | screw2: 100, 150 | 
					
						
							|  |  |  | screw3: 150, 100 | 
					
						
							| 
									
										
										
										
											2019-02-16 22:19:34 -05:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | If a bed screw is under the bed, then specify the XY position directly | 
					
						
							|  |  |  | above the screw. If the screw is outside the bed then specify an XY | 
					
						
							|  |  |  | position closest to the screw that is still within the range of the | 
					
						
							|  |  |  | bed. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Once the config file is ready, run `RESTART` to load that config, and | 
					
						
							|  |  |  | then one can start the tool by running: | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | BED_SCREWS_ADJUST | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-01-09 21:13:53 -05:00
										 |  |  | This tool will move the printer's nozzle to each screw XY location | 
					
						
							|  |  |  | and then move the nozzle to a Z=0 height. At this point one can use the | 
					
						
							| 
									
										
										
										
											2019-02-16 22:19:34 -05:00
										 |  |  | "paper test" to adjust the bed screw directly under the nozzle. See | 
					
						
							|  |  |  | the information described in | 
					
						
							|  |  |  | ["the paper test"](Bed_Level.md#the-paper-test), but adjust the bed | 
					
						
							|  |  |  | screw instead of commanding the nozzle to different heights. Adjust | 
					
						
							|  |  |  | the bed screw until there is a small amount of friction when pushing | 
					
						
							|  |  |  | the paper back and forth. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Once the screw is adjusted so that a small amount of friction is felt, | 
					
						
							|  |  |  | run either the `ACCEPT` or `ADJUSTED` command. Use the `ADJUSTED` | 
					
						
							|  |  |  | command if the bed screw needed an adjustment (typically anything more | 
					
						
							|  |  |  | than about 1/8th of a turn of the screw). Use the `ACCEPT` command if | 
					
						
							|  |  |  | no significant adjustment is necessary. Both commands will cause the | 
					
						
							|  |  |  | tool to proceed to the next screw. (When an `ADJUSTED` command is | 
					
						
							|  |  |  | used, the tool will schedule an additional cycle of bed screw | 
					
						
							|  |  |  | adjustments; the tool completes successfully when all bed screws are | 
					
						
							|  |  |  | verified to not require any significant adjustments.) One can use the | 
					
						
							|  |  |  | `ABORT` command to exit the tool early. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | This system works best when the printer has a flat printing surface | 
					
						
							|  |  |  | (such as glass) and has straight rails. Upon successful completion of | 
					
						
							|  |  |  | the bed leveling tool the bed should be ready for printing. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-22 00:40:40 +02:00
										 |  |  | ### Fine grained bed screw adjustments
 | 
					
						
							| 
									
										
										
										
											2019-02-16 22:19:34 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  | If the printer uses three bed screws and all three screws are under | 
					
						
							|  |  |  | the bed, then it may be possible to perform a second "high precision" | 
					
						
							|  |  |  | bed leveling step. This is done by commanding the nozzle to locations | 
					
						
							|  |  |  | where the bed moves a larger distance with each bed screw adjustment. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For example, consider a bed with screws at locations A, B, and C: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | For each adjustment made to the bed screw at location C, the bed will | 
					
						
							|  |  |  | swing along a pendulum defined by the remaining two bed screws (shown | 
					
						
							|  |  |  | here as a green line). In this situation, each adjustment to the bed | 
					
						
							|  |  |  | screw at C will move the bed at position D a further amount than | 
					
						
							|  |  |  | directly at C. It is thus possible to make an improved C screw | 
					
						
							|  |  |  | adjustment when the nozzle is at position D. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | To enable this feature, one would determine the additional nozzle | 
					
						
							|  |  |  | coordinates and add them to the config file. For example, it might | 
					
						
							|  |  |  | look like: | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | [bed_screws] | 
					
						
							| 
									
										
										
										
											2022-01-09 21:13:53 -05:00
										 |  |  | screw1: 100, 50 | 
					
						
							|  |  |  | screw1_fine_adjust: 0, 0 | 
					
						
							|  |  |  | screw2: 100, 150 | 
					
						
							|  |  |  | screw2_fine_adjust: 300, 300 | 
					
						
							|  |  |  | screw3: 150, 100 | 
					
						
							|  |  |  | screw3_fine_adjust: 0, 100 | 
					
						
							| 
									
										
										
										
											2019-02-16 22:19:34 -05:00
										 |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | When this feature is enabled, the `BED_SCREWS_ADJUST` tool will first | 
					
						
							|  |  |  | prompt for coarse adjustments directly above each screw position, and | 
					
						
							|  |  |  | once those are accepted, it will prompt for fine adjustments at the | 
					
						
							|  |  |  | additional locations. Continue to use `ACCEPT` and `ADJUSTED` at each | 
					
						
							|  |  |  | position. | 
					
						
							| 
									
										
										
										
											2019-03-08 16:47:17 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-07-22 00:40:40 +02:00
										 |  |  | ## Adjusting bed leveling screws using the bed probe
 | 
					
						
							| 
									
										
										
										
											2019-03-08 16:47:17 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | This is another way to calibrate the bed level using the bed probe. To | 
					
						
							|  |  |  | use it you must have a Z probe (BL Touch, Inductive sensor, etc). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-16 16:40:27 -04:00
										 |  |  | To enable this feature, one would determine the nozzle coordinates | 
					
						
							| 
									
										
										
										
											2020-10-17 19:24:54 -04:00
										 |  |  | such that the Z probe is above the screws, and then add them to the | 
					
						
							|  |  |  | config file. For example, it might look like: | 
					
						
							| 
									
										
										
										
											2019-03-08 16:47:17 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | [screws_tilt_adjust] | 
					
						
							| 
									
										
										
										
											2022-01-09 21:13:53 -05:00
										 |  |  | screw1: -5, 30 | 
					
						
							| 
									
										
										
										
											2019-03-08 16:47:17 +00:00
										 |  |  | screw1_name: front left screw | 
					
						
							| 
									
										
										
										
											2022-01-09 21:13:53 -05:00
										 |  |  | screw2: 155, 30 | 
					
						
							| 
									
										
										
										
											2019-03-08 16:47:17 +00:00
										 |  |  | screw2_name: front right screw | 
					
						
							| 
									
										
										
										
											2022-01-09 21:13:53 -05:00
										 |  |  | screw3: 155, 190 | 
					
						
							| 
									
										
										
										
											2019-03-08 16:47:17 +00:00
										 |  |  | screw3_name: rear right screw | 
					
						
							| 
									
										
										
										
											2022-01-09 21:13:53 -05:00
										 |  |  | screw4: -5, 190 | 
					
						
							| 
									
										
										
										
											2019-03-08 16:47:17 +00:00
										 |  |  | screw4_name: rear left screw | 
					
						
							|  |  |  | horizontal_move_z: 10. | 
					
						
							|  |  |  | speed: 50. | 
					
						
							|  |  |  | screw_thread: CW-M3 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | The screw1 is always the reference point for the others, so the system | 
					
						
							| 
									
										
										
										
											2021-06-22 15:18:05 -04:00
										 |  |  | assumes that screw1 is at the correct height. Always run `G28` first | 
					
						
							| 
									
										
										
										
											2019-10-16 16:40:27 -04:00
										 |  |  | and then run `SCREWS_TILT_CALCULATE` - it should produce output | 
					
						
							|  |  |  | similar to: | 
					
						
							| 
									
										
										
										
											2019-03-08 16:47:17 +00:00
										 |  |  | ``` | 
					
						
							|  |  |  | Send: G28 | 
					
						
							|  |  |  | Recv: ok | 
					
						
							|  |  |  | Send: SCREWS_TILT_CALCULATE | 
					
						
							| 
									
										
										
										
											2021-06-22 15:18:05 -04:00
										 |  |  | Recv: // 01:20 means 1 full turn and 20 minutes, CW=clockwise, CCW=counter-clockwise | 
					
						
							|  |  |  | Recv: // front left screw (base) : x=-5.0, y=30.0, z=2.48750 | 
					
						
							|  |  |  | Recv: // front right screw : x=155.0, y=30.0, z=2.36000 : adjust CW 01:15 | 
					
						
							|  |  |  | Recv: // rear right screw : y=155.0, y=190.0, z=2.71500 : adjust CCW 00:50 | 
					
						
							|  |  |  | Recv: // read left screw : x=-5.0, y=190.0, z=2.47250 : adjust CW 00:02 | 
					
						
							| 
									
										
										
										
											2019-03-08 16:47:17 +00:00
										 |  |  | Recv: ok | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-05 20:34:23 -04:00
										 |  |  | This means that: | 
					
						
							| 
									
										
										
										
											2021-10-23 11:21:46 -07:00
										 |  |  | - front left screw is the reference point you must not change it. | 
					
						
							|  |  |  | - front right screw must be turned clockwise 1 full turn and a quarter turn | 
					
						
							|  |  |  | - rear right screw must be turned counter-clockwise 50 minutes | 
					
						
							| 
									
										
										
										
											2022-01-30 00:18:03 +01:00
										 |  |  | - rear left screw must be turned clockwise 2 minutes (not need it's ok) | 
					
						
							| 
									
										
										
										
											2019-03-08 16:47:17 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-04-05 20:34:23 -04:00
										 |  |  | Note that "minutes" refers to "minutes of a clock face". So, for | 
					
						
							|  |  |  | example, 15 minutes is a quarter of a full turn. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-10-16 16:40:27 -04:00
										 |  |  | Repeat the process several times until you get a good level bed - | 
					
						
							|  |  |  | normally when all adjustments are below 6 minutes. | 
					
						
							| 
									
										
										
										
											2020-10-17 19:36:45 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | If using a probe that is mounted on the side of the hotend (that is, | 
					
						
							|  |  |  | it has an X or Y offset) then note that adjusting the bed tilt will | 
					
						
							|  |  |  | invalidate any previous probe calibration that was performed with a | 
					
						
							|  |  |  | tilted bed. Be sure to run [probe calibration](Probe_Calibrate.md) | 
					
						
							|  |  |  | after the bed screws have been adjusted. | 
					
						
							| 
									
										
										
										
											2021-02-08 17:52:46 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | The `MAX_DEVIATION` parameter is useful when a saved bed mesh is used, | 
					
						
							|  |  |  | to ensure that the bed level has not drifted too far from where it was when | 
					
						
							|  |  |  | the mesh was created. For example, `SCREWS_TILT_CALCULATE MAX_DEVIATION=0.01` | 
					
						
							|  |  |  | can be added to the custom start gcode of the slicer before the mesh is loaded. | 
					
						
							|  |  |  | It will abort the print if the configured limit is exceeded (0.01mm in this | 
					
						
							|  |  |  | example), giving the user a chance to adjust the screws and restart the print. | 
					
						
							| 
									
										
										
										
											2021-06-22 15:18:05 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | The `DIRECTION` parameter is useful if you can turn your bed adjustment | 
					
						
							|  |  |  | screws in one direction only. For example, you might have screws that start | 
					
						
							|  |  |  | tightened in their lowest (or highest) possible position, which can only be | 
					
						
							|  |  |  | turned in a single direction, to raise (or lower) the bed. If you can only | 
					
						
							|  |  |  | turn the screws clockwise, run `SCREWS_TILT_CALCULATE DIRECTION=CW`. If you can | 
					
						
							|  |  |  | only turn them counter-clockwise, run `SCREWS_TILT_CALCULATE DIRECTION=CCW`. | 
					
						
							|  |  |  | A suitable reference point will be chosen such that the bed can be leveled | 
					
						
							|  |  |  | by turning all the screws in the given direction. |