agentee

Simulazione

Simulazione del circuito

Una simulazione analogica del netlist di uno schema: punto di lavoro, AC, transitorio e rumore, con blocchi per operazionali, LDO e dispositivi e verifiche.

Una simulazione analogica di uno schema, direttamente dal suo netlist: il punto di lavoro sempre, e una scansione AC, un transitorio e un'analisi del rumore quando richiesti. Il solver è l'analisi nodale modificata con iterazione di Newton (limitazione di giunzione, poi passo di gmin, poi passo di sorgente quando il punto di lavoro non si stabilizza), integrazione trapezoidale con Eulero inverso dopo ogni punto di rottura e un passo che si dimezza quando Newton fallisce, AC complesso al punto di lavoro, e rumore con il metodo dell'aggiunto. agentee new sim NAME --kind circuit (MCP new_item con sim_kind = "circuit") scrive un punto di partenza. agentee sim NAME scrive NAME.result.json; il visualizzatore traccia il transitorio, il guadagno, la fase e il rumore, con il punto di lavoro e le verifiche accanto, e agentee render NAME disegna lo stesso in modalità 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 sono gli armonici da 2 a 10 rispetto al fondamentale, in percentuale, su tutti i periodi tra il primo e l'ultimo incrocio crescente della media nell'intervallo. freq e thd richiedono almeno un periodo completo lì. Inizia l'intervallo dopo che il circuito si è stabilizzato, altrimenti il passo di avvio viene letto come distorsione.

Un transitorio salva anche lo spettro di ogni net registrato sulla sua seconda metà (una finestra di Hann, in dBV, 2048 bin), tracciato sotto il transitorio nel visualizzatore.

I modelli di dispositivo integrati qui sotto sono sostituti generici (un diodo al silicio, un BJT a piccolo segnale, un MOSFET a livello logico), non il componente sullo schema. Dai a ogni componente che conta un blocco con i valori dal suo datasheet, e adatta is e n di un diodo a due dei suoi punti VF tipici: due punti a un decennio di corrente di distanza danno n = dV / (Vt ln 10) e is = I / exp(V / (n Vt)). Un risultato che si basa su un default descrive il default, non il componente.

I valori accettano prefissi e unità SI: "4k7", "100nF", "1MHz", "10meg", o un numero nudo. La massa è ogni net chiamato con GND, 0V, GROUND o che inizia con VSS, a meno che una sorgente non lo nomini. I net con nulla che li tenga stanno su una conduttanza di 1 pS verso massa.

Il netlist diventa elementi dalla lettera di riferimento del simbolo:

riferimentoelemento
Rresistore del valore; 0 ohm, JP, SJ e NT uniscono i loro net
C, Lcondensatore, induttore del valore
FB0,1 ohm, a meno che un blocco non ne dia di più
D, LED, DZdiodo per nome del pin (A, K): silicio (Is 10 fA, n 1); un simbolo o valore con Schottky, BAT o SS1 è Schottky (10 nA, 1,05); LED è (1 aA, 2); uno zener prende la sua rottura dal valore (BZX84C3V3 è 3,3 V), con una ginocchia di 1 mA
Q con pin B, C, EBJT Ebers-Moll, PNP quando il simbolo o il valore lo dice: Is 10 fA, Bf 100, Br 1
Q, M con pin G, D, SMOSFET livello 1 con soglia liscia, canale P quando il simbolo dice PMOS: Vth 1,5 V, k 0,5 A/V^2, lambda 0,01
J, P, TP, H, MH, FID, Y, X, SW, BT, Tescluso
qualsiasi altroun errore di denominazione, a meno che non sia in ignore o non abbia un blocco

Tipi di blocco e i loro campi:

kindpiedini (di default per nome)campi
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 (tutti specificati)gain (V/V o A/V)
openesclude il componente

Un amplificatore operazionale è un polo singolo: una transconduttanza verso un nodo con gain ohm e un condensatore che pone il guadagno unitario a gbw, poi un buffer clamped in modo fluido tra i suoi rail meno headroom (nessun clamp senza entrambi i piedini dei rail) dietro rout. Il nodo di guadagno si ferma un po' oltre il clamp, in modo che un amplificatore operazionale in saturazione torni dal suo rail non appena il suo ingresso glielo chiede, come fa uno reale, invece di accumulare. Il clamp e il suo headroom sono gli stessi su entrambi i rail. Ogni unità di un amplificatore operazionale multi-unità con i tre piedini di segnale è un amplificatore operazionale indipendente che condivide i piedini dei rail, con l'uscita trovata per nome o, quando non ce n'è, come l'unico piedino di uscita dell'unità. Un blocco copre ogni unità di un componente; un secondo blocco per la stessa ref è un errore. Un LDO mantiene vout sopra gnd finché l'ingresso non scende entro dropout, poi segue l'ingresso verso il basso, e l'ingresso fornisce la corrente di uscita più iq.

Fonti di rumore: resistori (4kT/R), resistenze di guida, diodi e correnti di collettore e base dei BJT (2qI), canali dei MOSFET (8kT gm / 3) e en dell'amplificatore operazionale. Il risultato ha la densità in uscita, la densità riferita all'ingresso quando input è impostato, e il RMS sulla banda.

Una verifica che fallisce è un errore nella simulazione mentre il risultato è attuale; il risultato diventa obsoleto quando la specifica o la netlist dello schema cambiano. examples/lna ne contiene due: lna-supply, l'OR-ing dell'ingresso a 5 V attraverso uno Schottky alla corrente di polarizzazione di U1, e lna-biastee, quanto il bias tee tiene il RF in uscita lontano da VBIAS. Entrambi prendono U1 con la sua corrente di quiescenza di 90 mA e il BAT60A dal suo VF tipico, dai due datasheet; il LED, che non ha un numero di parte, è escluso. examples/preamp è un progetto di amplificatore operazionale eseguito attraverso ogni analisi: il punto di lavoro, il guadagno e il rumore di uno stadio di guadagno e di un filtro Sallen-Key su un LM358 duale, il thump all'accensione mentre la polarizzazione del rail medio si stabilizza, la saturazione, e il diodo di batteria inversa. examples/ladder-vcf è un filtro a gradini BJT: le sue simulazioni verificano il tracciamento di 1 V/oct del convertitore expo a tre CV, il picco di risonanza, e l'auto-oscillazione in un transitorio.

docs/format.md · Markdown per agenti