Можно преобразовать компоненты SPICE в эквиваленты Simscape™ с помощью ассистента преобразования SPICE. Часто это преобразование является автоматическим. Однако, потому что SPICE является богатым языком, не всегда возможно выполнить полное преобразование без некоторого ручного вмешательства.
Чтобы преобразовать подсхемы SPICE на эквивалентные компоненты Simscape, выполните эти шаги.
Используйте subcircuit2ssc
функция, чтобы сгенерировать файлы компонента языка Simscape из файла списка соединений SPICE. Можно использовать дополнительный subcircuit1,…,subcircuitN
входные параметры, чтобы задать, который подсхемы преобразовать.
Сделайте любые необходимые ручные преобразования в сгенерированные файлы компонента Simscape. Чтобы идентифицировать необходимые ручные преобразования, проверяйте комментарии в начале сгенерированных файлов компонента Simscape. Можно использовать дополнительный unsupportedCommands
выходной аргумент, чтобы сгенерировать struct
массив, который перечисляет неподдерживаемые команды SPICE для каждой подсхемы.
Создайте использование библиотеки ssc_build
или добавьте отдельные компоненты в свою модель с помощью блоков Simscape Component.
Существует много различных средств моделирования SPICE с изменениями интерпретацией синтаксиса и синтаксисе. Ассистент преобразования использует тот же синтаксис в качестве Кэденс® 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 и Simscape. Эти основные математические функции не могут быть непрерывными или сглаживать и могут вызвать числовые проблемы во время симуляции. Чтобы решить эти проблемы, эти функции могут потребовать сглаживания.
subcircuit2ssc
функция автоматически включает параметры сглаживания при преобразовании подсхемы SPICE. Чтобы отключить опцию сглаживания, в маске блока сгенерированного блока компонента Simscape, устанавливают параметр Specify function smoothing parameters на No
.
Имя | Функция SPICE | Функция Simscape |
---|---|---|
Абсолютное значение | abs | simscape.function.abs (x, ZC) |
Самый маленький элемент | min | simscape.function.minm (x, y, n, эпсилон) |
Самый большой элемент | max | simscape.function.maxm (x, y, n, эпсилон) |
Знаковая функция | sgn | simscape.function.sign (x, ZC) |
Имя | Функция SPICE | Функция Simscape |
---|---|---|
Синус | sin | sin |
Обратный синус | asin | simscape.function.asinm (x, предупредите), |
Гиперболический синус | sinh | simscape.function.sinhm (x, maxAbsX, предупреждают), |
Косинус | cos | cos |
Обратный косинус | acos | simscape.function.acosm (x, предупредите), |
Гиперболический косинус | cosh | simscape.function.coshm (x, maxAbsX, предупреждают), |
Тангенс | tan | simscape.function.tanm (x, флаг, эпсилон, x0, предупреждает), |
Обратный тангенс | atan | atan |
Обратный тангенс с четырьмя квадрантами | atan2 | atan2 |
Гиперболический тангенс | tanh | tanh |
Имя | Функция SPICE | Функция Simscape |
---|---|---|
Степень | x**y , pwr(x,y) , или pwrs(x,y) | simscape.function.powerRational (x, y, флаг, эпсилон, предупреждает), |
Экспоненциал | exp | simscape.function.expm (x, xl, сверхтяжелые, предупреждают), |
Натуральный логарифм | ln или log | simscape.function.logm (x, x0, предупреждают), |
Основывайте 10 логарифмов | log10 | simscape.function.log 10 миллионов (x, x0, предупреждают), |
Квадратный корень | sqrt | simscape.function.sqrtm (x, флаг, эпсилон, предупреждает), |
Ассистент преобразования интерпретирует log()
как натуральный логарифм, а не основа 10 логарифмов. Не все средства моделирования SPICE сопоставимы в этом отношении, поэтому гарантируйте, что эта интерпретация является конгруэнтной с вашей моделью SPICE.
Кроме того, ассистент преобразования поддерживает эти SPICE и функции Simscape:
Имя | Функция SPICE | Функция Simscape |
---|---|---|
Если условие | if | if else |
Насыщение | limit | simscape.function.limitm (x, a, b, n, эпсилон) |
Текущий через устройство | i | i |
Напряжение через устройство | v | v |
Ступенчатая функция | stp | if x>0, 1 else 0 end |
Производная (см. ограничения), | ddt | der |
Таблица | table | simscape.tablelookup([x1,x2,…xn],[y1,y2,…yn],x,interpolation=linear,extrapolation=nearest) |
simscape.function.hyp(x,epsilon)
— Функция с положительным выходомЭта функция всегда выводит положительное значение. Используйте эту функцию, чтобы защитить от проблем, таких как деление на нуль. epsilon
определяет гладкость перехода и абсолютная погрешность функции ипохондрии когда
.x
=0
Когда
, выход этой функции стремится к x
> epsilon
x
.
simscape.function.abs(x,ZC)
— Функция вычисления абсолютного значенияЭта функция возвращает абсолютное значение входного параметра, x
.
Можно включить или отключить нуль, пересекающийся путем определения входного параметра ZC
к любому true
или false
.
simscape.function.expm(x,xl,xh,warn)
— Показательная функцияЭта функция возвращает экспоненциал x
, exp(x)
, когда x
области значений между xl
и xl
. В противном случае это использует линейную экстраполяцию с градиентом, соответствующим за пределами.
Используйте эту функцию, чтобы избежать числовых проблем, сопоставленных с exp(x)
для очень маленьких или больших входных параметров.
simscape.function.coshm(x,maxAbsX,warn)
— Гиперболическая косинусная функцияЭта функция возвращает гиперболический косинус x
, cosh(x)
, когда x
области значений между -maxAbsX
и maxAbsX
. В противном случае это использует линейную экстраполяцию с градиентом, соответствующим за пределами.
Используйте эту функцию, чтобы избежать числовых проблем, сопоставленных с cosh(x)
для больших отрицательных или больших положительных входных параметров.
simscape.function.sinhm(x,maxAbsX,warn)
— Функция гиперболического синусаЭта функция возвращает гиперболический синус x
, sinh(x)
, когда x
области значений между -maxAbsX
и maxAbsX
. В противном случае это использует линейную экстраполяцию с градиентом, соответствующим за пределами.
Используйте эту функцию, чтобы избежать числовых проблем, сопоставленных с sinh(x)
для больших отрицательных или больших положительных входных параметров.
simscape.function.acosm(x,warn)
— Функция обратного косинусаЭта функция возвращает обратный косинус x
, acos(x)
, для -1≤x≤1
, 0 для
x>1
, и π для x<-1
. Это защищает от маленьких числовых вторжений в недопустимый входной диапазон для acos(x)
.
simscape.function.asinm(x,warn)
— Функция обратного синусаЭта функция возвращает обратный синус x
, asin(x)
, для -1≤x≤1
, 0 для
x>1
, и π для x<-1
. Это защищает от маленьких числовых вторжений в недопустимый входной диапазон для asin(x)
.
simscape.function.limitm(x,a,b,n,epsilon)
— Предельная функцияЭта функция возвращает x
ограниченный между xl
и xh
. Входной параметр, n
, устанавливает порядок функции сглаживания.
Аргумент epsilon
определяет запуск перехода и абсолютная погрешность функции, когда x равен любому xl
или xh
.
simscape.function.logm(x,x0,warn)
— Функция натурального логарифмаЭта функция возвращает натуральный логарифм x
, log(x)
, когда x
больше x0
. В противном случае это использует линейную экстраполяцию с градиентом, соответствующим за пределами.
Используйте эту функцию когда значение x
достигает близко к 0
в процессе моделирования. Установите x0
между 0
и 1
.
simscape.function.log10m(x,x0,warn)
— Основывайте 10 функций логарифмаЭта функция возвращает основу 10 логарифмов x
, log10(x)
, когда x
больше x0
. В противном случае это использует линейную экстраполяцию с градиентом, соответствующим за пределами.
Используйте эту функцию когда значение x
достигает близко к 0
в процессе моделирования. Установите x0
между 0
и 1
.
simscape.function.maxm(x,y,n,epsilon)
— Максимальная функцияЭта функция возвращает самый большой аргумент между x
и y
. Входной параметр, n
, устанавливает порядок функции сглаживания.
Аргумент epsilon
определяет запуск перехода и абсолютная погрешность функции, когда x равен любому y
.
simscape.function.minm(x,y,n,epsilon)
— Минимальная функцияЭта функция возвращает самый маленький аргумент между x
и y
. Входной параметр, n
, устанавливает порядок функции сглаживания.
Аргумент epsilon
определяет запуск перехода и абсолютная погрешность функции, когда x равен y
.
simscape.function.powerRational(x,y,flag,epsilon,warn)
— Функция степениФункция степени x^y
, где y
рационально, с защитой для отрицательного x
.
Если flag
аргументом является 0
, функция возвращает x^y
для
и x
≥0-(-x)^y
для
. Если x
<0flag
аргументом является 1
, примените функцию степени к simscape.function.hyp(x,epsilon)
.
Ассистент преобразования SPICE преобразует pwr(x,y)
SPICE функционируют к simscape.function.powerRational(x,y,1,0,warn)
Ассистент преобразования SPICE преобразует pwrs(x,y)
SPICE функционируют к simscape.function.powerRational(x,y,0,0,warn)
simscape.function.sign(x,ZC)
— Сигнум-функцияЭта функция возвращает знак входного параметра, x
.
Можно включить или отключить нуль, пересекающийся путем определения входного параметра ZC
к любому true
или false
.
simscape.function.sqrtm(x,flag,epsilon,warn)
— Функция квадратного корняФункция квадратного корня с защитой входного параметра.
Если flag
аргументом является 0
, эта функция возвращает sqrt(x)
для положительного x
и -sqrt(-x)
для отрицательного x
. Если flag
аргументом является 1
, примените функцию квадратного корня к simscape.function.hyp(x,epsilon)
.
simscape.function.tanm(x,flag,epsilon,x0,warn)
Функция тангенсаФункция тангенса с входной защитой.
Если flag
аргументом является 0
, эта функция возвращает касательную x
, tan(x)
, когда x
равно 2π
или -π/2
. epsilon
аргумент определяет гладкость перехода в этих точках.
Если flag
аргументом является 1
, эта функция возвращает касательную x
, tan(x)
, когда x
области значений между -x0
и x0
. В противном случае это использует линейную экстраполяцию с градиентом, соответствующим за пределами.
1/epsilon
максимальное позволенное значение выходного аргумента y
.
Ассистент преобразования распознает эти символы 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
.Для пассивных устройств, таких как конденсаторы и индукторы, чтобы ввести паразитные значения в сгенерированных файлах компонента Simscape, устанавливают параметр Specify parasitics values на Yes. Затем задайте значение параметров Inductor parasitic parallel conductance или Capacitor parasitic series resistance.
Список соединений должен быть написан в формате PSpice и быть синтаксически правильным. Ассистент преобразования не проверяет на соответствующий синтаксис PSpice.
Только подмножество языка списка соединений PSpice поддерживается. Однако неподдерживаемые команды PSpice идентифицированы наверху соответствующего файла компонента Simscape, чтобы упростить ручное преобразование.
Чтобы встроить сгенерированные компоненты Simscape в блоки Simscape, значения параметров должны соответствовать ограничениям Simscape. Например, емкость основного конденсатора и индуктивность основного индуктора должны быть ненулевыми.
Ассистент преобразования не поддерживает использование производной функции SPICE, ddt
, в вызове функции.