Arduino Optocoupleur MOSFET TTL...

Bonjour,

Je suis débutant en électronique et j'ai en tête un petit projet, mais j'ai besoin d'aide.

J'ai pas mal d'objets dans mon salon fonctionnant ou se rechargeant en USB/5V et jusque là j'avais un chargeur avec 4 prises usb (2 de 1.2A et 2 de 2.4A). J'ai maintenant 8 objets dont certains nécessitent plus d'un ampère (comme mon chromecast) voir plus de 2 amp (un raspberry pi 3). Je suis donc en train de jongler avec mes 4 prises à chaque fois que j'ai besoin d'un de ces objets.

Bref, j'ai pensé à investir dans un hub usb alimenté, mais puisque ces objets ne fonctionnent pas tous en même temps, j'aimerais concevoir un hub dans lequel chaque port puisse s'allumer et s'éteindre par un interrupteur. Vous me direr que ça existe déjà des hub avec des interrupteurs, mais j'aimerais à terme contrôler chaque interrupteur de cet hub à distance depuis mon canapé (en infrarouge via un arduino par exemple).

Sauf qu'on ne peut pas faire passer plus de 40mA par broche sur un arduino nano (et je ne pense pas beaucoup plus sur un leonardo). Donc en cherchant, je suis tombé sur des projets utilisant des optocoupleurs ou des mosfets, mais à chaque fois c’était pour des tensions supérieures à 5V, alors que j'ai besoin d'une solution pour du 5V mais une intensité pouvant être supérieure à 2A. J'ai vu qu'il existe des mosfet dit TTL qui fonctionnent en 5V en entrée, mais je n'ai pas vu de projet avec du 5V en sortie et je n'ai pas l'impression qu'ils supportent d'aussi "grosses" intensités.

Merci de me dire si vous pensez ce projet réalisable et, si oui, par quel moyen le concrétiser !
Quel élément vous parait être le plus adapté ?
Contrôler un mosfet par prise usb ? Et dans ce cas quel mosfet ? Et faut-il des résistances ?...
Ou utiliser un cousin du ULN2803 (qui est donné pour 50V maxi mais que pour 500mA par sortie) ?..

J'espère avoir été assez clair et j'espère aussi que vous serez assez pédagogue !!
Je ne vous demande pas de me macher le travail, mais au moins me mettre sur une bonne piste parce que, malgré google, je cale un peu...
Et merci d'avance pour votre patience ...

Pour commander une charge à la demande : alimenter-un-capteur-la-demande

J'ai vu qu'il existe des mosfet dit TTL qui fonctionnent en 5V en entrée, mais je n'ai pas vu de projet avec du 5V en sortie et je n'ai pas l'impression qu'ils supportent d'aussi "grosses" intensités.

Pour un choix de MOSFETs : mosfets-de-puissance

Par exemple un IRLZ44N supporte 47A. J'espère que cela suffira :slight_smile:

Dans ce cas, utiliser un MosFet canalP permet de couper le 5V et de garder la masse commune.

Utiliser un transistor bipolaire (PNP) est exclu, la perte à ses bornes est trop importante. Et le ULN2800 est pire car les transistors principaux ne sont pas saturés. Il n'y a quasiment que la solution du Mosfet.

J'ai pas mal d'objets dans mon salon fonctionnant ou se rechargeant en USB/5V et jusque là j'avais un chargeur avec 4 prises usb (2 de 1.2A et 2 de 2.4A).

Je rappelle qu'il s'agit d'une alimentation et d'un chargeur. Garder une masse commune n'a aucun intérêt.

Remarque ultra importante :
Le courant max dans une sortie de micro d'architecture avr n'a jamais été 40 mA : c'est une énorme connerie qui circule toujours et encore sur le net.

La réalité est beaucoup plus complexe ce qui fait que sauf cas particulier on ne fourni pas de puissance avec une sortie de microcontoleur.

Pour les avr deux nombres sont absolument à retenir (mais il y en a d'autres) :

  • courant max de service sur une sortie Imax = 20 mA et à ce courant un micro alimenté sous 5V ne pourra pas donner plus de 4,6V en sortie.
  • courant max sur Vcc ET/OU sur Gnd = 200 mA tout courants confondus y compris l'alimentation du micro.

Pour d'autres architectures, comme ARM c'est soit équivalent soit largement moins comme sur la DUE.

Remarque "de détail" :
Un uln s'utilise en mode saturé. Un uln est un montage Darlington : ce qui signifie que du coté de l'entrée on voit deux Vbe et du coté de la sortie on voit 1 Vce sat
Voir tuto sur le transistor bipolaire et Mosfet simplifié.

Également :

voir plus de 2 amp (un raspberry pi 3)

Tout dépend de ce qui est branché sur les connecteurs USB de la RASPBERRY PI.
La carte seule consomme 800mA.
Si l'on branche un disque dur ou un autre périphérique consommateur, il faut ajouter sa consommation propre.

Pour cette application je verrais donc bien 8 MOSFETs :

Ces deux MOSFETs sont "logic level" et offrent une résistance RDSon extrêmement faible.
Leur boîtier est soit TO251A (traversant) ou TO252 (CMS). L'encombrement est faible.

On trouve aussi plus facilement en boîtier TO220 :

Le canal N se commandera avec une sortie ARDUINO à HIGH, le canal P à LOW.

Le courant max dans une sortie de micro d'architecture avr n'a jamais été 40 mA : c'est une énorme connerie qui circule toujours et encore sur le net.

Non, ce n'est pas une connerie. La datasheet précise :

Electrical Characteristics
DC current per I/O pin : 40.0mA
DC current VCC and GND pins 200mA

Si un ATMEGA328P est bien capable de débiter 40mA, sa tension de sortie ne sera plus que de 4.4V. S’il débite seulement 20mA elle sera de 4.8V (mesures personnelles).

Mais le problème étant de charger des appareils ou de les alimenter avec un courant de 1A ou plus, la question ne se pose même pas.

Je rappelle qu'il s'agit d'une alimentation et d'un chargeur. Garder une masse commune n'a aucun intérêt.

Si cela n'est pas plus compliqué, avoir une masse commue n'est pas plus mal. Si sur les prises USB on n'y mettait que des portables, ça n’aurait pas d'intérêt. Mais un jour, on y met sur une prise dispo un Ardiuino, sur une seconde un convertisseur 5V->12V pour une charge commandée par l'arduino.

Remarque "de détail" :
Un uln s'utilise en mode saturé. Un uln est un montage Darlington : ce qui signifie que du coté de l'entrée on voit deux Vbe et du coté de la sortie on voit 1 Vce sat
Voir tuto sur le transistor bipolaire et Mosfet simplifié.
https://forum.arduino.cc/index.php?topic=100727.0

Je ne partage pas cet avis. Dans un montage darlington, le premier transistor est saturé, mais le deuxième ne peut pas l’être. Pour faire simple, je vais supposer que VBE=0,6V et que VCEsat=0,2V pour les deux transistors. Si le deuxième transistor était saturé, sa tension VCE serait de 0,2V, son VBE de 0,6V et son VCB de -0,4V. Et c'est cette tension qui est le VCE du premier, qui se trouverait à l'envers. Si on veut faire un montage équivalent au darlington mais avec le transistor de sortie saturé, il faut un montage compound avec un PNP pour le transistor de puissance. Cela n'a pas été fait pour les ULN2xxx.
Quand on regarde le VCEmini, et qu'on voit des tensions de l'ordre du volt, cela vient de là. La tension de sortie vaut Vbe(transistor puissance)+Vcesat(transistor de commande).

Le darlington est saturé (en ce sens que si on augmente le courant de collecteur ne dépend plus du courant de base), mais le transistor principal ne l'est jamais.

Contrôler un mosfet par prise usb ? Et dans ce cas quel mosfet ? Et faut-il des résistances ?...

Pour compléter ma réponse : Oui.
Une résistance entre grille et source : 100KΩ.
Une petite résistance de quelques centaines d'Ω entre sortie ARDUINO et grille ne fait pas de mal non plus.

Et comme mater79 parle d'optocoupleurs : NON, aucun besoin.

Et surtout : éviter les modules tout faits à base d'IRF520 ou IRF540 (pas logic level).
Un module avec 8 MOSFETs + résistances sera facile à réaliser sur un PCB à pastilles.

Bonjour

Le darlington est saturé (en ce sens que si on augmente le courant de collecteur ne dépend plus du courant de base),

C'est pour moi l'essentiel et rien ne s'oppose de mon point de vue a noter VCEsat la tension présente entre collecteur et émetteur quand le darlington est saturé. (ddp Collecteur-Emetteur quand le composant darlington est saturé)
On trouve cette notation VCEsat dans nombre de datasheet de 'transistors Darlington'

Vu comme cela il suffit de ne pas généraliser VCEsat = 0,2V etr ne pas employer cette valeur hors contexte.

Dans les cas du TIP122 le fabricant indique VCEsat=2V pour Ic=3A.

La topologie Darlington (avec 2 NPN ou 2 PNP) venant expliquer la valeur inhabituelle, élevée, du VCEsat.... et les pertes qui vont avec.

hbachetti:
Non, ce n'est pas une connerie.

Si parce que 40 mA est une Absolute Maximum Rating et que la datasheet dit clairement :

30.1 Absolute Maximum Ratings*
Operating Temperature. . . . . . . . . . . -55°C to +125°C
Storage Temperature . . . . . . . . . . . . -65°C to +150°C
Voltage on any Pin except RESET
with respect to Ground . . . . . . . . . . -0.5V to VCC+0.5V
Voltage on RESET with respect to Ground-0.5V to +13.0V
Maximum Operating Voltage . . . . . . . . . . . . . . . . 6.0V
DC Current per I/O Pin . . . . . . . . . . . . . . . . . . 40.0mA
DC Current VCC and GND Pins . . . . . . . . . . 200.0mA

*NOTICE:
Stresses beyond those listed under “Absolute
Maximum Ratings” may cause permanent dam-
age to the device. This is a stress rating only
and functional operation of the device at these
or other conditions beyond those indicated in
the operational sections of this specification is
not implied. Exposure to absolute maximum rat-
ing conditions for extended periods may affect
device reliability.
C'est bien une connerie qui provient des premières annonces Wiring, qui ont été reprise intégralement par Arduino et qui sont sont encore, hélas, propagées sur le net.
A noter qu'Arduino a enfin compris et désormais présente les choses conformément à la datasheet.

Et 6 sorties à 40 mA soit 240 mA + la consommation propre du micro et les bondings de Vcc et de Gnd fondent.

Disons alors qu’avec 39mA ça passe :slight_smile:

Cette limitation de 40mA est très claire pour moi, et je pense qu’il est évident, comme pour tous les composants, qu’une marge de sécurité doit être appliquée.

Il ne viendrait à l’idée de personne d’utiliser un régulateur 1A pour débiter 1A.

C’est la même chose pour tout les composants, et la connerie la plus fréquente est de dire que l’ATMEGA328 est limité à 20mA par sortie. Cette valeur n’apparaît dans aucune datasheet.
Cela revient à dire qu’on applique un coeff de sécurité de 100%.
Ensuite le coeff de sécurité à appliquer n’est qu’appréciation personnelle, en étant bien conscient qu’il dépendra forcément de la température, et du nombre de sorties concernées.

On entrevoit à peine sous les “Absolute Maximum Ratings” :
Note 1 : Maximum current per port = ±30mA
Qui se rapporte à : Injection current at VCC = 0V. Donc rien à voir.

et la connerie la plus fréquente est de dire que l'ATMEGA328 est limité à 20mA par sortie.

C'est la valeur max à laquelle le fabricant garanti la conformité de son produit.
Aucun paramètre n'est donné à une valeur plus élevée.
Les courbes niveau de sortie fonction du courant de sortie s’arrêtent à 20 mA.
Si on regarde bien ce ne sont pas des droites et on sent bien qu'elles commencent à plonger avant 20 mA.
C'est un signe que l'on ne voit pas que l'effet d'une résistance rdson ou qu'il est plus que probable que rdson n'est pas une constante ne dépendant que de la géométrie du barreau conducteur.
Et si Rdson se modifie c'est que le transistor entier se modifie.

Que se passe-t-il à 30 ou 40 mA ?
Que se passe-t-il au delà : Atmel n'en parle pas.

Bien sûr on peut décider de prendre des risques et d'aller au delà des spec Atmel et de se dire tant que ça marche c'est bon, mais alors tout peut se produire .
Comme les schémas et la technologie sont secrets je ne vois pas comment savoir ce que l'on fait.

A 40mA j'ai mesuré 4.4V, 4.8V à 20mA. Bien sûr je n'ai pas fait ça sur un lot.
Leurs courbes sont très pessimistes.

La valeur de tension pour un courant donné n'est intéressante que si l'on a à piloter un circuit logique.
Quel circuit logique consomme 20mA ou 40mA ? aucun.

Il y a certains cas où l'on se fout complètement de la chute de tension : pilotage de LEDs par exemple.
Mais même une LED moderne se satisfait de 5mA.

Fournir un courant de base à un gros transistor ayant un faible gain pourrait être un autre cas.
Qui utilise ce genre monstre à l'heure actuelle ? personne. Le MOSFET est roi.

Pour résumer la question du courant maximal est sans intérêt pour moi.

Merci pour toutes ces réponses !
Ça me fait un peu de lecture... Avec le confinement, j'ai du temps libre, mais pas forcément les composants électroniques sous la main !
En attendant, je vais prendre le temps de me pencher sur les Mosfets et envisager de faire un schéma. Probablement j'utiliserai des boutons poussoirs pour commander l'arduino. Je vous demanderai de valider le montage virtuel si ça ne vous dérange pas.
Une fois que ce sera validé, j'aurai d'autres questions sur l'infrarouge, mais chaque chose en son temps !!

J’ai dessiné un schéma vite fait (en pièce jointe). Est-ce que ça vous parait correct ?
Je vais essayer de rédiger un bout de code avant de vous demander votre avis…

Désolé, la pièce jointe ne passe pas...

Désolé, la pièce jointe ne passe pas...

Ya le choix: doc, gif, jpg, mpg, pdf, png, txt, zip, c, h, cpp, ino, pde
Quelle est le type?

C’est un jpg de moins de 2Mo…
Je réessaye…

Bon, ça ne marche toujours pas…
Pas bien grave, mais pour info, voici le message qui s’affiche :

There was a problem during the uploading of ArduinoHubUSB20200420.jpg.
Your post has been made, however the above attachment was not attached. Please use the Back button to edit your post and submit any required changes.
Your attachment has failed security checks and cannot be uploaded. Please consult the forum administrator.

J’ai avancé un peu dans mes recherches et, en attendant que ma commande d’ IRLZ44N arrive, je m’attaque à la partie commande via infrarouge.
Mais je suis coincé par la librairie IRremote. J’essaye de l’installer mais rien à faire, ça ne passe pas.
J’ai téléchargé le Zip IRremote-2.2.3.zip, et lorsque j’ajoute la librairie, un message me dit que le nom ne doit contenir que des lettres et chiffres. J’ai donc essayé de retirer la fin du nom du fichier et avec IRremote.zip, le même message apparaît…
D’ailleurs, je suis allé jeter un oeil au tuto sur le site arduino, et je constate que dans le menu Croquis > Importer bibliothèque… je n’ai pas de Librairies Manager ! C’est normal ?..

Pour vous tenir informé de l’avancement du projet…

Mon installation du logiciel arduino sur mon ordinateur sous Linux était bancale : je l’ai réinstallé en utilisant le lien du site officiel plutôt qu’apt-get et j’ai une version plus complète et surtout qui fonctionne. Installation de la librairie infrarouge nickel puis test en suivant le tuto de ce gars : https://mytectutor.com/arduino-ir-remote-control-of-leds-and-relays/

J’ai retouché le code pour qu’il corresponde à mon montage de test, la vérification retrouve des erreurs que je ne comprend pas (: warning: large integer implicitly truncated to unsigned type [-Woverflow]
case code1 :
^~~~) mais ça n’a pas empêcher de le télécharger et ça fonctionne !!

D’ailleurs, c’est marrant, dans son tuto il a l’air de se servir de relais fait pour du 220V pour contrôler des LEDs en 5V !!! Ces relais pourraient coller à l’usage que je compte faire des mosfets IRLZ44N ?

Pour les curieux, voici mon code (c’est juste un copié-collé du code trouvé sur le site plus haut, avec simplement la modification des pins correspondant à mon montage) :

#include <IRremote.h>

int RECV_PIN = 14; // the pin where you connect the output pin of sensor (A7 sur nano)
int led1 = 10;
int led2 = 8;
int led3 = 6;
int itsONled[] = {0,0,0,0};
/* the initial state of LEDs is OFF (zero)
the first zero must remain zero but you can
change the others to 1's if you want a certain
led to light when the board is powered */
#define code1 33456255 // code received from button no. 1
#define code2 33441975 // code received from button no. 2
#define code3 33454215 // code received from button no. 3

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
Serial.begin(9600); // you can ommit this line
irrecv.enableIRIn(); // Start the receiver
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
}

void loop() {
if (irrecv.decode(&results)) {
unsigned int value = results.value;
switch(value) {
case code1 :
if(itsONled[1] == 1) { // if first led is on then
digitalWrite(led1, LOW); // turn it off when button is pressed
itsONled[1] = 0; // and set its state as off
} else { // else if first led is off
digitalWrite(led1, HIGH); // turn it on when the button is pressed
itsONled[1] = 1; // and set its state as on
}
break;
case code2 :
if(itsONled[2] == 1) {
digitalWrite(led2, LOW);
itsONled[2] = 0;
} else {
digitalWrite(led2, HIGH);
itsONled[2] = 1;
}
break;
case code3 :
if(itsONled[3] == 1) {
digitalWrite(led3, LOW);
itsONled[3] = 0;
} else {
digitalWrite(led3, HIGH);
itsONled[3] = 1;
}
break;
}
Serial.println(value); // you can ommit this line
irrecv.resume(); // Receive the next value
}
}