Quantique.net » Electronique » Projets » Utilisation d'un processeur Nios II  

Utilisation d'un processeur Nios II

<<précédent 1 2 3 4 suivant >>

 

III      Partie Software

 

Cette partie présente la mise en œuvre de fonctions permettant la commande des 6 moteurs du sens et de la vitesse du Robot. Nous avons aussi mis en place la gestion des boutons poussoirs de la carte, celle de l’afficheur LCD et de l’afficheur 2x7 segments.

 

III.1      Librairies C permettant le dialogue avec les registres

 

Le design de notre périphérique le rend simplement commandable par la lecture ou l’écriture des 9 registres du "Register_File" (voir chap II.4.1)

 

Ces opérations sont permises par l’appel des fonctions IORD (Input Output Read) pour la lecture et IOWR (Input Output Write) pour l’écriture.

Les prototypes de ces fonctions sont:

IOWR(adresse du périphérique, numéro du registre, données à écrire)

IORD(adresse du périphérique, numéro du registre) qui retourne une valeur sur 32 bits

 

Par exemple pour choisir d’activer le moteur 0 il suffit d’écrire :

IOWR(Z_ROBOT_0_BASE, 3, 0) ;

Z_ROBOT_0 est le nom choisi pour notre périphérique lors de son ajout au système sous SOPC builder (voir manuel d’utilisation de Quartus II chap V)

 

Les fonctions suivantes sont disponible via cette librairie :

 

Dans toutes les fonctions suivantes le paramètre address prend Z_ROBOT_0 comme valeur. De même, elles renvoient 0 si elles se sont correctement exécutées.

 

  • int altera_avalon_robot_init(unsigned int address, unsigned int clock_divider, unsigned int duty_cycle);

Cette fonction permet d’initialiser l’horloge contrôlant la vitesse de déplacement du robot.

Renvoie -1 si duty_cycle est supérieur à clock_divide.

 

  • int altera_avalon_robot_enable(unsigned int address);

Cette fonction permet de mettre en marche le moteur précédemment sélectionné et n’est pas bloquante.

Renvoie -2 si une erreur s’est produite.

 

  • int altera_avalon_robot_disable(unsigned int address);

Cette fonction permet de stopper le mouvement du robot.

Renvoie -3 si une erreur s’est produite.

 

  • int altera_avalon_robot_change_duty_cycle(unsigned int address, unsigned int duty_cycle);

Cette fonction permet de modifier le rapport cyclique de l’horloge contrôlant la vitesse de déplacement du robot.

Elle renvoie -1 si duty_cycle est supérieur à clock_divide.

 

  • int altera_avalon_robot_pas(unsigned int address, unsigned int address_moteur, unsigned int sens);

Cette fonction permet de mettre en marche un moteur dans le sens souhaité. Elle doit nécessairement s’accompagner de la fonction altera_avalon_robot_disable pour stopper le moteur mis en marche (par exemple au relâcher du bouton poussoir). Cette fonction n’est pas bloquante.

 

Renvoie -2 si une erreur s’est produite.

sens prend la valeur 1 ou 0.

address_moteur prend une valeur entière de 1 à 6.

 

  • int altera_avalon_robot_faire_n_pas(unsigned int address, unsigned int address_moteur, unsigned int sens,unsigned int pas);

Cette fonction permet de mettre en marche un moteur dans le sens souhaité pour un nombre de pas n. Tant que les pas ne sont pas terminés,  elle reste bloquante.

 

Renvoie -2 si une erreur s’est produite.

pas peut prendre une valeur comprise entre 1 et 10600.

 

  • int altera_avalon_robot_refaire_pom(unsigned int address);

Cette fonction permet de lancer la Prise d’Origine Machine. Elle est bloquante tant que celle-ci n’est pas terminée.

 

  • void sevenseg_set_dec(int hex)

Cette fonction affiche la valeur hexadécimale de hex sur l’afficheur 2x7 segments

 

 

III.2      Programme principal de contrôle du composant sans gestion du réseau

 

Le programme principal reçoit les interruptions des boutons poussoirs et fait appel aux fonctions précédemment décrites.

A chaque appui ou relâcher d’un des 4 boutons poussoirs de la carte, une interruption est générée. La fonction  IORD_ALTERA_AVALON_PIO_EDGE_CAP(BUTTON_PIO_BASE) prend une valeur représentative du numéro du bouton pressé (0x1 pour le bouton 1 0x2 pour le second, 0x4 pour le troisième et 0x8 pour le dernier).

De même, l’état (appuyé ou relâché) des boutons est lisible grâce à l’instruction IORD_ALTERA_AVALON_PIO_DATA(BUTTON_PIO_BASE) qui renvoie une valeur sur 4 bits. Chacun des bits représente l’état d’un des quatre boutons. Exemple : 0101 indique que les boutons 4 et 2 sont enfoncés.

 

N Pour aller plus loin :

Si l’on cherche dans le fichier "altera_avalon_pio\incaltera_avalon_pio_regs.h", on se rend compte que les fonctions sont simplement des IORD ou IOWR identiques à celles que l’on utilise pour notre périphérique robot.

 

 

IV      La Carte adaptatrice entre le robot et la carte de développement

 

Pour protéger les deux organes, il a été décidé de créer une carte intermédiaire. Celle-ci est d’une conception assez simple : les entrées et sorties sont reliées par des buffers (simple suiveurs) qui permettent à la fois de protéger les deux éléments et de convertir les signaux (venant du robot) de 5V en signaux (allant vers la carte) de 3.3V et vice versa.

 

Cette carte peut être alimentée de deux façons (sélection via les Jumpers) :

 

-         soit par un adaptateur secteur de 9V,

-         soit en utilisant les sorties d’alimentation de 5V et 3.3V de la carte de développement en les raccordant aux borniers de la carte adaptatrice prévus à cet effet.

 

Lorsque la carte est correctement alimentée, la DEL verte s’allume. Cette dernière permet de s’assurer du bon fonctionnement des trois buffers.

Lorsque la carte de développement est connectée à la carte adaptatrice, la DEL rouge est connecté à la broche 13 (PIN_N8) du connecteur J11. Elle permet ainsi de visualiser un signal choisi dans le code VHDL (par exemple le sens des moteurs)

 

               Conclusion

                

La technologie Nios est très novatrice et préfigure comme l’avenir de l’électronique. L’exemple de l’interface entre le robot réel et le robot virtuel nous a montré les immenses possibilités que peut offrir cette technologie. Voici deux applications trouvées sur Internet :

 

-         Développement d’un lecteur/encodeur de fichiers son MP3 sur FPGA

http://sjeffroy.free.fr/Liens/CV/annalePFE.pdf

-         Conception logicielle et matérielle d’un décodeur MP3 sur plateforme NIOS-Stratix

http://www.irisa.fr/cosi/Derrien/IFSIC/Diic3/2004-2005/MP3/Mini-projets-DIIC-2004.ppt

 

Le Nios semble avoir un bel avenir, il permet déjà de faire de la vidéo sur IP : http://www.globaldistribution.com/news/glyph/sonovision_P12-news495.pdf

 

 

               Bibliographie

www.altera.com

http://www.niosforum.com

http://www.opencores.org

 

 

 

               Liste des composants de la carte adaptatrice :

 

Description

Type

Quantité

Buffer

74HCT244 / Philips

2

Buffer

74LCX244M / STMicroelectronics

1

Régulateur 3.3V

L4931CV33

1

Régulateur 5V

MC7805CT

1

Résistance

1K

2

Condensateur

1uF

2

Condensateur

0.1uF

3

Condensateur

10nF

3

LED

HLMP-1700

1

LED

HLMP-1790

1

Header, 2X20-Pin

Connecteur 40 broches

1

Header 1X3-Pin

JUMPER

2

Diode

1N4148

1

DC Connector 9V

486-662

1

Bornier

MKDS 1.5/2-5.08

2

SUBD25 Femelle coudé CI avec harpon

SDBS25SN

1

 

 

 

 


<<précédent 1 2 3 4 suivant >>

Commentaires sur la page

Auteur: Visiteur Posté le 08/03/2010, 12:47:25
 
Auteur: Posté le 08/03/2010, 12:47:26
 
Auteur: jkgdaaca Posté le 31/12/2009, 12:09:41
 
Auteur: Posté le 31/12/2009, 12:09:41
 

Copyright 2006 Quantique.net
Sites partenaires :Grille de sudoku, gratuit Sudoku expert Sudoku diabolique Sedo - Buy and Sell Domain Names and Websites project info: quantique.net Statistics for project quantique.net etracker® web controlling instead of log file analysis