İçindekiler:

Halihazırda Sahip Olduğunuz Bileşenleri Kullanarak Herhangi Bir Direnç/Kapasitans Nasıl Elde Edilir!: 6 Adım
Halihazırda Sahip Olduğunuz Bileşenleri Kullanarak Herhangi Bir Direnç/Kapasitans Nasıl Elde Edilir!: 6 Adım

Video: Halihazırda Sahip Olduğunuz Bileşenleri Kullanarak Herhangi Bir Direnç/Kapasitans Nasıl Elde Edilir!: 6 Adım

Video: Halihazırda Sahip Olduğunuz Bileşenleri Kullanarak Herhangi Bir Direnç/Kapasitans Nasıl Elde Edilir!: 6 Adım
Video: Nano Open Webinar: RF MEMS Anahtarlar ve Nano Vakum Kanallı Transistör - Dr. Kaan Demirel 2024, Kasım
Anonim
Halihazırda Sahip Olduğunuz Bileşenleri Kullanarak Herhangi Bir Direnç/Kapasitans Nasıl Elde Edilir!
Halihazırda Sahip Olduğunuz Bileşenleri Kullanarak Herhangi Bir Direnç/Kapasitans Nasıl Elde Edilir!

Bu sadece başka bir seri/paralel eşdeğer direnç hesaplayıcısı değildir! Bu program, ihtiyacınız olan hedef direnç/kapasitans değerini elde etmek için şu anda sahip olduğunuz dirençleri/kapasitörleri nasıl birleştireceğinizi hesaplar.

Hiç sahip olmadığınız veya var olmayan belirli bir direnç veya kapasitöre ihtiyacınız oldu mu? Korkma! Zaten sahip olduğunuz bileşenleri kullanarak muhtemelen bu belirli direnç veya kapasitans değerini yapabilirsiniz. Milyonlarca farklı kombinasyonla çok değişkenli devasa bir optimizasyon problemini çözmek yerine bu programı kullanın!

Sadece direnç veya kapasitör seçin, hedef değeri girin, kullanmak istediğiniz maksimum bileşen sayısını girin, sahip olduğunuz bileşenlerin değerlerinin bir listesini girin ve hesapla'yı tıklayın! Program, hedef değerinize ulaşmak için hangi bileşenlerin kullanılacağını ve bunları nasıl bağlayacağınızı söyleyecektir.

Hesap makinesini denemek için bu web uygulamasını ziyaret edin.

Kaynak kodunu görüntülemek için bu Github deposunu ziyaret edin.

Bu tasarım aracının kullanılabilirliğini daha da geliştirmek için herhangi bir öneriniz varsa lütfen bana bildirin!

Adım 1: Arka Plan

Arka plan
Arka plan

Bu web uygulaması zorunluluktan geliştirilmiştir. Çok özel bir direnç veya kapasitör gerektiren inşa ettiğim birçok farklı devre var. Çoğu zaman, bu belirli değere sahip bir direncim veya kapasitörüm yok. Bazen bu benzersiz değere sahip bir bileşen bile yapmazlar! Vazgeçmek veya idealden daha az bir şeye razı olmak yerine, mümkün olan her direnç kombinasyonuna (olası her değere ve bunların seri veya paralel olup olmadığına) bakmak ve en iyi kombinasyonu döndürmek için bir program yazmaya karar verdim.

Bandlar Savaşı Eğitim Projemin bir parçası olarak organım için devre tasarlarken, belirli bir frekans elde etmek için en iyi kapasitör kombinasyonunu elle hesaplamaya çalışmak zorunda kaldım. Bu süreç inanılmaz derecede sıkıcıydı ve sonunda pes ettim ve herhangi bir miktarda duyulabilir frekans üreten kapasitör kombinasyonlarına geçtim. Artık bu web uygulamasıyla organımı belirli bir frekans için tasarlayabilir ve klavyedeki notalara göre ayarlayabilirim! Aşağıdaki denklem, belirli frekansı hesaplamak için kullanılır ve diğer Instructables projesinde tartışılır.

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

