Finally… a new tutorial. Who could have ever guessed that life in the real world would be so busy (note the sarcasm!)? This tutorial is going to cover adding custom Spice models into your LTspice simulations and library. While it is very easy once you know how to do it, there are a couple pitfalls that nearly caused me to go crazy and rip my hair out in the past. Hopefully this will save you some time and stress, and possibly a hole in your monitor. Now let’s get started!
- Finding and Downloading the Spice Model
- Adding the Spice Model to your LTspice Library
- Using the Spice Model in a Circuit
- Conclusion and tl;dr (too long;didn’t read)
Finding and Downloading the Spice Model
It might seem obvious, but the first thing you need to do is find a suitable Spice model. This can usually be done in one of two ways. The easiest method is to simply Google the phrase “[part I am looking for] spice model”. If the part is popular enough and isn’t some incredibly complex part, your search will usually turn up some hits. The second method is to directly search the part manufacturer’s web page for the part. Sometimes you will have to switch tabs, or it will simply be link on their part’s web page such in the following screenshot:
An unfortunate characteristic of the Spice world is that over time it has become fairly fragmented. Different design tools use different versions of Spice, hence, part manufacturers will often have the Spice file for their part available in a couple different formats. The best format to use is the Spice3 model, however the PSpice model will usually work in LTspice as well.
Once you have found the model you want to use, you need to make sure it is in the correct format with the correct extension. A Spice model file is nothing more than a text file with a different extension. In the case of LTspice, if the model file contains only a single model, it should be named with the .sub extension. If the file contains multiple models, then the file should be named with the .lib extension.
I’m not going to go into depth on renaming text file extensions, however one method to do it is to first open up the model in notepad (in Windows 7, right click on the file > open with > notepad). Next, go to file > save as. Where you type the file name in the file name text box, type the exactly desired file name in quotes, and the program will name it exactly that. For example you could type “1N4148.sub”. If you tried typing the file name without the quotes you would get 1N4148.sub.txt instead of the desired 1N4148.sub.
Adding the Spice Model to your LTspice Library
For this tutorial we will be using a Spice model for a made up diode called the 1NADAM, named after your beloved engineer, me! You can either download the file here (righ click on link > save as), or simply copy the code below, paste it into a text document, and save it with the .sub (or .lib) extension as explained in the previous section.
*Spice model for a made up diode used in
*my LTspice adding models tutorial at
.SUBCKT 1NADAM 1 2
R1 1 2 5E+9
D1 1 2 INTDIO
.MODEL INTDIO D
+ IS = 7.0E-9
+ N = 1.5
+ BV = 30
+ IBV = 0.00025
+ RS = 0.20
+ CJO = 5.0E-13
+ VJ = 0.80
+ M = 0.030
+ FC = 0.50
+ TT = 3.0E-9
As you can see, inside of the file for the 1NADAM there are .SUBCKT and .MODEL statements. Most Spice models downloaded from the internet will have .SUBCKT statements, because often time a simple .MODEL statement will not sufficiently model the complex behavior of modern parts. I am assuming that the reader knows the difference between a .SUBCKT and .MODEL (explaining those thoroughly is a topic for another tutorial). In short, however, a .MODEL statement will provide the model for an existing Spice primitive (i.e. a capacitor, resistor, transistor, diode, and so on). While .MODEL statements will work for simple simulations and old parts, it will not be very accurate for newer, smaller parts. For example, transistors have become so small and non-ideal, that the equations which we all learned in textbooks do not provide sufficient accuracy for good simulation results.
This is one case where a .SUBCKT model becomes very useful. This allows a manufacturer or engineer to create a more complex model using more than a single Spice primitive, which will lead to better results. This also allows manufacturers and engineers to create models which take into account any peculiarities or quirks that the component might have. You will be hard pressed to find a model for a real part which uses a single .MODEL statement for the Spice model. Therefore this tutorial assumes a .SUBCKT type model but will point out the difference where applicable.
Once you have the Spice model on your computer, adding it to your LTspice library is very easy. Simply copy the file to your
folder. Usually the full path to that directory will be either
C:\Program Files (x86)\LTC\LTspiceIV\lib\sub
on a 64 bit Windows 7 installation or
on a 32 bit (x86) Windows installation.
Using the Spice Model in a Circuit
Now that the Spice model is in your library, there are a couple things you need to do. The first is make the circuit which will contain our part. For example, here is a simple half-wave rectifier I have tossed together.
The next is to let LTspice know that you will be using that the newly added file. You do this by placing a Spice directive (s shortcut key, or the .op button on the toolbar) onto the schematic containing .lib FILENAME, using the entire name of the file containing your model. Make sure to include the file extension! This is the first pitfall I was talking about. Here is an example of how to correctly add our new file:
While the above way is correct, below you can see a common mistake which will not work:
Here you can see some screenshots showing how to add the spice directive on to the schematic.
In case some of you are wondering what exactly this does, it includes any models included in the specified file into the Spice simulation file. You might also be wondering what the difference between the .LIB and .INC directives is. The .LIB directive will only add models from the specified file. If you had some other directives in there, for example a .TRAN statement, it would be discarded. The .INC directive will include everything in the specified file into your project, regardless if it is a model, directive, netlist, or anything else. So use .LIB just to be safe in case there is some other junk in there (even though there shouldn't be).
Now that you have added the file, you can simply use any .MODEL or .SUBCKT included in the file as you would with any of the default components. Just right click on a component's default model (in this case the D right next to the diode), and change its value to the name of the model inside of the file. Alternatively you can hold ctrl then right-click on the symbol and change the value in the Value row). Usually you have to look inside the file using a text editor to see what exactly the author of the Spice file called the model. For example the model for the 1N4148 diode might not actually be called 1N4148 inside of the file.
Here is also where the second major pitfall comes in.
If you are using a .SUBCKT type model for a Spice primitive, you need to change the Spice prefix on the component!.
What the Spice prefix does is tells LTspice what kind of model to expect for the part. For example, on a diode, the default will be a D because, well, the part is a diode so it expects a diode model. Remember however that we are not using a regular diode model for our diode; we are using a .SUBCKT model. This means that we need to change the Spice prefix to a subcircuit model instead of a diode model. To do this, hold ctrl and then right-click on the symbol in the schematic. Then just double click in the Value cell next to Prefix, and change the value to an X.
At this point the file should be ready to simulate and look like this:
Congratulations, everything should be working now! We can run a simulation to see what comes out. Keep in mind that this circuit not meant to be a good rectifier. I purposely chose the values to make it easy to see what this circuit is actually doing just by looking at the output. Here is the result:
Conclusion and tl;dr (too long;didn't read)
This article was much longer than I initially expected, and probably more than was really needed. However, what inspired me to write this tutorial was that when I was just starting to learn LTspice, I would read instructions people posted on forums, but I didn't exactly understand what all the steps meant or how to perform them. For example I had no idea what "change the Spice prefix to X" meant, and I had no idea that you had to hold ctrl then right-click on the symbol to do it. In summary, here is a quick tl;dr version for people who might already be familiar with Spice and LTspice, and just want the quick and concise procedure. This will also serve as a good recap for people who read the entire article!
- Download and rename the Spice model to something that makes sense
- Move the Spice model into the sub folder in your LTspice directory
- Add a .LIB FILENAME directive onto your schematic
- Change the Value field for your symbol to the name of the model inside of your Spice model file
- If you are using a .SUBCKT type model for a Spice primitive, hold ctrl then right-click on the symbol and change the Prefix field to X
Good luck! I hope this was helpful!