Innholdsfortegnelse:

Hvordan oppnå motstand/kapasitet ved hjelp av komponenter du allerede har !: 6 trinn
Hvordan oppnå motstand/kapasitet ved hjelp av komponenter du allerede har !: 6 trinn

Video: Hvordan oppnå motstand/kapasitet ved hjelp av komponenter du allerede har !: 6 trinn

Video: Hvordan oppnå motstand/kapasitet ved hjelp av komponenter du allerede har !: 6 trinn
Video: New Groundbreaking Research, Anthrobots, Hyper-Embryos | Michael Levin 2024, November
Anonim
Hvordan oppnå motstand/kapasitet ved hjelp av komponenter du allerede har!
Hvordan oppnå motstand/kapasitet ved hjelp av komponenter du allerede har!

Dette er ikke bare nok en serie/parallell ekvivalent motstandskalkulator! Dette programmet beregner hvordan du skal kombinere motstander/kondensatorer som du har for å oppnå en målmotstand/kapasitansverdi du trenger.

Har du noen gang trengt en bestemt motstand eller kondensator som du ikke har eller som ikke eksisterer? Ha ingen frykt! Du kan sannsynligvis gjøre den spesifikke motstanden eller kapasitansverdien ved å bruke komponenter du allerede har. I stedet for å løse et stort multivariabelt optimaliseringsproblem med millioner av forskjellige kombinasjoner, bruk dette programmet!

Bare velg motstand eller kondensator, skriv inn målverdien, skriv inn maks antall komponenter du vil bruke, skriv inn en liste over verdiene til komponentene du har, og klikk på beregne! Programmet vil spytte ut hvilke komponenter du skal bruke og hvordan du kobler dem til for å oppnå målverdien din.

For å prøve ut kalkulatoren, besøk denne webapplikasjonen.

For å se kildekoden, besøk dette Github -depotet.

Gi meg beskjed hvis du har forslag til ytterligere å forbedre brukervennligheten til dette designverktøyet!

Trinn 1: Bakgrunn

Bakgrunn
Bakgrunn

Denne webapplikasjonen ble utviklet av nødvendighet. Det er mange forskjellige kretser jeg konstruerer som krever en veldig spesifikk motstand eller kondensator. Mange ganger har jeg ikke en motstand eller kondensator med den spesifikke verdien. Noen ganger lager de ikke engang en komponent med den unike verdien! I stedet for å gi opp eller nøye meg med noe som er mindre enn ideelt, bestemte jeg meg for å skrive et program for å se på alle mulige kombinasjoner av motstander (hver mulig verdi og om de er i serie eller parallell) og returnere den beste kombinasjonen.

Da jeg utformet kretsen for mitt organ som en del av mitt Battle of the Bands Instructable Project, måtte jeg prøve å beregne den beste kombinasjonen av kondensatorer for å oppnå en bestemt frekvens. Denne prosessen var utrolig kjedelig, og jeg ga til slutt bare opp og gikk med kondensatorkombinasjoner som produserte en hvilken som helst mengde hørbar frekvens. Nå med denne webapplikasjonen kan jeg designe orgelet mitt for en bestemt frekvens og stille det til notene på et tastatur! Ligningen nedenfor brukes til å beregne den spesifikke frekvensen og diskuteres i det andre Instructables -prosjektet.

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

Ved å bruke denne ligningen hvor R1 = 100 kOhm og R2 = 10 kOhm, beregnet jeg at en 27,33 nF kondensator vil produsere en A4 -note (frekvens 440 Hz). Ved å bruke programmet mitt, kunne jeg beregne en ekvivalent kapasitansverdi innenfor 0,001 nF (mye mindre enn toleransen på en standard kondensator) som jeg kan lage ved hjelp av kondensatorer jeg allerede hadde liggende. Den resulterende utgangen og konfigurasjonen er beskrevet nedenfor. Jeg er nå i stand til mye mer effektivt og effektivt å stille inn orgelet mitt på de eksakte frekvensene til standardnoter. Jeg skulle ønske jeg hadde gjort dette til å begynne med. Demosangen min på orgelet hadde nok hørt mye bedre ut.

Nærmeste verdi: 27.329 nF Forskjell: 0.001 nFCapacitor Konfigurasjon: C0 = 0.068 nF || C1 = 30 nF + C2 = 300 nF

Motstandskondensatorekvivalensligninger

Til referanse nedenfor er ekvivalensligningene for å kombinere motstander og kondensatorer i en krets.

  • Motstander i serie (R1 + R2): Req = R1 + R2
  • Motstander parallelt (R1 || R2): Req = 1/(1/R1 + 1/R2)
  • Kondensatorer i serie (C1 + C2): Ceq = 1/(1/C1 + 1/C2)
  • Kondensatorer parallelt (C1 || C2): Ceq = C1 + C2

Trinn 2: Innganger

Innganger
Innganger

Det er 4 innganger du må oppgi:

  1. Enten du beregner en verdi for en motstand eller en kondensator.
  2. Målmotstanden eller kapasitansverdien og enhetene.
  3. Det maksimale antallet komponenter du vil bruke for å oppnå målverdien (dvs. jeg vil ikke bruke mer enn 3 motstander for å oppnå min målmotstandsverdi).
  4. Listen over verdier for motstandene/kondensatorene du for øyeblikket har. Disse verdiene skal være i de samme enhetene som målverdien din (dvs. hvis målverdien din var 110 nF, bør alle verdiene oppgis i nF).

Trinn 3: Resultat

Resultat
Resultat

Du får 3 utganger for resultatet ditt:

  1. Nærmeste verdi - den nærmeste motstands-/kapasitansverdien du var i stand til å oppnå med parametrene dine.
  2. Forskjell - hvor langt unna din nærmeste verdi var fra målverdien din.
  3. Motstand/kondensator konfigurasjon - en liste over verdier for motstandene/kondensatorene som skal brukes og deres konfigurasjon.

Trinn 4: Forstå resultatet ditt

Forstå resultatet ditt
Forstå resultatet ditt
Forstå resultatet ditt
Forstå resultatet ditt

Konfigurasjonsutgangen bruker en standardnotasjon. "+" betyr at komponentene er i serie og "||" betyr at komponentene er parallelle. Operatørene har lik forrang og er assosiativ fra venstre til høyre, noe som betyr at du grupperer termer sammen fra venstre og til høyre.

Ta for eksempel en titt på følgende resultat:

Motstandskonfigurasjon: R0 = 15 ohm + R1 = 470 ohm || R2 = 3300 ohm + R3 = 15000 ohm

Hvis du følger retningslinjene som er omtalt ovenfor, kan du se at dette tilsvarer følgende ligning og bilde ovenfor.

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

Trinn 5: Flere prosjekter

For flere prosjekter, besøk sidene mine:

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

Trinn 6: Kildekode

For å se kildekoden, besøk dette Github -depotet eller se JavaScript nedenfor.

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

/* r/c kalkulator scripting*//* --------------------------------------- -------------------------*/ var nærmeste_val; // nærmeste verdi så langt var nærmeste_diff = 1000000.00; // diff av val og target var nærmest = ; // array -detaljverdier for komponenter var ser_par_config = ; // array som beskriver seriell/parallell var outputStr = ""; function calculatorClick () {// slette globale verdier for hvert nytt klikk nærmest_val = 0; nærmeste_differanse = 1000000.00; nærmest = ; 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; // feil ved analyse av målverdi hvis (isNaN (target)) {outputStr = "Feilkontroll" Target Value "-input!"} // feil ved analyse av antall komponenter ellers hvis (isNaN (numComp)) {outputStr = "Feilkontroll 'Antall komponenters input! "} // else hvis ingen feil i målet eller numComp else if (! IsNaN (target) &&! IsNaN (numComp)) {while (compValsStr.indexOf (", ")! = -1) {var komma = compValsStr.indexOf (","); var newInt = parseFloat (compValsStr.substring (0, komma)); // feil i analyse av komponentverdilisten, sett flagg hvis (isNaN (newInt)) {errFlag = 1; gå i stykker; } compValsStr = compValsStr.substring (komma+1, compValsStr.length); compVals = newInt; i ++; } var newInt = parseFloat (compValsStr); // feil i analyse av komponentverdilisten, sett flagg hvis (isNaN (newInt)) {errFlag = 1; } compVals = newInt; if (errFlag == 0) {if (document.getElementById ("resRadio"). sjekket) {resistor (target, numComp, compVals); } annet hvis (document.getElementById ("capRadio"). sjekket) {kondensator (target, numComp, compVals); }}} // feil ved analyse av komponentverdiliste annet {outputStr = "Feilkontroll" Komponentverdiliste "-inngang!"}} calcOutput.innerHTML = outputStr; resultDisplay.style.display = "blokk"; eksempelDisplay.style.display = "flex"; // rull ned til resultatvindu.scrollTo (0, exampleDisplay.scrollHeight); } / * Henter og skriver ut den beste motstandskonfigurasjonen * mål - målmotstandsverdi * numComp - totalt antall motstander som kan brukes for å oppnå målval * kompVals - rekke motstandsverdier * / funksjonsmotstand (mål, numComp, kompVals) { // lengde på motstandsverdier var num_res = compVals.length; // kjøre gjennom alle mulige antall komponenter for (var i = 1; i <= numComp; i ++) {var data = ; resCombination (compVals, num_res, i, 0, data, target); } var units = document.getElementById ("selected_unit"). verdi; // utskriftsresultater outputStr = "Nærmeste verdi:" + close_val.toFixed (3) + "" + units + ""; outputStr + = "Difference:" + close_diff.toFixed (3) + "" + units + ""; outputStr += "Motstandskonfigurasjon:"; for (var i = 0; i <numComp; i ++) {if (i <nærmest.lengde) {outputStr + = "R" + i + "=" + nærmeste + "" + enheter + ""; if (i+1 <nærmeste.lengde) {if (ser_par_config [i+1]) outputStr+= "||"; else outputStr + = " +"; }} annet pause; }} /* Beregner den beste kombinasjonen av motstander for å oppnå en målverdi. * res - inngangsmateriale med motstandsverdier * num_res - størrelse på inngangsmateriale med motstandsverdier * num_comb - antall motstander tillatt * indeks - indeks for kam * kam - rekke av nåværende kombinasjon * mål - målverdien * Ingen returverdi - sender gjeldende beste kombinasjon til globale verdier */ function resCombination (res, num_res, num_comb, index, comb, target) {// nåværende kombinasjon er fullført hvis (index == num_comb) {var ser_par_size = Math.pow (2, num_comb); // 2^(antall komponenter) var ser_par = ; // bool array som spesifiserer seriell eller parallell for hver komponent var calc; // beregnet ekvivalent motstandsverdi // gå gjennom alle mulige serier/parallelle konfigurasjoner av gjeldende kombinasjon for (var j = 0; j k) & 1; } // gjør beregningene for kombinasjonen basert på serie/parallell kombinasjon for (var k = 0; k <num_comb; k ++) {// første tall, bare legg til hvis (k == 0) calc = kam [k]; // null betyr serie, legg til motstandsverdier ellers hvis (! ser_par [k]) calc += kam [k]; // en betyr parallell, invers av summen av gjensidige andre hvis (ser_par [k]) calc = (calc*kam [k])/(calc+kam [k]); } // sjekk for å se om forskjellen er mindre enn forrige best hvis (Math.abs (calc - target) <close_diff) {// det er mindre, så oppdater globale verdier close_val = calc; close_diff = Math.abs (calc - target); // klar til null for (var k = 0; k <num_comb; k ++) {nærmeste [k] = 0; } // oppdater nærmeste verdi og serier/parallelle matriser for (var k = 0; k <num_comb; k ++) {nærmeste [k] = kam [k]; ser_par_config [k] = ser_par [k]; }}} returner 0; } // ring rekursivt og erstatt indeksen med alle mulige verdier for (var i = 0; i = num_comb-index; i ++) {comb [index] = res ; resCombination (res, num_res, num_comb, index+1, comb, target); }} / * Henter og skriver ut den beste kondensatorkonfigurasjonen * mål - målkapasitansverdi * numComp - totalt antall kondensatorer som kan brukes for å oppnå målverdi * kompVal - rekke kondensatorverdier * / funksjonskondensator (mål, numComp, kompVal) {// lengde på kapasitansverdier var num_cap = compVals.length; // kjøre gjennom alle mulige antall komponenter for (var i = 1; i <= numComp; i ++) {var data = ; capCombination (compVals, num_cap, i, 0, data, target); } var units = document.getElementById ("selected_unit"). verdi; // utskriftsresultater outputStr = "Nærmeste verdi:" + close_val.toFixed (3) + "" + units + ""; outputStr + = "Difference:" + close_diff.toFixed (3) + "" + units + ""; outputStr += "Kondensatorkonfigurasjon:"; for (var i = 0; i <numComp; i ++) {if (i <nærmest.lengde) {outputStr + = "C" + i + "=" + nærmeste + "" + enheter + ""; if (i+1 <nærmeste.lengde) {if (ser_par_config [i+1]) outputStr+= "||"; else outputStr + = " +"; }} annet pause; }} /* Beregner den beste kombinasjonen av kondensatorer for å oppnå en målverdi. * cap - input array av kondensatorverdier * num_cap - størrelsen på input array av kondensatorverdier * num_comb - antall kondensatorer tillatt * indeks - indeks for kam * kam - array av nåværende kombinasjon * mål - målverdien * Ingen returverdi - sender gjeldende beste kombinasjon til globale verdier */ function capCombination (cap, num_cap, num_comb, index, comb, target) {// nåværende kombinasjon er fullført hvis (index == num_comb) {var ser_par_size = Math.pow (2, num_comb); // 2^(antall komponenter) var ser_par = ; // bool array som spesifiserer seriell eller parallell for hver komponent var calc; // beregnet ekvivalent kapasitansverdi // gå gjennom alle mulige serier/parallelle konfigurasjoner av nåværende kombinasjon for (var j = 0; j k) & 1; } // gjør beregningene for kombinasjonen basert på serie/parallell kombinasjon for (var k = 0; k

Anbefalt: