MoteurSynchrone2019 : Différence entre versions
(→Routage) |
(→Routage) |
||
| Ligne 49 : | Ligne 49 : | ||
==Routage== | ==Routage== | ||
Il est évident d'essayer de respecter les consignes de bases pour fabriquer une bonne carte électronique. | Il est évident d'essayer de respecter les consignes de bases pour fabriquer une bonne carte électronique. | ||
| + | Vu le nombre de composants à placer on se retrouve avec beaucoup de vias | ||
==Composants utilisés== | ==Composants utilisés== | ||
Version du 27 mars 2020 à 11:58
Sommaire
Partie 1:Projet
Description
L’objectif principal de ce projet était de piloter les trois phases d’un moteur synchrone à l'aide d’un microcontrôleur ou d’un FPGA. Pour cela il a fallu dans un premier temps comprendre le projet, faire une étude afin de définir les différentes tâches à réaliser pour mener à bien le projet. Après compréhension et étude du projet les différentes grandes tâches que l'on a défini furent :
- La programmation des MLI OU PWM
- L’étude et la programmation du capteur de position (codeur incrémental)
- L’étude et la réalisation de la carte
- La supervision
- La fabrication des pièces mécaniques
Matériel
La liste du matériel utilisé est la suivante:
| DESIGNATION | QUANTITE | VALEUR |
|---|---|---|
| Carte Arduino leonardo | ||
| Driver de MOS A4935 | ||
| codeur incrémental | ||
| ok | ||
| RaspberryPi | ||
| Freecad | ||
| Arduino | ||
| Eagle | ||
| QT céator |
Partie 2: Fabrication de la carte électronique
Saisie du schéma
Comme indiqué dans la description, le schéma doit être bien fait du coup on doit se focaliser sur les points suivants:
- Comment fonctionne le driver?
- Comment choisir les pattes du driver?
- Comment programmer le microcontrôleur?
Les premières informations que nous avons récupéré sont grâce au schéma fonctionnel suivant:
Description du driver
Le composant A4935 sert à piloter des transistors MOS sur 3 phases différentes. Le but est 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é.
Routage
Il est évident d'essayer de respecter les consignes de bases pour fabriquer une bonne carte électronique. Vu le nombre de composants à placer on se retrouve avec beaucoup de vias
Composants utilisés
Partie 3: Programmation
L'objectif de la programmation est de pouvoir contrôler le pilotage du moteur par le biais d'un microcontrôleur. Nous allons ici utiliser l'Arduino Leonardo. Nous avons fait ce choix à cause des caractéristiques de son microcontrôleur(ATMEGA32u4) principalement le timer 4 avec:
- trois sorties PWM et leurs complémentaires
- une fréquence d'horloge allant à 64Mhz
- une grande vitesse de chronométrage et de comptage
- une haute résolution et une grande précision
Le travail se fera en plusieurs étapes. D'abord, nous allons générer des MLI, ensuite mesurer les valeurs instantanées de l'angle au rotor grâce au codeur incrémental et enfin faire une supervision du pilotage du moteur.
Générer des MLI
Le moteur qui fait objet de notre étude est un moteur brushless triphasé ci-contre. Ce moteur est alimenté par une tension triphasée déphasée chacune de 2π/3 et nous disposons d'une tension d'alimentation continue.Il faut donc veiller à transformer cette tension continue en tension sinusoïdale. Pour ce fait, nous allons générer trois MLI en faisant usage du timer 4 du microcontrôleur. Une MLI (Modulation de largeur d'impulsions ou PWM pulse width modulation) est un signal logique qui vaut soit 0 ou 1 dont on peut varier le rapport cyclique et pour lequel la fréquence est fixe. Elle permet de faciliter la commande des transistors dont nous ferons usage pour piloter notre moteur. Ici, nous aurons besoins de trois MLI et de leurs opposées donc six MLI au total pour commander trois demi-pont fonctionnant par paire. Pour éviter que deux transistors de la même paire fonctionne simultanément, on fera appel aux entrees xHI et xLO du driver.
Partir des notions de base
La liste du matériel utilisé est la suivante:
| DESIGNATION | QUANTITE | VALEUR |
|---|---|---|
| led | 6 | |
| resistance | 6 | 330Ω |
| resistance | 6 | 10KΩ |
| condensateur | 6 | 150nF |
| carte arduino | leonardo | |
| platine d'essai |
Codeur Rotatif
Pour savoir qu'elle est la position du moteur en tout instant, on utilise un codeur rotatif. On utilise un HEDS-5540 de la famille Avao technologie pour nous donner les informations. On y place les fils sur l'aurduino avec le fil noir pour le GND, le fil vert pour le Vcc, et les fils rouges, bleues et jaunes servent à donner transmettre les informations du moteur à l'arduino Leonardo. Pour pouvoir utiliser les informations, on implante un programme arduino pour lire les informations du codeur. Pour cela, on a deux voie qui servent à détecter si le moteur va dans un sens ou dans un autre, et une voie qui permet de détecter le Top tour du moteur.
On va expliquer comment on arrive à lire et exploiter les informations du codeur :
Dans un premier temp, il fallait apprendre à lire les informations sur arduino, puis on doit gérer l'incrémentation et la décrémentation pour avoir un visuel de ce que fait le moteur avec des valeurs. Enfin, il fallait que le codeur puissent revenir à zéros pour savoir quand le moteur fait un tour complet.
Programe du codeur rotatif
Le void setup permet de configurer l'arduino en donnant la vitesse et configurant les fonctions utile au programme.
void setup() {
Serial.begin (9600);
Serial.println ("Start");
attachInterrupt (1, Interrupt1, RISING); //l'interruption pour pouvoir lire le font montant
attachInterrupt (0, Interrupt2, FALLING); //l'interruption pour pouvoir lire le font descendant
delay(5000);
}
Le void loop sert juste à afficher les valeurs lu par le codeur.
void loop(){
Serial.println (val); //lire sur la console les angles lu par le codeur
delay(250); //delay qui permet de nous laisser du temp pour lires les valeurs
}
Le attachInterrupt sert à l'incrémentation, ou la décrémentation pour la seconde fonction, et qui enregstre les valeurs donné par le codeur.
void Interrupt1(){
if ( bit_is_set (PINC,PC6) ){ //Top Tour
val = 0;
}else{
if ( (bit_is_set(PIND,PD4) == 0) ){ //regarde le front montant
if ( val == valMaxCapteur ){ //on regarde si on a la valeur max
val = 0;
}else{
val++;
}
}else{
if(val == 0){ //on regarde si on à la valeur min
val = valMaxCapteur;
}else{
val--;
}
}
}
}
Supervision
Pour visualiser ce que fait le moteur, on utilise une carte Raspberry Pi 3. La principale difficulté est de pouvoir comuniquer entre l'arduino, qui récupère les informations en binaire du moeteur, à la Raspberry, qui traite des informaions en numériques. On utilise pour cela un composant qui permet de transformé les informations binnaire en numériques et inversement. Il faut aussi configurer la carte Raspberry pour qu'elle puisse recevoir ces infomations.
Partie 4: Mécanique
Description du travail à réaliser
Après les tests à vide du moteur on se doit de le tester en charge. Le but de cette partie était de réaliser des pièces d'accouplement et un support afin de connecter la charge au moteur et de réalisé des tests.
- il fallait démonter le moteur ci-contre afin de le remplacer par le notre.
- trouver une solution pour monter et l'accoupler notre moteur pour effectuer les testes.
- il fallait fabriquer les différentes pièces utile au montage du moteur.
- Assemblage du moteur + alternateur et teste.