In [1]:
import dependencies
import cmath
import numpy as np
import pandas as pd
from IPython.display import display, HTML
import itertools
from nummath import graphing

ANALYSE VAN EEN CONDENSATORBATTERIJ: PARALLELRESONANTIE

1. Fundamentele netfrequentie en lijnspanning van het netwerk

In [2]:
# fundamentele netfrequentie
f1 = 50.0  # Hz
w1 = 2.0 * np.pi * f1  # rad/s

# lijnspanning van het net
U_l = cmath.rect(404.0, 0.0)  # V

2. Kenmerken van de condensator

Capaciteit

In [3]:
C = 77.0e-6  # F (Farad)

Nominale spanning

In [4]:
U_cn = cmath.rect(500.0, 0.0)  # V (Volt)

Nominale impedantie

In [5]:
Z_cn = complex(0.0, -1.0/(w1 * C))  # Ohm

Nominale stroom

In [6]:
I_cn = U_cn / Z_cn  # A

display(HTML(f'Nominale stroom van de condensator = <b>{abs(I_cn):.3f}</b> A'))
Nominale stroom van de condensator = 12.095 A

3. Condensatorbatterij

3.1 Schakeltrappen 1 en 2: driehoekschakeling van 1 condensator per fase

Reactief vermogen van de schakeltrappen

In [7]:
Q_t1 = Q_t2 = 3 * U_l ** 2 / Z_cn  # VAr

display(HTML(f'3fasig reactief vermogen van de trappen 1 and 2 = <b>{abs(Q_t1):.3f}</b> VAr'))
3fasig reactief vermogen van de trappen 1 and 2 = 11844.714 VAr

3.2 Schakeltrappen 3 en 4: driehoekschakeling van 2 parallelle condensatoren per fase

Gecombineerde impedantie van de parallelgeschakelde condensatoren

In [8]:
Z_cp = 1 / (2 * (1 / Z_cn))

Reactief vermogen van de schakeltrappen

In [9]:
Q_t3 = Q_t4 = 3 * U_l ** 2 / Z_cp  # VAr

display(HTML(f'3fasig reactief vermogen van de trappen 3 and 4 = <b>{abs(Q_t3):.3f}</b> VAr'))
3fasig reactief vermogen van de trappen 3 and 4 = 23689.428 VAr

3.3 Mogelijke combinaties van de schakeltrappen

Reactief vermogen van de schakelcombinaties

In [10]:
# lijst van de reactieve vermogens van elke schakeltrap
Q = [Q_t1, Q_t2, Q_t3, Q_t4]

# zoek alle mogelijke combinaties van schakeltrappen en bereken het totaal reactief vermogen van elke combinatie
Q_comb = []
for r in range(1, len(Q) + 1):
    combinations = itertools.combinations(Q, r)
    for combination in combinations:
        Q_comb.append(sum(combination))

# verwijder identieke resultaten uit de lijst en sorteer de lijst van klein naar groot        
Q_comb = list(set(Q_comb))
Q_comb.sort(key=lambda Q: abs(Q))

# geef het reactief vermogen weer van elke unieke schakelcombinatie
results = ['<ul>']
for i, Q in enumerate(Q_comb):
    results.append(f'<li>Combinatie <b>{i + 1}</b>: reactief vermogen = <b>{abs(Q):.3f}</b> VAr</li>')
results.append('</ul>')
display(HTML(''.join(results)))
  • Combinatie 1: reactief vermogen = 11844.714 VAr
  • Combinatie 2: reactief vermogen = 23689.428 VAr
  • Combinatie 3: reactief vermogen = 35534.142 VAr
  • Combinatie 4: reactief vermogen = 47378.856 VAr
  • Combinatie 5: reactief vermogen = 59223.571 VAr
  • Combinatie 6: reactief vermogen = 71068.285 VAr

Impedantie en overeenkomstige capaciteit van de schakelcombinaties in driehoek

In [11]:
Zd_comb = [3 * U_l ** 2 / Q for Q in Q_comb]
Cd_comb = [-1j/(w1 * Z) for Z in Zd_comb]

results = ['<ul>']
for i, C in enumerate(Cd_comb):
    results.append(f'<li>Combinatie <b>{i + 1}</b>: capaciteit = <b>{C.real:.3e}</b> F</li>')
results.append('</ul>')
display(HTML(''.join(results)))
  • Combinatie 1: capaciteit = 7.700e-05 F
  • Combinatie 2: capaciteit = 1.540e-04 F
  • Combinatie 3: capaciteit = 2.310e-04 F
  • Combinatie 4: capaciteit = 3.080e-04 F
  • Combinatie 5: capaciteit = 3.850e-04 F
  • Combinatie 6: capaciteit = 4.620e-04 F

Driehoek-ster-transformatie van de schakelcombinaties
Het driefasig netwerk wordt herleid naar een equivalent eenfasig netwerk t.b.h. van de netwerkberekeningen. Daartoe moeten de driehoek geschakelde schakelcombinaties worden getransformeerd naar equivalente sterschakelingen.

In [12]:
Zy_comb = [Z / 3 for Z in Zd_comb]
Cy_comb = [-1j/(w1 * Z) for Z in Zy_comb]

# Geef de capaciteit van de schakelcombinaties weer indien voorgesteld door een equivalente sterschakeling
results = ['<ul>']
for i, C in enumerate(Cy_comb):
    results.append(f'<li>Combinatie <b>{i + 1}</b>: capaciteit = <b>{C.real:.3e}</b> F</li>')
results.append('</ul>')
display(HTML(''.join(results)))
  • Combinatie 1: capaciteit = 2.310e-04 F
  • Combinatie 2: capaciteit = 4.620e-04 F
  • Combinatie 3: capaciteit = 6.930e-04 F
  • Combinatie 4: capaciteit = 9.240e-04 F
  • Combinatie 5: capaciteit = 1.155e-03 F
  • Combinatie 6: capaciteit = 1.386e-03 F

4. Transformator

Impedantie en inductiecoëfficiënt van de transformator
De ohmse weerstand en de reactantie van de transformator bij de fundamentele netfrequentie (50 Hz) zijn gegeven.

In [13]:
# Transformatorimpedantie bij 50 Hz (fundamentele netfrequentie)
R_tr = 8.7494e-3
X_tr = 26.8336e-3
Z_tr = complex(R_tr, X_tr)

Daarmee kan de inductiecoëfficiënt van de transformator worden berekend:

In [14]:
# Inductiecoëfficiënt
L_tr = X_tr / w1

display(HTML(f'Inductiecoëfficiënt = <b>{L_tr:.3e}</b> H'))
Inductiecoëfficiënt = 8.541e-05 H

5. Parallelschakeling van de transformator en condensatorbatterij

5.1 Berekeningen

We injecteren in de parallelschakeling een harmonische stroom met effectieve waarde van 1 A:

In [15]:
# harmonische bronstroom die naar de parallelschakeling stroomt: 1 A
I_h = complex(1.0, 0.0)

We zullen dit herhalen voor frequenties gaande van 50 Hz tot en met 1.250 Hz:

In [16]:
# frequentiebereik [Hz]
f_range = np.arange(50.0, 1300.0, 1)
w_range = 2 * np.pi * f_range  # pulsatiefrequentie [rad/s]

# harmonische rangorde
h_range = f_range / f1

Voor elke mogelijke schakelcombinatie van de condensatorbatterij worden in het codeblok hieronder berekend:

  • de resonantiefrequentie van de parallelschakeling van transformator en condensatorbatterij
  • de impedantie van de parallelschakeling i.f.v. de frequentie van de harmonische stroom
  • de spanning over de parallelschakeling i.f.v. de frequentie van de harmonische stroom
  • de stroom door de transformator i.f.v. de frequentie als de harmonische stroom naar de parallelschakeling 1 A bedraagt
  • de stroom door de condensatorbatterij i.f.v. de frequentie als de harmonische stroom naar de parallelschakeling 1 A bedraagt
In [17]:
results = []
# voor elke schakelcombinatie...
for C in Cy_comb: 
    r = {}
    
    # resonantiepulsatiefrequentie [rad/s]
    r['w_res'] = np.sqrt(1 / (L_tr * C) - (R_tr / L_tr) ** 2)
    
    # resonantiefrequentie [Hz]
    r['f_res'] = (r['w_res'] / (2 * np.pi)).real
    
    # harmonische orde
    r['h_res'] = int(round(r['f_res'] / f1))
    
    # impedantie van de parallelschakeling bij resonantie [ohm]
    r['Z_res'] = L_tr / (R_tr * C)
    
    # impedantie van de schakelcombinatie van de condensatorbatterij
    r['Z_cb'] = -1j / (w_range * C)
    # impedantie van de transformator
    r['Z_tr'] = R_tr + 1j * w_range * L_tr
     # impedantie van de parallelschakeling
    r['Z_par'] = 1 / (1 / r['Z_cb'] + 1 / r['Z_tr'])
    
    # spanning over de parallelschakeling
    r['U_par'] = r['Z_par'] * I_h
    
    # stroom door de transformator
    r['I_tr'] = r['U_par'] / r['Z_tr']
    
    # stroom door de condensatorbatterij
    r['I_cb'] = r['U_par'] / r['Z_cb']
    
    results.append(r)

5.2 Resultaten

5.2.1 Resonantiefrequenties van de parallelschakeling i.f.v. de actieve schakelcombinatie

In [18]:
results_ = ['<ul>']
for i, r in enumerate(results):
    results_.append(f"<li>Combinatie <b>{i + 1}</b>: resonantiefrequentie = <b>{r['f_res']:.3f}</b> Hz (= orde <b>{r['h_res']})</b></li>")
results_.append('</ul>')
display(HTML(''.join(results_)))
  • Combinatie 1: resonantiefrequentie = 1132.934 Hz (= orde 23)
  • Combinatie 2: resonantiefrequentie = 801.022 Hz (= orde 16)
  • Combinatie 3: resonantiefrequentie = 653.964 Hz (= orde 13)
  • Combinatie 4: resonantiefrequentie = 566.291 Hz (= orde 11)
  • Combinatie 5: resonantiefrequentie = 506.454 Hz (= orde 10)
  • Combinatie 6: resonantiefrequentie = 462.279 Hz (= orde 9)

5.2.2 Impedantie van de parallelschakeling i.f.v. de frequentie

In [19]:
graph = graphing.Graph(fig_size=[8, 8], dpi=96)
for i, r in enumerate(results):
    graph.add_data_set(name=f"combinatie {i + 1}", x=h_range, y=np.abs(r['Z_par']))
graph.add_legend()
graph.set_axis_titles(x_title='harmonische orde', y_title='modulus impedantie [Ohm]')
graph.scale_x_axis(lim_min=1, lim_max=int(h_range[-1]), tick_step=1)
graph.turn_grid_on()
graph.draw_graph()
graph.show_graph()
In [26]:
graph = graphing.Graph(fig_size=[8, 8], dpi=96)
for i, r in enumerate(results):
    graph.add_data_set(name=f"combinatie {i + 1}", x=h_range, y=np.degrees(np.angle(r['Z_par'])))
graph.add_legend()
graph.set_axis_titles(x_title='harmonische orde', y_title='argument impedantie [°]')
graph.scale_x_axis(lim_min=1, lim_max=int(h_range[-1]), tick_step=1)
graph.scale_y_axis(lim_min=-100, lim_max=100, tick_step=10)
graph.turn_grid_on()
graph.draw_graph()
graph.show_graph()

5.2.3 Spanning over de parallelschakeling i.f.v. de frequentie

In [21]:
graph = graphing.Graph(fig_size=[8, 8], dpi=96)
for i, r in enumerate(results):
    graph.add_data_set(name=f"combinatie {i + 1}", x=h_range, y=np.abs(r['U_par']))
graph.add_legend()
graph.set_axis_titles(x_title='harmonische orde', y_title='effectieve spanning [V]')
graph.scale_x_axis(lim_min=1, lim_max=int(h_range[-1]), tick_step=1)
graph.turn_grid_on()
graph.draw_graph()
graph.show_graph()

5.2.4 Stroom door de condensatorbatterij i.f.v. de frequentie

In [22]:
graph = graphing.Graph(fig_size=[8, 8], dpi=96)
for i, r in enumerate(results):
    graph.add_data_set(name=f"combinatie {i + 1}", x=h_range, y=np.abs(r['I_cb']))
graph.add_legend()
graph.set_axis_titles(x_title='harmonische orde', y_title='effectieve lijnstroom condensatorbatterij [A]')
graph.scale_x_axis(lim_min=1, lim_max=int(h_range[-1]), tick_step=1)
graph.turn_grid_on()
graph.draw_graph()
graph.show_graph()

Noteer dat harmonische stromen in de installatie met een frequentie rond de resonantiefrequentie van de parallelschakeling van transformator en condensatorbatterij stromen door de condensatorbatterij veroorzaken die vele keren groter zijn (stroomopslingering).

De berekende stromen zijn de lijnstromen naar de condensatorbatterij. Om de fasestromen te bekomen die door de driehoekgeschakelde condensatoren vloeien, dienen deze lijnstromen nog gedeeld door de vierkantswortel van 3:

In [23]:
graph = graphing.Graph(fig_size=[8, 8], dpi=96)
for i, r in enumerate(results):
    graph.add_data_set(name=f"combinatie {i + 1}", x=h_range, y=np.abs(r['I_cb']) / np.sqrt(3))
graph.add_legend()
graph.set_axis_titles(x_title='harmonische orde', y_title='effectieve fasestroom condensatorbatterij [A]')
graph.scale_x_axis(lim_min=1, lim_max=int(h_range[-1]), tick_step=1)
graph.turn_grid_on()
graph.draw_graph()
graph.show_graph()
In [ ]: