# Обзор

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

- ngspice
- gEDA и SPICE

Может быть полезен и FAQ по моделированию в Wiki.

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

# Настройка

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

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

Заметьте, что здесь созданы три именованных соединения: Vin, Vout и Vbase. Хотя так делать и не обязательно, но таким образом легче отслеживать важные точки схемы. Чтобы создать именованное соединение, надо либо щёлкнуть правой кнопкой, либо нажать [e][e], когда соединение выделено, а затем в окне редактирования атрибутов добавить атрибут `netname` и в качестве значения для него задать нужное имя соединения. Хотя теперь у нас уже есть схема для моделирования, чтобы получить какие-либо результаты, нам надо ещё добавить некоторую информацию специально для SPICE.

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

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

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

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

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

Настройка транзистора немного сложнее. Сначала нам нужна SPICE-модель для интересующего нас транзистора. Обычно модели можно найти на веб-сайтах производителей или в спецификации компонента, но для работы со своей любимой программой моделирования их может быть придётся изменить. Самый лёгкий путь — взять модель из библиотеки 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 всё задавалось в виде отдельных строк. Хорошо, теперь, когда у нас есть модель транзистора, нам надо её подключить. Отредактируйте свойства транзистора вот так:

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

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

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

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

Хотя схема уже на месте, нам всё же надо описать, как будет производиться моделирование. Эта информация должна быть записана в `./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)

Здесь задаётся частотный анализ (`.AC`), в то время как строки для расчёта режима по постоянному току (`.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.