WARNING: the gEDA project is not actively developed anymore. You may want to switch to the Ringdove EDA project which is similar in spirit but is active.

User Tools

Site Tools

search

geda:circuit_simulation_improvements.ru

Эта страница доступна также на следующих языках: English

Усовершенствование моделирования работы электрических схем в gschem

Обоснование

Начинающим не так-то просто использовать gschem как оболочку для схемотехнического моделирования (для ngspice или gnucap). Вот что новому пользователю хотелось бы делать в gschem:

  • определять, какие виды анализа нужно запускать;
  • определять, графики каких напряжений и токов нужно выводить;
  • собственно запускать моделирование.

Запуск моделирования и постобработка могут быть во внешней программе, вызываемой посредством IPC.

Существует несколько графических оболочек, но они не решают всех вышеуказанных проблем:

Все оболочки имеют одну проблему — в них нельзя указать соединение, данные которого хотелось бы увидеть. Нужно знать имя соединения для узла.

Набросок проекта

Допустим, нам хотелось бы совсем немного изменить gschem и libgeda, чтобы иметь возможность, по крайней мере, установить несколько измерительных приборов и запустить моделирование.

Измерительные приборы

Измерителями тока могут быть обычные источники постоянного напряжения 0 В. Легче всего в качестве такого прибора использовать символ с двумя выводами, подобный обычному амперметру. Если нам захотелось бы подключить измеритель тока к выводу, то нужно, чтобы генератор списка соединений распознал его и заместил нашим «амперметром». Если в качестве амперметра использовать источник напряжения, генератору не нужно будет знать имён соединений внутри схемы. Все источники напряжения 0 В со специальным именем устройства являлись бы измерителями тока.

Измерителями напряжения могут быть источники тока 0 А. Второй вывод источника тока присоединяется к GND атрибутом net. Поэтому снова генератору списка соединений не нужно будет знать имён соединений, так как он сможет использовать соединение, подключенное к этому специальному источнику тока. Подобно вышеописанному источнику напряжения мог бы быть специальный (графический) символ, который распознавался бы генератором списка соединений.

Источники тока и напряжения

Определить параметры источников не так просто. В настоящее время они хранятся внутри атрибутов value символа, например value=pulse 0 1 10n 10n 100n 1u 2u. Эти настройки должны соответствовать атрибутам SPICE pulse(V1 V2 TD TR TF PW PER).

Было бы здорово иметь диалоговое окно, предлагающее пользователям имена атрибутов, а не только строку значения.

Настройкой источников напряжения или тока могла бы заниматься модифицированная команда редактирования атрибутов (EE), которая вызывала бы для этих источников специальные диалоговые окна их свойств. В настоящее время эта команда вызывает диалоговое окно редактирования всех атрибутов символа.

Моделирование

Как сохранять параметры моделирования внутри gschem.

Для хранения параметров одного моделирования можно использовать символ с названием устройства SIMULATION. Все параметры, определяющие один вид моделирования сохраняются как атрибуты, прикреплённые к данному объекту:

  • вид анализа (dc, ac, tran,…);
  • параметры программы моделирования;
  • программа моделирования? (можем ли мы запускать моделирование для одной и той же схемы в двух программах моделирования сразу?);
  • параметры для моделирования (глобальные параметры, температура, …).
v 20061020 1
C 41500 49200 1 0 0 spice-directive-1.sym
{
device=spice_simulation_block
refdes=A1
simulation_name=random name
simulation_active=1
simulation_type=DC 0V 1V 0.1V
parametric_simulation1=V1 lin 0 5 0.1
parametric_simulation2=R1.value lin 10k 100k 10k
option_TNOM=100 Deg
option_ABSTOL=1e-3
global_param1=???
global_param2=???
}

Таких объектов моделирования в одной схеме могло бы быть много.

Для хранения дополнительных библиотек можно использовать либо директиву вложения (include), либо символ LIBRARY, содержащий все библиотеки в одном из двух видов:

  • как многострочный атрибут;
  • как несколько атрибутов библиотек, прикреплённых к символу LIBRARY.

Между глобальными, пользовательскими и локальными библиотеками должно быть различие. Глобальные и пользовательские библиотеки могут определяться в gafrc или в новом конфигурационном файле spicerc.

Создание диалогового окна для моделирования внутри gschem

Допустим, всё что нам нужно, чтобы добавить поддержку моделирования в gschem, это одно диалоговое окно.

  • В нём должен содержаться список моделирований (в виде списка из их названий с кнопками разрешения/запрета).
  • В нём должны быть иконки для добавления измерителей.
  • Оно могло бы содержать кнопки для большинства общих символов: резистора, конденсатора, катушки индуктивности, диода, … [R,C,L,D,M,E,F,G,H..]
  • Оно могло бы содержать несколько диалоговых элементов для настройки SPICE.
  • Оно могло бы содержать кнопки моделирования и закрытия.
  • Несколько добавочных кнопок, таких как, например: копировать моделирование, удалить моделирование, общие параметры…

При создании такого диалогового окна все объекты моделирования собираются в перечень видов моделирования (в виде списка с кнопками разрешения/запрета).

При изменении настроек меняются атрибуты соответствующего объекта моделирования.

Диалоговое окно параметров

Какие параметры нужны для этого диалогового окна? И почему?

Расставленные нами измерители можно использовать, чтобы сообщать программе моделирования о том, какие нам хотелось бы сохранять переменные, или программе построения графиков о том, какие хотелось бы увидеть графики. Это вещи совершенно различные, и нам нужна возможность выбирать следующее:

  • выводить на графиках все маркеры и сохранять только напряжения соответствующих узлов;
  • выводить на графиках все маркеры, но сохранять все напряжения и токи (с помощью источников напряжения);
  • сохранять напряжения узлов только для схемы текущего уровня или также и для подсхем.

Запуск моделирования

Кнопка моделирования в диалоговом окне должна вызывать следующие действия:

  • сохранение схемы (спрашивать пользователя или использовать временный файл?);
  • создание списка соединений с помощью gnetlist;
  • создание файлов моделирования и включение туда списка соединений (можно ли это сделать тоже с помощью gnetlist?);
  • выполнение скрипта запуска моделирования (guile, sh, …).

Этот скрипт мог бы вызывать даже диспетчер, который бы занимался множеством крупномасштабных моделирований.

Приложение

Символ измерителя напряжения (эскиз)

voltage_probe.sym
v 20061020 1
P 0 0 200 200 1 0 0
{
T 100 0 5 10 0 1 0 0 1
pintype=pas
T 0 100 5 10 0 1 0 0 1
pinseq=1
T 0 100 5 10 0 1 0 0 1
pinnumber=1
T 0 100 5 10 0 1 0 0 1
pinlabel=1
}
V 300 300 150 3 10 0 0 -1 -1 0 -1 -1 -1 -1 -1
L 300 200 240 360 3 10 0 0 -1 -1
L 300 200 360 360 3 10 0 0 -1 -1
T 0 500 9 10 0 0 0 0 1
device=VOLTAGE_PROBE
T 200 50 9 6 1 1 0 0 1
refdes=I_VP?
T 0 700 9 10 0 0 0 0 1
net=GND:2
T 0 900 9 10 0 0 0 0 1
value=DC 0A

Символ измерителя тока (эскиз)

current_probe.sym
v 20061020 1
P 0 200 150 200 1 0 0
{
T -150 50 5 10 0 1 0 0 1
pintype=pas
T 50 250 5 10 0 1 0 0 1
pinseq=1
T 50 250 5 10 0 1 0 0 1
pinnumber=1
T 50 250 5 10 0 1 0 0 1
pinlabel=1
}
V 300 200 150 3 10 0 0 -1 -1 0 -1 -1 -1 -1 -1
L 300 300 380 140 3 10 0 0 -1 -1
L 300 300 220 140 3 10 0 0 -1 -1
T 0 500 9 10 0 0 0 0 1
device=CURRENT_PROBE
T 200 370 9 6 1 1 0 0 1
refdes=V_IP?
P 600 200 450 200 1 0 0
{
T 500 50 5 10 0 1 0 0 1
pintype=pas
T 500 250 5 10 0 1 0 0 1
pinseq=2
T 500 250 5 10 0 1 0 0 1
pinnumber=2
T 500 250 5 10 0 1 0 0 1
pinlabel=2
}
L 240 180 360 180 3 10 0 0 -1 -1
T 0 700 9 10 0 0 0 0 1
value=DC 0V

Ещё один символ измерителя тока (эскиз), который использует Kurt Peters

ammeter.sym
v 20061020 1
T 700 650 8 10 1 1 0 0 1
refdes=VAM?
T 700 850 5 10 1 1 0 0 1
device=Ammeter
T 700 1050 5 10 0 0 0 0 1
footprint=none
T 700 1250 5 10 0 0 0 0 1
numslots=0
T 700 1450 5 10 0 0 0 0 1
description=ammeter for spice
P 300 1200 300 900 1 0 0
{
T 350 1000 5 8 1 1 0 0 1
pinnumber=1
T 350 1000 5 8 0 1 0 2 1
pinseq=1
T 400 850 9 8 1 1 0 5 1
pinlabel=+
T 300 700 5 8 0 1 0 5 1
pintype=pwr
}
P 300 0 300 300 1 0 0
{
T 350 100 5 8 1 1 0 0 1
pinnumber=2
T 350 100 5 8 0 1 0 2 1
pinseq=2
T 300 500 5 8 0 1 0 3 1
pintype=pwr
T 300 300 5 10 1 1 0 0 1
pinlabel=-
}
L 300 400 400 500 3 0 0 0 -1 -1
L 200 500 300 400 3 0 0 0 -1 -1
T 700 450 5 10 0 1 0 0 1
value=DC 0V
L 300 400 300 800 3 0 0 0 -1 -1
L 100 800 500 400 3 0 0 0 -1 -1
B 0 300 600 600 3 0 0 0 -1 -1 0 -1 -1 -1 -1 -1
L 200 800 100 800 3 0 0 0 -1 -1
L 100 700 100 800 3 0 0 0 -1 -1
geda/circuit_simulation_improvements.ru.txt · Last modified: 2014/04/26 04:17 by vzh