Skip to content

Latest commit

 

History

History
181 lines (120 loc) · 7.92 KB

README.org

File metadata and controls

181 lines (120 loc) · 7.92 KB

GraphPlot

Программа для моделирования работы электрической схемы, написанная на Golang.

При запуске создает png файл, содержащий график напряжения на резисторе-нагрузке, в текущей директории.

Общая информация

Зависимости

  • golang 1.15
apt install golang

Сборка программы

make

Пример запуска программы

./graph plot

Доступные аргументы

./graph plot --help

Generate plot images in your directory.
Available formats are: png, svg, tex, pdf, jpg, jpeg, eps, tif, tiff.

Example: graph plot -s 0.1 -o results -f png

This will create directory results/ and put plot images in "png" format into it.

Usage:
  graph plot [flags]

Flags:
      --buffer-size int         change size of line-draw buffer (default 100)
  -c, --capacitors uint         change number of capacitors in circuit (default 6)
  -f, --format string           change resulting images format (default "svg")
  -h, --help                    help for plot
  -l, --load-resistance float   change load resistance value (default 10000)
  -o, --output string           change results directory name (default "results")
  -s, --step float              change default step amount (default 0.001)
  -v, --supply-voltage float    change supply voltage in circuit (default 6000)

Global Flags:
      --config string   config file (default is $HOME/.config/graph/config.yaml)
      --debug           enable debug mode

Структура программы

  • pkg/adapters/circuit

    Код, относящийся к логике схемы(circuit.go). Определена основная структура состояния, а также внутренние структуры реализующие два состояния системы(charging_state.go,discharging_state.go). Для структур состояния определен шаблон функций(state.go), которые они должны реализовывать.

  • pkg/adapters/plot-img

    Построение графика по заданным точкам при помощи библиотеки gonum.

  • pkg/adapters/integrator

    Логика интегрирования.

    Определен шаблон функции и во вложенных папках расположены разные реализации методов функции интегрирования.

  • pkg/components/plot-cli

    Запуск интегрирования.

  • pkg/components/point-generator

    Логика интегрирования по заданному интервалу, вызывается в pkg/components/plot-cli, запускает интегратор из pkg/adapters/integrator.

  • pkg/domain

    Общие данные, структуры, в частности список интеграторов, доступных pkg/components/point-generator.

Описание системы ОДУ

Генератор Маркса.

В основе системы уравнений лежит зависимость напряжения на конденсаторе для RC цепей.

u = U0(1-e-t/τ)

Состояние системы определяется текущим напряжением на конденсаторах(C0), а также значениями τ (R*C0, Rнагрпосл). Количество конденсаторов равно количеству ступеней генератора.

У системы два состояния: накопление зарядов параллельно соединенными конденсаторами по очереди(заряд следующего конденсатора в цепи линейно зависит от заряда предыдущего) и падение накопленного заряда этих конденсаторов уже соединенных последовательно на сопротивление нагрузки.

При последовательной разрядке напряжение увеличивается кратно количеству ступеней генератора.

Разрядка конденсаторов начинается, когда напряжение на первом конденсаторе достигает напряжению пробоя замычек(Uразр).

При теоретическом расчете высчитывается время зарядки первого конденсатора до требуемого уровня, затем начинается разрядка конденсатора

u = Uзам*e-t/τ

Использовалась информация из презентации

X = (u1, … , un)

Зарядка конденсаторов (τi = 2*R*i*C0): f(xi) = 1/τi * (U0 - xi)

Разрядка конденсаторов (τ = Rнагрузки*Cпослед): f(xi) = -1/τi * xi

Аналитическое решение получено из формулы: ∑i ui = U0 * ∑i(1-e-t/τ) = U0*N - ∑i U0*e-t/τ

где t = -τ0ln(1-Uразр/U0) - время зарядки конденсатора до Uразр.

Примеры вывода

Характеристики схемы

  • Электроемкость конденсаторов (C): 1 мкФ
  • Сопротивление ограничивающих резисторов (R): 5 кОм
  • Напряжение источника тока (U_0): 6 кВ
  • Количество ступеней конденсаторов: 5
  • Напряжение пробоя замычек: 5.7 кВ
  • Сопротивление нагрузки: 10 кОм

./misc/scheme.png

Метод Эйлера vs Теория

./misc/euler-theory.png

Красная функция - теория, черная - результат интегрирования.

Метод средней точки vs Теория

./misc/midpoint-theory.png

Красная функция - теория, черная - результат интегрирования.

Метод Богатского-Шампина vs Теория

./misc/bogatskiy-shampin.png

Красная функция - теория, черная - результат интегрирования.

Метод Эйлера vs Метод Богатского-Шампина

./misc/euler-shampin.png

Зеленая функция - метод Эйлера, черная - метод Богатского-Шампина.

Метод 3/8 vs Теория

./misc/three-eighth-theory.png

Красная функция - теория, черная - результат интегрирования.

Неявный метод средней точки vs Теория

Для схемы с одним конденсатором.

./misc/midpointImpl-theory.png

Красная функция - теория, черная - результат интегрирования.

Оценка относительной ошибки неявного метода средней точки

Для схемы с одним конденсатором.

./misc/midpointImpl-differr.png

Оценка относительной ошибки явного метода 3/8

./misc/three-eighth-theory-differr.png

График зарядки-разрядки системы

./misc/three-eighth-multiCycle.png