Qucs-S: руководство по видам моделирования, часть 2

в 15:12, , рубрики: Qucs, Qucs-S, радиолюбительство, электроника

Qucs-S является программой с открытым исходным кодом для моделирования электронных схем. Qucs-S кроссплатформенный (поддерживаются Linux и Windows) и написан на С++ с использованием набора библиотек Qt. О данной программе рассказывают мои предыдущие статьи. Для работы Qucs-S рекомендуется использовать также открытый движок моделирования Ngspice. Актуальным релизом Qucs-S на текущий момент является версия 24.3.2. Статья продолжает подробное рассмотрение видов моделирования в Qucs-S, начатое в первой части: https://habr.com/ru/articles/789452/

Температурный анализ (Temperature sweep)

Температурный анализ является разновидностью моделирования на постоянном токе. Отличием является то, что в качестве параметра нужно указать переменную TEMP, которая в Ngspice зарезервирована для температуры. На скриншоте показан пример такого моделирования. Моделируется зависимость тока коллектора транзистора от температуры.

Температурный анализ Temperature sweep
Температурный анализ Temperature sweep

Следующий пример иллюстрирует использование температуры во внешнем цикле Parameter Sweep. Моделируется схеме, содержащая термистор NTC. Данный компонент доступен в библиотеке Thermistor, поставляемой с программой.

Моделирование схемы с термистором

Моделирование схемы с термистором

Использование уравнений с движком моделирования Ngspice

Уравнения требуются либо для создания параметрических схем, либо для манипуляций с результатами моделирования. Если программа работает в режиме совместимости SPICE (по умолчанию), то использование уравнений имеет некоторые особенности. Уравнения подразделяются на два типа:

  • Параметры (.PARAM) вычисляются до моделирования. Как следует из названия, данный тип уравнений применяется для параметрических схем, когда нужно вычислить номиналы компонентов согласно некоторым формулам. Данный тип уравнений находится на левой панели в группе Equations. Подробнее о синтаксисе см. руководство Ngspice: https://ngspice.sourceforge.io/docs/ngspice-html-manual/manual.xhtml#magicparlabel-1342

  • Уравнения постропроцессора Nutmeg equation. Эти уравнения вычисляются после моделирования. Nutmeg – это скриптовый язык построцессора Ngspice. Это уравнение размещается на схеме через меню Insert→ Equation. Подробнее о Nutmeg: https://ngspice.sourceforge.io/docs/ngspice-html-manual/manual.xhtml#magicparlabel-24648

Особенностью уравнений Nutmeg является то, что для них нужно указывать вид моделирования. Это связано с применяемым синтаксисом Ngspice, в котором различить вид моделирования невозможно.

  • v(node) – напряжение в некотором узле схемы

  • i(V1) ток через источник

  • V1#branch ток через источник, устаревший синтаксис

Ngspice поддерживает в уравнениях только токи через источник. Выражение вида i(R1) приводит к ошибке. Чтобы измерить ток через другой компонент нужно последовательно подключить источник постоянного напряжения с нулевым напряжением. Виртуальный амперметр, который имеется в Qucs-S также представляет из себя источник напряжения с нулевым напряжением.

Привязать моделирование к уравнению Nutmeg можно выбрав его из выпадающего списка Simulation name в диалоге свойств уравнения как показано на скриншоте:

Диалог свойств компонента Nutmeg Equation
Диалог свойств компонента Nutmeg Equation

Рассмотрим пример. Проведём моделирование RC цепочки так, что номиналы конденсатора и резистора рассчитываются исходя из частоты среза (параметр fc). На скриншоте видим, что на поле схемы кроме собственно самой схемы задано моделирование на переменном токе AC1 и размещено два уравнения. Параметр .PARAM рассчитывает номиналы компонентов, а уравнение построцессора Nutmeg Equation рассчитывает коэффициент передачи K RC-цепочки и входной импеданс Zin. Данное уравнение привязано к моделированию AC1. Из результатов моделирования видно, что частота среза по уровню 3дБ получилась на частоте 10 кГц, как было и задано через параметры.

Моделирование схемы с уравнениями

Моделирование схемы с уравнениями

В уравнениях Nutmeg можно использовать различные математические функции. Полный перечень можно узнать в документации Ngspice.

Использование уравнений с движком моделирования Qucsator

Qucsator не является SPICE-совместимым движком и использует другой тип уравнений, называемый Qucsator Equation. Если Qucsator выбран в качестве движка по умолчанию, то это уравнение будет добавляться на схему через кнопку на панели инструментов.

Уравнения Qucsator имеют другой синтаксис, не совместимый со SPICE. Отличие состоит в том, что токи и напряжения определяются однозначно. Поэтому привязывать симуляцию к уравнению не требуется. Также в отличие от SPICE Qucsator является регистрозависимым

  • node.v – напряжение в узле node при моделировании на переменном токе

  • node.V – напряжение в узле node при моделировании на постоянном токе

  • node.Vt – напряжение в узле node в переходном процессе

  • V1.I – ток через источник V1 при моделировании на постоянном токе

  • V1.i – ток через источник V1 при моделировании на переменном токе

  • V1.It – ток через источник V1 при моделировании переходного процесса

  • Pr1.It – ток через виртуальный амперметр Pr1

  • Pr1.Vt – напряжение на виртуальном вольтметре Pr1

Следует отметить, что в Qucsator встроены функции для преобразования матриц четырёхполюсников. Это очень удобно для анализа СВЧ схем. Данные функции следует применять совместно с моделированием S-параметров. Вот основные из них:

  • stoz() преобразует матрицу S-параметров в матрицу Z-параметров

  • stoy() преобразует матрицу S-параметров в матрицу Y-параметров

  • rtoswr() преобразует коэффициент отражения в КСВ

На скриншоте приведён пример моделирования СВЧ усилителя с использованием уравнений.

Моделирование СВЧ усилителя с уравнениями

Моделирование СВЧ усилителя с уравнениями

Подробнее об уравнениях Qucsator можно прочитать в мануале от старой версии программы: https://qucs.sourceforge.net/docs/tutorial/getstarted.pdf Движок QucsatorRF поставляемый вместе с Qucs-S в плане поддержки уравнений полностью идентичен старой версии.

Параметрический анализ (Parameter sweep) с движком Ngspice

Параметрический анализ как правило применяется если требуется получить семейство графиков, например семейство АЧХ, которые зависят от какого-либо параметра схемы. Чтобы использовать данный вид моделирования на схеме следует разместить компонент Parameter Sweep. В диалоговом окне свойств данного типа моделирования следует указать вид моделирования, к которому будет привязана развёртка параметров (Выпадающий список Simulation), а также параметр для для развёртки (Поле ввода Sweep Parameter).

В качестве параметра допускается следующее:

  • Имя компонента. Допускается только резистор (R) или конденсатор (С).

  • Имя переменной, объявленной как параметр (.PARAM)

Чтобы работала развёртка переменной, требуется версия Ngspice новее 37. На скриншоте показан пример установки параметрического анализа. В качестве моделирования выбрано AC1, которое должно быть предварительно размещено на схеме. В качестве параметра для развёртки выбран резистор R6.

Задание свойств параметрического анализа

Задание свойств параметрического анализа

Следующие два скриншота иллюстрируют примеры параметрического анализа с компонентом в качестве параметра и переменной в качестве параметра. Во втором примере номинал конденсатора в RC цепи рассчитывается параметрически через переменную, задающую частоту среза. В обоих случаях в качестве результата мы получаем семейство АЧХ.

Использование резистора в качестве параметра

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

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

Нуль-полюсный анализ

Нуль-полюсный анализ позволяет рассчитать расположение нулей и полюсов передаточной функции на комплексной плоскости. С краткой теорией по данному вопросу можно ознакомиться например здесь: https://www.allaboutcircuits.com/technical-articles/understanding-poles-and-zeros-in-transfer-functions/ Данное моделирование применяется при анализе, например активных фильтров в частотной области.

В качестве примера синтезируем активный фильтр Баттерворта 5-го порядка при помощи встроенной утилиты для синтеза фильтров (Tools→ Active filter synthesis). Исходные данные выберем как показано на скриншоте. Если нажать на кнопку Calculate and copy to clipboard, то синтезированная схема будет скопирована в буфер обмена, и её можно будет потом вставить в документ.

Утилита для синтеза активных фильтров

Утилита для синтеза активных фильтров

В результате расчёта программа помимо номиналов элементов сообщает, что передаточная функция фильтра имеет 5 полюсов, которые симметрично расположены на комплексной плоскости. Программа выдаёт нормированный результат для единичной частоты среза.

Промоделируем расположение нулей и полюсов для данного активного фильтра. Для этого на схеме размещаем. Компонент Pole/Zero analysis. В свойствах нужно задать пару входных и выходных узлов. В нашем случае входной сигнал подаётся между узлами in и 0, а выходной снимается между узлами out и 0. Узел 0 в SPICE совместимых симуляторах всегда соответствует земле. Остальные установки оставляем без изменений. Диалог свойств нуль-полюсного анализа показаны на следующем скриншоте.

Свойства нуль-полюсного анализа

Свойства нуль-полюсного анализа

После моделирования размещаем на схему график в полярных координатах и строим переменную pole. Получаем график расположения полюсов на комплексной плоскости. Также видим пять полюсов. В свойствах диаграммы следует указать тип линии stars. Числа отличаются от результата на предыдущем скриншоте. Это связано с тем, что симулятор выдаёт данные, умноженные на круговую частоту среза 2*pi*fc.

Нуль-полюсный анализ

Нуль-полюсный анализ

Заключение

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

Автор: vv_kuznetsov

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js