gschem можно использовать для создания таких электрических схем, работу которых можно затем промоделировать с помощью ngspice. Это удобно тем, что прежде чем отдать свой проект в производство, его можно шаг за шагом улучшать и каждый раз проверять моделированием. Цель настоящего руководства не в том, чтобы научить вас премудростям SPICE, а в том, чтобы на очень простом примере объяснить нужные для работы шаги. Более подробную документацию по SPICE и gEDA можно найти на страницах:
Может быть полезен и FAQ по моделированию в Wiki.
Этот учебник основывается на TwoStageAmp.sch
, одном из примеров в
документации gEDA, и в нём шаг за шагом воспроизводится первая половина этого
примера.
Допустим, вы уже умеете создавать схемы в gschem. Если вы не знаете, как
это делается, посмотрите Учебник по gsch2pcb. Итак,
начнём с создания каталога проекта simpleSPICE
и файла схемы
simplespice.sch
в этом каталоге.
Сделайте в gschem примерно такую схему:
Заметьте, что здесь созданы три именованных
соединения: Vin, Vout и
Vbase. Хотя так делать и не обязательно, но таким образом легче отслеживать
важные точки схемы. Чтобы создать именованное соединение, надо либо щёлкнуть
правой кнопкой, либо нажать [e][e], когда соединение выделено, а затем в окне
редактирования атрибутов добавить атрибут netname
и в качестве значения
для него задать нужное имя соединения. Хотя теперь у нас уже есть схема
для моделирования, чтобы получить какие-либо результаты, нам надо ещё
добавить некоторую информацию специально для 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.