Sommario:

Come ottenere qualsiasi resistenza/capacità utilizzando componenti che già possiedi!: 6 passaggi
Come ottenere qualsiasi resistenza/capacità utilizzando componenti che già possiedi!: 6 passaggi

Video: Come ottenere qualsiasi resistenza/capacità utilizzando componenti che già possiedi!: 6 passaggi

Video: Come ottenere qualsiasi resistenza/capacità utilizzando componenti che già possiedi!: 6 passaggi
Video: Resistenze in serie e in parallelo - Risoluzione di circuiti 2024, Luglio
Anonim
Come ottenere qualsiasi resistenza/capacità utilizzando componenti che già possiedi!
Come ottenere qualsiasi resistenza/capacità utilizzando componenti che già possiedi!

Questo non è solo un altro calcolatore di resistenza equivalente in serie/parallelo! Questo programma calcola come combinare resistori/condensatori di cui hai attualmente bisogno per raggiungere un valore di resistenza/capacità target di cui hai bisogno.

Hai mai avuto bisogno di un resistore o condensatore specifico che non hai o che non esiste? Non avere paura! Probabilmente puoi creare quel valore specifico di resistenza o capacità utilizzando componenti che già possiedi. Invece di risolvere un enorme problema di ottimizzazione multivariabile con milioni di combinazioni diverse, usa questo programma!

Basta selezionare il resistore o il condensatore, inserire il valore target, inserire il numero massimo di componenti che si desidera utilizzare, inserire un elenco dei valori dei componenti che si hanno e fare clic su calcola! Il programma sputerà quali componenti utilizzare e come collegarli per raggiungere il valore target.

Per provare la calcolatrice, visita questa applicazione web.

Per visualizzare il codice sorgente, visita questo repository Github.

Per favore fatemi sapere se avete suggerimenti per migliorare ulteriormente l'usabilità di questo strumento di progettazione!

Passaggio 1: sfondo

Sfondo
Sfondo

Questa applicazione web è stata sviluppata per necessità. Ci sono molti circuiti diversi che costruisco che richiedono un resistore o un condensatore molto specifico. Molte volte, non ho un resistore o un condensatore con quel valore specifico. A volte non realizzano nemmeno un componente con quel valore unico! Invece di rinunciare o accontentarmi di qualcosa che non è proprio l'ideale, ho deciso di scrivere un programma per esaminare ogni possibile combinazione di resistori (ogni possibile valore e se sono in serie o in parallelo) e restituire la migliore combinazione.

Quando ho progettato il circuito per il mio organo come parte del mio progetto Battle of the Bands Instructable, ho dovuto cercare di calcolare a mano la migliore combinazione di condensatori per ottenere una frequenza specifica. Questo processo è stato incredibilmente noioso e alla fine ho rinunciato e sono andato con combinazioni di condensatori che producevano qualsiasi quantità di frequenza udibile. Ora con questa applicazione web, posso progettare il mio organo per una frequenza specifica e sintonizzarlo sulle note di una tastiera! L'equazione seguente viene utilizzata per calcolare la frequenza specifica ed è discussa nell'altro progetto Instructables.

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

Usando questa equazione dove R1 = 100 kOhm e R2 = 10 kOhm, ho calcolato che un condensatore da 27,33 nF produrrà una nota A4 (frequenza 440 Hz). Usando il mio programma, sono stato in grado di calcolare un valore di capacità equivalente entro.001 nF (molto inferiore alla tolleranza su un condensatore standard) che posso creare usando i condensatori che avevo già in giro. L'output e la configurazione risultanti sono descritti di seguito. Ora sono in grado di sintonizzare il mio organo in modo molto più efficiente ed efficace sulle frequenze esatte delle note standard. Vorrei averlo fatto per cominciare. La mia canzone demo all'organo probabilmente avrebbe suonato molto meglio.

Valore più vicino: 27,329 nF Differenza: 0,001 nFConfigurazione condensatore: C0=0,068 nF || C1=30 nF + C2=300 nF

Equazioni di equivalenza del condensatore del resistore

Per riferimento, di seguito sono riportate le equazioni di equivalenza per combinare resistori e condensatori in un circuito.

  • Resistori in serie (R1 + R2): Req = R1 + R2
  • Resistori in parallelo (R1 || R2): Req = 1 / (1/R1 + 1/R2)
  • Condensatori in serie (C1 + C2): Ceq = 1 / (1/C1 + 1/C2)
  • Condensatori in parallelo (C1 || C2): Ceq = C1 + C2

Passaggio 2: ingressi

Ingressi
Ingressi

Ci sono 4 ingressi che dovrai fornire:

  1. Sia che tu stia calcolando un valore per un resistore o un condensatore.
  2. Il valore di resistenza o capacità target e le unità.
  3. Il numero massimo di componenti che vorresti utilizzare per raggiungere il valore target (cioè non vorrei usare più di 3 resistori per raggiungere il mio valore di resistenza target).
  4. L'elenco dei valori per i resistori/condensatori che hai attualmente. Questi valori dovrebbero essere nelle stesse unità del tuo valore target (cioè se il tuo valore target era 110 nF, tutti i tuoi valori dovrebbero essere forniti in nF).

Passaggio 3: risultato

Risultato
Risultato

Otterrai 3 output per il tuo risultato:

  1. Valore più vicino: il valore di resistenza/capacità più vicino che sei riuscito a ottenere con i tuoi parametri.
  2. Differenza: quanto era lontano il tuo valore più vicino dal valore target.
  3. Configurazione resistore/condensatore - un elenco di valori dei resistori/condensatori da utilizzare e la loro configurazione.

Passaggio 4: comprendere il risultato

Capire il tuo risultato
Capire il tuo risultato
Capire il tuo risultato
Capire il tuo risultato

L'output della configurazione utilizza una notazione standard. "+" significa che i componenti sono in serie e "||" significa che i componenti sono in parallelo. Gli operatori hanno uguale precedenza e sono associativi da sinistra a destra, il che significa che raggruppi i termini partendo da sinistra e spostandoti verso destra.

Ad esempio, dai un'occhiata al seguente risultato:

Configurazione resistore: R0=15 Ohm + R1=470 Ohm || R2=3300 Ohm + R3=15000 Ohm

Se segui le linee guida discusse sopra, puoi vedere che questo è equivalente alla seguente equazione e immagine sopra.

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

Passaggio 5: più progetti

Per altri progetti, visita le mie pagine:

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

Passaggio 6: codice sorgente

Per visualizzare il codice sorgente, visita questo repository Github o consulta JavaScript di seguito.

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

/* script calcolatrice r/c */ /* --------------------------------------- -------------------------*/ var più vicino_val; // valore più vicino finora var close_diff = 1000000.00; // diff di val e target var più vicino = ; // array che dettaglia i valori dei componenti var ser_par_config = ; // array che dettaglia serial/parallel var outputStr = ""; calcolatrice di funzioneClick() { // cancella i valori globali per ogni nuovo clic close_val = 0; più vicino_diff = 10000000,00; più vicino = ; 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] = ""; variabile i = 0; var Flagerr = 0; // errore nell'analisi del valore target if (isNaN(target)) { outputStr = "Errore check 'Target Value input!" } // errore nell'analisi del numero di componenti else if (isNaN(numComp)){ outputStr = "Error check Input 'Numero di componenti'! " } // else if nessun errore in target o numComp else if (!isNaN(target) && !isNaN(numComp)) { while (compValsStr.indexOf(", ") != -1) { var virgola = compValsStr.indexOf(", "); var newInt = parseFloat(compValsStr.substring(0, virgola)); // errore nell'analisi dell'elenco dei valori dei componenti, imposta flag if (isNaN(newInt)) { errFlag = 1; rottura; } compValsStr = compValsStr.substring(virgola+1, compValsStr.length); compVals = newInt; io++; } var newInt = parseFloat(compValsStr); // errore nell'analisi dell'elenco dei valori dei componenti, imposta flag if (isNaN(newInt)) { errFlag = 1; } compVals = newInt; if (errFlag == 0) { if (document.getElementById("resRadio").checked) { resistor(target, numComp, compVals); } else if (document.getElementById("capRadio").checked) { condensatore(target, numComp, compVals); } } // errore nell'analisi dell'elenco dei valori dei componenti else { outputStr = "Errore nel controllo dell'input 'Elenco valori dei componenti'! " } } calcOutput.innerHTML = outputStr; resultDisplay.style.display = "blocco"; exampleDisplay.style.display = "flessibile"; // scorri verso il basso fino al risultato window.scrollTo(0, exampleDisplay.scrollHeight); } /* Recupera e stampa la migliore configurazione del resistore * target - valore di resistenza target * numComp - numero totale di resistori che possono essere utilizzati per raggiungere il valore target * compVals - array di valori del resistore */ function resistor(target, numComp, compVals) { // lunghezza dei valori di resistenza var num_res = compVals.length; // scorre tutto il numero possibile di componenti per (var i=1; i<=numComp; i++) { var data = ; resCombination(compVals, num_res, i, 0, data, target); } var unità = document.getElementById("selected_unit").value; // stampa i risultati outputStr = "Valore più vicino: " + più vicino_val.toFixed(3) + " " + unità + " "; outputStr += "Difference: " + più vicino_diff.toFixed(3) + " " + unità + " "; outputStr += "Configurazione resistore: "; for (var i=0; i<numComp; i++) { if (i<longest.length) { outputStr += "R" + i + "=" + più vicino + " " + unità + " "; if (i+1<closest.length) { if (ser_par_config[i+1]) outputStr += "|| "; else outputStr += "+ "; } } altrimenti interrompi; } } /* Calcola la migliore combinazione di resistori per raggiungere un valore target. * res - array di input dei valori del resistore * num_res - dimensione dell'array di input dei valori del resistore * num_comb - numero di resistori consentiti * index - indice del comb * comb - array della combinazione corrente * target - il valore target * Nessun valore restituito - passa la migliore combinazione corrente ai valori globali */ function resCombination(res, num_res, num_comb, index, comb, target) { // la combinazione corrente è completa if (index == num_comb) { var ser_par_size = Math.pow (2, num_comb); // 2^(numero di componenti) var ser_par = ; // array bool che specifica seriale o parallelo per ogni componente var calc; // valore di resistenza equivalente calcolato // scorre ogni possibile configurazione serie/parallelo della combinazione corrente per (var j=0; j k) & 1; } // esegue i calcoli per la combinazione basata sulla combinazione serie/parallelo for (var k=0; k<num_comb; k++) { // primo numero, basta aggiungere if (k==0) calc = comb[k]; // zero significa serie, aggiungi i valori di resistenza else if (!ser_par[k]) calc += comb[k]; // one significa parallelo, inverso della somma dei reciproci else if (ser_par[k]) calc = (calc*comb[k])/(calc+comb[k]); } // controlla se la differenza è minore della precedente best if (Math.abs(calc - target) < close_diff) { // è minore, quindi aggiorna i valori globali close_val = calc; close_diff = Math.abs(calc - target); // azzera a zero for (var k=0; k<num_comb; k++) { più vicino[k] = 0; } // aggiorna il valore più vicino e gli array serie/parallelo per (var k=0; k<num_comb; k++) { close[k] = comb[k]; ser_par_config[k] = ser_par[k]; } } } restituisce 0; } // chiama ricorsivamente e sostituisce l'indice con tutti i valori possibili per (var i=0; i= num_comb-index; i++) { comb[index] = res; resCombination(res, num_res, num_comb, index+1, comb, target); } } /* Recupera e stampa la migliore configurazione del condensatore * target - valore della capacità target * numComp - numero totale di condensatori che possono essere utilizzati per raggiungere il valore target * compVals - array di valori del condensatore */ function condensatore (target, numComp, compVals) { // lunghezza dei valori di capacità var num_cap = compVals.length; // scorre tutto il numero possibile di componenti per (var i=1; i<=numComp; i++) { var data = ; capCombination(compVals, num_cap, i, 0, data, target); } var unità = document.getElementById("selected_unit").value; // stampa i risultati outputStr = "Valore più vicino: " + più vicino_val.toFixed(3) + " " + unità + " "; outputStr += "Differenza: " + più vicino_diff.toFixed(3) + " " + unità + " "; outputStr += "Configurazione condensatore: "; for (var i=0; i<numComp; i++) { if (i<longest.length) { outputStr += "C" + i + "=" + più vicino + " " + unità + " "; if (i+1<closest.length) { if (ser_par_config[i+1]) outputStr += "|| "; else outputStr += "+ "; } } altrimenti interrompi; } } /* Calcola la migliore combinazione di condensatori per raggiungere un valore target. * cap - array di input dei valori del condensatore * num_cap - dimensione dell'array di input dei valori del condensatore * num_comb - numero di condensatori consentiti * index - indice di comb * comb - array della combinazione corrente * target - il valore target * Nessun valore restituito - passa la migliore combinazione corrente ai valori globali */ function capCombination(cap, num_cap, num_comb, index, comb, target) { // la combinazione corrente è completa if (index == num_comb) { var ser_par_size = Math.pow (2, num_comb); // 2^(numero di componenti) var ser_par = ; // array bool che specifica seriale o parallelo per ogni componente var calc; // valore di capacità equivalente calcolato // scorre ogni possibile configurazione serie/parallelo della combinazione di corrente per (var j=0; j k) & 1; } // esegue i calcoli per la combinazione basata sulla combinazione serie/parallelo per (var k=0; k

Consigliato: