Current Limiting
Why Limit Current?
Current limiting protects motors from burning out and prevents the main breaker from tripping. It is the single most important safety configuration.
Types of Limits
Stator (Smart) Limit: Limits current inside the motor. Protects the motor from overheating. Use this for mechanism safety.
Supply (Secondary) Limit: Limits current drawn from the battery. Protects the main breaker/battery. Use this to prevent brownouts.
Set both, every time
They protect different things:
- Stator protects the motor. A jammed mechanism draws enormous current inside the motor and cooks the windings.
- Supply protects the battery and breaker. It is what keeps the robot from browning out mid-match.
Setting only one leaves the other problem unsolved. Supply should be the lower of the two — a motor can briefly pull far more current than the battery should be asked to deliver.
Recommended Values
Starting points:
- Drivetrain: 40A - 60A
- Intake/Roller: 20A - 30A
- Elevator/Arm: 40A - 50A
- NEO 550: NEVER exceed 20A - 25A.
For reference, the values used on a 2026 competition robot:
Limits on a real robot
| Subsystem | Stator | Supply |
|---|---|---|
| Shooter | 90 A | 60 A |
| Transfer | 90 A | 45 A |
| Intake rollers | 80 A | 60 A |
| Conveyor | 60 A | 40 A |
| Intake pivot | 45 A | 30 A |
The rollers get high stator limits because they are expected to stall against a game piece; the pivot gets a low one because a stalled pivot means something is wrong.
Code Examples
package frc.robot.subsystems;
import com.ctre.phoenix6.hardware.TalonFX;
import com.ctre.phoenix6.configs.TalonFXConfiguration;
public class Drivetrain extends SubsystemBase {
private TalonFX motor = new TalonFX(1);
// ... (other fields and methods)
public void configureCurrentLimits() {
TalonFXConfiguration config = new TalonFXConfiguration();
// Stator current limit: protects the motor from overheating
config.CurrentLimits.StatorCurrentLimitEnable = true;
config.CurrentLimits.StatorCurrentLimit = 40.0; // Amps
// Supply current limit: protects battery and prevents brownouts
config.CurrentLimits.SupplyCurrentLimitEnable = true;
config.CurrentLimits.SupplyCurrentLimit = 50.0; // Limit in amps
config.CurrentLimits.SupplyCurrentThreshold = 60.0; // Threshold to trigger
config.CurrentLimits.SupplyTimeThreshold = 0.1; // Time above threshold before limiting
motor.getConfigurator().apply(config);
}
// ... (rest of class)