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 NPN + 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 20mW.

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 10mW.

Un IRFU5505 est capable de dissiper 57W, avec un dissipateur. Pour 10mW 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

lundi 13 août 2018

NRF24L01 et ARDUINO UNO, NANO, MINI

  RF24L01 et ARDUINO UNO, NANO, MINI

Beaucoup de personnes, y compris moi-même ont été confrontées à des problèmes de communication entre un module NRF24L01 et une carte ARDUINO, spécialement lorsqu'il s'agit de modèles UNO ou NANO.

Je parle ici de problèmes de communication SPI et non pas de difficultés de communication sur la fréquence 2.4GHz.

1. Le NRF24L01

IMPORTANT : L'alimentation d'un NRF24L01 en 5V provoque la mort de celui-ci.

Ce module doit être alimenté au maximum sous 3.6V, donc l'alimenter par la sortie 3.3V d'une NANO ne semble pas une mauvaise idée.

Un petit condensateur de découplage de 100nF entre 3.3V et masse au plus près du NRF24L01 est une sage précaution.

Certains clones de NRF24L01 sont de qualité moyenne et réclament un découplage plus fort, 10µF au tantale à faible ESR ou à défaut un 47µF électrolytique de bonne qualité.

En alimentant le NRF24L01 sur la sortie 3.3V d'une NANO, avec 100nF je n'ai jamais eu de problème, mais cela peut certainement arriver avec certains clones.

Personnellement j'utilise beaucoup de PRO MINI 3.3V + NRF24L01 alimentés en 3.3V. L'alimentation est composée d'une batterie LITHIUM-ION + un régulateur externe du type LM2936-3.3V 50mA.

Ce régulateur réclame un découplage de 10µF électrolytique. Je n'ai pas de problème malgré des pointes de courant allant jusqu'à plus de 30mA.

Ce module est tolérant au 5V sur son bus SPI. On pourrait être tenté de croire que cela va bien se passer lorsqu'on le connecte directement sur le bus SPI d'un ARDUINO UNO ou NANO.

Mais il subsiste un doute. Si le niveau des signaux envoyés sur le bus SPI par l'ARDUINO est plus que suffisant (5V), celui des signaux envoyés par le NRF24L01 peuvent ne pas convenir car trop faibles (3.3V). Ceci est une supposition.

2. Montage direct ARDUINO NANO & NRF24L01

Ce montage utilise une breadboard sur laquelle un NRF24L01 est câblé directement sur les broches d'un ARDUINO NANO, ceci à l'aide de fils DUPONT.

L'ARDUINO est alimenté dans un premier temps par le câble USB, le temps de charger le sketch.

Ensuite l'USB est débranché et il est alimenté à l'aide d'une alimentation variable par sa broche 5V bien entendu.

Les broches sont connectées comme CECI.

Le code de test utilisé est celui d'un thermomètre comme CELUI-CI, utilisant un DS18B20.

L'ARDUINO NANO est donc alimenté par sa broche 5V et le NRF24L01 par la broche 3.3V de la NANO. Cette tension mesurée est de 3.26V.

Il ne reste plus qu'à faire varier la tension. J'obtiens un fonctionnement correct entre 4.4V et 6V.

Cela aurait tendance à prouver qu'il est possible de communiquer en SPI entre un NRF24L01 et un processeur en 5V.

Mais j'ai déjà eu un montage qui ne fonctionnait pas avec un chargeur USB fournissant 5.6V alors qu'il fonctionnait sur l'USB de mon PC.

On peut certainement mettre en  cause la qualité du chargeur et en déduire une certaine sensibilité à la qualité de l'alimentation.

Dans tous les cas, essayer d'utiliser une breadboard de qualité et des fils Dupont en bon état et le plus courts possible.

Si vous êtes obligé de forcer comme un bœuf pour enficher l'ARDUINO NANO ou MINI sur la breadboard, cela commence mal. C'est un signe que les problèmes ne font que commencer.

L'idéal est de se fabriquer une carte comme celle-ci, avec un vrai PCB. Il est facile de s'en inspirer pour créer une carte à base d'ARDUINO NANO.

3. Montage direct PRO MINI & NRF24L01

Ce montage est celui que j'utilise le plus souvent.

Voici quelques exemples :

Détecteur de mouvement MYSENSORS sur batterie

Prise connectée MYSENSORS

Thermomètre MYSENSORS sur batterie

Il fonctionne à coup sûr.

4. Dépannage

Alors comment s'en sortir ?

Je vous conseille de vérifier à l'aide d'un exemple simple le fonctionnement du couple ARDUINO / NRF24L01.

Branchez le NRF24L01 comme indiqué ICI.

Installez cette librairie RF24. Même si vous envisagez d'utiliser uniquement MYSENSORS, cela ne sera pas inutile.

Ensuite dans l'IDE ARDUINO chargez l'exemple de la bibliothèque nommé starping.

Modifiez-le comme ceci :

  // recherchez cette ligne
  radio.begin();
  // ajoutez ceci :
  Serial.print("Radio connected: ");
  Serial.println(radio.isChipConnected() ? "YES" : "NO !!!");

La méthode isChipConnected est récente. Elle permet de vérifier que le chip NRF24L01 est bien visible sur le bus SPI.

Téléversez le code et ouvrez la console.

Deux messages peuvent apparaître :

Radio connected: NO !!!

Vous avez un problème de communication sur le bus SPI.

Radio connected: YES

Votre bus SPI fonctionne. Vous pouvez envisager la suite avec sérénité.

ATTENTION : il existe deux librairies :

Actuellement lorsque l'on clone https://github.com/TMRh20/RF24.git github renvoie sur https://github.com/nRF24/RF24.

Par contre si vous faites une mise à jour de https://github.com/TMRh20/RF24.git celle-ci sera bien effectuée sur cette URL.

En cas de doute je vous conseille d'effacer votre répertoire RF24 et de refaire une installation propre.

5. Possibilités

Vérifiez et revérifiez votre câblage.

Ne faites pas passer de câbles sous l'antenne du NRF24L01.

Évitez les câbles trop longs.

Vérifiez votre tension d'alimentation. Alimentez votre ARDUINO avec un régulateur de qualité.

Si vous utilisez un ARDUINO ou un module radio ayant déjà servi, il se peut qu'il ait souffert de précédentes expérimentations. Essayez d'en changer.

Êtes-vous sûr de n'avoir pas inversé MISO / MOSI ?

Cela arrive ...

Si vous instanciez comme ceci :

RF24 radio(9,10);

Êtes-vous sûr que tes pins 9 et 10 sont reliées à CE et CS du NRF24L01 ?

6. Références

Librairie RF24 : https://github.com/nRF24/RF24

7. Mises à jour

21/09/2019 :  4. Dépannage (ATTENTION)


mardi 31 juillet 2018

Banc de Mesure de Consommation




Banc de Mesure de Consommation

Cet article décrit un banc de mesure de consommation. Il est réalisé autour d'une carte ARDUINO MEGA et possède deux modules INA226 et un afficheur OLED.

1. La théorie

La tension maximale aux bornes du shunt de l'INA226 est de 81.92mV, ce qui correspond pour un shunt de 100mΩ à un courant maximal mesurable arrondi de 820mA ou pour un shunt de 10Ω à un courant maximal mesurable arrondi de 8,20mA.

Pour le shunt de 100mΩ La résolution est donc de 820 / 32768 = 25µA.
Pour le shunt de 10Ω La résolution est donc de 8,20 / 32768 = 0.25µA.

Pourquoi 32768 alors que l'ADC de l'INA226 est un 16bits ? Parce qu'il est capable de mesurer des courants négatifs, donc 16 bits moins le bit de signe cela fait 15, et 2 à la puissance 15 = 32768.

Dans tous les cas, la chute de tension maximale aux bornes du shunt sera celle de l'INA226 : 81.92mV, ce qui est très acceptable.

2. Les fonctionnalités

Cette carte permet de mesurer la consommation de montages électroniques, en particulier de circuits à base de micro-contrôleurs à faible consommation comme décrit ICI.
Il est capable de mesurer des courants de 0.5µA à 0.8A.

Deux shunts sont utilisés :
  • un shunt 0.1Ω high-side
  • un shunt 10Ω low-side
Le shunt de 0.1Ω permet la mesure de courant jusqu'à 0.8A.
Le shunt de 10Ω est activé uniquement pour la mesure de courant inférieurs à 5mA.

La tension appliquée à la charge est également mesurée. Celle-ci peut être au maximum de 33V.
Un transil 33V et un fusible protègent le banc.

Ce banc permet donc d'alimenter des cartes à micro-contrôleur en 1.8V, 3.3V, 5V et plus. Il peut par exemple mesurer le courant sur le JACK d'alimentation d'un ARDUINO UNO en 7.5V ou 12V. Il n'est pas limité à la mesure de tensions faibles comme certains :
Exemple: ST microelectronics, limité à 1.8V - 3.3V.

Deux modes de fonctionnement sont possibles. Le choix se fait par un petit inverseur.

2.1. Mode autonome

Un petit afficheur OLED permet de visualiser la tension et le courant instantanés.

2.2. Mode connecté


Les données sont remontées vers un PC par le câble USB de l'ARDUINO MEGA.
Un logiciel sur le PC récolte les données et effectue les calculs :
  • tension minimale
  • tension maximale
  • tension moyenne
  • courant minimal
  • courant maximal
  • courant moyen
Le logiciel permet d'afficher également une courbe de consommation.
Il est développé en PYTHON + MATPLOTLIB.
 

2.3. Calibration

En l'absence de charge, l'appui sur un micro-switch permet de calibrer le zéro du banc.
Débrancher et brancher la câble USB. Appuyer sur le switch une vingtaine de secondes, relâcher. Appuyer à nouveau pour démarrer.
La calibration est sauvegardée en EEPROM.

2.4. Shield

La carte est développée sous forme de shield enfichable directement sur la carte ARDUINO MEGA. La carte MEGA est équipée de quatre pieds plastique.


3. Le matériel

Pour réaliser ce banc, il vous faudra réunir :
  • un ARDUINO MEGA
  • deux modules INA226
  • un shunt 10Ω CMS 2010
  • un shunt 100mΩ CMS 2010
  • un afficheur SSD1306 0.96 pouces
  • 1 condensateur de 100nF
  • un transistor MOSFET IRLZ44N
  • 1 résistance de 110Ω
  • 1 résistance de 9.1KΩ
  • deux connecteurs 2 broches mâles au pas de 2.54
  • trois connecteurs 8 broches mâles au pas de 2.54 
  • un connecteur 10 broches mâles au pas de 2.54 
  • un micro-switch pur PCB
  • un inverseur pour PCB
  • un porte-fusible 20mm
  • un transil 33V
  • une broche de test
  • quatre pieds plastique pour la MEGA
Souvent les modules INA226 sont équipés d'un shunt 10mΩ.
Ils doivent être remplacés. Il s'agit de résistance CMS 2010, maximum 2512.

Les valeurs des résistances de 110Ω et 9.1KΩ ne sont pas critiques. 100Ω et 10KΩ conviennent.
Le transil n'est pas obligatoire si vous êtes sûr de limiter la tension d'alimentation à 33V.


4. Le schéma


Sur ce diagramme de l'INA226 on peut voir que l'on peut faire la mesure de courant en low-side (côté GND) ou high-side (côté positif).

Le principe de fonctionnement du banc est le suivant :
  • un INA226 est utilisé en milliampèremètre (shunt de 100mΩ) et voltmètre en high-side
  • un INA226 est utilisé en microampèremètre (shunt de 10Ω) en low-side
  • un MOSFET canal N permet de court-circuiter le micro-ampèremètre lorsque la mesure est effectuée par le milliampèremètre
Le MOSFET canal N a une très faible résistance en état de conduction (22mΩ).

Le micro-ampèremètre est situé côté low-side car pour commander le MOSFET canal N il faut que sa source soit au GND, et que sa grille soit commandée par une tension positive suffisamment élevée (5V).

Le MOSFET est saturé en permanence, ce qui court-circuite le shunt de 10Ω du microampèremètre et permet d'éviter une chute de tension trop importante pendant la mesure des courants importants.Quand le courant mesuré sur le milliampèremètre est inférieur à 5mA, une tension de 0V est appliquée sur la grille du MOSFET afin de mettre en service le shunt de 10Ω. Une mesure est alors réalisée par le microampèremètre.



Le schéma est réalisé à l'aide de KICAD.

Pour récupérer le projet voir plus bas : 8. Téléchargements

Vous pouvez aisément essayer ce montage sur une breadboard.

5. IDE ARDUINO

Il vous faudra installer les bibliothèques ARDUINO suivantes :

Dans votre IDE (arduino-cc 1.8.5 par exemple), dans le menu "Outils/Type de Carte" choisir "Arduino MEGA".
 

6. Le code

Pour récupérer le projet voir plus bas : 8. Téléchargements

7. Photos

Voici quelques photos du montage réalisé :




La MEGA avec quatre pieds plastique.


La charge mesurée (à gauche) est une carte d'expérimentation MYSENSORS, montée en thermomètre basse consommation.
Elle est équipée d'un ARDUINO MINI, d'un module NRF24L01 et passe la plupart de son temps en mode sommeil profond. Toutes les 10 secondes elle se réveille pour effectuer une mesure de température et envoyer celle-ci via le module NRV24L01 à une passerelle MYSENSORS reliée à un serveur DOMOTICZ.
La carte est alimentée en 3.7V, et possède un régulateur 3.3V consommant à lui tout seul 14µA.
Cet exemple illustre parfaitement l'utilisation du banc. Le but est de connaître avec précision la consommation moyenne de la carte afin de dimensionner correctement la batterie LITHIUM-ION qui l'alimente.
Comme on le voit sur le graphe en 1.2, la carte consomme 15.5µA en mode sommeil, 33mA lors de l'émission des données, ce qui donne une moyenne de 75µA.
Avec une batterie de 600mAH, l'autonomie serait donc de 8000 heures, soit 333 jours.

La période de 10 secondes a été choisie à titre d'exemple pour cet essai. Une période de mesure de plusieurs minutes serait plus adaptée pour un thermomètre, et la consommation moyenne serait encore plus basse.

Mon thermomètre sur batterie effectue une mesure toutes les 15 minutes. Il est en service depuis décembre et affiche encore une capacité batterie de 92%.
Mon détecteur de mouvement  consomme 65µA. Il est en service depuis fin avril et affiche une capacité batterie de 77%.
 

8. Téléchargements

Le projet est disponible ici : https://bitbucket.org/henri_bachetti/ina226-usb-power-bench

Le logiciel PYTHON est fourni : INA226_powerbench.py

Cette page vous donne toutes les informations nécessaires :
https://riton-duino.blogspot.com/p/migration-sous-bitbucket.html

9. Bibliographie

Le sujet sur le forum ARDUINO :
https://forum.arduino.cc/index.php?topic=545217.0
Le projet sur le forum ARDUINO :
https://forum.arduino.cc/index.php?topic=561033.0

10. Mises à jour

01/08/2018 : améliorations du code.
02/11/2018 : ajout du paragraphe 1. La théorie
12/01/2019 : ajout de photos
22/03/2019 : déménagement du projet vers BitBucket.org
08/09/2019 : 4. Le schéma (synoptique)

lundi 7 mai 2018

Batteries LITHIUM-ION et NI-MH

Batteries LITHIUM-ION et NI-MH


Nous autres bidouilleurs sur ARDUINO utilisons fréquemment des batteries pour nos montages.
On trouve sur les sites chinois ou Amazon des batteries LITHIUM-ION ayant soit des capacités extraordinaires soit un prix dérisoire.
Qu'en est-il de leur qualité ? Et si l'on mesurait leur capacité réelle ?

1. Banc de test

J'ai utilisé pour cela un ARDUINO PRO MINI 8MHz, sur une carte développée par mes soins il y peu.

La décharge est assurée par une résistance bobinée métallique de 10 ohms 3W.
La batterie est chargée à bloc.
L'ADC de l'ARDUINO est étalonné : 1.088V avec un multimètre 40000 points
Une mesure est effectuée toutes les 30s.

La PRO MINI dort entre chaque mesure. La consommation est de 5µA.

La tension de la batterie est de 4.2V à vide.
La tension de la batterie avec la résistance connectée est de 3.7V.
Un buzzer est activé quand la tension descend à 3V.

Pour le calcul de la capacité des plutôt que de faire un relevé sur toute la longueur de la décharge. Nous choisirons une tension moyenne de 3.3V, ce qui semble assez réaliste quand on regarde une courbe de décharge.


2. Résultats

2.1. UltraFire 6000mAH

La batterie est neuve. Première recharge.

La décharge a duré 3H à 330mA.

Une capacité équivalente à 990mAH.

Cette batterie ne tient absolument pas ses promesses. je dirais même que c'est de l'escroquerie.
C'est une batterie que j'utilise pour des essais et des prototypes, pas pour des réalisations définitives. Sa taille est trop importante de toutes façons.

2.2. SAMSUNG 2500mAH

Cette batterie a déjà été utilisée dans une vapoteuse. Elle a déjà subi quelques recharges, moins de dix.

La décharge a duré 6H à 330mA.

Une capacité équivalente à 1980mAH.

Cette batterie a déjà délivré des courants importants, de l'ordre de 12A. Cela explique peut-être la différence entre la capacité annoncée et la capacité mesurée.

2.3. GTL 2300mAH

La batterie est neuve. Première recharge.

La décharge a duré 41 minutes à 330mA.

Une capacité équivalente à 225mAH.

Dommage, cette batterie a un format 16340, intéressant  pour les montages où la place est comptée. J'en ai deux en cours d'utilisation pour l'instant, dans un thermomètre et un détecteur de présence.
Le thermomètre est en service depuis la mi-décembre et la batterie a encore 92% de sa capacité.
Cela reste une batterie intéressante pour des montages à très faible consommation, mais il est certainement possible de trouver des modèles à un prix correspondant plus à sa capacité réelle.

2.3. CELLEVIA ACCU-600/3NI-MH/C

La batterie NI-MH est neuve. Première recharge.

La décharge a duré 2H45 à 330mA.

Une capacité équivalente à 900mAH.

Les fabricants de batteries NI-MH seraient-ils plus honnêtes que les fabricants de batteries LITHIUM-ION ?

3. Récapitulatif


Modèle Technologie Format Tension nominale Capacité mesurée Poids
UltraFire 6000mAH LI-ION 18650 3.7V 990mAH 35,4g
SAMSUNG 2500mAH LI-ION 18650 3.7V 1980mAH 43.5g
GTL 2300mAH LI-ION 16340 3.7V 225mAH 13.7g
CELLEVIA ACCU-600 NI-MH 2/3AA 3.6V 900mAH 42.3g

4. Conclusion 

Quand on achète une batterie sur AliExpress ou Amazon, il vaut mieux éviter celles qui semblent avoir des capacités irréalistes par rapport à d'autres, surtout si le prix est bas.
Ne vous faites pas avoir.


4. Versions

07.05.2018 : ajout de la CELLEVIA ACCU-600

dimanche 6 mai 2018

Carte de test ARDUINO NANO




Carte de test ARDUINO NANO

Cet article décrit une carte d'expérimentation et de test pour une carte ARDUINO NANO.


1. Les fonctionnalités

Cette carte permet de se passer de breadboard dans la plupart des cas.
Les problèmes de faux contacts habituels sont fortement diminués du fait de l'utilisation de connecteurs de qualité.

Elle permet également de tester une carte "douteuse" ou un lot de cartes dont vous auriez fait l'acquisition.

Elle est équipée de connecteurs de reprise des broches de l'ARDUINO permettant de tester rapidement un composant quelconque.

Il est possible de connecter 18 LEDs sur ses entrées sorties. Ces LEDs sont enfichées sur des connecteurs deux broches et peuvent être connectées au +5V ou à la masse, suivant le besoin.
Il est possible bien sûr de brancher autre chose sur ces connecteurs, des boutons poussoirs par exemple.
Deux LEDs bleues permettent de visualiser l'état des alimentations 5V et 3.3V.
Deux potentiomètres sont connectés sur les broches A6 et A7.

2. Le matériel

Pour réaliser cette carte, il faut réunir le matériel suivant :
  • 4 connecteurs femelle 2.54 15 broches
  • 2 batterie lithium-ion
  • 2 LEDs bleues
  • 18 LEDs vertes ou rouges ou jaunes
  • 2 potentiomètres 5K
  • 1 connecteur d'alimentation Jack 5.5 x 2.1
  • 1 interrupteur
  • 1 broche de test
  • 4 petites colonnettes 2.5 ou 3mm et 4 vis

3. Le schéma

Le schéma est réalisé à l'aide de KICAD.

Pour récupérer le projet voir ci-dessous : 7. Téléchargements

4. Photos

Voici une image de la carte :

5. Utilisation

Cette carte peut être utilisée soit alimentée par l'USB de l'ARDUINO, soit par les deux batteries, soit par le connecteur JACK.
Si vous alimentez par le connecteur JACK, enlevez les deux batteries.
L'USB peut être branché dans les deux cas.

A gauche des batteries on peut voir la broche de test. Vous pourrez y connecter la masse de votre multimètre ou oscilloscope.

Les LEDs peuvent être connectées entre sortie et masse (connecteurs extérieurs) ou sortie et +5V, comme sur la photo.
Elles consomment chacune 2mA.
Bien entendu, sur un même port de sortie il faudra éviter de connecter une LED à la masse et une au +5V. C'est l'un ou l'autre.

Lorsque vous communiquez avec un composant I2C par exemple, vous pouvez laisser deux LEDs entre les broches A5 et A6 et le +5V. Elle ne sont pas gênantes et vont clignoter pendant la communication.


6. Le code

Pour récupérer un sketch exemple voir ci-dessous : 7. Téléchargements
 
Il s'agit d'un code exemple permettant d'allumer successivement les 18 LEDs. Les deux potentiomètres permettent de régler le temps d'allumage et d'extinction.

7. Téléchargements

Le projet est disponible ici : https://bitbucket.org/henri_bachetti/arduino-nano-test-board

Cette page vous donne toutes les informations nécessaires :
https://riton-duino.blogspot.com/p/migration-sous-bitbucket.html


Cordialement
Henri