Ask HN: I need powerful and very fast, but silent servos. Where?
I'm currently working on a robot, and this robot needs to be really fast. Think of it like a robotic arm, but it needs to move about as fast as a human can turn his head.
For that, I need appropriate servos that can immediately make such a motion, without a long spin-up time. The effect is that natural movements should be simulatable with that.
Of course, I'd like the servos to be as quiet as possible and as small as possible. The question is : what servos do I buy? Money is not a problem.
23 comments
[ 2.1 ms ] story [ 66.6 ms ] threadSomething to keep in mind: tiny servos (and even stepper motors) can provide the blazing speeds you need...... but not with the torque required. Speed and torque are commonly traded-off against one another. You'll need to first determine what sort of resistance/weight the motor will be pulling/pushing, because a lightning-quick motor that will turn in-place the minute any counter-pressure is applied is way worse than a middling-speed motor with decent torque.
Would I be able to control such a motor appropriately with a standard board like the arduino? Imagine I were moving 2kg 30centimers, and I want this to react as a human hand would (same speed, start time), would this even be possible?
And controlling it with an arduino is no problem. You've got to main options for the sensor - either an optical tracker that is pointed at the shaft and detects the presence of a striped/marked point which appears once every revolution, or the (cheaper but just as reliable, really) solution of an iR sender/receiver pair monitoring the turning of something (imagine a motor shaft turning a fan. The iR pair would be positioned perpendicular to the fan blades, each time a blade crosses the path of the iR, a signal is generated).
iR is cheaper.
An arduino (or just about any other microcontroller) has an operating frequency way over the rotational speed of the motor. Both optical and iR sensors can easily handle the relatively-slow rotational speed of the shaft. I've used an MC68k from, what, 20 or 30 year old production lines(?) to pull this off. The code is dead simple, just connect the iR/optical output to a counter (which comes built-in in several of the arduino input ports) (you'll need to run it through an inverter first, if you're doing the iR approach) and then loop over the count until it's moved as far as you need it to.
The human hand isn't crazy fast the way you're thinking. If you've ever seen a stepper motor snap from one position to another, that is real acceleration. Basic DC motors typically have lower acceleration than that - their acceleration and speed will vary greatly depending on the model chosen.
2KG is not a light weight. I would have recommended the stepper approach, but you'll need motors about the size of your fist running at 12V and a relatively high current to rotate an object of that size. Basic statics says that the farther away from the point of rotation a weight is applied, the stronger its force. You've got 2KG distributed (I assume) evenly across the 30cm surface, it's going to be quite the weight to turn against gravity, so stepper motors are out.
Servos, which are basically your run-of-the-mill DC motors with their own close-lood feedback system will work. But you'll have better luck with the larger variety of DC motors available online or in your local electronics store.
Thing is - I don't want to skimp on the positioning logic - I need it pretty accurate in space (sub millimeter) and in time. Overshooting the target is fine, I'll correct it with one of those algorithms.
What is the most arduino compatible and accurate measurement method that will handle both use-cases? I should be able to use it both to control my DC motor, and also to record the position of the wheel being turned, even when the motor is switched off?
It was a ball mouse which featured two scroll wheels, meaning we could recieve feedback from 4 DC motors using a standard USB interface & mouse driver.
We used the mouse buttons as triggers to mark the rotation stop points for use in the initialization routine.
The motors we ended up using were high end electric RC car motors. They were the highest torque in the smallest package we could realistically get that still fitted our budget.
(I don't know if they're the quietest.)
http://www.maxonmotor.com
I suspect most of the noise is generated by the gearbox. That makes this seem hopeful: http://www.maxonmotorusa.com/media_releases_maxon-Koax-Drive...
I need to move 2kg through space in a natural manner - is there any series of numbers I can apply that will allow me tell if that motor would be suitable for this?
Mind you, this is just the system I used, Several chip makers offer similar demo boards. Here is another: http://www.silabs.com/products/mcu/Pages/SensorlessBLDCMotor...
Here's a link to a good, easy-to-parse reference:
http://www.amazon.ca/Build-Your-Own-Combat-Robot/dp/00721946...
1. Pick the largest motor you can stomach in your robot.
2. Figure out how much current it can handle when stalled. This will be proportional to the square root of the power, because P = I^2 * R.
3. From the motor specifications, you can figure out how much torque you'll get when the motor is stalled, which it will be when you first start accelerating your 2 kg.
4. Figure out how much force on the load will result from the torque.
5. Once you know force, you'll know how fast the load will accelerate.
6. Assume the load accelerates for 0.01 s (or some small time step) and then recalculate all your parameters.
7. If it's not fast enough, pick a more powerful motor.
Really, you're trying to solve a system of differential equations, so the actual answer might be "go to engineering school and take a class in dynamics" or "find an engineer who will do some system modeling in Matlab for you."
You might consider the motor control packages from this guy http://www.kelinginc.net/index.html or similar. They close the loop for you and you position your motor based on a pulse train which can be generated by a variety of devices. The step-direction control of the servo does tend to generate more vibration than other kinds of inputs, but is very easy to interface with.
There are others vendors as well, just search for hobby cnc and servo and examples will pop up. Advanced Motion Control also offers servo amplifiers which take other forms of input than step and direction which might be quieter.
As mentioned before, gear boxes are a big producer of noise as are powertrains in general. Toothed Belt drives, especially at low speeds or capstan drives for finite rotation machines can be very quiet.
To figure out your motor sizing you need to estimate the speeds and forces / torques on your system. From there you can estimate the power your system needs to produce and then calculate a gear-ratio based on the available motor torques and powers available from off the shelf devices. Maxon's catalog has design rules, equations and worked examples if you want samples of the math.
For what it is worth, I would guess that the Kelling 350W motors would be able to move a 2KG mass with what looks to be high accelerations and speeds with a decently designed drivetrain.
I started with the servos because it seemed cheaper and I could start without having to build a lot of stuff.
Then once I was happy with being able to control a two-axis setup with a little webcam on it using Python on a Linux box, I moved up to some 185oz-in steppers from Keling and some more Phidget stepper controllers. One of the big motors with a toothed belt can lift a full can of paint and hold it indefinitely.
I chose the Phidgets over Arduino because I didn't want to have to simultaneously learn a new toolchain while I was concentrating on the mechanical stuff. I figure I can always go to an Arduino or other controller if I need to shrink things down.
Having now worked with the steppers, I would second the idea of using DC motors with some kind of external feedback, maybe optical shaft encoders or something. Even with steppers, where you can count the number of steps and know where you are, you still really need to be able to run it into a limit switch in order to find some kind of a zero point.
FYI. For example a head turn does not follow a single axis turn (around Y for example). Imagine a line drawn by eyes as head turns, eyes follow an arc. In fact, every single animal motion (human and other animals) follow an arc. First thing you learn when doing an animation.
[edit] OK, from reading your responses below I think I misunderstood what you meant. I'm not talking about the typical cheap R/C servos. Maxon makes precision balanced motors with just about every parameter you need to know specified. And then you can just put an encoder on the endcap to close the loop.
But the first point still holds: we're talking at least an order of magnitude cost-wise, from R/C servo motors.
How fast? How much mass must be moved? The inertia of the assembly? Required acceleration?
Once you know this, then you'll know how much power is needed to move the object. At that time you can start searching motor databooks to find one that's suitable.
And then don't forget you'll want to figure out how precise the motion must be (how much overshoot/undershoot is permissible?) so you can start with the electronic/control system design.
Fun stuff!!!