Sadržaj:

Kako postići bilo kakav otpor/kapacitet pomoću komponenti koje već imate !: 6 koraka
Kako postići bilo kakav otpor/kapacitet pomoću komponenti koje već imate !: 6 koraka

Video: Kako postići bilo kakav otpor/kapacitet pomoću komponenti koje već imate !: 6 koraka

Video: Kako postići bilo kakav otpor/kapacitet pomoću komponenti koje već imate !: 6 koraka
Video: Deutsch lernen im Beruf B2 2024, Novembar
Anonim
Kako postići bilo kakav otpor/kapacitet pomoću komponenti koje već imate!
Kako postići bilo kakav otpor/kapacitet pomoću komponenti koje već imate!

Ovo nije samo još jedan kalkulator serije/paralelnog ekvivalentnog otpora! Ovaj program izračunava kako kombinirati otpornike/kondenzatore koje trenutno trebate da biste postigli ciljnu vrijednost otpora/kapacitivnosti koja vam je potrebna.

Jeste li ikada trebali poseban otpornik ili kondenzator koji nemate ili koji ne postoji? Ne bojte se! Tu vrijednost otpora ili kapacitivnosti vjerojatno možete napraviti pomoću komponenti koje već imate. Umjesto rješavanja ogromnog multivarijabilnog optimizacijskog problema s milijunima različitih kombinacija, upotrijebite ovaj program!

Samo odaberite otpornik ili kondenzator, unesite ciljnu vrijednost, unesite maksimalan broj komponenti koje želite koristiti, unesite popis vrijednosti komponenti koje imate i kliknite Izračunaj! Program će ispljunuti koje komponente koristiti i kako ih povezati kako bi se postigla ciljna vrijednost.

Da biste isprobali kalkulator, posjetite ovu web aplikaciju.

Za pregled izvornog koda posjetite ovo Github spremište.

Javite mi ako imate prijedloge za dodatno poboljšanje upotrebljivosti ovog alata za dizajn!

Korak 1: Pozadina

Pozadina
Pozadina

Ova web aplikacija razvijena je iz nužde. Postoji mnogo različitih krugova koje konstruiram koji zahtijevaju vrlo specifičan otpornik ili kondenzator. Često nemam otpornik ili kondenzator s tom vrijednošću. Ponekad čak i ne naprave komponentu s tom jedinstvenom vrijednošću! Umjesto da odustanem ili se pomirim s nečim što nije idealno, odlučio sam napisati program koji će pogledati svaku moguću kombinaciju otpornika (svaku moguću vrijednost i jesu li u nizu ili paralelni) i vratiti najbolju kombinaciju.

Prilikom projektiranja kola za moje orgulje u sklopu mog projekta Battle of the Bands Instructable, morao sam pokušati ručno izračunati najbolju kombinaciju kondenzatora za postizanje određene frekvencije. Ovaj proces je bio nevjerojatno dosadan i na kraju sam jednostavno odustao i krenuo s kombinacijama kondenzatora koje su proizvele bilo koju količinu zvučne frekvencije. Sada pomoću ove web aplikacije mogu dizajnirati svoje orgulje za određenu frekvenciju i prilagoditi ih notama na tastaturi! Donja jednadžba se koristi za izračunavanje specifične frekvencije i razmatra se u drugom projektu Instructables.

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

Koristeći ovu jednadžbu gdje je R1 = 100 kOhm i R2 = 10 kOhm, izračunao sam da će kondenzator od 27,33 nF proizvesti notu A4 (frekvencija 440 Hz). Koristeći moj program, uspio sam izračunati ekvivalentnu vrijednost kapacitivnosti unutar.001 nF (mnogo manje od tolerancije na standardnom kondenzatoru) koju mogu stvoriti pomoću kondenzatora koje sam već ležao. Rezultirajući izlaz i konfiguracija opisani su u nastavku. Sada sam u mogućnosti da mnogo efikasnije i efektnije podesim svoj organ na tačne frekvencije standardnih nota. Voleo bih da sam ovo učinio za početak. Moja demo pjesma na orguljama bi vjerovatno zvučala mnogo bolje.

Najbliža vrijednost: 27,329 nF Razlika: 0,001 nFC Konfiguracija kondenzatora: C0 = 0,068 nF || C1 = 30 nF + C2 = 300 nF

Jednadžbe ekvivalencije kondenzatora otpornika

Za referencu, dolje su jednadžbe ekvivalencije za kombiniranje otpornika i kondenzatora u krugu.

  • Otpornici u seriji (R1 + R2): Req = R1 + R2
  • Paralelni otpornici (R1 || R2): Req = 1/(1/R1 + 1/R2)
  • Kondenzatori u seriji (C1 + C2): Ceq = 1/(1/C1 + 1/C2)
  • Paralelni kondenzatori (C1 || C2): Ceq = C1 + C2

Korak 2: Ulazi

Ulazi
Ulazi

Morate unijeti 4 ulaza:

  1. Izračunavate li vrijednost za otpornik ili kondenzator.
  2. Vrijednost ciljnog otpora ili kapacitivnosti i jedinice.
  3. Maksimalan broj komponenti koje želite koristiti za postizanje ciljane vrijednosti (tj. Ne bih želio koristiti više od 3 otpornika za postizanje ciljane vrijednosti otpora).
  4. Popis vrijednosti za otpornike/kondenzatore koje trenutno imate. Ove vrijednosti trebaju biti u istim jedinicama kao i vaša ciljna vrijednost (tj. Ako je vaša ciljna vrijednost bila 110 nF, sve vaše vrijednosti trebaju biti navedene u nF).

Korak 3: Rezultat

Rezultat
Rezultat

Za rezultat ćete dobiti 3 izlaza:

  1. Najbliža vrijednost - najbliža vrijednost otpora/kapacitivnosti koju ste uspjeli postići sa svojim parametrima.
  2. Razlika - koliko je vaša najbliža vrijednost bila udaljena od vaše ciljne vrijednosti.
  3. Konfiguracija otpornika/kondenzatora - popis vrijednosti otpornika/kondenzatora za upotrebu i njihova konfiguracija.

Korak 4: Razumijevanje vašeg rezultata

Razumijevanje vašeg rezultata
Razumijevanje vašeg rezultata
Razumijevanje vašeg rezultata
Razumijevanje vašeg rezultata

Konfiguracijski izlaz koristi standardni zapis. "+" znači da su komponente u nizu i "||" znači da su komponente paralelne. Operatori imaju jednak prioritet i asocijativni su s lijeva na desno, što znači da grupirate pojmove zajedno počevši od lijeve strane i krećući se nadesno.

Na primjer, pogledajte sljedeći rezultat:

Konfiguracija otpornika: R0 = 15 Ohma + R1 = 470 Ohma || R2 = 3300 Ohma + R3 = 15000 Ohma

Ako slijedite gore navedene smjernice, možete vidjeti da je ovo ekvivalentno sljedećoj jednadžbi i gornjoj slici.

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

Korak 5: Više projekata

Za više projekata posjetite moje stranice:

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

Korak 6: Izvorni kod

Za pregled izvornog koda posjetite ovo spremište Github ili pogledajte donji JavaScript.

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

/* r/c skripta kalkulatora*//* --------------------------------------- -------------------------*/ var najbliži_val; // do sada najbliža vrijednost var most_diff = 1000000.00; // razlika val i target var najbliži = ; // niz sa detaljima vrijednosti komponenti var ser_par_config = ; // niz sa detaljima serijskog/paralelnog var outputStr = ""; funkcija calculatorClick () {// briše globalne vrijednosti za svaki novi klik najbliži_val = 0; najbliži_dif = 1000000,00; najbliži = ; 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; // greška u raščlanjivanju ciljne vrijednosti if (isNaN (target)) {outputStr = "Greška provjera ulaza 'Target Value'!"} // greška u raščlanjivanju broja komponenti else if (isNaN (numComp)) {outputStr = "Provjera greške 'Broj komponenti' ulaz! "} // else ako nema greške u cilju ili numComp u suprotnom if (! IsNaN (target) &&! IsNaN (numComp)) {while (compValsStr.indexOf (", ")! = -1) {var comma = compValsStr.indexOf (","); var newInt = parseFloat (compValsStr.substring (0, zarez)); // greška u raščlanjivanju vrijednosti vrijednosti komponente, postavi zastavicu if (isNaN (newInt)) {errFlag = 1; break; } compValsStr = compValsStr.substring (zarez+1, compValsStr.length); compVals = newInt; i ++; } var newInt = parseFloat (compValsStr); // greška u raščlanjivanju vrijednosti vrijednosti komponente, postavi zastavicu if (isNaN (newInt)) {errFlag = 1; } compVals = newInt; if (errFlag == 0) {if (document.getElementById ("resRadio"). označeno) {otpornik (cilj, numComp, compVals); } else if (document.getElementById ("capRadio"). označeno) {kondenzator (cilj, numComp, compVals); }} // greška pri raščlanjivanju vrijednosti vrijednosti komponente else {outputStr = "Provjera greške 'Unos liste' Vrijednosti komponente '!"}} calcOutput.innerHTML = outputStr; resultDisplay.style.display = "blok"; exampleDisplay.style.display = "flex"; // pomaknite se dolje do rezultata window.scrollTo (0, exampleDisplay.scrollHeight); } / * Dohvaća i ispisuje najbolju konfiguraciju otpornika * cilj - vrijednost otpora cilja * numComp - ukupan broj otpornika koji se mogu koristiti za postizanje ciljanog val * compVals - niz vrijednosti otpornika * / funkcijski otpornik (target, numComp, compVals) { // duljina vrijednosti otpora var num_res = compVals.length; // prolazimo kroz sav mogući broj komponenti za (var i = 1; i <= numComp; i ++) {var data = ; resCombination (compVals, num_res, i, 0, data, target); } var units = document.getElementById ("selected_unit"). vrijednost; // ispis rezultata outputStr = "Najbliža vrijednost:" + najbliži_val.toPopravljeno (3) + "" + jedinice + ""; outputStr + = "Razlika:" + najbliži_diff.toPopravljeno (3) + "" + jedinice + ""; outputStr += "Konfiguracija otpornika:"; za (var i = 0; i <numComp; i ++) {if (i <najbliža.dužina) {outputStr + = "R" + i + "=" + najbliži + "" + jedinice + ""; if (i+1 <najbliža.dužina) {if (ser_par_config [i+1]) outputStr+= "||"; else outputStr + = " +"; }} else break; }} /* Izračunava najbolju kombinaciju otpornika za postizanje ciljane vrijednosti. * res - ulazni niz vrijednosti otpornika * num_res - veličina ulaznog niza vrijednosti otpornika * num_comb - dopušteni broj otpornika * indeks - indeks češlja * češalj - niz trenutne kombinacije * cilj - ciljna vrijednost * Nema povratne vrijednosti - prenosi trenutnu najbolju kombinaciju u globalne vrijednosti */ funkcija resCombination (res, num_res, num_comb, index, comb, target) {// trenutna kombinacija je potpuna if (index == num_comb) {var ser_par_size = Math.pow (2, num_comb); // 2^(broj komponenti) var ser_par = ; // bool niz specificira serijski ili paralelni za svaku komponentu var calc; // izračunava vrijednost ekvivalentnog otpora // korak kroz svaku moguću seriju/paralelnu konfiguraciju trenutne kombinacije za (var j = 0; j k) & 1; } // izvršimo proračune za kombinaciju na osnovu serije/paralelne kombinacije za (var k = 0; k <num_comb; k ++) {// prvi broj, samo dodamo if (k == 0) calc = comb [k]; // nula znači niz, dodajte vrijednosti otpora else if (! ser_par [k]) calc += comb [k]; // jedno znači paralelno, obrnuto od zbroja recipročnih vrijednosti else if (ser_par [k]) calc = (calc*comb [k])/(calc+comb [k]); } // provjeravamo je li razlika manja od prethodne najbolje ako je (Math.abs (calc - target) <najbliži_diff) {// manja, pa ažurirajte globalne vrijednosti najbliži_val = kalc; najbliži_diff = Math.abs (izračun - cilj); // brišu na nulu za (var k = 0; k <broj_kombinacija; k ++) {najbliži [k] = 0; } // ažuriranje najbliže vrijednosti & serije/paralelnih nizova za (var k = 0; k <num_comb; k ++) {najbliži [k] = češalj [k]; ser_par_config [k] = ser_par [k]; }}} return 0; } // rekurzivno poziva i zamjenjuje indeks sa svim mogućim vrijednostima za (var i = 0; i = num_comb-index; i ++) {comb [index] = res ; resCombination (res, num_res, num_comb, index+1, comb, target); }} / * Dohvaća i ispisuje najbolju konfiguraciju kondenzatora * cilj - vrijednost ciljne kapacitivnosti * numComp - ukupan broj kondenzatora koji se može koristiti za postizanje ciljanog val * compVals - niz vrijednosti kondenzatora * / funkcijski kondenzator (target, numComp, compVals) {// dužina vrijednosti kapacitivnosti var num_cap = compVals.length; // prolazimo kroz sav mogući broj komponenti za (var i = 1; i <= numComp; i ++) {var data = ; capCombination (compVals, num_cap, i, 0, data, target); } var units = document.getElementById ("selected_unit"). vrijednost; // ispis rezultata outputStr = "Najbliža vrijednost:" + najbliži_val.toPopravljeno (3) + "" + jedinice + ""; outputStr + = "Razlika:" + najbliža_diff.toPopravljeno (3) + "" + jedinice + ""; outputStr += "Konfiguracija kondenzatora:"; za (var i = 0; i <numComp; i ++) {if (i <najbliža.dužina) {outputStr + = "C" + i + "=" + najbliži + "" + jedinice + ""; if (i+1 <najbliža.dužina) {if (ser_par_config [i+1]) outputStr+= "||"; else outputStr + = " +"; }} else break; }} /* Izračunava najbolju kombinaciju kondenzatora za postizanje ciljane vrijednosti. * cap - ulazni niz vrijednosti kondenzatora * num_cap - veličina ulaznog niza vrijednosti kondenzatora * num_comb - dopušteni broj kondenzatora * indeks - indeks češlja * comb - niz trenutne kombinacije * target - ciljna vrijednost * Nema povratne vrijednosti - prenosi trenutnu najbolju kombinaciju u globalne vrijednosti */ funkcija capCombination (cap, num_cap, num_comb, index, comb, target) {// trenutna kombinacija je potpuna if (index == num_comb) {var ser_par_size = Math.pow (2, num_comb); // 2^(broj komponenti) var ser_par = ; // bool niz specificira serijski ili paralelni za svaku komponentu var calc; // izračunava vrijednost ekvivalentne kapacitivnosti // korak kroz svaku moguću seriju/paralelnu konfiguraciju trenutne kombinacije za (var j = 0; j k) & 1; } // izvršimo proračune kombinacije na osnovu serije/paralelne kombinacije za (var k = 0; k

Preporučuje se: