agentee

Simuleren

Circuit simulatie

Voer de analoge kant van een schema uit vanuit de netlist: werkpunt, AC, transient en ruis, met op-amps en diodes gemodelleerd vanuit hun datasheets en controles op de resultaten.

Een circuitsimulatie voert de analoge kant van een schema rechtstreeks uit zijn netlist: het werkpunt elke keer, en een AC-sweep, een transient en een ruisanalyse wanneer de spec dat vraagt. Geen layout nodig, dus het beantwoordt de vragen die het schema bepalen: zit de bias waar hij moet, wat is de versterking bij 1 kHz, waar clip de output, hoe luid is het ruisen.

Start er één

agentee new sim preamp-ac --kind circuit

Het preamp-voorbeeld draait een 9 V op-amp-preamp door elke analyse. Dit is zijn AC- en ruisrun, ingekort:

name = "preamp-ac"
kind = "circuit"
schematic = "preamp"
record = ["VCC", "VREF", "GAIN_OUT", "FILT_OUT", "OUT"]

[[drives]]
net = "VBAT"
dc = "9V"

[[drives]]
net = "IN"
ac = 1
resistance = "100ohm"

[ac]
from = "1Hz"
to = "1MHz"
points = 20

[noise]
output = "OUT"
input = "IN"
from = "20Hz"
to = "20kHz"

[[checks]]
v = "VREF"
min = 4.1
max = 4.3

[[checks]]
v = "OUT"
at = "1kHz"
min = 18.3
max = 19.3

[[checks]]
noise = "OUT"
at = "1kHz"
max = "500n"

[[blocks]]
ref = "U1"
kind = "opamp"
gain = 1e5
gbw = "0.7MHz"
en = "40n"
vos = "3mV"
headroom_high = "1.5V"
headroom_low = "5mV"
agentee sim preamp-ac
agentee render sim:preamp-ac -o preamp-ac.png

De run schrijft preamp-ac.result.json naast de spec, met het werkingspunt van elk net, de stroom door elk onderdeel, elke controle en zijn waarde, en de curves van de geregistreerde nets. De viewer en render plotten de versterking, fase en ruis.

Drivers

Alleen een driver drijft een net, dus geef elke voeding er één. Een driver is een spanningsbron naar ground, of naar het net in return, met resistance in serie. current = true maakt het een stroombron, zo haalt de preamp de quiescent-current van de op-amp van zijn rail. ac markeert de input van de AC- en ruisanalyses. Voor de transient neemt een driver steps (stuksgewijs lineair), een pulse of een sine.

Ground is elk net dat GND, 0V, GROUND heet of begint met VSS.

Analyses

  • Werkpunt: altijd. Newton-iteratie met junction-limiting, dan gmin-stepping, dan source-stepping wanneer het niet convergeert.
  • AC: [ac] sweept van from naar to met points per decade, gelineariseerd op het werkpunt. Versterkingen zijn in dB ten opzichte van de ac-driver.
  • Transient: [tran] draait tot stop met step als de grootste stap. Het slaat ook het spectrum van elk geregistreerd net over zijn tweede helft op.
  • Ruis: [noise] geeft de dichtheid op output en, met input, de input-referenced curve, plus de RMS over het band. Weerstanden, junction-stromen, MOSFET-kanaals en op-amp en dragen allemaal bij.

Controles

Een controle leest één getal en houdt het tussen min en max. Wat het leest, hangt af van at:

controleleest
v = "NET"de spanning op het werkpunt
v = "NET", at = "5ms"de spanning in de transient
v = "NET", at = "1kHz"de AC-versterking in dB
phase = "NET", at = "1kHz"de fase in graden
noise = "NET", at = "1kHz"de ruisdichtheid in V/rtHz
i = "R1"de stroom door een twee-pins-onderdeel, pin 1 naar pin 2
peak, trough, rms, freq, thdde transient tussen from en to

Een controle die faalt, is een fout in de simulatie. Verhoog de 1 kHz-controle hierboven naar min = 19 en de run faalt, en agentee check rapporteert het als een fout zolang dat resultaat actueel is:

error: ./preamp-ac.sim.toml: preamp-ac result: v(OUT) at 1kHz is 18.7870 dB, wanted 19 to 19.3 dB

Het resultaat wordt verouderd wanneer de spec of de netlist van het schema verandert: de controle meldt het als verouderd en laat zijn falen vallen tot de simulatie opnieuw draait, dus herhaal de simulatie na elke verandering aan de schakeling. Begin een thd- of freq-span na de schakeling is gestabiliseerd, of de opstartstap leest als vervorming.

Modellen komen uit de datasheet

Elk onderdeel wordt een element via zijn referentieletter: R, C en L op waarde, D als diode, Q als BJT of MOSFET op zijn pinnamen. Connectors, testpoints, gaten en kristallen worden weggelaten, en alles anders is een fout tot het een blok heeft of in ignore zit.

De ingebouwde onderdelen zijn generieke vervangers: een siliciumdiode, een klein-signaal BJT en een logica-niveau MOSFET. Een resultaat dat op zo'n vervanger berust, beschrijft de vervanger, niet jouw onderdeel. Geef elk belangrijk onderdeel een [[blocks]]-vermelding met waarden uit de datasheet:

  • Op-amps zijn een enkele pool met gain, gbw, rout, vos, en, ib, slew, psrr en een gladde begrenzing headroom van elk railspanning. Elke eenheid van een dubbele of viervoudige op-amp is een eigen op-amp op gedeelde rails.
  • Diodes nemen is en n. Pas ze aan op twee typische VF-punten met een decade stroom ertussen: n = dV / (Vt ln 10), dan is = I / exp(V / (n Vt)).
  • BJTs en MOSFETs nemen is, bf, va of vth, k, lambda en hun capaciteiten.
  • LDO's houden vout vast tot de ingang binnen dropout komt, dan volgen ze die naar beneden.
  • Potentiometers nemen een position van 0 tot 1, zodat de wiper belast en beladen wordt als het echte onderdeel.

Zet de datasheet en de tabel waar elke waarde vandaan komt in de description van de simulatie. De volgende persoon die het resultaat leest, vaak de agent, weet dan waar het op berust.

Voorbeelden

  • examples/preamp: het werkpunt, de versterking en het ruisniveau van een versterkingsstap en een Sallen-Key-filter op een LM358, de klap bij inschakelen, clippen en de omgekeerde batterijdiode.
  • examples/ladder-vcf: een transistorladderfilter waarvan de simulaties 1 V/oct-tracking op drie CV's controleren, de resonantiepiek en zelfoscillatie in een transient.
  • examples/lna: lna-supply controleert het OR-en van twee voedingen via Schottky's, en lna-biastee hoeveel RF de bias tee op de voeding laat.

Elke sleutel staat in de circuitreferentie.

Verbeter deze handleiding · Markdown voor agents