#f# circuit_macros('diode-characteristic-curve-circuit.m4') #r# Since this circuit is equivalent to a voltage divider, we can write the following relation : #r# #r# .. math:: #r# #r# V_{out} = \frac{Z_d}{R_1 + Z_d} V_{in} #r# #r# where :math:`Z_d` is the diode impedance. circuit = Circuit('Diode') circuit.include(spice_library['BAV21']) # Fixme: Xyce: Device model BAV21: Illegal parameter(s) given for level 1 diode: IKF source = circuit.V('input', 'in', circuit.gnd, dc_offset) circuit.R(1, 'in', 'out', 1 @ u_kΩ) circuit.D('1', 'out', circuit.gnd, model='BAV21') quiescent_points = [] for voltage in (dc_offset - ac_amplitude, dc_offset, dc_offset + ac_amplitude): source.dc_value = voltage simulator = circuit.simulator(temperature=25, nominal_temperature=25) analysis = simulator.operating_point() # Fixme: handle unit quiescent_voltage = float(analysis.out) quiescent_current = -float(analysis.Vinput) quiescent_points.append( dict(voltage=voltage, quiescent_voltage=quiescent_voltage, quiescent_current=quiescent_current)) print("Quiescent Point {:.1f} mV {:.1f} mA".format( quiescent_voltage * 1e3, quiescent_current * 1e3))
'libraries') spice_library = SpiceLibrary(libraries_path) #################################################################################################### circuit = Circuit('STM AN1476: Low-Cost Power Supply For Home Appliances') circuit.include(spice_library['1N4148']) # 1N5919B: 5.6 V, 3.0 W Zener Diode Voltage Regulator circuit.include(spice_library['d1n5919brl']) ac_line = circuit.AcLine('input', 'out', 'in', rms_voltage=230, frequency=50) circuit.R('load', 'out', circuit.gnd, kilo(1)) circuit.C('load', 'out', circuit.gnd, micro(220)) circuit.X('D1', '1N4148', circuit.gnd, 1) circuit.D(1, circuit.gnd, 1, model='DIODE1', off=True) circuit.X('Dz1', 'd1n5919brl', 1, 'out') circuit.C('ac', 1, 2, nano(470)) circuit.R('ac', 2, 'in', 470, m=1, temperature='{25}') source = str(circuit) print(source) #################################################################################################### parser = SpiceParser(source=source) bootstrap_circuit = parser.build_circuit() bootstrap_source = str(bootstrap_circuit) print(bootstrap_source)
V1 A 0 SINE(0 220 50) D1 0 N001 Def D2 A N001 Def D3 N003 A Def D4 N003 0 Deg R1 N001 N002 27.5 L1 N002 N003 0.5 .MODEL Def D ''' circuit.SinusoidalVoltageSource('1', 'A', circuit.gnd, amplitude=220, frequency=50) circuit.D('1', circuit.gnd, 'N001', model='Def') circuit.D('2', 'A', 'N001', model='Def') circuit.D('3', 'N003', 'A', model='Def') circuit.D('4', 'N003', circuit.gnd, model='Def') circuit.R('1', 'N001', 'N002', 27.5) circuit.L('1', 'N002', 'N003', 0.5) circuit.model('Def', 'D') print(circuit) simulator = circuit.simulator() analysis = simulator.transient(step_time=1 @ u_ms, end_time=1 @ u_s) current = analysis['V1'] aimax = np.amax(current.data) aimin = np.amin(current.data)
reset() net_1 = Net('N1') net_2 = Net('N2') skidl_D = D(ref='1', model=5, area=5, m=5, pj=5, off=5, temp=5, dtemp=5) skidl_D['p', 'n'] += net_1, net_2 skidl_circ = generate_netlist() print(skidl_circ) # In[7]: pyspice_circ = Circuit('') pyspice_circ.D('1', 'N1', 'N2', model=5, area=5, m=5, pj=5, off=5, temp=5, dtemp=5) print(pyspice_circ) # In[8]: netlist_comp_check(skidl_circ, pyspice_circ) # ## E | Voltage-controlled voltage source (VCVS) # PySpice/PySpice/Spice/BasicElement.py; class VoltageControlledVoltageSource(TwoPortElement) # # skidl/skidl/libs/pyspice_sklib.py; name="E" #