Съдържание:

Как да постигнете съпротивление/капацитет, като използвате компоненти, които вече имате !: 6 стъпки
Как да постигнете съпротивление/капацитет, като използвате компоненти, които вече имате !: 6 стъпки

Видео: Как да постигнете съпротивление/капацитет, като използвате компоненти, които вече имате !: 6 стъпки

Видео: Как да постигнете съпротивление/капацитет, като използвате компоненти, които вече имате !: 6 стъпки
Видео: Элон Маск: Элон Маск: Человек, создавший Tesla, SpaceX, SolarCity... 2024, Юли
Anonim
Как да постигнете съпротивление/капацитет, като използвате компоненти, които вече имате!
Как да постигнете съпротивление/капацитет, като използвате компоненти, които вече имате!

Това не е просто поредният калкулатор на серийно/паралелно еквивалентно съпротивление! Тази програма изчислява как да комбинирате резистори/кондензатори, които в момента имате, за да постигнете целева стойност на съпротивлението/капацитета, от която се нуждаете.

Имали ли сте някога нужда от конкретен резистор или кондензатор, който нямате или който не съществува? Не се страхувайте! Вероятно можете да направите това специфично съпротивление или стойност на капацитета, като използвате компоненти, които вече имате. Вместо да решавате огромен многовариантна задача за оптимизация с милиони различни комбинации, използвайте тази програма!

Просто изберете резистор или кондензатор, въведете целевата стойност, въведете максималния брой компоненти, които искате да използвате, въведете списък със стойностите на компонентите, които имате, и щракнете върху изчисляване! Програмата ще изплюе какви компоненти да използва и как да ги свърже, за да постигне вашата целева стойност.

За да изпробвате калкулатора, посетете това уеб приложение.

За да видите изходния код, посетете това хранилище на Github.

Моля, уведомете ме, ако имате предложения за допълнително подобряване на използваемостта на този инструмент за проектиране!

Стъпка 1: Предистория

Заден план
Заден план

Това уеб приложение е разработено по необходимост. Конструирам много различни схеми, които изискват много специфичен резистор или кондензатор. Много пъти нямам резистор или кондензатор с тази конкретна стойност. Понякога дори не правят компонент с тази уникална стойност! Вместо да се откажа или да се задоволя с нещо, което е по -малко от идеалното, реших да напиша програма, за да разгледам всяка възможна комбинация от резистори (всяка възможна стойност и дали са последователни или паралелни) и да върна най -добрата комбинация.

Когато проектирах веригата за моя орган като част от моя Инструктируем проект на Battle of the Bands, трябваше да се опитам на ръка да изчисля най -добрата комбинация от кондензатори за постигане на определена честота. Този процес беше невероятно досаден и в крайна сметка просто се отказах и отидох с комбинации от кондензатори, които произвеждаха каквото и да е звукова честота. Сега с това уеб приложение мога да проектирам органа си за определена честота и да го настроя на нотите на клавиатурата! Уравнението по -долу се използва за изчисляване на специфичната честота и се обсъжда в другия проект на Instructables.

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

Използвайки това уравнение, където R1 = 100 kOhm и R2 = 10 kOhm, изчислих, че 27,33 nF кондензатор ще произведе нота A4 (честота 440 Hz). Използвайки моята програма, успях да изчисля еквивалентна стойност на капацитета в рамките на.001 nF (много по -малко от допустимото отклонение на стандартен кондензатор), която мога да създам с помощта на кондензатори, които вече бях имал. Полученият резултат и конфигурацията са описани по -долу. Сега съм в състояние много по -ефективно и ефективно да настроя органа си на точните честоти на стандартните ноти. Иска ми се да бях направил това за начало. Моята демо песен на органа вероятно щеше да звучи много по -добре.

Най -близка стойност: 27.329 nF Разлика: 0.001 nFC Конфигурация на кондензатор: C0 = 0.068 nF || C1 = 30 nF + C2 = 300 nF

Уравнения за еквивалентност на резисторен кондензатор

За справка, по -долу са уравненията за еквивалентност за комбиниране на резистори и кондензатори във верига.

  • Резистори последователно (R1 + R2): Req = R1 + R2
  • Паралелни резистори (R1 || R2): Req = 1/(1/R1 + 1/R2)
  • Кондензатори последователно (C1 + C2): Ceq = 1/(1/C1 + 1/C2)
  • Паралелни кондензатори (C1 || C2): Ceq = C1 + C2

Стъпка 2: Входове

Входове
Входове

Има 4 входа, които трябва да предоставите:

  1. Независимо дали изчислявате стойност за резистор или кондензатор.
  2. Целевото съпротивление или стойността на капацитета и мерните единици.
  3. Максималният брой компоненти, които бихте искали да използвате за постигане на целевата стойност (т.е. не бих искал да използвам повече от 3 резистора, за да постигна стойността на целевото си съпротивление).
  4. Списъкът със стойности за резисторите/кондензаторите, които имате в момента. Тези стойности трябва да са в същите единици като вашата целева стойност (т.е. ако вашата целева стойност е 110 nF, всичките ви стойности трябва да бъдат предоставени в nF).

Стъпка 3: Резултат

Резултат
Резултат

Ще получите 3 изхода за вашия резултат:

  1. Най -близка стойност - най -близката стойност на съпротивление/капацитет, която успяхте да постигнете с вашите параметри.
  2. Разлика - колко далеч е най -близката ви стойност от вашата целева стойност.
  3. Конфигурация на резистор/кондензатор - списък със стойности на резисторите/кондензаторите за използване и тяхната конфигурация.

Стъпка 4: Разбиране на резултата ви

Разбиране на вашия резултат
Разбиране на вашия резултат
Разбиране на вашия резултат
Разбиране на вашия резултат

Конфигурационният изход използва стандартна нотация. "+" означава, че компонентите са последователни и "||" означава, че компонентите са успоредни. Операторите имат равен приоритет и са асоциативни отляво надясно, което означава, че групирате термини заедно, започвайки отляво и се придвижвайки надясно.

Например, погледнете следния резултат:

Конфигурация на резистора: R0 = 15 ома + R1 = 470 ома || R2 = 3300 ома + R3 = 15000 ома

Ако следвате указанията, обсъдени по -горе, можете да видите, че това е еквивалентно на следното уравнение и изображение по -горе.

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

Стъпка 5: Още проекти

За още проекти посетете моите страници:

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

Стъпка 6: Изходен код

За да видите изходния код, посетете това хранилище на Github или вижте JavaScript по -долу.

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

/* r/c скрипт за калкулатор*//* --------------------------------------- -------------------------*/ var най-близък_val; // най -близката стойност досега var nearest_diff = 1000000.00; // разлика на val и target var най -близко = ; // масив, детайлизиращ стойностите на компонентите var ser_par_config = ; // масив, детайлизиращ сериен/паралелен var outputStr = ""; функция CalculatorClick () {// изчистване на глобалните стойности за всяко ново щракване близки_val = 0; най -близък_диф = 1000000,00; най -близък = ; 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; // грешка при синтактичния анализ на целевата стойност if (isNaN (target)) {outputStr = "Error check 'Target Value' input!"} // грешка при анализирането на броя на компонентите else if (isNaN (numComp)) {outputStr = "Error check "Брой на компонентите" вход! "} // иначе, ако няма грешка в target или numComp else if (! IsNaN (target) &&! IsNaN (numComp)) {while (compValsStr.indexOf (", ")! = -1) {var comma = compValsStr.indexOf (","); var newInt = parseFloat (compValsStr.substring (0, запетая)); // грешка при анализиране на списъка със стойности на компонента, задайте флаг if (isNaN (newInt)) {errFlag = 1; прекъсване; } compValsStr = compValsStr.substring (запетая+1, compValsStr.length); compVals = newInt; i ++; } var newInt = parseFloat (compValsStr); // грешка при анализиране на списъка със стойности на компонента, задайте флаг if (isNaN (newInt)) {errFlag = 1; } compVals = newInt; if (errFlag == 0) {if (document.getElementById ("resRadio"). проверено) {резистор (target, numComp, compVals); } иначе ако (document.getElementById ("capRadio"). проверено) {кондензатор (target, numComp, compVals); }} // грешка при синтактичния анализ на списъка със стойности на компонента else {outputStr = "Проверка на грешки" Вход за списък на стойностите на компонентите! "}} calcOutput.innerHTML = outputStr; resultDisplay.style.display = "блок"; exampleDisplay.style.display = "flex"; // превъртете надолу до резултата window.scrollTo (0, exampleDisplay.scrollHeight); } / * Извлича и отпечатва най -добрата конфигурация на резистора * target - целева стойност на съпротивлението * numComp - общ брой резистори, разрешени за използване за постигане на целевата val * compVals - масив от стойности на резистора * / функция резистор (target, numComp, compVals) { // дължина на стойностите на съпротивлението var num_res = compVals.length; // преминаваме през всички възможни брой компоненти за (var i = 1; i <= numComp; i ++) {var data = ; resCombination (compVals, num_res, i, 0, data, target); } var units = document.getElementById ("selected_unit"). стойност; // отпечатайте резултатите outputStr = "Най -близка стойност:" + най -близък_val.toFixed (3) + "" + единици + ""; outputStr + = "Разлика:" + най -близка_дифф. към Fixed (3) + "" + единици + ""; outputStr += "Конфигурация на резистора:"; за (var i = 0; i <numComp; i ++) {if (i <най -близка.дължина) {outputStr + = "R" + i + "=" + най -близък + "" + единици + ""; if (i+1 <най -близка.дължина) {if (ser_par_config [i+1]) outputStr+= "||"; else outputStr + = " +"; }} else break; }} /* Изчислява най -добрата комбинация от резистори за постигане на целева стойност. * res - входен масив от стойности на резистори * num_res - размер на входния масив от стойности на резистори * num_comb - брой разрешени резистори * индекс - индекс на гребен * гребен - масив от текуща комбинация * цел - целевата стойност * Няма връщаща стойност - предава текущата най -добра комбинация към глобални стойности */ функция resCombination (res, num_res, num_comb, index, comb, target) {// текущата комбинация е пълна, ако (index == num_comb) {var ser_par_size = Math.pow (2, num_comb); // 2^(брой компоненти) var ser_par = ; // bool масив, определящ сериен или паралелен за всеки компонент var calc; // изчислена стойност на еквивалентно съпротивление // преминаване през всяка възможна серия/паралелна конфигурация на текущата комбинация за (var j = 0; j к) & 1; } // направете изчисленията за комбинацията въз основа на серия/паралелна комбинация за (var k = 0; k <num_comb; k ++) {// първо число, просто добавете if (k == 0) calc = comb [k]; // нула означава серия, добавете стойности на съпротивление else if (! ser_par [k]) calc += comb [k]; // едно означава паралелно, обратно на сумата от реципрочни, иначе if (ser_par [k]) calc = (calc*comb [k])/(calc+comb [k]); } // проверяваме дали разликата е по -малка от предишната най -добра, ако (Math.abs (calc - target) <близки_диф) {// е по -малка, така че актуализирайте глобалните стойности najbli_val = calc; najbli_diff = Math.abs (изчисляване - цел); // изчистване до нула за (var k = 0; k <num_comb; k ++) {най -близко [k] = 0; } // актуализиране на най -близката стойност & серия/паралелни масиви за (var k = 0; k <num_comb; k ++) {най -близко [k] = гребен [k]; ser_par_config [k] = ser_par [k]; }}} връщане 0; } // рекурсивно извикване и замяна на индекса с всички възможни стойности за (var i = 0; i = num_comb-index; i ++) {comb [index] = res ; resCombination (res, num_res, num_comb, index+1, comb, target); }} / * Извлича и отпечатва най -добрата конфигурация на кондензатора * цел - целева стойност на капацитета * numComp - общ брой кондензатори, разрешени за използване за постигане на целевата стойност val * compVals - масив от стойности на кондензатора * / функционален кондензатор (target, numComp, compVals) {// дължина на стойностите на капацитета var num_cap = compVals.length; // преминаваме през всички възможни брой компоненти за (var i = 1; i <= numComp; i ++) {var data = ; capCombination (compVals, num_cap, i, 0, данни, цел); } var units = document.getElementById ("selected_unit"). стойност; // отпечатайте резултатите outputStr = "Най -близка стойност:" + най -близък_val.toFixed (3) + "" + единици + ""; outputStr + = "Разлика:" + най -близка_дифф. към Fixed (3) + "" + единици + ""; outputStr += "Конфигурация на кондензатор:"; за (var i = 0; i <numComp; i ++) {if (i <най -близка.дължина) {outputStr + = "C" + i + "=" + най -близък + "" + единици + ""; if (i+1 <най -близка.дължина) {if (ser_par_config [i+1]) outputStr+= "||"; else outputStr + = " +"; }} else break; }} /* Изчислява най -добрата комбинация от кондензатори за постигане на целева стойност. * капачка - входен масив от стойности на кондензатора * num_cap - размер на входния масив от стойности на кондензатора * num_comb - брой разрешени кондензатори * индекс - индекс на гребен * гребен - масив от текуща комбинация * цел - целевата стойност * Няма връщаща стойност - предава текущата най -добра комбинация към глобални стойности */ функция capCombination (капачка, num_cap, num_comb, индекс, гребен, цел) {// текущата комбинация е пълна, ако (индекс == num_comb) {var ser_par_size = Math.pow (2, num_comb); // 2^(брой компоненти) var ser_par = ; // bool масив, определящ сериен или паралелен за всеки компонент var calc; // изчислена еквивалентна стойност на капацитета // преминаване през всяка възможна серия/паралелна конфигурация на текущата комбинация за (var j = 0; j к) & 1; } // направете изчисленията за комбинацията въз основа на серия/паралелна комбинация за (var k = 0; k

Препоръчано: