Skip to content

abc → dq0 (Park)

Park (abc → dq0) transform. Projects three instantaneous phase signals a, b, c onto a synchronously rotating dq frame defined by the angle θ (radians, wired in — typically from a PLL on the grid side or a rotor-position / encoder signal on the motor side) and outputs the direct (d), quadrature (q), and zero-sequence (0) components. The d-axis is aligned with cos θ (q lags): d = K·[a·cosθ + b·cos(θ−2π/3) + c·cos(θ+2π/3)], q = −K·[a·sinθ + b·sin(θ−2π/3) + c·sin(θ+2π/3)], 0 = K0·(a+b+c). Choose amplitude-invariant scaling (K=2/3, K0=1/3 — d and q keep the abc peak amplitude; the usual convention in motor / power-electronics control) or power-invariant scaling (K=√(2/3), K0=√(1/3) — preserves instantaneous power). For a balanced set a=A·cos(θ+φ), b/c shifted ∓120°, the transform yields the constant DC pair d=A·cosφ, q=A·sinφ. Pair with the dq0 → abc block to close a vector-control loop.

Category: Math

Overview

The abc → dq0 block is the Park transform: it projects the three instantaneous phase signals a,b,c onto a reference frame that spins with the angle θ you wire in, and outputs the direct (d), quadrature (q), and zero-sequence (0) components in that frame.

It is the workhorse of vector control. A balanced three-phase set that looks like fast sinusoids in the stationary abc frame becomes a pair of slow (DC in steady state) signals d and q once viewed from a frame locked to it — and DC signals are what PI regulators can drive to a reference with zero steady-state error. Feed it rotor position from an encoder for field-oriented motor control, or a PLL angle for a grid-tied inverter.

Pair it with the dq0 → abc block (inverse Park) to map controller outputs back to per-phase references and close the loop.

The transform

With θ the frame angle (radians) and the d-axis aligned with cosθ (q lags by 90°):

d=K[acosθ+bcos(θ2π3)+ccos(θ+2π3)],q=K[asinθ+bsin(θ2π3)+csin(θ+2π3)],0=K0(a+b+c).

The block is stateless — the outputs are an algebraic function of the present inputs only, evaluated every time step. There is no filtering, gain ramp, or memory.

Scaling convention

The Scaling parameter sets the magnitude constants (K,K0):

ScalingKK0Property
Amplitude (2/3)2/31/3d,q keep the peak amplitude of the abc waveforms
Power (√2/3)2/31/3transform is orthonormal — instantaneous power is preserved
  • Amplitude-invariant is the usual choice in motor and power-electronics control: a phase voltage of peak V^ produces a dq vector of magnitude V^, so the numbers stay intuitive.
  • Power-invariant makes the transform a rotation (orthonormal), so p=vdid+vqiq+v0i0 equals the instantaneous three-phase power vaia+vbib+vcic with no 3/2 factor. Use it when you compute power or energy in the dq frame.

Whatever you pick here, set the same convention on the matching dq0 → abc block so the round trip is exact.

Sign and alignment convention

The d-axis is aligned with cosθ and q lags d by 90°. A convenient way to read the sign: write the balanced set as

a=Acos(θ+φ),b=Acos(θ+φ2π3),c=Acos(θ+φ+2π3),

i.e. a vector of amplitude A that leads the frame angle by φ. With amplitude-invariant scaling the transform collapses it to the constant pair

d=Acosφ,q=Asinφ,0=0.

So a vector aligned with the d-axis (φ=0) gives d=A, q=0, and a vector leading the d-axis gives positive q. If your tooling uses the opposite (q-leading) convention, negate q.

Zero-sequence

The 0 output carries the common-mode part of the three inputs, 0=K0(a+b+c), and is independent of θ. For any balanced set it is zero; it is non-zero only when the three phases do not sum to zero (an unbalanced or single-phase situation, or a deliberate common-mode / third-harmonic injection). If you don't need it, leave the zero output unwired.

Wiring

  • a, b, c ← the three instantaneous phase signals (volts, amps, or per-unit — the transform is linear and unit-agnostic).
  • theta ← the frame angle in radians: a rotor-position / encoder signal for a machine, or a PLL output for a grid converter. Wrapping is irrelevant — only sinθ and cosθ are used.
  • d, q, zero → the rotating-frame components, typically into the current/voltage regulators.

When to use something else

  • dq0 → abc (inverse Park) — the reverse map, for turning controller d,q setpoints back into per-phase references.
  • If you only need the stationary two-axis (αβ) components, that is the Clarke transform — equivalent to this block evaluated at θ=0 (then d=α, q=β).

Ports

NameDirectionValue typeNotes
ainputdouble
binputdouble
cinputdouble
thetainputdouble
doutputdouble
qoutputdouble
zerooutputdouble

Parameters

NameLabelTypeDefaultUnitsDescription
scalingScalingenum (Amplitude (2/3) / Power (√2/3))0Magnitude-scaling convention. Amplitude-invariant (2/3) keeps the dq components at the abc peak amplitude — the usual choice for motor / power-electronics control. Power-invariant (√(2/3)) makes the transform orthonormal so instantaneous power p = vd·id + vq·iq + v0·i0 is preserved across the transform.