Im in the process of checking our batteries’ internal resistance values, and I was wondering whats a good range for the internal resistance.
Our batteries’ resistance goes between 13 mOhm and 21 mOhm.
Whats the highest acceptable values for a battery that will be used in a robot match?
What should the resistance value be with a new battery?

Unless you use the battery pretty heavily (lots of motors, heavy stuff moving fast, getting into pushing matches), those are all pretty good. When they get into the mid 20’s, its time to move them to the control teams’ test board and perhaps things like programming auto or brief tests and demos. When they get into the upper 20’s, time to recycle.

Added: to prolong battery life, keep them charged. Unless the battery is warmer than you, recharge shortly after use. If your team takes an extended break at some point in the year, be sure to top all your batteries off every few weeks during that time.

Internal resistance is not just theoretical. Ohm’s Law states that E=IR, or the voltage is the product of the resistance and the current. Georg Ohm needed to define resistance, so he picked an easy value.

So let’s say you are drawing 200 Amps from a 12.6 volt battery. If the internal resistance is 20 mOhm, then the voltage drop within the battery is 4 volts - meaning you will get only 8.6 volts at the terminals.

Now you need to decide if, at 200 A, 8.6 V is ‘good’ or ‘bad’. Note that it is not necessarily bad, since 200 A is an extreme value not often seen in a 150 second match.

Also note that this is the technical explanation for a brown-out.

Make sure the bolts holding the cables on the battery terminals are tight enough that the cable/lug cannot be rotated with finger pressure. A loose connection causes a high contact resistance that is in series with the internal resistance of the battery, making things worse.

If I understand you correctly, and assuming the PDP slots are wired in parallel (neglecting the RIO amp usage and assuming nothing is connected to the VRM), the max voltage drop across the terminals can be calculated as \Delta V = V_{bat} - \sum I_{i} * R_{internal}, where I_i represents the max amperage each mechanism uses? I’ve just studied this stuff at school and this is a pretty cool real life example of it (if I am correct and my assumption about the PDP is correct)!

Idealized, yes. So it’s pretty easy to figure out the percentage of available power (Power = Voltage * Current) that you will lose if your battery has a higher internal resistance.

New batteries generally come between 0.011 - 0.016 Ohms in my experience. We got one that was at like >0.025 Ohms out of the box once, and we sent it back (don’t buy cheap batteries off of Amazon, kids). That said, it is important to note that the internal resistance measured by a Battery Beak is affected by the quality of the connection between the Anderson connector and the battery lugs (including all the respective wire crimps).

Yes basically; a great application of Ohm’s law in the real world! But keep in mind that R_{internal} is the total system resistance, including resistances from the battery, main power wiring, main breaker, and PDP branch circuit wires.

I guess that is true, since the main power wiring resistance can’t be neglected. Can the main PDP branch circuitry’s resistance be neglected?

I’ve actually thought about an interesting addition to your calculator following this - I built a simple calculator that gives you the estimated max voltage drop across a battery given the max amperage each mechanism takes, and the (poorly) estimated time it will take to trip the main breaker. I can send it to you if that sounds interesting

The time-to-breaker-trip function is an interesting concept. Sounds like it wouldn’t be too hard to approximate a regression of the functions from the breaker datasheets and add them as an output. I’d need to add “Breaker Size” as an input, but certainly not the end of the world.

I’m not sure how useful the voltage drop calculation would be though. My mechanism spreadsheet deals with the mechanism’s steady-state response. At start up the mechanism will draw a lot more current (stall current, actually) and the voltage drop will be much higher. If your roboRIO is going to brown out, it would probably do it as the motors are starting at stall and not at steady-state.

Since they are thermal breakers, history has a significant effect on their tripping action. You would also have to model how fast they cool down to get a realistic simulation. A short, narrow current spike at 2X the rated trip current could trip the breaker if the current had been at the rated trip current for some long time then returned to zero current just prior to the current spike. In contrast, if there had been no current flowing through the breaker for a long time before the same 2X current pulse, the breaker might not trip.

Ri is a battery parameter. Rtot is the entire circuit’s resistance. And no, none of it can be ignored at higher currents. Low current circuits, on the other hand, can often ignore resistance.

As previously, 0.020 Ohms (20 mOhm) at 200 A drops 4 volts.
But 0.2 Ohm (10 times higher) at 500 mA (1/2 Amp) drops only 1/10 volt.

This is why AC electricity is transmitted at high voltages (like 384 kV), often at currents of just a few Amps: Cutting ohmic losses. The easy transformation of AC from one voltage to another is why Edison lost his bid to electrify the world with DC,

So on a tangent here: I want to be able to evaluate the voltage drop that a mechanism’s motors will create when in use.

My understanding is that I need to know the new (dropped) battery voltage in order to calculate the current through the motors but I need to know the current through the motors in order to calculate the new battery voltage.

Is there a way to model the motor as a resistor if you know the speed of the motor and it’s characteristics?

EDIT: Just to clarify, I want to calculate battery voltage drop from internal resistance and motor speed instead of internal resistance and motor current draw.

The motor current can be approximated linearly using the formula i = \frac{i_{stall}-i_{free}}{\omega_{free}} \left( \frac{V}{12} \omega_{free} - \omega \right) + \frac{V}{12} i_{free} . Then you can use V=iR to find the voltage drop knowing the resistance of the battery and wiring.

Right, but that’s at exactly 12vdc. In most FRC circumstances, the system will be at some different voltage due to battery voltage drop. A drivetrain at the beginning of it’s acceleration curve might bring the voltage down to below 10vdc which will affect the current draw of the motor which will, in turn, affect the voltage drop of the battery (and on and on it goes).

I went back and fixed the formula. Basically, all four of the motor constants \omega_{free}, \tau_{stall}, \omega_{free}, and \omega_{stall} scale linearly with voltage. So if you multiply each by the voltage ratio, you get the current draw adjusted for different voltages.

That still doesn’t answer the question I’m asking. V is the NEW voltage of the battery. That voltage is driven by i… Which is calculated using V. There’s a circular dependency between these two equations that I’m not sure how to resolve.

Battery model is a static Voltage and resistance pair. The user can change these based upon expected start/middle/end match conditions.
IR drops of cables are accounted for - AWG and length can be altered to suit the user.
Motors and motor current limits can be selected as can gearboxes.

The Voltage plot shows the battery terminal, PDP, motor drive and motor Voltages as a function of time.

I think I get what you’re asking now. I’ve never actually seen an analytical solution to the problem. Most simulations will use the bus voltage from the previous time step for the current draw. Then they’ll use that current draw to calculate the bus voltage for the next time step.