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.

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

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

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

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

    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