Choosing right motors for self-balancing robot

I’m looking for right motors for my first self-balancing robot.

Design assumptions:

  • robot height: around 120-200 mm
  • robot weight: around 600-800 grams
  • wheels: 80x10 mm (Pololu #1430) or 90x10 mm (Pololu #1438)
  • battery voltage: not sure yet, but something between 7,2 - 12 V (depending on the motors)

So as I know, I should looking for DC motors with encoders, right? I also thought about stepper motors.

My little calculations:

Required torque = robot height * robot weight * gravity * max. tilt angle

  • Rt min = 0,12 m * 0,6 kg * 9,81 m/s2 * sin(40°) = 0,454 Nm
  • Rt max = 0,20 m * 0,8 kg * 9,81 m/s2 * sin(40°) = 1 Nm

So, in best scenario I will need 0,454 Nm and in worst 1 Nm. So, if I have two motors then I can divide this required torque by 2, right?

Can you advise me on the right motors for my project? I’m not sure about motor speed, gear ratio and how much torque do I need to get good balancing without damaging/overloading motors.

Thank you,


If you are not too far along with your design yet, then you might consider getting started with our Balboa robot. That can give you a sense for what is involved in a balancing robot before you try to do something from scratch yourself.

If you decide to make your own robot, then I strongly recommend using DC motors with encoders. It is possible to use stepper motors for a balancing robot, but that would be more challenging to implement.

You should divide the torque you calculated by 2 to determine the torque you need from each motor, but I also encourage you to apply a strong factor-of-safety. Based on the torques you calculated, you might consider using a pair of our 25D or 37D metal gearmotors. If you want to use a smaller motor, then you will need something to decouple the load from the motor’s gearbox (like a belt and pulley setup) since the instantaneous torque when your balancing robot stands up puts a lot of stress on the little gears.

I also suggest you check out our blog for examples of other balancing robots which could give you ideas.

- Patrick

1 Like

Thanks for your reply.

How “strong” should be this factor-of-safety? 10-15%?

So, I found this motor: 20.4:1 Metal Gearmotor 25Dx65L mm HP 12V with 48 CPR Encoder

Gear ratio: 20.4:1
No-load speed @ 12V: 500 rpm
No-load current @ 12V: 300 mA
Stall current @ 12V: 5600 mA
Stall torque @ 12V: 85 oz·in (6 kg⋅cm = 0,6 N⋅m)

What do you think about this motor? Should be OK for my application?

If it’s OK, can you recommend me any driver for this motors? Should I looking for 5,6 A of continuous output current per channel or maybe should apply “factor-of-safety” too?

Thank you,

Those motors might be okay if you do more serious analysis to figure out for certain how much torque you need, but with the level of analysis so far, I would use a factor of safety of 2 (as in design for twice the torque you calculated).

For whatever motors you use, we recommend using drivers which are rated to continuously handle the stall current of the motors they are driving. The related products list on the motor’s product page is good place to start looking for an appropriate driver. If you go with one of our 25D high-power 12V motors, like the one you linked to, I suggest the VNH5019.

- Patrick

Responding to the suggested motor: 20.4:1 Metal Gearmotor 25Dx65L mm HP 12V with 48 CPR Encoder . I have a close cousin of it ( Pololu - 34:1 Metal Gearmotor 25Dx67L mm HP 12V with 48 CPR Encoder ) which is different only for the reduction rate ( 34:1 instead of 20.4:1 ). I looked at it for a balancebot. My issue with it is that it seems to have a very large dead zone - in my setup ( using a roboclaw controller ) the minimum rotation is approx 10% of the max rotation, both ways. Such a large dead zone is way too high for smooth balancing. When swapping out for the lower power Pololu - 34:1 Metal Gearmotor 25Dx67L mm MP 12V with 48 CPR Encoder, the dead zone is only 1% or so.

Can you explain what you are referring to when you say “dead zone”?

If you are referring to the dead zone mentioned in the RoboClaw user manual, that is a setting of the RoboClaw that you can configure using Basicmicro Motion Studio; it is not an aspect of the motor by itself. For the RoboClaw, dead zone is the area around the specified position the controller will consider to be equal to the position specified.

I do not expect there to be any aspects of the 20.4:1 Metal Gearmotor 25Dx65L mm HP 12V with 48 CPR Encoder that would prohibit it from being usable for a balancing robot (though of course whether it is actually appropriate or not will depend on other aspects of the robot’s design). The effective encoder resolution (979.62 CPR) should be plenty and the gearbox backlash should be similar to our other 25D gearmotors.

- Patrick