Engee documentation
Notebook

Modelling a system with an ionistor

This example will demonstrate the modelling of a system with an ionistor and a DC-DC converter designed to maintain a stable voltage across the load. Initially, the converter provides power to the load, which causes the voltage across the ionistor to gradually decrease. When the 4V threshold is reached, a protection circuit is triggered, disconnecting the load. At 10 seconds, the generator is switched on and power is supplied to both the load and the capacitor to recharge it.

Schematic diagram of the model:

ultracapacitor_converter_1743002263965.png

Define the function to load and run the model:

In [ ]:
function start_model_engee()
    try
        engee.close("ultracapacitor_converter", force=true) # закрытие модели 
        catch err # в случае, если нет модели, которую нужно закрыть и engee.close() не выполняется, то будет выполнена её загрузка после catch
            m = engee.load("$(@__DIR__)/ultracapacitor_converter.engee") # загрузка модели
        end;

    try
        engee.run(m, verbose=true) # запуск модели
        catch err # в случае, если модель не загружена и engee.run() не выполняется, то будут выполнены две нижние строки после catch
            m = engee.load("$(@__DIR__)/ultracapacitor_converter.engee") # загрузка модели
            engee.run(m, verbose=true) # запуск модели
        end
end
Out[0]:
start_model_engee (generic function with 1 method)

Running the simulation

In [ ]:
start_model_engee();
Building...
Progress 0%
Progress 5%
Progress 11%
Progress 16%
Progress 21%
Progress 27%
Progress 33%
Progress 38%
Progress 43%
Progress 48%
Progress 53%
Progress 59%
Progress 64%
Progress 70%
Progress 75%
Progress 81%
Progress 86%
Progress 91%
Progress 97%
Progress 100%
Progress 100%

Write simulation data to variables:

In [ ]:
t = simout["Load.i"].time[:]
load_current = simout["Load.i"].value[:]
ultracapacitor_current = simout["Ultra-capacitor.i"].value[:]
generator_current = simout["Generator/Diode.i"].value[:]
load_voltage = simout["Load.v"].value[:]
ultracapacitor_voltage = simout["Ultra-capacitor.v"].value[:]
Out[0]:
WorkspaceArray{Float64}("Ultra-capacitor.v").value

Data visualisation

In [ ]:
using Plots
In [ ]:
plot(t, load_voltage, linewidth=2, label="Нагрузка")
plot!(t, ultracapacitor_voltage, linewidth=2, label="Ионистор", xlabel="Время, с", ylabel="Напражение, В")
Out[0]:
In [ ]:
plot(t, load_current, linewidth=2, label="Нагрузка")
plot!(t, ultracapacitor_current, linewidth=2, label="Ионистор")
plot!(t, generator_current, linewidth=2, label="Генератор", xlabel="Время, с", ylabel="Ток, А")
Out[0]:

Conclusions:

In this example, we have considered an ionistor model with an inverter. The DC-DC converter provides power to the load. The low charge protection circuit disconnects the load when the voltage on the ionistor drops below 4V. At the 10th second, the generator is switched on, which starts to power the load and charge the ionistor.