7 votos

LTSpice: ¿Cómo variar las resistencias en una simulación dependiendo del valor de un voltaje?

Estoy tratando de implementar el El modelo Hodgkin-Huxley para simular neuronas usando LTSpice. Una característica de este modelo es que las resistencias en un momento dado dependen en realidad del voltaje transmembrana en ese momento. ¿Hay alguna manera, en el LTSpice, de cambiar los valores de las resistencias dinámicamente en una simulación?

Puedo encontrar respuestas sobre cómo variar el valor de una resistencia en incrementos predefinidos durante una simulación. Sin embargo, este enfoque no funcionará en este caso, porque no conozco estos incrementos antes de que comience la simulación. Más bien, deben ser recalculados dinámicamente a partir de un voltaje particular. ¿Tiene el LTSpice (o cualquier otra versión de Spice, para el caso) esta capacidad?

Para ser más específico sobre lo que implica el modelo Hodgkin-Huxley, el código de simulación que necesito se reduce básicamente a this schematic donde las g's representan las conductas, las E's son todos voltajes constantes, gL es constante, y las otras conductas se actualizan de acuerdo a these equations :

donde m, n y h son variables de estado, y Vm es el voltaje transmembrana (el voltaje entre Istim+ e Istim- en el esquema anterior). Los alfa y los beta son funciones conocidas del voltaje transmembrana.

En particular, necesito poder hacer un seguimiento de los "valores actuales" de los parámetros m, n y h durante la simulación porque el próximo valor de estas variables dependerá de ellos.

0 votos

¿Puede dar un ejemplo más explícito de lo que quiere? Suena como si quisieras establecer la resistencia a una variable {X}, y tener {X} para ser una función de otro valor, digamos el voltaje en el nodo 012 o algo así? Me he estado preguntando si eso es posible, pero todavía no sé cómo.

0 votos

Digamos que se puede variar la resistencia con un voltaje. Qué haces con esa resistencia variable, es decir, qué señal o tensión controla. Lo pregunto porque puede haber una manera de hacer esto que está un poco fuera del centro.

0 votos

He editado el OP para dar los detalles del modelo que quiero simular.

9voto

AitorTheRed Puntos 241

No he dedicado mucho tiempo a considerar un método para esto. Pero suena como si usted puede tener una función arbitraria que calcula \$R\$ en función de una tensión aplicada \$V\$ .


Podrías usar el .FUNC de LTSpice para hacer algo así:

.FUNC MYFUNC(A) {3*A}

(Es una función aleatoria para ilustrar la idea).

Entonces podrías simplemente soltar una resistencia, que por defecto tendrá un valor de "R". Ahora, haz clic con el botón derecho del ratón sobre la "R" y obtendrás un aviso que te permitirá cambiarla. El cuadro de diálogo debe ser titulado "Introduzca un nuevo valor para Rx". Introduzca "R={MYFUNC(V(N005,N006))}" o algo parecido (si conoce los nombres de los nodos, utilícelos).

Por cierto, no tienes que usar .FUNC. Puedes simplemente introducir la fórmula directamente en la expresión "R={...}" allí.


Sin embargo, el método anterior tiene al menos un problema. Los nombres de los nodos tendrán que ser codificados. Así que esto puede ser un problema a medida que avanza en un circuito y quiere que la "resistencia" tenga su valor dependiente únicamente de una función compleja de la tensión impresa en ella, independientemente de los nombres de los nodos globales del circuito. Para eso, yo iría con un enfoque .SUBCKT.

Aquí, sólo tendrías que bajar una nueva R como siempre haces. A continuación, ctrl-derecha-clic en el símbolo R. Edita el "Prefijo" a "X", modifica "InstName" para especificar "X1" o "X2" o algo así, deshazte de la entrada "Valor" (edítala y bórrala), y modifica la entrada "SpiceLine" para especificar un nombre de subcircuito de tu elección. Ahora tienes un bonito símbolo de subcircuito que parece una resistencia, pero LTSpice piensa que es un subcircuito.

Ahora sólo tienes que añadir un subcircuito. Pulsa "S" y aparecerá el cuadro de diálogo de la directiva Spice. Ahora introduce algo como esto (estoy usando el nombre del subcircuito de "XYZ" aquí):

.SUBCKT XYZ 1 2
GRES 1 2 VALUE={1.0/(10k*V(1,2))}
.ENDS

Lo que he hecho arriba es utilizar un dispositivo "G". Este dispositivo puede ahora mirar sus propios terminales, obtener el voltaje de ellos, y luego calcular alguna corriente basada en eso. En la fórmula anterior, decidí que quería imitar una resistencia cuya magnitud de resistencia es, ignorando el análisis dimensional por ahora, \$R=V^2\cdot 10\:\textrm{k}\Omega\$ . (He elevado al cuadrado la tensión para que el resultado sea siempre positivo o cero. Permitir el cero probablemente no es la mejor idea. Así que tenlo en cuenta). Teniendo en cuenta esto, puedes calcular que la corriente debería ser \$\frac{V}{V^2\cdot 10\:\textrm{k}\Omega}=\frac{1}{V\cdot 10\:\textrm{k}\Omega}\$ . Así es como obtuve la ecuación a utilizar allí.


Puedes hacer combinaciones. Puedes crear funciones .FUNC separadas y utilizarlas dentro de tu subcircuito. También puedes hacer el subcircuito tan complicado como quieras.

0 votos

Su punto sobre asegurarse de que el valor es siempre positivo o cero es excelente y merece un gran énfasis. Es muy fácil entrar en problemas de estabilidad del solucionador con fuentes de comportamiento si no se tiene cuidado.

0 votos

Puedes nombrar nodos con la tecla f4, seguro que lo sabes pero no estaba escrito en tu post

0 votos

@laptop2d Lo sé. Pensé en añadir una discusión sobre ese punto, también. Pero me di cuenta de que es MUCHO MEJOR usar un subcircuito "X", en su lugar. Ahora usted tiene acceso a sus propios terminales, no importa cómo se colocan en un esquema. Así que perdí mi tiempo en eso, en su lugar.

1voto

introp Puntos 207

Utilice Fuentes de comportamiento y Expresiones para definir una fuente de tensión de comportamiento donde la tensión es proporcional a la corriente, pero la "constante de proporcionalidad" varía con otras tensiones.

La Ley de Ohm pasa de la forma simple:

$$V_x = I_x \cdot R_x$$

a una forma en la que dejamos que la resistencia sea una función de otros voltajes o corrientes en el circuito:

$$V_x = I_x \cdot f(v_a,v_b,i_j,i_k,\dots)$$

He aquí un ejemplo rápido:

schematic

simular este circuito - Esquema creado con CircuitLab

Abra el circuito en CircuitLab para simularlo. En este ejemplo hemos definido V3 para que sea una fuente de tensión de comportamiento con la expresión:

$$V_{\text{V3}} = I_{\text{V3}} \cdot 100 \ V(\text{control})$$

Como la tensión del elemento es proporcional a la corriente del mismo elemento, parece una resistencia, con resistencia efectiva:

$$R_{\text{eff}} = 100 \ V(\text{control})$$

Si ejecutas esta simulación, obtendrás los gráficos de corriente y tensión esperados para el divisor de tensión resistivo que varía con el tiempo: behavioral sources simulate varying resistance in CircuitLab

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X