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))0—Magnitude-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.