Преобразовать компоненты SPICE в Simscape™ эквиваленты можно с помощью ассистента преобразования SPICE. Часто это преобразование происходит автоматически. Однако, поскольку SPICE является богатым языком, не всегда можно выполнить полное преобразование без какого-либо ручного вмешательства.
Чтобы преобразовать подсхемы SPICE в эквивалентные компоненты Simscape, выполните следующие шаги.
Используйте subcircuit2ssc
функция для генерации файлов компонентов языка Simscape из файла списка сетей SPICE. Вы можете использовать дополнительный subcircuit1,…,subcircuitN
входные параметры для определения подцепей, которые нужно преобразовать.
Выполните любые необходимые ручные преобразования в сгенерированные файлы компонента Simscape. Чтобы идентифицировать необходимые преобразования вручную, проверьте комментарии в начале сгенерированных файлов компонента Simscape. Вы можете использовать дополнительный unsupportedCommands
выходной аргумент для генерации struct
массив, в котором перечислены неподдерживаемые команды SPICE для каждой подсхемы.
Создайте библиотеку используя ssc_build
или добавить отдельные компоненты к модели с помощью блоков Simscape Component.
Существует много различных симуляторов SPICE с изменениями в синтаксисе и синтаксической интерпретации. Помощник по преобразованию использует тот же синтаксис, что и Cadence® PSpice и, где такие различия существуют, соответствует PSpice.
Помощник преобразования SPICE поддерживает следующие команды:
.FUNC
- Переиспользуемая функция
.PARAM
- Определяемый параметр
.MODEL
- Набор переиспользуемых параметров компонента
.SUBCKT
- Подсхема
.LIB
- Директива для включения моделей из внешнего нетлиста
.INC
- Директива о включении содержимого внешнего нетлиста
Помощник по преобразованию реализует .FUNC
Команды SPICE с использованием функций Simscape. Эти функции помещены в сублибрарий пакета с именем +
, где subcircuit_name
_simscape_functionssubcircuit_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 |
Base-10 логарифм | log10 | log10 |
Квадратный корень | sqrt | sqrt |
Помощник по преобразованию интерпретирует log()
как естественный логарифм, а не основа -10 логарифм. Не все симуляторы SPICE последовательны в этом отношении, поэтому убедитесь, что эта интерпретация соответствует вашей модели SPICE.
В сложение помощник по преобразованию поддерживает следующие функции SPICE:
Имя | Функция SPICE |
---|---|
Если условие | if |
Насыщение | limit |
Ток через устройство | i |
Напряжение на устройстве | v |
Функция шага | stp |
Производная (см. Ограничения) | ddt |
Таблица | table |
Ассистент преобразования распознает следующие символы SPICE:
+
в начале строки указывает продолжение линии от предыдущей строки
*
в начале линии указывает, что вся линия является комментарием
;
внутри линии указывает начало встроенного комментария
Приведенные в этом разделе обозначения команд SPICE соответствуют следующим правилам:
<argument>
ссылается на необходимый элемент в командной строке
<argument>*
ссылается на необходимый элемент в командной строке, который происходит один или несколько раз
[argument]
ссылается на дополнительный элемент в командной строке
[argument]*
ссылается на дополнительный элемент в командной строке, который происходит в нули или более раз
В этом списке показан полный набор поддерживаемых компонентов 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
.Для пассивных устройств, таких как конденсаторы и индукторы, чтобы ввести паразитарные значения в сгенерированные файлы компонента Simscape, установите параметр Specify parasitics values равным Yes. Затем задайте значение параметров Capacitor parasitic series resistance или Inductor parasitic parallel conductance.
Список сетей должен быть написан в формате PSpice и быть синтаксически правильным. Ассистент преобразования не проверяет правильность синтаксиса PSpice.
Поддерживается только подмножество языка нетлиста PSpice. Однако неподдерживаемые команды PSpice идентифицируются в верхней части соответствующего файла компонента Simscape, чтобы облегчить ручное преобразование.
Чтобы создать сгенерированные компоненты Simscape в блоки Simscape, значения параметров должны соответствовать ограничениям Simscape. Для примера емкость основного конденсатора и индуктивность основного индуктора должны быть ненулевыми.
Ассистент преобразования не поддерживает использование производной функции SPICE, ddt
, внутри вызова функции.