2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

abc座標からα-β-0座標・d-q-0座標へのベクトル変換:零相成分の物理的意味とPython実装

2
Posted at

はじめに

電力システムやモータ制御の分野において,3相交流量(abc座標)をより扱いやすい座標系へ変換する操作は不可欠である.代表的な変換として,以下の2段階の線形変換がある.

  1. クラーク変換(Clarke Transform):abc座標 → α-β-0座標
  2. パーク変換(Park Transform):α-β-0座標 → d-q-0座標

これらの変換は,回転する3相ベクトルを静止座標系(α-β)や回転座標系(d-q)で表現するための数学的ツールである.

本記事では,「3相が平衡しているときは零相成分 $V_0$ がゼロになるのはなぜか」「不平衡時に零相が現れたとき d-q 変換はどう変わるのか」という問いに対して,行列の導出から丁寧に説明し,Pythonによる数値計算・可視化で確認する.


1. 3相平衡電圧と不平衡電圧

1.1 平衡三相電圧

位相が $120°$ ずつずれた正弦波で,振幅が等しいとき,系統は平衡であると言う.

\begin{cases}
V_a(t) = V_m \sin(\omega t) \\
V_b(t) = V_m \sin{(\omega t - \dfrac{2\pi}{3})} \\
V_c(t) = V_m \sin {\left(\omega t - \dfrac{4\pi}{3}\right)}
\end{cases}

この場合,任意の $t$ において

V_a(t) + V_b(t) + V_c(t) = 0

が成立する(三角関数の加法定理より証明可能).

1.2 不平衡三相電圧

振幅が異なる,あるいは位相差が $120°$ でない場合,一般に

V_a(t) + V_b(t) + V_c(t) \neq 0

となる.例えばアース(地絡)事故や単相負荷の存在がこれに当たる.このとき零相成分(零相成分)と呼ばれる共通成分が現れる.


2. クラーク変換(abc → α-β-0)

2.1 変換行列の導出

クラーク変換は,3次元のabc空間を「静止αβ平面」と「零相軸」に分解する直交変換である.**電力不変形(power-invariant form)**での変換行列 $\mathbf{A}$ は以下で定義される.

\mathbf{A} = \sqrt{\frac{2}{3}}
\begin{bmatrix}
\dfrac{1}{\sqrt{2}} & \dfrac{1}{\sqrt{2}} & \dfrac{1}{\sqrt{2}} \\[10pt]
\cos(0) & \cos\!\left(\dfrac{2\pi}{3}\right) & \cos\!\left(\dfrac{4\pi}{3}\right) \\[10pt]
\sin(0) & \sin\!\left(\dfrac{2\pi}{3}\right) & \sin\!\left(\dfrac{4\pi}{3}\right)
\end{bmatrix}
= \sqrt{\frac{2}{3}}
\begin{bmatrix}
\dfrac{1}{\sqrt{2}} & \dfrac{1}{\sqrt{2}} & \dfrac{1}{\sqrt{2}} \\[10pt]
1 & -\dfrac{1}{2} & -\dfrac{1}{2} \\[10pt]
0 & \dfrac{\sqrt{3}}{2} & -\dfrac{\sqrt{3}}{2}
\end{bmatrix}

各行の物理的意味は次のとおりである.

成分 意味
第1行 零相 $V_0$ 3相の平均的(同相)成分
第2行 $V_\alpha$ αβ平面内のx軸成分
第3行 $V_\beta$ αβ平面内のy軸成分(αから90°進み)

変換式は

\begin{bmatrix} V_0 \\ V_\alpha \\ V_\beta \end{bmatrix}
= \mathbf{A}
\begin{bmatrix} V_a \\ V_b \\ V_c \end{bmatrix}

2.2 零相成分とその性質

第1行を展開すると

V_0 = \sqrt{\frac{2}{3}} \cdot \frac{1}{\sqrt{2}} \left( V_a + V_b + V_c \right)
= \frac{1}{\sqrt{3}} \left( V_a + V_b + V_c \right)

平衡三相系では $V_a + V_b + V_c = 0$ であるから,$V_0 = 0$ が自動的に成立する.
言い換えれば,変換後の3次元ベクトルはαβ平面上の2次元ベクトルに縮退する.

不平衡系では $V_0 \neq 0$ となり,零相軸方向の成分が生じる.電力工学における零相電流はトランスや配電線の接地経路を通って流れるため,地絡故障の検出などに利用される.

2.3 α-β 軌跡

平衡三相電圧をクラーク変換すると,$(V_\alpha, V_\beta)$ は複素平面上でを描く.

$$
V_\alpha + jV_\beta = V_m e^{j\omega t}
$$

これは,3相の回転するベクトルが静止座標でどう見えるかを示している.


3. パーク変換(α-β-0 → d-q-0)

3.1 変換行列の導出

パーク変換は,静止座標(α-β)を電源周波数で回転する座標系(d-q)へ変換する.回転角を $\theta(t) = \omega t$ とすると,変換行列 $\mathbf{D}(\theta)$ は

\mathbf{D}(\theta) =
\begin{bmatrix}
1 & 0 & 0 \\
0 & \cos\theta & \sin\theta \\
0 & -\sin\theta & \cos\theta
\end{bmatrix}

変換式は

\begin{bmatrix} V_0 \\ V_d \\ V_q \end{bmatrix}
= \mathbf{D}(\theta)
\begin{bmatrix} V_0 \\ V_\alpha \\ V_\beta \end{bmatrix}

3.2 物理的意味

$\mathbf{D}(\theta)$ は $V_0$ には作用せず,$(V_\alpha, V_\beta)$ 平面を角度 $\theta$ だけ逆回転させる.

平衡三相の場合,$V_\alpha + jV_\beta = V_m e^{j\omega t}$ であるから

\begin{bmatrix} V_d \\ V_q \end{bmatrix}
=
\begin{bmatrix} \cos\theta & \sin\theta \\ -\sin\theta & \cos\theta \end{bmatrix}
\begin{bmatrix} V_m\cos(\omega t) \\ V_m\sin(\omega t) \end{bmatrix}
=
\begin{bmatrix} V_m \\ 0 \end{bmatrix}

つまり,平衡三相電圧をd-q変換すると,時間変化しない直流量になる.この性質が,モータ制御(ベクトル制御)や系統連系制御における電流制御を大幅に単純化する根拠である.

3.3 d-q 軌跡

平衡三相電圧の $(V_d, V_q)$ は理論上1点に収束するが,実際には数値計算の離散化誤差により微小な揺らぎを示す場合がある.


4. d-q-0 変換:零相成分が存在する場合

4.1 零相成分の取り扱い

クラーク変換もパーク変換も,零相軸には一切回転を加えない.具体的には

  • $\mathbf{A}$ の第1行が $V_0 = \frac{1}{\sqrt{3}}(V_a + V_b + V_c)$ を取り出す
  • $\mathbf{D}(\theta)$ の左上 $1 \times 1$ ブロック(値 $1$)が $V_0$ をそのまま通過させる

したがって,不平衡三相系では $V_0$ がゼロ以外の値を取り,d-q-0 変換後も独立した第3の成分として残る.

4.2 abc → d-q-0 の直接変換式

$\mathbf{T}(\theta) = \mathbf{D}(\theta) \cdot \mathbf{A}$ を計算すると

\mathbf{T}(\theta) = \sqrt{\frac{2}{3}}
\begin{bmatrix}
\dfrac{1}{\sqrt{2}} & \dfrac{1}{\sqrt{2}} & \dfrac{1}{\sqrt{2}} \\[10pt]
\cos\theta & \cos\!\left(\theta - \dfrac{2\pi}{3}\right) & \cos\!\left(\theta - \dfrac{4\pi}{3}\right) \\[10pt]
-\sin\theta & -\sin\!\left(\theta - \dfrac{2\pi}{3}\right) & -\sin\!\left(\theta - \dfrac{4\pi}{3}\right)
\end{bmatrix}

この1つの行列で abc から直接 d-q-0 への変換が行える.

4.3 対称成分法との関係

電力工学におけるフォートスキュー変換(対称成分変換)は,abc空間を「正相・逆相・零相」に分解する.クラーク変換の零相成分 $V_0$ は,この零相成分(三相共通成分)と同一の物理量に対応する.

成分 記号 意味
正相(正序) $V_+$ 平衡三相(abc順)の成分
逆相(負序) $V_-$ 平衡三相(acb逆順)の成分
零相 $V_0$ 三相が同位相(共通)の成分

5. Python による実装

5.1 不平衡三相電圧の生成

本シミュレーションでは,零相成分 $V_0$ が非ゼロになる様子を確認するために,$V_a$ の振幅を意図的に2倍に設定した不平衡三相電圧を用いる.

import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math

n = 100
t_ary = np.linspace(0, 1, n)

V_a = np.sin(2 * math.pi * t_ary) * 2   # 意図的に振幅2倍(不平衡)
V_b = np.sin(2 * math.pi * t_ary - 2 * math.pi / 3)
V_c = np.sin(2 * math.pi * t_ary - 4 * math.pi / 3)

V_abc = np.column_stack((V_a, V_b, V_c))

この場合 $V_a + V_b + V_c \neq 0$ となるため,零相成分 $V_0$ が時間変化する振動成分として現れる.

注意点:$V_b$ と $V_c$ の位相差は正しく $120°$,$240°$ にすること.$V_c$ を $-2\pi/3$ にしてしまうと $V_b$ と同位相になり,αβ成分も誤った値になる.

5.2 クラーク変換の実装と可視化

A = (2/3)**0.5 * np.array([
    [1/2**0.5,          1/2**0.5,           1/2**0.5          ],
    [math.cos(0),       math.cos(2*math.pi/3), math.cos(4*math.pi/3)],
    [math.sin(0),       math.sin(2*math.pi/3), math.sin(4*math.pi/3)]
])

V_alpha_beta_ary = A @ V_abc.T   # shape: (3, n)

# 時系列プロット
plt.plot(t_ary, V_alpha_beta_ary[0,:], label="V_0")
plt.plot(t_ary, V_alpha_beta_ary[1,:], label="V_alpha")
plt.plot(t_ary, V_alpha_beta_ary[2,:], label="V_beta")
plt.xlabel("t")
plt.ylabel("V_0,V_alpha,V_beta")
plt.title("abc→alpha-beta変換")
plt.legend()
plt.savefig("abc→alpha-beta変換.png")
plt.show()

# αβ軌跡(リサージュ図形)
plt.plot(V_alpha_beta_ary[1,:], V_alpha_beta_ary[2,:])
plt.xlabel("V_alpha")
plt.ylabel("V_beta")
plt.savefig("alpha-beta変換.png")
plt.show()

# 0-α-β 空間の3Dプロット
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw={'projection': '3d'})
ax.plot(V_alpha_beta_ary[0,:], V_alpha_beta_ary[1,:], V_alpha_beta_ary[2,:])
ax.set_xlabel("V_0")
ax.set_ylabel("V_alpha")
ax.set_zlabel("V_beta")
plt.savefig("0-alpha-beta変換.png")
plt.show()

V_abc は $(n, 3)$ 形状なので,転置して $(3, n)$ にしてから掛けている.結果の各列が各時刻の $[V_0, V_\alpha, V_\beta]^T$ に対応する.3Dプロットでは,零相軸($V_0$)・$V_\alpha$・$V_\beta$ の3次元空間における軌跡を確認できる.

5.3 パーク変換の実装と可視化

$\mathbf{D}(\theta)$ が時刻ごとに変化するため,ループで時刻ステップごとに適用する.

theta = 2 * math.pi * t_ary

V_dq_ary = np.zeros_like(V_alpha_beta_ary)
for i, th in enumerate(theta):
    D_i = np.array([
        [1,           0,          0         ],
        [0,  np.cos(th),  np.sin(th)],
        [0, -np.sin(th),  np.cos(th)]
    ])
    V_dq_ary[:, i] = D_i @ V_alpha_beta_ary[:, i]

# 時系列プロット
plt.plot(t_ary, V_dq_ary[0,:], label="V_0")
plt.plot(t_ary, V_dq_ary[1,:], label="V_d")
plt.plot(t_ary, V_dq_ary[2,:], label="V_q")
plt.xlabel("t")
plt.ylabel("V_0,V_d,V_q")
plt.title("abc→dq変換")
plt.legend()
plt.savefig("abc→dq変換.png")
plt.show()

# dq軌跡
plt.plot(V_dq_ary[1,:], V_dq_ary[2,:])
plt.xlabel("V_d")
plt.ylabel("V_q")
plt.savefig("d-q変換.png")
plt.show()

# 0-d-q 空間の3Dプロット
fig, ax = plt.subplots(figsize=(6, 6), subplot_kw={'projection': '3d'})
ax.plot(V_dq_ary[0,:], V_dq_ary[1,:], V_dq_ary[2,:])
ax.set_xlabel("V_0")
ax.set_ylabel("V_d")
ax.set_zlabel("V_q")
plt.savefig("0-dq変換.png")
plt.show()

よくある誤りD を単一の (4, 3) 配列として定義し D @ V_alpha_beta_ary.T と掛けようとするケース.これは形状のミスマッチか,行列積の数学的意味を誤解したものである.時刻ごとに回転角が異なるため,必ずループまたはテンソル演算を使う.

3Dプロットは $V_0$・$V_d$・$V_q$ の3次元空間における軌跡であり,不平衡系では零相が独立した成分として残存するため,平面に収束せず3次元的な形状を描く.

5.4 ベクトル化による高速実装(参考)

ループを避けてNumPyのテンソル演算で書く場合:

theta = 2 * math.pi * t_ary
cos_t = np.cos(theta)
sin_t = np.sin(theta)

# D (n, 3, 3)
D = np.zeros((n, 3, 3))
D[:, 0, 0] = 1
D[:, 1, 1] = cos_t;  D[:, 1, 2] = sin_t
D[:, 2, 1] = -sin_t; D[:, 2, 2] = cos_t

# V_alpha_beta_ary: (3, n) → (n, 3, 1)
V_ab = V_alpha_beta_ary.T[:, :, np.newaxis]

# バッチ行列積
V_dq_ary = (D @ V_ab).squeeze().T   # shape: (3, n)

6. シミュレーション結果と考察

6.1 クラーク変換の結果(不平衡系)

本シミュレーションでは $V_a$ の振幅が $V_b$,$V_c$ の2倍であるため,

$$
V_a + V_b + V_c \neq 0
$$

となり,零相成分が非ゼロになる.期待される結果:

  • $V_0(t) \neq 0$(正弦波状に振動する零相成分が現れる)
  • $(V_\alpha, V_\beta)$ の軌跡 → 楕円(真円からのずれが不平衡量を反映)
  • 零相軸を加えた3D軌跡(0-alpha-beta変換.png)では,平面に収まらず零相軸方向へ張り出した形状になる

平衡系では $V_0 \equiv 0$ となり,αβ平面上の真円に縮退する.

0-alpha-beta変換.png

6.2 パーク変換の結果(不平衡系)

不平衡系では αβ成分が真円でないため,回転座標系(d-q)で見ても直流に揃わない.

  • $V_d(t)$,$V_q(t)$ → $2\omega$ の脈動が重畳した振動波形
  • $(V_d, V_q)$ の軌跡 → 楕円(平衡時の1点から拡張)
  • 零相 $V_0$ はパーク変換で変化しないため,d-q-0 空間の3Dプロット(0-dq変換.png)でも零相軸成分が残存する

0-dq変換.png

平衡系のとき $V_d = V_m$(定数),$V_q = 0$ になる性質が,モータ制御(ベクトル制御)や系統連系制御における電流制御を大幅に単純化する根拠である.

6.3 平衡系・不平衡系の比較

成分 平衡時 不平衡時(本シミュレーション:$V_a$ が2倍)
$V_0$ $\equiv 0$ $\neq 0$(正弦波振動)
$(V_\alpha, V_\beta)$ 軌跡 真円 楕円
0-α-β 3D軌跡 αβ平面内の円 零相軸方向へ張り出した3D曲線
$(V_d, V_q)$ 軌跡 1点 楕円($2\omega$ 脈動)
0-d-q 3D軌跡 d-q平面内の1点 零相軸方向へ張り出した3D曲線

不平衡時には d-q 軸の電圧・電流に $2\omega$ の脈動(2倍周波数リプル)が現れる.電力変換器の制御では,この脈動を別途補償するための制御項を付加する.


7. まとめ

本記事では,abc座標から α-β-0 座標,さらに d-q-0 座標への変換を行列論から導出し,Python(NumPy)で実装した.また,$V_a$ の振幅を意図的に2倍にした不平衡三相電圧を用いることで,零相成分が現れる様子を数値的に確認した.

  • クラーク変換は直交変換であり,零相軸と静止αβ平面に空間を分解する
  • 零相成分 $V_0$ は 3 相電圧の総和 $\frac{1}{\sqrt{3}}(V_a + V_b + V_c)$ に対応し,平衡三相では恒等的にゼロ;不平衡時は非ゼロの振動成分として現れる
  • パーク変換は零相に作用せず,αβ平面を電源周波数で逆回転させる;平衡系では直流化するが不平衡系では $2\omega$ 脈動が残る
  • 3次元可視化(0-α-β 空間・0-d-q 空間)により,零相成分が独立した第3軸として変換後も残存することを直感的に確認できる

変換行列の実装では,パーク変換行列 $\mathbf{D}(\theta)$ が時刻依存であることに注意が必要であり,各時刻ステップごとに行列を構築して適用する必要がある.


参考文献

  1. P. C. Krause, O. Wasynczuk, S. D. Sudhoff, Analysis of Electric Machinery and Drive Systems, 3rd ed., IEEE Press, 2013.
  2. D. G. Holmes, T. A. Lipo, Pulse Width Modulation for Power Converters, IEEE Press, 2003.
  3. R. H. Park, "Two-Reaction Theory of Synchronous Machines—Part I," AIEE Trans., vol. 48, pp. 716–730, 1929.
  4. E. Clarke, Circuit Analysis of A-C Power Systems, Wiley, 1943.
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?