3D Printed Ball Screw Actuator

3D printed ball screw actuator focusing on minimal cost.

Public Chat
Similar projects worth following
Working on a new project requiring (12) ballscrew actuators prompted R&D'ing cost effective solution. This led to many months of developing a 3D printed ball screw with an encoder and hardware cost of ~33$.

Travel Configurations:






Designed around 0.125" (3.175mm) ball bearing

Screw Pitch Diameter: 12mm

Screw Pitch: 4.5mm

Actuation Speed: 23.1mm/s

Encoder: 62.66667P/mm

Gearmotor: No Load 560RPM, 0.5A (See attached observations)

Force: 105N @ 1.0A (assuming 75%e)

Force: 367N @ 2.4A (assuming 75%e)

I have not tested linear force simply because I don't have appropriate hardware to do so. At 1.5A, I am unable (or unwilling) to stop the actuator by hand in compression. Further testing will happen as I utilize the design.

Example of encoder/pid positioning:

Ball Screw:

Designing the ball screw was largely trial and error to dial in fit tolerances. Many tests were printed to refine the fit.

Belt Drive:

The option to buy T5 belts was considered but I decided to design T5 variants with a flex PLA which has worked out well past my expectations! Not only can I make hundreds of belts for the cost of one, my designs can be flexible with respect to pitch count and belt width to accommodate a wide range of applications.
3D Solutect FlexPLA has resulted with a very flexible yet mostly inelastic belt idea for transferring torque.


Starting with the motor, due to the high individual part cost, I purchased several different motors and gearmotors, with and without encoders to test torque/rpm capabilities. This determination was most important in determining the intermediate drive train and ball screw characteristics to achieve a 'decent' actuation speed. The goal of ~15-20mm/s was set.

Dozens of motors later (some bulk orders from china)

Gearmotor Load Test:

Gearmotor 003H21-ORB was finally chosen and most thoroughly tested. The testing apparatus was crude but yielded repeatable observations. Utilizing 3D printed components, I was not able to stop this gearmotor even only at 4-5amp at maximum applied load. Recording several high speed runs I was able to plot gram mass, current, and RPM which plotted uniformly and linearly. See attached datasheet for gearmotor. Unfortunately the eBay reseller has very little information on this motor but at 9$ it is a steal.

Purchased from ebay:

Mounted gearmotor to desk with 150mm torque arm and gram scale.

Gearmotor 003H21 ORB Observations

Controller Selection: DC Motor Driver

Testing several DC motor drivers I showed the TB6612FNG 2x1.2A DC motor driver module running both channels in parallel worked very well with the 003H21-ORB gearmotor. This DC drive gave fine motor control >1VDC when using a nominal 12VDC power supply.


Controller Selection: Encoder

Some gearmotors tested had built in encoders, which was nice, but the selected gearmotor did not. Reviewing different options; magnet incremental encoders were too costly and hall effects would be more difficult to implement. I chose a very cheap, hopefully not too cheap, non-dedenting rotating encoder. The plastic shaft in the metal housing is not idea for longevity so the design best supports the encoder gear to minimize any side loading.

Controller selection:

My original goal was to use (1)  Atmega168 to control (2) ball screw assemblies. The limiting factor will be the single microcontroller's ability to read both encoders utilizing one interrupt pin each. I still need to do position repeatability tests to confirm if this is possible. Buying enough for one board per actuator would solve this and at 1.29$ each, I did. I also have a stack of STM32s if needed. Since the DC motor driver is now one per, I was toying with the idea of integrating the controller and driver on the actuator frame itself to simplify connectivity, but that will be later.

For communication among on the child microcontrollers I was excited to implement...

Read more »

Adobe Portable Document Format - 106.62 kB - 07/26/2019 at 02:47


sheet - 13.21 kB - 07/26/2019 at 02:47


Adobe Portable Document Format - 101.72 kB - 07/26/2019 at 02:47


Adobe Portable Document Format - 101.26 kB - 07/26/2019 at 02:47


Adobe Portable Document Format - 100.42 kB - 07/26/2019 at 02:47


View all 50 files

  • 1
    Ball Screw

    Begin by dry fitting balls/nut with bearings. Fit should spin freely without bearing skidding. Assemble using lithum grease and use the retainer and belt pulley to retain the bearings setting the encoder gear towards the frame.

    Assemble Frame center onto the ball nut near the encoder gear.

    Place the front housing lose onto the ball screw for later assembly

    Use 1/4-20 or M6 threaded rod cut to length needed for travel configuration, min travel + 21.5mm. Use locking nut (even loctite) on the internal nut and fully assemble through pivot.

  • 2
    Main Frame w/Limit

    Assemble top frame with limit arm.

    Insert M3 nut hardware on frame sides before assembling top, sides, end, and bottom.

  • 3
    Join Frame and Ball Screw

    Insert screw retainer end into the limit assemble of the frame. Interlock the frame center into the frame assembly.

    Insert prewired encoder and encoder gear. Confirm that it meshes with the primary ball nut gear.

View all 4 instructions

Enjoy this project?



hayden wrote 08/02/2019 at 11:08 point

That was the exact same assumption i made a while back. as mentioned the main benefit i got from switching from steel to acetal was wear reduction. 0.2 mm is good!  if an application needed better tolerances someone could always just compensate for the backlash in software. Are you able to back drive the screw by hand?

Unsolicited Suggestion Section------(your welcome to ignore)-----

Acetal also works much better with rigid printed plactics, ie acrylic, pla, peek, pc, ect. If you need a really good fit for longer periods of time, lapping compound plus printing slightly smaller seems to work well for me. 

NOTE: these suggestions are based off anecdotal evidence, with radial, angular contact, and slew ball bearing ive printed in the past.

  Are you sure? yes | no

Jeff wrote 08/02/2019 at 11:30 point

The gearbox is very difficult to back drive, buy some and check them out. You'll be shocked by the value at 9$. The guy selling them on ebay bought a shipping container of them for a project that fell through and has been sitting on them for years trying to get rid of them.

I've been printing bearings for awhile with the cheap bag of steel bearings I originally. I'm definitely considering buying a few thousand acetal bearing balls.

  Are you sure? yes | no

hayden wrote 07/31/2019 at 19:05 point

Like the project! Neat incorporation of the 3d printed belt, notice much back lash or deformation of the belt teeth after a few hours of use? Any chance you could upload steps instead of stl's? Acetal ball bearings have always seemed to have less friction on plastic bearing races for me, why choose metal?

  Are you sure? yes | no

Jeff wrote 08/02/2019 at 03:10 point

I don't have that kind of time on the actuators themselves but will starting working with them soon. <0.2mm backlash is largely in the main bearings holding the screw nut. The belt takes very little load as the screw is doing most of the force conversion.

Honestly, I didn't expect the acetal ball bearings to be cheaper than the cheap steel bearings based on the assumption of common volume, didn't even look. Seeing now they are a bit cheaper... I have large bag of hardened steel 1/8" balls but may still switch to acetal for better wearabilty.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates