samedi 17 août 2019

Un Logger Analogique et Digital




Un Logger Analogique et Digital


Cela faisait un moment que j'avais en tête la réalisation d'un voltmètre / ampèremètre capable d'enregistrer l'évolution d'une ou plusieurs tensions ou courants continus, et éventuellement de sorties digitales.

Comme je suis en ce moment bien occupé par l'étude d'un chargeur de batterie NI-MH, je sens que cet outil capable de tracer une courbe de charge ou de décharge de batterie devient de plus en plus indispensable.

Le but n'est pas simplement de créer un outil spécifique à la charge des batteries mais plutôt un outil assez générique de surveillance de tensions, courants et de sorties digitales.

Il ne s'agit pas non plus de fabriquer un oscilloscope avec une bande passante de plusieurs MHz.
L'ADC de l'ARDUINO est peu rapide et ne le permettrait pas.
Un ADC ADS1115 16bits est utilisé pour apporter plus de précision, mais il est encore moins rapide.

Il ne s'agit pas non plus de fabriquer un analyseur logique. Cette fonction sera mieux assurée par un outil spécialisé, par exemple un clone Saleae Logic.

Mais par contre, moyennant l'écriture de sketches plus ou moins simples nous serons capable de relever des variations de tension et de courant, de les enregistrer et de les traiter ensuite avec un tableur ou un script.
Il sera également possible d'agir en fonction des valeurs de tension et courants lues, et de prendre des décisions en fonction de simples signaux logiques.

1. Les besoins

Commençons par établir la liste des besoins :

Lorsque l'on charge une batterie, le voltmètre / ampèremètre doit avoir au moins 3 entrées :
  • tension de la batterie
  • tension aux bornes de la résistance de mesure de courant
  • tension de l'alimentation du chargeur
Il enverra ses données à un PC par sa liaison USB. Celui-ci enregistrera les valeurs sous forme de fichier CSV et les affichera sous forme de courbes.

Le fichier CSV pourra être exploité de la manière la plus adéquate :
  • calcul de moyennes, valeurs minimale et maximale
  • calcul de puissance, de capacité
  • affichage de graphes
  • etc.

Le logiciel PC d'affichage de la courbe devra disposer de quelques facilités comme le zoom, l'enregistrement d'image, etc.

1.1. Cas d'utilisation

Plusieurs cas d'utilisation peuvent se présenter :
  • surveillance de tensions
  • surveillance de courants
  • décharge de batterie
  • charge de batterie
1.1.1. Surveillance de tensions
Pour mesurer les tensions on pourra utiliser les entrées analogiques de l'ATMEGA328p, mais pour des mesures plus précises, je compte utiliser un ADS1115.

Il est absolument indispensable de ne pas dépasser 5V sur les entrées de l'ARDUINO et de l'ADS1115.
Si les tensions à surveiller sont supérieures à 5V il faudra intercaler un ou plusieurs pont diviseurs entre les sources de tension à mesurer et les entrées analogiques.
On pourra même ajouter des diodes zener de protection 4.7V ou des transils.

Cet ADC 16bits permet de mesurer des tensions faibles et possède un amplificateur à gain variable :
  • gain = 000 : 6.144V à pleine échelle
  • gain = 111 : 0.256V à pleine échelle
La surveillance est activée par l'appui sur un bouton START. Le montage envoie les valeurs de tension en mV (en virgule flottante) au PC qui les enregistre.
Le buzzer peut être utilisé pour signaler la fin de la mesure si celle-ci se déroule sur une longue période. Un bouton STOP permet de couper le buzzer.
Il peut être intéressant d'ajouter une fonction d'alerte tension trop basse ou tension trop haute.

1.1.2. Surveillance de courants
La surveillance d'un courant se fait à l'aide d'une résistance shunt en série avec la charge, aux bornes de laquelle on mesure la tension.

L'ADS1115 16bits permet de mesurer des courants faibles aux bornes d'un shunt de faible valeur.
De plus l'amplificateur à gain variable de l'ADS1115 permet d'adapter la sensibilité au courant à mesurer :
Pour un courant de 200mA dans un shunt de 1Ω on obtiendra 200mV aux bornes du shunt. Si le PGA est réglé au maximum, on aura 256mA à pleine échelle, et donc 256mA / 65536 = 4µA de sensibilité.

Si le courant à mesurer est très faible ou si l'on désire une sensibilité plus élevée on pourra intercaler un amplificateur :
  • un INA138 suivi d'un AOP suiveur
  • un INA213
  • un INA219 ou INA226 sur bus I2C
Remarque : la résistance shunt est placée en low-side (côté GND).
Voir plus loin :  6.1. Surveillance de tension et courant.
L'ADS1115 est capable de mesurer une tension différentielle. Cette méthode requiert deux entrées. Dans ce cas, la résistance shunt peut être placée en high-side (côté VCC).

1.1.3. Surveillance de sorties digitales
La surveillance de signaux logiques se fera à l'aide des entrées digitales de l'ARDUINO. Attention certaines ne sont pas libres. Voir le schéma plus bas.

1.1.4. Décharge de batterie
La décharge d'une batterie doit se faire à travers une résistance et doit être stoppée quand la tension atteint une certaine valeur : 1V par élément pour une batterie NI-MH par exemple.

La décharge est activée par l'appui sur un bouton START. Elle commence en faisant débiter à la batterie un courant important (C / 3 par exemple). Lorsque la tension limite est atteinte, on continue la décharge avec un courant inférieur (C/10 par exemple). Lorsque la tension limite est à nouveau atteinte, la décharge est stoppée.

On peut à ce moment émettre un son à l'aide d'un buzzer. Un bouton STOP permet de couper le buzzer.

1.1.5. Charge de batterie
La charge est activée par l'appui sur un bouton START. Pendant celle-ci, il faut surveiller la tension et le courant de charge, et éventuellement la tension d'alimentation du chargeur. Pendant la charge, on fait clignoter une LED.

Il faut surveiller l'indication fin de charge qui est souvent une LED connectée sur une sortie du chargeur, dans le cas d'un MAX712 par exemple.

Le buzzer peut être utilisé pour signaler la fin de charge. Un bouton STOP permet de couper le buzzer.

1.1.5. Évènements et actions
On voit déjà que l'ARDUINO, en toute autonomie, peut réagir à certains événements :
  • appui sur un bouton
  • dépassement de tension ou de courant
  • détection d'un niveau logique
  • etc.
Il pourra engager des actions correspondant à ces événements :
  • actionner le buzzer
  • allumer la LED
  • envoyer un ordre au PC
  • etc.
Un tas de possibilités en perspective.

1.1.6. Performances
L'ADS1115 n'est pas un foudre de guerre. Il pourra fournir 860 échantillons par seconde.
L'ARDUINO, quant à lui, environ 8900, et même 38000 moyennant un petit effort de codage :
https://riton-duino.blogspot.com/2018/11/arduino-les-performances-de-ladc.html
Paragraphe 3. Augmenter la vitesse

Quant aux entrées digitales, elles peuvent être écrites ou lues en 4 à 5µS.

1.1.7. Inventaire
A partir de ces besoins et constats on peut déjà établir une petite liste de matériel :
  • un ARDUINO
  • un ADC précis (16 bits): ADS115 par exemple
  • deux relais
  • un buzzer
  • deux boutons
  • une LED
On peut compléter les possibilités en ajoutant quelques connecteurs utiles sur les entrées / sorties digitales et analogiques de l'ARDUINO.

Un montage du type shield à enficher sur un ARDUINO UNO serait assez pratique, pour peu que l'on ait l'espace suffisant pour placer tout ce matériel.

Une carte ARDUINO MEGA offirait encore plus de possibilités.

Les entrées et sorties utilisent des connecteurs de ce type :

Sur ces connecteurs on enfiche des fils DUPONT, éventuellement  terminés par des grip-fils si l'on veut prendre des points de mesure sur les composants d'une carte :

On pourrait aussi utiliser des barrettes mâles avec des fils DUPONT femelle, mais les connecteurs DUPONT femelle sont peu fiables. Je ne les recommande pas.

1.1.4. Alimentation
Le montage sera alimenté en 5V pour plusieurs raisons :
  • L'ADS1115 peut être alimenté entre 2V et 5.5V
  • la plupart des circuits de charge peuvent être alimentés en 5V
5V conviendront donc à tous les composants.
 

2. Le schéma

Comme on le voit sur cette image, les principaux connecteurs de la carte UNO sont reportés sur le montage, et le logiciel peut les utiliser à sa convenance.
Le montage comporte deux relais, mais il est possible d'en connecter d'autres sur les sorties digitales.

Les relais FINDER-36.11.9.005.4011 peuvent être remplacés par des SONGLE SRD-05VDC-SL-C ou des JQC-3F-5V QIANJI ou BESTEP, relais chinois bien connus.

Attention : les relais statiques provoquent une chute de tension non négligeable. Il faut bien lire les datasheets et déterminer si cette chute de tension est nuisible ou pas.

La LED est  branchée sur la sortie D13, en parallèle donc sur celle de la carte ARDUINO, car si l'on réalise ce montage sous forme de shield, la LED de la carte sera cachée.
Par contre elle fonctionne en logique inverse : 0 pour allumer, 1 pour éteindre.

3. La réalisation

Différentes solutions sont possibles pour réaliser ce montage :
  • réalisation d'un PCB shield pour une carte UNO ou MEGA
  • réalisation d'un PCB pouvant accueillir une carte NANO
  • utilisation d'un shield prototype du commerce
  • montage volant avec des modules du commerce
La réalisation d'un PCB n'est pas forcément à la portée de tout un chacun, et c'est pour cette raison que d'autres solutions sont proposées.

3.1. Le PCB shield maison

Principe de précaution : Voici un moyen simple de voir si un shield maison va s'enficher sur la carte prévue :


Imprimer sur papier, percer les pastilles avec une pointe, placer les connecteurs et enficher le tout sur la carte. Gagné, ça tombe bien en face !


On peut aussi placer les composants principaux. En haut à droite on peut voir que les deux boutons sont  suffisamment espacés pour pouvoir être manipulés sans avoir des doigts de fée. La carte a été légèrement allongée dans ce but.

Voici une photo de la réalisation finale, enfichée sur une carte UNO :


Une petite étiquette sur chaque connecteur pour s'y retrouver plus facilement (O pour "normally Open", C pour "normally Closed") :


Je bricole pas mal avec des batteries, et la solution du shield m'a paru la plus pratique, mais cela impose de réaliser un PCB. Pour une utilisation plus ou moins occasionnelle il y a plus simple.

3.2. Le shield prototype

On peut facilement utiliser un shield prototype du commerce à 2€ pour faire la même chose :
Je doute que la petite breadboard puisse contenir la totalité des composants mais la carte prototype à souder a de bonnes chances d'y parvenir. Par contre les relais prévus ne pourront pas être utilisés. Il faudra les remplacer par des relais 5V de petite taille au pas de 2.54mm :
Relais HF7520-005 HONGFA
Si l'on a besoin de courants faibles des relais REED de 1A seront suffisants :

Ces relais, s'ils ont une consommation de bobine inférieure à 20mA, n'auront même pas besoin de transistor de commande.
Exemples :
  • CELDUC D71A2100 (5V, 1A, courant de bobine 10mA)
  • RAYEX ELECTRONICS R2-1A05 (5V, 1A, courant de bobine 10mA).
  • etc.
Certains modèles intègrent la diode de roue libre.

3.3. Le montage volant

On peut également envisager un montage volant avec des modules tout faits branchés sur les connecteurs de la carte ARDUINO :

Il existe même des modules boutons et buzzer actif :
Dans le cas d'un montage volant, la LED utilisée dans le logiciel sera celle de la carte (sortie D13). La seule différence par rapport à la version shield est qu'elle est câblée au +5V et qu'elle fonctionnera à l'envers.
Si l'on trouve cela trop perturbant, rien n'empêche d'en ajouter une comme sur le schéma.

Enfin, on pourra même utiliser une carte NANO ou MEGA, ce que l'on a sous la main.

4. La partie logicielle

Récupérer la repository complète : https://bitbucket.org/henri_bachetti/usb-analog-logger.git

Cette repositiory contient deux répertoires :
  • arduino : les sketches
  • python : les scripts PYTHON

4.1. Les sketches

Quelques skectches ARDUINO sont fournis :
  • regulator-test.ino : test en charge d'un régulateur
  • battery-discharge.ino : test de décharge de batterie
  • battery-charge.ino : test de charge de batterie
Il est possible d'utiliser un buzzer actif au lieu du buzzer passif :

void beep(int time)
{
  tone(BUZZER, BUZZER_FREQ);
  delay(time);
  noTone(BUZZER);
}

// remplacer par :

void beep(int time)
{
  digitalWrite(BUZZER, HIGH);
  delay(time);
  digitalWrite(BUZZER, LOW);
}

Il est possible d'envisager de regrouper ces sketches en un seul, et de lancer la fonction voulue sur réception d'une commande venant du PC.

4.2. Le logiciel PC

Le logiciel côté PC permet d'afficher les valeurs mesurées sous forme de courbes.
Il est possible d'utiliser au moins deux solutions :
  • un script PYTHON
  • le logiciel Processing
  • toute autre langage, y compris C++, capable de lire une ligne série et d'afficher des courbes
4.2.1 Script PYTHON
C'est la solution que j'ai adopté. L'affichage est réalisé avec MATPLOTLIB.

Si ce n'est pas déjà fait installer python 2.7

Sous UBUNTU ou DEBIAN python2.7 est normalement déjà installé.

Installer les modules PYTHON suivants :
Sous UBUNTU ou DEBIAN c'est simple :

apt-get install python-serial
apt-get install python-matplotlib

Pour l'instant il n'y a qu'un seul script PYTHON : log-voltage-current.py
Il est capable de recevoir des informations de tension et de courant.
Si l'information de courant est absente, une seule courbe sera tracée.

4.3. Exemples

4.3.1. Surveillance de tension et courant
Nous allons tester ici un régulateur en fonction de son courant de sortie. Les deux relais sont utilisés pour commuter des résistances de charge.

Bien entendu les résistances devront être adaptées au courant maximal supporté par le régulateur et devront pouvoir dissiper la puissance demandée.

Voici le schéma de branchement :
La sortie du régulateur est branchée sur l'entrée A0 de l'ADS1115.
Les deux points communs des relais sont connectés sur GND à travers une résistance shunt.
Une résistance de 22Ω est connectée entre la sortie du régulateur et le contact normalement ouvert du relais 1.
Une résistance de 82Ω est connectée entre la d=sortie du régulateur et le contact normalement ouvert du relais 2.
Une résistance shunt de 1Ω permet de mesurer le courant par l'entrée A1 de l'ADS1115.

Et voici le sketch qui va charger le régulateur en trois temps :
  • 1ère phase sans charge
  • 2ème phase avec une charge de 82Ω
  • 3ème phase avec une charge de 22Ω
https://bitbucket.org/henri_bachetti/usb-analog-logger/src/master/arduino/regulator-test/regulator-test/regulator-test.ino

Déroulement :
  • appuyer sur le bouton START pour démarrer
    • le titre est envoyé par la ligne série
    • un beep est émis
    • la LED émet des flashs pendant le test
    • les mesures de tension et courant sont envoyées toutes les secondes
    • il se passe 3 secondes
    • le relais N°1 est activé
    • il se passe 3 secondes
    • le relais N°1 est désactivé
    • le relais N°2 est activé
    • il se passe 3 secondes
    • le relais N°2 est désactivé
Mode opératoire :
Charger le sketch regulator-test.ino dans l'ARDUINO
Côté PC, lancer le script PYTHON log-voltage-current.py

log-voltage-current.py <port> <csvfile>

port : le port USB où est connecté l'ARDUINO
csvfile : nom du fichier csv à générer

L'ARDUINO redémarre. Attendre quelques secondes.

Appuyer sur le bouton START.
Le script affiche sur la console les mesures reçues.

Au bout de 9 secondes le sketch envoie STOP au script PYTHON et celui-ci affiche la courbe obtenue :


On peut sauvegarder la courbe en .png en cliquant sur l'icône disquette.
Le fichier csv est chargeable dans Excel ou OpenOffice Calc.

4.3.2. Décharge de batterie
Nous allons tester ici une décharge de batterie NI-MH 3.6V ou LITHIUM-ION 3.7V. Les deux relais sont utilisés pour commuter des résistances de charge.

Bien entendu les résistances devront être adaptées au courant maximal supporté par la batterie et devront pouvoir dissiper la puissance demandée.

Attention, certaines batteries NI-MH préfèrent que l'on ne descende pas en desssous de 1.1V par élément.
Ce sketch fonctionnera aussi pour une batterie LITHIUM-ION.

Voici le schéma de branchement :
Ce montage permet de vider une batterie en un minimum de temps. Si l'on veut simplement relever une courbe de décharge, il suffit d'utiliser un seul relais dans le sketch, ou de relier les deux contacts NO ensemble en éliminant la résistance inutile.

La batterie est branchée entre GND et l'entrée A0 de l'ADS1115. Les deux points communs des relais sont connectés sur GND.
Une résistance de 22Ω est connectée entre la borne + de la batterie et le contact normalement ouvert du relais 1.
Une résistance de 82Ω est connectée entre la borne + de la batterie et le contact normalement ouvert du relais 2.

Après plusieurs essais sur breadboard (et ses faux contacts) j'ai fait un petit montage sur plaquette à pastilles, bien plus fiable et rapide à câbler. Le connecteur DUPONT mâle 6 points vient s'enficher sur le connecteur P5 de la carte. Un petit jumper permet de doubler le courant de décharge :


Et voici le sketch qui va vider la batterie NI-MH en deux temps :
  • 1ère phase à C / 3
  • 2ème phase à C / 10
https://bitbucket.org/henri_bachetti/usb-analog-logger/src/master/arduino/battery-discharge/battery-discharge.ino

Déroulement :
  • appuyer sur le bouton START pour démarrer
    • le titre est envoyé par la ligne série
    • un beep est émis
    • le relais N°1 est activé
    • la LED émet des flashs pendant toute la décharge
    • les mesures de tensions sont envoyées toutes les 2 secondes
    • lorsque la tension chute à 3V
      • le relais N°1 est désactivé
      • le relais N°2 est activé
      • la tension remonte à environ 3.2V
    • lorsque la tension chute à nouveau à 3V
      • le relais N°2 est désactivé
      • le buzzer émet un beep toutes les secondes
      • le bouton STOP arrête le buzzer
Mode opératoire :

Charger le sketch battery-discharge.ino dans l'ARDUINO
Côté PC, lancer le script PYTHON log-one-voltage.py

log-voltage-current.py <port> <csvfile>

port : le port USB où est connecté l'ARDUINO
csvfile : nom du fichier csv à générer

L'ARDUINO redémarre. Attendre quelques secondes.

Appuyer sur le bouton START.
Le script affiche sur la console les mesures reçues.

Lorsque la batterie est déchargée, le sketch active le buzzer et envoie STOP au script PYTHON et celui-ci affiche la courbe obtenue :


La batterie utilisée était presque vide : 3.9V. On voit bien la première descente jusqu'à 3V, ainsi que la seconde.
On peut sauvegarder la courbe en .png en cliquant sur l'icône disquette.
Le fichier csv est chargeable dans Excel ou OpenOffice Calc.

4.3.3. Charge de batterie
Avec un sketch différent nous allons pouvoir tester une charge de batterie NI-MH 3.6V ou LITHIUM-ION 3.7V.

Voici le schéma de branchement :
Ce montage permet de relever la courbe de charge d'une batterie.
Il faut pouvoir prendre deux points de mesure sur la carte chargeur :
  • résistance shunt de mesure du courant
  • LED de charge 
Sur le chargeur que j'utilise la résistance shunt est placée côté GND (low-side).
Le sketch envoie les mesures de tension en soustrayant de la tension batterie la tension aux bornes du shunt.
Si cette résistance est placée côté high-side, le sketch devra être adapté.

Le signal CHARGE est à 0 pendant la charge, à 1 lorsque la charge est terminée.

Voici le sketch qui va permettre de surveiller la charge :

https://bitbucket.org/henri_bachetti/usb-analog-logger/src/master/arduino/battery-charge/battery-charge.ino

Déroulement :
  • brancher la batterie sur le chargeur
  • appuyer sur le bouton START pour démarrer
    • le titre est envoyé par la ligne série
    • un beep est émis
    • la LED émet des flashs pendant toute la charge
    • les mesures de tensions sont envoyées toutes les 2 secondes
    • lorsque l'entrée D5 tombe
      • le buzzer émet un beep toutes les secondes
      • le bouton STOP arrête le buzzer
Mode opératoire :

Charger le sketch battery-charge.ino dans l'ARDUINO
Côté PC, lancer le script PYTHON log-one-voltage.py

log-voltage-current.py <port> <csvfile>

port : le port USB où est connecté l'ARDUINO
csvfile : nom du fichier csv à générer

L'ARDUINO redémarre. Attendre quelques secondes.

Appuyer sur le bouton START.
Le script affiche sur la console les mesures reçues.

Lorsque la batterie est chargée, le sketch active le buzzer et envoie STOP au script PYTHON et celui-ci affiche la courbe obtenue :
On peut sauvegarder la courbe en .png en cliquant sur l'icône disquette.
Le fichier csv est chargeable dans Excel ou OpenOffice Calc :


Voici un graphe OpenOffice de la fin de charge.

5. Téléchargements

Pour télécharger le projet : https://bitbucket.org/henri_bachetti/usb-analog-logger.git
  
Cette page vous donne toutes les informations nécessaires :
https://riton-duino.blogspot.com/p/migration-sous-bitbucket.html

6. Conclusion

Cet outil est évolutif et mes premières impressions sont bonnes. L'ADS1115 n'est pas un ADC rapide mais il est très précis.
Voilà qui va me permettre de relever des courbes de charge et de décharge de batterie, et bien d'autres choses, avec plus de facilité.


Cordialement
Henri

7. Mises à jour

18/08/2019 : corrections de bugs et améliorations
21/08/2019 : 4.3.3. Charge de batterie

dimanche 4 août 2019

Alimentations sans transformateur


Alimentations sans transformateur


Nous allons dans cet article élaborer une alimentation secteur régulée sans transformateur.
Il ne s'agit pas d'intégrer un module à découpage, mais bien de produire une tension continue très basse tension à partir du 230V.

Nous allons parler d'alimentation par chute de tension capacitive. Ce principe est largement utilisé dans les appareils électroménagers.

Pour cela nous allons partir d'un cas concret. Nous allons essayer d'alimenter un montage comportant les composants suivants :
  • un ARDUINO
  • un module radio
  • un relais
Cela ressemble à un relais connecté non ?

1. La théorie

Il est possible de faire chuter une tension alternative trop élevée simplement à l'aide d'un condensateur.
Un condensateur a une impédance (appelée aussi réactance) que l'on peut calculer comme ceci :

X = 1 / (2 * Pi * F * C)

F : 50Hz
C : capacité en Farad

Si nous alimentons une charge consommant un courant I, sous 230V en 50Hz on peut calculer la capacité nécessaire :

C = I / (2 * 3.14 * 50 * (230 - U))

I : courant
U : tension d'alimentation désirée

2. La sécurité

Imaginons qu'une charge est alimentée directement sur le secteur 230V à travers un condensateur :

A priori, si l'on ne prend pas la précaution de vérifier si la charge est connectée coté neutre ou côté phase, il y a une chance sur deux pour que l'on risque une électrocution si l'on touche l'un des deux pôles de la charge.

Recommandation essentielle avant d'aller plus loin : lorsque l'on met sous tension un montage connecté au secteur sans transformateur d'isolement, on risque sa vie si l'on y touche.

Deuxième recommandation : il est absolument hors de question de connecter un câble USB entre un PC et un ARDUINO alimenté de cette manière. Pour charger le logiciel, il faudra couper le secteur.
Ou alors il faudra utiliser un convertisseur USB / série avec optocoupleurs. Voir ici : https://softsolder.com/2010/01/13/arduino-serial-optical-isolator/

Troisième recommandation : afin de garantir que le condensateur ne se mettra pas en court-circuit, celui-ci devra être du type polypropylène X2 :
https://riton-duino.blogspot.com/2019/07/lutilisation-des-condensateurs.html
Voir :  2.5. Condensateur de filtrage et anti-parasitage secteur

3. Le courant consommé

Quel courant peut-on consommer sur ce type d'alimentation ?

On voit bien d'après la formule précédente que la valeur du condensateur sera proportionnelle au courant consommé.

Pour une tension de 5V et 1A nous obtiendrons :

C = I / (2 * 3.14 * 50 * (230 - U))
C = 1 / (2 * 3.14 * 50 * (230 - 5)) = 14µF

Or un condensateur de 14µF X2 va être très difficile à trouver.
Cela pose également un problème de coût et de taille : un condensateur X2 de 10µF coûte au minimum 2.50€ et a une dimension de 40x30x45mm.

Autant opter pour un module à découpage :


Un module MeanWell 5V 1A coûte moins de 7€ et a des dimensions plus intéressantes : 45.7x25.4x21.5mm.


Un module HI-Link 5V 600mA coûte moins de 3€ et a les dimensions suivantes : 34x20x15mm.

3.1. Réguler

La tension sur la charge va dépendre du courant consommé. Il est rare que le courant consommé par nos montages à microcontrôleur soit constant.

Il va donc falloir réguler cette tension :
Si nous utilisons un régulateur, quel qu'il soit, la tension à son entrée ne devra pas dépasser une certaine valeur.
Plus le courant consommé sur sa sortie sera faible, plus la tension à son entrée augmentera.

3.2. Limiter la tension

Pratiquement, la solution la plus simple est de limiter la tension à l'entrée du régulateur par une diode zener.

On s'aperçoit très vite des limites de notre alimentation :
  • courant limité
  • variations de courant limitées

3.3. Choix d'un relais

On s'aperçoit également très facilement que si l'on désire alimenter un relais il va falloir s'orienter vers un modèle consommant peu.
Les relais 5V ne conviendront pas. Ils ont une résistance de bobine trop faible : 125Ω par exemple, ce qui produirait un courant de 40mA.
Un relais 12V ayant une résistance de bobine de 700Ω absorberait un courant de 17mA.

Nous choisiront plutôt un relais 24V, qui aura une résistance de bobine largement supérieure : 3KΩ par exemple, ce qui produira un courant de 8mA, largement plus acceptable.

Pour commander un relais 24V à partir d'un microcontrôleur 5V ou 3.3V voir ici : https://riton-duino.blogspot.com/2018/08/alimenter-un-relais-transistor.html
Paragraphe 3. Piloter un relais 12V ou plus

4. Le schéma

Version L78L33

Cette alimentation propose deux sorties :
  • une sortie 24V pour un relais
  • une sortie 5V ou 3.3V pour un microcontrôleur
Sur ce schéma nous avons ajouté :
  • un pont redresseur double alternance
  • un condensateur de filtrage
  • une diode zener 24V
  • un régulateur 5V ou 3.3V et son condensateur de stabilisation
La résistance R1 permet de décharger le condensateur quand la tension secteur disparaît.
La résistance R2 limite le courant de charge du condensateur C2 lorsque celui-ci est déchargé (mise sous tension) afin de protéger le pont de diodes.
Dans cet exemple elle permet de limiter la pointe de courant à :

I = 230 * 2 / 68 = 4.8A

Le moindre pont de diodes 1A supporte aisément des pointes de 40A. Nous sommes donc largement à l'abri d'un claquage du pont de diodes.
Bien entendu celui-ci devra également supporter nos 24V.

La puissance supportée par cette résistance sera faible. Pour une alimentation délivrant 30mA :

P = 68 * (0.030²) = 60mW

La résistance R3 abaisse la tension à l'entrée du régulateur. Voir plus loin :
4.5. Le régulateur

Revenons sur notre montage à alimenter :
  • un ARDUINO
  • un module radio
  • un relais 24V
L'ARDUINO sera de préférence un modèle basse consommation : PRO MINI 8MHz alimentée en 3.3V.
Le module radio restera en mode réception.
Le relais sera activé ou non, en fonction des ordres reçus.

On pourrait aussi utiliser une carte PRO MINI 16MHz alimentée en 5V et fournir au module radio une alimentation 3.3V à l'aide d'un régulateur supplémentaire.

Rappel : si l'ARDUINO est bel et bien alimenté en 3.3V ou 5V avec ce genre d'alimentation, le potentiel présent sur ses broches ou celles de tout module ou composant présent sur le montage - relais y compris - peut être mortel.

4.1. Bilan de consommation

Nous pouvons en déduire une consommation typique :
  • ARDUINO : 6mA
  • module radio : 12mA
  • relais : 8mA
Nous avons besoin au maximum de 26mA au total.
Le courant consommé minimal sera de 18mA (ARDUINO + radio)

La diode zener a besoin d'un courant minimal pour pouvoir assurer son rôle. Quelques mA suffisent : 4mA.

Cela nous conduit a adopter un courant maximal de 26 + 4 = 30mA.

Quel que soit le courant consommé par le montage, le condensateur C1 laissera toujours passer 30mA.
Cela veut dire que la consommation de cette alimentation est constante, quelle que soit la consommation du montage qu'elle alimente.
Cela veut dire également que le courant non consommé par le montage passera dans la diode zener. Il faut la dimensionner correctement.

Voyons comment calculer tout cela.

4.2. Calcul du condensateur

Calculons la valeur du condensateur C1 :

C1 = 0.030 / (2 * 3.14 * 50 * (230 - 3.3)) = 420nF

Une valeur standard de 470nf sera choisie.
Attention, la capacité d'un condensateur X2 est donnée avec une tolérance de +/-10% à +/-20%. Prenez de la marge.

La réactance du condensateur aura comme valeur :

X = 1 / (2 * Pi * F * C) = 1 / (2 * 3.14 * 50 * 470nF) = 6775Ω

Le courant traversant le condensateur ne pourra jamais excéder :

I = U / X = 230 / 6775 = 34mA

Si ce courant est dépassé, le courant dans la zener deviendra nul, la tension à ses bornes chutera, mais le régulateur assurera encore sa fonction, tant que sa tension d'entrée ne se rapproche pas trop de sa tension de sortie :

Ue = Us +Udo

Ue : tension d'entrée
Us : tension de sortie
Udo : tension de drop-out du régulateur

4.3. Puissance de la diode zener

Quelle puissance devra supporter la diode zener ?

Si le montage consomme 26mA (relais activé), la zener devra supporter la différence : 30mA - 26mA = 4mA.
Si le montage consomme 18mA (relais non activé), la zener devra supporter la différence : 30mA - 18mA = 12mA.

La puissance de la zener sera calculée comme suit :
P = U * I = 24V * 12mA = 288mW

Une BZX55C24 supportant 500mW devrait suffire.

Si par exemple le module radio n'était pas alimenté en permanence, le montage au repos consommerait moins : les 6mA de l'ARDUINO

La zener devrait supporter la différence : 30mA - 6mA = 24mA.

La puissance de la zener devra être supérieure :
P = U * I = 24V * 24mA = 576mW

Une BZX85C24 supportant 1.3W serait plus appropriée.

4.4. Le filtrage

Le condensateur de filtrage C2 doit être dimensionné. Nous allons admettre 1V d'ondulation (Vo) :

C2 = I / (Vo * F * 2) = 0.030 / 100 = 300µF

I : 0.030A
Vo : 1V
F : 50Hz

Remarque : un redressement double alternance par pont de diodes a été choisi afin de pouvoir diminuer la valeur de C2, d'où la multiplication par deux de la fréquence.

Les condensateurs électrolytiques vieillissent plus rapidement s'il sont traversés par un courant important. Ici le courant est proportionnel à l'ondulation.

Dans la datasheet d'un condensateur comme le Nichicon UVR1V471MPD on voit que l'ondulation (ripple) ne doit pas dépasser 1V à 120Hz.
Nous choisirons une valeur standard de 470µF pour ramener cette ondulation en dessous de 1V.

4.5. Le régulateur

4.5.1 Choisir un régulateur a faible courant de repos
Un HT7333 capable de fournir 250mA, supportant 30V en entrée et consommant 4µA, ou un HT7533 (100mA, 24V, 2.5µA) sont de bons choix.

Avec un classique L78L33, celui-ci consommant 6mA au repos (quel glouton !), nous serons obligés d'en tenir compte et de les ajouter à nos 30mA :

C1 = 0.036 / (2 * 3.14 * 50 * (230 - 3.3)) = 506nF

Nos 470nF ne suffisent plus dans ce cas. On adoptera donc 560nF ou 680nF.

Pour obtenir une tension de 5V, choisissiez plutôt un HT7350 ou un L78L05.

Vous pouvez faire d'autres choix : https://riton-duino.blogspot.com/2018/11/les-regulateurs-ldo.html

Le régulateur va dissiper quelque peu, surtout avec une différence de tension entre entrée et sortie importante. Le courant qu'il fournit est de 18mA ((ARDUINO + radio)) :

P = (Us - Ue) * I = (24V - 3.3V) * 0.018 = 372mW

4.5.2 Limiter la tension à l'entrée du régulateur
Tous les régulateurs ne supporteront pas cette puissance. Un boîtier TO220 n'aura pas de problème à la dissiper, par contre un TO92 aura du mal. S'il entre en protection, diminuons sa tension d'entrée comme ceci :
Avec une résistance R3 de 1KΩ la chute de tension sera de :

UR3 = 18mA * 1KΩ = 18V

Il restera 24V - 18V = 6V en entrée du régulateur, ce qui est plus que suffisant, même pour un L78L33.

Avec un régulateur 5V adoptez plutôt une valeur moins élevée : 820Ω.

Prévoyez une résistance d'1/2W. Elle ne doit pas être soudée au ras du PCB, mais plutôt à 1cm de celui-ci afin de faciliter la dissipation.

4.5.3 Utiliser un régulateur supportant moins de 24V
Comme nous avons fortement abaissé la tension en entrée nous pourrons choisir un régulateur supportant largement moins de 24V, sans toutefois se rapprocher trop près de 6V. On trouve beaucoup de régulateur supportant 12V.
Notre choix s'élargit.

4.5.4 Protéger le régulateur
Si la charge en sortie est débranchée la tension va augmenter à son entrée.
Si l'on veut éviter tout problème pendant les manipulations, on peut mettre en parallèle sur C3 une zener de 8 à 12V :
Protection du régulateur par une zener : D3
La tension de la zener doit être inférieure à la tension supportée en entrée par le régulateur.

4.5.5 Condensateur de stabilisation
Les condensateurs C3 et C4 seront choisis en consultant la datasheet du régulateur.

4.5.6 Récapitulatif
Voici un petit tableau résumant les composants à utiliser en fonction du régulateur :

Régulateur C1 C3 C4 R3 D3
L78L33 560nF 330nF 100nF 1KΩ
HT7333 470nF 10µF 16V 10µF 6.3V 1KΩ
HT7533 470nF 10µF 16V 10µF 6.3V 1KΩ 12V
LM2936-3.3V 470nF 100nF 22µF 6.3V 560Ω
MCP1702-3.3V 470nF 1µF MLCC 1µF MLCC 560Ω 8.2V
L78L05 560nF 330nF 100nF 820Ω
HT7350 470nF 10µF 16V 10µF 6.3V 820Ω
HT7550 470nF 10µF 16V 10µF 6.3V 820Ω 12V
LM2936-5V 470nF 100nF 10µF 6.3V 560Ω
MCP1702-5V 470nF 1µF MLCC 1µF MLCC 560Ω 8.2V

Le LM2936 n'assure pas sa fonction de régulation avec une résistance R3 supérieure à 560Ω.

Attention : le brochage des HT7333 et HT7533 est différent :


4.6. Le rendement

Le rendement de cette alimentation est plutôt faible.
La puissance utile totale est de :

Sur le 3.3V :

P = U * I = 3.3 * 18mA = 59mW

Sur le 24V :

P = U * I = 24 * 8mA = 26mW

La puissance consommée totale est de :

P = U * I = 24 * 30mA = 720mW

Les pertes sont donc de 694mW lorsque le relais est au repos, et de 635mW lorsque le relais est activé.
Il est à noter que la majeure partie des perte sont situées au niveau de la résistance R3.
Le montage ne devra pas être enfermé dans un boîtier étanche, dans une boîte encastrée ⌀67 pour cloison sèche par exemple.

Rendement comparatif d'un module à découpage
Si nous avions à réaliser ce montage à partir d'un module MeanWell 5V 1W, nous utiliserions un relais 5V, et nous aurions le même régulateur 3.3V pour l'ARDUINO et le module radio.

L'ARDUINO + module radio consomme 18mA :

P = U * I = 5 * 18mA = 90mW

Sur le 5V le relais consommerait 40mA de plus :

P = U * I = 5 * 58mA = 290mW

Le rendement de l'alimentation MeanWell est de 70% et les pertes sans charge de 75mW.

Les pertes seraient de :

Relais au repos :

P = 90 * 30% + 75 = 102mW

Relais activé :

P = 290 * 30% + 75 = 162mW

Le rendement serait donc nettement supérieur avec un module à découpage.

L'échauffement global serait moindre également : 192mW relais au repos et 452mW relais activé.
Alors qu'il sera systématiquement de 720mW avec notre alimentation sans transformateur, car la consommation est constante.

4.7. La critique

On pourrait reprocher à cette alimentation de ne pas disposer de la protection habituelle par fusible + varistance.

A y regarder de plus près on s'aperçoit vite que c'est totalement inutile :
  • le condensateur X2 est censé (c'est normalement garanti et testé) ne pas se mettre en court-circuit
  • étant donné le courant consommé (30mA), il serait difficile de trouver un fusible approprié
  • quelque soit le courant consommé sur l'alimentation celui-ci sera limité par le condensateur : 34mA comme on l'a calculé en 4.2
  • si la zener venait à se mettre en court-cicuit par exemple, le courant traversant le condensateur n'excéderait pas cette valeur

5. Les tests

Rappel : pour tester ce montage en toute sécurité, à partir du moment où celui-ci est sous tension, on ne doit pas y mettre les doigts.

5.1. Test en charge au repos

Une résistance de 180Ω est connectée sur la sortie 3.3V afin de simuler la présence d'un microcontrôleur et d'un module radio (ou autre).
Elle absorbe donc 18mA.

La tension aux bornes de la zener et de C2 est de 26.8V
La tension en sortie de régulateur est de 3.28V

Rappel : dans ces conditions la zener absorbe 30ma - 18mA = 12mA
Cela correspond à une puissance de 288mW.

Elle est légèrement chaude, ce qui est parfaitement normal.

Rappel : on ne met pas les doigts sur la zener pour vérifier sa température. On débranche le secteur d'abord.

5.2. Test à pleine charge

Une résistance de 3KΩ est connectée sur la sortie 24V afin de simuler l'activation d'un relais 24V ayant une résistance de bobine élevée.

La tension aux bornes de la zener et de C2 tombe à 25.3V

Rappel : dans ces conditions la zener absorbe 30ma - 26mA = 4mA
Cela correspond à une puissance de 96mW.

Elle doit donc être beaucoup plus froide.

6. Conclusions

Première remarque : la tension aux bornes de la zener varie. C'est normal étant donné que le courant qui la traverse n'est pas constant.
On aurait d'ailleurs pu se contenter d'une zener de 22V.

6.1. Encombrement

Quel encombrement aura cette alimentation ? Voici un exemple d'implantation :


Sa taille sera d'environ 46x22x17mm. Le condensateur X2 occupe beaucoup d'espace.
Il est possible de diminuer la hauteur à 11mm en plaçant les condensateurs C1 et C2 horizontalement, au prix d'une augmentation de la surface.
A noter : la résistance R1 de 1MΩ est implantée sous le condensateur X2. Celui-ci le permet car il est creux sur une hauteur de 5mm.

A noter également : si l'on intègre cette alimentation à un PCB équipé d'autres composants, le connecteur P1 sera présent de toutes façons (y compris si l'on utilise un module à découpage) et le connecteur P2 à 3 broches devient inutile.
Au final, cette alimentation occupera un peu moins de place qu'un module à découpage.

On peut en faire un module intégrable sur breadboard (38x22mm) :



6.2. Prix

Quel est son prix ?
  • condensateur X2 470nF : 0.22€
  • pont de diodes 1A / 80V B40D : 0.22€
  • 2 résistances 1/4W : 0.01€
  • 1 résistance 1/2W : 0.01€
  • zener 24V 1.3W : 0.05€
  • régulateur HT7333 : 0.05€
  • condensateur 10µF 16V : 0.10€
  • condensateur 10µF 6.3V : 0.13€
Hors PCB cette alimentation coûtera donc : 0.79€ !
Les prix, sauf ceux du régulateur, sont ceux relevés sur le site de mon fournisseur : TME.
En se fournissant sur AliExpress, son prix sera encore inférieur.
Un condensateur X2 de 470nF sur AliExpress vaut une douzaine de centimes, un pont de diodes 1A DB107 : 4 centimes.
Je vous laisse imaginer le prix total ...

6.3. Intégration à un PCB

Outre son prix ridicule, quel est l'intérêt final de cette alimentation ?

Elle est particulièrement avantageuse dans le cas où l'on désire produire un PCB regroupant tous les composants :
  • alimentation
  • microcontrôleur
  • module radio ou autre
  • relais miniature
  • connecteurs
Il serait assez ridicule de développer un module regroupant les composants de l'alimentation afin de l'intégrer ensuite à un PCB. Nous allons donc placer tous les composants sur le PCB final.

Les composants de l'alimentation seront placés dans ce cas à notre convenance, en fonction des autres composants, et également en tenant compte des contraintes mécaniques :


Ce PCB comprend un microcontrôleur , un module NRF24L01, un relais et quelques petits composants. Il est destiné à être logé dans un boîtier rail DIN de largeur 35mm (2 modules) :

Attention ce n'est qu'un brouillon pour l'exemple. Ce PCB est une étude de faisabilité. Il n'est présenté qu'en tant qu'illustration, rien de plus, mais il est plutôt représentatif. Je ne pense pas qu'il manque grand chose pour qu'il soit opérationnel.
En utilisant des composants CMS (transistor, résistances), il serait même possible de réduire encore sa taille.

Comme on le voit, il y a quelques contraintes :
  • le boîtier n'a pas la même hauteur sur toute sa surface (16.5mm, 33mm, 47mm)
  • il y a des trous de fixation pour le PCB. Il serait bien qu'au moins un de ces trous reste accessible
  • il y a des trous de passage de tournevis pour les borniers
Le condensateur X2 fait 18mm de haut. Il doit être placé là où la hauteur le permet. Il ne peut être implanté en horizontal (il serait trop large)
Mêmes remarques pour le condensateur C2 de 470µF 35V.

Le relais HONGFA HF7520 a une hauteur de 11mm. On peut le placer où bon nous semble.
Idem pour les borniers.

Le NRF24L01 est placé sur un connecteur 8 points. Il est placé trop haut pour passer sous la barre des 16.5mm.

L'ATMEGA328 est placé sous le NRF24L01, de préférence pas sous l'antenne de celui-ci.

Sur le PCB les trous de fixation, en bas du condensateur X2 et à droite du transistor PN2222, sont libres. Il reste même un peu de place !

On ne réussirait pas à placer une alimentation Meanwell IRM-03 ou une Hi-Link PM03 sur ce PCB, sauf si l'on adopte un boîtier de largeur 52mm (3 modules).

Dans ce cas, une alimentation sans transformateur apporte bien des facilités de mise en place.
Le fait qu'elle ne soit pas isolée du secteur n'a pas d'importance car elle est enfermée dans un boîtier plastique.

6.3.1. Ventilation
Comme on l'a vu plus haut (4.6. Rendement), la puissance dissipée totale du montage est de 720mW.
Rappel : la résistance R3 d'1/2W ne doit pas être soudée au ras du PCB, mais plutôt à 1cm de celui-ci afin de faciliter la dissipation.

Le boîtier est suffisamment volumineux pour éviter un échauffement excessif, et de plus il possède des languettes amovibles pour l'accès aux borniers. On peut toutes les retirer pour créer une ventilation naturelle :



A titre de comparaison, dans mon coffret électrique j'ai une RASPBERRY PI 1B, qui dissipe normalement 500mW, enfermée dans un boîtier pour rail DIN 70mm. La température du processeur est de 42°, ce qui est largement acceptable.

J'espère que ce petit tour vous aura intéressé et vous sera utile.


Cordialement
Henri

7. Mises à jour

05/08/2019 : ajout résistance de protection du régulateur
                     module intégrable sur breadboard
06/08/2019 : 4.6. Le rendement
                     6.3.1. Ventilation
07/08/2019 : 4.5.3 Utiliser un régulateur supportant moins de 24V
                     4.5.4 Protéger le régulateur