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

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

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

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

Простейший способ добавить новых компонент – это создать подсхему. В качества примера рассмотрим, как создать компонент, представляющий динамическую головку. Новейшая версия Qucs-S имеет в составе библиотеку Loudspeakers, которая содержит модели динамиков. Здесь разберём как эта библиотека сделана. Известно, что динамик имеет сложную зависимость импеданса от частоты и описывается эквивалентной схемой, которую можно представить в виде RCL-цепи. В данной статье мы будем пользоваться моделью, которая приведена здесь:

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

Компоненты 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 и заполняем список Component ports. Теперь к выводам компонента нужно подключить порты подсхемы, а затем перейти в режим редактора символа, нажав 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.

Комментарии (10)


  1. aax
    07.04.2024 22:12
    +1

    Хорошо, что программа развивается и выходят статьи с такими руководствами. Было бы здорово увидеть и русскоязычный раздел документации на сайте проекта, который уже есть чем начать заполнять.


    1. vv_kuznetsov Автор
      07.04.2024 22:12
      +1

      Да, в ближайшее время сделаю репозиторий и проект overleaf для русскоязычной документации. План по английской документации здесь: https://github.com/ra3xdh/qucs_s/issues/554


  1. juramehanik
    07.04.2024 22:12
    +1

    Вы делаете очень крутую работу! Но я сходу не смог разобраться, а вытались интегрироваться с kicad? или как раз из за невозможности это сделать приходится создавать графическую оболочку для решателя "заного" ?
    Просто для меня, как не знакомого с внутренностями вашего проекта и кикада (да и вообще не программиста) кажется, что и там и там графический интерфейс схожий, проделано куча работы, а у кикада есть система плагинов, бери да встраивай!


    1. vv_kuznetsov Автор
      07.04.2024 22:12

      Разработка Qucs ведётся с 2003 года. Изначально он задумывался авторами, которые в настоящее время ушли из open-source, как открытый аналог САПР AWR или ADS более с уклоном на моделирование СВЧ устройств. Даже интерфейс сделали похожий на ADS. Но потом область применения программы расширили. KiCAD стал делать свой модуль с симулятором много позже.

      Объединить Qucs и KiCAD едва ли возможно в виду архитектурных различий и использования разных фреймворков (Qt и WX) для GUI. Также область назначения обеих программ несколько разная. Qucs по-прежнему имеет уклон в моделирование СВЧ.


      1. aax
        07.04.2024 22:12

        А Вы не думали над возможностью импорта net-листов схем из KiCAD-а? Было бы круто.


        1. vv_kuznetsov Автор
          07.04.2024 22:12

          Нет, реализация подобного не рассматривается. В 99% случаев из нетлиста KiCAD можно импортировать только RCL. Для остального в библиотеках KiCAD нет SPICE-моделей. Нужны какие-то костыли. Ну и если даже удастся импортировать схему целиком с моделями, то на чём-то подобном вот этому: https://raw.githubusercontent.com/ra3xdh/TRX_RA3XDH/master/TRX_RA3XDH.png симулятор зависнет. В данном примере кстати все модели есть. На мой взгляд лучше моделировать схему малыми частями. Существует брошенный проект для обратного преобразования qucs2kicad https://github.com/Valber/qucs2kicad Также начиная с версии 24.2.0 поддерживается интеграция с утилитой Qucs-RFLayout https://github.com/thomaslepoix/Qucs-RFlayout , которая генерирует топологию KiCAD из схемы с микрополосковыми линиями.


          1. aax
            07.04.2024 22:12

            Спасибо за ссылки, а по импорту net-листов пожелание более скромное, просто импортировать принципиальную схему один к одному, с номиналами RCL, и наименованиями всех компонентов что экономит время, и позволяет избежать ошибок ручного копирования.

            Касаемо, подгрузки SPICE-моделей к УГО(понятно, что при этом ограничения совместимости форматов SPICE-моделей учитываются в ручную), то хорошо бы современем, это упростить, до 1 клика, примерно как в KiCAD и LT-SPICE,

            Если УГО типовое, например полный дифференциальный усилитель, просто открываем диалог подрузки SPICE-модели, в котором задаем соотвествие портов УГО, и SPICE-модели, и дополнительно по необходимости режим совмеcтимости SPICE-модели с NgSpice(т.е. по сути как в KiCAD).

            Либо если типовое УГО не выбирали, то в один клик формируется УГО-прямоугольник в котором имена портов могут быть переименованы(т.е. по сути как в LT-SPICE, без предварительного выбора УГО), сейчас в один клик Qucs-S уже делает 95% этого, но вот порты УГО-прямоугольника при этом просто так не переименуешь, требуется целый ритуал с подсхемой(либо, что не очень хорошо, переименование портов в самой SPICE-модели).


            1. vv_kuznetsov Автор
              07.04.2024 22:12
              +1

              импортировать принципиальную схему один к одному

              Технически такое в принципе возможно. Но делать это некому, так как требуется написание большого объёма кода. Я точно за эту задачу не возьмусь. Вспоминаем, что KiCAD разрабатывают специалисты из CERN на зарплате. Ну и как я писал ранее, большие схемы просто зависнут при попытке симуляции, а маленькие схемы перерисовать вручную не составляет труда. Всё равно в физическую схему для корректной симуляции нужно что-то добавлять либо убирать. Но если кто-то сделает патч с подобной фичей "под ключ", то я его приму.

              упростить, до 1 клика, примерно как в KiCAD и LT-SPICE

              Существует компонент SpiceLibComp https://qucs-s-help.readthedocs.io/en/latest/SubLib.html#usage-of-unmodified-spice-libraries Там предполагается, что к этому компоненту можно просто подключить шаблон символа и указать файл с моделью SUBCKT. Но эта система имеет недоработки. Пока нет шаблонов символов и редактора таких шаблонов. Также нельзя задать соответствие портов символа и подсхемы. И иногда Ngspice показывает warning nested subcircuits. Поэтому я не включил информацию про данный способ в эту статью. Компонент SpiceLibComp нужно дорабатывать. Опять же помощь приветствуется.


            1. vv_kuznetsov Автор
              07.04.2024 22:12

              В качестве примера два скриншота реверсивного усилителя от КВ трансивера в KiCAD и Qucs. В принципе импорт из KiCAD возможен, но чтобы запустить симуляцию схема потребовала доработки. Ну и если бы я импортировал схему трансивера целиком, то симуляция бы просто зависла, несмотря на то, что для всех компонентов есть модели. Да и разработка здесь была в обратном порядке. Сначала я отладил мелкие узлы в симуляторе, а потом перерисовал их в KiCAD, чтобы сделать разводку ПП.

              Схема KiCAD
              Схема KiCAD
              Схема Qucs
              Схема Qucs


            1. vv_kuznetsov Автор
              07.04.2024 22:12
              +1

              Написал план улучшений по SpiceLibComp https://github.com/ra3xdh/qucs_s/issues/679 Может быть кто-то возьмётся.