Back to Sensors & Actuators Series

BLDC Motors, PMSM & Linear Motors

April 10, 2026 Wasil Zafar 19 min read

The high-performance motor behind drones, electric vehicles, and industrial drives. Master brushless DC motor commutation, FOC control, ESC drivers, and practical embedded code.

Contents

  1. Overview & Types
  2. Working Principle
  3. Electrical & Mechanical Specs
  4. Driver Circuits
  5. Control Methods
  6. Code Example — Arduino & ESP32
  7. Real-World Applications
  8. Advantages vs. Alternatives
  9. Limitations & Considerations

Overview & Types

Brushless DC (BLDC) motors eliminate the mechanical commutator and brushes of traditional DC motors, replacing them with electronic commutation. This delivers higher efficiency, longer lifespan, and better power-to-weight ratio – making BLDC motors the dominant choice in drones, electric vehicles, and industrial automation.

Key Insight: BLDC motors are essentially “inside-out” DC motors – permanent magnets on the rotor, electromagnetic coils on the stator. Electronic commutation via Hall sensors or back-EMF sensing replaces mechanical brushes.

Motor Types

  • BLDC (Trapezoidal): Back-EMF waveform is trapezoidal. Simpler control using six-step commutation. Most drone motors and hobby applications.
  • PMSM (Sinusoidal): Permanent Magnet Synchronous Motor with sinusoidal back-EMF. Smoother operation, higher efficiency, used in EVs and industrial servo drives. Requires FOC (Field Oriented Control).
  • Outrunner: Rotor (with magnets) is on the outside, stator inside. Higher torque, lower speed. Common in drones and direct-drive applications.
  • Inrunner: Standard configuration with rotor inside stator. Higher speed, used with gearboxes. Common in RC cars and power tools.
  • Linear BLDC: “Unrolled” BLDC that produces straight-line motion. Used in maglev trains, semiconductor manufacturing, and high-speed pick-and-place.

Working Principle

A BLDC motor has three stator windings arranged 120° apart. The controller energizes pairs of windings in sequence to create a rotating magnetic field that pulls the permanent-magnet rotor along:

Six-Step Commutation (Trapezoidal)

  1. At any instant, two of the three phases are energized (one HIGH, one LOW, one floating).
  2. Hall sensors (or back-EMF zero-crossing detection) determine rotor position.
  3. The controller switches to the next commutation state every 60 electrical degrees.
  4. Six states complete one electrical cycle. For a motor with N pole pairs, one mechanical revolution = 6N commutation events.

Field Oriented Control (FOC / Vector Control)

FOC treats the motor as two independent control variables:

  • Torque (Iq): Current component producing torque (perpendicular to rotor field).
  • Field (Id): Current component aligned with rotor field (normally set to zero for surface-mount PM motors).

Using Clarke and Park transforms, FOC converts three-phase AC currents into a rotating reference frame, enabling precise torque control with minimal ripple. This is the standard for EVs and high-performance drives.

KV Rating Explained

The KV rating of a BLDC motor indicates RPM per volt (no-load): RPM = KV × Vsupply

Example: A 920 KV motor on a 4S LiPo (14.8 V) spins at ~13,600 RPM no-load.

Lower KV = more torque per amp, slower speed (heavy-lift drones). Higher KV = faster speed, less torque (racing drones).

Electrical & Mechanical Specifications

ParameterSmall BLDC (drone)Medium BLDC (EV hub)PMSM (industrial)
Power50–500 W0.5–10 kW0.1–100 kW
Voltage7.4–25.2 V (2S–6S LiPo)24–96 V48–690 V
KV Rating500–2600 KV10–100 KVN/A (rated speed)
Efficiency80–90%90–95%92–97%
Max Speed20,000–50,000 RPM3,000–8,000 RPM1,000–10,000 RPM
Pole Pairs7–14 (outrunner)4–102–8
CommutationSensorless / HallHall + encoderEncoder (FOC)
Lifespan20,000–100,000+ hours (bearing-limited, no brush wear)

Driver Circuits

Electronic Speed Controller (ESC)

The ESC is the power electronics board that drives BLDC motors. It contains:

  • Six MOSFETs arranged as a three-phase bridge (3 high-side + 3 low-side).
  • Gate drivers with bootstrap circuits for high-side FETs.
  • Microcontroller running commutation firmware.
  • Current sensing resistors or hall-effect sensors for overcurrent protection.

Common ESC/Driver ICs

  • L6234: Three-phase DMOS driver for small BLDC (<5 A). Affordable, simple interface.
  • DRV8302/8305: TI gate drivers for high-power BLDC with current sense amplifiers. Used in custom ESC designs.
  • SimpleFOC Shield: Open-source Arduino-compatible BLDC driver supporting FOC. Great for learning and prototyping.
  • VESC (Vedder ESC): Open-source, high-performance ESC supporting FOC, regenerative braking, and CAN bus. Standard for e-skateboards and small EVs.
  • ODrive: Dual-axis BLDC/PMSM controller with encoder input and USB/UART/CAN interface. Professional-grade.
High Voltage Warning: BLDC drivers handle high currents (10–100+ A) and voltages (up to 60V+ for hobby, 400V+ for industrial). Proper isolation, heat sinking, and safety precautions are critical. A short circuit in a MOSFET bridge can cause fire.

Control Methods

Six-Step (Block) Commutation

Simplest BLDC control. Uses Hall sensor transitions or back-EMF zero-crossing to determine the next commutation state. PWM on the active phase controls speed. Works well for most applications but produces torque ripple.

Sinusoidal Commutation

Generates sinusoidal phase currents using encoder feedback. Smoother than six-step but doesn’t optimize for dynamic performance. An intermediate step between six-step and FOC.

Field Oriented Control (FOC)

The gold standard for BLDC/PMSM control. Provides:

  • Maximum torque per ampere (efficiency)
  • Smooth, ripple-free torque
  • Precise speed and position control
  • Excellent dynamic response

Requires a position sensor (encoder or resolver) or advanced sensorless observer algorithms.

Code Example — Arduino & ESP32

Arduino: ESC Control via PWM (Drone Motor)

// BLDC motor control via ESC with standard PWM signal
// ESC expects same signal as servo: 1000-2000 us at 50 Hz
// Wiring: ESC signal → D9, ESC power → battery

#include <Servo.h>

Servo esc;
const int ESC_PIN = 9;

void setup() {
    Serial.begin(9600);
    esc.attach(ESC_PIN, 1000, 2000);

    // Arm ESC: send minimum throttle for 2 seconds
    Serial.println("Arming ESC...");
    esc.writeMicroseconds(1000);
    delay(2000);
    Serial.println("ESC armed. Ready.");
}

void setThrottle(int percent) {
    // Map 0-100% to 1000-2000 microseconds
    int pulseUs = map(percent, 0, 100, 1000, 2000);
    esc.writeMicroseconds(pulseUs);
    Serial.print("Throttle: ");
    Serial.print(percent);
    Serial.println("%");
}

void loop() {
    setThrottle(0);    delay(2000);
    setThrottle(20);   delay(3000);  // Low speed
    setThrottle(50);   delay(3000);  // Medium speed
    setThrottle(20);   delay(3000);  // Back to low
    setThrottle(0);    delay(5000);  // Stop
}

ESP32: SimpleFOC Library (FOC Control)

// BLDC motor FOC control using SimpleFOC library on ESP32
// Hardware: SimpleFOC Shield + BLDC motor + AS5600 encoder
// Install: SimpleFOC library via PlatformIO

#include <SimpleFOC.h>

BLDCMotor motor = BLDCMotor(7);  // 7 pole pairs
BLDCDriver3PWM driver = BLDCDriver3PWM(25, 26, 27, 33);
MagneticSensorI2C sensor = MagneticSensorI2C(AS5600_I2C);

void setup() {
    Serial.begin(115200);

    // Initialize magnetic sensor (AS5600 on I2C)
    sensor.init();
    motor.linkSensor(&sensor);

    // Configure driver
    driver.voltage_power_supply = 12;
    driver.init();
    motor.linkDriver(&driver);

    // FOC control mode
    motor.controller = MotionControlType::velocity;
    motor.voltage_limit = 6;    // V limit for safety
    motor.velocity_limit = 40;  // rad/s limit

    // PID tuning
    motor.PID_velocity.P = 0.2;
    motor.PID_velocity.I = 2.0;

    motor.init();
    motor.initFOC();
    Serial.println("FOC initialized. Send target velocity via Serial.");
}

float target_velocity = 0;

void loop() {
    motor.loopFOC();
    motor.move(target_velocity);

    // Read target from Serial
    if (Serial.available()) {
        target_velocity = Serial.parseFloat();
        Serial.printf("Target: %.1f rad/s\n", target_velocity);
    }
}

Real-World Applications

Drones & Aerospace

  • Multirotor drone propulsion
  • Fixed-wing electric aircraft
  • Gimbal stabilization motors
  • Reaction wheels for spacecraft

Electric Vehicles & Industry

  • EV traction motors (PMSM with FOC)
  • E-bikes and e-scooter hub motors
  • Industrial servo drives
  • Hard disk drive spindle motors

Advantages vs. Alternatives

vs. ActuatorBLDC AdvantageBLDC Disadvantage
Brushed DCNo brush wear, higher efficiency (90%+), longer lifeMore complex driver, higher cost
Stepper MotorMuch higher speed, better efficiency, no resonanceCannot hold position without encoder (open-loop)
AC InductionHigher power density, faster response, no rotor lossesNeeds rare-earth magnets (cost, supply chain)
Servo MotorContinuous rotation, higher power, scalableRequires external position sensor for positioning

Limitations & Considerations

  • Complex Control Electronics: Requires three-phase inverter, position sensing, and commutation logic. Much more complex than brushed DC control.
  • Cost: ESCs, gate drivers, and rare-earth magnets increase cost vs. brushed motors and AC induction motors.
  • Cogging Torque: Interaction between magnets and stator slots creates torque ripple at low speeds. Mitigated by skewed magnets or slot designs.
  • Demagnetization Risk: Excessive current or high temperature can permanently demagnetize rotor magnets, especially ferrite types.
  • Sensorless Startup: Back-EMF sensing doesn’t work at zero/low speed. Special startup routines or Hall sensors are needed.
  • EMI: High-frequency switching of the inverter generates significant electromagnetic interference. Proper shielding and filtering are essential.