Оглавление:

Как достичь любого сопротивления / емкости, используя уже имеющиеся у вас компоненты !: 6 шагов
Как достичь любого сопротивления / емкости, используя уже имеющиеся у вас компоненты !: 6 шагов

Видео: Как достичь любого сопротивления / емкости, используя уже имеющиеся у вас компоненты !: 6 шагов

Видео: Как достичь любого сопротивления / емкости, используя уже имеющиеся у вас компоненты !: 6 шагов
Видео: ТОП 30+ лекций. Радиотехника. Антенны. Согласующие устройства. Тимур Гаранин 2024, Ноябрь
Anonim
Как достичь любого сопротивления / емкости, используя уже имеющиеся у вас компоненты!
Как достичь любого сопротивления / емкости, используя уже имеющиеся у вас компоненты!

Это не просто еще один калькулятор последовательного / параллельного эквивалентного сопротивления! Эта программа вычисляет, как комбинировать резисторы / конденсаторы, которые вам нужны в настоящее время, чтобы достичь требуемого значения сопротивления / емкости, которое вам нужно.

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

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

Чтобы опробовать калькулятор, посетите это веб-приложение.

Чтобы просмотреть исходный код, посетите этот репозиторий Github.

Пожалуйста, дайте мне знать, если у вас есть предложения по дальнейшему повышению удобства использования этого инструмента дизайна!

Шаг 1. Справочная информация

Фон
Фон

Это веб-приложение было разработано по необходимости. Я создаю много различных схем, для которых требуется особый резистор или конденсатор. Часто у меня нет резистора или конденсатора с таким номиналом. Иногда они даже не делают компонент с такой уникальной ценностью! Вместо того, чтобы отказываться или соглашаться на что-то менее чем идеальное, я решил написать программу, которая просматривала бы все возможные комбинации резисторов (все возможные значения, независимо от того, включены ли они последовательно или параллельно) и возвращала лучшую комбинацию.

При разработке схемы для моего органа в рамках моего обучающего проекта «Битва оркестров» мне пришлось вручную рассчитать наилучшую комбинацию конденсаторов для достижения определенной частоты. Этот процесс был невероятно утомительным, и в конце концов я просто сдался и выбрал комбинации конденсаторов, которые давали любую слышимую частоту. Теперь с помощью этого веб-приложения я могу настроить свой орган на определенную частоту и настроить его на ноты на клавиатуре! Приведенное ниже уравнение используется для расчета конкретной частоты и обсуждается в другом проекте Instructables.

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

Используя это уравнение, где R1 = 100 кОм и R2 = 10 кОм, я вычислил, что конденсатор 27,33 нФ будет воспроизводить ноту A4 (частота 440 Гц). Используя свою программу, я смог вычислить эквивалентное значение емкости в пределах 0,001 нФ (намного меньше, чем допуск для стандартного конденсатора), которое я могу создать, используя конденсаторы, которые у меня уже были. Полученный результат и конфигурация описаны ниже. Теперь я могу более эффективно и действенно настраивать свой орган на точные частоты стандартных нот. Хотел бы я сделать это с самого начала. Моя демо-песня для органа, наверное, звучала бы намного лучше.

Ближайшее значение: 27,329 нФ Разница: 0,001 нФКонфигурация конденсатора: C0 = 0,068 нФ || C1 = 30 нФ + C2 = 300 нФ

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

Для справки ниже приведены уравнения эквивалентности для объединения резисторов и конденсаторов в цепи.

  • Последовательные резисторы (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 нФ, все ваши значения должны быть указаны в нФ).

Шаг 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 closest_val; // ближайшее на данный момент значение var closest_diff = 1000000.00; // различие val и target var closest = ; // массив, детализирующий значения компонентов var ser_par_config = ; // подробный массив последовательный / параллельный var outputStr = ""; function CalculatorClick () {// очищаем глобальные значения для каждого нового клика closest_val = 0; closest_diff = 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 'Number of Components' input! "} // иначе, если нет ошибки в target или numComp else if (! IsNaN (target) &&! IsNaN (numComp)) {while (compValsStr.indexOf (", ")! = -1) {var запятая = 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; если (errFlag == 0) {если (document.getElementById ("resRadio"). проверено) {резистор (цель, numComp, compVals); } else if (document.getElementById ("capRadio"). checked) {конденсатор (цель, numComp, compVals); }} // ошибка при синтаксическом анализе списка значений компонентов else {outputStr = "Ошибка проверки 'input Список значений компонентов'!"}} calcOutput.innerHTML = outputStr; resultDisplay.style.display = "блок"; exampleDisplay.style.display = "гибкий"; // прокрутите вниз до результата window.scrollTo (0, exampleDisplay.scrollHeight); } / * Извлекает и распечатывает наилучшую конфигурацию резистора * target - целевое значение сопротивления * numComp - общее количество резисторов, разрешенных для использования для достижения целевого значения * compVals - массив значений резисторов * / функция resistor (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"). value; // вывод результатов outputStr = "Ближайшее значение:" + closest_val.toFixed (3) + "" + units + ""; outputStr + = "Разница:" + closest_diff.toFixed (3) + "" + единицы + ""; outputStr + = "Конфигурация резистора:"; for (var i = 0; i <numComp; i ++) {if (i <closest.length) {outputStr + = "R" + i + "=" + closest + "" + units + ""; если (я + 1 <ближайшая длина) {если (ser_par_config [я + 1]) outputStr + = "||"; иначе outputStr + = "+"; }} еще перерыв; }} / * Вычисляет лучшую комбинацию резисторов для достижения целевого значения. * res - входной массив значений резисторов * num_res - размер входного массива значений резисторов * num_comb - количество разрешенных резисторов * index - индекс гребенки * comb - массив текущей комбинации * target - целевое значение * Без возвращаемого значения - передает текущую лучшую комбинацию в глобальные значения * / function resCombination (res, num_res, num_comb, index, comb, target) {// текущая комбинация завершена if (index == num_comb) {var ser_par_size = Math.pow (2, число_комб); // 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]; // ноль означает серию, добавляем значения сопротивления иначе if (! ser_par [k]) calc + = comb [k]; // один означает параллельность, обратная сумме обратных чисел else if (ser_par [k]) calc = (calc * comb [k]) / (calc + comb [k]); } // проверяем, меньше ли разница, чем предыдущая лучшая if (Math.abs (calc - target) <closest_diff) {// она меньше, поэтому обновите глобальные значения closest_val = calc; closest_diff = Math.abs (calc - цель); // очистить до нуля для (var k = 0; k <num_comb; k ++) {closest [k] = 0; } // обновляем ближайшее значение и последовательные / параллельные массивы для (var k = 0; k <num_comb; k ++) {closest [k] = comb [k]; ser_par_config [k] = ser_par [k]; }}} return 0; } // рекурсивно вызываем и заменяем индекс всеми возможными значениями для (var i = 0; i = num_comb-index; i ++) {comb [index] = res ; resCombination (res, num_res, num_comb, index + 1, comb, target); }} / * Извлекает и распечатывает наилучшую конфигурацию конденсатора * target - целевое значение емкости * numComp - общее количество конденсаторов, разрешенных для использования для достижения целевого значения * compVals - массив значений конденсаторов * / функция конденсатор (target, numComp, compVals) {// длина значений емкости var num_cap = compVals.length; // проходим все возможное количество компонентов for (var i = 1; i <= numComp; i ++) {var data = ; capCombination (compVals, num_cap, i, 0, данные, цель); } var units = document.getElementById ("selected_unit"). value; // вывод результатов outputStr = "Ближайшее значение:" + closest_val.toFixed (3) + "" + units + ""; outputStr + = "Разница:" + closest_diff.toFixed (3) + "" + единицы + ""; outputStr + = "Конфигурация конденсатора:"; for (var i = 0; i <numComp; i ++) {if (i <closest.length) {outputStr + = "C" + i + "=" + ближайший + "" + единицы + ""; если (я + 1 <ближайшая длина) {если (ser_par_config [я + 1]) outputStr + = "||"; иначе outputStr + = "+"; }} еще перерыв; }} / * Вычисляет наилучшую комбинацию конденсаторов для достижения целевого значения. * cap - входной массив значений конденсаторов * num_cap - размер входного массива значений конденсаторов * num_comb - количество разрешенных конденсаторов * index - индекс гребенки * comb - массив текущей комбинации * target - целевое значение * Без возвращаемого значения - передает текущую лучшую комбинацию в глобальные значения * / function capCombination (cap, num_cap, num_comb, index, comb, target) {// текущая комбинация завершена if (index == num_comb) {var ser_par_size = Math.pow (2, число_комб); // 2 ^ (количество компонентов) var ser_par = ; // массив bool, определяющий последовательный или параллельный ряд для каждого компонента var calc; // вычисляемое значение эквивалентной емкости // перебираем все возможные последовательные / параллельные конфигурации комбинации токов для (var j = 0; j л) и 1; } // выполняем вычисления для комбинации на основе комбинации последовательного / параллельного для (var k = 0; k

Рекомендуемые: