3D Printed Robot Actuator

A high speed and high torque robotic actuator using low-cost brushless motors, custom controller, 3D printed parts and bearings.

Public Chat
Similar projects worth following
I wanted to make a quadruped or biped with enough power to jump off the ground. Typical servo solutions were not good enough.

Design sections
Mechanical - Cycloidal gearbox with rolling elements, bearings and dual input and output shafts
Motor - Low-cost high torque Brushless outrunner using Multistar Elite Motors
Sensors - Dual absolute magnetic encoders for motor position and joint position
Electronics - Custom PCB including Mosfets with Mosfet driver DRV with Cypress PSOC4 SOC, sensor inputs and communications. Plus Magnetic Encoder PCBs
Software - Field Oriented Control (FOC) for position control. Mosfet Driver, Encoder and CAN communications.

The purpose of the Actuator is to create a design than I can easily make with a 3D printer using cheap and powerful Brushless motors from China. I have three prototype sizes of Cycloidal gearboxes 44mm, 60mm and 78mm diameter. The size of the motor, number of poles and their shafts are also adjustable.


Step File of the Whole Actuator

stp - 4.09 MB - 06/03/2018 at 06:13


Pack and Go files for Autodesk Inventor

x-zip-compressed - 21.85 MB - 06/03/2018 at 06:11


PSOC4 Project files Hardware and software (code) files

x-zip-compressed - 1.74 MB - 06/03/2018 at 04:17


ENC_MAG (3-06-2018 12-14-05 PM).zip

Altium project Schematic and PCB

x-zip-compressed - 485.14 kB - 06/03/2018 at 04:15


Adobe Portable Document Format - 100.01 kB - 06/03/2018 at 04:14


View all 11 files

  • Biped Design

    Paul Gould06/09/2018 at 15:22 1 comment

    6x Actuators

    Do all the joints need the same size actuators?

    Are different reduction ratios required? Higher torque less speed.

  • Mini Quadruped Design (CAD)

    Paul Gould06/08/2018 at 16:16 0 comments

    12x Mini Actuators

    Needs a head, tail, electronics and batteries. 

    Two leg has been 3D printed. Some assembly required. See end of YouTube video. It's the little one on the left.

    I have made some 2 axis legs for testing. They have enough torque but the speed is huge, even under load. Jumping is not impossible. 

  • Actuator Testing

    Paul Gould06/01/2018 at 15:31 0 comments

    Testing using the Brushless motor, Cycloidal gearbox, Position sensors, Controller and LiPo Battery

    • 3kg of weights placed at 330mm distance from the center axis = 100kg/cm or 10Nm
    • The laptop sends a command to move between 90 (vertically down) and 180 degrees (horizontal)
    • 11.1V 3Cell LiPo (1500mAh 30C)
    • Peak Current while moving is about 6A @ 12V = 60W
    • Controller is set to 50% max PWM (I don't want to break anything yet)
    • 90degrees transit time is about 1 second @ 10Nm load

    My prototype actuator has a tested no load speed of 60deg in 0.2sec @ 12V, 4A @ 50 Max PWM

    I have not tested the max stall torque but 10Nm is currently suitable for my needs.

    The motor can handle 600W (22V @  27A) and the brushless controller can handle 4000W (40V @ 100A) (both dependent on cooling)

    In comparison, the Dynamixel MX-106R is the servo I wanted as it had 100kg/cm (10Nm) stall torque but it's no load speed is 55RPM and it cost ~US$500

  • PSOC4 Controller software

    Paul Gould05/16/2018 at 15:03 0 comments

    The software runs on the PSOC4 by Cypress and is a Programmable System on Chip which includes

    • 32-Bit ARM Cortex M0 (48MHz)
    • Programmable Digital Blocks - UDB  (Like FPGAs)
    • Programmable Analogue Blocks (Opamps, Comparitors, ADC, DAC)

    In the PSOC4 you can choose between fixed blocks (as in normal micro-controllers) or Universal Digital Blocks (as in FPGAs). So features  like SPI, I2C, UART, Timers and Counters (PWM), can be either fixed or custom. 

    I was hoping to say that is it fully configurable but it is really not. There are many limitations and work-arounds in both hardware and software. That being said, it is a brilliant chip, you can do many things without the CPU being involved at all. The sequencing SAR ADC is a good example of this. The IDE is good but hides too much low level functions. Things like being able to change the CAN ID on the fly meant searching through lines of undocumented c code.

    The software/configuration went through many iterations depending on the Controller version.

    Software Structure for Brushless Controller 2.0

    • Restore Configuration data from User Flash
    • Create Sin array from number of motor pole pairs
    • Configure Motor Driver
    • Enable Everything (Comms, PWM, ADC and IRQ)
    • The Sequencing ADC End of Conversion IRQ is the sub-routine for the controller loop
      • Read Motor and Joint position information
      • Read ADC information (Current, Voltage, Temp)
      • PID
      • Field orientated Control (FOC)
      • Sin to PWM output
    • CAN IRQ
    • Motor Fault IRQ
    • UART Debug Control and User Flash Configuration

    The sub-routine for the controller loop runs at 10kHz and uses about 20% of the CPU time. Not bad for a 48MHz CPU and doing FOC. The main reason it runs efficient is the that FOC array is pre-calculated to suit the number of poles of the motor being used. The other two phases are just offsets in the main array. The output from the PID is just a multiplied by the FOC array and shifted to get the three PWM signals. There are no sin and division calculations in the controller loop.

    The FOC array is based on modified sinusoidal waveform, often called saddle profile. It has the benefits of higher voltages between phases (than pure sin waves) and 1/3 less switching losses. The FOC array has 4096 (2^12) points and the Motor's Magnetic encoder has 16384 2^14 steps. Which is fine, because the encoder has some noise.

    The hardware and software has been updated to the "file page".

  • Actuator Controller - Hardware

    Paul Gould05/13/2018 at 15:03 0 comments

    From everything that was learnt from the hardware development a real / custom actuator had to be developed. After some research the best/easiest solution for me was the 3-Phase driver DRV8305 paired with 6x N-MOSFETs and the PSOC4 Processor. 

    Hardware for the Second Controller

    • Custom 4 Layer PCB 47mmx45mm
    • PSOC4 CY8C4247AZI-L485 ARM Cortex-M0 32-bit Processor with Programmable Analog Block and Programmable Digital Blocks
    • DRV8305 MOSFET Driver with integrated Current Sense Amplifers, SPI and PWM Control
    • 6x N-MOSFETs R-on-typical @ 0.7mOhms 40V
    • 3x 1mOhms Current Sense Resistors
    • CAN Transceiver
    • 25MHz Oscillator
    • LMR14206 Step Down Regulator
    • Optional (un-populated) - RS485, FET Temp Sensor, USB, Hall effect input, Sensorless operation 

    Brushless Controller 2.0

    There is not much to say about this controller. All components were "wired" up as per their datasheets. As the two main IC's have a lot of  integrated components inside there is not much interconnects required. 

    The angle of the motor and the joint is read by the AS5147s via SPI. PSOC4 uses PID to determine the required joint position and uses Field Orientation Control from motor angle to calculate 3 Sinusoidal values. These Sinusoidal values are converted to PWM signals to drive the 3-phase Driver. This intern drives the 6x N-MOSFETS to power the Brushless Motor. Control of the Actuator is done by CAN. 

    As the board was soldered by hand, the SPI link between PSOC4 and the DRV8305 helped to to pick up dry-joints and short-circuits on the MOSFETs, Current Sense Resistors and some DRV8305 pins. It had many fault and error registers which points directly to the bad connection.

    The Schematic and PCB has been uploaded to the "file page".

  • Actuator Controller - Hardware Development

    Paul Gould05/11/2018 at 17:30 0 comments

    The goal of the Actuator Controller is to 

    • Drive the Brushless motor at high speed and low speed including zero speed (holding joint position)
    • Joint Position Control PID 
    • Actuator Communications 

    Hardware for the First Controller 

    • PSOC4 Development board CY8CKIT-043
    • 3x Half Bridge Drivers BTN8982TA (10mOhms 55Amps 40V)
    • CAN Transceiver
    • Hall effect sensors for Motor commutation
    • Potentiometer for Joint Position

    Brushless Controller 1.0 (of many)

    The control of the Sensored Brushless Motor with Hall effect sensors was done by a "look-up table" in the digital Marcocells of the PSOC4, no CPU overhead is needed for Brushless comutation. Only Direction and PWM duty cycle are passed to the Marcocells. The hall effect sensors only had a resolution of 6 phases per electrical revolution. This worked ok at high speeds but the motors operation would not be smooth a low  speeds or when trying to hold a set position.

    Brushless Controller 1.1

    The Hall effect sensors used had a differential analogue output. In the previous control method they went into the PSOC's internal compactors. In this control method they can be read by the PSOC's differential ADC and a reasonably accurate electrical position can be calculated. Having full motor position information meant that Field Vector Control could be implemented. (More on this later) 

    The problem with using hall effects in this manner is that the distance between the hall effect sensor and the flux ring has a large effect on the voltage output. Also the type of sensor and thickness of the flux ring varies so much that it is not practical to use this technique for a general purpose robot actuator. For example, when used on the Multistar Elite 5008 the hall effect sensors gave a good sinusoidal output over one electrical rotation, every time took apart system and put back the Hall-effect board the amplitude of the sinusoidal output would change. Moving the hall effect sensors over to the Multistar Elite 3508, the effective diameter had to change but the sinusoidal output was very small.

    I came to the conclusion that the thickness of the flux ring on the Multistar Elite 5008 was too thin or the magnets are too strong, either way it is not the most efficient design. It let too much of the magnetic strength travel on the outside of the motor. By contrast the the Multistar Elite 3508 had very little magnetic flux on the outside of the motor. This is not good for using external hall effect sensors but at least the full magnetic strength can be potentially used

    Using external hall effect sensor with differential analogue to use Field Vector Control is not relieable for general use. Maybe internal hall effect sensors could work better but they would not be installed easily for different types of motors. 

    Brushless Controller 1.2

    No more Motor based hall effect sensors. Some other brushless controllers use quadrature optical encoders but these need to be referenced on power up. I prefer absolute position sensors, so a diametric magnetic is placed on the motor output shaft and the magnetic rotary encoder chip placed opposite to it. The first chip i used was a AS5043 10-bit SSI, PWM and analogue outputs with a Max 30kRPM (10KHz update rate). This is the "Magnetic Induction" that is used in the Hobbyking HK47360TM Servos, I had several of these in one of my original quadruped robots. The AS5043 and diametric magnetic replaces the normal potentiometer in the servo. It was setup using it's analog output set to 180 degree at full scale and low noise/slow mode. 

    For use as a absolute angle sensor with Brushless motors a few changes were made. Slow mode was changed to Fast Mode. The SPI from the PSOC was connected the AS5043 SSI which gave a 1024 counts per revolution. With the 5008 having 7 magnetic...

    Read more »

  • Sensors - Absolute Magnetic Encoders

    Paul Gould05/10/2018 at 16:05 0 comments

    The position sensor board uses the AS5147 is a 14-bit Magnetic Encoders

    One for is used for the motor electrical position/angle. One is used for the joint position/angle. The are connected via daisy chain on SPI communication with 2x 16bit clocking. There is a piece of Silicon Steel between the two sensors boards to prevent cross flux of diametric magnets.

    The technical information for the system:-

    • 14500RPM (240 REV/sec) 
    • Multistar Elite 5008 motor maximum speed 7000 RPM
    • 7 Pole pairs
    • 10kHz sample rate (85 samples per revolution at full RPM)
    • 12 samples for electrical rotation at full RPM
    • DAEC™ dynamic angle error compensation

    This basically means that they are quite suitable for this application.

    The Schematic and PCB has been uploaded to the "file page".

  • Motor Modification

    Paul Gould05/10/2018 at 15:26 0 comments

    The Hobbyking range of Multistar Elite Brushless motors are powerful and lightweight.  I have paid between AU$25 and AU$75 for the Multistar Elite 5008. They do need to be modified to be integrated into the robot actuator. The shaft has been replaced with a longer one (with a hole) and the base has been reduced in size and weight.

  • Mechanical Design - Cycloidal Transmission

    Paul Gould05/06/2018 at 14:58 0 comments

      Typical Cycloidal Transmissions consist of four main sections.

      1. Input shaft and eccentric bearing
      2. Cycloidal Gear(s)
      3. ring pins and housing
      4. Output rollers and shaft

      The way that the sections are arranged are with the input shaft on one side and the output shaft on the other and the housing in the middle.

      This means that the output rollers are based on the "Fixed-Free Beam Moment" and are not suited to high torque operation when 3D printed.

      This design's output support pins are based on the "Fixed-Fixed Beam Moment". This means the housing and the output rollers are dual sided. The motor input shaft is only single sided. This all works well on 3D printed parts as the forces on the steel output support pins are spread over a large area in the ABS material. A huge credit goes to Mike Buckingham for his idea on making the input shaft go through both the housing and output shaft. Sure it increased the complexity but it made the design usable.

      The CAD files are uploaded to the "files page".

      There are two sizes of Cycloidal Transmissions but they are identical in their design. 

      Thin wall Bearing 6809 58x47x7
      Hobbyking Elite 5008-330KV (6s 600W)
      Shaft size 6mm
      Eccentric offset 1mm
      Reduction Ratio 1:25
      Cycloidal Gear "Teeth" 25
      Ring Pins 26
      Output Support Pins 8
      Thin wall Bearing 6807 47x35x7
      Hobbyking Elite 3508-268KV HV (8s 300W)
      Shaft size 4mm
      Eccentric offset 1mm
      Reduction Ratio 1:20
      Cycloidal Gear "Teeth" 20
      Ring Pins 21
      Output Support Pins 8

  • Mechanical Design - Starting Point

    Paul Gould05/06/2018 at 14:21 0 comments

    I wanted a servo/robot actuator to use with a medium sized quadruped (cheetah) and a small humanoid robot. Hobby servos were too slow, low torque, had poor control, high backlash or were too expensive. The idea then began to create low cost actuators with enough torque/speed and were fully under my control that would suit my robot design requirements.

    I actually started with magnetic transmissions. Their designs intrigued me. It was why I purchased my cheap Chinese 3D printer. It allowed me to easily create rectangular slots for Neodymium Magnets. I will create a project on the following in the future.

    • Cycloidal Gearbox
    • Balanced Cycloidal Gearbox
    • Dual Magnetic Wobbling Gears with Constant Velocity Joint
    • High ratio Planetary Gearbox

    Ultimately magnetic transmissions could not deliver enough torque. They had a strange property of having zero backlash at zero torque and increasing the backlash as the torque increase, at high torque the gear would just slip. 

    I then looked at 3D printed gearboxes after seeing the work by "Gear Down For What". I trialed some single, dual and differential Planetary gearboxes. The Single stage ones were ok, but practically the gear reduction ratio could only be about 5:1 and would not produce enough torque. I would have to use a dual stage reduction gearbox and that would not be nice.

    Then the design of the Mechanical Cycloidal transmission started.

View all 10 project logs

  • 1
    Actuator Assembly

    1x Brushless motor with extended shaft (6mm Silver Steel)

    1x Custom Brushless Controller Board

    2x AS5147 Absolute Position Boards

    2x 6mm x 2.5mm Diametric Neodymium Magnet

    12x 3D printed parts

    16x 5x8x2.5 bearings

    2x 6809 Bearings

    5x 12x18x4

    1x 6x10x3

    8x 3mm dia x 30mm Silver Steel shaft

    26 (or 13) 3/32" x 28mm Silver Steel shaft

    26 (or 13) 1/8" x 16mm Brass tube (thin wall)

    24x M3 bolts

    10x M2 Bolts

    3x PZT screws

    1x M6 thin wall washer

    1x 2mm dia x 11mm Silver Steel shaft

  • 2
    Sources of information


    • CCDIY 3D filiment
    • Plaig Bearings
    • MiniTech
    • Digikey/Mouser
    • Apollo Bearings

    Favorite Makers

    • Makers Muse
    • AVE
    • Clickspring
    • Tom Stanton
    • Ivan Miranda
    • James Bruton
    • Gear Down For What?
    • MRB Engineering
    • Thomas Sanladerer
    • ODrive Robotics
    • Benjamin's Robotics
    • Laura Kampf
    • Tested

View all instructions

Enjoy this project?



JoshuaBRussell wrote 4 hours ago point

Really cool project! I'm interested in motor control myself. What resources did you use when helping design the motor control electronics? Specifically related to the PWM, DRV chip, etc.

  Are you sure? yes | no

john.smith.extended wrote 5 hours ago point

This is extremely interesting, but how does it compare to the commercial actuators on price? You said those ones are ~$500, but what I can find looks like this one has to be pushing at least $200. A full BOM with sources and costs would be awesome.

  Are you sure? yes | no

Dan Royer wrote 10 hours ago point

Nice work! I’m very interested in your project. I’ve tried to make cyclones in the past. My sixi robot arm has a min holding torque of 20Nm at the base. What kind of play are you getting? (How’s the repeatable accuracy?)

  Are you sure? yes | no

Josh Starnes wrote 4 days ago point

It reminds me of transformers and other robots that have rotating discs in the joints, and you made it real, waaaah !!

  Are you sure? yes | no

Josh Starnes wrote 4 days ago point

Khudos, I really hope you were one of the individuals in the top 20 who got the $1000 prize, this concept is really cool and I love it!! It could be used in any joint in robotics.

  Are you sure? yes | no

Paul Gould wrote 4 days ago point

Thanks Josh. I was one of the 20 finalists. I think that the electronic part of the actuator is not the easiest for makers to implement into their designs right now so I might improve it a bit. The PSOC4 is not an easy chip to learn. Maybe something Arduino compatible.

  Are you sure? yes | no

Josh Starnes wrote 4 days ago point

I hope the prize encourages you to keep developing it, I normally use high torque servos on my robots but I would like something better and purpose built like this, if there is any way I can help .... even testing some setups I’m happy to be involved

  Are you sure? yes | no

Dan DWRobotics wrote 06/08/2018 at 18:02 point

Can only second my previous comments. The level of work and detail on this project is incredible. I am very excited to see the outcome!

  Are you sure? yes | no

Alberto wrote 06/06/2018 at 12:07 point

Incredible project! Super neat mechanical design.

  Are you sure? yes | no

Paul Gould wrote 06/05/2018 at 11:54 point

@Dan DWRobotics  I do have a little bit of backlash, but it is hardly noticeable. The teeth of ABS cycloidal gear acts like a mini spring, so the back increases a bit with increase load. As you said the software can compensate for this. Backlash was the main reason I started to look into my own actuator design. I made a little biped with RC servos and my own servo amplifiers. The servo backlash was terrible.

  Are you sure? yes | no

Oskar Weigl wrote 06/04/2018 at 06:14 point

This looks super awesome! There's a group of roboticists that would love to hang out with you on the ODrive Discord:

Swing by if you have some time to chat!

  Are you sure? yes | no

Paul Gould wrote 06/04/2018 at 09:37 point

Thanks Oskar. I just joined your ODrive Discord, but remember I'm on Australia time.

  Are you sure? yes | no

Dan DWRobotics wrote 06/03/2018 at 20:30 point

This looks amazing. I always considered cycloidal gears to be just too tricky to make into actuators for joints, but seems like you have done a great job. Also seems like they are very strong and quick joints. Look forward to seeing future progressions. The quadroped construction you have looks really interesting.

  Are you sure? yes | no

Paul Gould wrote 06/04/2018 at 05:11 point

Thanks Dan. I was surprised it worked so well. The first 10 prototypes were tricky but now they are made quite quickly. Cutting the silver steel rods and the brass tube still takes time. ABS is not the right material to make the cycloidal gears with. I sure other filaments would have better mechanical properties. I am using ABS because I can't get other materials to print well on my cheap 3D printer.

I've been watching your project for a while, as cost is a huge factor in how I design robots. Things start to add up when you have 20ish joints. Do you have a problem with backlash? All of the tooth gearboxes I 3D printed were very bad. 

  Are you sure? yes | no

Dan DWRobotics wrote 06/04/2018 at 22:25 point

I have a couple of methods for dealing with backlash, but unfortunately there is still a bit. The cost savings across an entire platform justify me programming strategically to mitigate those effects. But I can't pretend that backlash is not an issue. I can imagine you have zero back lash on those gears? 

  Are you sure? yes | no

Josh Starnes wrote 4 days ago point

have you considered casting the parts out of urethane or nylon? both have lubricating qualities and are much stronger than the pla or abs. I wonder if a outer casing and lube grease might make the mechanism more quite

  Are you sure? yes | no

drew wrote 4 days ago point

You might want to think about using Dowel Pins for the drive pins instead of silver steel. They're available in lots of diameters and lengths. 

  Are you sure? yes | no

Paul Gould wrote 2 days ago point

Josh, I would like to try casting but it doesn't seem to easy. I was thinking to 3D printed Nylon. I haven't added any grease to the gears yet. The final actuator will be fully sealed (outer housing to be added later).

Drew, I didn't know about Dowel pin, thanks for the tip.

  Are you sure? yes | no

├░eshipu wrote 06/03/2018 at 10:30 point

This is really great. I wonder, do you have any problems with heating/cooling of the motors? The quadcopter motors are made to work in a pretty fast stream of air, I wonder how they work without that for cooling.

  Are you sure? yes | no

Paul Gould wrote 06/04/2018 at 04:43 point

I have not run the motors for more than a minute at a time and I am limiting the power to 60W. They are a bit warm, but I can still touch the stator, (about 50degC). Cooling will be required as the project progresses. I had though of water cooling around the stator with some red die in clear tubing so it looks like blood running through the quadruped's body.

  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