otro simulador
5 participantes
Página 2 de 2.
Página 2 de 2. • 1, 2
Re: otro simulador
Gracias MarkU.
Yo sigo con el planteamiento de no calcular el circuito, como he intentado explicar anteriormente, funcionar funciona, pero hay problemas cuando son redes complejas, sobre todo si además hay muchos leds o condensadores.
A mi me gusta experimentar con estas cosas, pero para que esto pueda simular circuitos analógicos más o menos complejos creo que habría que resolver el circuito planteando las ecuaciones y demás. Si alguien con conocimientos de electrónica le interesa plantear esta parte creo que esto podría avanzar mucho.
Si hay gente interesada, también se podría plantear un proyecto común desde cero, discutirlo y repartir el trabajo según pueda cada uno, yo me comprometo a participar en lo que pueda.
Saludos.
Yo sigo con el planteamiento de no calcular el circuito, como he intentado explicar anteriormente, funcionar funciona, pero hay problemas cuando son redes complejas, sobre todo si además hay muchos leds o condensadores.
A mi me gusta experimentar con estas cosas, pero para que esto pueda simular circuitos analógicos más o menos complejos creo que habría que resolver el circuito planteando las ecuaciones y demás. Si alguien con conocimientos de electrónica le interesa plantear esta parte creo que esto podría avanzar mucho.
Si hay gente interesada, también se podría plantear un proyecto común desde cero, discutirlo y repartir el trabajo según pueda cada uno, yo me comprometo a participar en lo que pueda.
Saludos.
Re: otro simulador
Me interesa la idea de crear un programa que calcule circuitos analógicos a partir de ecuaciones. Lo que yo conozco hasta ahora está siempre basado en spice, y spice calcula los transitorios de los circuitos paso a paso, con la potencia de los ordenadores actuales sería posible calcular los circuitos mediante ecuaciones totalmente y que el resultado fuera una ecuación que después se podria representar en forma de grafico vectorial o almenos eso creo. De esta forma el supuesto programa resolvería los circuitos como nosotros podemos hacerlo con papel y lapiz.
Investigaré un poco mas el tema.
Investigaré un poco mas el tema.
Re: otro simulador
Yo le había dado algunas vueltas al tema y lo más facil me parecía plantear las ecuaciones de intensidades de cada nodo, pasar el sistema de ecuaciones a una matriz y resolverla con eingen que es muy facil, el resultado es un vector de voltajes de cada nodo.
Para redes de resistencias, en principio no debería ser demasiado complicado, ya que cada nodo podría saber a que nodos está conectado y que resistencia hay entre ellos, con esos datos cada nodo puede calcular su propia ecuación y meterla en un vector, luego el simulador recolectaría todos los vectores y construiría una matriz, la resolvería con eingen y luego mandaría voltajes a cada nodo.
Pero luego la cosa se complica con con componentes reactivos y no lineales.
Si tu sabes cómo resolver todo esto sería cuestión de intentarlo. Al menos hacer algo básico aunque no sea muy preciso.
Para redes de resistencias, en principio no debería ser demasiado complicado, ya que cada nodo podría saber a que nodos está conectado y que resistencia hay entre ellos, con esos datos cada nodo puede calcular su propia ecuación y meterla en un vector, luego el simulador recolectaría todos los vectores y construiría una matriz, la resolvería con eingen y luego mandaría voltajes a cada nodo.
Pero luego la cosa se complica con con componentes reactivos y no lineales.
Si tu sabes cómo resolver todo esto sería cuestión de intentarlo. Al menos hacer algo básico aunque no sea muy preciso.
Re: otro simulador
Es la primera vez que veo lo de eigen pero por lo que veo es útil, para los componentes reactivos todo sería que se pudieran resolver las ecuaciones diferenciales que aparecerían, cosa que eigen no puede hacer por lo que he visto, pero siempre se puede hacer la transformada de Lapace primero. Ya casi no me acuerdo de nada de esto.
Re: otro simulador
Si.. con Eingen resolver un sistema de ecuaciones lineales es muy facil, por ejemplo el sistema:
X0+2X1+6X2 = 3
4X0+2X1+5X2 = 8
7X0+8X1+10X2 = 4
Queda resuelto en el vector x:
Matrix3f A;
Vector3f b;
A << 1,2,6, 4,2,5, 7,8,10;
b << 3, 8, 4;
Vector3f x = A.HouseholderQr().solve(b);
El Autor del programita Analog que comenté en otro post, tiene un pdf donde explica las matemáticas del simulador:
http://www.cs.berkeley.edu/~lazzaro/chipmunk/document/log/analog-tr.pdf
pero yo no entiendo gran cosa, parte de un sistema de ecuaciones diferenciales, que convierte en un sistema de ecuaciones no lineales por el metodo "backward Euler method
"... y luego ese lo transforma en un sistema de ecuaciones lineales por el método Newton–Raphson.. al Newton creo que lo conozco, pero el Raphson no me suena de nada.. jejej
Resumiendo.. no me entero de nada...
pero la explicación no es muy larga y seguro que hay quien la entienda.
Yo había pensado que se podrían hacer cálculos discretos de los componentes reactivos y pasar de las ecuaciones diferenciales .. no sería muy preciso para condensadores pequeños por ejemplo, pero creo que el objetivo no es hacer un simulador de RF, con que sirva para poner una resistencia y un condensador a la salida de un pic para filtrar un pwm estaría bien, incluso se podría limitar la capacidad mínima de los condensadores para evitar errores grandes.
X0+2X1+6X2 = 3
4X0+2X1+5X2 = 8
7X0+8X1+10X2 = 4
Queda resuelto en el vector x:
Matrix3f A;
Vector3f b;
A << 1,2,6, 4,2,5, 7,8,10;
b << 3, 8, 4;
Vector3f x = A.HouseholderQr().solve(b);
El Autor del programita Analog que comenté en otro post, tiene un pdf donde explica las matemáticas del simulador:
http://www.cs.berkeley.edu/~lazzaro/chipmunk/document/log/analog-tr.pdf
pero yo no entiendo gran cosa, parte de un sistema de ecuaciones diferenciales, que convierte en un sistema de ecuaciones no lineales por el metodo "backward Euler method
"... y luego ese lo transforma en un sistema de ecuaciones lineales por el método Newton–Raphson.. al Newton creo que lo conozco, pero el Raphson no me suena de nada.. jejej
Resumiendo.. no me entero de nada...
pero la explicación no es muy larga y seguro que hay quien la entienda.
Yo había pensado que se podrían hacer cálculos discretos de los componentes reactivos y pasar de las ecuaciones diferenciales .. no sería muy preciso para condensadores pequeños por ejemplo, pero creo que el objetivo no es hacer un simulador de RF, con que sirva para poner una resistencia y un condensador a la salida de un pic para filtrar un pwm estaría bien, incluso se podría limitar la capacidad mínima de los condensadores para evitar errores grandes.
Re: otro simulador
Me pregunto si se podria utilizar ese programa, analog, para usarlo de motor de calculo electrico para tu programa, siempre separando la parte de calculo digital de la analógica.
Re: otro simulador
Ehhh.. eso había pensado yo.. al principio era optimista porque veía pocos archivos, pero piensa que son programas escritos en los 80, no se usan librerías, todo está escrito a bajo nivel, la mayoría de archivos tienen entre 1000 y 2000 lineas, como ejemplo, sólo la inicialización de constantes y variables son unas 400 lineas... otro ejemplo: sólo el archivo principal de la Gui tiene más de 20.000 lineas.. si si... veintemil.
Intentar entender algo ahí es medio complicado, sobre todo porque usa infinidad de estructuras de datos todas con nombres parecidos.
Pero el programa parece muy bueno.
Intentar entender algo ahí es medio complicado, sobre todo porque usa infinidad de estructuras de datos todas con nombres parecidos.
Pero el programa parece muy bueno.
Re: otro simulador
Aqui vuelvo con el tema...
He seguido con este proyecto y termine por implementar el tema de calcular el circuito con sus matrices y demás.
También le he puesto un plotter.
Por otro lado le he añadido un editor/compilador/depurador que por ahora funciona con gcbasic, pic-asm y avr-asm.
Se puede sólo simular, solo depurar o simular y depurar a la vez, viendo
el circuito funcionando , por donde vá el programa, ver registros por
nombre o direccion...
Resaltado de sintaxis y de variables usadas.
He seguido con este proyecto y termine por implementar el tema de calcular el circuito con sus matrices y demás.
También le he puesto un plotter.
Por otro lado le he añadido un editor/compilador/depurador que por ahora funciona con gcbasic, pic-asm y avr-asm.
Se puede sólo simular, solo depurar o simular y depurar a la vez, viendo
el circuito funcionando , por donde vá el programa, ver registros por
nombre o direccion...
Resaltado de sintaxis y de variables usadas.
Última edición por Pikitin el Miér 9 Mayo 2012 - 6:38, editado 1 vez (Razón : eliminar enlaces que no funcionan)
Re: otro simulador
Esto se me hace muy interesante.
Primero lo descargue pero no lo pude ejecutar tengo el siguiente msj:
intuyo que es porque tengo un sistema de 64bits, aunque tengo instaladas librerias para correr las aplicaciones de 32.
Bueno al tener este error trato de compilar pero obtengo lo siguiente:
Tengo Gnome3, no se que deba instalar de Qt, algo instaldo tengo porque hay un par de alplicaciones Qt.
Respecto a lo otro que plateas de resolver ecuaciones, tengo una idea. Como no se pretende usar spice sino resolver el sistema de ecuaciones, y si tenemos elementos capacitivos y reactivos, vamos atener ecuciones integrodiferenciables, se resuelven fácilmente con algún método de integración numérica. Esto es relativamente sencillo. Las he resulto en matlab,scilab y phyton, en c también hay librerias para esto. El tema que no veo claro seria el incorporar elementos como los transistores.
Primero lo descargue pero no lo pude ejecutar tengo el siguiente msj:
- Código:
./simulide: error while loading shared libraries: libgpsim.so.0: wrong ELF class: ELFCLASS64
intuyo que es porque tengo un sistema de 64bits, aunque tengo instaladas librerias para correr las aplicaciones de 32.
Bueno al tener este error trato de compilar pero obtengo lo siguiente:
- Código:
make: *** No hay ninguna regla para construir el objetivo `/usr/share/qt4/mkspecs/linux-g++/qmake.conf', necesario para `Makefile'. Alto.
Tengo Gnome3, no se que deba instalar de Qt, algo instaldo tengo porque hay un par de alplicaciones Qt.
Respecto a lo otro que plateas de resolver ecuaciones, tengo una idea. Como no se pretende usar spice sino resolver el sistema de ecuaciones, y si tenemos elementos capacitivos y reactivos, vamos atener ecuciones integrodiferenciables, se resuelven fácilmente con algún método de integración numérica. Esto es relativamente sencillo. Las he resulto en matlab,scilab y phyton, en c también hay librerias para esto. El tema que no veo claro seria el incorporar elementos como los transistores.
Re: otro simulador
Que tal ars?
Si.. el error ese parece que es porque tienes gpsim 64 bits, entonces al ejecutable simulide que está compilado en mi maquina de 32 bits no le vale.
Aunque puedas ejecutar aplicaciones de 32 bits, creo que estas no pueden usar una librería de 64.
Una posiblidad sería conseguirte la librería gpsim de 32, no se si funcionaría esto, pero creo que sería lo más sencillo, para compilar tendrías que instalar algunas cosillas, primero compilar la librería simavr y luego simulide.
Para compilar simavr:
Las fuentes están en la carpeta include/simavr/ , ahi con make te vale, te crea la
librería: include/simavr/simavr/libsimavr.so que hay que copiar a:
simulide/lib/libsimavr.so
Para compilar simulide:
Tendrías que tener las librerías Qt para desarrollo y qmake (qt4-qmake >= 4.6.2).
Para compilar sería:
$ qmake
$ make
No hay que instalar, todo queda el la carpeta simulide y se ejecuta desde ahí.
Quizás lo más facil sería instalar Qt Creator, abrir el archivo de proyecto que hay en la carpeta raiz y compilar ahí.
Hay un README.txt en la carpeta raiz donde comento estas cosas y alguna cosilla más.
Respecto al tema de las ecuaciones, lo que he hecho es usar el sistema que he visto en otro programita.
Pero en general parece que para este tipo de simulaciones lo que se suele hacer es usar modelos discretos (aproximaciones lineales) para los elementos reactivos y los no lineales. Y crear un sistema de ecuaciones lineales.
En este caso todo queda en una matriz de admitancias y un vector de corrientes independientes. El algoritmo para sesolver el sistema lo he copiado literal de otro programita, funciona bien y es muy rápido. Todavía le faltaría añadirle un paso previo para simplificar la matriz que mejoraría la cosa.
Por ahora sólo tengo el condensador que usa aproximación trapezoidal, el inductor sería algo similar.
Con el diodo no me he complicado, creo que para este tipo de simulación no haría falta una aproximación "realista" y lo he hecho todo/nada, la idea es hacer simulaciones de microcontroladores, creo que la velocidad es lo principal y en el caso del diodo no le veo ventajas a hacer una aproximación al comportamiento real.
Con los transistores sí habría que hacerlo...
No sé... esta es una de las cosas en las que tengo dudas, mayor realismo implica menor velocidad.. ¿que es lo mejor en este caso?
Saludos.
Si.. el error ese parece que es porque tienes gpsim 64 bits, entonces al ejecutable simulide que está compilado en mi maquina de 32 bits no le vale.
Aunque puedas ejecutar aplicaciones de 32 bits, creo que estas no pueden usar una librería de 64.
Una posiblidad sería conseguirte la librería gpsim de 32, no se si funcionaría esto, pero creo que sería lo más sencillo, para compilar tendrías que instalar algunas cosillas, primero compilar la librería simavr y luego simulide.
Para compilar simavr:
Las fuentes están en la carpeta include/simavr/ , ahi con make te vale, te crea la
librería: include/simavr/simavr/libsimavr.so que hay que copiar a:
simulide/lib/libsimavr.so
Para compilar simulide:
Tendrías que tener las librerías Qt para desarrollo y qmake (qt4-qmake >= 4.6.2).
Para compilar sería:
$ qmake
$ make
No hay que instalar, todo queda el la carpeta simulide y se ejecuta desde ahí.
Quizás lo más facil sería instalar Qt Creator, abrir el archivo de proyecto que hay en la carpeta raiz y compilar ahí.
Hay un README.txt en la carpeta raiz donde comento estas cosas y alguna cosilla más.
Respecto al tema de las ecuaciones, lo que he hecho es usar el sistema que he visto en otro programita.
Pero en general parece que para este tipo de simulaciones lo que se suele hacer es usar modelos discretos (aproximaciones lineales) para los elementos reactivos y los no lineales. Y crear un sistema de ecuaciones lineales.
En este caso todo queda en una matriz de admitancias y un vector de corrientes independientes. El algoritmo para sesolver el sistema lo he copiado literal de otro programita, funciona bien y es muy rápido. Todavía le faltaría añadirle un paso previo para simplificar la matriz que mejoraría la cosa.
Por ahora sólo tengo el condensador que usa aproximación trapezoidal, el inductor sería algo similar.
Con el diodo no me he complicado, creo que para este tipo de simulación no haría falta una aproximación "realista" y lo he hecho todo/nada, la idea es hacer simulaciones de microcontroladores, creo que la velocidad es lo principal y en el caso del diodo no le veo ventajas a hacer una aproximación al comportamiento real.
Con los transistores sí habría que hacerlo...
No sé... esta es una de las cosas en las que tengo dudas, mayor realismo implica menor velocidad.. ¿que es lo mejor en este caso?
Saludos.
Re: otro simulador
Si disulpa, vi el README, pero no tenia bien en claro que era lo necesario de QT para tener. Depues voy a pobrar con eso.
Ahora bien,, ahora que me decís, porque la verdad que el código no me puse a verlo, tendría que empezar primeramente leyendo algo de c++, eso de la aproximacion del trapezoidal es uno de los tantos métodos de integración numérica. Se esta usando integración numérica como te proponía, sol que acá se remplazan directamente los elementos ya por su equivalente, mi idea era mas bien apartir de la red obtener el sistema de ecuaciones, pero en si es lo mismo.
A mi se me ocurria esto de plantear las ecuaciones de estado. Es lo que se hace siempre en una simulación de algún sistema.
vos planteas que es mejor un simulador que se aproxime mas a lo real o no. y eso va a depender del uso.
a mi se me ocurría la idea de poder agregar un sistema a la simulación, es decir incluir las ecuaciones de estado del sistema que estaría controlado por el micro. por ejemplo tengo un motor de continua y al que le quiero controlar la posición, y tengo cuales son las ecuaciones que lo gobiernan, directamente meter estas en el circuito como un bloque.
Te digo que es algo que interesa esto, tenia en mente algo como esto, pero se me escapa la programación para crear una gui tan compleja como la que es, me refiero al tema del capturador de esquema.
Esta todo realizado a partir de ktechlab? me refiero gui y simulación de componentes y la resolución que usas con la matriz.
Ahora bien,, ahora que me decís, porque la verdad que el código no me puse a verlo, tendría que empezar primeramente leyendo algo de c++, eso de la aproximacion del trapezoidal es uno de los tantos métodos de integración numérica. Se esta usando integración numérica como te proponía, sol que acá se remplazan directamente los elementos ya por su equivalente, mi idea era mas bien apartir de la red obtener el sistema de ecuaciones, pero en si es lo mismo.
A mi se me ocurria esto de plantear las ecuaciones de estado. Es lo que se hace siempre en una simulación de algún sistema.
vos planteas que es mejor un simulador que se aproxime mas a lo real o no. y eso va a depender del uso.
a mi se me ocurría la idea de poder agregar un sistema a la simulación, es decir incluir las ecuaciones de estado del sistema que estaría controlado por el micro. por ejemplo tengo un motor de continua y al que le quiero controlar la posición, y tengo cuales son las ecuaciones que lo gobiernan, directamente meter estas en el circuito como un bloque.
Te digo que es algo que interesa esto, tenia en mente algo como esto, pero se me escapa la programación para crear una gui tan compleja como la que es, me refiero al tema del capturador de esquema.
Esta todo realizado a partir de ktechlab? me refiero gui y simulación de componentes y la resolución que usas con la matriz.
Re: otro simulador
Si quieres compilar y además cambiar cosas, experimentar, etc. creo que lo mejor es instalar Qt Creator, creo que está en los repositorios de Ubuntu; se supone que esto te instala todas las dependencias.
Perdona pero yo no sé gran cosa de matemáticas ni de simulación de sistemas.
R = t/(2*C)
Donde t es el tiempo de un paso de simulación y C la capacitancia.
Como ves, es un valor fijo.
La fuente de corriente toma el valor (en cada paso):
I = V/R - Ip
Donde V es el voltaje entre los pines del condensador, R es la de arriba, Ip es la corriente en el paso anterior.
Osea para cada elemento reactivo o no-lineal usa un modelo equivalente basado en elementos lineales y se calculan sus valores cuando sea necesario.
Todos los componentes finalmente son resistencias y fuentes de corriente (por ejemplo modelo de condensador comentado antes).
A partir los valores de resistencia y fuentes de corriente de todos los componentes se crea un sistema de ecuaciones lineales en forma de matriz de admitancias y vector de fuentes de corriente y se resuelve, la solución es un vector de voltajes de cada nodo.
Como yo lo hago:
Cada nodo es informado por los componentes que tiene conectado de las admitancias hasta nodos adyacentes y de las fuentes de corriente.
Entonces el nodo a partir de todos estos datos crea su "ecuación" de admitancias: un vector de admitancias y un termino indepediente que es la suma de fuentes de corriente.
Cada nodo imprime en la matriz de admitancias su vector y en el vector de corrientes su termino independiente.
Osea... cada nodo se encarga de crear su ecuación, que luego "manda" al simulador, este resuelve el sistema formado por todas la ecuaciones.
El algoritmo que resuelve la matriz está sacado de este programa en Java:
https://pic-linux.forosactivos.net/h8-falstad_cirsim
Otra cosa es que el simulador es independiente de la gui y (casi) de Qt, osea que sería facil usarlo en otro programa con gui o sólo terminal o lo que sea... al menos esa es la idea.
Saludos.
Je je.. parece que estamos hablando más o menos de lo mismo.eso de la aproximacion del trapezoidal es uno de los tantos métodos de
integración numérica. Se esta usando integración numérica como te
proponía
Perdona pero yo no sé gran cosa de matemáticas ni de simulación de sistemas.
Si... por ejemplo el condensador se sustituye por una resistencia y una fuente de corriente en paralelo, en la aproximación trapezoidal la resistencia toma el valor:, sol que acá se remplazan directamente los elementos ya por su
equivalente
R = t/(2*C)
Donde t es el tiempo de un paso de simulación y C la capacitancia.
Como ves, es un valor fijo.
La fuente de corriente toma el valor (en cada paso):
I = V/R - Ip
Donde V es el voltaje entre los pines del condensador, R es la de arriba, Ip es la corriente en el paso anterior.
Osea para cada elemento reactivo o no-lineal usa un modelo equivalente basado en elementos lineales y se calculan sus valores cuando sea necesario.
No estoy muy seguro de a que te refieres. Te comento como está ahora el tema:, mi idea era mas bien apartir de la red obtener el sistema
de ecuaciones, pero en si es lo mismo.
Todos los componentes finalmente son resistencias y fuentes de corriente (por ejemplo modelo de condensador comentado antes).
A partir los valores de resistencia y fuentes de corriente de todos los componentes se crea un sistema de ecuaciones lineales en forma de matriz de admitancias y vector de fuentes de corriente y se resuelve, la solución es un vector de voltajes de cada nodo.
Como yo lo hago:
Cada nodo es informado por los componentes que tiene conectado de las admitancias hasta nodos adyacentes y de las fuentes de corriente.
Entonces el nodo a partir de todos estos datos crea su "ecuación" de admitancias: un vector de admitancias y un termino indepediente que es la suma de fuentes de corriente.
Cada nodo imprime en la matriz de admitancias su vector y en el vector de corrientes su termino independiente.
Osea... cada nodo se encarga de crear su ecuación, que luego "manda" al simulador, este resuelve el sistema formado por todas la ecuaciones.
Ni idea de lo que es esto...A mi se me ocurria esto de plantear las ecuaciones de estado. Es lo que se hace siempre en una simulación de algún sistema.
Esto vas a tener que explicármelo, si es con un ejemplo sencillo mejor...a mi se me ocurría la idea de poder agregar un sistema a la simulación,
es decir incluir las ecuaciones de estado del sistema que estaría
controlado por el micro. por ejemplo tengo un motor de continua y al que
le quiero controlar la posición, y tengo cuales son las ecuaciones que
lo gobiernan, directamente meter estas en el circuito como un bloque.
No.. de Ktechlab hay algunas ideas, pero la gui está casi todo escrito desde 0.Te digo que es algo que interesa esto, tenia en mente algo como esto,
pero se me escapa la programación para crear una gui tan compleja como
la que es, me refiero al tema del capturador de esquema.
Esta todo realizado a partir de ktechlab? me refiero gui y simulación de componentes y la resolución que usas con la matriz.
El algoritmo que resuelve la matriz está sacado de este programa en Java:
https://pic-linux.forosactivos.net/h8-falstad_cirsim
Otra cosa es que el simulador es independiente de la gui y (casi) de Qt, osea que sería facil usarlo en otro programa con gui o sólo terminal o lo que sea... al menos esa es la idea.
Saludos.
Re: otro simulador
Hola,
justamente este año estoy haciendo una asignatura de simulación de sistemas que junto a la de modelado que ya me he sacado me viene que ni pintado para el caso. A ver si podemos entre todos aclarar un poco conceptos.
El primer paso es sacar todas las ecuaciones de estado. En un condensador por ejemplo (si recuerdo bien) :
i=(1/C)dV/dt
Como bien decis con componentes lineales pero dinámicos como las bobinas y condensadores son siempre ecuaciones diferenciales y cuando se intenta resolver los problemas vienen las pegas. La solución es pasar la ecuación diferencial a ecuación en diferencias, es decir discretizar, mediante la Transformada Z.
El ejemplo quedaría de la siguiente forma
I*t=(1/C)V
Que viene siendo equivalente a lo que has hecho tu Pikitin, intentaré informarme más cuando tenga tiempo.
Un saludo
PD:Los distintos metodos de Transformada Z tienen su equivalente en metodos de integración numérica que es lo que se utiliza en el fondo. Espero no haber asustado a nadie, solo pretendía poner un poco de orden en el tema y no se si he conseguido todo lo contrario, pero es un tema que hay que mirar con detenimiento.
El siguiente paso ya sería mirar los componentes activos como diodos, transistores...que aun no tengo claro del todo.
justamente este año estoy haciendo una asignatura de simulación de sistemas que junto a la de modelado que ya me he sacado me viene que ni pintado para el caso. A ver si podemos entre todos aclarar un poco conceptos.
El primer paso es sacar todas las ecuaciones de estado. En un condensador por ejemplo (si recuerdo bien) :
i=(1/C)dV/dt
Como bien decis con componentes lineales pero dinámicos como las bobinas y condensadores son siempre ecuaciones diferenciales y cuando se intenta resolver los problemas vienen las pegas. La solución es pasar la ecuación diferencial a ecuación en diferencias, es decir discretizar, mediante la Transformada Z.
El ejemplo quedaría de la siguiente forma
I*t=(1/C)V
Que viene siendo equivalente a lo que has hecho tu Pikitin, intentaré informarme más cuando tenga tiempo.
Un saludo
PD:Los distintos metodos de Transformada Z tienen su equivalente en metodos de integración numérica que es lo que se utiliza en el fondo. Espero no haber asustado a nadie, solo pretendía poner un poco de orden en el tema y no se si he conseguido todo lo contrario, pero es un tema que hay que mirar con detenimiento.
El siguiente paso ya sería mirar los componentes activos como diodos, transistores...que aun no tengo claro del todo.
Re: otro simulador
Si pickitik, la idea de como se simula la había entendido, básicamente usa el método de nudos y se hace la integración numérica(en ralidad se reemplazan los componentes por su equivalente).
Despues voy a ver si te puedo aclarar un poco mejor en base a o que yo pensaba. De todos modos para la idea principal, que tenia tu proyecto de lo forma que lo haces creo es mas que aceptable. Mi idea es mas compleja por como te dije la inclusión de sistemas a travez de su función transferencia o las ecuaciones de estado, propuse eso por el echo de que no se queria utilizar spice.
A mi me gusta mas la idea de ver de integrarlo con spice, por le echo de que ya esta todo echo ahí y es algo que se usa.
@litox9 la transformada Z se aplica a sistemas discretos, no podes aplicarla a la ley del capacitor porque es un elemento continuo(el analogo de transformada en tiempo continuo es la transformada de laplace, pero no es rentable pasar al dominio frecuencial y luego volver al temporal para dar los datos de interés), lo que se esta haciendo es una aproximación numérica, no se esta aplicando ninguna transformada.
Despues voy a ver si te puedo aclarar un poco mejor en base a o que yo pensaba. De todos modos para la idea principal, que tenia tu proyecto de lo forma que lo haces creo es mas que aceptable. Mi idea es mas compleja por como te dije la inclusión de sistemas a travez de su función transferencia o las ecuaciones de estado, propuse eso por el echo de que no se queria utilizar spice.
A mi me gusta mas la idea de ver de integrarlo con spice, por le echo de que ya esta todo echo ahí y es algo que se usa.
@litox9 la transformada Z se aplica a sistemas discretos, no podes aplicarla a la ley del capacitor porque es un elemento continuo(el analogo de transformada en tiempo continuo es la transformada de laplace, pero no es rentable pasar al dominio frecuencial y luego volver al temporal para dar los datos de interés), lo que se esta haciendo es una aproximación numérica, no se esta aplicando ninguna transformada.
Re: otro simulador
Hola Litox, a mi todo lo que sea aclarar conceptos me viene bien, las matemáticas duras me quedan grandes, pero las explicaciones de donde vienen las cosas si me interesan.
Si.. el diodo creo que es más complejo, por eso opté por algo sencillo, en este caso tampoco veo necesario algo tan preciso.
El transistor si que habría que verlo.
Ars... lo de integrar con spice lo estuve mirando, pero no encontré forma de hacerlo que no fuera por linea de comandos. A veces es más complicado entender como funciona otro programa y utilizar sólo lo que necesitas que escribir todo desde el principio.
Tambien creo que es mejor que quede algo lo más pequeño posible y proporcional al uso que se le va a dar.
Y me gustaría entender de que vá tu planteamiento, a ver si consigues explicar aunque sea la idea general.
Si te interesa la Gui para tus proyectos, en principio creo que se podría adaptar más o menos facilmente a otros usos. Por ahí también tengo la versión sin editor. Cualquier cosa me dices.
Si.. el diodo creo que es más complejo, por eso opté por algo sencillo, en este caso tampoco veo necesario algo tan preciso.
El transistor si que habría que verlo.
Ars... lo de integrar con spice lo estuve mirando, pero no encontré forma de hacerlo que no fuera por linea de comandos. A veces es más complicado entender como funciona otro programa y utilizar sólo lo que necesitas que escribir todo desde el principio.
Tambien creo que es mejor que quede algo lo más pequeño posible y proporcional al uso que se le va a dar.
Y me gustaría entender de que vá tu planteamiento, a ver si consigues explicar aunque sea la idea general.
Si te interesa la Gui para tus proyectos, en principio creo que se podría adaptar más o menos facilmente a otros usos. Por ahí también tengo la versión sin editor. Cualquier cosa me dices.
Re: otro simulador
MIra te pongo un ejemplo de lo que seria las ecuaciones de estado aplicadas a un simple circuito RLC serie:
Las ecuaciones que se tienen son:
Y que en forma de ecuaciones de estado es de la forma:
la ultima, la corresponde al vector salida, en este caso se quiere conocer la tesion sobre la resistencia y sobre la inductancia. El primer vector es en el que esta toda la información y dinámica del sistema.
Con esas matrices y algún método de integración directamente se obtiene la respuesta del sistema.
Mi idea seria poder incorporar otros sistemas que tengan que ver con la simulación , como decía si con el micro se quiere controlar la posición de un motor, se puede incorporar como un conjunto de ecuaciones de estado al motor y así simular todo el sistema completo.
Estaba leyendo algo de lo que anteriormente publiscate de spice, y vi que se puede tener como libreria, cuando pueda lo miro mas detenidamente.
PD. ahora que estoy pensando talvez hacerlo asi el circ se complica un poco , creo que como vos lo planteaste perfectamente podria convivir para lo que seria la simulación de un sistema dado por sus ecuaciones de estado, pero habría que ir conmutando entra cada uno en cada paso, para ir generando los vectores. Creo que se tendria que hacer tambine lo mismo para hacer la union del core de gpsim con spice.
Las ecuaciones que se tienen son:
Y que en forma de ecuaciones de estado es de la forma:
la ultima, la corresponde al vector salida, en este caso se quiere conocer la tesion sobre la resistencia y sobre la inductancia. El primer vector es en el que esta toda la información y dinámica del sistema.
Con esas matrices y algún método de integración directamente se obtiene la respuesta del sistema.
Mi idea seria poder incorporar otros sistemas que tengan que ver con la simulación , como decía si con el micro se quiere controlar la posición de un motor, se puede incorporar como un conjunto de ecuaciones de estado al motor y así simular todo el sistema completo.
Estaba leyendo algo de lo que anteriormente publiscate de spice, y vi que se puede tener como libreria, cuando pueda lo miro mas detenidamente.
PD. ahora que estoy pensando talvez hacerlo asi el circ se complica un poco , creo que como vos lo planteaste perfectamente podria convivir para lo que seria la simulación de un sistema dado por sus ecuaciones de estado, pero habría que ir conmutando entra cada uno en cada paso, para ir generando los vectores. Creo que se tendria que hacer tambine lo mismo para hacer la union del core de gpsim con spice.
Re: otro simulador
Hola de nuevo,
La primera es que la transformada de Laplace no representa el dominio frecuencial, si no el dominio de Laplace, que es útil para operar con ecuaciones diferenciales, el dominio frecuencial es solo cuando sustituyes por jw.
La segunda, que sí se puede pasar cualquier cosa a discreto y de hecho se hace cuando se diseñan reguladores en computadores puesto que todos los computadores trabajan en discreto. Lo que se consigue es una aproximación, claro.
Como nuesto caso es simular un sistema continuo dentro de un sistema discreto es necesario discretizar, utilizando este sistema sería posible poner cualquier sistema, con sus ecuaciones en discreto, más manejables para el ordenador que las de continuo.
En el ejemplo que has puesto por ejemplo sustituiriamos las derivadas por k+1 y las t por k, donde k es el instante de tiempo actual y k+1 el futuro, quedando:
u(k+1) = (1/C)i(k)
i(k+1) = -(1/L)uc(k)+(R/L)i(k)+(1/L)v(k)
Como queremos saber las ecuaciones respecto del instante anterior, porque el futuro no podemos conocerlo , le restamos 1 a todos los k.
u(k) = [1/C]i(k+1)
i(k) = -[1/L]uc(k-1)+[R/L]i(k-1)+[1/L]v(k-1)
Para las ecuaciones de salida haríamos lo mismo, y se podria pasar todo a notación matricial como has hecho tu.
Como veis esto es facilmente resoluble por un computador y es posible ir calculando puntos de manera rapida.
De todas formas ahora que veo mis apuntes mejor, los metodos de integración son algo parecido pero no igual :S
Esto sería equivalente que lo se conoce como método de integración Forward Euler.
Si quereis profundizar un poco mas, os paso los apuntes que yo tengo donde está todo mejor explicado, pero eso sí, con matemáticas mas complejas.
Vaya royazo, ya os explicaré en otro mensaje mi idea para Diodos y transistores.
Un saludo
No estoy de acuerdo en varias cosas:@litox9 la transformada Z se aplica a sistemas discretos, no podes
aplicarla a la ley del capacitor porque es un elemento continuo(el
analogo de transformada en tiempo continuo es la transformada de
laplace, pero no es rentable pasar al dominio frecuencial y luego volver
al temporal para dar los datos de interés), lo que se esta haciendo es
una aproximación numérica, no se esta aplicando ninguna transformada.
La primera es que la transformada de Laplace no representa el dominio frecuencial, si no el dominio de Laplace, que es útil para operar con ecuaciones diferenciales, el dominio frecuencial es solo cuando sustituyes por jw.
La segunda, que sí se puede pasar cualquier cosa a discreto y de hecho se hace cuando se diseñan reguladores en computadores puesto que todos los computadores trabajan en discreto. Lo que se consigue es una aproximación, claro.
Como nuesto caso es simular un sistema continuo dentro de un sistema discreto es necesario discretizar, utilizando este sistema sería posible poner cualquier sistema, con sus ecuaciones en discreto, más manejables para el ordenador que las de continuo.
En el ejemplo que has puesto por ejemplo sustituiriamos las derivadas por k+1 y las t por k, donde k es el instante de tiempo actual y k+1 el futuro, quedando:
u(k+1) = (1/C)i(k)
i(k+1) = -(1/L)uc(k)+(R/L)i(k)+(1/L)v(k)
Como queremos saber las ecuaciones respecto del instante anterior, porque el futuro no podemos conocerlo , le restamos 1 a todos los k.
u(k) = [1/C]i(k+1)
i(k) = -[1/L]uc(k-1)+[R/L]i(k-1)+[1/L]v(k-1)
Para las ecuaciones de salida haríamos lo mismo, y se podria pasar todo a notación matricial como has hecho tu.
Como veis esto es facilmente resoluble por un computador y es posible ir calculando puntos de manera rapida.
De todas formas ahora que veo mis apuntes mejor, los metodos de integración son algo parecido pero no igual :S
Esto sería equivalente que lo se conoce como método de integración Forward Euler.
Si quereis profundizar un poco mas, os paso los apuntes que yo tengo donde está todo mejor explicado, pero eso sí, con matemáticas mas complejas.
Vaya royazo, ya os explicaré en otro mensaje mi idea para Diodos y transistores.
Un saludo
Re: otro simulador
Vamos por partes.
Vos dijiste:
Ahora volviendo al equivalente discreto, si a este le aplicas la transformada Z para algo es otro tema ese.
Por otra parte cuado quisiste aproximar la derivada de la tension del capacitor con el metodo de Forward Euler, lo hiciste mal pusiste(en realidad dijiste que hiciste algo parecido, pero tampoco es asi):
una derivada con el método de integración de forwar euler se aproxima como:
por lo que la ecuación en diferencias de la tensión del capacitor termina siendo:
Te falto el termino que depende del paso de integración. Que es el intervalo de tiempo entre muestras.
Ahora yendo al transistor se podría usar el modelo de ebers y molls, que a diferencias de otros es mas general, no es un modelo en señal.
Por lo que pude leer de Spice, para capacitores e inductancias usa el equivalente discreto, y para transistores bjt, por ejemplo, primero determina el punto de polarización y luego usa un modelo en señal.
Actualizo:Mira pickitin, encontre un pdf que detalla los modelos usados por spice, y dentro de los que usa para el bjt esta el de ebers y molls, que es el mas secillo y de seguro el mas adecuado para tu simulador. Hay modelos para otros semiconductores mas, los de pequeña señal como lo tenes implementado no te servirían.(si te interesa lo subo, lo iba a poner aquí pero veo no encuentro la opción para adjuntar un archivo)
El dominio frecuencial o domino de Laplace es el mismo, porque s, es la frecuencia compleja.litox9 escribió:Hola de nuevo,No estoy de acuerdo en varias cosas:@litox9 la transformada Z se aplica a sistemas discretos, no podes
aplicarla a la ley del capacitor porque es un elemento continuo(el
analogo de transformada en tiempo continuo es la transformada de
laplace, pero no es rentable pasar al dominio frecuencial y luego volver
al temporal para dar los datos de interés), lo que se esta haciendo es
una aproximación numérica, no se esta aplicando ninguna transformada.
La primera es que la transformada de Laplace no representa el dominio frecuencial, si no el dominio de Laplace, que es útil para operar con ecuaciones diferenciales, el dominio frecuencial es solo cuando sustituyes por jw.
Segundo, yo nunca dije que no se podia pasar a discreto, sino todo lo contrario, le dije que si se puede y que se hace.litox9 escribió:
La segunda, que sí se puede pasar cualquier cosa a discreto y de hecho se hace cuando se diseñan reguladores en computadores puesto que todos los computadores trabajan en discreto. Lo que se consigue es una aproximación, claro.
Como nuesto caso es simular un sistema continuo dentro de un sistema discreto es necesario discretizar, utilizando este sistema sería posible poner cualquier sistema, con sus ecuaciones en discreto, más manejables para el ordenador que las de continuo.
En el ejemplo que has puesto por ejemplo sustituiriamos las derivadas por k+1 y las t por k, donde k es el instante de tiempo actual y k+1 el futuro, quedando:
u(k+1) = (1/C)i(k)
i(k+1) = -(1/L)uc(k)+(R/L)i(k)+(1/L)v(k)
Como queremos saber las ecuaciones respecto del instante anterior, porque el futuro no podemos conocerlo , le restamos 1 a todos los k.
u(k) = [1/C]i(k+1)
i(k) = -[1/L]uc(k-1)+[R/L]i(k-1)+[1/L]v(k-1)
Para las ecuaciones de salida haríamos lo mismo, y se podria pasar todo a notación matricial como has hecho tu.
Como veis esto es facilmente resoluble por un computador y es posible ir calculando puntos de manera rapida.
De todas formas ahora que veo mis apuntes mejor, los metodos de integración son algo parecido pero no igual :S
Esto sería equivalente que lo se conoce como método de integración Forward Euler.
Si quereis profundizar un poco mas, os paso los apuntes que yo tengo donde está todo mejor explicado, pero eso sí, con matemáticas mas complejas.
Vaya royazo, ya os explicaré en otro mensaje mi idea para Diodos y transistores.
Un saludo
Vos dijiste:
A lo que yo respondi, que con la transformada Z no discretizas ningun sistema continuo. De echo la transformada Z se aplica sobre un sistema discreto al que lo llevas a un dominio continuo.Como bien decis con componentes lineales pero dinámicos como las bobinas
y condensadores son siempre ecuaciones diferenciales y cuando se
intenta resolver los problemas vienen las pegas. La solución es pasar la
ecuación diferencial a ecuación en diferencias, es decir discretizar,
mediante la Transformada Z.
Ahora volviendo al equivalente discreto, si a este le aplicas la transformada Z para algo es otro tema ese.
Por otra parte cuado quisiste aproximar la derivada de la tension del capacitor con el metodo de Forward Euler, lo hiciste mal pusiste(en realidad dijiste que hiciste algo parecido, pero tampoco es asi):
u(k+1) = (1/C)i(k)
una derivada con el método de integración de forwar euler se aproxima como:
por lo que la ecuación en diferencias de la tensión del capacitor termina siendo:
Te falto el termino que depende del paso de integración. Que es el intervalo de tiempo entre muestras.
Ahora yendo al transistor se podría usar el modelo de ebers y molls, que a diferencias de otros es mas general, no es un modelo en señal.
Por lo que pude leer de Spice, para capacitores e inductancias usa el equivalente discreto, y para transistores bjt, por ejemplo, primero determina el punto de polarización y luego usa un modelo en señal.
Actualizo:Mira pickitin, encontre un pdf que detalla los modelos usados por spice, y dentro de los que usa para el bjt esta el de ebers y molls, que es el mas secillo y de seguro el mas adecuado para tu simulador. Hay modelos para otros semiconductores mas, los de pequeña señal como lo tenes implementado no te servirían.(si te interesa lo subo, lo iba a poner aquí pero veo no encuentro la opción para adjuntar un archivo)
Re: otro simulador
Hola,
Explico mi idea para hacer diodos y transistores. La idea es hacerlo todo lo mas sencillo posible, por ejemplo los diodos con una tensión de codo y ya está. Y como el simulador es principalmente digital utilizar los transistores en conmutación, no se me ocurre hoy en dia ninguna aplicación que utilice transistores como amplificadores, unicamente el caso de amplificadores de sonido analógicos, para todo lo demás ya tenemos amplificadores operacionales y de instrumentación.
Por lo tanto sería calcular el circuito con todo en circuito abierto, comprobar los diodos y transistores que se polarizan y recalcular el circuito con esos nuevos valores sustituyendo diodos y transistores por fuentes por fuentes de tensión. Obteniendo un modelo de ebers-molls simplificado.
No se ahora mismo como tienes implementado los pines de los microcontroladores, pero sería algo parecido, dividir el programa en dos partes, la digital y la analógica, incluso se podria para paralelizar este proceso en dos hilos de ejecución diferentes aprovechando que los ordenadores de ahora tienen varios nucleos, pienso que un programa así tendria una eficiencia mucho mayor y no tendría los problemas de KTechLab cuando te ponías a simular analógico, que se volvía loco.
Mi error ha sido juntar dos cosas distintas, no es lo mismo simular un sistema continuo mediante euler por ejemplo que simular un sistema continuo discretizado.Por otra parte cuado quisiste aproximar la derivada de la tension del
capacitor con el metodo de Forward Euler, lo hiciste mal pusiste(en
realidad dijiste que hiciste algo parecido, pero tampoco es asi):
u(k+1) = (1/C)i(k)
una derivada con el método de integración de forwar euler se aproxima como:
por lo que la ecuación en diferencias de la tensión del capacitor termina siendo:
Te falto el termino que depende del paso de integración. Que es el intervalo de tiempo entre muestras.
Explico mi idea para hacer diodos y transistores. La idea es hacerlo todo lo mas sencillo posible, por ejemplo los diodos con una tensión de codo y ya está. Y como el simulador es principalmente digital utilizar los transistores en conmutación, no se me ocurre hoy en dia ninguna aplicación que utilice transistores como amplificadores, unicamente el caso de amplificadores de sonido analógicos, para todo lo demás ya tenemos amplificadores operacionales y de instrumentación.
Por lo tanto sería calcular el circuito con todo en circuito abierto, comprobar los diodos y transistores que se polarizan y recalcular el circuito con esos nuevos valores sustituyendo diodos y transistores por fuentes por fuentes de tensión. Obteniendo un modelo de ebers-molls simplificado.
No se ahora mismo como tienes implementado los pines de los microcontroladores, pero sería algo parecido, dividir el programa en dos partes, la digital y la analógica, incluso se podria para paralelizar este proceso en dos hilos de ejecución diferentes aprovechando que los ordenadores de ahora tienen varios nucleos, pienso que un programa así tendria una eficiencia mucho mayor y no tendría los problemas de KTechLab cuando te ponías a simular analógico, que se volvía loco.
Re: otro simulador
Si, así es cómo está ahora.por ejemplo los diodos con una tensión de codo y ya está.
Esto no lo tengo tan claro, por ejemplo están los transistores de potencia, ahora mismo estoy con una pequeña fuente de alimentación digital y uso un PNP governado por un operacional y este por un pwm del Pic. Para simular esto haría falta un modelo que al menos aproximara el comportamiento del transistor.Y como el simulador es principalmente digital utilizar los transistores
en conmutación, no se me ocurre hoy en dia ninguna aplicación que
utilice transistores como amplificadores, unicamente el caso de
amplificadores de sonido analógicos, para todo lo demás ya tenemos
amplificadores operacionales y de instrumentación.
Luego están los diodos BE Y BC, en un NPN si pones el colector más negativo que la base pasa corriente...
No sé exactamente cómo sería el modelo que planteas, si pudieras concretar algo mas...
Yo estaba pensando en dos diodos BE y BC y otro diodo CE que tendriá un umbral de 0,2 V(+o-) y que la impedancia de este fuera controlada por la corriente de base:
Rce = Vce/(Ibe*hfe)
Que es lo mismo que decir: Ice = Ibe*hfe
Osea este diodo CE daría la caida de tensión CE y serviría para controlar la corriente CE pero a traves de su impedancia.
Desde el punto de vista de la programación sería usar 3 diodos que ya están programados, conectarlos a los pines correspondientes y dejar que estos trabajen.
Lo único que tendría que hacer el transistor es ajustar la impedancia del diodo CE según la corriente BE.
¿Sería correcto esto o es muy cuenta-la-vieja?
Por ahora los pines son fuentes de tensión, con su impedancia según sean salidas o entradas.No se ahora mismo como tienes implementado los pines de los
microcontroladores, pero sería algo parecido, dividir el programa en dos
partes, la digital y la analógica, incluso se podria para paralelizar
este proceso en dos hilos de ejecución diferentes aprovechando que los
ordenadores de ahora tienen varios nucleos, pienso que un programa así
tendria una eficiencia mucho mayor y no tendría los problemas de
KTechLab cuando te ponías a simular analógico, que se volvía loco.
Lo de separar digital de analogico no lo veo claro, precisamente una de las complicaciones de ktechlab era esta división. Es que no le veo la ventaja...
Lo de usar varios hilos estaría bién pero habría que controlar todos los puntos donde varios hilos puedan estar accediendo a los mismos sitios a la vez para que no haya problemas. Con las pruebas que he hecho otras veces siempre he tenido problemas, pero igual estudiandolo bien sería una ventaja.
Pero yo usaría hilos de otra manera, por ejemplo el principal con la GUI, otro para el circuito, otro para el microcontrolador y quizás otros para algún otro dispositivo que sea algo complicado.
Qt tiene soporte para threads, pero hay que ver bien como funciona el tema.
Re: otro simulador
El modelo que te plantee de eber y molls te viene al pelo para eso. Tiene dos diodos y dos fuentes de corriente controladas. Pero te va a convenir ya modelizar al diodo de otra forma. para que luego tu modelo del bjt tenga mas realismo.Pikitin escribió:
Esto no lo tengo tan claro, por ejemplo están los transistores de potencia, ahora mismo estoy con una pequeña fuente de alimentación digital y uso un PNP governado por un operacional y este por un pwm del Pic. Para simular esto haría falta un modelo que al menos aproximara el comportamiento del transistor.
Luego están los diodos BE Y BC, en un NPN si pones el colector más negativo que la base pasa corriente...
No sé exactamente cómo sería el modelo que planteas, si pudieras concretar algo mas...
Yo estaba pensando en dos diodos BE y BC y otro diodo CE que tendriá un umbral de 0,2 V(+o-) y que la impedancia de este fuera controlada por la corriente de base:
Rce = Vce/(Ibe*hfe)
Que es lo mismo que decir: Ice = Ibe*hfe
Osea este diodo CE daría la caida de tensión CE y serviría para controlar la corriente CE pero a traves de su impedancia.
Desde el punto de vista de la programación sería usar 3 diodos que ya están programados, conectarlos a los pines correspondientes y dejar que estos trabajen.
Lo único que tendría que hacer el transistor es ajustar la impedancia del diodo CE según la corriente BE.
¿Sería correcto esto o es muy cuenta-la-vieja?
Página 2 de 2. • 1, 2
Temas similares
» simulador pic en java
» Simulador integra Arduino
» SimulIDE Simulador de circuitos Pic, Avr y Arduino
» Otro de GAMBAS con el puerto serie
» Cambiar de un código a otro de PIC. Temprorizador.
» Simulador integra Arduino
» SimulIDE Simulador de circuitos Pic, Avr y Arduino
» Otro de GAMBAS con el puerto serie
» Cambiar de un código a otro de PIC. Temprorizador.
Página 2 de 2.
Permisos de este foro:
No puedes responder a temas en este foro.