ODrive - High performance motor control

Hobby brushless motors are incredibly cheap and powerful. However we need a way to make robots out of them. ODrive is that way.

Similar projects worth following
Stepper motors are ubiquitous in hobby robotics projects: If you make a robotics or automation project today, it is very likely you will use them. Almost all DIY projects from 3D printers and CNC mills, to other kinds of projects like air hockey robots, use them. However in industrial automation, brushless servomotors have taken over, and it's clear why: They don't lose steps, are much more powerful, efficient, and silent.

However, brushless motors are not unique to expensive industrial automation equipment. In fact, you can get some very powerful and cheap motors at hobby shops. The electronics to drive these motors are also dirt cheap. So how come virtually no non-industrial automation systems use them?

To be honest, I have no idea. Seriously, a driver that allows this should clearly exist.
But since it didn't, I decided to make one.

And you are invited!
This project is open source, both in hardware and software, and I warmly welcome anyone who wants to join

Key specs:

  • 2 motor channels
  • 1 DC-DC converter channel: For powering the system with an arbitrary voltage power supply.
  • 24V bus voltage
  • 150A peak motor current
  • 75A peak DC-DC current
  • Encoder feedback for arbitrarily precise movements
  • Supports power regeneration
  • Use of a high power density Li-Po battery means you can achieve >1kW peak power output with only a modest power supply.
  • It will feature various optimal control strategies and motion profiles.
  • Permissive licence on both hardware and software: You use this project in anything you like, even commercial products (as long as you attribute this project's contributors).
  • Low cost: The target is to reach less than $50 for a fully assembled board.


The design is based on two earlier prototypes.

Here are some very simple demos with v2. The peak power output in these tests were only about 60W. The new version (v3) will be able to deliver much more power.

Below is a demo with v1. The mass being moved is 3kg, and the peak power was about 200W. The noise is not from the motor, but from my poor mechanical design which means that the belt teeth rubs against the idler pulley edge.

How to get Boards and how to contribute

Check out this post.


  • USB Serial port
    • G-code parser for interfacing with existing automation tools
  • CAN interface
    • Protocol TBD. One possibility is to support a subset of CiA 402.
    • Many types of command modes:
      • Motion profiled position commands
      • Velocity command
      • Torque command
  • Step/direction input
  • Some general purpose digital and analouge pins


The drive is designed to be able to deliver incredibly high peak power, more than 1kW per motor channel. However, power supplies that can deliver this kind of power are expensive. Also, when the actuator is being decelerated, there is energy absorbed. Most power supplies do not like having energy dumped back into them.

The solution: Put high-power energy-storage on the DC bus. A battery like this one can deliver around 3kW. These types of batteries also have a fairly high charge rating, and if the regeneration is only over a couple of 100 milliseconds, they can probably handle a fair bit more than specified. Thus, they should be able to handle the full range of regeneration power in most robotics applications.

This means we have a variable voltage DC bus, that fluctuates with the battery's state of charge. So the way we power the system is via a DC-DC converter. There is another upside to this as well: we can use any voltage power supply and just convert it to the bus voltage. I expect most people will use an inexpensive ATX power supply (specifically the 12V rails). In many robotics applications the motion consists of several discrete movements, only some of which are high power. In this case, we can have access to a very high peak power, but only require a very modest power supply.

Another thing that's nice about using a battery for stabilising the DC bus, is that if multiple of these drives reside on the same bus, there is no fighting over the regulation of the bus voltage: a single board can have the DC-DC connected to a PSU, and the rest of the boards in the system can just use the bus. If fact, you can even skip populating the DC-DC on the slave boards.


So this project is good for some things, but not everything.

You should use this drive in your project if:

  • You need high power: >1kW peak power per channel!
  • You need high precision: Encoder feedback control means that the precision is as high as your encoder's precision, which can be very very high.
  • You need reliability: Encoder feedback ensures that the drive recovers from positioning errors: no more missed steps.

You should not use this drive in your project if:

  • You need high torque, but don't care about speed, and you don't want to use any gearing. If this is the case, steppers are probably better for your project
  • If you are interested in very tiny motors and robots, then you should check out these awesome micro robots instead!

If you need industrial...

Read more »

  • The Boards Have Arrived!

    Oskar Weigl01/20/2017 at 17:39 4 comments

    Check this out, a box full of goodies:

    Inside each of the 5 packets, are 6 ODrive v3.1. And they are in lovely black and gold. The manufacturing quality of CircuitHub is really top notch ;D

    Here is a picture of the new boards on the testbed. Actually I never used the test bed in the end, since the manufacturing quality was so good. I don't expect any defects, and with such a small batch I don't mind replacing a board if it was indeed a DoA.

    ODrive v3.0 next to v3.1. Black looks great ;D

    Preparing some kits to go out with the first round of pre-alpha board orders.

    With the help of the early developers who will be helping, hopefully Alpha release will occur soon. If you want to get notified when that happens, make sure to sign up for the board manufacturing run: Link.

  • Sexy machine assembly

    Oskar Weigl12/24/2016 at 04:13 1 comment

    In my previous post I mentioned that the first batch of ODrive v3 is being assembled. I asked CircuitHub to take a video. And holy shit, industrial pick and place machines are so sexy! Hopefully ODrive will enable inexpensive machines that go this fast ;D

  • Two motor operation

    Oskar Weigl12/14/2016 at 18:37 0 comments

    Two motor operation is finally done. For those of you who are interested, here is the interrupt-dance that makes it all work: Link.


  • Prototype manufacturing run!

    Oskar Weigl12/03/2016 at 09:51 9 comments

    The time has finally come for the manufacturing run of ODrive v3.1. They are now on the way, and should arrive early to mid January.

    At this stage, around 20 board kits are going out the people who signed up to the "Inital development" phase.

    Since the boars are going out to just a small group of early developers, I will have the time to personally get you up to speed with the codebase and help to get going with the hardware. Then, together, we can prepare some stuff that is a bit more stable and a bit more documented for when the alpha testing begins.

    The cost for me to get this small batch of boards manufactured was $96 per board, so that is the amount I need to ask for a kit, plus shipping.

    The kit involves basically everything seen in the above picture, and consists of:

    • ODrive v3.1
    • USB Programmer
    • A set of the optional large gauge wire screw terminals
    • A set of pin headers
    • Some nylon standoffs

    I hope that ODrive will be able to help you make an awesome robotics project, thank you so much for your contribution to helping people have access to open robotics hardware and software.

  • Testing: Progress update

    Oskar Weigl11/26/2016 at 15:28 1 comment

    I mentioned in a Previous post that before we can start manufacture, we need to have some basic functionality tests to preform QA testing. For a couple of months I was unable to work on this project, but now I am back to being able to spend most of my weekends again. So I have been able to make some progress.

    Currently the following is ready:

    • Testing rig with a motor and encoder
    • Testing PCB with pogo pins to make quick connections during testing
    • Low level code to trigger current sensing and motor control from the 3-phase PWM pheriperal
    • Online current sensor calibration
    • Lock-in, open-loop voltage vector motor spinning
    • Automatic motor resistance measurement

    The following is still left to be done before manufacturing can commence:

    • Test that the bed-of-nails board makes good electrical contact
    • Check that the transient response of the current sensing is good
    • Low level code to allow hand-over of the ADCs between the two motor channels
    • Write the encoder drivers
    • Finish up the test routines to be able to detect faults

    Pictures and video!

    Below is a motor-encoder pair doing lock-in, open-loop voltage vector motor spinning.

    New motor test cradle. The design is openly available, Link.

    Some pictures of the bed-of-nails. The design is openly available, Link.

  • Production testing: Hardware

    Oskar Weigl08/20/2016 at 05:52 0 comments

    In order to finish manufacturing of the first batch of v3 boards, we need a simple way to test if the boards work as they come off the automated assembly. Since I want to get the boards out to people as soon as possible, I will only test the very basic functionality. More features can be added to the tests later.

    The basic functionality I want to test is:

    • Does the logic supply power up?
    • Does the firmware boot up?
    • Execute some simple test voltage vectors to test the current sensors.
    • Spin a motor open loop (no encoder feedback)
    • Does the encoder work?
    • Spin the motor closed loop.
    • Same tests on the 2nd motor channel.

    This requires two main components: the test hardware and the test software. In this post I will only focus on the test hardware.

    Test board

    To quickly test the board, one of the best ways is to make a bed-of-nails that can make connection to all the required places on the board for testing all in one go. The idea is to use spring-loaded pins like these pogo pins that sit on a separate PCB underneath that can break out the connections to the test equipment. @Thomas Branch made one on Circuit Maker here. At the time of writing the design is not completely finished reviewing yet, but should be done soon.

    Here are some picutres:

    Encoder - motor rig

    To do the aforementioned motor tests, we need a motor and an encoder for each channel. The setup is designed to be as simple as possible, so it is just a motor directly coupled to an encoder, nothing else. I picked this gimbal motor since I just happened to have it lying around. But I picked a gimbal motor in particular since its high phase resistance means that if there are any bugs that cause the voltage to be switched on much higher than intended, it means that it doesn't just blow up immediatly, just melts slowly (;

    I picked this encoder. You can find the design on onshape. Below are some pictures:

  • Boards and Development

    Oskar Weigl06/26/2016 at 22:01 12 comments


    The number one thing people have asked me is: "When are the boards available?". It took a while to get ready, but I am now happy to announce that the release candidate of board version 3.1 is ready! You can review this release candidate in any of the following ways:

    • You can review the original Altium Designer files in the on GitHub.
    • You can review the schematic and the BOM.
    • I converted the AD design to the free tool CircuitMaker. Check it out here.

    I am not sure if the continued development will be with the AD files in GitHub, or on CM, it depends on the input I receive from the community.

    After identifying and working around some bugs present in v3.0, I was able to verify that the basics of the board design does indeed work as expected. In v3.1, I have fixed the bugs that were present in v3.0, and made some minor modifications. I have refrained from any major modifications or improvements to make sure that the changes that were applied should only fix the issues, and not introduce any new ones. Therefore, I am fairly confident that once this version is released, that it should be fine to distribute the first batch of development prototypes.

    Board production runs

    So while the design is open source, and anyone is free to go and make boards, I realise that the majority of us would prefer to just buy an assembled board. So I will facilitate some board manufacture production runs. I realise that some people want to get their hands on a board at the early alpha stage, while some want to reduce the risk and want to join in when the project is ready for beta release.

    To that end, I have prepared this survey:


    Roadmap of features

    To help decide when you would want to join the project, or what ODrive can do for you at what time, it makes sense to have a roadmap of features. You can see the first draft of the roadmap of features we want to get into the first usable release of ODrive. The milestones to look out for in particular are First usable release, and Alpha testing production run. When these are done is basically when the alpha production will happen.

    This roadmap is intended to be dynamic, and will change with feedback from the community, and new ideas come about. Your input to this roadmap is very welcome!

    How you can contribute

    Have a look at the roadmap. If you feel that have the skills to implement any of the features we want to include in ODrive, then please join the development effort and help make them become a reality! If you have an idea, or made a feature on your own, just get in touch, and we can get it in the roadmap, or get the feature merged.

  • Surface mount soldering: Easier than you might expect.

    Joshua Elsdon05/10/2016 at 11:52 0 comments

    The design of the ODrive is almost entirely surface mount, the only exceptions being some of the heavy duty screw terminals and a couple of rows of headers for IO. This design choice is likely not a surprise to most of you, SMD's are usually cheaper, more compact, easier for industrial production and sometimes the components we want aren't available in any other way!

    So SMD it is! However this does pose hobbyists a bit of a predicament. Most people have not done any serious construction with SMD's and they (quite reasonably) think they are a hassle to deal with: this post is about dispelling some of those worries.

    Before any soldering can happen, something to solder onto must be acquired. The PCB in this project is only 2 layered, so it could be home-brewed if you are skillful, but we would strongly recommend against that. There are many vias that need plated through hole (PTH), many 0603's in close proximity that pretty much require a decent solder mask and many of the tracks are very thin. Though I think the main reason for going for a 'proper' PCB is that thanks to the hobbyists constantly demanding more quality for less cost from PCB houses, they are very cheap to get manufactured. You can get 10 copies of this board from china for $35 + postage, pretty epic, though there are some extras you should seriously consider adding if your budget allows.

    • Extra copper thickness: Most board houses will offer '2oz' copper, which is twice as thick as the standard offering, if you are going to push the board to the limit (and we hope you do) this will help the board handle the 100s of Amps without overheating/burning out. Though you can skip this option depending on the particular application you have in mind.
    • Steel solder stencil: All decent board houses will offer you the option to get a steel stencil, where both sides of the board will be put on the same stencil. The stencil varies in cost with manufacturer, ours was $18. This will make your life much easier, though of course there are many ways to skin a cat; you can also use home made stencils using a laser cutter, or commit some time with a solder paste syringe and develop beasty hand muscles ;)
    • Coloured solder mask: Why, because sex appeal, that's why.

    With the above things in mind we can strongly recommend Elecrow, primarily because their stencils are cheap, but all of the other optional extras are also on par with other board houses. The quality is very good, but nowadays that goes for all of the major board houses catering to hobbyists.

    You have your shiny new board, and have ordered the required components from your local supplier (Farnell and RS are good choices in most countries). Time to get soldering! The most important step to get right is applying the solder paste. Having the right amount of paste will save you from most of the pitfalls, as long as the gods of surface tension are on your side. Place your board on the table and surround it with all the spare boards. Have a friend hold the stencil down whilst you pull a bead of solder paste across all the holes with an old credit card, try and get all the holes filled in one swipe, then scrape backwards such that the stencil is mostly shiny steel again. Order obedient friend to lift the stencil straight up. This should leave perfect little blobs of solder, wipe off and start again if there is lots of blobbing.

    The stencil and board as supplied from Elecrow.

    Nice, square, separated solder piles. Brings a tear to my eye.

    When you are satisfied with your pasting, we can now move onto pick and placing. In industry this is usually done with a big expensive machine, but for us, obedient friend to the rescue! I jest, you can do this yourself, but it is more fun to do it with a friend. One of you can dispense the components, dictate where they should go. The other can spend their time placing the components with tweezers and trying not to smoosh the whole lot with their wrist.

    Three at...

    Read more »

  • Hobby motors in your robots

    Oskar Weigl05/08/2016 at 15:02 14 comments

    I'm not a mechanical engineer. So what follows is probably not the neatest or most optimal solution. In fact, I would love to see a project with some improved setup. Nevertheless, I would like to share with you what I have learned from using these motors in my robots.

    My favorite type of motor (so far) for robotics applications are the Turnigy Aerodrive SK3 series.

    This is for several reasons. Apart from the things that almost all hobby motors have, which is low cost and high power, is that it has a low kv number (more on that later), and has the main shaft coming out of the "back" of the motor. If you look at the above picture, you can see that the mounting plate is on the same side as the shaft. This means that if you attach a pulley to the shaft, and pull sideways on it with a belt, the leverage from the bearing to the pulley is as short as possible. See the below image (which is from the rig you can see in the 3rd demo video) for an idea of what I mean:

    Another great thing is that they give you the possibility to mount something on the spinning side too. The motor even comes with an adapter that attaches to the seen trio of tapped holes and gives you a shaft:

    This is perfect for attaching the encoder:

    For your convenience, I compiled this table of motors that I have had good experience with. The motor used above is the Turnigy Aerodrive SK3 - 4250-350kv.

    Power rating
    Peak Torque
    HobbyKing Donkey ST4010-820kv137001.210.19
    Turnigy L3040A-480G201,0001.790.19
    Turnigy Aerodrive SK3 - 4250-350kv361,2002.360.27
    Turnigy Aerodrive SK3 - 5065-236kv561,8504.210.53
    Turnigy Aerodrive SK3 - 6374-149kv802,2507.770.84

    Pick your motor!

    I made this spreadsheet to help you pick out a motor for your project. Let me know if there is something that needs explaining, or adding.

View all 9 project logs

Enjoy this project?



Alain de Lamirande wrote 01/09/2017 at 14:51 point

Guten Tag Oskar ! Wie gehst ? Mein Name ist Alain. Ich bin von Kanada. Ich interessiere mich wirklich für Ihr Projekt. 

Do you have some boards, ready made to sell that I could test ? I know that this is open source, but I need a quick solution to test before I can make my own !

Danke für alles !

  Are you sure? yes | no

Toon wrote 11/25/2016 at 13:04 point

I just saw this :
also on hackaday.io
Price is a bit to much at $169 + shipping and I don't think they will reach the $75K goal.
I think ODrive can be cheaper with the same performance. 
Also they use a 14bit magnetic rotary position sensor from Austria Microsystems claiming accuracy of +/- 0.2°. I know we had a conversation before about this but I still think it could be a nice option compared to the "600P/R Incremental Rotary Encoders" which is bulkier and a bit more expensive.

Looking forward for news on the new test-PCB's. 

  Are you sure? yes | no

Oskar Weigl wrote 11/26/2016 at 10:12 point

Thanks for sharing!

It looks like it is stepper motor based. In fact, it looks very similar to a Mechaduino, but with a web interfaced strapped on.

When it comes to performance, it depends on what you mean. But for sure in terms of power output, ODrive will be much higher.

Yeah I think the magnetic encoders are a good idea to support, and I intend to support it on ODrive v4.

I have some progress to share, I will do a writeup to share hopefully this weekend.


  Are you sure? yes | no

Toon wrote 11/26/2016 at 17:08 point

The HDrive is a brushless direct drive based on a two phase hybrid stepper motor. They show a little movie where they spin it to 10.000 RPM. Impossible with a conventional stepper motor. Will be something between a BLDC and a stepper.

Mechaduino uses stepper motors. 

I like the idea of an webInterface and having a udp socket as an interface. 

  Are you sure? yes | no

Maciej wrote 10/30/2016 at 19:08 point

Is it usable now? I'm thinking about testing it in big 3D printer, just want to know if step/dir input works? Than maybe I'll be able to help you guys developing it further ;)

  Are you sure? yes | no

Oskar Weigl wrote 10/31/2016 at 10:38 point

Hey, sounds cool! Unfortunately the project is quite delayed, but it will get back on track in the next week, which is exciting!

If you want to be informed when you can buy a board at alpha testing stage, which is what it sounds like to me, please sign up here:

  Are you sure? yes | no

volatile666 wrote 11/09/2016 at 17:54 point

So, how's the status now? ;)

  Are you sure? yes | no

Oskar Weigl wrote 11/10/2016 at 08:14 point

@volatile666 Last weekend I ordered some test-PCBs (bed of nails). So stuff is moving along again. Once the test-routines all work, we can start manufacture.

  Are you sure? yes | no

volatile666 wrote 09/14/2016 at 15:10 point

Any news? :) No news is good news?

  Are you sure? yes | no

Oskar Weigl wrote 09/15/2016 at 15:01 point

Currently the project is a bit stalled unfortunately. It should pick back up in full force around November (:

  Are you sure? yes | no

PointyOintment wrote 09/01/2016 at 02:39 point

Could you do a writeup on how you arrived at your current design (i.e. what parts and configurations you're using and why)?

  Are you sure? yes | no

Oskar Weigl wrote 09/01/2016 at 07:38 point

Yes I can do. Currently my priority is to the get the manufacturing and base functionality done. After that I can do a writeup.

  Are you sure? yes | no

Toon wrote 08/23/2016 at 11:55 point

How well does this system work with a free spinning motor? 

I had lost of trouble controlling them if they are not loaded. Oscillating to much, and can't get the PID parameters right. Adding a load to the axle of the motor made it easier.  

  Are you sure? yes | no

Oskar Weigl wrote 08/24/2016 at 05:33 point

You can calculate them analytically, or you can do a structured set of tests. I'll write you a PM.

  Are you sure? yes | no

mariano porta wrote 08/15/2016 at 08:13 point

Hi! I'm not sure if I'm in the correct place... I'm from Argentina and looking for motor alternatives to make linear actuators for a flight motion simulator, this motors are great because they are available in my country and relatively cheap compared with big DC motors. Anyway, I use Simtools ( ) to transform telemetry in motion, and send from the PC to an Arduino Uno r3 and then to a Motomonster driver o similar. Is there a way that your controller  will be used to replace dc motors and drivers and connect to arduino or direct to the PC and Simtools?  Sorry to bother with this, but we have a big community and a lot of people will be interested. Thanks anyway and sorry for my English!

  Are you sure? yes | no

Oskar Weigl wrote 08/15/2016 at 13:24 point

There is a USB Serial port that should be able to receive commands (position, velocity, and/or force). You may need to make a simple protocol to interface with your PC software, but that should be quite easy.

  Are you sure? yes | no

mariano porta wrote 08/15/2016 at 14:44 point

Thanks for your reply! When do you think you would have some boards to test?

I made a thread at that forum so more knowledgeable guys than me could see your development 

  Are you sure? yes | no

Oskar Weigl wrote 08/16/2016 at 03:13 point

@mariano porta: Unfortunately the board production is taking longer than I want. You can sign up to get notified as soon as they are ready at the link in this post:

Cool, I made a silly post on there so I can get notified by email to follow the discussion.


  Are you sure? yes | no

Michael Bushey wrote 08/11/2016 at 06:52 point

Please don't use CircuitMaker, us Linux people are excluded. :( This project is amazing! 

  Are you sure? yes | no

Oskar Weigl wrote 08/11/2016 at 09:56 point

Feel free to port the project to some other CAD package. Personally I am so used to AD and CM that I will put up with rebooting into windows when I need to do some PCB work.

  Are you sure? yes | no

Michael Bushey wrote 08/15/2016 at 21:59 point

I would like to create the board on KiCAD. Where can I find the schematic and the BOM? The links are dead.

  Are you sure? yes | no

Oskar Weigl wrote 08/16/2016 at 03:10 point

@Michael Bushey: Please let me know which links are dead, I will try to fix them. You can find the relevant files in the ODriveHardware github link in the sidebar (then go to the v3 folder).

  Are you sure? yes | no

Michael Bushey wrote 08/17/2016 at 19:48 point

The sidebar link is good. :)

The first three links under Boards and Development -> Boards! are dead:

You can review the original Altium Designer files in the v3.1rc branch on the GitHub.
You can review the schematic and the BOM.

  Are you sure? yes | no

Oskar Weigl wrote 08/18/2016 at 04:56 point

@Michael Bushey: Okay I fixed the links you mentioned, thx for pointing them out.

  Are you sure? yes | no

Joshua Elsdon wrote 08/18/2016 at 13:40 point

I feel your pain, though CircuitMaker is really good, worth the effort of rebooting into Windows, even if it is the only thing you run there. There are some shortcomings, though essentially it is all the bits of their full package (Altium Designer) that are needed, without all the mega fancy stuff cluttering the menus.  Not sure if CM will run in WINE. 

  Are you sure? yes | no

alexisdal wrote 07/23/2016 at 06:32 point

can't wait to try it out. Excellent market analysis.

  Are you sure? yes | no

Oskar Weigl wrote 07/23/2016 at 07:52 point

Sign up for a board, and you can try it soon!

  Are you sure? yes | no

lukejs3 wrote 07/14/2016 at 11:54 point

How suitable would something like this be for a CNC knee mill servo? It looks like the applications shown are all fairly high speed, low torque. I guess a belt drive reduction would help. Any thoughts?

  Are you sure? yes | no

Oskar Weigl wrote 07/14/2016 at 23:22 point

Yeah, the only difference is the gearing. I haven't gotten around to doing a high torque/force demo because I don't have a strong enough frame for that. But many CNC people have shown interest, and that is definetly one of the intended applications.

  Are you sure? yes | no

Kearney Lackas wrote 07/13/2016 at 15:46 point

Looks like have nets for hall effect sensors (M0_AH, M0_BH, etc). Is this right? Are these implemented in firmware yet?

  Are you sure? yes | no

Oskar Weigl wrote 07/14/2016 at 10:44 point

No, the M0_AH stands for Motor 0 phase switching for the A phase, on the High side mosfet. There are corresponding M0_AL for the low side mosfet.

  Are you sure? yes | no

Toon wrote 07/11/2016 at 09:38 point

Which encoder do you use at the moment? 

Incremental quadrature A B (Z) aren't that cheap.  

Have may have found another option: or magnetic Position sensors with ABI or UVW output. 

  Are you sure? yes | no

Oskar Weigl wrote 07/11/2016 at 12:22 point

On my last rig I used something like this one, which is a tad over $10:

I have considered using these magnetic rotary encoders, but the issues with them are latency and precision. For example, the ones you found only have 360 ticks per revolution (whereas the one I linked has 2400). If someone has an application where such a precision is not required, they can indeed be used.

  Are you sure? yes | no

lukejs3 wrote 07/14/2016 at 14:37 point

Oskar, the AS5047 (and I guess probably many/all of those AMS sensors) have an incremental output too - if you use that would you still have a latency issue?

  Are you sure? yes | no

Oskar Weigl wrote 07/14/2016 at 23:19 point

@lukejs3: Ah yeah, that might work then actually! Thanks for that!

  Are you sure? yes | no

Toon wrote 07/26/2016 at 09:07 point

I got an AS5040 adapterboard with incremental output. Works nice with my Turnigy Aerodrive SK3 - 3542-800kv which fit perfectly on a nema17 stepper mount. I made a 3D printed support for the sensor and fixture for the magnet. 

Next thing is to wait for the ODrive test board or make my own ESC.
I tried a car ESC from Hobbyking but they're not optimized for slow speed and have a lot of lag in response. Didn't really think I could get this to work, but one could always try.

  Are you sure? yes | no

Oskar Weigl wrote 07/27/2016 at 12:13 point

@Toon: Sounds awesome! I think it will work if the AMS is up to snuff ;D.

  Are you sure? yes | no

nathan wrote 07/05/2016 at 04:38 point

Fantastic project. You mentioned the alpha boards will be released in a few weeks, any updates? The description mentions 150A max motor current, is this true for the v3.1 boards? At what voltage will ODrive be able to power the motors? Thanks!

  Are you sure? yes | no

Oskar Weigl wrote 07/05/2016 at 08:49 point


Yeah you can find the latest update about the boards here:

The 150A is the expected peak current rating, yeah for v3.1. The bus voltage is designed to go up to 24V.


  Are you sure? yes | no

nathan wrote 07/05/2016 at 09:26 point

Thanks Oskar! Signed up to get a board

  Are you sure? yes | no

mitja.kumin wrote 06/08/2016 at 18:17 point

In interfaces list is mentioned the possibility of step/dir input. If I look at schematics there is no such input provided. So the question is: Is there only CAN interface and no direct step/dir input? In this way there is no way to hook the drive to mach / linuxCNC / usbCNC etc... Which PC software can be used to interface to this drive?

Can we expect step/dir input in the near future? This would be awesome feature and the drive could be used with any well known CNC software for hobbyists.

  Are you sure? yes | no

Oskar Weigl wrote 06/08/2016 at 18:26 point

It should be possible to use the GPIO port and interrupts to do software counting of the step pulses. This will have some performance limit, I'm not sure what it would be, but maybe it is sufficient.

In the next revision we can think hard about how to do it in hardware.


  Are you sure? yes | no

mitja.kumin wrote 06/08/2016 at 19:09 point

I believe it would be a really big step forward if you can provide some hardware solution so it is possible to connect to the drive the same way as with stepper drive. I really don't have a clue about writing the code for the MCU. I can tell only what I wish for a servo drive in the hobby range. This would be setting the parameters trough some PC interface (length traveled at one full rotation of motor, PID parameters, encoder parameters, etc...)and simply hooking the drive to step/dir/enable for each motor separately. 

So let's say you have 10mm of movement at one full revolution of the motor, and the encoder gives 400 pulses per revolution. This means you have to put 400 pulses in step input to move axis for 10mm. With one pulse you would move it for 0.025mm. With encoder that has higher pulses per revolution you are getting better linear resolution. Speed is controlled with step pulse frequency- the higher, the faster the motor.

Drive should get the command where(dir) and how far(number of step pulses) to go, and drive should take care of the rest. Enable could be used as a motor brake function. But I'm quite certain the motor would need a cooling fan so it won't overheat if there is no turning of the motor (or slowly turning). Here I'm thinking about putting motor and encoder in some neat housing in make some hookup terminals or connectors. I can do machine hardware solutions really gut but I lack knowledge at programming. 


  Are you sure? yes | no

Oskar Weigl wrote 06/09/2016 at 08:37 point

Yes, what you describe is what I also mean. When I say to use the GPIO ports and do the counting in software, i still mean it should be directly possible to connect the ODrive to step/dir signals. The software part is just exactly how the counting is done by the ODrive, as a user this is not visible.

The flow you describe, with the configuration with the PC, etc, is exactly how I plan to do it. I think it also makes sense to have a configurable rotation angle per step pulse.

I also think that for high performance applications it will be necessary to put the motor and encoder in a housing, that has an intake filter and an exhaust fan, for forced air cooling. Feel free to contribute with a design! ;D


  Are you sure? yes | no

Douglas Plumley wrote 06/07/2016 at 02:04 point

Hey Oskar, very cool project!  I'm very new to electronics, trying to expand my horizons with a project with some friends.  Your controller looks like a great alternative to the super expensive industrial controllers we've looked at, any chance you'll be partnering with a company to sell pre-assembled/soldered boards?

Keep up the great work!

  Are you sure? yes | no

Oskar Weigl wrote 06/07/2016 at 07:25 point

Hey, thanks! Yes, I plan to do a small production run soon with some alpha boards, and then a larger run when the drive is ready for beta. I intend for the drive, once mature, to be available to just buy the assembled hardware.

  Are you sure? yes | no

Consultant wrote 06/03/2016 at 19:33 point

The idea is fantastic however getting it into either my CNC or 3D printer looks to be a problem.

Without typical stepper motor dir/step inputs, there is no path available currently.

There is no CAN on any typical controllers I am aware of (for cheap).

Whats the strategy to make this get into mainstream?

  Are you sure? yes | no

Oskar Weigl wrote 06/03/2016 at 19:50 point

I think I will try to cater for hardware step/dir input for a future version. Many people have been asking for a 3 axis version, so maybe when the time comes to do that, we can use a larger package and hence map timer/counters to do the step/dir counting. I still have to check if there are enough compatible timers/counters, but I think so.

Until then, it should be possible to use the GPIO port and interrupts to do software counting of the step pulses. This will have some performance limit, I'm not sure what it would be, but maybe it is sufficient.

  Are you sure? yes | no

Consultant wrote 06/03/2016 at 20:08 point

So you would be writing the software converter from pulses to position or someone else would take on that task?

  Are you sure? yes | no

Oskar Weigl wrote 06/03/2016 at 21:23 point

Whoever does it first wins a high five!

  Are you sure? yes | no

volatile666 wrote 05/29/2016 at 15:04 point

How did you measure the motors torque? Do you maybe even have torque/speed curves?

  Are you sure? yes | no

Oskar Weigl wrote 05/29/2016 at 15:31 point

I do have this plot of theoretical torque and power for the Turnigy Aerodrive SK3 - 4250-350kv motor at 60A. I haven't done any dynamometer tests. I did do an analysis on the achieved trajectory of the v2 rig (that you see in the first video), and it suggests that the real torque is close to the theoretical one.

  Are you sure? yes | no

volatile666 wrote 05/29/2016 at 18:13 point

Thank you! You dont happen to have a speed/torque curve for the motor when short-circuited and driven externally?
Im thinking about using this motor as a brake, but for this to work I need to know if the motor produces enough current (and thus torque) when short circuited for a specific speed range.
Using an electronic load I could then preset a current (and thus torque) to achieve a specific braking torque.

  Are you sure? yes | no

Oskar Weigl wrote 05/29/2016 at 18:27 point

@volatile666: I'll PM you.

  Are you sure? yes | no

Thorsten Eggert wrote 05/29/2016 at 12:59 point

Funny, I started to build and code a very similar thing, a stepper replacement board for use with brushed motors. I had no idea how to use brush less ones... I started with a AVR and switched to a STM407. You wrote the version 3 of the hardware is untested at the moment, when do you think it is tested good enouth so that interested people can start building ?

  Are you sure? yes | no

Oskar Weigl wrote 05/29/2016 at 13:15 point

I'm not really sure, I can only really work on this project on the weekends and sometimes in the evenings. But I'm trying my best to get the major components tested. I have already found 2 (minor) problems with the circuit.

We should be talking weeks, not tens of weeks.

This is me today: 


  Are you sure? yes | no

Thorsten Eggert wrote 05/29/2016 at 13:28 point

Sure, I think we all work on our fun projects mostly at the weekends, to less time and to less money. I did not expect a more precise estimation (-:. Thanks for the quick reply

  Are you sure? yes | no

Richard W wrote 05/28/2016 at 22:16 point

For the swd connector to program the Arm, might I recommend one of the small 10 pin standard connectors or 

When using the jtag segger (adafruit do a cheap educational version) this seems to be a standard connector for swd. I've also seen it used on LPC Xpresso / Netduino boards. It's footprint is also a lot smaller for the pcb

  Are you sure? yes | no

Oskar Weigl wrote 05/29/2016 at 01:23 point

Hm, you think $70 is cheap? The programmer I'm using costs less than $5, including shipping. Just search e-bay for "ST-Link v2".

  Are you sure? yes | no

Richard W wrote 05/29/2016 at 05:12 point

The type of programmer doesn't matter so much, I just meant you could get away with a smaller footprint for the swd connector which might also make it easier to connect to.

I think the ST-Link v2 uses the standard 20 pin IDC connector. If you used the below adapter board and cable for example this is what's commonly used to connect to boards like the arduino due

  Are you sure? yes | no

volatile666 wrote 05/28/2016 at 15:40 point

Great project, exactly what I need!
How do you plan on balancing the individual LiPo cells?

  Are you sure? yes | no

Oskar Weigl wrote 05/28/2016 at 16:15 point

I don't xP. At least not for now. The plan is to use a LiPo at about 50% state of charge, so there will be a huge margin of charge error before it would become an issue. So either you could just periodically check that the cells are somewhat even, or we could add cell balancing in the future.
You could also just get a standalone balancer. I'm not sure if they are able to run while the battery is in use, but you could then at least run it when the machine is not in use.

  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