Cuprins:

Cum să obțineți orice rezistență / capacitate utilizând componentele pe care le aveți deja !: 6 pași
Cum să obțineți orice rezistență / capacitate utilizând componentele pe care le aveți deja !: 6 pași

Video: Cum să obțineți orice rezistență / capacitate utilizând componentele pe care le aveți deja !: 6 pași

Video: Cum să obțineți orice rezistență / capacitate utilizând componentele pe care le aveți deja !: 6 pași
Video: DOCUMENTAR RECORDER. 30 de ani de democrație 2024, Noiembrie
Anonim
Cum să obțineți orice rezistență / capacitate utilizând componentele pe care le aveți deja!
Cum să obțineți orice rezistență / capacitate utilizând componentele pe care le aveți deja!

Acesta nu este doar un alt calcul de rezistență echivalent serie / paralel! Acest program calculează cum să combinați rezistențe / condensatori de care aveți în prezent pentru a atinge o valoare țintă de rezistență / capacitate de care aveți nevoie.

Ați avut vreodată nevoie de un rezistor sau condensator specific pe care nu îl aveți sau care nu există? Nu te teme! Probabil puteți face acea valoare specifică a rezistenței sau capacității folosind componentele pe care le aveți deja. În loc să rezolvați o uriașă problemă de optimizare multivariabilă cu milioane de combinații diferite, utilizați acest program!

Doar selectați rezistor sau condensator, introduceți valoarea țintă, introduceți numărul maxim de componente pe care doriți să le utilizați, introduceți o listă a valorilor componentelor pe care le aveți și faceți clic pe calculare! Programul va scuipa ce componente să utilizați și cum să le conectați pentru a atinge valoarea țintă.

Pentru a încerca calculatorul, vizitați această aplicație web.

Pentru a vizualiza codul sursă, vizitați acest depozit Github.

Vă rugăm să-mi spuneți dacă aveți sugestii pentru a îmbunătăți în continuare utilitatea acestui instrument de proiectare!

Pasul 1: fundal

fundal
fundal

Această aplicație web a fost dezvoltată din necesitate. Există multe circuite diferite pe care le construiesc și care necesită un rezistor sau un condensator foarte specific. De multe ori, nu am un rezistor sau condensator cu acea valoare specifică. Uneori nici măcar nu fac o componentă cu acea valoare unică! În loc să renunț sau să mă mulțumesc cu ceva mai puțin decât ideal, am decis să scriu un program care să analizeze fiecare combinație posibilă de rezistențe (fiecare valoare posibilă și dacă acestea sunt în serie sau paralele) și să returnez cea mai bună combinație.

Când am proiectat circuitul pentru organul meu ca parte a proiectului meu Bătălia Bandelor, a trebuit să încerc să calculez manual cea mai bună combinație de condensatori pentru a obține o frecvență specifică. Acest proces a fost incredibil de plictisitor și în cele din urmă tocmai am renunțat și am mers cu combinații de condensatori care au produs orice cantitate de frecvență sonoră. Acum, cu această aplicație web, îmi pot proiecta organul pentru o anumită frecvență și o pot regla la notele de pe tastatură! Ecuația de mai jos este utilizată pentru a calcula frecvența specifică și este discutată în celălalt proiect Instructables.

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

Folosind această ecuație în care R1 = 100 kOhm și R2 = 10 kOhm, am calculat că un condensator de 27,33 nF va produce o notă A4 (frecvența 440 Hz). Folosind programul meu, am reușit să calculez o valoare echivalentă a capacității la 0,001 nF (mult mai mică decât toleranța unui condensator standard) pe care o pot crea folosind condensatori pe care îi aveam deja în jur. Ieșirea și configurația rezultate sunt descrise mai jos. Acum pot să-mi reglez mult mai eficient și mai eficient organul la frecvențele exacte ale notelor standard. Aș vrea să fi făcut asta pentru început. Melodia mea demo de pe orgă probabil ar fi sunat mult mai bine.

Cea mai apropiată valoare: 27,329 nF Diferență: 0,001 nFC Configurare condensator: C0 = 0,068 nF || C1 = 30 nF + C2 = 300 nF

Ecuații de echivalență a condensatorului rezistor

Pentru referință, mai jos sunt ecuațiile de echivalență pentru combinarea rezistențelor și condensatoarelor într-un circuit.

  • Rezistoare în serie (R1 + R2): Req = R1 + R2
  • Rezistoare în paralel (R1 || R2): Req = 1 / (1 / R1 + 1 / R2)
  • Condensatoare în serie (C1 + C2): Ceq = 1 / (1 / C1 + 1 / C2)
  • Condensatoare în paralel (C1 || C2): Ceq = C1 + C2

Pasul 2: Intrări

Intrări
Intrări

Există 4 intrări pe care va trebui să le furnizați:

  1. Indiferent dacă calculați o valoare pentru un rezistor sau un condensator.
  2. Rezistența țintă sau valoarea capacității și unitățile.
  3. Numărul maxim de componente pe care doriți să le utilizați pentru a atinge valoarea țintă (adică nu aș dori să folosesc mai mult de 3 rezistențe pentru a atinge valoarea mea de rezistență țintă).
  4. Lista valorilor pentru rezistențele / condensatoarele pe care le aveți în prezent. Aceste valori ar trebui să fie în aceleași unități ca valoarea țintă (de exemplu, dacă valoarea țintă a fost 110 nF, toate valorile dvs. ar trebui furnizate în nF).

Pasul 3: Rezultat

Rezultat
Rezultat

Veți obține 3 rezultate pentru rezultatul dvs.:

  1. Cea mai apropiată valoare - cea mai apropiată valoare de rezistență / capacitate pe care ai reușit să o atingi cu parametrii tăi.
  2. Diferență - cât de departe se afla cea mai apropiată valoare față de valoarea țintă.
  3. Configurarea rezistorului / condensatorului - o listă de valori ale rezistențelor / condensatoarelor de utilizat și configurația acestora.

Pasul 4: Înțelegerea rezultatului dvs

Înțelegerea rezultatului dvs
Înțelegerea rezultatului dvs
Înțelegerea rezultatului dvs
Înțelegerea rezultatului dvs

Ieșirea de configurare utilizează o notație standard. „+” înseamnă că componentele sunt în serie și „||” înseamnă că componentele sunt în paralel. Operatorii au prioritate egală și sunt asociativi de la stânga la dreapta, ceea ce înseamnă că grupați termenii împreună începând de la stânga și deplasându-vă spre dreapta.

De exemplu, aruncați o privire la următorul rezultat:

Configurarea rezistorului: R0 = 15 Ohmi + R1 = 470 Ohmi || R2 = 3300 Ohm + R3 = 15000 Ohm

Dacă urmați liniile directoare discutate mai sus, puteți vedea că acest lucru este echivalent cu următoarea ecuație și imagine de mai sus.

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

Pasul 5: mai multe proiecte

Pentru mai multe proiecte, vizitați paginile mele:

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

Pasul 6: Cod sursă

Pentru a vizualiza codul sursă, vizitați acest depozit Github sau consultați JavaScript mai jos.

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

/ * scriptarea calculatorului r / c * / / * --------------------------------------- ------------------------- * / var nearest_val; // cea mai apropiată valoare până acum var nearest_diff = 1000000,00; // diferența dintre val și target var cel mai apropiat = ; // matricea care detaliază valorile componentelor var ser_par_config = ; // matrice detaliind serial / paralel var outputStr = ""; funcție calculatorClick () {// ștergeți valorile globale pentru fiecare nou clic cel mai apropiat_val = 0; cel mai apropiat dif = 1000000,00; cel mai apropiat = ; 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; // eroare la analizarea valorii țintă if (isNaN (țintă)) {outputStr = "Verificare eroare intrare„ Valoare țintă”!"} // eroare la analizarea numărului de componente else if (isNaN (numComp)) {outputStr = "Verificare eroare 'Numărul de componente' introdus! "} // else if no error in target or numComp else if (! IsNaN (target) &&! IsNaN (numComp)) {while (compValsStr.indexOf (", ")! = -1) {var virgula = compValsStr.indexOf (","); var newInt = parseFloat (compValsStr.substring (0, virgulă)); // eroare la analizarea listei de valori a componentelor, setați semnalizatorul if (isNaN (newInt)) {errFlag = 1; pauză; } compValsStr = compValsStr.substring (virgulă + 1, compValsStr.length); compVals = newInt; i ++; } var newInt = parseFloat (compValsStr); // eroare la analizarea listei valorilor componentelor, setați semnalizatorul if (isNaN (newInt)) {errFlag = 1; } compVals = newInt; if (errFlag == 0) {if (document.getElementById ("resRadio"). bifat) {rezistor (target, numComp, compVals); } else if (document.getElementById ("capRadio"). bifat) {condensator (target, numComp, compVals); }} // eroare la analizarea listei valorilor componentelor else {outputStr = "Verificare eroare intrare 'Listă valori componente'!"}} calcOutput.innerHTML = outputStr; resultDisplay.style.display = "bloc"; exampleDisplay.style.display = "flex"; // derulați în jos până la rezultatul window.scrollTo (0, exempluDisplay.scrollHeight); } / * Preluează și tipărește cea mai bună configurație a rezistorului * țintă - valoarea rezistenței țintei * numComp - numărul total de rezistențe permise pentru a fi utilizate pentru atingerea valorii țintă * compVals - matrice de valori ale rezistorului * / rezistență funcțională (țintă, numComp, compVals) { // lungimea valorilor de rezistență var num_res = compVals.length; // rulează prin tot numărul posibil de componente pentru (var i = 1; i <= numComp; i ++) {var date = ; resCombination (compVals, num_res, i, 0, data, target); } var units = document.getElementById ("selected_unit"). valoare; // print rezultate outputStr = "Closest Value:" + nearest_val.toFixed (3) + "" + units + ""; outputStr + = "Diferență:" + cel mai apropiat_dif.toFixed (3) + "" + unități + ""; outputStr + = "Configurare rezistor:"; for (var i = 0; i <numComp; i ++) {if (i <cea mai apropiată lungime) {outputStr + = "R" + i + "=" + cel mai apropiat + "" + unități + ""; if (i + 1 <cea mai apropiată lungime) {if (ser_par_config [i + 1]) outputStr + = "||"; else outputStr + = "+"; }} altfel pauză; }} / * Calculează cea mai bună combinație de rezistențe pentru a atinge o valoare țintă. * res - matrice de intrare a valorilor rezistorului * num_res - dimensiunea matricei de intrare a valorilor rezistorului * num_comb - numărul de rezistențe permise * index - index de pieptene * pieptene - matrice de combinație curentă * țintă - valoarea țintă * Fără valoare returnată - trece cea mai bună combinație curentă la valorile globale * / funcție resCombinație (res, num_res, num_comb, index, comb, target) {// combinația curentă este completă dacă (index == num_comb) {var ser_par_size = Math.pow (2, num_comb); // 2 ^ (număr de componente) var ser_par = ; // matrice bool specificând serial sau paralel pentru fiecare componentă var calc; // valoare de rezistență echivalentă calculată // treceți prin fiecare serie posibilă / configurație paralelă a combinației curente pentru (var j = 0; j k) & 1; } // faceți calculele pentru combinația bazată pe combo serie / paralel pentru (var k = 0; k <num_comb; k ++) {// primul număr, adăugați doar dacă (k == 0) calc = comb [k]; // zero înseamnă serie, adăugați valori de rezistență altfel dacă (! ser_par [k]) calc + = comb [k]; // unul înseamnă paralel, invers al sumei reciprocelor altceva dacă (ser_par [k]) calc = (calc * pieptene [k]) / (calc + pieptene [k]); } // verificați dacă diferența este mai mică decât cea mai bună anterioară dacă (Math.abs (calc - țintă) <cel mai apropiat_dif) {// este mai mică, așa că actualizați valorile globale cel mai apropiat_val = calc; nearest_diff = Math.abs (calc - target); // ștergeți la zero pentru (var k = 0; k <num_comb; k ++) {cel mai apropiat [k] = 0; } // actualizați cea mai apropiată valoare & serie / matrice paralele pentru (var k = 0; k <num_comb; k ++) {nearest [k] = comb [k]; ser_par_config [k] = ser_par [k]; }}} returnează 0; } // apel recursiv și înlocuiește indexul cu toate valorile posibile pentru (var i = 0; i = num_comb-index; i ++) {comb [index] = res ; resCombination (res, num_res, num_comb, index + 1, comb, target); }} / * Preluează și imprimă cea mai bună configurație a condensatorului * țintă - valoarea capacității țintei * numComp - numărul total de condensatori permiși să fie utilizați pentru atingerea valorii țintă * compVals - matrice de valori ale condensatorului * / condensator funcție (țintă, numComp, compVals) {// lungimea valorilor capacității var num_cap = compVals.length; // rulează prin tot numărul posibil de componente pentru (var i = 1; i <= numComp; i ++) {var date = ; capCombination (compVals, num_cap, i, 0, data, target); } var units = document.getElementById ("selected_unit"). valoare; // print rezultate outputStr = "Closest Value:" + nearest_val.toFixed (3) + "" + units + ""; outputStr + = "Diferență:" + cel mai apropiat_dif.toFixed (3) + "" + unități + ""; outputStr + = "Configurare condensator:"; for (var i = 0; i <numComp; i ++) {if (i <nearest.length) {outputStr + = "C" + i + "=" + nearest + "" + units + ""; if (i + 1 <cea mai apropiată lungime) {if (ser_par_config [i + 1]) outputStr + = "||"; else outputStr + = "+"; }} altfel pauză; }} / * Calculează cea mai bună combinație de condensatori pentru a atinge o valoare țintă. * cap - matrice de intrare a valorilor condensatorului * num_cap - dimensiunea matricei de intrare a valorilor condensatorului * num_comb - numărul de condensatori permise * index - index de pieptene * pieptene - matrice de combinație curentă * țintă - valoarea țintă * Fără valoare returnată - trece cea mai bună combinație curentă la valorile globale * / funcție capCombinație (cap, num_cap, num_comb, index, comb, target) {// combinația curentă este completă dacă (index == num_comb) {var ser_par_size = Math.pow (2, num_comb); // 2 ^ (număr de componente) var ser_par = ; // matrice bool specificând serial sau paralel pentru fiecare componentă var calc; // valoare de capacitate echivalentă calculată // treceți prin fiecare serie posibilă / configurație paralelă a combinației curente pentru (var j = 0; j k) & 1; } // faceți calculele pentru combinația bazată pe combo serie / paralel pentru (var k = 0; k

Recomandat: