Killing gearmotors using Dual VNH5019 driver shield

I now have 2 dead 6V gear-motors (pololu.com/product/2507) with an Arduino Uno. My application is a sumo-bot with 4 wheels/motors. I am driving 2 motors in parallel with each channel. I am using a 7.4V power supply to the board (and powering the Uno through the shield). I am controlling the motors with the DualVNH5019MotorShield Arduino library. The failures happened independently of each other in testing (not under stall conditions or anything), just routine tracking tests. Any thoughts? Is there something bad about my setup? Dud motors? Thanks!

Hello.

I am sorry about your gearmotors. Can you remove the gearboxes and see if you can run the motors by themselves? Doing this will help us determine if it was the motor or gearbox that failed.

Can you also tell me more about your robot? How much does it weigh? What was the position of the wheels that broke? (Were the gearmotors connected to the same channel of the VNH5019 or were they on separate channels?) What is the robot’s behavior when it is “tracking”? (I am interested to know if it is switching directions rapidly or something else that draws a lot of current.) Can you post pictures of your gearmotors and your robot?

-Jon

Thanks for your response Jonathan!

I have checked, and the gearboxes appear healthy. The motors do not respond at all to input power (they do not heat up or anything either).

Weight < 1Kg

The bot is currently only a sumo-ring-avoidance-bot. There are 4 QTR sensors mounted underneath the chassis. The bot rolls until one of the 4 sensors sees a line, then reverses direction (it is using a curve maneuver where one channel turns faster than the other, specifically, 400 on one and 200 on the other). The sensors are being checked in a continuous loop without much delay, and can respond rapidly to changes in condition. In testing, I would often slip a piece of paper under a sensor to simulate “seeing” the line to elicit a response. It is possible, that due to false positives, etc, the bot may have been trying to reverse direction at a frequency too high to detect. I am using the “stopIfFault()” function from the DualVNH5019MotorShield library demo, and have modified it to pause for 4 seconds if a fault is detected (but may have not implemented correctly?)

void stopIfFault() { if (md.getM1Fault()) { Serial.println("M1 fault"); delay(4000); //while(1); } if (md.getM2Fault()) { Serial.println("M2 fault"); delay(4000); //while(1); } }

I did not notice any pausing.

Referring to the pics, the 2 motors/wheels on one side are connected to one channel, and the other side to the other channel (the faulty motor/wheel has been removed).

There are actually 2 arduinos. One is under the motor shield. The one that is visible reads the sensors and writes the values to the serial pins.

tinypic.com/view.php?pic=2zscjfl&s=8
tinypic.com/view.php?pic=30sa7w4&s=8
tinypic.com/view.php?pic=t7j0bq&s=8
tinypic.com/view.php?pic=fwixpf&s=8
tinypic.com/view.php?pic=30uvn7k&s=8

Since the motors themselves are damaged while the gearboxes rotate freely, it seems likely that the brushes wore out, which generally happens when too much current is being drawn by the motors. You mentioned you were testing conditions for switching directions as soon as the bot recognized a line. I am not sure how fast your motors were moving, but, in general, switching from full speed forward to full speed reverse (and vice versa) can draw up to twice the stall current of your motors for a brief period of time. Additionally, supplying your motors with voltages larger than 6V will increase how much current flows through the brushes and wears out the brushes quicker. You can learn more about that inside this app note. Although that note uses a different motor, it is also a brushed DC motor, so the principles should be similar.

-Jon

That certainly appears to be the case. My only problem is that these motors can’t even have an hour of run time on them. What I need to know, ultimately, is how not to do this to the remaining motors. Is the rapid switching enough to cause the brushes to wear out? There is one other item that may or may not be relevant. In the case of both motors, there was a case of the motors’ power wires not attached securely to the terminal block, such that they came out while the bot was running. I have heard that running a motor at under voltage can damage a motor as well. Is that a possibility as well?

The rapid switching causes large amounts of current to flow through the brushes, which heats them up and causes them to degrade. The larger the current flowing through the brushes, the more damage is dealt, so rapid switching definitely wears motors out. (I do not expect brushes to survive currents close to the stall current of the motor for very long.) To get brushed DC gearmotors to last longer, you could try limiting the duty cycle of your controller outputs, which effectively lowers the voltage supplied to the motors. You might also try adding delays and acceleration limiting in your code (i.e. adding something like a 10ms delay in your code in between switching directions, and incrementally ramping up your speed).

I do not expect a wire coming loose like that to immediately cause problems for your system, unless the wire causes a short.

I also do not expect our motors to be damaged by supplying a lower voltage than their operating voltage. They will either not run or run slowly.

-Jon