mercredi 27 mai 2015

DummyLoad : une charge électronique variable

TL;DR

Comment construire soit-même une charge électronique variable contrôlable par ordinateur, avec des composants de récupération. Bonus: elle est entièrement OpenHardware et OpenSource.
Grâce à cet outil, on peut tester les capacités/performances d'une alimentation, caractériser une batterie, vérifier des circuits de protection (fusibles, PTC) ...

Le besoin

Pour un projet récent, j'ai eu besoin de consommer une quantité pré-définie de courant: 500mA, 750mA, 1A, 2A et ce sous différentes tensions.
Cela est relativement facile à faire. Un rhéostat ou quelques résistances de puissance font l'affaire, une simple application de la loi d'ohm et voila.

un rhéostat de puissance

Par exemple, pour 1A sous 12V :
U= R * I
R = U / I = 12 / 1 = 12 ohm
pour 750mA sous 3.3V :
R = 3.3 / 0.75 = 0,044 ohm

Cela dit, ça devient vite laborieux ! Il serait très pratique de disposer d'un appareil sur lequel régler la consommation en ampère et qui gérerait cela tout seul. C'est ce qu'on appelle une charge électronique (Dummy load).

Le circuit


La 1ère idée qui vient est d'utiliser un LM317 en générateur/consommateur de courant, un circuit simple et facile (bien sur il faut ajouter quelques condensateurs à ce schéma).
Le problème est qu'il nous faut un potentiomètre de puissance, ce qui n'est pas évident à trouver.

C'est la qu'est venu à mon secours Dave Jones et son EEVBlog #102 puisqu'il adresse justement ce problème et propose un circuit. Une bonne occasion pour me remettre en tête le fonctionnement d'un ampli-op ;)
En repartant de son schéma, j'ai réalisé le mien avec le cahier des charges suivant :
  • consommation de 0 à 2A
  • des composants que je possède dans mes tiroirs
  • un contrôle numérique (je n'ai pas de potentiomètre 10 tours dans mes tiroirs)
  • pouvoir le commander depuis l'ordinateur (tant qu'à faire !)
J'ai donc fait le tour et j'ai trouvé à peu prêt tout ce dont j'avais besoin sur place.

Commençons par jeter un œil sur le schéma :
https://github.com/jerome-labidurie/DummyLoad/raw/master/hardware/pdf/DummyLoad.pdf

Évacuons tout de suite le facile :
  • Un arduino nano pour le cerveau. Cela peut paraître très surdimensionné, mais j'y reviendrais dans un prochain article
  • un écran lcd à base de HD44780, on en a toujours un qui traîne pas loin
  • deux boutons poussoirs (up et down) pour l'interface utilisateur
  • comme on va dissiper pas mal de puissance, il va falloir un gros radiateur et peut-être un ventilateur. Dans ce cas, autant lui rajouter un contrôle puisqu'on dispose de plein de PWM sur l'arduino
Passons alors au plat de résistance que constitue le montage avec les 3 amplificateurs opérationnels.

Un PWM arrive de l'arduino (V_SET), celui-ci est d'abord converti en tension continue de 0 à 5V par un montage RC (R3 et C1). Cette tension est ensuite multipliée par 2 grâce au 1er ampli-op (U2A) monté en amplificateur non-inverseur.
En haut le PWM, en bas la tension continue amplifiée (sondes x10)

Cette tension de 0-10V arrive sur l'entrée + d'un montage suiveur (U2B). Celui-ci commande un MOSFET et va faire en sorte que ses entrées + et - soient au même potentiel. On retrouvera donc notre tension d'entrée 0-10V autour de la résistance de puissance R9.
Ici une note s'impose. j'avais prévu une résistance de 1ohm ce qui ferait une intensité théorique de 0 à 10A. C'est beaucoup :) Mais dans mes cartons je n'avais qu'une résistance de 10ohms, ce qui a dicté mon rapport d'amplification de 2 pour pouvoir tirer théoriquement 1A. Je prévois de la remplacer dans un futur proche par une de 1ohm (de ce type)
Enfin, cette tension passe dans un buffer (U3A) et un pont diviseur par 2 (R5 et R7) pour revenir à 0-5V et entrer dans l'arduino (V_SENSE). Ainsi on pourra mesurer la tension aux bornes de R9 et donc l'intensité consommée.

La construction


Commençons par les composants :
  • le MOSFET est un IRFZ44N sorti d'une perceuse dont la batterie est morte. Avec un Vdss de 55V et un Id de 49A il sera largement suffisant
  • la résistance de puissance sort de mon alim ATX transformée qui a cramé récemment :(
  • les amplis-op sont des LM358 dessoudés d'une carte de traitement vidéo qui traîne depuis des années dans mon carton "à récupérer"
  • le ventirad vient d'un vieux PC (sans doute un socket 7 ou un truc comme ça)
  • arduino et lcd : il faut toujours en avoir de rab' :)
  • le boîtier : un vieux stock acheté sur ebay
Le montage est d'abord testé sur breadboard étape par étape jusqu'à ce qu'il soit complètement fonctionnel. Comme cela on vérifie la théorie au fur et à mesure :)
Comme mon boîtier est plutôt petit, je commence par vérifier le placement des différents composants
et je réalise une construction en deux cartes connectées par des pin-headers. Une pour l'interface (lcd et boutons), une pour le cœur du dispositif (arduino et ampli-ops).
Au final, quelques coups de dremel, de perceuse et tout loge dans la boîte.
Pour les boutons, j'ai imprimé dans mon fablab 2 extensions pour les faire dépasser du couvercle.
Note: Sur cette photo, le MOSFET et la résistance ne sont pas encore reliées au radiateur. Il faut bien entendu le faire !

Côté software, rien de bien compliqué. On lit l'état des boutons (avec debounce) et on agit sur le PWM en conséquence. La lecture de la tension réelle se fait via l'entrée analogique 0. Ces 2 valeurs sont affichées sur l'écran de contrôle.

Comme on a un arduino, rien de plus simple que d'ajouter une interface de contrôle par le port série. Ainsi un petit programme (ou un terminal série) permet de positionner la valeur de courant à consommer, de lire la valeur actuelle ...
Si cela vous intéresse, le protocole est décrit la.

Utilisation

C'est très simple :
  1. On branche l'alimentation 12V sur les 2 fiches de côté
  2. On branche l’appareil à tester sur les 2 fiches en façade
  3. On positionne la valeur à consommer
  4. et voila !
Côté consommation maximale, le montage sature à 640mA. À voir ce que ça donnera avec une résistance de 1ohm au lieu de 10ohms.

J'ai fait quelques mesures de température. Loin des règles de l'art ! C'est juste pour avoir une petite idée de la montée en température du ventirad.
Sur la photo, on voit la sonde de t° de mon multimètre S7150 qui part à droite, coincée entre le boîtier et le radiateur.

S7150 (°C)arduino (°C)fanSpeed (0-255)
avant25.7NANA
on
+15min
26.519.42128
12V 200mA
+10min
27.1419.42128
+5min27.2220.24128
12V 500mA
+5min
28.5121.06128
+5min28.6421.06128
fanSpeed 255
+5min
28.2323.52255
12V 640mA
+5min
28.6124.34255
+5min28.7424.34255

De ce petit test sans prétention, j'en déduis que la vitesse de ventilateur à moitié de sa puissance max par défaut semble correcte pour une utilisation normale. J'ai aussi pu vérifier que les composants de puissance sont à peine tièdes au toucher (à partir de 500mA).

Bibliographie

Voici quelques liens qui m'ont servi pendant cette réalisation. On en trouve quantité d'autres.

Merci d'avoir lu jusqu'ici, et à bientôt pour de nouvelles aventures ;)