Professional Documents
Culture Documents
25/06/2013
Projet de Synthse
Il sagit ici dorienter laxe du moteur pas pas dans une direction voulue
par rapport au Nord magntique.
NICOLAS MENDES
BACHIR ME G HN IN E
LUDOVIC REYNOUARD
YOA N N D U T E L
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.
Page 1
INTRODUCTION
Page 2
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
Page 3
1. ETUDE PRELIMINAIRE
1.1.
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
FP1
FP2
Acqurir les
donnes
Afficher sur un
cran LCD
Commander le
moteur
Page 4
1.3.
Etude structurelle
Boussole
HMC6352
Deux hacheurs
quatre quadrants
Protocole I2C
Isolation galvanique
CNY74-4
Micro-Controlleur
PIC18F4550
Potentiomtre
100 k
Moteur
23LM-C303-10
Ecran LCD
JM164A
CAN
LEDS de contrle
Page 5
2. HACHEUR
2.1.
Ralisation du hacheur
Polarits
+
Vert
Bleu
Noir
Rouge
Noir
Rouge
Vert
Bleu
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.
Page 6
= (R
)+V
+V
AN:
= 0.6
.
= .
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
I
V
= 1.2 V
= 1.3
A.N : =
.
.
Page 7
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
R
I
=
+V
V
(
)
+V
+V
+V
On prend donc I
A.N :
= 50mA
= 0.3V
= 1.2V
= 0.6V
= 1.3V
V V
I
.
.
= 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.
Page 8
2.2.
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.
Page 9
2.3.
Routage
Page 10
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.
Page 11
3. PROGRAMMATION
3.1.
FONCTIONNEMENT GENERAL
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.
Page 12
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.
Page 13
3.2.
Les algorithmes
correspond
correspond
correspond
LATEbits.LATE0
LATEbits.LATE1
LATEbits.LATE2
T1
T2
T3
T4
correspond
correspond
correspond
correspond
LATBbits.LATB1
LATBbits.LATB2
LATBbits.LATB3
LATBbits.LATB4
RS
E
DATA
correspond
correspond
correspond
LATDbits.LATD0
LATDbits.LATD1
LATD
SCL
SDA
SDA_return
SDA_IO
correspond
correspond
correspond
correspond
LATCbits.LATC0
LATCbits.LATC1
PORTCbits.RC1
TRISCbits.TRISC1
Variables Globales
constante vitesse_moteur <- 40
INIT(ENTIER MODE)
Page 14
3.2.2.2.
MAIN()
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 <- duree
Dcalage 8 fois droite de buffer
Configurer le registre T0CON //16 bits, pr diviseur 64
Mettre buffer dans le registre TMR0H
Mettre duree dans le registre TMR0L
Mettre 0 le flag du timer
Dmarrer le timer
Attendre dbordement
Stopper le timer
Fin
3.2.3.2.
TEMP_US(ENTIER DUREE)
Cette fonction a pour but de crer une temporisation variable de lordre du s. Elle est utilise dans
toutes les parties du programme. Toutefois on ne peut dpasser 50 s.
Dbut
duree=0xFF-5*duree
Configurer le registre T0CON // pr diviseur 64, 8bits
Mettre duree dans TMR0L
Initialiser 0 le flag du timer
Dmarrer le timer
Attendre le dbordement
Arrter le timer
Fin
Page 15
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
Initialiser 0 le port D
Mettre le port B en sortie
Initialiser 0 le port B
Mettre RC0 en sortie
Mettre RC1 en sortie
Mettre le port E en sortie
Initialiser 0 le port E
Mettre RA0 en entre
Fin
3.2.3.4.
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[] <- {"
Entier buffer
deg NORD"}
Dbut
buffer <- angle/100;
st[0] <- buffer+'0';
angle <- angle - buffer*100
buffer <- angle/10
st[1] <- buffer+'0'
// on soustrait 20 et on rcupre le 0
// on transforme en '0'
Fin
TPO_I2C()
Cette fonction sert dfinir la frquence de fonctionnement de li2c. Ici on est rgler
Dbut
Mettre les bits du registre T2CON
Mettre le flag du registre PIR1 0
Mettre la valeur 250 dans le registre PR2
Mettre la valeur 0 dans le registre TMR2
Dmarrer le timer
Attendre dbordement
Arrter le timer
Fin
Page 16
//temporisation de 5us
//on compte de PR2 TMR2
3.2.4.2.
START()
STOP()
Cette fonction sert envoyer un mot de 8 bits la boussole qui nous renvoie un ACK ou un NACK.
Variables
Entier i
Dbut
Pour i de 0 7
//on change la valeur de chaque bit
SDA <- bit de rang i
Attendre 5us
SCL <- 1
Attendre 5us
SCL <- 0
Fin pour
Configurer SDA en entre
Attendre 5us
SCL <- 1
// on gnre le 9me signal dhorloge
Lire et stocker SDA
Attendre 5us
SCL <- 0
Configurer SDA en sortie
Attendre 5us
Retourner la valeur stocke de SDA
Fin
Page 17
3.2.4.5.
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
Attendre 5us
SCL <- 1
Attendre 5us
a = a|SDA_return;
Dcalage gauche de a
SCL <- 0;
Fin pour
Attendre 5us
Configurer SDA en sortie
Si ack = 1
SDA <- 0
Sinon
SDA <- 1
Fin si
SCL <- 1
Attendre 5us
SCL <- 0
SDA <- 0
Attendre 5us
Retourner a
Fin
3.2.4.6.
CALIBRAGE()
Cette fonction sert lancer un talonnage de la boussole (ne sert pas chaque dmarrage cf init()).
Dbut
Envoyer la commande de calibrage
Attendre 30 s
Envoyer la commande de fin de calibrage
Attendre 15 ms
Fin
3.2.4.7.
INIT_BOUSSOLE()
Cette fonction initialise la boussole. On la rveille puis on lui dit de calculer langle une frquence
de 20Hz pour que lon rceptionne la valeur la plus rcente de langle lors de notre acquisition.
Dbut
Envoyer la commande de sortie du mode veille
Attendre 150 us
Envoyer la commande dcriture dans la RAM puis le mode de fonctionnement
Attendre 150 us
Envoyer la commande dcriture dans la RAM puis la faon dont la boussole doit nous
renvoyer la donne
Attendre 150 us
Fin
Page 18
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 <- (MSB|LSB)/20
Afficher langle sur lcran
Retourner angle
Fin
LCD_CAR(ENTIER CARACTERE)
Cette fonction a pour but denvoyer un caractre de 8 bits sur lcran LCD rceptionnant sur 4 bits.
Variable
Entier buffer
Dbut
buffer <- caractere
buffer <<= 2
caractere >>= 2
Attendre 100 us
RS <- 1
E <- 0
DATA <- (caractere&0b00111100)|(DATA&0b00000011)
Attendre 5 us
E <- 1
Attendre 5 us
E <- 0
DATA <- (buffer&0b00111100)|(DATA&0b00000011)
Attendre 5 us
E <- 1
Attendre 5 us
E <- 0
Attendre 5 ms
Fin
// mode caractre
// envoi MSB de DATA
// dmarre l'envoi
// arrte l'envoi
// envoi LSB de DATA
Page 19
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
buffer <<= 2
commande >>= 2
Attendre 100 us
RS <- 0
E <- 0
DATA <- (commande&0b00111100)|(DATA&0b00000011)
Attendre 5 us
E <- 1
Attendre 5 us
E <- 0
DATA <- (buffer&0b00111100)|(DATA&0b00000011)
Attendre 5 us
E <- 1
Attendre 5 us
E <- 0
Attendre 5 ms
Fin
3.2.5.3.
// mode commande
// envoi MSB de DATA
// dmarre l'envoi
// arrte l'envoi
// envoi LSB de DATA
LCD_COM_INIT(ENTIER COMMANDE)
Cette fonction a pour but denvoyer une commande de 4 bits sur lcran LCD rceptionnant sur 4 bits.
Dbut
commande >>= 2
RS <- 0
E <- 0
DATA <- (commande&0b00111100) | (DATA&0b00000011)
Attendre 5 us
E <- 1;
Attendre 5 us
E <- 0
// mode commande
// dmarre lenvoi
// arrte l'envoi
Fin
3.2.5.4.
INIT_LCD()
Cette fonction sert initialiser lafficheur. Par exemple le choix du mode de fonctionnement en 4 bits
et non 8 bits, afficher le curseur, incrmenter ou dcrmenter le registre aprs lcriture dun caractre, La
mthode est dcrite sur la documentation du constructeur.
Dbut
Attendre 30 ms
lcd_com_init(0x30)
Attendre 5 ms
lcd_com_init(0x30)
Attendre 100 us
lcd_com_init(0x30)
lcd_com_init(0x20)
lcd_com(0x28)
lcd_com(0x0C)
lcd_com(0x06)
lcd_com(0x01)
Attendre 5 ms
Fin
Page 20
// 0x0C pour dire qu'on teint l'cran et qu'on affiche pas le curseur
// pour dcaler le curseur d'un cran vers la droite
// pour effacer l'cran
3.2.5.5.
Dbut
ADCON0 <- 0b00000001
ADCON1 <- 0b00001110
ADCON2 <- 0b00100010
Fin
3.2.6.2.
ENTIER CONVERTIR()
Cette fonction sert covertir les valeur en sortie du potentiometre qui sont analogique en valeurs
numrique de 0 255.
Dbut
attente 5s
lancement conversion
attente fin de conversion
retourne ADRESH
Fin
3.2.6.3.
ENTIER CONVERTIR_VALEUR_CAN_VERS_ANGLE()
Cette fonction sert convertir la valeur de la conversion analogique numrique en degr.
Variables
Entier angle, valeur_can
Dbut
valeur_can <- convertir()
angle <- valeur_can
angle <- angle * 360 / 255
afficher_donnees(0xD2,angle)
retourne angle
Fin
Page 21
INIT_MOTEUR()
Cette fonction sert initialiser les bobines du moteur pour que lon puisse dmarrer dans des
conditions optimales. Avec celle-ci, on est sr que le prochain transistor activer est le 1 (tat 0).
Dbut
T4 <- 1
Attendre 40 ms
T4 <- 0
Attendre 40 ms
T2 <- 1
Attendre 40 ms
T2 <- 0
Attendre 40 ms
T3 <- 1
Attendre 40 ms
T3 <- 0
Attendre 40 ms
T1 <- 1
Attendre 40 ms
T1 <- 0
Attendre 40 ms
Fin
3.2.7.2.
SENS_HORAIRE(ENTIER PAS)
cas 1 :
cas 2 :
cas 3 :
Page 22
T4 <- 1
Attendre 40 ms
T4 <- 0
Attendre 40 ms
etat <- 1
T2 <- 1
Attendre 40 ms
T2 <- 0
Attendre 40 ms
etat <- 2
T3 <- 1
Attendre 40 ms
T3 <- 0
Attendre 40 ms
etat <- 3
T1 <- 1
Attendre 40 ms
T1 <- 0
Attendre 40 ms
etat <- 0
Fin selon
Fin pour
LED1 <- 0
Fin
3.2.7.3.
SENS_ANTI_HORAIRE(ENTIER PAS)
cas 1 :
cas 2 :
cas 3 :
T3 <- 1
Attendre 40 ms
T3 <- 0
Attendre 40 ms
etat <- 1
T2 <- 1
Attendre 40 ms
T2 <- 0
Attendre 40 ms
etat <- 2
T4 <- 1
Attendre 40 ms
T4 <- 0
Attendre 40 ms
etat <- 3
T1 <- 1
Attendre 40 ms
T1 <- 0
Attendre 40 ms
etat <- 0
Fin selon
Fin pour
LED2 <- 0
Fin
3.2.7.4.
TOURNER_VERS_NORD(ENTIER DEGRE)
3.2.7.5.
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 <- (degre_pot - degre_bous) * 200 / 360
Si pas > 2
Tourner dans le sens horaire de pas
Fin si
Sinon
pas <- (degre_bous - degre_pot) * 200 / 360
Si pas > 2
Tourner dans le sens antihoraire de pas
Fin si
Fin si
Fin
Page 24
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
Page 25
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 .
Page 26
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.
Page 27
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.
Page 28
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.
Page 29