Crear simulación de circuito

5

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

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

¿Puedo seguir un tutorial para crear esto utilizando C # y Visual Studio?

    
pregunta fitzchivalry

4 respuestas

28

Escribí el motor de simulación que impulsa CircuitLab desde cero: desde la biblioteca de matriz dispersa 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 grande, pero estoy muy orgulloso de ello. 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. Resuelva numéricamente el sistema de ecuaciones (utilizando técnicas de matriz dispersa).

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

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

    
respondido por el compumike
2

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

Sin embargo, una fuente de información que definitivamente puede utilizar 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 por sí solo. . Puede usar dicha biblioteca en su código Python o en el Bot de telegramas .

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

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

    
respondido por el edmz
0

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 es:

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

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

    
respondido por el Sven B
0

Escribí una herramienta basada en Python que puede simular las señales de CA y el ruido utilizando los dispersores de matriz dispersos proporcionados por Ciencia 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. Los dos tipos de análisis que existen a partir de la escritura (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 determinada, p. Ej. una entrada, sobre 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 una documentación básica aquí , pero aún está en desarrollo. Avísame si terminas usándolo y tienes preguntas sobre cómo funciona.

Este es un ejemplo de la sintaxis LISO que admite (pero también puede definir circuitos únicamente en Python). Es un poco como un 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 un gráfico como este:

    
respondido por el Sean

Lea otras preguntas en las etiquetas