A fresh four-Kraken drivetrain will happily pull hundreds of amps of stall current (a single Kraken X60 stalls at ~366A at 12V in trapezoidal mode, even higher under FOC) and drop your battery below the 6.3V/6.75V brownout floor in the first second of a match. Current limits are how you trade a little top-end torque for reliable, brownout-free driving. There are two kinds, and you need to understand both.
Stator current is the current at the motor windings; it is directly proportional to torque. Capping it controls wheel slip and heat. Supply current is the current drawn from the battery (roughly stator current x duty cycle); capping it prevents breaker trips and brownouts. CTRE notes that because stator limits also bound supply current, it is sometimes unnecessary to enable both.
CTRE TalonFX / Kraken X60 (Phoenix 6, Java):
import com.ctre.phoenix6.hardware.TalonFX;
import com.ctre.phoenix6.configs.CurrentLimitsConfigs;
TalonFX driveMotor = new TalonFX(1);
var limits = new CurrentLimitsConfigs();
// Cap torque/slip at the wheels
limits.StatorCurrentLimit = 120;
limits.StatorCurrentLimitEnable = true;
// Protect the battery and 40A breaker
limits.SupplyCurrentLimit = 70;
limits.SupplyCurrentLimitEnable = true;
// After 1s above the lower limit, clamp down to avoid breaker trip
limits.SupplyCurrentLowerLimit = 60;
limits.SupplyCurrentLowerTime = 1.0;
driveMotor.getConfigurator().apply(limits);
The field names SupplyCurrentLowerLimit / SupplyCurrentLowerTime are the Phoenix 6 2025 replacements for the old SupplyCurrentThreshold / SupplyTimeThreshold. CTRE explicitly recommends tuning limits empirically for your robot rather than copying preset numbers; a 120A stator / 70A supply pair is a widely used community starting point for swerve drive, not an official CTRE-mandated value. Steering (azimuth) motors can run a lower stator limit (~60A) because they rarely need peak torque.
REV NEO / SPARK MAX (REVLib 2025, Java):
import com.revrobotics.spark.config.SparkMaxConfig;
import com.revrobotics.spark.SparkBase.ResetMode;
import com.revrobotics.spark.SparkBase.PersistMode;
SparkMaxConfig cfg = new SparkMaxConfig();
cfg.smartCurrentLimit(60); // applies a single combined limit
motor.configure(cfg, ResetMode.kResetSafeParameters,
PersistMode.kPersistParameters);
REV's smartCurrentLimit() is strongly recommended for the NEO, whose low internal resistance produces dangerous current spikes if uncapped.
Tuning procedure (do this on blocks, then on carpet):
- Set NO supply limit and a high stator limit. Floor it and watch the wheels.
- Lower the stator limit until the wheels stop slipping on hard acceleration; set the limit just under that point.
- If you still see brownouts (roboRIO Power LED amber, or
RobotController.isBrownedOut()true), add a supply limit starting around 70A and lower until brownouts stop. - Log it: read
driveMotor.getStatorCurrent()andgetSupplyCurrent()to a NetworkTables/SmartDashboard graph and confirm your limits are being respected.
A well-limited drivetrain feels slightly softer off the line but never browns out, never trips a breaker mid-match, and runs cooler over a whole event.
Key takeaways
- Stator limit controls torque/wheel slip; supply limit prevents brownouts and breaker trips, and a stator limit alone also bounds supply current.
- CTRE recommends tuning current limits empirically; 120A stator / 70A supply is a common community swerve starting point, not an official CTRE value. Tune stator first, add supply only if brownouts persist.
- REV's smartCurrentLimit() is essential for the NEO's low-resistance spikes; SupplyCurrentLowerLimit/Time are the Phoenix 6 2025 field names.
Keep going
Take the quiz · +10 XP with an accountSources & 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 — publicly, in the corrections log.
Sources and further reading
- CTRE: Improving Performance with Current Limitsv6.docs.ctr-electronics.com
- WPILib: roboRIO Brownouts and Understanding Current Drawdocs.wpilib.org
- REVLib: Migrating to REVLib 2025docs.revrobotics.com
Read next
Articles on this, for competition day
The lesson covers how it works. These cover what to do when it breaks.
- 18 min read
CTRE Phoenix for FRC: Kraken X60/X44, TalonFX, Phoenix 6, CANcoder & Pigeon 2
A practical guide to the CTRE Phoenix ecosystem for FRC: Kraken X60/X44 motors, TalonFX, Phoenix 6 API, Pro/FOC licensing, CANcoder, Pigeon 2 & CANivore.
Read - 20 min read
REV Robotics for FRC: NEO Motors, Spark MAX/Flex, PDH & MAXSwerve
A practical guide to the REV Robotics FRC ecosystem: NEO, NEO Vortex and NEO 550 motors, Spark MAX and Spark Flex controllers, the PDH, and MAXSwerve.
Read - 8 min read
FRC Motors Compared: NEO vs Kraken X60 vs Falcon 500 vs NEO Vortex
Compare FRC brushless motors: REV NEO, NEO Vortex, Kraken X60, and Falcon 500. Exact specs, FOC explained, and which motor to pick for drivetrain vs mechanisms.
Read
Lesson quiz
RequiredAll 3 right completes the lesson. Miss one and only that question comes back — anything you already answered correctly stays banked.
0 of 3 answered
01.On a CTRE Talon FX, what does the stator current limit actually limit?
02.Since a stator current limit also bounds supply current, which limit is the recommended starting point to tune first?
03.How is current limiting configured on a REV SPARK MAX driving a drivetrain motor?
Answer every question to submit.
All 35 lessons in Electrical & Wiring
- Not started:Mini-Project 1: A Single-Motor Test Stand from Battery to Spin
- Not started:Mini-Project 2: Current-Limited Drivetrain (CTRE and REV)
- Not started:Mini-Project 3: A Live Power-Monitoring Dashboard
- Not started:Mini-Project 4: A Switchable Channel for Lights and Vision
- Not started:Mini-Project 5: CAN Device Bring-Up with Tuner X and the Hardware Client