]> Mon petit coin de oueb
Au menu
Aller voir ailleurs si j'y suis
Robotique
Environnement
Systèmes embarqués
SE 2008
Technique
Communauté
Amis
Famille
Bandes Dessinées
Geeks
On finira tous à vélo ...

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 :

40 < R 2 R 1 < 45 0 , 499 < R 4 R 1 + R 2 R 1 R 3 + R 4 < 0 , 501

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";