Как на самом деле работают симуляторы цепей?

31

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

До сих пор меня обучали только базовым навыкам анализа цепей (таким как анализ сеток и анализ узлов), и я не совсем уверен, что они будут достаточно универсальными, чтобы их можно было использовать в симуляторе схем «на все случаи жизни».

Как программист, это заинтриговало меня, и я хотел бы посмотреть, какие методы обычно используются при создании схемных симуляторов, таких как этот.

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

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

Ответы:

14

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

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

Например, 100-омный резистор, соединяющий узлы 1 и 2, сказал бы, что каждое увеличение напряжения на узле 1 будет уменьшать ток, протекающий в узел 1, на 0,01 ампер и увеличивать ток, протекающий в узел 2, примерно на такую ​​же величину. Аналогичным образом, каждое увеличение напряжения в узле 2 увеличит ток, протекающий в узел 1, на 0,01 ампер и уменьшит ток, протекающий в узел 2, примерно на такую ​​же величину.

Рассмотрим схему с 10-вольтовым источником питания, соединяющим узлы 1 и 5 и резисторы 100 Ом, соединяющие узлы 1 и 2, 2 и 3, 2 и 4 и 3 и 4. Предположим далее, что на узле 1 имеется значок заземления. Таким образом:

neg ---+-1---R100---2---R100---3---100---4---pos
      gnd           |                    |
                    +---------100--------+

Было бы два «источника напряжения»: заземляющий провод и источник 10 вольт (которые рассматриваются как уравнения / переменные 5 и 6 соответственно). Таким образом, уравнения будут иметь вид:

-X1*0.01                             +X5 -X6 = 0  Node 1
+X1*0.01 -X2*0.01          +X4*0.01          = 0  Node 2
         +X2*0.01 -X3*0.01 +X4*0.01          = 0  Node 3
         +X2*0.01          -X4*0.01      +X6 = 0  Node 4
-X1*1                                        = 0  Volts 5 (voltage between 1 and gnd)
-X1*1                      +X4*1             = 10 Volts 6 (voltage between 1 and 4)

Эта система уравнений может быть представлена ​​в виде матрицы NxN плюс массив N элементов. Каждое уравнение представлено строкой в ​​матрице, а значения в каждой строке представляют коэффициенты каждой переменной. Правая часть каждого уравнения хранится в отдельном массиве. Прежде чем решать уравнения, нужно узнать чистый ток, протекающий в каждый узел (в данном случае ноль), и разность напряжений между парами узлов, соединенных источниками напряжения. Решение уравнений даст напряжение в каждом узле и ток, протекающий через каждый источник напряжения.

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

Более сложные элементы схемы, такие как транзисторы, рассматриваются как комбинации источников напряжения, источников тока и резисторов. В отличие от более простых схемных элементов, которые позволяют обрабатывать все один раз за временной шаг моделирования, такие элементы, как транзисторы, рассчитывают свои эффективные сопротивления и т. Д. На основе наблюдаемых напряжений и токов, оценивают все полученные уравнения и переоценивают свое сопротивление на основе новые напряжения и токи, пересмотрите уравнения и т. д., чтобы достичь равновесия, при котором их эффективное сопротивление будет таким, каким оно должно быть для напряжения и тока, которые видит транзистор.

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

Использование одной большой матрицы для всего не подходит для больших симуляций; хотя матрица будет довольно разреженной, она будет занимать пространство, пропорциональное квадрату числа узлов плюс источники напряжения. Время, необходимое для определения матрицы на каждом этапе моделирования, будет пропорционально квадрату размера матрицы, если рефакторинг не требуется, или кубу размера матрицы, если требуется рефакторинг. Тем не менее, подход имеет определенную элегантность, когда дело доходит до демонстрации взаимосвязи между цепью и системой линейных уравнений.

Supercat
источник
Большинство симуляторов типа SPICE тоже используют этот тип алгоритма. Вот обзор для spice ecircuitcenter.com/SpiceTopics/Overview/Overview.htm
user6972
1
FYI - KLU - это общий алгоритм, используемый в симуляторах цепей. KLU расшифровывается как Clark Kent LU, поскольку он основан на алгоритме Гилберта-Пайерлса, несверхнодальном алгоритме, который является предшественником SuperLU, супернодального алгоритма. KLU является разреженным высокопроизводительным линейным решателем, который использует гибридные механизмы упорядочения и элегантные алгоритмы факторизации и решения.
user6972
Важно отметить, что существует несколько моделей транзисторов, например, BSIM или EKV. В основном эти модели учитывают всю физику, с точки зрения, вовлеченную в работу одного транзистора, и влияние на его электрические характеристики. Это гораздо больше, чем просто представлять в виде комбинации источников напряжения, источников тока и резисторов. Если вы хотите выбрать другую модель, вы можете использовать параметр LEVEL. Этот урок от Джейкоба Бейкера это хорошее начало. Надеюсь, это поможет.
11

LiveWire - один из многих симуляторов цепей с различными уровнями возможностей.

Например, Falstad Circuit Simulator, похоже, имеет такой же уровень возможностей, что и LiveWire - и исходный код предлагается по этой ссылке. Это должно быть хорошим началом.

Для более сложной симуляции схем многие инструменты берут свое начало от SPICE от UC Berkley . Исходный код SPICE доступен по запросу в UCB под лицензией BSD.

Выпуски SPICE для конкретного производителя обычно включают в свои имитаторы очень подробные имитационные модели полупроводников их собственных продуктов. Например, LTSpice IV от Linear Technologies или TINA-TI от Texas Instruments. Внизу это обычно SPICE.

Цитирую со страницы WikiPedia о SPICE:

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

На еще более высоком уровне сложности некоторые коммерческие продукты, такие как Proteus Virtual System Modeling , входящая в состав Proteus Design Suite, используют собственные усовершенствования для моделирования схем SPICE в смешанном режиме - эти инструменты могут моделировать как поведение аналоговых схем, так и код цифрового микроконтроллера, с взаимодействиями между ними полностью смоделированы.

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

Аниндо Гош
источник
5

Есть три основных анализа, которые выполняются SPICE-подобными симуляторами цепей:

  • Рабочая точка постоянного тока
  • Анализ переменного тока
  • Анализ переходных процессов

Анализ рабочей точки постоянного тока для линейной цепи (сформированной из источников постоянного тока, линейных резисторов и линейных управляемых источников) выполняется с использованием модифицированного узлового анализа (MNA). Можно также использовать анализ сетки, но очень легко настроить уравнения для узлового анализа.

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

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

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

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

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

Эти три анализа были основными, выполненными SPICE-подобными тренажерами с 1970-х годов. Новые симуляторы добавляют дополнительные возможности, такие как гармонический баланс (расширение анализа переменного тока для учета эффектов смешения от нелинейных элементов), или электромагнитное моделирование для симуляции эффектов линии передачи. Но моделирование постоянного тока, переменного тока и переходных процессов - первые три, которые вы должны понимать при использовании SPICE-подобного симулятора.

Фотон
источник
Я говорил о том, как установить уравнения MNA в предыдущем ответе: electronics.stackexchange.com/questions/19198/…
Фотон
2
Мы также должны добавить, что для моделирования цифровых схем используются совершенно другие методы; и это превращает аналого-цифровое совместное моделирование в отдельную проблему.
Фотон