SIMBA Python Library
SIMBA python library is a Python package which allows the user to manage SIMBA (from circuit creation to simulation and post-processing) with Python scripts. As python syntax is very accessible, no python experience is required to use this library.
Improve your workflow
Thanks to the impressive number of modules for scientific computing, control and machine learning, python is a powerful tool.
With the SIMBA python library, it allows the user to integrate simba simulations and pre- and post-processing like never before: it can somehow replace the classic user files made with excel or Matlab® that come with the circuit simulation files!
# Load required module from aesim.simba import Design import matplotlib.pyplot as plt # Create Design design = Design() design.Name = "DC/DC - Buck Converter" design.TransientAnalysis.TimeStep = 1e-6 design.TransientAnalysis.EndTime = 10e-3 circuit = design.Circuit # Add devices V1 = circuit.AddDevice("DC Voltage Source", 2, 6) V1.Voltage = 50 SW1 =circuit.AddDevice("Controlled Switch", 8, 4) PWM = circuit.AddDevice("Square Wave", 2, 0) PWM.Frequency = 5000 PWM.DutyCycle = 0.5 PWM.Amplitude = 1 D1 = circuit.AddDevice("Diode", 16, 9) D1.RotateLeft() L1 = circuit.AddDevice("Inductor", 20, 5) L1.Value = 1E-3 C1 = circuit.AddDevice("Capacitor", 28, 9) C1.RotateRight() C1.Value = 100E-6 R1 = circuit.AddDevice("Resistor", 34, 9) R1.RotateRight() R1.Value = 5 R1.Name = "R1" for scope in R1.Scopes: scope.Enabled = True g = circuit.AddDevice("Ground", 3, 14) # Make connections circuit.AddConnection(V1.P, SW1.P) circuit.AddConnection(SW1.N, D1.Cathode) circuit.AddConnection(D1.Cathode, L1.P) circuit.AddConnection(L1.N, C1.P) circuit.AddConnection(L1.N, R1.P) circuit.AddConnection(PWM.Out, SW1.In) circuit.AddConnection(V1.N, g.Pin) circuit.AddConnection(D1.Anode, g.Pin) circuit.AddConnection(C1.N, g.Pin) circuit.AddConnection(R1.N, g.Pin) # Run Simulation job = design.TransientAnalysis.NewJob() status = job.Run() # Get results t = job.TimePoints Vout = job.GetSignalByName('R1 - Instantaneous Voltage').DataPoints # Plot Curve fig, ax = plt.subplots() ax.set_title(design.Name) ax.set_ylabel('Vout (V)') ax.set_xlabel('time (s)') ax.plot(t,Vout)
Create and Modify Circuits
Circuits can be created from scratch and modified with a few command lines: adding, placing and connecting components are easily done.
Transient, steady-state or AC analysis
Different circuit analysis can be performed to get transient or steady-state waveforms with respectively transient or steady-state analysis or to get transfer functions and impedances with the AC analysis.
# Load required modules import matplotlib.pyplot as plt import numpy as np from aesim.simba import DesignExamples # Calculating Vout=f(dutycycle) BuckBoostConverter = DesignExamples.BuckBoostConverter() dutycycles = np.arange(0.00, 0.9, 0.9/100) Vouts =  for dutycycle in dutycycles: # Set duty cycle value PWM = BuckBoostConverter.Circuit.GetDeviceByName('C1') PWM.DutyCycle=dutycycle # Run calculation job = BuckBoostConverter.TransientAnalysis.NewJob() status = job.Run() # Retrieve results t = np.array(job.TimePoints) Vout = np.array(job.GetSignalByName('R1 - Instantaneous Voltage').DataPoints) # Average output voltage for t > 2ms indices = np.where(t >= 0.002) Vout = np.take(Vout, indices) Vout = np.average(Vout) # Save results Vouts.append(Vout) # Plot Curve fig, ax = plt.subplots() ax.set_title(BuckBoostConverter.Name) ax.set_ylabel('Vout (V)') ax.set_xlabel('Duty Cycle') ax.plot(dutycycles,Vouts)
Thanks to basic python functions such a 'FOR' loop, performing a parametric variation to get the influence of this parameters on the simulation is incredibly easy !