I have a servo motor with following specs Torque - 1.08Nm Max rpm - 3000 Current rating - 7.8 amp Max voltage - 56V DC

Please tell me how to calculate whether an arduino board - uno rev 3 can control the servo motor? If not, how to find out how many such boards are required?

  • Is it a standard 3-pin servo? – Ignacio Vazquez-Abrams Mar 24 '14 at 7:15
  • 3
    Generally something this big isn't going to be a 3-wire hobby servo but a large motor with some form of position encoder built-in to it. A link to a data sheet would clear this up. – Cybergibbons Mar 24 '14 at 7:59
  • Do you hace exact refs of your servo? That could help people answer. – jfpoilpret Mar 24 '14 at 9:27
  • Yes its a 3 pin servo. This is the link to the data sheet of the encoder HEDS - 5540 - A12 avagotech.com/docs/AV02-1046EN – Jagat Mar 24 '14 at 10:04
  • The datassheet you have provided is of the optical encoder that can work fine with Arduino, but that is just to provide feedback of the location of the shaft. What about the motor? That is the part that will need high current so unless there is a driver you;ll have to add one. – alexan_e Mar 24 '14 at 10:23

An Uno most definitely cannot directly control that motor. According to the specs here,

They operate at 5 volts. Each pin can provide or receive a maximum of 40 mA

So your motor has needs about ten times the voltage and 200 times the amps that the Uno can supply. Of course, you can always get a driver of some sort for the servo.

  • 1
    Agreed. However, I'm not sure any of the common driver chips will be suitable for this situation. I guess a MOSFET is requested in this case. – jfpoilpret Mar 24 '14 at 17:56

The optical encoder you link to has 500 pulses per revolution. This means at 3000rpm , you will be generating pulses 25,000 times a second. You will also need to deal with overshoot (as there is nothing worse than a motor going overspeed and the feedback loop being unable to detect it).

Dealing with an optical encoder generating pulses this quickly is actually quite a challenge, especially with Arduino (which has rather slow native I/O using digitalRead and digitalWrite), and the ATmega328 (which doesn't have any dedicated hardware to deal with high speed optical encoders).

Driving a 56VDC, 7.8A motor isn't an easy challenge either - a motor driver for this isn't going to be easy to design.

I'd probably look for a dedicated servo or CNC motor controller to deal with something like this.

  • You could probably manage 25K interrupts/second without too much trouble. You'd just need to wire the encoder a/b into the INT1/INT0 pins (and maybe use the pin-change interrupt for index). You'd have to write a decent interrupt handler, though. The ATmega328P may be capable of handling the encoder and servo duties, but there isn't going to be much arduino left in your code at that point. – Connor Wolf Mar 27 '14 at 9:10
  • You really need to manage a fair bit higher than that - overspeed could be as much as 50% on some systems, so 4500rpm. Then you have two sets of pins on the optical encoder. It's not impossible, but it is a lot of work. Other micros have functionality designed to deal with optical encoders and servos. – Cybergibbons Mar 27 '14 at 9:36

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.