Обзор

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

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

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

Настройка

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

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

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

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

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

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

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

Vcc настраивается в целом также, только в меню компонентов нужно выбрать SPICE simulation elementsvdc-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.