Можно преобразовать компоненты SPICE в эквиваленты Simscape™ с помощью ассистента преобразования SPICE. Часто это преобразование является автоматическим. Однако, потому что SPICE является богатым языком, не всегда возможно выполнить полное преобразование без некоторого ручного вмешательства.
Чтобы преобразовать подсхемы SPICE на эквивалентные компоненты Simscape, выполните эти шаги.
Используйте функцию subcircuit2ssc
, чтобы сгенерировать файлы компонента языка Simscape из файла списка соединений SPICE. Можно использовать дополнительные входные параметры subcircuit1,…,subcircuitN
, чтобы задать который подсхемы преобразовать.
Сделайте любые необходимые ручные преобразования в сгенерированные файлы компонента Simscape. Чтобы идентифицировать необходимые ручные преобразования, проверяйте комментарии в начале сгенерированных файлов компонента Simscape. Можно использовать дополнительный выходной аргумент unsupportedCommands
, чтобы сгенерировать массив struct
, который перечисляет неподдерживаемые команды SPICE для каждой подсхемы.
Создайте библиотеку с помощью ssc_build
или добавьте отдельные компоненты в модель с помощью блоков Компонента Simscape.
Существует много различных средств моделирования SPICE с изменениями в интерпретацией синтаксиса и синтаксисе. Ассистент преобразования использует тот же синтаксис в качестве Cadence® PSpice и, где такие различия существуют, выполняет PSpice.
Ассистент преобразования SPICE поддерживает эти команды:
func
Допускающая повторное использование функция
.PARAM
— Определимый параметр
.MODEL
— Набор допускающих повторное использование параметров компонента
.SUBCKT
— Подсхема
.LIB
— Директива, чтобы включать модели от внешнего списка соединений
.INC
— Директива, чтобы включать содержимое внешнего списка соединений
Ассистент преобразования реализует .FUNC
команды SPICE с помощью функций Simscape. Эти функции помещаются в подбиблиотеке пакета под названием
, где +subcircuit_name_simscape_functions
subcircuit_name
является именем преобразовываемой подсхемы.
Задайте синтаксис .MODEL
для резисторов, конденсаторов и индукторов, как
.MODEL <model name> res(r=<value>) .MODEL <model name> cap(c=<value>) .MODEL <model name> ind(l=<value>)
r
, c
и значения l
являются масштабными коэффициентами для значения, заданного на объявлении компонента. Это поведение выполняет PSpice, но не сопоставимо через все средства моделирования.Ассистент преобразования автоматически не преобразовывает заданное использование начальных условий оператора .IC
. Однако можно задать начальные условия для конденсаторов и индукторов с помощью синтаксиса IC=<value>
. Кроме того, можно вручную преобразовать любые операторы .IC
из сгенерированных файлов компонента Simscape.
Поскольку цель ассистента преобразования состоит в том, чтобы помочь преобразовать подсхемы SPICE в блоки Simscape, команды симуляции, такие как .TRAN
, проигнорированы.
Ассистент преобразования поддерживает эти числовые суффиксы SPICE:
Суффикс | Имя | Шкала |
---|---|---|
T | Tera | 1e12 |
G | Giga | 1e9 |
MEG | Мега | 1e6 |
K | Килограмм | 1e3 |
M | Милли | 1e-3 |
MIL | -- | 25.4e-6 |
U | Микро | 1e-6 |
N | Нано | 1e-9 |
P | Pico | 1e-12 |
F | Femto | 1e-15 |
Ассистент преобразования поддерживает эти основные математические функции, используемые в SPICE и MATLAB.
Имя | Функция SPICE | Функция MATLAB |
---|---|---|
Абсолютное значение | abs | abs |
Самый маленький элемент | min | min |
Самый большой элемент | max | max |
Знаковая функция | sgn | sign |
Имя | Функция SPICE | Функция MATLAB |
---|---|---|
Синус | sin | sin |
Обратный синус | asin | asin |
Гиперболический синус | sinh | sinh |
Косинус | cos | cos |
Обратный косинус | acos | acos |
Гиперболический косинус | cosh | cosh |
Касательная | tan | tan |
Обратный тангенс | atan | atan |
Обратный тангенс с четырьмя квадрантами | atan2 | atan2 |
Гиперболическая касательная | tanh | tanh |
Имя | Функция SPICE | Функция MATLAB |
---|---|---|
Степень | ** или pwr | ^ или power |
Экспоненциал | exp | exp |
Натуральный логарифм | ln или log | log |
Основывайте 10 логарифмов | log10 | log10 |
Квадратный корень | sqrt | sqrt |
Ассистент преобразования интерпретирует log()
как натуральный логарифм, а не основу 10 логарифмов. Не все средства моделирования SPICE сопоставимы в этом отношении, поэтому гарантируйте, что эта интерпретация является конгруэнтной с вашей моделью SPICE.
Кроме того, ассистент преобразования поддерживает эти функции SPICE:
Имя | Функция SPICE |
---|---|
Если условие | if |
Насыщение | limit |
Текущий через устройство | i |
Напряжение через устройство | v |
Ступенчатая функция | stp |
Ассистент преобразования распознает эти символы SPICE:
+
в начале строки указывает на продолжение строки от предыдущей строки
*
в начале строки указывает, что целая строка является комментарием
;
в строке указывает на начало встроенного комментария
Обозначение для команд SPICE в этом разделе следует этим правилам:
<argument>
относится к необходимому элементу в командной строке
<argument>*
относится к необходимому элементу в командной строке, которые происходят один или несколько раз
[argument]
относится к дополнительному элементу в командной строке
[argument]*
относится к дополнительному элементу в командной строке, которые происходят нуль или больше раз
Этот список показывает полный набор поддерживаемых компонентов SPICE и их поддерживаемых обозначений списка соединений SPICE. Можно задать только параметры .MODEL
, которые отличаются от значений по умолчанию SPICE.
Независимый источник напряжения
V<name> <+ node> <- node> [DC] <value> V<name> <+ node> <- node> exp(<v1> <v2> <td1> <tc1> <td2> <tc2>) V<name> <+ node> <- node> pulse(<v1> <v2> <td> <tr> <tf> <pw> <per>) V<name> <+ node> <- node> pwl(<<tj> <vj>>*) V<name> <+ node> <- node> sffm(<voff> <vampl> <fc> <mod> <fm>) V<name> <+ node> <- node> sin(<voff> <vampl> <freq> <td> <df>)
Независимый текущий источник
I<name> <+ node> <- node> [DC] <value> I<name> <+ node> <- node> exp(<i1> <i2> <td1> <tc1> <td2> <tc2>) I<name> <+ node> <- node> pulse(<i1> <i2> <td> <tr> <tf> <pw> <per>) I<name> <+ node> <- node> pwl(<<tj> <ij>>*) I<name> <+ node> <- node> sffm(<ioff> <iampl> <fc> <mod> <fm>) I<name> <+ node> <- node> sin(<ioff> <iampl> <freq> <td> <df>)
Управляемый текущим образом источник напряжения
H<name> <+ node> <- node> <voltage source name> <gain> H<name> <+ node> <- node> VALUE={<expression>} H<name> <+ node> <- node> POLY(<value>) <voltage source name>* <coefficient>* H<name> <+ node> <- node> TABLE {<expression>}=< <input value>, <output value> >* H<name> <+ node> <- node> <voltage source name> TABLE=< <input value>, <output value> >*
Управляемый напряжением источник напряжения
E<name> <+ node> <- node> <+ control node> <- control node> <gain> E<name> <+ node> <- node> VALUE={<expression>} E<name> <+ node> <- node> POLY(<value>) <<+ control node> <- control node>>* <coefficient>* E<name> <+ node> <- node> TABLE {<expression>}=< <input value>, <output value> >* E<name> <+ node> <- node> <+ control node> <- control node> TABLE=< <input value>, <output value> >*
Управляемый текущим образом текущий источник
F<name> <+ node> <- node> <voltage source name> <gain> F<name> <+ node> <- node> VALUE={<expression>} F<name> <+ node> <- node> POLY(<value>) <voltage source name>* <coefficient>* F<name> <+ node> <- node> TABLE {<expression>}=< <input value>, <output value> >* F<name> <+ node> <- node> <voltage source name> TABLE=< <input value>, <output value> >*
Управляемый напряжением текущий источник
G<name> <+ node> <- node> <+ control node> <- control node> <gain> G<name> <+ node> <- node> VALUE={<expression>} G<name> <+ node> <- node> POLY(<value>) <<+ control node> <- control node>>* <coefficient>* G<name> <+ node> <- node> TABLE {<expression>}=< <input value>, <output value> >* G<name> <+ node> <- node> <+ control node> <- control node> TABLE=< <input value>, <output value> >*
Поведенческий источник (<выражение> не должен появляться в фигурных скобках {}),
B<name> <+ node> <- node> V=<expression> B<name> <+ node> <- node> I=<expression>
Резистор
R<name> <+ node> <- node> [model name] <value> .MODEL <model name> res(r=<value>)
Конденсатор
C<name> <+ node> <- node> [model name] <value> [IC=<value>] .MODEL <model name> cap(c=<value>)
Индуктор
L<name> <+ node> <- node> [model name] <value> [IC=<value>] .MODEL <model name> ind(l=<value>)
Связь индуктора
K<name> <inductor name> <inductor name>* <value>
Управляемый переключатель напряжения
S<name> <+ node> <- node> <+ control node> <- control node> <model name> .MODEL <model name> sw(ron=<value>, roff=<value>, vt=<value>, vh=<value>)
Текущий управляемый переключатель
W<name> <+ node> <- node> <voltage source name> <model name> .MODEL <model name> csw(ron=<value>, roff=<value>, it=<value>, ih=<value>)
Диод
D<name> <+ node> <- node> <model name> [area] .MODEL <model name> d(is=<value>, rs=<value>, n=<value>, cjo=<value>, vj=<value>, +m=<value>, fc=<value>, tt=<value>, revbrk=<value>, bv=<value>, ibv=<value>, +xti=<value>, eg=<value>)
Биполярный транзистор соединения (BJT)
N-P-N-СТРУКТУРА
Q<name> <collector node> <base node> <emitter node> [substrate node] <model name> <area> .MODEL <model name> npn(bf=<value>, br=<value>, cjc=<value>, cje=<value>, cjs=<value>, +eg=<value>, fc=<value>, ikf=<value>, ikr=<value>, irb=<value>, is=<value>, isc=<value>, +ise=<value>, itf=<value>, mjc=<value>, mje=<value>, mjs=<value>, nc=<value>, ne=<value>, +nf=<value>, nr=<value>, rb=<value>, rbm=<value>, rc=<value>, re=<value>, tf=<value>, +tr=<value>, vaf=<value>, var=<value>, vjc=<value>, vje=<value>, vjs=<value>, vtf=<value>, +xcjc=<value>, xtb=<value>, xtf=<value>, xti=<value>)
PnP
Q<name> <collector node> <base node> <emitter node> [substrate node] <model name> <area> .MODEL <model name> pnp(bf=<value>, br=<value>, cjc=<value>, cje=<value>, cjs=<value>, +eg=<value>, fc=<value>, ikf=<value>, ikr=<value>, irb=<value>, is=<value>, isc=<value>, +ise=<value>, itf=<value>, mjc=<value>, mje=<value>, mjs=<value>, nc=<value>, ne=<value>, +nf=<value>, nr=<value>, rb=<value>, rbm=<value>, rc=<value>, re=<value>, tf=<value>, +tr=<value>, vaf=<value>, var=<value>, vjc=<value>, vje=<value>, vjs=<value>, vtf=<value>, +xcjc=<value>, xtb=<value>, xtf=<value>, xti=<value>)
Полевой транзистор соединения (JFET)
N-канал
J<name> <drain node> <gate node> <source node> <model name> [area] .MODEL <model name> njf(beta=<value>, cgd=<value>, cgs=<value>, fc=<value>, is=<value>, +lambda=<value>, m=<value>, n=<value>, rd=<value>, rs=<value>, vto=<value>, xti=<value>)
P-канал
J<name> <drain node> <gate node> <source node> <model name> [area] .MODEL <model name> pjf(beta=<value>, cgd=<value>, cgs=<value>, fc=<value>, is=<value>, +lambda=<value>, m=<value>, n=<value>, rd=<value>, rs=<value>, vto=<value>, xti=<value>)
Полевой транзистор металлооксидного полупроводника (MOSFET)
N-канал (только уровень 1 и уровень 3 поддерживаются),
M<name> <drain node> <gate node> <source node> <bulk node> <model name> +[L=<value>] [W=<value>] [AD=<value>] [AS=<value>] [PD=<value>] [PS=<value>] [NRD=<value>] +[NRS=<value>] [M=<value>] .MODEL <model name> nmos(cbd=<value>, cbs=<value>, cgbo=<value>, cgdo=<value>, +cgso=<value>, cj=<value>, cjsw=<value>, delta=<value>, eta=<value>, fc=<value>, +gamma=<value>, is=<value>, js=<value>, kappa=<value>, kp=<value>, lambda=<value>, +ld=<value>, level=<value>, mj=<value>, mjsw=<value>, n=<value>, neff=<value>, nfs=<value>, +nss=<value>, nsub=<value>, nrd=<value>, nrs=<value>, pb=<value>, phi=<value>, rd=<value>, +rs=<value>, rsh=<value>, theta=<value>, tox=<value>, tpg=<value>, ucrit=<value>, +uexp=<value>, uo=<value>, vmax=<value>, vto=<value>, xj=<value>)
P-канал (только уровень 1 и уровень 3 поддерживаются),
M<name> <drain node> <gate node> <source node> <bulk node> <model name> +[L=<value>] [W=<value>] [AD=<value>] [AS=<value>] [PD=<value>] [PS=<value>] [NRD=<value>] +[NRS=<value>] [M=<value>] .MODEL <model name> pmos(cbd=<value>, cbs=<value>, cgbo=<value>, cgdo=<value>, +cgso=<value>, cj=<value>, cjsw=<value>, delta=<value>, eta=<value>, fc=<value>, +gamma=<value>, is=<value>, js=<value>, kappa=<value>, kp=<value>, lambda=<value>, +ld=<value>, level=<value>, mj=<value>, mjsw=<value>, n=<value>, neff=<value>, nfs=<value>, +nss=<value>, nsub=<value>, nrd=<value>, nrs=<value>, pb=<value>, phi=<value>, rd=<value>, +rs=<value>, rsh=<value>, theta=<value>, tox=<value>, tpg=<value>, ucrit=<value>, +uexp=<value>, uo=<value>, vmax=<value>, vto=<value>, xj=<value>)
Подсхема
X<name> [node]* <subcircuit name> [PARAMS: < <name>=<value> >*]
После того, как вы генерируете файлы компонента Simscape, осматриваете каждый заголовок файла для сообщений относительно неподдерживаемых команд SPICE. Например, ассистент преобразования не поддерживает реализацию температурных коэффициентов для резисторов:
R1 p n 1k TC=0.01,-0.002
Сгенерированный файл компонента Simscape содержит все поддерживаемые преобразования и этот заголовок, который идентифицирует температурные коэффициенты резистора для ручного преобразования:
component test % test % Component automatically generated from a SPICE netlist (11-Dec-2018 09:34:57). % Users should manually implement the following SPICE commands in order to % achieve a complete implementation: % R1: tc 0.01 -0.002
subcircuit2ssc
.
Список соединений должен быть написан в формате PSpice и быть синтаксически правильным. Ассистент преобразования не проверяет на соответствующий синтаксис PSpice.
Только подмножество языка списка соединений PSpice поддерживается. Однако неподдерживаемые команды PSpice идентифицированы наверху соответствующего файла компонента Simscape, чтобы упростить ручное преобразование.
Чтобы встроить сгенерированные компоненты Simscape в блоки Simscape, значения параметров должны соответствовать ограничениям Simscape. Например, емкость основного конденсатора и индуктивность основного индуктора должны быть ненулевыми.