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

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску

Перевод: Макаров В. (valemak) Контакты:</br>* Habr: @vakemak</br>* Сайт: www.valemak.com</br>Перевёл статей: 648.
Проверка/Оформление/Редактирование: Мякишев Е.А.


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

См.также

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