sultantiran 0 27 декабря, 2008 Опубликовано 27 декабря, 2008 · Жалоба Может кто подскажет, как покрасивее реализовать модель конденсатора, емкость которого изменяется по заранее известной формуле (нелинейный закон), в зависимости от приложенного напряжения к нему? В том числе и отрицательного напряжения. Интересует макромодель или subcst. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jurenja 1 27 декабря, 2008 Опубликовано 27 декабря, 2008 · Жалоба Встроенной модели такого конденсатора в PSpice нет, но можно сделать, как вы уже написали макромодель (subckt). С помощью обычной емкости и зависимых источников. Сообщите зависимость c(v), которую необходимо реализовать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Lonesome_Wolf 0 27 декабря, 2008 Опубликовано 27 декабря, 2008 · Жалоба Может кто подскажет, как покрасивее реализовать модель конденсатора, емкость которого изменяется по заранее известной формуле (нелинейный закон), в зависимости от приложенного напряжения к нему? В том числе и отрицательного напряжения. Интересует макромодель или subcst. Пользовался моделью диода, там есть возможность задать вольт-фарадную характеристику. При необходимости, используйте два встречно включенных элемента. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sultantiran 0 27 декабря, 2008 Опубликовано 27 декабря, 2008 · Жалоба Встроенной модели такого конденсатора в 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, т.е. это просто пример. Пользовался моделью диода, там есть возможность задать вольт-фарадную характеристику. При необходимости, используйте два встречно включенных элемента. По приведенной выше формуле вряд ли получиться воспользоваться таким способом... А еще и покруче будут варианты вычислений... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pmm 0 27 декабря, 2008 Опубликовано 27 декабря, 2008 · Жалоба Емкости и индуктивности, управляемые напряжением, можно моделировать в Orcad. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sultantiran 0 27 декабря, 2008 Опубликовано 27 декабря, 2008 · Жалоба Емкости и индуктивности, управляемые напряжением, можно моделировать в Orcad. Так уж завелось, что пользуюсь микрокапом... В принципе поставить Оркад есть возможность, 16 вроде. А что там за модель такая? И любой закон изменения можно вписать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pmm 0 27 декабря, 2008 Опубликовано 27 декабря, 2008 · Жалоба В библиотеке anl_misc.olb модели управляемых напряжением комплексного сопротивления и комплексной проводимости ZX и YX. Насколько сложную функцию сумеете заложить в источник управляющего напряжения, такой закон управления и будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sultantiran 0 27 декабря, 2008 Опубликовано 27 декабря, 2008 · Жалоба Либо я тормознул, либо уже путаю чего то - ведь в микрокапе емкость конденсатора можно любым выражением задавать??? т.е. вписывать туда просто свою формулу? Только вот с условиями не умеет... Вот упростил формулу, для более удобного переваривания: 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) - собственно напряжение на этом конденсаторе. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
pmm 0 27 декабря, 2008 Опубликовано 27 декабря, 2008 · Жалоба Микрокапом пользуюсь редко и такой возможности не использовал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jurenja 1 27 декабря, 2008 Опубликовано 27 декабря, 2008 · Жалоба 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 0 27 декабря, 2008 Опубликовано 27 декабря, 2008 · Жалоба Ну Вы МОЛОДЕЦ! Нет слов, чтоб выразить благодарность! При беглом взгляде - графики те!!! Спасибо, я в синтаксисе спайса не особо силен, вот и парюсь :-) Емкость только в нФ должна была получиться, но это уже мелочи :-) А вот на ЗЫ и ЗЫ2 можно поподробней? Можно схему в виде картинки, в которой Вы это реализовали? Это ведь Оркад у Вас? У меня просто его нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jurenja 1 28 декабря, 2008 Опубликовано 28 декабря, 2008 (изменено) · Жалоба Ну Вы МОЛОДЕЦ! Нет слов, чтоб выразить благодарность! При беглом взгляде - графики те!!! Спасибо, я в синтаксисе спайса не особо силен, вот и парюсь :-) Емкость только в нФ должна была получиться, но это уже мелочи :-) А вот на ЗЫ и ЗЫ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: если можно будет сделать полином более высокого порядка и без разрывов на поддиапазоны, то у макромодели не будет всплесков и макромодель будет проще. Изменено 28 декабря, 2008 пользователем Jurenja Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sultantiran 0 28 декабря, 2008 Опубликовано 28 декабря, 2008 · Жалоба Моделька вроде не ругается, но никак не могу получить такой же график, как у Вас. Что в Дизайнлабе подразумевается под MAX(I(Epin))/(2*pi*1Meg) и vpin? В тексте модели не могу найти Epin и vpin. Есть источник E_pin и вывод pin. Поясните плиз. И если можно, расшифруйте синтаксис для ИТУТ Н1_Icap. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jurenja 1 28 декабря, 2008 Опубликовано 28 декабря, 2008 · Жалоба Моделька вроде не ругается, но никак не могу получить такой же график, как у Вас. Что в Дизайнлабе подразумевается под 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)} Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sultantiran 0 29 декабря, 2008 Опубликовано 29 декабря, 2008 · Жалоба Спасибо за подробный ликбез! Буду изучать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться