Qucs-S: руководство по использованию SPICE-моделей и созданию библиотек

Краткие сведения о Qucs-S

Qucs-S является программой с открытым исходным кодом для моделирования электронных схем. Qucs-S кроссплатформенный (поддерживаются Linux и Windows) и написан на С++ с использованием набора библиотек Qt. О принципах работы с Qucs-S рассказывает мои предыдущие статьи:

Для работы Qucs рекомендуется использовать также открытый движок моделирования Ngspice. Актуальным релизом Qucs-S на текущий момент является версия 24.2.1. Далее будет рассмотрено, как добавить собственные модели в Qucs-S.

Работа с подсхемами

Простейший способ добавить новых компонент — это создать подсхему. В качества примера рассмотрим, как создать компонент, представляющий динамическую головку. Новейшая версия Qucs-S имеет в составе библиотеку Loudspeakers, которая содержит модели динамиков. Здесь разберём как эта библиотека сделана. Известно, что динамик имеет сложную зависимость импеданса от частоты и описывается эквивалентной схемой, которую можно представить в виде RCL-цепи. В данной статье мы будем пользоваться моделью, которая приведена здесь: https://circuitdigest.com/electronic-circuits/simulate-speaker-with-equivalent-rlc-circuit

Эквивалентная схема динамика

Эквивалентная схема динамика

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

Чтобы добавить компонент, представляющий динамическую головку, сначала создаём новый документ схемы (меню File → New schematic) и в нём чертим эквивалентную схему. На схеме нужно разместить уравнения. Для этого служит специальный компоненты .PARAM section, который задаёт параметры SPICE и находится в группе SPICE netlist sections или Equations. В нетлисте SPICE параметрами называются уравнения, который вычисляются до начала симуляции. Если требуется, чтобы новый компонент работал также с движком моделирования Qucsator, а не только со SPICE, то вместо секции .PARAM следует иметь другой тип уравнения, а именно Qucs legacy equation (находится в раздела equations). Но в данном случае поддерживается только ограниченный набор математических функций, который совместим как со SPICE, так и с Qucsator. Также важно разместить порты подсхемы, которые можно вставить при помощи меню Insert → Port или через кнопку на панели инструментов. У динамика два порта P1 и P2. В результате должна получиться следующая схема, которую сохраняем как SPK.sch

Эквивалентная схема динамика в Qucs-S с уравнениями и портами

Эквивалентная схема динамика в Qucs-S с уравнениями и портами

После того, как схема собрана и уравнения заданы, нужно создать УГО для динамика. Для этого нажимаем на клавиатуре F9 или в меню File→ Edit circuit symbol. Открывается редактор символа. По умолчанию Qucs-S автоматически создаёт УГО в виде квадратика, которое следует отредактировать. При помощи графических примитивов можно нарисовать УГО.

УГО динамика в Qucs-S

УГО динамика в Qucs-S

Рядом с заготовкой УГО имеется некоторый текст. По двойному щелчку по этому тексту открывается диалог, в котором следует задать параметры подсхемы. Интерфейс здесть интуитивно понятный и позволяет ввести имена параметров, дефолтные значения и описания. Для динамика следует задать параметры так, как показано на следующем скриншоте.

Редактирование списка параметров подсхемы

Редактирование списка параметров подсхемы

В дистрибутив Qucs-S включены шаблоны УГО. Они находятся внутри каталога, в который установлена программа в подкаталоге share/qucs-s/examples/symbols в файле schematic_symbols.sch Можно открыть файл и скопировать шаблон.

Шаблоны УГО для подсхем

Шаблоны УГО для подсхем

После того, как УГО создано и параметры заданы, следует сохранить документ. Теперь можно протестировать подсхему. Для этого создаём новую схему и на ней размещаем компонент Subcircuit, который находится в группе file components. В качестве первого параметры данного компонента следует задать путь к файлу подсхемы. В данном случае это SPK.sch. УГО и список параметров будут загружены автоматически. Должна получиться тестовая схема, показанная на рисунке. Кроме динамика на ней имеется источник переменного тока V1, моделирование и уравнение, задающее расчёт импеданса. Узел, в котором динамик подключается к источнику, следует пометить как n1. Запускаем моделирование и получаем график зависимости импеданса динамика Zd от частоты в диапазона от 1 Гц до 20 кГц.

Размещение подсхемы в главной схеме

Размещение подсхемы в главной схеме

Использование SPICE-моделей в Qucs-S

Большинство производителей электронных компонентов предоставляют для своих транзисторов и микросхем модели, которые распространяются в виде списка цепей (нетлист) формата SPICE. Эти модели потом можно использовать в симуляторах, которые совместимы со SPICE. Cуществующие SPICE- модели можно разделить на два типа:

  • Модели дискретный компонентов (modelcard) предоставляются в виде директивы .MODEL, которая содержит имя и параметры модели

  • Модели микросхем предоставляются в виде подсхемы .SUBCKT

Использование моделей дискретных компонентов

В библиотеке Qucs-S содержится достаточно много моделей биполярных и полевых транзисторов и имеются даже отечественные компоненты. Но иногда бывает необходимость использовать стороннюю модель, найденную в сети. Ниже рассмотрены необходимые для этого действия.

SPICE модели диодов и транзисторов как правило распространяются в виде текстового файла, содержащего карточки моделей (modelcard .MODEL). Формат карточек моделей и описание параметров можно найти в документации к симулятору. Модели получаются при помощи специальной процедуры экстракции, для которой необходимо измерение ВАХ компонента. В общем случае параметров из даташита недостаточно, чтобы получить SPICE модель транзистора. Так что если производитель на предоставил модель на свой транзистор, то не поможет ничто. Рассмотрение экстракции моделей выходит за пределы данной статьи. Вот ссылка для интересующих, по которой можно найти способ экстракции параметров модели полевого транзистора (MOSFET) https://huskiecommons.lib.niu.edu/cgi/viewcontent.cgi? article=5043&context=allgraduate-thesesdissertations.

Рассмотрим пример, как использовать SPICE-модель совместно с симулятором Qucs-S с движком моделирования Ngspice. Ниже приведена модель популярного биполярного транзистора 2N2222

.model 2N2222A NPN (Is=14.34f Xti=3 Eg=1.11 Vaf=74.03 Bf=255.9 Ne=1.307 
+ Ise=14.34f Ikf=.2847 Xtb=1.5 Br=6.092 Nc=2 Isc=0 Ikr=0 Rc=1 Cjc=7.306p
+ Mjc=.3416 Vjc=.75 Fc=.5 Cje=22.01p Mje=.377 Vje=.75 Tr=46.91n Tf=411.1p
+ Itf=.6Vtf=1.7 Xtf=3 Rb=10 Vceo=40)

Очевидно, что можно подставить эти параметры в модель транзистора в Qucs-S вручную. Но программа предоставляет и иные способы использовать SPICE модель. В группе SPICE netlist section находится специальный компонент .MODEL, который позволяет размещать на схеме карточку модели. В свойства этого компонента (Line_1, Line_2 и т. д.) можно построчно скопировать текст модели. Вот что в итоге должно получиться:

Размещение модели .MODEL на схеме

Размещение модели .MODEL на схеме

Теперь, чтобы использовать модель понадобится специальный компонент транзистора, который поддерживает полную спецификацию SPICE. Все компоненты в Qucs-S делятся на две группы:

  • Компоненты синего цвета являются унифицированными и работают как с движком Qucsator, так и с движком Ngspice.

  • Компоненты красного цвета совместимы только со SPICE, но зато позволяют использовать полную спецификацию SPICE

Размещаем на схеме транзистор красного цвета (Q NPN BJT) и вписываем ему в свойства имя модели 2N2222A. На скриншоте показана тестовая схема с таким транзистором, которая моделирует семейство выходных ВАХ.

Подключение модели к компоненту

Подключение модели к компоненту

Кроме использования директивы .MODEL можно подключить текстовый файл с моделями целиком при помощи директивы .INCLUDE Пример показан на скриншоте. Также можно поместить файл с моделями транзисторов в каталог $HOME/.qucs/user_lib и копировать модель на схему перетаскиванием.

Использование текстового файла с моделями

Использование текстового файла с моделями

Использование моделей интегральных микросхем

Модели сложных микросхем обычно поставляются в виде подсхем. Чтобы получить такую SPICE-модель требуется проводить измерения и экстракцию параметров. Здесь опять же, если производитель не предоставил модель, то не поможет ничто. В качестве примера рассмотрим, как использовать в Qucs-S модель операционного усилителя LM358. Данный компонент имеется в библиотеке программы, но был выбран, так как модель не очень сложная. Ниже приведён исходный текст модели, который требуется интегрировать в Qucs-S. Соответствие узлов подсхемы и выводом ОУ приведено в комментариях в шапке файла модели. Комментарии в файлах нетлиста SPICE начинаются с символа *.

*LM358 DUAL OPERATIONAL AMPLIFIER MACRO-MODEL
* connections:      non-inverting input
*                   |   inverting input
*                   |   |   positive power supply
*                   |   |   |   negative power supply
*                   |   |   |   |   output
*                   |   |   |   |   |
.SUBCKT LM358       1   2  99  50  28
****************INPUT STAGE**************
IOS 2 1 5N
*^Input offset current
R1 1 3 500K
R2 3 2 500K
I1 99 4 100U
R3 5 50 517
R4 6 50 517
Q1 5 2 4 QX
Q2 6 7 4 QX
*Fp2=1.2 MHz
C4 5 6 128.27P
***********COMMON MODE EFFECT***********
I2 99 50 75U
*^Quiescent supply current
EOS 7 1 POLY(1) 16 49 2E-3 1
*Input offset voltage.^
R8 99 49 60K
R9 49 50 60K
*********OUTPUT VOLTAGE LIMITING********
V2 99 8 1.63
D1 9 8 DX
D2 10 9 DX
V3 10 50 .635
**************SECOND STAGE**************
EH 99 98 99 49 1
G1 98 9 POLY(1) 5 6 0 9.8772E-4 0 .3459
*Fp1=7.86 Hz
R5 98 9 101.2433MEG
C3 98 9 200P
***************POLE STAGE***************
*Fp=2 MHz
G3 98 15 9 49 1E-6
R12 98 15 1MEG
C5 98 15 7.9577E-14
*********COMMON-MODE ZERO STAGE*********
*Fpcm=10 KHz
G4 98 16 3 49 5.6234E-8               
L2 98 17 15.9M
R13 17 16 1K
**************OUTPUT STAGE**************
F6 50 99 POLY(1) V6 300U 1
E1 99 23 99 15 1
R16 24 23 17.5
D5 26 24 DX
V6 26 22 .63V
R17 23 25 17.5
D6 25 27 DX
V7 22 27 .63V
V5 22 21 0.27V
D4 21 15 DX
V4 20 22 0.27V
D3 15 20 DX
L3 22 28 500P
RL3 22 28 100K

.MODEL DX D(IS=1E-15)
.MODEL QX PNP(BF=1.111E3)

.ENDS

Сначала копируем текст модели и сохраняем его в текстовый файл LM358.cir Чтобы использовать SPICE-модели, задаваемые подсхемами в Qucs-S существует компонент SPICE file. Сразу после размещения на схеме данный компонент имеет вид квадратика без выводов. По двойному щелчку по компоненту SPICE file открывается диалоговое окно свойств, в котором следует указать путь к файлу LM358.cir. Для этого нажимаем кнопку Browse и выбираем файл. Qucs-S считает файл модели и заполнит список узлов SPICE net nodes. Эти узлы нужно переместить в список Component ports при помощи кнопки Add. Должен получиться результат, как показано на скриншоте.

Задание свойств компонента SpiceFile

Задание свойств компонента SpiceFile

Теперь нажимаем ОК, и видим, что вид компонента на схеме изменился. У него появились выводы. Модель ОУ можно протестировать уже сейчас. Для этого соберём неинвертирующий повторитель напряжения. Результат моделирования рабочей точки (вызывается по клавише F8 или меню Simulation→ DC bias) показан на скриншоте. Видно, что напряжение на выходе повторителя примерно равно напряжению на входе.

Повторитель напряжения с моделью SPICE

Повторитель напряжения с моделью SPICE

Чтобы создать УГО для SPICE-компонента потребуется обернуть его в подсхему. Создаём файл LM358.sch и добавляем в него компонент SPICE file. Снова указываем в свойствах путь к файлу модели LM358.cir и заполняем список терминалов. Теперь к выводам компонента нужно подключить порты подсхемы, а затем перейти в режим редактора символа, нажав F9. Рисуем УГО при помощи примитивов и получаем результат, показанный на скриншотах. Параметров у этого компонента нет, и их задавать не нужно. Теперь сохраняем файл LM358.sch. Получившийся компонент можно вставить в другую схему при помощи компонента Subcircuit.

Подсхема с моделью SPICE

Подсхема с моделью SPICE

УГО нового компонента

УГО нового компонента

На скриншоте ниже показан пример моделирования неивертирующего усилителя переменного напряжения с однополярным питанием.

Неинвертирующий усилитель

Неинвертирующий усилитель

Утилита Qucsconv

Утилита Qucsonv это конвертер файлов, который позволяет в том числе сконвертировать библиотеку моделей SPICE в библиотеку Qucs. Данная утилита работает в режиме командной строки и может переконвертировать только библиотеку, целиком состоящую из modelcards. Например вот такую: https://ltwiki.org/index.php? title=Standard.bjt

Начиная с версии 24.2.0 утилита qucsconv снова поставляется вместе с программой. Также для неё был улучшен графический интерфейс. Утилиту можно запустить из меню Tools, выбрав Data File converter. Интерфейс интуитивно понятен. Чтобы сконвертировать библиотеку SPICE в библиотеку Qucs следует выбрать из выпадающих списков SPICE netlist и Qucs library, задать входной и выходной файл, а затем нажать кнопку Convert.

Интерфейс для утилиты Qucsconv

Интерфейс для утилиты Qucsconv

Режимы совместимости SPICE

Синтаксис списка цепей в большинстве современных симуляторов, к которым относится Ngspice, следует стандарту SPICE-3f5. Но проприетарные SPICE-симуляторы, например LTSpice или PSPICE, часто имеют расширения стандарта и дополнительные компоненты. Например нетлист LTSpice поддерживает оператор IF, а в Ngspice вместо него реализован тернарный оператор. Чтобы использовать некоторые модели от LTSpice или PSICE в Ngspice необходимо либо править модель вручную, либо переключить Ngspice в режим совместимости. Подробнее про режимы совместимости можно прочитать в мануале Ngspice https://ngspice.sourceforge.io/docs/ngspice-html-manual/manual.xhtml#magicparlabel-23836 Нужно обратить внимание, что режим совместимости с Ltspice не реализует 100% совместимость, поэтому некоторые модели работать не будут. Здесь все вопросы следует адресовать разработчикам Ngspice.

Чтобы в Qucs-S включить режим совместимости служит специальный компонент Spiceinit section. На скриншоте показано, как его использовать. Здесь видим схему с моделью популярной микросхемы УНЧ TDA2003. Эта модель создана для LTSpice и требует задания режима совместимости. Компонент Spiceinit содержит строку set ngbehavior=ltpsa

Пример установки режимов совместимости

Пример установки режимов совместимости

Как создать свою библиотеку

Библиотеки в Qucs-S имеют текстовый формат, близкий к XML. Файлы системных библиотек с расширением *.lib находятся к каталоге share/qucs-s/libraries в корне установки программы. Чтобы создать свою библиотеку, нужно сконвертировать проект, содержащий файлы SCH с подсхемами. Рассмотрим этот процесс на примере и создадим проект NewLibrary. Для этого нажимаем в главном меню Project→ New Project Если планируется создавать библиотеку, то необходимые схемы можно создать и сохранить сразу в проекте.

Диалог создания нового проекта

Диалог создания нового проекта

Нажимаем Create, и откроется пустой проект. В дальнейшем созданные проекты можно найти в на вкладке Projects в левой части окна программы. Далее нужно скопировать файлы, которые мы создали в предыдущих разделах в каталог с проектом. Проекты по умолчанию находятся в каталоге в домашнем каталоге пользователя в подкаталоге $HOME/.qucs Полный путь к проекту $HOME/.qucs/NewLibrary_prj Открываем этот каталог в файловом менеджере и копируем туда файлы LM358.sch и SPK.sch. Далее нужно обновить дерево проекта. Для этого закрываем проект (Project→Close), а потом снова открываем его двойным щелчком по проекту NewLibrary_prj в списке на панели в левой части окна на вкладке Projects. Теперь в пункте Schematics видим две схемы. Можно переходить к созданию библиотеки.

Пример проекта с двумя подсхемами

Пример проекта с двумя подсхемами

Чтобы создать библиотеку, выбираем пункт меню Project→Create Library. Открывается диалоговое окно. В поле в верхней части вводим название будущей библиотеки и в списке выбираем подсхемы, которые нужно включить в библиотеку. Результат показан на скриншоте.

Диалоговое окно создания библиотеки

Диалоговое окно создания библиотеки

Когда имя библиотеки задано, а подсхемы выбраны, нажимаем Next. В следующем диалоге можно задать описание для компонентов. Вписываем, что-нибудь в текст описания и когда компоненты закончатся нажимаем Create.

Задание описания компонента

Задание описания компонента

Отображается следующее диалоговое окно, извещаюшее о том, что библиотека создана. Ошибки «no digital model» можно проигнорировать. Они сообщают о том, что для наших компонентов отсутствует цифровая модель Verilog/VHDL. Для аналогового компонента такая и не требуется.

Сводка создания библиотеки

Сводка создания библиотеки

Новая библиотека теперь отображается в списке User Libraries на вкладке Libraries в левой части окна. Файл библиотеки можно найти в каталоге $HOME/.qucs/user_lib Это путь поиска пользовательских библиотек по умолчанию. Теперь можно заменить компонент ОУ в тестовой схеме на компонент из вновь созданной библиотеки. Видим, что результат симуляции после замены компонента не изменился.

Использование компонента из пользовательской библиотеки

Использование компонента из пользовательской библиотеки

Заключение

В статье было рассмотрено как подключить SPICE-модели и создавать свои библиотеки в Qucs-S. За время, пока писалась статья, вышло два релиза, но процедура создания библиотеки и использования сторонних моделей не поменялась. Так что всё написанное актуально для новейшего на данный момент релиза 24.2.1

В заключении приведём список ресурсов по Qucs-S.

© Habrahabr.ru