Calibrating Your 3D Printer Using Minimal Filament
Calibrating Your 3D Printer Using Minimal Filament
by mrakuaku
**Update July 28, 2016** I'll be using a Printrbot simple and Repetier for this
instructable, but you should be able to follow along
I've made another Instuctable that builds off this one. with any printer and software combination.
Instead of using tape to mark a location, a laser
pointer can be used to achieve a higher precision This instructable assumes you got your printer
calibration. So once you read through this one and running, it just needs fine tuning.
understand the process, check out the follow-up
HERE Here's what you'll need
After opening Repetier and connecting your 3D this line of code somewhere because we will be
printer, select the manual control tab. Next turn off referring back to it often. The M92 values tell the
easy mode and hit the toggle log button(if you're stepper motors how many steps to take when you ask
using the most recent version of Repetier), then type it to move any given distance. In my case I got M92
into the G-Code: “M501” then press enter or hit send X80.2 Y80 Z2044 E104.
(a bunch of information will be added to your log, at
the bottom of the screen) We'll work on calibrating one motor at a time, starting
with the one that controls the X-axis.
Scroll up through the log until you see something like
this “echo: M92 X__ Y__ Z___ E__.” Make a note of
3 4 1
Measuring values of X-axis your printers capabilities. Use another piece of tape
at the same marker point you used before moving the
Start by homing your X axis and raising the Z axis out X-axis. This is where your printer thinks 70mm is.
of the way. (picture 1) (picture 3) We'll call this measurement the "Desired
movement."
Take a piece of tape (less flexible tape is preferred,
so it doesn't sag) and place it on the printerbed Now use your digital calipers to measure what the
parallel to another point of the printer that won't move "True measurement" is for the X-axis (picture 4)
when you move the X-axis. (picture 2)
If you measure 70mm perfect, your X-axis is
In Repetier tell your printer to move its X-axis. I like to calibrated. Chances are you didn't get exactly 70mm
start with 70mm (assuming you're using a on your first try though. Make note of the
100x100x100mm printbed). If you choose to move measurement you took. In my case I got 70.87mm.
your X-axis further, you should have less margin for
error, but you don't want to go too far and over shoot Calculations for calibrating X-axis
We need 3 variables to calibrate our X-axis. First we Our New M92 value is 79.22. This makes sense
need the 'Current M92 value' for X we made a note of because our New M92 value is less than the Current
in step one. Then we need the two measurements we M92 value(80.2), because we overshot our goal of
just took. With these three variables we'll be solving moving the X-axis 70mm. Now let's move on to the
for a 'New M92 value.' next step and learn how to input the New M92 value.
Desired movement = 70mm First type in your G:code for your New M92 value like
so : “M92 X79.22” then press enter (picture5)
Actual movement = 70.87mm Then type In G:code: “M500” and press enter. (this
saves your changed setting).
Here's a formula you can use to solve for the New
M92 value Type “M501” in your Gcode and scroll up in your log
and make sure your new M92 for X has been saved.
New M92 value = Desired movement / Actual
movement * Current M92 value If so, you can return to the beginning of this step and
double check that your X-axis is now calibrated. If it
70/70.87 = .987724002 (New M92 value should be is, GOOD JOB!! if not, try again. When you get that
98.77% of the Current M92 value) done let's move onto the Y Axis.
This is pretty similar to what we've already done. The Current movement = 80
only real difference is finding another place to stick
your tape to mark how far the Y-axis moves. First Use our same formula from step 3 to solve for our Y-
home your X,Y&Z-axes. Next move your X-axis over axis motor.
until it lines up with the most outside part of your
printer arm(picture1). Place a piece of tape on the Y- Desired movement/Actual movement * Current
axis over a point marked on the X-axis(picture 2). Tell M92 value = New M92 value
Repetier to move the Y-axis 70mm. Now mark that
point with a piece of tape and measure the true 70/69.8 = 1.00286533 (New M92 value should be
distance between those points (picture3). I got 100.29% of the Current M92 value)
69.8mm, which isn't far enough. With these two
measurements and our current M92 value for Y, we New M92 value = 1.00286533* 80 = 80.23
can now solve for our New M92 value.
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 :
Calculation for the Y-Axis and inputting data “M501” and scroll up in your log and make sure your
new M92 Value has been saved. If so, you can return
Desired movement = 70 to the beginning of this step and double check that
Instead of using the digital calipers for the Z-axis, Current M92 value = 2044
we'll be using a ruler. First home your XY&Z axes.
Next put your ruler perpendicular to your printbed, Input measurement/Actual measurement * Old
alongside the printer. Move your eye so it's level with M92 value = New M92 value
the printer and make note of a particular point of your
printer (I like to use the tallest part of the printers 100/100.3 = .995024876
arm). Make sure when you take your measurements,
your eye is level with the point your measuring. I New M92 value = 995024876* 2044 = 2033.83
measured 17.7cm. Now tell your printer to raise
100mm. Take a look at how far your printer has Now let's input that New M92 value: in G:code type
actually moved. Mine moved to about 27.75cm. If we your New M92 value like so : “M92 Z2037.89” then
subtract the second measurement from the first press enter. In G:code type: “M500” then press enter.
(27.75-17.7cm) we get 10.05cm or 100.5mm. So (this saves your changed setting). In Gcode type :
we've slightly overshot our goal of 100mm. “M501” Now scroll up in your log and make sure your
new M92 Value has been saved. If so, you can return
Calculating and inputting new value for the Z-axis: to the beginning of this step and double check that
your Z-axis is now calibrated. If so Great job! Only
Again we use our same formula from step 3 to solve one more motor to go!
for our Z-axis motor.
Measuring E value: Again we use our same formula from step 2 to solve
for our Y-axis.
Now we'll measure and calibrate how much filament Input measurement = 10
comes out of your extruder. First heat up your hotend
to the recommended temperature for your filament. Actual measurement = 10.7
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 Old M92 value = 104
about removing it before it gets jammed in your
extruder). Measure how far away the mark is from the Desired measurement/Actual measurement * Current
extruder. Then tell the printer to extrude 10mm of M92 value = New M92 value
filament. Measure the distance again.
10/10.7 =.934579...
Subtract your first measurement from your second to
find your actual measurement. I got 2.9-1.83 = New M92 value = 104*.934579... = 97.20
1.07cm or 10.7mm
Now let's input that New M92 value: in G:code type
If you got 10mm, then great your E value is your New M92 value like so : “M92 E97.2” then press
calibrated. If not continue to find your new M92 value. 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
Calculating New M92 E value: extruder is now calibrated. If so Great job, Your
finished!
1. Pencil mark
1. Pencil mark. This photo is a bit off because it wasn't taken at the right
angle
Confused: You say "80.2*.987724002 = 79.22 = New M92 value" yet when you input it to your
printer and save it you say "First type in your G:code for your New M92 value like so : “M92
X80.21” then press enter". Why are you entering X80.21 when you said the new value for x was
79.22?
Is there any way to change the calibration value without using computer and save it?
The calibration values keep resetting back to default every time I switch the printer off and
back on. The printer usb connection is not working properly.
What kind of printer are you using and what printing software did you try from your computer?
On your computer go into your printing software settings.
First with your printer unplugged see what COM ports are available to connect to. Then plug in
your computer and there should be a new 'COM port' available to connect to. Make sure you select
the one that appears only when the printer is plugged in and turned on.
Next if you still can't connect to the printer, try changing the 'baud rate' (also in the printer software
settings)... keep changing this and trying to connect to your printer until you find one that works.
Probably you are missing to store setting in EEPROM. Checked on web pages, Tevo Tarantula
should have EEPROM enabled. Try to search menu for "Store setting" / "Load setting".
EEPROM is a permanent part of memory where printer can store such kind of data.
It's difficult to say what the issue is without more information. What printer and slicing programs are
you using? Did you change your Z-axis offset?
The command M212 deals with the Z offset. If you can connect your printer to your computer over
USB, check what yours is currently set to by entering "M501" in the command line . If it's set to
something like 15, then that's probably your issue, and you should start by setting it to 0. If it's set
to 0, you can lower your offset by with -15 (although I'd lower it by small increments so you don't
crash your printers nozzle into the print bed). you'll need to fine tune the number until you find the
exact height for a good first layer.
Follow these steps to change your Z-offset.. (the offset number you use will depend on what M212
is currently set to and how much you need it to move)
1. enter the command "M212 Z-1" to lower your Z axis offset to -1mm
You can also raise your offset with a positive number "M212 Z0.5" this will raise the Z offset to
0.5mm... I would go with a smaller number first though and gradually bring it down. You'll need to
save the command before you test it
2. Save your changes by entering "M500" into your command line.
3. Check to make sure your settings were saved with "M501"
If that problem happens with multiple slicers, then it's probably your issue, as M212 is saved on the
printers eeprom (internal memory). If it only happens with one slicer, I'd look at your g-code to see
if there is a command that tells your printers Z-axis to raise 15mm (something like G1 Z15). You
can save a g-code file to your desktop and then open it with notepad to check.
Oh, and by moving xyz to limits, I assume you mean you have the printer home itself and that
you're not physically moving them... right?
MrAkuAku,
Thanks so much for your reply.
The printer is a Flsun i3.
I think it is working properly now.
I did small print, but it is not sticking to bed properly.
I changed it to Auto Leveling now.
I think the problem might have been the firmware. i am totally new to 3D so its all very confusing.
I now use G28 to go home to X and Y. Then G29 to Autolevel and then print. I set the sensor to
nearly same level as extruder nozzle. I have to fine tune and then use Z offset. But not sure how to
enter the Z offset.
Use the LCd or Repetier Host.
Your probe should be about 1mm higher than your printers nozzle, that way your nozzle won't
crash into your print as it's printing.
How to Accurately Calibrate Your 3D Printer: Page 10
If your printer has an adjust Z-offset option on the LCD, I would do it that way (I know Prusa i3Mk2
does). If it doesn't, then I'd recommend you connect your printer to your computer over USB then in
the manual input tab of Repetier, change your M212 value as I outlined in the previous comment.
Other reasons your print might not be sticking,
make sure your printbed is flat... even with an autolevel probe, it still helps to have a level print
bed. If you have your printer hooked up to your computer, when you send the G29 command to
your printer you can see how much travel your Z axis is taking to trigger the auto probe.... you can
compare these values and try and make them close to being equal.
What are you printing on, is your printbed heated? If so, is it getting too hot for the material your
printing? If not, do you have blue painters tape down, and/or gluestick? Are you printing in PLA (I
would suggest PLA as your first print material)? Are your temperature settings correct for the
material your using? If the first layer sticks but nothing else, maybe you need to calibrate your Z
axis or extruder... just somethings to consider
By trial and error I deduced, as you say that the probe needs to be a little higher than the nozzle. I
had to modify the original bracket as it held the probe way to high!
I was not paying much attention to the LCd, as I was just focussed on communicating via Repetier
Host.
There is a Z Offset in the LCD control. So I imagine I would need to do an Auto Level, then
manually Touch the nozzle to the bed and just in that position activate the LCD Z offset as it does
not have any means to enter digits.
I am also learning about the M commands, so will attempt to use them if all else fails.
M114 To Read position of the Axes
M212 Enter Z Offset
M500 To save Changes
M501 To confirm changes.
I have a heated bed, but the User manual suggests no heating for PLA. I am using the supplied
masking tape on the bed.
Yes, the very first piece I tried stuck well to the bed but it looked like the extruder was too slow.
Upper layers began to drift. Will need to fine tune it all.
How do you navigate your LCD? Is there a spinny wheel thing that you can press in to click (digital
encoder), or is it a touch screen? If it's a wheel thing, you should be able to start a print and on the
first layer of the print select Z-offset and adjust until the nozzle is a good distance away from the
print bed (that's how it is with Prusa i3 Mk2 at least).
What do you mean they drifted.. like if you tried to make a square it would look like stairs? It could
be that your Z-axis isn't moving up enough between layers, and you nozzel is hitting your printed
part causing X/Y, motors to skip... or it could be your X/Y axis tension belts are loose.... This is a
good reference for trying to trouble shoot various issues:
https://www.simplify3d.com/support/print-quality-t...
The LCD is a Ramps Controller with the rotating knob. I used it to navigate to Z offset with the
nozzle almost touching the bed. I think it worked as the print was successful. (See attached photo)
The part that "drifted" had overhangs, and support was insufficient. I think it started too far from the
bed so the extrusion did not stick and was dragged around by the nozzle. It ended up like spagetti!
I would probably try and reflash/update the software for your printer. It might work after that... and if
it doesn't, you can probably change the M92 values right in the arduino .ino file..... This might
require you to upload the arduino sketch to your printer a few times to get the calibration dialed in.
Here are a couple of videos that might help
//www.youtube.com/embed/6g_ykyAMjLE
//www.youtube.com/embed/3gwWVFtdg-4
Are you using Repetier? And what type of printer are you using?
Hi there, i am using Repetier and the printer is a ctc clone prusa i3 pro b, from ebay, i could get you
a link to the one I bought if you would need to see it?
No, the name should be fine.... I strongly recommend calibrating one axis at a time.... and following
the instructions carefully. Is it possible that you aren't inputting the commands properly, so when
you try and save it, it doesn't do anything?
Do you have the right motors plugged in to their corresponding motor controllers?
I don't seem to be having any issues modifying values by going into config>firmware eeprom
configuration (they didn't have that when I first wrote this tutorial). You're saving them after you
modify them?
Did you upload the Marlin software to your printer with the Arduino IDE? If so, another way to get it
to change the amount of steps for each motor would be to alter the configuration.h file for Marlin.
do a search for
"#define DEFAULT_AXIS_STEPS_PER_UNIT"
The first number in the brackets is for the X-axis, then Y, Z, and E.
whenever I type in the commands (of which I've tried everyway I can think of lol) e.g M92 X82.26,
I'm not really sure how you're confirming that the X-axis values have in fact changed without
turning you printer off. If you change your Xaxis M92 value to say 10, does it reduce the travel of
you x-axis significantly? If not, you're not changing the M92 value at all (forget about powering on
and off being the issue).
If there was something wrong with your eeprom, I would think you wouldn't be able to write to it at
all. If somehow that is the problem, I would recommend going to slicer tab of Repetier, then going
to slic3r configuration. Once the slic3r window opens up, go to the far right tab 'Printer settings',
then in "start up G-code" write:
M92 X(value);
M92 Y(value);
M92 Z(value);
M92 E(value);
M500;
This will type in those settings every time you start a print job, so resetting wouldn't be an issue.
You need to save the custom g-code you just made, make sure it's selected in as your slicer
settings in the slicer tab of Repetier (under "printer settings"), then you're actually going to have to
start a print job to get those values to save to your printer.
You should also be able to write it like this too:
M92 X(value) Y(value) Z(value) E(value);
M500;
The main downside to this method is that your eeprom has a finite amount of times it can be written
to..... but I think it's something like hundreds of thousands of times (or millions with good
programming)... so it shouldn't be a real issue.
Oh, are you modifying the values with the LCD or are you connected to a computer over USB and
doing it how I've outlined in the tutorial?
Ive been confirming by setting the values, then (when the printer is connected via usb cable) the
lcd screen is on, so ive been able to go to menu, control, motion and there i can see the values for
the axis and using the commands m92 X...... Changes these values, though the problem seems to
be when trying to save. If i go to eeprom config and change the values on there, i can see in the
command line on the pc that the values have changed, then i will type command m500, then go to
check it by typing m501, which resets the values back. I have printed something after altering the
values by eeprom and the item i printed cameout the correct dimensions, though, once the printer
has been switched off the values reset, which results in the prints being incorrect size
Ok, ...... When you try and input the values in the manual control tab, are you doing it as 2 different
How to Accurately Calibrate Your 3D Printer: Page 13
entries? "M92 X80" .... enter .... "M500" ...enter .... wait for it to "echo:Settings Stored" then
""M501" ..... enter to confirm? ... maybe give it 5 seconds before entering any commands...
entering things too quickly can mess stuff up.
If that doesn't work, maybe download and try Cura (I have version 15.04.3... newer ones don't
support printing over USB)? Load a 3D file, click on the "print over USB" icon, then once it's
connected you can type your g-code (i.e. M92 values) on the bottom right of that window.
I have noticed that when I enter the g code for the axis, it does not say "echo: settings stored" no
matter how long I leave it. it doesn't seem to notice any commands apart from M501
I i may be guilty of not waiting long enogh, i shall try that solution tomorrow :-) i normally use cura
to print out, but was going to say, im not bothered if i dont print via usb as i normally print via sd
card anyway
Oh, and yes, i have been entering the the commands for each axis one at a time
New update, after typing the g- code commands in, I checked on the printers lcd, the changes had
been made to the axis, though after turning off printer, or even typing M501, the printer resets to
original
Oh and sorry, when I click save in the config>firmware eeprom configuration, it appears to have
saved but the next time the printer is started the values are reset to their original form.
Hi there, great work with the help you've given, unfortunately, like most people, I still have a
problem, I set the new values for X and Y, however, once the printer has been shut down, it forgets
the values ive entre resorting back to the ones that I first changed. Any help on this would be great,
thanks again for your help,
Adam
After sending M92 with whatever value you would like to change, send a M500 and it will store
your new values. Send another M501 to verify.
I adjusted the M92 value for the X axis to get the travel distance accurate at 70mm. But when I tell
it to move 10mm, it moves 12mm. It's still accurate when I move it 70. Do you see this behavior as
well?
That sounds strange. What printer are you using? Are you always moving 10mm from the same
spot? or are you trying to move it 10mm at a time from multiple coordinates. Does it sound like
anything is grinding or interfering with the X-axis as it moves? Does it move smoothly or kind of
chug along? Maybe you need to adjust the acceleration/speed of the stepper motor controlling your
x-axis? Or maybe you need to adjust the potentiometer on the x-axis motor controller?
//www.youtube.com/embed/gvynOpbJaUc
I have tried:
Tightened the belt,
Change the a4988 driver with a new one,
Calibrate the a4988 voltage and amperage,
Change the steps/mm several times,
Change the board from gt2560 to ramps1.4+mega,
Switch the X and Y wires but still the problem with my Y axis only still here.
Thanks for the help.
I can't really tell what is happening in the video. are you trying to home your printer and it's
counting up? or is it skipping when trying to move? what kind of printer do you have? is your printer
moving to the end stop and then banging into itself without stopping, or is it going in the opposite
direction when homing?
your screen also says that your y min endstop is turned off. can you turn it on with gcode? if that's
the case, then you should be able to find the code to turn it on here. http://reprap.org/wiki/G-
code#M120:_Enable_endstop_detection
Hi, thanks for the quick response. The printer is a custom made, I'm using repetier firmware to run
the printer. I have no problem with endstop or wrong direction of motor but only the incrementation.
If I move the Y axis 1mm at a time, it should be exactly 1mm consistently but instead i get a
0.99mm movement and not exactly 1mm.
Oh, I see what you're talking about now. That's pretty weird. When you look at your computer, does
that 0.01mm difference happen in the Repetier software, or just on that LCD screen? If you move
the printer 0.1mm at a time, will the 0.01mm difference happen over the same distance or will it
happen when you press it every 2-5 times like when you move it 10mm. It might just be your
screen reporting back an improper value.
To test, I would move the Y-axis by 1mm at a time (or 0.1mm if you're really patient) until you get to
20mm (or 100 if you can), then measure how far it actually went. Then do it again 2 more times. If
all 3 values are very close then it's probably just your screen reporting back a messed up value.
Maybe this is common with Repetier? I've never used an LCD screen with my printer so I wouldn't
know. If it is just the LCD, then you should be able calibrate it like you normally would.
Stepper motors don't have any way of reporting back how far they've actually moved (if you hold
the motor firmly so it can't spin, then send a command to spin it, your screen and Repetier will
assume that it spun). If it were me, and it was just a faulty reading on the LCD, I'd be annoyed, but
probably wouldn't do anything about it.
maybe try cura instead of repetier. also, have tried printing anything? you might not notice in the
end result...
With all honesty I have done a lot of try and error including what you have said here and the result
is the same. I've used the repetier host with my Mac and to my laptop that runs ubuntu but same
result.
When I type in M501 in Repetier, it states it's loaded all defaults, which resets all the calibration
changes back to default.
If I type M503 after entering them into the G-Code, it does show the change has been made.
Geeetech i3 Pro B
Hi,
I tried just moving one of the axis after changing everything. (Minus M500 to save) and my printer
freaked out. I had to hit emergency stop to shut it down. Which freaked me out... =-O!
The stepper motor was screaming like it was running at high speed.
Once I rebooted, it was fine again. I did try one more time and it did the same thing.
I don't want to ruin my printer or burn out a motor before I even get going. I'm sure you understand.
The changes took in Repetier, but apparently, not the firmware. Which I take it there was a conflict
between the firmware and Repetier settings which caused it to freak out.
Once you change an M92 value, you need to save it with M500 before you check it with M501. I'm
not sure I understand what you mean by "the changes took in Repetier, but ... not the firmware." ...
When you calibrate your printer, I believe it writes that data onto the 3D printers microcontroller....
I've been able to jump from one software to another without re-calibrating it. I think it's just slicing
profiles that aren't written to your machine (not 100% sure about that though).
You could troubleshoot by taking a note of your X-axis M92 value (or any others). Then change it
to something really small, like 10% of its recommended factory setting. For example, if your printer
recommends starting with an M92 for X of 100, try 10. Try moving your X axis by 10, it should only