Πίνακας περιεχομένων:

Πώς να επιτύχετε οποιαδήποτε αντίσταση/χωρητικότητα χρησιμοποιώντας εξαρτήματα που έχετε ήδη !: 6 βήματα
Πώς να επιτύχετε οποιαδήποτε αντίσταση/χωρητικότητα χρησιμοποιώντας εξαρτήματα που έχετε ήδη !: 6 βήματα

Βίντεο: Πώς να επιτύχετε οποιαδήποτε αντίσταση/χωρητικότητα χρησιμοποιώντας εξαρτήματα που έχετε ήδη !: 6 βήματα

Βίντεο: Πώς να επιτύχετε οποιαδήποτε αντίσταση/χωρητικότητα χρησιμοποιώντας εξαρτήματα που έχετε ήδη !: 6 βήματα
Βίντεο: Horizon: Forbidden West (The Movie) 2024, Νοέμβριος
Anonim
Πώς να επιτύχετε οποιαδήποτε αντίσταση/χωρητικότητα χρησιμοποιώντας εξαρτήματα που έχετε ήδη!
Πώς να επιτύχετε οποιαδήποτε αντίσταση/χωρητικότητα χρησιμοποιώντας εξαρτήματα που έχετε ήδη!

Αυτός δεν είναι ένας ακόμη υπολογιστής σειράς/παράλληλης ισοδύναμης αντίστασης! Αυτό το πρόγραμμα υπολογίζει πώς να συνδυάσετε αντιστάσεις/πυκνωτές που έχετε σήμερα για να επιτύχετε μια τιμή αντίστασης/χωρητικότητας που χρειάζεστε.

Χρειάστηκες ποτέ συγκεκριμένη αντίσταση ή πυκνωτή που δεν έχεις ή που δεν υπάρχει; Μη φοβάστε! Μπορείτε πιθανώς να κάνετε αυτήν τη συγκεκριμένη τιμή αντίστασης ή χωρητικότητας χρησιμοποιώντας εξαρτήματα που έχετε ήδη. Αντί να λύσετε ένα τεράστιο πρόβλημα βελτιστοποίησης πολλαπλών μεταβλητών με εκατομμύρια διαφορετικούς συνδυασμούς, χρησιμοποιήστε αυτό το πρόγραμμα!

Απλώς επιλέξτε αντίσταση ή πυκνωτή, εισαγάγετε την τιμή -στόχο, εισαγάγετε τον μέγιστο αριθμό εξαρτημάτων που θα θέλατε να χρησιμοποιήσετε, εισαγάγετε μια λίστα με τις τιμές των εξαρτημάτων που έχετε και κάντε κλικ στον υπολογισμό! Το πρόγραμμα θα φτύσει ποια εξαρτήματα πρέπει να χρησιμοποιήσετε και πώς να τα συνδέσετε για να επιτύχετε την τιμή -στόχο σας.

Για να δοκιμάσετε την αριθμομηχανή, επισκεφτείτε αυτήν την εφαρμογή ιστού.

Για να δείτε τον πηγαίο κώδικα, επισκεφτείτε αυτό το αποθετήριο Github.

Ενημερώστε με εάν έχετε προτάσεις για περαιτέρω βελτίωση της χρηστικότητας αυτού του εργαλείου σχεδίασης!

Βήμα 1: Ιστορικό

Ιστορικό
Ιστορικό

Αυτή η διαδικτυακή εφαρμογή αναπτύχθηκε από ανάγκη. Υπάρχουν πολλά διαφορετικά κυκλώματα που κατασκευάζω και απαιτούν μια πολύ συγκεκριμένη αντίσταση ή πυκνωτή. Πολλές φορές, δεν έχω αντίσταση ή πυκνωτή με τη συγκεκριμένη τιμή. Μερικές φορές δεν κάνουν καν ένα συστατικό με αυτή τη μοναδική αξία! Αντί να εγκαταλείψω ή να συμβιβαστώ με κάτι που δεν είναι ιδανικό, αποφάσισα να γράψω ένα πρόγραμμα για να εξετάσω κάθε πιθανό συνδυασμό αντιστάσεων (κάθε δυνατή τιμή και αν είναι σε σειρά ή παράλληλες) και να επιστρέψω τον καλύτερο συνδυασμό.

Κατά τον σχεδιασμό του κυκλώματος για το όργανό μου ως μέρος του έργου Μάχη των Bands Instructable, έπρεπε να προσπαθήσω να υπολογίσω τον καλύτερο συνδυασμό πυκνωτών για να επιτύχω μια συγκεκριμένη συχνότητα. Αυτή η διαδικασία ήταν απίστευτα κουραστική και τελικά παράτησα και πήγα με συνδυασμούς πυκνωτών που παρήγαγαν οποιαδήποτε ποσότητα ακουστικής συχνότητας. Τώρα με αυτήν την εφαρμογή ιστού, μπορώ να σχεδιάσω το όργανό μου για μια συγκεκριμένη συχνότητα και να το συντονίσω στις σημειώσεις ενός πληκτρολογίου! Η παρακάτω εξίσωση χρησιμοποιείται για τον υπολογισμό της συγκεκριμένης συχνότητας και συζητείται στο άλλο έργο Instructables.

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

Χρησιμοποιώντας αυτήν την εξίσωση όπου R1 = 100 kOhm και R2 = 10 kOhm, υπολόγισα ότι ένας πυκνωτής 27,33 nF θα παράγει μια νότα Α4 (συχνότητα 440 Hz). Χρησιμοποιώντας το πρόγραμμά μου, μπόρεσα να υπολογίσω μια ισοδύναμη τιμή χωρητικότητας εντός 0,001 nF (πολύ μικρότερη από την ανοχή σε έναν τυπικό πυκνωτή) που μπορώ να δημιουργήσω χρησιμοποιώντας πυκνωτές που είχα ήδη. Η προκύπτουσα έξοδος και διαμόρφωση περιγράφονται παρακάτω. Είμαι πλέον σε θέση να συντονίσω πολύ πιο αποτελεσματικά και αποτελεσματικά το όργανο μου στις ακριβείς συχνότητες των τυπικών νότες. Μακάρι να το είχα κάνει από την αρχή. Το demo τραγούδι μου στο όργανο μάλλον θα ακουγόταν πολύ καλύτερα.

Πλησιέστερη τιμή: 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. Closest Value - η πλησιέστερη τιμή αντίστασης/χωρητικότητας που καταφέρατε να επιτύχετε με τις παραμέτρους σας.
  2. Διαφορά - πόσο μακριά ήταν η πλησιέστερη τιμή από την τιμή -στόχο.
  3. Resistor/Capacitor Configuration - μια λίστα με τις τιμές των αντιστάσεων/πυκνωτών που πρέπει να χρησιμοποιηθούν και τη διαμόρφωσή τους.

Βήμα 4: Κατανόηση του αποτελέσματος σας

Κατανόηση του αποτελέσματος σας
Κατανόηση του αποτελέσματος σας
Κατανόηση του αποτελέσματος σας
Κατανόηση του αποτελέσματος σας

Η έξοδος διαμόρφωσης χρησιμοποιεί μια τυπική σημειογραφία. "+" σημαίνει ότι τα στοιχεία είναι σε σειρά και "||" σημαίνει ότι τα στοιχεία είναι παράλληλα. Οι τελεστές έχουν την ίδια προτεραιότητα και είναι συσχετιστικοί από αριστερά προς τα δεξιά, δηλαδή ομαδοποιείτε όρους μαζί ξεκινώντας από τα αριστερά και μετακινώντας προς τα δεξιά.

Για παράδειγμα, ρίξτε μια ματιά στο ακόλουθο αποτέλεσμα:

Διαμόρφωση αντίστασης: R0 = 15 Ohms + R1 = 470 Ohms || R2 = 3300 Ohms + R3 = 15000 Ohms

Εάν ακολουθήσετε τις οδηγίες που συζητήθηκαν παραπάνω, μπορείτε να δείτε ότι αυτό ισοδυναμεί με την παρακάτω εξίσωση και εικόνα παραπάνω.

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

Βήμα 5: Περισσότερα έργα

Για περισσότερα έργα, επισκεφθείτε τις σελίδες μου:

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

Βήμα 6: Πηγαίος κώδικας

Για να δείτε τον πηγαίο κώδικα, επισκεφτείτε αυτό το αποθετήριο Github ή δείτε το JavaScript παρακάτω.

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

/* r/c scripting calculator*//* ------------------------------------------ -------------------------*/ var closeest_val; // πλησιέστερη τιμή μέχρι στιγμής var closeest_diff = 1000000.00; // διαφορά val και στόχου var πλησιέστερο = ; // τιμές λεπτομερειών συστοιχίας εξαρτημάτων var ser_par_config = ; // πίνακας με λεπτομέρειες σειριακού/παράλληλου var outputStr = ""; λειτουργία calculatorClick () {// διαγράψτε τις καθολικές τιμές για κάθε νέο κλικ closeest_val = 0; closeest_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; // σφάλμα στην ανάλυση της τιμής στόχου εάν (isNaN (στόχος)) {outputStr = "Σφάλμα ελέγχου εισόδου" Target Value "!"} // σφάλμα στην ανάλυση αριθμού στοιχείων άλλου εάν (isNaN (numComp)) {outputStr = "Έλεγχος σφάλματος 'Αριθμός εισαγωγής στοιχείων! "} // αλλιώς εάν δεν υπάρχει σφάλμα στο στόχο ή numComp αλλιώς εάν (! IsNaN (στόχος) &&! 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; if (errFlag == 0) {if (document.getElementById ("resRadio"). επιλεγμένο) {αντίσταση (στόχος, numComp, compVals); } else if (document.getElementById ("capRadio"). επιλεγμένο) {πυκνωτής (στόχος, numComp, compVals); }} // σφάλμα κατά την ανάλυση λίστας τιμών συστατικών else {outputStr = "Σφάλμα ελέγχου" Εισαγωγή λίστας στοιχείων συστατικών "!"}} calcOutput.innerHTML = outputStr; resultDisplay.style.display = "μπλοκ"; exampleDisplay.style.display = "flex"; // μετακινηθείτε προς τα κάτω στο αποτέλεσμα window.scrollTo (0, exampleDisplay.scrollHeight); } / * Ανακτά και τυπώνει την καλύτερη διαμόρφωση αντίστασης * στόχος - τιμή αντίστασης στόχου * numComp - συνολικός αριθμός αντιστάσεων που επιτρέπεται να χρησιμοποιηθούν για την επίτευξη στόχου val * compVals - συστοιχία τιμών αντίστασης * / αντίσταση λειτουργίας (στόχος, 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 ("Select_unit"). τιμή; // εκτύπωση αποτελεσμάτων outputStr = "Closest Value:" + closeest_val.toFixed (3) + "" + μονάδες + ""; outputStr + = "Διαφορά:" + πλησιέστερη_διαφορά.τοΕπίλυση (3) + "" + μονάδες + ""; outputStr += "Διαμόρφωση αντίστασης:"; για (var i = 0; i <numComp; i ++) {if (i <close.length) {outputStr + = "R" + i + "=" + πλησιέστερα + "" + μονάδες + ""; if (i+1 <close.length) {if (ser_par_config [i+1]) outputStr+= "||"; else outputStr + = " +"; }} else break? }} /* Υπολογίζει τον καλύτερο συνδυασμό αντιστάσεων για την επίτευξη μιας τιμής στόχου. * res - πίνακας εισόδου τιμών αντίστασης * num_res - μέγεθος πίνακα εισόδου τιμών αντίστασης * num_comb - αριθμός επιτρεπόμενων αντιστάσεων * δείκτης - δείκτης χτένας * χτένα - συστοιχία τρέχοντος συνδυασμού * στόχος - τιμή στόχου * Χωρίς τιμή επιστροφής - περνάει τον τρέχοντα καλύτερο συνδυασμό στις καθολικές τιμές */ συνάρτηση res Συνδυασμός (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 ++) {// πρώτος αριθμός, απλώς προσθέστε εάν (k == 0) calc = χτένα [k]; // μηδέν σημαίνει σειρά, προσθέστε τιμές αντίστασης αλλιώς εάν (! ser_par [k]) calc += χτένα [k]; // το ένα σημαίνει παράλληλο, αντίστροφο από το άθροισμα των αμοιβαίων αντίθετων αν (ser_par [k]) calc = (calc*comb [k])/(calc+comb [k]); } // ελέγξτε αν η διαφορά είναι μικρότερη από την προηγούμενη καλύτερη εάν (Math.abs (calc - target) <closest_diff) {// είναι μικρότερη, οπότε ενημερώστε τις καθολικές τιμές closeest_val = calc; closeest_diff = Math.abs (calc - target); // διαγραφή στο μηδέν για (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 - συστοιχία τιμών πυκνωτή * / πυκνωτή λειτουργίας (στόχος, numComp, compVals) {// μήκος τιμών χωρητικότητας var num_cap = compVals.length; // εκτελέστε όλο τον πιθανό αριθμό στοιχείων για (var i = 1; i <= numComp; i ++) {var data = ; capCombination (compVals, num_cap, i, 0, data, target); } var units = document.getElementById ("selected_unit"). τιμή; // εκτύπωση αποτελεσμάτων outputStr = "Closest Value:" + closeest_val.toFixed (3) + "" + μονάδες + ""; outputStr + = "Διαφορά:" + πλησιέστερη_διαφορά.τοΕπίλυση (3) + "" + μονάδες + ""; outputStr += "Διαμόρφωση πυκνωτή:"; για (var i = 0; i <numComp; i ++) {if (i <close.length) {outputStr + = "C" + i + "=" + πλησιέστερο + "" + μονάδες + ""; if (i+1 <closeest.length) {if (ser_par_config [i+1]) outputStr+= "||"; else outputStr + = " +"; }} else break? }} /* Υπολογίζει τον καλύτερο συνδυασμό πυκνωτών για την επίτευξη μιας τιμής στόχου. * cap - πίνακας εισόδου τιμών πυκνωτή * num_cap - μέγεθος πίνακα εισόδου τιμών πυκνωτή * num_comb - αριθμός πυκνωτών που επιτρέπονται * δείκτης - δείκτης χτένας * χτένα - συστοιχία τρέχοντος συνδυασμού * στόχος - τιμή στόχου * Χωρίς τιμή επιστροφής - μεταβιβάζει τον τρέχοντα καλύτερο συνδυασμό στις καθολικές τιμές */ cap cap Συνδυασμός (cap, num_cap, 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

Συνιστάται: