Skip to content
Electrical & Wiring·Lesson 26 of 34

Brownouts: Why the Robot Goes Limp

Understand the multi-stage brownout protection and the systematic fixes, from current limits to battery health.

Sign in to track progress, earn XP, and save lessons.

A brownout is the roboRIO protecting itself when battery voltage sags too low. It is the most common reason a healthy-looking robot suddenly stops responding mid-match. Understanding the stages tells you how close to the edge you are running.

The stages (from WPILib):

  • ~6.8V (Stage 1): the roboRIO's 6V output rail begins to diminish.
  • 6.3V on roboRIO 1, 6.75V default on roboRIO 2 (Stage 2): PWM/relay outputs, user rails (6V/5V/3.3V), CAN motor control, and pneumatics are disabled. This is 'the robot went limp,' and the Power LED turns amber. The roboRIO stays here until voltage climbs back above 7.5V (or drops into Stage 3).
  • ~4.5V (Stage 3): the device may black out entirely; it restarts once voltage exceeds ~4.65V.

How to confirm a brownout actually happened:

  • roboRIO Power LED flashed amber.
  • The Driver Station log highlights brownout events; the DS power/CAN tab shows the 12V fault count.
  • In code: RobotController.isBrownedOut() returns true on the loop it occurs; log it with a timestamp.

Systematic fix workflow (do in order):

  1. Check the battery first. A sagging battery is the number-one root cause. A battery that reads ~12.6V at rest but drops to 9-10V under a 150A draw has high internal resistance and must be retired. Load-test it (see the battery lesson).
  2. Add current limits. Uncapped drivetrains pull enormous stall current. Set supply current limits (e.g. around 70A per drive motor on CTRE, smartCurrentLimit on REV) per the worked-examples module. Stator limits help even more at the start of acceleration.
  3. Build a power budget. Allocate a max sustained current across drivetrain, manipulators, and mechanisms (WPILib cites ~180A as a reasonable sustainable ceiling on a good battery, and warns that drawing ~240A for more than a second or two is likely to cause problems), and enforce mutually-exclusive high-draw actions in software.
  4. Check wiring and battery connections. A loose battery lug or undersized wire adds resistance and voltage drop exactly when current spikes. The battery-to-breaker-to-PD path must be 6 AWG (R609) and the lugs must be tight (rotational connections checked every few matches).
  5. Consider the roboRIO 2 brownout setting. On a roboRIO 2 you can adjust the threshold: RobotController.setBrownoutVoltage(7.0); (or SetBrownoutVoltage(7_V) in C++). The roboRIO 1 does not support an adjustable threshold. Lowering it just delays the inevitable and risks a full reboot.

Do not 'fix' brownouts by swapping to a fresh battery and hoping. Fix the current draw and verify with the power dashboard. A robot that browns out on a good battery will brown out on every battery by the third match of the day.

Key takeaways

  • Brownout cutoff is 6.3V (roboRIO 1) and 6.75V default (roboRIO 2); the Power LED goes amber and actuators disable until voltage recovers above 7.5V.
  • Root-cause order: battery health, then current limits, then power budget (~180A sustainable ceiling), then connections.
  • Confirm in code with RobotController.isBrownedOut() and the DS power/CAN fault count; only the roboRIO 2 supports setBrownoutVoltage().

Lesson quiz

Required

Answer all 3 questions correctly to complete this lesson.

1.At what battery voltage does the roboRIO (1.0) enter its main brownout protection stage and disable PWM outputs?

2.What is the underlying cause of most robot brownouts during a match?

3.Which is the BEST practice to reduce brownouts on an FRC robot?

Answer every question to submit.