Turinys:

Kaip pasiekti bet kokį pasipriešinimą/talpą naudojant jau turimus komponentus !: 6 žingsniai
Kaip pasiekti bet kokį pasipriešinimą/talpą naudojant jau turimus komponentus !: 6 žingsniai

Video: Kaip pasiekti bet kokį pasipriešinimą/talpą naudojant jau turimus komponentus !: 6 žingsniai

Video: Kaip pasiekti bet kokį pasipriešinimą/talpą naudojant jau turimus komponentus !: 6 žingsniai
Video: Part 1 - Tom Swift and his Electric Runabout Audiobook by Victor Appleton (Chs 1-12) 2024, Lapkritis
Anonim
Kaip pasiekti bet kokį pasipriešinimą/talpą naudojant jau turimus komponentus!
Kaip pasiekti bet kokį pasipriešinimą/talpą naudojant jau turimus komponentus!

Tai ne tik dar viena serijos/lygiagretaus ekvivalento pasipriešinimo skaičiuoklė! Ši programa apskaičiuoja, kaip sujungti rezistorius/kondensatorius, kuriuos šiuo metu turite, kad pasiektumėte reikiamą varžos/talpos vertę.

Ar jums kada nors reikėjo konkretaus rezistoriaus ar kondensatoriaus, kurio neturite arba kurio nėra? Nebijoti! Jūs tikriausiai galite nustatyti tą konkrečią varžos ar talpos vertę naudodami jau turimus komponentus. Užuot išsprendę didžiulę daugiapakopę optimizavimo problemą su milijonais skirtingų derinių, naudokite šią programą!

Tiesiog pasirinkite rezistorių arba kondensatorių, įveskite tikslinę vertę, įveskite maksimalų norimų naudoti komponentų skaičių, įveskite turimų komponentų verčių sąrašą ir spustelėkite apskaičiuoti! Programa išspjaus, kokius komponentus naudoti ir kaip juos prijungti, kad būtų pasiekta jūsų tikslinė vertė.

Norėdami išbandyti skaičiuotuvą, apsilankykite šioje žiniatinklio programoje.

Norėdami peržiūrėti šaltinio kodą, apsilankykite šioje „Github“saugykloje.

Praneškite man, jei turite pasiūlymų, kaip dar labiau pagerinti šio dizaino įrankio naudojimą!

1 žingsnis: fonas

Fonas
Fonas

Ši žiniatinklio programa buvo sukurta iš būtinybės. Yra daug skirtingų mano sukurtų grandinių, kurioms reikalingas labai specifinis rezistorius arba kondensatorius. Daug kartų aš neturiu tokios konkrečios vertės rezistoriaus ar kondensatoriaus. Kartais jie net nesudaro tos unikalios vertės komponento! Užuot atsisakęs ar susitaikęs su tuo, kas yra mažiau nei idealu, nusprendžiau parašyti programą, kuri apžvelgtų kiekvieną įmanomą rezistorių derinį (visas įmanomas vertes ir ar jie yra nuosekliai, ar lygiagrečiai) ir grąžintų geriausią derinį.

Kurdamas savo vargonų grandinę kaip savo „Band of Bands Instructable Project“dalį, turėjau pabandyti ranka apskaičiuoti geriausią kondensatorių derinį, kad pasiekčiau tam tikrą dažnį. Šis procesas buvo neįtikėtinai varginantis, ir aš galiausiai tiesiog pasidaviau ir pradėjau naudoti kondensatorių derinius, kurie sukėlė bet kokį garsinį dažnį. Dabar su šia žiniatinklio programa galiu suprojektuoti savo organą pagal tam tikrą dažnį ir suderinti jį su klaviatūros natomis! Žemiau pateikta lygtis naudojama konkrečiam dažniui apskaičiuoti ir yra aptariama kitame „Instructables“projekte.

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

Naudodamas šią lygtį, kur R1 = 100 kOhm ir R2 = 10 kOhm, apskaičiavau, kad 27,33 nF kondensatorius pagamins A4 natą (dažnis 440 Hz). Naudodamas savo programą, aš galėjau apskaičiuoti lygiavertę talpos reikšmę.001 nF (daug mažesnė nei standartinio kondensatoriaus tolerancija), kurią galiu sukurti naudojant kondensatorius, kuriuos jau turėjau. Gautas išėjimas ir konfigūracija aprašyti žemiau. Dabar galiu daug efektyviau ir efektyviau sureguliuoti savo organą pagal tikslius standartinių natų dažnius. Norėčiau, kad iš pradžių tai padariau. Mano demonstracinė daina vargonuose tikriausiai būtų skambėjusi daug geriau.

Artimiausia vertė: 27.329 nF Skirtumas: 0.001 nFC kondensatoriaus konfigūracija: C0 = 0.068 nF || C1 = 30 nF + C2 = 300 nF

Rezistorių kondensatorių ekvivalentiškumo lygtys

Žemiau pateikiamos rezistorių ir kondensatorių sujungimo grandinėje lygiavertiškumo lygtys.

  • Rezistoriai nuosekliai (R1 + R2): Req = R1 + R2
  • Rezistoriai lygiagrečiai (R1 || R2): Req = 1/(1/R1 + 1/R2)
  • Kondensatoriai nuosekliai (C1 + C2): Ceq = 1/(1/C1 + 1/C2)
  • Kondensatoriai lygiagrečiai (C1 || C2): Ceq = C1 + C2

2 žingsnis: įėjimai

Įėjimai
Įėjimai

Turite pateikti 4 įvestis:

  1. Nesvarbu, ar apskaičiuojate rezistoriaus ar kondensatoriaus vertę.
  2. Tikslinė varžos arba talpos vertė ir vienetai.
  3. Maksimalus komponentų skaičius, kurį norėtumėte naudoti, kad pasiektumėte tikslinę vertę (t. Y. Nenorėčiau naudoti daugiau kaip 3 rezistorių, kad pasiekčiau savo tikslinę varžos vertę).
  4. Šiuo metu turimų rezistorių/kondensatorių verčių sąrašas. Šios vertės turėtų būti vienodos su jūsų tiksline verte (t. Y. Jei jūsų tikslinė vertė buvo 110 nF, visos jūsų vertės turėtų būti pateiktos nF).

3 žingsnis: rezultatas

Rezultatas
Rezultatas

Jūs gausite 3 rezultatus, kad gautumėte rezultatą:

  1. Artimiausia vertė - artimiausia pasipriešinimo/talpos vertė, kurią galėjote pasiekti naudodami savo parametrus.
  2. Skirtumas - kiek toli buvo jūsų artimiausia vertė nuo tikslinės vertės.
  3. Rezistorių/kondensatorių konfigūracija - naudojamų rezistorių/kondensatorių verčių ir jų konfigūracijos sąrašas.

4 žingsnis: supraskite savo rezultatą

Jūsų rezultato supratimas
Jūsų rezultato supratimas
Jūsų rezultato supratimas
Jūsų rezultato supratimas

Konfigūracijos išvestyje naudojama standartinė žymė. „+“reiškia, kad komponentai yra nuosekliai ir „||“reiškia, kad komponentai yra lygiagrečiai. Operatoriai turi vienodą pirmenybę ir yra asociatyvūs iš kairės į dešinę, o tai reiškia, kad jūs sugrupuojate terminus, pradedant nuo kairės ir judant į dešinę.

Pavyzdžiui, pažvelkite į šį rezultatą:

Rezistoriaus konfigūracija: R0 = 15 omų + R1 = 470 omų || R2 = 3300 omų + R3 = 15000 omų

Jei laikysitės aukščiau aptartų gairių, pamatysite, kad tai atitinka pirmiau pateiktą lygtį ir paveikslėlį.

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

5 žingsnis: daugiau projektų

Daugiau projektų rasite mano puslapiuose:

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

6 žingsnis: šaltinio kodas

Norėdami peržiūrėti šaltinio kodą, apsilankykite šioje „Github“saugykloje arba peržiūrėkite žemiau esantį „JavaScript“.

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

/* r/c skaičiuoklės scenarijus*//* --------------------------------------- -------------------------*/ var artimiausias_valis; // artimiausia reikšmė kol kas var artimiausias_difas = 1000000,00; // skirtumas val ir tikslinis var artimiausias = ; // masyvas detalizuojantis komponentų reikšmes var ser_par_config = ; // masyvas, detalizuojantis serijinį/lygiagretųjį var outputStr = ""; function calculatorClick () {// išvalykite kiekvieno naujo paspaudimo globalias reikšmes close_val = 0; artimiausias_difas = 1000000,00; artimiausias = ; 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; // klaida analizuojant tikslinę vertę, jei (isNaN (tikslas)) {outputStr = "Klaidos tikrinimas 'Įvesties tikslinė vertė!"} // klaida analizuojant komponentų skaičių else if (isNaN (numComp)) {outputStr = "Klaidos tikrinimas „Komponentų skaičius“! “} // else, jei nėra klaidos taikinyje arba numComp else if (! IsNaN (target) &&! IsNaN (numComp)) {while (compValsStr.indexOf (", ")! = -1) {var kablelis = compValsStr.indexOf (","); var newInt = parseFloat (compValsStr.substring (0, kablelis)); // klaida analizuojant komponentų verčių sąrašą, nustatykite vėliavą, jei (isNaN (newInt)) {errFlag = 1; pertrauka; } compValsStr = compValsStr.substring (kablelis+1, compValsStr.length); compVals = newInt; i ++; } var newInt = parseFloat (compValsStr); // klaida analizuojant komponentų verčių sąrašą, nustatykite vėliavą, jei (isNaN (newInt)) {errFlag = 1; } compVals = newInt; if (errFlag == 0) {if (document.getElementById ("resRadio"). pažymėta) {rezistorius (target, numComp, compVals); } else if (document.getElementById ("capRadio"). pažymėtas) {kondensatorius (tikslas, numComp, compVals); }} // klaida analizuojant komponentų verčių sąrašą else {outputStr = "Klaidų tikrinimas 'Component Values List' input!"}} calcOutput.innerHTML = outputStr; resultDisplay.style.display = "blokas"; exampleDisplay.style.display = "lankstumas"; // slinkite žemyn iki rezultatų lango.scrollTo (0, exampleDisplay.scrollHeight); } / * Nuskaito ir išspausdina geriausią rezistorių konfigūraciją * tikslas - tikslinė varžos vertė * numComp - bendras rezistorių skaičius, kurį leidžiama naudoti norint pasiekti tikslinę vertę * compVals - rezistorių verčių masyvas * / funkcinis rezistorius (tikslas, numComp, compVals) { // atsparumo verčių ilgis var num_res = compVals.length; // paleisti visą galimą komponentų skaičių (var i = 1; i <= numComp; i ++) {var data = ; resCombination (compVals, num_res, i, 0, data, target); } var unit = document.getElementById ("selected_unit"). vertė; // spausdinimo rezultatų outputStr = "Artimiausia vertė:" + artimiausias_val.toFiksuotas (3) + "" + vienetai + ""; outputStr + = "Skirtumas:" + artimiausias_dif.toFiksuotas (3) + "" + vienetai + ""; outputStr += "Rezistoriaus konfigūracija:"; for (var i = 0; i <numComp; i ++) {if (i <artimiausias.ilgis) {outputStr + = "R" + i + "=" + artimiausias + "" + vienetai + ""; if (i+1 <artimiausias ilgis) {if (ser_par_config [i+1]) outputStr+= "||"; else outputStr + = " +"; }} kita pertrauka; }} /* Apskaičiuoja geriausią rezistorių derinį, kad būtų pasiekta tikslinė vertė. * res - rezistorių verčių įvesties masyvas * num_res - rezistorių verčių įvesties masyvo dydis * num_comb - leidžiamas rezistorių skaičius * indeksas - šukos indeksas * šukos - dabartinės kombinacijos masyvas * tikslas - tikslinė vertė * Nėra grąžos vertės - dabartinį geriausią derinį perduoda visuotinėms vertėms */ funkcija resCombination (res, num_res, num_comb, index, comb, target) {// dabartinis derinys baigtas, jei (index == num_comb) {var ser_par_size = Math.pow (2, numeris_kombinacija); // 2^(komponentų skaičius) var ser_par = ; // bool masyvas, nurodantis serijinį ar lygiagretųjį kiekvienam komponentui var calc; // apskaičiuota ekvivalentinė pasipriešinimo vertė // žingsnis per kiekvieną įmanomą serijos/lygiagrečios konfigūracijos dabartinį derinį (var j = 0; j k) ir 1; } // atlikite derinio skaičiavimus pagal serijos/lygiagrečios kombinaciją (var k = 0; k <num_comb; k ++) {// pirmasis skaičius, tiesiog pridėkite, jei (k == 0) calc = šukos [k]; // nulis reiškia seriją, pridėkite pasipriešinimo reikšmes else if (! ser_par [k]) calc += comb [k]; // vienas reiškia lygiagrečią, atvirkštinę abipusių sumų sumą, jei (ser_par [k]) calc = (calc*comb [k])/(calc+comb [k]); } // patikrinkite, ar skirtumas yra mažesnis nei ankstesnis geriausias, jei (Math.abs (apskaičiuotas - tikslas) <artimiausias_difas) {// jis yra mažesnis, todėl atnaujinkite pasaulines vertes near_val = calc; artimiausias_difas = Math.abs (calc - tikslas); // išvalyti iki nulio (var k = 0; k <num_comb; k ++) {artimiausias [k] = 0; } // atnaujinti artimiausią reikšmę & serija/lygiagretūs masyvai (var k = 0; k <num_comb; k ++) {artimiausias [k] = šukos [k]; ser_par_config [k] = ser_par [k]; }}} grįžti 0; } // rekursyviai iškviesti ir pakeisti indeksą visomis įmanomomis reikšmėmis (var i = 0; i = num_comb-index; i ++) {comb [index] = res ; resCombination (res, num_res, num_comb, index+1, šukos, taikinys); }} / * Nuskaito ir išspausdina geriausią kondensatoriaus konfigūraciją * tikslas - tikslinė talpos vertė * numComp - bendras leidžiamų naudoti kondensatorių skaičius norint pasiekti tikslinę vertę * compVals - kondensatoriaus verčių masyvas * / funkcinis kondensatorius (tikslinis, numComp, compVals) {// talpos reikšmių ilgis var num_cap = compVals.length; // paleisti visus galimus komponentų skaičius (var i = 1; i <= numComp; i ++) {var data = ; capCombination (compVals, num_cap, i, 0, data, target); } var unit = document.getElementById ("selected_unit"). vertė; // spausdinimo rezultatų outputStr = "Artimiausia vertė:" + artimiausias_val.toFiksuotas (3) + "" + vienetai + ""; outputStr + = "Skirtumas:" + artimiausias_dif.toFiksuotas (3) + "" + vienetai + ""; outputStr += "Kondensatoriaus konfigūracija:"; for (var i = 0; i <numComp; i ++) {if (i <artimiausias.ilgis) {outputStr + = "C" + i + "=" + artimiausias + "" + vienetai + ""; if (i+1 <artimiausias ilgis) {if (ser_par_config [i+1]) outputStr+= "||"; else outputStr + = " +"; }} kita pertrauka; }} /* Apskaičiuoja geriausią kondensatorių derinį, kad būtų pasiekta tikslinė vertė. * dangtelis - kondensatoriaus verčių įvesties masyvas * num_cap - kondensatoriaus verčių įvesties masyvo dydis * num_comb - leidžiamas kondensatorių skaičius * indeksas - šukos indeksas * šukos - dabartinio derinio masyvas * tikslas - tikslinė vertė * Nėra grąžos vertės - dabartinį geriausią derinį perduoda visuotinėms vertėms */ funkcijos viršutinė riba (2, numeris_kombinacija); // 2^(komponentų skaičius) var ser_par = ; // bool masyvas, nurodantis serijinį ar lygiagretųjį kiekvienam komponentui var calc; // apskaičiuota lygiavertė talpos vertė // žingsnis per kiekvieną įmanomą serijos/lygiagrečios konfigūracijos dabartinį derinį (var j = 0; j k) ir 1; } // atlikite derinio skaičiavimus pagal serijos/lygiagrečios kombinaciją (var k = 0; k

Rekomenduojamas: