-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPySpice_Learning_Examples.py
More file actions
52 lines (48 loc) · 2.02 KB
/
Copy pathPySpice_Learning_Examples.py
File metadata and controls
52 lines (48 loc) · 2.02 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import numpy as np
import matplotlib as plt
import sys, os
import PySpice
import PySpice.Logging.Logging as Logging
from PySpice.Spice.Netlist import Circuit, SubCircuit, SubCircuitFactory
from PySpice.Unit import *
logger = Logging.setup_logging()
# Voltage Divider
circuit = Circuit("Voltage Divider")
circuit.V('input', 'in',circuit.gnd, 10@u_V)
circuit.R(1, 'in', 'out', 9@u_kOhm)
circuit.R(2, 'out', circuit.gnd, 1@u_kOhm)
print("The Circuit/Netlist: \n",circuit)
simulator = circuit.simulator(temperature=25, nominal_temperature=25)
print("The simulator: \n",simulator)
analysis = simulator.operating_point()
print('_' * 66 + "\n")
# Diodes, Raw Spice and Subcircuits
circuit = Circuit("Diode")
circuit.model('MyDiode','D',IS=4.352@u_nA, RS=0.6458@u_Ohm, BV=110@u_V, IBV=0.0001@u_V, N=1.906)
circuit.V('input',1,circuit.gnd,10@u_V)
circuit.R(1, 1, 2, 9@u_kOhm)
circuit.Diode(1, 2, 3, model='MyDiode')
circuit.R(2, 3, circuit.gnd, 9@u_kOhm)
circuit.raw_spice = 'D2 23 MyDiode IS=1n' + os.linesep
class MySubCir(SubCircuit):
__nodes__ = ('t_in','t_out')
def __init__(self, name, resister = 1@u_kOhm):
SubCircuit.__init__(self,name,*self.__nodes__)
self.R(1, 't_in', 't_out', resister)
self.Diode(1,'t_in','t_out', model='MyDiode')
circuit.subcircuit(MySubCir('sub1',resister = 1@u_kOhm))
circuit.X(1, 'sub1', 3, circuit.gnd)
print("The circuit/netList:\n",circuit)
simulator = circuit.simulator(temperature=25, nominal_temperature=25)
print("The simulator: \n",simulator)
print('_' * 66 + "\n")
# basic and custom DC Sweep
circuit = Circuit("basic and custom DC Sweep")
circuit.model('MyDiode','D',IS=4.352@u_nA, RS=0.6458@u_Ohm, BV=110@u_V, IBV=0.0001@u_V, N=1.906)
circuit.V('input',1,circuit.gnd,10@u_V)
circuit.Diode(1, 1, 2, model='MyDiode')
circuit.R(1, 2, circuit.gnd, 1@u_kOhm)
simulator = circuit.simulator(temperature=25, nominal_temperature=25)
analysis = simulator.operating_point()
print('Node:',str(analysis['1']), 'values:',np.array(analysis['1']))
print('Node:',str(analysis['2']), 'values:',np.array(analysis['2']))