Error singular al poner una fuente de corriente en serie con un capacitor (ngspice)

Recibo errores singulares cuando simulo una fuente de corriente en serie con un condensador con el siguiente archivo .cir:

* Spice netlister for gnetlist
C1 1 0 1
I1 1 0 1
.TRAN 100u 6m

(Entiendo que un faradio es enorme, solo para facilitar los números. He probado valores de capacitores más pequeños, pero no han ayudado).

Según mi análisis,

I = C*(dV/dt)

Integrando, espero

V = (I*t)/C.

Por lo tanto, esperaría un aumento del voltaje en el rango de mV con el tiempo cuando represente v(1), pero aparece el siguiente error debajo de este mensaje. Cuando cambio el C1 a un R1, no se observa ningún error. ¿Qué está pasando?

Doing analysis at TEMP = 27.000000 and TNOM = 27.000000

Warning: singular matrix:  check nodes 1 and 1

Note: Starting dynamic gmin stepping
Trying gmin =   1.0000E-03 Note: One successful gmin step
Trying gmin =   1.0000E-04 Note: One successful gmin step
Trying gmin =   1.0000E-05 Note: One successful gmin step
Trying gmin =   1.0000E-06 Note: One successful gmin step
Trying gmin =   1.0000E-07 Note: One successful gmin step
Trying gmin =   1.0000E-08 Note: One successful gmin step
Trying gmin =   1.0000E-09 Note: One successful gmin step
Trying gmin =   1.0000E-10 Note: One successful gmin step
Trying gmin =   1.0000E-11 Note: One successful gmin step
Trying gmin =   1.0000E-12 Note: One successful gmin step
Trying gmin =   1.0000E-12 Note: One successful gmin step
Warning: singular matrix:  check nodes 1 and 1

Warning: Dynamic gmin stepping failed
Note: Starting source stepping
Supplies reduced to   0.0000% Warning: singular matrix:  check nodes 1 and 1


Trying gmin =   1.0000E-02 Note: One successful gmin step
Trying gmin =   1.0000E-03 Note: One successful gmin step
Trying gmin =   1.0000E-04 Note: One successful gmin step
Trying gmin =   1.0000E-05 Note: One successful gmin step
Trying gmin =   1.0000E-06 Note: One successful gmin step
Trying gmin =   1.0000E-07 Note: One successful gmin step
Trying gmin =   1.0000E-08 Note: One successful gmin step
Trying gmin =   1.0000E-09 Note: One successful gmin step
Trying gmin =   1.0000E-10 Note: One successful gmin step
Trying gmin =   1.0000E-11 Note: One successful gmin step
Trying gmin =   1.0000E-12 Note: One successful gmin step
Note: One successful source step
Supplies reduced to   0.1000% Warning: singular matrix:  check nodes 1 and 1

Supplies reduced to   0.0000% Warning: singular matrix:  check nodes 1 and 1

Warning: source stepping failed

Transient solution failed -

Last Node Voltages
------------------

Node                                   Last Voltage        Previous Iter
----                                   ------------        -------------
1                                                 0                    0


doAnalyses: iteration limit reached

run simulation(s) aborted

Respuestas (4)

Muchos simuladores de circuitos intentan encontrar un punto de operación de CC antes de ejecutar un análisis transitorio. Básicamente, reemplazan los inductores con cortocircuitos y los condensadores con circuitos abiertos y luego resuelven el circuito restante.

Su circuito no tiene un punto de CC estable (fuente de corriente de circuito abierto) y este proceso falla. Por lo general, hay una manera de decirle al simulador que omita el paso de inicialización y especifique las condiciones de inicio (por ejemplo, Vcap = 0V) explícitamente.

Las simulaciones de SPICE comienzan por encontrar una solución de CC en t=0. En CC, la corriente a través de un condensador es cero, por lo que no hay solución para una fuente de corriente distinta de cero en serie con un condensador. Cambie su fuente de corriente constante a una fuente que tenga un valor inicial de 0.0A y luego aumente rápidamente hasta el valor deseado.

Otra solución sería agregar una resistencia de alto ohmio en paralelo al capacitor, tal vez 1M o 1G más o menos. Experimente un poco (lo mismo ocurre con la respuesta de @Joe Hass) y vea cuánto (o cuán poco) cambia el resultado.

Hay un problema con Spice, si ingresa 1m, lo sustituirá por 1 mili. Si desea ingresar 1 mega, debe ingresar 1 mega.

Utilice la instrucción .IC.

Declaración .IC Esta declaración proporciona una forma alternativa de especificar las condiciones iniciales de los nodos (y, por lo tanto, de los condensadores).

 .IC Vnode1 = value Vnode2 = value etc.

entonces .IC V(1) = 0

* Spice netlister for gnetlist
C1 1 0 100UF
I1 1 0 0.5
.IC V(1)=0
.OP
.TRAN 100u 6m
.print tran V(1,0) 
.end

Y el resultado es

ejecutar simulación (s) abortada * especias netlister para gnetlist

Análisis transitorio Sáb 27 de febrero 12:05:49 2016

Índice tiempo v(1)

0 0,000000e+00 0,000000e+00
1 6,000000e-07 -3,00000e-03
2 1,200000e-06 -6,00000e-03
3 2,400000e-06 -1,20000e-02 4 4,800000e-
050 -2,800000e-
050 9,600000e-06 -4,80000e-02
6 1,920000e-05 -9,60000e-02
7 3,840000e-05 -1,92000e-01
8 7,680000e-05 -3,84000e-01
9 1,536000e-04 1,0-7010
-0,680 2.536000e-04 -1.26800e+00
11 3.536000e-04 -1.76800e+00
12 4.536000e-04 -2.26800e+00 13 5.536000e-04 -2.76800e+00
14 6.536000e+0604 -0536000e-
0604 -0536000e+
004 7.536000e-04 -3.76800e+00
16 8.536000e-04 -4.26800e+00
17 9.536000e-04 -4.76800e+00
18 1.053600e-03 -5.26800e+00 19 1.153600e+060 -0e+7-080
-0e+7080
20 1,253600e-03 -6,26800e+00
21 1,353600e-03 -6,76800e+00
22 1,453600e-03 -7,26800e+00
23 1,553600e-03 -7,76800e+00 24 1,6583600e
+02-0
25 1.753600e-03 -8.76800e+00
26 1.853600e-03 -9.26800e+00
27 1.953600e-03 -9.76800e+00
28 2.053600e-03 -1.02680e+01
29 2.153801.0e+0-0
30 2.253600e-03 -1.12680e+01
31 2.353600e-03 -1.17680e+01
32 2.453600e-03 -1.22680e+01 33 2.553600e
-03 -1.27680e+01 34 2.653601e
+01-0
35 2.753600e-03 -1.37680e+01
36 2.853600e-03 -1.42680e+01
37 2.953600e-03 -1.47680e+01
38 3.053600e-03 -1.52680e+01 39 3.153801e
+05-0
40 3,253600e-03 -1,62680e+01
41 3,353600e-03 -1,67680e+01
42 3,453600e-03 -1,72680e+01
43 3,553600e-03 -1,77680e+01 44 3,653601e
+08-0
45 3.753600e-03 -1.87680e+01
46 3.853600e-03 -1.92680e+01
47 3.953600e-03 -1.97680e+01
48 4.053600e-03 -2.02680e+01 49 4.153802e
+0-07
50 4.253600e-03 -2.12680e+01
51 4.353600e-03 -2.17680e+01
52 4.453600e-03 -2.22680e+01 53 4.553600e
-03 -2.27680e+01 54 4.653602e
+01-0

Índice tiempo v(1)

55 4,753600e-03 -2,37680e+01
56 4,853600e-03 -2,42680e+01
57 4,953600e-03 -2,47680e+01
58 5,053600e-03 -2,52680e+01 59 5,153802e
+05-0
60 5.253600e-03 -2.62680e+01
61 5.353600e-03 -2.67680e+01
62 5.453600e-03 -2.72680e+01 63 5.553600e
-03 -2.77680e+01 64 5.653602e
+08-0
65 5,753600e-03 -2,87680e+01
66 5,853600e-03 -2,92680e+01
67 5,953600e-03 -2,97680e+01
68 6,000000e-03 -3,00000e+01

Tiempo de CPU desde la última llamada: 0,024 segundos.

Tiempo total de CPU: 0,024 segundos.

DRAM total disponible = 7925,503906 MB. DRAM actualmente disponible = 4380,695312 MB. Tamaño total del programa ngspice = 14,254883 MB. Tamaño del conjunto residente = 2,011719 MB. Páginas ngspice compartidas = 1,771484 MB. Páginas de texto (código) = 1,333008 MB. Pila = 0 bytes. Páginas de la biblioteca = 268.000 kB.