Spisu treści:

Jak osiągnąć dowolny opór/pojemność przy użyciu komponentów, które już posiadasz!: 6 kroków
Jak osiągnąć dowolny opór/pojemność przy użyciu komponentów, które już posiadasz!: 6 kroków

Wideo: Jak osiągnąć dowolny opór/pojemność przy użyciu komponentów, które już posiadasz!: 6 kroków

Wideo: Jak osiągnąć dowolny opór/pojemność przy użyciu komponentów, które już posiadasz!: 6 kroków
Wideo: Analizy termiczne urządzeń elektrycznych i elektronicznych w Ansys Icepak 2024, Listopad
Anonim
Jak osiągnąć jakąkolwiek rezystancję/pojemność przy użyciu komponentów, które już posiadasz!
Jak osiągnąć jakąkolwiek rezystancję/pojemność przy użyciu komponentów, które już posiadasz!

To nie jest tylko kolejny kalkulator rezystancji szeregowej/równoległej! Ten program oblicza, jak połączyć rezystory/kondensatory, które obecnie musisz osiągnąć, aby osiągnąć docelową wartość rezystancji/pojemności, której potrzebujesz.

Czy kiedykolwiek potrzebowałeś konkretnego rezystora lub kondensatora, którego nie masz lub który nie istnieje? Nie bać się! Prawdopodobnie możesz uzyskać tę konkretną wartość rezystancji lub pojemności, używając komponentów, które już masz. Zamiast rozwiązywać ogromny problem optymalizacji wielu zmiennych z milionami różnych kombinacji, użyj tego programu!

Po prostu wybierz rezystor lub kondensator, wprowadź wartość docelową, wprowadź maksymalną liczbę komponentów, których chcesz użyć, wprowadź listę wartości komponentów, które masz, i kliknij oblicz! Program wypisze jakich komponentów użyć i jak je połączyć, aby osiągnąć docelową wartość.

Aby wypróbować kalkulator, odwiedź tę aplikację internetową.

Aby wyświetlić kod źródłowy, odwiedź to repozytorium Github.

Daj mi znać, jeśli masz jakieś sugestie dotyczące dalszej poprawy użyteczności tego narzędzia do projektowania!

Krok 1: Tło

Tło
Tło

Ta aplikacja internetowa została stworzona z konieczności. Istnieje wiele różnych obwodów, które konstruuję, które wymagają bardzo specyficznego rezystora lub kondensatora. Wiele razy nie mam rezystora ani kondensatora o tej konkretnej wartości. Czasami nawet nie wytwarzają elementu o tak wyjątkowej wartości! Zamiast zrezygnować lub zadowolić się czymś, co jest mniej niż idealne, postanowiłem napisać program, który przeanalizuje każdą możliwą kombinację rezystorów (każdą możliwą wartość i czy są one połączone szeregowo czy równolegle) i zwróci najlepszą kombinację.

Projektując obwód dla moich organów w ramach mojego projektu „Battle of the Bands Instructable Project”, musiałem spróbować ręcznie obliczyć najlepszą kombinację kondensatorów, aby osiągnąć określoną częstotliwość. Ten proces był niesamowicie żmudny i ostatecznie po prostu się poddałem i wybrałem kombinacje kondensatorów, które wytwarzały dowolną ilość słyszalnej częstotliwości. Teraz dzięki tej aplikacji internetowej mogę zaprojektować moje organy na określoną częstotliwość i dostroić je do nut na klawiaturze! Poniższe równanie służy do obliczania określonej częstotliwości i jest omówione w innym projekcie Instructables.

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

Używając tego równania, gdzie R1 = 100 kOhm i R2 = 10 kOhm, obliczyłem, że kondensator 27,33 nF wytworzy nutę A4 (częstotliwość 440 Hz). Używając mojego programu, byłem w stanie obliczyć równoważną wartość pojemności w granicach 0,001 nF (znacznie mniej niż tolerancja na standardowym kondensatorze), którą mogę stworzyć za pomocą kondensatorów, które już miałem. Wynikowe dane wyjściowe i konfigurację opisano poniżej. Teraz jestem w stanie znacznie wydajniej i efektywniej dostroić mój organ do dokładnych częstotliwości standardowych dźwięków. Żałuję, że nie zrobiłem tego na początku. Moja piosenka demo na organach prawdopodobnie brzmiałaby znacznie lepiej.

Najbliższa wartość: 27,329 nF Różnica: 0,001 nFC Konfiguracja kondensatora: C0=0,068 nF || C1=30 nF + C2=300 nF

Równania równoważności kondensatorów rezystorowych

Dla porównania poniżej znajdują się równania równoważności dotyczące łączenia rezystorów i kondensatorów w obwodzie.

  • Rezystory szeregowe (R1 + R2): Req = R1 + R2
  • Rezystory równolegle (R1 || R2): Req = 1 / (1/R1 + 1/R2)
  • Kondensatory szeregowo (C1 + C2): Ceq = 1 / (1/C1 + 1/C2)
  • Kondensatory równolegle (C1 || C2): Ceq = C1 + C2

Krok 2: Wejścia

Wejścia
Wejścia

Musisz podać 4 dane wejściowe:

  1. Niezależnie od tego, czy obliczasz wartość rezystora, czy kondensatora.
  2. Docelowa wartość rezystancji lub pojemności i jednostki.
  3. Maksymalna liczba elementów, których chciałbyś użyć, aby osiągnąć docelową wartość (tzn. nie chciałbym używać więcej niż 3 rezystorów, aby osiągnąć docelową wartość rezystancji).
  4. Lista wartości rezystorów/kondensatorów, które obecnie posiadasz. Te wartości powinny być w tych samych jednostkach, co wartość docelowa (tj. jeśli wartość docelowa wynosiła 110 nF, wszystkie wartości powinny być podane w nF).

Krok 3: Wynik

Wynik
Wynik

Otrzymasz 3 wyniki dla swojego wyniku:

  1. Najbliższa wartość - najbliższa wartość rezystancji/pojemności, jaką udało ci się osiągnąć przy swoich parametrach.
  2. Różnica - jak daleko Twoja najbliższa wartość była od wartości docelowej.
  3. Konfiguracja rezystora/kondensatora - lista wartości rezystorów/kondensatorów do użycia oraz ich konfiguracja.

Krok 4: Zrozumienie wyniku

Zrozumienie swojego wyniku
Zrozumienie swojego wyniku
Zrozumienie swojego wyniku
Zrozumienie swojego wyniku

Dane wyjściowe konfiguracji używają standardowej notacji. „+” oznacza, że komponenty są połączone szeregowo, a „||” oznacza, że komponenty są równoległe. Operatory mają równe pierwszeństwo i są kojarzone od lewej do prawej, co oznacza, że terminy grupuje się, zaczynając od lewej i przesuwając się w prawo.

Na przykład spójrz na następujący wynik:

Konfiguracja rezystora: R0=15 omów + R1=470 omów || R2=3300 omów + R3=15000 omów

Jeśli zastosujesz się do wskazówek omówionych powyżej, zobaczysz, że jest to równoważne poniższemu równaniu i obrazowi powyżej.

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

Krok 5: Więcej projektów

Więcej projektów znajdziesz na moich stronach:

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

Krok 6: Kod źródłowy

Aby wyświetlić kod źródłowy, odwiedź to repozytorium Github lub zobacz poniższy JavaScript.

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

/* skrypty kalkulatora r/c */ /* --------------------------------------- -------------------------*/ var najbliższa_val; // najbliższa jak dotąd wartość var najbliższa_diff = 1000000.00; // diff val i docelowej var najbliższej = ; // tablica ze szczegółowymi wartościami komponentów var ser_par_config = ; // tablica ze szczegółami serial/parallel var outputStr = ""; function CalculatorClick() { // wyczyść wartości globalne dla każdego nowego kliknięcia Najbliższa_val = 0; najbliższa_różnica = 1000000.00; najbliższy = ; 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] = ""; zmienna i = 0; var flaga błędu = 0; // błąd w parsowaniu wartości docelowej if (isNaN(target)) { outputStr = "Sprawdź błąd input 'Wartość docelowa'! " } // błąd w parsowaniu liczby komponentów else if (isNaN(numComp)){ outputStr = "Sprawdzenie błędów Dane wejściowe „Liczba składników”! " } // else if brak błędu w obiekcie docelowym lub numComp else if (!isNaN(target) && !isNaN(numComp)) { while (compValsStr.indexOf(", ") != -1) { var comma = compValsStr.indexOf(", "); var newInt = parseFloat(compValsStr.substring(0, przecinek)); // błąd w parsowaniu listy wartości komponentów, ustaw flagę if (isNaN(newInt)) { errFlag = 1; przerwa; } compValsStr = compValsStr.substring(przecinek+1, compValsStr.length); compVals = newInt; i++; } var newInt = parseFloat(compValsStr); // błąd w parsowaniu listy wartości komponentów, ustaw flagę if (isNaN(newInt)) { errFlag = 1; } compVals = newInt; if (errFlag == 0) { if (document.getElementById("resRadio").checked) { rezystor(target, numComp, compVals); } else if (document.getElementById("capRadio").checked) { kondensator(target, numComp, compVals); } } // błąd w parsowaniu listy wartości komponentów else { outputStr = "Sprawdzenie błędu input 'Lista wartości komponentów'!" } } calcOutput.innerHTML = outputStr; wynikDisplay.style.display = "blok"; exampleDisplay.style.display = "flex"; // przewiń w dół do wyniku window.scrollTo(0, exampleDisplay.scrollHeight); } /* Pobiera i drukuje najlepszą konfigurację rezystorów * target - docelowa wartość rezystancji * numComp - całkowita liczba rezystorów dozwolona do osiągnięcia docelowej val * compVals - tablica wartości rezystorów */ function rezystor(target, numComp, compVals) { // długość wartości rezystancji var num_res = compVals.length; // przeprowadź wszystkie możliwe liczby komponentów for (var i=1; i<=numComp; i++) { var data = ; resCombination(compVals, num_res, i, 0, data, target); } var jednostki = document.getElementById("selected_unit").value; // wypisuj wyniki outputStr = "Najbliższa wartość: " + najbliższa_wartość.toFixed(3) + " " + jednostki + " "; outputStr += "Różnica: " + najbliższy_różnic.toFixed(3) + " " + jednostki + " "; outputStr += "Konfiguracja rezystora: "; for (var i=0; i<numComp; i++) { if (i<najbliższa.długość) { outputStr += "R" + i + "=" + najbliższe + " " + jednostki + " "; if (i+1<najbliższa.długość) { if (ser_par_config[i+1]) outputStr += "|| "; w przeciwnym razie outputStr += "+ "; } } inny przerwa; } } /* Oblicza najlepszą kombinację rezystorów do osiągnięcia wartości docelowej. * res - wejściowa tablica wartości rezystorów * num_res - rozmiar wejściowej tablicy wartości rezystorów * num_comb - dozwolona liczba rezystorów * index - indeks comb * comb - tablica aktualnej kombinacji * target - wartość docelowa * Brak zwracanej wartości - przekazuje bieżącą najlepszą kombinację do wartości globalnych */ function resCombination(res, num_res, num_comb, index, comb, target) { // bieżąca kombinacja jest kompletna if (index == num_comb) { var ser_par_size = Math.pow (2, liczba_grzebień); // 2^(liczba składników) var ser_par = ; // tablica bool określająca szeregowy lub równoległy dla każdego komponentu var calc; // obliczona równoważna wartość rezystancji // przejdź przez każdą możliwą konfigurację szeregową/równoległą aktualnej kombinacji dla (var j=0; j k) i 1; } // wykonaj obliczenia dla kombinacji opartej na kombinacji szeregowej/równoległej for (var k=0; k<num_comb; k++) { // pierwsza liczba, po prostu dodaj if (k==0) calc = comb[k]; // zero oznacza szereg, dodaj wartości oporu w przeciwnym razie if (!ser_par[k]) calc += comb[k]; // jeden oznacza równoległość, odwrotność sumy odwrotności else if (ser_par[k]) calc = (calc*comb[k])/(calc+comb[k]); } // sprawdź, czy różnica jest mniejsza niż poprzednia najlepsza if (Math.abs(calc - cel) < najbliższy_różnic) { // jest mniejsza, więc zaktualizuj wartości globalne Najbliższa_val = calc; Najbliższy_diff = Math.abs(calc - cel); // wyczyść do zera for (var k=0; k<num_comb; k++) { najbliższe[k] = 0; } // zaktualizuj najbliższą wartość i tablice serii/równoległych for (var k=0; k<liczba_grzebienia; k++) { najbliższy[k] = grzebień[k]; ser_par_config[k] = ser_par[k]; } } } return 0; } // rekurencyjne wywołanie i zastąpienie indeksu wszystkimi możliwymi wartościami for (var i=0; i= num_comb-index; i++) { comb[index] = res; resCombination(res, liczba_res, liczba_grzebień, indeks+1, grzebień, cel); } } /* Pobiera i drukuje najlepszą konfigurację kondensatora * target - docelowa wartość pojemności * numComp - całkowita liczba kondensatorów dozwolona do osiągnięcia docelowej val * compVals - tablica wartości kondensatorów */ function kondensator(target, numComp, compVals) { // długość wartości pojemności var num_cap = compVals.length; // przeprowadź wszystkie możliwe liczby komponentów for (var i=1; i<=numComp; i++) { var data = ; capCombination(compVals, num_cap, i, 0, data, target); } var jednostki = document.getElementById("selected_unit").value; // wypisuj wyniki outputStr = "Najbliższa wartość: " + najbliższa_wartość.toFixed(3) + " " + jednostki + " "; outputStr += "Różnica: " + najbliższy_różnic.toFixed(3) + " " + jednostki + " "; outputStr += "Konfiguracja kondensatora: "; for (var i=0; i<numComp; i++) { if (i<najbliższa.długość) { outputStr += "C" + i + "=" + najbliższe + " " + jednostki + " "; if (i+1<najbliższa.długość) { if (ser_par_config[i+1]) outputStr += "|| "; w przeciwnym razie outputStr += "+ "; } } inny przerwa; } } /* Oblicza najlepszą kombinację kondensatorów do osiągnięcia wartości docelowej. * cap - wejściowa tablica wartości kondensatorów * num_cap - wielkość wejściowej tablicy wartości kondensatorów * num_comb - dozwolona liczba kondensatorów * index - indeks comb * comb - tablica aktualnej kombinacji * target - wartość docelowa * Brak zwracanej wartości - przekazuje bieżącą najlepszą kombinację do wartości globalnych */ function capCombination(cap, num_cap, num_comb, index, comb, target) { // bieżąca kombinacja jest kompletna if (index == num_comb) { var ser_par_size = Math.pow (2, liczba_grzebień); // 2^(liczba składników) var ser_par = ; // tablica bool określająca szeregowy lub równoległy dla każdego komponentu var calc; // obliczona równoważna wartość pojemności // przejdź przez każdą możliwą konfigurację szeregową/równoległą aktualnej kombinacji for (var j=0; j k) i 1; } // wykonaj obliczenia dla kombinacji opartej na kombinacji szeregowej/równoległej for (var k=0; k

Zalecana: