Symptom: the robot freezes or loses subsystems under load, the roboRIO power LED flashes amber, and the Driver Station voltage display flashes red. That is a brownout - battery voltage crossed the roboRIO threshold (6.3V on a roboRIO 1.0, 6.75V default on a 2.0) and outputs were disabled until voltage recovered above 7.5V.
Debugging workflow (work top to bottom, change one thing at a time):
- Confirm it's a brownout, not a disconnect. Open the Driver Station Log Viewer after the match. Brownouts show as markers and a rising '12V fault count.' A comms drop looks different (radio/CAN). Don't fix the wrong problem.
- Check the battery first - it's the most common cause. Test with the Battery Beak: a battery reading 12.5V on an idle robot, or internal resistance above 0.020 Ohm, will sag hard under load. Swap to a battery that reads 12.7-13.5V open-circuit and under 0.015 Ohm. Never start eliminations on an untested battery.
- Inspect the high-current path. A loose SB-50 connector, a corroded or under-torqued battery lug, or wire thinner than 6 AWG between battery, 120A main breaker, and PDP/PDH all add resistance and cause sag. Wiggle-test connections; redo any that move.
- Look for a mechanical stall. A jammed mechanism pulls stall current continuously. If one PDH/PDP channel spikes, you have a binding gearbox or an over-driven motor.
- Add current limits in firmware. On a CTRE TalonFX set a SupplyCurrentLimit (e.g., 70A dropping to 40A after 1.0s) and enable it; on a REV SPARK MAX use setSmartCurrentLimit. This caps draw so voltage never reaches the brownout floor.
- Fix gearing. If wheels can't slip until far above ~40-50A per motor, the drivetrain can stall the whole bus. Re-gear so wheels slip before motors stall.
- Re-test and verify. Re-run the same driving pattern, watch RobotController.isBrownedOut() / getBatteryVoltage(), and confirm the DS log is clean. Don't declare victory without re-reading the log.
The #1 mistake is blaming code when the real cause is a tired battery or a loose lug. Always test the battery and the high-current connections before touching firmware.
the part worth keeping
Key takeaways
- Confirm brownout via the DS Log Viewer (markers, 12V fault count) before changing anything.
- Test the battery and the SB-50/lug/6 AWG path first - these cause more brownouts than code does.
- Cap draw with supply current limits and gear so wheels slip below motor stall.
SafetyCommon Safety Mistakes & Troubleshootinglesson 1 of 5
Keep going
Take the quiz+10 XP with an accountMore in Common Safety Mistakes & Troubleshooting
where this came from
Sources and corrections
This lesson is AI-assisted: drafted from primary sources, then reviewed and edited by hand. Errors still get through. When one is reported we fix it and write down what changed, in public, in the corrections log.
sources and further reading
- docs.wpilib.orgWPILib - roboRIO Brownout and Understanding Current Draw
- docs.wpilib.orgWPILib - Robot Battery Basics
- v6.docs.ctr-electronics.comCTRE - Improving Performance with Current Limits
clipped to this lesson
Articles that go further on this
The lesson gets you through the topic. These go wider on it, and they read in one sitting.
- 7 min readFRC Brownout: Why Your Robot Goes Limp and How to Actually Fix ItThe exact roboRIO brownout voltage stages, how to spot one in the Driver Station log, and the fixes ranked by payoff: current limits, battery health, gearing, and compressor scheduling./blogread it
- 13 min readWPILib Won't Deploy: Every Cause and How to Fix ItYour WPILib deploy is failing? Work the decision tree: wrong folder in VS Code, team number, roboRIO image, JDK version, macOS network privacy. Fixes for each./blogread it
- 7 min readFRC LED Lights: Wiring, Power Budgeting, and the WPILib AddressableLED APIHow to wire addressable LEDs off the PDH's switchable channel, budget their current draw, and use WPILib's AddressableLED API to signal robot state./blogread it
answer sheet
Lesson quiz
All 3 right completes the lesson. Miss one and only that question comes back, anything you already answered correctly stays banked.
0 of 3 answered
01On a roboRIO 1.0, at what input voltage does the controller cross its brownout threshold and disable outputs?
02What should you check first when troubleshooting brownouts, since it causes more brownouts than anything else?
03Which firmware measure most directly keeps motor current spikes from reaching the brownout floor?
Answer every question to submit.
All 28 lessons in Safetyopenclose
01 / culture-and-roles
02 / ppe-and-shop-safety
03 / battery-pneumatics-electrical
04 / events-and-program
05 / safety-worked-examples-mini-projects
- Not read yet:Mini-Project: A Battery Management & Logging System
- Not read yet:Mini-Project: Write a Robot Lockout/Tagout (LOTO) Procedure
- Not read yet:Worked Example: Current Limits That Prevent Brownouts
- Not read yet:Mini-Project: Assemble a Competition Pit Safety Kit
- Not read yet:Mini-Project: Run a Mock Pit Safety Inspection
06 / safety-common-mistakes-troubleshooting
- Not read yet:Troubleshooting Brownouts and Power Sag
- Not read yet:Battery Handling Mistakes That Cause Injuries and Fires
- Not read yet:Electrical Isolation and Wiring Mistakes Inspectors Fail You For
- Not read yet:Stored-Energy Surprises: Pneumatics and Springs
- Not read yet:Pit and Shop Conduct Mistakes That Hurt Your Judging
07 / safety-advanced-engineering-case-studies