Playbot

De Ensiwiki
Aller à : navigation, rechercher

Cette page est dédiée aux savoirs et savoirs faire liés à la robotique : mécanique, électronique et programmation (spécifique) Les informations générales sur le club robotique de l'Ensimag sont disponibles sur le site de Playbot


Programmation

Le FPGA

Nous utilisons des cartes "Spartan 3 starter board" équipées du FPGA Spartan 3 XC3S1000. Le FPGA est configuré avec nos périphériques et un microprocesseur (soft core) fourni par Xilinx, d'architecture Microblaze. Le logiciel pour cette architecture peut être écrit en C avec les outils Xilinx. Manuel de référence de Microblaze (version 6 pour nous) : http://www.xilinx.com/support/documentation/sw_manuals/mb_ref_guide.pdf

Mémoire

La carte que nous utilisons comporte 3 types de mémoire :

  • La (S)RAM : mémoire vive statique, 2Mo, volatile (donc effacée à chaque RESET)
  • La BRAM (block RAM) : intégrée au FPGA, donc petite (32Ko)
  • La flash embarquée : (Platform Flash) 2Mo aussi. Elle contient les données de configuration du FPGA (qui est "effacé" à chaque coupure d'alimentation). C'est donc à partir d'elle qu'est chargé le programme après un RESET, qui se trouvera dans la BRAM. Cela limite fortement la taille du programme executé au démarrage.

À cause de la limitation d'espace mémoire pour le programme de démarrage, et pour des raisons de commodité, nous utilisons une carte mémoire externe branchée sur une de nos cartes d'entrée/sortie. Cette carte mémoire externe est une puce flash de 2Mo à partir de laquelle est chargé le programme après chaque démarrage (dans la RAM). La BRAM contient un "bootloader" dont le rôle est de se connecter à la carte mémoire, de copier son contenu dans la RAM, et de "sauter" dessus.

Cela nous fournit une grande flexibilité, en effet il n'y a pas besoin de reprogrammer la carte en permanence, il suffit de changer la carte mémoire insérée dans le robot.

Programmation ('download')

Il y a 2 manières principales pour programmer le FPGA :

  • La manière classique, qui envoie le programme dans la RAM, et qui sera donc effacé au prochain reboot (pas franchement utile dans notre cas, à part pour les tests rapides). Pour programmer de cette façon dans XPS : Device Configuration > Download bitstream
  • La Platform Flash : on ne peut pas la programmer directement dans XPS, il faut utiliser l'application iMPACT.

Il faut donc :

    • Convertir le fichier .bit généré par XPS en fichier .mcs
    • Envoyer ce fichier .mcs sur la flash avec le logiciel iMPACT. Script et explications coming soon aller voir ici en attendant (on a pas le même type de flash alors faire attention)
Remarque pour utilisateur avancéLa platform flash est câblée de telle sorte que le FPGA n'y a en fait pas accès une fois la phase de configuration terminée. Le pin "done" du FPGA, qui indique que celui-ci est configuré et prêt à fonctionner, est en effet relié au pin "CE" (clock enable) de la platform flash. Un jumper permet cependant de forcer la platform flash à rester active une fois la phase de configuration terminée. La documentation de la carte disponible à http://www.xilinx.com/support/documentation/boards_and_kits/ug130.pdf explique ce point en détail.


Installation ISE & EDK

Pour une machine linux :

  • Récupérer les CD/iso, et les numéros de série
  • Installer ISE (qui demande une vieille version de la libstdc++ : la plupart des distros maintiennent des paquets de compatibilité, cherchez "libstdc++-compat" ou quelque chose du genre)
  • Installer le Service Pack ISE (ici)
  • Sourcer le fichier settings de xilinx : . INSTALLPATH/settings.sh dans le bashrc : ça indique aux softs xilinx où aller chercher les fichiers, entre autres
  • Installer EDK et noter les variables définies par l'installateur, et leur valeur
  • Installer le Service Pack
  • Admirer l'installateur EDK qui vous affirme que oui oui, il a créé un joli fichier settings.sh. En fait, il ment et le fichier est tout pourri. Du coup, il faut modifier le fichier settings.sh créé avec les valeurs qu'on a noté avant, et le sourcer (toujours dans le bashrc)
  • Ajouter ce qu'il faut au path, et lancer xps
  • Tester en créant un projet

Cable JTAG

Préférer un cable parallèle, c'est mieux pris en charge C'est le cable qui sert à programmer le FGPA, et les drivers Linux ne sont fournis que dans les dernières version d'EDK. Pour pallier à ça, des gens on fait une bibliothèque qui se charge de ça. C'est expliqué par ici. Après s'être assuré que le noyau est configuré correctement (il faut avoir les modules parpart, parport_pc et ppdev, ou bien sûr en builtin) :

$ lsmod | grep parport 

On télécharge les sources

$ wget "http://cvs.zerfleddert.de/cgi-bin/viewcvs.cgi/usb-driver.tar.gz?view=tar"

Et on installe à coup de tar, configure et make (si vous êtes sous Linux vous savez faire) Il vous manquera peut-être libusb-devel, à installer

apt-get install libusb-dev

ou

yum install libusb-devel

On récupère libusb-driver.so, à mettre à un endroit correct, puis faire pointer LD_PRELOAD dessus. Dans le bashrc :

export LD_PRELOAD="chemin/vers/libusb-driver.so"

Ce qui peut ne pas aller ensuite :

  • les droits sur /dev/parpart0 :
sudo chown $(whoami) /dev/parport0
  • le cable bloqué :
$ impact -batch
> setMode -bscan
> cleancablelock
> quit 
  • Machin did not go high
    • Si dans iMPACT : edit/preferences/cocher "Use HIGHZ instead of BYPASS"
    • Si dans EDK : rajouter dans iMPACT command file (etc/download.cmd) : setPreference -pref UseHighz:TRUE

Utilisation des logiciels Xilinx

Choses à pas oublier :

  • Dans XPS, le truc pour choisir l'architecture quand on crée un projet est incomplet, même si il a l'air de pouvoir choisir le modèle qu'il faut : il faut ensuite aller dans les options du projet pour sélectionner le modèle exact de FPGA (au club : spartan3 rev E, device size xc3s1000, package ft256, speed grade -4), sinon ça foirera bizarrement à l'upload.

Modifications configuration logicielle du FPGA

Le menu Software > Software Platform Settings permet de changer un certain nombre de réglages : la fréquence du processeur, la version des composants et le mapping des entrées-sorties standard.

Écran LCD

Nous utilisons un afficheur à cristaux liquides afin d'afficher des informations pendant l'exécution des programmes, en plus de l'interface série sur laquelle nous pouvons écrire tous nos messages de debug. L'écran se pilote à travers le bus I²C. La documentation se trouve ici. Il nous faut récrire la fonction screen_write qui pose quelques problèmes (API pourrie). Pourquoi pas un écran graphique un jour... ?

Électronique

EAGLE

Eagle est un logiciel gratuit (pas opensource) pour la conception de circuits électroniques, et de circuits imprimés. Il est disponible sur le site de CadSoft

Conception du schéma

C'est la première phase pour la réalisation du circuit : dans un fichier 'schematic', on peut insérer les composants et relier les pattes librement (sans contrainte d'espace ou de chevauchement). C'est pendant cette phase qu'on définit les étiquettes et attributs des composants (noms, et valeurs des résistances par exemple).

Routage et placement des composants

Durant cette deuxième phase (fichier type 'board'), on définit la taille du circuit, on place les composants et les pistes (parfois, on n'échappe pas aux cartes double-face). ATTENTION : il ne faut jamais supprimer ou rajouter un composant dans cette vue, sans quoi les deux fichiers seraient désynchronisés (inconsistent). Il est alors difficile de revenir en arrière.

Gravure

Mécanique

SolidWorks

Moteurs