Concept 01: Brushless DC Motors, Back-EMF & Torque Curves
When an FRC robot pushes against a heavy defense barrier, motor current can instantly spike to over 300 Amps, causing severe battery brownouts. Yet when the same robot cruises at full speed across an open field, current drops to a mere 15 Amps.
Understanding why motors behave this way requires looking at the fundamental physics of Back-Electromotive Force (Back-EMF) and electromechanical torque curves.
Open the interactive demo below to inspect live dynamometer curves for modern brushless motors (Kraken X60, Falcon 500, NEO) and observe torque, current draw, and peak mechanical power under varying voltage and load RPM.
1. The Electromechanical Circuit
A DC motor consists of permanent magnets and wire coils with internal electrical resistance R. When you apply battery voltage V_applied:
- Current Creates Torque: Flowing electric current
Icreates a magnetic field that exerts mechanical torqueτon the rotor:τ = K_t · I(where
K_tis the Motor Torque Constant in Nm/Amp). - Spinning Creates Generator Voltage (Back-EMF): As the rotor spins at angular velocity
ω, the moving magnets induce a reverse electrical voltage inside the wire coils—acting like an internal generator that fights your battery:V_emf = ω / K_v(where
K_vis the Motor Velocity Constant in rad/s per Volt). - Total Voltage Balance (Ohm’s Law):
V_applied = I · R + V_emf
Rearranging for current draw:
I = (V_applied - ω / K_v) / R
2. The 4 Key Operating Points on a Dyno Curve
Torque (Nm) ──► Max (Stall)
│ \
│ \ Torque Line (Decreases Linearly)
│ \
│ \ Peak Mechanical Power (at 50% RPM)
│ \ ┌───┐
│ \ / \
│ \ \
└───────────────\───────\────► Motor RPM
Stall (0 RPM) Free Speed (Max RPM, 0 Torque)
- Stall Condition (
ω = 0):- The motor is blocked and cannot rotate.
V_emf = 0V. Current reaches maximum:I_stall = V / R(~300+ Amps!).- Output torque is at its maximum peak (
τ_stall = K_t · I_stall), but mechanical power is 0 Watts (Power = τ · ω = 0).
- Free Speed Condition (
τ = 0):- The motor spins with no external mechanical resistance.
V_emfalmost matchesV_applied. Current drops to near zero (I_free), producing zero useful torque.
- Peak Mechanical Power (
50% Free Speed):- Mechanical power is the product of torque and angular speed:
P_mech = τ · ω. - The power curve is a parabola that reaches its absolute peak at exactly half of free speed (
½ · ω_free).
- Mechanical power is the product of torque and angular speed:
- Maximum Efficiency (~85% Free Speed):
- Electrical energy is converted to mechanical output with minimum heat loss
I² · R.
- Electrical energy is converted to mechanical output with minimum heat loss
3. Solving It in Code (Java & WPILib)
First-Principles Java
public class MotorPhysics {
public static double computeCurrent(double appliedVolts, double speedRadPerSec, double R, double Kv) {
double vEmf = speedRadPerSec / Kv;
return (appliedVolts - vEmf) / R;
}
public static double computeTorque(double currentAmps, double Kt) {
return Kt * currentAmps;
}
}
Production WPILib Equivalent (DCMotor)
WPILib includes built-in, pre-measured physical constants for all major FRC motors in edu.wpi.first.math.system.plant.DCMotor:
import edu.wpi.first.math.system.plant.DCMotor;
// 1. Get calibrated Kraken X60 physical motor model
DCMotor kraken = DCMotor.getKrakenX60(1);
double appliedVolts = 12.0;
double currentSpeedRadPerSec = 300.0; // ~2865 RPM (near 50% power)
// 2. Query WPILib for torque and current draw
double currentAmps = kraken.getCurrent(currentSpeedRadPerSec, appliedVolts);
double torqueNm = kraken.getTorque(currentAmps);
double mechPowerWatts = torqueNm * currentSpeedRadPerSec;
System.out.printf("Kraken X60 at 300 rad/s -> Current: %.1f A | Torque: %.2f Nm | Power: %.0f W%n",
currentAmps, torqueNm, mechPowerWatts);
4. Math! Translation Sidebar
The electromechanical motor equation in physics literature:
V = I · R + K_e · ω
τ = K_t · I
The Inherent Equality of K_t and K_e:
- In standard SI metric units (
Newton-meters / AmpandVolts / (rad/sec)), the torque constantK_tand back-EMF constantK_e = 1 / K_vare mathematically identical:K_t = K_e.