PowerElecHub

Space Vector PWM, Animated

A two-level three-phase inverter has eight switch states. Six of them put a voltage vector on a corner of a hexagon and two short the load, giving the zero vector. Space vector modulation builds any reference vector inside the hexagon by spending part of each switching period on the two neighbouring active vectors and the rest on the zero vectors. The animation shows the reference vector, the switching pattern it produces in one period, and the duty cycles over a full electrical cycle.

Reference vector in the hexagon
V1 100V2 110V3 010V4 011V5 001V6 101V0 000 / V7 111

Shaded: active sector. Red: T1/T_s · V_a. Green: T2/T_s · V_b. Dashed circle: linear limit m = 1.

One switching period (T_s = 100 µs)
V0V1V2V7V2V1V0abc

Carrier, compare levels and gate signals for the current angle, with the active vector in each segment.

Duty cycles over one electrical cycle
00.510°60°120°180°240°300°360°
d_ad_bd_cdashed: sine PWMdotted: 0.5 + v0

At the current angle

Sector (adjacent vectors)
1 (V1, V2)
Angle in sector θ′
20.0°
T1
51.4 % · 51.42 µs
T2
27.4 % · 27.36 µs
T0
21.2 % · 21.22 µs
d_a, d_b, d_c
0.894, 0.380, 0.106

m = |V*| / (V_dc/√3). Duty is the high-side on fraction. Vectors use the amplitude-invariant Clarke transform.

Eight states, six vectors

Each leg connects its phase to the positive or the negative DC rail, written 1 or 0 for phases a, b and c. Applying the amplitude-invariant Clarke transform to the pole voltages turns the six non-zero states into vectors of length (2/3)·V_dc at 0°, 60° and so on: V1 = 100, V2 = 110, V3 = 010, V4 = 011, V5 = 001 and V6 = 101. The states 000 and 111 connect all three phases to the same rail and give the zero vector.

These eight states are the only voltages the inverter can produce. A sinusoidal three-phase output exists only as the average over each switching period, never as an instantaneous value.

Dwell times in a sector

The reference V* = m·(V_dc/√3)·e^(jθ) always lies in one of six sectors between two adjacent vectors V_a and V_b. Matching the average over one period gives T1 = m·T_s·sin(60° − θ′), T2 = m·T_s·sin θ′ and T0 = T_s − T1 − T2, where θ′ is the angle measured from the start of the sector.

In the hexagon panel the red segment is T1/T_s times V_a, the green segment T2/T_s times V_b, and their sum ends exactly at the reference. The remaining time T0 goes to the zero vectors.

The modulation index used here is 1 when the reference touches the circle inscribed in the hexagon, whose radius is V_dc/√3. Beyond that circle T1 + T2 would exceed the period in part of each sector, and the inverter cannot follow a circular path any more. This is the overmodulation region; the animation then scales the vector back onto the hexagon edge.

Arranging the period

The usual symmetric pattern splits the zero time equally between V0 and V7 and orders the period as V0, V_a, V_b, V7, V_b, V_a, V0, with V_a and V_b swapped in even sectors. Every transition then changes only one leg, each leg switches on once and off once per period, and the pulses are centered, which is exactly what a center-aligned PWM counter with three compare values produces. The period panel shows the counter, the three compare levels and the resulting gate signals for the current angle.

Why SVPWM reaches further than sine PWM

Over an electrical cycle the duty cycles take on a saddle shape. They are the sine-PWM duties plus a common term v0 = −(max + min)/2 that is the same in all three phases. Because it is common, it cancels in the line-to-line voltages and in the αβ vector, but it lowers the peaks of the individual duties.

The dashed curves show sine PWM at the same m. They clip at m = 0.866, while SVPWM stays linear up to m = 1: 2/√3 ≈ 1.155 times more output voltage from the same DC bus. The page checks this numerically. Duties computed from the sector dwell times and from min–max zero-sequence injection agree to rounding error, the averaged output vector equals the reference, and every transition of the seven-segment pattern changes a single leg.

In firmware

Much motor-control firmware computes SVPWM as min–max injection, because it needs no sector logic and feeds a standard three-compare PWM unit directly; the sector form is still useful for understanding and for variants that place the zero vectors differently.

Near the hexagon corners T0 becomes short. That matters for dead-time compensation and for low-side shunt measurement, which needs the 000 state to last long enough for the ADC; the PWM and ADC timing visual covers the second point. Discontinuous variants that clamp each leg to a rail for 120° per cycle cut switching losses; they are compared with SPWM, third-harmonic injection and six-step in the PWM methods visual.

The animation follows the equations stated on this page. Conventions differ between textbooks and software libraries; check the one your code uses before comparing numbers.