Inhoudsopgave:

Hoe u weerstand/capaciteit kunt bereiken met behulp van componenten die u al heeft! - Ajarnpa
Hoe u weerstand/capaciteit kunt bereiken met behulp van componenten die u al heeft! - Ajarnpa

Video: Hoe u weerstand/capaciteit kunt bereiken met behulp van componenten die u al heeft! - Ajarnpa

Video: Hoe u weerstand/capaciteit kunt bereiken met behulp van componenten die u al heeft! - Ajarnpa
Video: TIM VAN ORSOUW - ZO LOS JE CHRONISCHE PIJN OP : DE TRIGGEPOINT RESET METHODE 2024, November
Anonim
Hoe u weerstand/capaciteit kunt bereiken met behulp van componenten die u al heeft!
Hoe u weerstand/capaciteit kunt bereiken met behulp van componenten die u al heeft!

Dit is niet zomaar een serie/parallel equivalente weerstandscalculator! Dit programma berekent hoe u weerstanden/condensatoren kunt combineren die u momenteel hebt om een gewenste weerstand/capaciteitswaarde te bereiken die u nodig heeft.

Heb je ooit een specifieke weerstand of condensator nodig gehad die je niet hebt of die niet bestaat? Geen schrik hebben! U kunt die specifieke weerstands- of capaciteitswaarde waarschijnlijk maken met componenten die u al heeft. Gebruik dit programma in plaats van een enorm multivariabel optimalisatieprobleem met miljoenen verschillende combinaties op te lossen!

Selecteer gewoon weerstand of condensator, voer de doelwaarde in, voer het maximale aantal componenten in dat u wilt gebruiken, voer een lijst in met de waarden van de componenten die u heeft en klik op berekenen! Het programma spuugt uit welke componenten u moet gebruiken en hoe u deze kunt verbinden om uw doelwaarde te bereiken.

Bezoek deze webapplicatie om de rekenmachine uit te proberen.

Ga naar deze Github-repository om de broncode te bekijken.

Laat het me weten als je suggesties hebt om de bruikbaarheid van deze ontwerptool verder te verbeteren!

Stap 1: Achtergrond

Achtergrond
Achtergrond

Deze webapplicatie is uit noodzaak ontwikkeld. Er zijn veel verschillende circuits die ik bouw die een zeer specifieke weerstand of condensator vereisen. Vaak heb ik geen weerstand of condensator met die specifieke waarde. Soms maken ze niet eens een onderdeel met die unieke waarde! In plaats van op te geven of genoegen te nemen met iets dat niet ideaal is, besloot ik een programma te schrijven om naar elke mogelijke combinatie van weerstanden te kijken (elke mogelijke waarde en of ze in serie of parallel zijn) en de beste combinatie terug te geven.

Bij het ontwerpen van het circuit voor mijn orgel als onderdeel van mijn Battle of the Bands Instructable Project, moest ik proberen de beste combinatie van condensatoren met de hand te berekenen om een specifieke frequentie te bereiken. Dit proces was ongelooflijk vervelend en ik gaf het uiteindelijk gewoon op en ging met condensatorcombinaties die elke hoeveelheid hoorbare frequentie produceerden. Met deze webapplicatie kan ik nu mijn orgel ontwerpen voor een specifieke frequentie en het afstemmen op de noten op een toetsenbord! De onderstaande vergelijking wordt gebruikt om de specifieke frequentie te berekenen en wordt besproken in het andere Instructables-project.

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

Met behulp van deze vergelijking, waarbij R1 = 100 kOhm en R2 = 10 kOhm, heb ik berekend dat een condensator van 27,33 nF een A4-noot zal produceren (frequentie 440 Hz). Met behulp van mijn programma kon ik een equivalente capaciteitswaarde berekenen binnen.001 nF (veel minder dan de tolerantie op een standaardcondensator) die ik kan maken met condensatoren die ik al had liggen. De resulterende uitvoer en configuratie wordt hieronder beschreven. Ik ben nu in staat om mijn orgel veel efficiënter en effectiever af te stemmen op de exacte frequenties van standaardnoten. Ik wou dat ik dit had gedaan om mee te beginnen. Mijn demosong op het orgel had waarschijnlijk veel beter geklonken.

Dichtstbijzijnde waarde: 27,329 nF Verschil: 0,001 nFCapacitorconfiguratie: C0=0,068 nF || C1=30 nF + C2=300 nF

Weerstand Condensator Equivalentie Vergelijkingen

Ter referentie staan hieronder de equivalentievergelijkingen voor het combineren van weerstanden en condensatoren in een circuit.

  • Weerstanden in serie (R1 + R2): Req = R1 + R2
  • Weerstanden parallel (R1 || R2): Req = 1 / (1/R1 + 1/R2)
  • Condensatoren in serie (C1 + C2): Ceq = 1 / (1/C1 + 1/C2)
  • Condensatoren parallel (C1 || C2): Ceq = C1 + C2

Stap 2: Ingangen

Ingangen
Ingangen

Er zijn 4 ingangen die u moet verstrekken:

  1. Of u nu een waarde berekent voor een weerstand of een condensator.
  2. De doelweerstand of capaciteitswaarde en de eenheden.
  3. Het maximale aantal componenten dat u wilt gebruiken om de doelwaarde te bereiken (d.w.z. ik zou niet meer dan 3 weerstanden willen gebruiken om mijn doelweerstandswaarde te bereiken).
  4. De lijst met waarden voor de weerstanden/condensatoren die u momenteel heeft. Deze waarden moeten in dezelfde eenheden zijn als uw streefwaarde (d.w.z. als uw streefwaarde 110 nF was, moeten al uw waarden in nF worden opgegeven).

Stap 3: Resultaat

Resultaat
Resultaat

Je krijgt 3 outputs voor je resultaat:

  1. Dichtstbijzijnde waarde - de dichtstbijzijnde weerstands-/capaciteitswaarde die u met uw parameters kon bereiken.
  2. Verschil - hoe ver uw dichtstbijzijnde waarde verwijderd was van uw streefwaarde.
  3. Weerstand/condensatorconfiguratie - een lijst met waarden van de te gebruiken weerstanden/condensatoren en hun configuratie.

Stap 4: Uw resultaat begrijpen

Uw resultaat begrijpen
Uw resultaat begrijpen
Uw resultaat begrijpen
Uw resultaat begrijpen

De configuratie-uitvoer gebruikt een standaardnotatie. "+" betekent dat de componenten in serie staan en "||" betekent dat de componenten parallel staan. De operatoren hebben dezelfde prioriteit en zijn associatief van links naar rechts, wat betekent dat u termen groepeert, beginnend van links en naar rechts verplaatsend.

Kijk bijvoorbeeld eens naar het volgende resultaat:

Weerstandsconfiguratie: R0=15 Ohm + R1=470 Ohm || R2=3300 Ohm + R3=15000 Ohm

Als u de hierboven besproken richtlijnen volgt, kunt u zien dat dit overeenkomt met de volgende vergelijking en afbeelding hierboven.

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

Stap 5: Meer projecten

Bezoek mijn pagina's voor meer projecten:

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

Stap 6: Broncode

Ga naar deze Github-repository of bekijk het onderstaande JavaScript om de broncode te bekijken.

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

/* r/c rekenmachine scripting */ /* --------------------------------------- -------------------------*/ var dichtste_val; // dichtstbijzijnde waarde tot nu toe var close_diff = 1000000.00; // diff van val en doel var dichtst = ; // array detaillering waarden van componenten var ser_par_config = ; // array detaillering serieel/parallel var outputStr = ""; function calculatorClick() {// verwijder globale waarden voor elke nieuwe klik close_val = 0; dichtstbijzijnde_diff = 1000000.00; dichtstbijzijnde = ; ser_par_config = ; var resultDisplay = document.getElementById("resultRow"); var voorbeeldDisplay = document.getElementById("exampleRow"); var calcOutput = document.getElementById("calcOutput"); var targetTextObj = document.getElementById('targetText'); var numCompTextObj = document.getElementById('numCompText'); var compValsTextObj = document.getElementById('compValsText'); var doel = parseFloat(targetTextObj.value); var numComp = parseInt(numCompTextObj.value); var compValsStr = compValsTextObj.waarde; var compVals = ; compVals[0] = ""; var i = 0; var errFlag = 0; // fout bij het parseren van de doelwaarde if (isNaN(target)) { outputStr = "Foutcontrole bij 'Target Value' input! " } // fout bij het parseren van het aantal componenten else if (isNaN(numComp)) { outputStr = "Foutcontrole 'Aantal componenten' invoer! " } // else als er geen fout is in doel of numComp else if (!isNaN(target) && !isNaN(numComp)) { while (compValsStr.indexOf(", ") != -1) { var komma = compValsStr.indexOf(", "); var newInt = parseFloat(compValsStr.substring(0, komma)); // fout bij het ontleden van de lijst met componentenwaarden, stel de vlag in als (isNaN (newInt)) { errFlag = 1; pauze; } compValsStr = compValsStr.substring (komma+1, compValsStr.lengte); compVals = newInt; i++; } var newInt = parseFloat(compValsStr); // fout bij het ontleden van de lijst met componentenwaarden, stel de vlag in als (isNaN (newInt)) { errFlag = 1; } compVals = newInt; if (errFlag == 0) {if (document.getElementById ("resRadio").checked) { weerstand (doel, numComp, compVals); } else if (document.getElementById("capRadio").checked) {condensator(target, numComp, compVals); } } // fout bij het ontleden van de componentwaardelijst else { outputStr = "Fout bij het controleren van 'Componentwaardenlijst' input! " } } calcOutput.innerHTML = outputStr; resultDisplay.style.display = "blokkeren"; voorbeeldDisplay.style.display = "flex"; // scrol omlaag naar resultaat window.scrollTo(0, exampleDisplay.scrollHeight); } /* Haalt de beste weerstandsconfiguratie op en drukt deze af * doel - doelweerstandswaarde * numComp - totaal aantal weerstanden dat mag worden gebruikt om de doelwaarde te bereiken * compVals - reeks weerstandswaarden */ functieweerstand (doel, numComp, compVals) { // lengte van weerstandswaarden var num_res = compVals.length; // doorloop alle mogelijke componenten voor (var i=1; i<=numComp; i++) {var data = ; resCombination(compVals, num_res, i, 0, data, target); } var units = document.getElementById("selected_unit").value; // print results outputStr = "Beste waarde: " + dichtste_val.toFixed(3) + " " + eenheden + " "; outputStr += "Verschil: " + dichtste_diff.toFixed(3) + " " + eenheden + " "; outputStr += "Weerstandconfiguratie: "; for (var i=0; i<numComp; i++) { if (i<closest.length) { outputStr += "R" + i + "=" + dichtstbij + " " + units + " "; if (i+1<dichtstbijzijnde lengte) { if (ser_par_config[i+1]) outputStr += "|| "; anders outputStr += "+ "; } } anders breken; } } /* Berekent de beste combinatie van weerstanden om een doelwaarde te bereiken. * res - input array van weerstandswaarden * num_res - grootte van input array van weerstandswaarden * num_comb - aantal toegestane weerstanden * index - index van comb * comb - array van huidige combinatie * target - de doelwaarde * Geen retourwaarde - geeft huidige beste combinatie door aan globale waarden */ functie resCombination(res, num_res, num_comb, index, comb, target) {// huidige combinatie is compleet als (index == num_comb) { var ser_par_size = Math.pow (2, num_comb); // 2^(aantal componenten) var ser_par = ; // bool-array die serieel of parallel specificeert voor elke component var calc; // berekende equivalente weerstandswaarde // stap door elke mogelijke serie/parallelle configuratie van huidige combinatie voor (var j=0; j k) & 1; } // voer de berekeningen uit voor de combinatie op basis van serie/parallelle combo voor (var k=0; k<num_comb; k++) { // eerste getal, voeg gewoon if (k==0) calc = comb[k]; // nul betekent serie, voeg weerstandswaarden anders toe als (!ser_par[k]) calc += comb[k]; // men betekent parallel, inverse van de som van reciprocals else if (ser_par[k]) calc = (calc*comb[k])/(calc+comb[k]); } // controleer of het verschil kleiner is dan de vorige best if (Math.abs(calc - target) <closest_diff) { // het is kleiner, dus update globale waarden close_val = calc; close_diff = Math.abs(calc - doel); // wissen naar nul voor (var k=0; k<num_comb; k++) { dichtstbijzijnde [k] = 0; } // update dichtstbijzijnde waarde & series/parallelle arrays voor (var k=0; k<num_comb; k++) { close[k] = comb[k]; ser_par_config[k] = ser_par[k]; } } } retourneer 0; } // roep recursief de index aan en vervang deze door alle mogelijke waarden voor (var i=0; i= num_comb-index; i++) { comb[index] = res; resCombination(res, num_res, num_comb, index+1, comb, target); } } /* Haalt de beste condensatorconfiguratie op en drukt deze af * doel - doelcapaciteitswaarde * numComp - totaal aantal condensatoren dat mag worden gebruikt om doelwaarde te bereiken * compVals - reeks condensatorwaarden */ functiecondensator (doel, numComp, compVals) {// lengte van capaciteitswaarden var num_cap = compVals.length; // doorloop alle mogelijke componenten voor (var i=1; i<=numComp; i++) {var data = ; capCombination(compVals, num_cap, i, 0, data, target); } var units = document.getElementById("selected_unit").value; // print results outputStr = "Beste waarde: " + close_val.toFixed(3) + " " + units + " "; outputStr += "Verschil: " + dichtste_diff.toFixed(3) + " " + eenheden + " "; outputStr += "Configuratie condensator: "; for (var i=0; i<numComp; i++) { if (i<closest.length) { outputStr += "C" + i + "=" + dichtstbij + " " + units + " "; if (i+1<dichtstbijzijnde lengte) { if (ser_par_config[i+1]) outputStr += "|| "; anders outputStr += "+ "; } } anders breken; } } /* Berekent de beste combinatie van condensatoren om een doelwaarde te bereiken. * cap - invoerarray van condensatorwaarden * num_cap - grootte van invoerarray van condensatorwaarden * num_comb - aantal toegestane condensatoren * index - index van comb * comb - array van huidige combinatie * target - de doelwaarde * Geen retourwaarde - geeft huidige beste combinatie door aan globale waarden */ function capCombination(cap, num_cap, num_comb, index, comb, target) {// huidige combinatie is compleet als (index == num_comb) { var ser_par_size = Math.pow (2, num_comb); // 2^(aantal componenten) var ser_par = ; // bool-array die serieel of parallel specificeert voor elke component var calc; // berekende equivalente capaciteitswaarde // stap door elke mogelijke serie/parallelle configuratie van huidige combinatie voor (var j=0; j k) & 1; } // voer de berekeningen uit voor de combinatie op basis van serie/parallelle combo voor (var k=0; k

Aanbevolen: