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

====== Обзор ======

**gschem** можно использовать для создания таких электрических схем, работу
которых можно затем промоделировать с помощью **ngspice**. Это удобно тем,
что прежде чем отдать свой проект в производство, его можно шаг за шагом
улучшать и каждый раз проверять моделированием.  Цель настоящего руководства
не в том, чтобы научить вас премудростям [[geda:glossary.ru#SPICE]], а в
том, чтобы на очень простом примере объяснить нужные для работы шаги. Более
подробную документацию по SPICE и gEDA можно найти на страницах:

  * [[http://ngspice.sourceforge.net/index.html|ngspice]]
  * [[gEDA:csygas.ru|gEDA и SPICE]]



Может быть полезен и [[geda:faq-simulation.ru|FAQ по моделированию]] в Wiki.


Этот учебник основывается на //''TwoStageAmp.sch''//, одном из примеров в
документации gEDA, и в нём шаг за шагом воспроизводится первая половина
этого примера.




====== Настройка ======

Допустим, вы уже умеете создавать схемы в **gschem**. Если вы не знаете, как
это делается, посмотрите [[gsch2pcb_tutorial.ru|Учебник по gsch2pcb]]. Итак,
начнём с создания каталога проекта //''simpleSPICE''// и файла схемы
//''simplespice.sch''// в этом каталоге.

Сделайте в **gschem** примерно такую схему:

{{geda:simple1.png}}

Заметьте, что здесь созданы три именованных
[[geda:glossary.ru#Соединение|соединения]]: //Vin//, //Vout// и
//Vbase//. Хотя так делать и не обязательно, но таким образом легче
отслеживать важные точки схемы. Чтобы создать именованное соединение, надо
либо щёлкнуть правой кнопкой, либо нажать <key>e</key><key>e</key>, когда
соединение выделено, а затем в окне редактирования атрибутов добавить
атрибут ''netname'' и в качестве значения для него задать нужное имя
соединения. Хотя теперь у нас уже есть схема для моделирования, чтобы
получить какие-либо результаты, нам надо ещё добавить некоторую информацию
специально для SPICE.

====== Добавим кое-что для SPICE ======

Чтобы схема была пригодна для моделирования, нам нужно сделать четыре вещи.
Нужно подключить входной сигнал, описать свойства транзистора, явно
определить //Vcc// и добавить несколько строк в файл SPICE.  Когда всё это
будет сделано, схема будет выглядеть так:

{{geda:schematicfinished2.png|}}

Чтобы добавить входной сигнал, нужно выбрать его символ в меню компонентов
**SPICE simulation elements** -> **vac-1.sym**, и после вставки в схему
отредактировать его свойства вот так:

{{geda:dialogvac.png|}}

Отметьте себе, что в атрибуте ''value'' --- строка для SPICE. Больше о
синтаксисе SPICE можно узнать, перейдя по вышеприведённым ссылкам.

//Vcc// настраивается в целом так же, только в меню компонентов нужно
выбрать **SPICE simulation elements** -> //''vdc-1.sym''//. Свойства этого
символа нужно отредактировать вот так:

{{geda:dialogvdc1.png|}}

Настройка транзистора немного сложнее. Сначала нам нужна SPICE-модель для
интересующего нас транзистора. Обычно модели можно найти на веб-сайтах
производителей или в спецификации компонента, но для работы со своей любимой
программой моделирования их может быть придётся изменить. Самый лёгкий путь
--- взять модель из библиотеки
[[http://www.h-renrew.de/h/spicelib/doc/index.html | spicelib]]. В данном
примере мы рассмотрим вездесущий 2N3904. Вот его модель:


  .model 2N3904   NPN(Is=6.734f Xti=3 Eg=1.11 Vaf=74.03 Bf=416.4 Ne=1.259
  +               Ise=6.734f Ikf=66.78m Xtb=1.5 Br=.7371 Nc=2 Isc=0 Ikr=0 Rc=1
  +               Cjc=3.638p Mjc=.3085 Vjc=.75 Fc=.5 Cje=4.493p Mje=.2593 Vje=.75
  +               Tr=239.5n Tf=301.2p Itf=.4 Vtf=4 Xtf=2 Rb=10)
  *               Fairchild        pid=23          case=TO92
  *               88-09-08 bam    creation


В каталоге проекта //''simpleSPICE''// создайте подкаталог //''models''//, а
в нём файл //''2N3904.mod''//, содержащий вышеуказанный текст. Обязательно
добавьте пустую строку в конце файла, так как очень важно, чтобы в итоговом
файле SPICE всё задавалось в виде отдельных строк. Хорошо, теперь, когда у
нас есть модель транзистора, нам надо её подключить. Отредактируйте свойства
транзистора вот так:

{{geda:dialogtrans.png|}}

Теперь нам нужно ещё сообщить о созданной нами модели программе **gschem**.
Это производится добавлением в схему символа //''spice-model-1.sym''//.
Отредактируйте его свойства так:

{{geda:dialogmodel.png|}}

Хорошо, нужно добавить ещё два символа. Первый --- это
//''spice-include-1.sym''//, подключающий текстовый файл с описанием нужного
вам вида SPICE-моделирования, а второй --- //''spice-directive-1.sym''//,
позволяющий добавлять дополнительные строки к этому файлу SPICE.  Свойства
этих символов можно настроить следующим образом:

{{geda:dialoginclude.png}}

{{geda:dialogdirective.png}}

Поздравляем! Теперь наша схема готова для моделирования.



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

Хотя схема уже на месте, нам всё же надо описать, как будет производиться
моделирование. Эта информация должна быть записана в
//''./Simulation.cmd''//, на который ссылается символ включения, добавленный
нами в предыдущем разделе.  Итак, создайте файл //''./Simulation.cmd''// вот
с таким содержимым:


  .OP
  .AC DEC 20 1Hz 100MegHz
  * .DC VINPUT 0 5 .01
  * .DC VINPUT 1 2 .01
  .plot ac v(Vout) v(Vin)
  .print ac v(Vout) v(Vin)


Здесь задаётся [[geda:glossary.ru#частотный анализ]] (''.AC''), в то время
как строки для [[geda:glossary.ru#Расчёт статического режима|расчёта режима
по постоянному току]] (''.DC'') закомментированы. Затем идёт вывод графиков
//Vout// и //Vin//, а также печать их числовых значений. Как отмечено ранее,
узнать о SPICE можно, перейдя по вышеприведённым ссылкам.

Теперь, когда мы описали желаемый вид моделирования, откройте терминал,
перейдите в каталог //''simpleSPICE''// и наберите команду:

  gnetlist -g spice-sdb -o spice.net simplespice.sch

которая выдаст файл //''spice.net''// для SPICE. Теперь моделирование можно
запустить в режиме пакетной обработки, набрав:

  ngspice -b spice.net > result.txt

что выдаст в //''result.txt''// большое количество текста. В этом файле
должен быть как запрошенный нами числовой вывод, так и грубый график
результатов в текстовом виде. Заметьте, что входной сигнал //10 мВ//
усилился примерно до //-280 мВ// в широком диапазоне частот. Если вы хотите
увидеть графическое представление графиков, **ngspice** можно заставить
работать в интерактивном режиме, удалив ключ ''-b''. Более подробно это
описано на веб-сайте **ngspice**. Так или иначе, теперь для построения
графиков и анализа у нас есть результаты моделирования в замечательном
текстовом формате, который хорошо подходит для дальнейшей обработки
скриптами на чём-то вроде **python** или **octave**.
