Obsah:

Jak dosáhnout jakéhokoli odporu/kapacity pomocí součástí, které již máte!: 6 kroků
Jak dosáhnout jakéhokoli odporu/kapacity pomocí součástí, které již máte!: 6 kroků

Video: Jak dosáhnout jakéhokoli odporu/kapacity pomocí součástí, které již máte!: 6 kroků

Video: Jak dosáhnout jakéhokoli odporu/kapacity pomocí součástí, které již máte!: 6 kroků
Video: David Schmoranzer: Analogie supratekutosti a supravodivosti - Kvantové kap... (Pátečníci 20.10.2023) 2024, Červenec
Anonim
Jak dosáhnout jakéhokoli odporu/kapacity pomocí součástí, které již máte!
Jak dosáhnout jakéhokoli odporu/kapacity pomocí součástí, které již máte!

Nejde jen o další kalkulačku odporu/paralelního ekvivalentu série! Tento program vypočítá, jak kombinovat odpory/kondenzátory, které v současné době máte, abyste dosáhli požadované hodnoty odporu/kapacity.

Potřebovali jste někdy konkrétní odpor nebo kondenzátor, který nemáte nebo který neexistuje? Nemít strach! Pravděpodobně můžete tento specifický odpor nebo hodnotu kapacity vytvořit pomocí komponent, které již máte. Místo řešení obrovského problému s optimalizací více proměnných pomocí milionů různých kombinací použijte tento program!

Stačí vybrat odpor nebo kondenzátor, zadat cílovou hodnotu, zadat maximální počet komponent, které byste chtěli použít, zadat seznam hodnot komponent, které máte, a kliknout na vypočítat! Program vyplivne, jaké komponenty použít a jak je propojit, abyste dosáhli své cílové hodnoty.

Chcete -li kalkulačku vyzkoušet, navštivte tuto webovou aplikaci.

Chcete -li zobrazit zdrojový kód, navštivte toto úložiště Github.

Dejte nám prosím vědět, pokud máte nějaké návrhy na další zlepšení použitelnosti tohoto návrhového nástroje!

Krok 1: Pozadí

Pozadí
Pozadí

Tato webová aplikace byla vyvinuta z nutnosti. Existuje mnoho různých obvodů, které konstruuji a které vyžadují velmi specifický odpor nebo kondenzátor. Mnohokrát nemám odpor nebo kondenzátor s touto konkrétní hodnotou. Někdy dokonce nevyrobí součástku s touto jedinečnou hodnotou! Místo toho, abych to vzdal nebo se spokojil s něčím, co je méně než ideální, rozhodl jsem se napsat program, který se podívá na každou možnou kombinaci rezistorů (každou možnou hodnotu a ať už jsou v sérii nebo paralelně) a vrátí nejlepší kombinaci.

Při navrhování obvodu pro mé varhany jako součásti mého instruktabilního projektu Battle of the Bands jsem se musel pokusit ručně vypočítat nejlepší kombinaci kondenzátorů pro dosažení konkrétní frekvence. Tento proces byl neuvěřitelně únavný a nakonec jsem to prostě vzdal a šel s kombinacemi kondenzátorů, které vytvářely jakékoli slyšitelné frekvence. Nyní s touto webovou aplikací mohu navrhnout své varhany pro konkrétní frekvenci a naladit je na poznámky na klávesnici! Níže uvedená rovnice se používá k výpočtu konkrétní frekvence a je popsána v jiném projektu Instructables.

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

Pomocí této rovnice, kde R1 = 100 kOhm a R2 = 10 kOhm, jsem vypočítal, že kondenzátor 27,33 nF vytvoří notu A4 (frekvence 440 Hz). Pomocí svého programu jsem byl schopen vypočítat ekvivalentní kapacitní hodnotu v rozmezí 0,001 nF (mnohem menší než tolerance na standardním kondenzátoru), kterou mohu vytvořit pomocí kondenzátorů, které jsem již ležel. Výsledný výstup a konfigurace je popsán níže. Nyní jsem schopen mnohem efektivněji a efektivněji naladit své varhany na přesné frekvence standardních not. Přál bych si, abych to udělal od začátku. Moje demo píseň na varhany by asi zněla mnohem lépe.

Nejbližší hodnota: 27,329 nF Rozdíl: 0,001 nFC Konfigurace kondenzátoru: C0 = 0,068 nF || C1 = 30 nF + C2 = 300 nF

Rovnice ekvivalence odporového kondenzátoru

Níže jsou uvedeny ekvivalenční rovnice pro kombinaci odporů a kondenzátorů v obvodu.

  • Rezistory v sérii (R1 + R2): Req = R1 + R2
  • Paralelní odpory (R1 || R2): Req = 1/(1/R1 + 1/R2)
  • Kondenzátory v sérii (C1 + C2): Ceq = 1/(1/C1 + 1/C2)
  • Paralelní kondenzátory (C1 || C2): Ceq = C1 + C2

Krok 2: Vstupy

Vstupy
Vstupy

K dispozici budete mít 4 vstupy:

  1. Ať už počítáte hodnotu pro odpor nebo kondenzátor.
  2. Cílový odpor nebo hodnota kapacity a jednotky.
  3. Maximální počet komponent, které byste chtěli použít k dosažení cílové hodnoty (tj. Nerad bych použil více než 3 odpory k dosažení mé cílové hodnoty odporu).
  4. Seznam hodnot pro rezistory/kondenzátory, které v současné době máte. Tyto hodnoty by měly být ve stejných jednotkách jako vaše cílová hodnota (tj. Pokud vaše cílová hodnota byla 110 nF, všechny vaše hodnoty by měly být uvedeny v nF).

Krok 3: Výsledek

Výsledek
Výsledek

Za svůj výsledek získáte 3 výstupy:

  1. Nejbližší hodnota - nejbližší hodnota odporu/kapacity, které jste mohli svými parametry dosáhnout.
  2. Rozdíl - jak daleko byla vaše nejbližší hodnota od vaší cílové hodnoty.
  3. Konfigurace rezistoru/kondenzátoru - seznam hodnot odporů/kondenzátorů, které se mají použít, a jejich konfigurace.

Krok 4: Pochopení vašeho výsledku

Pochopení vašeho výsledku
Pochopení vašeho výsledku
Pochopení vašeho výsledku
Pochopení vašeho výsledku

Konfigurační výstup používá standardní notaci. „+“znamená, že součásti jsou v sérii a „||“znamená, že součásti jsou paralelní. Operátory mají stejnou přednost a jsou asociativní zleva doprava, což znamená, že seskupujete termíny dohromady zleva a pohybujete se doprava.

Podívejte se například na následující výsledek:

Konfigurace odporu: R0 = 15 Ohmů + R1 = 470 Ohmů || R2 = 3300 ohmů + R3 = 15 000 ohmů

Pokud budete postupovat podle pokynů diskutovaných výše, uvidíte, že to odpovídá následující rovnici a obrázku výše.

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

Krok 5: Více projektů

Pro více projektů navštivte mé stránky:

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

Krok 6: Zdrojový kód

Chcete -li zobrazit zdrojový kód, navštivte toto úložiště Github nebo si prohlédněte níže uvedený JavaScript.

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

/* skriptování kalkulačky r/c*//* --------------------------------------- -------------------------*/ var nejbližší_val; // zatím nejbližší hodnota var nejbližší_ rozdíl = 1000000,00; // rozdíl val a cíl var nejblíže = ; // hodnoty detailů pole var ser_par_config = ; // pole popisující sériový/paralelní var outputStr = ""; kalkulačka funkcíClick () {// vymazání globálních hodnot pro každé nové kliknutí nearest_val = 0; nejbližší_ rozdíl = 1000000,00; nejbližší = ; 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; // chyba při analýze cílové hodnoty if (isNaN (cíl)) {outputStr = "Chyba při kontrole vstupu" Cílová hodnota "!}} // chyba při analýze počtu komponent else if (isNaN (numComp)) {outputStr =" Kontrola chyb Vstup „Počet komponentů“!}} // else pokud není žádná chyba v cíli nebo numComp else if (! IsNaN (cíl) &&! IsNaN (numComp)) {while (compValsStr.indexOf (",")! = -1) {var comma = compValsStr.indexOf (","); var newInt = parseFloat (compValsStr.substring (0, čárka)); // chyba při analýze seznamu hodnot komponent, nastavte příznak if (isNaN (newInt)) {errFlag = 1; přestávka; } compValsStr = compValsStr.substring (čárka+1, compValsStr.length); compVals = newInt; i ++; } var newInt = parseFloat (compValsStr); // chyba při analýze seznamu hodnot komponent, nastavte příznak if (isNaN (newInt)) {errFlag = 1; } compVals = newInt; if (errFlag == 0) {if (document.getElementById ("resRadio"). zaškrtnuto) {odpor (cíl, numComp, compVals); } else if (document.getElementById ("capRadio"). zaškrtnuto) {kondenzátor (cíl, numComp, compVals); }} // chyba při analýze seznamu hodnot komponent else {outputStr = "Chyba při kontrole vstupu 'Seznam hodnot komponent'!}}} calcOutput.innerHTML = outputStr; resultDisplay.style.display = "block"; exampleDisplay.style.display = "flex"; // přejděte dolů na výsledek window.scrollTo (0, exampleDisplay.scrollHeight); } / * Načte a vytiskne nejlepší konfiguraci odporu * cíl - hodnota cílového odporu * numComp - celkový počet rezistorů, které lze použít k dosažení cílové hodnoty val * compVals - pole hodnot odporu * / funkční odpor (cíl, numComp, compVals) { // délka hodnot odporu var num_res = compVals.length; // proběhne veškerý možný počet komponent pro (var i = 1; i <= numComp; i ++) {var data = ; resCombination (compVals, num_res, i, 0, data, target); } var units = document.getElementById ("selected_unit"). hodnota; // tisk výsledků outputStr = "Nejbližší hodnota:" + nejbližší_val.toFixed (3) + "" + jednotky + ""; outputStr + = "Rozdíl:" + nejbližší_dif.toFixed (3) + "" + jednotky + ""; outputStr += "Konfigurace rezistoru:"; pro (var i = 0; i <numComp; i ++) {if (i <nejbližší. délka) {outputStr + = "R" + i + "=" + nejbližší + "" + jednotky + ""; if (i+1 <nejbližší. délka) {if (ser_par_config [i+1]) outputStr+= "||"; else outputStr + = " +"; }} else break; }} /* Vypočítá nejlepší kombinaci odporů k dosažení cílové hodnoty. * res - vstupní pole hodnot odporů * num_res - velikost vstupního pole hodnot odporů * num_comb - počet povolených odporů * index - index hřebene * hřeben - pole aktuální kombinace * cíl - cílová hodnota * Žádná návratová hodnota - předává aktuální nejlepší kombinaci globálním hodnotám */ funkce resCombination (res, num_res, num_comb, index, comb, target) {// aktuální kombinace je úplná, pokud (index == num_comb) {var ser_par_size = Math.pow (2, num_comb); // 2^(počet komponent) var ser_par = ; // bool pole určující sériové nebo paralelní pro každou komponentu var calc; // vypočítaná hodnota ekvivalentního odporu // krok v každé možné sérii/paralelní konfiguraci aktuální kombinace pro (var j = 0; j k) & 1; } // proveďte výpočty pro kombinaci na základě kombinace série/paralelní pro (var k = 0; k <num_comb; k ++) {// první číslo, stačí přidat if (k == 0) calc = comb [k]; // nula znamená řadu, přidejte hodnoty odporu jinak if (! ser_par [k]) calc += comb [k]; // jeden znamená paralelní, inverzní k součtu vzájemných hodnot else if (ser_par [k]) calc = (calc*comb [k])/(calc+comb [k]); } // zkontrolujte, zda je rozdíl menší než předchozí nejlepší if (Math.abs (calc - target) <nearest_diff) {// je menší, proto aktualizujte globální hodnoty close_val = calc; nearest_diff = Math.abs (calc - cíl); // vymazání na nulu pro (var k = 0; k <num_comb; k ++) {nejbližší [k] = 0; } // aktualizace nejbližší hodnoty & řada/paralelní pole pro (var k = 0; k <num_comb; k ++) {nejbližší [k] = hřeben [k]; ser_par_config [k] = ser_par [k]; }}} vrátit 0; } // rekurzivně volat a nahradit index všemi možnými hodnotami pro (var i = 0; i = num_comb-index; i ++) {comb [index] = res ; resCombination (res, num_res, num_comb, index+1, comb, target); }} / * Načte a vytiskne nejlepší konfiguraci kondenzátoru * cíl - cílová hodnota kapacity * numComp - celkový počet kondenzátorů, které lze použít k dosažení cílové hodnoty * compVals - řada hodnot kondenzátoru * / funkce kondenzátoru (cíl, numComp, compVals) {// délka kapacitních hodnot var num_cap = compVals.length; // proběhne veškerý možný počet komponent pro (var i = 1; i <= numComp; i ++) {var data = ; capCombination (compVals, num_cap, i, 0, data, target); } var units = document.getElementById ("selected_unit"). hodnota; // tisk výsledků outputStr = "Nejbližší hodnota:" + nejbližší_val.toFixed (3) + "" + jednotky + ""; outputStr + = "Rozdíl:" + nejbližší_dif.toFixed (3) + "" + jednotky + ""; outputStr += "Konfigurace kondenzátoru:"; pro (var i = 0; i <numComp; i ++) {if (i <nejbližší. délka) {outputStr + = "C" + i + "=" + nejbližší + "" + jednotky + ""; if (i+1 <nejbližší. délka) {if (ser_par_config [i+1]) outputStr+= "||"; else outputStr + = " +"; }} else break; }} /* Vypočítá nejlepší kombinaci kondenzátorů k dosažení cílové hodnoty. * cap - vstupní pole hodnot kondenzátoru * num_cap - velikost vstupního pole hodnot kondenzátoru * num_comb - počet povolených kondenzátorů * index - index hřebene * hřeben - pole aktuální kombinace * cíl - cílová hodnota * Žádná návratová hodnota - předává aktuální nejlepší kombinaci globálním hodnotám */ funkce capCombination (cap, num_cap, num_comb, index, comb, target) {// aktuální kombinace je úplná, pokud (index == num_comb) {var ser_par_size = Math.pow (2, num_comb); // 2^(počet komponent) var ser_par = ; // bool pole určující sériové nebo paralelní pro každou komponentu var calc; // vypočítaná hodnota ekvivalentní kapacity // krok skrz každou možnou sérii/paralelní konfiguraci aktuální kombinace pro (var j = 0; j k) & 1; } // proveďte výpočty pro kombinaci založenou na kombinaci série/paralelní pro (var k = 0; k

Doporučuje: