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.

PSOC4 Project files Hardware and software (code) files More CAN comms and move instructions

x-zip-compressed - 1.76 MB - 10/23/2018 at 16:28


Full Tail CAD Files Inventor Pack and Go

x-zip-compressed - 21.73 MB - 10/21/2018 at 17:40


Full Leg (with SAE) CAD files Inventor Pack and Go

x-zip-compressed - 28.52 MB - 10/21/2018 at 16:28



Full Tail Step Files

stp - 3.93 MB - 10/21/2018 at 16:28



Full Leg (with SAE) Step files

stp - 5.83 MB - 10/21/2018 at 16:23


View all 16 files

  • 1 × CY8C4247AZI_L485 PSOC 4 SOC uC with FPGA and CAN
  • 1 × DRV83055PHPR MOSFET Driver with SPI and 3x Current Amps
  • 2 × AS5147-HTSM 14-Bit Magnetic Absolute Encoder Sensor
  • 6 × SIR638ADP-T1 N-MOSFET 40V Ron 1mOhms (100A*)
  • 1 × MCP2557FD-H/SN CAN Transceiver

View all 11 components

  • Arduino Brushless FOC Controller - Development

    Paul Gould10/20/2018 at 08:08 0 comments

    The Cypress PSOC4 Controllers are not very common in the maker community. As I would like more makers to be able to use/modify/improve this Actuator, I am designing an Arduino version. It will be based around the MKR Zero with the SAM D21.

    Earlier I got the Centered Aligned PWM working for controlling the MOSFETs for driving the Brushless motor. Next was the SPI for reading the Magnetic Absolute encoders for the motor and joint positions. The SPI on the SAMD21 only has a single buffer which is not time efficient for this application. It does have a DMA on the SPI which is much more complex but the most efficient for operation. The problem is that it is not a standard feature for the Arduino system. 

    I started with the following information.

    Now the Adafruit Zero DMA library makes it too easy

    and can now be installed by the standard Arduino IDE --> Sketch --> Include Library --> Manage Libraries

    It also support Interrupts "dma_callback" to tell when the transfer has completed.

  • Robot Control software (for initial testing)

    Paul Gould10/13/2018 at 16:09 3 comments

    Visual Studio and C# in .Net was used to write a simple test program. An X,Y foot position is generated, converted to hip and knee angles using Inverse Kinematics and sent to the serial to CAN converter (spare PSOC actuator controller). These packets are addressed to the two robot actuators to move to the required position. A second mode just returns Joint positions.

  • Series Elastic Actuator - CAD

    Paul Gould10/13/2018 at 16:02 4 comments

    I have modified the base robot actuator to make it into a full robot leg for a quadruped. It has a parallel linkage with springs and 2 robot Actuators. This means that the spring direction changes from rotation to almost vertically linear when the leg is in the standard walking positions. Different strength springs can be swapped for testing, with the aim to store energy at the end of a jump cycle and use it for the next jump. It will also be used for efficient walking/running.

    Everything rotates around the same joint, for the centre joint, described from top to bottom of the drawing.

    • 6mm shaft running most of the way though
    • Motor bell and flux ring
    • Stator housing with 2 motor bearings
    • Top outer housing
    • Top Thigh plate with 6809 bearing
    • Top Series elastic output plate (also actuator output shaft) with 6809 bearing
    • Eccentric Cam with 2 lobes with 2 bearings each and 2 cycloidal gear
    • Bottom Series elastic output plate (also actuator output shaft) with 6809 bearing
    • Bottom Thigh plate with 6809 bearing
    • Bottom shaft mount with bearing
    • Motor angle Magnet holder
    • Motor magnet (diametric)
    • Bottom outer housing
    • Motor position PCB
    • Silicon steel flux cancellation plate (0.5mm thick)
    • Joint position PCB
    • Joint bearing holder (old protects the PCB)
    • Joint magnet (diametric)
    • Joint angle plate with bearing

  • Quadruped Jump Jig

    Paul Gould10/13/2018 at 15:42 0 comments


    • 2x Linear rails
    • 4x Linear Bearings
    • wood and screws
    • 11.1V 1500mAh Lipo Battery
    • Analogue Current Meter 20A
    • Digital Current / Voltage Meter
    • Robot Leg


    The rectangular extrusion is the same size as the quad's "backbone" and the robot's hip joins with the following design.

    The robots hip has three mounting points to the rectangular extrusion.

  • PSOC4 - CAN and FLASH

    Paul Gould10/13/2018 at 15:23 0 comments

    The PSOC4 and the IDE Creator helps you to write code for the Arm processor, the CAN peripheral and the FPGA logic. When you use it for standard operations, then you rarely need to go deep into the component datasheets to make the design work as required. The examples are quite useful.

    But, if you want to design something that is not normal, then it is hard to find the information required.

    CAN Problem 

    Each Actuator needs to have it's own individual address or CAN IDs. In my robot there will be at least 12 actuator controllers that will be CAN slaves, with one controller configured as a CAN master.  This requires setting the CAN Receiver Mailbox ID via software. It is normally done in the .cysch CAN configuration page.

    There is a easy for setting the Transmit message ID.


    There was no such sub-routine for the setting the RX message ID. So after a lot of reverse engineering and some trial and error, the following code is used. Set different IDs for each actuator. 

    CY_SET_REG32((reg32 *) (CYREG_CAN0_CAN_RX0_ACR), (0x0200000u*ID));

    This only works for Message Mailbox 0 and is good for my current needs. A second mailbox maybe required in the future that will be a broadcast message so all the receiver message Mailbox IDs will be the same. This could be used for an Emergency stop message. Send one message and all the actuators stop.

    Additional CAN information

    If the RTR in the Configure 'CAN' is enabled, the CAN transmitter will re-transmit the current packet until the received sends an Acknowledge packet back. 

    FLASH Problem

    As each Actuator needs to have it's own individual ID, this value and some others needed to be stored in flash memory. But when the PSOC4 software is updated it erases ALL of the standard FLASH. It also does not have EEPROM. It has an emulated EEPROM but again this is erased after updating the program. The PSOC4 I'm using has user FLASH but there is no information on how to use it. 

    The set-up code is

    #include <CyFlash.h>
    uint8 Flash_User_Array[CY_SFLASH_SIZEOF_USERROW];

    To Read from FLASH, I set up a RAM array the same size as a FLASH row.

        uint16 i;
        for (i = 0u; i < CY_SFLASH_SIZEOF_USERROW; i++)
            /* Define source value */
            Flash_User_Array[i] = (*((uint8 *) (CY_TEST_USER_FLASH_ADDR + i)));

     To Write to FLASH, I set up a RAM array the same size as a FLASH row.

        cystatus returnValue = CYRET_SUCCESS;
        returnValue = CySysSFlashWriteUserRow(CY_TEST_USER_FLASH_ROW, Flash_User_Array);

  • Arduino Brushless FOC Controller

    Paul Gould06/18/2018 at 14:04 2 comments

    In an effort to make the controller accessible to more makers I've strated designing an Arduino based system. It uses the SAM D21 G 32-bit micro-controller as used on the MKRZERO board. This chip has an advanced Timer Counter Controller which can generate three centre aligned PWM signals. After sorting out the correct pin mapping it is up and running.

    The code is based on information provided in the Arduino forum by MartinL. 

    Now with deadband

    I will create a github shortly

    Next up dual SPI. One for the absolute magnetic encoder sensors and the other for the FET gate Driver IC.

    PID and FOC should be easily ported across.

    Voltage and current measurement may be difficult because the Arduino doesn't support free running sequential ADCs very well.

    The SAM D21 does not have CAN commucations so it will need RS485 and USB.

  • 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. 

  • Robot Quadruped Tail

    Paul Gould06/08/2018 at 15:41 0 comments

    Tail Design

    3x Mini Actuators (5 Joints)

    Joint 1 is tail "wag"

    Joint 2 has figure 8 pulley to Joint 3 and the angle is opposite

    Joint 3 is actuated up/down

    Joint 4 is actuated up/down

    Joint 5 has a figure 8 pulley to Joint 4 and the angle is opposite

    Distance between Joints is 100mm

    Motors are Multistar Elite 3508

    The tail is used for the quadruped's balance.

    Was thinking about putting an end effector, camera or gripper

  • Robot Arm Design

    Paul Gould06/08/2018 at 14:38 0 comments

    Robot Arm

    3x Large Actuators

    2x Small Actuators

    1x Gripper ???

    Based on previous testing, it should be able to lift 0.5kg at the end effector.

View all 18 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 06/17/2018 at 20:23 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

Paul Gould wrote 06/18/2018 at 13:53 point

ODrive and VESC are a good starting point. For the FET Drivers, I like the smarter chips of TI's DRV8xxx family. They offer various control and fault detection options. Gate control can be tricky and these chips handle them easily. The main reason for my custom controller was to have full motor torque at 0RPM. 

  Are you sure? yes | no

Deinactivation wrote 06/17/2018 at 18:43 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

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

I was comparing the actuator to the DYNAMIXEL PRO line of robot servos. They start about $500. I will update the BOM over the next few weeks.

  Are you sure? yes | no

Dan Royer wrote 06/17/2018 at 14:22 point

Nice work! I’m very interested in your project. I’ve tried to make cycloids in the past. My sixi robot arm needs 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

Paul Gould wrote 06/18/2018 at 11:13 point

The backlash is quite small but that is all relative. It is good for a quad, not sure about a robot arm. It depends on the tolerances of the 3D printed Cycloidal gear. The joint position sensor is 14bits but getting the magnetic sensor and diametric magnet concentric will effect the accuracy. I have seen people have a calibration table for the magnetic sensor, so maybe the usable accuracy is only 12bits.

  Are you sure? yes | no

Josh Starnes wrote 06/13/2018 at 13:58 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 06/13/2018 at 13:57 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 06/13/2018 at 16:48 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 06/13/2018 at 16:52 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 06/13/2018 at 17:22 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 06/13/2018 at 19:45 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 06/15/2018 at 14:50 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