rapport_hacheur.pdf

30
COMMANDE D’UN MOTEUR PAS A PAS AVEC UN HACHEUR 25/06/2013 Projet de Synthèse Il s’agit ici d’orienter l’axe du moteur pas à pas dans une direction voulue par rapport au Nord magnétique. NICOLAS MENDES LUDOVIC REYNOUARD BACHIR MEGHNINE YOANN DUTEL

Transcript of rapport_hacheur.pdf

  • 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.