Our team is having some trouble with our voltage while running a teleop. Whenever we attempt to strafe or rotate, our voltage drops from around 13.5 to 9.7. We do not know what is causing this. This does not happen with the sliders or the servos, and around 3-4 seconds of waiting will stabilize the voltage again. Even if we pick up the robot and then test the motor, this issue still occurs. If we dont pay attention to the voltage and wait then either te expansion hub stops responding or the robot disconnects. We are using 8 DC motors and 4 servos.
Could it be one of the motors? Or is it a software issue?
If the voltage drop happens even when you lift the robot off the ground, so that the wheels are not “under load”, that would indicate to me that either something is wrong with one of the motors or there’s a lot of friction somewhere in the drivetrain. In other words, something is causing the motors to strain much more than simply turning an (unloaded) wheel would suggest.
Out of curiosity, what command/run mode is being used to send power to the motors? Typically this is one of .setPower(), .setVelocity(), or RUN_TO_POSITION mode.
Also, what is the gear ratio of the motors being used, and is there any gearing up or down of the wheels?
Here are some diagnostics to try, in rough order of complexity/difficulty:
I’d start by manually turning each wheel independently, and see if you can find one that “sticks” or is harder to turn than the others. They should spin fairly freely overall.
If that doesn’t immediately suggest any fixes, then try running the off-the-ground test with the driving motors enabled one at a time. You can either physically unplug the other drive motors’ power cables, or you can comment out the power commands in the code. Or, just write a simple OpMode that lets you test each motor individually and see if any of them cause a voltage drop more than the others.
If that still doesn’t do anything, then you can add some telemetry to display the amount of current being drawn by each of the drive motors. Make sure the motors are set as DcMotorEx type, and then you can do “motor.getCurrent()” to determine how much current each motor is drawing. Again, this can point out if any single motor is an issue.
Lastly, the problem may be as simple as a poor battery. A battery that has degraded over time will lose its ability to supply sufficient current to the devices, and that will sometimes appear as more extreme voltage drops. If you have a battery tester that can determine the battery’s internal resistance (e.g. a Battery Beak tester from AndyMark), that may point to an issue as well.
I hope one of these suggestions helps out – if you can provide more details in response to the above we can perhaps make some other suggestions…?
- Coach, FTC 7172 “Technical Difficulties”
Although it might be one of the motors, if i unplug a single motor, try, then try to unplug a different motor, then run, it still drops the voltage. I am using the .setpower() command to power the motors, power being set at 0.9. Our motors are 312RPM 12v DC motors with a 19.2:1 Ratio. The motors control the wheels through a 1:1 bevel gear setup. Can you please elaborate on using the motor.getCurrent() command?
Also, we are using a new battery, so I do not believe that’s the problem.
Would it help if we attached our teamcode?
If you want to display the current, change your motor variable declarations to use “DcMotorEx” instead of DcMotor. For example, if you declared a drive motor as
leftDrive = hardwareMap.get(DcMotor.class, "leftDrive");
then change the “DcMotor” in each of those lines to be “DcMotorEx” instead. That will enable you to do things like “leftDrive.getCurrent()” to determine the amount of electrical current being drawn by that motor.
Yes, if you’d like to attach your team code I’ll be happy to take a look and see if I notice anything obvious.
Some small voltage drop (< 1 volt) when running motors is normal and expected – as devices draw power from the battery, the voltage will drop.
Larger voltage drops depend on the robot and what’s being tested. For a robot with its wheels in the air (not touching the ground, no weight on the wheels), if the voltage drops by more than 1 volt or so while powering the wheels then something is likely interfering with the wheel motion or drawing power from somewhere else.
So, just to verify – with the robot not on the ground (prop it up on blocks or a box or something), how much voltage drop are you seeing when you drive forward, strafe, and turn? If you’re seeing a large voltage drop here, that’s worth looking into, both mechanically and programmatically. If a large voltage drop only happens when strafing or turning in the air, but not when going forward or backward – that would be an important clue also.
By way of example, my team’s robot has a voltage drop of about 0.5v when the robot is in the air, regardless of forward, strafe, or turn. (We have four 13.7:1 motors, direct wheel drive.)
When a robot is on the floor, it’s acceleration that draws the most power and drops the voltage. Our team often sees a 2 volt drop on our robots when we accelerate from full stop to full speed, either going forward or strafing. We don’t see as large a drop when turning… maybe 1 volt or so. Our robot weighs around 27 pounds, and given the higher-speed / less torque motors we use (13.7:1 as opposed to 19.2:1) we do expect voltage drops in the 2 to 3 volt range while running hard. But we don’t get anywhere close to the 4 volt drop described in the top post ( unless we’re running on a low battery ).
That’s why I’m thinking there may be something mechanical in nature. It could also be a programming thing, such as motors inadvertently being turned on/off in the same loop cycle, but it’d be good to check the mechanical bits first.
I do recommend creating a simple opmode that just sends power to the drive motors and see if you still get the voltage drops. That can help determine if it’s a programming problem or a mechanical one.
Ok, ill see if the getcurrent command gives any useful data. When the robot is propped up on blocks, the voltage drops to around 10.2. the voltage drop does not occur as badly when we go forward or backward, only during strafing and rotation. I think ill try disconnecting the drive shafts and just run the empty motors to see if the problem might be with the chassis itself. Ill also try a simple opmode.
I reassembled our chassis, and not when the robot is propped up the voltage drops less than one volt. However, the voltage still drops significantly especially when strafing. The
frontLeft.getcurrent() command does not return any values.
I would love to see video of the robot on blocks while it’s running forward, and then strafing. The only difference is that two motors are running the opposite direction when strafing. Maybe there’s a mechanical reason you’re pulling so much current when that’s happening, as if something is rubbing. If it was pulling lots of power on the floor, I’d say your Meccanum wheels aren’t in the right pattern. But up on blocks, I question whether or not transmissions are too tight on the motors. I also hate bevel gears, but that’s more of a “me” problem than a “you” problem, but I’ve had bevel gears that don’t mesh the same when run forwards vs backwards.
Sorry for the late response, we were preparing for a competition and had basically decided to live with the issues at that point. It did not hinder our teleop anymore, surprisingly. At that point we attempted to focus on auton, but our robot drifts a lot. Like we cant make it do anything, not even go straight. Im wondering if this could be related to the voltage issues? Also, our rearright motor makes gear slipping sounds when strafing now.