Unbalanced motor output

Ok, so I've got these cheap motors in the DFRobots 2WD chasis that are so unbalanced that the thing almost spins in a circle! I've been searching the forums and it seems like everybody's using PWM to adjust the motor output, so I've been trying to adjust mine that way. Problem is, I can get it just about balanced at a higher speed but then it's totally off at a lower speed. And it got me thinking about "why" the motors are unbalanced. Is there some kind of electrical imbalance within the motor that's causing it to run at different speeds with (presumably) the same input voltage? For example, I know that guitar pickups in the 50's sometimes had a drastically different number of turns for the winding of the electromagnet, causing some pickups to be "hotter" than others. Is it possible that motors could have a different number of windings causing some to run faster or slower? And if so, could we compensate with resistors or a trim pot to bring the motors more in line with each other? I'm just thinking out loud, hoping someone has a good idea. My concept is that my bot will have a relatively high "cruising" speed but will drop down to a lower speed when the sonar shows it's approaching an obstacle. With my motors the way they are, the trim goes all to heck when the speed changes. 

It is common for two motors

It is common for two motors to be slightly off. If they are way off like you are describing (maybe post a video), it is likely that you have a wiring problem or some other problem. I suggest you recheck all your connections. You may have a partially cold solder joint or something.

I recently corrected a similar problem (by accident) when I removed a faulty servo from the robot. It must have been causing some problem.

So I suggest:

  1. Double check all your connections.
  2. Try connecting your motors directly to the batteries to eliminate any other cause.

Also: different directions may have different speeds

Some, if not most, DC motors are “optimized” to run in one direction, say clockwise. The opposite direction may not run with the same speed or torque or both. This property may very wel be intended by the manufacturer. Makes sense in some applications. Not so much in our robots with their differential traction.

Imagine two identical DC gearmotors (GM). Put them both on one side of our robot. They both turn forwards at the exact same speed when you apply the same voltage to them. But you don’t want them both on star board. You want one on the starboard side and the other one at port. OMG, you just flipped the direction of one of your motors! Easily fixed, you think: just compensate by reversing the polarity of one motor. Now they drive your robot forwards again. But one of your motors is now running in the opposite (rotational) direction! Opposite from its intended application anyway.

Some robot suffer from this phenomenon, depending on the forgiving mood of the GM gods.

However, this should never affect your bot to the degree that you describe.