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, Srpanj
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/paralelnih ekvivalentnih otpora! Ovaj program izračunava kako kombinirati otpornike/kondenzatore koje trenutno trebate kako 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 da riješite ogroman multivarijabilni optimizacijski problem s milijunima različitih kombinacija, upotrijebite ovaj program!

Samo odaberite otpornik ili kondenzator, unesite ciljnu vrijednost, unesite maksimalni broj komponenti koje želite koristiti, unesite popis vrijednosti komponenti koje imate i kliknite Izračunaj! Program će ispljunuti koje će 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 spremište Github.

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

Korak 1: Pozadina

Pozadina
Pozadina

Ova je web aplikacija razvijena iz nužde. Postoji mnogo različitih sklopova koje konstruiram koji zahtijevaju vrlo specifičan otpornik ili kondenzator. Mnogo puta nemam otpornik ili kondenzator s tom specifičnom 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 sklopa 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. Taj je proces 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 tipkovnici! Dolje jednadžba koristi se za izračun specifične frekvencije i raspravlja 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 svoj 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 stanju učinkovitije i djelotvornije prilagoditi svoje orgulje točnim frekvencijama standardnih nota. Volio bih da sam ovo učinio za početak. Moja demo pjesma na orguljama vjerojatno bi zvučala puno 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 nizu (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. Najveći 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. Te bi vrijednosti trebale biti u istim jedinicama kao i vaša ciljna vrijednost (tj. Ako je vaša ciljna vrijednost bila 110 nF, sve vaše vrijednosti trebale bi biti navedene u nF).

Korak 3: Rezultat

Proizlaziti
Proizlaziti

Za svoj ćete rezultat dobiti 3 izlaza:

  1. Najbliža vrijednost - najbliža vrijednost otpora/kapacitivnosti koju ste uspjeli postići 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 uporabu 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 slijeva nadesno, š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

Slijedite li gore navedene smjernice, možete vidjeti da je to ekvivalent 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 skriptiranje kalkulatora*//* --------------------------------------- -------------------------*/ var najbliži_val; // do sada najbliža vrijednost var najbliži_diff = 1000000,00; // razlika val i target var najbliži = ; // niz s pojedinostima o vrijednostima komponenti var ser_par_config = ; // niz s pojedinostima o serijskom/paralelnom var outputStr = ""; function calculatorClick () {// briše globalne vrijednosti za svaki novi klik najbliži_val = 0; najbliži_razmak = 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 ciljane vrijednosti if (isNaN (target)) {outputStr = "Error check 'Target Value' input!"} // pogreška u raščlanjivanju broja komponenti else if (isNaN (numComp)) {outputStr = "Provjera pogreške 'Broj komponenti' ulaz! "} // else ako nema greške u cilju ili numComp else if (! IsNaN (cilj) &&! IsNaN (numComp)) {while (compValsStr.indexOf (", ")! = -1) {var comma = compValsStr.indexOf (","); var newInt = parseFloat (compValsStr.substring (0, zarez)); // greška pri raščlanjivanju vrijednosti vrijednosti komponente, postavi zastavicu if (isNaN (newInt)) {errFlag = 1; pauza; } compValsStr = compValsStr.substring (zarez+1, compValsStr.length); compVals = newInt; i ++; } var newInt = parseFloat (compValsStr); // greška pri 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"). provjereno) {kondenzator (cilj, numComp, compVals); }} // greška u raščlanjivanju popisa vrijednosti komponente else {outputStr = "Pogreška provjera 'Popis vrijednosti vrijednosti komponente' input!"}} 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; // proći 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 ("odabrana_jedinica"). vrijednost; // ispis rezultata outputStr = "Najbliža vrijednost:" + najbliži_val.toPopravljeno (3) + "" + jedinice + ""; outputStr + = "Razlika:" + najbliža_difta.fiksirano (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 * comb - niz trenutne kombinacije * target - 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čunata ekvivalentna vrijednost otpora // korak kroz svaku moguću seriju/paralelnu konfiguraciju trenutne kombinacije za (var j = 0; j k) & 1; } // izračunate kombinaciju na temelju serije/paralelne kombinacije za (var k = 0; k <num_comb; k ++) {// prvi broj, samo dodajte 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še 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, češalj, cilj); }} / * Dohvaća i ispisuje najbolju konfiguraciju kondenzatora * cilj - ciljna vrijednost kapacitivnosti * numComp - ukupan broj kondenzatora koji se može koristiti za postizanje ciljanog val * compVals - niz vrijednosti kondenzatora * / funkcijski kondenzator (target, numComp, compVals) {// duljina vrijednosti kapacitivnosti var num_cap = compVals.length; // prolaze 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 ("odabrana_jedinica"). vrijednost; // ispis rezultata outputStr = "Najbliža vrijednost:" + najbliži_val.toPopravljeno (3) + "" + jedinice + ""; outputStr + = "Razlika:" + najbliža_difta.fiksirano (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čunata ekvivalentna vrijednost kapacitivnosti // korak kroz svaku moguću seriju/paralelnu konfiguraciju trenutne kombinacije za (var j = 0; j k) & 1; } // izračunate kombinaciju na temelju serije/paralelne kombinacije za (var k = 0; k

Preporučeni: