¿Cómo funcionan realmente los simuladores de circuito?

31

Recientemente tuve la oportunidad de jugar con LiveWire , que es un simulador de circuito y comencé a preguntarme cómo calcularon exactamente los voltajes en cada componente y la corriente que pasa por cada pista de cable.

Hasta ahora solo me han enseñado habilidades básicas de análisis de circuitos (como el análisis de malla y el análisis nodal), y no estoy completamente seguro de que sean lo suficientemente genéricas como para implementarlas de una manera 'adecuada para todos' dentro de un simulador de circuitos.

Como programador, esto me ha intrigado y me encantaría ver qué técnicas se emplean comúnmente al construir simuladores de circuitos como este.

Mis disculpas si esto no pertenece aquí, fue una elección entre aquí y StackOverflow y sentí que, aunque es una pregunta orientada al desarrollo de software, la pregunta es más aplicable a este sitio y a su base de usuarios.

Thomas Russell
fuente
El truco principal son muchas pequeñas porciones de tiempo. Por lo tanto, las funciones complejas del tiempo se manejan ejecutando muchas ecuaciones de diferencia con pequeños segmentos de tiempo. La complejidad desagradable generalmente se reduce significativamente si se puede expresar como ecuaciones diferenciales, que se convierten en ecuaciones de diferencia en una simulación digital.
Olin Lathrop

Respuestas:

14

He examinado el código del simulador de Falstad con cierto detalle. Para los circuitos que consisten solo en componentes lineales como resistencias, interruptores y fuentes de voltaje (cosas como las salidas de compuerta lógica se consideran fuentes de voltaje conectadas a tierra para fines de la simulación) el simulador considera cada nodo del circuito, fuente de voltaje (conectando dos nodos) , o cable (del mismo modo) como definición de una ecuación lineal y una variable, de modo que el número de ecuaciones y el número de variables sean siempre iguales. Para un nodo de circuito, la variable es el voltaje del nodo, y la ecuación calcula la corriente total que fluye a través de él igual a la corriente total inyectada por cualquier fuente de corriente. Para una fuente de voltaje o cable (un cable que se maneja como una fuente de voltaje donde la diferencia de potencial es cero),

Cosas como fuentes de corriente y resistencias no están asociadas con resistencias o variables. En cambio, las fuentes de corriente aumentan la corriente total requerida para un nodo de circuito (recuerde que cada nodo de circuito tiene una ecuación que evalúa la corriente total que fluye hacia adentro y hacia afuera) y la disminuye para el otro. Las resistencias son un poco más complicadas: para la ecuación de cada punto final, la resistencia agrega términos para el voltaje del nodo de cada punto final.

Una resistencia de 100 ohmios que conecta los nodos 1 y 2, por ejemplo, diría que cada aumento de voltaje en el nodo 1 disminuirá la corriente que fluye hacia el nodo 1 en 0.01 amperios y aumentará la corriente que fluye hacia el nodo 2 en una cantidad similar. Del mismo modo, cada aumento de voltios en el nodo 2 aumentaría la corriente que fluye hacia el nodo 1 en 0.01 amperios y disminuiría la corriente que fluye hacia el nodo 2 en una cantidad similar.

Considere un circuito con un suministro de 10 voltios conectando los nodos 1 y 5, y resistencias de 100 ohmios que conectan los nodos 1 y 2, 2 y 3, 2 y 4, y 3 y 4. Suponga además que hay un icono de tierra en el nodo 1. Por lo tanto:

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

Habría dos "fuentes de voltaje": el cable de tierra y el suministro de 10 voltios (que se consideran ecuación / variable 5 y 6, respectivamente). Las ecuaciones serían así:

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

Este sistema de ecuaciones puede representarse como una matriz NxN más una matriz de N elementos. Cada ecuación está representada por una fila en la matriz, con valores en cada fila que representan los coeficientes de cada variable. El lado derecho de cada ecuación se almacena en una matriz separada. Antes de resolver las ecuaciones, uno sabrá la corriente neta que fluye hacia cada nodo (cero en este caso) y la diferencia de voltaje entre pares de nodos conectados por fuentes de voltaje. Resolver las ecuaciones producirá el voltaje en cada nodo y la corriente que fluye a través de cada fuente de voltaje.

Si el circuito contiene condensadores, cada uno de ellos se considerará como una fuente de voltaje en serie con una resistencia de bajo valor; Después de cada paso de simulación, la fuente de voltaje se ajustará de acuerdo con la cantidad de corriente que fluyó a través de ella. Los inductores se considerarán resistencias de alto valor que alimentan la corriente a una y la eliminan por la otra (la cantidad de corriente se ajusta de acuerdo con el voltaje a través de la resistencia). Tanto para los condensadores como para los inductores, el valor de la resistencia estará controlado por la cantidad de tiempo representada por un paso de simulación.

Los elementos de circuitos más complejos como los transistores se consideran combinaciones de fuentes de voltaje, fuentes de corriente y resistencias. A diferencia de los elementos de circuito más simples que permiten que todo se procese una vez por paso de tiempo de simulación, los elementos como los transistores calculan sus resistencias efectivas, etc. en función de los voltajes y corrientes que están viendo, evalúan todas las ecuaciones resultantes y reevalúan su resistencia en función de los nuevos voltajes y corrientes, reevalúe las ecuaciones, etc. en un esfuerzo por alcanzar un equilibrio donde su resistencia efectiva sea como debería ser para el voltaje y la corriente que el transitor está viendo.

El simulador de Falstad puede ser decentemente rápido para circuitos de tamaño moderado que consisten completamente en elementos "lineales". El tiempo para resolver repetidamente un sistema de ecuaciones es bastante razonable si lo único que cambia son los coeficientes del lado derecho. El tiempo se vuelve mucho más lento si el lado izquierdo cambia (por ejemplo, porque la resistencia efectiva de un transistor sube o baja) porque el sistema tiene que "refactorizar" las ecuaciones. Tener que refactorizar las ecuaciones varias veces por paso de simulación (puede ser necesario con transistores) hace que las cosas sean aún más lentas.

Usar una matriz grande para todo no es un buen enfoque para simulaciones grandes; A pesar de que la matriz será bastante escasa, ocupará un espacio proporcional al cuadrado del número de nodos más las fuentes de voltaje. El tiempo requerido para resolver la matriz en cada paso de simulación será proporcional al cuadrado del tamaño de la matriz si no se requiere refactorizar, o al cubo del tamaño de la matriz si se requiere refactorizar. No obstante, el enfoque tiene cierta elegancia cuando se trata de mostrar la relación entre un circuito y un sistema de ecuaciones lineales.

Super gato
fuente
La mayoría de los simuladores de tipo SPICE también usan este tipo de algoritmo. Aquí hay una descripción general de spice ecircuitcenter.com/SpiceTopics/Overview/Overview.htm
user6972
1
FYI - KLU es el algoritmo común utilizado en simuladores de circuitos. KLU significa Clark Kent LU, ya que se basa en el algoritmo de Gilbert-Peierls, un algoritmo no supernodal, que es el predecesor de SuperLU, un algoritmo supernodal. KLU es un solucionador lineal de alto rendimiento que emplea mecanismos de orden híbridos y algoritmos elegantes de factorización y resolución.
user6972
Es importante tener en cuenta que hay varios modelos de transistores, BSIM o EKV, por ejemplo. Básicamente, estos modelos tienen en cuenta toda la física, desde un punto de vista, involucrada en la operación de un solo transistor y los efectos sobre sus características eléctricas. Hay mucho más que solo representar como combinaciones de fuentes de voltaje, fuentes de corriente y resistencias. Si desea seleccionar un modelo diferente, puede usar el parámetro LEVEL. Este tutorial de Jacob Baker es un buen comienzo. Espero eso ayude.
11

LiveWire es uno de los muchos simuladores de circuito, con diferentes niveles de capacidad.

Por ejemplo, Falstad Circuit Simulator parece tener un nivel de capacidad similar al de LiveWire, y el código fuente se ofrece en ese enlace. Eso debería ser un buen comienzo.

Para una simulación de circuito más sofisticada, muchas herramientas remontan sus raíces a SPICE by UC Berkley . El código fuente SPICE está disponible a solicitud de UCB bajo licencia BSD.

Las ediciones SPICE específicas del fabricante suelen integrar modelos de simulación de semiconductores muy detallados de sus propios productos en sus simuladores. Por ejemplo, LTSpice IV de Linear Technologies o TINA-TI de Texas Instruments. Debajo, todo suele ser SPICE.

Citando de la página de WikiPedia sobre SPICE:

Los programas de simulación de circuitos, de los cuales SPICE y derivados son los más destacados, toman una lista de texto de la red que describe los elementos del circuito (transistores, resistores, condensadores, etc.) y sus conexiones, y traducen esta descripción en ecuaciones para resolver. Las ecuaciones generales producidas son ecuaciones algebraicas diferenciales no lineales que se resuelven utilizando métodos de integración implícita, el método de Newton y técnicas de matriz dispersa.

En un nivel aún más alto de sofisticación, varios productos comerciales como el Modelado del Sistema Virtual Proteus , parte de Proteus Design Suite, utilizan mejoras patentadas para la simulación de circuito SPICE de modo mixto: estas herramientas pueden simular el comportamiento del circuito analógico y el código del microcontrolador digital, con las interacciones entre ellos totalmente modeladas.

En un nivel mucho más limitado y limitante, algunos editores esquemáticos, como la herramienta Circuit Lab integrada en este sitio, proporcionan una pequeña gama de capacidades de simulación. Si bien esto puede no ser tan útil en el diseño electrónico práctico no trivial, el estudio de sus capacidades e implementación proporcionaría al desarrollador de software una idea de lo que funciona bien para los usuarios y lo que no.

Anindo Ghosh
fuente
5

Hay tres análisis principales que realizan los simuladores de circuito tipo SPICE:

  • Punto de funcionamiento DC
  • Análisis de corriente alterna
  • Análisis transitorio

El análisis del punto de funcionamiento de CC para un circuito lineal (formado a partir de fuentes de CC, resistencias lineales y fuentes controladas lineales) se realiza utilizando el análisis nodal modificado (MNA). El análisis de malla también podría usarse, pero es muy fácil configurar las ecuaciones para el análisis nodal.

Para circuitos no lineales (que incluyen dispositivos como transistores, que pueden modelarse esencialmente como fuentes controladas no lineales), se deben usar algunos trucos adicionales. Una forma conceptual simple es usar una extensión del Método de Newton para ecuaciones múltiples.

El método de Newton implica adivinar la solución, luego hacer un modelo lineal del circuito que solo sea preciso "cerca" de la solución adivinada. La solución al circuito linealizado se utiliza como una nueva aproximación a la solución, y el proceso se repite hasta que las sucesivas iteraciones "converjan" en la solución (con suerte) correcta para el circuito no lineal. En el mundo real, se utilizan solucionadores no lineales más complicados para poder hacer la solución más rápidamente y con menos errores debido a la falla de convergencia.

El análisis de CA se realiza primero haciendo un análisis de CC para encontrar un punto operativo. Luego estudias el efecto de pequeñas perturbaciones alrededor del punto de operación. "Pequeño" significa, por definición, lo suficientemente pequeño como para que los efectos no lineales no sean importantes. Eso significa que los elementos del circuito se transforman en elementos lineales equivalentes dependiendo del punto de operación. Luego, se puede usar el MNA (con números complejos que representan la impedancia de los elementos de almacenamiento de energía) para resolver el efecto de las perturbaciones causadas por las fuentes de CA en el circuito.

El análisis transitorio se realiza, como dice Olin en los comentarios, al considerar cómo evolucionan las variables del circuito en pasos muy pequeños en el tiempo. Nuevamente, en cada paso de tiempo, el circuito se linealiza alrededor de su punto de operación, de modo que MNA se puede usar para configurar las ecuaciones. Un método simple para resolver el comportamiento a lo largo del tiempo es el Método de Euler . Sin embargo, nuevamente en la práctica, se utilizan métodos más complicados para permitir el uso de pasos de tiempo más grandes con errores más pequeños.

Puede ver que un hilo común en estos métodos es hacer una aproximación lineal al comportamiento del circuito y resolverlo con MNA hasta que encuentre una solución para el comportamiento del circuito no lineal.

Estos tres análisis han sido los principales realizados por simuladores similares a SPICE desde la década de 1970. Los simuladores más nuevos agregan capacidades adicionales como el equilibrio armónico (una extensión del análisis de CA para acomodar los efectos de mezcla de elementos no lineales) o simulaciones electromagnéticas para simular efectos de línea de transmisión. Pero las simulaciones DC, AC y transitorias son las tres primeras que debe comprender al usar un simulador similar a SPICE.

El fotón
fuente
Hablé sobre cómo configurar las ecuaciones de MNA en una respuesta anterior: electronics.stackexchange.com/questions/19198/…
The Photon
2
También debemos agregar que las simulaciones de circuitos digitales utilizan métodos completamente diferentes; y eso convierte la co-simulación analógico-digital en un problema completo por sí mismo.
El Photon