====== Quick Guide to Using KiCad for SPICE Simulation ======
The following was written for KiCad 4. Simulation support in KiCad 5 has been reworked to such an extent that a lot of the following doesn't work.
If you have KiCad 4 SPICE stuff you'd like to use in KiCad 5, have a look [[kicad:using_arbitrary_spice_engines_in_kicad_5|here]].
{{:kicad:kicad-spice.png?direct&400|}}
This is written up assuming you know the basics of using KiCad already.
===== What you'll need =====
You'll need the following to get a working SPICE setup:
* [[http://iut-tice.ujf-grenoble.fr/kicad/|KiCad]]
* A [[http://bwrc.eecs.berkeley.edu/classes/icbook/spice/|SPICE]] engine:
* [[http://ngspice.sourceforge.net/|ngspice]]: Arguably the most FOSSy commonly available SPICE engine.
* [[https://www.gnu.org/software/gnucap/|gnucap]]: Not actually SPICE but tries to be syntax-compatible.
* [[http://www.spiceopus.si/|SpiceOpus]]: Proprietary but nice, especially the output plotting.
* [[http://www.linear.com/designtools/software/|LTSpice]]: Linear Technology's popular, proprietary Windows solution. Works in [[http://www.winehq.org/|Wine]]. It's scriptable but I have yet to understand how to embed control statements. Has a GUI anyway, so ... ?
* [[http://www.cadence.com/products/orcad/pspice_simulation/Pages/default.aspx|PSpice]]: Windows-only, expensive, defacto standard professional solution in the USA. They also have a tradition of making available a //gratis// crippleware student version. And introducing non-standard model features, leading to an annoying situation where vendor-supplied models only work in PSPICE. Also has a a GUI, so ... ?
* Any others?
* Component libraries with SPICE symbols:
* There is a library of basic SPICE components that ships with KiCad. It's good enough for initial experimentation. The library isn't included in Eeschema projects by default. You'll have to add it manually if you want to use it. In Debian-based Linux, it's at ''/usr/share/kicad/library/pspice.lib''.
* I am developing (very slowly) [[https://bitbucket.org/mithat/kicad-spice-library|my own library]] of components based on the above with some changes and additions.
===== Configuring a project =====
- Create a new project in the conventional way.
- Open Eeschema and remove all the library references included by default.
- Manually add one or more libraries with SPICE components to the project.
* Note that the SPICE library that comes packaged with KiCad is //not// included by default in new KiCad projects.
- Specify the SPICE engine you want to use:
* Click the "Generate netlist" button (or the equivalent menu item).
* Select the "Spice" tab
* Enter the name of the command to invoke the simulator (with or without path) in the "Simulator command:" textbox.
===== Making it happen =====
- Do your schematic capture, subject to a couple best practices:
* For named nets, use global labels instead of local labels.
* The reason for this is that in the netlists, global identifiers will be used as-is but local labels get text prepended to the name---which makes it hard for you to remember/guess what the full identifier is.
* Use the "''0''" component from a SPICE component library rather than the ''GND'' symbol.
* "''0''" is the official name of ground node in SPICE. Some engines may translate ''GND'' into ''0'', some may not.
- To specify the simulations you want to run and the output you want to display, add a text block (i.e., "comment") with the needed SPICE and Nutmeg syntax plus a little added mojo. The following does an AC analysis and plots the response at node ''vout'':
+PSPICE
.control
ac dec 66 1kHz 120kHz
plot vdb(vout)
set units = degrees
plot vp(vout)
.endc
* The line ''+PSPICE'' is KiCad-speak for, "Stick the following text at the end of a SPICE netlist."
* :!: There appears to be a bug in the parser that requires you to add a space after ''+PSPICE'' and before the line break.
* There is a corresponding ''-PSPICE'' that is KiCad-speak for, "Stick the following text at the //start// of a SPICE netlist."
* If you don't like seeing references to PSpice in your designs, you can use ''+GNUCAP'' and ''-GNUCAP'' instead. I believe they are exact synonyms in this context, but I am not certain.
* Yes, this means you need to learn some [[http://newton.ex.ac.uk/teaching/cdhw/Electronics2/userguide/sec5.html|SPICE and Nutmeg]] syntax. It's not hard.
- Run the simulation:
* Click the "Generate netlist" button (or the equivalent menu item).
* Select the "Spice" tab, and make sure "Default format" is checked. (You should only have to do this once; it will just save you time in subsequent invocations of the dialog.)
* Click the "Run simulator" button.