Sisällysluettelo:

Kuinka saavuttaa vastus/kapasiteetti käyttämällä jo olemassa olevia komponentteja!: 6 vaihetta
Kuinka saavuttaa vastus/kapasiteetti käyttämällä jo olemassa olevia komponentteja!: 6 vaihetta

Video: Kuinka saavuttaa vastus/kapasiteetti käyttämällä jo olemassa olevia komponentteja!: 6 vaihetta

Video: Kuinka saavuttaa vastus/kapasiteetti käyttämällä jo olemassa olevia komponentteja!: 6 vaihetta
Video: "Vain elämää" - 6/8 Filosofia ja systeemiajattelu 2021 prof. Esa Saarinen 2024, Heinäkuu
Anonim
Kuinka saavuttaa vastus/kapasiteetti käyttämällä jo olemassa olevia komponentteja!
Kuinka saavuttaa vastus/kapasiteetti käyttämällä jo olemassa olevia komponentteja!

Tämä ei ole vain toinen sarja/rinnakkainen vastaava vastuslaskin! Tämä ohjelma laskee kuinka yhdistää nykyisin tarvittavat vastukset/kondensaattorit, jotta saavutetaan tarvittava vastus/kapasitanssi.

Oletko koskaan tarvinnut tiettyä vastusta tai kondensaattoria, jota sinulla ei ole tai jota ei ole olemassa? Älä pelkää! Voit luultavasti tehdä kyseisen vastuksen tai kapasitanssin arvon käyttämällä jo olemassa olevia komponentteja. Sen sijaan, että ratkaisisit valtavan monimuuttujaisen optimointitehtävän miljoonilla eri yhdistelmillä, käytä tätä ohjelmaa!

Valitse vain vastus tai kondensaattori, syötä tavoitearvo, syötä käytettävien komponenttien enimmäismäärä, kirjoita luettelo komponenttien arvoista ja napsauta laskea! Ohjelma sylkee mitä komponentteja käyttää ja miten ne liitetään tavoitearvon saavuttamiseksi.

Voit kokeilla laskinta tällä verkkosovelluksella.

Voit tarkastella lähdekoodia käymällä tässä Github -arkistossa.

Kerro minulle, jos sinulla on ehdotuksia tämän suunnittelutyökalun käytettävyyden parantamiseksi!

Vaihe 1: Taustaa

Tausta
Tausta

Tämä verkkosovellus on kehitetty tarpeettomasti. Rakennan monia erilaisia piirejä, jotka vaativat hyvin tietyn vastuksen tai kondensaattorin. Monta kertaa minulla ei ole vastusta tai kondensaattoria, jolla on tietty arvo. Joskus he eivät edes tee komponenttia, jolla on ainutlaatuinen arvo! Sen sijaan, että luovuttaisin tai tyytyisin johonkin, joka on vähemmän kuin ihanteellinen, päätin kirjoittaa ohjelman, jossa tarkastellaan kaikkia mahdollisia vastuksen yhdistelmiä (kaikki mahdolliset arvot ja riippumatta siitä, ovatko ne sarjassa vai rinnakkain) ja palautan parhaan yhdistelmän.

Suunnitellessani virtapiiriäni urulleni osana Battle of the Bands Instructable Project -projektiani minun piti yrittää laskea käsin paras kondensaattoreiden yhdistelmä tietyn taajuuden saavuttamiseksi. Tämä prosessi oli uskomattoman tylsä, ja lopulta vain luovutin ja lähdin käyttämään kondensaattoriyhdistelmiä, jotka tuottivat mitä tahansa äänitaajuutta. Nyt tämän verkkosovelluksen avulla voin suunnitella urut tietylle taajuudelle ja virittää sen näppäimistön nuotteihin! Alla olevaa yhtälöä käytetään tietyn taajuuden laskemiseen, ja siitä keskustellaan toisessa Instructables -projektissa.

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

Käyttämällä tätä yhtälöä, jossa R1 = 100 kOhm ja R2 = 10 kOhm, laskin, että 27,33 nF: n kondensaattori tuottaa A4 -muistiinpanon (taajuus 440 Hz). Ohjelmani avulla pystyin laskemaan vastaavan kapasitanssin arvon 0,001 nF: n sisällä (paljon pienempi kuin vakiokondensaattorin toleranssi), jonka voin luoda käyttämällä kondensaattoreita, jotka minulla jo oli. Tulos ja kokoonpano on kuvattu alla. Pystyn nyt virittämään urut paljon tehokkaammin ja tehokkaammin tavallisten nuottien tarkalle taajuudelle. Toivon, että olisin tehnyt tämän aluksi. Demolauluni uruilla olisi luultavasti kuulostanut paljon paremmalta.

Lähin arvo: 27.329 nF Ero: 0.001 nFCapacitor Configuration: C0 = 0.068 nF || C1 = 30 nF + C2 = 300 nF

Vastuskondensaattorin ekvivalenssiyhtälöt

Alla on vertailua varten yhtälöt vastuksen ja kondensaattorin yhdistämiseksi piiriin.

  • Sarjavastukset (R1 + R2): Req = R1 + R2
  • Vastukset rinnakkain (R1 || R2): Req = 1/(1/R1 + 1/R2)
  • Kondensaattorit sarjaan (C1 + C2): Ceq = 1/(1/C1 + 1/C2)
  • Kondensaattorit rinnakkain (C1 || C2): Ceq = C1 + C2

Vaihe 2: Tulot

Tulot
Tulot

Sinun on annettava 4 tuloa:

  1. Laskeko arvoa vastukselle tai kondensaattorille.
  2. Tavoiteresistanssi tai kapasitanssiarvo ja yksiköt.
  3. Komponenttien enimmäismäärä, jota haluat käyttää tavoitearvon saavuttamiseen (eli en halua käyttää enempää kuin 3 vastusta tavoiteresistanssiarvon saavuttamiseen).
  4. Luettelo arvoista nykyisillä vastuksilla/kondensaattoreilla. Näiden arvojen on oltava samoissa yksiköissä kuin tavoitearvo (eli jos tavoitearvo oli 110 nF, kaikki arvot on annettava nF: nä).

Vaihe 3: Tulos

Tulos
Tulos

Saat 3 lähtöä tuloksellesi:

  1. Lähin arvo - lähin vastus-/kapasitanssiarvo, jonka pystyit saavuttamaan parametreillasi.
  2. Ero - kuinka kaukana lähin arvo oli tavoitearvostasi.
  3. Vastus/kondensaattorin kokoonpano - luettelo käytettävien vastuksien/kondensaattoreiden arvoista ja niiden kokoonpanosta.

Vaihe 4: Tuloksen ymmärtäminen

Tuloksen ymmärtäminen
Tuloksen ymmärtäminen
Tuloksen ymmärtäminen
Tuloksen ymmärtäminen

Konfigurointilähtö käyttää vakiomerkintää. "+" tarkoittaa, että komponentit ovat sarjassa ja "||" tarkoittaa, että komponentit ovat rinnakkain. Operaattoreilla on sama etuoikeus ja ne ovat vasemmalta oikealle assosiatiivisia, mikä tarkoittaa, että ryhmität termejä yhteen alkaen vasemmalta ja siirtymällä oikealle.

Katso esimerkiksi seuraavaa tulosta:

Vastuksen kokoonpano: R0 = 15 ohmia + R1 = 470 ohmia || R2 = 3300 ohmia + R3 = 15000 ohmia

Jos noudatat yllä keskusteltuja ohjeita, näet, että tämä vastaa seuraavaa yhtälöä ja kuvaa yllä.

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

Vaihe 5: Lisää projekteja

Lisää projekteja löydät sivuiltani:

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

Vaihe 6: Lähdekoodi

Voit tarkastella lähdekoodia käymällä tässä Github -arkistossa tai tutustu alla olevaan JavaScriptiin.

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

/* r/c-laskimen komentosarja*//* --------------------------------------- -------------------------*/ var lähimpi_valo; // tähän mennessä lähin arvo var lähimpi_diff = 1000000,00; // valin ja kohdevarin ero lähimpänä = ; // matriisi, jossa kerrotaan komponenttien arvot var ser_par_config = ; // taulukko, jossa kerrotaan sarja-/rinnakkaismuunnoksesta var outputStr = ""; function calculatorClick () {// tyhjennä yleiset arvot jokaiselle uudelle napsautukselle lähimpi_val = 0; lähin_diff = 1000000,00; lähin = ; 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; // virhe kohdearvon jäsentämisessä, jos (isNaN (kohde)) {outputStr = "Virheentarkistus 'Target Value' input!"} // virhe jäsennettäessä komponenttien lukumäärää else if (isNaN (numComp)) {outputStr = "Virheentarkistus 'Komponenttien lukumäärän syöttö! "} // else, jos kohteessa ei ole virhettä tai numComp else if (! IsNaN (kohde) &&! IsNaN (numComp)) {while (compValsStr.indexOf (", ")! = -1) {var. pilkku = compValsStr.indexOf (","); var newInt = parseFloat (compValsStr.substring (0, pilkku)); // virhe jäsennettäessä komponenttien arvoluetteloa, aseta lippu if (isNaN (newInt)) {errFlag = 1; tauko; } compValsStr = compValsStr.substring (pilkku+1, compValsStr.length); compVals = newInt; i ++; } var newInt = parseFloat (compValsStr); // virhe jäsennettäessä komponenttien arvoluetteloa, aseta lippu if (isNaN (newInt)) {errFlag = 1; } compVals = newInt; if (errFlag == 0) {if (document.getElementById ("resRadio"). tarkistettu) {resistor (target, numComp, compVals); } else if (document.getElementById ("capRadio"). tarkistettu) {kondensaattori (tavoite, numComp, compVals); }} // virhe jäsennettäessä komponenttien arvoluetteloa else {outputStr = "Virheentarkistus 'Komponenttien arvoluettelon syöttö!"}} calcOutput.innerHTML = outputStr; resultDisplay.style.display = "lohko"; exampleDisplay.style.display = "flex"; // vieritä alas tulosikkunaan.scrollTo (0, exampleDisplay.scrollHeight); } / * Noutaa ja tulostaa parhaan vastuksen kokoonpanon * tavoite - tavoiteresistanssiarvo * numComp - vastusten kokonaismäärä, joita voidaan käyttää tavoitearvon saavuttamiseen * compVals - vastusarvojen matriisi * / toimintovastus (tavoite, numComp, compVals) { // vastusarvojen pituus var num_res = compVals.length; // ajaa läpi kaikki mahdolliset komponentit (var i = 1; i <= numComp; i ++) {var data = ; resCombination (compVals, num_res, i, 0, data, target); } var yksiköt = document.getElementById ("selected_unit"). arvo; // tulostustulokset outputStr = "Lähin arvo:" + lähinnä_val.toKiinteä (3) + "" + yksikköä + ""; outputStr + = "Ero:" + lähin_diff.toKiinteä (3) + "" + yksikköä + ""; outputStr += "Vastuksen kokoonpano:"; for (var i = 0; i <numComp; i ++) {jos (i <lähin.pituus) {outputStr + = "R" + i + "=" + lähin + "" + yksikköä + ""; if (i+1 <lähin.pituus) {if (ser_par_config [i+1]) outputStr+= "||"; else outputStr + = " +"; }} muu tauko; }} /* Laskee parhaan vastuksen yhdistelmän tavoitearvon saavuttamiseksi. * res - vastusarvojen syöttöryhmä * num_res - vastusarvojen syöttöryhmän koko * num_comb - sallittujen vastuksien määrä * indeksi - kampa * kampa - nykyisen yhdistelmän matriisi * tavoite - tavoitearvo * Ei palautusarvoa - välittää parhaan yhdistelmän globaaleille arvoille */ toiminto resCombination (res, num_res, num_comb, index, comb, target) {// nykyinen yhdistelmä on valmis, jos (index == num_comb) {var ser_par_size = Math.pow (2, numero_yhdistelmä); // 2^(komponenttien määrä) var ser_par = ; // bool -matriisi, joka määrittää sarjat tai rinnakkaiset kullekin komponentille var calc; // laskettu vastaava vastusarvo // astu läpi kaikki mahdolliset nykyisen yhdistelmän sarja-/rinnakkaiskonfiguraatiot (var j = 0; j k) & 1; } // lasketaanko yhdistelmä sarja-/rinnakkaisyhdistelmän perusteella (var k = 0; k <num_comb; k ++) {// ensimmäinen numero, lisää vain jos (k == 0) calc = kampa [k]; // nolla tarkoittaa sarjaa, lisää vastusarvot muut, jos (! ser_par [k]) calc += kampa [k]; // yksi tarkoittaa rinnakkaista, käänteinen vastavuoroisten summien summa, jos (ser_par [k]) calc = (calc*comb [k])/(calc+comb [k]); } // tarkista onko ero pienempi kuin edellinen paras jos (Math.abs (calc - tavoite) <lähimpi_diff) {// se on pienempi, joten päivitä globaalit arvot lähimpi_valo = lask; lähin_diff = Math.abs (calc - tavoite); // tyhjennä nollaan (var k = 0; k <num_comb; k ++) {lähinnä [k] = 0; } // päivitä lähin arvo & sarja/rinnakkaismatriisit (var k = 0; k <num_comb; k ++) {lähimmän [k] = kampa [k]; ser_par_config [k] = ser_par [k]; }}} palauta 0; } // rekursiivisesti kutsua ja korvata indeksi kaikilla mahdollisilla arvoilla (var i = 0; i = num_comb-index; i ++) {comb [index] = res ; resCombination (res, num_res, num_comb, index+1, kampa, kohde); }} / * Noutaa ja tulostaa parhaan kondensaattorikokoonpanon * tavoite - tavoitekapasitanssiarvo * numComp - kondensaattoreiden kokonaismäärä, joita voidaan käyttää tavoitearvon saavuttamiseen * compVals - kondensaattoriarvoryhmä * / toimintokondensaattori (tavoite, numComp, compVals) {// kapasitanssiarvojen pituus var num_cap = compVals.length; // ajaa läpi kaikki mahdolliset komponentit (var i = 1; i <= numComp; i ++) {var data = ; capCombination (compVals, num_cap, i, 0, data, target); } var yksiköt = document.getElementById ("selected_unit"). arvo; // tulostustulokset outputStr = "Lähin arvo:" + lähinnä_val.toKiinteä (3) + "" + yksikköä + ""; outputStr + = "Ero:" + lähin_diff.toKiinteä (3) + "" + yksikköä + ""; outputStr += "Kondensaattorin kokoonpano:"; for (var i = 0; i <numComp; i ++) {jos (i <lähin.pituus) {outputStr + = "C" + i + "=" + lähin + "" + yksikköä + ""; if (i+1 <lähin.pituus) {if (ser_par_config [i+1]) outputStr+= "||"; else outputStr + = " +"; }} muu tauko; }} /* Laskee kondensaattoreiden parhaan yhdistelmän tavoitearvon saavuttamiseksi. * cap - kondensaattoriarvojen syöttöryhmä * num_cap - kondensaattoriarvojen syöttöryhmän koko * num_comb - sallittujen kondensaattoreiden määrä * indeksi - kampa -indeksi * kampa - nykyisen yhdistelmän matriisi * tavoite - tavoitearvo * Ei palautusarvoa - siirtää nykyisen parhaan yhdistelmän globaaleille arvoille */ toiminto capCombination (cap, num_cap, num_comb, index, comb, target) {// nykyinen yhdistelmä on valmis jos (index == num_comb) {var ser_par_size = Math.pow (2, numero_yhdistelmä); // 2^(komponenttien määrä) var ser_par = ; // bool -matriisi, joka määrittää sarjat tai rinnakkaiset kullekin komponentille var calc; // laskettu ekvivalentti kapasitanssiarvo // astu läpi kaikki mahdolliset sarjayhdistelmät nykyiselle yhdistelmälle (var j = 0; j k) & 1; } // lasketaanko yhdistelmä sarja-/rinnakkaisyhdistelmän perusteella (var k = 0; k

Suositeltava: