Table des matières:

Comment obtenir n'importe quelle résistance/capacité à l'aide des composants que vous possédez déjà ! : 6 étapes
Comment obtenir n'importe quelle résistance/capacité à l'aide des composants que vous possédez déjà ! : 6 étapes

Vidéo: Comment obtenir n'importe quelle résistance/capacité à l'aide des composants que vous possédez déjà ! : 6 étapes

Vidéo: Comment obtenir n'importe quelle résistance/capacité à l'aide des composants que vous possédez déjà ! : 6 étapes
Vidéo: Tester les composants CMS & trouver les pannes 2024, Novembre
Anonim
Comment obtenir n'importe quelle résistance/capacité en utilisant les composants que vous possédez déjà !
Comment obtenir n'importe quelle résistance/capacité en utilisant les composants que vous possédez déjà !

Ce n'est pas juste un autre calculateur de résistance équivalente série/parallèle ! Ce programme calcule comment combiner les résistances/condensateurs dont vous disposez actuellement pour atteindre une valeur cible de résistance/capacité dont vous avez besoin.

Avez-vous déjà eu besoin d'une résistance ou d'un condensateur spécifique que vous n'avez pas ou qui n'existe pas ? N'ai pas peur! Vous pouvez probablement créer cette valeur de résistance ou de capacité spécifique en utilisant des composants que vous possédez déjà. Au lieu de résoudre un énorme problème d'optimisation multivariable avec des millions de combinaisons différentes, utilisez ce programme !

Sélectionnez simplement la résistance ou le condensateur, entrez la valeur cible, entrez le nombre maximum de composants que vous souhaitez utiliser, entrez une liste des valeurs des composants que vous avez et cliquez sur calculer ! Le programme vous indiquera quels composants utiliser et comment les connecter pour atteindre votre valeur cible.

Pour essayer la calculatrice, visitez cette application Web.

Pour afficher le code source, visitez ce référentiel Github.

S'il vous plaît laissez-moi savoir si vous avez des suggestions pour améliorer encore la convivialité de cet outil de conception !

Étape 1: Contexte

Fond
Fond

Cette application Web a été développée par nécessité. Il existe de nombreux circuits différents que je construis qui nécessitent une résistance ou un condensateur très spécifique. Souvent, je n'ai pas de résistance ou de condensateur avec cette valeur spécifique. Parfois, ils ne fabriquent même pas un composant avec cette valeur unique ! Au lieu d'abandonner ou de me contenter de quelque chose qui n'est pas idéal, j'ai décidé d'écrire un programme pour examiner toutes les combinaisons possibles de résistances (chaque valeur possible et qu'elles soient en série ou en parallèle) et renvoyer la meilleure combinaison.

Lors de la conception du circuit de mon orgue dans le cadre de mon projet instructable Battle of the Bands, j'ai dû essayer de calculer à la main la meilleure combinaison de condensateurs pour atteindre une fréquence spécifique. Ce processus était incroyablement fastidieux et j'ai finalement abandonné et opté pour des combinaisons de condensateurs qui produisaient n'importe quelle quantité de fréquence audible. Maintenant, avec cette application Web, je peux concevoir mon orgue pour une fréquence spécifique et l'accorder aux notes d'un clavier ! L'équation ci-dessous est utilisée pour calculer la fréquence spécifique et est discutée dans l'autre projet Instructables.

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

En utilisant cette équation où R1 = 100 kOhm et R2 = 10 kOhm, j'ai calculé qu'un condensateur de 27,33 nF produira une note A4 (fréquence 440 Hz). À l'aide de mon programme, j'ai pu calculer une valeur de capacité équivalente à 0,001 nF (beaucoup moins que la tolérance d'un condensateur standard) que je peux créer à l'aide de condensateurs que j'avais déjà. La sortie et la configuration résultantes sont décrites ci-dessous. Je suis maintenant capable d'accorder beaucoup plus efficacement mon orgue aux fréquences exactes des notes standard. J'aurais aimé avoir fait cela pour commencer. Ma chanson de démonstration à l'orgue aurait probablement sonné beaucoup mieux.

Valeur la plus proche: 27,329 nF Différence: 0,001 nFC Configuration du condensateur: C0=0,068 nF || C1=30 nF + C2=300 nF

Équations d'équivalence de condensateur de résistance

Pour référence, vous trouverez ci-dessous les équations d'équivalence pour combiner des résistances et des condensateurs dans un circuit.

  • Résistances en série (R1 + R2): Req = R1 + R2
  • Résistances en parallèle (R1 || R2): Req = 1 / (1/R1 + 1/R2)
  • Condensateurs en série (C1 + C2): Ceq = 1 / (1/C1 + 1/C2)
  • Condensateurs en parallèle (C1 || C2): Ceq = C1 + C2

Étape 2: Entrées

Contributions
Contributions

Vous devrez fournir 4 entrées:

  1. Que vous calculiez une valeur pour une résistance ou un condensateur.
  2. La valeur de résistance ou de capacité cible et les unités.
  3. Le nombre maximum de composants que vous souhaitez utiliser pour atteindre la valeur cible (c'est-à-dire que je ne voudrais pas utiliser plus de 3 résistances pour atteindre ma valeur de résistance cible).
  4. La liste des valeurs des résistances/condensateurs que vous possédez actuellement. Ces valeurs doivent être dans les mêmes unités que votre valeur cible (c'est-à-dire si votre valeur cible était de 110 nF, toutes vos valeurs devraient être fournies en nF).

Étape 3: Résultat

Résultat
Résultat

Vous obtiendrez 3 sorties pour votre résultat:

  1. Valeur la plus proche - la valeur de résistance/capacité la plus proche que vous avez pu atteindre avec vos paramètres.
  2. Différence - à quelle distance votre valeur la plus proche était de votre valeur cible.
  3. Configuration des résistances/condensateurs - une liste des valeurs des résistances/condensateurs à utiliser et leur configuration.

Étape 4: Comprendre votre résultat

Comprendre votre résultat
Comprendre votre résultat
Comprendre votre résultat
Comprendre votre résultat

La sortie de configuration utilise une notation standard. "+" signifie que les composants sont en série et "||" signifie que les composants sont en parallèle. Les opérateurs ont la même priorité et sont associatifs de gauche à droite, ce qui signifie que vous regroupez les termes en partant de la gauche et en vous déplaçant vers la droite.

Par exemple, regardez le résultat suivant:

Configuration de la résistance: R0=15 Ohms + R1=470 Ohms || R2=3300 Ohms + R3=1500 Ohms

Si vous suivez les directives décrites ci-dessus, vous pouvez voir que cela équivaut à l'équation et à l'image ci-dessus.

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

Étape 5: Plus de projets

Pour plus de projets, visitez mes pages:

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

Étape 6: Code source

Pour afficher le code source, visitez ce référentiel Github ou consultez le code JavaScript ci-dessous.

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

/* Script de calculatrice r/c */ /* ---------------------------------------- -------------------------*/ var val_plus proche; // valeur la plus proche jusqu'à présent var plus proche_diff = 1000000.00; // diff de val et de la var cible la plus proche = ; // tableau détaillant les valeurs des composants var ser_par_config = ; // tableau détaillant série/parallèle var outputStr = ""; function calculateClick() { // efface les valeurs globales pour chaque nouveau clic close_val = 0; plus proche_diff = 1000000.00; le plus proche = ; 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 cible = parseFloat(targetTextObj.value); var numComp = parseInt(numCompTextObj.value); var compValsStr = compValsTextObj.value; var compVals = ; compVals[0] = ""; var i = 0; var errFlag = 0; // erreur dans l'analyse de la valeur cible if (isNaN(target)) { outputStr = "Error check 'Target Value' input!" } // erreur dans l'analyse du nombre de composants else if (isNaN(numComp)){ outputStr = "Error check Entrée 'Nombre de composants' ! " } // else si aucune erreur dans la cible ou numComp else if (!isNaN(target) && !isNaN(numComp)) { while (compValsStr.indexOf(", ") != -1) { var virgule = compValsStr.indexOf(", "); var newInt = parseFloat(compValsStr.substring(0, virgule)); // erreur lors de l'analyse de la liste des valeurs du composant, définissez l'indicateur if (isNaN(newInt)) { errFlag = 1; Pause; } compValsStr = compValsStr.substring(virgule+1, compValsStr.length); compVals = newInt; je++; } var newInt = parseFloat(compValsStr); // erreur lors de l'analyse de la liste des valeurs du composant, définissez l'indicateur if (isNaN(newInt)) { errFlag = 1; } compVals = newInt; if (errFlag == 0) { if (document.getElementById("resRadio").checked) { resistance(target, numComp, compVals); } else if (document.getElementById("capRadio").checked) { condensateur(cible, numComp, compVals); } } // erreur lors de l'analyse de la liste des valeurs des composants else { outputStr = "Erreur lors de la vérification de l'entrée 'Liste des valeurs des composants' !" } } calcOutput.innerHTML = outputStr; resultDisplay.style.display = "bloc"; exampleDisplay.style.display = "flex"; // faites défiler jusqu'au résultat window.scrollTo(0, exampleDisplay.scrollHeight); } /* Récupère et imprime la meilleure configuration de résistance * target - valeur de résistance cible * numComp - nombre total de résistances autorisées à être utilisées pour atteindre la cible val * compVals - tableau de valeurs de résistance */ function resistance(target, numComp, compVals) { // longueur des valeurs de résistance var num_res = compVals.length; // parcourt tout le nombre possible de composants pour (var i=1; i<=numComp; i++) { var data = ; resCombination(compVals, num_res, i, 0, data, target); } var units = document.getElementById("selected_unit").value; // affiche les résultats outputStr = "Valeur la plus proche: " + la plus proche_val.toFixed(3) + " " + units + " "; outputStr += "Différence: " + plus proche_diff.toFixed(3) + " " + unités + " "; outputStr += "Configuration de la résistance: "; for (var i=0; i<numComp; i++) { if (i<closest.length) { outputStr += "R" + i + "=" + plus proche + " " + units + " "; if (i+1<closest.length) { if (ser_par_config[i+1]) outputStr += "|| "; else outputStr += "+ "; } } else pause; } } /* Calcule la meilleure combinaison de résistances pour atteindre une valeur cible. * res - tableau d'entrée des valeurs de résistance * num_res - taille du tableau d'entrée des valeurs de résistance * num_comb - nombre de résistances autorisées * index - indice de peigne * comb - tableau de combinaison actuelle * cible - la valeur cible * Aucune valeur de retour - passe la meilleure combinaison actuelle aux valeurs globales */ function resCombination(res, num_res, num_comb, index, comb, target) { // la combinaison actuelle est complète if (index == num_comb) { var ser_par_size = Math.pow (2, num_comb); // 2^(nombre de composants) var ser_par = ; // tableau booléen spécifiant série ou parallèle pour chaque composant var calc; // valeur de résistance équivalente calculée // passe en revue toutes les configurations série/parallèle possibles de combinaison de courant pour (var j=0; j k) & 1; } // faire les calculs pour la combinaison basée sur la combinaison série/parallèle pour (var k=0; k<num_comb; k++) { // premier nombre, il suffit d'ajouter if (k==0) calc = comb[k]; // zéro signifie série, ajouter des valeurs de résistance else if (!ser_par[k]) calc += comb[k]; // on veut dire parallèle, inverse de la somme des réciproques else if (ser_par[k]) calc = (calc*comb[k])/(calc+comb[k]); } // vérifie si la différence est inférieure au meilleur précédent if (Math.abs(calc - target) < plus_différente) { // elle est inférieure, donc mettez à jour les valeurs globales la plus proche_val = calc; plus proche_diff = Math.abs(calc - cible); // remise à zéro pour (var k=0; k<num_comb; k++) { plus proche[k] = 0; } // met à jour les valeurs les plus proches et les tableaux de séries/parallèles pour (var k=0; k<num_comb; k++) { plus proche[k] = comb[k]; ser_par_config[k] = ser_par[k]; } } } renvoie 0; } // appelle et remplace récursivement l'index par toutes les valeurs possibles pour (var i=0; i= num_comb-index; i++) { comb[index] = res; resCombination(res, num_res, num_comb, index+1, comb, target); } } /* Récupère et imprime la meilleure configuration de condensateur * target - valeur de capacité cible * numComp - nombre total de condensateurs pouvant être utilisés pour atteindre la cible val * compVals - tableau de valeurs de condensateur */ function condensateur (target, numComp, compVals) { // longueur des valeurs de capacité var num_cap = compVals.length; // parcourt tout le nombre possible de composants pour (var i=1; i<=numComp; i++) { var data = ; capCombination(compVals, num_cap, i, 0, données, cible); } var units = document.getElementById("selected_unit").value; // affiche les résultats outputStr = "Valeur la plus proche: " + la plus proche_val.toFixed(3) + " " + units + " "; outputStr += "Différence: " + plus proche_diff.toFixed(3) + " " + unités + " "; outputStr += "Configuration du condensateur: "; for (var i=0; i<numComp; i++) { if (i<closest.length) { outputStr += "C" + i + "=" + plus proche + " " + units + " "; if (i+1<closest.length) { if (ser_par_config[i+1]) outputStr += "|| "; else outputStr += "+ "; } } else pause; } } /* Calcule la meilleure combinaison de condensateurs pour atteindre une valeur cible. * cap - tableau d'entrée des valeurs de condensateur * num_cap - taille du tableau d'entrée des valeurs de condensateur * num_comb - nombre de condensateurs autorisés * index - indice de comb * comb - tableau de combinaison actuelle * cible - la valeur cible * Aucune valeur de retour - passe la meilleure combinaison actuelle aux valeurs globales */ function capCombination(cap, num_cap, num_comb, index, comb, target) { // la combinaison actuelle est complète if (index == num_comb) { var ser_par_size = Math.pow (2, num_comb); // 2^(nombre de composants) var ser_par = ; // tableau booléen spécifiant série ou parallèle pour chaque composant var calc; // valeur de capacité équivalente calculée // parcourt toutes les configurations série/parallèle possibles de combinaison de courant pour (var j=0; j k) & 1; } // faire les calculs pour la combinaison basée sur le combo série/parallèle pour (var k=0; k

Conseillé: