Pilotage à partir du composant A4935

De troyesGEII
Révision datée du 21 mai 2015 à 19:36 par Troyesgeii (discussion | contributions) (Réparation)
Aller à : navigation, rechercher


Étude du composant A4935

Le composant A4935 sert à piloter des transistors MOS sur 3 phases différentes.

Le but est de fabriquer une carte permettant de tester le composant A4935 ainsi que de déterminer les valeurs des différents composants qui lui seront associés. Il faudra également déterminer quels signaux logiques, et sur quelles entrées ceux-ci iront afin de choisir un mode de fonctionnement approprié.

Le but est d'obtenir un signal carré en sortie, sur trois phases différentes, que l'on contrôlera indépendamment.

CarteA4935.png

Organisation de l'étude

Taches.png Gant1.png Gantt2.png

Informations tirées de la documentation

Schéma structurel

Les premières informations que nous avons récupéré sont grâce au schéma fonctionnel suivant:

Bloc fonctionnel.png

Nous avons suivit ce schéma afin de fabriquer la carte, cependant, la partie inférieure avec l'AOP et les différentes résistances et condensateurs ne seront pas présentes sur notre carte.


Table de vérité

Les différents modes nous intéressant sont les n°2 et n°3, puisque l'on veut commander de manière indépendante chacune des trois phases du moteur, en sortie. Cette table permet également de repérer les différentes entrées que nous devrons contrôler.

Le mode n°2 permettra de faire fonctionner le transistor du haut, tandis que le mode n°3 permettra de faire fonctionner le transistor du bas.

Table verite.png

Valeur des composants

Les différentes valeurs des condensateurs se calculent à partir des informations que l'on trouve dans la datasheet de l'A4935.

-Creg = 470nF (absent pour les tests)


D'après paragraphe Gate Drive Vooltage Regulation de la page 8, le condensateur Cp doit avoir une valeur minimum de 220nF, il est généralement de 470nF.

-Cp = 470 nF


Calcul de Cboot à partir du paragraphe Bootstrap Capacitor Selection & Bootstrap Charging de la page 18.

Tcharge = (Cboot*ΔV)/100

ΔV = 12V

Tcharge = 100μs

Cboot = 0.085nF ( 82pF en valeur normalisée )

-Cboota = 82pF

-Cbootb = 82pF

-Cbootc = 82pF


La valeur du Cdd nous a été donnée

-Cdd = 100nF


Deux potentiomètres de 40KΩ sont reliés à la patte 48 RDEAD et à la patte 20 VDSTH. Ces deux potentiomètres permettent durant la phase de test d'essayer plusieurs valeurs de résistance sans avoir à changer de composant à chaque essais.

Carte principale

Le composant A4935 sera placé dessus. Les condensateurs de découplage seront également placés là. Le condensateur CP sera remplacé par deux bornes afin de pouvoir faire différents test.

Schéma et board

Les entrées xHI, xLO sont reliées à un bornier femelle afin de pouvoir choisir indépendamment les valeurs qui leur seront données (sur ce bornier sont également présents le seuil haut et bas pour les autres entrées).

Les entrées RESET(oublié sur notre carte à cause d'une erreur de notre part),CCEN, COAST, PWMH, PWML sont reliées chacune à des borniers de 3 pattes (deux des pattes sont reliées au seuil logique haut, et au seuil logique bas) afin de pouvoir affecter une valeur différente à ces entrées à l'aide d'un cavalier.

Le VBB présent sur le schéma aurait également dû être relié à une alimentation (erreur de notre part).

De plus, le composant A4935 n'étant pas placé de base de la librairie Eagle, il a fallut créer celui-ci. On a pu réutiliser un package déjà présent dans la librairie Eagle, celui-ci étant similaire à celui de la documentation (48-pin LQFP)

A4935sch.png

Les pistes en sortie du composant A4935 sont les moins larges possibles afin de ne pas avoir de contact entre les différentes pattes. De plus, des détrompeurs sont présentes sur chacun des connecteurs, et chacun des noms de condensateur est noté afin de pouvoir les repérer plus simplement, sans forcément avoir le board à portée. Les connecteurs pour les cartes annexes sont tous les trois disposés sur trois côtés différents de la carte principale, au bord, afin de pouvoir connecter les annexes le plus simplement possible.

Le composant A4935 n'étant pas présent de base dans les librairies d'Eagle, nous avons du le créer pour l'occasion.

A4935brdbot.png A4935brdtop.png

Media:ER_carte_test.brd Media:ER_carte_test.sch

Fabrication

La carte ne comportant qu'un seul composant CMS (l'A4935), nous avons commencé par placer celui-ci avec de la pâte à braser, suivit d'un passage au four. Le reste des composants (potentiomètres, borniers) sont soudés de manière normale.

En raison des différents oublis sur le schéma Eagle, nous avons dû essayer de réparer nos erreurs: nous avons soudé plusieurs fils sur les pattes du composant (afin de rajouter le VBB ainsi que le RESET), nous avons utilisé deux méthodes différentes, placer de la pâte à braser directement sur l'endroit voulu, ou bien placer de l'étain sur le fil puis le placer ensuite. Les pattes de ce composant étant extrêmement petites, plusieurs complications se sont rajoutées afin d'éviter les liaisons non voulues entre les pattes.

TopA4935.png BotA4935.png

Tests

Après avoir effectué les branchements sur la carte (signaux logiques, alimentation, etc...). Nous avons placé une des cartes annexes, à laquelle nous avons relié une résistance pour voir si un signal était bien récupéré. Le signal en sortie s'est avéré beaucoup trop faible. Les différents blocs fonctionnels ont été ensuite testés, et il semblerait que ça soit le "Charge pump regulator" qui ne fonctionne pas, la tension aux bornes de celui-ci étant inférieure à 0,5V alors que son but est de rehausser la tension d'entrée.

Cartes annexes

Deux transistors C-MOS IRF2204 y seront positionnés. Cinq pattes seront reliées à la carte principale, à savoir GHA, SA, GLA, VCC ainsi que la masse.

Schéma et Board

Les pistes sont les plus larges possibles, 2.2 mm, puisqu'elles sont destinées à accueillir des grosses valeurs de courant. Deux détrompeurs sont présents au niveau du connecteur.

Transiirfsch.png Transiirfbrd.png

Media:Transiirf.brd Media:Transiirf.sch

Fabrication

La carte est simple face en ce qui concerne les pistes. Nous avons placé les composants CMS du côté BOTTOM, en passant les 3 cartes au four. En ce qui concerne le reste des composants (barrette sécable, transistors et douilles), ceux-ci sont placés du côté top de la carte. Ils ont été soudés à la main.

Transiirf.png

Tests

On effectue d'abord le test sur le transistor du haut, on rentre un signal carré (d'amplitude 0-5V et de fréquence 1kHz) et on met le transistor du bas à la masse. On observe en sortie un signal carré d'amplitude 0-2.5V, le transistor se bloque donc correctement. On effectue le même test pour les transistors haut des deux autres cartes.

TestIRF haut.png

Pour le transistor du bas, on effectue la même manipulation mais avec un signal carré d'amplitude 0-4V et on met le transistor du haut à la masse. Ici aussi le transistor se bloque correctement, le signal de sortie est un signal carré d'amplitude 0-2V. On effectue le même test pour les transistors bas des deux autres cartes.

TestIRF bas.png

Pilotage du moteur

Partie informatique

But du programme

On cherche à générer trois MLI, ainsi que leurs opposées (donc six MLI au total) qui permettront de commander le composant A4935, et ainsi d’obtenir en sorties les 3 phases qui permettront de contrôler le moteur. Ces trois MLI devront chacune être déphasées de 2π/3 afin d’obtenir un champ magnétique permettant de faire tourner le moteur.

Une MLI est un signal logique dont le rapport cyclique varie afin d’obtenir une valeur moyenne, qui ici, formera un sinus. Dans notre cas, les MLI fonctionnent par paires (celles-ci allant sur les entrées xHI et xLO), afin que les deux transistors d’une paire ne conduisent pas en même temps, il faut qu’il y’ait un léger décalage à chaque transition

Décalages.png

Afin de pouvoir obtenir un retour d’informations, et donc de connaître la position du moteur en temps réel, un codeur incrémental est placé sur le moteur. Ce codeur fonctionne de la manière suivante : des crans (200 au total) sont placés sur deux lignes différentes, chacun légèrement décalés, sur un disque, à chaque passage sur l’un deux, un signal haut est délivré. Un autre cran est également placé afin de déterminer quand le moteur a terminé un tour.

Codeur incremental disque.gif


On se servira donc de ce codeur pour savoir la position du moteur, et ainsi déterminer l’angle qu’il faut donner au champ tournant pour pouvoir maximiser sa vitesse.

Choix du matériel utilisé

La première solution a été d'utiliser une carte Arduino UNO, pour comprendre le fonctionnement des MLI, apprendre à utiliser le codeur incrémental: récupérer les données de celui-ci, et les utiliser. Cette carte n'étant cependant pas assez rapide, il aurait fallu la coupler avec un FPGA.

La seconde solution a été d'utiliser l'Arduino DUE, qui en plus d'avoir une vitesse de calculs bien supérieure à l'Arduino UNO, possède plusieurs fonctions directement implémentées dans le microcontrôleur, telles que générer les MLI, ou encore exploiter le codeur incrémental. On a donc adopté cette option, et le programme a été développé pour l'Arduino DUE.


Carte connection => arduino


bleu : gnd

vert : T => 2 arduino

jaune : A => 3

orange : B => 8

rouge : Vcc

volatile int angle = 0, i=0;
void setup()
{
  attachInterrupt(1,AB,RISING);
  attachInterrupt(0,T,RISING);
  pinMode(2, INPUT); //  T
  pinMode(3, INPUT); // A
  pinMode(8, INPUT); // B
  Serial.begin(9600);
}

void loop()
{
  if(i==1) 
  {
    Serial.println(angle);
    i=0;
  }
}

void AB()
{
 int A = digitalRead(3);
 int B = digitalRead(8);
 if ((A==HIGH)&&(B==LOW)) 
 {
   if (angle==200) angle=0; // securite
   else angle++;
   i=1;
 }
 if ((A==HIGH)&&(B==HIGH)) 
 {
   if (angle==0) angle=200;
   else angle--;
   i=1;
 }
}

void T()
{
  angle = 0; // position initiale
  delay(100);
  i=1;
}

Carte à tester

Réparation

La carte qui nous a été fournis n'était pas en bon état de fonctionnement, il fallut procéder à l'identification des problèmes et à sa réparation, celle-ci s'est déroulé en plusieurs étapes.


La première étape étant la vérification de toutes les valeurs des composants à partir des valeurs données de la carte industrielle ATmega. Il a fallu modifier la valeur du condensateur Cp celui étant trop faible, afin de pouvoir augmenter sa valeur, on a soudé en parallèles du condensateur déjà présent un autre condensateur afin d'obtenir une valeur en farad suffisante.


La deuxième étape était de vérifier toutes les connexions entre les composants, les pistes au niveau des pattes du composants A4935 étant très minces, il a fallu les renforcer à certains endroits difficiles. Plusieurs retouches ont ainsi été faites afin d'assurer un bon fonctionnement.

Test

Après la vérification des valeurs de tout les componsants, on a procédé aux tests de la carte. Les tests se déroulent de la même manièreque pour la carte test, les branchements s'effectue à l'aide de la table de vérité présente dans la datasheet.Il a fallu vérifé qu'on obtenait bien les bons signaux de sorties au niveau de tout les transistors. On s'est alors aperçu que lorsque l'on voulait avoir un signal de sortie sur le transistor du haut et que l'on bloquait celui du bas, on obtenait le signal voulu sur le transistor hautmais que celui du transistor bas persistait à 1 (alimentation 8V) malgrè le fait que celui-ci soit forcé à 0 en étant relié directement à la masse.La solution se trouvait au niveau de la patte lss du A4935, en effet on avait jugé celle-ci inutile alors qu'elle permet au transistor de se décharger et donc d'obtenir un signal nul en sortie.