Table des matières:

Fabriquer n'importe quel capteur à partir d'un FPGA : 4 étapes
Fabriquer n'importe quel capteur à partir d'un FPGA : 4 étapes

Vidéo: Fabriquer n'importe quel capteur à partir d'un FPGA : 4 étapes

Vidéo: Fabriquer n'importe quel capteur à partir d'un FPGA : 4 étapes
Vidéo: FPGA, créer du matériel en programmant (Frédéric BISSON) 2024, Novembre
Anonim
Image
Image
Le FPGA
Le FPGA

La plupart des fabricants ont essayé de construire au moins une fois dans leur vie un thermomètre, peut-être que celui qu'ils ont à la maison n'est pas assez intelligent, ou peut-être qu'ils pensent qu'ils peuvent construire le prochain NEST. Néanmoins, à un moment donné, ils avaient un microcontrôleur avec leur logiciel de pointe connecté à un capteur de température (et peut-être d'autres capteurs: pression, lumière). Jusqu'à présent, tout est parfait, le logiciel fonctionne et le capteur détecte. Testons-le !

Hmmmm… peut-être qu'il devrait chauffer le capteur à l'aide d'un sèche-cheveux et le refroidir à l'aide de glace, cela fonctionne pendant un certain temps. Mais cela ne semble pas professionnel, le capteur change de valeurs trop rapidement si vous le chauffez, il ne chauffe pas plus de quelques degrés. Le projet est un échec ! Mais l'algorithme est nouveau, prend en compte beaucoup de facteurs, quel dommage qu'il se soit coincé à cette chose stupidement mineure.

Ma solution est la suivante: faire en sorte qu'un FPGA agisse comme un capteur avec des valeurs diffusées depuis un PC (ou stockées en mémoire, ou créées ad-hoc à l'intérieur du FPGA). Donc, pour votre précieux MCU, le FPGA ressemble à un capteur, mais pas à n'importe quel capteur: quel que soit le capteur que vous aimez. Peut-être que vous décidez que vous avez besoin de plus de résolution ou d'un temps de réponse plus rapide que prévu, vous devez changer le capteur. Commandez-le en ligne, il arrivera dans quelques jours, quelques mois, qui sait. Respin votre PCB ou commandez un module avec le nouveau capteur. Ou… quelques clics et le FPGA est configuré comme votre tout nouveau capteur et il peut émuler la configuration interne exacte.

Au moment d'écrire ces lignes, le FPGA pourrait agir comme un LM75 avec des données de température stockées dans la BRAM (sur le FPGA).

Étape 1: Le MCU

Mon MCU de choix est un LPC4337 sur un LPCXpresso. En plus, j'ai un shield (LPC General Purpose Shield) avec un écran et un vrai capteur LM75. Le LPC4337 est un ARM Cortex M4 fonctionnant à 200 MHz et un plus petit Cortex M0 (non utilisé ici). Le vrai capteur est connecté au périphérique I2C1 et notre virtuel sera connecté à I2C0. La source est disponible sur mon GitHub.

Comment le construire ? Téléchargez LPCXpresso IDE avec la bibliothèque LPCOpen. Importez cette bibliothèque dans l'IDE et ouvrez également le projet depuis GitHub. Tout doit être configuré et vous pouvez cliquer sur "Debug" dans le coin inférieur gauche.

L'ensemble du projet est basé sur l'un des exemples de NXP (pour montrer que mon projet simule un vrai capteur et n'a pas besoin de code spécial côté MCU). Dans le fichier principal (appelé iox_sensor.cpp) se trouve ce code:

#define SENSORS_ON_SHIELD

#if défini(SENSORS_ON_SHIELD) #define SHIELD_I2C I2C1 #elif défini(SENSORS_ON_FPGA) #define SHIELD_I2C I2C0 #endif

En changeant SENSOR_ON_SHIELD et SENSOR_OR_FPGA, l'utilisateur peut basculer au moment de la compilation vers quel capteur parler, le vrai ou le virtuel, car ils sont sur des broches I2C différentes.

Étape 2: Le FPGA

Ma carte FPGA de choix est une Artix 7 fabriquée par Digilent, ayant un Xilinx Arty 7. Deux des connecteurs PMod sont utilisés, un pour le débogage et un pour la charge utile réelle, la connexion avec la carte MCU.

Encore une fois, le code source du FPGA est disponible sur mon GitHub (dossier fpgaSide).

Comment le construire ? Téléchargez, achetez ou ouvrez Xilinx Vivado IDE. Importez les fichiers du projet depuis GitHub. L'un des fichiers (content.coe) contient les données de température au format brut qui seront transmises au faux capteur. Il existe également un fichier Excel du même nom qui aide à convertir les données de température lisibles par l'homme en données LM75 brutes. Je prévois de changer cela en un processus automatisé avec un logiciel écrit en Java, mais jusque-là, cette solution fonctionne. La synthèse et la mise en œuvre devraient prendre un certain temps, prenez cela en considération.

Étape 3: Comment ça marche ?

Comment ça marche?
Comment ça marche?
Comment ça marche?
Comment ça marche?

Comme je l'ai dit, pour le MCU, le FPGA ressemble à un capteur, plus exactement un capteur I2C. La sortie du périphérique I2C est connectée à l'entrée du FPGA. À l'intérieur du FPGA, il y a 3 composants principaux: - Contrôleur I2C - Périphérique I2C - Données Le contrôleur I2C reçoit les données I2C des broches du FPGA et les envoie au reste du FPGA et fait la même chose dans l'ordre inverse. Il maintient une machine à états interne pour le protocole I2C (en passant, voici la documentation pour cela). Qu'est-ce que ce composant envoie au périphérique I2C ? L'octet actuellement reçu, la position de cet octet dans la communication actuelle et si le MCU écrit ou lit depuis le FPGA. Le dispositif I2C reçoit les octets envoyés et met à jour la structure interne simulée du capteur. Il peut simplement mettre à jour le pointeur de registre ou demander de nouvelles données à la source de données. Le composant Data diffuse de nouveaux points de données. Actuellement, il ne s'agit que d'une mémoire ROM dont l'adresse est incrémentée (environ) deux fois par seconde.

Quel est mon objectif final ? Il est montré dans la deuxième image. C'est-à-dire: permettre à plus de dispositifs I2C (capteurs et autres) d'être simulables en même temps à l'intérieur du FPGA. Les données à l'arrière du capteur doivent être mises en cache dans le FPGA et diffusées à partir du PC via USB ou Ethernet. Prend en charge des capteurs plus avancés et d'autres périphériques I2C (mémoire, pilotes LED, etc.).

Étape 4: Tout assembler

Mettre tous ensemble
Mettre tous ensemble
Mettre tous ensemble
Mettre tous ensemble

Il est maintenant temps de tout connecter ensemble. Théoriquement, c'est simple: la carte mcu a un connecteur PMod (I2C0 & SSP0 (peut fonctionner comme SPI)). La carte Artix dispose de 4 connecteurs PMod qui peuvent être utilisés comme vous le souhaitez. Je choisis le connecteur D pour parler au MCU et le connecteur B pour me connecter à mon analyseur logique.

Avertissement

Vous ne pouvez pas connecter les deux cartes ensemble comme ça. Pourquoi? PMod a été conçu pour faciliter la connexion d'une carte maître/hôte (qui fournit l'alimentation) à une carte esclave/capteur (qui reçoit l'alimentation). Mais dans ce projet, les deux cartes fournissent de l'énergie et si vous connectez la sortie 3,3 V d'une carte à la sortie 3,3 V de l'autre carte, de mauvaises choses peuvent arriver. Mais ils pourraient ne pas et vous pourriez juste changer les paramètres des rails d'alimentation du FPGA (ils sont très soigneusement conçus). Ne prenez donc pas ce risque et déplacez le connecteur d'une broche vers la gauche (et retournez également la carte FPGA) comme le montrent les images ci-dessus. Voici la spécification PMod, vous pouvez l'étudier, ce que j'ai fait en bref, c'est de ne pas connecter les VCC des deux cartes.

Conseillé: