Simulatie
Circuit simulatie
Een analoge simulatie van de netlist van een schema: werkpunt, AC, transient en ruis, met op-amp-, LDO- en apparaatblokken en controles.
Een analoge simulatie van een schema, rechtstreeks uit zijn netlist: het werkingspunt altijd, en een AC-sweep, een transiënt en een ruisanalyse op verzoek. De solver is gewijzigde knooppuntanalyse met Newton-iteratie (knooppuntbeperking, dan gmin-stappen, dan bronstappen als het werkingspunt niet stabiliseert), trapeziumintegratie met backward Euler na elk breekpunt en een stap die halveert als Newton faalt, complexe AC op het werkingspunt, en ruis via de adjointmethode. agentee new sim NAME --kind circuit (MCP new_item met sim_kind = "circuit") schrijft een startbestand. agentee sim NAME schrijft NAME.result.json; de viewer plottet het transiënt, de versterking, de fase en de ruis, met het werkingspunt en de controles ernaast, en agentee render NAME tekent hetzelfde headless.
name = "lna-supply"
kind = "circuit"
schematic = "lna" # default: the only top-level schematic
ignore = ["D3"] # parts to leave out
record = ["VCC", "LED_A"] # nets in the curves, default every net
# temperature = 27 # deg C, for the noise and the junctions
[[drives]] # only drives drive a net: give every supply one
net = "VEXT"
dc = "5V"
# return = "VNEG" # default ground
# current = true # a current source into `net`, in A
# ac = 1 # the AC and noise input, in V (or A)
# resistance = "50ohm" # in series (in parallel for a current source)
steps = [["0s", "0V"], ["1ms", "0V"], ["2ms", "5V"]] # piecewise linear, for the transient
# pulse = { low = "0V", high = "5V", delay = "1ms", rise = "1us", fall = "1us", width = "1ms", period = "2ms" }
# sine = { offset = "0V", amplitude = "1V", frequency = "1kHz", delay = "0s" }
[ac]
from = "10Hz"
to = "10MHz"
points = 20 # per decade
[tran]
stop = "10ms"
step = "10us" # the largest step
[noise]
output = "OUT"
input = "VIN" # a drive with `ac`: adds the input referred curve
from = "10Hz"
to = "100kHz"
[[checks]]
v = "VCC" # a net voltage at the operating point
min = 4.55
max = 4.85
[[checks]]
i = "R1" # the current through a two-pin part, pin 1 to pin 2
at = "5ms" # a time reads the transient
min = "2mA"
[[checks]]
v = "OUT"
at = "1kHz" # a frequency reads the AC gain in dB against the ac drive
min = 19.5
# phase = "OUT" # degrees at a frequency
# noise = "OUT" # V/rtHz at a frequency, at the [noise] output
[[checks]]
thd = "OUT" # over the transient: peak, trough, rms, freq or thd
from = "2ms" # the span read, default the whole transient
# to = "10ms"
max = "1%"
# peak = "OUT" # highest voltage in the span; trough is the lowest
# rms = "OUT" # RMS about the span's mean, V
# freq = "OUT" # from the rising crossings of the mean, Hz
[[blocks]] # a model for a part, by `ref` or by `value` (every such part)
ref = "U1"
kind = "opamp"
gain = 1e5
gbw = "1MHz"
# rout = "10ohm"
# vos = "0V"
# en = "10n" # input voltage noise, V/rtHz
# headroom = "0.1V" # how close the output swings to its rails
# headroom_high = "1.5V" # per rail, default `headroom`
# headroom_low = "5mV"
# slew = "0.3V/us" # slew rate, transient only
# ib = "-20nA" # input bias current, into each input pin
# psrr = "100dB" # supply changes about the operating point, referred to the input
# fc = "100Hz" # 1/f corner of `en`
# pins = { inp = "3", inn = "2", out = "1", vcc = "8", vee = "4" }
[[blocks]]
ref = "RV1"
kind = "potentiometer" # pins 1 and 3 are the ends, 2 the wiper
position = 0.25 # 0 puts the wiper at pin 1, 1 at pin 3; default 0.5
# resistance = "10k" # the end to end value, default the part's valuethd is de harmonischen 2 tot 10 ten opzichte van de grondtoon, in procent, over de volledige perioden tussen de eerste en laatste stijgende kruising van het gemiddelde in het bereik. freq en thd hebben daar minstens één volledige periode nodig. Begin het bereik nadat het circuit is gestabiliseerd, anders leest de opstartstap als vervorming.
Een transiënt slaat ook het spectrum op van elk geregistreerde net over zijn tweede helft (een Hann-venster, in dBV, 2048 bins), getekend onder het transiënt in de viewer.
De ingebouwde apparaatmodellen hieronder zijn generieke vervangers (een siliciumdiode, een kleine-signaal-BJT, een logica-niveau-MOSFET), niet het onderdeel op het schema. Geef elk onderdeel dat ertoe doet een blok met waarden uit zijn datasheet, en pas een diode's is en n aan op twee van zijn typische VF-punten: twee punten een decade stroom uit elkaar geven n = dV / (Vt ln 10) en is = I / exp(V / (n Vt)). Een resultaat dat op een standaardwaarde berust, beschrijft de standaardwaarde, niet het onderdeel.
Waarden nemen SI-voorzetten en eenheden: "4k7", "100nF", "1MHz", "10meg", of een kaal getal. De grond is elk net dat GND, 0V, GROUND heet of begint met VSS, tenzij een drive het benoemt. Nets met niets om ze te houden zitten op een geleidbaarheid van 1 pS naar grond.
De netlist wordt elementen via het referentieteken van het symbool:
| referentie | element |
|---|---|
R | weerstand van de waarde; 0 ohm, JP, SJ en NT voegen hun nets samen |
C, L | condensator, spoel van de waarde |
FB | 0,1 ohm, tenzij een blok het meer geeft |
D, LED, DZ | diode via pinnaam (A, K): silicium (Is 10 fA, n 1); een symbool of waarde met Schottky, BAT of SS1 is Schottky (10 nA, 1,05); LED is (1 aA, 2); een zener neemt zijn doorbraakspanning uit de waarde (BZX84C3V3 is 3,3 V), met een knie van 1 mA |
Q met B, C, E-pinnen | Ebers-Moll-BJT, PNP als het symbool of de waarde dat zegt: Is 10 fA, Bf 100, Br 1 |
Q, M met G, D, S-pinnen | niveau-1-MOSFET met een gladde drempel, P-kanaal als het symbool PMOS zegt: Vth 1,5 V, k 0,5 A/V^2, lambda 0,01 |
J, P, TP, H, MH, FID, Y, X, SW, BT, T | weggelaten |
| alles anders | een fout bij het benoemen, tenzij het in ignore staat of een blok heeft |
Bloktypen en hun velden:
| kind | pinnen (standaard op naam) | velden |
|---|---|---|
resistor, capacitor, inductor, bead | 1, 2 | resistance, capacitance, inductance |
diode, schottky, zener, led | a, k | is, n, bv, cj |
bjt, npn, pnp | c, b, e | is, bf, br, va, cje, cjc |
mosfet, nmos, pmos | d, g, s | vth, k, lambda, cgs, cgd |
opamp | inp (+, IN+), inn (-, IN-), out (~, OUT), vcc (V+, VCC), vee (V-, VEE) | gain, gbw, rout, vos, en, headroom |
ldo | vin, vout, gnd | vout, dropout, rout, iq |
vcvs, vccs | p, n, cp, cn (allemaal opgegeven) | gain (V/V of A/V) |
open | laat het onderdeel weg |
Een op-amp is een enkel pool: een transgeleidingsvermogen naar een knoop met gain ohm en een condensator die een versterking van één zet bij gbw, daarna een buffer die glad begrensd wordt tussen zijn rails minus headroom (geen begrenzing zonder beide railpinnen) achter rout. De versterkingsknoop stopt een beetje voorbij de begrenzing, zodat een geknipte op-amp zo snel als zijn ingang vraagt van zijn rail komt, zoals een echte op-amp doet, in plaats van vast te lopen. De begrenzing en zijn headroom zijn hetzelfde op beide rails. Elke eenheid van een op-amp met meerdere eenheden met de drie signaalpinnen is een eigen op-amp die de railpinnen deelt, de uitvoer gevonden op naam of, als die er niet is, als de enige uitvoerpin van de eenheid. Eén blok dekt elke eenheid van een onderdeel; een tweede blok voor dezelfde ref is een fout. Een LDO houdt vout boven gnd totdat de ingang binnen dropout komt, dan volgt de ingang naar beneden, en de ingang levert de uitvoerstroom plus iq.
Ruisbronnen: weerstanden (4kT/R), drijfwederstanden, diodes en BJT-collector- en basisstromen (2qI), MOSFET-kanaals (8kT gm / 3) en op-amp en. Het resultaat heeft de uitvoerruisdichtheid, de ingangsgerelateerde ruisdichtheid als input is ingesteld, en de RMS over het band.
Een controle die faalt is een fout in de simulatie terwijl het resultaat actueel is; het resultaat wordt verouderd als de specificatie of het netlist van het schema verandert. examples/lna bevat twee: lna-supply, het OR-en van de 5 V-ingang via een Schottky naar de biasstroom van U1, en lna-biastee, hoe ver de bias tee RF op de uitvoer van VBIAS houdt. Beide nemen U1 als zijn 90 mA ruststroom en de BAT60A uit zijn typische VF, uit de twee datasheets; de LED, die geen onderdeelnummer heeft, wordt weggelaten. examples/preamp is een op-amp-ontwerp dat door elke analyse wordt gehaald: het werkpunt, versterking en ruis van een versterkingsstadium en Sallen-Key-filter op een dubbele LM358, de opstartthump als de middenrail-bias zich vestigt, knippen, en de omgekeerde batterijdiode. examples/ladder-vcf is een BJT-ladderfilter: zijn simulaties controleren de 1 V/oct-tracking van de expo-converter bij drie CV's, het resonantiepiek, en zelfoscillatie in een transient.