Alimentation Arduino MEGA

Bonjour,
pour un projet j'utilise un Arduino Mega pour gérer en temps réel par USB 28 Mofset IRF540 V4.0comme ceux-ci (7 platines de 4): https://fr.aliexpress.com/item/32326885309.html
Tout cela pour gérer 12 moteurs vibrants (sur les sorties PWM) et 16 solénoïdes.
J'alimente l'Arduino par une alimentation externe 9V 1A. Les moteurs vibrants sont alimentés par une alimentations de 6V 20A et les solénoïdes par une alimentation 12V 25A.
Parfois je perds la liaison avec l'ARDUINO si j'actionne tous les Mofset au même temps. J'imagine que c'est un problème d'alimentation ? Je demande trop de courant à l'Arduino ?
J'ai rajouté une alimentation de 5V en parallèle reliées aux Mofsets et au Ground, mais de temps en temps je perds la liaison. Dois-je relier aussi le pin 5V à l'alimentation externe 5V ?
Pour info voici mon code très simple:



void setup()

{

  pinMode(2, OUTPUT); 
  pinMode(3, OUTPUT); 
  pinMode(4, OUTPUT); 
  pinMode(5, OUTPUT);
   pinMode(6, OUTPUT); 
  pinMode(7, OUTPUT); 
  pinMode(8, OUTPUT); 
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT); 
  pinMode(11, OUTPUT); 
  pinMode(12, OUTPUT); 
  pinMode(13, OUTPUT);

  pinMode(23, OUTPUT);
  pinMode(25, OUTPUT);
  pinMode(27, OUTPUT);
  pinMode(29, OUTPUT);
  pinMode(31, OUTPUT);
  pinMode(33, OUTPUT);
  pinMode(35, OUTPUT);
  pinMode(37, OUTPUT);
  pinMode(39, OUTPUT);
  pinMode(41, OUTPUT);
  pinMode(43, OUTPUT);
  pinMode(45, OUTPUT);
  pinMode(47, OUTPUT);
  pinMode(49, OUTPUT);
  pinMode(51, OUTPUT);
  pinMode(53, OUTPUT);

  Serial.begin(57600);

}

void loop(){

  while (Serial.available()) {


   
    int Vib1 = Serial.parseInt();
    int Vib2 = Serial.parseInt();
    int Vib3 = Serial.parseInt();
    int Vib4 = Serial.parseInt();
       
    int Vib5 = Serial.parseInt();
    int Vib6 = Serial.parseInt();
    int Vib7 = Serial.parseInt();
    int Vib8 = Serial.parseInt();
       
    int Vib9 = Serial.parseInt();
    int Vib10 = Serial.parseInt();
    int Vib11= Serial.parseInt();
    int Vib12= Serial.parseInt();

    int relay1 = Serial.parseInt();
    int relay2 = Serial.parseInt();
    int relay3 = Serial.parseInt();
    int relay4 = Serial.parseInt();
    int relay5 = Serial.parseInt();
    int relay6 = Serial.parseInt();
    int relay7 = Serial.parseInt();
    int relay8 = Serial.parseInt();
    int relay9 = Serial.parseInt();
    int relay10 = Serial.parseInt();
    int relay11 = Serial.parseInt();
    int relay12 = Serial.parseInt();
    int relay13 = Serial.parseInt();
    int relay14 = Serial.parseInt();
    int relay15 = Serial.parseInt();
    int relay16 = Serial.parseInt();


    if (Serial.read()) {

// PWM
     
      analogWrite(2, Vib1);
      analogWrite(3, Vib2);
      analogWrite(4, Vib3);
      analogWrite(5, Vib4);
      analogWrite(6, Vib5);
      analogWrite(7, Vib6);
      analogWrite(8, Vib7);
      analogWrite(9, Vib8);
      analogWrite(10, Vib9);
      analogWrite(11, Vib10);
      analogWrite(12, Vib11);
      analogWrite(13, Vib12);

// Relay

      digitalWrite(23, relay1);
      digitalWrite(25, relay2);
      digitalWrite(27, relay3);
      digitalWrite(29, relay4);
      digitalWrite(31, relay5);
      digitalWrite(33, relay6);
      digitalWrite(35, relay7);
      digitalWrite(37, relay8);
      digitalWrite(39, relay9);
      digitalWrite(41, relay10);
      digitalWrite(43, relay11);
      digitalWrite(45, relay12);
      digitalWrite(47, relay13);
      digitalWrite(49, relay14);
      digitalWrite(51, relay15);
      digitalWrite(53, relay16);
    
 
  
  }
 }

}


