Breaker Modeling


You should probably also monitor the temperature as it cools (with no current, but nothing actively cooling it) as well. Maybe not so critical for use within a match, but it would be essential for predicting longer terms.


Factors such as the airflow around the breaker and the thermal mass of what the breaker are mounted to will have an effect on how it behaves. One also has the problem of how to define a current vs. time profile that makes sense since each robot will be different.

The large industrial breakers I used at previous jobs behaved the same way and were influenced by the same factors. We did some basic calculations and always did extensive testing to verify correct operation.


I have taken a look at the derating curve; it is quite simple to account for ambient temperature using that data. I didn’t think about accounting for changes in the temperature of the breaker housing, thanks for informing about this issue. Adding that to the model is somewhat complicated by the fact that there is a relationship between current and temperature; I don’t know if when the supplied data on pop time vs % of rated current was taken, housing temperature was rising significantly over time. If 160 amps are run through the breaker, it theoretically takes about 40 seconds for the breaker to pop. In that time how much does the breaker housing heat up? If we assume that the data on current vs pop time involves no rise in housing temperature, then the curve may simply be shifted in real time using a sensor. This is probably unreasonable, but it will only make the model more conservative.

Sound like a good idea for testing. Also, all match data will be logged and eventually published along with the results of any testing we do, potentially including breaker temp data.

I am curious what those basic calculations were and what testing was done. Also, did you end up modeling the breakers in real time?


To be sure it is not the ambient temperature that is important, it is the temp of the bimetal strip inside the breaker that matters. In my opinion, the wire does a great job at removing heat, drawing it away from the interior of the breaker. One side of the metal is welded to the contact on the outside of the breaker. The interior space will be near ambient at the start of the match.
The variation in the specification curve is more a production variance than anything else.
Please remember that FRC multiple motor drives may not have a 100% duty cycle at max current. If the robot is actually moving, CIM motor current should be considerably less than stall current. While worse case stall current on a CIM motor is 131 amps, wiring and speed controllers enter significant loss on FRC robots. On average, I would place stall currents in the 100-110 amp range for FRC robots. Many teams use a “turbo” mode in their software that runs the robot at somewhat less than full throttle for the majority of the match and then only use “full throttle” when needed for speed. While less than full throttle, max current will not occur in all motors at the same point in time. The PWM output of the motor controllers is not in sync and the motor commutators are neither running at the same speed or commutator position.


Yep, I was planning on using the PDP’s measured current as the input to the model for the 120 amp breaker. So it will account for all current flow, including from items other than motors.


If you have any inclination to integrate a proper thermal analysis into your model, I’ve already done most of the legwork.

Original post here, discussing the effect of pre-cooling a main breaker with canned compressed air before the start of a match:
(WARNING, this original post made an incorrect assumption of the main breaker’s series resistance, and so the final numbers are off by a factor of 6.)

I unfortunately can’t edit the original post anymore, so I updated the calculations and published the result as a white paper:


The nominal main circuit breaker trip current is an i^(constant) x t relationship.

This FRC 120 amp breakers trip appears to be around i^(.4) x time based on the spec sheet.

The circuit breaker is in a molded (insulated) case which will reduce the effective heat transfer rate.

At room temperature (77° F) the trip current is about 113% of rated. The resistive heating will be related to a function of integrated V*I with time. At some point the heat transfer rates will tend to stabilize the internal temperature. I’d suspect this would be warm enough to bring the internal temp to close to 100° F or more, and reduce the trip current to the rated 120 Amps or a bit less.

You could measure the breaker metal terminal temperatures to get a better idea of internal temperature vs time.


As Al noted, the main route to sink the breaker heat is the wires, not the case.

Definitely better than the case.


Let’s put some physics to this.

Breakers trip because of heat. So we should do an energy balance and consider this an open system with no work being done. Heat energy enters the system because the breaker / wire assembly has a small resistance. Heat energy leaves the system via conduction or convection.

Q_breaker = Q_resistance - Q_cooling

All power dissipated in a resistor is converted to heat energy. This is expressed as P = I^2 * R. This gives you a result in Watts. Current can be measured with acceptable accuracy through the PDP.

Modelling the heat loss via conduction or convection gets a bit more complicated but can be assumed to be linear over time based on the governing equations.

To test the validity of this method let’s generate a curve that hopefully matches reasonably well with the data sheet using these equations.

Using arbitrary numbers let’s say we believe the breaker trips after applying 150 amps for 500 seconds (based roughly on the data sheet, in reality you’ll want to determine this experimentally). We’ll assign a resistance value of 0.001 Ohms (it’s arbitrary and doesn’t really impact the calculations). We’ll also arbitrarily say that the breaker has 2 W of cooling via conduction.

Q_resistance = (150 amps)^2 * 0.001 Ohms * 500 seconds] = 11250 Joules
Q_cooling = - (2 J/s * 500 seconds) = 1000 Joules

So we can say that the breaker will trip when it reaches 10250 Joules of heat (this corresponds to a temperature via a specific heat value) Note that I didn’t look up specific heat values or resistances for anything for the sake of quick math so my Joules are probably way off from realistic numbers.

Now to solve for time to breaker trip at a different current we can do some algebra.

Q_breakerpop = I^2Rt - P_cooling*t

t = Q_breakerpop / (I^2*R - P_cooling)

This reasonably creates a similar arc as the data sheet generates, but likely needs a lot of tuning via experimental values.

Since I is obviously not constant in a match a model could be generated tracking heat generated using the PDP data.



We did the calculations that people have already discussed. We also added a 25% factor to account for surge currents in our application.

Because the breaker is a thermal device, and the trip current is dependent on the actual absolute temperature of the trip element, the ambient temperature around the breaker DOES affect the actual trip current. The thermal mass of the other parts of the breaker and the thermal conductivity to the ambient also has a significant effect. Because the thermal mass of the breaker components has an effect, the “history” of the current profile over time will have an effect. Calculations that don’t take these factors into account will most likely give misleading results.

Thus, one would have to characterize the breaker behaviour for each particular robot to get an accurate estimate of the trip point. This characterization work makes sense if one is building a bunch of very similar robots. Typically, each team will have a different environment for their breakers so it will be difficult to use the results for one team on a different robot.

It seems that the OP may be trying to use the breakers as a current limiting device. Breakers are meant only to serve as protection devices and are never designed to have a precise trip level. If your objective is to prevent the breakers from tripping in high current applications, the proper way would be to set the current limit of all of the motor controllers in each application (drivetrain, winch, shooter) to the same level, ensuring that level is below the minimum trip current of the breakers, taking into account any de-rating factors. The current limit level of the motor controllers should be more consistent, from one unit to another. It should also be largely insensitive to the ambient temperature and the history.


But that means we would be slower/less powerful/etc than someone else who pushes the envelope. Our auto shifting 6 cim drive train would easily exceeded the current limit for short periods of time. We also had code that monitored how long we were above a calibrated max current level and would force a downshift, and a second monitor that would kill the drive motors if we exceeded it (that never happened in play), with the assumption it is better to lose a battle, than to trip a main breaker and be out for a match. Those calibrated values were educated guesses made based on these charts, some math, and real world experience.

All of that said, under the RoboRIO, we were far more likely to experience brown outs, and adjusting everything to avoid/minimize brownouts will make it very unlikely to ever trip the main breaker. We ran test runs, adjusted motor ramping, current limits, etc until under abusive driving conditions with a fresh battery, brownouts were very rare and when they did occur they were of the very short variety. This combined with a fairly smart auto-downshift, and a traction limited low gear; we did not have any issues with the main breaker all season.


With ALL things equal (including your driver’s driving style/strategy), allowing higher motor currents might give you an advantage. Of course, all things are not really equal so it is possible to have a robot with lower motor currents outperform one with higher motor currents.

It will be better for teams to implement current limit through the motor controller than to have the breakers open, even the snap action ones in the PDP. Pushing the envelope, as you are suggesting, might give you 5-10% more peak current, for periods of 1 second or less, but you will have a greater risk of opening a breaker. It also makes you vulnerable to variations in factors such as the ambient temperature and part-to-part variations (breakers are not tightly calibrated). Will that slightly higher peak motor current really make a measurable difference in your performance? Is the risk of opening a breaker acceptable to your strategy? Can you devise a way to get better overall performance by not pushing the motor power envelope so hard so you can have reliable power? Why are you allowing abusive driving conditions? The sustained high current draw conditions will wear out your batteries faster.


By applying the model OP created, I think I have a pretty good framework for breaker simulation that just requires information available on the breaker data sheet, knowing the electrical resistance of the breaker (which is theoretically not too hard to figure out), and knowing the internal temperature required to trip the breaker. Using the method OP outlined in the paper, we can calculate the effective thermal conductance (watts/degree C) to be equal to: (rated amperage)^2 * ® / (internal temp required to trip - ambient temperature of testing on data sheet). This calculation assumes that if the rated load is passed through the breaker indefinitely it will asymptotically approach tripping. See the paper for more detail. For my calculations, I assumed the ambient temp of testing was 25 C, which is supported by the temperature derating curve. Then, we must calculate the specific heat for the breaker (degree C/joule). The calculations are discussed in the paper, but specific heat = Log(1 - ( internal temp required to trip - ambient temperature of testing on data sheet)/(I^2R/thermal conductance)) / (thermal conductancetime) where I is the current of a point on the current vs time curve on a data sheet and time is the corresponding time. This calculation may be done for several points and then the specific heats can be averaged. Additionally, you can choose points on the lower bound, upper bound, or middle of the curve depending on what you want you estimate of internal temperature to represent, a lower bound, an upper bound, or an average value. Then, (as discussed in the paper) the differential equation DT/dt = specific heat * (I^2R – thermal conductance(T – ambient temp)) may be numerical integrate with variable I (current) to estimate the internal temp, T. I used this approach to recreate the current vs time curve and temperature derating curves for the 120 Amp breaker to test the models accuracy. In this case, I was trying to estimate the lower bound of how long it would take to trip. I used c++ and once I clean up my code I will post it somewhere. The current vs time curve has current in units of multiples of rated current (120 Amps).

The derating curve has temp on the x axis and effective rated current on the y axis.
Both curves match closely, though the derating curve looks quadratic rather than linear, I am not sure why that curve has the wrong shape (the values very close toward the middle).


You are all correct in talking about internal temperature but the majority of temperature rise internally is due to the resistance of the contact. The series resistance of the other parts is a fraction of this resistance. Additionally that resistance rises with operation cycles and any pitting that might occur during breaker life. One of the contacts is welded to a rather large bi metal strip.
Here is a picture of the inside of the breaker for reference. More heat is generated by loose connections to the terminals of the breaker on many robots.


Good point!
Makes me wonder whether the widths of the time-to-trip and temperature-derating curves might come from more than just manufacturing tolerance… For improved model accuracy, we might need a whole new derating curve based on number of operation cycles. ::rtm::

And here’s another useful insight!

I never thought of it that way, but a loose terminal connection would generate enough heat to dramatically reduce the current required to trip one of these breakers.


Of note, the main breaker uses 1/4-28 nuts and studs. As far as I’m aware, nothing is preventing teams from using nylock 1/4-28 nuts with the main breaker.


2017’s R71 F allows it. (Emphasis mine)


The resistance of the loose connection at the breaker (or at the battery terminals) will cause larger voltage drops than one would expect at any particular current, possibly causing unexpected brownouts.


The point I was hoping to make is that loose connections heat the outside terminals significantly and that heat is conducted directly to the parts inside. I can’t tell you how many robots I see each year with loose connections. Teams are shocked when I walk up and wiggle the #6 leads and often I will give a small tug and pull the wires right out of the terminals.

I will again make a statement about terminals I see way too often. The terminals teams buy at Home Depot (or other big box stores) that use a screw to hold the wire are designed for solid wire. Type ADR2-B2-5 is one of these terminals. The screw will push the strands of the wire up the sides of the terminal reducing your #6 to a #12 or smaller equivalent wire size. You want a terminal where the screw tightens a clamp on the wire. When you use a clamp type terminal be sure to strip the wire sufficiently to allow at least 1/8" of wire to extend beyond the clamp. This will prevent the wire from being pushed out of the terminal over time.


Not sure if it helps, but here is one way to get the closed form solution for the trip time in Python (without heat modeling, just using the spec sheet). Not sure if that helps with the analysis:

I should probably update this to be heat based.