vendredi 13 décembre 2019

MOSFETs : utilisations inhabituelles



MOSFETs : utilisations inhabituelles


Dans cet article nous allons parler de cas d'utilisation peu habituels de transistors MOSFETs.

Le but n'est pas de refaire un Nième tutoriel sur les MOSFETs utilisés en commutation avec des exemples simplistes, utilisant le plus souvent un MOSFET canal N :
Commande d'un relais 5V
Commande d'un ruban de LEDs

Les tutoriels basiques sur les MOSFETs se trouvent à la pelle.

S'il s'agit d'activer un relais ou un moteur, ce sujet a déjà été discuté ici :
https://riton-duino.blogspot.com/2018/08/alimenter-un-relais-transistor.html

Le but de cet article est plutôt d'explorer quelques situations moins courantes, en particulier l'utilisation de MOSFETs canal P en commutation d'alimentation ou en tant que diode idéale.

1. Recommandation

Lorsque l'on dessine des schémas comportant des MOSFETs il est important de choisir des symboles schématiques adaptés, incluant la diode inverse du composant.
Cela permet de mieux visualiser les chemins de passage possibles pour le courant, en fonction des tensions présentes.

2. Le MOSFET en commutation d'alimentation

Commençons par la plus simple des utilisations, et la plus habituelle.

Lorsque l'on veut commuter une alimentation on utilise un MOSFET canal P comme ceci :

2.1. Fonctionnement

Un MOSFET canal P entre en état de conduction si l'on applique une tension négative suffisante entre grille et source.
Négative ne veut pas dire négative par rapport au 0V, mais négative par rapport à la tension sur la source. Donc un ZÉRO volts est considéré comme négatif si l'on prend comme référence la tension sur la source.

Il suffit donc d'appliquer un ZÉRO volts sur l'entrée de commande P1 pour que le transistor Q1 conduise, et une tension de 5V sera présente sur la sortie.

La tension de sortie sera égale à la tension d'entrée, légèrement inférieure en fait, en fonction de la résistance RDSon du MOSFET et du courant.

Afin de pouvoir être commandé par une tension inférieure à 5V, le MOSFET sera du type logic-level. Sa tension de grille VGSth doit être de préférence inférieure à 3V.

Ici le transistor AOI403 a une résistance RDSon de 12mΩ pour une tension VGS de 5V et un courant de 20A.

Voir ici : https://riton-duino.blogspot.com/2019/01/mosfets-de-puissance.html

2.2. Explications

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 (la grille se comporte comme un condensateur). 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.

Pourquoi ne pas utiliser un transistor PNP ?
Parce qu'un transistor PNP entraînerait une chute de tension plus importante qu'un MOSFET.

Pourquoi ne pas utiliser un MOSFET canal N ?
Parce qu'un MOSFET canal N réclamerait une tension VGS positive pour entrer en état de conduction, 9V par exemple.

2.3. Limitations

Ce montage comporte un inconvénient. Si l'on applique une tension de 5V sur la sortie, même si le MOSFET est coupé, la diode interne laissera passer le courant vers l'entrée.
Cela peut être gênant par exemple si la tension d'entrée est une batterie ou un panneau solaire, et que la tension de sortie est fournie par défaut par un bloc secteur :

Dans cet exemple si la tension de 5V est présente, même si le MOSFET est coupé, la batterie recevra un courant provenant du 5V, à travers la diode interne. Ce courant n'étant pas maîtrisé, cela peut être dangereux pour la batterie.

3. Le MOSFET en montage inversé

3.1. Fonctionnement

La diode interne du MOSFET laisse passer le courant de l'entrée vers la sortie, mais elle a une tension de chute directe importante.
Appliquer un ZÉRO volts sur l'entrée de commande P1 fait entrer le transistor Q1 en état de conduction et comme il a une résistance RDSon faible, permet de réduire la chute de tension due à la diode.

3.2. Explications

Un MOSFET est bidirectionnel. Le courant passe aussi bien de la source vers le drain que dans le sens inverse.
Au départ la tension sur la source est égale à la tension de drain, moins quelques centaines de millivolts (chute de tension de la diode). La source est donc à un potentiel permettant d'obtenir une tension VGS importante si la grille est commandée par un niveau bas.

3.3. Avantages

Une diode Schottky SR540 5A par exemple provoquerait une chute de tension importante :
Pour 0.5A
Vf = 220mV
Pour 2A :
Vf = 300mV

Un MOSFET du type AOI403, avec ses 12mΩ de résistance provoquera une chute plus faible :

Pour 0.5A
Vf = 12mΩ x 0.5A = 6mV
Pour 2A :
Vf = 12mΩ x 2A = 24mV

Lorsque l'on a affaire à des tensions d'alimentation faibles (3.3V, 3.7V, 5V), c'est loin d'être négligeable.

Outre le fait que ce montage permette de gagner quelques centaines de millivolts en sortie, il permet également de dissiper beaucoup moins de calories qu'une simple diode.

Lorsque l'on a affaire à un courant de 1A, 0.25V de chute de tension dans une diode entraîne une puissance de 0.25W à dissiper.
Avec 10A, la chute de tension sera de 0.6V, la puissance sera de 6W, ce qui nécessite un dissipateur assez conséquent, et l'utilisation d'une diode en boîtier TO220 :


Le MOSFET n'aura qu'une puissance faible à dissiper :

P = R x I² = 12mΩ x 10² = 1.2W

Le dissipateur sera beaucoup plus petit et il est fort probable que souder le drain sur un plan de cuivre de quelques cm² suffise.

3.4. Limitations

Ce montage ne se comporte pas comme un interrupteur, puisque lorsque le MOSFET est coupé, le courant passe par la diode.
De plus, comme le transistor est conducteur dans les deux sens, si le MOSFET est en état de conduction et que l'on applique une tension sur la sortie et que cette tension est supérieure à celle de l'entrée, le courant passera en direction de l'entrée.

Cette technique est cependant utilisée comme semi diode commandée à faible chute de tension dans certains montages, mais le circuit se comporte comme une vraie diode seulement dans le cas où le MOSFET est coupé :

Le circuit ci-dessus remplace celui-ci :

4. Le MOSFET en montage dos à dos (back to back)

4.1. Fonctionnement

Les diodes internes des MOSFETs ne laissent pas passer le courant de l'entrée vers la sortie, ni dans le sens inverse, car elles sont montées tête-bêche.
Appliquer un ZÉRO volts sur l'entrée de commande P1 permet de rendre les transistors Q1 et Q2 passants.

4.2. Explications

Au départ la tension sur la source de Q1 est égale à la tension de drain, moins quelques centaines de millivolts (chute de tension de la diode). La source est donc à un potentiel permettant d'obtenir une tension VGS importante si la grille est commandée par un niveau bas.
A partir du moment ou Q1 est en état de conduction, la tension sur la source de Q2 est également à un potentiel permettant d'obtenir une tension VGS importante si sa grille est commandée par un niveau bas.

La résistance RDSon du transistor est doublée bien entendu.

Contrairement au montage précédent Ce montage se comporte comme un interrupteur, puisque lorsque le MOSFET est coupé, le courant ne passe pas par les diodes.

4.3. Limitations

Comme dans le montage précédent, si les MOSFET sont en état de conduction et que l'on applique une tension sur la sortie et que cette tension est supérieure à celle de l'entrée, le courant passera en direction de l'entrée.

5. Le MOSFET en diode parfaite

5.1. Driver à pompe de charge

Ici un MOSFET canal N est utilisé, commandé par un LTC4357, qui permet de fournir à la grille du MOSFET une tension supérieure à sa tension de source grâce à une pompe de charge (élévateur de tension).
Lorsque la tension de drain est supérieure à la tension de source, le LTC4357 coupe le MOSFET.

On obtient donc un circuit équivalent à une diode idéale, dont la chute de tension dépend uniquement de la résistance RDSon du MOSFET.

Certains circuits permettent d'utiliser des MOSFETs canal N en high-side, ce qui offre un choix beaucoup plus large. D'autres permettent de piloter des MOSFETs canal P.
Un bon nombre de ces composants intègrent le MOSFET.

Attention à la tension d'alimentation.
Un LTC4357 devra être alimenté entre 9V et 80V, un LTC4353 se contentera de 2.9V à 18V.

Analog Devices propose un choix de drivers de MOSFETs assez large, Texas Instruments également.
Ces circuits sont relativement chers et existent seulement en CMS.

Cela va du simple driver de diode idéale à des petits monstres fort sympathiques comme le LTC3118 :  sélection automatique de deux sources de puissance, avec convertisseur DC/DC BUCK BOOST intégré (sortie=2A) :

https://www.analog.com/cn/technical-articles/18v-buck-boost-converter-with-intelligent-power-path-control.html

5.2. Diode idéale maison

Cette solution provient de cette page :
https://www.electro-tech-online.com/articles/simple-inexpensive-ideal-diode-mosfet-circuits.817/

Sur ce schéma un MOSFET canal P est utilisé, ainsi qu'un miroir de courant.
Si VIN est supérieure à VOUT, cela déséquilibre le miroir et grâce à la différence entre les tensions d'émetteur Q3 est bloqué. La grille du MOSFET se retrouve à un potentiel proche de 0V à travers la résistance R2, et celui-ci entre en conduction.

Si VOUT est supérieure à VIN, Q3 devient passant et la grille du MOSFET se retrouve à un potentiel proche de VOUT, et se trouve donc bloqué.

Ce circuit marche parfaitement pour une tension VIN de 3.3V. Par contre VOUT ne devra pas dépasser 3.3 + 5V, 5V étant la tension VBE inverse du 2N3906.

Je l'ai essayé. Il provoque une chûte de tension de 40mV pour un courant de 500mA. Dans les mêmes condition une très bonne diode Schottky du type SR540 (5A) provoquerait une chûte de 320mV, donc 8 fois plus importante.

ATTENTION : les deux transistors doivent être appairés pour que le circuit fonctionne correctement. Leur tension VBE doit être identique à quelques millivolts près.
Il est facile de trouver dans le même lot de transistors deux exemplaires qui conviennent. Les deux premiers que j'ai choisi dans le tiroir satisfaisaient ce critère (2mV de différence).
Voici un petit outil bon marché et très précis, bien utile pour tester :

https://riton-duino.blogspot.com/2019/12/testeur-de-composants-le-gm328.html

Sinon on peut acheter des DMMT3906W, doubles 2N3906 appairés (CMS), à un prix très abordable.

Pour tester le circuit une tension de 3.3V est appliquée sur VIN et une tension de 5V est appliquée sur VOUT toutes les secondes, pendant 500ms. Une charge de 10Ω est branchée sur VOUT :


En jaune : On voit bien que VOUT varie entre 3V et 5V.
En bleu : VIN varie entre 3.3V et 3V.

La chute de tension (3V au lieu de 3.3V) n'est pas due à un défaut du circuit, mais au fait que lorsque l'alimentation branchée sur VOUT est actionnée elle fournit tout le courant à la charge, et l'alimentation branchée sur VIN ne débite rien.
Quand l'alimentation branchée sur VOUT est coupée, l'alimentation branchée sur VIN débite 300mA dans la charge, ce qui fait chuter la tension, à cause des fils de section 0.5mm2 et 50cm de long que j'ai utilisé.

La conception de ce genre de circuit implique de dimensionner correctement les pistes de circuit imprimé et le câblage, sinon les pertes seront importantes.

5. Conclusion

J'espère que ce petit article aura fait germer quelques idées et pourra vous éviter certaines erreurs.


Cordialement
Henri

6. Mises à jour

12/03/2020 : correction schéma diode idéale

mercredi 11 décembre 2019

Testeur de composants : le GM328




Testeur de composants : le GM328


Vous avez peut-être remarqué chez les revendeurs chinois ce petit testeur de composants à 10€, sans avoir osé l'acheter, en vous disant : gadget, "pas assez cher mon fils".

Sachez que vous vous trompez lourdement.

Tout d'abord, même s'il est vendu principalement en chine, il ne s'agit pas d'un projet chinois mais allemand, lancé à l'origine par Markus Frejek, et repris par Karl-Heinz Kübbeler.

Il s'agit d'un instrument de mesure très élaboré et plutôt précis. Il a des possibilités intéressantes :
  • résistances (maxi 50MΩ, résolution 0.01Ω)
  • capacités (25pF~100mF, résolution 1pf)
    • résistance série (ESR)
    • perte de tension après charge
  • inductances (0.01mH~20H)
    • résistance série
  • transistors bipolaires
    • détection NPN, PNP, affichage du brochage
    • gain
    • tension Vbe (au millivolt près)
  • transistors JFET, MOSFET
    • détection canal N, canal P, affichage du brochage
    • tension VGSth
    • résistance RDSon
    • capacité grille
    • tension Vf de la diode inverse
  • diodes, diodes doubles, LEDs
    • tension directe Vf 
    • courant de fuite inverse
  • thyristors
  • générateur de fréquence (1H-2MHz)
  • générateur PWM
  • voltmètre 50V
Il suffit d'insérer le composant et d'appuyer sur le bouton pour qu'il reconnaisse immédiatement son type.

On peut l'alimenter avec un bloc secteur 7V à 12V.

Les résultats sont affichés sur un petit TFT 160x128 :


Les images ci-dessous proviennent de : http://www.walkingitaly.com/radio/RADIOSITO/MANUALI/19685.pdf

Inductance
Capacité
Diode
Transistor
Mosfet
Double résistance ou potentiomètre

La précision de ce testeur dépend en grande partie de celle des résistances  employées, en général 1%.

Utilisé en tant que simple ohmmètre, il n'est pas d'une précision extraordinaire. Un ANENG AN870 à 30€ fera mieux (0.3%). L'écart de mesure entre le GM328 et le AN870 est en général de 0.5%.
Le capacimètre est d'une précision tout à fait acceptable. Les mesures sont à 1% près identiques à celles de mon Voltcraft VC870.

Par contre ces mêmes multimètres n'afficheront pas la résistance série d'un condensateur (ESR), ni sa perte en tension après charge, ni la résistance d'une inductance. Le GM328 sait le faire.

Le test de transistors (MOSFETs en particulier) est son principal atout. Il permet d'afficher des caractéristiques qui seront difficilement mesurables avec un multimètre.

Il permettra également, très rapidement, d'appairer deux transistors NPN ou PNP grâce à un affichage précis du gain et de la tension VBE au millivolt près.

Si l'on désire mesurer la tension VBE avec précision, il vaut mieux faire la mesure plusieurs fois, car la température du transistor va augmenter très légèrement pendant le test, même si le courant de collecteur reste très faible.

Pour les fans du fer à souder, il existe des kits à monter soi-même (appelés M8) :

Il existe même des version avec LCD deux lignes :

Une version sur batterie LITHIUM (LCR-TC1) :


Ce testeur est rechargeable à l'aide d'un connecteur µUSB. La recharge est automatique : LED bicolore rouge / verte.

Pour mesurer de gros composants il vaut mieux ajouter deux grip-fils :

Voici la documentation utilisateur (et de conception) :

https://raw.githubusercontent.com/svn2github/transistortester/master/Doku/tags/english/ttester_eng112k.pdf

Le firmware (code source) :

https://github.com/Mikrocontroller-net/transistortester

Il existe de nombreuses études et tutoriels sur le sujet :

https://www.instructables.com/id/AVR-Transistor-Tester/

https://hackaday.com/2015/04/24/review-transistor-tester/

https://dragaosemchama.com/en/2019/04/gm328a-reverse-engineering-new-firmware-and-tetris/

http://www.walkingitaly.com/radio/RADIOSITO/MANUALI/19685.pdf

Je vous laisse explorer.


Cordialement
Henri

dimanche 8 décembre 2019

100000




100000



Quand j'ai démarré ce blog en Janvier 2018 je ne pensais pas toucher un public aussi large en même pas deux ans.

Ce soir 100000 vues ont été atteintes.

J'espère avoir encore longtemps la force de vous apporter toute l'aide nécessaire dans vos projets.

Merci à vous et bonnes bidouilles ...



A la bonne vôtre.
Henri

samedi 7 décembre 2019

Microscope MusTool G600






Microscope MusTool G600


Je vous présente le petit dernier arrivé dans mon atelier : le microscope électronique Mustool G600 :
  • grossissement 1-600X
  • affichage: 4.3 pouces OLED 1920x1080
  • batterie au lithium intégrée: autonomie 6H
  • carte µSD
  • prix : une trentaine d'euros
