$(instance)SaturatingInductor Icon

SaturatingInductor

Simple model of an inductor with saturation

This component extends from TwoPin

Usage

SaturatingInductor(I_nominal=1, L_nominal=1, L_zero=2*L_nominal, L_inf=L_nominal/2, I_par=I_nominal/tan((L_nominal-L_inf)/(L_zero-L_inf)))

Parameters:

NameDescriptionUnitsDefault value
I_nominalNominal currentA1
L_nominalInductance at nominal currentH1
L_zeroInductance near current = 0H2 * L_nominal
L_infInductance at large currentsHL_nominal / 2
I_parAInominal / tan((Lnominal - Linf) / (Lzero - L_inf))

Connectors

Variables

NameDescriptionUnits
vV
iA
L_actualPresent inductanceH
psiPresent fluxWb

Behavior

\[ \begin{align} v\left( t \right) &= \mathtt{p.v}\left( t \right) - \mathtt{n.v}\left( t \right) \\ i\left( t \right) &= \mathtt{p.i}\left( t \right) \\ \mathtt{n.i}\left( t \right) + \mathtt{p.i}\left( t \right) &= 0 \\ \mathtt{L\_actual}\left( t \right) &= \mathtt{L\_inf} + \frac{\mathtt{I\_par} \left( - \mathtt{L\_inf} + \mathtt{L\_zero} \right) \arctan\left( \frac{i\left( t \right)}{\mathtt{I\_par}} \right)}{i\left( t \right)} \\ \mathtt{psi}\left( t \right) &= \mathtt{L\_inf} i\left( t \right) + \mathtt{I\_par} \left( - \mathtt{L\_inf} + \mathtt{L\_zero} \right) \arctan\left( \frac{i\left( t \right)}{\mathtt{I\_par}} \right) \\ v\left( t \right) &= \frac{\mathrm{d} \mathtt{psi}\left( t \right)}{\mathrm{d}t} \end{align} \]

Source

# Simple model of an inductor with saturation
component SaturatingInductor
  extends TwoPin
  # Nominal current
  parameter I_nominal::Current = 1
  # Inductance at nominal current
  parameter L_nominal::Inductance = 1
  # Inductance near current = 0
  parameter L_zero::Inductance = 2*L_nominal
  # Inductance at large currents
  parameter L_inf::Inductance = L_nominal/2
  # Present inductance
  variable L_actual::Inductance
  # Present flux
  variable psi::MagneticFlux
  final parameter I_par::Current = I_nominal/tan((L_nominal-L_inf)/(L_zero-L_inf))
relations
  # assert L_zero > L_nominal "L_zero $(L_zero) should be greater than L_nominal $(L_nominal)"
  # assert L_inf < L_nominal "Linf $(Linf) should be less than L_nominal $(L_nominal)"
  L_actual = L_inf+(L_zero-L_inf)*atan(i/I_par)/(i/I_par)
  psi = L_inf*i+(L_zero-L_inf)*I_par*atan(i/I_par)
  v = der(psi)
end
Flattened Source
# Simple model of an inductor with saturation
component SaturatingInductor
  p = Pin() [{
    "JuliaSim": {
      "placement": {"icon": {"iconName": "pos", "x1": -50, "y1": 450, "x2": 50, "y2": 550}}
    }
  }]
  n = Pin() [{
    "JuliaSim": {
      "placement": {"icon": {"iconName": "neg", "x1": 950, "y1": 450, "x2": 1050, "y2": 550}}
    }
  }]
  variable v::Voltage
  variable i::Current
  # Nominal current
  parameter I_nominal::Current = 1
  # Inductance at nominal current
  parameter L_nominal::Inductance = 1
  # Inductance near current = 0
  parameter L_zero::Inductance = 2*L_nominal
  # Inductance at large currents
  parameter L_inf::Inductance = L_nominal/2
  # Present inductance
  variable L_actual::Inductance
  # Present flux
  variable psi::MagneticFlux
  final parameter I_par::Current = I_nominal/tan((L_nominal-L_inf)/(L_zero-L_inf))
relations
  v = p.v-n.v
  i = p.i
  p.i+n.i = 0
  # assert L_zero > L_nominal "L_zero $(L_zero) should be greater than L_nominal $(L_nominal)"
  # assert L_inf < L_nominal "Linf $(Linf) should be less than L_nominal $(L_nominal)"
  L_actual = L_inf+(L_zero-L_inf)*atan(i/I_par)/(i/I_par)
  psi = L_inf*i+(L_zero-L_inf)*I_par*atan(i/I_par)
  v = der(psi)
metadata {}
end

Test Cases