Dolly Configuration


Greetings all!
I followed Tom’s Dolly build almost exactly. I upgraded to an actual aluminum frame, a real E3D V6 setup and T8*8 Leadscrews. Otherwise, I went with the BoM Aliexpress parts. As such, I’m not sure I have the configurations correct. I downloaded Tom’s Marlin build and adjusted the appropriate numbers for my Leadscrews. Also, my probe is set flush with the extruder, though I’ve concerns over it grabbing printed layers The issues I am running across are
[list=]it doesn’t seem to print close enough to the bed to form a good adhesion.[/list]
[list=]the prints will start in the center of the bed and then shift towards X0 with a bit of a grinding noise even though the X belts are tight.[/list]
[list=]I’m not really sure how to proceed[/list]

My main question is, would using the G29 bed leveling resolve my issues? Does Dolly save those settings for future use?



You need to configure your Z offset with M851 (that is, the distance between your probe trigger point and the nozzle).


You don’t want the probe to be quite flush with the end of the nozzle because there is a trigger distance, as slippy mentioned. And as you noted, there’s concern with the probe dragging on the part, especially if any stringing or blobbing causes it to be sitting slightly higher than the current Z level. Raise your probe slightly so it’s definitely not going to drag (but is still very close to the nozzle tip) then follow these instructions to calibrate your Z offset (the Z distance between where the Z probe triggers and the nozzle actually contacts the bed).

Re: G29, that’s for leveling an uneven bed, but you’ll find that basically all beds are uneven so it’s definitely worth using if you have a probe. The settings can be saved, but it’s worth just doing the G29 at the beginning of every print.

Your shifting toward X0 with grinding sounds like the X motor is skipping steps, likely due to receiving insufficient current. You should check the reference voltage on the driver to make sure the current is turned up high enough, and dial it up a bit until this problem is resolved. When getting to higher currents, check the temperature of the motor while it is running. It can get hot, but should not get too hot to touch for several seconds.


Thanks to you both!

I have had my Z Probe height set as much as 1mm above the nozzle but that didn’t seem to work either but I will try this again with the supplied instructions.

I will look into the current adjustment for the X axis. This was not something I had considered previously. I thought that it could be slack belts to I tightened them but this may be an easier solution. Is there a general ballpark current for this or just crank it up until it’s not too hot to touch?

Thanks again!


Your motors will have a rated current, which is a maximum really. If you google their model number you can probably find out what it is. If you can’t, then I’d assume them to be 0.85 A ish, and set that as your current.

There’s lots of guidance out there on the formula and technique for setting the Vref to set the desired current. A good article on


Alright, using math the ratings are 1.7A and 1.5Ohms. That equates to 2.55V.

I have tuned the X axis to .8V

I have adjusted the probe to .43mm above the nozzle(the highest I could put it and it still triggers with a piece of paper between the bed and the nozzle.

I’m going to run the G29 and then a test print.

Here’s to hoping!


Test print underway and it appears the left side of the bed is higher than the right because the probe triggers and the first few layers on the left side are barely present.

I thought this was supposed to auto level the bed. Did I miss something? Is there a particular line of code I need to check and fix?

Thanks all!


Okay, Thermal runaway stopped the print. Said the hotend but it never went above 215C.

G29 spits out these numbers.

Bilinear Leveling Grid:
0 1 2 3
0 -0.16 -0.56 -0.91 -1.32
1 -0.00 -0.39 -0.80 -1.19
2 +0.15 -0.21 -0.57 -0.93
3 +0.33 +0.03 -0.30 -0.60


That auto leveling shows that you have a pretty significant deviance in your bed heights from corner to corner, 1.68mm at the most extreme. This is mostly fine as the software should correct for it. To make sure it’s working properly, have a look at the Z motors when the printer is moving along X and Y, they should be slightly moving to compensate for Z as they travel. If they’re not doing anything you might need some more firmware setup.

Thermal runaway is protection designed to turn off the printer if it fails to maintain the target temperature. If the temperature goes down by X degrees over a period of Y seconds, this will shut off the printer. This is a safety feature in case your thermistors fail and the printer keeps “runaway” heating without the thermistors realizing it, which could be a fire hazard.

I’ve gotten this error most commonly when a poorly connected thermistor shorted out or was disconnected and reported a low temperature, but it’s also possible your PID isn’t well configured and the printer isn’t doing a good job of maintaining temperature. Here’s a page on tuning your PID to smooth out the rate at which your printer heats:

To make tuning work, you’ll need to uncomment the following in configuration.h for tuning the hotend and bed respectively:

#define PIDTEMP #define PIDTEMPBED

You can also adjust your thermal runaway settings, as well as your “heating failed” settings, which is similar but applies to the hotend and bed while they are heating up. The following lines in configuration_adv.h can be adjusted to come up with a runaway protection scheme that is better suited to the rate at which you are heating:

[code] * If you get false positives for “Thermal Runaway” increase THERMAL_PROTECTION_HYSTERESIS and/or THERMAL_PROTECTION_PERIOD
#define THERMAL_PROTECTION_HYSTERESIS 4 // Degrees Celsius


  • Whenever an M104 or M109 increases the target temperature the firmware will wait for the
  • WATCH_TEMP_PERIOD to expire, and if the temperature hasn’t increased by WATCH_TEMP_INCREASE
  • degrees, the machine is halted, requiring a hard reset. This test restarts with any M104/M109,
  • but only if the current temperature is far enough below the target for a reliable test.
  • If you get false positives for “Heating failed” increase WATCH_TEMP_PERIOD and/or decrease WATCH_TEMP_INCREASE
  • WATCH_TEMP_INCREASE should not be below 2.
    #define WATCH_TEMP_PERIOD 20 // Seconds
    #define WATCH_TEMP_INCREASE 2 // Degrees Celsius


  • Thermal Protection parameters for the bed are just as above for hotends.
    #define THERMAL_PROTECTION_BED_PERIOD 20 // Seconds
    #define THERMAL_PROTECTION_BED_HYSTERESIS 2 // Degrees Celsius


  • Whenever an M140 or M190 increases the target temperature the firmware will wait for the
  • WATCH_BED_TEMP_PERIOD to expire, and if the temperature hasn’t increased by WATCH_BED_TEMP_INCREASE
  • degrees, the machine is halted, requiring a hard reset. This test restarts with any M140/M190,
  • but only if the current temperature is far enough below the target for a reliable test.
  • If you get too many “Heating failed” errors, increase WATCH_BED_TEMP_PERIOD and/or decrease
    #define WATCH_BED_TEMP_PERIOD 150 // Seconds
    #define WATCH_BED_TEMP_INCREASE 2 // Degrees Celsius

Usually you can just adjust the protection period to a higher term, say 90 seconds or so. That’s still plenty of time to catch a runaway heater if there is some failure, but gives you enough time to prevent a false positive.


It doesn’t appear like the software is adjusting for it since when printing, one entire side of a print was practically non-existent due to the nozzle coming too close to the bed. In fact, it was close enough that the Z Probe was triggered but that didn’t seem to effect the level at all.

Thanks for the other info! I’ll dig into that too.


If your probe is too high above the nozzle, and the bed is that tilted, you could easily be pushing the bed with the nozzle before the probe triggers.

Get the probe closer to nozzle height, and level your bed out properly - the probe is to find a leveled bed and compensate for imperfections, not allow you to print on the side of a hill.


The probe is currently about .8mm above the nozzle and I have leveled the bed manually using a sheet of paper with the Z Axis at 0. Now, when running a print, the first layer touches the plate but there’s no “squish” to provide solid adhesion. Good news, the nozzle is not burying itself into the bed any longer.

I think I’m getting close now. How do I set the first layer offset to get it closer to the bed?

Just ran a print and the auto bed leveling is not working. It’s not adjusting on the fly at all.


If you’re using Slic3r, you can set the Z offset under printer settings/general. Those instructions I linked are the procedure, but basically set it to -0.2 if you want it to print 0.2mm closer to the bed, +0.1 if you want it to print 0.1mm higher, etc.

For the auto bed leveling, make sure you’re doing G28 before G29, if you do G28 after it will clear the leveling data. Here’s an example of my pre-print Gcode (also under printer settings in Slic3r) that heats the bed, homes all axes, auto levels, then heats the nozzle.

M115 U3.0.10 ; tell printer latest fw version M140 S[first_layer_bed_temperature] ; set bed temp M190 S[first_layer_bed_temperature] ; wait for bed temp G28 ; home all axes G29 ; auto bed leveling M104 S[first_layer_temperature] ; set extruder temp M109 S[first_layer_temperature] ; wait for extruder temp M83 ; extruder relative mode
Heating the bed before you home/level allows it to deform under heat however it’s going to, so you get the most accurate print-time bed shape. Heating the nozzle after prevents you from warming up your probe, which can affect its reading, as well as prevents dripping filament while it’s probing the auto leveling.

Also here’s my leveling section of marlin in case you want to compare, this is using bilinear leveling with a 4x4 grid. Probe position/edges will vary based on your bed.

//============================ Auto Bed Leveling ============================
// @section bedlevel


  • Select one form of Auto Bed Leveling below.
  • If you’re also using the Probe for Z Homing, it’s
  • highly recommended to enable Z_SAFE_HOMING also!
    • 3POINT
  • Probe 3 arbitrary points on the bed (that aren’t collinear)
  • You specify the XY coordinates of all 3 points.
  • The result is a single tilted plane. Best for a flat bed.
    • LINEAR
  • Probe several points in a grid.
  • You specify the rectangle and the density of sample points.
  • The result is a single tilted plane. Best for a flat bed.
  • Probe several points in a grid.
  • You specify the rectangle and the density of sample points.
  • The result is a mesh, best for large or uneven beds.


  • Enable detailed logging of G28, G29, M48, etc.
  • Turn on with the command ‘M111 S32’.
  • NOTE: Requires a lot of PROGMEM!


// Set the number of grid points per dimension.

// Set the boundaries for probing (where the probe can reach).

// The Z probe minimum outer margin (to validate G29 parameters).
#define MIN_PROBE_EDGE 10

// Probe along the Y axis, advancing X after each column
//#define PROBE_Y_FIRST


// Gradually reduce leveling correction until a set height is reached,
// at which point movement will be level to the machine's XY plane.
// The height can be set with M420 Z<height>

// Experimental Subdivision of the grid by Catmull-Rom method.
// Synthesizes intermediate points to produce a more detailed mesh.
  // Number of subdivisions between probe points



// 3 arbitrary points to probe.
// A simple cross-product is used to estimate the plane of the bed.
#define ABL_PROBE_PT_1_X 15
#define ABL_PROBE_PT_1_Y 180
#define ABL_PROBE_PT_2_X 15
#define ABL_PROBE_PT_2_Y 20
#define ABL_PROBE_PT_3_X 170
#define ABL_PROBE_PT_3_Y 20


You’ll also want to make sure the following settings, which define how far away the center of the probe is from your nozzle, are set correctly. I wouldn’t bother changing the Z offset here since the trigger point is more relevant than the actual distance, better to do that in the slicer imo:

#define X_PROBE_OFFSET_FROM_EXTRUDER 23 // X offset: -left +right [of the nozzle] #define Y_PROBE_OFFSET_FROM_EXTRUDER 6 // Y offset: -front +behind [the nozzle] #define Z_PROBE_OFFSET_FROM_EXTRUDER 0 // Z offset: -below +above [the nozzle]


Thanks for sharing the settings.

I wasn’t doing the G29 after G28. In fact, I would run the G29 and then start the print, which would then run the G28. I was going to throw that command into the G-Code start but wasn’t sure where to put it but now I know. Thank you for that.

I will implement all of your suggestions as soon as I get home(working 3rds suck some nights) and give it a go then.

Once again, thank you all for all the info and support/help. This has been truly educational.


Personally I don’t think that the slicer is the place to compensate for Z offset. Those slicer settings are appropriate for when you decide you want your first layer to be lower or higher for a given material.

The right place for correcting your Z probe offset is the firmware. You can set and adjust the offset with M851 gcode and then store it in EEPROM with M500.

The proper way to consider the separation of responsibilities is this: if a slicer is configured for a certain printer (for example a prusa mk2s) then the gcode it produces should print nicely on every prusa mk2s without any fuss.

The things that are different about every mk2s (most obviously z offset) belong as configuration parameters on the printer, because they vary between otherwise identical printers.


Alright, then according to

The easiest way to get the value is to:

Home the Z axis.
Raise Z and deploy the probe.
Move Z down slowly until the probe triggers.
Take the current Z value and negate it. (5.2 => -5.2)
Set with M851 Z-5.2 and #define Z_PROBE_OFFSET_FROM_EXTRUDER -5.2.

What does it mean by deploy the probe? Right now my bed and printer are set to Home Offset X0 Y0 Z0. When my nozzle was at Z0, I leveled the bed with a sheet of paper. So, when I go to Z0, the probe triggers and the nozzle should be appropriately calibrated.

Also, the Z Probe Offset From Extruder is currently .8mm because in the item description it mentioned + is above and - is below. Should I reverse this?

Am I doing something wrong? lol.


Firstly, M851 overrides the Z_PROBE_OFFSET_FROM_EXTRUDER. You don’t need to reflash your firmware and change it, but you can if you want.

Fundamentally the probe you have triggers at a particular distance from the bed. If you adjust your bed screws, then the probe will still trigger at the same distance from the bed. Therefore, when using a probe as an endstop, the bed levelling screws are not used for setting your Z zero point, but only really for ensuring that the bed is in the same plane as your x/y axes.

So, the probe triggers at a certain distance from the bed (and that will vary from printer to printer (due to differences in probes, power supply voltage, bed thickness and material etc). The trigger point of the probe is very unlikely to be at the exact point that the nozzle touches the bed (which is what we want to call Z=0), so we need to find out, and specify, the difference in Z height between where the probe triggers and where the nozzle is.

There are a lot of ways of doing that, and, the method you quote is a good one. Ignore “deploy Z probe” - a lot of early reprap probes were attached to a servo arm and stowed when not in use. Your probe is permanent).

I think, seeing as by what you have written, you’re not far off from at the right value, you should just find the right figure experimentally. If you do an M503 your printer will tell you what the current value for M851 is. If your first layer is too high at the moment, subtract a bit from that value and set a new one with M851 Z, and try your print again. Keep tweaking until it’s about right.

When you set a new Z offset with M851 you need to home (G28) afterwards.


No matter what I input, the first layer is consistently printing at .2mm above the bed. How do I correct that?

Figured out that in Slic3r my "First Layer Height was set to .2. I assumed this meant to make the first layer thicker than the others. So how do I make my z axis travel .2mm below 0? More specifically, how do I make the thing think the bed is .2mm higher?


Subtract 0.2 from your M851 figure. The M851 figure should be negative.


M851 is now set all the way to -12 and it’s still not printing correctly.