Simulation
Simulation de circuit
Une simulation analogique de la liste de nœuds d'un schéma : point de fonctionnement, AC, transitoire et bruit, avec des blocs amplificateur opérationnel, LDO et composants, et des vérifications.
Une simulation analogique d'un schéma, directement depuis sa liste de nets : le point de fonctionnement toujours, et une balayage AC, un transitoire et une analyse de bruit sur demande. Le solveur est une analyse nodale modifiée avec itération de Newton (limitation des jonctions, puis pas de gmin, puis pas de source si le point de fonctionnement ne se stabilise pas), intégration trapézoïdale avec Euler arrière après chaque point de rupture et un pas qui se divise par deux si Newton échoue, AC complexe au point de fonctionnement, et bruit par la méthode adjointe. agentee new sim NAME --kind circuit (MCP new_item avec sim_kind = "circuit") écrit un modèle de départ. agentee sim NAME écrit NAME.result.json ; le visualiseur trace le transitoire, le gain, la phase et le bruit, avec le point de fonctionnement et les vérifications à côté, et agentee render NAME dessine la même chose sans interface.
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 est les harmoniques 2 à 10 par rapport à la fondamentale, en pourcentage, sur l'ensemble des périodes entre la première et la dernière traversée ascendante de la moyenne dans l'intervalle. freq et thd nécessitent au moins une période complète là-bas. Commencez l'intervalle après que le circuit se soit stabilisé, sinon l'étape de démarrage est lue comme une distorsion.
Un transitoire stocke aussi le spectre de chaque net enregistré sur sa seconde moitié (une fenêtre de Hann, en dBV, 2048 bins), tracé sous le transitoire dans le visualiseur.
Les modèles de dispositifs intégrés ci-dessous sont des substituts génériques (une diode silicium, un BJT à petit signal, un MOSFET à niveau logique), pas le composant sur le schéma. Donnez à chaque composant important un bloc avec des valeurs issues de sa fiche technique, et ajustez is et n d'une diode à deux de ses points VF typiques : deux points à une décennie de courant d'écart donnent n = dV / (Vt ln 10) et is = I / exp(V / (n Vt)). Un résultat qui repose sur une valeur par défaut décrit la valeur par défaut, pas le composant.
Les valeurs acceptent des préfixes et unités SI : "4k7", "100nF", "1MHz", "10meg", ou un nombre seul. La masse est chaque net nommé GND, 0V, GROUND ou commençant par VSS, sauf si une source le nomme. Les nets sans rien pour les maintenir sont sur une conductance de 1 pS vers la masse.
La liste de nets devient des éléments par la lettre de référence du symbole :
| référence | élément |
|---|---|
R | résistance de la valeur ; 0 ohm, JP, SJ et NT rejoignent leurs nets |
C, L | condensateur, inductance de la valeur |
FB | 0,1 ohm, sauf si un bloc lui en donne plus |
D, LED, DZ | diode par nom de broche (A, K) : silicium (Is 10 fA, n 1) ; un symbole ou une valeur avec Schottky, BAT ou SS1 est Schottky (10 nA, 1,05) ; LED est (1 aA, 2) ; une zener prend sa tension de claquement de la valeur (BZX84C3V3 est 3,3 V), avec un genou de 1 mA |
Q avec broches B, C, E | BJT Ebers-Moll, PNP si le symbole ou la valeur le dit : Is 10 fA, Bf 100, Br 1 |
Q, M avec broches G, D, S | MOSFET niveau 1 avec seuil lisse, canal P si le symbole dit PMOS : Vth 1,5 V, k 0,5 A/V^2, lambda 0,01 |
J, P, TP, H, MH, FID, Y, X, SW, BT, T | exclu |
| tout le reste | une erreur lors de sa désignation, sauf s'il est dans ignore ou s'il a un bloc |
Types de blocs et leurs champs :
| kind | broches (par défaut, par nom) | champs |
|---|---|---|
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 (tous fournis) | gain (V/V ou A/V) |
open | exclut le composant |
Un amplificateur opérationnel est un pôle unique : une transconductance vers un nœud avec gain ohms et un condensateur qui place le gain unitaire à gbw, puis un tampon limité en douceur entre ses rails moins headroom (pas de limitation sans les deux broches de rail) derrière rout. Le nœud de gain s'arrête un peu au-delà de la limitation, de sorte qu'un amplificateur opérationnel saturé quitte son rail dès que son entrée le demande, comme un amplificateur réel, plutôt que de s'enrouler. La limitation et son headroom sont identiques sur les deux rails. Chaque unité d'un amplificateur opérationnel multi-unités avec les trois broches de signal est son propre amplificateur opérationnel partageant les broches de rail, la sortie étant trouvée par nom ou, s'il n'y en a pas, comme la seule broche de sortie de l'unité. Un seul bloc couvre toutes les unités d'un composant ; un second bloc pour la même référence ref est une erreur. Un LDO maintient vout au-dessus de gnd jusqu'à ce que l'entrée soit à dropout près, puis suit l'entrée vers le bas, et l'entrée fournit le courant de sortie plus iq.
Sources de bruit : résistances (4kT/R), résistances de pilotage, diodes et courants collecteur et base des BJT (2qI), canaux des MOSFET (8kT gm / 3) et en des amplificateurs opérationnels. Le résultat contient la densité de sortie, la densité ramenée à l'entrée si input est défini, et le RMS sur la bande.
Une vérification qui échoue est une erreur sur la simulation tant que le résultat est à jour ; le résultat devient obsolète lorsque la spécification ou la liste de nœts du schéma change. examples/lna en contient deux : lna-supply, l'OR de l'entrée 5 V à travers une Schottky vers le courant de polarisation de U1, et lna-biastee, à quel point le bias tee maintient la RF sur la sortie loin de VBIAS. Les deux prennent U1 comme son courant de repos de 90 mA et le BAT60A à partir de sa VF typique, d'après les deux fiches techniques ; la LED, qui n'a pas de numéro de composant, est exclue. examples/preamp est une conception d'amplificateur opérationnel passée par toutes les analyses : le point de fonctionnement, le gain et le bruit d'un étage de gain et d'un filtre Sallen-Key sur un LM358 double, le thump à la mise sous tension lorsque la polarisation du rail médian se stabilise, la saturation, et la diode de batterie inversée. examples/ladder-vcf est un filtre à échelle BJT : ses simulations vérifient le suivi de 1 V/oct du convertisseur expo à trois CV, le pic de résonance, et l'auto-oscillation dans un transitoire.