สารบัญ:

วิธีบรรลุความต้านทาน/ความจุโดยใช้ส่วนประกอบที่คุณมีอยู่แล้ว!: 6 ขั้นตอน
วิธีบรรลุความต้านทาน/ความจุโดยใช้ส่วนประกอบที่คุณมีอยู่แล้ว!: 6 ขั้นตอน

วีดีโอ: วิธีบรรลุความต้านทาน/ความจุโดยใช้ส่วนประกอบที่คุณมีอยู่แล้ว!: 6 ขั้นตอน

วีดีโอ: วิธีบรรลุความต้านทาน/ความจุโดยใช้ส่วนประกอบที่คุณมีอยู่แล้ว!: 6 ขั้นตอน
วีดีโอ: ที่สุดของความละมุน #โยชิรินลดา #โยชิ #fyp 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 nFCapacitor การกำหนดค่า: 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 closed_diff = 1000000.00; // diff ของ val และเป้าหมาย var ใกล้เคียงที่สุด = ; // อาร์เรย์รายละเอียดค่าของส่วนประกอบ var ser_par_config = ; // อาร์เรย์รายละเอียดอนุกรม/ขนาน var outputStr = ""; ฟังก์ชั่น calculatorClick () { // ล้างค่าส่วนกลางสำหรับแต่ละคลิกใหม่ที่ใกล้ที่สุด_val = 0; Near_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 = parseFloat (targetTextObj.value); var numComp = parseInt (numCompTextObj.value); var compValsStr = compValsTextObj.value; var compVals = ; compVals[0] = ""; var i = 0; วาร์ errFlag = 0; // ข้อผิดพลาดในการแยกวิเคราะห์ค่าเป้าหมาย if (isNaN (target)) { outputStr = "Error check 'Target Value' input!" } // ข้อผิดพลาดในการแยกวิเคราะห์จำนวนส่วนประกอบอื่น if (isNaN (numComp))) { outputStr = "ตรวจสอบข้อผิดพลาด อินพุต 'จำนวนส่วนประกอบ'! " } // อย่างอื่นถ้าไม่มีข้อผิดพลาดในเป้าหมายหรือ numComp อื่น if (!isNaN (เป้าหมาย) && !isNaN (numComp)) { ในขณะที่ (compValsStr.indexOf (", ") != -1) { var comma = compValsStr.indexOf(", "); var newInt = parseFloat(compValsStr.substring(0, จุลภาค)); // ข้อผิดพลาดในการแยกวิเคราะห์รายการค่าส่วนประกอบ ตั้งค่าสถานะ if (isNaN (newInt)) { errFlag = 1; หยุดพัก; } compValsStr = compValsStr.substring(comma+1, compValsStr.length); compVals = newInt; ผม++; } var newInt = parseFloat(compValsStr); // ข้อผิดพลาดในการแยกวิเคราะห์รายการค่าส่วนประกอบ ตั้งค่าสถานะ if (isNaN (newInt)) { errFlag = 1; } compVals = newInt; if (errFlag == 0) { ถ้า (document.getElementById ("resRadio") ถูกตรวจสอบ) { ตัวต้านทาน (เป้าหมาย, numComp, compVals); } else if (document.getElementById("capRadio")).checked) { capacitor(target, numComp, compVals); } } // ข้อผิดพลาดในการแยกวิเคราะห์รายการค่าส่วนประกอบอื่น { outputStr = "ตรวจสอบข้อผิดพลาด 'รายการค่าส่วนประกอบ'! " } } calcOutput.innerHTML = outputStr; resultDisplay.style.display = "บล็อก"; exampleDisplay.style.display = "ดิ้น"; // เลื่อนลงไปที่ผลลัพธ์ window.scrollTo(0, exampleDisplay.scrollHeight); } /* ดึงและพิมพ์การกำหนดค่าตัวต้านทานที่ดีที่สุด * เป้าหมาย - ค่าความต้านทานเป้าหมาย * numComp - จำนวนตัวต้านทานทั้งหมดที่อนุญาตให้ใช้เพื่อให้ได้ค่าเป้าหมาย * compVals - อาร์เรย์ของค่าตัวต้านทาน */ ตัวต้านทานฟังก์ชัน (เป้าหมาย, numComp, compVals) { // ความยาวของค่าความต้านทาน var num_res = compVals.length; // เรียกใช้ส่วนประกอบที่เป็นไปได้ทั้งหมดสำหรับ (var i=1; i<=numComp; i++) { var data = ; resCombination (compVals, num_res, i, 0, data, เป้าหมาย); } หน่วย var = document.getElementById("selected_unit").value; // ผลการพิมพ์ outputStr = "ค่าที่ใกล้เคียงที่สุด: " + ค่าที่ใกล้เคียงที่สุด _val.toFixed(3) + " " + หน่วย + " "; outputStr += "ความแตกต่าง:" + ที่ใกล้เคียงที่สุด_diff.toFixed(3) + " " + หน่วย + " "; outputStr += "การกำหนดค่าตัวต้านทาน: "; สำหรับ (var i=0; i<numComp; i++) { if (i<closest.length) { outputStr += "R" + i + "=" + ใกล้เคียงที่สุด + " " + หน่วย + " "; if (i+1<closest.length) { if (ser_par_config[i+1]) outputStr += "|| "; อื่น outputStr += "+ "; } } อื่น ๆ แตก; } } /* คำนวณค่าผสมที่ดีที่สุดของตัวต้านทานเพื่อให้ได้ค่าเป้าหมาย * res - อาร์เรย์อินพุตของค่าตัวต้านทาน * num_res - ขนาดของอาร์เรย์อินพุตของค่าตัวต้านทาน * num_comb - จำนวนตัวต้านทานที่อนุญาต * ดัชนี - ดัชนีของหวี * หวี - อาร์เรย์ของชุดค่าผสมปัจจุบัน * เป้าหมาย - ค่าเป้าหมาย * ไม่มีค่าส่งคืน - ส่งชุดค่าผสมที่ดีที่สุดในปัจจุบันไปยังค่าส่วนกลาง */ ฟังก์ชั่น resCombination (res, num_res, num_comb, ดัชนี, หวี, เป้าหมาย) { // ชุดค่าผสมปัจจุบันจะสมบูรณ์หาก (index == num_comb) { var ser_par_size = Math.pow (2, num_comb); // 2^(จำนวนส่วนประกอบ) var ser_par = ; // อาร์เรย์บูลที่ระบุอนุกรมหรือขนานสำหรับแต่ละองค์ประกอบ var calc; // คำนวณค่าความต้านทานเทียบเท่า // ก้าวผ่านทุกอนุกรมที่เป็นไปได้/การกำหนดค่าแบบขนานของชุดค่าผสมปัจจุบันสำหรับ (var j=0; j k) & 1; } // คำนวณหาชุดค่าผสมโดยอิงตามอนุกรม/คำสั่งผสมแบบขนานสำหรับ (var k=0; k<num_comb; k++) {// ตัวเลขแรก เพียงเพิ่ม if (k==0) calc = comb[k]; // ศูนย์ หมายถึง อนุกรม เพิ่มค่าความต้านทาน มิฉะนั้น ถ้า (!ser_par[k]) calc += comb[k]; // หนึ่งหมายถึงขนาน ผกผันของผลรวมของส่วนกลับ ถ้า (ser_par[k]) calc = (calc*comb[k])/(calc+comb[k]); } // ตรวจดูว่าส่วนต่างน้อยกว่าก่อนหน้าที่ดีที่สุดหรือไม่ถ้า (Math.abs(calc - target) < ใกล้ที่สุด_diff) { // มีค่าน้อยกว่า ดังนั้นให้อัปเดตค่าโกลบอล Near_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, หวี, เป้าหมาย); } } /* ดึงและพิมพ์การกำหนดค่าตัวเก็บประจุที่ดีที่สุด * เป้าหมาย - ค่าความจุเป้าหมาย * numComp - จำนวนตัวเก็บประจุทั้งหมดที่อนุญาตให้ใช้เพื่อให้บรรลุ val เป้าหมาย * compVals - อาร์เรย์ของค่าตัวเก็บประจุ */ ตัวเก็บประจุฟังก์ชัน (เป้าหมาย, numComp, compVals) { // ความยาวของค่าความจุ var num_cap = compVals.length; // เรียกใช้ส่วนประกอบที่เป็นไปได้ทั้งหมดสำหรับ (var i=1; i<=numComp; i++) { var data = ; capCombination (compVals, num_cap, i, 0, ข้อมูล, เป้าหมาย); } หน่วย var = document.getElementById("selected_unit").value; // ผลการพิมพ์ outputStr = "ค่าที่ใกล้เคียงที่สุด: " + ค่าที่ใกล้เคียงที่สุด _val.toFixed(3) + " " + หน่วย + " "; outputStr += "ความแตกต่าง:" + ที่ใกล้เคียงที่สุด_diff.toFixed(3) + " " + หน่วย + " "; outputStr += "การกำหนดค่าตัวเก็บประจุ:"; สำหรับ (var i=0; i<numComp; i++) { if (i<closest.length) { outputStr += "C" + i + "=" + ใกล้เคียงที่สุด + " " + หน่วย + " "; if (i+1<closest.length) { if (ser_par_config[i+1]) outputStr += "|| "; อื่น outputStr += "+ "; } } อื่น ๆ แตก; } } /* คำนวณการผสมผสานที่ดีที่สุดของตัวเก็บประจุเพื่อให้ได้ค่าเป้าหมาย * cap - อาร์เรย์อินพุตของค่าตัวเก็บประจุ * num_cap - ขนาดของอาร์เรย์อินพุตของค่าตัวเก็บประจุ * num_comb - จำนวนตัวเก็บประจุที่อนุญาต * ดัชนี - ดัชนีของหวี * หวี - อาร์เรย์ของชุดค่าผสมปัจจุบัน * เป้าหมาย - ค่าเป้าหมาย * ไม่มีค่าส่งคืน - ส่งชุดค่าผสมที่ดีที่สุดในปัจจุบันไปยังค่าทั่วโลก */ ฟังก์ชัน capCombination (cap, num_cap, num_comb, ดัชนี, หวี, เป้าหมาย) { // ชุดค่าผสมปัจจุบันจะสมบูรณ์หาก (index == num_comb) { var ser_par_size = Math.pow (2, num_comb); // 2^(จำนวนส่วนประกอบ) var ser_par = ; // อาร์เรย์บูลที่ระบุอนุกรมหรือขนานสำหรับแต่ละองค์ประกอบ var calc; // คำนวณค่าความจุเทียบเท่า // ก้าวผ่านทุกชุดที่เป็นไปได้ / การกำหนดค่าแบบขนานของชุดค่าผสมปัจจุบันสำหรับ (var j=0; j k) & 1; } // ทำการคำนวณสำหรับชุดค่าผสมตามชุด/คำสั่งผสมแบบขนานสำหรับ (var k=0; k

แนะนำ: