Current Limiting

intermediate15 min

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

SubsystemStatorSupply
Shooter90 A60 A
Transfer90 A45 A
Intake rollers80 A60 A
Conveyor60 A40 A
Intake pivot45 A30 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)

Resources