Merci d'avance de votre précieux aide !

Vinkia

Pas super clair. Un petit dessin de l'ensemble des interconnexions s'impose.

Bonjour,

Je n'ai pas regardé le code mais juste l'aspect élec.

Si tu commande tous les MOS (18 MOS), tu consomme sur le 5V Arduino pas loin de 150mA juste pour la commande des MOS, c'est beaucoup, tu aurais interêt à avoir une alim 5V juste pour tes modules MOS.

Ensuite, un moteur DC, c'est une charge inductive, et quand tu commande l'ouverture du MOS, tu genére une décharge du circuit inductif, et pour éviter cela, il faut une "DIODE DE ROUE LIBRE".

MERCI BEAUCOUP POUR VOS RETOURS !!!!


Désolé pour le dessin, mais je ne suis pas un expert ... j'espère que c'est clair.

Il me semblait que cela était déjà dans le circuit de la platine. La chose bizarre est que normalement si je n'utilise que les 12 moteurs je n'ai pas de souci ...
Sinon est-il faisable de les rajouter sur les platines ? Désolé ... je suis vraiment un novice !

Merci d'aavnce de vos retours.

Vinkia

assez d'accord avec Jeff sur la nécessité de regarder plus précisément la consommation des commandes.

Sur le module

on voit un composant P5280 qui contient quatre optocoupleurs séparés dans un seul boîtier, chacun capable de transmettre des signaux entre deux circuits tout en les isolant électriquement. C'est ce qui permet la commande des 4 MOSFETs.

On dirait qu'il y a effectivement des résistances de 470Ω sur les entrées et peut être aussi les condensateurs.

On a donc sans doute pas loin de 10mA consommé par "prise pilotée" simplement pour allumer l'opto-coupleur.

si vous pilotez les 28 Mofset IRF540 vous allez tirer 28 x 10 = 280mA sur les broches, hors la MEGA ne peut pas fournir plus de 200mA au total sur l'ensemble de ses broches...

Donc c'est un souci..

J'ai dis une enormité.

Vous ne pouvez pas alimenter ces modules MOS en 5V pour la partie logique.

Ils sont trés mal conçuts, vous ne pouvez pas commander 28 MOS en même temps, c'est trop.

Une solution:
4 modules ULN2803 entre le MEGA et les modules IRF, je vous laisse chercher un peu, le temps le manques momentanément

Merci pour vos retours rapides.
Donc si j'ai bien compris je ne peux pas utiliser tous les mofset au même temps à cause de leur consommation électrique. Mais si je les alimente avec une alimentation externe comme indiqué sur mon dessin ça ne change rien ?
Et sinon si j'en alimente que 16 avec une carte et 12 avec une autre ça marcherait ?
Merci de vos retours ....
Vinkia

Pouvez vous mesurer le courant tiré sur une pin de commande lorsque le mosfet est activé ?

Vous pourriez envisager un étage de pilotage de plus qui serait moins consommateur. Par exemple avec des expander de ports (pilotables en I²C par exemple) qui offrent 16 entrées/sorties numériques et que vous pouvez chaîner ➜ Vous pouvez en utiliser 2 pour gérer vos 28 commandes.

Par exemple un MCP23017 peut fournir jusqu'à 25 mA par pin, ce qui serait suffisant pour vos optocoupleurs et la commande consomme très peu

Ou autre idée à étudier aussi:

Peux tu préciser ce dont il s'agit?

C'est quoi ces platines STP?

Encore moi

C'est cette partie là de tes module IRF qui pose probléme:

Les entrées optocoupleurs de tes modules sont trop gourmandes et telle qu'elles sont faites, elles "puissent" leurs énergie sur les sorties Arduino.

Il faut mettre entre Arduino et module IRF un étage capable de répondre à cette gourmandise.

Il y a des tas de solutions possibles.

Question de curiosité:
Pourquoi as tu choisis ces modules IRF qui ne me semblent pas les plus simple à câbler à cause de ces connecteurs 3 broches?

Merci de vos retours.

Je ne suis malheureusement pas équipé pour mesurer la consommation. Par contre je voudrais éviter de m'embarquer dans des circuits un peu compliqués et onéreux.

Si j'utilise un Arduino MEGA pour commander 12 Mofset reliées au moteurs vibrants 6V je n'ai pas de souci.

Du coup je comprends mieux le problème. Ma carte ne suffit pas pour tout commander à cause de la consommation électrique.

Juste car je pensais que c'était le plus pratique pour tout câbler et j'en ai plein à la maison.

Je réfléchi à passer sur 2 MEGA pour répartir 14 Mofset d'un côté et 14 d'un autre: normalement ça devrait le faire ? Cela niveau installation serait même plus pratique. Peut-être je vais opter pour une connexion Ethernet pour commander les 2 à distance ... si j'arrive à transcrire le code !

Si vous avez une meilleure idée pas trop compliquée (et chère) à mettre en œuvre je vous remercie d'avance !

Vinkia

Bonjour vinkia

As tu vraiment besoin d'une isolation par optocoupleur? Sinon avec de simples ULN2803 ça devrait faire l'affaire.
image

Fais une photo ou donnes un lien sur les moteurs et les solénoïdes.

Concernant ton programme, comme tu as beaucoup d'entrées à traiter, tu devrai t'intéresser aux tableaux, si tu veux une démo, mets ton programme en ligne.

A+
Cordialement
jpbbricole

Les MOS,c'est bien parce que tu n'as pas trop de soucis ou questions à te poser pour la puissance, sauf si tu pilote des gros moteurs, d'où ma proposition post#9, ULN2803A + IRF540

Si tu as des petits moteurs et solénoïdes, tu peux te contenter de seulement les ULN2803A.

On ne sait pas ce que tu pilote exactement comme organes.

Le problème c'est que je ne connais pas son fonctionnement avec l'Arduino. Il faudrait que je me renseigne.

Voila mes solénoïdes: https://fr.aliexpress.com/item/1005006420876731.html?spm=a2g0o.order_list.order_list_main.10.22105e5b0I3UTT&gatewayAdapt=glo2fra
et mes moteurs: https://fr.aliexpress.com/item/1005004590593101.html?spm=a2g0o.order_list.order_list_main.25.22105e5b0I3UTT&gatewayAdapt=glo2fra

Mon projet c'est de les contrôler en temps réel par un logiciel qui s'appelle MAX/MSP. Pour cela j'utilise le code que j'ai envoyé dans les posts précédents. Je sollicite en temps réel les 28 sorties, rarement au même temps mais je ne veux pas être tributaire de cette contrainte de ne pas pouvoir actionner tout en même temps.
En plus dans l'idée je voulais rajouter 16 relais commandés toujours par le même principe pour piloter 16 ampoules. Cela est déjà testé et ça marche, mais je me vois mal de rajouter sur la MEGA encore 16 contrôles en sorties vu la dépense énergétique que cela demande.
Donc je me demande si ça ne serait pas plus judicieux de séparer les éléments sur plusieurs microcontrôleurs qui seraient commandés par Ethernet (OSC) comme je fais déjà avec des ESP32.

mais comment dois je gérer ça par l'Arduino niveau montage et niveau codage ?

Bonjour vinkia

Pour les solénoïdes, tu peux oublier l'ULN2803, par contre, avec des MOSFET sans optocoupleurs, ça devrait faire l'affaire.

Tu devrait pouvoir les commander avec un ULN2803.

Aussi simple que de commander une LED.

A+
Cordialement
jpbbricole

C'est une solution, mais cela rajoute pas mal de mise au point des programmes.

Tu es vraiment a cours de sortie avec ton Arduino Mega ?

Merci pour le conseil mais cela me demande encore du bricolage et surtout j'ai vu que je n'ai aucun problème à gérer 12 moteurs avec les Mofset, si je ne rajoute pas d'autres sorties.

Après réflexion je pensais partager les sorties en 2, car j'ai deux espaces distants où les moteurs et les solénoïdes travaillent : 8 solénoïdes+ 6 moteurs vibrants. Du coup 2 Arduino Uno me suffiraient car j'aurais juste les 14 sorties. Mais niveau consommation pensez vous que ça ira ?

Niveau programmation c'est très basique car je gère tout en temps réel. C'est plutôt niveau consommation le problème.

Bonsoir,

On t'a expliqué patiemment qu'avec tes module IRF540, quelque soit ce que tu pilote derriére, il faut consommer disont 10mA par organe piloté (moteur ou solénoïde).

8+6=14 organes donc 140mA consommés sur l'alimentation 5V Arduino.

Les composants sur la carte Arduino consomment aussi, donc tout dépendra de quelles cartes Arduino tu souhaite utiliser.

Post#9, je t'indique une solution pour réduire la consommation sur les sorties Arduino.

@jpbbricole t'en apporte aussi.

@terwal te préviens que séparer en 2 le orobléme avec 2 cartes Arduino ne va pas te faciliter la tâche, je ne sais pas comment tu va synchroniser cela si ça a besoin de l'être.

Je conçoit qu'au début, c'est un peu complexe de dépatouiller les infos.

Examine les solutions et arrête toi sur l'une d'entre elle.

Par exemple:
-Les moteurs, @jpbbricole te dit que c'est OK avec des ULN et tu économise facilement 5 ou 6 mA par commande digitale des moteurs.
C'est une option intéressante pour les moteurs non?

  • Les soleinoides, trop balaise pour être pilotés avec des ULN tout seul
  • possible si tu utilise tes modules IRF540 que tu as en stock + 1 ULN par module IRF540
  • Sinon, il faut trouver d'autres modules MOS.

Le problème c'est la consommation de l'opto coupleur.
J'espère que tu as un multimètre !
Sinon achète en un d'urgence.

Pour connaitre le courant qui passe dans l'optocoupleur il suffit de mesurer la tension aux bornes de la résistance de 470 ohms (voir post #11). Après c'est juste U = RI.

Remarque :
Il me semble qu'il a déjà le matériel, je ne pense pas qu'il veuille le changer. Il cherche une solution pour le faire fonctionner,

Information :
Il est dit qu'il ne faut pas mettre des transistors en parallèle parce qu'il y a de trop fortes dispersions de fabrication entre deux lots de fabrication. Et qu'il y a des risques de destruction d'un ou plusieurs transistors.
C'est le cas général.

Avec un ULN c'est totalement différent : les 8 transistors sont fabriqués en même temps sur la même puce de 2 ou 3 mm2 → ils sont identiques.
Eux-mêmes sont réalisés avec des transistors en parallèles : c'est transparent pour l'utilisateur.
La datasheet précise que les différentes voies d'un ULN peuvent être mise en parallèle en toute sécurité.
Note : Les transistors d'un ULN sont des montages "Darlington" : un petit transistor bipolaire avec un grand gain(> 100 à 200), suivi d'un transistor bipolaire de puissance, qui comme tous les bipolaires de puissance a peu de gain (10 à 20).
L'ensemble à un gain très élevé, donc tire très peu de courant de base sur la sortie microcontrôleur.

Sinon, tu peux utiliser des mosfet en boîtier discret, mais pas n'importe quels mosfet, et surtout pas des IRF, à la limite des IRL
Il te faut des mosfet dont le paramètre Vgsthreshold ne dépasse pas 2 V si tu veux qu'ils puissent délivrer le courant max indiqué dans leur datasheet.

Un optocoupleur est utile quand on veut de l'isolation galvanique, c'est à dire quand on veut que la masse de la partie commande soit isolée de la masse de la partie puissance.

Sinon c'est un gouffre à mA : leur paramètre essentiel CTR (Current Transfert Ratio) peut varier, pour un même référence, de 0,2 à 3 selon le lot de fabrication.