Running a simulation multiple times and changing multiple component values is a bit more involved than just changing one (which is not so bad)
Here is the concept for changing one value:
- Add a .param statement using the SPICE directive icon on the far right, e.g. for a resistance value
.param X=R
- To use it you would enter {x} into the resistor value, then include e.g.
.step param X 100 500 50
to step the value between 100 and 500 in increments of 50.
Example:
Result:
For multiple values, the only way I found to work was using a list of values for X, and using the table statement. This is probably best explained with an example (reading the help for the commands used will probably be helpful here). But note that the table command syntax is in the form table(index, x1, y1, x2, y2, .... xn, yn), takes index as input and returns an interpolated value for x=index based on the supplied x,y pairs.
In one of my simulations I needed to perform 12 simulations whilst changing 3 different component values, here are the commands:
.step param X list 1 2 3 4 5 6 7 8 9 10 11 12
.param Rin1 = table(X, 1, 1,1p, 2, 1p, 3, 1p, 4, 4478, 5, 4080, 6, 3400, 7, 2200, 8, 1p, 9, 1p, 10, 1p, 11, 1p, 12, 1p)
.param Rin2 = table(X, 1, 4997, 2, 4997, 3, 4997, 4, 499, 5, 897, 6, 1577, 7, 2777, 8, 4997, 9, 4997, 10, 4997, 11, 4997, 12, 4997)
.param Tval = table(X, 1, 56, 2, 56, 3, 27, 4, 1G, 5, 1G, 6, 1G, 7, 1G, 8, 1G, 9, 330, 10, 330, 11, 120, 12, 120)
.param Kval = table(X, 1, 316, 2, 147, 3, 147, 4, 6340, 5, 6340, 6, 6340, 7, 6340, 8, 6340, 9, 6340, 10, 825, 11, 825, 12, 316)
Result:
Hopefully you get the idea, you could maybe produce a script that would produce the necessary SPICE commands when you fill in your desired values. Or just create a template (e.g. I just copied and pasted the above into a few different simulations and changed the values)
If the above doesn't do what you want, then maybe look at something like NI's multisim (I think it has some batch simulation options, although I'm not sure how useful they are)
It may also be helpful to ask on the LTSPice forum and see if someone knows of a better way of doing things.
In LTSpice the table command really creates a kind of dictionary where you have to specify key value pairs. The proper directive for your case would then be:
.step param Rx list 1 2 3
.param R1 table(Rx,1,1k,2,1Meg,3,1k)
.param R2 table(Rx,1,10k,2,1Meg,3,10Meg)
and set the value of the resistors to {R1}
and {R2}
respectively.
If you want to have the values of a resistor near to it, you can also enter (instead of value, when right clicking onto it)
R=table(Rx,1,10k,2,1Meg,3,10Meg)
into the resistor value field. This works the same way for all kinds of components and with an external script to create .asc files it can be used as a crutch for LTspices missing monte carlo functonality.
Best Answer
You can do this by using a little trick: the
.param
statement in Spice only works with numbers, but Spice has a way to rename models with numerical names, theako
(Also Known As) option. IIRC, this may not be documented in LTSpice docs, but it does exactly what you want. See ltwiki:AKO Aliases (A Kind Of) for a little more informationTo sweep models, simply use
.model n ako:<name>
to rename each model you want to sweep, and then use a.step param MParam list 1 2 .. n
to sweep through those models. See below for an example, where I sweep through three simple diode models plus a "real" diode model.