Taula de continguts:

Com aconseguir qualsevol resistència / capacitat mitjançant components que ja teniu: 6 passos
Com aconseguir qualsevol resistència / capacitat mitjançant components que ja teniu: 6 passos

Vídeo: Com aconseguir qualsevol resistència / capacitat mitjançant components que ja teniu: 6 passos

Vídeo: Com aconseguir qualsevol resistència / capacitat mitjançant components que ja teniu: 6 passos
Vídeo: Машинное обучение для разработчиков Java: переход на стек технологий ИИ. 2024, De novembre
Anonim
Com aconseguir qualsevol resistència / capacitat mitjançant components que ja teniu!
Com aconseguir qualsevol resistència / capacitat mitjançant components que ja teniu!

No es tracta només d’una calculadora de resistència equivalent en sèrie / paral·lel. Aquest programa calcula com combinar resistències / condensadors que actualment necessiteu per aconseguir un valor de resistència / capacitat objectiu que necessiteu.

Alguna vegada heu necessitat una resistència o condensador específic que no tingueu o que no existeixi? No tinguis por! Probablement podeu fer aquest valor específic de resistència o capacitat utilitzant components que ja tingueu. En lloc de resoldre un enorme problema d’optimització multivariable amb milions de combinacions diferents, utilitzeu aquest programa.

Simplement seleccioneu la resistència o el condensador, introduïu el valor objectiu, introduïu el nombre màxim de components que voleu utilitzar, introduïu una llista dels valors dels components que teniu i feu clic a Calcula. El programa escopirà quins components cal utilitzar i com connectar-los per assolir el valor objectiu.

Per provar la calculadora, visiteu aquesta aplicació web.

Per veure el codi font, visiteu aquest dipòsit de Github.

Feu-me saber si teniu suggeriments per millorar encara més la usabilitat d’aquesta eina de disseny.

Pas 1: antecedents

Antecedents
Antecedents

Aquesta aplicació web es va desenvolupar per necessitat. Hi ha molts circuits diferents que construeixo que requereixen una resistència o un condensador molt específics. Moltes vegades no tinc cap resistència ni condensador amb aquest valor específic. De vegades ni tan sols fan un component amb aquest valor únic. En lloc de renunciar o conformar-me amb alguna cosa menys que ideal, vaig decidir escriure un programa per examinar totes les combinacions possibles de resistències (tots els valors possibles i si són en sèrie o paral·lels) i retornar la millor combinació.

Quan vaig dissenyar el circuit per al meu orgue com a part del meu projecte instructiu Battle of the Bands, vaig haver d’intentar calcular manualment la millor combinació de condensadors per aconseguir una freqüència específica. Aquest procés va ser increïblement tediós i, finalment, vaig abandonar i vaig anar amb combinacions de condensadors que produïen qualsevol quantitat de freqüència sonora. Ara, amb aquesta aplicació web, puc dissenyar el meu òrgan per a una freqüència específica i sintonitzar-lo amb les notes del teclat. L'equació següent s'utilitza per calcular la freqüència específica i es discuteix en l'altre projecte Instructables.

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

Utilitzant aquesta equació on R1 = 100 kOhm i R2 = 10 kOhm, he calculat que un condensador de 27,33 nF produirà una nota A4 (freqüència 440 Hz). Amb el meu programa, vaig poder calcular un valor de capacitat equivalent a 0,001 nF (molt inferior a la tolerància d’un condensador estàndard) que puc crear amb condensadors que ja tenia al voltant. A continuació es descriu la sortida i la configuració resultants. Ara puc sintonitzar el meu òrgan amb molta més eficiència i eficàcia a les freqüències exactes de les notes estàndard. M’agradaria haver-ho fet per començar. La meva cançó de demostració a l'orgue probablement hauria sonat molt millor.

Valor més proper: 27,329 nF Diferència: 0,001 nConfiguració del condensador: C0 = 0,068 nF || C1 = 30 nF + C2 = 300 nF

Equacions d'equivalència de condensadors de resistències

A tall de referència, a continuació es mostren les equacions d'equivalència per combinar resistències i condensadors en un circuit.

  • Resistències en sèrie (R1 + R2): Req = R1 + R2
  • Resistències en paral·lel (R1 || R2): Req = 1 / (1 / R1 + 1 / R2)
  • Condensadors en sèrie (C1 + C2): Ceq = 1 / (1 / C1 + 1 / C2)
  • Condensadors en paral·lel (C1 || C2): Ceq = C1 + C2

Pas 2: entrades

Entrades
Entrades

