A three-phase inverter has six switches and only eight allowed output states: six non-zero "active" voltage vectors 60° apart, plus two zero vectors. Space-Vector PWM (SVPWM) approximates any desired output voltage by switching between the two active vectors bordering the sector that contains it, plus a zero vector, weighted by duty:
V_ref(t) = m · (V_dc/√3) · e^(jωt), ω = 2πf
sector k = floor(θ/60°) + 1, local angle φ = θ − 60°(k−1)
d1 = m·sin(60°−φ) (time on first bordering vector)
d2 = m·sin(φ) (time on second bordering vector)
d0 = 1 − d1 − d2 (time on a zero vector)
The three phase voltages are then the sinusoidal fundamental this switching pattern synthesises:
Va = Vm·sin(ωt), Vb = Vm·sin(ωt−120°), Vc = Vm·sin(ωt+120°)
Vm = m · V_dc/√3 (linear modulation range, m ∈ [0, 1])
Driving an induction motor this way at variable frequency — while scaling voltage proportionally (V/f control) so the stator flux stays roughly constant — is how almost every modern variable-frequency drive (VFD), EV traction inverter and appliance compressor motor is controlled. The synchronous field speed follows directly from frequency and pole count:
n_sync (rpm) = 120 · f / poles
- Frequency slider — sets the electrical frequency of the rotating reference vector and, with V/f on, the modulation index that goes with it.
- Vdc slider — the inverter's DC bus voltage; raising it raises the achievable peak phase voltage for a given m.
- Modulation index — unlocks when V/f control is switched off, letting you flux-weaken (drive above rated frequency at less than proportional voltage) or under-drive the motor.
- Hexagon diagram — the six bright dots are the inverter's six active switching vectors; the arrow is the rotating reference vector, and the two vertices nearest it light up in proportion to d1/d2, the actual PWM duty split.
- Stator ring — 24 winding slots grouped into three interleaved phases (U/V/W); each glows with the instantaneous magnitude of its phase current.
- Scope panel — traces the three phase voltages and the live d1/d2/d0 duty split; drag anywhere on the diagram to tilt the view, scroll to zoom.
Note: the zero-vector duty d0 is computed as 1 − m·sin(60°−φ) − m·sin(φ), without an extra ÷sin(60°) factor. Dividing by sin(60°) — as a naive reading of some SVPWM write-ups suggests — inflates d1+d2 above m at sector mid-angle (φ=30°) and drives d0 negative for m ≳ 0.87, an invalid PWM state. The formula used here keeps d1+d2 ≤ m for every φ, so d0 only reaches exactly zero at the true boundary of the linear modulation range (m=1, φ=30°) and never goes negative.