Bucles anidados en ngspice

0

Tengo algunos problemas con el uso de bucles en la sección de control de ngspice. Específicamente en este ejemplo:

VD0 d 0 0 
VG0 g 0 0 
VS0 s 0 0 
JDS d g s JM
.MODEL JM NJF (VTO=-1 BETA=1)

.CONTROL
let start_d = 0
let delta_d = 0.5
let stop_d = 1.81
let start_g = -3
let delta_g = 0.5
let stop_g = 0.01
let d_act = start_d
let g_act = start_g
while d_act le stop_d
 alter vd0 dc d_act
 while g_act < stop_g
  alter vg0 dc g_act
  op
  print v(d) v(g) v(s)
  let g_act = g_act + delta_g
 end
 let d_act = d_act + delta_d
end
.ENDC
.END

Debería pasar por todas las combinaciones de vd y vg (0, -3) (0, -2.5) ... (0 0) (0.5 -3) ...

Sin embargo, no pasa vd en absoluto. Mantiene vd = 0 y solo pasos vg.

¿Alguien puede ayudar?

    
pregunta Ralph

1 respuesta

0

Su bucle es incorrecto: no está restableciendo g_act a g_start en el bucle interno. Prueba esto: (He comentado las declaraciones alter y op, puedes agregarlas nuevamente a tu circuito)

 *Loop Test
 .CONTROL
 let start_d = 0
 let delta_d = 0.5
 let stop_d = 1.81
 let start_g = -3
 let delta_g = 0.5
 let stop_g = 0.01
 let d_act = start_d
 let g_act = start_g

 while d_act le stop_d
      *alter vd0 dc d_act
     let g_act = start_g
      while g_act < stop_g
         *alter vg0 dc g_act
         *op
         echo run sim with d_act:"$&d_act" and g_act:"$&g_act"
         let g_act = g_act + delta_g
         end
 let d_act = d_act + delta_d
 end
 .ENDC
 .END
    
respondido por el kabZX

Lea otras preguntas en las etiquetas