Tabla de contenido:

¡Cómo lograr cualquier resistencia / capacitancia usando componentes que ya tiene !: 6 pasos
¡Cómo lograr cualquier resistencia / capacitancia usando componentes que ya tiene !: 6 pasos

Video: ¡Cómo lograr cualquier resistencia / capacitancia usando componentes que ya tiene !: 6 pasos

Video: ¡Cómo lograr cualquier resistencia / capacitancia usando componentes que ya tiene !: 6 pasos
Video: Resistencias Explicadas 2024, Noviembre
Anonim
¡Cómo lograr cualquier resistencia / capacitancia usando componentes que ya tiene!
¡Cómo lograr cualquier resistencia / capacitancia usando componentes que ya tiene!

¡Esta no es solo otra calculadora de resistencia equivalente en serie / paralelo! Este programa calcula cómo combinar resistencias / condensadores que tiene actualmente para lograr un valor objetivo de resistencia / capacitancia que necesita.

¿Alguna vez ha necesitado una resistencia o condensador específico que no tiene o que no existe? ¡No tener miedo! Probablemente pueda hacer ese valor específico de resistencia o capacitancia utilizando componentes que ya tiene. En lugar de resolver un gran problema de optimización multivariable con millones de combinaciones diferentes, ¡use este programa!

Simplemente seleccione la resistencia o el condensador, ingrese el valor objetivo, ingrese el número máximo de componentes que le gustaría usar, ingrese una lista de los valores de los componentes que tiene y haga clic en calcular. El programa escupirá qué componentes usar y cómo conectarlos para lograr su valor objetivo.

Para probar la calculadora, visite esta aplicación web.

Para ver el código fuente, visite este repositorio de Github.

¡Hágame saber si tiene alguna sugerencia para mejorar aún más la usabilidad de esta herramienta de diseño!

Paso 1: antecedentes

Fondo
Fondo

Esta aplicación web se desarrolló por necesidad. Hay muchos circuitos diferentes que construyo que exigen una resistencia o condensador muy específico. Muchas veces, no tengo una resistencia o un condensador con ese valor específico. ¡A veces ni siquiera fabrican un componente con ese valor único! En lugar de renunciar o conformarme con algo que no es ideal, decidí escribir un programa para ver todas las combinaciones posibles de resistencias (todos los valores posibles y si están en serie o en paralelo) y devolver la mejor combinación.

Al diseñar el circuito para mi órgano como parte de mi Proyecto Instructable Batalla de Bandas, tuve que intentar calcular a mano la mejor combinación de condensadores para lograr una frecuencia específica. Este proceso fue increíblemente tedioso y finalmente me di por vencido y fui con combinaciones de condensadores que producían cualquier cantidad de frecuencia audible. Ahora, con esta aplicación web, puedo diseñar mi órgano para una frecuencia específica y sintonizarlo con las notas de un teclado. La siguiente ecuación se utiliza para calcular la frecuencia específica y se analiza en el otro proyecto Instructables.

f = 1 / (0,693 × C × (R1 + 2 × R2))

Usando esta ecuación donde R1 = 100 kOhm y R2 = 10 kOhm, calculé que un capacitor de 27.33 nF producirá una nota A4 (frecuencia 440 Hz). Usando mi programa, pude calcular un valor de capacitancia equivalente dentro de.001 nF (mucho menos que la tolerancia en un capacitor estándar) que puedo crear usando capacitores que ya tenía por ahí. La salida y la configuración resultantes se describen a continuación. Ahora puedo afinar mi órgano de manera mucho más eficiente y efectiva a las frecuencias exactas de las notas estándar. Ojalá hubiera hecho esto para empezar. Mi canción de demostración en el órgano probablemente hubiera sonado mucho mejor.

Valor más cercano: 27,329 nF Diferencia: 0,001 nFC Configuración del condensador: C0 = 0,068 nF || C1 = 30 nF + C2 = 300 nF

Ecuaciones de equivalencia de condensador de resistencia

Como referencia, a continuación se muestran las ecuaciones de equivalencia para combinar resistencias y condensadores en un circuito.

  • Resistencias en serie (R1 + R2): Req = R1 + R2
  • Resistencias en paralelo (R1 || R2): Req = 1 / (1 / R1 + 1 / R2)
  • Condensadores en serie (C1 + C2): Ceq = 1 / (1 / C1 + 1 / C2)
  • Condensadores en paralelo (C1 || C2): Ceq = C1 + C2

Paso 2: Entradas

Entradas
Entradas

Hay 4 entradas que deberá proporcionar:

  1. Ya sea que esté calculando un valor para una resistencia o un condensador.
  2. El valor objetivo de resistencia o capacitancia y las unidades.
  3. La cantidad máxima de componentes que le gustaría usar para lograr el valor objetivo (es decir, no me gustaría usar más de 3 resistencias para lograr mi valor de resistencia objetivo).
  4. La lista de valores para las resistencias / condensadores que tiene actualmente. Estos valores deben estar en las mismas unidades que su valor objetivo (es decir, si su valor objetivo era 110 nF, todos sus valores deben proporcionarse en nF).

Paso 3: Resultado

Resultado
Resultado

Obtendrá 3 salidas para su resultado:

  1. Valor más cercano: el valor de resistencia / capacitancia más cercano que pudo lograr con sus parámetros.
  2. Diferencia: qué tan lejos estaba su valor más cercano de su valor objetivo.
  3. Configuración de resistencia / condensador: una lista de valores de las resistencias / condensadores que se utilizarán y su configuración.

Paso 4: Comprensión de su resultado

Entender su resultado
Entender su resultado
Entender su resultado
Entender su resultado

La salida de la configuración utiliza una notación estándar. "+" significa que los componentes están en serie y "||" significa que los componentes están en paralelo. Los operadores tienen la misma precedencia y son asociativos de izquierda a derecha, lo que significa que agrupa los términos comenzando por la izquierda y moviéndose hacia la derecha.

Por ejemplo, observe el siguiente resultado:

Configuración de resistencia: R0 = 15 ohmios + R1 = 470 ohmios || R2 = 3300 ohmios + R3 = 15000 ohmios

Si sigue las pautas discutidas anteriormente, puede ver que esto es equivalente a la siguiente ecuación e imagen de arriba.

((R0 + R1) || R2) + R3

Paso 5: más proyectos

Para más proyectos, visite mis páginas:

  • https://dargen.io/
  • https://github.com/mjdargen
  • https://www.instructables.com/member/mjdargen/

Paso 6: código fuente

Para ver el código fuente, visite este repositorio de Github o vea el código JavaScript a continuación.

/* --------------------------------------------------------------- */

