Oversupplying voltage to motor controllers

At our last competition, we did something that may have been kind of evil. We’re don’t entirely know why it worked, or how, so I’m making this post to learn a bit more about it.

You see, our drive coach was unhappy with our defensive performance, and asked us to get a little more “oomph” out of the drivetrain. Unfortunately, we knew just what to do: we added a button that would disable the voltage safety limiters and boost the maximum output voltage on our drive Talon SRXes to 200%.

Now here’s the thing. We don’t actually understand what it did. My team’s electronics mentor says it theoretically shouldn’t have worked, but oversupplying voltage from the controller did do something. We’d just like to know what’s actually going on when we send the sketchy commands.

Also, if this is illegal, please let me know so we can never do it again.

1 Like

This shouldn’t do anything. Maybe if you have voltage compensation enabled it just breaks the compensated limit?
You definitely cannot boost that much power above battery voltage, so don’t worry, you did not break any rules.


Just mathematically and electrically speaking, it’s not possible for a talon to output a voltage that’s any higher than the input voltage. You’d need a z-source inverter or a boost converter or something similar. As @asid61 said, you probably had voltage compensation or some other form of voltage limiting enabled. Though, the placebo effect is a powerful thing — could just be that.

For the record, defense is based on driver cleverness and skill, rarely drivetrain power :wink:


I get what both of you are saying. That’s what my team’s electronics mentor said.

But we know it does something. Here’s why we tried this in the first place.

Back during build season, we were working on controlling our robot’s three-joint articulating arm. We proceeded to run into the major flaw of our design - we literally couldn’t provide enough torque to lift the arm off the ground in some positions.

That’s when we decided to test removing the voltage limit and motor safeties to see if it would move. I don’t remember exactly what I did (it took quite a lot of screwing around in Phoenix Tuner and robot code) but I was able to run the controller at 200% and lift the arm!

That’s how we know it isn’t a placebo…

A correlation isn’t a causation. There has to be another explanation because it is literally impossible for it to send more voltage.


Can you use a multimeter and experimentally determine what voltage is being applied at the ends of the motor controller before and after you make this change? That seems like a quick way to put this to rest.


What code did you alter or add? It would help us understand how you boosted the output to 200%.

1 Like

The only way this is possible is if during normal operation the mosfets for controlling the motor pwm can’t normally reach 100% duty cycle and increasing this limit somehow allows it to.

It would be a design flaw if they didn’t… But it’s possible I suppose.

Do what @DRandhawa said. If the voltages are the same then it was something else.

Do all your batteries perform equally?

1 Like

If the motor controllers are connected over PWM, maybe they haven’t been calibrated?

If you post the part of your code that disables these limits, we should be able to tell you what is happening.

Ok so I looked at your code, you’re doing a couple of things.

  1. calling motor.setSafetyEnabled(false)
    All this does is disable the motor safety, the motor safety checks that you are updating the motor with an output every so often. Basically, if its enabled and you stop calling motor.set(double), it will stop it.
    This does nothing which will affect the power output of the motor.
  2. Multiplying your move drive parameter (joystick y) by 2 and setting squaredInputs to false.
    The x2 multiplier will make your control curve steeper and disabling squared inputs will make it less curvy, making it feel more powerful.
    However, the motor output is capped at 1.0, setting it to 1.5 or 2.0 is the same as setting it to 1.0. this means you have a steep increase in power but it gets capped half way.

    See graphs for details where blue is your nitro mode.

None of this increase the total power of your drive train, you’ll just reach it before you get to the end of your joystick’s movement. In fact, any movement in the last half of the joystick won’t result in any change to the robot power (as it’s capped at 1.0).

This also would’ve affected the arm you talk about. You would have doubled the power at the positions that otherwise didn’t have enough power to move, and you may have noticed other positions had more power (up to the cap 0.5 in the graphs).


Nah, I’m talking about the motor PWM specifically.

The actual motor is powered by PWM, whether you’re using CAN or PWM to control the motor driver. The motor driver itsself outputs a PWM signal to modulate the motor voltage.

I definitely did more than that to get the arm to move, I just don’t remember what I did.
I’ll try and recreate the scenario next time I have access to the robot.