I recently spent a while wrestling with KiCad’s ngspice integration in order to get a simulation of (part of) a through-zero FM circuit simulated. I had a few challenges, some of them related to how to handle interfaces to other modules within a circuit, but some related to KiCad and ngspice. A long time ago I also learned and used PSpice pretty heavily, but I’m not going to pay for it.
I think the biggest challenge is models. KiCad ships with no 3rd party models, so if you want them you’ll have to add them yourself. You can download e.g. a LM742 model from TI, or get one from the collection that @jradical linked, but you’ll have to manually link it to a symbol and set up pin connections either way. You could in theory make your own library with models included for the parts you care about, and I think that’s probably where I’ll wind up. But if you wanted to share the designs you’d also have to publish the library. Likely fine, though do take care to note the different licenses on the models vs your own contributions.
A bunch of commonly used chips don’t have models at all. I mean, for one thing you can’t SPICE simulate an ATmega chip (Arduino Nano) or ESP32 as the code doesn’t really translate into the SPICE approach to the world. You can sorta emulate it with XSPICE stuff (part of ngspice). But also, none of the chips from CEM, SSI, SSM, or Alfa Rpar have models. You might be able to make a sufficient one off the block design but it’ll require a better understanding of their workings than what’s shown on the spec sheets. The CEM3340 design, for instance, has several blocks that are not sufficiently explained to simulate.
Of course, an approximate model is good enough, most of the time. You probably don’t need a perfect VCO model. But you’ll have to build them yourself if you want the spec to be complete.
So far as simulator options go, I think the popular free ones are ngspice and LTspice. There’s a couple others like SpiceOpus, Gnucap, and Xyce but they’re not as commonly used. LTspice comes with more models but is closed source. Except for Gnucap, they’re all SPICE at their core and work pretty similarly.
You can definitely do this in ngspice, but I don’t think it’s a single control line like that, unless you’re doing a DC analysis in which cas you could do .dc R1 500 1000 100
to vary R1 from 500 to 1000. But if you want to, say, measure the level at a specific frequency as you vary one resistance then I think you’ll need to do that within a .control
block. Here’s one example of doinog that. https://www.sobremesalabs.com/parameter-sweeps-in-ngspice/