Our team at the last second has encountered a catastrophic issue with our robot that we don’t know how to fix. When driving, the voltage drops to unacceptably low levels, regardless of what battery we use. It has happened to us before on a completely different robot and motor controllers, and we were not able to isolate the issue then either. I will list as much information as I know about the problem.
The voltage drop only occurs when using the driving motors, and it occurs regardless of how charged a battery is and how new a battery it is. The team has checked the terminals to the motor controllers, motors, and battery and have found no issues with the wiring.
The drivetrain is a tank drive tank tread configuration. One cim motor drives each tread. The cim motor is geared down using a CIMple box. I do not know the gear ratio as of yet. I have been told that the CIMple boxes and cim motors should not be a problem as the robot has run fine before without voltage drops using the same motors and gearboxes. Each cim motor is powered by a VEX Victor, both which are wired as according to wpilib. The team is not using the CAN interface. Driving forwards and backwards drops the voltage from 12ish to about 9, and turning the robot (driving either side in the opposite direction) drops the voltage from 12 to 6 on average.
The team also uses a unique motor controller class that is included below. Our main coder was not available so we were not able to figure out if it was a code problem.
package edu.wpi.first.wpilibj.templates;
import edu.wpi.first.wpilibj.Jaguar;
public class SafeJaguar{
private final Jaguar jag;
private final UpdateThread updater;
public SafeJaguar(int port){
jag=new Jaguar(port);
updater=new UpdateThread(this,jag);
}
public void set(double targetSpeed){
updater.targetSpeed=targetSpeed;
}
public void setDirect(double targetSpeed){
updater.targetSpeed=targetSpeed;
updater.speed=targetSpeed;
jag.set(targetSpeed);
}
public void setPIDRate(int millis){
updater.pidRate=millis;
}
}
class UpdateThread extends Thread{
long time;
int pidRate;
double speed,targetSpeed;
SafeJaguar safejag;
Jaguar jag;
boolean active;
public UpdateThread(SafeJaguar s, Jaguar j){
super();
pidRate=100;
time=System.currentTimeMillis();
speed=0;
targetSpeed=0;
safejag=s;
jag=j;
start();
}
public void run(){
active=true;
while(active){
long dt=System.currentTimeMillis()-time; //dt = difference in time
time=System.currentTimeMillis();
if(speed!=targetSpeed){
double amt=(double)dt/(double)pidRate;
if(speed<targetSpeed){
speed+=amt;
if(speed>targetSpeed)speed=targetSpeed;
}
if(speed>targetSpeed){
speed-=amt;
if(speed<targetSpeed)speed=targetSpeed;
}
jag.set(speed);
}
try {
sleep(10);
} catch (InterruptedException ex) {
//ex.printStackTrace();
}
}
}
}
I do realize this account is relatively new, but I hope the moderators will show this online as soon as possible, as this problem has occurred a day before our competition and our members and mentors are stumped.
I’m on mobile at the moment, so I can’t plug your numbers (assuming an unmodified CIMple box)into JVN’s Design Calculator, but in general tank tread + turning = high current draw. Seeing as you’re only using what appears to be 2 CIMs to drive your entire robot, I’m inclined to say that’s the problem.
First off, how are you connecting your PWM? Is it a splitter cable, or two separate signals coming from the Rio? If it is two separate signals, make sure both of them are being driven, and try using the standard motor controller classes.
A picture of your setup would be helpful. Is the tread system something custom, of the AndyMark Rhino Treads?
I would also measure current draw going to each CIM. Do this with the treads off the ground, while driving straight, and while turning. The idea here is to get some hard numbers to compare in order to isolate the problem. Doing it with the robot up on blocks is important, because that will tell you if the issue is with actually driving (for example, scrub friction while turning) or if it is some sort of mechanical binding in the drive train.
How are your treads tensioned? With the robot turned off and it up on blocks, can you rotate them by hand?
Cimple boxes are only one stage reduction. Tread drives are energy hogs. I expect you are geared too high. But if it was working before on carpet then I would look for other issues as well. Measuring the current as Jon suggested is a good start. Inspect your drive line and be sure you do not have any broken bearing or wheels.
It is entirely possible you have either killed a motor or a speed controller. Listen for a clicking sound from you robot. That is one of the breakers tripping. It should give you a good indication of what branch is at fault. Another method is pull all breakers feeding the drive. Then put them in one at a time. You will likely find one that is causing the voltage condition. Also check that someone has not made a wiring change on one of the motors. It is entirely possible to have shorted a controller output if wiring changes were made. It is also possible for something to be locking up the transmission. Check that the key has not slipped out of the pinion gear.
Thank you for the feedback, I have forwarded your comments to the build team. We switched out all motor controllers and individually tested them one per side to see if any of them were tripping breakers, with no avail.
Here are three pictures of the CIMple box coupling itself:
Something to note is that the build team tells me that there is a two stage reduction gear ratio inside the CIMple box itself. We don’t have a multi meter at the moment to get readings, we will take readings once at the competition.
We’re still encountering issues with voltage drop even with all Safejaguar classes replaced with normal motor controller classes.
If all of your connections are sound, I’m with Frank as to problem #1 - two CIMs through CIMple boxes does not give you much drive force, especially with tank treads.
Looking at your code, I also noticed that you declared one jaguar motor controller but say you are using two Victors. I’m not sure what is supposed to happen with one jaguar.
Also, the sleep(10) inside the while(active) loop means that you are only executing the loop once every 10 milliseconds unless you catch an exception. I’m not sure what you’re trying to do, but this probably doesn’t do it. If I read it correctly, the jaguar will get a small speed value the first pass through, then ten ms later jump considerably towards if not right to the targetSpeed. The 10 ms sleep mostly undoes what appears to be an attempt to slowly ramp up the voltage.
Edit:
Only if you’ve made serious modifications to it - it’s a singe stage gear box (two gears). A single-speed two-stage gear box will have four gears, plus another for each motor after the first. Here’s the web page on the CIMple box.
From the photo, it could be that your track width is too narrow. 6 volts when turning is ridiculous, but 9 when driving forward/backward when the battery starts at 12 isn’t too strange.
However, if the battery is 12.0 volts when not moving, it’s actually starting to get a little low. A fresh battery should be closer to 13 volts.
CIMple Boxes are single stage, 4.67:1 ratio. They almost have to have a second reduction stage after them, and those photos don’t look like you have one. So I think you’re definitely geared too high. The best solution is to change things to get a lower gear ratio. That’d be putting a smaller pulley/sprocket on shaft out of your CIMple Box. I expect you don’t have belts or pulleys to do that with, but another team near you might. Switching to chain would also work, and it’s easier to make chain shorter than to buy new belts in the exact correct length.
OK,
Here is a test, get the tracks off the floor. put something under the robot to keep the tracks from contacting anything. Then try to drive. If you do not get the same brownout condition, then your robot is telling you that the motors are in stall condition when they are on the floor. Turns will make matters even worse.
If the robot acts the same with the tracks off the floor, you have another issue. We need to see pics inside the robot to get a better idea.
Thank you again for the feedback. Our team will regain access to the robot in approximately 3 hours, so we will not be able to test anything until then. After speaking with the mentors and administrators, they came to the conclusion that based upon previous tests the gearboxes are mostly to blame. The robot used to run with toughbox minis, but was switched to CIMple boxes to reduce height. The mentor I spoke to previously thought I was talking about the toughbox minis when I asked about the gearboxes. Hopefully the issue will be solved by the time competition begins. Thanks again for the help.
Yup, that is probably the issue. The CIMple box is a 4.67:1 ratio, while the toughbox mini could have been anywhere from 5.95:1 to 12.75:1, depending on the configuration. It sounds like the easy solution is to either go back to the mini’s or add another 2:1 or 3:1 reduction somewhere (look at the monk’s to see what reduction you previously had!)
Note - numbers probably aren’t perfect because I don’t think JVN’s design calculator can “do” tank treads. But I like to imagine the numbers are roughly accurate enough.
In case anyone was wondering, (with the assumptions that those pullies are 4" tall and the tread has a similar COF to Blue Nitrile), your drivetrain had a free-speed of 19.93ft/s and a “pushing” current draw per motor of 265.15 Amps. Just a smidge higher than a normal draw…Okay, a lot higher than a normal draw.
If you do as Mr. Stratis suggested and add in a 2:1 ratio somewhere, it drops your free-speed to a respectable 9.97ft/s and a pushing draw of 133.93 Amps, or half of what you were at previously. Adding a 3:1 ratio somewhere gives a free speed of 6.64ft/s and a pushing draw of 90.19 Amps. A much more “normal” pushing draw.
Do the motors slow down/struggle at all when driving/turning? If you just run one side at a time, does that cause the same problem? Test this on the floor and propped up. I would also check the temperature of the motors(do they get hotter than they should?) as well as the fuses.
One thing I forgot: check all wiring from the battery to the motors and make sure there’s no short. Check for metal shavings in/on the ports/boards/contacts of the motor controllers, roboRIO, and anything else that’s somehow related to the motors. Make sure none of the ports are in contact with the frame or other metal. Just be sure there’s no short anywhere.
If they reverted back to the Mini’s I think there would be serious issues with the CIM’s clashing with the ground/defenses. However it is much better to be able to go over a few obstacles vs none at all because of brown-outs.
Looking at the amount of space you have, you should be able to fit a http://www.andymark.com/product-p/am-tbmicrooptions.htm enabling you to get the necessary reduction, and still have the clearance(in fact they are more compact than the CIMple box).
In regards to accomplishing the reduction outside the gearbox, your drive belt seems to have quite a lot of slack in it anyway. The easiest fix would be to just use #35 chain. Change the pulley on the output shaft for a small hex bore sprocket say 12 or 15 tooth and a change the pulley on the the drive wheel with a larger one say 30t( check that the sprocket is smaller with chain then the wheel diameter), some spacers can then be used to make up for the decreased width of the sprocket vs pulley
Here are a couple or resources, which should assist you in fixing your problem and prevent similar problems in the future.
Per everyone else’s thoughts, one CIM per side on a tank drive is probably your issue.
Each CIM, as Al and other have stated, stalls at 131A. Two motors at stall is 262A.
Our typical battery has an internal resistance of 0.08 Ohms. Say a fully charged battery is 12.8V.
At 262A, you’ll see a calculated (not real) voltage drop of 20.96V from the battery. Given the battery voltage is 12.8V, and full stall on two motors will drop the voltage, if given the opportunity, 20.96V, there is a very good chance that the stalling is your issue.
However, I won’t stop there…
Check all of your big 8AWG or 6AWG wiring from the Anderson connector to the power distribution board. Are all of the crimps well done? Give them a good, firm tug. Are all of the bolts and nuts that fasten those ring terminals on tight? Don’t overtighten (break) them, but make sure they don’t move left and right if you try to move them. What we are looking for here is resistance through all of your connection points. Are any of the Anderson PowerPole connector you are using charred up on the inside from people testing motors with them? That’ll cause some resistance.
Adding an additional CIM will likely NOT fix your issue. You need to figure out a way to gear it down (higher gear ratio). You can try a different gearbox, add a planetary gear set with a CIM output, or change the pulley’s you are using.
Ryan,
You misplaced a decimal…
Typical battery is 0.011 ohms internal so 262 amps will drop 2.88 volts on a fresh charge. Adding up other typical losses, a team might actually see a 3.5-4 volt drop at the input to the PDP under stall conditions.
Your other recommendations are perfectly stated.