Close
0%
0%

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.

Leg.zip

Repaired Pack and go file for SEA leg

x-zip-compressed - 28.52 MB - 04/24/2019 at 16:48

Download

WS3.cywrk.Archive02.zip

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

Download

tail.zip

Full Tail CAD Files Inventor Pack and Go

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

Download

6807_tail.stp

Full Tail Step Files

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

Download

6908_LEG.stp

Full Leg (with SAE) Step files

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

Download

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

    https://forum.arduino.cc/index.php?topic=344029.0

    Now the Adafruit Zero DMA library makes it too easy

    https://github.com/adafruit/Adafruit_ZeroDMA

    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 4 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

    Components

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

    Assembly

    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.

    CAN_SET_TX_ID_STANDARD_MSG(0,(TX_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>
    
    #define CY_TEST_USER_FLASH_ROW       (CY_SFLASH_NUMBER_USERROWS - 1u)
    #define CY_TEST_USER_FLASH_ADDR      (CYREG_SFLASH_MACRO_0_FREE_SFLASH0 + CY_TEST_USER_FLASH_ROW * CY_SFLASH_SIZEOF_USERROW) //255
    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.

    https://forum.arduino.cc/index.php?topic=346731.0 

    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

    Suppliers

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

Share

Discussions

maxime.lemonnier wrote 17 hours ago point

Hi, your project is very, very nice. I'm considering to try it out. I was wondering, how large is your backlash? Why do you feel the need for two encoders? How will you use both in your control loop?

Also, I don't find the code for your mkr zero port (have you abandoned that front?)

Thanks a lot

  Are you sure? yes | no

Paul Gould wrote 16 hours ago point

I have 6 of these actuators and each one has a different backlash. Most have about 0.3mm @ 200mm. One has 0mm and one has 1mm @ 200mm. The main reason for the two absolute magnetic encoders is so I know where the motor is at power up and I know where the joint is at power up. There is no referencing or calibration required after each power up. This has to be done only once and the offsets stored in FLASH/EEPROM. I have two separate control loops. One for FOC of the motor-position and one PID loop for joint control. The output of the joint control just tells the motor the direction and speed/power.

  Are you sure? yes | no

Paul Gould wrote 9 hours ago point

I'm still working on the Arduino Zero/SAMD21 port. I'm slowly putting the individual feature code on git. It as taken a back seat while I work on the CAD and electronics.

  Are you sure? yes | no

Ryanwallace18 wrote 06/10/2019 at 03:14 point

What modes and input signal types does the motor controller support? Step/Dir, position, torque etc.

  Are you sure? yes | no

Paul Gould wrote 06/10/2019 at 04:27 point

At the moment it supports simple CAN packets (goto position) and UART commands (goto set position and move x degrees). I will add others types and more features as I need them.

  Are you sure? yes | no

Daren Schwenke wrote 05/10/2019 at 23:03 point

Greetings again @Paul Gould   I have private messaged you.

  Are you sure? yes | no

praveen wrote 05/10/2019 at 05:57 point

sir may i know what is the reduction ratio of this cycloidic gear box

  Are you sure? yes | no

xvart wrote 05/10/2019 at 05:23 point

So how long do the plastic (I guess cycloidal part) inner gears last under load???

Also what is the wear rate on the pins and would it be better to use pins with bearings.

  Are you sure? yes | no

Paul Gould wrote 05/10/2019 at 12:17 point

I'm not sure. I've only really be testing at about 10Nm max, as this is all I need. The wear seems good so far. It is 3D printed ABS, don't expect too much. If you use bearings for the outer pins the diameter would be large, which means the reduction ratio is less and the pressure angle lower (torque produced in the wrong direction).

  Are you sure? yes | no

Alexander Zipper wrote 04/24/2019 at 13:33 point

Hey Paul! Amazing project, I can´t stop reading all the instructions and logs...

I wanted to download all the files but unfortunately i am not able to download  the file Legs.zip...

Is it offline?

Alex

  Are you sure? yes | no

Paul Gould wrote 04/24/2019 at 16:50 point

Thanks, I have just uploaded Legs.zip it again, please try it now

  Are you sure? yes | no

Alexander Zipper wrote 04/26/2019 at 15:33 point

Thanks its working now :)

Do you think 25% infill and 1.2mm wall thickness is enough for those parts?

  Are you sure? yes | no

Paul Gould wrote 04/26/2019 at 16:54 point

Hi Alexander. I would suggest printing a single actuator first before you get to the leg. The SEA leg is complex. I've put it on hold while I develop a simpler quad ( See the tail project). I was trying to literally run before I learnt how to walk. With that said, if you can print the leg and learn more about it then maybe you can teach me somethings. It is open source after all.I use ABS 75-85% infill, 2-3 perimeters 0.4mm nozzle, 0.2mm layer height. Printed on a perforated board with a 3 layer raft, to stop warping. Also what controller are you planning on using?

  Are you sure? yes | no

Alexander Zipper wrote 04/26/2019 at 17:56 point

Alright I already have started to print some parts in PLA with 25% infill, 4 perimeters and also 0.2mm layer height but I guess I should increase the infill.
I just wanted to build that leg and understand how it works :D I prefer to hold something in my hand...even if PLA is not very useful to print gears.

I was really mesmerized by that video testing the leg... It looks like it is by far the most promising leg for a robot dog.

Right now I really have no idea what controller to use. Some days ago I explored the OpenDog project by James Bruton (some people mentioned it before in the comments) and he is using the ODrive for his brushless motors.
I think this is okay for his project but it is way too expensive for a hobby project in my opinion...
What do you think about using an Arduino Mega like he did?

Today I was looking for the 5008 Multistar Elite Motor but it looks like they are not in stock anymore... while printing all the parts I wanted to solve the question about the controller...maybe there is a suitable open source solution?

  Are you sure? yes | no

Paul Gould wrote 04/27/2019 at 01:57 point

I'm now using Gartt ML5010 300KV from gogo-rc.com They are good price and already have a small mounting plate. Controller information to come shortly.

  Are you sure? yes | no

Paul Gould wrote 05/10/2019 at 12:18 point

How is the design going?

  Are you sure? yes | no

Alexander Zipper wrote 05/12/2019 at 11:19 point

Hey Paul! 

Thanks for asking :)
I am really busy right now with our baby so my printer is not running right now ;)

Some parts are printed and I ordered the Gartt ML5010 motors since I couldn´t find any other motors with similar technical specs.

I can´t wait to test the leg!

Have you tested your brushless motor controller yet? The PCB looks fantastic!

  Are you sure? yes | no

Rob Menting wrote 03/23/2019 at 14:28 point

Hi Paul, do you use the current for force/impedance control or do you use some extra sensing?

  Are you sure? yes | no

Paul Gould wrote 04/25/2019 at 15:21 point

No, nothing yet.

  Are you sure? yes | no

perry wrote 12/23/2018 at 02:34 point

Hi, Can you tell me where you got the extended axle shafts? and motor mounts?

Thanks!

  Are you sure? yes | no

Paul Gould wrote 12/26/2018 at 14:05 point

motor shafts are silver steel rob from https://mcjing.com.au/categorybrowser.aspx?categoryid=201 then cut to length and file a flat spot for the grub screw. The motor mount is the one that comes with the motor, it has just been attacked with a hacksaw. https://hackaday.io/project/157812-3d-printed-robot-actuator/log/146045-motor-modification I have just got some of these http://gogo-rc.com/store/index.php?route=product/product&product_id=3493&search=5010 which will not need the mount to be modified.

  Are you sure? yes | no

perry wrote 01/02/2019 at 16:22 point

Thanks a lot Paul. Appreciate the links. My shafts have grooves in them for the circlips. I was wondering if you found shafts that had the groove in them already. I guess I could use collars or something on straight shafts.

  Are you sure? yes | no

Paul Gould wrote 01/03/2019 at 00:03 point

Hi Perry, I have not found any off-the-shelf shafts that would suit what I need. You could make a groove with a saw or go to your local maker space and find someone with a lathe to make one for you.

  Are you sure? yes | no

perry wrote 01/03/2019 at 16:42 point

Thanks again Paul. I have a lathe so I think I will have a go at it.

  Are you sure? yes | no

Jarek Ceborski wrote 12/16/2018 at 21:13 point

Hi Paul, I'd like to say that your contribution is remarkable - thank you! I've picked your actuator, among all others I've ever found, to test in my mobile robotic arm http://autom.world :) Fingers crossed for the Arduino version you work on!

  Are you sure? yes | no

Paul Gould wrote 12/26/2018 at 15:02 point

I have just finished an anti-backlash version of this gearbox which I will upload in a few days time. I am still working on the Arduino version. I'm having trouble getting the SPI with DMAs working on the mkrzero. Maybe now I'm on holidays I will have some time to work it out. What sort of torque and speed are you aiming for on your joints?

  Are you sure? yes | no

Jarek Ceborski wrote 12/26/2018 at 19:54 point

Anti-backlash version, that's great Paul! I don't have experience with DMA, but I had some issues with mkrzero in the past - with interfacing IMU mpu-9250. Ported the code to both Nodemcu v3 and STM32 (blue pill) and worked without any issues. Maybe that will help you too. For the robot a 300kg/cm (30Nm) torque would be ideal, but for proof-of-concept 10Nm in sufficient. For speed 20-30RPM is enough.

  Are you sure? yes | no

Paul Gould wrote 01/03/2019 at 00:06 point

Hi Jarek, I have finally got the SPI with DMAs working. Next is the ADC with DMA and RS485. I will then make a board. What voltage and current would your motors work at?

  Are you sure? yes | no

Jarek Ceborski wrote 01/04/2019 at 08:23 point

Clapping and fingers crosses! I have exactly the same motors as you.

  Are you sure? yes | no

Jin Han wrote 10/29/2018 at 19:57 point

Hi, just a quick question on the PCB design (specifically for the encoder).  The schematic says "NF" which I know that not-fitted, but does this mean that you don't use any resistors at all? or what are the values for the resistor? I'm trying to make them in bulks and have PCB companies to assembly the board for me as well.

Also are the sizes for capacitors and resistors?

Thanks,

Jin

  Are you sure? yes | no

Paul Gould wrote 12/26/2018 at 14:17 point

"NF" is "not fit" or no resistors. There are for optional extras. R1 (0 Ohms) is for 3V3 operation. R2 (0 Ohms) is needed if this is the last one in the SPI chain. R3 & R4 (1K) maybe needed for noise issues. All of the components are 0603 except R2 which is 0805

  Are you sure? yes | no

Dan Royer wrote 10/27/2018 at 17:31 point

Hi!  Saw your latest Youtube (subscribed) and I'm interested in using a version of your actuator design in the next Sixi robot.  Our worst case at the base has a 20Nm holding torque.  Can you advise us how to proceed, please?  We'd love to collaborate.

  Are you sure? yes | no

Dan Royer wrote 10/27/2018 at 17:35 point

Also we're interested in making a version that mimicks ulna rotation between wrist and elbow - so the input and output mounting brackets are coaxial to the rotation.  Have you spent any time on that, and if so what are your thoughts?

  Are you sure? yes | no

Paul Gould wrote 10/28/2018 at 04:00 point

The actuator is very rigid because it has both top and bottom housings and output shafts. I'm not sure how to make it rigid for ulna joints, I'll think about it. What angle of rotation do you need?

  Are you sure? yes | no

Paul Gould wrote 10/28/2018 at 03:57 point

Hi Dan. Yes, we can collaborate. My suggested starting point is with the CAD. I'm using Autodesk Inventor. I think that you are using Fusion360. What format would you like the CAD in? Can you use the "pack and go" files that I have already uploaded?

  Are you sure? yes | no

Dan Royer wrote 10/28/2018 at 18:47 point

fusion would be great. We probably have to make a gearbox at the shoulder that is stronger than your current model. What do you think of https://www.reddit.com/r/robotics/comments/9s134q/i_made_a_cycloidal_drive_for_cheap_robots_git/

?

I’d love to have a parametric way to make the gearbox I need, then follow your wiring recipe. In your experience, will this generator work for among the printable profiles?   Is your package already parametric? Sorry I’m not up to speed yet.

  Are you sure? yes | no

Paul Gould wrote 10/29/2018 at 03:00 point

You should be about to use the ipt files from the "pack and go" as per the instructions https://knowledge.autodesk.com/support/fusion-360/troubleshooting/caas/sfdcarticles/sfdcarticles/How-to-import-or-open-a-file-in-Autodesk-Fusion-360.html?_ga=2.119678216.1803184385.1540780561-1795324385.1536071126

I haven't used Fusion 360 but the script from the reddit should be useful.

I have created a parametric in inventor. I doesn't port well.

  Are you sure? yes | no

Paul Gould wrote 10/28/2018 at 04:07 point

What motor/controller did you have in mind?

  Are you sure? yes | no

Dan Royer wrote 10/28/2018 at 20:07 point

I’ve used a Rumba board until now (6steppers). Since you use dc im looking at odrive x3

  Are you sure? yes | no

agenthimzz wrote 10/19/2018 at 18:10 point

Hi, Himanshu here from Youtube.. 

So, I have been thinking of this 4 legged robot and have observed that it is much better if the robot has a low Unsprung Mass. 

In Automobiles:

Unsprung mass is: wheels and Suspension.

Sprung Mass is: Body, Engine, Transmission, Chassis.... (and all other things)

It is said Unsprung mass should be very less so that when the car moves and goes over bad roads the Sprung Mass stays at almost level and Unsprung mass only moves and passengers feel very less vibrations

Hence instead of attaching the lower leg directly to the motor.. a Pulley would be connected. this pulley belt will be going above the motor, present above the Hip joint motor. and belt will be having tension using a spring return system like in 3D printer Extruder.

This definitely increases complexity and difficulty in designing and simulating but.. MIT Cheetah 3 is based on this design improvement. 

and the current Hub motor design is followed by ETH Zurich.

I don't know what Spot Mini does but they do it better, so if you find their method then do that.

  Are you sure? yes | no

Paul Gould wrote 10/20/2018 at 00:28 point

Hi agenthimzz, I would like to have as little unspring mass as possible. It was a trade-off between total weight/complexity and unspring mass. The actuators were designed to be integrated into the joint and were made as compact as possible. I found that if I used 3D printed parts as "Fixed-Fixed Beam Moment" instead of the normal "Fixed-Free Beam Moment" they were much better. There were also designed to be linked together in various combinations to form robot arms or humanoid robots. 

This design also meant that I could test my parallel linked series elastic actuator set-up. 

  Are you sure? yes | no

AVR wrote 10/19/2018 at 17:04 point

Been following this project for a while, its huge for open source robotics!

  Are you sure? yes | no

Paul Gould wrote 10/20/2018 at 13:50 point

Thanks AVR. I'm hoping that making the actuator work with Arduino will make it useful for more makers. I think that a combination of this and the "gear down for what" gearbox will make for a perfect system.

  Are you sure? yes | no

jamma wrote 09/21/2018 at 14:36 point

Beyond the challenge of it, why did you create a custom controller vs the oDrive? Do you see any issues with oDrive and your actuator design for mere mortals like me who would go that route?

  Are you sure? yes | no

Paul Gould wrote 09/21/2018 at 15:21 point

I large part of it was to see if I could make it my own way. Mainly using Voltage FOC with a saddle lookup table on a CPU with no floating point. ( ~10 lines of FOC C code). I wanted full control over the actuator with room to grow as I learn more. The PSOC4 is my favorite uC/SOC, plus it has a little FPGA and easy CAN comms. I can connect any type of encoder up to it for motor and joint control. I didn't like the calibration set-up of oDrive (you have to reference every power-up). Using Voltage FOC motor control and dual magnetic encoders, I can tell where the motor and the joint is at any time. I am currently adding Series Elastic to the actuator. The FETs I use are very low R-on. The board also fit's my space requirement and I can make them with a simple soldering iron.
oDrive are a great idea (I've never used one) and they will add more features over time. There is a large community following and they are currently working on absolute encoders, CAN comms, a smaller single axis board and more control schemes. The oDrive CPU is very powerful and has room to do some much more. YOu can modify the code to suit your needs.
The PSOC4 is not an easy CPU/SOC system to learn. Half the work is done in the CPU and half in the FPGA section. Debugging errors can be a pain.
I started looking at porting the design over to a SAM D21 (Arduino Zero) but I didn't like the SPI. I will work more on this in the future as having an Arduino brushless actuator controller will make the project more accessible to more makers.
I hope this helps.

  Are you sure? yes | no

Donovan M. wrote 09/07/2018 at 12:44 point

Great work! I like the compactness of the gearbox system.

  Are you sure? yes | no

lion mclionhead wrote 07/08/2018 at 07:09 point

Didn't have much luck with this concept.  Direct drive is a bit too power hungry.  Modern brushless servos can do pretty incredible things for a lot less money.

  Are you sure? yes | no

Paul Gould wrote 07/08/2018 at 09:09 point

Hi lion, this design is not for everyone. It's not direct drive, the cycloidal gearbox is 25:1 reduction. The cost is about $150 (the time is huge). The aim is 20Nm (200kg-cm), with speed of 0.05sec/60deg (testing required). The backlash is extremely low and it also backdriveable. I created this because I couldn't find a servo that suited me, if you know some good servos please let me know.

  Are you sure? yes | no

Alan Timm wrote 07/08/2018 at 02:30 point

I have an updated design.  The bolts helped, but the actuator still binds when the assembly is compressed axially.  This new version includes aluminum spacers.  Switch back to version 50 for a better view.  

https://a360.co/2yxWgQO

I built a prototype of the base design.  Clearances look good, I'll print out a new prototype when the spacer parts come in with PETG.

https://i.imgur.com/kwM9mN0.jpg

It looks like you're planning on using these at 12v.  Would it be reasonable to assume that it should approach 20Nm of force at 24v?

I've been looking at your spring compliance setup.  I don't see a 3rd sensor for spring deflection.  I think... that if you're measuring shaft count / position and joint position after the spring you should be able to derive force and imitate compliance.  I have an idea or two on how to integrate that into the actuator.  

And after futzing about a bit with the stm32f103, and then moving to the stm32f302 after realizing that the 103 makes you choose between CAN and USB, it dawned on me that there is no point.  The PSOC 4 is a good fit for this application and seems to work well.  PCB design isn't my strong suit, but I'm working to convert your design to a circular board integrating an AS5147 in the center, and using one of your carrier boards underneath for the motor shaft.  This minimizes the SPI cable length, and puts the electronics right on the actuator.

Speaking of which, where are you guys finding the AS5147/AS5047?  Mouser and Digikey are out.

  Are you sure? yes | no

Paul Gould wrote 07/08/2018 at 03:29 point

Your actuator looks good. Go to Discord->Odrive->robotics. Others are making this actuator in metal. I plan on running this on 8S (32V) MOSFETs are rated at 40V. I'm hoping for 20Nm with the 5010 motor. I'm looking at the 6215 Brushless 170KV. 

I have just made a jumping stand for one leg. I haven't added the spring feedback sensor yet. I am trying to work out how to store the spring energy. 

The more I work with SAMD21 (Arduino) and STM32fxxxx the more I like the PSOC4. If you are going to redesign the board, you should use the drv8323 instead. It is much better and has in integrated buck reg. I have started a design/PCB with it. Let me know if you want to see it. (What software are you using?)

I purchased a few AS5147 for testing last year. I am trying to find more but nothing yet.

  Are you sure? yes | no

Alan Timm wrote 07/08/2018 at 04:49 point

I thought the 5010 was spec'd out at 6S 24v max?  Maybe temperature dissapation is the limiting factor.  In that case 32v sounds like fun.

I've been using KiCad.  I grabbed Altium Viewer to get a closer look at your board.  Electronics is a weak spot for me, but I can follow most of the datasheets and documentation.  I'm using your Cypress codebase to learn PSOC creator.

Here's a sketch of what I have in mind.  A circular board with an AS5147 mounted dead center, keeping the electronics close.   No long SPI runs, just power and CAN to each actuator.  motor shaft AS4187 mounted on a carrier board underneath.  USBUART for pre-install configuration. 

https://i.imgur.com/rK4i1fp.jpg

  Are you sure? yes | no

Paul Gould wrote 07/08/2018 at 06:53 point

The 5008 is 6S max and the 5010 is 8S max but it is rated at continuous operation with a lot of air flow. The PSOC code needs to be tidied up, sorry. The round board looks good. 

  Are you sure? yes | no

Gabrael Levine wrote 07/08/2018 at 04:31 point

I've been using the AS5047 boards from massmind.org. However, they only sell assembled boards and not the ICs themselves, so I don't know if that's any use to you. 

  Are you sure? yes | no

Alan Timm wrote 07/09/2018 at 23:24 point

Yeah, looks like both the AS5047 and AS5147 are out of stock in the usual places.

Per Paul, the AS5601 isn't suitable.  

There's also a MA700GQ-P that support SPI, but would require a carrier board change and most likely some code changes as well.  Paul says that this one might work.

  Are you sure? yes | no

Gabrael Levine wrote 07/01/2018 at 22:27 point

Great design! Do you have an estimate of the torque-to-weight ratio? I'm working on a similar project (https://hackaday.io/project/159404-opentorque-actuator) that puts out 56 Nm of torque and weighs 1.2 kg. I'm curious how that compares to the specs of your actuator. 

  Are you sure? yes | no

Paul Gould wrote 07/02/2018 at 16:13 point

The actuator weights 536g with all the electronics and cables. (Not including battery). 

Theory - The Multistar 5008 330KV has a Kt of 0.029 (Nm/A). Max Amps = 27A and a gear ratio of 25:1 x 75% Efficiency = 15Nm

Testing  - (As in the video) Lifted 3Kg at 330mm = 10Nm (Voltage and Amps need to be rechecked).

I haven't pushed it to hard yet and I only have 1/2 the external pins in. 10Nm is enough for my application. I am hoping the big quad i'm making with Series Elastic Actuators with be about 10Kg (including some light/small batteries and with minimal sensors)

I like those large high pole count motors. I wanted to use them but I would have to change my control scheme and not use the magnetic encoder (only works well at 7 pole pairs). I just read that you are using the AS5047 magentic encoder with O-Drive. How well does it handle 0RPM holding positions?

  Are you sure? yes | no

Gabrael Levine wrote 07/02/2018 at 21:58 point

The AS5047 has been working perfectly so far. No issues with holding positions at 0 RPM. Currently I'm just using the incremental ABI interface, but I'm going to set up the absolute position interface so it doesn't have to search for the index pulse on startup. 

I see you're using the AS5147. How come you say it's limited to working with 7 pole pairs? That sensor has a resolution of 2048 CPR according to AMS' website, which should be plenty for any high-pole-count motor. 

In regards to the efficiency of your gearbox, have you measured it at 75% or is that just an estimate? 75% seems low for a single-stage cycloidal reducer. If you're having issues with sliding friction, I recommend printing the cycloid disks out of nylon. I used Taulman Alloy 910 for the gears in my design and they run very smoothly. 

  Are you sure? yes | no

Paul Gould wrote 07/03/2018 at 14:19 point

Gabrael - The data sheet of the 5147 says the the UVW interface support 7 poles pairs, so I assumed that it should only be used with 7pole pair motors for all the interfaces. I might be wrong on this and will have to do more research. I would like to use the higher pole count motors with a lower KV and higher torque and lower gear reduction. 

Did you try any other motor? How long does the 9235-100KV take to spin up to full speed? What RPM are you getting?

I haven't measured the efficiency yet, I would rather underestimate. I don't think I am having sliding friction problems, it is all rolling elements. I have some Nylon but I have to upgrade my printer so that it can reach a higher temperature.

  Are you sure? yes | no

Gabrael Levine wrote 07/04/2018 at 02:09 point

The 7 pole pair limitation only affects the UVW interface, since it outputs commutation signals for each of the motor phases. Since you're doing the commutation from the microcontroller, you can use any number of pole pairs you want. 

The 9235-100KV spins up really fast. See here: https://www.youtube.com/watch?v=0rMyaOB3w1Q

The max RPM should be 2400 (24 volts * 100 rpm/volt). I haven't confirmed this though. 

These 9235 motors are great, by the way. They have so much torque you could use them in a quadruped with no gear reduction at all. 

  Are you sure? yes | no

John wrote 07/01/2018 at 20:44 point

Your design is impresive! It got me to thinking about how animals and insects can jump so well. In biological systems that are "jumpers" (fleas, grasshoppers, kangaroos, even humans), the tendons are loaded before a jump, and then the "release" happens ... which basically adds a spring into the system. There are linear wound springs (like in a dog walking leash - but stronger!) that might be usable in your system. You would have to "pre-wind" the spring, and then trigger it. Given a strong enough spring, you could get some pretty decent "instant" burst of power from a "small" addition. You mention backlash; if you have rotational transducers, couldn't you just "fix" that with software? That might introduce too much delay, maybe. Best of luck, and keep posting! Between you and Mike's Robot Dog (see: https://hackaday.io/project/52956-mikes-robot-dog/discussion-108871), y'all are making me want to get a 3D printer, or learn to cast brass, etc!

  Are you sure? yes | no

Paul Gould wrote 07/02/2018 at 15:48 point

I am working on creating a video of the parallel linked series elastic actuator that is on the big quad. I am trying to work out how to store the spring's energy on foot fall/ landing and release it later in the gait. 

The backlash is quite small, it is the main reason I chose the Cycloidal gearbox design. It is more than good enough for e quad, maybe not for a robotic arm. I was after speed and torque rather than precision. 

  Are you sure? yes | no

Alan Timm wrote 06/28/2018 at 18:05 point

Hey Paul, I've been really studying your actuator model, and I have a few suggestions that I'm incorporating into my build.  The rest of my parts should be arriving next week.  Here's a link to my work in progress model:  https://a360.co/2yxWgQO

 - If you separate the eccentric lobes you can pin them separately during assembly. I'm pretty sure that having a single pin driving both lobes is going to be the weakest point at load.  I'm also looking at 2mm v 3mm retaining pins.

 - I've reduced the drive rollers from 8 to 6, and included 6 through hole bolts.  The locknuts need to be trapped into the motor bracket earlier in the assembly.  This should make the actuator much stronger.  I'm on the fence between having 6 drive rollers and 6 bolts, or going 4 and 4.

I hacked together a parametric cycloidal gear box generator into Fusion 360, changing ratios is almost automatic by adjusting the parameters.  I've been going back and forth between a 26:1 and 32:1 gear reduction for the Gartt 5010.  Out of curiousity, what design software are you using?

https://i.imgur.com/29jmPCP.jpg

https://i.imgur.com/juXSZ5D.jpg

On the electronics side, I have even more catching up to do.  How are things going on your next controller?  Depending on how invested you are in your SAM D21 design, the stm32f103c8 may be another option.  It's what's used in the "STM32 blue pill" board.  They're cheap, fairly well supported, and include CAN as well as a bunch of other features.  

  Are you sure? yes | no

Paul Gould wrote 07/02/2018 at 15:42 point

Hi Alan, Adding the bolts is a good improvement. Just be careful you still have enough material at that diameter so that it doesn't weaken the gear. I tried to replace the 3mm rods with M3 bolts with a long shank. I had some problems getting the alignment correct. (It also took along time to take the unit apart). 

I have just created a parametric cycloidal gear in Autodesk Inventor (All my CAD is done in this program, I have it on my laptop for my day job). 

Have a look at the testing of the motors here http://build-its-inprogress.blogspot.com/2016/01/motor-characterization-for-small.html

This is main reason I choose the Multistar Elite 5010/5008. I am looking at Foxtech and Arris for their 5010 motors but I just searched the Gartt 5010 on ebay and they are 1/2 the price. mmmm

I got the SAM D21 up to the point where I don't like the CPU. The SPI only has a single buffer TX and RX and requires the DMA to use it properly/efficiently. I wanted to create an easy solution (Arduino) for brushless actuator control. I'm not sure if I can hide the DMA in an Arduino library. I have thought about using the STM32F3 family but the PSOC4 is just so good. The problem is that is too complex for most makers.

I have some STM32Fx development boards so I will see what i can up and running. The stm32f103c8 will still require the use on DMAs for the SPI unless I change the structure of the code/interrupts.

  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