Перейти к содержанию
    

PSpice модель конденсатора, емкость которого зависит от напряженяи на нем

Может кто подскажет, как покрасивее реализовать модель конденсатора, емкость которого изменяется по заранее известной формуле (нелинейный закон), в зависимости от приложенного напряжения к нему? В том числе и отрицательного напряжения. Интересует макромодель или subcst.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Встроенной модели такого конденсатора в PSpice нет, но можно сделать, как вы уже написали макромодель (subckt). С помощью обычной емкости и зависимых источников. Сообщите зависимость c(v), которую необходимо реализовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может кто подскажет, как покрасивее реализовать модель конденсатора, емкость которого изменяется по заранее известной формуле (нелинейный закон), в зависимости от приложенного напряжения к нему? В том числе и отрицательного напряжения. Интересует макромодель или subcst.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Встроенной модели такого конденсатора в 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, т.е. это просто пример.

 

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

 

По приведенной выше формуле вряд ли получиться воспользоваться таким способом... А еще и покруче будут варианты вычислений...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Емкости и индуктивности, управляемые напряжением, можно моделировать в Orcad.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Емкости и индуктивности, управляемые напряжением, можно моделировать в Orcad.

Так уж завелось, что пользуюсь микрокапом... В принципе поставить Оркад есть возможность, 16 вроде. А что там за модель такая? И любой закон изменения можно вписать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В библиотеке anl_misc.olb модели управляемых напряжением комплексного сопротивления и комплексной проводимости ZX и YX. Насколько сложную функцию сумеете заложить в источник управляющего напряжения, такой закон управления и будет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Либо я тормознул, либо уже путаю чего то - ведь в микрокапе емкость конденсатора можно любым выражением задавать??? т.е. вписывать туда просто свою формулу?

 

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

 

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

 

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) - собственно напряжение на этом конденсаторе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Микрокапом пользуюсь редко и такой возможности не использовал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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" то функцию можно сделать гладкой.

 

 

Только вот с условиями не умеет...
да, переходов по условию нету к сожалению...

post-28262-1230404988_thumb.jpg

post-28262-1230405022_thumb.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну Вы МОЛОДЕЦ! Нет слов, чтоб выразить благодарность! При беглом взгляде - графики те!!! Спасибо, я в синтаксисе спайса не особо силен, вот и парюсь :-)

 

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

 

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

 

Можно схему в виде картинки, в которой Вы это реализовали? Это ведь Оркад у Вас? У меня просто его нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну Вы МОЛОДЕЦ! Нет слов, чтоб выразить благодарность! При беглом взгляде - графики те!!! Спасибо, я в синтаксисе спайса не особо силен, вот и парюсь :-)

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

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

Можно схему в виде картинки, в которой Вы это реализовали? Это ведь Оркад у Вас? У меня просто его нет.

да, емкость д.б. в нФ, значения полинома были порядка 1e-9...

В макромодели одна строчка неправильная, найдите строчку "H_Icap Icap 0 Vsensor 1Meg" и замените ее на "H_Icap Icap 0 Vsensor 1e9" и будут нанофарады.

OrCAD у меня есть, но использовал не его, а MicroSim DesignLab, но это не принципиально. Вообще-то это должно работать в любом Spice-подобном симуляторе. Тот текст, который жирным шрифтом, скопируйте в любой текстовый редактор и сохраните в виде файла. А потом в своем симуляторе подключить его в качестве модели к символу с двумя выводами, только полярность напряжения д.б. правильной.

Схемы нету, вернее есть фрагменты на листке бумаги. Модель писал сразу именно в таком тесктовом виде, это не трансляция из графической схемы. Попробуйте нарисовать ее сами - специально писал комментарии. Если все таки не получится, то нарисую :)

 

про ЗЫ (конденсатор с моделью):

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: если можно будет сделать полином более высокого порядка и без разрывов на поддиапазоны, то у макромодели не будет всплесков и макромодель будет проще.

post-28262-1230471947_thumb.jpg

Изменено пользователем Jurenja

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Моделька вроде не ругается, но никак не могу получить такой же график, как у Вас. Что в Дизайнлабе подразумевается под 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).

Вам совсем необязательно повторять один-в-одим мое моделирование, вы можете потестировать емкость любым другим понятным вам способом :)

 

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)}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...