agentee

Simulation

Schaltungssimulation

Eine analoge Simulation der Netlist eines Schaltplans: Arbeitspunkt, Wechselstrom, Transienten und Rauschen, mit Op-Amp-, LDO- und Bauteilblöcken und Prüfungen.

Eine analoge Simulation eines Schaltplans, direkt aus seiner Netliste: der Arbeitspunkt immer, und ein AC-Scan, eine Transiente und eine Rauschanalyse auf Anfrage. Der Solver ist modifizierte Knotenanalyse mit Newton-Iteration (Junction-Begrenzung, dann gmin-Schritt, dann Quellen-Schritt, wenn der Arbeitspunkt nicht einpendelt), trapezoidale Integration mit rückwärts Euler nach jedem Breakpoint und ein Schritt, der halbiert wird, wenn Newton fehlschlägt, komplexe AC am Arbeitspunkt, und Rauschen durch die Adjoint-Methode. agentee new sim NAME --kind circuit (MCP new_item mit sim_kind = "circuit") schreibt einen Starter. agentee sim NAME schreibt NAME.result.json; der Viewer plotet die Transiente, den Gewinn, die Phase und das Rauschen, mit dem Arbeitspunkt und den Prüfungen daneben, und agentee render NAME zeichnet dasselbe 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 value

thd sind die Harmonischen 2 bis 10 gegenüber der Grundwelle, in Prozent, über die ganzen Perioden zwischen dem ersten und letzten steigenden Überschreiten des Mittelwerts im Span. freq und thd brauchen dort mindestens eine volle Periode. Beginne den Span, nachdem der Schaltkreis sich eingependelt hat, oder der Einschaltvorgang wird als Verzerrung gelesen.

Eine Transiente speichert auch das Spektrum jedes aufgezeichneten Netzes über deren zweite Hälfte (ein Hann-Fenster, in dBV, 2048 Bins), gezeichnet unter der Transiente im Viewer.

Die eingebauten Bauteilmodelle unten sind generische Platzhalter (eine Siliziumdiode, ein Kleinsignal-BJT, ein Logikpegel-MOSFET), nicht das Bauteil auf dem Schaltplan. Gib jedem Bauteil, das wichtig ist, einen Block mit Werten aus seinem Datenblatt, und passe die is und n einer Diode an zwei ihrer typischen VF-Punkte an: zwei Punkte, einen Dekade Strom auseinander, geben n = dV / (Vt ln 10) und is = I / exp(V / (n Vt)). Ein Ergebnis, das auf einem Standardwert beruht, beschreibt den Standardwert, nicht das Bauteil.

Werte nehmen SI-Präfixe und Einheiten: "4k7", "100nF", "1MHz", "10meg", oder eine nackte Zahl. Die Masse ist jedes Netz, das mit GND, 0V, GROUND benannt ist oder mit VSS beginnt, es sei denn, eine Quelle benennt es. Netze, die nichts zum Halten haben, sitzen auf einer 1 pS-Leitfähigkeit zur Masse.

Die Netliste wird zu Elementen durch den Referenzbuchstaben des Symbols:

ReferenzElement
RWiderstand des Werts; 0 Ohm, JP, SJ und NT verbinden ihre Netze
C, LKondensator, Spule des Werts
FB0,1 Ohm, es sei denn, ein Block gibt mehr
D, LED, DZDiode nach Pinname (A, K): Silizium (Is 10 fA, n 1); ein Symbol oder Wert mit Schottky, BAT oder SS1 ist Schottky (10 nA, 1,05); LED ist (1 aA, 2); eine Zener-Diode nimmt ihre Durchbruchspannung aus dem Wert (BZX84C3V3 ist 3,3 V), mit einem 1 mA-Knie
Q mit B, C, E-PinsEbers-Moll-BJT, PNP, wenn das Symbol oder der Wert es sagt: Is 10 fA, Bf 100, Br 1
Q, M mit G, D, S-PinsLevel-1-MOSFET mit glatter Schwelle, P-Kanal, wenn das Symbol PMOS sagt: Vth 1,5 V, k 0,5 A/V^2, lambda 0,01
J, P, TP, H, MH, FID, Y, X, SW, BT, Tausgelassen
alles andereein Fehler bei der Benennung, es sei denn, es steht in ignore oder hat einen Block

Blocktypen und ihre Felder:

ArtPins (Standard nach Name)Felder
resistor, capacitor, inductor, bead1, 2resistance, capacitance, inductance
diode, schottky, zener, leda, kis, n, bv, cj
bjt, npn, pnpc, b, eis, bf, br, va, cje, cjc
mosfet, nmos, pmosd, g, svth, k, lambda, cgs, cgd
opampinp (+, IN+), inn (-, IN-), out (~, OUT), vcc (V+, VCC), vee (V-, VEE)gain, gbw, rout, vos, en, headroom
ldovin, vout, gndvout, dropout, rout, iq
vcvs, vccsp, n, cp, cn (alle angegeben)gain (V/V oder A/V)
openlässt das Bauteil aus

Ein Operationsverstärker ist ein Einpol: eine Transkonduktanz in einen Knoten mit gain Ohm und einem Kondensator, der bei gbw den Verstärkungsfaktor 1 ergibt, dann ein Puffer, der weich zwischen seinen Versorgungsspannungen minus headroom begrenzt wird (keine Begrenzung ohne beide Versorgungspins) hinter rout. Der Verstärkungsknoten endet etwas über der Begrenzung, sodass ein abgeschnittener Operationsverstärker sofort von seiner Versorgungsspannung zurückkommt, sobald sein Eingang es verlangt, wie ein echter, und nicht erst nach einer langen Aufwicklung. Die Begrenzung und ihr headroom sind auf beiden Versorgungsspannungen gleich. Jede Einheit eines Mehrfach-Operationsverstärkers mit den drei Signalpins ist ein eigener Operationsverstärker, der die Versorgungspins teilt; der Ausgang wird nach Name gefunden oder, wenn es keinen gibt, als der eine Ausgangspins der Einheit. Ein Block deckt alle Einheiten eines Bauteils ab; ein zweiter Block für dasselbe ref ist ein Fehler. Ein LDO hält vout über gnd, bis der Eingang innerhalb von dropout liegt, folgt dann dem Eingang nach unten, und der Eingang liefert den Ausgangsstrom plus iq.

Rauschquellen: Widerstände (4kT/R), Treiberwiderstände, Dioden und BJT-Kollektor- und Basisströme (2qI), MOSFET-Kanäle (8kT gm / 3) und Operationsverstärker-en. Das Ergebnis enthält die Ausgangsdichte, die eingangsbezogene Dichte, wenn input gesetzt ist, und das RMS über das Band.

Eine fehlgeschlagene Prüfung ist ein Fehler in der Simulation, solange das Ergebnis aktuell ist; das Ergebnis wird veraltet, wenn die Spezifikation oder das Netzliste des Schaltplans sich ändert. examples/lna enthält zwei: lna-supply, das OR-en der 5-V-Eingangsversorgung über eine Schottky-Diode zum Bias-Strom von U1, und lna-biastee, wie weit der Bias-Tee HF am Ausgang von VBIAS fernhält. Beide nehmen U1 als seinen 90-mA-Ruhestrom und den BAT60A aus seinem typischen VF, aus den zwei Datenblättern; die LED, die keine Bauteilnummer hat, wird ausgelassen. examples/preamp ist ein Operationsverstärker-Design, das durch jede Analyse läuft: der Arbeitspunkt, die Verstärkung und das Rauschen eines Verstärkerstufen- und Sallen-Key-Filter auf einem dualen LM358, der Einschaltknall, wenn der Mittelspannungs-Bias einpendelt, das Abschneiden und die Batterieumkehrdiode. examples/ladder-vcf ist ein BJT-Leiterfilter: seine Simulationen prüfen die 1-V/oct-Verfolgung des Expo-Wandlers bei drei CVs, den Resonanzspitzen und die Selbstoszillation in einer Transientenanalyse.

docs/format.md · Markdown für Agenten