/ * Scripting de calculadora r / c * / / * --------------------------------------- ------------------------- * / var valor_más_cercano; // valor más cercano hasta ahora var Closer_diff = 1000000.00; // diff de val y target var más cercano = ; // matriz que detalla los valores de los componentes var ser_par_config = ; // matriz detallando serie / paralelo var outputStr = ""; function calculatorClick () {// borra los valores globales para cada nuevo clic más cercano_val = 0; más cercano_diff = 1000000.00; más cercano = ; ser_par_config = ; var resultDisplay = document.getElementById ("resultRow"); var exampleDisplay = document.getElementById ("exampleRow"); var calcOutput = document.getElementById ("calcOutput"); var targetTextObj = document.getElementById ('targetText'); var numCompTextObj = document.getElementById ('numCompText'); var compValsTextObj = document.getElementById ('compValsText'); var target = parseFloat (targetTextObj.value); var numComp = parseInt (numCompTextObj.value); var compValsStr = compValsTextObj.value; var compVals = ; compVals [0] = ""; var i = 0; var errFlag = 0; // error al analizar el valor objetivo if (isNaN (objetivo)) {outputStr = "Error comprobar la entrada 'Valor objetivo'!"} // error al analizar el número de componentes else if (isNaN (numComp)) {outputStr = "Comprobación del error Entrada 'Número de componentes'! "} // si no hay error en target o numComp else if (! IsNaN (target) &&! IsNaN (numComp)) {while (compValsStr.indexOf (", ")! = -1) {var coma = compValsStr.indexOf (","); var newInt = parseFloat (compValsStr.substring (0, coma)); // error al analizar la lista de valores del componente, establecer bandera if (isNaN (newInt)) {errFlag = 1; rotura; } compValsStr = compValsStr.substring (coma + 1, compValsStr.length); compVals = newInt; i ++; } var newInt = parseFloat (compValsStr); // error al analizar la lista de valores del componente, establecer bandera if (isNaN (newInt)) {errFlag = 1; } compVals = newInt; if (errFlag == 0) {if (document.getElementById ("resRadio"). comprobado) {resistor (target, numComp, compVals); } else if (document.getElementById ("capRadio"). comprobado) {capacitor (target, numComp, compVals); }} // error al analizar la lista de valores del componente else {outputStr = "Error al comprobar la entrada 'Lista de valores del componente'"}} calcOutput.innerHTML = outputStr; resultDisplay.style.display = "bloque"; exampleDisplay.style.display = "flex"; // desplácese hacia abajo hasta la ventana de resultados.scrollTo (0, exampleDisplay.scrollHeight); } / * Recupera e imprime la mejor configuración de resistencia * objetivo - valor de resistencia objetivo * numComp - número total de resistencias que se pueden usar para lograr el valor objetivo * compVals - matriz de valores de resistencia * / función resistor (objetivo, numComp, compVals) { // longitud de los valores de resistencia var num_res = compVals.length; // ejecutar a través de todo el número posible de componentes para (var i = 1; i <= numComp; i ++) {var data = ; resCombination (compVals, num_res, i, 0, data, target); } var unidades = document.getElementById ("unidad_seleccionada"). valor; // imprimir resultados outputStr = "Valor más cercano:" + valor_más cercano.toFixed (3) + "" + unidades + ""; outputStr + = "Diferencia:" + más cercana_diff.toFixed (3) + "" + unidades + ""; outputStr + = "Configuración de resistencia:"; for (var i = 0; i <numComp; i ++) {if (i <longitud más cercana) {salidaStr + = "R" + i + "=" + más cercana + "" + unidades + ""; if (i + 1 <longitud más cercana) {if (ser_par_config [i + 1]) outputStr + = "||"; else outputStr + = "+"; }} más romper; }} / * Calcula la mejor combinación de resistencias para lograr un valor objetivo. * res - matriz de entrada de valores de resistencia * num_res - tamaño de la matriz de entrada de valores de resistencia * num_comb - número de resistencias permitidas * índice - índice de comb * comb - matriz de combinación actual * objetivo - el valor objetivo * Sin valor de retorno: pasa la mejor combinación actual a valores globales * / function resCombination (res, num_res, num_comb, index, comb, target) {// la combinación actual está completa if (index == num_comb) {var ser_par_size = Math.pow (2, núm_comb); // 2 ^ (número de componentes) var ser_par = ; // matriz bool especificando serial o paralelo para cada componente var calc; // valor de resistencia equivalente calculado // paso a través de todas las configuraciones posibles en serie / paralelo de la combinación actual para (var j = 0; j k) & 1; } // hacemos los cálculos para la combinación basados en el combo serie / paralelo para (var k = 0; k <num_comb; k ++) {// primer número, solo agregue if (k == 0) calc = comb [k]; // cero significa serie, agregar valores de resistencia else if (! ser_par [k]) calc + = comb [k]; // uno significa paralelo, inverso de la suma de los recíprocos else if (ser_par [k]) calc = (calc * comb [k]) / (calc + comb [k]); } // verifica si la diferencia es menor que la mejor anterior if (Math.abs (calc - target) <más cercano_diff) {// es menor, así que actualiza los valores globales más cercano_val = calc; más cercano_diff = Math.abs (calc - objetivo); // limpiar a cero para (var k = 0; k <num_comb; k ++) {más cercano [k] = 0; } // actualizar el valor más cercano & series / matrices paralelas para (var k = 0; k <num_comb; k ++) {más cercano [k] = comb [k]; ser_par_config [k] = ser_par [k]; }}} return 0; } // llamar de forma recursiva y reemplazar el índice con todos los valores posibles para (var i = 0; i = num_comb-index; i ++) {comb [index] = res ; resCombination (res, num_res, num_comb, index + 1, comb, target); }} / * Recupera e imprime la mejor configuración de condensador * objetivo - valor de capacitancia objetivo * numComp - número total de condensadores que se pueden usar para alcanzar el valor objetivo * compVals - matriz de valores de condensador * / función condensador (objetivo, numComp, compVals) {// longitud de los valores de capacitancia var num_cap = compVals.length; // ejecutar todos los posibles componentes para (var i = 1; i <= numComp; i ++) {var data = ; capCombination (compVals, num_cap, i, 0, data, target); } var unidades = document.getElementById ("unidad_seleccionada"). valor; // imprimir resultados outputStr = "Valor más cercano:" + valor_más cercano.toFixed (3) + "" + unidades + ""; outputStr + = "Diferencia:" + más cercana_diff.toFixed (3) + "" + unidades + ""; outputStr + = "Configuración del condensador:"; for (var i = 0; i <numComp; i ++) {if (i <longitud más cercana) {salidaStr + = "C" + i + "=" + más cercana + "" + unidades + ""; if (i + 1 <longitud más cercana) {if (ser_par_config [i + 1]) outputStr + = "||"; else outputStr + = "+"; }} más romper; }} / * Calcula la mejor combinación de condensadores para lograr un valor objetivo. * cap - matriz de entrada de valores de capacitores * num_cap - tamaño de matriz de entrada de valores de capacitores * num_comb - número de capacitores permitidos * índice - índice de comb * comb - matriz de combinación actual * objetivo - el valor objetivo * Sin valor de retorno: pasa la mejor combinación actual a valores globales * / function capCombination (cap, num_cap, num_comb, index, comb, target) {// la combinación actual está completa si (index == num_comb) {var ser_par_size = Math.pow (2, núm_comb); // 2 ^ (número de componentes) var ser_par = ; // matriz bool especificando serial o paralelo para cada componente var calc; // valor de capacitancia equivalente calculado // paso a través de todas las configuraciones posibles en serie / paralelo de la combinación actual para (var j = 0; j k) & 1; } // hacemos los cálculos para la combinación basados en el combo serie / paralelo para (var k = 0; k

Recomendado: