#!/usr/bin/env python # coding: utf-8 # In[92]: get_ipython().run_cell_magic('capture', '', '\n#!# This example shows the computation of the DC bias and sensitivity in a voltage divider.\n\n####################################################################################################\n\nimport PySpice.Logging.Logging as Logging\nlogger = Logging.setup_logging()\n\n####################################################################################################\n\nfrom PySpice.Spice.Netlist import Circuit\nfrom PySpice.Unit import *\nfrom IPython.display import Image\n####################################################################################################\n\nimport math\nimport matplotlib.pyplot as plt\nplt.rcParams["figure.figsize"] = (12,5)\n\n####################################################################################################\n\nfrom PySpice.Probe.Plot import plot\n\nfrom PySpice.Spice.NgSpice.Shared import NgSpiceShared\n\n%matplotlib inline\n') # ![Circuit](voltage.png) # In[93]: import os import sys try: import ipython_circuitikz.circuitikz except ImportError: # Assuming CWD is where we started Jupyter in/ assert os.path.isfile('C:/Users/mopfe/Dropbox/HRW/ipython_circuitikz/circuitikz.py') sys.path.append('C:/Users/mopfe/Dropbox/HRW/') import ipython_circuitikz.circuitikz get_ipython().run_line_magic('reload_ext', 'ipython_circuitikz.circuitikz') # In[94]: get_ipython().run_cell_magic('circuitikz', 'filename=current_measurement dpi=125', '\\begin{circuitikz}\n \\draw (0,0) to [short] (4,0);\n \\draw (4,0) to [R, l=$R_{x}$] (4,4);\n \\draw (4,4) to [short] (0,4);\n \\draw (0,4) to [I, l=$10 mA$] (0,0);\n \\draw (4,4) to [short,] (6,4);\n \\draw (6,4) to [voltmeter, l=$U_{meas}$] (6,0);\n \\draw (6,0) to [short,] (4,0);\n\\end{circuitikz}\n') # In[95]: circuit = Circuit('Current_Measurement') #internal Resistance internal_resistance = 10 #Units of Ohms #Voltmeter Resistance vm_res = 1000 #Units of kOhms circuit.I('input', 'out', circuit.gnd, 0.01@u_A) circuit.R(1, 'out', circuit.gnd, internal_resistance@u_Ω) circuit.R(2, 'out', circuit.gnd, vm_res@u_kΩ) #################################################################################################### simulator = circuit.simulator(temperature=25, nominal_temperature=25) # In[96]: get_ipython().run_cell_magic('capture', '', "sweep = slice(0,0.01,0.001)\nanalysis = simulator.dc(Iinput=slice(0, 0.01, .001))\nprint('Lead Resistance: {} Ω' .format(float(internal_resistance)))\nprint('Voltmeter Resistance: {} kΩ' .format(float(vm_res)))\n") # In[97]: plt.plot( analysis.sweep, -analysis.out) plt.title('DC Current Measurements') plt.xlabel('current (A)') plt.ylabel('voltage over internal resistance (V)') plt.show() # In[98]: get_ipython().run_cell_magic('circuitikz', 'filename=voltage_measurement dpi=125', '\\begin{circuitikz}\n \\draw (0,0) to [R, l=$R_{L1}$] (4,0);\n \\draw (4,4) to [R, l=$R_{L2}$] (0,4);\n \\draw (4,4) to [R, l=$R_{meas}$] (4,0);\n \\draw (0,4) to [V, l=$1 V$] (0,0);\n \\draw (4,4) to [short,] (6,4);\n \\draw (6,4) to [voltmeter, l=$U_{meas}$] (6,0);\n \\draw (6,0) to [short,] (4,0);\n\\end{circuitikz}\n') # In[99]: circuit = Circuit('Voltage_Measurement') #lead Resistances l1_res = 1000 #Units of Ohms l2_res = 1000 #Ohms #Voltmeter Resistance vm_res = 1000 #Units of kOhms circuit.V('input', 1, circuit.gnd, 1@u_V) circuit.R(1, 1, 'out', l1_res@u_Ω) circuit.R(2, circuit.gnd, 'zero', l2_res@u_Ω) circuit.R(3, 'zero', 'out', vm_res@u_Ω) #################################################################################################### simulator = circuit.simulator(temperature=25, nominal_temperature=25) # In[100]: get_ipython().run_cell_magic('capture', '', 'analysis = simulator.dc(Vinput=slice(0, 10, .01))\n') # In[101]: plt.plot(analysis.sweep, analysis.out - analysis.zero ) plt.title('DC Voltage Measurements') plt.xlabel('voltage at source (V)') plt.ylabel('voltage over internal resistance (V)') plt.show() # ![Circuit](voltage_ranges_2.png) # In[102]: get_ipython().run_cell_magic('circuitikz', 'filename=voltage_measurement_ranges dpi=125', '\\begin{circuitikz}\n \\draw (0,4) to [R, l=$1 \\Omega$] (3,4);\n \\draw (3,4) to [R, l=$9 \\Omega$] (6,4);\n \\draw (6,4) to [R, l=$90 \\Omega$] (9,4);\n \\draw (9,4) to [R, l=$900 \\Omega$] (12,4);\n \\draw (9.5,4) to [R, l=$R_{meas}$] (9.5,0);\n \\draw (0,4) to [V, l=$U_{source}$] (0,0);\n \\draw (8.5,4) to [voltmeter,] (8.5,0);\n \\draw (12,4) to [short,] (12,0);\n \\draw (12,0) to [short,] (0,0);\n\\end{circuitikz}\n') # In[103]: circuit2 = Circuit('Voltage_Measurement_Ranges') #Voltmeter Resistance vm_res = 10000 #Units of kOhms r_1 = 900 #Units of kOhms r_10 = 90 #Units of kOhms r_100 = 9 #Units of kOhms r_base = 1 #Units of kOhms circuit2.V('source', 'src', circuit2.gnd, 100@u_V) circuit2.R(1, 'src', 'r_1', r_1@u_kΩ) circuit2.R(2, 'r_1', 'r_10', r_10@u_kΩ) circuit2.R(3, 'r_10', 'r_100', r_100@u_kΩ) circuit2.R(4, 'r_100', circuit2.gnd, r_base@u_kΩ) circuit2.R(5, 'r_10', circuit2.gnd, vm_res@u_kΩ) #################################################################################################### simulator = circuit2.simulator(temperature=25, nominal_temperature=25) analysis = simulator.operating_point() print('Voltmeter Resistance: {} kΩ' .format(float(vm_res))) for node in (analysis['src'],analysis['r_1'], analysis['r_10'], analysis['r_100']): # .in is invalid ! print('Node {}: {} V'.format(str(node), float(node))) # In[ ]: # In[ ]: