Calibrating the Printrbot Simple

printrbot calibration fails

As a barebones 3D printer the Printrbot Simple needs a little bit of software love before you can reliably print stuff. You’ve gotten your printer together, the X-Y fishing lines are tight, and it’s plugged in. You’re satistifed that despite your hamfisted build process, the bot won’t catch fire, and it’s time to get it calibrated so you can get started on your adventures in 3D printing.

First things first, download and install Repetier-Host. I’m using Version .56 on OSX, but the clicky points should be pretty much the same no matter what OS you’re on. If you’re a TL;DR type, skip to the starting gCode settings at the end of this post and proceed from there.

Repetier-Host desperately needs a name change. In the hierarchy of 3d printing software names, MakerWare is clearly the hep cat, followed by ReplicatorG. Pronterface sounds like a schoolyard insult, and Repetier-Host is the foreign exchange student who eats his own scabs.

Connect to the printer with the button on the top left of the screen. Assuming you get something cryptic in the log at the bottom like:

5:37:47 AM: FIRMWARE_NAME:Marlin V1; Sprinter/grbl mashup for gen6 FIRMWARE_URL: PROTOCOL_VERSION:1.0 MACHINE_TYPE:Mendel EXTRUDER_COUNT:1

You’re connected and ready to go. First, let’s calibrate the X-axis.

The plan here is to find the difference between how we’re telling the bot to move in software and how it’s actually moving in hardware. Variance in motors, line tension, humidity, gear slippage, localized tachyon concentrations, sunspots, Lindsay Lohan, all these things contribute to unpredictability in the Simple’s motion.

Once we find the difference we’ll write a little bit of simple gCode to correct for it.

The first thing you’ll do is set a default value for the X-axis steps per mm. I’ve been using 114.20, but any number in that neighborhood will work for this step. You’ll likely change this value later, so don’t worry too much about it.

Go to the Print panel and enter the following gCode in the G-Code field (inside the Print Panel tab) and then click Send:

M92 X114.20

Not much will appear to happen, but Repetier-Host has silently told your Printrboard to set the steps per mm of the X-axis motor to 114.20. We’re off and running with the calibration process.

Now move the print head all the way to the left. I do this by disconnecting the power supply to disengage the motors and physically sliding the print bed to the right, as if it were an old-style typewriter carriage.

warningWARNING: It looks like physically moving the X-stepper this way generates a current, which you’ll see lights up the status LED on the Printrboard. I’ve done this dozens of times with no apparent damage to the bot, so I’m assuming there’s a diode in there somewhere protecting it. Manhandle your bot at your own risk.

Once you have the X-axis homed, move the Z-axis up just enough that you can slide a ruler under the print head. I’ve covered my print bed in painters’ tape to help prints adhere, which also makes a handy writing surface. Record the start position of the print head with a mark on the tape.

marking the first line

Remove the ruler and click the X +10 button 5 times, for a sofwtare move of 50mm. Record the position of the head again and measure the distance between the two points, in millimeters. Mine was 46mm in this case, but yours may be different. In the unlikely event that your hardware move already matches your software move, congratulations! You’re done with X and can skip on to calibrating your Y-axis.

If your print bed doesn’t move or moves haltingly, there’s a good chance that you don’t have enough tension in the X line. Tighten it up and try again. The first few times I adjusted the line I was being way too gentle and got unpredicatble movement in the print bed, especially before the motor took up the slack on one end. Really pull hard on the line, like you’re trying to land a walleye.

A note to our international readers: a walleye is a type of North American antelope traditionally hunted with tethered harpoons.

We need a little bit of math to figure out our steps per mm. The Magic Formula is:

(old steps value * software move) / hardware move = new steps value

So plugging in our values we get:

(114.20 * 50) / 46 = new steps value

Which evaluates to 124.13 for my bot. Put your value into the gCode field like this:

M92 X124.13

And hit Send again. Test your X calibration by moving the print head back to the left with the X -10 button and recording the position. Repeat as needed until you’re satisfied that the print head is moving precisely enough for your needs. I’m OK with a little slop in my calibration because I’m trying to have fun with this machine and not get obsessive about print quality. It’s not like I’m printing jet engine parts here.

Repeat this process with the Y-axis, except swap the X for a Y in your gCode. I calculated a Y-value of 114.58 this time.

M92 Y114.58

The process is very similar with the Z-axis. Measure the distance from the top of the leadscrew to the extruder head, Z-move the extruder in software, and measure again. I’ve got one end of the ruler resting right on the plywood, sandwiched between the leadscrew and the head of a hex nut.

UPDATE 6/3/13: Read Bill Owens’ comments below on Z-axis calibration.

measuring the leadscrew

Plug your measurements into the Magic Formula and calculate. Calculate like the WIND!

After you’ve got the motion motors moving the way you think they should be, the next thing to do is calibrate the extruder motor. You need to make sure that the motor’s feeding enough filament to the hot end, but not so much that you spaghettify your print bed during a print.

The process is pretty straightforward: wrap a piece of tape around the filament, 10 centimeters up from the extruder.


Set the extruder temperature to 220°. Repetier-Host won’t let you extrude with a cold hot end, so while you’re waiting set the extrude distance to 10mm. It shouldn’t take more than two or three minutes to go from room temperature to 220°.

If your hot end gets up to around 80° and stalls, check to make sure the power supply is plugged in. USB power will get you to 80° without the power supply, which can be deceptive.

After the extrusion is done, measure the distance to the tape again, and use the Magic Formula one more time.

Once you think you’ve all four motors calibrated, it’s time for a test print. You’ll want something simple and small, so that you can iterate quickly through test prints and really home in on the correct settings for your printer.

I’ve been using a 2x2x0.5cm test lozenge, which you can download right here if you’re not into 3d modelling yourself. The lozenge is nothing fancy, no bevels or geegaws. I keep the gCode for it handy so that I can quickly calibrate after a mishap or hardware adjustment. Do not suck the lozenge.

I’ll be exploring Slic3r and test printing in a subsequent post. For now just accept the defaults, hit Slice with Slic3r, and cross your fingers.

Before I print, I put my calibration setting into the Start gCode dropdown. If you’ve never done this before the dropdown can be a little hard to find:

start gCode

Here are the values that have been working well for me lately. They’ll be decent default settings for a Simple, but more than likely you’ll be tweaking them for your own bot. Note that these are a little different from the values I calculated above– there’s been some adjustments done to my bot since I originally started measuring things.

M92 X112.20 ; calibrate X
M92 Y112.58 ; caibrate Y
M92 Z2387.0719 ; calibrate Z
M92 E450 ; calibrate E

Assuming your print bed is mostly level you should have a printed lozenge in short order. Check the dimensions with a pair of calipers and adjust the print settings repeatedly until your OCD is satisfied.

Once you’re reliably printing lozenges, head on over to The Forge and grab a more complicated model to try out.

Also! Pledge fealty to The Horde to receive the latest Zheng3 models along with assorted other useful giblets like this calibration guide.

printrbot calibration fails

24 thoughts on “Calibrating the Printrbot Simple

  1. Bill Owens

    A thorough and useful guide, but I’m not so sure about the guidance on the Z axis calibration. Everything I’ve seen says that you should simply calculate the number of steps per mm based on the thread pitch of the all-thread rod, and that number for 18 TPI is 2267.72. There’s a strong argument for moving to metric all-thread in order to get an integer number of microsteps per mm; M6 is the winner there IMO, since it works out to 3200.

      1. Levi

        When I go to print the Lozenge my machine just lifts the extruder up until it runs off the the threaded axis. Any ideas?

          1. zheng3 Post author

            Is it possible that you’ve got the Z-axis motor connected to the X or Y axis pins? Are you getting X or Y motion?

            You might try using the manual controls in Repetier-Host so that you can move the print head without actually running a print; it’ll help you to isolate problems and reduce the risk of damage to your bot.

          2. Levi

            The bot works on manual control except the home switches really don’t do anything. I also have tried setting the home for the extruder but it seems to never work because i hit the home button and it slides the platform or extruder to the max point and still try’s to go so it will continue to click and fight until I unplug the power. Other then that the printer works except when i try printing anything.

          3. zheng3 Post author

            Perhaps the bot is taking too many steps per mm? Have you tried setting those numbers ridiculously low to see what happens?

          4. Levi

            I havent. I found a forum and borrowed his settings and got it to print but sometimes it acts confused as to where the product is it will just print upside down U’s until it runs out of print area. but i will give that a shot. thank you.

    1. turnockopinion

      For Printrbot Simple V2, I have a 1/4 inch Acme threaded rod for the Z-axis. The setting should be M92 Z2020.0. This was confirmed today by me on my Simple and reported on the Printrbottalk forum.

  2. practiceproperbreathing

    10/16/2013 received my Printrbot Simple kit. Assembly complete.
    Calibration done first attempt at printing did not work. But at least I was able to get plastic out of hot end and get the motors to follow a .STL file that was converted to gcode that drove the motors…..just not good enough calibration. Bed not level mostly, and plastic not sticking to bed.

    Anyway, redoing the calibration. This tutorial is great.
    I have a Z2020 as default initial setting. But how do I figure out what the Turns per inch (TPI) are on my rod. Looks like it is about 10 TPI, definitely not 18. I will try measuring. Any suggestions?

  3. practiceproperbreathing

    OK, I am still a newbie learning.
    I was opening a geode file I had created in Pronterface from an STL file I had downloaded from thingiverse. But I did not look close enough at the settings. my nozzle is 0.4, they had 0.5, my temp with PLA is 185, the gcode set temp at 200, so I am learning how to reset, redo, relevel, clean bed, and start all over again tomorrow afternoon maybe.

    1. practiceproperbreathing

      OK, I printed lozenge.stl and got a perfect dimensional poor quality print.
      stringy, sometimes no PLA coming out of the hot end when there should be. Outside walls are just strings of plastic with gaps.
      Not sure what to do. Check all the calibrations. Set parameters in Gcode just like you wrote about. set temp higher at 200 C instead of 185, that seemed to help. OK. My email is
      any help would be appreciated.

      1. zheng3 Post author

        I’ve printed some PLAs as high as 220°, give that a shot.

        The worst that can happen is you’ll liquefy the plastic, in which case you should back off by 10° or so.

  4. Tom Burtonwood

    Jim – w00t! thanks for this – i used it to calibrate my printrbot plus – so far so good, it’s printing bigger than it has ever done before – very exciting, now to see if it will push past the 200mm mark.

  5. Grumpygramps

    Nice work!
    I bought a Prinrbot Simple kit a couple of weeks ago and finally figured out they ain’t kidding when they say it needs calibrating!
    The version I have has a metal extruder and a metal table. I checked the pitch of the acme threaded rod on the Z-axis, and mine is 16 tpi (not 18 as mentioned above – maybe they changed it?)
    The X and Y axes were only traveling 75% of the input values, and the extruder was pushing out about six times more PLA than required!

    These are the values I ended up with in the EEPROM;
    E 92.12
    X 84.48
    Y 84.48
    Z 2015.75

    As soon as I plugged them in, it printed a perfect 5mm test cube pyramid thingy! (Temperature 195.)

    I noticed somewhere on the web that it’s OK to adjust the E value and not worry much about X and Y, but I think they all need to be adjusted at the same time because the X and Y settings (and the Z) affect the amount of material that should be extruded. The firmware does not “know” the real distance traveled, so if the distance is “short”, the extruder will be pushing out too much material.

  6. snafu87

    Very nice write up, it helped me tremendously; Thank you.

    I have a quick question though, after running a M92 E96 command via repetier host if I run a M501 command to retrieve the stored values how come they do not match? I will admit adjusting the values seems to have an affect but it doesn’t reflect on the board.

    1. roland8727

      Sorry, didn’t hit reply and instead left a new comment. See below for command and reference to save the settings.

  7. roland8727

    @snafu87; I was seeing the same issue. M501 after entering the M92 command returned the printers defaults. To save the new values to the boards EEPROM, use M500. This will preserve the values across power down and back up.

    Check for full list of gcode commands


Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.