Hi ha 4 entrades que haureu de proporcionar:

  1. Si esteu calculant un valor per a una resistència o un condensador.
  2. La resistència objectiu o el valor de la capacitat i les unitats.
  3. El nombre màxim de components que voldríeu utilitzar per assolir el valor objectiu (és a dir, no m'agradaria utilitzar més de 3 resistències per aconseguir el meu valor de resistència objectiu).
  4. La llista de valors dels resistors / condensadors que teniu actualment. Aquests valors haurien d’estar en les mateixes unitats que el valor objectiu (és a dir, si el valor objectiu era 110 nF, tots els vostres valors s’han d’indicar en nF).

Pas 3: Resultat

Resultat
Resultat

Obtindreu 3 resultats per al vostre resultat:

  1. Valor més proper: el valor de resistència / capacitat més proper que heu pogut aconseguir amb els vostres paràmetres.
  2. Diferència: fins a quin punt es trobava el valor més proper del valor objectiu.
  3. Configuració de resistències / condensadors: una llista de valors dels resistors / condensadors a utilitzar i la seva configuració.

Pas 4: entendre el vostre resultat

Comprensió del vostre resultat
Comprensió del vostre resultat
Comprensió del vostre resultat
Comprensió del vostre resultat

La sortida de configuració utilitza una notació estàndard. "+" significa que els components estan en sèrie i "||" significa que els components estan en paral·lel. Els operadors tenen la mateixa precedència i són associatius d’esquerra a dreta, cosa que significa agrupar termes començant per l’esquerra i movent-se cap a la dreta.

Per exemple, mireu el resultat següent:

Configuració de la resistència: R0 = 15 ohms + R1 = 470 ohms || R2 = 3300 ohms + R3 = 15000 ohms

Si seguiu les pautes comentades anteriorment, podreu veure que equival a la següent equació i imatge.

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

Pas 5: més projectes

Per obtenir més projectes, visiteu les meves pàgines:

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

Pas 6: codi font

Per veure el codi font, visiteu aquest dipòsit de Github o consulteu el codi JavaScript següent.

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

/ * scripting de la calculadora r / c * / / * --------------------------------------- ------------------------- * / var nearest_val; // valor més proper fins ara var nearest_diff = 1000000,00; // diferència de val i objectiu var més proper = ; // matriu que detalla els valors dels components var ser_par_config = ; // matriu que detalla la sèrie / paral·lel var outputStr = ""; function calculatorClick () {// esborra els valors globals per a cada nou clic proper_val = 0; proper_diff = 1000000,00; més proper = ; 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 en analitzar el valor de destinació if (isNaN (target)) {outputStr = "Error en comprovar l'entrada 'Valor de destinació'!}} // error en analitzar el nombre de components else if (isNaN (numComp)) {outputStr =" Revisió d'errors "Nombre de components" d'entrada! "} // else if no error in target or numComp else if (! IsNaN (target) &&! IsNaN (numComp)) {while (compValsStr.indexOf (", ")! = -1) {var coma = compValsStr.indexOf (","); var newInt = parseFloat (compValsStr.substring (0, coma)); // error en analitzar la llista de valors de components, establiu la marca if (isNaN (newInt)) {errFlag = 1; trencar; } compValsStr = compValsStr.substring (coma + 1, compValsStr.length); compVals = newInt; i ++; } var newInt = parseFloat (compValsStr); // error en analitzar la llista de valors de components, establiu la marca if (isNaN (newInt)) {errFlag = 1; } compVals = newInt; if (errFlag == 0) {if (document.getElementById ("resRadio"). marcat) {resistor (target, numComp, compVals); } else if (document.getElementById ("capRadio"). marcat) {condensador (target, numComp, compVals); }} // error en analitzar la llista de valors de components else {outputStr = "Error de comprovació de l'entrada 'Component Values List'!"}} calcOutput.innerHTML = outputStr; resultDisplay.style.display = "bloqueig"; exampleDisplay.style.display = "flex"; // desplaceu-vos cap avall fins al resultat window.scrollTo (0, exampleDisplay.scrollHeight); } / * Recupera i imprimeix la millor configuració de resistència * objectiu - valor de resistència objectiu * numComp: nombre total de resistències que es poden utilitzar per assolir val objectiu * compVals - matriu de valors de resistència * / resistència de funció (target, numComp, compVals) { // longitud dels valors de resistència var num_res = compVals.length; // executeu tot el nombre possible de components per a (var i = 1; i <= numComp; i ++) {var data = ; resCombination (compVals, num_res, i, 0, data, target); } var units = document.getElementById ("selected_unit"). valor; // imprimeix els resultats outputStr = "Valor més proper:" + valor_ més proper.toFixed (3) + "" + unitats + ""; outputStr + = "Diferència:" + proper_diff.toFixed (3) + "" + unitats + ""; outputStr + = "Configuració de la resistència:"; for (var i = 0; i <numComp; i ++) {if (i <nearest.length) {outputStr + = "R" + i + "=" + nearest + "" + units + ""; if (i + 1 <longitud més propera) {if (ser_par_config [i + 1]) outputStr + = "||"; else outputStr + = "+"; }} else break; }} / * Calcula la millor combinació de resistències per aconseguir un valor objectiu. * res - matriu d'entrada de valors de resistència * num_res - mida de matriu d'entrada de valors de resistència * num_comb - nombre de resistències permeses * índex - índex de pinta * pinta - matriu de combinació actual * objectiu - el valor objectiu * Sense valor de retorn: passa la millor combinació actual a valors globals * / funció resCombinació (res, num_res, num_comb, índex, pinta, objectiu) {// la combinació actual està completa si (índex == num_comb) {var ser_par_size = Math.pow (2, num_comb); // 2 ^ (nombre de components) var ser_par = ; // matriu boole que especifica sèrie o paral·lel per a cada component var calc; // valor de resistència equivalent calculat // passa per totes les sèries possibles / configuració paral·lela de la combinació actual per a (var j = 0; j k) & 1; } // feu els càlculs de la combinació basada en el combinat sèrie / paral·lel per a (var k = 0; k <num_comb; k ++) {// primer número, només cal afegir si (k == 0) calc = comb [k]; // zero significa sèries, afegiu valors de resistència else if (! ser_par [k]) calc + = comb [k]; // one significa paral·lel, invers de la suma de recíprocs else if (ser_par [k]) calc = (calc * comb [k]) / (calc + comb [k]); } // comproveu si la diferència és inferior a la millor anterior si (Math.abs (calc - objectiu) <dif_prop més proper) {// és menor, així que actualitzeu els valors globals proper_val = calc; proper_diff = Math.abs (calc - objectiu); // neteja a zero per a (var k = 0; k <num_comb; k ++) {més proper [k] = 0; } // actualitza les matrius de valors i sèries / paral·lels més propers per a (var k = 0; k <num_comb; k ++) {nearest [k] = comb [k]; ser_par_config [k] = ser_par [k]; }}} retorn 0; } // trucar i substituir recursivament l’índex per tots els valors possibles per a (var i = 0; i = num_comb-index; i ++) {comb [index] = res ; resCombinació (res, num_res, num_comb, índex + 1, pinta, objectiu); }} / * Recupera i imprimeix la millor configuració del condensador * objectiu: valor de la capacitat objectiu * numComp: nombre total de condensadors que es poden utilitzar per assolir el valor objectiu * compVals - matriu de valors del condensador * / condensador de funció (target, numComp, compVals) {// longitud dels valors de la capacitat var num_cap = compVals.length; // Executa tot el nombre possible de components per a (var i = 1; i <= numComp; i ++) {var data = ; capCombination (compVals, num_cap, i, 0, data, target); } var units = document.getElementById ("selected_unit"). valor; // imprimeix els resultats outputStr = "Valor més proper:" + valor_ més proper.toFixed (3) + "" + unitats + ""; outputStr + = "Diferència:" +iff_direcció.toFixed (3) + "" + unitats + ""; outputStr + = "Configuració del condensador:"; for (var i = 0; i <numComp; i ++) {if (i <nearest.length) {outputStr + = "C" + i + "=" + nearest + "" + units + ""; if (i + 1 <longitud més propera) {if (ser_par_config [i + 1]) outputStr + = "||"; else outputStr + = "+"; }} else break; }} / * Calcula la millor combinació de condensadors per aconseguir un valor objectiu. * cap - matriu d'entrada de valors del condensador * num_cap - mida de la matriu d'entrada de valors del condensador * num_comb - nombre de condensadors permesos * índex - índex de pinta * pinta - matriu de combinació actual * objectiu - el valor objectiu * Sense valor de retorn: passa la millor combinació actual a valors globals * / funció capCombination (cap, num_cap, num_comb, index, comb, target) {// La combinació actual està completa si (index == num_comb) {var ser_par_size = Math.pow (2, num_comb); // 2 ^ (nombre de components) var ser_par = ; // matriu boole que especifica sèrie o paral·lel per a cada component var calc; // valor de capacitat equivalent calculat // passeu per totes les sèries possibles / configuració paral·lela de la combinació actual de (var j = 0; j k) & 1; } // feu els càlculs de la combinació basats en el combinat sèrie / paral·lel per a (var k = 0; k

Recomanat: