Le B.A.-BA - Transistors et circuits intégrés

Le forum du Snootlab Starter Kit

Le B.A.-BA - Transistors et circuits intégrés

Message non lude Laetitia » Ven 10 Jan 2014 16:16

Ce tutoriel est en trois parties : [1] - [2] - [3]

Aujourd'hui nous allons finir notre tour des composants du Starter Kit, au programme : les transistors et les circuits intégrés ! Ce sont les composants les plus complexes, aussi ce tutoriel sera un peu plus chargé que les précédents, notamment au niveau de la théorie.

    - Les transistors -
Il existe différents types de transistors : bipolaires (NPN et PNP), MOSFET (à enrichissement ou à déplétion, canal N ou P), JFET... nous n'utiliserons que les transistors bipolaires dans un souci de simplicité.

symbole_transistor.png
symbole_transistor.png (5.98 Kio) Vu 3062 fois

Commençons par un peu de théorie :

Un transistor bipolaire peut-être assimilé à un interrupteur commandé. Il est constitué de 3 couches de matériau semi-conducteur, respectivement dopées soit Négativement-Positivement-Négativement, soit Positivement-Négativement-Positivement (NPN/PNP). Dans l'explication suivante nous ne prendrons en compte que les types NPN puisqu'il s'agit de ceux présents dans le Starter Kit.

Le transistor bipolaire possède 3 broches : une base, un collecteur et un émetteur.

Un fonctionnement en interrupteur commandé consiste à « activer » la base, pour qu'elle permette au courant présent dans le collecteur, de s'écouler jusqu'à l'émetteur. Par analogie, si l'on compare le transistor à un robinet entier, le collecteur est l'arrivée d'eau murale, la base est la molette du robinet, et l'émetteur la sortie du robinet.

Pour commander ce transistor, plusieurs paramètres sont importants :

(Ib + Ic) = Ie
Cette relation signifie que le courant circulant dans la base plus le courant du collecteur, est égal au courant sortant de l'émetteur.

Ib * ß = Ic
Cette relation signifie que le courant du collecteur est, jusqu'à une certaine limite (le débit d'eau maximum de votre arrivée murale)(*), directement proportionnel au courant présent dans la base. Le débit de votre robinet est proportionnel au nombre de tours que vous avez effectué avec la molette). Ce facteur ß est appelé gain en courant.

La valeur de Vbe(on)
Ce paramètre représente le voltage minimum qui doit être appliqué entre la base et l'émetteur, pour que le transistor devienne passant (pour que le robinet commence à s'ouvrir), et que les deux relations ci-dessus puissent se mettre en place. Ce paramètre est la clé de fonctionnement des transistors bipolaires. En général de l'ordre de 0.7V pour des transistors bipolaires, s'il est inférieur à cette valeur, votre transistor sera bloqué (votre robinet sera fermé), et aucun courant ne passera.
Toutes ces informations se trouvent dans les documents constructeur des transistors que vous utiliserez.

(*) Un transistor bipolaire a deux modes de fonctionnement : le mode linéaire et le mode bloqué/saturé. Quand vous commencez à ouvrir le robinet (Ib faible et Vbe(on) suffisant), les trois paramètres ci-dessus restent vrais, vous êtes en régime linéaire. Si vous continuez à tourner le robinet (à augmenter Ib), passée une certaine limite, votre arrivée d'eau (courant disponible sur le collecteur) ne pourra plus fournir de l'eau proportionnellement à vos tours de robinet. Vous continuerez à tourner le robinet, mais le débit n'augmentera plus, c'est ce que l'on nomme l'état saturé. Dans l'état saturé, la relation Ib * ß = Ic n'est plus respectée, on à désormais Ib > (Ic/ß).

Pour plus de détails sur le fonctionnement des transistors (caractéristiques, exemples de montage...), vous pouvez aller sur Wikipedia et Sonelec ou consulter les datasheets pour les caractéristiques spécifiques à votre composant.

Les transistors 2N2222

Les transistors 2N2222 sont des transistors NPN classiques, qui se comportent comme expliqué ci-dessus : nous allons faire deux petits montages pour mettre en évidence les deux modes de fonctionnement.

NPN_lineaire.png
NPN_lineaire.png (28.98 Kio) Vu 3062 fois

Tout d'abord, observons le fonctionnement en régime linéaire (l'Arduino ne sert que pour l'alimentation du montage) :

Comme vu dans le tutoriel précédent, la résistance du capteur augmente avec la luminosité, et d'après la loi d'Ohm (U = R * I), la tension à ses bornes aussi. On envoie cette tension sur la base du transistor, et lorsqu'elle est suffisante, le courant peut passer dans l'émetteur et alimenter la LED. Lorsque vous passez votre main au-dessus de la photorésistance pour agir sur la luminosité ambiante, la brillance de la LED évolue en fonction !

NPN_commutation.png
NPN_commutation.png (23.43 Kio) Vu 3062 fois

Voyons ce qui se passe quand on utilise un transistor en commutation :
La LED est reliée d'un côté à l'alimentation et de l'autre au collecteur du transistor. Pour qu'elle s'allume, il faut fermer le circuit, c'est-à-dire permettre le passage du courant du + vers le -, donc vers la masse. Celle-ci étant directement reliée à l'émetteur, il faut envoyer un courant suffisamment grand pour saturer le transistor (Ib > (Ic/ß)) : on agit donc sur la base en imposant un courant via un signal digital venant de l'Arduino. Uploadez un simple Blink et vous pourrez faire clignoter votre LED : vous savez désormais comment faire un interrupteur commandé par une tension !

Le calcul de la résistance de base (celle située entre l'Arduino et le transistor) se fait en fonction de ce que vous voulez commander, et de la tension d'alimentation de votre matériel. La démarche est expliquée ici.

Les transistors TIP102

Les transistors TIP102 fonctionnent de manière identique aux précédents donc inutile de revenir sur les montages maintenant que vous les connaissez...

Il faut juste savoir qu'à l'intérieur de ces transistors dits "de puissance", il y a en réalité deux transistors montés en cascade, ce qui a pour effet de multiplier le gain en courant (le fameux ß), au lieu d'être de 300 comme les précédents, ceux-ci ont un gain qui peut aller de 1000 à 20000 !

symbole_darlington.png
symbole_darlington.png (2.74 Kio) Vu 3062 fois

En utilisant ceux-ci plutôt que les NPN classiques, vous pourrez commander des éléments nécessitant plus de puissance, ou amplifier des signaux de manière plus importante :)

:idea: Il existe d'autres types de montages avec les transistors, à vous de voir lesquels sont adaptés à vos usages...

    - Les circuits intégrés -
L'amplificateur opérationnel LM358N

symbole_AOP.png
symbole_AOP.png (5.69 Kio) Vu 3062 fois

Un amplificateur opérationnel possède typiquement deux entrées, deux broches d'alimentation (absentes sur le symbole !) et une sortie.
L'entrée notée V+ est dite "non-inverseuse" tandis que l'entrée V- est dite "inverseuse", ceci en raison de leur rôle respectif dans les relations entrée/sortie de l'amplificateur. La différence de potentiel entre ces deux entrées est appelée tension différentielle d'entrée.
La broche d'alimentation positive repérée VCC+ est parfois aussi appelée VDD, VCC, ou VS+. La broche d'alimentation négative repérée VCC- est parfois aussi appelée VSS, VEE, ou VS−. Pour le LM358N présent dans le Starter Kit, VCC+ est à relier au +5V de l'Arduino, VCC- à la masse.

Repartons pour un peu de théorie, nécessaire pour bien comprendre le fonctionnement de ce composant :

L'amplificateur opérationnel (ampli op, AOP, amplificateur linéaire intégré, ALI...) est un amplificateur différentiel : c'est un amplificateur électronique qui amplifie une différence de potentiel électrique présente à ses entrées.

Pour simplifier la théorie et les calculs, on travaille (sur le papier) avec des AOP dits "parfaits" ou "idéaux". En pratique, plus le temps passe et plus la technologie tend à se rapprocher de ce modèle... L'AOP parfait possède une impédance d'entrée et un gain en mode différentiel infinis, une impédance de sortie et un gain en mode commun nuls. Cela signifie simplement que l'AOP parfait ne perturbe pas le signal qu'il va amplifier et que sa tension de sortie dépend uniquement de la différence de tension entre ses deux entrées.

La présence d'un gain en mode différentiel infini implique que la moindre différence de potentiel entre les deux entrées de l'amplificateur l'amènera à saturer (sortie fixe à ±Vsat). Si l'on ne désire pas que la tension de sortie de l'amplificateur soit uniquement limitée à ±Vsat suivant le signe de la différence de potentiel entre les deux entrées de l'amplificateur, l'utilisation d'une contre-réaction négative (rebouclage de la sortie sur l'entrée inverseuse) est obligatoire.

La contre-réaction sur l'entrée inverseuse d'un AOP permet de soustraire une partie du signal de sortie au signal d'entrée de l'amplificateur. Grâce à cette soustraction, la contre-réaction négative permet de garder une différence de potentiel nulle en entrée de l'amplificateur. On parle alors de mode linéaire car on peut faire varier la tension de sortie entre + et - Vsat suivant la tension appliquée en entrée de l'amplificateur. L'absence de contre-réaction ou une contre-réaction sur l'entrée non-inverseuse (ou réaction positive) de l'AOP amènera l'amplificateur en saturation positive ou négative suivant le signal appliqué en entrée. On parle alors de mode comparateur (ou saturé).

On peut donc utiliser l'AOP en deux modes de fonctionnement distincts, comme le transistor (et ça tombe bien, il en est plein !). Comme dans la partie précédente, nous allons faire deux montages pour les mettre en évidence.

AOP_pinout.png
AOP_pinout.png (4.13 Kio) Vu 3062 fois

Le LM358N du Starter Kit est un double AOP, faites attention quand vous le branchez de ne pas vous emmêler les pinceaux !

Commençons par le fonctionnement en mode comparateur :

AOP_montageComparateur.png
AOP_montageComparateur.png (2.09 Kio) Vu 3062 fois

Schéma de principe du comparateur : l'état de la sortie Vs dépend de la différence de potentiel entre les entrées V+ et V-. Lorsque V1 > V2, Vs = +Vsat ; et lorsque V2 > V1, Vs = -Vsat.

AOP_comparateur.png
AOP_comparateur.png (35.77 Kio) Vu 3062 fois

Ici, on envoie une information de luminosité (photorésistance) sur l'entrée négative de l'AOP, et on fixe un seuil (potentiomètre), sur l'entrée V+. Lorsque la luminosité est trop basse, la tension aux bornes de la photorésistance diminue, devient inférieure au seuil fixé par le potentiomètre, la sortie passe à +Vsat et la LED s'allume ! Vous pouvez jouer avec le potentiomètre pour changer le seuil et masquer la photorésistance pour voir à quel point il s'est déplacé...

Maintenant, pour le fonctionnement en régime linéaire :

AOP_montageNonInverseur.png
AOP_montageNonInverseur.png (2.33 Kio) Vu 3062 fois

Schéma de principe de l'amplificateur non inverseur : on amplifie le signal envoyé sur l'entrée V+ par le gain déterminé par les résistances. Ce dernier vaut 1+(R2/R1).

AOP_lineaire.png
AOP_lineaire.png (34.36 Kio) Vu 3062 fois

Note : ici le potentiomètre n'est pas alimenté, car on veut exploiter une résistance et non une tension ;)

Pour montrer de manière simple le fonctionnement en amplification linéaire, j'ai choisi de jouer sur l'intensité lumineuse d'une LED, alimentée par l'AOP. Cette LED devant être alimentée par du +5V, il me faut un signal plus faible en entrée pour pouvoir l'amplifier sans risquer de griller la LED : l'entrée V+ de l'AOP est donc attaquée par un pont diviseur de tension. La LED branchée directement sur ce dernier (fil blanc) sert à visualiser la différence entre ce qui se passe avant et après l'AOP. En ce qui concerne le gain du montage, j'ai choisi un potentiomètre à la place de la résistance R2 du schéma de principe, pour pouvoir l'ajuster à la main : jouez sur le bouton et vous verrez la luminosité de votre LED augmenter ou diminuer en fonction !

:idea: Il existe beaucoup d'autres montages avec l'AOP, dans un souci de simplicité nous n'en avons étudié que deux mais vous pouvez aller faire un tour sur Wikipédia ou ailleurs pour vous faire une idée des autres possibilités : montage sommateur, soustracteur, comparateur à deux seuils...

Le registre à décalage 74HC595

Attaquons maintenant un tout autre type de composant : le registre à décalage. Expliquer en détail la théorie serait trop long, je vous invite à consulter les pages Wikipédia sur les bascules et les registres à décalage, ou le tutoriel sur les bascules si vous voulez approfondir par vous-mêmes... je vais essayer de faire court :?

Il peut arriver que vous arriviez à court de pins disponibles sur votre Arduino et que vous ayez besoin d'étendre sa capacité, sans avoir recours à une autre carte : c'est là qu'interviennent les registres à décalage.
Penchons-nous sur le 74HC595 : la datasheet nous dit qu'il s'agit d'un registre 8 bits à entrée série, sortie parallèle (Serial-In, Parallel-Out). En d'autres termes, vous pouvez vous en servir pour contrôler 8 sorties en même temps en utilisant moins de pins sur votre microcontrôleur. Vous pouvez également relier plusieurs registres entre eux pour augmenter encore le nombre de sorties disponibles...

Le principe : on envoie un octet de données sur une pin du registre, bit à bit, en lui envoyant un signal haut ou bas. C'est en envoyant un signal sur une seconde pin, celle de l'horloge, que l'on délimite les bits. Une fois que tout l'octet a été transmis au registre, les signaux HIGH ou LOW de chaque bit sont envoyés à chaque sortie du registre : il s'agit de la partie "parallel output", où toutes les sorties sont gérées lors de la même opération. Une troisième pin est utilisée : le verrou ("latch"), permettant de bloquer les sorties jusqu'à ce que l'octet suivant leur ait été communiquées, de manière à éviter qu'elles changent d'état intempestivement.

Passons à la pratique !

register_pinout.png
register_pinout.png (8.85 Kio) Vu 3062 fois

Le GND est à relier au GND de l'Arduino, VCC au +5V.
Les sorties sont les broches 1 à 7 et 15, QA à QH (QA correspondant au bit de poids fort). SER correspond à "SERial Input", c'est la broche où l'on enverra les données depuis l'Arduino ; RCLK ("storage Register CLocK") correspond au latch et SRCLK ("Shift Register CLocK") à l'horloge.
OE ("Output Enable") permet l'activation des sorties, il est actif à l'état bas donc à relier à la masse ; SRCLR ("Serial Register CLeaR") permet de remettre à zéro le registre, actif à l'état bas, il faut le relier au +5V.

register_binaryCounter.png
register_binaryCounter.png (42 Kio) Vu 3062 fois

Note : j'ai relié les anodes des LEDs avec l'OE du registre à décalage pour limiter le nombre de câbles et illustrer le fait que toutes les masses peuvent être reliées ensemble... mais vous pouvez bien entendu câbler vos montages autrement !

Principe du montage : l'Arduino compte de 0 à 255 et envoie les données au registre, qui affiche le résultat sur les LEDs branchées à ses sorties. Le registre alimentant directement les LEDs, il ne faut pas oublier les résistances !
L'IDE Arduino dispose d'une commande simple pour envoyer un octet bit à bit, et ça tombe bien, c'est ce dont on a besoin : il s'agit de shiftOut(dataPin, clockPin, bitOrder, value) où "dataPin" correspond à la broche du registre sur laquelle on envoie les données (SER, fil bleu), "clockPin" à la broche de l'horloge (SRCLK, fil vert), "bitOrder" définissant l'ordre d'envoi des bits (MSBFIRST : bit de poids fort en premier, LSBFIRST : bits de poids faible) et "value" la donnée à envoyer.

Voilà donc le code du compteur binaire :

Code: Tout sélectionner
// Déclaration des pins auxquelles sont reliées le registre
#define data 2
#define latch 3
#define clock 4


void setup()
{
  // Déclaration des pins en sorties pour pouvoir contrôler le registre
  pinMode(latch, OUTPUT);
  pinMode(clock, OUTPUT);
  pinMode(data, OUTPUT);
}

void loop()
{
  // Compter de 0 à 255 et afficher le nombre sur les LEDs
  for (int nombre = 0; nombre < 256; nombre++)
  {
    // Mise du verrou à l'état bas pour figer les sorties
    digitalWrite(latch, LOW);
    // Envoi des données
    shiftOut(data, clock, MSBFIRST, nombre);
    // Mise du verrou à l'état bas pour afficher le résultat
    digitalWrite(latch, HIGH);
    // Délai avant prochain compte
    delay(500);
  }
}

Ce n'est qu'un exemple parmi tant d'autres, à vous d'imaginer d'autres applications, si vous voulez faire un chenillard ou piloter d'autres éléments !

Le réseau de transistors Darlington ULN2803A

Dernier composant du Starter Kit !
Nous avons étudié plus haut les transistors et certains montages que l'on pouvait faire avec, et lorsque je vous ai parlé des TIP102 je vous ai présenté le montage Darlington. Le dernier circuit que nous allons voir est en fait un réseau de transistors montés de la même manière, en émetteur commun, comme ci-dessous :

darlington_inside.png
darlington_inside.png (8.18 Kio) Vu 3062 fois

L'avantage du circuit que nous avons choisi est que les entrées et sorties de chaque montage Darlington sont en face les unes des autres, c'est plus facile à brancher :

darlington_pinout.png
darlington_pinout.png (15.92 Kio) Vu 3062 fois

Il suffit donc d'envoyer le signal à amplifier sur une des entrées du circuit, et de brancher sur les sorties les éléments nécessitant plus de puissance que ne peut en délivrer l'Arduino seul : des relais, des moteurs, des lampes, des solénoïdes... Il faudra aussi relier la pin 9 "GND" à la masse, et la pin 10 "common free wheeling diodes" à l'alimentation.


C'est tout pour aujourd'hui : vous pouvez maintenant aller jeter un oeil aux autres tutoriels pour voir comment les différents composants peuvent interagir les uns avec les autres, vous pencher plus en détail sur le code pour faire des applications plus avancées, bidouiller avec du matériel de récup... et n'oubliez pas de publier vos réalisations dans la section "Vos projets, vos idées" !
"If it's itchy, scratch it !" - "DIY or die"

RTFM (À lire avant de poster) - ANDb (Arduino Noob Database)
Avatar de l’utilisateur
Laetitia
 
Messages: 296
Inscription: Mar 7 Aoû 2012 15:07
Localisation: Toulouse

Retourner vers Starter Kit

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité