I have been experimenting with an underwater robot where I have 5 DC motors (that are properly sealed by the supplier) and I built simple n-type MOSFET (IRLZ44Z) drivers, 5 separate drivers for 5 motors.

I use an 18 m long tether cable that connects the motors on the robot to the electronics. Using a 12 V supply from a lead-acid battery, with logic coming from an Arduino Uno, everything seemed to work great for a while.

But recently I noticed that two motors that I am turning on at the same time have started turning at "slighly" different speeds. I checked the PWM voltage using a digital multimeter which goes to the drivers that shows 4.987 V (at 100% duty cycle, running at 490 Hz) on both pins. I get identical voltages on the gate of the two MOSFET drivers also.

What I don't understand is why the slight change in speeds, when the two motors were turning at the same speeds before. What else can I do to troubleshoot? Could there be something wrong with the tether wire (although I checked and all the wires show about the same resistance). Any suggestions on further troubleshooting ideas? Please let me know if more information is required.

  • \$\begingroup\$ Which motors are they? What does 'slightly' mean? \$\endgroup\$ Oct 11, 2022 at 6:25
  • \$\begingroup\$ @BruceAbbott a.aliexpress.com/_mtxNR0Y. By slightly I mean, when I am running the two motors at about 10% duty cycle, I can tell that one rotates faster than the other by say 10-20 rpm \$\endgroup\$ Oct 11, 2022 at 7:09
  • \$\begingroup\$ Add info in comments to question. You have 5 motors, so why do you cite 2 which were the same as one changed. Is it in water or air? \$\endgroup\$ Oct 11, 2022 at 9:55
  • \$\begingroup\$ Rated at 8000rpm on 8.4V, should be ~1100rpm at 1.2V (12V * 10%). 20rpm difference is <2%, pretty good for cheap brushed motors! Changing speed could be caused by friction from bearings, brushes/commutator, or seals. I suggest opening up the housings to inspect each motor and oil the bearings. \$\endgroup\$ Oct 11, 2022 at 19:24
  • \$\begingroup\$ @StainlessSteelRat. I was testing it in water when I realised that it has started tilting sideways because one motor turned faster then the other. And when I pulled it out of the water, I could notice that the motors were turning at slightly different rates. \$\endgroup\$ Oct 13, 2022 at 3:32

2 Answers 2


the two motors were turning at the same speeds before.

It is pure luck. It's not typical to get same speeds - and then, how do you even quantify "same"? How close were those speeds, how did you measure them, etc?

There is no such thing as "identical" DC motors. To precisely control motor speeds, velocity feedback is required. Sensorless EMF feedback is one simple way to do it. Another would be to use one of a variety of rotary sensors - be it position sensors (encoders/hall sensors), or velocity sensors (DC generators).

Motors loaded with propellers can also be sometimes decently synchronized by scaling their operating current from a calibrated reference value. The reference value needs periodic recalibration as the propellers wear out, the seals wear in, etc.

  • 2
    \$\begingroup\$ To add to the answer, it's probably best to bite the bullet and implement full PID control for each motor if you need accurate velocity control. \$\endgroup\$ Oct 11, 2022 at 19:23

The other answer is very sensible but let me give you a more off-the-wall suggestion.

Assuming that your two motors are turning propellers on either side of your robot, and assuming also that you have a tilt/IMU sensor of some kind. You should be able to adjust the motors based on rotation or tilt in order to steer in the desired direction. Essentially, rather than perfect knowledge about motor velocities, you can just adjust the motor drive to achieve the intended directional heading. This can be implemented in a simple controller such as a PID.

  • \$\begingroup\$ That's a good suggestion, but you see I have an 18m long tether cable. Signals from IMU would not be accurate enough when it gets to the mcu \$\endgroup\$ Oct 13, 2022 at 3:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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