Secciones de la documentación
Registro de cambios de la API
Cada cambio de la API pública que un cliente podría notar, del más reciente al más antiguo. Cada entrada lleva la fecha en que se anunció aquí; un cambio que rompe la compatibilidad con los clientes existentes se anuncia como muy tarde con la versión que lo introduce y se marca como Incompatible. 29 de las 81 entradas siguientes son incompatibles.
rf-link-budget toma 0,5 dB de pérdida atmosférica cuando se omite atmosphericLoss
POST /api/py/v1/calculatePOST /api/py/v1/calculate/batch
Una llamada que omitía
atmosphericLossse calculaba con 0 dB mientras suprovenance.inputsinformaba del valor predeterminado documentado, 0,5 dB. Ahora se calcula con 0,5 dB, como indican la página de la calculadora y la procedencia, de modo querxPower,linkMarginymaxRangeKmse desplazan ese medio decibelio en una llamada así. Una llamada que envía la entrada no cambia.Todas las demás entradas de todas las calculadoras se comprobaron de la misma manera: si se omiten, o se rechazan (400, sin cobro) o se calculan con su valor predeterminado documentado.
GET /v1/usage puede devolver las llamadas por día
GET /api/py/v1/usage
Pase
?days=N, de 1 a 90, y la respuesta incluyedaily: una entrada{date, calls}por cada uno de los últimos N días en UTC, de la más antigua a hoy. Lascallsde un día se suman en todas las claves de la cuenta, descontadas las llamadas devueltas, y un día sin ninguna muestra 0. Los días anteriores al 2026-09-24, cuando empezó el recuento por horas, muestran 0.Sin
days, la respuesta no cambia. Consultar el uso sigue sin contabilizarse nunca.El número de puertos de una carga Touchstone se lee de sus filas antes que de su nombre
rf_cascadesparam_pipelineimpedance_matcheye_diagram
Cuando el número de valores de un archivo admite más de un número de puertos, deciden sus filas antes que su extensión: tres puntos de un puerto en un archivo llamado
.s2pson un puerto, no un punto de dos puertos, y se informa de un nombre que los datos contradicen (port_count_mismatchen rf_cascade). Una palabra clave[Number of Ports]sigue decidiendo primero.El diagrama de ojo ya no falla con un archivo cuya extensión nombra más puertos de los que contienen sus datos.
El Monte Carlo de filtros ejecuta hasta 1000 pruebas gratis y 100.000 en Pro y API, dentro de un presupuesto de trabajo
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
monteCarloIterationsllega a 1000 en el plan Free (antes 500) y a 100.000 en Pro y API (antes 10.000). El tiempo máximo del trabajo es de 180 s (antes 120 s).El coste de una ejecución son sus pruebas multiplicadas por las evaluaciones de la red en escalera que necesita cada una, determinadas por sus componentes y por
passCriteria. Una ejecución cuya predicción supera el presupuesto de su entorno (120 s en el de pago, 60 s en el gratuito) se rechaza al enviarse y en la estimación conerrorKind: "too_large", antes de cobrar nada. El detalle nombramonteCarloIterationsy da el coste, el límite y, enallowed.max, el máximo de pruebas que caben. Caben 100.000 pruebas de una escalera de 5 componentes con tres criterios; una escalera de 20 componentes con ocho criterios cabe hasta 53.304.La estimación informa de
withinBudget, unbudgetde tipoladderEvaluationsyworkcomotrialsyladderEvaluationsPerTrial, que también registracomputeCost.workde un trabajo.La lista de etapas de una cascada de RF se comprueba al enviarse
POST /api/py/v1/jobsPOST /api/py/v1/jobs/estimaterf_cascade
Un
stagesmal formado (no es JSON, está vacío, una etapa que no es un objeto, un valor que no es un número finito) se rechaza con un 400 que nombra la etapa y la clave, antes de cobrar nada. Antes se aceptaba y luego fallaba como fallo interno (fault).Los valores de las etapas están acotados:
gain_db±1000 dB,nf_dbde 0 a 1000 dB,iip3_dbmyp1db_dbm±1000 dBm, y la ganancia de la cadena tras cada etapa dentro de ±1000 dB.NaN,Infinityytrue/falsese rechazan; los números escritos como texto se siguen leyendo.Una clave de etapa que solo difiere de una conocida en mayúsculas y minúsculas (
gain_dB,IIP3_dbm,Name) se rechaza, nombrando la etapa y la clave correcta; antes se ignoraba y la etapa se ejecutaba con el valor predeterminado. Cualquier otra clave que una etapa no acepta (notes,part) se ignora con una advertenciaunknown_stage_key.Una etapa cuyo
sparamFileno se cargó con el trabajo se rechaza, en lugar de calcularse con la ganancia escrita.Sin punto de intercepción, el valor es null, no 99 dBm
POST /api/py/v1/jobsrf_cascade
El IIP3 de una etapa pasiva, y el IIP3, el OIP3, el P1dB y el SFDR de una cadena en la que ninguna etapa los limita, son
null(eran 99 dBm y 99 + ganancia). Los percentiles y el histograma Monte Carlo del IIP3 sonnullen ese caso y el rendimiento del IIP3 es del 100 %.Una etapa pasiva ya no añade una intercepción de 99 dBm: un atenuador de 150 dB delante de un amplificador con 0 dBm de IIP3 da ahora 150 dBm, no 99.
Cascada de RF: ruido pasivo desde archivos, signo del Monte Carlo, intercepciones exactas, advertencias
rf_cascade
Una etapa pasiva cuya ganancia procede de un archivo toma su figura de ruido de esa ganancia.
El Monte Carlo mueve la figura de ruido de una etapa pasiva con su pérdida; el signo estaba invertido.
El IIP3 y el P1dB de entrada se calculan exactamente por bajos que sean (tres amplificadores de 300 dB: −600 dBm y −610 dBm, que antes daban −270 dBm); un suelo de −270 dBm solo queda como salvaguarda donde la suma detrás de un punto no es un número positivo y finito, algo que los límites de las etapas hacen inalcanzable, así que un P1dB ya no hace fallar el trabajo.
Advertencias
unknown_stage_type,unknown_stage_keyyfile_not_uploaded.La adaptación de impedancias ajusta en escala logarítmica y usa la reflexión de onda de potencia en el barrido
POST /api/py/v1/jobsimpedance_match
Los componentes E12, E24 y E96 son el valor normalizado más cercano en escala logarítmica, como están espaciadas las series; justo a mitad de camino, el menor. 2,099 nH es ahora 2,2 nH, no 2,0 nH. Donde las dos reglas difieren, pueden cambiar los componentes, la pérdida de retorno y la rama que elige
auto.|S11|, la trayectoria en la carta de Smith, la pérdida de retorno en el peor caso y el ancho de banda usan la reflexión de onda de potencia (Z − Zs*)/(Z + Zs), como ya hacen los valores en f0. Una fuente real no cambia; una fuente compleja, escrita o leída de un archivo, da un |S11| distinto.
La adaptación de impedancias indica su frecuencia de diseño, el modelo en frecuencia de su carga y sus valores en f0
POST /api/py/v1/jobsPOST /api/py/v1/jobs/estimateimpedance_match
Cada parámetro nuevo es opcional; una solicitud sin ellos obtiene la respuesta que obtenía antes.
designFreq(Hz): f0, indicada aparte defreqStart–freqStopy dentro de ese intervalo; si falta, el centro de la banda.loadModel:constant(si falta),series_rcoseries_rl(ajustados en f0; se rechaza una reactancia de signo incorrecto) ofile(los propios puntos de frecuencia de la carga cargada).branchPreference:any,lowpassohighpass, con una advertenciabranch_preference_unmetdonde no existe esa rama. Se acepta un archivo de carga.s1p.Resultados nuevos:
designFreqHz,loadModel,unmatchedLoad,performance.idealy.standard(pérdida de retorno, VSWR, pérdida por desajuste eliminada y el ancho de banda con RL ≥ 10 dB con sus bordes y su fracción de f0, resuelto por bisección),branchyqDefinitions.El diagrama de ojo acepta una excursión de transmisión, un CTLE y una máscara
POST /api/py/v1/jobs (eye_diagram)MCP simulate_eye_diagram
Cada parámetro nuevo es opcional, y una solicitud sin ellos obtiene la respuesta que obtenía antes.
launchSwing(mV pico a pico, valor predeterminado 2000, los ±1 V que suponía todo resultado anterior) escala cada tensión;eyeHeightPctOfSwingda la altura del ojo como fracción de ella.equalization: ctleaplica el filtro de tiempo continuo del anexo 93A de IEEE 802.3.ctleDcGain(de −12 a 0 dB) fija su ganancia; en blanco se queda con la mejor entre −12 y 0 dB en pasos de 1 dB.ctleinforma de la ganancia, el realce en Nyquist, el barrido y el ojo anterior.maskType(hexagon o rectangle),maskHalfHeight(mV) ymaskWidth(UI) danmask.pass,margin_mVy las violaciones.samplingPhase(UI después del cruce) ylossFrequency(Hz) añadensamplingylossAtFrequency.Cada resultado lleva
channelFile,uiMeasuredytraceCount.La detección radar acepta una semilla aleatoria
POST /api/py/v1/jobs (radar_detection)provenance.seed
randomSeed(un número entero, 0 o mayor) sustituye la semilla fija 42 del Monte Carlo y se registra comoprovenance.seed, de modo que una ejecución puede repetirse y una variante hipotética reenviarse con los mismos sorteos. Sin ella, todo resultado queda igual.El Monte Carlo de filtros ejecuta una escalera tal como se construyó, contra los criterios que usted fija, e indica qué tolerancias ajustar
POST /api/py/v1/jobs (filter_monte_carlo)MCP simulate_filter_monte_carlorftools-io SDK
Cada parámetro nuevo es opcional, y una solicitud sin ellos obtiene la respuesta que obtenía antes, con campos de resultado nuevos al lado.
parts(de 1 a 20, de la fuente a la carga:ref,kindL o C,positionseries o shunt,valueen H o F,toleranceopcional en %) simula la escalera tal como se da, sin redondeo a E24.passCriteria(de 1 a 8:insertionLossenfStart–fStopcomo máximomaxDb,cutoff3dBdentro defMin–fMax,attenuationenfreqo enfStart–fStopal menosminDb) sustituye arippleSpec_dbyrejectionSpec_db.yieldTarget(%, 95 si está en blanco).Resultados nuevos:
circuit,yieldTargetcon un veredicto respecto al intervalo del 95 %,criteriacon estadísticas, histogramas y elvarianceShare(r²) de cada componente,failingTrials(las 200 primeras),sampleTrialsy, con criterios introducidos,whatIfs: los componentes que determinan el criterio más incumplido, con una tolerancia un escalón más estricta, recalculados sobre las mismas pruebas. Reenviar con larandomSeedde la ejecución y esas tolerancias da el mismo rendimiento.El lazo de control de la fuente conmutada acepta su compensador por componentes, resuelve una frecuencia de cruce y da un veredicto
POST /api/py/v1/jobsPOST /api/py/v1/jobs/estimatesmps_control_loop result
Cada entrada nueva es opcional, y una solicitud sin ella obtiene la respuesta que obtenía antes.
compensatorType: type2_otaconcompRc,compCc,compChf,compGmycompVrefdescribe un compensador de tipo II de transconductancia por sus componentes, transformado exactamente en K, f_z y f_p. Se rechaza uncompVrefpor encima deVout.solveFor: crossovercontargetCrossover(Hz, valor predeterminado Fsw/10),resistorSeries(E96) ycapacitorSeries(E12) coloca R_c, C_c y C_hf en modo de corriente de pico e informa de lo que consiguen.minPhaseMargin(45°) yminGainMargin(10 dB) fijan el veredicto y el rendimiento del Monte Carlo.Resultados nuevos:
verdict,polesZeros,nominal.phaseCrossoverHz,nominal.loopGainAt100HzDb,compensatorParts,solve,runSummaryybodeAboveHalfFsw, las respuestas hasta 2·Fsw, donde no se lee ningún margen.Dieciséis calculadoras de temporización evalúan su temporización frente a un presupuesto
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batchprovenance.validRange
Cada entrada nueva es opcional, y una solicitud sin ella obtiene la respuesta que obtenía antes, salvo donde las entradas siguientes digan otra cosa.
uart-baud-rate:oversampling(16 u 8),divisorFraction(0 un divisor entero, 1 una fracción en pasos de 1/oversampling) yerrorBudget(%, 2, al que sigue la advertencia de error de baudios);divisorSet,baudError_pct(con signo) ystopSampleOffset_bits.can-bus-timing:sjw(tq, 1);bitRateActual,bitRateError_pct,samplePointActualyoscTolerance_pct, la tolerancia de reloj que ISO 11898-1 permite a cada nodo.lin-bus-timing:slotTime(ms, 10);frameTimeMax, 1,4 × la trama nominal (LIN 2.x).modbus-frame-timing:charGap(ms, 0), que ahora cuenta en el tiempo de trama;t15,charGapCharsyt15Chars.spi-timing:riseTime(2,2τ) yedgeShare_pct.i2s-timing:mclk(MHz, 16,9344) yrateBudget(%, 0,1);mclkDivider,bclkActual,sampleRateActualysampleRateError_pct.pwm-duty-cycle:timerClock(MHz, 16) yrequiredBits(8);periodCounts,onCounts,dutyActual,frequencyActualydutyResolution_bits.555-timer:targetTime(ms, 2),errorBudget(%, 5),rToleranceycTolerance(%, 0);timeMin,timeMaxytimingError_pct.rc-time-constant:rTolerance(%, 1),cTolerance(%, 5) ytauBudget(%, 10), con una advertencia por encima;tauMinUs,tauMaxUsytauErrorPct.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), al que ahora sigue la advertencia de ralentización. Cada uno se rechaza en 0 o por debajo.inrush-current-limiter:ntcR25(Ω, 0 para el valor necesario) yntcTolerance(%, 20);peakInrushMax. ConntcR25fijado,peakInrush,timeConstantylimitingResistorsiguen al termistor ajustado.pid-tuning:overshootBudget(%, 25);overshootPctysettlingTimea partir de un escalón simulado en lazo cerrado.Catorce calculadoras de frecuencia cuentan sus productos dentro de una banda
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batchprovenance.validRange
Cada entrada nueva es opcional, y una solicitud sin ella obtiene la respuesta que obtenía antes, salvo donde las entradas siguientes digan otra cosa.
mixer-spur-calculator:rfBandLow/rfBandHigh(MHz, 902/928),ifBandwidth(MHz, 10) ynearMargin(MHz, 50);spursInBand,spursNearBand,nearestSpur,imageFreq,imageToBandyloToBand, a partir de cada entrada de RF que se convierte a la FI, f_RF = (m·f_LO ± f_IF)/n (m el armónico del OL, n el armónico de RF, como en el recuento anterior), m + n hastamaxOrder.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, con los canales repartidos uniformemente por la banda.channels1ychannels2están limitados a 100.via-stub-resonance:dataRate(Gb/s, 10);nyquistFreq,resonancesInBandyresonancesNearBand.chassis-resonance:bandLow/bandHigh(MHz, 30/1000);f011MHzymodesInBand.room-modes:bandLow/bandHigh(Hz, 20/200);modesInBand,modesNearBandymodalBandwidth.sampling-nyquist:harmonicOrder(5);aliasesInBand(el propio tono replegado en la banda de señal),harmonicAliasesInBand(sus armónicos replegados en ella, que importan hasta el SFDR del convertidor) ylowestAliasingInput.fft-bin-resolution:toneFreq(Hz, 1000) ysidebandSpacing(Hz, 100);toneBin,toneLevelError,resolutionBandwidthysidebandsUnresolved(null para un tono por encima de f_s/2).am-modulation-index:channelWidth(kHz, 10);powerInChannel,sidebandsInChannelysidebandsOutside.fm-modulation-index:channelLow/channelHigh(kHz, 98000/98200);occupiedBandwidth,powerInChannel,sidebandsInChannelysidebandsOutside(null por encima de β = 1000, con una advertencia).oversampling-snr:signalBandwidth(Hz, 24000);modulatorRate,outOfBandNoiseyfoldBands.digital-filter-order:toneFreq(Hz, 1000) ymaxHarmonic(5);harmonicsInPassband,harmonicsInTransition,nearestHarmonic,butterworthAttenuationychebyshevAttenuation.can-bus-timing: el preescalador y los cuantos más cercanos a la tasa de bits
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
De cada bit de 8 a 25 cuantos de tiempo (CAN 2.0), con el preescalador a ambos lados del que pide, el más cercano a la tasa de bits; luego el punto de muestreo más cercano al pedido (CiA 601-3); luego 16 cuantos; luego el preescalador más pequeño. Antes tomaba el preescalador más cercano a 16 cuantos, diera la tasa que diera: 36 MHz a 500 kbps eran 5 × 14 cuantos, un 2,86 % rápido, y ahora son 3 × 24, exacto.
prescaler,nominalBitTime,tqy los segmentos cambian donde existe un ajuste exacto o más cercano; todos los valores predeterminados y preajustes quedan igual.El punto de muestreo queda como mucho un cuanto antes del final del bit, de modo que los segmentos suman hasta él (8 cuantos al 95 % eran 9).
modbus-frame-timing: temporizadores fijos por encima de 19 200 Bd
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Por encima de 19 200 Bd,
t35vale fijo 1,75 ms (Modbus over Serial Line V1.02, sección 2.5.1.1), ya no 3,5 caracteres (0,334 ms a 115 200 Bd 8E1), ymaxFrameRatelo sigue; el nuevot15vale ahí fijo 750 µs.intermodulation-distortion: im3High es una magnitud
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
im3Highes |2f₂ − f₁|, como ya lo eraim3Low: por debajo de f₂ = f₁/2 era negativo (100 y 40 MHz: −20, ahora 20 MHz).chassis-resonance: c exacta y el modo (0,1,1)
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
La velocidad de la luz es exacta, 29 979 245 800 cm/s, no 3 × 10¹⁰:
fLowest,f101MHzyf110MHzbajan un 0,07 % (901,39 → 900,76 MHz con los valores predeterminados).fLowestincluye (0,1,1), el modo más bajo cuando la longitud es el lado más corto (Pozar, Microwave Engineering, 4.ª ed., sección 6.3): una caja de 10 × 30 × 20 cm daba 1581 MHz y da 900,76 MHz;wavelengthAtResonancelo sigue.phase-noise-to-jitter: el perfil se integra como leyes de potencia
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Con
profileMode1, el perfil se integra como leyes de potencia entre sus puntos, rectas en ejes log-log (Drakhlis, Microwaves & RF, enero de 2001), y la banda termina en el propio nivel del perfil en ese punto. Un trapecio lineal sobrestimaba un perfil descendente, y L₄ se mantenía hasta el final de la banda incluso cuando queda más allá: el perfil predeterminado a 100 MHz daba 0,166 ps y da 0,084 ps.rmsJitter,cycleToCycleJitter,phaseNoisePower,rmsPhaseErroryadcSnrLimitcambian en ese modo; el modo de un solo nivel no cambia.sampling-nyquist: el alias se repliega al múltiplo de f_s más cercano
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
aliasFreq_Hzes |f − k·f_s| con k el entero más cercano a f/f_s (Kester, MT-002). Era |f_s − f|, correcto solo hasta 1,5·f_s: 10 kHz a 4 kSa/s daban 6000 Hz y dan 2000 Hz.fm-modulation-index: el ancho de banda de Bessel a partir de las funciones de Bessel
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
besselBandwidthabarca las bandas laterales por encima del 1 % de la portadora sin modular, 2·n·f_m (Haykin, Communication Systems): era 2(β + 1)·f_m, otra vez la regla de Carson. Con β = 5 era 180 kHz y es 240 kHz. Por encima de β = 1000 es null, con una advertencia.digital-filter-order: el orden elíptico exacto
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
ellipticOrderresuelve la ecuación de grado K(k)·K′(k₁)/(K′(k)·K(k₁)), con k = f_p/f_s y k₁ = ε_p/ε_s. Era el orden de Chebyshev dividido entre 1,5, demasiado alto en la mayoría de los diseños y demasiado bajo en algunos: los valores predeterminados necesitan 3, no 4; una transición 2:1 a 1 y 20 dB necesita 3, no 2.via-stub-resonance: sin stub, sin resonancia
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Con la salida en la última capa no hay stub:
resonantFreqybackdrillBenefitson null (una resonancia ilimitada), ya no 0.room-modes e inductor-energy: rechazos que nombran lo que está mal
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
room-modesrechaza una velocidad del sonido o un tiempo de reverberación de 0 o menos con su propio mensaje, y no devuelve valores junto a un rechazo; antes devolvía ceros y nombraba las dimensiones de la sala.inductor-energyrechaza una resistencia en serie de 0 o menos, como el sitio hizo siempre; la API fallaba con ella.Ocho calculadoras más de convertidores y controladores aceptan un rango de funcionamiento, eligen sus componentes y añaden un modelo de pérdidas
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batchprovenance.validRange
Como hace
buck-converter: cada entrada que varía en servicio es un par<input>Miny<input>Max, donde 0 (el valor predeterminado) significa la entrada nominal. Cada peor caso es una salida, con los valores de entrada en que ocurre como salidas propias (rippleWorstAenrippleWorstVin). Los componentes se eligen iguales o superiores a lo que pide la esquina más desfavorable: un inductor de la serie E12 y una tensión nominal igual al siguiente valor normalizado a partir de 1,5 veces la peor tensión (el interruptor del flyback, a partir de su pico de drenador limitado). Las entradas del modelo de pérdidas tienen valores predeterminados típicos; sus pérdidas se dan en el punto nominal, en W, y se suman alossTotal. Una solicitud sin las entradas nuevas obtiene la respuesta que obtenía antes, salvo donde las entradas siguientes digan otra cosa.boost-converter:inputVoltageMin/inputVoltageMax;coutEach, yrdsOn,tSwitch,qg,vGate,vDiode,qrr,dcr,coreLoss,esrOutdel modelo de pérdidas. Entre las salidas nuevas estándutyMin/dutyMax,inductorMinWorstUHeinductorChosenUH,ilPeakWorst,inputCurrentWorst,q1RmsA,coutRmsA,outputRippleMV,vdsRating, ocho pérdidas yefficiencyLossModel; la entradaefficiencysigue fijando las corrientes.flyback-converter:vinMin/vinMax, calculados en cada esquina con el transformador nominal;rdsOn,tFall,qg,vGate,vDiode,rPri,rSec,coreLoss,leakageInductance(µH, valor predeterminado 2,6) yclampRatio(valor predeterminado 2, desde 1,1) del modelo de pérdidas, con la pérdida del limitador RCD ½·L_lk·I_pk²·f·k/(k − 1). Entre las salidas nuevas están las corrientes de pico y eficaces de ambos devanados,reflectedVoltage,clampVoltage,vdsPeakWorst,vdsRating,diodeVrWorst,diodeVrRating, siete pérdidas yefficiencyLossModel.charge-pump-voltage:inputVoltageMin/inputVoltageMaxypumpCurrentMin/pumpCurrentMax;switchResistance(Ω, valor predeterminado 1) yesr(mΩ, valor predeterminado 10), sumadas a la resistencia de reparto de carga como lo está la R_O de la hoja de datos del ICL7660. Entre las salidas nuevas estánloadedVoltageMin/loadedVoltageMax,outputResistance,loadedVoltageWithLosses, los valores nominales de condensadores e interruptores, tres pérdidas yefficiencyLossModel(igual aefficiencycon componentes ideales).switching-regulator-ripple:outputCurrent(A, valor predeterminado 2),inputVoltageMin/inputVoltageMax, y el modelo de pérdidas del convertidor reductor sobre sus propios componentes (suesres el del condensador de salida). Entre las salidas nuevas están los rizados y las corrientes eficaces en el peor caso,vdsRating, ocho pérdidas yefficiency.mosfet-power-dissipation:drainCurrentMin/drainCurrentMaxytAmbientMin/tAmbientMax(cualquier valor salvo 0, que es el nominal);rdsonTempco(%/°C, valor predeterminado 0), resuelto hasta la unión en forma cerrada,coss(pF, valor predeterminado 0),qgyvGate. Entre las salidas nuevas estánjunctionTempWorstcon su corriente y su temperatura ambiente,totalLossWorst,efficiencyWorst,vdsRating, cuatro pérdidas yefficiencyLossModel.h-bridge-selectionymotor-driver-power:motorCurrentMin/motorCurrentMaxy el rango de la alimentación (motorVoltageMin/motorVoltageMax,supplyVoltageMin/supplyVoltageMax); el tiempo muertotDeady lavBodydel diodo intrínseco (TI SLVA504A) y, en el puente H,dutyCycle(%, valor predeterminado 75),tSwitch,qgyvGate. Entre las salidas nuevas están la peor pérdida del puente, el FET más caliente,vdsRating, las pérdidas yefficiencyLossModel.class-d-efficiency:outputPowerMin/outputPowerMaxysupplyVoltageMin/supplyVoltageMax;switchingFreq(kHz, valor predeterminado 400),filterCutoff(kHz, valor predeterminado 40),tSwitch,coss,qg,vGate, y ladcry lacoreLossdel inductor del filtro. Entre las salidas nuevas están el filtro de salida (TI SLAA701B) calculado y elegido, cinco pérdidas,loadPower,efficiencyLossModel, la peor eficiencia y la peor pérdida con sus esquinas,headroomWorst(negativo donde el puente no puede dar a la salida la excursión necesaria), las corrientes de rizado y de pico del filtro, y los valores nominales.boost-converter: el ciclo de trabajo es el de TI SLVA372D
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
El ciclo de trabajo era 1 − V_in/(V_out·η), de modo que las pérdidas lo acortaban, en contradicción con la propia corriente de entrada de la calculadora. Ahora es la ecuación 1 de TI SLVA372D, D = 1 − V_in·η/V_out. Con los valores predeterminados (5 V a 12 V, 0,5 A, 100 kHz, 88 %),
dutyCyclepasa de 52,65 % a 63,33 %,inductorValuede 64,35 µH a 77,41 µH youtputCapacitorde 4,388 µF a 5,278 µF.El rechazo y la advertencia se desplazan con él: una entrada entre η·V_out y V_out, antes rechazada, ahora se calcula (solo se rechaza V_out ≤ V_in), y la advertencia del 95 % de ciclo de trabajo aparece en V_in·η/V_out ≤ 0,05.
switching-regulator-ripple: se rechaza una salida igual o superior a la entrada
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
La calculadora es un reductor. Con
outputVoltageigual o superior ainputVoltagedevolvía un ciclo de trabajo del 99 % y un rizado negativo; ahora rechaza con «Output voltage must be less than input voltage» y no devuelve valores.buck-converter: un rango de entrada, los componentes elegidos y sus esfuerzos, y un modelo de pérdidas con la eficiencia
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batchprovenance.validRange
vinMinyvinMaxdan la entrada como un rango (0, el valor predeterminado, es lavinnominal). El inductor se dimensiona donde su rizado es mayor y se elige igual o superior en la serie E12 (inductorMinWorstUH,inductorChosenUH); cada esfuerzo se indica donde es mayor, con la tensión de entrada en que ocurre:rippleWorstA/rippleWorstVin,ilPeakWorst/ilPeakWorstVin,outputRippleMV/outputRippleVin,cinMinWorstUF,cinRmsA,q1RmsA,q2RmsA(cada uno con su…Vin), ydutyMin,dutyMax. El banco de salida soncoutCountcondensadores decoutEachµF; las tensiones nominales de los componentes sonvdsRating,cinVoltageRating,coutVoltageRating(el valor comercial igual o superior a 1,5 veces la tensión).Un modelo de pérdidas, con todas las entradas opcionales:
rdsOnHigh,rdsOnLow,tSwitch,qg,vGate,tDead,vBody,dcr,coreLoss,esrOut,esrIn. Con la entrada y la carga nominales, las pérdidas sonlossDcr,lossCore,lossHsConduction,lossLsConduction,lossHsSwitching,lossGateDrive,lossDeadTime,lossCapEsrylossTotal(W), conoutputPoweryefficiency(%). Una solicitud sin las entradas nuevas obtiene las cinco salidas que obtenía antes, salvocinUF(consulte buck-converter-input-capacitance).buck-converter: el condensador de entrada se dimensiona para el rizado de la entrada
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
cinUFdividía entre la tensión de rizado de la salida (deltaVoutdevout). Ahora toma el propio rizado de la entrada, la nueva entradadeltaVin(% devin, valor predeterminado 1), como en la ecuación 12 de TI SLVA477B: C_in = I_out·D·(1 − D)/(f_sw·ΔV_in). Con los valores predeterminados (12 V a 5 V, 1 A, 500 kHz), 9,72 µF pasa a 4,05 µF.Veintitrés calculadoras más aceptan una serie de componentes e informan del diseño tal como se construye
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batchprovenance.validRange
eSeries(0 para valores ideales, o 12, 24, 48, 96) redondea cada resistencia, condensador o inductor que la calculadora diseña o lee al valor más cercano de esa serie, y cada salida pasa a ser la del diseño redondeado. Su valor predeterminado deja a una solicitud sin él la respuesta que obtenía antes: 24 enattenuator-designer,led-resistoryzener-diode, cuyas salidas E24 (piR1NearestatR2Nearest,rNearest,iActual,pNearest,e24Resistor) ahora lo siguen, y 0 envoltage-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-crossoverytweeter-capacitor. Los componentes dedirectional-couplerson líneas y no lo aceptan.Las salidas nuevas describen el diseño redondeado:
attenuator-designerpiAttenuationBuilt(dB) ypiInputImpedanceBuilt(Ω);wilkinson-power-dividerisolationBuilt(dB en f₀, null con la resistencia exacta, donde es ilimitado);rcd-clamp-snubberclampVoltageBuilt,rippleVoltageBuilt,clampPowerBuiltypeakDrainVoltageBuilt;pll-loop-filtercrossoverBuilt(kHz, el cruce por 0 dB del lazo;pmActuales el margen allí);rs485-terminationfailsafeVoltage(mV, la tensión A–B del bus en reposo);emi-filter-lcinsertionLossBuilt(dB a 10·f_c);conducted-emissions-filtercornerBuilt,attenuationBuiltyoutputLevelBuilt;speaker-crossoverwooferCutoffBuiltytweeterCutoffBuilt;tweeter-capacitorcrossoverBuilt;zener-diodezenerCurrentBuilt(mA) yzenerPowerBuilt(mW) a plena carga a través de la resistencia elegida, con la corriente negativa donde la resistencia no puede soportar la carga.Etiquetas, con las claves sin cambios: las resistencias redondeadas del atenuador se llaman «(rounded)» en lugar de «(E24)»;
rNearest«Nearest Series Value»,pNearest«Power (series R)»,e24Resistor«Nearest Series Resistor»; elerrordecurrent-mirror«Output Current Error», el déficit frente a N·I_ref (con una serie incluye el redondeo, y una salida Widlar se resuelve a partir de V_T·ln(I_ref/I) = I·R_E con la R_E redondeada).Para que se pueda resolver un componente para una salida objetivo, estas entradas declaran ahora un máximo (un valor por encima se sigue calculando, con la advertencia de la procedencia):
comparator-hysteresisr1yr210 000 kΩ;photodiode-transimpedancefeedbackResistance1e7 kΩ yfeedbackCapacitance100 000 pF;differential-mode-filterinductance100 000 µH ycapacitance1 000 µF;power-supply-ripple-filterinductance100 000 µH ycapacitance100 000 µF.schmitt-trigger: umbrales por superposición en la entrada +
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
La banda era V_cc·R2/(R2 + R3), que omite R1, colocada simétricamente en torno a la tensión del divisor. Los umbrales se obtienen ahora por superposición en el nodo + (TI SNOA997A): V_TH+ = V_cc·R1/(R1 + R2∥R3) y V_TH− = V_cc·(R1∥R3)/(R2 + R1∥R3);
centerVoltagees el centro de la banda. Con los valores predeterminados (5 V, 10, 10 y 100 kΩ),vth_high,vth_lowehysteresispasan de 2,727, 2,273 y 0,4545 V a 2,6190, 2,3810 y 0,2381 V. El circuito es un disparador inversor; la descripción lo llamaba no inversor.conducted-emissions-filter: L y C se adaptan a la carga
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
L y C se repartían como √(LC·Z) y √(LC/Z), lo que fijaba √(L/C) en √Z (7,07 Ω sobre 50 Ω; el filtro tenía un pico de 17 dB a 47 kHz desde una fuente de tensión). Ahora son L = Z/ω₀ y C = 1/(ω₀·Z). Con los valores predeterminados (80 dBµV a 150 kHz, 20 dB, 50 Ω),
lValuepasa de 23,7 µH a 167,8 µH ycValuede 0,475 µF a 0,0671 µF. La frecuencia de corte, y por tanto la atenuación de 40 dB/década, no cambia.attenuator-designer, led-resistor, zener-diode: valores E24 por debajo de 10 Ω
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Sus búsquedas E24 empezaban en 10 Ω, así que un componente por debajo de 10 Ω se ajustaba a 10 Ω: las resistencias en serie de 2,875 Ω de un atenuador en T de 1 dB y 50 Ω salían de 10 Ω (el atenuador construido daba 1,336 dB y 54 Ω), y una resistencia de LED de 5 Ω, de 10 Ω. Las búsquedas empiezan ahora en 0,10 Ω (3,0 Ω y 5,1 Ω). Por encima de 10 Ω no cambia nada.
pll-loop-filter y class-d-efficiency: un rechazo no devuelve valores
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
pll-loop-filter(en cada rechazo) yclass-d-efficiency(en la API) devolvían ceros junto al error. Ya no devuelven valores, como las demás calculadoras.filter-designer: la respuesta de la escalera tal como se construye, un desplazamiento exacto del corte y cortes hasta 1 GHz
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batchprovenance.validRange
Seis salidas nuevas describen la escalera que forman los valores de los componentes, resuelta como una cascada de matrices ABCD entre Z₀ y su carga:
loadImpedance(Z₀, o Z₀/g_{N+1} en un Chebyshev de orden par, g_{N+1}·Z₀ en el paso alto),cutoffBuilt_Hz(la frecuencia de −3 dB, paso bajo y paso alto),fLowBuilt_HzyfHighBuilt_Hz(los bordes de −3 dB de un paso banda),passbandLoss_dB(la peor pérdida hasta 0,8·f_c, por encima de 1,25·f_c o en el 80 % central de una banda) ystopbandBuilt_dB(la pérdida donde el prototipo alcanza el doble de su corte). ConeSeriesfijado son las del diseño redondeado; con componentes ideales, la banda de rechazo es igual aattenuation_at_2fc.fcShiftPercentera la mitad del mayor error de componente. Ahora indica cuánto desplazó el redondeo la frecuencia de −3 dB de la escalera construida (en un paso banda, el centro de su banda de −3 dB) respecto a la de la escalera ideal: el Butterworth de 5.º orden de 100 MHz con componentes E24 da +0,997 %, donde la estimación daba +1,31 %. ConeSeries0 es 0, como antes.fcacepta hasta 1 GHz (antes se detenía en 10 MHz).voltage-drop: todos los calibres se calculan, y el aluminio es el de IEC 60889
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Un
wireGaugeque la tabla no recoge (un calibre impar o fraccionario) se calculaba con la resistencia de 12 AWG. Ahora usa la misma fórmula que la tabla, cobre según IEC 60028 (1/58 Ω·mm²/m) sobre la sección del calibre según ASTM B258; los calibres de la tabla no cambian.conductorType1 (aluminio) tomaba 1,61 veces la resistencia del cobre. Ahora toma los 0,028264 Ω·mm²/m de IEC 60889, 1,6393 veces el cobre, de modo que cada caída en aluminio es un 1,8 % mayor: 10 AWG a 15 A en 30 m a 120 V cae un 4,03 %, donde antes indicaba 3,96 %.coax-loss: atenuación a partir de los datos de los fabricantes; ocho cables más, potencia de entrada y de salida
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batchprovenance.validRange
La tabla de cables daba unas 1,7 veces los dB/100 ft de las hojas de datos, así que la pérdida de cada cable era demasiado baja. La atenuación por 100 m es ahora k₁√f + k₂f con f en MHz: los coeficientes publicados por Times Microwave (25 °C) para los cables LMR, y un ajuste por mínimos cuadrados a las tablas de Belden y CommScope (20 °C) para los demás.
lossPer100mantiguo → nuevo a 100, 435 y 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_dBy las fracciones de potencia y tensión lo siguen. Andrew LDF4-50A es el cable de 1/2 in; estaba etiquetado como 7/8 in.cableIndex0–9 conservan sus cables y ahora llega hasta 17: LMR-600, LMR-195, LMR-400-UltraFlex, LMR-400-LLPL (plenum), RG-316, RG-6 (75 Ω), Andrew LDF5-50A (7/8 in) y LMR-900. Nueva entrada opcionalinputPower(dBm, valor predeterminado 30); nuevas salidaspowerOut_dBm,powerOut_WylossPerMeter. Una frecuencia por encima del máximo nominal de un cable, más allá del último punto de una tabla ajustada, o por debajo de la frecuencia a partir de la cual un ajuste es válido con un 10 % de precisión, recibe una advertencia, no un rechazo.Dieciocho calculadoras aceptan listas: etapas, pérdidas, términos, capas, cargas, componentes y superficies
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batchprovenance.validRange
Cada lista es un recuento y unas entradas indexadas (
numLoadsconload1Current,load2Current, …), de modo que una solicitud sigue siendo un objeto plano. Cada recuento tiene como valor predeterminado la lista que la calculadora tenía antes, así que una solicitud sin las entradas nuevas obtiene la respuesta que obtenía antes (comprobado con 201 solicitudes por calculadora, rechazos incluidos). Una entrada indexada más allá del recuento se ignora.noise-figure-cascade:numStagesllega ahora a 10 (llegaba a 4), constage5Gain,stage5NF,stage5IIP3hastastage10IIP3, y unbandwidthopcional (MHz, valor predeterminado 1); salidas nuevascascadedGain,noiseTemperature(290 K × (F − 1)) ynoiseFloor(kT₀B más la figura de ruido en cascada).lora-link-budget,ble-link-budget,5g-nr-link-budget:extraLossCount(0–6) deextraLoss1aextraLoss6(dB), ytotalLoss.clock-jitter:jitterTerms(0–6) determ{n}Jitter_ps, sumados en cuadratura.emi-margin-budget:marginTerms(0–6) determ{n}Allowance, ytotalAllowance.sensor-accuracy-budget:errorTerms(0–6) determ{n}Error, en cuadratura.4-20ma-transmitter:loopElements(0–6) deelement{n}Resistance, ytotalLoopResistance.heatsink-calculator,heatsink-selection,thermal-resistance-network,junction-temperature:numLayers(0–6) delayer{n}Theta(°C/W), en serie entre el encapsulado y el disipador; las dos calculadoras de disipadores devuelven ademásthetaJSyheatsinkTemp.battery-life:numLoads(0–7) deload{n}Currentyload{n}Duty, yselfDischargeCurrent.battery-runtime-motor:motorDuty(%, valor predeterminado 100) ynumLoads(0–5) deload{n}Current,load{n}Dutyyload{n}Efficiency, ybatteryCurrent.solar-panel-sizing:loadHours(h al día, valor predeterminado 24) ynumLoads(0–9) deload{n}Poweryload{n}Hours.gear-ratio:extraStages(0–5) destage{n}Driver,stage{n}Drivenystage{n}Efficiency, ytotalEfficiency.series-parallel-resistor:numParts(1–8, valor predeterminado 4) conr5ar8, ysumOfValues;r1puede ser 0, un componente no montado, como ya podían las demás posiciones.rt60-reverberation:numSurfaces(0–8) desurface{n}Areaysurface{n}Alpha, yotherAreaymeanAbsorption.Los presupuestos de enlace responden a una distancia de 0 sin pérdida de trayecto
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
lora-link-budget,ble-link-budgety5g-nr-link-budgetrechazaban una distancia de 0. Ahora la responden con 0 dB de pérdida de trayecto: el enlace sin trayecto, que las páginas usan para mostrar el presupuesto antes del trayecto. Una distancia negativa se sigue rechazando.clock-jitter: sin presupuesto de temporización restante, la fracción es ilimitada, no 0 %
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Cuando los tiempos de setup y hold ocupan todo el período del reloj,
budgetUsed_pctera 0, que se lee como ausencia total de jitter. Ahora es null (una fracción ilimitada), con una advertencia de que no queda presupuesto de temporización cuando no hay ninguna violación de setup que informar.series-parallel-resistor: la relación del divisor usa los dos componentes montados
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Con exactamente dos componentes montados,
voltDividerRatioera R2/(R1 + R2) fueran cuales fueran, así que valía 0 con R1 y R3 montados. Ahora es el segundo componente montado dividido entre la suma de ambos, lo que no cambia cuando son R1 y R2.optical-sensor-range: un rechazo no devuelve valores
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Un factor de seguridad de 0 o menos se rechazaba con
maxRangeynormalizedRangea 0 junto al error. El rechazo ya no devuelve valores, como todos los demás rechazos.broadside-coupled-pair: sin planos no hay impedancia de modo común ni desacoplada ni altura sobre el plano
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Un par sin blindaje (
shielded0) no tiene planos de referencia, así quecommonImpedance,uncoupledImpedanceyheightToPlaneno están definidos, como ya decía la advertencia. Valían 0 y ahora son null.rise-time-bandwidth: sin reloj no hay número de armónico
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Con
clockFrequency0, que la entrada permite para prescindir del reloj,harmonicNumbervalía 0, un valor que ningún reloj da. Ahora es null, como otras salidas donde un valor no existe.Trece calculadoras evalúan su resultado frente a una norma publicada
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Cada una acepta la norma (y, cuando corresponde, la clase) como entrada opcional, y devuelve el límite, el resultado como porcentaje de él (por encima de 100 no cumple) y el valor de una entrada con el que cumpliría. Los límites se calculan en el propio cálculo, así que la API da el veredicto de la página. Cada entrada nueva es opcional y, con su valor predeterminado, ninguna salida existente cambia, salvo donde una entrada siguiente diga otra cosa.
power-density:standard(0 FCC 47 CFR §1.1310, 1 ICNIRP 2020),exposureClass,groundReflection; devuelvelimitDensity,limitPercent,minDistance,maxEirp.trace-width-current:standard(lee eltraceWidthdibujado que la API ya acepta);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(el límite esspacing).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(el límite esriseTimeTarget_ns, el modo esspeedMode).usb-termination:impedanceError,impedanceTolerance,impedancePercent,compliantImpedance(la norma esusbVersion).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.Donde una norma no fija límite (ICNIRP por debajo de 30 MHz, CISPR 32 fuera de 30 MHz–6 GHz, anillos anulares de IPC-6012 clase 2, una separación A6 por encima de 3050 m), las salidas nuevas son NaN, devueltas como null, con una advertencia que explica por qué.
Once calculadoras de líneas de transmisión devuelven la longitud de onda guiada
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-waveguideycoax-impedanceaceptan unafrequencyopcional (GHz, valor predeterminado 2,4) y devuelvenguidedWavelengthyquarterWavelength(mm), λg = c/(f·√εeff), las líneas acopladas a partir de su εeff de modo impar. Una solicitud sinfrequencydevuelve todas las salidas existentes sin cambios, más las dos nuevas a 2,4 GHz.radiated-emission-estimate: el margen sigue la norma y la clase elegidas
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
margines el límite de la norma y la clase elegidas a la frecuencia y la distancia de la solicitud, menos el campo:standard0 es CISPR 32 y 1 es FCC Part 15, sección 15.109,emissionClass0 es la clase B y 1 la clase A. Una solicitud sin ellos obtiene CISPR 32 clase B, como antes, así que su margen no cambia. Los límites de la FCC se aplican de 30 MHz a 40 GHz, y el margen es null fuera del rango de su norma. La etiqueta de la salida es ahora «Margin to Limit».minimum-conductor-spacing añade las columnas A6 y A7 de terminales de componentes, y una salida B4
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
condition4 es A6 (terminal externo o terminación de componente, sin recubrir, desde el nivel del mar hasta 3050 m) y 5 es A7 (terminal externo o terminación de componente, con recubrimiento conformado), ambas de la tabla 6-1 de IPC-2221B. Por encima de 3050 m, una solicitud A6 devuelve una separación null con una advertencia, ya que la tabla solo da A6 hasta 3050 m. La nueva salidaspacingB4es la columna B4 (conductores externos, recubrimiento polimérico permanente), junto aspacingB1,spacingB2yspacingB3. Las condiciones 0 a 3 y las salidas existentes no cambian.bga-land-pad dimensiona el pad según el diámetro de la bola, como hace IPC-7351B
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
El pad era el diámetro de la bola × 1,0, 0,9 o 0,8 según el nivel de densidad, algo que no da ninguna tabla de IPC. Ahora sigue IPC-7351B: para una bola que colapsa, un 25, 20 o 15 % más pequeño que la bola según su tamaño. Con los valores predeterminados,
padDiapasa de 0,55 a 0,45 mm, y las salidas derivadas lo siguen. La entradadensityLevelse retira, ya que IPC-7351B no aplica niveles de densidad a un pad de BGA: una solicitud que la envía se responde, con una advertencia de que el valor no se leyó.bldc-winding: una bobina abarca al menos una ranura
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batch
Cuando el número de ranuras dividido entre el de polos se redondeaba a 0 (6 ranuras con 14 polos, por ejemplo), el paso de bobina era 0, el factor de devanado 0, y
actualKvydeltaEquivKveran null. Una bobina concentrada se devana alrededor de un diente, así que el paso es ahora de al menos una ranura y esas salidas son números.Los trabajos emi_radiated aplican el límite más estricto en un borde de banda
POST /api/py/v1/jobs
Exactamente a 88, 216 y 960 MHz (FCC Part 15) y a 230 MHz (CISPR 32) se usaba el más laxo de los dos límites contiguos. 47 CFR 15.109(c) establece que en los bordes de banda se aplica el límite más estricto, y CISPR 32 aplica el límite más bajo en una frecuencia de transición; ahora se aplican ambos criterios.
Rangos de entrada en 31 calculadoras
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}POST /api/py/v1/calculate/batchprovenance.validRange
Las entradas de 30 calculadoras han ganado un máximo, la mayoría de geometría (líneas, pads, antenas, guías de onda), para que la página pueda resolver para ellas, y la capacidad del bus de
i2c-pullupllega ahora a 550 pF, el límite de Fast-mode Plus. La API no rechaza un valor fuera del rango de una entrada;provenance.validRangelo indica como fuera.Doce calculadoras de sensores ganan una etapa de entrada: su tensión, el código del ADC y la resolución
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-sensitivityylvdt-sensitivityaceptan entradas opcionales de la etapa de entrada y devuelven tres salidas nuevas. Las entradas son un divisor (fixedResistor,sensorPositionontcPosition) o un amplificador (frontGain), y un ADC (adcRef,adcBits), reutilizando una entrada que la calculadora ya tenía (gain,amplifierGain,adcVoltage,supplyVoltage). Las salidas son la tensión de la etapa de entrada (dividerVoltageoamplifiedVoltage),adcCode(un código unipolar de N bits, mantenido entre 0 y 2^N − 1) yresolution(la magnitud física por paso del ADC en ese punto).load-cell-amplifieracepta la carga sobre la célula (appliedLoad) y devuelve su salida (bridgeOutputMv);accelerometer-sensitivityaceptaaccelerationy devuelveoutputVoltage.Cada entrada nueva es opcional y, con su valor predeterminado, ninguna salida existente cambia: una solicitud escrita antes de este cambio devuelve los valores que devolvía, más las salidas nuevas.
current-shunt: la ganancia del amplificador tiene como valor predeterminado 20
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}
Cuando una solicitud omite
amplifierGain,current-shuntusa ahora 20 donde usaba 50. Con los demás valores predeterminados (10 A a través de 10 mΩ, un ADC de 3,3 V), la ganancia 50 ponía 5 V en el ADC, por encima de su referencia. La ganancia 20 da 2 V.amplifiedVoltageyadcResolutionCurrentcambian en esas solicitudes; una solicitud que indicaamplifierGainno se ve afectada.hall-effect-sensor: se rechaza un campo de cero o menos
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}
hall-effect-sensordevuelve ahora un error para unBfieldde 0 mT o menos, como ya hacía el sitio, donde la API devolvía valores calculados con él.frequency-ppm-tolerance: las advertencias citan las tolerancias de reloj aplicables
POST /api/py/v1/calculatePOST /api/py/v1/calculate/{slug}
Las advertencias de
frequency-ppm-tolerancecitaban un presupuesto UART de ±50 ppm (un UART tolera alrededor de un 2 %) y consideraban ±100 ppm demasiado laxo para USB, que permite ±2500 ppm a velocidad completa. Por encima de ±50 ppm, la advertencia cita ahora Ethernet 100BASE-TX y el reloj de radio de Bluetooth LE. Por encima de ±100 ppm cita todos los relojes Ethernet, y por encima de ±500 ppm USB 2.0 de alta velocidad. Los umbrales de 50 y 100 ppm no cambian; el de 500 ppm es nuevo.Ancho de pista y aumento de temperatura propios de la placa, según el modelo térmico de 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-currentañadewidthBoardMm, el ancho mínimo para esta placa, ypcb-trace-tempañadetempRiseBoardymaxTempBoard, el aumento y la temperatura máxima en ella; ambas añadeninModelRange. Proceden del modelo térmico propio de rftools, nunca etiquetado como IPC-2152: una red térmica de forma cerrada ajustada a un solucionador bidimensional de volúmenes finitos, solo para pruebas, de la pista, el laminado, el plano y el aire en reposo (convección y radiación), comprobado frente a mediciones publicadas (condiciones de IPC-TM-650 2.5.4.1A, los ajustes de Brooks & Adam a las gráficas de IPC-2152 y otros) y que aplica al aumento un margen del 15 % tomado del peor de ellos. Dentro de su rango validado (ancho de pista 0,25–5,1 mm, placa 1,4–3,2 mm, una pista interna desde 1,27 mm de ancho, un aumento de 5–100 °C, un plano a 0,1 mm o más) el ajuste queda dentro del 2,81 % del solucionador.Entradas nuevas, añadidas con valores predeterminados para que una solicitud existente calcule igual:
boardThickness(mm, valor predeterminado 1,6),planeDistance(mm hasta un plano de cobre, 0 si no hay) yplaneCopperWeight(oz, valor predeterminado 0,5) en ambas calculadoras, eisExternalenpcb-trace-temp. Ninguna salida existente cambia. Con los valores predeterminados,widthBoardMmes 0,30212 mm, junto a los 0,78144 mm de Figure 5-1, ytempRiseBoard10,2818 °C.Fuera del rango validado el resultado se sigue indicando, con
inModelRangea 0 y una advertencia que nombra el límite; una placa de menos de 1,4 mm remite a Figure 5-1, donde el modelo y los datos de espesor publicados en IPC-2152 discrepan. Una fuga térmica devuelve null para el aumento propio de la placa.provenance.validRangeañademodelsen estas dos calculadoras, cada modelo ajustado con su propioinside: primero el ajuste de IPC-2152 Figure 5-1, luego el modelo térmico, ystatusesoutsidesi lo es cualquiera de los dos. Una solicitud a estas calculadoras con una corriente, un aumento, un peso de cobre o una longitud de cero o negativos se rechaza en el navegador igual que en la API, y una corriente negativa se rechaza en lugar de responderse con 500.Se eliminan siete salidas que las calculadoras no podían calcular
POST /api/py/v1/calculate (differential-via, usb-termination, parabolic-dish-antenna)POST /api/py/v1/calculate/batchMCP run_calculationrftools-io SDK
differential-viaya no devuelvediffImpedance,commonImpedance,oddImpedance,evenImpedancenisingleEndedImpedance. Una solución de campo (un solucionador cuasiestático 3D validado con cuatro formas cerradas y contrastado en onda completa con openEMS al 0,4 %) mostró que la impedancia de un par de vías depende de la separación de los planos que atraviesa, que no es una entrada: con los valores predeterminados es de 85,6 Ω con 0,1 mm entre planos y de 96,0 Ω con 1,0 mm, donde la calculadora daba 44,10 Ω. Ninguna relación entre las entradas de la calculadora se acerca al 10 % en todos los casos, y la impedancia de modo común depende además de por dónde circula la corriente de retorno. La resonancia del stub y las pérdidas se siguen devolviendo; consulte la entrada de correcciones.usb-terminationya no devuelveeyeOpening, una heurística que ninguna especificación USB define.parabolic-dish-antennaya no devuelvenoiseTemperature, que era 290·(1 − η): la temperatura de ruido de una antena depende de su elevación, de su desbordamiento y del cielo, y la calculadora no recibe ninguno de ellos.Un cliente que lea una de estas claves debe dejar de hacerlo: la clave falta, no es null. Todas las demás salidas de las tres calculadoras se siguen devolviendo.
Los valores que no existen faltan o son null, no cero ni un valor centinela
POST /api/py/v1/calculatePOST /api/py/v1/calculate/batchPOST /api/py/v1/calculate/solveMCP run_calculationrftools-io SDK
Estas salidas son ahora null donde la magnitud no está definida, donde antes eran un número: la
signalRiseTimedeusb-terminationpara USB 3.0, que no especifica tiempo de subida del transmisor (USB 2.0 da su mínimo de 500 ps, T_HSR); las salidas de acoplamiento depcb-crosstalk-emcpor encima del límite de acoplamiento débil, (x_C + x_L)/2 = 0,1, donde el modelo concentrado no es válido;vbSealedyf3Sealeddesubwoofer-boxpara Qts ≥ 0,707, donde no existe alineación en caja cerrada (daban 2·Vas); elqFactordeplanar-spiral-inductoren la autorresonancia o por encima; la broca y la fresa de cobertura deaperture-diagonalcuando no cabe ninguna herramienta disponible (daban 0); elqFactordelc-resonancesin resistencia, la Q ilimitada de un circuito sin pérdidas (daba 9999, y el ancho de banda f₀/9999; el ancho de banda es ahora 0); y lastubResonancededifferential-viacuando no hay stub (daba 0 GHz). Cada null llega con una advertencia que explica por qué.Una entrada rechazada ya no devuelve valores, solo su error, donde estas calculadoras devolvían ceros o valores parciales:
power-density,thermal-via-array,bga-breakout-widthsin canal,dual-striplinecon h₂ ≤ 0,fresnel-zone, y todos los rechazos dedoppler-shift,reactance-calculator,broadside-coupled-pair,fusing-current,rise-time-bandwidth,current-divider,delta-wye-conversion,voltage-drop,rt60-reverberationyvfd-motor-speed. Un cero junto a un error se leía como un resultado.Un cliente que trataba estos valores como números debe comprobar si son null, o si falta la clave junto a un error.
/calculate/solveya omite los puntos sin la salida.Calculadoras corregidas según sus referencias, con tres entradas nuevas y salidas nuevas
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
Constantes. La resistividad del cobre es en todas partes la de IEC 60028, 1/58 Ω·mm²/m (trace-resistance 100,217 → 100,458 mΩ con sus valores predeterminados; las demás calculadoras de cobre se desplazan un 0,008 %, la profundidad de penetración un 0,004 %). El motor de microstrip usa η₀/2π donde usaba 60, y la velocidad exacta de la luz, de modo que toda impedancia basada en microstrip se desplaza un −0,069 % (microstrip-impedance 80,954 → 80,898 Ω, differential-pair 99,983 → 99,914 Ω, y con ellas los anchos resueltos). Todas las calculadoras comparten ahora un mismo η₀ = µ₀·c (CODATA 2018). La impedancia de onda de
power-densityes µ₀·c, 376,730 Ω (era 120π). El retardo decontrolled-impedancees √εeff/0,299792458 ps/mm (6,52995 → 6,53447). El trabajoemi_radiatedusa π·µ₀/c y µ₀ para sus campos, así que ahora coincide conradiated-emission-estimate(daba 0,021 dB y 0,023 dB de más).Modelos.
planar-spiral-inductortoma los parásitos de Jow & Ghovanloo y la longitud de pista de su forma: autorresonancia 68,0 → 601,7 MHz y Q a 100 MHz 814,5 → 116,8 con los valores predeterminados, con la nueva entrada opcionalfrequency(MHz, valor predeterminado 100) para Q.pcb-crosstalk-emces el modelo de dos extremos de Paul: las claves existentes son por extremo (la mitad de las cifras antiguas),farEndCrosstalkes nueva y los valores predeterminados son un reloj de 3,3 V y 25 MHz.subwoofer-boxsintoniza el puerto según Margolis & Small (20,246 → 40,273 Hz) y añadef3Vented.pcb-crosstalkfunciona con el motor de microstrip acoplado, con la nueva entradadielectricConst(valor predeterminado 4,5; acoplamiento 6,77 → 5,72 %). La resistencia de borde depatch-antennaes el modelo de ranuras radiantes de Balanis con el η₀ exacto, sin recortar (306,80 → 321,22 Ω; la resistencia de alimentación y la inserción de 50 Ω lo siguen).lc-resonancetoma su resistencia en serie como pérdida en serie en ambas topologías, Q = Z₀/R (el modo paralelo calculaba R/Z₀), y añadeimpedanceAtResonance_ohm: R en serie, L/(C·R) en paralelo. La resonancia del stub dedifferential-viase etiqueta como cota superior sin carga, y su pérdida en el conductor es la cota superior para planos densos (0,030 → 0,011 dB).Reglas. Una matriz de microvías se dimensiona por su sección sumada, nota 5 de IPC-2221 (diez vías 2,762 → 1,466 A). El autocalentamiento de una vía es el máximo del barril, P·L/(8kAN), en
via-voltage-drop(0,2506 → 0,0313 °C) ymicrovia-current-capacity.bga-breakout-widthcuenta la fila exterior (escapeRows1 → 2).padstack-annular-ringevalúa la relación de aspecto según la tabla 9-4 de IPC-2222, 8:1 en todas las clases, con una comprobación de taladro mínimo según la tabla 9-6, y el anillo interno de la clase 3 es de 0,025 mm.thermal-via-arraycuenta vías enteras.i2c-pullupyrs485-terminationdevuelven sus resistencias sin redondear (la presentación sigue redondeando).aperture-diagonalacepta la nueva entradarouterBit.Una solicitud que omite una de las entradas nuevas obtiene su valor predeterminado.
Se eliminan cuatro salidas que tenían un solo valor con cualquier entrada
POST /api/py/v1/calculate (balun-transformer, opamp-bandwidth, capacitor-code)POST /api/py/v1/calculate/batchMCP run_calculationrftools-io SDK
Cada una de estas salidas devolvía el mismo valor fueran cuales fueran las entradas, y ninguna era un resultado:
vswr(1,0, «VSWR (ideal)») einsertionLoss(0,3 dB, «Typical Insertion Loss») debalun-transformer;slewLimiteddeopamp-bandwidth(0, un marcador para una comprobación que necesita entradas de velocidad de subida y amplitud que la calculadora no tiene); yvoltageCodedecapacitor-code(0 V, una tensión nominal que un código de 3 dígitos no codifica). Ya no se devuelven, ni siquiera junto a un rechazo.Un cliente que lea una de estas claves debe dejar de hacerlo: la clave falta, no es null. Lo que representaba cada valor se indica ahora en
provenance.assumptions:ideal-transformerenbalun-transformer(adaptado por construcción; las pérdidas del núcleo y de los devanados no se modelan, y un balun de ferrita suele perder entre 0,1 y 1 dB) ycapacitance-onlyencapacitor-code. Todas las demás salidas de las tres calculadoras no cambian.La ganancia de loop-antenna incluye su eficiencia de radiación
POST /api/py/v1/calculate (loop-antenna, capacitor-code)POST /api/py/v1/calculate/batchPOST /api/py/v1/calculate/solveMCP run_calculationrftools-io SDK
La
gaindeloop-antennaera de 1,76 dBi con cualquier entrada: la directividad de un lazo pequeño, 3/2, sin ninguna de sus pérdidas. Ahora es esa directividad multiplicada por la eficiencia de radiación e = R_rad/(R_rad + R_loss), a partir de las dos resistencias que la calculadora ya devuelve: G = 10·log₁₀(1,5·e) (Balanis, Antenna Theory, 4.ª ed., capítulo 2 y sección 5.2). Con los valores predeterminados, un lazo de 1 m de cobre de 10 mm a 7 MHz, da −9,4043 dBi, 11,2 dB por debajo de la cifra antigua; un lazo cuya pérdida es pequeña frente a su resistencia de radiación sigue dando cerca de 1,76 dBi. La eficiencia es la nueva salidaradiationEfficiency(%), 7,6467 % con los valores predeterminados.capacitor-codeen la API redondeaba un código fraccionario al par más cercano donde la página redondea hacia arriba, de modo que 104,5 se decodificaba como 100 nF en la API y como 1 µF en la página. Ambas dan ahora 1 µF.Ocho entradas que no cambiaban ningún resultado ahora fijan uno; once salidas nuevas
POST /api/py/v1/calculatePOST /api/py/v1/calculate/batchPOST /api/py/v1/calculate/solveMCP run_calculationrftools-io SDK
Cada entrada de las siguientes estaba declarada y ninguna salida la leía. Ahora fija una salida nueva, añadida tras las existentes y calculada a partir de una relación que la calculadora ya establece; ninguna salida existente cambia con ninguna entrada.
patch-antenna:feedOffsetfijafeedResistance_ohm, R_edge·cos²(π·y₀/L) (Balanis, Antenna Theory, 4.ª ed., sección 14.2.1, ec. 14-20a), 306,795 Ω con la alimentación en el borde predeterminada y 65,501 Ω a 10 mm, einsetFeedPosition_mmes la inserción que da 50 Ω, 10,594 mm.flyback-converter:fswfijaprimaryInductance(µH), Vin·D/(fsw·Ipk) para la propia corriente de pico en conducción crítica de la calculadora, 130,56 µH.solar-panel-sizing:batteryCapacityfijabatteryAutonomyDays, C·V·0,5/(P·24 h) con la profundidad de descarga del 50 % que supone la capacidad requerida, 0,25 días.rs485-termination:baudRatefijabaudRateUtilisation(%), la tasa como fracción del máximo de 10⁸ bit·m, 11,52 %.adc-snr:samplingFreqfijanyquistZone, ⌊f_in/(f_s/2)⌋ + 1, yaliasFrequency(MHz), |f_in − f_s·round(f_in/f_s)| (Kester, Analog Devices MT-002): zona 1 y 1 MHz con los valores predeterminados, zona 2 y 30 MHz para 70 MHz a 100 MSPS.bldc-thermal:continuousCurrentfijaratedCurrentShare(%), la corriente de funcionamiento frente a la nominal, 75 %.bldc-winding:supplyVoltagefijanoLoadSpeed(rpm), Kv·V, 11.406,44 rpm. Las cifras corresponden a los valores predeterminados de cada calculadora.Otras dos salidas nuevas:
assumedBoomLength(m) enyagi-antenna, el boom que implica su separación de elementos de 0,2λ, (N − 1)·0,2λ, 1,6655 m con los valores predeterminados, que sustituye a su entrada retirada de longitud del boom (consulte esa entrada); yradiationEfficiency(%) enloop-antenna(consulte la entrada de su ganancia). Solo en el sitio, el widget normativo en vivo deism-coexistencemuestra ahora la banda que selecciona subandIndex; su resultado no cambia.Una solicitud que omite una de estas entradas obtiene su valor predeterminado.
patch-antennasinfeedOffsetysolar-panel-sizingsinbatteryCapacityse respondían hasta ahora con 400; ambas se responden.Se retiran doce entradas que nunca cambiaron un resultado; una solicitud que envía una recibe una advertencia
POST /api/py/v1/calculatePOST /api/py/v1/calculate/batchPOST /api/py/v1/calculate/solveMCP run_calculationMCP get_calculator_schemarftools-io SDK
Estas entradas estaban declaradas, pero ningún valor suyo cambiaba ninguna salida, advertencia ni rechazo:
smith-chartfrequency,via-calculatorsignalLayer,stackup-builderlayerCount(el modelo es un apilamiento fijo de cuatro capas, como ahora dice su título),i2c-pullupnumDevices,fm-modulation-indexcarrierFreq,quantization-noisefrequency,555-timervcc,bldc-efficiencypolePairs,opamp-bandwidthphase_margin,battery-internal-resistancetemperature,rs485-terminationnumNodesyyagi-antennaboomLength. Salen del catálogo, de los límites de la procedencia y del esquema MCP; cada calculadora las enumera enretiredInputs, con la fecha.Una solicitud que todavía envía una se responde con los mismos valores que antes y la advertencia existente «Input '<key>' is not read by this calculator and was ignored.». Nunca se rechaza.
POST /calculate/solvese niega a resolver para una de ellas, como para cualquier entrada no declarada; ninguna rejilla de ella podría haber movido una salida. Una solicitud ayagi-antennasinboomLength, respondida hasta ahora con 400, se responde.La próxima versión de
rftools-ioconserva cada palabra clave retirada: pasar una lanza unaDeprecationWarningque nombra la clave y su fecha de retirada, y la clave no se envía.trace-width-current lee su ancho IPC-2152 en IPC-2152 Figure 5-1; pcb-trace-temp informa del aumento según IPC-2152
POST /api/py/v1/calculatePOST /api/py/v1/calculate/batchPOST /api/py/v1/calculate/solveMCP run_calculationrftools-io SDK
El
width2152mmdetrace-width-current, etiquetado como IPC-2152, era el ancho de IPC-2221 × 0,75 en una capa externa y × 0,85 en una interna, un factor que IPC-2152 no contiene y más estrecho que cualquier lectura de IPC-2152 a partir de 2 A. Ahora es IPC-2152 (2009) Figure 5-1, la gráfica que IPC-2152 recomienda para conductores internos y externos en todos los entornos, mediante el ajuste publicado I = 0,024·ΔT^0,44·A^0,725, igual en ambas capas: 0,7814 mm con los valores predeterminados, antes 0,2266 mm; a 5 A, con un aumento de 10 °C y 1 oz en una capa exterior, 7,194 mm, antes 2,086 mm. Reproduce las lecturas de Olson (2010) en Figure 5-1 de 300 y 680 sq mil con un margen del 5 %. La clave no cambia; su etiqueta es ahora «Min Width (IPC-2152 Fig. 5-1)».Ambas calculadoras toman el cobre como 35 µm por onza, de modo que
width2221mmse desplaza un −0,58 % (0,3004 mm con los valores predeterminados, antes 0,3021 mm).resistance,voltageDropypowerDissdetrace-width-currentse calculan para una entrada nueva, el ancho de pista dibujado, donde usaban el mínimo de IPC-2221, con el cobre según IEC 60028 de 1/58 Ω·mm²/m: 0,10433 Ω con los valores predeterminados, antes 0,17326 Ω.Nueva entrada opcional, añadida; una solicitud que la omite obtiene su valor predeterminado:
traceWidthentrace-width-current(mm, 0,5). Salidas nuevas:inChartRangeen ambas calculadoras (1 dentro del rango que dibuja IPC-2152 Figure 5-1, 0 fuera, trasladado aprovenance.validRangecon el peor residuo del ajuste), ytempRise2152ymaxTemp2152enpcb-trace-temp, el aumento según Figure 5-1 (k = 0,024, cualquier capa) junto al aumento externo de IPC-2221: 25,815 °C con los valores predeterminados, junto a 5,342 °C. Las salidas existentes depcb-trace-tempconservan sus claves y valores.Los resultados fuera de las gráficas se indican y se marcan, nunca se rechazan: una advertencia nombra la magnitud y el límite de la gráfica, para las curvas de 10 a 45 °C y 700 sq mil de Figure 5-1, los 10 a 100 °C y 700 sq mil de la gráfica A de IPC-2221 en una capa exterior, y los ½ a 3 oz de la gráfica B; más allá de Figure 5-1,
provenance.validRange.statusesoutside.Citas:
trace-width-current,pcb-trace-temp,microvia-current-capacityyvia-calculatorcitaban IPC-2221B para la gráfica de corriente, que esa edición (2012) no contiene. Ahora citan IPC-2221A (2003) Figure 6-4, la gráfica de IPC-2221 (1998), e IPC-2152 (2009) Figure 5-1; ningún valor de las dos últimas cambia.Doce calculadoras usan el modelo que describen su página y su referencia
POST /api/py/v1/calculatePOST /api/py/v1/calculate/batchPOST /api/py/v1/calculate/solveMCP run_calculationrftools-io SDK
Cada calculadora de las siguientes calculaba un modelo que se quedaba corto respecto a lo que describen su página y su referencia, igual en el navegador, en la API y en el servidor MCP. Cada una calcula ahora el modelo publicado y se prueba frente a un caso publicado, y la comprobación de paridad mantiene el navegador y la API en las mismas cifras. Los cálculos guardados almacenan entradas, así que se recalculan.
bldc-winding, parte del mismo cambio, tiene su propia entrada del 2026-10-11.Los valores cambian en:
cable-shield-effectiveness(impedancia de transferencia R_T + jωM_T y eficacia de blindaje frente a la impedancia de la línea, Hähner & Mund 1998: 64,95 dB con los valores predeterminados, antes 30,97 dB frente a 1 Ω, sin suelo en 0 dB),ferrite-bead(R_DC + (R_AC ∥ L ∥ C) de Analog Devices AN-1368, anclada a la impedancia introducida a 100 MHz, y la pérdida de inserción compleja entre fuente y carga: la ferrita predeterminada de 600 Ω da 94,9 Ω a 1 GHz, antes 1897 Ω),mosfet-operating-point(el punto de funcionamiento sobre la recta de carga del drenador, Sedra & Smith 7e sección 5.3; consulte la entrada incompatible siguiente),bldc-motor(el empuje a la velocidad en que se equilibran los pares del motor y de la hélice, Drela 2007, con C_P 0,047: 140,91 g con los valores predeterminados, antes 80,43 g a un 75 % fijo de la velocidad en vacío),ethernet-cable(pérdida de inserción del cable según ANSI/TIA-568-C.2 a la frecuencia de señalización de cada PHY, 31,25, 62,5 o 400 MHz: 7,69 dB con los valores predeterminados, antes 16,5 dB; la categoría 8 es un canal de 30 m a cualquier velocidad),radar-range-equation(el alcance con la SNR que exige la ecuación de Albersheim para P_d y P_fa: 35,23 km con los valores predeterminados, antes 74,96 km con SNR = 1, ysnrAtMaxRangeinforma de esa SNR, donde valía 0),bldc-efficiency(pérdida en el cobre I²·R con la resistencia entre terminales, Drela 2007 y el maxon Formulae Handbook: 4,500 W con los valores predeterminados, antes 6,750 W),bldc-thermal(la resistencia del devanado a la temperatura que alcanza, maxon Formulae Handbook sección 9.2, con la misma pérdida en el cobre: 207,61 °C con los valores predeterminados, antes 184,47 °C; consulte la entrada incompatible siguiente),class-d-efficiency(conducción a través de los FET que llevan la carga a la vez, I²·R_DS(on)·N/2: 0,625 W con los valores predeterminados, antes 1,250 W),motor-driver-power(dos FET en conducción y uno en conmutación dura, TI SLVA504A: un puente de 0,1440 W con los valores predeterminados, antes 0,2088 W), ycoax-impedanceyvia-calculator(Z₀ a partir de η₀/2π = 59,9585 Ω con las constantes de CODATA 2018, donde usaban 60: 47,990 Ω y 35,2243 Ω con los valores predeterminados, antes 48,023 Ω y 35,2487 Ω).Entradas opcionales nuevas, añadidas; una solicitud que omite una obtiene su valor predeterminado:
transferInductance(nH/m, 0,159155, que reproduce la impedancia de transferencia anterior con 10 mΩ/m) ylineImpedance(Ω, 50) encable-shield-effectiveness;beadInductance(µH, 1,208),parasiticCapacitance(pF, 1,678) ysourceImpedance(Ω, 0) enferrite-bead;biasMode(0 resuelve la recta de carga, 1 toma V_DS tal como se introduce; valor predeterminado 0) enmosfet-operating-point;pd(0,9),pfa(1×10⁻⁶) ypulses(1, integrados de forma no coherente) enradar-range-equation;transitionTime(ns, 50) enmotor-driver-power.Salidas nuevas:
vdsOperatingenmosfet-operating-point,loadedRpmyloadedCurrentenbldc-motor, ygateDriveLoss(2·Q_g·V·f, disipada en el controlador de puerta) enmotor-driver-power.Claves conservadas, con significados que ahora coinciden con sus etiquetas: el
conductionLossdemotor-driver-poweres la pérdida de una posición en conducción (I²·R),switchingLossla del único FET en conmutación dura,totalLossPerFetel FET más caliente, yefficiencyse toma frente a V·I·D e incluye la excitación de puerta. La entradaphaseResistancedebldc-efficiencyybldc-thermalse etiqueta como la resistencia entre terminales, medida entre dos bornes, que es lo que siempre fue.La pérdida de inserción de la categoría 8 usa los coeficientes provisionales que el modelo de canal de IEEE 802.3bq cita para la categoría 8 de TIA (borrador d0.7: 1,8·√f + 0,005·f + 0,25/√f dB por 100 m), y cada resultado de la categoría 8 lo indica, ya que no se dispone de la tabla publicada de TIA-568.2-D.
Rechazos y advertencias nuevos:
ferrite-beadrechaza una impedancia a 100 MHz que sus L y C no pueden alcanzar, indicando la mayor posible;radar-range-equationrechaza una P_d que ningún detector alcanza con esa P_fa y advierte fuera del rango declarado por Albersheim;cable-shield-effectivenessadvierte cuando el cable mide más de un sexto de longitud de onda o el acoplamiento deja de ser débil;ethernet-cableadvierte cuando una categoría se evalúa más allá de la frecuencia para la que está especificada.mosfet-operating-point resuelve la recta de carga por defecto; bldc-thermal devuelve null donde el devanado entra en fuga térmica
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-pointresuelve ahora por defecto la ley cuadrática junto con la recta de carga del drenador V_DS = V_DD − I_D·R_D (Sedra & Smith, Microelectronic Circuits, 7.ª ed., sección 5.3, ejemplo 5.5), de modo quevddyrdLoadfijan el punto de funcionamiento y unvdsintroducido ya no lo hace. Con los valores predeterminados da 11,96 mA en la región de tríodo con V_DS de 0,0401 V, donde daba 450 mA, que la carga de 1 kΩ no puede dejar pasar desde 12 V. Un cliente que dependa delvdsintroducido debe enviarbiasMode: 1, que conserva el cálculo anterior y advierte cuando V_DS + I_D·R_D se aleja más de un 1 % de V_DD. La nueva salidavdsOperatingda la V_DS del punto de funcionamiento en cualquiera de los dos modos.bldc-thermalincluye ahora el aumento de la resistencia del devanado con la temperatura (maxon Formulae Handbook, 2012, sección 9.2). Donde α·Rθ·R₂₅·I² ≥ 1 no hay estado estacionario: la pérdida en el cobre crece con la temperatura más deprisa de lo que la evacúa el camino térmico. AhítempRise,steadyStateTemp,thermalMarginyhotResistanceson null, con una advertencia que indica la corriente por debajo de la cual el devanado se estabiliza; antes eran números (467,97 °C a 25 A en el motor predeterminado, que ahora entra en fuga por encima de 23,21 A). Un cliente que los lea como números debe tratar null.deratedCurrentytimeToLimitson siempre números.El
timeToLimitdebldc-thermales null, con una advertencia, cuando la corriente de pico estabiliza el devanado por debajo de su límite, de modo que nunca se alcanza. Antes era el valor centinela 9999 s, que se leía como un tiempo real.bldc-winding: el factor de llenado cuenta ambos lados de la bobina, y el factor de devanado de la estrella de ranuras
POST /api/py/v1/calculate (bldc-winding)POST /api/py/v1/calculate/batchPOST /api/py/v1/calculate/solveMCP run_calculationrftools-io SDK
fillFactorcuenta ahora ambos lados de bobina en cada ranura, 2·N·A_wire/A_slot (Pyrhönen, Jokinen & Hrabovcová, Design of Rotating Electrical Machines, 2008, sección 2.9): una bobina en cada diente pone dos lados de bobina en cada ranura. Antes contaba uno, así que todo factor de llenado se duplica. Ya no se limita al 100 %: un devanado que no cabe devuelve su cifra real, con las advertencias del 75 % y el 90 % como antes.windingFactortoma su factor de distribución del método de la estrella de ranuras, k_d = sin(π/6)/(z·sin(π/(6z))) para q = S/(3P) = z/n en forma irreducible (Bianchi & Dai Pré, 2006). Era 1 para todo q que se redondeaba a 1, así que los devanados de ranura fraccionaria daban de más: 12 ranuras y 14 polos dan ahora 0,93301 (antes 0,96593), 18 ranuras y 16 polos 0,94521 (antes 0,98481). Los devanados de ranura entera no cambian.turnsPerCoil,actualKv,deltaEquivKvyphaseResistancelo siguen: el devanado predeterminado de 935 Kv se queda en 4 vueltas y alcanza 1027,61 Kv (antes 992,59), y 920 Kv en un estátor de 23 × 10 mm requiere 6 vueltas (antes 5).El
maxCurrentpredeterminado de la calculadora es 5 A (antes 10 A), de modo que su devanado predeterminado del EMAX MT2213 se puede construir: 4 vueltas de AWG 18 con un 47,24 % de llenado. A 10 A necesita AWG 14 y un 119,44 %. La API no aplica valores predeterminados, así que una solicitud que envíamaxCurrentse calcula con el valor enviado.Treinta calculadoras corregidas según la relación que citan
POST /api/py/v1/calculatePOST /api/py/v1/calculate/batchPOST /api/py/v1/calculate/solveMCP run_calculationrftools-io SDK
Cada calculadora de las siguientes calculaba algo distinto de su referencia citada, igual en el navegador, en la API y en el servidor MCP. Cada una calcula ahora la relación de la referencia y se prueba frente a un valor publicado. Los cálculos guardados almacenan entradas, así que se recalculan.
Los valores cambian en:
equalizer-q-factor(ancho de banda en octavas con Q constante),capacitor-code(un dígito multiplicador 8 significa ×0,01 y 9 significa ×0,1),opamp-gain(el ancho de banda es GBW dividido entre la ganancia de ruido),coax-impedance(corte TE11 sobre la circunferencia media),h-bridge-selection(conducen dos FET a la vez),bldc-winding(el factor √3 corresponde a la estrella; nuevos valores predeterminados de un motor 12N14P real),speaker-crossover(inductores de 2.º orden √2·R/ω_c, el doble del valor anterior, también en la exportación a KiCad),esd-tvs-diode(el nivel de IEC 61000-4-2 toma el primer pico de la norma, 3,75 A/kV),common-mode-choke(una impedancia en serie compleja en un sistema de 50 Ω/50 Ω),uart-baud-rate(la paridad mark y space cuenta un bit),bldc-motor(empuje estático C_T·ρ·n²·D⁴ con C_T 0,11),resistor-color-code(naranja ±0,05 %, amarillo ±0,02 %; se rechaza una banda de tolerancia blanca),pt100-resistance(la C de IEC 60751 por debajo de 0 °C, y la pendiente completa),torque-units,energy-unitsytorque-unit-converter(factores exactos de NIST SP 811),via-thermal-resistance(capacidad de corriente a partir del ajuste de IPC-2221),thermal-via-array(el barril metalizado es de cobre sea cual sea el relleno),stackup-builder(L3 resuelta como stripline, L1 con el espesor de cobre, el cobre contado en el total),coplanar-waveguide(el CPW con plano de tierra sigue siendo finito para pistas anchas),i2c-pullup(V_OL es 0,2·V_DD a 2 V o menos),vibration-phase-noise(el término aleatorio cae con el desplazamiento; la desviación es la de pico),inrush-current-limiter(el pico en arranque en frío es V/R_cold),shielding-effectiveness(la pérdida por reflexión incluye η₀; se añaden las reflexiones múltiples),ethernet-cable(la categoría 5e a 10 Gb/s no cumple),ground-plane-impedance(inductancia µ₀·h·l/w; resistencia en CA por una sola cara) yminimum-conductor-spacing(tabla 6-1 de IPC-2221B por banda, con sus tasas por voltio por encima de 500 V).Entradas opcionales nuevas:
separationenground-plane-impedance(mm, valor predeterminado 1) ytempRiseenvia-thermal-resistance(°C, valor predeterminado 10). Una solicitud que las omite obtiene el valor predeterminado, que reproduce los ejemplos resueltos publicados.Salidas nuevas:
hotRestartInrusheninrush-current-limiterymultipleReflectionLossenshielding-effectiveness.Las salidas que no tienen valor se devuelven ahora como null con una advertencia, donde antes eran un número: la longitud de onda guiada y las velocidades de fase y de grupo de
waveguide-cutoffpor debajo del corte, y el ancho destackup-builderpara una impedancia objetivo que la capa no puede alcanzar.comparator-hysteresisypcb-trace-tempsolo cambian sus etiquetas y la fórmula declarada: no cambia ninguna cifra.POST /api/py/v1/calculate/solverechaza ungridmás fino que 1×10⁻¹² de la magnitud del rango con un rechazogrid400, antes de cualquier evaluación y sin cobro. Una rejilla así podía retener una solicitud hasta agotar el tiempo.radiated-emission-estimate: margen frente a CISPR 32 clase B, null donde no fija límite
POST /api/py/v1/calculate (radiated-emission-estimate)POST /api/py/v1/calculate/batchMCP run_calculationrftools-io SDK
El margen se toma ahora frente al límite de CISPR 32 clase B a la distancia de medición: tablas A.4 y A.5, la fila de 3 m por debajo de √30 m y la de 10 m por encima hasta 1 GHz, las filas de promedio a 3 m de 1 a 6 GHz, 20 dB/década desde la distancia tabulada y el límite más bajo en un borde de banda. Antes era un valor fijo de 40 dBµV/m a cualquier frecuencia y distancia.
Por debajo de 30 MHz y por encima de 6 GHz, CISPR 32 no fija límite de emisión radiada, así que
margines null ahí, con una advertencia. Antes era un número. Un cliente que leamargincomo número debe tratar null.El campo es la estimación de lazo pequeño en espacio libre, ahora con la constante exacta π·µ₀/c. Una medición sobre un plano de tierra puede dar hasta 6 dB más, como indica la página.
filter-designer y seis calculadoras de RF corregidas
POST /api/py/v1/calculateMCP run_calculationrftools-io SDK
filter-designer: los valores del prototipo de Chebyshev eran erróneos a partir del orden 4 (g3 1,5733, ahora 2,3661), un Butterworth de primer orden daba g1 = 1 (ahora 2), y los valores de los elementos del paso banda eran diez veces demasiado pequeños con Q = 10. Los valores se calculan ahora, no se tabulan.waveguide-cutoff,free-space-path-loss,rf-link-budget,fresnel-zone,link-marginyradar-range-equationusan la velocidad exacta de la luz, no 3×10⁸: las longitudes se desplazan alrededor de un 0,07 % y la pérdida de trayecto 0,006 dB.radar-range-equationusa además la constante de Boltzmann exacta.planar-spiral-inductorrechaza un diámetro interior igual o superior al exterior en lugar de devolver NaN.El 2026-10-05 y el 2026-10-06 se añadieron catorce calculadoras, incluida la nueva categoría
iot; consulte el catálogo conGETolist_calculatorspara verlas.Impedancia de PDN: un modelo de planos convergente, un puerto derivado y dos parámetros nuevos
POST /api/py/v1/jobs (pdn_impedance)POST /api/py/v1/jobs/estimateMCP simulate_pdn_impedancerftools-io SDK
Si se omiten
portX_mmyportY_mm, el puerto se coloca ahora en el punto de un tercio de la placa (a/3, b/3) en lugar de en su centro. El centro es un nulo de todos los modos de cavidad de índice impar, así que las primeras resonancias nunca aparecían en una ejecución con los valores predeterminados. Una solicitud que indica el puerto obtiene el puerto que pidió.Dos parámetros opcionales:
portSize_mm(valor predeterminado 1 mm, 0,25–20), el lado del cuadrado por el que la corriente del CI entra en los planos, yboardInductance_nh(valor predeterminado 1 nH, 0–20), la inductancia entre el regulador y los planos, que estaba fija en 1 nH. Se acepta un puerto que sobresale de un borde de la placa y se modela con su imagen; se rechaza un puerto cuyo centro queda fuera de la placa o que es más grande que la placa.Los resultados cambian. La suma modal del plano se truncaba en función de
freqMax_hzy, con un puerto puntual, nunca convergía, así que los resultados se movían con el barrido. Ahora converge y no depende del barrido por debajo del primer modo. En el puerto predeterminado, la inductancia de dispersión del plano es de unos 1,5 nH donde daba unos 0,2 nH, de modo que la resonancia serie del plano desnudo baja de unos 550 a unos 210 MHz, y cambian los conjuntos de condensadores recomendados. Los resultados anteriores no se recalculan.El veredicto y
summary.maxZPdnDbabarcan ahora toda la banda de desacoplo, que termina en 0,8 × el primer modo de cavidad de la placa, con el peor caso refinado entre los puntos de la rejilla. Campos de resultado nuevos:summary.band,summary.worstHz,summary.unreachable,resonances[].portCoupling, y el puerto, el tamaño del puerto y la inductancia de la placa usados, enparams. Se conservan todos los campos existentes.Una llamada de resolución para un valor objetivo: buscar una entrada de la calculadora para una salida objetivo
POST /api/py/v1/calculate/solve
POST /api/py/v1/calculate/solvehalla el valor de una entrada de la calculadora que lleva una de sus salidas a un objetivo —el ancho de pista que da 50 Ω, la separación que da una impedancia diferencial objetivo— y lo devuelve con el resultado directo exactamente en ese valor:values,warnings,errorsyprovenance, exactamente lo que/calculatedevuelve para esas entradas. Una sola llamada contabilizada sustituye a las varias llamadas directas que un cliente gastaría buscando a mano.La búsqueda recorre los límites declarados de la entrada, acotados por un
rangeopcional; una entrada sin límite declarado necesita uno. Ungridopcional redondea el valor devuelto a su múltiplo más cercano dentro del rango, junto a la solución sin redondear. Un objetivo que la búsqueda no puede alcanzar se responde igualmente con éxito, conreached: falsey el valor más cercano encontrado, y se cobra igualmente. Los rechazos —una calculadora desconocida, un nombre de entrada o salida que la calculadora no declara, un valor no finito, un rango ausente en una entrada sin límites— no cuestan nada, como en cualquier otra ruta de calculadora.El
Client.solve()del SDK de Python (rftools-io0.4.0) y la herramientasolve_calculationdel servidor MCP (2.2.0) ofrecen la misma llamada.Una cuota agotada en las rutas de calculadoras es 402, no 401
POST /api/py/v1/calculatePOST /api/py/v1/calculate/batch
Las rutas de calculadoras respondían 401 «Invalid or quota-exceeded API key» tanto a una clave no válida como a una cuota agotada, así que un script no podía distinguir una clave errónea de un mes de mucho uso. Una cuota agotada es ahora 402, como ya respondía la ruta de trabajos, con
errorKind: "rate_limited",reason,limit,used,resetAt,upgradeUrl,overageUrly una cabeceraRetry-After.401 significa ahora solo que la clave falta, está mal formada, es desconocida o está revocada, y nunca menciona una cuota. Una solicitud sin ninguna clave recibe un 401 con una
keyUrldonde obtener una clave gratuita.Una llamada se comprueba antes de contarse: una calculadora desconocida (404) o una entrada que no es un número finito (400) no cuestan nada, y un cálculo que falla se devuelve. En un lote, solo se cuentan los elementos que superan esas comprobaciones, y se devuelven los elementos cuyo cálculo falla. Base su lógica en el estado y en
errorKind, nunca en el texto del mensaje.La cuota mensual pertenece a la cuenta y la comparten todas sus claves
POST /api/py/v1/calculatePOST /api/py/v1/calculate/batchPOST /api/py/v1/jobs
Antes, cada clave tenía su propia cuota mensual, de modo que una cuenta con varias claves podía gastar su cuota una vez por clave. Ahora la cuota es de la cuenta: las llamadas de cada una de sus claves, incluidas las revocadas, se descuentan de una única cifra mensual, que se restablece al inicio de cada mes natural en UTC.
Una cuenta con una sola clave no nota ninguna diferencia. Las llamadas se siguen atribuyendo a la clave que las hizo, y el panel y
GET /api/py/v1/usagelas enumeran por clave.Un endpoint de uso, y cabeceras de uso en cada respuesta contabilizada
GET /api/py/v1/usageX-Usage-AllowanceX-Usage-UsedX-Usage-ResetX-Usage-Overage
GET /api/py/v1/usageresponde a una clave (X-API-KeyoAuthorization: Bearer rfc_…) o a una sesión iniciada con el plan, la cuota, lo usado y lo que queda, cuándo se restablece, el estado del excedente y las llamadas atribuidas a cada una de las claves de la cuenta. Consultarlo nunca se cuenta.Cada respuesta contabilizada lleva
X-Usage-Allowance,X-Usage-Used(incluida esa llamada) yX-Usage-Reset, yX-Usage-Overagecuando se contó excedente. Los navegadores pueden leerlas.Cada resultado indica cómo se calculó
POST /api/py/v1/calculatePOST /api/py/v1/calculate/batchGET /api/py/v1/jobs/{jobId}
Los resultados de las calculadoras y cada elemento de un lote llevan un objeto
provenancecon nueve miembros:method,version,formulaRef,assumptions,validRange,computedAt,inputs,seedyelapsedSeconds. Los resultados de los trabajos ya llevabanprovenance; ganaformulaRef,assumptions,validRangeycomputedAten lugar de un segundo objeto, y suversionse escribeworker@<revision>en lugar de la revisión sola.Una entrada fuera del rango para el que está indicada una calculadora se calcula igualmente:
validRangela nombra y se añade una advertencia. Un resultado guardado antes de este cambio conserva los miembros que tenía; trate uno ausente como desconocido.Los programas pueden obtener una clave mediante la autorización de dispositivo
POST /api/py/v1/oauth/device/codePOST /api/py/v1/oauth/device/token/device/
Un programa sin navegador propio puede obtener una clave sin que su usuario la pegue (autorización de dispositivo de OAuth 2.0, RFC 8628). Pide un código a
/oauth/device/code, muestra a su usuario el código y la dirección https://rftools.io/device/, y consulta/oauth/device/tokencon el intervalo que recibió. Una vez que el usuario inicia sesión y aprueba el código, la siguiente consulta devuelve una clave de API normal, una sola vez.La clave se contabiliza, se lista y se puede revocar como cualquier otra, y cuenta para el límite de claves de la cuenta.
Enlaces de clave para clientes, y etiquetas en las claves
POST /api/py/v1/apikeys/dashboard/?newKey=1
POST /api/py/v1/apikeysacepta un cuerpo opcional{"label", "client"}y devuelve ambos; sin cuerpo funciona como antes. Un cliente puede enviar a su usuario ahttps://rftools.io/dashboard/?newKey=1&client=<clientId>para crear una clave etiquetada para él, que se muestra una sola vez.Los rechazos nombran el límite y la manera de superarlo
429 responses402 from POST /api/py/v1/jobsAuthorization: Bearer rfc_…
El 429 por minuto lleva
errorKind: "rate_limited",limit,windowSecondsyupgradeUrljunto adetail, como cualquier otro rechazo lleva suerrorKind. El 402 de la ruta de trabajos por cuota agotada ganareason,limit,used,upgradeUrlyoverageUrl, y el 402 por cuota agotada de los modos de resolución defdtd_sparamllevareason: "solve_mode". Los campos existentes no cambian.Las rutas de calculadoras aceptan una clave como
Authorization: Bearer rfc_…además de comoX-API-Key, como ya hacían las rutas de trabajos.
La referencia completa es la documentación de la API; la descripción legible por máquina son el playground de OpenAPI y el documento OpenAPI.