Choix de résistances pour un montage
En électronique un simple schéma à réaliser peut devenir un casse tête dès l'instant où il y a plus de deux résistances. En effet les vendeurs de résistances ne fournissent qu'un nombre de valeurs limités par la série choisie. Il est alors nécessaire de se fixer quelques valeurs pour certaines résistances puis de calculer les suivantes. Si les valeurs trouvées n'existe pas, il faut revoir sont choix initiale et recommencer tous les calculs. L'exercice peut vite devenir pénible, c'est pourquoi il est vite tentant de réaliser un petit logiciel testant toutes les valeurs de résistance possible de la série.
Un exemple vaux mieux que mille discours, le schéma suivant permet d'adapter un signal d'entrée Ve comprise entre +40mV et -40mV vers une sortie Vs comprise entre 0 et 3.3V.
Après quelques minutes à noircir du papier on trouve qu'il faut trouver un jeu de résistances qui vérifie :
Au lieu de faire et refaire les calculs à la main, il suffit de tester toutes les solutions à l'ordinateur :
#!/usr/bin/perl #Petit soft pour calculer des résistances #FabM #17 janvier 2008 use strict; use warnings; # La série e12 # On court-circuite avec un # quand les valeurs # ne sont pas souhaitées my @e12 = ( # 1.2,1.5,1.8,2.2,2.7,3.3,3.9,4.7,5.6,6.8,8.2,10, # 12,15,18,22,27,33,39,47,56,68,82,100, 120,150,180,220,270,330,390,470,560,680,820,1000, 1200,1500,1800,2200,2700,3300,3900,4700,5600,6800,8200,10000, 12000,15000,18000,22000,27000,33000,39000,47000,56000,68000,82000,100000, 120000,150000,180000,220000,270000,330000,390000,470000,560000,680000,820000,1000000, # 1200000,1500000,1800000,2200000,2700000,3300000,3900000,4700000,5600000,6800000,8200000,10000000, ); #Déclaration des résistances my $R1; my $R2; my $R3; my $R4; my $nbr=0; foreach $R1 (@e12) { foreach $R2 (@e12) { #condition du premier rapport if($R2/$R1 > 40 && $R2/$R1 < 45) { foreach $R3 (@e12) { foreach $R4 (@e12) { #condition du second rapport if( ($R4*($R1+$R2))/($R1*($R3+$R4)) > 0.499 && ($R4*($R1+$R2))/($R1*($R3+$R4)) < 0.501 ){ print "R1 = ".$R1.",R2 = ".$R2.",R3 = ".$R3.",R4 = ".$R4."\n"; print "R2/R1 = ".$R2/$R1.", [...]/[...] = ".($R4*($R1+$R2))/($R1*($R3+$R4))."\n"; print "".($R4*($R1+$R2))/($R1*($R3+$R4))*3.3 - 0.04*$R2/$R1."\n"; print "".($R4*($R1+$R2))/($R1*($R3+$R4))*3.3 + 0.04*$R2/$R1."\n"; $nbr++; print "\n"; } } } } } } print $nbr." valeurs trouvées\n";