Abschnitte der Dokumentation
API-Änderungsprotokoll
Jede Änderung an der öffentlichen API, die ein Aufrufer bemerken könnte, die neueste zuerst. Jeder Eintrag trägt das Datum, an dem er hier angekündigt wurde; eine Änderung, die für bestehende Aufrufer nicht abwärtskompatibel ist, wird spätestens mit dem Release angekündigt, das sie einführt, und ist als Inkompatibel markiert. 29 der 81 Einträge unten sind inkompatibel.
rf-link-budget nimmt 0,5 dB atmosphärische Dämpfung an, wenn atmosphericLoss weggelassen wird
POST /api/py/v1/calculatePOST /api/py/v1/calculate/batch
Ein Aufruf ohne
atmosphericLosswurde mit 0 dB berechnet, während seineprovenance.inputsden dokumentierten Standardwert von 0,5 dB meldeten. Jetzt wird er mit 0,5 dB berechnet, wie es die Rechnerseite und die Provenienz angeben; bei einem solchen Aufruf verschieben sichrxPower,linkMarginundmaxRangeKmalso um dieses halbe Dezibel. Ein Aufruf, der die Eingabe sendet, ist unverändert.Jede andere Eingabe jedes Rechners wurde auf dieselbe Weise geprüft: Weggelassen wird sie entweder abgelehnt (400, nichts abgerechnet) oder mit ihrem dokumentierten Standardwert berechnet.
GET /v1/usage kann die Aufrufe pro Tag zurückgeben
GET /api/py/v1/usage
Übergeben Sie
?days=N, von 1 bis 90, und die Antwort erhältdaily: einen Eintrag{date, calls}für jeden der letzten N Tage in UTC, die ältesten zuerst, bis heute. Diecallseines Tages werden über alle Schlüssel des Kontos summiert, abzüglich gutgeschriebener Aufrufe, und ein Tag ohne Aufrufe zeigt 0. Tage vor dem 2026-09-24, als die stündliche Zählung begann, zeigen 0.Ohne
daysist die Antwort unverändert. Das Abfragen der Nutzung wird weiterhin nie gezählt.Die Portzahl eines Touchstone-Uploads wird aus seinen Zeilen gelesen, vor seinem Namen
rf_cascadesparam_pipelineimpedance_matcheye_diagram
Lässt die Zahl der Werte einer Datei mehr als eine Portzahl zu, entscheiden ihre Zeilen vor ihrer Endung: Drei Ein-Port-Punkte in einer Datei namens
.s2psind ein Port, nicht ein Zwei-Port-Punkt, und ein Name, dem die Daten widersprechen, wird gemeldet (port_count_mismatchin rf_cascade). Ein Schlüsselwort[Number of Ports]entscheidet weiterhin zuerst.Das Augendiagramm scheitert nicht mehr an einer Datei, deren Endung mehr Ports nennt, als ihre Daten enthalten.
Die Monte-Carlo-Simulation des Filters führt bis zu 1.000 Durchläufe kostenlos und 100.000 bei Pro und API aus, innerhalb eines Arbeitsbudgets
POST /api/py/v1/jobs (filter_monte_carlo)POST /api/py/v1/jobs/estimateGET /api/py/v1/jobs/typesMCP simulate_filter_monte_carlorftools-io SDK
monteCarloIterationsreicht im Free-Tarif bis 1.000 (vorher 500) und bei Pro und API bis 100.000 (vorher 10.000). Die Zeitobergrenze des Jobs liegt bei 180 s (vorher 120 s).Die Kosten eines Laufs sind seine Durchläufe mal die Kettenleiter-Auswertungen, die jeder braucht, bestimmt durch seine Bauteile und
passCriteria. Ein Lauf, dessen Vorhersage das Budget seiner Rechenumgebung überschreitet (120 s in der bezahlten, 60 s in der kostenlosen), wird beim Einreichen und von der Schätzung miterrorKind: "too_large"abgelehnt, bevor etwas abgerechnet wird. Das Detail nenntmonteCarloIterationsund gibt die Kosten, das Limit und inallowed.maxdie größte Zahl von Durchläufen an, die passt. 100.000 Durchläufe eines Kettenleiters aus 5 Bauteilen mit drei Kriterien passen; ein Kettenleiter aus 20 Bauteilen mit acht Kriterien passt bis 53.304.Die Schätzung meldet
withinBudget, einbudgetder ArtladderEvaluationsundworkalstrialsundladderEvaluationsPerTrial, was auchcomputeCost.workeines Jobs festhält.Die Stufenliste einer HF-Kaskade wird beim Einreichen geprüft
POST /api/py/v1/jobsPOST /api/py/v1/jobs/estimaterf_cascade
Ein fehlerhaftes
stages(kein JSON, leer, eine Stufe, die kein Objekt ist, ein Wert, der keine endliche Zahl ist) wird mit einem 400 abgelehnt, der die Stufe und den Schlüssel nennt, bevor etwas abgerechnet wird. Früher wurde es angenommen und scheiterte dann als Fehler (fault).Die Stufenwerte sind begrenzt:
gain_db±1000 dB,nf_db0 bis 1000 dB,iip3_dbmundp1db_dbm±1000 dBm, und die Verstärkung der Kette nach jeder Stufe innerhalb von ±1000 dB.NaN,Infinityundtrue/falsewerden abgelehnt; als Text geschriebene Zahlen werden weiterhin gelesen.Ein Stufenschlüssel, der sich von einem bekannten nur in der Groß- und Kleinschreibung unterscheidet (
gain_dB,IIP3_dbm,Name), wird abgelehnt, mit der Stufe und dem richtigen Schlüssel; früher wurde er ignoriert, und die Stufe lief mit dem Standardwert. Jeder andere Schlüssel, den eine Stufe nicht annimmt (notes,part), wird mit einer Warnungunknown_stage_keyignoriert.Eine Stufe, deren
sparamFilenicht mit dem Job hochgeladen wurde, wird abgelehnt, statt mit ihrer eingetippten Verstärkung berechnet zu werden.Ohne Interceptpunkt lautet der Wert null, nicht 99 dBm
POST /api/py/v1/jobsrf_cascade
Der IIP3 einer passiven Stufe sowie IIP3, OIP3, P1dB und SFDR einer Kette, wo keine Stufe sie begrenzt, sind
null(sie waren 99 dBm und 99 + Verstärkung). Die Monte-Carlo-Perzentile und das Histogramm des IIP3 sind dortnull, und die IIP3-Ausbeute ist 100 %.Eine passive Stufe fügt keinen Interceptpunkt von 99 dBm mehr hinzu: Ein 150-dB-Dämpfungsglied vor einem Verstärker mit 0 dBm IIP3 ergibt jetzt 150 dBm, nicht 99.
HF-Kaskade: passives Rauschen aus Dateien, Vorzeichen im Monte-Carlo, exakte Interceptpunkte, Warnungen
rf_cascade
Eine passive Stufe, deren Verstärkung aus einer Datei stammt, leitet ihre Rauschzahl aus dieser Verstärkung ab.
Das Monte-Carlo bewegt die Rauschzahl einer passiven Stufe mit ihrer Dämpfung; das Vorzeichen war umgekehrt.
Eingangs-IIP3 und P1dB werden exakt berechnet, wie tief sie auch fallen (drei 300-dB-Verstärker: −600 dBm und −610 dBm, die vorher −270 dBm ergaben); eine Untergrenze von −270 dBm bleibt nur als Schutz, wo die Summe hinter einem Punkt keine positive, endliche Zahl ist, was die Stufengrenzen unerreichbar machen, sodass ein P1dB den Job nicht mehr scheitern lässt.
Warnungen
unknown_stage_type,unknown_stage_keyundfile_not_uploaded.Die Impedanzanpassung rastet logarithmisch ein und rechnet den Sweep mit dem Leistungswellen-Reflexionsfaktor
POST /api/py/v1/jobsimpedance_match
Bauteile der E12-, E24- und E96-Reihe sind der Normwert, der auf logarithmischer Skala am nächsten liegt, so wie die Reihen gestuft sind; genau in der Mitte der kleinere. 2,099 nH ist jetzt 2,2 nH, nicht 2,0 nH. Wo die beiden Regeln sich unterscheiden, können sich die Bauteile, die Rückflussdämpfung und der Zweig ändern, den
autowählt.|S11|, die Smith-Trajektorie, die Rückflussdämpfung im ungünstigsten Fall und die Bandbreite verwenden den Leistungswellen-Reflexionsfaktor (Z − Zs*)/(Z + Zs), wie es die Werte bei f0 tun. Eine reelle Quelle ist unverändert; eine komplexe Quelle, eingetippt oder aus einer Datei gelesen, ergibt ein anderes |S11|.
Die Impedanzanpassung nennt ihre Entwurfsfrequenz, das Frequenzmodell ihrer Last und ihre Werte bei f0
POST /api/py/v1/jobsPOST /api/py/v1/jobs/estimateimpedance_match
Jeder neue Parameter ist optional; eine Anfrage ohne sie erhält die Antwort, die sie vorher erhielt.
designFreq(Hz): f0, getrennt vonfreqStart–freqStopund innerhalb davon angegeben; fehlt er, die Bandmitte.loadModel:constant(fehlt er),series_rcoderseries_rl(bei f0 angepasst; eine Reaktanz mit falschem Vorzeichen wird abgelehnt) oderfile(die eigenen Frequenzpunkte der hochgeladenen Last).branchPreference:any,lowpassoderhighpass, mit einer Warnungbranch_preference_unmet, wo es keinen solchen Zweig gibt. Eine Lastdatei.s1pwird angenommen.Neue Ergebnisse:
designFreqHz,loadModel,unmatchedLoad,performance.idealund.standard(Rückflussdämpfung, VSWR, beseitigter Fehlanpassungsverlust und die Bandbreite mit RL ≥ 10 dB mit ihren Grenzen und ihrem Anteil an f0, per Bisektion aufgelöst),branchundqDefinitions.Das Augendiagramm nimmt einen Sendehub, einen CTLE und eine Maske an
POST /api/py/v1/jobs (eye_diagram)MCP simulate_eye_diagram
Jeder neue Parameter ist optional, und eine Anfrage ohne sie erhält die Antwort, die sie vorher erhielt.
launchSwing(mV Spitze-Spitze, Standardwert 2000, die ±1 V, die jedes frühere Ergebnis annahm) skaliert jede Spannung;eyeHeightPctOfSwinggibt die Augenhöhe als Anteil davon an.equalization: ctlewendet das zeitkontinuierliche Filter aus IEEE 802.3 Annex 93A an.ctleDcGain(−12 bis 0 dB) legt seine Verstärkung fest; leer wird die beste aus −12 bis 0 dB in 1-dB-Schritten gewählt.ctlemeldet die Verstärkung, die Anhebung bei Nyquist, den Durchlauf und das Auge davor.maskType(hexagon oder rectangle),maskHalfHeight(mV) undmaskWidth(UI) liefernmask.pass,margin_mVund die Verletzungen.samplingPhase(UI nach dem Nulldurchgang) undlossFrequency(Hz) ergänzensamplingundlossAtFrequency.Jedes Ergebnis trägt
channelFile,uiMeasuredundtraceCount.Die Radardetektion nimmt einen Zufalls-Seed an
POST /api/py/v1/jobs (radar_detection)provenance.seed
randomSeed(eine ganze Zahl, 0 oder mehr) ersetzt den festen Monte-Carlo-Seed 42 und wird alsprovenance.seedfestgehalten, sodass sich ein Lauf wiederholen und eine Was-wäre-wenn-Variante auf denselben Zufallszahlen erneut einreichen lässt. Ohne ihn ist jedes Ergebnis unverändert.Die Monte-Carlo-Simulation des Filters rechnet einen Kettenleiter wie aufgebaut durch, gegen von Ihnen gesetzte Kriterien, und sagt, was enger toleriert werden muss
POST /api/py/v1/jobs (filter_monte_carlo)MCP simulate_filter_monte_carlorftools-io SDK
Jeder neue Parameter ist optional, und eine Anfrage ohne sie erhält die Antwort, die sie vorher erhielt, mit neuen Ergebnisfeldern daneben.
parts(1 bis 20, von der Quelle zur Last:ref,kindL oder C,positionseries oder shunt,valuein H oder F, optionaltolerancein %) simuliert den Kettenleiter wie angegeben, ohne Rundung auf E24.passCriteria(1 bis 8:insertionLossüberfStart–fStophöchstensmaxDb,cutoff3dBinnerhalb vonfMin–fMax,attenuationbeifreqoder überfStart–fStopmindestensminDb) ersetztrippleSpec_dbundrejectionSpec_db.yieldTarget(%, 95, wenn leer).Neue Ergebnisse:
circuit,yieldTargetmit einem Urteil gegen das 95-%-Intervall,criteriamit Statistiken, Histogrammen und demvarianceShare(r²) jedes Bauteils,failingTrials(die ersten 200),sampleTrialsund, bei eingegebenen Kriterien,whatIfs: die Bauteile, die das am häufigsten verfehlte Kriterium bestimmen, eine Toleranzstufe enger, auf denselben Durchläufen neu gerechnet. Ein erneutes Einreichen mit demrandomSeeddes Laufs und diesen Toleranzen ergibt dieselbe Ausbeute.Der Regelkreis des Schaltnetzteils nimmt seinen Kompensator in Bauteilen an, löst nach einer Durchtrittsfrequenz auf und gibt ein Urteil
POST /api/py/v1/jobsPOST /api/py/v1/jobs/estimatesmps_control_loop result
Jede neue Eingabe ist optional, und eine Anfrage ohne sie erhält die Antwort, die sie vorher erhielt.
compensatorType: type2_otamitcompRc,compCc,compChf,compGmundcompVrefbeschreibt einen Typ-II-Kompensator mit Transkonduktanzverstärker über seine Bauteile, exakt auf K, f_z und f_p abgebildet. EincompVrefüberVoutwird abgelehnt.solveFor: crossovermittargetCrossover(Hz, Standardwert Fsw/10),resistorSeries(E96) undcapacitorSeries(E12) setzt R_c, C_c und C_hf im Peak-Current-Mode und meldet, was sie erreichen.minPhaseMargin(45°) undminGainMargin(10 dB) bestimmen das Urteil und die Monte-Carlo-Ausbeute.Neue Ergebnisse:
verdict,polesZeros,nominal.phaseCrossoverHz,nominal.loopGainAt100HzDb,compensatorParts,solve,runSummaryundbodeAboveHalfFsw, die Frequenzgänge bis 2·Fsw, wo keine Reserve abgelesen wird.Sechzehn Timing-Rechner bewerten ihr Timing gegen ein Budget
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batchprovenance.validRange
Jede neue Eingabe ist optional, und eine Anfrage ohne sie erhält die Antwort, die sie vorher erhielt, außer wo die folgenden Einträge etwas anderes sagen.
uart-baud-rate:oversampling(16 oder 8),divisorFraction(0 ein ganzzahliger Teiler, 1 ein Bruch in Schritten von 1/oversampling) underrorBudget(%, 2, dem die Warnung zum Baudratenfehler folgt);divisorSet,baudError_pct(vorzeichenbehaftet) undstopSampleOffset_bits.can-bus-timing:sjw(tq, 1);bitRateActual,bitRateError_pct,samplePointActualundoscTolerance_pct, die Takttoleranz, die ISO 11898-1 jedem Knoten erlaubt.lin-bus-timing:slotTime(ms, 10);frameTimeMax, 1,4 × der Nennrahmen (LIN 2.x).modbus-frame-timing:charGap(ms, 0), den die Rahmenzeit jetzt mitzählt;t15,charGapCharsundt15Chars.spi-timing:riseTime(2,2τ) undedgeShare_pct.i2s-timing:mclk(MHz, 16,9344) undrateBudget(%, 0,1);mclkDivider,bclkActual,sampleRateActualundsampleRateError_pct.pwm-duty-cycle:timerClock(MHz, 16) undrequiredBits(8);periodCounts,onCounts,dutyActual,frequencyActualunddutyResolution_bits.555-timer:targetTime(ms, 2),errorBudget(%, 5),rToleranceundcTolerance(%, 0);timeMin,timeMaxundtimingError_pct.rc-time-constant:rTolerance(%, 1),cTolerance(%, 5) undtauBudget(%, 10), mit einer Warnung darüber hinaus;tauMinUs,tauMaxUsundtauErrorPct.inductor-energy:requiredTime(µs, 20).battery-charge-time:requiredTime(h, 3).supercapacitor-backup:holdUpTime(s, 60).motor-inrush-current:dipLimit(%, 10).via-step-response:slowdownBudget(%, 10), dem die Warnung zur Verlangsamung jetzt folgt. Jeder dieser Werte wird bei 0 oder darunter abgelehnt.inrush-current-limiter:ntcR25(Ω, 0 für den erforderlichen Wert) undntcTolerance(%, 20);peakInrushMax. Mit gesetztemntcR25folgenpeakInrush,timeConstantundlimitingResistordem angepassten Thermistor.pid-tuning:overshootBudget(%, 25);overshootPctundsettlingTimeaus einer simulierten Sprungantwort des geschlossenen Regelkreises.Vierzehn Frequenzrechner zählen ihre Produkte innerhalb eines Bandes
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batchprovenance.validRange
Jede neue Eingabe ist optional, und eine Anfrage ohne sie erhält die Antwort, die sie vorher erhielt, außer wo die folgenden Einträge etwas anderes sagen.
mixer-spur-calculator:rfBandLow/rfBandHigh(MHz, 902/928),ifBandwidth(MHz, 10) undnearMargin(MHz, 50);spursInBand,spursNearBand,nearestSpur,imageFreq,imageToBandundloToBand, aus jedem HF-Eingang, der in die ZF umsetzt, f_RF = (m·f_LO ± f_IF)/n (m die LO-Harmonische, n die HF-Harmonische, wie in der älteren Zählung), m + n bismaxOrder.intermodulation-distortion:bandLow/bandHigh(MHz, 88/108);productsInBand.vibration-phase-noise:offsetBandLow/offsetBandHigh(Hz, 1000/10000);sidebandsInBand.phase-noise-to-jitter:pointsIntegrated.ism-coexistence:channelWidth1_MHz/channelWidth2_MHz(20/2);overlappingChannels, mit den Kanälen gleichmäßig über das Band verteilt.channels1undchannels2sind auf 100 begrenzt.via-stub-resonance:dataRate(Gb/s, 10);nyquistFreq,resonancesInBandundresonancesNearBand.chassis-resonance:bandLow/bandHigh(MHz, 30/1000);f011MHzundmodesInBand.room-modes:bandLow/bandHigh(Hz, 20/200);modesInBand,modesNearBandundmodalBandwidth.sampling-nyquist:harmonicOrder(5);aliasesInBand(der Ton selbst, ins Signalband gefaltet),harmonicAliasesInBand(seine hineingefalteten Harmonischen, die bis zum SFDR des Wandlers zählen) undlowestAliasingInput.fft-bin-resolution:toneFreq(Hz, 1000) undsidebandSpacing(Hz, 100);toneBin,toneLevelError,resolutionBandwidthundsidebandsUnresolved(null für einen Ton über f_s/2).am-modulation-index:channelWidth(kHz, 10);powerInChannel,sidebandsInChannelundsidebandsOutside.fm-modulation-index:channelLow/channelHigh(kHz, 98000/98200);occupiedBandwidth,powerInChannel,sidebandsInChannelundsidebandsOutside(null über β = 1000, mit einer Warnung).oversampling-snr:signalBandwidth(Hz, 24000);modulatorRate,outOfBandNoiseundfoldBands.digital-filter-order:toneFreq(Hz, 1000) undmaxHarmonic(5);harmonicsInPassband,harmonicsInTransition,nearestHarmonic,butterworthAttenuationundchebyshevAttenuation.can-bus-timing: der Vorteiler und die Quanten, die der Bitrate am nächsten kommen
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Von jedem Bit mit 8 bis 25 Zeitquanten (CAN 2.0), mit dem Vorteiler auf beiden Seiten des geforderten, das der Bitrate am nächsten liegende; dann der Abtastpunkt, der dem angefragten am nächsten liegt (CiA 601-3); dann 16 Quanten; dann der kleinste Vorteiler. Bisher wurde der Vorteiler genommen, der 16 Quanten am nächsten kam, gleich welche Rate sich daraus ergab: 36 MHz bei 500 kbps waren 5 × 14 Quanten, 2,86 % zu schnell, und sind jetzt 3 × 24, exakt.
prescaler,nominalBitTime,tqund die Segmente ändern sich, wo eine exakte oder genauere Einstellung existiert; jeder Standardwert und jede Voreinstellung bleibt unverändert.Der Abtastpunkt liegt höchstens ein Quantum vor dem Ende des Bits, sodass die Segmente sich dazu aufsummieren (8 Quanten bei 95 % waren 9).
modbus-frame-timing: feste Zeitgeber über 19 200 Bd
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Über 19 200 Bd ist
t35fest 1,75 ms (Modbus over Serial Line V1.02, Abschnitt 2.5.1.1), nicht mehr 3,5 Zeichen (0,334 ms bei 115 200 Bd 8E1), undmaxFrameRatefolgt; das neuet15ist dort fest 750 µs.intermodulation-distortion: im3High ist ein Betrag
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
im3Highist |2f₂ − f₁|, wie esim3Lowschon war: Unter f₂ = f₁/2 war es negativ (100 und 40 MHz: −20, jetzt 20 MHz).chassis-resonance: exaktes c und die Mode (0,1,1)
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Die Lichtgeschwindigkeit ist exakt, 29 979 245 800 cm/s, nicht 3 × 10¹⁰:
fLowest,f101MHzundf110MHzsinken um 0,07 % (901,39 → 900,76 MHz bei den Standardwerten).fLowestschließt (0,1,1) ein, die tiefste Mode, wenn die Länge die kürzeste Seite ist (Pozar, Microwave Engineering, 4. Aufl., Abschnitt 6.3): Ein Gehäuse von 10 × 30 × 20 cm ergab 1581 MHz und ergibt jetzt 900,76 MHz;wavelengthAtResonancefolgt.phase-noise-to-jitter: das Profil als Potenzgesetze integriert
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Mit
profileMode1 wird das Profil zwischen seinen Punkten als Potenzgesetze integriert, als Geraden in doppelt logarithmischer Darstellung (Drakhlis, Microwaves & RF, Januar 2001), und das Band endet dort beim eigenen Pegel des Profils. Ein lineares Trapez überschätzte ein fallendes Profil, und L₄ wurde bis zum Bandende gehalten, selbst wo es jenseits davon liegt: Das Standardprofil bei 100 MHz ergab 0,166 ps und ergibt jetzt 0,084 ps.rmsJitter,cycleToCycleJitter,phaseNoisePower,rmsPhaseErrorundadcSnrLimitändern sich in diesem Modus; der Modus mit einem einzigen Pegel ist unverändert.sampling-nyquist: Der Alias faltet sich auf das nächste Vielfache von f_s
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
aliasFreq_Hzist |f − k·f_s| mit k der ganzen Zahl, die f/f_s am nächsten liegt (Kester, MT-002). Es war |f_s − f|, nur bis 1,5·f_s richtig: 10 kHz bei 4 kSa/s ergaben 6000 Hz und ergeben jetzt 2000 Hz.fm-modulation-index: die Bessel-Bandbreite aus den Bessel-Funktionen
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
besselBandwidthumfasst die Seitenbänder über 1 % des unmodulierten Trägers, 2·n·f_m (Haykin, Communication Systems): Es war 2(β + 1)·f_m, noch einmal die Carson-Regel. Bei β = 5 waren es 180 kHz, jetzt 240 kHz. Über β = 1000 ist es null, mit einer Warnung.digital-filter-order: die exakte elliptische Ordnung
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
ellipticOrderlöst die Gradgleichung K(k)·K′(k₁)/(K′(k)·K(k₁)) mit k = f_p/f_s und k₁ = ε_p/ε_s. Es war die Tschebyscheff-Ordnung durch 1,5, in den meisten Entwürfen zu hoch und in manchen zu niedrig: Die Standardwerte brauchen 3, nicht 4; ein Übergang 2:1 bei 1 und 20 dB braucht 3, nicht 2.via-stub-resonance: kein Stub, keine Resonanz
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Mit dem Ausgang auf der letzten Lage gibt es keinen Stub:
resonantFrequndbackdrillBenefitsind null (eine unbegrenzte Resonanz), nicht mehr 0.room-modes und inductor-energy: Ablehnungen, die nennen, was falsch ist
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
room-modeslehnt eine Schallgeschwindigkeit oder eine Nachhallzeit von 0 oder darunter mit einer eigenen Meldung ab und gibt neben einer Ablehnung keine Werte zurück; vorher gab es Nullen zurück und nannte die Raummaße.inductor-energylehnt einen Serienwiderstand von 0 oder darunter ab, wie es die Website immer tat; die API scheiterte daran.Acht weitere Wandler- und Treiberrechner nehmen einen Betriebsbereich an, wählen ihre Bauteile und ergänzen ein Verlustmodell
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batchprovenance.validRange
Wie
buck-converter: Jede Eingabe, die im Betrieb schwankt, ist ein Paar<input>Minund<input>Max, wobei 0 (der Standardwert) die Nenneingabe bedeutet. Jeder ungünstigste Fall ist eine Ausgabe, mit den Eingabewerten, bei denen er auftritt, als eigene Ausgaben (rippleWorstAbeirippleWorstVin). Bauteile werden mindestens so gewählt, wie die ungünstigste Ecke es verlangt, eine Induktivität aus der E12-Reihe und eine Nennspannung als nächster Normwert ab dem 1,5-Fachen der höchsten Spannung (der Schalter des Sperrwandlers ab seiner geklemmten Drain-Spitze). Die Eingaben des Verlustmodells haben typische Standardwerte; seine Verluste gelten im Nennpunkt, in W, und addieren sich zulossTotal. Eine Anfrage ohne die neuen Eingaben erhält die Antwort, die sie vorher erhielt, außer wo die folgenden Einträge etwas anderes sagen.boost-converter:inputVoltageMin/inputVoltageMax;coutEachsowierdsOn,tSwitch,qg,vGate,vDiode,qrr,dcr,coreLoss,esrOutdes Verlustmodells. Zu den neuen Ausgaben gehörendutyMin/dutyMax,inductorMinWorstUHundinductorChosenUH,ilPeakWorst,inputCurrentWorst,q1RmsA,coutRmsA,outputRippleMV,vdsRating, acht Verluste undefficiencyLossModel; die Eingabeefficiencybestimmt weiterhin die Ströme.flyback-converter:vinMin/vinMax, an jeder Ecke mit dem Nenntransformator gerechnet;rdsOn,tFall,qg,vGate,vDiode,rPri,rSec,coreLoss,leakageInductance(µH, Standardwert 2,6) undclampRatio(Standardwert 2, ab 1,1) des Verlustmodells, mit dem Verlust der RCD-Klemmschaltung ½·L_lk·I_pk²·f·k/(k − 1). Zu den neuen Ausgaben gehören die Spitzen- und Effektivströme beider Wicklungen,reflectedVoltage,clampVoltage,vdsPeakWorst,vdsRating,diodeVrWorst,diodeVrRating, sieben Verluste undefficiencyLossModel.charge-pump-voltage:inputVoltageMin/inputVoltageMaxundpumpCurrentMin/pumpCurrentMax;switchResistance(Ω, Standardwert 1) undesr(mΩ, Standardwert 10), zum Ladungsteilungswiderstand addiert, wie es R_O im Datenblatt des ICL7660 ist. Zu den neuen Ausgaben gehörenloadedVoltageMin/loadedVoltageMax,outputResistance,loadedVoltageWithLosses, die Nennwerte der Kondensatoren und Schalter, drei Verluste undefficiencyLossModel(gleichefficiencybei idealen Bauteilen).switching-regulator-ripple:outputCurrent(A, Standardwert 2),inputVoltageMin/inputVoltageMaxund das Verlustmodell des Abwärtswandlers für seine eigenen Bauteile (seinesrist der des Ausgangskondensators). Zu den neuen Ausgaben gehören die Welligkeiten und Effektivströme im ungünstigsten Fall,vdsRating, acht Verluste undefficiency.mosfet-power-dissipation:drainCurrentMin/drainCurrentMaxundtAmbientMin/tAmbientMax(jeder Wert außer 0, das den Nennwert bedeutet);rdsonTempco(%/°C, Standardwert 0), in geschlossener Form bis zur Sperrschicht gelöst,coss(pF, Standardwert 0),qgundvGate. Zu den neuen Ausgaben gehörenjunctionTempWorstmit seinem Strom und seiner Umgebungstemperatur,totalLossWorst,efficiencyWorst,vdsRating, vier Verluste undefficiencyLossModel.h-bridge-selectionundmotor-driver-power:motorCurrentMin/motorCurrentMaxund der Bereich der Versorgung (motorVoltageMin/motorVoltageMax,supplyVoltageMin/supplyVoltageMax); die TotzeittDeadundvBodyder Body-Diode (TI SLVA504A), und bei der H-BrückedutyCycle(%, Standardwert 75),tSwitch,qgundvGate. Zu den neuen Ausgaben gehören der größte Brückenverlust, der heißeste FET,vdsRating, die Verluste undefficiencyLossModel.class-d-efficiency:outputPowerMin/outputPowerMaxundsupplyVoltageMin/supplyVoltageMax;switchingFreq(kHz, Standardwert 400),filterCutoff(kHz, Standardwert 40),tSwitch,coss,qg,vGatesowiedcrundcoreLossder Filterinduktivität. Zu den neuen Ausgaben gehören das Ausgangsfilter (TI SLAA701B), wie berechnet und wie gewählt, fünf Verluste,loadPower,efficiencyLossModel, der schlechteste Wirkungsgrad und der größte Verlust mit ihren Ecken,headroomWorst(negativ, wo die Brücke den Ausgang nicht aussteuern kann), Welligkeits- und Spitzenströme des Filters sowie die Nennwerte.boost-converter: Das Tastverhältnis ist das aus TI SLVA372D
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Das Tastverhältnis war 1 − V_in/(V_out·η), sodass Verluste es verkürzten, im Widerspruch zum Eingangsstrom des Rechners selbst. Jetzt ist es TI SLVA372D Gl. 1, D = 1 − V_in·η/V_out. Bei den Standardwerten (5 V auf 12 V, 0,5 A, 100 kHz, 88 %) wird
dutyCyclevon 52,65 % zu 63,33 %,inductorValuevon 64,35 µH zu 77,41 µH undoutputCapacitorvon 4,388 µF zu 5,278 µF.Die Ablehnung und die Warnung verschieben sich mit: Eine Eingangsspannung zwischen η·V_out und V_out, vorher abgelehnt, wird jetzt berechnet (nur V_out ≤ V_in wird abgelehnt), und die Warnung bei 95 % Tastverhältnis kommt bei V_in·η/V_out ≤ 0,05.
switching-regulator-ripple: Eine Ausgangsspannung gleich oder über der Eingangsspannung wird abgelehnt
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Der Rechner ist ein Abwärtswandler. Mit
outputVoltagegleich oder überinputVoltagelieferte er ein Tastverhältnis von 99 % und eine negative Welligkeit; jetzt lehnt er mit „Output voltage must be less than input voltage“ ab und gibt keine Werte zurück.buck-converter: ein Eingangsbereich, die gewählten Bauteile und ihre Belastungen sowie ein Verlustmodell mit dem Wirkungsgrad
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batchprovenance.validRange
vinMinundvinMaxgeben die Eingangsspannung als Bereich an (0, der Standardwert, ist der Nennwertvin). Die Induktivität wird dort dimensioniert, wo ihre Welligkeit am größten ist, und ab diesem Wert aus der E12-Reihe gewählt (inductorMinWorstUH,inductorChosenUH); jede Belastung wird dort gemeldet, wo sie am größten ist, mit der Eingangsspannung, bei der sie auftritt:rippleWorstA/rippleWorstVin,ilPeakWorst/ilPeakWorstVin,outputRippleMV/outputRippleVin,cinMinWorstUF,cinRmsA,q1RmsA,q2RmsA(jeweils mit ihrem…Vin) sowiedutyMin,dutyMax. Die Ausgangsbank besteht auscoutCountKondensatoren mitcoutEachµF; die Nennspannungen der Bauteile sindvdsRating,cinVoltageRating,coutVoltageRating(der angebotene Nennwert ab dem 1,5-Fachen der Spannung).Ein Verlustmodell, jede Eingabe optional:
rdsOnHigh,rdsOnLow,tSwitch,qg,vGate,tDead,vBody,dcr,coreLoss,esrOut,esrIn. Bei Nenneingangsspannung und Nennlast sind die VerlustelossDcr,lossCore,lossHsConduction,lossLsConduction,lossHsSwitching,lossGateDrive,lossDeadTime,lossCapEsrundlossTotal(W), mitoutputPowerundefficiency(%). Eine Anfrage ohne die neuen Eingaben erhält die fünf Ausgaben, die sie vorher erhielt, außercinUF(siehe buck-converter-input-capacitance).buck-converter: Der Eingangskondensator wird für die Welligkeit des Eingangs ausgelegt
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
cinUFteilte durch die Welligkeitsspannung des Ausgangs (deltaVoutvonvout). Jetzt nimmt es die eigene Welligkeit des Eingangs, die neue EingabedeltaVin(% vonvin, Standardwert 1), wie in TI SLVA477B Gl. 12: C_in = I_out·D·(1 − D)/(f_sw·ΔV_in). Bei den Standardwerten (12 V auf 5 V, 1 A, 500 kHz) werden aus 9,72 µF 4,05 µF.Dreiundzwanzig weitere Rechner nehmen eine Bauteilreihe an und melden den Entwurf, wie er gebaut wird
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batchprovenance.validRange
eSeries(0 für ideale Werte, oder 12, 24, 48, 96) rundet jeden Widerstand, Kondensator oder jede Induktivität, die der Rechner entwirft oder liest, auf den nächsten Wert dieser Reihe, und jede Ausgabe ist dann die des gerundeten Entwurfs. Sein Standardwert lässt einer Anfrage ohne ihn die Antwort, die sie vorher erhielt: 24 beiattenuator-designer,led-resistorundzener-diode, deren E24-Ausgaben (piR1NearestbistR2Nearest,rNearest,iActual,pNearest,e24Resistor) ihm jetzt folgen, und 0 beivoltage-divider,opamp-gain,comparator-hysteresis,schmitt-trigger,transistor-switch,current-mirror,crystal-load-capacitance,photodiode-transimpedance,lm317-resistors,rs485-termination,pll-loop-filter,wilkinson-power-divider,rc-snubber,rcd-clamp-snubber,emi-filter-lc,power-supply-ripple-filter,conducted-emissions-filter,differential-mode-filter,speaker-crossoverundtweeter-capacitor. Die Bauteile vondirectional-couplersind Leitungen und nehmen keine an.Neue Ausgaben beschreiben den gerundeten Entwurf:
attenuator-designerpiAttenuationBuilt(dB) undpiInputImpedanceBuilt(Ω);wilkinson-power-dividerisolationBuilt(dB bei f₀, null mit dem exakten Widerstand, wo sie unbegrenzt ist);rcd-clamp-snubberclampVoltageBuilt,rippleVoltageBuilt,clampPowerBuiltundpeakDrainVoltageBuilt;pll-loop-filtercrossoverBuilt(kHz, der 0-dB-Durchgang des Regelkreises;pmActualist die Reserve dort);rs485-terminationfailsafeVoltage(mV, die A–B-Spannung des Busses im Ruhezustand);emi-filter-lcinsertionLossBuilt(dB bei 10·f_c);conducted-emissions-filtercornerBuilt,attenuationBuiltundoutputLevelBuilt;speaker-crossoverwooferCutoffBuiltundtweeterCutoffBuilt;tweeter-capacitorcrossoverBuilt;zener-diodezenerCurrentBuilt(mA) undzenerPowerBuilt(mW) bei Volllast über den eingesetzten Widerstand, der Strom negativ, wo der Widerstand die Last nicht tragen kann.Bezeichnungen, Schlüssel unverändert: Die gerundeten Widerstände des Dämpfungsglieds heißen „(rounded)“ statt „(E24)“;
rNearest„Nearest Series Value“,pNearest„Power (series R)“,e24Resistor„Nearest Series Resistor“;errorvoncurrent-mirror„Output Current Error“, die Unterschreitung gegenüber N·I_ref (mit einer Reihe schließt sie die Rundung ein, und ein Widlar-Ausgang wird aus V_T·ln(I_ref/I) = I·R_E mit dem gerundeten R_E gelöst).Damit sich ein Bauteil für eine Zielausgabe auflösen lässt, nennen diese Eingaben jetzt ein Maximum (ein Wert darüber wird trotzdem berechnet, mit der Warnung der Provenienz):
comparator-hysteresisr1undr210 000 kΩ;photodiode-transimpedancefeedbackResistance1e7 kΩ undfeedbackCapacitance100 000 pF;differential-mode-filterinductance100 000 µH undcapacitance1 000 µF;power-supply-ripple-filterinductance100 000 µH undcapacitance100 000 µF.schmitt-trigger: Schwellen per Überlagerung am +-Eingang
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Das Band war V_cc·R2/(R2 + R3), was R1 auslässt, symmetrisch um die Spannung des Teilers gelegt. Die Schwellen ergeben sich jetzt aus der Überlagerung am +-Knoten (TI SNOA997A): V_TH+ = V_cc·R1/(R1 + R2∥R3) und V_TH− = V_cc·(R1∥R3)/(R2 + R1∥R3);
centerVoltageist die Mitte des Bands. Bei den Standardwerten (5 V, 10, 10 und 100 kΩ) werdenvth_high,vth_lowundhysteresisvon 2,727, 2,273 und 0,4545 V zu 2,6190, 2,3810 und 0,2381 V. Die Schaltung ist ein invertierender Trigger; die Beschreibung nannte sie nicht invertierend.conducted-emissions-filter: L und C passen zur Last
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
L und C wurden als √(LC·Z) und √(LC/Z) aufgeteilt, was √(L/C) auf √Z setzte (7,07 Ω in 50 Ω; das Filter überhöhte um 17 dB bei 47 kHz aus einer Spannungsquelle). Jetzt sind sie L = Z/ω₀ und C = 1/(ω₀·Z). Bei den Standardwerten (80 dBµV bei 150 kHz, 20 dB, 50 Ω) wird
lValuevon 23,7 µH zu 167,8 µH undcValuevon 0,475 µF zu 0,0671 µF. Die Eckfrequenz, und damit die Dämpfung von 40 dB/Dekade, ist unverändert.attenuator-designer, led-resistor, zener-diode: E24-Werte unter 10 Ω
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Ihre E24-Suche begann bei 10 Ω, sodass ein Bauteil unter 10 Ω als 10 Ω eingesetzt wurde: Die Serienwiderstände von 2,875 Ω eines T-Dämpfungsglieds mit 1 dB und 50 Ω wurden zu 10 Ω (das gebaute Glied ergab 1,336 dB und 54 Ω), und ein LED-Widerstand von 5 Ω zu 10 Ω. Die Suche beginnt jetzt bei 0,10 Ω (3,0 Ω und 5,1 Ω). Über 10 Ω ändert sich nichts.
pll-loop-filter und class-d-efficiency: Eine Ablehnung gibt keine Werte zurück
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
pll-loop-filter(bei jeder Ablehnung) undclass-d-efficiency(in der API) gaben neben dem Fehler Nullen zurück. Jetzt geben sie keine Werte zurück, wie andere Rechner.filter-designer: der Frequenzgang des Kettenleiters, wie er gebaut wird, eine exakte Verschiebung der Grenzfrequenz und Grenzfrequenzen bis 1 GHz
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batchprovenance.validRange
Sechs neue Ausgaben beschreiben den Kettenleiter, den die Bauteilwerte ergeben, gelöst als Kaskade von ABCD-Matrizen zwischen Z₀ und seiner Last:
loadImpedance(Z₀, oder Z₀/g_{N+1} bei einem Tschebyscheff gerader Ordnung, g_{N+1}·Z₀ beim Hochpass),cutoffBuilt_Hz(die −3-dB-Frequenz, Tief- und Hochpass),fLowBuilt_HzundfHighBuilt_Hz(die −3-dB-Kanten eines Bandpasses),passbandLoss_dB(die größte Dämpfung bis 0,8·f_c, über 1,25·f_c oder über die mittleren 80 % eines Bands) undstopbandBuilt_dB(die Dämpfung dort, wo der Prototyp das Doppelte seiner Grenzfrequenz erreicht). Mit gesetztemeSeriessind sie die des gerundeten Entwurfs; mit idealen Bauteilen ist das Sperrband gleichattenuation_at_2fc.fcShiftPercentwar die Hälfte des größten Bauteilfehlers. Jetzt gibt es an, wie weit die Rundung die −3-dB-Frequenz des gebauten Kettenleiters (beim Bandpass: die Mitte seines −3-dB-Bands) gegenüber dem idealen verschoben hat: Der Butterworth 5. Ordnung mit 100 MHz und E24-Bauteilen ergibt +0,997 %, wo die Schätzung +1,31 % ergab. MiteSeries0 ist es 0, wie zuvor.fcnimmt bis zu 1 GHz an (es endete bei 10 MHz).voltage-drop: Jeder Querschnitt wird berechnet, und Aluminium ist das aus IEC 60889
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Ein
wireGauge, den die Tabelle nicht aufführt (ein ungerader oder ein gebrochener Querschnitt), wurde mit dem Widerstand von 12 AWG berechnet. Jetzt gilt dieselbe Formel wie für die Tabelle, Kupfer nach IEC 60028 (1/58 Ω·mm²/m) über den Querschnitt nach ASTM B258; die aufgeführten Querschnitte sind unverändert.conductorType1 (Aluminium) nahm das 1,61-Fache des Kupferwiderstands. Jetzt nimmt es die 0,028264 Ω·mm²/m aus IEC 60889, das 1,6393-Fache von Kupfer, sodass jeder Spannungsabfall bei Aluminium 1,8 % größer ist: 10 AWG mit 15 A über 30 m bei 120 V ergeben einen Abfall von 4,03 %, wo es 3,96 % waren.coax-loss: Dämpfung aus den Herstellerdaten; acht weitere Kabel, Eingangs- und Ausgangsleistung
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batchprovenance.validRange
Die Kabeltabelle lag etwa beim 1,7-Fachen der dB/100 ft der Datenblätter, sodass die Dämpfung jedes Kabels zu niedrig war. Die Dämpfung pro 100 m ist jetzt k₁√f + k₂f mit f in MHz: die veröffentlichten Koeffizienten von Times Microwave (25 °C) für die LMR-Kabel und eine Anpassung nach der Methode der kleinsten Quadrate an die Tabellen von Belden und CommScope (20 °C) für die übrigen. Alt → neu
lossPer100mbei 100, 435 und 2400 MHz: LMR-400 2,15 → 4,10, 4,62 → 8,74, 11,50 → 21,70; LMR-240 3,60 → 8,05, 7,69 → 17,04, 19,40 → 41,51; LMR-200 4,80 → 10,64, 10,35 → 22,43, 26,00 → 54,18; LMR-100A 10,80 → 23,84, 23,45 → 51,01, 61,00 → 127,68; RG-58/U 10,00 → 12,45, 22,65 → 28,77, 64,00 → 84,61; RG-8X 6,10 → 10,10, 13,50 → 22,74, 38,00 → 63,62; RG-213/U 4,70 → 6,30, 10,35 → 15,21, 28,50 → 48,34; RG-174/U 19,00 → 28,12, 43,33 → 65,75, 120,00 → 197,64; Belden 9913 2,50 → 4,34, 5,42 → 9,23, 13,70 → 22,75; Andrew LDF4-50A 0,70 → 2,17, 1,53 → 4,66, 3,95 → 11,81.attenuation_dBsowie die Leistungs- und Spannungsanteile folgen. Andrew LDF4-50A ist das 1/2-Zoll-Kabel; es war als 7/8 Zoll bezeichnet.cableIndex0–9 behalten ihre Kabel und reichen jetzt bis 17: LMR-600, LMR-195, LMR-400-UltraFlex, LMR-400-LLPL (Plenum), RG-316, RG-6 (75 Ω), Andrew LDF5-50A (7/8 Zoll) und LMR-900. Neue optionale EingabeinputPower(dBm, Standardwert 30); neue AusgabenpowerOut_dBm,powerOut_WundlossPerMeter. Eine Frequenz über dem Nennmaximum eines Kabels, jenseits des letzten Punkts einer angepassten Tabelle oder unter der Frequenz, ab der eine Anpassung auf 10 % genau gilt, erhält eine Warnung, keine Ablehnung.Achtzehn Rechner nehmen Listen an: Stufen, Verluste, Terme, Lagen, Lasten, Bauteile und Flächen
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batchprovenance.validRange
Jede Liste ist eine Anzahl und indizierte Eingaben (
numLoadsmitload1Current,load2Current, …), sodass eine Anfrage ein flaches Objekt bleibt. Jede Anzahl hat als Standardwert die Liste, die der Rechner vorher hatte, sodass eine Anfrage ohne die neuen Eingaben die Antwort erhält, die sie vorher erhielt (geprüft mit 201 Anfragen pro Rechner, Ablehnungen eingeschlossen). Eine indizierte Eingabe jenseits der Anzahl wird ignoriert.noise-figure-cascade:numStagesreicht jetzt bis 10 (bisher 4), mitstage5Gain,stage5NF,stage5IIP3bisstage10IIP3, und einer optionalenbandwidth(MHz, Standardwert 1); neue AusgabencascadedGain,noiseTemperature(290 K × (F − 1)) undnoiseFloor(kT₀B plus die kaskadierte Rauschzahl).lora-link-budget,ble-link-budget,5g-nr-link-budget:extraLossCount(0–6) ausextraLoss1bisextraLoss6(dB) undtotalLoss.clock-jitter:jitterTerms(0–6) austerm{n}Jitter_ps, quadratisch addiert.emi-margin-budget:marginTerms(0–6) austerm{n}AllowanceundtotalAllowance.sensor-accuracy-budget:errorTerms(0–6) austerm{n}Error, quadratisch.4-20ma-transmitter:loopElements(0–6) auselement{n}ResistanceundtotalLoopResistance.heatsink-calculator,heatsink-selection,thermal-resistance-network,junction-temperature:numLayers(0–6) auslayer{n}Theta(°C/W), in Reihe zwischen Gehäuse und Kühlkörper; die beiden Kühlkörperrechner geben zudemthetaJSundheatsinkTempzurück.battery-life:numLoads(0–7) ausload{n}Currentundload{n}DutysowieselfDischargeCurrent.battery-runtime-motor:motorDuty(%, Standardwert 100) undnumLoads(0–5) ausload{n}Current,load{n}Dutyundload{n}EfficiencysowiebatteryCurrent.solar-panel-sizing:loadHours(h pro Tag, Standardwert 24) undnumLoads(0–9) ausload{n}Powerundload{n}Hours.gear-ratio:extraStages(0–5) ausstage{n}Driver,stage{n}Drivenundstage{n}EfficiencysowietotalEfficiency.series-parallel-resistor:numParts(1–8, Standardwert 4) mitr5bisr8undsumOfValues;r1darf 0 sein, ein nicht bestücktes Bauteil, wie es die anderen Positionen schon durften.rt60-reverberation:numSurfaces(0–8) aussurface{n}Areaundsurface{n}AlphasowieotherAreaundmeanAbsorption.Linkbudgets beantworten eine Entfernung von 0 ohne Pfaddämpfung
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
lora-link-budget,ble-link-budgetund5g-nr-link-budgetlehnten eine Entfernung von 0 ab. Jetzt beantworten sie sie mit 0 dB Pfaddämpfung: der Link ohne Pfad, mit dem die Seiten das Budget vor dem Pfad zeigen. Eine negative Entfernung wird weiterhin abgelehnt.clock-jitter: Ohne verbleibendes Timing-Budget ist der Anteil unbegrenzt, nicht 0 %
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Wo Setup- und Hold-Zeit die ganze Taktperiode einnehmen, war
budgetUsed_pct0, was sich wie gar kein Jitter liest. Jetzt ist es null (ein unbegrenzter Anteil), mit einer Warnung, dass kein Timing-Budget übrig ist, wenn keine Setup-Verletzung zu melden ist.series-parallel-resistor: Das Teilerverhältnis bezieht sich auf die beiden bestückten Bauteile
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Mit genau zwei bestückten Bauteilen war
voltDividerRatioR2/(R1 + R2), gleich welche beiden es waren, also 0 bei bestücktem R1 und R3. Jetzt ist es das zweite bestückte Bauteil geteilt durch die Summe beider, was bei R1 und R2 unverändert ist.optical-sensor-range: Eine Ablehnung gibt keine Werte zurück
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Ein Sicherheitsfaktor von 0 oder weniger wurde mit
maxRangeundnormalizedRangevon 0 neben dem Fehler abgelehnt. Die Ablehnung gibt jetzt keine Werte zurück, wie jede andere Ablehnung.broadside-coupled-pair: ohne Ebenen keine Gleichtakt- und ungekoppelte Impedanz und keine Höhe über der Ebene
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Ein ungeschirmtes Paar (
shielded0) hat keine Bezugsebenen, sodasscommonImpedance,uncoupledImpedanceundheightToPlanenicht definiert sind, wie es die Warnung schon sagte. Sie waren 0 und sind jetzt null.rise-time-bandwidth: ohne Takt keine Ordnung der Harmonischen
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Mit
clockFrequency0, was die Eingabe zulässt, um den Takt wegzulassen, warharmonicNumber0, ein Wert, den kein Takt ergibt. Jetzt ist es null, wie andere Ausgaben, wo ein Wert nicht existiert.Dreizehn Rechner bewerten ihr Ergebnis gegen eine veröffentlichte Norm
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Jeder nimmt die Norm (und, wo zutreffend, die Klasse) als optionale Eingabe und gibt den Grenzwert zurück, das Ergebnis als Prozentsatz davon (über 100 ist nicht bestanden) und den Wert einer Eingabe, mit dem er die Norm erfüllen würde. Die Grenzwerte werden in der Berechnung bestimmt, sodass die API das Urteil der Seite liefert. Jede neue Eingabe ist optional, und bei ihrem Standardwert ist jede bestehende Ausgabe unverändert, außer wo ein Eintrag unten etwas anderes sagt.
power-density:standard(0 FCC 47 CFR §1.1310, 1 ICNIRP 2020),exposureClass,groundReflection; gibtlimitDensity,limitPercent,minDistance,maxEirpzurück.trace-width-current:standard(es liest die gezeichnetetraceWidth, die die API bereits annimmt);limitCurrent,limitPercent,minTraceWidth.microvia-current-capacity:standard,conductorClass;limitCurrent,limitPercent,minVias,minViaDiameter.pcb-trace-temp:standard,laminate;chartRise,limitRise,limitPercent,minTraceWidth,maxCurrent.minimum-conductor-spacing:conductorSpacing;spacingPercent,maxVoltage(der Grenzwert istspacing).padstack-annular-ring:standard,padDiameter,producibilityLevel;minLandDiameter,landPercent,maxDrillDiameter.solder-paste-volume:releaseCriterion;maxStencilThickness,stencilPercent,maxApertureReduction.bga-land-pad:ballType,landDiameter;ipcLand,landDeviation,landTolerance,landPercent,compliantLand.i2c-pullup:pullup;riseTime,riseTimePercent,maxBusCap(der Grenzwert istriseTimeTarget_ns, der Modus istspeedMode).usb-termination:impedanceError,impedanceTolerance,impedancePercent,compliantImpedance(die Norm istusbVersion).esd-tvs-diode:standard,testLevel,esdRating;testVoltage,limitPercent.esd-clamp-selection:standard,testLevel;testVoltage,limitPercent.radiated-emission-estimate:standard,emissionClass;eFieldUvm,limitField,limitPercent,maxCurrent,maxLoopArea.Wo eine Norm keinen Grenzwert setzt (ICNIRP unter 30 MHz, CISPR 32 außerhalb von 30 MHz–6 GHz, Restringe nach IPC-6012 Klasse 2, ein A6-Abstand über 3.050 m), sind die neuen Ausgaben NaN, als null zurückgegeben, mit einer Warnung, die den Grund nennt.
Elf Leitungsrechner geben die Wellenlänge auf der Leitung zurück
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
microstrip-impedance,controlled-impedance,asymmetric-stripline,dual-stripline,differential-pair,edge-coupled-internal-symmetric,edge-coupled-internal-asymmetric,edge-coupled-embedded,broadside-coupled-pair,coplanar-waveguideundcoax-impedancenehmen eine optionalefrequencyan (GHz, Standardwert 2,4) und gebenguidedWavelengthundquarterWavelength(mm) zurück, λg = c/(f·√εeff), bei gekoppelten Leitungen aus ihrem εeff im Gegentaktmodus. Eine Anfrage ohnefrequencygibt jede bestehende Ausgabe unverändert zurück, dazu die beiden neuen bei 2,4 GHz.radiated-emission-estimate: Die Reserve folgt der gewählten Norm und Klasse
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
marginist der Grenzwert der gewählten Norm und Klasse bei Frequenz und Abstand der Anfrage, abzüglich des Felds:standard0 ist CISPR 32 und 1 ist FCC Part 15, Abschnitt 15.109,emissionClass0 ist Klasse B und 1 Klasse A. Eine Anfrage ohne sie erhält wie bisher CISPR 32 Klasse B, sodass ihre Reserve unverändert ist. Die Grenzwerte der FCC gelten von 30 MHz bis 40 GHz, und die Reserve ist außerhalb des Bereichs ihrer Norm null. Die Bezeichnung der Ausgabe lautet jetzt „Margin to Limit“.minimum-conductor-spacing ergänzt die Spalten A6 und A7 für Bauteilanschlüsse sowie eine Ausgabe B4
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
condition4 ist A6 (äußerer Bauteilanschluss oder Anschlusskontakt, unbeschichtet, Meereshöhe bis 3.050 m) und 5 ist A7 (äußerer Bauteilanschluss oder Anschlusskontakt, Schutzlack), beide aus IPC-2221B Tabelle 6-1. Über 3.050 m liefert eine A6-Anfrage für den Abstand null statt einer Zahl, mit einer Warnung, da die Tabelle A6 nur bis 3.050 m angibt. Die neue AusgabespacingB4ist Spalte B4 (äußere Leiter, dauerhafte Polymerbeschichtung), nebenspacingB1,spacingB2undspacingB3. Die Bedingungen 0 bis 3 und die bestehenden Ausgaben sind unverändert.bga-land-pad bemisst das Pad nach dem Kugeldurchmesser, wie IPC-7351B
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Das Pad war der Kugeldurchmesser × 1,0, 0,9 oder 0,8 je nach Dichtestufe, was keine IPC-Tabelle angibt. Jetzt folgt es IPC-7351B: Bei einer kollabierenden Kugel ist es je nach Kugelgröße um 25, 20 oder 15 % kleiner als die Kugel. Bei den Standardwerten geht
padDiavon 0,55 auf 0,45 mm, und die daraus abgeleiteten Ausgaben folgen. Die EingabedensityLevelist ausgemustert, da IPC-7351B auf ein BGA-Pad keine Dichtestufen anwendet: Eine Anfrage, die sie sendet, wird beantwortet, mit einer Warnung, dass der Wert nicht gelesen wurde.bldc-winding: Eine Spule umspannt mindestens eine Nut
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Wo Nuten geteilt durch Pole auf 0 gerundet werden (zum Beispiel 6 Nuten unter 14 Polen), war die Spulenweite 0, der Wicklungsfaktor 0, und
actualKvunddeltaEquivKvwaren null. Eine konzentrierte Spule ist um einen Zahn gewickelt, daher beträgt die Spulenweite jetzt mindestens eine Nut, und diese Ausgaben sind Zahlen.emi_radiated-Jobs wenden an einer Bandkante den strengeren Grenzwert an
POST /api/py/v1/jobs
Bei genau 88, 216 und 960 MHz (FCC Part 15) und 230 MHz (CISPR 32) wurde der lockerere der beiden angrenzenden Grenzwerte verwendet. 47 CFR 15.109(c) besagt, dass an den Bandkanten der strengere Grenzwert gilt, und CISPR 32 wendet an einer Übergangsfrequenz den niedrigeren Grenzwert an; beides wird jetzt angewendet.
Eingabebereiche bei 31 Rechnern
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batchprovenance.validRange
Eingaben von 30 Rechnern haben ein Maximum erhalten, die meisten davon Geometrierechner (Leitungen, Pads, Antennen, Hohlleiter), damit die Seite nach ihnen auflösen kann, und die Buskapazität von
i2c-pullupreicht jetzt bis 550 pF, dem Limit von Fast-mode Plus. Die API lehnt keinen Wert jenseits des Bereichs einer Eingabe ab;provenance.validRangemeldet ihn als außerhalb.Zwölf Sensorrechner erhalten ein Frontend: seine Spannung, den ADC-Code und die Auflösung
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}
ntc-thermistor,rtd-temperature,pt100-resistance,thermocouple-voltage,wheatstone-bridge,strain-gauge-bridge,pressure-bridge-output,load-cell-amplifier,hall-effect-sensor,current-shunt,accelerometer-sensitivityundlvdt-sensitivitynehmen optionale Frontend-Eingaben an und geben drei neue Ausgaben zurück. Die Eingaben sind ein Teiler (fixedResistor,sensorPositionoderntcPosition) oder ein Verstärker (frontGain) und ein ADC (adcRef,adcBits), wobei eine Eingabe wiederverwendet wird, die ein Rechner schon hatte (gain,amplifierGain,adcVoltage,supplyVoltage). Die Ausgaben sind die Spannung des Frontends (dividerVoltageoderamplifiedVoltage),adcCode(ein unipolarer N-Bit-Code, zwischen 0 und 2^N − 1 gehalten) undresolution(die physikalische Größe pro ADC-Schritt an diesem Punkt).load-cell-amplifiernimmt die Last auf der Zelle an (appliedLoad) und gibt ihre Ausgangsspannung zurück (bridgeOutputMv);accelerometer-sensitivitynimmtaccelerationan und gibtoutputVoltagezurück.Jede neue Eingabe ist optional, und bei ihrem Standardwert ist jede bestehende Ausgabe unverändert: Eine vor dieser Änderung geschriebene Anfrage gibt die Werte zurück, die sie zurückgab, dazu die neuen Ausgaben.
current-shunt: Die Verstärkung hat den Standardwert 20
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}
Wenn eine Anfrage
amplifierGainweglässt, verwendetcurrent-shuntjetzt 20, wo es 50 verwendete. Bei den übrigen Standardwerten (10 A durch 10 mΩ, ein ADC mit 3,3 V) führte die Verstärkung 50 zu 5 V am ADC, jenseits seiner Referenz. Die Verstärkung 20 ergibt 2 V.amplifiedVoltageundadcResolutionCurrentändern sich bei solchen Anfragen; eine Anfrage, dieamplifierGainnennt, ist nicht betroffen.hall-effect-sensor: Ein Feld von null oder darunter wird abgelehnt
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}
hall-effect-sensorgibt jetzt einen Fehler fürBfieldbei oder unter 0 mT zurück, wie es die Website schon tat, wo die API früher daraus berechnete Werte zurückgab.frequency-ppm-tolerance: Die Warnungen zitieren die Takttoleranzen, die gelten
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}
Die Warnungen von
frequency-ppm-tolerancezitierten ein UART-Budget von ±50 ppm (ein UART verträgt etwa 2 %) und nannten ±100 ppm zu locker für USB, das bei Full Speed ±2500 ppm erlaubt. Über ±50 ppm zitiert die Warnung jetzt 100BASE-TX-Ethernet und den Funktakt von Bluetooth LE. Über ±100 ppm zitiert sie jeden Ethernet-Takt und über ±500 ppm USB 2.0 High Speed. Die Schwellen bei 50 und 100 ppm sind unverändert; die bei 500 ppm ist neu.Platinenspezifische Leiterbahnbreite und Temperaturerhöhung aus dem eigenen Wärmemodell von rftools
POST /api/py/v1/calculate (trace-width-current, pcb-trace-temp)POST /api/py/v1/calculate/batchPOST /api/py/v1/calculate/solveMCP run_calculationrftools-io SDK
trace-width-currenterhältwidthBoardMm, die Mindestbreite für diese Platine, undpcb-trace-temperhälttempRiseBoardundmaxTempBoard, die Erwärmung und die Höchsttemperatur darauf; beide erhalteninModelRange. Sie stammen aus dem eigenen Wärmemodell von rftools, nie als IPC-2152 bezeichnet: ein geschlossenes thermisches Netzwerk, angepasst an einen nur für Tests verwendeten 2-D-Finite-Volumen-Löser für Leiterbahn, Laminat, Ebene und ruhende Luft (Konvektion und Strahlung), der gegen veröffentlichte Messungen geprüft ist (Bedingungen nach IPC-TM-650 2.5.4.1A, die Anpassungen von Brooks & Adam an die Diagramme von IPC-2152 und weitere) und auf die Erwärmung eine Reserve von 15 % aus der ungünstigsten davon trägt. Innerhalb seines validierten Bereichs (Leiterbahnbreite 0,25–5,1 mm, Platine 1,4–3,2 mm, eine Innenlagen-Leiterbahn ab 1,27 mm Breite, eine Erwärmung von 5–100 °C, eine Ebene in 0,1 mm Abstand oder mehr) liegt die Anpassung innerhalb von 2,81 % des Lösers.Neue Eingaben, mit Standardwerten angehängt, sodass eine bestehende Anfrage unverändert rechnet:
boardThickness(mm, Standardwert 1,6),planeDistance(mm bis zu einer Kupferebene, 0 für keine) undplaneCopperWeight(oz, Standardwert 0,5) bei beiden Rechnern sowieisExternalbeipcb-trace-temp. Jede bestehende Ausgabe ist unverändert. Bei den Standardwerten istwidthBoardMm0,30212 mm, neben den 0,78144 mm aus Figure 5-1, undtempRiseBoard10,2818 °C.Außerhalb des validierten Bereichs wird das Ergebnis weiterhin gemeldet, mit
inModelRange0 und einer Warnung, die die Grenze nennt; eine Platine unter 1,4 mm verweist auf Figure 5-1, wo das Modell und die veröffentlichten Dickendaten von IPC-2152 voneinander abweichen. Ein thermisches Durchgehen liefert null für die platinenspezifische Erwärmung.provenance.validRangeerhält bei diesen beiden Rechnernmodels, jedes angepasste Modell mit seinem eigeneninside: zuerst die Anpassung an IPC-2152 Figure 5-1, dann das Wärmemodell, undstatusistoutside, wenn eines von beiden es ist. Eine Anfrage an diese Rechner mit einem Strom, einer Erwärmung, einem Kupfergewicht oder einer Länge von null oder darunter wird im Browser wie in der API abgelehnt, und ein negativer Strom wird abgelehnt, statt mit 500 beantwortet zu werden.Sieben Ausgaben, die die Rechner nicht berechnen konnten, sind entfernt
POST /api/py/v1/calculate (differential-via, usb-termination, parabolic-dish-antenna)POST /api/py/v1/calculate/batchMCP run_calculationrftools-io SDK
differential-viagibtdiffImpedance,commonImpedance,oddImpedance,evenImpedanceundsingleEndedImpedancenicht mehr zurück. Eine Feldlösung (ein 3-D-quasistatischer Löser, an vier geschlossenen Formen validiert und mit openEMS vollwellig auf 0,4 % gegengeprüft) zeigte, dass die Impedanz eines Via-Paars vom Abstand der Ebenen abhängt, die es durchquert, was keine Eingabe ist: Bei den Standardwerten beträgt sie 85,6 Ω bei 0,1 mm Ebenenabstand und 96,0 Ω bei 1,0 mm, wo der Rechner 44,10 Ω angab. Keine Beziehung in den Eingaben des Rechners kommt in jedem Fall auf 10 % heran, und die Gleichtaktimpedanz hängt außerdem davon ab, wo der Rückstrom fließt. Die Stub-Resonanz und die Verluste werden weiterhin zurückgegeben; siehe den Eintrag zu den Korrekturen.usb-terminationgibteyeOpeningnicht mehr zurück, eine Heuristik, die keine USB-Spezifikation definiert.parabolic-dish-antennagibtnoiseTemperaturenicht mehr zurück, das 290·(1 − η) war: Die Rauschtemperatur einer Antenne hängt von ihrer Elevation, ihrem Spillover und dem Himmel ab, und keines davon nimmt der Rechner an.Ein Aufrufer, der einen dieser Schlüssel liest, muss damit aufhören: Der Schlüssel fehlt, er ist nicht null. Jede andere Ausgabe der drei Rechner wird weiterhin zurückgegeben.
Werte, die es nicht gibt, fehlen oder sind null, nicht die Zahl Null oder ein Platzhalterwert
POST /api/py/v1/calculatePOST /api/py/v1/calculate/batchPOST /api/py/v1/calculate/solveMCP run_calculationrftools-io SDK
Diese Ausgaben sind jetzt null, wo die Größe nicht definiert ist, wo sie früher eine Zahl waren:
signalRiseTimevonusb-terminationfür USB 3.0, das keine Anstiegszeit des Senders festlegt (USB 2.0 nennt sein Minimum von 500 ps, T_HSR); die Kopplungsausgaben vonpcb-crosstalk-emcoberhalb der Grenze schwacher Kopplung, (x_C + x_L)/2 = 0,1, wo das konzentrierte Modell nicht gilt;vbSealedundf3Sealedvonsubwoofer-boxfür Qts ≥ 0,707, wo keine geschlossene Abstimmung existiert (sie ergaben 2·Vas);qFactorvonplanar-spiral-inductorbei oder über der Eigenresonanz; Bohrer und Fräser zum Abdecken beiaperture-diagonal, wenn kein vorrätiges Werkzeug passt (sie ergaben 0);qFactorvonlc-resonanceohne Widerstand, das unbegrenzte Q eines verlustfreien Kreises (es ergab 9999 und die Bandbreite f₀/9999; die Bandbreite ist jetzt 0); undstubResonancevondifferential-via, wenn es keinen Stub gibt (es ergab 0 GHz). Jedes null kommt mit einer Warnung, die den Grund nennt.Eine abgelehnte Eingabe gibt jetzt nur ihren Fehler und keine Werte zurück, wo diese Rechner Nullen oder Teilwerte zurückgaben:
power-density,thermal-via-array,bga-breakout-widthohne Kanal,dual-striplinemit h₂ ≤ 0,fresnel-zoneund jede Ablehnung vondoppler-shift,reactance-calculator,broadside-coupled-pair,fusing-current,rise-time-bandwidth,current-divider,delta-wye-conversion,voltage-drop,rt60-reverberationundvfd-motor-speed. Eine Null neben einem Fehler las sich wie ein Ergebnis.Ein Aufrufer, der diese Werte als Zahlen behandelte, muss auf null prüfen oder auf einen fehlenden Schlüssel neben einem Fehler.
/calculate/solveüberspringt Punkte ohne die Ausgabe bereits.Rechner gegen ihre Quellen korrigiert, mit drei neuen Eingaben und neuen Ausgaben
POST /api/py/v1/calculatePOST /api/py/v1/calculate/batchPOST /api/py/v1/calculate/solvePOST /api/py/v1/jobs (emi_radiated)MCP run_calculationMCP simulate_emi_radiatedrftools-io SDK
Konstanten. Der spezifische Widerstand von Kupfer ist überall der aus IEC 60028, 1/58 Ω·mm²/m (trace-resistance 100,217 → 100,458 mΩ bei seinen Standardwerten; die anderen Kupferrechner verschieben sich um 0,008 %, die Eindringtiefe um 0,004 %). Die Microstrip-Engine nimmt η₀/2π, wo sie 60 nahm, und die exakte Lichtgeschwindigkeit, sodass sich jede Microstrip-basierte Impedanz um −0,069 % verschiebt (microstrip-impedance 80,954 → 80,898 Ω, differential-pair 99,983 → 99,914 Ω und mit ihnen die gelösten Breiten). Jeder Rechner nutzt jetzt dasselbe η₀ = µ₀·c (CODATA 2018). Die Wellenimpedanz von
power-densityist µ₀·c, 376,730 Ω (sie war 120π). Die Laufzeit voncontrolled-impedanceist √εeff/0,299792458 ps/mm (6,52995 → 6,53447). Der Jobemi_radiatedverwendet π·µ₀/c und µ₀ für seine Felder und stimmt damit jetzt mitradiated-emission-estimateüberein (er lag 0,021 dB und 0,023 dB zu hoch).Modelle.
planar-spiral-inductornimmt die Parasitäten nach Jow & Ghovanloo und die Leiterbahnlänge seiner Form: Eigenresonanz 68,0 → 601,7 MHz und Q bei 100 MHz 814,5 → 116,8 bei den Standardwerten, mit der neuen optionalen Eingabefrequency(MHz, Standardwert 100) für Q.pcb-crosstalk-emcist das Zwei-Enden-Modell nach Paul: Die bestehenden Schlüssel gelten pro Ende (die Hälfte der alten Werte),farEndCrosstalkist neu, und die Standardwerte sind ein Takt mit 3,3 V und 25 MHz.subwoofer-boxstimmt den Port nach Margolis & Small ab (20,246 → 40,273 Hz) und ergänztf3Vented.pcb-crosstalkrechnet mit der Engine für gekoppelte Microstrips, mit der neuen EingabedielectricConst(Standardwert 4,5; Kopplung 6,77 → 5,72 %). Der Kantenwiderstand vonpatch-antennaist das Modell der strahlenden Schlitze nach Balanis mit dem exakten η₀, unbegrenzt (306,80 → 321,22 Ω; der Speisewiderstand und die Einspeisetiefe für 50 Ω folgen).lc-resonancebehandelt seinen Serienwiderstand in beiden Topologien als Serienverlust, Q = Z₀/R (der Parallelmodus rechnete R/Z₀), und ergänztimpedanceAtResonance_ohm: R in Reihe, L/(C·R) parallel. Die Stub-Resonanz vondifferential-viaist als unbelastete Obergrenze bezeichnet, und sein Leiterverlust ist die Obergrenze für dichte Ebenen (0,030 → 0,011 dB).Regeln. Ein Microvia-Feld wird nach seinem summierten Querschnitt bemessen, IPC-2221 Anmerkung 5 (zehn Vias 2,762 → 1,466 A). Die Eigenerwärmung eines Vias ist das Maximum der Hülse, P·L/(8kAN), in
via-voltage-drop(0,2506 → 0,0313 °C) undmicrovia-current-capacity.bga-breakout-widthzählt die äußere Reihe mit (escapeRows1 → 2).padstack-annular-ringbewertet das Seitenverhältnis gegen IPC-2222 Tabelle 9-4, 8:1 in jeder Klasse, mit einer Prüfung des Mindestbohrdurchmessers nach Tabelle 9-6, und der innere Restring der Klasse 3 beträgt 0,025 mm.thermal-via-arrayzählt ganze Vias.i2c-pullupundrs485-terminationgeben ihre Widerstände ungerundet zurück (die Anzeige rundet weiterhin).aperture-diagonalnimmt die neue EingaberouterBitan.Eine Anfrage, die eine der neuen Eingaben weglässt, erhält deren Standardwert.
Vier Ausgaben, die bei jeder Eingabe denselben Wert hatten, sind entfernt
POST /api/py/v1/calculate (balun-transformer, opamp-bandwidth, capacitor-code)POST /api/py/v1/calculate/batchMCP run_calculationrftools-io SDK
Jede dieser Ausgaben gab unabhängig von den Eingaben denselben Wert zurück, und keine war ein Ergebnis:
vswr(1,0, „VSWR (ideal)“) undinsertionLoss(0,3 dB, „Typical Insertion Loss“) vonbalun-transformer;slewLimitedvonopamp-bandwidth(0, ein Platzhalter für eine Prüfung, die Eingaben für Anstiegsrate und Amplitude braucht, die der Rechner nicht hat); undvoltageCodevoncapacitor-code(0 V, eine Nennspannung, die ein dreistelliger Code nicht kodiert). Sie werden nicht mehr zurückgegeben, auch nicht neben einer Ablehnung.Ein Aufrufer, der einen dieser Schlüssel liest, muss damit aufhören: Der Schlüssel fehlt, er ist nicht null. Wofür jeder Wert stand, steht stattdessen in
provenance.assumptions:ideal-transformerbeibalun-transformer(konstruktionsbedingt angepasst; Kern- und Wicklungsverluste sind nicht modelliert, und ein Ferrit-Balun verliert typisch 0,1–1 dB) undcapacitance-onlybeicapacitor-code. Jede andere Ausgabe der drei Rechner ist unverändert.Der Gewinn von loop-antenna schließt ihren Strahlungswirkungsgrad ein
POST /api/py/v1/calculate (loop-antenna, capacitor-code)POST /api/py/v1/calculate/batchPOST /api/py/v1/calculate/solveMCP run_calculationrftools-io SDK
Der
gainvonloop-antennawar bei jeder Eingabe 1,76 dBi: die Richtwirkung einer kleinen Schleife, 3/2, ohne jeden Verlust. Jetzt ist er diese Richtwirkung mal den Strahlungswirkungsgrad e = R_rad/(R_rad + R_loss), aus den beiden Widerständen, die der Rechner schon zurückgibt: G = 10·log₁₀(1,5·e) (Balanis, Antenna Theory, 4. Aufl., Kapitel 2 und Abschnitt 5.2). Bei den Standardwerten, einer 1-m-Schleife aus 10-mm-Kupfer bei 7 MHz, ergibt er −9,4043 dBi, 11,2 dB unter dem alten Wert; eine Schleife, deren Verlust gegenüber ihrem Strahlungswiderstand klein ist, ergibt weiterhin nahezu 1,76 dBi. Der Wirkungsgrad ist die neue AusgaberadiationEfficiency(%), 7,6467 % bei den Standardwerten.capacitor-coderundete in der API einen gebrochenen Code zur geraden Zahl hin, wo die Seite halbe Werte aufrundet, sodass 104,5 in der API als 100 nF und auf der Seite als 1 µF dekodiert wurde. Beide ergeben jetzt 1 µF.Acht Eingaben, die kein Ergebnis veränderten, bestimmen jetzt eines; elf neue Ausgaben
POST /api/py/v1/calculatePOST /api/py/v1/calculate/batchPOST /api/py/v1/calculate/solveMCP run_calculationrftools-io SDK
Jede der folgenden Eingaben war deklariert und wurde von keiner Ausgabe gelesen. Jetzt bestimmt sie eine neue Ausgabe, hinter den bestehenden angehängt und aus einer Beziehung berechnet, die der Rechner bereits herstellt; keine bestehende Ausgabe ändert sich bei irgendeiner Eingabe.
patch-antenna:feedOffsetbestimmtfeedResistance_ohm, R_edge·cos²(π·y₀/L) (Balanis, Antenna Theory, 4. Aufl., Abschnitt 14.2.1, Gl. 14-20a), 306,795 Ω bei der Standard-Kanteneinspeisung und 65,501 Ω bei 10 mm, undinsetFeedPosition_mmist die Einspeisetiefe, die 50 Ω ergibt, 10,594 mm.flyback-converter:fswbestimmtprimaryInductance(µH), Vin·D/(fsw·Ipk) für den eigenen Spitzenstrom des Rechners im Grenzbetrieb, 130,56 µH.solar-panel-sizing:batteryCapacitybestimmtbatteryAutonomyDays, C·V·0,5/(P·24 h) bei der Entladetiefe von 50 %, die die erforderliche Kapazität annimmt, 0,25 Tage.rs485-termination:baudRatebestimmtbaudRateUtilisation(%), die Rate als Anteil des Maximums von 10⁸ bit·m, 11,52 %.adc-snr:samplingFreqbestimmtnyquistZone, ⌊f_in/(f_s/2)⌋ + 1, undaliasFrequency(MHz), |f_in − f_s·round(f_in/f_s)| (Kester, Analog Devices MT-002): Zone 1 und 1 MHz bei den Standardwerten, Zone 2 und 30 MHz für 70 MHz bei 100 MSPS.bldc-thermal:continuousCurrentbestimmtratedCurrentShare(%), den Betriebsstrom gegenüber dem Nennwert, 75 %.bldc-winding:supplyVoltagebestimmtnoLoadSpeed(U/min), Kv·V, 11.406,44 U/min. Die Werte gelten bei den Standardwerten des jeweiligen Rechners.Zwei weitere neue Ausgaben:
assumedBoomLength(m) beiyagi-antenna, der Boom, den ihr Elementabstand von 0,2λ voraussetzt, (N − 1)·0,2λ, 1,6655 m bei den Standardwerten, der ihre ausgemusterte Eingabe für die Boomlänge ersetzt (siehe jenen Eintrag); undradiationEfficiency(%) beiloop-antenna(siehe den Eintrag zu ihrem Gewinn). Nur auf der Website zeigt das Live-Widget zur Regulierung vonism-coexistencejetzt das Band, das seinbandIndexwählt; sein Ergebnis ist unverändert.Eine Anfrage, die eine dieser Eingaben weglässt, erhält deren Standardwert.
patch-antennaohnefeedOffsetundsolar-panel-sizingohnebatteryCapacitywurden bisher mit 400 beantwortet; beide werden jetzt beantwortet.Zwölf Eingaben, die nie ein Ergebnis veränderten, sind ausgemustert; eine Anfrage, die eine davon sendet, erhält eine Warnung
POST /api/py/v1/calculatePOST /api/py/v1/calculate/batchPOST /api/py/v1/calculate/solveMCP run_calculationMCP get_calculator_schemarftools-io SDK
Diese Eingaben waren deklariert, aber kein Wert davon veränderte eine Ausgabe, eine Warnung oder eine Ablehnung:
smith-chartfrequency,via-calculatorsignalLayer,stackup-builderlayerCount(das Modell ist ein fester Vierlagenaufbau, was sein Titel jetzt sagt),i2c-pullupnumDevices,fm-modulation-indexcarrierFreq,quantization-noisefrequency,555-timervcc,bldc-efficiencypolePairs,opamp-bandwidthphase_margin,battery-internal-resistancetemperature,rs485-terminationnumNodesundyagi-antennaboomLength. Sie verlassen den Katalog, die Grenzen der Provenienz und das MCP-Schema; jeder Rechner führt sie unterretiredInputsauf, mit dem Datum.Eine Anfrage, die noch eine davon sendet, erhält dieselben Werte wie bisher und die bestehende Warnung „Input '<key>' is not read by this calculator and was ignored.“ Sie wird nie abgelehnt.
POST /calculate/solvelehnt es ab, nach einer davon aufzulösen, wie bei jeder nicht deklarierten Eingabe; kein Raster davon hätte eine Ausgabe bewegen können. Eine Anfrage anyagi-antennaohneboomLength, bisher mit 400 beantwortet, wird jetzt beantwortet.Das nächste Release von
rftools-iobehält jedes ausgemusterte Schlüsselwort bei: Die Übergabe eines davon löst eineDeprecationWarningaus, die den Schlüssel und das Datum seiner Ausmusterung nennt, und der Schlüssel wird nicht gesendet.trace-width-current liest seine IPC-2152-Breite aus IPC-2152 Figure 5-1; pcb-trace-temp meldet die Erwärmung nach IPC-2152
POST /api/py/v1/calculatePOST /api/py/v1/calculate/batchPOST /api/py/v1/calculate/solveMCP run_calculationrftools-io SDK
width2152mmvontrace-width-current, als IPC-2152 bezeichnet, war die IPC-2221-Breite × 0,75 auf einer Außenlage und × 0,85 auf einer Innenlage, ein Faktor, den IPC-2152 nicht enthält, und schmaler als jede IPC-2152-Ablesung ab 2 A. Jetzt ist es IPC-2152 (2009) Figure 5-1, das Diagramm, das IPC-2152 für Innen- und Außenleiter in allen Umgebungen empfiehlt, über die veröffentlichte Anpassung I = 0,024·ΔT^0,44·A^0,725, auf jeder Lage gleich: 0,7814 mm bei den Standardwerten, vorher 0,2266 mm; bei 5 A, 10 °C Erwärmung und 1 oz auf einer Außenlage 7,194 mm, vorher 2,086 mm. Es reproduziert die Ablesungen von Olson (2010) aus Figure 5-1 von 300 und 680 sq mil auf 5 % genau. Der Schlüssel ist unverändert; seine Bezeichnung lautet jetzt „Min Width (IPC-2152 Fig. 5-1)“.Beide Rechner rechnen Kupfer mit 35 µm pro Unze, sodass sich
width2221mmum −0,58 % verschiebt (0,3004 mm bei den Standardwerten, vorher 0,3021 mm).resistance,voltageDropundpowerDissvontrace-width-currentwerden für eine neue Eingabe berechnet, die gezeichnete Leiterbahnbreite, wo sie das IPC-2221-Minimum verwendeten, mit Kupfer nach IEC 60028 von 1/58 Ω·mm²/m: 0,10433 Ω bei den Standardwerten, vorher 0,17326 Ω.Neue optionale Eingabe, angehängt; eine Anfrage, die sie weglässt, erhält ihren Standardwert:
traceWidthbeitrace-width-current(mm, 0,5). Neue Ausgaben:inChartRangebei beiden Rechnern (1 innerhalb des Bereichs, den IPC-2152 Figure 5-1 zeigt, 0 außerhalb, übernommen inprovenance.validRangemit dem größten Residuum der Anpassung), sowietempRise2152undmaxTemp2152beipcb-trace-temp, die Erwärmung nach Figure 5-1 (k = 0,024, jede Lage) neben der Erwärmung auf der Außenlage nach IPC-2221: 25,815 °C bei den Standardwerten, neben 5,342 °C. Die bestehenden Ausgaben vonpcb-trace-tempbehalten ihre Schlüssel und Werte.Ergebnisse außerhalb der Diagramme werden gemeldet und markiert, nie abgelehnt: Eine Warnung nennt die Größe und die Diagrammgrenze, für die Kurven von 10 bis 45 °C und 700 sq mil in Figure 5-1, die 10 bis 100 °C und 700 sq mil von IPC-2221 Diagramm A auf einer Außenlage und die ½ bis 3 oz von Diagramm B; jenseits von Figure 5-1 ist
provenance.validRange.statusgleichoutside.Quellenangaben:
trace-width-current,pcb-trace-temp,microvia-current-capacityundvia-calculatorzitierten für das Stromdiagramm IPC-2221B, das diese Ausgabe (2012) nicht enthält. Jetzt zitieren sie IPC-2221A (2003) Figure 6-4, das Diagramm aus IPC-2221 (1998), und IPC-2152 (2009) Figure 5-1; kein Wert der letzten beiden ändert sich.Zwölf Rechner verwenden das Modell, das ihre Seite und ihre Quelle beschreiben
POST /api/py/v1/calculatePOST /api/py/v1/calculate/batchPOST /api/py/v1/calculate/solveMCP run_calculationrftools-io SDK
Jeder der folgenden Rechner berechnete ein Modell, das hinter dem zurückblieb, was seine Seite und seine Quelle beschreiben, und zwar gleich im Browser, in der API und im MCP-Server. Jeder berechnet jetzt das veröffentlichte Modell und ist gegen einen veröffentlichten Fall getestet, und der Paritätsabgleich hält Browser und API auf denselben Zahlen. Gespeicherte Berechnungen speichern Eingaben und werden daher neu berechnet.
bldc-winding, Teil derselben Änderung, hat einen eigenen Eintrag vom 2026-10-11.Werte ändern sich bei:
cable-shield-effectiveness(Kopplungsimpedanz R_T + jωM_T und Schirmdämpfung gegenüber der Leitungsimpedanz, Hähner & Mund 1998: 64,95 dB bei den Standardwerten, vorher 30,97 dB gegenüber 1 Ω, ohne Untergrenze bei 0 dB),ferrite-bead(R_DC + (R_AC ∥ L ∥ C) nach Analog Devices AN-1368, verankert an der eingegebenen Impedanz bei 100 MHz, und die komplexe Einfügedämpfung zwischen Quelle und Last: die Standardperle mit 600 Ω ergibt 94,9 Ω bei 1 GHz, vorher 1897 Ω),mosfet-operating-point(der Arbeitspunkt auf der Drain-Lastgeraden, Sedra & Smith 7e Abschnitt 5.3; siehe den inkompatiblen Eintrag unten),bldc-motor(Schub bei der Drehzahl, bei der sich die Drehmomente von Motor und Propeller ausgleichen, Drela 2007, mit C_P 0,047: 140,91 g bei den Standardwerten, vorher 80,43 g bei festen 75 % der Leerlaufdrehzahl),ethernet-cable(Kabel-Einfügedämpfung nach ANSI/TIA-568-C.2 bei der Signalfrequenz jedes PHY, 31,25, 62,5 oder 400 MHz: 7,69 dB bei den Standardwerten, vorher 16,5 dB; Kategorie 8 ist bei jeder Geschwindigkeit ein 30-m-Kanal),radar-range-equation(die Reichweite bei dem SNR, das die Albersheim-Gleichung für P_d und P_fa verlangt: 35,23 km bei den Standardwerten, vorher 74,96 km bei SNR = 1, undsnrAtMaxRangemeldet dieses SNR, wo es 0 war),bldc-efficiency(Kupferverlust I²·R mit dem Klemmenwiderstand, Drela 2007 und das maxon Formulae Handbook: 4,500 W bei den Standardwerten, vorher 6,750 W),bldc-thermal(der Wicklungswiderstand bei der Temperatur, die er erreicht, maxon Formulae Handbook Abschnitt 9.2, mit demselben Kupferverlust: 207,61 °C bei den Standardwerten, vorher 184,47 °C; siehe den inkompatiblen Eintrag unten),class-d-efficiency(Leitung durch die FETs, die die Last gleichzeitig führen, I²·R_DS(on)·N/2: 0,625 W bei den Standardwerten, vorher 1,250 W),motor-driver-power(zwei leitende FETs und einer hart schaltend, TI SLVA504A: eine Brücke mit 0,1440 W bei den Standardwerten, vorher 0,2088 W) sowiecoax-impedanceundvia-calculator(Z₀ aus η₀/2π = 59,9585 Ω mit den Konstanten nach CODATA 2018, wo sie 60 verwendeten: 47,990 Ω und 35,2243 Ω bei den Standardwerten, vorher 48,023 Ω und 35,2487 Ω).Neue optionale Eingaben, angehängt; eine Anfrage, die eine davon weglässt, erhält deren Standardwert:
transferInductance(nH/m, 0,159155, was die bisherige Kopplungsimpedanz bei 10 mΩ/m reproduziert) undlineImpedance(Ω, 50) beicable-shield-effectiveness;beadInductance(µH, 1,208),parasiticCapacitance(pF, 1,678) undsourceImpedance(Ω, 0) beiferrite-bead;biasMode(0 löst die Lastgerade, 1 nimmt V_DS wie eingegeben; Standardwert 0) beimosfet-operating-point;pd(0,9),pfa(1×10⁻⁶) undpulses(1, nichtkohärent integriert) beiradar-range-equation;transitionTime(ns, 50) beimotor-driver-power.Neue Ausgaben:
vdsOperatingbeimosfet-operating-point,loadedRpmundloadedCurrentbeibldc-motorsowiegateDriveLoss(2·Q_g·V·f, im Gate-Treiber umgesetzt) beimotor-driver-power.Schlüssel beibehalten, Bedeutungen jetzt passend zu ihren Bezeichnungen:
conductionLossvonmotor-driver-powerist der Verlust einer leitenden Position (I²·R),switchingLossder des einen hart schaltenden FET,totalLossPerFetder heißeste FET, undefficiencywird gegen V·I·D genommen und berücksichtigt die Gate-Ansteuerung. Die EingabephaseResistancevonbldc-efficiencyundbldc-thermalist als Klemmenwiderstand bezeichnet, zwischen zwei Anschlüssen gemessen, was sie immer war.Die Einfügedämpfung der Kategorie 8 verwendet die Entwurfskoeffizienten, die das Kanalmodell von IEEE 802.3bq für TIA Kategorie 8 angibt (Entwurf d0.7: 1,8·√f + 0,005·f + 0,25/√f dB pro 100 m), und jedes Ergebnis der Kategorie 8 sagt das, da die veröffentlichte Tabelle aus TIA-568.2-D nicht vorliegt.
Neue Ablehnungen und Warnungen:
ferrite-beadlehnt eine Impedanz bei 100 MHz ab, die ihre L und C nicht erreichen können, und nennt die größte erreichbare;radar-range-equationlehnt eine P_d ab, die kein Detektor bei dieser P_fa erreicht, und warnt außerhalb des angegebenen Bereichs von Albersheim;cable-shield-effectivenesswarnt, wenn das Kabel länger als ein Sechstel einer Wellenlänge ist oder die Kopplung nicht mehr schwach ist;ethernet-cablewarnt, wenn eine Kategorie jenseits der Frequenz ausgewertet wird, bis zu der sie spezifiziert ist.mosfet-operating-point löst standardmäßig die Lastgerade; bldc-thermal gibt null zurück, wo die Wicklung thermisch durchgeht
POST /api/py/v1/calculate (mosfet-operating-point, bldc-thermal)POST /api/py/v1/calculate/batchPOST /api/py/v1/calculate/solveMCP run_calculationrftools-io SDK
mosfet-operating-pointlöst jetzt standardmäßig das quadratische Gesetz zusammen mit der Drain-Lastgeraden V_DS = V_DD − I_D·R_D (Sedra & Smith, Microelectronic Circuits, 7. Aufl., Abschnitt 5.3, Beispiel 5.5), sodassvddundrdLoadden Arbeitspunkt bestimmen und ein eingegebenesvdsnicht mehr. Bei den Standardwerten ergibt er 11,96 mA im Triodenbereich bei V_DS 0,0401 V, wo er 450 mA ergab, die die Last von 1 kΩ an 12 V nicht führen kann. Ein Aufrufer, der sich auf das eingegebenevdsverlässt, mussbiasMode: 1senden; das behält die bisherige Berechnung bei und warnt, wenn V_DS + I_D·R_D mehr als 1 % von V_DD abweicht. Die neue AusgabevdsOperatinggibt in beiden Modi das V_DS des Arbeitspunkts an.bldc-thermalberücksichtigt jetzt den Anstieg des Wicklungswiderstands mit der Temperatur (maxon Formulae Handbook, 2012, Abschnitt 9.2). Wo α·Rθ·R₂₅·I² ≥ 1 gilt, gibt es keinen stationären Zustand: Der Kupferverlust wächst mit der Temperatur schneller, als der Wärmepfad ihn abführt. Dort sindtempRise,steadyStateTemp,thermalMarginundhotResistancenull, mit einer Warnung, die den Strom nennt, unterhalb dessen sich die Wicklung einpendelt; früher waren es Zahlen (467,97 °C bei 25 A am Standardmotor, der jetzt über 23,21 A thermisch durchgeht). Ein Aufrufer, der sie als Zahlen liest, muss null behandeln.deratedCurrentundtimeToLimitsind immer Zahlen.timeToLimitvonbldc-thermalist null, mit einer Warnung, wenn sich die Wicklung beim Spitzenstrom unterhalb ihres Grenzwerts einpendelt, der Grenzwert also nie erreicht wird. Früher war es der Platzhalterwert 9999 s, der sich wie eine echte Zeit las.bldc-winding: Der Füllfaktor zählt beide Spulenseiten, und der Wicklungsfaktor nach dem Nutenstern
POST /api/py/v1/calculate (bldc-winding)POST /api/py/v1/calculate/batchPOST /api/py/v1/calculate/solveMCP run_calculationrftools-io SDK
fillFactorzählt jetzt beide Spulenseiten in jeder Nut, 2·N·A_wire/A_slot (Pyrhönen, Jokinen & Hrabovcová, Design of Rotating Electrical Machines, 2008, Abschnitt 2.9): Eine Spule auf jedem Zahn legt zwei Spulenseiten in jede Nut. Früher zählte er eine, sodass sich jeder Füllfaktor verdoppelt. Er ist nicht mehr auf 100 % begrenzt: Eine Wicklung, die nicht passt, gibt ihren tatsächlichen Wert zurück, mit den Warnungen bei 75 % und 90 % wie bisher.windingFactornimmt seinen Zonenfaktor aus dem Nutenstern-Verfahren, k_d = sin(π/6)/(z·sin(π/(6z))) für q = S/(3P) = z/n in gekürzter Form (Bianchi & Dai Pré, 2006). Er war 1 für jedes q, das auf 1 gerundet wurde, sodass Bruchlochwicklungen zu hoch lagen: 12 Nuten und 14 Pole ergeben jetzt 0,93301 (vorher 0,96593), 18 Nuten und 16 Pole 0,94521 (vorher 0,98481). Ganzlochwicklungen sind unverändert.turnsPerCoil,actualKv,deltaEquivKvundphaseResistancefolgen: Die Standardwicklung mit 935 Kv bleibt bei 4 Windungen und erreicht 1027,61 Kv (vorher 992,59), und 920 Kv auf einem Stator von 23 × 10 mm braucht 6 Windungen (vorher 5).Der Standardwert von
maxCurrentdes Rechners ist 5 A (vorher 10 A), sodass seine Standardwicklung des EMAX MT2213 baubar ist: 4 Windungen AWG 18 bei 47,24 % Füllfaktor. Bei 10 A braucht sie AWG 14 und 119,44 %. Die API setzt keine Standardwerte ein, sodass eine Anfrage, diemaxCurrentsendet, mit dem gesendeten Wert berechnet wird.Dreißig Rechner auf die Beziehung korrigiert, die sie zitieren
POST /api/py/v1/calculatePOST /api/py/v1/calculate/batchPOST /api/py/v1/calculate/solveMCP run_calculationrftools-io SDK
Jeder der folgenden Rechner berechnete etwas anderes als seine zitierte Quelle, und zwar gleich im Browser, in der API und im MCP-Server. Jeder berechnet jetzt die Beziehung aus der Quelle und ist gegen einen veröffentlichten Wert getestet. Gespeicherte Berechnungen speichern Eingaben und werden daher neu berechnet.
Werte ändern sich bei:
equalizer-q-factor(Oktavbandbreite bei konstantem Q),capacitor-code(eine Multiplikatorziffer 8 bedeutet ×0,01, 9 bedeutet ×0,1),opamp-gain(die Bandbreite ist GBW durch die Rauschverstärkung),coax-impedance(TE11-Grenzfrequenz am mittleren Umfang),h-bridge-selection(zwei FETs leiten gleichzeitig),bldc-winding(der Faktor √3 gehört zum Stern; neue Standardwerte von einem realen 12N14P-Motor),speaker-crossover(Induktivitäten 2. Ordnung √2·R/ω_c, das Doppelte des alten Werts, auch im KiCad-Export),esd-tvs-diode(der Prüfschärfegrad nach IEC 61000-4-2 nimmt die erste Spitze der Norm von 3,75 A/kV),common-mode-choke(eine komplexe Serienimpedanz in einem 50-Ω/50-Ω-System),uart-baud-rate(Mark- und Space-Parität zählen ein Bit),bldc-motor(statischer Schub C_T·ρ·n²·D⁴ mit C_T 0,11),resistor-color-code(Orange ±0,05 %, Gelb ±0,02 %; ein weißer Toleranzring wird abgelehnt),pt100-resistance(das C aus IEC 60751 unter 0 °C und die volle Steigung),torque-units,energy-unitsundtorque-unit-converter(exakte Faktoren nach NIST SP 811),via-thermal-resistance(Strombelastbarkeit aus der Anpassung nach IPC-2221),thermal-via-array(die galvanisierte Hülse ist Kupfer, gleich welche Füllung),stackup-builder(L3 als Stripline gelöst, L1 mit Kupferdicke, Kupfer in der Summe mitgezählt),coplanar-waveguide(geerdeter CPW bleibt für breite Streifen endlich),i2c-pullup(V_OL ist 0,2·V_DD bei 2 V oder darunter),vibration-phase-noise(der Zufallsterm fällt mit dem Offset; die Abweichung ist der Spitzenwert),inrush-current-limiter(die Spitze beim Kaltstart ist V/R_cold),shielding-effectiveness(die Reflexionsdämpfung enthält η₀; Mehrfachreflexionen ergänzt),ethernet-cable(Kategorie 5e bei 10 Gb/s besteht nicht),ground-plane-impedance(Induktivität µ₀·h·l/w; einseitiger Wechselstromwiderstand) undminimum-conductor-spacing(IPC-2221B Tabelle 6-1 nach Bereich, mit ihren Raten pro Volt über 500 V).Neue optionale Eingaben:
separationbeiground-plane-impedance(mm, Standardwert 1) undtempRisebeivia-thermal-resistance(°C, Standardwert 10). Eine Anfrage, die sie weglässt, erhält den Standardwert, der die veröffentlichten Rechenbeispiele reproduziert.Neue Ausgaben:
hotRestartInrushbeiinrush-current-limiterundmultipleReflectionLossbeishielding-effectiveness.Ausgaben ohne Wert kommen jetzt als null mit einer Warnung zurück, wo sie früher eine Zahl waren: Hohlleiterwellenlänge sowie Phasen- und Gruppengeschwindigkeit von
waveguide-cutoffunterhalb der Grenzfrequenz und die Breite vonstackup-builderfür eine Zielimpedanz, die die Lage nicht erreichen kann.comparator-hysteresisundpcb-trace-tempändern nur ihre Bezeichnungen und die angegebene Formel: Keine Zahl ändert sich.POST /api/py/v1/calculate/solvelehnt eingrid, das feiner als 1×10⁻¹² der Größenordnung des Bereichs ist, mit einergrid-Ablehnung (400) ab, vor jeder Auswertung und ohne Abrechnung. Ein solches Raster konnte eine Anfrage bis zur Zeitüberschreitung festhalten.radiated-emission-estimate: Reserve gegenüber CISPR 32 Klasse B, null, wo die Norm keinen Grenzwert setzt
POST /api/py/v1/calculate (radiated-emission-estimate)POST /api/py/v1/calculate/batchMCP run_calculationrftools-io SDK
Die Reserve wird jetzt gegenüber dem Grenzwert von CISPR 32 Klasse B im Messabstand genommen: Tabellen A.4 und A.5, die Zeile für 3 m unter √30 m und die Zeile für 10 m darüber bis 1 GHz, die Mittelwertzeilen für 3 m von 1 bis 6 GHz, 20 dB/Dekade ab dem tabellierten Abstand und der niedrigere Grenzwert an einer Bandkante. Früher waren es pauschal 40 dBµV/m bei jeder Frequenz und jedem Abstand.
Unter 30 MHz und über 6 GHz setzt CISPR 32 keinen Grenzwert für die Abstrahlung, daher ist
margindort null, mit einer Warnung. Früher war es eine Zahl. Ein Aufrufer, dermarginals Zahl liest, muss null behandeln.Das Feld ist die Abschätzung für eine kleine Schleife im freien Raum, jetzt mit der exakten Konstante π·µ₀/c. Eine Messung über einer Masseebene kann bis zu 6 dB höher liegen, wie die Seite sagt.
filter-designer und sechs HF-Rechner korrigiert
POST /api/py/v1/calculateMCP run_calculationrftools-io SDK
filter-designer: Die Prototypwerte von Tschebyscheff waren ab der 4. Ordnung falsch (g3 1,5733, jetzt 2,3661), ein Butterworth 1. Ordnung ergab g1 = 1 (jetzt 2), und die Elementwerte des Bandpasses waren bei Q = 10 zehnmal zu klein. Die Werte werden jetzt berechnet, nicht tabelliert.waveguide-cutoff,free-space-path-loss,rf-link-budget,fresnel-zone,link-marginundradar-range-equationverwenden die exakte Lichtgeschwindigkeit, nicht 3×10⁸: Längen verschieben sich um etwa 0,07 % und die Pfaddämpfung um 0,006 dB.radar-range-equationverwendet außerdem die exakte Boltzmann-Konstante.planar-spiral-inductorlehnt einen Innendurchmesser ab, der gleich oder größer als der Außendurchmesser ist, statt NaN zurückzugeben.Am 2026-10-05 und 2026-10-06 kamen vierzehn Rechner hinzu, darunter die neue Kategorie
iot; rufen Sie den Katalog perGEToderlist_calculatorsab, um sie zu sehen.PDN-Impedanz: ein konvergiertes Ebenenmodell, ein abgeleiteter Port und zwei neue Parameter
POST /api/py/v1/jobs (pdn_impedance)POST /api/py/v1/jobs/estimateMCP simulate_pdn_impedancerftools-io SDK
Weggelassene
portX_mmundportY_mmsetzen den Port jetzt auf den Drittelpunkt der Platine (a/3, b/3) statt in ihre Mitte. Die Mitte ist eine Nullstelle jeder Hohlraummode mit ungeradem Index, sodass die ersten Resonanzen bei einem Lauf mit Standardwerten nie sichtbar wurden. Eine Anfrage, die den Port angibt, erhält den angefragten Port.Zwei optionale Parameter:
portSize_mm(Standardwert 1 mm, 0,25–20), die Seitenlänge des Quadrats, durch das der Strom des ICs in die Ebenen eintritt, undboardInductance_nh(Standardwert 1 nH, 0–20), die Induktivität zwischen Regler und Ebenen, die fest auf 1 nH stand. Ein Port, der über eine Platinenkante hinausragt, wird angenommen und mit seinem Spiegelbild modelliert; ein Port, dessen Mitte außerhalb der Platine liegt oder der größer als die Platine ist, wird abgelehnt.Die Ergebnisse ändern sich. Die Modalsumme der Ebene wurde relativ zu
freqMax_hzabgeschnitten und konvergierte mit einem Punktport nie, sodass sich die Ergebnisse mit dem Sweep verschoben. Jetzt konvergiert sie und hängt unterhalb der ersten Mode nicht vom Sweep ab. Am Standardport beträgt die Ausbreitungsinduktivität der Ebene etwa 1,5 nH, wo etwa 0,2 nH angegeben waren, sodass die Serienresonanz der unbestückten Ebene von etwa 550 auf etwa 210 MHz fällt und sich die empfohlenen Kondensatorsätze ändern. Frühere Ergebnisse werden nicht neu berechnet.Das Urteil und
summary.maxZPdnDbdecken jetzt das ganze Entkopplungsband ab, das beim 0,8-Fachen der ersten Hohlraummode der Platine endet, mit dem ungünstigsten Fall zwischen den Rasterpunkten verfeinert. Neue Ergebnisfelder:summary.band,summary.worstHz,summary.unreachable,resonances[].portCouplingsowie der verwendete Port, seine Größe und die Platineninduktivität unterparams. Jedes bestehende Feld bleibt erhalten.Ein Aufruf zum Auflösen nach einem Zielwert: eine Rechnereingabe für eine Zielausgabe suchen
POST /api/py/v1/calculate/solve
POST /api/py/v1/calculate/solvefindet den Wert einer Eingabe eines Rechners, der eine seiner Ausgaben auf einen Zielwert bringt — die Leiterbahnbreite für 50 Ω, den Abstand für eine Ziel-Differenzimpedanz —, und gibt ihn mit dem Vorwärtsergebnis genau bei diesem Wert zurück:values,warnings,errorsundprovenance, genau das, was/calculatefür diese Eingaben zurückgibt. Ein gezählter Aufruf ersetzt die vielen Vorwärtsaufrufe, die ein Client sonst für die Suche von Hand aufwenden würde.Die Suche läuft über die angegebenen Grenzen der Eingabe, eingeengt durch einen optionalen
range; eine Eingabe ohne angegebene Grenze braucht einen. Ein optionalesgridrundet den zurückgegebenen Wert auf sein nächstes Vielfaches innerhalb des Bereichs, neben der ungerundeten Lösung. Ein Zielwert, den die Suche nicht erreichen kann, ist trotzdem ein Erfolg, mitreached: falseund dem nächstgelegenen gefundenen Wert, und wird trotzdem abgerechnet. Ablehnungen — ein unbekannter Rechner, ein Eingabe- oder Ausgabename, den der Rechner nicht deklariert, ein nicht endlicher Wert, ein fehlender Bereich bei einer unbegrenzten Eingabe — kosten nichts, wie bei jeder anderen Rechner-Route.Client.solve()des Python-SDK (rftools-io0.4.0) und das Werkzeugsolve_calculationdes MCP-Servers (2.2.0) bieten denselben Aufruf.Ein verbrauchtes Kontingent auf den Rechner-Routen ist 402, nicht 401
POST /api/py/v1/calculatePOST /api/py/v1/calculate/batch
Die Rechner-Routen antworteten mit 401 „Invalid or quota-exceeded API key“ sowohl bei einem ungültigen Schlüssel als auch bei einem verbrauchten Kontingent, sodass ein Skript einen falschen Schlüssel nicht von einem vollen Monat unterscheiden konnte. Ein verbrauchtes Kontingent ist jetzt 402, wie es die Job-Route schon antwortete, mit
errorKind: "rate_limited",reason,limit,used,resetAt,upgradeUrl,overageUrlund einem HeaderRetry-After.401 bedeutet jetzt nur noch, dass der Schlüssel fehlt, fehlerhaft, unbekannt oder widerrufen ist, und erwähnt nie ein Kontingent. Eine Anfrage ganz ohne Schlüssel erhält 401 mit einer
keyUrl, unter der es einen kostenlosen Schlüssel gibt.Ein Aufruf wird geprüft, bevor er gezählt wird: Ein unbekannter Rechner (404) oder eine Eingabe, die keine endliche Zahl ist (400), kostet nichts, und eine fehlgeschlagene Berechnung wird gutgeschrieben. In einem Batch werden nur die Einträge gezählt, die diese Prüfungen bestehen, und Einträge, deren Berechnung scheitert, werden gutgeschrieben. Verzweigen Sie nach dem Status und
errorKind, nie nach dem Meldungstext.Das monatliche Kontingent gehört dem Konto, geteilt von all seinen Schlüsseln
POST /api/py/v1/calculatePOST /api/py/v1/calculate/batchPOST /api/py/v1/jobs
Früher trug jeder Schlüssel sein eigenes monatliches Kontingent, sodass ein Konto mit mehreren Schlüsseln sein Kontingent einmal pro Schlüssel verbrauchen konnte. Jetzt gehört das Kontingent dem Konto: Die Aufrufe jedes seiner Schlüssel, widerrufene eingeschlossen, werden auf einen gemeinsamen Monatswert angerechnet, der zu Beginn jedes Kalendermonats in UTC zurückgesetzt wird.
Ein Konto mit einem Schlüssel bemerkt keinen Unterschied. Aufrufe werden weiterhin dem Schlüssel zugeordnet, der sie ausgeführt hat, und das Dashboard und
GET /api/py/v1/usageführen sie pro Schlüssel auf.Ein Nutzungs-Endpunkt und Nutzungs-Header in jeder gezählten Antwort
GET /api/py/v1/usageX-Usage-AllowanceX-Usage-UsedX-Usage-ResetX-Usage-Overage
GET /api/py/v1/usagenennt einem Schlüssel (X-API-KeyoderAuthorization: Bearer rfc_…) oder einer angemeldeten Sitzung den Tarif, das Kontingent, was verbraucht und was übrig ist, wann es zurückgesetzt wird, den Stand der Mehrnutzung und die Aufrufe, die jedem Schlüssel des Kontos zugeordnet sind. Die Abfrage wird nie gezählt.Jede gezählte Antwort trägt
X-Usage-Allowance,X-Usage-Used(einschließlich dieses Aufrufs) undX-Usage-ResetsowieX-Usage-Overage, wenn Mehrnutzung gezählt wurde. Browser können sie lesen.Jedes Ergebnis gibt an, wie es berechnet wurde
POST /api/py/v1/calculatePOST /api/py/v1/calculate/batchGET /api/py/v1/jobs/{jobId}
Rechnerergebnisse und jeder Batch-Eintrag tragen ein
provenance-Objekt mit neun Feldern:method,version,formulaRef,assumptions,validRange,computedAt,inputs,seedundelapsedSeconds. Jobergebnisse trugen bereitsprovenance; es erhältformulaRef,assumptions,validRangeundcomputedAtstatt eines zweiten Objekts, und seineversionwird alsworker@<revision>geschrieben statt als bloße Revision.Eine Eingabe außerhalb des Bereichs, für den ein Rechner ausgelegt ist, wird trotzdem berechnet:
validRangenennt sie, und eine Warnung wird hinzugefügt. Ein vor dieser Änderung gespeichertes Ergebnis behält die Felder, die es hatte; behandeln Sie ein fehlendes als unbekannt.Programme können über die Gerätefreigabe (Device Authorization Grant) einen Schlüssel erhalten
POST /api/py/v1/oauth/device/codePOST /api/py/v1/oauth/device/token/device/
Ein Programm ohne eigenen Browser kann einen Schlüssel erhalten, ohne dass sein Nutzer einen einfügt (OAuth 2.0 Device Authorization Grant, RFC 8628). Es fordert bei
/oauth/device/codeeinen Code an, zeigt seinem Nutzer den Code und die Adresse https://rftools.io/device/ und fragt/oauth/device/tokenim erhaltenen Intervall ab. Sobald der Nutzer sich angemeldet und den Code freigegeben hat, liefert die nächste Abfrage einen gewöhnlichen API-Schlüssel, ein einziges Mal.Der Schlüssel wird gezählt, aufgelistet und kann widerrufen werden wie jeder andere, und er zählt zum Schlüssellimit des Kontos.
Schlüssel-Links für Clients und Bezeichnungen für Schlüssel
POST /api/py/v1/apikeys/dashboard/?newKey=1
POST /api/py/v1/apikeysnimmt einen optionalen Body{"label", "client"}an und gibt beides zurück; ohne Body funktioniert es wie bisher. Ein Client kann seinen Nutzer zuhttps://rftools.io/dashboard/?newKey=1&client=<clientId>schicken, um einen für ihn bezeichneten Schlüssel zu erstellen, der einmal angezeigt wird.Ablehnungen nennen das Limit und den Weg darüber hinaus
429 responses402 from POST /api/py/v1/jobsAuthorization: Bearer rfc_…
Der 429 pro Minute trägt
errorKind: "rate_limited",limit,windowSecondsundupgradeUrlnebendetail, so wie jede andere Ablehnung ihrerrorKindträgt. Der 402 der Job-Route für ein verbrauchtes Kontingent erhältreason,limit,used,upgradeUrlundoverageUrl, und der 402 für ein verbrauchtes Kontingent der Lösungsmodi vonfdtd_sparamträgtreason: "solve_mode". Bestehende Felder sind unverändert.Die Rechner-Routen nehmen einen Schlüssel als
Authorization: Bearer rfc_…wie auch alsX-API-Keyan, wie es die Job-Routen schon taten.
Die vollständige Referenz ist die API-Dokumentation; die maschinenlesbare Beschreibung sind der OpenAPI-Playground und das OpenAPI-Dokument.