Saturday, July 22, 2017

UMMD Belt Lifted Z Axis Design, part 3

Updates:  I have made some changes to the original design, detailed below.  The changes include changing the drive pulleys, redesigning the belt clamps, redesigning the leveling screw blocks, and remounting the bed heater and TCO.  Updated information can be found here.

UMMD's Belt Lifted Z-Axis

I decided that two equal length belts would be better than the single long belt.  The two belts will stretch equally, keeping the bed level under load.

Complete Z axis rev 3 design.

I put a longer shaft on the worm drive, added pillow block bearings and two 36 tooth drive pulleys to both ends of the drive shaft, finalized designs for the belt clamps and the Z=0 and Z max limit switches, and ran more tests.

Close-up CAD rendering of the bottom of the Z axis.  The switch on the left is the Z max limit switch that gets bumped by the belt clamp on the left side of the bed support.  Orange parts are printed in ABS.  This is not the final belt clamp design on the left side- a ramp was added to bump the roller on the Z max switch.

Belt Clamps

Update:  the stuff immediately below shows the original belt clamp design I used.  It worked for about a year and then it started having problems.  Don't use this design!  This post has details of the failure and the new design that should work without failure.

I experimented with different belt clamp designs as I developed the three different versions of the Z axis.  In the end it came down to a choice between two designs.

The first design used printed teeth to engage the belt's teeth.

The second design used a short segment of belt to engage the belt's teeth.
I tried pulling on the belts when they were inserted into the clamps and found that the first design tried to flex open much more than the second design, so I went with the second design, printed in ABS to withstand warm temperatures inside the printer.  Both clamps have metal plates preventing the belts from migrating out of their slots.

Z max Switch

I used an industrial surplus snap action switch that I found in a box at the makerspace and printed a mount using ABS.  It attaches to the frame using a single t-nut and can be moved up or down by sliding it into position in the slot in the frame.  It is positioned to stop the Z motor when the bed gets within about 1 mm of the bottom of the Z axis.

UMMD Zmax limit switch operation from Mark Rehorst on Vimeo.

Z=0 switch

Update: I have changed the Z=0 switch design to one that uses a differential screw and switched to an optical endstop sensor. See:
Now back to the original post....

The Z=0 switch determines how high the nozzle will be above the bed for that critical first layer.  There are two common methods for adjusting the Z=0 position.  First, oldest, and most common is a simple screw that bumps a switch telling the controller that the bed is at the Z=0 position.  More recently, the proliferation of poorly designed and built printers has been enabled by autoleveling that attempts to compensate for unflat, unlevel beds and automatically sets the Z=0 position.  Yuck!

The problem with the screw adjustment is that when you need to adjust the Z=0 position, the threads of the screws commonly used are much too coarse.  You might need to adjust the bed position by 50 um but the bed will move by 700-800 um per revolution of the screw.  That means small adjustments have to be made using tiny, fractional rotations that are hard to judge, usually resulting in overshoot.

That problem was fixed with a screw mount using a lever and cam that travels with the bed and bumps the switch mounted on the printer's frame.  The lever and cam provide about an 8:1 reduction in the motion of the screw, making a 50 um adjustment requires a 1/2 turn of the screw.  It is easy to make fine adjustments without overshooting your target.  The lever/cam turn on a bearing removed from a hard disk drive resulting in very high precision.

Z=0 switch action.  The screw pushes the lever, the cam bumps the switch, providing about 8:1 reduction in screw pitch.  The small square block is a magnet that keeps the lever in contact with the end of the screw.    The metal bracket screws to the right side Z axis belt clamp.
Here's what it looks like, all blue parts are printed ABS.

Fine Adjusting Z=0 Switch for 3D Printer from Mark Rehorst on Vimeo.

Top End of the Z Axis

Update: much of this has changed since I built the machine. See:
Now back to the original post...

The pulley plates at the top of the Z axis were reused from the rev 2 design.  Two 5/6-18 carriage bolts hold each of the 1/4" aluminum plates just above the ends of the linear guides.  The pulleys,  pairs of stacked F608zz bearings, are screwed to the plates using shoulder screws and a couple nylon washers as spacers.  The bed support shelves are cut from 1/4" thick aluminum L stock and are screwed directly to the bearing blocks on the linear guides.  I originally tried 1/8" thick L stock but found it too flexible- when I had to apply some force to remove prints, the bed moved more than I liked (it would probably be OK when printing, the movement just bothered me).  The left side belt clamp is sandwiched between an aluminum plate (barely visible in the photo) and the bed support shelf.  The aluminum plate covers the belt slot in the clamp and prevents the belt from exiting the clamp.

Top of the Z axis on the left side.  The bed support shelf is cut from 1/4" thick aluminum angle stock.  The belt clamp is printed ABS.  The pulley is two stacked F608zz bearings mounted on a 1/4" thick aluminum plate using a shoulder screw.  the belt clamp has a ramp that bumps the roller on the Z max switch at the bottom of the Z axis.

The right side is almost the mirror image of the left side, except that the belt clamp is sandwiched between the Z=0 switch bracket and the bed support shelf.  You can see that assembly better in the video, above than in the photo, below.

Top of the Z axis on the right side.  The Z=0 adjuster screw mounts on a piece of angle stock that holds the belt clamp on the bed support shelf.

Belt Stretch

A lot of people won't use belts to lift the Z axis because they worry about the effect of belt stretch on the print quality and accuracy.  I was a little concerned, too, until I did some tests and calculations.

Z axis rev 3, bed loaded with 4 kg to measure belt stretch.
When I tested the Z axis rev 2 under load, the belt stretched 128 um/kg of load.  Rev 3, with shorter, equal length belts stretches about 42 um/kg, a 3X improvement.

But what about that 42 um stretch?  If you're printing in 250 um layers, that's 16% of a layer thickness.  That's got to have some effect on the print quality, doesn't it?

Nope.  None at all.  That stretch doesn't get applied per layer, it is applied per kg of print mass.

So the absolute worst case stretch in any one print layer will be 1.18 um (how often do you cover the entire bed surface with plastic?).  That error is so small it will be masked by other, much greater errors such as the variation in filament diameter, frame and guide rail flex, and other imperfections in the printer mechanism.  Assuming everything else is perfect, that single layer will start out 250 um thick and will end 251.18 um thick.  As the print mass grows the errors will accumulate and a 1 kg print will theoretically be 42 um taller than the design size.  If you need to worry about an extra 42 um of height in a 1 kg print, you shouldn't be using a 3D printer to make whatever it is you're making!

TLDR: belt stretch in this belt lifted Z axis doesn't matter, and it's hard to imagine a design where it would.

Final note:  the drive pulleys and pulleys at the top of the Z axis are carefully positioned so that the belts run parallel to the Z axis guide rails.


I never priced out a double or triple lead screw version of the Z axis, but here are the prices I paid for the parts to make this one.

ebay (prices include shipping):

F608zz bearings - 10 for $7 (4 used)
8 mm shoulder screws - 10 for $15.02 (2 used)
30" THK linear guides with bearing blocks- 2 for $110
Rino worm drive with motor - $ 116.15 (1 used)
600 mm long keyed shaft for Rino - $31.60
pillow block bearings for Rino shaft- 2 for $12 (2 used)
36 tooth HTD-3M drive pulleys, 2 @ $15.77 each (2 used)
HTD-3M steel core belt $23 (for 5m, ~3.5 m used)

locally obtained stuff:

Misc. bits of 1/4" tooling plate @ $2/lb, maybe 2-3 lbs used.
5/16-18 carriage bolts/nuts $1 per lb
3"x3"x 1/4" aluminum L stock x 7" long - makerspace.
40x40 mm t-slot @ $1 per lb, probably 8-10 lbs used for Z, total
locktite $4
8mm nylon washers - 4 used, my junk box
misc screws, washers, etc.


  1. It looks like you are using belts with a steel core, as that is usually what the white ones use. You will need to be careful not to use too small a bend radius with these, as if you do the steel core wires will break. Alas I can't find a reference just now as to what a suitable radius would be.

  2. Yes, steel core PU belts. The upper pulley diameter is only slightly smaller than the drive pulley diameter so I'm not too concerned about it. If it becomes a problem I'll switch to larger pulleys.

  3. Hi!
    Is it possible for you to put the link for the 600mm keyed shaft for Rino? Thanks!

  4. Mark, I think you told me at the faire but what did you do to stop your z-axis from dropping when power is dropped to motors?

    1. The worm gear drive I used is irreversible with the loads it will encounter in this machine. Nothing else is needed.

  5. Hi Mark,

    good day to you. Many thanks in publishing your Z-Axsis movement solution. I am currently looking forward to build a D-Bot style 3d printer (y=500,x=600 Z=500). Also I am planning to slightly change your setup due to the size of the print bed and the style of the printer. Therefore I am planning to use two geared and synced nema 17 motors (200 steps/res), using a gear reduce box of 14:0. I selected four 2mm pitch GT2 PU/steel core belts (two belts, driven by one motor per side). Based on your suggestion to use steel core belts to reduce the stretch (thanks for sharing) thats also my plan. As per my assumption two nema17 (200 steps/res) including 14:1 ratio gear box, in combination with the 2mm pitched belt and 40 teeth pulley should also provide enough torque to drive my system solid. What do you think about my planned configuration?
    Happy to hear from you as you already practically using these kind of setup. btw: using a gear box is also drastically improving the resolution available (without to increase micro stepping/less torque). I really like your setup and I would kindly appreciate your feedback, as I am shorty planning to order all the stuff to start building :-) Many thanks.

    1. Sorry for the late reply, but any time you use two motors to drive an axis you have to worry about the motors getting out of sync when power is cycled. You'll need some sort of strategy to resync them when you power up the machine, otherwise you'll be releveling the bed over and over.

      The Prusa i3 printer drives the X axis to the top of the Z axis until the motors slip which forces the X axis into a (hopefully) orthogonal relationship with the Z axis.

      You could probably do something similar by running the bed to the bottom of the Z axis and set hard stops that are aligned so that the plane of the bed will be square with the Z axis.

  6. Hey Mark, i was looking for a Rhino wormgear but could not find one. all the others had only a very short and thick shaft. Is you Shaft a selfmade one?

    1. The unit I bought had no shaft- just a keyed, 8 mm hole. I ordered a custom shaft from someone on ebay who was selling shorter shafts to fit the Rinos.

    2. Hi Mark. Many thanks for sharing your excellent design, I have shamelessly copied it for my own impending build. However, I am struggling (in the UK) to source a keyed shaft to fit either the 6mm or 8mm versions of the ondrive rhino. Could you let me know where you sourced yours? I have been through 46 pages on Ebay (200 items per page!) and couldn't find anything that would work, nor could I find anyone making bespoke shafts.

    3. Check industrial suppliers. In the US, McMaster-Carr sells keyed shafts in many sizes. They are commonly used in machinery. A local machine shop or hobbyist might be able to cut a slot in a plain 8mm shaft for you.

    4. Hello again, I used Lockdown to full effect refining my printer design and sourcing parts, and have joined my local makerspace (as you suggest in many of your posts) to make my printer, including making my own 6mm keyed shaft. I could only source an 8mm keyed shaft of the necessary length off tinterweb, and with postage it would have cost over £100, so bought a 1m silver steel plain shaft and will mill my own keyway in it. I would advise this approach to anyone struggling to source the shaft (a few other comments are about that so thought I'd mention it) particularly anyone in the uk, some stuff can be hard to find for a good price (or even at all) post-brexit.

  7. Your print bed and other blogs are great, I learned a lot, thanks. For the fixing of the heatbed, you could use magnets instead of springs also. Not neodym, they demagnetize at 80°C, but ferrit based. Sunk into the plate.

  8. Hey Mark

    Thank you for the blog and all the updates they are really helpful. I am currently looking at building a printer 400x400x600 which is heavily based on your design.

    I will keep all the mechanisms and belts and driving the same however will the 400x400 bed make any issues? Can I just widen everything by 100mm and it will work the same? Should I consider anything else? The back of the bed (the unsupported part behind the T shaped T-slot) will that be too far away from the supports and topple?

    In regards to the build and the size of the machine is there anything else I should be aware off while designing it or any hints or advice?

    Look forward to your response and please keep doing what you do.

    1. Thanks- I have a lot of fun doing this stuff.

      I think a 400x400 bed will be OK just expanding the design of the bed support. I have redesigned the bed support screw blocks- check the post on updates to the Z axis design ( I also ran into a problem with my original Z axis belt clamp design- there's a post on that, too ( Be sure to read this post, too:

      I find that the machine tends to shake fore-aft when it running, due to the mass of the X axis being thrown back and forth. I think it would be a good idea to add a plywood, PC, or sheet metal skin to the sides of the frame to stiffen it up. The dual layer PC material I used for enclosure looks great and provides thermal insulation, but does nothing for the rigidity of the frame.

    2. Thank you for responding! Shall check them all out, thank you for that, save me making those errors.

      I was trying to avoid putting solid material as a skin as i would want to see into it. Ill have to add some more bracing, weight or support beams of some kind to stabilize it better, thanks for the heads up. Guess it is pretty tall and that affect would occur.

      I asked in your other blog a question about the bed, but i shouldn't keep breaking the chats up, sorry for that so you can ignore that one and we can keep it all here if its easier. With the bed I am struggling so hard to find tooling plate (cast aluminium) for my bed in Australia, no where does it. Do the tabs on the bed (ears) have to be there, as in do they assist the 3 point level system foundations? am i able to just get a plate that is 430X430 and drill into the edge of the plate and screw it that way? would that be the same concept and work the same?

      Also in regards to parts, where did you get the 36 teethed pulleys and belts from as I can not seem to find the correct one (again Australia sucks for this stuff)

    3. I think that even a skin made of acrylic or polycarbonate would dramatically increase the frame rigidity, if it is securely screwed to the frame (not like my dual layer PC panels).

      Yes, a larger plate without ears would be fine, but you may have some temperature drop near the unheated edges of the plate.

      I probably got them via Aliexpress, but I have since changed to 60 tooth pulleys, also sourced via ebay or Aliexpress, to get a nice, round 50 full steps per mm.

  9. I would be using Acrylic and screw that into t-nuts into the t-slot. If the bed was larger though and used a 400x400 heat mat and only used the 400x400 center of the plate that would be fine yeah? the edges can be whatever temp, i wont use them.

    I did read that after posting, thank you for clarifying. I will be doing the same and hopefully they will be easier to find with the GT2 belt.

    Thank you for the responses too

    1. Acrylic tends to crack when you apply a lot of mechanical force, such as under screw heads. I think you'd be better off using polycarbonate sheet instead. It's much tougher than acrylic and doesn't crack the same way.

  10. Not sure i am getting the front screw principle.
    On the front side the cast plate only pushes on the thread of the screw?

    What is the reason you didn't use the same 3 roundhead screws?

    Also i suppose the use of the ptfe is to prevent heat spreading to the alu profiles?

    1. At the pitch screw, the bed expands in the X direction so the slot is parallel to the X axis. As the bed expands, it slides on the pitch screw in the slot. At the roll screw the bed expands in X and Y, so the plate just rests on the end of the screw so that it can slide in both directions.

      I didn't use a ball head screw for the roll adjusted because they have to be adjusted from the top side of the plate and that would have required that I drill a hole in the plate which would have interfered with the bed sliding on the screw as it expands.

      The PTFE is a thermal insulator that minimizes heat transfer from the bed plate to the bed support, it doesn't melt at bed operating temperatures, and it grips the leveling screws tightly, yet allows them to turn easily for adjustment.


  11. I have purchased some used linear rails THK/NSK. The THK are HSR15 and run fine in horizontal position without any play.
    But they behave worse putting them into vertical for a simulated z-axis movement. The bearing blocks move fine for a few mm but then get somehow stuck. Once more force is applied the keep on going fine. Cleaning and applying grease helped a bit, but still I am not happy with it. Could this mean that a certain preload has to be applied? Did you experience anything similar with your THKs for the z-axis?
    Another question is for the keyed shaft to be used with the Rino. I am struggling to find any 8mm keyed shaft (in the middle) on Ebay or any other source and now I am just before making one out of 8mm steel shaft used for a linear bearing. What is the material (stainless or hardened steel) of your shaft?

    1. The linear guide should move smoothly in any position. I have found that linear guides usually run smoothest with some load applied.

      The 8mm shaft for linear motion should be fine, but beware of hardened rods for use with ball bearings. It may be difficult to cut for a key. You could just buy the keyed shaft ready made:
      You'll need the key and a couple rings to keep it in place:

  12. Mark, I have been reading a lot on this blog about the UMMD. Including your hackaday where you tried to design a less expensive worm gearbox. My question, is would this product basically do what your rino gearbox does?

    They have 17:1, 32:1, or 49:1 reduction options available mated to a nema17. Thanks for your time, and if you get back to me.

    1. Someone at the Milwaukee Makerspace built a printer using one of those to lift the Z axis with belts and it produces prints that are as good as any I have ever seen. I don't know which gear ratio he used, but it works well.

  13. Hi Mark

    A nice idea, I recently did a triple z axis system using belts (before stumbling on your work via a link on face-book) I opted to go for an off the shelf belt tensioner originally intended for a Delta Printer from robotdigg, this allowed me to position the belts centrally in line with the linear rail and have a pulley at the top of the axis and a motor at the bottom, when combined with a Duet board and an IR probe close to the nozzle the layout becomes much much simpler and requires much less parts, an independent system also allows true X/Y auto "leveling"

    1. But how do you handle the bed dropping on power-off? If I were going to use 3 belts to do the lift, I'd probably connect all of them to the output shaft of the worm drive and there would be no need for autoleveling.

    2. Why do you think you must "handle" the Z axis lowering when the machine is powered off ? What is the first thing 99.9999% of 3d printer users do when they power up their machine? that's right they home the printer, so by its very nature the z axis lifts itself up again. The central belt path also removes the issues that will manifest themselves of having an offset load path and the pulley bolts being in single shear and with the delta robotdigg belt adjusters being both steel and aluminium there is no worries about plastic belt retainers, and with an IR sensor there is no complicated mechanisms to adjust

    3. If the motors drive the belts directly without some gear reduction, the bed will free-fall to the bottom of the printer when the Z motor power is lost- power off, reset controller, etc. Maybe your printer's bed assembly is light weight and the Z axis is relatively short so it doesn't matter, but in my printer, IRIC, the bed assembly weighs about 3.5kg, and the Z axis is almost 700 mm long. Before I had the worm drive in the machine I edited the config file and rebooted the controller with the bed in the print position. The bed slammed to the bottom of the printer like a sledgehammer. Printers with screw drive in the Z axis will sometimes stop the bed from dropping, or lower it gently. Belts don't work that way.

      If you don't prevent the bed from dropping, you can't resume prints after power loss (it probably doesn't matter much in most of the developed world where the power is pretty reliable, though storms can cause occasional loss of power). I have yet to need to resume a print after power loss, so it's a minor "feature".

      In any printer where you use multiple motors to drive the Z axis you have to use some form of autoleveling because you used multiple motors. A single motor driving all screws/belts ensures that the bed doesn't tilt so you don't need autoleveling. If you're more concerned about turning out quality prints, reliably, instead of making viral youtube videos, a single motor is the way to go.

      I read a lot of forum posts on 3D printing. It looks to me like two of the biggest problems people have is configuring autoleveling and finding sensors that work reliably. Autoleveling is supposed to make printing more reliable by ensuring that the first layer sticks to the bed. People have swapped messing around with trying to level the bed manually for messing around with autoleveling.

      I'm not sure what "complicated mechanism" you're referring to, but leveling a bed on 3 screws, one time when you set up the machine, or adjusting a Z=0 screw hardly qualifies as "complicated". Remember, people were doing that before autoleveling/zeroing came along- they were just trying to do it on bad hardware which made it difficult to achieve a satisfactory result. In my printers, I make the hardware good so that it's easy to level and zero the bed.

      I have seen designs where people try to lift the bed from the side opposite the guide rails- that's asking for problems whether you use screws or belts to do the lifting. Keep the belt(s)/screw(s) close to the guide rail(s) and it will work fine, single shear (whatever that is) or not.

      Plastic belt clamps work fine if they are designed right- SoM's X axis clamp has been working for about 7 years. I put similar clamps into UMMD's Z axis about 2 years ago and they, too, have been working fine. All are printed with ABS.

  14. Mark, thank you for sharing your finding and design. I was originally a major skeptic on Z-axis belt drives. However seeing this has made me reconsider a design.

    Firstly, what belt width are you using? Have you tested various belt materials and widths of belts?
    Since the standard belt for 3D printers are 6mm GT2s, I wonder if 10-12mm belts would be able to handle more stretch without affecting stepper performance.

    Additionally I wonder why a counterweight isn't used. Unlike the X & Y axis being slowed down by extra mass, the Z-axis doesn't need to move as fast. Plus a counterweight would provide equal stretch on both sides of the loop. I would even say that you can use more mass on the counterweight to remove the need for a worm drive locking the bed.


    1. I used 9 mm wide belts, both steel and glass core. I switched to glass core after I had a problem with the belt clamp. I retested the belt stretch with glass core and found about 3x as much stretch as the steel core, but still inconsequential for printing. The clamp for steel core belt could be redesigned to work better than my original clamp, so steel core belts could be used if you're really worried about stretch.

      There have been some updates to the design- see:

      After considering many options for preventing the bed from dropping when Z motor power is lost, I specifically chose the worm gear reducer to avoid messy arrangements of counterweights. The worm gear box prevents the bed from moving when power is cut, so in theory I can resume printing easily without worrying about whether the bed has shifted in Z. The 30:1 reduction and the pulleys yields 20 um per full step resolution and a huge multiplication of torque/lifting power.

      If you just use a counterweight, you don't get the improved resolution. If you use a counterweight with a gear box you introduce the possibility of backlash. You can buy motors with brakes, but that costs as much as the motor/gearbox I bought and doesn't provide increased torque/resolution. You also need to play with the controller and gcode to get a signal to operate the brake.

      The motor/gearbox I used doesn't require any tweaks to the firmware, any mods to the controller board, or any additional gcode. Just set steps/mm and it's done. Since the motor/gearbox can provide far more torque than needed, you can run the NEMA-23 motor at low current and drive it directly with any controller board without any worries about burning up the driver chip.

  15. Hi Mark ,really enjoyed reading through, very interesting... Can I ask if you have noticed any backlash using the wormgear, and if so has it caused any issues. I have designed and built a poc triple-belt z using a wormgear and notice the backlash on change of direction.

    1. No backlash issues with the Rino but UMMD's bed carriage weighs about 3.5 kg and moves easily up and down without the belts attached. The Rino is factory adjusted for very tiny backlash, but it doesn't really matter in this application because gravity keeps the gears loaded at all times so there's really no possibility of backlash.

      If your printer's bed doesn't weigh much, and/or friction is high enough and/or Z axis guide rail alignment is off and the bed carriage won't fall freely without the belts attached, you could experience backlash with any gear or belt reducer (or lead screw). I'd check the Z axis rail alignment and make sure the mechanism can move very freely and smoothly. If the bed won't go down without the belts pulling it down, you will experience backlash.

      The same thing can happen with screw lifted Z axes. If gravity alone isn't enough to make the bed (or X axis) drop, the mechanism will have backlash. In a screw lifted Z axis you can use antibacklash nuts on the drive screws, but I think you're better off fixing the real problem - a sticky Z axis.


Leave comments or a questions here and I'll try to post a response as soon as I can.