COMMANDE DUN MOTEUR PAS A PAS AVEC
UN HACHEUR
25/06/2013 Projet de Synthse
Il sagit ici dorienter laxe du moteur pas pas dans une direction voulue
par rapport au Nord magntique.
N I C O L A S M E N D E S L U D O V I C R E Y N O U A R D B A C H I R M E G H N I N E Y O A N N D U T E L
Commande dun moteur pas pas avec un hacheur
Page 1
REMERCIEMENTS
Nous remercions Mr James et Mr Laffont pour leur aide et les conseils quils nous ont donn tout
au long du projet durant les horaires encadres et en dehors. Nous tenons galement remercier Mr
Pasquier pour ses divers conseils quil nous a donns durant la ralisation et la rflexion du hacheur ainsi
que Mr Landrault pour ses conseils sur les transistors et les optocoupleurs.
Enfin nous remercions le technicien Mr Sanchez pour nous avoir mis disposition de manire trs
rgulire la salle de projet ainsi que pour le matriel prt pour raliser nos diffrents tests.
Commande dun moteur pas pas avec un hacheur
Page 2
INTRODUCTION
Dans le cadre du projet de synthse nous avons eu comme sujet :
Commande dun moteur pas pas avec hacheur . Un hacheur est un dispositif de llectronique
de puissance permettant de convertir une tension continu en une autre tension continu. Il peut y avoir
intervention de un ou plusieurs interrupteurs commands. Dans notre cas, on aura affaire un hacheur
dvolteur, c'est--dire quon diminuera la tension dentre laide dun circuit de puissance adapt qui
sera dvelopp plus tard dans ce rapport. Le moteur fournit, par Mr James, tait vraisemblablement un
ancien moteur dimprimante pris lIUT voisin. Nous avons ralis lensemble de nos programmes sur
MPLAB, un logiciel fournit par le fabricant du microcontrleur.
Comme indiqu par nos professeurs le but du TP de synthse est de synthtiser lensemble des
enseignements de la 1re anne du cycle Ingnieur de Gnie Electrique. De plus cet exercice est une
premire confrontation au travail dun ingnieur en entreprise.
Commande dun moteur pas pas avec un hacheur
Page 3
SOMMAIRE
REMERCIEMENTS ..................................................................................................................1
INTRODUCTION ...................................................................................................................2
SOMMAIRE ...........................................................................................................................3
1. ETUDE PRELIMINAIRE ....................................................................................................4
1.1. Cahier des charges ...................................................................................................................... 4
1.2. Etude fonctionnelle ....................................................................................................................... 4
1.2.1. Schma fonctionnel .............................................................................................................. 4
1.2.2. Dcoupage fonctionnel ....................................................................................................... 4
1.3. Etude structurelle ........................................................................................................................... 5
1.3.1. Schma structurel .................................................................................................................. 5
1.3.2. Choix des solutions structurelles ......................................................................................... 5
2. HACHEUR ......................................................................................................................6
2.1. Ralisation du hacheur ................................................................................................................. 6
2.2. Choix des composants ................................................................................................................. 9
2.3. Routage ........................................................................................................................................ 10
3. PROGRAMMATION ................................................................................................... 12
3.1. Les composants utiliss ............................................................................................................... 12
3.1.1. La boussole HMC6352 .............................................................................................. 12
3.1.2. Lcran LCD JM164A ................................................................................................. 13
3.1.3. Le clavier ............................................................................................................................. 13
3.2. Les algorithmes ............................................................................................................................ 14
3.2.1. Attribution des ports (setup.h) .......................................................................................... 14
3.2.2. Fichier main.c ....................................................................................................................... 14
3.2.3. Fichier setup.c ...................................................................................................................... 15
3.2.4. Fichier boussole.c ................................................................................................................ 16
3.2.5. Fichier lcd_4bits.c ............................................................................................................... 19
3.2.6. Fichier can.c ......................................................................................................................... 21
3.2.7. Fichier commande_hacheur.c ........................................................................................... 22
4. TESTS .......................................................................................................................... 25
4.1. Test hacheur ................................................................................................................................. 25
4.2. Test programmation ................................................................................................................... 25
4.2.1. I2C et boussole ................................................................................................................... 25
4.2.2. Ecran ..................................................................................................................................... 27
4.2.3. Clavier .................................................................................................................................. 28
CONCLUSION .................................................................................................................... 29
Commande dun moteur pas pas avec un hacheur
Page 4
1. ETUDE PRELIMINAIRE
1.1. Cahier des charges
Le systme concevoir comporte une boussole numrique monte sur un moteur pas pas.
A l'aide d'un clavier matric et d'un afficheur, un oprateur choisira un angle par rapport au
Nord magntique et le moteur pas pas positionnera automatiquement le capteur boussole numrique
dans la bonne direction.
Pour raliser ce systme, nous devrons concevoir une interface de puissance isole galvaniquement
permettant de piloter les deux bobines du moteur pas pas.
Le moteur pas pas fourni par Mr James ralise 200 pas par tour et supporte une intensit
maximale de 1 ampre. Chaque pas ralise un angle de 1.8.
Des plaquettes sont mises notre disposition afin de raliser nos essais ainsi que des gnrateurs
de tous types.
De plus une plaquette contenant entre autre le microcontrleur nous a t donne au dbut du
projet. Mr Laffont a galement mis notre disposition divers logiciels et tutoriels permettant le
fonctionnement du microcontrleur sur nos machines et ce grce la forge (un site internet o nous devions
notamment crire lavancement de notre projet).
1.2. Etude fonctionnelle
1.2.1. Schma fonctionnel
1.2.2. Dcoupage fonctionnel
FP1.1 : Acquisition des donnes permettra au systme de rcuprer les donnes corriger.
FP1.2 : Consigne entre par lutilisateur offrira la possibilit lutilisateur dentrer lui-mme une valeur dangle qui sera ensuite corrige en fonction du nord.
FP2 : Traitement des donnes permettra de traiter la donne c'est--dire de dfinir la correction appliquer aux donnes.
FP3.1 : Affichage sur LCD permettra lutilisateur de connaitre la correction effectue. FP3.2 : Commande du moteur agira directement sur le moteur et lorientera vers le nord
en fonction de la valeur de la donne corrige.
Acqurir les donnes
Traiter les donnes
Afficher sur un cran LCD
Commander le moteur
FP1 FP2
FP3
Commande dun moteur pas pas avec un hacheur
Page 5
1.3. Etude structurelle
1.3.1. Schma structurel
1.3.2. Choix des solutions structurelles
Pour la boussole, on utilisera la boussole HMC6352 fourni par Mr James. Une recherche de la
documentation de cette boussole a t ncessaire. Cette dernire a t trouve sur le site du fabricant
Honeywell.
Pour le microcontrleur comme donn dans le cahier des charges, on utilisera le microcontrleur
PIC18F4550 de MICROCHIP.
Le Hacheur sera compos de deux hacheurs 4 quadrants chacun (les raisons de ce choix seront
expliques ultrieurement).
Pour laffichage on utilisera un afficheur LCD, fourni par le magasin de Polytech (que Francisco
Sanchez nous a donn). Cet afficheur en question est un afficheur du fabricant SHENZEN JINGUA DISPLAY,
et nous avons eu le modle JM164A. Ici encore une recherche de la documentation a t ncessaire. Le
fonctionnement et tous renseignements relatifs cet afficheur seront dvelopps plus tard.
Pour le clavier, on nutilisera pas un clavier matric comme dfini dans le cahier des charges, en
effet Mr James nous ayant inform de lindisponibilit de ce dernier, nous avons donc remplac le clavier
par un potentiomtre et un convertisseur analogique numrique (CAN) .Le potentiomtre sera un
potentiomtre classique disponible dans le magasin et pour le CAN on utilisera le CAN intgr au
microcontrleur.
Boussole HMC6352
Micro-Controlleur PIC18F4550
Deux hacheurs quatre quadrants
Moteur 23LM-C303-10
Isolation galvanique CNY74-4
Ecran LCD JM164A
Potentiomtre 100 k
Protocole I2C
CAN
LEDS de contrle
Commande dun moteur pas pas avec un hacheur
Page 6
2. HACHEUR
2.1. Ralisation du hacheur
La premire partie de la ralisation du hacheur consistait comprendre et dcouvrir le
fonctionnement dun moteur pas pas, pour ce faire nous avons test le moteur en question en alimentant
chaque bobine de ce dernier.
En effet, ce moteur possde 4 fils visibles, nous avons donc d au pralable dterminer quels fils
taient lis ensemble. Pour cela nous avons utilis un multimtre sur position mesure dinductance. On a
alors dduit que les fils rouge et bleu taient relis la mme bobine dinductance 5.21 mH, et que les fils
noir et vert taient relis la bobine de 5.26 mH.
On a ensuite cherch faire tourner le moteur dun pas. Pour cela, nous avons utilis une
alimentation en source de courant, c'est--dire que nous avons fix la tension une valeur trs basse
(infrieur 1 volt) et avons ensuite augment lintensit progressivement jusqu' voir le moteur effectuer un
pas. Nous avons conclu qu partir de 0.8 ampres le moteur effectuait un pas.
A partir de plusieurs essais dalimentation des bobines, on a mis en vidence le fait que la
rotation du moteur seffectue en alimentant les bobines lune aprs lautre. De plus, pour faire des pas
dans le mme sens, il faut veiller inverser les polarits des bobines lune aprs lautre comme suit :
Ordre Polarits
+ -
1 Vert Noir
2 Bleu Rouge
3 Noir Vert
4 Rouge Bleu
On en a donc dduit qu'un hacheur 4 cadrans tait ncessaire.
On a d'abord ralis le hacheur sans prendre en compte la partie commande.
NB: Les caractristiques de chaque composant seront dveloppes dans la partie 2, de plus les diffrents
courants, rsistances, tensions seront visibles sur lillustration 1 reprsentant un hacheur 4 quadrants.
Commande dun moteur pas pas avec un hacheur
Page 7
On a tabli le calcul suivant pour trouver la valeur de Rlimite :
V = (R I ) + V ( ) + V
IE_K1 = IEA + IC_K1
IC_K1 =IE_K1 - IEA = 0.8 - 0.1 = 0.7 A
R =V V ( )
V ( )
I
= 0.6
AN: = . .
. = .
A partir de cette formule, on se retrouve avec deux inconnues : Rlimite et Vext.
On a uniquement les deux inconnues qui sont des variables dpendantes l'une de l'autre, quand
Rlimite augmente, Vext augmente galement. On a donc dcid de fixer arbitrairement Vext pour obtenir une
valeur de rsistance qui soit la plus petite possible. Ainsi on obtient une valeur de Vext petite et on perd le
moins d'nergie possible.
On a donc pour Vext = 9 Volts, une valeur de Rlimite gale 11,14 ohms.
On passe prsent au courant ncessaire pour la commande de nos transistors. Ayant choisi un
optocoupleur qui dlivre au maximum un courant de 50 mA dans l'metteur, on s'est donc confront au
problme de courant faible dans la base du transistor de commande (Kn sur lillustration 1). Pour remdier
ce problme on a dcid d'amplifier ce courant l'aide d'un transistor (TA sur lillustration 1).
On arrive donc au calcul de RA pour fixer le courant du collecteur du transistor d'amplification
50 mA pour ainsi avoir 100 ma dans le courant de l'metteur du mme transistor.
Calcul de RA :
V = (R I ) + V
+ V ( ) + V ( )
IEA = ICA + IBA
ICA = IEA IBA
Pour saturer K1 il faut 0.1A dans IEA
ICA = 0.1 -0.05 =0.05 A
R =V V ( )
V ( ) V ( )
I
V ( ) = 1.2 V
( ) = 1.3
A.N : = . . .
. =
Commande dun moteur pas pas avec un hacheur
Page 8
On arrive donc au rglage du courant dans l'optocoupleur, pour cela on utilise une rsistance que
l'on calcule comme suit :
Calcul de Ropto
V = R I + V ( )
+ V + V ( )
+ V ( )
R =V V ( )
V ( )
V V ( )
I
=
On prend donc I = 50mA
V ( )
= 0.3V
V ( ) = 1.2V
V ( ) = 0.6V
V ( ) = 1.3V
A.N : = . . . .
. =
Maintenant que la partie courant fort de loptocoupleur a t dfinie, on va sintresser la
partie microcontrleur. Au niveau de la diode de loptocoupleur, il faut une tension de 1.6 volts, pour
rgler cette tension on utilise une rsistance RF que lon a calcul comme ci-dessous :
Calcul de RF :
Vcc = RF IF + VF
IFmax = 50 mA
On prend : IF = 20 mA
R =V V
I
AN: = .
. = 170
Comme on peut le voir il y a des diodes prsentes au niveau des transistors de commandes (Kn sur
lillustration 1), celles-ci permettent de dissiper lnergie prsente dans lune des bobines lorsquaucun des
interrupteurs (Kn) nest passant et que lon passe un autre hacheur.
A partir de nos calculs, nous sommes alls voir ce quil y avait disposition dans le magasin afin
de choisir nos composants.
Les hacheurs 4 quadrants raliss sous le logiciel de CAO Proteus sont visibles sur lannexe 4.
Commande dun moteur pas pas avec un hacheur
Page 9
2.2. Choix des composants
Pour les transistors Kn, nous avons cherch des transistors qui avaient un courant de saturation
proche de 1 Ampre. On a donc choisi les transistors SGS Thomson BD237. A saturation ce transistor a les
caractristiques suivantes :
Icsat = 1 A /// Ibsat = 0.1 A /// Vcesat = 0.6 V /// Vbesat = 1.3 V
Le choix de Rlimite a t dfini par la puissance dissipe qui vaut :
P = R * I2 = 11.14 * 0.72 = 5.46 W
On a donc d prendre une rsistance de puissance 10 Watts de 12 ohms.
Concernant le choix du transistor damplification, il nous fallait en sortie de lmetteur un courant
de 100 mA, nous avons donc choisi le transistor de PHILIPS semi-conductors 2N2219A avec les
caractristiques suivantes :
Iesat = 150 mA et Ibsat = 15 mA pour Vcesat = 0.3 V et Vbesat = 1.2 V
On a choisi loptocoupleur afin de faire une isolation galvanique, qui consiste sparer la partie
commande de la partie puissance, par sparation on entend aucune connexions lectrique entre les deux
parties. Ici on a choisi loptocoupleur CNY74-4 du fabricant TEMIC qui prsente les caractristiques
suivantes :
Une tension aux bornes de la diode de 1.6 Volts Un courant dans le collecteur du phototransistor de 50 mA.
Concernant la diode, on a choisi une diode laissant passer un courant de 1 Ampre. Dans le
magasin on a trouv des diodes laissant passer un courant maximum de 1 Ampre. Cependant tant
donn que nous tions proche de notre courant circulant dans la bobine, nous avons opt pour une diode
laissant passer un courant maximum de 3 ampres afin davoir la certitude que tout le courant circulant
dans la bobine puisse circuler dans la diode.
Pour les autres rsistances, on a une puissance dissipe de :
P = Ra * Ica2 = 118 * 0.052 = 0.295 W pour Ra P = Ropto * Ic_opto2 = 0.28 W pour Ropto
Ces puissances tant proches de 0.25 Watts, en accord avec les professeurs, nous avons dcid
de prendre des rsistances de 0.25 Watts (ces rsistances chaufferont durant lutilisation du moteur sans
aucun risque de perte du composant).
Concernant la rsistance RF, on a une puissance ses bornes de :
P = RF * IF2 = 170 * 0.022 = 0.068 W
Donc pour cette dernire une rsistance de 0.25 Watts est largement suffisante.
On ajoute que la tension Vext continue de 9V sera dlivre par une alimentation continue fourni
par Mr Sanchez.
Commande dun moteur pas pas avec un hacheur
Page 10
2.3. Routage
Afin dapporter un complment ce projet nous avons dcid de raliser le routage de la
carte de commande du moteur, celle-ci contenant lisolation galvanique, ltage damplification et le
hacheur. Pour cela nous avons dcid de raliser deux cartes diffrentes, une pour chaque bobine du
moteur. Il aurait donc suffi de raliser le routage une fois, puis on aurait imprim deux fois la mme carte.
Pour cela nous avons repris le schma de commande dune des bobines ralis durant les
TP de CAO. Il a tout de mme fallu faire attention au choix des composants mettre sur le schma afin
que leurs empreintes soient en accord avec nos composants, c'est--dire quils aient la mme taille mais
aussi que les trous soit percs et placs correctement. Voici donc le schma ralis sous le logiciel Proteus :
Commande dun moteur pas pas avec un hacheur
Page 11
Ensuite on a conu le routage de la carte sous Ares toujours laide de Proteus. On a pu
remarquer que les pistes avaient une largeur par dfaut de 10th, ce qui est normalement suffisant pour
notre courant qui est au maximum de 1A. En effet aprs le calcul on a trouv une largeur de 2.6th pour ce
courant. Mais aprs plusieurs conseils nous avons choisi une largeur de piste de 30th pour la partie
puissance et de 20th pour la partie commande. Voici donc le routage ralis :
On peut remarquer que nous avons d crer le connecteur J1 avec dix broches, il en existait dj
un dans la librairie de Proteus mais cela ne nous convenait pas car les broches ntait pas plac au bon
endroit. Nous avons aussi d augmenter le diamtre des pastilles pour les diodes car celle de Proteus
ntait pas assez grosses, donc nous avons cr un nouveau package en plus de celui qui existait dj
dans la librairie Proteus.
Pour des raisons de manque de temps, mais aussi le fait de ne pas avoir de composants de secours
en cas de problmes. Nous avons dcid de ne pas raliser ces cartes.
Commande dun moteur pas pas avec un hacheur
Page 12
3. PROGRAMMATION
3.1. Les composants utiliss
3.1.1. La boussole HMC6352
3.1.1.1. FONCTIONNEMENT GENERAL
La boussole possde deux adresses desclave :
Ladresse 0x42 pour crire une commande dans la RAM ou dans lEEPROM Ladresse 0x43 pour lire des donnes de la RAM ou de lEEPROM
La boussole possde deux modes de fonctionnement. On peut :
lui dire de calculer langle une certaine frquence et lors de la rception des donnes on obtiendra la dernire valeur calcule et stocke dans la RAM
ou on peut lui commander de calculer langle un instant t et dacqurir cette valeur calcule (beaucoup plus long car il faut attendre que le calcul soit effectu avant
dacqurir).
Voici les diffrentes adresses dcritures et de lectures de la boussole :
3.1.1.2. LIAISON I2C
Pour la liaison I2C, on utilisera une mulation de cette dernire et non le priphrique intgr du
microcontrleur. Pour ce faire nous avons donc d crire plusieurs sous-programmes permettant de raliser
les oprations quaurait fait le priphrique. Ceci a notamment t commenc en TD.
Tout dabord entre chaque envoi et rception, il faut envoyer des conditions de start et de stop
pour signifier une communication sur le bus I2C.
Pour envoyer une commande, on configure la broche SDA en sortie et on envoie bit bit sur un
signal dhorloge les donnes. Puis on configure la broche SDA en entre pour rceptionner le 9me bit qui
est le bit confirmant la bonne rception de la commande (ou de la donne). Cet acknowledge est 0
pour une bonne commande et 1 pour une mauvaise.
Pour rceptionner une donne, on fonctionne en deux parties car la donne reue est sur 16 bits.
Tout dabord, on envoie ladresse de lesclave signifiant la lecture puis passe en mode rception. En
rception on configure le port SDA en entre et on lit sa valeur chaque coup dhorloge de SCL. Pour la
rception de la premire partie (MSB) il faut que le matre envoie un acknowledge et pour la
deuxime partie (LSB) il faut que le matre envoie un non-acknowledge .
Voir les algorithmes pour les diffrentes fonctions dinitialisations et de transferts au paragraphe
3.2.3.
Commande dun moteur pas pas avec un hacheur
Page 13
3.1.2. Lcran LCD JM164A
Cet cran LCD possde le mme fonctionnement que celui tudi lors des TP de SP. Ainsi, nous
avons choisi de communiquer avec lui sur 4 bits pour conomiser les ports du microcontrleur.
Nous avons donc connect :
RS la broche RD0 E la broche RD1 R/W la masse car nous sommes toujours en criture donc au potentielle 0 Le bus de donnes sur les broches RD5RD2
Pour envoyer une commande, il faut mettre la broche RS 0. Puis (comme nous sommes en
fonctionnement 4 bits) crire la partie haute de la donne sur le port de donne et mettre E 1 pour
valider lenvoi et faire la mme chose pour la partie basse.
Pour envoyer un caractre, lenvoi sexcute de la mme faon (en deux parties) mais cette fois il
faut mettre la broche RS 1.
Pour la question dinitialisation de cet afficheur (choix du mode de fonctionnement, prsence du
curseur,) se rfrer aux algorithmes prsents au paragraphe 3.2.4.
3.1.3. Le clavier
Comme dit prcdemment, aucun clavier matric n'tant disponible, il fut remplac par un CAN
(Convertisseur Analogique Numrique) et un potentiomtre. Lide tant que lorsque l'on augmente ou
diminue le potentiomtre, la boussole se dcale du nord en fonction du sens tourn du potentiomtre (donc
en fonction de l'augmentation ou diminution de la tension).
Le potentiomtre est un potentiomtre classique pris dans le magasin. Le CAN est celui intgr au
microcontrleur que nous avons programm l'aide de la documentation (dont les registres configurs ont
t mis en annexe paragraphe 2.3).
Il nous a fallu configurer trois registres pour le CAN:ADCON0, ADCON1 et ADCON2.
Pour ADCON0, on a mis le 1er bit 0 afin d'activer le CAN, les 5 bits suivants sont 0 afin de
slectionner le canal AN0 du microcontrleur (qui est sur le port RA0) et qu'aucune conversion n'est en cours
(bit 2).Les bits 7 et 8 sont 0 comme indiqu dans la documentation.
Pour ADCON1, la combinaison 1110 sur les bits de poids faible permet de mettra AN0 en
analogique est les autres AN en numriques (donc de les laisser par dfaut) .On met les 2 bits suivants 0
afin d'avoir comme tension de rfrence VCC (bit 5) et la masse (bit 6).Les deux derniers bits tant 0
comme indiqu dans la documentation (unimplement).
Pour ADCON2, on divise par 32 la frquence du microcontrleur, car sinon d'aprs nos test,
lorsque le pr-diviseur diminue et que l'on tourne le potentiomtre, les changements sont trop rapide.
Lorsquon augmente le pr diviseur et que l'on augmente le potentiomtre les changements sont trop lents.
Le pr-diviseur 32 est dans notre cas le juste milieu. On met donc la combinaison 010 sur les bits de poids
faible du registre. On a besoin de Tad (>0.7 us daprs le constructeur) pour convertir un bit, on aura donc
besoin de 8 Tad pour convertir 8 bits (on veut faire une conversion de 8 bits ) donc on aura la combinaison
100 sur les bits 4 6.Le bit numro 7 est 0 car indiqu dans la documentation et le dernier bit (le 8) est
0 car on justifie gauche, cest dire que le rsultat sur 8 bits sera contenu sur la partie haute de adres
(le registre contenant la conversion).
Les algorithmes relatifs au fonctionnement de ce potentiomtre se trouvent au paragraphe 3.2.5.
Commande dun moteur pas pas avec un hacheur
Page 14
3.2. Les algorithmes
3.2.1. Attribution des ports (setup.h)
LED0 correspond LATEbits.LATE0 LED1 correspond LATEbits.LATE1 LED2 correspond LATEbits.LATE2 T1 correspond LATBbits.LATB1 T2 correspond LATBbits.LATB2 T3 correspond LATBbits.LATB3 T4 correspond LATBbits.LATB4 RS correspond LATDbits.LATD0 E correspond LATDbits.LATD1 DATA correspond LATD SCL correspond LATCbits.LATC0 SDA correspond LATCbits.LATC1 SDA_return correspond PORTCbits.RC1 SDA_IO correspond TRISCbits.TRISC1
Variables Globales constante vitesse_moteur
Commande dun moteur pas pas avec un hacheur
Page 15
3.2.2.2. MAIN()
Fonction principale du programme.
Dbut Initialisation de tout les composants avec init(0) Tant que(1) Obtenir langle de la boussole Obtenir langle du potentiomtre Orienter le moteur sur langle voulu du potentiomtre Fin tant que Fin
3.2.3. Fichier setup.c
3.2.3.1. TEMP_MS(ENTIER DUREE)
Cette fonction a pour but de crer une temporisation variable de lordre du ms. Elle est utilise dans
toutes les parties du programme. Toutefois on ne peut pas dpasser 348 ms.
Variables Entier buffer Dbut
duree=0XFFFF-(188*duree) buffer
Commande dun moteur pas pas avec un hacheur
Page 16
3.2.3.3. INIT_PORT()
Cette fonction sert initialiser tous les ports du microcontrleur. Si ils sont en sorties, en entres, ainsi
que leurs valeurs initiales.
Dbut Mettre le port D en sortie // afficheur LCD en sortie Initialiser 0 le port D Mettre le port B en sortie // hacheur en sortie Initialiser 0 le port B Mettre RC0 en sortie // SCL en sortie Mettre RC1 en sortie // SDA en sortie Mettre le port E en sortie // LED en sortie Initialiser 0 le port E Mettre RA0 en entre // potentiomtre en entre Fin
3.2.3.4. AFFICHER_DONNEES(ENTIER POSITION_CURSEUR, ENTIER ANGLE)
Cette fonction sert transformer un nombre dcimal de trois chiffres (angle) en caractres ascii dans
un tableau. Puis afficher ce nombre ascii sur lafficheur.
Variables Tableau de caractre st[]
Commande dun moteur pas pas avec un hacheur
Page 17
3.2.4.2. START()
Fonction ralisant la condition de start de li2c.
Debut SDA
Commande dun moteur pas pas avec un hacheur
Page 18
3.2.4.5. ENTIER RECEPTION_I2C(ENTIER ACK)
Cette fonction sert rceptionner un mot de 8 bits venant de la boussole et de lui rpondre par un
ACK ou un NACK (suivant le paramtre dentre).
Variables Entiers i, a=0x00
Dbut Configurer SDA en entre Pour i de 0 8 //on change la valeur de chaque bit Attendre 5us //gnration impulsion horloge SCL
Commande dun moteur pas pas avec un hacheur
Page 19
3.2.4.8. ENTIER RETOUR_ANGLE()
Cette fonction rceptionne les donnes de la boussole et renvoi langle par rapport au Nord en
degr.
Variables entiers MSB, LSB, angle Dbut Rceptionner la partie haute (MSB) et la partie basse (LSB) de langle Dcalage droite de 8 de MSB angle
Commande dun moteur pas pas avec un hacheur
Page 20
3.2.5.2. LCD_COM(ENTIER COMMANDE)
Cette fonction a pour but denvoyer une commande de 8 bits sur lcran LCD rceptionnant sur 4 bits.
Variables Entier buffer Dbut buffer
Commande dun moteur pas pas avec un hacheur
Page 21
3.2.5.5. LCD_STR(TABLEAU DE CARACTERE STR)
Fonction qui crit une chane de caractre.
Variables Entier i
Commande dun moteur pas pas avec un hacheur
Page 22
3.2.7. Fichier commande_hacheur.c
Variables Globales Entier static etat
Commande dun moteur pas pas avec un hacheur
Page 23
Fin selon Fin pour LED1
Commande dun moteur pas pas avec un hacheur
Page 24
3.2.7.5. TOURNER_AVEC_POT(ENTIER DEGRE_BOUS, ENTIER DEGRE_POT)
Cette fonction sert diriger laxe du moteur vers la valeur que nous retourne le potentiomtre (entre
0 et 360).
Variables Entier pas Dbut Si degre_bous < degre_pot pas 2 Tourner dans le sens horaire de pas Fin si Sinon pas 2 Tourner dans le sens antihoraire de pas Fin si Fin si Fin
Commande dun moteur pas pas avec un hacheur
Page 25
4. TESTS
4.1. Test hacheur
Nos premiers tests ont port sur les transistors Kn, pour ce faire nous avons remplac la bobine
par un ampremtre afin de relever la valeur et le sens du courant. On a donc command les transistors
K1 et K4 on a observ un courant de 0.8 A de plus lorsquon a command les transistors K2 et K3 on a
observ un courant de -0.8 A ce qui correspondait bien la valeur souhaite dans les calculs thorique. La
commande des transistors a ncessit l'utilisation d'une alimentation en source de courant que nous avons
rgl la valeur de 0.1 A. Lors de notre premier test, nous avions oubli de prendre en compte le fait
qu'une rsistance de quart de watt ntait pas suffisante au niveau de la rsistance Rlimite, on a donc eu une
surchauffe de cette rsistance.
Ensuite ayant constat que l'optocoupleur ne dlivrait pas assez de courant pour saturer le
transistor Kn, nous avons d ajouter un tage d'amplification, pour cela nous avons ajout le transistor Ta
qui a t command en simulant le courant de l'optocoupleur l'aide de l'alimentation. En faisant cet essai
nous avons eu les mmes rsultats que prcdemment.
Une fois ces essais effectus, nous avons ajout l'optocoupleur puis fait un nouvel essai avec les
sorties du microcontrleur.
Grce a cet essai on a remarqu que certains optocoupleurs prsents dans le boitier en contenant
quatre ne fonctionnaient pas, on a donc rsolu ce problme en les remplaants. Au pralable nous avons
mesur la tension Vcc et le courant maximal dlivr par le microcontrleur, nous avons mesur Vcc=5V et un
courant environ gale 36 mA en accord avec nos calculs thorique. Par la suite notre hacheur tait
oprationnel.
Pour finaliser l'tude du fonctionnement du hacheur, on a branch chaque bobine du moteur
leurs hacheurs respectifs. On a observ le moteur effectuait des pas ( l'aide d'un programme dvelopp
dans la partie programmation). Puis pour vrifier que les diodes effectuaient bien leur rle (dissipation de
l'nergie emmagasine dans la bobine) on a utilis un oscilloscope afin de s'assurer que le potentiel a la
sortie de la bobine tait inferieur au potentiel situ a la cathode de la diode suppos conductrice, cette
vrification s'est avr correcte.
4.2. Test programmation
4.2.1. I2C et boussole
De manire gnrale, nous avons eu un gros souci de comprhension de la documentation de la
boussole. Au-del du fait que cette dernire est en anglais, elle est trs mal expliqu et galement mal
prsente. De ce fait, nous avons perdu beaucoup de temps sur la comprhension de cette documentation,
les problmes ci-dessous sont notamment dus la documentation mais pas uniquement.
Nous avons cherch comprendre ce que renvoyait la boussole mais aussi si nous pouvions lui
envoyer des commandes. Lors des premiers tests, cette dernire ne ragissait pas. On a voulu voir si les
acknowledge taient bien mis 1 (voir algorithme send_i2c). Nous avons alors constats que ce n'tait pas
le cas. Nous avons tudi de nouveau la documentation et c'est ce moment que l'on a vu un mode appel
exit sleep mode (commande 'W'). Nous avons alors test le rveil de la boussole, les acknowledges
sont ce moment passs 1 (pour le rveil dans un premier temps). Ce problme a t long debugger.
Commande dun moteur pas pas avec un hacheur
Page 26
A partir de l, nous avons alors dcid d'envoyer de nouvelles commandes pour tester le bon
fonctionnement de la boussole (crire dans la RAM, lire la RAM). L encore, on pouvait voir des
acknowledge 0 toutefois le rveil avait son acknowledge 1. Nous avons cherch longtemps ou tait le
problme. On a alors dcid d'observer les signaux l'oscilloscope sur conseil de nos professeurs. On a
alors observ le signal suivant pour SCL :
On a alors cherch supprimer les petits crneaux, nos tests nous ont mens diminuer la
frquence de l'horloge d'envoi de donnes (SCL). Ainsi nous avons pu supprimer les petits crneaux qui ne
devaient pas tre l. Ici encore, ce dbogage a t long.
Les deux problmes prcdents rsolus, toutes les conditions ncessaires afin d'envoyer des
commandes taient runis, du moins nous le pensions. Nous avions crit le programme send_i2c afin de
rceptionner des donnes. Ce programme ne renvoyait pas ce qu'il tait cens renvoyer. Nous nous y
sommes intresss de plus prs, cest l que nous avons vu sur le programme mme que SDA et SCL
ntaient pas remis 0 au bon moment (dans notre programme nous le faisions pas du tout). Le rsultat
tait donc logique. Seulement, il n'y avait pas qu'un unique problme, en effet aprs avoir relu la
documentation, nous avons pu constater que l'envoi d'un acknowledge(ACK) n'tait pas suffisant, il fallait
aussi envoyer un NACK (non acknowledge). Ici encore le rsultat ne pouvait tre correct. Aprs ces deux
corrections, le programme rception ralisait la fonction voulut.
Ensuite, nous pouvions priori raliser tous les envois de commande que nous voulions. Nous avons
ralis plusieurs essais, en observant chaque envoi les acknowledge. L nous avons constat que ces
acknowledges taient pour certains 1 d'autres 0. Nous tions surpris de voir cela car en thorie les
programmes fonctionnaient tous. L encore, une tude de la documentation a t ncessaire, et nous
n'avions pas remarqu le tableau suivant, et surtout la colonne delays .
Commande dun moteur pas pas avec un hacheur
Page 27
Comme on peut le voir des temporisations dure prcise (que nous avons considrs comme
minimale en raison des ventuelles imprcisions des temporisations). Nous avions au dpart mis des
temporisations de la dure gale la temporisation utilis dans le programme I2C, en prcautions nous en
avions mis plusieurs, cependant ce n'tait pas suffisant. Nous avons donc corrig cette erreur en rajoutant
des temporisations qui respectaient au moins les dlais voulus. Si cette temporisation tait trop longue, cela
ne posait en aucun cas de problme, il y aurait juste eu un dlai de rponse entre chaque instruction.
Une fois la rception des donnes de la boussole et l'envoi de commande rgl, nous pouvions
enfin tester les donnes que renvoyait la boussole. Nous avions trouv un registre dans la documentation
renvoyant les coordonnes X et Y par rapport au nord. Nous pensions tort que nous devions consulter ce
registre selon un ordre prcis et rcuprer au fur et mesure les donnes X et Y par rapport au nord.
Nous nous sommes alors lancs dans l'criture de programme rendant un angle en fonction des
coordonnes. Cependant la consultation de ces coordonnes ncessitait un accs au registre de la RAM.
Nous cherchions par tous les moyens rcuprer les coordonnes X et Y, que nous avons russi en
consultant la documentation :
Nous avons alors remarqu un mode supplmentaire : heading mode . Nous ne russissions pas
comprendre quoi correspondait ce mode, on a alors test ce mode en envoyant la commande en
question (0x00). A ce moment on a remarque que l'on recevait l'angle lui-mme. Notre programme de
conversion n'tait donc pas ncessaire, et la documentation n'avait pas prcis que l'angle pouvait tre
directement rcuprer (du moins nous ne l'avions pas compris).
Pour finir, nous prcisons que les valeurs d'angles ne sont pas exactes en raison des perturbations
magntiques que peuvent crer divers appareils lectronique autour mais aussi cause du fait que la
boussole est dsaxe.
4.2.2. Ecran
Tout d'abord, le fonctionnement de l'cran a t long mettre en uvre car nous n'avions
pas reli la broche V5 de l'cran la masse. L'cran ne pouvait donc pas fonctionner. Ce bug a t rsolu
avec l'aide de nos collgues, ces derniers ont eu le mme problme.
Lors de l'insertion du CAN notre solution, nous avons d changer les ports de l'cran car
ce dernier se trouvait sur l'une des broches ncessaires au fonctionnement du CAN. Nous avons alors mis
l'cran sur le port C par accident (les broches du port C et D tant mlangs sur la carte), ce port tant
utiliss par l'USB, nous ne pouvions plus connecter notre PIC notre ordinateur. Nous avons l'aide de l'un
de nos professeurs remarqu cette erreur et remplac les broches utilises par le port C par uniquement
des broches du port D pour l'cran. Lcran tait aprs oprationnel.
Commande dun moteur pas pas avec un hacheur
Page 28
4.2.3. Clavier
Le principal problme constat rsidait dans la frquence, en augmentant le pr-diviseur et
en tournant le potentiomtre, les variations taient lentes arriver et l'inverse lorsque l'on diminue le
pr diviseur et qu'on augmente le potentiomtre, les variations sont plus rapides arriver .Nous avons
donc choisit le juste milieu et pris le pr-diviseur 32.
De manire gnrale, nous avions un problme avec nos temporisations variables, nous avions
envoy la partie basse avant la haute, ce qui tait une erreur. En envoyant la partie basse avant la haute,
lenvoi de la partie haute crasait la partie basse. Nous avons donc invers ces envois, la temporisation
fonctionnait ensuite comme voulu. Nous n'avions pas fait attention cela mais cette donne tait une
donne constructeur.
Commande dun moteur pas pas avec un hacheur
Page 29
CONCLUSION
Pour conclure, nous proposons une solution rpondant au cahier des charges, les petites
diffrences prsentes sont dues la boussole elle-mme qui peut tre perturbe par des appareils
lectroniques. En l'absence de clavier, ce point du cahier des charges n'est pas rempli et a donc t
remplac par un CAN et un potentiomtre.
Cependant, nous aurions pu avec plus d'heures de TP de synthse, amliorer nos programmes en
ajoutant notamment des interruptions ou simplement en les optimisant. De plus, pour pleinement remplir le
cahier des charges, avec plus de temps nous aurions pu commander un clavier et l'implanter dans notre
systme. Nous aurions pu galement crer une carte qui aurait comport les diffrents lments du
hacheur, ceci aurait fait suite au routage fait sur Proteus. Enfin, nous aurions pu nous passer des transistors
d'amplification en passant une commande de transistor ncessitant un courant dans la base plus petite.
Top Related