Commande variateur de vitesse triphasé commande

Bonjour...

J'aimerais commander un variateur de vitesse triphasé d'un moteur asynchrone avec une carte Arduino... De façon à faire varier la fréquence...

J'aimerais surtout connaître le commande d'ouverture et fermeture de MOSFET de l'onduleur de mon variateur de vitesse...

Si quelqu'un peut aider, merci cordialement

et comment fait-on pour savoir le matériel que vous avez ??

Voilà la capture de la simulation

J'utilise donc un Arduino Uno pour commander un onduleur composé de 6 MOSFET 2N6661

Je voudrais actionner ces MOSFETs

j'ai pas regardé en détail et je ne suis pas un expert du tout en hardware (@68tjs aurait des idées et des commentaires je suis sûr) mais vous avez des pins qui sont connectées aux gates des mosfet (à travers une resistance)

par exemple ici la pin 6

il suffit donc de mettre la pin 6 en OUTPUT et de la passer HIGH ou LOW ou alors d'utiliser le PWM suivant ce que vous souhaitez faire

si vous voulez piloter plusieurs d'un coup, il faut regrouper les pins sur le même PORT du microprocesseur et utiliser les commandes avec les registres des PORT pour affecter la valeur voulue d'un coup aux 4 pins. (cf par exemple Référence Arduino français Main/Port Manipulation)


Voilà la séquence d'ouverture et de fermeture de MOSFET comme souhaité...
J'ai également tapé un code, mais seulement, à la sortie de l'onduleur, j'ai un signal pas du tout désiré...

est-ce que les mosfet choisi sont compatible avec une gate pilotée en 5V au travers de la résistance ?

postez le code et vérifiez le circuit.

// put your setup code here, to run once:
int IGBT1 = 11;
int IGBT2 = 9;
int IGBT3 = 6;
int IGBT4 = 10;
int IGBT5 = 3;
int IGBT6 = 5;

void setup() {
pinMode(IGBT1,OUTPUT);
pinMode(IGBT2,OUTPUT);
pinMode(IGBT3,OUTPUT);
pinMode(IGBT4,OUTPUT);
pinMode(IGBT5,OUTPUT);
pinMode(IGBT6,OUTPUT);
}

void loop() {
// put your main code here, to run repeatedly:
//phase 1
analogWrite(IGBT1,HIGH);
analogWrite(IGBT2,LOW);
analogWrite(IGBT3,LOW);
analogWrite(IGBT4,LOW);
analogWrite(IGBT5,LOW);
analogWrite(IGBT6,HIGH);

delay(300);

//phase 2
analogWrite(IGBT1,HIGH);
analogWrite(IGBT2,HIGH);
analogWrite(IGBT3,LOW);
analogWrite(IGBT4,LOW);
analogWrite(IGBT5,LOW);
analogWrite(IGBT6,LOW);

delay(300);

//phase 3
analogWrite(IGBT1,LOW);
analogWrite(IGBT2,HIGH);
analogWrite(IGBT3,HIGH);
analogWrite(IGBT4,LOW);
analogWrite(IGBT5,LOW);
analogWrite(IGBT6,LOW);

delay(300);

//phase 4
analogWrite(IGBT1,LOW);
analogWrite(IGBT2,LOW);
analogWrite(IGBT3,HIGH);
analogWrite(IGBT4,HIGH);
analogWrite(IGBT5,LOW);
analogWrite(IGBT6,LOW);

delay(300);

//phase 5
analogWrite(IGBT1,LOW);
analogWrite(IGBT2,LOW);
analogWrite(IGBT3,LOW);
analogWrite(IGBT4,HIGH);
analogWrite(IGBT5,HIGH);
analogWrite(IGBT6,LOW);

delay(300);

//phase 6
analogWrite(IGBT1,LOW);
analogWrite(IGBT2,LOW);
analogWrite(IGBT3,LOW);
analogWrite(IGBT4,LOW);
analogWrite(IGBT5,HIGH);
analogWrite(IGBT6,HIGH);

delay(300);
}

Voilà le code... En principe, à la sortie je devrais avoir un signal plus ou moins carré mais... J'ai plutôt ça...


Traitement de : IMG-20221011-WA0110.jpeg…

postez avec les balises de code SVP

➜ Merci d'éditer votre post pour rajouter les balises de de code, c'est quasiment illisible tel quel:

  • sélectionner la partie du texte qui correspond au code
  • appuyez sur l'icône </> dans la barre d'outils pour indiquer que c'est du code

(Assurez vous aussi d'indenter le code correctement dans l'IDE avant de le copier pour le coller ici. Cela se fait en pressant ctrlT sur PC ou cmdT sur un Mac)

J'ai supprimé les résistances même si cela ne dérangeait pas l'amorçage du MOSFET car à sa sortie, une tension était détecté avec le voltmètre...

On m'a parlé d'une fonction Timer pour régler les séquences d'ouverture et de fermeture de MOSFET, mais j'avoue que je suis perdu

commencez par lire cela :

et ça

// put your setup code here, to run once:
int IGBT1 =  11;
int IGBT2  = 9;
int IGBT3 =  6;
int IGBT4 = 10;
int IGBT5 =  3;
int IGBT6 =  5;

void setup() {
  pinMode(IGBT1,OUTPUT);
  pinMode(IGBT2,OUTPUT);
  pinMode(IGBT3,OUTPUT);
  pinMode(IGBT4,OUTPUT);
  pinMode(IGBT5,OUTPUT);
  pinMode(IGBT6,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  //phase 1
    analogWrite(IGBT1,HIGH);
    analogWrite(IGBT2,LOW);
    analogWrite(IGBT3,LOW);
    analogWrite(IGBT4,LOW);
    analogWrite(IGBT5,LOW);
    analogWrite(IGBT6,HIGH);

    delay(300);

    //phase 2
    analogWrite(IGBT1,HIGH);
    analogWrite(IGBT2,HIGH);
    analogWrite(IGBT3,LOW);
    analogWrite(IGBT4,LOW);
    analogWrite(IGBT5,LOW);
    analogWrite(IGBT6,LOW);

    delay(300);

    //phase 3
    analogWrite(IGBT1,LOW);
    analogWrite(IGBT2,HIGH);
    analogWrite(IGBT3,HIGH);
    analogWrite(IGBT4,LOW);
    analogWrite(IGBT5,LOW);
    analogWrite(IGBT6,LOW);

    delay(300);

    //phase 4
    analogWrite(IGBT1,LOW);
    analogWrite(IGBT2,LOW);
    analogWrite(IGBT3,HIGH);
    analogWrite(IGBT4,HIGH);
    analogWrite(IGBT5,LOW);
    analogWrite(IGBT6,LOW);

    delay(300);

    //phase 5
    analogWrite(IGBT1,LOW);
    analogWrite(IGBT2,LOW);
    analogWrite(IGBT3,LOW);
    analogWrite(IGBT4,HIGH);
    analogWrite(IGBT5,HIGH);
    analogWrite(IGBT6,LOW);

    delay(300);

    //phase 6
    analogWrite(IGBT1,LOW);
    analogWrite(IGBT2,LOW);
    analogWrite(IGBT3,LOW);
    analogWrite(IGBT4,LOW);
    analogWrite(IGBT5,HIGH);
    analogWrite(IGBT6,HIGH);
 delay(300)
}

Les résistances limitent le courant d'appel car l'entrée d'un mosFET présente une capacité assez importante. Sur les mosFET de puissance cette capacité étant importante la sortie de la carte Arduino n'est peut-être pas très adaptée pour fournir le courant nécessaire à une conduction franche.
Pour la moitié basse des ponts à la limite les transistors pourraient peut-être conduire correctement.
Pour la moitié haute des ponts on ne voit pas trop quelle tension d'alimentation est appliquée mais je doute que la tension délivrée par les sorties de l'Arduino soit suffisamment élevée pour rendre les mosFET conducteurs.
Il faudrait avoir un schéma lisible. On ne peut lire aucune valeur.

Le mosfrt 2N6660 s'amorce avec une tension de 1.6V sauf si j'ai mal lu... Et la sortie de la carte Arduino est bien 5V

Oui, à cette tension il laisse passer 1mA. Si tu regardes les courbes dans la datasheet tu vas remarquer qu'il faut un peu plus que ça pour qu'il conduise vraiment.
Quelques remarques:

  • ce transistor à un RDS(on) de 5 Ohms c'est pas terrible. Ils vont vite chauffer.
  • comme je l'ai dit précédemment. La sortie de l'Arduino génère un VGS peut-être suffisant pour faire conduire la moitié inférieure des ponts mais sans doute pas pour faire conduire la moitié supérieure.
  • sans informations sur la tension d'alimentation et les caractéristiques du moteur on ne pourra pas en dire beaucoup plus pour t'aider.

Ah voilà, moi je réalise un variateur de vitesse pour un moteur asynchrone triphasé qui normalement doit fonctionner sur la tension d'alimentation de la source SNEL( Société nationale d'électricité) qui fournie 220V/50Hz.
le moteur sera connecté à une alimentation triphasé...

Alors dans ma réalisation, la partie " redresseur triphasé" fourni 380v continue sur Proteus

L'onduleur prend la tension du redresseur, doit le transformer à la tension AC de la source mais cette fois-ci, avec la possibilité de contrôler la fréquence

Concernant le code, sans même faire une analyse poussée du code on peut déjà dire

  • il vaudrait mieux utiliser des noms plus explicites pour les transistors. Comme HP1 (transistor haut phase 1), BP1 (transistor bas phase 1) cela permettrait de mieux de détecter des erreurs de codage.
  • entre 2 phases il faut passer par une phase où les transistors ne conduisent pas pour éviter les problèmes de cross conduction.
  • on n'utilise pas analogWrite() pour commander des sorties en tout ou rien. On utilise digitalWrite()
  • en fait il vaudrait mieux utiliser la librairie digitalWriteFast qui offre de meilleurs performances en matière de temps d'exécution.

Avec des transistors dont le Vds(max) est de 60V???
Il n'y aurait pas une erreur de casting.

Tu dois faire du sinus ou du carré? Ce n'est pas du tout la même chose.