This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
geda:circuit_simulation_improvements.ru [2012/02/13 03:21] vzh Rewording, spelling |
geda:circuit_simulation_improvements.ru [2014/04/26 04:17] vzh Updated using po4a |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | //Эта страница доступна также на следующих языках:// | ||
+ | [[circuit_simulation_improvements|English]] | ||
+ | |||
+ | ====== Усовершенствование моделирования работы электрических схем в gschem ====== | ||
+ | |||
+ | ===== Обоснование ===== | ||
+ | Начинающим не так-то просто использовать **gschem** как оболочку для | ||
+ | схемотехнического моделирования (для **ngspice** или **gnucap**). Вот что | ||
+ | новому пользователю хотелось бы делать в **gschem**: | ||
+ | |||
+ | * определять, какие виды анализа нужно запускать; | ||
+ | * определять, графики каких напряжений и токов нужно выводить; | ||
+ | * собственно запускать моделирование. | ||
+ | |||
+ | Запуск моделирования и постобработка могут быть во внешней программе, | ||
+ | вызываемой посредством IPC. | ||
+ | |||
+ | Существует несколько графических оболочек, но они не решают всех | ||
+ | вышеуказанных проблем: | ||
+ | |||
+ | * [[http://www.geda.seul.org/tools/gspiceui/index.html|gspiceui]] | ||
+ | * [[http://www.comefly.us/|kjwaves]] | ||
+ | * [[http://easy-spice.sourceforge.net/|easyspice]] | ||
+ | |||
+ | Все оболочки имеют одну проблему --- в них нельзя указать соединение, данные | ||
+ | которого хотелось бы увидеть. Нужно знать имя соединения для узла. | ||
+ | |||
+ | ===== Набросок проекта ===== | ||
+ | Допустим, нам хотелось бы совсем немного изменить **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)''. | ||
+ | |||
+ | Было бы здорово иметь диалоговое окно, предлагающее пользователям имена | ||
+ | атрибутов, а не только строку значения. | ||
+ | |||
+ | Настройкой источников напряжения или тока могла бы заниматься | ||
+ | модифицированная команда редактирования атрибутов | ||
+ | (<key>e</key><key>e</key>), которая вызывала бы для этих источников | ||
+ | специальные диалоговые окна их свойств. В настоящее время эта команда | ||
+ | вызывает диалоговое окно редактирования всех атрибутов символа. | ||
+ | |||
+ | ==== Моделирование ==== | ||
+ | Как сохранять параметры моделирования внутри **gschem**. | ||
+ | |||
+ | Для хранения параметров одного моделирования можно использовать символ с названием устройства //SIMULATION//. | ||
+ | Все параметры, определяющие один вид моделирования сохраняются как атрибуты, прикреплённые к данному объекту: | ||
+ | * вид анализа (dc, ac, tran,...); | ||
+ | * параметры программы моделирования; | ||
+ | * программа моделирования? (можем ли мы запускать моделирование для одной и той же схемы в двух программах моделирования сразу?); | ||
+ | * параметры для моделирования (глобальные параметры, температура, ...). | ||
+ | <code> | ||
+ | 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=??? | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Таких объектов моделирования в одной схеме могло бы быть много. | ||
+ | |||
+ | Для хранения дополнительных библиотек можно использовать либо директиву вложения (include), либо символ //LIBRARY//, содержащий все библиотеки в одном из двух видов: | ||
+ | * как многострочный атрибут; | ||
+ | * как несколько атрибутов библиотек, прикреплённых к символу //LIBRARY//. | ||
+ | |||
+ | Между глобальными, пользовательскими и локальными библиотеками должно быть | ||
+ | различие. Глобальные и пользовательские библиотеки могут определяться в | ||
+ | //''gafrc''// или в новом конфигурационном файле //''spicerc''//. | ||
+ | |||
+ | |||
+ | |||
+ | ==== Создание диалогового окна для моделирования внутри gschem ==== | ||
+ | |||
+ | Допустим, всё что нам нужно, чтобы добавить поддержку моделирования в **gschem**, это одно диалоговое окно. | ||
+ | * В нём должен содержаться список моделирований (в виде списка из их названий с кнопками разрешения/запрета). | ||
+ | * В нём должны быть иконки для добавления измерителей. | ||
+ | * Оно могло бы содержать кнопки для большинства общих символов: резистора, конденсатора, катушки индуктивности, диода, ... [R,C,L,D,M,E,F,G,H..] | ||
+ | * Оно могло бы содержать несколько диалоговых элементов для настройки SPICE. | ||
+ | * Оно могло бы содержать кнопки моделирования и закрытия. | ||
+ | * Несколько добавочных кнопок, таких как, например: копировать моделирование, удалить моделирование, общие параметры... | ||
+ | |||
+ | При создании такого диалогового окна все объекты моделирования собираются в | ||
+ | перечень видов моделирования (в виде списка с кнопками разрешения/запрета). | ||
+ | |||
+ | При изменении настроек меняются атрибуты соответствующего объекта | ||
+ | моделирования. | ||
+ | |||
+ | |||
+ | ==== Диалоговое окно параметров ==== | ||
+ | Какие параметры нужны для этого диалогового окна? И почему? | ||
+ | |||
+ | Расставленные нами измерители можно использовать, чтобы сообщать программе моделирования о том, какие нам хотелось бы сохранять переменные, или программе построения графиков о том, какие хотелось бы увидеть графики. Это вещи совершенно различные, и нам нужна возможность выбирать следующее: | ||
+ | * выводить на графиках все маркеры и сохранять только напряжения соответствующих узлов; | ||
+ | * выводить на графиках все маркеры, но сохранять все напряжения и токи (с помощью источников напряжения); | ||
+ | * сохранять напряжения узлов только для схемы текущего уровня или также и для подсхем. | ||
+ | |||
+ | ==== Запуск моделирования ==== | ||
+ | Кнопка моделирования в диалоговом окне должна вызывать следующие действия: | ||
+ | * сохранение схемы (спрашивать пользователя или использовать временный файл?); | ||
+ | * создание списка соединений с помощью **gnetlist**; | ||
+ | * создание файлов моделирования и включение туда списка соединений (можно ли это сделать тоже с помощью **gnetlist**?); | ||
+ | * выполнение скрипта запуска моделирования (**guile**, **sh**, ...). | ||
+ | |||
+ | Этот скрипт мог бы вызывать даже диспетчер, который бы занимался множеством | ||
+ | крупномасштабных моделирований. | ||
+ | |||
+ | ===== Приложение ===== | ||
+ | ==== Символ измерителя напряжения (эскиз) ==== | ||
+ | <code gschem-symbol 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 | ||
+ | </code> | ||
+ | |||
+ | ==== Символ измерителя тока (эскиз) ==== | ||
+ | <code gschem-symbol 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 | ||
+ | </code> | ||
+ | |||
+ | ==== Ещё один символ измерителя тока (эскиз), который использует Kurt Peters ==== | ||
+ | <code gschem-symbol 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 | ||
+ | </code> | ||