Main Content

Electrical Component — Ideal Capacitor

The following file, ideal_capacitor.ssc, implements a component called ideal_capacitor.

The declaration section of the component contains:

  • Two electrical nodes, p and n, for + and – terminals, respectively.

  • One parameter, C, with a default value of 1 F, specifying the capacitance.

  • Through and Across variables, current i and voltage v, to be connected to the electrical domain Through and Across variables later in the file.

    Variable v is declared with high initialization priority, to ensure the initial voltage of 0 V.

The branches section establishes the relationship between the component Through variable and the component nodes (and therefore the domain Through variable). The i : p.i -> n.i statement indicates that the current through the capacitor flows from node p to node n.

The equation section starts with an assert construct, which checks that the capacitance value is greater than zero. If the block parameter is set incorrectly, the assert triggers a run-time error.

The first equation, v == p.v - n.v, establishes the relationship between the component Across variable and the component nodes (and therefore the domain Across variable). It defines the voltage across the capacitor as the difference between the node voltages.

The second equation defines the capacitor action: I = C*dV/dt, that is, output current equals capacitance multiplied by the time derivative of the input voltage.

component ideal_capacitor
% Ideal Capacitor
% Models an ideal (lossless) capacitor. The output current I is related
% to the input voltage V by I = C*dV/dt where C is the capacitance.

  nodes
    p = foundation.electrical.electrical; % +:top
    n = foundation.electrical.electrical; % -:bottom
  end

  parameters
    C = { 1, 'F' };   % Capacitance
  end

  variables
    i = { 0, 'A' }; % Current
    v = {value = { 0, 'V' }, priority = priority.high}; % Voltage
  end

  branches
    i : p.i -> n.i; % Current through from node p to node n
  end

  equations
    assert(C > 0)
    v == p.v - n.v; % Voltage across between node p and node n
    i == C*v.der;   % Equation defining the capacitor action
  end
end