Le but de cet outil est de déchiffrer la sérigraphie souvent minuscule de certains composants CMS (on n'a plus vingt ans).
Les photos suivantes ont été réduites à 800x450, les originaux font 1920x1080 :

INA226
Oscillateur 12MHz
Transistor SS8050
MOSFET SI2301DS
Condensateur tantale 100µF
Régulateur ARDUINO MINI
Régulateur ARDUINO PRO MINI
Comme on peut le voir sur les images la sérigraphie de certains petits composants ne correspond pas à leur référence exacte. Il faut souvent faire une petite recherche sur internet pour trouver la datasheet, quelquefois sans résultat.

On peut bien entendu s'aider du G600 pour faire des travaux de soudure :


Pour illustrer, sur cette photo le composant est un régulateur SOT-23, la panne est une pointe fine (il en existe de plus fines encore) et la soudure est du fil de 0.5mm. Avec du 0.25mm ce sera encore plus facile.
Bien entendu, dans un pareil cas, il ne faut pas grossir 600 fois, l'objectif du microscope  est à 10cm de la carte.

On peut l'utiliser pour vérifier un circuit imprimé DIY :


Bien que cela ait peu d'intérêt pour mon utilisation, le microscope est capable de prendre des clichés et des vidéos.
Il suffit de choisir le mode à l'aide du bouton MODE (vidéo par défaut) et d'appuyer sur OK.
On peut ensuite brancher un câble mini-USB sur l'appareil et récupérer les fichiers sur la carte µSD.
Ne pas utiliser pas le câble USB fourni avec le chargeur, car c'est un câble de charge uniquement.

Il peut arriver que le G600 se fige au bout d'un certain nombre de prises de vue. Il y a un bouton de RESET (4) :


Quelques exemples de photographies :

Poussière
Poussière
Mousse (feuilles)
Mousse (fleur)


Cordialement
Henri

mardi 3 décembre 2019

Alimentation 3.7V Numérique



Alimentation 3.7V Numérique


Dans la vie d'un concepteur de montages alimentés par batterie LITHIUM-ION ou LIPO il n'est pas rare d'avoir besoin de faire des tests en faisant varier la tension de la batterie.

Généralement on se débrouille avec une alimentation de laboratoire. Le danger de dépasser la tension maximale supportée par le montage n'est pas négligeable, surtout avec mon alimentation qui ne possède pas de bouton de réglage fin. De plus elle est très imprécise dans la plage des tensions faibles < 5V.

Il serait préférable d'utiliser une alimentation limitée à 4.2V, la tension maximale d'une batterie chargée à 100%.
Descendre en dessous de 3V n'est pas très utile, car il est déconseillé de laisser une batterie LITHIUM se décharger en dessous de cette tension.

L'alimentation étudiée dans cet article est numérique. la tension de sortie est réglable grâce à un encodeur rotatif, par pas de 50mV, et d'un écran OLED :


Elle est également pilotable par la ligne série depuis un terminal, ou un logiciel maison.

Ce projet requiert une expérience assez moyenne en développement électronique, et le logiciel n'est pas difficile à comprendre.
Différents sujets matériels et logiciels sont abordées :
  • utilisation d'un régulateur ajustable
  • utilisation d'un DAC (Digital to Analog Converter)
  • mesure de tensions continues
  • utilisation d'une référence de tension externe (TL431)
  • utilisation d'un encodeur rotatif
  • utilisation d'un écran OLED
  • réception de commandes simples par la ligne série (shell)
Dans la première partie, le sujet régulation est traité. Ceux qui seraient seulement intéressés par une alimentation réglable toute simple peuvent éviter la suite.

1. La régulation

Lorsque l'on conçoit une alimentation réglable le schéma le plus couramment utilisé est de ce type :
Ce schéma utilise un LM317, régulateur ajustable pouvant délivrer 1.5A.

Avec une résistance R2 de 330Ω la tension de sortie sera de :

VMIN = VREF x (1 + R2 / R1) + (IADJ× R2)
VMIN = 1.25 × (1 + 330 ÷ 240) + (0.000050 × 330) = 2.98V

Si l'on adopte une résistance R2 de 580Ω (notre résistance de 330Ω + un potentiomètre de 250Ω) la tension de sortie maximale sera de :

VMAX = 1.25 × (1 + 580 ÷ 240) + (0.000050 × 580) = 4.29V

Un potentiomètre de 250Ω ne se trouve pas facilement. On pourra utiliser un modèle 470Ω + une résistance de 470Ω ou 510Ω en parallèle :

Le LD1085, pouvant délivrer 3A, pourra être utilisé en lieu et place du LM317. Il faudra remplacer les condensateur C1 et C3 par des condensateurs de 10µF / 10V.

Voilà pour la partie analogique. Comme on le voit, avec quelques calculs basiques, il est assez simple de concevoir une alimentation réglable.
Un autre article traite du sujet "alimentations à transformateur" pour ceux qui désireraient ajouter les composants nécessaires pour obtenir une alimentation à brancher directement sur le secteur :
https://riton-duino.blogspot.com/2019/01/alimentation-transformateur.html

2. La version numérique

Il est possible de remplacer le potentiomètre par un composant numérique : soit un potentiomètre numérique, soit un DAC (Digital to Analog Converter).

Il semble plus logique d'utiliser un potentiomètre numérique puisqu'il vient directement remplacer notre potentiomètre RV1 du schéma précédent.
Mais un potentiomètre ne fait que convertir le courant qui le traverse en tension, tension qu'un DAC sera capable de produire aussi facilement.

Les potentiomètre numériques les plus précis ont 256 pas, mais malheureusement leur résistance est souvent de 10KΩ, très loin des 250Ω requis.
On trouve des modèles 8 bits (256 pas) de 1KΩ (AD8400), pour un peu plus de 3€, mais un DAC MCP4725 12 bits aura une résolution supérieure. De plus on le trouve sous forme de module pour moins d'1€ :
Cette différence de prix est compréhensible. Un potentiomètre numérique est censé laisser passer des signaux alternatifs. Il est adapté à l'audio (l'AD8400 a une distorsion de 0.015%). La complexité de  ce composant est sans commune mesure avec celle d'un DAC 12 bits, qui est un simple convertisseur numérique / analogique.

Il nous faudra bien entendu piloter le DAC à l'aide d'un microcontrôleur.

Quel est le but ? il n'est pas simplement de se compliquer la vie. Les avantages sont multiples :
  • on peut utiliser un encodeur rotatif à la place du potentiomètre
  • un ordinateur peut également piloter l'alimentation à distance
  • comme on dispose d'un processeur, on peut ajouter :
    • un afficheur
    • des entrées de mesure analogique
    • des entrées / sorties digitales
Les possibilités sont nombreuses, en particulier en matière de test automatisé.

Avec un tel outil il devient possible de tester un dispositif d'alimentation en pilotant l'alimentation depuis un PC avec un logiciel adapté, écrit en PYTHON par exemple (voir unittest).
Les entrées analogiques peuvent être utilisées pour vérifier des tensions.
Les sorties digitales peuvent être utilisées pour piloter des relais ou des MOSFET ou lire l'état d'une sortie (une LED par exemple).

Si nous avons à tester une carte alimentée par batterie on peut imaginer plusieurs cas de test :
  • fixer la tension batterie à 3.0V, 3.7V ou 4.2V
  • activer une alimentation secteur (relais)
  • vérifier la tension de sortie d'un régulateur
  • vérifier qu'une LED est allumée ou qu'elle clignote
  • etc.
Voici le schéma :
Le schéma est réalisé à l'aide de KICAD.

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

La tension d'entrée est fournie par une alimentation 7.5V, 9V ou 12V.

Il est possible d'utiliser un LM317 (1.5A) ou un LD1085 (3A). Dans le cas où le LM317 est choisi, les condensateurs C1 (100nF) et C4 (1µF) sont nécessaires, sinon le LD1085 devra être accompagné de C9 et C10 (10µF).
Le brochage des deux régulateurs est identique.

Le LM317 a une tension de drop-out de 3V. La tension d'entrée sera de préférence supérieure à 7.5V.
Le LD1085 a une tension de drop-out de 1.3V. La tension d'entrée pourra être inférieure : 6V suffiront.
Le dissipateur est un ML97/1.5 de 4.3°C/W. Il devrait suffire pour dissiper une douzaine de watts.
Dans le cas du LD1085, la tension d'entrée ne devra pas dépasser 7V, car si l'alimentation est réglée sur 3V et débite 3A la puissance sera élevée :

P = (7V - 3V) * 3A = 12W

Dans le cas du LM317 la tension maximale sera de 11V :

P = (11V - 3V) * 1.5A = 12W

Bien entendu si le courant débité est faible, on pourra utiliser une tension d'entrée supérieure :
  • LD1085 : maximum 30V
  • sinon : maximum 35V (limite du LM78L05)
Un petit afficheur OLED I2C 128x32 permet d'afficher la tension de sortie.

La carte ARDUINO NANO et le DAC peuvent être alimentés soit par un cordon USB soit par le régulateur U6 LM78L05.

Le DAC utilisé est un MCP4725 12 bits.

Un encodeur rotatif permet de faire varier la tension manuellement par pas de 50mV.

Enfin, la liaison USB de l'ARDUINO peut être utilisée pour piloter l'alimentation :
  • sélection de la tension de sortie
  • lecture de la tension de sortie
  • lecture d'une entrée analogique
  • sélection du mode (entrée ou sortie) des entrées / sorties digitales
  • lecture d'une entrée digitale
  • écriture d'une entrée digitale
Les 5 entrées analogiques sont atténuées par les résistances R6 à R15 (ponts diviseurs 10KΩ + 2KΩ). La tension d'entrée ne devra pas excéder 15V.

Une référence de tension 2.5V TL431 est utilisée. La référence 5V serait trop dépendante de la tension USB ou de celle du régulateur LM78L05.
Quant à la référence interne 1.1V et sa précision de 10%, je l'ai écartée.
Si l'on a pas l'intention d'utiliser un TL431, on peut malgré tout utiliser la référence 5V ou 1.1V, mais il faudra adapter le code et les ponts diviseurs.

3. Le matériel

Les composants suivants sont utilisés :
  • 1 carte ARDUINO NANO
  • 1 module MCP4725
  • 1 TL431 en boîtier TO92
  • 1 afficheur OLED I2C SSD1306 128x32
  • 1 encodeur rotatif  du type ALPS EC11E
  • 1 LM78L05
  • régulation :
    • un LM317
    • un condensateur polyester de 100nF
    • un condensateur MLCC de 1µF
  • ou
    • un LD1085
    • deux condensateurs de 10µF 10V ou 16V
  • 1 résistance de 240Ω 1%
  • 1 résistance de 270Ω 1%
  • 7 résistances de 10KΩ 1%
  • 5 résistances de 2KΩ 1%
  • 1 résistance de 1KΩ
  • 4 condensateurs polyester de 100nF
  • 1 condensateur polyester de 470nF
  • 2 connecteurs 2 broches au pas de 2.54 NS25 ou KF2510
  • un condensateur de 10µF 10V ou 16V
  • 1 connecteur DUPONT femelle 6 broches au pas de 2.54
  • 1 connecteur DUPONT femelle 10 broches au pas de 2.54
  • 1 dissipateur TO220 du type ML97/1.5 (L42xl25xH38)
L'encodeur est un modèle made in china très courant : AliExpress

On peut également utiliser des connecteurs DUPONT 2 broches en lieu et place des connecteurs NS25. Attention au sens de branchement, car le détrompeur des NS25 sera absent.

4. La réalisation

Comme il s'agit d'une réalisation sans trop de complexité, en exemplaire unique, j'ai réalisé la carte à l'aide d'une plaquette à pastilles 120mm x 80mm (voir photo plus bas).
Dans le dossier kicad un routage est disponible dans le cas où un PCB est souhaité.
Le routage est également utile si l'on utilise une plaquette à pastilles, pour réaliser le câblage à partir d'une image à l'écran, ou d'une impression.

5. IDE ARDUINO

Il faudra installer les bibliothèques ARDUINO suivantes :
Librairie SSD1306 : https://github.com/greiman/SSD1306Ascii.git
Librairie MCP4725 : https://github.com/adafruit/Adafruit_MCP4725.git 

Dans l'IDE, dans le menu "Outils/Type de Carte" choisir "Arduino Nano". Dans le menu "Outils/Processeur" choisir "ATmega328p" ou "ATmega328p (old bootloader)".

6. Le code

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

L'encodeur est géré à l'aide d'un code source personnel, inspiré de ce celui-ci :

https://www.instructables.com/Improved-Arduino-Rotary-Encoder-Reading/ 

Je n'ai fait que le transformer en classe C++.

Je n'ai pas réussi à faire fonctionner l'encodeur made in china avec les librairies Encoder ou Rotary. Un click générait plusieurs incrémentations / décrémentations.

7. Utilisation

7.1. Réglages

Il faut avant tout mesurer la tension de référence sur la broche AREF de la NANO, et reporter la valeur de VREF dans le code (ligne 32).

Ensuite il faut régler les tensions basse et haute :
  • tourner l'encodeur jusqu'à ce qu'il affiche 3.00V
  • appuyer sur le bouton
  • l'afficheur affiche la tension réelle
  • ajuster la valeur OUTPUT_MIN (ligne 15). Un point vaut environ 1.2mV.
  • recommencer jusqu'à obtenir une tension réelle de 3.00V

  • tourner l'encodeur jusqu'à ce qu'il affiche 4.20V
  • appuyer sur le bouton
  • l'afficheur affiche la tension réelle
  • ajuster la valeur OUTPUT_MAX (ligne 16)
  • recommencer jusqu'à obtenir une tension réelle de 4.20V
Bien entendu, si l'on modifie les valeurs de VREF, OUTPUT_MIN ou OUTPUT_MAX, il faut recompiler et recharger de code pour essayer les nouvelles valeurs.
Normalement si l'on utilise des résistances à 1% les valeurs devraient être très proches de celles que j'ai utilisé.

7.2. Réglage manuel

Il suffit de tourner l'encodeur jusqu'à ce qu'il affiche la tension voulue et d'appuyer sur le bouton. L'afficheur affiche ensuite la tension réelle mesurée.

Au démarrage la tension de sortie vaut 3.7V.

7.3. Pilotage par le PC

Le commandes sont entrées à l'aide d'un terminal 115200 baud (le moniteur série ARDUINO par exemple) :
  • VOUT=XX.XX : permet de modifier la tension de sortie (XX.XX = 3V à 4.2V)
  • READ N : permet de lire une entrée analogique (N = 1 à 6). L'entrée N°1 est la sortie de l'alimentation
  • IN N : permet de basculer une GPIO en entrée (N = 1 à 9)
  • OUT N : permet de basculer une GPIO en sortie (N = 1 à 9)
  • GET N : permet de lire une GPIO (N = 1 à 9)
  • SET N : permet de basculer une GPIO à un niveau UN (N = 1 à 9)
  • RESET N : permet de basculer une GPIO à un niveau ZERO (N = 1 à 9)

8. Photos

Voici quelques images de la carte :


De haut en bas et de gauche à droite :
  • les connecteurs d'entrée et de sortie
  • le LM317 et son dissipateur
  • l'ARDUINO NANO
  • le LM78L05
  • le connecteur des GPIOS
  • le connecteur des entrées analogiques
  • le module MCP4725
  • le TL431
  • l'afficheur OLED
  • l'encodeur
la carte est surélevée à l'aide de colonnettes M2.5.

Remarque :
Sur la plaquette à pastilles il est facile de placer l'encodeur à gauche pour les gauchers.

Vue côté connecteurs ANALOG et DIGITAL
Vue côté entrée et sortie

Vue de dessous
Il est facile d'intégrer la carte dans un boîtier en plaçant l'afficheur et l'encodeur en façade et en les reliant à l'aide de quelques fils à la carte.
Avec deux bornes + et - en façade elle ressemblera à une vraie alimentation.

Personnellement j'envisage plutôt une utilisation sur table, avec la carte telle quelle.

10. Essais

Le réglage de la tension est assez précis, de l'ordre +/- 10mV.

Les entrées analogiques 2 à 6 sont moins précises, du fait des ponts diviseurs employés : 10KΩ + 2KΩ au lieu de 10KΩ + 10KΩ pour l'entrée 1, mais la mesure reste tout de même dans une fourchette de +/- 50mV.

On pourrait faire mieux en adoptant des ponts diviseurs 10KΩ + 10KΩ sur les entrées analogiques (résistances R6 à R15), mais cela limiterait la tension à 5V en entrée.
Il suffit ensuite de modifier la constante ANALOG_DIVIDER dans le code (0.5 au lieu de 0.165).

Mais pour mon utilisation je tiens à conserver la possibilité de mesurer des tensions de 12V ou un peu plus.

Passons à la partie communication série entre le PC et l'alimentation.
Voici un script PYTHON permettant de tester la carte :

import unittest
import time
import serial

class Test(unittest.TestCase):

    def sendReply(self, request):
        global ser
        ser.write(request+'\r\n')
        answer = ser.read_until('\n')
        print answer,
        return answer.strip('\r\n')

    def setUp(self):
        pass

    def tearDown(self):
        pass

    def test_power(self):
        print 'setting voltage to 3V'
        answer = self.sendReply('VOUT=3')
        voltage = float(answer)
        self.assertTrue(voltage > 2.97 and voltage < 3.03)
        print 'setting voltage to 3.7V'
        answer = self.sendReply('VOUT=3.7')
        voltage = float(answer)
        self.assertTrue(voltage > 3.67 and voltage < 3.73)
        print 'setting voltage to 4.2V'
        answer = self.sendReply('VOUT=4.2')
        voltage = float(answer)
        self.assertTrue(voltage > 4.17 and voltage < 4.23)

    def test_GPIO(self):
        print 'setting GPIO9 to OUTPUT'
        answer = self.sendReply('OUT 9')
        self.assertEqual(answer, 'OK')
        print 'setting GPIO9 to 1'
        answer = self.sendReply('SET 9')
        self.assertEqual(answer, 'OK')
        print 'getting GPIO9'
        answer = self.sendReply('GET 9')
        self.assertEqual(answer, '1')
        print 'setting GPIO9 to 0'
        answer = self.sendReply('RESET 9')
        self.assertEqual(answer, 'OK')
        print 'getting GPIO9'
        answer = self.sendReply('GET 9')
        self.assertEqual(answer, '0')

    def test_ANALOG(self):
        print 'setting voltage to 3.7V'
        answer = self.sendReply('VOUT=3.7')
        voltage = float(answer)
        self.assertTrue(voltage > 3.67 and voltage < 3.73)
        print 'reading ANALOG1'
        answer = self.sendReply('READ 1')
        voltage = float(answer)
        self.assertTrue(voltage > 3.6 and voltage < 3.8)
        print 'reading ANALOG2'
        answer = self.sendReply('READ 2')
        voltage = float(answer)
        self.assertTrue(voltage > 3.6 and voltage < 3.8)
        print 'reading ANALOG3'
        answer = self.sendReply('READ 4')
        voltage = float(answer)
        self.assertTrue(voltage > 3.6 and voltage < 3.8)
        print 'reading ANALOG4'
        answer = self.sendReply('READ 5')
        voltage = float(answer)
        self.assertTrue(voltage > 3.6 and voltage < 3.8)
        print 'reading ANALOG5'
        answer = self.sendReply('READ 5')
        voltage = float(answer)
        self.assertTrue(voltage > 3.6 and voltage < 3.8)
        print 'reading ANALOG6'
        answer = self.sendReply('READ 6')
        voltage = float(answer)
        self.assertTrue(voltage > 3.6 and voltage < 3.8)

if __name__ == "__main__":
    global ser
    ser = serial.Serial('/dev/ttyUSB1', baudrate=115200)
    ser.timeout = 3
    time.sleep(1)
    ser.read_until('\n') # read boot message
    unittest.main()


Les modules unittest et pyserial sont nécessaires.

'/dev/ttyUSB1' peut être remplacé par 'COMX' sur une machine Windows.

Pour le test les entrées analogique 2 à 6 sont reliées à la sortie de l'alimentation.

Le résultat :

riton@alpha:/mnt/sdc1/riton/projects/3.7v-power-supply/test$ python test.py
setting voltage to 3.7V
3.70
reading ANALOG1
3.69
reading ANALOG2
3.64
reading ANALOG3
3.67
reading ANALOG4
3.67
reading ANALOG5
3.67
reading ANALOG
3.71
.setting GPIO9 to OUTPUT
OK
setting GPIO9 to 1
OK
getting GPIO9
1
setting GPIO9 to 0
OK
getting GPIO9
0
.setting voltage to 3V
3.01
setting voltage to 3.7V
3.69
setting voltage to 4.2V
4.21
.
----------------------------------------------------------------------
Ran 3 tests in 2.130s

OK
riton@alpha:/mnt/sdc1/riton/projects/3.7v-power-supply/test$


PYTHON est un langage extraordinaire si l'on veut bien se donner la peine d'une petite formation.

11. Téléchargements

Pour télécharger le projet :
https://bitbucket.org/henri_bachetti/3.7v-power-supply

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

12. Conclusion

Voilà un petit outil qui va me permettre d'éliminer pas mal de risques liés à l'utilisation d'une alimentation de laboratoire non limitée, et de réaliser des tests poussés sur mes montages alimentés par batterie.


Cordialement
Henri