Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PSpice модель конденсатора, емкость которого зависит от напряженяи на нем
Форум разработчиков электроники ELECTRONIX.ru > Силовая Электроника - Power Electronics > Моделирование и Анализ Силовых Устройств – Power Supply Simulation
sultantiran
Может кто подскажет, как покрасивее реализовать модель конденсатора, емкость которого изменяется по заранее известной формуле (нелинейный закон), в зависимости от приложенного напряжения к нему? В том числе и отрицательного напряжения. Интересует макромодель или subcst.
Jurenja
Встроенной модели такого конденсатора в PSpice нет, но можно сделать, как вы уже написали макромодель (subckt). С помощью обычной емкости и зависимых источников. Сообщите зависимость c(v), которую необходимо реализовать.
Lonesome Wolf
Цитата(sultantiran @ Dec 27 2008, 13:02) *
Может кто подскажет, как покрасивее реализовать модель конденсатора, емкость которого изменяется по заранее известной формуле (нелинейный закон), в зависимости от приложенного напряжения к нему? В том числе и отрицательного напряжения. Интересует макромодель или subcst.


Пользовался моделью диода, там есть возможность задать вольт-фарадную характеристику. При необходимости, используйте два встречно включенных элемента.
sultantiran
Цитата(Jurenja @ Dec 27 2008, 14:54) *
Встроенной модели такого конденсатора в PSpice нет, но можно сделать, как вы уже написали макромодель (subckt). С помощью обычной емкости и зависимых источников. Сообщите зависимость c(v), которую необходимо реализовать.

if (x<3) { p1=0.000000000029209 p2=-0.000000000032376 p3=-0.000000000302083 p4=0.00000000155; p5=1; }
else if (x<9) { p1=-0.000000000001668 p2=0.000000000016579 p3=-0.000000000081081 p4=0.00000000105; p5=3; }
else if (x<13) { p1=0.00000000000823 p2=-0.000000000044843 p3=-0.000000000062311 p4=0.0000000008; p5=9; }
else if (x<20) { p1=-0.000000000000087 p2=0.000000000002389 p3=-0.000000000026007 p4=0.00000000036; p5=13; }
else if (x<50) { p1=0 p2=0.000000000000078 p3=-0.000000000005424 p4=0.000000000265; p5=20; }

x = x-p5;
y=p4+x*(p3+x*(p2+x*p1));

Ну это я так, для примера выложил. Емкости все разные, с разными формулами. Интересует вид (описание) модели, а уж в источник тока или напряжения (или еще какой :-)), т.е. куда надо - туда и впишу. Да, эта формула не описывает поведение емкости ниже 0 (отрицательные) и выше 50, т.е. это просто пример.

Цитата(Lonesome Wolf @ Dec 27 2008, 14:55) *
Пользовался моделью диода, там есть возможность задать вольт-фарадную характеристику. При необходимости, используйте два встречно включенных элемента.


По приведенной выше формуле вряд ли получиться воспользоваться таким способом... А еще и покруче будут варианты вычислений...
Пушкарев Михаил
Емкости и индуктивности, управляемые напряжением, можно моделировать в Orcad.
sultantiran
Цитата(Пушкарев Михаил @ Dec 27 2008, 16:26) *
Емкости и индуктивности, управляемые напряжением, можно моделировать в Orcad.

Так уж завелось, что пользуюсь микрокапом... В принципе поставить Оркад есть возможность, 16 вроде. А что там за модель такая? И любой закон изменения можно вписать?
Пушкарев Михаил
В библиотеке anl_misc.olb модели управляемых напряжением комплексного сопротивления и комплексной проводимости ZX и YX. Насколько сложную функцию сумеете заложить в источник управляющего напряжения, такой закон управления и будет.
sultantiran
Либо я тормознул, либо уже путаю чего то - ведь в микрокапе емкость конденсатора можно любым выражением задавать??? т.е. вписывать туда просто свою формулу?

Только вот с условиями не умеет...

Вот упростил формулу, для более удобного переваривания:

if (V(C1)<3) 1.55E-09+(V(C1)-1)*(-3.02083E-10+(V(C1)-1)*(-3.2376E-11+(V(C1)-1)*2.9209E-11))
else if (V(C1)<9) 1.05E-09+(V(C1)-3)*(-8.1081E-11+(V(C1)-3)*(1.6579E-11+(V(C1)-3)*-1.668E-12))
else if (V(C1)<13) 8E-10+(V(C1)-9)*(-6.2311E-11+(V(C1)-9)*(-4.4843E-11+(V(C1)-9)*8.23E-12))
else if (V(C1)<20) 3.6E-10+(V(C1)-13)*(-2.6007E-11+(V(C1)-13)*(2.389E-12+(V(C1)-13)*-8.7E-14))
else if (V(C1)<50) 2.65E-10+(V(C1)-20)*(-5.424E-12+(V(C1)-20)*(7.8E-14+(V(C1)-20)*0))

где V(C1) - собственно напряжение на этом конденсаторе.
Пушкарев Михаил
Микрокапом пользуюсь редко и такой возможности не использовал.
Jurenja
Цитата(sultantiran @ Dec 27 2008, 15:19) *
if (x<3) { p1=0.000000000029209 p2=-0.000000000032376 p3=-0.000000000302083 p4=0.00000000155; p5=1; }
else if (x<9) { p1=-0.000000000001668 p2=0.000000000016579 p3=-0.000000000081081 p4=0.00000000105; p5=3; }
else if (x<13) { p1=0.00000000000823 p2=-0.000000000044843 p3=-0.000000000062311 p4=0.0000000008; p5=9; }
else if (x<20) { p1=-0.000000000000087 p2=0.000000000002389 p3=-0.000000000026007 p4=0.00000000036; p5=13; }
else if (x<50) { p1=0 p2=0.000000000000078 p3=-0.000000000005424 p4=0.000000000265; p5=20; }
x = x-p5;
y=p4+x*(p3+x*(p2+x*p1));

Ну это я так, для примера выложил...
Что-то вот такое получилось, походу старался писать комментарии:...
.subckt Cnl pin1 pin2
*
* p1...p5 polynomes value tables
e_p1 p1 0 TABLE {v(pin1,pin2)}
+ -100, 0.000000000029209
+ 2.9999, 0.000000000029209
+ 3.0001, -0.000000000001668
+ 8.9999, -0.000000000001668
+ 9.0001, 0.00000000000823
+ 12.9999, 0.00000000000823
+ 13.0001, -0.000000000000087
+ 19.9999, -0.000000000000087
+ 20.0001, 0
e_p2 p2 0 TABLE {v(pin1,pin2)}
+ -100, -0.000000000032376
+ 2.9999, -0.000000000032376
+ 3.0001, 0.000000000016579
+ 8.9999, 0.000000000016579
+ 9.0001, -0.000000000044843
+ 12.9999, -0.000000000044843
+ 13.0001, 0.000000000002389
+ 19.9999, 0.000000000002389
+ 20.0001, 0.000000000000078
e_p3 p3 0 TABLE {v(pin1,pin2)}
+ -100, -0.000000000302083
+ 2.9999, -0.000000000302083
+ 3.0001, -0.000000000081081
+ 8.9999, -0.000000000081081
+ 9.0001, -0.000000000062311
+ 12.9999, -0.000000000062311
+ 13.0001, -0.000000000026007
+ 19.9999, -0.000000000026007
+ 20.0001, -0.000000000005424
e_p4 p4 0 TABLE {v(pin1,pin2)}
+ -100, 0.00000000155
+ 2.9999, 0.00000000155
+ 3.0001, 0.00000000105
+ 8.9999, 0.00000000105
+ 9.0001, 0.0000000008
+ 12.9999, 0.0000000008
+ 13.0001, 0.00000000036
+ 19.9999, 0.00000000036
+ 20.0001, 0.000000000265
e_p5 p5 0 TABLE {v(pin1,pin2)}
+ -100, 1
+ 2.9999, 1
+ 3.0001, 3
+ 8.9999, 3
+ 9.0001, 9
+ 12.9999, 9
+ 13.0001, 13
+ 19.9999, 13
+ 20.0001, 20
*
* "x = x-p5" expression
e_Xshift Xshift 0 value={v(pin1,pin2)-v(p5)}
*
* "y=p4+x*(p3+x*(p2+x*p1))" expression, c(v) function
e_Cfactor Cfactor 0
+ value={v(p4)+v(Xshift)*(v(p3)+v(Xshift)*(v(p2)+v(Xshift)*v(p1)))}
*
* Ideal analog buffer for voltage of external pins
E_pin pin 0 value={v(pin1,pin2)}
*
* Voltage source (zero value) is sensor of current
Vsensor pin Vsens 0V
*
* Reference Capacitor for current measure
C_ref Vsens 0 1nF
*
* Icap Voltage value node is equal current of C_ref
* 1Meg factor is equal 1/1nF
H_Icap Icap 0 Vsensor 1Meg
*
* Output current for simulate nonlinear capacitor.
G_out pin1 pin2 value={v(Icap)*v(Cfactor)}
*
.ends Cnl


В точках "стыковки" (3, 9, 13 и 20) в области +-0.0001 есть "всплески" результирующей функции. Это скорее всего из-за конструкции "x = x-p5" и из-за того, что PSpice не "умеет" обрабатывать конструкции "IF" и пришлось сделать кусочно-линейные аппроксимации коэффициентов полинома на заданном интервале.
На картинке c(v).png "всплески" выглядят более широкими из-за того, что шаг моделирования равен 0.2.
На картинке c(v)_without_spikes.png "всплески" отсунствуют, т.к. расчетные точки не попадают в точки "стыковки".

ЗЫ. Посмотрел еще раз встроенную модель конденсатора, в ней возможно задать нелинейность (полином) 2-го порядка с помощью параметров VC1 и VC2. В результате емкость будет умножаться на полином 1+VC1*V+VC2*V**2.

ЗЫ2. Макромодель можно сделать через полином намного большего порядка, поэтому если избавиться от "IF" то функцию можно сделать гладкой.


Цитата(sultantiran @ Dec 27 2008, 16:05) *
Только вот с условиями не умеет...
да, переходов по условию нету к сожалению...
sultantiran
Ну Вы МОЛОДЕЦ! Нет слов, чтоб выразить благодарность! При беглом взгляде - графики те!!! Спасибо, я в синтаксисе спайса не особо силен, вот и парюсь :-)

Емкость только в нФ должна была получиться, но это уже мелочи :-)

А вот на ЗЫ и ЗЫ2 можно поподробней?

Можно схему в виде картинки, в которой Вы это реализовали? Это ведь Оркад у Вас? У меня просто его нет.
Jurenja
Цитата(sultantiran @ Dec 27 2008, 22:52) *
Ну Вы МОЛОДЕЦ! Нет слов, чтоб выразить благодарность! При беглом взгляде - графики те!!! Спасибо, я в синтаксисе спайса не особо силен, вот и парюсь :-)
Емкость только в нФ должна была получиться, но это уже мелочи :-)
А вот на ЗЫ и ЗЫ2 можно поподробней?
Можно схему в виде картинки, в которой Вы это реализовали? Это ведь Оркад у Вас? У меня просто его нет.
да, емкость д.б. в нФ, значения полинома были порядка 1e-9...
В макромодели одна строчка неправильная, найдите строчку "H_Icap Icap 0 Vsensor 1Meg" и замените ее на "H_Icap Icap 0 Vsensor 1e9" и будут нанофарады.
OrCAD у меня есть, но использовал не его, а MicroSim DesignLab, но это не принципиально. Вообще-то это должно работать в любом Spice-подобном симуляторе. Тот текст, который жирным шрифтом, скопируйте в любой текстовый редактор и сохраните в виде файла. А потом в своем симуляторе подключить его в качестве модели к символу с двумя выводами, только полярность напряжения д.б. правильной.
Схемы нету, вернее есть фрагменты на листке бумаги. Модель писал сразу именно в таком тесктовом виде, это не трансляция из графической схемы. Попробуйте нарисовать ее сами - специально писал комментарии. Если все таки не получится, то нарисую smile.gif

про ЗЫ (конденсатор с моделью):
CFDBCK 3 33 <model name> 10pF
.MODEL <model name> CAP [model parameters]
-------------------------------------------------
Model Parameters, Description, Units, Default
-------------------------------------------------
C, capacitance multiplier, -, 1.0
TC1, linear temperature coefficient, 1/°C, 0.0
TC2, quadratic temperature coefficient, 1/°C**2, 0.0
T_ABS, absolute temperature, °C, -
T_MEASURED, measured temperature, °C, -
T_REL_GLOBAL, relative to current temperature, °C, -
T_REL_LOCAL, relative to AKO model temperature, °C, -
VC1, linear voltage coefficient, 1/volt, 0.0
VC2, quadratic voltage coefficient, 1/volt**2, 0.0

про ЗЫ2: если можно будет сделать полином более высокого порядка и без разрывов на поддиапазоны, то у макромодели не будет всплесков и макромодель будет проще.
sultantiran
Моделька вроде не ругается, но никак не могу получить такой же график, как у Вас. Что в Дизайнлабе подразумевается под MAX(I(Epin))/(2*pi*1Meg) и vpin? В тексте модели не могу найти Epin и vpin. Есть источник E_pin и вывод pin. Поясните плиз. И если можно, расшифруйте синтаксис для ИТУТ Н1_Icap.
Jurenja
Цитата(sultantiran @ Dec 28 2008, 20:26) *
Моделька вроде не ругается, но никак не могу получить такой же график, как у Вас. Что в Дизайнлабе подразумевается под MAX(I(Epin))/(2*pi*1Meg) и vpin? В тексте модели не могу найти Epin и vpin. Есть источник E_pin и вывод pin. Поясните плиз. И если можно, расшифруйте синтаксис для ИТУТ Н1_Icap.
ниже полный нетлист для моделирования, в нем все, что не нашлось:

Circuit : CNL_T
*
* ***********************************************************
* * *
* * NX-SPICE Version 1.31B *
* * Copyright © 1983,1986 - Personal CAD Systems, Inc. *
* * *
* * File In : CNL_T.NLT *
* * File Out : CNL_T.SPI *
* * Log File : NXSPICE.LOG *
* * *
* ***********************************************************
*
*
.WIDTH IN=80 OUT=132
*
*
* ELEMENTS
*
*
X_TRAN OUT 0 CNL
X PIN 0 CNL
R_TRAN IN OUT 1K
*
* Top File Cnl_t.add
.Options Itl5=0 Vntol=200mV Abstol=20uA
+ NoPage Node Acct
*.Incl d:\pcad\SymPrt1l\add\W_L.mod
*
.Probe
*
* v_GND $g_GND 0
* Vcc $g_GND $g_Vcc -5
.Lib d:\pcad\SymPrt1l\add\S_Analog.lib
.lib d:\pcad\SymPrt1l\add\BSIM3v2.mod
*
V_in In 0 pwl 0ns 50v 10ps 0v
Cout Out 0 1fF ; very small
*
Epin pin V_ACsource value={Vpin}
V_ACsource V_ACsource 0 AC=1
*
.subckt Cnl pin1 pin2
*
* p1...p5 polynomes value tables
e_p1 p1 0 TABLE {v(pin1,pin2)}
+ -100, 0.000000000029209
+ 2.9999, 0.000000000029209
+ 3.0001, -0.000000000001668
+ 8.9999, -0.000000000001668
+ 9.0001, 0.00000000000823
+ 12.9999, 0.00000000000823
+ 13.0001, -0.000000000000087
+ 19.9999, -0.000000000000087
+ 20.0001, 0
e_p2 p2 0 TABLE {v(pin1,pin2)}
+ -100, -0.000000000032376
+ 2.9999, -0.000000000032376
+ 3.0001, 0.000000000016579
+ 8.9999, 0.000000000016579
+ 9.0001, -0.000000000044843
+ 12.9999, -0.000000000044843
+ 13.0001, 0.000000000002389
+ 19.9999, 0.000000000002389
+ 20.0001, 0.000000000000078
e_p3 p3 0 TABLE {v(pin1,pin2)}
+ -100, -0.000000000302083
+ 2.9999, -0.000000000302083
+ 3.0001, -0.000000000081081
+ 8.9999, -0.000000000081081
+ 9.0001, -0.000000000062311
+ 12.9999, -0.000000000062311
+ 13.0001, -0.000000000026007
+ 19.9999, -0.000000000026007
+ 20.0001, -0.000000000005424
e_p4 p4 0 TABLE {v(pin1,pin2)}
+ -100, 0.00000000155
+ 2.9999, 0.00000000155
+ 3.0001, 0.00000000105
+ 8.9999, 0.00000000105
+ 9.0001, 0.0000000008
+ 12.9999, 0.0000000008
+ 13.0001, 0.00000000036
+ 19.9999, 0.00000000036
+ 20.0001, 0.000000000265
e_p5 p5 0 TABLE {v(pin1,pin2)}
+ -100, 1
+ 2.9999, 1
+ 3.0001, 3
+ 8.9999, 3
+ 9.0001, 9
+ 12.9999, 9
+ 13.0001, 13
+ 19.9999, 13
+ 20.0001, 20
*
* "x = x-p5" expression
e_Xshift Xshift 0 value={v(pin1,pin2)-v(p5)}
*
* "y=p4+x*(p3+x*(p2+x*p1))" expression, c(v) function
e_Cfactor Cfactor 0
+ value={v(p4)+v(Xshift)*(v(p3)+v(Xshift)*(v(p2)+v(Xshift)*v(p1)))}
*
* Ideal analog buffer for voltage of external pins
E_pin pin 0 value={v(pin1,pin2)}
*
* Voltage source (zero value) is sensor of current
Vsensor pin Vsens 0V
*
* Reference Capacitor for current measure
C_ref Vsens 0 1nF
*
* Icap Voltage value node is equal current of C_ref
* 1e9 factor is equal 1/1nF
H_Icap Icap 0 Vsensor 1e9
*
* Output current for simulate nonlinear capacitor.
G_out pin1 pin2 value={v(Icap)*v(Cfactor)}
*
.ends Cnl

.Param Vpin=0v
.Step Param Vpin 0.1V 50V 0.2V
.AC lin 100 999kHz 1MegHz
*
*.DC V_ACsource -1V 51V 1mV
*
*.tran 5ns 10ns 0ns 50ps
*
* End File Cnl_t.add
*
*
*
.END


Проводится АС анализ, он проводится много раз (инструкция .Step) при этом напряжение на емкости меняется от 0 до 50 В.
MAX(I(Epin))/(2*pi*1Meg) - это для программы Microsim Probe формула расчета емкости C=I/(2*pi*F), MAX(I(Epin)) - это значение тока через емкость при частоте 1 МГц, т.к. AC анализ проводится в диапазоне 999кГц-1МГц и максимум тока для емкости будет на частоте 1МГц. При параметрическом анализе расчет проводится много раз, в результате получаем график c(v).
Попробуйте запустить на моделирование нетлист, который выше, затем загрузите результаты (.dat файл) в Microsim Probe, затем в Microsim Probe нужно на панели нажать кнопочку Performance Analysis, а только после этого выводить кривую MAX(I(Epin))/(2*pi*1Meg).
Вам совсем необязательно повторять один-в-одим мое моделирование, вы можете потестировать емкость любым другим понятным вам способом smile.gif

H_Icap это ИНУТ (ист. напряжения, управляемый током)
Строка H_Icap Icap 0 Vsensor 1e9 означает что напряжение в узле Icap численно равно току через источник Vsensor, умноженному на 1e9. Т.к. ток через источник Vsensor получается подачей внешнего напряжения на емкость 1нФ (1e-9), то напряжение в узле Icap соответствует току через емкость 1e9*1нФ=1Ф. Зачем этот ток умножается на полином и выдается во внешнюю цепь: G_out pin1 pin2 value={v(Icap)*v(Cfactor)}
sultantiran
Спасибо за подробный ликбез! Буду изучать.
Jurenja
Цитата(sultantiran @ Dec 29 2008, 22:32) *
Спасибо за подробный ликбез! Буду изучать.
В обшем то в ДизайнЛабе про формат нетлиста PSpice все подробно расписано в документе "PSpice A/D Reference Manual" (это файл [Дизайн_Лаб]\Doc\Pspcref.pdf, смотреть раздел "Analog Devices"). А чтобы было быстрее, задавайте поросы - буду рассказывать
Lonesome Wolf
Вообще-то, использование слова PSpice подразумевает работу в среде от Cadence. Как я уже отмечал, в этом случае, имеется возможность табличного задания вольт-фарадной характеристики - 25 значений по умолчанию. Так как напряжения могут быть только положительными, то задача может быть решена путем задания прямой ветви характеристики диода в виде, близком к идеальному проводнику и включению двух таких устройств последовательно.
Jurenja
Цитата(Lonesome Wolf @ Dec 30 2008, 10:34) *
Вообще-то, использование слова PSpice подразумевает работу в среде от Cadence...
Вообще-то слово PSpice появилось еще во времена PC/XT / PC/AT и по сути означало "Spice для персоналок". Намного позже этот симулятор (но уже улучшенный) появился в составе Микросим ДизайнЛаб, который затем был перетянут в OrCAD, который, в свою очередь, продался Кэденсу.

ЗЫ. Насколько я понял топикстартера, Кэденса для "взрослых", а именно пакетов типа IC_*, MMSIM_* итд, у него нет.
Lonesome Wolf
Цитата(Jurenja @ Dec 30 2008, 11:00) *
Вообще-то слово PSpice появилось еще во времена PC/XT / PC/AT и по сути означало "Spice для персоналок". Намного позже этот симулятор (но уже улучшенный) появился в составе Микросим ДизайнЛаб, который затем был перетянут в OrCAD, который, в свою очередь, продался Кэденсу.

ЗЫ. Насколько я понял топикстартера, Кэденса для "взрослых", а именно пакетов типа IC_*, MMSIM_* итд, у него нет.


Wiki - там все написано smile.gif. Ну, или почти все.
Jurenja
Цитата(Lonesome Wolf @ Dec 30 2008, 11:08) *
Wiki - там все написано smile.gif. Ну, или почти все.
тоже нашел про это на Вики, собрался дописать ссылку, но вы опередили beer.gif

ЗЫ. когда-то в далеком 1988-м начинал моделировать еще на ДОС-версии, никакого графического окна схематика, все набиралось в текстовом виде, имена узлов могли быть _только_ числами...
Позже к нему для рисования схем был прикручен PCAD 4.5...

ЗЫ. извинения за небольшой оффтоп...
AML
Вот один из возможных принципов построения нелинейной емкости в Micro-Cap

(автору уже отвечал на другом форуме, решил и тут продублировать)
Расчетная формула упрощена и служит лишь для демонстрации принципа. RC-цепь после источника не обязательная, служит для улучшения сходимости.
sultantiran
Да, от себя замечу - такой вариант реализации считается намного быстрей :-) Всех с новым годом!!! Спасибо за советы! И кстати запись типа V(C1)>=3 то же работает отлично. В общем у меня все получилось! Еще раз спасибо!
rudy_b
А задачка-то оказалась интересной! Посмотрел в OrCAD 9.3 и 15.7 и в PSpice AD и в в PSpice AD Basic. Стандартная модель CAP в которой (по всем описаниям) есть линейный и квадратичный множители напряжения - не работает! При попытке ею воспользоваться - дает ошибку VC2 (квадратичный коэффициент) не определен.
Попытка заставить вычислить емкость через задание выражения в фигурных скобках не проходит! Т.е. когда задаешь любое константное выражение типа 5*2.4 - все нормально, но как только в выражении появляется напряжение - дает ошибку. Причем расшифровывает выражение совершенно правильно и подставляет правильное напряжение.

Похоже у них что-то специально сделано. При изменении емкости возникают проблемы с энергией и они что-то заблокировали.

Похоже единственный способ реализовать переменную параметрическую емкость - это использование GVALUE из библиотеки abm со специальной функцией DDT(V(1,2)*V(A1,A2)). Это немного описано на http://www.orcad.com/community.pspice.faq.aspx .
Т.е. вместо емкости вставляется элемент GVALUE, как показано на рисунке с EQUATION что-то вроде 1e-9*( 1+1e-12*ABS(V(%IN+, %IN-))+1e-12*V(%IN+, %IN-)*V(%IN+, %IN-))*DDT(V(%IN+, %IN-)). Здесь 1e-9 - величина емкости (1нФ), выражение в скобках ( 1+1e-12*ABS(V(%IN+, %IN-))+1e-12*V(%IN+, %IN-)*V(%IN+, %IN-)) - зависимость емкости от приложенного напряжения (линейный и квадратичный коэффициенты 1е-12 - взял с потолка), DDT(V(%IN+, %IN-)) - некая функция, имитирующая емкость.
Вроде работает нормально.
Кстати на http://www.orcad.com/community.pspice.faq.aspx можно найти много интересного.
Jurenja
Цитата(rudy_b @ Jan 5 2009, 17:12) *
... Посмотрел в OrCAD 9.3 и 15.7 и в PSpice AD и в в PSpice AD Basic. Стандартная модель CAP в которой (по всем описаниям) есть линейный и квадратичный множители напряжения - не работает! При попытке ею воспользоваться - дает ошибку VC2 (квадратичный коэффициент) не определен.
Не знал, что параметр VC2 в модели емкости не работает, хоть и советовал... sad.gif
А поведенческая модель работать будет smile.gif
SSerge
Цитата(rudy_b @ Jan 5 2009, 21:12) *
Стандартная модель CAP в которой (по всем описаниям) есть линейный и квадратичный множители напряжения - не работает!

Хм, сейчас проверил, у меня работает (в 15.7). Да и, помнится, в V9.2 нужна была зависимость от температуры - так и там всё работало.
Только темплейт надо правильно нарисовать, готового компонента в библиотеке сходу не нашлось, а стандартный только TOLERANCE позволяет моделировать.
PSpiceTemplate =
C^@REFDES %1 %2 CMOD^@REFDES @VALUE \n.MODEL CMOD^@REFDES CAP VC1=@VC1 VC2=@VC2 TC1=@TC1 TC2=@TC2
и, разумеется, определить properties с именами VC1, VC2, TC1, TC2.
Тут фокус в том, что коэффициенты нужно в описании модели конденсатора указывать.
rudy_b
Возможно, если прописать их ручками и именно в template. Я баловался с библиотекой и пробовал и прямо в модели и через AKO - не проходит - говорит, что параметр VC2 не определен. А с С и VC1 - все в порядке.

Как-то странно, SSerge, а вы в модели пробовали?. Т.е. подставить в тексте не значение ...1e-9, а именно ссылку на модель, основанную на CAP (VC2=...). Может я где-то что-то недопонимаю.
SSerge
Цитата(rudy_b @ Jan 6 2009, 07:50) *
Как-то странно, SSerge, а вы в модели пробовали?. Т.е. подставить в тексте не значение ...1e-9, а именно ссылку на модель, основанную на CAP (VC2=...). Может я где-то что-то недопонимаю.

Похоже, это одно из отличий Оркадовского PSPICE от родоначальника, Berkeley SPICE.
В pspcref.pdf пишут:
4. Voltage coefficients for capacitors, and current coefficients for inductors must be put into
a .MODEL (model definition) statement instead of on the device statement.

При том темплейте, что в моём предыдущем сообщении так и получается, порождается две строки типа:
C_C1 N11586 N11512 CMOD_C1 1
.MODEL CMOD_C1 CAP VC1=0.1 VC2=0 TC1=0 TC2=0.1

Просто отдельно сделанная .MODEL с коэффициентами и ссылки на неё для нескольких конденсаторов тоже работает.
Что интересно, на строку в .net типа C_C1 N11586 N11512 1uF TC=0.1
не ругается, но и никакой зависимости от температуры или напряжения не проявляется. Атавизм (с).

Пару раз при нереально больших VC1 и VC2 крепко задумывался, начинал сильно мельчить шаг по времени, но до convergence problems дело не дошло.
Jurenja
Цитата(SSerge @ Jan 6 2009, 09:01) *
При том темплейте, что в моём предыдущем сообщении так и получается, порождается две строки типа:
C_C1 N11586 N11512 CMOD_C1 1
.MODEL CMOD_C1 CAP VC1=0.1 VC2=0 TC1=0 TC2=0.1
...
Что интересно, на строку в .net типа C_C1 N11586 N11512 1uF TC=0.1
не ругается, но и никакой зависимости от температуры или напряжения не проявляется. Атавизм (с).
...
не проверял, поверил rudy_b на слово... unsure.gif
Все-таки она работает smile.gif и документация на Микросим ДизайнЛаб правильная smile.gif
rudy_b
А у меня такой текст в библиотеке .lib
* CUVAR model
.SUBCKT CUVAR 1 2
CN1 1 2 CMYMOD 0.1
.MODEL CMYMOD CAP (C=1 VC1=0 VC2=0)
.ENDS CUVAR

странслированный в .olb при выполнении порождает

**** INCLUDING test6-C_TEST.net ****
* source TEST6
V_V1 N00337 0
+PWL 0 0 1e-3 100
X_U30 N02114 N00337 CUVAR
R_R1 0 N02114 1

**** RESUMING test6-c_test-ct.sim.cir ****
.END
ERROR -- Undefined parameter: VC2

Что я делаю неправильно?
Jurenja
Цитата(rudy_b @ Jan 6 2009, 14:07) *
...
Что я делаю неправильно?
не знаю... 05.gif

Микросим Дизайнлаб не ругается (в ваш нетлист добавил расчет рабочей точки .OP и строчку .Options nopage library):

**** 01/06/109 14:37:23 ****** NT PSpice 8.0 (July 1997) ****** ID# 305419896

**** test ****

**** CIRCUIT DESCRIPTION

******************************************************************************

.Options nopage library

V_V1 N00337 0
+PWL 0 0 1e-3 100

X_U30 N02114 N00337 CUVAR
R_R1 0 N02114 1

.SUBCKT CUVAR 1 2
CN1 1 2 CMYMOD 0.1
.MODEL CMYMOD CAP (C=1 VC1=1m VC2=1u)
.ENDS CUVAR

.OP

.END

**** Capacitor MODEL PARAMETERS

X_U30.CMYMOD
C 1
VC1 1.000000E-03
VC2 1.000000E-06

**** SMALL SIGNAL BIAS SOLUTION TEMPERATURE = 27.000 DEG C

NODE VOLTAGE NODE VOLTAGE NODE VOLTAGE NODE VOLTAGE

(N00337) 0.0000 (N02114) 0.0000

VOLTAGE SOURCE CURRENTS
NAME CURRENT

V_V1 0.000E+00

TOTAL POWER DISSIPATION 0.00E+00 WATTS

**** OPERATING POINT INFORMATION TEMPERATURE = 27.000 DEG C

JOB CONCLUDED

TOTAL JOB TIME 0.00

ЗЫ для наглядности сделал VC1 и VC2 ненулевыми. При нулевых значениях тоже моделирует,
только в разделе
**** Capacitor MODEL PARAMETERS
нулевые значения VC1 и VC2 не показывает.
ЗЫ2. Для улучшения читабельности удалил некоторые пустые строки.
rudy_b
Самое интересное, что если прописать то же самое в template, как подсказал SSerge, все действительно работает замечательно.
Т.е. такая пропись в template есть оптимальное решение исходной задачи.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.