Электроника:Справочные материалы/Использование программы SPICE для моделирования электрических схем/Странные особенности программы SPICE: различия между версиями

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
(Новая страница: «{{Панель управления/Электроника}} {{Перевод от valemak}} {{Myagkij-редактор}} =Странные особенности программы SPICE<ref>[https://www.allaboutcircuits.com/textbook/reference/chpt-7/spice-quirks/ www.allaboutcircuits.com - SPICE Quirks]</ref>= {{Цитата|Мусор на входе, мусор на выходе.|Аноним}} SPICE – очень надёжная программа,...»)
 
Нет описания правки
Строка 7: Строка 7:
{{Цитата|Мусор на входе, мусор на выходе.|Аноним}}
{{Цитата|Мусор на входе, мусор на выходе.|Аноним}}


SPICE – очень надёжная программа, но у неё есть свои маленькие ''странности'', с которыми придётся свыкнуться. Под «странностью» я подразумеваю требование к пользователю написать исходный файл определённым образом, чтобы он работал без сообщений об ошибках.
[[SPICE]] – очень надёжная [[программа]], но у неё есть свои маленькие ''странности'', с которыми придётся свыкнуться. Под «странностью» я подразумеваю требование к пользователю написать [[исходный файл]] определённым образом, чтобы он работал без сообщений об ошибках.


Я сейчас толкую не про какие-либо баги в SPICE, могущие привести к ошибочным или вводящим в заблуждение результатам: их правильнее называть «ошибками». Раз уж речь зашла об ошибках (багах), то отметим, что программа SPICE также их не лишена.
Я сейчас толкую не про какие-либо [[баг]]и в [[SPICE]], могущие привести к ошибочным или вводящим в заблуждение результатам: их правильнее называть «ошибками». Раз уж речь зашла об ошибках ([[баг]]ах), то отметим, что [[программа]] [[SPICE]] также их не лишена.


Но вернёмся к «странностям». Некоторые (или все) из них могут быть уникальными для SPICE версии 2g6, единственной версии, которую я широко использовал. Возможно, они были исправлены в более поздних версиях.
Но вернёмся к «странностям». Некоторые (или все) из них могут быть уникальными для [[SPICE]] версии 2g6, единственной версии, которую я широко использовал. Возможно, они были исправлены в более поздних версиях.


== Хорошее начало ==
== Хорошее начало ==


SPICE требует, чтобы исходный файл начинался не с первой инструкции в схеме (как вы помните, сам SPICE инструкции называет «''карты''» в «''колоде''»). Первый символ в исходном файле может быть переводом строки, строкой заголовка или комментарием: просто должно быть что-то там перед первой строкой непосредственно программы, определяющей компонент файла.
[[SPICE]] требует, чтобы исходный файл начинался не с первой инструкции в схеме (как вы помните, сам [[SPICE]] инструкции называет «''карты''» в «''колоде''»). Первый символ в исходном файле может быть переводом строки, строкой заголовка или комментарием: просто должно быть что-то там перед первой строкой непосредственно программы, определяющей компонент файла.


В противном случае SPICE вообще откажется проводить анализ, заявив, что в «колоде» есть серьёзная ошибка (например, неправильное подключение узлов).
В противном случае [[SPICE]] вообще откажется проводить анализ, заявив, что в «колоде» есть серьёзная ошибка (например, неправильное подключение узлов).


== Хороший конец ==
== Хороший конец ==


SPICE настаивает, чтобы строка '''.end''' в самом конце исходного файла не заканчивалась символом перевода строки или возврата каретки. Другими словами, когда вы закончите набирать «'''.end'''», вы не должны нажимать клавишу {{клавиша|Enter}} на клавиатуре.
[[SPICE]] настаивает, чтобы строка '''.end''' в самом конце исходного файла не заканчивалась символом перевода строки или возврата каретки. Другими словами, когда вы закончите набирать «'''.end'''», вы не должны нажимать клавишу {{клавиша|Enter}} на клавиатуре.


Курсор в вашем текстовом редакторе должен остановиться сразу справа от «d» после «'''.end'''» и ни символом дальше. Несоблюдение этой странной особенности приведёт к сообщению об ошибке «''отсутствует карта .end''» (англ. «''missing .end card''») в конце полного вывода анализа.
Курсор в вашем текстовом редакторе должен остановиться сразу справа от «d» после «'''.end'''» и ни символом дальше. Несоблюдение этой странной особенности приведёт к сообщению об ошибке «''отсутствует карта .end''» (англ. «''missing .end card''») в конце полного вывода анализа.
Строка 29: Строка 29:
== Должен быть узел 0 ==
== Должен быть узел 0 ==


Вам предоставляется большая свобода в нумерации узлов схемы, но вы должны иметь узел 0 где-то в вашем списке связей, чтобы SPICE работал. Узел 0 является узлом по умолчанию для заземления цепи и является точкой отсчёта для всех напряжений, указанных в местах расположения отдельных узлов.
Вам предоставляется большая свобода в нумерации узлов схемы, но вы должны иметь узел 0 где-то в вашем списке связей, чтобы [[SPICE]] работал. Узел 0 является узлом по умолчанию для заземления цепи и является точкой отсчёта для всех напряжений, указанных в местах расположения отдельных узлов.


Когда SPICE выполняет простой анализ постоянного тока, выходные данные будут содержать список напряжений во всех ненулевых узлах цепи. Точкой отсчёта («землёй») для всех этих показаний напряжения является узел 0. Например:
Когда [[SPICE]] выполняет простой анализ постоянного тока, выходные данные будут содержать список напряжений во всех ненулевых узлах цепи. Точкой отсчёта («землёй») для всех этих показаний напряжения является узел 0. Например:


{| class="wikitable"
{| class="wikitable"
Строка 41: Строка 41:
|}
|}
В этом анализе имеется постоянное напряжение 15 вольт между узлом 1 и «землёй» (узел 0) и постоянное напряжение 0,6522 вольта между узлом 2 и «землёй» (узел 0). В обоих этих случаях полярность напряжения в узле 0 отрицательна по отношению к другому узлу (другими словами, оба узла 1 и 2 положительны по отношению к узлу 0).
В этом анализе имеется постоянное [[напряжение]] 15 вольт между узлом 1 и «землёй» (узел 0) и постоянное [[напряжение]] 0,6522 вольта между узлом 2 и «землёй» (узел 0). В обоих этих случаях полярность напряжения в узле 0 отрицательна по отношению к другому узлу (другими словами, оба узла 1 и 2 положительны по отношению к узлу 0).


== Избегайте разомкнутых цепей ==
== Избегайте разомкнутых цепей ==


SPICE не может работать с разомкнутыми цепями любого типа. Если в вашем списке связей указана, например, цепь с разомкнутым источником напряжения, SPICE откажется выполнять анализ.
[[SPICE]] не может работать с разомкнутыми цепями любого типа. Если в вашем списке связей указана, например, цепь с разомкнутым источником напряжения, [[SPICE]] откажется выполнять анализ.


Ярким примером ошибки такого типа является «подключение» источника напряжения ко входу источника, зависящего от напряжения (используемого для имитации операционного усилителя). SPICE должен видеть полный путь тока, поэтому я обычно привязываю к источнику напряжения мощный резистор (обычно он в списках связей называется rbogus, т.е. «фиктивный резистор», на схемах R<sub>Фиктивн.</sub>), чтобы он действовал как минимальная нагрузка.
Ярким примером ошибки такого типа является «подключение» источника напряжения ко входу источника, зависящего от напряжения (используемого для имитации [[операционного усилителя]]). [[SPICE]] должен видеть полный путь тока, поэтому я обычно привязываю к источнику напряжения мощный [[резистор]] (обычно он в списках связей называется rbogus, т.е. «фиктивный [[резистор]]», на схемах R<sub>Фиктивн.</sub>), чтобы он действовал как минимальная нагрузка.


== Избегайте определённых связок компонентов ==
== Избегайте определённых связок компонентов ==


SPICE не может работать с определёнными непрерывными связками компонентов в цепи, а именно с источниками напряжения и катушками индуктивности. Следующие циклы заставят SPICE прервать анализ:
[[SPICE]] не может работать с определёнными непрерывными связками [[компонент]]ов в цепи, а именно с источниками напряжения и [[катушками индуктивности]]. Следующие циклы заставят [[SPICE]] прервать анализ:


[[File:V-7_7_1.png|400px|center|thumb|'''Рис. 1.''' SPICE не сможет обработать явно указанные параллельные индуктивности.|alt=Рис. 1. SPICE не сможет обработать явно указанные параллельные индуктивности.]]
[[File:V-7_7_1.png|400px|center|thumb|'''Рис. 1.''' [[SPICE]] не сможет обработать явно указанные параллельные индуктивности.|alt=Рис. 1. SPICE не сможет обработать явно указанные параллельные индуктивности.]]


{{Блок/Инфо2|Список связей с параллельными индуктивностями|netlist<br />l1 2 4 10m<br />l2 2 4 50m<br />l3 2 4 25m}}
{{Блок/Инфо2|Список связей с параллельными индуктивностями|netlist<br />l1 2 4 10m<br />l2 2 4 50m<br />l3 2 4 25m}}


[[File:V-7_7_2.png|400px|center|thumb|'''Рис. 2.''' SPICE не сможет обработать явно указанные индукторные петли с источником напряжения.|alt=Рис. 2. SPICE не сможет обработать явно указанные индукторные петли с источником напряжения.]]
[[File:V-7_7_2.png|400px|center|thumb|'''Рис. 2.''' [[SPICE]] не сможет обработать явно указанные индукторные петли с источником напряжения.|alt=Рис. 2. SPICE не сможет обработать явно указанные индукторные петли с источником напряжения.]]


{{Блок/Инфо2|Список связей с индукторной петлёй|netlist<br />v1 1 0 dc 12<br />l1 1 0 150m}}
{{Блок/Инфо2|Список связей с индукторной петлёй|netlist<br />v1 1 0 dc 12<br />l1 1 0 150m}}


[[File:V-7_7_3.png|400px|center|thumb|'''Рис. 3.''' SPICE не сможет обработать явно указанные последовательные ёмкости.|alt=Рис. 3. SPICE не сможет обработать явно указанные последовательные ёмкости.]]
[[File:V-7_7_3.png|400px|center|thumb|'''Рис. 3.''' [[SPICE]] не сможет обработать явно указанные последовательные ёмкости.|alt=Рис. 3. SPICE не сможет обработать явно указанные последовательные ёмкости.]]


{{Блок/Инфо2|Список связей с последовательными ёмкостями|netlist<br />c1 5 6 33u<br />c2 6 7 47u}}
{{Блок/Инфо2|Список связей с последовательными ёмкостями|netlist<br />c1 5 6 33u<br />c2 6 7 47u}}


Причина, по которой SPICE не может справиться с подобными ситуациями, заключается в том, как он выполняет анализ постоянного тока: он рассматривает все катушки индуктивности как закороченные, а все конденсаторы – как разомкнутые участки цепи. Поскольку короткие замыкания (0 Ом) и разомкнутые цепи (бесконечное сопротивление) либо содержат, либо порождают математические бесконечности, компьютер просто не может справиться с подобными вычислениями, и поэтому SPICE прекратит анализ при возникновении любого из этих условий.
Причина, по которой [[SPICE]] не может справиться с подобными ситуациями, заключается в том, как он выполняет анализ постоянного тока: он рассматривает все [[катушки индуктивности]] как закороченные, а все [[конденсатор]]ы – как разомкнутые участки цепи. Поскольку короткие замыкания (0 Ом) и разомкнутые цепи (бесконечное [[сопротивление]]) либо содержат, либо порождают математические бесконечности, [[компьютер]] просто не может справиться с подобными вычислениями, и поэтому [[SPICE]] прекратит анализ при возникновении любого из этих условий.


== Как же тогда работать с катушками индуктивности и конденсаторами в SPICE? ==
== Как же тогда работать с катушками индуктивности и конденсаторами в SPICE? ==


Чтобы сделать подобные конфигурации компонентов приемлемыми для SPICE, необходимо вставлять резисторы соответствующих номиналов в соответствующие места, устраняя соответствующие короткие замыкания и обрывы цепи. Если требуется последовательный резистор, нужно брать очень низкое значение сопротивления.
Чтобы сделать подобные конфигурации компонентов приемлемыми для [[SPICE]], необходимо вставлять [[резистор]]ы соответствующих номиналов в соответствующие места, устраняя соответствующие короткие замыкания и обрывы цепи. Если требуется последовательный [[резистор]], нужно брать очень низкое значение сопротивления.


И наоборот, если требуется параллельный резистор, то берётся очень высокое значение сопротивления. Например:
И наоборот, если требуется параллельный [[резистор]], то берётся очень высокое значение сопротивления. Например:


Чтобы устранить проблему с параллельной катушкой индуктивности, вставляем резистор очень низкого номинала последовательно с каждой вызывающей помехи катушкой индуктивности.
Чтобы устранить проблему с параллельной [[катушкой индуктивности]], вставляем [[резистор]] очень низкого номинала последовательно с каждой вызывающей помехи [[катушкой индуктивности]].


[[File:V-7_7_4.png|400px|center|thumb|'''Рис. 4.''' Вставка резисторов очень низких номиналов последовательно с катушками индуктивности.|alt=Рис. 4. Вставка резисторов очень низких номиналов последовательно с катушками индуктивности.]]
[[File:V-7_7_4.png|400px|center|thumb|'''Рис. 4.''' Вставка [[резистор]]ов очень низких номиналов последовательно с [[катушками индуктивности]].|alt=Рис. 4. Вставка резисторов очень низких номиналов последовательно с катушками индуктивности.]]


{{Блок/Инфо2|Список связей с параллельными индуктивностями|original netlist<br />l1 2 4 10m<br />l2 2 4 50m<br />l3 2 4 25m}}
{{Блок/Инфо2|Список связей с параллельными индуктивностями|original netlist<br />l1 2 4 10m<br />l2 2 4 50m<br />l3 2 4 25m}}
Строка 81: Строка 81:
{{Блок/Инфо2|«Подправленный» список связей с параллельными индуктивностями|fixed netlist<br />rbogus1 2 3 1e-12<br />rbogus2 2 5 1e-12<br />l1 3 4 10m<br />l2 2 4 50m<br />l3 5 4 25m}}
{{Блок/Инфо2|«Подправленный» список связей с параллельными индуктивностями|fixed netlist<br />rbogus1 2 3 1e-12<br />rbogus2 2 5 1e-12<br />l1 3 4 10m<br />l2 2 4 50m<br />l3 5 4 25m}}


Как и в предыдущем примере с параллельными катушками индуктивности, важно сделать корректирующий резистор (R<sub>Фиктивн.</sub>) очень низким по сопротивлению, чтобы не оказывать существенного влияния на работу схемы.
Как и в предыдущем примере с параллельными [[катушками индуктивности]], важно сделать корректирующий [[резистор]] (R<sub>Фиктивн.</sub>) очень низким по сопротивлению, чтобы не оказывать существенного влияния на работу схемы.


Чтобы исправить цепь последовательных конденсаторов, один из конденсаторов должен иметь шунтирующий (обходной) резистор. Для анализа SPICE требуется наличие пути постоянного тока к каждому конденсатору.
Чтобы исправить цепь последовательных [[конденсатор]]ов, один из [[конденсатор]]ов должен иметь шунтирующий (обходной) [[резистор]]. Для анализа [[SPICE]] требуется наличие пути постоянного тока к каждому [[конденсатор]]у.


[[File:V-7_7_5.png|400px|center|thumb|'''Рис. 5.'''  Один из последовательных конденсаторов должен иметь фиктивный резистор.|alt=Рис. 5.  Один из последовательных конденсаторов должен иметь фиктивный резистор.]]
[[File:V-7_7_5.png|400px|center|thumb|'''Рис. 5.'''  Один из последовательных [[конденсатор]]ов должен иметь фиктивный [[резистор]].|alt=Рис. 5.  Один из последовательных конденсаторов должен иметь фиктивный резистор.]]


{{Блок/Инфо2|Список связей с последовательными ёмкостями|original netlist<br />c1 5 6 33u<br />c2 6 7 47u}}
{{Блок/Инфо2|Список связей с последовательными ёмкостями|original netlist<br />c1 5 6 33u<br />c2 6 7 47u}}
Строка 95: Строка 95:
== Измерение и вывод на печать силы тока ==
== Измерение и вывод на печать силы тока ==


Хотя печать или построение графика напряжения в SPICE довольно просты, вывод значений для силы тока несколько сложнее. Измерения напряжения задаются путём объявления соответствующих узлов схемы.
Хотя печать или построение графика напряжения в [[SPICE]] довольно просты, вывод значений для силы тока несколько сложнее. Измерения напряжения задаются путём объявления соответствующих узлов схемы.


Например, если мы хотим узнать напряжение на конденсаторе, выводы которого соединяются между узлами 4 и 7, мы можем сделать оператор '''.print''' таким:
Например, если мы хотим узнать [[напряжение]] на [[конденсатор]]е, выводы которого соединяются между узлами 4 и 7, мы можем сделать оператор '''.print''' таким:


[[File:V-7_7_6.png|400px|center|thumb|'''Рис. 6.'''  Конденсатор, выводы которого соединяются между узлами 4 и 7.|alt=Рис. 6.  Конденсатор, выводы которого соединяются между узлами 4 и 7.]]
[[File:V-7_7_6.png|400px|center|thumb|'''Рис. 6.'''  [[Конденсатор]], выводы которого соединяются между узлами 4 и 7.|alt=Рис. 6.  Конденсатор, выводы которого соединяются между узлами 4 и 7.]]


{{Блок/Инфо2|Конденсатор между узлами 4 и 7|c1 4 7 22u<br />.print ac v(4,7)}}
{{Блок/Инфо2|Конденсатор между узлами 4 и 7|c1 4 7 22u<br />.print ac v(4,7)}}


Однако, если нужно, чтобы SPICE измерял силу тока, проходящего через этот конденсатор, то это уже не так легко и просто. Токи в SPICE должны указываться относительно источника напряжения, а не любого произвольного компонента. Например:
Однако, если нужно, чтобы [[SPICE]] измерял силу тока, проходящего через этот [[конденсатор]], то это уже не так легко и просто. Токи в [[SPICE]] должны указываться относительно источника напряжения, а не любого произвольного [[компонент]]а. Например:


[[File:V-7_7_7.png|400px|center|thumb|'''Рис. 7.''' Токи в SPICE должны указываться относительно источника напряжения.|alt=Рис. 7. Токи в SPICE должны указываться относительно источника напряжения.]]
[[File:V-7_7_7.png|400px|center|thumb|'''Рис. 7.''' Токи в [[SPICE]] должны указываться относительно источника напряжения.|alt=Рис. 7. Токи в SPICE должны указываться относительно источника напряжения.]]


{{Блок/Инфо2|Добавление источника напряжения, относительно которого измеряется сила тока|c1 4 7 22u<br />vinput 6 4 ac 1 sin<br />.print ac i(vinput)}}
{{Блок/Инфо2|Добавление источника напряжения, относительно которого измеряется сила тока|c1 4 7 22u<br />vinput 6 4 ac 1 sin<br />.print ac i(vinput)}}


Эта «карта» '''.print''' даёт указание SPICE распечатать силу тока, проходящего через источник напряжения V<sub>Вход</sub>, которая оказывается такой же, как сила тока, проходящего через наш конденсатор между узлами 4 и 7. Но что, если в нашей схеме нет такого источника напряжения, для отсылки на измеряемый ток?
Эта «карта» '''.print''' даёт указание [[SPICE]] распечатать силу тока, проходящего через источник напряжения V<sub>Вход</sub>, которая оказывается такой же, как сила тока, проходящего через наш конденсатор между узлами 4 и 7. Но что, если в нашей схеме нет такого источника напряжения, для отсылки на измеряемый ток?


Одним из решений является включение шунтирующего резистора в цепь и измерение напряжения на нём. В этом случае я выбрал значение сопротивления шунта 1 Ом, чтобы получить 1 вольт на ампер тока, проходящего через C<sub>1</sub>:
Одним из решений является включение [[шунтирующего резистора]] в цепь и измерение напряжения на нём. В этом случае я выбрал значение [[сопротивления]] шунта 1 Ом, чтобы получить 1 вольт на ампер тока, проходящего через C<sub>1</sub>:


[[File:V-7_7_8.png|400px|center|thumb|'''Рис. 8.''' Добавление шунтирующего резистора.|alt=Рис. 8. Добавление шунтирующего резистора.]]
[[File:V-7_7_8.png|400px|center|thumb|'''Рис. 8.''' Добавление [[шунтирующего резистора]].|alt=Рис. 8. Добавление шунтирующего резистора.]]


{{Блок/Инфо2|Добавление шунтирующего резистора для конденсатора|c1 4 7 22u<br />rshunt 6 4 1<br />.print ac v(6,4)}}
{{Блок/Инфо2|Добавление шунтирующего резистора для конденсатора|c1 4 7 22u<br />rshunt 6 4 1<br />.print ac v(6,4)}}


Тем не менее, добавление в нашу цепь дополнительного сопротивления, достаточно большого, чтобы снизить значимое напряжение для предполагаемого диапазона тока, может неблагоприятно повлиять на ситуацию. Это лучшее решение для SPICE, хотя в реальной жизни такое решение для измерения тока никогда не будет актуальным:
Тем не менее, добавление в нашу цепь дополнительного сопротивления, достаточно большого, чтобы снизить значимое напряжение для предполагаемого диапазона тока, может неблагоприятно повлиять на ситуацию. Это лучшее решение для [[SPICE]], хотя в реальной жизни такое решение для измерения тока никогда не будет актуальным:


[[File:V-7_7_9.png|400px|center|thumb|'''Рис. 9.''' Добавление фиктивного источника напряжения.|alt=Рис. 9. Добавление фиктивного источника напряжения.]]
[[File:V-7_7_9.png|400px|center|thumb|'''Рис. 9.''' Добавление фиктивного источника напряжения.|alt=Рис. 9. Добавление фиктивного источника напряжения.]]
Строка 123: Строка 123:
{{Блок/Инфо2|Добавление «фиктивного» источника напряжения для конденсатора|c1 4 7 22u<br />vbogus 6 4 dc 0<br />.print ac i(vbogus)}}
{{Блок/Инфо2|Добавление «фиктивного» источника напряжения для конденсатора|c1 4 7 22u<br />vbogus 6 4 dc 0<br />.print ac i(vbogus)}}


Вставка «фиктивного» источника постоянного напряжения с нулевым напряжением вообще не влияет на работу схемы, но предоставляет SPICE удобное место для измерения силы тока. Интересно, что не имеет значения, что VФиктивн. является источником постоянного тока, когда мы хотим измерить переменный ток!
Вставка «фиктивного» источника постоянного напряжения с нулевым напряжением вообще не влияет на работу схемы, но предоставляет [[SPICE]] удобное место для измерения силы тока. Интересно, что не имеет значения, что V<sub>Фиктивн.</sub> является источником постоянного тока, когда мы хотим измерить переменный ток!


Тот факт, что SPICE будет выводить показания переменного тока, определяется спецификацией «'''ac'''» в «карте» '''.print''' и ничем более. Следует также отметить, что способ, которым SPICE присваивает полярность при измерениях тока, немного странный. В качестве примера возьмём следующую схему:
Тот факт, что [[SPICE]] будет выводить показания переменного тока, определяется спецификацией «'''ac'''» в «карте» '''.print''' и ничем более. Следует также отметить, что способ, которым [[SPICE]] присваивает полярность при измерениях тока, немного странный. В качестве примера возьмём следующую схему:


[[File:V-7_7_10.png|400px|center|thumb|'''Рис. 10.''' SPICE несколько странно присваивает полярность при измерении силы тока.|alt=Рис. 10. SPICE несколько странно присваивает полярность при измерении силы тока.]]
[[File:V-7_7_10.png|400px|center|thumb|'''Рис. 10.''' [[SPICE]] несколько странно присваивает полярность при измерении силы тока.|alt=Рис. 10. SPICE несколько странно присваивает полярность при измерении силы тока.]]


{{Блок/Инфо2|Пример того, как странно SPICE присваивает полярность при измерении силы тока|example<br />v1 1 0<br />r1 1 2 5k<br />r2 2 0 5k .dc<br />v1 10 10 1<br />.print dc i(v1)<br />.end}}
{{Блок/Инфо2|Пример того, как странно SPICE присваивает полярность при измерении силы тока|example<br />v1 1 0<br />r1 1 2 5k<br />r2 2 0 5k .dc<br />v1 10 10 1<br />.print dc i(v1)<br />.end}}


При общем напряжении 10 вольт и общем сопротивлении 10 кОм можно ожидать, что SPICE сообщит, что ток через источник напряжения V<sub>1</sub> будет 1 мА (1e-03), но на самом деле SPICE выдаст отрицательное значение 1 мА (-1e-03)! SPICE считает, что ток со стороны отрицательного полюса источника постоянного напряжения (нормальное направление) является отрицательным (а не положительным) значением.
При общем напряжении 10 вольт и общем сопротивлении 10 кОм можно ожидать, что [[SPICE]] сообщит, что ток через источник напряжения V<sub>1</sub> будет 1 мА (1e-03), но на самом деле [[SPICE]] выдаст отрицательное значение 1 мА (-1e-03)! [[SPICE]] считает, что ток со стороны отрицательного полюса источника постоянного напряжения (нормальное направление) является отрицательным (а не положительным) значением.


Иногда я добавляю «фиктивный» источник напряжения в цепь постоянного тока, подобную этой, просто чтобы заставить SPICE выводить положительное значение силы тока:
Иногда я добавляю «фиктивный» источник напряжения в цепь постоянного тока, подобную этой, просто чтобы заставить [[SPICE]] выводить положительное значение силы тока:


[[File:V-7_7_11.png|400px|center|thumb|'''Рис. 11.''' «Фиктивный» источник напряжения позволяет SPICE выводить положительное значение силы тока.|alt=Рис. 11. «Фиктивный» источник напряжения позволяет SPICE выводить положительное значение силы тока.]]
[[File:V-7_7_11.png|400px|center|thumb|'''Рис. 11.''' «Фиктивный» источник напряжения позволяет [[SPICE]] выводить положительное значение силы тока.|alt=Рис. 11. «Фиктивный» источник напряжения позволяет SPICE выводить положительное значение силы тока.]]


{{Блок/Инфо2|«Фиктивный» источник напряжения для вывода положительного значения силы тока|example<br />v1 1 0<br />r1 1 2 5k<br />r2 2 3 5k<br />vbogus 3 0 dc 0 .dc<br />v1 10 10 1<br />.print dc i(vbogus)<br />.end}}
{{Блок/Инфо2|«Фиктивный» источник напряжения для вывода положительного значения силы тока|example<br />v1 1 0<br />r1 1 2 5k<br />r2 2 3 5k<br />vbogus 3 0 dc 0 .dc<br />v1 10 10 1<br />.print dc i(vbogus)<br />.end}}
Строка 143: Строка 143:
== Анализ Фурье ==
== Анализ Фурье ==


При выполнении анализа Фурье (в частотной области) сигнала я обнаружил, что необходимо либо распечатать, либо построить график сигнала с использованием «карт» '''.print''' или '''.plot''' соответственно. Если вы не распечатаете или не начертите его, SPICE на мгновение остановится во время анализа, а затем прервет задание после вывода «начального переходного решения».
При выполнении [[анализа Фурье]] (в частотной области) сигнала я обнаружил, что необходимо либо распечатать, либо построить график сигнала с использованием «карт» '''.print''' или '''.plot''' соответственно. Если вы не распечатаете или не начертите его, [[SPICE]] на мгновение остановится во время анализа, а затем прервет задание после вывода «начального переходного решения».


Кроме того, при анализе прямоугольной волны, создаваемой функцией «импульсного» источника, вы должны задать форме волны некоторое конечное время нарастания и спада, иначе результаты анализа Фурье будут неверными. По какой-то причине идеальная прямоугольная волна с нулевым временем нарастания/спада создаёт значительные уровни чётных гармоник в соответствии с опцией анализа Фурье SPICE, что некорректно для реальных прямоугольных волн.
Кроме того, при анализе прямоугольной волны, создаваемой функцией «импульсного» источника, вы должны задать форме волны некоторое конечное время нарастания и спада, иначе результаты [[анализа Фурье]] будут неверными. По какой-то причине идеальная прямоугольная волна с нулевым временем нарастания/спада создаёт значительные уровни чётных гармоник в соответствии с опцией [[анализа Фурье]] [[SPICE]], что некорректно для реальных прямоугольных волн.


=См.также=
=См.также=

Версия от 18:27, 5 мая 2022

Перевод: Макаров В. (valemak)
Проверка/Оформление/Редактирование: Мякишев Е.А.


Странные особенности программы SPICE[1]

«

Мусор на входе, мусор на выходе.

»
— Аноним

SPICE – очень надёжная программа, но у неё есть свои маленькие странности, с которыми придётся свыкнуться. Под «странностью» я подразумеваю требование к пользователю написать исходный файл определённым образом, чтобы он работал без сообщений об ошибках.

Я сейчас толкую не про какие-либо баги в SPICE, могущие привести к ошибочным или вводящим в заблуждение результатам: их правильнее называть «ошибками». Раз уж речь зашла об ошибках (багах), то отметим, что программа SPICE также их не лишена.

Но вернёмся к «странностям». Некоторые (или все) из них могут быть уникальными для SPICE версии 2g6, единственной версии, которую я широко использовал. Возможно, они были исправлены в более поздних версиях.

Хорошее начало

SPICE требует, чтобы исходный файл начинался не с первой инструкции в схеме (как вы помните, сам SPICE инструкции называет «карты» в «колоде»). Первый символ в исходном файле может быть переводом строки, строкой заголовка или комментарием: просто должно быть что-то там перед первой строкой непосредственно программы, определяющей компонент файла.

В противном случае SPICE вообще откажется проводить анализ, заявив, что в «колоде» есть серьёзная ошибка (например, неправильное подключение узлов).

Хороший конец

SPICE настаивает, чтобы строка .end в самом конце исходного файла не заканчивалась символом перевода строки или возврата каретки. Другими словами, когда вы закончите набирать «.end», вы не должны нажимать клавишу  ↵ Enter  на клавиатуре.

Курсор в вашем текстовом редакторе должен остановиться сразу справа от «d» после «.end» и ни символом дальше. Несоблюдение этой странной особенности приведёт к сообщению об ошибке «отсутствует карта .end» (англ. «missing .end card») в конце полного вывода анализа.

Эта ошибка не влияет на фактический анализ схемы, поэтому я обычно игнорирую это сообщение. Однако, если вы хотите получить «идеальный» результат, вы должны обратить внимание на эту идиосинкразию.

Должен быть узел 0

Вам предоставляется большая свобода в нумерации узлов схемы, но вы должны иметь узел 0 где-то в вашем списке связей, чтобы SPICE работал. Узел 0 является узлом по умолчанию для заземления цепи и является точкой отсчёта для всех напряжений, указанных в местах расположения отдельных узлов.

Когда SPICE выполняет простой анализ постоянного тока, выходные данные будут содержать список напряжений во всех ненулевых узлах цепи. Точкой отсчёта («землёй») для всех этих показаний напряжения является узел 0. Например:

Caption text
node voltage node voltage
(1) 15,0000 (2) 0,6522

В этом анализе имеется постоянное напряжение 15 вольт между узлом 1 и «землёй» (узел 0) и постоянное напряжение 0,6522 вольта между узлом 2 и «землёй» (узел 0). В обоих этих случаях полярность напряжения в узле 0 отрицательна по отношению к другому узлу (другими словами, оба узла 1 и 2 положительны по отношению к узлу 0).

Избегайте разомкнутых цепей

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

Ярким примером ошибки такого типа является «подключение» источника напряжения ко входу источника, зависящего от напряжения (используемого для имитации операционного усилителя). SPICE должен видеть полный путь тока, поэтому я обычно привязываю к источнику напряжения мощный резистор (обычно он в списках связей называется rbogus, т.е. «фиктивный резистор», на схемах RФиктивн.), чтобы он действовал как минимальная нагрузка.

Избегайте определённых связок компонентов

SPICE не может работать с определёнными непрерывными связками компонентов в цепи, а именно с источниками напряжения и катушками индуктивности. Следующие циклы заставят SPICE прервать анализ:

Рис. 1. SPICE не сможет обработать явно указанные параллельные индуктивности.
Рис. 1. SPICE не сможет обработать явно указанные параллельные индуктивности.
Список связей с параллельными индуктивностями

netlist
l1 2 4 10m
l2 2 4 50m
l3 2 4 25m

Рис. 2. SPICE не сможет обработать явно указанные индукторные петли с источником напряжения.
Рис. 2. SPICE не сможет обработать явно указанные индукторные петли с источником напряжения.
Список связей с индукторной петлёй

netlist
v1 1 0 dc 12
l1 1 0 150m

Рис. 3. SPICE не сможет обработать явно указанные последовательные ёмкости.
Рис. 3. SPICE не сможет обработать явно указанные последовательные ёмкости.
Список связей с последовательными ёмкостями

netlist
c1 5 6 33u
c2 6 7 47u

Причина, по которой SPICE не может справиться с подобными ситуациями, заключается в том, как он выполняет анализ постоянного тока: он рассматривает все катушки индуктивности как закороченные, а все конденсаторы – как разомкнутые участки цепи. Поскольку короткие замыкания (0 Ом) и разомкнутые цепи (бесконечное сопротивление) либо содержат, либо порождают математические бесконечности, компьютер просто не может справиться с подобными вычислениями, и поэтому SPICE прекратит анализ при возникновении любого из этих условий.

Как же тогда работать с катушками индуктивности и конденсаторами в SPICE?

Чтобы сделать подобные конфигурации компонентов приемлемыми для SPICE, необходимо вставлять резисторы соответствующих номиналов в соответствующие места, устраняя соответствующие короткие замыкания и обрывы цепи. Если требуется последовательный резистор, нужно брать очень низкое значение сопротивления.

И наоборот, если требуется параллельный резистор, то берётся очень высокое значение сопротивления. Например:

Чтобы устранить проблему с параллельной катушкой индуктивности, вставляем резистор очень низкого номинала последовательно с каждой вызывающей помехи катушкой индуктивности.

Рис. 4. Вставка резисторов очень низких номиналов последовательно с катушками индуктивности.
Рис. 4. Вставка резисторов очень низких номиналов последовательно с катушками индуктивности.
Список связей с параллельными индуктивностями

original netlist
l1 2 4 10m
l2 2 4 50m
l3 2 4 25m

«Подправленный» список связей с параллельными индуктивностями

fixed netlist
rbogus1 2 3 1e-12
rbogus2 2 5 1e-12
l1 3 4 10m
l2 2 4 50m
l3 5 4 25m

Как и в предыдущем примере с параллельными катушками индуктивности, важно сделать корректирующий резистор (RФиктивн.) очень низким по сопротивлению, чтобы не оказывать существенного влияния на работу схемы.

Чтобы исправить цепь последовательных конденсаторов, один из конденсаторов должен иметь шунтирующий (обходной) резистор. Для анализа SPICE требуется наличие пути постоянного тока к каждому конденсатору.

Рис. 5. Один из последовательных конденсаторов должен иметь фиктивный резистор.
Рис. 5. Один из последовательных конденсаторов должен иметь фиктивный резистор.
Список связей с последовательными ёмкостями

original netlist
c1 5 6 33u
c2 6 7 47u

«Подправленный» список связей с последовательными ёмкостями

fixed netlist
c1 5 6 33u
c2 6 7 47u
rbogus 6 7 9e12

Фиктивное значение R, равное 9 тераом, обеспечивает путь постоянного тока к C1 (и в обход C2) без существенного влияния на работу схемы.

Измерение и вывод на печать силы тока

Хотя печать или построение графика напряжения в SPICE довольно просты, вывод значений для силы тока несколько сложнее. Измерения напряжения задаются путём объявления соответствующих узлов схемы.

Например, если мы хотим узнать напряжение на конденсаторе, выводы которого соединяются между узлами 4 и 7, мы можем сделать оператор .print таким:

Рис. 6. Конденсатор, выводы которого соединяются между узлами 4 и 7.
Рис. 6. Конденсатор, выводы которого соединяются между узлами 4 и 7.
Конденсатор между узлами 4 и 7

c1 4 7 22u
.print ac v(4,7)

Однако, если нужно, чтобы SPICE измерял силу тока, проходящего через этот конденсатор, то это уже не так легко и просто. Токи в SPICE должны указываться относительно источника напряжения, а не любого произвольного компонента. Например:

Рис. 7. Токи в SPICE должны указываться относительно источника напряжения.
Рис. 7. Токи в SPICE должны указываться относительно источника напряжения.
Добавление источника напряжения, относительно которого измеряется сила тока

c1 4 7 22u
vinput 6 4 ac 1 sin
.print ac i(vinput)

Эта «карта» .print даёт указание SPICE распечатать силу тока, проходящего через источник напряжения VВход, которая оказывается такой же, как сила тока, проходящего через наш конденсатор между узлами 4 и 7. Но что, если в нашей схеме нет такого источника напряжения, для отсылки на измеряемый ток?

Одним из решений является включение шунтирующего резистора в цепь и измерение напряжения на нём. В этом случае я выбрал значение сопротивления шунта 1 Ом, чтобы получить 1 вольт на ампер тока, проходящего через C1:

Рис. 8. Добавление шунтирующего резистора.
Рис. 8. Добавление шунтирующего резистора.
Добавление шунтирующего резистора для конденсатора

c1 4 7 22u
rshunt 6 4 1
.print ac v(6,4)

Тем не менее, добавление в нашу цепь дополнительного сопротивления, достаточно большого, чтобы снизить значимое напряжение для предполагаемого диапазона тока, может неблагоприятно повлиять на ситуацию. Это лучшее решение для SPICE, хотя в реальной жизни такое решение для измерения тока никогда не будет актуальным:

Рис. 9. Добавление фиктивного источника напряжения.
Рис. 9. Добавление фиктивного источника напряжения.
Добавление «фиктивного» источника напряжения для конденсатора

c1 4 7 22u
vbogus 6 4 dc 0
.print ac i(vbogus)

Вставка «фиктивного» источника постоянного напряжения с нулевым напряжением вообще не влияет на работу схемы, но предоставляет SPICE удобное место для измерения силы тока. Интересно, что не имеет значения, что VФиктивн. является источником постоянного тока, когда мы хотим измерить переменный ток!

Тот факт, что SPICE будет выводить показания переменного тока, определяется спецификацией «ac» в «карте» .print и ничем более. Следует также отметить, что способ, которым SPICE присваивает полярность при измерениях тока, немного странный. В качестве примера возьмём следующую схему:

Рис. 10. SPICE несколько странно присваивает полярность при измерении силы тока.
Рис. 10. SPICE несколько странно присваивает полярность при измерении силы тока.
Пример того, как странно SPICE присваивает полярность при измерении силы тока

example
v1 1 0
r1 1 2 5k
r2 2 0 5k .dc
v1 10 10 1
.print dc i(v1)
.end

При общем напряжении 10 вольт и общем сопротивлении 10 кОм можно ожидать, что SPICE сообщит, что ток через источник напряжения V1 будет 1 мА (1e-03), но на самом деле SPICE выдаст отрицательное значение 1 мА (-1e-03)! SPICE считает, что ток со стороны отрицательного полюса источника постоянного напряжения (нормальное направление) является отрицательным (а не положительным) значением.

Иногда я добавляю «фиктивный» источник напряжения в цепь постоянного тока, подобную этой, просто чтобы заставить SPICE выводить положительное значение силы тока:

Рис. 11. «Фиктивный» источник напряжения позволяет SPICE выводить положительное значение силы тока.
Рис. 11. «Фиктивный» источник напряжения позволяет SPICE выводить положительное значение силы тока.
«Фиктивный» источник напряжения для вывода положительного значения силы тока

example
v1 1 0
r1 1 2 5k
r2 2 3 5k
vbogus 3 0 dc 0 .dc
v1 10 10 1
.print dc i(vbogus)
.end

Обратите внимание, VФиктивн. расположен так, что ток цепи входит в его положительную сторону (узел 3) и выходит из отрицательной стороны (узел 0). Такая ориентация обеспечит положительное выходное значение тока цепи.

Анализ Фурье

При выполнении анализа Фурье (в частотной области) сигнала я обнаружил, что необходимо либо распечатать, либо построить график сигнала с использованием «карт» .print или .plot соответственно. Если вы не распечатаете или не начертите его, SPICE на мгновение остановится во время анализа, а затем прервет задание после вывода «начального переходного решения».

Кроме того, при анализе прямоугольной волны, создаваемой функцией «импульсного» источника, вы должны задать форме волны некоторое конечное время нарастания и спада, иначе результаты анализа Фурье будут неверными. По какой-то причине идеальная прямоугольная волна с нулевым временем нарастания/спада создаёт значительные уровни чётных гармоник в соответствии с опцией анализа Фурье SPICE, что некорректно для реальных прямоугольных волн.

См.также

Внешние ссылки