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

13 commentaires:

  1. Bonjour, merci pour toute ces informations très instructives. J'ai pu constater que certains modèles de régulateurs proposent une fonction de shutdown (ME6211 par exemple). Cela peut il être une bonne solution à la place d'un mosfet ou transistor ?

    RépondreSupprimer
    Réponses
    1. Si la tension à fournir est inférieure à la tension d'alimentation générale, oui.

      Supprimer
  2. Bonjour,

    Tuto très instructif. Je me lance sur Kicad et j'aimerais bien que vous me fournissiez les dessins des composants que vous utilisez plus d'autres, si vous les avez, à savoir :
    - Arduino pro mini
    - NRF24L01
    - BME280
    J'essaye de reproduire votre schéma et aller jusqu'au bout.

    Merci.

    RépondreSupprimer
  3. Voici :
    https://drive.google.com/open?id=1iUVCkede7FdHi3iqiUK5_70axUa8mPgR
    https://drive.google.com/open?id=1qJ6qCEnLPwZ2wz_-pVjeUefr_-NdGzd0
    https://drive.google.com/open?id=1q8zek5_HPWOQmtvBtxL2UQyrdxMUgO_J

    Remarque: à partir des schémas et du routage il est facile de récupérer les symboles et les empreintes.
    Schéma : CTRL-E sur le composant puis click sur l'icône Export Component
    Routage : CTRL-E sur le composant puis click sur l'icône Export Footprint

    RépondreSupprimer
  4. Il existe différents modèles de BME280.
    Le mien est celui-ci : https://fr.aliexpress.com/item/GY-BME280-3-3-precision-altimeter-atmospheric-pressure-BME280-sensor-module/32711703783.html?spm=a2g0s.9042311.0.0.2c2d6c37mIQXjV

    RépondreSupprimer
  5. Très beau site et très complet. Merci

    RépondreSupprimer
  6. bonjour
    Est-ce qu'un mosfet peut suivre les variations d'un signal arbitraire par exemple ?

    RépondreSupprimer
    Réponses
    1. Bonjour.
      Il faudrait être plus clair dans votre demande, surtout, de quel signal (fréquence, amplitude) s'agit-il ?

      Supprimer
    2. Disons de 1Hz à 1KHz sous 1 à 10 V d'amplitude et de façon à obtenir des courants très faibles (0,5mA)

      Supprimer
    3. Tout dépend du MOSFET. Avec une tension de gate de 1V, peu de modèles seront passants, je dirais même pratiquement aucun. A 10V, quasiment tous le seront. Le plus simple est d'essayer, pour voir si l'effet désiré est obtenu.

      Supprimer