I’m finally making progress with my ODrive project, lots of time to hack now that I’m “working at home”.
A good descripion of what I’m building is like a pick and place machine, but this will be some test equipment for work (eventually). I’m planning to use the ODrive for motor control, and do external motion control to feed it target positions, feed rates, etc.
While I noodle with this I’m just using an Arduino Due for the motion controller, it has lots of serial ports and plenty of memory, so I’ve got a big canvas to work. Might eventually move this to an STM32F micro of its own.
I’m using the ASCII protocol today (super easy to get started), and have looked at a native protocol implementation as well. I specifically don’t want to use step and direction, that seems silly when I can just send positions directly to the motor controller.
I’m somewhat mystified as to why the ODrive doesn’t have a command/protocol/whatever to say that it’s “done”; that is, it has caught up with position changes and all axes are now at their targets. I could poll the current position or velocity I suppose, but I’ve got to believe that knowing when you’ve reached your target, like a “wait for all axes to reach targets” API would already be there. I guess other applications like this have another feedback loop in the external controller that watches the motor’s current position, my motion control requirements are so primitive that I don’t need to do that.
… or is the right thing to do just to poll? I’ve been hacking commands into the ascii protocol to do what I want, then I’ll either re-implement in the native protocol or make someting special for my application, but somehow I think that I’m overdoing this.
Anyway, ODrive is neat and lots of fun to work with. A bunch of my colleagues at work are tinkering with theirs now.