R1 = 100 kOhm ve R2 = 10 kOhm olan bu denklemi kullanarak, 27.33 nF'lik bir kondansatörün bir A4 notası (frekans 440 Hz) üreteceğini hesapladım. Programımı kullanarak, etrafta yattığım kapasitörleri kullanarak oluşturabileceğim.001 nF (standart bir kapasitördeki toleranstan çok daha az) dahilinde eşdeğer bir kapasitans değeri hesaplayabildim. Ortaya çıkan çıktı ve yapılandırma aşağıda açıklanmıştır. Artık organımı standart notaların tam frekanslarına göre çok daha verimli ve etkili bir şekilde ayarlayabiliyorum. Keşke baştan bunu yapsaydım. Orgdaki demo şarkım muhtemelen kulağa çok daha iyi gelirdi.

En Yakın Değer: 27.329 nF Farkı: 0.001 nFCKapasitör Konfigürasyonu: C0=0.068 nF || C1=30 nF + C2=300 nF

Direnç Kapasitör Denklemleri

Referans olarak, bir devrede dirençleri ve kapasitörleri birleştirmek için denklik denklemleri aşağıdadır.

  • Seri bağlı dirençler (R1 + R2): Req = R1 + R2
  • Dirençler paralel (R1 || R2): Req = 1 / (1/R1 + 1/R2)
  • Seri kapasitörler (C1 + C2): Ceq = 1 / (1/C1 + 1/C2)
  • Paralel kondansatörler (C1 || C2): Ceq = C1 + C2

Adım 2: Girişler

Girişler
Girişler

Sağlamanız gereken 4 giriş var:

  1. İster direnç ister kapasitör için bir değer hesaplıyor olun.
  2. Hedef direnç veya kapasitans değeri ve birimler.
  3. Hedef değeri elde etmek için kullanmak istediğiniz maksimum bileşen sayısı (yani, hedef direnç değerime ulaşmak için 3'ten fazla direnç kullanmak istemiyorum).
  4. Halihazırda sahip olduğunuz dirençler/kapasitörler için değer listesi. Bu değerler hedef değeriniz ile aynı birimlerde olmalıdır (yani hedef değeriniz 110 nF ise tüm değerleriniz nF olarak verilmelidir).

3. Adım: Sonuç

Sonuç
Sonuç

Sonucunuz için 3 çıktı alacaksınız:

  1. En Yakın Değer - parametrelerinizle elde edebileceğiniz en yakın direnç/kapasitans değeri.
  2. Fark - en yakın değerinizin hedef değerinizden ne kadar uzakta olduğu.
  3. Direnç/Kapasitör Konfigürasyonu - kullanılacak dirençlerin/kapasitörlerin değerlerinin ve konfigürasyonlarının bir listesi.

Adım 4: Sonucunuzu Anlama

Sonucu Anlamak
Sonucu Anlamak
Sonucu Anlamak
Sonucu Anlamak

Yapılandırma çıktısı standart bir gösterim kullanır. "+", bileşenlerin seri halinde olduğu anlamına gelir ve "||" bileşenlerin paralel olduğu anlamına gelir. Operatörler eşit önceliğe sahiptir ve soldan sağa ilişkiseldir, yani terimleri soldan başlayıp sağa doğru grupladığınız anlamına gelir.

Örneğin, aşağıdaki sonuca bir göz atın:

Direnç Yapılandırması: R0=15 Ohm + R1=470 Ohm || R2=3300 Ohm + R3=15000 Ohm

Yukarıda tartışılan yönergeleri izlerseniz, bunun aşağıdaki denklem ve yukarıdaki resme eşdeğer olduğunu görebilirsiniz.

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

Adım 5: Daha Fazla Proje

Daha fazla proje için sayfalarımı ziyaret edin:

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

Adım 6: Kaynak Kodu

Kaynak kodunu görüntülemek için bu Github deposunu ziyaret edin veya aşağıdaki JavaScript'e bakın.

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

/* r/c hesaplayıcı komut dosyası */ /* ------------------------------------------ -------------------------*/ var en yakın_val; // şimdiye kadarki en yakın değer var en yakın_diff = 1000000.00; // val ve hedef var en yakın farkı = ; // bileşenlerin değerlerini detaylandıran dizi var ser_par_config = ; // seri/paralel detaylandırma dizisi var outputStr = ""; fonksiyon hesaplayıcıClick() { // her yeni tıklama için global değerleri temizle en yakın_val = 0; en yakın_diff = 1000000.00; en yakın = ; 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; // hedef değer ayrıştırma hatası if (isNaN(target)) { outputStr = "'Hedef Değer' girişini kontrol etme hatası! " } // else if (isNaN(numComp)){ outputStr = "Hata denetimi 'Bileşen Sayısı' girişi! " } // else eğer hedefte hata yoksa veya numComp else if (!isNaN(target) && !isNaN(numComp)) { while (compValsStr.indexOf(", ") != -1) { var virgül = compValsStr.indexOf(", "); var newInt = parseFloat(compValsStr.substring(0, virgül)); // bileşen değer listesi ayrıştırılırken hata oluştu, bayrağı ayarla if (isNaN(newInt)) { errFlag = 1; kırmak; } compValsStr = compValsStr.substring(virgül+1, compValsStr.length); compVals = newInt; ben++; } var newInt = parseFloat(compValsStr); // bileşen değer listesi ayrıştırılırken hata, bayrağı ayarla if (isNaN(newInt)) { errFlag = 1; } compVals = newInt; if (errFlag == 0) { if (document.getElementById("resRadio").checked) { resistor(target, numComp, compVals); } else if (document.getElementById("capRadio").checked) { kapasitör(target, numComp, compVals); } } // bileşen değer listesi ayrıştırılırken hata { outputStr = "'Bileşen Değerleri Listesi' girişinde hata denetimi! " } } calcOutput.innerHTML = outputStr; sonuçDisplay.style.display = "blok"; exampleDisplay.style.display = "esnek"; // sonuca gitmek için aşağı kaydır window.scrollTo(0, exampleDisplay.scrollHeight); } /* En iyi direnç konfigürasyonunu alır ve yazdırır * hedef - hedef direnç değeri * numComp - hedef değerine ulaşmak için kullanılmasına izin verilen toplam direnç sayısı val * compVals - direnç değerleri dizisi */ function resistor(target, numComp, compVals) { // direnç değerlerinin uzunluğu var num_res = compVals.length; // (var i=1; i<=numComp; i++) { var data = ; resCombination(compVals, num_res, i, 0, veri, hedef); } var birimleri = document.getElementById("selected_unit").value; // sonuçları yazdır outputStr = "En Yakın Değer: " + En yakın_val.toFixed(3) + " " + birimler + " "; outputStr += "Fark: " + en yakın_diff.toFixed(3) + " " + birimler + " "; outputStr += "Direnç Yapılandırması: "; for (var i=0; i<numComp; i++) { if (i<en yakın.uzunluk) { outputStr += "R" + i + "=" + en yakın + " " + birimler + " "; if (i+1<en yakın.uzunluk) { if (ser_par_config[i+1]) outputStr += "|| "; else outputStr += "+ "; } } başka ara; } } /* Hedef değeri elde etmek için en iyi direnç kombinasyonunu hesaplar. * res - direnç değerlerinin giriş dizisi * num_res - giriş değerlerinin giriş dizisinin boyutu * num_comb - izin verilen direnç sayısı * indeks - tarak dizini * tarak - mevcut kombinasyon dizisi * hedef - hedef değer * Dönüş değeri yok - mevcut en iyi kombinasyonu global değerlere iletir */ function resCombination(res, num_res, num_comb, index, tarak, hedef) { // mevcut kombinasyon tamamlandı if (index == num_comb) { var ser_par_size = Math.pow (2, say_comb); // 2^(bileşen sayısı) var ser_par = ; // her bileşen için seri veya paralel belirten bool dizisi var calc; // hesaplanan eşdeğer direnç değeri // (var j=0; j) için geçerli kombinasyonun her olası seri/paralel yapılandırmasında adım adım ilerleyin k) & 1; } // (var k=0; k<num_comb; k++) için seri/paralel kombinasyona dayalı kombinasyon için hesaplamaları yapın { // ilk sayı, sadece if (k==0) calc = tarak[k]; // sıfır seri demektir, direnç değerlerini ekleyin yoksa (!ser_par[k]) calc += tarak[k]; // biri paralel demektir, karşılıklıların toplamının tersidir, yoksa if (ser_par[k]) calc = (calc*comb[k])/(calc+comb[k]); } // farkın önceki en iyiden daha az olup olmadığını kontrol edin if (Math.abs(calc - hedef) < en yakın_diff) { // daha az, bu nedenle global değerleri güncelleyin en yakın_val = calc; en yakın_diff = Math.abs(calc - hedef); // için sıfıra temizle (var k=0; k<num_comb; k++) { en yakın[k] = 0; } // (var k=0; k<num_comb; k++) için en yakın değeri & seri/paralel dizileri güncelle { en yakın[k] = tarak[k]; ser_par_config[k] = ser_par[k]; } } } 0 döndür; } // dizini yinelemeli olarak çağırın ve (var i=0; i= num_comb-index; i++) { comb[index] = res; resCombination(res, num_res, num_comb, index+1, tarak, hedef); } } /* En iyi kapasitör konfigürasyonunu alır ve yazdırır * hedef - hedef kapasitans değeri * numComp - hedef değerine ulaşmak için kullanılmasına izin verilen toplam kapasitör sayısı val * compVals - kapasitör değerleri dizisi */ function kapasitör(target, numComp, compVals) { // kapasitans değerlerinin uzunluğu var num_cap = compVals.length; // (var i=1; i<=numComp; i++) { var data = ; capCombination(compVals, num_cap, i, 0, veri, hedef); } var birimleri = document.getElementById("selected_unit").value; // sonuçları yazdır outputStr = "En Yakın Değer: " + En yakın_val.toFixed(3) + " " + birimler + " "; outputStr += "Fark: " + en yakın_diff.toFixed(3) + " " + birimler + " "; outputStr += "Kapasitör Yapılandırması: "; for (var i=0; i<numComp; i++) { if (i<en yakın.uzunluk) { outputStr += "C" + i + "=" + en yakın + " " + birimler + " "; if (i+1<en yakın.uzunluk) { if (ser_par_config[i+1]) outputStr += "|| "; else outputStr += "+ "; } } başka ara; } } /* Bir hedef değer elde etmek için en iyi kapasitör kombinasyonunu hesaplar. * cap - kondansatör değerlerinin giriş dizisi * num_cap - kondansatör değerlerinin giriş dizisinin boyutu * num_comb - izin verilen kapasitör sayısı * indeks - tarak dizini * tarak - mevcut kombinasyon dizisi * hedef - hedef değer * Dönüş değeri yok - mevcut en iyi kombinasyonu global değerlere iletir */ function capCombination(cap, num_cap, num_comb, index, tarak, hedef) { // mevcut kombinasyon tamamlandı if (index == num_comb) { var ser_par_size = Math.pow (2, say_comb); // 2^(bileşen sayısı) var ser_par = ; // her bileşen için seri veya paralel belirten bool dizisi var calc; // hesaplanan eşdeğer kapasitans değeri // (var j=0; j) için geçerli kombinasyonun her olası seri/paralel yapılandırmasında adım adım ilerleyin k) & 1; } // (var k=0; k) için seri/paralel kombinasyona dayalı kombinasyon için hesaplamaları yapın

Önerilen: