交流回路では、電圧と電流に位相差があるため、直流回路のように「$P = VI$」では電力を正しく表せません。実際に仕事をする有効電力、エネルギーの往復にすぎない無効電力、そして見かけ上の大きさである皮相電力の3つを区別する必要があります。
本記事の内容
- 瞬時電力の導出
- 有効電力 $P = VI\cos\phi$
- 無効電力 $Q = VI\sin\phi$
- 皮相電力 $S = VI$
- 力率 $\cos\phi$ と力率改善
- Pythonでの計算と可視化
前提知識
この記事を読む前に、以下の記事を読んでおくと理解が深まります。
瞬時電力の導出
電圧と電流が以下のように表されるとします:
$$ v(t) = V_m \cos(\omega t), \quad i(t) = I_m \cos(\omega t – \phi) $$
ここで $\phi$ は電圧に対する電流の位相遅れです。
瞬時電力 $p(t) = v(t) \cdot i(t)$ を計算します:
$$ \begin{align} p(t) &= V_m \cos(\omega t) \cdot I_m \cos(\omega t – \phi) \\ &= V_m I_m \cos(\omega t) \cos(\omega t – \phi) \end{align} $$
積和公式 $\cos A \cos B = \frac{1}{2}[\cos(A-B) + \cos(A+B)]$ を適用:
$$ \begin{align} p(t) &= \frac{V_m I_m}{2} [\cos\phi + \cos(2\omega t – \phi)] \\ &= \frac{V_m I_m}{2}\cos\phi + \frac{V_m I_m}{2}\cos(2\omega t – \phi) \end{align} $$
実効値 $V = V_m/\sqrt{2}$、$I = I_m/\sqrt{2}$ を用いると:
$$ \boxed{p(t) = VI\cos\phi + VI\cos(2\omega t – \phi)} $$
第1項は時間に依存しない一定成分、第2項は2倍周波数で振動する成分です。
有効電力(Active Power)
瞬時電力の時間平均が有効電力です:
$$ \boxed{P = \frac{1}{T}\int_0^T p(t)\,dt = VI\cos\phi \quad [\text{W}]} $$
有効電力は実際に負荷で消費(熱や仕事に変換)されるエネルギーを表します。
無効電力(Reactive Power)
$$ \boxed{Q = VI\sin\phi \quad [\text{var}]} $$
無効電力はエネルギーの蓄積と放出が交互に起こるだけで、正味のエネルギー消費はありません。単位は var(ボルトアンペアリアクティブ)です。
- $Q > 0$: 誘導性(電流が遅れ)
- $Q < 0$: 容量性(電流が進み)
皮相電力(Apparent Power)
$$ \boxed{S = VI \quad [\text{VA}]} $$
皮相電力は電圧と電流の大きさの積で、回路を流れる電力の「見かけの大きさ」です。単位は VA(ボルトアンペア)です。
電力の三角形
3つの電力は電力の三角形の関係にあります:
$$ S^2 = P^2 + Q^2 $$
複素電力 $\tilde{S}$ として:
$$ \boxed{\tilde{S} = P + jQ = \tilde{V}\tilde{I}^* = VI e^{j\phi}} $$
ここで $\tilde{I}^*$ は電流フェーザの複素共役です。
力率(Power Factor)
$$ \boxed{\text{力率} = \cos\phi = \frac{P}{S}} $$
力率は、皮相電力のうち有効電力として利用される割合を示します。
- $\cos\phi = 1$: 純抵抗(全電力が有効電力)
- $\cos\phi = 0$: 純リアクタンス(有効電力ゼロ)
力率改善
誘導性負荷(モータなど)は力率が低く、送電効率が悪化します。並列にキャパシタを接続すると、無効電力を補償して力率を改善できます。
必要な容量:
$$ Q_C = P(\tan\phi_1 – \tan\phi_2) $$
$$ \boxed{C = \frac{Q_C}{\omega V^2} = \frac{P(\tan\phi_1 – \tan\phi_2)}{\omega V^2}} $$
ここで $\phi_1$ は改善前、$\phi_2$ は改善後の位相角です。
Pythonでの実装
import numpy as np
import matplotlib.pyplot as plt
# パラメータ
V = 100.0 # 実効値 [V]
I = 5.0 # 実効値 [A]
phi_deg = 30 # 位相差 [deg]
phi = np.radians(phi_deg)
f = 50.0 # 周波数 [Hz]
omega = 2 * np.pi * f
# 電力計算
P = V * I * np.cos(phi)
Q = V * I * np.sin(phi)
S = V * I
print(f"有効電力 P = {P:.1f} W")
print(f"無効電力 Q = {Q:.1f} var")
print(f"皮相電力 S = {S:.1f} VA")
print(f"力率 cosφ = {np.cos(phi):.4f}")
fig, axes = plt.subplots(2, 2, figsize=(14, 10))
# (a) 瞬時電力
t = np.linspace(0, 3/f, 1000)
Vm = V * np.sqrt(2)
Im = I * np.sqrt(2)
v = Vm * np.cos(omega * t)
i = Im * np.cos(omega * t - phi)
p = v * i
axes[0, 0].plot(t*1000, v, 'b-', linewidth=1.5, label='$v(t)$ [V]')
axes[0, 0].plot(t*1000, i*20, 'r-', linewidth=1.5, label='$i(t) \\times 20$ [A]')
axes[0, 0].plot(t*1000, p, 'g-', linewidth=2, label='$p(t)$ [W]')
axes[0, 0].axhline(P, color='k', linestyle='--', linewidth=1, label=f'平均電力 P={P:.0f} W')
axes[0, 0].set_xlabel('時間 [ms]')
axes[0, 0].set_title('瞬時電力の波形')
axes[0, 0].legend(fontsize=9)
axes[0, 0].grid(True, alpha=0.3)
# (b) 電力の三角形
axes[0, 1].arrow(0, 0, P, 0, head_width=5, head_length=8, fc='blue', ec='blue')
axes[0, 1].arrow(P, 0, 0, Q, head_width=8, head_length=5, fc='red', ec='red')
axes[0, 1].arrow(0, 0, P, Q, head_width=5, head_length=8, fc='green', ec='green')
axes[0, 1].text(P/2, -20, f'P = {P:.0f} W', ha='center', fontsize=12, color='blue')
axes[0, 1].text(P+30, Q/2, f'Q = {Q:.0f} var', ha='left', fontsize=12, color='red')
axes[0, 1].text(P/2-20, Q/2+10, f'S = {S:.0f} VA', fontsize=12, color='green')
axes[0, 1].text(P/4, 10, f'φ = {phi_deg}°', fontsize=11)
axes[0, 1].set_xlim(-30, 550)
axes[0, 1].set_ylim(-40, 300)
axes[0, 1].set_xlabel('有効電力 [W]')
axes[0, 1].set_ylabel('無効電力 [var]')
axes[0, 1].set_title('電力の三角形')
axes[0, 1].set_aspect('equal')
axes[0, 1].grid(True, alpha=0.3)
# (c) 力率と有効電力の関係
phi_range = np.linspace(0, np.pi/2, 100)
P_range = S * np.cos(phi_range)
Q_range = S * np.sin(phi_range)
axes[1, 0].plot(np.degrees(phi_range), P_range, 'b-', linewidth=2, label='$P = S\\cos\\phi$')
axes[1, 0].plot(np.degrees(phi_range), Q_range, 'r-', linewidth=2, label='$Q = S\\sin\\phi$')
axes[1, 0].axhline(S, color='gray', linestyle='--', alpha=0.5, label=f'S = {S:.0f} VA')
axes[1, 0].set_xlabel('位相角 φ [deg]')
axes[1, 0].set_ylabel('電力')
axes[1, 0].set_title('位相角と電力の関係')
axes[1, 0].legend()
axes[1, 0].grid(True, alpha=0.3)
# (d) 力率改善のシミュレーション
# 改善前: cosφ1 = 0.7, 改善後: cosφ2 = 0.95
P_load = 1000 # [W]
cos_phi1 = 0.7
phi1 = np.arccos(cos_phi1)
S1 = P_load / cos_phi1
Q1 = P_load * np.tan(phi1)
cos_phi2_range = np.linspace(cos_phi1, 1.0, 100)
phi2_range = np.arccos(cos_phi2_range)
Q_c_range = P_load * (np.tan(phi1) - np.tan(phi2_range))
C_range = Q_c_range / (omega * V**2) * 1e6 # [μF]
axes[1, 1].plot(cos_phi2_range, C_range, 'b-', linewidth=2)
axes[1, 1].set_xlabel('改善後の力率 $\\cos\\phi_2$')
axes[1, 1].set_ylabel('必要なキャパシタ容量 [μF]')
axes[1, 1].set_title(f'力率改善に必要な容量(P={P_load}W, $\\cos\\phi_1$={cos_phi1})')
axes[1, 1].grid(True, alpha=0.3)
plt.tight_layout()
plt.savefig('ac_power.png', dpi=150, bbox_inches='tight')
plt.show()
まとめ
本記事では、交流回路の電力について解説しました。
- 有効電力 $P = VI\cos\phi$ [W] — 実際に消費される電力
- 無効電力 $Q = VI\sin\phi$ [var] — エネルギーの往復
- 皮相電力 $S = VI$ [VA] — 見かけの電力、$S^2 = P^2 + Q^2$
- 力率 $\cos\phi = P/S$ — 有効利用率
- 力率改善: 並列キャパシタで無効電力を補償
次のステップとして、以下の記事も参考にしてください。