Skip to main content
  1. All Posts/

PyLTSpice

Tools HTML

README

PySpicer is a toolchain of python utilities design to interact with LTSpice Electronic Simulator.

What is contained in this repository

  • LTSteps.py
    An utility that extracts from LTSpice output files data, and formats it for import in a spreadsheet, such like Excel or Calc.
  • LTSpice_RawRead.py
    A pure python class that serves to read raw files into a python class.
  • LTSpice_RawWrite.py
    A class to write RAW files that can be read by LTSpice Application.
  • Histogram.py
    A python script that uses numpy and matplotlib to create an histogram and calculate the sigma deviations. This is useful for Monte-Carlo analysis.
  • LTSpiceBatch.py
    This is a script to launch LTSpice Simulations. This is useful because:

    • Can overcome the limitation of only stepping 3 parameters
    • Different types of simulations .TRAN .AC .NOISE can be run in a single batch
    • The RAW Files are smaller and easier to treat
    • When used with the LTSpiceRaw_Reader.py and LTSteps.py, validation of the circuit can be done automatically.
    • Different models can be simulated in a single batch, by using the following instructions:
      • set_element_model('D1', '1N4148') # Replaces the Diode D1 with the model 1N4148
      • set_component_value('R2', '33k') # Replaces the value of R2 by 33k
      • set_parameters(run=1, TEMP=80) # Creates or updates the netlist to have .PARAM run=1 or .PARAM TEMP=80
      • add_instructions(".STEP run -1 1023 1", ".dc V1 -5 5")
      • remove_instruction(".STEP run -1 1023 1") # Removes previously added instruction
      • reset_netlist() # Resets all edits done to the netlist.
    <p>
      Note: It was only tested with Windows based installations. </li> </ul> 
      
      <h2 dir="auto">
        <a rel="nofollow noopener" target="_blank" id="user-content-how-to-install" class="anchor" aria-hidden="true" href="#how-to-install"></a>How to Install
      </h2>
      
      <p>
        <code>pip install PyLTSpice </code>
      </p>
      
      <h3 dir="auto">
        <a rel="nofollow noopener" target="_blank" id="user-content-updating-pyltspice" class="anchor" aria-hidden="true" href="#updating-pyltspice"></a>Updating PyLTSpice
      </h3>
      
      <p>
        <code>pip install --upgrade PyLTSpice </code>
      </p>
      
      <h3 dir="auto">
        <a rel="nofollow noopener" target="_blank" id="user-content-using-github" class="anchor" aria-hidden="true" href="#using-github"></a>Using GITHub
      </h3>
      
      <p>
        <code>git clone https://github.com/nunobrum/PyLTSpice.git </code><br /> If using this method it would be good to add the path where you cloned the site to python path.<br /> <code>import sys </code><br /> <code>sys.path.append(&lt;path to PyLTSpice&gt;) </code>
      </p>
      
      <h2 dir="auto">
        <a rel="nofollow noopener" target="_blank" id="user-content-how-to-use" class="anchor" aria-hidden="true" href="#how-to-use"></a>How to use
      </h2>
      
      <p>
        Here follows a quick outlook on how to use each of the tools.<br /> More comprehensive documentation can be found in <a rel="nofollow noopener" target="_blank" href="https://pyltspice.readthedocs.io/en/latest/">https://pyltspice.readthedocs.io/en/latest/</a>
      </p>
      
      <h2 dir="auto">
        <a rel="nofollow noopener" target="_blank" id="user-content-license" class="anchor" aria-hidden="true" href="#license"></a>LICENSE
      </h2>
      
      <p>
        GNU V3 License<br /> (refer to the LICENSE file)
      </p>
      
      <h3 dir="auto">
        <a rel="nofollow noopener" target="_blank" id="user-content-ltspice_rawreadpy" class="anchor" aria-hidden="true" href="#ltspice_rawreadpy"></a>LTSpice_RawRead.py
      </h3>
      
      <p>
        The example below reads the data from a LTSpice Simulation called<br /> &#8220;TRAN &#8211; STEP.raw&#8221; and displays all steps of the &#8220;I(R1)&#8221; trace in a matplotlib plot
      </p>
      
      <pre>from PyLTSpice.LTSpice_RawRead import LTSpiceRawRead
    

    from matplotlib import pyplot as plt

    LTR = LTSpiceRawRead(“TRAN - STEP.raw”)

    print(LTR.get_trace_names()) print(LTR.get_raw_property())

    IR1 = LTR.get_trace(“I(R1)”) x = LTR.get_trace(’time’) # Gets the time axis steps = LTR.get_steps() for step in range(len(steps)):

    print(steps[step])>

    print(steps[step]) #

    plt.plot(x.get_time_axis(step), IR1.get_wave(step), label=steps[step])

    plt.legend() # order a legend plt.show()

      <h3 dir="auto">
        <a rel="nofollow noopener" target="_blank" id="user-content-ltspice_rawwritepy" class="anchor" aria-hidden="true" href="#ltspice_rawwritepy"></a>LTSpice_RawWrite.py
      </h3>
      
      <p>
        The following example writes a RAW file with a 3 milliseconds transient simulation sine with a<br /> 10kHz and a cosine with 9.997kHz
      </p>
      
      <pre>import numpy as np
    

    from PyLTSpice.LTSpice_RawWrite import Trace, LTSpiceRawWrite

    LW = LTSpiceRawWrite() tx = Trace(’time’, np.arange(0.0, 3e-3, 997E-11)) vy = Trace(‘N001’, np.sin(2 * np.pi * tx.data * 10000)) vz = Trace(‘N002’, np.cos(2 * np.pi * tx.data * 9970)) LW.add_trace(tx) LW.add_trace(vy) LW.add_trace(vz) LW.save(“teste_w.raw”)

      <h3 dir="auto">
        <a rel="nofollow noopener" target="_blank" id="user-content-ltspice_batch" class="anchor" aria-hidden="true" href="#ltspice_batch"></a>LTSpice_Batch
      </h3>
      
      <p>
        This module is used to launch LTSPice simulations. Results then can be processed with either the LTSpiceRawRead<br /> or with the LTSteps module to read the log file which can contain .MEAS results.<br /> The script will firstly invoke the LTSpice in command line to generate a netlist, and then this netlist can be<br /> updated directly by the script, in order to change component values, parameters or simulation commands.<br /> Here follows an example of operation.
      </p>
      
      <pre>import os
    

    from PyLTSpice.LTSpiceBatch import SimCommander

    def processing_data(raw_file, log_file): print(“Handling the simulation data of %s, log file %s” % (raw_file, log_file))

    select spice model>

    select spice model #

    LTC = SimCommander(“Batch_Test.asc”)

    set default arguments>

    set default arguments #

    LTC.set_parameters(res=0, cap=100e-6) LTC.set_component_value(‘R2’, ‘2k’) LTC.set_component_value(‘R1’, ‘4k’) LTC.set_element_model(‘V3’, “SINE(0 1 3k 0 0 0)”)

    define simulation>

    define simulation #

    LTC.add_instructions( “; Simulation settings”, “.param run = 0” )

    for opamp in (‘AD712’, ‘AD820’): LTC.set_element_model(‘XU1’, opamp) for supply_voltage in (5, 10, 15): LTC.set_component_value(‘V1’, supply_voltage) LTC.set_component_value(‘V2’, -supply_voltage) # overriding he automatic netlist naming run_netlist_file = “{}{}{}.net”.format(LTC.circuit_radic, opamp, supply_voltage) LTC.run(run_filename=run_netlist_file, callback=processing_data)

    LTC.reset_netlist() LTC.add_instructions( “; Simulation settings”, “.ac dec 30 10 1Meg”, “.meas AC Gain MAX mag(V(out)) ; find the peak response and call it ““Gain”””, “.meas AC Fcut TRIG mag(V(out))=Gain/sqrt(2) FALL=last” )

    LTC.run() LTC.wait_completion()

    Sim Statistics>

    Sim Statistics #

    print(‘Successful/Total Simulations: ’ + str(LTC.okSim) + ‘/’ + str(LTC.runno))

      <h3 dir="auto">
        <a rel="nofollow noopener" target="_blank" id="user-content-ltstepspy" class="anchor" aria-hidden="true" href="#ltstepspy"></a>LTSteps.py
      </h3>
      
      <p>
        This module defines a class that can be used to parse LTSpice log files where the information about .STEP information is written.<br /> There are two possible usages of this module, either programmatically by importing the module and then accessing data through the<br /> class as exemplified here:
      </p>
      
      <pre>from PyLTSpice.LTSteps import LTSpiceLogReader
    

    data = LTSpiceLogReader(“Batch_Test_AD820_15.log”)

    print(“Number of steps :”, data.step_count) step_names = data.get_step_vars() meas_names = data.get_measure_names()

    Printing Headers>

    Printing Headers #

    print(’ ‘.join([f"{step:15s}" for step in step_names]), end=’’) # Print steps names with no new line print(’ ‘.join([f"{name:15s}" for name in meas_names]), end=‘n’)

    Printing data>

    Printing data #

    for i in range(data.step_count): print(’ ‘.join([f"{data[step][i]:15}" for step in step_names]), end=’’) # Print steps names with no new line print(’ ‘.join([f"{data[name][i]:15}" for name in meas_names]), end=‘n’) # Print Header

    print(“Total number of measures found :”, data.measure_count)

      <p>
        The second possibility is to use the module directly on the command line<br /> <code>python -m PyLTSpice.LTSteps &lt;filename&gt; </code><br /> The can be either be a log file (.log), a data export file (.txt) or a measurement output file (.meas)<br /> This will process all the data and export it automatically into a text file with the extension (tlog, tsv, tmeas)<br /> where the data read is formatted into a more convenient tab separated format.<br /> In case the is not provided, the script will scan the directory and process the newest log, txt or out file found.
      </p>
      
      <h3 dir="auto">
        <a rel="nofollow noopener" target="_blank" id="user-content-histogrampy" class="anchor" aria-hidden="true" href="#histogrampy"></a>Histogram.py
      </h3>
      
      <p>
        This module uses the data inside on the filename to produce an histogram image.
      </p>
      
      <pre class="notranslate"><code>Usage: Histogram.py [options] LOG_FILE TRACE
    

    Options: –version show program’s version number and exit -h, –help show this help message and exit -s SIGMA, –sigma=SIGMA Sigma to be used in the distribution fit. Default=3 -n NBINS, –nbins=NBINS Number of bins to be used in the histogram. Default=20 -c FILTERS, –condition=FILTERS Filter condition writen in python. More than one expression can be added but each expression should be preceded by -c. EXAMPLE: -c V(N001)>4 -c parameter==1 -c I(V1)<0.5 -f FORMAT, –format=FORMAT Format string for the X axis. Example: -f %3.4f -t TITLE, –title=TITLE Title to appear on the top of the histogram. -r RANGE, –range=RANGE Range of the X axis to use for the histogram in the form min:max. Example: -r -1:1 -C, –clipboard If the data from the clipboard is to be used. -i IMAGEFILE, –image=IMAGEFILE Name of the image File. extension ‘png’

      <h3 dir="auto">
        <a rel="nofollow noopener" target="_blank" id="user-content-ltspice_semidevopreaderpy" class="anchor" aria-hidden="true" href="#ltspice_semidevopreaderpy"></a>LTSpice_SemiDevOpReader.py
      </h3>
      
      <p>
        This module is used to read from LTSpice log files Semiconductor Devices Operating Point&#8230;
      </p>