**Update July 28, 2016**
I've made another Instuctable that builds off this one. Instead of using tape to mark a location, a laser pointer can be used to achieve a higher precision calibration. So once you read through this one and understand the process, check out the follow-up HERE
One of the steepest learning curves when starting with 3D printing is learning how to calibrate all the motors accurately. The good news is that once you know how to calibrate one motor of the printer, the rest are pretty well the same. The following instructable shows you how to accurately calibrate your printer using minimal filament (filament is only needed to calibrate the motor that feeds the filament through the hotend).
I'll be using a Printrbot simple and Repetier for this instructable, but you should be able to follow along with any printer and software combination.
This instructable assumes you got your printer running, it just needs fine tuning.
Here's what you'll need
-3D printer with software to run it
-Ruler (about 40cm should be good)
-A pencil and a pad of paper can come in handy too.
Step 1: Step 1: Setup
After opening Repetier and connecting your 3D printer, select the manual control tab. Next turn off easy mode and hit the toggle log button(if you're using the most recent version of Repetier), then type into the G-Code: “M501” then press enter or hit send (a bunch of information will be added to your log, at the bottom of the screen)
Scroll up through the log until you see something like this “echo: M92 X__ Y__ Z___ E__.” Make a note of this line of code somewhere because we will be referring back to it often. The M92 values tell the stepper motors how many steps to take when you ask it to move any given distance. In my case I got M92 X80.2 Y80 Z2044 E104.
We'll work on calibrating one motor at a time, starting with the one that controls the X-axis.
Step 2: Step 2: Calibrating X-Axis
Measuring values of X-axis
Start by homing your X axis and raising the Z axis out of the way. (picture 1)
Take a piece of tape (less flexible tape is preferred, so it doesn't sag) and place it on the printerbed parallel to another point of the printer that won't move when you move the X-axis. (picture 2)
In Repetier tell your printer to move its X-axis. I like to start with 70mm (assuming you're using a 100x100x100mm printbed). If you choose to move your X-axis further, you should have less margin for error, but you don't want to go too far and over shoot your printers capabilities. Use another piece of tape at the same marker point you used before moving the X-axis. This is where your printer thinks 70mm is. (picture 3) We'll call this measurement the "Desired movement."
Now use your digital calipers to measure what the "True measurement" is for the X-axis (picture 4)
If you measure 70mm perfect, your X-axis is calibrated. Chances are you didn't get exactly 70mm on your first try though. Make note of the measurement you took. In my case I got 70.87mm.
Calculations for calibrating X-axis
We need 3 variables to calibrate our X-axis. First we need the 'Current M92 value' for X we made a note of in step one. Then we need the two measurements we just took. With these three variables we'll be solving for a 'New M92 value.'
Current M92 value = 80.2
Desired movement = 70mm
Actual movement = 70.87mm
Here's a formula you can use to solve for the New M92 value
New M92 value = Desired movement / Actual movement * Current M92 value
70/70.87 = .987724002 (New M92 value should be 98.77% of the Current M92 value)
80.2*.987724002 = 79.22 = New M92 value
Our New M92 value is 79.22. This makes sense because our New M92 value is less than the Current M92 value(80.2), because we overshot our goal of moving the X-axis 70mm. Now let's move on to the next step and learn how to input the New M92 value.
inputting New M92 Value for X
First type in your G:code for your New M92 value like so : “M92 X80.21” then press enter (picture5)
Then type In G:code: “M500” and press enter. (this saves your changed setting).
Type “M501” in your Gcode and scroll up in your log and make sure your new M92 for X has been saved.
If so, you can return to the beginning of this step and double check that your X-axis is now calibrated. If it is, GOOD JOB!! if not, try again. When you get that done let's move onto the Y Axis.
Step 3: Step 3: Calibrating Y-axis
Measuring values for Y-axis
This is pretty similar to what we've already done. The only real difference is finding another place to stick your tape to mark how far the Y-axis moves. First home your X,Y&Z-axes. Next move your X-axis over until it lines up with the most outside part of your printer arm(picture1). Place a piece of tape on the Y-axis over a point marked on the X-axis(picture 2). Tell Repetier to move the Y-axis 70mm. Now mark that point with a piece of tape and measure the true distance between those points (picture3). I got 69.8mm, which isn't far enough. With these two measurements and our current M92 value for Y, we can now solve for our New M92 value.
Calculation for the Y-Axis and inputting data
Desired movement = 70
Actual movement = 69.8
Current movement = 80
Use our same formula from step 3 to solve for our Y-axis motor.
Desired movement/Actual movement * Current M92 value = New M92 value
70/69.8 = 1.00286533 (New M92 value should be 100.29% of the Current M92 value)
New M92 value = 1.00286533* 80 = 80.23
Now let's input that number. In G:code type your New M92 value like so : “M92 Y80.23” then press enter. Next type “M500” in G:code and press enter. (this saves your changed setting). Then in Gcode type : “M501” and scroll up in your log and make sure your new M92 Value has been saved. If so, you can return to the beginning of this step and double check that your Y-axis is now calibrated. If so, great! If not, try again. Next we'll be working on the Z axis.
Step 4: Step 4: Calibratnig Z-axis
Instead of using the digital calipers for the Z-axis, we'll be using a ruler. First home your XY&Z axes. Next put your ruler perpendicular to your printbed, alongside the printer. Move your eye so it's level with the printer and make note of a particular point of your printer (I like to use the tallest part of the printers arm). Make sure when you take your measurements, your eye is level with the point your measuring. I measured 17.7cm. Now tell your printer to raise 100mm. Take a look at how far your printer has actually moved. Mine moved to about 27.75cm. If we subtract the second measurement from the first (27.75-17.7cm) we get 10.05cm or 100.5mm. So we've slightly overshot our goal of 100mm.
Calculating and inputting new value for the Z-axis:
Again we use our same formula from step 3 to solve for our Z-axis motor.
Desired movement = 100
Actual movement = 100.5
Current M92 value = 2044
Input measurement/Actual measurement * Old M92 value = New M92 value
100/100.3 = .995024876
New M92 value = 995024876* 2044 = 2033.83
Now let's input that New M92 value: in G:code type your New M92 value like so : “M92 Z2037.89” then press enter. In G:code type: “M500” then press enter. (this saves your changed setting). In Gcode type : “M501” Now scroll up in your log and make sure your new M92 Value has been saved. If so, you can return to the beginning of this step and double check that your Z-axis is now calibrated. If so Great job! Only one more motor to go!
Step 5: Step 5: Calibrating Extruder
Measuring E value:
Now we'll measure and calibrate how much filament comes out of your extruder. First heat up your hotend to the recommended temperature for your filament. Next use a pencil to mark a few cm up on the filament (you can use tape to mark it instead, just don't forget about removing it before it gets jammed in your extruder). Measure how far away the mark is from the extruder. Then tell the printer to extrude 10mm of filament. Measure the distance again.
Subtract your first measurement from your second to find your actual measurement. I got 2.9-1.83 = 1.07cm or 10.7mm
If you got 10mm, then great your E value is calibrated. If not continue to find your new M92 value.
Calculating New M92 E value:
Again we use our same formula from step 2 to solve for our Y-axis.
Input measurement = 10
Actual measurement = 10.7
Old M92 value = 104
Desired measurement/Actual measurement * Current M92 value = New M92 value
New M92 value = 104*.934579... = 97.20
Now let's input that New M92 value: in G:code type your New M92 value like so : “M92 E97.2” then press enter. In G:code type: “M500” then press enter. (this saves your changed setting). In Gcode type : “M501” Now scroll up in your log and make sure your new M92 Value has been saved. If so, you can return to the start of this step and double check that your extruder is now calibrated. If so Great job, Your finished!