Crear simulación de circuito

Me pregunto si alguien puede ayudarme. ¿Cómo se hará para crear un simulador de circuito simple? Similar a Multisim, ¡pero mucho más simple!

Básicamente, solo necesito resistencias, capacitores, inductores y fuentes de voltaje.

¿Hay algún tutorial que pueda seguir para crear esto usando C# y Visual Studio?

¿Debe tener CA y CC y oppoint y ruido térmico?
AC y DC sí, el ruido térmico no es tan importante para mí ahora.

Respuestas (4)

Escribí el motor de simulación que impulsa a CircuitLab desde cero: desde la biblioteca de matrices dispersas hasta modelos de componentes y modos de simulación. Mi co-fundador escribió el front-end. Terminó siendo un proyecto de programación increíblemente enorme, pero estoy muy orgulloso. Si está preparado para el desafío, escribir un simulador de circuito puede ser uno de los proyectos de programación más gratificantes que jamás haya abordado.

En un nivel alto, solo necesitas:

  1. Convierta una red de componentes en un sistema de ecuaciones (ecuaciones diferenciales no lineales).
  2. Resolver numéricamente el sistema de ecuaciones (utilizando técnicas de matrices dispersas).

No conozco un tutorial en línea, pero he tratado de documentar mucho de esto mientras escribo el libro de texto "Ultimate Electronics" , especialmente en el Capítulo 2. También hay varios libros de la década de 1990 sobre el tema de simulación de circuito, aunque no los tengo a mano en este momento.

Mi sugerencia sería comenzar solo con fuentes de voltaje y resistencias, y continuar construyendo desde allí. Buena suerte.

¡Gracias por esta respuesta y este libro! Por curiosidad, como estimación, ¿puedes decir cuántas líneas de código terminaron siendo?

Escribí un simulador de circuito basado en Spice para .NET y Mono llamado Spice# . La principal diferencia con la mayoría de los simuladores que encontrarás son:

  • Es de código abierto .
  • Es una biblioteca y no un ejecutable independiente.
  • Está desarrollado para ser personalizado y ampliado.

El proyecto también tiene documentación que contiene información sobre cómo el simulador (como Spice) realiza el análisis nodal modificado (MNA) . Así que creo que este tema puede ser de su interés.

Dudo que haya tutoriales en línea porque es algo bastante específico.

Sin embargo, una fuente de información que definitivamente puede usar es el código fuente abierto. Uno que conozco es SpicePy : está escrito en Python, pero está muy bien documentado, aunque el lenguaje Python es muy descriptivo en sí mismo. Puede usar dicha biblioteca en su código Python o a través del Telegram Bot .

Lo que necesitará es algún tipo de forma de describir la topología de su circuito. Un enfoque común es el uso de netlists , que son esencialmente texto que describe cada componente en el circuito y cómo se conecta a los demás (por ejemplo, a través de números de nodo). Puedes usar esta estrategia o cualquier otra que te parezca más fácil; analizarlo y convertirlo en un gráfico real (es decir, ¿tiene sentido?) podría llevarle algún tiempo.

Después de eso, una forma común de analizar circuitos en simuladores es el análisis nodal ; luego recurrir a alguna biblioteca de álgebra lineal para resolver el sistema de ecuaciones (que seguramente será lineal), como Math.Net .

Escribí una herramienta basada en Python que puede simular señales de CA y ruido utilizando los solucionadores de matrices dispersas proporcionados por SciPy. Es un proyecto de código abierto basado en una herramienta de código cerrado en la comunidad de ondas gravitacionales llamada LISO .

He estructurado el código de manera que pueda crear diferentes bibliotecas de resolución o crear diferentes análisis que usen la misma definición de circuito. Ambos tipos de análisis que existen al momento de escribir (análisis de señal y ruido) construyen una matriz a partir de los componentes del circuito y luego la resuelven para una excitación dada, por ejemplo, una entrada, en un rango de frecuencia dado.

Es similar a la forma en que funcionan SPICE y otros simuladores de circuitos de análisis nodal. Espero que el código sea relativamente fácil de entender.

Hay alguna documentación básica aquí , pero todavía está en desarrollo. Avísame si terminas usándolo y tienes preguntas sobre cómo funciona.

Aquí hay un ejemplo de sintaxis LISO que admite (pero también puede definir circuitos puramente en Python). Es un poco como una netlist de SPICE:

r r1 100 nin nsum
r r3 1.075k no nsum
r r4 42.2 nsum nm
r r6 65 nin gnd
c c2 4.7n nsum gnd
c c5 122p no nm
op op1 op27 gnd nm no

freq log 1 1M 101

uinput nin nsum 50
uoutput no nsum

El código anterior produce una trama como esta:

circuito de amplificador operacional de voltaje flotante