mercredi 29 août 2018

Capteur de présence : le HC-SR501 sous 3.3V, 3.7V et 5V

Le HC-SR501 sous 3.3V, 3.7V et 5V

Le but de cet article est de faire fonctionner un détecteur de mouvement HC-SR501 sous différentes tensions. Dans un article précédent je l'avais modifié pour le faire fonctionner en 3.3V.

Voyons ce qu'il en est plus précisément.

1. Le HC-SR501

Ce module accepte une tension d'alimentation de 5 à 20V.

Sa sortie est à zéro volts au repos et passe à 3.3V lors de la détection de passage d'un personne.

Sa consommation est de 60µA au repos, et passe à 260µA lorsqu'il détecte un passage.

Une diode sur la broche d'alimentation protège la carte contre les inversions de polarité.

Un petit rappel sur les branchements et l'utilisation des potentiomètres :

L'angle de détection est de 120°.

Le cavalier doit être placé sur H si l'on désire une répétition des détections.

Le réglage de sensibilité permet de réduire la distance de détection, de 3 mètres à 7 mètres. Le réglage de temps d'activation permet de fixer le temps pendant lequel la sortie restera à l'état haut, de 3 secondes à 5 minutes.

Il faut savoir qu'après une détection une nouvelle détection ne pourra être faite qu'après un délai de 3 secondes.

2. Le schéma

Examinons de plus près le schéma :


Le régulateur embarqué sur la carte est un 7133-1.

Cet excellent régulateur est capable de fournir 30mA et accepte une tension d'entrée de 18V (24V maxi). Sa tension de drop-out est de seulement 100mV et il consomme 5µA maxi ("quiescent current").

La diode en série sur l'entrée du régulateur fait chuter la tension d'environ 0.55V

Le circuit principal BISS0001 accepte une tension d'alimentation minimale de 3V.

3. Fonctionnement sous 5V et plus

Sous 5V et plus la tension en sortie du régulateur est bien de 3.3V.

La sortie passe à 3.3V lors de la détection de passage, tension suffisante pour assurer le basculement de l'entrée d'un microcontrôleur 5V du genre ARDUINO.

4. Fonctionnement sous 3.7V

Sous 3.7V la tension en sortie du régulateur est de 3.15V.

Première remarque : la chute de tension provoquée par le régulateur est ridicule : 1mV !

Le fonctionnement reste correct.

Le module est parfaitement capable l'être alimenté par une batterie LITHIUM-ION ou LIPO ou 3 batteries NI-MH en série.

5. Fonctionnement sous 3.3V

Si l'on alimente le PIR en 3.3V il reste 2.75V en sortie de régulateur.

Normalement à 2.75V le circuit BISS0001 ne devrait plus fonctionner mais ce n'est pas le cas, il continue à assurer la détection. Mais ce fonctionnement est hors spécifications. Rien ne dit que l'on aura pas la malchance de tomber sur un exemplaire ne fonctionnant pas sous cette tension.

Dans le cas d'une alimentation en 3.3V, il vaudrait mieux court-circuiter la diode en entrée de régulateur afin d'assurer une tension d'alimentation suffisante au BISS0001.

Sous 3.3V le régulateur n'est plus utile. On peut également le supprimer et court-circuiter ses broches VIN et VOUT. Cette opération est néanmoins peu intéressante. Elle permet de gagner au maximum 5µA de consommation.

Il y a toutefois un effet indésirable. La moindre perturbation sur l'alimentation génère de fausses détections, par exemple en activant ou désactivant un relais. Mais en général, si l'on fonctionne sous 3.3V, c'est que l'on recherche la basse consommation, et l'utilisation de relais ou de moteurs est à proscrire dans ce cas.

6. Test

Pour tester le capteur, nul besoin de le raccorder à un ARDUINO, il suffit d'une alimentation et d'une LED, branchés comme ceci :

Avec le branchement de gauche, la LED s'allumera en cas de détection.

Avec le branchement de droite, la LED s'éteindra en cas de détection.

Également, un capteur PIR est tout à fait capable d'allumer une lampe à l'aide d'un simple relais, sans avoir recours à un ARDUINO, comme ceci :

Le réglage de temps d'activation permettra de fixer le temps pendant lequel la lampe sera allumée, de 3 secondes à 5 minutes.

7. Alternative

Il existe un autre modèle bien plus petit, sans réglages : le MH-SR602 :


Il consomme 20µA, et peut être alimenté entre 3 et 15V.

7. Références

Le PIR : HC-SR501
Le régulateur : 7133-1
Le circuit de détection : BISS0001
Un article d'Yves Pelletier : Capteur à infrarouge passif (PIR)


dimanche 26 août 2018

Piloter un relais. Transistor unipolaire ou bipolaire ?

Piloter un relais. Transistor unipolaire ou bipolaire ?

Lorsque l'on désire alimenter la bobine d'un relais, la plupart du temps nous utilisons un transistor NPN du type 2N2222 ou 2N3904.
Mais pourquoi pas un MOSFET canal N ?

Quel est le but recherché lorsque l'on commande un relais à l'aide d'un transistor ?
Le but est bien sûr d'obtenir la chute de tension la plus faible possible dans le transistor, ce qui garantira que la bobine de celui-ci sera suffisamment alimentée pour faire coller les contacts.

Nous allons donc ici essayer les deux technologies, expliquer les choix et les détails de la mise en œuvre, et bien sûr mesurer le résultat.

1. Le relais

Le relais que je vais utiliser est un relais chinois très connu, le SONGLE SRD-05V DC-SL-C.
Ses contacts ont un pouvoir de coupure de 7A sous 250V.
Sa bobine se contente de 5V et a une résistance de 70Ω.
Nous allons donc devoir choisir un transistor supportant au minimum un courant de 5V / 70Ω = 71.4mA.

Si vous voulez piloter un relais 12V, il vous suffit de remplacer dans les schémas suivants la tension de bobine de 5V par 12V.

1.1. La diode de roue libre

Dans tout schéma utilisant une solénoïde, en particulier un relais, nous trouvons une diode dite "diode de roue libre" montée en inverse sur la bobine. Supprimons cette diode et examinons ce qui se passe lors de la coupure du courant :


Tension sur le collecteur

On voit sur cet oscillogramme un pic de tension de 100V sur le collecteur du transistor !

La mesure est faite avec une sonde / 10.

Tension d'alimentation 5V

On voit également des perturbations énormes sur la ligne d'alimentation 5V : jusqu'à 1.5V aussi bien en positif qu'en négatif pendant 100µs.

Ces perturbations pourraient facilement provoquer le plantage d'un microcontrôleur ou d'un module.

Avec la diode de roue libre ces surtensions disparaissent :


Tension sur le collecteur
Tension d'alimentation 5V

La diode de roue libre protège le transistor de commande contre les surtensions lors de la coupure du courant dans la bobine. Elle permet également de supprimer les perturbations sur l'alimentation.

Pourquoi le 2N2222 ne claque-t'il pas lors de l'essai sans diode alors qu'il ne supporte que 30V de tension émetteur / collecteur ?

  • la surtension est brève
  • le relais est petit
  • le 2N2222 est costaud
  • et enfin : la chance ...

Il est plus rationnel de choisir une diode rapide plutôt qu'une diode de redressement du type 1N4004. La 1N4148 a un "recovery time" de 8ns, contre 30µs pour la 1N4004.

On voit ici qu'une 1N4004 laisse passer une légère surtension :



Cette surtension pourrait être plus importante avec un plus gros relais.

Comment dimensionner une diode de roue libre ?

Pour cela il est indispensable de connaître les caractéristiques du relais :

  • résistance
  • inductance

La résistance est facile à connaître, elle est précisée dans la datasheet du relais. Il n'en va pas de même pour l'inductance.

On peut la mesurer avec un inductancemètre. Ce petit multimètre GM328, à base d'ARDUINO, que l'on peut facilement trouver chez les revendeurs chinois, affichera l'inductance et la résistance du relais :


La résistance série du relais limite le courant. Connaître la valeur de l'inductance permet de déterminer en combien de temps ce courant va être amorti.

Par exemple, pour un relais classique 5V SRD-05V DC-SL-C :

  • résistance : 70Ω
  • inductance : 20mH

Le courant dans la diode n'excédera pas 5V / 70Ω = 70mA.

La diode 1N4148 supportant 300mA en continu, on ne se préoccupera même pas de savoir combien de temps ce courant de 70mA va durer.

Conclusion pour un relais courant 5V ayant une résistance de bobine de plus de 20Ω, le choix sera facile : 1N4148, sans réfléchir.

Elle conviendra à la grande majorité des relais sur le marché.

Pour celui-ci par contre le problème est-il différent?


 OMRON OCB G9EC-1-B 12VDC

Il supporte jusqu'à 200A.

Sa résistance de bobine est de 12.8Ω, ce qui donne un courant maximal de presque 1A.

La datasheet ne précise pas son inductance, mais une 1N4148 peut supporter un courant de 1A pendant 1 seconde. On peut supposer sans être désespérément irrationnel que la surintensité durera moins d'une seconde.

On peut faire une bonne approximation en disant que le courant retombe à presque ZERO au bout de 3 fois la constante de temps L/R.

Pour 300ms on obtiendrait :

L = 0.3 x 12.8 = 3.84 Henry, ce qui est absolument énorme et impensable pour un relais, sauf relais de très très grosse puissance.

En étant légèrement paranoïaque, en supposant que ce relais ait une inductance de 200mH, ce qui est très pessimiste, le temps de retombée du courant serait de

T = L / R * 3 = 0.2H / 12.8 * 3 = 45ms

Une 1N4148 suffira amplement.

Dans le doute on peut toujours adopter une diode UF4002 supportant 1A en continu, et 30A pendant 8.3ms, si l'on a affaire à un relais encore plus monstrueux que le modèle précédent.

1.2. La charge inductive

Un relais, lorsqu'il commute une charge inductive, va générer des pics de tension sur le secteur. Ces parasites peuvent facilement passer à travers une alimentation, y compris à découpage.

Cela peut engendrer un plantage du microcontrôleur ou d'autres composants périphériques, un écran TFT ou LCD par exemple.

1.2.1. Charge continue

Si la charge est continue (moteur, bobine de contacteur, etc.) il suffit d'utiliser la technique de la diode de roue libre. Dans cet exemple le relais 5V active un relais 12V ou 24V continus :

On peut se demander quel est l'intérêt de piloter un contacteur à l'aide d'un relais, alors qu'un transistor bien dimensionné pourrait être utilisé ? Si l'on possède une carte à relais du commerce, et que l'on doit piloter un contacteur de moteur triphasé par exemple, on n'aura guère le choix.

1.2.2. Charge alternative

Si la charge est alternative, la diode de roue libre est inapplicable. En effet l'alternance négative passerait directement dans la diode et la détruirait. 

Je préconise ceci :

Un circuit RC (appelé snubber) est connecté entre la sortie du relais et le neutre, donc en parallèle sur la charge. Il absorbe les surtensions.

Le condensateur doit être de préférence du type X2 pour des raisons de sécurité, et supporter bien entendu 250V alternatifs :

On peut aussi utiliser une varistance 275VAC 350VDC à la place de ce circuit RC :


1.3. Le relais REED

Certains relais de faible puissance dits "relais REED" peuvent être pilotés directement depuis une sortie digitale de microcontrôleur :
Leur pouvoir de coupure est faible (0.25A à 1A) mais leur résistance de bobine est élevée (500Ω pour les modèles 5V) ce qui entraîne une consommation de 10mA, parfaitement acceptable pour la sortie d'un microcontrôleur.

Une diode de roue libre est néanmoins nécessaire, comme pour toute charge inductive. Voir paragraphe suivant.

1.4. Le relais statique

Le relais statique est un relais sans organe mécanique :

Leur entrée de commande consomme peu, de l'ordre de quelques mA à 30mA. Ils sont commandables directement par une sortie de microcontrôleur.
la diode de roue libre est inutile.

1.5. Le module relais

Dans le monde ARDUINO il existe des modules comprenant toute l'électronique de commande nécessaire :

Module 1 relais

Module 2 relais

Il faut faire attention à une chose : il existe des modules commandables par un niveau haut, d'autre commandables par un niveau bas, et d'autres sachant faire les deux comme le modèle ci-dessus (la sélection se fait grâce aux cavaliers jaunes).
Ils sont commandables directement par une sortie de microcontrôleur. La diode de roue libre est intégrée au module.

Ce qu'il faut savoir d'un relais commandable par un niveau bas :

Au démarrage du microcontrôleur, les pins digitales sont en entrée. Le relais ne sera pas activé.

Si vous activez la broche par pinMode(pin, OUTPUT), la sortie vaudra immédiatement zéro et le relais va être activé. Il faut immédiatement passer la sortie à 1 :

pinMode(pin, OUTPUT);
digitalWrite(pin, HIGH);

ou :

digitalWrite(pin, HIGH);
pinMode(pin, OUTPUT);

On trouve également des relais statiques (ou SSR : Solid State Relay), qui ne comportent aucune pièce mécanique, et sont donc silencieux.

Module relais statique 2A

Relais SSR 10A

Relais SSR 25A avec dissipateur

Module 8 relais SSR 2A

La plupart des modules relais statiques du commerce sont limités à deux ampères.
Au delà il faut s'orienter vers des relais statiques beaucoup plus imposants, et le dissipateur devient quasiment indispensable.

Il est déconseillé de commuter des signaux audio avec un relais statique, car ceux-ci intègrent un triac ou un thyristor. Ce ne sont pas vraiment des composants linéaires

1.6. Les relais miniatures

On range dans cette catégorie tous les relais de petites dimensions :

Relais Songle 12V / 10A


 

Relais Finder 12V / 6A

Ces relais peuvent en général être implantés sur un PCB.

Leur tensions de bobine est en général comprise entre 5V et 60V continus. Un transistor de commande est impératif.

S'il s'agit d'un modèle 12V ou 24V, c'est bien évidemment indispensable.

Il existe également des modèles 6V à 240V alternatifs. Les commander à l'aide d'un simple transistor est exclu.

Certains modèles ont un pouvoir de coupure élevé : 40A à 80A.
Il est bien évident que les pistes du PCB devront être dimensionnées en conséquence.

Leur pouvoir de coupure impose une puissance de bobine importante. Il en découle que la résistance de leur bobine est faible, de l'ordre de 40Ω à 70Ω pour un relais 5V, ce qui engendre un courant de 70mA à 125mA.

1.7. Les relais industriel et contacteurs

Le relais industriel est plutôt réservé aux application de forte puissance. Il est souvent monté sur support ou rail DIN :

Relais Finder 55.32.8.024.0040 24V / 10A
Relais Relpol RG25-3022-28-1024 24V / 25A
Contacteur Legrand-SM-425-24V-2NO

On trouve peu de relais industriels pouvant être implantés sur PCB.

Leur tensions de bobine est en général comprise entre 6V et 220V continus.

Il existe également des modèles 6V à 400V alternatifs.

Concernant leur commande, les règles sont les mêmes que pour les relais miniature.

2. Le transistor bipolaire

Tout d'abord il est déconseillé de choisir un transistor "petits signaux" du genre BC547. Il ne réussira pas à piloter la bobine du relais. Il vaut mieux s'orienter vers un transistor d'usage courant dit "General Purpose Transistor".

Nous allons essayer d'abord un PN2222.

Il supporte une tension collecteur-émetteur de 30V, un courant de collecteur de 600mA et a une tension de chute VCEsat p de 0.4V pour un courant de collecteur de 150mA et un courant de base de 15mA.

Voici le schéma de branchement.

Le transistor est piloté par une sortie du microcontrôleur à travers une résistance de 1KΩ dont le but est de limiter le courant de base et de saturer le transistor.

Ce transistor a un gain minimal de 35 pour un courant de collecteur de 10mA, et 100 pour un courant de collecteur de de 150mA. Nous allons choisir une valeur médiane de 80 car nous allons commuter 70mA.

Pour assurer un courant de 70mA dans le collecteur nous aurons besoin de 70mA / 80 = 0.875mA.

Nous choisirons un coefficient de sécurité de 5, largement suffisant pour saturer le transistor. Ne descendez pas en dessous de 2.

Les transistors ont généralement une tension base - émetteur de 0.7V

La résistance de base vaudra donc (5V - 0.7V) / (0.875mA x 5) = 982Ω.

Maintenant que nous avons expliqué ces notions de base, nous allons essayer de faire fonctionner ce montage à l'aide d'un ARDUINO NANO, simplement alimenté par son cordon USB. La sortie utilisée est la D4.

Un petit sketch très simple :

#define RELAY_OUT               4

void setup() {
  pinMode(RELAY_OUT, OUTPUT);
}

void loop() {
  digitalWrite(RELAY_OUT, HIGH);
  delay(2000);
  digitalWrite(RELAY_OUT, LOW);
  delay(2000);
}

Mesurons maintenant la chute de tension entre collecteur et émetteur du transistor.

Elle est de 45mV.

Maintenant nous allons essayer un autre transistor, le 2N3904.

Il supporte une tension collecteur-émetteur de 40V, un courant de collecteur de 200mA et a une tension de chute VCEsat p de 0.95V pour un courant de collecteur de 50mA et un courant de base de 5mA.

Le montage sera le même, les deux transistors ayant des gains comparables.

Cette fois-ci nous obtenons une chute de tension de 133mV. C'est nettement moins bien qu'avec le PN2222, mais cela reste très acceptable.

Un autre transistor ? le 2N3053.

Il supporte une tension collecteur-émetteur de 60V, un courant de collecteur de 700mA et a une tension de chute VCEsat p de 0.3V pour un courant de collecteur de 150mA et un courant de base de 15mA.

La chute de tension avec le 2N3053 est de 70mV.

Parlons prix : le PN2222 ou le 2N2904 vous coûteront environ 0.05€.

Le 2N3053 coûte 0.25€.

Ces prix proviennent de chez TME, par cinq ou dix unités.

2.1 Utiliser un ULN2803A

Il serait tentant d'utiliser un ULN2803A, composé de 8 transistors darlington, pour piloter 8 relais. La chute de tension sera plus importante : environ 1V.

Avec un relais 5V il restera 4V aux bornes de la bobine. Les relais, heureusement, sont tolérants :

  • un SONGLE SRD-05VDC-SRD réclame 75% de la tension nominale
  • un OMRON G5RL-K1A-E réclame 70% de la tension nominale
  • un FINDER 40.61.9.005 réclame 80% de la tension nominale

Avec certains relais (le FINDER par exemple), 4V de tension de commande risquent d'être insuffisants.

Par contre avec un relais 12V il restera 11V aux bornes de la bobine, ce qui plus acceptable. Pour ma part je réserverais ce genre de montage à des relais 12V ou 24V.

2.2 Piloter un relais 12V ou plus

On peut bien entendu piloter un relais 12V ou plus avec un arduino. Il suffit de modifier légèrement le schéma :

Le relais choisi est un OMRON-G9EA-A 48V dont la bobine consomme environ 100mA. C'est un gros relais dont les contacts supportent 60A.

Jusqu'à 24V, le PN2222 pourra convenir. Au delà, on peut s'orienter vers un 2N4238, supportant 60V.

2.3. Piloter un relais bistable


Un relais bistable (latch relay) est un relais à deux états. Il n'est pas nécessaire d'alimenter la bobine en permanence pour le faire coller, une simple impulsion suffit.

Il y a deux sortes de relais bistables :
  • simple bobine : il faut inverser le sens du courant dans la bobine pour l'ouvrir
  • double bobine : ce relais possède une bobine pour le fermer et une bobine pour l'ouvrir
Bien entendu, il faut consulter la datasheet du relais pour connaître le sens de branchement.

Les schémas suivants sont extraits de montages personnels et fonctionnels.

2.3.1. Relais bistable simple bobine (version à transistors)
Voici un schéma permettant de commander un relais bistable une bobine à l'aide de deux sorties de microcontrôleur :

Il suffit d'une impulsion de 100ms sur l'une ou l'autre entrée pour fermer ou ouvrir le relais.

Le modèle proposé OMRON-G5RL-U1A-E dispose de 2 contacts NO (normalement ouverts) en parallèle :


Le symbole schématique ne reprend pas le brochage du relais (c'est un symbole générique). La correspondance est la suivante :
1-8 (OMRON) -> 1-2 (schéma)

On peut aussi piloter un relais simple bobine avec seulement 4 transistors au lieu de 6, en supprimant les deux BC547, mais il faudra 4 sorties de microcontrôleur.
Dans ce cas, attention aux bugs :  si Q2 et Q3 ou Q4 et Q5 conduisent en même temps, cela provoque un beau court-circuit. Adieu transistors ...

2.3.2. Relais bistable simple bobine (version à L293D)

Enfin on peut aussi piloter ces relais avec un L293D :

On peut constater sur ce schéma la simplicité de la mise en œuvre. Un demi L293D remplace les six transistors précédents et tous les composants adjacents, y compris les diodes de roue libre.
Par rapport au schéma précédent l'encombrement sera nettement moindre.

Attention : le L293D est équipé de diodes, ce n'est pas le cas du L293.

Ce code permet de piloter 1 relais bistable simple bobine. 

#define RELAY_EN_1_2   8
#define RELAY_IN1          7
#define RELAY_IN2          6

void setup()
{
  pinMode(RELAY_IN1, OUTPUT);
  pinMode(RELAY_IN2, OUTPUT);
  pinMode(RELAY_EN_1_2, OUTPUT);
}

void relay_on(void)
{
  digitalWrite(RELAY_EN_1_2, HIGH);  digitalWrite(RELAY_IN1, HIGH);
  delay(100);
  digitalWrite(RELAY_IN1, LOW);
  digitalWrite(RELAY_EN_1_2, LOW);}

void relay_off(void)
{ 
  digitalWrite(RELAY_EN_1_2, HIGH);  digitalWrite(RELAY_IN2, HIGH);
  delay(100);
  digitalWrite(RELAY_IN2, LOW);
  digitalWrite(RELAY_EN_1_2, LOW);}

void loop()
{
  relay_on();
  delay(2000);
  relay_off();
  delay(2000);
}


Le L293D permettra de piloter 2 relais.
Sur le schéma un seul relais est branché et les entrées 3 et 4 sont désactivées (reliées à GND), mais il est facile d'ajouter un deuxième relais sur les sorties 3Y et 4Y et de les commander à l'aide de 2 sorties supplémentaires de l'ARDUINO connectées sur les entrées 3A et 4A.

Les entrées 1-2EN et 3-4EN (enable) peuvent être pilotées ensemble par une seule sortie de l'ARDUINO, ou pilotées séparément par deux sorties.
Elles peuvent être également directement reliées au +5V. Dans ce cas on n'en tiendra pas compte dans le code.

2.3.3. Relais bistable double bobine (version à transistors)
Ce schéma permet de commander un relais bistable deux bobines à l'aide de deux sorties de microcontrôleur :


Beaucoup plus simple n'est ce pas ?

Même principe : une impulsion de 100ms sur l'une ou l'autre entrée pour fermer ou ouvrir le relais.

Le modèle proposé OMRON-G5RL-K1A-E dispose de 2 contacts NO (normalement ouverts) en parallèle :


Ici encore le symbole schématique ne reprend pas le brochage du relais. La correspondance est la suivante :
1-9-8 (OMRON) -> 1-2-3 (schéma)

2.3.4. Relais bistable double bobine (version à L293D)
Bien entendu, comme précédemment, on peut aussi piloter ces relais avec un L293D. On pourra également piloter 2 relais :

Ce code permet de piloter 1 relais bistable double bobine :

#define RELAY_EN_1_2  8
#define RELAY_IN1     7
#define RELAY_IN2     6

void setup()
{
  Serial.begin(115200);
  pinMode(RELAY_IN1, OUTPUT);
  pinMode(RELAY_IN2, OUTPUT);
  pinMode(RELAY_EN_1_2, OUTPUT);
  digitalWrite(RELAY_EN_1_2, HIGH);
}

void relay_on(void)
{
  Serial.println("ON");
  digitalWrite(RELAY_IN2, LOW);
  delay(100);
  digitalWrite(RELAY_IN2, HIGH);
}

void relay_off(void)
{
  Serial.println("OFF");
  digitalWrite(RELAY_IN1, LOW);
  delay(100);
  digitalWrite(RELAY_IN1, HIGH);
}

void loop()
{
  relay_on();
  delay(2000);
  relay_off();
  delay(2000);
}


Le pilotage des bobines est en logique inverse car le point commun des bobines est relié au +5V, comme préconisé dans la datasheet.

3. Le transistor unipolaire

On voit beaucoup de montages utilisant un IRLZ44N, mais n'est-ce pas dommage d'utiliser un transistor supportant 47A pour commuter 70mA ?
Certains objecteront qu'il a une résistance RDSon très faible de 22mΩ qui occasionnera une chute de tension très faible.

Nous allons essayer d'abord un 2N7000.
Il supporte une tension drain-source de 60V, un courant de drain de 200mA et a une résistance RDSon maximale de 6Ω pour une tension VGS de 4.5Vdc et un courant de drain de 75mA.

Voici le schéma de branchement.
Le transistor est piloté par une sortie du microcontrôleur à travers une résistance de 220Ω dont le but est de limiter le courant d'appel lors de la montée du signal sur la gate. Une résistance de pull-down de 100KΩ est câblée entre gate et source afin de ne pas laisser la gate en l'air dans le cas où la sortie du microcontrôleur est en haute impédance, au démarrage par exemple.
Maintenant que nous avons expliqué ces notions de base, nous allons essayer de faire fonctionner ce montage à l'aide du même ARDUINO NANO que précédemment,en gardant le même sketch.

Mesurons maintenant la chute de tension entre drain et source du MOSFET.
Elle est de 165mV.
Cela donne une résistance RDSon effective de 2.3Ω, ce qui veut dire que l'exemplaire de transistor que je viens de tester est plus que conforme à la datasheet.
En ajoutant une résistance de 3.6Ω entre le drain du transistor et la bobine du relais afin d'atteindre les 6Ω de la datasheet, nous obtenons une chute de tension de 350mV, et le relais colle encore.

Maintenant nous allons essayer un autre transistor, le très connu BS170.
Il supporte une tension drain-source de 60V, un courant de drain de 500mA et a une résistance RDSon maximale de 5Ω pour une tension VGS de 10Vdc et un courant de drain de 200mA.
Attention, le brochage est inversé par rapport au 2N7000.

Cette fois-ci nous obtenons une chute de tension de 112mV.
Cela donne une résistance RDSon effective de 1.6Ω.

Bien sûr nous sommes loin des 22mΩ de l'IRLZ44N, mais ces deux transistors offrent des avantages non négligeables :
- petit boîtier :
    2N7000 et BS170 = TO92
    IRLZ44N = TO220
- petit prix :
    2N7000 = 0.06€
    BS170 = 0.10€
    IRLZ44N = 0.41€
Ces prix proviennent de chez TME, par 5 ou dix unités.

4. Quel MOSFET choisir

Ci dessous je vous propose une liste de MOSFET de puissance dont certains ont une tension VGSth très faible (en vert) :


5. Les MOSFETS récents

Les MOSFETS récents vous offrent des caractéristiques hors du commun, autant en RDSon qu'en VGSth.
Nous allons rester volontairement dans le domaine des petits MOSFETS susceptibles de convenir pour le pilotage de relais.

Le FDN327N, un petit monstre :
VDSS = 20V
ID = 2A
RDS(ON) = 70mΩ, 80mΩ, 120mΩ pour VGS = 4.5V, 2.5V, 1.8V
VGS(th) pour VDS=VGS et ID=250 μA = mini 0.4V, typique 0.7V, maxi 1.5V

Le TN0604 en boîtier traversant :
VDSS = 40V
ID = 1.5A
RDS(ON) = 1.6Ω maxi pour VGS = 5V
VGS(th) pour VDS=VGS et ID=1mA = mini 0.6V, maxi 1.6V

6. Le choix

Car il va bien falloir faire un choix.

Je dirais que la solution à base de transistor bipolaire est plus complexe à mettre en œuvre car elle nécessite de bien étudier la datasheet du transistor et de faire des calculs afin de bien saturer le transistor.

Mais cela reste la moins coûteuse.

La solution à base de MOSFET est plus simple. Il n'y a aucun calcul. Il suffit de choisir un transistor ayant les caractéristiques adéquates.

Une autre particularité est à prendre en compte : la tension de seuil de conduction "Gate Threshold Voltage". Pour les deux MOSFET présentés ici, cette tension est de 3V pour 1mA.

Si vous choisissez un transistor ayant une tension de seuil de conduction de 10V, les 5V de votre microcontrôleur ne suffiront pas a le faire conduire.

Il faut bien entendu tenir compte de l'historique de chacun. Les jeunes auront tendance à choisir le MOSFET, car plus récemment introduit sur le marché grand public que les bipolaires.

Les anciens, comme moi-même, n'ont même pas étudié le MOSFET à l'université, et ils ont tellement l'habitude d'utiliser des bipolaires que cela devient un réflexe. Même pas besoin d'empoigner la calculette pour calculer la résistance de base. 

Et il leur est difficile de sauter le pas. Le MOSFET c'est une autre manière de penser. C'est l'occasion d'essayer.

7. Références

Relais : SONGLE SRD-05V DC-SL-C
Transistor bipolaires : PN22222N3904
MOSFET canal N : 2N7000BS170

8. Liens utiles

Cordialement

Henri

9.  Mises à jour

25/01/2019 : 4. Quel MOSFET choisir
10/04/2019 : 1.3. Le relais REED
27/05/2019 : 2.1. Piloter un relais 12V ou plus
11/06/2019 : 1.4. Le relais statique
                     1.5. Le module relais
                     1.7. Le relais miniature
                     1.2. La charge inductive
29/06/2019 : 1.2. La charge inductive (ajout varistance)
29/08/2019 : 2.2. Piloter un relais bistable
31/08/2019 : 2.2.1. Relais bistable simple bobine (L293D)
19/09/2019 : 1.1. La diode de roue libre
10/12/2019 : 1.1. La diode de roue libre (compléments)

jeudi 16 août 2018

Alimenter un capteur ou une charge à la demande

Alimenter un capteur ou une charge

à la demande

Lorsque l'on désire alimenter un montage à base d'ARDUINO par une batterie et que ce montage est équipé d'un capteur, on choisit généralement un capteur possédant un mode LOW-POWER.

Exemple : capteur de température, RTC, NRF24L01, etc.

Dans certains cas, il est impossible de faire autrement que de laisser le capteur alimenté et actif en permanence. Exemple : capteur de passage. Heureusement, un capteur infra-rouge consomme peu, moins de 100µA.

Dans d'autres cas, on a affaire à un module consommant plusieurs mA voir plusieurs dizaines de mA, ne possédant pas de mode LOW-POWER.

S'il est nécessaire de laisser ce module actif en permanence, par exemple un NRF24L01 en mode réception, il faudra dimensionner la batterie en conséquence, lui adjoindre un chargeur solaire ou s'orienter sur une alimentation secteur.

S'il n'est pas nécessaire de laisser ce module actif en permanence, il est possible de l'alimenter à la demande, uniquement en cas de besoin, à l'aide d'une sortie du microcontrôleur.

Cette petite page va vous expliquer comment vous y prendre.

Nous traiterons uniquement le cas d'un ARDUINO en 5V et d'un module acceptant cette tension d'alimentation, mais le même principe peut être appliqué en 3.3V.

Dans le cas où la charge n'est pas un module mais un relais ou un moteur, cet autre article est plus approprié :

https://riton-duino.blogspot.com/2018/08/alimenter-un-relais-transistor.html

1. Rappels

Il est utile de rappeler certaines notions élémentaires de l'ATMEGA 328p.

  • une sortie peut fournir au maximum 40mA (1)
  • le courant maximal disponible sur l'ensemble des sorties est de 190mA (2)
  • le courant maximal disponible sur les ports C0 - C5, ADC7, ADC6 est de 100mA.
  • le courant maximal disponible sur les ports B0 - B5, D5 - D7 est de 100mA.
  • le courant maximal disponible sur les ports D0 - D4, RESET est de 100mA.

(1) le courant de service "normal" est de 20mA. Au dessus de 20mA, la tension sur la sortie chute en dessous de 4V.

(2) L'ATMEGA 328p consomme 10mA en mode actif. Il reste donc 190mA disponibles pour les sorties.

1.1. Charge

Dans le cas où la charge n'est pas un module mais un relais ou un moteur, il convient de protéger l'électronique par une diode de roue libre :

Qu'il s'agisse d'un relais, d'un moteur ou d'une pompe la diode de roue libre 1N4148 protège le transistor contre les surtensions inverses lors de la coupure du courant dans la bobine.

Il est important de choisir une diode rapide plutôt qu'une diode de redressement du type 1N4004.

La 1N4148 a un "recovery time" de 8ns, contre 30µs pour la 1N4004.

2. Méthode directe

Alimenter directement un module à partir d'une sortie commandée par le logiciel peut se faire, à condition d'avoir des besoins faibles en courant.

Sur une sortie de l'ARDUINO, connectez directement le VCC de votre module.

Pour alimenter la charge il suffit d'écrire :

#define POWER_OUT             4
 
void setup()
{
  pinMode(POWER_OUT, OUTPUT);
}
void loop()
{
  // sous condition
  digitalWrite(POWER_OUT, HIGH);
}

 

3. Transistor en HIGH-SIDE

Ici nous traiterons de l'utilisation d'un transistor bipolaire PNP ou MOSFET canal P pour commuter l'alimentation en HIGH-SIDE, c'est à dire le côté positif de l'alimentation.

3.1. Transistor PNP

Sur une sortie de l'ARDUINO, connectez un transistor PNP comme ceci :

La charge à alimenter est connectée entre OUT et GND.

Pour alimenter la charge il suffit d'écrire ceci :

  digitalWrite(POWER_OUT, LOW);

Sur le schéma la sortie D4 est utilisée pour commander la base du transistor à travers une résistance de 1K.

3.1.1. Calcul de la résistance

Imaginons que la charge à alimenter consomme 50mA. Le 2N2907 a un gain minimal de 100 pour un courant de collecteur de 1mA à 150mA. Pour assurer un courant de 50mA dans le collecteur nous aurons besoin de 50mA / 100 = 0.5mA.
Nous choisirons un coefficient de sécurité de 5, largement suffisant pour saturer le transistor. Ne descendez pas en dessous de 2.
Les transistors ont généralement une tension base - émetteur de 0.7V
La résistance de base vaudra donc (5V - 0.7V) / (0.5mA x 5) = 1.7KΩ.

3.2. Transistor NPN

Sur une sortie de l'ARDUINO, connectez un transistor NPN comme ceci :

En conservant la même valeur de résistance que précédemment, on pourrait penser obtenir le même résultat.

Pourquoi ce montage ne fonctionnera t-il pas ?

La résistance de base va provoquer une chute de tension. Cette chute de tension va dépendre de la charge.

En l'absence de charge :

La tension de base sera égale à 5V

La tension Vbe avec un courant de collecteur quasi nul vaudra 0.4V

Le tension d'émetteur sera égale à 5V - Vbe = 4.6V

Avec une charge de 50Ω :

Le courant de collecteur espéré serait de 5V / 50Ω = 100mA

Si le gain du 2222 est de 100 la chute de tension dans R1 sera égale à:

(0.1A / 100) * 1KΩ = 1V

La tension de base sera égale à 4V.

La tension Vbe avec un courant de 100mA vaudra 0.8V

Le tension d'émetteur sera égale à 4V - Vbe = 3.2V

Conclusion : un montage avec un transistor NPN en HIGH-SIDE est à proscrire, tout comme un PNP en LOW-SIDE.

3.3. Transistor NPN + PNP

On peut réduire le courant à fournir par une sortie de l'ARDUINO en connectant un transistor NPN + un PNP comme ceci :


Ce montage a le même fonctionnement que celui du paragraphe 3.1, mis à part que la commande est inversée par le transistor NPN.

Pour alimenter la charge il suffit d'écrire ceci :

  digitalWrite(POWER_OUT, HIGH);

3.3.1. Calcul des résistances 

Imaginons que la charge à alimenter consomme 50mA. Le 2N2907 a un gain minimal de 100 pour un courant de collecteur de 1mA à 150mA. Pour assurer un courant de 50mA dans le collecteur nous aurons besoin de 50mA / 100 = 0.5mA.
Nous choisirons un coefficient de sécurité de 5, largement suffisant pour saturer le transistor. Ne descendez pas en dessous de 2.
Les transistors ont généralement une tension base - émetteur de 0.7V. Le BC547 va lui-même ajouter sa tension de chute VCEsat de 200mV.
La résistance de base R3 vaudra donc (5V - 0.7V - 0.2V) / (0.5mA x 5) = 1.6KΩ.

R2 est une résistance de pullup. Sa valeur doit être largement supérieure à celle de R3 afin de ne pas ajouter un courant trop important dans Q1. 10KΩ ou 100KΩ peuvent convenir.

Le BC547 a un gain minimal de 110 pour un courant de collecteur de 2mA. Pour assurer un courant de 2.5mA dans le collecteur nous aurons besoin de 2.5mA / 110 = 22µA.
Comme précédemment nous choisirons un coefficient de sécurité de 5.
La résistance de base R1 vaudra donc (5V - 0.7V) / (22µA x 5) = 39KΩ.

3.4. MOSFET canal P

Sur une sortie de l'ARDUINO, connectez un MOSFET canal P comme ceci :

La charge à alimenter est connectée entre OUT et GND.

Pour alimenter la charge il suffit d'écrire ceci :

  digitalWrite(POWER_OUT, LOW);

Le transistor est piloté par une sortie du microcontrôleur à travers une résistance de 220Ω dont le but est de limiter le courant d'appel lors de la montée du signal sur la grille. Une résistance de pull-down de 100KΩ est câblée entre grille et source afin de ne pas laisser la grille en l'air dans le cas où la sortie du microcontrôleur est en haute impédance, au démarrage par exemple.

La sortie s'effectue sur le drain du MOSFET.

L'IRFU5505 n'est certainement pas le meilleur MOSFET à utiliser. (voir : 6. Quel MOSFET choisir).

4. Transistor en LOW-SIDE

Ici nous traiterons de l'utilisation d'un transistor bipolaire NPN ou MOSFET canal N pour commuter l'alimentation en LOW-SIDE, c'est à dire le côté négatif de l'alimentation.

4.1. Transistor NPN

Sur une sortie de l'ARDUINO, connectez un transistor NPN comme ceci :

La charge à alimenter est connectée entre OUT et 5V.

Pour alimenter la charge il suffit d'écrire ceci :

  digitalWrite(POWER_OUT, HIGH);

Sur le schéma la sortie D4 est utilisée pour commander la base du transistor à travers une résistance de 1K.

4.1.1. Calcul de la résistance

On reprendra les calculs du paragraphe 3.1.1. En tenant compte du fait que le 2N2222 a un gain minimal de 35 pour un courant de collecteur de 10mA, et 100 pour un courant de collecteur de de 150mA.

4.2. MOSFET canal N

Sur une sortie de l'ARDUINO, connectez un MOSFET canal N comme ceci :

La charge à alimenter est connectée entre OUT et 5V.

Pour alimenter la charge il suffit d'écrire ceci :

  digitalWrite(POWER_OUT, HIGH);

Le transistor est piloté par une sortie du microcontrôleur à travers une résistance de 220Ω dont le but est de limiter le courant d'appel lors de la montée du signal sur la grille. Une résistance de pull-down de 100KΩ est câblée entre grille et source afin de ne pas laisser la grille en l'air dans le cas où la sortie du microcontrôleur est en haute impédance, au démarrage par exemple.

La sortie s'effectue sur le drain du MOSFET.

Ici vous pourrez utiliser le fameux IRLZ44N avec sa tension de seuil de conduction de 1V à 2V. Il pourra être piloté par un ARDUINO PRO MINI 3.3V.

4.2. Transistor PNP + MOSFET canal P

Quelquefois, pour alimenter une charge de puissance sous 12V, un MOSFET ne parvient pas à saturer correctement avec une tension de grille de 3.3V.

Sur une sortie de l'ARDUINO, connectez un transistor NPN et un MOSFET canal P comme ceci :


La charge à alimenter est connectée entre OUT et GND.

Pour alimenter la charge il suffit d'écrire ceci :

  digitalWrite(POWER_OUT, HIGH);

4.2.1. Calcul des résistances 

Le MOSFET est piloté par le collecteur du BC547 à travers une résistance de 220Ω dont le but est de limiter le courant d'appel lors de la montée du signal sur la grille. La résistance de collecteur R2 de 10KΩ limite le courant de collecteur du BC547. Ce courant aura une valeur de 12V / 10KΩ = 1.2mA

Le BC547 a un gain minimal de 110 pour un courant de collecteur de 2mA. Pour 1.2mA il sera peu différent. Pour assurer un courant de 1.2mA dans le collecteur nous aurons besoin de 1.2mA / 110 = 11µA.
Comme précédemment nous choisirons un coefficient de sécurité de 5.
La résistance de base R1 vaudra donc (5V - 0.7V) / (11µA x 5) = 78KΩ.

La sortie s'effectue sur le drain du MOSFET.

Ici vous pourrez utiliser l'excellent  SUP90P06, ou un AOI409.

5. Les mesures

Les courants consommés ci dessus font chuter la tension 5V de l'ARDUINO. Pour mes premiers essais cette tension est celle du connecteur USB de la carte.
A vide cette tension est de 5V, à 100mA elle tombe à 4.5V.
En alimentant l'ARDUINO en 9V par la broche VIN, le 5V est fourni par le régulateur de la carte.
A vide cette tension est de 5.08V, à 100mA elle tombe à 4.88V.

Le tableau ci-dessous résume les mesures effectuées.

Alimentation Transistor Tension 5V Courant Tension sur la charge
USB Aucun 5V 10mA 4.5V
USB Aucun 4.95V 20mA 4.25V
USB Aucun 4.9V 40mA 3.8V
USB 2N2907 5V 20mA 4.9V
USB 2N2907 4.9V 50mA 4.8V
USB 2N2907 4.5V 100mA 4.3V
USB IRFU5505 5V 20mA 4.98V
USB IRFU5505 4.9V 50mA 4.88V
USB IRFU5505 4.5V 100mA 4.4V
VIN=9V 2N2907 4.98V 20mA 4.9V
VIN=9V 2N2907 4.90V 50mA 4.8V
VIN=9V 2N2907 4.88V 100mA 4.68V
VIN=9V IRFU5505 4.98V 20mA 4.97V
VIN=9V IRFU5505 4.95V 50mA 4.93V
VIN=9V IRFU5505 4.88V 100mA 4.8V

Avec un transistor PNP, à 20mA nous obtenons une tension sur la charge supérieure à celle d'une sortie utilisée directement.

Nous parvenons à obtenir également plus de courant qu'avec une sortie utilisée directement, limitée à 40mA.

La chute de tension est due à la tension de saturation du transistor, qui vient se soustraire à la tension d'alimentation.

Avec un MOSFET, à 20mA, 50mA ou 100mA nous obtenons une tension sur la charge plus importante qu'avec un transistor PNP.

Ceci est du à la résistance interne RDSon très faible du transistor choisi :

IRFU5505 : 0.11Ω pour pour un courant de drain de 10A et une tension VGS de 10V.

Une autre particularité est à prendre en compte : la tension de seuil de conduction "Gate Threshold Voltage".

Pour le IRFU5505 elle est de 2V à 4V pour un courant de drain de 250µA.

Vous devez impérativement choisir un MOSFET ayant une tension de seuil de conduction très inférieure à 5V.

Cette page permettra de faire son choix. A noter : l'excellent AOI409.

On constate également que dans tous les cas, la tension 5V USB n'est pas très intéressante si l'on cherche à débiter plus de 50mA.

En alimentant par VIN en 9V à travers le régulateur de l'ARDUINO, le résultat à 100mA est nettement meilleur.

Le régulateur de l'ARDUINO est capable de fournir 500mA au total, mais sous 12V je vous déconseille de dépasser 200mA. Il risque de chauffer beaucoup trop. Sinon choisissez une tension moins élevée, 9V par exemple.

Si vous voulez une meilleure régulation ou plus de courant il vous faudra passer par un régulateur 5V externe avec éventuellement un dissipateur.

Et qu'en est-il de la dissipation dans le transistor ?

Pour un PNP ou NPN elle sera égale au courant de collecteur multiplié par la chute de tension entre collecteur et émetteur :

Pour 100mA, la chute de tension est de 200mV, cela donne donc 200mW.

Un PN2907 en boîtier plastique TO92 est capable de dissiper 625mW.

Pour un MOSFET elle sera égale au courant de drain multiplié par la chute de tension entre drain et source :

Pour 100mA, la chute de tension est de 100mV, cela donne donc 100mW.

Un IRFU5505 est capable de dissiper 57W, avec un dissipateur. Pour 100mW le dissipateur sera largement inutile.

Pourquoi utiliser un MOSFET aussi puissant pour débiter si peu ?

Vous aurez tout simplement beaucoup de difficultés à trouver un MOSFET de faible puissance ayant une résistance RDSon faible.

Les MOSFET de faible puissance auront généralement une résistance RDSon de plusieurs ohms, ce qui les rend moins intéressants que les bipolaires pour des courants élevés.

En définitive que choisir ?

Pour des courants de quelques mA, alimentez directement la charge avec une sortie de l'ARDUINO.

Pour des courants allant jusqu'à 50mA, alimentez la charge avec un transistor bipolaire.

Au delà, choisissez plutôt un transistor MOSFET.

Les amateurs d'alimentation par batterie pourront appliquer le même principe et voir la durée de vie de leur batterie sérieusement augmentée.

Dans tous les cas, l'alimentation par l'USB sera réservée à la phase de mise au point. La réalisation finale passera forcément par une alimentation par la broche VIN avec une tension au moins égale à 7V, ou une alimentation directe par la broche 5V.

Il est possible d'alimenter l'ARDUINO par la broche VIN ou la broche 5V tout en laissant l'USB branché. Une diode sur la carte permet la sélection automatique de la tension la plus forte.

6. Quel MOSFET choisir

Ci dessous je vous propose une liste de MOSFET de puissance dont certains ont une tension VGSth très faible (en vert) :

Cette liste comporte 2 onglets MOSFETs canal N ou P (voir en bas).

7. Précautions

Lorsque vous coupez l'alimentation de votre capteur ou de votre module en HIGH-SIDE, il est déconseillé d'appliquer un niveau 1 sur l'une de ses entrées, s'il en comporte bien entendu.

Donc avant de couper l'alimentation, il faudra prévoir dans votre code de basculer les entrées du capteur à zéro.

Bien entendu si vous adoptez une commutation côté LOW-SIDE de l'alimentation, il faudra faire le contraire.



Cordialement
Henri

8. Références


9. Mises à jour

25/01/2019 : 6. Quel MOSFET choisir
26/01/2019 : 3.4. Transistor NPN
                       3.3. Transistor NPN + PNP
26/03/2019 : 4.2. Transistor PNP + MOSFET canal N
10/03/2019 : 1.1. Charge