Indholdsfortegnelse:

Sådan opnås enhver modstand/kapacitans ved hjælp af komponenter, du allerede har !: 6 trin
Sådan opnås enhver modstand/kapacitans ved hjælp af komponenter, du allerede har !: 6 trin

Video: Sådan opnås enhver modstand/kapacitans ved hjælp af komponenter, du allerede har !: 6 trin

Video: Sådan opnås enhver modstand/kapacitans ved hjælp af komponenter, du allerede har !: 6 trin
Video: LÆDRYGSMERTE OG METABOLISK SYNDROM Dag 3 2024, November
Anonim
Sådan opnås enhver modstand/kapacitans ved hjælp af komponenter, du allerede har!
Sådan opnås enhver modstand/kapacitans ved hjælp af komponenter, du allerede har!

Dette er ikke bare endnu en serie/parallelækvivalent modstandsberegner! Dette program beregner, hvordan man kombinerer modstande/kondensatorer, som du i øjeblikket har for at opnå en målmodstand/kapacitansværdi, du har brug for.

Har du nogensinde haft brug for en bestemt modstand eller kondensator, som du ikke har, eller som ikke findes? Vær ikke bange! Du kan sandsynligvis lave den specifikke modstand eller kapacitansværdi ved hjælp af komponenter, du allerede har. I stedet for at løse et kæmpe multivariabelt optimeringsproblem med millioner af forskellige kombinationer, skal du bruge dette program!

Vælg bare modstand eller kondensator, indtast målværdien, indtast det maksimale antal komponenter, du gerne vil bruge, indtast en liste over værdierne for de komponenter, du har, og klik på Beregn! Programmet spytter ud, hvilke komponenter der skal bruges, og hvordan man forbinder dem for at nå din målværdi.

Besøg denne webapplikation for at prøve lommeregneren.

For at se kildekoden skal du besøge dette Github -lager.

Lad mig vide, hvis du har forslag til yderligere at forbedre anvendeligheden af dette designværktøj!

Trin 1: Baggrund

Baggrund
Baggrund

Denne webapplikation blev udviklet af nødvendighed. Der er mange forskellige kredsløb, jeg konstruerer, der kræver en meget specifik modstand eller kondensator. Mange gange har jeg ikke en modstand eller kondensator med den specifikke værdi. Nogle gange laver de ikke engang en komponent med den unikke værdi! I stedet for at opgive eller nøjes med noget, der er mindre end ideelt, besluttede jeg at skrive et program for at se på enhver mulig kombination af modstande (hver mulig værdi og om de er i serie eller parallel) og returnere den bedste kombination.

Da jeg designede kredsløbet til mit orgel som en del af mit Battle of the Bands Instructable Project, måtte jeg prøve at beregne den bedste kombination af kondensatorer for at opnå en bestemt frekvens. Denne proces var utrolig kedelig, og jeg gav til sidst bare op og gik med kondensatorkombinationer, der producerede enhver mængde hørbar frekvens. Nu med denne webapplikation kan jeg designe mit orgel til en bestemt frekvens og stille det til noterne på et tastatur! Nedenstående ligning bruges til at beregne den specifikke frekvens og diskuteres i det andet Instructables -projekt.

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

Ved hjælp af denne ligning, hvor R1 = 100 kOhm og R2 = 10 kOhm, beregnede jeg, at en 27,33 nF kondensator vil producere en A4 -note (frekvens 440 Hz). Ved hjælp af mit program kunne jeg beregne en ækvivalent kapacitansværdi inden for.001 nF (meget mindre end tolerancen på en standardkondensator), som jeg kan oprette ved hjælp af kondensatorer, jeg allerede havde liggende. Den resulterende output og konfiguration er beskrevet nedenfor. Jeg er nu i stand til meget mere effektivt og effektivt at indstille mit orgel til de nøjagtige frekvenser af standardnoter. Jeg ville ønske, at jeg havde gjort dette til at begynde med. Min demosang på orgelet ville nok have lydt meget bedre.

Nærmeste værdi: 27.329 nF Forskel: 0.001 nFCapacitor konfiguration: C0 = 0.068 nF || C1 = 30 nF + C2 = 300 nF

Modstandskondensatorækvivalensligninger

Til reference er nedenstående ækvivalensligninger til kombination af modstande og kondensatorer i et kredsløb.

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

Trin 2: Inputs

Indgange
Indgange

Der er 4 input, du skal levere:

  1. Uanset om du beregner en værdi for en modstand eller en kondensator.
  2. Målmodstanden eller kapacitansværdien og enhederne.
  3. Det maksimale antal komponenter, du gerne vil bruge til at nå målværdien (dvs. jeg vil ikke bruge mere end 3 modstande til at nå min målmodstandsværdi).
  4. Listen over værdier for de modstande/kondensatorer, du i øjeblikket har. Disse værdier skal være i de samme enheder som din målværdi (dvs. hvis din målværdi var 110 nF, skal alle dine værdier angives i nF).

Trin 3: Resultat

Resultat
Resultat

Du får 3 output til dit resultat:

  1. Nærmeste værdi - den nærmeste modstands-/kapacitansværdi, du var i stand til at opnå med dine parametre.
  2. Forskel - hvor langt væk din nærmeste værdi var fra din målværdi.
  3. Modstand/kondensator konfiguration - en liste over værdier for de modstande/kondensatorer, der skal bruges, og deres konfiguration.

Trin 4: Forstå dit resultat

Forstå dit resultat
Forstå dit resultat
Forstå dit resultat
Forstå dit resultat

Konfigurationsoutputtet bruger en standardnotation. "+" betyder, at komponenterne er i serie og "||" betyder, at komponenterne er parallelle. Operatørerne har samme forrang og er associative fra venstre til højre, hvilket betyder, at du grupperer udtryk sammen fra venstre og til højre.

Tag for eksempel et kig på følgende resultat:

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

Hvis du følger ovenstående retningslinjer, kan du se, at dette svarer til følgende ligning og billede ovenfor.

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

Trin 5: Flere projekter

For flere projekter, besøg mine sider:

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

Trin 6: Kildekode

For at se kildekoden skal du besøge dette Github -lager eller se JavaScript nedenfor.

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

/* r/c lommeregner scripting*//* --------------------------------------- -------------------------*/ var nærmeste_val; // nærmeste værdi hidtil var nærmeste_diff = 1000000.00; // diff af val og target var tættest = ; // array -detaljeringsværdier for komponenter var ser_par_config = ; // array med detaljerede serielle/parallelle var outputStr = ""; function calculatorClick () {// rydde globale værdier for hvert nyt klik nærmest_val = 0; nærmeste_diff = 1000000,00; tættest = ; 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; // fejl i parsing af målværdi hvis (isNaN (target)) {outputStr = "Fejlcheck 'Target Value' input!"} // fejl i parsing af antal komponenter ellers hvis (isNaN (numComp)) {outputStr = "Fejlcheck 'Antal komponenters input! "} // ellers hvis ingen fejl i målet eller numComp ellers hvis (! IsNaN (mål) &&! IsNaN (numComp)) {while (compValsStr.indexOf (", ")! = -1) {var komma = compValsStr.indexOf (","); var newInt = parseFloat (compValsStr.substring (0, komma)); // fejl i analysen af komponentværdiliste, angiv flag hvis (isNaN (newInt)) {errFlag = 1; pause; } compValsStr = compValsStr.substring (komma+1, compValsStr.length); compVals = newInt; i ++; } var newInt = parseFloat (compValsStr); // fejl i analysen af komponentværdiliste, angiv flag hvis (isNaN (newInt)) {errFlag = 1; } compVals = newInt; if (errFlag == 0) {if (document.getElementById ("resRadio"). markeret) {resistor (target, numComp, compVals); } ellers hvis (document.getElementById ("capRadio"). kontrolleret) {kondensator (target, numComp, compVals); }}} // fejl ved parsing af komponentværdiliste ellers {outputStr = "Fejlcheck 'Komponentværdiliste' input!"}} calcOutput.innerHTML = outputStr; resultDisplay.style.display = "blok"; eksempelDisplay.style.display = "flex"; // rul ned til resultatvindue.scrollTo (0, exampleDisplay.scrollHeight); } / * Henter og udskriver den bedste modstandskonfiguration * mål - målmodstandsværdi * numComp - samlet antal modstande, der må bruges til at opnå målværdi * compVals - array af modstandsværdier * / funktionsmodstand (target, numComp, compVals) { // længde på modstandsværdier var num_res = compVals.length; // gennemgå alle mulige antal komponenter for (var i = 1; i <= numComp; i ++) {var data = ; resCombination (compVals, num_res, i, 0, data, target); } var units = document.getElementById ("selected_unit"). værdi; // udskriftsresultater outputStr = "Nærmeste værdi:" + nærmeste_værdi.tilFikseret (3) + "" + enheder + ""; outputStr + = "Difference:" + close_diff.toFixed (3) + "" + units + ""; outputStr += "Modstandskonfiguration:"; for (var i = 0; i <numComp; i ++) {if (i <nærmest.længde) {outputStr + = "R" + i + "=" + nærmeste + "" + enheder + ""; hvis (i+1 <nærmeste.længde) {if (ser_par_config [i+1]) outputStr+= "||"; ellers outputStr + = " +"; }} ellers pause; }} /* Beregner den bedste kombination af modstande for at opnå en målværdi. * res - input array af modstandsværdier * num_res - størrelse af input array af modstandsværdier * num_comb - antal modstande tilladt * index - indeks for kam * kam - array af nuværende kombination * target - målværdien * Ingen returværdi - sender den nuværende bedste kombination til globale værdier */ function resCombination (res, num_res, num_comb, index, comb, target) {// nuværende kombination er fuldført, hvis (index == num_comb) {var ser_par_size = Math.pow (2, num_comb); // 2^(antal komponenter) var ser_par = ; // bool -array, der angiver seriel eller parallel for hver komponent var calc; // beregnet ækvivalent modstandsværdi // gå igennem alle mulige serier/parallelle konfigurationer af den nuværende kombination for (var j = 0; j k) & 1; } // foretag beregningerne for kombinationen baseret på serie/parallel kombination for (var k = 0; k <num_comb; k ++) {// første tal, tilføj bare hvis (k == 0) calc = kam [k]; // nul betyder serie, tilføj modstandsværdier ellers hvis (! ser_par [k]) calc += kam [k]; // en betyder parallel, omvendt af summen af gensidige andre hvis (ser_par [k]) calc = (calc*kam [k])/(calc+kam [k]); } // tjek for at se, om forskellen er mindre end tidligere bedst, hvis (Math.abs (calc - target) <close_diff) {// det er mindre, så opdater globale værdier close_val = calc; nærmeste_diff = Math.abs (beregning - mål); // klar til nul for (var k = 0; k <num_comb; k ++) {nærmeste [k] = 0; } // opdater nærmeste værdi & serie/parallelle arrays for (var k = 0; k <num_comb; k ++) {nærmeste [k] = kam [k]; ser_par_config [k] = ser_par [k]; }}} returner 0; } // kalder rekursivt og udskift indekset med alle mulige værdier for (var i = 0; i = num_comb-index; i ++) {comb [index] = res ; resCombination (res, num_res, num_comb, index+1, kam, target); }} / * Henter og udskriver den bedste kondensatorkonfiguration * mål - målkapacitansværdi * numComp - samlet antal kondensatorer, der må bruges til at opnå målværdi * compVals - array af kondensatorværdier * / funktionskondensator (target, numComp, compVals) {// længde af kapacitansværdier var num_cap = compVals.length; // gennemgå alle mulige antal komponenter for (var i = 1; i <= numComp; i ++) {var data = ; capCombination (compVals, num_cap, i, 0, data, target); } var units = document.getElementById ("selected_unit"). værdi; // udskriftsresultater outputStr = "Nærmeste værdi:" + nærmeste_værdi.tilFikseret (3) + "" + enheder + ""; outputStr + = "Difference:" + close_diff.toFixed (3) + "" + units + ""; outputStr += "Kondensatorkonfiguration:"; for (var i = 0; i <numComp; i ++) {if (i <nærmest.længde) {outputStr + = "C" + i + "=" + tætteste + "" + enheder + ""; hvis (i+1 <nærmeste.længde) {if (ser_par_config [i+1]) outputStr+= "||"; ellers outputStr + = " +"; }} ellers pause; }} /* Beregner den bedste kombination af kondensatorer for at opnå en målværdi. * cap - input array af kondensatorværdier * num_cap - størrelse på input array af kondensatorværdier * num_comb - antal kondensatorer tilladt * index - indeks for kam * kam - array af nuværende kombination * mål - målværdien * Ingen returværdi - sender den nuværende bedste kombination til globale værdier */ function capCombination (cap, num_cap, num_comb, index, comb, target) {// nuværende kombination er fuldført, hvis (index == num_comb) {var ser_par_size = Math.pow (2, num_comb); // 2^(antal komponenter) var ser_par = ; // bool -array, der angiver seriel eller parallel for hver komponent var calc; // beregnet ækvivalent kapacitansværdi // trin igennem alle mulige serier/parallelle konfigurationer af den nuværende kombination for (var j = 0; j k) & 1; } // foretag beregningerne for kombinationen baseret på serie/parallel kombination for (var k = 0; k

Anbefalede: