Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: I need powerful and very fast, but silent servos. Where?
24 points by jeb on July 10, 2010 | hide | past | favorite | 23 comments
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.




I've worked on similar tech before (not for a robot though), and found the best option to be a DC motor + optical feedback sensor. It's also the most cost-effective solution.

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


A DC-Motor with optical feedback sounds like a pretty good option. They are also much cheaper, are they not?

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?


Way cheaper.

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.


Nice, that's exactly the info I want to hear. By the way, I need to also measure the position of the object being turned. That is, I was intending for my robot to have two modes - training mode and execution mode, so your DC suggestion makes it even better.

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?


For a similar project we used the IR sensors off a USB ball mouse along with homemade encoder wheels to provide motor feedback. This method costs next to nothing and is pretty damn accurate.

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.


You can't. Once your device is switched-off, you can't know what position it will start up in. The easiest option is to have an initialization routine that will move the motor to a known position. For instance, move it all the way clockwise until it jams (assuming there's a limited range of motion) or until it signals a button, whatever that it has reached a position. This is known as calibration or zeroing.


What I mean is that the item it is turning is marked, so I can detect it's position. Using infrared perhaps?


You can get motors with encoders built into them that are very, very accurate. You can decode their pulses into position with a quadrature decoder like the HCTL-2020.


If money is not a problem, then I think you should not try to hit the perfect solution the first time. Trying to do that will make it harder to get started. I had to build a linear motion platform last spring. Since I had never done anything like that before I decided to just start buying stuff and testing it. I started with some small servos and brackets from Trossen Robotics - http://www.trossenrobotics.com/c/hobby-servos-for-robotics.a... and some Phidgets USB controllers from http://www.phidgets.com/

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.


Maxon will occasionally donate motors to students in my experience, but I have not found them to be particularly generous with hobbiests and their motors tend to be fairly pricey.

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.


Maxon is a Swiss company that makes very high power-density motors that are commonly used in high-end robots.

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


This is exactly my problem. I can look at the picture and see the information, but how do I figure out if that motor will do what I want it to do without buying it and programming it?

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?


Yes, but it's a nontrivial calculation, especially if you're moving in more than one dimension. What you want to do, roughly, is this:

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


The suggestion to use Maxon motor is a pointer in the right direction. I think a brushless DC motor will give you the best power in a small package. Most of these motors have a rating in Watts. one good place to start is with the microchip motor control demo board. They will also sell you a Hurst brushless DC motor. http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_P...

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


Call them, tell them what you're making, and ask for a sample. If it doesn't work, "adjust" your story. Most suppliers will gladly ship out a sample if it is likely that you would buy in bulk in the future. Some will gladly ship to hobbyists. Depends on the person you talk to.


I'm unlikely to buy bulk later. You sure that they will give me a free motor just because I ask for it? Sounds...too good to be true :)



You can figure out how to properly size a motor from the load you'll be carrying, how fast you want it to accelerate, what sort of power supply you have available, etc.

Here's a link to a good, easy-to-parse reference:

http://www.amazon.ca/Build-Your-Own-Combat-Robot/dp/00721946...


If money isn't an issue, just buy one and if it doesn't work, find another one and buy it, etc.


DC stepper motors + gecko driver should be a cost effective solution. Define natural movements though.

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.


Maxon motors are about as quiet a motor as I've ever used. But be prepared to open that wallet wide :-)

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


Forgetting motor type for the moment, you need to give us numbers.

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


You'll probably find some in Japanese or German robotics research labs.... good luck buying some off the shelf!




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: