Uso de modelos Spice/PSpice (optoacoplador Vishay) en LTSpice

Estoy tratando de usar los modelos de especias proporcionados por Vishay del optoacoplador de alta velocidad 6N137 en LTSpice. (Fuente: http://www.vishay.com/optocouplers/list/product-84732/ )

Sin embargo, tanto el modelo "PSpice" como el modelo "Spice" fallan.

Con el modelo "PSpice":

WARNING: Can't resolve .param dpwr=$g_dpwr
WARNING: Can't resolve .param dgnd=$g_dgnd
Fatal Error: Port(pin) count mismatch between the definition of subcircuit "and2" and instance: "xx1:u2"
The instance has more connection terminals than the definition.

Con el modelo "Spice":

Too few nodes: au1.a [1] [du1.a] adc_a

¿Qué debo hacer para que cualquiera de estos funcione en LTSpice?

¿Está por casualidad ya incluido en ltwiki.org/files/LargeCollection.zip , de ltwiki.org/?title=Components_Library_and_Circuits . Es un muy buen recurso. De lo contrario, ¿puede construir su componente desde cero, definir sus puertos, darles nombres y agregar su modelo, según zen22142.zen.co.uk/ltspice/newsymbols.htm ?
puedes publicar el esquema
@CL ¡Gracias por ofrecer una recompensa por mi pregunta! Siéntase libre de editar la pregunta si tiene alguna idea para que se ajuste mejor a sus propios requisitos.
@ElectronS ¿Qué esquema? Estoy tratando de usar los archivos modelo que puede descargar en la página vinculada en la pregunta.

Respuestas (3)

De hecho, el modelo no es apropiado para LTSpice (como siempre...).

Aquí está el modelo 6N137 modificado. Lo que estaba mal era el uso de la compuerta AND interna que combina la habilitación y la entrada opto. Estaba usando la sintaxis de PSpice. Además, se especificó un Td (retraso) para el interruptor óptico interno, y LTspice no lo admite en el modelo ISWITCH.

Entonces, básicamente, redefiní un nuevo subcircuito AND2 para reemplazar el existente (usando una función IF básica y el operador &), y agregué un subcircuito DELAY20n para simular el retraso faltante del interruptor (usando un pequeño filtro RC). Tuve que modificar ligeramente el subcircuito principal de acuerdo con esto, por supuesto.

Ahora, no puedo garantizar que el nuevo modelo se comporte exactamente como el original (de hecho, puedo garantizar que no se comporte exactamente como el original), pero creo que las desviaciones son menores. Revisé los diversos retrasos con un circuito de prueba y parecen estar dentro de las especificaciones.

Aquí tienes:

************************************************
**  enable- high, NMOS output
**  --  6N137,VO2601/2611, VO0600/0601/0611 --- 
************************************************
** test conditions:VCC=5V, RL=350, CL=15pF, IF=10mA
** characteristics: VF=1.4V, ITH=5mA, VEH=2V, VEL=0.8V
** VOL=0.6V, tpLH=TpHL=70nS, tr=22nS, tf=17nS
**
** Model Node - Symbol - Pin
** 1 (DA)       A         2
** 2 (DK)       K         3
** 3 (GND)    GND         5
** 4 (VO)      VO         6
** 5 (VE)      VE         7
** 6 (VCC)    VCC         8
**
*$
.SUBCKT 6N137  DA DK GND VO VE VCC
dD1  DA 6  DEMIT
vV1  6  DK  DC 0
wW1  VCC 7  vV1  I_SW1
rR3  GND 7  1K  
xU3  7 7delay GND DELAY20n
xU2  7delay VE 8 VCC GND AND2
rR4  8  9 5K
rR5  VCC VE 100K
MQ1 VO 9 GND GND MOST1 W=9.7M L=2U  ;NMOS OUTPUT
.MODEL    DEMIT   D 
+IS=1.69341E-12 RS=2.5 N=2.4  XTI=4
+EG=1.52436 CJO=1.80001E-11 VJ=0.75 M=0.5 FC=0.5
.MODEL MOST1 NMOS (LEVEL=3 KP=25U VTO=2 RD=45)
.MODEL I_SW1 ISWITCH (Roff=1e6 Ron=1 IT=4.9m IH=0.1m)
.ENDS
*$

***-------------------------------------------------------------------------
* 2 INPUT AND GATE
*
.SUBCKT AND2 A B Y VCC GND
ETHRS   THRS GND VALUE {1.5} ; Logic level threshold
EGATE   YINT GND VALUE {IF(V(A) > V(THRS) & V(B) > V(THRS), V(VCC), V(GND))}
RINT YINT Y 1
CINT Y 0 10p
.ENDS

***------------------------
* DELAY
*
.SUBCKT DELAY20n IN OUT GND
E IN2 GND VALUE {V(IN)}
Rdelay IN2 OUT 10k
Cdelay OUT GND 2p
.ENDS

Y como beneficio adicional, un archivo de símbolo asy simple que se puede usar con él:

Version 4
SymbolType BLOCK
RECTANGLE Normal 64 64 -64 -64
SYMATTR Prefix X
SYMATTR Value 6N137
PIN -64 -32 LEFT 8
PINATTR PinName A
PINATTR SpiceOrder 1
PIN -64 32 LEFT 8
PINATTR PinName K
PINATTR SpiceOrder 2
PIN 64 48 RIGHT 8
PINATTR PinName GND
PINATTR SpiceOrder 3
PIN 64 16 RIGHT 8
PINATTR PinName VO
PINATTR SpiceOrder 4
PIN 64 -16 RIGHT 8
PINATTR PinName VE
PINATTR SpiceOrder 5
PIN 64 -48 RIGHT 8
PINATTR PinName VCC
PINATTR SpiceOrder 6

Para los usuarios de LTSpice que no saben cómo usar todo (porque no es sencillo): copie/pegue el contenido del archivo de símbolo asy en un archivo llamado 6N137.ASY y copie/pegue todos los detalles del modelo de especias desde arriba en un archivo llamado 6N137.LIB. Luego, desde su esquema, coloque el componente 6N137 (del archivo ASY). También agregue una .include 6N137.libdirectiva en algún lugar de su esquema. Estás listo. Solo tenga en cuenta que todos los archivos deben estar ubicados en la misma carpeta.

También traté de usar (y descubrí) los mismos problemas con el modelo Vishay para el 6N137. Luego probé la solución provista por Dim, sin mucho éxito (lo siento, pero ahí está). Así que esto me dejó dedicando tiempo a corregir los errores (hay algunas áreas que me llamaron la atención y la curiosidad, pero no estaba seguro) o si no se registra en el sitio de Yahoo Groups para LTspice. Decidí comenzar allí y pude encontrar un buen símbolo y un modelo que funcionó para mí.

Luego hice algunos pequeños cambios relacionados con la forma en que el símbolo especifica la biblioteca. (El símbolo puede especificarlo para que no sea necesario usar un .include en el esquema para encontrarlo). También lo configuré para que sea posible colocar varios modelos (similares, de todos modos) en el mismo archivo de modelo y LTspice proporcionará automáticamente una lista de selección desplegable. (Esto usa una 'característica' no documentada de LTspice).

Aquí está el símbolo, para empezar. Cópielo y péguelo en un archivo ubicado en la carpeta ../lib/sym (o en cualquier otro directorio que desee). Use el nombre de archivo 6N137.ASY cuando lo guarde.

Version 4
SymbolType CELL
LINE Normal -96 -48 -56 -48
LINE Normal -56 -16 -56 -48
LINE Normal -56 16 -56 48
LINE Normal -96 48 -56 48
LINE Normal -80 -16 -32 -16
LINE Normal -56 16 -32 -16
LINE Normal -56 16 -80 -16
LINE Normal -80 16 -32 16
LINE Normal 128 -32 112 -32
LINE Normal 24 0 12 -4
LINE Normal 24 0 20 -12
LINE Normal 20 -4 24 0
LINE Normal 112 49 128 49
LINE Normal 112 16 112 49
LINE Normal 96 16 112 16
LINE Normal 96 -23 96 25
LINE Normal 112 -16 96 -16
LINE Normal 112 -32 112 -16
LINE Normal 91 25 91 -23
LINE Normal 80 0 91 0
LINE Normal 55 25 55 -23
LINE Normal 44 1 55 1
LINE Normal 44 -64 44 1
LINE Normal 128 -64 44 -64
LINE Normal 64 -22 64 -96
LINE Normal 102 12 108 16
LINE Normal 102 20 108 16
RECTANGLE Normal -96 -96 128 64
ARC Normal -4 12 20 -12 16 -4 -4 0
ARC Normal -28 12 -4 -12 -28 4 -4 0
ARC Normal 34 -23 80 25 55 25 55 -23
TEXT 105 -77 Left 2 E
TEXT 28 -77 Left 2 V+
WINDOW 0 -32 -112 Left 2
WINDOW 38 -16 80 Left 2
SYMATTR SpiceModel 6N137
SYMATTR Description High Speed Photocoupler
SYMATTR Prefix X
SYMATTR ModelFile 6N137.SUB
PIN -96 -48 NONE 0
PINATTR PinName A
PINATTR SpiceOrder 1
PIN -96 48 NONE 0
PINATTR PinName K
PINATTR SpiceOrder 2
PIN 128 48 NONE 0
PINATTR PinName S
PINATTR SpiceOrder 3
PIN 128 -32 NONE 0
PINATTR PinName C
PINATTR SpiceOrder 4
PIN 64 -96 NONE 8
PINATTR PinName V
PINATTR SpiceOrder 5
PIN 128 -64 NONE 8
PINATTR PinName E
PINATTR SpiceOrder 6

También tenga en cuenta que he usado CELL y no BLOCK, arriba. Así es como debe configurarse un símbolo, nominalmente. (El tipo BLOQUE es para cuando el símbolo representa otra página de un esquema jerárquico).

Ahora para el archivo modelo. Pero solo por un momento, primero suba y busque una línea que diga SYMATTR ModelFile 6N137.SUBy observe lo mismo allí. Ese es el nombre del archivo que necesita usar para el archivo modelo, al guardarlo. Si desea usar un nombre diferente, deberá modificar esa línea en el archivo de símbolos anterior para que coincida. Dicho esto, aquí está el archivo del modelo:

.subckt 6N137 A K S C V E
D1 A N001 LED
C1 A K 1p
V1 N001 K 0
R2 ta S 100
C2 ta S 200p
B2 S ta I=TABLE(I(V1), 0,0,2.5m,50m,15m, 55m)
C10 A C 0.1p
C11 K S 0.1p
M1 C ga S S NMOS1
C5 C ga 10p
De1 E V Dd1
R6 V E 6k
R7 E S 100k
B4 0 en I=TABLE(V(E,S), 0,0,1.4,0,1.5, 1m)
R4 en 0 1k
R5 V S 1.5k
C6 C S 10p
C4 en 0 10p
B3 S ga I=V(ta,s)*V(en)*10m
R3 ga S 100
C3 ga S 20p
.model LED D(Is=1e-17 Rs=4 N=1.5 Eg=1.7 CJO=5p Tt=5n)
.model NMOS1 NMOS(Vt0=2 Kp=0.03 Rs=5 Rd=5 lambda=0.02)
.model Dd1 D(Is=1e-7 Rs=10 Cjo=5p Tt=5n)
.ends

Guarde ese archivo en la carpeta .../lib/sub (o en cualquier otro directorio que desee... aunque es posible que deba usar la especificación completa del archivo en el archivo de símbolos a menos que se haya informado a LTspice sobre la carpeta).

Lo anterior debería funcionar con LTspice.


Si desea tener varios modelos relacionados (unos que usen el mismo símbolo sin confusión, pero quizás tengan enfoques diferentes o comportamientos algo diferentes), puede agregarlos al archivo de modelo anterior. Simplemente péguelos encima o debajo (o entre) otros subcircuitos .SUBCKT/.ENDS. ¡Asegúrate de que se llamen de manera diferente, por supuesto! Si hace esto, LTspice proporcionará un menú desplegable en el símbolo que le permitirá al usuario seleccionar el dispositivo de una lista. Lo cual es bueno.

Por lo general, esto significa que el nombre del símbolo debe colocarse en la SYMATTR SpiceModellínea del símbolo y no en la SYMATTR Valuelínea. SYMATTR Value( Creo que la línea debe estar en blanco). Y esto significa que el símbolo en sí probablemente deba editarse para que se muestre SpiceModel y no Value.

Solo algunas notas sobre la creación de símbolos con listas que LTspice puede manejar en un menú desplegable.


Desearía haber podido hacer que las cosas de Dim funcionaran rápidamente. Pero salió tan mal que solo una mirada superficial me convenció de comenzar con algo que había sido probado exhaustivamente por aficionados a LTspice. Y simplemente funcionó. Lo cual es bueno.

Extraño, realmente probé eso exhaustivamente en ese momento. De todos modos, +1.
@dim Lo estoy usando de una manera particular que quizás me generó dificultades. También vi que los tipos E se usaban en AND2 y estos no simulan de manera tan confiable como otros enfoques. Así que decidí buscar más y fui al grupo de Yahoo para buscarlo. (Helmut hace el trabajo de un terrateniente administrando y contribuyendo al grupo, el mejor apoyo no remunerado que el dinero no puede comprar). El que publiqué aquí "simplemente funcionó". Así que pensé en agregarlo.

Como dice, su símbolo esquemático no coincide con el archivo del modelo. La forma más fácil y rápida de solucionar esto es generar automáticamente el símbolo esquemático del archivo del modelo.

Lea las preguntas frecuentes de ayuda de ltpsice para modelos de terceros, que se vinculan con la creación de símbolos esquemáticos. Básicamente, abrirá el archivo de texto dentro de ltspice y hará clic derecho en el nombre del modelo. Luego, encontrará el nuevo componente en la carpeta generada automáticamente al agregar nuevas partes.

Es posible reutilizar el símbolo opto para usar un modelo de terceros, pero es un proceso un poco más complicado. Debe tener un símbolo separado para cada modelo a menos que sea algo realmente básico como un transistor o un diodo.

Ya había probado eso. El mensaje de error es el mismo. El problema no es el modelo de nivel superior, sino un submodelo que utiliza el modelo.
@ARF Bien, veo el problema aquí. Pspice/orcad puede hacer algunas "cosas" digitales, así como nodos g_dpwr / g_dgnd globales. Ltspice no implementa el lado digital pspice. En resumen, el modelo no es compatible y tendría que modificarlo para solucionar la falta de la función "y". Todo lo que puedo sugerir es el grupo Yahoo ltspice donde puede encontrar el modelo y el símbolo 6n137 en funcionamiento. Obviamente, no es lo mismo que el modelo vishay, pero al menos podría cambiar los parámetros de mosfet/led para que coincidan. En lugar de "y", está usando una fuente de corriente controlada por voltaje.