Prise en main de Ngspice

Ngspice is an update of Spice3f5, the last Berkeley’s release of Spice3 simulator family. SPICE = Simulation Program with Integrated Circuit Emphasis

Ngspice home : http://ngspice.sourceforge.net/

Release (executable) for Windows : http://sourceforge.net/projects/ngspice/files/ng-spice-rework/36/ngspice-36_64.zip

Download the zip file for ngspice-36_64 (about 10 MB). Expand this zip file into you working directory, for instance C:. In MS Windows 10 you might need admin rights to do so. Thus you will get C:\Spice64 with several sub-directories. The main program ngspice.exe resides in folder C:\Spice64\bin.

Other OS, check : https://sourceforge.net/projects/ngspice/files/ng-spice-rework/36/

A l’intention des utilisateurs de Mac

Il semblerait que l’installation sur Mac pose problème avec l’une des dernières mises à jour de l’OS (note écrite en mars 2022). Voici une procédure qui devrait solutionner le problème (un grand merci à Matthieu Azzoun, promo E1 2021/22).

Tout d’abord, installer Xcode (disponible sur l’app store).

Pour installer Ngspice :

  1. Installer MacPorts en fonction de sa version macOS ( https://www.macports.org/install.php )
  2. Redémarrer sa session.
  3. Ouvrir le terminal et rentrer :
    sudo port install ngspice
    Il est possible qu'il faille rentrer son mot de passe et accepter des demandes du terminal pendant l'installation du programme.

Le programme se situe dans /opt/local/bin (pour y accéder directement à partir du Finder, maintenir enfoncé : Shift + Command + G). Il est fonctionnel mais les graphiques ne s'affichent pas.

Pour afficher les graphiques sur Mac Os :

  1. Installer Xquartz (https://www.xquartz.org)
  2. Une fois le programme installé, redémarrer sa session.

Exemple de base : le diviseur de tension continue

Description du circuit

Le circuit est composé d’une source de tension continue V1 = 10 V et de 2 résistances R1 = 9 kOhms et R2 = 1 kOhms. Le nœud de connexion entre V1 et R1 est noté n1, celui entre R1 et R2 est noté n2. Le nœud 0 correspond à la masse.

Circuit pont diviseur de tension continue (/10)

Netlist du circuit

Voltage divider ; 1ère ligne = titre
V1 n1 0 10 
R1 n1 n2 9k
R2 n2 0 1k
.tran 1u 1m ; pour une simulation temporelle (transitoire) pendant 1 ms avec un pas de calcul de 1 µs
.end

Commandes

  1. Copier la netlist du circuit dans dans un éditeur type Notepad, sauvegarder le fichier avec le nom div.cir dans le répertoire xx\Spice64\bin
  2. Lancer ngspice.exe
  3. Dans la ligne de commande rentrer (sans les guillemets):
    1. div.cir”, entrée → charge la netlist
    2. run” → lance la simulation transitoire décrite dans le .cir
    3. plot v(n1)” → trace la tension en sortie de la source V1
    4. plot v(n2)” → trace la tension en sortie du diviseur de tension
    5. plot v(n1) v(n2)” → trace les 2 tensions sur un même graph
    6. plot v(n1)-v(n2)” → trace la différence des 2 tensions

Exécution des commandes directement dans la netlist

Mettre les commandes entre

.control

et

.endc

Ce qui donne pour l’exemple ci-dessus :

voltage divider
V1 n1 0 10  
R1 n1 n2 9k 
R2 n2 0 1k 
.tran 1u 1m
.control
run
plot v(n1)
plot v(n2)
plot v(n1) v(n2)
plot v(n1)-v(n2)
.endc
.end

Sauvegarder la netlist dans un fichier div2.cir et lancer le script dans ngspice

Autres éléments / commandes à connaitre

Pour mettre une ligne en commentaire, la commencer par “;”

Pour la description d’un circuit

c → capacité
l → inductance
i → source de courant

C1 n1 n2 1p ; capa de 1pF
L1 n1 n2 1n ; inductance de 1nH
i1 n1 n2 10 ; source de courant de 10V
V1 n1 n2 10 ac 1 ; pour pouvoir faire une simulation petit signal (signal d'entrée d'amplitude 1V --> on trace Vs/1v=Vs/Ve <=> diagramme de Bode)
V1 n1 n2 sin(0 1 1k) ; sinus d'offset nul, d'amplitude crête 1V et de fréquence 1kHz
V1 n1 n2 pulse(niveau_bas niveau_haut delais temps_montée temps_descente largeur période) ; source créneau
.ic v(n1)=0 v(n2)=0 v(n3)=0 ; conditions initiales (ici à zéro)

Pour les commandes

.ac dec 100 1 100Meg ; simulation petit signal entre 1Hz et 100MHz, échelle log avec 100 points par décade
.tran 1u 1m UIC ; ne calcule pas le point de fonctionnement (--> necessaire pour observer la charge/décharge d'un condensateur par exemple)
plot vdb(n2) ; affichage de la tension en dB
plot ph(n2) ; affichage de la phase

Ngspice scale factors

Ngspice scale factors