LTspice: cuando convierto un esquema en un subcircuito, se comporta de manera diferente. ¿Por qué?

Estoy tratando de modelar una luz intermitente LED de baja frecuencia basada en un BEAM Pummer (básicamente un par de inversores CMOS conectados como un oscilador, más una bomba de carga) en LTspice. Tengo el circuito de la luz intermitente base conectado a una fuente de voltaje y una salida de LED, y parece estar funcionando correctamente, produciendo picos de corriente de ~40 mA a través del LED cada ~2 segundos más o menos.

Pero cuando trato de hacer una definición .subckt solo con la parte intermitente e incluir eso en un circuito de prueba, no funciona correctamente: obtengo una salida ruidosa de nivel µA a través del LED conectado a los pines de salida por unos pocos ns, entonces el oscilador se bloquea.

  • El registro de errores de SPICE informa Singular matrix: Check node d:u1:6#int1 Iteration No. 19que no aparece con la versión independiente. No estoy seguro de cómo encontrar node d:u1:6#int1.
  • Mi suposición inicial fue que la GNDconexión no se estaba haciendo correctamente, pero traté de pasar una referencia a tierra a través de un pin externo de varias maneras diferentes y no hubo ninguna diferencia.
  • Hay una peculiaridad en el sentido de que necesito usar un PULSEsuministro de voltaje con un ciclo de trabajo del 100% en lugar de un voltaje de CC constante en la versión independiente, o el oscilador no se iniciará. ¿Podría esto estar relacionado? Establecer el voltaje del circuito de prueba en PULSEno pareció hacer ninguna diferencia.

¿Qué más podría estar haciendo mal? He verificado tres veces el orden de pines de .subckt netlist contra el orden definido en el archivo de símbolos, y estoy bastante seguro de que es correcto. Los documentos me dicen que GNDya debería estar conectado globalmente. ¿Es una cosa de inicio? Dos inversores están conectados en cadena para hacer el oscilador, ¿necesito configurar explícitamente la entrada de uno a 5V y el otro a 0V al inicio?

Como referencia, aquí hay un archivo zip que contiene el esquema de prueba y las definiciones .sub y .asy, así como la versión independiente del subcircuito intermitente para demostrar que realmente funciona.

Cualquier ayuda muy apreciada!

Respuestas (1)

Para responder a mi propia pregunta: parece que LTspice requiere que los archivos de texto se guarden con la página de códigos Windows Latin 1, finales de línea CRLF. Estoy usando Wine en una Mac y mi editor de texto se guarda como UTF-8 de manera predeterminada. Supongo que LTspice malinterpreta el UTF-8 µ en los valores del condensador como algo no válido, pero de manera confusa no arroja un mensaje de error.

Teniendo en cuenta que SPICE es un lenguaje informático (bastante antiguo), la sustitución de u por µ probablemente no sea demasiado sorprendente.
LTSpice es exigente con las unidades. Por ejemplo, si desea usar megaohmios, debe deletrear las unidades correctamente, de lo contrario, sustituye silenciosamente otra resistencia que está fuera de orden de magnitud. No acepta M, solo Meg con M mayúscula.
No, @Kaz, no tienes razón. ¡En ningún caso LTspice "sustituye silenciosamente" una resistencia! Si se usa un sufijo válido (M, m, Meg, MEG, etc. son todos válidos), entonces no hay necesidad de que LTspice "se queje", de lo contrario lo hará, por supuesto. ESPECIAS, incl. LTspice, no distingue entre mayúsculas y minúsculas, por lo que cualquier "combinación de mayúsculas y minúsculas" de MEG (mEg, MeG,...) se interpreta como 'mega' (x 1e6), tanto 'M' como 'm' como 'milli' (x 0,001). Dado que las SPICE ignoran los caracteres posteriores, también se pueden ingresar unidades, por ejemplo. 4.7uF (esa 'F' no tiene efecto). Sin embargo, preste atención: ¡0.001F = 0.001femtoFarad no 0.001Farad!
@EricBest Esto es un error porque en taquigrafía electrónica distinguimos My m. Si veo 2M junto a una resistencia en un esquema, para mí significa dos millones de ohmios, no dos miliohmios. Está bien tratar a Meg, MEG y meg como equivalentes, pero no a M y m.
@Kaz, no es un error, es simplemente una consecuencia del hecho de que las ESPECIAS son (históricamente) INSENSIBLES A LAS MAYÚSCULAS. Es por eso que se tuvo que elegir un "compromiso" para distinguir estas conocidas abreviaturas comunes de "milli"(m) y "mega"(M). Uno simplemente debe reconciliarse con eso...
@EricBest: ¿Alguna vez escribió accidentalmente 10mig o 10mug o 10mfg o similar para un valor de resistencia? Se interpretará como 10 mili. Este es un error de usabilidad, a menos que diga que no es necesario informar de errores y cada vez que obtenga algo mal en su archivo .asc, los demonios nasales son una consecuencia adecuada.
@PlasmaHH: No. El error es un error cometido durante la programación, algo que se originó sin querer. Este no es el caso. La funcionalidad básica de SPICE es que INTENCIONALMENTE reconocen (analizan) solo el !primero! letra colocada INMEDIATAMENTE detrás del valor (otras letras arbitrarias pueden seguirla sin ningún efecto) a menos que estas letras creen la palabra MEG (o sus combinaciones de mayúsculas y minúsculas), en cuyo caso se evalúa como el prefijo 'mega'. Solo si esa primera letra no es idéntica a uno de los prefijos esperados o no es el 'caso mega' descrito anteriormente, da un mensaje de error.
@EricBest: Un error también es un error en la especificación que luego resulta no ser realmente lo que quería y/o no es útil. Cuando una calculadora genera 3 para 1+1, entonces es un error, independientemente de la especificación que lo diga.
@PlasmaHH: No. Una vez más: el comportamiento descrito está completamente INTENTO desde el principio. Su ejemplo de comparación es incorrecto, no es analógico. Si una calculadora da como resultado 3 para 1+1, es un error, sin duda. Los valores de entrada se ingresaron correctamente y el resultado esperado es incorrecto. En nuestro caso, si la entrada está bien (de acuerdo con la especificación dada), entonces el resultado también estará bien. No puede esperar un resultado correcto si ha ingresado una tontería como entrada. (continuación)
@PlasmaHH: (cont.) La especificación es clara: cualquier cosa que comience con 'm' o 'M' (el precio de la insensibilidad inherente a mayúsculas y minúsculas) se ingrese, siempre significa "milli" a menos que continúe 'por ejemplo...', 'Eg...', 'eG...' o 'EG...', entonces significa "mega". Esta propiedad permite insertar unidades como mV, mVolt, mA, miliamperios, mH, miliHenry, etc., ya que se ignoran todas las letras posteriores.
Dios mío, el pene ondeando aquí es asombroso.
@PlasmaHH +1 'demonios nasales'